From 9a057662621cfe7425223f8195570411f8c629d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomislav=20Filipc=CC=8Cic=CC=81?= Date: Sun, 5 May 2013 18:22:23 +0200 Subject: [PATCH 01/17] SABnzbd-Suite: remove debugging --- .../service/downloadmanager/SABnzbd-Suite/source/default.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/addons/service/downloadmanager/SABnzbd-Suite/source/default.py b/packages/addons/service/downloadmanager/SABnzbd-Suite/source/default.py index 8879cdb0af..9845897e72 100644 --- a/packages/addons/service/downloadmanager/SABnzbd-Suite/source/default.py +++ b/packages/addons/service/downloadmanager/SABnzbd-Suite/source/default.py @@ -69,7 +69,7 @@ if sabNzbdLaunch: # start checking SABnzbd for activity and prevent sleeping if necessary socket.setdefaulttimeout(timeout) - + # perform some initial checks and log essential settings shouldKeepAwake = (__settings__.getSetting('SABNZBD_KEEP_AWAKE').lower() == 'true') wakePeriodically = (__settings__.getSetting('SABNZBD_PERIODIC_WAKE').lower() == 'true') @@ -118,10 +118,8 @@ while (not xbmc.abortRequested): # reset idle timer if queue is downloading/reparing/verifying/extracting if sabIsActive: xbmc.executebuiltin('InhibitIdleShutdown(true)') - xbmc.log('preventing sleep') else: xbmc.executebuiltin('InhibitIdleShutdown(false)') - xbmc.log('not preventing sleep') # calculate and set the time to wake up at (if any) if wakePeriodically: From 5e383a0809cc3fca4e5a4e253dcc25bbfabdb22e Mon Sep 17 00:00:00 2001 From: Henk Wiedig Date: Sun, 5 May 2013 22:16:22 +0200 Subject: [PATCH 02/17] vdr-addon: update xvdr to 33afe59 --- packages/3rdparty/multimedia/vdr-plugin-xvdr/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/3rdparty/multimedia/vdr-plugin-xvdr/meta b/packages/3rdparty/multimedia/vdr-plugin-xvdr/meta index c2ccd295b5..bdd6f1c7af 100644 --- a/packages/3rdparty/multimedia/vdr-plugin-xvdr/meta +++ b/packages/3rdparty/multimedia/vdr-plugin-xvdr/meta @@ -19,7 +19,7 @@ ################################################################################ PKG_NAME="vdr-plugin-xvdr" -PKG_VERSION="935a294" +PKG_VERSION="33afe59" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" From c0ab05a5b0682fbe079c7a89e7cfd5fb6e221f85 Mon Sep 17 00:00:00 2001 From: Daniel Forsberg Date: Sun, 5 May 2013 23:55:23 +0300 Subject: [PATCH 03/17] contributing: clean up and clarified... --- CONTRIBUTING.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 134ef50b99..aa5004e450 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -10,15 +10,14 @@ If you are at all unsure whether it's a bug in OpenELEC or a problem with someth else, post in the OpenELEC [Forum] instead. If it turns out that it is a bug, an issue can always bee opend later. -If you are sure that it's a bug in OpenELEC, open a new [issue] and try to -answer the following questions: - +If you are sure that it's a bug in OpenELEC and you have not found a similar issue, open a new [issue] +and try to answer the following questions: - What did you do? - What did you expect to happen? - What happened instead? -Please also search for similar issues. It's possible somebody has encountered this already. -It is always good to provide the zip file found in the logfiles samba share. +It is also importent to provide logs for debugging. +A zip file can be found in the logfiles samba share, this will contain all the logs needed. Make sure to specify which version of OpenELEC you are using. - OpenELEC version From 6a7f8776e80479859d939f735caa19df5d26bbc9 Mon Sep 17 00:00:00 2001 From: Daniel Forsberg Date: Sun, 5 May 2013 23:59:47 +0300 Subject: [PATCH 04/17] contributing: added link to support logs --- CONTRIBUTING.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index aa5004e450..ec73e42ee7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -17,7 +17,7 @@ and try to answer the following questions: - What happened instead? It is also importent to provide logs for debugging. -A zip file can be found in the logfiles samba share, this will contain all the logs needed. +A zip file can be found in the [logfiles] samba share, this will contain all the logs needed. Make sure to specify which version of OpenELEC you are using. - OpenELEC version @@ -46,3 +46,4 @@ particular feature into OpenELEC. [Forum]: http://openelec.tv/forum [issue]: https://github.com/OpenELEC/OpenELEC.tv/issues [webchat]: http://openelec.tv/support/chat +[logfiles]: http://wiki.openelec.tv/index.php?title=OpenELEC_FAQ#Support_Logs From aee3ab6414bd5b8066417926d008071fa2a4d7d8 Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Tue, 7 May 2013 13:50:18 +0300 Subject: [PATCH 05/17] linux: update dvbsky patch now supports silab c/t/t2 demod many thanks to nibble.max --- .../linux/patches/3.9/linux-210-dvbsky.patch | 3759 ++++++++++++++++- 1 file changed, 3717 insertions(+), 42 deletions(-) diff --git a/packages/linux/patches/3.9/linux-210-dvbsky.patch b/packages/linux/patches/3.9/linux-210-dvbsky.patch index e084c8cc65..ec6ac08737 100644 --- a/packages/linux/patches/3.9/linux-210-dvbsky.patch +++ b/packages/linux/patches/3.9/linux-210-dvbsky.patch @@ -1,7 +1,7 @@ diff -urN a/drivers/media/dvb-frontends/Kconfig b/drivers/media/dvb-frontends/Kconfig --- a/drivers/media/dvb-frontends/Kconfig 2013-04-29 08:36:01.000000000 +0800 -+++ b/drivers/media/dvb-frontends/Kconfig 2013-05-03 17:03:57.000000000 +0800 -@@ -200,6 +200,20 @@ ++++ b/drivers/media/dvb-frontends/Kconfig 2013-05-06 21:23:52.000000000 +0800 +@@ -200,6 +200,27 @@ help A DVB-S/S2 tuner module. Say Y when you want to support this frontend. @@ -18,6 +18,13 @@ diff -urN a/drivers/media/dvb-frontends/Kconfig b/drivers/media/dvb-frontends/Kc + default m if !MEDIA_SUBDRV_AUTOSELECT + help + A DVB-C tuner module. Say Y when you want to support this frontend. ++ ++config DVB_SIT2 ++ tristate "SIT2 based" ++ depends on DVB_CORE && I2C ++ default m if !MEDIA_SUBDRV_AUTOSELECT ++ help ++ A DVB-T2/T/C tuner module. Say Y when you want to support this frontend. + config DVB_SI21XX tristate "Silicon Labs SI21XX based" @@ -4377,14 +4384,3574 @@ diff -urN a/drivers/media/dvb-frontends/m88ds3103_priv.h b/drivers/media/dvb-fro +#endif /* M88DS3103_PRIV_H */ diff -urN a/drivers/media/dvb-frontends/Makefile b/drivers/media/dvb-frontends/Makefile --- a/drivers/media/dvb-frontends/Makefile 2013-04-29 08:36:01.000000000 +0800 -+++ b/drivers/media/dvb-frontends/Makefile 2013-05-03 17:04:31.000000000 +0800 -@@ -103,4 +103,5 @@ ++++ b/drivers/media/dvb-frontends/Makefile 2013-05-06 21:24:13.000000000 +0800 +@@ -103,4 +103,6 @@ obj-$(CONFIG_DVB_RTL2832) += rtl2832.o obj-$(CONFIG_DVB_M88RS2000) += m88rs2000.o obj-$(CONFIG_DVB_AF9033) += af9033.o - +obj-$(CONFIG_DVB_M88DS3103) += m88ds3103.o +obj-$(CONFIG_DVB_M88DC2800) += m88dc2800.o ++obj-$(CONFIG_DVB_SIT2) += sit2.o +diff -urN a/drivers/media/dvb-frontends/sit2.c b/drivers/media/dvb-frontends/sit2.c +--- a/drivers/media/dvb-frontends/sit2.c 1970-01-01 08:00:00.000000000 +0800 ++++ b/drivers/media/dvb-frontends/sit2.c 2013-05-07 17:13:19.000000000 +0800 +@@ -0,0 +1,1294 @@ ++/* ++ SIT2 - DVB-T2/T/C demodulator and tuner ++ ++ Copyright (C) 2013 Max Nibble ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++*/ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "dvb_frontend.h" ++#include "sit2_priv.h" ++#include "sit2.h" ++ ++int sit2_debug = 1; ++module_param(sit2_debug, int, 0644); ++MODULE_PARM_DESC(sit2_debug, "Activates frontend debugging (default:0)"); ++#define dprintk(args...) \ ++ do { \ ++ if (sit2_debug) \ ++ printk(KERN_INFO "sit2: " args); \ ++ } while (0) ++ ++/*global state*/ ++struct sit2_state { ++ struct dvb_frontend frontend; ++ const struct sit2_config *config; ++ struct i2c_adapter *i2c; ++ ++ bool isInited; ++ u8 demod_addr; ++ u8 tuner_addr; ++ u8 sndBuffer[64]; ++ u8 revBuffer[64]; ++ sit2_tuner_reply tuner_reply; ++ sit2_demod_reply demod_reply; ++ ++ fe_delivery_system_t current_system; ++ int plp_id; ++ u32 stream; ++ u32 dvbc_symrate; ++}; ++ ++static u32 sit2_writebytes(struct sit2_state *state, u32 len, u8 *data, bool isTuner) ++{ ++ int ret; ++ u32 uret = 0; ++ struct i2c_msg w_msg = { .flags = 0 }; ++ w_msg.addr = (isTuner) ? state->tuner_addr : state->demod_addr;; ++ w_msg.buf = data; ++ w_msg.len = len; ++ ret = i2c_transfer(state->i2c, &w_msg, 1); ++ if(ret != 1) { ++ printk(KERN_INFO ++ "%s: error! addr=%x len=%d, ret=%d\n", ++ __func__, w_msg.addr, len, ret); ++ } ++ else ++ uret = len; ++ return uret; ++} ++ ++static u32 sit2_readbytes(struct sit2_state *state, u32 len, u8 *data, bool isTuner) ++{ ++ int ret; ++ u32 uret = 0; ++ struct i2c_msg r_msg = { .flags = I2C_M_RD }; ++ r_msg.addr = (isTuner) ? state->tuner_addr : state->demod_addr; ++ r_msg.len = len; ++ r_msg.buf = data; ++ ret = i2c_transfer(state->i2c, &r_msg, 1); ++ if(ret != 1) { ++ printk(KERN_INFO ++ "%s: error! addr=%x len=%d, ret=%d\n", ++ __func__, r_msg.addr, len, ret); ++ } ++ else ++ uret = len; ++ return uret; ++} ++ ++static u8 sit2_tuner_ResponseStatus(struct sit2_state *state, u8 Data) ++{ ++ state->tuner_reply.tunint = (Data & 0x01) ? 1 : 0; ++ state->tuner_reply.atvint = (Data & 0x02) ? 1 : 0; ++ state->tuner_reply.dtvint = (Data & 0x04) ? 1 : 0; ++ state->tuner_reply.err = (Data & 0x40) ? 1 : 0; ++ state->tuner_reply.cts = (Data & 0x80) ? 1 : 0; ++ return (state->tuner_reply.err ? SIT2_ERROR_ERR : SIT2_ERROR_OK); ++} ++ ++static u8 sit2_demod_ResponseStatus(struct sit2_state *state, u8 Data) ++{ ++ state->demod_reply.ddint = (Data & 0x01) ? 1 : 0; ++ state->demod_reply.scanint = (Data & 0x02) ? 1 : 0; ++ state->demod_reply.err = (Data & 0x40) ? 1 : 0; ++ state->demod_reply.cts = (Data & 0x80) ? 1 : 0; ++ return (state->demod_reply.err ? SIT2_ERROR_ERR : SIT2_ERROR_OK); ++} ++ ++static u8 sit2_pollForResponse(struct sit2_state *state, u32 nbBytes, u8 *pByteBuffer, bool isTuner) ++{ ++ u32 ulCount, ulTick, ulDelay; ++ ulCount = 0; ++ ulTick = 50; ++ ulDelay = 1000/ulTick; ++ ++ while(ulCount <= ulTick) { ++ if (sit2_readbytes(state, nbBytes, pByteBuffer, isTuner) != nbBytes) { ++ dprintk("%s: tuner[%d], readbytes[%d] error!\n", __func__, isTuner, nbBytes); ++ return SIT2_ERROR_POLLING; ++ } ++ /* return response err flag if CTS set */ ++ if (pByteBuffer[0] & 0x80) { ++ if (isTuner) ++ return sit2_tuner_ResponseStatus(state, pByteBuffer[0]); ++ else ++ return sit2_demod_ResponseStatus(state, pByteBuffer[0]); ++ } ++ msleep(ulDelay); ++ ulCount++; ++ } ++ ++ dprintk("%s: tuner[%d], time out error!\n", __func__, isTuner); ++ return SIT2_ERROR_TIMEOUT; ++} ++ ++static u8 sit2_sendCommand(struct sit2_state *state, u32 sndBytes, u32 revBytes, bool isTuner) ++{ ++ u8 uret = SIT2_ERROR_OK; ++ if ((sndBytes > 64) || (revBytes > 64)) { ++ printk(KERN_INFO ++ "%s: error! sndBytes=%x revBytes=%d\n", ++ __func__, sndBytes, revBytes); ++ return SIT2_ERROR_PAREMETER; ++ } ++ ++ if (sit2_writebytes(state, sndBytes, state->sndBuffer, isTuner) != sndBytes) { ++ ++ dprintk("%s: tuner[%d],writebytes[%d] error!\n", __func__, isTuner, sndBytes); ++ return SIT2_ERROR_ERR; ++ } ++ ++ if(revBytes > 0) ++ uret = sit2_pollForResponse(state, revBytes, state->revBuffer, isTuner); ++ return uret; ++} ++ ++static u8 sit2_sendProperty(struct sit2_state *state, u32 prop, u32 data, bool isTuner) ++{ ++ state->sndBuffer[0] = 0x14; ++ state->sndBuffer[1] = 0; ++ state->sndBuffer[2] = (u8)(prop & 0xff); ++ state->sndBuffer[3] = (u8)((prop >> 8) & 0xff); ++ state->sndBuffer[4] = (u8)(data & 0xff); ++ state->sndBuffer[5] = (u8)((data >> 8) & 0xff); ++ return sit2_sendCommand(state, 6, 4, isTuner); ++} ++ ++static u8 sit2_startFirmware(struct sit2_state *state, bool isTuner) ++{ ++ state->sndBuffer[0] = 0x01; ++ state->sndBuffer[1] = 1; ++ return sit2_sendCommand(state, 2, 1, isTuner); ++} ++ ++static u8 sit2_demod_tuner_i2c_enable(struct sit2_state *state, u8 onOff) ++{ ++ dprintk("%s, on=%d\n", __func__, onOff); ++ state->sndBuffer[0] = 0xc0; ++ state->sndBuffer[1] = 13; ++ state->sndBuffer[2] = (onOff > 0) ? 1 : 0; ++ return sit2_sendCommand(state, 3, 0, false); ++} ++ ++static u8 sit2_tuner_xout_enable(struct sit2_state *state, u8 onOff) ++{ ++ state->sndBuffer[0] = 0xc0; ++ state->sndBuffer[1] = 0; ++ state->sndBuffer[2] = (onOff > 0) ? (3 << 2) : 0; ++ return sit2_sendCommand(state, 3, 1, true); ++} ++ ++static u8 sit2_tuner_enable_FEF(struct sit2_state *state, u8 fef) ++{ ++ u8 uret = SIT2_ERROR_OK; ++ if(fef) ++ uret = sit2_sendProperty(state, 0x0711, 3, true); ++ else ++ uret = sit2_sendProperty(state, 0x0711, 1, true); ++ return uret; ++} ++ ++static u8 sit2_tuner_setup_FEFMode(struct sit2_state *state, u8 fef) ++{ ++ u8 uret = SIT2_ERROR_OK; ++ state->sndBuffer[0] = 0x12; ++ state->sndBuffer[1] = 1; ++ state->sndBuffer[2] = 1; ++ state->sndBuffer[3] = 1; ++ state->sndBuffer[4] = 1; ++ state->sndBuffer[5] = 1; ++ uret = sit2_sendCommand(state, 6, 6, true); ++ ++ sit2_sendProperty(state, 0x070e, 0, true); ++ sit2_sendProperty(state, 0x0708, 0, true); ++ ++ sit2_tuner_enable_FEF(state, fef); ++ ++ return uret; ++} ++ ++static u8 sit2_tuner_standby(struct sit2_state *state) ++{ ++ state->sndBuffer[0] = 0x16; ++ state->sndBuffer[1] = 0; ++ return sit2_sendCommand(state, 2, 1, true); ++} ++ ++static u8 sit2_tuner_powerUp(struct sit2_state *state) ++{ ++ state->sndBuffer[0] = 0xc0; ++ state->sndBuffer[1] = 0; ++ state->sndBuffer[2] = 0; ++ state->sndBuffer[3] = 0; ++ state->sndBuffer[4] = 0; ++ state->sndBuffer[5] = 1; ++ state->sndBuffer[6] = 1; ++ state->sndBuffer[7] = 1; ++ state->sndBuffer[8] = 1; ++ state->sndBuffer[9] = 1; ++ state->sndBuffer[10] = 1; ++ state->sndBuffer[11] = 2; /* 24MHz */ ++ state->sndBuffer[12] = 0; ++ state->sndBuffer[13] = 0; ++ state->sndBuffer[14] = 1; ++ ++ return sit2_sendCommand(state, 15, 1, true); ++} ++ ++static u8 sit2_tuner_getStatus(struct sit2_state *state, u8 intack) ++{ ++ state->sndBuffer[0] = 0x42; ++ state->sndBuffer[1] = intack & 0x01; ++ return sit2_sendCommand(state, 2, 12, true); ++} ++ ++static u8 sit2_tuner_wakeUp(struct sit2_state *state) ++{ ++ u8 uret, status = 0; ++ /* check CTS */ ++ uret = sit2_pollForResponse(state, 1, &status, true); ++ if((uret == SIT2_ERROR_TIMEOUT) || (status & 0x80) != 0x80) { ++ printk(KERN_INFO ++ "%s: error! tuner is not ready.\n", ++ __func__); ++ return SIT2_ERROR_ERR; ++ } ++ return SIT2_ERROR_OK; ++} ++ ++static u8 sit2_tuner_tuneFreq(struct sit2_state *state, u32 frequency) ++{ ++ u8 uret, status; ++ int timeout = 150; ++ u32 ulCount, ulTick, ulDelay; ++ ulCount = 0; ++ ulTick = 3; ++ ulDelay = timeout/ulTick; ++ ++ state->sndBuffer[0] = 0x41; ++ state->sndBuffer[1] = 0; ++ state->sndBuffer[2] = 0; ++ state->sndBuffer[3] = 0; ++ ++ state->sndBuffer[4] = (u8)(frequency & 0xff); ++ state->sndBuffer[5] = (u8)((frequency >> 8) & 0xff); ++ state->sndBuffer[6] = (u8)((frequency >> 16) & 0xff); ++ state->sndBuffer[7] = (u8)((frequency >> 24) & 0xff); ++ ++ uret = sit2_sendCommand(state, 8, 1, true); ++ if(uret != SIT2_ERROR_OK) ++ return uret; ++ ++ while(ulCount <= ulTick) { ++ uret = sit2_pollForResponse(state, 1, &status, true); ++ if(uret != SIT2_ERROR_OK) ++ return uret; ++ if(state->tuner_reply.tunint) ++ break; ++ msleep(ulDelay); ++ ulCount++; ++ } ++ if(state->tuner_reply.tunint == 0) ++ return SIT2_ERROR_TIMEOUT; ++ ++ timeout = 20; ++ ulCount = 0; ++ ulTick = 2; ++ ulDelay = timeout/ulTick; ++ while ( ulCount <= ulTick ) { ++ uret = sit2_pollForResponse(state, 1, &status, true); ++ if(uret != SIT2_ERROR_OK) ++ return uret; ++ if(state->tuner_reply.dtvint) ++ break; ++ msleep(ulDelay); ++ ulCount++; ++ } ++ if(state->tuner_reply.dtvint == 0) ++ return SIT2_ERROR_TIMEOUT; ++ ++ return SIT2_ERROR_OK; ++} ++ ++static u8 sit2_tuner_setFreq(struct sit2_state *state, u32 frequency, fe_delivery_system_t delsystem, u8 reqBW) ++{ ++ u8 modulation, bandwidth; ++ u8 uret; ++ sit2_tuner_enable_FEF(state, 0); ++ if (delsystem == SYS_DVBC_ANNEX_A) { ++ modulation = 3; ++ bandwidth = 8; ++ } else { ++ modulation = 2; ++ bandwidth = (reqBW <= 6) ? 6 : reqBW; ++ if(bandwidth > 8) ++ bandwidth = 8; ++ } ++ uret = sit2_sendProperty(state, 0x0703, (modulation << 4) | bandwidth, true); ++ if(uret != SIT2_ERROR_OK) ++ return uret; ++ ++ uret = sit2_tuner_tuneFreq(state, frequency); ++ if(delsystem == SYS_DVBT2) ++ sit2_tuner_enable_FEF(state, 1); ++ ++ return uret; ++} ++ ++static u8 sit2_tuner_init(struct sit2_state *state) ++{ ++ u8 uret = SIT2_ERROR_OK; ++ ++ /* wake up */ ++ uret = sit2_tuner_wakeUp(state); ++ if(uret != SIT2_ERROR_OK) ++ return uret; ++ /* power up */ ++ uret = sit2_tuner_powerUp(state); ++ if(uret != SIT2_ERROR_OK) ++ return uret; ++ /* check part info */ ++ /* load firmware */ ++ /* start firmare */ ++ uret = sit2_startFirmware(state, true); ++ if(uret != SIT2_ERROR_OK) ++ return uret; ++ ++ /* download default properties */ ++ /* ATV property */ ++ sit2_sendProperty(state, 0x0610, 1000, true); /* afc range*/ ++ sit2_sendProperty(state, 0x0611, 0, true); /* agc speed */ ++ sit2_sendProperty(state, 0x0623, (0x80 << 8) | 158, true); /* agc speed low rssi */ ++ sit2_sendProperty(state, 0x0624, 0, true); ++ sit2_sendProperty(state, 0x0603, 8, true); ++ sit2_sendProperty(state, 0x0607, (200 << 8) | 50, true); ++ sit2_sendProperty(state, 0x0601, 1, true); ++ sit2_sendProperty(state, 0x0613, (1 << 9) | (1 << 8) | (0 << 1) | 0, true); ++ sit2_sendProperty(state, 0x060c, 5000, true); ++ sit2_sendProperty(state, 0x060d, (100 << 8) | 148, true); ++ sit2_sendProperty(state, 0x0617, 0, true); ++ sit2_sendProperty(state, 0x0612, 0, true); ++ sit2_sendProperty(state, 0x0605, 0xba, true); ++ sit2_sendProperty(state, 0x0604, (1 << 9), true); ++ sit2_sendProperty(state, 0x0616, 0, true); ++ /* common property */ ++ sit2_sendProperty(state, 0x0402, 8, true); ++ sit2_sendProperty(state, 0x0401, 0, true); ++ /* DTV property */ ++ sit2_sendProperty(state, 0x0711, 0, true); /* agc freeze pin */ ++ sit2_sendProperty(state, 0x0708, 0, true); ++ sit2_sendProperty(state, 0x0702, 1, true); ++ sit2_sendProperty(state, 0x0705, (200 << 8) | 50, true); ++ sit2_sendProperty(state, 0x070c, 1, true); ++ sit2_sendProperty(state, 0x0701, 1, true); ++ sit2_sendProperty(state, 0x070d, 0, true); ++ sit2_sendProperty(state, 0x070e, 0, true); ++ sit2_sendProperty(state, 0x0710, 0, true); ++ sit2_sendProperty(state, 0x070a, (1 << 8), true); ++ sit2_sendProperty(state, 0x0706, 5000, true); ++ sit2_sendProperty(state, 0x0707, (27 << 8) | 148, true); ++ sit2_sendProperty(state, 0x0703, (2 << 4) | 8, true); ++ sit2_sendProperty(state, 0x0713, (0xff << 8) | 0xff, true); ++ sit2_sendProperty(state, 0x070f, 0, true); ++ sit2_sendProperty(state, 0x0709, 0, true); ++ sit2_sendProperty(state, 0x0704, 0xb0, true); ++ sit2_sendProperty(state, 0x0712, 16, true); ++ /* tuner property */ ++ sit2_sendProperty(state, 0x0504, 0x8000, true); ++ sit2_sendProperty(state, 0x0501, 1, true); ++ sit2_sendProperty(state, 0x0505, (1 << 10) | (1 << 9) | (1 << 8), true); ++ sit2_sendProperty(state, 0x0506, 1, true); ++ sit2_sendProperty(state, 0x0507, 127, true); ++ ++ return uret; ++} ++ ++static u8 sit2_demod_wakeUp(struct sit2_state *state, u8 resetCode, u8 funcCode) ++{ ++ u8 uret = SIT2_ERROR_OK; ++ dprintk("%s, resetCode=%d, funcCode=%d\n", __func__, resetCode, funcCode); ++ /* start clock */ ++ state->sndBuffer[0] = 0xc0; ++ state->sndBuffer[1] = 18; ++ state->sndBuffer[2] = 0; ++ state->sndBuffer[3] = 12; ++ state->sndBuffer[4] = 0; ++ state->sndBuffer[5] = 0x0d; ++ state->sndBuffer[6] = 22; ++ state->sndBuffer[7] = 0; ++ state->sndBuffer[8] = 0; ++ state->sndBuffer[9] = 0; ++ state->sndBuffer[10] = 0; ++ state->sndBuffer[11] = 0; ++ state->sndBuffer[12] = 0; ++ uret = sit2_sendCommand(state, 13, 0, false); ++ if(uret != SIT2_ERROR_OK) ++ return uret; ++ /* power up */ ++ dprintk("%s, power up\n", __func__); ++ state->sndBuffer[0] = 0xc0; ++ state->sndBuffer[1] = 6; ++ state->sndBuffer[2] = resetCode; ++ state->sndBuffer[3] = 15; ++ state->sndBuffer[4] = 0; ++ state->sndBuffer[5] = (1 << 5); ++ state->sndBuffer[6] = (2 << 4) | (funcCode & 0x0f); ++ state->sndBuffer[7] = 1; ++ uret = sit2_sendCommand(state, 8, 1, false); ++ dprintk("%s, power up[%d]\n", __func__, uret); ++ return uret; ++} ++ ++static u8 sit2_demod_powerDown(struct sit2_state *state) ++{ ++ u8 uret; ++ dprintk("%s\n", __func__); ++ state->sndBuffer[0] = 0x13; ++ uret = sit2_sendCommand(state, 1, 0, false); ++ return uret; ++} ++ ++static u8 sit2_demod_reStart(struct sit2_state *state) ++{ ++ u8 uret; ++ state->sndBuffer[0] = 0x85; ++ uret = sit2_sendCommand(state, 1, 1, false); ++ return uret; ++} ++ ++static u8 sit2_demod_romId(struct sit2_state *state, u8 *id) ++{ ++ u8 uret; ++ state->sndBuffer[0] = 0x02; ++ uret = sit2_sendCommand(state, 1, 13, false); ++ *id = state->revBuffer[12]; ++ return uret; ++} ++ ++static u8 sit2_demod_getStatus(struct sit2_state *state, u8 intack, SIT2_DD_STATUS *pStatus) ++{ ++ u8 uret; ++ state->sndBuffer[0] = 0x87; ++ state->sndBuffer[1] = intack & 0x01; ++ uret = sit2_sendCommand(state, 2, 8, false); ++ ++ pStatus->pclint = (state->revBuffer[1] >> 1) & 0x01; ++ pStatus->dlint = (state->revBuffer[1] >> 2) & 0x01; ++ pStatus->berint = (state->revBuffer[1] >> 3) & 0x01; ++ pStatus->uncorint = (state->revBuffer[1] >> 4) & 0x01; ++ pStatus->rsqint_bit5 = (state->revBuffer[1] >> 5) & 0x01; ++ pStatus->rsqint_bit6 = (state->revBuffer[1] >> 6) & 0x01; ++ pStatus->rsqint_bit7 = (state->revBuffer[1] >> 7) & 0x01; ++ ++ pStatus->pcl = (state->revBuffer[2] >> 1) & 0x01; ++ pStatus->dl = (state->revBuffer[2] >> 2) & 0x01; ++ pStatus->ber = (state->revBuffer[2] >> 3) & 0x01; ++ pStatus->uncor = (state->revBuffer[2] >> 4) & 0x01; ++ pStatus->rsqstat_bit5 = (state->revBuffer[2] >> 5) & 0x01; ++ pStatus->rsqstat_bit6 = (state->revBuffer[2] >> 6) & 0x01; ++ pStatus->rsqstat_bit7 = (state->revBuffer[2] >> 7) & 0x01; ++ ++ pStatus->modulation = state->revBuffer[3] & 0x0f; ++ pStatus->ts_bit_rate = (state->revBuffer[5] << 8) | state->revBuffer[4]; ++ pStatus->ts_clk_freq = (state->revBuffer[7] << 8) | state->revBuffer[6]; ++ ++ return uret; ++} ++ ++static u8 sit2_demod_getDVBTStatus(struct sit2_state *state, u8 intack) ++{ ++ u8 uret; ++ state->sndBuffer[0] = 0xa0; ++ state->sndBuffer[1] = intack & 0x01; ++ uret = sit2_sendCommand(state, 2, 13, false); ++ return uret; ++} ++ ++static u8 sit2_demod_getDVBT2Status(struct sit2_state *state, u8 intack) ++{ ++ u8 uret; ++ state->sndBuffer[0] = 0x50; ++ state->sndBuffer[1] = intack & 0x01; ++ uret = sit2_sendCommand(state, 2, 14, false); ++ return uret; ++} ++ ++static u8 sit2_demod_getDVBCStatus(struct sit2_state *state, u8 intack) ++{ ++ u8 uret; ++ state->sndBuffer[0] = 0x90; ++ state->sndBuffer[1] = intack & 0x01; ++ uret = sit2_sendCommand(state, 2, 9, false); ++ return uret; ++} ++ ++static u8 sit2_demod_getUncor(struct sit2_state *state, u8 rstcode) ++{ ++ u8 uret; ++ state->sndBuffer[0] = 0x84; ++ state->sndBuffer[1] = rstcode & 0x01; ++ uret = sit2_sendCommand(state, 2, 3, false); ++ return uret; ++} ++ ++static u8 sit2_demod_getBer(struct sit2_state *state, u8 rstcode) ++{ ++ u8 uret; ++ state->sndBuffer[0] = 0x82; ++ state->sndBuffer[1] = rstcode & 0x01; ++ uret = sit2_sendCommand(state, 2, 3, false); ++ return uret; ++} ++ ++static u8 sit2_demod_downloadFW(struct sit2_state *state, u8 fw[], u32 fwSize, u8 nbPerLine) ++{ ++ u8 uret = SIT2_ERROR_OK; ++ u32 line, fw_lines, line_left; ++ fw_lines = fwSize / nbPerLine; ++ line_left = fwSize - fw_lines*nbPerLine; ++ if(fw_lines > 0) { ++ for(line = 0; line < fw_lines; line++) { ++ memcpy(state->sndBuffer, fw + nbPerLine*line, nbPerLine); ++ uret = sit2_sendCommand(state, nbPerLine, 1, false); ++ if(uret != SIT2_ERROR_OK) ++ break; ++ } ++ } ++ if(line_left) { ++ memcpy(state->sndBuffer, fw + nbPerLine*fw_lines, line_left); ++ uret = sit2_sendCommand(state, line_left, 1, false); ++ } ++ return uret; ++} ++ ++static u8 sit2_demod_setMP(struct sit2_state *state, u8 mp_a, u8 mp_b, u8 mp_c, u8 mp_d) ++{ ++ state->sndBuffer[0] = 0x88; ++ state->sndBuffer[1] = mp_a; ++ state->sndBuffer[2] = mp_b; ++ state->sndBuffer[3] = mp_c; ++ state->sndBuffer[4] = mp_d; ++ return sit2_sendCommand(state, 5, 5, false); ++} ++ ++static u8 sit2_demod_setGPIO(struct sit2_state *state, u8 gpMode_0, u8 gpRead_0, u8 gpMode_1, u8 gpRead_1) ++{ ++ state->sndBuffer[0] = 0x12; ++ state->sndBuffer[1] = (gpRead_0 << 7) | gpMode_0; ++ state->sndBuffer[2] = (gpRead_1 << 7) | gpMode_1; ++ return sit2_sendCommand(state, 3, 3, false); ++} ++ ++static u8 sit2_demod_setExtAGC(struct sit2_state *state, u8 agc1_mode, u8 agc1_inv, u8 agc1_kloop, u8 agc1_min, ++ u8 agc2_mode, u8 agc2_inv, u8 agc2_kloop, u8 agc2_min) ++{ ++ state->sndBuffer[0] = 0x89; ++ state->sndBuffer[1] = (agc2_inv << 7) | (agc2_mode << 4) | (agc1_inv << 3) | agc1_mode; ++ state->sndBuffer[2] = agc1_kloop; ++ state->sndBuffer[3] = agc2_kloop; ++ state->sndBuffer[4] = agc1_min; ++ state->sndBuffer[5] = agc2_min; ++ return sit2_sendCommand(state, 6, 3, false); ++} ++ ++static u8 sit2_demod_setDvbt2FEF(struct sit2_state *state, u8 fef_flag, u8 fef_inv) ++{ ++ state->sndBuffer[0] = 0x51; ++ state->sndBuffer[1] = (fef_inv << 3) | fef_flag; ++ return sit2_sendCommand(state, 2, 12, false); ++} ++ ++static u8 sit2_demod_selectPlp(struct sit2_state *state, u8 plp_id, u8 plp_mode) ++{ ++ state->sndBuffer[0] = 0x52; ++ state->sndBuffer[1] = plp_id; ++ state->sndBuffer[1] = plp_mode; ++ return sit2_sendCommand(state, 3, 1, false); ++} ++ ++static u8 sit2_demod_init(struct sit2_state *state) ++{ ++ u8 uret = SIT2_ERROR_OK; ++ u8 ts_mode, ts_clock; ++ u8 romid; ++ uret = sit2_demod_wakeUp(state, 1, 0); ++ if(uret != SIT2_ERROR_OK) ++ return uret; ++ ++ uret = sit2_demod_romId(state, &romid); ++ if(uret != SIT2_ERROR_OK) ++ return uret; ++ ++ dprintk("%s: start to download ver[%d] patch!\n", __func__, romid); ++ if(romid == 2) { /* Ver20 */ ++ uret = sit2_demod_downloadFW(state, sit2_patch_2, SIT2_PATCH_2_SIZE, SIT2_PATCH_PER_LINE); ++ if(uret != SIT2_ERROR_OK) ++ return uret; ++ dprintk("%s: download ver[%d] patch sucessfully!\n", __func__, romid); ++ } else if (romid == 3) { /* Ver30 */ ++ uret = sit2_demod_downloadFW(state, sit2_patch_3, SIT2_PATCH_3_SIZE, SIT2_PATCH_PER_LINE); ++ if(uret != SIT2_ERROR_OK) ++ return uret; ++ dprintk("%s: download ver[%d] patch sucessfully!\n", __func__, romid); ++ } ++ ++ uret = sit2_startFirmware(state, false); ++ if(uret != SIT2_ERROR_OK) ++ return uret; ++ ++ /* download default properties */ ++ sit2_demod_setMP(state, 1, 2, 1, 1); ++ sit2_demod_setExtAGC(state, 1, 0, 6, 0, 2, 0, 18, 0); ++ sit2_demod_setDvbt2FEF(state, 3, 0); ++ sit2_demod_setGPIO(state, 8, 0, 4, 0); ++ /* common */ ++ sit2_sendProperty(state, 0x0401, 0, false); ++ /* DD */ ++ sit2_sendProperty(state, 0x1003, (1 << 4) | 7, false); ++ sit2_sendProperty(state, 0x1002, (1 << 4) | 5, false); ++ sit2_sendProperty(state, 0x100c, (1 << 4) | 2, false); ++ sit2_sendProperty(state, 0x1006, 0x24, false); ++ sit2_sendProperty(state, 0x100b, 5000, false); ++ sit2_sendProperty(state, 0x1007, 0x2400, false); ++ sit2_sendProperty(state, 0x100a, (0 << 9) | (0 << 8) | (2 << 4) | 8, false); /* set modulation */ ++ sit2_sendProperty(state, 0x1004, (1 << 4) | 5, false); ++ sit2_sendProperty(state, 0x1005, (10 << 4) | 1, false); ++ sit2_sendProperty(state, 0x100d, 720, false); /* ts clock frequency */ ++ if (state->config->ts_bus_mode == 1) ++ ts_mode = 3; ++ else if (state->config->ts_bus_mode == 2) ++ ts_mode = 6; ++ else ++ ts_mode = 0; ++ if (state->config->ts_clock_mode == 1) ++ ts_clock = 2; ++ else ++ ts_clock = 1; ++ sit2_sendProperty(state, 0x1001, (0 << 8) | (0 << 7) | (0 << 6) | (ts_clock << 4) | ts_mode, false); ++ sit2_sendProperty(state, 0x1009, (0 << 13) | (1 << 12) | (3 << 10) | (15 << 6) | (3 << 4) | 15, false); ++ sit2_sendProperty(state, 0x1008, (0 << 14) | (1 << 13) | (1 << 12) | (3 << 10) | (15 << 6) | (3 << 4) | 15, false); ++ /* DVBC */ ++ sit2_sendProperty(state, 0x1104, 112, false); ++ sit2_sendProperty(state, 0x1103, 100, false); ++ sit2_sendProperty(state, 0x1101, 0, false); ++ sit2_sendProperty(state, 0x1102, 6900, false); ++ /* DVBT */ ++ sit2_sendProperty(state, 0x1203, 130, false); ++ sit2_sendProperty(state, 0x1202, 550, false); ++ sit2_sendProperty(state, 0x1201, 0, false); ++ /* DVBT2 */ ++ sit2_sendProperty(state, 0x1303, 130, false); ++ sit2_sendProperty(state, 0x1301, 550, false); ++ sit2_sendProperty(state, 0x1302, (1 << 12) | (1 << 8) | 1, false); ++ /* SCAN */ ++ sit2_sendProperty(state, 0x0304, 0, false); ++ sit2_sendProperty(state, 0x0303, 0, false); ++ sit2_sendProperty(state, 0x0308, 0, false); ++ sit2_sendProperty(state, 0x0307, (1 << 9) | 1, false); ++ sit2_sendProperty(state, 0x0306, 0, false); ++ sit2_sendProperty(state, 0x0305, 0, false); ++ sit2_sendProperty(state, 0x0301, (3 << 2), false); ++ ++ return uret; ++} ++ ++static int sit2_setStandard(struct sit2_state *state, fe_delivery_system_t toSystem) ++{ ++ u8 bandwidth = 8, modulation = 2, spectrum = 0, auto_detect = 1; ++ ++ dprintk("%s, to=%d, current=%d\n", __func__, toSystem, state->current_system); ++ if (toSystem == state->current_system) ++ return 0; ++ ++ switch(toSystem) { ++ case SYS_DVBT: ++ bandwidth = 8; ++ modulation = 2; ++ spectrum = 0; ++ auto_detect = 1; ++ break; ++ case SYS_DVBT2: ++ bandwidth = 8; ++ modulation = 7; ++ spectrum = 0; ++ auto_detect = 1; ++ break; ++ case SYS_DVBC_ANNEX_A: ++ bandwidth = 8; ++ modulation = 3; ++ spectrum = 0; ++ auto_detect = 0; ++ break; ++ default: ++ printk(KERN_INFO ++ "%s: error! unsupported system=%d\n", ++ __func__, toSystem); ++ break; ++ } ++ sit2_demod_tuner_i2c_enable(state, 1); ++ if(toSystem == SYS_DVBT2) ++ sit2_tuner_setup_FEFMode(state, 1); ++ else ++ sit2_tuner_setup_FEFMode(state, 0); ++ sit2_demod_tuner_i2c_enable(state, 0); ++ sit2_sendProperty(state, 0x100a, (auto_detect << 9) | (spectrum << 8) | (modulation << 4) | bandwidth, false); ++ sit2_demod_reStart(state); ++ state->current_system = toSystem; ++ ++ return 0; ++} ++ ++int power_of_n (int n, int m) ++{ ++ int i, p = 1; ++ for (i=1; i<= m; i++) { ++ p = p*n; ++ } ++ return p; ++} ++ ++static int sit2_drv_read_signal_strength(struct dvb_frontend *fe, u16 *strength) ++{ ++ struct sit2_state *state = fe->demodulator_priv; ++ sit2_demod_tuner_i2c_enable(state, 1); ++ sit2_tuner_getStatus(state, 0); ++ sit2_demod_tuner_i2c_enable(state, 0); ++ *strength = state->revBuffer[3] + 128; ++ /* scale value to 0x0000-0xffff from 0x0000-0x00ff */ ++ *strength = *strength * 0xffff / 0x00ff; ++ return 0; ++} ++ ++static int sit2_drv_read_ucblocks(struct dvb_frontend *fe, u32 *ucblocks) ++{ ++ struct sit2_state *state = fe->demodulator_priv; ++ ++ sit2_demod_getUncor(state, 0); ++ *ucblocks = (state->revBuffer[2] << 16) | state->revBuffer[1];; ++ ++ return 0; ++} ++ ++static int sit2_drv_read_ber(struct dvb_frontend *fe, u32 *ber) ++{ ++ struct sit2_state *state = fe->demodulator_priv; ++ ++ sit2_demod_getBer(state, 0); ++ if(state->revBuffer[1] != 0) { /* to do scale. */ ++ *ber = state->revBuffer[2]/10/power_of_n(10, state->revBuffer[1]); ++ } ++ return 0; ++} ++ ++static int sit2_drv_read_snr(struct dvb_frontend *fe, u16 *snr) ++{ ++ struct sit2_state *state = fe->demodulator_priv; ++ SIT2_DD_STATUS dd_status; ++ ++ sit2_demod_getStatus(state, 0, &dd_status); ++ switch(dd_status.modulation) { ++ case 2: /*DVB-T*/ ++ sit2_demod_getDVBTStatus(state, 0); ++ break; ++ case 7: /*DVB-T2*/ ++ sit2_demod_getDVBT2Status(state, 0); ++ break; ++ case 3: /*DVB-C*/ ++ sit2_demod_getDVBCStatus(state, 0); ++ break; ++ } ++ /* report SNR in dB * 10 */ ++ *snr = state->revBuffer[3]/40; ++ return 0; ++} ++ ++static int sit2_drv_read_status(struct dvb_frontend *fe, fe_status_t *status) ++{ ++ struct sit2_state *state = fe->demodulator_priv; ++ SIT2_DD_STATUS dd_status; ++ *status = 0; ++ sit2_demod_getStatus(state, 0, &dd_status); ++ if(dd_status.pcl) ++ *status = FE_HAS_SIGNAL | FE_HAS_CARRIER ++ | FE_HAS_SYNC | FE_HAS_VITERBI; ++ if (dd_status.dl) ++ *status = FE_HAS_SIGNAL | FE_HAS_CARRIER ++ | FE_HAS_SYNC | FE_HAS_VITERBI | FE_HAS_LOCK; ++ return 0; ++} ++ ++static int sit2_drv_get_frontend_algo(struct dvb_frontend *fe) ++{ ++ return DVBFE_ALGO_HW; ++} ++ ++static fe_modulation_t sit2_convert_modulation(u8 constellation) ++{ ++ fe_modulation_t ret; ++ switch (constellation) { ++ case 7: ++ ret = QAM_16; ++ break; ++ case 8: ++ ret = QAM_32; ++ break; ++ case 9: ++ ret = QAM_64; ++ break; ++ case 10: ++ ret = QAM_128; ++ break; ++ case 11: ++ ret = QAM_256; ++ break; ++ case 3: ++ ret = QPSK; ++ break; ++ default: ++ ret = QAM_AUTO; ++ break; ++ } ++ return ret; ++} ++ ++static fe_transmit_mode_t sit2_convert_fftcode(u8 fftcode) ++{ ++ fe_transmit_mode_t ret; ++ switch (fftcode) { ++ case 10: ++ ret = TRANSMISSION_MODE_1K; ++ break; ++ case 11: ++ ret = TRANSMISSION_MODE_2K; ++ break; ++ case 12: ++ ret = TRANSMISSION_MODE_4K; ++ break; ++ case 13: ++ ret = TRANSMISSION_MODE_8K; ++ break; ++ case 14: ++ ret = TRANSMISSION_MODE_16K; ++ break; ++ case 15: ++ ret = TRANSMISSION_MODE_32K; ++ break; ++ default: ++ ret = TRANSMISSION_MODE_AUTO; ++ } ++ return ret; ++} ++ ++static fe_guard_interval_t sit2_convert_gicode(int gicode) ++{ ++ fe_guard_interval_t ret; ++ switch (gicode) { ++ case 1: ++ ret = GUARD_INTERVAL_1_32; ++ break; ++ case 2: ++ ret = GUARD_INTERVAL_1_16; ++ break; ++ case 3: ++ ret = GUARD_INTERVAL_1_8; ++ break; ++ case 4: ++ ret = GUARD_INTERVAL_1_4; ++ break; ++ case 5: ++ ret = GUARD_INTERVAL_1_128; ++ break; ++ case 6: ++ ret = GUARD_INTERVAL_19_128; ++ break; ++ case 7: ++ ret = GUARD_INTERVAL_19_256; ++ break; ++ default: ++ ret = GUARD_INTERVAL_AUTO; ++ } ++ return ret; ++} ++ ++static fe_hierarchy_t sit2_convert_hierarchycode(int hierarchycode) ++{ ++ fe_hierarchy_t ret; ++ switch (hierarchycode) { ++ case 1: ++ ret = HIERARCHY_NONE; ++ break; ++ case 2: ++ ret = HIERARCHY_1; ++ break; ++ case 3: ++ ret = HIERARCHY_2; ++ break; ++ case 5: ++ ret = HIERARCHY_4; ++ break; ++ default: ++ ret = HIERARCHY_AUTO; ++ } ++ return ret; ++} ++ ++static fe_code_rate_t sit2_convert_coderate(int coderate) ++{ ++ fe_code_rate_t ret; ++ switch (coderate) { ++ case 1: ++ ret = FEC_1_2; ++ break; ++ case 2: ++ ret = FEC_2_3; ++ break; ++ case 3: ++ ret = FEC_3_4; ++ break; ++ case 4: ++ ret = FEC_4_5; ++ break; ++ case 5: ++ ret = FEC_5_6; ++ break; ++ case 7: ++ ret = FEC_7_8; ++ break; ++ case 13: ++ ret = FEC_3_5; ++ break; ++ default: ++ ret = FEC_AUTO; ++ } ++ return ret; ++} ++ ++static int sit2_drv_get_frontend(struct dvb_frontend *fe) ++{ ++ struct sit2_state *state = fe->demodulator_priv; ++ struct dtv_frontend_properties *c = &fe->dtv_property_cache; ++ int ret = 0; ++ SIT2_DD_STATUS dd_status; ++ sit2_demod_getStatus(state, 0, &dd_status); ++ switch(dd_status.modulation) { ++ case 2: /*DVB-T*/ ++ sit2_demod_getDVBTStatus(state, 0); ++ c->modulation = sit2_convert_modulation(state->revBuffer[8] & 0x3f); ++ c->transmission_mode = sit2_convert_fftcode(state->revBuffer[10] & 0x0f); ++ c->guard_interval = sit2_convert_gicode((state->revBuffer[10] >> 4) & 0x07); ++ c->hierarchy = sit2_convert_hierarchycode(state->revBuffer[11] & 0x07); ++ c->code_rate_HP = sit2_convert_coderate(state->revBuffer[9] & 0x0f); ++ c->code_rate_LP = sit2_convert_coderate((state->revBuffer[9] >> 4) & 0x0f); ++ c->inversion = ((state->revBuffer[8] >> 6) & 0x01) ? INVERSION_ON : INVERSION_OFF; ++ break; ++ case 7: /*DVB-T2*/ ++ sit2_demod_getDVBT2Status(state, 0); ++ c->modulation = sit2_convert_modulation(state->revBuffer[8] & 0x3f); ++ c->transmission_mode = sit2_convert_fftcode(state->revBuffer[9] & 0x0f); ++ c->guard_interval = sit2_convert_gicode((state->revBuffer[9] >> 4) & 0x07); ++ c->fec_inner = sit2_convert_coderate(state->revBuffer[12] & 0x0f); ++ c->inversion = ((state->revBuffer[8] >> 6) & 0x01) ? INVERSION_ON : INVERSION_OFF; ++ break; ++ case 3: /*DVB-C*/ ++ sit2_demod_getDVBCStatus(state, 0); ++ c->symbol_rate = state->dvbc_symrate; ++ c->modulation = sit2_convert_modulation(state->revBuffer[8] & 0x3f); ++ c->inversion = ((state->revBuffer[8] >> 6) & 0x01) ? INVERSION_ON : INVERSION_OFF; ++ break; ++ } ++ return ret; ++} ++ ++static int sit2_drv_set_frontend(struct dvb_frontend *fe) ++{ ++ struct dtv_frontend_properties *c = &fe->dtv_property_cache; ++ struct sit2_state *state = fe->demodulator_priv; ++ int req_plp_id = 0; ++ u8 uret, req_qam, req_bandwidth = 0; ++ u32 max_lock_time = 5000, min_lock_time = 100; ++ u32 ulCount, ulTick, ulDelay; ++ SIT2_DD_STATUS dd_status; ++ bool bLock = false, bSearch = true; ++ ++ dprintk( ++ "%s: system=%d frequency=%d bandwidth=%d symrate=%d qam=%d stream_id=%d\n", ++ __func__, c->delivery_system, c->frequency, c->bandwidth_hz, c->symbol_rate, c->modulation, c->stream_id); ++ ++ sit2_setStandard(state, c->delivery_system); ++ switch (c->modulation) { ++ case QAM_16: ++ req_qam = 7; ++ break; ++ case QAM_32: ++ req_qam = 8; ++ break; ++ case QAM_64: ++ req_qam = 9; ++ break; ++ case QAM_128: ++ req_qam = 10; ++ break; ++ case QAM_256: ++ req_qam = 11; ++ break; ++ default: /* QAM_AUTO */ ++ req_qam = 0; ++ break; ++ } ++ if (c->stream_id == NO_STREAM_ID_FILTER) ++ req_plp_id = state->plp_id; ++ else if ((c->stream_id >= 0) && (c->stream_id <= 255)) { ++ req_plp_id = c->stream_id; ++ state->plp_id = req_plp_id; ++ } ++ switch(c->delivery_system) { ++ case SYS_DVBT: ++ case SYS_DVBT2: ++ max_lock_time = 5000; ++ min_lock_time = 100; ++ sit2_sendProperty(state, 0x1201, state->stream, false); ++ if(req_plp_id != -1) ++ sit2_demod_selectPlp(state, req_plp_id, 1); ++ else ++ sit2_demod_selectPlp(state, 0, 0); ++ if(c->bandwidth_hz == 1700000) ++ req_bandwidth = 2; ++ else ++ req_bandwidth = (u8)(c->bandwidth_hz/1000000); ++ sit2_sendProperty(state, 0x100a, (1 << 9) | (0 << 8) | (15 << 4) | req_bandwidth, false); ++ break; ++ case SYS_DVBC_ANNEX_A: ++ max_lock_time = 2000; ++ min_lock_time = 80; ++ req_bandwidth = 8; ++ state->dvbc_symrate = c->symbol_rate; ++ sit2_sendProperty(state, 0x100a, (3 << 4) | req_bandwidth, false); ++ sit2_sendProperty(state, 0x1102, c->symbol_rate/1000, false); ++ sit2_sendProperty(state, 0x1101, req_qam, false); ++ break; ++ default: ++ dprintk("%s, error! unsupport delivery system - %d!", __func__, c->delivery_system); ++ break; ++ } ++ ++ /* tune tuner frequency */ ++ sit2_demod_tuner_i2c_enable(state, 1); ++ sit2_tuner_setFreq(state, c->frequency, c->delivery_system, req_bandwidth); ++ sit2_demod_tuner_i2c_enable(state, 0); ++ ++ sit2_demod_reStart(state); ++ ++ /* check status */ ++ ulCount = 0; ++ ulDelay = 10; ++ ulTick = max_lock_time/ulDelay; ++ msleep(min_lock_time); ++ ++ while(bSearch) { ++ ulCount++; ++ ++ uret = sit2_demod_getStatus(state, 1, &dd_status); ++ switch(c->delivery_system) { ++ case SYS_DVBT: ++ case SYS_DVBT2: ++ if(dd_status.dl) { ++ if((dd_status.modulation == 7) && (c->delivery_system == SYS_DVBT)) { ++ if(req_plp_id != -1) ++ sit2_demod_selectPlp(state, req_plp_id, 1); ++ else ++ sit2_demod_selectPlp(state, 0, 0); ++ msleep(340); ++ } ++ bLock = true; ++ bSearch = false; ++ } else if(dd_status.rsqint_bit5) ++ bSearch = false; ++ break; ++ case SYS_DVBC_ANNEX_A: ++ if(dd_status.dl) { ++ bLock = true; ++ bSearch = false; ++ } ++ break; ++ default: ++ dprintk("%s, error! unsupport delivery system - %d!", __func__, c->delivery_system); ++ bSearch = false; ++ break; ++ } ++ ++ if(bSearch) ++ msleep(10); ++ if (ulCount >= ulTick) ++ bSearch = false; ++ } ++ ++ if (bLock && state->config->start_ctrl) ++ state->config->start_ctrl(fe); ++ return 0; ++} ++ ++static int sit2_drv_tune(struct dvb_frontend *fe, ++ bool re_tune, ++ unsigned int mode_flags, ++ unsigned int *delay, ++ fe_status_t *status) ++{ ++ *delay = HZ / 5; ++ if (re_tune) { ++ int ret = sit2_drv_set_frontend(fe); ++ if (ret) ++ return ret; ++ } ++ return sit2_drv_read_status(fe, status); ++} ++ ++static int sit2_drv_init(struct dvb_frontend *fe) ++{ ++ struct sit2_state *state = fe->demodulator_priv; ++ ++ dprintk("%s: init=%d\n", __func__, state->isInited); ++ ++ sit2_demod_tuner_i2c_enable(state, 1); ++ ++ if(state->isInited) { ++ sit2_tuner_wakeUp(state); ++ } else { ++ sit2_tuner_init(state); ++ } ++ sit2_tuner_xout_enable(state, 1); ++ ++ if(state->isInited) { ++ sit2_demod_wakeUp(state, 8, 1); ++ } else { ++ sit2_demod_init(state); ++ state->isInited = true; ++ } ++ ++ sit2_demod_tuner_i2c_enable(state, 0); ++ return 0; ++} ++ ++static int sit2_drv_sleep(struct dvb_frontend *fe) ++{ ++ struct sit2_state *state = fe->demodulator_priv; ++ ++ dprintk("%s: init=%d\n", __func__, state->isInited); ++ ++ sit2_demod_powerDown(state); ++ ++ sit2_demod_tuner_i2c_enable(state, 1); ++ sit2_tuner_xout_enable(state, 0); ++ sit2_tuner_standby(state); ++ sit2_demod_tuner_i2c_enable(state, 0); ++ ++ state->current_system = SYS_UNDEFINED; ++ return 0; ++} ++ ++static void sit2_drv_release(struct dvb_frontend *fe) ++{ ++ struct sit2_state *state = fe->demodulator_priv; ++ kfree(state); ++} ++ ++static const struct dvb_frontend_ops sit2_ops = { ++ .delsys = { SYS_DVBT, SYS_DVBT2, SYS_DVBC_ANNEX_A }, ++ /*.delsys = { SYS_DVBC_ANNEX_A },*/ ++ /* default: DVB-T/T2 */ ++ .info = { ++ .name = "Sit2 DVB-T2/C", ++ .frequency_stepsize = 62500, ++ .frequency_min = 48000000, ++ .frequency_max = 870000000, ++ .symbol_rate_min = 870000, ++ .symbol_rate_max = 7500000, ++ .caps = FE_CAN_FEC_1_2 | ++ FE_CAN_FEC_2_3 | ++ FE_CAN_FEC_3_4 | ++ FE_CAN_FEC_5_6 | ++ FE_CAN_FEC_7_8 | ++ FE_CAN_FEC_AUTO | ++ FE_CAN_QPSK | ++ FE_CAN_QAM_16 | ++ FE_CAN_QAM_32 | ++ FE_CAN_QAM_64 | ++ FE_CAN_QAM_128 | ++ FE_CAN_QAM_256 | ++ FE_CAN_QAM_AUTO | ++ FE_CAN_TRANSMISSION_MODE_AUTO | ++ FE_CAN_GUARD_INTERVAL_AUTO | ++ FE_CAN_HIERARCHY_AUTO | ++ FE_CAN_MUTE_TS | ++ FE_CAN_2G_MODULATION | ++ FE_CAN_MULTISTREAM ++ }, ++ ++ .release = sit2_drv_release, ++ .init = sit2_drv_init, ++ .sleep = sit2_drv_sleep, ++ ++ .tune = sit2_drv_tune, ++ .set_frontend = sit2_drv_set_frontend, ++ .get_frontend = sit2_drv_get_frontend, ++ .get_frontend_algo = sit2_drv_get_frontend_algo, ++ ++ .read_status = sit2_drv_read_status, ++ .read_snr = sit2_drv_read_snr, ++ .read_ber = sit2_drv_read_ber, ++ .read_ucblocks = sit2_drv_read_ucblocks, ++ .read_signal_strength = sit2_drv_read_signal_strength, ++}; ++ ++struct dvb_frontend *sit2_attach(const struct sit2_config *config, ++ struct i2c_adapter *i2c) ++{ ++ struct sit2_state *state = NULL; ++ state = kzalloc(sizeof(struct sit2_state), GFP_KERNEL); ++ if (!state) { ++ dev_err(&i2c->dev, "%s: kzalloc() failed\n", ++ KBUILD_MODNAME); ++ goto error; ++ } ++ state->config = config; ++ state->i2c = i2c; ++ state->isInited = false; ++ state->demod_addr = SIT2_DEMOD_ADDRESS; ++ state->tuner_addr = SIT2_TUNER_ADDRESS; ++ state->plp_id = 0; ++ state->current_system = SYS_UNDEFINED; ++ state->stream = 0; ++ ++ memcpy(&state->frontend.ops, &sit2_ops, ++ sizeof(struct dvb_frontend_ops)); ++ state->frontend.demodulator_priv = state; ++ return &state->frontend; ++error: ++ kfree(state); ++ return NULL; ++} ++EXPORT_SYMBOL(sit2_attach); ++ ++MODULE_DESCRIPTION("sit2 demodulator driver"); ++MODULE_AUTHOR("Max Nibble "); ++MODULE_LICENSE("GPL"); ++MODULE_VERSION("1.00"); +diff -urN a/drivers/media/dvb-frontends/sit2.h b/drivers/media/dvb-frontends/sit2.h +--- a/drivers/media/dvb-frontends/sit2.h 1970-01-01 08:00:00.000000000 +0800 ++++ b/drivers/media/dvb-frontends/sit2.h 2013-05-05 22:17:20.000000000 +0800 +@@ -0,0 +1,45 @@ ++/* ++ SIT2 - DVB-T2/T/C demodulator and tuner ++ ++ Copyright (C) 2013 Max Nibble ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++*/ ++ ++#ifndef SIT2_H ++#define SIT2_H ++ ++#include ++ ++struct sit2_config { ++ u8 ts_bus_mode; /*1-serial, 2-parallel.*/ ++ u8 ts_clock_mode; /*0-auto, 1-manual.*/ ++ ++ int (*start_ctrl)(struct dvb_frontend *fe); ++}; ++ ++#if defined(CONFIG_DVB_SIT2) || (defined(CONFIG_DVB_SIT2_MODULE) && defined(MODULE)) ++extern struct dvb_frontend *sit2_attach(const struct sit2_config *config, ++ struct i2c_adapter *i2c); ++#else ++static inline struct dvb_frontend *sit2_attach(const struct sit2_config *config, ++ struct i2c_adapter *i2c) ++{ ++ printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); ++ return NULL; ++} ++#endif /* CONFIG_DVB_SIT2 */ ++ ++#endif /* SIT2_H */ +diff -urN a/drivers/media/dvb-frontends/sit2_priv.h b/drivers/media/dvb-frontends/sit2_priv.h +--- a/drivers/media/dvb-frontends/sit2_priv.h 1970-01-01 08:00:00.000000000 +0800 ++++ b/drivers/media/dvb-frontends/sit2_priv.h 2013-05-05 22:17:25.000000000 +0800 +@@ -0,0 +1,2208 @@ ++/* ++ SIT2 - DVB-T2/T/C demodulator and tuner ++*/ ++ ++#ifndef SIT2_PRIV_H ++#define SIT2_PRIV_H ++ ++#define SIT2_DEMOD_ADDRESS 0x64 /*0xc8*/ ++#define SIT2_TUNER_ADDRESS 0x60 /*0xc0*/ ++ ++#define SIT2_ERROR_OK 0x00 ++#define SIT2_ERROR_TIMEOUT 0x01 ++#define SIT2_ERROR_POLLING 0x02 ++#define SIT2_ERROR_PAREMETER 0x03 ++#define SIT2_ERROR_ERR 0xfe ++#define SIT2_ERROR_UNKNOWN 0xff ++ ++/*structure definition */ ++typedef struct { ++ u8 tunint; ++ u8 atvint; ++ u8 dtvint; ++ u8 err; ++ u8 cts; ++}sit2_tuner_reply; ++ ++typedef struct { ++ u8 ddint; ++ u8 scanint; ++ u8 err; ++ u8 cts; ++}sit2_demod_reply;; ++ ++typedef struct { ++ u8 ddint; ++ u8 scanint; ++ u8 err; ++ u8 cts; ++ u8 pclint; ++ u8 dlint; ++ u8 berint; ++ u8 uncorint; ++ u8 rsqint_bit5; ++ u8 rsqint_bit6; ++ u8 rsqint_bit7; ++ u8 pcl; ++ u8 dl; ++ u8 ber; ++ u8 uncor; ++ u8 rsqstat_bit5; ++ u8 rsqstat_bit6; ++ u8 rsqstat_bit7; ++ u8 modulation; ++ u32 ts_bit_rate; ++ u32 ts_clk_freq; ++}SIT2_DD_STATUS; ++ ++unsigned char sit2_patch_2[] = { ++0x04,0x01,0x00,0x00,0x00,0x00,0x6E,0x22, ++0x05,0x8A,0xC7,0x3F,0x6A,0x43,0x27,0x94, ++0x2A,0xA1,0x65,0x0E,0xAD,0x67,0x7B,0x0D, ++0x05,0x68,0x6B,0xE7,0xC3,0xAD,0xF0,0xDC, ++0x22,0xD7,0xDD,0x95,0x46,0x13,0xD0,0xF8, ++0x05,0x02,0x93,0x0D,0x17,0x9C,0x87,0x95, ++0x2A,0xBB,0xAB,0xDD,0x99,0xD4,0x4A,0x43, ++0x05,0x56,0x55,0x15,0x28,0xD5,0x94,0xD3, ++0x22,0x6B,0x94,0x09,0x42,0xE6,0x53,0xDE, ++0x05,0xD2,0xEA,0xAF,0x7F,0xF7,0x2A,0xC0, ++0x22,0xC9,0x77,0xE4,0x73,0x56,0x8C,0xF3, ++0x05,0x69,0xF9,0xE7,0x8B,0x9B,0xFF,0x89, ++0x27,0x96,0x91,0x8E,0x83,0x82,0xD5,0x5F, ++0x27,0x1E,0x9A,0x0A,0x10,0x48,0x01,0x85, ++0x2F,0xB4,0x9F,0xD3,0x54,0xEE,0x7E,0xEB, ++0x2F,0x08,0x68,0xC9,0x51,0xCA,0x35,0x14, ++0x27,0x83,0x90,0xA8,0xC1,0x7C,0xDE,0xD2, ++0x27,0x0D,0x5C,0xBF,0xCD,0xA0,0xCC,0x56, ++0x27,0xF8,0xBF,0x57,0x09,0x9E,0xCC,0x1B, ++0x27,0x67,0x1C,0x92,0x39,0xB0,0xD3,0x77, ++0x2F,0xEB,0x40,0xFF,0xFC,0x5D,0xC9,0x46, ++0x2F,0x81,0x3B,0x65,0x96,0xC1,0xC9,0x72, ++0x27,0x0D,0x5F,0x5B,0xD9,0xC1,0x1C,0xB4, ++0x27,0x6B,0xCA,0xF6,0x84,0xFC,0xEE,0xCE, ++0x2F,0xE8,0x3C,0x26,0xCF,0x1C,0xF6,0xBF, ++0x27,0x9F,0x7C,0x60,0xF8,0xF6,0x1F,0x6F, ++0x27,0xFB,0x6C,0xE2,0xF9,0xC7,0xA5,0x30, ++0x2F,0x31,0x78,0xFB,0xAD,0xFF,0xD1,0x7C, ++0x27,0x2C,0x79,0x51,0x3A,0x9E,0x70,0xB9, ++0x27,0x9C,0x91,0xBD,0xE7,0x23,0x1F,0x5E, ++0x27,0x0F,0x7D,0x82,0x09,0xD1,0xEF,0x48, ++0x2F,0x48,0x0B,0x3E,0x5B,0x58,0x4A,0xA3, ++0x27,0x1E,0xB3,0x41,0x81,0x59,0xDD,0x0F, ++0x2F,0xEC,0xA8,0x54,0x44,0x49,0x9C,0xF9, ++0x27,0xE4,0xAE,0x01,0xD1,0xDD,0x22,0x14, ++0x2F,0x3F,0xA9,0x3A,0x88,0xA8,0x7D,0xC5, ++0x27,0x04,0x3B,0x2A,0xD8,0x30,0x66,0xE9, ++0x27,0x58,0x6F,0x93,0xB2,0x4F,0x59,0x19, ++0x27,0x58,0xCC,0xDF,0x44,0xD0,0x58,0x89, ++0x2F,0x67,0x72,0xC0,0x15,0x4C,0x54,0x16, ++0x2F,0x5A,0xFE,0x0F,0x15,0x6C,0x27,0xC9, ++0x2F,0x23,0xC6,0x71,0xA7,0x70,0x24,0xE2, ++0x2F,0xDD,0xB0,0x33,0x71,0x6E,0x50,0x46, ++0x2F,0x32,0x95,0x38,0xD7,0x1E,0xD8,0x0B, ++0x2F,0x74,0x49,0x1B,0x1A,0x90,0x28,0x29, ++0x2F,0xC2,0x8C,0x74,0xA6,0xDB,0x54,0x33, ++0x2F,0x3A,0xE0,0x31,0x10,0x3F,0xC2,0x67, ++0x2F,0x86,0x34,0x8A,0x11,0x2D,0xD7,0x92, ++0x27,0xA7,0xF7,0x3D,0xE3,0x79,0x39,0x0F, ++0x2F,0xA0,0xAF,0xC6,0xD2,0xC7,0xD2,0x6D, ++0x2F,0xBD,0x30,0x5F,0x7B,0x54,0x94,0xB8, ++0x2F,0x0B,0x37,0x94,0xDB,0x7F,0x43,0x07, ++0x27,0xA5,0x7F,0xC4,0xC8,0x91,0xF3,0xC7, ++0x2F,0x5B,0xE5,0x75,0xA4,0x40,0x53,0x47, ++0x2F,0x5E,0x83,0xD0,0x22,0x99,0xB7,0xA6, ++0x2F,0xA5,0x2B,0x44,0x02,0x40,0x3C,0xF4, ++0x27,0x05,0xE0,0x90,0x42,0x6D,0xB6,0x2E, ++0x27,0xA8,0x6F,0x27,0x1B,0xAF,0xEA,0xB1, ++0x2F,0x56,0x9A,0x85,0xB5,0xFE,0x29,0x57, ++0x27,0x9B,0x53,0x9F,0x41,0x62,0x52,0x25, ++0x2F,0x2E,0xB2,0x16,0x14,0x95,0xE5,0xD9, ++0x27,0xD5,0x6C,0xB7,0xA7,0x21,0xE2,0xBB, ++0x27,0x9B,0x07,0x42,0xB7,0xFC,0xF5,0xC6, ++0x2F,0x77,0x36,0x47,0x57,0xF3,0x71,0x06, ++0x27,0xF4,0x25,0x41,0x87,0x5C,0xB6,0x70, ++0x27,0xC9,0x81,0xD3,0x7E,0xF2,0x6B,0x5E, ++0x2F,0xE8,0xD1,0x50,0x1F,0x94,0x4E,0xD0, ++0x27,0xCB,0x2F,0xE2,0x04,0x89,0x4E,0x4F, ++0x27,0xC5,0x09,0x09,0x0D,0x62,0x40,0x84, ++0x2F,0x24,0x4E,0xDA,0xBF,0x65,0x84,0x45, ++0x27,0x70,0x45,0x3B,0x16,0xA0,0xA4,0x92, ++0x2F,0xC6,0xB6,0x61,0x92,0x27,0x50,0x30, ++0x2F,0x79,0x9C,0x38,0xFE,0x72,0xD9,0x17, ++0x27,0x05,0xB5,0x57,0x86,0x73,0x31,0x8B, ++0x2F,0xA0,0x72,0xD1,0xD1,0x0F,0x71,0xAE, ++0x2F,0x58,0xE1,0x15,0x8C,0x41,0xE4,0x14, ++0x2F,0x79,0xE1,0x2F,0x04,0xD6,0xF7,0xE6, ++0x2F,0xDA,0xF1,0x99,0x1A,0x2A,0xFC,0x74, ++0x2F,0x4F,0x0F,0x4A,0xF8,0xDF,0x7E,0x31, ++0x27,0xB7,0x84,0x0E,0xE9,0x83,0xD3,0x1C, ++0x2F,0xC7,0x8B,0x37,0xCA,0xA4,0x99,0x2B, ++0x27,0x55,0xD9,0x0D,0xFC,0xE8,0xB2,0x45, ++0x2F,0xDC,0x96,0xE2,0x33,0xD7,0xD2,0x5A, ++0x27,0x44,0xEF,0xAF,0x34,0x75,0xF1,0xF0, ++0x2F,0x84,0x84,0x91,0x4B,0x0A,0x7B,0xD0, ++0x2F,0xDC,0x67,0x6F,0x5D,0x59,0xC2,0x9F, ++0x27,0xAC,0xF5,0xDB,0x23,0x46,0xFB,0xAF, ++0x27,0x17,0x3F,0x27,0x0C,0x34,0x6B,0x2F, ++0x27,0xCC,0x2F,0xD1,0xCB,0x8C,0xBE,0xD2, ++0x2F,0x2E,0x79,0x26,0xA5,0xEA,0x05,0x49, ++0x27,0x12,0x88,0x17,0x3A,0xD3,0x41,0x7E, ++0x27,0xCE,0xBC,0xFD,0x24,0x72,0xCE,0x77, ++0x27,0x91,0xF9,0x72,0x68,0x83,0xF7,0x5C, ++0x2F,0xFD,0xAC,0xE3,0x8B,0x59,0x4E,0x5D, ++0x2F,0x13,0xB3,0xA0,0xE9,0xDE,0x58,0xBD, ++0x27,0xF7,0x6A,0x2E,0x84,0xA7,0x14,0x48, ++0x27,0x08,0xE6,0xBC,0x96,0xDF,0xF9,0xE3, ++0x27,0x55,0xFF,0x97,0x69,0x40,0x12,0x9B, ++0x27,0x6E,0x73,0x46,0xA7,0xFD,0x24,0x0B, ++0x2F,0xC0,0x34,0x12,0xB9,0x86,0x80,0x99, ++0x2F,0x35,0x88,0xB7,0xE3,0x37,0xF6,0xB9, ++0x2F,0x0A,0x6E,0x26,0x63,0xA2,0x7F,0x73, ++0x27,0xC0,0x93,0x01,0x5A,0xB3,0x76,0x6F, ++0x2F,0x1A,0x12,0x1E,0xA5,0x2F,0x63,0x79, ++0x2F,0xF4,0x0E,0xCF,0xCC,0x5D,0x32,0x73, ++0x2F,0x74,0x3D,0xBC,0x18,0x30,0x6A,0xB0, ++0x27,0x3C,0xB7,0xAC,0xCC,0xB3,0x20,0x56, ++0x2F,0x76,0xAD,0x00,0x52,0xC9,0xA0,0xE1, ++0x27,0x15,0x3B,0xE4,0x7B,0xF6,0x0F,0xE2, ++0x2F,0x5D,0x70,0x35,0xDE,0x4B,0x3E,0x3B, ++0x2F,0x8D,0xE3,0x7B,0xBA,0xF0,0x7D,0xBF, ++0x27,0x35,0xFD,0xD3,0x2B,0x35,0x3B,0x9C, ++0x2F,0x6A,0x9C,0xD5,0x95,0x2C,0x86,0x1C, ++0x27,0x42,0x0C,0x1F,0xEA,0xCD,0xF5,0x97, ++0x27,0x65,0xB1,0x36,0x1D,0xDC,0x55,0x83, ++0x2F,0x88,0x89,0x23,0x65,0x4C,0x98,0xAA, ++0x2F,0x26,0x4F,0x6F,0x74,0xD3,0x93,0xBA, ++0x2F,0x94,0xA1,0x7D,0x61,0x84,0x1B,0xF9, ++0x27,0x8D,0xD3,0x85,0x70,0xE0,0xFC,0xF7, ++0x27,0x58,0xE6,0xAA,0x6C,0x2C,0x8E,0x13, ++0x2F,0x95,0xC3,0x8D,0xC0,0x8D,0x14,0x5E, ++0x2F,0xE2,0x71,0x93,0x92,0xF0,0xE7,0x4C, ++0x2F,0x2E,0x2D,0x14,0x4B,0x64,0x90,0x66, ++0x2F,0x9A,0x34,0x47,0xFA,0x2F,0x95,0xE9, ++0x2F,0xEE,0x30,0x62,0xE2,0x6C,0xED,0x87, ++0x2F,0xBC,0x86,0xDB,0xD5,0xB6,0x3F,0x24, ++0x27,0xC7,0x6B,0x9A,0xAB,0x63,0x7F,0x17, ++0x2F,0x1E,0xD2,0x78,0x27,0xE1,0x69,0x2A, ++0x27,0x64,0x69,0x37,0x1C,0x8D,0xBD,0x13, ++0x27,0x92,0x1B,0x30,0x48,0x10,0xC7,0x86, ++0x2F,0x29,0x03,0x95,0x97,0x23,0x1E,0x1C, ++0x27,0xD5,0x24,0x62,0x80,0xDC,0xE9,0x40, ++0x27,0xF1,0xAA,0x89,0x7A,0xFF,0xD4,0x85, ++0x2F,0x15,0x9B,0x5D,0x89,0xC8,0x9E,0x7A, ++0x2F,0x7A,0xA5,0xDD,0x4C,0xFC,0x33,0x98, ++0x2F,0x5D,0x3E,0xD4,0x38,0x49,0xB5,0x09, ++0x2F,0x8E,0xD6,0x1C,0x1B,0x9C,0x20,0x75, ++0x27,0x04,0x27,0x8B,0x02,0x5E,0x0F,0x83, ++0x27,0x4A,0xDB,0xDC,0xFF,0x1F,0xA8,0x7C, ++0x2F,0xEC,0x32,0x5B,0x7B,0xEB,0xBB,0xA4, ++0x27,0x04,0x64,0x47,0x68,0x0D,0x07,0xFC, ++0x27,0x62,0x0F,0x73,0xF0,0xF5,0x28,0x6C, ++0x27,0x19,0xCD,0x24,0x9B,0x4F,0x6C,0x38, ++0x27,0x06,0x42,0x9F,0xE3,0x8A,0xE8,0xE9, ++0x27,0xD8,0xC8,0xE4,0x90,0x15,0x8A,0xD6, ++0x27,0x1B,0xB3,0xE4,0x21,0x6F,0x56,0xEE, ++0x27,0xCF,0x92,0x4A,0x30,0x12,0x52,0xFE, ++0x27,0x11,0x3B,0x9B,0x78,0x43,0x76,0xF3, ++0x2F,0x11,0x06,0x5B,0xA4,0xCB,0xCD,0x06, ++0x2F,0x5D,0x07,0x26,0xEF,0xCF,0x8F,0x4E, ++0x2F,0xFA,0x47,0xA6,0x98,0x51,0x49,0x24, ++0x27,0x71,0x79,0x55,0x75,0x86,0x8C,0x08, ++0x27,0xE6,0x3F,0xD5,0x2B,0x73,0xE8,0xB4, ++0x2F,0x35,0xE7,0xE5,0xAB,0x21,0xBD,0x4F, ++0x2F,0xF7,0x12,0x32,0x50,0x55,0x17,0x69, ++0x27,0xF8,0x9F,0xF8,0x6F,0x16,0x66,0x76, ++0x27,0x0A,0x27,0x82,0xA0,0xF9,0x32,0xB7, ++0x2F,0x44,0x4B,0x76,0x26,0xD4,0x37,0x89, ++0x27,0x63,0x30,0xE8,0xBF,0x26,0x4E,0xAF, ++0x27,0x38,0xF9,0xFB,0xB8,0x2E,0x3B,0x23, ++0x27,0x4F,0x21,0x3E,0x7C,0x69,0x4D,0x6D, ++0x27,0x22,0xCB,0x6D,0x2B,0xF6,0xF1,0x0B, ++0x2F,0x75,0xCC,0xDD,0xA7,0x2A,0x3A,0x80, ++0x2F,0x6A,0x39,0x70,0x31,0xCC,0xEA,0x93, ++0x27,0x88,0xF1,0x1E,0x87,0x92,0x4A,0xAC, ++0x2F,0x14,0xAD,0x2F,0x55,0x46,0x60,0xAA, ++0x27,0xB0,0x01,0x00,0x2B,0x1C,0x3A,0x41, ++0x27,0xD5,0x6D,0x7C,0x2B,0xD7,0xDD,0xD8, ++0x27,0xFE,0x23,0x37,0xB3,0x10,0xAE,0x31, ++0x27,0xBC,0xAB,0x1A,0xCC,0x7F,0x14,0xE5, ++0x27,0x91,0x77,0x0C,0xDD,0xAB,0x3A,0x50, ++0x27,0x23,0x07,0x2F,0x00,0xC1,0x25,0x10, ++0x27,0xD7,0xFB,0x2D,0xE7,0xFB,0xFC,0x74, ++0x2F,0x82,0xB5,0x2A,0xEA,0x5D,0xD9,0x1A, ++0x27,0x83,0xEA,0xB7,0x9B,0x9C,0x4C,0xAB, ++0x2F,0x33,0x8D,0xD4,0xCA,0x4E,0xBF,0x9A, ++0x2F,0x3A,0x76,0xD6,0xC3,0xB8,0x99,0xA6, ++0x2F,0x13,0x48,0x1B,0x5F,0x2E,0xAC,0x01, ++0x27,0x1C,0xEE,0x4F,0xC3,0x57,0x13,0xFF, ++0x2F,0x47,0xD9,0xD3,0x05,0x19,0x47,0x81, ++0x27,0x4F,0x0C,0x06,0x4D,0x08,0x70,0x2A, ++0x2F,0xB9,0x54,0x46,0xFE,0x6B,0x72,0x90, ++0x27,0x69,0xDA,0xFC,0x92,0x94,0xA8,0x2F, ++0x27,0xB5,0x8A,0xC0,0x20,0xBD,0x70,0xA7, ++0x2F,0x0D,0x52,0xDC,0xFF,0x5A,0x32,0xCC, ++0x27,0x44,0xB1,0x2C,0x10,0x39,0x49,0x38, ++0x27,0x41,0xE7,0x37,0x7A,0x0C,0x30,0x89, ++0x2F,0x1C,0x7F,0x40,0xEA,0xE3,0xA0,0xDE, ++0x27,0xB6,0x5D,0xA1,0x1B,0x7E,0x1A,0xDD, ++0x2F,0x0B,0xC7,0xAF,0xA5,0xDA,0xFE,0xDA, ++0x27,0x33,0x32,0xFF,0x01,0x7D,0x29,0x22, ++0x2F,0x01,0x34,0xE2,0xD2,0x0A,0xAA,0x3F, ++0x27,0x87,0x24,0x77,0x6C,0xE9,0x1E,0xCB, ++0x27,0x92,0x62,0x8D,0x76,0xC2,0x8D,0x44, ++0x2F,0xFA,0xEE,0x3C,0xA9,0x62,0xCC,0x12, ++0x27,0x50,0xBE,0x4C,0xBC,0x8F,0xD4,0x2D, ++0x27,0xCF,0x8A,0x22,0xDD,0x31,0xC2,0x7C, ++0x2F,0xE4,0x95,0x2D,0xB7,0x97,0xEE,0x6B, ++0x2F,0xC5,0x00,0x8E,0xF8,0x31,0x22,0xC3, ++0x27,0x8F,0xD7,0x29,0x24,0xB3,0x25,0x39, ++0x27,0x45,0xD4,0x58,0x2A,0x98,0xA4,0x43, ++0x27,0xEC,0x9B,0xDF,0xBC,0x4F,0x6E,0xD9, ++0x2F,0xBD,0xCB,0xC2,0xCF,0x41,0x70,0xCF, ++0x27,0x43,0x2B,0x1A,0xDB,0x8D,0x63,0x26, ++0x2F,0xD5,0x9B,0xAB,0xC7,0x77,0x75,0x7E, ++0x27,0x1F,0x63,0xBC,0xF3,0x9B,0x9D,0xBE, ++0x2F,0xF4,0x65,0x69,0xA4,0x72,0x23,0xCA, ++0x21,0xFB,0x21,0x43,0x02,0xCB,0x99,0x36, ++0x05,0x00,0x47,0x01,0xF1,0x03,0x5F,0x8D, ++0x22,0x1E,0xC2,0x9B,0x4A,0x01,0xD1,0xCF, ++0x05,0x90,0x38,0xFC,0x96,0xC0,0x98,0x96, ++0x2C,0x24,0x41,0x26,0x01,0xA4,0x24,0x12, ++0x05,0xE0,0xED,0x23,0xAE,0x82,0xA9,0xE6, ++0x22,0xE5,0xB8,0xB5,0x95,0xAD,0x92,0xC6, ++0x05,0xCD,0xF6,0x39,0xB9,0x0B,0x09,0x76, ++0x22,0x1C,0x35,0x18,0x64,0xBB,0xC6,0x25, ++0x05,0x96,0xE2,0x75,0x4B,0x49,0x53,0x10, ++0x29,0x01,0x91,0x8E,0xCD,0x99,0x6B,0xAA, ++0x05,0x5F,0x76,0x90,0x4A,0x0F,0x04,0xEC, ++0x2B,0xF6,0x1E,0x90,0x2E,0xD8,0xD2,0x31, ++0x05,0xEE,0x77,0xFB,0x8B,0xA0,0x3D,0x9A, ++0x2C,0x85,0x2D,0xEF,0xDF,0x9E,0x35,0x69, ++0x05,0x57,0x62,0x2B,0x64,0x4A,0x23,0xC4, ++0x2F,0xAF,0x1B,0xB9,0x10,0x36,0x14,0xA2, ++0x29,0x38,0xE6,0x6C,0x1D,0x93,0x97,0xE7, ++0x05,0xEA,0xBC,0x84,0x3E,0x33,0x11,0xF3, ++0x2C,0x28,0x56,0x10,0x64,0x06,0x09,0x44, ++0x05,0xC9,0x29,0xB7,0x15,0xB0,0x97,0xD2, ++0x2C,0x8A,0xD4,0xE3,0x63,0x40,0xB3,0xAE, ++0x05,0xE3,0x86,0x83,0xD1,0xCE,0xA1,0xBE, ++0x2C,0x25,0x70,0x82,0x31,0x67,0x72,0x81, ++0x05,0xBC,0x44,0xFD,0xBF,0x1A,0xBC,0x26, ++0x2C,0x68,0x88,0x8F,0xDB,0xAE,0xF3,0xA4, ++0x05,0x31,0x20,0xF3,0x9A,0x08,0x16,0x96, ++0x2C,0xF4,0x7C,0xF2,0xF6,0xB2,0xAB,0xA3, ++0x05,0x1D,0xF8,0x32,0x13,0xF2,0xF2,0xBF, ++0x24,0xEE,0x67,0xEB,0xFF,0x9A,0x2D,0x76, ++0x05,0x20,0xB2,0x8A,0xE8,0x43,0x18,0x95, ++0x2F,0x3B,0x24,0xC3,0x10,0xB4,0x36,0x1C, ++0x25,0xE4,0xC4,0x15,0xFA,0x0F,0x0F,0x78, ++0x05,0x38,0x26,0x57,0x52,0xAF,0xD6,0xEE, ++0x24,0x5B,0x5E,0xC1,0xB3,0x2C,0x2F,0x76, ++0x05,0xEA,0x00,0x49,0xE7,0x46,0x05,0xAC, ++0x2F,0xBD,0x30,0x0D,0xB2,0x01,0x83,0x5E, ++0x21,0x94,0xA4,0xBD,0x13,0x18,0x3F,0xC0, ++0x05,0x1B,0x1A,0xE7,0xAB,0x7F,0xC3,0xFC, ++0x2C,0x88,0x2C,0xDF,0x7F,0xEE,0xCB,0x35, ++0x05,0xE7,0x50,0x23,0x65,0x4C,0x0F,0x54, ++0x27,0x1B,0x2A,0x66,0x07,0x17,0x03,0x3F, ++0x27,0xF6,0x0E,0x86,0x49,0xAB,0x49,0xA3, ++0x2A,0x0A,0x7D,0x1C,0x45,0x6E,0xD4,0xE4, ++0x05,0x1B,0x74,0xC9,0x7E,0x31,0xA7,0x0D, ++0x2C,0x8B,0xCD,0xC2,0x2F,0x3C,0x83,0x07, ++0x05,0x7A,0xB6,0x63,0xDB,0x9C,0xDB,0x43, ++0x2C,0x2C,0xE4,0x9B,0x16,0xF4,0x60,0xCE, ++0x05,0x5D,0x30,0x03,0x36,0x17,0x0E,0x09, ++0x2F,0x65,0x10,0xCD,0x8D,0xD9,0xDD,0x57, ++0x2F,0x0C,0x68,0x12,0x88,0x55,0xF0,0xE3, ++0x27,0xC5,0x28,0xF7,0xD8,0x4A,0x67,0x57, ++0x27,0x90,0x5B,0x0C,0x58,0xBE,0x9A,0x96, ++0x2F,0x3A,0x6C,0x51,0x6B,0x3B,0xC8,0xBA, ++0x2F,0x41,0xAB,0x98,0x0E,0x66,0x9D,0xC8, ++0x27,0x67,0x3B,0x7A,0xFD,0xF6,0xA5,0x02, ++0x2F,0xBF,0xB7,0x7E,0xEE,0xD6,0x18,0x5F, ++0x2F,0x3E,0x2A,0x8C,0xEC,0x38,0x54,0xF6, ++0x27,0x6C,0xAE,0x30,0x7E,0xF7,0x41,0x13, ++0x27,0x73,0x87,0x9B,0xD8,0x9F,0x1C,0xF8, ++0x2F,0xDB,0x2F,0xEE,0xDD,0x80,0x84,0xF7, ++0x2F,0x32,0xC1,0x02,0xCC,0xF4,0x96,0x41, ++0x27,0x26,0x88,0xD2,0xA3,0x41,0x29,0x4A, ++0x2F,0xDA,0x87,0xE5,0x99,0x02,0xE2,0x21, ++0x27,0xED,0xBA,0x64,0x4D,0xEF,0xFD,0xE6, ++0x2F,0xD4,0x60,0x17,0xC8,0x04,0xAF,0xCE, ++0x2F,0xF9,0xDB,0x5A,0xEC,0xFB,0x6D,0x73, ++0x2F,0xE5,0x20,0x60,0x25,0x5D,0x0A,0x90, ++0x2F,0xDF,0x7A,0xD8,0x74,0x51,0x63,0x20, ++0x27,0x9D,0x71,0xF5,0x77,0xA7,0xE2,0x6E, ++0x2F,0x28,0x11,0xD7,0x1C,0x7B,0x7E,0xDF, ++0x27,0xA0,0x54,0x05,0x46,0xB0,0x3D,0x01, ++0x27,0x90,0xD0,0x52,0xB5,0x7D,0xF1,0x11, ++0x27,0x9B,0x7C,0x31,0x2F,0xC7,0x45,0x75, ++0x2F,0xFB,0xCD,0x19,0x27,0x36,0xB0,0xFD, ++0x2F,0x9C,0xB2,0x3D,0x03,0x70,0xC5,0x8C, ++0x2F,0xEB,0x5A,0xB4,0xAA,0x2E,0x35,0xBF, ++0x27,0x0C,0x95,0x4D,0x2D,0xA6,0x1D,0x3C, ++0x27,0xC2,0xD4,0x96,0x87,0x93,0xDC,0x23, ++0x2F,0x4B,0x9F,0xEB,0x76,0xDE,0x30,0x5B, ++0x2F,0x41,0xCF,0x94,0x5E,0x42,0xA4,0x17, ++0x27,0xF8,0xF8,0x9F,0x37,0xA4,0x3E,0x4B, ++0x27,0x70,0xDC,0xB0,0x6F,0x82,0x67,0xFB, ++0x2F,0xA1,0x83,0xDB,0xB5,0x58,0x74,0x59, ++0x2F,0xA8,0x58,0xF7,0x19,0xCA,0x3B,0x48, ++0x2F,0x45,0x4E,0x36,0x74,0x58,0x8A,0x24, ++0x27,0x1F,0x50,0x3B,0xD1,0xBC,0x78,0xA4, ++0x2F,0xDB,0xFC,0x10,0x68,0x60,0x8B,0xA1, ++0x2F,0x63,0xB7,0xE7,0x72,0xED,0x3A,0xE0, ++0x27,0x6A,0x9E,0x2E,0x85,0x82,0x8F,0x31, ++0x27,0x6B,0x68,0x70,0x37,0xEA,0xD6,0xFA, ++0x27,0x2C,0x7F,0x43,0x4C,0x7C,0x8F,0x15, ++0x27,0xB6,0x35,0x88,0xB2,0x37,0xDF,0x38, ++0x27,0x85,0x44,0xA7,0x21,0xBC,0xE6,0x48, ++0x27,0x17,0x1D,0xD8,0xBE,0x7A,0x2D,0xE6, ++0x27,0x29,0x30,0x91,0x52,0x5B,0xBF,0x3D, ++0x2F,0xB0,0x8E,0xC4,0xE5,0xA5,0xA6,0x58, ++0x27,0xB3,0x55,0x7F,0x22,0xE2,0xEB,0xC8, ++0x27,0x7C,0xD6,0x09,0x3D,0x3F,0xED,0x55, ++0x2F,0x06,0xA9,0x47,0x47,0x9B,0xF7,0x86, ++0x2F,0x29,0x14,0xAB,0x3D,0x85,0x44,0x96, ++0x27,0x95,0x45,0x65,0x1B,0xAA,0xA9,0x8B, ++0x2F,0x2C,0x2C,0xF9,0xC6,0xFB,0xDB,0x97, ++0x27,0xB4,0x0E,0x69,0xDB,0xE7,0x43,0x22, ++0x27,0xF7,0x92,0x23,0x72,0x58,0xF1,0x53, ++0x27,0xD3,0x07,0xB0,0x2A,0xCD,0x94,0xA5, ++0x2F,0x05,0xE7,0xFA,0xC3,0xCC,0xC1,0x8B, ++0x2F,0x27,0x4B,0x0B,0xD2,0xAF,0x27,0x78, ++0x27,0x1B,0x7A,0x0C,0xED,0x82,0xB6,0xE0, ++0x2F,0x26,0xC1,0x71,0xA4,0xB4,0xE4,0x15, ++0x27,0x04,0xE1,0x94,0xBF,0xDA,0xB9,0xCF, ++0x27,0xF2,0x34,0x48,0x65,0x1D,0x67,0x5C, ++0x27,0x53,0x51,0xBF,0xFD,0x64,0x91,0xE8, ++0x27,0xB8,0x90,0xB6,0xCC,0xA1,0x50,0x9D, ++0x27,0x1B,0xEE,0xCA,0x15,0x33,0x36,0x6D, ++0x27,0x21,0x42,0xBB,0xAC,0x74,0x2C,0x82, ++0x27,0xAF,0xC2,0xBB,0x5B,0xE3,0x08,0xC4, ++0x27,0x5F,0xC5,0x1D,0x63,0xDC,0xF4,0x71, ++0x2F,0x70,0x43,0x4D,0x1E,0x6F,0xBA,0x87, ++0x2F,0x6E,0x07,0x53,0xAF,0xFF,0x72,0x0F, ++0x27,0x37,0x88,0x55,0x0F,0x90,0xD6,0xCA, ++0x2F,0xFE,0xF6,0xC6,0x5E,0xD5,0x99,0xC2, ++0x2F,0x48,0x03,0x89,0xBF,0xE3,0xE9,0x3D, ++0x2F,0xD0,0x29,0x0E,0x98,0xCB,0x9E,0x6C, ++0x2F,0x8A,0xBE,0x61,0x43,0x90,0x3A,0xB3, ++0x27,0x10,0x72,0xBD,0xA5,0xD9,0x52,0xDD, ++0x2F,0xF5,0x02,0x29,0x1A,0x3E,0x44,0x46, ++0x2F,0x64,0x6B,0xA4,0x87,0xED,0x76,0xBF, ++0x27,0x32,0xB0,0xC0,0xFD,0xE7,0x51,0xD9, ++0x27,0x64,0x46,0x90,0x4C,0xF2,0xAE,0x0A, ++0x27,0xE2,0x12,0x21,0x0D,0x5A,0xDD,0x86, ++0x27,0x9E,0x3B,0x96,0xF9,0xC9,0xCC,0xBC, ++0x27,0xFF,0x93,0x7C,0x2A,0x18,0xAB,0xAE, ++0x27,0xD2,0xA5,0x9E,0x97,0x0B,0xC6,0x8F, ++0x27,0xFB,0x44,0xF1,0x18,0x19,0x6B,0xD9, ++0x2F,0xC9,0xB0,0x3A,0x5E,0xE5,0xAB,0x8B, ++0x27,0x50,0x47,0x73,0xD2,0xE8,0x4E,0xD1, ++0x27,0x59,0xE9,0x8A,0xF0,0xAE,0x40,0xA8, ++0x2F,0xC0,0x6C,0x9A,0x0B,0x0C,0x40,0x68, ++0x27,0xB3,0x32,0x2D,0x0C,0x02,0x62,0x43, ++0x27,0x27,0x22,0x08,0x96,0x8A,0x72,0x19, ++0x27,0x91,0xA9,0x39,0x8E,0x2D,0x4E,0x61, ++0x2F,0xCD,0x85,0x01,0x22,0x5B,0x48,0x00, ++0x27,0xF8,0x4B,0x4F,0x3A,0xD5,0x08,0x09, ++0x27,0x85,0x83,0x53,0x21,0xB5,0x46,0xCF, ++0x2F,0xF7,0x4C,0xC7,0x73,0x41,0xDF,0x33, ++0x27,0x87,0x3B,0x21,0x76,0xA0,0x09,0x85, ++0x27,0x7F,0xD4,0xCB,0xA7,0x34,0xFD,0xF8, ++0x2F,0x0D,0x3A,0x59,0xB1,0xAF,0xA2,0x4E, ++0x27,0xAF,0x8F,0xE1,0xC6,0x64,0xCB,0x55, ++0x27,0x60,0x05,0x04,0xBB,0xAC,0x0D,0xAD, ++0x27,0xEA,0x05,0x76,0xC9,0x3B,0xD8,0x9C, ++0x27,0xF9,0x88,0x23,0x54,0x32,0x54,0x31, ++0x2F,0x94,0xE8,0xA9,0x69,0x06,0x83,0x7C, ++0x2F,0xC7,0x5C,0xAD,0xD8,0x8E,0x36,0xE3, ++0x27,0xF1,0x73,0x1C,0x3F,0x60,0x85,0x39, ++0x2F,0xFB,0x52,0xB5,0xFC,0xBC,0x34,0xA7, ++0x27,0x5F,0xDC,0x64,0x1A,0x8C,0xB8,0x33, ++0x27,0xF2,0x62,0x65,0x41,0xBB,0x1D,0x63, ++0x27,0x92,0x48,0x82,0x63,0xF8,0x54,0xE1, ++0x2F,0x29,0x16,0x18,0xF7,0x3B,0x7D,0x49, ++0x2F,0x68,0xD9,0x9B,0x3D,0x94,0xFC,0xA2, ++0x27,0xD5,0x46,0xDB,0x5B,0xAA,0x0B,0xC1, ++0x2F,0x6A,0x2A,0xF3,0xE9,0x15,0x59,0x4D, ++0x2F,0xC2,0xE7,0x42,0x01,0xE9,0x8E,0x7B, ++0x27,0x1C,0xDA,0x3F,0x17,0x22,0xC5,0x52, ++0x27,0xBF,0x51,0xA8,0xCE,0x7E,0xD7,0xBC, ++0x27,0x4B,0x17,0xFB,0x3E,0x7B,0x39,0x00, ++0x27,0x83,0xED,0xD1,0x40,0x8F,0x70,0xA3, ++0x27,0xEF,0xAF,0xB9,0x7F,0xDB,0x0F,0x7A, ++0x2F,0x25,0x2F,0x05,0x66,0xAE,0x2D,0x06, ++0x27,0x11,0xEE,0xC4,0x3E,0xD4,0x52,0x73, ++0x2F,0xE5,0xC9,0x0E,0xF2,0x72,0xD6,0xFE, ++0x2F,0x47,0x48,0x18,0x15,0x49,0x2D,0xC3, ++0x27,0xD7,0xF5,0x6E,0xA6,0x5F,0x5E,0xD9, ++0x2F,0x29,0x96,0x2A,0x30,0x27,0xE6,0x42, ++0x2F,0x22,0x8E,0xAD,0x79,0x66,0x87,0x96, ++0x2F,0xF2,0x99,0xEA,0x6B,0x01,0x99,0x8E, ++0x2F,0xAB,0xBC,0x18,0xE3,0x20,0xBD,0xC6, ++0x27,0xBB,0x24,0x79,0x72,0x20,0xA1,0xF6, ++0x2F,0xFE,0x07,0xF4,0x26,0x36,0x89,0x5F, ++0x2F,0x81,0x5A,0xB8,0xE8,0x27,0x54,0xDF, ++0x2F,0xDE,0x90,0xAF,0xCC,0xBE,0x3F,0x5B, ++0x2F,0x43,0x7F,0x3B,0x27,0x04,0x5C,0xD1, ++0x2F,0xE2,0x0F,0xA9,0x80,0xB9,0x68,0xC5, ++0x27,0xF4,0x77,0x69,0x74,0x68,0x35,0x36, ++0x2F,0x6B,0x30,0x2E,0xDD,0x1D,0xC7,0x1E, ++0x27,0xD9,0x82,0x48,0x32,0xB7,0xE3,0x5D, ++0x2F,0xD6,0xF8,0xA2,0x8C,0xC5,0x07,0x8F, ++0x2F,0x5B,0xB2,0xB2,0xAC,0x29,0x98,0x21, ++0x2F,0x8F,0x8C,0x75,0xEB,0x4B,0x88,0xE6, ++0x2F,0x28,0x61,0x8F,0x69,0x49,0xB5,0xCA, ++0x2F,0xCF,0xA0,0x81,0xFB,0xBB,0x46,0x7F, ++0x27,0x55,0x09,0x20,0x20,0x95,0x87,0x8B, ++0x27,0xE7,0x4F,0x59,0x55,0x6E,0xD3,0x98, ++0x2F,0x35,0x4B,0x2D,0x77,0xE3,0xFF,0xA0, ++0x27,0x5B,0x3E,0x3D,0xF5,0x24,0x33,0x56, ++0x27,0xF1,0xBF,0xDC,0x50,0x06,0x98,0x8C, ++0x2F,0x02,0x44,0x8A,0x82,0x53,0x09,0x80, ++0x2F,0xA7,0xEA,0x80,0x4D,0x2D,0x8F,0xE5, ++0x2F,0xD0,0x7A,0xCA,0xE6,0xAD,0xF0,0x7A, ++0x2F,0x96,0xBE,0xD8,0xF8,0x6E,0x77,0x59, ++0x2F,0x60,0xFD,0x93,0x86,0x36,0xD0,0x09, ++0x27,0x4C,0xFC,0xF6,0x96,0xC5,0xA4,0x2B, ++0x2F,0xDC,0x16,0xBE,0x99,0x7B,0xB2,0xAA, ++0x2F,0xC4,0x6D,0xD8,0x5F,0xC8,0xC7,0x98, ++0x2F,0x11,0x1F,0x0E,0x83,0x55,0x48,0x7D, ++0x27,0x43,0x9D,0xB6,0x86,0x33,0xBC,0xC9, ++0x2F,0x02,0xFF,0x83,0x0F,0xC3,0xE5,0xD3, ++0x27,0x29,0x2E,0xE3,0xCD,0xB5,0xD5,0xDC, ++0x2F,0xF9,0x02,0xE6,0xE6,0xEF,0x25,0x3E, ++0x27,0x57,0xDF,0xD7,0xE6,0x33,0xC5,0x7A, ++0x2F,0xB3,0x08,0x1C,0x71,0x55,0xA4,0xB7, ++0x2F,0xBB,0xC7,0x62,0x6D,0x6C,0x22,0x43, ++0x27,0xD5,0xD6,0xF5,0x72,0x87,0x59,0x2B, ++0x27,0xB9,0xD9,0x0D,0x75,0x60,0x56,0x65, ++0x27,0x49,0x1B,0x3A,0x5B,0xE3,0x9A,0x2A, ++0x27,0x87,0xDA,0xC8,0xB7,0x09,0x1F,0xCD, ++0x2F,0x18,0x67,0x96,0x32,0xCC,0x50,0x24, ++0x27,0x00,0x6B,0x09,0x31,0x52,0x7F,0xB1, ++0x2F,0x87,0x39,0x40,0xA1,0x5E,0xB7,0xE1, ++0x27,0xD3,0x6C,0x79,0xCC,0x17,0xC5,0x92, ++0x27,0xAE,0xE2,0xC7,0xAA,0xAF,0x45,0x81, ++0x2F,0xEA,0x4E,0xA6,0x4A,0x3B,0xC3,0x30, ++0x2F,0x07,0x44,0x02,0xFB,0xD4,0x84,0xA7, ++0x27,0xA4,0x47,0xC8,0x5C,0x71,0x7E,0x03, ++0x27,0xA6,0x46,0x52,0xA2,0x1C,0xC1,0x6A, ++0x2F,0x76,0xB2,0xC6,0x8E,0xA5,0x5E,0xEE, ++0x2F,0x22,0x87,0x42,0x3D,0x8B,0x75,0x5F, ++0x2F,0x82,0x23,0x4C,0xC2,0x2E,0x4A,0x53, ++0x27,0xB8,0x31,0x37,0x88,0x5D,0xFD,0xFF, ++0x27,0x00,0x19,0x13,0x34,0x78,0xFD,0xD5, ++0x2F,0xCE,0xD5,0xB1,0x21,0x15,0xE0,0xC4, ++0x2F,0xB6,0x80,0x3A,0x99,0x00,0x7E,0x73, ++0x27,0xC1,0x15,0x90,0x40,0xDA,0xB6,0x28, ++0x2F,0x1C,0x1B,0x6A,0x64,0x0B,0x14,0x39, ++0x2F,0xC6,0x86,0x8D,0x1E,0xBA,0x2E,0x1E, ++0x2F,0xFC,0xC2,0x4C,0x8D,0x34,0x18,0x84, ++0x27,0xEF,0xC4,0xF3,0xDE,0x04,0x51,0xD1, ++0x27,0x56,0xAA,0x3A,0xB5,0x13,0x6C,0x0F, ++0x27,0x01,0x04,0xA6,0xF3,0x29,0xF6,0x66, ++0x2F,0x7F,0x20,0xEE,0x87,0xAB,0x72,0x93, ++0x2F,0x3C,0xD1,0x9E,0x36,0x89,0xCC,0xAD, ++0x2F,0x84,0x31,0xEB,0x29,0x48,0x32,0x35, ++0x27,0xC8,0x02,0x2E,0xE6,0x67,0xD2,0x60, ++0x2F,0x0C,0x50,0x05,0x25,0x3F,0x19,0x65, ++0x27,0xF6,0xEE,0x88,0x9F,0xCF,0x32,0x9B, ++0x2F,0xE1,0x80,0x8D,0xB4,0xF3,0x83,0x6C, ++0x27,0x5F,0x7E,0xBF,0x7B,0x15,0x97,0xD8, ++0x27,0xFD,0x24,0xB0,0xC4,0xDE,0x16,0xBF, ++0x2F,0x78,0x2E,0x9C,0x9A,0xC3,0xF5,0x18, ++0x27,0x99,0x52,0x62,0x0C,0x7B,0x8D,0x37, ++0x2F,0x6B,0x7C,0x7F,0x5C,0x95,0x30,0x44, ++0x2F,0xAC,0xF8,0xBE,0xB3,0x6D,0x86,0x49, ++0x27,0x37,0x27,0xED,0xB1,0x90,0xD1,0x99, ++0x2F,0xFD,0xC5,0xB6,0xC7,0x7A,0x7C,0x54, ++0x27,0xD9,0xAB,0x8D,0x01,0xE7,0xD0,0x3F, ++0x27,0x1D,0x86,0x1E,0x11,0x09,0xEF,0x28, ++0x27,0x9F,0x63,0x69,0x6E,0xF0,0x5E,0x2B, ++0x2F,0xE3,0x93,0x6A,0xF3,0x25,0x6B,0xDC, ++0x2F,0x4F,0xE2,0x80,0xE7,0xB6,0x43,0x5D, ++0x27,0x00,0x86,0x12,0x17,0x66,0x5D,0x19, ++0x2F,0xAE,0xD5,0x79,0xC0,0x0A,0xB0,0xC5, ++0x27,0x0F,0x0D,0x3C,0x3D,0x49,0x9D,0xDD, ++0x2F,0x55,0x19,0x8A,0x50,0x9B,0x22,0x1B, ++0x2F,0x26,0xE8,0xFA,0xDE,0x56,0x39,0x98, ++0x27,0x70,0xAB,0x61,0x60,0xA4,0x9C,0x01, ++0x2F,0x2B,0x11,0x62,0x10,0xE9,0xEC,0x37, ++0x2F,0x4E,0x84,0x47,0x7D,0x0D,0x41,0x69, ++0x2F,0xF0,0x89,0x8F,0x01,0x46,0xBD,0x2D, ++0x2F,0x68,0xD0,0xA7,0x11,0x67,0x9B,0xB2, ++0x27,0x43,0xC7,0x2C,0xB2,0x11,0x50,0x6D, ++0x2F,0x3F,0x7B,0x81,0xA1,0xF3,0xEA,0x57, ++0x2F,0xF2,0x18,0xF2,0x0B,0x88,0x8A,0x14, ++0x2F,0x42,0x61,0xC6,0xDC,0x42,0x38,0x1D, ++0x2F,0xA8,0x51,0x25,0x14,0xF3,0x34,0x65, ++0x2F,0x1C,0x0C,0xE4,0x92,0x2F,0x23,0x9A, ++0x27,0x43,0x8E,0xBD,0xDA,0x0A,0xB4,0x06, ++0x2F,0xAF,0xC7,0x39,0x9E,0x41,0xD2,0x38, ++0x2F,0x30,0xA1,0x61,0xA5,0xAC,0xDC,0x0F, ++0x2F,0xCB,0xDB,0x55,0x31,0xAD,0xE0,0xAB, ++0x27,0x82,0x2C,0x7F,0x5E,0x4B,0x2E,0xB5, ++0x2F,0x8E,0xD3,0x65,0x63,0x14,0x8D,0x83, ++0x27,0x1B,0x59,0x08,0x1E,0xBE,0x74,0xA2, ++0x2F,0x16,0x24,0x28,0x4F,0x6B,0x4C,0x68, ++0x27,0x7A,0xFB,0x7E,0xE2,0x66,0x9B,0x26, ++0x27,0x22,0x27,0x25,0xA0,0x06,0x2C,0x0F, ++0x27,0x21,0xFC,0xED,0x20,0xC6,0x95,0xE1, ++0x27,0x5B,0x38,0x17,0x21,0x1F,0x64,0x3F, ++0x2F,0x35,0xE6,0x01,0xA9,0x7C,0x83,0x9E, ++0x2F,0xBF,0xF6,0x62,0xEC,0xB1,0xE1,0x9B, ++0x27,0x56,0x7E,0xF8,0x1C,0xF6,0xCD,0x51, ++0x27,0xDA,0x0C,0xFE,0x6A,0x8E,0xAF,0xB5, ++0x2F,0x76,0xAE,0x67,0x18,0x40,0xAF,0xAA, ++0x27,0xF3,0xAE,0xFF,0x4B,0x9B,0x16,0xDC, ++0x2F,0x6A,0x3D,0x75,0x25,0x12,0x8A,0x08, ++0x2F,0x6D,0x9D,0xCD,0x34,0x85,0x2C,0x6F, ++0x27,0x7C,0x10,0x02,0x63,0xD0,0xF6,0x1A, ++0x27,0xAC,0x42,0xC2,0x44,0x05,0xB1,0xE5, ++0x2F,0xC8,0xFF,0x44,0xE9,0x3F,0xE6,0x29, ++0x27,0x0C,0xE0,0x32,0x28,0xC9,0x54,0x8C, ++0x2F,0xB3,0xF5,0x8C,0x27,0x19,0xAF,0x65, ++0x2F,0x3A,0xD2,0x3E,0x22,0x33,0x1D,0x0B, ++0x27,0xD1,0x64,0x74,0xE1,0xD5,0xF3,0x88, ++0x27,0xBD,0x15,0xDE,0xE9,0xC3,0x14,0xAB, ++0x27,0xAA,0xB5,0xEF,0xE3,0x37,0xFD,0xE5, ++0x2F,0xDB,0x09,0xF8,0x4F,0x2E,0x30,0xB4, ++0x27,0x90,0x8E,0x40,0xC1,0xB5,0x4D,0x65, ++0x2F,0xA9,0x41,0x15,0x18,0xE5,0xD0,0xB7, ++0x27,0x36,0x11,0xD8,0x9C,0x84,0x5B,0x69, ++0x2F,0x3F,0x1E,0x2F,0xB1,0xFC,0x8C,0x07, ++0x2F,0x51,0xA9,0x92,0x9E,0xC9,0xA1,0x61, ++0x2F,0x4C,0xED,0xE0,0x62,0x6A,0x58,0xBA, ++0x2F,0x21,0x2E,0x5C,0xD8,0xAD,0xFC,0x4B, ++0x27,0x26,0x4D,0xB9,0x8A,0xC4,0xFD,0xA7, ++0x27,0x7B,0x51,0x77,0xB7,0x23,0x4E,0xE1, ++0x2F,0xD8,0x7A,0x9A,0x50,0x28,0xCC,0xC6, ++0x27,0x1A,0x0B,0xBC,0x18,0x37,0xC7,0xBE, ++0x27,0xC2,0x83,0xAA,0xDF,0x79,0xA7,0x5E, ++0x27,0xDA,0x6D,0xD4,0x8B,0xAA,0xF7,0xBE, ++0x2F,0xAF,0x27,0xEB,0x2C,0x25,0xE0,0xA6, ++0x27,0x62,0xC1,0x0F,0x6E,0xFF,0xA0,0x7A, ++0x27,0x72,0xCD,0x65,0xF3,0x6D,0x80,0x9C, ++0x27,0x4F,0x77,0xF5,0x4F,0xCF,0xEE,0x12, ++0x27,0x35,0xA0,0xE5,0xF8,0x21,0x15,0x53, ++0x2F,0x12,0x5B,0x45,0x13,0x55,0x2D,0xAB, ++0x2F,0xE0,0xE7,0xB1,0x21,0x85,0x4E,0xAA, ++0x2F,0xEB,0x6A,0x09,0xB5,0xED,0xAE,0xC1, ++0x2F,0x54,0x98,0xEF,0x44,0xED,0x0F,0xA6, ++0x2F,0x4C,0x6D,0x58,0x06,0x3F,0x3D,0xF3, ++0x27,0xF3,0x57,0x67,0x5B,0x89,0x41,0x44, ++0x2F,0xBE,0x84,0x2A,0x5A,0xAB,0x31,0xA2, ++0x2F,0x5E,0xE6,0x0D,0x03,0xDB,0x74,0xFC, ++0x27,0xDA,0x1C,0x4F,0x52,0x84,0x87,0xD6, ++0x2F,0x00,0xB5,0xB9,0x9C,0x44,0xB5,0xB9, ++0x2F,0xCD,0x34,0x41,0x25,0x85,0xA4,0x2F, ++0x27,0x00,0x20,0x72,0xB2,0x94,0xE5,0xB1, ++0x27,0xC3,0x04,0x82,0x9C,0x47,0x0C,0x02, ++0x27,0xCA,0x9E,0xDF,0x9D,0x3B,0x9D,0x97, ++0x2F,0x01,0x60,0xF6,0x11,0x2C,0xE3,0x8E, ++0x2F,0x14,0xE4,0x52,0xA4,0x26,0x81,0xA7, ++0x2F,0x70,0x30,0x9E,0x2F,0xDC,0xAA,0xEC, ++0x27,0x79,0xC0,0x86,0xB0,0x15,0xF3,0x94, ++0x2F,0x14,0xC7,0x59,0x4D,0x2B,0xD7,0xCF, ++0x2F,0x77,0x50,0x71,0x88,0xF6,0x03,0xAD, ++0x27,0x56,0x52,0x66,0x67,0x5C,0x08,0xB2, ++0x27,0x4C,0xB1,0x49,0x3F,0xC1,0xFF,0x9C, ++0x27,0x6E,0xAB,0xF8,0x72,0xD6,0x14,0x08, ++0x2F,0xED,0xD2,0x84,0x84,0x9A,0x73,0x9B, ++0x27,0x98,0x86,0x52,0xF1,0x33,0x2C,0xC8, ++0x2F,0x07,0x14,0xB5,0x17,0x48,0x90,0xB8, ++0x27,0x59,0x98,0x9D,0x8D,0x8A,0x62,0x40, ++0x27,0xDD,0xC1,0x4E,0x41,0x9C,0xE4,0x8B, ++0x2F,0xAC,0x4D,0x24,0x9C,0xCF,0x6A,0xF4, ++0x2F,0x03,0x0D,0x81,0x6E,0x7F,0x4D,0xFF, ++0x27,0xFF,0x40,0x0C,0xF7,0x82,0x33,0xB0, ++0x27,0x1B,0x8D,0xB7,0xCC,0xF7,0x76,0xE6, ++0x27,0xCD,0x54,0xEF,0x7C,0xDF,0x4D,0x3F, ++0x2F,0xE5,0x53,0xA3,0x04,0xF3,0x13,0x86, ++0x2F,0xCC,0xF6,0x8B,0xA3,0x8F,0x7A,0x4D, ++0x27,0x27,0xBA,0xB3,0x7E,0xD9,0x58,0x26, ++0x27,0x22,0x30,0x8A,0x97,0xAC,0x62,0x9C, ++0x27,0x77,0x7F,0xD3,0xDC,0x8C,0xB1,0x8F, ++0x27,0x69,0xE7,0xD8,0xAD,0xE4,0x71,0xB0, ++0x27,0xA6,0x8F,0x68,0xAB,0xBF,0xC8,0xED, ++0x2F,0xC6,0xDC,0x05,0xB1,0xC0,0x56,0x40, ++0x2F,0x32,0x5E,0x76,0x59,0x01,0xDE,0xFA, ++0x2F,0x96,0xD7,0x48,0xA2,0x39,0xB2,0xA2, ++0x2F,0xE1,0xA2,0x27,0x97,0xC3,0xB9,0x4C, ++0x2F,0x36,0x42,0x51,0xA4,0xF3,0xAF,0xC2, ++0x27,0x27,0x5B,0x5C,0xA4,0xAB,0xEE,0x23, ++0x27,0x6F,0xAB,0x76,0xFF,0x32,0x1D,0x1D, ++0x2F,0x61,0xF2,0x31,0xE7,0xAF,0x2D,0x28, ++0x27,0x5E,0xF6,0x2E,0x07,0xDE,0x7D,0xE1, ++0x27,0x63,0xE3,0x5B,0x91,0xF2,0x3A,0x5D, ++0x2F,0x25,0xA5,0xA9,0xAF,0x90,0x4D,0xC9, ++0x2F,0x08,0xD5,0x96,0xB8,0x31,0x87,0x01, ++0x2F,0xDD,0x90,0x5C,0x99,0x75,0x34,0x7A, ++0x2F,0x4D,0x82,0x22,0x1C,0x28,0x7D,0x71, ++0x2F,0xA2,0xF2,0x56,0xD8,0xB7,0xAC,0x93, ++0x2F,0x1E,0xAA,0x27,0xDA,0x47,0x78,0xA7, ++0x2F,0xE0,0x46,0x14,0x79,0xE4,0xE2,0x15, ++0x2F,0xC2,0xD0,0xE1,0xEE,0x1A,0xD7,0x8C, ++0x27,0x6B,0xDC,0x37,0xCA,0xD1,0xFE,0xF5, ++0x27,0x10,0x37,0x8F,0xC4,0x50,0x08,0xF7, ++0x27,0x16,0x52,0x3A,0xD2,0xB7,0x15,0xF0, ++0x27,0x32,0xA1,0xC7,0xB5,0x4B,0xE0,0x59, ++0x2F,0xB3,0xA2,0x98,0xCE,0x32,0x52,0x19, ++0x2F,0x9D,0x32,0x0D,0xFA,0x0D,0xCB,0xA1, ++0x27,0x6D,0xA4,0x96,0xAC,0x7E,0x79,0xF4, ++0x2F,0xCD,0x5D,0x82,0x45,0xD3,0xE2,0xB4, ++0x27,0xA0,0x8D,0x7B,0xA7,0xC8,0x3D,0x8D, ++0x27,0x23,0x32,0x30,0xC5,0x53,0x61,0xE2, ++0x2F,0xD8,0xF5,0xFE,0x22,0xD9,0xBE,0xA6, ++0x27,0xF3,0xD2,0xAA,0x31,0x14,0x0B,0x28, ++0x2F,0xF6,0x6D,0xD5,0xBA,0xE6,0x1A,0x5F, ++0x2F,0x74,0xA5,0x53,0x26,0x4D,0x7B,0xF6, ++0x27,0x39,0xC9,0xBB,0x85,0x98,0x1B,0xEA, ++0x27,0x29,0xA7,0x91,0x62,0xC4,0x02,0x18, ++0x27,0xCD,0x84,0x91,0xC4,0xC0,0x64,0x14, ++0x2F,0xDF,0x11,0x8C,0xCF,0xD3,0x63,0x6C, ++0x27,0x4A,0x86,0xE2,0xB5,0xD0,0x09,0xF1, ++0x27,0x88,0xFC,0x58,0x07,0x00,0x37,0x3D, ++0x2F,0x54,0xAA,0xED,0x73,0x5B,0x0B,0xBA, ++0x2F,0x48,0x97,0x68,0xC2,0x97,0xA4,0x69, ++0x2F,0xA1,0xE1,0xC2,0x0D,0x35,0x80,0xA8, ++0x27,0x89,0xC3,0xBD,0x8D,0x93,0x69,0x05, ++0x2F,0xF1,0x89,0x5E,0x19,0xB0,0xF7,0xFD, ++0x2F,0x9D,0x6D,0xBA,0xB6,0x0B,0x8D,0x59, ++0x27,0x78,0x80,0x55,0x1C,0xA3,0x16,0x2C, ++0x2F,0x7F,0x8B,0x0D,0x0A,0x4D,0x7C,0x86, ++0x27,0x9F,0x67,0x15,0x1C,0xAB,0x5B,0x58, ++0x2F,0x4B,0x26,0x58,0x7C,0xEE,0xF2,0x1C, ++0x27,0x93,0x3E,0xB9,0xFE,0x74,0xE1,0x12, ++0x27,0x21,0x1F,0x62,0x74,0x57,0x25,0x85, ++0x2F,0x77,0x8D,0x47,0x18,0x11,0xB4,0x65, ++0x27,0xDA,0xED,0x99,0x8A,0x5E,0xF3,0x95, ++0x27,0x09,0x03,0xE2,0x9A,0xF3,0x5F,0xE6, ++0x27,0x32,0xA3,0xB2,0xFB,0x5D,0x8F,0xA2, ++0x27,0xB2,0xB1,0x29,0xFE,0x32,0x3D,0x53, ++0x27,0x10,0xA8,0xB2,0x6A,0xED,0xC6,0xB7, ++0x2F,0xBA,0x14,0x8E,0x56,0x46,0xE5,0xA2, ++0x2F,0x91,0x4A,0xD9,0xD8,0xD1,0xEB,0x01, ++0x2F,0x95,0x8D,0x7D,0xDE,0xAC,0xD4,0x34, ++0x2F,0x09,0x3B,0xB1,0x4D,0xF0,0x93,0xA7, ++0x27,0xC4,0x95,0x54,0xF8,0xB6,0x4F,0xAB, ++0x27,0x7C,0xE2,0x27,0x33,0xB2,0x6B,0x7E, ++0x27,0x40,0x96,0x47,0x2C,0xDB,0xB3,0xBB, ++0x27,0x69,0xB0,0x44,0xD1,0x85,0x10,0x05, ++0x27,0x0A,0xF4,0x3E,0x0B,0x45,0xE6,0xBA, ++0x27,0xFD,0xA8,0x9A,0x00,0x02,0xED,0x46, ++0x27,0x4C,0xBB,0x7D,0x08,0x2F,0x28,0x5E, ++0x2F,0x2D,0x39,0xAA,0x6C,0x49,0x76,0x40, ++0x27,0xA4,0x3A,0x2B,0xEC,0x17,0x6E,0x0D, ++0x2F,0xB0,0xE3,0xDF,0x5B,0x49,0xE5,0x0B, ++0x2F,0x0F,0x1F,0x17,0x4E,0x1A,0xC1,0xD5, ++0x2F,0x8E,0x19,0x62,0xAF,0xC7,0xB2,0xB0, ++0x2F,0xA4,0x5E,0x37,0xAC,0x58,0xBD,0xA7, ++0x2F,0xDB,0x67,0x0E,0xAB,0xAB,0x27,0x83, ++0x2F,0x09,0xCE,0xF9,0x58,0x7A,0xCD,0x1C, ++0x27,0xE6,0xFA,0x28,0xE4,0x4D,0x21,0xBA, ++0x27,0xF7,0x6B,0x4A,0x20,0xDF,0xC4,0xA9, ++0x27,0x8A,0xF6,0x00,0x96,0x84,0x66,0x60, ++0x27,0x2B,0x75,0xB7,0x19,0xBA,0x17,0x00, ++0x2F,0xA7,0x02,0x99,0xB7,0xE3,0x57,0xAA, ++0x27,0xED,0x4F,0x43,0xF2,0x0B,0xC4,0xC9, ++0x27,0x49,0xC1,0xE9,0x2E,0x1D,0x07,0x10, ++0x2F,0x8F,0xFA,0x64,0x87,0x02,0xDB,0x74, ++0x2F,0x5D,0x6D,0x92,0x10,0xA6,0x87,0x64, ++0x2F,0xFD,0x36,0x25,0xC4,0xD6,0xE5,0x57, ++0x2F,0x27,0x2C,0x18,0x75,0xAF,0x76,0x2A, ++0x2F,0x9B,0x34,0xB9,0xB2,0x77,0x4D,0xD6, ++0x27,0x4D,0x09,0xC3,0xFD,0x1A,0xEB,0xF0, ++0x27,0xBC,0xF6,0x05,0xC6,0x34,0x37,0x6A, ++0x2F,0x83,0x66,0x8B,0x2B,0x9D,0x57,0x71, ++0x2F,0x2C,0xC0,0x89,0x45,0xB5,0xCD,0x4B, ++0x27,0x46,0xDC,0x28,0x47,0x89,0x2B,0x3E, ++0x27,0xA2,0xBB,0xAF,0xA7,0x1A,0xED,0x4D, ++0x2F,0x3A,0xB2,0xFC,0x1B,0xDC,0x6D,0x17, ++0x27,0x2A,0xAC,0x61,0x03,0x83,0x87,0x84, ++0x27,0x3D,0x12,0xA9,0xDD,0x18,0x6B,0x65, ++0x2F,0x2F,0x61,0x59,0xA1,0x7C,0x1A,0x40, ++0x2F,0xEB,0xEE,0x69,0xB2,0x55,0x77,0x85, ++0x2F,0x6C,0x9C,0x2E,0xBF,0xEA,0xBE,0x58, ++0x27,0x46,0xAC,0x4B,0x77,0xB7,0xDD,0xAA, ++0x2F,0xE9,0x23,0x10,0x76,0xF0,0x33,0x0B, ++0x27,0xCA,0x31,0xDF,0x11,0xCB,0x9A,0xC0, ++0x27,0xCE,0xB1,0xB1,0xEE,0xD3,0xAA,0x1C, ++0x27,0x34,0xC9,0xC7,0xFF,0x79,0x48,0x35, ++0x2F,0x85,0xA7,0x79,0x50,0x83,0x5A,0x40, ++0x27,0x74,0x72,0x9A,0x07,0x3C,0x12,0x80, ++0x27,0xD8,0x02,0x15,0x79,0xFE,0x55,0xCF, ++0x2F,0x97,0x94,0xE7,0x3F,0x0F,0xFA,0xA0, ++0x2F,0x2F,0x44,0xDF,0xC1,0x2C,0x84,0xCB, ++0x27,0x3D,0x54,0x59,0x5D,0x7A,0x05,0x8C, ++0x2F,0x31,0xAA,0xE6,0xE7,0xFB,0xA6,0x93, ++0x27,0xB5,0xAE,0x86,0xB5,0xC0,0xAA,0x10, ++0x27,0x0C,0x61,0xAA,0x25,0x17,0x90,0x3D, ++0x27,0x5F,0x59,0xDD,0x86,0x96,0x82,0x14, ++0x27,0x18,0x71,0xBE,0x78,0x38,0x27,0x6C, ++0x2F,0x64,0x1B,0x50,0x93,0xA9,0x6D,0xE7, ++0x2F,0x53,0xC1,0x70,0xD2,0x25,0xFB,0x8B, ++0x2F,0x1E,0xF5,0x5B,0x4E,0xF7,0x8F,0xC7, ++0x27,0x00,0x83,0x07,0x05,0xCE,0x43,0xFF, ++0x27,0x2F,0x5B,0x19,0xC9,0x44,0xDF,0x5E, ++0x27,0x18,0x84,0x8A,0xED,0xD0,0x7A,0xE3, ++0x2F,0xE7,0x89,0x84,0xA9,0x83,0x39,0x1E, ++0x2F,0xE3,0x29,0xE2,0x11,0xBE,0xBE,0x4C, ++0x2F,0xC4,0x2E,0x81,0xC6,0xAA,0x93,0x37, ++0x2F,0x73,0x3B,0x90,0x82,0xF3,0x7D,0x02, ++0x27,0x9E,0xE0,0x9E,0xB4,0x05,0xC0,0x61, ++0x2F,0x55,0xEE,0xB3,0x9F,0xE3,0x4C,0x60, ++0x27,0x3D,0xC6,0xCF,0x92,0x5B,0xA3,0xD9, ++0x27,0x47,0xA0,0xE9,0xB2,0xFD,0xED,0x5A, ++0x27,0x3D,0xF0,0x14,0x95,0x62,0x13,0x6A, ++0x2F,0x5E,0xDD,0xE7,0xB8,0x25,0xB3,0x78, ++0x27,0x29,0x47,0x48,0x82,0x22,0xE3,0xCD, ++0x2F,0xB8,0x0A,0x08,0x20,0xEF,0xA1,0xDB, ++0x2F,0xE4,0x35,0x52,0xEA,0xD7,0xC7,0x88, ++0x27,0xFC,0xBB,0xE1,0x0F,0x23,0x68,0xAA, ++0x27,0xE6,0xD3,0xF6,0x11,0xBE,0x59,0x90, ++0x2F,0x73,0x06,0xE9,0x2E,0xD4,0x1F,0xA3, ++0x27,0xDF,0x49,0x0B,0x31,0xE7,0x76,0x59, ++0x27,0x8D,0x0A,0xFB,0xB0,0x15,0x84,0x18, ++0x27,0x18,0x5F,0xCD,0x21,0xF4,0xF4,0x58, ++0x27,0x41,0x42,0xD5,0xA3,0x83,0x57,0xB8, ++0x2F,0x91,0xDF,0x32,0x9F,0x8B,0xCC,0xE0, ++0x27,0xE7,0xE6,0x5F,0xA4,0x62,0xB6,0xC4, ++0x27,0xFF,0x40,0x32,0x12,0xFF,0x69,0x5B, ++0x27,0x0B,0x1B,0x0C,0xB4,0x05,0xD5,0x98, ++0x27,0x9B,0xA5,0x7C,0xCC,0x97,0x50,0x17, ++0x2F,0x62,0xA0,0x04,0x7C,0xCF,0x90,0x12, ++0x27,0x26,0x8E,0xC7,0xFF,0x2B,0x4E,0x19, ++0x27,0x76,0x7B,0xCD,0xAE,0x18,0xF6,0xCC, ++0x27,0x2B,0x11,0x32,0xF1,0x9B,0xEA,0xB1, ++0x27,0x1D,0x8A,0x02,0xDE,0x1F,0x79,0x76, ++0x2F,0x65,0x5A,0x94,0xCB,0xED,0x3C,0x0D, ++0x27,0xD6,0xE2,0xFA,0x3D,0x76,0x0F,0xAE, ++0x27,0x6A,0xC5,0x93,0xD2,0x92,0x6A,0xE2, ++0x27,0x93,0x9A,0xF3,0x2B,0xEF,0x50,0xF8, ++0x27,0x02,0xF9,0x9B,0xB6,0xDD,0x21,0xAB, ++0x2F,0xE3,0xCB,0xFA,0x5C,0xC3,0x35,0x28, ++0x27,0x22,0xC1,0x4F,0xDF,0x21,0xF5,0x4E, ++0x27,0xDC,0xD4,0xEC,0xDE,0x37,0xB4,0xDD, ++0x27,0xF2,0x88,0xD5,0x5B,0x7C,0xFA,0x7D, ++0x27,0x2B,0x2C,0x5D,0xFD,0x6C,0x77,0xAD, ++0x2F,0x97,0x4F,0xFA,0xA8,0x6E,0xAD,0x4D, ++0x2F,0x62,0xDF,0x4A,0x76,0xE6,0x96,0x85, ++0x27,0x4B,0xC5,0x0B,0x9E,0x24,0xFA,0x6C, ++0x27,0x06,0xCA,0x8F,0x13,0xD1,0x8F,0x3A, ++0x2F,0x5F,0x8A,0x37,0xD2,0x84,0x32,0x71, ++0x2F,0xB2,0x75,0xF1,0x4B,0x69,0xAC,0x56, ++0x27,0xFB,0xC0,0x16,0x4C,0x7F,0xC4,0x6B, ++0x27,0x53,0x0B,0x18,0x0D,0x5B,0xE9,0x29, ++0x27,0x7A,0xB0,0xE2,0xAB,0xDB,0x37,0x9F, ++0x2F,0xCC,0x15,0x32,0x71,0x4B,0xAB,0x49, ++0x2F,0x03,0xC3,0x76,0xD7,0x70,0xDE,0x5A, ++0x27,0x30,0x11,0x82,0x54,0x80,0x26,0x88, ++0x27,0xCF,0x83,0xA8,0xFC,0x9C,0x20,0x9E, ++0x27,0x54,0xF4,0x3F,0xE9,0x00,0x82,0x2A, ++0x27,0xAA,0xF0,0x36,0xF6,0x46,0xC2,0x94, ++0x2F,0xAF,0xB1,0x02,0x03,0x57,0xF2,0x51, ++0x2F,0xC7,0x75,0x15,0x2E,0x16,0x73,0x3E, ++0x2F,0x02,0x2A,0xFC,0x8F,0x72,0xE4,0x34, ++0x2F,0xA3,0x03,0x27,0xFC,0x8E,0xE4,0xD2, ++0x2F,0xC5,0xBB,0x35,0x3C,0xC3,0xEB,0x48, ++0x2F,0x1B,0x2F,0x2D,0x1A,0x3D,0xF2,0xC9, ++0x2F,0xC7,0xDD,0x2F,0x0D,0x5D,0xEE,0xC2, ++0x2F,0x6E,0xD8,0x17,0x1F,0x51,0x40,0x57, ++0x27,0xFB,0xDE,0x2B,0xBD,0x61,0xCF,0xBB, ++0x2F,0x26,0x39,0x4B,0x18,0xC4,0x8D,0xC7, ++0x27,0x59,0xC1,0x25,0x63,0x99,0xC2,0x24, ++0x27,0x81,0xC5,0x33,0xE0,0x9E,0xD6,0xB0, ++0x27,0x86,0xA8,0xC1,0x73,0x79,0x3C,0x31, ++0x27,0xF1,0x48,0x78,0x4F,0x33,0x4B,0x4B, ++0x2F,0x66,0xF7,0x93,0x2A,0xB0,0xE2,0x72, ++0x27,0x53,0x6C,0xE5,0xEE,0xE0,0x9A,0xB8, ++0x2F,0x47,0x85,0x42,0x90,0x6A,0xDD,0xDE, ++0x2F,0x6B,0xF8,0x12,0x91,0xB9,0x42,0xDA, ++0x27,0x35,0x19,0x36,0x2F,0xB2,0xBB,0x0C, ++0x27,0x85,0x76,0xAE,0xDE,0x87,0xF5,0xC2, ++0x27,0xD0,0xE8,0x04,0x45,0x67,0x58,0xA0, ++0x2F,0x57,0x11,0xEC,0xC5,0x77,0x66,0xDB, ++0x27,0x00,0x13,0xF1,0xE5,0x26,0xCA,0x54, ++0x27,0x47,0x1C,0x62,0x4A,0xE5,0xE0,0xA8, ++0x27,0xD0,0x7B,0x59,0xFE,0x3D,0xEE,0x8D, ++0x2F,0xF9,0xC8,0x6F,0xEB,0x6F,0xB1,0x68, ++0x2F,0x0A,0x6B,0x08,0xBA,0x9C,0x56,0xA5, ++0x2F,0x29,0x51,0xBA,0x7D,0xBC,0xE0,0xEE, ++0x2F,0x65,0x13,0x87,0x5E,0xAE,0xBF,0x7F, ++0x27,0xC0,0x1F,0xAB,0x02,0xD4,0x03,0x0A, ++0x27,0xFF,0x6A,0x33,0xCF,0xA7,0x05,0xF2, ++0x2F,0x56,0x23,0x18,0x43,0xA8,0x22,0xC7, ++0x2F,0x44,0x92,0x17,0xE0,0x72,0x20,0xFB, ++0x2F,0x08,0x59,0x3E,0xB0,0xD7,0x78,0x53, ++0x27,0x2B,0x8D,0x75,0x48,0xD5,0x45,0xC9, ++0x2F,0x0B,0x01,0x27,0xBD,0x0A,0xAA,0x81, ++0x2F,0x56,0x1E,0x5C,0x48,0xE7,0x66,0x1E, ++0x2F,0x3C,0x21,0x90,0xF4,0xFE,0xF7,0x50, ++0x2F,0x2A,0x9A,0x64,0xF5,0x4E,0x56,0x66, ++0x2F,0x05,0x0C,0x39,0xDE,0x13,0x0B,0xC3, ++0x27,0xAF,0xC9,0x39,0x33,0x62,0xAE,0x50, ++0x2F,0xBB,0x6E,0xBF,0x2E,0x44,0x5C,0xAF, ++0x2F,0xB2,0xBA,0x9F,0xCA,0x34,0x3D,0x32, ++0x27,0x0B,0xF7,0xFE,0x54,0xBA,0x20,0x92, ++0x2F,0xAF,0xFD,0x3D,0xD9,0x96,0x64,0x54, ++0x27,0x79,0xA1,0xE0,0x95,0xE4,0x13,0x03, ++0x27,0xE7,0x7C,0x59,0xBB,0x9D,0xBE,0xDB, ++0x27,0x3E,0x68,0xEA,0xA5,0x19,0x13,0xD5, ++0x2F,0xDD,0x0D,0xD7,0xD0,0xDC,0xB2,0x28, ++0x2F,0x22,0x9E,0xA3,0xC1,0x79,0x63,0xBD, ++0x22,0xA5,0xBA,0xE9,0xC2,0x9D,0x5C,0x05, ++0x05,0x75,0xA7,0x65,0xAC,0xFA,0x4B,0xB5, ++0x2F,0xDA,0xC9,0x84,0x35,0xBB,0x41,0xD4, ++0x21,0x25,0xF3,0x5B,0x42,0xE7,0x79,0xCB, ++0x05,0x2B,0xF7,0x69,0x44,0xAD,0xBB,0x66 ++}; ++ ++unsigned char sit2_patch_3[] = { ++0x04,0x01,0x00,0x00,0x73,0xDF,0xBE,0xCB, ++0x05,0x2D,0xE5,0x87,0xAA,0x9C,0x1F,0xA6, ++0x22,0x48,0x24,0x06,0xAA,0x81,0x46,0x76, ++0x05,0xCD,0xFA,0x19,0x86,0x2B,0xA5,0x4F, ++0x22,0x66,0x74,0xD1,0xDE,0x1E,0xBC,0x87, ++0x05,0xBF,0xAC,0x24,0x87,0x43,0xAC,0x43, ++0x22,0xD5,0x78,0x2C,0x1B,0xAA,0x35,0x8C, ++0x05,0x12,0xD5,0xCE,0x99,0xED,0x8C,0xBE, ++0x22,0xCC,0xE5,0xA4,0xF0,0x17,0x0B,0x9F, ++0x05,0xED,0xC9,0x48,0xFF,0x41,0x36,0xE8, ++0x2A,0x68,0x35,0x7D,0xA2,0x95,0x06,0xD4, ++0x05,0xDA,0x98,0xE5,0x27,0xE6,0x1B,0x81, ++0x2A,0xF6,0xB2,0x60,0x90,0xCD,0x97,0x00, ++0x05,0x3B,0xBC,0x97,0xC7,0x49,0xE8,0xAC, ++0x27,0xBD,0x69,0x5E,0x76,0x24,0xCA,0xC0, ++0x29,0x82,0x82,0xC3,0xA6,0x88,0xEA,0x31, ++0x05,0xB8,0x75,0x97,0xD5,0x8F,0x7B,0xCF, ++0x2F,0xC3,0x42,0x5D,0x29,0xE3,0x85,0xCA, ++0x2F,0xC0,0xB0,0x46,0x70,0x15,0xF1,0xE4, ++0x25,0x7F,0x15,0x13,0x51,0x2C,0x08,0x0A, ++0x07,0x92,0xBA,0x41,0xA8,0x28,0xB7,0x49, ++0x2F,0x0F,0xA1,0x43,0x80,0x05,0xCF,0xDD, ++0x2F,0xB5,0x33,0xA5,0xCA,0x43,0x2C,0x49, ++0x2F,0x08,0x6C,0x23,0xB1,0x9B,0x55,0xD3, ++0x2F,0x7A,0xB1,0xA2,0x63,0x58,0xAB,0x1E, ++0x2F,0x16,0x34,0xC5,0x66,0x1D,0x11,0x69, ++0x2F,0xBA,0x9A,0xA0,0xF4,0x3D,0xE0,0x1A, ++0x27,0xB3,0x75,0x34,0xBC,0x7F,0x72,0xE8, ++0x27,0xFE,0xB1,0x39,0xDB,0x47,0x5B,0xCE, ++0x27,0x3B,0x83,0x41,0x83,0x93,0x9A,0xC1, ++0x2F,0x79,0x08,0xE1,0x98,0xFF,0x9A,0xD0, ++0x27,0xA3,0xAA,0x24,0x31,0x44,0xFE,0x5C, ++0x24,0x49,0x0C,0x8B,0x7B,0x81,0xBF,0xA9, ++0x07,0x36,0xDB,0x1E,0x49,0x77,0x6A,0x87, ++0x2F,0x3F,0x30,0x2C,0x74,0xA0,0xE2,0x48, ++0x2F,0x18,0x97,0xA5,0xD8,0x50,0x75,0x55, ++0x2F,0xED,0x06,0x48,0xB0,0xB4,0x90,0xD7, ++0x24,0x93,0x71,0x62,0x5B,0xDB,0x72,0x4B, ++0x0F,0x07,0x35,0x0F,0xBD,0xD5,0xB7,0x55, ++0x27,0x56,0x25,0x14,0x19,0x09,0xEB,0x15, ++0x27,0xF3,0xB3,0x0E,0x0B,0x91,0xD7,0xF7, ++0x21,0x0D,0x70,0x9A,0xC1,0xCE,0x8D,0x8A, ++0x0F,0x2A,0xEC,0x95,0x8F,0x36,0xE7,0x60, ++0x2F,0xCF,0x34,0x5D,0x0D,0x21,0x2F,0x7A, ++0x23,0xA3,0xD5,0x35,0xF7,0xE8,0xD9,0xBA, ++0x0F,0xC6,0x53,0x17,0x41,0x02,0x85,0xB3, ++0x27,0x6B,0xFB,0xE7,0xC9,0x4B,0x1F,0x70, ++0x2B,0x90,0x26,0xA9,0x0A,0xCA,0x2E,0x6C, ++0x05,0xA9,0x8A,0x8D,0x5A,0x0B,0xEA,0x61, ++0x22,0x8B,0x44,0x61,0x54,0xC8,0x72,0x66, ++0x07,0x3E,0x49,0x1A,0x43,0x87,0x7E,0xA8, ++0x0F,0xA3,0x30,0xE1,0x42,0xFD,0x03,0x70, ++0x05,0x81,0xE4,0x44,0x56,0x8E,0xB5,0xD1, ++0x24,0x39,0xF1,0xAD,0x89,0xE3,0xF3,0x66, ++0x05,0x81,0x6F,0x18,0x90,0x9B,0x62,0xE8, ++0x2C,0xDA,0x08,0xF1,0x7C,0xE0,0x26,0x83, ++0x05,0x61,0x99,0x5C,0xBE,0x19,0xD1,0x50, ++0x2C,0x68,0x9F,0xE7,0x3F,0x72,0x90,0x35, ++0x05,0xC6,0xBC,0xA2,0x42,0x87,0x6B,0x7C, ++0x2C,0x8E,0x59,0xBB,0x81,0x67,0xF9,0xEF, ++0x05,0xC5,0xD5,0x42,0x75,0xD9,0x29,0x74, ++0x2F,0x6D,0x29,0xD0,0xAD,0x7F,0xDE,0xE0, ++0x21,0xCD,0xC7,0xE5,0x57,0xD2,0x28,0xD9, ++0x05,0x66,0x7B,0x9A,0xE3,0x8B,0x08,0x7F, ++0x2C,0xFF,0xC9,0xCA,0xBB,0x74,0x2C,0x09, ++0x05,0x0D,0x97,0xFA,0xE4,0xEF,0xD6,0x9B, ++0x24,0xBF,0x6E,0xE2,0x2A,0xCE,0x22,0x2A, ++0x05,0x85,0xB3,0x69,0xE5,0xBD,0xBE,0xAB, ++0x2C,0x0B,0x00,0x09,0xEE,0x20,0x3F,0x31, ++0x05,0x50,0xF3,0x81,0x50,0x6C,0xA4,0x88, ++0x24,0x79,0xD9,0xC3,0xA7,0x15,0x5F,0xB2, ++0x05,0x3E,0x95,0x28,0xDF,0x55,0x63,0x78, ++0x24,0x56,0x59,0xC3,0x28,0xD7,0x0F,0x69, ++0x05,0x71,0xE2,0xE8,0x15,0x4E,0x6E,0xD4, ++0x24,0xAB,0x2E,0x42,0x83,0x95,0x22,0x2D, ++0x05,0x72,0x6D,0x0A,0x44,0x91,0xBA,0xBF, ++0x2C,0x40,0xD7,0x8C,0x55,0x4B,0x38,0xE8, ++0x05,0xC5,0xAF,0x1F,0xE7,0x1D,0x2F,0x61, ++0x24,0xC0,0xF7,0xC0,0xAB,0x73,0x63,0x39, ++0x05,0x0D,0xD7,0x34,0xA1,0xEC,0x63,0x11, ++0x24,0x1C,0xAA,0x42,0x8D,0x47,0xF0,0x64, ++0x05,0xD0,0x95,0xBF,0x7A,0x52,0x24,0xEA, ++0x2C,0x4F,0x81,0xAF,0xC7,0x0A,0x91,0x01, ++0x05,0x64,0xF4,0x46,0x5E,0x29,0x1C,0x9E, ++0x24,0x7B,0x53,0xB7,0x47,0x15,0xCF,0x4D, ++0x05,0x7D,0xD8,0x29,0x38,0x0E,0x38,0x0D, ++0x27,0x07,0x40,0x89,0x10,0x0C,0xE7,0x94, ++0x29,0x48,0xA2,0x64,0xDA,0xE0,0xA0,0x87, ++0x05,0x83,0xC6,0x56,0x97,0xF1,0x48,0xA8, ++0x24,0xD9,0x97,0xCA,0xFB,0xA6,0x38,0x45, ++0x05,0x92,0x4F,0x8D,0x51,0x34,0xB7,0xEE, ++0x2C,0x47,0xDD,0x32,0xB4,0x8B,0x30,0x26, ++0x05,0xA5,0xFB,0x99,0x7D,0x31,0x80,0x85, ++0x24,0x27,0x12,0x90,0xE7,0x0C,0x8D,0x38, ++0x05,0xC8,0xFA,0x1D,0x88,0x44,0xEE,0x34, ++0x2F,0x51,0x80,0x51,0x70,0x25,0xE3,0xB6, ++0x29,0x58,0xDD,0xC7,0x09,0x58,0x27,0x4E, ++0x05,0xE8,0x3A,0x83,0x56,0x93,0x38,0x17, ++0x2C,0x40,0x01,0xB4,0x92,0x61,0xFE,0x93, ++0x05,0x06,0xC5,0xA1,0x6D,0x1D,0xAC,0x39, ++0x27,0x07,0x3F,0x24,0xE3,0x5D,0xA4,0x4C, ++0x2D,0x3A,0x68,0x75,0xD5,0x55,0x36,0x5D, ++0x05,0x81,0x10,0xF2,0x20,0xC0,0x54,0xC0, ++0x27,0xA2,0x9C,0xEB,0xB0,0x45,0x31,0xDE, ++0x2D,0x2E,0x09,0x0C,0x99,0x86,0x50,0x82, ++0x05,0xDF,0xE8,0x87,0x21,0xF6,0x5C,0x97, ++0x2C,0xEC,0x88,0xB4,0xF2,0xC4,0x6D,0x6C, ++0x05,0x50,0x19,0xB6,0xEB,0x6A,0x83,0x39, ++0x27,0x7D,0x6C,0xA6,0xDE,0x0F,0x81,0xEB, ++0x25,0xA5,0x3C,0x30,0xA6,0x73,0xE1,0x50, ++0x05,0x72,0x9C,0x58,0x57,0x3F,0x2C,0xAF, ++0x27,0xEE,0xA4,0xB1,0x0B,0x96,0x78,0xCE, ++0x29,0x82,0xD0,0xEE,0x50,0xBE,0xE9,0x32, ++0x05,0xCF,0x49,0x01,0x4D,0xD7,0x84,0x2F, ++0x27,0x8E,0xE6,0x08,0x79,0x80,0xF4,0x3D, ++0x29,0x7D,0x70,0x89,0xBD,0xA0,0x8A,0xE4, ++0x05,0x57,0x60,0xD8,0x47,0xFC,0x7F,0x2D, ++0x2C,0x56,0x39,0x21,0x72,0x26,0x26,0x13, ++0x05,0x7B,0xF2,0x48,0x62,0x6A,0x22,0xC1, ++0x27,0x4D,0x0A,0x88,0xC5,0xE2,0xB4,0x61, ++0x25,0x3E,0x64,0x40,0xEB,0x55,0x8A,0x19, ++0x05,0xEC,0xB4,0xD3,0x8D,0xA9,0xCA,0x79, ++0x2C,0x92,0xE3,0xBB,0x9F,0xC3,0x77,0x3E, ++0x05,0xD4,0x8F,0x24,0xD4,0x74,0x2E,0x77, ++0x2C,0x9B,0x2B,0x23,0x25,0x4D,0x13,0x64, ++0x05,0x4A,0x1B,0xC6,0xBC,0x0D,0x27,0xEA, ++0x24,0x16,0xFF,0x65,0xEC,0xCB,0xCF,0x91, ++0x05,0x2C,0x4E,0x34,0xD9,0x11,0x71,0xA7, ++0x24,0x82,0x66,0x4C,0x0E,0x8B,0x85,0x68, ++0x05,0x99,0x50,0x54,0x06,0xC2,0xC7,0x15, ++0x2C,0x91,0x26,0xC4,0x58,0x35,0x27,0x36, ++0x05,0xE1,0xD5,0x56,0x81,0x03,0x00,0x96, ++0x2F,0x7B,0xBF,0x14,0x17,0xE0,0xE2,0x23, ++0x29,0x43,0x44,0x6A,0xB6,0x55,0x2B,0x56, ++0x07,0x88,0x83,0x31,0x07,0x54,0xC8,0x8C, ++0x2F,0x98,0xDF,0x9D,0x3D,0xD0,0x1D,0x7B, ++0x2F,0x05,0xE2,0x77,0x77,0x92,0x54,0x04, ++0x27,0x0B,0x02,0xE4,0x32,0x01,0xEB,0xD0, ++0x27,0xD7,0x61,0x5A,0xDB,0x94,0x31,0x68, ++0x27,0x29,0xEA,0xF4,0xFF,0x83,0xB6,0x93, ++0x2F,0xA0,0xBB,0x7D,0x14,0x98,0x04,0x72, ++0x2A,0x21,0xC3,0x95,0xD6,0x1F,0x37,0x95, ++0x0F,0xF7,0x18,0xA7,0x61,0xA8,0x6E,0xAD, ++0x27,0x03,0xC5,0x38,0x37,0xF8,0x0E,0x1C, ++0x2D,0x74,0x24,0xFC,0xAC,0xC0,0x6F,0xB7, ++0x07,0x64,0xE2,0x80,0xFE,0x95,0x87,0xF9, ++0x24,0x7C,0x99,0x04,0xF3,0x0E,0x2A,0x47, ++0x0F,0x02,0x9F,0x5D,0x42,0x72,0x73,0x9A, ++0x2F,0x2C,0x27,0xA3,0xD6,0x7F,0xE0,0x97, ++0x21,0xD9,0x34,0x78,0x08,0x44,0x9D,0xEA, ++0x07,0x55,0x07,0x4D,0xEE,0x23,0xF7,0x05, ++0x2C,0x20,0xC4,0xE9,0x2D,0x42,0x63,0x74, ++0x07,0x23,0xDB,0xBD,0x08,0xDD,0x11,0xD3, ++0x2F,0xBC,0x76,0xD1,0x68,0x32,0xFE,0xB5, ++0x2F,0x55,0xDE,0x20,0x1E,0x9B,0x6B,0x2B, ++0x27,0x58,0x0E,0xF0,0x90,0x77,0x66,0x92, ++0x27,0xA1,0x45,0xA5,0xBF,0xB1,0x59,0x41, ++0x2F,0xCA,0x44,0x6C,0xCC,0x03,0xF8,0x45, ++0x27,0x1C,0xA5,0x42,0xFD,0x85,0x88,0xC5, ++0x27,0xA0,0x3B,0x87,0x7A,0x4D,0xA0,0x34, ++0x27,0x9E,0x6F,0x33,0xAE,0x02,0xA5,0x89, ++0x2F,0x36,0x10,0x2E,0x64,0x16,0x5F,0x8A, ++0x2F,0x19,0x43,0x27,0xCD,0x7A,0x15,0xC4, ++0x2A,0xBE,0x36,0x67,0x46,0x6C,0x62,0x8E, ++0x0F,0xB8,0xED,0xD6,0x4D,0xA2,0x9C,0xD6, ++0x27,0xE4,0x1C,0x60,0xE4,0x1B,0x1B,0x2A, ++0x29,0xF7,0x85,0x45,0xB8,0xE3,0x71,0x02, ++0x0F,0x44,0xA2,0x89,0xAF,0x06,0x1E,0xCE, ++0x27,0xBF,0xFE,0x2E,0xED,0x3C,0x43,0x03, ++0x2F,0xFD,0x83,0x08,0x7F,0x13,0x6B,0x76, ++0x22,0xCC,0x18,0x8C,0x8B,0x22,0x81,0xEF, ++0x0F,0x33,0xB5,0x7B,0xA8,0xC6,0xB0,0xCB, ++0x2F,0xBA,0x7F,0xEA,0xF3,0x8F,0x55,0xE2, ++0x27,0xD6,0x6B,0x1B,0xDB,0x91,0x81,0x72, ++0x2F,0x50,0x48,0x5D,0xCC,0x1A,0x5F,0x71, ++0x23,0x4E,0x1D,0x69,0x8B,0x59,0xFA,0x2C, ++0x0F,0x27,0x60,0x54,0x62,0x13,0x86,0x24, ++0x2F,0x96,0x07,0xA8,0x3E,0x24,0xE6,0xD4, ++0x27,0x87,0x84,0xCF,0x06,0x78,0x6F,0x69, ++0x27,0x90,0xBB,0x5B,0x54,0x4F,0xBA,0x19, ++0x27,0x92,0x88,0x58,0x3C,0xF6,0xF1,0xAD, ++0x07,0x0A,0xE2,0xCB,0x24,0xE6,0xE4,0x8C, ++0x27,0xB6,0xC8,0x95,0x39,0xD7,0xA5,0xC0, ++0x27,0x14,0x53,0xDD,0xA0,0x55,0x9F,0xAB, ++0x27,0xE9,0x2A,0x46,0xC5,0xD1,0x4F,0x24, ++0x2F,0x29,0x3E,0x2E,0xB7,0xDD,0x1D,0xF4, ++0x2F,0x34,0xEC,0x49,0x5F,0x57,0x43,0xEC, ++0x2F,0x8F,0x7A,0x92,0x2F,0x8E,0xBE,0x9A, ++0x2A,0x9D,0xAB,0x06,0x8C,0x8E,0x85,0x63, ++0x07,0x9A,0x31,0x23,0xAC,0x63,0x14,0x6A, ++0x2F,0x43,0x96,0x0D,0x18,0x2A,0xA5,0x88, ++0x2F,0x75,0xA8,0x3D,0x3F,0x93,0xB0,0x67, ++0x27,0xAC,0x57,0xCD,0x8A,0xE7,0x4E,0x19, ++0x27,0x08,0x07,0x68,0xD2,0x93,0x84,0xBE, ++0x24,0xBB,0x25,0x18,0xD5,0x9E,0xB6,0x05, ++0x07,0xCE,0xAA,0xD5,0x61,0x4A,0x61,0xF8, ++0x27,0x47,0x78,0xAD,0xD3,0x3F,0xD5,0x94, ++0x2F,0xDD,0x26,0xDF,0x14,0xCF,0xB6,0x28, ++0x2F,0x46,0x47,0x8A,0xF9,0x92,0x8B,0x9E, ++0x27,0x75,0x58,0x02,0x92,0xEA,0xC2,0x70, ++0x2F,0xF6,0x89,0x64,0x70,0x88,0xAE,0xA5, ++0x27,0x56,0x6B,0xEF,0xE3,0x34,0x06,0x5C, ++0x27,0xD0,0x06,0xD4,0x8A,0x62,0x66,0x24, ++0x2F,0x18,0x98,0xCF,0x5B,0x7C,0xEC,0x7F, ++0x2F,0x44,0x3D,0x02,0xF7,0x30,0x57,0xBB, ++0x2F,0x96,0x43,0xA4,0xB4,0x53,0xEC,0xAA, ++0x27,0x1A,0x5E,0x7E,0xEE,0xA2,0xE2,0xF9, ++0x27,0x7F,0x77,0x05,0x06,0x15,0x88,0xB6, ++0x2F,0x55,0x8A,0xD7,0xC6,0x06,0xBE,0x4F, ++0x2F,0x82,0x9C,0xF6,0x26,0x22,0x26,0x56, ++0x2A,0x15,0xD1,0x2E,0x5E,0x01,0x35,0x21, ++0x0F,0xC4,0x71,0x88,0xAC,0x80,0xFB,0x9E, ++0x2F,0xAD,0x72,0x03,0x44,0xD9,0xFB,0x77, ++0x27,0x4B,0x72,0x40,0x28,0x6F,0xEC,0xAB, ++0x2F,0x43,0xF6,0xD0,0x98,0x69,0xA6,0x59, ++0x2F,0x26,0x33,0x1A,0x02,0x84,0xA7,0x79, ++0x27,0x7E,0x41,0x42,0x91,0x1A,0x2D,0xCE, ++0x2F,0x1B,0xE0,0x33,0x0E,0x97,0xF5,0x47, ++0x27,0x46,0xF7,0x3A,0xDD,0x34,0xD9,0x34, ++0x2F,0x5B,0x7F,0x80,0x87,0xFC,0xE4,0x6E, ++0x2C,0xE5,0xC8,0x66,0x0A,0x90,0x59,0x55, ++0x07,0x8F,0x48,0xA2,0xB4,0xE8,0x9C,0xD8, ++0x27,0x75,0x31,0x93,0x6C,0xE0,0x08,0xDB, ++0x27,0x50,0xB7,0x4E,0xE4,0x77,0xEA,0x64, ++0x2F,0xB5,0x67,0x2F,0x43,0x6F,0xDC,0x20, ++0x2F,0x4D,0x58,0x0E,0x50,0x7B,0x6E,0x87, ++0x27,0x68,0xE9,0x3A,0x05,0xE3,0x11,0x3E, ++0x27,0x85,0x2F,0xD5,0xD2,0xD4,0xDD,0xFD, ++0x2F,0x71,0xBC,0x15,0x42,0xFB,0x33,0xFD, ++0x27,0x90,0xE3,0xCB,0x1E,0x9E,0xAB,0xCE, ++0x27,0x27,0xE5,0xD7,0xB1,0xEE,0x78,0xC8, ++0x21,0x8D,0xA0,0x94,0x42,0x81,0x2F,0xFD, ++0x0F,0x61,0x14,0xFC,0x72,0x93,0xCC,0x72, ++0x2F,0xA3,0xD5,0xDC,0x28,0x3E,0x80,0xFF, ++0x27,0x47,0x9E,0xF0,0x07,0x4F,0x91,0x7C, ++0x2F,0x5D,0x31,0xB4,0xA7,0x62,0xE3,0xD8, ++0x2B,0xA9,0xB3,0x60,0x76,0x51,0xDA,0xDA, ++0x0F,0x4A,0xBC,0xD2,0xF1,0x44,0xCF,0xA0, ++0x2F,0x76,0x3A,0x50,0xD4,0x6D,0xAB,0xAE, ++0x21,0x75,0x7A,0x27,0x8C,0x1B,0x6B,0xFC, ++0x0F,0x38,0xBE,0x8F,0x1E,0xB2,0x4E,0x91, ++0x27,0x06,0x4A,0x7A,0xA2,0xF3,0x4F,0x69, ++0x29,0x0E,0x2F,0x5B,0x00,0x5F,0xCB,0x08, ++0x0F,0x12,0xCC,0xF7,0x99,0x02,0x46,0x6A, ++0x27,0xAA,0x14,0x94,0x13,0x51,0x1F,0x49, ++0x2F,0x19,0x68,0x25,0x33,0xA3,0x89,0xA8, ++0x27,0xB1,0x5E,0x67,0x96,0x89,0x4B,0x8F, ++0x2F,0x8D,0x1A,0x0B,0x75,0x3A,0x98,0x0D, ++0x27,0x2F,0x10,0x0C,0xAE,0x67,0xAC,0xAE, ++0x27,0xAE,0x17,0x2C,0xBC,0x8B,0xF3,0x09, ++0x2F,0xBF,0x2D,0xCF,0x04,0x74,0x47,0x20, ++0x23,0x70,0xAE,0x38,0x6A,0x43,0xE0,0x11, ++0x07,0xE1,0xCC,0xC9,0x92,0xDA,0x9C,0x17, ++0x2F,0x62,0x67,0x6A,0xB2,0x6E,0x11,0xC7, ++0x2F,0xDF,0x0D,0x46,0x61,0x84,0x34,0xFB, ++0x27,0x4F,0x40,0xBA,0x9F,0x96,0x41,0x88, ++0x2F,0x05,0x3C,0x37,0x80,0x95,0xCA,0xDE, ++0x2F,0x6F,0x3A,0x11,0x87,0xB1,0xF9,0x76, ++0x2F,0x6D,0x12,0x07,0x09,0x6C,0x1D,0xC0, ++0x2F,0xDA,0x7E,0x67,0xF2,0x1D,0xA1,0xB3, ++0x2F,0xAD,0x9E,0x57,0xCC,0xFF,0x53,0x1E, ++0x0F,0x8D,0x55,0xBE,0x6D,0x09,0x97,0x20, ++0x2F,0xEA,0x9B,0x56,0x39,0x1F,0x14,0x2B, ++0x27,0x6A,0xF3,0xD4,0xA8,0x9A,0x2F,0x86, ++0x2F,0x9F,0x46,0xC2,0x76,0x92,0xB5,0x2C, ++0x27,0xA3,0x3F,0x01,0x79,0xA8,0xC6,0x2D, ++0x2F,0x3C,0x41,0xA9,0x51,0xEE,0xD7,0xE2, ++0x2F,0x7A,0xDE,0x1A,0x73,0xD2,0x7C,0x2F, ++0x2F,0x79,0x26,0x05,0x02,0x45,0x0F,0xD3, ++0x2F,0x81,0x6B,0x0A,0x8B,0x7D,0xF2,0xE9, ++0x2F,0xED,0x77,0xD8,0x16,0xF2,0x4E,0xB1, ++0x2F,0x95,0xC6,0x9F,0x09,0x2A,0x6D,0x8D, ++0x26,0x7D,0x04,0xB5,0x52,0x6C,0xFE,0x5D, ++0x07,0x56,0x98,0xAD,0xCE,0x28,0x4D,0x87, ++0x0F,0x49,0x6A,0x02,0x17,0xAD,0xCE,0x71, ++0x27,0x07,0x64,0xFB,0x9C,0xA1,0x38,0xE2, ++0x27,0x60,0x1B,0xAB,0x38,0xC3,0xC1,0x12, ++0x2F,0x03,0xAA,0xD2,0x69,0x51,0x2F,0xD4, ++0x2F,0x1D,0x6D,0xD2,0x94,0x67,0xF3,0xFC, ++0x27,0xC8,0x2F,0x84,0x7D,0x5F,0xFD,0x68, ++0x29,0xA0,0x06,0x87,0xD0,0x25,0xA4,0x59, ++0x0F,0xF5,0xED,0x30,0xD1,0xE9,0xD6,0x4B, ++0x0F,0xE5,0x8A,0xBF,0x10,0x35,0x80,0x77, ++0x0F,0x7D,0x8F,0xEF,0x2C,0xE5,0x81,0x83, ++0x27,0xA1,0x9A,0x30,0xF7,0x8E,0x27,0xCC, ++0x2F,0x42,0xED,0x53,0xE0,0x8D,0x9F,0xF5, ++0x2A,0x2E,0x7C,0x97,0x78,0x36,0xCD,0x29, ++0x07,0x79,0xF0,0x30,0x04,0x3F,0xC4,0xF6, ++0x2F,0x18,0xC1,0x6E,0xAB,0xE4,0x5C,0xB4, ++0x2D,0x22,0x52,0x40,0xE8,0x61,0xDA,0x5E, ++0x07,0x23,0xF9,0x71,0xD5,0x86,0x37,0xFC, ++0x27,0xFE,0x24,0xD9,0xC4,0xEE,0x4E,0xE3, ++0x2F,0xAF,0x62,0xFE,0xC3,0x8F,0x1F,0xA3, ++0x26,0xBE,0x7A,0x18,0x6B,0xAA,0xAA,0xA1, ++0x0F,0x4D,0xCB,0x70,0x8F,0xC8,0xCF,0xE2, ++0x07,0x25,0xD2,0x4D,0x71,0x2E,0xAD,0x78, ++0x07,0x02,0x3E,0xD8,0x94,0xE4,0x32,0x92, ++0x0F,0xAB,0x15,0xC4,0x6C,0x19,0x31,0x41, ++0x07,0xC9,0x27,0xB8,0x16,0x66,0x11,0xE7, ++0x2F,0x0B,0x48,0x33,0x27,0x06,0x55,0xE1, ++0x29,0xD6,0xFA,0x40,0x03,0xE9,0x4A,0x56, ++0x07,0x99,0xEC,0x62,0x14,0x20,0x67,0xBA, ++0x27,0xEE,0x16,0x96,0x61,0xF7,0x3A,0x2A, ++0x25,0x08,0xEE,0x64,0x03,0x9C,0x00,0xF1, ++0x0F,0x88,0xEA,0x73,0x1D,0xF2,0x52,0x01, ++0x2F,0xE0,0x29,0x04,0x55,0x59,0x30,0x72, ++0x29,0xF3,0x72,0x71,0xB9,0x4F,0xEA,0xD3, ++0x07,0xE1,0xEC,0x66,0xC8,0x90,0xF3,0x1C, ++0x2F,0xB7,0x56,0xC8,0xA1,0x62,0xEA,0x70, ++0x2D,0x98,0x8B,0xF5,0xB2,0x9B,0x59,0x54, ++0x0F,0x5E,0x1B,0xA4,0x7F,0xF9,0xB6,0xA7, ++0x2F,0xDE,0x98,0x7C,0x0C,0xAF,0xC5,0xBD, ++0x2F,0x42,0xD8,0x9A,0xD1,0xD0,0x65,0xD6, ++0x2A,0xE5,0xED,0x9B,0x08,0xFD,0xC8,0xA3, ++0x07,0xBB,0x50,0xFA,0x31,0xF6,0x7C,0x05, ++0x0F,0x4F,0x56,0xAC,0xAA,0xFA,0xDF,0x94, ++0x2F,0x7E,0x56,0x98,0x43,0xA2,0xC4,0x7C, ++0x2F,0xF0,0x1A,0xF9,0xF8,0x18,0xA1,0x48, ++0x2F,0x17,0x65,0x31,0xC0,0xAC,0x64,0x86, ++0x2F,0x9C,0xBC,0x7A,0xFD,0xE2,0xF9,0xE3, ++0x2F,0x86,0x4D,0x80,0x9A,0x36,0x8F,0xBB, ++0x27,0x79,0x86,0x58,0x78,0xE6,0xD4,0x24, ++0x2F,0xF9,0x77,0x61,0x69,0x3F,0x40,0x4F, ++0x27,0x15,0xD5,0xE2,0x4A,0x1B,0x55,0x34, ++0x0F,0x78,0x21,0x4E,0x5B,0xC8,0x54,0x0E, ++0x2F,0xDA,0xE6,0x86,0x8D,0xCB,0x40,0xC2, ++0x29,0x59,0x39,0x4D,0xF0,0xAC,0xD7,0x45, ++0x0F,0xE3,0x33,0x15,0xAA,0x49,0xFD,0x4F, ++0x2C,0xF2,0x1B,0x8D,0xB8,0x96,0x6E,0xD6, ++0x07,0xA5,0x83,0xDA,0x9A,0x87,0xBD,0x01, ++0x2F,0xF3,0x76,0xEB,0xA0,0xC9,0xE6,0x84, ++0x21,0xF6,0x10,0xFC,0x76,0xD3,0xFB,0xD1, ++0x07,0x6C,0x31,0x0D,0x28,0x58,0x76,0xB6, ++0x27,0x6E,0x5B,0x13,0x6D,0x68,0xBF,0x2F, ++0x27,0x26,0x6A,0xC2,0x77,0x09,0xD2,0x3D, ++0x2F,0xC3,0x2C,0xCF,0x08,0xF1,0x9A,0x11, ++0x2F,0x7A,0x0F,0x2E,0x41,0xAA,0x0A,0x67, ++0x2F,0x42,0xBB,0x07,0x5E,0x35,0xF1,0x3F, ++0x2F,0x9A,0x2F,0x12,0xA8,0xC3,0x92,0x24, ++0x2F,0xCC,0x11,0xC5,0x2C,0x6D,0xA9,0x4F, ++0x2B,0x83,0x86,0x83,0x2D,0xC8,0x4E,0xF0, ++0x07,0x64,0x5A,0x5E,0x13,0x46,0xA9,0xA4, ++0x2F,0x8E,0xFB,0x93,0x69,0xC6,0x99,0x2B, ++0x27,0x5A,0x8E,0x6F,0xC9,0x7E,0x2B,0xC5, ++0x27,0x60,0x02,0x25,0xB3,0x77,0xC3,0x38, ++0x2B,0x9A,0x62,0x3D,0x1A,0x3D,0x39,0x31, ++0x0F,0x68,0x36,0x28,0x85,0xEB,0xBE,0xD8, ++0x2F,0x30,0xF7,0xD6,0x6E,0xC0,0xA5,0xB5, ++0x21,0x38,0x21,0xF2,0x1A,0x04,0xBF,0x24, ++0x07,0xBA,0x0D,0x57,0xBB,0x56,0x65,0x1E, ++0x27,0xE3,0x44,0x89,0xD4,0x07,0x8D,0x10, ++0x2F,0xB0,0xCC,0x1F,0x63,0x38,0x18,0x2A, ++0x27,0x19,0x5A,0x64,0x8C,0xAD,0xA5,0xDD, ++0x2F,0xF2,0x32,0xB9,0x71,0x24,0x51,0x21, ++0x27,0x7E,0x57,0x81,0xFF,0x26,0xE1,0xA0, ++0x27,0xC3,0x3A,0xC5,0xCC,0x3A,0x23,0x73, ++0x2F,0xEA,0x77,0xBC,0x34,0x44,0x80,0x69, ++0x27,0xC9,0xD6,0xC8,0xC7,0x32,0x38,0xE0, ++0x2C,0xD4,0xE0,0x4A,0xA7,0x9B,0x9D,0x24, ++0x0F,0x23,0x3E,0xD2,0x4C,0x00,0x1B,0xCD, ++0x27,0x10,0x4B,0x4E,0x75,0x77,0xBF,0xF7, ++0x2F,0x29,0x6E,0x5A,0x01,0xAB,0xC3,0x8D, ++0x2E,0xBD,0x37,0x4A,0xE1,0x27,0xBF,0xD2, ++0x0F,0x3D,0x7A,0x29,0x0A,0x57,0xDB,0x92, ++0x2F,0xFF,0xDF,0x07,0xDC,0x75,0x00,0x55, ++0x2D,0x0E,0x6E,0x17,0x41,0x21,0xE9,0x43, ++0x07,0xC4,0xE8,0x45,0x70,0xA3,0x7B,0x09, ++0x07,0x6B,0x91,0xF5,0x0E,0xBB,0xBC,0xDA, ++0x0F,0x22,0xC8,0x51,0xA7,0xCE,0x22,0x4C, ++0x24,0x94,0xB6,0x5F,0xBB,0x18,0xC3,0xDA, ++0x07,0xA8,0x71,0xCC,0xD1,0x21,0x6B,0x20, ++0x07,0x2C,0xD1,0xDE,0xEB,0x0E,0x61,0xB8, ++0x0F,0xAC,0x6E,0x27,0x63,0xEA,0xEA,0xD5, ++0x27,0xDB,0x0B,0xE1,0xD7,0x5B,0xD3,0x1C, ++0x2F,0x4D,0x02,0x4A,0x5A,0x61,0xEE,0xCF, ++0x2F,0x8F,0x2D,0x95,0x85,0xB1,0x29,0xE1, ++0x27,0xF1,0x29,0x42,0x67,0x1D,0x71,0x67, ++0x2F,0x0F,0x41,0x75,0xAC,0x90,0xCB,0x1B, ++0x2F,0x82,0x66,0x46,0x31,0x04,0xCE,0xAC, ++0x2F,0x86,0x2B,0xF2,0x20,0xCD,0x87,0xA7, ++0x27,0x0C,0x79,0xA7,0xE9,0xD4,0x23,0xDD, ++0x2F,0xAC,0xDA,0x86,0xAF,0x3E,0xF3,0x4B, ++0x27,0x07,0x86,0xF2,0xB2,0x00,0x26,0xCE, ++0x27,0x1C,0x04,0xE7,0xD6,0xBA,0xB7,0x25, ++0x2F,0x96,0x75,0x2B,0xE9,0xFD,0x35,0xE6, ++0x27,0x1A,0xEA,0xCA,0xDD,0xC6,0x96,0xF9, ++0x2F,0x97,0xA2,0x2A,0x04,0xEC,0x36,0x30, ++0x2F,0xDD,0x9B,0xDE,0x43,0xCD,0xDF,0xF8, ++0x2F,0xE0,0xD5,0xC0,0x0F,0xBB,0xD8,0x69, ++0x27,0xC3,0x0F,0x04,0x4E,0x95,0x8B,0x04, ++0x27,0x63,0x15,0x72,0x64,0x9E,0xC7,0x00, ++0x27,0x6F,0xED,0x6E,0x64,0xE0,0xC2,0xF4, ++0x27,0xA8,0x0E,0x7E,0xB0,0x96,0x7B,0xA9, ++0x0F,0xB0,0x1B,0xEC,0xCF,0xA8,0x17,0xB0, ++0x07,0x82,0xAB,0xC0,0x01,0x58,0xEC,0x2D, ++0x2F,0xE1,0xF7,0x50,0x24,0x3E,0xE0,0xF9, ++0x2F,0x09,0x82,0xD9,0x5D,0x19,0x2E,0xB9, ++0x27,0x1F,0x79,0x97,0xBF,0x7B,0x27,0xDE, ++0x27,0x65,0xE1,0xFE,0x4C,0x0B,0xD5,0xD3, ++0x27,0xFA,0xEC,0xB1,0x34,0x4B,0x4D,0x33, ++0x2F,0x98,0xB8,0x9F,0xA5,0xCD,0xB2,0xE9, ++0x2F,0xFD,0x5B,0xC5,0xDE,0xFC,0x6A,0xD9, ++0x2F,0x58,0x54,0x25,0x73,0x13,0x23,0x15, ++0x27,0x3D,0x50,0xE0,0xAB,0xD9,0xC6,0x77, ++0x2F,0x74,0x69,0xE1,0xBE,0xA1,0x53,0xC4, ++0x2F,0x69,0x5A,0xCD,0x5C,0x3F,0xCA,0xC1, ++0x2B,0x72,0xDF,0xC7,0xDC,0x16,0x3C,0xCC, ++0x07,0xCF,0xA7,0x8F,0x53,0x93,0xF1,0x73, ++0x27,0x02,0x57,0x2C,0x22,0xCA,0x6A,0x65, ++0x27,0x79,0xBC,0x8D,0xF2,0xA6,0xE2,0x39, ++0x2F,0xAC,0xF4,0x97,0x1F,0x72,0xCE,0x4C, ++0x27,0x2E,0xF2,0x45,0x7B,0x2A,0x16,0xE5, ++0x24,0x2A,0x49,0x15,0xE5,0x74,0x54,0xFF, ++0x07,0x58,0xD9,0xDC,0xAA,0x8A,0xA8,0x90, ++0x27,0x93,0x6E,0xFF,0x3F,0xA7,0x95,0x82, ++0x27,0x1E,0x41,0xF8,0x07,0x10,0x1A,0x50, ++0x27,0x3C,0x99,0x18,0x6A,0x83,0xCE,0x60, ++0x27,0x6D,0x1F,0x15,0x94,0x16,0xE7,0x03, ++0x27,0x4C,0xE8,0xC2,0x40,0x8F,0xB3,0x4A, ++0x21,0xD0,0xA6,0xE7,0x4C,0xBC,0xD8,0x44, ++0x07,0x17,0x9D,0x09,0x5E,0x78,0x7C,0x41, ++0x07,0xD3,0x64,0x09,0x92,0xCC,0x86,0x40, ++0x2C,0x84,0x36,0x98,0x1B,0x08,0xFB,0xB8, ++0x07,0x37,0x67,0xCF,0x47,0x99,0x30,0x0F, ++0x27,0x07,0xCA,0xA2,0xE6,0x95,0xF9,0x6B, ++0x2F,0xF1,0x38,0x2C,0x88,0x45,0x91,0x4A, ++0x2F,0xDA,0x9E,0xF9,0xEB,0x4F,0x73,0x72, ++0x2F,0x6D,0x80,0x83,0x0C,0xBE,0x66,0x2F, ++0x27,0x2C,0xFB,0xF9,0xAA,0x82,0xE2,0x7B, ++0x21,0x37,0x6C,0x53,0xFD,0x04,0xBC,0x3A, ++0x07,0x28,0x53,0xE0,0x32,0x3A,0x69,0x07, ++0x0F,0xC2,0x3B,0x26,0x9F,0xE4,0x83,0x74, ++0x2F,0x83,0x9A,0xB9,0x64,0xC3,0x82,0xBA, ++0x27,0x3B,0xF1,0x1A,0x50,0xB0,0x6B,0x3C, ++0x27,0x39,0x6E,0xD9,0x52,0x12,0xA6,0x68, ++0x2F,0x02,0xD3,0xDF,0x53,0x5F,0x9A,0x31, ++0x2F,0x26,0xA3,0x97,0xE1,0xF5,0x7F,0x0C, ++0x2F,0xCE,0xFE,0xFA,0xD9,0x69,0xAA,0xC6, ++0x27,0xB1,0xC4,0xF6,0xD0,0x41,0x6A,0xAD, ++0x2F,0x3F,0xA2,0x96,0x9A,0x98,0x57,0x1E, ++0x2F,0x7C,0x99,0x5E,0x2D,0x09,0xF3,0x0C, ++0x2F,0x63,0x29,0x7C,0x84,0x46,0x77,0x3D, ++0x2F,0xA3,0x19,0x60,0xB7,0x36,0x81,0x83, ++0x27,0xEF,0xD5,0xB2,0xD6,0x17,0x78,0x81, ++0x0F,0x0B,0x74,0x99,0x82,0x05,0xA1,0x93, ++0x0F,0x69,0x5A,0x5E,0x13,0xCE,0x77,0xB6, ++0x27,0x12,0xFF,0x0E,0x05,0xCC,0xBC,0xF3, ++0x2D,0x6D,0xCD,0xE3,0x39,0x4D,0x4A,0xB3, ++0x0F,0xA7,0x2F,0x74,0x00,0xC6,0x46,0xF2, ++0x07,0xAA,0x3D,0x16,0x80,0x4F,0xC7,0x61, ++0x27,0xC4,0xF3,0x47,0xBC,0x7F,0x8D,0x01, ++0x2D,0x78,0xC0,0xB3,0xD1,0x90,0xA5,0x5E, ++0x07,0x29,0xFA,0xDE,0x96,0xB2,0x04,0x4B, ++0x07,0xE7,0x2D,0x9D,0x75,0x2C,0xE4,0xFD, ++0x27,0x3A,0x25,0x23,0x5E,0x04,0x15,0x41, ++0x2F,0xDD,0x6E,0x18,0x19,0x07,0xDF,0xBE, ++0x2E,0x89,0xED,0x6C,0x94,0x8D,0x03,0xC1, ++0x0F,0x08,0x39,0x3F,0xDA,0xFD,0xA3,0xB7, ++0x27,0x44,0xF1,0x91,0x46,0x1C,0x91,0x1D, ++0x2D,0xD8,0x65,0x10,0xA6,0x26,0xA2,0x08, ++0x0F,0x17,0x9B,0x78,0xD0,0x2F,0x35,0x89, ++0x2F,0x24,0xD7,0xE6,0xF0,0xA9,0xDD,0xB3, ++0x27,0x62,0x34,0xC1,0x44,0xB2,0x73,0x9C, ++0x2F,0x37,0x91,0xCA,0x7A,0x94,0x4E,0xF8, ++0x2F,0x5D,0x62,0x64,0x34,0xB5,0x51,0x30, ++0x2F,0xCA,0xC3,0x49,0x58,0x6A,0x0F,0xA2, ++0x27,0x5C,0x5B,0x0D,0xA3,0x2B,0xE6,0xC8, ++0x2E,0xCC,0x6E,0x40,0xEF,0x3A,0xA3,0xA5, ++0x07,0x19,0x99,0x7A,0xF7,0x70,0xDB,0x9E, ++0x2F,0x46,0x2E,0xC5,0x6A,0xB7,0xF7,0x85, ++0x27,0x13,0x1D,0xC2,0x6F,0x2B,0x10,0xEA, ++0x27,0x0D,0x27,0x55,0x0C,0x43,0xAF,0x6C, ++0x27,0x15,0x25,0x60,0x43,0xC6,0x8F,0xC0, ++0x27,0xC1,0xB8,0x7F,0xEC,0xBD,0x92,0x8E, ++0x27,0x74,0x9C,0x83,0x41,0x89,0xBC,0xA5, ++0x2F,0x12,0xE0,0xE2,0x27,0x27,0x52,0x5F, ++0x2F,0xA5,0xA6,0x65,0x94,0x5E,0xD1,0x8C, ++0x27,0x15,0x6D,0x3C,0x24,0x6B,0xF8,0xE5, ++0x27,0x20,0x94,0xF4,0x90,0xE9,0xB0,0x1E, ++0x2F,0x58,0x50,0x29,0xCF,0x1A,0xE3,0x13, ++0x27,0xFB,0xF2,0x5C,0x4F,0x85,0xBF,0x07, ++0x2F,0xDA,0x64,0x53,0x4A,0x4A,0xC9,0xFA, ++0x27,0x2D,0x96,0x4F,0x94,0x73,0x55,0x84, ++0x27,0x86,0x60,0x27,0x2E,0x40,0xC8,0x34, ++0x2F,0xAE,0x06,0x27,0xB4,0x2C,0xFE,0xCB, ++0x27,0xE8,0x02,0x6E,0xF9,0x0C,0xF1,0xC6, ++0x27,0x33,0x39,0xCF,0xA1,0x35,0x2B,0x1E, ++0x27,0x1E,0xBB,0x1B,0x6E,0xDA,0x6B,0xA2, ++0x2F,0x56,0xD9,0x29,0xBC,0x3A,0x20,0x23, ++0x27,0x1F,0x7F,0xD6,0x29,0xF2,0x9A,0x85, ++0x2F,0xD1,0x88,0xF2,0x8C,0x6D,0x3F,0x19, ++0x2F,0xDB,0x65,0x4C,0x88,0x9C,0x9C,0xD0, ++0x27,0x6E,0xE9,0x5F,0xF4,0x6C,0x5A,0xB1, ++0x27,0xB3,0x08,0xF5,0x33,0x00,0x81,0xD4, ++0x2F,0x65,0xFE,0x70,0x67,0x36,0xFA,0x15, ++0x27,0x56,0x75,0x33,0x80,0xD0,0x3F,0x94, ++0x27,0x02,0xB4,0x8C,0xAD,0xB2,0xF9,0x18, ++0x27,0x4A,0x23,0x33,0x72,0xE5,0xD5,0x08, ++0x27,0xBC,0x7A,0xA5,0xB2,0x72,0xEE,0x34, ++0x27,0x52,0x90,0x50,0x97,0x80,0xD4,0x53, ++0x2F,0x38,0x15,0xDA,0x32,0x59,0x53,0xA6, ++0x07,0x28,0x84,0x18,0xB5,0x61,0xD6,0x93, ++0x2F,0xB1,0xB2,0xC4,0x7A,0x93,0x52,0x86, ++0x27,0x6C,0xF2,0x91,0x37,0xEC,0x24,0x38, ++0x27,0x5E,0x32,0xE4,0x47,0x98,0x3F,0x10, ++0x2F,0xCB,0x01,0xFA,0x77,0x9D,0x5C,0xA3, ++0x27,0x44,0x9A,0x61,0x99,0x6F,0x40,0xB7, ++0x21,0xC3,0xF9,0x54,0x68,0xD5,0x0F,0x8B, ++0x0F,0xC5,0x05,0xE9,0x0F,0x12,0xAB,0x42, ++0x2F,0x28,0x11,0x49,0x98,0x5C,0xA1,0x27, ++0x27,0xFE,0x3B,0xAC,0x5A,0xC5,0x26,0x9D, ++0x2F,0x2C,0x24,0xB4,0x5B,0x6B,0x9A,0x31, ++0x2B,0xAE,0x70,0x4D,0x7F,0x1E,0xC2,0xE9, ++0x07,0x85,0xD5,0x8A,0xD1,0xFA,0x08,0xDD, ++0x2F,0xA1,0x36,0x02,0x19,0xAC,0x3F,0xBE, ++0x27,0x31,0xD1,0x73,0x38,0x9C,0x98,0xBE, ++0x27,0x8A,0xEE,0x27,0x43,0x94,0x05,0xAB, ++0x2F,0xD2,0x4A,0x65,0x93,0x6B,0x61,0x75, ++0x27,0x0C,0x3A,0x3D,0xAA,0x5D,0x42,0x87, ++0x2F,0x7B,0x4C,0x20,0xB1,0x86,0xA3,0x09, ++0x27,0xE0,0xE3,0x93,0x8F,0xCF,0xF7,0x79, ++0x2F,0xD3,0xBC,0x50,0xFA,0x5A,0xC2,0xDF, ++0x2F,0x12,0xB4,0x07,0xC2,0x75,0x6D,0xC1, ++0x25,0x82,0x24,0xA5,0x33,0xE5,0x0B,0x0D, ++0x07,0x70,0xD8,0xEA,0x44,0x22,0xCD,0x4D, ++0x07,0xE8,0x81,0x71,0x80,0x15,0x43,0x05, ++0x07,0x4E,0xF2,0xE8,0xEB,0x2C,0x40,0x0E, ++0x2F,0x88,0x7C,0xDB,0xA3,0x69,0x21,0x56, ++0x21,0xEE,0x4B,0xF0,0x89,0xEE,0x7D,0xF1, ++0x0F,0x18,0x77,0x69,0xD4,0x6B,0x39,0x09, ++0x27,0x1B,0xD6,0x00,0xFC,0x61,0xAC,0x70, ++0x25,0x8E,0x6F,0xBC,0xA5,0x2A,0xBD,0x8D, ++0x0F,0x95,0xDB,0x72,0x32,0xC9,0xAA,0xDB, ++0x27,0x7B,0x93,0xE3,0x4E,0xCA,0x67,0xB9, ++0x25,0x58,0x11,0xA0,0x46,0x01,0x4D,0x76, ++0x07,0x81,0x22,0x6E,0x8D,0x41,0x85,0xAA, ++0x27,0x4D,0x67,0x2D,0xD3,0x02,0x39,0xA0, ++0x29,0x92,0xC7,0xB0,0xEA,0x7C,0x15,0x96, ++0x07,0x79,0x83,0xA2,0xCF,0xEC,0x19,0x82, ++0x2F,0xAE,0x2E,0xA7,0x5E,0x83,0xDB,0xE1, ++0x2F,0x38,0x60,0x71,0x44,0xD3,0xCD,0x92, ++0x2E,0x69,0x38,0x55,0x27,0xEA,0xDA,0xF7, ++0x0F,0x85,0x9B,0x3D,0x49,0x85,0x22,0xBB, ++0x2F,0x28,0x0A,0x13,0x14,0xEE,0x6E,0x42, ++0x29,0xC7,0x5A,0x03,0xD9,0xFB,0x36,0x91, ++0x0F,0xB9,0x0A,0x74,0xC2,0x02,0xC4,0xE8, ++0x2F,0xCB,0xD3,0x54,0xDA,0xB8,0x4C,0x23, ++0x27,0xFA,0x53,0x1E,0x9C,0xF9,0xE5,0x1F, ++0x2F,0x55,0x91,0xD3,0x0B,0xFE,0x90,0xAD, ++0x2F,0xEF,0x6F,0x01,0xD8,0x94,0xD0,0xCD, ++0x2C,0xCC,0x4F,0xED,0xDA,0xD3,0x88,0x5A, ++0x0F,0xC0,0x32,0xAA,0xF2,0xAF,0xBC,0x44, ++0x27,0x00,0x9D,0x6C,0x7B,0x49,0x95,0x5B, ++0x2D,0x5C,0xDE,0xBF,0x9D,0x76,0x55,0xAF, ++0x07,0xF0,0xCD,0x54,0xFD,0x3F,0xED,0x82, ++0x07,0xC4,0xFB,0x5F,0x50,0x93,0x40,0x87, ++0x0F,0x2B,0x3C,0x31,0xAC,0x4F,0x02,0x7B, ++0x07,0xC5,0xEF,0xFC,0x82,0xD1,0x47,0x1B, ++0x0F,0xF2,0x31,0xDF,0x4F,0x2D,0x60,0x65, ++0x27,0x73,0xA9,0x6E,0xE7,0x74,0x02,0xB6, ++0x2F,0x76,0x0A,0xBD,0xE4,0x7C,0xBD,0xFE, ++0x2F,0x9C,0xA5,0x23,0xD1,0x9E,0x93,0xF8, ++0x2F,0x0C,0x9B,0xAD,0x4B,0x77,0x1F,0x08, ++0x27,0x5A,0xE3,0x88,0xFF,0x55,0xF1,0xF1, ++0x27,0x35,0xCD,0x12,0x92,0x8D,0x9F,0x35, ++0x2F,0x14,0x91,0xEF,0x40,0x90,0x85,0x3F, ++0x2F,0x0F,0x49,0x60,0xA7,0xDB,0xC6,0xA1, ++0x2C,0x4E,0xA5,0x00,0x18,0x2B,0xAC,0xAD, ++0x07,0x7B,0xC5,0xF4,0x53,0x86,0x52,0xC5, ++0x2F,0xBE,0x70,0x49,0x2C,0x3B,0xF1,0x81, ++0x2F,0x79,0xFF,0xBF,0x60,0x17,0x97,0x09, ++0x27,0xAF,0xC8,0x62,0x42,0x48,0x25,0x40, ++0x27,0x12,0x2D,0xE8,0x80,0x8F,0x0C,0x33, ++0x2F,0x7E,0x42,0x81,0xEE,0x9E,0x69,0xBF, ++0x2F,0x12,0x71,0x03,0x82,0x70,0x33,0x25, ++0x26,0xD9,0x02,0xEC,0x14,0x09,0xC9,0xE8, ++0x07,0xE6,0x43,0x1C,0x5D,0x71,0x9D,0x0A, ++0x27,0x8D,0xD1,0x5B,0xEA,0xEE,0xED,0x02, ++0x27,0xBB,0xF7,0xEE,0xD7,0xBD,0xDA,0x1D, ++0x27,0x0E,0xC7,0x07,0x88,0xF0,0x2F,0xEE, ++0x2F,0x22,0xD2,0x04,0xEC,0x55,0x78,0x8A, ++0x27,0xBC,0x69,0x2B,0x64,0x32,0x0A,0xC9, ++0x2F,0xCF,0xB8,0xC6,0xD9,0x59,0x57,0xB1, ++0x2F,0x75,0xD9,0x2C,0x07,0xD6,0xB2,0xC4, ++0x2F,0x20,0x31,0x21,0xF6,0x06,0x96,0x94, ++0x27,0xE6,0x75,0x7E,0xAC,0x4A,0x6E,0xAB, ++0x27,0xFB,0x08,0xC6,0xBD,0x75,0x4D,0xEA, ++0x2F,0xB4,0x6E,0x81,0xB3,0xAB,0x02,0x42, ++0x23,0xF8,0x15,0x26,0x32,0x75,0xDF,0x72, ++0x0F,0x49,0x8F,0x7C,0x93,0x4B,0x37,0xDC, ++0x2C,0xD1,0xA8,0x52,0x86,0x68,0x5D,0xAB, ++0x07,0x07,0x4E,0xDD,0x24,0x83,0xB8,0xD1, ++0x07,0x6F,0x3E,0x82,0x9C,0xA9,0xDD,0x4F, ++0x27,0xD0,0xFC,0xC2,0xE0,0x52,0x7A,0xD8, ++0x2F,0x1A,0x11,0x94,0x9D,0xA9,0xC7,0x8A, ++0x2F,0x7D,0xE0,0xE9,0x52,0xB6,0x04,0x70, ++0x27,0xFD,0x65,0x95,0xDB,0x55,0x5E,0x24, ++0x2F,0x1F,0x6F,0x42,0x4A,0x41,0x3F,0x3A, ++0x2F,0xC0,0xE5,0xB2,0xD9,0xE1,0xA4,0xCE, ++0x2A,0x69,0xC5,0xC8,0x75,0x08,0xFA,0x2A, ++0x07,0x5D,0xA8,0x53,0xCE,0x9A,0xAF,0xD0, ++0x24,0x52,0x6F,0x31,0x98,0xF1,0x95,0x4E, ++0x07,0x46,0xFB,0x55,0x73,0x89,0x87,0x87, ++0x27,0x15,0x13,0x2E,0xA8,0x61,0xE8,0x2B, ++0x21,0x4D,0x0D,0xD4,0xE2,0xC3,0x05,0x13, ++0x0F,0xC5,0xCE,0x3E,0x77,0xA4,0x1C,0xCA, ++0x24,0x4C,0xA7,0x4B,0xDD,0xE0,0x2A,0xCD, ++0x07,0x4A,0x99,0xAB,0x1D,0xBD,0xFE,0x00, ++0x24,0x74,0xDB,0xC4,0x61,0x0F,0xC7,0xE8, ++0x07,0x8F,0x84,0x91,0xB2,0x40,0x47,0xD2, ++0x0F,0xE9,0x1E,0x6C,0x75,0xC6,0x84,0x3F, ++0x27,0x43,0x23,0x1B,0x9E,0x90,0x00,0x17, ++0x2F,0x0B,0x1B,0x03,0xB5,0x5C,0xAF,0xAF, ++0x2F,0x37,0xE9,0x0A,0xF9,0xCE,0x7F,0x3D, ++0x2F,0x67,0x60,0x16,0xCC,0xDE,0x27,0x0C, ++0x27,0x26,0x74,0x99,0x4A,0x49,0x4C,0x5D, ++0x21,0x70,0x68,0x23,0x2D,0xDC,0xEC,0xE9, ++0x07,0x2C,0x33,0xF8,0xE1,0xAE,0x94,0xE7, ++0x2F,0xAF,0x04,0xFD,0x68,0xE4,0xE7,0xD2, ++0x21,0x9A,0x2F,0xAD,0xD5,0x03,0x70,0xE8, ++0x07,0x1A,0x20,0x7D,0x42,0x45,0x8C,0xBC, ++0x2F,0x23,0x81,0x40,0x34,0xA8,0x52,0xF2, ++0x27,0xB1,0xDA,0x8E,0xC4,0x05,0x45,0xFE, ++0x26,0x2E,0x84,0xED,0x80,0x60,0x07,0x37, ++0x07,0x76,0x4C,0x0B,0x99,0xAF,0x9F,0x9E, ++0x2F,0x30,0xFE,0xA7,0xFD,0x08,0x3C,0xFD, ++0x2F,0x03,0x99,0x0A,0xA1,0x66,0x0B,0x6F, ++0x22,0xFF,0xA3,0x68,0xC9,0x3B,0x21,0x59, ++0x07,0xDB,0x4D,0xBB,0x94,0xC6,0x22,0x01, ++0x2F,0xC1,0xC5,0x08,0x89,0x97,0x95,0x6F, ++0x29,0x72,0xD5,0xE4,0x74,0xBE,0x97,0xA9, ++0x07,0x5A,0x76,0xCC,0xC7,0x7C,0xFA,0x9C, ++0x2C,0x5B,0x70,0xAC,0x8B,0xA4,0x19,0xC2, ++0x0F,0x2B,0xD9,0x42,0x3D,0x38,0xD3,0xBB, ++0x27,0x91,0xA8,0x3E,0xCB,0x17,0xF8,0x3B, ++0x27,0xD3,0xD1,0xDE,0x9F,0x5D,0x3D,0xEF, ++0x27,0x70,0x79,0x2C,0xD5,0x6E,0xDC,0x9D, ++0x2F,0x87,0xFE,0x37,0xE0,0xB4,0xF0,0x5A, ++0x0F,0x29,0xE7,0x55,0x6C,0xF7,0x0B,0x15, ++0x27,0x3E,0x53,0x34,0x6F,0x60,0xE2,0xCF, ++0x2F,0xFA,0x40,0xF5,0xAD,0x94,0x6C,0x13, ++0x27,0x91,0x51,0xC3,0x8F,0xBB,0xD4,0xB3, ++0x2F,0xB0,0x3D,0x05,0xDB,0x73,0x0A,0xD0, ++0x27,0xA0,0x26,0x2E,0x76,0xE8,0x7A,0x61, ++0x25,0x36,0x26,0x5D,0x2E,0x31,0x5C,0xA6, ++0x0F,0xC8,0x4F,0xDE,0x8B,0xA4,0x80,0x94, ++0x27,0x20,0xE8,0x39,0xCF,0x9A,0x3C,0xA5, ++0x27,0xAD,0x02,0xE8,0x6D,0xA9,0x60,0xA6, ++0x2F,0x13,0xBD,0x67,0xFC,0x49,0x49,0xB8, ++0x27,0x09,0xB8,0xC8,0x4B,0xC8,0xD5,0x23, ++0x2F,0x3B,0x5A,0xD3,0xA3,0xFA,0x5C,0x6D, ++0x27,0x93,0x21,0x35,0xE4,0xF6,0x17,0xF6, ++0x27,0x05,0x6C,0x8E,0xF3,0x2D,0x4C,0xB1, ++0x27,0x99,0xAA,0x1C,0x37,0x7B,0x89,0x7D, ++0x27,0xAD,0xDF,0x1D,0x1C,0x14,0x7E,0x87, ++0x2F,0x78,0xF8,0xD3,0xD3,0xC4,0xFF,0x3F, ++0x27,0x3C,0x81,0x4D,0xC9,0x44,0xFA,0xA6, ++0x27,0xCE,0xEF,0xF2,0xC7,0xAC,0x88,0x32, ++0x27,0xA6,0xEE,0x2C,0xCB,0xED,0x7D,0x55, ++0x25,0x53,0x71,0x36,0x01,0xD5,0x6A,0x50, ++0x07,0xC8,0xDB,0x66,0x99,0xCB,0x5D,0xC7, ++0x27,0xD0,0x96,0x05,0xF9,0xE9,0x03,0x14, ++0x27,0x71,0x9A,0x45,0xC4,0x73,0x86,0xF0, ++0x2F,0x2C,0x3E,0x64,0x06,0xB2,0xC8,0x05, ++0x2F,0x23,0x2C,0x27,0x6B,0xB7,0x50,0x84, ++0x2F,0xFB,0x78,0xFF,0xBA,0x9C,0x7C,0x37, ++0x2F,0xCD,0x76,0xCC,0x85,0x20,0x03,0xD1, ++0x2A,0xB0,0xE4,0x25,0x5E,0xF8,0xC8,0x3A, ++0x07,0xBB,0xCB,0xA9,0x2F,0xD0,0x4D,0x97, ++0x2F,0xF1,0x74,0x5C,0x95,0xC4,0xA2,0xB4, ++0x29,0x25,0xF6,0xF9,0x4E,0x13,0xE7,0x04, ++0x07,0x89,0xE0,0x1B,0x7C,0x4F,0x61,0x4C, ++0x24,0x4D,0x72,0x58,0x0C,0x92,0xC1,0x98, ++0x0F,0x1A,0x5F,0x17,0xB7,0xE8,0x09,0xCA, ++0x0F,0x30,0xB4,0xA5,0x83,0xB8,0xC2,0x58, ++0x27,0xE8,0x2D,0xB9,0x68,0xE8,0x63,0x7D, ++0x2F,0x4C,0xBF,0x16,0x8A,0x16,0x11,0xE4, ++0x2F,0x2C,0x12,0x93,0x6E,0x15,0x35,0x2F, ++0x23,0xA2,0x66,0x85,0x6B,0x6A,0xA1,0x9B, ++0x07,0x27,0xDA,0xA3,0xCF,0x4F,0xED,0x63, ++0x2F,0x1F,0xDF,0x09,0xD3,0x9C,0x80,0x91, ++0x21,0xF0,0x11,0x2D,0x7C,0xB6,0x70,0x82, ++0x07,0xC6,0x90,0x29,0x9D,0x15,0x8E,0x27, ++0x2F,0x87,0x17,0xF2,0xFE,0x4B,0x05,0xA9, ++0x2F,0x28,0xB1,0x41,0xEE,0x5A,0xD3,0x86, ++0x27,0x40,0xC9,0x1F,0x9C,0xD7,0x5E,0x69, ++0x27,0xA3,0x53,0x5C,0xCC,0x1D,0x4C,0xC5, ++0x2F,0xE7,0x50,0x50,0x76,0x13,0x8C,0xDA, ++0x2F,0xB3,0x3F,0xC3,0x4A,0x5B,0x43,0xEA, ++0x27,0x1A,0xF4,0x10,0x39,0x23,0xCF,0x9D, ++0x27,0x85,0x42,0x33,0x16,0x69,0x44,0xBF, ++0x2F,0x1E,0xDC,0x91,0x8B,0xB8,0xD4,0x73, ++0x2F,0x2A,0x31,0x52,0x88,0xA3,0xC0,0xF7, ++0x27,0x10,0x3C,0x9B,0x7E,0x03,0x32,0x5D, ++0x2F,0xD9,0x46,0x0A,0xE9,0x51,0x0C,0x45, ++0x2F,0xCE,0x3D,0x52,0xAE,0xCD,0x03,0x6B, ++0x27,0x23,0x87,0x86,0x03,0x26,0x93,0xFC, ++0x2F,0x59,0xD1,0xAB,0x3D,0xE3,0xEC,0x80, ++0x27,0x37,0x0E,0x6E,0x15,0x05,0x91,0x48, ++0x2F,0xAF,0x08,0x0A,0x3C,0xA1,0x35,0xE8, ++0x29,0x86,0xC6,0xEC,0x86,0x7B,0x1F,0xE7, ++0x0F,0x70,0x02,0x7E,0x1E,0xB8,0x5B,0x20, ++0x27,0xA7,0x5A,0x79,0x47,0x21,0xCB,0x32, ++0x2F,0xC8,0xD5,0x3F,0x61,0x85,0xF5,0x74, ++0x27,0xEF,0x83,0x95,0xBE,0x7F,0x48,0xC9, ++0x27,0x4E,0x7D,0xC5,0x12,0x3D,0xA8,0x4C, ++0x2F,0x57,0x6C,0x35,0xD7,0xF1,0xAE,0x07, ++0x27,0x27,0xDE,0xB4,0xBF,0xDB,0xE7,0xD4, ++0x27,0xE5,0x55,0x41,0x2B,0x07,0x61,0xA1, ++0x27,0x6F,0x9A,0x6E,0x1F,0x0A,0x58,0x32, ++0x27,0xFB,0xD7,0xDB,0xC6,0x7F,0x72,0xB4, ++0x27,0xFA,0x62,0x63,0x1A,0x75,0x12,0xEB, ++0x2F,0x47,0x1E,0xB0,0x09,0xFF,0x0C,0xBB, ++0x2F,0x21,0xD3,0x9C,0xC4,0x11,0xF3,0x35, ++0x27,0x89,0x79,0xE7,0x45,0x49,0x2E,0xA4, ++0x2F,0x0E,0xA2,0x00,0xE6,0x66,0x35,0xCD, ++0x27,0xFC,0xD1,0x6B,0x8E,0x06,0xD2,0xC1, ++0x2F,0x38,0x41,0x6D,0x1E,0xE1,0x05,0x51, ++0x27,0x6B,0xC2,0xD1,0x55,0xE0,0x6A,0xB3, ++0x27,0x81,0xD5,0xFF,0x2A,0x0B,0xEF,0x95, ++0x2F,0xDC,0x30,0xF0,0x0D,0xA1,0x5F,0xFB, ++0x2F,0xCB,0x39,0x1F,0x0A,0x1D,0x1D,0xD3, ++0x27,0x13,0x19,0xF4,0xA1,0xD9,0x25,0xD5, ++0x27,0x56,0xA5,0x89,0x30,0xBC,0xAE,0xA3, ++0x2F,0x2A,0x66,0xE3,0x6F,0x5A,0x0A,0xEE, ++0x27,0x4A,0xD9,0x4C,0x3C,0xDE,0xDE,0x50, ++0x27,0x96,0x75,0xE9,0xD2,0x45,0x10,0x1D, ++0x27,0xD6,0x3C,0x7C,0x83,0xA4,0xED,0x6F, ++0x2F,0xE9,0x3F,0x9A,0x36,0xDB,0x91,0xEC, ++0x2F,0x1C,0x6D,0x2F,0x93,0xA6,0x32,0xE3, ++0x2F,0xCF,0xAA,0xF0,0x9A,0xA9,0x39,0x1F, ++0x2F,0x8D,0x87,0xC1,0x47,0x95,0x3A,0xC9, ++0x27,0x68,0x81,0xF9,0xAA,0x1A,0x4C,0x19, ++0x2F,0xEB,0x62,0x69,0xC9,0xE4,0x6B,0x2F, ++0x27,0xA4,0x84,0xE4,0xB7,0xA5,0x93,0x91, ++0x2F,0xC3,0xB2,0x1A,0x74,0xFA,0x73,0x80, ++0x27,0x3A,0x17,0xB0,0x37,0x92,0x79,0xA4, ++0x27,0x8A,0xE6,0x86,0xBD,0x87,0xB0,0x2E, ++0x27,0xB7,0x49,0x5A,0xEC,0xB0,0xBC,0x2F, ++0x27,0xE4,0x4A,0x12,0xC7,0x60,0x0B,0x24, ++0x27,0xC6,0x56,0x0F,0xE9,0x94,0xCE,0xF6, ++0x27,0x01,0x99,0x1F,0xE2,0x2E,0x53,0x6A, ++0x2F,0x74,0x74,0x8F,0x3A,0x5D,0x57,0x0F, ++0x27,0x7D,0xFC,0xC5,0x84,0xCB,0x8E,0x7F, ++0x27,0xD5,0x56,0xDD,0x6E,0x2F,0xFF,0x19, ++0x23,0x6B,0x9D,0x36,0xCB,0xCF,0xDD,0x6D, ++0x0F,0x71,0x28,0x74,0x5B,0xFE,0x24,0x02, ++0x27,0xC7,0xA8,0xDC,0x31,0xDF,0x17,0x98, ++0x2F,0xBD,0xA6,0x23,0x6E,0x13,0x87,0x1C, ++0x27,0x53,0x77,0x69,0x14,0xA6,0xDC,0x04, ++0x23,0x5B,0xA6,0x12,0xDB,0x5F,0x14,0x17, ++0x0F,0xA3,0x3C,0xAE,0xB6,0x42,0xD5,0x39, ++0x2F,0x0F,0x74,0x08,0x2C,0x01,0x26,0xA2, ++0x2F,0xAB,0x35,0xCF,0xAC,0x9F,0xC5,0xFF, ++0x2F,0x66,0x9C,0x79,0x0E,0xC7,0x3B,0xE5, ++0x27,0x38,0x95,0xB9,0x7F,0x56,0xBD,0x6B, ++0x2F,0xAE,0x6B,0xC3,0x8B,0x64,0x25,0x6E, ++0x27,0xE5,0x23,0x15,0xD2,0x63,0xDB,0xF6, ++0x2F,0xAC,0x47,0x47,0x88,0xBC,0x9B,0xD0, ++0x27,0xA7,0x26,0x12,0x3A,0xCE,0x73,0x2E, ++0x24,0xFC,0x21,0x32,0x5D,0x0D,0x29,0xC6, ++0x07,0x5C,0x5C,0x22,0xD9,0xA0,0x3D,0xE9, ++0x0F,0xB1,0xD8,0x27,0xDD,0xF6,0xD6,0x8B, ++0x24,0xA3,0x06,0x62,0x51,0x2E,0x11,0x6D, ++0x07,0x9C,0xDD,0xB4,0xA0,0x1B,0x1B,0x0F, ++0x27,0x16,0x21,0x8B,0x35,0x24,0x94,0x47, ++0x2D,0x71,0x67,0x67,0x73,0xD2,0x75,0x28, ++0x0F,0x52,0x09,0x49,0xA7,0x99,0x63,0x8A, ++0x2F,0x02,0x6B,0x71,0x34,0x3F,0xCC,0x4C, ++0x27,0xC4,0xE5,0x45,0xD5,0xB9,0x55,0x37, ++0x22,0x81,0x4A,0x6A,0x9B,0xC5,0xD4,0x82, ++0x07,0x23,0x7F,0x35,0xC2,0x7D,0x66,0x4E, ++0x27,0x55,0x3F,0x07,0xC2,0x0C,0x55,0x28, ++0x29,0xCE,0x06,0x49,0xA8,0x46,0xE8,0xE5, ++0x07,0xE7,0x5D,0x37,0x5B,0xB9,0x8F,0xB5, ++0x2F,0x4D,0xF6,0x72,0xAD,0x9C,0xEA,0x40, ++0x2F,0xC2,0x73,0x91,0x56,0xB9,0xC3,0x36, ++0x2E,0x64,0x38,0xC4,0x28,0x46,0x94,0x19, ++0x0F,0x66,0x4D,0xF1,0xDB,0x81,0x35,0x7D, ++0x2F,0x7C,0xD5,0x9E,0x81,0xFC,0xF9,0xDD, ++0x2F,0x79,0x64,0x36,0x77,0x26,0x53,0x46, ++0x27,0x5D,0x90,0x44,0xFB,0x4B,0x8C,0xCE, ++0x27,0x65,0xB7,0x3B,0x42,0x29,0x0A,0x6C, ++0x2F,0x9B,0x1F,0x9E,0x50,0x5A,0xF1,0xF4, ++0x27,0xE8,0xC5,0x15,0x7F,0x83,0x8E,0x72, ++0x27,0x88,0x5D,0x21,0x3F,0xDD,0x10,0x10, ++0x27,0x3C,0xE1,0x81,0x87,0xDD,0x8C,0x8F, ++0x0F,0x11,0x8E,0xC2,0xD7,0x3F,0x68,0x92, ++0x07,0x71,0x46,0x44,0xE3,0xEC,0xF2,0xF1, ++0x07,0x7E,0xD1,0x5B,0x33,0xA7,0x6B,0x32, ++0x07,0x20,0xF5,0x42,0x2F,0xCE,0x06,0xE3, ++0x2F,0x76,0x8D,0x4B,0xE6,0x12,0x51,0xDE, ++0x2F,0x3A,0xB6,0x94,0x00,0x43,0x91,0xF0, ++0x2F,0x0B,0x16,0xA9,0x65,0xC8,0x3F,0x25, ++0x23,0x2B,0xCB,0x4A,0x80,0xC1,0xDC,0x1D, ++0x07,0x02,0xC9,0x4F,0x26,0x29,0x78,0xF4, ++0x07,0x91,0x2A,0x85,0xDB,0xE8,0x49,0xE1, ++0x27,0xED,0xD3,0xFE,0x27,0xF6,0x27,0x2B, ++0x2F,0xC1,0x4D,0x57,0xBA,0xA3,0x11,0x25, ++0x2F,0x1E,0xD7,0x8E,0x61,0x7B,0xDF,0x69, ++0x2F,0x33,0x51,0xB6,0x78,0x14,0x1B,0x6D, ++0x0F,0xC4,0xEE,0x07,0x3B,0x9B,0x54,0xC2, ++0x0F,0x97,0xCB,0x02,0x95,0x5C,0x16,0xBA, ++0x2C,0x62,0x9B,0xB5,0xEF,0xA7,0xCF,0x38, ++0x07,0x68,0xFC,0x1F,0x68,0x82,0x38,0x38, ++0x0F,0x21,0x78,0xF9,0x56,0xEA,0xE3,0x09, ++0x0F,0x81,0xD9,0xF5,0x1D,0x53,0x30,0x2F, ++0x0F,0xAA,0x8B,0x80,0x17,0x2F,0xE1,0x27, ++0x0F,0xB9,0xB2,0x52,0x5F,0x34,0xE0,0xFD, ++0x24,0xA5,0x03,0xEA,0x41,0x48,0x57,0x46, ++0x0F,0x86,0x8F,0xEF,0x88,0xEA,0xE7,0x8F, ++0x27,0xF9,0x5E,0x02,0xB4,0x7B,0x4F,0x9F, ++0x21,0x3A,0xE3,0xEE,0x24,0x62,0x3C,0x48, ++0x07,0x2A,0x54,0x17,0xAF,0x5D,0x5B,0xF2, ++0x27,0xB8,0x26,0x05,0x0B,0xC2,0x52,0xAA, ++0x21,0xC4,0xCF,0x0A,0x27,0x89,0xD4,0x0D, ++0x0F,0xF8,0xCD,0x4C,0xF2,0x95,0xE4,0x6E, ++0x2F,0xAC,0x17,0x9B,0x63,0xBC,0x00,0x62, ++0x21,0xFB,0xF3,0xBE,0xA3,0x85,0x76,0xD0, ++0x07,0x0B,0xD1,0x5D,0x63,0xAD,0x6C,0xDF, ++0x07,0xBE,0x90,0x56,0x49,0xA0,0xFC,0xEB, ++0x2F,0x99,0xD7,0xFC,0xD1,0xA4,0x91,0xD5, ++0x25,0x1F,0x4A,0x9E,0x93,0x0F,0xD8,0xFC, ++0x0F,0xB7,0xE9,0xBA,0x71,0x10,0x76,0xC0, ++0x2F,0x23,0x24,0x79,0xDB,0x29,0x79,0x2E, ++0x2F,0xA4,0xE0,0xB4,0x65,0x16,0x5E,0x31, ++0x2F,0x4D,0xA2,0x9B,0x18,0xE5,0xA9,0x6D, ++0x2F,0xA8,0x10,0x12,0xB9,0xF1,0xED,0xB9, ++0x27,0x93,0x34,0x5B,0xE8,0x32,0x81,0xFC, ++0x27,0x78,0xE3,0x29,0xB7,0xA8,0xBE,0xD4, ++0x27,0x6D,0x5E,0x8F,0x41,0x3E,0xC3,0x9E, ++0x27,0x55,0xB6,0x5D,0xC2,0xE3,0xB3,0xB7, ++0x27,0x7F,0xA6,0x92,0xB4,0x25,0xBF,0x03, ++0x21,0xC2,0xE0,0x5C,0x05,0x18,0xDC,0x19, ++0x0F,0x4A,0x25,0x88,0xE3,0x31,0x86,0xA3, ++0x27,0x28,0x23,0x4D,0xAE,0x70,0x0E,0xBC, ++0x27,0xE7,0xB6,0x01,0xD1,0x48,0xEA,0xF9, ++0x2F,0x30,0xE2,0x43,0xA3,0xB4,0x8F,0x9C, ++0x27,0x29,0xC7,0x19,0x4D,0xC8,0x90,0x82, ++0x0F,0x1D,0x88,0xD4,0x07,0xAA,0x41,0x57, ++0x2C,0x60,0x4B,0x88,0xC7,0x6A,0x79,0xBB, ++0x07,0x23,0xC4,0xBC,0xE1,0x85,0xDD,0x31, ++0x24,0xF9,0x3B,0xD1,0x0C,0xE1,0x05,0x97, ++0x07,0x05,0xA7,0xD5,0x7C,0x92,0x9E,0x58, ++0x2C,0xC6,0x61,0x95,0xD3,0x80,0xBE,0xAD, ++0x0F,0x37,0x95,0xC3,0x12,0xCE,0x15,0xC2, ++0x2F,0x6F,0x64,0xD7,0xCE,0xF4,0xD8,0x0A, ++0x2F,0x0C,0x74,0x57,0xCA,0x36,0xE1,0x8D, ++0x2F,0x59,0x83,0x55,0xD5,0x46,0x58,0x52, ++0x23,0xCE,0xA6,0xE9,0x54,0x55,0x52,0x5D, ++0x0F,0x98,0xFB,0xA3,0x72,0xF3,0x48,0xC2, ++0x27,0x1E,0x98,0x81,0xE9,0xBA,0x2D,0xB9, ++0x27,0x25,0xB2,0x47,0x91,0x05,0x6B,0x84, ++0x2F,0x9D,0x3D,0x77,0x39,0xF0,0xFF,0x88, ++0x2F,0xE8,0x7A,0x61,0xD3,0x92,0xC6,0xCB, ++0x2F,0x50,0xF7,0xE9,0x76,0xF0,0x6E,0xE3, ++0x25,0x04,0x18,0x0F,0x6E,0xB8,0x18,0xED, ++0x0F,0xA3,0xDC,0xAB,0xBD,0x38,0x13,0x12, ++0x27,0xB5,0x55,0x46,0xC7,0xDA,0x3C,0x5D, ++0x21,0xDA,0xD9,0x11,0x25,0x7F,0x88,0x54, ++0x07,0x15,0x6E,0x37,0xEF,0xA7,0x2E,0x20, ++0x2C,0x36,0x99,0x76,0x6C,0x47,0x2E,0xBE, ++0x0F,0x6E,0xF1,0x47,0x01,0xC9,0xC9,0xC8, ++0x2C,0x9C,0x06,0x63,0x02,0xA2,0x51,0xAB, ++0x0F,0x1C,0x3D,0x60,0x17,0x34,0xF6,0x1B, ++0x27,0x96,0x95,0xD7,0x6C,0xF7,0xF9,0xEB, ++0x27,0x02,0x6F,0x69,0x88,0xAD,0xB2,0xFE, ++0x2E,0x9F,0x9B,0xE8,0x5D,0xE4,0x61,0x1D, ++0x07,0x00,0xEC,0x5A,0xB4,0x6A,0x1E,0xB5, ++0x27,0x08,0x86,0x5A,0xB4,0x11,0xEB,0x79, ++0x27,0x86,0x63,0x39,0x50,0xAD,0xA6,0xC3, ++0x2F,0xD8,0xFF,0xAC,0x2C,0x3C,0x56,0xC4, ++0x2F,0x28,0xC1,0x15,0x24,0x49,0xB8,0x1C, ++0x2F,0xF5,0x53,0xCE,0x4E,0xE4,0x93,0xB4, ++0x2F,0x62,0x37,0x53,0x8C,0xDF,0xDE,0x80, ++0x27,0xA9,0xB3,0x77,0x8C,0x28,0x1F,0x08, ++0x2F,0x9B,0x3A,0xF2,0xD0,0x30,0x25,0xA8, ++0x2F,0x17,0x83,0x98,0xB3,0x1A,0x59,0xA8, ++0x2F,0x8B,0x2E,0x80,0xD9,0x30,0xEE,0xA6, ++0x27,0x86,0xA8,0x2E,0xDB,0x2B,0x34,0x57, ++0x27,0x56,0xC7,0xED,0xB7,0x84,0x9E,0x39, ++0x2F,0x0F,0x91,0x19,0xDA,0x8E,0x08,0xB1, ++0x27,0xBD,0x1C,0x3B,0x89,0x15,0x67,0x78, ++0x27,0x3E,0x8B,0x08,0xF3,0x8E,0x59,0xE9, ++0x27,0xC5,0x06,0xD3,0x73,0x90,0xCB,0x70, ++0x2F,0xB7,0xC7,0x50,0x6E,0x09,0x72,0x19, ++0x27,0x37,0x6A,0x15,0x4B,0x2A,0x4C,0x38, ++0x26,0xB3,0xE7,0x2A,0x30,0x37,0x40,0xD8, ++0x0F,0x91,0x56,0x15,0x0B,0xE6,0xB8,0x00, ++0x07,0xF1,0xEA,0x73,0x72,0x2B,0xCD,0xBA, ++0x27,0x08,0x8A,0xD8,0x1A,0xE9,0x7A,0xC6, ++0x27,0x4C,0x66,0x74,0x0C,0xCC,0x35,0x7A, ++0x27,0x34,0x02,0x14,0xE9,0x32,0x7C,0x83, ++0x2F,0x9C,0x7C,0xF4,0x3D,0xD0,0xA5,0x85, ++0x2F,0x28,0x79,0x86,0xB1,0xC1,0xCB,0xE8, ++0x27,0x81,0xCB,0x37,0xE1,0xBC,0x79,0xF6, ++0x27,0x7F,0x20,0xB6,0xB2,0x7D,0x03,0xC1, ++0x2F,0x5B,0xC9,0x77,0x56,0xE2,0xBA,0xFD, ++0x2F,0x44,0x5E,0x7B,0xC8,0x3B,0xBC,0xC7, ++0x2F,0x91,0xCF,0x66,0xAF,0x4E,0x0C,0xE7, ++0x27,0x3C,0x33,0xC3,0xA9,0x4C,0x36,0xAA, ++0x2F,0x4A,0x61,0x95,0x04,0x6A,0x03,0x7E, ++0x2F,0xB1,0xEE,0x65,0xDB,0x8A,0xCC,0x81, ++0x27,0x5B,0xE0,0x77,0x99,0x58,0x5D,0x54, ++0x27,0xB9,0x7F,0x9B,0xFD,0x81,0x32,0x0D, ++0x2F,0x1B,0x37,0x28,0x1C,0x30,0xEE,0x22, ++0x2F,0x64,0xDF,0xE8,0x33,0x93,0x67,0xA7, ++0x21,0xDF,0xBD,0x62,0x83,0xC4,0xD8,0x98, ++0x07,0x8F,0x0F,0x0A,0xAE,0x95,0x50,0x71, ++0x2F,0x00,0xC3,0x8E,0x29,0x2B,0x38,0xE7, ++0x2F,0x99,0xE4,0xF4,0x43,0x13,0x39,0x85, ++0x27,0x7D,0xC3,0x03,0x64,0x00,0x3B,0xAF, ++0x2F,0x65,0x41,0x08,0xDF,0xA4,0xE3,0x0A, ++0x2F,0xD9,0x10,0xC3,0x30,0x86,0xFD,0x99, ++0x21,0x5A,0x8F,0x51,0x75,0x64,0xC7,0x0B, ++0x0F,0x50,0x63,0xB4,0x85,0x51,0xAB,0xCA, ++0x2F,0x4A,0x05,0x42,0xA5,0x4D,0x37,0xC4, ++0x2F,0xD1,0x40,0x20,0xA7,0xD4,0x6F,0xFE, ++0x2F,0x14,0x57,0x3E,0x2D,0xB2,0x46,0xED, ++0x27,0x66,0x88,0xA4,0xD5,0x74,0x19,0x15, ++0x2F,0xD6,0x3F,0x33,0xEB,0xFC,0xD7,0x5E, ++0x27,0x28,0xA2,0x55,0xD3,0x8F,0x37,0x15, ++0x27,0xDE,0x57,0xCC,0xAD,0xE1,0x13,0x50, ++0x2F,0xE6,0x78,0x38,0x6C,0x5B,0xED,0x11, ++0x2F,0xD9,0x24,0x19,0x3C,0x2C,0xA7,0xA3, ++0x2F,0x09,0x78,0x4A,0xC7,0x12,0x8F,0x74, ++0x27,0xA0,0xDD,0xFB,0x62,0x09,0x1E,0x44, ++0x2F,0x7A,0x48,0x98,0x88,0xB0,0x76,0xB4, ++0x2F,0x87,0x8F,0xA5,0x8B,0x7E,0xC2,0x86, ++0x27,0xE7,0x87,0x06,0x2C,0xE7,0x5B,0x7B, ++0x26,0xE1,0xE8,0x48,0xB3,0xAE,0x5E,0xEE, ++0x07,0xC1,0x4B,0xAF,0x2B,0x75,0x4D,0x3B, ++0x27,0x95,0x48,0x70,0xE9,0x98,0x68,0xA0, ++0x2F,0x1C,0x7A,0x36,0xCB,0x42,0xDA,0xA5, ++0x2F,0x34,0x2A,0x81,0x1E,0xF8,0xF8,0x34, ++0x27,0xC0,0x00,0x64,0x36,0x51,0x5C,0xBB, ++0x27,0xC7,0xFD,0xE3,0xB2,0xF1,0x0B,0x30, ++0x27,0xC4,0xDC,0xC7,0x2B,0x16,0x8B,0x7A, ++0x27,0xE4,0x00,0xB3,0xD7,0xF3,0x2C,0x66, ++0x2F,0x67,0x5A,0x2F,0xB1,0xB9,0x4D,0x7F, ++0x2F,0xE1,0x63,0x7E,0xB2,0x0D,0xB3,0x71, ++0x2F,0x9D,0x69,0x02,0x8C,0x35,0xC9,0x33, ++0x2F,0x6B,0xDE,0xD5,0x9B,0xE3,0x77,0x53, ++0x27,0x79,0x14,0x84,0x6E,0x47,0x1F,0xA7, ++0x2F,0x34,0x2B,0xED,0xA6,0x96,0x94,0x30, ++0x2F,0x1D,0x73,0x7D,0x6D,0x20,0x01,0xFD, ++0x2F,0x10,0x54,0x8C,0x5C,0x29,0xCB,0x95, ++0x23,0x57,0x90,0x45,0xE8,0xDA,0x61,0x3B, ++0x0F,0x3A,0x3F,0x4E,0xFE,0xD8,0x6D,0x4A, ++0x2C,0x8E,0xD9,0x99,0x63,0x6F,0xAE,0x2A, ++0x07,0xAF,0x64,0x5E,0x5E,0xD1,0x2B,0x8F, ++0x27,0x36,0x9F,0x74,0x1F,0x4D,0x92,0xE5, ++0x2F,0xF6,0x03,0x83,0x49,0x45,0xB8,0xE1, ++0x2A,0x33,0x8D,0x79,0xE5,0x4C,0x57,0xB8, ++0x07,0x21,0x18,0xCE,0x7C,0x43,0xE9,0xA7, ++0x2F,0x67,0xD2,0x76,0x7D,0xA1,0x62,0x6F, ++0x27,0x24,0xF2,0x63,0x2E,0x10,0x17,0x4A, ++0x27,0x07,0xA3,0x98,0x17,0x12,0xBA,0xA9, ++0x2F,0xD9,0x20,0xC6,0xB6,0xE2,0x8F,0x7F, ++0x07,0x78,0xD8,0xDB,0x8D,0x00,0x7D,0xB9, ++0x24,0xB9,0x06,0xE1,0x65,0xD5,0x84,0x7F, ++0x07,0x91,0xF3,0xB0,0xBD,0x97,0xF2,0x11, ++0x27,0x86,0xB1,0xDA,0x39,0xD1,0x49,0xEB, ++0x27,0x6A,0x84,0xBA,0xA8,0xB3,0x8C,0xDB, ++0x2E,0xC5,0x00,0xEF,0xE6,0x22,0x64,0xBD, ++0x0F,0x87,0xA3,0xE6,0x13,0x2A,0xB8,0x14, ++0x27,0x1C,0xCF,0xBF,0xB6,0x4E,0xAB,0x5D, ++0x2F,0x7A,0x4C,0x42,0xA4,0x6A,0xF5,0x13, ++0x27,0xC0,0x13,0x0F,0xDC,0xB0,0x51,0x6D, ++0x27,0x09,0xF9,0x9E,0x51,0x83,0xD7,0x67, ++0x27,0xE8,0xB9,0x50,0xC1,0x6A,0xE9,0x22, ++0x27,0xA0,0xAE,0xD2,0xCC,0xF1,0x56,0x68, ++0x2F,0x2B,0xAF,0x8D,0x83,0x9E,0xEE,0x50, ++0x23,0x78,0xDA,0x1C,0x2B,0x6C,0xE2,0x68, ++0x07,0x1A,0xA3,0xDE,0xB7,0x6E,0xE7,0xA2, ++0x27,0xAC,0x79,0x08,0x55,0xE5,0xEC,0x39, ++0x2D,0x60,0xE7,0xC8,0xE1,0x18,0xA0,0xDA, ++0x07,0x34,0xCA,0x2C,0x16,0x14,0x4A,0x74, ++0x2F,0xB7,0xBA,0xDD,0xC7,0x2C,0x43,0x48, ++0x27,0x28,0x9B,0xDE,0xEF,0xA4,0x8D,0x94, ++0x27,0x80,0x0D,0x14,0x5C,0xA2,0xCC,0x70, ++0x27,0xA2,0x07,0xDD,0x03,0x97,0xE0,0x63, ++0x2F,0x2C,0x38,0xFB,0x20,0x21,0x64,0x69, ++0x2F,0x37,0xA4,0xAA,0xBA,0xF9,0x8C,0x78, ++0x2F,0x35,0x63,0xDE,0xD1,0xD6,0x84,0x71, ++0x27,0xEE,0xE2,0x23,0x4C,0x20,0xDB,0x53, ++0x2F,0xB3,0x6A,0xE4,0xC7,0x71,0xFB,0x53, ++0x2F,0x16,0x5E,0x11,0xB9,0xF7,0xE8,0x0B, ++0x27,0x98,0x17,0xC5,0xD3,0x8F,0xC3,0x39, ++0x27,0xF5,0x06,0x39,0xB0,0x50,0x6A,0xDB, ++0x27,0xBE,0xF8,0x42,0x93,0x51,0x19,0x6F, ++0x27,0x00,0xCF,0x74,0x96,0x21,0x91,0xDD, ++0x2F,0x82,0x97,0x2A,0xBB,0xA8,0x0D,0xA6, ++0x27,0x39,0xD5,0x4E,0xC3,0x97,0xF1,0xAB, ++0x2F,0x75,0x6C,0x20,0xDE,0x7C,0xB8,0x97, ++0x2F,0x1F,0xD6,0x2D,0xFC,0x70,0xB3,0x08, ++0x26,0x23,0x43,0x60,0xF7,0xF5,0x91,0x7A, ++0x0F,0x12,0xBE,0x3D,0x51,0x14,0x53,0x0C, ++0x27,0x4A,0xDC,0x9D,0x6B,0x63,0x1A,0x5B, ++0x27,0x62,0x05,0x68,0x14,0x9B,0xE3,0x13, ++0x27,0xFF,0xB6,0x79,0xDF,0x55,0x05,0xAA, ++0x2F,0xCC,0x94,0x33,0x7B,0xCA,0x0E,0x49, ++0x24,0x85,0xBA,0xD5,0xD6,0x5F,0x0C,0x20, ++0x0F,0x44,0x4F,0x52,0x6B,0x8F,0x73,0xD6, ++0x2F,0x75,0x64,0x75,0x52,0x17,0x4C,0xCC, ++0x27,0x12,0xB1,0x3A,0xEB,0x81,0x3C,0x46, ++0x27,0x52,0x35,0x4E,0x52,0xFA,0x72,0xD0, ++0x27,0x84,0xF0,0xD7,0xAA,0x81,0xB3,0xFC, ++0x27,0x1F,0xB5,0x86,0x25,0xA4,0x9B,0xA7, ++0x2F,0xFC,0xF2,0x7A,0x1B,0x89,0x13,0x4A, ++0x27,0xA5,0xE0,0x49,0xC7,0x6D,0xCC,0xA8, ++0x2F,0x78,0x20,0x19,0xA6,0x25,0xE4,0x90, ++0x27,0xBC,0xCA,0x71,0xCE,0xE1,0x76,0xD9, ++0x27,0xC1,0x3B,0xD8,0xB8,0x0E,0xA7,0xA1, ++0x2F,0x95,0xC1,0x05,0xBA,0x19,0x30,0x3F, ++0x2F,0xF6,0x82,0x8D,0x35,0xAD,0xD0,0xE6, ++0x07,0xC7,0x23,0x87,0x9C,0x04,0xBA,0xCD, ++0x27,0x67,0x8E,0xFB,0x52,0x3D,0x4C,0xF6, ++0x2D,0x15,0x62,0xFA,0xFD,0x11,0x06,0x01, ++0x0F,0x85,0x29,0x3A,0x04,0x22,0x12,0x22, ++0x24,0x34,0x91,0xA7,0xE9,0x7F,0xBA,0x2E, ++0x0F,0x1D,0x72,0x5A,0x51,0xF3,0xF1,0x5F, ++0x07,0xB0,0xA3,0x13,0x64,0x73,0x58,0x8C, ++0x2F,0xEA,0xFB,0xA1,0x23,0x47,0xCE,0x64, ++0x27,0xF8,0xCD,0xC8,0xFE,0xB2,0x03,0xFC, ++0x26,0xDA,0x67,0xCF,0xE5,0x06,0xBF,0xBA, ++0x0F,0xEB,0xE8,0x61,0x08,0x2E,0xC6,0x7B, ++0x07,0x81,0x4E,0xD3,0x80,0xEC,0x32,0x0A, ++0x27,0x20,0x31,0x87,0x71,0xF3,0xC0,0x1C, ++0x2F,0xD3,0x85,0x67,0x86,0xE7,0x32,0x8B, ++0x26,0xEA,0xB4,0x19,0x1B,0xAE,0x32,0xCB, ++0x07,0xB5,0x08,0x3C,0xF3,0xEA,0xB1,0xE1, ++0x2F,0x4B,0x8B,0x3F,0x5A,0x7A,0xDA,0x3B, ++0x2F,0x43,0x31,0xBF,0xC1,0x5B,0x97,0x9A, ++0x2F,0xD6,0xBF,0xF3,0xCD,0x47,0x88,0x59, ++0x27,0x48,0xD7,0x6E,0x8B,0x12,0xE8,0xB8, ++0x2F,0x8C,0xE4,0xE9,0x43,0xB1,0x86,0x87, ++0x2F,0x0E,0x63,0xBB,0x6B,0x28,0xEB,0x0C, ++0x2F,0x95,0x57,0x77,0x8D,0x96,0x2E,0x8A, ++0x2F,0x85,0x9A,0xED,0x67,0xCC,0x09,0xA5, ++0x2F,0xE8,0xC9,0xB6,0x79,0x60,0xD8,0x16, ++0x2F,0xC0,0x25,0x41,0xB3,0x2C,0x1C,0xBC, ++0x27,0xB6,0xA5,0xF4,0xDE,0xBC,0x92,0xB5, ++0x27,0x1E,0x9D,0x79,0x88,0xC1,0xA7,0xF5, ++0x27,0xD6,0x22,0x60,0xBC,0xBE,0x6E,0x44, ++0x21,0x1A,0xDD,0xDD,0x55,0xA1,0x95,0xCC, ++0x07,0x55,0x16,0xCE,0xCA,0x37,0xBC,0x04, ++0x24,0xC3,0x77,0xB3,0x67,0xC5,0x3E,0x5A, ++0x0F,0x38,0x81,0x6F,0xD0,0xE1,0x09,0x95, ++0x27,0x28,0x10,0x62,0xC0,0x5D,0x65,0x7B, ++0x21,0x91,0xCE,0x38,0x74,0x9C,0xBA,0xEF, ++0x07,0x36,0x9A,0x7C,0xE3,0x78,0xB7,0x51, ++0x2F,0x69,0x4B,0x74,0x9A,0x00,0x2F,0x6C, ++0x21,0x73,0xEB,0x72,0xA1,0xA9,0x32,0x3C, ++0x0F,0x83,0x6C,0x5D,0xBE,0x9D,0xF2,0x2D, ++0x07,0x2C,0xA1,0xB7,0x6B,0xFD,0x49,0x85, ++0x0F,0x8A,0x0A,0xBB,0xF8,0x79,0xDD,0x3C, ++0x27,0xA8,0x7D,0xFE,0xE5,0xFF,0x17,0x9D, ++0x27,0x72,0x30,0x69,0xEE,0x38,0x22,0xD0, ++0x2F,0x31,0xB0,0x36,0x7A,0x46,0x03,0x4D, ++0x2F,0x6E,0xDF,0x01,0xE3,0xA7,0xEE,0x75, ++0x27,0x22,0x2C,0x84,0xD7,0xF3,0x5E,0x99, ++0x29,0x36,0x8B,0x22,0xB7,0x54,0x7E,0xC5, ++0x0F,0xCF,0xE4,0x67,0xBC,0x82,0x1C,0x06, ++0x2F,0x9D,0x94,0x61,0x6E,0x36,0xBF,0xB1, ++0x2D,0x65,0xC2,0xEF,0xE8,0x7B,0x93,0xB8, ++0x07,0x15,0x5B,0x4E,0x6A,0xE3,0x91,0x48, ++0x24,0xC0,0x18,0x87,0x01,0x29,0x35,0x4D, ++0x07,0x2E,0x36,0x94,0x68,0x6A,0x9B,0x65, ++0x27,0x25,0x78,0xB5,0x99,0xF3,0x04,0x63, ++0x2F,0x0A,0x46,0x1D,0x61,0x63,0x2B,0xEC, ++0x27,0xD4,0x3A,0xBD,0x97,0xC9,0xDC,0xC2, ++0x27,0x1E,0x33,0xA0,0x0B,0x03,0x1F,0x96, ++0x27,0x94,0xD5,0x45,0x43,0x3E,0x33,0xCA, ++0x29,0x54,0xA6,0xA8,0xBD,0x1A,0x81,0x03, ++0x07,0x13,0x39,0xE5,0x9F,0x7B,0x58,0x6F, ++0x2F,0x47,0x08,0xFD,0x40,0xA0,0x6A,0xA9, ++0x2F,0x79,0xD0,0x99,0x07,0x4D,0xF5,0x58, ++0x2A,0x5B,0x94,0xBC,0x68,0x9F,0xAD,0x4B, ++0x07,0xBD,0xE3,0xF4,0xF0,0x32,0x2A,0xA3, ++0x24,0xB5,0xB6,0x34,0x81,0x09,0x69,0x84, ++0x0F,0xCF,0x2D,0xF0,0x71,0xBA,0xBE,0x93, ++0x2F,0x80,0xEC,0x9C,0xCF,0xAF,0x3A,0x1D, ++0x27,0x0B,0x0B,0x75,0x82,0x27,0xF7,0x98, ++0x27,0x4A,0xB2,0xAF,0x43,0x60,0xEE,0x0E, ++0x2F,0x13,0xFC,0xF0,0xD0,0xD6,0x20,0xF0, ++0x2F,0x1B,0xED,0x7A,0xFF,0x9D,0x57,0x07, ++0x29,0xE2,0x14,0x4E,0x63,0x79,0xD8,0xE8, ++0x0F,0x6B,0x95,0x4D,0xB3,0xB3,0x2A,0xB2, ++0x2F,0x65,0xCA,0xE9,0xBF,0xC5,0xE1,0xAE, ++0x29,0x9A,0x4B,0xFA,0x03,0xE8,0xA4,0x56, ++0x07,0x4D,0xDF,0x12,0xD4,0x7C,0x12,0xB4, ++0x2F,0x1B,0x42,0x92,0xC1,0x5E,0x9D,0xC9, ++0x27,0x32,0x4E,0xBA,0xC7,0xBF,0xC6,0xE0, ++0x2F,0xE9,0x64,0x85,0x93,0xEB,0x9C,0x22, ++0x2B,0x20,0xAD,0x1A,0xA1,0x66,0xDE,0x0A, ++0x07,0xBD,0x5A,0xE1,0x32,0xEE,0xC0,0x3F, ++0x2F,0x34,0x99,0x8B,0xD6,0x81,0x73,0xDA, ++0x27,0x3F,0xBD,0x47,0xFC,0xDA,0xBC,0x36, ++0x26,0x56,0xEF,0x4B,0x0A,0x46,0x61,0xD5, ++0x0F,0x4C,0x7E,0x29,0x50,0x70,0xBE,0x15, ++0x2F,0x0F,0x8E,0x5D,0xA0,0x08,0xED,0x8E, ++0x2D,0x94,0xB7,0xE9,0x2A,0x1C,0x55,0x27, ++0x0F,0xD6,0x14,0x0A,0xF6,0x64,0xC4,0x27, ++0x27,0xBE,0xAA,0x1C,0xA9,0x36,0x66,0x9A, ++0x27,0xC1,0x49,0x03,0x67,0xB9,0x83,0xE0, ++0x2F,0x90,0xD4,0x9F,0x65,0x92,0x76,0xCB, ++0x2F,0x20,0x08,0x94,0x71,0x9B,0x0E,0xA7, ++0x2F,0xB4,0xB7,0x81,0xFF,0x96,0x5B,0x45, ++0x2F,0x77,0xD4,0xCF,0xC7,0x54,0x4E,0x6C, ++0x2F,0xB6,0xE9,0xA3,0x60,0x8B,0x2B,0x42, ++0x2F,0x1A,0x11,0xFA,0xFB,0x9F,0xC9,0xCC, ++0x2C,0xD4,0x33,0xFE,0xFF,0xCF,0x28,0x14, ++0x07,0x03,0xDE,0xD0,0x9A,0xD3,0xFE,0x2E, ++0x27,0xBD,0x3E,0x64,0x02,0x7B,0xA9,0x15, ++0x2F,0xE3,0x1A,0x3F,0x3B,0xC4,0x7E,0x57, ++0x27,0x25,0xAC,0xD5,0xEC,0x98,0xEC,0x7D, ++0x27,0xFC,0xB9,0x50,0x66,0x70,0x33,0xF8, ++0x07,0x02,0x6A,0xA7,0x04,0x0B,0x55,0xE3, ++0x07,0x9A,0xB9,0x15,0xE7,0x30,0x74,0x78, ++0x2F,0xDD,0x98,0x57,0x5F,0x0F,0xF5,0xFB, ++0x27,0x4E,0x85,0x22,0xED,0x29,0x3F,0x94, ++0x2F,0xB3,0xE8,0xC9,0x5E,0x4C,0x4E,0x78, ++0x2F,0x27,0xB7,0x13,0x35,0x9E,0x6F,0xC8, ++0x0F,0x15,0x36,0x73,0x12,0x1C,0x62,0xFD, ++0x27,0xFD,0x39,0xF3,0xE0,0xFD,0xCB,0x20, ++0x2F,0xC6,0x2F,0xA1,0xE5,0x4A,0x36,0x16, ++0x2F,0x2B,0x8A,0xE7,0xCC,0xFA,0xCC,0xB4, ++0x27,0x58,0x72,0x45,0xE1,0x07,0x1F,0x82, ++0x2F,0x1D,0x4B,0xCC,0x81,0xED,0xB1,0x6C, ++0x2F,0x88,0x59,0x42,0xB2,0x25,0x58,0x9A, ++0x2F,0x6C,0x0A,0xC4,0x00,0x0D,0xDE,0x83, ++0x2B,0x9D,0x3B,0xE0,0x8E,0x37,0x71,0xCB, ++0x0F,0x01,0xBB,0x9D,0x6A,0x4D,0xBA,0x68, ++0x27,0x21,0x49,0xB6,0xB3,0x86,0xCF,0xD2, ++0x27,0x4D,0x7B,0x51,0xA7,0x6A,0x5D,0xD5, ++0x2F,0x61,0xB1,0x07,0xE7,0xD7,0x8E,0x29, ++0x27,0xD6,0x00,0xFF,0xBA,0x45,0x58,0xFC, ++0x2F,0xE3,0x34,0xEB,0x17,0xFB,0x7A,0x42, ++0x2D,0x1F,0x38,0x09,0xC0,0x37,0x05,0x7E, ++0x07,0x73,0xAC,0xB3,0x33,0xAF,0xF3,0x0E, ++0x24,0x25,0x7F,0x4F,0xDC,0xBE,0xCA,0x76, ++0x07,0xDC,0xA5,0x28,0x73,0xBA,0x35,0xEC, ++0x27,0x11,0x32,0xBE,0xDA,0xBB,0xDB,0x63, ++0x21,0x4A,0x13,0x92,0x2B,0xD3,0x23,0x4E, ++0x0F,0x22,0x95,0x6C,0xDE,0xB6,0x42,0x72, ++0x27,0x77,0x5D,0x4B,0xF9,0xAA,0x68,0xCF, ++0x27,0xD6,0x06,0x84,0x98,0xEE,0xC9,0xA2, ++0x27,0x6D,0xA3,0xC0,0x1F,0x00,0xCB,0xB3, ++0x2F,0x8D,0x02,0xD3,0xA1,0xA0,0x2E,0x74, ++0x27,0x9B,0x51,0x74,0xC7,0x7D,0x0B,0x30, ++0x2F,0x95,0xFB,0x41,0x43,0x98,0xBD,0xD7, ++0x27,0x77,0xE7,0x3C,0xF1,0x2F,0x25,0x21, ++0x2F,0x0A,0x13,0xD2,0xAD,0x38,0xE1,0xAD, ++0x27,0x6D,0xC8,0x7B,0xA4,0xFD,0x27,0xC6, ++0x2F,0xAE,0xE6,0x4A,0x0E,0x1D,0x73,0xB2, ++0x2F,0xD6,0xBE,0x68,0x42,0x82,0x97,0x73, ++0x27,0xFF,0x9B,0xD6,0x14,0xC3,0xE4,0xF0, ++0x24,0xC6,0x3C,0xF7,0x5E,0x57,0xB6,0x87, ++0x07,0x5B,0xDC,0x42,0x35,0x25,0x10,0x27, ++0x27,0xEF,0x4E,0x93,0xA2,0x03,0x73,0x26, ++0x27,0xC6,0x51,0xB2,0x6C,0x4A,0x65,0x84, ++0x27,0x0A,0xB0,0xB3,0x6E,0xA0,0x04,0xF0, ++0x2F,0xCD,0x15,0x68,0x4D,0xA8,0x38,0xA9, ++0x27,0x5D,0xB1,0xB2,0x61,0x29,0x9C,0xFE, ++0x2F,0x11,0x9D,0xA8,0x3F,0xDD,0xCE,0x68, ++0x2E,0x0B,0xE0,0x4E,0x7A,0x8E,0x6D,0x73, ++0x07,0x64,0x10,0x66,0x4E,0x30,0x43,0x34, ++0x2C,0x5B,0x4E,0xAC,0x43,0x44,0xBF,0x4D, ++0x07,0x4F,0xD2,0x40,0x5A,0x1C,0x5F,0xDA, ++0x2F,0x8E,0x10,0xE9,0x45,0xD2,0xA5,0xDF, ++0x25,0x1A,0x4E,0x84,0xF4,0x91,0xB6,0xB8, ++0x07,0x3A,0xE6,0x8B,0xBC,0xC5,0x08,0x73, ++0x2F,0xCA,0xC8,0xFD,0x07,0x39,0xBF,0x19, ++0x27,0x08,0xEA,0xE0,0x2C,0x0F,0x5D,0x0E, ++0x2F,0x7E,0x4A,0x5B,0x61,0xB9,0x16,0x8B, ++0x2F,0xC6,0x75,0x6D,0xE1,0xEC,0x21,0x59, ++0x07,0xF1,0x85,0xE5,0xB0,0x53,0xBA,0xA5, ++0x27,0x2F,0x60,0x72,0x26,0x03,0x85,0xE3, ++0x2F,0x64,0xC6,0xC7,0x41,0xB1,0xEB,0xCF, ++0x2F,0xE1,0xF4,0x75,0x0B,0x43,0x90,0x8D, ++0x27,0xDB,0x73,0x15,0xE3,0x1F,0xFF,0x66, ++0x27,0x6D,0x0D,0x48,0x50,0x67,0x40,0x15, ++0x2F,0xC5,0x96,0x2E,0x4F,0x17,0x0F,0x80, ++0x26,0xB6,0x94,0x3E,0xA6,0x02,0x77,0x79, ++0x0F,0x9E,0x06,0xBC,0xB3,0xD3,0x69,0x77, ++0x2F,0xA9,0x96,0x04,0xA5,0x3C,0xCD,0x33, ++0x2F,0xE9,0x2E,0xA1,0x84,0xB1,0x7E,0x21, ++0x27,0x3B,0xE9,0x9D,0xAD,0x5A,0xCE,0xA6, ++0x2F,0x9F,0x18,0x15,0xF3,0xC7,0x48,0xDA, ++0x0F,0x22,0x63,0x1F,0xDF,0x66,0x50,0x05, ++0x2F,0x06,0xB1,0xDD,0x27,0x3A,0x95,0x92, ++0x2F,0xAD,0x99,0xA5,0x51,0x96,0x27,0x4F, ++0x2F,0x11,0xE1,0x67,0xA2,0x21,0xD0,0x55, ++0x2F,0xA2,0xD3,0x8F,0xFB,0x1E,0xBF,0x7D, ++0x27,0xC4,0xC9,0x33,0xB6,0xF5,0x14,0x6B, ++0x27,0xEB,0x26,0x92,0x03,0x40,0x3F,0x66, ++0x2F,0x45,0x0E,0x96,0xC2,0xB2,0xFE,0x41, ++0x2F,0x05,0xD9,0xBD,0x85,0x7B,0x7F,0x40, ++0x2F,0x83,0x44,0x2A,0xFE,0x49,0x94,0x10, ++0x27,0xBC,0xC6,0x88,0xD3,0x6D,0xAC,0x39, ++0x2F,0x60,0x23,0xA4,0x8A,0x2C,0x21,0xCD, ++0x2F,0x4E,0xDF,0xFB,0xD0,0x4B,0xC8,0x8B, ++0x27,0x65,0x9F,0x8E,0x25,0xBB,0x6A,0x42, ++0x2F,0xF4,0xE6,0x03,0x0E,0x77,0x1B,0x5F, ++0x27,0x5A,0x5D,0xDD,0x56,0xEB,0xE4,0xC6, ++0x2F,0x44,0x3C,0x69,0x6E,0x07,0x09,0x2C, ++0x07,0xD2,0x8E,0x9D,0xBF,0x5B,0xB2,0x5C, ++0x2F,0x96,0xF4,0x18,0xC5,0xCC,0xCA,0x64, ++0x2F,0xE9,0x84,0x2C,0x9C,0x41,0xB8,0xD8, ++0x27,0x10,0xA3,0x16,0xD0,0x60,0xBD,0xAA, ++0x2F,0x7B,0x4E,0xA5,0x73,0x8D,0x75,0x33, ++0x2F,0x66,0x68,0xCF,0xFF,0x1B,0x2F,0x8A, ++0x27,0x23,0x67,0xEE,0x56,0xD1,0x25,0x27, ++0x2F,0x5D,0xBF,0xDF,0x3D,0xD6,0x76,0x35, ++0x2F,0x8C,0x4C,0xC1,0x36,0xEA,0xC4,0x79, ++0x2F,0x20,0x30,0x57,0x81,0x58,0x56,0xDA, ++0x27,0x20,0x8C,0x3B,0x55,0x03,0x5E,0xAB, ++0x2F,0x68,0xA0,0x57,0x29,0x34,0x98,0xCA, ++0x2F,0xD5,0x53,0xB6,0x36,0xA5,0x54,0x08, ++0x2F,0x32,0x48,0xB0,0x95,0x29,0x16,0xE4, ++0x27,0x59,0x98,0x37,0x87,0x65,0xCC,0x66, ++0x27,0x6E,0x3A,0x2F,0x7A,0x4D,0x99,0xB6, ++0x27,0x1D,0x69,0x3B,0x6D,0xFE,0xD8,0x38, ++0x2F,0xB3,0x7F,0xD9,0x95,0x9D,0x87,0xF1, ++0x2D,0x7A,0x93,0x1A,0x44,0xEA,0xA3,0x38, ++0x0F,0x4E,0xDA,0x0E,0xFB,0xC4,0x46,0x52, ++0x27,0x55,0x75,0x78,0x86,0x9B,0x5A,0x67, ++0x2F,0x61,0x4B,0x3E,0xE5,0xC2,0xCC,0x08, ++0x27,0x87,0x07,0xB0,0x49,0xC5,0x0A,0x48, ++0x27,0xFE,0x72,0x4E,0xA6,0xB4,0x21,0x50, ++0x2F,0x7C,0x97,0x56,0x51,0x2A,0xA8,0xED, ++0x25,0x56,0xB4,0xEF,0x78,0xDF,0x89,0x3C, ++0x07,0xFA,0xCC,0x03,0x88,0xAB,0xDD,0x10, ++0x27,0xB6,0xD1,0x58,0xC4,0xD3,0x25,0x21, ++0x2F,0x2A,0x7E,0x99,0xEA,0x7C,0x13,0x5A, ++0x27,0xD9,0xAB,0x37,0x08,0x11,0xDE,0x37, ++0x2F,0x7B,0x0B,0x68,0xC5,0x56,0x72,0xC6, ++0x27,0xCA,0x9E,0x49,0x80,0xC7,0x48,0xB2, ++0x27,0xEE,0x3D,0x0F,0x49,0xB9,0x2D,0xBA, ++0x27,0x29,0x97,0x69,0xB4,0xAB,0x03,0xF2, ++0x2F,0x87,0x96,0x42,0xD2,0xE6,0xB3,0x04, ++0x2F,0xF4,0xE4,0xB4,0x22,0xD9,0xA4,0x88, ++0x2F,0x2E,0x23,0x23,0xAF,0x58,0xD0,0x3E, ++0x2F,0x21,0x20,0xE0,0x21,0x9A,0x77,0x2B, ++0x2F,0x7B,0x13,0x00,0x83,0x29,0x82,0x9B, ++0x27,0x47,0x45,0x91,0x98,0x48,0xC3,0x34, ++0x2F,0xA0,0x13,0x04,0x3E,0xAD,0x3E,0xA3, ++0x2F,0xCC,0xD7,0x12,0xB2,0xA8,0xC8,0x14, ++0x2F,0x67,0x2C,0x8C,0x9E,0xDF,0xCD,0x61, ++0x27,0x33,0x6D,0xFC,0x46,0xAC,0xA7,0xD1, ++0x2F,0x64,0x73,0xCC,0x7C,0x5E,0x76,0x64, ++0x2F,0xD5,0x81,0x43,0x78,0xB5,0xC1,0x5D, ++0x2F,0x03,0xC1,0xFF,0x58,0x6E,0x66,0x2A, ++0x27,0x64,0x9F,0x0D,0x74,0xD5,0x7A,0xCE, ++0x2F,0x45,0x68,0xE3,0xA1,0x40,0x6F,0x83, ++0x27,0x5C,0x16,0xFE,0x24,0x43,0x59,0xA5, ++0x2F,0x86,0x23,0x13,0xE9,0xF2,0xD0,0x73, ++0x27,0x95,0xA5,0x2E,0x8F,0x37,0x35,0x09, ++0x2F,0x78,0xB1,0xD9,0x32,0x54,0x4D,0x6D, ++0x27,0x62,0x2D,0x28,0x12,0xB3,0x3C,0x24, ++0x2F,0x2C,0xA5,0x43,0xAB,0x37,0xFF,0x2A, ++0x27,0x8D,0x15,0x99,0x12,0x4C,0xC3,0x6F, ++0x27,0xF1,0x4D,0x31,0x7F,0xC5,0x81,0xF8, ++0x2F,0x15,0xB8,0x31,0xCA,0xF6,0x50,0x7B, ++0x2F,0xB2,0xD4,0xCB,0xB5,0xD9,0x22,0xE3, ++0x24,0xE4,0xBB,0x69,0x75,0x97,0xF8,0x87, ++0x07,0x31,0xC4,0xF1,0xAD,0xDC,0xD6,0xF7, ++0x27,0xD3,0x60,0xF3,0x00,0x13,0x44,0xD4, ++0x2F,0xAC,0xB0,0x3C,0x18,0x4B,0x39,0x95, ++0x2F,0xF4,0x97,0x4F,0x48,0x7C,0xAF,0x30, ++0x2F,0xA6,0x3F,0x38,0x57,0xBF,0x09,0xD7, ++0x27,0xC5,0x4A,0x25,0x53,0x05,0x6D,0xB8, ++0x2F,0x33,0x07,0xDE,0x5D,0xFB,0xF4,0x71, ++0x2F,0xFC,0x38,0x2D,0x5B,0x85,0x17,0x2B, ++0x27,0xD4,0xC8,0xB6,0x98,0x8F,0x22,0x82, ++0x27,0x51,0x8A,0xCC,0xF1,0xA1,0xE1,0x5F, ++0x2F,0x6E,0xFE,0xCE,0x4C,0x49,0x7A,0x6A, ++0x2E,0x58,0x6E,0x2F,0x0A,0x08,0xB3,0x53, ++0x0F,0x9E,0x21,0xAB,0x87,0xDF,0x94,0x51, ++0x07,0x52,0x54,0x60,0xC2,0x7B,0x11,0xB1, ++0x2C,0xA9,0x58,0x5E,0xF5,0x95,0x3D,0x67, ++0x07,0xDE,0xE4,0x4B,0xC4,0x13,0x2A,0x73, ++0x0F,0x49,0xFA,0x57,0x78,0xB6,0x7E,0x7E, ++0x2F,0x5D,0x71,0x54,0xA1,0x29,0x70,0x7F, ++0x27,0xCA,0x08,0x67,0xD9,0xD1,0x0F,0x42, ++0x2F,0x84,0x94,0xC0,0xA7,0xCA,0xE2,0xF5, ++0x2F,0x2E,0x12,0x84,0x07,0xE7,0xCD,0x4C, ++0x24,0xAB,0x05,0x1E,0x6A,0xA3,0xFD,0xA1, ++0x0F,0x53,0x9D,0xA9,0x39,0xBC,0x8C,0x04, ++0x27,0x99,0xD5,0x3C,0x71,0xCC,0xA9,0xC0, ++0x21,0xE4,0x41,0x7D,0xDB,0xAE,0x91,0x32, ++0x07,0x86,0x23,0xB0,0xDB,0x27,0xC3,0xFC, ++0x2F,0x34,0x70,0xD3,0xE3,0xB1,0x80,0x54, ++0x21,0xBF,0x0A,0xE0,0xD2,0x43,0x90,0x43, ++0x0F,0xD8,0xDB,0x8C,0x74,0x54,0xD4,0x9D, ++0x27,0xFA,0x89,0x5A,0x8C,0x77,0x3A,0x6F, ++0x2F,0x37,0xEF,0xAD,0x43,0xAB,0x91,0x9C, ++0x27,0xFD,0x8A,0xF1,0x4E,0x52,0x17,0x7C, ++0x2F,0xCE,0x72,0xE5,0xC5,0x9E,0x1E,0x9D, ++0x07,0xA4,0xBC,0x04,0xA6,0xDF,0xEB,0x83, ++0x2F,0x2E,0x87,0x7D,0x1F,0xE5,0x59,0x01, ++0x27,0xD2,0x58,0x62,0x7A,0x9B,0x07,0xC3, ++0x2F,0x5E,0x14,0xEA,0x1B,0x1F,0x98,0xD2, ++0x27,0x6A,0x9D,0xD1,0xCF,0xC8,0x8D,0xF3, ++0x27,0xA5,0x96,0xEB,0x18,0x76,0xC5,0xE9, ++0x2F,0x22,0xB3,0x95,0x59,0xA4,0x38,0xCE, ++0x27,0x91,0xAE,0x73,0xD6,0x43,0x93,0xCE, ++0x27,0xE4,0xA5,0xDB,0xAC,0x8D,0x85,0x60, ++0x27,0x08,0x23,0x57,0x0E,0xC6,0x09,0xA5, ++0x27,0xDA,0x73,0xC0,0x81,0x65,0xBB,0xCD, ++0x2F,0x04,0x81,0x81,0x4C,0xBA,0x63,0xEA, ++0x27,0x6B,0xB9,0xEF,0x65,0x4E,0x54,0x98, ++0x2F,0x2F,0xD0,0x97,0xE8,0x4C,0x3D,0xE3, ++0x27,0xFA,0xD8,0xA2,0x8E,0x3D,0xE4,0x84, ++0x27,0x59,0xDC,0x53,0x92,0x96,0xAB,0xD0, ++0x27,0xCB,0x46,0x67,0xAC,0x85,0x08,0xD3, ++0x2F,0x6B,0x38,0x6F,0x42,0x4D,0x8B,0x19, ++0x2F,0x3E,0x50,0x48,0x0D,0x63,0xD8,0x72, ++0x2F,0x67,0x31,0x42,0x64,0xEE,0xB6,0x72, ++0x27,0xC2,0x1B,0x9C,0x43,0xC9,0xC4,0x0D, ++0x2C,0xC4,0x75,0xC2,0x09,0xA0,0x90,0xD1, ++0x07,0x2C,0x94,0xCD,0x80,0xF0,0x6C,0xCF, ++0x27,0xEC,0xDF,0xCA,0x03,0xDD,0xC6,0x8A, ++0x27,0xBC,0xBA,0xD1,0x49,0xE9,0x13,0xC8, ++0x2F,0x38,0x4A,0x10,0x96,0xFA,0x43,0x31, ++0x27,0x40,0x1E,0xE9,0xA2,0xFB,0x36,0x23, ++0x27,0xE2,0x5F,0x1B,0xB6,0xC2,0xCD,0xF1, ++0x27,0x90,0xD7,0x01,0x8F,0x00,0x17,0xE4, ++0x2F,0x10,0x49,0xF2,0x02,0xEC,0xC6,0x10, ++0x27,0x56,0xB7,0xBE,0xA7,0xC3,0xB4,0x1D, ++0x2C,0x96,0xFA,0x25,0xC9,0xD1,0xEA,0x14, ++0x07,0x9A,0x89,0xA1,0x99,0x28,0xA2,0x1C, ++0x05,0xAB,0xF5,0x09,0x42,0xBE,0xFF,0x77, ++0x27,0x9B,0xFA,0xC3,0xA2,0x81,0x6F,0xEC, ++0x2D,0x69,0x00,0xA4,0xD1,0x6E,0xFD,0x2E, ++0x05,0x52,0xF8,0xBB,0x50,0x33,0xB7,0x3E ++}; ++ ++#define SIT2_PATCH_PER_LINE 8 ++#define SIT2_PATCH_2_SIZE (sizeof(sit2_patch_2)) ++#define SIT2_PATCH_3_SIZE (sizeof(sit2_patch_3)) ++ ++#endif /* SIT2_PRIV_H */ diff -urN a/drivers/media/pci/cx23885/cimax2.c b/drivers/media/pci/cx23885/cimax2.c --- a/drivers/media/pci/cx23885/cimax2.c 2013-04-29 08:36:01.000000000 +0800 +++ b/drivers/media/pci/cx23885/cimax2.c 2013-03-31 22:03:29.000000000 +0800 @@ -4445,8 +8012,8 @@ diff -urN a/drivers/media/pci/cx23885/cimax2.h b/drivers/media/pci/cx23885/cimax #endif diff -urN a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx23885/cx23885-cards.c --- a/drivers/media/pci/cx23885/cx23885-cards.c 2013-04-29 08:36:01.000000000 +0800 -+++ b/drivers/media/pci/cx23885/cx23885-cards.c 2013-05-03 17:34:46.000000000 +0800 -@@ -569,6 +569,34 @@ ++++ b/drivers/media/pci/cx23885/cx23885-cards.c 2013-05-06 21:28:13.000000000 +0800 +@@ -569,6 +569,39 @@ .name = "TeVii S471", .portb = CX23885_MPEG_DVB, }, @@ -4478,10 +8045,15 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx2388 + .portb = CX23885_MPEG_DVB, + .portc = CX23885_MPEG_DVB, + }, ++ [CX23885_BOARD_DVBSKY_T980_CI] = { ++ .ci_type = 3, ++ .name = "DVBSKY T980CI DVB-T2/C CI", ++ .portb = CX23885_MPEG_DVB, ++ }, [CX23885_BOARD_PROF_8000] = { .name = "Prof Revolution DVB-S2 8000", .portb = CX23885_MPEG_DVB, -@@ -605,7 +633,7 @@ +@@ -605,7 +638,7 @@ CX25840_NONE1_CH3, .amux = CX25840_AUDIO6, } }, @@ -4490,7 +8062,7 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx2388 }; const unsigned int cx23885_bcount = ARRAY_SIZE(cx23885_boards); -@@ -818,6 +846,30 @@ +@@ -818,6 +851,34 @@ .subdevice = 0x9022, .card = CX23885_BOARD_TEVII_S471, }, { @@ -4517,11 +8089,15 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx2388 + .subvendor = 0x4254, + .subdevice = 0x9580, + .card = CX23885_BOARD_DVBSKY_T9580, ++ }, { ++ .subvendor = 0x4254, ++ .subdevice = 0x980C, ++ .card = CX23885_BOARD_DVBSKY_T980_CI, + }, { .subvendor = 0x8000, .subdevice = 0x3034, .card = CX23885_BOARD_PROF_8000, -@@ -1224,7 +1276,7 @@ +@@ -1224,7 +1285,7 @@ cx_set(GP0_IO, 0x00040004); break; case CX23885_BOARD_TBS_6920: @@ -4530,7 +8106,7 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx2388 cx_write(MC417_CTL, 0x00000036); cx_write(MC417_OEN, 0x00001000); cx_set(MC417_RWD, 0x00000002); -@@ -1394,9 +1446,84 @@ +@@ -1394,9 +1455,85 @@ cx_set(GP0_IO, 0x00040004); mdelay(60); break; @@ -4556,6 +8132,7 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx2388 + break; + case CX23885_BOARD_DVBSKY_S950_CI: + case CX23885_BOARD_DVBSKY_C2800E_CI: ++ case CX23885_BOARD_DVBSKY_T980_CI: + /* GPIO-0 INTA from CiMax, input + GPIO-1 reset CiMax, output, high active + GPIO-2 reset demod, output, low active @@ -4615,7 +8192,7 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx2388 int cx23885_ir_init(struct cx23885_dev *dev) { static struct v4l2_subdev_io_pin_config ir_rxtx_pin_cfg[] = { -@@ -1482,6 +1609,23 @@ +@@ -1482,6 +1619,24 @@ v4l2_subdev_call(dev->sd_cx25840, core, s_io_pin_config, ir_rx_pin_cfg_count, ir_rx_pin_cfg); break; @@ -4625,6 +8202,7 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx2388 + case CX23885_BOARD_DVBSKY_S950_CI: + case CX23885_BOARD_DVBSKY_C2800E_CI: + case CX23885_BOARD_DVBSKY_T9580: ++ case CX23885_BOARD_DVBSKY_T980_CI: + dev->sd_ir = cx23885_find_hw(dev, CX23885_HW_AV_CORE); + if (dev->sd_ir == NULL) { + ret = -ENODEV; @@ -4639,7 +8217,7 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx2388 case CX23885_BOARD_HAUPPAUGE_HVR1250: if (!enable_885_ir) break; -@@ -1511,9 +1655,15 @@ +@@ -1511,9 +1666,16 @@ cx23888_ir_remove(dev); dev->sd_ir = NULL; break; @@ -4648,7 +8226,8 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx2388 + case CX23885_BOARD_DVBSKY_S952: + case CX23885_BOARD_DVBSKY_S950_CI: + case CX23885_BOARD_DVBSKY_C2800E_CI: -+ case CX23885_BOARD_DVBSKY_T9580: ++ case CX23885_BOARD_DVBSKY_T9580: ++ case CX23885_BOARD_DVBSKY_T980_CI: case CX23885_BOARD_TERRATEC_CINERGY_T_PCIE_DUAL: case CX23885_BOARD_TEVII_S470: - case CX23885_BOARD_HAUPPAUGE_HVR1250: @@ -4656,7 +8235,7 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx2388 case CX23885_BOARD_MYGICA_X8507: cx23885_irq_remove(dev, PCI_MSK_AV_CORE); /* sd_ir is a duplicate pointer to the AV Core, just clear it */ -@@ -1556,6 +1706,12 @@ +@@ -1556,6 +1718,13 @@ if (dev->sd_ir) cx23885_irq_add_enable(dev, PCI_MSK_IR); break; @@ -4665,11 +8244,12 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx2388 + case CX23885_BOARD_DVBSKY_S952: + case CX23885_BOARD_DVBSKY_S950_CI: + case CX23885_BOARD_DVBSKY_C2800E_CI: -+ case CX23885_BOARD_DVBSKY_T9580: ++ case CX23885_BOARD_DVBSKY_T9580: ++ case CX23885_BOARD_DVBSKY_T980_CI: case CX23885_BOARD_TERRATEC_CINERGY_T_PCIE_DUAL: case CX23885_BOARD_TEVII_S470: case CX23885_BOARD_HAUPPAUGE_HVR1250: -@@ -1657,6 +1813,10 @@ +@@ -1657,6 +1826,11 @@ ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */ ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; break; @@ -4677,10 +8257,11 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx2388 + case CX23885_BOARD_DVBSKY_S950: + case CX23885_BOARD_DVBSKY_S950_CI: + case CX23885_BOARD_DVBSKY_C2800E_CI: ++ case CX23885_BOARD_DVBSKY_T980_CI: case CX23885_BOARD_TEVII_S470: case CX23885_BOARD_TEVII_S471: case CX23885_BOARD_DVBWORLD_2005: -@@ -1694,6 +1854,22 @@ +@@ -1694,6 +1868,22 @@ ts1->ts_clk_en_val = 0x1; /* Enable TS_CLK */ ts1->src_sel_val = CX23885_SRC_SEL_PARALLEL_MPEG_VIDEO; break; @@ -4703,7 +8284,7 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx2388 case CX23885_BOARD_HAUPPAUGE_HVR1250: case CX23885_BOARD_HAUPPAUGE_HVR1500: case CX23885_BOARD_HAUPPAUGE_HVR1500Q: -@@ -1749,6 +1925,12 @@ +@@ -1749,6 +1939,13 @@ case CX23885_BOARD_MPX885: case CX23885_BOARD_MYGICA_X8507: case CX23885_BOARD_TERRATEC_CINERGY_T_PCIE_DUAL: @@ -4713,12 +8294,13 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-cards.c b/drivers/media/pci/cx2388 + case CX23885_BOARD_DVBSKY_S950_CI: + case CX23885_BOARD_DVBSKY_C2800E_CI: + case CX23885_BOARD_DVBSKY_T9580: ++ case CX23885_BOARD_DVBSKY_T980_CI: case CX23885_BOARD_AVERMEDIA_HC81R: dev->sd_cx25840 = v4l2_i2c_new_subdev(&dev->v4l2_dev, &dev->i2c_bus[2].i2c_adap, diff -urN a/drivers/media/pci/cx23885/cx23885-core.c b/drivers/media/pci/cx23885/cx23885-core.c --- a/drivers/media/pci/cx23885/cx23885-core.c 2013-04-29 08:36:01.000000000 +0800 -+++ b/drivers/media/pci/cx23885/cx23885-core.c 2013-05-03 17:36:31.000000000 +0800 ++++ b/drivers/media/pci/cx23885/cx23885-core.c 2013-05-06 21:29:48.000000000 +0800 @@ -1909,6 +1909,10 @@ (pci_status & PCI_MSK_GPIO0)) handled += altera_ci_irq(dev); @@ -4730,28 +8312,30 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-core.c b/drivers/media/pci/cx23885 if (ts1_status) { if (cx23885_boards[dev->board].portb == CX23885_MPEG_DVB) handled += cx23885_irq_ts(ts1, ts1_status); -@@ -2144,6 +2148,8 @@ +@@ -2144,6 +2148,9 @@ cx23885_irq_add_enable(dev, PCI_MSK_GPIO1 | PCI_MSK_GPIO0); break; case CX23885_BOARD_NETUP_DUAL_DVB_T_C_CI_RF: + case CX23885_BOARD_DVBSKY_S950_CI: + case CX23885_BOARD_DVBSKY_C2800E_CI: ++ case CX23885_BOARD_DVBSKY_T980_CI: cx23885_irq_add_enable(dev, PCI_MSK_GPIO0); break; } diff -urN a/drivers/media/pci/cx23885/cx23885-dvb.c b/drivers/media/pci/cx23885/cx23885-dvb.c --- a/drivers/media/pci/cx23885/cx23885-dvb.c 2013-04-29 08:36:01.000000000 +0800 -+++ b/drivers/media/pci/cx23885/cx23885-dvb.c 2013-05-03 17:38:34.000000000 +0800 -@@ -51,6 +51,8 @@ ++++ b/drivers/media/pci/cx23885/cx23885-dvb.c 2013-05-06 21:39:06.000000000 +0800 +@@ -51,6 +51,9 @@ #include "stv6110.h" #include "lnbh24.h" #include "cx24116.h" +#include "m88ds3103.h" +#include "m88dc2800.h" ++#include "sit2.h" #include "cimax2.h" #include "lgs8gxx.h" #include "netup-eeprom.h" -@@ -64,8 +66,8 @@ +@@ -64,8 +67,8 @@ #include "stv0367.h" #include "drxk.h" #include "mt2063.h" @@ -4762,7 +8346,7 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-dvb.c b/drivers/media/pci/cx23885/ #include "stb6100_cfg.h" #include "tda10071.h" #include "a8293.h" -@@ -500,42 +502,130 @@ +@@ -500,42 +503,142 @@ .if_khz = 5380, }; @@ -4882,6 +8466,18 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-dvb.c b/drivers/media/pci/cx23885/ + .ts_mode = 3, +}; + ++static struct sit2_config dvbsky_sit2_config_pci_p = { ++ .ts_bus_mode = 2, ++ .ts_clock_mode = 0, ++ .start_ctrl = NULL, ++}; ++ ++static struct sit2_config dvbsky_sit2_config_pci_s = { ++ .ts_bus_mode = 1, ++ .ts_clock_mode = 0, ++ .start_ctrl = NULL, ++}; ++ +static struct stv090x_config prof_8000_stv090x_config = { + .device = STV0903, + .demod_mode = STV090x_SINGLE, @@ -4921,7 +8517,7 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-dvb.c b/drivers/media/pci/cx23885/ static int cx23885_dvb_set_frontend(struct dvb_frontend *fe) { struct dtv_frontend_properties *p = &fe->dtv_property_cache; -@@ -1250,23 +1340,79 @@ +@@ -1250,23 +1353,90 @@ &tevii_ds3000_config, &i2c_bus->i2c_adap); break; @@ -4990,10 +8586,21 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-dvb.c b/drivers/media/pci/cx23885/ + break; + /* port C */ + case 2: ++ i2c_bus = &dev->i2c_bus[0]; ++ fe0->dvb.frontend = dvb_attach(sit2_attach, ++ &dvbsky_sit2_config_pci_s, ++ &i2c_bus->i2c_adap); + break; } break; + ++ case CX23885_BOARD_DVBSKY_T980_CI: ++ i2c_bus = &dev->i2c_bus[1]; ++ fe0->dvb.frontend = dvb_attach(sit2_attach, ++ &dvbsky_sit2_config_pci_p, ++ &i2c_bus->i2c_adap); ++ break; ++ + case CX23885_BOARD_PROF_8000: + i2c_bus = &dev->i2c_bus[0]; + @@ -5014,7 +8621,7 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-dvb.c b/drivers/media/pci/cx23885/ case CX23885_BOARD_HAUPPAUGE_HVR4400: i2c_bus = &dev->i2c_bus[0]; fe0->dvb.frontend = dvb_attach(tda10071_attach, -@@ -1325,7 +1471,7 @@ +@@ -1325,7 +1495,7 @@ printk(KERN_INFO "NetUP Dual DVB-S2 CI card port%d MAC=%pM\n", port->nr, port->frontends.adapter.proposed_mac); @@ -5023,7 +8630,7 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-dvb.c b/drivers/media/pci/cx23885/ break; } case CX23885_BOARD_NETUP_DUAL_DVB_T_C_CI_RF: { -@@ -1352,6 +1498,41 @@ +@@ -1352,6 +1522,42 @@ memcpy(port->frontends.adapter.proposed_mac, eeprom + 0xa0, 6); break; } @@ -5058,26 +8665,28 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-dvb.c b/drivers/media/pci/cx23885/ + netup_ci_init(port, true); + break; + } -+ case CX23885_BOARD_DVBSKY_C2800E_CI: { ++ case CX23885_BOARD_DVBSKY_C2800E_CI: ++ case CX23885_BOARD_DVBSKY_T980_CI: { + netup_ci_init(port, true); + break; + } } return ret; -@@ -1434,6 +1615,8 @@ +@@ -1434,6 +1640,9 @@ switch (port->dev->board) { case CX23885_BOARD_NETUP_DUAL_DVBS2_CI: + case CX23885_BOARD_DVBSKY_S950_CI: + case CX23885_BOARD_DVBSKY_C2800E_CI: ++ case CX23885_BOARD_DVBSKY_T980_CI: netup_ci_exit(port); break; case CX23885_BOARD_NETUP_DUAL_DVB_T_C_CI_RF: diff -urN a/drivers/media/pci/cx23885/cx23885.h b/drivers/media/pci/cx23885/cx23885.h --- a/drivers/media/pci/cx23885/cx23885.h 2013-04-29 08:36:01.000000000 +0800 -+++ b/drivers/media/pci/cx23885/cx23885.h 2013-05-03 17:14:20.000000000 +0800 -@@ -94,6 +94,14 @@ ++++ b/drivers/media/pci/cx23885/cx23885.h 2013-05-06 21:42:12.000000000 +0800 +@@ -94,6 +94,15 @@ #define CX23885_BOARD_HAUPPAUGE_HVR4400 38 #define CX23885_BOARD_AVERMEDIA_HC81R 39 @@ -5088,11 +8697,12 @@ diff -urN a/drivers/media/pci/cx23885/cx23885.h b/drivers/media/pci/cx23885/cx23 +#define CX23885_BOARD_DVBSKY_S950_CI (CX23885_BOARD_BASE_INDEX+3) +#define CX23885_BOARD_DVBSKY_C2800E_CI (CX23885_BOARD_BASE_INDEX+4) +#define CX23885_BOARD_DVBSKY_T9580 (CX23885_BOARD_BASE_INDEX+5) ++#define CX23885_BOARD_DVBSKY_T980_CI (CX23885_BOARD_BASE_INDEX+6) + #define GPIO_0 0x00000001 #define GPIO_1 0x00000002 #define GPIO_2 0x00000004 -@@ -231,7 +239,7 @@ +@@ -231,7 +240,7 @@ */ u32 clk_freq; struct cx23885_input input[MAX_CX23885_INPUT]; @@ -5103,8 +8713,8 @@ diff -urN a/drivers/media/pci/cx23885/cx23885.h b/drivers/media/pci/cx23885/cx23 }; diff -urN a/drivers/media/pci/cx23885/cx23885-input.c b/drivers/media/pci/cx23885/cx23885-input.c --- a/drivers/media/pci/cx23885/cx23885-input.c 2013-04-29 08:36:01.000000000 +0800 -+++ b/drivers/media/pci/cx23885/cx23885-input.c 2013-05-03 17:42:09.000000000 +0800 -@@ -89,6 +89,12 @@ ++++ b/drivers/media/pci/cx23885/cx23885-input.c 2013-05-06 21:41:19.000000000 +0800 +@@ -89,6 +89,13 @@ case CX23885_BOARD_TERRATEC_CINERGY_T_PCIE_DUAL: case CX23885_BOARD_TEVII_S470: case CX23885_BOARD_HAUPPAUGE_HVR1250: @@ -5114,10 +8724,11 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-input.c b/drivers/media/pci/cx2388 + case CX23885_BOARD_DVBSKY_S950_CI: + case CX23885_BOARD_DVBSKY_C2800E_CI: + case CX23885_BOARD_DVBSKY_T9580: ++ case CX23885_BOARD_DVBSKY_T980_CI: case CX23885_BOARD_MYGICA_X8507: /* * The only boards we handle right now. However other boards -@@ -141,6 +147,12 @@ +@@ -141,6 +148,13 @@ case CX23885_BOARD_HAUPPAUGE_HVR1850: case CX23885_BOARD_HAUPPAUGE_HVR1290: case CX23885_BOARD_HAUPPAUGE_HVR1250: @@ -5127,10 +8738,11 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-input.c b/drivers/media/pci/cx2388 + case CX23885_BOARD_DVBSKY_S950_CI: + case CX23885_BOARD_DVBSKY_C2800E_CI: + case CX23885_BOARD_DVBSKY_T9580: ++ case CX23885_BOARD_DVBSKY_T980_CI: case CX23885_BOARD_MYGICA_X8507: /* * The IR controller on this board only returns pulse widths. -@@ -291,6 +303,18 @@ +@@ -291,6 +305,19 @@ /* A guess at the remote */ rc_map = RC_MAP_TEVII_NEC; break; @@ -5140,6 +8752,7 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-input.c b/drivers/media/pci/cx2388 + case CX23885_BOARD_DVBSKY_S950_CI: + case CX23885_BOARD_DVBSKY_C2800E_CI: + case CX23885_BOARD_DVBSKY_T9580: ++ case CX23885_BOARD_DVBSKY_T980_CI: + /* Integrated CX2388[58] IR controller */ + driver_type = RC_DRIVER_IR_RAW; + allowed_protos = RC_BIT_ALL; @@ -5151,13 +8764,14 @@ diff -urN a/drivers/media/pci/cx23885/cx23885-input.c b/drivers/media/pci/cx2388 driver_type = RC_DRIVER_IR_RAW; diff -urN a/drivers/media/pci/cx23885/Kconfig b/drivers/media/pci/cx23885/Kconfig --- a/drivers/media/pci/cx23885/Kconfig 2013-04-29 08:36:01.000000000 +0800 -+++ b/drivers/media/pci/cx23885/Kconfig 2013-05-03 17:43:05.000000000 +0800 -@@ -23,6 +23,8 @@ ++++ b/drivers/media/pci/cx23885/Kconfig 2013-05-06 21:42:37.000000000 +0800 +@@ -23,6 +23,9 @@ select DVB_STB6100 if MEDIA_SUBDRV_AUTOSELECT select DVB_STV6110 if MEDIA_SUBDRV_AUTOSELECT select DVB_CX24116 if MEDIA_SUBDRV_AUTOSELECT + select DVB_M88DS3103 if MEDIA_SUBDRV_AUTOSELECT + select DVB_M88DC2800 if MEDIA_SUBDRV_AUTOSELECT ++ select DVB_SIT2 if MEDIA_SUBDRV_AUTOSELECT select DVB_STV0900 if MEDIA_SUBDRV_AUTOSELECT select DVB_DS3000 if MEDIA_SUBDRV_AUTOSELECT select DVB_TS2020 if MEDIA_SUBDRV_AUTOSELECT @@ -5454,8 +9068,8 @@ diff -urN a/drivers/media/rc/keymaps/rc-dvbsky.c b/drivers/media/rc/keymaps/rc-d +MODULE_AUTHOR("Nibble Max "); diff -urN a/drivers/media/usb/dvb-usb-v2/dvbsky.c b/drivers/media/usb/dvb-usb-v2/dvbsky.c --- a/drivers/media/usb/dvb-usb-v2/dvbsky.c 1970-01-01 08:00:00.000000000 +0800 -+++ b/drivers/media/usb/dvb-usb-v2/dvbsky.c 2013-05-03 17:47:38.000000000 +0800 -@@ -0,0 +1,665 @@ ++++ b/drivers/media/usb/dvb-usb-v2/dvbsky.c 2013-05-06 21:44:50.000000000 +0800 +@@ -0,0 +1,725 @@ +/* + * Driver for DVBSky USB2.0 receiver + * @@ -5484,6 +9098,7 @@ diff -urN a/drivers/media/usb/dvb-usb-v2/dvbsky.c b/drivers/media/usb/dvb-usb-v2 + +#include "dvb_ca_en50221.h" +#include "dvb_usb.h" ++#include "sit2.h" +#include "m88ds3103.h" + +static int dvbsky_debug; @@ -5969,6 +9584,38 @@ diff -urN a/drivers/media/usb/dvb-usb-v2/dvbsky.c b/drivers/media/usb/dvb-usb-v2 + return dvbsky_gpio_ctrl(d, 0x80, value); +} + ++static struct sit2_config dvbsky_usb_sit2_config = { ++ .ts_bus_mode = 2, ++ .ts_clock_mode = 1, ++ .start_ctrl = NULL, ++}; ++ ++static int dvbsky_t680c_attach(struct dvb_usb_adapter *adap) ++{ ++ struct dvbsky_state *state = adap_to_priv(adap); ++ struct dvb_usb_device *d = adap_to_d(adap); ++ int ret = 0; ++ ++ dprintk("%s, build on %s %s()\n", __func__, __DATE__,__TIME__); ++ ++ dvbsky_gpio_ctrl(d, 0x83, 0); ++ msleep(50); ++ dvbsky_gpio_ctrl(d, 0x83, 1); ++ msleep(20); ++ ++ adap->fe[0] = dvb_attach(sit2_attach, ++ &dvbsky_usb_sit2_config, ++ &d->i2c_adap); ++ if (!adap->fe[0]) { ++ printk(KERN_ERR "dvbsky_t680c_attach fail."); ++ ret = -ENODEV; ++ } ++ ++ state->has_ci = 1; ++ ++ return ret; ++} ++ +static int dvbsky_read_mac_addr(struct dvb_usb_adapter *adap, u8 mac[6]) +{ + struct dvb_usb_device *d = adap_to_d(adap); @@ -6071,6 +9718,31 @@ diff -urN a/drivers/media/usb/dvb-usb-v2/dvbsky.c b/drivers/media/usb/dvb-usb-v2 +} + +/* DVB USB Driver stuff */ ++static struct dvb_usb_device_properties dvbsky_t680c_props = { ++ .driver_name = KBUILD_MODNAME, ++ .owner = THIS_MODULE, ++ .adapter_nr = adapter_nr, ++ .size_of_priv = sizeof(struct dvbsky_state), ++ ++ .generic_bulk_ctrl_endpoint = 0x01, ++ .generic_bulk_ctrl_endpoint_response = 0x81, ++ ++ .i2c_algo = &dvbsky_i2c_algo, ++ .frontend_attach = dvbsky_t680c_attach, ++ .init = dvbsky_init, ++ .get_rc_config = dvbsky_get_rc_config, ++ .streaming_ctrl = dvbsky_streaming_ctrl, ++ .identify_state = dvbsky_identify_state, ++ .exit = dvbsky_exit, ++ ++ .num_adapters = 1, ++ .adapter = { ++ { ++ .stream = DVB_USB_STREAM_BULK(0x82, 8, 4096), ++ } ++ } ++}; ++ +static struct dvb_usb_device_properties dvbsky_s960_props = { + .driver_name = KBUILD_MODNAME, + .owner = THIS_MODULE, @@ -6098,6 +9770,8 @@ diff -urN a/drivers/media/usb/dvb-usb-v2/dvbsky.c b/drivers/media/usb/dvb-usb-v2 +}; + +static const struct usb_device_id dvbsky_id_table[] = { ++ { DVB_USB_DEVICE(0x0572, 0x680c, ++ &dvbsky_t680c_props, "DVBSky T680C", RC_MAP_DVBSKY) }, + { DVB_USB_DEVICE(0x0572, 0x6831, + &dvbsky_s960_props, "DVBSky S960/S860", RC_MAP_DVBSKY) }, + { } @@ -6123,14 +9797,15 @@ diff -urN a/drivers/media/usb/dvb-usb-v2/dvbsky.c b/drivers/media/usb/dvb-usb-v2 +MODULE_LICENSE("GPL"); diff -urN a/drivers/media/usb/dvb-usb-v2/Kconfig b/drivers/media/usb/dvb-usb-v2/Kconfig --- a/drivers/media/usb/dvb-usb-v2/Kconfig 2013-04-29 08:36:01.000000000 +0800 -+++ b/drivers/media/usb/dvb-usb-v2/Kconfig 2013-05-03 17:45:35.000000000 +0800 -@@ -149,3 +149,10 @@ ++++ b/drivers/media/usb/dvb-usb-v2/Kconfig 2013-05-06 21:57:39.000000000 +0800 +@@ -149,3 +149,11 @@ help Say Y here to support the Realtek RTL28xxU DVB USB receiver. +config DVB_USB_DVBSKY + tristate "DVBSky USB2.0 support" + depends on DVB_USB_V2 ++ select DVB_SIT2 if MEDIA_SUBDRV_AUTOSELECT + select DVB_M88DS3103 if MEDIA_SUBDRV_AUTOSELECT + help + Say Y here to support the USB receivers from DVBSky. From 613d93bf46344e80b4505dcfc3b037d01b2a31bb Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Tue, 7 May 2013 13:52:25 +0300 Subject: [PATCH 06/17] projects/*/linux/linux.*.conf: sync kernel configs --- projects/ARCTIC_MC/linux/linux.x86_64.conf | 1 + projects/ATV/linux/linux.i386.conf | 1 + projects/Fusion/linux/linux.i386.conf | 1 + projects/Fusion/linux/linux.x86_64.conf | 1 + projects/Generic/linux/linux.i386.conf | 1 + projects/Generic/linux/linux.x86_64.conf | 1 + projects/Generic_OSS/linux/linux.i386.conf | 1 + projects/ION/linux/linux.i386.conf | 1 + projects/ION/linux/linux.x86_64.conf | 1 + projects/Intel/linux/linux.i386.conf | 1 + projects/Intel/linux/linux.x86_64.conf | 1 + projects/Ultra/linux/linux.x86_64.conf | 1 + projects/Virtual/linux/linux.i386.conf | 1 + projects/Virtual/linux/linux.x86_64.conf | 1 + 14 files changed, 14 insertions(+) diff --git a/projects/ARCTIC_MC/linux/linux.x86_64.conf b/projects/ARCTIC_MC/linux/linux.x86_64.conf index d28edfdc67..4cf4eb22c3 100644 --- a/projects/ARCTIC_MC/linux/linux.x86_64.conf +++ b/projects/ARCTIC_MC/linux/linux.x86_64.conf @@ -2152,6 +2152,7 @@ CONFIG_DVB_TDA826X=m CONFIG_DVB_CX24116=m CONFIG_DVB_M88DS3103=m CONFIG_DVB_M88DC2800=m +CONFIG_DVB_SIT2=m CONFIG_DVB_SI21XX=m CONFIG_DVB_TS2020=m CONFIG_DVB_DS3000=m diff --git a/projects/ATV/linux/linux.i386.conf b/projects/ATV/linux/linux.i386.conf index df79816b28..96de874908 100644 --- a/projects/ATV/linux/linux.i386.conf +++ b/projects/ATV/linux/linux.i386.conf @@ -2056,6 +2056,7 @@ CONFIG_DVB_TDA826X=m CONFIG_DVB_CX24116=m CONFIG_DVB_M88DS3103=m CONFIG_DVB_M88DC2800=m +CONFIG_DVB_SIT2=m CONFIG_DVB_SI21XX=m CONFIG_DVB_TS2020=m CONFIG_DVB_DS3000=m diff --git a/projects/Fusion/linux/linux.i386.conf b/projects/Fusion/linux/linux.i386.conf index 5f98ea003a..20a407b6d7 100644 --- a/projects/Fusion/linux/linux.i386.conf +++ b/projects/Fusion/linux/linux.i386.conf @@ -2352,6 +2352,7 @@ CONFIG_DVB_TUA6100=m CONFIG_DVB_CX24116=m CONFIG_DVB_M88DS3103=m CONFIG_DVB_M88DC2800=m +CONFIG_DVB_SIT2=m CONFIG_DVB_SI21XX=m CONFIG_DVB_TS2020=m CONFIG_DVB_DS3000=m diff --git a/projects/Fusion/linux/linux.x86_64.conf b/projects/Fusion/linux/linux.x86_64.conf index 0a9c32975b..2de34658a6 100644 --- a/projects/Fusion/linux/linux.x86_64.conf +++ b/projects/Fusion/linux/linux.x86_64.conf @@ -2308,6 +2308,7 @@ CONFIG_DVB_TUA6100=m CONFIG_DVB_CX24116=m CONFIG_DVB_M88DS3103=m CONFIG_DVB_M88DC2800=m +CONFIG_DVB_SIT2=m CONFIG_DVB_SI21XX=m CONFIG_DVB_TS2020=m CONFIG_DVB_DS3000=m diff --git a/projects/Generic/linux/linux.i386.conf b/projects/Generic/linux/linux.i386.conf index 4875c0a0ff..56995df1aa 100644 --- a/projects/Generic/linux/linux.i386.conf +++ b/projects/Generic/linux/linux.i386.conf @@ -2435,6 +2435,7 @@ CONFIG_DVB_TUA6100=m CONFIG_DVB_CX24116=m CONFIG_DVB_M88DS3103=m CONFIG_DVB_M88DC2800=m +CONFIG_DVB_SIT2=m CONFIG_DVB_SI21XX=m CONFIG_DVB_TS2020=m CONFIG_DVB_DS3000=m diff --git a/projects/Generic/linux/linux.x86_64.conf b/projects/Generic/linux/linux.x86_64.conf index 250f49c5ed..224f1b0d74 100644 --- a/projects/Generic/linux/linux.x86_64.conf +++ b/projects/Generic/linux/linux.x86_64.conf @@ -2394,6 +2394,7 @@ CONFIG_DVB_TUA6100=m CONFIG_DVB_CX24116=m CONFIG_DVB_M88DS3103=m CONFIG_DVB_M88DC2800=m +CONFIG_DVB_SIT2=m CONFIG_DVB_SI21XX=m CONFIG_DVB_TS2020=m CONFIG_DVB_DS3000=m diff --git a/projects/Generic_OSS/linux/linux.i386.conf b/projects/Generic_OSS/linux/linux.i386.conf index 5b71bd2a67..a782d7f945 100644 --- a/projects/Generic_OSS/linux/linux.i386.conf +++ b/projects/Generic_OSS/linux/linux.i386.conf @@ -2433,6 +2433,7 @@ CONFIG_DVB_TUA6100=m CONFIG_DVB_CX24116=m CONFIG_DVB_M88DS3103=m CONFIG_DVB_M88DC2800=m +CONFIG_DVB_SIT2=m CONFIG_DVB_SI21XX=m CONFIG_DVB_TS2020=m CONFIG_DVB_DS3000=m diff --git a/projects/ION/linux/linux.i386.conf b/projects/ION/linux/linux.i386.conf index 5e98b1262c..1e52210804 100644 --- a/projects/ION/linux/linux.i386.conf +++ b/projects/ION/linux/linux.i386.conf @@ -2361,6 +2361,7 @@ CONFIG_DVB_TUA6100=m CONFIG_DVB_CX24116=m CONFIG_DVB_M88DS3103=m CONFIG_DVB_M88DC2800=m +CONFIG_DVB_SIT2=m CONFIG_DVB_SI21XX=m CONFIG_DVB_TS2020=m CONFIG_DVB_DS3000=m diff --git a/projects/ION/linux/linux.x86_64.conf b/projects/ION/linux/linux.x86_64.conf index 8c91b3688a..64344cf36c 100644 --- a/projects/ION/linux/linux.x86_64.conf +++ b/projects/ION/linux/linux.x86_64.conf @@ -2299,6 +2299,7 @@ CONFIG_DVB_TUA6100=m CONFIG_DVB_CX24116=m CONFIG_DVB_M88DS3103=m CONFIG_DVB_M88DC2800=m +CONFIG_DVB_SIT2=m CONFIG_DVB_SI21XX=m CONFIG_DVB_TS2020=m CONFIG_DVB_DS3000=m diff --git a/projects/Intel/linux/linux.i386.conf b/projects/Intel/linux/linux.i386.conf index dbaaa74b08..7ad2bd6d87 100644 --- a/projects/Intel/linux/linux.i386.conf +++ b/projects/Intel/linux/linux.i386.conf @@ -2379,6 +2379,7 @@ CONFIG_DVB_TUA6100=m CONFIG_DVB_CX24116=m CONFIG_DVB_M88DS3103=m CONFIG_DVB_M88DC2800=m +CONFIG_DVB_SIT2=m CONFIG_DVB_SI21XX=m CONFIG_DVB_TS2020=m CONFIG_DVB_DS3000=m diff --git a/projects/Intel/linux/linux.x86_64.conf b/projects/Intel/linux/linux.x86_64.conf index 562d9d3c15..f52edb0387 100644 --- a/projects/Intel/linux/linux.x86_64.conf +++ b/projects/Intel/linux/linux.x86_64.conf @@ -2318,6 +2318,7 @@ CONFIG_DVB_TUA6100=m CONFIG_DVB_CX24116=m CONFIG_DVB_M88DS3103=m CONFIG_DVB_M88DC2800=m +CONFIG_DVB_SIT2=m CONFIG_DVB_SI21XX=m CONFIG_DVB_TS2020=m CONFIG_DVB_DS3000=m diff --git a/projects/Ultra/linux/linux.x86_64.conf b/projects/Ultra/linux/linux.x86_64.conf index 517124eee6..9dd507ef87 100644 --- a/projects/Ultra/linux/linux.x86_64.conf +++ b/projects/Ultra/linux/linux.x86_64.conf @@ -2134,6 +2134,7 @@ CONFIG_DVB_TDA826X=m CONFIG_DVB_CX24116=m CONFIG_DVB_M88DS3103=m CONFIG_DVB_M88DC2800=m +CONFIG_DVB_SIT2=m CONFIG_DVB_SI21XX=m CONFIG_DVB_TS2020=m CONFIG_DVB_DS3000=m diff --git a/projects/Virtual/linux/linux.i386.conf b/projects/Virtual/linux/linux.i386.conf index 34aaf2c166..c2584c54f0 100644 --- a/projects/Virtual/linux/linux.i386.conf +++ b/projects/Virtual/linux/linux.i386.conf @@ -2435,6 +2435,7 @@ CONFIG_DVB_TUA6100=m CONFIG_DVB_CX24116=m CONFIG_DVB_M88DS3103=m CONFIG_DVB_M88DC2800=m +CONFIG_DVB_SIT2=m CONFIG_DVB_SI21XX=m CONFIG_DVB_TS2020=m CONFIG_DVB_DS3000=m diff --git a/projects/Virtual/linux/linux.x86_64.conf b/projects/Virtual/linux/linux.x86_64.conf index f31f4ac5ac..428bc8ed4e 100644 --- a/projects/Virtual/linux/linux.x86_64.conf +++ b/projects/Virtual/linux/linux.x86_64.conf @@ -2394,6 +2394,7 @@ CONFIG_DVB_TUA6100=m CONFIG_DVB_CX24116=m CONFIG_DVB_M88DS3103=m CONFIG_DVB_M88DC2800=m +CONFIG_DVB_SIT2=m CONFIG_DVB_SI21XX=m CONFIG_DVB_TS2020=m CONFIG_DVB_DS3000=m From bd10c9a203956dc7a785fa44eda465612bdc4d55 Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Wed, 8 May 2013 10:57:36 +0300 Subject: [PATCH 07/17] vdr-addon: bump --- packages/addons/service/multimedia/vdr-addon/changelog.txt | 3 ++- packages/addons/service/multimedia/vdr-addon/meta | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/addons/service/multimedia/vdr-addon/changelog.txt b/packages/addons/service/multimedia/vdr-addon/changelog.txt index 027b32aa58..620a99f0b9 100644 --- a/packages/addons/service/multimedia/vdr-addon/changelog.txt +++ b/packages/addons/service/multimedia/vdr-addon/changelog.txt @@ -1,9 +1,10 @@ -3.0.7 (in progress) +3.0.7 - update to vdr-plugin-xmltv2vdr-30903cc0 - cleanup epgsources handling - * support for multiple epgsources - * support user defined epgsources - fixed epgsearch plugin not working without streamdev-server +- vdr-addon: update to vdr-plugin-xvdr-33afe59 3.0.6 - fix startup error in vnsiserver / 32bit diff --git a/packages/addons/service/multimedia/vdr-addon/meta b/packages/addons/service/multimedia/vdr-addon/meta index 462f38040d..6ddccf76e3 100644 --- a/packages/addons/service/multimedia/vdr-addon/meta +++ b/packages/addons/service/multimedia/vdr-addon/meta @@ -21,7 +21,7 @@ PKG_NAME="vdr-addon" PKG_VERSION="3.0" -PKG_REV="6" +PKG_REV="7" PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="http://www.openelec.tv" From e57522f8181f74e30e9cd4e0556a3e9326add460 Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Wed, 8 May 2013 12:19:11 +0300 Subject: [PATCH 08/17] new package: 'dvb-fe-tool' --- packages/sysutils/dvb-fe-tool/build | 44 +++++++++++++++++++++++++++ packages/sysutils/dvb-fe-tool/install | 26 ++++++++++++++++ packages/sysutils/dvb-fe-tool/meta | 36 ++++++++++++++++++++++ 3 files changed, 106 insertions(+) create mode 100755 packages/sysutils/dvb-fe-tool/build create mode 100755 packages/sysutils/dvb-fe-tool/install create mode 100644 packages/sysutils/dvb-fe-tool/meta diff --git a/packages/sysutils/dvb-fe-tool/build b/packages/sysutils/dvb-fe-tool/build new file mode 100755 index 0000000000..51c262ae6e --- /dev/null +++ b/packages/sysutils/dvb-fe-tool/build @@ -0,0 +1,44 @@ +#!/bin/sh + +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2012 Stephan Raue (stephan@openelec.tv) +# +# This Program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This Program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with OpenELEC.tv; see the file COPYING. If not, write to +# the Free Software Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ + +. config/options $1 + +CWD=`pwd` +cd $PKG_BUILD + +./configure --host=$TARGET_NAME \ + --build=$HOST_NAME \ + --prefix=/usr \ + --disable-nls \ + --disable-rpath \ + --disable-libdvbv5 \ + --disable-libv4l \ + --disable-v4l-utils \ + --disable-qv4l2 \ + --without-libiconv-prefix \ + --without-libintl-prefix \ + +cd $CWD/$PKG_BUILD/lib + make CFLAGS="$TARGET_CFLAGS" + +cd $CWD/$PKG_BUILD/utils/dvb + make CFLAGS="$TARGET_CFLAGS" diff --git a/packages/sysutils/dvb-fe-tool/install b/packages/sysutils/dvb-fe-tool/install new file mode 100755 index 0000000000..c4e4646e28 --- /dev/null +++ b/packages/sysutils/dvb-fe-tool/install @@ -0,0 +1,26 @@ +#!/bin/sh + +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2012 Stephan Raue (stephan@openelec.tv) +# +# This Program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This Program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with OpenELEC.tv; see the file COPYING. If not, write to +# the Free Software Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ + +. config/options $1 + +mkdir -p $INSTALL/usr/bin + cp $PKG_BUILD/utils/dvb/dvb-fe-tool $INSTALL/usr/bin diff --git a/packages/sysutils/dvb-fe-tool/meta b/packages/sysutils/dvb-fe-tool/meta new file mode 100644 index 0000000000..2f5e652576 --- /dev/null +++ b/packages/sysutils/dvb-fe-tool/meta @@ -0,0 +1,36 @@ +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2012 Stephan Raue (stephan@openelec.tv) +# +# This Program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This Program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with OpenELEC.tv; see the file COPYING. If not, write to +# the Free Software Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ + +PKG_NAME="dvb-fe-tool" +PKG_VERSION="0.9.5" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://linuxtv.org/" +PKG_URL="$DISTRO_SRC/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="system" +PKG_SHORTDESC="dvb-fe-tool: Linux V4L2 and DVB API utilities and v4l libraries (libv4l)." +PKG_LONGDESC="Linux V4L2 and DVB API utilities and v4l libraries (libv4l)." +PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 1c28c28cad8db133b3deec6b0959cef9716dbc9b Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Wed, 8 May 2013 12:19:31 +0300 Subject: [PATCH 09/17] linux: depend on 'dvb-fe-tool' --- packages/linux/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/linux/meta b/packages/linux/meta index 0dabe25660..8f84f916e9 100644 --- a/packages/linux/meta +++ b/packages/linux/meta @@ -33,7 +33,7 @@ PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="http://www.kernel.org" PKG_URL="http://www.kernel.org/pub/linux/kernel/v3.x/$PKG_NAME-$PKG_VERSION.tar.xz" -PKG_DEPENDS="busybox linux-drivers linux-firmware pciutils $BOOTLOADER" +PKG_DEPENDS="busybox linux-drivers linux-firmware pciutils $BOOTLOADER dvb-fe-tool" PKG_BUILD_DEPENDS="toolchain cpio module-init-tools pciutils xz" PKG_PRIORITY="optional" PKG_SECTION="linux" From 3b3188cbe90219993ced7fd7652cd72fff9d856c Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Wed, 8 May 2013 13:33:58 +0300 Subject: [PATCH 10/17] linux-tbs-drivers: update to linux-tbs-drivers-130506 --- packages/linux-drivers/linux-tbs-drivers/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/linux-drivers/linux-tbs-drivers/meta b/packages/linux-drivers/linux-tbs-drivers/meta index 10b61d64c8..ad6a430ff9 100644 --- a/packages/linux-drivers/linux-tbs-drivers/meta +++ b/packages/linux-drivers/linux-tbs-drivers/meta @@ -19,7 +19,7 @@ ################################################################################ PKG_NAME="linux-tbs-drivers" -PKG_VERSION="130429" +PKG_VERSION="130506" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" From 31c0f4a40870dad0cbf1f476b1f22bff9d5ac4db Mon Sep 17 00:00:00 2001 From: vpeter4 Date: Wed, 8 May 2013 14:12:46 +0200 Subject: [PATCH 11/17] open-vm-tools: upate to open-vm-tools-9.2.3-1031360 --- packages/sysutils/open-vm-tools/meta | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/sysutils/open-vm-tools/meta b/packages/sysutils/open-vm-tools/meta index 1ef044edeb..8bdbe0b814 100644 --- a/packages/sysutils/open-vm-tools/meta +++ b/packages/sysutils/open-vm-tools/meta @@ -20,7 +20,7 @@ ################################################################################ PKG_NAME="open-vm-tools" -PKG_VERSION="9.2.2-893683" +PKG_VERSION="9.2.3-1031360" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" @@ -32,6 +32,5 @@ PKG_PRIORITY="optional" PKG_SECTION="virtualization" PKG_SHORTDESC="open-vm-tools: open source implementation of VMware Tools" PKG_LONGDESC="open-vm-tools: open source implementation of VMware Tools" - PKG_IS_ADDON="no" PKG_AUTORECONF="yes" From 9eb72675c8e1299e07be40a973215b040da38a1e Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Wed, 8 May 2013 15:32:04 +0300 Subject: [PATCH 12/17] open-vm-tools: update patches --- ...open-vm-tools-9.2.2-893683-linux-3.8.patch | 60 ------------------- ...6.patch => open-vm-tools-kernel-3.9.patch} | 14 ++--- ...dir.patch => open-vm-tools-linuxdir.patch} | 0 3 files changed, 7 insertions(+), 67 deletions(-) delete mode 100644 packages/sysutils/open-vm-tools/patches/open-vm-tools-9.2.2-893683-linux-3.8.patch rename packages/sysutils/open-vm-tools/patches/{open-vm-tools-9.2.2-893683-kernel-3.6.patch => open-vm-tools-kernel-3.9.patch} (82%) rename packages/sysutils/open-vm-tools/patches/{open-vm-tools-9.2.2-893683-linuxdir.patch => open-vm-tools-linuxdir.patch} (100%) diff --git a/packages/sysutils/open-vm-tools/patches/open-vm-tools-9.2.2-893683-linux-3.8.patch b/packages/sysutils/open-vm-tools/patches/open-vm-tools-9.2.2-893683-linux-3.8.patch deleted file mode 100644 index bc087218d8..0000000000 --- a/packages/sysutils/open-vm-tools/patches/open-vm-tools-9.2.2-893683-linux-3.8.patch +++ /dev/null @@ -1,60 +0,0 @@ ---- open-vm-tools-2012.05.21-724730/modules/linux/vmci/linux/driver.c~ 2012-05-22 22:12:52.000000000 +0200 -+++ open-vm-tools-2012.05.21-724730/modules/linux/vmci/linux/driver.c 2013-02-21 01:22:04.836684885 +0100 -@@ -128,7 +128,11 @@ static struct pci_driver vmci_driver = { - .name = VMCI_DEVICE_NAME, - .id_table = vmci_ids, - .probe = vmci_probe_device, -+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 8, 0) - .remove = __devexit_p(vmci_remove_device), -+#else -+ .remove = vmci_remove_device, -+#endif - }; - - #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19) -@@ -1747,7 +1751,10 @@ vmci_enable_msix(struct pci_dev *pdev) / - *----------------------------------------------------------------------------- - */ - --static int __devinit -+static int -+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 8, 0) -+__devinit -+#endif - vmci_probe_device(struct pci_dev *pdev, // IN: vmci PCI device - const struct pci_device_id *id) // IN: matching device ID - { -@@ -1975,7 +1982,10 @@ vmci_probe_device(struct pci_dev *pdev, - *----------------------------------------------------------------------------- - */ - --static void __devexit -+static void -+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 8, 0) -+__devexit -+#endif - vmci_remove_device(struct pci_dev* pdev) - { - struct vmci_device *dev = pci_get_drvdata(pdev); ---- open-vm-tools-2012.05.21-724730/modules/linux/shared/compat_mm.h 2013-01-17 17:58:53.090333002 +0100 -+++ open-vm-tools-2012.05.21-724730/modules/linux/shared/compat_mm.h 2013-01-17 18:18:25.274280444 +0100 -@@ -99,8 +99,18 @@ static inline struct page * alloc_pages( - vmtruncate(inode, size); \ - result; \ - }) --#else -+#elif LINUX_VERSION_CODE < KERNEL_VERSION(3, 8, 0) - #define compat_vmtruncate(inode, size) vmtruncate(inode, size) -+#else -+#define compat_vmtruncate(inode, size) \ -+({ \ -+ result = inode_newsize_ok(inode, size); \ -+ if (!result) \ -+ { \ -+ truncate_setsize(inode, size); \ -+ } \ -+ result; \ -+}) - #endif - - diff --git a/packages/sysutils/open-vm-tools/patches/open-vm-tools-9.2.2-893683-kernel-3.6.patch b/packages/sysutils/open-vm-tools/patches/open-vm-tools-kernel-3.9.patch similarity index 82% rename from packages/sysutils/open-vm-tools/patches/open-vm-tools-9.2.2-893683-kernel-3.6.patch rename to packages/sysutils/open-vm-tools/patches/open-vm-tools-kernel-3.9.patch index 26d6dd2d9d..88bdb4832b 100644 --- a/packages/sysutils/open-vm-tools/patches/open-vm-tools-9.2.2-893683-kernel-3.6.patch +++ b/packages/sysutils/open-vm-tools/patches/open-vm-tools-kernel-3.9.patch @@ -1,25 +1,25 @@ diff --git a/modules/linux/vmhgfs/inode.c b/modules/linux/vmhgfs/inode.c -index 8d6cfbb..3642171 100644 +index af240d7..2994df7 100644 --- a/modules/linux/vmhgfs/inode.c +++ b/modules/linux/vmhgfs/inode.c -@@ -1852,7 +1852,7 @@ HgfsPermission(struct inode *inode, +@@ -1870,7 +1870,7 @@ HgfsPermission(struct inode *inode, #else if (mask & MAY_ACCESS) { /* For sys_access. */ #endif - struct list_head *pos; + struct hlist_node *pos; - int dcount = 0; - struct dentry *dentry = NULL; -@@ -1872,7 +1872,7 @@ HgfsPermission(struct inode *inode, + /* + * In 2.6.38 path walk is done in 2 distinct modes: rcu-walk and +@@ -1888,7 +1888,7 @@ HgfsPermission(struct inode *inode, #endif /* Find a dentry with valid d_count. Refer bug 587879. */ - list_for_each(pos, &inode->i_dentry) { + list_for_each(pos, inode->i_dentry.first) { - dentry = list_entry(pos, struct dentry, d_alias); + int dcount; + struct dentry *dentry = list_entry(pos, struct dentry, d_alias); #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 38) - dcount = atomic_read(&dentry->d_count); diff --git a/modules/linux/vmsync/sync.c b/modules/linux/vmsync/sync.c index d05ccad..dff7fb5 100644 --- a/modules/linux/vmsync/sync.c diff --git a/packages/sysutils/open-vm-tools/patches/open-vm-tools-9.2.2-893683-linuxdir.patch b/packages/sysutils/open-vm-tools/patches/open-vm-tools-linuxdir.patch similarity index 100% rename from packages/sysutils/open-vm-tools/patches/open-vm-tools-9.2.2-893683-linuxdir.patch rename to packages/sysutils/open-vm-tools/patches/open-vm-tools-linuxdir.patch From 4ce5dedd221b47bc9384917d5e17da68d82a509f Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Wed, 8 May 2013 16:43:07 +0300 Subject: [PATCH 13/17] open-vm-tools: cleanup --- packages/sysutils/open-vm-tools/build | 5 +++ .../open-vm-tools/init.d/92_open-vm-tools | 4 -- .../patches/open-vm-tools-kernel-3.9.patch | 44 ------------------- 3 files changed, 5 insertions(+), 48 deletions(-) delete mode 100644 packages/sysutils/open-vm-tools/patches/open-vm-tools-kernel-3.9.patch diff --git a/packages/sysutils/open-vm-tools/build b/packages/sysutils/open-vm-tools/build index c6a20e718b..9a5ebc2acf 100755 --- a/packages/sysutils/open-vm-tools/build +++ b/packages/sysutils/open-vm-tools/build @@ -22,6 +22,8 @@ . config/options $1 +KERNEL_VER=$(basename $(ls -d $ROOT/$BUILD/linux-[0-9]*)| sed 's|linux-||g') + cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ @@ -29,6 +31,8 @@ cd $PKG_BUILD --sysconfdir=/etc \ --enable-shared \ --disable-static \ + --disable-docs \ + --disable-tests \ --without-pam \ --without-gtk2 \ --without-gtkmm \ @@ -36,6 +40,7 @@ cd $PKG_BUILD --without-x \ --without-icu \ --without-procps \ + --with-kernel-release=$KERNEL_VER \ --with-linuxdir=$(kernel_path) make CFLAGS+="-DG_DISABLE_DEPRECATED" diff --git a/packages/sysutils/open-vm-tools/init.d/92_open-vm-tools b/packages/sysutils/open-vm-tools/init.d/92_open-vm-tools index 9c06aa5b41..fa1690e70e 100644 --- a/packages/sysutils/open-vm-tools/init.d/92_open-vm-tools +++ b/packages/sysutils/open-vm-tools/init.d/92_open-vm-tools @@ -32,11 +32,7 @@ # load modules modprobe vmhgfs - modprobe vmsync - modprobe vmblock - modprobe -r pcnet32 modprobe vmxnet - modprobe pcnet32 /usr/bin/vmtoolsd --background /var/run/vmtoolsd.pid )& diff --git a/packages/sysutils/open-vm-tools/patches/open-vm-tools-kernel-3.9.patch b/packages/sysutils/open-vm-tools/patches/open-vm-tools-kernel-3.9.patch deleted file mode 100644 index 88bdb4832b..0000000000 --- a/packages/sysutils/open-vm-tools/patches/open-vm-tools-kernel-3.9.patch +++ /dev/null @@ -1,44 +0,0 @@ -diff --git a/modules/linux/vmhgfs/inode.c b/modules/linux/vmhgfs/inode.c -index af240d7..2994df7 100644 ---- a/modules/linux/vmhgfs/inode.c -+++ b/modules/linux/vmhgfs/inode.c -@@ -1870,7 +1870,7 @@ HgfsPermission(struct inode *inode, - #else - if (mask & MAY_ACCESS) { /* For sys_access. */ - #endif -- struct list_head *pos; -+ struct hlist_node *pos; - - /* - * In 2.6.38 path walk is done in 2 distinct modes: rcu-walk and -@@ -1888,7 +1888,7 @@ HgfsPermission(struct inode *inode, - #endif - - /* Find a dentry with valid d_count. Refer bug 587879. */ -- list_for_each(pos, &inode->i_dentry) { -+ list_for_each(pos, inode->i_dentry.first) { - int dcount; - struct dentry *dentry = list_entry(pos, struct dentry, d_alias); - #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 38) -diff --git a/modules/linux/vmsync/sync.c b/modules/linux/vmsync/sync.c -index d05ccad..dff7fb5 100644 ---- a/modules/linux/vmsync/sync.c -+++ b/modules/linux/vmsync/sync.c -@@ -162,7 +162,7 @@ VmSyncThawDevices(void *_state) // IN - cancel_delayed_work(&state->thawTask); - list_for_each_safe(cur, tmp, &state->devices) { - dev = list_entry(cur, VmSyncBlockDevice, list); -- if (dev->sb != NULL && dev->sb->s_frozen != SB_UNFROZEN) { -+ if (dev->sb != NULL && dev->sb->s_writers.frozen != SB_UNFROZEN) { - thaw_bdev(dev->bdev, dev->sb); - atomic_dec(&gFreezeCount); - } -@@ -237,7 +237,7 @@ VmSyncAddPath(const VmSyncState *state, // IN - * the superblock is already frozen. - */ - if (inode->i_sb->s_bdev == NULL || -- inode->i_sb->s_frozen != SB_UNFROZEN) { -+ inode->i_sb->s_writers.frozen != SB_UNFROZEN) { - result = (inode->i_sb->s_bdev == NULL) ? -EINVAL : -EALREADY; - compat_path_release(&nd); - goto exit; From ef7056d25544e41122455bd18fd71ab87713f6fa Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Thu, 9 May 2013 00:07:05 +0300 Subject: [PATCH 14/17] wlan-firmware: update to wlan-firmware-0.0.12 --- packages/linux-firmware/wlan-firmware/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/linux-firmware/wlan-firmware/meta b/packages/linux-firmware/wlan-firmware/meta index a240f9791b..f1541da996 100644 --- a/packages/linux-firmware/wlan-firmware/meta +++ b/packages/linux-firmware/wlan-firmware/meta @@ -19,7 +19,7 @@ ################################################################################ PKG_NAME="wlan-firmware" -PKG_VERSION="0.0.11" +PKG_VERSION="0.0.12" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="Free-to-use" From 70f845f83001facb9fa1aa310b6abd33d0479c30 Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Thu, 9 May 2013 00:07:18 +0300 Subject: [PATCH 15/17] projects/*/linux/linux.*.conf: add ZD1201 wifi support --- projects/ARCTIC_MC/linux/linux.x86_64.conf | 2 +- projects/Fusion/linux/linux.i386.conf | 2 +- projects/Fusion/linux/linux.x86_64.conf | 2 +- projects/ION/linux/linux.i386.conf | 2 +- projects/ION/linux/linux.x86_64.conf | 2 +- projects/Intel/linux/linux.i386.conf | 2 +- projects/Intel/linux/linux.x86_64.conf | 2 +- projects/RPi/linux/linux.arm.conf | 2 +- projects/Ultra/linux/linux.x86_64.conf | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/projects/ARCTIC_MC/linux/linux.x86_64.conf b/projects/ARCTIC_MC/linux/linux.x86_64.conf index 4cf4eb22c3..d04dd2d419 100644 --- a/projects/ARCTIC_MC/linux/linux.x86_64.conf +++ b/projects/ARCTIC_MC/linux/linux.x86_64.conf @@ -1250,7 +1250,7 @@ CONFIG_WLAN=y # CONFIG_ATMEL is not set # CONFIG_AT76C50X_USB is not set # CONFIG_PRISM54 is not set -# CONFIG_USB_ZD1201 is not set +CONFIG_USB_ZD1201=m CONFIG_USB_NET_RNDIS_WLAN=m # CONFIG_RTL8180 is not set CONFIG_RTL8187=m diff --git a/projects/Fusion/linux/linux.i386.conf b/projects/Fusion/linux/linux.i386.conf index 20a407b6d7..c94384c204 100644 --- a/projects/Fusion/linux/linux.i386.conf +++ b/projects/Fusion/linux/linux.i386.conf @@ -1318,7 +1318,7 @@ CONFIG_WLAN=y # CONFIG_ATMEL is not set # CONFIG_AT76C50X_USB is not set # CONFIG_PRISM54 is not set -# CONFIG_USB_ZD1201 is not set +CONFIG_USB_ZD1201=m CONFIG_USB_NET_RNDIS_WLAN=m # CONFIG_RTL8180 is not set CONFIG_RTL8187=m diff --git a/projects/Fusion/linux/linux.x86_64.conf b/projects/Fusion/linux/linux.x86_64.conf index 2de34658a6..678ab131a2 100644 --- a/projects/Fusion/linux/linux.x86_64.conf +++ b/projects/Fusion/linux/linux.x86_64.conf @@ -1280,7 +1280,7 @@ CONFIG_WLAN=y # CONFIG_ATMEL is not set # CONFIG_AT76C50X_USB is not set # CONFIG_PRISM54 is not set -# CONFIG_USB_ZD1201 is not set +CONFIG_USB_ZD1201=m CONFIG_USB_NET_RNDIS_WLAN=m # CONFIG_RTL8180 is not set CONFIG_RTL8187=m diff --git a/projects/ION/linux/linux.i386.conf b/projects/ION/linux/linux.i386.conf index 1e52210804..26378d2578 100644 --- a/projects/ION/linux/linux.i386.conf +++ b/projects/ION/linux/linux.i386.conf @@ -1325,7 +1325,7 @@ CONFIG_WLAN=y # CONFIG_ATMEL is not set # CONFIG_AT76C50X_USB is not set # CONFIG_PRISM54 is not set -# CONFIG_USB_ZD1201 is not set +CONFIG_USB_ZD1201=m CONFIG_USB_NET_RNDIS_WLAN=m # CONFIG_RTL8180 is not set CONFIG_RTL8187=m diff --git a/projects/ION/linux/linux.x86_64.conf b/projects/ION/linux/linux.x86_64.conf index 64344cf36c..70ad7726b9 100644 --- a/projects/ION/linux/linux.x86_64.conf +++ b/projects/ION/linux/linux.x86_64.conf @@ -1269,7 +1269,7 @@ CONFIG_WLAN=y # CONFIG_ATMEL is not set # CONFIG_AT76C50X_USB is not set # CONFIG_PRISM54 is not set -# CONFIG_USB_ZD1201 is not set +CONFIG_USB_ZD1201=m CONFIG_USB_NET_RNDIS_WLAN=m # CONFIG_RTL8180 is not set CONFIG_RTL8187=m diff --git a/projects/Intel/linux/linux.i386.conf b/projects/Intel/linux/linux.i386.conf index 7ad2bd6d87..fa381cd40e 100644 --- a/projects/Intel/linux/linux.i386.conf +++ b/projects/Intel/linux/linux.i386.conf @@ -1335,7 +1335,7 @@ CONFIG_WLAN=y # CONFIG_ATMEL is not set # CONFIG_AT76C50X_USB is not set # CONFIG_PRISM54 is not set -# CONFIG_USB_ZD1201 is not set +CONFIG_USB_ZD1201=m CONFIG_USB_NET_RNDIS_WLAN=m # CONFIG_RTL8180 is not set CONFIG_RTL8187=m diff --git a/projects/Intel/linux/linux.x86_64.conf b/projects/Intel/linux/linux.x86_64.conf index f52edb0387..c8892ac03c 100644 --- a/projects/Intel/linux/linux.x86_64.conf +++ b/projects/Intel/linux/linux.x86_64.conf @@ -1280,7 +1280,7 @@ CONFIG_WLAN=y # CONFIG_ATMEL is not set # CONFIG_AT76C50X_USB is not set # CONFIG_PRISM54 is not set -# CONFIG_USB_ZD1201 is not set +CONFIG_USB_ZD1201=m CONFIG_USB_NET_RNDIS_WLAN=m # CONFIG_RTL8180 is not set CONFIG_RTL8187=m diff --git a/projects/RPi/linux/linux.arm.conf b/projects/RPi/linux/linux.arm.conf index 44d9a43b6e..69a9ba495a 100644 --- a/projects/RPi/linux/linux.arm.conf +++ b/projects/RPi/linux/linux.arm.conf @@ -905,7 +905,7 @@ CONFIG_USB_NET_RNDIS_HOST=m CONFIG_WLAN=y # CONFIG_LIBERTAS_THINFIRM is not set # CONFIG_AT76C50X_USB is not set -# CONFIG_USB_ZD1201 is not set +CONFIG_USB_ZD1201=m CONFIG_USB_NET_RNDIS_WLAN=m CONFIG_RTL8187=m CONFIG_RTL8187_LEDS=y diff --git a/projects/Ultra/linux/linux.x86_64.conf b/projects/Ultra/linux/linux.x86_64.conf index 9dd507ef87..3bda98f4d8 100644 --- a/projects/Ultra/linux/linux.x86_64.conf +++ b/projects/Ultra/linux/linux.x86_64.conf @@ -1247,7 +1247,7 @@ CONFIG_WLAN=y # CONFIG_ATMEL is not set # CONFIG_AT76C50X_USB is not set # CONFIG_PRISM54 is not set -# CONFIG_USB_ZD1201 is not set +CONFIG_USB_ZD1201=m CONFIG_USB_NET_RNDIS_WLAN=m # CONFIG_RTL8180 is not set CONFIG_RTL8187=m From 2d81c432409c76359a65581dea1402555ac77a04 Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Thu, 9 May 2013 00:18:24 +0300 Subject: [PATCH 16/17] connman: fully disable wispr --- .../patches/connman-disable-wispr.patch | 167 ++++++++++++++++++ 1 file changed, 167 insertions(+) create mode 100644 packages/network/connman/patches/connman-disable-wispr.patch diff --git a/packages/network/connman/patches/connman-disable-wispr.patch b/packages/network/connman/patches/connman-disable-wispr.patch new file mode 100644 index 0000000000..f5d6a818e9 --- /dev/null +++ b/packages/network/connman/patches/connman-disable-wispr.patch @@ -0,0 +1,167 @@ +diff --git a/Makefile.am b/Makefile.am +index 4b1b6c2..d518d5d 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -172,6 +172,7 @@ endif + endif + + AM_CFLAGS = @DBUS_CFLAGS@ @GLIB_CFLAGS@ @XTABLES_CFLAGS@ \ ++ @WISPR_CFLAGS@ \ + @GNUTLS_CFLAGS@ $(builtin_cflags) \ + -DCONNMAN_PLUGIN_BUILTIN \ + -DSTATEDIR=\""$(statedir)"\" \ +diff --git a/configure.ac b/configure.ac +index cff8b47..626137a 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -357,13 +357,17 @@ AM_CONDITIONAL(CLIENT, test "${enable_client}" != "no") + if (test "${enable_wispr}" != "no"); then + PKG_CHECK_MODULES(GNUTLS, gnutls, dummy=yes, + AC_MSG_ERROR(GnuTLS library is required)) ++ WISPR_CFLAGS="-DENABLE_WISPR" + else + GNUTLS_CFLAGS="" + GNUTLS_LIBS="" ++ WISPR_CFLAGS="" + fi + AC_SUBST(GNUTLS_CFLAGS) + AC_SUBST(GNUTLS_LIBS) + ++AC_SUBST(WISPR_CFLAGS) ++ + if (test "${enable_loopback}" != "no"); then + AC_CHECK_HEADERS(sys/inotify.h, dummy=yes, + AC_MSG_ERROR(inotify header files are required)) +diff --git a/src/main.c b/src/main.c +index 0d58fc4..9c3b79e 100644 +--- a/src/main.c ++++ b/src/main.c +@@ -689,7 +689,9 @@ int main(int argc, char *argv[]) + __connman_dhcp_init(); + __connman_dhcpv6_init(); + __connman_wpad_init(); ++#ifdef ENABLE_WISPR + __connman_wispr_init(); ++#endif + __connman_rfkill_init(); + + g_free(option_config); +@@ -703,7 +705,9 @@ int main(int argc, char *argv[]) + g_source_remove(signal); + + __connman_rfkill_cleanup(); ++#ifdef ENABLE_WISPR + __connman_wispr_cleanup(); ++#endif + __connman_wpad_cleanup(); + __connman_dhcpv6_cleanup(); + __connman_dhcp_cleanup(); +diff --git a/src/service.c b/src/service.c +index bba548e..39ffda2 100644 +--- a/src/service.c ++++ b/src/service.c +@@ -3155,6 +3155,7 @@ static DBusMessage *set_property(DBusConnection *conn, + update_nameservers(service); + dns_configuration_changed(service); + ++#ifdef ENABLE_WISPR + if (__connman_service_is_connected_state(service, + CONNMAN_IPCONFIG_TYPE_IPV4)) + __connman_wispr_start(service, +@@ -3164,6 +3165,7 @@ static DBusMessage *set_property(DBusConnection *conn, + CONNMAN_IPCONFIG_TYPE_IPV6)) + __connman_wispr_start(service, + CONNMAN_IPCONFIG_TYPE_IPV6); ++#endif + + service_save(service); + } else if (g_str_equal(name, "Timeservers.Configuration") == TRUE) { +@@ -4272,7 +4274,9 @@ static void service_free(gpointer user_data) + __connman_notifier_service_remove(service); + service_schedule_removed(service); + ++#ifdef ENABLE_WISPR + __connman_wispr_stop(service); ++#endif + stats_stop(service); + + service->path = NULL; +@@ -5236,8 +5240,9 @@ static int service_indicate_state(struct connman_service *service) + + default_changed(); + ++#ifdef ENABLE_WISPR + __connman_wispr_stop(service); +- ++#endif + __connman_wpad_stop(service); + + update_nameservers(service); +@@ -5386,7 +5391,11 @@ static void check_proxy_setup(struct connman_service *service) + return; + + done: ++#ifdef ENABLE_WISPR + __connman_wispr_start(service, CONNMAN_IPCONFIG_TYPE_IPV4); ++#else ++ return; ++#endif + } + + /* +@@ -5448,7 +5457,9 @@ static gboolean redo_wispr(gpointer user_data) + + DBG(""); + ++#ifdef ENABLE_WISPR + __connman_wispr_start(service, CONNMAN_IPCONFIG_TYPE_IPV6); ++#endif + + return FALSE; + } +@@ -5474,7 +5485,9 @@ int __connman_service_online_check_failed(struct connman_service *service, + * necessary IPv6 router advertisement messages that might have + * DNS data etc. + */ ++#ifdef ENABLE_WISPR + g_timeout_add_seconds(1, redo_wispr, service); ++#endif + + return EAGAIN; + } +@@ -5529,7 +5542,9 @@ int __connman_service_ipconfig_indicate_state(struct connman_service *service, + service_rp_filter(service, TRUE); + } else { + service->online_check_count = 1; ++#ifdef ENABLE_WISPR + __connman_wispr_start(service, type); ++#endif + } + break; + case CONNMAN_SERVICE_STATE_ONLINE: +diff --git a/src/wpad.c b/src/wpad.c +index 4e5834e..8be310f 100644 +--- a/src/wpad.c ++++ b/src/wpad.c +@@ -85,8 +85,10 @@ static void wpad_result(GResolvResultStatus status, + + g_free(url); + ++#ifdef ENABLE_WISPR + __connman_wispr_start(wpad->service, + CONNMAN_IPCONFIG_TYPE_IPV4); ++#endif + + return; + } +@@ -117,8 +119,10 @@ failed: + connman_service_set_proxy_method(wpad->service, + CONNMAN_SERVICE_PROXY_METHOD_DIRECT); + ++#ifdef ENABLE_WISPR + __connman_wispr_start(wpad->service, + CONNMAN_IPCONFIG_TYPE_IPV4); ++#endif + } + + int __connman_wpad_start(struct connman_service *service) From 62b6e795cead7aeb5cbc8afcdf9a47147371dfe6 Mon Sep 17 00:00:00 2001 From: Stefan Saraev Date: Thu, 9 May 2013 00:18:48 +0300 Subject: [PATCH 17/17] connman: update to connman-76c47b9 --- packages/network/connman/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/network/connman/meta b/packages/network/connman/meta index a76fe681d2..9bdabcd53d 100644 --- a/packages/network/connman/meta +++ b/packages/network/connman/meta @@ -19,7 +19,7 @@ ################################################################################ PKG_NAME="connman" -PKG_VERSION="1aa44c8" +PKG_VERSION="76c47b9" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL"