summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKaleb Keithley <kaleb@freedesktop.org>2003-11-25 19:28:43 +0000
committerKaleb Keithley <kaleb@freedesktop.org>2003-11-25 19:28:43 +0000
commit8d0fb38d615cd751bcc82e4f383233eb3e82fd23 (patch)
tree882d6cf6c87d16f4d9a804224056c232cbc75408
Initial revision
-rw-r--r--man/via.man124
-rw-r--r--src/via.h578
-rw-r--r--src/via_accel.c1211
-rw-r--r--src/via_bandwidth.c385
-rw-r--r--src/via_bios.h713
-rw-r--r--src/via_cursor.c191
-rw-r--r--src/via_dga.c355
-rw-r--r--src/via_dri.c610
-rw-r--r--src/via_dri.h85
-rw-r--r--src/via_driver.c3276
-rw-r--r--src/via_driver.h427
-rw-r--r--src/via_i2c.c413
-rw-r--r--src/via_mode.h870
-rw-r--r--src/via_priv.h71
-rw-r--r--src/via_regs.h212
-rw-r--r--src/via_shadow.c276
-rw-r--r--src/via_swov.c2073
-rw-r--r--src/via_swov.h55
-rw-r--r--src/via_video.c1325
-rw-r--r--src/via_video.h135
-rw-r--r--src/via_xvpriv.h98
21 files changed, 13483 insertions, 0 deletions
diff --git a/man/via.man b/man/via.man
new file mode 100644
index 0000000..8f38fa8
--- /dev/null
+++ b/man/via.man
@@ -0,0 +1,124 @@
+.\" $XFree86: xc/programs/Xserver/hw/xfree86/drivers/via/via.man,v 1.3 2003/08/04 10:32:26 eich Exp $
+.\" shorthand for double quote that works everywhere.
+.ds q \N'34'
+.TH VIA __drivermansuffix__ __vendorversion__
+.SH NAME
+via \- VIA video driver
+.SH SYNOPSIS
+.nf
+.B "Section \*qDevice\*q"
+.BI " Identifier \*q" devname \*q
+.B " Driver \*qvia\*q"
+\ \ ...
+.B EndSection
+.fi
+.SH DESCRIPTION
+.B via
+is an XFree86 driver for VIA video chipsets.
+.PP
+The
+.B via
+driver supports the VIA CLE266 (CLE3122, CLE3022) chipset video and the
+VIA KM400/K8M800 VT3204/5/7204/5 video, including 2D acceleration and the Xv
+video overlay extensions. Flat panel, TV and VGA outputs are supported.
+.PP
+Direct rendering 3D is available for this device only using XFree 4.2
+builds. If you are interested in porting the DRI support to current XFree
+then please see the DRI project on sourceforge.net.
+.PP
+.SH CONFIGURATION DETAILS
+Please refer to XF86Config(__filemansuffix__) for general configuration
+details. This section only covers configuration details specific to this
+driver.
+.PP
+The following driver
+.B options
+are supported
+.TP
+.BI "Option \*qNoAccel\*q \*q" boolean \*q
+Disable or enable acceleration. Default: acceleration is enabled.
+.TP
+.BI "Option \*qHWCursor\*q \*q" boolean \*q
+Disable or enable use of hardware cursors. The default is enabled.
+.TP
+.BI "Option \*qSWCursor\*q \*q" boolean \*q
+Disable or enable the use of a software cursor. The default is disabled.
+.TP
+.BI "Option \*qShadowFB\*q \*q" boolean \*q
+Use a shadow frame buffer. This is required when rotating the display,
+but otherwise defaults to disabled.
+.TP
+.BI "Option \*qUseBIOS\*q \*q" boolean \*q
+Use the video BIOS to set modes. Default false.
+.TP
+.BI "Option \*qVideoRAM\*q \*q" boolean \*q
+Override the VideoRAM auto detection. This should never be needed.
+.TP
+.BI "Option \*qRotate\*q \*q" string \*q
+Rotate the display either clockwise ("CW") or counter clockwise ("CCW").
+Rotation is only supported unaccelerated.
+.TP
+.BI "Option \*qActiveDevice\*q \*q" string \*q
+Specify the active device combination. The choices are "CRT,TV",
+"CRT,LCD", "CRT,DFP", "TV,DFP", "CRT", "LCD", or "DFP", for the various
+supported combinations of VGA CRT output, LCD panel output, DFP output and
+TV output.
+.TP
+.BI "Option \*qLCDDualEdge\*q \*q" boolean \*q
+Use dual edge mode to set the LCD.
+.TP
+.BI "Option \*qCenter\*q \*q" boolean \*q
+Disable or enable image centering on DVI displays.
+.TP
+.BI "Option \*qPanelSize\*q \*q" string \*q
+Specify the size (width x height) of the LCD panel attached to the
+system. Sizes 640x480, 800x600, 1024x768, 1280x1024, and 1400x1050
+are supported.
+.TP
+.BI "Option \*qTVDotCrawl\*q \*q" boolean \*q
+Disable or enable dotcrawl.
+.TP
+.BI "Option \*qTVType\*q \*q" string \*q
+Specify TV output format. The driver currently supports NTSC and
+PAL timings only.
+.TP
+.BI "Option \*qTVOutput\*q \*q" string \*q
+Specify which TV output to use. The driver supports "S-Video", "Composite",
+"SC", "RGB" and "YCbCr" outputs. Note that on many boards the composite
+video port is shared with audio out and jumper selected.
+.TP
+.BI "Option \*qTVVScan\*q \*q" string \*q
+Specify whether to underscan the TV image (bordering it with black), or
+overscan it (losing the edges of the picture).
+.TP
+.BI "Option \*qTVHScale\*q \*q" string \*q
+Not yet implemented.
+.TP
+.BI "Option \*qTVEncoder\*q \*q" string \*q
+Specify which TV encoder chip is attached to the system. The driver
+currently supports the VT1621 and VT1622 encoders.
+.TP
+.BI "Option \*qRefresh\*q \*q" integer \*q
+Specify the desired refresh.
+.TP
+.BI "Option \*qDisableVQ\*q \*q" boolean \*q
+Disable or enable the use of VQ. VQ is enabled by default.
+.TP
+.BI "Option \*qCap0Deinterlace\*q \*q" string \*q
+Set the capture 0 port interlace mode to either Bob or Weave.
+.TP
+.BI "Option \*qCap1Deinterlace\*q \*q" string \*q
+Set the capture 1 port interlace mode to either Bob or Weave.
+.TP
+.BI "Option \*qCap0FieldSwap\*q \*q" string \*q
+Perform field swapping on capture port 0.
+.TP
+.BI "Option \*qDRIXINERAMA\*q \*q" boolean \*q
+Set DRI Xinerama mode. Currently unsupported.
+.TP
+.BI "Option \*qNoDDCValue\*q \*q" boolean \*q
+Disable the use of DDC to set the horizontal sync and vertical refresh.
+.SH "SEE ALSO"
+XFree86(1), XF86Config(__filemansuffix__), xf86config(1), Xserver(1), X(__miscmansuffix__)
+.SH AUTHORS
+Authors include: ...
diff --git a/src/via.h b/src/via.h
new file mode 100644
index 0000000..9732461
--- /dev/null
+++ b/src/via.h
@@ -0,0 +1,578 @@
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/via/via.h,v 1.4 2003/08/27 15:16:06 tsi Exp $ */
+/*
+ * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
+ * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sub license,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ * VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef _VIA_H_
+#define _VIA_H_ 1
+
+/* Video status flag */
+
+#define VIDEO_SHOW 0x80000000 /*Video on*/
+#define VIDEO_HIDE 0x00000000 /*Video off*/
+#define VIDEO_MPEG_INUSE 0x08000000 /*Video is used with MPEG */
+#define VIDEO_HQV_INUSE 0x04000000 /*Video is used with HQV*/
+#define VIDEO_CAPTURE0_INUSE 0x02000000 /*Video is used with CAPTURE 0*/
+#define VIDEO_CAPTURE1_INUSE 0x00000000 /*Video is used with CAPTURE 1*/
+#define VIDEO_1_INUSE 0x01000000 /*Video 1 is used with software flip*/
+#define VIDEO_3_INUSE 0x00000000 /*Video 3 is used with software flip*/
+#define MPEG_USE_V1 0x00010000 /*[16] : 1:MPEG use V1, 0:MPEG use V3*/
+#define MPEG_USE_V3 0x00000000 /*[16] : 1:MPEG use V1, 0:MPEG use V3*/
+#define MPEG_USE_HQV 0x00020000 /*[17] : 1:MPEG use HQV,0:MPEG not use HQV*/
+#define MPEG_USE_HW_FLIP 0x00040000 /*[18] : 1:MPEG use H/W flip,0:MPEG use S/W flip*/
+#define MPEG_USE_SW_FLIP 0x00000000 /*[18] : 1:MPEG use H/W flip,0:MPEG use S/W flip*/
+#define CAP0_USE_V1 0x00001000 /*[12] : 1:Capture 0 use V1, 0:Capture 0 use V3*/
+#define CAP0_USE_V3 0x00000000 /*[12] : 1:Capture 0 use V1, 0:Capture 0 use V3*/
+#define CAP0_USE_HQV 0x00002000 /*[13] : 1:Capture 0 use HQV,0:Capture 0 not use HQV*/
+#define CAP0_USE_HW_FLIP 0x00004000 /*[14] : 1:Capture 0 use H/W flip,0:Capture 0 use S/W flip*/
+#define CAP0_USE_CCIR656 0x00008000 /*[15] : 1:Capture 0 use CCIR656,0:Capture 0 CCIR601*/
+#define CAP1_USE_V1 0x00000100 /*[ 8] : 1:Capture 1 use V1, 0:Capture 1 use V3*/
+#define CAP1_USE_V3 0x00000000 /*[ 8] : 1:Capture 1 use V1, 0:Capture 1 use V3*/
+#define CAP1_USE_HQV 0x00000200 /*[ 9] : 1:Capture 1 use HQV,0:Capture 1 not use HQV*/
+#define CAP1_USE_HW_FLIP 0x00000400 /*[10] : 1:Capture 1 use H/W flip,0:Capture 1 use S/W flip */
+#define SW_USE_V1 0x00000010 /*[ 4] : 1:Capture 1 use V1, 0:Capture 1 use V3 */
+#define SW_USE_V3 0x00000000 /*[ 4] : 1:Capture 1 use V1, 0:Capture 1 use V3 */
+#define SW_USE_HQV 0x00000020 /*[ 5] : 1:Capture 1 use HQV,0:Capture 1 not use HQV */
+
+/*
+#define VIDEO1_INUSE 0x00000010 //[ 4] : 1:Video 1 is used with S/W flip
+#define VIDEO1_USE_HQV 0x00000020 //[ 5] : 1:Video 1 use HQV with S/W flip
+#define VIDEO3_INUSE 0x00000001 //[ 0] : 1:Video 3 is used with S/W flip
+#define VIDEO3_USE_HQV 0x00000002 //[ 1] : 1:Video 3 use HQV with S/W flip
+*/
+
+/* H/W registers for Video Engine */
+
+/*
+ * bus master
+ */
+#define PCI_MASTER_ENABLE 0x01
+#define PCI_MASTER_SCATTER 0x00
+#define PCI_MASTER_SINGLE 0x02
+#define PCI_MASTER_GUI 0x00
+#define PCI_MASTER_VIDEO 0x04
+#define PCI_MASTER_INPUT 0x00
+#define PCI_MASTER_OUTPUT 0x08
+
+/*
+ * video registers
+ */
+#define V_FLAGS 0x00
+#define V_CAP_STATUS 0x04
+#define V_FLIP_STATUS 0x04
+#define V_ALPHA_WIN_START 0x08
+#define V_ALPHA_WIN_END 0x0C
+#define V_ALPHA_CONTROL 0x10
+#define V_CRT_STARTADDR 0x14
+#define V_CRT_STARTADDR_2 0x18
+#define V_ALPHA_STRIDE 0x1C
+#define V_COLOR_KEY 0x20
+#define V_ALPHA_STARTADDR 0x24
+#define V_CHROMAKEY_LOW 0x28
+#define V_CHROMAKEY_HIGH 0x2C
+#define V1_CONTROL 0x30
+#define V12_QWORD_PER_LINE 0x34
+#define V1_STARTADDR_1 0x38
+#define V1_STARTADDR_Y1 V1_STARTADDR_1
+#define V1_STRIDE 0x3C
+#define V1_WIN_START_Y 0x40
+#define V1_WIN_START_X 0x42
+#define V1_WIN_END_Y 0x44
+#define V1_WIN_END_X 0x46
+#define V1_STARTADDR_2 0x48
+#define V1_STARTADDR_Y2 V1_STARTADDR_2
+#define V1_ZOOM_CONTROL 0x4C
+#define V1_MINI_CONTROL 0x50
+#define V1_STARTADDR_0 0x54
+#define V1_STARTADDR_Y0 V1_STARTADDR_0
+#define V_FIFO_CONTROL 0x58
+#define V1_STARTADDR_3 0x5C
+#define V1_STARTADDR_Y3 V1_STARTADDR_3
+#define HI_CONTROL 0x60
+#define SND_COLOR_KEY 0x64
+#define ALPHA_V3_PREFIFO_CONTROL 0x68
+#define V1_SOURCE_HEIGHT 0x6C
+#define HI_TRANSPARENT_COLOR 0x70
+#define V_DISPLAY_TEMP 0x74 /* No use */
+#define ALPHA_V3_FIFO_CONTROL 0x78
+#define V3_SOURCE_WIDTH 0x7C
+#define V3_COLOR_KEY 0x80
+#define V1_ColorSpaceReg_1 0x84
+#define V1_ColorSpaceReg_2 0x88
+#define V1_STARTADDR_CB0 0x8C
+#define V1_OPAQUE_CONTROL 0x90 /* To be deleted */
+#define V3_OPAQUE_CONTROL 0x94 /* To be deleted */
+#define V_COMPOSE_MODE 0x98
+#define V3_STARTADDR_2 0x9C
+#define V3_CONTROL 0xA0
+#define V3_STARTADDR_0 0xA4
+#define V3_STARTADDR_1 0xA8
+#define V3_STRIDE 0xAC
+#define V3_WIN_START_Y 0xB0
+#define V3_WIN_START_X 0xB2
+#define V3_WIN_END_Y 0xB4
+#define V3_WIN_END_X 0xB6
+#define V3_ALPHA_QWORD_PER_LINE 0xB8
+#define V3_ZOOM_CONTROL 0xBC
+#define V3_MINI_CONTROL 0xC0
+#define V3_ColorSpaceReg_1 0xC4
+#define V3_ColorSpaceReg_2 0xC8
+#define V3_DISPLAY_TEMP 0xCC /* No use */
+#define V1_STARTADDR_CB1 0xE4
+#define V1_STARTADDR_CB2 0xE8
+#define V1_STARTADDR_CB3 0xEC
+#define V1_STARTADDR_CR0 0xF0
+#define V1_STARTADDR_CR1 0xF4
+#define V1_STARTADDR_CR2 0xF8
+#define V1_STARTADDR_CR3 0xFC
+
+/* Video Capture Engine Registers
+ * Capture Port 1
+ */
+#define CAP0_MASKS 0x100
+#define CAP1_MASKS 0x104
+#define CAP0_CONTROL 0x110
+#define CAP0_H_RANGE 0x114
+#define CAP0_V_RANGE 0x118
+#define CAP0_SCAL_CONTROL 0x11C
+#define CAP0_VBI_H_RANGE 0x120
+#define CAP0_VBI_V_RANGE 0x124
+#define CAP0_VBI_STARTADDR 0x128
+#define CAP0_VBI_STRIDE 0x12C
+#define CAP0_ANCIL_COUNT 0x130
+#define CAP0_MAXCOUNT 0x134
+#define CAP0_VBIMAX_COUNT 0x138
+#define CAP0_DATA_COUNT 0x13C
+#define CAP0_FB_STARTADDR0 0x140
+#define CAP0_FB_STARTADDR1 0x144
+#define CAP0_FB_STARTADDR2 0x148
+#define CAP0_STRIDE 0x150
+/* Capture Port 2 */
+#define CAP1_CONTROL 0x154
+#define CAP1_SCAL_CONTROL 0x160
+#define CAP1_VBI_H_RANGE 0x164 /*To be deleted*/
+#define CAP1_VBI_V_RANGE 0x168 /*To be deleted*/
+#define CAP1_VBI_STARTADDR 0x16C /*To be deleted*/
+#define CAP1_VBI_STRIDE 0x170 /*To be deleted*/
+#define CAP1_ANCIL_COUNT 0x174 /*To be deleted*/
+#define CAP1_MAXCOUNT 0x178
+#define CAP1_VBIMAX_COUNT 0x17C /*To be deleted*/
+#define CAP1_DATA_COUNT 0x180
+#define CAP1_FB_STARTADDR0 0x184
+#define CAP1_FB_STARTADDR1 0x188
+#define CAP1_STRIDE 0x18C
+
+/* SUBPICTURE Registers */
+#define SUBP_CONTROL_STRIDE 0x1C0
+#define SUBP_STARTADDR 0x1C4
+#define RAM_TABLE_CONTROL 0x1C8
+#define RAM_TABLE_READ 0x1CC
+
+/* HQV Registers */
+#define HQV_CONTROL 0x1D0
+#define HQV_SRC_STARTADDR_Y 0x1D4
+#define HQV_SRC_STARTADDR_U 0x1D8
+#define HQV_SRC_STARTADDR_V 0x1DC
+#define HQV_SRC_FETCH_LINE 0x1E0
+#define HQV_FILTER_CONTROL 0x1E4
+#define HQV_MINIFY_CONTROL 0x1E8
+#define HQV_DST_STARTADDR0 0x1EC
+#define HQV_DST_STARTADDR1 0x1F0
+#define HQV_DST_STARTADDR2 0x1FC
+#define HQV_DST_STRIDE 0x1F4
+#define HQV_SRC_STRIDE 0x1F8
+
+
+/*
+ * Video command definition
+ */
+/* #define V_ALPHA_CONTROL 0x210 */
+#define ALPHA_WIN_EXPIRENUMBER_4 0x00040000
+#define ALPHA_WIN_CONSTANT_FACTOR_4 0x00004000
+#define ALPHA_WIN_CONSTANT_FACTOR_12 0x0000c000
+#define ALPHA_WIN_BLENDING_CONSTANT 0x00000000
+#define ALPHA_WIN_BLENDING_ALPHA 0x00000001
+#define ALPHA_WIN_BLENDING_GRAPHIC 0x00000002
+#define ALPHA_WIN_PREFIFO_THRESHOLD_12 0x000c0000
+#define ALPHA_WIN_FIFO_THRESHOLD_8 0x000c0000
+#define ALPHA_WIN_FIFO_DEPTH_16 0x00100000
+
+/* V_CHROMAKEY_LOW 0x228 */
+#define V_CHROMAKEY_V3 0x80000000
+
+/* V1_CONTROL 0x230 */
+#define V1_ENABLE 0x00000001
+#define V1_FULL_SCREEN 0x00000002
+#define V1_YUV422 0x00000000
+#define V1_RGB32 0x00000004
+#define V1_RGB15 0x00000008
+#define V1_RGB16 0x0000000C
+#define V1_YCbCr420 0x00000010
+#define V1_COLORSPACE_SIGN 0x00000080
+#define V1_SRC_IS_FIELD_PIC 0x00000200
+#define V1_SRC_IS_FRAME_PIC 0x00000000
+#define V1_BOB_ENABLE 0x00400000
+#define V1_FIELD_BASE 0x00000000
+#define V1_FRAME_BASE 0x01000000
+#define V1_SWAP_SW 0x00000000
+#define V1_SWAP_HW_HQV 0x02000000
+#define V1_SWAP_HW_CAPTURE 0x04000000
+#define V1_SWAP_HW_MC 0x06000000
+/* #define V1_DOUBLE_BUFFERS 0x00000000 */
+/* #define V1_QUADRUPLE_BUFFERS 0x18000000 */
+#define V1_EXPIRE_NUM 0x00050000
+#define V1_EXPIRE_NUM_A 0x000a0000
+#define V1_EXPIRE_NUM_F 0x000f0000 /* jason */
+#define V1_FIFO_EXTENDED 0x00200000
+#define V1_ON_CRT 0x00000000
+#define V1_ON_SND_DISPLAY 0x80000000
+#define V1_FIFO_32V1_32V2 0x00000000
+#define V1_FIFO_48V1_32V2 0x00200000
+
+/* V12_QWORD_PER_LINE 0x234 */
+#define V1_FETCH_COUNT 0x3ff00000
+#define V1_FETCHCOUNT_ALIGNMENT 0x0000000f
+#define V1_FETCHCOUNT_UNIT 0x00000004 /* Doubld QWORD */
+
+/* V1_STRIDE */
+#define V1_STRIDE_YMASK 0x00001fff
+#define V1_STRIDE_UVMASK 0x1ff00000
+
+/* V1_ZOOM_CONTROL 0x24C */
+#define V1_X_ZOOM_ENABLE 0x80000000
+#define V1_Y_ZOOM_ENABLE 0x00008000
+
+/* V1_MINI_CONTROL 0x250 */
+#define V1_X_INTERPOLY 0x00000002 /* X interpolation */
+#define V1_Y_INTERPOLY 0x00000001 /* Y interpolation */
+#define V1_YCBCR_INTERPOLY 0x00000004 /* Y, Cb, Cr all interpolation */
+#define V1_X_DIV_2 0x01000000
+#define V1_X_DIV_4 0x03000000
+#define V1_X_DIV_8 0x05000000
+#define V1_X_DIV_16 0x07000000
+#define V1_Y_DIV_2 0x00010000
+#define V1_Y_DIV_4 0x00030000
+#define V1_Y_DIV_8 0x00050000
+#define V1_Y_DIV_16 0x00070000
+
+/* V1_STARTADDR0 0x254 */
+#define SW_FLIP_ODD 0x08000000
+
+/* V_FIFO_CONTROL 0x258
+ * IA2 has 32 level FIFO for packet mode video format
+ * 32 level FIFO for planar mode video YV12. with extension reg 230 bit 21 enable
+ * 16 level FIFO for planar mode video YV12. with extension reg 230 bit 21 disable
+ * BCos of 128 bits. 1 level in IA2 = 2 level in VT3122
+ */
+#define V1_FIFO_DEPTH12 0x0000000B
+#define V1_FIFO_DEPTH16 0x0000000F
+#define V1_FIFO_DEPTH32 0x0000001F
+#define V1_FIFO_DEPTH48 0x0000002F
+#define V1_FIFO_DEPTH64 0x0000003F
+#define V1_FIFO_THRESHOLD6 0x00000600
+#define V1_FIFO_THRESHOLD8 0x00000800
+#define V1_FIFO_THRESHOLD12 0x00000C00
+#define V1_FIFO_THRESHOLD16 0x00001000
+#define V1_FIFO_THRESHOLD24 0x00001800
+#define V1_FIFO_THRESHOLD32 0x00002000
+#define V1_FIFO_THRESHOLD40 0x00002800
+#define V1_FIFO_THRESHOLD48 0x00003000
+#define V1_FIFO_THRESHOLD56 0x00003800
+#define V1_FIFO_THRESHOLD61 0x00003D00
+#define V1_FIFO_PRETHRESHOLD10 0x0A000000
+#define V1_FIFO_PRETHRESHOLD12 0x0C000000
+#define V1_FIFO_PRETHRESHOLD29 0x1d000000
+#define V1_FIFO_PRETHRESHOLD40 0x28000000
+#define V1_FIFO_PRETHRESHOLD44 0x2c000000
+#define V1_FIFO_PRETHRESHOLD56 0x38000000
+#define V1_FIFO_PRETHRESHOLD61 0x3D000000
+
+/* ALPHA_V3_FIFO_CONTROL 0x278
+ * IA2 has 32 level FIFO for packet mode video format
+ * 32 level FIFO for planar mode video YV12. with extension reg 230 bit 21 enable
+ * 16 level FIFO for planar mode video YV12. with extension reg 230 bit 21 disable
+ * 8 level FIFO for ALPHA
+ * BCos of 128 bits. 1 level in IA2 = 2 level in VT3122
+ */
+#define V3_FIFO_DEPTH16 0x0000000F
+#define V3_FIFO_DEPTH24 0x00000017
+#define V3_FIFO_DEPTH32 0x0000001F
+#define V3_FIFO_DEPTH48 0x0000002F
+#define V3_FIFO_DEPTH64 0x0000003F
+#define V3_FIFO_THRESHOLD8 0x00000800
+#define V3_FIFO_THRESHOLD12 0x00000C00
+#define V3_FIFO_THRESHOLD16 0x00001000
+#define V3_FIFO_THRESHOLD24 0x00001800
+#define V3_FIFO_THRESHOLD32 0x00002000
+#define V3_FIFO_THRESHOLD40 0x00002800
+#define V3_FIFO_THRESHOLD48 0x00003000
+#define V3_FIFO_THRESHOLD56 0x00003800
+#define V3_FIFO_THRESHOLD61 0x00003D00
+#define V3_FIFO_PRETHRESHOLD10 0x0000000A
+#define V3_FIFO_PRETHRESHOLD12 0x0000000C
+#define V3_FIFO_PRETHRESHOLD29 0x0000001d
+#define V3_FIFO_PRETHRESHOLD40 0x00000028
+#define V3_FIFO_PRETHRESHOLD44 0x0000002c
+#define V3_FIFO_PRETHRESHOLD56 0x00000038
+#define V3_FIFO_PRETHRESHOLD61 0x0000003D
+#define V3_FIFO_MASK 0x0000007F
+#define ALPHA_FIFO_DEPTH8 0x00070000
+#define ALPHA_FIFO_THRESHOLD4 0x04000000
+#define ALPHA_FIFO_MASK 0xffff0000
+#define ALPHA_FIFO_PRETHRESHOLD4 0x00040000
+
+/* IA2 */
+#define ColorSpaceValue_1 0x140020f2
+#define ColorSpaceValue_2 0x0a0a2c00
+
+#define ColorSpaceValue_1_3123C0 0x13000DED
+#define ColorSpaceValue_2_3123C0 0x13171000
+
+/* For TV setting */
+#define ColorSpaceValue_1TV 0x140020f2
+#define ColorSpaceValue_2TV 0x0a0a2c00
+
+/* V_COMPOSE_MODE 0x298 */
+#define SELECT_VIDEO_IF_COLOR_KEY 0x00000001 /* select video if (color key),otherwise select graphics */
+#define SELECT_VIDEO3_IF_COLOR_KEY 0x00000020 /* For 3123C0, select video3 if (color key),otherwise select graphics */
+#define SELECT_VIDEO_IF_CHROMA_KEY 0x00000002 /* 0x0000000a //select video if (chroma key ),otherwise select graphics */
+#define ALWAYS_SELECT_VIDEO 0x00000000 /* always select video,Chroma key and Color key disable */
+#define COMPOSE_V1_V3 0x00000000 /* V1 on top of V3 */
+#define COMPOSE_V3_V1 0x00100000 /* V3 on top of V1 */
+#define COMPOSE_V1_TOP 0x00000000
+#define COMPOSE_V3_TOP 0x00100000
+#define V1_COMMAND_FIRE 0x80000000 /* V1 commands fire */
+#define V3_COMMAND_FIRE 0x40000000 /* V3 commands fire */
+#define V_COMMAND_LOAD 0x20000000 /* Video register always loaded */
+#define V_COMMAND_LOAD_VBI 0x10000000 /* Video register always loaded at vbi without waiting source flip */
+#define V3_COMMAND_LOAD 0x08000000 /* CLE_C0 Video3 register always loaded */
+#define V3_COMMAND_LOAD_VBI 0x00000100 /* CLE_C0 Video3 register always loaded at vbi without waiting source flip */
+#define SECOND_DISPLAY_COLOR_KEY_ENABLE 0x00010000
+
+/* V3_ZOOM_CONTROL 0x2bc */
+#define V3_X_ZOOM_ENABLE 0x80000000
+#define V3_Y_ZOOM_ENABLE 0x00008000
+
+/* V3_MINI_CONTROL 0x2c0 */
+#define V3_X_INTERPOLY 0x00000002 /* X interpolation */
+#define V3_Y_INTERPOLY 0x00000001 /* Y interpolation */
+#define V3_YCBCR_INTERPOLY 0x00000004 /* Y, Cb, Cr all interpolation */
+#define V3_X_DIV_2 0x01000000
+#define V3_X_DIV_4 0x03000000
+#define V3_X_DIV_8 0x05000000
+#define V3_X_DIV_16 0x07000000
+#define V3_Y_DIV_2 0x00010000
+#define V3_Y_DIV_4 0x00030000
+#define V3_Y_DIV_8 0x00050000
+#define V3_Y_DIV_16 0x00070000
+
+/* SUBP_CONTROL_STRIDE 0x3c0 */
+#define SUBP_HQV_ENABLE 0x00010000
+#define SUBP_IA44 0x00020000
+#define SUBP_AI44 0x00000000
+#define SUBP_STRIDE_MASK 0x00001fff
+#define SUBP_CONTROL_MASK 0x00070000
+
+/* RAM_TABLE_CONTROL 0x3c8 */
+#define RAM_TABLE_RGB_ENABLE 0x00000007
+
+/* CAPTURE0_CONTROL 0x310 */
+#define C0_ENABLE 0x00000001
+#define BUFFER_2_MODE 0x00000000
+#define BUFFER_3_MODE 0x00000004
+#define BUFFER_4_MODE 0x00000006
+#define SWAP_YUYV 0x00000000
+#define SWAP_UYVY 0x00000100
+#define SWAP_YVYU 0x00000200
+#define SWAP_VYUY 0x00000300
+#define IN_601_8 0x00000000
+#define IN_656_8 0x00000010
+#define IN_601_16 0x00000020
+#define IN_656_16 0x00000030
+#define DEINTER_ODD 0x00000000
+#define DEINTER_EVEN 0x00001000
+#define DEINTER_ODD_EVEN 0x00002000
+#define DEINTER_FRAME 0x00003000
+#define VIP_1 0x00000000
+#define VIP_2 0x00000400
+#define H_FILTER_2 0x00010000
+#define H_FILTER_4 0x00020000
+#define H_FILTER_8_1331 0x00030000
+#define H_FILTER_8_12221 0x00040000
+#define VIP_ENABLE 0x00000008
+#define EN_FIELD_SIG 0x00000800
+#define VREF_INVERT 0x00100000
+#define FIELD_INPUT_INVERSE 0x00400000
+#define FIELD_INVERSE 0x40000000
+
+#define C1_H_MINI_EN 0x00000800
+#define C0_H_MINI_EN 0x00000800
+#define C1_V_MINI_EN 0x04000000
+#define C0_V_MINI_EN 0x04000000
+#define C1_H_MINI_2 0x00000400
+
+/* CAPTURE1_CONTROL 0x354 */
+#define C1_ENABLE 0x00000001
+
+/* V3_CONTROL 0x2A0 */
+#define V3_ENABLE 0x00000001
+#define V3_FULL_SCREEN 0x00000002
+#define V3_YUV422 0x00000000
+#define V3_RGB32 0x00000004
+#define V3_RGB15 0x00000008
+#define V3_RGB16 0x0000000C
+#define V3_COLORSPACE_SIGN 0x00000080
+#define V3_EXPIRE_NUM 0x00040000
+#define V3_EXPIRE_NUM_F 0x000f0000
+#define V3_BOB_ENABLE 0x00400000
+#define V3_FIELD_BASE 0x00000000
+#define V3_FRAME_BASE 0x01000000
+#define V3_SWAP_SW 0x00000000
+#define V3_SWAP_HW_HQV 0x02000000
+#define V3_FLIP_HW_CAPTURE0 0x04000000
+#define V3_FLIP_HW_CAPTURE1 0x06000000
+
+/* V3_ALPHA_FETCH_COUNT 0x2B8 */
+#define V3_FETCH_COUNT 0x3ff00000
+#define ALPHA_FETCH_COUNT 0x000003ff
+
+/* HQV_CONTROL 0x3D0 */
+#define HQV_RGB32 0x00000000
+#define HQV_RGB16 0x20000000
+#define HQV_RGB15 0x30000000
+#define HQV_YUV422 0x80000000
+#define HQV_YUV420 0xC0000000
+#define HQV_ENABLE 0x08000000
+#define HQV_SRC_SW 0x00000000
+#define HQV_SRC_MC 0x01000000
+#define HQV_SRC_CAPTURE0 0x02000000
+#define HQV_SRC_CAPTURE1 0x03000000
+#define HQV_FLIP_EVEN 0x00000000
+#define HQV_FLIP_ODD 0x00000020
+#define HQV_SW_FLIP 0x00000010 /* Write 1 to flip HQV buffer */
+#define HQV_DEINTERLACE 0x00010000 /* First line of odd field will be repeated 3 times */
+#define HQV_FIELD_2_FRAME 0x00020000 /* Src is field. Display each line 2 times */
+#define HQV_FRAME_2_FIELD 0x00040000 /* Src is field. Display field */
+#define HQV_FRAME_UV 0x00000000 /* Src is Non-interleaved */
+#define HQV_FIELD_UV 0x00100000 /* Src is interleaved */
+#define HQV_IDLE 0x00000008
+#define HQV_FLIP_STATUS 0x00000001
+#define HQV_DOUBLE_BUFF 0x00000000
+#define HQV_TRIPLE_BUFF 0x04000000
+#define HQV_SUBPIC_FLIP 0x00008000
+#define HQV_FIFO_STATUS 0x00001000
+
+/* HQV_FILTER_CONTROL 0x3E4 */
+#define HQV_H_LOWPASS_2TAP 0x00000001
+#define HQV_H_LOWPASS_4TAP 0x00000002
+#define HQV_H_LOWPASS_8TAP1 0x00000003 /* To be deleted */
+#define HQV_H_LOWPASS_8TAP2 0x00000004 /* To be deleted */
+#define HQV_H_HIGH_PASS 0x00000008
+#define HQV_H_LOW_PASS 0x00000000
+#define HQV_V_LOWPASS_2TAP 0x00010000
+#define HQV_V_LOWPASS_4TAP 0x00020000
+#define HQV_V_LOWPASS_8TAP1 0x00030000
+#define HQV_V_LOWPASS_8TAP2 0x00040000
+#define HQV_V_HIGH_PASS 0x00080000
+#define HQV_V_LOW_PASS 0x00000000
+#define HQV_H_HIPASS_F1_DEFAULT 0x00000040
+#define HQV_H_HIPASS_F2_DEFAULT 0x00000000
+#define HQV_V_HIPASS_F1_DEFAULT 0x00400000
+#define HQV_V_HIPASS_F2_DEFAULT 0x00000000
+#define HQV_H_HIPASS_F1_2TAP 0x00000050
+#define HQV_H_HIPASS_F2_2TAP 0x00000100
+#define HQV_V_HIPASS_F1_2TAP 0x00500000
+#define HQV_V_HIPASS_F2_2TAP 0x01000000
+#define HQV_H_HIPASS_F1_4TAP 0x00000060
+#define HQV_H_HIPASS_F2_4TAP 0x00000200
+#define HQV_V_HIPASS_F1_4TAP 0x00600000
+#define HQV_V_HIPASS_F2_4TAP 0x02000000
+#define HQV_H_HIPASS_F1_8TAP 0x00000080
+#define HQV_H_HIPASS_F2_8TAP 0x00000400
+#define HQV_V_HIPASS_F1_8TAP 0x00800000
+#define HQV_V_HIPASS_F2_8TAP 0x04000000
+/* IA2 NEW */
+#define HQV_V_FILTER2 0x00080000
+#define HQV_H_FILTER2 0x00000008
+#define HQV_H_TAP2_11 0x00000041
+#define HQV_H_TAP4_121 0x00000042
+#define HQV_H_TAP4_1111 0x00000401
+#define HQV_H_TAP8_1331 0x00000221
+#define HQV_H_TAP8_12221 0x00000402
+#define HQV_H_TAP16_1991 0x00000159
+#define HQV_H_TAP16_141041 0x0000026A
+#define HQV_H_TAP32 0x0000015A
+#define HQV_V_TAP2_11 0x00410000
+#define HQV_V_TAP4_121 0x00420000
+#define HQV_V_TAP4_1111 0x04010000
+#define HQV_V_TAP8_1331 0x02210000
+#define HQV_V_TAP8_12221 0x04020000
+#define HQV_V_TAP16_1991 0x01590000
+#define HQV_V_TAP16_141041 0x026A0000
+#define HQV_V_TAP32 0x015A0000
+#define HQV_V_FILTER_DEFAULT 0x00420000
+#define HQV_H_FILTER_DEFAULT 0x00000040
+
+
+
+
+/* HQV_MINI_CONTROL 0x3E8 */
+#define HQV_H_MINIFY_ENABLE 0x00000800
+#define HQV_V_MINIFY_ENABLE 0x08000000
+#define HQV_VDEBLOCK_FILTER 0x80000000
+#define HQV_HDEBLOCK_FILTER 0x00008000
+
+
+#define CHROMA_KEY_LOW 0x00FFFFFF
+#define CHROMA_KEY_HIGH 0x00FFFFFF
+
+/* V_CAP_STATUS */
+#define V_ST_UPDATE_NOT_YET 0x00000003
+#define V1_ST_UPDATE_NOT_YET 0x00000001
+#define V3_ST_UPDATE_NOT_YET 0x00000008
+
+#define VBI_STATUS 0x00000002
+
+/*
+ * Macros for Video MMIO
+ */
+#ifndef V4L2
+#define VIDInB(port) *((volatile CARD8 *)(pVia->VidMapBase + (port)))
+#define VIDInW(port) *((volatile CARD16 *)(pVia->VidMapBase + (port)))
+#define VIDInD(port) *((volatile CARD32 *)(pVia->VidMapBase + (port)))
+#define VIDOutB(port, data) *((volatile CARD8 *)(pVia->VidMapBase + (port))) = (data)
+#define VIDOutW(port, data) *((volatile CARD16 *)(pVia->VidMapBase + (port))) = (data)
+#define VIDOutD(port, data) *((volatile CARD32 *)(pVia->VidMapBase + (port))) = (data)
+#define MPGOutD(port, data) *((volatile CARD32 *)(lpMPEGMMIO +(port))) = (data)
+#define MPGInD(port) *((volatile CARD32 *)(lpMPEGMMIO +(port)))
+#endif
+
+/*
+ * Macros for GE MMIO
+ */
+#define GEInW(port) *((volatile CARD16 *)(lpGEMMIO + (port)))
+#define GEInD(port) *((volatile CARD32 *)(lpGEMMIO + (port)))
+#define GEOutW(port, data) *((volatile CARD16 *)(lpGEMMIO + (port))) = (data)
+#define GEOutD(port, data) *((volatile CARD32 *)(lpGEMMIO + (port))) = (data)
+
+#endif /* _VIA_H_ */
diff --git a/src/via_accel.c b/src/via_accel.c
new file mode 100644
index 0000000..e083a66
--- /dev/null
+++ b/src/via_accel.c
@@ -0,0 +1,1211 @@
+/*
+ * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
+ * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sub license,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ * VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/via/via_accel.c,v 1.4 2003/08/04 10:32:27 eich Exp $ */
+
+/*************************************************************************
+ *
+ * File: via_accel.c
+ * Content: 2D acceleration function for VIA/S3G UniChrom
+ *
+ ************************************************************************/
+
+#include "Xarch.h"
+#include "xaalocal.h"
+#include "xaarop.h"
+#include "miline.h"
+
+#include "via_driver.h"
+#include "via_regs.h"
+
+/* Forward declaration of functions used in the driver */
+
+static void VIASetupForScreenToScreenCopy(
+ ScrnInfoPtr pScrn,
+ int xdir,
+ int ydir,
+ int rop,
+ unsigned planemask,
+ int trans_color);
+
+static void VIASubsequentScreenToScreenCopy(
+ ScrnInfoPtr pScrn,
+ int x1,
+ int y1,
+ int x2,
+ int y2,
+ int w,
+ int h);
+
+static void VIASetupForSolidFill(
+ ScrnInfoPtr pScrn,
+ int color,
+ int rop,
+ unsigned planemask);
+
+static void VIASubsequentSolidFillRect(
+ ScrnInfoPtr pScrn,
+ int x,
+ int y,
+ int w,
+ int h);
+
+static void VIASetupForMono8x8PatternFill(
+ ScrnInfoPtr pScrn,
+ int pattern0,
+ int pattern1,
+ int fg,
+ int bg,
+ int rop,
+ unsigned planemask);
+
+static void VIASubsequentMono8x8PatternFillRect(
+ ScrnInfoPtr pScrn,
+ int patOffx,
+ int patOffy,
+ int x,
+ int y,
+ int w,
+ int h);
+
+static void VIASetupForColor8x8PatternFill(
+ ScrnInfoPtr pScrn,
+ int patternx,
+ int patterny,
+ int rop,
+ unsigned planemask,
+ int trans_color);
+
+static void VIASubsequentColor8x8PatternFillRect(
+ ScrnInfoPtr pScrn,
+ int patOffx,
+ int patOffy,
+ int x,
+ int y,
+ int w,
+ int h);
+
+static void VIASetupForCPUToScreenColorExpandFill(
+ ScrnInfoPtr pScrn,
+ int fg,
+ int bg,
+ int rop,
+ unsigned planemask);
+
+static void VIASubsequentScanlineCPUToScreenColorExpandFill(
+ ScrnInfoPtr pScrn,
+ int x,
+ int y,
+ int w,
+ int h,
+ int skipleft);
+
+static void VIASetupForScreenToScreenColorExpand(
+ ScrnInfoPtr pScrn,
+ int bg,
+ int fg,
+ int rop,
+ unsigned planemask);
+
+static void VIASubsequentScreenToScreenColorExpand(
+ ScrnInfoPtr pScrn,
+ int x,
+ int y,
+ int w,
+ int h,
+ int srcx,
+ int srcy,
+ int offset);
+
+static void VIASetupForImageWrite(
+ ScrnInfoPtr pScrn,
+ int rop,
+ unsigned planemask,
+ int trans_color,
+ int bpp,
+ int depth);
+
+static void VIASubsequentImageWriteRect(
+ ScrnInfoPtr pScrn,
+ int x,
+ int y,
+ int w,
+ int h,
+ int skipleft);
+
+static void
+VIASetupForSolidLine(
+ ScrnInfoPtr pScrn,
+ int color,
+ int rop,
+ unsigned int planemask);
+
+static void
+VIASubsequentSolidTwoPointLine(
+ ScrnInfoPtr pScrn,
+ int x1,
+ int y1,
+ int x2,
+ int y2,
+ int flags);
+
+static void
+VIASubsequentSolidHorVertLine(
+ ScrnInfoPtr pScrn,
+ int x,
+ int y,
+ int len,
+ int dir);
+
+static void
+VIASetupForDashedLine(
+ ScrnInfoPtr pScrn,
+ int fg,
+ int bg,
+ int rop,
+ unsigned int planemask,
+ int length,
+ unsigned char *pattern);
+
+static void
+VIASubsequentDashedTwoPointLine(
+ ScrnInfoPtr pScrn,
+ int x1,
+ int y1,
+ int x2,
+ int y2,
+ int flags,
+ int phase);
+
+static void VIASetClippingRectangle(
+ ScrnInfoPtr pScrn,
+ int x1,
+ int y1,
+ int x2,
+ int y2);
+
+static void VIADisableClipping( ScrnInfoPtr );
+
+
+void
+VIAInitialize2DEngine(ScrnInfoPtr pScrn)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ CARD32 dwVQStartAddr, dwVQEndAddr;
+ CARD32 dwVQLen, dwVQStartL, dwVQEndL, dwVQStartEndH;
+ CARD32 dwGEMode;
+
+ /* init 2D engine regs to reset 2D engine */
+ VIASETREG(0x04, 0x0);
+ VIASETREG(0x08, 0x0);
+ VIASETREG(0x0c, 0x0);
+ VIASETREG(0x10, 0x0);
+ VIASETREG(0x14, 0x0);
+ VIASETREG(0x18, 0x0);
+ VIASETREG(0x1c, 0x0);
+ VIASETREG(0x20, 0x0);
+ VIASETREG(0x24, 0x0);
+ VIASETREG(0x28, 0x0);
+ VIASETREG(0x2c, 0x0);
+ VIASETREG(0x30, 0x0);
+ VIASETREG(0x34, 0x0);
+ VIASETREG(0x38, 0x0);
+ VIASETREG(0x3c, 0x0);
+ VIASETREG(0x40, 0x0);
+
+ /* Init AGP and VQ regs */
+ VIASETREG(0x43c, 0x00100000);
+ VIASETREG(0x440, 0x00000000);
+ VIASETREG(0x440, 0x00333004);
+ VIASETREG(0x440, 0x60000000);
+ VIASETREG(0x440, 0x61000000);
+ VIASETREG(0x440, 0x62000000);
+ VIASETREG(0x440, 0x63000000);
+ VIASETREG(0x440, 0x64000000);
+ VIASETREG(0x440, 0x7D000000);
+
+ VIASETREG(0x43c, 0xfe020000);
+ VIASETREG(0x440, 0x00000000);
+
+ if (pVia->VQStart != 0) {
+ /* Enable VQ */
+ dwVQStartAddr = pVia->VQStart;
+ dwVQEndAddr = pVia->VQEnd;
+ dwVQStartL = 0x50000000 | (dwVQStartAddr & 0xFFFFFF);
+ dwVQEndL = 0x51000000 | (dwVQEndAddr & 0xFFFFFF);
+ dwVQStartEndH = 0x52000000 | ((dwVQStartAddr & 0xFF000000) >> 24) |
+ ((dwVQEndAddr & 0xFF000000) >> 16);
+ dwVQLen = 0x53000000 | (VIA_VQ_SIZE >> 3);
+
+ VIASETREG(0x43c, 0x00fe0000);
+ VIASETREG(0x440, 0x080003fe);
+ VIASETREG(0x440, 0x0a00027c);
+ VIASETREG(0x440, 0x0b000260);
+ VIASETREG(0x440, 0x0c000274);
+ VIASETREG(0x440, 0x0d000264);
+ VIASETREG(0x440, 0x0e000000);
+ VIASETREG(0x440, 0x0f000020);
+ VIASETREG(0x440, 0x1000027e);
+ VIASETREG(0x440, 0x110002fe);
+ VIASETREG(0x440, 0x200f0060);
+
+ VIASETREG(0x440, 0x00000006);
+ VIASETREG(0x440, 0x40008c0f);
+ VIASETREG(0x440, 0x44000000);
+ VIASETREG(0x440, 0x45080c04);
+ VIASETREG(0x440, 0x46800408);
+
+ VIASETREG(0x440, dwVQStartEndH);
+ VIASETREG(0x440, dwVQStartL);
+ VIASETREG(0x440, dwVQEndL);
+ VIASETREG(0x440, dwVQLen);
+ }
+ else {
+ /* Diable VQ */
+ VIASETREG(0x43c, 0x00fe0000);
+ VIASETREG(0x440, 0x00000004);
+ VIASETREG(0x440, 0x40008c0f);
+ VIASETREG(0x440, 0x44000000);
+ VIASETREG(0x440, 0x45080c04);
+ VIASETREG(0x440, 0x46800408);
+ }
+
+ dwGEMode = 0;
+
+ switch (pScrn->bitsPerPixel) {
+ case 16:
+ dwGEMode |= VIA_GEM_16bpp;
+ break;
+ case 32:
+ dwGEMode |= VIA_GEM_32bpp;
+ default:
+ dwGEMode |= VIA_GEM_8bpp;
+ break;
+ }
+
+#if 0
+ switch (pScrn->displayWidth) {
+ case 800:
+ dwGEMode |= VIA_GEM_800;
+ break;
+ case 1024:
+ dwGEMode |= VIA_GEM_1024;
+ break;
+ case 1280:
+ dwGEMode |= VIA_GEM_1280;
+ break;
+ case 1600:
+ dwGEMode |= VIA_GEM_1600;
+ break;
+ case 2048:
+ dwGEMode |= VIA_GEM_2048;
+ break;
+ default:
+ dwGEMode |= VIA_GEM_640;
+ break;
+ }
+#endif
+
+ /* Set BPP and Pitch */
+ VIASETREG(VIA_REG_GEMODE, dwGEMode);
+
+ /* Set Src and Dst base address and pitch, pitch is qword */
+ VIASETREG(VIA_REG_SRCBASE, 0x0);
+ VIASETREG(VIA_REG_DSTBASE, 0x0);
+ VIASETREG(VIA_REG_PITCH, VIA_PITCH_ENABLE |
+ ((pScrn->displayWidth * pScrn->bitsPerPixel >> 3) >> 3) |
+ (((pScrn->displayWidth * pScrn->bitsPerPixel >> 3) >> 3) << 16));
+}
+
+
+
+/* Acceleration init function, sets up pointers to our accelerated functions */
+Bool
+VIAInitAccel(ScreenPtr pScreen)
+{
+ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+ VIAPtr pVia = VIAPTR(pScrn);
+ XAAInfoRecPtr xaaptr;
+ BoxRec AvailFBArea;
+
+ pVia->VQStart = 0;
+ if (((pVia->FBFreeEnd - pVia->FBFreeStart) >= VIA_VQ_SIZE) &&
+ pVia->VQEnable) {
+ /* Reserved space for VQ */
+ pVia->VQStart = pVia->FBFreeEnd - VIA_VQ_SIZE;
+ pVia->VQEnd = pVia->VQStart + VIA_VQ_SIZE - 1;
+ pVia->FBFreeEnd -= VIA_VQ_SIZE;
+ }
+ if (pVia->hwcursor) {
+ pVia->FBFreeEnd -= VIA_CURSOR_SIZE;
+ }
+
+ VIAInitialize2DEngine(pScrn);
+
+ if (pScrn->depth == 8) {
+ pVia->PlaneMask = 0xFF;
+ }
+ else if (pScrn->depth == 15) {
+ pVia->PlaneMask = 0x7FFF;
+ }
+ else if (pScrn->depth == 16) {
+ pVia->PlaneMask = 0xFFFF;
+ }
+ else if (pScrn->depth == 24) {
+ pVia->PlaneMask = 0xFFFFFF;
+ }
+
+ /* General acceleration flags */
+ if (!(xaaptr = pVia->AccelInfoRec = XAACreateInfoRec()))
+ return FALSE;
+
+ xaaptr->Flags = PIXMAP_CACHE |
+ OFFSCREEN_PIXMAPS |
+ LINEAR_FRAMEBUFFER |
+ MICROSOFT_ZERO_LINE_BIAS |
+ 0;
+
+ if (pScrn->bitsPerPixel == 8)
+ xaaptr->CachePixelGranularity = 128;
+
+ /* Clipping */
+ xaaptr->SetClippingRectangle = VIASetClippingRectangle;
+ xaaptr->DisableClipping = VIADisableClipping;
+ xaaptr->ClippingFlags = HARDWARE_CLIP_SOLID_FILL |
+ /*HARDWARE_CLIP_SOLID_LINE |*/
+ /*HARDWARE_CLIP_DASHED_LINE |*/
+ HARDWARE_CLIP_SCREEN_TO_SCREEN_COPY |
+ HARDWARE_CLIP_MONO_8x8_FILL |
+ HARDWARE_CLIP_COLOR_8x8_FILL |
+ HARDWARE_CLIP_SCREEN_TO_SCREEN_COLOR_EXPAND |
+ 0;
+
+ xaaptr->Sync = VIAAccelSync;
+
+ /* ScreenToScreen copies */
+ xaaptr->SetupForScreenToScreenCopy = VIASetupForScreenToScreenCopy;
+ xaaptr->SubsequentScreenToScreenCopy = VIASubsequentScreenToScreenCopy;
+ xaaptr->ScreenToScreenCopyFlags = NO_PLANEMASK | ROP_NEEDS_SOURCE;
+
+ /* Solid filled rectangles */
+ xaaptr->SetupForSolidFill = VIASetupForSolidFill;
+ xaaptr->SubsequentSolidFillRect = VIASubsequentSolidFillRect;
+ xaaptr->SolidFillFlags = NO_PLANEMASK | ROP_NEEDS_SOURCE;
+
+ /* Mono 8x8 pattern fills */
+ xaaptr->SetupForMono8x8PatternFill = VIASetupForMono8x8PatternFill;
+ xaaptr->SubsequentMono8x8PatternFillRect =
+ VIASubsequentMono8x8PatternFillRect;
+ xaaptr->Mono8x8PatternFillFlags = NO_PLANEMASK |
+ HARDWARE_PATTERN_PROGRAMMED_BITS |
+ HARDWARE_PATTERN_PROGRAMMED_ORIGIN |
+ ROP_NEEDS_SOURCE |
+ BIT_ORDER_IN_BYTE_MSBFIRST |
+ 0;
+
+ /* Color 8x8 pattern fills */
+ xaaptr->SetupForColor8x8PatternFill = VIASetupForColor8x8PatternFill;
+ xaaptr->SubsequentColor8x8PatternFillRect =
+ VIASubsequentColor8x8PatternFillRect;
+ xaaptr->Color8x8PatternFillFlags = NO_PLANEMASK |
+ NO_TRANSPARENCY |
+ HARDWARE_PATTERN_PROGRAMMED_BITS |
+ HARDWARE_PATTERN_PROGRAMMED_ORIGIN |
+ ROP_NEEDS_SOURCE |
+ 0;
+
+ /*=* This function is only used in drawing check box when use RedHat 7.2
+ * Raleigh Theme. The behavior is a little strange, so we temporarily
+ * disable this function. *=*/
+ /* Screen to Screen color expansion. */
+ xaaptr->SetupForScreenToScreenColorExpandFill =
+ VIASetupForScreenToScreenColorExpand;
+ xaaptr->SubsequentScreenToScreenColorExpandFill =
+ VIASubsequentScreenToScreenColorExpand;
+ xaaptr->ScreenToScreenColorExpandFillFlags = NO_PLANEMASK |
+ BIT_ORDER_IN_BYTE_MSBFIRST |
+ ROP_NEEDS_SOURCE |
+ 0;
+
+ /* Solid lines */
+ xaaptr->SetupForSolidLine = VIASetupForSolidLine;
+ xaaptr->SubsequentSolidTwoPointLine = VIASubsequentSolidTwoPointLine;
+ xaaptr->SubsequentSolidHorVertLine = VIASubsequentSolidHorVertLine;
+ xaaptr->SolidBresenhamLineErrorTermBits = 14;
+ xaaptr->SolidLineFlags = NO_PLANEMASK | ROP_NEEDS_SOURCE;
+
+ /* dashed line */
+ xaaptr->SetupForDashedLine = VIASetupForDashedLine;
+ xaaptr->SubsequentDashedTwoPointLine = VIASubsequentDashedTwoPointLine;
+ xaaptr->DashPatternMaxLength = 8;
+ xaaptr->DashedLineFlags = NO_PLANEMASK |
+ ROP_NEEDS_SOURCE |
+ LINE_PATTERN_POWER_OF_2_ONLY |
+ LINE_PATTERN_MSBFIRST_LSBJUSTIFIED |
+ 0;
+
+ /* CPU to Screen color expansion */
+ xaaptr->ScanlineCPUToScreenColorExpandFillFlags = NO_PLANEMASK |
+ CPU_TRANSFER_PAD_DWORD |
+ SCANLINE_PAD_DWORD |
+ BIT_ORDER_IN_BYTE_MSBFIRST |
+ LEFT_EDGE_CLIPPING |
+ ROP_NEEDS_SOURCE |
+ 0;
+
+ xaaptr->SetupForScanlineCPUToScreenColorExpandFill =
+ VIASetupForCPUToScreenColorExpandFill;
+ xaaptr->SubsequentScanlineCPUToScreenColorExpandFill =
+ VIASubsequentScanlineCPUToScreenColorExpandFill;
+ xaaptr->ColorExpandBase = pVia->BltBase;
+ xaaptr->ColorExpandRange = VIA_MMIO_BLTSIZE;
+
+ /* ImageWrite */
+ xaaptr->ImageWriteFlags = NO_PLANEMASK |
+ CPU_TRANSFER_PAD_DWORD |
+ SCANLINE_PAD_DWORD |
+ BIT_ORDER_IN_BYTE_MSBFIRST |
+ LEFT_EDGE_CLIPPING |
+ ROP_NEEDS_SOURCE |
+ /*NO_GXCOPY |*/
+ /*SYNC_AFTER_IMAGE_WRITE |*/
+ 0;
+
+ xaaptr->SetupForImageWrite = VIASetupForImageWrite;
+ xaaptr->SubsequentImageWriteRect = VIASubsequentImageWriteRect;
+ xaaptr->ImageWriteBase = pVia->BltBase;
+ xaaptr->ImageWriteRange = VIA_MMIO_BLTSIZE;
+
+ /* We reserve space for pixel cache */
+ pVia->ScissB = (pVia->FBFreeStart + VIA_PIXMAP_CACHE_SIZE) / pVia->Bpl;
+ pVia->FBFreeStart += VIA_PIXMAP_CACHE_SIZE;
+
+ if (pVia->ScissB > 2047)
+ pVia->ScissB = 2047;
+
+ /*
+ * Finally, we set up the video memory space available to the pixmap
+ * cache. In this case, all memory from the end of the virtual screen
+ * to the end of the command overflow buffer can be used. If you haven't
+ * enabled the PIXMAP_CACHE flag, then these lines can be omitted.
+ */
+
+ AvailFBArea.x1 = 0;
+ AvailFBArea.y1 = 0;
+ AvailFBArea.x2 = pScrn->displayWidth;
+ AvailFBArea.y2 = (pVia->FBFreeEnd) / pVia->Bpl;
+ xf86InitFBManager(pScreen, &AvailFBArea);
+ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+ "Using %d lines for offscreen memory.\n",
+ AvailFBArea.y2 - pScrn->virtualY ));
+
+ return XAAInit(pScreen, xaaptr);
+}
+
+
+/* The sync function for the GE */
+void VIAAccelSync(ScrnInfoPtr pScrn)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+
+ WaitIdle();
+}
+
+
+/* These are the ScreenToScreen bitblt functions. We support all ROPs, all
+ * directions.
+ *
+ */
+
+static void
+VIASetupForScreenToScreenCopy(
+ ScrnInfoPtr pScrn,
+ int xdir,
+ int ydir,
+ int rop,
+ unsigned planemask,
+ int trans_color)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ int cmd;
+
+ cmd = VIA_GEC_BLT | (XAACopyROP[rop] << 24);
+
+ if (xdir < 0)
+ cmd |= VIA_GEC_DECX;
+
+ if (ydir < 0)
+ cmd |= VIA_GEC_DECY;
+
+ pVia->SavedCmd = cmd;
+
+ if (trans_color != -1) {
+ /* Transparent Bitblt */
+ VIASETREG(VIA_REG_SRCCOLORKEY, trans_color);
+ VIASETREG(VIA_REG_KEYCONTROL, 0x4000);
+ }
+ else {
+ /* Disable Transparent Bitblt */
+ VIASETREG(VIA_REG_KEYCONTROL, 0x0);
+ }
+}
+
+
+static void
+VIASubsequentScreenToScreenCopy(
+ ScrnInfoPtr pScrn,
+ int x1,
+ int y1,
+ int x2,
+ int y2,
+ int w,
+ int h)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+
+ if (!w || !h)
+ return;
+
+ if (pVia->SavedCmd & VIA_GEC_DECX) {
+ x1 += (w - 1);
+ x2 += (w - 1);
+ }
+
+ if (pVia->SavedCmd & VIA_GEC_DECY) {
+ y1 += (h - 1);
+ y2 += (h - 1);
+ }
+
+ /* Set Src and Dst base address and pitch, pitch is qword */
+ VIASETREG(VIA_REG_SRCBASE, 0x0);
+ VIASETREG(VIA_REG_DSTBASE, 0x0);
+ VIASETREG(VIA_REG_PITCH, VIA_PITCH_ENABLE |
+ ((pScrn->displayWidth * pScrn->bitsPerPixel >> 3) >> 3) |
+ (((pScrn->displayWidth * pScrn->bitsPerPixel >> 3) >> 3) << 16));
+
+ VIASETREG(VIA_REG_SRCPOS, ((y1 << 16) | x1));
+ VIASETREG(VIA_REG_DSTPOS, ((y2 << 16) | x2));
+ VIASETREG(VIA_REG_DIMENSION, (((h - 1) << 16) | (w - 1)));
+ VIASETREG(VIA_REG_GECMD, pVia->SavedCmd);
+}
+
+
+/*
+ * SetupForSolidFill is also called to set up for lines.
+ */
+
+static void
+VIASetupForSolidFill(
+ ScrnInfoPtr pScrn,
+ int color,
+ int rop,
+ unsigned planemask)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ int cmd;
+
+ cmd = VIA_GEC_BLT | VIA_GEC_FIXCOLOR_PAT | (XAAPatternROP[rop] << 24);
+
+ pVia->SavedCmd = cmd;
+ pVia->SavedFgColor = color;
+}
+
+
+static void
+VIASubsequentSolidFillRect(
+ ScrnInfoPtr pScrn,
+ int x,
+ int y,
+ int w,
+ int h)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+
+ if (!w || !h)
+ return;
+
+ /* Set Src and Dst base address and pitch, pitch is qword */
+ VIASETREG(VIA_REG_SRCBASE, 0x0);
+ VIASETREG(VIA_REG_DSTBASE, 0x0);
+ VIASETREG(VIA_REG_PITCH, VIA_PITCH_ENABLE |
+ ((pScrn->displayWidth * pScrn->bitsPerPixel >> 3) >> 3) |
+ (((pScrn->displayWidth * pScrn->bitsPerPixel >> 3) >> 3) << 16));
+
+ VIASETREG(VIA_REG_DSTPOS, ((y << 16) | x));
+ VIASETREG(VIA_REG_DIMENSION, (((h - 1) << 16) | (w - 1)));
+ VIASETREG(VIA_REG_FGCOLOR, pVia->SavedFgColor);
+ VIASETREG(VIA_REG_GECMD, pVia->SavedCmd);
+}
+
+
+/*
+ * The meaning of the two pattern paremeters to Setup & Subsequent for
+ * Mono8x8Patterns varies depending on the flag bits. We specify
+ * HW_PROGRAMMED_BITS, which means our hardware can handle 8x8 patterns
+ * without caching in the frame buffer. Thus, Setup gets the pattern bits.
+ * There is no way with BCI to rotate an 8x8 pattern, so we do NOT specify
+ * HW_PROGRAMMED_ORIGIN. XAA wil rotate it for us and pass the rotated
+ * pattern to both Setup and Subsequent. If we DID specify PROGRAMMED_ORIGIN,
+ * then Setup would get the unrotated pattern, and Subsequent gets the
+ * origin values.
+ */
+
+static void
+VIASetupForMono8x8PatternFill(
+ ScrnInfoPtr pScrn,
+ int pattern0,
+ int pattern1,
+ int fg,
+ int bg,
+ int rop,
+ unsigned planemask)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ int cmd;
+
+ cmd = VIA_GEC_BLT | VIA_GEC_PAT_REG | VIA_GEC_PAT_MONO |
+ (XAAPatternROP[rop] << 24);
+
+ if (bg == -1) {
+ /* transparent mono pattern */
+ cmd |= VIA_GEC_MPAT_TRANS;
+ }
+
+ pVia->SavedCmd = cmd;
+ pVia->SavedFgColor = fg;
+ pVia->SavedBgColor = bg;
+ pVia->SavedPattern0 = pattern0;
+ pVia->SavedPattern1 = pattern1;
+}
+
+
+static void
+VIASubsequentMono8x8PatternFillRect(
+ ScrnInfoPtr pScrn,
+ int patOffx,
+ int patOffy,
+ int x,
+ int y,
+ int w,
+ int h)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ CARD32 dwPatOffset;
+
+ if (!w || !h)
+ return;
+
+ dwPatOffset = ((patOffy & 0x7) << 29) | ((patOffx & 0x7) << 26);
+
+ /* Set Src and Dst base address and pitch, pitch is qword */
+ VIASETREG(VIA_REG_SRCBASE, 0x0);
+ VIASETREG(VIA_REG_DSTBASE, 0x0);
+ VIASETREG(VIA_REG_PITCH, VIA_PITCH_ENABLE |
+ ((pScrn->displayWidth * pScrn->bitsPerPixel >> 3) >> 3) |
+ (((pScrn->displayWidth * pScrn->bitsPerPixel >> 3) >> 3) << 16));
+
+ VIASETREG(VIA_REG_DSTPOS, ((y << 16) | x));
+ VIASETREG(VIA_REG_DIMENSION, (((h - 1) << 16) | (w - 1)));
+ VIASETREG(VIA_REG_PATADDR, dwPatOffset);
+ VIASETREG(VIA_REG_FGCOLOR, pVia->SavedFgColor);
+ VIASETREG(VIA_REG_BGCOLOR, pVia->SavedBgColor);
+ VIASETREG(VIA_REG_MONOPAT0, pVia->SavedPattern0);
+ VIASETREG(VIA_REG_MONOPAT1, pVia->SavedPattern1);
+ VIASETREG(VIA_REG_GECMD, pVia->SavedCmd);
+}
+
+static void
+VIASetupForColor8x8PatternFill(
+ ScrnInfoPtr pScrn,
+ int patternx,
+ int patterny,
+ int rop,
+ unsigned planemask,
+ int trans_color)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ int cmd;
+
+ cmd = VIA_GEC_BLT | (XAAPatternROP[rop] << 24);
+
+ pVia->SavedCmd = cmd;
+ pVia->SavedPatternAddr = (patternx * pVia->Bpp + patterny * pVia->Bpl);
+}
+
+
+static void
+VIASubsequentColor8x8PatternFillRect(
+ ScrnInfoPtr pScrn,
+ int patOffx,
+ int patOffy,
+ int x,
+ int y,
+ int w,
+ int h)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ CARD32 dwPatAddr;
+
+ if (!w || !h)
+ return;
+
+ dwPatAddr = (pVia->SavedPatternAddr >> 3) |
+ ((patOffy & 0x7) << 29) | ((patOffx & 0x7) << 26);
+
+ /* Set Src and Dst base address and pitch, pitch is qword */
+ VIASETREG(VIA_REG_SRCBASE, 0x0);
+ VIASETREG(VIA_REG_DSTBASE, 0x0);
+ VIASETREG(VIA_REG_PITCH, VIA_PITCH_ENABLE |
+ ((pScrn->displayWidth * pScrn->bitsPerPixel >> 3) >> 3) |
+ (((pScrn->displayWidth * pScrn->bitsPerPixel >> 3) >> 3) << 16));
+
+ VIASETREG(VIA_REG_DSTPOS, ((y << 16) | x));
+ VIASETREG(VIA_REG_DIMENSION, (((h - 1) << 16) | (w - 1)));
+ VIASETREG(VIA_REG_PATADDR, dwPatAddr);
+ VIASETREG(VIA_REG_GECMD, pVia->SavedCmd);
+}
+
+static void
+VIASetupForCPUToScreenColorExpandFill(
+ ScrnInfoPtr pScrn,
+ int fg,
+ int bg,
+ int rop,
+ unsigned planemask)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ int cmd;
+
+ cmd = VIA_GEC_BLT | VIA_GEC_SRC_SYS | VIA_GEC_SRC_MONO |
+ (XAACopyROP[rop] << 24);
+
+ if (bg == -1) {
+ cmd |= VIA_GEC_MSRC_TRANS;
+ }
+
+ pVia->SavedCmd = cmd;
+ pVia->SavedFgColor = fg;
+ pVia->SavedBgColor = bg;
+
+ /* Disable Transparent Bitblt */
+ VIASETREG(VIA_REG_KEYCONTROL, 0x0);
+}
+
+
+static void
+VIASubsequentScanlineCPUToScreenColorExpandFill(
+ ScrnInfoPtr pScrn,
+ int x,
+ int y,
+ int w,
+ int h,
+ int skipleft)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+
+ /* XAA will be sending bitmap data next. */
+ /* We should probably wait for empty/idle here. */
+
+ if (skipleft) {
+ VIASetClippingRectangle(pScrn, (x + skipleft), y, (x + w - 1), (y + h -1));
+ }
+
+ /* Set Src and Dst base address and pitch, pitch is qword */
+ VIASETREG(VIA_REG_SRCBASE, 0x0);
+ VIASETREG(VIA_REG_DSTBASE, 0x0);
+ VIASETREG(VIA_REG_PITCH, VIA_PITCH_ENABLE |
+ ((pScrn->displayWidth * pScrn->bitsPerPixel >> 3) >> 3) |
+ (((pScrn->displayWidth * pScrn->bitsPerPixel >> 3) >> 3) << 16));
+
+ VIASETREG(VIA_REG_SRCPOS, 0);
+ VIASETREG(VIA_REG_DSTPOS, ((y << 16) | x));
+ VIASETREG(VIA_REG_DIMENSION, (((h - 1) << 16) | (w - 1)));
+ VIASETREG(VIA_REG_FGCOLOR, pVia->SavedFgColor);
+ VIASETREG(VIA_REG_BGCOLOR, pVia->SavedBgColor);
+ VIASETREG(VIA_REG_GECMD, pVia->SavedCmd);
+}
+
+
+static void
+VIASetupForScreenToScreenColorExpand(
+ ScrnInfoPtr pScrn,
+ int fg,
+ int bg,
+ int rop,
+ unsigned int planemask)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ int cmd;
+
+ cmd = VIA_GEC_BLT | VIA_GEC_SRC_MONO | (XAACopyROP[rop] << 24);
+
+ if (bg == -1) {
+ cmd |= VIA_GEC_MSRC_TRANS;
+ }
+
+ pVia->SavedCmd = cmd;
+ pVia->SavedFgColor = fg;
+ pVia->SavedBgColor = bg;
+
+ /* Disable Transparent Bitblt */
+ VIASETREG(VIA_REG_KEYCONTROL, 0x0);
+}
+
+
+static void
+VIASubsequentScreenToScreenColorExpand(
+ ScrnInfoPtr pScrn,
+ int x,
+ int y,
+ int w,
+ int h,
+ int srcx,
+ int srcy,
+ int offset)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+
+ /* Set Src and Dst base address and pitch, pitch is qword */
+ VIASETREG(VIA_REG_SRCBASE, 0x0);
+ VIASETREG(VIA_REG_DSTBASE, 0x0);
+ VIASETREG(VIA_REG_PITCH, VIA_PITCH_ENABLE |
+ ((pScrn->displayWidth * pScrn->bitsPerPixel >> 3) >> 3) |
+ (((pScrn->displayWidth * pScrn->bitsPerPixel >> 3) >> 3) << 16));
+
+ VIASETREG(VIA_REG_SRCBASE, ((((srcy * pScrn->displayWidth) + srcx) *
+ (pScrn->bitsPerPixel >> 3)) >> 3));
+ srcy = 0;
+ srcx = 0;
+
+ VIASETREG(VIA_REG_SRCPOS, ((srcy << 16) |
+ (srcx * pScrn->bitsPerPixel + offset)));
+ VIASETREG(VIA_REG_DSTPOS, ((y << 16) | x));
+ VIASETREG(VIA_REG_DIMENSION, (((h - 1) << 16) | (w - 1)));
+ VIASETREG(VIA_REG_FGCOLOR, pVia->SavedFgColor);
+ VIASETREG(VIA_REG_BGCOLOR, pVia->SavedBgColor);
+ VIASETREG(VIA_REG_GECMD, pVia->SavedCmd);
+
+ VIASETREG(VIA_REG_SRCBASE, 0x0);
+}
+
+static void
+VIASetupForImageWrite(
+ ScrnInfoPtr pScrn,
+ int rop,
+ unsigned planemask,
+ int trans_color,
+ int bpp,
+ int depth)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ int cmd;
+
+ /* We don't record bpp and depth because we assume bpp is equal to
+ bpp of screen. Is this assume correct ? */
+
+ cmd = VIA_GEC_BLT | VIA_GEC_SRC_SYS | (XAACopyROP[rop] << 24);
+
+ pVia->SavedCmd = cmd;
+
+ if (trans_color != -1) {
+ /* Transparent Bitblt */
+ VIASETREG(VIA_REG_SRCCOLORKEY, trans_color);
+ VIASETREG(VIA_REG_KEYCONTROL, 0x4000);
+ }
+ else {
+ /* Disable Transparent Bitblt */
+ VIASETREG(VIA_REG_KEYCONTROL, 0x0);
+ }
+
+}
+
+
+static void
+VIASubsequentImageWriteRect(
+ ScrnInfoPtr pScrn,
+ int x,
+ int y,
+ int w,
+ int h,
+ int skipleft)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+
+ if (skipleft) {
+ VIASetClippingRectangle(pScrn, (x + skipleft), y, (x + w - 1), (y + h -1));
+ }
+
+ /* Set Src and Dst base address and pitch, pitch is qword */
+ VIASETREG(VIA_REG_SRCBASE, 0x0);
+ VIASETREG(VIA_REG_DSTBASE, 0x0);
+ VIASETREG(VIA_REG_PITCH, VIA_PITCH_ENABLE |
+ ((pScrn->displayWidth * pScrn->bitsPerPixel >> 3) >> 3) |
+ (((pScrn->displayWidth * pScrn->bitsPerPixel >> 3) >> 3) << 16));
+
+ VIASETREG(VIA_REG_SRCPOS, 0);
+ VIASETREG(VIA_REG_DSTPOS, ((y << 16) | x));
+ VIASETREG(VIA_REG_DIMENSION, (((h - 1) << 16) | (w - 1)));
+ VIASETREG(VIA_REG_GECMD, pVia->SavedCmd);
+}
+
+
+/* Setup for XAA solid lines. */
+static void
+VIASetupForSolidLine(
+ ScrnInfoPtr pScrn,
+ int color,
+ int rop,
+ unsigned int planemask)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ int cmd;
+
+ /* we move VIA_GEC_LINE from here to the place firing command */
+ cmd = VIA_GEC_FIXCOLOR_PAT | (XAAPatternROP[rop] << 24);
+
+ pVia->SavedCmd = cmd;
+ pVia->SavedFgColor = color;
+
+ /* set solid line pattern */
+ VIASETREG(VIA_REG_MONOPAT0, 0xFF);
+ VIASETREG(VIA_REG_FGCOLOR, pVia->SavedFgColor);
+}
+
+
+static void
+VIASubsequentSolidTwoPointLine(
+ ScrnInfoPtr pScrn,
+ int x1,
+ int y1,
+ int x2,
+ int y2,
+ int flags)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ int dx, dy, cmd, tmp, error = 1;
+
+ cmd = pVia->SavedCmd | VIA_GEC_LINE;
+
+ dx = x2 - x1;
+ if (dx < 0) {
+ dx = -dx;
+ cmd |= VIA_GEC_DECX; /* line will be drawn from right */
+ error = 0;
+ }
+
+ dy = y2 - y1;
+ if (dy < 0) {
+ dy = -dy;
+ cmd |= VIA_GEC_DECY; /* line will be drawn from bottom */
+ }
+
+ if (dy > dx) {
+ tmp = dy;
+ dy = dx;
+ dx = tmp; /* Swap 'dx' and 'dy' */
+ cmd |= VIA_GEC_Y_MAJOR; /* Y major line */
+ }
+
+ if (flags & OMIT_LAST) {
+ cmd |= VIA_GEC_LASTPIXEL_OFF;
+ }
+
+ /* Set Src and Dst base address and pitch, pitch is qword */
+ VIASETREG(VIA_REG_SRCBASE, 0x0);
+ VIASETREG(VIA_REG_DSTBASE, 0x0);
+ VIASETREG(VIA_REG_PITCH, VIA_PITCH_ENABLE |
+ ((pScrn->displayWidth * pScrn->bitsPerPixel >> 3) >> 3) |
+ (((pScrn->displayWidth * pScrn->bitsPerPixel >> 3) >> 3) << 16));
+
+ /* major = 2*dmaj, minor = 2*dmin, err = -dmaj - ((bias >> octant) & 1) */
+ /* K1 = 2*dmin K2 = 2*(dmin - dmax) */
+ /* Error Term = (StartX<EndX) ? (2*dmin - dmax - 1) : (2*(dmin - dmax)) */
+ VIASETREG(VIA_REG_LINE_K1K2, ((((dy << 1) & 0x3fff) << 16)|
+ (((dy - dx) << 1) & 0x3fff)));
+ VIASETREG(VIA_REG_LINE_XY, ((y1 << 16) | x1));
+ VIASETREG(VIA_REG_DIMENSION, dx);
+ VIASETREG(VIA_REG_LINE_ERROR, (((dy << 1) - dx - error) & 0x3fff));
+ VIASETREG(VIA_REG_GECMD, cmd);
+
+}
+
+
+/* Subsequent XAA solid horizontal and vertical lines */
+static void
+VIASubsequentSolidHorVertLine(
+ ScrnInfoPtr pScrn,
+ int x,
+ int y,
+ int len,
+ int dir)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+
+ /* Set Src and Dst base address and pitch, pitch is qword */
+ VIASETREG(VIA_REG_SRCBASE, 0x0);
+ VIASETREG(VIA_REG_DSTBASE, 0x0);
+ VIASETREG(VIA_REG_PITCH, VIA_PITCH_ENABLE |
+ ((pScrn->displayWidth * pScrn->bitsPerPixel >> 3) >> 3) |
+ (((pScrn->displayWidth * pScrn->bitsPerPixel >> 3) >> 3) << 16));
+
+ if (dir == DEGREES_0) {
+ VIASETREG(VIA_REG_DSTPOS, ((y << 16) | x));
+ VIASETREG(VIA_REG_DIMENSION, (len - 1));
+ VIASETREG(VIA_REG_GECMD, pVia->SavedCmd | VIA_GEC_BLT);
+ }
+ else {
+ VIASETREG(VIA_REG_DSTPOS, ((y << 16) | x));
+ VIASETREG(VIA_REG_DIMENSION, ((len - 1) << 16));
+ VIASETREG(VIA_REG_GECMD, pVia->SavedCmd | VIA_GEC_BLT);
+ }
+}
+
+static void
+VIASetupForDashedLine(
+ ScrnInfoPtr pScrn,
+ int fg,
+ int bg,
+ int rop,
+ unsigned int planemask,
+ int length,
+ unsigned char *pattern)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ int cmd;
+ CARD32 pat = *(CARD32 *)pattern;
+
+ cmd = VIA_GEC_LINE | VIA_GEC_FIXCOLOR_PAT | (XAAPatternROP[rop] << 24);
+
+ if (bg == -1) {
+ /* transparent mono pattern */
+ cmd |= VIA_GEC_MPAT_TRANS;
+ }
+
+ pVia->SavedCmd = cmd;
+ pVia->SavedFgColor = fg;
+ pVia->SavedBgColor = bg;
+
+ switch (length) {
+ case 2: pat |= pat << 2; /* fall through */
+ case 4: pat |= pat << 4; /* fall through */
+ case 8: pat |= pat << 8; /* fall through */
+ case 16: pat |= pat << 16;
+ }
+
+ pVia->SavedPattern0 = pat;
+
+ VIASETREG(VIA_REG_FGCOLOR, pVia->SavedFgColor);
+ VIASETREG(VIA_REG_BGCOLOR, pVia->SavedBgColor);
+ VIASETREG(VIA_REG_MONOPAT0, pVia->SavedPattern0);
+}
+
+
+static void
+VIASubsequentDashedTwoPointLine(
+ ScrnInfoPtr pScrn,
+ int x1,
+ int y1,
+ int x2,
+ int y2,
+ int flags,
+ int phase)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ int dx, dy, cmd, tmp, error = 1;
+
+ cmd = pVia->SavedCmd;
+
+ dx = x2 - x1;
+ if (dx < 0) {
+ dx = -dx;
+ cmd |= VIA_GEC_DECX; /* line will be drawn from right */
+ error = 0;
+ }
+
+ dy = y2 - y1;
+ if (dy < 0) {
+ dy = -dy;
+ cmd |= VIA_GEC_DECY; /* line will be drawn from bottom */
+ }
+
+ if (dy > dx) {
+ tmp = dy;
+ dy = dx;
+ dx = tmp; /* Swap 'dx' and 'dy' */
+ cmd |= VIA_GEC_Y_MAJOR; /* Y major line */
+ }
+
+ if (flags & OMIT_LAST) {
+ cmd |= VIA_GEC_LASTPIXEL_OFF;
+ }
+
+ /* Set Src and Dst base address and pitch, pitch is qword */
+ VIASETREG(VIA_REG_SRCBASE, 0x0);
+ VIASETREG(VIA_REG_DSTBASE, 0x0);
+ VIASETREG(VIA_REG_PITCH, VIA_PITCH_ENABLE |
+ ((pScrn->displayWidth * pScrn->bitsPerPixel >> 3) >> 3) |
+ (((pScrn->displayWidth * pScrn->bitsPerPixel >> 3) >> 3) << 16));
+
+ /* major = 2*dmaj, minor = 2*dmin, err = -dmaj - ((bias >> octant) & 1) */
+ /* K1 = 2*dmin K2 = 2*(dmin - dmax) */
+ /* Error Term = (StartX<EndX) ? (2*dmin - dmax - 1) : (2*(dmin - dmax)) */
+ VIASETREG(VIA_REG_LINE_K1K2, ((((dy << 1) & 0x3fff) << 16)|
+ (((dy - dx) << 1) & 0x3fff)));
+ VIASETREG(VIA_REG_LINE_XY, ((y1 << 16) | x1));
+ VIASETREG(VIA_REG_DIMENSION, dx);
+ VIASETREG(VIA_REG_LINE_ERROR, (((dy << 1) - dx - error) & 0x3fff) | 0xFF0000);
+ VIASETREG(VIA_REG_GECMD, cmd);
+}
+
+
+static void
+VIASetClippingRectangle(
+ ScrnInfoPtr pScrn,
+ int x1,
+ int y1,
+ int x2,
+ int y2)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+
+#ifdef DEBUG_EXTRA
+ ErrorF("ClipRect, (%4d,%4d)-(%4d,%4d) \n", x1, y1, x2, y2 );
+#endif
+
+ VIASETREG(VIA_REG_CLIPTL, ((y1 << 16) | x1));
+ VIASETREG(VIA_REG_CLIPBR, ((y2 << 16) | x2));
+ pVia->SavedCmd |= VIA_GEC_CLIP_ENABLE;
+}
+
+
+static void VIADisableClipping(ScrnInfoPtr pScrn)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+
+#ifdef DEBUG_EXTRA
+ ErrorF("Kill ClipRect\n");
+#endif
+
+ pVia->SavedCmd &= ~VIA_GEC_CLIP_ENABLE;
+}
+
diff --git a/src/via_bandwidth.c b/src/via_bandwidth.c
new file mode 100644
index 0000000..7720bdc
--- /dev/null
+++ b/src/via_bandwidth.c
@@ -0,0 +1,385 @@
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/via/via_bandwidth.c,v 1.2 2003/08/27 15:16:06 tsi Exp $ */
+/*
+ * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
+ * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sub license,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ * VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+#include "via_driver.h"
+#include "via_bandwidth.h"
+
+void VIADisabledExtendedFIFO(VIABIOSInfoPtr pBIOSInfo)
+{
+ VIABIOSInfoPtr pVia = pBIOSInfo;
+ CARD32 dwGE230, dwGE298;
+
+ DEBUG(xf86DrvMsg(pBIOSInfo->scrnIndex, X_INFO, "VIADisabledExtendedFIFO\n"));
+ /* Cause of exit XWindow will dump back register value, others chipset no
+ * need to set extended fifo value */
+ if (pBIOSInfo->Chipset == VIA_CLE266 && pBIOSInfo->ChipRev < 15 &&
+ (pBIOSInfo->HDisplay > 1024 || pBIOSInfo->HasSecondary)) {
+ /* Turn off Extend FIFO */
+ /* 0x298[29] */
+ dwGE298 = VIAGETREG(0x298);
+ VIASETREG(0x298, dwGE298 | 0x20000000);
+ /* 0x230[21] */
+ dwGE230 = VIAGETREG(0x230);
+ VIASETREG(0x230, dwGE230 & ~0x00200000);
+ /* 0x298[29] */
+ dwGE298 = VIAGETREG(0x298);
+ VIASETREG(0x298, dwGE298 & ~0x20000000);
+ }
+}
+
+void VIAEnabledPrimaryExtendedFIFO(VIABIOSInfoPtr pBIOSInfo)
+{
+ VIABIOSInfoPtr pVia = pBIOSInfo;
+ CARD8 bRegTemp;
+ CARD32 dwGE230, dwGE298;
+
+ DEBUG(xf86DrvMsg(pBIOSInfo->scrnIndex, X_INFO, "VIAEnabledPrimaryExtendedFIFO\n"));
+ switch (pBIOSInfo->Chipset) {
+ case VIA_CLE266:
+ if (pBIOSInfo->ChipRev > 14) { /* For 3123Cx */
+ if (pBIOSInfo->HasSecondary) { /* SAMM or DuoView case */
+ if (pBIOSInfo->HDisplay >= 1024)
+ {
+ /* 3c5.16[0:5] */
+ VGAOUT8(0x3C4, 0x16);
+ bRegTemp = VGAIN8(0x3C5);
+ bRegTemp &= ~0x3F;
+ bRegTemp |= 0x1C;
+ VGAOUT8(0x3C5, bRegTemp);
+ /* 3c5.17[0:6] */
+ VGAOUT8(0x3C4, 0x17);
+ bRegTemp = VGAIN8(0x3C5);
+ bRegTemp &= ~0x7F;
+ bRegTemp |= 0x3F;
+ VGAOUT8(0x3C5, bRegTemp);
+ }
+ }
+ else /* Single view or Simultaneoue case */
+ {
+ if (pBIOSInfo->HDisplay > 1024)
+ {
+ /* 3c5.16[0:5] */
+ VGAOUT8(0x3C4, 0x16);
+ bRegTemp = VGAIN8(0x3C5);
+ bRegTemp &= ~0x3F;
+ bRegTemp |= 0x17;
+ VGAOUT8(0x3C5, bRegTemp);
+ /* 3c5.17[0:6] */
+ VGAOUT8(0x3C4, 0x17);
+ bRegTemp = VGAIN8(0x3C5);
+ bRegTemp &= ~0x7F;
+ bRegTemp |= 0x2F;
+ VGAOUT8(0x3C5, bRegTemp);
+ }
+ }
+ /* 3c5.18[0:5] */
+ VGAOUT8(0x3C4, 0x18);
+ bRegTemp = VGAIN8(0x3C5);
+ bRegTemp &= ~0x3F;
+ bRegTemp |= 0x17;
+ bRegTemp |= 0x40; /* force the preq always higher than treq */
+ VGAOUT8(0x3C5, bRegTemp);
+ }
+ else { /* for 3123Ax */
+ if (pBIOSInfo->HDisplay > 1024 || pBIOSInfo->HasSecondary) {
+ /* Turn on Extend FIFO */
+ /* 0x298[29] */
+ dwGE298 = VIAGETREG(0x298);
+ VIASETREG(0x298, dwGE298 | 0x20000000);
+ /* 0x230[21] */
+ dwGE230 = VIAGETREG(0x230);
+ VIASETREG(0x230, dwGE230 | 0x00200000);
+ /* 0x298[29] */
+ dwGE298 = VIAGETREG(0x298);
+ VIASETREG(0x298, dwGE298 & ~0x20000000);
+
+ /* 3c5.16[0:5] */
+ VGAOUT8(0x3C4, 0x16);
+ bRegTemp = VGAIN8(0x3C5);
+ bRegTemp &= ~0x3F;
+ bRegTemp |= 0x17;
+ /* bRegTemp |= 0x10; */
+ VGAOUT8(0x3C5, bRegTemp);
+ /* 3c5.17[0:6] */
+ VGAOUT8(0x3C4, 0x17);
+ bRegTemp = VGAIN8(0x3C5);
+ bRegTemp &= ~0x7F;
+ bRegTemp |= 0x2F;
+ /*bRegTemp |= 0x1F;*/
+ VGAOUT8(0x3C5, bRegTemp);
+ /* 3c5.18[0:5] */
+ VGAOUT8(0x3C4, 0x18);
+ bRegTemp = VGAIN8(0x3C5);
+ bRegTemp &= ~0x3F;
+ bRegTemp |= 0x17;
+ bRegTemp |= 0x40; /* force the preq always higher than treq */
+ VGAOUT8(0x3C5, bRegTemp);
+ }
+ }
+ break;
+ case VIA_KM400:
+ case VIA_K8M800:
+ if (pBIOSInfo->HasSecondary) { /* SAMM or DuoView case */
+ if ((pBIOSInfo->HDisplay >= 1600) &&
+ (pBIOSInfo->MemClk <= VIA_MEM_DDR200)) {
+ /* enable CRT extendded FIFO */
+ VGAOUT8(0x3C4, 0x17);
+ VGAOUT8(0x3C5, 0x1C);
+ /* revise second display queue depth and read threshold */
+ VGAOUT8(0x3C4, 0x16);
+ bRegTemp = VGAIN8(0x3C5);
+ bRegTemp &= ~0x3F;
+ bRegTemp = (bRegTemp) | (0x09);
+ VGAOUT8(0x3C5, bRegTemp);
+ }
+ else {
+ /* enable CRT extended FIFO */
+ VGAOUT8(0x3C4, 0x17);
+ VGAOUT8(0x3C5,0x3F);
+ /* revise second display queue depth and read threshold */
+ VGAOUT8(0x3C4, 0x16);
+ bRegTemp = VGAIN8(0x3C5);
+ bRegTemp &= ~0x3F;
+ bRegTemp = (bRegTemp) | (0x1C);
+ VGAOUT8(0x3C5, bRegTemp);
+ }
+ /* 3c5.18[0:5] */
+ VGAOUT8(0x3C4, 0x18);
+ bRegTemp = VGAIN8(0x3C5);
+ bRegTemp &= ~0x3F;
+ bRegTemp |= 0x17;
+ bRegTemp |= 0x40; /* force the preq always higher than treq */
+ VGAOUT8(0x3C5, bRegTemp);
+ }
+ else {
+ if ( (pBIOSInfo->HDisplay > 1024) && (pBIOSInfo->HDisplay <= 1280) )
+ {
+ /* enable CRT extendded FIFO */
+ VGAOUT8(0x3C4, 0x17);
+ VGAOUT8(0x3C5, 0x3F);
+ /* revise second display queue depth and read threshold */
+ VGAOUT8(0x3C4, 0x16);
+ bRegTemp = VGAIN8(0x3C5);
+ bRegTemp &= ~0x3F;
+ bRegTemp = (bRegTemp) | (0x17);
+ VGAOUT8(0x3C5, bRegTemp);
+ }
+ else if ((pBIOSInfo->HDisplay > 1280))
+ {
+ /* enable CRT extendded FIFO */
+ VGAOUT8(0x3C4, 0x17);
+ VGAOUT8(0x3C5, 0x3F);
+ /* revise second display queue depth and read threshold */
+ VGAOUT8(0x3C4, 0x16);
+ bRegTemp = VGAIN8(0x3C5);
+ bRegTemp &= ~0x3F;
+ bRegTemp = (bRegTemp) | (0x1C);
+ VGAOUT8(0x3C5, bRegTemp);
+ }
+ else
+ {
+ /* enable CRT extendded FIFO */
+ VGAOUT8(0x3C4, 0x17);
+ VGAOUT8(0x3C5, 0x3F);
+ /* revise second display queue depth and read threshold */
+ VGAOUT8(0x3C4, 0x16);
+ bRegTemp = VGAIN8(0x3C5);
+ bRegTemp &= ~0x3F;
+ bRegTemp = (bRegTemp) | (0x10);
+ VGAOUT8(0x3C5, bRegTemp);
+ }
+ /* 3c5.18[0:5] */
+ VGAOUT8(0x3C4, 0x18);
+ bRegTemp = VGAIN8(0x3C5);
+ bRegTemp &= ~0x3F;
+ bRegTemp |= 0x17;
+ bRegTemp |= 0x40; /* force the preq always higher than treq */
+ VGAOUT8(0x3C5, bRegTemp);
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+void VIAEnabledSecondaryExtendedFIFO(VIABIOSInfoPtr pBIOSInfo)
+{
+ VIABIOSInfoPtr pVia = pBIOSInfo;
+ CARD8 bRegTemp;
+ DEBUG(xf86DrvMsg(pBIOSInfo->scrnIndex, X_INFO, "VIAEnabledSecondaryExtendedFIFO\n"));
+ switch (pBIOSInfo->Chipset) {
+ case VIA_CLE266:
+ if (pBIOSInfo->ChipRev > 15) { /* for 3123Cx */
+ if (((pBIOSInfo->ActiveDevice & (VIA_DEVICE_LCD | VIA_DEVICE_DFP)) &&
+ (pBIOSInfo->panelX >= 1024)) || (pBIOSInfo->HDisplay >= 1024)) {
+ /* enable extendded FIFO */
+ VGAOUT8(0x3D4, 0x6a);
+ bRegTemp = VGAIN8(0x3D5);
+ bRegTemp |= 0x20;
+ VGAOUT8(0x3D5, bRegTemp);
+ /* revise second display queue depth and read threshold */
+ VGAOUT8(0x3D4, 0x68);
+ VGAOUT8(0x3D5, 0xab);
+ }
+ else
+ {
+ /* disable extendded FIFO */
+ VGAOUT8(0x3D4, 0x6a);
+ bRegTemp = VGAIN8(0x3D5);
+ bRegTemp &= ~0x20;
+ VGAOUT8(0x3D5, bRegTemp);
+ /* revise second display queue depth and read threshold */
+ VGAOUT8(0x3D4, 0x68);
+ VGAOUT8(0x3D5, 0x67);
+ }
+ }
+ else { /* for 3123Ax */
+ /* TV highest X-Resolution is smaller than 1280,
+ * pBIOSInfo->HDisplay >= 1280 don't care. */
+ if ((pBIOSInfo->ActiveDevice & (VIA_DEVICE_LCD | VIA_DEVICE_DFP)) &&
+ (((pBIOSInfo->panelY > 768) && (pBIOSInfo->bitsPerPixel >= 24) &&
+ (pBIOSInfo->MemClk <= VIA_MEM_DDR200)) ||
+ ((pBIOSInfo->panelX > 1280) && (pBIOSInfo->bitsPerPixel >= 24) &&
+ (pBIOSInfo->MemClk <= VIA_MEM_DDR266)))) {
+ /* enable extendded FIFO */
+ VGAOUT8(0x3D4, 0x6a);
+ bRegTemp = VGAIN8(0x3D5);
+ bRegTemp |= 0x20;
+ VGAOUT8(0x3D5, bRegTemp);
+ /* revise second display queue depth and read threshold */
+ VGAOUT8(0x3D4, 0x68);
+ VGAOUT8(0x3D5, 0xab);
+ }
+ else {
+ /* disable extendded FIFO */
+ VGAOUT8(0x3D4, 0x6a);
+ bRegTemp = VGAIN8(0x3D5);
+ bRegTemp &= ~0x20;
+ VGAOUT8(0x3D5, bRegTemp);
+ /* revise second display queue depth and read threshold */
+ VGAOUT8(0x3D4, 0x68);
+ VGAOUT8(0x3D5, 0x67);
+ }
+ }
+ break;
+ case VIA_KM400:
+ case VIA_K8M800:
+ if ((((pBIOSInfo->ActiveDevice & (VIA_DEVICE_LCD | VIA_DEVICE_DFP)) &&
+ (pBIOSInfo->panelX >= 1600)) || (pBIOSInfo->HDisplay >= 1600)) &&
+ (pBIOSInfo->MemClk <= VIA_MEM_DDR200)) {
+ /* enable extendded FIFO */
+ VGAOUT8(0x3D4, 0x6a);
+ bRegTemp = VGAIN8(0x3D5);
+ bRegTemp |= 0x20;
+ VGAOUT8(0x3D5, bRegTemp);
+ /* revise second display queue depth and read threshold */
+ VGAOUT8(0x3D4, 0x68);
+ VGAOUT8(0x3D5, 0xeb);
+ }
+ else if (((((pBIOSInfo->ActiveDevice & (VIA_DEVICE_LCD | VIA_DEVICE_DFP)) &&
+ (pBIOSInfo->panelX > 1024)) || (pBIOSInfo->HDisplay > 1024)) &&
+ (pBIOSInfo->bitsPerPixel == 32) &&
+ (pBIOSInfo->MemClk <= VIA_MEM_DDR333)) ||
+ ((((pBIOSInfo->ActiveDevice & (VIA_DEVICE_LCD | VIA_DEVICE_DFP)) &&
+ (pBIOSInfo->panelX == 1024)) || (pBIOSInfo->HDisplay == 1024)) &&
+ (pBIOSInfo->bitsPerPixel == 32) &&
+ (pBIOSInfo->MemClk <= VIA_MEM_DDR200))) {
+ /* enable extendded FIFO */
+ VGAOUT8(0x3D4, 0x6a);
+ bRegTemp = VGAIN8(0x3D5);
+ bRegTemp |= 0x20;
+ VGAOUT8(0x3D5, bRegTemp);
+ /* revise second display queue depth and read threshold */
+ VGAOUT8(0x3D4, 0x68);
+ VGAOUT8(0x3D5, 0xca);
+ }
+ else if (((((pBIOSInfo->ActiveDevice & (VIA_DEVICE_LCD | VIA_DEVICE_DFP)) &&
+ (pBIOSInfo->panelX > 1280)) || (pBIOSInfo->HDisplay > 1280)) &&
+ (pBIOSInfo->bitsPerPixel == 16) &&
+ (pBIOSInfo->MemClk <= VIA_MEM_DDR333)) ||
+ ((((pBIOSInfo->ActiveDevice & (VIA_DEVICE_LCD | VIA_DEVICE_DFP)) &&
+ (pBIOSInfo->panelX == 1280)) || (pBIOSInfo->HDisplay == 1280)) &&
+ (pBIOSInfo->bitsPerPixel == 16) &&
+ (pBIOSInfo->MemClk <= VIA_MEM_DDR200))) {
+ /* enable extendded FIFO */
+ VGAOUT8(0x3D4, 0x6a);
+ bRegTemp = VGAIN8(0x3D5);
+ bRegTemp |= 0x20;
+ VGAOUT8(0x3D5, bRegTemp);
+ /* revise second display queue depth and read threshold */
+ VGAOUT8(0x3D4, 0x68);
+ VGAOUT8(0x3D5, 0xab);
+ }
+ else {
+ /* disable extendded FIFO */
+ VGAOUT8(0x3D4, 0x6a);
+ bRegTemp = VGAIN8(0x3D5);
+ bRegTemp &= ~0x20;
+ VGAOUT8(0x3D5, bRegTemp);
+ /* revise second display queue depth and read threshold */
+ VGAOUT8(0x3D4, 0x68);
+ VGAOUT8(0x3D5, 0x67);
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+void VIAFillExpireNumber(VIABIOSInfoPtr pBIOSInfo)
+{
+ VIABIOSInfoPtr pVia = pBIOSInfo;
+ CARD8 bRegTemp;
+ const VIAPanel3C522Tue* TuneExpireNum;
+
+ DEBUG(xf86DrvMsg(pBIOSInfo->scrnIndex, X_INFO, "VIAFillExpireNumber\n"));
+ switch (pBIOSInfo->Chipset) {
+ case VIA_CLE266:
+ if (pBIOSInfo->ChipRev > 14) {
+ TuneExpireNum = Panel_Tuning_LstC0;
+ }
+ else {
+ TuneExpireNum = Panel_Tuning_Lst;
+ }
+ break;
+ case VIA_KM400:
+ case VIA_K8M800:
+ TuneExpireNum = Panel_Tuning_Lst3205;
+ break;
+ default:
+ return;
+ break;
+ }
+ while (TuneExpireNum->wPanelXres != 0) {
+ if (TuneExpireNum->wPanelXres == pBIOSInfo->panelX &&
+ TuneExpireNum->wPanelYres == pBIOSInfo->panelY &&
+ TuneExpireNum->wPanelBpp == pBIOSInfo->bitsPerPixel &&
+ TuneExpireNum->bRamClock == pBIOSInfo->MemClk) {
+ VGAOUT8(0x3C4, 0x22);
+ bRegTemp = VGAIN8(0x3C5) & ~0x1F;
+ VGAOUT8(0x3C5, (bRegTemp | TuneExpireNum->bTuningValue));
+ }
+ TuneExpireNum ++;
+ }
+}
diff --git a/src/via_bios.h b/src/via_bios.h
new file mode 100644
index 0000000..deb10cb
--- /dev/null
+++ b/src/via_bios.h
@@ -0,0 +1,713 @@
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/via/via_bios.h,v 1.3 2003/08/27 15:16:07 tsi Exp $ */
+/*
+ * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
+ * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sub license,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ * VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef _VIA_BIOS_H_
+#define _VIA_BIOS_H_ 1
+
+#define VIA_CRT_SUPPORT TRUE
+#define VIA_LCD_SUPPORT TRUE
+#define VIA_UNCOVERD_LCD_PANEL FALSE
+#define VIA_NTSC_SUPPORT TRUE
+#define VIA_PAL_SUPPORT TRUE
+#define VIA_DVI_SUPPORT TRUE
+
+#define VIA_CRT_SUPPORT_BIT 0x01
+#define VIA_LCD_SUPPORT_BIT 0x02
+#define VIA_NTSC_SUPPORT_BIT 0x04
+#define VIA_PAL_SUPPORT_BIT 0x08
+#define VIA_DVI_SUPPORT_BIT 0x20
+
+#define VIA_BIOS_REG_TABLE_MAX_NUM 32
+#define VIA_BIOS_REG_LCD_MAX_NUM 48
+#define VIA_BIOS_NUM_RES 17
+#define VIA_BIOS_NUM_REFRESH 5
+#define VIA_BIOS_NUM_LCD_SUPPORT_MASK 8
+#define VIA_BIOS_NUM_LCD_POWER_SEQ 4
+#define VIA_BIOS_NUM_PANEL 7
+#define VIA_BIOS_MAX_NUM_MPATCH2 18
+#define VIA_BIOS_MAX_NUM_MPATCH1 9
+#define VIA_BIOS_MAX_NUM_CTREXP 5
+#define VIA_BIOS_MAX_NUM_TV_REG 144 /* 00 - 8F, tv2,tv3,ch7019 are the same */
+#define VIA_BIOS_MAX_NUM_SAA7108_TV_REG 176 /* 00 - AF */
+#define VIA_BIOS_NUM_FS454_TV_REG 32 /* Nums of TV Register in setmode needs */
+#define VIA_BIOS_MAX_NUM_TV_CRTC 32
+#define VIA_BIOS_NUM_TV_SPECIAL_REG 8
+#define VIA_BIOS_MAX_NUM_TV_PATCH 8
+#define VIA_BIOS_NUM_TV_OTHER 16
+#define VIA_BIOS_NUM_TV2 2
+#define VIA_BIOS_NUM_TV3 6
+#define VIA_BIOS_NUM_SAA7108 4
+#define VIA_BIOS_NUM_CH7019 3
+#define VIA_BIOS_NUM_FS454 5
+
+
+/* The position of some BIOS information from start of BIOS */
+#define VIA_BIOS_SIZE_POS 0x2
+#define VIA_BIOS_OFFSET_POS 0x1B
+
+/* The offset of table from table start */
+#define VIA_BIOS_CSTAB_POS 6
+#define VIA_BIOS_STDVGAREGTAB_POS 8
+#define VIA_BIOS_COMMEXTREGTAB_POS 10
+#define VIA_BIOS_STDMODEXTREGTAB_POS 12
+#define VIA_BIOS_EXTMODEREGTAB_POS 14
+#define VIA_BIOS_REFRESHMODETAB_POS 16
+#define VIA_BIOS_BIOSVER_POS 18
+#define VIA_BIOS_BCPPOST_POS 20
+#define VIA_BIOS_LCDMODETAB_POS 40
+#define VIA_BIOS_TVMODETAB_POS 42
+#define VIA_BIOS_TVMASKTAB_POS 44
+#define VIA_BIOS_MODEOVERTAB_POS 46
+#define VIA_BIOS_TV3HSCALETAB_POS 48
+#define VIA_BIOS_LCDPOWERON_POS 50
+#define VIA_BIOS_LCDPOWEROFF_POS 52
+#define VIA_BIOS_LCDMODEFIX_POS 54
+#define ZCR 0x0
+#define ZSR 0x1
+#define ZGR 0x2
+
+#define VIA_RES_640X480 0
+#define VIA_RES_800X600 1
+#define VIA_RES_1024X768 2
+#define VIA_RES_1152X864 3
+#define VIA_RES_1280X1024 4
+#define VIA_RES_1600X1200 5
+#define VIA_RES_1440X1050 6
+#define VIA_RES_1280X768 7
+#define VIA_RES_1280X960 8
+#define VIA_RES_1920X1440 9
+#define VIA_RES_848X480 10
+#define VIA_RES_1400X1050 11
+#define VIA_RES_720X480 12
+#define VIA_RES_720X576 13
+#define VIA_RES_1024X512 14
+#define VIA_RES_856X480 15
+#define VIA_RES_1024X576 16
+#define VIA_RES_INVALID 255
+
+#define VIA_TVRES_640X480 0
+#define VIA_TVRES_800X600 1
+#define VIA_TVRES_1024X768 2
+#define VIA_TVRES_848X480 3
+#define VIA_TVRES_720X480 4
+#define VIA_TVRES_720X576 5
+
+
+#define VIA_NUM_REFRESH_RATE 5
+#define VIA_PANEL6X4 0
+#define VIA_PANEL8X6 1
+#define VIA_PANEL10X7 2
+#define VIA_PANEL12X7 3
+#define VIA_PANEL12X10 4
+#define VIA_PANEL14X10 5
+#define VIA_PANEL16X12 6
+#define VIA_PANEL_INVALID 255
+
+#define VIA_NONEDVI 0x00
+#define VIA_VT3191 0x01
+#define VIA_CH7019LVDS 0x02
+#define VIA_TTLTYPE 0x07
+#define VIA_VT3192 0x09
+#define VIA_VT3193 0x0A
+#define VIA_SIL164 0x0B
+#define VIA_SIL168 0x0C
+#define VIA_Hardwired 0x0F
+
+#define TVTYPE_NONE 0x00
+#define TVTYPE_NTSC 0x01
+#define TVTYPE_PAL 0x02
+
+#define TVOUTPUT_NONE 0x00
+#define TVOUTPUT_COMPOSITE 0x01
+#define TVOUTPUT_SVIDEO 0x02
+#define TVOUTPUT_RGB 0x04
+#define TVOUTPUT_YCBCR 0x08
+#define TVOUTPUT_SC 0x16
+
+#define VIA_NONETV 0
+#define VIA_TV2PLUS 1
+#define VIA_TV3 2
+#define VIA_CH7009 3
+#define VIA_CH7019 4
+#define VIA_SAA7108 5
+#define VIA_CH7005 6
+#define VIA_VT1622A 7
+#define VIA_FS454 8
+#define VIA_VT1623 9
+
+#define VIA_TVNORMAL 0
+#define VIA_TVOVER 1
+#define VIA_NO_TVHSCALE 0
+#define VIA_TVHSCALE0 0
+#define VIA_TVHSCALE1 1
+#define VIA_TVHSCALE2 2
+#define VIA_TVHSCALE3 3
+#define VIA_TVHSCALE4 4
+#define VIA_TV_NUM_HSCALE_LEVEL 8
+#define VIA_TV_NUM_HSCALE_REG 16
+
+#define VIA_DEVICE_CRT1 0x01
+#define VIA_DEVICE_LCD 0x02
+#define VIA_DEVICE_TV 0x04
+#define VIA_DEVICE_DFP 0x08
+#define VIA_DEVICE_CRT2 0x10
+
+/* System Memory CLK */
+#define VIA_MEM_SDR66 0x00
+#define VIA_MEM_SDR100 0x01
+#define VIA_MEM_SDR133 0x02
+#define VIA_MEM_DDR200 0x03
+#define VIA_MEM_DDR266 0x04
+#define VIA_MEM_DDR333 0x05
+#define VIA_MEM_DDR400 0x06
+
+/* Digital Output Bus Width */
+#define VIA_DI_12BIT 0x00
+#define VIA_DI_24BIT 0x01
+
+#define CAP_WEAVE 0x0
+#define CAP_BOB 0x1
+
+typedef struct _GPIOI2C_INFO
+{
+ CARD8 bGPIOPort;
+ CARD8 bSlaveAddr;
+ int I2C_WAIT_TIME;
+ int STARTTIMEOUT;
+ int BYTETIMEOUT;
+ int HOLDTIME;
+ int BITTIMEOUT;
+} GPIOI2C_INFO, *PGPIOI2C_INFO;
+
+typedef struct _VIABIOSSTDVGATABLE {
+ CARD8 columns;
+ CARD8 rows;
+ CARD8 fontHeight;
+ CARD16 pageSize;
+ CARD8 SR[5];
+ CARD8 misc;
+ CARD8 CR[25];
+ CARD8 AR[20];
+ CARD8 GR[9];
+} VIABIOSStdVGATableRec, *VIABIOSStdVGATablePtr;
+
+
+typedef struct _VIABIOSREFRESHTABLE {
+ CARD8 refresh;
+ CARD16 VClk;
+ CARD8 CR[14];
+} VIABIOSRefreshTableRec, *VIABIOSRefreshTablePtr;
+
+
+typedef struct _VIABIOSREGTABLE {
+ CARD8 port[VIA_BIOS_REG_TABLE_MAX_NUM];
+ CARD8 offset[VIA_BIOS_REG_TABLE_MAX_NUM];
+ CARD8 mask[VIA_BIOS_REG_TABLE_MAX_NUM];
+ CARD8 data[VIA_BIOS_REG_TABLE_MAX_NUM];
+ int numEntry;
+} VIABIOSRegTableRec, *VIABIOSRegTablePtr;
+
+
+typedef struct _VIAVMODEENTRY {
+ unsigned short Width;
+ unsigned short Height;
+ unsigned short Bpp;
+ unsigned short Mode;
+ unsigned short MemNeed;
+ unsigned short MClk;
+ unsigned short VClk;
+ VIABIOSStdVGATableRec stdVgaTable;
+ VIABIOSRegTableRec extModeExtTable;
+} VIAModeEntry, *VIAModeEntryPtr;
+
+
+typedef struct _VIALCDMODEENTRY {
+ CARD16 LCDClk;
+ CARD16 VClk;
+ CARD16 LCDClk_12Bit;
+ CARD16 VClk_12Bit;
+ CARD8 port[VIA_BIOS_REG_LCD_MAX_NUM];
+ CARD8 offset[VIA_BIOS_REG_LCD_MAX_NUM];
+ CARD8 data[VIA_BIOS_REG_LCD_MAX_NUM];
+ int numEntry;
+} VIALCDModeEntry, *VIALCDModeEntryPtr;
+
+
+typedef struct _VIALCDMPATCHENTRY {
+ CARD8 Mode;
+ CARD16 LCDClk;
+ CARD16 VClk;
+ CARD16 LCDClk_12Bit;
+ CARD16 VClk_12Bit;
+ CARD8 port[VIA_BIOS_REG_LCD_MAX_NUM];
+ CARD8 offset[VIA_BIOS_REG_LCD_MAX_NUM];
+ CARD8 data[VIA_BIOS_REG_LCD_MAX_NUM];
+ int numEntry;
+} VIALCDMPatchEntry, *VIALCDMPatchEntryPtr;
+
+
+typedef struct _VIALCDMODEFIX {
+ CARD8 reqMode[32];
+ CARD8 fixMode[32];
+ int numEntry;
+} VIALCDModeFixRec, *VIALCDModeFixRecPtr;
+
+
+typedef struct _VIALCDPOWERSEQUENCE {
+ CARD8 powerSeq;
+ CARD8 port[4];
+ CARD8 offset[4];
+ CARD8 mask[4];
+ CARD8 data[4];
+ CARD16 delay[4];
+ int numEntry;
+} VIALCDPowerSeqRec, *VIALCDPowerSeqRecPtr;
+
+
+typedef struct _VIALCDMODETABLE {
+ CARD8 fpIndex;
+ CARD8 fpSize;
+ CARD8 powerSeq;
+ int numMPatchDP2Ctr;
+ int numMPatchDP2Exp;
+ int numMPatchDP1Ctr;
+ int numMPatchDP1Exp;
+ CARD16 SuptMode[VIA_BIOS_NUM_LCD_SUPPORT_MASK];
+ VIALCDModeEntry FPconfigTb;
+ VIALCDModeEntry InitTb;
+ VIALCDMPatchEntry MPatchDP2Ctr[VIA_BIOS_MAX_NUM_MPATCH2];
+ VIALCDMPatchEntry MPatchDP2Exp[VIA_BIOS_MAX_NUM_MPATCH2];
+ VIALCDMPatchEntry MPatchDP1Ctr[VIA_BIOS_MAX_NUM_MPATCH1];
+ VIALCDMPatchEntry MPatchDP1Exp[VIA_BIOS_MAX_NUM_MPATCH1];
+ VIALCDModeEntry LowResCtr;
+ VIALCDModeEntry LowResExp;
+ VIALCDModeEntry MCtr[VIA_BIOS_MAX_NUM_CTREXP];
+ VIALCDModeEntry MExp[VIA_BIOS_MAX_NUM_CTREXP];
+} VIALCDModeTableRec, *VIALCDModePtr;
+
+
+typedef struct _VIATVMASKTABLE {
+ CARD8 TV[VIA_BIOS_MAX_NUM_TV_REG];
+ CARD8 CRTC1[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD8 CRTC2[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD8 misc1;
+ CARD8 misc2;
+ int numTV;
+ int numCRTC1;
+ int numCRTC2;
+} VIABIOSTVMASKTableRec, *VIABIOSTVMASKTablePtr;
+
+typedef struct _VIASAA7108TVMASKTABLE {
+ CARD8 TV[VIA_BIOS_MAX_NUM_SAA7108_TV_REG];
+ CARD8 CRTC1[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD8 CRTC2[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD8 misc1;
+ CARD8 misc2;
+ int numTV;
+ int numCRTC1;
+ int numCRTC2;
+} VIABIOSSAA7108TVMASKTableRec, *VIABIOSSAA7108TVMASKTablePtr;
+
+typedef struct _VIAFS454TVMASKTABLE {
+ CARD8 CRTC1[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD8 CRTC2[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD8 misc1;
+ CARD8 misc2;
+ int numCRTC1;
+ int numCRTC2;
+} VIABIOSFS454TVMASKTableRec, *VIABIOSFS454TVMASKTablePtr;
+
+typedef struct _VIATVMODETABLE {
+ CARD8 TVNTSCC[VIA_BIOS_MAX_NUM_TV_REG];
+ CARD8 TVNTSCS[VIA_BIOS_MAX_NUM_TV_REG];
+ CARD8 CRTCNTSC1[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD8 MiscNTSC1[VIA_BIOS_NUM_TV_SPECIAL_REG];
+ CARD8 MiscNTSC2[VIA_BIOS_NUM_TV_SPECIAL_REG];
+ CARD8 CRTCNTSC2_8BPP[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD8 CRTCNTSC2_16BPP[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD8 CRTCNTSC2_32BPP[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD16 PatchNTSC2[VIA_BIOS_MAX_NUM_TV_PATCH];
+ CARD16 DotCrawlNTSC[VIA_BIOS_NUM_TV_OTHER];
+ CARD8 TVPALC[VIA_BIOS_MAX_NUM_TV_REG];
+ CARD8 TVPALS[VIA_BIOS_MAX_NUM_TV_REG];
+ CARD8 CRTCPAL1[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD8 MiscPAL1[VIA_BIOS_NUM_TV_SPECIAL_REG];
+ CARD8 MiscPAL2[VIA_BIOS_NUM_TV_SPECIAL_REG];
+ CARD8 CRTCPAL2_8BPP[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD8 CRTCPAL2_16BPP[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD8 CRTCPAL2_32BPP[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD16 PatchPAL2[VIA_BIOS_MAX_NUM_TV_PATCH];
+} VIABIOSTV2TableRec, *VIABIOSTV2TablePtr;
+
+
+typedef struct _VIATV3MODETABLE {
+ CARD8 TVNTSC[VIA_BIOS_MAX_NUM_TV_REG];
+ CARD8 CRTCNTSC1[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD8 MiscNTSC1[VIA_BIOS_NUM_TV_SPECIAL_REG];
+ CARD8 MiscNTSC2[VIA_BIOS_NUM_TV_SPECIAL_REG];
+ CARD8 CRTCNTSC2_8BPP[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD8 CRTCNTSC2_16BPP[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD8 CRTCNTSC2_32BPP[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD16 PatchNTSC2[VIA_BIOS_MAX_NUM_TV_PATCH];
+ CARD16 RGBNTSC[VIA_BIOS_NUM_TV_OTHER];
+ CARD16 YCbCrNTSC[VIA_BIOS_NUM_TV_OTHER];
+ CARD16 SDTV_RGBNTSC[VIA_BIOS_NUM_TV_OTHER];
+ CARD16 SDTV_YCbCrNTSC[VIA_BIOS_NUM_TV_OTHER];
+ CARD16 DotCrawlNTSC[VIA_BIOS_NUM_TV_OTHER];
+ CARD8 TVPAL[VIA_BIOS_MAX_NUM_TV_REG];
+ CARD8 CRTCPAL1[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD8 MiscPAL1[VIA_BIOS_NUM_TV_SPECIAL_REG];
+ CARD8 MiscPAL2[VIA_BIOS_NUM_TV_SPECIAL_REG];
+ CARD8 CRTCPAL2_8BPP[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD8 CRTCPAL2_16BPP[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD8 CRTCPAL2_32BPP[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD16 PatchPAL2[VIA_BIOS_MAX_NUM_TV_PATCH];
+ CARD16 RGBPAL[VIA_BIOS_NUM_TV_OTHER];
+ CARD16 YCbCrPAL[VIA_BIOS_NUM_TV_OTHER];
+ CARD16 SDTV_RGBPAL[VIA_BIOS_NUM_TV_OTHER];
+ CARD16 SDTV_YCbCrPAL[VIA_BIOS_NUM_TV_OTHER];
+} VIABIOSTV3TableRec, *VIABIOSTV3TablePtr;
+
+
+typedef struct _VIAPHILIPSMODETABLE {
+ CARD8 TVNTSC[VIA_BIOS_MAX_NUM_SAA7108_TV_REG];
+ CARD8 CRTCNTSC1[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD8 MiscNTSC1[VIA_BIOS_NUM_TV_SPECIAL_REG];
+ CARD8 MiscNTSC2[VIA_BIOS_NUM_TV_SPECIAL_REG];
+ CARD8 CRTCNTSC2_8BPP[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD8 CRTCNTSC2_16BPP[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD8 CRTCNTSC2_32BPP[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD16 PatchNTSC2[VIA_BIOS_MAX_NUM_TV_PATCH];
+ CARD16 RGBNTSC[VIA_BIOS_NUM_TV_OTHER];
+ CARD16 YCbCrNTSC[VIA_BIOS_NUM_TV_OTHER];
+ CARD8 TVPAL[VIA_BIOS_MAX_NUM_SAA7108_TV_REG];
+ CARD8 CRTCPAL1[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD8 MiscPAL1[VIA_BIOS_NUM_TV_SPECIAL_REG];
+ CARD8 MiscPAL2[VIA_BIOS_NUM_TV_SPECIAL_REG];
+ CARD8 CRTCPAL2_8BPP[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD8 CRTCPAL2_16BPP[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD8 CRTCPAL2_32BPP[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD16 PatchPAL2[VIA_BIOS_MAX_NUM_TV_PATCH];
+ CARD16 RGBPAL[VIA_BIOS_NUM_TV_OTHER];
+ CARD16 YCbCrPAL[VIA_BIOS_NUM_TV_OTHER];
+} VIABIOSSAA7108TableRec, *VIABIOSSAA7108TablePtr;
+
+typedef struct _VIACH7019MODETABLE {
+ CARD8 TVNTSC[VIA_BIOS_MAX_NUM_TV_REG];
+ CARD8 CRTCNTSC1[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD8 MiscNTSC1[VIA_BIOS_NUM_TV_SPECIAL_REG];
+ CARD8 MiscNTSC2[VIA_BIOS_NUM_TV_SPECIAL_REG];
+ CARD8 CRTCNTSC2_8BPP[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD8 CRTCNTSC2_16BPP[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD8 CRTCNTSC2_32BPP[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD16 PatchNTSC2[VIA_BIOS_MAX_NUM_TV_PATCH];
+ CARD16 DotCrawlNTSC[VIA_BIOS_NUM_TV_OTHER];
+ CARD8 TVPAL[VIA_BIOS_MAX_NUM_TV_REG];
+ CARD8 CRTCPAL1[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD8 MiscPAL1[VIA_BIOS_NUM_TV_SPECIAL_REG];
+ CARD8 MiscPAL2[VIA_BIOS_NUM_TV_SPECIAL_REG];
+ CARD8 CRTCPAL2_8BPP[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD8 CRTCPAL2_16BPP[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD8 CRTCPAL2_32BPP[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD16 PatchPAL2[VIA_BIOS_MAX_NUM_TV_PATCH];
+} VIABIOSCH7019TableRec, *VIABIOSCH7019TablePtr;
+
+typedef struct _VIAFS454MODETABLE {
+ CARD16 TVNTSC[VIA_BIOS_NUM_FS454_TV_REG];
+ CARD8 CRTCNTSC1[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD8 MiscNTSC1[VIA_BIOS_NUM_TV_SPECIAL_REG];
+ CARD8 MiscNTSC2[VIA_BIOS_NUM_TV_SPECIAL_REG];
+ CARD8 CRTCNTSC2_8BPP[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD8 CRTCNTSC2_16BPP[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD8 CRTCNTSC2_32BPP[VIA_BIOS_MAX_NUM_TV_CRTC];
+ CARD16 RGBNTSC[VIA_BIOS_NUM_TV_OTHER];
+ CARD16 YCbCrNTSC[VIA_BIOS_NUM_TV_OTHER];
+ CARD16 DotCrawlNTSC[VIA_BIOS_NUM_TV_OTHER];
+} VIABIOSFS454TableRec, *VIABIOSFS454TablePtr;
+
+typedef struct _VIAVMODETABLE {
+ unsigned short BIOSVer;
+ char * BIOSDate;
+ unsigned short NumModes;
+ int NumPowerOn;
+ int NumPowerOff;
+ VIAModeEntryPtr Modes;
+ VIABIOSRegTableRec commExtTable;
+ VIABIOSRegTableRec stdModeExtTable;
+ VIABIOSRefreshTableRec refreshTable[VIA_BIOS_NUM_RES][VIA_BIOS_NUM_REFRESH];
+ VIALCDModeTableRec lcdTable[VIA_BIOS_NUM_PANEL];
+ VIALCDPowerSeqRec powerOn[VIA_BIOS_NUM_LCD_POWER_SEQ];
+ VIALCDPowerSeqRec powerOff[VIA_BIOS_NUM_LCD_POWER_SEQ];
+ VIALCDModeFixRec modeFix;
+ VIABIOSTVMASKTableRec tv2MaskTable;
+ VIABIOSTVMASKTableRec tv3MaskTable;
+ VIABIOSTVMASKTableRec vt1622aMaskTable;
+ VIABIOSSAA7108TVMASKTableRec saa7108MaskTable;
+ VIABIOSTVMASKTableRec ch7019MaskTable;
+ VIABIOSFS454TVMASKTableRec fs454MaskTable;
+ VIABIOSTV2TableRec tv2Table[VIA_BIOS_NUM_TV2];
+ VIABIOSTV2TableRec tv2OverTable[VIA_BIOS_NUM_TV2];
+ VIABIOSTV3TableRec tv3Table[VIA_BIOS_NUM_TV3];
+ VIABIOSTV3TableRec tv3OverTable[VIA_BIOS_NUM_TV3];
+ VIABIOSTV3TableRec vt1622aTable[VIA_BIOS_NUM_TV3];
+ VIABIOSTV3TableRec vt1622aOverTable[VIA_BIOS_NUM_TV3];
+ VIABIOSSAA7108TableRec saa7108Table[VIA_BIOS_NUM_SAA7108];
+ VIABIOSSAA7108TableRec saa7108OverTable[VIA_BIOS_NUM_SAA7108];
+ VIABIOSCH7019TableRec ch7019Table[VIA_BIOS_NUM_CH7019];
+ VIABIOSCH7019TableRec ch7019OverTable[VIA_BIOS_NUM_CH7019];
+ VIABIOSFS454TableRec fs454Table[VIA_BIOS_NUM_FS454];
+ VIABIOSFS454TableRec fs454OverTable[VIA_BIOS_NUM_FS454];
+} VIAModeTableRec, *VIAModeTablePtr;
+
+typedef struct _UTUSERSETTING
+{
+ Bool DefaultSetting;
+ Bool ADAPTIVE_FFILTER_ON;
+ unsigned long UT_TV_VPOSITION;
+ unsigned long UT_TV_HPOSITION;
+ unsigned long UT_TV_FFILTER;
+ unsigned long UT_TV_ADAPTIVE_FFILTER;
+ unsigned long UT_TV_BRIGHTNESS;
+ unsigned long UT_TV_CONTRAST;
+ unsigned long UT_TV_SATURATION;
+ unsigned long UT_TV_TINT;
+} UTUSERSETTING, *UTUSERSETTINGptr;
+
+typedef struct _VIABIOSINFO {
+
+ VIAModeTablePtr pModeTable;
+
+ int Chipset;
+ int ChipRev;
+ unsigned char TMDS;
+ unsigned char LVDS;
+ /*int DVIEncoder;*/
+ int TVEncoder;
+ int BIOSTVTabVer;
+
+ unsigned char* MapBase;
+ Bool FirstInit;
+ unsigned char* FBBase;
+ unsigned long videoRambytes;
+ unsigned char MemClk;
+ int scrnIndex;
+
+ unsigned int mode, refresh, resMode;
+ int countWidthByQWord;
+ int offsetWidthByQWord;
+
+ unsigned char ConnectedDevice;
+ unsigned char ActiveDevice;
+ unsigned char DefaultActiveDevice;
+
+ /* Here are all the BIOS Relative Options */
+ int BIOSMajorVersion;
+ int BIOSMinorVersion;
+ unsigned char BIOSDateYear;
+ unsigned char BIOSDateMonth;
+ unsigned char BIOSDateDay;
+ Bool A2;
+ Bool UseBIOS;
+ Bool LCDDualEdge; /* mean add-on card is 2CH or Dual or DDR */
+ Bool DVIAttach;
+ Bool LCDAttach;
+ Bool Center;
+ Bool TVAttach;
+ Bool TVDotCrawl;
+ unsigned char BusWidth; /* Digital Output Bus Width */
+ int PanelSize;
+ int TVType;
+ int TVOutput;
+ int TVVScan;
+ int TVHScale;
+ int OptRefresh;
+ int Refresh;
+ int FoundRefresh;
+
+ /* LCD Simultaneous Expand Mode HWCursor Y Scale */
+ Bool scaleY;
+ int panelX;
+ int panelY;
+ int resY;
+
+ /* Some Used Member of ScrnInfoRec */
+ int bitsPerPixel; /* fb bpp */
+ int displayWidth; /* memory pitch */
+ int frameX1; /* viewport position */
+ int frameY1;
+ int SaveframeX1;
+ int SaveframeY1;
+
+ /* Some Used Member of DisplayModeRec */
+ int Clock; /* pixel clock freq */
+ int HTotal;
+ int VTotal;
+ int HDisplay; /* horizontal timing */
+ int VDisplay; /* vertical timing */
+ int SaveHDisplay;
+ int SaveVDisplay;
+ int CrtcHDisplay;
+ int CrtcVDisplay;
+ int SaveCrtcHDisplay;
+ int SaveCrtcVDisplay;
+
+ /* I2C & DDC */
+ GPIOI2C_INFO GPIOI2CInfo;
+ I2CBusPtr I2C_Port1;
+ I2CBusPtr I2C_Port2;
+ xf86MonPtr DDC1;
+ xf86MonPtr DDC2;
+ I2CDevPtr dev;
+
+ unsigned int resTVMode;
+ unsigned char TVI2CAdd;
+ unsigned char TVRegs[0xFF];
+
+ /* MHS */
+ Bool SAMM; /* SAMM success or not? */
+ Bool IsSecondary;
+ Bool HasSecondary;
+ Bool SetTV;
+ Bool SetDVI;
+
+ /* Utility User Setting */
+ UTUSERSETTINGptr pUTUSERSETTING;
+ LOCO colors[256]; /* Gamma value. LOCO typedef in colormapst.h */
+
+} VIABIOSInfoRec, *VIABIOSInfoPtr;
+
+/* Functions protype */
+
+int VIACheckTVExist(VIABIOSInfoPtr pBIOSInfo);
+long VIAQueryChipInfo(VIABIOSInfoPtr pBIOSInfo);
+char* VIAGetBIOSInfo(VIABIOSInfoPtr pBIOSInfo);
+Bool VIASetActiveDisplay(VIABIOSInfoPtr pBIOSInfo, unsigned char display);
+unsigned char VIAGetActiveDisplay(VIABIOSInfoPtr pBIOSInfo);
+unsigned char VIASensorCH7019(VIABIOSInfoPtr pBIOSInfo);
+unsigned char VIASensorSAA7108(VIABIOSInfoPtr pBIOSInfo);
+unsigned char VIASensorTV2(VIABIOSInfoPtr pBIOSInfo);
+unsigned char VIASensorTV3(VIABIOSInfoPtr pBIOSInfo);
+Bool VIASensorDVI(VIABIOSInfoPtr pBIOSInfo);
+Bool VIAPostDVI(VIABIOSInfoPtr pBIOSInfo);
+unsigned char VIAGetDeviceDetect(VIABIOSInfoPtr pBIOSInfo);
+unsigned char VIAGetPanelInfo(VIABIOSInfoPtr pBIOSInfo);
+Bool VIASetPanelState(VIABIOSInfoPtr pBIOSInfo, unsigned char state);
+unsigned char VIAGetPanelState(VIABIOSInfoPtr pBIOSInfo);
+int VIAQueryDVIEDID(VIABIOSInfoPtr pBIOSInfo);
+unsigned char VIAGetPanelSizeFromDDCv1(VIABIOSInfoPtr pBIOSInfo);
+unsigned char VIAGetPanelSizeFromDDCv2(VIABIOSInfoPtr pBIOSInfo);
+int VIAGetTVTabVer(VIABIOSInfoPtr pBIOSInfo, unsigned char *pBIOS);
+void VIAPreSetCH7019Mode(VIABIOSInfoPtr pBIOSInfo);
+void VIAPreSetFS454Mode(VIABIOSInfoPtr pBIOSInfo);
+void VIAPreSetSAA7108Mode(VIABIOSInfoPtr pBIOSInfo);
+void VIAPreSetTV2Mode(VIABIOSInfoPtr pBIOSInfo);
+void VIAPreSetTV3Mode(VIABIOSInfoPtr pBIOSInfo);
+void VIAPreSetVT1623Mode(VIABIOSInfoPtr pBIOSInfo);
+void VIAPostSetCH7019Mode(VIABIOSInfoPtr pBIOSInfo);
+void VIAPostSetFS454Mode(VIABIOSInfoPtr pBIOSInfo);
+void VIAPostSetSAA7108Mode(VIABIOSInfoPtr pBIOSInfo);
+void VIAPostSetTV2Mode(VIABIOSInfoPtr pBIOSInfo);
+void VIAPostSetTV3Mode(VIABIOSInfoPtr pBIOSInfo);
+Bool VIAGetBIOSTable(VIABIOSInfoPtr pBIOSInfo);
+Bool VIAFindModeUseBIOSTable(VIABIOSInfoPtr pBIOSInfo);
+Bool VIASetModeUseBIOSTable(VIABIOSInfoPtr pBIOSInfo);
+Bool VIASetModeForMHS(VIABIOSInfoPtr pBIOSInfo);
+Bool VIASavePalette(ScrnInfoPtr pScrn, LOCO *colors);
+Bool VIARestorePalette(ScrnInfoPtr pScrn, LOCO *colors);
+void VIAPitchAlignmentPatch(VIABIOSInfoPtr pBIOSInfo);
+void VIASetLCDMode(VIABIOSInfoPtr pBIOSInfo);
+int VIAFindSupportRefreshRate(VIABIOSInfoPtr pBIOSInfo, int resIndex);
+void VIADisableExtendedFIFO(VIABIOSInfoPtr pBIOSInfo);
+void VIAEnableExtendedFIFO(VIABIOSInfoPtr pBIOSInfo);
+
+
+int VIABIOS_GetBIOSVersion(ScrnInfoPtr pScrn);
+unsigned char VIABIOS_GetActiveDevice(ScrnInfoPtr pScrn);
+unsigned char VIABIOS_GetDisplayDeviceAttached(ScrnInfoPtr pScrn);
+unsigned short VIABIOS_GetTVConfiguration(ScrnInfoPtr pScrn, CARD16 dx);
+unsigned char VIABIOS_GetTVEncoderType(ScrnInfoPtr pScrn);
+unsigned int VIABIOS_GetDisplayDeviceInfo(ScrnInfoPtr pScrn, unsigned char *numDevice);
+unsigned char VIABIOS_GetFlatPanelInfo(ScrnInfoPtr pScrn);
+Bool VIABIOS_GetBIOSDate(ScrnInfoPtr pScrn);
+int VIABIOS_GetVideoMemSize(ScrnInfoPtr pScrn);
+Bool VIABIOS_SetActiveDevice(ScrnInfoPtr pScrn);
+
+void VIAGetTV2Mask(VIAModeTablePtr pViaModeTable, unsigned char *pBIOS,
+ unsigned char *pTable);
+void VIAGetTV2NTSC(VIAModeTablePtr pViaModeTable, unsigned char *pBIOS,
+ unsigned char *pTable);
+void VIAGetTV2PAL(VIAModeTablePtr pViaModeTable, unsigned char *pBIOS,
+ unsigned char *pTable);
+void VIAGetTV3Mask(VIAModeTablePtr pViaModeTable, unsigned char *pBIOS,
+ unsigned char *pTable);
+void VIAGetTV3NTSC(VIAModeTablePtr pViaModeTable, unsigned char *pBIOS,
+ unsigned char *pTable);
+void VIAGetTV3PAL(VIAModeTablePtr pViaModeTable, unsigned char *pBIOS,
+ unsigned char *pTable);
+void VIAGetSAA7108Mask(VIAModeTablePtr pViaModeTable, unsigned char *pBIOS,
+ unsigned char *pTable);
+void VIAGetSAA7108NTSC(VIAModeTablePtr pViaModeTable, unsigned char *pBIOS,
+ unsigned char *pTable);
+void VIAGetSAA7108PAL(VIAModeTablePtr pViaModeTable, unsigned char *pBIOS,
+ unsigned char *pTable);
+void VIAGetCH7019Mask(VIAModeTablePtr pViaModeTable, unsigned char *pBIOS,
+ unsigned char *pTable);
+void VIAGetCH7019NTSC(VIAModeTablePtr pViaModeTable, unsigned char *pBIOS,
+ unsigned char *pTable);
+void VIAGetCH7019PAL(VIAModeTablePtr pViaModeTable, unsigned char *pBIOS,
+ unsigned char *pTable);
+void VIAGetFS454Mask(VIAModeTablePtr pViaModeTable, unsigned char *pBIOS,
+ unsigned char *pTable);
+void VIAGetFS454NTSC(VIAModeTablePtr pViaModeTable, unsigned char *pBIOS,
+ unsigned char *pTable);
+/*void VIAGetFS454PAL(VIAModeTablePtr pViaModeTable, unsigned char *pBIOS,
+ unsigned char *pTable);*/
+
+#ifdef CREATE_TV2_HEADERFILE
+Bool VIACreateTV2(VIAModeTablePtr pViaModeTable);
+#endif
+#ifdef CREATE_TV3_HEADERFILE
+Bool VIACreateTV3(VIAModeTablePtr pViaModeTable);
+#endif
+#ifdef CREATE_VT1622A_HEADERFILE
+Bool VIACreateVT1622A(VIAModeTablePtr pViaModeTable);
+#endif
+#ifdef CREATE_SAA7108_HEADERFILE
+Bool VIACreateSAA7108(VIAModeTablePtr pViaModeTable);
+#endif
+#ifdef CREATE_CH7019_HEADERFILE
+Bool VIACreateCH7019(VIAModeTablePtr pViaModeTable);
+#endif
+#ifdef CREATE_FS454_HEADERFILE
+Bool VIACreateFS454(VIAModeTablePtr pViaModeTable);
+#endif
+
+/* in via_bandwidth.c */
+void VIADisabledExtendedFIFO(VIABIOSInfoPtr pBIOSInfo);
+void VIAEnabledPrimaryExtendedFIFO(VIABIOSInfoPtr pBIOSInfo);
+void VIAEnabledSecondaryExtendedFIFO(VIABIOSInfoPtr pBIOSInfo);
+void VIAFillExpireNumber(VIABIOSInfoPtr pBIOSInfo);
+
+#endif /* _VIA_BIOS_H_ */
diff --git a/src/via_cursor.c b/src/via_cursor.c
new file mode 100644
index 0000000..ef4a728
--- /dev/null
+++ b/src/via_cursor.c
@@ -0,0 +1,191 @@
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/via/via_cursor.c,v 1.3 2003/08/27 15:16:08 tsi Exp $ */
+/*
+ * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
+ * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sub license,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ * VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/*************************************************************************
+ *
+ * File: via_cursor.c
+ * Content: Hardware cursor support for VIA/S3G UniChrom
+ *
+ ************************************************************************/
+
+#include "via_driver.h"
+
+static void VIALoadCursorImage(ScrnInfoPtr pScrn, unsigned char *src);
+static void VIASetCursorPosition(ScrnInfoPtr pScrn, int x, int y);
+static void VIASetCursorColors(ScrnInfoPtr pScrn, int bg, int fg);
+
+
+/*
+ * Read/write to the DAC via MMIO
+ */
+
+#define inCRReg(reg) (VGAHWPTR(pScrn))->readCrtc(VGAHWPTR(pScrn), reg)
+#define outCRReg(reg, val) (VGAHWPTR(pScrn))->writeCrtc(VGAHWPTR(pScrn), reg, val)
+#define inStatus1() (VGAHWPTR(pScrn))->readST01(VGAHWPTR(pScrn))
+
+
+#define MAX_CURS 32
+
+Bool
+VIAHWCursorInit(ScreenPtr pScreen)
+{
+ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+ VIAPtr pVia = VIAPTR(pScrn);
+ xf86CursorInfoPtr infoPtr;
+
+ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIAHWCursorInit\n"));
+ infoPtr = xf86CreateCursorInfoRec();
+ if (!infoPtr)
+ return FALSE;
+
+ pVia->CursorInfoRec = infoPtr;
+
+ infoPtr->MaxWidth = MAX_CURS;
+ infoPtr->MaxHeight = MAX_CURS;
+ infoPtr->Flags = HARDWARE_CURSOR_SOURCE_MASK_INTERLEAVE_32 |
+ HARDWARE_CURSOR_AND_SOURCE_WITH_MASK |
+ /*HARDWARE_CURSOR_SWAP_SOURCE_AND_MASK |*/
+ HARDWARE_CURSOR_TRUECOLOR_AT_8BPP |
+ HARDWARE_CURSOR_INVERT_MASK |
+ HARDWARE_CURSOR_BIT_ORDER_MSBFIRST|
+ 0;
+
+ infoPtr->SetCursorColors = VIASetCursorColors;
+ infoPtr->SetCursorPosition = VIASetCursorPosition;
+ infoPtr->LoadCursorImage = VIALoadCursorImage;
+ infoPtr->HideCursor = VIAHideCursor;
+ infoPtr->ShowCursor = VIAShowCursor;
+ infoPtr->UseHWCursor = NULL;
+
+ if (!pVia->CursorStart) {
+ pVia->CursorStart = pVia->FBFreeEnd - VIA_CURSOR_SIZE;
+ pVia->FBFreeEnd -= VIA_CURSOR_SIZE;
+
+ /* Set cursor location in frame buffer. */
+ VIASETREG(VIA_REG_CURSOR_MODE, pVia->CursorStart);
+ }
+
+ return xf86InitCursor(pScreen, infoPtr);
+}
+
+
+
+void
+VIAShowCursor(ScrnInfoPtr pScrn)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ CARD32 dwCursorMode;
+
+ dwCursorMode = VIAGETREG(VIA_REG_CURSOR_MODE);
+
+ /* Turn on Hardware Cursor */
+ VIASETREG(VIA_REG_CURSOR_MODE, dwCursorMode | 0x3);
+}
+
+
+void
+VIAHideCursor(ScrnInfoPtr pScrn)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ CARD32 dwCursorMode;
+
+ dwCursorMode = VIAGETREG(VIA_REG_CURSOR_MODE);
+
+ /* Turn cursor off. */
+ VIASETREG(VIA_REG_CURSOR_MODE, dwCursorMode & 0xFFFFFFFE);
+}
+
+
+static void
+VIALoadCursorImage(ScrnInfoPtr pScrn, unsigned char* src)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ CARD32 dwCursorMode;
+
+ WaitIdle();
+
+ dwCursorMode = VIAGETREG(VIA_REG_CURSOR_MODE);
+
+ /* Turn cursor off. */
+ VIASETREG(VIA_REG_CURSOR_MODE, dwCursorMode & 0xFFFFFFFE);
+
+ /* Upload the cursor image to the frame buffer. */
+ memcpy(pVia->FBBase + pVia->CursorStart, src, MAX_CURS * MAX_CURS / 8 * 2);
+
+ /* Restore cursor status */
+ VIASETREG(VIA_REG_CURSOR_MODE, dwCursorMode);
+}
+
+static void
+VIASetCursorPosition(ScrnInfoPtr pScrn, int x, int y)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo;
+ unsigned char xoff, yoff;
+ CARD32 dwCursorMode;
+
+ if (x < 0) {
+ xoff = ((-x) & 0xFE);
+ x = 0;
+ } else {
+ xoff = 0;
+ }
+
+ if (y < 0) {
+ yoff = ((-y) & 0xFE);
+ y = 0;
+ } else {
+ yoff = 0;
+ /* LCD Expand Mode Cursor Y Position Re-Calculated */
+ if (pBIOSInfo->scaleY) {
+ y = (int)(((pBIOSInfo->panelY * y) + (pBIOSInfo->resY >> 1)) / pBIOSInfo->resY);
+ }
+ }
+
+ /* Hide cursor before set cursor position in order to avoid ghost cursor
+ * image when directly set cursor position. It should be a HW bug but
+ * we can use patch by SW. */
+ dwCursorMode = VIAGETREG(VIA_REG_CURSOR_MODE);
+
+ /* Turn cursor off. */
+ VIASETREG(VIA_REG_CURSOR_MODE, dwCursorMode & 0xFFFFFFFE);
+
+ VIASETREG(VIA_REG_CURSOR_ORG, ((xoff << 16) | (yoff & 0x003f)));
+ VIASETREG(VIA_REG_CURSOR_POS, ((x << 16) | (y & 0x07ff)));
+
+ /* Restore cursor status */
+ VIASETREG(VIA_REG_CURSOR_MODE, dwCursorMode);
+}
+
+
+static void
+VIASetCursorColors(ScrnInfoPtr pScrn, int bg, int fg)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+
+ VIASETREG(VIA_REG_CURSOR_FG, fg);
+ VIASETREG(VIA_REG_CURSOR_BG, bg);
+
+}
diff --git a/src/via_dga.c b/src/via_dga.c
new file mode 100644
index 0000000..8481c3a
--- /dev/null
+++ b/src/via_dga.c
@@ -0,0 +1,355 @@
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/via/via_dga.c,v 1.4 2003/08/27 15:16:08 tsi Exp $ */
+/*
+ * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
+ * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sub license,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ * VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+
+#include "xaalocal.h"
+#include "via_driver.h"
+#include "dgaproc.h"
+
+
+static Bool VIADGAOpenFramebuffer(ScrnInfoPtr, char **, unsigned char **,
+ int *, int *, int *);
+static Bool VIADGASetMode(ScrnInfoPtr, DGAModePtr);
+static int VIADGAGetViewport(ScrnInfoPtr);
+static void VIADGASetViewport(ScrnInfoPtr, int, int, int);
+static void VIADGAFillRect(ScrnInfoPtr, int, int, int, int, unsigned long);
+static void VIADGABlitRect(ScrnInfoPtr, int, int, int, int, int, int);
+
+
+static
+DGAFunctionRec VIADGAFuncs = {
+ VIADGAOpenFramebuffer,
+ NULL, /* CloseFrameBuffer */
+ VIADGASetMode,
+ VIADGASetViewport,
+ VIADGAGetViewport,
+ VIAAccelSync,
+ VIADGAFillRect,
+ VIADGABlitRect,
+ NULL /* BlitTransRect */
+};
+
+#define DGATRACE 4
+
+
+static DGAModePtr
+VIASetupDGAMode(
+ ScrnInfoPtr pScrn,
+ DGAModePtr modes,
+ int *num,
+ int bitsPerPixel,
+ int depth,
+ Bool pixmap,
+ int secondPitch,
+ unsigned long red,
+ unsigned long green,
+ unsigned long blue,
+ short visualClass
+)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ DGAModePtr mode, newmodes = NULL;
+ DisplayModePtr pMode, firstMode;
+ int otherPitch, Bpp = bitsPerPixel >> 3;
+ Bool oneMore;
+
+ xf86ErrorFVerb(DGATRACE, " VIASetupDGAMode\n");
+
+ pMode = firstMode = pScrn->modes;
+
+ /*
+ * DGA 1.0 would only provide modes where the depth and stride
+ * matched the current desktop. Some DGA apps might still expect
+ * this, so we provide them, too.
+ */
+
+ while (pMode) {
+
+ otherPitch = secondPitch ? secondPitch : pMode->HDisplay;
+
+ if (pMode->HDisplay != otherPitch) {
+ newmodes = xrealloc(modes, (*num + 2) * sizeof(DGAModeRec));
+ oneMore = TRUE;
+ }
+ else {
+ newmodes = xrealloc(modes, (*num + 1) * sizeof(DGAModeRec));
+ oneMore = FALSE;
+ }
+
+ if (!newmodes) {
+ xfree(modes);
+ return NULL;
+ }
+
+ modes = newmodes;
+
+SECOND_PASS:
+
+ mode = modes + *num;
+ (*num)++;
+
+ mode->mode = pMode;
+ mode->flags = DGA_CONCURRENT_ACCESS | DGA_PIXMAP_AVAILABLE;
+
+ if(!pVia->NoAccel)
+ mode->flags |= DGA_FILL_RECT | DGA_BLIT_RECT;
+
+ if (pMode->Flags & V_DBLSCAN)
+ mode->flags |= DGA_DOUBLESCAN;
+
+ if (pMode->Flags & V_INTERLACE)
+ mode->flags |= DGA_INTERLACED;
+
+ mode->byteOrder = pScrn->imageByteOrder;
+ mode->depth = depth;
+ mode->bitsPerPixel = bitsPerPixel;
+ mode->red_mask = red;
+ mode->green_mask = green;
+ mode->blue_mask = blue;
+ mode->visualClass = visualClass;
+ mode->viewportWidth = pMode->HDisplay;
+ mode->viewportHeight = pMode->VDisplay;
+ mode->xViewportStep = 2;
+ mode->yViewportStep = 1;
+ mode->viewportFlags = DGA_FLIP_RETRACE;
+ mode->offset = 0;
+ mode->address = pVia->FBBase;
+
+ xf86ErrorFVerb(DGATRACE,
+ "VIADGAInit vpWid=%d, vpHgt=%d, Bpp=%d, mdbitsPP=%d\n",
+ mode->viewportWidth,
+ mode->viewportHeight,
+ Bpp,
+ mode->bitsPerPixel);
+
+ if (oneMore) { /* first one is narrow width */
+ mode->bytesPerScanline = ((pMode->HDisplay * Bpp) + 3) & ~3L;
+ mode->imageWidth = pMode->HDisplay;
+ mode->imageHeight = pMode->VDisplay;
+ mode->pixmapWidth = mode->imageWidth;
+ mode->pixmapHeight = mode->imageHeight;
+ mode->maxViewportX = mode->imageWidth - mode->viewportWidth;
+
+ /* this might need to get clamped to some maximum */
+ mode->maxViewportY = mode->imageHeight - mode->viewportHeight;
+ oneMore = FALSE;
+
+ xf86ErrorFVerb(DGATRACE,
+ "VIADGAInit 1 imgHgt=%d, stride=%d\n",
+ mode->imageHeight,
+ mode->bytesPerScanline );
+
+ goto SECOND_PASS;
+ }
+ else {
+ mode->bytesPerScanline = ((pScrn->displayWidth * Bpp) + 3) & ~3L;
+ mode->imageWidth = pScrn->displayWidth;
+ mode->imageHeight = pVia->videoRambytes / mode->bytesPerScanline;
+ mode->pixmapWidth = mode->imageWidth;
+ mode->pixmapHeight = mode->imageHeight;
+ mode->maxViewportX = mode->imageWidth - mode->viewportWidth;
+ /* this might need to get clamped to some maximum */
+ mode->maxViewportY = mode->imageHeight - mode->viewportHeight;
+
+ xf86ErrorFVerb(DGATRACE,
+ "VIADGAInit 2 imgHgt=%d, stride=%d\n",
+ mode->imageHeight,
+ mode->bytesPerScanline);
+ }
+
+ pMode = pMode->next;
+
+ if (pMode == firstMode)
+ break;
+ }
+
+ return modes;
+}
+
+
+Bool
+VIADGAInit(ScreenPtr pScreen)
+{
+ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+ VIAPtr pVia = VIAPTR(pScrn);
+ DGAModePtr modes = NULL;
+ int num = 0;
+
+ xf86ErrorFVerb(DGATRACE, " VIADGAInit\n");
+
+ /* 8 */
+ modes = VIASetupDGAMode(pScrn, modes, &num, 8, 8,
+ (pScrn->bitsPerPixel == 8),
+ (pScrn->bitsPerPixel != 8) ? 0 : pScrn->displayWidth,
+ 0, 0, 0, PseudoColor);
+
+ /* 16 */
+ modes = VIASetupDGAMode(pScrn, modes, &num, 16, 16,
+ (pScrn->bitsPerPixel == 16),
+ (pScrn->depth != 16) ? 0 : pScrn->displayWidth,
+ 0xf800, 0x07e0, 0x001f, TrueColor);
+
+ modes = VIASetupDGAMode(pScrn, modes, &num, 16, 16,
+ (pScrn->bitsPerPixel == 16),
+ (pScrn->depth != 16) ? 0 : pScrn->displayWidth,
+ 0xf800, 0x07e0, 0x001f, DirectColor);
+
+ /* 24-in-32 */
+ modes = VIASetupDGAMode(pScrn, modes, &num, 32, 24,
+ (pScrn->bitsPerPixel == 32),
+ (pScrn->bitsPerPixel != 32) ? 0 : pScrn->displayWidth,
+ 0xff0000, 0x00ff00, 0x0000ff, TrueColor);
+
+ modes = VIASetupDGAMode(pScrn, modes, &num, 32, 24,
+ (pScrn->bitsPerPixel == 32),
+ (pScrn->bitsPerPixel != 32) ? 0 : pScrn->displayWidth,
+ 0xff0000, 0x00ff00, 0x0000ff, DirectColor);
+
+ pVia->numDGAModes = num;
+ pVia->DGAModes = modes;
+
+ return DGAInit(pScreen, &VIADGAFuncs, modes, num);
+}
+
+
+static Bool
+VIADGASetMode(ScrnInfoPtr pScrn, DGAModePtr pMode)
+{
+ int index = pScrn->pScreen->myNum;
+ VIAPtr pVia = VIAPTR(pScrn);
+
+ if (!pMode) { /* restore the original mode */
+ /* put the ScreenParameters back */
+
+ pScrn->displayWidth = pVia->DGAOldDisplayWidth;
+ pScrn->bitsPerPixel = pVia->DGAOldBitsPerPixel;
+ pScrn->depth = pVia->DGAOldDepth;
+
+ VIASwitchMode(index, pScrn->currentMode, 0);
+ if (pVia->hwcursor)
+ VIAShowCursor(pScrn);
+
+ pVia->DGAactive = FALSE;
+ }
+ else {
+#if 0
+ ErrorF("pScrn->bitsPerPixel %d, pScrn->depth %d\n",
+ pScrn->bitsPerPixel, pScrn->depth);
+ ErrorF(" want bitsPerPixel %d, want depth %d\n",
+ pMode->bitsPerPixel, pMode->depth);
+#endif
+
+ if (pVia->hwcursor)
+ VIAHideCursor(pScrn);
+
+ if (!pVia->DGAactive) { /* save the old parameters */
+ pVia->DGAOldDisplayWidth = pScrn->displayWidth;
+ pVia->DGAOldBitsPerPixel = pScrn->bitsPerPixel;
+ pVia->DGAOldDepth = pScrn->depth;
+
+ pVia->DGAactive = TRUE;
+ }
+
+ pScrn->bitsPerPixel = pMode->bitsPerPixel;
+ pScrn->depth = pMode->depth;
+ pScrn->displayWidth = pMode->bytesPerScanline /
+ (pMode->bitsPerPixel >> 3);
+
+ VIASwitchMode(index, pMode->mode, 0);
+ }
+
+ return TRUE;
+}
+
+
+static int
+VIADGAGetViewport(ScrnInfoPtr pScrn)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ return pVia->DGAViewportStatus;
+}
+
+
+static void
+VIADGASetViewport(ScrnInfoPtr pScrn, int x, int y, int flags)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+
+ VIAAdjustFrame(pScrn->pScreen->myNum, x, y, flags);
+ pVia->DGAViewportStatus = 0; /* MGAAdjustFrame loops until finished */
+}
+
+
+static void
+VIADGAFillRect(ScrnInfoPtr pScrn, int x, int y, int w, int h, unsigned long color)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+
+ if (pVia->AccelInfoRec) {
+ (*pVia->AccelInfoRec->SetupForSolidFill)(pScrn, color, GXcopy, ~0);
+ (*pVia->AccelInfoRec->SubsequentSolidFillRect)(pScrn, x, y, w, h);
+ SET_SYNC_FLAG(pVia->AccelInfoRec);
+ }
+}
+
+
+static void
+VIADGABlitRect(ScrnInfoPtr pScrn, int srcx, int srcy, int w, int h,
+ int dstx, int dsty)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+
+ if (pVia->AccelInfoRec) {
+ int xdir = ((srcx < dstx) && (srcy == dsty)) ? -1 : 1;
+ int ydir = (srcy < dsty) ? -1 : 1;
+
+ (*pVia->AccelInfoRec->SetupForScreenToScreenCopy)(
+ pScrn, xdir, ydir, GXcopy, ~0, -1);
+ (*pVia->AccelInfoRec->SubsequentScreenToScreenCopy)(
+ pScrn, srcx, srcy, dstx, dsty, w, h);
+ SET_SYNC_FLAG(pVia->AccelInfoRec);
+ }
+}
+
+
+static Bool
+VIADGAOpenFramebuffer(
+ ScrnInfoPtr pScrn,
+ char **name,
+ unsigned char **mem,
+ int *size,
+ int *offset,
+ int *flags)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+
+ *name = NULL; /* no special device */
+ *mem = (unsigned char*)pVia->FrameBufferBase;
+ *size = pVia->videoRambytes;
+ *offset = 0;
+ *flags = DGA_NEED_ROOT;
+
+ return TRUE;
+}
diff --git a/src/via_dri.c b/src/via_dri.c
new file mode 100644
index 0000000..ce5dade
--- /dev/null
+++ b/src/via_dri.c
@@ -0,0 +1,610 @@
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/via/via_dri.c,v 1.4 2003/09/24 02:43:30 dawes Exp $ */
+/*
+ * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
+ * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sub license,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ * VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+#include "xf86.h"
+#include "xf86_OSproc.h"
+#include "xf86_ansic.h"
+#include "xf86Priv.h"
+
+#include "xf86PciInfo.h"
+#include "xf86Pci.h"
+
+#define _XF86DRI_SERVER_
+#include "GL/glxtokens.h"
+#include "sarea.h"
+
+#include "via_driver.h"
+#include "via_dri.h"
+#include "via_common.h"
+#include "xf86drm.h"
+
+extern void GlxSetVisualConfigs(
+ int nconfigs,
+ __GLXvisualConfig *configs,
+ void **configprivs
+);
+
+#define VIDEO 0
+#define AGP 1
+#define AGP_PAGE_SIZE 4096
+#define AGP_PAGES 8192
+#define AGP_SIZE (AGP_PAGE_SIZE * AGP_PAGES)
+#define AGP_CMDBUF_PAGES 256
+#define AGP_CMDBUF_SIZE (AGP_PAGE_SIZE * AGP_CMDBUF_PAGES)
+
+static char VIAKernelDriverName[] = "via";
+static char VIAClientDriverName[] = "via";
+int test_alloc_FB(ScreenPtr pScreen, VIAPtr pVia, int Size);
+int test_alloc_AGP(ScreenPtr pScreen, VIAPtr pVia, int Size);
+static Bool VIAInitVisualConfigs(ScreenPtr pScreen);
+static Bool VIADRIAgpInit(ScreenPtr pScreen, VIAPtr pVia);
+static Bool VIADRIPciInit(ScreenPtr pScreen, VIAPtr pVia);
+static Bool VIADRIFBInit(ScreenPtr pScreen, VIAPtr pVia);
+static Bool VIADRIKernelInit(ScreenPtr pScreen, VIAPtr pVia);
+static Bool VIADRIMapInit(ScreenPtr pScreen, VIAPtr pVia);
+
+static Bool VIACreateContext(ScreenPtr pScreen, VisualPtr visual,
+ drmContext hwContext, void *pVisualConfigPriv,
+ DRIContextType contextStore);
+static void VIADestroyContext(ScreenPtr pScreen, drmContext hwContext,
+ DRIContextType contextStore);
+static void VIADRISwapContext(ScreenPtr pScreen, DRISyncType syncType,
+ DRIContextType readContextType,
+ void *readContextStore,
+ DRIContextType writeContextType,
+ void *writeContextStore);
+static void VIADRIInitBuffers(WindowPtr pWin, RegionPtr prgn, CARD32 index);
+static void VIADRIMoveBuffers(WindowPtr pParent, DDXPointRec ptOldOrg,
+ RegionPtr prgnSrc, CARD32 index);
+
+
+static Bool VIADRIAgpInit(ScreenPtr pScreen, VIAPtr pVia)
+{
+ unsigned long agp_phys;
+ unsigned int agpaddr;
+ VIADRIPtr pVIADRI;
+ DRIInfoPtr pDRIInfo;
+ pDRIInfo = pVia->pDRIInfo;
+ pVIADRI = pDRIInfo->devPrivate;
+ pVia->agpSize = 0;
+
+ if (drmAgpAcquire(pVia->drmFD) < 0) {
+ xf86DrvMsg(pScreen->myNum, X_ERROR, "[drm] drmAgpAcquire failed %d\n", errno);
+ return FALSE;
+ }
+
+ if (drmAgpEnable(pVia->drmFD, drmAgpGetMode(pVia->drmFD)&~0x0) < 0) {
+ xf86DrvMsg(pScreen->myNum, X_ERROR, "[drm] drmAgpEnable failed\n");
+ return FALSE;
+ }
+
+ xf86DrvMsg(pScreen->myNum, X_INFO, "[drm] drmAgpEnabled succeeded\n");
+
+ if (drmAgpAlloc(pVia->drmFD, AGP_SIZE, 0, &agp_phys, &pVia->agpHandle) < 0) {
+ xf86DrvMsg(pScreen->myNum, X_ERROR,
+ "[drm] drmAgpAlloc failed\n");
+ drmAgpRelease(pVia->drmFD);
+ return FALSE;
+ }
+
+ if (drmAgpBind(pVia->drmFD, pVia->agpHandle, 0) < 0) {
+ xf86DrvMsg(pScreen->myNum, X_ERROR,
+ "[drm] drmAgpBind failed\n");
+ drmAgpFree(pVia->drmFD, pVia->agpHandle);
+ drmAgpRelease(pVia->drmFD);
+
+ return FALSE;
+ }
+
+ pVia->agpSize = AGP_SIZE;
+ pVia->agpAddr = drmAgpBase(pVia->drmFD);
+ xf86DrvMsg(pScreen->myNum, X_INFO,
+ "[drm] agpAddr = 0x%08lx\n",pVia->agpAddr);
+
+ pVIADRI->agp.size = pVia->agpSize;
+ if (drmAddMap(pVia->drmFD, (drmHandle)0,
+ pVIADRI->agp.size, DRM_AGP, 0,
+ &pVIADRI->agp.handle) < 0) {
+ xf86DrvMsg(pScreen->myNum, X_ERROR,
+ "[drm] Failed to map public agp area\n");
+ pVIADRI->agp.size = 0;
+ return FALSE;
+ }
+ /* Map AGP from kernel to Xserver - Not really needed */
+ drmMap(pVia->drmFD, pVIADRI->agp.handle,pVIADRI->agp.size,
+ (drmAddressPtr)&agpaddr);
+
+ xf86DrvMsg(pScreen->myNum, X_INFO,
+ "[drm] agpBase = %p\n", pVia->agpBase);
+ xf86DrvMsg(pScreen->myNum, X_INFO,
+ "[drm] agpAddr = 0x%08lx\n", pVia->agpAddr);
+ xf86DrvMsg(pScreen->myNum, X_INFO,
+ "[drm] agpSize = 0x%08x\n", pVia->agpSize);
+ xf86DrvMsg(pScreen->myNum, X_INFO,
+ "[drm] agp physical addr = 0x%08lx\n", agp_phys);
+
+ {
+ drmViaAgp agp;
+ agp.offset = 0;
+ agp.size = AGP_SIZE;
+ if (drmCommandWrite(pVia->drmFD, DRM_VIA_AGP_INIT, &agp,
+ sizeof(drmViaAgp)) < 0)
+ return FALSE;
+ }
+
+ return TRUE;
+
+}
+static Bool VIADRIFBInit(ScreenPtr pScreen, VIAPtr pVia)
+{
+ int FBSize = pVia->FBFreeEnd-pVia->FBFreeStart;
+ int FBOffset = pVia->FBFreeStart;
+ VIADRIPtr pVIADRI = pVia->pDRIInfo->devPrivate;
+ pVIADRI->fbOffset = FBOffset;
+ pVIADRI->fbSize = pVia->videoRambytes;
+
+ {
+ drmViaFb fb;
+ fb.offset = FBOffset;
+ fb.size = FBSize;
+
+ if (drmCommandWrite(pVia->drmFD, DRM_VIA_FB_INIT, &fb,
+ sizeof(drmViaFb)) < 0) {
+ xf86DrvMsg(pScreen->myNum, X_ERROR,
+ "[drm] failed to init frame buffer area\n");
+ return FALSE;
+ } else {
+ xf86DrvMsg(pScreen->myNum, X_INFO,
+ "[drm] FBFreeStart= 0x%08x FBFreeEnd= 0x%08x "
+ "FBSize= 0x%08x\n",
+ pVia->FBFreeStart, pVia->FBFreeEnd, FBSize);
+ return TRUE;
+ }
+ }
+}
+
+static Bool VIADRIPciInit(ScreenPtr pScreen, VIAPtr pVia)
+{
+ return TRUE;
+}
+
+static Bool
+VIAInitVisualConfigs(ScreenPtr pScreen)
+{
+ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+ VIAPtr pVia = VIAPTR(pScrn);
+ int numConfigs = 0;
+ __GLXvisualConfig *pConfigs = 0;
+ VIAConfigPrivPtr pVIAConfigs = 0;
+ VIAConfigPrivPtr *pVIAConfigPtrs = 0;
+ int i, db, stencil, accum;
+
+ switch (pScrn->bitsPerPixel) {
+ case 8:
+ case 24:
+ break;
+ case 16:
+ case 32:
+ numConfigs = 8;
+ if (!(pConfigs = (__GLXvisualConfig*)xcalloc(sizeof(__GLXvisualConfig),
+ numConfigs)))
+ return FALSE;
+ if (!(pVIAConfigs = (VIAConfigPrivPtr)xcalloc(sizeof(VIAConfigPrivRec),
+ numConfigs))) {
+ xfree(pConfigs);
+ return FALSE;
+ }
+ if (!(pVIAConfigPtrs = (VIAConfigPrivPtr*)xcalloc(sizeof(VIAConfigPrivPtr),
+ numConfigs))) {
+ xfree(pConfigs);
+ xfree(pVIAConfigs);
+ return FALSE;
+ }
+ for (i=0; i<numConfigs; i++)
+ pVIAConfigPtrs[i] = &pVIAConfigs[i];
+
+ i = 0;
+ for (accum = 0; accum <= 1; accum++) {
+ for (stencil=0; stencil<=1; stencil++) {
+ for (db = 0; db <= 1; db++) {
+ pConfigs[i].vid = -1;
+ pConfigs[i].class = -1;
+ pConfigs[i].rgba = TRUE;
+ pConfigs[i].redSize = -1;
+ pConfigs[i].greenSize = -1;
+ pConfigs[i].blueSize = -1;
+ pConfigs[i].redMask = -1;
+ pConfigs[i].greenMask = -1;
+ pConfigs[i].blueMask = -1;
+ pConfigs[i].alphaMask = 0;
+
+ if (accum) {
+ pConfigs[i].accumRedSize = 16;
+ pConfigs[i].accumGreenSize = 16;
+ pConfigs[i].accumBlueSize = 16;
+ pConfigs[i].accumAlphaSize = 16;
+ }
+ else {
+ pConfigs[i].accumRedSize = 0;
+ pConfigs[i].accumGreenSize = 0;
+ pConfigs[i].accumBlueSize = 0;
+ pConfigs[i].accumAlphaSize = 0;
+ }
+ if (db)
+ pConfigs[i].doubleBuffer = TRUE;
+ else
+ pConfigs[i].doubleBuffer = FALSE;
+
+ pConfigs[i].stereo = FALSE;
+ pConfigs[i].bufferSize = -1;
+
+ switch (stencil) {
+ case 0:
+ pConfigs[i].depthSize = 0;
+ pConfigs[i].stencilSize = 0;
+ break;
+ case 1:
+ pConfigs[i].depthSize = 16;
+ pConfigs[i].stencilSize = 0;
+ break;
+ case 2:
+ pConfigs[i].depthSize = 32;
+ pConfigs[i].stencilSize = 0;
+ break;
+ case 3:
+ pConfigs[i].depthSize = 24;
+ pConfigs[i].stencilSize = 8;
+ break;
+ }
+
+ pConfigs[i].auxBuffers = 0;
+ pConfigs[i].level = 0;
+ pConfigs[i].visualRating = GLX_NONE_EXT;
+ pConfigs[i].transparentPixel = 0;
+ pConfigs[i].transparentRed = 0;
+ pConfigs[i].transparentGreen = 0;
+ pConfigs[i].transparentBlue = 0;
+ pConfigs[i].transparentAlpha = 0;
+ pConfigs[i].transparentIndex = 0;
+ i++;
+ }
+ }
+ }
+
+ if (i != numConfigs) {
+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ "[dri] Incorrect initialization of visuals. Disabling DRI.\n");
+ return FALSE;
+ }
+
+ break;
+ }
+
+ pVia->numVisualConfigs = numConfigs;
+ pVia->pVisualConfigs = pConfigs;
+ pVia->pVisualConfigsPriv = pVIAConfigs;
+ GlxSetVisualConfigs(numConfigs, pConfigs, (void**)pVIAConfigPtrs);
+
+ return TRUE;
+}
+
+Bool VIADRIScreenInit(ScreenPtr pScreen)
+{
+ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+ VIAPtr pVia = VIAPTR(pScrn);
+ DRIInfoPtr pDRIInfo;
+ VIADRIPtr pVIADRI;
+
+ /* Check that the GLX, DRI, and DRM modules have been loaded by testing
+ * for canonical symbols in each module. */
+ if (!xf86LoaderCheckSymbol("GlxSetVisualConfigs")) return FALSE;
+ if (!xf86LoaderCheckSymbol("DRIScreenInit")) return FALSE;
+ if (!xf86LoaderCheckSymbol("drmAvailable")) return FALSE;
+ if (!xf86LoaderCheckSymbol("DRIQueryVersion")) {
+ xf86DrvMsg(pScreen->myNum, X_ERROR,
+ "[dri] VIADRIScreenInit failed (libdri.a too old)\n");
+ return FALSE;
+ }
+
+ /* Check the DRI version */
+ {
+ int major, minor, patch;
+ DRIQueryVersion(&major, &minor, &patch);
+ if (major != 4 || minor < 0) {
+ xf86DrvMsg(pScreen->myNum, X_ERROR,
+ "[dri] VIADRIScreenInit failed because of a version mismatch.\n"
+ "[dri] libDRI version is %d.%d.%d but version 4.0.x is needed.\n"
+ "[dri] Disabling DRI.\n",
+ major, minor, patch);
+ return FALSE;
+ }
+ }
+
+ pDRIInfo = DRICreateInfoRec();
+
+ if (!pDRIInfo) return FALSE;
+
+ pVia->pDRIInfo = pDRIInfo;
+ pDRIInfo->drmDriverName = VIAKernelDriverName;
+ pDRIInfo->clientDriverName = VIAClientDriverName;
+ pDRIInfo->busIdString = xalloc(64);
+ sprintf(pDRIInfo->busIdString, "PCI:%d:%d:%d",
+ ((pciConfigPtr)pVia->PciInfo->thisCard)->busnum,
+ ((pciConfigPtr)pVia->PciInfo->thisCard)->devnum,
+ ((pciConfigPtr)pVia->PciInfo->thisCard)->funcnum);
+ pDRIInfo->ddxDriverMajorVersion = VIA_VERSION_MAJOR;
+ pDRIInfo->ddxDriverMinorVersion = VIA_VERSION_MINOR;
+ pDRIInfo->ddxDriverPatchVersion = PATCHLEVEL;
+ pDRIInfo->frameBufferPhysicalAddress = pVia->FrameBufferBase;
+ pDRIInfo->frameBufferSize = pVia->videoRambytes;
+
+ pDRIInfo->frameBufferStride = (pScrn->displayWidth *
+ pScrn->bitsPerPixel / 8);
+ pDRIInfo->ddxDrawableTableEntry = VIA_MAX_DRAWABLES;
+
+ if (SAREA_MAX_DRAWABLES < VIA_MAX_DRAWABLES)
+ pDRIInfo->maxDrawableTableEntry = SAREA_MAX_DRAWABLES;
+ else
+ pDRIInfo->maxDrawableTableEntry = VIA_MAX_DRAWABLES;
+
+#ifdef NOT_DONE
+ /* FIXME need to extend DRI protocol to pass this size back to client
+ * for SAREA mapping that includes a device private record
+ */
+ pDRIInfo->SAREASize =
+ ((sizeof(XF86DRISAREARec) + 0xfff) & 0x1000); /* round to page */
+ /* + shared memory device private rec */
+#else
+ /* For now the mapping works by using a fixed size defined
+ * in the SAREA header
+ */
+ if (sizeof(XF86DRISAREARec)+sizeof(VIASAREAPriv) > SAREA_MAX) {
+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ "Data does not fit in SAREA\n");
+ return FALSE;
+ }
+ pDRIInfo->SAREASize = SAREA_MAX;
+#endif
+
+ if (!(pVIADRI = (VIADRIPtr)xcalloc(sizeof(VIADRIRec),1))) {
+ DRIDestroyInfoRec(pVia->pDRIInfo);
+ pVia->pDRIInfo=0;
+ return FALSE;
+ }
+ pDRIInfo->devPrivate = pVIADRI;
+ pDRIInfo->devPrivateSize = sizeof(VIADRIRec);
+ pDRIInfo->contextSize = sizeof(VIADRIContextRec);
+
+ pDRIInfo->CreateContext = VIACreateContext;
+ pDRIInfo->DestroyContext = VIADestroyContext;
+ pDRIInfo->SwapContext = VIADRISwapContext;
+ pDRIInfo->InitBuffers = VIADRIInitBuffers;
+ pDRIInfo->MoveBuffers = VIADRIMoveBuffers;
+ pDRIInfo->bufferRequests = DRI_ALL_WINDOWS;
+
+ if (!DRIScreenInit(pScreen, pDRIInfo, &pVia->drmFD)) {
+ xf86DrvMsg(pScreen->myNum, X_ERROR,
+ "[dri] DRIScreenInit failed. Disabling DRI.\n");
+ xfree(pDRIInfo->devPrivate);
+ pDRIInfo->devPrivate=0;
+ DRIDestroyInfoRec(pVia->pDRIInfo);
+ pVia->pDRIInfo=0;
+ pVia->drmFD = -1;
+ return FALSE;
+ }
+
+
+ pVia->IsPCI = !VIADRIAgpInit(pScreen, pVia);
+
+ if (pVia->IsPCI) {
+ VIADRIPciInit(pScreen, pVia);
+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[dri] use pci.\n" );
+ }
+ else
+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[dri] use agp.\n" );
+
+ if (!(VIADRIFBInit(pScreen, pVia))) {
+ VIADRICloseScreen(pScreen);
+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "[dri] frame buffer initialize fial .\n" );
+ return FALSE;
+ }
+
+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[dri] frame buffer initialized.\n" );
+
+ if (!(VIAInitVisualConfigs(pScreen))) {
+ VIADRICloseScreen(pScreen);
+ return FALSE;
+ }
+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[dri] visual configs initialized.\n" );
+
+ /* DRIScreenInit doesn't add all the common mappings. Add additional mappings here. */
+ if (!VIADRIMapInit(pScreen, pVia)) {
+ VIADRICloseScreen(pScreen);
+ return FALSE;
+ }
+ pVIADRI->regs.size = VIA_MMIO_REGSIZE;
+ pVIADRI->regs.map = 0;
+ pVIADRI->regs.handle = pVia->registerHandle;
+ xf86DrvMsg(pScreen->myNum, X_INFO, "[drm] mmio Registers = 0x%08lx\n",
+ pVIADRI->regs.handle);
+
+ pVIADRI->drixinerama = pVia->drixinerama;
+
+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[dri] mmio mapped.\n" );
+
+ return TRUE;
+}
+
+void
+VIADRICloseScreen(ScreenPtr pScreen)
+{
+ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+ VIAPtr pVia = VIAPTR(pScrn);
+
+ DRICloseScreen(pScreen);
+
+ if (pVia->pDRIInfo) {
+ if (pVia->pDRIInfo->devPrivate) {
+ xfree(pVia->pDRIInfo->devPrivate);
+ pVia->pDRIInfo->devPrivate=0;
+ }
+ DRIDestroyInfoRec(pVia->pDRIInfo);
+ pVia->pDRIInfo=0;
+ }
+
+ if (pVia->pVisualConfigs) xfree(pVia->pVisualConfigs);
+ if (pVia->pVisualConfigsPriv) xfree(pVia->pVisualConfigsPriv);
+ if (pVia->agpSize) {
+ xf86DrvMsg(pScreen->myNum, X_INFO, "[drm] Freeing agp memory\n");
+ drmAgpFree(pVia->drmFD, pVia->agpHandle);
+ xf86DrvMsg(pScreen->myNum, X_INFO, "[drm] Releasing agp module\n");
+ drmAgpRelease(pVia->drmFD);
+ }
+}
+
+/* TODO: xserver receives driver's swapping event and does something
+ * according the data initialized in this function.
+ */
+static Bool
+VIACreateContext(ScreenPtr pScreen, VisualPtr visual,
+ drmContext hwContext, void *pVisualConfigPriv,
+ DRIContextType contextStore)
+{
+ return TRUE;
+}
+
+static void
+VIADestroyContext(ScreenPtr pScreen, drmContext hwContext,
+ DRIContextType contextStore)
+{
+}
+
+Bool
+VIADRIFinishScreenInit(ScreenPtr pScreen)
+{
+ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+ VIAPtr pVia = VIAPTR(pScrn);
+ VIADRIPtr pVIADRI;
+
+ pVia->pDRIInfo->driverSwapMethod = DRI_HIDE_X_CONTEXT;
+
+ DRIFinishScreenInit(pScreen);
+
+ if (!VIADRIKernelInit(pScreen, pVia)) {
+ VIADRICloseScreen(pScreen);
+ return FALSE;
+ }
+ xf86DrvMsg(pScreen->myNum, X_INFO, "[dri] kernel data initialized.\n");
+
+ /* set SAREA value */
+ {
+ VIASAREAPriv *saPriv;
+
+ saPriv=(VIASAREAPriv*)DRIGetSAREAPrivate(pScreen);
+ assert(saPriv);
+ memset(saPriv, 0, sizeof(*saPriv));
+ saPriv->CtxOwner = -1;
+ }
+ pVIADRI=(VIADRIPtr)pVia->pDRIInfo->devPrivate;
+ pVIADRI->deviceID=pVia->Chipset;
+ pVIADRI->width=pScrn->virtualX;
+ pVIADRI->height=pScrn->virtualY;
+ pVIADRI->mem=pScrn->videoRam*1024;
+ pVIADRI->bytesPerPixel= (pScrn->bitsPerPixel+7) / 8;
+ pVIADRI->sarea_priv_offset = sizeof(XF86DRISAREARec);
+ /* TODO */
+ pVIADRI->scrnX=pVIADRI->width;
+ pVIADRI->scrnY=pVIADRI->height;
+
+ return TRUE;
+}
+
+static void
+VIADRISwapContext(ScreenPtr pScreen, DRISyncType syncType,
+ DRIContextType oldContextType, void *oldContext,
+ DRIContextType newContextType, void *newContext)
+{
+ /*ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+ VIAPtr pVia = VIAPTR(pScrn);
+ */
+ return;
+}
+
+static void
+VIADRIInitBuffers(WindowPtr pWin, RegionPtr prgn, CARD32 index)
+{
+ /*ScreenPtr pScreen = pWin->drawable.pScreen;
+ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+ VIAPtr pVia = VIAPTR(pScrn);
+ */
+ return;
+}
+
+static void
+VIADRIMoveBuffers(WindowPtr pParent, DDXPointRec ptOldOrg,
+ RegionPtr prgnSrc, CARD32 index)
+{
+ /*ScreenPtr pScreen = pParent->drawable.pScreen;
+ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+ VIAPtr pVia = VIAPTR(pScrn);
+ */
+ return;
+}
+
+/* Initialize the kernel data structures. */
+static Bool VIADRIKernelInit(ScreenPtr pScreen, VIAPtr pVia)
+{
+ drmViaInit drmInfo;
+ memset(&drmInfo, 0, sizeof(drmViaInit));
+ drmInfo.func = VIA_INIT_MAP;
+ drmInfo.sarea_priv_offset = sizeof(XF86DRISAREARec);
+ drmInfo.fb_offset = pVia->FrameBufferBase;
+ drmInfo.mmio_offset = pVia->registerHandle;
+ if (pVia->IsPCI)
+ drmInfo.agpAddr = (CARD32)NULL;
+ else
+ drmInfo.agpAddr = (CARD32)pVia->agpAddr;
+
+ if ((drmCommandWrite(pVia->drmFD, DRM_VIA_MAP_INIT,&drmInfo,
+ sizeof(drmViaInit))) < 0)
+ return FALSE;
+
+
+ return TRUE;
+}
+/* Add a map for the MMIO registers */
+static Bool VIADRIMapInit(ScreenPtr pScreen, VIAPtr pVia)
+{
+ int flags = 0;
+
+ if (drmAddMap(pVia->drmFD, pVia->MmioBase, VIA_MMIO_REGSIZE,
+ DRM_REGISTERS, flags, &pVia->registerHandle) < 0) {
+ return FALSE;
+ }
+
+ xf86DrvMsg(pScreen->myNum, X_INFO,
+ "[drm] register handle = 0x%08lx\n", pVia->registerHandle);
+
+ return TRUE;
+}
diff --git a/src/via_dri.h b/src/via_dri.h
new file mode 100644
index 0000000..1124acf
--- /dev/null
+++ b/src/via_dri.h
@@ -0,0 +1,85 @@
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/via/via_dri.h,v 1.2 2003/08/27 15:16:08 tsi Exp $ */
+/*
+ * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
+ * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sub license,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ * VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef _VIA_DRI_H_
+#define _VIA_DRI_H_ 1
+
+#include "xf86drm.h"
+
+#define VIA_MAX_DRAWABLES 256
+
+#define VIA_VERSION_MAJOR 4
+#define VIA_VERSION_MINOR 1
+
+typedef struct {
+ int CtxOwner;
+} VIASAREAPriv;
+
+typedef struct {
+ drmHandle handle;
+ drmSize size;
+ drmAddress map;
+} viaRegion, *viaRegionPtr;
+
+typedef struct {
+ viaRegion regs, agp;
+ int deviceID;
+ int width;
+ int height;
+ int mem;
+ int bytesPerPixel;
+ int priv1;
+ int priv2;
+ int fbOffset;
+ int fbSize;
+ Bool drixinerama;
+
+ int backOffset;
+ int depthOffset;
+ int textureOffset;
+ int textureSize;
+ int irqEnabled;
+ unsigned int scrnX, scrnY;
+ int sarea_priv_offset;
+} VIADRIRec, *VIADRIPtr;
+
+typedef struct {
+ int dummy;
+} VIAConfigPrivRec, *VIAConfigPrivPtr;
+
+typedef struct {
+ int dummy;
+} VIADRIContextRec, *VIADRIContextPtr;
+
+#ifdef XFree86Server
+
+#include "screenint.h"
+
+Bool VIADRIScreenInit(ScreenPtr pScreen);
+void VIADRICloseScreen(ScreenPtr pScreen);
+Bool VIADRIFinishScreenInit(ScreenPtr pScreen);
+
+#endif /* XFree86Server */
+#endif /* _VIA_DRI_H_ */
diff --git a/src/via_driver.c b/src/via_driver.c
new file mode 100644
index 0000000..c442134
--- /dev/null
+++ b/src/via_driver.c
@@ -0,0 +1,3276 @@
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/via/via_driver.c,v 1.16 2003/10/31 17:19:35 tsi Exp $ */
+/*
+ * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
+ * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sub license,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ * VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/*************************************************************************
+ *
+ * File: via_driver.c
+ * Content: XFree86 4.0 for VIA/S3G UniChrom
+ *
+ ************************************************************************/
+
+#include "xf86RAC.h"
+#include "shadowfb.h"
+
+#include "globals.h"
+#define DPMS_SERVER
+#include "extensions/dpms.h"
+
+
+#include "via_driver.h"
+#include "via_video.h"
+#include "videodev.h"
+#include "via_swov.h"
+
+#include "ddmpeg.h"
+#include "via_capture.h"
+#include "via.h"
+#ifdef XF86DRI
+#include "dri.h"
+#endif
+
+/*
+ * prototypes
+ */
+
+static void VIAIdentify(int flags);
+static Bool VIAProbe(DriverPtr drv, int flags);
+static Bool VIAPreInit(ScrnInfoPtr pScrn, int flags);
+static Bool VIAEnterVT(int scrnIndex, int flags);
+static void VIALeaveVT(int scrnIndex, int flags);
+static void VIASave(ScrnInfoPtr pScrn);
+static void VIAWriteMode(ScrnInfoPtr pScrn, vgaRegPtr, VIARegPtr);
+static Bool VIAModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode);
+static Bool VIACloseScreen(int scrnIndex, ScreenPtr pScreen);
+static Bool VIASaveScreen(ScreenPtr pScreen, int mode);
+static void VIALoadPalette(ScrnInfoPtr pScrn, int numColors, int *indicies,
+ LOCO *colors, VisualPtr pVisual);
+static Bool VIAScreenInit(int scrnIndex, ScreenPtr pScreen, int argc,
+ char **argv);
+static int VIAInternalScreenInit(int scrnIndex, ScreenPtr pScreen);
+static void VIAFreeScreen(int scrnIndex, int flags);
+static ModeStatus VIAValidMode(int index, DisplayModePtr mode,
+ Bool verbose, int flags);
+static void VIADPMS(ScrnInfoPtr pScrn, int mode, int flags);
+static const OptionInfoRec * VIAAvailableOptions(int chipid, int busid);
+
+
+static void VIAEnableMMIO(ScrnInfoPtr pScrn);
+static void VIADisableMMIO(ScrnInfoPtr pScrn);
+static Bool VIAMapMMIO(ScrnInfoPtr pScrn);
+static Bool VIAMapFB(ScrnInfoPtr pScrn);
+static void VIAUnmapMem(ScrnInfoPtr pScrn);
+static int VIAGetMemSize(void);
+Bool VIADeviceSelection(ScrnInfoPtr pScrn);
+Bool VIADeviceDispatch(ScrnInfoPtr pScrn);
+
+#ifdef XF86DRI
+void VIAInitialize3DEngine(ScrnInfoPtr pScrn);
+#endif
+
+DriverRec VIA =
+{
+ VIA_VERSION,
+ DRIVER_NAME,
+ VIAIdentify,
+ VIAProbe,
+ VIAAvailableOptions,
+ NULL,
+ 0
+};
+
+
+/* Supported chipsets */
+
+static SymTabRec VIAChipsets[] = {
+ {VIA_CLE266, "CLE266"},
+ {VIA_KM400, "KM400"},
+ {VIA_K8M800, "K8M800"},
+ {-1, NULL }
+};
+
+
+/* This table maps a PCI device ID to a chipset family identifier. */
+
+static PciChipsets VIAPciChipsets[] = {
+ {VIA_CLE266, PCI_CHIP_CLE3122, RES_SHARED_VGA},
+ {VIA_CLE266, PCI_CHIP_CLE3022, RES_SHARED_VGA},
+ {VIA_KM400, PCI_CHIP_VT7205, RES_SHARED_VGA},
+ {VIA_KM400, PCI_CHIP_VT3205, RES_SHARED_VGA},
+ {VIA_K8M800, PCI_CHIP_VT7204, RES_SHARED_VGA},
+ {VIA_K8M800, PCI_CHIP_VT3204, RES_SHARED_VGA},
+ {-1, -1, RES_UNDEFINED}
+};
+
+int gVIAEntityIndex = -1;
+
+typedef enum {
+ OPTION_A2,
+ OPTION_PCI_BURST,
+ OPTION_PCI_RETRY,
+ OPTION_NOACCEL,
+ OPTION_SWCURSOR,
+ OPTION_HWCURSOR,
+ OPTION_SHADOW_FB,
+ OPTION_ROTATE,
+ OPTION_USEBIOS,
+ OPTION_VIDEORAM,
+ OPTION_ACTIVEDEVICE,
+ OPTION_LCDDUALEDGE,
+ OPTION_BUSWIDTH,
+ OPTION_CENTER,
+ OPTION_PANELSIZE,
+ OPTION_TVDOTCRAWL,
+ OPTION_TVTYPE,
+ OPTION_TVOUTPUT,
+ OPTION_TVVSCAN,
+ OPTION_TVHSCALE,
+ OPTION_TVENCODER,
+ OPTION_REFRESH,
+ OPTION_DISABLEVQ,
+ OPTION_NODDCVALUE,
+ OPTION_CAP0_DEINTERLACE,
+ OPTION_CAP1_DEINTERLACE,
+ OPTION_CAP0_FIELDSWAP,
+ OPTION_DRIXINERAMA
+} VIAOpts;
+
+
+static OptionInfoRec VIAOptions[] =
+{
+ {OPTION_A2, "A2", OPTV_BOOLEAN, {0}, FALSE},
+ {OPTION_NOACCEL, "NoAccel", OPTV_BOOLEAN, {0}, FALSE},
+ {OPTION_HWCURSOR, "HWCursor", OPTV_BOOLEAN, {0}, FALSE},
+ {OPTION_SWCURSOR, "SWCursor", OPTV_BOOLEAN, {0}, FALSE},
+ {OPTION_SHADOW_FB, "ShadowFB", OPTV_BOOLEAN, {0}, FALSE},
+ {OPTION_ROTATE, "Rotate", OPTV_ANYSTR, {0}, FALSE},
+ {OPTION_USEBIOS, "UseBIOS", OPTV_BOOLEAN, {0}, FALSE},
+ {OPTION_VIDEORAM, "VideoRAM", OPTV_INTEGER, {0}, FALSE},
+ {OPTION_ACTIVEDEVICE, "ActiveDevice", OPTV_ANYSTR, {0}, FALSE},
+ {OPTION_LCDDUALEDGE, "LCDDualEdge", OPTV_BOOLEAN, {0}, FALSE},
+ {OPTION_BUSWIDTH, "BusWidth", OPTV_ANYSTR, {0}, FALSE},
+ {OPTION_CENTER, "Center", OPTV_BOOLEAN, {0}, FALSE},
+ {OPTION_PANELSIZE, "PanelSize", OPTV_ANYSTR, {0}, FALSE},
+ {OPTION_TVDOTCRAWL, "TVDotCrawl", OPTV_BOOLEAN, {0}, FALSE},
+ {OPTION_TVTYPE, "TVType", OPTV_ANYSTR, {0}, FALSE},
+ {OPTION_TVOUTPUT, "TVOutput", OPTV_ANYSTR, {0}, FALSE},
+ {OPTION_TVVSCAN, "TVVScan", OPTV_ANYSTR, {0}, FALSE},
+ {OPTION_TVHSCALE, "TVHScale", OPTV_ANYSTR, {0}, FALSE},
+ {OPTION_TVENCODER, "TVEncoder", OPTV_ANYSTR, {0}, FALSE},
+ {OPTION_REFRESH, "Refresh", OPTV_INTEGER, {0}, FALSE},
+ {OPTION_DISABLEVQ, "DisableVQ", OPTV_BOOLEAN, {0}, FALSE},
+ {OPTION_NODDCVALUE, "NoDDCValue", OPTV_BOOLEAN, {0}, FALSE},
+ {OPTION_CAP0_DEINTERLACE, "Cap0Deinterlace", OPTV_ANYSTR, {0}, FALSE},
+ {OPTION_CAP1_DEINTERLACE, "Cap1Deinterlace", OPTV_ANYSTR, {0}, FALSE},
+ {OPTION_CAP0_FIELDSWAP, "Cap0FieldSwap", OPTV_BOOLEAN, {0}, FALSE},
+ {OPTION_DRIXINERAMA, "DRIXINERAMA", OPTV_BOOLEAN, {0}, FALSE},
+ {-1, NULL, OPTV_NONE, {0}, FALSE}
+};
+
+
+static const char *vgaHWSymbols[] = {
+ "vgaHWGetHWRec",
+ "vgaHWSetMmioFuncs",
+ "vgaHWSetStdFuncs",
+ "vgaHWGetIOBase",
+ "vgaHWSave",
+ "vgaHWProtect",
+ "vgaHWRestore",
+ "vgaHWMapMem",
+ "vgaHWUnmapMem",
+ "vgaHWInit",
+ "vgaHWSaveScreen",
+ "vgaHWLock",
+ "vgaHWUnlock",
+ "vgaHWFreeHWRec",
+ NULL
+};
+
+
+static const char *ramdacSymbols[] = {
+ "xf86InitCursor",
+ "xf86CreateCursorInfoRec",
+ "xf86DestroyCursorInfoRec",
+ NULL
+};
+
+static const char *vbeSymbols[] = {
+ "VBEInit",
+ "vbeDoEDID",
+ "vbeFree",
+ NULL
+};
+
+static const char *ddcSymbols[] = {
+ "xf86InterpretEDID",
+ "xf86PrintEDID",
+ "xf86DoEDID_DDC1",
+ "xf86DoEDID_DDC2",
+ "xf86SetDDCproperties",
+ NULL
+};
+
+
+static const char *i2cSymbols[] = {
+ "xf86CreateI2CBusRec",
+ "xf86I2CBusInit",
+ "xf86CreateI2CDevRec",
+ "xf86I2CDevInit",
+ "xf86I2CWriteRead",
+ "xf86DestroyI2CDevRec",
+ NULL
+};
+
+static const char *xaaSymbols[] = {
+ "XAACopyROP",
+ "XAACopyROP_PM",
+ "XAAPatternROP",
+ "XAACreateInfoRec",
+ "XAADestroyInfoRec",
+ "XAAInit",
+ "XAAFillSolidRects",
+ NULL
+};
+
+static const char *int10Symbols[] = {
+ "xf86FreeInt10",
+ "xf86InitInt10",
+ NULL
+};
+
+static const char *shadowSymbols[] = {
+ "ShadowFBInit",
+ NULL
+};
+
+#ifdef USE_FB
+static const char *fbSymbols[] = {
+ "fbScreenInit",
+ "fbPictureInit",
+ NULL
+};
+#else
+static const char *cfbSymbols[] = {
+ "cfbScreenInit",
+ "cfb16ScreenInit",
+ "cfb24ScreenInit",
+ "cfb24_32ScreenInit",
+ "cfb32ScreenInit",
+ "cfb16BresS",
+ "cfb24BresS",
+ NULL
+};
+#endif
+
+#ifdef XFree86LOADER
+#ifdef XF86DRI
+static const char *drmSymbols[] = {
+ "drmAddBufs",
+ "drmAddMap",
+ "drmAgpAcquire",
+ "drmAgpAlloc",
+ "drmAgpBase",
+ "drmAgpBind",
+ "drmAgpDeviceId",
+ "drmAgpEnable",
+ "drmAgpFree",
+ "drmAgpGetMode",
+ "drmAgpRelease",
+ "drmAgpVendorId",
+ "drmCtlInstHandler",
+ "drmCtlUninstHandler",
+ "drmCommandNone",
+ "drmCommandWrite",
+ "drmFreeVersion",
+ "drmGetInterruptFromBusID",
+ "drmGetLibVersion",
+ "drmGetVersion",
+ "drmMap",
+ "drmMapBufs",
+ "drmUnmap",
+ "drmUnmapBufs",
+ NULL
+};
+
+static const char *driSymbols[] = {
+ "DRICloseScreen",
+ "DRICreateInfoRec",
+ "DRIDestroyInfoRec",
+ "DRIFinishScreenInit",
+ "DRIGetSAREAPrivate",
+ "DRILock",
+ "DRIQueryVersion",
+ "DRIScreenInit",
+ "DRIUnlock",
+ "GlxSetVisualConfigs",
+ NULL
+};
+#endif
+
+static MODULESETUPPROTO(VIASetup);
+
+static XF86ModuleVersionInfo VIAVersRec = {
+ "via",
+ MODULEVENDORSTRING,
+ MODINFOSTRING1,
+ MODINFOSTRING2,
+ XF86_VERSION_CURRENT,
+ VERSION_MAJOR, VERSION_MINOR, PATCHLEVEL,
+ ABI_CLASS_VIDEODRV,
+ ABI_VIDEODRV_VERSION,
+ MOD_CLASS_VIDEODRV,
+ {0, 0, 0, 0}
+};
+
+XF86ModuleData viaModuleData = {&VIAVersRec, VIASetup, NULL};
+
+
+static pointer VIASetup(pointer module, pointer opts, int *errmaj, int *errmin)
+{
+ static Bool setupDone = FALSE;
+
+ if (!setupDone) {
+ setupDone = TRUE;
+ xf86AddDriver(&VIA, module, 0);
+ LoaderRefSymLists(vgaHWSymbols,
+#ifdef USE_FB
+ fbSymbols,
+#else
+ cfbSymbols,
+#endif
+ ramdacSymbols,
+ xaaSymbols,
+ shadowSymbols,
+ vbeSymbols,
+ i2cSymbols,
+ ddcSymbols,
+ /*
+ mpegSymbols,
+ */
+#ifdef XF86DRI
+ drmSymbols,
+ driSymbols,
+#endif
+ NULL);
+
+ return (pointer) 1;
+ }
+ else {
+ if (errmaj)
+ *errmaj = LDR_ONCEONLY;
+
+ return NULL;
+ }
+} /* VIASetup */
+
+#endif /* XFree86LOADER */
+
+static void viaFillGraphicInfo(ScrnInfoPtr pScrn)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo;
+
+ pVia->graphicInfo.TotalVRAM = pVia->videoRambytes;
+ pVia->graphicInfo.VideoHeapBase = (unsigned long) pVia->FBFreeStart;
+ pVia->graphicInfo.VideoHeapEnd = (unsigned long) (pVia->FBFreeEnd - 1);
+ pVia->graphicInfo.dwWidth = pBIOSInfo->CrtcHDisplay;
+ pVia->graphicInfo.dwHeight = pBIOSInfo->CrtcVDisplay;
+ pVia->graphicInfo.dwBPP = pScrn->bitsPerPixel;
+ pVia->graphicInfo.dwPitch = (((pScrn->virtualX) + 15) & ~15) * (pScrn->bitsPerPixel) / 8;
+ pVia->graphicInfo.dwRefreshRate = (unsigned long)pBIOSInfo->FoundRefresh;
+ pVia->graphicInfo.dwDVIOn = pBIOSInfo->DVIAttach;
+ pVia->graphicInfo.dwExpand = pBIOSInfo->scaleY;
+ pVia->graphicInfo.dwPanelWidth = pBIOSInfo->panelX;
+ pVia->graphicInfo.dwPanelHeight = pBIOSInfo->panelY;
+ pVia->graphicInfo.Cap0_Deinterlace = pVia->Cap0_Deinterlace;
+ pVia->graphicInfo.Cap1_Deinterlace = pVia->Cap1_Deinterlace;
+ pVia->graphicInfo.Cap0_FieldSwap = pVia->Cap0_FieldSwap;
+ pVia->graphicInfo.RevisionID = pVia->ChipRev;
+
+ /* for SAMM mode passing screen info */
+ pVia->graphicInfo.HasSecondary = pBIOSInfo->HasSecondary;
+ pVia->graphicInfo.IsSecondary = pBIOSInfo->IsSecondary;
+
+ /* Added to pass DRM info to V4L */
+#ifdef XF86DRI
+ pVia->graphicInfo.DRMEnabled = pVia->directRenderingEnabled;
+#endif
+}
+
+static int
+WaitIdleCLE266(VIAPtr pVia)
+{
+ int loop = 0;
+
+ mem_barrier();
+
+ while (!(VIAGETREG(VIA_REG_STATUS) & VIA_VR_QUEUE_BUSY) && (loop++ < MAXLOOP))
+ ;
+
+ while ((VIAGETREG(VIA_REG_STATUS) &
+ (VIA_CMD_RGTR_BUSY | VIA_2D_ENG_BUSY | VIA_3D_ENG_BUSY)) &&
+ (loop++ < MAXLOOP))
+ ;
+
+ return loop >= MAXLOOP;
+}
+
+
+static Bool VIAGetRec(ScrnInfoPtr pScrn)
+{
+ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIAGetRec\n"));
+ if (pScrn->driverPrivate)
+ return TRUE;
+
+ pScrn->driverPrivate = xnfcalloc(sizeof(VIARec), 1);
+ ((VIARec *)(pScrn->driverPrivate))->pBIOSInfo =
+ xnfcalloc(sizeof(VIABIOSInfoRec), 1);
+ ((VIARec *)(pScrn->driverPrivate))->pBIOSInfo->pModeTable =
+ xnfcalloc(sizeof(VIAModeTableRec), 1);
+
+ /* initial value in VIARec */
+ ((VIARec *)(pScrn->driverPrivate))->SavedReg.mode = 0xFF;
+ ((VIARec *)(pScrn->driverPrivate))->ModeReg.mode = 0xFF;
+
+ ((VIARec *)(pScrn->driverPrivate))->pBIOSInfo->FirstInit = TRUE;
+
+ return TRUE;
+
+} /* VIAGetRec */
+
+
+static void VIAFreeRec(ScrnInfoPtr pScrn)
+{
+ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIAFreeRec\n"));
+ if (!pScrn->driverPrivate)
+ return;
+
+ xfree(((VIARec *)(pScrn->driverPrivate))->pBIOSInfo->pModeTable);
+ xfree(((VIARec *)(pScrn->driverPrivate))->pBIOSInfo);
+ xfree(pScrn->driverPrivate);
+ pScrn->driverPrivate = NULL;
+
+ VIAUnmapMem(pScrn);
+
+} /* VIAFreeRec */
+
+
+static const OptionInfoRec * VIAAvailableOptions(int chipid, int busid)
+{
+
+ return VIAOptions;
+
+} /* VIAAvailableOptions */
+
+
+static void VIAIdentify(int flags)
+{
+ xf86PrintChipsets(DRIVER_NAME,
+ "driver for VIA chipsets",
+ VIAChipsets);
+} /* VIAIdentify */
+
+
+static Bool VIAProbe(DriverPtr drv, int flags)
+{
+ GDevPtr *devSections;
+ int *usedChips;
+ int numDevSections;
+ int numUsed;
+ Bool foundScreen = FALSE;
+ int i;
+
+ /* sanity checks */
+ if ((numDevSections = xf86MatchDevice(DRIVER_NAME, &devSections)) <= 0)
+ return FALSE;
+
+ if (xf86GetPciVideoInfo() == NULL)
+ return FALSE;
+
+ numUsed = xf86MatchPciInstances(DRIVER_NAME,
+ PCI_VIA_VENDOR_ID,
+ VIAChipsets,
+ VIAPciChipsets,
+ devSections,
+ numDevSections,
+ drv,
+ &usedChips);
+ xfree(devSections);
+
+ if (numUsed <= 0)
+ return FALSE;
+
+ if (flags & PROBE_DETECT) {
+ foundScreen = TRUE;
+ }
+ else {
+ for (i = 0; i < numUsed; i++) {
+ ScrnInfoPtr pScrn = xf86AllocateScreen(drv, 0);
+ EntityInfoPtr pEnt;
+ if ((pScrn = xf86ConfigPciEntity(pScrn, 0, usedChips[i],
+ VIAPciChipsets, 0, 0, 0, 0, 0)))
+ {
+ pScrn->driverVersion = VIA_VERSION;
+ pScrn->driverName = DRIVER_NAME;
+ pScrn->name = DRIVER_NAME;
+ pScrn->Probe = VIAProbe;
+ pScrn->PreInit = VIAPreInit;
+ pScrn->ScreenInit = VIAScreenInit;
+ pScrn->SwitchMode = VIASwitchMode;
+ pScrn->AdjustFrame = VIAAdjustFrame;
+ pScrn->EnterVT = VIAEnterVT;
+ pScrn->LeaveVT = VIALeaveVT;
+ pScrn->FreeScreen = VIAFreeScreen;
+ pScrn->ValidMode = VIAValidMode;
+ foundScreen = TRUE;
+ }
+ /*
+ xf86ConfigActivePciEntity(pScrn,
+ usedChips[i],
+ VIAPciChipsets,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL);
+ */
+
+ pEnt = xf86GetEntityInfo(usedChips[i]);
+
+ /* CLE266 card support Dual-Head, mark the entity as sharable*/
+ if(pEnt->chipset == VIA_CLE266 || pEnt->chipset == VIA_KM400)
+ {
+ static int instance = 0;
+ DevUnion* pPriv;
+
+ xf86SetEntitySharable(usedChips[i]);
+ xf86SetEntityInstanceForScreen(pScrn,
+ pScrn->entityList[0], instance);
+
+ if(gVIAEntityIndex < 0)
+ {
+ gVIAEntityIndex = xf86AllocateEntityPrivateIndex();
+ pPriv = xf86GetEntityPrivate(pScrn->entityList[0],
+ gVIAEntityIndex);
+
+ if (!pPriv->ptr)
+ {
+ VIAEntPtr pVIAEnt;
+ pPriv->ptr = xnfcalloc(sizeof(VIAEntRec), 1);
+ pVIAEnt = pPriv->ptr;
+ pVIAEnt->IsDRIEnabled = FALSE;
+ pVIAEnt->BypassSecondary = FALSE;
+ pVIAEnt->HasSecondary = FALSE;
+ pVIAEnt->IsSecondaryRestored = FALSE;
+ }
+ }
+ instance++;
+ }
+ xfree(pEnt);
+ }
+ }
+
+ xfree(usedChips);
+
+ return foundScreen;
+
+} /* VIAProbe */
+
+
+static int LookupChipID(PciChipsets* pset, int ChipID)
+{
+ /* Is there a function to do this for me? */
+ while (pset->numChipset >= 0)
+ {
+ if (pset->PCIid == ChipID)
+ return pset->numChipset;
+
+ pset++;
+ }
+
+ return -1;
+
+} /* LookupChipID */
+
+
+static unsigned int
+VIAddc1Read(ScrnInfoPtr pScrn)
+{
+ register vgaHWPtr hwp = VGAHWPTR(pScrn);
+ VIAPtr pVia = VIAPTR(pScrn);
+ register CARD8 tmp;
+
+ while (hwp->readST01(hwp)&0x8) {};
+ while (!(hwp->readST01(hwp)&0x8)) {};
+
+ VGAOUT8(0x3c4, 0x26);
+ tmp = VGAIN8(0x3c5);
+ return ((unsigned int) ((tmp & 0x08) >> 3));
+}
+
+static Bool
+VIAddc1(int scrnIndex)
+{
+ ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+ VIAPtr pVia = VIAPTR(pScrn);
+ xf86MonPtr pMon;
+ CARD8 tmp;
+ Bool success = FALSE;
+
+ /* initialize chipset */
+ VGAOUT8(0x3c4, 0x26);
+ tmp = VGAIN8(0x3c5);
+ VGAOUT8(0x3c4, 0x26);
+ VGAOUT8(0x3c5, (tmp | 0x11));
+
+ if ((pMon = xf86PrintEDID(
+ xf86DoEDID_DDC1(scrnIndex,vgaHWddc1SetSpeed,VIAddc1Read))) != NULL)
+ success = TRUE;
+ xf86SetDDCproperties(pScrn,pMon);
+
+ /* undo initialization */
+ VGAOUT8(0x3c4, 0x26);
+ VGAOUT8(0x3c5, tmp);
+ return success;
+}
+
+static Bool
+VIAddc2(int scrnIndex)
+{
+ ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+ VIAPtr pVia = VIAPTR(pScrn);
+ xf86MonPtr pMon;
+ CARD8 tmp;
+ Bool success = FALSE;
+
+ VGAOUT8(0x3c4, 0x26);
+ tmp = VGAIN8(0x3c5);
+ pMon = xf86DoEDID_DDC2(pScrn->scrnIndex, pVia->I2C_Port1);
+ if (pMon)
+ success = TRUE;
+ pVia->DDC1 = pMon;
+ xf86PrintEDID(pMon);
+ xf86SetDDCproperties(pScrn, pMon);
+ VGAOUT8(0x3c4, 0x26);
+ VGAOUT8(0x3c5, tmp);
+
+ return success;
+}
+
+static void
+VIAProbeDDC(ScrnInfoPtr pScrn, int index)
+{
+ vbeInfoPtr pVbe;
+
+ if (xf86LoadSubModule(pScrn, "vbe")) {
+ pVbe = VBEInit(NULL,index);
+ ConfiguredMonitor = vbeDoEDID(pVbe, NULL);
+ }
+}
+
+
+static Bool VIAPreInit(ScrnInfoPtr pScrn, int flags)
+{
+ EntityInfoPtr pEnt;
+ VIAPtr pVia;
+ VIABIOSInfoPtr pBIOSInfo;
+ MessageType from = X_DEFAULT;
+ ClockRangePtr clockRanges;
+ char *s = NULL;
+#ifndef USE_FB
+ char *mod = NULL;
+ const char *reqSym = NULL;
+#endif
+ vgaHWPtr hwp;
+ int i, bMemSize = 0, tmp;
+
+ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIAPreInit\n"));
+
+ if (pScrn->numEntities > 1)
+ return FALSE;
+
+ if (flags & PROBE_DETECT)
+ return FALSE;
+
+ if (!xf86LoadSubModule(pScrn, "vgahw"))
+ return FALSE;
+
+ xf86LoaderReqSymLists(vgaHWSymbols, NULL);
+ if (!vgaHWGetHWRec(pScrn))
+ return FALSE;
+
+#if 0
+ /* Here we can alter the number of registers saved and restored by the
+ * standard vgaHWSave and Restore routines.
+ */
+ vgaHWSetRegCounts(pScrn, VGA_NUM_CRTC, VGA_NUM_SEQ, VGA_NUM_GFX, VGA_NUM_ATTR);
+#endif
+
+ if (!VIAGetRec(pScrn)) {
+ return FALSE;
+ }
+
+ pVia = VIAPTR(pScrn);
+ pBIOSInfo = pVia->pBIOSInfo;
+
+ pVia->IsSecondary = FALSE;
+ pEnt = xf86GetEntityInfo(pScrn->entityList[0]);
+ if (pEnt->resources) {
+ xfree(pEnt);
+ VIAFreeRec(pScrn);
+ return FALSE;
+ }
+
+ pVia->EntityIndex = pEnt->index;
+
+ if(xf86IsEntityShared(pScrn->entityList[0]))
+ {
+ if(xf86IsPrimInitDone(pScrn->entityList[0]))
+ {
+ DevUnion* pPriv;
+ VIAEntPtr pVIAEnt;
+ VIAPtr pVia1;
+
+ pVia->IsSecondary = TRUE;
+ pPriv = xf86GetEntityPrivate(pScrn->entityList[0],
+ gVIAEntityIndex);
+ pVIAEnt = pPriv->ptr;
+ if(pVIAEnt->BypassSecondary) return FALSE;
+ pVIAEnt->pSecondaryScrn = pScrn;
+ pVIAEnt->HasSecondary = TRUE;
+ pVia1 = VIAPTR(pVIAEnt->pPrimaryScrn);
+ pVia1->HasSecondary = TRUE;
+ pVia->sharedData = pVia1->sharedData;
+ }
+ else
+ {
+ DevUnion* pPriv;
+ VIAEntPtr pVIAEnt;
+
+ xf86SetPrimInitDone(pScrn->entityList[0]);
+ pPriv = xf86GetEntityPrivate(pScrn->entityList[0],
+ gVIAEntityIndex);
+ pVia->sharedData = xnfcalloc(sizeof(ViaSharedRec),1);
+ pVIAEnt = pPriv->ptr;
+ pVIAEnt->pPrimaryScrn = pScrn;
+ pVIAEnt->IsDRIEnabled = FALSE;
+ pVIAEnt->BypassSecondary = FALSE;
+ pVIAEnt->HasSecondary = FALSE;
+ pVIAEnt->RestorePrimary = FALSE;
+ pVIAEnt->IsSecondaryRestored = FALSE;
+ }
+ } else {
+ pVia->sharedData = xnfcalloc(sizeof(ViaSharedRec),1);
+ }
+
+ if (flags & PROBE_DETECT) {
+ VIAProbeDDC(pScrn, pVia->EntityIndex);
+ return TRUE;
+ }
+
+ pScrn->monitor = pScrn->confScreen->monitor;
+
+ /*
+ * We support depths of 8, 16 and 24.
+ * We support bpp of 8, 16, and 32.
+ */
+
+ if (!xf86SetDepthBpp(pScrn, 0, 0, 0, Support32bppFb)) {
+ return FALSE;
+ }
+ else {
+ switch (pScrn->depth) {
+ case 8:
+ case 16:
+ case 24:
+ case 32:
+ /* OK */
+ break;
+ default:
+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ "Given depth (%d) is not supported by this driver\n",
+ pScrn->depth);
+ return FALSE;
+ }
+ }
+
+ xf86PrintDepthBpp(pScrn);
+
+ if (pScrn->depth == 32) {
+ pScrn->depth = 24;
+ }
+
+ if (pScrn->depth > 8) {
+ rgb zeros = {0, 0, 0};
+
+ if (!xf86SetWeight(pScrn, zeros, zeros))
+ return FALSE;
+ else {
+ /* TODO check weight returned is supported */
+ ;
+ }
+ }
+
+ if (!xf86SetDefaultVisual(pScrn, -1)) {
+ return FALSE;
+ }
+ else {
+ /* We don't currently support DirectColor at > 8bpp */
+ if (pScrn->depth > 8 && pScrn->defaultVisual != TrueColor) {
+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Given default visual"
+ " (%s) is not supported at depth %d\n",
+ xf86GetVisualName(pScrn->defaultVisual), pScrn->depth);
+ return FALSE;
+ }
+ }
+
+ /* We use a programmable clock */
+ pScrn->progClock = TRUE;
+
+ xf86CollectOptions(pScrn, NULL);
+
+ /* Set the bits per RGB for 8bpp mode */
+ if (pScrn->depth == 8)
+ pScrn->rgbBits = 6;
+
+ xf86ProcessOptions(pScrn->scrnIndex, pScrn->options, VIAOptions);
+
+#ifdef XF86DRI
+ pVia->drixinerama = FALSE;
+ if (xf86IsOptionSet(VIAOptions, OPTION_DRIXINERAMA))
+ pVia->drixinerama = TRUE;
+#else
+ if (xf86IsOptionSet(VIAOptions, OPTION_DRIXINERAMA))
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+ "Option: drixinerama ignored, no DRI support compiled into driver.\n");
+#endif
+ if (xf86ReturnOptValBool(VIAOptions, OPTION_PCI_BURST, FALSE)) {
+ pVia->pci_burst = TRUE;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+ "Option: pci_burst - PCI burst read enabled\n");
+ }
+ else {
+ pVia->pci_burst = FALSE;
+ }
+
+ pVia->NoPCIRetry = 1; /* default */
+ if (xf86ReturnOptValBool(VIAOptions, OPTION_PCI_RETRY, FALSE)) {
+ if (xf86ReturnOptValBool(VIAOptions, OPTION_PCI_BURST, FALSE)) {
+ pVia->NoPCIRetry = 0;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Option: pci_retry\n");
+ }
+ else {
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+ "\"pci_retry\" option requires \"pci_burst\"\n");
+ }
+ }
+
+ if (xf86IsOptionSet(VIAOptions, OPTION_SHADOW_FB)) {
+ pVia->shadowFB = TRUE;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Option: ShadowFB %s.\n",
+ pVia->shadowFB ? "enabled" : "disabled");
+ }
+ else {
+ pVia->shadowFB = FALSE;
+ }
+
+ if ((s = xf86GetOptValString(VIAOptions, OPTION_ROTATE))) {
+ if (!xf86NameCmp(s, "CW")) {
+ /* accel is disabled below for shadowFB */
+ pVia->shadowFB = TRUE;
+ pVia->rotate = 1;
+ pVia->hwcursor = FALSE;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+ "Rotating screen clockwise - acceleration disabled\n");
+ }
+ else if(!xf86NameCmp(s, "CCW")) {
+ pVia->shadowFB = TRUE;
+ pVia->rotate = -1;
+ pVia->hwcursor = FALSE;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Rotating screen"
+ "counter clockwise - acceleration disabled\n");
+ }
+ else {
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "\"%s\" is not a valid"
+ "value for Option \"Rotate\"\n", s);
+ xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+ "Valid options are \"CW\" or \"CCW\"\n");
+ }
+ }
+
+ if (xf86ReturnOptValBool(VIAOptions, OPTION_NOACCEL, FALSE)) {
+ pVia->NoAccel = TRUE;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+ "Option: NoAccel -Acceleration Disabled\n");
+ }
+ else {
+ pVia->NoAccel = FALSE;
+ }
+
+ if (pVia->shadowFB && !pVia->NoAccel) {
+ xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+ "HW acceleration not supported with \"shadowFB\".\n");
+ pVia->NoAccel = TRUE;
+ }
+
+ /*
+ * The SWCursor setting takes priority over HWCursor. The default
+ * if neither is specified is HW.
+ */
+
+ from = X_DEFAULT;
+ pVia->hwcursor = pVia->shadowFB ? FALSE : TRUE;
+ if (xf86GetOptValBool(VIAOptions, OPTION_HWCURSOR, &pVia->hwcursor))
+ from = X_CONFIG;
+
+ if (xf86ReturnOptValBool(VIAOptions, OPTION_SWCURSOR, FALSE)) {
+ pVia->hwcursor = FALSE;
+ from = X_CONFIG;
+ }
+
+ if (pVia->IsSecondary) pVia->hwcursor = FALSE;
+
+ xf86DrvMsg(pScrn->scrnIndex, from, "Using %s cursor\n",
+ pVia->hwcursor ? "HW" : "SW");
+
+ if (xf86ReturnOptValBool(VIAOptions, OPTION_A2, FALSE)) {
+ pBIOSInfo->A2 = TRUE;
+ }
+ else {
+ pBIOSInfo->A2 = FALSE;
+ }
+
+ from = X_DEFAULT;
+ if (xf86ReturnOptValBool(VIAOptions, OPTION_USEBIOS, FALSE)) {
+ from = X_CONFIG;
+ pBIOSInfo->UseBIOS = TRUE;
+ }
+ else {
+ pBIOSInfo->UseBIOS = FALSE;
+ }
+ xf86DrvMsg(pScrn->scrnIndex, from, "%ssing video BIOS to set modes\n",
+ pBIOSInfo->UseBIOS ? "U" : "Not u" );
+
+ pScrn->videoRam = 0;
+ if(xf86GetOptValInteger(VIAOptions, OPTION_VIDEORAM, &pScrn->videoRam)) {
+ xf86DrvMsg( pScrn->scrnIndex, X_CONFIG,
+ "Option: VideoRAM %dkB\n", pScrn->videoRam );
+ }
+
+ if (xf86ReturnOptValBool(VIAOptions, OPTION_DISABLEVQ, FALSE)) {
+ pVia->VQEnable = FALSE;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+ "Option: DisableVQ -VQ Disabled\n");
+ }
+ else {
+ pVia->VQEnable = TRUE;
+ }
+
+ /* ActiveDevice Option for device selection */
+ pBIOSInfo->ActiveDevice = 0x00;
+ if ((s = xf86GetOptValString(VIAOptions, OPTION_ACTIVEDEVICE))) {
+ if (!xf86NameCmp(s, "CRT,TV") || !xf86NameCmp(s, "TV,CRT")) {
+ pBIOSInfo->ActiveDevice = VIA_DEVICE_CRT1 | VIA_DEVICE_TV;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Active Device is CRT and TV.\n");
+ }
+ else if(!xf86NameCmp(s, "CRT,LCD") || !xf86NameCmp(s, "LCD,CRT")) {
+ pBIOSInfo->ActiveDevice = VIA_DEVICE_CRT1 | VIA_DEVICE_LCD;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Active Device is CRT and LCD.\n");
+ }
+ else if(!xf86NameCmp(s, "CRT,DFP") || !xf86NameCmp(s, "DFP,CRT")
+ || !xf86NameCmp(s, "CRT,DVI") || !xf86NameCmp(s, "DVI,CRT")) {
+ pBIOSInfo->ActiveDevice = VIA_DEVICE_CRT1 | VIA_DEVICE_DFP;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Active Device is CRT and DFP.\n");
+ }
+ else if(!xf86NameCmp(s, "TV,DFP") || !xf86NameCmp(s, "DFP,TV")
+ || !xf86NameCmp(s, "TV,DVI") || !xf86NameCmp(s, "DVI,TV")) {
+ pBIOSInfo->ActiveDevice = VIA_DEVICE_TV | VIA_DEVICE_DFP;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Active Device is TV and DFP.\n");
+ }
+#if 0
+ else if(!xf86NameCmp(s, "DFP,LCD") || !xf86NameCmp(s, "LCD,DFP")
+ || !xf86NameCmp(s, "LCD,DVI") || !xf86NameCmp(s, "DVI,LCD")) {
+ pBIOSInfo->ActiveDevice = VIA_DEVICE_DFP | VIA_DEVICE_LCD;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Active Device is DFP and LCD.\n");
+ }
+#endif
+ else if(!xf86NameCmp(s, "CRT") || !xf86NameCmp(s, "CRT ONLY")) {
+ pBIOSInfo->ActiveDevice = VIA_DEVICE_CRT1;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Active Device is CRT Only.\n");
+ }
+ else if(!xf86NameCmp(s, "LCD") || !xf86NameCmp(s, "LCD ONLY")) {
+ pBIOSInfo->ActiveDevice = VIA_DEVICE_LCD;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Active Device is LCD Only.\n");
+ }
+ else if(!xf86NameCmp(s, "TV") || !xf86NameCmp(s, "TV ONLY")) {
+ pBIOSInfo->ActiveDevice = VIA_DEVICE_TV;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Active Device is TV Only.\n");
+ }
+ else if(!xf86NameCmp(s, "DFP") || !xf86NameCmp(s, "DFP ONLY")
+ || !xf86NameCmp(s, "DVI") || !xf86NameCmp(s, "DVI ONLY")) {
+ pBIOSInfo->ActiveDevice = VIA_DEVICE_DFP;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Active Device is DFP Only.\n");
+ }
+ else {
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Option \"%s\" can't recognize!, Active Device by default.\n", s);
+ }
+ }
+
+ /* NoDDCValue Option */
+ if (xf86ReturnOptValBool(VIAOptions, OPTION_NODDCVALUE, FALSE)) {
+ pVia->NoDDCValue = TRUE;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+ "Option: Not using DDC probed value to set HorizSync & VertRefresh\n");
+ }
+ else {
+ pVia->NoDDCValue = FALSE;
+ }
+
+ /* LCDDualEdge Option */
+ pBIOSInfo->LCDDualEdge = FALSE;
+ if (xf86ReturnOptValBool(VIAOptions, OPTION_LCDDUALEDGE, FALSE)) {
+ pBIOSInfo->LCDDualEdge = TRUE;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+ "Option: Using Dual Edge mode to set LCD\n");
+ }
+ else {
+ pBIOSInfo->LCDDualEdge = FALSE;
+ }
+
+ /* Digital Output Bus Width Option */
+ pBIOSInfo->BusWidth = VIA_DI_12BIT;
+ if ((s = xf86GetOptValString(VIAOptions, OPTION_BUSWIDTH))) {
+ if (!xf86NameCmp(s, "12BIT")) {
+ pBIOSInfo->BusWidth = VIA_DI_12BIT;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+ "Digital Output Bus Width is 12BIT\n");
+ }
+ else if (!xf86NameCmp(s, "24BIT")) {
+ pBIOSInfo->BusWidth = VIA_DI_24BIT;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+ "Digital Output Bus Width is 24BIT\n");
+ }
+ }
+
+ /* LCD Center/Expend Option */
+ if (xf86ReturnOptValBool(VIAOptions, OPTION_CENTER, FALSE)) {
+ pBIOSInfo->Center = TRUE;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "DVI Center is On\n");
+ }
+ else {
+ pBIOSInfo->Center = FALSE;
+ }
+
+ /* Panel Size Option */
+ pBIOSInfo->PanelSize = VIA_PANEL_INVALID;
+ if ((s = xf86GetOptValString(VIAOptions, OPTION_PANELSIZE))) {
+ if (!xf86NameCmp(s, "640x480")) {
+ pBIOSInfo->PanelSize = VIA_PANEL6X4;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+ "Selected Panel Size is 640x480\n");
+ }
+ else if (!xf86NameCmp(s, "800x600")) {
+ pBIOSInfo->PanelSize = VIA_PANEL8X6;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+ "Selected Panel Size is 800x600\n");
+ }
+ else if(!xf86NameCmp(s, "1024x768")) {
+ pBIOSInfo->PanelSize = VIA_PANEL10X7;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+ "Selected Panel Size is 1024x768\n");
+ }
+ else if (!xf86NameCmp(s, "1280x768")) {
+ pBIOSInfo->PanelSize = VIA_PANEL12X7;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+ "Selected Panel Size is 1280x768\n");
+ }
+ else if (!xf86NameCmp(s, "1280x1024")) {
+ pBIOSInfo->PanelSize = VIA_PANEL12X10;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+ "Selected Panel Size is 1280x1024\n");
+ }
+ else if (!xf86NameCmp(s, "1400x1050")) {
+ pBIOSInfo->PanelSize = VIA_PANEL14X10;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+ "Selected Panel Size is 1400x1050\n");
+ }
+ }
+
+ /* TV DotCrawl Enable Option */
+ if (xf86ReturnOptValBool(VIAOptions, OPTION_TVDOTCRAWL, FALSE)) {
+ pBIOSInfo->TVDotCrawl = TRUE;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "DotCrawl is Enable\n");
+ }
+ else {
+ pBIOSInfo->TVDotCrawl = FALSE;
+ }
+
+ pBIOSInfo->TVType = TVTYPE_NONE;
+ if ((s = xf86GetOptValString(VIAOptions, OPTION_TVTYPE))) {
+ if (!xf86NameCmp(s, "NTSC")) {
+ pBIOSInfo->TVType = TVTYPE_NTSC;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "TV Type is NTSC\n");
+ }
+ else if(!xf86NameCmp(s, "PAL")) {
+ pBIOSInfo->TVType = TVTYPE_PAL;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "TV Type is PAL\n");
+ }
+ }
+
+ /* TV out put signal Option */
+ pBIOSInfo->TVOutput = TVOUTPUT_NONE;
+ if ((s = xf86GetOptValString(VIAOptions, OPTION_TVOUTPUT))) {
+ if (!xf86NameCmp(s, "S-Video")) {
+ pBIOSInfo->TVOutput = TVOUTPUT_SVIDEO;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "TV Output Signal is S-Video\n");
+ }
+ else if(!xf86NameCmp(s, "Composite")) {
+ pBIOSInfo->TVOutput = TVOUTPUT_COMPOSITE;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "TV Output Signal is Composite\n");
+ }
+ else if(!xf86NameCmp(s, "SC")) {
+ pBIOSInfo->TVOutput = TVOUTPUT_SC;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "TV Output Signal is SC\n");
+ }
+ else if(!xf86NameCmp(s, "RGB")) {
+ pBIOSInfo->TVOutput = TVOUTPUT_RGB;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "TV Output Signal is RGB\n");
+ }
+ else if(!xf86NameCmp(s, "YCbCr")) {
+ pBIOSInfo->TVOutput = TVOUTPUT_YCBCR;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "TV Output Signal is YCbCr\n");
+ }
+ }
+
+ /* TV Standard Option */
+ pBIOSInfo->TVVScan = VIA_TVNORMAL;
+ if ((s = xf86GetOptValString(VIAOptions, OPTION_TVVSCAN))) {
+ if (!xf86NameCmp(s, "under")) {
+ pBIOSInfo->TVVScan = VIA_TVNORMAL;
+ }
+ else if (!xf86NameCmp(s, "over")) {
+ pBIOSInfo->TVVScan = VIA_TVOVER;
+ }
+ }
+
+ pBIOSInfo->TVHScale = VIA_NO_TVHSCALE;
+ if ((s = xf86GetOptValString(VIAOptions, OPTION_TVHSCALE))) {
+#if 0
+ if (!xf86NameCmp(s, "0")) {
+ pBIOSInfo->TVHScale = VIA_TVHSCALE0;
+ }
+ else if (!xf86NameCmp(s, "1")) {
+ pBIOSInfo->TVHScale = VIA_TVHSCALE1;
+ }
+ else if(!xf86NameCmp(s, "2")) {
+ pBIOSInfo->TVHScale = VIA_TVHSCALE2;
+ }
+ else if (!xf86NameCmp(s, "3")) {
+ pBIOSInfo->TVHScale = VIA_TVHSCALE3;
+ }
+ else if (!xf86NameCmp(s, "4")) {
+ pBIOSInfo->TVHScale = VIA_TVHSCALE4;
+ }
+#endif
+ }
+
+ /* TV Encoder Type Option */
+ pBIOSInfo->TVEncoder = VIA_NONETV;
+ if ((s = xf86GetOptValString(VIAOptions, OPTION_TVENCODER))) {
+ if (!xf86NameCmp(s, "VT1621")) {
+ pBIOSInfo->TVEncoder = VIA_TV2PLUS;
+ pBIOSInfo->TVI2CAdd = 0x40;
+ }
+ else if(!xf86NameCmp(s, "VT1622")) {
+ pBIOSInfo->TVEncoder = VIA_TV3;
+ pBIOSInfo->TVI2CAdd = 0x40;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "TV Encoder is VT1622!\n");
+ }
+ else if(!xf86NameCmp(s, "VT1622A")) {
+ pBIOSInfo->TVEncoder = VIA_VT1622A;
+ pBIOSInfo->TVI2CAdd = 0x40;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "TV Encoder is VT1622!\n");
+ }
+ else if(!xf86NameCmp(s, "CH7019")) {
+ pBIOSInfo->TVEncoder = VIA_CH7019;
+ pBIOSInfo->TVI2CAdd = 0xEA;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "TV Encoder is CH7019!\n");
+ }
+ else if(!xf86NameCmp(s, "SAA7108")) {
+ pBIOSInfo->TVEncoder = VIA_SAA7108;
+ pBIOSInfo->TVI2CAdd = 0x88;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "TV Encoder is SAA7108!\n");
+ }
+ else if(!xf86NameCmp(s, "FS454")) {
+ pBIOSInfo->TVEncoder = VIA_FS454;
+ pBIOSInfo->TVI2CAdd = 0xD4;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "TV Encoder is FS453/FS454!\n");
+ }
+ }
+
+ if (xf86GetOptValInteger(VIAOptions, OPTION_REFRESH, &(pBIOSInfo->OptRefresh))) {
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Refresh is %d\n", pBIOSInfo->OptRefresh);
+ }
+
+ if (xf86LoadSubModule(pScrn, "int10")) {
+ xf86LoaderReqSymLists(int10Symbols, NULL);
+ pVia->pInt10 = xf86InitInt10(pEnt->index);
+ }
+
+ if (pVia->pInt10 && xf86LoadSubModule(pScrn, "vbe")) {
+ xf86LoaderReqSymLists(vbeSymbols, NULL);
+ pVia->pVbe = VBEInit(pVia->pInt10, pVia->EntityIndex);
+ }
+
+ pVia->PciInfo = xf86GetPciInfoForEntity(pEnt->index);
+ xf86RegisterResources(pEnt->index, NULL, ResNone);
+ /*
+ xf86SetOperatingState(RES_SHARED_VGA, pEnt->index, ResUnusedOpr);
+ xf86SetOperatingState(resVgaMemShared, pEnt->index, ResDisableOpr);
+ */
+
+ if (pEnt->device->chipset && *pEnt->device->chipset) {
+ pScrn->chipset = pEnt->device->chipset;
+ pVia->ChipId = pEnt->device->chipID;
+ pVia->Chipset = xf86StringToToken(VIAChipsets, pScrn->chipset);
+ from = X_CONFIG;
+ } else if (pEnt->device->chipID >= 0) {
+ pVia->ChipId = pEnt->device->chipID;
+ pVia->Chipset = LookupChipID(VIAPciChipsets, pVia->ChipId);
+ pScrn->chipset = (char *)xf86TokenToString(VIAChipsets,
+ pVia->Chipset);
+ from = X_CONFIG;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "ChipID override: 0x%04X\n",
+ pEnt->device->chipID);
+ } else {
+ from = X_PROBED;
+ pVia->ChipId = pVia->PciInfo->chipType;
+ pVia->Chipset = LookupChipID(VIAPciChipsets, pVia->ChipId);
+ pScrn->chipset = (char *)xf86TokenToString(VIAChipsets,
+ pVia->Chipset);
+ }
+
+ if (pEnt->device->chipRev >= 0) {
+ pVia->ChipRev = pEnt->device->chipRev;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "ChipRev override: %d\n",
+ pVia->ChipRev);
+ }
+ else {
+ /*pVia->ChipRev = pVia->PciInfo->chipRev;*/
+ /* Read PCI bus 0, dev 0, function 0, index 0xF6 to get chip rev. */
+ pVia->ChipRev = pciReadByte(pciTag(0, 0, 0), 0xF6);
+ }
+
+ if (pEnt->device->videoRam != 0) {
+ if (!pScrn->videoRam)
+ pScrn->videoRam = pEnt->device->videoRam;
+ else {
+ xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+ "Video Memory Size in Option is %d KB, Detect is %d KB!",
+ pScrn->videoRam, pEnt->device->videoRam);
+ }
+ }
+ pBIOSInfo->Chipset = pVia->Chipset;
+ pBIOSInfo->ChipRev = pVia->ChipRev;
+
+ xfree(pEnt);
+
+ VIAvfInitHWDiff(pVia);
+
+ /* maybe throw in some more sanity checks here */
+
+ xf86DrvMsg(pScrn->scrnIndex, from, "Chipset: \"%s\"\n", pScrn->chipset);
+
+ pVia->PciTag = pciTag(pVia->PciInfo->bus, pVia->PciInfo->device,
+ pVia->PciInfo->func);
+
+ switch (pVia->ChipRev) {
+ case 2:
+ pBIOSInfo->A2 = TRUE;
+ break;
+ default:
+ pBIOSInfo->A2 = FALSE;
+ break;
+ }
+ xf86DrvMsg(pScrn->scrnIndex, from, "Chipset Rev.: %d\n", pVia->ChipRev);
+
+ hwp = VGAHWPTR(pScrn);
+ vgaHWGetIOBase(hwp);
+
+ if (!VIAMapMMIO(pScrn)) {
+ vbeFree(pVia->pVbe);
+ return FALSE;
+ }
+
+ /* Get BIOS ver. From BIOS Call Function */
+ tmp = VIABIOS_GetBIOSVersion(pScrn);
+ pBIOSInfo->BIOSMajorVersion = tmp >> 8;
+ pBIOSInfo->BIOSMinorVersion = tmp & 0xFF;
+ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "BIOS Version is = %d.%d\n", pBIOSInfo->BIOSMajorVersion, pBIOSInfo->BIOSMinorVersion));
+ VIABIOS_GetBIOSDate(pScrn);
+
+ if (pBIOSInfo->TVType == TVTYPE_NONE) {
+ /* use jumper to determine TV Type */
+ VGAOUT8(0x3D4, 0x3B);
+ if (VGAIN8(0x3D5) & 0x02) {
+ pBIOSInfo->TVType = TVTYPE_PAL;
+ }
+ else {
+ pBIOSInfo->TVType = TVTYPE_NTSC;
+ }
+ }
+
+ {
+ Gamma zeros = {0.0, 0.0, 0.0};
+
+ if (!xf86SetGamma(pScrn, zeros)) {
+ vbeFree(pVia->pVbe);
+ return FALSE;
+ }
+ }
+
+ /* Next go on to detect amount of installed ram */
+ if (pScrn->videoRam < 16384 || pScrn->videoRam > 65536) {
+ bMemSize = VIABIOS_GetVideoMemSize(pScrn);
+ if (bMemSize) {
+ pScrn->videoRam = bMemSize << 6;
+ }
+ else {
+ VGAOUT8(0x3C4, 0x34); /* Was 0x39 */
+ bMemSize = VGAIN8(0x3c5);
+ if (bMemSize > 16 && bMemSize <= 128) {
+ pScrn->videoRam = (bMemSize + 1) << 9;
+ }
+ else if (bMemSize > 0 && bMemSize < 31){
+ pScrn->videoRam = bMemSize << 12;
+ }
+ else {
+ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ "bMemSize = %d\nGet Video Memory Size by default.\n", bMemSize));
+ pScrn->videoRam = VIAGetMemSize();
+ }
+ }
+ }
+
+ /* Split FB for SAMM */
+ /* FIXME: For now, split FB into two equal sections. This should
+ * be able to be adjusted by user with a config option. */
+ if (pVia->IsSecondary) {
+ DevUnion* pPriv;
+ VIAEntPtr pVIAEnt;
+ VIAPtr pVia1;
+
+ pPriv = xf86GetEntityPrivate(pScrn->entityList[0],
+ gVIAEntityIndex);
+ pVIAEnt = pPriv->ptr;
+ pScrn->videoRam = pScrn->videoRam >> 1;
+ pVIAEnt->pPrimaryScrn->videoRam = pScrn->videoRam;
+ pVia1 = VIAPTR(pVIAEnt->pPrimaryScrn);
+ pVia1->videoRambytes = pScrn->videoRam << 10;
+ pVia->FrameBufferBase += (pScrn->videoRam << 10);
+ }
+
+ pVia->videoRambytes = pScrn->videoRam << 10;
+ xf86DrvMsg(pScrn->scrnIndex, X_PROBED,"videoram = %dk\n",
+ pScrn->videoRam);
+
+ /* Set status word positions based on chip type. */
+
+ switch (pVia->Chipset) {
+ case VIA_CLE266:
+ pVia->myWaitIdle = WaitIdleCLE266;
+ break;
+ default:
+ pVia->myWaitIdle = WaitIdleCLE266;
+ break;
+ }
+
+ if (!xf86LoadSubModule(pScrn, "i2c")) {
+ VIAFreeRec(pScrn);
+ return FALSE;
+ }
+ else {
+ xf86LoaderReqSymLists(i2cSymbols,NULL);
+ VIAI2CInit(pScrn);
+ }
+
+ if (!xf86LoadSubModule(pScrn, "ddc")) {
+ VIAFreeRec(pScrn);
+ return FALSE;
+ }
+ else {
+ xf86MonPtr pMon = NULL;
+
+ xf86LoaderReqSymLists(ddcSymbols, NULL);
+ if ((pVia->pVbe)
+ && ((pMon = xf86PrintEDID(vbeDoEDID(pVia->pVbe, NULL))) != NULL)) {
+ pVia->DDC1 = pMon;
+ xf86SetDDCproperties(pScrn,pMon);
+ }
+ else if (!VIAddc2(pScrn->scrnIndex)) {
+ VIAddc1(pScrn->scrnIndex);
+ }
+ }
+
+ /* Reset HorizSync & VertRefresh Rang Using DDC Value */
+ if (pVia->DDC1 && !pVia->NoDDCValue) {
+ int i;
+ int h = 0;
+ int v = 0;
+
+ for (i = 0; i < DET_TIMINGS; i++) {
+ if (pVia->DDC1->det_mon[i].type == DS_RANGES) {
+ pScrn->monitor->hsync[h].lo
+ = pVia->DDC1->det_mon[i].section.ranges.min_h;
+ pScrn->monitor->hsync[h++].hi
+ = pVia->DDC1->det_mon[i].section.ranges.max_h;
+ pScrn->monitor->vrefresh[v].lo
+ = pVia->DDC1->det_mon[i].section.ranges.min_v;
+ pScrn->monitor->vrefresh[v++].hi
+ = pVia->DDC1->det_mon[i].section.ranges.max_v;
+ break;
+ }
+ }
+ pScrn->monitor->nHsync = h;
+ pScrn->monitor->nVrefresh = v;
+ }
+
+ /*
+ * Setup the ClockRanges, which describe what clock ranges are available,
+ * and what sort of modes they can be used for.
+ */
+
+ clockRanges = xnfalloc(sizeof(ClockRange));
+ clockRanges->next = NULL;
+ clockRanges->minClock = 20000;
+ clockRanges->maxClock = 230000;
+
+ clockRanges->clockIndex = -1;
+ clockRanges->interlaceAllowed = TRUE;
+ clockRanges->doubleScanAllowed = FALSE;
+
+
+ /*
+ * xf86ValidateModes will check that the mode HTotal and VTotal values
+ * don't exceed the chipset's limit if pScrn->maxHValue and
+ * pScrn->maxVValue are set. Since our VIAValidMode() already takes
+ * care of this, we don't worry about setting them here.
+ */
+
+ /* Select valid modes from those available */
+ i = xf86ValidateModes(pScrn,
+ pScrn->monitor->Modes, /* availModes */
+ pScrn->display->modes, /* modeNames */
+ clockRanges, /* list of clock ranges */
+ NULL, /* list of line pitches */
+ 256, /* mini line pitch */
+ 2048, /* max line pitch */
+ 16 * pScrn->bitsPerPixel, /* pitch inc (bits) */
+ 128, /* min height */
+ 2048, /* max height */
+ pScrn->display->virtualX, /* virtual width */
+ pScrn->display->virtualY, /* virutal height */
+ pVia->videoRambytes, /* size of video memory */
+ LOOKUP_BEST_REFRESH); /* lookup mode flags */
+
+ if (i == -1) {
+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "xf86ValidateModes failure\n");
+ VIAFreeRec(pScrn);
+ return FALSE;
+ }
+
+ xf86PruneDriverModes(pScrn);
+
+ if (i == 0 || pScrn->modes == NULL) {
+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "No valid modes found\n");
+ VIAFreeRec(pScrn);
+ return FALSE;
+ }
+
+ /* Set up screen parameters. */
+ pVia->Bpp = pScrn->bitsPerPixel >> 3;
+ pVia->Bpl = pScrn->displayWidth * pVia->Bpp;
+
+ if (!VIAGetBIOSTable(pBIOSInfo)) {
+ VIAFreeRec(pScrn);
+ return FALSE;
+ }
+
+ pBIOSInfo->I2C_Port1 = pVia->I2C_Port1;
+ pBIOSInfo->I2C_Port2 = pVia->I2C_Port2;
+ pBIOSInfo->DDC1 = pVia->DDC1;
+ pBIOSInfo->DDC2 = pVia->DDC2;
+
+ /* Detect TV Encoder */
+ if (!pBIOSInfo->TVEncoder) {
+ pBIOSInfo->TVEncoder = VIACheckTVExist(pBIOSInfo);
+ }
+ /* Detect TMDS/LVDS Encoder */
+ VIAPostDVI(pBIOSInfo);
+ /*VIAGetPanelInfo(pBIOSInfo);*/
+ pBIOSInfo->ConnectedDevice = VIAGetDeviceDetect(pBIOSInfo);
+
+ xf86SetCrtcForModes(pScrn, INTERLACE_HALVE_V);
+ pScrn->currentMode = pScrn->modes;
+ xf86PrintModes(pScrn);
+ xf86SetDpi(pScrn, 0, 0);
+
+#ifdef USE_FB
+ if (xf86LoadSubModule(pScrn, "fb") == NULL) {
+ VIAFreeRec(pScrn);
+ return FALSE;
+ }
+
+ xf86LoaderReqSymLists(fbSymbols, NULL);
+
+#else
+ /* load bpp-specific modules */
+ switch (pScrn->bitsPerPixel) {
+ case 8:
+ mod = "cfb";
+ reqSym = "cfbScreenInit";
+ break;
+ case 16:
+ mod = "cfb16";
+ reqSym = "cfb16ScreenInit";
+ break;
+ case 32:
+ mod = "cfb32";
+ reqSym = "cfb32ScreenInit";
+ break;
+ }
+
+ if (mod && xf86LoadSubModule(pScrn, mod) == NULL) {
+ VIAFreeRec(pScrn);
+ return FALSE;
+ }
+
+ xf86LoaderReqSymbols(reqSym, NULL);
+#endif
+
+ if (!pVia->NoAccel) {
+ if(!xf86LoadSubModule(pScrn, "xaa")) {
+ VIAFreeRec(pScrn);
+ return FALSE;
+ }
+ xf86LoaderReqSymLists(xaaSymbols, NULL);
+ }
+
+ if (pVia->hwcursor) {
+ if (!xf86LoadSubModule(pScrn, "ramdac")) {
+ VIAFreeRec(pScrn);
+ return FALSE;
+ }
+ xf86LoaderReqSymLists(ramdacSymbols, NULL);
+ }
+
+ if (pVia->shadowFB) {
+ if (!xf86LoadSubModule(pScrn, "shadowfb")) {
+ VIAFreeRec(pScrn);
+ return FALSE;
+ }
+ xf86LoaderReqSymLists(shadowSymbols, NULL);
+ }
+
+ /* Capture option parameter */
+ pVia->Cap0_Deinterlace = CAP_BOB;
+ if ((s = xf86GetOptValString(VIAOptions, OPTION_CAP0_DEINTERLACE))) {
+ if (!xf86NameCmp(s, "Bob")) {
+ pVia->Cap0_Deinterlace = CAP_BOB;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Capture 0 de-interlace mode is Bob\n");
+ }
+ else if(!xf86NameCmp(s, "Weave")) {
+ pVia->Cap0_Deinterlace = CAP_WEAVE;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Capture 0 de-interlace mode is Weave\n");
+ }
+ }
+
+ pVia->Cap1_Deinterlace = CAP_BOB;
+ if ((s = xf86GetOptValString(VIAOptions, OPTION_CAP1_DEINTERLACE))) {
+ if (!xf86NameCmp(s, "Bob")) {
+ pVia->Cap1_Deinterlace = CAP_BOB;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Capture 1 de-interlace mode is Bob\n");
+ }
+ else if(!xf86NameCmp(s, "Weave")) {
+ pVia->Cap1_Deinterlace = CAP_WEAVE;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Capture 1 de-interlace mode is Weave\n");
+ }
+ }
+
+ if (xf86ReturnOptValBool(VIAOptions, OPTION_CAP0_FIELDSWAP, FALSE)) {
+ pVia->Cap0_FieldSwap = TRUE;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+ "Option: Cap0_FieldSwap Enabled\n");
+ }
+ else {
+ pVia->Cap0_FieldSwap = FALSE;
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+ "Option: Cap0_FieldSwap Disabled\n");
+ }
+
+ /* xf86LoaderReqSymLists(mpegSymbols, NULL); */
+
+ VIADeviceSelection(pScrn);
+ if (pVia->IsSecondary) {
+ if (pBIOSInfo->SAMM)
+ VIADeviceDispatch(pScrn);
+ else
+ return FALSE;
+ }
+
+ VIAUnmapMem(pScrn);
+
+ return TRUE;
+}
+
+
+static Bool VIAEnterVT(int scrnIndex, int flags)
+{
+ ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+ VIAPtr pVia = VIAPTR(pScrn);
+ vgaHWPtr hwp = VGAHWPTR(pScrn);
+ Bool ret;
+
+ /* FIXME: Rebind AGP memory here */
+ /* FIXME: Unlock DRI here */
+ DEBUG(xf86DrvMsg(scrnIndex, X_INFO, "VIAEnterVT\n"));
+ VIASave(pScrn);
+ vgaHWUnlock(hwp);
+
+ ret = VIAModeInit(pScrn, pScrn->currentMode);
+
+ /* Patch for APM suspend resume, HWCursor has garbage */
+ if (pVia->hwcursor && pVia->CursorImage) {
+ DEBUG(xf86DrvMsg(scrnIndex, X_INFO, "Restore Cursor Image!\n"));
+ memcpy(pVia->FBBase + pVia->CursorStart, pVia->CursorImage, 0x1000);
+ VIASETREG(VIA_REG_CURSOR_FG, pVia->CursorFG);
+ VIASETREG(VIA_REG_CURSOR_BG, pVia->CursorBG);
+ VIASETREG(VIA_REG_CURSOR_MODE, pVia->CursorMC);
+ xfree(pVia->CursorImage);
+ /*VIALoadCursorImage(pScrn, *pVia->CursorImage);*/
+ }
+
+ /* retore video status */
+ if (!pVia->IsSecondary)
+ viaRestoreVideo(pScrn);
+
+ VIAAdjustFrame(scrnIndex, pScrn->frameX0, pScrn->frameY0, 0);
+ return ret;
+}
+
+
+static void VIALeaveVT(int scrnIndex, int flags)
+{
+ ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+ vgaHWPtr hwp = VGAHWPTR(pScrn);
+ VIAPtr pVia = VIAPTR(pScrn);
+ vgaRegPtr vgaSavePtr = &hwp->SavedReg;
+ VIARegPtr viaSavePtr = &pVia->SavedReg;
+
+ DEBUG(xf86DrvMsg(scrnIndex, X_INFO, "VIALeaveVT\n"));
+
+ /* FIXME: take the DRI lock here to avoid accidents */
+ /* FIXME: unbind the AGP memory ? */
+
+ /* Wait Hardware Engine idle to exit graphicd mode */
+ WaitIdle();
+
+ if (pVia->VQEnable) {
+ /* if we use VQ, disable it before we exit */
+ VIASETREG(0x43c, 0x00fe0000);
+ VIASETREG(0x440, 0x00000004);
+ }
+
+ /* Save video status and turn off all video activities */
+ if (!pVia->IsSecondary)
+ viaSaveVideo(pScrn);
+
+ if (pVia->hwcursor) {
+ pVia->CursorImage = xcalloc(1, 0x1000);
+ memcpy(pVia->CursorImage, pVia->FBBase + pVia->CursorStart, 0x1000);
+ pVia->CursorFG = (CARD32)VIAGETREG(VIA_REG_CURSOR_FG);
+ pVia->CursorBG = (CARD32)VIAGETREG(VIA_REG_CURSOR_BG);
+ pVia->CursorMC = (CARD32)VIAGETREG(VIA_REG_CURSOR_MODE);
+ }
+
+ VIAWriteMode(pScrn, vgaSavePtr, viaSavePtr);
+ vgaHWLock(hwp);
+}
+
+
+static void VIASave(ScrnInfoPtr pScrn)
+{
+ vgaHWPtr hwp = VGAHWPTR(pScrn);
+ vgaRegPtr vgaSavePtr = &hwp->SavedReg;
+ VIAPtr pVia = VIAPTR(pScrn);
+ VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo;
+ VIARegPtr save = &pVia->SavedReg;
+ int vgaCRIndex, vgaCRReg, vgaIOBase;
+ int i;
+ I2CDevPtr dev;
+ unsigned char W_Buffer[1];
+ unsigned char TVRegs[0xFF];
+
+ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIASave\n"));
+
+ if(pVia->IsSecondary)
+ {
+ DevUnion* pPriv;
+ VIAEntPtr pVIAEnt;
+ VIAPtr pVia1;
+ vgaHWPtr hwp1;
+ pPriv = xf86GetEntityPrivate(pScrn->entityList[0],
+ gVIAEntityIndex);
+ pVIAEnt = pPriv->ptr;
+ hwp1 = VGAHWPTR(pVIAEnt->pPrimaryScrn);
+ pVia1 = VIAPTR(pVIAEnt->pPrimaryScrn);
+ hwp->SavedReg = hwp1->SavedReg;
+ pVia->SavedReg = pVia1->SavedReg;
+ }
+ else {
+ vgaHWProtect(pScrn, TRUE);
+
+ if (xf86IsPrimaryPci(pVia->PciInfo)) {
+ vgaHWSave(pScrn, vgaSavePtr, VGA_SR_ALL);
+ }
+ else {
+ vgaHWSave(pScrn, vgaSavePtr, VGA_SR_MODE);
+ }
+
+ vgaIOBase = hwp->IOBase;
+ vgaCRReg = vgaIOBase + 5;
+ vgaCRIndex = vgaIOBase + 4;
+
+ /* Unlock Extended Regs */
+ outb(0x3c4, 0x10);
+ outb(0x3c5, 0x01);
+
+ VGAOUT8(0x3c4, 0x14);
+ save->SR14 = VGAIN8(0x3c5);
+ VGAOUT8(0x3c4, 0x15);
+ save->SR15 = VGAIN8(0x3c5);
+ VGAOUT8(0x3c4, 0x16);
+ save->SR16 = VGAIN8(0x3c5);
+ VGAOUT8(0x3c4, 0x17);
+ save->SR17 = VGAIN8(0x3c5);
+ VGAOUT8(0x3c4, 0x18);
+ save->SR18 = VGAIN8(0x3c5);
+ VGAOUT8(0x3c4, 0x19);
+ save->SR19 = VGAIN8(0x3c5);
+ VGAOUT8(0x3c4, 0x1a);
+ save->SR1A = VGAIN8(0x3c5);
+ VGAOUT8(0x3c4, 0x1b);
+ save->SR1B = VGAIN8(0x3c5);
+ VGAOUT8(0x3c4, 0x1c);
+ save->SR1C = VGAIN8(0x3c5);
+ VGAOUT8(0x3c4, 0x1d);
+ save->SR1D = VGAIN8(0x3c5);
+ VGAOUT8(0x3c4, 0x1e);
+ save->SR1E = VGAIN8(0x3c5);
+ VGAOUT8(0x3c4, 0x1f);
+ save->SR1F = VGAIN8(0x3c5);
+ VGAOUT8(0x3c4, 0x22);
+ save->SR22 = VGAIN8(0x3c5);
+ VGAOUT8(0x3c4, 0x23);
+ save->SR23 = VGAIN8(0x3c5);
+ VGAOUT8(0x3c4, 0x24);
+ save->SR24 = VGAIN8(0x3c5);
+ VGAOUT8(0x3c4, 0x25);
+ save->SR25 = VGAIN8(0x3c5);
+ VGAOUT8(0x3c4, 0x26);
+ save->SR26 = VGAIN8(0x3c5);
+ VGAOUT8(0x3c4, 0x27);
+ save->SR27 = VGAIN8(0x3c5);
+ VGAOUT8(0x3c4, 0x28);
+ save->SR28 = VGAIN8(0x3c5);
+ VGAOUT8(0x3c4, 0x29);
+ save->SR29 = VGAIN8(0x3c5);
+ VGAOUT8(0x3c4, 0x2a);
+ save->SR2A = VGAIN8(0x3c5);
+ VGAOUT8(0x3c4, 0x2b);
+ save->SR2B = VGAIN8(0x3c5);
+ VGAOUT8(0x3c4, 0x2e);
+ save->SR2E = VGAIN8(0x3c5);
+ VGAOUT8(0x3c4, 0x44);
+ save->SR44 = VGAIN8(0x3c5);
+ VGAOUT8(0x3c4, 0x45);
+ save->SR45 = VGAIN8(0x3c5);
+ VGAOUT8(0x3c4, 0x46);
+ save->SR46 = VGAIN8(0x3c5);
+ VGAOUT8(0x3c4, 0x47);
+ save->SR47 = VGAIN8(0x3c5);
+
+ VGAOUT8(vgaCRIndex, 0x13);
+ save->CR13 = VGAIN8(vgaCRReg);
+ VGAOUT8(vgaCRIndex, 0x32);
+ save->CR32 = VGAIN8(vgaCRReg);
+ VGAOUT8(vgaCRIndex, 0x33);
+ save->CR33 = VGAIN8(vgaCRReg);
+ VGAOUT8(vgaCRIndex, 0x34);
+ save->CR34 = VGAIN8(vgaCRReg);
+ VGAOUT8(vgaCRIndex, 0x35);
+ save->CR35 = VGAIN8(vgaCRReg);
+ VGAOUT8(vgaCRIndex, 0x36);
+ save->CR36 = VGAIN8(vgaCRReg);
+
+ /* Saving TV register status before set mode */
+ switch (pBIOSInfo->TVEncoder) {
+ case VIA_NONETV:
+ break;
+ case VIA_VT1623:
+ VIAGPIOI2C_Initial(pBIOSInfo, 0x40);
+ for (i = 0; i < 0x6C; i++) {
+ VIAGPIOI2C_ReadByte(pBIOSInfo, i, (TVRegs + i));
+ save->TVRegs[i] = TVRegs[i];
+ /*DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Save TV Register[%d]0x%X\n", i, save->TVRegs[i]));*/
+ }
+ break;
+ default:
+ if (xf86I2CProbeAddress(pVia->I2C_Port2, pBIOSInfo->TVI2CAdd)) {
+ dev = xf86CreateI2CDevRec();
+ dev->DevName = "TV";
+ dev->SlaveAddr = pBIOSInfo->TVI2CAdd;
+ dev->pI2CBus = pVia->I2C_Port2;
+
+ if (xf86I2CDevInit(dev)) {
+ W_Buffer[0] = 0;
+ xf86I2CWriteRead(dev, W_Buffer,1, TVRegs, 0xFF);
+ for (i = 0; i < 0xFF; i++) {
+ save->TVRegs[i] = TVRegs[i];
+ }
+ xf86DestroyI2CDevRec(dev,TRUE);
+ }
+ else
+ xf86DestroyI2CDevRec(dev,TRUE);
+ }
+ break;
+ }
+
+ /* Saving LVDS register status before set mode
+ if (pBIOSInfo->LVDS == VIA_CH7019LVDS) {
+ dev = xf86CreateI2CDevRec();
+ dev->DevName = "LVDS";
+ dev->SlaveAddr = 0xEA;
+ dev->pI2CBus = pVia->I2C_Port2;
+
+ if (xf86I2CDevInit(dev)) {
+ for (i = 0; i < 0x40; i++) {
+ W_Buffer[0] = i + 0x40;
+ xf86I2CWriteRead(dev, W_Buffer, 1, save->LCDRegs + i, 1);
+ }
+ xf86DestroyI2CDevRec(dev,TRUE);
+ }
+ else
+ xf86DestroyI2CDevRec(dev,TRUE);
+ }*/
+
+ /* Save LCD control regs */
+ for (i = 0; i < 68; i++) {
+ VGAOUT8(vgaCRIndex, i + 0x50);
+ save->CRTCRegs[i] = VGAIN8(vgaCRReg);
+ }
+
+ if (!pVia->ModeStructInit) {
+ vgaHWCopyReg(&hwp->ModeReg, vgaSavePtr);
+ memcpy(&pVia->ModeReg, save, sizeof(VIARegRec));
+ pVia->ModeStructInit = TRUE;
+ }
+ vgaHWProtect(pScrn, FALSE);
+ }
+ return;
+}
+
+
+static void VIAWriteMode(ScrnInfoPtr pScrn, vgaRegPtr vgaSavePtr,
+ VIARegPtr restore)
+{
+ vgaHWPtr hwp = VGAHWPTR(pScrn);
+ VIAPtr pVia = VIAPTR(pScrn);
+ VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo;
+ int vgaCRIndex, vgaCRReg, vgaIOBase;
+/* Bool graphicsMode = FALSE;*/
+ int i;
+ unsigned char W_Buffer[3];
+ I2CDevPtr dev = NULL;
+ CARD8 tmp
+
+ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIAWriteMode\n"));
+ vgaIOBase = hwp->IOBase;
+ vgaCRIndex = vgaIOBase + 4;
+ vgaCRReg = vgaIOBase + 5;
+
+ /*
+ * If we figured out a VESA mode number for this timing, just use
+ * the VGA BIOS to do the switching, with a few additional tweaks.
+ */
+ if (restore->mode != 0xFF)
+ {
+ /* Set up the mode. Don't clear video RAM. */
+ if (!pVia->IsSecondary)
+ VIASetModeUseBIOSTable(pBIOSInfo);
+ else
+ VIASetModeForMHS(pBIOSInfo);
+
+ /* Restore the DAC.*/
+ if (pBIOSInfo->FirstInit ) {
+ vgaHWRestore(pScrn, vgaSavePtr, VGA_SR_CMAP);
+ }
+ /*else {
+ vgaHWRestore(pScrn, vgaSavePtr, VGA_SR_MODE);
+ }
+ vgaHWRestore(pScrn, vgaSavePtr, VGA_SR_CMAP);*/
+ pBIOSInfo->FirstInit = FALSE;
+ /* Enable the graphics engine. */
+ if (!pVia->NoAccel)
+ VIAInitialize2DEngine(pScrn);
+
+#ifdef XF86DRI
+ VIAInitialize3DEngine(pScrn);
+#endif
+ return;
+ }
+ vgaHWProtect(pScrn, TRUE);
+ /* Unlock Extended Regs */
+ outb(0x3c4, 0x10);
+ outb(0x3c5, 0x01);
+
+ /* How can we know the mode is graphical mode or not ? */
+ /* graphicsMode = (restore->mode == 0xFF) ? FALSE : TRUE; */
+
+ VGAOUT8(vgaCRIndex, 0x6a);
+ VGAOUT8(vgaCRReg, 0);
+ VGAOUT8(vgaCRIndex, 0x6b);
+ VGAOUT8(vgaCRReg, 0);
+ VGAOUT8(vgaCRIndex, 0x6c);
+ VGAOUT8(vgaCRReg, 0);
+
+ switch (pBIOSInfo->TVEncoder) {
+ case VIA_TV2PLUS:
+ case VIA_TV3:
+ case VIA_CH7009:
+ case VIA_CH7019:
+ case VIA_SAA7108:
+ case VIA_CH7005:
+ case VIA_VT1622A:
+ dev = xf86CreateI2CDevRec();
+ dev->DevName = "TV";
+ dev->SlaveAddr = pBIOSInfo->TVI2CAdd;
+ dev->pI2CBus = pVia->I2C_Port2;
+ if (xf86I2CDevInit(dev)) {
+ for (i = 0; i < 0xFF; i++) {
+ W_Buffer[0] = (unsigned char)(i);
+ W_Buffer[1] = (unsigned char)(restore->TVRegs[i]);
+ xf86I2CWriteRead(dev, W_Buffer, 2, NULL,0);
+ }
+ xf86DestroyI2CDevRec(dev,TRUE);
+ }
+ else
+ xf86DestroyI2CDevRec(dev,TRUE);
+ break;
+ case VIA_FS454:
+ dev = xf86CreateI2CDevRec();
+ dev->DevName = "TV";
+ dev->SlaveAddr = pBIOSInfo->TVI2CAdd;
+ dev->pI2CBus = pVia->I2C_Port2;
+ if (xf86I2CDevInit(dev)) {
+
+ /* QPR programming */
+ W_Buffer[0] = 0xC4;
+ W_Buffer[1] = (unsigned char)(restore->TVRegs[0xC4]);
+ W_Buffer[2] = (unsigned char)(restore->TVRegs[0xC5]);
+ xf86I2CWriteRead(dev, W_Buffer,3, NULL,0);
+
+ /* Restore TV Regs */
+ for (i = 0; i < 0xFF; i++) {
+ W_Buffer[0] = (unsigned char)(i);
+ W_Buffer[1] = (unsigned char)(restore->TVRegs[i]);
+ if (i == 0xC4)
+ i++;
+ else
+ xf86I2CWriteRead(dev, W_Buffer, 2, NULL,0);
+ }
+ xf86DestroyI2CDevRec(dev,TRUE);
+ }
+ else
+ xf86DestroyI2CDevRec(dev,TRUE);
+ break;
+ case VIA_VT1623:
+ VIAGPIOI2C_Initial(pBIOSInfo, 0x40);
+ for (i = 0; i < 0x6C; i++) {
+ VIAGPIOI2C_Write(pBIOSInfo, i, restore->TVRegs[i]);
+ /*DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Write Back Register[%d]:0x%X\n", i, restore->TVRegs[i]));*/
+ }
+ break;
+ default:
+ break;
+ }
+
+ /* restore the standard vga regs */
+ if (xf86IsPrimaryPci(pVia->PciInfo))
+ vgaHWRestore(pScrn, vgaSavePtr, VGA_SR_ALL);
+ else
+ vgaHWRestore(pScrn, vgaSavePtr, VGA_SR_MODE);
+
+ /* restore extended regs */
+ VGAOUT8(0x3c4, 0x14);
+ VGAOUT8(0x3c5, restore->SR14);
+ VGAOUT8(0x3c4, 0x15);
+ VGAOUT8(0x3c5, restore->SR15);
+ VGAOUT8(0x3c4, 0x16);
+ VGAOUT8(0x3c5, restore->SR16);
+ VGAOUT8(0x3c4, 0x17);
+ VGAOUT8(0x3c5, restore->SR17);
+ VGAOUT8(0x3c4, 0x18);
+ VGAOUT8(0x3c5, restore->SR18);
+ VGAOUT8(0x3c4, 0x19);
+ VGAOUT8(0x3c5, restore->SR19);
+ VGAOUT8(0x3c4, 0x1a);
+ VGAOUT8(0x3c5, restore->SR1A);
+ VGAOUT8(0x3c4, 0x1b);
+ VGAOUT8(0x3c5, restore->SR1B);
+ VGAOUT8(0x3c4, 0x1c);
+ VGAOUT8(0x3c5, restore->SR1C);
+ VGAOUT8(0x3c4, 0x1d);
+ VGAOUT8(0x3c5, restore->SR1D);
+ VGAOUT8(0x3c4, 0x1e);
+ VGAOUT8(0x3c5, restore->SR1E);
+ VGAOUT8(0x3c4, 0x1f);
+ VGAOUT8(0x3c5, restore->SR1F);
+ VGAOUT8(0x3c4, 0x22);
+ VGAOUT8(0x3c5, restore->SR22);
+ VGAOUT8(0x3c4, 0x23);
+ VGAOUT8(0x3c5, restore->SR23);
+ VGAOUT8(0x3c4, 0x24);
+ VGAOUT8(0x3c5, restore->SR24);
+ VGAOUT8(0x3c4, 0x25);
+ VGAOUT8(0x3c5, restore->SR25);
+ VGAOUT8(0x3c4, 0x26);
+ VGAOUT8(0x3c5, restore->SR26);
+ VGAOUT8(0x3c4, 0x27);
+ VGAOUT8(0x3c5, restore->SR27);
+ VGAOUT8(0x3c4, 0x28);
+ VGAOUT8(0x3c5, restore->SR28);
+ VGAOUT8(0x3c4, 0x29);
+ VGAOUT8(0x3c5, restore->SR29);
+ VGAOUT8(0x3c4, 0x2a);
+ VGAOUT8(0x3c5, restore->SR2A);
+ VGAOUT8(0x3c4, 0x2b);
+ VGAOUT8(0x3c5, restore->SR2B);
+ VGAOUT8(0x3c4, 0x2e);
+ VGAOUT8(0x3c5, restore->SR2E);
+ VGAOUT8(0x3c4, 0x44);
+ VGAOUT8(0x3c5, restore->SR44);
+ VGAOUT8(0x3c4, 0x45);
+ VGAOUT8(0x3c5, restore->SR45);
+ VGAOUT8(0x3c4, 0x46);
+ VGAOUT8(0x3c5, restore->SR46);
+ VGAOUT8(0x3c4, 0x47);
+ VGAOUT8(0x3c5, restore->SR47);
+
+ VGAOUT8(vgaCRIndex, 0x13);
+ VGAOUT8(vgaCRReg, restore->CR13);
+ VGAOUT8(vgaCRIndex, 0x32);
+ VGAOUT8(vgaCRReg, restore->CR32);
+ VGAOUT8(vgaCRIndex, 0x33);
+ VGAOUT8(vgaCRReg, restore->CR33);
+ VGAOUT8(vgaCRIndex, 0x34);
+ VGAOUT8(vgaCRReg, restore->CR34);
+ VGAOUT8(vgaCRIndex, 0x35);
+ VGAOUT8(vgaCRReg, restore->CR35);
+ VGAOUT8(vgaCRIndex, 0x36);
+ VGAOUT8(vgaCRReg, restore->CR36);
+
+ /* Restore LCD control regs */
+ for (i = 0; i < 68; i++) {
+ VGAOUT8(vgaCRIndex, i + 0x50);
+ VGAOUT8(vgaCRReg, restore->CRTCRegs[i]);
+ }
+
+ /*if (pBIOSInfo->LVDS == VIA_CH7019LVDS) {
+ dev = xf86CreateI2CDevRec();
+ dev->DevName = "LVDS";
+ dev->SlaveAddr = 0xEA;
+ dev->pI2CBus = pVia->I2C_Port2;
+
+ if (xf86I2CDevInit(dev)) {
+ for (i = 0; i < 0x40; i++) {
+ W_Buffer[0] = (unsigned char)(i + 0x40);
+ W_Buffer[1] = (unsigned char)(restore->LCDRegs[i]);
+ xf86I2CWriteRead(dev, W_Buffer, 2, NULL,0);
+ }
+
+ xf86DestroyI2CDevRec(dev,TRUE);
+ }
+ else
+ xf86DestroyI2CDevRec(dev,TRUE);
+
+ ActiveDevice = VIABIOS_GetActiveDevice(pScrn);
+ }*/
+ if (pBIOSInfo->DefaultActiveDevice & VIA_DEVICE_LCD)
+ VIAEnableLCD(pBIOSInfo);
+
+ VIADisabledExtendedFIFO(pBIOSInfo);
+ /* Reset clock */
+ tmp = VGAIN8(0x3cc);
+ VGAOUT8(0x3c2, tmp);
+
+ /* If we're going into graphics mode and acceleration was enabled, */
+/*
+ if (graphicsMode && (!pVia->NoAccel)) {
+ VIAInitialize2DEngine(pScrn);
+ }
+*/
+ vgaHWProtect(pScrn, FALSE);
+ return;
+}
+
+
+static Bool VIAMapMMIO(ScrnInfoPtr pScrn)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo;
+ vgaHWPtr hwp;
+
+ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIAMapMMIO\n"));
+
+ pVia->FrameBufferBase = pVia->PciInfo->memBase[0];
+ pVia->MmioBase = pVia->PciInfo->memBase[1];
+
+ xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
+ "mapping MMIO @ 0x%lx with size 0x%x\n",
+ pVia->MmioBase, VIA_MMIO_REGSIZE);
+
+ pVia->MapBase = xf86MapPciMem(pScrn->scrnIndex, VIDMEM_MMIO, pVia->PciTag,
+ pVia->MmioBase,
+ VIA_MMIO_REGSIZE);
+ pBIOSInfo->MapBase = pVia->MapBase;
+
+ xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
+ "mapping BitBlt MMIO @ 0x%lx with size 0x%x\n",
+ pVia->MmioBase + VIA_MMIO_BLTBASE, VIA_MMIO_BLTSIZE);
+
+ pVia->BltBase = xf86MapPciMem(pScrn->scrnIndex, VIDMEM_MMIO, pVia->PciTag,
+ pVia->MmioBase + VIA_MMIO_BLTBASE,
+ VIA_MMIO_BLTSIZE);
+/*
+ pVia->FBFreeStart += 0x300000;
+ ErrorF("After 3M FBFreeStart = 0x%x\n",pVia->FBFreeStart);
+*/
+ if (!pVia->MapBase || !pVia->BltBase) {
+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ "Internal error: cound not map registers\n");
+ return FALSE;
+ }
+
+ /* Memory mapped IO for Video Engine */
+ pVia->VidMapBase = pVia->MapBase + 0x200;
+
+ VIAEnableMMIO(pScrn);
+ hwp = VGAHWPTR(pScrn);
+ vgaHWGetIOBase(hwp);
+
+ return TRUE;
+}
+
+
+static Bool VIAMapFB(ScrnInfoPtr pScrn)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo;
+
+ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIAMapFB\n"));
+ xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
+ "mapping framebuffer @ 0x%lx with size 0x%lx\n",
+ pVia->FrameBufferBase, pVia->videoRambytes);
+
+ if (pVia->videoRambytes) {
+ pVia->FBBase = xf86MapPciMem(pScrn->scrnIndex, VIDMEM_FRAMEBUFFER,
+ pVia->PciTag, pVia->FrameBufferBase,
+ pVia->videoRambytes);
+ pBIOSInfo->FBBase = pVia->FBBase;
+ pBIOSInfo->videoRambytes = pVia->videoRambytes;
+
+ if (!pVia->FBBase) {
+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ "Internal error: could not map framebuffer\n");
+ return FALSE;
+ }
+
+ pVia->FBStart = pVia->FBBase;
+ pVia->FBFreeStart = (pScrn->displayWidth * pScrn->bitsPerPixel >> 3) *
+ pScrn->virtualY;
+ pVia->FBFreeEnd = pVia->videoRambytes;
+
+ xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
+ "Frame buffer start: %p, free start: 0x%x end: 0x%x\n",
+ pVia->FBStart, pVia->FBFreeStart, pVia->FBFreeEnd);
+ }
+
+ pScrn->memPhysBase = pVia->PciInfo->memBase[0];
+ pScrn->fbOffset = 0;
+ if(pVia->IsSecondary) pScrn->fbOffset = pScrn->videoRam << 10;
+
+ return TRUE;
+}
+
+
+static void VIAUnmapMem(ScrnInfoPtr pScrn)
+{
+ VIAPtr pVia;
+
+ pVia = VIAPTR(pScrn);
+
+ VIADisableMMIO(pScrn);
+
+ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIAUnmapMem\n"));
+
+ if (pVia->MapBase) {
+ xf86UnMapVidMem(pScrn->scrnIndex, (pointer)pVia->MapBase,
+ VIA_MMIO_REGSIZE);
+ }
+
+ if (pVia->BltBase) {
+ xf86UnMapVidMem(pScrn->scrnIndex, (pointer)pVia->BltBase,
+ VIA_MMIO_BLTSIZE);
+ }
+
+ if (pVia->FBBase) {
+ xf86UnMapVidMem(pScrn->scrnIndex, (pointer)pVia->FBBase,
+ pVia->videoRambytes);
+ }
+
+ return;
+}
+
+
+static Bool VIAScreenInit(int scrnIndex, ScreenPtr pScreen,
+ int argc, char **argv)
+{
+ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+ vgaHWPtr hwp = VGAHWPTR(pScrn);
+ VIAPtr pVia = VIAPTR(pScrn);
+ int ret;
+
+ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIAScreenInit\n"));
+ vgaHWUnlock(hwp);
+
+ if (!VIAMapFB(pScrn))
+ return FALSE;
+
+ if (!VIAMapMMIO(pScrn))
+ return FALSE;
+
+ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "- Mem Mapped\n"));
+
+ VIASave(pScrn);
+
+ vgaHWBlankScreen(pScrn, FALSE);
+
+ if (!VIAModeInit(pScrn, pScrn->currentMode))
+ return FALSE;
+
+ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "- State saved\n"));
+
+ /* Darken the screen for aesthetic reasons and set the viewport */
+ VIASaveScreen(pScreen, SCREEN_SAVER_ON);
+ pScrn->AdjustFrame(scrnIndex, pScrn->frameX0, pScrn->frameY0, 0);
+
+ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "- Blanked\n"));
+
+ miClearVisualTypes();
+
+ if (pScrn->bitsPerPixel > 8 && !pVia->IsSecondary) {
+ if (!miSetVisualTypes(pScrn->depth, TrueColorMask,
+ pScrn->rgbBits, pScrn->defaultVisual))
+ return FALSE;
+ if (!miSetPixmapDepths())
+ return FALSE;
+ } else {
+ if (!miSetVisualTypes(pScrn->depth, miGetDefaultVisualMask(pScrn->depth),
+ pScrn->rgbBits, pScrn->defaultVisual))
+ return FALSE;
+ if (!miSetPixmapDepths())
+ return FALSE;
+ }
+
+ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "- Visuals set up\n"));
+
+ ret = VIAInternalScreenInit(scrnIndex, pScreen);
+
+ if (!ret)
+ return FALSE;
+
+ xf86SetBlackWhitePixels(pScreen);
+ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "- B & W\n"));
+
+ if (pScrn->bitsPerPixel > 8) {
+ VisualPtr visual;
+
+ visual = pScreen->visuals + pScreen->numVisuals;
+ while (--visual >= pScreen->visuals) {
+ if ((visual->class | DynamicClass) == DirectColor) {
+ visual->offsetRed = pScrn->offset.red;
+ visual->offsetGreen = pScrn->offset.green;
+ visual->offsetBlue = pScrn->offset.blue;
+ visual->redMask = pScrn->mask.red;
+ visual->greenMask = pScrn->mask.green;
+ visual->blueMask = pScrn->mask.blue;
+ }
+ }
+ }
+
+#ifdef USE_FB
+ /* must be after RGB ordering fixed */
+ fbPictureInit(pScreen, 0, 0);
+#endif
+
+ if (!pVia->NoAccel)
+ VIAInitAccel(pScreen);
+
+ miInitializeBackingStore(pScreen);
+ xf86SetBackingStore(pScreen);
+ /*xf86SetSilkenMouse(pScreen);*/
+ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "- Backing store set up\n"));
+
+ if(!pVia->shadowFB) /* hardware cursor needs to wrap this layer */
+ VIADGAInit(pScreen);
+
+ miDCInitialize(pScreen, xf86GetPointerScreenFuncs());
+ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "- SW cursor set up\n"));
+
+ if (pVia->hwcursor) {
+ if (!VIAHWCursorInit(pScreen)) {
+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ "Hardware cursor initialization failed\n");
+ }
+ }
+
+ if (pVia->shadowFB) {
+ RefreshAreaFuncPtr refreshArea = VIARefreshArea;
+
+ if(pVia->rotate) {
+ if (!pVia->PointerMoved) {
+ pVia->PointerMoved = pScrn->PointerMoved;
+ pScrn->PointerMoved = VIAPointerMoved;
+ }
+
+ switch(pScrn->bitsPerPixel) {
+ case 8:
+ refreshArea = VIARefreshArea8;
+ break;
+ case 16:
+ refreshArea = VIARefreshArea16;
+ break;
+ case 32:
+ refreshArea = VIARefreshArea32;
+ break;
+ }
+ }
+
+ ShadowFBInit(pScreen, refreshArea);
+ }
+
+ if (!miCreateDefColormap(pScreen))
+ return FALSE;
+ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "- Def Color map set up\n"));
+
+ if (!xf86HandleColormaps(pScreen, 256, 6, VIALoadPalette, NULL,
+ CMAP_RELOAD_ON_MODE_SWITCH
+ | CMAP_PALETTED_TRUECOLOR))
+ return FALSE;
+
+ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "- Palette loaded\n"));
+
+ vgaHWBlankScreen(pScrn, TRUE);
+
+ pVia->CloseScreen = pScreen->CloseScreen;
+ pScreen->SaveScreen = VIASaveScreen;
+ pScreen->CloseScreen = VIACloseScreen;
+
+ xf86DPMSInit(pScreen, VIADPMS, 0);
+ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "- DPMS set up\n"));
+
+ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "- Color maps etc. set up\n"));
+
+#ifdef XF86DRI
+ pVia->directRenderingEnabled = VIADRIScreenInit(pScreen);
+
+ if (pVia->directRenderingEnabled) {
+ pVia->directRenderingEnabled = VIADRIFinishScreenInit(pScreen);
+ }
+ if (pVia->directRenderingEnabled) {
+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "direct rendering enabled\n");
+ }
+ else {
+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "direct rendering disabled\n");
+ }
+#endif
+
+ if (VIA_SERIES(pVia->Chipset) && !pVia->IsSecondary) {
+ viaFillGraphicInfo(pScrn);
+ /* There is alas not enough bandwidth to do 1600x1200x16 with video overlay */
+/* if(pScrn->bitsPerPixel * pScrn->virtualX *pScrn->virtualY <= 1400 * 1050 * 16) */
+ viaInitVideo(pScreen);
+/* else
+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "video overlay disabled (%dx%d@%d exceeds bandwidth)\n",
+ pScrn->virtualX, pScrn->virtualY, pScrn->bitsPerPixel);*/
+ }
+
+ if (serverGeneration == 1)
+ xf86ShowUnusedOptions(pScrn->scrnIndex, pScrn->options);
+
+ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "- Done\n"));
+ return TRUE;
+}
+
+
+static int VIAInternalScreenInit(int scrnIndex, ScreenPtr pScreen)
+{
+ ScrnInfoPtr pScrn;
+ VIAPtr pVia;
+ int width, height, displayWidth;
+ unsigned char *FBStart;
+ int ret = TRUE;
+
+ xf86DrvMsg(scrnIndex, X_INFO, "VIAInternalScreenInit\n");
+
+ pScrn = xf86Screens[pScreen->myNum];
+ pVia = VIAPTR(pScrn);
+
+ displayWidth = pScrn->displayWidth;
+
+ if (pVia->rotate) {
+ height = pScrn->virtualX;
+ width = pScrn->virtualY;
+ } else {
+ width = pScrn->virtualX;
+ height = pScrn->virtualY;
+ }
+
+ if (pVia->shadowFB) {
+ pVia->ShadowPitch = BitmapBytePad(pScrn->bitsPerPixel * width);
+ pVia->ShadowPtr = xalloc(pVia->ShadowPitch * height);
+ displayWidth = pVia->ShadowPitch / (pScrn->bitsPerPixel >> 3);
+ FBStart = pVia->ShadowPtr;
+ }
+ else {
+ pVia->ShadowPtr = NULL;
+ FBStart = pVia->FBStart;
+ }
+
+#ifdef USE_FB
+ ret = fbScreenInit(pScreen, FBStart, width, height,
+ pScrn->xDpi, pScrn->yDpi, displayWidth,
+ pScrn->bitsPerPixel);
+#else
+ switch (pScrn->bitsPerPixel) {
+ case 8:
+ ret = cfbScreenInit(pScreen, FBStart, width, height, pScrn->xDpi,
+ pScrn->yDpi, displayWidth);
+ break;
+
+ case 16:
+ ret = cfb16ScreenInit(pScreen, FBStart, width, height, pScrn->xDpi,
+ pScrn->yDpi, displayWidth);
+ break;
+
+ case 32:
+ ret = cfb32ScreenInit(pScreen, FBStart, width, height, pScrn->xDpi,
+ pScrn->yDpi, displayWidth);
+ break;
+
+ default:
+ xf86DrvMsg(scrnIndex, X_ERROR,
+ "Internal error: invalid bpp (%d) in SavageScreenInit\n",
+ pScrn->bitsPerPixel);
+ ret = FALSE;
+ break;
+ }
+#endif
+
+ return ret;
+}
+
+
+static ModeStatus VIAValidMode(int scrnIndex, DisplayModePtr mode,
+ Bool verbose, int flags)
+{
+ DEBUG(xf86DrvMsg(scrnIndex, X_INFO, "VIAValidMode\n"));
+ /* TODO check modes */
+ return MODE_OK;
+}
+
+
+static void VIABIOSInit(VIAPtr pVia, ScrnInfoPtr pScrn, DisplayModePtr pMode)
+{
+ int i;
+ VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo;
+
+ pBIOSInfo->bitsPerPixel = pScrn->bitsPerPixel;
+ pBIOSInfo->displayWidth = pScrn->displayWidth;
+ pBIOSInfo->frameX1 = pScrn->frameX1;
+ pBIOSInfo->frameY1 = pScrn->frameY1;
+ pBIOSInfo->scrnIndex = pScrn->scrnIndex;
+
+ pBIOSInfo->Clock = pMode->Clock;
+ pBIOSInfo->HTotal = pMode->HTotal;
+ pBIOSInfo->VTotal = pMode->VTotal;
+ pBIOSInfo->HDisplay = pMode->HDisplay;
+ pBIOSInfo->VDisplay = pMode->VDisplay;
+ pBIOSInfo->CrtcHDisplay = pMode->CrtcHDisplay;
+ pBIOSInfo->CrtcVDisplay = pMode->CrtcVDisplay;
+ if (pBIOSInfo->FirstInit) {
+ pBIOSInfo->SaveframeX1 = pScrn->frameX1;
+ pBIOSInfo->SaveframeY1 = pScrn->frameY1;
+ pBIOSInfo->SaveHDisplay = pMode->HDisplay;
+ pBIOSInfo->SaveVDisplay = pMode->VDisplay;
+ pBIOSInfo->SaveCrtcHDisplay = pMode->CrtcHDisplay;
+ pBIOSInfo->SaveCrtcVDisplay = pMode->CrtcVDisplay;
+ }
+
+ pBIOSInfo->IsSecondary = pVia->IsSecondary;
+ pBIOSInfo->HasSecondary = pVia->HasSecondary;
+
+ for (i = 0; i < 0xFF; i++) {
+ pBIOSInfo->TVRegs[i] = pVia->SavedReg.TVRegs[i];
+ }
+}
+
+
+static void VIAPostFindMode(VIAPtr pVia, ScrnInfoPtr pScrn, DisplayModePtr pMode)
+{
+ VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo;
+
+ pVia->ModeReg.mode = pBIOSInfo->mode;
+ pVia->ModeReg.resMode = pBIOSInfo->resMode;
+ pVia->ModeReg.refresh = pBIOSInfo->refresh;
+ pVia->ModeReg.offsetWidthByQWord = pBIOSInfo->offsetWidthByQWord;
+ pVia->ModeReg.countWidthByQWord = pBIOSInfo->countWidthByQWord;
+
+ pScrn->frameX1 = pBIOSInfo->frameX1;
+ pScrn->frameY1 = pBIOSInfo->frameY1;
+ pMode->HDisplay = pBIOSInfo->HDisplay;
+ pMode->VDisplay = pBIOSInfo->VDisplay;
+
+}
+
+
+static Bool VIAModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode)
+{
+ vgaHWPtr hwp = VGAHWPTR(pScrn);
+ VIAPtr pVia = VIAPTR(pScrn);
+ VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo;
+ VIARegPtr new = &pVia->ModeReg;
+ vgaRegPtr vganew = &hwp->ModeReg;
+ /* DDUPDATEOVERLAY UpdateOverlay; */
+
+ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIAModeInit\n"));
+
+
+ if (!vgaHWInit(pScrn, mode)) {
+ vgaHWBlankScreen(pScrn, TRUE);
+ return FALSE;
+ }
+
+ pScrn->vtSema = TRUE;
+
+ VIABIOSInit(pVia, pScrn, mode);
+
+ if (!VIAFindModeUseBIOSTable(pBIOSInfo)) {
+ vgaHWBlankScreen(pScrn, TRUE);
+ VIAFreeRec(pScrn);
+ return FALSE;
+ }
+
+ VIAPostFindMode(pVia, pScrn, mode);
+
+ /* FIXME - need DRI lock for this bit - see i810 */
+ /* do it! */
+ VIAWriteMode(pScrn, vganew, new);
+
+ /* pass graphic info to via_v4l kernel module */
+ /* Coz mode changes, some member in pVia->graphicInfo need to modify */
+ if (VIA_SERIES(pVia->Chipset) && !pVia->IsSecondary)
+ {
+ viaFillGraphicInfo(pScrn);
+
+ DBG_DD(ErrorF("SWOV: VIAVidSet2DInfo\n"));
+
+ /* Save MCLK value*/
+ VGAOUT8(0x3C4, 0x16); pVia->swov.Save_3C4_16 = VGAIN8(0x3C5);
+ DBG_DD(ErrorF(" 3c4.16 : %08x \n",VGAIN8(0x3C5)));
+ VGAOUT8(0x3C4, 0x17); pVia->swov.Save_3C4_17 = VGAIN8(0x3C5);
+ DBG_DD(ErrorF(" 3c4.17 : %08x \n",VGAIN8(0x3C5)));
+ VGAOUT8(0x3C4, 0x18); pVia->swov.Save_3C4_18 = VGAIN8(0x3C5);
+ DBG_DD(ErrorF(" 3c4.18 : %08x \n",VGAIN8(0x3C5)));
+ }
+ VIAAdjustFrame(pScrn->scrnIndex, pScrn->frameX0, pScrn->frameY0, 0);
+ return TRUE;
+}
+
+
+static Bool VIACloseScreen(int scrnIndex, ScreenPtr pScreen)
+{
+ ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+ vgaHWPtr hwp = VGAHWPTR(pScrn);
+ VIAPtr pVia = VIAPTR(pScrn);
+ vgaRegPtr vgaSavePtr = &hwp->SavedReg;
+ VIARegPtr viaSavePtr = &pVia->SavedReg;
+ CARD32 dwCursorMode;
+
+ DEBUG(xf86DrvMsg(scrnIndex, X_INFO, "VIACloseScreen\n"));
+
+ /* Is the display currently visible ? */
+ if(pScrn->vtSema)
+ {
+ /* Wait Hardware Engine idle to exit graphical mode */
+ WaitIdle();
+
+ /* Patch for normal log out and restart X, 3D application will hang */
+ VIAWriteMode(pScrn, vgaSavePtr, viaSavePtr);
+
+ if (!pVia->IsSecondary) {
+ /* Turn off all video activities */
+ viaExitVideo(pScrn);
+ /* Diable Hardware Cursor */
+ dwCursorMode = VIAGETREG(VIA_REG_CURSOR_MODE);
+ VIASETREG(VIA_REG_CURSOR_MODE, dwCursorMode & 0xFFFFFFFE);
+ }
+
+ if (pVia->VQEnable) {
+ /* if we use VQ, disable it before we exit */
+ VIASETREG(0x43c, 0x00fe0000);
+ VIASETREG(0x440, 0x00000004);
+ }
+ }
+ if (pVia->AccelInfoRec) {
+ XAADestroyInfoRec(pVia->AccelInfoRec);
+ pVia->AccelInfoRec = NULL;
+ }
+ if (pVia->CursorInfoRec) {
+ xf86DestroyCursorInfoRec(pVia->CursorInfoRec);
+ pVia->CursorInfoRec = NULL;
+ }
+ if (pVia->ShadowPtr) {
+ xfree(pVia->ShadowPtr);
+ pVia->ShadowPtr = NULL;
+ }
+ if (pVia->DGAModes) {
+ xfree(pVia->DGAModes);
+ pVia->DGAModes = NULL;
+ }
+ if(pVia->pInt10) {
+ xf86FreeInt10(pVia->pInt10);
+ pVia->pInt10 = NULL;
+ }
+
+ if (pScrn->vtSema) {
+ VIAWriteMode(pScrn, vgaSavePtr, viaSavePtr);
+ vgaHWLock(hwp);
+ VIAUnmapMem(pScrn);
+ }
+ pScrn->vtSema = FALSE;
+ pScreen->CloseScreen = pVia->CloseScreen;
+ return (*pScreen->CloseScreen)(scrnIndex, pScreen);
+}
+
+/*
+ * This only gets called when a screen is being deleted. It does not
+ * get called routinely at the end of a server generation.
+ */
+static void VIAFreeScreen(int scrnIndex, int flags)
+{
+ DEBUG(xf86DrvMsg(scrnIndex, X_INFO, "VIAFreeScreen\n"));
+ if (xf86LoaderCheckSymbol("vgaHWFreeHWRec"))
+ vgaHWFreeHWRec(xf86Screens[scrnIndex]);
+ VIAFreeRec(xf86Screens[scrnIndex]);
+}
+
+static Bool VIASaveScreen(ScreenPtr pScreen, int mode)
+{
+ return vgaHWSaveScreen(pScreen, mode);
+}
+
+
+void VIAAdjustFrame(int scrnIndex, int x, int y, int flags)
+{
+ ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+ vgaHWPtr hwp = VGAHWPTR(pScrn);
+ VIAPtr pVia = VIAPTR(pScrn);
+ int Base, tmp;
+ int vgaCRIndex, vgaCRReg, vgaIOBase;
+ DDLOCK ddLock;
+ LPDDLOCK lpddLock = &ddLock;
+ DDUPDATEOVERLAY UpdateOverlay;
+ ADJUSTFRAME AdjustFrame;
+
+ DEBUG(xf86DrvMsg(scrnIndex, X_INFO, "VIAAdjustFrame\n"));
+ vgaIOBase = hwp->IOBase;
+ vgaCRIndex = vgaIOBase + 4;
+ vgaCRReg = vgaIOBase + 5;
+
+ Base = (y * pScrn->displayWidth + x) * (pScrn->bitsPerPixel / 8);
+
+ /* now program the start address registers */
+ if (pVia->IsSecondary) {
+ Base = (Base + pScrn->fbOffset) >> 3;
+ VGAOUT8(vgaCRIndex, 0x62);
+ tmp = VGAIN8(vgaCRReg) & 0x01;
+ tmp |= (Base & 0x7F) << 1;
+ VGAOUT8(vgaCRReg, tmp);
+ VGAOUT8(vgaCRIndex, 0x63);
+ VGAOUT8(vgaCRReg, ((Base & 0x7F80) >> 7));
+ VGAOUT8(vgaCRIndex, 0x64);
+ VGAOUT8(vgaCRReg, ((Base & 0x7F8000) >> 15));
+ }
+ else {
+ Base = Base >> 1;
+ VGAOUT16(vgaCRIndex, (Base & 0x00ff00) | 0x0c);
+ VGAOUT16(vgaCRIndex, ((Base & 0x00ff) << 8) | 0x0d);
+ VGAOUT16(vgaCRIndex, ((Base & 0xff0000) >> 8) | 0x34);
+ }
+
+ /* Pass Panning (x, y) info to V4L */
+ AdjustFrame.x = x;
+ AdjustFrame.y = y;
+
+ VIAVidAdjustFrame(pScrn,&AdjustFrame);
+
+ /* Check if HW mpeg engine active */
+ if (pVia->Video.VideoStatus & SW_VIDEO_ON) /* SW video case */
+ {
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG,
+ " Call SW MPEG UpdateOverlay at panning mode.\n");
+
+ ddLock.dwFourCC = FOURCC_YUY2;
+
+ VIAVidLockSurface(pScrn, &ddLock);
+
+ UpdateOverlay.dwFlags = DDOVER_SHOW | DDOVER_KEYDEST;
+ UpdateOverlay.dwColorSpaceLowValue = VIAGETREG(0x220);
+ UpdateOverlay.rSrc.left = 0;
+ UpdateOverlay.rSrc.top = 0;
+ UpdateOverlay.rSrc.right = 720;
+ UpdateOverlay.rSrc.bottom = 480;
+
+ UpdateOverlay.rDest.left = (int) lpddLock->SWDevice.gdwSWDstLeft;
+ UpdateOverlay.rDest.top = (int) lpddLock->SWDevice.gdwSWDstTop;
+ UpdateOverlay.rDest.right = UpdateOverlay.rDest.left + lpddLock->SWDevice.gdwSWDstWidth;
+ UpdateOverlay.rDest.bottom = UpdateOverlay.rDest.top + lpddLock->SWDevice.gdwSWDstHeight;
+
+ VIAVidUpdateOverlay(pScrn, &UpdateOverlay);
+ }
+ else if (VIAGETREG(0x310) & 0x1) /* capture 0 (TV0) case */
+ {
+ ddLock.dwFourCC = FOURCC_TV0;
+
+ VIAVidLockSurface(pScrn, &ddLock);
+ }
+
+ if (VIAGETREG(0x354) & 0x1) /* capture 1 (TV1) case */
+ {
+ ddLock.dwFourCC = FOURCC_TV1;
+
+ VIAVidLockSurface(pScrn, &ddLock);
+ }
+
+ return;
+}
+
+
+Bool VIASwitchMode(int scrnIndex, DisplayModePtr mode, int flags)
+{
+ ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
+ VIAPtr pVia = VIAPTR(pScrn);
+
+ DEBUG(xf86DrvMsg(scrnIndex, X_INFO, "VIASwitchMode\n"));
+ /* Wait Hardware Engine idle to switch graphicd mode */
+ WaitIdle();
+
+ if (pVia->VQEnable) {
+ /* if we use VQ, disable it before we exit */
+ VIASETREG(0x43c, 0x00fe0000);
+ VIASETREG(0x440, 0x00000004);
+ }
+
+ return VIAModeInit(xf86Screens[scrnIndex], mode);
+}
+
+
+void VIAEnableMMIO(ScrnInfoPtr pScrn)
+{
+ vgaHWPtr hwp = VGAHWPTR(pScrn);
+ VIAPtr pVia = VIAPTR(pScrn);
+ unsigned char val;
+
+ if (xf86IsPrimaryPci(pVia->PciInfo)) {
+ /* If we are primary card, we still use std vga port. If we use
+ * MMIO, system will hang in vgaHWSave when our card used in
+ * PLE and KLE (integrated Trident MVP4)
+ */
+ vgaHWSetStdFuncs(hwp);
+ }
+ else {
+ vgaHWSetMmioFuncs(hwp, pVia->MapBase, 0x8000);
+ }
+
+ val = VGAIN8(0x3c3);
+ VGAOUT8(0x3c3, val | 0x01);
+ val = VGAIN8(VGA_MISC_OUT_R);
+ VGAOUT8(VGA_MISC_OUT_W, val | 0x01);
+
+ /* Unlock Extended IO Space */
+ VGAOUT8(0x3c4, 0x10);
+ VGAOUT8(0x3c5, 0x01);
+
+ /* Enable MMIO */
+ if(!pVia->IsSecondary) {
+ VGAOUT8(0x3c4, 0x1a);
+ val = VGAIN8(0x3c5);
+ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "primary val = %x\n", val));
+ VGAOUT8(0x3c5, val | 0x68);
+ }
+ else {
+ VGAOUT8(0x3c4, 0x1a);
+ val = VGAIN8(0x3c5);
+ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "secondary val = %x\n", val));
+ VGAOUT8(0x3c5, val | 0x38);
+ }
+
+ return;
+}
+
+
+void VIADisableMMIO(ScrnInfoPtr pScrn)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ unsigned char val;
+
+ VGAOUT8(0x3c4, 0x1a);
+ val = VGAIN8(0x3c5);
+ VGAOUT8(0x3c5, val & 0x97);
+
+ return;
+}
+
+
+void VIALoadPalette(ScrnInfoPtr pScrn, int numColors, int *indicies,
+ LOCO *colors, VisualPtr pVisual)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ int i, index;
+ int sr1a, sr1b, cr67, cr6a;
+
+ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIALoadPalette\n"));
+
+ if (pScrn->bitsPerPixel != 8)
+ return;
+ VGAOUT8(0x3C4, 0x1A);
+ sr1a = VGAIN8(0x3C5);
+ VGAOUT8(0x3C4, 0x1B);
+ sr1b = VGAIN8(0x3C5);
+ VGAOUT8(0x3D4, 0x67);
+ cr67 = VGAIN8(0x3D5);
+ VGAOUT8(0x3D4, 0x6A);
+ cr6a = VGAIN8(0x3D5);
+
+ if (pVia->IsSecondary) {
+ VGAOUT8(0x3C4, 0x1A);
+ VGAOUT8(0x3C5, sr1a | 0x01);
+ VGAOUT8(0x3C4, 0x1B);
+ VGAOUT8(0x3C5, sr1b | 0x80);
+ VGAOUT8(0x3D4, 0x67);
+ VGAOUT8(0x3D5, cr67 & 0x3F);
+ VGAOUT8(0x3D4, 0x6A);
+ VGAOUT8(0x3D5, cr6a | 0xC0);
+ }
+
+ for (i = 0; i < numColors; i++) {
+ index = indicies[i];
+ VGAOUT8(0x3c8, index);
+ VGAOUT8(0x3c9, colors[index].red);
+ VGAOUT8(0x3c9, colors[index].green);
+ VGAOUT8(0x3c9, colors[index].blue);
+ }
+
+ if (pVia->IsSecondary) {
+ VGAOUT8(0x3C4, 0x1A);
+ VGAOUT8(0x3C5, sr1a);
+ VGAOUT8(0x3C4, 0x1B);
+ VGAOUT8(0x3C5, sr1b);
+ VGAOUT8(0x3D4, 0x67);
+ VGAOUT8(0x3D5, cr67);
+ VGAOUT8(0x3D4, 0x6A);
+ VGAOUT8(0x3D5, cr6a);
+
+ /* Screen 0 palette was changed by mode setting of Screen 1,
+ * so load again */
+ for (i = 0; i < numColors; i++) {
+ index = indicies[i];
+ VGAOUT8(0x3c8, index);
+ VGAOUT8(0x3c9, colors[index].red);
+ VGAOUT8(0x3c9, colors[index].green);
+ VGAOUT8(0x3c9, colors[index].blue);
+ }
+
+ }
+
+}
+
+
+static void VIADPMS(ScrnInfoPtr pScrn, int mode, int flags)
+{
+ vgaHWPtr hwp = VGAHWPTR(pScrn);
+ VIAPtr pVia = VIAPTR(pScrn);
+ VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo;
+ int vgaCRIndex, vgaCRReg;
+ CARD8 val;
+
+ I2CDevPtr dev;
+ unsigned char W_Buffer[2];
+
+ vgaCRIndex = hwp->IOBase + 4;
+ vgaCRReg = hwp->IOBase + 5;
+
+ /* Clear DPMS setting */
+ VGAOUT8(vgaCRIndex, 0x36);
+ val = VGAIN8(vgaCRReg);
+ val &= 0xCF;
+ /* Turn Off CRT, if user doesn't want crt on */
+ if (!pVia->IsSecondary && !(pBIOSInfo->ActiveDevice & VIA_DEVICE_CRT1)) {
+ val |= 0x30;
+ }
+
+ switch (mode) {
+ case DPMSModeOn:
+ if (pBIOSInfo->ActiveDevice & (VIA_DEVICE_DFP | VIA_DEVICE_LCD)) {
+ /* Enable LCD */
+ VIAEnableLCD(pBIOSInfo);
+ }
+
+ if (pBIOSInfo->ActiveDevice & VIA_DEVICE_TV) {
+ dev = xf86CreateI2CDevRec();
+ dev->DevName = "TV";
+ dev->SlaveAddr = pBIOSInfo->TVI2CAdd;
+ dev->pI2CBus = pBIOSInfo->I2C_Port2;
+ if (xf86I2CDevInit(dev)) {
+ switch (pBIOSInfo->TVEncoder) {
+ case VIA_TV2PLUS:
+ case VIA_TV3:
+ case VIA_VT1622A:
+ W_Buffer[0] = 0x0E;
+ W_Buffer[1] = 0x0;
+ xf86I2CWriteRead(dev, W_Buffer,2, NULL,0);
+ break;
+ case VIA_VT1623:
+ VIAGPIOI2C_Initial(pBIOSInfo, 0x40);
+ VIAGPIOI2C_Write(pBIOSInfo, 0x0E, 0);
+ break;
+ case VIA_CH7019:
+ W_Buffer[0] = 0x49;
+ W_Buffer[1] = 0x20;
+ xf86I2CWriteRead(dev, W_Buffer,2, NULL,0);
+ /*W_Buffer[0] = 0x1E;
+ W_Buffer[1] = 0xD0;
+ xf86I2CWriteRead(dev, W_Buffer,2, NULL,0);*/
+ break;
+ case VIA_SAA7108:
+ W_Buffer[0] = 0x2D;
+ switch (pBIOSInfo->TVOutput) {
+ case TVOUTPUT_COMPOSITE:
+ case TVOUTPUT_SVIDEO:
+ W_Buffer[1] = 0xB4;
+ break;
+ case TVOUTPUT_RGB:
+ W_Buffer[1] = 0;
+ break;
+ case TVOUTPUT_YCBCR:
+ W_Buffer[1] = 0x84;
+ break;
+ default:
+ W_Buffer[1] = 0x08;
+ break;
+ }
+ xf86I2CWriteRead(dev, W_Buffer,2, NULL,0);
+ break;
+ default:
+ break;
+ }
+ xf86DestroyI2CDevRec(dev,TRUE);
+ }
+ else
+ xf86DestroyI2CDevRec(dev,TRUE);
+ }
+ VGAOUT8(vgaCRIndex, 0x36);
+ VGAOUT8(vgaCRReg, val);
+ break;
+ case DPMSModeStandby:
+ case DPMSModeSuspend:
+ case DPMSModeOff:
+ if (pBIOSInfo->ActiveDevice & (VIA_DEVICE_DFP | VIA_DEVICE_LCD)) {
+ VIADisableLCD(pBIOSInfo);
+ }
+ if (pBIOSInfo->ActiveDevice & VIA_DEVICE_TV) {
+ dev = xf86CreateI2CDevRec();
+ dev->DevName = "TV";
+ dev->SlaveAddr = pBIOSInfo->TVI2CAdd;
+ dev->pI2CBus = pBIOSInfo->I2C_Port2;
+ if (xf86I2CDevInit(dev)) {
+ switch (pBIOSInfo->TVEncoder) {
+ case VIA_TV2PLUS:
+ W_Buffer[0] = 0x0E;
+ W_Buffer[1] = 0x03;
+ xf86I2CWriteRead(dev, W_Buffer,2, NULL,0);
+ break;
+ case VIA_TV3:
+ case VIA_VT1622A:
+ W_Buffer[0] = 0x0E;
+ W_Buffer[1] = 0x0F;
+ xf86I2CWriteRead(dev, W_Buffer,2, NULL,0);
+ break;
+ case VIA_VT1623:
+ VIAGPIOI2C_Initial(pBIOSInfo, 0x40);
+ VIAGPIOI2C_Write(pBIOSInfo, 0x0E, 0x0F);
+ break;
+ case VIA_CH7019:
+ W_Buffer[0] = 0x49;
+ W_Buffer[1] = 0x3E;
+ xf86I2CWriteRead(dev, W_Buffer,2, NULL,0);
+ W_Buffer[0] = 0x1E;
+ W_Buffer[1] = 0xD0;
+ xf86I2CWriteRead(dev, W_Buffer,2, NULL,0);
+ break;
+ case VIA_SAA7108:
+ W_Buffer[0] = 0x2D;
+ W_Buffer[1] = 0x08;
+ xf86I2CWriteRead(dev, W_Buffer,2, NULL,0);
+ break;
+ default:
+ break;
+ }
+ xf86DestroyI2CDevRec(dev,TRUE);
+ }
+ else
+ xf86DestroyI2CDevRec(dev,TRUE);
+ }
+
+ val |= 0x30;
+ VGAOUT8(vgaCRIndex, 0x36);
+ VGAOUT8(vgaCRReg, val);
+ break;
+ default:
+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Invalid DPMS mode %d\n", mode);
+ break;
+ }
+ return;
+}
+
+
+int VIAGetMemSize()
+{
+ /* TODO: Do memory sizing */
+
+ /* Default 16MB */
+ return (16 << 10);
+}
+
+/* Active Device according connected status */
+Bool VIADeviceSelection(ScrnInfoPtr pScrn)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ VIABIOSInfoPtr pBIOSInfo = pVia->pBIOSInfo;
+ /*unsigned int i;
+ unsigned char numDevice;*/
+ pBIOSInfo->SAMM = FALSE;
+
+ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIADeviceSelection\n"));
+ pBIOSInfo->DefaultActiveDevice = VIABIOS_GetActiveDevice(pScrn);
+ /* if XF86Config Option "ActiveDevice" hasn't set, active device according CMOS */
+ if (!pBIOSInfo->ActiveDevice) {
+ pBIOSInfo->ActiveDevice = pBIOSInfo->DefaultActiveDevice;
+ }
+ /* if XF86Config-4 set SAMM, and only active one device, active device according CMOS */
+ else if (pVia->IsSecondary && (pBIOSInfo->ActiveDevice == VIA_DEVICE_CRT1 ||
+ pBIOSInfo->ActiveDevice == VIA_DEVICE_LCD ||
+ pBIOSInfo->ActiveDevice == VIA_DEVICE_TV ||
+ pBIOSInfo->ActiveDevice == VIA_DEVICE_DFP ||
+ pBIOSInfo->ActiveDevice == VIA_DEVICE_CRT2)){
+ pBIOSInfo->ActiveDevice = VIABIOS_GetActiveDevice(pScrn);
+ }
+ if (((pBIOSInfo->ActiveDevice & pBIOSInfo->ConnectedDevice) == pBIOSInfo->ActiveDevice)
+ && (pVia->IsSecondary)) {
+ pBIOSInfo->SAMM = TRUE;
+ }
+ pBIOSInfo->ActiveDevice &= pBIOSInfo->ConnectedDevice;
+ pVia->ActiveDevice = pBIOSInfo->ActiveDevice;
+
+ /*if (pBIOSInfo->ActiveDevice & VIA_DEVICE_LCD) {
+ pBIOSInfo->DVIEncoder = VIA_VT3191;
+ numDevice = 0x02;
+ i = VIABIOS_GetDisplayDeviceInfo(pScrn, &numDevice);
+ if (i != 0xFFFF) {
+ if (pBIOSInfo->PanelSize == VIA_PANEL_INVALID)
+ pBIOSInfo->PanelSize = numDevice;
+ }*/
+
+ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Connected Device is %d\n", pBIOSInfo->ConnectedDevice));
+ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Active Device is %d\n", pBIOSInfo->ActiveDevice));
+
+ return TRUE;
+}
+
+/* SAMM device dispatch */
+Bool VIADeviceDispatch(ScrnInfoPtr pScrn)
+{
+ DevUnion* pPriv = xf86GetEntityPrivate(pScrn->entityList[0], gVIAEntityIndex);
+ VIAEntPtr pVIAEnt = pPriv->ptr;
+ VIAPtr pVia1 = VIAPTR(pScrn), pVia0 = VIAPTR(pVIAEnt->pPrimaryScrn);
+ VIABIOSInfoPtr pBIOSInfo1 = pVia1->pBIOSInfo, pBIOSInfo0 = pVia0->pBIOSInfo;
+
+ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "VIADeviceDispatch\n"));
+ pBIOSInfo0->SAMM = TRUE;
+ switch (pBIOSInfo1->ActiveDevice) {
+ case (VIA_DEVICE_CRT1 | VIA_DEVICE_LCD) : /* If CRT + LCD, CRT is IGA1 */
+ pBIOSInfo0->ActiveDevice = VIA_DEVICE_CRT1;
+ pBIOSInfo1->ActiveDevice = VIA_DEVICE_LCD;
+ break;
+ case (VIA_DEVICE_CRT1 | VIA_DEVICE_TV) : /* If CRT + TV, CRT is IGA1 */
+ pBIOSInfo0->ActiveDevice = VIA_DEVICE_CRT1;
+ pBIOSInfo1->ActiveDevice = VIA_DEVICE_TV;
+ break;
+ case (VIA_DEVICE_CRT1 | VIA_DEVICE_DFP) : /* If CRT + DFP, CRT is IGA1 */
+ pBIOSInfo0->ActiveDevice = VIA_DEVICE_CRT1;
+ pBIOSInfo1->ActiveDevice = VIA_DEVICE_DFP;
+ break;
+ case (VIA_DEVICE_LCD | VIA_DEVICE_TV) : /* If LCD + TV, TV is IGA1 */
+ pBIOSInfo0->ActiveDevice = VIA_DEVICE_TV;
+ pBIOSInfo1->ActiveDevice = VIA_DEVICE_LCD;
+ break;
+ case (VIA_DEVICE_LCD | VIA_DEVICE_DFP) : /* If LCD + DFP, DFP is IGA1 */
+ pBIOSInfo0->ActiveDevice = VIA_DEVICE_DFP;
+ pBIOSInfo1->ActiveDevice = VIA_DEVICE_LCD;
+ break;
+ case (VIA_DEVICE_TV | VIA_DEVICE_DFP) : /* If TV + DFP, TV is IGA1 */
+ pBIOSInfo0->ActiveDevice = VIA_DEVICE_TV;
+ pBIOSInfo1->ActiveDevice = VIA_DEVICE_DFP;
+ break;
+ default :
+ return FALSE;
+ break;
+ }
+ DEBUG(xf86DrvMsg(pVIAEnt->pPrimaryScrn->scrnIndex, X_INFO, "Active Device is %d\n", pBIOSInfo0->ActiveDevice));
+ DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Active Device is %d\n", pBIOSInfo1->ActiveDevice));
+ return TRUE;
+}
+
+#ifdef XF86DRI
+void
+VIAInitialize3DEngine(ScrnInfoPtr pScrn)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ int i;
+
+ if (!pVia->sharedData->b3DRegsInitialized)
+ {
+
+ VIASETREG(0x43C, 0x00010000);
+
+ for (i = 0; i <= 0x7D; i++)
+ {
+ VIASETREG(0x440, (CARD32) i << 24);
+ }
+
+ VIASETREG(0x43C, 0x00020000);
+
+ for (i = 0; i <= 0x94; i++)
+ {
+ VIASETREG(0x440, (CARD32) i << 24);
+ }
+
+ VIASETREG(0x440, 0x82400000);
+
+ VIASETREG(0x43C, 0x01020000);
+
+
+ for (i = 0; i <= 0x94; i++)
+ {
+ VIASETREG(0x440, (CARD32) i << 24);
+ }
+
+ VIASETREG(0x440, 0x82400000);
+ VIASETREG(0x43C, 0xfe020000);
+
+ for (i = 0; i <= 0x03; i++)
+ {
+ VIASETREG(0x440, (CARD32) i << 24);
+ }
+
+ VIASETREG(0x43C, 0x00030000);
+
+ for (i = 0; i <= 0xff; i++)
+ {
+ VIASETREG(0x440, 0);
+ }
+ VIASETREG(0x43C, 0x00100000);
+ VIASETREG(0x440, 0x00333004);
+ VIASETREG(0x440, 0x10000002);
+ VIASETREG(0x440, 0x60000000);
+ VIASETREG(0x440, 0x61000000);
+ VIASETREG(0x440, 0x62000000);
+ VIASETREG(0x440, 0x63000000);
+ VIASETREG(0x440, 0x64000000);
+
+ VIASETREG(0x43C, 0x00fe0000);
+
+ if (pVia->ChipRev >= 3 )
+ VIASETREG(0x440,0x40008c0f);
+ else
+ VIASETREG(0x440,0x4000800f);
+
+ VIASETREG(0x440,0x44000000);
+ VIASETREG(0x440,0x45080C04);
+ VIASETREG(0x440,0x46800408);
+ VIASETREG(0x440,0x50000000);
+ VIASETREG(0x440,0x51000000);
+ VIASETREG(0x440,0x52000000);
+ VIASETREG(0x440,0x53000000);
+
+ pVia->sharedData->b3DRegsInitialized = 1;
+ xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+ "3D Register has been initilized !\n");
+ }
+
+ VIASETREG(0x43C,0x00fe0000);
+ VIASETREG(0x440,0x08000001);
+ VIASETREG(0x440,0x0A000183);
+ VIASETREG(0x440,0x0B00019F);
+ VIASETREG(0x440,0x0C00018B);
+ VIASETREG(0x440,0x0D00019B);
+ VIASETREG(0x440,0x0E000000);
+ VIASETREG(0x440,0x0F000000);
+ VIASETREG(0x440,0x10000000);
+ VIASETREG(0x440,0x11000000);
+ VIASETREG(0x440,0x20000000);
+}
+#endif
diff --git a/src/via_driver.h b/src/via_driver.h
new file mode 100644
index 0000000..9bb1a71
--- /dev/null
+++ b/src/via_driver.h
@@ -0,0 +1,427 @@
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/via/via_driver.h,v 1.7 2003/11/06 18:38:11 tsi Exp $ */
+/*
+ * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
+ * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sub license,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ * VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef _VIA_DRIVER_H_
+#define _VIA_DRIVER_H_ 1
+
+/*#define DEBUG_PRINT*/
+#ifdef DEBUG_PRINT
+#define DEBUG(x) x
+#else
+#define DEBUG(x)
+#endif
+
+#include "vgaHW.h"
+#include "xf86.h"
+#include "xf86Resources.h"
+#include "xf86_ansic.h"
+#include "xf86Pci.h"
+#include "xf86PciInfo.h"
+#include "xf86_OSproc.h"
+#include "compiler.h"
+#include "xf86Cursor.h"
+#include "mipointer.h"
+#include "micmap.h"
+
+#define USE_FB
+#ifdef USE_FB
+#include "fb.h"
+#else
+#include "cfb.h"
+#include "cfb16.h"
+#include "cfb32.h"
+#endif
+
+#include "xf86cmap.h"
+#include "vbe.h"
+#include "xaa.h"
+
+#include "via_regs.h"
+#include "via_bios.h"
+#include "via_gpioi2c.h"
+#include "via_priv.h"
+#include "ginfo.h"
+
+#ifdef XF86DRI
+#define _XF86DRI_SERVER_
+#include "sarea.h"
+#include "dri.h"
+#include "GL/glxint.h"
+#include "via_dri.h"
+#endif
+
+#define DRIVER_NAME "via"
+#define DRIVER_VERSION "4.1.0"
+#define VERSION_MAJOR 4
+#define VERSION_MINOR 1
+#define PATCHLEVEL 30
+#define VIA_VERSION ((VERSION_MAJOR<<24) | (VERSION_MINOR<<16) | PATCHLEVEL)
+
+#define VGAIN8(addr) MMIO_IN8(pVia->MapBase+0x8000, addr)
+#define VGAIN16(addr) MMIO_IN16(pVia->MapBase+0x8000, addr)
+#define VGAIN(addr) MMIO_IN32(pVia->MapBase+0x8000, addr)
+
+#define VGAOUT8(addr, val) MMIO_OUT8(pVia->MapBase+0x8000, addr, val)
+#define VGAOUT16(addr, val) MMIO_OUT16(pVia->MapBase+0x8000, addr, val)
+#define VGAOUT(addr, val) MMIO_OUT32(pVia->MapBase+0x8000, addr, val)
+
+#define INREG(addr) MMIO_IN32(pVia->MapBase, addr)
+#define OUTREG(addr, val) MMIO_OUT32(pVia->MapBase, addr, val)
+#define INREG16(addr) MMIO_IN16(pVia->MapBase, addr)
+#define OUTREG16(addr, val) MMIO_OUT16(pVia->MapBase, addr, val)
+
+#define VIA_PIXMAP_CACHE_SIZE (256 * 1024)
+#define VIA_CURSOR_SIZE (4 * 1024)
+#define VIA_VQ_SIZE (256 * 1024)
+
+typedef struct {
+ unsigned int mode, refresh, resMode;
+ int countWidthByQWord;
+ int offsetWidthByQWord;
+ unsigned char SR08, SR0A, SR0F;
+
+ /* extended Sequencer registers */
+ unsigned char SR10, SR11, SR12, SR13,SR14,SR15,SR16;
+ unsigned char SR17, SR18, SR19, SR1A,SR1B,SR1C,SR1D,SR1E;
+ unsigned char SR1F, SR20, SR21, SR22,SR23,SR24,SR25,SR26;
+ unsigned char SR27, SR28, SR29, SR2A,SR2B,SR2C,SR2D,SR2E;
+ unsigned char SR2F, SR30, SR31, SR32,SR33,SR34,SR40,SR41;
+ unsigned char SR42, SR43, SR44, SR45,SR46,SR47;
+
+ unsigned char Clock;
+
+ /* extended CRTC registers */
+ unsigned char CR13, CR30, CR31, CR32, CR33, CR34, CR35, CR36;
+ unsigned char CR37, CR38, CR39, CR3A, CR40, CR41, CR42, CR43;
+ unsigned char CR44, CR45, CR46, CR47, CR48, CR49, CR4A;
+ unsigned char CRTCRegs[68];
+ unsigned char TVRegs[0xFF];
+/* unsigned char LCDRegs[0x40];*/
+} VIARegRec, *VIARegPtr;
+
+/*Definition for CapturePortID*/
+#define PORT0 0 /* Capture Port 0*/
+#define PORT1 1 /* Capture Port 1*/
+
+typedef struct __viaVideoControl {
+ CARD16 PORTID;
+ CARD32 dwCompose;
+ CARD32 dwHighQVDO;
+ CARD32 VideoStatus;
+ CARD32 dwAction;
+#define ACTION_SET_PORTID 0
+#define ACTION_SET_COMPOSE 1
+#define ACTION_SET_HQV 2
+#define ACTION_SET_BOB 4
+#define ACTION_SET_VIDEOSTATUS 8
+ Bool Cap0OnScreen1; /* True: Capture0 On Screen1 ; False: Capture0 On Screen0 */
+ Bool Cap1OnScreen1; /* True: Capture1 On Screen1 ; False: Capture1 On Screen0 */
+ Bool MPEGOnScreen1; /* True: MPEG On Screen1 ; False: MPEG On Screen0 */
+} VIAVideoControlRec, VIAVideoControlPtr;
+
+/*For Video HW Difference */
+#define VIA_REVISION_CLEC0 0x10
+#define VIA_REVISION_CLEC1 0x11
+#define VIA_REVISION_CLECX 0x10
+
+#define VID_HWDIFF_TRUE 0x00000001
+#define VID_HWDIFF_FALSE 0x00000000
+
+/*
+ * Video HW Difference Structure
+ */
+
+typedef struct __VIAHWRec
+{
+ unsigned long dwThreeHQVBuffer; /*Use Three HQV Buffers*/
+ unsigned long dwV3SrcHeightSetting; /*Set Video Source Width and Height*/
+ unsigned long dwSupportExtendFIFO; /*Support Extand FIFO*/
+ unsigned long dwHQVFetchByteUnit; /*HQV Fetch Count unit is byte*/
+ unsigned long dwHQVInitPatch; /*Initialize HQV Engine 2 times*/
+ unsigned long dwSupportV3Gamma; /*Support V3 Gamma */
+ unsigned long dwUpdFlip; /*Set HQV3D0[15] to flip video*/
+ unsigned long dwHQVDisablePatch; /*Change Video Engine Clock setting for HQV disable bug*/
+ unsigned long dwSUBFlip; /*Set HQV3D0[15] to flip video for sub-picture blending*/
+ unsigned long dwNeedV3Prefetch; /*V3 pre-fetch function for K8*/
+ unsigned long dwNeedV4Prefetch; /*V4 pre-fetch function for K8*/
+ unsigned long dwUseSystemMemory; /*Use system memory for DXVA compressed data buffers*/
+ unsigned long dwExpandVerPatch; /*Patch video HW bug in expand SIM mode or same display path*/
+ unsigned long dwExpandVerHorPatch; /*Patch video HW bug in expand SAMM mode or same display path*/
+ unsigned long dwV3ExpireNumTune; /*Change V3 expire number setting for V3 bandwidth issue*/
+ unsigned long dwV3FIFOThresholdTune; /*Change V3 FIFO, Threshold and Pre-threshold setting for V3 bandwidth issue*/
+ unsigned long dwCheckHQVFIFOEmpty; /*HW Flip path, need to check HQV FIFO status */
+ unsigned long dwUseMPEGAGP; /*Use MPEG AGP function*/
+ unsigned long dwV3FIFOPatch; /*For CLE V3 FIFO Bug (srcWidth <= 8)*/
+ unsigned long dwSupportTwoColorKey; /*Support two color key*/
+ unsigned long dwCxColorSpace; /*CLE_Cx ColorSpace*/
+} VIAHWRec;
+
+/*Wait Function Structure and Flag*/
+typedef struct _WaitHWINFO
+{
+ unsigned char* pjVideo; /*MMIO Address Info*/
+ unsigned long dwVideoFlag; /*Video Flag*/
+}WaitHWINFO, * LPWaitHWINFO;
+
+/*
+ * varables that need to be shared among different screens.
+ */
+typedef struct {
+ Bool b3DRegsInitialized;
+} ViaSharedRec, *ViaSharedPtr;
+
+
+typedef struct _VIA {
+ VIARegRec SavedReg;
+ VIARegRec ModeReg;
+ xf86CursorInfoPtr CursorInfoRec;
+ Bool ModeStructInit;
+ int Bpp, Bpl, ScissB;
+ unsigned PlaneMask;
+
+ unsigned long videoRambytes;
+ int videoRamKbytes;
+ int FBFreeStart;
+ int FBFreeEnd;
+ int CursorStart;
+ int VQStart;
+ int VQEnd;
+
+ /* These are physical addresses. */
+ unsigned long FrameBufferBase;
+ unsigned long MmioBase;
+
+ /* These are linear addresses. */
+ unsigned char* MapBase;
+ unsigned char* VidMapBase;
+ unsigned char* BltBase;
+ unsigned char* MapBaseDense;
+ unsigned char* FBBase;
+ unsigned char* FBStart;
+
+ Bool PrimaryVidMapped;
+ int dacSpeedBpp;
+ int minClock, maxClock;
+ int MCLK, REFCLK, LCDclk;
+ double refclk_fact;
+
+ /* Here are all the Options */
+ Bool VQEnable;
+ Bool pci_burst;
+ Bool NoPCIRetry;
+ Bool hwcursor;
+ Bool NoAccel;
+ Bool shadowFB;
+ Bool NoDDCValue;
+ int rotate;
+
+ CloseScreenProcPtr CloseScreen;
+ pciVideoPtr PciInfo;
+ PCITAG PciTag;
+ int Chipset;
+ int ChipId;
+ int ChipRev;
+ vbeInfoPtr pVbe;
+ int EntityIndex;
+
+ /* Support for shadowFB and rotation */
+ unsigned char* ShadowPtr;
+ int ShadowPitch;
+ void (*PointerMoved)(int index, int x, int y);
+
+ /* Support for XAA acceleration */
+ XAAInfoRecPtr AccelInfoRec;
+ xRectangle Rect;
+ CARD32 SavedCmd;
+ CARD32 SavedFgColor;
+ CARD32 SavedBgColor;
+ CARD32 SavedPattern0;
+ CARD32 SavedPattern1;
+ CARD32 SavedPatternAddr;
+
+ /* Support for Int10 processing */
+ xf86Int10InfoPtr pInt10;
+
+ /* BIOS Info Ptr */
+ VIABIOSInfoPtr pBIOSInfo;
+
+ /* Support for DGA */
+ int numDGAModes;
+ DGAModePtr DGAModes;
+ Bool DGAactive;
+ int DGAViewportStatus;
+ int DGAOldDisplayWidth;
+ int DGAOldBitsPerPixel;
+ int DGAOldDepth;
+ /* The various wait handlers. */
+ int (*myWaitIdle)(struct _VIA*);
+
+ /* I2C & DDC */
+ I2CBusPtr I2C_Port1;
+ I2CBusPtr I2C_Port2;
+ xf86MonPtr DDC1;
+ xf86MonPtr DDC2;
+
+ /* MHS */
+ Bool IsSecondary;
+ Bool HasSecondary;
+
+ /* Capture de-interlace Mode */
+ CARD32 Cap0_Deinterlace;
+ CARD32 Cap1_Deinterlace;
+
+ Bool Cap0_FieldSwap;
+
+#ifdef XF86DRI
+ Bool directRenderingEnabled;
+ DRIInfoPtr pDRIInfo;
+ int drmFD;
+ int numVisualConfigs;
+ __GLXvisualConfig* pVisualConfigs;
+ VIAConfigPrivPtr pVisualConfigsPriv;
+ unsigned long agpHandle;
+ unsigned long registerHandle;
+ unsigned long agpAddr;
+ unsigned char *agpBase;
+ unsigned int agpSize;
+ Bool IsPCI;
+ Bool drixinerama;
+#endif
+ unsigned char ActiveDevice; /* if SAMM, non-equal pBIOSInfo->ActiveDevice */
+ unsigned char *CursorImage;
+ CARD32 CursorFG;
+ CARD32 CursorBG;
+ CARD32 CursorMC;
+
+ /* Video */
+ swovRec swov;
+ VIAVideoControlRec Video;
+ VIAHWRec ViaHW;
+ unsigned long dwV1, dwV3;
+ unsigned long OverlaySupported;
+ unsigned long dwFrameNum;
+
+ pointer VidReg;
+ unsigned long gdwVidRegCounter;
+ unsigned long old_dwUseExtendedFIFO;
+
+ /* Global 2D state block - needs to slowly die */
+ ViaGraphicRec graphicInfo;
+ ViaSharedPtr sharedData;
+} VIARec, *VIAPtr;
+
+
+typedef struct
+{
+ Bool IsDRIEnabled;
+
+ Bool HasSecondary;
+ Bool BypassSecondary;
+ /*These two registers are used to make sure the CRTC2 is
+ retored before CRTC_EXT, otherwise it could lead to blank screen.*/
+ Bool IsSecondaryRestored;
+ Bool RestorePrimary;
+
+ ScrnInfoPtr pSecondaryScrn;
+ ScrnInfoPtr pPrimaryScrn;
+}VIAEntRec, *VIAEntPtr;
+
+
+/* Shortcuts. These depend on a local symbol "pVia". */
+
+#define WaitIdle() pVia->myWaitIdle(pVia)
+#define VIAPTR(p) ((VIAPtr)((p)->driverPrivate))
+
+
+/* Prototypes. */
+void VIAAdjustFrame(int scrnIndex, int y, int x, int flags);
+Bool VIASwitchMode(int scrnIndex, DisplayModePtr mode, int flags);
+
+/* In HwDiff.c */
+void VIAvfInitHWDiff(VIAPtr pVia );
+
+/* In via_cursor.c. */
+Bool VIAHWCursorInit(ScreenPtr pScreen);
+void VIAShowCursor(ScrnInfoPtr);
+void VIAHideCursor(ScrnInfoPtr);
+
+
+/* In via_accel.c. */
+Bool VIAInitAccel(ScreenPtr);
+void VIAInitialize2DEngine(ScrnInfoPtr);
+void VIAAccelSync(ScrnInfoPtr);
+
+
+/* In via_shadow.c */
+void VIAPointerMoved(int index, int x, int y);
+void VIARefreshArea(ScrnInfoPtr pScrn, int num, BoxPtr pbox);
+void VIARefreshArea8(ScrnInfoPtr pScrn, int num, BoxPtr pbox);
+void VIARefreshArea16(ScrnInfoPtr pScrn, int num, BoxPtr pbox);
+void VIARefreshArea24(ScrnInfoPtr pScrn, int num, BoxPtr pbox);
+void VIARefreshArea32(ScrnInfoPtr pScrn, int num, BoxPtr pbox);
+
+
+/* In via_bios.c */
+void VIAEnableLCD(VIABIOSInfoPtr pBIOSInfo);
+void VIADisableLCD(VIABIOSInfoPtr pBIOSInfo);
+
+/* In via_dga.c */
+Bool VIADGAInit(ScreenPtr);
+
+/* In via_i2c.c */
+Bool VIAI2CInit(ScrnInfoPtr pScrn);
+
+/* In via_gpioi2c.c */
+Bool VIAGPIOI2C_Write(VIABIOSInfoPtr pBIOSInfo, int SubAddress, CARD8 Data);
+Bool VIAGPIOI2C_Read(VIABIOSInfoPtr pBIOSInfo, int SubAddress, CARD8 *Buffer, int BufferLen);
+Bool VIAGPIOI2C_ReadByte(VIABIOSInfoPtr pBIOSInfo, int SubAddress, CARD8 *Buffer);
+Bool VIAGPIOI2C_Initial(VIABIOSInfoPtr pBIOSInfo, CARD8 SlaveDevice);
+
+/*In via_video.c*/
+void viaInitVideo(ScreenPtr pScreen);
+void viaExitVideo(ScrnInfoPtr pScrn);
+void viaResetVideo(ScrnInfoPtr pScrn);
+void viaSaveVideo(ScrnInfoPtr pScrn);
+void viaRestoreVideo(ScrnInfoPtr pScrn);
+
+/*In via_utility.c */
+void VIAXVUtilityProc(ScrnInfoPtr pScrn, unsigned char* buf);
+Bool VIAUTGetInfo(VIABIOSInfoPtr pBIOSInfo);
+Bool VIALoadUserSetting(VIABIOSInfoPtr pBIOSInfo);
+Bool VIALoadGammaSetting(VIABIOSInfoPtr pBIOSInfo);
+Bool VIARestoreUserSetting(VIABIOSInfoPtr pBIOSInfo);
+void VIAUTRemoveRestartFlag(VIABIOSInfoPtr pBIOSInfo);
+
+/* in via_overlay.c */
+unsigned long viaOverlayHQVCalcZoomHeight (VIAPtr pVia, unsigned long srcHeight,unsigned long dstHeight,
+ unsigned long * lpzoomCtl, unsigned long * lpminiCtl, unsigned long * lpHQVfilterCtl, unsigned long * lpHQVminiCtl,unsigned long * lpHQVzoomflag);
+unsigned long viaOverlayGetSrcStartAddress (VIAPtr pVia, unsigned long dwVideoFlag,RECTL rSrc,RECTL rDest, unsigned long dwSrcPitch,LPDDPIXELFORMAT lpDPF,unsigned long * lpHQVoffset );
+void viaOverlayGetDisplayCount(VIAPtr pVIa, unsigned long dwVideoFlag,LPDDPIXELFORMAT lpDPF,unsigned long dwSrcWidth,unsigned long * lpDisplayCountW);
+unsigned long viaOverlayHQVCalcZoomWidth(VIAPtr pVia, unsigned long dwVideoFlag, unsigned long srcWidth , unsigned long dstWidth,
+ unsigned long * lpzoomCtl, unsigned long * lpminiCtl, unsigned long * lpHQVfilterCtl, unsigned long * lpHQVminiCtl,unsigned long * lpHQVzoomflag);
+void viaOverlayGetV1Format(VIAPtr pVia, unsigned long dwVideoFlag,LPDDPIXELFORMAT lpDPF, unsigned long * lpdwVidCtl,unsigned long * lpdwHQVCtl );
+void viaOverlayGetV3Format(VIAPtr pVia, unsigned long dwVideoFlag,LPDDPIXELFORMAT lpDPF, unsigned long * lpdwVidCtl,unsigned long * lpdwHQVCtl );
+
+#endif /* _VIA_DRIVER_H_ */
diff --git a/src/via_i2c.c b/src/via_i2c.c
new file mode 100644
index 0000000..94fa7c6
--- /dev/null
+++ b/src/via_i2c.c
@@ -0,0 +1,413 @@
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/via/via_i2c.c,v 1.3 2003/08/27 15:16:09 tsi Exp $ */
+/*
+ * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
+ * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sub license,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ * VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+
+#include "xf86.h"
+#include "xf86_OSproc.h"
+#include "xf86_ansic.h"
+#include "compiler.h"
+
+#include "xf86Pci.h"
+#include "xf86PciInfo.h"
+
+#include "vgaHW.h"
+
+#include "via_driver.h"
+
+/*
+ * DDC2 support requires DDC_SDA_MASK and DDC_SCL_MASK
+ */
+#define DDC_SDA_READ_MASK (1 << 2)
+#define DDC_SCL_READ_MASK (1 << 3)
+#define DDC_SDA_WRITE_MASK (1 << 4)
+#define DDC_SCL_WRITE_MASK (1 << 5)
+
+/* I2C Function for DDC2 */
+static void
+VIAI2C1PutBits(I2CBusPtr b, int clock, int data)
+{
+ CARD8 reg;
+
+ outb(0x3c4, 0x26);
+ reg = inb(0x3c5);
+ reg &= 0xF0;
+ reg |= 0x01; /* Enable DDC */
+
+ if (clock)
+ reg |= DDC_SCL_WRITE_MASK;
+ else
+ reg &= ~DDC_SCL_WRITE_MASK;
+
+ if (data)
+ reg |= DDC_SDA_WRITE_MASK;
+ else
+ reg &= ~DDC_SDA_WRITE_MASK;
+
+ outb(0x3c4, 0x26);
+ outb(0x3c5, reg);
+}
+
+static void
+VIAI2C1GetBits(I2CBusPtr b, int *clock, int *data)
+{
+ CARD8 reg;
+
+ outb(0x3c4, 0x26);
+ reg = inb(0x3c5);
+
+ *clock = (reg & DDC_SCL_READ_MASK) != 0;
+ *data = (reg & DDC_SDA_READ_MASK) != 0;
+}
+
+/* Function for DVI DDC2 */
+static void
+VIAI2C2PutBits(I2CBusPtr b, int clock, int data)
+{
+ CARD8 reg;
+
+ outb(0x3c4, 0x31);
+ reg = inb(0x3c5);
+ reg &= 0xF0;
+ reg |= 0x01; /* Enable DDC */
+
+ if (clock)
+ reg |= DDC_SCL_WRITE_MASK;
+ else
+ reg &= ~DDC_SCL_WRITE_MASK;
+
+ if (data)
+ reg |= DDC_SDA_WRITE_MASK;
+ else
+ reg &= ~DDC_SDA_WRITE_MASK;
+
+ outb(0x3c4, 0x31);
+ outb(0x3c5, reg);
+}
+
+static void
+VIAI2C2GetBits(I2CBusPtr b, int *clock, int *data)
+{
+ CARD8 reg;
+
+ outb(0x3c4, 0x31);
+ reg = inb(0x3c5);
+
+ *clock = (reg & DDC_SCL_READ_MASK) != 0;
+ *data = (reg & DDC_SDA_READ_MASK) != 0;
+}
+
+
+Bool
+VIAI2CInit(ScrnInfoPtr pScrn)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ I2CBusPtr I2CPtr1, I2CPtr2;
+
+ I2CPtr1 = xf86CreateI2CBusRec();
+ I2CPtr2 = xf86CreateI2CBusRec();
+ if (!I2CPtr1 || !I2CPtr2)
+ return FALSE;
+
+ I2CPtr1->BusName = "I2C bus 1";
+ I2CPtr1->scrnIndex = pScrn->scrnIndex;
+ I2CPtr1->I2CPutBits = VIAI2C1PutBits;
+ I2CPtr1->I2CGetBits = VIAI2C1GetBits;
+
+ I2CPtr2->BusName = "I2C bus 2";
+ I2CPtr2->scrnIndex = pScrn->scrnIndex;
+ I2CPtr2->I2CPutBits = VIAI2C2PutBits;
+ I2CPtr2->I2CGetBits = VIAI2C2GetBits;
+
+ if (!xf86I2CBusInit(I2CPtr1) || !xf86I2CBusInit(I2CPtr2))
+ return FALSE;
+
+ pVia->I2C_Port1 = I2CPtr1;
+ pVia->I2C_Port2 = I2CPtr2;
+
+ return TRUE;
+}
+
+#ifdef _MY_I2C_
+/*------------------------------------------------
+ I2C Module
+ ------------------------------------------------*/
+
+static int pcI2CIndex = 0x3c4;
+static int pcI2Cport = 0x3c5;
+/*
+static int pcIndexReg = 0x31;
+static int pcSDAReadBack= 0x31;
+*/
+
+static int gSDA=0;
+
+
+#if 0
+static void I2CUDelay(int usec)
+{
+ long b_secs, b_usecs;
+ long a_secs, a_usecs;
+ long d_secs, d_usecs;
+ long diff;
+
+ if (usec > 0) {
+ xf86getsecs(&b_secs, &b_usecs);
+ do {
+ /* It would be nice to use {xf86}usleep,
+ * but usleep (1) takes >10000 usec !
+ */
+ xf86getsecs(&a_secs, &a_usecs);
+ d_secs = (a_secs - b_secs);
+ d_usecs = (a_usecs - b_usecs);
+ diff = d_secs*1000000 + d_usecs;
+ } while (diff>0 && diff< (usec + 1));
+ }
+}
+#endif
+
+/* Enable I2C */
+void I2C_Enable(int pcIndexReg)
+{
+ int tempI2Cdata, Reg3C4H;
+
+ /* save 3c4H */
+ Reg3C4H = inb(pcI2CIndex);
+
+ outb(pcI2CIndex, pcIndexReg);
+ tempI2Cdata = inb(pcI2Cport);
+
+ tempI2Cdata |= 0x01; /* Bit 0:I2C Serial Port Enable */
+ outb(pcI2Cport, tempI2Cdata);
+
+ /* restore 3c4H */
+ outb(pcI2CIndex, Reg3C4H);
+
+} /* I2C_enable */
+
+
+
+/* reverse data */
+long I2C_reverk(register unsigned data)
+{
+ unsigned long rdata = 0;
+ int i;
+
+ for ( i = 0; i < 16 ; i++ ) {
+ rdata |= ( data & 1 ); /* strip off LSBIT */
+ data >>= 1;
+ rdata <<= 1;
+ }
+ return(rdata >> 1);
+
+} /* I2C_reverk */
+
+
+
+/* get an acknowledge back from a slave device */
+int I2C_ack_pc(int pcIndexReg)
+{
+ int ack;
+
+ I2C_regwrit_pc(pcIndexReg, I2C_SDA, 1);
+ I2C_regwrit_pc(pcIndexReg, I2C_SCL, HICLK);
+ ack = I2C_regread_pc(pcIndexReg, I2C_SDA);
+ I2C_regwrit_pc(pcIndexReg, I2C_SCL, LOCLK);
+
+ return (ack);
+
+} /* I2C_ack_pc */
+
+
+
+/* send a start condition */
+void I2C_start_pc(int pcIndexReg)
+{
+ I2C_regwrit_pc(pcIndexReg, I2C_SDA, 1);
+ I2C_regwrit_pc(pcIndexReg, I2C_SCL, HICLK);
+ I2C_regwrit_pc(pcIndexReg, I2C_SDA, 0);
+ I2C_regwrit_pc(pcIndexReg, I2C_SCL, LOCLK);
+
+} /* I2C_start_pc */
+
+
+
+/* send a stop condition */
+void I2C_stop_pc(int pcIndexReg)
+{
+ I2C_regwrit_pc(pcIndexReg, I2C_SDA, 0);
+ I2C_regwrit_pc(pcIndexReg, I2C_SCL, HICLK);
+ I2C_regwrit_pc(pcIndexReg, I2C_SDA, 1);
+
+} /* I2C_stop_pc */
+
+
+
+/* write I2C data */
+int I2C_wdata_pc(int pcIndexReg, unsigned type , unsigned data)
+{
+ int i;
+
+ data = (unsigned int)(I2C_reverk(data) >> 8); /* MSBIT goes out first */
+
+ if ( type == I2C_ADR )
+ I2C_start_pc(pcIndexReg);
+
+ for ( i = 0; i < 8; data >>=1, i++ ) {
+ I2C_regwrit_pc(pcIndexReg, I2C_SDA, data);
+ I2C_regwrit_pc(pcIndexReg, I2C_SCL, HICLK);
+ I2C_regwrit_pc(pcIndexReg, I2C_SCL, LOCLK);
+ }
+
+ return I2C_ack_pc(pcIndexReg); /* wait for acknowledge */
+
+} /* I2C_wdata_pc */
+
+
+/* Write SCL/SDA bit */
+void I2C_regwrit_pc(int pcIndexReg, unsigned type, unsigned data )
+{
+ int tempI2Cdata, Reg3C4H;
+
+ /* save 3c4H */
+ Reg3C4H = inb(pcI2CIndex);
+
+ outb(pcI2CIndex, pcIndexReg);
+ tempI2Cdata = inb(pcI2Cport);
+
+
+ switch (type) {
+ case I2C_SCL:
+ tempI2Cdata &= 0xcf; /* bit5 SPCLCK, bit4 SDATA */
+ tempI2Cdata |= gSDA | ( (data & 1)<< 5);
+ outb(pcI2Cport, tempI2Cdata);
+ break;
+
+ case I2C_SDA:
+ tempI2Cdata &= 0xef;
+ tempI2Cdata |= ( (data & 1) << 4);
+ outb(pcI2Cport, tempI2Cdata);
+
+ gSDA = 0;
+ gSDA = ( (data & 1) << 4);
+
+ break;
+ }
+
+ /* restore 3c4H */
+ outb(pcI2CIndex, Reg3C4H);
+
+} /* I2C_regwrit_pc */
+
+
+
+/* Read SDA bit */
+int I2C_regread_pc(int pcIndexReg, unsigned type)
+{
+ int temp=0,Reg3C4H;
+
+ /* save 3c4H */
+ Reg3C4H = inb(pcI2CIndex);
+
+ switch (type) {
+ case I2C_SCL :
+ break;
+
+ case I2C_SDA:
+ outb(pcI2CIndex, pcIndexReg);
+ temp = ( inb(pcI2Cport) >> 2) & 0x01;
+ break;
+ }
+
+ /* restore 3c4H */
+ outb(pcI2CIndex, Reg3C4H);
+
+ return(temp);
+
+} /* I2C_regread_pc */
+
+
+void I2C_wdata(int pcIndexReg, int addr, int subAddr, int data)
+{
+ int ack = 1;
+
+ ack = I2C_wdata_pc(pcIndexReg, I2C_ADR, addr);
+ ack = I2C_wdata_pc(pcIndexReg, I2C_DAT, subAddr);
+ ack = I2C_wdata_pc(pcIndexReg, I2C_DAT, data);
+
+ I2C_stop_pc(pcIndexReg);
+}
+
+
+int I2C_rdata(int pcIndexReg, int addr, unsigned subAddr)
+{
+ int StatusData =0, data, i;
+
+ I2C_wdata_pc(pcIndexReg, I2C_ADR, addr);
+ I2C_wdata_pc(pcIndexReg, I2C_DAT, subAddr);
+ I2C_stop_pc(pcIndexReg);
+
+ I2C_wdata_pc(pcIndexReg, I2C_ADR, addr+1);
+
+
+ /* pull SDA High */
+ I2C_regwrit_pc(pcIndexReg, I2C_SDA, 1);
+
+ /* Read Register */
+ for ( i = 0; i <= 7 ; i++ ) {
+
+ I2C_regwrit_pc(pcIndexReg, I2C_SCL, HICLK);
+ data = I2C_regread_pc(pcIndexReg, I2C_SDA);
+ I2C_regwrit_pc(pcIndexReg, I2C_SCL, LOCLK);
+
+ data &= 0x01; /* Keep SDA only */
+ StatusData <<= 1;
+ StatusData |= data;
+ }
+
+ I2C_stop_pc(pcIndexReg);
+ return(StatusData);
+}
+
+Bool I2C_Write(int pcIndexReg, int addr, unsigned char *WriteBuffer, int nWrite)
+{
+ int s = 0;
+ int ack = 1;
+
+ ack = I2C_wdata_pc(pcIndexReg, I2C_ADR, addr);
+
+ if (nWrite > 0) {
+ for (; nWrite > 0; WriteBuffer++, nWrite--)
+ ack = I2C_wdata_pc(pcIndexReg, I2C_DAT, *WriteBuffer);
+ s++;
+ }
+ else {
+ I2C_stop_pc(pcIndexReg);
+ return (s);
+ }
+
+ I2C_stop_pc(pcIndexReg);
+ return (s);
+}
+#endif
diff --git a/src/via_mode.h b/src/via_mode.h
new file mode 100644
index 0000000..323c9d0
--- /dev/null
+++ b/src/via_mode.h
@@ -0,0 +1,870 @@
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/via/via_mode.h,v 1.3 2003/08/27 15:16:09 tsi Exp $ */
+/*
+ * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
+ * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sub license,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ * VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef _VIA_MODE_H_
+#define _VIA_MODE_H_ 1
+
+static const unsigned short BIOSVer = 0X10;
+
+static char BIOSDate[] =
+ { 0X30, 0X34, 0X2F, 0X31, 0X35, 0X2F, 0X30, 0X33, 0 };
+
+static const unsigned short NumModes = 97;
+
+static const int NumPowerOn = 2;
+
+static const int NumPowerOff = 2;
+
+static VIAModeEntry Modes[] = {
+ { 0, 0, 4, 0, 0, 0, 0, { 40, 24, 8, 0X800, { 0, 0X9, 0X3, 0, 0X2 }, 0X63, { 0X2D, 0X27, 0X28, 0X90, 0X2B, 0XA0, 0XBF, 0X1F, 0, 0XC7, 0X6, 0X7, 0, 0, 0, 0, 0X9C, 0X6E, 0X8F, 0X14, 0X1F, 0X96, 0XB9, 0XA3, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X10, 0X11, 0X12, 0X13, 0X14, 0X15, 0X16, 0X17, 0X8, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X10, 0XE, 0, 0XFF } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 } },
+ { 0, 0, 4, 0X1, 0, 0, 0, { 40, 24, 8, 0X800, { 0, 0X9, 0X3, 0, 0X2 }, 0X63, { 0X2D, 0X27, 0X28, 0X90, 0X2B, 0XA0, 0XBF, 0X1F, 0, 0XC7, 0X6, 0X7, 0, 0, 0, 0, 0X9C, 0X6E, 0X8F, 0X14, 0X1F, 0X96, 0XB9, 0XA3, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X10, 0X11, 0X12, 0X13, 0X14, 0X15, 0X16, 0X17, 0X8, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X10, 0XE, 0, 0XFF } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 } },
+ { 0, 0, 4, 0X2, 0, 0, 0, { 80, 24, 8, 0X1000, { 0, 0X1, 0X3, 0, 0X2 }, 0X63, { 0X5F, 0X4F, 0X50, 0X82, 0X55, 0X81, 0XBF, 0X1F, 0, 0XC7, 0X6, 0X7, 0, 0, 0, 0, 0X9C, 0X6E, 0X8F, 0X28, 0X1F, 0X96, 0XB9, 0XA3, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X10, 0X11, 0X12, 0X13, 0X14, 0X15, 0X16, 0X17, 0X8, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X10, 0XE, 0, 0XFF } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 } },
+ { 0, 0, 4, 0X3, 0, 0, 0, { 80, 24, 8, 0X1000, { 0, 0X1, 0X3, 0, 0X2 }, 0X63, { 0X5F, 0X4F, 0X50, 0X82, 0X55, 0X81, 0XBF, 0X1F, 0, 0XC7, 0X6, 0X7, 0, 0, 0, 0, 0X9C, 0X6E, 0X8F, 0X28, 0X1F, 0X96, 0XB9, 0XA3, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X10, 0X11, 0X12, 0X13, 0X14, 0X15, 0X16, 0X17, 0X8, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X10, 0XE, 0, 0XFF } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 } },
+ { 0, 0, 2, 0X4, 0, 0, 0, { 40, 24, 8, 0X4000, { 0, 0X9, 0X3, 0, 0X2 }, 0X63, { 0X2D, 0X27, 0X28, 0X90, 0X2B, 0X80, 0XBF, 0X1F, 0, 0XC1, 0, 0, 0, 0, 0, 0, 0X9C, 0X6E, 0X8F, 0X14, 0, 0X96, 0XB9, 0XA2, 0XFF }, { 0, 0X13, 0X15, 0X17, 0X2, 0X4, 0X6, 0X7, 0X10, 0X11, 0X12, 0X13, 0X14, 0X15, 0X16, 0X17, 0X1, 0, 0X3, 0 }, { 0, 0, 0, 0, 0, 0X30, 0XF, 0, 0XFF } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 } },
+ { 0, 0, 2, 0X5, 0, 0, 0, { 40, 24, 8, 0X4000, { 0, 0X9, 0X3, 0, 0X2 }, 0X63, { 0X2D, 0X27, 0X28, 0X90, 0X2B, 0X80, 0XBF, 0X1F, 0, 0XC1, 0, 0, 0, 0, 0, 0, 0X9C, 0X6E, 0X8F, 0X14, 0, 0X96, 0XB9, 0XA2, 0XFF }, { 0, 0X13, 0X15, 0X17, 0X2, 0X4, 0X6, 0X7, 0X10, 0X11, 0X12, 0X13, 0X14, 0X15, 0X16, 0X17, 0X1, 0, 0X3, 0 }, { 0, 0, 0, 0, 0, 0X30, 0XF, 0, 0XFF } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 } },
+ { 0, 0, 1, 0X6, 0, 0, 0, { 80, 24, 8, 0X4000, { 0, 0X1, 0X1, 0, 0X6 }, 0X63, { 0X5F, 0X4F, 0X50, 0X82, 0X54, 0X80, 0XBF, 0X1F, 0, 0XC1, 0, 0, 0, 0, 0, 0, 0X9C, 0X6E, 0X8F, 0X28, 0, 0X96, 0XB9, 0XC2, 0XFF }, { 0, 0X17, 0X17, 0X17, 0X17, 0X17, 0X17, 0X17, 0X17, 0X17, 0X17, 0X17, 0X17, 0X17, 0X17, 0X17, 0X1, 0, 0X1, 0 }, { 0, 0, 0, 0, 0, 0, 0XD, 0, 0XFF } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 } },
+ { 0, 0, 0, 0X7, 0, 0, 0, { 80, 24, 14, 0X1000, { 0, 0, 0X3, 0, 0X2 }, 0XA6, { 0X5F, 0X4F, 0X50, 0X82, 0X55, 0X81, 0XBF, 0X1F, 0, 0X4D, 0XB, 0XC, 0, 0, 0, 0, 0X83, 0X65, 0X5D, 0X28, 0XD, 0X63, 0XBA, 0XA3, 0XFF }, { 0, 0X8, 0X8, 0X8, 0X8, 0X8, 0X8, 0X8, 0X10, 0X18, 0X18, 0X18, 0X18, 0X18, 0X18, 0X18, 0XE, 0, 0XF, 0X8 }, { 0, 0, 0, 0, 0, 0X10, 0XA, 0, 0XFF } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 } },
+ { 0, 0, 4, 0X8, 0, 0, 0, { 80, 24, 16, 0X7D00, { 0, 0X1, 0XF, 0, 0X6 }, 0X63, { 0X5F, 0X4F, 0X50, 0X82, 0X55, 0X81, 0XBF, 0X1F, 0, 0X40, 0, 0, 0, 0, 0, 0, 0X9C, 0X6E, 0X8F, 0X28, 0X1F, 0X96, 0XB9, 0XE3, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X14, 0X7, 0X38, 0X39, 0X3A, 0X3B, 0X3C, 0X3D, 0X3E, 0X3F, 0X1, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0, 0X5, 0XF, 0XFF } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 } },
+ { 0, 0, 4, 0X6A, 16, 0X432E, 0XC459, { 100, 74, 8, 0XFA00, { 0, 0X1, 0XF, 0, 0X6 }, 0XF, { 0X7B, 0X63, 0X64, 0X9E, 0X69, 0X92, 0X6F, 0XF0, 0, 0X60, 0, 0, 0, 0, 0, 0, 0X58, 0X6A, 0X57, 0X32, 0, 0X58, 0X6F, 0XE3, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X14, 0X7, 0X38, 0X39, 0X3A, 0X3B, 0X3C, 0X3D, 0X3E, 0X3F, 0X1, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X20, 0X6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 } },
+ { 0, 0, 4, 0X6B, 0, 0, 0, { 100, 74, 8, 0XFA00, { 0, 0X1, 0XF, 0, 0X6 }, 0XF, { 0X7B, 0X63, 0X64, 0X9E, 0X69, 0X92, 0X6F, 0XF0, 0, 0X60, 0, 0, 0, 0, 0, 0, 0X58, 0X6A, 0X57, 0X32, 0, 0X58, 0X6F, 0XE3, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X14, 0X7, 0X38, 0X39, 0X3A, 0X3B, 0X3C, 0X3D, 0X3E, 0X3F, 0X1, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0, 0X5, 0XF, 0XFF } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 } },
+ { 0, 0, 4, 0X6C, 0, 0, 0, { 100, 74, 8, 0XFA00, { 0, 0X1, 0XF, 0, 0X6 }, 0XF, { 0X7B, 0X63, 0X64, 0X9E, 0X69, 0X92, 0X6F, 0XF0, 0, 0X60, 0, 0, 0, 0, 0, 0, 0X58, 0X6A, 0X57, 0X32, 0, 0X58, 0X6F, 0XE3, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X14, 0X7, 0X38, 0X39, 0X3A, 0X3B, 0X3C, 0X3D, 0X3E, 0X3F, 0X1, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0, 0X5, 0XF, 0XFF } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 } },
+ { 0, 0, 4, 0X6D, 0, 0, 0, { 100, 74, 8, 0XFA00, { 0, 0X1, 0XF, 0, 0X6 }, 0XF, { 0X7B, 0X63, 0X64, 0X9E, 0X69, 0X92, 0X6F, 0XF0, 0, 0X60, 0, 0, 0, 0, 0, 0, 0X58, 0X6A, 0X57, 0X32, 0, 0X58, 0X6F, 0XE3, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X14, 0X7, 0X38, 0X39, 0X3A, 0X3B, 0X3C, 0X3D, 0X3E, 0X3F, 0X1, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0, 0X5, 0XF, 0XFF } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 } },
+ { 0, 0, 4, 0XD, 0, 0, 0, { 40, 24, 8, 0X2000, { 0, 0X9, 0XF, 0, 0X6 }, 0X63, { 0X2D, 0X27, 0X28, 0X90, 0X2B, 0X80, 0XBF, 0X1F, 0, 0XC0, 0, 0, 0, 0, 0, 0, 0X9C, 0X6E, 0X8F, 0X14, 0, 0X96, 0XB9, 0XE3, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X10, 0X11, 0X12, 0X13, 0X14, 0X15, 0X16, 0X17, 0X1, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0, 0X5, 0XF, 0XFF } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 } },
+ { 0, 0, 4, 0XE, 0, 0, 0, { 80, 24, 8, 0X4000, { 0, 0X1, 0XF, 0, 0X6 }, 0X63, { 0X5F, 0X4F, 0X50, 0X82, 0X54, 0X80, 0XBF, 0X1F, 0, 0XC0, 0, 0, 0, 0, 0, 0, 0X9C, 0X6E, 0X8F, 0X28, 0, 0X96, 0XB9, 0XE3, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X10, 0X11, 0X12, 0X13, 0X14, 0X15, 0X16, 0X17, 0X1, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0, 0X5, 0XF, 0XFF } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 } },
+ { 0, 0, 0, 0XF, 0, 0, 0, { 80, 24, 14, 0X8000, { 0, 0X1, 0XF, 0, 0X6 }, 0XA2, { 0X5F, 0X4F, 0X50, 0X82, 0X54, 0X80, 0XBF, 0X1F, 0, 0X40, 0, 0, 0, 0, 0, 0, 0X83, 0X65, 0X5D, 0X28, 0XF, 0X63, 0XBA, 0XE3, 0XFF }, { 0, 0X8, 0, 0, 0X18, 0X18, 0, 0, 0, 0X8, 0, 0, 0, 0X18, 0, 0, 0XB, 0, 0X5, 0 }, { 0, 0, 0, 0, 0, 0, 0X5, 0X5, 0XFF } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 } },
+ { 0, 0, 4, 0X10, 0, 0, 0, { 80, 24, 14, 0X8000, { 0, 0X1, 0XF, 0, 0X6 }, 0XA3, { 0X5F, 0X4F, 0X50, 0X82, 0X54, 0X80, 0XBF, 0X1F, 0, 0X40, 0, 0, 0, 0, 0, 0, 0X83, 0X65, 0X5D, 0X28, 0XF, 0X63, 0XBA, 0XE3, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X14, 0X7, 0X38, 0X39, 0X3A, 0X3B, 0X3C, 0X3D, 0X3E, 0X3F, 0X1, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0, 0X5, 0XF, 0XFF } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 } },
+ { 0, 0, 0, 0XF, 0, 0, 0, { 80, 24, 14, 0X8000, { 0, 0X1, 0XF, 0, 0X6 }, 0XA2, { 0X5F, 0X4F, 0X50, 0X82, 0X54, 0X80, 0XBF, 0X1F, 0, 0X40, 0, 0, 0, 0, 0, 0, 0X83, 0X65, 0X5D, 0X28, 0XF, 0X63, 0XBA, 0XE3, 0XFF }, { 0, 0X8, 0, 0, 0X18, 0X18, 0, 0, 0, 0X8, 0, 0, 0, 0X18, 0, 0, 0XB, 0, 0X5, 0 }, { 0, 0, 0, 0, 0, 0, 0X5, 0X5, 0XFF } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 } },
+ { 0, 0, 4, 0X10, 0, 0, 0, { 80, 24, 14, 0X8000, { 0, 0X1, 0XF, 0, 0X6 }, 0XA3, { 0X5F, 0X4F, 0X50, 0X82, 0X54, 0X80, 0XBF, 0X1F, 0, 0X40, 0, 0, 0, 0, 0, 0, 0X83, 0X65, 0X5D, 0X28, 0XF, 0X63, 0XBA, 0XE3, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X14, 0X7, 0X38, 0X39, 0X3A, 0X3B, 0X3C, 0X3D, 0X3E, 0X3F, 0X1, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0, 0X5, 0XF, 0XFF } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 } },
+ { 0, 0, 4, 0, 0, 0, 0, { 40, 24, 14, 0X800, { 0, 0X9, 0X3, 0, 0X2 }, 0XA3, { 0X2D, 0X27, 0X28, 0X90, 0X2B, 0XA0, 0XBF, 0X1F, 0, 0X4D, 0XB, 0XC, 0, 0, 0, 0, 0X83, 0X65, 0X5D, 0X14, 0X1F, 0X63, 0XBA, 0XA3, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X14, 0X7, 0X38, 0X39, 0X3A, 0X3B, 0X3C, 0X3D, 0X3E, 0X3F, 0X8, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X10, 0XE, 0, 0XFF } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 } },
+ { 0, 0, 4, 0X1, 0, 0, 0, { 40, 24, 14, 0X800, { 0, 0X9, 0X3, 0, 0X2 }, 0XA3, { 0X2D, 0X27, 0X28, 0X90, 0X2B, 0XA0, 0XBF, 0X1F, 0, 0X4D, 0XB, 0XC, 0, 0, 0, 0, 0X83, 0X65, 0X5D, 0X14, 0X1F, 0X63, 0XBA, 0XA3, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X14, 0X7, 0X38, 0X39, 0X3A, 0X3B, 0X3C, 0X3D, 0X3E, 0X3F, 0X8, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X10, 0XE, 0, 0XFF } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 } },
+ { 0, 0, 4, 0X2, 0, 0, 0, { 80, 24, 14, 0X1000, { 0, 0X1, 0X3, 0, 0X2 }, 0XA3, { 0X5F, 0X4F, 0X50, 0X82, 0X55, 0X81, 0XBF, 0X1F, 0, 0X4D, 0XB, 0XC, 0, 0, 0, 0, 0X83, 0X65, 0X5D, 0X28, 0X1F, 0X63, 0XBA, 0XA3, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X14, 0X7, 0X38, 0X39, 0X3A, 0X3B, 0X3C, 0X3D, 0X3E, 0X3F, 0X8, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X10, 0XE, 0, 0XFF } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 } },
+ { 0, 0, 4, 0X3, 0, 0, 0, { 80, 24, 14, 0X1000, { 0, 0X1, 0X3, 0, 0X2 }, 0XA3, { 0X5F, 0X4F, 0X50, 0X82, 0X55, 0X81, 0XBF, 0X1F, 0, 0X4D, 0XB, 0XC, 0, 0, 0, 0, 0X83, 0X65, 0X5D, 0X28, 0X1F, 0X63, 0XBA, 0XA3, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X14, 0X7, 0X38, 0X39, 0X3A, 0X3B, 0X3C, 0X3D, 0X3E, 0X3F, 0X8, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X10, 0XE, 0, 0XFF } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 } },
+ { 0, 0, 4, 0, 0, 0, 0, { 40, 24, 16, 0X800, { 0, 0X8, 0X3, 0, 0X2 }, 0X67, { 0X2D, 0X27, 0X28, 0X90, 0X2B, 0XA0, 0XBF, 0X1F, 0, 0X4F, 0XD, 0XE, 0, 0, 0, 0, 0X9C, 0X6E, 0X8F, 0X14, 0X1F, 0X96, 0XB9, 0XA3, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X14, 0X7, 0X38, 0X39, 0X3A, 0X3B, 0X3C, 0X3D, 0X3E, 0X3F, 0XC, 0, 0XF, 0X8 }, { 0, 0, 0, 0, 0, 0X10, 0XE, 0, 0XFF } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 } },
+ { 0, 0, 4, 0X2, 0, 0, 0, { 80, 24, 16, 0X1000, { 0, 0, 0X3, 0, 0X2 }, 0X67, { 0X5F, 0X4F, 0X50, 0X82, 0X55, 0X81, 0XBF, 0X1F, 0, 0X4F, 0XD, 0XE, 0, 0, 0, 0, 0X9C, 0X6E, 0X8F, 0X28, 0X1F, 0X96, 0XB9, 0XA3, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X14, 0X7, 0X38, 0X39, 0X3A, 0X3B, 0X3C, 0X3D, 0X3E, 0X3F, 0XC, 0, 0XF, 0X8 }, { 0, 0, 0, 0, 0, 0X10, 0XE, 0, 0XFF } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 } },
+ { 0, 0, 0, 0X7, 0, 0, 0, { 80, 24, 16, 0X1000, { 0, 0, 0X3, 0, 0X2 }, 0X66, { 0X5F, 0X4F, 0X50, 0X82, 0X55, 0X81, 0XBF, 0X1F, 0, 0X4F, 0XD, 0XE, 0, 0, 0, 0, 0X9C, 0X6E, 0X8F, 0X28, 0XF, 0X96, 0XB9, 0XA3, 0XFF }, { 0, 0X8, 0X8, 0X8, 0X8, 0X8, 0X8, 0X8, 0X10, 0X18, 0X18, 0X18, 0X18, 0X18, 0X18, 0X18, 0XE, 0, 0XF, 0X8 }, { 0, 0, 0, 0, 0, 0X10, 0XA, 0, 0XFF } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 } },
+ { 0, 0, 1, 0X11, 0, 0, 0, { 80, 29, 16, 0XA000, { 0, 0X1, 0XF, 0, 0X6 }, 0XE3, { 0X5F, 0X4F, 0X50, 0X82, 0X54, 0X80, 0XB, 0X3E, 0, 0X40, 0, 0, 0, 0, 0, 0, 0XEA, 0X6C, 0XDF, 0X28, 0, 0XE7, 0X4, 0XC3, 0XFF }, { 0, 0X3F, 0X3F, 0X3F, 0X3F, 0X3F, 0X3F, 0X3F, 0X3F, 0X3F, 0X3F, 0X3F, 0X3F, 0X3F, 0X3F, 0X3F, 0X1, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0, 0X5, 0X1, 0XFF } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 } },
+ { 0, 0, 4, 0X12, 0, 0, 0, { 80, 29, 16, 0XA000, { 0, 0X1, 0XF, 0, 0X6 }, 0XE3, { 0X5F, 0X4F, 0X50, 0X82, 0X54, 0X80, 0XB, 0X3E, 0, 0X40, 0, 0, 0, 0, 0, 0, 0XEA, 0X6C, 0XDF, 0X28, 0, 0XE7, 0X4, 0XE3, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X14, 0X7, 0X38, 0X39, 0X3A, 0X3B, 0X3C, 0X3D, 0X3E, 0X3F, 0X1, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0, 0X5, 0XF, 0XFF } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 } },
+ { 0, 0, 8, 0X13, 0, 0, 0, { 40, 24, 8, 0X2000, { 0, 0X1, 0XF, 0, 0XE }, 0X63, { 0X5F, 0X4F, 0X50, 0X82, 0X54, 0X80, 0XBF, 0X1F, 0, 0X41, 0, 0, 0, 0, 0, 0, 0X9C, 0X6E, 0X8F, 0X28, 0X40, 0X96, 0XB9, 0XA3, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 } },
+ { 0, 0, 4, 0X28, 1, 0X432E, 0X8638, { 80, 59, 8, 0X2580, { 0, 0, 0X3, 0, 0X2 }, 0X67, { 0X5F, 0X4F, 0X50, 0X82, 0X55, 0X9E, 0XB, 0X3E, 0, 0X47, 0X6, 0X7, 0, 0, 0, 0, 0XEA, 0X60, 0XDF, 0X28, 0X1F, 0XE7, 0X9, 0X23, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X14, 0X7, 0X38, 0X39, 0X3A, 0X3B, 0X3C, 0X3D, 0X3E, 0X3F, 0XC, 0, 0XF, 0X8 }, { 0, 0, 0, 0, 0, 0X10, 0XE, 0, 0XFF } }, { { 0XC4, 0XC4, 0XC4, 0XC4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X1A, 0X1C, 0X1D, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0XFD, 0XFF, 0X3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0X58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 4 } },
+ { 0, 0, 4, 0X29, 1, 0X432E, 0XC46E, { 132, 24, 16, 0X19C8, { 0, 0, 0X3, 0, 0X2 }, 0X67, { 0XA7, 0X83, 0X84, 0X82, 0X8E, 0X9B, 0XBF, 0X1F, 0, 0X4F, 0XD, 0XE, 0, 0, 0, 0, 0X9C, 0X6E, 0X8F, 0X42, 0X1F, 0X96, 0XB9, 0X23, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X14, 0X7, 0X38, 0X39, 0X3A, 0X3B, 0X3C, 0X3D, 0X3E, 0X3F, 0XC, 0, 0XF, 0X8 }, { 0, 0, 0, 0, 0, 0X10, 0XE, 0, 0XFF } }, { { 0XC4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 } },
+ { 0, 0, 4, 0X2A, 1, 0X432E, 0XC46E, { 132, 42, 8, 0X2C58, { 0, 0, 0X3, 0, 0X2 }, 0X67, { 0XA7, 0X83, 0X84, 0X82, 0X8E, 0X9B, 0XBF, 0X1F, 0, 0X47, 0X6, 0X7, 0, 0, 0, 0, 0X83, 0X65, 0X57, 0X42, 0X1F, 0X63, 0XBA, 0X23, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X14, 0X7, 0X38, 0X39, 0X3A, 0X3B, 0X3C, 0X3D, 0X3E, 0X3F, 0XC, 0, 0XF, 0X8 }, { 0, 0, 0, 0, 0, 0X10, 0XE, 0, 0XFF } }, { { 0XC4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 } },
+ { 0, 0, 4, 0X2B, 1, 0X432E, 0XC46E, { 132, 49, 8, 0X3390, { 0, 0, 0X3, 0, 0X2 }, 0X67, { 0XA7, 0X83, 0X84, 0X82, 0X8E, 0X9B, 0XBF, 0X1F, 0, 0X47, 0X6, 0X7, 0, 0, 0, 0, 0X9C, 0X6E, 0X8F, 0X42, 0X1F, 0X96, 0XB9, 0X23, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X14, 0X7, 0X38, 0X39, 0X3A, 0X3B, 0X3C, 0X3D, 0X3E, 0X3F, 0XC, 0, 0XF, 0X8 }, { 0, 0, 0, 0, 0, 0X10, 0XE, 0, 0XFF } }, { { 0XC4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 } },
+ { 0, 0, 4, 0X2C, 1, 0X432E, 0XC47F, { 132, 59, 8, 0X3DE0, { 0, 0, 0X3, 0, 0X2 }, 0X67, { 0XA7, 0X83, 0X84, 0X82, 0X8E, 0X9B, 0XB, 0X3E, 0, 0X47, 0X6, 0X7, 0, 0, 0, 0, 0XEA, 0X6C, 0XDF, 0X42, 0X1F, 0XE7, 0X5, 0X23, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X14, 0X7, 0X38, 0X39, 0X3A, 0X3B, 0X3C, 0X3D, 0X3E, 0X3F, 0XC, 0, 0XF, 0X8 }, { 0, 0, 0, 0, 0, 0X10, 0XE, 0, 0XFF } }, { { 0XC4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 } },
+ { 640, 400, 16, 0X2E, 8, 0X432E, 0X86B1, { 80, 24, 16, 0X8000, { 0, 0X1, 0XF, 0, 0XE }, 0X4F, { 0X61, 0X4F, 0X4F, 0X85, 0X53, 0X9B, 0XA3, 0X1F, 0, 0X40, 0X1E, 0, 0, 0, 0, 0, 0X90, 0X63, 0X8F, 0XA0, 0X40, 0X8F, 0XA4, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XB6, 0X26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 } },
+ { 640, 400, 32, 0X2F, 16, 0X432E, 0X86B1, { 80, 24, 16, 0X8000, { 0, 0X1, 0XF, 0, 0XE }, 0X4F, { 0X61, 0X4F, 0X4F, 0X85, 0X53, 0X9B, 0XA3, 0X1F, 0, 0X40, 0X1E, 0, 0, 0, 0, 0, 0X90, 0X63, 0X8F, 0X40, 0X40, 0X8F, 0XA4, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0X35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X27, 0XFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XAE, 0X26, 0X20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 3 } },
+ { 640, 400, 8, 0X30, 4, 0X432E, 0X86B1, { 80, 24, 16, 0X8000, { 0, 0X1, 0XF, 0, 0XE }, 0X4F, { 0X61, 0X4F, 0X4F, 0X85, 0X53, 0X9B, 0XA3, 0X1F, 0, 0X40, 0X1E, 0, 0, 0, 0, 0, 0X90, 0X63, 0X8F, 0X50, 0X40, 0X8F, 0XA4, 0X23, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X22, 0X26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 } },
+ { 640, 480, 8, 0X31, 5, 0X432E, 0XC763, { 80, 29, 16, 0X8000, { 0, 0X1, 0XF, 0, 0XE }, 0XCF, { 0X5F, 0X4F, 0X50, 0X82, 0X52, 0X9E, 0XB, 0X3E, 0, 0X40, 0X1E, 0, 0, 0, 0, 0, 0XE9, 0XB, 0XDF, 0X50, 0X40, 0XE7, 0X4, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X22, 0X26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 } },
+ { 640, 480, 16, 0X33, 10, 0X432E, 0XC763, { 80, 29, 16, 0X8000, { 0, 0X1, 0XF, 0, 0XE }, 0XCF, { 0X5F, 0X4F, 0X50, 0X82, 0X52, 0X9E, 0XB, 0X3E, 0, 0X40, 0X1E, 0, 0, 0, 0, 0, 0XE9, 0XB, 0XDF, 0XA0, 0X40, 0XE7, 0X4, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XB6, 0X26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 } },
+ { 640, 480, 32, 0X34, 20, 0X432E, 0XC763, { 80, 29, 16, 0X8000, { 0, 0X1, 0XF, 0, 0XE }, 0XCF, { 0X5F, 0X4F, 0X50, 0X82, 0X52, 0X9E, 0XB, 0X3E, 0, 0X40, 0X1E, 0, 0, 0, 0, 0, 0XE9, 0XB, 0XDF, 0X40, 0X40, 0XE7, 0X4, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0X35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X27, 0XFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XAE, 0X26, 0X20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 3 } },
+ { 800, 600, 4, 0X35, 16, 0X432E, 0XC459, { 100, 74, 8, 0XFA00, { 0, 0X1, 0XF, 0, 0X6 }, 0XF, { 0X7F, 0X63, 0X63, 0X83, 0X69, 0X19, 0X72, 0XF0, 0, 0X60, 0X1E, 0, 0, 0, 0, 0, 0X58, 0XC, 0X57, 0X32, 0, 0X57, 0X73, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X14, 0X7, 0X38, 0X39, 0X3A, 0X3B, 0X3C, 0X3D, 0X3E, 0X3F, 0X1, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X20, 0X6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 } },
+ { 800, 600, 8, 0X36, 8, 0X432E, 0XC459, { 100, 74, 8, 0XFA00, { 0, 0X1, 0XF, 0X3, 0XE }, 0XF, { 0X7F, 0X63, 0X63, 0X83, 0X69, 0X19, 0X72, 0XF0, 0, 0X60, 0, 0, 0, 0, 0, 0, 0X58, 0XC, 0X57, 0X64, 0, 0X57, 0X73, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X22, 0X6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 } },
+ { 800, 600, 16, 0X38, 16, 0X432E, 0XC459, { 100, 74, 8, 0XFA00, { 0, 0X1, 0XF, 0X3, 0XE }, 0XF, { 0X7F, 0X63, 0X63, 0X83, 0X69, 0X19, 0X72, 0XF0, 0, 0X60, 0X1E, 0, 0, 0, 0, 0, 0X58, 0XC, 0X57, 0XC8, 0, 0X57, 0X73, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XB6, 0X6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 } },
+ { 800, 600, 32, 0X39, 32, 0X432E, 0XC459, { 100, 74, 8, 0XFA00, { 0, 0X1, 0XF, 0X3, 0XE }, 0XF, { 0X7F, 0X63, 0X63, 0X83, 0X69, 0X19, 0X72, 0XF0, 0, 0X60, 0X1E, 0, 0, 0, 0, 0, 0X58, 0XC, 0X57, 0X90, 0, 0X57, 0X73, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0X35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X7, 0XFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XAE, 0X6, 0X20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 3 } },
+ { 1024, 768, 4, 0X3A, 24, 0X432E, 0X86ED, { 128, 47, 16, 0X8000, { 0, 0X1, 0XF, 0, 0X6 }, 0XCF, { 0XA3, 0X7F, 0X7F, 0X87, 0X83, 0X94, 0X24, 0XF5, 0, 0X60, 0X1E, 0, 0, 0, 0, 0, 0X2, 0X8, 0XFF, 0X40, 0, 0XFF, 0X25, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X14, 0X7, 0X38, 0X39, 0X3A, 0X3B, 0X3C, 0X3D, 0X3E, 0X3F, 0X1, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XC4, 0XC4, 0XC4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X16, 0X17, 0X18, 0X33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0XBF, 0XFF, 0XFF, 0X7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X20, 0XC, 0X1F, 0X4C, 0X6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 5 } },
+ { 1024, 768, 8, 0X3B, 12, 0X432E, 0X86ED, { 128, 47, 16, 0X8000, { 0, 0X1, 0XF, 0, 0XE }, 0XCF, { 0XA3, 0X7F, 0X7F, 0X87, 0X83, 0X94, 0X24, 0XF5, 0, 0X60, 0X1E, 0, 0, 0, 0, 0, 0X2, 0X8, 0XFF, 0X80, 0, 0XFF, 0X25, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XC4, 0XC4, 0XC4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X16, 0X17, 0X18, 0X33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0XBF, 0XFF, 0XFF, 0X7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X22, 0XC, 0X1F, 0X4C, 0X6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 5 } },
+ { 1024, 768, 16, 0X3D, 24, 0X432E, 0X86ED, { 128, 47, 16, 0X8000, { 0, 0X1, 0XF, 0, 0XE }, 0XCF, { 0XA3, 0X7F, 0X7F, 0X87, 0X83, 0X94, 0X24, 0XF5, 0, 0X60, 0X1E, 0, 0, 0, 0, 0, 0X2, 0X8, 0XFF, 0, 0, 0XFF, 0X25, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XC4, 0XC4, 0XC4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X16, 0X17, 0X18, 0X33, 0X35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0XBF, 0XFF, 0XFF, 0X7, 0XFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XB6, 0XC, 0X1F, 0X4C, 0X6, 0X20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 6 } },
+ { 1024, 768, 32, 0X3E, 48, 0X432E, 0X86ED, { 128, 47, 16, 0X8000, { 0, 0X1, 0XF, 0, 0XE }, 0XCF, { 0XA3, 0X7F, 0X7F, 0X87, 0X83, 0X94, 0X24, 0XF5, 0, 0X60, 0X1E, 0, 0, 0, 0, 0, 0X2, 0X8, 0XFF, 0, 0, 0XFF, 0X25, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XC4, 0XC4, 0XC4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X16, 0X17, 0X18, 0X33, 0X35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0XBF, 0XFF, 0XFF, 0X7, 0XFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XAE, 0XC, 0X1F, 0X4C, 0X6, 0X40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 6 } },
+ { 1152, 864, 8, 0X40, 16, 0X432E, 0X45B9, { 144, 53, 16, 0XFFFF, { 0, 0X1, 0XF, 0, 0XE }, 0XF, { 0XB9, 0X8F, 0X8F, 0X9D, 0X98, 0X87, 0X7D, 0XFF, 0, 0X60, 0X1E, 0, 0, 0, 0, 0, 0X60, 0X3, 0X5F, 0X90, 0, 0X5F, 0X7E, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X1, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XC4, 0XC4, 0XC4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X16, 0X17, 0X18, 0X33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0XBF, 0XFF, 0XFF, 0X7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X22, 0XC, 0X1F, 0X4C, 0X6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 5 } },
+ { 1152, 864, 16, 0X42, 32, 0X432E, 0X45B9, { 144, 53, 16, 0X8000, { 0, 0X1, 0XF, 0, 0XE }, 0XF, { 0XB9, 0X8F, 0X8F, 0X9D, 0X98, 0X87, 0X7D, 0XFF, 0, 0X60, 0X1E, 0, 0, 0, 0, 0, 0X60, 0X3, 0X5F, 0X20, 0, 0X5F, 0X7E, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XC4, 0XC4, 0XC4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X16, 0X17, 0X18, 0X33, 0X35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0XBF, 0XFF, 0XFF, 0X7, 0XFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XB6, 0XC, 0X1F, 0X4C, 0X6, 0X20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 6 } },
+ { 1152, 864, 32, 0X43, 64, 0X432E, 0X45B9, { 144, 53, 16, 0X8000, { 0, 0X1, 0XF, 0, 0XE }, 0XF, { 0XB9, 0X8F, 0X8F, 0X9D, 0X98, 0X87, 0X7D, 0XFF, 0, 0X60, 0X1E, 0, 0, 0, 0, 0, 0X60, 0X3, 0X5F, 0X40, 0, 0X5F, 0X7E, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XC4, 0XC4, 0XC4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X16, 0X17, 0X18, 0X33, 0X35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0XBF, 0XFF, 0XFF, 0X7, 0XFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XAE, 0XC, 0X1F, 0X4C, 0X6, 0X40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 6 } },
+ { 1280, 1024, 4, 0X44, 40, 0X432E, 0X8479, { 160, 63, 16, 0X8000, { 0, 0X1, 0XF, 0, 0X6 }, 0XF, { 0XCE, 0X9F, 0X9F, 0X92, 0XA6, 0X14, 0X28, 0X5A, 0, 0X60, 0X1E, 0, 0, 0, 0, 0, 0, 0X3, 0XFF, 0X50, 0, 0XFF, 0X29, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X14, 0X7, 0X38, 0X39, 0X3A, 0X3B, 0X3C, 0X3D, 0X3E, 0X3F, 0X1, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XC4, 0XC4, 0XC4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X16, 0X17, 0X18, 0X33, 0X35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0XBF, 0XFF, 0XFF, 0X27, 0XFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X20, 0XC, 0X1F, 0X4C, 0X26, 0X13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 6 } },
+ { 1280, 1024, 8, 0X45, 20, 0X432E, 0X8479, { 160, 63, 16, 0XFFFF, { 0, 0X1, 0XF, 0, 0XE }, 0XF, { 0XCE, 0X9F, 0X9F, 0X92, 0XA6, 0X14, 0X28, 0X5A, 0, 0X60, 0X1E, 0, 0, 0, 0, 0, 0, 0X3, 0XFF, 0XA0, 0, 0XFF, 0X29, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X1, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XC4, 0XC4, 0XC4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X16, 0X17, 0X18, 0X33, 0X35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0XBF, 0XFF, 0XFF, 0X27, 0XFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X22, 0XC, 0X1F, 0X4C, 0X26, 0X13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 6 } },
+ { 1280, 1024, 16, 0X47, 40, 0X432E, 0X8479, { 160, 63, 16, 0X8000, { 0, 0X1, 0XF, 0, 0XE }, 0XF, { 0XCE, 0X9F, 0X9F, 0X92, 0XA6, 0X14, 0X28, 0X5A, 0, 0X60, 0X1E, 0, 0, 0, 0, 0, 0, 0X3, 0XFF, 0X40, 0, 0XFF, 0X29, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XC4, 0XC4, 0XC4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X16, 0X17, 0X18, 0X33, 0X35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0XBF, 0XFF, 0XFF, 0X27, 0XFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XB6, 0XC, 0X1F, 0X4C, 0X26, 0X33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 6 } },
+ { 1280, 1024, 32, 0X48, 80, 0X432E, 0X8479, { 160, 63, 16, 0X8000, { 0, 0X1, 0XF, 0, 0XE }, 0XF, { 0XCE, 0X9F, 0X9F, 0X92, 0XA6, 0X14, 0X28, 0X4A, 0, 0X20, 0X1E, 0, 0, 0, 0, 0, 0, 0X3, 0XFF, 0X80, 0, 0XFF, 0X29, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XC4, 0XC4, 0XC4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X16, 0X17, 0X18, 0X33, 0X35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0XBF, 0XFF, 0XFF, 0X27, 0XFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XAE, 0XC, 0X1F, 0X4C, 0X26, 0X53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 6 } },
+ { 1600, 1200, 8, 0X4A, 30, 0X432E, 0X4571, { 200, 74, 16, 0XFFFF, { 0, 0X1, 0XF, 0, 0XE }, 0XF, { 0X9, 0XC7, 0XC7, 0X8D, 0XD0, 0X8, 0XE0, 0X10, 0, 0X40, 0X1E, 0, 0, 0, 0, 0, 0XB0, 0X3, 0XAF, 0XC8, 0, 0XAF, 0XE1, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X1, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XC4, 0XC4, 0XC4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X16, 0X17, 0X18, 0X33, 0X35, 0X36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0XBF, 0XFF, 0XFF, 0X7, 0XFF, 0X8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X22, 0XF, 0X1F, 0X4F, 0X6, 0X1F, 0X8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 7 } },
+ { 1600, 1200, 16, 0X4C, 60, 0X432E, 0X4571, { 200, 74, 16, 0X8000, { 0, 0X1, 0XF, 0, 0XE }, 0XF, { 0X9, 0XC7, 0XC7, 0X8D, 0XD0, 0X8, 0XE0, 0X10, 0, 0X40, 0X1E, 0, 0, 0, 0, 0, 0XB0, 0X3, 0XAF, 0X90, 0, 0XAF, 0XE1, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XC4, 0XC4, 0XC4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X16, 0X17, 0X18, 0X33, 0X35, 0X36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0XBF, 0XFF, 0XFF, 0X7, 0XFF, 0X8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XB6, 0XF, 0X1F, 0X4F, 0X6, 0X3F, 0X8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 7 } },
+ { 1600, 1200, 32, 0X4D, 120, 0X432E, 0X4571, { 200, 74, 16, 0X8000, { 0, 0X1, 0XF, 0, 0XE }, 0XF, { 0X9, 0XC7, 0XC7, 0X8D, 0XD0, 0X8, 0XE0, 0X10, 0, 0X40, 0X1E, 0, 0, 0, 0, 0, 0XB0, 0X3, 0XAF, 0X20, 0, 0XAF, 0XE1, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XC4, 0XC4, 0XC4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X16, 0X17, 0X18, 0X33, 0X35, 0X36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0XBF, 0XFF, 0XFF, 0X7, 0XFF, 0X8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XAE, 0XF, 0X1F, 0X4F, 0X6, 0X7F, 0X8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 7 } },
+ { 1280, 768, 8, 0X54, 15, 0X432E, 0X622, { 160, 47, 16, 0XFFFF, { 0, 0X1, 0XF, 0, 0XE }, 0X8F, { 0XCE, 0X9F, 0X9F, 0X92, 0XA6, 0X14, 0X20, 0XE5, 0, 0X20, 0X1E, 0, 0, 0, 0, 0, 0X2, 0X8, 0XFF, 0XA0, 0, 0XFF, 0X21, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X1, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XC4, 0XC4, 0XC4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X16, 0X17, 0X18, 0X33, 0X35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0XBF, 0XFF, 0XFF, 0X27, 0XFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X22, 0XC, 0X1F, 0X4C, 0X26, 0X10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 6 } },
+ { 1280, 768, 16, 0X56, 30, 0X432E, 0X622, { 160, 47, 16, 0X8000, { 0, 0X1, 0XF, 0, 0XE }, 0X8F, { 0XCE, 0X9F, 0X9F, 0X92, 0XA6, 0X14, 0X20, 0XE5, 0, 0X20, 0X1E, 0, 0, 0, 0, 0, 0X2, 0X8, 0XFF, 0X40, 0, 0XFF, 0X21, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XC4, 0XC4, 0XC4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X16, 0X17, 0X18, 0X33, 0X35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0XBF, 0XFF, 0XFF, 0X27, 0XFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XB6, 0XC, 0X1F, 0X4C, 0X26, 0X30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 6 } },
+ { 1280, 768, 32, 0X57, 60, 0X432E, 0X622, { 160, 47, 16, 0X8000, { 0, 0X1, 0XF, 0, 0XE }, 0X8F, { 0XCE, 0X9F, 0X9F, 0X92, 0XA6, 0X14, 0X20, 0XE5, 0, 0X20, 0X1E, 0, 0, 0, 0, 0, 0X2, 0X8, 0XFF, 0X80, 0, 0XFF, 0X21, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XC4, 0XC4, 0XC4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X16, 0X17, 0X18, 0X33, 0X35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0XBF, 0XFF, 0XFF, 0X27, 0XFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XAE, 0XC, 0X1F, 0X4C, 0X26, 0X50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 6 } },
+ { 1280, 960, 8, 0X58, 19, 0X432E, 0X8479, { 160, 59, 16, 0XFFFF, { 0, 0X1, 0XF, 0, 0XE }, 0XF, { 0XDC, 0X9F, 0X9F, 0X80, 0XAC, 0X9A, 0XE6, 0XEF, 0, 0X20, 0X1E, 0, 0, 0, 0, 0, 0XC0, 0X3, 0XBF, 0XA0, 0, 0XBF, 0XE7, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X1, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XC4, 0XC4, 0XC4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X16, 0X17, 0X18, 0X33, 0X35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0XBF, 0XFF, 0XFF, 0X27, 0XFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X22, 0XC, 0X1F, 0X4C, 0X26, 0X10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 6 } },
+ { 1280, 960, 16, 0X5A, 38, 0X432E, 0X8479, { 160, 59, 16, 0X8000, { 0, 0X1, 0XF, 0, 0XE }, 0XF, { 0XDC, 0X9F, 0X9F, 0X80, 0XAC, 0X9A, 0XE6, 0XEF, 0, 0X20, 0X1E, 0, 0, 0, 0, 0, 0XC0, 0X3, 0XBF, 0X40, 0, 0XBF, 0XE7, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XC4, 0XC4, 0XC4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X16, 0X17, 0X18, 0X33, 0X35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0XBF, 0XFF, 0XFF, 0X27, 0XFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XB6, 0XC, 0X1F, 0X4C, 0X26, 0X30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 6 } },
+ { 1280, 960, 32, 0X5B, 76, 0X432E, 0X8479, { 160, 59, 16, 0X8000, { 0, 0X1, 0XF, 0, 0XE }, 0XF, { 0XDC, 0X9F, 0X9F, 0X80, 0XAC, 0X9A, 0XE6, 0XEF, 0, 0X20, 0X1E, 0, 0, 0, 0, 0, 0XC0, 0X3, 0XBF, 0X80, 0, 0XBF, 0XE7, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XC4, 0XC4, 0XC4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X16, 0X17, 0X18, 0X33, 0X35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0XBF, 0XFF, 0XFF, 0X27, 0XFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XAE, 0XC, 0X1F, 0X4C, 0X26, 0X50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 6 } },
+ { 848, 480, 8, 0X63, 7, 0X432E, 0X4721, { 106, 29, 16, 0XFFFF, { 0, 0X1, 0XF, 0, 0XE }, 0XF, { 0X83, 0X69, 0X69, 0X7, 0X6C, 0X1A, 0X3, 0X3E, 0, 0X40, 0X1E, 0, 0, 0, 0, 0, 0XE5, 0XD, 0XDF, 0X6A, 0, 0XDF, 0X4, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X22, 0X6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 } },
+ { 848, 480, 16, 0X64, 13, 0X432E, 0X4721, { 106, 29, 16, 0X8000, { 0, 0X1, 0XF, 0, 0XE }, 0XF, { 0X83, 0X69, 0X69, 0X7, 0X6C, 0X1A, 0X3, 0X3E, 0, 0X40, 0X1E, 0, 0, 0, 0, 0, 0XE5, 0XD, 0XDF, 0XD4, 0, 0XDF, 0X4, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XB6, 0X6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 } },
+ { 848, 480, 32, 0X65, 25, 0X432E, 0X4721, { 106, 29, 16, 0X8000, { 0, 0X1, 0XF, 0, 0XE }, 0XF, { 0X83, 0X69, 0X69, 0X7, 0X6C, 0X1A, 0X3, 0X3E, 0, 0X40, 0X1E, 0, 0, 0, 0, 0, 0XE5, 0XD, 0XDF, 0XA8, 0, 0XDF, 0X4, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0X35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X7, 0XFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XAE, 0X6, 0X20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 3 } },
+ { 1400, 1050, 8, 0X66, 25, 0X432E, 0X73C, { 175, 74, 14, 0XFFFF, { 0, 0X1, 0XF, 0, 0XE }, 0X4F, { 0XE6, 0XAE, 0XAE, 0X8A, 0XBA, 0X8D, 0X3D, 0X10, 0, 0, 0X1E, 0, 0, 0, 0, 0, 0X1A, 0XD, 0X19, 0XAF, 0, 0X19, 0X3E, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X1, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XC4, 0XC4, 0XC4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X16, 0X17, 0X18, 0X33, 0X35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0XBF, 0XFF, 0XFF, 0X27, 0XFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X22, 0XC, 0X1F, 0X4C, 0X26, 0X1F, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 6 } },
+ { 1400, 1050, 16, 0X67, 50, 0X432E, 0X73C, { 175, 74, 14, 0X8000, { 0, 0X1, 0XF, 0, 0XE }, 0X4F, { 0XE6, 0XAE, 0XAE, 0X8A, 0XBA, 0X8D, 0X3D, 0, 0, 0, 0X1E, 0, 0, 0, 0, 0, 0X1A, 0XD, 0X19, 0X5E, 0, 0X19, 0X3E, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XC4, 0XC4, 0XC4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X16, 0X17, 0X18, 0X33, 0X35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0XBF, 0XFF, 0XFF, 0X27, 0XFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XB6, 0XC, 0X1F, 0X4C, 0X26, 0X3F, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 6 } },
+ { 1400, 1050, 32, 0X68, 100, 0X432E, 0X73C, { 175, 74, 14, 0X8000, { 0, 0X1, 0XF, 0, 0XE }, 0X4F, { 0XE6, 0XAE, 0XAE, 0X8A, 0XBA, 0X8D, 0X3D, 0, 0, 0, 0X1E, 0, 0, 0, 0, 0, 0X1A, 0XD, 0X19, 0XBC, 0, 0X19, 0X3E, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XC4, 0XC4, 0XC4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X16, 0X17, 0X18, 0X33, 0X35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0XBF, 0XFF, 0XFF, 0X27, 0XFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XAE, 0XC, 0X1F, 0X4C, 0X26, 0X5F, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 6 } },
+ { 720, 480, 8, 0X70, 6, 0X432E, 0X471A, { 90, 29, 16, 0XFFFF, { 0, 0X1, 0XF, 0X3, 0XE }, 0X4F, { 0X6B, 0X59, 0X59, 0X8F, 0X5C, 0X85, 0XEF, 0X1F, 0, 0X40, 0X1E, 0, 0, 0, 0, 0, 0XE0, 0X3, 0XDF, 0X5A, 0, 0XDF, 0XF0, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X22, 0X26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 } },
+ { 720, 480, 16, 0X71, 12, 0X432E, 0X471A, { 90, 29, 16, 0X8000, { 0, 0X1, 0XF, 0X3, 0XE }, 0X4F, { 0X6B, 0X59, 0X59, 0X8F, 0X5C, 0X85, 0XEF, 0X1F, 0, 0X40, 0X1E, 0, 0, 0, 0, 0, 0XE0, 0X3, 0XDF, 0XB4, 0, 0XDF, 0XF0, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XB6, 0X26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 } },
+ { 720, 480, 32, 0X72, 24, 0X432E, 0X471A, { 90, 29, 16, 0X8000, { 0, 0X1, 0XF, 0X3, 0XE }, 0X4F, { 0X6B, 0X59, 0X59, 0X8F, 0X5C, 0X85, 0XEF, 0X1F, 0, 0X40, 0X1E, 0, 0, 0, 0, 0, 0XE0, 0X3, 0XDF, 0X68, 0, 0XDF, 0XF0, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0X35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X27, 0XFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XAE, 0X26, 0X20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 3 } },
+ { 720, 576, 8, 0X73, 7, 0X432E, 0XC449, { 90, 35, 16, 0XFFFF, { 0, 0X1, 0XF, 0X3, 0XE }, 0X4F, { 0X6D, 0X59, 0X59, 0X91, 0X5D, 0X86, 0X53, 0XF0, 0, 0X60, 0X1E, 0, 0, 0, 0, 0, 0X40, 0X3, 0X3F, 0X5A, 0, 0X3F, 0X54, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X22, 0X26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 } },
+ { 720, 576, 16, 0X74, 14, 0X432E, 0XC449, { 90, 35, 16, 0X8000, { 0, 0X1, 0XF, 0X3, 0XE }, 0X4F, { 0X6D, 0X59, 0X59, 0X91, 0X5D, 0X86, 0X53, 0XF0, 0, 0X60, 0X1E, 0, 0, 0, 0, 0, 0X40, 0X3, 0X3F, 0XB4, 0, 0X3F, 0X54, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XB6, 0X26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 } },
+ { 720, 576, 32, 0X75, 28, 0X432E, 0XC449, { 90, 35, 16, 0X8000, { 0, 0X1, 0XF, 0X3, 0XE }, 0X4F, { 0X6D, 0X59, 0X59, 0X91, 0X5D, 0X86, 0X53, 0XF0, 0, 0X60, 0X1E, 0, 0, 0, 0, 0, 0X40, 0X3, 0X3F, 0X68, 0, 0X3F, 0X54, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0X35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X27, 0XFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XAE, 0X26, 0X20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 3 } },
+ { 1024, 512, 8, 0X76, 8, 0X432E, 0X4417, { 128, 31, 16, 0XFFFF, { 0, 0X1, 0XF, 0X3, 0XE }, 0X4F, { 0X9D, 0X7F, 0X7F, 0X81, 0X84, 0X91, 0X11, 0XBA, 0, 0X40, 0X1E, 0, 0, 0, 0, 0, 0, 0X3, 0XFF, 0X80, 0, 0XFF, 0X12, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XC4, 0XC4, 0XC4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X16, 0X17, 0X18, 0X33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0XBF, 0XFF, 0XFF, 0X7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X22, 0XC, 0X1F, 0X4C, 0X6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 5 } },
+ { 1024, 512, 16, 0X77, 16, 0X432E, 0X4417, { 128, 31, 16, 0X8000, { 0, 0X1, 0XF, 0X3, 0XE }, 0X4F, { 0X9D, 0X7F, 0X7F, 0X81, 0X84, 0X91, 0X11, 0XBA, 0, 0X40, 0X1E, 0, 0, 0, 0, 0, 0, 0X3, 0XFF, 0, 0, 0XFF, 0X12, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XC4, 0XC4, 0XC4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X16, 0X17, 0X18, 0X33, 0X35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0XBF, 0XFF, 0XFF, 0X7, 0XFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XB6, 0XC, 0X1F, 0X4C, 0X6, 0X20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 6 } },
+ { 1024, 512, 32, 0X78, 32, 0X432E, 0X4417, { 128, 31, 16, 0X8000, { 0, 0X1, 0XF, 0X3, 0XE }, 0X4F, { 0X9D, 0X7F, 0X7F, 0X81, 0X84, 0X91, 0X11, 0XBA, 0, 0X40, 0X1E, 0, 0, 0, 0, 0, 0, 0X3, 0XFF, 0, 0, 0XFF, 0X12, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XC4, 0XC4, 0XC4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X16, 0X17, 0X18, 0X33, 0X35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0XBF, 0XFF, 0XFF, 0X7, 0XFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XAE, 0XC, 0X1F, 0X4C, 0X6, 0X40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 6 } },
+ { 856, 480, 8, 0X79, 7, 0X432E, 0X471F, { 107, 29, 16, 0XFFFF, { 0, 0X1, 0XF, 0, 0XE }, 0X4F, { 0X80, 0X6A, 0X6A, 0X84, 0X6D, 0X18, 0XEF, 0X1F, 0, 0X40, 0X1E, 0, 0, 0, 0, 0, 0XE0, 0X3, 0XDF, 0X6B, 0, 0XDF, 0XF0, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X22, 0X6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 } },
+ { 856, 480, 16, 0X7A, 14, 0X432E, 0X471F, { 107, 29, 16, 0X8000, { 0, 0X1, 0XF, 0, 0XE }, 0X4F, { 0X80, 0X6A, 0X6A, 0X84, 0X6D, 0X18, 0XEF, 0X1F, 0, 0X40, 0X1E, 0, 0, 0, 0, 0, 0XE0, 0X3, 0XDF, 0XD6, 0, 0XDF, 0XF0, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XB6, 0X6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 } },
+ { 856, 480, 32, 0X7B, 28, 0X432E, 0X471F, { 107, 29, 16, 0X8000, { 0, 0X1, 0XF, 0, 0XE }, 0X4F, { 0X80, 0X6A, 0X6A, 0X84, 0X6D, 0X18, 0XEF, 0X1F, 0, 0X40, 0X1E, 0, 0, 0, 0, 0, 0XE0, 0X3, 0XDF, 0XAA, 0, 0XDF, 0XF0, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0X35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X7, 0XFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XAE, 0X6, 0X20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 3 } },
+ { 320, 200, 8, 0X5C, 1, 0X432E, 0XC6B2, { 40, 24, 8, 0XFFFF, { 0, 0X1, 0XF, 0, 0XE }, 0X4F, { 0X2F, 0X27, 0X27, 0X93, 0X2A, 0X8E, 0XA3, 0X1F, 0, 0XC0, 0X1E, 0, 0, 0, 0, 0, 0X90, 0X3, 0X8F, 0X28, 0, 0X8F, 0XA4, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X22, 0X6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 } },
+ { 320, 200, 16, 0X5D, 2, 0X432E, 0XC6B2, { 40, 24, 8, 0X8000, { 0, 0X1, 0XF, 0, 0XE }, 0X4F, { 0X2F, 0X27, 0X27, 0X93, 0X2A, 0X8E, 0XA3, 0X1F, 0, 0XC0, 0X1E, 0, 0, 0, 0, 0, 0X90, 0X3, 0X8F, 0X50, 0, 0X8F, 0XA4, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XB6, 0X6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 } },
+ { 320, 200, 32, 0X5E, 4, 0X432E, 0XC6B2, { 40, 24, 8, 0X8000, { 0, 0X1, 0XF, 0, 0XE }, 0X4F, { 0X2F, 0X27, 0X27, 0X93, 0X2A, 0X8E, 0XA3, 0X1F, 0, 0XC0, 0X1E, 0, 0, 0, 0, 0, 0X90, 0X3, 0X8F, 0XA0, 0, 0X8F, 0XA4, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0X35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X7, 0XFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XAE, 0X6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 3 } },
+ { 320, 240, 8, 0X7C, 2, 0X432E, 0XC746, { 40, 29, 8, 0XFFFF, { 0, 0X1, 0XF, 0, 0XE }, 0X4F, { 0X2F, 0X27, 0X27, 0X93, 0X2A, 0X8E, 0XF7, 0X1F, 0, 0XC0, 0X1E, 0, 0, 0, 0, 0, 0XE0, 0X3, 0XDF, 0X28, 0, 0XDF, 0XF8, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X22, 0X6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 } },
+ { 320, 240, 16, 0X7D, 3, 0X432E, 0XC746, { 40, 29, 8, 0X8000, { 0, 0X1, 0XF, 0, 0XE }, 0X4F, { 0X2F, 0X27, 0X27, 0X93, 0X2A, 0X8E, 0XF7, 0X1F, 0, 0XC0, 0X1E, 0, 0, 0, 0, 0, 0XE0, 0X3, 0XDF, 0X50, 0, 0XDF, 0XF8, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XB6, 0X6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 } },
+ { 320, 240, 32, 0X7E, 5, 0X432E, 0XC746, { 40, 29, 8, 0X8000, { 0, 0X1, 0XF, 0, 0XE }, 0X4F, { 0X2F, 0X27, 0X27, 0X93, 0X2A, 0X8E, 0XF7, 0X1F, 0, 0XC0, 0X1E, 0, 0, 0, 0, 0, 0XE0, 0X3, 0XDF, 0XA0, 0, 0XDF, 0XF8, 0X63, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0X35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X7, 0XFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XAE, 0X6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 3 } },
+ { 400, 300, 8, 0X22, 2, 0X432E, 0XC54F, { 50, 36, 8, 0XFFFF, { 0, 0X1, 0XF, 0, 0XE }, 0X4F, { 0X3D, 0X31, 0X31, 0X81, 0X35, 0X1A, 0X74, 0XF0, 0, 0XE0, 0X1E, 0, 0, 0, 0, 0, 0X58, 0XB, 0X57, 0X32, 0X40, 0X57, 0X75, 0XE3, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X22, 0X26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 } },
+ { 400, 300, 16, 0X23, 4, 0X432E, 0XC54F, { 50, 36, 8, 0X8000, { 0, 0X1, 0XF, 0, 0XE }, 0X4F, { 0X3D, 0X31, 0X31, 0X81, 0X35, 0X1A, 0X74, 0XF0, 0, 0XE0, 0X1E, 0, 0, 0, 0, 0, 0X58, 0XB, 0X57, 0X64, 0X40, 0X57, 0X75, 0XE3, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XB6, 0X26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 } },
+ { 400, 300, 32, 0X24, 8, 0X432E, 0XC54F, { 50, 36, 8, 0X8000, { 0, 0X1, 0XF, 0, 0XE }, 0X4F, { 0X3D, 0X31, 0X31, 0X81, 0X35, 0X1A, 0X74, 0XF0, 0, 0XE0, 0X1E, 0, 0, 0, 0, 0, 0X58, 0XB, 0X57, 0XC8, 0X40, 0X57, 0X75, 0XE3, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0X35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X27, 0XFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XAE, 0X26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 3 } },
+ { 512, 384, 8, 0X25, 3, 0X432E, 0XC53F, { 64, 47, 8, 0XFFFF, { 0, 0X1, 0XF, 0, 0XE }, 0X4F, { 0X4D, 0X3F, 0X3F, 0X91, 0X42, 0X9, 0X92, 0X1F, 0, 0X40, 0X1E, 0, 0, 0, 0, 0, 0X80, 0X3, 0X7F, 0X40, 0X40, 0X7F, 0X93, 0XE3, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X22, 0X26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 } },
+ { 512, 384, 16, 0X26, 6, 0X432E, 0XC53F, { 64, 47, 8, 0X8000, { 0, 0X1, 0XF, 0, 0XE }, 0X4F, { 0X4D, 0X3F, 0X3F, 0X91, 0X42, 0X9, 0X92, 0X1F, 0, 0X40, 0X1E, 0, 0, 0, 0, 0, 0X80, 0X3, 0X7F, 0X80, 0X40, 0X7F, 0X93, 0XE3, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XB6, 0X26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 } },
+ { 512, 384, 32, 0X27, 12, 0X432E, 0XC53F, { 64, 47, 8, 0X8000, { 0, 0X1, 0XF, 0, 0XE }, 0X4F, { 0X4D, 0X3F, 0X3F, 0X91, 0X42, 0X9, 0X92, 0X1F, 0, 0X40, 0X1E, 0, 0, 0, 0, 0, 0X80, 0X3, 0X7F, 0, 0X40, 0X7F, 0X93, 0XE3, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X33, 0X35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0X27, 0XFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XAE, 0X26, 0X20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 3 } },
+ { 576, 1024, 8, 0X14, 9, 0X432E, 0XC4E9, { 128, 35, 16, 0XFFFF, { 0, 0X1, 0XF, 0X3, 0XE }, 0X4F, { 0X9F, 0X7F, 0X7F, 0X83, 0X85, 0X92, 0X53, 0XF0, 0, 0X60, 0X1E, 0, 0, 0, 0, 0, 0X40, 0X3, 0X3F, 0X80, 0, 0X3F, 0X54, 0XE3, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XC4, 0XC4, 0XC4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X16, 0X17, 0X18, 0X33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0XBF, 0XFF, 0XFF, 0X7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X22, 0XC, 0X1F, 0X4C, 0X6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 5 } },
+ { 576, 1024, 16, 0X15, 18, 0X432E, 0XC4E9, { 128, 35, 16, 0X8000, { 0, 0X1, 0XF, 0X3, 0XE }, 0X4F, { 0X9F, 0X7F, 0X7F, 0X83, 0X85, 0X92, 0X53, 0XF0, 0, 0X60, 0X1E, 0, 0, 0, 0, 0, 0X40, 0X3, 0X3F, 0, 0, 0X3F, 0X54, 0XE3, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XC4, 0XC4, 0XC4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X16, 0X17, 0X18, 0X33, 0X35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0XBF, 0XFF, 0XFF, 0X7, 0XFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XB6, 0XC, 0X1F, 0X4C, 0X6, 0X20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 6 } },
+ { 576, 1024, 32, 0X16, 36, 0X432E, 0XC4E9, { 128, 35, 16, 0X8000, { 0, 0X1, 0XF, 0X3, 0XE }, 0X4F, { 0X9F, 0X7F, 0X7F, 0X83, 0X85, 0X92, 0X53, 0XF0, 0, 0X60, 0X1E, 0, 0, 0, 0, 0, 0X40, 0X3, 0X3F, 0, 0, 0X3F, 0X54, 0XE3, 0XFF }, { 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X8, 0X9, 0XA, 0XB, 0XC, 0XD, 0XE, 0XF, 0X41, 0, 0XF, 0 }, { 0, 0, 0, 0, 0, 0X40, 0X5, 0XF, 0XFF } }, { { 0XC4, 0XC4, 0XC4, 0XC4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X16, 0X17, 0X18, 0X33, 0X35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0XBF, 0XFF, 0XFF, 0X7, 0XFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XAE, 0XC, 0X1F, 0X4C, 0X6, 0X40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 6 } }
+};
+
+static const VIABIOSRegTableRec commExtTable = {
+ { 0XC4, 0XC4, 0XC4, 0XC4, 0XC4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XCE, 0XCE, 0XCE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X16, 0X17, 0X18, 0X1A, 0X32, 0X33, 0X34, 0X35, 0X36, 0X20, 0X21, 0X22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X2, 0XBF, 0XFF, 0XFF, 0XFD, 0XFF, 0XFF, 0XFF, 0XFF, 0X8, 0XFF, 0XFF, 0XFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X2, 0X8, 0X1F, 0X4E, 0X8, 0, 0X6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 13 };
+
+static const VIABIOSRegTableRec stdModeExtTable = {
+ { 0XC4, 0XC4, 0XC4, 0XC4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0X1A, 0X1C, 0X1D, 0X33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFE, 0XFD, 0XFF, 0X3, 0X7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0X58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 5 };
+
+static const VIABIOSRefreshTableRec refreshTable[17][5] = {
+ {
+ { 75, 0XC3B5, { 0X64, 0X4F, 0X88, 0X52, 0X9A, 0XF2, 0X1F, 0XE0, 0X3, 0XDF, 0XF3, 0, 0, 0 } },
+ { 85, 0XC5E5, { 0X63, 0X4F, 0X87, 0X57, 0X9E, 0XFB, 0X1F, 0XE0, 0X3, 0XDF, 0XFC, 0, 0, 0 } },
+ { 100, 0XC579, { 0X65, 0X4F, 0X89, 0X55, 0X9D, 0XFB, 0X1F, 0XE0, 0X3, 0XDF, 0XFC, 0, 0, 0 } },
+ { 120, 0XC475, { 0X65, 0X4F, 0X89, 0X55, 0X9D, 0X1, 0X3E, 0XE0, 0X3, 0XDF, 0X2, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ },
+ {
+ { 75, 0X8653, { 0X7F, 0X63, 0X83, 0X66, 0X10, 0X6F, 0XF0, 0X58, 0XB, 0X57, 0X70, 0, 0, 0 } },
+ { 85, 0X47B7, { 0X7E, 0X63, 0X82, 0X68, 0X10, 0X75, 0XF0, 0X58, 0XB, 0X57, 0X76, 0, 0, 0 } },
+ { 100, 0X413, { 0X81, 0X63, 0X85, 0X6A, 0X15, 0X7A, 0XF0, 0X58, 0XB, 0X57, 0X7B, 0, 0, 0 } },
+ { 120, 0X729, { 0X83, 0X63, 0X87, 0X6B, 0X16, 0X81, 0XF0, 0X58, 0XB, 0X57, 0X82, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ },
+ {
+ { 75, 0X4321, { 0X9F, 0X7F, 0X83, 0X82, 0X8E, 0X1E, 0XF5, 0, 0X3, 0XFF, 0X1F, 0, 0, 0 } },
+ { 85, 0X521, { 0XA7, 0X7F, 0X8B, 0X86, 0X92, 0X26, 0XF5, 0, 0X3, 0XFF, 0X27, 0, 0, 0 } },
+ { 100, 0X465F, { 0XA9, 0X7F, 0XD, 0X89, 0X97, 0X2C, 0XF5, 0, 0X3, 0XFF, 0X2D, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ },
+ {
+ { 75, 0X47EA, { 0XC3, 0X8F, 0X87, 0X98, 0X8, 0X82, 0XFF, 0X60, 0X3, 0X5F, 0X83, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ },
+ {
+ { 75, 0X455E, { 0XCE, 0X9F, 0X92, 0XA2, 0X14, 0X28, 0X5A, 0, 0X3, 0XFF, 0X29, 0, 0, 0 } },
+ { 85, 0X5B7, { 0XD3, 0X9F, 0X97, 0XA8, 0X1C, 0X2E, 0X5A, 0, 0X3, 0XFF, 0X2F, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ },
+ {
+ { 75, 0X763, { 0X9, 0XC7, 0X8D, 0XD0, 0X8, 0XE0, 0X10, 0XB0, 0X3, 0XAF, 0XE1, 0, 0, 0 } },
+ { 85, 0X550, { 0X9, 0XC7, 0X8D, 0XD0, 0X8, 0XE0, 0X10, 0XB0, 0X3, 0XAF, 0XE1, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ },
+ {
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ },
+ {
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ },
+ {
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ },
+ {
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ },
+ {
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ },
+ {
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ },
+ {
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ },
+ {
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ },
+ {
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ },
+ {
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ },
+ {
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
+ { 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+ }
+};
+
+static const VIALCDModeTableRec lcdTable[] = {
+ { 0, 0, 0X1, 13, 13, 5, 5,
+ { 0XE0FF, 0XF, 0XC0FC, 0X1B, 0, 0X7000, 0, 0X7000 },
+ { 0, 0, 0, 0, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X7A, 0X7B, 0X7C, 0X7D, 0X7E, 0X7F, 0X80, 0X81, 0X82, 0X83, 0X84, 0X85, 0X86, 0X87, 0X88, 0X89, 0X8A, 0X8B, 0X8C, 0X8D, 0X8E, 0X8F, 0X90, 0X68, 0X69, 0X92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0X2, 0X3, 0X4, 0X7, 0XA, 0XD, 0X13, 0X16, 0X19, 0X1C, 0X1D, 0X1E, 0X1F, 0, 0, 0X88, 0XD, 0X5D, 0X79, 0XFF, 0X10, 0XB, 0X67, 0, 0X7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 26 },
+ { 0X407, 0X407, 0X4523, 0X4523, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X58, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X66, 0X67, 0X6D, 0X6E, 0X6F, 0X70, 0X71, 0X72, 0X73, 0X74, 0X75, 0X76, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1F, 0X7F, 0X7F, 0X1F, 0X9A, 0X23, 0X87, 0XE7, 0XC, 0XDF, 0XDF, 0XC, 0X11, 0XA, 0XE1, 0X23, 0XA0, 0X50, 0, 0X5F, 0X63, 0XB, 0XDF, 0X12, 0XDF, 0XC, 0X12, 0XE2, 0X14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 32 },
+ {
+ { 0, 0X407, 0X407, 0X4523, 0X4523, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X6D, 0X6E, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0XB7, 0XE4, 0X9, 0XB9, 0X3B, 0X2D, 0X31, 0X8F, 0X8F, 0XBA, 0X1C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 12 },
+ { 0X2, 0X407, 0X407, 0X4523, 0X4523, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0XB7, 0XE4, 0X9, 0XB9, 0X3B, 0X8F, 0X8F, 0XBA, 0X1C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0X6, 0X407, 0X407, 0X4523, 0X4523, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0XB7, 0XE4, 0X9, 0XB9, 0X3B, 0X8F, 0X8F, 0XBA, 0X1C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0XD, 0X407, 0X407, 0X4523, 0X4523, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X6D, 0X6E, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0XB7, 0XE4, 0X9, 0XB9, 0X3B, 0X2D, 0X31, 0X8F, 0X8F, 0XBA, 0X1C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 12 },
+ { 0XE, 0X407, 0X407, 0X4523, 0X4523, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0XB7, 0XE4, 0X9, 0XB9, 0X3B, 0X8F, 0X8F, 0XBA, 0X1C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0XF, 0X407, 0X407, 0X4523, 0X4523, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X5D, 0X9E, 0XCB, 0X9, 0XA0, 0X22, 0X5D, 0X5D, 0XA1, 0X13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0X10, 0X407, 0X407, 0X4523, 0X4523, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X5D, 0X9E, 0XCB, 0X9, 0XA0, 0X22, 0X5D, 0X5D, 0XA1, 0X13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0X13, 0X407, 0X407, 0X4523, 0X4523, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0XB7, 0XE4, 0X9, 0XB9, 0X3B, 0X8F, 0X8F, 0XBA, 0X1C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0X30, 0X407, 0X407, 0X4523, 0X4523, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0XB7, 0XE4, 0X9, 0XB9, 0X3B, 0X8F, 0X8F, 0XBA, 0X1C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0X5C, 0XC763, 0XC763, 0X8763, 0X8763, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X3F, 0XDF, 0X7F, 0X51, 0X13, 0XE7, 0X47, 0XC7, 0X53, 0X80, 0X9, 0X2, 0X55, 0X37, 0X50, 0XC7, 0X2, 0XC7, 0X2, 0X56, 0X18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 21 },
+ { 0X7C, 0XC763, 0XC763, 0X8763, 0X8763, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X3F, 0XDF, 0X7F, 0X51, 0X13, 0XE7, 0X47, 0XEF, 0X67, 0X94, 0X9, 0X2, 0X69, 0X2B, 0X50, 0XEF, 0X2, 0XEF, 0X2, 0X6A, 0X1C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 21 },
+ { 0X22, 0XC763, 0XC763, 0X8763, 0X8763, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0X7, 0XA7, 0X92, 0X13, 0XF, 0X6F, 0X2B, 0X85, 0XB2, 0X9, 0XA, 0X87, 0X29, 0X64, 0X2B, 0X2B, 0X88, 0X1A, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 19 },
+ { 0X25, 0XC763, 0XC763, 0X8763, 0X8763, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X70, 0X72, 0X75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFF, 0X3F, 0XDF, 0X92, 0X13, 0X47, 0XA7, 0X7F, 0XAF, 0XDC, 0X9, 0XA, 0XB1, 0X34, 0X80, 0X7F, 0X7F, 0XB2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 18 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 }
+ },
+ {
+ { 0, 0X407, 0X407, 0X4523, 0X4523, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X6D, 0X6E, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0XB7, 0XE4, 0X9, 0XB9, 0X3B, 0X2D, 0X31, 0X8F, 0X8F, 0XBA, 0X1C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 12 },
+ { 0X2, 0X407, 0X407, 0X4523, 0X4523, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0XB7, 0XE4, 0X9, 0XB9, 0X3B, 0X8F, 0X8F, 0XBA, 0X1C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0X6, 0X407, 0X407, 0X4523, 0X4523, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0XB7, 0XE4, 0X9, 0XB9, 0X3B, 0X8F, 0X8F, 0XBA, 0X1C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0XD, 0X407, 0X407, 0X4523, 0X4523, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X6D, 0X6E, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0XB7, 0XE4, 0X9, 0XB9, 0X3B, 0X2D, 0X31, 0X8F, 0X8F, 0XBA, 0X1C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 12 },
+ { 0XE, 0X407, 0X407, 0X4523, 0X4523, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0XB7, 0XE4, 0X9, 0XB9, 0X3B, 0X8F, 0X8F, 0XBA, 0X1C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0XF, 0X407, 0X407, 0X4523, 0X4523, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X5D, 0X9E, 0XCB, 0X9, 0XA0, 0X22, 0X5D, 0X5D, 0XA1, 0X13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0X10, 0X407, 0X407, 0X4523, 0X4523, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X5D, 0X9E, 0XCB, 0X9, 0XA0, 0X22, 0X5D, 0X5D, 0XA1, 0X13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0X13, 0X407, 0X407, 0X4523, 0X4523, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0XB7, 0XE4, 0X9, 0XB9, 0X3B, 0X8F, 0X8F, 0XBA, 0X1C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0X30, 0X407, 0X407, 0X4523, 0X4523, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0XB7, 0XE4, 0X9, 0XB9, 0X3B, 0X8F, 0X8F, 0XBA, 0X1C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0X5C, 0XC763, 0XC763, 0X8763, 0X8763, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X3F, 0XDF, 0X7F, 0X51, 0X13, 0XE7, 0X47, 0XC7, 0X53, 0X80, 0X9, 0X2, 0X55, 0X37, 0X50, 0XC7, 0X2, 0XC7, 0X2, 0X56, 0X18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 21 },
+ { 0X7C, 0XC763, 0XC763, 0X8763, 0X8763, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X3F, 0XDF, 0X7F, 0X51, 0X13, 0XE7, 0X47, 0XEF, 0X67, 0X94, 0X9, 0X2, 0X69, 0X2B, 0X50, 0XEF, 0X2, 0XEF, 0X2, 0X6A, 0X1C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 21 },
+ { 0X22, 0XC763, 0XC763, 0X8763, 0X8763, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0X7, 0XA7, 0X92, 0X13, 0XF, 0X6F, 0X2B, 0X85, 0XB2, 0X9, 0XA, 0X87, 0X29, 0X64, 0X2B, 0X2B, 0X88, 0X1A, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 19 },
+ { 0X25, 0XC763, 0XC763, 0X8763, 0X8763, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X70, 0X72, 0X75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFF, 0X3F, 0XDF, 0X92, 0X13, 0X47, 0XA7, 0X7F, 0XAF, 0XDC, 0X9, 0XA, 0XB1, 0X34, 0X80, 0X7F, 0X7F, 0XB2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 18 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 }
+ },
+ {
+ { 0, 0, 0, 0, 0, { 0XC4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X2, 0, 0, 0, 0, { 0XC4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0X11, 0X4, 0X5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0X6E, 0X52, 0X9E, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 4 },
+ { 0X5C, 0, 0, 0, 0, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X11, 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X9, 0X10, 0X11, 0X12, 0X15, 0X16, 0X33, 0X35, 0X36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X6C, 0X2D, 0X27, 0X27, 0X91, 0X3D, 0X89, 0XDE, 0X10, 0X40, 0XC9, 0XEC, 0XC7, 0XC7, 0XDF, 0X6, 0, 0X31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 18 },
+ { 0X7C, 0, 0, 0, 0, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X11, 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X9, 0X10, 0X11, 0X12, 0X15, 0X16, 0X33, 0X35, 0X36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X7, 0X2D, 0X27, 0X27, 0X91, 0X3D, 0X89, 0X5, 0X11, 0X40, 0XF5, 0X87, 0XEF, 0XEF, 0X6, 0X6, 0, 0X31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 18 },
+ { 0X22, 0, 0, 0, 0, { 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 }
+ },
+ {
+ { 0, 0, 0, 0, 0, { 0XC4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X2, 0, 0, 0, 0, { 0XC4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0X11, 0X4, 0X5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0X6E, 0X52, 0X9E, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 4 },
+ { 0X5C, 0, 0, 0, 0, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X11, 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X9, 0X10, 0X11, 0X12, 0X15, 0X16, 0X33, 0X35, 0X36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X6C, 0X2D, 0X27, 0X27, 0X91, 0X3D, 0X89, 0XDE, 0X10, 0X40, 0XC9, 0XEC, 0XC7, 0XC7, 0XDF, 0X6, 0, 0X31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 18 },
+ { 0X7C, 0, 0, 0, 0, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X11, 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X9, 0X10, 0X11, 0X12, 0X15, 0X16, 0X33, 0X35, 0X36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X7, 0X2D, 0X27, 0X27, 0X91, 0X3D, 0X89, 0X5, 0X11, 0X40, 0XF5, 0X87, 0XEF, 0XEF, 0X6, 0X6, 0, 0X31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 18 },
+ { 0X22, 0, 0, 0, 0, { 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 }
+ },
+ { 0X407, 0X407, 0X4523, 0X4523, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X6D, 0X6E, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0XB7, 0XE4, 0X9, 0XB9, 0X3B, 0X2D, 0X31, 0X8F, 0X8F, 0XBA, 0X1C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 12 },
+ { 0X407, 0X407, 0X4523, 0X4523, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X6D, 0X6E, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0XB7, 0XE4, 0X9, 0XB9, 0X3B, 0X2D, 0X31, 0X8F, 0X8F, 0XBA, 0X1C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 12 },
+ {
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 }
+ },
+ {
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 }
+ }
+ },
+ { 0X1, 0X1, 0X1, 14, 13, 4, 4,
+ { 0XE0FF, 0XF, 0XC1FC, 0X37B, 0, 0X7000, 0, 0X7000 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0X8643, 0X8643, 0X4643, 0X4643, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X58, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X66, 0X67, 0X6D, 0X6E, 0X6F, 0X70, 0X71, 0X72, 0X73, 0X74, 0X75, 0X76, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1F, 0X1F, 0X1F, 0X1F, 0XE3, 0X34, 0X47, 0XC7, 0X73, 0X57, 0X57, 0X73, 0X52, 0X12, 0X58, 0X5C, 0XC8, 0X6E, 0, 0X7F, 0X83, 0X72, 0X57, 0X22, 0X57, 0X73, 0X22, 0X59, 0X2D, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 32 },
+ {
+ { 0, 0X8643, 0X8643, 0X4643, 0X4643, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X51, 0X52, 0X53, 0X54, 0X56, 0X57, 0X65, 0X66, 0X6D, 0X6E, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X25, 0XCF, 0XF7, 0XF7, 0XDA, 0X1F, 0X9F, 0XB4, 0X6E, 0X36, 0X3A, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 11 },
+ { 0X2, 0X8643, 0X8643, 0X4643, 0X4643, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X65, 0X6D, 0X6E, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0XF3, 0XF, 0X51, 0XF4, 0X38, 0XA2, 0X7F, 0X83, 0X8F, 0X8F, 0XF5, 0X19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 13 },
+ { 0X6, 0X8643, 0X8643, 0X4643, 0X4643, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0XF3, 0XF, 0X51, 0XF4, 0X38, 0X8F, 0X8F, 0XF5, 0X19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0XD, 0X8643, 0X8643, 0X4643, 0X4643, { 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X6E, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0XE, 0X8643, 0X8643, 0X4643, 0X4643, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0XF3, 0XF, 0X51, 0XF4, 0X38, 0X8F, 0X8F, 0XF5, 0X19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0XF, 0X8643, 0X8643, 0X4643, 0X4643, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X5D, 0XDA, 0XF6, 0X49, 0XDB, 0X3F, 0X5D, 0X5D, 0XDC, 0X10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0X10, 0X8643, 0X8643, 0X4643, 0X4643, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X65, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X5D, 0XDA, 0XF6, 0X49, 0XDB, 0X3F, 0XA2, 0X5D, 0X5D, 0XDC, 0X10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 11 },
+ { 0X13, 0X8643, 0X8643, 0X4643, 0X4643, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X65, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0XF3, 0XF, 0X51, 0XF4, 0X38, 0XA2, 0X8F, 0X8F, 0XF5, 0X19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 11 },
+ { 0X28, 0X8643, 0X8643, 0X4643, 0X4643, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X51, 0X52, 0X53, 0X54, 0X56, 0X57, 0X65, 0X6D, 0X6E, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1C, 0XCF, 0XF7, 0XF7, 0XDA, 0X1F, 0X9F, 0XB4, 0X70, 0X74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0X30, 0X8643, 0X8643, 0X4643, 0X4643, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0XF3, 0XF, 0X51, 0XF4, 0X38, 0X8F, 0X8F, 0XF5, 0X19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0X5C, 0XC459, 0XC459, 0XC259, 0XC259, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X3F, 0X2F, 0X2F, 0X14, 0X57, 0XD7, 0XC7, 0X8F, 0XAB, 0X9, 0X2, 0X90, 0X34, 0X50, 0XC7, 0X2, 0XC7, 0X2, 0X91, 0X15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 20 },
+ { 0X7C, 0XC459, 0XC459, 0XC259, 0XC259, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X3F, 0X2F, 0X2F, 0X14, 0X57, 0XD7, 0XEF, 0XA3, 0XBF, 0X9, 0X2, 0XA4, 0X28, 0X50, 0XEF, 0X2, 0XEF, 0X2, 0XA5, 0X19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 20 },
+ { 0X22, 0XC459, 0XC459, 0XC259, 0XC259, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X65, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0X57, 0X57, 0X14, 0X7F, 0XFF, 0X2B, 0XC1, 0XDD, 0X9, 0XC2, 0X26, 0X64, 0X2B, 0X2B, 0XC3, 0X17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 17 },
+ { 0X25, 0XC459, 0XC459, 0XC259, 0XC259, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X65, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFF, 0X8F, 0X8F, 0X14, 0XB7, 0X37, 0X7F, 0XEB, 0X7, 0X51, 0XEC, 0X30, 0X80, 0X7F, 0X7F, 0XED, 0X11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 17 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 }
+ },
+ {
+ { 0, 0X8643, 0X86B9, 0X4643, 0X46B9, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X53, 0X65, 0X66, 0X77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X21, 0X21, 0XB4, 0X66, 0X98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 5 },
+ { 0X2, 0X8643, 0X86B3, 0X4643, 0X46B3, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X53, 0X66, 0X6D, 0X6E, 0X6F, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X2F, 0X2F, 0X73, 0X61, 0X65, 0X72, 0X33, 0XAA, 0XB7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 9 },
+ { 0X6, 0X8643, 0X86B3, 0X4643, 0X46B3, { 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XAA, 0XB7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 },
+ { 0XE, 0X8643, 0X86B3, 0X4643, 0X46B3, { 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XAA, 0XB7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 },
+ { 0XF, 0X8643, 0X86B3, 0X4643, 0X46B3, { 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X54, 0XB7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 },
+ { 0X10, 0X8643, 0X86B3, 0X4643, 0X46B3, { 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X54, 0XB7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 },
+ { 0X13, 0X8643, 0X86B3, 0X4643, 0X46B3, { 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XAA, 0XB7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 },
+ { 0X28, 0X8643, 0X86B9, 0X4643, 0X46B9, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X53, 0X65, 0X66, 0X77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X21, 0X21, 0XB4, 0X72, 0X98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 5 },
+ { 0X30, 0X8643, 0X86B3, 0X4643, 0X46B3, { 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XAA, 0XB7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 },
+ { 0X5C, 0XC459, 0XC7BB, 0XC259, 0XC776, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X53, 0X65, 0X66, 0X6D, 0X6E, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1F, 0X1F, 0X50, 0X5A, 0X2D, 0X31, 0X98, 0X54, 0X57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 9 },
+ { 0X7C, 0XC459, 0XC7BB, 0XC259, 0XC776, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X53, 0X65, 0X66, 0X6D, 0X6E, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1F, 0X1F, 0X50, 0X55, 0X2D, 0X31, 0X98, 0X98, 0X57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 9 },
+ { 0X22, 0XC459, 0XC643, 0XC259, 0X8643, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X53, 0X65, 0X66, 0X6D, 0X6E, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1B, 0X1B, 0X64, 0X5A, 0X3D, 0X41, 0, 0, 0XA7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 9 },
+ { 0X25, 0XC459, 0X4511, 0XC259, 0X8544, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X53, 0X65, 0X66, 0X6D, 0X6E, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X23, 0X23, 0X80, 0X61, 0X4C, 0X50, 0X8E, 0X8E, 0XA7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 9 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 }
+ },
+ {
+ { 0X2, 0, 0, 0, 0, { 0XC4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X5C, 0, 0, 0, 0, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X11, 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X9, 0X10, 0X11, 0X12, 0X15, 0X16, 0X33, 0X35, 0X36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X6C, 0X2D, 0X27, 0X27, 0X91, 0X4B, 0X9B, 0XDE, 0X10, 0X40, 0XC9, 0XEC, 0XC7, 0XC7, 0XDF, 0X6, 0, 0X31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 18 },
+ { 0X7C, 0, 0, 0, 0, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X11, 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X9, 0X10, 0X11, 0X12, 0X15, 0X16, 0X33, 0X35, 0X36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X7, 0X2D, 0X27, 0X27, 0X91, 0X4B, 0X9B, 0X5, 0X11, 0X40, 0XF5, 0X87, 0XEF, 0XEF, 0X6, 0X6, 0, 0X31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 18 },
+ { 0X22, 0, 0, 0, 0, { 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 }
+ },
+ {
+ { 0X2, 0, 0, 0, 0, { 0XC4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X5C, 0, 0, 0, 0, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X11, 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X9, 0X10, 0X11, 0X12, 0X15, 0X16, 0X33, 0X35, 0X36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X6C, 0X2D, 0X27, 0X27, 0X91, 0X2A, 0X90, 0XDE, 0X10, 0X40, 0XC9, 0XEC, 0XC7, 0XC7, 0XDF, 0X6, 0, 0X31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 18 },
+ { 0X7C, 0, 0, 0, 0, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X11, 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X9, 0X10, 0X11, 0X12, 0X15, 0X16, 0X33, 0X35, 0X36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X7, 0X2D, 0X27, 0X27, 0X91, 0X2A, 0X90, 0X5, 0X11, 0X40, 0XF5, 0X87, 0XEF, 0XEF, 0X6, 0X6, 0, 0X31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 18 },
+ { 0X22, 0, 0, 0, 0, { 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 }
+ },
+ { 0X8643, 0X8643, 0X4643, 0X4643, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X66, 0X6D, 0X6E, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X7F, 0XCF, 0XCF, 0X9A, 0X24, 0XF7, 0X77, 0X8F, 0XF3, 0XF, 0X51, 0XA, 0XF4, 0X38, 0XA0, 0X68, 0X3D, 0X41, 0X8F, 0X12, 0X8F, 0X12, 0XF5, 0X19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 24 },
+ { 0X8643, 0X86B2, 0X4643, 0X46B2, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X53, 0X65, 0X66, 0X6D, 0X6E, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X2F, 0X2F, 0XA0, 0X5F, 0X2D, 0X31, 0X32, 0XAA, 0XB7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 9 },
+ {
+ { 0X8643, 0X8643, 0X4643, 0X4643, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5D, 0X5E, 0X5F, 0X65, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X7F, 0XCF, 0XCF, 0X9A, 0X24, 0XF7, 0X77, 0XDF, 0X1B, 0X37, 0XA, 0X1C, 0X40, 0XA0, 0XDF, 0X12, 0XDF, 0X12, 0X1D, 0X21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 20 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 }
+ },
+ {
+ { 0X8643, 0X86B3, 0X4643, 0X46B3, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X53, 0X65, 0X6D, 0X6E, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1A, 0X1A, 0XA0, 0X5F, 0X63, 0X33, 0X32, 0XF7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 8 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 }
+ }
+ },
+ { 0X2, 0X2, 0X1, 13, 14, 4, 4,
+ { 0XE0FF, 0XF, 0XC1FC, 0X6F7B, 0, 0X7000, 0, 0X7000 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0X86ED, 0X86ED, 0X46ED, 0X46ED, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X58, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X66, 0X67, 0X6D, 0X6E, 0X6F, 0X70, 0X71, 0X72, 0X73, 0X74, 0X75, 0X76, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X3F, 0XFF, 0XFF, 0X3F, 0X2B, 0X35, 0X17, 0X9F, 0X25, 0XFF, 0XFF, 0X25, 0X9A, 0X13, 0, 0X62, 0, 0X96, 0X4, 0XA3, 0XA7, 0X24, 0XFF, 0X23, 0XFF, 0X25, 0X23, 0X3, 0X39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 32 },
+ {
+ { 0, 0X86ED, 0X86ED, 0X46ED, 0X46ED, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X51, 0X52, 0X53, 0X54, 0X56, 0X57, 0X5C, 0X65, 0X66, 0X6D, 0X6E, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X45, 0XCF, 0X67, 0XA7, 0XE3, 0X7F, 0X7, 0X12, 0XB4, 0X87, 0X46, 0X4A, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 12 },
+ { 0X2, 0X86ED, 0X86ED, 0X46ED, 0X46ED, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5E, 0X5F, 0X65, 0X66, 0X70, 0X72, 0X73, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X84, 0XD4, 0X8F, 0X47, 0X6D, 0X4A, 0X50, 0XA2, 0XA0, 0X8E, 0X8E, 0X6E, 0X12, 0X4A, 0X20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 15 },
+ { 0X6, 0X86ED, 0X86ED, 0X46ED, 0X46ED, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0X47, 0X6D, 0X4A, 0X50, 0X8F, 0X8F, 0X4B, 0X21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 9 },
+ { 0XE, 0X86ED, 0X86ED, 0X46ED, 0X46ED, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0X47, 0X6D, 0X4A, 0X50, 0X8F, 0X8F, 0X4B, 0X21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 9 },
+ { 0XF, 0X86ED, 0X86ED, 0X46ED, 0X46ED, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X5D, 0X2E, 0X54, 0X31, 0X57, 0X5D, 0X5D, 0X32, 0X28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 9 },
+ { 0X10, 0X86ED, 0X86ED, 0X46ED, 0X46ED, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5E, 0X5F, 0X65, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X5D, 0X2E, 0X54, 0X31, 0X57, 0XA2, 0X5D, 0X5D, 0X32, 0X28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0X13, 0X86ED, 0X86ED, 0X46ED, 0X46ED, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5E, 0X5F, 0X65, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0X47, 0X6D, 0X4A, 0X50, 0XA2, 0X8F, 0X8F, 0X4B, 0X21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0X28, 0X86ED, 0X86ED, 0X46ED, 0X46ED, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X51, 0X52, 0X53, 0X56, 0X57, 0X5C, 0X65, 0X6D, 0X6E, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X45, 0XCF, 0X67, 0XA7, 0X7F, 0X7, 0X12, 0XB4, 0X91, 0X95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0X30, 0X86ED, 0X86ED, 0X46ED, 0X46ED, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0X47, 0X6D, 0X4A, 0X50, 0X8F, 0X8F, 0X4B, 0X21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 9 },
+ { 0X5C, 0X86ED, 0X86ED, 0X46ED, 0X46ED, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X3F, 0X9F, 0XDF, 0X9A, 0X15, 0XB7, 0X3F, 0XC7, 0XE3, 0X9, 0X51, 0X3, 0XE6, 0X2C, 0X50, 0XC7, 0X3, 0XC7, 0X3, 0XE7, 0X1D, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 21 },
+ { 0X7C, 0X86ED, 0X86ED, 0X46ED, 0X46ED, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X3F, 0X9F, 0XDF, 0X9A, 0X15, 0XB7, 0X3F, 0XEF, 0XF7, 0X1D, 0X51, 0X3, 0XFA, 0X20, 0X50, 0XEF, 0X3, 0XEF, 0X3, 0XFB, 0X11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 21 },
+ { 0X22, 0X86ED, 0X86ED, 0X46ED, 0X46ED, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5E, 0X5F, 0X65, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0XC7, 0X7, 0XA2, 0X15, 0XDF, 0X67, 0X2B, 0X15, 0X3B, 0X18, 0X5E, 0X64, 0X2B, 0X2B, 0X19, 0X2F, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 17 },
+ { 0X25, 0X86ED, 0X86ED, 0X46ED, 0X46ED, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5E, 0X5F, 0X65, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFF, 0XFF, 0X3F, 0XE2, 0X15, 0X17, 0X9F, 0X7F, 0X3F, 0X65, 0X42, 0X48, 0X80, 0X7F, 0X7F, 0X43, 0X29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 17 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 }
+ },
+ {
+ { 0, 0X86ED, 0X875A, 0X46ED, 0X475A, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X53, 0X65, 0X66, 0X6D, 0X6E, 0X77, 0X78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X43, 0X43, 0XB4, 0X82, 0X30, 0X34, 0XD0, 0X14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 8 },
+ { 0X2, 0X86ED, 0X874C, 0X46ED, 0X474C, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X5E, 0X5F, 0X65, 0X70, 0X72, 0X73, 0X77, 0X78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0X62, 0XA2, 0XFE, 0XFE, 0X24, 0X80, 0X14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 8 },
+ { 0X6, 0X86ED, 0X874C, 0X46ED, 0X474C, { 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X77, 0X78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X80, 0X14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 },
+ { 0XD, 0X86ED, 0XC5ED, 0X46ED, 0X85ED, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X53, 0X66, 0X6D, 0X6E, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X4F, 0X4F, 0X82, 0X2E, 0X32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 5 },
+ { 0XE, 0X86ED, 0X874C, 0X46ED, 0X474C, { 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X77, 0X78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X80, 0X14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 },
+ { 0XF, 0X86ED, 0X874C, 0X46ED, 0X474C, { 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X80, 0XD2, 0X67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 3 },
+ { 0X10, 0X86ED, 0X874C, 0X46ED, 0X474C, { 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X65, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XA2, 0X80, 0XD2, 0X67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 4 },
+ { 0X13, 0X86ED, 0X874C, 0X46ED, 0X474C, { 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X65, 0X77, 0X78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XA2, 0X80, 0X14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 3 },
+ { 0X28, 0X86ED, 0X472B, 0X46ED, 0X72B, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X53, 0X65, 0X66, 0X77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X3F, 0X3F, 0XB4, 0X87, 0XD0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 5 },
+ { 0X30, 0X86ED, 0X874C, 0X46ED, 0X474C, { 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X5C, 0X86ED, 0XC5B5, 0X46ED, 0X85B5, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X53, 0X65, 0X66, 0X6D, 0X6E, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X3F, 0X3F, 0X50, 0X78, 0X2C, 0X30, 0X40, 0XA, 0X57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 9 },
+ { 0X7C, 0X86ED, 0XC5B5, 0X46ED, 0X85B5, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X53, 0X65, 0X66, 0X6D, 0X6E, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X3F, 0X3F, 0X50, 0X7C, 0X2C, 0X30, 0X40, 0X40, 0X57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 9 },
+ { 0X22, 0X86ED, 0XC4B9, 0X46ED, 0X84B9, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X53, 0X65, 0X66, 0X6D, 0X6E, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X41, 0X41, 0X64, 0X73, 0X3D, 0X41, 0X90, 0X90, 0X57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 9 },
+ { 0X25, 0X86ED, 0XC447, 0X46ED, 0X8447, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X53, 0X65, 0X66, 0X6D, 0X6E, 0X77, 0X78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X3E, 0X3E, 0X80, 0X8E, 0X4D, 0X51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 8 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 }
+ },
+ {
+ { 0X2, 0, 0, 0, 0, { 0XC4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X5C, 0, 0, 0, 0, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X11, 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X9, 0X10, 0X11, 0X12, 0X15, 0X16, 0X33, 0X35, 0X36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X6C, 0X2D, 0X27, 0X27, 0X91, 0X57, 0X88, 0XDE, 0X10, 0X40, 0XC9, 0XEC, 0XC7, 0XC7, 0XDF, 0X6, 0, 0X31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 18 },
+ { 0X7C, 0, 0, 0, 0, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X11, 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X9, 0X10, 0X11, 0X12, 0X15, 0X16, 0X33, 0X35, 0X36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X7, 0X2D, 0X27, 0X27, 0X91, 0X57, 0X88, 0X5, 0X11, 0X40, 0XF5, 0X87, 0XEF, 0XEF, 0X6, 0X6, 0, 0X31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 18 },
+ { 0X22, 0, 0, 0, 0, { 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 }
+ },
+ {
+ { 0X2, 0, 0, 0, 0, { 0XC4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X5C, 0, 0, 0, 0, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X11, 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X9, 0X10, 0X11, 0X12, 0X15, 0X16, 0X33, 0X35, 0X36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X6C, 0X2D, 0X27, 0X27, 0X91, 0X2A, 0X90, 0XDE, 0X10, 0X40, 0XC9, 0XEC, 0XC7, 0XC7, 0XDF, 0X6, 0, 0X31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 18 },
+ { 0X7C, 0, 0, 0, 0, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X11, 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X9, 0X10, 0X11, 0X12, 0X15, 0X16, 0X33, 0X35, 0X36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X7, 0X2D, 0X27, 0X27, 0X91, 0X2A, 0X90, 0X5, 0X11, 0X40, 0XF5, 0X87, 0XEF, 0XEF, 0X6, 0X6, 0, 0X31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 18 },
+ { 0X22, 0, 0, 0, 0, { 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 }
+ },
+ { 0X86ED, 0X86ED, 0X46ED, 0X46ED, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X67, 0X6D, 0X6E, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X7F, 0X3F, 0X7F, 0XE3, 0X25, 0X57, 0XDF, 0X8F, 0X47, 0X6D, 0X52, 0XB, 0X4A, 0X50, 0XA0, 0, 0X4F, 0X53, 0X8F, 0X13, 0X8F, 0X13, 0X4B, 0X21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 24 },
+ { 0X86ED, 0X842B, 0X46ED, 0X442B, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X53, 0X65, 0X66, 0X67, 0X6D, 0X6E, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X47, 0X47, 0XA0, 0X7D, 0, 0X2D, 0X31, 0X80, 0X10, 0XA7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ {
+ { 0X86ED, 0X86ED, 0X46ED, 0X46ED, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X67, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X7F, 0X3F, 0X7F, 0XE3, 0X25, 0X57, 0XDF, 0XDF, 0X6F, 0X95, 0X52, 0XB, 0X72, 0X58, 0XA0, 0, 0XDF, 0X13, 0XDF, 0X13, 0X73, 0X29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 22 },
+ { 0X86ED, 0X86ED, 0X46ED, 0X46ED, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X65, 0X67, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1F, 0X8F, 0XCF, 0XE3, 0XA7, 0X2F, 0X57, 0XAB, 0XD1, 0X12, 0XAE, 0X54, 0XC8, 0, 0X57, 0X57, 0XAF, 0X25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 18 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 }
+ },
+ {
+ { 0X86ED, 0X874C, 0X46ED, 0X474C, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X53, 0X65, 0X66, 0X67, 0X6D, 0X6E, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X47, 0X47, 0XA0, 0X8C, 0, 0X60, 0X64, 0X81, 0X80, 0XA7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0X86ED, 0X84B9, 0X46ED, 0X44B9, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X53, 0X65, 0X66, 0X67, 0X6D, 0X6E, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X37, 0X37, 0XC8, 0X8C, 0, 0X7E, 0X82, 0X21, 0X20, 0XF7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 }
+ }
+ },
+ { 0X3, 0X3, 0X1, 12, 13, 8, 4,
+ { 0XE0FF, 0XF, 0XC0FC, 0X6F7B, 0, 0X70D0, 0, 0X7000 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0X45B9, 0X45B9, 0X5B9, 0X5B9, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X58, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X66, 0X67, 0X6D, 0X6E, 0X6F, 0X70, 0X71, 0X72, 0X73, 0X74, 0X75, 0X76, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X97, 0XFF, 0XFF, 0X97, 0X74, 0X46, 0X2F, 0X9F, 0X25, 0XFF, 0XFF, 0X25, 0XDA, 0X13, 0X2, 0X68, 0X40, 0XBE, 0X4, 0XCE, 0XD2, 0X24, 0XFF, 0X23, 0XFF, 0X25, 0X23, 0X3, 0X39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 32 },
+ {
+ { 0, 0X45B9, 0X45B9, 0X5B9, 0X5B9, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X51, 0X52, 0X53, 0X54, 0X56, 0X57, 0X5C, 0X65, 0X6D, 0X6E, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X9B, 0XCF, 0XE7, 0X7F, 0X2B, 0X17, 0X87, 0X92, 0XB4, 0X59, 0X5D, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 11 },
+ { 0X2, 0X45B9, 0X45B9, 0X5B9, 0X5B9, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X52, 0X53, 0X59, 0X5A, 0X5B, 0X5E, 0X5F, 0X65, 0X6D, 0X6E, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0XB7, 0X4F, 0X8F, 0X47, 0X6D, 0X4A, 0X4B, 0XA2, 0XCD, 0XD1, 0X8F, 0X8F, 0X4B, 0X21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 15 },
+ { 0X6, 0X45B9, 0X45B9, 0X5B9, 0X5B9, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0X47, 0X6D, 0X4A, 0X50, 0X8F, 0X8F, 0X4B, 0X21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 9 },
+ { 0XE, 0X45B9, 0X45B9, 0X5B9, 0X5B9, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0X47, 0X6D, 0X4A, 0X50, 0X8F, 0X8F, 0X4B, 0X21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 9 },
+ { 0XF, 0X45B9, 0X45B9, 0X5B9, 0X5B9, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X5D, 0X2E, 0X54, 0X31, 0X57, 0X5D, 0X5D, 0X32, 0X28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 9 },
+ { 0X10, 0X45B9, 0X45B9, 0X5B9, 0X5B9, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5E, 0X5F, 0X65, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X5D, 0X2E, 0X54, 0X31, 0X57, 0XA2, 0X5D, 0X5D, 0X32, 0X28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0X13, 0X45B9, 0X45B9, 0X5B9, 0X5B9, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5E, 0X5F, 0X65, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0X47, 0X6D, 0X4A, 0X50, 0XA2, 0X8F, 0X8F, 0X4B, 0X21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0X30, 0X45B9, 0X45B9, 0X5B9, 0X5B9, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0X47, 0X6D, 0X4A, 0X50, 0X8F, 0X8F, 0X4B, 0X21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 9 },
+ { 0X5C, 0X45B9, 0X45B9, 0X5B9, 0X5B9, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X3F, 0X1F, 0XB7, 0XE3, 0X16, 0X4F, 0XBF, 0XC7, 0XE3, 0X9, 0X51, 0X3, 0XE6, 0X2C, 0X50, 0XC7, 0X3, 0XC7, 0X3, 0XE7, 0X1D, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 21 },
+ { 0X7C, 0X45B9, 0X45B9, 0X5B9, 0X5B9, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X3F, 0X1F, 0XB7, 0XE3, 0X16, 0X4F, 0XBF, 0XEF, 0XF7, 0X1D, 0X51, 0X3, 0XFA, 0X20, 0X50, 0XEF, 0X3, 0XEF, 0X3, 0XFB, 0X11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 21 },
+ { 0X22, 0X45B9, 0X45B9, 0X5B9, 0X5B9, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X65, 0X70, 0X72, 0X75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0X47, 0XDF, 0XE3, 0X16, 0X77, 0XE7, 0X2B, 0X15, 0X3B, 0X52, 0X18, 0X5E, 0X64, 0X2B, 0X2B, 0X19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 17 },
+ { 0X25, 0X45B9, 0X45B9, 0X5B9, 0X5B9, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5E, 0X5F, 0X65, 0X70, 0X72, 0X75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFF, 0X7F, 0X17, 0X16, 0X1F, 0X1F, 0X7F, 0X3F, 0X65, 0X42, 0X48, 0X80, 0X7F, 0X7F, 0X43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 15 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 }
+ },
+ {
+ { 0, 0X45B9, 0X853D, 0X5B9, 0X453D, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X66, 0X6D, 0X6E, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X91, 0XFF, 0XFF, 0X91, 0X74, 0X46, 0X2F, 0X9F, 0XFF, 0XFF, 0X25, 0XDA, 0X13, 0X2, 0X68, 0XB4, 0XA0, 0X2D, 0X31, 0XFF, 0X23, 0XFF, 0X23, 0X3, 0X39, 0X40, 0X14, 0XA7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 28 },
+ { 0X2, 0X45B9, 0X451B, 0X5B9, 0X51B, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X53, 0X65, 0X66, 0X6D, 0X6E, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XA9, 0XA9, 0XA2, 0XB8, 0X60, 0X64, 0X1, 0X14, 0XA7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 9 },
+ { 0X6, 0X45B9, 0X451B, 0X5B9, 0X51B, { 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X55, 0X78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X26, 0X14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 },
+ { 0XD, 0X45B9, 0XC5ED, 0X5B9, 0X85ED, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X66, 0X6D, 0X6E, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XAA, 0XFF, 0XFF, 0XAA, 0X74, 0X46, 0X2F, 0X9F, 0XFF, 0XFF, 0X25, 0XDA, 0X13, 0X2, 0X68, 0XA0, 0X2E, 0X32, 0XFF, 0X23, 0XFF, 0X23, 0X3, 0X39, 0X10, 0XA7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 26 },
+ { 0XE, 0X45B9, 0X451B, 0X5B9, 0X51B, { 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X75, 0X76, 0X78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X4, 0X49, 0X14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 3 },
+ { 0XF, 0X45B9, 0X451B, 0X5B9, 0X51B, { 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XD2, 0X67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 },
+ { 0X10, 0X45B9, 0X451B, 0X5B9, 0X51B, { 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X65, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XA2, 0X1, 0XD2, 0X67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 4 },
+ { 0X13, 0X45B9, 0X451B, 0X5B9, 0X51B, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X65, 0X67, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XA2, 0, 0X1, 0X14, 0XA7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 5 },
+ { 0X30, 0X45B9, 0X451B, 0X5B9, 0X51B, { 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X5C, 0X45B9, 0X851B, 0X5B9, 0X85B6, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X65, 0X66, 0X6D, 0X6E, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X8C, 0X2D, 0X31, 0XA, 0X57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 6 },
+ { 0X7C, 0X45B9, 0X851B, 0X5B9, 0X85B6, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X65, 0X66, 0X6D, 0X6E, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X8C, 0X2D, 0X31, 0X40, 0X57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 6 },
+ { 0X22, 0X45B9, 0XC4B9, 0X5B9, 0X84B9, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X53, 0X65, 0X66, 0X6D, 0X6E, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X99, 0X99, 0X64, 0XB0, 0X3D, 0X41, 0X40, 0X90, 0X57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 9 },
+ { 0X25, 0X45B9, 0X471F, 0X5B9, 0X877C, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X65, 0X6D, 0X6E, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X80, 0X4D, 0X51, 0X98, 0, 0X97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 6 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 }
+ },
+ {
+ { 0X2, 0, 0, 0, 0, { 0XC4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X29, 0, 0, 0, 0, { 0XC4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X2A, 0, 0, 0, 0, { 0XD4, 0XC4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X9, 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XC7, 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 },
+ { 0X2B, 0, 0, 0, 0, { 0XC4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X2C, 0, 0, 0, 0, { 0XC4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X5C, 0, 0, 0, 0, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X11, 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X9, 0X10, 0X11, 0X12, 0X15, 0X16, 0X33, 0X35, 0X36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X6C, 0X2D, 0X27, 0X27, 0X91, 0X6A, 0X98, 0XDE, 0X10, 0X40, 0XC9, 0XEC, 0XC7, 0XC7, 0XDF, 0X6, 0, 0X31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 18 },
+ { 0X7C, 0, 0, 0, 0, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X11, 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X9, 0X10, 0X11, 0X12, 0X15, 0X16, 0X33, 0X35, 0X36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X7, 0X2D, 0X27, 0X27, 0X91, 0X6A, 0X98, 0X5, 0X11, 0X40, 0XF5, 0X87, 0XEF, 0XEF, 0X6, 0X6, 0, 0X31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 18 },
+ { 0X22, 0, 0, 0, 0, { 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 }
+ },
+ {
+ { 0X2, 0, 0, 0, 0, { 0XC4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X5C, 0, 0, 0, 0, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X11, 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X9, 0X10, 0X11, 0X12, 0X15, 0X16, 0X33, 0X35, 0X36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X6C, 0X2D, 0X27, 0X27, 0X91, 0X2A, 0X90, 0XDE, 0X10, 0X40, 0XC9, 0XEC, 0XC7, 0XC7, 0XDF, 0X6, 0, 0X31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 18 },
+ { 0X7C, 0, 0, 0, 0, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X11, 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X9, 0X10, 0X11, 0X12, 0X15, 0X16, 0X33, 0X35, 0X36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X7, 0X2D, 0X27, 0X27, 0X91, 0X2A, 0X90, 0X5, 0X11, 0X40, 0XF5, 0X87, 0XEF, 0XEF, 0X6, 0X6, 0, 0X31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 18 },
+ { 0X22, 0, 0, 0, 0, { 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 }
+ },
+ { 0X45B9, 0X45B9, 0X5B9, 0X5B9, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X67, 0X6D, 0X6E, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X9F, 0X7F, 0XBF, 0X57, 0XEB, 0X26, 0XEF, 0X5F, 0X8F, 0X47, 0X6D, 0X12, 0XB, 0X4A, 0X50, 0XA0, 0, 0X65, 0X69, 0X8F, 0X13, 0X8F, 0X13, 0X4B, 0X21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 25 },
+ { 0X45B9, 0X45B9, 0X5B9, 0X5B9, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X67, 0X6D, 0X6E, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X9F, 0X7F, 0XBF, 0X57, 0XEB, 0X26, 0XEF, 0X5F, 0X8F, 0X47, 0X6D, 0X12, 0XB, 0X4A, 0X50, 0XA0, 0, 0X65, 0X69, 0X8F, 0X13, 0X8F, 0X13, 0X4B, 0X21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 25 },
+ {
+ { 0X45B9, 0X45B9, 0X5B9, 0X5B9, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X67, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X7F, 0XBF, 0X57, 0XEB, 0X26, 0XEF, 0X5F, 0XDF, 0X6F, 0X95, 0X12, 0XB, 0X72, 0X58, 0XA0, 0, 0XDF, 0X13, 0XDF, 0X13, 0X73, 0X29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 22 },
+ { 0X45B9, 0X45B9, 0X5B9, 0X5B9, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X65, 0X67, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1F, 0XF, 0XA7, 0X2C, 0X36, 0X3F, 0XAF, 0X57, 0XAB, 0XD1, 0X92, 0XAE, 0X54, 0XC8, 0, 0X57, 0X57, 0XAF, 0X25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 19 },
+ { 0X45B9, 0X45B9, 0X5B9, 0X5B9, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X7F, 0X17, 0X34, 0X36, 0XAF, 0X1F, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 7 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 }
+ },
+ {
+ { 0X45B9, 0X451B, 0X5B9, 0X51B, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X53, 0X65, 0X66, 0X67, 0X6D, 0X6E, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XA9, 0XA9, 0XA0, 0XB8, 0, 0X60, 0X64, 0, 0X80, 0XA7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0X45B9, 0X84B9, 0X5B9, 0X44B9, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X53, 0X65, 0X66, 0X67, 0X6D, 0X6E, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XBF, 0XBF, 0XC8, 0XBB, 0, 0X82, 0X86, 0X80, 0X20, 0XE7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0X45B9, 0X8448, 0X5B9, 0X4448, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X65, 0X6D, 0X6E, 0X70, 0X71, 0X72, 0X74, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X87, 0XFF, 0XFF, 0X87, 0X74, 0X46, 0X2F, 0X9F, 0, 0, 0, 0XC3, 0X1B, 0, 0XA0, 0XA4, 0, 0X33, 0, 0X33, 0X34, 0XFF, 0XF7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 23 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 }
+ }
+ },
+ { 0X4, 0X4, 0X1, 14, 15, 8, 4,
+ { 0XE0FF, 0XF, 0XC0FC, 0X6F7B, 0X1B0, 0X7DD0, 0, 0X7000 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X58, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X66, 0X67, 0X6D, 0X6E, 0X6F, 0X70, 0X71, 0X72, 0X73, 0X74, 0X75, 0X76, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X97, 0XFF, 0XFF, 0X97, 0X74, 0X46, 0X2F, 0X9F, 0X29, 0XFF, 0XFF, 0X29, 0XE3, 0X1C, 0, 0X83, 0X40, 0XBE, 0X4, 0XCE, 0XD2, 0X28, 0XFF, 0X34, 0XFF, 0X29, 0X34, 0X1, 0X44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 32 },
+ {
+ { 0, 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X51, 0X52, 0X53, 0X54, 0X56, 0X57, 0X5C, 0X65, 0X6D, 0X6E, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X9B, 0XCF, 0XE7, 0X7F, 0X2B, 0X17, 0X87, 0X92, 0XB4, 0X59, 0X5D, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 11 },
+ { 0X2, 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X65, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0XC7, 0XF1, 0X12, 0XC8, 0X4B, 0XA2, 0X8F, 0X8F, 0XC9, 0X2C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 11 },
+ { 0X6, 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0XC7, 0XF1, 0X12, 0XC8, 0X4B, 0X8F, 0X8F, 0XC9, 0X2C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0XE, 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0XC7, 0XF1, 0X12, 0XC8, 0X4B, 0X8F, 0X8F, 0XC9, 0X2C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0XF, 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X5D, 0XAE, 0XD8, 0X12, 0XAF, 0X52, 0X5D, 0X5D, 0XB0, 0X23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0X10, 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X65, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X5D, 0XAE, 0XD8, 0X12, 0XAF, 0X52, 0XA2, 0X5D, 0X5D, 0XB0, 0X23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 11 },
+ { 0X13, 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X65, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0XC7, 0XF1, 0X12, 0XC8, 0X4B, 0XA2, 0X8F, 0X8F, 0XC9, 0X2C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 11 },
+ { 0X30, 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0XC7, 0XF1, 0X12, 0XC8, 0X4B, 0X8F, 0X8F, 0XC9, 0X2C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0X54, 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X71, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X7F, 0XA9, 0XDB, 0X14, 0X80, 0X63, 0X24, 0X24, 0X81, 0X34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0X58, 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XBF, 0XDF, 0X9, 0XE0, 0X63, 0XBF, 0XBF, 0XE1, 0X34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 9 },
+ { 0X5C, 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X3F, 0X1F, 0XB7, 0XE3, 0X16, 0X4F, 0XBF, 0XC7, 0X63, 0X8D, 0X52, 0X4, 0X64, 0X47, 0X50, 0XC7, 0X4, 0XC7, 0X4, 0X65, 0X28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 21 },
+ { 0X7C, 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X3F, 0X1F, 0XB7, 0XE3, 0X16, 0X4F, 0XBF, 0XEF, 0X77, 0XA1, 0X52, 0X4, 0X78, 0X5B, 0X50, 0XEF, 0X4, 0XEF, 0X4, 0X79, 0X2C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 21 },
+ { 0X22, 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X65, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0X47, 0XDF, 0XE3, 0X16, 0X77, 0XE7, 0X2B, 0X95, 0XBF, 0X52, 0X96, 0X59, 0X64, 0X2B, 0X2B, 0X97, 0X2A, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 18 },
+ { 0X25, 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X65, 0X70, 0X72, 0X75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFF, 0X7F, 0X17, 0X16, 0XAF, 0X1F, 0X7F, 0XBF, 0XE9, 0X12, 0XC0, 0X43, 0X80, 0X7F, 0X7F, 0XC1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 16 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 }
+ },
+ {
+ { 0, 0X8479, 0X8663, 0X4479, 0X4441, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X53, 0X65, 0X66, 0X6D, 0X6E, 0X77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X92, 0X92, 0XB4, 0XA8, 0X2E, 0X32, 0X40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 7 },
+ { 0X2, 0X8479, 0X719, 0X4479, 0X7B2, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X53, 0X65, 0X66, 0X6D, 0X6E, 0X77, 0X78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XBF, 0XBF, 0XA2, 0XB5, 0X61, 0X65, 0X1, 0X90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 8 },
+ { 0X6, 0X8479, 0X719, 0X4479, 0X7B2, { 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X66, 0X78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XAE, 0X90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 },
+ { 0XD, 0X8479, 0X719, 0X4479, 0X7B2, { 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0XE, 0X8479, 0X719, 0X4479, 0X7B2, { 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0XF, 0X8479, 0X719, 0X4479, 0X7B2, { 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X5E, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X10, 0X8479, 0X719, 0X4479, 0X7B2, { 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X65, 0X78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XA2, 0X5E, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 },
+ { 0X13, 0X8479, 0X719, 0X4479, 0X7B2, { 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X65, 0X78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XA2, 0X90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 },
+ { 0X30, 0X8479, 0X719, 0X4479, 0X7B2, { 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X77, 0X78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0X90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 },
+ { 0X54, 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X71, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X7F, 0XA9, 0XDB, 0X14, 0X80, 0X63, 0X24, 0X24, 0X81, 0X34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0X58, 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XBF, 0XDF, 0X9, 0XE0, 0X63, 0XBF, 0XBF, 0XE1, 0X34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 9 },
+ { 0X5C, 0X8479, 0X4719, 0X4479, 0X87E4, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X65, 0X66, 0X6D, 0X6E, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X82, 0X2D, 0X31, 0XC8, 0X17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 6 },
+ { 0X7C, 0X8479, 0X4719, 0X4479, 0X87E4, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X65, 0X66, 0X6D, 0X6E, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X82, 0X2D, 0X31, 0XF0, 0X17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 6 },
+ { 0X22, 0X8479, 0X4721, 0X4479, 0X4742, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X65, 0X6D, 0X6E, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X64, 0X3D, 0X41, 0X40, 0X2C, 0X57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 6 },
+ { 0X25, 0X8479, 0X4729, 0X4479, 0X4752, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X65, 0X6D, 0X6E, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X80, 0X4D, 0X51, 0X98, 0X7F, 0X57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 6 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 }
+ },
+ {
+ { 0X2, 0, 0, 0, 0, { 0XC4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X29, 0, 0, 0, 0, { 0XC4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X2A, 0, 0, 0, 0, { 0XC4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X2B, 0, 0, 0, 0, { 0XC4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X2C, 0, 0, 0, 0, { 0XC4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X5C, 0, 0, 0, 0, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X11, 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X9, 0X10, 0X11, 0X12, 0X15, 0X16, 0X33, 0X35, 0X36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X6C, 0X2D, 0X27, 0X27, 0X91, 0X6A, 0X98, 0XDE, 0X10, 0X40, 0XC9, 0XEC, 0XC7, 0XC7, 0XDF, 0X6, 0, 0X31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 18 },
+ { 0X7C, 0, 0, 0, 0, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X11, 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X9, 0X10, 0X11, 0X12, 0X15, 0X16, 0X33, 0X35, 0X36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X7, 0X2D, 0X27, 0X27, 0X91, 0X6A, 0X98, 0X5, 0X11, 0X40, 0XF5, 0X87, 0XEF, 0XEF, 0X6, 0X6, 0, 0X31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 18 },
+ { 0X22, 0, 0, 0, 0, { 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 }
+ },
+ {
+ { 0X2, 0, 0, 0, 0, { 0XC4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X5C, 0, 0, 0, 0, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X11, 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X9, 0X10, 0X11, 0X12, 0X15, 0X16, 0X33, 0X35, 0X36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X6C, 0X2D, 0X27, 0X27, 0X91, 0X2A, 0X90, 0XDE, 0X10, 0X40, 0XC9, 0XEC, 0XC7, 0XC7, 0XDF, 0X6, 0, 0X31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 18 },
+ { 0X7C, 0, 0, 0, 0, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X11, 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X9, 0X10, 0X11, 0X12, 0X15, 0X16, 0X33, 0X35, 0X36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X7, 0X2D, 0X27, 0X27, 0X91, 0X2A, 0X90, 0X5, 0X11, 0X40, 0XF5, 0X87, 0XEF, 0XEF, 0X6, 0X6, 0, 0X31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 18 },
+ { 0X22, 0, 0, 0, 0, { 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 }
+ },
+ { 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X67, 0X6D, 0X6E, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X9F, 0X7F, 0XBF, 0X57, 0XEB, 0X26, 0XEF, 0X5F, 0X8F, 0XC7, 0XF1, 0X12, 0XC, 0XC8, 0X4B, 0XA0, 0, 0X65, 0X69, 0X8F, 0X14, 0X8F, 0X14, 0XC9, 0X2C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 25 },
+ { 0X8479, 0X719, 0X4479, 0X7B2, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X53, 0X65, 0X66, 0X67, 0X6D, 0X6E, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X9D, 0X9D, 0XA0, 0X91, 0, 0X2D, 0X31, 0X90, 0X67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 9 },
+ {
+ { 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X67, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X7F, 0XBF, 0X57, 0XEB, 0X26, 0XEF, 0X5F, 0XDF, 0XEF, 0X19, 0X1A, 0XC, 0XF0, 0X53, 0XA0, 0, 0XDF, 0X14, 0XDF, 0X14, 0XF1, 0X24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 22 },
+ { 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X67, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1F, 0XF, 0XA7, 0X2C, 0X36, 0X3F, 0XAF, 0X57, 0X2B, 0X55, 0X9B, 0X14, 0X2C, 0X6F, 0XC8, 0, 0X57, 0X24, 0X57, 0X24, 0X2D, 0X30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 22 },
+ { 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X71, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X7F, 0X17, 0X34, 0X36, 0XAF, 0X1F, 0X7F, 0XA9, 0XDB, 0X14, 0X80, 0X63, 0, 0X24, 0X24, 0X81, 0X34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 17 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 }
+ },
+ {
+ { 0X8479, 0X719, 0X4479, 0X7B2, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X53, 0X65, 0X66, 0X67, 0X6D, 0X6E, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X9D, 0X9D, 0XA0, 0XAA, 0, 0X5F, 0X63, 0XE0, 0X67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 9 },
+ { 0X8479, 0X721, 0X4479, 0X742, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X53, 0X65, 0X67, 0X6D, 0X6E, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X9D, 0X9D, 0XC8, 0, 0X7F, 0X83, 0X81, 0X58, 0XA7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 9 },
+ { 0X8479, 0X51E, 0X4479, 0X53C, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X53, 0X65, 0X6D, 0X6E, 0X77, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X9D, 0X9D, 0, 0XA3, 0XA7, 0X34, 0XF7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 7 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 }
+ }
+ },
+ { 0X5, 0X5, 0X1, 14, 14, 8, 10,
+ { 0XE0FF, 0XF, 0XC0FC, 0X6F7B, 0X1B0, 0X7DD0, 0X1C0, 0X7000 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X58, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X66, 0X67, 0X6D, 0X6E, 0X6F, 0X70, 0X71, 0X72, 0X73, 0X74, 0X75, 0X76, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X97, 0X77, 0X77, 0X97, 0X75, 0X56, 0XA7, 0X17, 0X29, 0X19, 0X19, 0X29, 0XA4, 0X24, 0X1A, 0X9D, 0X5E, 0XBE, 0X4, 0XCE, 0XD2, 0X28, 0X19, 0X44, 0X19, 0X29, 0X44, 0X1B, 0X4E, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 32 },
+ {
+ { 0, 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X51, 0X52, 0X53, 0X54, 0X56, 0X57, 0X65, 0X6D, 0X6E, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X9B, 0XCF, 0X23, 0X43, 0X2C, 0X53, 0XC3, 0XB4, 0X59, 0X5D, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0X2, 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X65, 0X6D, 0X6E, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0X8F, 0XD4, 0XE4, 0X92, 0XD5, 0X58, 0XA2, 0XCD, 0XD1, 0X8F, 0X8F, 0XD6, 0X29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 14 },
+ { 0X6, 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X66, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0XD4, 0XE4, 0X92, 0XD5, 0X58, 0XC3, 0X8F, 0X8F, 0XD6, 0X29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 11 },
+ { 0XE, 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0XD4, 0XE4, 0X92, 0XD5, 0X58, 0X8F, 0X8F, 0XD6, 0X29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0XF, 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X5D, 0XBB, 0XCB, 0X92, 0XBC, 0X5F, 0X5D, 0X5D, 0XBD, 0X20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0X10, 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X65, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X5D, 0XBB, 0XCB, 0X92, 0XBC, 0X5F, 0XA2, 0X5D, 0X5D, 0XBD, 0X20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 11 },
+ { 0X13, 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X65, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0XD4, 0XE4, 0X92, 0XD5, 0X58, 0XA2, 0X8F, 0X8F, 0XD6, 0X29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 11 },
+ { 0X30, 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0XD4, 0XE4, 0X92, 0XD5, 0X58, 0X8F, 0X8F, 0XD6, 0X29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0X54, 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X71, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8C, 0X9C, 0XDB, 0X14, 0X8D, 0X70, 0X24, 0X24, 0X8E, 0X31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0X58, 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XBF, 0XEC, 0XFC, 0XDB, 0XED, 0X70, 0XBF, 0XBF, 0XEE, 0X31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0X5C, 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X3F, 0X5B, 0X7B, 0XE3, 0X16, 0X8B, 0XFB, 0XC7, 0X70, 0X80, 0X52, 0X4, 0X71, 0X54, 0X50, 0XC7, 0X4, 0XC7, 0X4, 0X72, 0X25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 21 },
+ { 0X7C, 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X3F, 0X5B, 0X7B, 0XE3, 0X16, 0X8B, 0XFB, 0XEF, 0X84, 0X94, 0X52, 0X4, 0X85, 0X48, 0X50, 0XEF, 0X4, 0XEF, 0X4, 0X86, 0X29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 21 },
+ { 0X22, 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X65, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0X83, 0XA3, 0XE3, 0X16, 0XB3, 0X23, 0X2B, 0XA2, 0XB2, 0X12, 0XA3, 0X46, 0X64, 0X2B, 0X2B, 0XA4, 0X27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 18 },
+ { 0X25, 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X65, 0X70, 0X72, 0X75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFF, 0XBB, 0XDB, 0XE3, 0X16, 0XEB, 0X5B, 0X7F, 0XCC, 0XDC, 0X12, 0XCD, 0X50, 0X80, 0X7F, 0X7F, 0XCE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 17 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 }
+ },
+ {
+ { 0, 0X8479, 0X719, 0X4479, 0X7B2, { 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X2, 0X8479, 0X719, 0X4479, 0X7B2, { 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X65, 0X78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XA2, 0X86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 },
+ { 0X6, 0X8479, 0X719, 0X4479, 0X7B2, { 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0XE, 0X8479, 0X719, 0X4479, 0X7B2, { 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0XF, 0X8479, 0X719, 0X4479, 0X7B2, { 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X10, 0X8479, 0X719, 0X4479, 0X7B2, { 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X65, 0X78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XA2, 0X54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 },
+ { 0X13, 0X8479, 0X719, 0X4479, 0X7B2, { 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X65, 0X78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XA2, 0X86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 },
+ { 0X30, 0X8479, 0X719, 0X4479, 0X7B2, { 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X54, 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X66, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XCA, 0XEC, 0XB7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 3 },
+ { 0X58, 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X66, 0X78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XCA, 0XA8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 },
+ { 0X5C, 0X8479, 0X4719, 0X4479, 0X87E4, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X65, 0X66, 0X6D, 0X6E, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X8C, 0X2D, 0X31, 0XEA, 0XC2, 0X7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 7 },
+ { 0X7C, 0X8479, 0X4719, 0X4479, 0X87E4, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X65, 0X66, 0X6D, 0X6E, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X8C, 0X2D, 0X31, 0XEA, 0XEA, 0X7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 7 },
+ { 0X22, 0X8479, 0X4721, 0X4479, 0X4742, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X65, 0X66, 0X6D, 0X6E, 0X77, 0X78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X64, 0XAA, 0X3D, 0X41, 0X24, 0X24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 6 },
+ { 0X25, 0X8479, 0X4729, 0X4479, 0X4752, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X65, 0X66, 0X6D, 0X6E, 0X77, 0X78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X80, 0XAA, 0X4D, 0X51, 0X76, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 6 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 }
+ },
+ {
+ { 0X2, 0, 0, 0, 0, { 0XC4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X29, 0, 0, 0, 0, { 0XC4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X2A, 0, 0, 0, 0, { 0XC4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X2B, 0, 0, 0, 0, { 0XC4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X2C, 0, 0, 0, 0, { 0XC4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X5C, 0, 0, 0, 0, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X11, 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X9, 0X10, 0X11, 0X12, 0X15, 0X16, 0X33, 0X35, 0X36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X6C, 0X2D, 0X27, 0X27, 0X91, 0X71, 0X9F, 0XDE, 0X10, 0X40, 0XC9, 0XEC, 0XC7, 0XC7, 0XDF, 0X6, 0, 0X31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 18 },
+ { 0X7C, 0, 0, 0, 0, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X11, 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X9, 0X10, 0X11, 0X12, 0X15, 0X16, 0X33, 0X35, 0X36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X7, 0X2D, 0X27, 0X27, 0X91, 0X71, 0X9F, 0X5, 0X11, 0X40, 0XF5, 0X87, 0XEF, 0XEF, 0X6, 0X6, 0, 0X31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 18 },
+ { 0X22, 0, 0, 0, 0, { 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 }
+ },
+ {
+ { 0, 0, 0, 0, 0, { 0XC4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X2, 0, 0, 0, 0, { 0XC4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X28, 0, 0, 0, 0, { 0XC4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X29, 0, 0, 0, 0, { 0XC4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X2A, 0, 0, 0, 0, { 0XC4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X2B, 0, 0, 0, 0, { 0XC4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X2C, 0, 0, 0, 0, { 0XC4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X5C, 0, 0, 0, 0, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X11, 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X9, 0X10, 0X11, 0X12, 0X15, 0X16, 0X33, 0X35, 0X36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X6C, 0X2D, 0X27, 0X27, 0X91, 0X2A, 0X90, 0XDE, 0X10, 0X40, 0XC9, 0XEC, 0XC7, 0XC7, 0XDF, 0X6, 0, 0X31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 18 },
+ { 0X7C, 0, 0, 0, 0, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X11, 0, 0X1, 0X2, 0X3, 0X4, 0X5, 0X6, 0X7, 0X9, 0X10, 0X11, 0X12, 0X15, 0X16, 0X33, 0X35, 0X36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X7, 0X2D, 0X27, 0X27, 0X91, 0X2A, 0X90, 0X5, 0X11, 0X40, 0XF5, 0X87, 0XEF, 0XEF, 0X6, 0X6, 0, 0X31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 18 }
+ },
+ { 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X67, 0X6D, 0X6E, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X9F, 0X7F, 0XFB, 0X1B, 0X2B, 0X26, 0X2B, 0X9B, 0X8F, 0XD4, 0XE4, 0X92, 0XC, 0XD5, 0X58, 0XA0, 0, 0X65, 0X69, 0X8F, 0X14, 0X8F, 0X14, 0XD6, 0X29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 25 },
+ { 0X8479, 0X719, 0X4479, 0X7B2, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X53, 0X65, 0X66, 0X67, 0X6D, 0X6E, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X9D, 0X9D, 0XA0, 0XA0, 0, 0X2D, 0X31, 0XD4, 0X86, 0X57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ {
+ { 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X67, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X7F, 0XFB, 0X1B, 0X2B, 0X26, 0X2B, 0X9B, 0XDF, 0XFC, 0XC, 0X9A, 0XC, 0XFD, 0X40, 0XA0, 0, 0XDF, 0X14, 0XDF, 0X14, 0XFE, 0X21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 22 },
+ { 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X67, 0X70, 0X71, 0X72, 0X73, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1F, 0X4B, 0X6B, 0X2C, 0X36, 0X7B, 0XEB, 0X57, 0X38, 0X48, 0X9B, 0X14, 0X39, 0X7C, 0XC8, 0, 0X57, 0X24, 0X57, 0X29, 0X24, 0X3A, 0X3D, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 23 },
+ { 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFF, 0XBB, 0XDB, 0X2C, 0X36, 0XEB, 0X5B, 0XFF, 0X8C, 0X9C, 0XDB, 0X14, 0X8D, 0X70, 0, 0XFF, 0X24, 0XFF, 0X24, 0X8E, 0X31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 21 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFF, 0X3B, 0X5B, 0X46, 0X6B, 0XDB, 0XFF, 0XC, 0X1C, 0XE4, 0X1C, 0XD, 0X90, 0X40, 0XFF, 0X34, 0XFF, 0X34, 0XE, 0X41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 20 }
+ },
+ {
+ { 0X8479, 0X719, 0X4479, 0X7B2, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X53, 0X65, 0X67, 0X6D, 0X6E, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X9D, 0X9D, 0XA0, 0, 0X5F, 0X63, 0XD4, 0XD4, 0X57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 9 },
+ { 0X8479, 0X721, 0X4479, 0X742, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X53, 0X65, 0X67, 0X6D, 0X6E, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X9D, 0X9D, 0XC8, 0, 0X7F, 0X83, 0X48, 0X48, 0XA7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 9 },
+ { 0X8479, 0X51E, 0X4479, 0X53C, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X53, 0X65, 0X66, 0X6D, 0X6E, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X9D, 0X9D, 0, 0XC3, 0XA3, 0XA7, 0XEC, 0XEC, 0XA7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 9 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0X8479, 0X8479, 0X4479, 0X4479, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X65, 0X66, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X40, 0XC9, 0XA8, 0XE6, 0XF7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 5 }
+ }
+ },
+ { 0X6, 0X6, 0X1, 15, 15, 4, 4,
+ { 0XE0FF, 0XF, 0XC0FC, 0X6F7B, 0X37B0, 0X7DDD, 0X1C0, 0X7000 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0X4571, 0X4571, 0X571, 0X571, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X58, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X66, 0X67, 0X6D, 0X6E, 0X6F, 0X70, 0X71, 0X72, 0X73, 0X74, 0X75, 0X76, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X6F, 0X3F, 0X3F, 0, 0X86, 0X68, 0X7F, 0X3F, 0XE1, 0XAF, 0XAF, 0XE1, 0XE4, 0X24, 0XB0, 0X93, 0X90, 0XFA, 0X4, 0X9, 0XD, 0XE0, 0XAF, 0X4C, 0XAF, 0XE1, 0X44, 0XB1, 0X44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 32 },
+ {
+ { 0, 0X4571, 0X4571, 0X571, 0X571, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X56, 0X57, 0X65, 0X6D, 0X6E, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XCF, 0X87, 0XB7, 0X34, 0XC7, 0X87, 0XB4, 0X73, 0X77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 9 },
+ { 0X2, 0X4571, 0X4571, 0X571, 0X571, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X55, 0X59, 0X5A, 0X5B, 0X5E, 0X5F, 0X65, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XA8, 0X8F, 0X1F, 0X51, 0X20, 0X73, 0XA2, 0X8F, 0X8F, 0X21, 0X34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 11 },
+ { 0X6, 0X4571, 0X4571, 0X571, 0X571, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0X1F, 0X51, 0X20, 0X63, 0X8F, 0X8F, 0X21, 0X34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 9 },
+ { 0XE, 0X4571, 0X4571, 0X571, 0X571, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0X1F, 0X51, 0X20, 0X63, 0X8F, 0X8F, 0X21, 0X34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 9 },
+ { 0XF, 0X4571, 0X4571, 0X571, 0X571, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X5D, 0X6, 0X38, 0X7, 0X6A, 0X5D, 0X5D, 0X8, 0X3B, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 9 },
+ { 0X10, 0X4571, 0X4571, 0X571, 0X571, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5E, 0X5F, 0X65, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X5D, 0X6, 0X38, 0X7, 0X6A, 0XA2, 0X5D, 0X5D, 0X8, 0X3B, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0X13, 0X4571, 0X4571, 0X571, 0X571, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5E, 0X5F, 0X65, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0X1F, 0X51, 0X20, 0X63, 0XA2, 0X8F, 0X8F, 0X21, 0X34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0X30, 0X4571, 0X4571, 0X571, 0X571, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5E, 0X5F, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0X1F, 0X51, 0X20, 0X63, 0X8F, 0X8F, 0X21, 0X34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 9 },
+ { 0X54, 0X4571, 0X4571, 0X571, 0X571, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X71, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XD7, 0X9, 0XA3, 0X14, 0XD8, 0X7B, 0X2C, 0X24, 0XD9, 0X3C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0X58, 0X4571, 0X4571, 0X571, 0X571, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X59, 0X5A, 0X5B, 0X5E, 0X70, 0X72, 0X75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XBF, 0X37, 0X69, 0X38, 0XBF, 0XBF, 0X39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 7 },
+ { 0X5C, 0X4571, 0X4571, 0X571, 0X571, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X3F, 0XBF, 0XEF, 0XEB, 0X18, 0XFF, 0XBF, 0XC7, 0XBB, 0XED, 0X12, 0X4, 0XBC, 0X5F, 0X50, 0XC7, 0XC, 0XC7, 0X4, 0XBD, 0X20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 21 },
+ { 0X7C, 0X4571, 0X4571, 0X571, 0X571, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X3F, 0XBF, 0XEF, 0XEB, 0X18, 0XFF, 0XBF, 0XEF, 0XCF, 0X1, 0X1A, 0X4, 0XD0, 0X53, 0X50, 0XEF, 0XC, 0XEF, 0X4, 0XD1, 0X24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 21 },
+ { 0X22, 0X4571, 0X4571, 0X571, 0X571, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8F, 0XE7, 0X17, 0X33, 0X18, 0X27, 0XE7, 0X2B, 0XED, 0X1F, 0X9A, 0XC, 0XEE, 0X51, 0X64, 0X2B, 0X2B, 0XEF, 0X22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 19 },
+ { 0X25, 0X4571, 0X4571, 0X571, 0X571, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5E, 0X5F, 0X65, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFF, 0X1F, 0X4F, 0X18, 0X5F, 0X1F, 0X7F, 0X17, 0X49, 0X18, 0X7B, 0X80, 0X7F, 0X7F, 0X19, 0X3C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 16 },
+ { 0X66, 0X4571, 0X4571, 0X571, 0X571, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5E, 0X5F, 0X65, 0X70, 0X72, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X77, 0XDB, 0XFF, 0XBD, 0X58, 0X1B, 0XDB, 0X19, 0X64, 0X96, 0XA4, 0X65, 0X88, 0X5E, 0X19, 0X19, 0X66, 0X49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 18 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 }
+ },
+ {
+ { 0, 0X4571, 0X8671, 0X571, 0X4671, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X66, 0X6D, 0X6E, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X3F, 0X3F, 0, 0X86, 0X68, 0X7F, 0X3F, 0XAF, 0XAF, 0XE1, 0XE4, 0X24, 0XB0, 0X93, 0XB4, 0XBE, 0X2D, 0X31, 0XAF, 0X44, 0XAF, 0X44, 0XB1, 0X44, 0XCC, 0X54, 0X57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 27 },
+ { 0X2, 0X4571, 0XC47F, 0X571, 0X847F, { 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X65, 0X77, 0X78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XA2, 0X9A, 0X54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 3 },
+ { 0X6, 0X4571, 0XC47F, 0X571, 0X847F, { 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X2A, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0XE, 0X4571, 0XC47F, 0X571, 0X847F, { 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0XF, 0X4571, 0XC47F, 0X571, 0X847F, { 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X2A, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X10, 0X4571, 0XC47F, 0X571, 0X847F, { 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X65, 0X78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XA2, 0X2A, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 },
+ { 0X13, 0X4571, 0XC47F, 0X571, 0X847F, { 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X65, 0X78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XA2, 0X54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 },
+ { 0X30, 0X4571, 0XC47F, 0X571, 0X847F, { 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X54, 0X4571, 0X477C, 0X571, 0X77C, { 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X8E, 0XB7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 2 },
+ { 0X58, 0X4571, 0X477C, 0X571, 0X77C, { 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X5C, 0X4571, 0X873D, 0X571, 0X877A, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X65, 0X66, 0X6D, 0X6E, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X6D, 0X50, 0XC8, 0X2F, 0X33, 0XCC, 0XAA, 0X7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 8 },
+ { 0X7C, 0X4571, 0X873D, 0X571, 0X877A, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X65, 0X66, 0X6D, 0X6E, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X6D, 0X50, 0XC8, 0X2F, 0X33, 0XCC, 0XCC, 0X7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 8 },
+ { 0X22, 0X4571, 0XC56F, 0X571, 0X856F, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X65, 0X66, 0X6D, 0X6E, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X65, 0X64, 0XBE, 0X3D, 0X41, 0, 0, 0X57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 8 },
+ { 0X25, 0X4571, 0X8760, 0X571, 0X4760, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X65, 0X66, 0X6D, 0X6E, 0X77, 0X78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X71, 0X80, 0XC8, 0X4D, 0X51, 0X46, 0X46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 7 },
+ { 0X66, 0X4571, 0X45E5, 0X571, 0X5E5, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X65, 0X6D, 0X6E, 0X71, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X75, 0X5E, 0XED, 0XF1, 0X44, 0X80, 0X80, 0XF7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 8 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 }
+ },
+ {
+ { 0X2, 0, 0, 0, 0, { 0XC4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X5C, 0, 0, 0, 0, { 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X7C, 0, 0, 0, 0, { 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X22, 0, 0, 0, 0, { 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 }
+ },
+ {
+ { 0X2, 0, 0, 0, 0, { 0XC4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X5C, 0, 0, 0, 0, { 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X7C, 0, 0, 0, 0, { 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0X22, 0, 0, 0, 0, { 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 1 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 }
+ },
+ { 0X4571, 0X4571, 0X571, 0X571, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X67, 0X6D, 0X6E, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X7F, 0X5F, 0X8F, 0X34, 0X28, 0X9F, 0X5F, 0X8F, 0X1F, 0X51, 0XDB, 0XC, 0X20, 0X63, 0XA0, 0, 0X82, 0X86, 0X8F, 0X14, 0X8F, 0X14, 0X21, 0X34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 24 },
+ { 0X4571, 0X4571, 0X571, 0X571, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X67, 0X6D, 0X6E, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X7F, 0X5F, 0X8F, 0X34, 0X28, 0X9F, 0X5F, 0X8F, 0X1F, 0X51, 0XDB, 0XC, 0X20, 0X63, 0XA0, 0, 0X82, 0X86, 0X8F, 0X14, 0X8F, 0X14, 0X21, 0X34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 24 },
+ {
+ { 0X4571, 0X4571, 0X571, 0X571, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X67, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X7F, 0X5F, 0X8F, 0X34, 0X28, 0X9F, 0X5F, 0XDF, 0X47, 0X79, 0XDB, 0XC, 0X48, 0X6B, 0XA0, 0, 0XDF, 0X1C, 0XDF, 0X14, 0X49, 0X3C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 22 },
+ { 0X4571, 0X4571, 0X571, 0X571, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X67, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X1F, 0XAF, 0XDF, 0X34, 0X38, 0XEF, 0XAF, 0X57, 0X83, 0XB5, 0XDB, 0X14, 0X84, 0X67, 0XC8, 0, 0X57, 0X2C, 0X57, 0X24, 0X85, 0X38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 22 },
+ { 0X4571, 0X4571, 0X571, 0X571, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFF, 0X1F, 0X4F, 0X7D, 0X38, 0X5F, 0X1F, 0XFF, 0XD7, 0X9, 0XA3, 0X14, 0XD8, 0X7B, 0, 0XFF, 0X2C, 0XFF, 0X24, 0XD9, 0X3C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 21 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0X4571, 0X4571, 0X571, 0X571, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X51, 0X52, 0X53, 0X54, 0X55, 0X56, 0X57, 0X59, 0X5A, 0X5B, 0X5C, 0X5D, 0X5E, 0X5F, 0X65, 0X70, 0X71, 0X72, 0X74, 0X75, 0X76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0XFF, 0X9F, 0XCF, 0X7D, 0X48, 0XDF, 0X9F, 0XFF, 0X57, 0X89, 0XA4, 0X1C, 0X58, 0X9B, 0X40, 0XFF, 0X3C, 0XFF, 0X34, 0X59, 0X4C, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 21 }
+ },
+ {
+ { 0X4571, 0XC47F, 0X571, 0X847F, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X65, 0X66, 0X67, 0X6D, 0X6E, 0X71, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X73, 0XA0, 0XD8, 0, 0X5A, 0X5E, 0X44, 0X98, 0X98, 0X57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 10 },
+ { 0X4571, 0X856F, 0X571, 0X456F, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X65, 0X66, 0X67, 0X6D, 0X6E, 0X71, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X65, 0XC8, 0XE1, 0, 0X7F, 0X83, 0X44, 0XA7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 8 },
+ { 0X4571, 0X454A, 0X571, 0X54A, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X65, 0X66, 0X6D, 0X6E, 0X71, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X65, 0, 0XF0, 0XAB, 0XAF, 0X44, 0X8E, 0X8E, 0XA7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 9 },
+ { 0, 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0 },
+ { 0X4571, 0X477C, 0X571, 0X77C, { 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0XD4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X50, 0X65, 0X6D, 0X6E, 0X71, 0X77, 0X78, 0X79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0X7D, 0X40, 0XD0, 0XD4, 0X44, 0X32, 0X68, 0XF7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 8 }
+ }
+ }
+};
+
+static const VIALCDPowerSeqRec powerOn[] = {
+ { 0, { 0XD4, 0XD4, 0, 0 }, { 0X91, 0X91, 0, 0 }, { 0X10, 0X8, 0, 0 }, { 0X10, 0X8, 0, 0 }, { 0X19, 0X64, 0, 0 }, 2 },
+ { 1, { 0XD4, 0XD4, 0XD4, 0 }, { 0X91, 0X91, 0X91, 0 }, { 0X10, 0X8, 0X6, 0 }, { 0X10, 0X8, 0X6, 0 }, { 0X19, 0X1FE, 0X1, 0 }, 3 },
+ { 2, { 0XC4, 0XD4, 0XC4, 0 }, { 0X3D, 0X91, 0X3D, 0 }, { 0X10, 0X8, 0X20, 0 }, { 0X10, 0X8, 0X20, 0 }, { 0X19, 0X1FE, 0X1, 0 }, 3 },
+ { 0, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, 0 }
+};
+
+static const VIALCDPowerSeqRec powerOff[] = {
+ { 0, { 0XD4, 0, 0, 0 }, { 0X91, 0, 0, 0 }, { 0X18, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0X1, 0, 0, 0 }, 1 },
+ { 1, { 0XD4, 0XD4, 0XD4, 0 }, { 0X91, 0X91, 0X91, 0 }, { 0X6, 0X8, 0X10, 0 }, { 0, 0, 0, 0 }, { 0XD2, 0X19, 0X1, 0 }, 3 },
+ { 2, { 0XC4, 0XD4, 0XC4, 0 }, { 0X3D, 0X91, 0X3D, 0 }, { 0X20, 0X8, 0X10, 0 }, { 0, 0, 0, 0 }, { 0XD2, 0X19, 0X1, 0 }, 3 },
+ { 0, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, 0 }
+};
+
+static const VIALCDModeFixRec modeFix = {
+ { 0X1, 0X3, 0X7, 0X5, 0X2E, 0X2F, 0X52, 0X53, 0X56, 0X57, 0X5A, 0X5B, 0X67, 0X68, 0X5D, 0X5E, 0X7D, 0X7E, 0X23, 0X24, 0X26, 0X27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0X2, 0X2, 0X4, 0X30, 0X30, 0X50, 0X50, 0X54, 0X54, 0X58, 0X58, 0X66, 0X66, 0X5C, 0X5C, 0X7C, 0X7C, 0X22, 0X22, 0X25, 0X25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 22 };
+
+
+#endif /* _VIA_MODE_H_ */
diff --git a/src/via_priv.h b/src/via_priv.h
new file mode 100644
index 0000000..ee5dfd0
--- /dev/null
+++ b/src/via_priv.h
@@ -0,0 +1,71 @@
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/via/via_priv.h,v 1.3 2003/08/27 15:16:12 tsi Exp $ */
+
+#ifndef _VIA_PRIV_H_
+#define _VIA_PRIV_H_ 1
+
+#include "ddmpeg.h"
+#include "via_common.h"
+
+typedef struct {
+ unsigned long gdwVideoFlagTV1;
+ unsigned long gdwVideoFlagSW;
+ unsigned long gdwVideoFlagMPEG;
+ unsigned long gdwAlphaEnabled; /* For Alpha blending use*/
+
+#if 0
+/* memory management */
+ ViaMMReq SWMemRequest;
+ ViaMMReq HQVMemRequest;
+/*ViaMMReq MPEGMemRequest;
+ ViaMMReq SUBPMemRequest;*/
+#endif
+
+/* for DRM memory management */
+#ifdef XF86DRI
+ drmViaMem MPEGfbRequest;
+ drmViaMem SUBPfbRequest;
+ drmViaMem HQVfbRequest;
+ drmViaMem TV0fbRequest;
+ drmViaMem TV1fbRequest;
+ drmViaMem ALPHAfbRequest;
+ drmViaMem SWfbRequest;
+ drmViaMem drm_SWOV_fb;
+ drmViaMem drm_HQV_fb;
+ int drm_SWOV_fd;
+ int drm_HQV_fd;
+#endif
+
+ DDPIXELFORMAT DPFsrc;
+ DDUPDATEOVERLAY UpdateOverlayBackup; /* For HQVcontrol func use
+ // To save MPEG updateoverlay info.*/
+
+/* device struct */
+ SWDEVICE SWDevice;
+ SUBDEVICE SUBDevice;
+ MPGDEVICE MPGDevice;
+ OVERLAYRECORD overlayRecordV1;
+ OVERLAYRECORD overlayRecordV3;
+
+ BoxRec AvailFBArea;
+ FBLinearPtr SWOVlinear;
+
+ Bool MPEG_ON;
+ Bool SWVideo_ON;
+
+/*To solve the bandwidth issue */
+ unsigned long gdwUseExtendedFIFO;
+
+/* For panning mode use */
+ int panning_old_x;
+ int panning_old_y;
+ int panning_x;
+ int panning_y;
+
+/*To solve the bandwidth issue */
+ unsigned char Save_3C4_16;
+ unsigned char Save_3C4_17;
+ unsigned char Save_3C4_18;
+
+} swovRec, *swovPtr;
+
+#endif /* _VIA_PRIV_H_ */
diff --git a/src/via_regs.h b/src/via_regs.h
new file mode 100644
index 0000000..3e2fb0a
--- /dev/null
+++ b/src/via_regs.h
@@ -0,0 +1,212 @@
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/via/via_regs.h,v 1.3 2003/08/27 15:16:13 tsi Exp $ */
+/*
+ * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
+ * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sub license,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ * VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/*************************************************************************
+ *
+ * File: via_regs.c
+ * Content: The defines of Via registers
+ *
+ ************************************************************************/
+
+#ifndef _VIA_REGS_H_
+#define _VIA_REGS_H_ 1
+
+#include "via_driver.h"
+
+#define VIA_SERIES(chip) (chip == VIA_CLE266)
+
+
+/* Chip tags. These are used to group the adapters into
+ * related families.
+ */
+
+enum VIACHIPTAGS {
+ VIA_UNKNOWN = 0,
+ VIA_CLE266,
+ VIA_KM400,
+ VIA_K8M800,
+ VIA_LAST
+};
+
+
+#define PCI_VIA_VENDOR_ID 0x1106
+
+#define PCI_CHIP_CLE3122 0x3122
+#define PCI_CHIP_CLE3022 0x3022
+#define PCI_CHIP_VT3205 0x3205
+#define PCI_CHIP_VT7205 0x7205
+#define PCI_CHIP_VT3204 0x3204
+#define PCI_CHIP_VT7204 0x7204
+
+
+#define BIOS_BSIZE 1024
+#define BIOS_BASE 0xc0000
+
+
+#define VIA_MMIO_REGSIZE 0x9000
+#define VIA_MMIO_REGBASE 0x0
+#define VIA_MMIO_VGABASE 0x8000
+#define VIA_MMIO_BLTBASE 0x200000
+#define VIA_MMIO_BLTSIZE 0x10000
+
+
+/* defines for VIA 2D registers */
+#define VIA_REG_GECMD 0x000
+#define VIA_REG_GEMODE 0x004
+#define VIA_REG_GESTATUS 0x004 /* as same as VIA_REG_GEMODE */
+#define VIA_REG_SRCPOS 0x008
+#define VIA_REG_DSTPOS 0x00C
+#define VIA_REG_LINE_K1K2 0x008
+#define VIA_REG_LINE_XY 0x00C
+#define VIA_REG_DIMENSION 0x010 /* width and height */
+#define VIA_REG_PATADDR 0x014
+#define VIA_REG_FGCOLOR 0x018
+#define VIA_REG_DSTCOLORKEY 0x018 /* as same as VIA_REG_FG */
+#define VIA_REG_BGCOLOR 0x01C
+#define VIA_REG_SRCCOLORKEY 0x01C /* as same as VIA_REG_BG */
+#define VIA_REG_CLIPTL 0x020 /* top and left of clipping */
+#define VIA_REG_CLIPBR 0x024 /* bottom and right of clipping */
+#define VIA_REG_OFFSET 0x028
+#define VIA_REG_LINE_ERROR 0x028
+#define VIA_REG_KEYCONTROL 0x02C /* color key control */
+#define VIA_REG_SRCBASE 0x030
+#define VIA_REG_DSTBASE 0x034
+#define VIA_REG_PITCH 0x038 /* pitch of src and dst */
+#define VIA_REG_MONOPAT0 0x03C
+#define VIA_REG_MONOPAT1 0x040
+#define VIA_REG_COLORPAT 0x100 /* from 0x100 to 0x1ff */
+
+
+
+/* defines for VIA video registers */
+#define VIA_REG_INTERRUPT 0x200
+#define VIA_REG_CRTCSTART 0x214
+
+
+/* defines for VIA HW cursor registers */
+#define VIA_REG_CURSOR_MODE 0x2D0
+#define VIA_REG_CURSOR_POS 0x2D4
+#define VIA_REG_CURSOR_ORG 0x2D8
+#define VIA_REG_CURSOR_BG 0x2DC
+#define VIA_REG_CURSOR_FG 0x2E0
+
+
+/* defines for VIA 3D registers */
+#define VIA_REG_STATUS 0x400
+#define VIA_REG_TRANSET 0x43C
+#define VIA_REG_TRANSPACE 0x440
+
+/* VIA_REG_STATUS(0x400): Engine Status */
+#define VIA_CMD_RGTR_BUSY 0x00000080 /* Command Regulator is busy */
+#define VIA_2D_ENG_BUSY 0x00000001 /* 2D Engine is busy */
+#define VIA_3D_ENG_BUSY 0x00000002 /* 3D Engine is busy */
+#define VIA_VR_QUEUE_BUSY 0x00020000 /* Virtual Queue is busy */
+
+
+/* VIA_REG_GECMD(0x00): 2D Engine Command */
+#define VIA_GEC_NOOP 0x00000000
+#define VIA_GEC_BLT 0x00000001
+#define VIA_GEC_LINE 0x00000005
+
+#define VIA_GEC_SRC_XY 0x00000000
+#define VIA_GEC_SRC_LINEAR 0x00000010
+#define VIA_GEC_DST_XY 0x00000000
+#define VIA_GEC_DST_LINRAT 0x00000020
+
+#define VIA_GEC_SRC_FB 0x00000000
+#define VIA_GEC_SRC_SYS 0x00000040
+#define VIA_GEC_DST_FB 0x00000000
+#define VIA_GEC_DST_SYS 0x00000080
+
+#define VIA_GEC_SRC_MONO 0x00000100 /* source is mono */
+#define VIA_GEC_PAT_MONO 0x00000200 /* pattern is mono */
+
+#define VIA_GEC_MSRC_OPAQUE 0x00000000 /* mono src is opaque */
+#define VIA_GEC_MSRC_TRANS 0x00000400 /* mono src is transparent */
+
+#define VIA_GEC_PAT_FB 0x00000000 /* pattern is in frame buffer */
+#define VIA_GEC_PAT_REG 0x00000800 /* pattern is from reg setting */
+
+#define VIA_GEC_CLIP_DISABLE 0x00000000
+#define VIA_GEC_CLIP_ENABLE 0x00001000
+
+#define VIA_GEC_FIXCOLOR_PAT 0x00002000
+
+#define VIA_GEC_INCX 0x00000000
+#define VIA_GEC_DECY 0x00004000
+#define VIA_GEC_INCY 0x00000000
+#define VIA_GEC_DECX 0x00008000
+
+#define VIA_GEC_MPAT_OPAQUE 0x00000000 /* mono pattern is opaque */
+#define VIA_GEC_MPAT_TRANS 0x00010000 /* mono pattern is transparent */
+
+#define VIA_GEC_MONO_UNPACK 0x00000000
+#define VIA_GEC_MONO_PACK 0x00020000
+#define VIA_GEC_MONO_DWORD 0x00000000
+#define VIA_GEC_MONO_WORD 0x00040000
+#define VIA_GEC_MONO_BYTE 0x00080000
+
+#define VIA_GEC_LASTPIXEL_ON 0x00000000
+#define VIA_GEC_LASTPIXEL_OFF 0x00100000
+#define VIA_GEC_X_MAJOR 0x00000000
+#define VIA_GEC_Y_MAJOR 0x00200000
+#define VIA_GEC_QUICK_START 0x00800000
+
+
+/* VIA_REG_GEMODE(0x04): GE mode */
+#define VIA_GEM_8bpp 0x00000000
+#define VIA_GEM_16bpp 0x00000100
+#define VIA_GEM_32bpp 0x00000300
+
+#define VIA_GEM_640 0x00000000 /* 640*480 */
+#define VIA_GEM_800 0x00000400 /* 800*600 */
+#define VIA_GEM_1024 0x00000800 /* 1024*768 */
+#define VIA_GEM_1280 0x00000C00 /* 1280*1024 */
+#define VIA_GEM_1600 0x00001000 /* 1600*1200 */
+#define VIA_GEM_2048 0x00001400 /* 2048*1536 */
+
+/* VIA_REG_PITCH(0x38): Pitch Setting */
+#define VIA_PITCH_ENABLE 0x80000000
+
+
+#define MAXLOOP 0xffffff
+
+
+#define VerticalRetraceWait() \
+{ \
+ VGAOUT8(vgaCRIndex, 0x17); \
+ if (VGAIN8(vgaCRReg) & 0x80) { \
+ while ((VGAIN8(vgaIOBase + 0x0a) & 0x08) == 0x00) ; \
+ while ((VGAIN8(vgaIOBase + 0x0a) & 0x08) == 0x08) ; \
+ while ((VGAIN8(vgaIOBase + 0x0a) & 0x08) == 0x00) ; \
+ } \
+}
+
+
+#define VIASETREG(addr, data) *(volatile unsigned int *)(pVia->MapBase + (addr)) = (data)
+#define VIAGETREG(addr) *(volatile unsigned int *)(pVia->MapBase + (addr))
+
+
+#endif /* _VIA_REGS_H_ */
diff --git a/src/via_shadow.c b/src/via_shadow.c
new file mode 100644
index 0000000..5ad738f
--- /dev/null
+++ b/src/via_shadow.c
@@ -0,0 +1,276 @@
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/via/via_shadow.c,v 1.3 2003/08/27 15:16:13 tsi Exp $ */
+/*
+ * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
+ * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sub license,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ * VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#include "via_driver.h"
+#include "shadowfb.h"
+#include "servermd.h"
+
+
+void
+VIARefreshArea(ScrnInfoPtr pScrn, int num, BoxPtr pbox)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ int width, height, Bpp, FBPitch;
+ unsigned char *src, *dst;
+
+ Bpp = pScrn->bitsPerPixel >> 3;
+ FBPitch = BitmapBytePad(pScrn->displayWidth * pScrn->bitsPerPixel);
+
+ while (num--) {
+ width = (pbox->x2 - pbox->x1) * Bpp;
+ height = pbox->y2 - pbox->y1;
+ src = pVia->ShadowPtr + (pbox->y1 * pVia->ShadowPitch) +
+ (pbox->x1 * Bpp);
+ dst = pVia->FBStart + (pbox->y1 * FBPitch) + (pbox->x1 * Bpp);
+
+ while (height--) {
+ memcpy(dst, src, width);
+ dst += FBPitch;
+ src += pVia->ShadowPitch;
+ }
+
+ pbox++;
+ }
+}
+
+
+void
+VIAPointerMoved(int index, int x, int y)
+{
+ ScrnInfoPtr pScrn = xf86Screens[index];
+ VIAPtr pVia = VIAPTR(pScrn);
+ int newX, newY;
+
+ if (pVia->rotate == 1) {
+ newX = pScrn->pScreen->height - y - 1;
+ newY = x;
+ }
+ else {
+ newX = y;
+ newY = pScrn->pScreen->width - x - 1;
+
+ }
+
+ (*pVia->PointerMoved)(index, newX, newY);
+}
+
+
+void
+VIARefreshArea8(ScrnInfoPtr pScrn, int num, BoxPtr pbox)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ int count, width, height, y1, y2, dstPitch, srcPitch;
+ CARD8 *dstPtr, *srcPtr, *src;
+ CARD32 *dst;
+
+ dstPitch = pScrn->displayWidth;
+ srcPitch = -pVia->rotate * pVia->ShadowPitch;
+
+ while (num--) {
+ width = pbox->x2 - pbox->x1;
+ y1 = pbox->y1 & ~3;
+ y2 = (pbox->y2 + 3) & ~3;
+ height = (y2 - y1) >> 2; /* in dwords */
+
+ if (pVia->rotate == 1) {
+ dstPtr = pVia->FBStart + (pbox->x1 * dstPitch) +
+ pScrn->virtualX - y2;
+ srcPtr = pVia->ShadowPtr + ((1 - y2) * srcPitch) + pbox->x1;
+ }
+ else {
+ dstPtr = pVia->FBStart +
+ ((pScrn->virtualY - pbox->x2) * dstPitch) + y1;
+ srcPtr = pVia->ShadowPtr + (y1 * srcPitch) + pbox->x2 - 1;
+ }
+
+ while (width--) {
+ src = srcPtr;
+ dst = (CARD32*) dstPtr;
+ count = height;
+
+ while (count--) {
+ *(dst++) = src[0] | (src[srcPitch] << 8) |
+ (src[srcPitch * 2] << 16) |
+ (src[srcPitch * 3] << 24);
+ src += srcPitch * 4;
+ }
+
+ srcPtr += pVia->rotate;
+ dstPtr += dstPitch;
+ }
+
+ pbox++;
+ }
+}
+
+
+void
+VIARefreshArea16(ScrnInfoPtr pScrn, int num, BoxPtr pbox)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ int count, width, height, y1, y2, dstPitch, srcPitch;
+ CARD16 *dstPtr, *srcPtr, *src;
+ CARD32 *dst;
+
+ dstPitch = pScrn->displayWidth;
+ srcPitch = -pVia->rotate * pVia->ShadowPitch >> 1;
+
+ while(num--) {
+ width = pbox->x2 - pbox->x1;
+ y1 = pbox->y1 & ~1;
+ y2 = (pbox->y2 + 1) & ~1;
+ height = (y2 - y1) >> 1; /* in dwords */
+
+ if (pVia->rotate == 1) {
+ dstPtr = (CARD16*)pVia->FBStart +
+ (pbox->x1 * dstPitch) + pScrn->virtualX - y2;
+ srcPtr = (CARD16*)pVia->ShadowPtr +
+ ((1 - y2) * srcPitch) + pbox->x1;
+ }
+ else {
+ dstPtr = (CARD16*)pVia->FBStart +
+ ((pScrn->virtualY - pbox->x2) * dstPitch) + y1;
+ srcPtr = (CARD16*)pVia->ShadowPtr +
+ (y1 * srcPitch) + pbox->x2 - 1;
+ }
+
+ while (width--) {
+ src = srcPtr;
+ dst = (CARD32*)dstPtr;
+ count = height;
+
+ while (count--) {
+ *(dst++) = src[0] | (src[srcPitch] << 16);
+ src += srcPitch * 2;
+ }
+
+ srcPtr += pVia->rotate;
+ dstPtr += dstPitch;
+ }
+
+ pbox++;
+ }
+}
+
+
+/* this one could be faster */
+void
+VIARefreshArea24(ScrnInfoPtr pScrn, int num, BoxPtr pbox)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ int count, width, height, y1, y2, dstPitch, srcPitch;
+ CARD8 *dstPtr, *srcPtr, *src;
+ CARD32 *dst;
+
+ dstPitch = BitmapBytePad(pScrn->displayWidth * 24);
+ srcPitch = -pVia->rotate * pVia->ShadowPitch;
+
+ while (num--) {
+ width = pbox->x2 - pbox->x1;
+ y1 = pbox->y1 & ~3;
+ y2 = (pbox->y2 + 3) & ~3;
+ height = (y2 - y1) >> 2; /* blocks of 3 dwords */
+
+ if (pVia->rotate == 1) {
+ dstPtr = pVia->FBStart +
+ (pbox->x1 * dstPitch) + ((pScrn->virtualX - y2) * 3);
+ srcPtr = pVia->ShadowPtr + ((1 - y2) * srcPitch) + (pbox->x1 * 3);
+ }
+ else {
+ dstPtr = pVia->FBStart +
+ ((pScrn->virtualY - pbox->x2) * dstPitch) + (y1 * 3);
+ srcPtr = pVia->ShadowPtr + (y1 * srcPitch) + (pbox->x2 * 3) - 3;
+ }
+
+ while (width--) {
+ src = srcPtr;
+ dst = (CARD32*)dstPtr;
+ count = height;
+ while(count--) {
+ dst[0] = src[0] | (src[1] << 8) | (src[2] << 16) |
+ (src[srcPitch] << 24);
+ dst[1] = src[srcPitch + 1] | (src[srcPitch + 2] << 8) |
+ (src[srcPitch * 2] << 16) |
+ (src[(srcPitch * 2) + 1] << 24);
+ dst[2] = src[(srcPitch * 2) + 2] | (src[srcPitch * 3] << 8) |
+ (src[(srcPitch * 3) + 1] << 16) |
+ (src[(srcPitch * 3) + 2] << 24);
+ dst += 3;
+ src += srcPitch * 4;
+ }
+
+ srcPtr += pVia->rotate * 3;
+ dstPtr += dstPitch;
+ }
+
+ pbox++;
+ }
+}
+
+
+void
+VIARefreshArea32(ScrnInfoPtr pScrn, int num, BoxPtr pbox)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ int count, width, height, dstPitch, srcPitch;
+ CARD32 *dstPtr, *srcPtr, *src, *dst;
+
+ dstPitch = pScrn->displayWidth;
+ srcPitch = -pVia->rotate * pVia->ShadowPitch >> 2;
+
+ while (num--) {
+ width = pbox->x2 - pbox->x1;
+ height = pbox->y2 - pbox->y1;
+
+ if (pVia->rotate == 1) {
+ dstPtr = (CARD32*)pVia->FBStart +
+ (pbox->x1 * dstPitch) + pScrn->virtualX - pbox->y2;
+ srcPtr = (CARD32*)pVia->ShadowPtr +
+ ((1 - pbox->y2) * srcPitch) + pbox->x1;
+ }
+ else {
+ dstPtr = (CARD32*)pVia->FBStart +
+ ((pScrn->virtualY - pbox->x2) * dstPitch) + pbox->y1;
+ srcPtr = (CARD32*)pVia->ShadowPtr +
+ (pbox->y1 * srcPitch) + pbox->x2 - 1;
+ }
+
+ while(width--) {
+ src = srcPtr;
+ dst = dstPtr;
+ count = height;
+
+ while(count--) {
+ *(dst++) = *src;
+ src += srcPitch;
+ }
+
+ srcPtr += pVia->rotate;
+ dstPtr += dstPitch;
+ }
+
+ pbox++;
+ }
+}
diff --git a/src/via_swov.c b/src/via_swov.c
new file mode 100644
index 0000000..30e0c75
--- /dev/null
+++ b/src/via_swov.c
@@ -0,0 +1,2073 @@
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/via/via_swov.c,v 1.7 2003/11/06 18:38:11 tsi Exp $ */
+/*
+ * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
+ * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sub license,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ * VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "xf86.h"
+#include "xf86_OSproc.h"
+#include "xf86_ansic.h"
+#include "xf86fbman.h"
+
+#include "via_compose.h"
+#include "via_capture.h"
+#include "via.h"
+#include "ddmpeg.h"
+#include "xf86drm.h"
+
+#include "via_overlay.h"
+#include "via_driver.h"
+#include "via_regrec.h"
+#include "via_priv.h"
+#include "via_swov.h"
+#include "via_common.h"
+
+
+
+/* E X T E R N G L O B A L S ----------------------------------------------*/
+
+extern Bool XserverIsUp; /* If Xserver had run(register action) */
+
+/* G L O B A L V A R I A B L E S ------------------------------------------*/
+
+static unsigned long DispatchVGARevisionID(int rev)
+{
+ if (rev >= VIA_REVISION_CLECX )
+ return VIA_REVISION_CLECX;
+ else
+ return rev;
+}
+
+/*************************************************************************
+ Function : VIAVidCreateSurface
+ Create overlay surface depend on FOURCC
+*************************************************************************/
+unsigned long VIAVidCreateSurface(ScrnInfoPtr pScrn, LPDDSURFACEDESC lpDDSurfaceDesc)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ unsigned long dwWidth, dwHeight, dwPitch=0;
+ unsigned long dwRet=PI_OK;
+ unsigned long dwAddr;
+ unsigned long HQVFBSIZE = 0, SWFBSIZE = 0, SWOVFBSIZE = 0;
+ int iCount; /* iCount for clean HQV FB use */
+ unsigned char *lpTmpAddr; /* for clean HQV FB use */
+/* int dwNewHight = 0;*/
+ int depth = 0;/*, DisplayWidth32 = 0; */
+ VIAHWRec *hwDiff = &pVia->ViaHW;
+
+
+ DBG_DD(ErrorF("//VIAVidCreateSurface: \n"));
+
+ if ( lpDDSurfaceDesc == NULL )
+ return PI_ERR;
+
+ switch (lpDDSurfaceDesc->dwFourCC)
+ {
+ case FOURCC_YUY2 :
+ pVia->swov.DPFsrc.dwFlags = DDPF_FOURCC;
+ pVia->swov.DPFsrc.dwFourCC = FOURCC_YUY2;
+
+ /* init Video status flag*/
+ pVia->swov.gdwVideoFlagSW = VIDEO_HQV_INUSE | SW_USE_HQV | VIDEO_1_INUSE;
+
+ /*write Color Space Conversion param.*/
+ switch ( DispatchVGARevisionID(pVia->graphicInfo.RevisionID))
+ {
+ case VIA_REVISION_CLECX :
+ VIDOutD(V1_ColorSpaceReg_1, ColorSpaceValue_1_3123C0);
+ VIDOutD(V1_ColorSpaceReg_2, ColorSpaceValue_2_3123C0);
+
+ DBG_DD(ErrorF("00000284 %08x\n",ColorSpaceValue_1_3123C0));
+ DBG_DD(ErrorF("00000288 %08x\n",ColorSpaceValue_2_3123C0));
+ break;
+
+ default :
+ VIDOutD(V1_ColorSpaceReg_2, ColorSpaceValue_2);
+ VIDOutD(V1_ColorSpaceReg_1, ColorSpaceValue_1);
+
+ DBG_DD(ErrorF("00000288 %08x\n",ColorSpaceValue_2));
+ DBG_DD(ErrorF("00000284 %08x\n",ColorSpaceValue_1));
+ break;
+ }
+
+
+ dwWidth = lpDDSurfaceDesc->dwWidth;
+ dwHeight = lpDDSurfaceDesc->dwHeight;
+ dwPitch = ALIGN_TO_32_BYTES(dwWidth)*2;
+ DBG_DD(ErrorF(" srcWidth= %ld \n", dwWidth));
+ DBG_DD(ErrorF(" srcHeight= %ld \n", dwHeight));
+
+ SWFBSIZE = dwPitch*dwHeight; /*YUYV*/
+
+#ifdef XF86DRI
+ if (pVia->graphicInfo.DRMEnabled)
+ {
+ DBG_DD(ErrorF("\n//DRM Device : Allocate SWOV memory!!\n"));
+
+ if((pVia->swov.drm_SWOV_fd = drmOpen("via",NULL)) < 0)
+ {
+ ErrorF("DRM Device for via could not be opened.\n");
+ return BadAccess;
+ }
+
+ pVia->swov.SWfbRequest.context=1;
+ pVia->swov.SWfbRequest.size=SWFBSIZE*2;
+ pVia->swov.SWfbRequest.type= VIDEO;
+
+ if ( drmCommandWrite( pVia->swov.drm_SWOV_fd, DRM_VIA_ALLOCMEM,
+ &pVia->swov.SWfbRequest, sizeof(drmViaMem)) < 0 )
+ {
+ ErrorF("\n//Cannot allocate SWOV memory use DRM module!\n");
+ return -errno;
+ }
+ dwAddr = pVia->swov.SWfbRequest.offset;
+ }
+ else
+#endif
+ {
+/* dwNewHight = dwHeight<<1;*/
+ depth = (pScrn->bitsPerPixel + 7 ) >> 3;
+/* DisplayWidth32 = ALIGN_TO_32_BYTES(pScrn->displayWidth);*/
+ SWOVFBSIZE = SWFBSIZE << 1;
+
+ if(pVia->swov.SWOVlinear)
+ {
+ xf86FreeOffscreenLinear(pVia->swov.SWOVlinear);
+ pVia->swov.SWOVlinear = NULL;
+ DBG_DD(ErrorF("xfree86 Manager Free Init_SWOVLinear Offscreen Memory Success!!!! \n"));
+ }
+
+ if(!(pVia->swov.SWOVlinear = xf86AllocateOffscreenLinear(pScrn->pScreen, SWOVFBSIZE,
+ 32, NULL, NULL, NULL)))
+ {
+ return BadAlloc;
+ }
+
+ dwAddr = pVia->swov.SWOVlinear->offset * depth;
+ DBG_DD(ErrorF("SWOV dwAddr = 0x%x!!!! \n",dwAddr));
+ }
+
+ /* fill in the SW buffer with 0x8000 (YUY2-black color) to clear FB buffer*/
+ lpTmpAddr = pVia->FBBase + dwAddr;
+
+ for(iCount=0;iCount<(SWFBSIZE*2);iCount++)
+ {
+ if((iCount%2) == 0)
+ *lpTmpAddr++=0x00;
+ else
+ *lpTmpAddr++=0x80;
+ }
+
+ pVia->swov.SWDevice.dwSWPhysicalAddr[0] = dwAddr;
+ pVia->swov.SWDevice.lpSWOverlaySurface[0] = pVia->FBBase+dwAddr;
+
+ pVia->swov.SWDevice.dwSWPhysicalAddr[1] = pVia->swov.SWDevice.dwSWPhysicalAddr[0] + SWFBSIZE;
+ pVia->swov.SWDevice.lpSWOverlaySurface[1] = pVia->swov.SWDevice.lpSWOverlaySurface[0] + SWFBSIZE;
+
+ DBG_DD(ErrorF("pVia->swov.SWDevice.dwSWPhysicalAddr[0] %08lx\n", dwAddr));
+ DBG_DD(ErrorF("pVia->swov.SWDevice.dwSWPhysicalAddr[1] %08lx\n", dwAddr + SWFBSIZE));
+
+ pVia->swov.SWDevice.gdwSWSrcWidth = dwWidth;
+ pVia->swov.SWDevice.gdwSWSrcHeight= dwHeight;
+ pVia->swov.SWDevice.dwPitch = dwPitch;
+
+ /* Fill image data in overlay record*/
+ pVia->swov.overlayRecordV1.dwV1OriWidth = dwWidth;
+ pVia->swov.overlayRecordV1.dwV1OriHeight = dwHeight;
+ pVia->swov.overlayRecordV1.dwV1OriPitch = dwPitch;
+ if (!(pVia->swov.gdwVideoFlagSW & SW_USE_HQV))
+ break;
+
+ case FOURCC_HQVSW :
+ DBG_DD(ErrorF("//Create HQV_SW Surface\n"));
+ dwWidth = pVia->swov.SWDevice.gdwSWSrcWidth;
+ dwHeight = pVia->swov.SWDevice.gdwSWSrcHeight;
+ dwPitch = pVia->swov.SWDevice.dwPitch;
+
+ HQVFBSIZE = dwPitch * dwHeight;
+
+#ifdef XF86DRI
+ if (pVia->graphicInfo.DRMEnabled)
+ {
+ DBG_DD(ErrorF("\n//DRM Device : Allocate HQV memory!!\n"));
+
+ if((pVia->swov.drm_HQV_fd = drmOpen("via",NULL)) < 0)
+ {
+ ErrorF("DRM Device for via could not be opened.\n");
+ return BadAccess;
+ }
+
+ pVia->swov.HQVfbRequest.context=1;
+
+ if ( hwDiff->dwThreeHQVBuffer ) /* CLE_C0 */
+ pVia->swov.HQVfbRequest.size=HQVFBSIZE*3;
+ else
+ pVia->swov.HQVfbRequest.size=HQVFBSIZE*2;
+
+ pVia->swov.HQVfbRequest.type= VIDEO;
+
+ if ( drmCommandWrite( pVia->swov.drm_HQV_fd,
+ DRM_VIA_ALLOCMEM,
+ &pVia->swov.HQVfbRequest, sizeof(drmViaMem)) < 0 )
+ {
+ ErrorF("\n//Cannot allocate HQV memory use DRM module!\n");
+ return -errno;
+ }
+ dwAddr = pVia->swov.HQVfbRequest.offset;
+ }
+ else
+#endif
+ {
+ if(pVia->swov.SWOVlinear)
+ {
+ xf86FreeOffscreenLinear(pVia->swov.SWOVlinear);
+ pVia->swov.SWOVlinear = NULL;
+ DBG_DD(ErrorF("xfree86 Manager Free Init_SWOVLinear Offscreen Memory Success!!!! \n"));
+ }
+
+ if ( hwDiff->dwThreeHQVBuffer ) /* CLE_C0 */
+ {
+ if(!(pVia->swov.SWOVlinear = xf86AllocateOffscreenLinear(pScrn->pScreen, HQVFBSIZE*3,
+ 32, NULL, NULL, NULL)))
+ {
+ return BadAlloc;
+ }
+ }
+ else
+ {
+ if(!(pVia->swov.SWOVlinear = xf86AllocateOffscreenLinear(pScrn->pScreen, HQVFBSIZE*2,
+ 32, NULL, NULL, NULL)))
+ {
+ return BadAlloc;
+ }
+ }
+ dwAddr = pVia->swov.SWOVlinear->offset * depth + SWOVFBSIZE;
+ DBG_DD(ErrorF("HQV dwAddr = 0x%x!!!! \n",dwAddr));
+ }
+
+ pVia->swov.overlayRecordV1.dwHQVAddr[0] = dwAddr;
+ pVia->swov.overlayRecordV1.dwHQVAddr[1] = dwAddr + HQVFBSIZE;
+
+ if ( hwDiff->dwThreeHQVBuffer ) /*CLE_C0*/
+ {
+ pVia->swov.overlayRecordV1.dwHQVAddr[2] = pVia->swov.overlayRecordV1.dwHQVAddr[1] + HQVFBSIZE;
+
+ if (pVia->swov.overlayRecordV1.dwHQVAddr[2] + HQVFBSIZE >=
+ (unsigned long)pVia->graphicInfo.VideoHeapEnd)
+ {
+ ErrorF("// :Memory not enough for MPEG with HQV\n");
+ return PI_ERR_CANNOT_CREATE_SURFACE;
+ }
+ }
+ else
+ {
+ if (pVia->swov.overlayRecordV1.dwHQVAddr[1] + HQVFBSIZE >=
+ (unsigned long)pVia->graphicInfo.VideoHeapEnd)
+ {
+ DBG_DD(ErrorF("// :Memory not enough for MPEG with HQV\n"));
+ return PI_ERR_CANNOT_CREATE_SURFACE;
+ }
+ }
+
+
+ /* fill in the HQV buffer with 0x8000 (YUY2-black color) to clear HQV buffers*/
+ for(iCount=0;iCount<HQVFBSIZE*2;iCount++)
+ {
+ lpTmpAddr = pVia->FBBase + dwAddr + iCount;
+ if((iCount%2) == 0)
+ *(lpTmpAddr)=0x00;
+ else
+ *(lpTmpAddr)=0x80;
+ }
+
+ VIDOutD(HQV_DST_STARTADDR1,pVia->swov.overlayRecordV1.dwHQVAddr[1]);
+ VIDOutD(HQV_DST_STARTADDR0,pVia->swov.overlayRecordV1.dwHQVAddr[0]);
+
+ DBG_DD(ErrorF("000003F0 %08lx\n",VIDInD(HQV_DST_STARTADDR1) ));
+ DBG_DD(ErrorF("000003EC %08lx\n",VIDInD(HQV_DST_STARTADDR0) ));
+
+ if ( hwDiff->dwThreeHQVBuffer ) /*CLE_C0*/
+ {
+ VIDOutD(HQV_DST_STARTADDR2,pVia->swov.overlayRecordV1.dwHQVAddr[2]);
+ ErrorF("000003FC %08lx\n", (unsigned long)VIDInD(HQV_DST_STARTADDR2) );
+ }
+
+ break;
+
+ case FOURCC_YV12 :
+ DBG_DD(ErrorF(" Create SW YV12 Surface: \n"));
+ pVia->swov.DPFsrc.dwFlags = DDPF_FOURCC;
+ pVia->swov.DPFsrc.dwFourCC = FOURCC_YV12;
+
+ /* init Video status flag */
+ pVia->swov.gdwVideoFlagSW = VIDEO_HQV_INUSE | SW_USE_HQV | VIDEO_1_INUSE;
+ /* pVia->swov.gdwVideoFlagSW = VIDEO_1_INUSE; */
+
+ /* if (pVia->swov.gdwVideoFlagTV1 & VIDEO_HQV_INUSE) */
+/*
+ if (gdwVideoFlagTV0 & VIDEO_HQV_INUSE)
+ {
+ lpNewVidCtrl->dwHighQVDO = VW_HIGHQVDO_OFF;
+ VIADriverProc( HQVCONTROL , lpNewVidCtrl );
+ }
+*/
+ /* write Color Space Conversion param. */
+ switch ( DispatchVGARevisionID(pVia->graphicInfo.RevisionID))
+ {
+ case VIA_REVISION_CLECX :
+ VIDOutD(V1_ColorSpaceReg_1, ColorSpaceValue_1_3123C0);
+ VIDOutD(V1_ColorSpaceReg_2, ColorSpaceValue_2_3123C0);
+
+ DBG_DD(ErrorF("00000284 %08x\n",ColorSpaceValue_1_3123C0));
+ DBG_DD(ErrorF("00000288 %08x\n",ColorSpaceValue_2_3123C0));
+ break;
+
+ default :
+ VIDOutD(V1_ColorSpaceReg_2, ColorSpaceValue_2);
+ VIDOutD(V1_ColorSpaceReg_1, ColorSpaceValue_1);
+
+ DBG_DD(ErrorF("00000288 %08x\n",ColorSpaceValue_2));
+ DBG_DD(ErrorF("00000284 %08x\n",ColorSpaceValue_1));
+ break;
+ }
+
+
+ dwWidth = lpDDSurfaceDesc->dwWidth;
+ dwHeight = lpDDSurfaceDesc->dwHeight;
+ dwPitch = ALIGN_TO_32_BYTES(dwWidth);
+ DBG_DD(ErrorF(" srcWidth= %ld \n", dwWidth));
+ DBG_DD(ErrorF(" srcHeight= %ld \n", dwHeight));
+
+ SWFBSIZE = dwPitch * dwHeight * 1.5; /* 1.5 bytes per pixel */
+
+#ifdef XF86DRI
+ if (pVia->graphicInfo.DRMEnabled)
+ {
+ DBG_DD(ErrorF("\n//DRM Device : Allocate SWOV memory!!\n"));
+ if((pVia->swov.drm_SWOV_fd = drmOpen("via",NULL)) < 0)
+ {
+ ErrorF("DRM Device for via could not be opened.\n");
+ return BadAccess;
+ }
+
+ pVia->swov.SWfbRequest.context=1;
+ pVia->swov.SWfbRequest.size=SWFBSIZE*2;
+ pVia->swov.SWfbRequest.type= VIDEO;
+
+ if ( drmCommandWrite( pVia->swov.drm_SWOV_fd, DRM_VIA_ALLOCMEM,
+ &pVia->swov.SWfbRequest, sizeof(drmViaMem)) <0 )
+ {
+ ErrorF("\n//Cannot allocate SWOV memory use DRM module!\n");
+ return -errno;
+ }
+
+ dwAddr = pVia->swov.SWfbRequest.offset;
+ }
+ else
+#endif
+ {
+ depth = (pScrn->bitsPerPixel + 7 ) >> 3;
+ SWOVFBSIZE = SWFBSIZE << 1; /* ( SWOVFBSIZE = SWFBSIZE*2 )*/
+
+ if(pVia->swov.SWOVlinear)
+ {
+ xf86FreeOffscreenLinear(pVia->swov.SWOVlinear);
+ pVia->swov.SWOVlinear = NULL;
+ DBG_DD(ErrorF("xfree86 Manager Free Init_SWOVLinear Offscreen Memory Success!!!! \n"));
+ }
+
+ if(!(pVia->swov.SWOVlinear = xf86AllocateOffscreenLinear(pScrn->pScreen, SWOVFBSIZE,
+ 32, NULL, NULL, NULL)))
+ {
+ return BadAlloc;
+ }
+
+ dwAddr = pVia->swov.SWOVlinear->offset * depth;
+ DBG_DD(ErrorF("SWOV dwAddr = 0x%x!!!! \n",dwAddr));
+ }
+
+ /* fill in the SW buffer with 0x8000 (YUY2-black color) to clear FB buffer
+ */
+ lpTmpAddr = pVia->FBBase + dwAddr;
+ for(iCount=0;iCount<(SWFBSIZE*2);iCount++)
+ {
+ if((iCount%2) == 0)
+ *lpTmpAddr++=0x00;
+ else
+ *lpTmpAddr++=0x80;
+ }
+
+ pVia->swov.SWDevice.dwSWPhysicalAddr[0] = dwAddr;
+ pVia->swov.SWDevice.dwSWCrPhysicalAddr[0] = pVia->swov.SWDevice.dwSWPhysicalAddr[0]
+ + (dwPitch*dwHeight);
+ pVia->swov.SWDevice.dwSWCbPhysicalAddr[0] = pVia->swov.SWDevice.dwSWCrPhysicalAddr[0]
+ + ((dwPitch>>1)*(dwHeight>>1));
+ pVia->swov.SWDevice.lpSWOverlaySurface[0] = pVia->FBBase+dwAddr;
+
+ pVia->swov.SWDevice.dwSWPhysicalAddr[1] = dwAddr + SWFBSIZE;
+ pVia->swov.SWDevice.dwSWCrPhysicalAddr[1] = pVia->swov.SWDevice.dwSWPhysicalAddr[1]
+ + (dwPitch*dwHeight);
+ pVia->swov.SWDevice.dwSWCbPhysicalAddr[1] = pVia->swov.SWDevice.dwSWCrPhysicalAddr[1]
+ + ((dwPitch>>1)*(dwHeight>>1));
+ pVia->swov.SWDevice.lpSWOverlaySurface[1] = pVia->swov.SWDevice.lpSWOverlaySurface[0] + SWFBSIZE;
+
+ DBG_DD(ErrorF("pVia->swov.SWDevice.dwSWPhysicalAddr[0] %08lx\n", dwAddr));
+ DBG_DD(ErrorF("pVia->swov.SWDevice.dwSWPhysicalAddr[1] %08lx\n", dwAddr + SWFBSIZE));
+
+ pVia->swov.SWDevice.gdwSWSrcWidth = dwWidth;
+ pVia->swov.SWDevice.gdwSWSrcHeight= dwHeight;
+ pVia->swov.SWDevice.dwPitch = dwPitch;
+
+ /* Fill image data in overlay record */
+ pVia->swov.overlayRecordV1.dwV1OriWidth = dwWidth;
+ pVia->swov.overlayRecordV1.dwV1OriHeight = dwHeight;
+ pVia->swov.overlayRecordV1.dwV1OriPitch = dwPitch;
+/*
+if (!(pVia->swov.gdwVideoFlagSW & SW_USE_HQV))
+ break;
+ case FOURCC_HQVSW :
+*/
+ /*
+ * if sw video use HQV dwpitch should changed
+ */
+ DBG_DD(ErrorF("//Create HQV_SW Surface\n"));
+/* pVia->swov.DPFsrc.dwFourCC = FOURCC_YUY2; */
+ dwWidth = pVia->swov.SWDevice.gdwSWSrcWidth;
+ dwHeight = pVia->swov.SWDevice.gdwSWSrcHeight;
+ dwPitch = pVia->swov.SWDevice.dwPitch;
+
+ HQVFBSIZE = dwPitch * dwHeight * 2;
+
+#ifdef XF86DRI
+ if (pVia->graphicInfo.DRMEnabled)
+ {
+ DBG_DD(ErrorF("\n//DRM Device : Allocate HQV memory!!\n"));
+
+ if((pVia->swov.drm_HQV_fd = drmOpen("via",NULL)) < 0)
+ {
+ ErrorF("DRM Device for via could not be opened.\n");
+ return BadAccess;
+ }
+
+ pVia->swov.HQVfbRequest.context=1;
+
+ if ( hwDiff->dwThreeHQVBuffer ) /* CLE_C0 */
+ pVia->swov.HQVfbRequest.size=HQVFBSIZE*3;
+ else
+ pVia->swov.HQVfbRequest.size=HQVFBSIZE*2;
+
+ pVia->swov.HQVfbRequest.type= VIDEO;
+
+ if ( drmCommandWrite( pVia->swov.drm_HQV_fd, DRM_VIA_ALLOCMEM,
+ &pVia->swov.HQVfbRequest, sizeof(drmViaMem)) < 0 )
+ {
+ ErrorF("\n//Cannot allocate HQV memory use DRM module!\n");
+ return -errno;
+ }
+ dwAddr = pVia->swov.HQVfbRequest.offset;
+ }
+ else
+#endif
+ {
+ if(pVia->swov.SWOVlinear)
+ {
+ xf86FreeOffscreenLinear(pVia->swov.SWOVlinear);
+ pVia->swov.SWOVlinear = NULL;
+ DBG_DD(ErrorF("xfree86 Manager Free Init_SWOVLinear Offscreen Memory Success!!!! \n"));
+ }
+
+ if ( hwDiff->dwThreeHQVBuffer ) /* CLE_C0 */
+ {
+ if(!(pVia->swov.SWOVlinear = xf86AllocateOffscreenLinear(pScrn->pScreen, HQVFBSIZE*3,
+ 32, NULL, NULL, NULL)))
+ {
+ return BadAlloc;
+ }
+ }
+ else
+ {
+ if(!(pVia->swov.SWOVlinear = xf86AllocateOffscreenLinear(pScrn->pScreen, HQVFBSIZE*2,
+ 32, NULL, NULL, NULL)))
+ {
+ return BadAlloc;
+ }
+ }
+
+ dwAddr = pVia->swov.SWOVlinear->offset * depth + SWOVFBSIZE;
+ DBG_DD(ErrorF("HQV dwAddr = 0x%x!!!! \n",dwAddr));
+ }
+
+ pVia->swov.overlayRecordV1.dwHQVAddr[0] = dwAddr;
+ pVia->swov.overlayRecordV1.dwHQVAddr[1] = dwAddr + HQVFBSIZE;
+
+ if ( hwDiff->dwThreeHQVBuffer ) /*CLE_C0*/
+ {
+ pVia->swov.overlayRecordV1.dwHQVAddr[2] = pVia->swov.overlayRecordV1.dwHQVAddr[1] + HQVFBSIZE;
+
+ if (pVia->swov.overlayRecordV1.dwHQVAddr[2] + HQVFBSIZE >=
+ (unsigned long)pVia->graphicInfo.VideoHeapEnd)
+ {
+ ErrorF("// :Memory not enough for MPEG with HQV\n");
+ return PI_ERR_CANNOT_CREATE_SURFACE;
+ }
+ }
+ else
+ {
+ if (pVia->swov.overlayRecordV1.dwHQVAddr[1] + HQVFBSIZE >=
+ (unsigned long)pVia->graphicInfo.VideoHeapEnd)
+ {
+ DBG_DD(ErrorF("// :Memory not enough for MPEG with HQV\n"));
+ return PI_ERR_CANNOT_CREATE_SURFACE;
+ }
+ }
+
+ /* fill in the HQV buffer with 0x8000 (YUY2-black color) to clear HQV buffers
+ */
+ for(iCount=0 ; iCount< HQVFBSIZE*2; iCount++)
+ {
+ lpTmpAddr = pVia->FBBase + dwAddr + iCount;
+ if(iCount%2 == 0)
+ *(lpTmpAddr)=0x00;
+ else
+ *(lpTmpAddr)=0x80;
+ }
+
+ VIDOutD(HQV_DST_STARTADDR1,pVia->swov.overlayRecordV1.dwHQVAddr[1]);
+ VIDOutD(HQV_DST_STARTADDR0,pVia->swov.overlayRecordV1.dwHQVAddr[0]);
+
+ DBG_DD(ErrorF("000003F0 %08lx\n",VIDInD(HQV_DST_STARTADDR1) ));
+ DBG_DD(ErrorF("000003EC %08lx\n",VIDInD(HQV_DST_STARTADDR0) ));
+
+ if ( hwDiff->dwThreeHQVBuffer ) /*CLE_C0*/
+ {
+ VIDOutD(HQV_DST_STARTADDR2,pVia->swov.overlayRecordV1.dwHQVAddr[2]);
+ ErrorF("000003FC %08lx\n", (unsigned long)VIDInD(HQV_DST_STARTADDR2) );
+ }
+
+ break;
+
+ default :
+ break;
+ }
+
+ return dwRet;
+
+} /*VIAVidCreateSurface*/
+
+/*************************************************************************
+ Function : VIAVidLockSurface
+ Lock Surface
+*************************************************************************/
+unsigned long VIAVidLockSurface(ScrnInfoPtr pScrn, LPDDLOCK lpLock)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+
+ switch (lpLock->dwFourCC)
+ {
+ case FOURCC_YUY2 :
+ case FOURCC_YV12 :
+ lpLock->SWDevice = pVia->swov.SWDevice ;
+ lpLock->dwPhysicalBase = pVia->FrameBufferBase;
+
+ }
+
+ return PI_OK;
+
+} /*VIAVidLockSurface*/
+
+/*************************************************************************
+ * Destroy Surface
+*************************************************************************/
+unsigned long VIAVidDestroySurface(ScrnInfoPtr pScrn, LPDDSURFACEDESC lpDDSurfaceDesc)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+
+ DBG_DD(ErrorF("//VIAVidDestroySurface: \n"));
+
+ switch (lpDDSurfaceDesc->dwFourCC)
+ {
+ case FOURCC_YUY2 :
+ pVia->swov.DPFsrc.dwFlags = 0;
+ pVia->swov.DPFsrc.dwFourCC = 0;
+
+#ifdef XF86DRI
+ if (pVia->graphicInfo.DRMEnabled)
+ {
+ DBG_DD(ErrorF("\n//DRM Device : Free SWOV memory!!\n"));
+
+ if ( drmCommandWrite( pVia->swov.drm_SWOV_fd, DRM_VIA_FREEMEM,
+ &pVia->swov.SWfbRequest, sizeof(drmViaMem) ) < 0 )
+ {
+ ErrorF("\n//Cannot free SWOV memory use DRM module!\n");
+ return -errno;
+ }
+ drmClose(pVia->swov.drm_SWOV_fd);
+ }
+ else
+#endif
+ {
+ if(pVia->swov.SWOVlinear)
+ {
+ xf86FreeOffscreenLinear(pVia->swov.SWOVlinear);
+ pVia->swov.SWOVlinear = NULL;
+ }
+
+ }
+
+ if (!(pVia->swov.gdwVideoFlagSW & SW_USE_HQV))
+ {
+ pVia->swov.gdwVideoFlagSW = 0;
+ break;
+ }
+
+ case FOURCC_HQVSW :
+#ifdef XF86DRI
+ if (pVia->graphicInfo.DRMEnabled)
+ {
+ DBG_DD(ErrorF("\n//DRM Device : Free HQV memory!!\n"));
+
+ if ( drmCommandWrite( pVia->swov.drm_HQV_fd, DRM_VIA_FREEMEM,
+ &pVia->swov.HQVfbRequest, sizeof(drmViaMem)) <0 )
+ {
+ ErrorF("\n//Cannot free HQV memory use DRM module!\n");
+ return -errno;
+ }
+ drmClose(pVia->swov.drm_HQV_fd);
+ }
+ else
+#endif
+ {
+ if(pVia->swov.SWOVlinear)
+ {
+ xf86FreeOffscreenLinear(pVia->swov.SWOVlinear);
+ pVia->swov.SWOVlinear = NULL;
+ }
+
+ }
+
+ pVia->swov.gdwVideoFlagSW = 0;
+/* if (pVia->swov.gdwVideoFlagTV1 != 0)
+ {
+ DBG_DD(ErrorF(" Assign HQV to TV1 \n"));
+ lpNewVidCtrl->dwHighQVDO = VW_HIGHQVDO_TV1;
+ DriverProc( HQVCONTROL , lpNewVidCtrl );
+ }
+*/
+ break;
+
+ case FOURCC_YV12 :
+ pVia->swov.DPFsrc.dwFlags = 0;
+ pVia->swov.DPFsrc.dwFourCC = 0;
+
+#ifdef XF86DRI
+ if (pVia->graphicInfo.DRMEnabled)
+ {
+ DBG_DD(ErrorF("\n//DRM Device : Free SWOV memory!!\n"));
+
+ if ( drmCommandWrite( pVia->swov.drm_SWOV_fd, DRM_VIA_FREEMEM,
+ &pVia->swov.SWfbRequest, sizeof(drmViaMem)) <0 )
+ {
+ ErrorF("\n//Cannot free SWOV memory use DRM module!\n");
+ return -errno;
+ }
+ drmClose(pVia->swov.drm_SWOV_fd);
+
+ DBG_DD(ErrorF("\n//DRM Device : Free HQV memory!!\n"));
+
+ if ( drmCommandWrite( pVia->swov.drm_HQV_fd, DRM_VIA_FREEMEM,
+ &pVia->swov.HQVfbRequest, sizeof(drmViaMem)) <0 )
+ {
+ ErrorF("\n//Cannot free HQV memory use DRM module!\n");
+ return -errno;
+ }
+ drmClose(pVia->swov.drm_HQV_fd);
+ }
+ else
+#endif
+ {
+ if(pVia->swov.SWOVlinear)
+ {
+ xf86FreeOffscreenLinear(pVia->swov.SWOVlinear);
+ pVia->swov.SWOVlinear = NULL;
+ }
+
+ }
+
+ pVia->swov.gdwVideoFlagSW = 0;
+ break;
+ }
+ DBG_DD(ErrorF("\n//VIAVidDestroySurface : OK!!\n"));
+ return PI_OK;
+
+} /*VIAVidDestroySurface*/
+
+
+/****************************************************************************
+ *
+ * Upd_Video()
+ *
+ ***************************************************************************/
+static unsigned long Upd_Video(ScrnInfoPtr pScrn, unsigned long dwVideoFlag,unsigned long dwStartAddr,RECTL rSrc,RECTL rDest,unsigned long dwSrcPitch,
+ unsigned long dwOriSrcWidth,unsigned long dwOriSrcHeight,LPDDPIXELFORMAT lpDPFsrc,
+ unsigned long dwDeinterlaceMode,unsigned long dwColorKey,unsigned long dwChromaKey,
+ unsigned long dwKeyLow,unsigned long dwKeyHigh,unsigned long dwChromaLow,unsigned long dwChromaHigh, unsigned long dwFlags)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ unsigned long dwVidCtl=0, dwCompose=(VIDInD(V_COMPOSE_MODE)&~(SELECT_VIDEO_IF_COLOR_KEY|V1_COMMAND_FIRE|V3_COMMAND_FIRE))|V_COMMAND_LOAD_VBI;
+ unsigned long srcWidth, srcHeight,dstWidth,dstHeight;
+ unsigned long zoomCtl=0, miniCtl=0;
+ unsigned long dwHQVCtl=0;
+ unsigned long dwHQVfilterCtl=0,dwHQVminiCtl=0;
+ unsigned long dwHQVzoomflagH=0,dwHQVzoomflagV=0;
+ unsigned long dwHQVsrcWidth=0,dwHQVdstWidth=0;
+ unsigned long dwHQVsrcFetch = 0,dwHQVoffset=0;
+ unsigned long dwOffset=0,dwFetch=0,dwTmp=0;
+ unsigned long dwDisplayCountW=0;
+ VIAHWRec *hwDiff = &pVia->ViaHW;
+
+ DBG_DD(ErrorF("// Upd_Video:\n"));
+ DBG_DD(ErrorF("Modified rSrc X (%ld,%ld) Y (%ld,%ld)\n",
+ rSrc.left, rSrc.right,rSrc.top, rSrc.bottom));
+ DBG_DD(ErrorF("Modified rDest X (%ld,%ld) Y (%ld,%ld)\n",
+ rDest.left, rDest.right,rDest.top, rDest.bottom));
+
+ if (dwVideoFlag & VIDEO_SHOW)
+ {
+ pVia->swov.overlayRecordV1.dwWidth=dstWidth = rDest.right - rDest.left;
+ pVia->swov.overlayRecordV1.dwHeight=dstHeight = rDest.bottom - rDest.top;
+ srcWidth = (unsigned long)rSrc.right - rSrc.left;
+ srcHeight = (unsigned long)rSrc.bottom - rSrc.top;
+ DBG_DD(ErrorF("===srcWidth= %ld \n", srcWidth));
+ DBG_DD(ErrorF("===srcHeight= %ld \n", srcHeight));
+
+ if (dwVideoFlag & VIDEO_1_INUSE)
+ {
+ /*=* Modify for C1 FIFO *=*/
+ switch ( DispatchVGARevisionID(pVia->graphicInfo.RevisionID) )
+ {
+ case VIA_REVISION_CLECX :
+ dwVidCtl = (V1_ENABLE|V1_EXPIRE_NUM_F);
+ break;
+
+ default:
+ /* Overlay source format for V1*/
+ if (pVia->swov.gdwUseExtendedFIFO)
+ {
+ dwVidCtl = (V1_ENABLE|V1_EXPIRE_NUM_A|V1_FIFO_EXTENDED);
+ }
+ else
+ {
+ dwVidCtl = (V1_ENABLE|V1_EXPIRE_NUM);
+ }
+ break;
+ }
+
+ viaOverlayGetV1Format(pVia, dwVideoFlag,lpDPFsrc,&dwVidCtl,&dwHQVCtl);
+ viaOverlayGetV1Format(pVia, dwVideoFlag,lpDPFsrc,&dwVidCtl,&dwHQVCtl);
+ }
+ else
+ {
+ /*=* Modify for C1 FIFO *=*/
+ switch ( DispatchVGARevisionID(pVia->graphicInfo.RevisionID) )
+ {
+ case VIA_REVISION_CLECX :
+ dwVidCtl = (V3_ENABLE|V3_EXPIRE_NUM_F);
+ break;
+
+ default:
+ /* Overlay source format for V1*/
+ dwVidCtl = (V3_ENABLE|V3_EXPIRE_NUM);
+ break;
+ }
+
+ viaOverlayGetV3Format(pVia, dwVideoFlag,lpDPFsrc,&dwVidCtl,&dwHQVCtl);
+ }
+
+ if ( hwDiff->dwThreeHQVBuffer ) /*CLE_C0*/
+ {
+ /* HQV support 3 HQV buffer */
+ dwHQVCtl &= ~HQV_SW_FLIP;
+ dwHQVCtl |= HQV_TRIPLE_BUFF | HQV_FLIP_STATUS;
+ }
+
+ /* Starting address of source and Source offset*/
+ dwOffset = viaOverlayGetSrcStartAddress (pVia, dwVideoFlag,rSrc,rDest,dwSrcPitch,lpDPFsrc,&dwHQVoffset );
+ DBG_DD(ErrorF("===dwOffset= 0x%lx \n", dwOffset));
+
+ pVia->swov.overlayRecordV1.dwOffset = dwOffset;
+
+ if (pVia->swov.DPFsrc.dwFourCC == FOURCC_YV12)
+ {
+ YCBCRREC YCbCr;
+ if (dwVideoFlag & VIDEO_HQV_INUSE)
+ {
+ dwHQVsrcWidth=(unsigned long)rSrc.right - rSrc.left;
+ dwHQVdstWidth=(unsigned long)rDest.right - rDest.left;
+ if (dwHQVsrcWidth>dwHQVdstWidth)
+ {
+ dwOffset = dwOffset * dwHQVdstWidth / dwHQVsrcWidth;
+ }
+
+ if (dwVideoFlag & VIDEO_1_INUSE)
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V1_STARTADDR_0, pVia->swov.overlayRecordV1.dwHQVAddr[0]+dwOffset);
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V1_STARTADDR_1, pVia->swov.overlayRecordV1.dwHQVAddr[1]+dwOffset);
+
+ if ( hwDiff->dwThreeHQVBuffer ) /*CLE_C0*/
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V1_STARTADDR_2, pVia->swov.overlayRecordV1.dwHQVAddr[2]+dwOffset);
+ }
+ else
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V3_STARTADDR_0, pVia->swov.overlayRecordV1.dwHQVAddr[0]+dwOffset);
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V3_STARTADDR_1, pVia->swov.overlayRecordV1.dwHQVAddr[1]+dwOffset);
+
+ if ( hwDiff->dwThreeHQVBuffer ) /*CLE_C0*/
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V3_STARTADDR_2, pVia->swov.overlayRecordV1.dwHQVAddr[2]+dwOffset);
+ }
+ YCbCr = viaOverlayGetYCbCrStartAddress(dwVideoFlag,dwStartAddr,pVia->swov.overlayRecordV1.dwOffset,pVia->swov.overlayRecordV1.dwUVoffset,dwSrcPitch,dwOriSrcHeight);
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, HQV_SRC_STARTADDR_Y, YCbCr.dwY);
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, HQV_SRC_STARTADDR_U, YCbCr.dwCR);
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, HQV_SRC_STARTADDR_V, YCbCr.dwCB);
+ }
+ else
+ {
+ YCbCr = viaOverlayGetYCbCrStartAddress(dwVideoFlag,dwStartAddr,pVia->swov.overlayRecordV1.dwOffset,pVia->swov.overlayRecordV1.dwUVoffset,dwSrcPitch,dwOriSrcHeight);
+ if (dwVideoFlag & VIDEO_1_INUSE)
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V1_STARTADDR_0, YCbCr.dwY);
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V1_STARTADDR_CB0, YCbCr.dwCR);
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V1_STARTADDR_CR0, YCbCr.dwCB);
+ }
+ else
+ {
+ DBG_DD(ErrorF("Upd_Video() : We do not support YV12 with V3!\n"));
+ }
+ }
+ }
+ else
+ {
+ if (dwVideoFlag & VIDEO_HQV_INUSE)
+ {
+ dwHQVsrcWidth=(unsigned long)rSrc.right - rSrc.left;
+ dwHQVdstWidth=(unsigned long)rDest.right - rDest.left;
+ if (dwHQVsrcWidth>dwHQVdstWidth)
+ {
+ dwOffset = dwOffset * dwHQVdstWidth / dwHQVsrcWidth;
+ }
+
+ if (dwVideoFlag & VIDEO_1_INUSE)
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V1_STARTADDR_0, pVia->swov.overlayRecordV1.dwHQVAddr[0]+dwHQVoffset);
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V1_STARTADDR_1, pVia->swov.overlayRecordV1.dwHQVAddr[1]+dwHQVoffset);
+
+ if ( hwDiff->dwThreeHQVBuffer ) /*CLE_C0*/
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V1_STARTADDR_2, pVia->swov.overlayRecordV1.dwHQVAddr[2]+dwHQVoffset);
+ }
+ else
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V3_STARTADDR_0, pVia->swov.overlayRecordV1.dwHQVAddr[0]+dwHQVoffset);
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V3_STARTADDR_1, pVia->swov.overlayRecordV1.dwHQVAddr[1]+dwHQVoffset);
+
+ if ( hwDiff->dwThreeHQVBuffer ) /*CLE_C0*/
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V3_STARTADDR_2, pVia->swov.overlayRecordV1.dwHQVAddr[2]+dwHQVoffset);
+ }
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, HQV_SRC_STARTADDR_Y, dwStartAddr);
+ }
+ else
+ {
+ dwStartAddr += dwOffset;
+
+ if (dwVideoFlag & VIDEO_1_INUSE)
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V1_STARTADDR_0, dwStartAddr);
+ }
+ else
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V3_STARTADDR_0, dwStartAddr);
+ }
+ }
+ }
+
+ dwFetch = viaOverlayGetFetch(dwVideoFlag,lpDPFsrc,srcWidth,dstWidth,dwOriSrcWidth,&dwHQVsrcFetch);
+ DBG_DD(ErrorF("===dwFetch= 0x%lx \n", dwFetch));
+/*
+ //For DCT450 test-BOB INTERLEAVE
+ if ( (dwDeinterlaceMode & DDOVER_INTERLEAVED) && (dwDeinterlaceMode & DDOVER_BOB ) )
+ {
+ if (dwVideoFlag & VIDEO_HQV_INUSE)
+ {
+ dwHQVCtl |= HQV_FIELD_2_FRAME|HQV_FRAME_2_FIELD|HQV_DEINTERLACE;
+ }
+ else
+ {
+ dwVidCtl |= (V1_BOB_ENABLE | V1_FRAME_BASE);
+ }
+ }
+ else if (dwDeinterlaceMode & DDOVER_BOB )
+ {
+ if (dwVideoFlag & VIDEO_HQV_INUSE)
+ {
+ //The HQV source data line count should be two times of the original line count
+ dwHQVCtl |= HQV_FIELD_2_FRAME|HQV_DEINTERLACE;
+ }
+ else
+ {
+ dwVidCtl |= V1_BOB_ENABLE;
+ }
+ }
+*/
+ if (dwVideoFlag & VIDEO_HQV_INUSE)
+ {
+ if ( !(dwDeinterlaceMode & DDOVER_INTERLEAVED) && (dwDeinterlaceMode & DDOVER_BOB ) )
+ {
+ if ( hwDiff->dwHQVFetchByteUnit ) /* CLE_C0 */
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, HQV_SRC_FETCH_LINE, (((dwHQVsrcFetch)-1)<<16)|((dwOriSrcHeight<<1)-1));
+ else
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, HQV_SRC_FETCH_LINE, (((dwHQVsrcFetch>>3)-1)<<16)|((dwOriSrcHeight<<1)-1));
+ }
+ else
+ {
+ if ( hwDiff->dwHQVFetchByteUnit ) /* CLE_C0 */
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, HQV_SRC_FETCH_LINE, (((dwHQVsrcFetch)-1)<<16)|(dwOriSrcHeight-1));
+ else
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, HQV_SRC_FETCH_LINE, (((dwHQVsrcFetch>>3)-1)<<16)|(dwOriSrcHeight-1));
+ }
+ if (pVia->swov.DPFsrc.dwFourCC == FOURCC_YV12)
+ {
+ if (dwVideoFlag & VIDEO_1_INUSE)
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V1_STRIDE, dwSrcPitch<<1);
+ }
+ else
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V3_STRIDE, dwSrcPitch<<1);
+ }
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, HQV_SRC_STRIDE, ((dwSrcPitch>>1)<<16)|dwSrcPitch);
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, HQV_DST_STRIDE, (dwSrcPitch<<1));
+ }
+ else
+ {
+ if (dwVideoFlag & VIDEO_1_INUSE)
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V1_STRIDE, dwSrcPitch);
+ }
+ else
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V3_STRIDE, dwSrcPitch);
+ }
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, HQV_SRC_STRIDE, dwSrcPitch);
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, HQV_DST_STRIDE, dwSrcPitch);
+ }
+
+ }
+ else
+ {
+ if (dwVideoFlag & VIDEO_1_INUSE)
+ {
+/* viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V1_STRIDE, dwSrcPitch | (dwSrcPitch <<15) );*/
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V1_STRIDE, dwSrcPitch );
+ }
+ else
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V3_STRIDE, dwSrcPitch | (dwSrcPitch <<15) );
+ }
+ }
+
+ DBG_DD(ErrorF("rSrc X (%ld,%ld) Y (%ld,%ld)\n",
+ rSrc.left, rSrc.right,rSrc.top, rSrc.bottom));
+ DBG_DD(ErrorF("rDest X (%ld,%ld) Y (%ld,%ld)\n",
+ rDest.left, rDest.right,rDest.top, rDest.bottom));
+
+ /* Destination window key*/
+
+ if (dwVideoFlag & VIDEO_1_INUSE)
+ {
+ /*modify for HW DVI limitation,
+ //When we enable the CRT and DVI both, then change resolution.
+ //If the resolution small than the panel physical size, the video display in Y direction will be cut.
+ //So, we need to adjust the Y top and bottom position. */
+ if ((pVia->graphicInfo.dwDVIOn)&&(pVia->graphicInfo.dwExpand))
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,V1_WIN_END_Y,
+ ((rDest.right-1)<<16) + (rDest.bottom*(pVia->graphicInfo.dwPanelHeight)/pVia->graphicInfo.dwHeight));
+ if (rDest.top > 0)
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V1_WIN_START_Y,
+ (rDest.left<<16) + (rDest.top*(pVia->graphicInfo.dwPanelHeight)/pVia->graphicInfo.dwHeight));
+ }
+ else
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V1_WIN_START_Y,(rDest.left<<16));
+ }
+ }
+ else
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,V1_WIN_END_Y, ((rDest.right-1)<<16) + (rDest.bottom-1));
+ if (rDest.top > 0)
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V1_WIN_START_Y, (rDest.left<<16) + rDest.top );
+ }
+ else
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V1_WIN_START_Y, (rDest.left<<16));
+ }
+ }
+ }
+ else
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,V3_WIN_END_Y, ((rDest.right-1)<<16) + (rDest.bottom-1));
+ if (rDest.top > 0)
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V1_WIN_START_Y, (rDest.left<<16) + rDest.top );
+ }
+ else
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V1_WIN_START_Y, (rDest.left<<16));
+ }
+ }
+
+ dwCompose |= ALWAYS_SELECT_VIDEO;
+
+
+ /* Setup X zoom factor*/
+ pVia->swov.overlayRecordV1.dwFetchAlignment = 0;
+
+ if ( viaOverlayHQVCalcZoomWidth(pVia, dwVideoFlag, srcWidth , dstWidth,
+ &zoomCtl, &miniCtl, &dwHQVfilterCtl, &dwHQVminiCtl,&dwHQVzoomflagH) == PI_ERR )
+ {
+ /* too small to handle*/
+ dwFetch <<= 20;
+ if (dwVideoFlag & VIDEO_1_INUSE)
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V12_QWORD_PER_LINE, dwFetch);
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V_COMPOSE_MODE , dwCompose|V1_COMMAND_FIRE );
+ }
+ else
+ {
+ dwFetch |=(VIDInD(V3_ALPHA_QWORD_PER_LINE)&(~V3_FETCH_COUNT));
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V3_ALPHA_QWORD_PER_LINE, dwFetch);
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V_COMPOSE_MODE , dwCompose|V3_COMMAND_FIRE );
+
+ }
+ viaMacro_VidREGFlush(pVia);
+ return PI_ERR;
+ }
+
+ dwFetch <<= 20;
+ if (dwVideoFlag & VIDEO_1_INUSE)
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V12_QWORD_PER_LINE, dwFetch);
+ }
+ else
+ {
+ dwFetch |=(VIDInD(V3_ALPHA_QWORD_PER_LINE)&(~V3_FETCH_COUNT));
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V3_ALPHA_QWORD_PER_LINE, dwFetch);
+ }
+
+ /*
+ // Setup Y zoom factor
+ */
+
+ /*For DCT450 test-BOB INTERLEAVE*/
+ if ( (dwDeinterlaceMode & DDOVER_INTERLEAVED) && (dwDeinterlaceMode & DDOVER_BOB))
+ {
+ if (!(dwVideoFlag & VIDEO_HQV_INUSE))
+ {
+ srcHeight /=2;
+ if (dwVideoFlag & VIDEO_1_INUSE)
+ {
+ dwVidCtl |= (V1_BOB_ENABLE | V1_FRAME_BASE);
+ }
+ else
+ {
+ dwVidCtl |= (V3_BOB_ENABLE | V3_FRAME_BASE);
+ }
+ }
+ else
+ {
+ dwHQVCtl |= HQV_FIELD_2_FRAME|HQV_FRAME_2_FIELD|HQV_DEINTERLACE;
+ }
+ }
+ else if (dwDeinterlaceMode & DDOVER_BOB )
+ {
+ if (dwVideoFlag & VIDEO_HQV_INUSE)
+ {
+ srcHeight <<=1;
+ dwHQVCtl |= HQV_FIELD_2_FRAME|HQV_DEINTERLACE;
+ }
+ else
+ {
+ if (dwVideoFlag & VIDEO_1_INUSE)
+ {
+ dwVidCtl |= V1_BOB_ENABLE;
+ }
+ else
+ {
+ dwVidCtl |= V3_BOB_ENABLE;
+ }
+ }
+ }
+
+ viaOverlayGetDisplayCount(pVia, dwVideoFlag,lpDPFsrc,srcWidth,&dwDisplayCountW);
+
+ if (dwVideoFlag & VIDEO_1_INUSE)
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V1_SOURCE_HEIGHT, (srcHeight<<16)|dwDisplayCountW);
+ }
+ else
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,V3_SOURCE_WIDTH, dwDisplayCountW);
+ }
+
+ if ( viaOverlayHQVCalcZoomHeight(pVia, srcHeight,dstHeight,&zoomCtl,&miniCtl, &dwHQVfilterCtl, &dwHQVminiCtl ,&dwHQVzoomflagV) == PI_ERR )
+ {
+ if (dwVideoFlag & VIDEO_1_INUSE)
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V_COMPOSE_MODE , dwCompose|V1_COMMAND_FIRE );
+ }
+ else
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V_COMPOSE_MODE , dwCompose|V3_COMMAND_FIRE );
+ }
+
+ viaMacro_VidREGFlush(pVia);
+ return PI_ERR;
+ }
+
+ if (miniCtl & V1_Y_INTERPOLY)
+ {
+ if (pVia->swov.DPFsrc.dwFourCC == FOURCC_YV12)
+ {
+ if (dwVideoFlag & VIDEO_HQV_INUSE)
+ {
+ if (dwVideoFlag & VIDEO_1_INUSE)
+ {
+ /*=* Modify for C1 FIFO *=*/
+ switch ( DispatchVGARevisionID(pVia->graphicInfo.RevisionID) )
+ {
+ case VIA_REVISION_CLECX :
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V_FIFO_CONTROL,
+ V1_FIFO_DEPTH64 | V1_FIFO_PRETHRESHOLD56 | V1_FIFO_THRESHOLD56);
+ break;
+
+ default:
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V_FIFO_CONTROL,
+ V1_FIFO_DEPTH32 | V1_FIFO_PRETHRESHOLD29 | V1_FIFO_THRESHOLD16);
+ break;
+ }
+ }
+ else
+ {
+ /*=* Modify for C1 FIFO *=*/
+ switch ( DispatchVGARevisionID(pVia->graphicInfo.RevisionID) )
+ {
+ case VIA_REVISION_CLECX :
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, ALPHA_V3_FIFO_CONTROL,
+ (VIDInD(ALPHA_V3_FIFO_CONTROL)&ALPHA_FIFO_MASK)|V3_FIFO_DEPTH64 | V3_FIFO_THRESHOLD56);
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, ALPHA_V3_PREFIFO_CONTROL ,V3_FIFO_PRETHRESHOLD56 |
+ ( VIDInD(ALPHA_V3_PREFIFO_CONTROL)& (~V3_FIFO_MASK)) );
+ break;
+
+ default:
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, ALPHA_V3_FIFO_CONTROL,
+ (VIDInD(ALPHA_V3_FIFO_CONTROL)&ALPHA_FIFO_MASK)|V3_FIFO_DEPTH32 | V3_FIFO_THRESHOLD16);
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, ALPHA_V3_PREFIFO_CONTROL ,(V3_FIFO_THRESHOLD16>>8) |
+ ( VIDInD(ALPHA_V3_PREFIFO_CONTROL)& (~V3_FIFO_MASK)) );
+ break;
+ }
+ }
+ }
+ else
+ {
+ /*Minified Video will be skewed if not work around*/
+ if (srcWidth <= 80) /*Fetch count <= 5*/
+ {
+ if (dwVideoFlag & VIDEO_1_INUSE)
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V_FIFO_CONTROL,V1_FIFO_DEPTH16 );
+ }
+ else
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, ALPHA_V3_FIFO_CONTROL,
+ (VIDInD(ALPHA_V3_FIFO_CONTROL)&ALPHA_FIFO_MASK)|V3_FIFO_DEPTH16 );
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, ALPHA_V3_PREFIFO_CONTROL ,(V3_FIFO_THRESHOLD16>>8) |
+ ( VIDInD(ALPHA_V3_PREFIFO_CONTROL)& (~V3_FIFO_MASK)) );
+ }
+ }
+ else
+ {
+ if (dwVideoFlag & VIDEO_1_INUSE)
+ {
+ /*=* Modify for C1 FIFO *=*/
+ switch ( DispatchVGARevisionID(pVia->graphicInfo.RevisionID) )
+ {
+ case VIA_REVISION_CLECX :
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V_FIFO_CONTROL,
+ V1_FIFO_DEPTH64 | V1_FIFO_PRETHRESHOLD56 | V1_FIFO_THRESHOLD56);
+ break;
+
+ default:
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V_FIFO_CONTROL,
+ V1_FIFO_DEPTH16 | V1_FIFO_PRETHRESHOLD12 | V1_FIFO_THRESHOLD8);
+ break;
+ }
+ }
+ else
+ {
+ /*=* Modify for C1 FIFO *=*/
+ switch ( DispatchVGARevisionID(pVia->graphicInfo.RevisionID) )
+ {
+ case VIA_REVISION_CLECX :
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, ALPHA_V3_FIFO_CONTROL,
+ (VIDInD(ALPHA_V3_FIFO_CONTROL)&ALPHA_FIFO_MASK)|V3_FIFO_DEPTH64 | V3_FIFO_THRESHOLD56);
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, ALPHA_V3_PREFIFO_CONTROL ,V3_FIFO_PRETHRESHOLD56 |
+ ( VIDInD(ALPHA_V3_PREFIFO_CONTROL)& (~V3_FIFO_MASK)) );
+ break;
+
+ default:
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, ALPHA_V3_FIFO_CONTROL,
+ (VIDInD(ALPHA_V3_FIFO_CONTROL)&ALPHA_FIFO_MASK)|V3_FIFO_DEPTH16 | V3_FIFO_THRESHOLD8);
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, ALPHA_V3_PREFIFO_CONTROL ,(V3_FIFO_THRESHOLD16>>8) |
+ ( VIDInD(ALPHA_V3_PREFIFO_CONTROL)& (~V3_FIFO_MASK)) );
+ break;
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ if (dwVideoFlag & VIDEO_1_INUSE)
+ {
+ /*=* Modify for C1 FIFO *=*/
+ switch ( DispatchVGARevisionID(pVia->graphicInfo.RevisionID) )
+ {
+ case VIA_REVISION_CLECX :
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V_FIFO_CONTROL,
+ V1_FIFO_DEPTH64 | V1_FIFO_PRETHRESHOLD56 | V1_FIFO_THRESHOLD56);
+ break;
+
+ default:
+ if (pVia->swov.gdwUseExtendedFIFO)
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V_FIFO_CONTROL,
+ V1_FIFO_DEPTH48 | V1_FIFO_PRETHRESHOLD40 | V1_FIFO_THRESHOLD40);
+ }
+ else
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V_FIFO_CONTROL,
+ V1_FIFO_DEPTH32 | V1_FIFO_PRETHRESHOLD29 | V1_FIFO_THRESHOLD16);
+ }
+ break;
+ }
+ }
+ else
+ {
+ /*Fix V3 bug*/
+ if (srcWidth <= 8)
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, ALPHA_V3_FIFO_CONTROL,
+ (VIDInD(ALPHA_V3_FIFO_CONTROL)&ALPHA_FIFO_MASK));
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, ALPHA_V3_PREFIFO_CONTROL ,
+ ( VIDInD(ALPHA_V3_PREFIFO_CONTROL)& (~V3_FIFO_MASK)) );
+ }
+ else
+ {
+ /*=* Modify for C1 FIFO *=*/
+ switch ( DispatchVGARevisionID(pVia->graphicInfo.RevisionID) )
+ {
+ case VIA_REVISION_CLECX :
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, ALPHA_V3_FIFO_CONTROL,
+ (VIDInD(ALPHA_V3_FIFO_CONTROL)&ALPHA_FIFO_MASK)|V3_FIFO_DEPTH64 | V3_FIFO_THRESHOLD56);
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, ALPHA_V3_PREFIFO_CONTROL ,V3_FIFO_PRETHRESHOLD56 |
+ ( VIDInD(ALPHA_V3_PREFIFO_CONTROL)& (~V3_FIFO_MASK)) );
+ break;
+
+ default:
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, ALPHA_V3_FIFO_CONTROL,
+ (VIDInD(ALPHA_V3_FIFO_CONTROL)&ALPHA_FIFO_MASK)|V3_FIFO_DEPTH32 | V3_FIFO_THRESHOLD16);
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, ALPHA_V3_PREFIFO_CONTROL ,(V3_FIFO_THRESHOLD16>>8) |
+ ( VIDInD(ALPHA_V3_PREFIFO_CONTROL)& (~V3_FIFO_MASK)) );
+ break;
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ if (pVia->swov.DPFsrc.dwFourCC == FOURCC_YV12)
+ {
+ if (dwVideoFlag & VIDEO_HQV_INUSE)
+ {
+ if (dwVideoFlag & VIDEO_1_INUSE)
+ {
+ /*=* Modify for C1 FIFO *=*/
+ switch ( DispatchVGARevisionID(pVia->graphicInfo.RevisionID) )
+ {
+ case VIA_REVISION_CLECX :
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V_FIFO_CONTROL,
+ V1_FIFO_DEPTH64 | V1_FIFO_PRETHRESHOLD56 | V1_FIFO_THRESHOLD56);
+ break;
+
+ default:
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V_FIFO_CONTROL,
+ V1_FIFO_DEPTH32 | V1_FIFO_PRETHRESHOLD29 | V1_FIFO_THRESHOLD16);
+ break;
+ }
+ }
+ else
+ {
+ /*=* Modify for C1 FIFO *=*/
+ switch ( DispatchVGARevisionID(pVia->graphicInfo.RevisionID) )
+ {
+ case VIA_REVISION_CLECX :
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, ALPHA_V3_FIFO_CONTROL,
+ (VIDInD(ALPHA_V3_FIFO_CONTROL)&ALPHA_FIFO_MASK)|V3_FIFO_DEPTH64 | V3_FIFO_THRESHOLD56);
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, ALPHA_V3_PREFIFO_CONTROL ,V3_FIFO_PRETHRESHOLD56 |
+ ( VIDInD(ALPHA_V3_PREFIFO_CONTROL)& (~V3_FIFO_MASK)) );
+ break;
+
+ default:
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, ALPHA_V3_FIFO_CONTROL,
+ (VIDInD(ALPHA_V3_FIFO_CONTROL)&ALPHA_FIFO_MASK)|V3_FIFO_DEPTH32 | V3_FIFO_THRESHOLD16);
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, ALPHA_V3_PREFIFO_CONTROL ,(V3_FIFO_THRESHOLD16>>8) |
+ ( VIDInD(ALPHA_V3_PREFIFO_CONTROL)& (~V3_FIFO_MASK)) );
+ break;
+ }
+ }
+ }
+ else
+ {
+ /*Minified Video will be skewed if not work around*/
+ if (srcWidth <= 80) /*Fetch count <= 5*/
+ {
+ if (dwVideoFlag & VIDEO_1_INUSE)
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V_FIFO_CONTROL,V1_FIFO_DEPTH16 );
+ }
+ else
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, ALPHA_V3_FIFO_CONTROL,
+ (VIDInD(ALPHA_V3_FIFO_CONTROL)&ALPHA_FIFO_MASK)|V3_FIFO_DEPTH16 );
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, ALPHA_V3_PREFIFO_CONTROL ,(V3_FIFO_THRESHOLD16>>8) |
+ ( VIDInD(ALPHA_V3_PREFIFO_CONTROL)& (~V3_FIFO_MASK)) );
+ }
+ }
+ else
+ {
+ if (dwVideoFlag & VIDEO_1_INUSE)
+ {
+ /*=* Modify for C1 FIFO *=*/
+ switch ( DispatchVGARevisionID(pVia->graphicInfo.RevisionID) )
+ {
+ case VIA_REVISION_CLECX :
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V_FIFO_CONTROL,
+ V1_FIFO_DEPTH64 | V1_FIFO_PRETHRESHOLD56 | V1_FIFO_THRESHOLD56);
+ break;
+
+ default:
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V_FIFO_CONTROL,
+ V1_FIFO_DEPTH16 | V1_FIFO_PRETHRESHOLD12 | V1_FIFO_THRESHOLD8);
+ break;
+ }
+ }
+ else
+ {
+ /*=* Modify for C1 FIFO *=*/
+ switch ( DispatchVGARevisionID(pVia->graphicInfo.RevisionID) )
+ {
+ case VIA_REVISION_CLECX :
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, ALPHA_V3_FIFO_CONTROL,
+ (VIDInD(ALPHA_V3_FIFO_CONTROL)&ALPHA_FIFO_MASK)|V3_FIFO_DEPTH64 | V3_FIFO_THRESHOLD56);
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, ALPHA_V3_PREFIFO_CONTROL ,V3_FIFO_PRETHRESHOLD56 |
+ ( VIDInD(ALPHA_V3_PREFIFO_CONTROL)& (~V3_FIFO_MASK)) );
+ break;
+
+ default:
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, ALPHA_V3_FIFO_CONTROL,
+ (VIDInD(ALPHA_V3_FIFO_CONTROL)&ALPHA_FIFO_MASK)|V3_FIFO_DEPTH16 | V3_FIFO_THRESHOLD8);
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, ALPHA_V3_PREFIFO_CONTROL ,(V3_FIFO_THRESHOLD16>>8) |
+ ( VIDInD(ALPHA_V3_PREFIFO_CONTROL)& (~V3_FIFO_MASK)) );
+ break;
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ if (dwVideoFlag & VIDEO_1_INUSE)
+ {
+ /*=* Modify for C1 FIFO *=*/
+ switch ( DispatchVGARevisionID(pVia->graphicInfo.RevisionID) )
+ {
+ case VIA_REVISION_CLECX :
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V_FIFO_CONTROL,
+ V1_FIFO_DEPTH64 | V1_FIFO_PRETHRESHOLD56 | V1_FIFO_THRESHOLD56);
+ break;
+
+ default:
+ if (pVia->swov.gdwUseExtendedFIFO)
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V_FIFO_CONTROL,
+ V1_FIFO_DEPTH48 | V1_FIFO_PRETHRESHOLD40 | V1_FIFO_THRESHOLD40);
+ }
+ else
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, V_FIFO_CONTROL,
+ V1_FIFO_DEPTH32 | V1_FIFO_PRETHRESHOLD29 | V1_FIFO_THRESHOLD16);
+ }
+ break;
+ }
+ }
+ else
+ {
+ /*Fix V3 bug*/
+ if (srcWidth <= 8)
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, ALPHA_V3_FIFO_CONTROL,
+ (VIDInD(ALPHA_V3_FIFO_CONTROL)&ALPHA_FIFO_MASK));
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, ALPHA_V3_PREFIFO_CONTROL ,
+ ( VIDInD(ALPHA_V3_PREFIFO_CONTROL)& (~V3_FIFO_MASK)) );
+ }
+ else
+ {
+ /*=* Modify for C1 FIFO *=*/
+ switch ( DispatchVGARevisionID(pVia->graphicInfo.RevisionID) )
+ {
+ case VIA_REVISION_CLECX :
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, ALPHA_V3_FIFO_CONTROL,
+ (VIDInD(ALPHA_V3_FIFO_CONTROL)&ALPHA_FIFO_MASK)|V3_FIFO_DEPTH64 | V3_FIFO_THRESHOLD56);
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, ALPHA_V3_PREFIFO_CONTROL ,V3_FIFO_PRETHRESHOLD56 |
+ ( VIDInD(ALPHA_V3_PREFIFO_CONTROL)& (~V3_FIFO_MASK)) );
+ break;
+
+ default:
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, ALPHA_V3_FIFO_CONTROL,
+ (VIDInD(ALPHA_V3_FIFO_CONTROL)&ALPHA_FIFO_MASK)|V3_FIFO_DEPTH32 | V3_FIFO_THRESHOLD16);
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, ALPHA_V3_PREFIFO_CONTROL ,(V3_FIFO_THRESHOLD16>>8) |
+ ( VIDInD(ALPHA_V3_PREFIFO_CONTROL)& (~V3_FIFO_MASK)) );
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ if (dwVideoFlag & VIDEO_HQV_INUSE)
+ {
+ miniCtl=0;
+ if (dwHQVzoomflagH||dwHQVzoomflagV)
+ {
+ dwTmp = 0;
+ if (dwHQVzoomflagH)
+ {
+ miniCtl = V1_X_INTERPOLY;
+ dwTmp = (zoomCtl&0xffff0000);
+ }
+
+ if (dwHQVzoomflagV)
+ {
+ miniCtl |= (V1_Y_INTERPOLY | V1_YCBCR_INTERPOLY);
+ dwTmp |= (zoomCtl&0x0000ffff);
+ dwHQVfilterCtl &= 0xfffdffff;
+ }
+
+ /*Temporarily fix for 2D bandwidth problem. 2002/08/01*/
+ if ((pVia->swov.gdwUseExtendedFIFO))
+ {
+ miniCtl &= ~V1_Y_INTERPOLY;
+ }
+
+ if (dwVideoFlag & VIDEO_1_INUSE)
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,V1_MINI_CONTROL, miniCtl);
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,V1_ZOOM_CONTROL, dwTmp);
+ }
+ else
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,V3_MINI_CONTROL, miniCtl);
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,V3_ZOOM_CONTROL, dwTmp);
+ }
+ }
+ else
+ {
+ if (srcHeight==dstHeight)
+ {
+ dwHQVfilterCtl &= 0xfffdffff;
+ }
+ if (dwVideoFlag & VIDEO_1_INUSE)
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,V1_MINI_CONTROL, 0);
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,V1_ZOOM_CONTROL, 0);
+ }
+ else
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,V3_MINI_CONTROL, 0);
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,V3_ZOOM_CONTROL, 0);
+ }
+ }
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,HQV_MINIFY_CONTROL, dwHQVminiCtl);
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,HQV_FILTER_CONTROL, dwHQVfilterCtl);
+ }
+ else
+ {
+ if (dwVideoFlag & VIDEO_1_INUSE)
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,V1_MINI_CONTROL, miniCtl);
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,V1_ZOOM_CONTROL, zoomCtl);
+ }
+ else
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,V3_MINI_CONTROL, miniCtl);
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,V3_ZOOM_CONTROL, zoomCtl);
+ }
+ }
+
+
+ /* Colorkey*/
+ if (dwColorKey) {
+ DBG_DD(ErrorF("Overlay colorkey= low:%08lx high:%08lx\n", dwKeyLow, dwKeyHigh));
+
+ dwKeyLow &= 0x00FFFFFF;
+ /*viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,V_COLOR_KEY, dwKeyLow);*/
+
+ if (dwVideoFlag & VIDEO_1_INUSE)
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,V_COLOR_KEY, dwKeyLow);
+ }
+ else
+ {
+ if ( hwDiff->dwSupportTwoColorKey ) /*CLE_C0*/
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,V3_COLOR_KEY, dwKeyLow);
+ }
+
+ /*dwCompose = (dwCompose & ~0x0f) | SELECT_VIDEO_IF_COLOR_KEY;*/
+ /*CLE_C0*/
+ dwCompose = (dwCompose & ~0x0f) | SELECT_VIDEO_IF_COLOR_KEY | SELECT_VIDEO3_IF_COLOR_KEY;
+ /*dwCompose = (dwCompose & ~0x0f) ;*/
+ }
+
+ if (dwChromaKey) {
+ DBG_DD(ErrorF("Overlay Chromakey= low:%08lx high:%08lx\n", dwKeyLow, dwKeyHigh));
+
+ dwChromaLow &= CHROMA_KEY_LOW;
+ dwChromaHigh &= CHROMA_KEY_HIGH;
+
+ dwChromaLow |= (VIDInD(V_CHROMAKEY_LOW)&(~CHROMA_KEY_LOW));
+ dwChromaHigh |= (VIDInD(V_CHROMAKEY_HIGH)&(~CHROMA_KEY_HIGH));
+
+ /*Added by Scottie[2001.12.5] for Chroma Key*/
+ if (pVia->swov.DPFsrc.dwFlags & DDPF_FOURCC)
+ {
+ switch (pVia->swov.DPFsrc.dwFourCC) {
+ case FOURCC_YV12:
+ /*to be continued...*/
+ break;
+ case FOURCC_YUY2:
+ /*to be continued...*/
+ break;
+ default:
+ /*TOINT3;*/
+ break;
+ }
+ }
+ else if (pVia->swov.DPFsrc.dwFlags & DDPF_RGB)
+ {
+ unsigned long dwtmpLowR;
+ unsigned long dwtmpLowG;
+ unsigned long dwtmpLowB;
+ unsigned long dwtmpChromaLow;
+ unsigned long dwtmpHighR;
+ unsigned long dwtmpHighG;
+ unsigned long dwtmpHighB;
+ unsigned long dwtmpChromaHigh;
+
+ switch (pVia->swov.DPFsrc.dwRGBBitCount) {
+ case 16:
+ if (pVia->swov.DPFsrc.dwGBitMask==0x07E0) /*RGB16(5:6:5)*/
+ {
+ dwtmpLowR = (((dwChromaLow >> 11) << 3) | ((dwChromaLow >> 13) & 0x07)) & 0xFF;
+ dwtmpLowG = (((dwChromaLow >> 5) << 2) | ((dwChromaLow >> 9) & 0x03)) & 0xFF;
+
+ dwtmpHighR = (((dwChromaHigh >> 11) << 3) | ((dwChromaHigh >> 13) & 0x07)) & 0xFF;
+ dwtmpHighG = (((dwChromaHigh >> 5) << 2) | ((dwChromaHigh >> 9) & 0x03)) & 0xFF;
+ }
+ else /*RGB15(5:5:5)*/
+ {
+ dwtmpLowR = (((dwChromaLow >> 10) << 3) | ((dwChromaLow >> 12) & 0x07)) & 0xFF;
+ dwtmpLowG = (((dwChromaLow >> 5) << 3) | ((dwChromaLow >> 7) & 0x07)) & 0xFF;
+
+ dwtmpHighR = (((dwChromaHigh >> 10) << 3) | ((dwChromaHigh >> 12) & 0x07)) & 0xFF;
+ dwtmpHighG = (((dwChromaHigh >> 5) << 3) | ((dwChromaHigh >> 7) & 0x07)) & 0xFF;
+ }
+ dwtmpLowB = (((dwChromaLow << 3) | (dwChromaLow >> 2)) & 0x07) & 0xFF;
+ dwtmpChromaLow = (dwtmpLowG << 16) | (dwtmpLowR << 8) | dwtmpLowB;
+ dwChromaLow = ((dwChromaLow >> 24) << 24) | dwtmpChromaLow;
+
+ dwtmpHighB = (((dwChromaHigh << 3) | (dwChromaHigh >> 2)) & 0x07) & 0xFF;
+ dwtmpChromaHigh = (dwtmpHighG << 16) | (dwtmpHighR << 8) | dwtmpHighB;
+ dwChromaHigh = ((dwChromaHigh >> 24) << 24) | dwtmpChromaHigh;
+ break;
+
+ case 32: /*32 bit RGB*/
+ dwtmpLowR = (dwChromaLow >> 16) & 0xFF;
+ dwtmpLowG = (dwChromaLow >> 8) & 0xFF;
+ dwtmpLowB = dwChromaLow & 0xFF;
+ dwtmpChromaLow = (dwtmpLowG << 16) | (dwtmpLowR << 8) | dwtmpLowB;
+ dwChromaLow = ((dwChromaLow >> 24) << 24) | dwtmpChromaLow;
+
+ dwtmpHighR = (dwChromaHigh >> 16) & 0xFF;
+ dwtmpHighG = (dwChromaHigh >> 8) & 0xFF;
+ dwtmpHighB = dwChromaHigh & 0xFF;
+ dwtmpChromaHigh = (dwtmpHighG << 16) | (dwtmpHighR << 8) | dwtmpHighB;
+ dwChromaHigh = ((dwChromaHigh >> 24) << 24) | dwtmpChromaHigh;
+ break;
+
+ default:
+ /*TOINT3;*/
+ break;
+ }
+ }/*End of DDPF_FOURCC*/
+
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,V_CHROMAKEY_HIGH,dwChromaHigh);
+ if (dwVideoFlag & VIDEO_1_INUSE)
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,V_CHROMAKEY_LOW, dwChromaLow);
+ /*Temporarily solve the H/W Interpolation error when using Chroma Key*/
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,V1_MINI_CONTROL, miniCtl & 0xFFFFFFF8);
+ }
+ else
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,V_CHROMAKEY_LOW, dwChromaLow|V_CHROMAKEY_V3);
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,V3_MINI_CONTROL, miniCtl & 0xFFFFFFF8);
+ }
+
+ /*Modified by Scottie[2001.12.5] for select video if (color key & chroma key)*/
+ if (dwCompose==SELECT_VIDEO_IF_COLOR_KEY)
+ dwCompose = SELECT_VIDEO_IF_COLOR_KEY | SELECT_VIDEO_IF_CHROMA_KEY;
+ else
+ dwCompose = (dwCompose & ~0x0f) | SELECT_VIDEO_IF_CHROMA_KEY;
+ }
+
+ /* determine which video stream is on top */
+ /*
+ DBG_DD(ErrorF(" dwFlags= 0x%08lx\n", dwFlags));
+ if (dwFlags & DDOVER_CLIP)
+ dwCompose |= COMPOSE_V3_TOP;
+ else
+ dwCompose |= COMPOSE_V1_TOP;
+ */
+ DBG_DD(ErrorF(" pVia->Video.dwCompose 0x%lx\n", pVia->Video.dwCompose));
+
+ if (pVia->Video.dwCompose & (VW_TV1_TOP | VW_TV_TOP) )
+ dwCompose |= COMPOSE_V3_TOP;
+ else if (pVia->Video.dwCompose & (VW_TV0_TOP | VW_DVD_TOP) )
+ dwCompose &= ~COMPOSE_V3_TOP;
+
+ DBG_DD(ErrorF(" dwCompose 0x%8lx\n", dwCompose));
+
+ /* Setup video control*/
+ if (dwVideoFlag & VIDEO_HQV_INUSE)
+ {
+ if (!pVia->swov.SWVideo_ON)
+ /*if (0)*/
+ {
+ DBG_DD(ErrorF(" First HQV\n"));
+
+ viaMacro_VidREGFlush(pVia);
+
+ DBG_DD(ErrorF(" Wait flips"));
+ if ( hwDiff->dwHQVInitPatch )
+ {
+ DBG_DD(ErrorF(" Wait flips 1"));
+ viaWaitHQVFlipClear(pVia, ((dwHQVCtl&~HQV_SW_FLIP)|HQV_FLIP_STATUS)&~HQV_ENABLE);
+ VIDOutD(HQV_CONTROL, dwHQVCtl);
+ DBG_DD(ErrorF(" Wait flips2"));
+ viaWaitHQVFlip(pVia);
+ DBG_DD(ErrorF(" Wait flips 3"));
+ viaWaitHQVFlipClear(pVia, ((dwHQVCtl&~HQV_SW_FLIP)|HQV_FLIP_STATUS)&~HQV_ENABLE);
+ VIDOutD(HQV_CONTROL, dwHQVCtl);
+ DBG_DD(ErrorF(" Wait flips4"));
+ viaWaitHQVFlip(pVia);
+ }
+ else /* CLE_C0 */
+ {
+ VIDOutD(HQV_CONTROL, dwHQVCtl & ~HQV_SW_FLIP);
+ VIDOutD(HQV_CONTROL, dwHQVCtl | HQV_SW_FLIP);
+ DBG_DD(ErrorF(" Wait flips5"));
+ viaWaitHQVFlip(pVia);
+ DBG_DD(ErrorF(" Wait flips6"));
+ }
+
+ if (dwVideoFlag & VIDEO_1_INUSE)
+ {
+ VIDOutD(V1_CONTROL, dwVidCtl);
+ VIDOutD(V_COMPOSE_MODE, (dwCompose|V1_COMMAND_FIRE ));
+ if (pVia->swov.gdwUseExtendedFIFO)
+ {
+ /*Set Display FIFO*/
+ DBG_DD(ErrorF(" Wait flips7"));
+ viaWaitVBI(pVia);
+ DBG_DD(ErrorF(" Wait flips 8"));
+ /*outb(0x17, 0x3C4); outb(0x2f, 0x3C5);
+ outb(0x16, 0x3C4); outb((pVia->swov.Save_3C4_16&0xf0)|0x14, 0x3C5);
+ outb(0x18, 0x3C4); outb(0x56, 0x3C5);*/
+
+ VGAOUT8(0x3C4, 0x17); VGAOUT8(0x3C5, 0x2f);
+ VGAOUT8(0x3C4, 0x16); VGAOUT8(0x3C5, (pVia->swov.Save_3C4_16&0xf0)|0x14);
+ VGAOUT8(0x3C4, 0x18); VGAOUT8(0x3C5, 0x56);
+ DBG_DD(ErrorF(" Wait flips 9"));
+ }
+ }
+ else
+ {
+ DBG_DD(ErrorF(" Wait flips 10"));
+ VIDOutD(V3_CONTROL, dwVidCtl);
+ VIDOutD(V_COMPOSE_MODE, (dwCompose|V3_COMMAND_FIRE ));
+ }
+ DBG_DD(ErrorF(" Done flips"));
+ }
+ else
+ {
+ DBG_DD(ErrorF(" Normal called\n"));
+ if (dwVideoFlag & VIDEO_1_INUSE)
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,V1_CONTROL, dwVidCtl);
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,V_COMPOSE_MODE, (dwCompose|V1_COMMAND_FIRE ));
+ }
+ else
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,V3_CONTROL, dwVidCtl);
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,V_COMPOSE_MODE, (dwCompose|V3_COMMAND_FIRE ));
+ }
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER, HQV_CONTROL, dwHQVCtl|HQV_FLIP_STATUS);
+ viaWaitHQVDone(pVia);
+ viaMacro_VidREGFlush(pVia);
+ }
+ }
+ else
+ {
+ if (dwVideoFlag & VIDEO_1_INUSE)
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,V1_CONTROL, dwVidCtl);
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,V_COMPOSE_MODE, (dwCompose|V1_COMMAND_FIRE ));
+ }
+ else
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,V3_CONTROL, dwVidCtl);
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,V_COMPOSE_MODE, (dwCompose|V3_COMMAND_FIRE ));
+ }
+ viaWaitHQVDone(pVia);
+ viaMacro_VidREGFlush(pVia);
+ }
+ pVia->swov.SWVideo_ON = TRUE;
+ }
+ else
+ {
+ /*Hide overlay*/
+
+ if ( hwDiff->dwHQVDisablePatch ) /*CLE_C0*/
+ {
+ VGAOUT8(0x3C4, 0x2E);
+ VGAOUT8(0x3C5, 0xEF);
+ }
+
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,V_FIFO_CONTROL,V1_FIFO_PRETHRESHOLD12 |
+ V1_FIFO_THRESHOLD8 |V1_FIFO_DEPTH16);
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,ALPHA_V3_FIFO_CONTROL, ALPHA_FIFO_THRESHOLD4
+ | ALPHA_FIFO_DEPTH8 | V3_FIFO_THRESHOLD24 | V3_FIFO_DEPTH32 );
+
+ if (dwVideoFlag&VIDEO_HQV_INUSE)
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,HQV_CONTROL, (VIDInD(HQV_CONTROL) & (~HQV_ENABLE)));
+ }
+
+ if (dwVideoFlag&VIDEO_1_INUSE)
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,V1_CONTROL, (VIDInD(V1_CONTROL) & (~V1_ENABLE)));
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,V_COMPOSE_MODE, (VIDInD(V_COMPOSE_MODE)|V1_COMMAND_FIRE));
+ }
+ else
+ {
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,V3_CONTROL, (VIDInD(V3_CONTROL) & (~V3_ENABLE)));
+ viaMacro_VidREGRec(pVia, VIDREGREC_SAVE_REGISTER,V_COMPOSE_MODE, (VIDInD(V_COMPOSE_MODE)|V3_COMMAND_FIRE));
+ }
+
+ viaMacro_VidREGFlush(pVia);
+
+ if ( hwDiff->dwHQVDisablePatch ) /*CLE_C0*/
+ {
+ VGAOUT8(0x3C4, 0x2E);
+ VGAOUT8(0x3C5, 0xFF);
+ }
+
+ }
+ DBG_DD(ErrorF(" Done Upd_Video"));
+
+ return PI_OK;
+
+} /* Upd_Video */
+
+/*************************************************************************
+ * VIAVidUpdateOverlay
+ * Parameters: src rectangle, dst rectangle, colorkey...
+ * Return Value: unsigned long of state
+ * note: Update the overlay image param.
+*************************************************************************/
+unsigned long VIAVidUpdateOverlay(ScrnInfoPtr pScrn, LPDDUPDATEOVERLAY lpUpdate)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ unsigned long dwFlags = lpUpdate->dwFlags;
+ unsigned long dwKeyLow=0, dwKeyHigh=0;
+ unsigned long dwChromaLow=0, dwChromaHigh=0;
+ unsigned long dwVideoFlag=0;
+ unsigned long dwColorKey=0, dwChromaKey=0;
+ /*DDUPDATEOVERLAY UpdateOverlayTemp;*/
+ int nDstTop, nDstBottom, nDstLeft, nDstRight;
+
+ DBG_DD(ErrorF("// VIAVidUpdateOverlay: %08lx\n", dwFlags));
+
+ /* Adjust to fix panning mode bug */
+ lpUpdate->rDest.left = lpUpdate->rDest.left - (pVia->swov.panning_x - pVia->swov.panning_old_x);
+ lpUpdate->rDest.top = lpUpdate->rDest.top - (pVia->swov.panning_y - pVia->swov.panning_old_y);
+ lpUpdate->rDest.right = lpUpdate->rDest.right - (pVia->swov.panning_x - pVia->swov.panning_old_x);
+ lpUpdate->rDest.bottom = lpUpdate->rDest.bottom - (pVia->swov.panning_y - pVia->swov.panning_old_y);
+
+ DBG_DD(ErrorF("Raw rSrc X (%ld,%ld) Y (%ld,%ld)\n",
+ lpUpdate->rSrc.left, lpUpdate->rSrc.right, lpUpdate->rSrc.top, lpUpdate->rSrc.bottom));
+ DBG_DD(ErrorF("Raw rDest X (%ld,%ld) Y (%ld,%ld)\n",
+ lpUpdate->rDest.left, lpUpdate->rDest.right, lpUpdate->rDest.top, lpUpdate->rDest.bottom));
+
+/* if (pVia->swov.gdwVideoFlagTV1 && !gdwOverlaySupport)
+ return PI_OK;
+*/
+ if ( (pVia->swov.DPFsrc.dwFourCC == FOURCC_YUY2)||( pVia->swov.DPFsrc.dwFourCC == FOURCC_YV12 ) )
+ dwVideoFlag = pVia->swov.gdwVideoFlagSW;
+
+ dwFlags |= DDOVER_INTERLEAVED;
+
+ /* For Alpha windows setting */
+ if (pVia->swov.gdwAlphaEnabled)
+ dwFlags &= ~DDOVER_KEYDEST;
+
+ viaMacro_VidREGRec(pVia, VIDREGREC_RESET_COUNTER, 0,0);
+
+ if ( dwFlags & DDOVER_HIDE )
+ {
+ DBG_DD(ErrorF("// :DDOVER_HIDE \n"));
+
+ dwVideoFlag &= ~VIDEO_SHOW;
+ if (Upd_Video(pScrn, dwVideoFlag,0,lpUpdate->rSrc,lpUpdate->rDest,0,0,0,&pVia->swov.DPFsrc,0,
+ 0,0,0,0,0,0, dwFlags)== PI_ERR)
+ {
+ return PI_ERR;
+ }
+ pVia->swov.SWVideo_ON = FALSE;
+ pVia->swov.UpdateOverlayBackup.rDest.left = 0;
+ pVia->swov.UpdateOverlayBackup.rDest.top = 0;
+ pVia->swov.UpdateOverlayBackup.rDest.right = 0;
+ pVia->swov.UpdateOverlayBackup.rDest.bottom = 0;
+
+ if (pVia->swov.gdwUseExtendedFIFO)
+ {
+ /*Restore Display fifo*/
+ /*outb(0x16, 0x3C4); outb(pVia->swov.Save_3C4_16, 0x3C5);*/
+ VGAOUT8(0x3C4, 0x16); VGAOUT8(0x3C5, pVia->swov.Save_3C4_16);
+ DBG_DD(ErrorF("Restore 3c4.16 : %08x \n",VGAIN8(0x3C5)));
+
+ /*outb(0x17, 0x3C4); outb(pVia->swov.Save_3C4_17, 0x3C5);*/
+ VGAOUT8(0x3C4, 0x17); VGAOUT8(0x3C5, pVia->swov.Save_3C4_17);
+ DBG_DD(ErrorF(" 3c4.17 : %08x \n",VGAIN8(0x3C5)));
+
+ /*outb(0x18, 0x3C4); outb(pVia->swov.Save_3C4_18, 0x3C5);*/
+ VGAOUT8(0x3C4, 0x18); VGAOUT8(0x3C5, pVia->swov.Save_3C4_18);
+ DBG_DD(ErrorF(" 3c4.18 : %08x \n",VGAIN8(0x3C5)));
+ pVia->swov.gdwUseExtendedFIFO = 0;
+ }
+ return PI_OK;
+ }
+
+ /* If the dest rectangle doesn't change, we can return directly */
+ /*
+ if ( (pVia->swov.UpdateOverlayBackup.rDest.left == lpUpdate->rDest.left) &&
+ (pVia->swov.UpdateOverlayBackup.rDest.top == lpUpdate->rDest.top) &&
+ (pVia->swov.UpdateOverlayBackup.rDest.right == lpUpdate->rDest.right) &&
+ (pVia->swov.UpdateOverlayBackup.rDest.bottom == lpUpdate->rDest.bottom) )
+ return PI_OK;
+ */
+ pVia->swov.UpdateOverlayBackup = * (LPDDUPDATEOVERLAY) lpUpdate;
+
+ if ( dwFlags & DDOVER_KEYDEST )
+ {
+ DBG_DD(ErrorF("// :DDOVER_KEYDEST \n"));
+
+ dwColorKey = 1;
+ dwKeyLow = lpUpdate->dwColorSpaceLowValue;
+ }
+
+ if (dwFlags & DDOVER_SHOW)
+ {
+ unsigned long dwStartAddr=0, dwDeinterlaceMode=0;
+ unsigned long dwScnWidth, dwScnHeight;
+
+ DBG_DD(ErrorF("// :DDOVER_SHOW \n"));
+
+ /*for SW decode HW overlay use*/
+ dwStartAddr = VIDInD(HQV_SRC_STARTADDR_Y);
+ DBG_DD(ErrorF("dwStartAddr= 0x%lx\n", dwStartAddr));
+
+ if (dwFlags & DDOVER_INTERLEAVED)
+ {
+ dwDeinterlaceMode |= DDOVER_INTERLEAVED;
+ DBG_DD(ErrorF("DDOVER_INTERLEAVED\n"));
+ }
+ if (dwFlags & DDOVER_BOB)
+ {
+ dwDeinterlaceMode |= DDOVER_BOB;
+ DBG_DD(ErrorF("DDOVER_BOB\n"));
+ }
+
+ if ((pVia->graphicInfo.dwWidth > 1024))
+ {
+ DBG_DD(ErrorF("UseExtendedFIFO\n"));
+ pVia->swov.gdwUseExtendedFIFO = 1;
+ }
+ /*
+ else
+ {
+ //Set Display FIFO
+ outb(0x16, 0x3C4); outb((pVia->swov->Save_3C4_16&0xf0)|0x0c, 0x3C5);
+ DBG_DD(ErrorF("set 3c4.16 : %08x \n",inb(0x3C5)));
+ outb(0x18, 0x3C4); outb(0x4c, 0x3C5);
+ DBG_DD(ErrorF(" 3c4.18 : %08x \n",inb(0x3C5)));
+ }
+ */
+ dwVideoFlag |= VIDEO_SHOW;
+
+ /*
+ * Figure out actual rSrc rectangle
+ * Coz the Src rectangle AP sent is always original, ex:size(720,480) at (0,0)
+ * so the driver need to re-calc
+ *
+ * transfer unsigned long to signed int for calc
+ */
+ nDstLeft = lpUpdate->rDest.left;
+ nDstTop = lpUpdate->rDest.top;
+ nDstRight= lpUpdate->rDest.right;
+ nDstBottom=lpUpdate->rDest.bottom;
+
+ dwScnWidth = pVia->graphicInfo.dwWidth;
+ dwScnHeight = pVia->graphicInfo.dwHeight;
+
+ if (nDstLeft<0)
+ lpUpdate->rSrc.left = (((-nDstLeft) * pVia->swov.overlayRecordV1.dwV1OriWidth) + ((nDstRight-nDstLeft)>>1)) / (nDstRight-nDstLeft);
+ else
+ lpUpdate->rSrc.left = 0;
+
+ if (nDstRight>dwScnWidth)
+ lpUpdate->rSrc.right = (((dwScnWidth-nDstLeft) * pVia->swov.overlayRecordV1.dwV1OriWidth) + ((nDstRight-nDstLeft)>>1)) / (nDstRight-nDstLeft);
+ else
+ lpUpdate->rSrc.right = pVia->swov.overlayRecordV1.dwV1OriWidth;
+
+ if (nDstTop<0)
+ lpUpdate->rSrc.top = (((-nDstTop) * pVia->swov.overlayRecordV1.dwV1OriHeight) + ((nDstBottom-nDstTop)>>1))/ (nDstBottom-nDstTop);
+ else
+ lpUpdate->rSrc.top = 0;
+
+ if (nDstBottom >dwScnHeight)
+ lpUpdate->rSrc.bottom = (((dwScnHeight-nDstTop) * pVia->swov.overlayRecordV1.dwV1OriHeight) + ((nDstBottom-nDstTop)>>1)) / (nDstBottom-nDstTop);
+ else
+ lpUpdate->rSrc.bottom = pVia->swov.overlayRecordV1.dwV1OriHeight;
+
+ /* save modified src & original dest rectangle param.*/
+ if ( (pVia->swov.DPFsrc.dwFourCC == FOURCC_YUY2)||( pVia->swov.DPFsrc.dwFourCC == FOURCC_YV12 ) )
+ {
+ pVia->swov.SWDevice.gdwSWDstLeft = lpUpdate->rDest.left + (pVia->swov.panning_x - pVia->swov.panning_old_x);
+ pVia->swov.SWDevice.gdwSWDstTop = lpUpdate->rDest.top + (pVia->swov.panning_y - pVia->swov.panning_old_y);
+ pVia->swov.SWDevice.gdwSWDstWidth = lpUpdate->rDest.right - lpUpdate->rDest.left;
+ pVia->swov.SWDevice.gdwSWDstHeight = lpUpdate->rDest.bottom - lpUpdate->rDest.top;
+
+ pVia->swov.SWDevice.gdwSWSrcWidth = pVia->swov.overlayRecordV1.dwV1SrcWidth = lpUpdate->rSrc.right - lpUpdate->rSrc.left;
+ pVia->swov.SWDevice.gdwSWSrcHeight = pVia->swov.overlayRecordV1.dwV1SrcHeight = lpUpdate->rSrc.bottom - lpUpdate->rSrc.top;
+ }
+
+ pVia->swov.overlayRecordV1.dwV1SrcLeft = lpUpdate->rSrc.left;
+ pVia->swov.overlayRecordV1.dwV1SrcRight = lpUpdate->rSrc.right;
+ pVia->swov.overlayRecordV1.dwV1SrcTop = lpUpdate->rSrc.top;
+ pVia->swov.overlayRecordV1.dwV1SrcBot = lpUpdate->rSrc.bottom;
+
+ /*
+ // Figure out actual rDest rectangle
+ */
+ lpUpdate->rDest.left= nDstLeft<0 ? 0 : nDstLeft;
+ lpUpdate->rDest.top= nDstTop<0 ? 0 : nDstTop;
+ if ( lpUpdate->rDest.top >= dwScnHeight)
+ lpUpdate->rDest.top = dwScnHeight-1;
+ /*lpUpdate->rDest.top= top>=dwScnHeight ? dwScnHeight-1: top;*/
+ lpUpdate->rDest.right= nDstRight>dwScnWidth ? dwScnWidth: nDstRight;
+ lpUpdate->rDest.bottom= nDstBottom>dwScnHeight ? dwScnHeight: nDstBottom;
+
+ /*
+ * Check which update func. (upd_MPEG, upd_video,
+ * upd_capture) to call
+ */
+ if (Upd_Video(pScrn, dwVideoFlag,dwStartAddr,lpUpdate->rSrc,lpUpdate->rDest,pVia->swov.SWDevice.dwPitch,
+ pVia->swov.overlayRecordV1.dwV1OriWidth,pVia->swov.overlayRecordV1.dwV1OriHeight,&pVia->swov.DPFsrc,
+ dwDeinterlaceMode,dwColorKey,dwChromaKey,
+ dwKeyLow,dwKeyHigh,dwChromaLow,dwChromaHigh, dwFlags)== PI_ERR)
+ {
+ return PI_ERR;
+ }
+ pVia->swov.SWVideo_ON = FALSE;
+
+ return PI_OK;
+
+ } /*end of DDOVER_SHOW*/
+
+ pVia->swov.panning_old_x = pVia->swov.panning_x;
+ pVia->swov.panning_old_y = pVia->swov.panning_y;
+
+ return PI_OK;
+
+} /*VIAVidUpdateOverlay*/
+
+
+
+/*************************************************************************
+ * ADJUST FRAME
+*************************************************************************/
+unsigned long VIAVidAdjustFrame(ScrnInfoPtr pScrn, LPADJUSTFRAME lpAdjustFrame)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ DBG_DD(ErrorF("//VIAVidAdjustFrame\n"));
+
+ pVia->swov.panning_x = lpAdjustFrame->x;
+ pVia->swov.panning_y = lpAdjustFrame->y;
+
+ return PI_OK;
+}
diff --git a/src/via_swov.h b/src/via_swov.h
new file mode 100644
index 0000000..0195fcf
--- /dev/null
+++ b/src/via_swov.h
@@ -0,0 +1,55 @@
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/via/via_swov.h,v 1.4 2003/08/27 15:16:13 tsi Exp $ */
+/*
+ * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
+ * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sub license,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ * VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef _VIA_SWOV_H_
+#define _VIA_SWOV_H_ 1
+
+/*#define XV_DEBUG 1*/ /* write log msg to /var/log/XFree86.0.log */
+
+#ifdef XV_DEBUG
+# define DBG_DD(x) (x)
+#else
+# define DBG_DD(x)
+#endif
+
+#include "ddmpeg.h"
+#include "via_xvpriv.h"
+
+/* Definition for VideoStatus */
+#define VIDEO_NULL 0x00000000
+
+unsigned long VIAVidCreateSurface(ScrnInfoPtr pScrn, LPDDSURFACEDESC lpDDSurfaceDesc);
+unsigned long VIAVidLockSurface(ScrnInfoPtr pScrn, LPDDLOCK lpLock);
+unsigned long VIAVidDestroySurface(ScrnInfoPtr pScrn, LPDDSURFACEDESC lpDDSurfaceDesc);
+
+unsigned long Upd_MPEG(ScrnInfoPtr pScrn, unsigned long dwVideoFlag,unsigned long dwStartAddr,RECTL rSrc,RECTL rDest,unsigned long dwSrcPitch,
+ unsigned long dwOriSrcWidth,unsigned long dwOriSrcHeight,LPDDPIXELFORMAT lpDPFsrc,
+ unsigned long dwDeinterlaceMode,unsigned long dwColorKey,unsigned long dwChromaKey,
+ unsigned long dwKeyLow,unsigned long dwKeyHigh,unsigned long dwChromaLow,unsigned long dwChromaHigh);
+
+unsigned long VIAVidUpdateOverlay(ScrnInfoPtr pScrn, LPDDUPDATEOVERLAY lpUpdate);
+unsigned long VIAVidAdjustFrame(ScrnInfoPtr pScr, LPADJUSTFRAME lpAdjustFrame);
+
+#endif /* _VIA_SWOV_H_ */
diff --git a/src/via_video.c b/src/via_video.c
new file mode 100644
index 0000000..badc20f
--- /dev/null
+++ b/src/via_video.c
@@ -0,0 +1,1325 @@
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/via/via_video.c,v 1.12 2003/11/10 18:22:35 tsi Exp $ */
+/*
+ * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
+ * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sub license,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ * VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * I N C L U D E S
+ */
+#include "xf86.h"
+#include "xf86_OSproc.h"
+#include "xf86Resources.h"
+#include "xf86_ansic.h"
+#include "compiler.h"
+#include "xf86PciInfo.h"
+#include "xf86Pci.h"
+#include "xf86fbman.h"
+#include "regionstr.h"
+#include "via_driver.h"
+#include "via_video.h"
+
+#include "ddmpeg.h"
+#include "via_capture.h"
+#include "via.h"
+
+#include "xf86xv.h"
+#include "Xv.h"
+#include "xaa.h"
+#include "xaalocal.h"
+#include "dixstruct.h"
+#include "via_xvpriv.h"
+#include "via_swov.h"
+
+
+/*
+ * D E F I N E
+ */
+#define OFF_DELAY 200 /* milliseconds */
+#define FREE_DELAY 60000
+#define PARAMSIZE 1024
+#define SLICESIZE 65536
+#define OFF_TIMER 0x01
+#define FREE_TIMER 0x02
+#define TIMER_MASK (OFF_TIMER | FREE_TIMER)
+
+#define LOW_BAND 0x0CB0
+#define MID_BAND 0x1f10
+
+#define XV_IMAGE 0
+#define NTSC_COMPOSITE 1
+#define NTSC_TUNER 2
+#define NTSC_SVIDEO 3
+#define PAL_SVIDEO 4
+#define PAL_60_COMPOSITE 5
+#define PAL_60_TUNER 6
+#define PAL_60_SVIDEO 7
+#define MAKE_ATOM(a) MakeAtom(a, sizeof(a) - 1, TRUE)
+
+#define IN_FLIP ( viaVidEng->ramtab & 0x00000003)
+#define IN_DISPLAY ( viaVidEng->interruptflag & 0x00000200)
+#define IN_VBLANK ( !IN_DISPLAY )
+
+#ifndef XvExtension
+void viaInitVideo(ScreenPtr pScreen) {}
+#else
+
+/*
+ * F U N C T I O N D E C L A R A T I O N
+ */
+XF86VideoAdaptorPtr viaSetupImageVideoG(ScreenPtr);
+static void viaStopVideoG(ScrnInfoPtr, pointer, Bool);
+static int viaSetPortAttributeG(ScrnInfoPtr, Atom, INT32, pointer);
+static int viaGetPortAttributeG(ScrnInfoPtr, Atom ,INT32 *, pointer);
+static void viaQueryBestSizeG(ScrnInfoPtr, Bool,
+ short, short, short, short, unsigned int *, unsigned int *, pointer);
+static int viaPutImageG( ScrnInfoPtr,
+ short, short, short, short, short, short, short, short,
+ int, unsigned char*, short, short, Bool, RegionPtr, pointer);
+static int viaPutVideo(ScrnInfoPtr ,
+ short , short , short , short ,short , short , short , short ,
+ RegionPtr , pointer );
+
+static int viaQueryImageAttributesG(ScrnInfoPtr,
+ int, unsigned short *, unsigned short *, int *, int *);
+
+static Atom xvBrightness, xvContrast, xvColorKey, xvHue, xvSaturation, xvPort,
+ xvCompose, xvEncoding, xvMute, xvVolume, xvFreq, xvAudioCtrl,
+ xvHQV, xvBOB, xvExitTV;
+
+/*
+ * S T R U C T S
+ */
+/* client libraries expect an encoding */
+static XF86VideoEncodingRec DummyEncoding[8] =
+{
+ { XV_IMAGE , "XV_IMAGE",-1, -1,{1, 1}},
+ { NTSC_COMPOSITE , "ntsc-composite",720, 480, { 1001, 60000 }},
+ { NTSC_TUNER , "ntsc-tuner",720, 480, { 1001, 60000 }},
+ { NTSC_SVIDEO , "ntsc-svideo",720, 480, { 1001, 60000 }},
+ { PAL_SVIDEO , "pal-svideo",720, 576, { 1, 50 }},
+ { PAL_60_COMPOSITE, "pal_60-composite", 704, 576, { 1, 50 }},
+ { PAL_60_TUNER , "pal_60-tuner", 720, 576, { 1, 50 }},
+ { PAL_60_SVIDEO , "pal_60-svideo",720, 576, { 1, 50 }}
+};
+
+#define NUM_FORMATS_G 9
+
+static XF86VideoFormatRec FormatsG[NUM_FORMATS_G] =
+{
+ { 8, TrueColor }, /* Dithered */
+ { 8, PseudoColor }, /* Using .. */
+ { 8, StaticColor },
+ { 8, GrayScale },
+ { 8, StaticGray }, /* .. TexelLUT */
+ {16, TrueColor},
+ {24, TrueColor},
+ {16, DirectColor},
+ {24, DirectColor}
+};
+
+#define NUM_ATTRIBUTES_G 17
+
+static XF86AttributeRec AttributesG[NUM_ATTRIBUTES_G] =
+{
+ {XvSettable | XvGettable, 0, (1 << 24) - 1, "XV_COLORKEY"},
+ {XvSettable | XvGettable, -1000, 1000, "XV_BRIGHTNESS"},
+ {XvSettable | XvGettable, -1000, 1000, "XV_CONTRAST"},
+ {XvSettable | XvGettable,-1000,1000,"XV_SATURATION"},
+ {XvSettable | XvGettable,-1000,1000,"XV_HUE"},
+ {XvSettable | XvGettable,0,255,"XV_MUTE"},
+ {XvSettable | XvGettable,0,255,"XV_VOLUME"},
+ {XvSettable,0,2,"XV_PORT"},
+ {XvSettable,0,2,"XV_COMPOSE"},
+ {XvSettable,0,2,"XV_SVIDEO"},
+ {XvSettable | XvGettable,0, 255,"XV_ENCODING"},
+ {XvSettable | XvGettable,0, 255, "XV_CHANNEL"},
+ {XvSettable,0,-1,"XV_FREQ"},
+ {XvSettable,0,2,"XV_AUDIOCTRL"},
+ {XvSettable,0,2,"XV_HIGHQVDO"},
+ {XvSettable,0,2,"XV_BOB"},
+ {XvSettable,0,2,"XV_EXITTV"},
+};
+
+#define NUM_IMAGES_G 2
+
+static XF86ImageRec ImagesG[NUM_IMAGES_G] =
+{
+ {
+ 0x32595559,
+ XvYUV,
+ LSBFirst,
+ {'Y','U','Y','2',
+ 0x00,0x00,0x00,0x10,0x80,0x00,0x00,0xAA,0x00,0x38,0x9B,0x71},
+ 16,
+ XvPacked,
+ 1,
+ 0, 0, 0, 0 ,
+ 8, 8, 8,
+ 1, 2, 2,
+ 1, 2, 2,
+ {'Y','U','Y','V',
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+ XvTopToBottom
+ } ,
+ {
+ 0x32315659,
+ XvYUV,
+ LSBFirst,
+ {'Y','V','1','2',
+ 0x00,0x00,0x00,0x10,0x80,0x00,0x00,0xAA,0x00,0x38,0x9B,0x71},
+ 12,
+ XvPlanar,
+ 3,
+ 0, 0, 0, 0 ,
+ 8, 8, 8,
+ 1, 2, 2,
+ 1, 2, 2,
+ {'Y','V','U',
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+ XvTopToBottom
+ }/*,
+ {
+ 0x59565955,
+ XvYUV,
+ LSBFirst,
+ {'U','Y','V','Y',
+ 0x00,0x00,0x00,0x10,0x80,0x00,0x00,0xAA,0x00,0x38,0x9B,0x71},
+ 16,
+ XvPacked,
+ 1,
+ 0, 0, 0, 0 ,
+ 8, 8, 8,
+ 1, 2, 2,
+ 1, 1, 1,
+ {'U','Y','V','Y',
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
+ XvTopToBottom
+ }
+*/
+};
+
+static char * XVPORTNAME[5] =
+{
+ "XV_SWOV",
+ "XV_TV0" ,
+ "XV_TV1" ,
+ /*"XV_TV2" ,*/
+ "XV_UTCTRL",
+ "XV_DUMMY"
+};
+
+
+#define DDR100SUPPORTMODECOUNT 24
+#define DDR133UNSUPPORTMODECOUNT 19
+static const MODEINFO SupportDDR100[DDR100SUPPORTMODECOUNT]=
+ {{640,480,8,60}, {640,480,8,75}, {640,480,8,85}, {640,480,8,100}, {640,480,8,120},
+ {640,480,16,60}, {640,480,16,75}, {640,480,16,85}, {640,480,16,100}, {640,480,16,120},
+ {640,480,32,60}, {640,480,32,75}, {640,480,32,85}, {640,480,16,100}, {640,480,32,120},
+ {800,600,8,60}, {800,600,8,75}, {800,600,8,85}, {800,600,8,100}, {800,600,16,60},
+ {800,600,16,75}, {800,600,16,85}, {800,600,32,60}, {1024,768,8,60}};
+
+static const MODEINFO UnSupportDDR133[DDR133UNSUPPORTMODECOUNT]=
+ {{1152,864,32,75}, {1280,768,32,75}, {1280,768,32,85}, {1280,960,32,60}, {1280,960,32,75},
+ {1280,960,32,85}, {1280,1024,16,85}, {1280,1024,32,60}, {1280,1024,32,75}, {1280,1024,32,85},
+ {1400,1050,16,85}, {1400,1050,32,60}, {1400,1050,32,75}, {1400,1050,32,85}, {1600,1200,8,75},
+ {1600,1200,8,85}, {1600,1200,16,75}, {1600,1200,16,85}, {1600,1200,32,60}};
+
+
+/*
+ * F U N C T I O N
+ */
+static __inline void waitVBLANK(vmmtr viaVidEng)
+{
+ while (IN_DISPLAY);
+}
+
+static __inline void waitIfFlip(vmmtr viaVidEng)
+{
+ while( IN_FLIP );
+}
+
+
+static __inline void waitDISPLAYBEGIN(vmmtr viaVidEng)
+{
+ while (IN_VBLANK);
+}
+
+/* Decide if the mode support video overlay */
+static Bool DecideOverlaySupport(VIAPtr pVia)
+{
+ unsigned long iCount;
+
+ VGAOUT8(0x3D4, 0x3D);
+ switch ((VGAIN8(0x3D5) & 0x70) >> 4)
+ {
+ case 0:
+ case SDR100:
+ break;
+
+ case SDR133:
+ break;
+
+ case DDR100:
+ for (iCount=0; iCount < DDR100SUPPORTMODECOUNT; iCount++)
+ {
+ if ( (pVia->graphicInfo.dwWidth == SupportDDR100[iCount].dwWidth) &&
+ (pVia->graphicInfo.dwHeight == SupportDDR100[iCount].dwHeight) &&
+ (pVia->graphicInfo.dwBPP == SupportDDR100[iCount].dwBPP) &&
+ (pVia->graphicInfo.dwRefreshRate == SupportDDR100[iCount].dwRefreshRate) )
+ {
+ return TRUE;
+ break;
+ }
+ }
+
+ return FALSE;
+ break;
+
+ case DDR133:
+ for (iCount=0; iCount < DDR133UNSUPPORTMODECOUNT; iCount++)
+ {
+ if ( (pVia->graphicInfo.dwWidth == UnSupportDDR133[iCount].dwWidth) &&
+ (pVia->graphicInfo.dwHeight == UnSupportDDR133[iCount].dwHeight) &&
+ (pVia->graphicInfo.dwBPP == UnSupportDDR133[iCount].dwBPP) &&
+ (pVia->graphicInfo.dwRefreshRate == UnSupportDDR133[iCount].dwRefreshRate) )
+ {
+ return FALSE;
+ break;
+ }
+ }
+
+ return TRUE;
+ break;
+ }
+
+ return FALSE;
+}
+
+
+void viaResetVideo(ScrnInfoPtr pScrn)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ vmmtr viaVidEng = (vmmtr) pVia->VidMapBase;
+
+ DBG_DD(ErrorF(" via_video.c : viaResetVideo: \n"));
+
+ waitVBLANK(viaVidEng);
+
+ viaVidEng->compose = 0;
+ viaVidEng->video1_ctl = 0;
+ viaVidEng->video3_ctl = 0;
+
+}
+
+void viaSaveVideo(ScrnInfoPtr pScrn)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ vmmtr viaVidEng = (vmmtr) pVia->VidMapBase;
+
+ pVia->dwV1 = ((vmmtr)viaVidEng)->video1_ctl;
+ pVia->dwV3 = ((vmmtr)viaVidEng)->video3_ctl;
+ waitVBLANK(viaVidEng);
+ viaVidEng->video1_ctl = 0;
+ viaVidEng->video3_ctl = 0;
+}
+
+void viaRestoreVideo(ScrnInfoPtr pScrn)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ vmmtr viaVidEng = (vmmtr) pVia->VidMapBase;
+
+ waitVBLANK(viaVidEng);
+ viaVidEng->video1_ctl = pVia->dwV1 ;
+ viaVidEng->video3_ctl = pVia->dwV3 ;
+}
+
+void viaExitVideo(ScrnInfoPtr pScrn)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ vmmtr viaVidEng = (vmmtr) pVia->VidMapBase;
+
+ DBG_DD(ErrorF(" via_video.c : viaExitVideo : \n"));
+
+ waitVBLANK(viaVidEng);
+ viaVidEng->video1_ctl = 0;
+ viaVidEng->video3_ctl = 0;
+}
+
+XF86VideoAdaptorPtr adaptPtr[XV_PORT_NUM];
+
+void viaInitVideo(ScreenPtr pScreen)
+{
+ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+ VIAPtr pVia = VIAPTR(pScrn);
+ XF86VideoAdaptorPtr *adaptors, *newAdaptors = NULL;
+ XF86VideoAdaptorPtr newAdaptor = NULL;
+ int num_adaptors;
+
+ DBG_DD(ErrorF(" via_video.c : viaInitVideo : \n"));
+
+ if((pVia->Chipset == VIA_CLE266))
+ {
+ newAdaptor = viaSetupImageVideoG(pScreen);
+ }
+
+ num_adaptors = xf86XVListGenericAdaptors(pScrn, &adaptors);
+
+ DBG_DD(ErrorF(" via_video.c : num_adaptors : %d\n",num_adaptors));
+ if(newAdaptor) {
+ if(!num_adaptors) {
+ num_adaptors = 1;
+ adaptors = &newAdaptor; /* Now ,useless */
+ } else {
+ DBG_DD(ErrorF(" via_video.c : viaInitVideo : Warning !!! MDS not supported yet !\n"));
+ newAdaptors = /* need to free this someplace */
+ xalloc((num_adaptors + 1) * sizeof(XF86VideoAdaptorPtr*));
+ if(newAdaptors) {
+ memcpy(newAdaptors, adaptors, num_adaptors *
+ sizeof(XF86VideoAdaptorPtr));
+ newAdaptors[num_adaptors] = newAdaptor;
+ adaptors = newAdaptors;
+ num_adaptors++;
+ }
+ }
+ }
+
+ if(num_adaptors)
+ xf86XVScreenInit(pScreen, adaptPtr, XV_PORT_NUM);
+
+ if(newAdaptors)
+ xfree(newAdaptors);
+
+
+ /* Driver init */
+ /* DriverProc(CREATEDRIVER,NULL); */
+
+ /* 3rd party Device Init */
+ /*
+ InitializeVDEC();
+ InitializeTUNER();
+ InitializeAudio();
+ */
+}
+
+
+XF86VideoAdaptorPtr
+viaSetupImageVideoG(ScreenPtr pScreen)
+{
+ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+ /* XF86VideoAdaptorPtr adaptPtr[XV_PORT_NUM]; */
+ viaPortPrivRec *gviaPortPriv[XV_PORT_NUM];
+ DevUnion * pdevUnion[XV_PORT_NUM];
+ int i;
+
+ DBG_DD(ErrorF(" via_video.c : viaSetupImageVideoG: \n"));
+
+
+ xvBrightness = MAKE_ATOM("XV_BRIGHTNESS");
+ xvContrast = MAKE_ATOM("XV_CONTRAST");
+ xvColorKey = MAKE_ATOM("XV_COLORKEY");
+ xvHue = MAKE_ATOM("XV_HUE");
+ xvSaturation = MAKE_ATOM("XV_SATURATION");
+ xvMute = MAKE_ATOM("XV_MUTE");
+ xvVolume = MAKE_ATOM("XV_VOLUME");
+ xvPort = MAKE_ATOM("XV_PORT");
+ xvCompose = MAKE_ATOM("XV_COMPOSE");
+ xvEncoding = MAKE_ATOM("XV_ENCODING");
+ xvFreq = MAKE_ATOM("XV_FREQ");
+ xvAudioCtrl = MAKE_ATOM("XV_AUDIOCTRL");
+ xvHQV = MAKE_ATOM("XV_HIGHQVDO");
+ xvBOB = MAKE_ATOM("XV_BOB");
+ xvExitTV = MAKE_ATOM("XV_EXITTV");
+
+ /* AllocatePortPriv();*/
+ for ( i = 0; i< XV_PORT_NUM; i ++ ) {
+ if(!(adaptPtr[i] = xf86XVAllocateVideoAdaptorRec(pScrn)))
+ return NULL;
+
+ gviaPortPriv[i] = (viaPortPrivPtr)xcalloc(1, sizeof(viaPortPrivRec) );
+ if ( ! gviaPortPriv[i] ){
+ DBG_DD(ErrorF(" via_xvpriv.c : Fail to allocate gviaPortPriv: \n"));
+ }
+ else{
+ DBG_DD(ErrorF(" via_xvpriv.c : gviaPortPriv[%d] = 0x%08x \n", i,gviaPortPriv[i]));
+ }
+ /*
+ if(!(pPriv[i] = xcalloc(1, sizeof(viaPortPrivPtr))))
+ {
+ xfree(adaptPtr[i]);
+ return NULL;
+ }
+ */
+
+ pdevUnion[i] = (DevUnion *)xcalloc(1, sizeof(DevUnion) );
+
+ adaptPtr[i]->type = XvInputMask | XvWindowMask | XvImageMask | XvVideoMask | XvStillMask;
+ adaptPtr[i]->flags = VIDEO_OVERLAID_IMAGES | VIDEO_CLIP_TO_VIEWPORT;
+ adaptPtr[i]->name = XVPORTNAME[i];
+ adaptPtr[i]->nEncodings = 8;
+ adaptPtr[i]->pEncodings = DummyEncoding;
+ adaptPtr[i]->nFormats = sizeof(FormatsG) / sizeof(FormatsG[0]);
+ adaptPtr[i]->pFormats = FormatsG;
+
+ /* The adapter can handle 1 port simultaneously */
+ adaptPtr[i]->nPorts = 1;
+ adaptPtr[i]->pPortPrivates = pdevUnion[i];
+ adaptPtr[i]->pPortPrivates->ptr = (pointer) gviaPortPriv[i];
+/*
+ adaptPtr[i]->pPortPrivates = (DevUnion*)(&pPriv[1]);
+ adaptPtr[i]->pPortPrivates[0].ptr = (pointer)pPriv;
+*/
+ if (i == 3) /* Utility port doesn't need attribute */
+ {
+ adaptPtr[i]->nAttributes = 0;
+ adaptPtr[i]->pAttributes = NULL;
+ }
+ else
+ {
+ adaptPtr[i]->nAttributes = NUM_ATTRIBUTES_G;
+ adaptPtr[i]->pAttributes = AttributesG;
+ }
+ adaptPtr[i]->nImages = NUM_IMAGES_G;
+ adaptPtr[i]->pImages = ImagesG;
+ adaptPtr[i]->PutVideo = viaPutVideo;
+ adaptPtr[i]->StopVideo = viaStopVideoG;
+ adaptPtr[i]->SetPortAttribute = viaSetPortAttributeG;
+ adaptPtr[i]->GetPortAttribute = viaGetPortAttributeG;
+ adaptPtr[i]->QueryBestSize = viaQueryBestSizeG;
+ adaptPtr[i]->PutImage = viaPutImageG;
+/* adaptPtr[i]->ReputImage= viaReputImageG; */
+ adaptPtr[i]->QueryImageAttributes = viaQueryImageAttributesG;
+
+#ifdef COLOR_KEY
+ gviaPortPriv[i]->colorKey = 0x0821;
+#endif
+ gviaPortPriv[i]->brightness = 0;
+ gviaPortPriv[i]->saturation = 0;
+ gviaPortPriv[i]->contrast = 0;
+ gviaPortPriv[i]->hue = 0;
+ gviaPortPriv[i]->xv_portnum = i;
+
+ /* gotta uninit this someplace */
+ REGION_NULL(pScreen, &gviaPortPriv[i]->clip);
+ } /* End of for */
+
+
+ viaResetVideo(pScrn);
+
+ return adaptPtr[0];
+
+}
+
+
+static Bool
+RegionsEqual(RegionPtr A, RegionPtr B)
+{
+ int *dataA, *dataB;
+ int num;
+
+ num = REGION_NUM_RECTS(A);
+ if(num != REGION_NUM_RECTS(B))
+ return FALSE;
+
+ if((A->extents.x1 != B->extents.x1) ||
+ (A->extents.x2 != B->extents.x2) ||
+ (A->extents.y1 != B->extents.y1) ||
+ (A->extents.y2 != B->extents.y2))
+ return FALSE;
+
+ dataA = (int*)REGION_RECTS(A);
+ dataB = (int*)REGION_RECTS(B);
+
+ while(num--) {
+ if((dataA[0] != dataB[0]) || (dataA[1] != dataB[1]))
+ return FALSE;
+ dataA += 2;
+ dataB += 2;
+ }
+
+ return TRUE;
+}
+
+
+static unsigned long CreateSWOVSurface(ScrnInfoPtr pScrn, viaPortPrivPtr pPriv, int fourcc, short width, short height)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ LPDDSURFACEDESC lpSurfaceDesc = &pPriv->SurfaceDesc;
+
+ if (pVia->Video.VideoStatus & SWOV_SURFACE_CREATED)
+ return TRUE;
+
+ lpSurfaceDesc->dwWidth = (unsigned long)width;
+ lpSurfaceDesc->dwHeight = (unsigned long)height;
+ lpSurfaceDesc->dwBackBufferCount =1;
+
+ lpSurfaceDesc->dwFourCC = (unsigned long)fourcc;
+
+ VIAVidCreateSurface(pScrn, lpSurfaceDesc);
+
+ pPriv->ddLock.dwFourCC = (unsigned long)fourcc;
+
+ VIAVidLockSurface(pScrn, &pPriv->ddLock);
+
+ pPriv->ddLock.SWDevice.lpSWOverlaySurface[0] = pVia->FBBase + pPriv->ddLock.SWDevice.dwSWPhysicalAddr[0];
+ pPriv->ddLock.SWDevice.lpSWOverlaySurface[1] = pVia->FBBase + pPriv->ddLock.SWDevice.dwSWPhysicalAddr[1];
+
+ DBG_DD(ErrorF(" lpSWOverlaySurface[0]: %p\n", pPriv->ddLock.SWDevice.lpSWOverlaySurface[0]));
+ DBG_DD(ErrorF(" lpSWOverlaySurface[1]: %p\n", pPriv->ddLock.SWDevice.lpSWOverlaySurface[1]));
+
+ pVia->Video.VideoStatus |= SWOV_SURFACE_CREATED|SW_VIDEO_ON;
+ pVia->Video.dwAction = ACTION_SET_VIDEOSTATUS;
+ return TRUE;
+}
+
+
+static void DestroySWOVSurface(ScrnInfoPtr pScrn, viaPortPrivPtr pPriv)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ LPDDSURFACEDESC lpSurfaceDesc = &pPriv->SurfaceDesc;
+ DBG_DD(ErrorF(" via_video.c : Destroy SW Overlay Surface, fourcc =0x%08x : \n",
+ lpSurfaceDesc->dwFourCC));
+
+ if (pVia->Video.VideoStatus & SWOV_SURFACE_CREATED)
+ {
+ DBG_DD(ErrorF(" via_video.c : Destroy SW Overlay Surface, VideoStatus =0x%08x : \n",
+ pVia->Video.VideoStatus));
+ }
+ else
+ {
+ DBG_DD(ErrorF(" via_video.c : No SW Overlay Surface Destroyed, VideoStatus =0x%08x : \n",
+ pVia->Video.VideoStatus));
+ return;
+ }
+
+ VIAVidDestroySurface(pScrn, lpSurfaceDesc);
+
+ pVia->Video.VideoStatus &= ~SWOV_SURFACE_CREATED;
+ pVia->Video.dwAction = ACTION_SET_VIDEOSTATUS;
+}
+
+
+static void StopSWOVerlay(ScrnInfoPtr pScrn)
+{
+ DDUPDATEOVERLAY UpdateOverlay_Video;
+ LPDDUPDATEOVERLAY lpUpdateOverlay = &UpdateOverlay_Video;
+ VIAPtr pVia = VIAPTR(pScrn);
+
+ pVia->Video.VideoStatus &= ~SW_VIDEO_ON;
+ pVia->Video.dwAction = ACTION_SET_VIDEOSTATUS;
+
+ lpUpdateOverlay->dwFlags = DDOVER_HIDE;
+ VIAVidUpdateOverlay(pScrn, lpUpdateOverlay);
+}
+
+
+static void
+viaStopVideoG(ScrnInfoPtr pScrn, pointer data, Bool exit)
+{
+ VIAPtr pVia = VIAPTR(pScrn);
+ viaPortPrivPtr pPriv = (viaPortPrivPtr)data;
+
+ DBG_DD(ErrorF(" via_video.c : viaStopVideoG: exit=%d\n", exit));
+
+ REGION_EMPTY(pScrn->pScreen, &pPriv->clip);
+ if(exit) {
+ StopSWOVerlay(pScrn);
+ DestroySWOVSurface(pScrn, pPriv);
+ pVia->dwFrameNum = 0;
+ pPriv->old_drw_x= 0;
+ pPriv->old_drw_y= 0;
+ pPriv->old_drw_w= 0;
+ pPriv->old_drw_h= 0;
+ } else {
+ StopSWOVerlay(pScrn);
+ }
+}
+
+/* App "xawtv" attribute from -1000 to 1000 */
+/* But SAA7113H needs 0 to 255 */
+#define Attr_Mapping(x) x = ( (x + 1000) >> 3 )
+
+
+/****************************************************************************
+ * SetTunerChannel *
+ * Function: Sets the tuner to a requested channel *
+ * Inputs: CARD16 channel - the tuner channel to be set. *
+ * Outputs: NONE *
+ ****************************************************************************/
+static void SetTunerChannel (viaPortPrivPtr pChanPriv, INT32 frequency)
+{
+ int control;
+ short divider = 0;
+
+ switch(pChanPriv->dwEncoding)
+ {
+ case PAL_60_COMPOSITE :
+ case PAL_60_TUNER :
+ case PAL_60_SVIDEO :
+ divider=633+(short)frequency;
+ break;
+ case NTSC_COMPOSITE :
+ case NTSC_TUNER :
+ case NTSC_SVIDEO :
+ divider=733+(short)frequency;
+ break;
+ default:
+ divider=frequency;
+ }
+
+ control = 0x8E00;
+
+ if ( divider <= LOW_BAND )
+ {
+ control |= 0xA0;
+ }
+ else{
+ if ( divider <= MID_BAND )
+ control |= 0x90;
+ else
+ control |= 0x30;
+ }
+
+
+
+ DBG_DD(ErrorF(" via_video.c : SetTunerChannel : Divider = 0x%08x, Control= 0x%08x, \n",
+ divider,control));
+
+ /* Tuner chip interfacing goes here */
+
+} /* SetTunerChannel ()... */
+
+/* v4l uses range 0 - 65535; Xv uses -1000 - 1000 */
+static int
+v4l_to_xv(int val) {
+ val = val * 2000 / 65536 - 1000;
+ if (val < -1000) val = -1000;
+ if (val > 1000) val = 1000;
+ return val;
+}
+static int
+xv_to_v4l(int val) {
+ val = val * 65536 / 2000 + 32768;
+ if (val < -0) val = 0;
+ if (val > 65535) val = 65535;
+ return val;
+}
+
+
+static int
+viaSetPortAttributeG(
+ ScrnInfoPtr pScrn,
+ Atom attribute,
+ INT32 value,
+ pointer data
+){
+ VIAPtr pVia = VIAPTR(pScrn);
+ vmmtr viaVidEng = (vmmtr) pVia->VidMapBase;
+ viaPortPrivPtr pPriv = (viaPortPrivPtr)data;
+ int attr, avalue;
+
+ DBG_DD(ErrorF(" via_video.c : viaSetPortAttributeG : \n"));
+
+ pVia->OverlaySupported = DecideOverlaySupport(pVia);
+
+
+ /* Color Key */
+ if(attribute == xvColorKey) {
+ DBG_DD(ErrorF(" V4L Disable xvColorKey = %08x\n",value));
+
+ pPriv->colorKey = value;
+ /* All assume color depth is 16 */
+ value &= 0x00FFFFFF;
+ viaVidEng->color_key = value;
+ viaVidEng->snd_color_key = value;
+ REGION_EMPTY(pScrn->pScreen, &pPriv->clip);
+ DBG_DD(ErrorF(" V4L Disable done xvColorKey = %08x\n",value));
+
+ /* Color Control */
+ } else if (attribute == xvBrightness ||
+ attribute == xvContrast ||
+ attribute == xvSaturation ||
+ attribute == xvHue) {
+ if (attribute == xvBrightness)
+ {
+ DBG_DD(ErrorF(" xvBrightness = %08d\n",value));
+ pPriv->pict.brightness = xv_to_v4l(value);
+ }
+ if (attribute == xvContrast)
+ {
+ DBG_DD(ErrorF(" xvContrast = %08d\n",value));
+ pPriv->pict.contrast = xv_to_v4l(value);
+ }
+ if (attribute == xvSaturation)
+ {
+ DBG_DD(ErrorF(" xvSaturation = %08d\n",value));
+ pPriv->pict.colour = xv_to_v4l(value);
+ }
+ if (attribute == xvHue)
+ {
+ DBG_DD(ErrorF(" xvHue = %08d\n",value));
+ pPriv->pict.hue = xv_to_v4l(value);
+ }
+
+ /* Audio control */
+ } else if (attribute == xvMute){
+ DBG_DD(ErrorF(" via_video.c : viaSetPortAttributeG : xvMute = %08d\n",value));
+ if ( value )
+ {
+ pPriv->AudioMode = ATTR_MUTE_ON;
+ attr = ATTR_MUTE_ON;
+ }
+ else{
+ pPriv->AudioMode = ATTR_MUTE_OFF;
+ attr = ATTR_STEREO;
+ }
+
+ } else if (attribute == xvVolume){
+ DBG_DD(ErrorF(" via_video.c : viaSetPortAttributeG : xvVolume = %08d\n",value));
+ pPriv->Volume = value;
+ attr = ATTR_VOLUME;
+ avalue = value;
+
+ /* Tuner control. Channel switch */
+ } else if (attribute == xvFreq){
+ DBG_DD(ErrorF(" via_video.c : viaSetPortAttributeG : xvFreq = %08x\n",value));
+ SetTunerChannel(pPriv, value );
+
+ /* Video decoder control. NTSC/PAL, SVIDEO/COMPOSITIVE/TV */
+ } else if (attribute == xvEncoding){
+ DBG_DD(ErrorF(" xvEncoding = %d. \n",value));
+
+ pPriv->dwEncoding = value;
+
+ /* VIA Proprietary Attribute for Video control */
+ } else if (attribute == xvPort ){
+ DBG_DD(ErrorF(" via_video.c : viaSetPortAttributeG : xvPort=%d\n", value));
+
+ } else if (attribute == xvCompose){
+ DBG_DD(ErrorF(" via_video.c : viaSetPortAttributeG : xvCompose=%08x\n",value));
+
+ } else if (attribute == xvHQV){
+ DBG_DD(ErrorF(" via_video.c : viaSetPortAttributeG : xvHQV=%08x\n",value));
+
+ } else if (attribute == xvBOB){
+ DBG_DD(ErrorF(" via_video.c : viaSetPortAttributeG : xvBOB=%08x\n",value));
+
+ } else if (attribute == xvExitTV){
+ DBG_DD(ErrorF(" via_video.c : viaSetPortAttributeG : xvExitTV=%08x\n",value));
+
+ /* VIA Proprietary Attribute for AUDIO control */
+ } else if (attribute == xvAudioCtrl ){
+ DBG_DD(ErrorF(" via_video.c : viaSetPortAttributeG : xvAudioSwitch=%d\n", value));
+
+ attr = ATTR_AUDIO_CONTROLByAP;
+ avalue = value;
+ }else{
+ DBG_DD(ErrorF(" via_video.c : viaSetPortAttributeG : is not supported the attribute"));
+ return BadMatch;
+ }
+
+ /* attr,avalue hardware processing goes here */
+ (void)attr;
+ (void)avalue;
+
+ return Success;
+}
+
+static int
+viaGetPortAttributeG(
+ ScrnInfoPtr pScrn,
+ Atom attribute,
+ INT32 *value,
+ pointer data
+){
+ viaPortPrivPtr pPriv = (viaPortPrivPtr)data;
+
+ DBG_DD(ErrorF(" via_video.c : viaGetPortAttributeG : port %d\n",pPriv->xv_portnum));
+
+ *value = 0;
+
+
+ if (attribute == xvColorKey ) {
+ *value =(INT32) pPriv->colorKey;
+ DBG_DD(ErrorF(" via_video.c : ColorKey 0x%x\n",pPriv->colorKey));
+
+ /* Color Control */
+ } else if (attribute == xvBrightness ||
+ attribute == xvContrast ||
+ attribute == xvSaturation ||
+ attribute == xvHue) {
+ if (attribute == xvBrightness)
+ {
+ *value = v4l_to_xv(pPriv->pict.brightness);
+ DBG_DD(ErrorF(" xvBrightness = %08d\n", *value));
+ }
+ if (attribute == xvContrast)
+ {
+ *value = v4l_to_xv(pPriv->pict.contrast);
+ DBG_DD(ErrorF(" xvContrast = %08d\n", *value));
+ }
+ if (attribute == xvSaturation)
+ {
+ *value = v4l_to_xv(pPriv->pict.colour);
+ DBG_DD(ErrorF(" xvSaturation = %08d\n", *value));
+ }
+ if (attribute == xvHue)
+ {
+ *value = v4l_to_xv(pPriv->pict.hue);
+ DBG_DD(ErrorF(" xvHue = %08d\n", *value));
+ }
+
+ }else {
+ /*return BadMatch*/ ;
+ }
+ return Success;
+}
+
+static void
+viaQueryBestSizeG(
+ ScrnInfoPtr pScrn,
+ Bool motion,
+ short vid_w, short vid_h,
+ short drw_w, short drw_h,
+ unsigned int *p_w, unsigned int *p_h,
+ pointer data
+){
+ DBG_DD(ErrorF(" via_video.c : viaQueryBestSizeG :\n"));
+ *p_w = drw_w;
+ *p_h = drw_h;
+
+ if(*p_w > 2048 )
+ *p_w = 2048;
+}
+
+/*
+ * To do SW Flip
+ */
+static void Flip(VIAPtr pVia, viaPortPrivPtr pPriv, int fourcc, unsigned long DisplayBufferIndex)
+{
+ switch(fourcc)
+ {
+ case FOURCC_UYVY:
+ case FOURCC_YUY2:
+ while ((VIDInD(HQV_CONTROL) & HQV_SW_FLIP) );
+ VIDOutD(HQV_SRC_STARTADDR_Y, pPriv->ddLock.SWDevice.dwSWPhysicalAddr[DisplayBufferIndex]);
+ VIDOutD(HQV_CONTROL,( VIDInD(HQV_CONTROL)&~HQV_FLIP_ODD) |HQV_SW_FLIP|HQV_FLIP_STATUS);
+ break;
+
+ case FOURCC_YV12:
+ default:
+ while ((VIDInD(HQV_CONTROL) & HQV_SW_FLIP) );
+ VIDOutD(HQV_SRC_STARTADDR_Y, pPriv->ddLock.SWDevice.dwSWPhysicalAddr[DisplayBufferIndex]);
+ VIDOutD(HQV_SRC_STARTADDR_U, pPriv->ddLock.SWDevice.dwSWCbPhysicalAddr[DisplayBufferIndex]);
+ VIDOutD(HQV_SRC_STARTADDR_V, pPriv->ddLock.SWDevice.dwSWCrPhysicalAddr[DisplayBufferIndex]);
+ VIDOutD(HQV_CONTROL,( VIDInD(HQV_CONTROL)&~HQV_FLIP_ODD) |HQV_SW_FLIP|HQV_FLIP_STATUS);
+ break;
+ }
+}
+
+static void CopyDataYUV422(
+ ScrnInfoPtr pScrn,
+ VIAPtr pVia,
+ unsigned char * src,
+ unsigned char * dst,
+ int srcPitch,
+ int dstPitch,
+ int h,
+ int w )
+{
+ int count;
+
+ /* copy YUY2 data to video memory,
+ * do 32 bits alignment.
+ */
+ count = h;
+ while(count--) {
+ memcpy(dst, src, w);
+ src += srcPitch;
+ dst += dstPitch;
+ }
+}
+
+
+static void
+CopyDataYUV420(
+ ScrnInfoPtr pScrn,
+ VIAPtr pVia,
+ unsigned char *src1,
+ unsigned char *src2,
+ unsigned char *src3,
+ unsigned char *dst1,
+ unsigned char *dst2,
+ unsigned char *dst3,
+ int srcPitch,
+ int dstPitch,
+ int h,
+ int w
+){
+ int count;
+
+ /* copy Y component to video memory */
+ count = h;
+ while(count--) {
+ memcpy(dst1, src1, w);
+ src1 += srcPitch;
+ dst1 += dstPitch;
+ }
+
+ /* UV component is 1/4 of Y */
+ w >>= 1;
+ h >>= 1;
+ srcPitch >>= 1;
+ dstPitch >>= 1;
+
+ /* copy V(Cr) component to video memory */
+ count = h;
+ while(count--) {
+ memcpy(dst2, src2, w);
+ src2 += srcPitch;
+ dst2 += dstPitch;
+ }
+
+ /* copy U(Cb) component to video memory */
+ count = h;
+ while(count--) {
+ memcpy(dst3, src3, w);
+ src3 += srcPitch;
+ dst3 += dstPitch;
+ }
+
+}
+
+
+static int
+viaPutImageG(
+ ScrnInfoPtr pScrn,
+ short src_x, short src_y,
+ short drw_x, short drw_y,
+ short src_w, short src_h,
+ short drw_w, short drw_h,
+ int id, unsigned char* buf,
+ short width, short height,
+ Bool sync,
+ RegionPtr clipBoxes, pointer data
+){
+ VIAPtr pVia = VIAPTR(pScrn);
+ viaPortPrivPtr pPriv = (viaPortPrivPtr)data;
+ vmmtr viaVidEng = (vmmtr) pVia->VidMapBase;
+/* int i;
+ BoxPtr pbox; */
+
+# ifdef XV_DEBUG
+ ErrorF(" via_video.c : viaPutImageG : called\n");
+ ErrorF(" via_video.c : FourCC=0x%x width=%d height=%d sync=%d\n",id,width,height,sync);
+ ErrorF(" via_video.c : src_x=%d src_y=%d src_w=%d src_h=%d colorkey=0x%x\n",src_x, src_y, src_w, src_h, pPriv->colorKey);
+ ErrorF(" via_video.c : drw_x=%d drw_y=%d drw_w=%d drw_h=%d\n",drw_x,drw_y,drw_w,drw_h);
+# endif
+
+ switch ( pPriv->xv_portnum )
+ {
+ case COMMAND_FOR_TV0 :
+ case COMMAND_FOR_TV1 :
+ DBG_DD(ErrorF(" via_video.c : : Shall not happen! \n"));
+ break;
+
+ case COMMAND_FOR_SWOV :
+ case COMMAND_FOR_DUMMY :
+ {
+ DDUPDATEOVERLAY UpdateOverlay_Video;
+ LPDDUPDATEOVERLAY lpUpdateOverlay = &UpdateOverlay_Video;
+
+ int srcPitch, dstPitch;
+ int srcYSize, srcUVSize;
+ int dstYSize, dstUVSize;
+ unsigned long dwUseExtendedFIFO=0;
+
+ DBG_DD(ErrorF(" via_video.c : : S/W Overlay! \n"));
+
+ /* Allocate video memory(CreateSurface),
+ * add codes to judge if need to re-create surface
+ */
+ if ( (pPriv->old_src_w != src_w) || (pPriv->old_src_h != src_h) )
+ DestroySWOVSurface(pScrn, pPriv);
+
+ if ( !CreateSWOVSurface(pScrn, pPriv, id, width, height) )
+ {
+ DBG_DD(ErrorF(" : Fail to Create SW Video Surface\n"));
+ }
+
+
+ /* Copy image data from system memory to video memory
+ * TODO: use DRM's DMA feature to accelerate data copy
+ */
+ srcPitch = width;
+ srcYSize = width * height;
+ srcUVSize = srcYSize >>2;
+ dstPitch = pPriv->ddLock.SWDevice.dwPitch;
+ dstYSize = dstPitch * height;
+ dstUVSize = dstYSize >>2;
+
+ switch(id)
+ {
+ case FOURCC_YV12:
+ CopyDataYUV420(pScrn, pVia, buf , buf + srcYSize, buf + srcYSize + srcUVSize,
+ pPriv->ddLock.SWDevice.lpSWOverlaySurface[pVia->dwFrameNum&1],
+ pPriv->ddLock.SWDevice.lpSWOverlaySurface[pVia->dwFrameNum&1] + dstYSize,
+ pPriv->ddLock.SWDevice.lpSWOverlaySurface[pVia->dwFrameNum&1] + dstYSize + dstUVSize,
+ srcPitch, dstPitch, height, width);
+ break;
+
+ case FOURCC_UYVY:
+ case FOURCC_YUY2:
+ default:
+ CopyDataYUV422(pScrn, pVia, buf,
+ pPriv->ddLock.SWDevice.lpSWOverlaySurface[pVia->dwFrameNum&1],
+ srcPitch, dstPitch, height, width);
+ break;
+ }
+
+ /* If there is bandwidth issue, block the H/W overlay */
+ if ((viaVidEng->video3_ctl & 0x00000001) && !pVia->OverlaySupported)
+ return BadAlloc;
+
+ /*
+ * fill video overlay parameter
+ */
+ lpUpdateOverlay->rSrc.left = src_x;
+ lpUpdateOverlay->rSrc.top = src_y;
+ lpUpdateOverlay->rSrc.right = src_x + width;
+ lpUpdateOverlay->rSrc.bottom = src_y + height;
+
+ /* temp solve LinDVD AP bug */
+ /* When y<0, lindvd will send wrong x */
+ if (drw_y<0)
+ lpUpdateOverlay->rDest.left = drw_x/2;
+ else
+ lpUpdateOverlay->rDest.left = drw_x;
+ lpUpdateOverlay->rDest.top = drw_y;
+ lpUpdateOverlay->rDest.right = lpUpdateOverlay->rDest.left + drw_w;
+ lpUpdateOverlay->rDest.bottom = drw_y + drw_h;
+
+ lpUpdateOverlay->dwFlags = DDOVER_SHOW | DDOVER_KEYDEST;
+ if (pScrn->bitsPerPixel == 8)
+ {
+ lpUpdateOverlay->dwColorSpaceLowValue = pPriv->colorKey & 0xff;
+ }
+ else
+ {
+ lpUpdateOverlay->dwColorSpaceLowValue = pPriv->colorKey;
+ }
+ lpUpdateOverlay->dwFourcc = id;
+
+ /* If use extend FIFO mode */
+ if ((pVia->graphicInfo.dwWidth > 1024))
+ {
+ dwUseExtendedFIFO = 1;
+ }
+
+
+ DBG_DD(ErrorF(" : Flip\n"));
+ Flip(pVia, pPriv, id, pVia->dwFrameNum&1);
+
+ pVia->dwFrameNum ++;
+
+ /* If the dest rec. & extendFIFO doesn't change, don't do UpdateOverlay
+ unless the surface clipping has changed */
+ if ( (pPriv->old_drw_x == drw_x) && (pPriv->old_drw_y == drw_y)
+ && (pPriv->old_drw_w == drw_w) && (pPriv->old_drw_h == drw_h)
+ && (pPriv->old_src_w == src_w) && (pPriv->old_src_h == src_h)
+ && (pVia->old_dwUseExtendedFIFO == dwUseExtendedFIFO)
+ && (pVia->Video.VideoStatus & SW_VIDEO_ON) &&
+ RegionsEqual(&pPriv->clip, clipBoxes))
+ {
+ return Success;
+ }
+
+ pPriv->old_drw_x = drw_x;
+ pPriv->old_drw_y = drw_y;
+ pPriv->old_drw_w = drw_w;
+ pPriv->old_drw_h = drw_h;
+ pVia->old_dwUseExtendedFIFO = dwUseExtendedFIFO;
+ pVia->Video.VideoStatus |= SW_VIDEO_ON;
+
+ /* add to judge if need to re-create surface */
+ pPriv->old_src_w = src_w;
+ pPriv->old_src_h = src_h;
+
+ /* BitBlt: Draw the colorkey rectangle */
+ if(!RegionsEqual(&pPriv->clip, clipBoxes)) {
+ REGION_COPY(pScrn->pScreen, &pPriv->clip, clipBoxes);
+
+ xf86XVFillKeyHelper(pScrn->pScreen, pPriv->colorKey, clipBoxes);
+#if 0
+ /* draw these */
+ /* FillSolidRects function cause segment fail in SAMM mode
+ * So I change to use SetupForSolidFill
+ * Changed to XAAFillSolidRects by Alan
+ */
+
+ XAAFillSolidRects(pScrn, pPriv->colorKey, GXcopy,
+ (CARD32)~0,
+ REGION_NUM_RECTS(clipBoxes),
+ REGION_RECTS(clipBoxes));
+#endif
+ }
+
+ /*
+ * Call v4l to do update video overlay
+ */
+ if ( -1 == VIAVidUpdateOverlay(pScrn, lpUpdateOverlay))
+ {
+ DBG_DD(ErrorF(" via_video.c : : call v4l updateoverlay fail. \n"));
+ }
+ else
+ {
+ DBG_DD(ErrorF(" via_video.c : PutImageG done OK\n"));
+ return Success;
+ }
+ }
+ break;
+
+ case COMMAND_FOR_UTCTRL :{
+ VIAXVUtilityProc(pScrn, buf);
+ break;
+ }
+ default:
+ DBG_DD(ErrorF(" via_video.c : XVPort not supported\n"));
+ break;
+ }
+ DBG_DD(ErrorF(" via_video.c : PutImageG done OK\n"));
+ return Success;
+}
+
+
+static int
+viaQueryImageAttributesG(
+ ScrnInfoPtr pScrn,
+ int id,
+ unsigned short *w, unsigned short *h,
+ int *pitches, int *offsets
+){
+ int size, tmp;
+
+ DBG_DD(ErrorF(" via_video.c : viaQueryImageAttributesG : FourCC=0x%x, ", id));
+
+ if ( (!w) || (!h) )
+ return 0;
+
+ if(*w > 1024) *w = 1024;
+ if(*h > 1024) *h = 1024;
+
+ *w = (*w + 1) & ~1;
+ if(offsets)
+ offsets[0] = 0;
+
+ switch(id) {
+ case 0x32315659: /*Planar format : YV12 -4:2:0*/
+ *h = (*h + 1) & ~1;
+ size = (*w + 3) & ~3;
+ if(pitches) pitches[0] = size;
+ size *= *h;
+ if(offsets) offsets[1] = size;
+ tmp = ((*w >> 1) + 3) & ~3;
+ if(pitches) pitches[1] = pitches[2] = tmp;
+ tmp *= (*h >> 1);
+ size += tmp;
+ if(offsets) offsets[2] = size;
+ size += tmp;
+ break;
+
+ case 0x59565955: /*Packed format : UYVY -4:2:2*/
+ case 0x32595559: /*Packed format : YUY2 -4:2:2*/
+ default:
+ size = *w << 1;
+ if(pitches)
+ pitches[0] = size;
+ size *= *h;
+ break;
+ }
+
+ if ( pitches )
+ DBG_DD(ErrorF(" pitches[0]=%d, pitches[1]=%d, pitches[2]=%d, ", pitches[0], pitches[1], pitches[2]));
+ if ( offsets )
+ DBG_DD(ErrorF(" offsets[0]=%d, offsets[1]=%d, offsets[2]=%d, ", offsets[0], offsets[1], offsets[2]));
+ DBG_DD(ErrorF(" width=%d, height=%d \n", *w, *h));
+
+ return size;
+}
+
+
+static int
+viaPutVideo(ScrnInfoPtr pScrn,
+ short src_x, short src_y, short drw_x, short drw_y,
+ short src_w, short src_h, short drw_w, short drw_h,
+ RegionPtr clipBoxes, pointer data)
+{
+
+ viaPortPrivPtr pPriv=(viaPortPrivPtr)data;
+
+#ifdef XV_DEBUG
+ ErrorF(" via_video.c : viaPutVideo : Src %dx%d, %d, %d, %p\n",src_w,src_h,src_x,src_y,clipBoxes);
+ ErrorF(" via_video.c : Dst %dx%d, %d, %d \n",drw_w,drw_h,drw_x,drw_y);
+ ErrorF(" via_video.c : colorkey : 0x%x \n",pPriv->colorKey);
+#endif
+
+
+ /* BitBlt: Color fill */
+ if(!RegionsEqual(&pPriv->clip, clipBoxes)) {
+ REGION_COPY(pScrn->pScreen, &pPriv->clip, clipBoxes);
+ XAAFillSolidRects(pScrn,pPriv->colorKey,GXcopy, ~0,
+ REGION_NUM_RECTS(clipBoxes),
+ REGION_RECTS(clipBoxes));
+ }
+
+ switch ( pPriv->xv_portnum )
+ {
+ case COMMAND_FOR_TV0 :
+ pPriv->yuv_win.x = drw_x;
+ pPriv->yuv_win.y = drw_y;
+ pPriv->yuv_win.width = drw_w;
+ pPriv->yuv_win.height = drw_h;
+ pPriv->yuv_win.chromakey = pPriv->colorKey;
+ break;
+
+ case COMMAND_FOR_TV1 :
+ pPriv->yuv_win.x = drw_x;
+ pPriv->yuv_win.y = drw_y;
+ pPriv->yuv_win.width = drw_w;
+ pPriv->yuv_win.height = drw_h;
+ pPriv->yuv_win.chromakey = pPriv->colorKey;
+ break;
+
+ case COMMAND_FOR_SWOV :
+ case COMMAND_FOR_DUMMY :
+ case COMMAND_FOR_UTCTRL :
+ DBG_DD(ErrorF(" via_video.c : This port doesn't support PutVideo.\n"));
+ return XvBadAlloc;
+ default:
+ DBG_DD(ErrorF(" via_video.c : Error port access.\n"));
+ return XvBadAlloc;
+ }
+
+ return Success;
+}
+
+#endif /* !XvExtension */
diff --git a/src/via_video.h b/src/via_video.h
new file mode 100644
index 0000000..b08524a
--- /dev/null
+++ b/src/via_video.h
@@ -0,0 +1,135 @@
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/via/via_video.h,v 1.3 2003/08/27 15:16:14 tsi Exp $ */
+/*
+ * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
+ * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sub license,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ * VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef _VIA_VIDEO_H_
+#define _VIA_VIDEO_H_ 1
+
+/*
+ * I N C L U D E S
+ */
+
+/* #define XV_DEBUG 1 */ /* write log msg to /var/log/XFree86.0.log */
+#define COLOR_KEY 1 /* set color key value from driver layer*/
+
+#ifdef XV_DEBUG
+# define DBG_DD(x) (x)
+#else
+# define DBG_DD(x)
+#endif
+
+#define HW_3123
+
+#define TRUE 1
+#define FALSE 0
+
+/* Definition for VideoStatus */
+#define VIDEO_NULL 0x00000000
+#define TV0SURFACE_CREATED 0x00000001
+#define TV1SURFACE_CREATED 0x00000002
+#define SWOV_SURFACE_CREATED 0x00000004
+#define HW_MPEG_ON 0x00000010
+#define TV0_VIDEO_ON 0x00000020
+#define TV1_VIDEO_ON 0x00000040
+#define SW_VIDEO_ON 0x00000080
+
+typedef struct {
+ unsigned long dwWidth; /* On screen Width */
+ unsigned long dwHeight; /* On screen Height */
+ unsigned long dwBPP; /* Bits Per Pixel */
+ unsigned long dwRefreshRate; /* Refresh rate of the mode */
+}MODEINFO, * LPMODEINFO;
+
+#define SDR100 1
+#define SDR133 2
+#define DDR100 3
+#define DDR133 4
+
+
+typedef struct{
+ unsigned long interruptflag; /* 200 */
+ unsigned long ramtab; /* 204 */
+ unsigned long alphawin_hvstart; /* 208 */
+ unsigned long alphawin_size; /* 20c */
+ unsigned long alphawin_ctl; /* 210 */
+ unsigned long crt_startaddr; /* 214 */
+ unsigned long crt_startaddr_2; /* 218 */
+ unsigned long alphafb_stride ; /* 21c */
+ unsigned long color_key; /* 220 */
+ unsigned long alphafb_addr; /* 224 */
+ unsigned long chroma_low; /* 228 */
+ unsigned long chroma_up; /* 22c */
+ unsigned long video1_ctl; /* 230 */
+ unsigned long video1_fetch; /* 234 */
+ unsigned long video1y_addr1; /* 238 */
+ unsigned long video1_stride; /* 23c */
+ unsigned long video1_hvstart; /* 240 */
+ unsigned long video1_size; /* 244 */
+ unsigned long video1y_addr2; /* 248 */
+ unsigned long video1_zoom; /* 24c */
+ unsigned long video1_mictl; /* 250 */
+ unsigned long video1y_addr0; /* 254 */
+ unsigned long video1_fifo; /* 258 */
+ unsigned long video1y_addr3; /* 25c */
+ unsigned long hi_control; /* 260 */
+ unsigned long snd_color_key; /* 264 */
+ unsigned long v3alpha_prefifo; /* 268 */
+ unsigned long v1_source_w_h; /* 26c */
+ unsigned long hi_transparent_color; /* 270 */
+ unsigned long v_display_temp; /* 274 :No use */
+ unsigned long v3alpha_fifo; /* 278 */
+ unsigned long v3_source_width; /* 27c */
+ unsigned long dummy1; /* 280 */
+ unsigned long video1_CSC1; /* 284 */
+ unsigned long video1_CSC2; /* 288 */
+ unsigned long video1u_addr0; /* 28c */
+ unsigned long video1_opqctl; /* 290 */
+ unsigned long video3_opqctl; /* 294 */
+ unsigned long compose; /* 298 */
+ unsigned long dummy2; /* 29c */
+ unsigned long video3_ctl; /* 2a0 */
+ unsigned long video3_addr0; /* 2a4 */
+ unsigned long video3_addr1; /* 2a8 */
+ unsigned long video3_stribe; /* 2ac */
+ unsigned long video3_hvstart; /* 2b0 */
+ unsigned long video3_size; /* 2b4 */
+ unsigned long v3alpha_fetch; /* 2b8 */
+ unsigned long video3_zoom; /* 2bc */
+ unsigned long video3_mictl; /* 2c0 */
+ unsigned long video3_CSC1; /* 2c4 */
+ unsigned long video3_CSC2; /* 2c8 */
+ unsigned long v3_display_temp; /* 2cc */
+ unsigned long reserved[5]; /* 2d0 */
+ unsigned long video1u_addr1; /* 2e4 */
+ unsigned long video1u_addr2; /* 2e8 */
+ unsigned long video1u_addr3; /* 2ec */
+ unsigned long video1v_addr0; /* 2f0 */
+ unsigned long video1v_addr1; /* 2f4 */
+ unsigned long video1v_addr2; /* 2f8 */
+ unsigned long video1v_addr3; /* 2fc */
+} video_via_regs;
+
+#define vmmtr volatile video_via_regs *
+
+#endif /* _VIA_VIDEO_H_ */
diff --git a/src/via_xvpriv.h b/src/via_xvpriv.h
new file mode 100644
index 0000000..bf302e3
--- /dev/null
+++ b/src/via_xvpriv.h
@@ -0,0 +1,98 @@
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/via/via_xvpriv.h,v 1.5 2003/08/27 15:16:14 tsi Exp $ */
+/*
+ * Copyright 1998-2003 VIA Technologies, Inc. All Rights Reserved.
+ * Copyright 2001-2003 S3 Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sub license,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ * VIA, S3 GRAPHICS, AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef _VIA_XVPRIV_H_
+#define _VIA_XVPRIV_H_ 1
+
+#include "videodev.h"
+
+#define XV_PORT_NUM 5
+#define XV_SWOV_PORTID 0
+#define XV_TV0_PORTID 1
+#define XV_TV1_PORTID 2
+#define XV_UTCTRL_PORTID 3
+#define XV_DUMMY_PORTID 4
+
+#define COMMAND_FOR_SWOV XV_SWOV_PORTID
+#define COMMAND_FOR_TV0 XV_TV0_PORTID
+#define COMMAND_FOR_TV1 XV_TV1_PORTID
+#define COMMAND_FOR_UTCTRL XV_UTCTRL_PORTID
+#define COMMAND_FOR_DUMMY XV_DUMMY_PORTID
+
+typedef struct {
+ unsigned char xv_portnum;
+ unsigned char brightness;
+ unsigned char saturation;
+ unsigned char contrast;
+ unsigned char hue;
+ unsigned long dwEncoding;
+ RegionRec clip;
+ CARD32 colorKey;
+ Time offTime;
+ Time freeTime;
+ VIACapRec CapInfo;
+ CARD32 AudioMode;
+ int Volume;
+
+ /* Surface structure */
+ DDSURFACEDESC SurfaceDesc;
+ DDLOCK ddLock;
+
+ /* file handle */
+ int nr;
+ struct video_capability cap;
+
+ /* attributes */
+ struct video_picture pict;
+ struct video_audio audio;
+
+ int *input;
+ int *norm;
+ int nenc,cenc;
+
+ /* yuv to offscreen */
+ struct video_window yuv_win;
+
+ /* store old video source & dst data */
+ short old_src_w;
+ short old_src_h;
+
+ short old_drw_x;
+ short old_drw_y;
+ short old_drw_w;
+ short old_drw_h;
+
+} viaPortPrivRec, *viaPortPrivPtr;
+
+#if 0
+__inline void AllocatePortPriv();
+__inline void FreePortPriv();
+__inline void ClearPortPriv(int);
+viaPortPrivPtr GetPortPriv(int);
+void SetPortPriv(int nIndex, unsigned long dwAction, unsigned long dwValue);
+unsigned long IdentifyPort(viaPortPrivPtr);
+#endif
+
+#endif /* _VIA_XVPRIV_H_ */