1 //<MStar Software>
2 //******************************************************************************
3 // MStar Software
4 // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5 // All software, firmware and related documentation herein ("MStar Software") are
6 // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7 // law, including, but not limited to, copyright law and international treaties.
8 // Any use, modification, reproduction, retransmission, or republication of all
9 // or part of MStar Software is expressly prohibited, unless prior written
10 // permission has been granted by MStar.
11 //
12 // By accessing, browsing and/or using MStar Software, you acknowledge that you
13 // have read, understood, and agree, to be bound by below terms ("Terms") and to
14 // comply with all applicable laws and regulations:
15 //
16 // 1. MStar shall retain any and all right, ownership and interest to MStar
17 // Software and any modification/derivatives thereof.
18 // No right, ownership, or interest to MStar Software and any
19 // modification/derivatives thereof is transferred to you under Terms.
20 //
21 // 2. You understand that MStar Software might include, incorporate or be
22 // supplied together with third party`s software and the use of MStar
23 // Software may require additional licenses from third parties.
24 // Therefore, you hereby agree it is your sole responsibility to separately
25 // obtain any and all third party right and license necessary for your use of
26 // such third party`s software.
27 //
28 // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29 // MStar`s confidential information and you agree to keep MStar`s
30 // confidential information in strictest confidence and not disclose to any
31 // third party.
32 //
33 // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34 // kind. Any warranties are hereby expressly disclaimed by MStar, including
35 // without limitation, any warranties of merchantability, non-infringement of
36 // intellectual property rights, fitness for a particular purpose, error free
37 // and in conformity with any international standard. You agree to waive any
38 // claim against MStar for any loss, damage, cost or expense that you may
39 // incur related to your use of MStar Software.
40 // In no event shall MStar be liable for any direct, indirect, incidental or
41 // consequential damages, including without limitation, lost of profit or
42 // revenues, lost or damage of data, and unauthorized system use.
43 // You agree that this Section 4 shall still apply without being affected
44 // even if MStar Software has been modified by MStar in accordance with your
45 // request or instruction for your use, except otherwise agreed by both
46 // parties in writing.
47 //
48 // 5. If requested, MStar may from time to time provide technical supports or
49 // services in relation with MStar Software to you for your use of
50 // MStar Software in conjunction with your or your customer`s product
51 // ("Services").
52 // You understand and agree that, except otherwise agreed by both parties in
53 // writing, Services are provided on an "AS IS" basis and the warranty
54 // disclaimer set forth in Section 4 above shall apply.
55 //
56 // 6. Nothing contained herein shall be construed as by implication, estoppels
57 // or otherwise:
58 // (a) conferring any license or right to use MStar name, trademark, service
59 // mark, symbol or any other identification;
60 // (b) obligating MStar or any of its affiliates to furnish any person,
61 // including without limitation, you and your customers, any assistance
62 // of any kind whatsoever, or any information; or
63 // (c) conferring any license or right under any intellectual property right.
64 //
65 // 7. These terms shall be governed by and construed in accordance with the laws
66 // of Taiwan, R.O.C., excluding its conflict of law rules.
67 // Any and all dispute arising out hereof or related hereto shall be finally
68 // settled by arbitration referred to the Chinese Arbitration Association,
69 // Taipei in accordance with the ROC Arbitration Law and the Arbitration
70 // Rules of the Association by three (3) arbitrators appointed in accordance
71 // with the said Rules.
72 // The place of arbitration shall be in Taipei, Taiwan and the language shall
73 // be English.
74 // The arbitration award shall be final and binding to both parties.
75 //
76 //******************************************************************************
77 //<MStar Software>
78 ////////////////////////////////////////////////////////////////////////////////
79 //
80 // Copyright (c) 2006-2010 MStar Semiconductor, Inc.
81 // All rights reserved.
82 //
83 // Unless otherwise stipulated in writing, any and all information contained
84 // herein regardless in any format shall remain the sole proprietary of
85 // MStar Semiconductor Inc. and be kept in strict confidence
86 // (��MStar Confidential Information��) by the recipient.
87 // Any unauthorized act including without limitation unauthorized disclosure,
88 // copying, use, reproduction, sale, distribution, modification, disassembling,
89 // reverse engineering and compiling of the contents of MStar Confidential
90 // Information is unlawful and strictly prohibited. MStar hereby reserves the
91 // rights to any and all damages, losses, costs and expenses resulting therefrom.
92 //
93 ////////////////////////////////////////////////////////////////////////////////
94
95 ///////////////////////////////////////////////////////////////////////////////////////////////////
96 ///
97 /// file drvMfc.c
98 /// @brief Mfc Driver Interface
99 /// @author MStar Semiconductor Inc.
100 ///////////////////////////////////////////////////////////////////////////////////////////////////
101
102 //-------------------------------------------------------------------------------------------------
103 // Include files
104 //-------------------------------------------------------------------------------------------------
105 #include <unistd.h>
106 #include <sys/time.h>
107 #include "mdrv_mfc.h"
108 #if(CODEBASE_SEL != CODEBASE_UTOPIA)
109 #include "madp.h"
110 #endif
111 #include "mdrv_mfc_fb.h"
112 #include "mdrv_mfc_init.h"
113 #include "mdrv_mfc_scalerop.h"
114 #include "mdrv_mfc_scalerip.h"
115 #include "mdrv_mfc_film.h"
116 #include "mdrv_mfc_panel.h"
117 #include "mdrv_mfc_mcu.h"
118 #include "pnl_lceall.h"
119
120 #define MFC_SPIF_SLAVE_ID 0x3
121 #define MFC_REG_DEBUG(x) //x
122 //-------------------------------------------------------------------------------------------------
123 // Global Variables
124 //-------------------------------------------------------------------------------------------------
125 MST_MFC_SYS_INFO_t gmfcSysInfo;
126 static U8 u8MFCInitStatus=0;
127 static U16 gPreInputVFreq=6000;
128 /*
129 DECLARE_MUTEX(MFC_MUTEX);
130 #define MUTEX_LOCK() down(&MFC_MUTEX)
131 #define MUTEX_UNLOCK() up(&MFC_MUTEX)
132 */
133 //------------------------------------------------------------------------------
134 // Local Variables
135 //------------------------------------------------------------------------------
136 static U8 MFC_BIN[] =
137 {
138 0x02,0x2d,0xd9,0x02,0x33,0x99,0xe4,0xff,0x02,0x3a,0xd3,0x02,0x34,0x41,0x12,0x37,0xcf,0x22,0x32,0x02,0x35,0x80,0x12,0x36,0xa1,0x90,0x40,0xf2,0xef,0xf0,0x60,0x02,0x7f,0x01,0x22,0x02,0x2c,0x7b,0x02,0x2d,0x32,0x22,0x22,0x02,0x00,0x12,0x12,0x0d,0xbf,0xc3,0x94,0x04,0x40,0x06,0xef,0xd3,0x94,0x7c,0x40,0x19,0xef,0xc3,0x94,0x04,0x50,0x04,0x7d,0x04,0x80,0x02,0x7d,0x7c,0x12,0x05,0x34,0x90,0x40,0x07,0xe0,0xfd,0x7f,0x3c,0x02,0x01,0x3e,0xc3,0x90,0x40,0x15,0xe0,0x94,0x32,0x12,0x0e,0x67,0x50,0x41,0x12,0x0d,0xbf,0x94,0x40,0x40,0x06,0xef,0x24,0xc0,0xff,0x80,0x08,0x12,0x0d,0xbf,0xc3,0x74,0x40,0x9f,0xff,0x12,0x0e,0x83,0x40,0x06,0xed,0x24,0x80,0xfd,0x80,0x03,0x12,0x0e,0x8e,0x12,0x0f,0xa3,0x12,0x10,0xf0,0x50,0x16,0x12,0x0e,0xfd,0x50,0x11,0x7d,0x80,0x12,0x05,0x24,0x7d,0xbe,0x12,0x05,0x34,0x7d,0x01,0x7f,0x4d,0x02,0x01,0x3e,0x12,0x0d,0xbf,0xd3,0x94,0x40,0x40,0x06,0xef,0x24,0xc0,0xff,0x80,0x08,0x12,0x0d,0xbf,0xc3,0x74,0x40,0x9f,0xff,0x12,0x0e,0x83,0x40,0x06,0xed,0x24,0x80,0xfd,0x80,0x03,0x12,0x0e,0x8e,0x12,0x0f,0xa3,0xc3,0xef,0x94,0x10,0xee,0x64,0x80,0x94,0x80,0x50,0x58,0x90,0x40,0x3c,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x40,0x2e,0xe0,0xfc,0xa3,0xe0,0xfd,0x9f,0xec,0x9e,0x40,0x08,0xed,0x9f,0xff,0xec,0x9e,0xfe,0x80,0x15,0x90,0x40,0x2e,0xe0,0xfe,0xa3,0xe0,0xff,0xc3,0x90,0x40,0x3d,0xe0,0x9f,0xff,0x90,0x40,0x3c,0xe0,0x9e,0xfe,0xc3,0xef,0x94,0x2c,0xee,0x94,0x01,0x50,0x1d,0x90,0x40,0x3d,0xe0,0x94,0xd0,0x90,0x40,0x3c,0xe0,0x94,0x07,0x40,0x0f,0x7d,0x80,0x7f,0x3c,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0x40,0x7f,0x3d,0x80,0x12,0xe4,0xfd,0x12,0x05,0x24,0xe4,0xfd,0x7f,0x3d,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0x51,0x7f,0x4d,0x7e,0x26,0x12,0x3b,0xaa,0x12,0x0e,0xc4,0x60,0x1e,0x12,0x0e,0xcb,0x40,0x06,0xef,0x24,0x80,0xff,0x80,0x03,0x12,0x0e,0x00,0xef,0xd3,0x94,0x6c,0x40,0x04,0x7d,0x7c,0x80,0x08,0xef,0x24,0x10,0xfd,0x80,0x02,0x7d,0x10,0x7f,0x54,0x7e,0x29,0x12,0x3b,0xaa,0xc3,0x90,0x40,0x34,0xe0,0x94,0x01,0x50,0x04,0xe4,0xfd,0x80,0x02,0x7d,0x80,0x7f,0x53,0x7e,0x29,0x12,0x3b,0xaa,0x12,0x0d,0xe1,0xd3,0x9e,0x40,0x02,0x80,0x02,0xaf,0x06,0xef,0xc3,0x94,0x06,0x50,0x03,0x02,0x02,0x76,0x90,0x40,0x07,0xe0,0xff,0x12,0x0d,0xec,0xc3,0x9e,0x50,0x02,0x80,0x02,0xaf,0x06,0xef,0xd3,0x94,0x02,0x40,0x03,0x02,0x02,0x76,0x12,0x0d,0xe1,0xc3,0x9e,0x50,0x02,0x80,0x02,0xaf,0x06,0x90,0x40,0x07,0xe0,0xfe,0xc3,0x99,0xf9,0x12,0x10,0x6c,0x90,0x40,0x11,0xe0,0xc3,0x9e,0x13,0x13,0x13,0x54,0x1f,0xfe,0xd3,0x9d,0x40,0x02,0x80,0x02,0xae,0x05,0xc3,0xee,0x9f,0xc3,0x94,0x04,0x50,0x03,0x02,0x02,0x76,0x12,0x0e,0xcb,0x40,0x06,0xef,0x24,0x80,0xff,0x80,0x03,0x12,0x0e,0x00,0xef,0xd3,0x94,0x10,0x40,0x7b,0xd3,0x90,0x40,0x15,0xe0,0x94,0x1e,0x12,0x0e,0x67,0x40,0x6f,0xd3,0x90,0x40,0x31,0xe0,0x94,0x0a,0x12,0x0f,0x03,0x40,0x63,0x90,0x40,0x34,0xe0,0xfe,0xa3,0xe0,0xff,0xd3,0x94,0xf4,0xee,0x94,0x01,0x40,0x53,0xef,0x94,0x10,0xee,0x94,0x27,0x50,0x4b,0x12,0x0f,0x87,0x40,0x06,0xef,0x24,0x80,0xff,0x80,0x03,0x12,0x0e,0x00,0xef,0x75,0xf0,0x04,0xa4,0xff,0xd3,0x74,0xff,0x9f,0xe5,0xf0,0x12,0x0d,0xda,0x40,0x19,0x12,0x0e,0xcb,0x40,0x06,0xef,0x24,0x80,0xff,0x80,0x03,0x12,0x0e,0x00,0xc3,0x74,0xff,0x9f,0x25,0xe0,0x25,0xe0,0xff,0x80,0x02,0x7f,0x00,0xef,0x44,0x02,0xfd,0x7f,0x35,0x7e,0x29,0x12,0x3b,0xaa,0x7d,0xf0,0x7f,0x3f,0x80,0x04,0x7d,0xf0,0x7f,0x35,0x7e,0x29,0x12,0x3b,0xaa,0x90,0x41,0x9b,0xe0,0x70,0x77,0x12,0x0d,0xbf,0xd3,0x94,0x40,0x40,0x06,0xef,0x24,0xc0,0xff,0x80,0x08,0x12,0x0d,0xbf,0xc3,0x74,0x40,0x9f,0xff,0xef,0xd3,0x94,0x18,0x40,0x1d,0x12,0x0e,0xc4,0x60,0x18,0x12,0x0d,0xbf,0xd3,0x94,0x40,0x40,0x06,0xef,0x24,0xc0,0xfd,0x80,0x43,0x12,0x0d,0xbf,0xc3,0x74,0x40,0x9f,0xfd,0x80,0x39,0x12,0x0d,0xbf,0xd3,0x94,0x40,0x40,0x06,0xef,0x24,0xc0,0xff,0x80,0x08,0x12,0x0d,0xbf,0xc3,0x74,0x40,0x9f,0xff,0xef,0xc3,0x94,0x14,0x50,0x1b,0x12,0x0d,0xbf,0x94,0x40,0x40,0x06,0xef,0x24,0xc0,0xff,0x80,0x08,0x12,0x0d,0xbf,0xc3,0x74,0x40,0x9f,0xff,0xef,0x24,0x28,0xfd,0x80,0x02,0x7d,0x3c,0x7f,0x57,0x02,0x03,0x86,0x12,0x0d,0xbf,0xd3,0x94,0x40,0x40,0x06,0xef,0x24,0xc0,0xff,0x80,0x08,0x12,0x0d,0xbf,0xc3,0x74,0x40,0x9f,0xff,0xef,0xd3,0x94,0x18,0x40,0x1f,0x12,0x0e,0xc4,0x60,0x1a,0x12,0x0d,0xbf,0xd3,0x94,0x40,0x40,0x06,0xef,0x24,0xc0,0xff,0x80,0x08,0x12,0x0d,0xbf,0xc3,0x74,0x40,0x9f,
139 0xff,0x8f,0x11,0x80,0x3b,0x12,0x0d,0xbf,0xd3,0x94,0x40,0x40,0x06,0xef,0x24,0xc0,0xff,0x80,0x08,0x12,0x0d,0xbf,0xc3,0x74,0x40,0x9f,0xff,0xef,0xc3,0x94,0x14,0x50,0x1c,0x12,0x0d,0xbf,0x94,0x40,0x40,0x06,0xef,0x24,0xc0,0xff,0x80,0x08,0x12,0x0d,0xbf,0xc3,0x74,0x40,0x9f,0xff,0xef,0x24,0x28,0xf5,0x11,0x80,0x03,0x75,0x11,0x3c,0xc3,0x74,0x40,0x95,0x11,0xfd,0x7f,0x39,0x7e,0x29,0x12,0x3b,0xaa,0xe5,0x11,0x24,0x40,0xfd,0x7f,0x3b,0x7e,0x29,0x12,0x3b,0xaa,0x90,0x40,0x4e,0xe0,0x70,0x43,0x90,0x40,0x92,0xe0,0x60,0x2b,0x90,0x40,0x91,0xe0,0x60,0x25,0x12,0x10,0x35,0x70,0x17,0xa3,0xe0,0x54,0x7f,0xff,0xbf,0x40,0x0f,0xc3,0x12,0x0e,0x61,0x50,0x09,0x7d,0x60,0x12,0x05,0x2c,0x7d,0xc3,0x80,0x14,0xe4,0xfd,0x12,0x05,0x2c,0xe4,0xfd,0x80,0x0b,0x7d,0x04,0x7f,0x9a,0x7e,0x29,0x12,0x3b,0xaa,0xe4,0xfd,0x7f,0x9b,0x7e,0x29,0x12,0x3b,0xaa,0x12,0x0e,0x0c,0x30,0xe0,0x64,0xc3,0x90,0x40,0x15,0xe0,0x94,0x28,0x12,0x0e,0x67,0x50,0x58,0xc3,0x90,0x40,0x40,0xe0,0x94,0x01,0x50,0x4f,0x90,0x40,0x46,0xe0,0x70,0x02,0xa3,0xe0,0x70,0x45,0x90,0x41,0x08,0xe0,0x70,0x3f,0x90,0x40,0x2e,0xe0,0x70,0x02,0xa3,0xe0,0x70,0x35,0x12,0x10,0x35,0x70,0x30,0x12,0x10,0x63,0x70,0x2b,0x7f,0xfd,0x12,0x05,0x48,0x50,0x07,0x7f,0xfc,0x12,0x05,0x48,0x40,0x1d,0xc3,0x90,0x40,0x3d,0xe0,0x94,0x40,0x90,0x40,0x3c,0xe0,0x94,0x00,0x50,0x0e,0x90,0x41,0x0b,0xe0,0xc3,0x94,0x05,0x50,0x0a,0xe0,0x04,0xf0,0x80,0x05,0xe4,0x90,0x41,0x0b,0xf0,0x90,0x41,0x0b,0xe0,0xd3,0x94,0x04,0x40,0x3f,0x7b,0x01,0xe4,0xfd,0x7f,0x80,0x7e,0x20,0x12,0x39,0xe5,0x7d,0x10,0x12,0x05,0x3c,0x7d,0x08,0x7f,0xa2,0x7e,0x20,0x12,0x3b,0x0b,0x7d,0x08,0x7f,0x84,0x7e,0x20,0x12,0x3b,0xaa,0x7b,0x01,0x7d,0x01,0x7f,0x80,0x7e,0x20,0x12,0x39,0xe5,0x90,0x41,0x08,0x74,0x01,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0x90,0x40,0x48,0xe0,0x44,0x40,0xf0,0x90,0x41,0x09,0xe0,0xc3,0x94,0x80,0x50,0x07,0xa3,0xe0,0xc3,0x94,0xfa,0x40,0x27,0x7d,0x20,0x12,0x05,0x3c,0x7d,0x0c,0x7f,0xa2,0x7e,0x20,0x12,0x3b,0x0b,0x7d,0x10,0x7f,0x84,0x7e,0x20,0x12,0x3b,0xaa,0xe4,0x90,0x41,0x08,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x40,0x48,0xe0,0x44,0x80,0xf0,0x90,0x41,0x08,0xe0,0xb4,0x01,0x11,0x7f,0x96,0x7e,0x20,0x12,0x00,0x0e,0xef,0x30,0xe0,0x06,0x90,0x41,0x09,0xe0,0x04,0xf0,0x90,0x41,0x08,0xe0,0xb4,0x01,0x06,0x90,0x41,0x0a,0xe0,0x04,0xf0,0x12,0x0e,0xcb,0x40,0x06,0xef,0x24,0x80,0xff,0x80,0x03,0x12,0x0e,0x00,0xef,0xc3,0x94,0x04,0x50,0x1f,0x12,0x0d,0xbf,0x94,0x40,0x40,0x06,0xef,0x24,0xc0,0xff,0x80,0x08,0x12,0x0d,0xbf,0xc3,0x74,0x40,0x9f,0xff,0xef,0xd3,0x94,0x08,0x40,0x04,0x7d,0x02,0x80,0x02,0x7d,0x12,0x7f,0x16,0x7e,0x26,0x12,0x3b,0xaa,0x22,0x7f,0x3c,0x7e,0x26,0x12,0x3b,0xaa,0x22,0x7f,0x9a,0x7e,0x29,0x12,0x3b,0xaa,0x22,0x7f,0x3d,0x7e,0x26,0x12,0x3b,0xaa,0x22,0x7b,0x7f,0x7f,0x82,0x7e,0x20,0x12,0x3b,0x0b,0x7b,0x0f,0x22,0x7e,0x29,0x12,0x00,0x0e,0xef,0xd3,0x94,0x40,0x22,0x90,0x40,0x9b,0xe0,0x60,0x6e,0x12,0x0e,0x0c,0xff,0x30,0xe0,0x07,0x90,0x40,0x55,0xe0,0xfe,0x80,0x05,0x90,0x40,0x56,0xe0,0xfe,0x90,0x40,0xa2,0xe0,0xd3,0x9e,0x40,0x17,0xe0,0xfe,0xef,0x30,0xe0,0x07,0x90,0x40,0x55,0xe0,0xff,0x80,0x05,0x90,0x40,0x56,0xe0,0xff,0xc3,0xee,0x9f,0x80,0x01,0xe4,0x90,0x40,0xa2,0xf0,0x12,0x0e,0x0c,0xff,0x30,0xe0,0x07,0x90,0x40,0x53,0xe0,0xfe,0x80,0x05,0x90,0x40,0x54,0xe0,0xfe,0x90,0x40,0xa3,0xe0,0xd3,0x9e,0x40,0x17,0xe0,0xfe,0xef,0x30,0xe0,0x07,0x90,0x40,0x53,0xe0,0xff,0x80,0x05,0x90,0x40,0x54,0xe0,0xff,0xc3,0xee,0x9f,0x80,0x01,0xe4,0x90,0x40,0xa3,0xf0,0x90,0x40,0x07,0xe0,0xff,0xd3,0x94,0x04,0x40,0x13,0xef,0x94,0xfa,0x50,0x0e,0xa3,0xe0,0x54,0x7f,0xff,0x94,0x04,0x40,0x05,0xef,0x94,0x7a,0x40,0x08,0x90,0x40,0xa4,0x74,0x01,0xf0,0x80,0x05,0xe4,0x90,0x40,0xa4,0xf0,0x12,0x0f,0x6d,0x9f,0x40,0x05,0xee,0x9f,0xff,0x80,0x03,0x12,0x10,0x3c,0x8f,0x12,0x90,0x40,0xa6,0x12,0x0f,0x4e,0xfe,0xd3,0x9f,0x40,0x05,0xee,0x9f,0xff,0x80,0x0a,0x12,0x0d,0xbf,0x90,0x40,0xa6,0xe0,0xc3,0x9f,0xff,0x8f,0x13,0x90,0x40,0x9b,0xe0,0x60,0x50,0x90,0x40,0xa3,0xe0,0xc3,0x94,0xe6,0x50,0x47,0x90,0x40,0x30,0xe0,0xfe,0xa3,0xe0,0x78,0x05,0xce,0xc3,0x13,0xce,0x13,0xd8,0xf9,0xff,0xc3,0x94,0x05,0xee,0x94,0x00,0x50,0x02,0x80,0x02,0x7f,0x05,0xc3,0x74,0x05,0x9f,0xfd,0x12,0x11,0x01,0xce,0xc3,0x13,0xce,0x13,0xd8,0xf9,0xff,0xc3,0x94,0x05,0xee,0x94,0x00,0x50,0x02,0x80,0x04,0x7e,0x00,
140 0x7f,0x05,0xc3,0x74,0x05,0x9f,0x2d,0xff,0x90,0x40,0xa3,0xe0,0x2f,0xf0,0x90,0x40,0xa2,0xe0,0xc3,0x94,0xdc,0x40,0x03,0x02,0x07,0xec,0x90,0x40,0xa4,0xe0,0x60,0x1c,0x12,0x11,0x01,0xce,0xc3,0x13,0xce,0x13,0xd8,0xf9,0x12,0x10,0x26,0x94,0x0a,0x40,0x03,0x75,0x11,0x0a,0x90,0x40,0xfa,0x74,0x01,0x02,0x07,0xd1,0x12,0x0d,0xe1,0xd3,0x9e,0x40,0x02,0x80,0x02,0xaf,0x06,0xef,0xc3,0x94,0x06,0x50,0x03,0x02,0x07,0x50,0x90,0x40,0x07,0xe0,0xff,0x12,0x0d,0xec,0xc3,0x9e,0x50,0x02,0x80,0x02,0xaf,0x06,0xef,0xd3,0x94,0x03,0x40,0x03,0x02,0x07,0x50,0x12,0x0d,0xbf,0x94,0x40,0x40,0x06,0xef,0x24,0xc0,0xff,0x80,0x08,0x12,0x0d,0xbf,0xc3,0x74,0x40,0x9f,0xff,0x12,0x0e,0x83,0x40,0x06,0xed,0x24,0x80,0xfd,0x80,0x03,0x12,0x0e,0x8e,0x12,0x0f,0xa3,0xef,0x78,0x06,0xce,0xa2,0xe7,0x13,0xce,0x13,0xd8,0xf8,0xfd,0x12,0x0e,0x0c,0xfc,0x30,0xe0,0x04,0x7f,0x05,0x80,0x02,0x7f,0x04,0x12,0x0f,0xb3,0x80,0x05,0xce,0xc3,0x13,0xce,0x13,0xd8,0xf9,0x2d,0xfd,0xec,0x30,0xe0,0x04,0x7f,0x05,0x80,0x02,0x7f,0x04,0x90,0x40,0x30,0x12,0x0f,0xb6,0x80,0x05,0xce,0xc3,0x13,0xce,0x13,0xd8,0xf9,0x12,0x0e,0xc2,0x60,0x04,0x7e,0x00,0x80,0x02,0x7e,0x01,0x12,0x10,0x24,0x94,0x08,0x40,0x03,0x75,0x11,0x08,0x90,0x40,0xfa,0x74,0x04,0x02,0x07,0xd1,0x12,0x0d,0xbf,0xd3,0x94,0x40,0x40,0x06,0xef,0x24,0xc0,0xff,0x80,0x08,0x12,0x0d,0xbf,0xc3,0x74,0x40,0x9f,0xff,0x12,0x0e,0x83,0x40,0x06,0xed,0x24,0x80,0xfd,0x80,0x03,0x12,0x0e,0x8e,0x12,0x0f,0xa3,0xef,0x78,0x06,0xce,0xa2,0xe7,0x13,0xce,0x13,0xd8,0xf8,0xfd,0x12,0x0e,0x0c,0xfc,0x30,0xe0,0x04,0x7f,0x05,0x80,0x02,0x7f,0x06,0x12,0x0f,0xb3,0x80,0x05,0xce,0xc3,0x13,0xce,0x13,0xd8,0xf9,0x2d,0xfd,0xec,0x30,0xe0,0x04,0x7f,0x05,0x80,0x02,0x7f,0x03,0x90,0x40,0x30,0x12,0x0f,0xb6,0x80,0x05,0xce,0xc3,0x13,0xce,0x13,0xd8,0xf9,0x12,0x0e,0xc2,0x60,0x04,0x7e,0x00,0x80,0x02,0x7e,0x01,0x12,0x10,0x24,0x94,0x0a,0x40,0x03,0x75,0x11,0x0a,0x90,0x40,0xfa,0x74,0x05,0xf0,0x90,0x40,0x49,0xe0,0x54,0xef,0xf0,0x90,0x40,0x9b,0xe0,0x60,0x0d,0x90,0x40,0xa2,0xe0,0x25,0x11,0xf0,0x90,0x40,0xf9,0xe5,0x11,0xf0,0x12,0x19,0x13,0x90,0x40,0xb7,0xef,0xf0,0x12,0x16,0xf6,0x90,0x40,0xee,0xef,0xf0,0x12,0x00,0x16,0x90,0x40,0xb6,0xef,0xf0,0xa3,0xe0,0x60,0x0a,0x12,0x10,0xfa,0x7f,0xfe,0x12,0x38,0xd0,0x80,0x22,0x12,0x2f,0x09,0x8f,0x11,0xe5,0x11,0x60,0x10,0x12,0x38,0xd0,0x90,0x40,0xb7,0x74,0xfe,0xf0,0x12,0x10,0xfa,0x7d,0x08,0x80,0x02,0xe4,0xfd,0x7f,0x22,0x7e,0x26,0x12,0x3b,0xaa,0x12,0x14,0x39,0xac,0x07,0x90,0x40,0x07,0xe0,0xfe,0xb4,0x80,0x16,0xa3,0xe0,0x54,0x7f,0xfd,0xbd,0x40,0x0e,0x90,0x40,0xce,0xe0,0xc3,0x94,0xff,0x50,0x0a,0xe0,0x04,0xf0,0x80,0x05,0xe4,0x90,0x40,0xce,0xf0,0x90,0x40,0xa5,0xe0,0xb5,0x06,0x17,0xa3,0xe0,0xfe,0x12,0x0f,0x50,0xb5,0x06,0x0e,0x90,0x40,0xcf,0xe0,0xc3,0x94,0xff,0x50,0x0a,0xe0,0x04,0xf0,0x80,0x05,0xe4,0x90,0x40,0xcf,0xf0,0x90,0x40,0x9b,0xe0,0x60,0x0f,0x90,0x40,0x07,0xe0,0x90,0x40,0xa5,0xf0,0x12,0x0f,0x50,0x90,0x40,0xa6,0xf0,0x12,0x0e,0xc4,0x60,0x0e,0x90,0x40,0xed,0xe0,0xc3,0x94,0xff,0x50,0x20,0xe0,0x04,0xf0,0x80,0x1b,0x90,0x40,0xed,0xe0,0xff,0xd3,0x94,0x0a,0x40,0x05,0x74,0x09,0xf0,0x80,0x0c,0xef,0xd3,0x94,0x00,0x40,0x06,0x90,0x40,0xed,0xe0,0x14,0xf0,0x90,0x40,0x11,0xe0,0xff,0x90,0x40,0xbd,0xe0,0xfe,0xd3,0x9f,0x40,0x05,0xee,0x9f,0xff,0x80,0x0c,0x90,0x40,0xbd,0xe0,0xff,0x90,0x40,0x11,0xe0,0xc3,0x9f,0xff,0x90,0x40,0xc4,0xef,0xf0,0x90,0x40,0x10,0xe0,0xff,0x90,0x40,0xbf,0xe0,0xfe,0xd3,0x9f,0x40,0x05,0xee,0x9f,0xff,0x80,0x0c,0x90,0x40,0xbf,0xe0,0xff,0x90,0x40,0x10,0xe0,0xc3,0x9f,0xff,0x90,0x40,0xc5,0xef,0xf0,0x90,0x40,0x13,0xe0,0xff,0x90,0x40,0xc1,0xe0,0xfe,0xd3,0x9f,0x40,0x05,0xee,0x9f,0xff,0x80,0x0c,0x90,0x40,0xc1,0xe0,0xff,0x90,0x40,0x13,0xe0,0xc3,0x9f,0xff,0x90,0x40,0xc6,0xef,0xf0,0x90,0x40,0x12,0xe0,0xff,0x90,0x40,0xc2,0xe0,0xfe,0xd3,0x9f,0x40,0x05,0xee,0x9f,0xff,0x80,0x0c,0x90,0x40,0xc2,0xe0,0xff,0x90,0x40,0x12,0xe0,0xc3,0x9f,0xff,0x90,0x40,0xc7,0xef,0xf0,0x90,0x40,0xbf,0xe0,0xa3,0xf0,0x90,0x40,0xbd,0xe0,0xa3,0xf0,0x90,0x40,0x10,0xe0,0x90,0x40,0xbf,0xf0,0x90,0x40,0x11,0xe0,0x90,0x40,0xbd,0xf0,0x90,0x40,0x12,0xe0,0x90,0x40,0xc2,0xf0,0x90,0x40,0x13,0xe0,0x90,0x40,0xc1,0xf0,0x90,0x40,0xae,0xe0,0xff,0xa3,0xe0,0xa3,0xcf,0xf0,0xa3,0xef,0xf0,0x90,0x40,0x14,0xe0,0xff,0xa3,0xe0,0x90,0x40,0xae,0xcf,
141 0xf0,0xa3,0xef,0xf0,0x90,0x40,0x40,0xe0,0xff,0xa3,0xe0,0x90,0x40,0xb2,0xcf,0xf0,0xa3,0xef,0xf0,0x90,0x40,0x46,0xe0,0xff,0xa3,0xe0,0x90,0x40,0xb4,0xcf,0xf0,0xa3,0xef,0xf0,0x90,0x40,0x30,0xa3,0xe0,0x90,0x40,0xb9,0xf0,0x90,0x40,0x3a,0xe0,0xff,0xa3,0xe0,0x90,0x40,0xbb,0xcf,0xf0,0xa3,0xef,0xf0,0x12,0x0e,0xc4,0x90,0x40,0xc3,0xf0,0xaf,0x04,0x22,0x75,0x15,0x01,0x75,0x16,0x01,0xe4,0xf5,0x17,0x90,0x40,0x7c,0xe0,0x04,0xff,0x90,0x40,0x93,0xe0,0xfe,0xef,0x8e,0xf0,0x84,0x90,0x40,0x7c,0xe5,0xf0,0xf0,0x7f,0xfd,0x7e,0x29,0x12,0x00,0x0e,0x8f,0x11,0x7f,0xfc,0x7e,0x29,0x12,0x00,0x0e,0x8f,0x12,0x7f,0xff,0x7e,0x29,0x12,0x00,0x0e,0x8f,0x13,0x7f,0xfe,0x7e,0x29,0x12,0x00,0x0e,0x8f,0x14,0xe5,0x12,0xc3,0x94,0x01,0x40,0x02,0x15,0x12,0xe5,0x14,0xc3,0x94,0x01,0x40,0x02,0x15,0x14,0xe5,0x17,0x70,0x07,0xe5,0x11,0xc3,0x94,0xf0,0x40,0x04,0x7f,0x00,0x80,0x02,0xaf,0x11,0x8f,0x11,0xe5,0x17,0x70,0x07,0xe5,0x12,0xc3,0x94,0xf0,0x40,0x04,0x7f,0x00,0x80,0x02,0xaf,0x12,0x8f,0x12,0xe5,0x17,0x70,0x07,0xe5,0x13,0xc3,0x94,0xf0,0x40,0x04,0x7f,0x00,0x80,0x02,0xaf,0x13,0x8f,0x13,0xe5,0x17,0x70,0x07,0xe5,0x14,0xc3,0x94,0xf0,0x40,0x04,0x7f,0x00,0x80,0x02,0xaf,0x14,0x8f,0x14,0xe4,0xfd,0x12,0x10,0x7b,0xe0,0x52,0x16,0x12,0x10,0x86,0xe0,0x52,0x15,0x0d,0xbd,0x04,0xf0,0x12,0x0f,0x72,0x94,0x80,0x40,0x06,0xee,0x24,0x80,0xfe,0x80,0x0a,0x90,0x40,0x07,0xe0,0xfe,0xc3,0x74,0x80,0x9e,0xfe,0xee,0xd3,0x94,0x04,0x50,0x04,0x7e,0x01,0x80,0x02,0x7e,0x00,0xe5,0x16,0x5e,0x90,0x40,0x91,0x12,0x0d,0xbe,0xd3,0x94,0x40,0x40,0x06,0xef,0x24,0xc0,0xff,0x80,0x08,0x12,0x0d,0xbf,0xc3,0x74,0x40,0x9f,0xff,0xef,0xd3,0x94,0x04,0x50,0x04,0x7f,0x01,0x80,0x02,0x7f,0x00,0xe5,0x15,0x5f,0x90,0x40,0x92,0xf0,0xe4,0xfd,0x12,0x0f,0xc6,0xe0,0xff,0x24,0x02,0xfb,0xe4,0x33,0xfa,0x12,0x0f,0xd1,0xe0,0xd3,0x9b,0xea,0x12,0x0d,0xda,0x40,0x2c,0x12,0x0e,0x4a,0xe0,0xf9,0x24,0x02,0xfb,0xe4,0x33,0xfa,0xd3,0xef,0x9b,0xea,0x12,0x0d,0xda,0x40,0x18,0xe9,0x24,0x04,0xff,0xe4,0x33,0xfe,0x12,0x0f,0xd1,0xe0,0x12,0x0d,0xd7,0x40,0x08,0x12,0x0f,0x2d,0x74,0x01,0xf0,0x80,0x05,0x12,0x0f,0x2d,0xe4,0xf0,0x0d,0xed,0x64,0x04,0x70,0xb2,0xe4,0xfd,0xed,0x60,0x04,0x64,0x01,0x70,0x3f,0x12,0x0f,0xaa,0x12,0x0d,0xc7,0x40,0x03,0x02,0x0b,0xc0,0x12,0x10,0x91,0xe9,0x12,0x0d,0xd7,0x50,0x75,0x12,0x10,0x03,0x12,0x0d,0xc7,0x50,0x6d,0x12,0x10,0x91,0xe9,0x12,0x0d,0xd7,0x50,0x17,0x12,0x0e,0x99,0xe0,0xff,0xc3,0x94,0xff,0x50,0x06,0x12,0x0f,0x57,0x02,0x0b,0xb9,0x7e,0x00,0x7f,0xff,0x02,0x0b,0xb9,0x02,0x0b,0xc0,0x12,0x0f,0xaa,0xf5,0x83,0xe0,0xf9,0x24,0x01,0x12,0x0d,0xcd,0x50,0x3c,0xec,0x12,0x0f,0x58,0xe9,0x12,0x0d,0xd7,0x50,0x32,0x12,0x10,0x03,0xf5,0x83,0xe0,0xf9,0x24,0x01,0x12,0x0d,0xcd,0x50,0x24,0xec,0x12,0x0f,0x58,0xe9,0x12,0x0d,0xd7,0x50,0x1a,0x12,0x0e,0x99,0xe0,0xff,0xc3,0x94,0xff,0x50,0x05,0x12,0x0f,0x57,0x80,0x04,0x7e,0x00,0x7f,0xff,0x12,0x0e,0x99,0xef,0xf0,0x80,0x05,0x12,0x0e,0x99,0xe4,0xf0,0x74,0x11,0x2d,0xf8,0xe6,0x70,0x1a,0x12,0x0f,0xdc,0xe0,0xff,0xc3,0x94,0xff,0x50,0x05,0x12,0x0f,0x57,0x80,0x04,0x7e,0x00,0x7f,0xff,0x12,0x0f,0xdc,0xef,0xf0,0x80,0x05,0x12,0x0f,0xdc,0xe4,0xf0,0x0d,0xed,0x64,0x04,0x60,0x03,0x02,0x0b,0x30,0x90,0x40,0x68,0xe0,0xff,0x24,0x80,0xfb,0xe4,0x33,0xfa,0xe5,0x11,0x12,0x0f,0x38,0x50,0x05,0x12,0x0e,0xdd,0x40,0x17,0x90,0x40,0x69,0xe0,0xff,0x24,0x80,0xfb,0xe4,0x33,0xfa,0xe5,0x12,0x12,0x0f,0x38,0x50,0x3b,0x12,0x0e,0xdd,0x50,0x36,0x90,0x40,0x6a,0xe0,0xff,0x24,0x40,0xfb,0xe4,0x33,0xfa,0xe5,0x13,0x12,0x0f,0x38,0x50,0x09,0xe5,0x82,0x24,0x40,0x12,0x0e,0xe1,0x40,0x29,0x90,0x40,0x6b,0xe0,0xff,0x24,0x40,0xfb,0xe4,0x33,0xfa,0xe5,0x14,0x12,0x0f,0x38,0x50,0x09,0xe5,0x82,0x24,0x40,0x12,0x0e,0xe1,0x40,0x0e,0xe4,0xfd,0x12,0x0e,0x44,0xef,0xf0,0x0d,0xbd,0x04,0xf7,0x02,0x0c,0xc3,0xe4,0xfd,0xed,0x60,0x04,0x64,0x01,0x70,0x23,0x12,0x0f,0x2d,0xe0,0x60,0x02,0x80,0x21,0x12,0x0e,0x99,0xe0,0xd3,0x94,0x20,0x50,0x38,0x74,0x11,0x2d,0xf8,0xe6,0x12,0x10,0x92,0x12,0x0e,0x4a,0x12,0x10,0x99,0x50,0x2d,0x80,0x26,0x12,0x0f,0x2d,0xe0,0x60,0x07,0x12,0x0e,0x4a,0xe4,0xf0,0x80,0x1e,0x12,0x0e,0x99,0xe0,0xd3,0x94,0x20,0x50,0x10,0x74,0x11,0x2d,0xf8,0xe6,0x12,0x0f,0x58,0x12,0x0e,0x4a,0x12,0x10,0x99,0x50,0x05,0x12,0x0e,0x44,0xef,0xf0,0x0d,0xed,0x64,0x04,0x70,0xa5,0x90,0x40,0x93,0xe0,0x14,
142 0xff,0x90,0x40,0x7c,0xe0,0x6f,0x60,0x03,0x02,0x0d,0x78,0xfd,0x12,0x0f,0xaa,0xf5,0x83,0xe0,0xff,0x12,0x10,0x03,0xf5,0x83,0xef,0xf0,0x74,0x11,0x2d,0xf8,0xe6,0xff,0x12,0x0f,0xaa,0xf5,0x83,0xef,0xf0,0x0d,0xbd,0x04,0xe1,0xe4,0xfd,0x12,0x0f,0xc6,0xe0,0xff,0x12,0x0f,0xd1,0xef,0xf0,0x12,0x0e,0x4a,0xe0,0xff,0x12,0x0f,0xc6,0xef,0xf0,0x0d,0xbd,0x04,0xe8,0x7d,0x03,0x74,0x84,0x2d,0xf5,0x82,0xe4,0x34,0x40,0xf5,0x83,0xe0,0xff,0x12,0x10,0x7b,0xef,0xf0,0x74,0x88,0x2d,0xf5,0x82,0xe4,0x34,0x40,0xf5,0x83,0xe0,0xff,0x12,0x10,0x86,0xef,0xf0,0xdd,0xdc,0x12,0x0e,0xcb,0x40,0x06,0xef,0x24,0x80,0xff,0x80,0x03,0x12,0x0e,0x00,0xef,0xc3,0x94,0x04,0x50,0x04,0x7f,0x01,0x80,0x02,0x7f,0x00,0x90,0x40,0x85,0xef,0x12,0x0d,0xbe,0xd3,0x94,0x40,0x40,0x06,0xef,0x24,0xc0,0xff,0x80,0x08,0x12,0x0d,0xbf,0xc3,0x74,0x40,0x9f,0xff,0xef,0xc3,0x94,0x04,0x50,0x04,0x7f,0x01,0x80,0x02,0x7f,0x00,0x90,0x40,0x89,0xef,0xf0,0xc3,0x90,0x40,0x15,0xe0,0x94,0x32,0x12,0x0e,0x67,0x50,0x39,0x12,0x0d,0xbf,0x94,0x40,0x40,0x06,0xef,0x24,0xc0,0xff,0x80,0x08,0x12,0x0d,0xbf,0xc3,0x74,0x40,0x9f,0xff,0x12,0x0e,0x83,0x40,0x06,0xed,0x24,0x80,0xfd,0x80,0x03,0x12,0x0e,0x8e,0x12,0x0f,0xa3,0x12,0x10,0xf0,0x50,0x0e,0x12,0x0e,0xfd,0x50,0x09,0xe4,0x90,0x40,0x68,0xf0,0xa3,0xf0,0xa3,0xf0,0x22,0xf0,0x90,0x40,0x08,0xe0,0x54,0x7f,0xff,0x22,0xf5,0x83,0xe0,0xf9,0x24,0x02,0xff,0xe4,0x33,0xfe,0x74,0x11,0x2d,0xf8,0xe6,0xfc,0xd3,0x9f,0xee,0x64,0x80,0xf8,0x74,0x80,0x98,0x22,0x90,0x40,0x10,0xe0,0xf9,0x90,0x40,0x07,0xe0,0xff,0xc3,0x99,0x13,0x13,0x13,0x54,0x1f,0xfe,0x90,0x40,0x11,0xe0,0xc3,0x9f,0x13,0x13,0x13,0x54,0x1f,0xff,0x22,0x90,0x40,0x07,0xe0,0xff,0xc3,0x74,0x80,0x9f,0xff,0x22,0xf0,0x90,0x40,0x0c,0xe0,0xc4,0x54,0x0f,0x22,0x90,0x40,0x0c,0xe0,0x13,0x13,0x13,0x54,0x1f,0x22,0x90,0x40,0x0c,0xe0,0xff,0x13,0x13,0x13,0x54,0x1f,0x22,0x90,0x40,0x38,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x40,0x37,0xe0,0x2f,0xff,0x90,0x40,0x36,0xe0,0x3e,0xfe,0x7c,0x00,0x7d,0x05,0x02,0x1c,0xd2,0x74,0x11,0x2d,0xf8,0xe6,0xff,0x74,0x68,0x2d,0xf5,0x82,0xe4,0x34,0x40,0xf5,0x83,0x22,0x90,0x40,0x55,0xec,0xf0,0x90,0x40,0x50,0xe0,0xfc,0x22,0xd3,0x90,0x40,0x15,0xe0,0x94,0x64,0x90,0x40,0x14,0xe0,0x94,0x00,0x22,0xaa,0x06,0xab,0x07,0xe0,0xff,0x90,0x40,0xa8,0x7e,0x00,0xe0,0xfc,0xa3,0xe0,0xfd,0x12,0x1c,0xd2,0xd3,0x22,0x7e,0x00,0x90,0x40,0x07,0xe0,0xfd,0xd3,0x94,0x80,0x22,0x90,0x40,0x07,0xe0,0xfd,0xc3,0x74,0x80,0x9d,0xfd,0x22,0x74,0x7d,0x2d,0xf5,0x82,0xe4,0x34,0x40,0xf5,0x83,0x22,0x90,0x40,0xac,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x40,0xab,0xe0,0x2f,0xff,0x90,0x40,0xaa,0xe0,0x3e,0x90,0x40,0x59,0xfe,0xe0,0xfd,0x7c,0x00,0x02,0x1c,0xd2,0x2d,0xff,0x90,0x40,0x09,0xe0,0x54,0x03,0x22,0x90,0x40,0x07,0xe0,0xff,0xd3,0x94,0x80,0x22,0x90,0x40,0x0c,0xe0,0xff,0xc4,0x54,0x0f,0x22,0xe5,0x82,0x24,0x80,0xfb,0xe5,0x83,0x33,0xfa,0xc3,0xef,0x9b,0xe4,0x9a,0x22,0xfc,0xa3,0xf0,0xa3,0xeb,0xf0,0xec,0xa3,0xf0,0x90,0x40,0x57,0x74,0x02,0xf0,0xa3,0x22,0x90,0x40,0x31,0xe0,0x94,0x05,0x90,0x40,0x30,0xe0,0x94,0x00,0x22,0x90,0x40,0x0d,0xe0,0xff,0x54,0x07,0x25,0xe0,0xfe,0xef,0x13,0x13,0x13,0x54,0x01,0x2e,0x24,0x03,0x75,0xf0,0x05,0x84,0xaf,0xf0,0xef,0x14,0x22,0xef,0x13,0x13,0x13,0x54,0x1f,0x22,0x74,0x8d,0x2d,0xf5,0x82,0xe4,0x34,0x40,0xf5,0x83,0x22,0xf5,0x82,0x75,0x83,0x00,0xc3,0x9b,0xe5,0x83,0x9a,0x22,0xe0,0xc4,0x13,0x13,0x13,0x54,0x01,0xfd,0x7e,0x2c,0x22,0xe0,0xff,0x90,0x40,0x08,0xe0,0x54,0x7f,0x22,0xef,0x24,0x01,0xff,0xe4,0x33,0xfe,0x22,0xd3,0x90,0x40,0x17,0xe0,0x94,0x0a,0x90,0x40,0x16,0xe0,0x94,0x00,0x22,0x90,0x40,0xa5,0xe0,0xff,0x90,0x40,0x07,0xe0,0xfe,0xd3,0x22,0xd3,0x90,0x40,0x15,0xe0,0x94,0x2c,0x90,0x40,0x14,0xe0,0x94,0x01,0x22,0x90,0x40,0x07,0xe0,0xff,0x94,0x80,0x22,0xff,0x7c,0x00,0x7d,0x7f,0x12,0x1c,0xd2,0xc3,0x90,0x40,0x35,0xe0,0x9f,0x90,0x40,0x34,0xe0,0x9e,0x22,0xed,0x2f,0xff,0xe4,0x3e,0xfe,0x22,0x74,0x74,0x2d,0xf5,0x82,0xe4,0x34,0x40,0x22,0x90,0x40,0x14,0xe0,0xfe,0xa3,0xe0,0xa8,0x07,0x08,0x22,0xef,0xf0,0x90,0x40,0x50,0xe0,0xff,0x22,0x74,0x6c,0x2d,0xf5,0x82,0xe4,0x34,0x40,0xf5,0x83,0x22,0x74,0x70,0x2d,0xf5,0x82,0xe4,0x34,0x40,0xf5,0x83,0x22,0x74,0x81,0x2d,0xf5,0x82,0xe4,0x34,0x40,0xf5,0x83,0x22,0xef,0x24,0x48,0xff,0xe4,0x33,0xfe,0xc3,0xef,0x94,0x7c,0xee,0x64,0x80,0x94,0x80,0x22,0x90,0x40,
143 0x50,0xf0,0x7d,0xff,0x7f,0xa9,0x7e,0x29,0x22,0x74,0x78,0x2d,0xf5,0x82,0xe4,0x34,0x40,0x22,0xd3,0x90,0x40,0x43,0xe0,0x94,0x00,0x90,0x40,0x42,0xe0,0x94,0x00,0x22,0xe0,0xfc,0xa3,0xe0,0x2f,0xff,0xec,0x3e,0xfe,0x22,0xef,0x2e,0xf5,0x11,0x90,0x40,0xf8,0xf0,0xd3,0x22,0x90,0x40,0x48,0xe0,0x54,0xf0,0x22,0x90,0x40,0x07,0xe0,0x64,0x80,0x22,0x90,0x40,0x07,0xe0,0xff,0x90,0x40,0xa5,0xe0,0xc3,0x9f,0xff,0x22,0x90,0x40,0xa5,0xe0,0xfe,0x90,0x40,0x07,0xe0,0xfd,0xd3,0x9e,0x22,0x90,0x40,0x07,0xe0,0xfe,0x90,0x40,0xa5,0xe0,0xc3,0x9e,0xfe,0x22,0xa3,0xe0,0x54,0x7f,0x64,0x40,0x22,0xe0,0xfe,0x13,0x13,0x13,0x54,0x1f,0xfd,0x22,0xa3,0xf0,0xa3,0x74,0x02,0xf0,0xa3,0x22,0x74,0x85,0x2d,0xf5,0x82,0xe4,0x34,0x40,0xf5,0x83,0x22,0x74,0x89,0x2d,0xf5,0x82,0xe4,0x34,0x40,0xf5,0x83,0x22,0xec,0x24,0x02,0xff,0xe4,0x33,0xfe,0x22,0xe0,0xfb,0xc3,0xef,0x9b,0x74,0x80,0xf8,0x6e,0x98,0x22,0x90,0x40,0x6b,0xe0,0xc3,0x94,0x08,0x22,0xfe,0xe0,0x2f,0xff,0xe4,0x3e,0xfe,0xef,0x25,0xe0,0x22,0xe0,0xc4,0x13,0x13,0x13,0x54,0x01,0x22,0x24,0x90,0xfd,0xe4,0x33,0xfc,0xe0,0xd3,0x9d,0xec,0x22,0x90,0x40,0x15,0xe0,0x9f,0x90,0x40,0x14,0xe0,0x9e,0x22,0x90,0x40,0x04,0xe0,0x64,0x78,0x22,0xe4,0x33,0x54,0x01,0x33,0x33,0x33,0x54,0xf8,0x22,0xac,0x06,0xef,0x54,0xfe,0xf0,0xec,0x54,0x7f,0x22,0xd3,0xef,0x94,0x04,0xee,0x64,0x80,0x94,0x80,0x22,0x90,0x40,0xa2,0x74,0xf0,0xf0,0x22,0x90,0x40,0x14,0xe0,0xfe,0xa3,0xe0,0x78,0x06,0x22,0x90,0x40,0x3a,0xe0,0xfe,0xa3,0xe0,0x78,0x07,0x22,0xc3,0xee,0x64,0x80,0x94,0x80,0x50,0x03,0x02,0x11,0xdd,0xd3,0xef,0x94,0x02,0xee,0x64,0x80,0x94,0x80,0x40,0x03,0x02,0x11,0xdd,0xad,0x07,0xed,0x25,0xe0,0xfc,0x24,0x08,0xfb,0x90,0x40,0x5c,0xf0,0xec,0x24,0x04,0x12,0x0e,0xec,0x74,0x0d,0xf0,0x74,0x0b,0x12,0x10,0x73,0x74,0x0a,0x12,0x0e,0x59,0xb4,0x04,0x06,0xed,0x24,0x03,0xfc,0x80,0x19,0xec,0xb4,0x03,0x06,0xed,0x24,0x04,0xfc,0x80,0x0f,0x90,0x40,0x50,0xe0,0xb4,0x02,0x06,0xed,0x24,0x05,0xfc,0x80,0x02,0x7c,0x09,0x12,0x0e,0x55,0xb4,0x04,0x04,0x7c,0x0a,0x80,0x15,0xec,0xb4,0x03,0x04,0x7c,0x0a,0x80,0x0d,0x90,0x40,0x50,0xe0,0xb4,0x02,0x04,0x7c,0x09,0x80,0x02,0x7c,0x08,0x90,0x40,0x53,0x12,0x0e,0x58,0xb4,0x04,0x06,0xed,0x24,0x03,0xfc,0x80,0x19,0xec,0xb4,0x02,0x06,0xed,0x24,0x04,0xfc,0x80,0x0f,0x90,0x40,0x50,0xe0,0xb4,0x01,0x06,0xed,0x24,0x07,0xfc,0x80,0x02,0x7c,0x0a,0x90,0x40,0x56,0x12,0x0e,0x58,0xb4,0x04,0x05,0x7c,0x0a,0x02,0x13,0x74,0xec,0xb4,0x02,0x04,0x7c,0x09,0x80,0x0d,0x90,0x40,0x50,0xe0,0xb4,0x01,0x04,0x7c,0x08,0x80,0x02,0x7c,0x06,0x02,0x13,0x74,0xc3,0xef,0x94,0x03,0xee,0x64,0x80,0x94,0x80,0x50,0x03,0x02,0x12,0xa8,0xd3,0xef,0x94,0x05,0xee,0x64,0x80,0x94,0x80,0x40,0x03,0x02,0x12,0xa8,0xef,0x24,0xfd,0xfd,0x25,0xe0,0xfc,0x24,0x1b,0xfb,0x90,0x40,0x5c,0xf0,0xec,0x24,0x08,0x12,0x0e,0xec,0x74,0x0b,0xf0,0x74,0x09,0x12,0x10,0x73,0x74,0x0a,0x12,0x0e,0x59,0xb4,0x04,0x06,0xed,0x24,0x05,0xfc,0x80,0x19,0xec,0xb4,0x03,0x06,0xed,0x24,0x06,0xfc,0x80,0x0f,0x90,0x40,0x50,0xe0,0xb4,0x02,0x06,0xed,0x24,0x06,0xfc,0x80,0x02,0x7c,0x09,0x12,0x0e,0x55,0xb4,0x04,0x04,0x7c,0x0a,0x80,0x15,0xec,0xb4,0x03,0x04,0x7c,0x09,0x80,0x0d,0x90,0x40,0x50,0xe0,0xb4,0x02,0x04,0x7c,0x08,0x80,0x02,0x7c,0x07,0x90,0x40,0x53,0x12,0x0e,0x58,0xb4,0x04,0x06,0xed,0x24,0x05,0xfc,0x80,0x19,0xec,0xb4,0x02,0x06,0xed,0x24,0x06,0xfc,0x80,0x0f,0x90,0x40,0x50,0xe0,0xb4,0x01,0x06,0xed,0x24,0x08,0xfc,0x80,0x02,0x7c,0x0a,0x90,0x40,0x56,0x12,0x0e,0x58,0xb4,0x04,0x04,0x7c,0x0a,0x80,0x15,0xec,0xb4,0x02,0x04,0x7c,0x07,0x80,0x0d,0x90,0x40,0x50,0xe0,0xb4,0x01,0x04,0x7c,0x07,0x80,0x02,0x7c,0x05,0x02,0x13,0x74,0xc3,0xef,0x94,0x06,0xee,0x64,0x80,0x94,0x80,0x50,0x03,0x02,0x13,0x7a,0xd3,0xef,0x94,0x08,0xee,0x64,0x80,0x94,0x80,0x40,0x03,0x02,0x13,0x7a,0xef,0x24,0xfa,0xfd,0x75,0xf0,0x08,0xa4,0x24,0x32,0x90,0x40,0x5c,0xf0,0xed,0x25,0xe0,0x25,0xe0,0xfc,0x24,0x12,0xa3,0xf0,0xec,0x24,0x26,0xa3,0xf0,0xed,0x25,0xe0,0x25,0xe0,0x24,0x10,0x12,0x0e,0xf3,0x74,0x09,0xf0,0x12,0x10,0x73,0x74,0x05,0x12,0x0e,0x59,0xb4,0x04,0x06,0xed,0x24,0x07,0xfc,0x80,0x19,0xec,0xb4,0x03,0x06,0xed,0x24,0x08,0xfc,0x80,0x0f,0x90,0x40,0x50,0xe0,0xb4,0x02,0x06,0xed,0x24,0x08,0xfc,0x80,0x02,0x7c,0x09,0x12,0x0e,0x55,0xb4,0x04,0x04,0x7c,0x0a,0x80,0x15,0xec,0xb4,0x03,0x04,0x7c,0x09,0x80,0x0d,0x90,0x40,
144 0x50,0xe0,0xb4,0x02,0x04,0x7c,0x05,0x80,0x02,0x7c,0x03,0x90,0x40,0x53,0x12,0x0e,0x58,0xb4,0x04,0x04,0x7c,0x07,0x80,0x0e,0xec,0xb4,0x02,0x04,0x7c,0x09,0x80,0x06,0x90,0x40,0x50,0xe0,0x7c,0x0a,0x90,0x40,0x56,0x12,0x0e,0x58,0xb4,0x04,0x04,0x7c,0x0a,0x80,0x15,0xec,0xb4,0x02,0x04,0x7c,0x06,0x80,0x0d,0x90,0x40,0x50,0xe0,0xb4,0x01,0x04,0x7c,0x05,0x80,0x02,0x7c,0x03,0x90,0x40,0x54,0xec,0xf0,0x22,0xc3,0xef,0x94,0x09,0xee,0x64,0x80,0x94,0x80,0x50,0x03,0x02,0x14,0x38,0xd3,0xef,0x94,0x0a,0xee,0x64,0x80,0x94,0x80,0x40,0x03,0x02,0x14,0x38,0xef,0x24,0xf7,0xfd,0x90,0x40,0x5c,0x74,0x40,0xf0,0xa3,0x74,0x28,0xf0,0xa3,0x74,0x40,0xf0,0x74,0x28,0x12,0x0e,0xf3,0x74,0x08,0xf0,0xa3,0xf0,0xa3,0x74,0x04,0xf0,0xa3,0x04,0x12,0x0f,0xbf,0xb4,0x04,0x06,0xed,0x24,0x09,0xff,0x80,0x10,0xef,0xb4,0x03,0x06,0xed,0x24,0x09,0xff,0x80,0x06,0x90,0x40,0x50,0xe0,0x7f,0x0a,0x90,0x40,0x55,0x12,0x0f,0xbe,0xb4,0x04,0x04,0x7f,0x0a,0x80,0x15,0xef,0xb4,0x03,0x04,0x7f,0x08,0x80,0x0d,0x90,0x40,0x50,0xe0,0xb4,0x02,0x04,0x7f,0x03,0x80,0x02,0x7f,0x01,0x90,0x40,0x53,0x12,0x0f,0xbe,0xb4,0x04,0x04,0x7f,0x07,0x80,0x0e,0xef,0xb4,0x02,0x04,0x7f,0x09,0x80,0x06,0x90,0x40,0x50,0xe0,0x7f,0x0a,0x90,0x40,0x56,0x12,0x0f,0xbe,0xb4,0x04,0x04,0x7f,0x0a,0x80,0x15,0xef,0xb4,0x02,0x04,0x7f,0x03,0x80,0x0d,0x90,0x40,0x50,0xe0,0xb4,0x01,0x04,0x7f,0x02,0x80,0x02,0x7f,0x01,0x90,0x40,0x54,0xef,0xf0,0x22,0x90,0x40,0xa2,0xe0,0xff,0xd3,0x94,0xe6,0x40,0x05,0xe4,0xfb,0x02,0x16,0xe4,0x90,0x40,0xa7,0xe0,0x70,0x03,0x02,0x14,0xfd,0xe4,0x90,0x40,0xf7,0xf0,0x90,0x40,0xf6,0xf0,0x90,0x40,0xf5,0xf0,0x90,0x40,0x49,0xe0,0x54,0xf0,0x12,0x0e,0x0b,0xfe,0x30,0xe0,0x07,0x90,0x40,0x5c,0xe0,0xfd,0x80,0x05,0x90,0x40,0x5e,0xe0,0xfd,0xef,0xd3,0x9d,0x50,0x15,0x90,0x40,0x52,0xe0,0xff,0x94,0x03,0x50,0x07,0x90,0x40,0xee,0xe0,0xfd,0x80,0x02,0x7d,0x00,0xed,0x60,0x05,0x90,0x40,0xac,0x80,0x31,0xee,0x30,0xe0,0x07,0x90,0x40,0x5d,0xe0,0xfe,0x80,0x05,0x90,0x40,0x5f,0xe0,0xfe,0x90,0x40,0xa2,0xe0,0xc3,0x9e,0x50,0x11,0xef,0x94,0x03,0x50,0x04,0x7f,0x00,0x80,0x05,0x90,0x40,0xee,0xe0,0xff,0xef,0x60,0x05,0x90,0x40,0xaa,0x80,0x03,0x90,0x40,0xa8,0xe4,0x75,0xf0,0x01,0x12,0x1d,0x39,0x12,0x2e,0x72,0xab,0x07,0x90,0x40,0xaa,0xe0,0xfe,0xa3,0xe0,0xff,0xa3,0x12,0x10,0x1a,0x90,0x40,0xa8,0x12,0x10,0x1a,0xd3,0xef,0x94,0xc8,0xee,0x94,0x00,0x50,0x03,0x02,0x16,0xf3,0xe4,0x90,0x40,0xa7,0xf0,0x90,0x40,0xa2,0xf0,0x02,0x16,0xf3,0x12,0x0e,0xd4,0xf9,0x30,0xe0,0x23,0x90,0x40,0x50,0xe0,0xfe,0xb4,0x04,0x04,0x7e,0x1e,0x80,0x2d,0xee,0xb4,0x03,0x04,0x7e,0x1f,0x80,0x0d,0x90,0x40,0x50,0xe0,0xb4,0x02,0x04,0x7e,0x22,0x80,0x02,0x7e,0x24,0x80,0x16,0x90,0x40,0x50,0xe0,0xfe,0xb4,0x04,0x04,0x7e,0x1e,0x80,0x0a,0xee,0xb4,0x02,0x04,0x7e,0x38,0x80,0x02,0x7e,0x58,0xee,0xfd,0x33,0x95,0xe0,0xfc,0x90,0x40,0xa3,0xe0,0xd3,0x9d,0xec,0x12,0x0d,0xda,0x50,0x03,0x02,0x15,0xec,0x90,0x40,0xf5,0xe0,0x70,0x03,0x02,0x15,0xec,0x90,0x40,0x50,0xe0,0xfe,0x64,0x04,0x70,0x03,0x02,0x15,0xec,0xe4,0x90,0x40,0xa3,0xf0,0x90,0x40,0xf7,0x04,0xf0,0xee,0x70,0x09,0x7b,0x01,0x90,0x40,0x4f,0xf0,0x02,0x16,0xf3,0xee,0xb4,0x01,0x0d,0x90,0x40,0x4f,0xe0,0x70,0x07,0x7b,0x01,0x04,0xf0,0x02,0x16,0xf3,0x90,0x40,0x50,0xe0,0xb4,0x01,0x0c,0x90,0x40,0x4f,0xe0,0xb4,0x01,0x05,0x7b,0x01,0x02,0x16,0x8e,0x90,0x40,0x50,0xe0,0xfe,0xb4,0x01,0x0c,0x90,0x40,0x4f,0xe0,0xb4,0x02,0x05,0x7b,0x02,0x02,0x16,0xf3,0xee,0xb4,0x02,0x19,0x12,0x0f,0x26,0x30,0xe0,0x05,0x7b,0x04,0x02,0x16,0xf3,0xe9,0x30,0xe0,0x05,0x7b,0x03,0x02,0x16,0xf3,0x7b,0x04,0x02,0x16,0xf3,0x90,0x40,0x50,0xe0,0xff,0xb4,0x03,0x05,0x7b,0x04,0x02,0x16,0xf3,0xef,0x64,0x04,0x60,0x03,0x02,0x16,0xf3,0x7b,0x04,0x02,0x16,0xf3,0xe9,0x30,0xe0,0x28,0x90,0x40,0x50,0xe0,0xff,0xb4,0x04,0x04,0x7f,0x2e,0x80,0x15,0xef,0xb4,0x03,0x04,0x7f,0x42,0x80,0x0d,0x90,0x40,0x50,0xe0,0xb4,0x02,0x04,0x7f,0x70,0x80,0x02,0x7f,0x50,0xef,0x33,0x95,0xe0,0xfe,0x80,0x1e,0x90,0x40,0x50,0xe0,0xff,0xb4,0x04,0x0a,0x7c,0x00,0x7d,0x2e,0x7e,0x00,0x7f,0x2e,0x80,0x0c,0xef,0x7e,0x00,0xb4,0x02,0x04,0x7f,0x58,0x80,0x02,0x7f,0x88,0x90,0x40,0xa2,0xe0,0x12,0x0d,0xd7,0x50,0x03,0x02,0x16,0xd0,0x90,0x40,0xf5,0xe0,0x70,0x03,0x02,0x16,0xd0,0x90,0x40,0x49,0xe0,0x44,0x0f,0xf0,0xe4,0x90,0x40,0xa2,0xf0,0x90,0x40,0xf6,0x04,0x12,0x0f,0xbf,
145 0x64,0x04,0x70,0x17,0xe9,0x30,0xe0,0x05,0x7b,0x03,0x02,0x16,0xf3,0x12,0x0e,0x14,0x30,0xe0,0x04,0x7b,0x02,0x80,0x7e,0xe4,0xfb,0x80,0x7a,0xef,0xb4,0x03,0x04,0x7b,0x02,0x80,0x72,0x90,0x40,0x50,0xe0,0xff,0xb4,0x02,0x0a,0x7b,0x01,0x90,0x40,0x4f,0x74,0x02,0xf0,0x80,0x60,0xef,0xb4,0x01,0x0e,0x90,0x40,0x4f,0xe0,0xb4,0x02,0x07,0x7b,0x01,0x74,0x01,0xf0,0x80,0x4e,0x90,0x40,0x50,0xe0,0xb4,0x01,0x0d,0x90,0x40,0x4f,0xe0,0xb4,0x01,0x06,0x7b,0x01,0xe4,0xf0,0x80,0x3a,0x90,0x40,0x50,0xe0,0xff,0xb4,0x01,0x09,0x90,0x40,0x4f,0xe0,0x70,0x03,0xfb,0x80,0x29,0xef,0x70,0x26,0xfb,0x80,0x23,0x90,0x40,0xf6,0xe0,0x70,0x18,0xa3,0xe0,0x70,0x14,0x12,0x2e,0x72,0xab,0x07,0x90,0x40,0xf5,0x74,0x01,0xf0,0x90,0x40,0x49,0xe0,0x54,0xf0,0xf0,0x80,0x05,0x90,0x40,0x50,0xe0,0xfb,0xaf,0x03,0x22,0xd3,0x90,0x40,0x15,0xe0,0x94,0xe8,0x90,0x40,0x14,0xe0,0x94,0x03,0x40,0x0d,0x90,0x40,0xef,0xe0,0x94,0xff,0x50,0x0a,0xe0,0x04,0xf0,0x80,0x05,0xe4,0x90,0x40,0xef,0xf0,0x90,0x40,0xed,0xe0,0xc3,0x94,0x0a,0x50,0x0b,0x90,0x40,0xef,0xe0,0x94,0x02,0x40,0x0f,0x7f,0x05,0x22,0x90,0x40,0xef,0xe0,0xd3,0x94,0x05,0x40,0x03,0x7f,0x05,0x22,0x12,0x0e,0xc4,0xfe,0xc3,0x94,0x03,0x50,0x34,0x12,0x0e,0xd4,0x30,0xe0,0x0e,0x90,0x40,0x31,0xe0,0x94,0x2c,0x90,0x40,0x30,0xe0,0x94,0x01,0x50,0x12,0x12,0x0f,0x26,0x30,0xe0,0x1a,0xd3,0x90,0x40,0x31,0xe0,0x94,0x96,0x12,0x0f,0x03,0x40,0x0e,0x90,0x40,0xf1,0xe0,0xc3,0x94,0x08,0x50,0x0d,0xe0,0x04,0xf0,0x80,0x08,0x90,0x40,0xf1,0xe0,0x60,0x02,0x14,0xf0,0x90,0x40,0xf1,0xe0,0xd3,0x94,0x03,0x40,0x03,0x7f,0x08,0x22,0x90,0x40,0x06,0xe0,0xff,0x64,0x01,0x60,0x08,0xef,0x64,0x02,0x60,0x03,0x02,0x19,0x10,0xee,0xc3,0x94,0x03,0x40,0x26,0x90,0x40,0xc3,0xe0,0x94,0x03,0x40,0x1e,0x90,0x40,0x14,0xe0,0x70,0x02,0xa3,0xe0,0x60,0x51,0x90,0x40,0x16,0xe0,0x70,0x02,0xa3,0xe0,0x70,0x0a,0x90,0x40,0x18,0xe0,0x70,0x02,0xa3,0xe0,0x60,0x3d,0x90,0x40,0xed,0xe0,0xff,0xc3,0x94,0x0a,0x50,0x0e,0x90,0x40,0x10,0xe0,0xfe,0xa3,0xe0,0xc3,0x9e,0xd3,0x94,0x24,0x50,0x13,0xef,0xc3,0x94,0x0a,0x40,0x1f,0x90,0x40,0x10,0xe0,0xff,0xa3,0xe0,0x9f,0xd3,0x94,0x38,0x40,0x12,0x12,0x0f,0x79,0x40,0x0d,0x90,0x40,0xf0,0xe0,0x94,0x0a,0x50,0x0d,0xe0,0x04,0xf0,0x80,0x08,0x90,0x40,0xf0,0xe0,0x60,0x02,0x14,0xf0,0x90,0x40,0xf0,0xe0,0xd3,0x94,0x05,0x40,0x03,0x7f,0x01,0x22,0x90,0x40,0xed,0xe0,0xfe,0xc3,0x94,0x0a,0x40,0x10,0x90,0x40,0x12,0xe0,0xff,0xa3,0xe0,0x9f,0xd3,0x94,0x40,0x40,0x03,0x7f,0x02,0x22,0x90,0x40,0x09,0xe0,0xfd,0x54,0x03,0xc3,0x94,0x03,0x40,0x08,0x90,0x40,0xc3,0xe0,0x94,0x03,0x50,0x29,0xee,0xc3,0x94,0x0a,0x50,0x14,0x12,0x0e,0x0c,0x20,0xe0,0x0e,0x90,0x40,0x15,0xe0,0x94,0xc8,0x12,0x0e,0x67,0x40,0x12,0x7f,0x03,0x22,0xd3,0x90,0x40,0x15,0xe0,0x94,0xf4,0x12,0x0f,0x80,0x40,0x03,0x7f,0x03,0x22,0x90,0x40,0x16,0xe0,0xfe,0xa3,0xe0,0xff,0xd3,0x94,0x64,0xee,0x94,0x00,0x40,0x09,0xd3,0x12,0x10,0xca,0x40,0x03,0x7f,0x04,0x22,0x90,0x40,0x11,0xe0,0xff,0xb4,0xff,0x13,0x90,0x40,0x10,0xe0,0x70,0x0d,0x90,0x40,0x13,0xe0,0xb4,0x7f,0x06,0x90,0x40,0x12,0xe0,0x60,0x3c,0x12,0x0e,0x60,0x40,0x37,0x12,0x0f,0x5f,0x40,0x32,0xed,0x54,0x03,0x94,0x03,0x50,0x2b,0x90,0x40,0x13,0xe0,0xc3,0x94,0x78,0x50,0x15,0x90,0x40,0x12,0xe0,0x94,0x08,0x40,0x0d,0xef,0x94,0xf8,0x50,0x08,0x90,0x40,0x10,0xe0,0x94,0x08,0x50,0x0d,0x12,0x10,0x35,0x60,0x08,0x12,0x10,0x0c,0x40,0x03,0x7f,0x09,0x22,0x12,0x0e,0x14,0xfe,0x30,0xe0,0x14,0xd3,0x90,0x40,0x31,0xe0,0x94,0x32,0x12,0x0f,0x03,0x40,0x08,0x12,0x0e,0x60,0x40,0x03,0x7f,0x0a,0x22,0xee,0x30,0xe0,0x14,0xd3,0x90,0x40,0x31,0xe0,0x94,0x14,0x12,0x0f,0x03,0x40,0x08,0x12,0x0f,0x79,0x40,0x03,0x7f,0x0b,0x22,0x7f,0x00,0x22,0x12,0x37,0xd6,0x8f,0x14,0x12,0x38,0xfa,0xef,0x70,0x06,0x90,0x40,0xd1,0xf0,0x80,0x0a,0x90,0x40,0xd1,0xe0,0xf4,0x60,0x03,0xe0,0x2f,0xf0,0x90,0x40,0xd1,0xe0,0xd3,0x94,0x16,0x40,0x0d,0xa3,0xe4,0xf0,0xa3,0x74,0x0f,0xf0,0xa3,0x74,0x01,0xf0,0xff,0x22,0x90,0x40,0xd4,0xe0,0xb4,0x01,0x1c,0x90,0x40,0xd2,0xe0,0x70,0x02,0xa3,0xe0,0x60,0x0d,0x90,0x40,0xd2,0x74,0xff,0xf5,0xf0,0x12,0x1d,0x39,0x7f,0x01,0x22,0xe4,0x90,0x40,0xd4,0xf0,0x90,0x40,0x10,0xe0,0xff,0xa3,0xe0,0xfe,0xc3,0x9f,0x40,0x5f,0xa3,0xe0,0xfd,0xa3,0xe0,0xfc,0x9d,0x40,0x56,0xee,0xb4,0xff,0x0a,0xef,0x70,0x07,0xec,0xb4,0x7f,0x03,0xed,0x60,0x5a,0xd3,0x90,0x40,0x15,0xe0,0x94,
146 0x20,0x90,0x40,0x14,0xe0,0x94,0x03,0x40,0x4b,0xd3,0x90,0x40,0x17,0xe0,0x94,0x64,0x12,0x0f,0x66,0x40,0x3f,0x12,0x0e,0xc4,0x94,0x03,0x50,0x38,0x90,0x40,0x13,0xe0,0xc3,0x94,0x78,0x50,0x18,0x90,0x40,0x12,0xe0,0x94,0x08,0x40,0x10,0x90,0x40,0x11,0xe0,0x94,0xf8,0x50,0x08,0x90,0x40,0x10,0xe0,0x94,0x08,0x50,0x17,0x12,0x10,0x35,0x60,0x12,0x12,0x10,0x0c,0x40,0x0d,0x90,0x40,0xcd,0xe0,0x94,0x18,0x50,0x0d,0xe0,0x04,0xf0,0x80,0x08,0x90,0x40,0xcd,0xe0,0x60,0x02,0x14,0xf0,0x90,0x40,0xc5,0xe0,0xff,0x90,0x40,0xc4,0xe0,0x2f,0xff,0xe4,0x33,0xfe,0x90,0x40,0xc6,0xe0,0x7c,0x00,0x2f,0xff,0xec,0x3e,0xfe,0x12,0x10,0x1c,0x12,0x0e,0xc4,0x60,0x03,0x02,0x1a,0xaf,0x90,0x40,0x11,0xe0,0xb4,0xff,0x16,0x90,0x40,0x10,0xe0,0x70,0x10,0x90,0x40,0x13,0xe0,0xb4,0x7f,0x09,0x90,0x40,0x12,0xe0,0x70,0x03,0x02,0x1a,0xaf,0x90,0x40,0xbd,0xe0,0xb4,0xff,0x13,0x90,0x40,0xbf,0xe0,0x70,0x0d,0x90,0x40,0x13,0xe0,0xb4,0x7f,0x06,0x90,0x40,0x12,0xe0,0x60,0x68,0x90,0x40,0xbf,0xe0,0xfd,0x90,0x40,0x10,0xe0,0xf9,0x2d,0xfd,0xe4,0x33,0xfc,0x90,0x40,0xc0,0xe0,0x7a,0x00,0x2d,0xfd,0xea,0x3c,0xfc,0xc3,0xed,0x94,0x80,0xec,0x64,0x80,0x94,0x80,0x50,0x43,0xe9,0x90,0x40,0x11,0x12,0x10,0xbf,0x12,0x0d,0xda,0x40,0x37,0x90,0x40,0xbf,0xe0,0x90,0x40,0xbd,0x12,0x10,0xbf,0x12,0x0d,0xda,0x40,0x28,0x12,0x0e,0x60,0x40,0x23,0x12,0x0f,0x5f,0x40,0x1e,0xd3,0xef,0x94,0x10,0xee,0x94,0x00,0x40,0x15,0x90,0x40,0x07,0xe0,0x64,0x7c,0x60,0x0d,0x90,0x40,0xe1,0xe0,0x94,0x08,0x50,0x0d,0xe0,0x04,0xf0,0x80,0x08,0x90,0x40,0xe1,0xe0,0x60,0x02,0x14,0xf0,0x12,0x0e,0xc4,0x70,0x17,0x12,0x0f,0x6d,0x9f,0x40,0x05,0xee,0x9f,0xff,0x80,0x03,0x12,0x10,0x3c,0xef,0xd3,0x94,0x80,0x40,0x03,0x7f,0x07,0x22,0x90,0x40,0x07,0xe0,0xff,0xd3,0x94,0x02,0x40,0x13,0xef,0x94,0xfe,0x50,0x0e,0xa3,0xe0,0x54,0x7f,0xff,0x94,0x02,0x40,0x05,0xef,0x94,0x7e,0x40,0x25,0xd3,0x90,0x40,0x15,0xe0,0x94,0x00,0x12,0x0f,0x80,0x40,0x19,0xd3,0x90,0x40,0x17,0xe0,0x94,0x20,0x12,0x0f,0x66,0x40,0x0d,0x90,0x40,0x30,0xe0,0x70,0x02,0xa3,0xe0,0x60,0x03,0x7f,0x09,0x22,0x7f,0x00,0x22,0x90,0x41,0x00,0xe0,0x60,0x03,0x02,0x1b,0xe2,0x90,0x41,0x04,0xe0,0x70,0x09,0x90,0x40,0xb7,0xe0,0x60,0x03,0x02,0x1b,0xe2,0x90,0x40,0xa7,0xe0,0xff,0x64,0xfe,0x70,0x03,0x02,0x1b,0xe2,0x90,0x41,0x03,0xe0,0x6f,0x60,0x06,0xef,0x60,0x03,0x02,0x1b,0xe2,0x90,0x40,0x0a,0x12,0x0f,0x70,0x9f,0x40,0x05,0xee,0x9f,0xff,0x80,0x0c,0x90,0x40,0x07,0xe0,0xff,0x90,0x40,0x0a,0xe0,0xc3,0x9f,0xff,0xef,0xc3,0x94,0x10,0x50,0x1f,0x90,0x40,0x0b,0x12,0x0f,0x4e,0xfe,0x9f,0x40,0x05,0xee,0x9f,0xff,0x80,0x0a,0x12,0x0d,0xbf,0x90,0x40,0x0b,0xe0,0xc3,0x9f,0xff,0xef,0xc3,0x94,0x08,0x40,0x62,0x90,0x40,0x2a,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x40,0x3c,0xe0,0xfc,0xa3,0xe0,0xfd,0xd3,0x9f,0xec,0x9e,0x40,0x08,0xed,0x9f,0xff,0xec,0x9e,0xfe,0x80,0x15,0x90,0x40,0x3c,0xe0,0xfe,0xa3,0xe0,0xff,0xc3,0x90,0x40,0x2b,0xe0,0x9f,0xff,0x90,0x40,0x2a,0xe0,0x9e,0xfe,0xc3,0xef,0x94,0xf4,0xee,0x94,0x01,0x50,0x26,0x90,0x40,0x3e,0xe0,0xfe,0xa3,0xe0,0x78,0x02,0xce,0xc3,0x13,0xce,0x13,0xd8,0xf9,0xff,0xc3,0x90,0x40,0x3d,0xe0,0x9f,0x90,0x40,0x3c,0xe0,0x9e,0x50,0x08,0x90,0x41,0x01,0x74,0x01,0xf0,0x80,0x13,0x90,0x41,0x01,0xe0,0x60,0x08,0x90,0x40,0x9b,0xe0,0x60,0x07,0x80,0x00,0xe4,0x90,0x41,0x01,0xf0,0x90,0x41,0x01,0xe0,0x60,0x35,0x7b,0x04,0xe4,0xfd,0x7f,0x74,0x7e,0x26,0x12,0x39,0xe5,0x90,0x26,0x75,0x74,0x0f,0xf0,0x90,0x26,0x7b,0x74,0x05,0xf0,0x90,0x26,0x73,0x74,0x40,0xf0,0x90,0x26,0x72,0x74,0x80,0xf0,0x90,0x40,0xfd,0x74,0x40,0xf0,0xa3,0x74,0x80,0xf0,0x90,0x41,0x01,0x74,0x01,0xf0,0x80,0x56,0x12,0x0d,0xbf,0x90,0x40,0xfd,0xe0,0xfe,0xd3,0x9f,0x40,0x05,0xee,0x9f,0xff,0x80,0x09,0x90,0x40,0xfd,0x12,0x0f,0x4e,0xc3,0x9f,0xff,0xef,0xc3,0x94,0x06,0x7b,0x04,0x40,0x04,0x7d,0x01,0x80,0x02,0xe4,0xfd,0x7f,0x74,0x7e,0x26,0x12,0x39,0xe5,0x12,0x0f,0x50,0x90,0x40,0xfd,0xf0,0x90,0x40,0x07,0xe0,0x90,0x40,0xfe,0xf0,0x90,0x26,0x75,0x74,0x0a,0xf0,0x90,0x26,0x7b,0x14,0xf0,0x90,0x26,0x73,0xe4,0xf0,0x90,0x26,0x72,0xf0,0x90,0x41,0x01,0xf0,0x90,0x41,0x01,0xe0,0xa3,0xf0,0x90,0x40,0xa7,0xe0,0x90,0x41,0x03,0xf0,0x90,0x40,0xb7,0xe0,0x90,0x41,0x04,0xf0,0x12,0x0e,0xd4,0x30,0xe0,0x04,0x7f,0x03,0x80,0x0c,0x12,0x0f,0x26,0x30,0xe0,0x04,0x7f,0x02,0x80,0x02,0x7f,0x01,0x90,0x40,0xff,0xe0,0x6f,0x60,0x04,0x7e,
147 0x01,0x80,0x02,0x7e,0x00,0x90,0x41,0x00,0xee,0xf0,0x90,0x40,0xff,0xef,0xf0,0x22,0xef,0x8d,0xf0,0xa4,0xa8,0xf0,0xcf,0x8c,0xf0,0xa4,0x28,0xce,0x8d,0xf0,0xa4,0x2e,0xfe,0x22,0xbc,0x00,0x0b,0xbe,0x00,0x29,0xef,0x8d,0xf0,0x84,0xff,0xad,0xf0,0x22,0xe4,0xcc,0xf8,0x75,0xf0,0x08,0xef,0x2f,0xff,0xee,0x33,0xfe,0xec,0x33,0xfc,0xee,0x9d,0xec,0x98,0x40,0x05,0xfc,0xee,0x9d,0xfe,0x0f,0xd5,0xf0,0xe9,0xe4,0xce,0xfd,0x22,0xed,0xf8,0xf5,0xf0,0xee,0x84,0x20,0xd2,0x1c,0xfe,0xad,0xf0,0x75,0xf0,0x08,0xef,0x2f,0xff,0xed,0x33,0xfd,0x40,0x07,0x98,0x50,0x06,0xd5,0xf0,0xf2,0x22,0xc3,0x98,0xfd,0x0f,0xd5,0xf0,0xea,0x22,0xc5,0xf0,0xf8,0xa3,0xe0,0x28,0xf0,0xc5,0xf0,0xf8,0xe5,0x82,0x15,0x82,0x70,0x02,0x15,0x83,0xe0,0x38,0xf0,0x22,0xef,0x2b,0xff,0xee,0x3a,0xfe,0xed,0x39,0xfd,0xec,0x38,0xfc,0x22,0xe8,0x8f,0xf0,0xa4,0xcc,0x8b,0xf0,0xa4,0x2c,0xfc,0xe9,0x8e,0xf0,0xa4,0x2c,0xfc,0x8a,0xf0,0xed,0xa4,0x2c,0xfc,0xea,0x8e,0xf0,0xa4,0xcd,0xa8,0xf0,0x8b,0xf0,0xa4,0x2d,0xcc,0x38,0x25,0xf0,0xfd,0xe9,0x8f,0xf0,0xa4,0x2c,0xcd,0x35,0xf0,0xfc,0xeb,0x8e,0xf0,0xa4,0xfe,0xa9,0xf0,0xeb,0x8f,0xf0,0xa4,0xcf,0xc5,0xf0,0x2e,0xcd,0x39,0xfe,0xe4,0x3c,0xfc,0xea,0xa4,0x2d,0xce,0x35,0xf0,0xfd,0xe4,0x3c,0xfc,0x22,0x75,0xf0,0x08,0x75,0x82,0x00,0xef,0x2f,0xff,0xee,0x33,0xfe,0xcd,0x33,0xcd,0xcc,0x33,0xcc,0xc5,0x82,0x33,0xc5,0x82,0x9b,0xed,0x9a,0xec,0x99,0xe5,0x82,0x98,0x40,0x0c,0xf5,0x82,0xee,0x9b,0xfe,0xed,0x9a,0xfd,0xec,0x99,0xfc,0x0f,0xd5,0xf0,0xd6,0xe4,0xce,0xfb,0xe4,0xcd,0xfa,0xe4,0xcc,0xf9,0xa8,0x82,0x22,0xb8,0x00,0xc1,0xb9,0x00,0x59,0xba,0x00,0x2d,0xec,0x8b,0xf0,0x84,0xcf,0xce,0xcd,0xfc,0xe5,0xf0,0xcb,0xf9,0x78,0x18,0xef,0x2f,0xff,0xee,0x33,0xfe,0xed,0x33,0xfd,0xec,0x33,0xfc,0xeb,0x33,0xfb,0x10,0xd7,0x03,0x99,0x40,0x04,0xeb,0x99,0xfb,0x0f,0xd8,0xe5,0xe4,0xf9,0xfa,0x22,0x78,0x18,0xef,0x2f,0xff,0xee,0x33,0xfe,0xed,0x33,0xfd,0xec,0x33,0xfc,0xc9,0x33,0xc9,0x10,0xd7,0x05,0x9b,0xe9,0x9a,0x40,0x07,0xec,0x9b,0xfc,0xe9,0x9a,0xf9,0x0f,0xd8,0xe0,0xe4,0xc9,0xfa,0xe4,0xcc,0xfb,0x22,0x75,0xf0,0x10,0xef,0x2f,0xff,0xee,0x33,0xfe,0xed,0x33,0xfd,0xcc,0x33,0xcc,0xc8,0x33,0xc8,0x10,0xd7,0x07,0x9b,0xec,0x9a,0xe8,0x99,0x40,0x0a,0xed,0x9b,0xfd,0xec,0x9a,0xfc,0xe8,0x99,0xf8,0x0f,0xd5,0xf0,0xda,0xe4,0xcd,0xfb,0xe4,0xcc,0xfa,0xe4,0xc8,0xf9,0x22,0xe4,0x93,0xfc,0x74,0x01,0x93,0xfd,0x74,0x02,0x93,0xfe,0x74,0x03,0x93,0xff,0x22,0x90,0x40,0x04,0xe0,0x64,0x3c,0x70,0x6b,0x12,0x0e,0x1e,0xfe,0x30,0xe0,0x10,0xef,0xc4,0x13,0x54,0x07,0x20,0xe0,0x04,0x7f,0x01,0x80,0x1a,0x7f,0x00,0x80,0x16,0x12,0x0e,0x0c,0x30,0xe0,0x17,0xa3,0xe0,0x54,0x07,0xff,0x60,0x03,0xbf,0x02,0x04,0x7f,0x01,0x80,0x02,0x7f,0x00,0x90,0x40,0x9b,0xef,0xf0,0x80,0x06,0x90,0x40,0x9b,0x74,0x01,0xf0,0xe4,0x90,0x40,0x9c,0xf0,0xee,0x30,0xe0,0x08,0x90,0x40,0x0c,0xe0,0xc4,0x02,0x1f,0xf6,0x12,0x0e,0x0c,0x30,0xe0,0x16,0xa3,0xe0,0x54,0x07,0xff,0x64,0x04,0x60,0x03,0xbf,0x01,0x05,0x7f,0x01,0x02,0x1f,0xea,0x7f,0x00,0x02,0x1f,0xea,0xe4,0x02,0x1f,0xf9,0x12,0x0e,0x1e,0xfe,0x30,0xe0,0x17,0xef,0xc4,0x13,0x54,0x07,0x20,0xe0,0x0b,0xa3,0x12,0x0e,0x17,0x20,0xe0,0x04,0x7f,0x01,0x80,0x3b,0x7f,0x00,0x80,0x37,0x12,0x0e,0x0c,0x30,0xe0,0x22,0xa3,0xe0,0xff,0x54,0x07,0xfd,0x70,0x06,0x12,0x0f,0x26,0x30,0xe0,0x0c,0xbd,0x02,0x0d,0x90,0x40,0x0d,0x12,0x0e,0x17,0x30,0xe0,0x04,0x7f,0x01,0x80,0x02,0x7f,0x00,0x80,0x0f,0x90,0x40,0x0d,0x12,0x0e,0x17,0x20,0xe0,0x04,0x7f,0x01,0x80,0x02,0x7f,0x00,0x90,0x40,0x9b,0xef,0xf0,0xee,0x30,0xe0,0x1a,0x90,0x40,0x0c,0xe0,0xc4,0x13,0x54,0x07,0x20,0xe0,0x0b,0xa3,0x12,0x0e,0x17,0x30,0xe0,0x04,0x7f,0x01,0x80,0x2a,0x7f,0x00,0x80,0x26,0x12,0x0e,0x0c,0x30,0xe0,0x27,0xa3,0xe0,0xff,0x54,0x07,0xfe,0x70,0x06,0x12,0x0f,0x26,0x20,0xe0,0x0c,0xbe,0x03,0x0d,0x90,0x40,0x0d,0x12,0x0e,0x17,0x20,0xe0,0x04,0x7f,0x01,0x80,0x02,0x7f,0x00,0x90,0x40,0x9c,0xef,0xf0,0x80,0x05,0xe4,0x90,0x40,0x9c,0xf0,0x12,0x0e,0x1e,0x30,0xe0,0x17,0xef,0xc4,0x13,0x54,0x07,0x30,0xe0,0x0b,0xa3,0x12,0x0e,0x17,0x30,0xe0,0x04,0x7f,0x01,0x80,0x02,0x7f,0x00,0x80,0x27,0x12,0x0e,0x0c,0x30,0xe0,0x27,0xa3,0xe0,0xff,0x54,0x07,0xfe,0xbe,0x04,0x06,0x12,0x0f,0x26,0x20,0xe0,0x0c,0xbe,0x02,0x0d,0x90,0x40,0x0d,0x12,0x0e,0x17,0x20,0xe0,0x04,0x7f,0x01,0x80,0x02,0x7f,0x00,0x90,0x40,0x9d,0xef,0xf0,0x22,0x90,0x40,0x0d,0xe0,
148 0x13,0x13,0x13,0x54,0x01,0x90,0x40,0x9d,0xf0,0x22,0x12,0x0d,0xbf,0xd3,0x94,0x40,0x40,0x06,0xef,0x24,0xc0,0xff,0x80,0x08,0x12,0x0d,0xbf,0xc3,0x74,0x40,0x9f,0xff,0x12,0x0e,0x83,0x40,0x06,0xed,0x24,0x80,0xfd,0x80,0x03,0x12,0x0e,0x8e,0x12,0x0f,0xa3,0xd3,0xef,0x94,0x08,0xee,0x64,0x80,0x94,0x80,0x40,0x04,0x7f,0x01,0x80,0x02,0x7f,0x00,0x90,0x40,0x61,0xef,0xf0,0x60,0x25,0x12,0x0e,0x29,0xac,0x06,0xad,0x07,0x90,0x40,0x3a,0xe0,0x25,0xe0,0xff,0xe4,0x33,0xfe,0xd3,0xed,0x9f,0xec,0x9e,0x40,0x0d,0x90,0x40,0x63,0xe0,0x94,0x18,0x50,0x0d,0xe0,0x04,0xf0,0x80,0x08,0x90,0x40,0x63,0xe0,0x60,0x02,0x14,0xf0,0x90,0x40,0x61,0xe0,0xf9,0x60,0x27,0x12,0x0e,0x29,0xaa,0x06,0xab,0x07,0x90,0x40,0x3a,0xe0,0xff,0x7e,0x00,0x7d,0x03,0x12,0x1c,0xd2,0xd3,0xeb,0x9f,0xea,0x9e,0x40,0x0d,0x90,0x40,0x64,0xe0,0x94,0x18,0x50,0x0d,0xe0,0x04,0xf0,0x80,0x08,0x90,0x40,0x64,0xe0,0x60,0x02,0x14,0xf0,0xe9,0x60,0x2b,0x12,0x0e,0x29,0xac,0x06,0xad,0x07,0x90,0x40,0x3a,0xe0,0x7e,0x00,0x78,0x02,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xd3,0xed,0x9f,0xec,0x9e,0x40,0x0d,0x90,0x40,0x65,0xe0,0x94,0x18,0x50,0x0d,0xe0,0x04,0xf0,0x80,0x08,0x90,0x40,0x65,0xe0,0x60,0x02,0x14,0xf0,0x90,0x40,0x65,0xe0,0xd3,0x94,0x04,0x40,0x04,0x7f,0x03,0x80,0x1c,0x90,0x40,0x64,0xe0,0xd3,0x94,0x04,0x40,0x04,0x7f,0x02,0x80,0x0f,0x90,0x40,0x63,0xe0,0xd3,0x94,0x04,0x40,0x04,0x7f,0x01,0x80,0x02,0x7f,0x00,0x90,0x40,0x62,0xef,0xf0,0xbf,0x03,0x0b,0x12,0x21,0x55,0xf0,0x44,0x40,0xf0,0x44,0x80,0xf0,0x22,0x90,0x40,0x62,0xe0,0xb4,0x02,0x08,0x12,0x21,0x55,0xf0,0x44,0x40,0x80,0x2f,0x90,0x40,0x62,0xe0,0xb4,0x01,0x16,0x7d,0x08,0x7f,0x2e,0x7e,0x2c,0x12,0x3b,0xaa,0x7f,0x03,0x12,0x31,0x8f,0x90,0x40,0x4a,0xe0,0x44,0x20,0x80,0x0f,0x7d,0x18,0x7f,0x2e,0x7e,0x2c,0x12,0x3b,0xaa,0x90,0x40,0x4a,0xe0,0x54,0xdf,0xf0,0x54,0xbf,0xf0,0x54,0x7f,0xf0,0x22,0x7d,0x08,0x7f,0x2e,0x7e,0x2c,0x12,0x3b,0xaa,0x7f,0x02,0x12,0x31,0x8f,0x90,0x40,0x4a,0xe0,0x44,0x20,0x22,0x7d,0x03,0x75,0x11,0x03,0x7f,0x03,0x7c,0x03,0xe4,0xf5,0x12,0xf5,0x13,0xf5,0x14,0xf5,0x15,0x90,0x40,0x92,0xe0,0xfe,0x60,0x06,0x90,0x40,0x91,0xe0,0x70,0x4b,0xee,0x60,0x24,0x90,0x40,0x68,0xe0,0xc3,0x94,0x08,0x40,0x04,0x7e,0xfe,0x80,0x02,0xae,0x05,0xad,0x06,0x90,0x40,0x69,0xe0,0xc3,0x94,0x08,0x40,0x04,0x7e,0xfe,0x80,0x02,0xae,0x11,0x8e,0x11,0x80,0x24,0x90,0x40,0x91,0xe0,0x60,0x1e,0x90,0x40,0x6a,0xe0,0xc3,0x94,0x08,0x40,0x04,0x7e,0xfe,0x80,0x02,0xae,0x07,0xaf,0x06,0x12,0x10,0xa4,0x40,0x04,0x7e,0xfe,0x80,0x02,0xae,0x04,0xac,0x06,0x90,0x40,0x7d,0xe0,0xd3,0x94,0x20,0x40,0x11,0x90,0x40,0x81,0xe0,0xd3,0x94,0x20,0x40,0x08,0x90,0x40,0x92,0xe0,0x60,0x02,0xe4,0xfd,0x90,0x40,0x7e,0xe0,0xd3,0x94,0x20,0x40,0x12,0x90,0x40,0x82,0xe0,0xd3,0x94,0x20,0x40,0x09,0x90,0x40,0x92,0xe0,0x60,0x03,0xe4,0xf5,0x11,0x90,0x40,0x7f,0xe0,0xd3,0x94,0x20,0x40,0x11,0x90,0x40,0x83,0xe0,0xd3,0x94,0x20,0x40,0x08,0x90,0x40,0x91,0xe0,0x60,0x02,0xe4,0xff,0x90,0x40,0x80,0xe0,0xd3,0x94,0x20,0x40,0x11,0x90,0x40,0x84,0xe0,0xd3,0x94,0x20,0x40,0x08,0x90,0x40,0x91,0xe0,0x60,0x02,0xe4,0xfc,0xef,0x33,0x95,0xe0,0x90,0x40,0x6a,0x12,0x10,0xac,0xf5,0x13,0xee,0x33,0xf5,0x12,0xaf,0x04,0xef,0x33,0x95,0xe0,0xa3,0x12,0x10,0xac,0xf5,0x15,0xee,0x33,0xf5,0x14,0x90,0x40,0x68,0xe0,0x2d,0xfd,0x7f,0x7c,0x7e,0x29,0x12,0x3b,0xaa,0x90,0x40,0x69,0xe0,0x25,0x11,0xfd,0x7f,0x7d,0x7e,0x29,0x12,0x3b,0xaa,0xad,0x15,0xac,0x14,0x7f,0x7a,0x7e,0x29,0x12,0x3b,0x74,0xe5,0x12,0x44,0x80,0xfc,0xad,0x13,0x7f,0x78,0x7e,0x29,0x12,0x3b,0x74,0x90,0x40,0x68,0x7f,0x27,0x12,0x0f,0x43,0x12,0x3b,0xaa,0x90,0x40,0x69,0x7f,0x26,0x12,0x0f,0x43,0x12,0x3b,0xaa,0x90,0x40,0x6a,0x12,0x10,0xb7,0xfd,0x7f,0x25,0x7e,0x2c,0x12,0x3b,0xaa,0x90,0x40,0x6b,0x12,0x10,0xb7,0xfd,0x7f,0x24,0x7e,0x2c,0x02,0x3b,0xaa,0x90,0x41,0x9b,0xe0,0x70,0x6f,0x12,0x32,0x6e,0xef,0x70,0x06,0x12,0x2a,0x16,0xef,0x60,0x0e,0xc3,0x90,0x40,0x3a,0xe0,0x94,0x0c,0x50,0x05,0x7d,0x20,0x02,0x23,0x33,0x12,0x11,0x0b,0xce,0xc3,0x13,0xce,0x13,0xd8,0xf9,0x12,0x0f,0x8f,0x40,0x3f,0x12,0x0e,0xcb,0x40,0x06,0xef,0x24,0x80,0xff,0x80,0x03,0x12,0x0e,0x00,0xef,0xc3,0x94,0x50,0x50,0x2b,0x12,0x0f,0x87,0x40,0x06,0xef,0x24,0x80,0xff,0x80,0x03,0x12,0x0e,0x00,0x12,0x0f,0xe7,0x50,0x14,0x12,0x0f,0x87,0x40,0x06,0xef,0x24,0x80,0xff,0x80,0x03,0x12,0x0e,
149 0x00,0xef,0x24,0x48,0xfd,0x80,0x02,0x7d,0x7c,0x80,0x02,0x7d,0x7c,0x7f,0x56,0x02,0x23,0xcc,0xd3,0x90,0x40,0x15,0xe0,0x94,0xc8,0x12,0x0e,0x67,0x40,0x21,0xd3,0x90,0x40,0x31,0xe0,0x94,0x20,0x12,0x0f,0x03,0x40,0x15,0x90,0x40,0x07,0xe0,0xb4,0x80,0x0e,0xa3,0xe0,0x54,0x7f,0xff,0xbf,0x40,0x06,0x75,0x11,0x30,0x02,0x23,0xb8,0x12,0x11,0x0b,0xce,0xc3,0x13,0xce,0x13,0xd8,0xf9,0x12,0x0f,0x8f,0x40,0x41,0x12,0x0e,0xcb,0x40,0x06,0xef,0x24,0x80,0xff,0x80,0x03,0x12,0x0e,0x00,0xef,0xc3,0x94,0x50,0x50,0x2d,0x12,0x0f,0x87,0x40,0x06,0xef,0x24,0x80,0xff,0x80,0x03,0x12,0x0e,0x00,0x12,0x0f,0xe7,0x50,0x14,0x12,0x0f,0x87,0x40,0x06,0xef,0x24,0x80,0xff,0x80,0x03,0x12,0x0e,0x00,0xef,0x24,0x48,0xff,0x80,0x02,0x7f,0x7c,0x8f,0x11,0x80,0x03,0x75,0x11,0x7c,0xc3,0x74,0x80,0x95,0x11,0xfd,0x7f,0x38,0x7e,0x29,0x12,0x3b,0xaa,0xe5,0x11,0x24,0x80,0xfd,0x7f,0x3a,0x7e,0x29,0x12,0x3b,0xaa,0x90,0x41,0x0c,0xe0,0x60,0x0f,0x7f,0x96,0x7e,0x20,0x12,0x00,0x0e,0xef,0x30,0xe1,0x04,0x7d,0x0e,0x80,0x02,0x7d,0x0c,0x7f,0x13,0x7e,0x29,0x12,0x3b,0xaa,0x12,0x0e,0xd4,0x30,0xe0,0x07,0x90,0x41,0x0c,0x74,0x01,0xf0,0x22,0x12,0x0f,0x26,0x30,0xe0,0x05,0xe4,0x90,0x41,0x0c,0xf0,0x22,0x12,0x10,0xd5,0x70,0x32,0x90,0x40,0x0c,0x12,0x10,0x6a,0x30,0xe0,0x09,0xef,0x64,0x03,0x70,0x3f,0x7f,0x04,0x80,0x3b,0xee,0xc4,0x54,0x0f,0x20,0xe0,0x34,0xed,0x20,0xe0,0x30,0xef,0x64,0x03,0x60,0x03,0xbf,0x02,0x04,0x7f,0x04,0x80,0x24,0xef,0x64,0x01,0x70,0x1f,0x7f,0x04,0x80,0x1b,0xbf,0x01,0x04,0x7f,0x02,0x80,0x14,0xbf,0x03,0x11,0x90,0x40,0x0c,0xe0,0xfe,0xc4,0x54,0x0f,0x30,0xe0,0x04,0x7f,0x02,0x80,0x02,0x7f,0x04,0xef,0x70,0x03,0x02,0x24,0xf5,0x14,0x60,0x53,0x14,0x60,0x27,0x14,0x60,0x13,0x80,0x00,0x90,0x40,0x48,0xe0,0x44,0x0f,0x12,0x25,0x09,0xe4,0xff,0x12,0x3b,0xb1,0x02,0x24,0xf2,0x12,0x10,0x2e,0x44,0x07,0x12,0x25,0x09,0x7f,0x01,0x12,0x3b,0xb1,0x1f,0x02,0x24,0xf2,0x12,0x10,0x2e,0x44,0x03,0x12,0x0e,0x0b,0x30,0xe0,0x0e,0x90,0x40,0x04,0xe0,0xb4,0x78,0x07,0x12,0x25,0x14,0x7f,0x02,0x80,0x09,0x12,0x0e,0x14,0x30,0xe0,0x06,0x12,0x25,0x1e,0x12,0x3b,0xb1,0xe4,0xff,0x80,0x3c,0x12,0x10,0x2e,0x44,0x01,0xf0,0x12,0x10,0xd5,0x70,0x47,0x12,0x0e,0x0c,0x30,0xe0,0x07,0x12,0x25,0x14,0x7f,0x02,0x80,0x09,0x12,0x0e,0x14,0x30,0xe0,0x06,0x12,0x25,0x1e,0x12,0x3b,0xb1,0x90,0x40,0x4f,0xe0,0xb4,0x02,0x04,0x7f,0x01,0x80,0x0d,0x90,0x40,0x4f,0xe0,0xb4,0x01,0x04,0x7f,0x04,0x80,0x02,0x7f,0x07,0x02,0x36,0x5c,0x12,0x10,0x2e,0x12,0x0f,0xfb,0x12,0x3b,0xaa,0xe4,0xff,0x12,0x36,0x5c,0xe4,0xff,0x12,0x3b,0xb1,0x22,0xf0,0x7d,0x0f,0x7f,0xa9,0x7e,0x29,0x12,0x3b,0xaa,0x22,0x7d,0x0f,0x7f,0xa9,0x7e,0x29,0x12,0x3b,0xaa,0x22,0x7d,0x5f,0x7f,0xa9,0x7e,0x29,0x12,0x3b,0xaa,0xe4,0xff,0x22,0x01,0x1f,0x1c,0x41,0x40,0x05,0x00,0x41,0x40,0x4c,0xe8,0x41,0x40,0x4f,0x02,0x41,0x40,0x51,0x00,0x41,0x40,0x52,0x00,0x41,0x40,0x53,0x0a,0x41,0x40,0x54,0x0a,0x41,0x40,0x55,0x0a,0x41,0x40,0x56,0x0a,0x41,0x40,0x57,0x02,0x41,0x40,0x58,0x0a,0x41,0x40,0x59,0x09,0x41,0x40,0x5a,0x02,0x41,0x40,0x5b,0x05,0x41,0x40,0x5c,0x32,0x41,0x40,0x5d,0x1a,0x41,0x40,0x5e,0x32,0x41,0x40,0x5f,0x1a,0x41,0x40,0x60,0x00,0x41,0x40,0x61,0x00,0x41,0x40,0x62,0x00,0x41,0x40,0x63,0x00,0x41,0x40,0x64,0x00,0x41,0x40,0x65,0x00,0x41,0x40,0x93,0x04,0x41,0x40,0x94,0x00,0x42,0x40,0x95,0x00,0x00,0x42,0x40,0x97,0x00,0x00,0x42,0x40,0x99,0x00,0x00,0x41,0x40,0xa2,0x00,0x41,0x40,0xa3,0x00,0x41,0x40,0xa7,0x01,0x42,0x40,0xa8,0x00,0x00,0x42,0x40,0xaa,0x00,0x00,0x42,0x40,0xac,0x00,0x00,0x41,0x40,0xd4,0x00,0x41,0x40,0xde,0x00,0x41,0x40,0xdf,0x00,0x41,0x40,0xe0,0x00,0x41,0x40,0xe9,0x00,0x41,0x40,0xea,0x00,0x41,0x40,0xeb,0x00,0x41,0x40,0xec,0x00,0x41,0x40,0xed,0x00,0x41,0x40,0xf3,0x00,0x41,0x40,0xf4,0x00,0x41,0x40,0xf5,0x00,0x41,0x40,0xf6,0x00,0x41,0x40,0xf7,0x00,0x41,0x40,0xf8,0x00,0x41,0x40,0xf9,0x00,0x41,0x40,0xfa,0x00,0x41,0x40,0xfb,0x00,0x41,0x40,0xfd,0x40,0x41,0x40,0xfe,0x80,0x41,0x40,0xff,0x00,0x41,0x41,0x01,0x00,0x41,0x41,0x02,0x00,0x41,0x41,0x03,0x00,0x41,0x41,0x04,0x00,0x42,0x41,0x05,0x00,0x00,0x41,0x41,0x08,0x00,0x41,0x41,0x09,0x00,0x41,0x41,0x0a,0x00,0x41,0x41,0x0b,0x00,0x01,0x38,0x00,0x41,0x41,0x0d,0x00,0x01,0x39,0x00,0x00,0x90,0x40,0x94,0xe0,0x70,0x2c,0x7f,0x32,0x12,0x27,0x1c,0x7f,0x33,0x12,0x27,0x14,0x7d,0x4b,0x12,0x27,0x44,
150 0x7d,0x20,0x7f,0x35,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0x7d,0x7f,0x36,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0x20,0x12,0x27,0x05,0x90,0x40,0x99,0x02,0x26,0xd3,0x90,0x40,0x94,0xe0,0x64,0x01,0x70,0x13,0x12,0x26,0xe9,0x7d,0x10,0x12,0x27,0x24,0x7d,0x10,0x12,0x27,0x05,0x90,0x40,0x95,0x02,0x26,0xd3,0x90,0x40,0x94,0xe0,0x64,0x02,0x70,0x2b,0x7d,0x64,0x7f,0x32,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0x40,0x7f,0x33,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0x64,0x12,0x27,0x44,0x7f,0x35,0x12,0x27,0x14,0x7f,0x36,0x12,0x27,0x1c,0x7d,0x40,0x12,0x27,0x35,0x90,0x40,0x97,0x80,0x10,0x12,0x26,0xe9,0x7d,0x7f,0x12,0x27,0x24,0x7d,0x7f,0x12,0x27,0x35,0x90,0x40,0x95,0xcf,0xf0,0xa3,0xef,0xf0,0x90,0x40,0x94,0xe0,0xb4,0x03,0x03,0xe4,0xf0,0x22,0x90,0x40,0x94,0xe0,0x04,0xf0,0x22,0x7d,0x80,0x7f,0x32,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0x7f,0x7f,0x33,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0x80,0x7f,0x34,0x7e,0x26,0x12,0x3b,0xaa,0x22,0x7f,0x37,0x7e,0x26,0x12,0x3b,0xaa,0x90,0x40,0x2c,0xe0,0xff,0xa3,0xe0,0x22,0x7d,0x40,0x7e,0x26,0x12,0x3b,0xaa,0x22,0x7d,0x64,0x7e,0x26,0x12,0x3b,0xaa,0x22,0x7f,0x35,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0x80,0x7f,0x36,0x7e,0x26,0x12,0x3b,0xaa,0x22,0x7f,0x37,0x7e,0x26,0x12,0x3b,0xaa,0x90,0x40,0x2c,0xe0,0xff,0xa3,0xe0,0x22,0x7f,0x34,0x7e,0x26,0x12,0x3b,0xaa,0x22,0x7f,0x02,0x75,0x11,0x02,0x75,0x12,0x02,0x75,0x13,0x02,0x90,0x40,0x92,0xe0,0xfe,0x60,0x06,0x90,0x40,0x91,0xe0,0x70,0x4b,0xee,0x60,0x24,0x90,0x40,0x68,0xe0,0xc3,0x94,0x08,0x40,0x04,0x7e,0xfe,0x80,0x02,0xae,0x07,0xaf,0x06,0x90,0x40,0x69,0xe0,0xc3,0x94,0x08,0x40,0x04,0x7e,0xfe,0x80,0x02,0xae,0x11,0x8e,0x11,0x80,0x24,0x90,0x40,0x91,0xe0,0x60,0x1e,0x90,0x40,0x6a,0xe0,0xc3,0x94,0x08,0x40,0x04,0x7e,0xfe,0x80,0x02,0xae,0x12,0x8e,0x12,0x12,0x10,0xa4,0x40,0x04,0x7e,0xfe,0x80,0x02,0xae,0x13,0x8e,0x13,0x90,0x40,0x7d,0xe0,0xd3,0x94,0x20,0x40,0x11,0x90,0x40,0x81,0xe0,0xd3,0x94,0x20,0x40,0x08,0x90,0x40,0x92,0xe0,0x60,0x02,0xe4,0xff,0x90,0x40,0x7e,0xe0,0xd3,0x94,0x20,0x40,0x12,0x90,0x40,0x82,0xe0,0xd3,0x94,0x20,0x40,0x09,0x90,0x40,0x92,0xe0,0x60,0x03,0xe4,0xf5,0x11,0x90,0x40,0x7f,0xe0,0xd3,0x94,0x20,0x40,0x12,0x90,0x40,0x83,0xe0,0xd3,0x94,0x20,0x40,0x09,0x90,0x40,0x91,0xe0,0x60,0x03,0xe4,0xf5,0x12,0x90,0x40,0x80,0xe0,0xd3,0x94,0x20,0x40,0x12,0x90,0x40,0x84,0xe0,0xd3,0x94,0x20,0x40,0x09,0x90,0x40,0x91,0xe0,0x60,0x03,0xe4,0xf5,0x13,0x90,0x40,0x68,0xe0,0x2f,0x7f,0x97,0x12,0x28,0x4b,0x90,0x40,0x69,0xe0,0x25,0x11,0x7f,0x96,0x12,0x28,0x4b,0x90,0x40,0x6a,0xe0,0x25,0x12,0xfd,0x7f,0x95,0x7e,0x29,0x12,0x3b,0xaa,0x90,0x40,0x6b,0xe0,0x25,0x13,0xfd,0x7f,0x94,0x7e,0x29,0x02,0x3b,0xaa,0xfd,0x7e,0x29,0x12,0x3b,0xaa,0x22,0x7f,0xcc,0x7e,0x29,0x12,0x3a,0x35,0xad,0x07,0x90,0x40,0x07,0x12,0x10,0xe6,0xff,0xa3,0xe0,0x54,0x80,0x4f,0xf0,0xec,0x12,0x10,0xb8,0xff,0xed,0x54,0x01,0x25,0xe0,0x4f,0x54,0x03,0xff,0xa3,0xe0,0x54,0xfc,0x4f,0xf0,0x7f,0xda,0x7e,0x29,0x12,0x3a,0x35,0x90,0x40,0x0a,0x12,0x10,0xe6,0xa3,0xf0,0x7f,0xc8,0x7e,0x29,0x12,0x39,0x1e,0x90,0x40,0x3c,0xee,0xf0,0xa3,0xef,0xf0,0x7f,0xca,0x7e,0x29,0x12,0x39,0x1e,0x90,0x40,0x3e,0xee,0xf0,0xa3,0xef,0xf0,0x7f,0xcb,0x7e,0x29,0x12,0x00,0x0e,0x90,0x40,0x0e,0xef,0xf0,0x7f,0xc9,0x7e,0x29,0x12,0x00,0x0e,0x90,0x40,0x0f,0xef,0xf0,0x7f,0xc0,0x7e,0x29,0x12,0x00,0x0e,0x90,0x40,0x10,0xef,0xf0,0x7f,0xc2,0x7e,0x29,0x12,0x00,0x0e,0x90,0x40,0x11,0xef,0xf0,0x7f,0xc1,0x7e,0x29,0x12,0x00,0x0e,0x90,0x40,0x12,0xef,0xf0,0x7f,0xc3,0x7e,0x29,0x12,0x00,0x0e,0x90,0x40,0x13,0x12,0x29,0x31,0x90,0x40,0x2e,0xee,0xf0,0xa3,0xef,0xf0,0x7f,0x9a,0x7e,0x20,0x12,0x39,0x1e,0x90,0x40,0x46,0xee,0xf0,0xa3,0xef,0xf0,0x7f,0x60,0x7e,0x2c,0x12,0x39,0x1e,0x90,0x40,0x24,0xee,0xf0,0xa3,0xef,0xf0,0x7f,0xd0,0x7e,0x26,0x12,0x39,0x1e,0x90,0x40,0x2c,0xee,0xf0,0xa3,0x12,0x29,0x31,0x90,0x40,0x2a,0xee,0xf0,0xa3,0xef,0xf0,0x22,0xef,0xf0,0x7f,0xdc,0x7e,0x29,0x12,0x39,0x1e,0x22,0x8e,0x22,0x8f,0x23,0x8c,0x24,0x8d,0x25,0xe4,0xf5,0x27,0xf5,0x28,0x75,0x29,0x27,0x75,0x2a,0x10,0x30,0x00,0x03,0x02,0x2a,0x15,0x05,0x23,0xe5,0x23,0xae,0x22,0x70,0x02,0x05,0x22,0x14,0xf5,0x82,0x8e,0x83,0xe4,0x93,0xf5,0x26,0x70,0x03,0x02,0x2a,0x15,0x64,0x25,0x60,0x03,0x02,0x2a,0x0d,0x05,0x23,0xe5,0x23,0xae,0x22,0x70,0x02,0x05,0x22,0x14,0xf5,0x82,0x8e,0x83,0xe4,0x93,0x24,0x9c,0x60,0x15,0x24,0xfb,
151 0x60,0x11,0x24,0xf1,0x60,0x04,0x24,0x20,0x70,0xc0,0x75,0x29,0x10,0x75,0x2a,0x00,0x75,0x28,0x01,0xe5,0x25,0x45,0x24,0x60,0x66,0xe5,0x2a,0x45,0x29,0x60,0xab,0xac,0x29,0xad,0x2a,0xae,0x24,0xaf,0x25,0x12,0x1c,0xe4,0xab,0x07,0xae,0x24,0xaf,0x25,0xac,0x29,0xad,0x2a,0x12,0x1c,0xe4,0x8c,0x24,0x8d,0x25,0xeb,0x60,0x03,0x75,0x27,0x01,0xe5,0x27,0x60,0x11,0xeb,0xd3,0x94,0x09,0xeb,0x40,0x04,0x24,0x37,0x80,0x02,0x24,0x30,0xff,0x12,0x3a,0x7e,0xe5,0x28,0x60,0x14,0xe5,0x29,0xc4,0xf8,0x54,0xf0,0xc8,0x68,0xf5,0x29,0xe5,0x2a,0xc4,0x54,0x0f,0x48,0xf5,0x2a,0x80,0xab,0xae,0x29,0xaf,0x2a,0x7c,0x00,0x7d,0x0a,0x12,0x1c,0xe4,0x8e,0x29,0x8f,0x2a,0x80,0x9a,0x7f,0x30,0x80,0x02,0xaf,0x26,0x12,0x3a,0x7e,0x02,0x29,0x54,0x22,0x12,0x0e,0x1e,0x30,0xe0,0x03,0x02,0x2a,0xd2,0xef,0xc4,0x54,0x0f,0x30,0xe0,0x03,0x02,0x2a,0xd2,0xa3,0x12,0x0e,0x17,0x20,0xe0,0x03,0x02,0x2a,0xd2,0x90,0x40,0xca,0xe0,0xff,0x70,0x1a,0x90,0x40,0x07,0xe0,0xb4,0x80,0x11,0xa3,0xe0,0x54,0x7f,0xfe,0xbe,0x40,0x09,0x90,0x40,0xca,0x74,0x01,0xf0,0x02,0x2a,0xd7,0x80,0x77,0xef,0xb4,0x01,0x16,0x90,0x40,0x07,0xe0,0xb4,0x80,0x05,0x12,0x10,0x63,0x60,0x08,0x90,0x40,0xca,0x74,0x02,0xf0,0x80,0x6b,0x80,0x5d,0x90,0x40,0xca,0xe0,0xff,0xb4,0x02,0x19,0x90,0x40,0x07,0xe0,0xb4,0x80,0x10,0xa3,0xe0,0x54,0x7f,0xfe,0xbe,0x40,0x08,0x90,0x40,0xca,0x74,0x03,0xf0,0x80,0x4a,0x80,0x3c,0xef,0xb4,0x03,0x19,0x90,0x40,0x07,0xe0,0xb4,0x80,0x10,0xa3,0xe0,0x54,0x7f,0xff,0xbf,0x40,0x08,0x90,0x40,0xca,0x74,0x04,0xf0,0x80,0x2d,0x80,0x1f,0x90,0x40,0xca,0xe0,0x64,0x04,0x70,0x23,0x90,0x40,0x07,0xe0,0xb4,0x80,0x05,0x12,0x10,0x63,0x60,0x0b,0x90,0x40,0xc9,0xe0,0x04,0xf0,0xe4,0xa3,0xf0,0x80,0x0c,0xe4,0x90,0x40,0xca,0xf0,0x80,0x01,0xe4,0x90,0x40,0xc9,0xf0,0x90,0x40,0xc9,0xe0,0xb4,0x21,0x02,0x14,0xf0,0x90,0x40,0xc9,0xe0,0xd3,0x94,0x10,0x40,0x04,0x7f,0x01,0x80,0x02,0x7f,0x00,0x22,0x7f,0xec,0x12,0x2b,0xa4,0x90,0x40,0x40,0xf0,0xa3,0xef,0xf0,0x7f,0xe0,0x12,0x2b,0xa4,0x90,0x40,0x14,0xf0,0xa3,0xef,0xf0,0x7f,0xe2,0x12,0x2b,0xad,0x90,0x40,0x16,0xf0,0xa3,0xef,0xf0,0x7f,0xe4,0x12,0x2b,0xad,0x90,0x40,0x18,0xf0,0xa3,0xef,0xf0,0x7f,0xe6,0x12,0x2b,0xb6,0x90,0x40,0x1a,0xf0,0xa3,0xef,0xf0,0x7f,0xe8,0x12,0x2b,0xb6,0x90,0x40,0x1c,0xf0,0xa3,0xef,0xf0,0x7f,0xea,0x7e,0x29,0x12,0x39,0x1e,0xee,0x54,0x3f,0x90,0x40,0x1e,0xf0,0xa3,0xef,0xf0,0x7f,0xde,0x7e,0x29,0x12,0x39,0x1e,0x90,0x40,0x30,0xee,0xf0,0xa3,0xef,0xf0,0x7f,0xee,0x7e,0x29,0x12,0x39,0x1e,0x90,0x40,0x42,0xee,0xf0,0xa3,0xef,0xf0,0x7f,0xd6,0x7e,0x29,0x12,0x39,0x1e,0x90,0x40,0x3a,0xee,0xf0,0xa3,0xef,0xf0,0x7f,0xf8,0x7e,0x29,0x12,0x39,0x1e,0x90,0x40,0x44,0xee,0xf0,0xa3,0xef,0xf0,0x7f,0xd8,0x7e,0x26,0x12,0x39,0x1e,0x90,0x40,0x20,0xee,0xf0,0xa3,0xef,0xf0,0x7f,0xda,0x7e,0x26,0x12,0x39,0x1e,0x90,0x40,0x22,0xee,0xf0,0xa3,0xef,0xf0,0x22,0x7e,0x29,0x12,0x39,0x1e,0xee,0x54,0x3f,0x22,0x7e,0x29,0x12,0x39,0x1e,0xee,0x54,0x3f,0x22,0x7e,0x29,0x12,0x39,0x1e,0xee,0x54,0x3f,0x22,0x90,0x40,0x05,0xe5,0x0e,0xf0,0x90,0x40,0x00,0xee,0xf0,0xa3,0xef,0xf0,0xa3,0xec,0xf0,0xa3,0xed,0xf0,0xa3,0xeb,0xf0,0xe4,0xff,0xfe,0x74,0x78,0x2f,0xf5,0x82,0x74,0x40,0x3e,0xf5,0x83,0xe4,0xf0,0x74,0x74,0x2f,0xf5,0x82,0x74,0x40,0x3e,0xf5,0x83,0xe4,0xf0,0x74,0x70,0x2f,0xf5,0x82,0x74,0x40,0x3e,0xf5,0x83,0xe4,0xf0,0x74,0x6c,0x2f,0xf5,0x82,0x74,0x40,0x3e,0xf5,0x83,0xe4,0xf0,0x74,0x68,0x2f,0xf5,0x82,0x74,0x40,0x3e,0xf5,0x83,0xe4,0xf0,0x74,0x81,0x2f,0xf5,0x82,0x74,0x40,0x3e,0xf5,0x83,0xe4,0xf0,0x74,0x7d,0x2f,0xf5,0x82,0x74,0x40,0x3e,0xf5,0x83,0xe4,0xf0,0x74,0x8d,0x2f,0xf5,0x82,0x74,0x40,0x3e,0xf5,0x83,0xe4,0xf0,0x74,0x89,0x2f,0xf5,0x82,0x74,0x40,0x3e,0xf5,0x83,0xe4,0xf0,0x74,0x85,0x2f,0xf5,0x82,0x74,0x40,0x3e,0xf5,0x83,0xe4,0xf0,0x0f,0xbf,0x00,0x01,0x0e,0xef,0x64,0x04,0x4e,0x60,0x03,0x02,0x2b,0xd9,0xe4,0x90,0x40,0x7c,0xf0,0x90,0x40,0x92,0xf0,0x90,0x40,0x91,0xf0,0x90,0x40,0x48,0xf0,0xa3,0xf0,0x7d,0x42,0x7f,0x44,0x7e,0x2c,0x02,0x3b,0xaa,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0x30,0x98,0x74,0x85,0x99,0x18,0xc2,0x98,0x75,0x1a,0x02,0x90,0x41,0xad,0xe0,0xff,0xc3,0x94,0x11,0x50,0x0d,0x74,0x9c,0x2f,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe5,0x18,0xf0,0x90,0x41,
152 0x9c,0xe0,0xc4,0x13,0x54,0x07,0x64,0x07,0x70,0x2e,0x90,0x41,0xad,0xe0,0xff,0x70,0x05,0xe0,0x04,0xf0,0x80,0x3d,0x90,0x41,0x9d,0xe0,0xfe,0xef,0xc3,0x9e,0x50,0x06,0x90,0x41,0xad,0xe0,0x04,0xf0,0x90,0x41,0x9d,0xe0,0x12,0x3b,0x6c,0x40,0x24,0x12,0x38,0x3d,0x50,0x18,0xd2,0x01,0x80,0x14,0x12,0x3b,0x64,0x50,0x03,0xe0,0x04,0xf0,0x12,0x3b,0x64,0x40,0x0e,0x12,0x38,0x3d,0x50,0x02,0xd2,0x01,0x90,0x41,0xad,0xe4,0xf0,0xf5,0x1a,0x30,0x99,0x05,0xc2,0x99,0x75,0x19,0x01,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,0xf0,0xd0,0xe0,0x32,0x7d,0xff,0x7f,0x4f,0x7e,0x29,0x12,0x3b,0xaa,0x12,0x30,0xa2,0x7d,0xc1,0x7f,0x02,0x7e,0x29,0x12,0x3b,0xaa,0x7d,0x41,0x7f,0x02,0x7e,0x29,0x12,0x3b,0xaa,0x7f,0x44,0x7e,0x2c,0x12,0x00,0x0e,0x90,0x40,0x4d,0xef,0xf0,0x12,0x37,0x24,0xef,0x60,0x50,0x12,0x28,0x52,0x90,0x40,0x9b,0xe0,0x60,0x03,0x12,0x2a,0xf0,0x90,0x40,0x52,0xe0,0xff,0x7e,0x00,0x12,0x11,0x15,0x12,0x1e,0x89,0x12,0x2f,0x96,0x12,0x1b,0x18,0x12,0x0e,0x1e,0x20,0xe0,0x07,0xef,0xc4,0x54,0x0f,0x30,0xe0,0x05,0x12,0x1f,0xfe,0x80,0x09,0x7d,0x18,0x7f,0x2e,0x7e,0x2c,0x12,0x3b,0xaa,0x12,0x05,0x52,0x90,0x40,0x50,0xef,0xf0,0x12,0x09,0xda,0x12,0x31,0x1b,0x12,0x22,0xc3,0x12,0x00,0x2e,0x80,0x0a,0x90,0x40,0x06,0xe0,0xb4,0x04,0x03,0x12,0x33,0x42,0x12,0x3b,0xa1,0x90,0x40,0x9b,0xe0,0x60,0x08,0x90,0x40,0x50,0xe0,0xff,0x12,0x24,0x08,0x12,0x30,0x22,0x7d,0xfe,0x7f,0x4f,0x7e,0x29,0x02,0x3b,0xaa,0x90,0x10,0x18,0xe0,0x44,0x80,0xf0,0x78,0x7f,0xe4,0xf6,0xd8,0xfd,0x75,0x36,0x4e,0x75,0x37,0x00,0x75,0x81,0x3c,0x02,0x2e,0x2d,0x02,0x35,0x32,0xe4,0x93,0xa3,0xf8,0xe4,0x93,0xa3,0x40,0x03,0xf6,0x80,0x01,0xf2,0x08,0xdf,0xf4,0x80,0x29,0xe4,0x93,0xa3,0xf8,0x54,0x07,0x24,0x0c,0xc8,0xc3,0x33,0xc4,0x54,0x0f,0x44,0x20,0xc8,0x83,0x40,0x04,0xf4,0x56,0x80,0x01,0x46,0xf6,0xdf,0xe4,0x80,0x0b,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x90,0x25,0x2a,0xe4,0x7e,0x01,0x93,0x60,0xbc,0xa3,0xff,0x54,0x3f,0x30,0xe5,0x09,0x54,0x1f,0xfe,0xe4,0x93,0xa3,0x60,0x01,0x0e,0xcf,0x54,0xc0,0x25,0xe0,0x60,0xa8,0x40,0xb8,0xe4,0x93,0xa3,0xfa,0xe4,0x93,0xa3,0xf8,0xe4,0x93,0xa3,0xc8,0xc5,0x82,0xc8,0xca,0xc5,0x83,0xca,0xf0,0xa3,0xc8,0xc5,0x82,0xc8,0xca,0xc5,0x83,0xca,0xdf,0xe9,0xde,0xe7,0x80,0xbe,0x90,0x40,0xa8,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x40,0xab,0xe0,0x2f,0xfd,0x90,0x40,0xaa,0xe0,0x3e,0xfc,0x90,0x40,0xac,0xe0,0xfa,0xa3,0xe0,0xfb,0x25,0xe0,0xff,0xea,0x33,0xfe,0xd3,0xef,0x9d,0xee,0x9c,0x40,0x0b,0x79,0x01,0x90,0x40,0x4f,0x74,0x01,0xf0,0x02,0x2f,0x06,0x12,0x0e,0x14,0x30,0xe0,0x22,0x90,0x40,0xab,0xe0,0x2b,0xff,0x90,0x40,0xaa,0xe0,0x3a,0x90,0x40,0x5b,0x12,0x0e,0xba,0x90,0x40,0x5a,0x12,0x0e,0x6e,0xef,0x9b,0xee,0x9a,0x40,0x05,0x79,0x04,0x02,0x2f,0x06,0x12,0x0e,0x0c,0x30,0xe0,0x13,0x12,0x0e,0xa4,0x90,0x40,0x57,0x12,0x0e,0x6e,0xef,0x9b,0xee,0x9a,0x40,0x04,0x79,0x04,0x80,0x1f,0x12,0x0e,0x0c,0x30,0xe0,0x17,0x12,0x0e,0xa4,0xaa,0x06,0xab,0x07,0x90,0x40,0x58,0x12,0x0e,0x72,0xef,0x9b,0xee,0x9a,0x40,0x04,0x79,0x03,0x80,0x02,0x79,0x02,0xaf,0x01,0x22,0x7f,0x02,0x75,0x14,0x04,0x75,0x15,0x0a,0x12,0x10,0x49,0x40,0x05,0xed,0x9e,0xfe,0x80,0x03,0x12,0x10,0x56,0xee,0xc3,0x94,0x10,0x40,0x14,0x90,0x40,0xeb,0xe0,0x94,0xff,0x50,0x03,0xe0,0x04,0xf0,0x90,0x40,0xeb,0xe0,0xc3,0x94,0x03,0x80,0x0c,0x90,0x40,0xeb,0xe0,0xd3,0x94,0x00,0x40,0x03,0xe0,0x14,0xf0,0x12,0x10,0x49,0x40,0x05,0xed,0x9e,0xfe,0x80,0x03,0x12,0x10,0x56,0xee,0xc3,0x94,0x05,0x50,0x0e,0x90,0x40,0xec,0xe0,0xc3,0x94,0xff,0x50,0x11,0xe0,0x04,0xf0,0x80,0x0c,0x90,0x40,0xec,0xe0,0xd3,0x94,0x00,0x40,0x03,0xe0,0x14,0xf0,0x90,0x40,0x14,0xe0,0xfc,0xa3,0xe0,0xfd,0x4c,0x60,0x17,0xd3,0xed,0x94,0xb8,0xec,0x94,0x0b,0x40,0x0e,0x90,0x40,0xae,0x12,0x0e,0x77,0x12,0x10,0xca,0x40,0x03,0x7f,0x01,0x22,0x7f,0x00,0x22,0x90,0x40,0x9c,0xe0,0x60,0x0d,0x7d,0x08,0x7f,0x16,0x7e,0x29,0x12,0x3b,0xaa,0x7d,0x08,0x80,0x2f,0x90,0x40,0x9d,0xe0,0x60,0x30,0x7f,0xd3,0x7e,0x29,0x12,0x00,0x0e,0x90,0x40,0x36,0xe4,0xf0,0xa3,0xef,0xf0,0x7f,0xd5,0x7e,0x29,0x12,0x00,0x0e,0x90,0x40,0x38,0xe4,0xf0,0xa3,0xef,0xf0,0x7d,0x60,0x7f,0x16,0x7e,0x29,0x12,0x3b,0xaa,0x7d,0x60,0x7f,0x17,0x7e,0x29,0x02,0x3b,0xaa,0x90,0x40,0x9b,0xe0,0x60,0x3c,0x90,0x40,0x32,0xe0,0xff,0xa3,0xe0,0x90,0x40,
153 0x9e,0xcf,0xf0,0xa3,0xef,0xf0,0x90,0x40,0x34,0xe0,0xff,0xa3,0xe0,0x90,0x40,0xa0,0xcf,0xf0,0xa3,0xef,0xf0,0x7f,0xd2,0x7e,0x29,0x12,0x39,0x1e,0x90,0x40,0x32,0xee,0xf0,0xa3,0xef,0xf0,0x7f,0xd4,0x7e,0x29,0x12,0x39,0x1e,0x90,0x40,0x34,0xee,0xf0,0xa3,0xef,0xf0,0x22,0x90,0x40,0x66,0xe0,0xff,0x60,0x26,0x12,0x10,0xd5,0x70,0x21,0x90,0x40,0x9b,0xe0,0x70,0x06,0x90,0x41,0x0e,0xe0,0x60,0x67,0xef,0xb4,0x01,0x05,0x12,0x32,0xd9,0x80,0x58,0x90,0x40,0x66,0xe0,0xb4,0x02,0x03,0x12,0x32,0x00,0x80,0x4c,0x90,0x40,0x9b,0xe0,0x70,0x06,0x90,0x41,0x0e,0xe0,0x70,0x2a,0xe4,0xfd,0x7f,0x21,0x7e,0x26,0x12,0x3b,0xaa,0xe4,0xfd,0x7f,0x23,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0x1d,0x7f,0x0f,0x7e,0x29,0x12,0x3b,0xaa,0x7d,0xf7,0x7f,0x10,0x7e,0x29,0x12,0x3b,0xaa,0xe4,0x90,0x41,0x0e,0xf0,0x22,0x90,0x40,0x66,0xe0,0xb4,0x01,0x05,0x12,0x32,0xd9,0x80,0x0a,0x90,0x40,0x66,0xe0,0xb4,0x02,0x03,0x12,0x32,0x00,0x90,0x41,0x0e,0x74,0x01,0xf0,0x22,0x7f,0xcf,0x7e,0x29,0x12,0x00,0x0e,0xad,0x07,0xed,0xa2,0xe6,0x12,0x10,0xdc,0xff,0x90,0x40,0x0c,0xe0,0x54,0xf7,0x4f,0xff,0xf0,0xed,0xa2,0xe5,0xe4,0x33,0x54,0x01,0xc4,0x54,0xf0,0xfe,0xef,0x54,0xef,0x4e,0xff,0xf0,0xed,0xa2,0xe4,0xe4,0x33,0x54,0x01,0xc4,0x33,0x54,0xe0,0xfe,0xef,0x54,0xdf,0x4e,0xf0,0xed,0xc3,0x13,0x54,0x07,0xff,0xa3,0xe0,0x54,0xf8,0x4f,0xff,0xf0,0xed,0x13,0x12,0x10,0xdc,0xfe,0xef,0x54,0xf7,0x4e,0xf0,0x7f,0xce,0x7e,0x29,0x12,0x00,0x0e,0xad,0x07,0xed,0x33,0xe4,0x33,0x54,0x01,0xff,0x90,0x40,0x0c,0xe0,0x54,0xfe,0x4f,0xff,0xf0,0xed,0xc4,0x54,0x03,0x25,0xe0,0xfe,0xef,0x54,0xf9,0x4e,0xf0,0x22,0x90,0x40,0x04,0xe0,0x64,0x3c,0x60,0x10,0x12,0x0e,0x1e,0x20,0xe0,0x0a,0xef,0xc4,0x54,0x0f,0x20,0xe0,0x03,0x12,0x26,0x43,0x12,0x37,0xd6,0xef,0x70,0x0d,0x12,0x0e,0x1e,0x20,0xe0,0x32,0xef,0xc4,0x54,0x0f,0x20,0xe0,0x2b,0xd3,0x90,0x40,0x96,0xe0,0x94,0x20,0x90,0x40,0x95,0xe0,0x94,0x4e,0x40,0x12,0x7d,0x0a,0x7f,0x98,0x7e,0x29,0x12,0x3b,0xaa,0x90,0x40,0x48,0xe0,0x44,0x10,0xf0,0x80,0x06,0x12,0x31,0x81,0x54,0xef,0xf0,0x7d,0xc6,0x80,0x08,0x12,0x31,0x81,0x54,0xef,0xf0,0x7d,0x06,0x7f,0x3f,0x7e,0x29,0x12,0x3b,0xaa,0x22,0x7d,0x4a,0x7f,0x98,0x7e,0x29,0x12,0x3b,0xaa,0x90,0x40,0x48,0xe0,0x22,0x8f,0x11,0x90,0x40,0x60,0xe0,0x65,0x11,0x60,0x49,0xe5,0x11,0x24,0xfe,0x60,0x1e,0x14,0x60,0x25,0x80,0x00,0x7d,0x20,0x7f,0x91,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0xf3,0x7f,0x93,0x7e,0x26,0x12,0x3b,0xaa,0x12,0x31,0xf6,0x7d,0x98,0x80,0x18,0x12,0x31,0xe3,0x12,0x31,0xf6,0x7d,0x18,0x80,0x0e,0x12,0x31,0xe3,0x7d,0x60,0x7f,0x98,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0x18,0x7f,0x9b,0x7e,0x26,0x12,0x3b,0xaa,0x90,0x40,0x60,0xe5,0x11,0xf0,0x22,0x7d,0x18,0x7f,0x91,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0xf2,0x7f,0x93,0x7e,0x26,0x12,0x3b,0xaa,0x22,0x7d,0x40,0x7f,0x98,0x7e,0x26,0x12,0x3b,0xaa,0x22,0x7d,0x84,0x7f,0x25,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0xff,0x7f,0x21,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0x1c,0x7f,0x0f,0x7e,0x29,0x12,0x3b,0xaa,0x12,0x0f,0x0a,0x60,0x14,0x14,0x60,0x11,0x14,0x60,0x1b,0x14,0x60,0x28,0x24,0x04,0x70,0x36,0x12,0x32,0x64,0x7d,0x0c,0x80,0x1f,0x7d,0x03,0x7f,0x11,0x7e,0x29,0x12,0x3b,0xaa,0x7d,0x04,0x80,0x12,0x12,0x32,0x64,0x7d,0x0c,0x7f,0x23,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0xff,0x80,0x0b,0x7d,0x04,0x7f,0x23,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0xf7,0x7f,0x10,0x7e,0x29,0x12,0x3b,0xaa,0x22,0xe4,0xfd,0x7f,0x11,0x7e,0x29,0x12,0x3b,0xaa,0x22,0x12,0x0e,0x1e,0x20,0xe0,0x50,0xef,0xc4,0x54,0x0f,0x20,0xe0,0x49,0xa3,0x12,0x0e,0x17,0x30,0xe0,0x42,0x90,0x40,0xc8,0xe0,0xff,0x30,0xe0,0x15,0x90,0x40,0x07,0xe0,0xb4,0x80,0x05,0x12,0x10,0x63,0x60,0x2e,0xef,0xf4,0x90,0x40,0xc8,0x60,0x20,0x80,0x16,0x90,0x40,0x07,0xe0,0xb4,0x80,0x1c,0xa3,0xe0,0x54,0x7f,0xff,0xbf,0x40,0x14,0x90,0x40,0xc8,0xe0,0xf4,0x60,0x05,0xe0,0x04,0xf0,0x80,0x0f,0x90,0x40,0xc8,0xe0,0x14,0xf0,0x80,0x07,0x80,0x00,0xe4,0x90,0x40,0xc8,0xf0,0x90,0x40,0xc8,0xe0,0xd3,0x94,0x10,0x40,0x04,0x7f,0x01,0x80,0x02,0x7f,0x00,0x22,0x7d,0x84,0x7f,0x25,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0xff,0x7f,0x21,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0x1c,0x7f,0x0f,0x7e,0x29,0x12,0x3b,0xaa,0x12,0x0f,0x0a,0x60,0x11,0x14,0x60,0x12,0x14,0x60,0x1a,0x14,0x60,0x2d,0x24,0x04,0x70,0x3b,0x7d,0x02,0x80,0x06,0x7d,0x03,0x80,0x02,0x7d,0x04,0x7f,0x11,0x7e,0x29,0x12,0x3b,0xaa,0x80,0x16,0xe4,0xfd,0x7f,0x11,0x7e,0x29,0x12,
154 0x3b,0xaa,0x7d,0x0c,0x7f,0x23,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0xff,0x80,0x0b,0x7d,0x04,0x7f,0x23,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0xf7,0x7f,0x10,0x7e,0x29,0x12,0x3b,0xaa,0x22,0x7f,0xc6,0x7e,0x29,0x12,0x00,0x0e,0x12,0x0e,0x0c,0x30,0xe0,0x40,0xa3,0x12,0x10,0x6a,0x20,0xe0,0x07,0xee,0x54,0x07,0x64,0x01,0x60,0x0e,0xed,0x30,0xe0,0x1a,0x90,0x40,0x0d,0xe0,0x54,0x07,0xfe,0xbe,0x03,0x10,0xef,0x54,0x07,0x24,0x02,0x90,0x40,0xfc,0xf0,0x75,0xf0,0x05,0x84,0xe5,0xf0,0xf0,0x90,0x40,0xfc,0xe0,0xc4,0x33,0x54,0xe0,0xfd,0x7f,0x25,0x7e,0x26,0x12,0x3b,0xaa,0x7d,0x80,0x80,0x02,0xe4,0xfd,0x7f,0x23,0x7e,0x26,0x12,0x3b,0xaa,0x22,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0x90,0x2b,0x10,0xe0,0xf5,0x0f,0x90,0x2b,0x08,0xf0,0xe4,0xf0,0xe5,0x0f,0x13,0x50,0x03,0x12,0x3b,0x53,0xe5,0x0f,0xa2,0xe1,0x50,0x03,0x12,0x39,0x62,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,0xf0,0xd0,0xe0,0x32,0xc2,0x88,0xd2,0xa8,0xc2,0x8a,0xd2,0xaa,0xe4,0x7b,0xe8,0x7a,0x03,0xf9,0xf8,0xaf,0x1e,0xae,0x1d,0xad,0x1c,0xac,0x1b,0x12,0x1d,0xe7,0xef,0x24,0x06,0xff,0xe4,0x3e,0xfe,0xe4,0x3d,0xfd,0xe4,0x3c,0xfc,0xe4,0x7b,0x0c,0xfa,0xf9,0xf8,0x12,0x1d,0xe7,0xc3,0xe4,0x9f,0xf5,0x2c,0xe4,0x9e,0xf5,0x2b,0xe5,0x89,0x54,0xf0,0x44,0x01,0xf5,0x89,0xe5,0x2b,0xf5,0x8c,0x85,0x2c,0x8a,0xd2,0x8c,0xd2,0xa9,0xd2,0xaf,0xc2,0x07,0xc2,0x08,0x22,0xc0,0xe0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0xe5,0x2e,0xb4,0xff,0x0d,0xe5,0x2d,0xb4,0xff,0x08,0x75,0x2d,0x00,0x75,0x2e,0x00,0x80,0x08,0x05,0x2e,0xe5,0x2e,0x70,0x02,0x05,0x2d,0xe5,0x30,0xb4,0xd0,0x13,0xe5,0x2f,0xb4,0x07,0x0e,0x75,0x2f,0x00,0x75,0x30,0x00,0x90,0x41,0xae,0x74,0x01,0xf0,0x80,0x08,0x05,0x30,0xe5,0x30,0x70,0x02,0x05,0x2f,0xe5,0x2b,0xf5,0x8c,0x85,0x2c,0x8a,0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,0xe0,0x32,0xe4,0xf5,0x19,0x7f,0x02,0xfe,0xfd,0xfc,0xab,0x1e,0xaa,0x1d,0xa9,0x1c,0xa8,0x1b,0x12,0x1d,0x5c,0xe4,0x7b,0x80,0x7a,0x25,0xf9,0xf8,0x12,0x1d,0xe7,0xe4,0x7b,0x40,0xfa,0xf9,0xf8,0x12,0x1d,0xe7,0xc3,0xe4,0x9f,0xff,0x74,0x04,0x9e,0xad,0x07,0x75,0x98,0x50,0x43,0x87,0x80,0xf5,0xba,0x8d,0xaa,0x43,0xd8,0x80,0xc2,0x99,0xd2,0xac,0xd2,0xaf,0xc2,0x01,0xc2,0x02,0xc2,0x03,0xe4,0xf5,0x1a,0x90,0x41,0xad,0xf0,0x22,0xe4,0xc2,0x04,0x78,0x3c,0x76,0x14,0x60,0x03,0x12,0x38,0x6f,0x12,0x39,0xa6,0x7f,0x06,0x7e,0x21,0x12,0x39,0x1e,0xc0,0x06,0xc0,0x07,0x7f,0x08,0x7e,0x21,0x12,0x39,0x1e,0xc0,0x06,0xc0,0x07,0x7f,0x47,0x7e,0x2c,0x12,0x00,0x0e,0xab,0x07,0x75,0x0e,0x21,0xd0,0x05,0xd0,0x04,0xd0,0x07,0xd0,0x06,0x12,0x2b,0xbf,0x7f,0x02,0x12,0x3b,0x41,0x12,0x00,0x06,0x7b,0x01,0x7d,0x01,0x7f,0x49,0x7e,0x1e,0x02,0x39,0xc7,0x75,0x08,0x01,0xc2,0x00,0x7f,0x48,0x7e,0x2c,0x12,0x00,0x0e,0x12,0x37,0x64,0x7f,0x01,0x12,0x38,0xa0,0x12,0x34,0x93,0x12,0x33,0xee,0x12,0x34,0xe3,0x7e,0x3a,0x7f,0xf9,0x12,0x3a,0xaa,0xa2,0x03,0xe4,0x33,0xff,0x12,0x3a,0x1b,0x90,0x41,0xae,0xe0,0x60,0x02,0xe4,0xf0,0x12,0x00,0x29,0x12,0x3b,0x8d,0xe5,0x08,0x60,0xe6,0x7b,0x0f,0x7d,0x01,0x7f,0x45,0x7e,0x2c,0x12,0x3a,0x94,0xe4,0xf5,0x08,0x80,0xd6,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0x90,0x2b,0x28,0xe0,0xff,0x90,0x2b,0x20,0xf0,0xe4,0xf0,0xef,0x13,0x50,0x03,0x12,0x38,0x0a,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,0xf0,0xd0,0xe0,0x32,0x90,0x40,0x06,0xe0,0xfe,0xb4,0x01,0x03,0x7f,0x03,0x22,0xee,0xb4,0x03,0x03,0x7f,0x0a,0x22,0x90,0x40,0x06,0xe0,0xb4,0x02,0x03,0x7f,0x07,0x22,0x12,0x3a,0x67,0x8f,0x13,0x7f,0x43,0x7e,0x2c,0x12,0x00,0x0e,0xef,0x54,0x0f,0xf5,0x14,0x7f,0x43,0x7e,0x2c,0x12,0x00,0x0e,0xef,0x54,0xf0,0xc4,0x54,0x0f,0xff,0xe5,0x13,0xb4,0x01,0x05,0x85,0x14,0x12,0x80,0x02,0x8f,0x12,0xaf,0x12,0x22,0x8e,0x09,0x8f,0x0a,0xe5,0x0a,0x24,0x01,0x12,0x37,0xb3,0xfb,0x7a,0x01,0xf9,0xf8,0x12,0x1d,0x5c,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0xe5,0x0a,0x24,0x02,0x12,0x37,0xb3,0xfb,0xfa,0x79,0x01,0xf8,0x12,0x1d,0x5c,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0x12,0x1d,0x4f,0xa8,0x04,0xa9,0x05,0xaa,0x06,0xab,0x07,0xaf,
155 0x0a,0xae,0x09,0x12,0x37,0xb8,0x12,0x1d,0x4f,0x22,0x8f,0x11,0xe5,0x11,0x60,0x20,0x90,0x40,0x4e,0x74,0x01,0x12,0x36,0x95,0xe5,0x11,0x25,0xe0,0x25,0xe0,0x24,0x1c,0xfd,0x7b,0xfe,0x7f,0x87,0x7e,0x29,0x12,0x3a,0x94,0x7b,0x03,0x7d,0x03,0x80,0x0b,0xe4,0x90,0x40,0x4e,0x12,0x36,0x95,0x7b,0x03,0xe4,0xfd,0x7f,0x9b,0x7e,0x29,0x12,0x3a,0x94,0x22,0xf0,0x7b,0x02,0xfd,0x7f,0x81,0x7e,0x29,0x12,0x39,0xe5,0x22,0x12,0x0e,0xd4,0x30,0xe0,0x04,0x7d,0x09,0x80,0x02,0x7d,0x07,0x74,0x01,0x7e,0x00,0xa8,0x05,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xd3,0x90,0x40,0x31,0xe0,0x9f,0x90,0x40,0x30,0xe0,0x9e,0x40,0x13,0xe0,0xfe,0xa3,0xe0,0xa8,0x05,0x08,0x80,0x05,0xce,0xc3,0x13,0xce,0x13,0xd8,0xf9,0xfc,0x80,0x02,0xe4,0xfc,0xaf,0x04,0x22,0x8e,0x09,0x8f,0x0a,0xad,0x0e,0x12,0x3b,0xaa,0xe5,0x0a,0x24,0x01,0xff,0xe4,0x35,0x09,0xfe,0xc0,0x06,0xc0,0x07,0xe4,0xfb,0x7a,0x01,0xf9,0x12,0x37,0xc0,0xd0,0x07,0xd0,0x06,0x12,0x3b,0xaa,0xe5,0x0a,0x24,0x02,0xff,0xe4,0x35,0x09,0xfe,0xc0,0x06,0xc0,0x07,0xe4,0xfb,0xfa,0x79,0x01,0x12,0x37,0xc0,0xd0,0x07,0xd0,0x06,0x02,0x3b,0xaa,0x90,0x40,0x4d,0xe0,0x54,0x0f,0xf5,0x11,0x90,0x40,0x06,0xe0,0x65,0x11,0x60,0x16,0xaf,0x11,0x12,0x3b,0x1d,0x90,0x40,0x06,0xe0,0x64,0x04,0x60,0x09,0xe4,0xfd,0x7f,0x23,0x7e,0x26,0x12,0x3b,0xaa,0xe5,0x11,0x70,0x02,0x80,0x0a,0x12,0x35,0xca,0x90,0x40,0x52,0xef,0xf0,0x70,0x07,0xff,0x12,0x3b,0x1d,0x7f,0x00,0x22,0x7f,0x01,0x22,0x8f,0x09,0xe5,0x09,0xd3,0x94,0x04,0x40,0x05,0xe4,0xf5,0x0a,0x80,0x03,0x75,0x0a,0x01,0xe5,0x0a,0x60,0x17,0x12,0x3a,0x01,0x12,0x1d,0x5c,0x8f,0x1e,0x8e,0x1d,0x8d,0x1c,0x8c,0x1b,0x12,0x3a,0x01,0x12,0x1d,0xe7,0x8f,0x31,0x22,0x75,0x1e,0x00,0x75,0x1d,0x1b,0x75,0x1c,0xb7,0x75,0x1b,0x00,0x75,0x31,0x01,0x22,0xf8,0xaf,0x0e,0xae,0x0d,0xad,0x0c,0xac,0x0b,0x12,0x1d,0xe7,0x85,0x0a,0x82,0x85,0x09,0x83,0x22,0xff,0xe4,0x35,0x09,0xfe,0x12,0x00,0x0e,0xe4,0xfc,0xfd,0xfe,0x22,0xf8,0xaf,0x0e,0xae,0x0d,0xad,0x0c,0xac,0x0b,0x12,0x1d,0xe7,0xad,0x07,0x22,0x8f,0x82,0x8e,0x83,0xe0,0xff,0x22,0x7f,0x40,0x7e,0x24,0x12,0x00,0x0e,0xef,0x54,0x11,0x60,0x25,0x7f,0x6c,0x7e,0x24,0x12,0x00,0x0e,0xef,0x54,0x1f,0x60,0x19,0x7b,0x01,0x7d,0x01,0x74,0x26,0xff,0xfe,0x12,0x39,0xe5,0x7b,0x03,0x7d,0x03,0x7f,0x7d,0x7e,0x26,0x12,0x3b,0x0b,0x7f,0x01,0x22,0x7f,0x00,0x22,0x90,0x24,0x0d,0xe0,0xf5,0x10,0x90,0x24,0x05,0xf0,0xe4,0xf0,0xe5,0x10,0x13,0x50,0x02,0xd2,0x04,0x90,0x24,0x0e,0xe0,0xf5,0x10,0xa2,0xe3,0x50,0x02,0xd2,0x05,0xe5,0x10,0xa2,0xe1,0x50,0x05,0x12,0x00,0x26,0xc2,0x05,0x90,0x24,0x0a,0xe5,0x10,0xf0,0xe4,0xf0,0x22,0x90,0x41,0x9c,0xe0,0xc4,0x13,0x54,0x07,0xfd,0xbd,0x07,0x05,0xa3,0xe0,0xff,0x80,0x02,0xaf,0x05,0xe4,0xfe,0xfd,0xed,0xc3,0x9f,0x50,0x10,0x74,0x9c,0x2d,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe0,0x2e,0xfe,0x0d,0x80,0xeb,0xbe,0xff,0x02,0xd3,0x22,0xc3,0x22,0xe4,0xff,0xfe,0x12,0x36,0x14,0x12,0x3b,0x8d,0xe4,0xf5,0x0e,0xf5,0x0d,0xf5,0x0c,0xf5,0x0b,0x7f,0xe0,0x7e,0x20,0x12,0x36,0xe3,0xe4,0xf5,0x0e,0xf5,0x0d,0xf5,0x0c,0xf5,0x0b,0x7f,0xe0,0x7e,0x20,0x12,0x39,0x40,0xe4,0xff,0x12,0x3a,0xe6,0x02,0x3b,0x98,0x8f,0x09,0xe5,0x09,0xc3,0x94,0x08,0x40,0x05,0xe4,0xf5,0x0a,0x80,0x03,0x75,0x0a,0x01,0xe4,0xff,0x12,0x3b,0x82,0xe5,0x0a,0x60,0x15,0xe5,0x09,0x25,0xe0,0x25,0xe0,0xfd,0x7b,0x1c,0x7f,0x4c,0x7e,0x3c,0x12,0x3a,0x94,0x7f,0x01,0x12,0x3b,0x82,0x22,0x90,0x40,0xcb,0xe0,0xa3,0xf0,0x90,0x40,0xa7,0xe0,0x90,0x40,0xcb,0xf0,0x90,0x40,0xa7,0xef,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xbf,0xfe,0x06,0x12,0x10,0xfa,0xe4,0xa3,0xf0,0x22,0xc3,0x90,0x40,0x2f,0xe0,0x94,0x64,0x90,0x40,0x2e,0xe0,0x94,0x00,0x50,0x12,0x90,0x40,0x07,0xe0,0xb4,0x80,0x0b,0xa3,0xe0,0x54,0x7f,0xff,0xbf,0x40,0x03,0x7f,0x01,0x22,0x7f,0x00,0x22,0xad,0x07,0xac,0x06,0xed,0x24,0x01,0xff,0xe4,0x3c,0xfe,0x12,0x00,0x0e,0xef,0x7b,0x00,0xfa,0xaf,0x05,0xae,0x04,0x12,0x00,0x0e,0x7e,0x00,0xeb,0x2f,0xff,0xee,0x3a,0xfe,0x22,0x8e,0x09,0x8f,0x0a,0x12,0x37,0xac,0xe5,0x0e,0xf0,0xe4,0xfb,0x7a,0x01,0xf9,0x12,0x37,0xa0,0xa3,0xef,0xf0,0xe4,0xfb,0xfa,0x79,0x01,0x12,0x37,0xa0,0xa3,0xa3,0xef,0xf0,0x22,0x78,0x3b,0xe6,0xb4,0xff,0x04,0xe4,0xf6,0x80,0x03,0x78,0x3b,0x06,0xe5,0x33,0x45,0x32,0x60,0x08,0xe5,0x33,0x15,0x33,0x70,0x02,0x15,0x32,0x78,0x3c,0xe6,0x60,0x01,0x16,0x22,
156 0x08,0x00,0x00,0x04,0x00,0x00,0x9c,0x05,0x00,0x04,0x62,0x11,0xdc,0x12,0x00,0x04,0x16,0x07,0x00,0x00,0x02,0x00,0x32,0x01,0x1f,0x06,0x75,0x00,0xff,0xff,0xff,0xff,0x00,0x00,0x7f,0x3d,0x7e,0x1e,0x12,0x00,0x0e,0x90,0x41,0x9b,0xef,0xf0,0x70,0x02,0xf0,0x22,0x90,0x41,0x9b,0xe0,0xb4,0x01,0x04,0x74,0x01,0xf0,0x22,0xe4,0x90,0x41,0x9b,0xf0,0x22,0x8e,0x0b,0x8f,0x0c,0xac,0x05,0x12,0x00,0x0e,0xad,0x07,0xec,0x60,0x05,0xeb,0x42,0x05,0x80,0x04,0xeb,0xf4,0x52,0x05,0xaf,0x0c,0xae,0x0b,0x02,0x3b,0xaa,0x8e,0x15,0x8f,0x16,0x12,0x37,0xcf,0xed,0x60,0x05,0xeb,0x42,0x07,0x80,0x04,0xeb,0xf4,0x52,0x07,0x85,0x16,0x82,0x85,0x15,0x83,0xef,0xf0,0x22,0xe5,0x09,0x25,0xe0,0x25,0xe0,0x24,0xbf,0xf5,0x82,0xe4,0x34,0x3a,0xf5,0x83,0x12,0x1e,0x79,0xe4,0x7b,0xe8,0x7a,0x03,0xf9,0xf8,0x22,0x30,0x07,0x11,0xc2,0x07,0xe5,0x1a,0x60,0x08,0xd5,0x1a,0x05,0xe4,0x90,0x41,0xad,0xf0,0xef,0x70,0x05,0x30,0x08,0x02,0xc2,0x08,0x22,0xad,0x07,0xac,0x06,0x8d,0x82,0x8c,0x83,0xa3,0xe0,0xfe,0x8d,0x82,0x8c,0x83,0xe0,0x7c,0x00,0x24,0x00,0xff,0xec,0x3e,0xfe,0x22,0x8e,0x34,0x8f,0x35,0xab,0x05,0xaa,0x04,0x12,0x3b,0xaa,0xe5,0x35,0x24,0x01,0xff,0xe4,0x35,0x34,0xfe,0xad,0x02,0x02,0x3b,0xaa,0x12,0x0e,0xd4,0x30,0xe0,0x04,0x7f,0x03,0x80,0x0c,0x12,0x0f,0x26,0x30,0xe0,0x04,0x7f,0x02,0x80,0x02,0x7f,0x01,0x22,0x8f,0x99,0x30,0xaf,0x0b,0x30,0xac,0x08,0xe5,0x19,0x60,0xf6,0xe4,0xf5,0x19,0x22,0x30,0x99,0xef,0xc2,0x99,0x22,0x8e,0x12,0x8f,0x13,0x12,0x00,0x0e,0xeb,0xf4,0x5f,0xff,0xed,0x5b,0x4f,0xfd,0xaf,0x13,0xae,0x12,0x02,0x3b,0xaa,0x8f,0x82,0x8e,0x83,0x20,0x00,0x0d,0xe4,0x93,0xfe,0x60,0x08,0xaf,0x06,0x12,0x3a,0x7e,0xa3,0x80,0xf3,0x22,0x00,0x02,0xa3,0x00,0x00,0x02,0x32,0x80,0x00,0x01,0xe2,0x24,0x00,0x01,0xa5,0xe0,0x00,0x00,0xd2,0xf0,0xef,0x7b,0x08,0x60,0x04,0x7d,0x01,0x80,0x02,0xe4,0xfd,0x7f,0x4c,0x7e,0x30,0x12,0x39,0xc7,0x22,0xef,0x7b,0x02,0x60,0x04,0xe4,0xfd,0x80,0x02,0x7d,0x01,0x7f,0x06,0x7e,0x24,0x12,0x39,0xc7,0x22,0x0d,0x0a,0x45,0x6e,0x74,0x65,0x72,0x20,0x6d,0x61,0x69,0x6e,0x20,0x6c,0x6f,0x6f,0x70,0x00,0x8e,0x15,0x8f,0x16,0x12,0x37,0xcf,0xeb,0xf4,0xfe,0xef,0x5e,0xff,0xed,0x5b,0x4f,0xf0,0x22,0x90,0x40,0x06,0xef,0xf0,0x70,0x06,0x12,0x0f,0xf8,0x12,0x3b,0xaa,0x7f,0xff,0x02,0x38,0xd0,0x90,0x40,0x06,0xef,0xf0,0x70,0x06,0x12,0x0f,0xf8,0x12,0x3b,0xaa,0x7f,0xff,0x02,0x38,0xd0,0x8f,0x09,0x7b,0x0f,0xad,0x09,0x7f,0x44,0x7e,0x2c,0x12,0x3a,0x94,0xaf,0x09,0x02,0x3b,0x2f,0xd2,0x07,0x78,0x3a,0xe6,0xb4,0x3b,0x05,0xe4,0xf6,0xd2,0x08,0x22,0x78,0x3a,0x06,0x22,0x90,0x41,0x9c,0xe0,0xc4,0x13,0x54,0x07,0xff,0x90,0x41,0xad,0xe0,0xc3,0x9f,0x22,0xab,0x07,0xaa,0x06,0x8b,0x82,0x8a,0x83,0xed,0xf0,0xa3,0xec,0xf0,0x22,0xad,0x07,0x7b,0x20,0x7f,0x4c,0x7e,0x3c,0x02,0x39,0xc7,0xa2,0x00,0xe4,0x33,0xc2,0x00,0x24,0xff,0x92,0x00,0x22,0xaf,0x31,0xef,0x60,0x03,0x1f,0x80,0xfa,0x22,0x12,0x00,0x2a,0x12,0x21,0x6a,0x02,0x27,0x4c,0x8f,0x82,0x8e,0x83,0xed,0xf0,0x22,0x90,0x40,0x66,0xef,0xf0,0x22,
157 };
158
159 //------------------------------------------------------------------------------
160 /// Serial debug mode
161 /// @param MFC_SERIAL_DEBUG_CMD_e \b IN: command
162 /// @return TRUE/FALSE
163 //------------------------------------------------------------------------------
MDrv_MFC_SetSerialDebugMode(MFC_SERIAL_DEBUG_CMD_e cmd)164 BOOL MDrv_MFC_SetSerialDebugMode(MFC_SERIAL_DEBUG_CMD_e cmd)
165 {
166 U32 u32Addr;
167 U8 u8Data[5];
168 BOOL ret;
169
170 u32Addr = 0;
171
172 if (cmd == MFC_SerialDebugEnter)
173 {
174 u8Data[0] = 0x53;
175 u8Data[1] = 0x45;
176 u8Data[2] = 0x52;
177 u8Data[3] = 0x44;
178 u8Data[4] = 0x42;
179 #if(CODEBASE_SEL != CODEBASE_UTOPIA)
180 ret = MAdp_IIC_Write(MFC_IIC_CHANNEL_ID, MFC_IIC_SLAVE_ADDR, (U8*)&u32Addr, 0, u8Data, 5);
181 #else
182 ret = MDrv_MFC_IIC_Write(MFC_IIC_CHANNEL_ID, MFC_IIC_SLAVE_ADDR, (U8*)&u32Addr, 0, u8Data, 5);
183 #endif
184 if (!ret)
185 return FALSE;
186 }
187 else
188 {
189 u8Data[0] = cmd;
190 #if(CODEBASE_SEL != CODEBASE_UTOPIA)
191 ret = MAdp_IIC_Write(MFC_IIC_CHANNEL_ID, MFC_IIC_SLAVE_ADDR, (U8*)&u32Addr, 0, u8Data, 1);
192 #else
193 ret = MDrv_MFC_IIC_Write(MFC_IIC_CHANNEL_ID, MFC_IIC_SLAVE_ADDR, (U8*)&u32Addr, 0, u8Data, 1);
194 #endif
195 if (!ret)
196 return FALSE;
197 }
198 return TRUE;
199 }
200
201 static BOOL isI2cOpen=FALSE;
MDrv_MFC_SetSerialDebug(BOOL bOpen)202 void MDrv_MFC_SetSerialDebug(BOOL bOpen)
203 {
204 if(bOpen)
205 {
206 if(isI2cOpen==FALSE)
207 {
208 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
209 MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
210 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
211 isI2cOpen=TRUE;
212 }
213 }
214 else
215 {
216 if(isI2cOpen)
217 {
218 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
219 MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
220 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
221 isI2cOpen=FALSE;
222 }
223 }
224
225 }
226
227
228 //------------------------------------------------------------------------------
229 /// Read register
230 /// @param u16Addr \b IN: address
231 /// @return u8Val \b OUT: value
232 //------------------------------------------------------------------------------
MDrv_MFC_ReadByte(U16 u16Addr)233 U8 MDrv_MFC_ReadByte(U16 u16Addr)
234 {
235 if (0)//gmfcSysInfo.u8UseMPIF == 2)
236 {
237 #if(CODEBASE_SEL != CODEBASE_UTOPIA)
238 return MAdp_MPIF_ReadByte(MFC_SPIF_SLAVE_ID, u16Addr);
239 #endif
240 }
241 else
242 {
243 U8 u8Addr[3], u8buf=0;
244 BOOL ret;
245
246 u8Addr[0] = 0x10;
247 u8Addr[1] = (U8)(u16Addr >> 8);
248 u8Addr[2] = (U8)(u16Addr & 0x00FF);
249 #if(CODEBASE_SEL != CODEBASE_UTOPIA)
250 MAdp_IIC_Write(MFC_IIC_CHANNEL_ID, 0xB4, u8Addr, 0, u8Addr, 3);
251 ret = MAdp_IIC_Read(MFC_IIC_CHANNEL_ID, 0xB4, u8Addr, 0, &u8buf, 1);
252 #else
253 MDrv_MFC_IIC_Write(MFC_IIC_CHANNEL_ID, 0xB4, u8Addr, 0, u8Addr, 3);
254 ret = MDrv_MFC_IIC_Read(MFC_IIC_CHANNEL_ID, 0xB4, u8Addr, 0, &u8buf, 1);
255 #endif
256 //printf("[MFC R] addr=0x%x, data=0x%x, ret=%u\n", u16Addr, u8buf, ret);
257 if (!ret)
258 return 0;
259 return u8buf;
260 }
261 }
262
MDrv_MFC_Read2Bytes(U16 u16Reg)263 U16 MDrv_MFC_Read2Bytes(U16 u16Reg)
264 {
265 if (0)//gmfcSysInfo.u8UseMPIF == 2)
266 {
267 #if(CODEBASE_SEL != CODEBASE_UTOPIA)
268 return MAdp_MPIF_Read2Byte(MFC_SPIF_SLAVE_ID, u16Reg);
269 #endif
270 }
271 else
272 {
273 U8 u8ReadValue1=0, u8ReadValue2=0;
274 u8ReadValue1 = MDrv_MFC_ReadByte(u16Reg + 1);
275 u8ReadValue2 = MDrv_MFC_ReadByte(u16Reg);
276
277 return MAKEWORD(u8ReadValue1, u8ReadValue2);
278 }
279 }
280
MDrv_MFC_Read3Bytes(U16 u16Reg)281 U32 MDrv_MFC_Read3Bytes(U16 u16Reg)
282 {
283 if (0)//gmfcSysInfo.u8UseMPIF == 2)
284 {
285 #if(CODEBASE_SEL != CODEBASE_UTOPIA)
286 return MAdp_MPIF_Read3Byte(MFC_SPIF_SLAVE_ID, u16Reg);
287 #endif
288 }
289 else
290 {
291 U8 u8ReadValue1=0;
292 U32 u32ReadValue2=0;
293 u8ReadValue1 = MDrv_MFC_ReadByte(u16Reg + 2);
294 u32ReadValue2 |= ((U32)u8ReadValue1)<<16;
295 u8ReadValue1 = MDrv_MFC_ReadByte(u16Reg + 1);
296 u32ReadValue2 |= ((U32)u8ReadValue1)<<8;
297 u8ReadValue1 = MDrv_MFC_ReadByte(u16Reg);
298 u32ReadValue2 |= ((U32)u8ReadValue1);
299 return u32ReadValue2;
300 }
301 }
302 //------------------------------------------------------------------------------
303 /// Write register
304 /// @param u16Addr \b IN: address
305 /// @param u8Val \b IN: value
306 /// @return TRUE/FALSE
307 //------------------------------------------------------------------------------
MDrv_MFC_WriteByte(U16 u16Addr,U8 u8Val)308 BOOL MDrv_MFC_WriteByte(U16 u16Addr, U8 u8Val)
309 {
310 MFC_REG_DEBUG(printf("\n addr=0x%x, write=0x%x", u16Addr, u8Val));
311
312 if (0)//gmfcSysInfo.u8UseMPIF == 2)
313 {
314 #if 1
315 #if(CODEBASE_SEL != CODEBASE_UTOPIA)
316 return MAdp_MPIF_WriteByte(MFC_SPIF_SLAVE_ID, u16Addr, u8Val);
317 #endif
318 #else
319 // for debug
320 U8 ret;
321 U8 u8ReadVal;
322
323 ret = MAdp_MPIF_WriteByte(MFC_SPIF_SLAVE_ID, u16Addr, u8Val);
324 u8ReadVal = MAdp_MPIF_ReadByte(MFC_SPIF_SLAVE_ID, u16Addr);
325 if (u8ReadVal == u8Val)
326 MFC_REG_DEBUG(printf(", [OK]\n"));
327 else
328 MFC_REG_DEBUG(printf(", [NG]read=0x%x\n", u8ReadVal));
329
330 if (!ret)
331 return FALSE;
332 return TRUE;
333 #endif
334 }
335 else
336 {
337 U8 u8Addr[3];
338 BOOL ret;
339
340 u8Addr[0] = 0x10;
341 u8Addr[1] = (U8)(u16Addr >> 8);
342 u8Addr[2] = (U8)(u16Addr & 0x00FF);
343 #if(CODEBASE_SEL != CODEBASE_UTOPIA)
344 ret = MAdp_IIC_Write(MFC_IIC_CHANNEL_ID, 0xB4, u8Addr, 3, &u8Val, 1);
345 #else
346 ret = MDrv_MFC_IIC_Write(MFC_IIC_CHANNEL_ID, 0xB4, u8Addr, 3, &u8Val, 1);
347 #endif
348 if (!ret)
349 return FALSE;
350 return TRUE;
351 }
352 }
353
MDrv_MFC_Write2Bytes(U16 u16Reg,U16 u16Value)354 void MDrv_MFC_Write2Bytes(U16 u16Reg, U16 u16Value)
355 {
356 if (0)//gmfcSysInfo.u8UseMPIF == 2)
357 {
358 #if(CODEBASE_SEL != CODEBASE_UTOPIA)
359 MAdp_MPIF_Write2Byte(MFC_SPIF_SLAVE_ID, u16Reg, u16Value);
360 #endif
361 }
362 else
363 {
364 MDrv_MFC_WriteByte(u16Reg, (U8)u16Value);
365 MDrv_MFC_WriteByte(u16Reg + 1, (U8)(u16Value / 0x100));
366 }
367 }
368
MDrv_MFC_Write3Bytes(U16 u16Reg,U32 u32Value)369 void MDrv_MFC_Write3Bytes(U16 u16Reg, U32 u32Value)
370 {
371 if (0)//gmfcSysInfo.u8UseMPIF == 2)
372 {
373 #if(CODEBASE_SEL != CODEBASE_UTOPIA)
374 MAdp_MPIF_Write3Byte(MFC_SPIF_SLAVE_ID, u16Reg, u32Value);
375 #endif
376 }
377 else
378 {
379 MDrv_MFC_WriteByte(u16Reg, (U8)u32Value);
380 MDrv_MFC_WriteByte(u16Reg + 1, (U8)(u32Value / 0x100));
381 MDrv_MFC_WriteByte(u16Reg + 2, (U8)(u32Value / 0x10000));
382 }
383 }
384
MDrv_MFC_WriteBit(U16 u16Addr,U8 u8Bit,U8 u8BitPos)385 void MDrv_MFC_WriteBit(U16 u16Addr, U8 u8Bit, U8 u8BitPos)
386 {
387 U8 u8Value;
388
389 u8Value= MDrv_MFC_ReadByte(u16Addr);
390 if(u8Bit)
391 u8Value = u8Value | u8BitPos;
392 else
393 u8Value = u8Value & (~u8BitPos);
394 MDrv_MFC_WriteByte(u16Addr, u8Value);
395 }
396
MDrv_MFC_WriteByteMask(U16 u16Addr,U8 u8Val,U8 u8Mask)397 void MDrv_MFC_WriteByteMask(U16 u16Addr, U8 u8Val, U8 u8Mask)
398 {
399 U8 uc;
400
401 uc = MDrv_MFC_ReadByte(u16Addr);
402 uc &= (~u8Mask);
403 MDrv_MFC_WriteByte( u16Addr, ( uc | (u8Val & u8Mask)) );
404 }
405
MDrv_MFC_WriteRegsTbl(U16 wIndex,MST_MFC_RegUnitType_t * pTable)406 void MDrv_MFC_WriteRegsTbl(U16 wIndex, MST_MFC_RegUnitType_t *pTable)
407 {
408 while (1)
409 {
410 if (pTable->ucIndex == _END_OF_TBL_
411 && pTable->ucValue == _END_OF_TBL_) // check end of table
412 break;
413
414 MDrv_MFC_WriteByte(wIndex | pTable->ucIndex, pTable->ucValue); // write register
415 pTable++;// next
416 }
417 }
418
MDrv_MFC_GetInitStatus()419 U8 MDrv_MFC_GetInitStatus()
420 {
421 return u8MFCInitStatus;
422 }
423
MDrv_MFC_SetInitStatus(U8 status)424 void MDrv_MFC_SetInitStatus(U8 status)
425 {
426 u8MFCInitStatus = status;
427 }
428
429
430 //------------------------------------------------------------------------------
431 /// MFC Load Bin to SRAM
432 //------------------------------------------------------------------------------
MDrv_MFC_LoadBinToSram(U8 * pBin,U32 len)433 BOOL MDrv_MFC_LoadBinToSram(U8* pBin, U32 len)
434 {
435 U8 i;
436 U8 u8Addr[3];
437 BOOL ret;
438
439 len=len;
440 MDrv_MFC_WriteByte(0x10E6, 0x01); // enable xdata mapping to psam
441 for (i=0; i<16; i++)
442 {
443 // Switch page, every page is 1k bytes
444 ret = MDrv_MFC_WriteByte(0x10E4, i); // Switch page, every page is 1k bytes
445 if (!ret)
446 return FALSE;
447
448 // downloading
449 u8Addr[0] = 0x10;
450 u8Addr[1] = 0x50;
451 u8Addr[2] = 0x00;
452 #if(CODEBASE_SEL != CODEBASE_UTOPIA)
453 ret = MAdp_IIC_Write(MFC_IIC_CHANNEL_ID, 0xB4, u8Addr, 3, pBin, 1024);
454 #else
455 ret = MDrv_MFC_IIC_Write(MFC_IIC_CHANNEL_ID, 0xB4, u8Addr, 3, pBin, 1024);
456 #endif
457 if (!ret)
458 return FALSE;
459
460 pBin += 1024;
461 }
462 MDrv_MFC_WriteByte(0x10E4, 0x00); // Switch page, every page is 1k bytes
463 MDrv_MFC_WriteByte(0x10E6, 0x00); // disable xdata mapping to psam
464
465 return TRUE;
466 }
467
MDrv_MFC_WaitReady(U8 u8WaitValue)468 BOOL MDrv_MFC_WaitReady(U8 u8WaitValue)
469 {
470 U8 u8ReadValue, u8count = 0;
471 while(u8count++ < 10)
472 {
473 #if(CODEBASE_SEL == CODEBASE_LINUX)
474 usleep(100 * 1000);
475 #elif(CODEBASE_SEL == CODEBASE_UTOPIA)
476 OS_DELAY_TASK(100);
477 #endif
478 u8ReadValue=0x00;
479 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
480 MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
481 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
482
483 u8ReadValue = MDrv_MFC_ReadByte(0x2C45);
484 //thchen printf("\n\n\n\n\n\n\n[0x2C45]=[%x]\n\n\n\n\n", u8ReadValue);
485
486 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
487 MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
488 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
489 if(u8ReadValue == u8WaitValue)
490 break;
491 }
492 return (u8count < 10) ? 1 : 0;
493 }
494
MDrv_MFC_SramLoadCode(void)495 void MDrv_MFC_SramLoadCode(void)
496 {
497 U8 *pAddr;
498 U32 Len;
499 pAddr = MFC_BIN;
500 Len = sizeof(MFC_BIN);
501 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
502 MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
503 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
504
505 MDrv_MFC_Write2Bytes(0x3C60, 0xAA55);//Disable watch dog
506 MDrv_MFC_LoadBinToSram(pAddr, Len);
507 MDrv_MFC_WriteByte(0x1084, 0x01); // Sram boot code reset
508 MDrv_MFC_WriteByte(0x2C45, 0x01);
509
510 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
511 MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
512 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
513 MDrv_MFC_WaitReady(2);
514 }
515
516 //------------------------------------------------------------------------------
517 /// MFC system init
518 //------------------------------------------------------------------------------
519
520 //for frame lock use that set from T3
MDrv_MFC_SetVFreq(U16 u16InputfreqX100,BOOL enableFPLL)521 void MDrv_MFC_SetVFreq(U16 u16InputfreqX100, BOOL enableFPLL)
522 {
523 gPreInputVFreq = u16InputfreqX100;
524 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
525 MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
526 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
527
528 MDrv_MFC_SetOutDClk(gPreInputVFreq, enableFPLL);
529 MDrv_MFC_WriteByte(0x290E, 0x2F);
530 MDrv_MFC_SoftwareResetScalerInt();
531
532 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
533 MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
534 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
535 }
536
MDrv_MFC_BringUp(void)537 void MDrv_MFC_BringUp(void)
538 {
539 // I2C or MPIF
540 gmfcSysInfo.u8UseMPIF = 0;
541 //thchen printf("gmfcSysInfo.u8UseMPIF=%u\n", gmfcSysInfo.u8UseMPIF);
542
543 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
544 MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
545 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
546
547 MDrv_MFC_SetInterrupt(_DISABLE);
548 MDrv_MFC_McuInitialize();
549 MDrv_MFC_WriteBit(0x2F00, 0, _BIT3); //Dubber buffer dis
550 MDrv_MFC_WriteBit(0x1E03, 1, _BIT0); //SCaler reset Hold
551 MDrv_MFC_WriteBit(0x1E49, 0, _BIT0); //clear this status
552 MDrv_MFC_InitializeChip();
553
554 // SPIF settings
555 MDrv_MFC_WriteByteMask(0x1E38, _BIT3, _BIT3); // swap M/SPIF
556 MDrv_MFC_WriteByte(0x1E8D, 0x18); // set SPIF clock, 0x18: 12MHz
557 //MDrv_MFC_WriteByte(0x1E8D, 0x10); // set SPIF clock, 0x10: 108MHz
558
559 if (gmfcSysInfo.u8UseMPIF)
560 {
561 #if(CODEBASE_SEL != CODEBASE_UTOPIA)
562 //MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
563 //MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
564 //MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
565 MAdp_MPIF_Open();
566 MAdp_MPIF_Init(0x3C, 0x1, 0x1); //0x3C: 12MHz
567 //MAdp_MPIF_Init(0x04, 0x1, 0x1); //0x04:123MHz
568 MAdp_MPIF_InitSPIF(MFC_SPIF_SLAVE_ID);
569 MAdp_MPIF_SetCmdDataWidth(MFC_SPIF_SLAVE_ID, MPIF_DATAWIDTH_1, MPIF_DATAWIDTH_1);
570 gmfcSysInfo.u8UseMPIF = 2;
571 #endif
572 }
573
574 MDrv_MFC_InitializeScalerOP();
575 MDrv_MFC_InitializeMiu();
576
577
578 MDrv_MFC_InitializeScalerIP();
579 MDrv_MFC_InitializeFilmMode();
580 MDrv_MFC_InitializePanel();
581
582
583 MDrv_MFC_PowerDownChipU3();
584 MDrv_MFC_WriteBit(0x2F00, 1, _BIT3); //Dubber buffer En
585 MDrv_MFC_SetInterrupt(_ENABLE);
586 if(gmfcSysInfo.u8PanelType == _LVDS)
587 {
588 MDrv_MFC_Write2Bytes(0x3220, 0x5555); // set output configure to lvds output = "01" for 26 channel
589 MDrv_MFC_Write2Bytes(0x3222, 0x5555);
590 MDrv_MFC_Write2Bytes(0x3224, 0x5555);
591 MDrv_MFC_WriteByte(0x3226, 0x05);
592 }
593 //thchen printf("**********Read status 2c45 = %x", MDrv_MFC_ReadByte(0x2C45));
594
595 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
596 MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
597 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
598 }
599
600
MDrv_MFC_Init(PMST_MFC_SYS_INFO_t mfcSysInfo)601 void MDrv_MFC_Init(PMST_MFC_SYS_INFO_t mfcSysInfo)
602 {
603 #if(CODEBASE_SEL != CODEBASE_UTOPIA)
604 U32 u32Time, u32PANEL_VTOTAL;
605 #else
606 U32 u32PANEL_VTOTAL;
607 #endif
608 gmfcSysInfo = *mfcSysInfo;
609 u32PANEL_VTOTAL = gmfcSysInfo.u16VTotal;
610 gmfcSysInfo.u16VTotal = gmfcSysInfo.u16Height+ 64;//PANEL_HEIGHT + 64
611 gmfcSysInfo.u16HTotal = (U32)gmfcSysInfo.u16HTotal * u32PANEL_VTOTAL/gmfcSysInfo.u16VTotal;
612 /*
613 printf("MFC Panel H Start= [%d][160]\n", gmfcSysInfo.u16HStart);
614 printf("MFC Panel V Start= [%d][20]\n", gmfcSysInfo.u16VStart);
615 printf("MFC Panel H Total= [%d][2200]\n", gmfcSysInfo.u16HTotal);
616 printf("MFC Panel V Total= [%d][1189]\n", gmfcSysInfo.u16VTotal);
617 printf("MFC Panel H Width= [%d][1920]\n", gmfcSysInfo.u16Width);
618 printf("MFC Panel V Width= [%d][1080]\n\n", gmfcSysInfo.u16Height);
619
620 printf("MFC Rx LVDS Chanel = [%d][1]\n", gmfcSysInfo.u8LVDSChannel);
621 printf("MFC Rx LVDS BitNum = [%d][1]\n", gmfcSysInfo.u8LVDSBitNum);
622 printf("MFC Rx LVDS TI/Thin = [%d][1]\n", gmfcSysInfo.u8LVDSTiMode);
623 printf("MFC Rx LVDS M/L Swap= [%d][0]\n", gmfcSysInfo.u8LVDSSwapMsbLsb);
624 printf("MFC Rx LVDS P/N Swap= [%d][0]\n", gmfcSysInfo.u8LVDSSwap_P_N);
625 printf("MFC Rx LVDS O/E Swap= [%d][1]\n\n", gmfcSysInfo.u8LVDSSwapOddEven);
626
627 printf("MFC Tx LVDS Chanel = [%d][2]\n", gmfcSysInfo.u8PanelChannel);
628 printf("MFC Tx LVDS [ABCD] = [%x][D8]\n", gmfcSysInfo.u8PanelLVDSSwapCH);
629 printf("MFC Tx LVDS BitNum = [%d][1]\n", gmfcSysInfo.u8PanelBitNum);
630 printf("MFC Tx LVDS pair shift= [%d][0]\n", gmfcSysInfo.u8PanelLVDSShiftPair);
631 printf("MFC Tx LVDS TI/Thin = [%d][1]\n", gmfcSysInfo.u8PanelLVDSTiMode);
632 printf("MFC Tx LVDS PolSwap = [%d][1]\n", gmfcSysInfo.u8PanelLVDSSwapPol);
633 printf("MFC Tx LVDS pairSwap = [%d][0]\n", gmfcSysInfo.u8PanelLVDSSwapPair);
634 printf("MFC Panel V Freq = [%d][120]Hz\n", gmfcSysInfo.u8PanelVfreq);
635
636 printf("MFC memory clock = [%d][1400]\n", gmfcSysInfo.u16MFCMemoryClk);
637 printf("MFC memory type = [%x][0x0705]\n", gmfcSysInfo.u16MFCMemoryType);
638 printf("MFC memory IncVtotalFor50Hz = [%d][1]\n", gmfcSysInfo.u8PanelIncVtotalFor50Hz);
639 printf("MFC panel type = [%d][2]\n", gmfcSysInfo.u8PanelType);
640 printf("MFC panel Dither = [%d][0]\n", gmfcSysInfo.u8PanelDither);
641 printf("MFC panel CPVC = [%d][0]\n", gmfcSysInfo.u8PanelBlankCPVC);
642 printf("MFC panel OEC = [%d][0]\n", gmfcSysInfo.u8PanelBlankOEC);
643 printf("MFC panel TPC = [%d][0]\n", gmfcSysInfo.u8PanelBlankTPC);
644 printf("MFC panel STHC = [%d][0]\n", gmfcSysInfo.u8PanelBlankSTHC);
645 printf("MFC panel CSC = [%d][1]\n", gmfcSysInfo.u8PanelCSC);
646 printf("MFC panel GAMMA = [%d][1]\n", gmfcSysInfo.u8PanelGAMMA);
647 printf("MFC_IP_MODE = [%d][6]\n", IP_RGB_10BIT_COMP);
648 printf("Panel Type = [%x][0x70]\n", PNL_INN22_WSXGA_120HZ);
649 */
650
651 //=======MM Allocation===============
652 //MFC --------0
653 //IP YCOut 0~4 0~7
654 //IP MR 0~4 0
655 //Gamma 0~1
656 //OD BaseEven
657 //OD LimitEven
658 //OD BaseODD
659 //OD LimitODD
660 //OD LsbBsae
661 //OD LsbLimit
662 //Miu Auto BIST
663 //===============================
664 //[1]MFC----------------------------------------------------------
665 gmfcMiuBaseAddr.u8MfcMode= 1;
666 gmfcMiuBaseAddr.u32MfcBase = 0;
667 if (gmfcMiuBaseAddr.u8MfcMode)
668 {
669 gmfcMiuBaseAddr.u32MfcSize = 16ul
670 *((LimitCheck(gmfcSysInfo.u16Width, 64)/16)/2)
671 *(LimitCheck(gmfcSysInfo.u16Height, 16)/8)*128;
672 }
673 else
674 gmfcMiuBaseAddr.u32MfcSize = 0;
675
676 //[2]Ycount----------------------------------------------------------
677 gmfcMiuBaseAddr.u8IpMode = IP_MODE;
678 gmfcMiuBaseAddr.u32IpYcoutBase = gmfcMiuBaseAddr.u32MfcBase+gmfcMiuBaseAddr.u32MfcSize;
679 gmfcMiuBaseAddr.u32IpYcoutSize = 16ul*gmfcSysInfo.u16Height*Ycout_LinePitch(gmfcMiuBaseAddr.u8IpMode, gmfcSysInfo.u16Width);
680
681 //[3]Gamma----------------------------------------------------------
682 gmfcMiuBaseAddr.u8GammaMode = GAMMA_FUNCTION;
683 gmfcMiuBaseAddr.u32GammaBase0 = (gmfcMiuBaseAddr.u32IpYcoutBase+8ul*gmfcMiuBaseAddr.u32IpYcoutSize+0xFFFL)&0xFFFF000L;
684 if (gmfcMiuBaseAddr.u8GammaMode==GAMMA_MLOAD)
685 gmfcMiuBaseAddr.u32GammaMLSize = 16ul*256;
686 else
687 gmfcMiuBaseAddr.u32GammaMLSize = 0;
688 gmfcMiuBaseAddr.u32GammaBase1 = gmfcMiuBaseAddr.u32GammaBase0 + gmfcMiuBaseAddr.u32GammaMLSize;
689
690 //[4]Over Drive----------------------------------------------------------
691 gmfcMiuBaseAddr.u8OdMode = OD_MODE_SEL;
692 gmfcMiuBaseAddr.u32OdBaseEven = gmfcMiuBaseAddr.u32GammaBase1+gmfcMiuBaseAddr.u32GammaMLSize+0x1000000;
693 switch (gmfcMiuBaseAddr.u8OdMode)
694 {
695 case OD_MODE_OFF:
696 gmfcMiuBaseAddr.u32OdSize = 0;
697 break;
698 case OD_MODE_444:
699 gmfcMiuBaseAddr.u32OdSize = 12ul*gmfcSysInfo.u16Width*gmfcSysInfo.u16Height/8;
700 break;
701 case OD_MODE_555:
702 gmfcMiuBaseAddr.u32OdSize = 15ul*gmfcSysInfo.u16Width*gmfcSysInfo.u16Height/8;
703 break;
704 case OD_MODE_565:
705 gmfcMiuBaseAddr.u32OdSize = 16ul*gmfcSysInfo.u16Width*gmfcSysInfo.u16Height/8;
706 break;
707 case OD_MODE_666:
708 gmfcMiuBaseAddr.u32OdSize = 18ul*gmfcSysInfo.u16Width*gmfcSysInfo.u16Height/8;
709 break;
710 case OD_MODE_888:
711 gmfcMiuBaseAddr.u32OdSize = 24ul*gmfcSysInfo.u16Width*gmfcSysInfo.u16Height/8;
712 break;
713 default:
714 gmfcMiuBaseAddr.u32OdSize = 9ul*gmfcSysInfo.u16Width*gmfcSysInfo.u16Height/8;
715 break;
716 }
717 gmfcMiuBaseAddr.u32OdSizehalf= gmfcMiuBaseAddr.u32OdSize/2+0x800;
718 gmfcMiuBaseAddr.u32OdLimitEven = gmfcMiuBaseAddr.u32OdBaseEven+gmfcMiuBaseAddr.u32OdSizehalf;
719 gmfcMiuBaseAddr.u32OdBaseOdd= gmfcMiuBaseAddr.u32OdLimitEven+0x800;
720 gmfcMiuBaseAddr.u32OdLimitOdd= gmfcMiuBaseAddr.u32OdBaseOdd+gmfcMiuBaseAddr.u32OdSizehalf;
721
722 gmfcMiuBaseAddr.u32OdLsbBase=gmfcMiuBaseAddr.u32OdLimitOdd+0x800;
723 switch(gmfcMiuBaseAddr.u8OdMode)
724 {
725 case OD_MODE_555_COMPRESS:
726 gmfcMiuBaseAddr.u32OdLsbSize = 3ul*gmfcSysInfo.u16Width*gmfcSysInfo.u16Height/8;
727 break;
728 case OD_MODE_666_COMPRESS:
729 gmfcMiuBaseAddr.u32OdLsbSize = 6ul*gmfcSysInfo.u16Width*gmfcSysInfo.u16Height/8;
730 break;
731 default:
732 gmfcMiuBaseAddr.u32OdLsbSize = 0;
733 break;
734 }
735 gmfcMiuBaseAddr.u32OdLsbLimit=gmfcMiuBaseAddr.u32OdLsbBase+gmfcMiuBaseAddr.u32OdLsbSize;
736
737 //[5]AutoBist----------------------------------------------------------
738 gmfcMiuBaseAddr.u32AutoBist=(gmfcMiuBaseAddr.u32OdLsbLimit+0xFFFL)&0xFFFF000L;
739 gmfcMiuBaseAddr.u8XDataOnDramMode=HK_XDATA_ON_DRAM;
740 if(gmfcMiuBaseAddr.u8XDataOnDramMode)
741 {
742 gmfcMiuBaseAddr.u8XDataOnDramBase=(gmfcMiuBaseAddr.u32AutoBist+0x2000+0xFFFFL)&0xFFF0000L;
743 gmfcMiuBaseAddr.u8XDataOnDramSize=1024ul*64;
744 }
745 else
746 {
747 gmfcMiuBaseAddr.u8XDataOnDramBase=gmfcMiuBaseAddr.u32AutoBist+0x2000;
748 gmfcMiuBaseAddr.u8XDataOnDramSize=0;
749 }
750
751 //[6]MPIF----------------------------------------------------------
752 gmfcMiuBaseAddr.u8MPifMode=ENABLE_MPIF_DEVICE;
753 if(gmfcMiuBaseAddr.u8MPifMode)
754 {
755 gmfcMiuBaseAddr.u32PifBase=0;
756 gmfcMiuBaseAddr.u32PifSize=1024ul;
757 gmfcMiuBaseAddr.u32PifBase2=gmfcMiuBaseAddr.u32PifBase+gmfcMiuBaseAddr.u32PifSize;
758 }
759 else
760 {
761 gmfcMiuBaseAddr.u32PifBase=gmfcMiuBaseAddr.u8XDataOnDramBase+gmfcMiuBaseAddr.u8XDataOnDramSize;
762 gmfcMiuBaseAddr.u32PifSize=0;
763 gmfcMiuBaseAddr.u32PifBase2=gmfcMiuBaseAddr.u32PifBase+gmfcMiuBaseAddr.u32PifSize;
764 }
765
766
767 #if(CODEBASE_SEL != CODEBASE_UTOPIA)
768 u32Time = MsOS_GetSystemTime();
769 MAdp_IIC_Clock_Select(MFC_IIC_CHANNEL_ID, 0x4); // if use HW I2C, set it to speed up
770 #endif
771 MDrv_MFC_SramLoadCode();
772 #if(CODEBASE_SEL != CODEBASE_UTOPIA)
773 printf("\n[URSA3]SramLoadCode: %u\n", MsOS_GetSystemTime() - u32Time);
774 u32Time = MsOS_GetSystemTime();
775 #endif
776 MDrv_MFC_BringUp();
777 #if(CODEBASE_SEL != CODEBASE_UTOPIA)
778 printf("\n[URSA3]Load Registers: %u\n", MsOS_GetSystemTime() - u32Time);
779 #endif
780 u8MFCInitStatus=1;
781 }
782
783 //------------------------------------------------------------------------------
784 /// MFC Application function
785 //------------------------------------------------------------------------------
MDrv_MFC_OnOff(BOOL bOnOff)786 void MDrv_MFC_OnOff(BOOL bOnOff)
787 {
788 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
789 MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
790 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
791
792 if (bOnOff)
793 {
794 //MDrv_MFC_WriteRegister(0x290E, 0x2F); // Memc on
795 //MDrv_MFC_WriteRegisterMask(0x2910, 0x0C, 0x1C);
796 MDrv_MFC_WriteByteMask(0x2C44, 0x80, 0x80); // Memc on
797 }
798 else
799 {
800 //passFail = MDrv_MFC_WriteRegister(0x290E, 0x00); // Memc off
801 //MDrv_MFC_WriteRegisterMask(0x2910, 0x10, 0x1C);
802 //MDrv_MFC_WriteRegister(0x29A9, 0xFF);
803 MDrv_MFC_WriteByteMask(0x2C44, 0, 0x80); // Memc off
804 }
805 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
806 MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
807 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
808 }
809
MDrv_MFC_COMPENSATION(U8 u8Blur,U8 u8Judder,U8 u8MFC)810 void MDrv_MFC_COMPENSATION(U8 u8Blur, U8 u8Judder, U8 u8MFC)
811 {
812 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
813 MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
814 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
815
816 //need to be implement for
817 //Blur
818 //Judder
819 //MFC hi/mid/lo/off/5:5 pull down
820
821 MDrv_MFC_WriteByteMask(0x2C43, u8Blur, 0x0F);
822 MDrv_MFC_WriteByteMask(0x2C43, u8Judder, 0xF0);
823 MDrv_MFC_WriteByteMask(0x2C44, u8MFC, 0x0F);
824
825 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
826 MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
827 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
828 }
829
MDrv_MFC_TrueMotionDemo(U8 u8TrueMotionDemo)830 void MDrv_MFC_TrueMotionDemo(U8 u8TrueMotionDemo)
831 {
832 U8 u8buf;
833
834 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
835 MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
836 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
837 u8buf = MDrv_MFC_ReadByte(0x290E);
838 if(u8buf != 0x2F)
839 MDrv_MFC_WriteByte(0x290E, 0x2F); // Memc on
840 MDrv_MFC_WriteByteMask(0x2C44, 0x02, 0x07); //MEMC high
841
842 switch (u8TrueMotionDemo)
843 {
844 case 0: // Demo off, Memc on
845 u8buf = 0x00;
846 break;
847
848 case 1: // Demo left side
849 u8buf = 0x10;
850 break;
851
852 case 2: // Demo right side
853 u8buf = 0x90;
854 break;
855
856 case 3: // Demo top side
857 u8buf = 0x20;
858 break;
859
860 case 4: // Demo bottom side
861 u8buf = 0xA0;
862 break;
863
864 default: // Demo off, Memc off
865 u8buf = 0x00;
866 break;
867 }
868
869 if (u8buf)//Film 22 32 mode detect
870 MDrv_MFC_WriteByteMask(0x2080, 0x00, 0x03);
871 else
872 MDrv_MFC_WriteByteMask(0x2080, 0x03, 0x03);
873 MDrv_MFC_WriteByteMask(0x2981, u8buf, 0xF0);
874 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
875 MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
876 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
877 }
878
MDrv_MFC_VideoBlock(U8 u8Type,BOOL bOnOff)879 void MDrv_MFC_VideoBlock(U8 u8Type , BOOL bOnOff)
880 {
881 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
882 MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
883 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
884
885 switch (u8Type)
886 {
887 case 0: // URSA Rx (receiver signal off)
888 if(bOnOff)
889 {//Enable Rx
890 MDrv_MFC_WriteByteMask(0x2F4C, 0x01, 0x03);
891 MDrv_MFC_WriteByte(0x2F4E, 0x0F);
892 MDrv_MFC_WriteByte(0x2EE0, 0x01);
893 MDrv_MFC_WriteByte(0x3002, 0x00);
894 MDrv_MFC_WriteByte(0x3016, 0x00);
895 }
896 else
897 {//disable Rx
898 MDrv_MFC_WriteByteMask(0x2F4C, 0x00, 0x03);
899 MDrv_MFC_WriteByte(0x2F4E, 0x00);
900 MDrv_MFC_WriteByte(0x2EE0, 0x00);
901 MDrv_MFC_WriteByte(0x3002, 0x08);
902 MDrv_MFC_WriteByte(0x3016, 0x02);
903 }
904 break;
905 case 1: // URSA Tx (output black mute)
906 if(bOnOff)
907 {
908 //R,G,B 10bit data setting
909 MDrv_MFC_WriteByte(0x302a, 0x00);
910 MDrv_MFC_WriteByte(0x302b, 0x00);
911 MDrv_MFC_WriteByte(0x302c, 0x00);
912 MDrv_MFC_WriteByte(0x302d, 0x00);
913 MDrv_MFC_WriteByte(0x302e, 0x00);
914 MDrv_MFC_WriteByte(0x302f, 0x00);
915 //disable Rxd
916 MDrv_MFC_WriteByte(0x3017, 0x04);
917 MDrv_MFC_WriteByte(0x3002, 0x00);
918 MDrv_MFC_WriteByte(0x3016, 0x00);
919 }
920 else
921 {//enable Rx
922 MDrv_MFC_WriteByte(0x3017, 0x00);
923 MDrv_MFC_WriteByte(0x3002, 0x08);
924 MDrv_MFC_WriteByte(0x3016, 0x02);
925 }
926 break;
927 case 2: // LVDS (LVDS signal off)
928 if(bOnOff)
929 {//disable LVDS
930 MDrv_MFC_WriteByte(0x3220, 0x00);
931 MDrv_MFC_WriteByte(0x3221, 0x00);
932 MDrv_MFC_WriteByte(0x3222, 0x00);
933 MDrv_MFC_WriteByte(0x3223, 0x00);
934 MDrv_MFC_WriteByte(0x3224, 0x00);
935 MDrv_MFC_WriteByte(0x3225, 0x00);
936 MDrv_MFC_WriteByte(0x3226, 0x00);
937 }
938 else
939 {//enable LVDS
940 MDrv_MFC_WriteByte(0x3220, 0x55);
941 MDrv_MFC_WriteByte(0x3221, 0x55);
942 MDrv_MFC_WriteByte(0x3222, 0x55);
943 MDrv_MFC_WriteByte(0x3223, 0x55);
944 MDrv_MFC_WriteByte(0x3224, 0x55);
945 MDrv_MFC_WriteByte(0x3225, 0x55);
946 MDrv_MFC_WriteByte(0x3226, 0x05);
947 }
948 break;
949 default:
950 break;
951 }
952
953 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
954 MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
955 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
956
957 }
958
MDrv_MFC_LVDSPowerOnOFF(BOOL bOnOff)959 void MDrv_MFC_LVDSPowerOnOFF(BOOL bOnOff)
960 {
961 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
962 MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
963 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
964
965 if(bOnOff)
966 {//enable LVDS power
967 MDrv_MFC_WriteByteMask(0x3250, 0, 0x01);
968 }
969 else
970 {//disable LVDS power
971 MDrv_MFC_WriteByteMask(0x3250, 1, 0x01);
972 }
973
974 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
975 MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
976 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
977 }
978
MDrv_MFC_Set_Bypass_Window(BOOL bOnOff,U8 u8WindowID,U16 u16HStart,U16 u16VStart,U16 u16HSize,U16 u16VSize)979 void MDrv_MFC_Set_Bypass_Window(BOOL bOnOff, U8 u8WindowID, U16 u16HStart, U16 u16VStart, U16 u16HSize, U16 u16VSize)
980 {
981 static U8 u8winStatus = 0;
982 static U8 gBackupReg2052 = 0x01;
983 U16 u16Hend, u16Vend;
984
985 u16Hend = u16HStart+u16HSize;
986 u16Vend = u16VStart+u16VSize;
987 if(u16HStart < 0x60)
988 u16HStart = 0;
989
990 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
991 MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
992 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
993
994 MDrv_MFC_WriteByteMask(0x2440, 0x11, 0x11);//OSD control window enable
995 MDrv_MFC_WriteByte(0x2444+u8WindowID*8, u16HStart); // H start
996 MDrv_MFC_WriteByte(0x2445+u8WindowID*8, (u16HStart&0X0F00)>>8);
997 MDrv_MFC_WriteByte(0x2446+u8WindowID*8, u16Hend); // H end
998 MDrv_MFC_WriteByte(0x2447+u8WindowID*8, (u16Hend&0X0F00)>>8);
999 MDrv_MFC_WriteByte(0x2448+u8WindowID*8, u16VStart); // V start
1000 MDrv_MFC_WriteByte(0x2449+u8WindowID*8, (u16VStart&0X0F00)>>8);
1001 MDrv_MFC_WriteByte(0x244A+u8WindowID*8, u16Vend); // V end
1002 MDrv_MFC_WriteByte(0x244B+u8WindowID*8, (u16Vend&0X0F00)>>8);
1003
1004 MDrv_MFC_WriteByteMask(0x2C42, (bOnOff<<u8WindowID), (1<<u8WindowID));
1005 if(bOnOff)
1006 {
1007 if(u8WindowID <= 4)
1008 u8winStatus |= 0x01<<u8WindowID; //enable selected window
1009 else
1010 u8winStatus = 0x1f; //enable all windows
1011 }
1012 else
1013 {
1014 if(u8WindowID <= 4)
1015 u8winStatus &= ~(0x01<<u8WindowID); //disable selected window
1016 else
1017 u8winStatus = 0; //enable all windows
1018 }
1019
1020 if(u8winStatus)
1021 {
1022 gBackupReg2052 = MDrv_MFC_ReadByte(0x2052);
1023 MDrv_MFC_WriteByteMask(0x2052, 0, 0x01);
1024 }
1025 else
1026 {
1027 MDrv_MFC_WriteByteMask(0x2052, gBackupReg2052, 0x01);
1028 }
1029 MDrv_MFC_WriteByte(0x246C, u8winStatus);
1030 MDrv_MFC_WriteByte(0x2626, u8winStatus);
1031
1032 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
1033 MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
1034 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
1035
1036 }
1037
MDrv_MFC_GetSWVersion(void)1038 U16 MDrv_MFC_GetSWVersion(void)
1039 {
1040 U16 u16Data;
1041
1042 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
1043 MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
1044 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
1045
1046 u16Data = MDrv_MFC_Read2Bytes(0x2c40);
1047
1048 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
1049 MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
1050 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
1051
1052 return u16Data;
1053 }
1054
MDrv_MFC_GetBinVersion(void)1055 U16 MDrv_MFC_GetBinVersion(void)
1056 {
1057 U32 u32Len;
1058 U16 u16Version;
1059
1060 u32Len = sizeof(MFC_BIN);
1061 u16Version = MFC_BIN[u32Len-2];
1062 u16Version = (u16Version << 8)|MFC_BIN[u32Len-1];
1063 return u16Version;
1064 }
1065
MDrv_MFC_SetSSC(U16 u16KHz,U16 u16Percent,BOOL bEnable,BOOL bMiuLVDS)1066 void MDrv_MFC_SetSSC(U16 u16KHz, U16 u16Percent, BOOL bEnable, BOOL bMiuLVDS)
1067 {
1068 #if 0 //daniel TEMP
1069 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
1070 MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
1071 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
1072
1073 if(bMiuLVDS)
1074 MDrv_MFC_SetMiuSSC(u16KHz, u16Percent, bEnable);
1075 else
1076 MDrv_MFC_SetLvdsSSC(u16KHz, u16Percent, bEnable);
1077
1078 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
1079 MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
1080 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
1081 #endif
1082 }
1083
MDrv_MFC_DebugBlock(BOOL bOnOff)1084 void MDrv_MFC_DebugBlock(BOOL bOnOff)
1085 {
1086 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
1087 MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
1088 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
1089 if(bOnOff)
1090 {
1091 MDrv_MFC_WriteByte(0x290A, 0x02);
1092 }
1093 else
1094 {
1095 MDrv_MFC_WriteByte(0x290A, 0x00);
1096 }
1097 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
1098 MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
1099 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
1100 }
1101
MDrv_MFC_DemoBarControl(BOOL bEnable,BOOL bDirection,U8 u8width,U8 u8color)1102 void MDrv_MFC_DemoBarControl(BOOL bEnable, BOOL bDirection, U8 u8width, U8 u8color)
1103 {
1104 U8 u8buf, u8Buf2;
1105 U16 u16frameActiveXStart, u16imageActiveXStart;
1106
1107 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
1108 MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
1109 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
1110
1111 u8buf = MDrv_MFC_ReadByte(0x2F19);
1112 u16frameActiveXStart=u8buf<<8;
1113 u8buf = MDrv_MFC_ReadByte(0x2F18);
1114 u16frameActiveXStart |=u8buf;
1115 u8buf = MDrv_MFC_ReadByte(0x2F21);
1116 u16imageActiveXStart=u8buf<<8;
1117 u8buf = MDrv_MFC_ReadByte(0x2F20);
1118 u16imageActiveXStart |=u8buf;
1119
1120 u8buf = MDrv_MFC_ReadByte(0x2F57);
1121 if(bEnable)
1122 {
1123 u8buf = (u8buf & 0x7F) | 0x80; //Line enable 0x2F57[7]
1124 if(bDirection)
1125 u8buf = (u8buf & 0xBF) | 0x40; //Vertical line direction 0x2F57[6]
1126 else
1127 u8buf = (u8buf & 0xBF) | 0x00; //Horizontal line direction 0x2F57[6]
1128 u8buf = (u8buf & 0xF0) | (u8width & 0x0F); //Line width 0x2F57[0:3]
1129 // vertical bar shift is related by HStart.
1130 if (u16frameActiveXStart>u16imageActiveXStart)
1131 {
1132 u8Buf2=(u16imageActiveXStart>(u16frameActiveXStart>>1))? (u16imageActiveXStart-(u16frameActiveXStart>>1)) : ((u16frameActiveXStart>>1)-u16imageActiveXStart);
1133 }
1134 else
1135 {
1136 u8Buf2= u16imageActiveXStart-(u16frameActiveXStart>>1);
1137 u8buf = u8buf | 0x20; // direction for shift Line 0x2F57[5], 0:R, 1:L
1138 }
1139 MDrv_MFC_WriteByte(0x2F56, u8Buf2); // shift Line
1140 MDrv_MFC_WriteByte(0x2F57, u8buf); // creat Line
1141 MDrv_MFC_WriteByte(0x30A1, u8color);//color 0~255
1142 }
1143 else
1144 {
1145 MDrv_MFC_WriteByte(0x2F57, (u8buf&0x7F)|0x00); //Line disable
1146 }
1147 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
1148 MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
1149 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
1150 }
1151
MDrv_MFC_GetHVTotal(U16 * u16HTotal,U16 * u16VTotal)1152 void MDrv_MFC_GetHVTotal(U16* u16HTotal, U16* u16VTotal)
1153 {
1154 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
1155 MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
1156 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
1157
1158 *u16HTotal = 0x0F & MDrv_MFC_ReadByte(0x2f05);
1159 *u16HTotal = (*u16HTotal << 8) | MDrv_MFC_ReadByte(0x2f04);
1160
1161 *u16VTotal = 0x0F & MDrv_MFC_ReadByte(0x2f03);
1162 *u16VTotal = (*u16VTotal << 8) | MDrv_MFC_ReadByte(0x2f02);
1163
1164 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
1165 MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
1166 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
1167 }
1168
MDrv_MFC_IsStable(void)1169 U8 MDrv_MFC_IsStable(void)
1170 {
1171 U8 u8temp;
1172 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
1173 MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
1174 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
1175
1176 u8temp = MDrv_MFC_ReadByte(0x1E49);
1177 u8temp &= 0x01;
1178
1179 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
1180 MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
1181 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
1182 return u8temp;
1183 }
1184
MDrv_MFC_SetLVDSVesaJeida(BOOL bVesaJeida)1185 void MDrv_MFC_SetLVDSVesaJeida(BOOL bVesaJeida)
1186 {
1187 bVesaJeida = (bVesaJeida>0)? 1 : 0;
1188 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
1189 MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
1190 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
1191
1192 MDrv_MFC_WriteBit(0x320B, bVesaJeida, _BIT6);
1193
1194 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
1195 MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
1196 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
1197 }
1198
MDrv_MFC_SetFrameRate(U8 u8PanelVfreq)1199 void MDrv_MFC_SetFrameRate(U8 u8PanelVfreq)
1200 {
1201 gmfcSysInfo.u8PanelVfreq = u8PanelVfreq;
1202 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
1203 MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
1204 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
1205
1206 MDrv_MFC_SetGainPhase();
1207 MDrv_MFC_SetOutDClk(u8PanelVfreq*100, TRUE);// default input frequence is 60hz free run
1208
1209 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
1210 MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
1211 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
1212 }
1213
MDrv_MFC_SlowFrameLock(BOOL OnOff)1214 void MDrv_MFC_SlowFrameLock(BOOL OnOff)
1215 {
1216 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
1217 MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
1218 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
1219
1220 if(OnOff)
1221 {
1222 MDrv_MFC_WriteByte(0x2A0C, 0x00);
1223 MDrv_MFC_WriteByte(0x2A0D, 0x50);
1224 MDrv_MFC_WriteByte(0x2A0E, 0x00);
1225 MDrv_MFC_WriteByte(0x2A0F, 0x00);
1226 }
1227 else
1228 {
1229 MDrv_MFC_WriteByte(0x2A0C, 0x00);
1230 MDrv_MFC_WriteByte(0x2A0D, 0x00);
1231 MDrv_MFC_WriteByte(0x2A0E, 0x10);
1232 MDrv_MFC_WriteByte(0x2A0F, 0x00);
1233 }
1234
1235 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
1236 MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
1237 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
1238 }
1239
MDrv_MFC_FrameLockMode(U8 u8Mode)1240 void MDrv_MFC_FrameLockMode(U8 u8Mode)
1241 {
1242 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
1243 MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
1244 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
1245 switch (u8Mode)
1246 {
1247 case 0: //disable controling (no setting for Dclk, HV total)
1248 MDrv_MFC_WriteByteMask(0x1E4C, 0x80, 0xC0); // bit [7:6]
1249 break;
1250 case 1: //frame lock
1251 MDrv_MFC_WriteByteMask(0x1E4C, 0x00, 0xC0); // bit [7:6]
1252 break;
1253 case 2: //freerun
1254 MDrv_MFC_WriteByteMask(0x1E4C, 0x40, 0xC0); // bit [7:6]
1255 break;
1256 default:
1257 MDrv_MFC_WriteByteMask(0x1E4C, 0x00, 0xC0); // bit [7:6]
1258 break;
1259 }
1260 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
1261 MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
1262 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
1263 }
1264
MDrv_MFC_Reset(void)1265 void MDrv_MFC_Reset(void)
1266 {
1267 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
1268 MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
1269 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
1270
1271 //MDrv_MFC_WriteByte(0x1084, 0x01); // Sram boot code reset
1272 MDrv_MFC_WriteByte(0x1E03, 0x01);
1273 //udelay(1000 * 100);
1274 MDrv_MFC_WriteByte(0x1E03, 0x00);
1275
1276 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
1277 MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
1278 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
1279 }
1280
MDrv_MFC_UpdateSW(void)1281 void MDrv_MFC_UpdateSW(void)
1282 {
1283 MDrv_MFC_SramLoadCode();
1284 }
1285
MDrv_MFC_SetReverseMode(U8 u8MirrorMode)1286 void MDrv_MFC_SetReverseMode(U8 u8MirrorMode)
1287 {
1288 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
1289 MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
1290 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
1291
1292 MDrv_MFC_SetMirrorMode((MirrorModeType)u8MirrorMode);
1293
1294 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
1295 MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
1296 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
1297 }
1298
MDrv_MFC_SetLVDSBit(U8 u8BitNum)1299 void MDrv_MFC_SetLVDSBit(U8 u8BitNum)
1300 {
1301 if(u8BitNum==6)
1302 u8BitNum = 0x0C;
1303 else if(u8BitNum==8)
1304 u8BitNum = 0x08;
1305 else
1306 u8BitNum = 0x00;
1307 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
1308 MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
1309 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
1310
1311 //0x320A=0x08:8bits TI mode, 0x0C:6bits TI mode, 0x00:others
1312 MDrv_MFC_WriteByte(0x320A, u8BitNum);
1313
1314 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
1315 MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
1316 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
1317 }
1318
1319
MDrv_MFC_SetODCTable(void)1320 void MDrv_MFC_SetODCTable(void)
1321 {
1322 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
1323 MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
1324 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
1325
1326 /*
1327 MDrv_MFC_InitializeOD(tOverDrive);
1328 if( MDrv_MFC_ReadByte(0x1E48)>0 && MDrv_MFC_ReadByte(0x1E48)<=3 )
1329 {
1330 if(MDrv_MFC_ReadByte(0x1E48) == 1)//42"
1331 MDrv_MFC_InitializeOD(tOD42);
1332 else if(MDrv_MFC_ReadByte(0x1E48) == 2)//47"
1333 MDrv_MFC_InitializeOD(tOD47);
1334 else if(MDrv_MFC_ReadByte(0x1E48) == 3)//GIP 37"
1335 MDrv_MFC_InitializeOD(tOD37);
1336 }
1337 */
1338
1339 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
1340 MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
1341 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
1342 }
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411 /*
1412 MST_MFC_STATUS_t gMfcType;
1413 void MDrv_MFC_GetMfcInfo(void)
1414 {
1415 U8 u8Temp;
1416 U16 u16Temp;
1417
1418 u8Temp = MDrv_MFC_ReadByte(0x29CF);
1419 gMfcType.Film22Mode = _bit6_(u8Temp);
1420 gMfcType.Film32Mode = _bit5_(u8Temp);
1421 gMfcType.Film22Idx = _bit4_(u8Temp);
1422 gMfcType.Film32Idx = ( u8Temp >> 1 ) & 0x07;
1423 gMfcType.FDUP = _bit0_(u8Temp);
1424
1425 u8Temp = MDrv_MFC_ReadByte(0x29CE);
1426 gMfcType.FrameEnd = _bit7_(u8Temp);
1427 gMfcType.Skip_Thd = ( u8Temp >> 4 ) & 0x03;
1428
1429 u16Temp = MDrv_MFC_Read2Bytes(0x29CC);
1430 gMfcType.GMVX = u16Temp & 0x00FE;
1431 gMfcType.GMVY = (u16Temp & 0x7F00) >> 8;
1432 gMfcType.GMVConfirm = ( ( (u16Temp & 0x0001) << 1) | (u16Temp >> 15));
1433
1434 gMfcType.MinSAD = MDrv_MFC_Read2Bytes(0x29C8);
1435 gMfcType.MaxSAD_MSB = MDrv_MFC_ReadByte(0x29CB);
1436 gMfcType.MinSAD_MSB= MDrv_MFC_ReadByte(0x29C9);
1437 gMfcType.MovingBlkCnt = MDrv_MFC_Read2Bytes(0x29EC) & 0x3fff;
1438 gMfcType.maxXNegSpeed = MDrv_MFC_ReadByte(0x29C0);
1439 gMfcType.maxXPosSpeed = MDrv_MFC_ReadByte(0x29C2);
1440 gMfcType.maxYNegSpeed = MDrv_MFC_ReadByte(0x29C1);
1441 gMfcType.maxYPosSpeed = MDrv_MFC_ReadByte(0x29C3);
1442 gMfcType.ErrorBlk1 = MDrv_MFC_Read2Bytes(0x29E0) & 0x3fff;
1443 gMfcType.ErrorBlk2 = MDrv_MFC_Read2Bytes(0x29E2) & 0x3fff;
1444 gMfcType.ErrorBlk3 = MDrv_MFC_Read2Bytes(0x29E4) & 0x3fff;
1445 gMfcType.ErrorBlk4 = MDrv_MFC_Read2Bytes(0x29E6) & 0x3fff;
1446 gMfcType.ErrorBlk5 = MDrv_MFC_Read2Bytes(0x29E8) & 0x3fff;
1447 gMfcType.ErrorBlk6 = MDrv_MFC_Read2Bytes(0x29EA) & 0x3fff;
1448 gMfcType.gmvBlkCnt = MDrv_MFC_Read2Bytes(0x29D2);
1449 gMfcType.mv0BlkCnt = MDrv_MFC_Read2Bytes(0x29D4);
1450 gMfcType.cplxBlkCnt2 = MDrv_MFC_Read2Bytes(0x29D6);
1451 gMfcType.GMV0Err = MDrv_MFC_Read2Bytes(0x29DC);
1452 gMfcType.MINonContinuousBoundary = MDrv_MFC_Read2Bytes(0x29DE);
1453 gMfcType.cplxBlkCnt = MDrv_MFC_Read2Bytes(0x29EE);
1454 gMfcType.veryCplxBlkCnt = MDrv_MFC_Read2Bytes(0x29F8);
1455 gMfcType.unMatchPointCnt = MDrv_MFC_Read2Bytes(0x209A);
1456 }
1457
1458
1459 U8 firstMC_end;
1460 U8 beforeFirstME;
1461 void getFirstMC(void)
1462 {
1463 if (gmfcSysInfo.u8PanelVfreq==60)
1464 {
1465 if ( gMfcType.Film22Mode )
1466 firstMC_end = !gMfcType.Film22Idx;
1467 else if ( gMfcType.Film32Mode )
1468 firstMC_end = ( 0 == gMfcType.Film32Idx ) || ( 2 == gMfcType.Film32Idx );
1469 else
1470 firstMC_end = 1;
1471 }
1472 else
1473 {
1474 if ( gMfcType.Film22Mode )
1475 firstMC_end = !gMfcType.Film22Idx && !gMfcType.FDUP;
1476 else if ( gMfcType.Film32Mode )
1477 firstMC_end = ( 0 == gMfcType.Film32Idx && !gMfcType.FDUP ) || ( 2 == gMfcType.Film32Idx && gMfcType.FDUP );
1478 else
1479 firstMC_end = !gMfcType.FDUP;
1480
1481 if ( gMfcType.Film22Mode )
1482 beforeFirstME = gMfcType.Film22Idx && gMfcType.FDUP;
1483 else if ( gMfcType.Film32Mode )
1484 beforeFirstME = ( 4 == gMfcType.Film32Idx && gMfcType.FDUP ) || ( 2 == gMfcType.Film32Idx && !gMfcType.FDUP );
1485 else
1486 beforeFirstME = gMfcType.FDUP;
1487 }
1488 }
1489
1490
1491 void MDrv_MFC_OtherPatches(void)
1492 {
1493 U8 temp, DebugLight1=0, DebugLight2=0;
1494 // patch No.1 : Force GMVY
1495 if( gMfcType.GMVY < 0x04 || gMfcType.GMVY > 0x7C)
1496 {
1497 if( gMfcType.GMVY < 0x04)
1498 MDrv_MFC_WriteByte(0x263D, 0x04);
1499 else
1500 MDrv_MFC_WriteByte(0x263D, 0x7C); // Force GMVY
1501 MDrv_MFC_WriteByte(0x263C, gMfcType.GMVX); // Force GMVX
1502 DebugLight1 |= _BIT0;
1503 }
1504 else
1505 {
1506 DebugLight1 &= ~_BIT0;
1507 MDrv_MFC_WriteByte(0x263C, 0);// disable Force GMVX
1508 MDrv_MFC_WriteByte(0x263D, 0);// disable Force GMVY
1509 }
1510 // patch No.2 : Program Boundry GMVX
1511 if( gMfcType.GMVConfirm != 0)
1512 {
1513 temp = absGmvX(gMfcType.GMVX);
1514 MDrv_MFC_WriteByte(0x2954, (temp > 0x6C)? 0x7C: temp+0x10);
1515 }
1516 else
1517 MDrv_MFC_WriteByte(0x2954, 0x10);
1518
1519 // patch No.3 : Keep zero On/Off
1520 if(gMfcType.mv0BlkCnt < 0x100)
1521 {
1522 MDrv_MFC_WriteByte(0x2953, 0x00);
1523 DebugLight1 |= _BIT1;
1524 }
1525 else
1526 {
1527 MDrv_MFC_WriteByte(0x2953, 0x80);
1528 DebugLight1 &= ~_BIT1;
1529 }
1530
1531 #if 1 // patch No.4 : tango broken head and hand
1532 if (MaxSpeedDifToGMV>=0x06
1533 && MinSpeedDifToGMV <=0x02
1534 && MaxSpeedDifToGMV- MinSpeedDifToGMV >= 0x4
1535 && absGmvX(gMfcType.GMVX)> 0x10
1536 && gMfcType.ErrorBlk1> 30
1537 //&& gMfcType.unMatchPointCnt >2000
1538 && gMfcType.MINonContinuousBoundary > 10
1539 && gMfcType.mv0BlkCnt > 500 && gMfcType.mv0BlkCnt < 10000
1540 )
1541 {
1542 DebugLight2 |= 0xc0;
1543 MDrv_MFC_WriteByte(0x2935,(Posdiff(255, (absGmvX(gMfcType.GMVX)<<2))|0x2)); // errblk TH min(gMfcType.MINonContinuousBoundary,128)
1544 //MDrv_MFC_WriteByte(0x2647,(Posdiff(63, 0|0x80)));// cplx BLK OutRange TH absGmvX(gMfcType.GMVX)<<8)
1545 MDrv_MFC_WriteByte(0x293F, 0xc6);
1546 }
1547 else
1548 {
1549 MDrv_MFC_WriteByte(0x2935,0xfe);
1550 //MDrv_MFC_WriteByte(0x2647,0x50);
1551 if(gMfcType.Film22Mode||gMfcType.Film32Mode) MDrv_MFC_WriteByte(0x293F, 0x06);
1552 DebugLight2 &= ~0xc0;
1553 }
1554 #endif
1555
1556 #if 1 // patch No.5 : dynamic search range
1557 if(beforeFirstME)
1558 {
1559 MDrv_MFC_WriteByte(0x2916, 0x60);
1560 MDrv_MFC_WriteByte(0x2917, 0x60);
1561 }
1562
1563 if( gMfcType.mv0BlkCnt>=((gMfcType.cplxBlkCnt2>>7)*127) && absGmvX(gMfcType.GMVX)<0x50)
1564 {
1565 MDrv_MFC_WriteByte(0x2956, min(absGmvX(gMfcType.GMVX)+0x48,0x7c));
1566 //MDrv_MFC_WriteByte(0x2956, absGmvY(gMfcType.GMVY)+0x20);
1567 //gDebugLight2 |= 0x0f;
1568 }
1569 else
1570 {
1571 MDrv_MFC_WriteByte(0x2956, 0x7c);
1572 //gDebugLight2 &= ~0x0f;
1573 }
1574 #endif
1575
1576 #if 1
1577 // patch No.7 : patch for strong Halo setting
1578 if( (absGmvX(gMfcType.GMVX) < 0x04))
1579 {
1580 MDrv_MFC_WriteByte(0x268C, 0X18); //--weak setting
1581 }
1582 else
1583 {
1584 MDrv_MFC_WriteByte(0x268C, 0X98);
1585 }
1586 #endif
1587
1588 MDrv_MFC_WriteByte(0x2620, DebugLight1 );
1589 MDrv_MFC_WriteByte(0x2621, DebugLight2 );
1590
1591 }
1592
1593 void MDrv_MFC_SWPatch(void)
1594 {
1595 unsigned long u32Prejiiffes=0, u32Nowjiiffes=0;
1596 u32Prejiiffes = u32Nowjiiffes;
1597 u32Nowjiiffes = jiffies;
1598 printf("\n\n\n\n\n The interval = [%d]", (U16)(u32Nowjiiffes - u32Prejiiffes));
1599
1600 // enter serial debug mode
1601 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugEnter);
1602 MDrv_MFC_SetSerialDebugMode(MFC_CpuWait);
1603 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBus);
1604
1605
1606 Drv_MFC_GetMfcInfo();
1607 Drv_MFC_OtherPatches();
1608
1609
1610 // exit serial debug mode
1611 MDrv_MFC_SetSerialDebugMode(MFC_I2cUseBusN);
1612 MDrv_MFC_SetSerialDebugMode(MFC_CpuWaitN);
1613 MDrv_MFC_SetSerialDebugMode(MFC_SerialDebugExit);
1614 }
1615 */
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654 //------------------------------------------------------------------------------
1655 /// MFC get set data from user test use
1656 //------------------------------------------------------------------------------
1657
MDrv_MFC_DbgReadByte(U16 u16Addr)1658 U8 MDrv_MFC_DbgReadByte(U16 u16Addr)
1659 {
1660 return MDrv_MFC_ReadByte(u16Addr);
1661 }
1662
MDrv_MFC_DbgWriteByte(U16 u16Addr,U8 u8Val)1663 void MDrv_MFC_DbgWriteByte(U16 u16Addr, U8 u8Val)
1664 {
1665 MDrv_MFC_WriteByte(u16Addr, u8Val);
1666 }
1667
MDrv_MFC_IIC_Read(U8 u8ChIIC,U8 u8SlaveIdIIC,U8 * pu8AddrIIC,U8 u8AddrSizeIIC,U8 * pu8BufIIC,U32 u32BufSizeIIC)1668 BOOL MDrv_MFC_IIC_Read(U8 u8ChIIC, U8 u8SlaveIdIIC, U8 *pu8AddrIIC, U8 u8AddrSizeIIC, U8 *pu8BufIIC, U32 u32BufSizeIIC )
1669 {
1670 U16 u16Temp=0x0100;
1671 BOOL ret;
1672 extern BOOL MDrv_IIC_ReadBytes(U16 u16BusNumSlaveID, U8 ucSubAdr, U8* paddr, U16 ucBufLen, U8* pBuf);
1673
1674 u8ChIIC = u8ChIIC;
1675 u16Temp = u16Temp | ((U16)u8SlaveIdIIC);
1676
1677 ret = MDrv_IIC_ReadBytes(u16Temp, u8AddrSizeIIC, pu8AddrIIC, (U16)u32BufSizeIIC, pu8BufIIC);
1678 return ret;
1679 }
1680
MDrv_MFC_IIC_Write(U8 u8ChIIC,U8 u8SlaveIdIIC,U8 * pu8AddrIIC,U8 u8AddrSizeIIC,U8 * pu8BufIIC,U32 u32BufSizeIIC)1681 BOOL MDrv_MFC_IIC_Write(U8 u8ChIIC, U8 u8SlaveIdIIC, U8 *pu8AddrIIC, U8 u8AddrSizeIIC, U8 *pu8BufIIC, U32 u32BufSizeIIC)
1682 {
1683 U16 u16Temp=0x0100;
1684 BOOL ret;
1685 extern BOOL MDrv_IIC_WriteBytes(U16 u16BusNumSlaveID, U8 AddrCnt, U8* pu8addr, U16 u16size, U8* pBuf);
1686
1687 u8ChIIC = u8ChIIC;
1688 u16Temp = u16Temp | ((U16)u8SlaveIdIIC);
1689 //thchen printf("MDrv_MFC_IIC_Write\n");
1690 ret = MDrv_IIC_WriteBytes(u16Temp, u8AddrSizeIIC, pu8AddrIIC, (U16)u32BufSizeIIC , pu8BufIIC);
1691 return ret;
1692 }
1693 //------------------------------------------------------------------------------
1694 // variable
1695 //------------------------------------------------------------------------------
1696 #if 0
1697 static BOOL bExitMFCThread;
1698 static BOOL bReleaseMFCThread;
1699 static struct timer_list g_timer;
1700
1701 void _MDrv_MFC_Thread(unsigned long arg)
1702 {
1703 unsigned long u32jiiffes;
1704 struct timer_list *t_timer;
1705
1706 // timer returns immediately if timer exit flag is true
1707 if(bExitMFCThread == TRUE) {
1708 bReleaseMFCThread = TRUE;
1709 return;
1710 }
1711
1712 //MDrv_MFC_SWPatch();
1713 t_timer = (struct timer_list *)arg;
1714 u32jiiffes = jiffies;
1715 // timer is triggered at next 15 Ms
1716 t_timer->expires = u32jiiffes + _15MS;
1717 add_timer(t_timer);
1718 }
1719
1720 void _MDrv_MFC_StartTimer(void)
1721 {
1722 unsigned long u32jiiffes = jiffies;
1723 bExitMFCThread = FALSE;
1724 bReleaseMFCThread = FALSE;
1725
1726 init_timer(&g_timer);
1727 g_timer.data = (unsigned long)&g_timer;
1728 g_timer.function = _MDrv_MFC_Thread;
1729 g_timer.expires = u32jiiffes + _15MS;
1730 add_timer(&g_timer);
1731 }
1732
1733 void _MDrv_MFC_DeleteTimer(void)
1734 {
1735 U32 u32TimeOut = 5;
1736 bExitMFCThread = TRUE;
1737
1738 /* system waits thread exit success or time out after 15*5 ms. */
1739 while(u32TimeOut--)
1740 {
1741 msleep(15);
1742 if(bReleaseMFCThread == TRUE)
1743 break;
1744 }
1745 /* delete timer */
1746 del_timer_sync(&g_timer);
1747 }
1748 #endif
1749