Alsa-devel
Threads by month
- ----- 2025 -----
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- 17 participants
- 51109 discussions
The following changes since commit f8f5701bdaf9134b1f90e5044a82c66324d2073f:
Linux 3.5-rc1 (2012-06-02 18:29:26 -0700)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-3.5
for you to fetch changes up to 3ff1ec27e9f567824e73316025a9025528494506:
ASoC: wm2000: Always use a 4s timeout for the firmware (2012-06-08 07:00:13 +0800)
----------------------------------------------------------------
ASoC: Updates for 3.5
Some driver-specific updates, a few fixes for the dynamic PCM code and
the addition of pinctrl support for the i.MX audmux which didn't make it
into -rc1 due to cross tree dependency issues.
----------------------------------------------------------------
Liam Girdwood (3):
ASoC: dapm: Fix connected widget capture path query.
ASoC: dpcm: Fix dpcm_get_be() to check that DAI is BE
ASoC: dapm: Fix input list to use source widgets
Mark Brown (3):
ASoC: wm8994: Ensure all AIFnCLK events are run from the _late variants
ASoC: wm8994: Apply volume updates with clocks enabled
ASoC: wm2000: Always use a 4s timeout for the firmware
Richard Zhao (1):
ASoC: imx-audmux: add pinctrl support
sound/soc/codecs/wm2000.c | 59 +++++++++----------------
sound/soc/codecs/wm8994.c | 105 ++++++++++++++++++++++++++++----------------
sound/soc/fsl/imx-audmux.c | 8 ++++
sound/soc/soc-dapm.c | 4 +-
sound/soc/soc-pcm.c | 6 +++
5 files changed, 103 insertions(+), 79 deletions(-)
2
1
At Thu, 7 Jun 2012 08:17:35 +0000,
Jamie Heilman wrote:
>
> Takashi Iwai wrote:
> > At Thu, 7 Jun 2012 03:38:30 +0000,
> > Jamie Heilman wrote:
> > >
> > > With the USB audio streaming logic changes, my HeadRoom Bithead
> > > (08bb:2902 Burr-Brown PCM2902) no longer works. Symptoms include the
> > > loss of most of the normally available formats leaving only:
> > >
> > > root@cucamonga:~# cat /proc/asound/bithead/stream0
> > > Burr-Brown from TI USB Audio CODEC at usb-0000:00:1a.7-1.1.4, full speed : USB Audio
> > >
> > > Playback:
> > > Status: Stop
> > > Interface 1
> > > Altset 6
> > > Format: U8
> > > Channels: 1
> > > Endpoint: 2 OUT (ADAPTIVE)
> > > Rates: 32000, 44100, 48000
> > >
> > > Capture:
> > > Status: Stop
> > > Interface 2
> > > Altset 18
> > > Format: S8
> > > Channels: 1
> > > Endpoint: 4 IN (SYNC)
> > > Rates: 11025
> > >
> > > (normally 2 channel S16_LE is available, with capture rates up to
> > > 48kHz ... only the last altset's are being reported now) and a slew of
> > > proc registration warnings logged:
> > >
> > > ------------[ cut here ]------------
> > > WARNING: at fs/proc/generic.c:586 proc_register+0x169/0x1a6()
> > > Hardware name: Precision WorkStation T3400
> > > proc_dir_entry 'card1/pcm0p' already registered
> > > Modules linked in: snd_usb_audio(+) snd_usbmidi_lib snd_hda_intel(+) snd_hda_codec snd_hwdep snd_seq_midi snd_seq_midi_event snd_pcm snd_page_alloc snd_rawmidi snd_seq snd_seq_device snd_timer snd soundcore dcdbas floppy sr_mod usb_storage cdrom kvm_intel psmouse kvm tg3 evdev xfs dm_mod raid1 md_mod
> > > Pid: 1152, comm: modprobe Not tainted 3.5.0-rc1-00110-g71fae7e #2
> > > Call Trace:
> > > [<ffffffff8102a400>] warn_slowpath_common+0x83/0x9c
> > > [<ffffffff8102a4bc>] warn_slowpath_fmt+0x46/0x48
> > > [<ffffffff813829ad>] ? add_preempt_count+0x39/0x3b
> > > [<ffffffff811292f0>] proc_register+0x169/0x1a6
> > > [<ffffffff8112962e>] create_proc_entry+0x74/0x8c
> > > [<ffffffffa018eb63>] snd_info_register+0x3e/0xc3 [snd]
> > > [<ffffffffa01fde2e>] snd_pcm_new_stream+0xb1/0x404 [snd_pcm]
> > > [<ffffffffa024861f>] snd_usb_add_audio_stream+0xd2/0x230 [snd_usb_audio]
> > > [<ffffffffa0241d33>] ? snd_usb_parse_audio_format+0x252/0x34f [snd_usb_audio]
> > > [<ffffffff810d6b17>] ? kmem_cache_alloc_trace+0xab/0xbb
> > > [<ffffffffa0248c29>] snd_usb_parse_audio_interface+0x4ac/0x567 [snd_usb_audio]
> > > [<ffffffffa023f0ff>] snd_usb_create_stream+0xe9/0x125 [snd_usb_audio]
> > > [<ffffffffa023f9b1>] usb_audio_probe+0x62a/0x72c [snd_usb_audio]
> > > [<ffffffff812c49f5>] usb_probe_interface+0x136/0x1b1
> > > [<ffffffff81287e66>] ? driver_probe_device+0x1d3/0x1d3
> > > [<ffffffff81287d43>] driver_probe_device+0xb0/0x1d3
> > > [<ffffffff81287ec5>] __driver_attach+0x5f/0x83
> > > [<ffffffff812863a2>] bus_for_each_dev+0x54/0x86
> > > [<ffffffff81287730>] driver_attach+0x1e/0x20
> > > [<ffffffff8128747f>] bus_add_driver+0xfd/0x23a
> > > [<ffffffff812882e8>] driver_register+0x93/0x10e
> > > [<ffffffff812c383f>] usb_register_driver+0x7e/0x12a
> > > [<ffffffffa0257000>] ? 0xffffffffa0256fff
> > > [<ffffffffa0257000>] ? 0xffffffffa0256fff
> > > [<ffffffffa0257040>] snd_usb_audio_init+0x40/0x1000 [snd_usb_audio]
> > > [<ffffffff810001ff>] do_one_initcall+0x7f/0x134
> > > [<ffffffffa0257000>] ? 0xffffffffa0256fff
> > > [<ffffffff810688d4>] sys_init_module+0x16cf/0x195e
> > > [<ffffffff8106516c>] ? free_notes_attrs+0x4d/0x4d
> > > [<ffffffff810c38cb>] ? mmap_region+0x1c7/0x469
> > > [<ffffffff813856d2>] system_call_fastpath+0x16/0x1b
> > > ---[ end trace c1baea1a25a91564 ]---
> >
> > Looks like the PCM substream assignment is buggy.
> > Does the patch (untested at all) below help?
>
> Yep, that fixed it. Thanks!
OK, applied the fix now.
Thanks for quick testing.
Takashi
1
0

08 Jun '12
On Tue, Jun 05, 2012 at 09:59:42AM +0530, Prashant Gaikwad wrote:
> Use clk_prepare/clk_unprepare as required by the generic clk framework.
Acked-by: Mark Brown <broonie(a)opensource.wolfsonmicro.com>
1
0

[alsa-devel] [PATCH] asoc: bfin: add i2s driver for blackfin bf60x processor
by Scott Jiang 08 Jun '12
by Scott Jiang 08 Jun '12
08 Jun '12
This driver includes i2s dai, dma and sport driver. It enables i2s
mode support on blackfin bf60x platform.
Signed-off-by: Scott Jiang <scott.jiang.linux(a)gmail.com>
---
sound/soc/blackfin/Kconfig | 25 ++-
sound/soc/blackfin/Makefile | 6 +
sound/soc/blackfin/bf6xx-i2s-pcm.c | 294 +++++++++++++++++++++++++
sound/soc/blackfin/bf6xx-i2s.c | 245 +++++++++++++++++++++
sound/soc/blackfin/bf6xx-sport.c | 422 ++++++++++++++++++++++++++++++++++++
sound/soc/blackfin/bf6xx-sport.h | 82 +++++++
6 files changed, 1070 insertions(+), 4 deletions(-)
create mode 100644 sound/soc/blackfin/bf6xx-i2s-pcm.c
create mode 100644 sound/soc/blackfin/bf6xx-i2s.c
create mode 100644 sound/soc/blackfin/bf6xx-sport.c
create mode 100644 sound/soc/blackfin/bf6xx-sport.h
diff --git a/sound/soc/blackfin/Kconfig b/sound/soc/blackfin/Kconfig
index 9f6bc55..2822b6a 100644
--- a/sound/soc/blackfin/Kconfig
+++ b/sound/soc/blackfin/Kconfig
@@ -1,6 +1,6 @@
config SND_BF5XX_I2S
tristate "SoC I2S Audio for the ADI BF5xx chip"
- depends on BLACKFIN
+ depends on BLACKFIN && !BF60x
select SND_BF5XX_SOC_SPORT
help
Say Y or M if you want to add support for codecs attached to
@@ -8,10 +8,21 @@ config SND_BF5XX_I2S
mode (supports single stereo In/Out).
You will also need to select the audio interfaces to support below.
+config SND_BF6XX_I2S
+ tristate "SoC I2S Audio for the ADI BF6xx chip"
+ depends on BLACKFIN && BF60x
+ select SND_BF6XX_SOC_SPORT
+ help
+ Say Y or M if you want to add support for codecs attached to
+ the Blackfin SPORT (synchronous serial ports) interface in I2S
+ mode (supports single stereo In/Out).
+ You will also need to select the audio interfaces to support below.
+
config SND_BF5XX_SOC_SSM2602
tristate "SoC SSM2602 Audio support for BF52x ezkit"
- depends on SND_BF5XX_I2S && (SPI_MASTER || I2C)
- select SND_BF5XX_SOC_I2S
+ depends on (SND_BF5XX_I2S || SND_BF6XX_I2S) && (SPI_MASTER || I2C)
+ select SND_BF5XX_SOC_I2S if SND_BF5XX_I2S
+ select SND_BF6XX_SOC_I2S if SND_BF6XX_I2S
select SND_SOC_SSM2602
help
Say Y if you want to add support for SoC audio on BF527-EZKIT.
@@ -162,9 +173,15 @@ config SND_BF5XX_SOC_AD1980
config SND_BF5XX_SOC_SPORT
tristate
+config SND_BF6XX_SOC_SPORT
+ tristate
+
config SND_BF5XX_SOC_I2S
tristate
+config SND_BF6XX_SOC_I2S
+ tristate
+
config SND_BF5XX_SOC_TDM
tristate
@@ -173,7 +190,7 @@ config SND_BF5XX_SOC_AC97
config SND_BF5XX_SPORT_NUM
int "Set a SPORT for Sound chip"
- depends on (SND_BF5XX_I2S || SND_BF5XX_AC97 || SND_BF5XX_TDM)
+ depends on (BLACKFIN && SND_SOC)
range 0 3 if BF54x
range 0 1 if !BF54x
default 0
diff --git a/sound/soc/blackfin/Makefile b/sound/soc/blackfin/Makefile
index 1bf86cc..a05335a 100644
--- a/sound/soc/blackfin/Makefile
+++ b/sound/soc/blackfin/Makefile
@@ -1,18 +1,24 @@
# Blackfin Platform Support
snd-bf5xx-ac97-objs := bf5xx-ac97-pcm.o
snd-bf5xx-i2s-objs := bf5xx-i2s-pcm.o
+snd-bf6xx-i2s-objs := bf6xx-i2s-pcm.o
snd-bf5xx-tdm-objs := bf5xx-tdm-pcm.o
snd-soc-bf5xx-sport-objs := bf5xx-sport.o
+snd-soc-bf6xx-sport-objs := bf6xx-sport.o
snd-soc-bf5xx-ac97-objs := bf5xx-ac97.o
snd-soc-bf5xx-i2s-objs := bf5xx-i2s.o
+snd-soc-bf6xx-i2s-objs := bf6xx-i2s.o
snd-soc-bf5xx-tdm-objs := bf5xx-tdm.o
obj-$(CONFIG_SND_BF5XX_AC97) += snd-bf5xx-ac97.o
obj-$(CONFIG_SND_BF5XX_I2S) += snd-bf5xx-i2s.o
+obj-$(CONFIG_SND_BF6XX_I2S) += snd-bf6xx-i2s.o
obj-$(CONFIG_SND_BF5XX_TDM) += snd-bf5xx-tdm.o
obj-$(CONFIG_SND_BF5XX_SOC_SPORT) += snd-soc-bf5xx-sport.o
+obj-$(CONFIG_SND_BF6XX_SOC_SPORT) += snd-soc-bf6xx-sport.o
obj-$(CONFIG_SND_BF5XX_SOC_AC97) += snd-soc-bf5xx-ac97.o
obj-$(CONFIG_SND_BF5XX_SOC_I2S) += snd-soc-bf5xx-i2s.o
+obj-$(CONFIG_SND_BF6XX_SOC_I2S) += snd-soc-bf6xx-i2s.o
obj-$(CONFIG_SND_BF5XX_SOC_TDM) += snd-soc-bf5xx-tdm.o
# Blackfin Machine Support
diff --git a/sound/soc/blackfin/bf6xx-i2s-pcm.c b/sound/soc/blackfin/bf6xx-i2s-pcm.c
new file mode 100644
index 0000000..cc3216f
--- /dev/null
+++ b/sound/soc/blackfin/bf6xx-i2s-pcm.c
@@ -0,0 +1,294 @@
+/*
+ * bf6xx-i2s-pcm.c - Analog Devices BF6XX i2s dma driver
+ *
+ * Copyright (c) 2012 Analog Devices Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * 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 <linux/device.h>
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/mm.h>
+#include <linux/types.h>
+#include <sound/pcm.h>
+#include <sound/pcm_params.h>
+#include <sound/soc.h>
+#include <sound/soc-dai.h>
+
+#include "bf6xx-sport.h"
+
+
+#include <linux/dma-mapping.h>
+#include <linux/gfp.h>
+#include <asm/dma.h>
+
+static void bfin_dma_irq(void *data)
+{
+ struct snd_pcm_substream *pcm = data;
+ snd_pcm_period_elapsed(pcm);
+}
+
+static const struct snd_pcm_hardware bfin_pcm_hardware = {
+ .info = SNDRV_PCM_INFO_INTERLEAVED |
+ SNDRV_PCM_INFO_MMAP |
+ SNDRV_PCM_INFO_MMAP_VALID |
+ SNDRV_PCM_INFO_BLOCK_TRANSFER,
+ .formats = SNDRV_PCM_FMTBIT_S16_LE |
+ SNDRV_PCM_FMTBIT_S24_LE |
+ SNDRV_PCM_FMTBIT_S32_LE,
+ .period_bytes_min = 32,
+ .period_bytes_max = 0x10000,
+ .periods_min = 1,
+ .periods_max = PAGE_SIZE/32,
+ .buffer_bytes_max = 0x20000, /* 128 kbytes */
+ .fifo_size = 16,
+};
+
+static int bfin_pcm_hw_params(struct snd_pcm_substream *substream,
+ struct snd_pcm_hw_params *params)
+{
+ size_t size = bfin_pcm_hardware.buffer_bytes_max;
+ snd_pcm_lib_malloc_pages(substream, size);
+
+ return 0;
+}
+
+static int bfin_pcm_hw_free(struct snd_pcm_substream *substream)
+{
+ snd_pcm_lib_free_pages(substream);
+
+ return 0;
+}
+
+static int bfin_pcm_prepare(struct snd_pcm_substream *substream)
+{
+ struct snd_pcm_runtime *runtime = substream->runtime;
+ struct sport_device *sport = runtime->private_data;
+ int period_bytes = frames_to_bytes(runtime, runtime->period_size);
+
+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
+ sport_set_tx_callback(sport, bfin_dma_irq, substream);
+ sport_config_tx_dma(sport, runtime->dma_area,
+ runtime->periods, period_bytes);
+ } else {
+ sport_set_rx_callback(sport, bfin_dma_irq, substream);
+ sport_config_rx_dma(sport, runtime->dma_area,
+ runtime->periods, period_bytes);
+ }
+
+ return 0;
+}
+
+static int bfin_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
+{
+ struct snd_pcm_runtime *runtime = substream->runtime;
+ struct sport_device *sport = runtime->private_data;
+ int ret = 0;
+
+ switch (cmd) {
+ case SNDRV_PCM_TRIGGER_START:
+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
+ sport_tx_start(sport);
+ else
+ sport_rx_start(sport);
+ break;
+ case SNDRV_PCM_TRIGGER_STOP:
+ case SNDRV_PCM_TRIGGER_SUSPEND:
+ case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
+ sport_tx_stop(sport);
+ else
+ sport_rx_stop(sport);
+ break;
+ default:
+ ret = -EINVAL;
+ }
+
+ return ret;
+}
+
+static snd_pcm_uframes_t bfin_pcm_pointer(struct snd_pcm_substream *substream)
+{
+ struct snd_pcm_runtime *runtime = substream->runtime;
+ struct sport_device *sport = runtime->private_data;
+ unsigned int diff;
+ snd_pcm_uframes_t frames;
+
+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
+ diff = sport_curr_offset_tx(sport);
+ } else {
+ diff = sport_curr_offset_rx(sport);
+ }
+
+ /*
+ * TX at least can report one frame beyond the end of the
+ * buffer if we hit the wraparound case - clamp to within the
+ * buffer as the ALSA APIs require.
+ */
+ if (diff == snd_pcm_lib_buffer_bytes(substream))
+ diff = 0;
+
+ frames = bytes_to_frames(substream->runtime, diff);
+
+ return frames;
+}
+
+static int bfin_pcm_open(struct snd_pcm_substream *substream)
+{
+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
+ struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
+ struct sport_device *sport = snd_soc_dai_get_drvdata(cpu_dai);
+ struct snd_pcm_runtime *runtime = substream->runtime;
+ int ret;
+
+ snd_soc_set_runtime_hwparams(substream, &bfin_pcm_hardware);
+
+ ret = snd_pcm_hw_constraint_integer(runtime,
+ SNDRV_PCM_HW_PARAM_PERIODS);
+ if (ret < 0)
+ return ret;
+
+ runtime->private_data = sport;
+ return 0;
+}
+
+static int bfin_pcm_mmap(struct snd_pcm_substream *substream,
+ struct vm_area_struct *vma)
+{
+ struct snd_pcm_runtime *runtime = substream->runtime;
+ size_t size = vma->vm_end - vma->vm_start;
+ vma->vm_start = (unsigned long)runtime->dma_area;
+ vma->vm_end = vma->vm_start + size;
+ vma->vm_flags |= VM_SHARED;
+
+ return 0 ;
+}
+
+static struct snd_pcm_ops bfin_pcm_i2s_ops = {
+ .open = bfin_pcm_open,
+ .ioctl = snd_pcm_lib_ioctl,
+ .hw_params = bfin_pcm_hw_params,
+ .hw_free = bfin_pcm_hw_free,
+ .prepare = bfin_pcm_prepare,
+ .trigger = bfin_pcm_trigger,
+ .pointer = bfin_pcm_pointer,
+ .mmap = bfin_pcm_mmap,
+};
+
+static int bfin_pcm_preallocate_dma_buffer(struct snd_pcm *pcm, int stream)
+{
+ struct snd_pcm_substream *substream = pcm->streams[stream].substream;
+ struct snd_dma_buffer *buf = &substream->dma_buffer;
+ size_t size = bfin_pcm_hardware.buffer_bytes_max;
+
+ buf->dev.type = SNDRV_DMA_TYPE_DEV;
+ buf->dev.dev = pcm->card->dev;
+ buf->private_data = NULL;
+ buf->area = dma_alloc_coherent(pcm->card->dev, size,
+ &buf->addr, GFP_KERNEL);
+ if (!buf->area)
+ return -ENOMEM;
+ buf->bytes = size;
+
+ return 0;
+}
+
+static void bfin_pcm_free_dma_buffers(struct snd_pcm *pcm)
+{
+ struct snd_pcm_substream *substream;
+ struct snd_dma_buffer *buf;
+ int stream;
+
+ for (stream = 0; stream < 2; stream++) {
+ substream = pcm->streams[stream].substream;
+ if (!substream)
+ continue;
+
+ buf = &substream->dma_buffer;
+ if (!buf->area)
+ continue;
+ dma_free_coherent(NULL, buf->bytes, buf->area, 0);
+ buf->area = NULL;
+ }
+}
+
+static u64 bfin_pcm_dmamask = DMA_BIT_MASK(32);
+
+int bfin_pcm_i2s_new(struct snd_soc_pcm_runtime *rtd)
+{
+ struct snd_card *card = rtd->card->snd_card;
+ struct snd_soc_dai *dai = rtd->cpu_dai;
+ struct snd_pcm *pcm = rtd->pcm;
+ int ret = 0;
+
+ if (!card->dev->dma_mask)
+ card->dev->dma_mask = &bfin_pcm_dmamask;
+ if (!card->dev->coherent_dma_mask)
+ card->dev->coherent_dma_mask = DMA_BIT_MASK(32);
+
+ if (dai->driver->playback.channels_min) {
+ ret = bfin_pcm_preallocate_dma_buffer(pcm,
+ SNDRV_PCM_STREAM_PLAYBACK);
+ if (ret)
+ return ret;
+ }
+
+ if (dai->driver->capture.channels_min)
+ ret = bfin_pcm_preallocate_dma_buffer(pcm,
+ SNDRV_PCM_STREAM_CAPTURE);
+ return ret;
+}
+
+static struct snd_soc_platform_driver bfin_i2s_soc_platform = {
+ .ops = &bfin_pcm_i2s_ops,
+ .pcm_new = bfin_pcm_i2s_new,
+ .pcm_free = bfin_pcm_free_dma_buffers,
+};
+
+static int __devinit bfin_i2s_soc_platform_probe(struct platform_device *pdev)
+{
+ return snd_soc_register_platform(&pdev->dev, &bfin_i2s_soc_platform);
+}
+
+static int __devexit bfin_i2s_soc_platform_remove(struct platform_device *pdev)
+{
+ snd_soc_unregister_platform(&pdev->dev);
+ return 0;
+}
+
+static struct platform_driver bfin_i2s_pcm_driver = {
+ .driver = {
+ .name = "bfin-i2s-pcm-audio",
+ .owner = THIS_MODULE,
+ },
+ .probe = bfin_i2s_soc_platform_probe,
+ .remove = __devexit_p(bfin_i2s_soc_platform_remove),
+};
+
+static int __init snd_bfin_i2s_pcm_init(void)
+{
+ return platform_driver_register(&bfin_i2s_pcm_driver);
+}
+module_init(snd_bfin_i2s_pcm_init);
+
+static void __exit snd_bfin_i2s_pcm_exit(void)
+{
+ platform_driver_unregister(&bfin_i2s_pcm_driver);
+}
+module_exit(snd_bfin_i2s_pcm_exit);
+
+MODULE_DESCRIPTION("Analog Devices BF6XX i2s dma driver");
+MODULE_AUTHOR("Scott Jiang <Scott.Jiang.Linux(a)gmail.com>");
+MODULE_LICENSE("GPL v2");
diff --git a/sound/soc/blackfin/bf6xx-i2s.c b/sound/soc/blackfin/bf6xx-i2s.c
new file mode 100644
index 0000000..c4a5499
--- /dev/null
+++ b/sound/soc/blackfin/bf6xx-i2s.c
@@ -0,0 +1,245 @@
+/*
+ * bf6xx-i2s.c - Analog Devices BF6XX i2s interface driver
+ *
+ * Copyright (c) 2012 Analog Devices Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * 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 <linux/device.h>
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <sound/pcm.h>
+#include <sound/pcm_params.h>
+#include <sound/soc.h>
+#include <sound/soc-dai.h>
+
+#include "bf6xx-sport.h"
+
+struct sport_params param;
+
+static int bfin_i2s_set_dai_fmt(struct snd_soc_dai *cpu_dai,
+ unsigned int fmt)
+{
+ struct sport_device *sport = snd_soc_dai_get_drvdata(cpu_dai);
+ struct device *dev = &sport->pdev->dev;
+ int ret = 0;
+
+ param.spctl &= ~(SPORT_CTL_OPMODE | SPORT_CTL_CKRE | SPORT_CTL_FSR
+ | SPORT_CTL_LFS | SPORT_CTL_LAFS);
+ switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
+ case SND_SOC_DAIFMT_I2S:
+ param.spctl |= SPORT_CTL_OPMODE | SPORT_CTL_CKRE
+ | SPORT_CTL_LFS;
+ break;
+ case SND_SOC_DAIFMT_DSP_A:
+ param.spctl |= SPORT_CTL_FSR;
+ break;
+ case SND_SOC_DAIFMT_LEFT_J:
+ param.spctl |= SPORT_CTL_OPMODE | SPORT_CTL_LFS
+ | SPORT_CTL_LAFS;
+ break;
+ default:
+ dev_err(dev, "%s: Unknown DAI format type\n", __func__);
+ ret = -EINVAL;
+ break;
+ }
+
+ param.spctl &= ~(SPORT_CTL_ICLK | SPORT_CTL_IFS);
+ switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
+ case SND_SOC_DAIFMT_CBM_CFM:
+ break;
+ case SND_SOC_DAIFMT_CBS_CFS:
+ case SND_SOC_DAIFMT_CBM_CFS:
+ case SND_SOC_DAIFMT_CBS_CFM:
+ ret = -EINVAL;
+ break;
+ default:
+ dev_err(dev, "%s: Unknown DAI master type\n", __func__);
+ ret = -EINVAL;
+ break;
+ }
+
+ return ret;
+}
+
+static int bfin_i2s_hw_params(struct snd_pcm_substream *substream,
+ struct snd_pcm_hw_params *params,
+ struct snd_soc_dai *dai)
+{
+ struct sport_device *sport = snd_soc_dai_get_drvdata(dai);
+ struct device *dev = &sport->pdev->dev;
+ int ret = 0;
+
+ param.spctl &= ~SPORT_CTL_SLEN;
+ switch (params_format(params)) {
+ case SNDRV_PCM_FORMAT_S8:
+ param.spctl |= 0x70;
+ sport->wdsize = 1;
+ case SNDRV_PCM_FORMAT_S16_LE:
+ param.spctl |= 0xf0;
+ sport->wdsize = 2;
+ break;
+ case SNDRV_PCM_FORMAT_S24_LE:
+ param.spctl |= 0x170;
+ sport->wdsize = 3;
+ break;
+ case SNDRV_PCM_FORMAT_S32_LE:
+ param.spctl |= 0x1f0;
+ sport->wdsize = 4;
+ break;
+ }
+
+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
+ ret = sport_set_tx_params(sport, ¶m);
+ if (ret) {
+ dev_err(dev, "SPORT tx is busy!\n");
+ return ret;
+ }
+ } else {
+ ret = sport_set_rx_params(sport, ¶m);
+ if (ret) {
+ dev_err(dev, "SPORT rx is busy!\n");
+ return ret;
+ }
+ }
+ return 0;
+}
+
+#ifdef CONFIG_PM
+static int bfin_i2s_suspend(struct snd_soc_dai *dai)
+{
+ struct sport_device *sport = snd_soc_dai_get_drvdata(dai);
+
+ if (dai->capture_active)
+ sport_rx_stop(sport);
+ if (dai->playback_active)
+ sport_tx_stop(sport);
+ return 0;
+}
+
+static int bfin_i2s_resume(struct snd_soc_dai *dai)
+{
+ struct sport_device *sport = snd_soc_dai_get_drvdata(dai);
+ struct device *dev = &sport->pdev->dev;
+ int ret;
+
+ ret = sport_set_tx_params(sport, ¶m);
+ if (ret) {
+ dev_err(dev, "SPORT tx is busy!\n");
+ return ret;
+ }
+ ret = sport_set_rx_params(sport, ¶m);
+ if (ret) {
+ dev_err(dev, "SPORT rx is busy!\n");
+ return ret;
+ }
+
+ return 0;
+}
+
+#else
+#define bfin_i2s_suspend NULL
+#define bfin_i2s_resume NULL
+#endif
+
+#define BFIN_I2S_RATES (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 |\
+ SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 | \
+ SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 | \
+ SNDRV_PCM_RATE_96000)
+
+#define BFIN_I2S_FORMATS (SNDRV_PCM_FMTBIT_S8 | SNDRV_PCM_FMTBIT_S16_LE | \
+ SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
+
+static struct snd_soc_dai_ops bfin_i2s_dai_ops = {
+ .hw_params = bfin_i2s_hw_params,
+ .set_fmt = bfin_i2s_set_dai_fmt,
+};
+
+static struct snd_soc_dai_driver bfin_i2s_dai = {
+ .suspend = bfin_i2s_suspend,
+ .resume = bfin_i2s_resume,
+ .playback = {
+ .channels_min = 1,
+ .channels_max = 2,
+ .rates = BFIN_I2S_RATES,
+ .formats = BFIN_I2S_FORMATS,
+ },
+ .capture = {
+ .channels_min = 1,
+ .channels_max = 2,
+ .rates = BFIN_I2S_RATES,
+ .formats = BFIN_I2S_FORMATS,
+ },
+ .ops = &bfin_i2s_dai_ops,
+};
+
+static int __devinit bfin_i2s_probe(struct platform_device *pdev)
+{
+ struct sport_device *sport;
+ struct device *dev = &pdev->dev;
+ int ret;
+
+ sport = sport_create(pdev);
+ if (!sport)
+ return -ENODEV;
+
+ /* register with the ASoC layers */
+ ret = snd_soc_register_dai(dev, &bfin_i2s_dai);
+ if (ret) {
+ dev_err(dev, "Failed to register DAI: %d\n", ret);
+ sport_delete(sport);
+ return ret;
+ }
+ platform_set_drvdata(pdev, sport);
+
+ return 0;
+}
+
+static int __devexit bfin_i2s_remove(struct platform_device *pdev)
+{
+ struct sport_device *sport = platform_get_drvdata(pdev);
+
+ snd_soc_unregister_dai(&pdev->dev);
+ sport_delete(sport);
+
+ return 0;
+}
+
+static struct platform_driver bfin_i2s_driver = {
+ .probe = bfin_i2s_probe,
+ .remove = __devexit_p(bfin_i2s_remove),
+ .driver = {
+ .name = "bfin-i2s",
+ .owner = THIS_MODULE,
+ },
+};
+
+static int __init bfin_i2s_init(void)
+{
+ return platform_driver_register(&bfin_i2s_driver);
+}
+
+static void __exit bfin_i2s_exit(void)
+{
+ platform_driver_unregister(&bfin_i2s_driver);
+}
+
+module_init(bfin_i2s_init);
+module_exit(bfin_i2s_exit);
+
+MODULE_DESCRIPTION("Analog Devices BF6XX i2s interface driver");
+MODULE_AUTHOR("Scott Jiang <Scott.Jiang.Linux(a)gmail.com>");
+MODULE_LICENSE("GPL v2");
diff --git a/sound/soc/blackfin/bf6xx-sport.c b/sound/soc/blackfin/bf6xx-sport.c
new file mode 100644
index 0000000..ea4b844
--- /dev/null
+++ b/sound/soc/blackfin/bf6xx-sport.c
@@ -0,0 +1,422 @@
+/*
+ * bf6xx_sport.c Analog Devices BF6XX SPORT driver
+ *
+ * Copyright (c) 2012 Analog Devices Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * 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 <linux/device.h>
+#include <linux/dma-mapping.h>
+#include <linux/interrupt.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/slab.h>
+
+#include <asm/blackfin.h>
+#include <asm/dma.h>
+#include <asm/portmux.h>
+
+#include "bf6xx-sport.h"
+
+int sport_set_tx_params(struct sport_device *sport,
+ struct sport_params *params)
+{
+ if (sport->tx_regs->spctl & SPORT_CTL_SPENPRI)
+ return -EBUSY;
+ sport->tx_regs->spctl = params->spctl | SPORT_CTL_SPTRAN;
+ sport->tx_regs->div = params->div;
+ SSYNC();
+ return 0;
+}
+EXPORT_SYMBOL(sport_set_tx_params);
+
+int sport_set_rx_params(struct sport_device *sport,
+ struct sport_params *params)
+{
+ if (sport->rx_regs->spctl & SPORT_CTL_SPENPRI)
+ return -EBUSY;
+ sport->rx_regs->spctl = params->spctl & ~SPORT_CTL_SPTRAN;
+ sport->rx_regs->div = params->div;
+ SSYNC();
+ return 0;
+}
+EXPORT_SYMBOL(sport_set_rx_params);
+
+static int compute_wdsize(size_t wdsize)
+{
+ switch (wdsize) {
+ case 1:
+ return WDSIZE_8 | PSIZE_8;
+ case 2:
+ return WDSIZE_16 | PSIZE_16;
+ default:
+ return WDSIZE_32 | PSIZE_32;
+ }
+}
+
+void sport_tx_start(struct sport_device *sport)
+{
+ set_dma_next_desc_addr(sport->tx_dma_chan, sport->tx_desc);
+ set_dma_config(sport->tx_dma_chan, DMAFLOW_LIST | DI_EN
+ | compute_wdsize(sport->wdsize) | NDSIZE_6);
+ enable_dma(sport->tx_dma_chan);
+ sport->tx_regs->spctl |= SPORT_CTL_SPENPRI;
+ SSYNC();
+}
+EXPORT_SYMBOL(sport_tx_start);
+
+void sport_rx_start(struct sport_device *sport)
+{
+ set_dma_next_desc_addr(sport->rx_dma_chan, sport->rx_desc);
+ set_dma_config(sport->rx_dma_chan, DMAFLOW_LIST | DI_EN | WNR
+ | compute_wdsize(sport->wdsize) | NDSIZE_6);
+ enable_dma(sport->rx_dma_chan);
+ sport->rx_regs->spctl |= SPORT_CTL_SPENPRI;
+ SSYNC();
+}
+EXPORT_SYMBOL(sport_rx_start);
+
+void sport_tx_stop(struct sport_device *sport)
+{
+ sport->tx_regs->spctl &= ~SPORT_CTL_SPENPRI;
+ SSYNC();
+ disable_dma(sport->tx_dma_chan);
+}
+EXPORT_SYMBOL(sport_tx_stop);
+
+void sport_rx_stop(struct sport_device *sport)
+{
+ sport->rx_regs->spctl &= ~SPORT_CTL_SPENPRI;
+ SSYNC();
+ disable_dma(sport->rx_dma_chan);
+}
+EXPORT_SYMBOL(sport_rx_stop);
+
+void sport_set_tx_callback(struct sport_device *sport,
+ void (*tx_callback)(void *), void *tx_data)
+{
+ sport->tx_callback = tx_callback;
+ sport->tx_data = tx_data;
+}
+EXPORT_SYMBOL(sport_set_tx_callback);
+
+void sport_set_rx_callback(struct sport_device *sport,
+ void (*rx_callback)(void *), void *rx_data)
+{
+ sport->rx_callback = rx_callback;
+ sport->rx_data = rx_data;
+}
+EXPORT_SYMBOL(sport_set_rx_callback);
+
+static void setup_desc(struct dmasg *desc, void *buf, int fragcount,
+ size_t fragsize, unsigned int cfg,
+ unsigned int count, size_t wdsize)
+{
+
+ int i;
+
+ for (i = 0; i < fragcount; ++i) {
+ desc[i].next_desc_addr = &(desc[i + 1]);
+ desc[i].start_addr = (unsigned long)buf + i*fragsize;
+ desc[i].cfg = cfg;
+ desc[i].x_count = count;
+ desc[i].x_modify = wdsize;
+ desc[i].y_count = 0;
+ desc[i].y_modify = 0;
+ }
+
+ /* make circular */
+ desc[fragcount-1].next_desc_addr = desc;
+}
+
+int sport_config_tx_dma(struct sport_device *sport, void *buf,
+ int fragcount, size_t fragsize)
+{
+ unsigned int count;
+ unsigned int cfg;
+ dma_addr_t addr;
+
+ count = fragsize/sport->wdsize;
+
+ if (sport->tx_desc)
+ dma_free_coherent(NULL, sport->tx_desc_size,
+ sport->tx_desc, 0);
+
+ sport->tx_desc = dma_alloc_coherent(NULL,
+ fragcount * sizeof(struct dmasg), &addr, 0);
+ sport->tx_desc_size = fragcount * sizeof(struct dmasg);
+ if (!sport->tx_desc)
+ return -ENOMEM;
+
+ sport->tx_buf = buf;
+ sport->tx_fragsize = fragsize;
+ sport->tx_frags = fragcount;
+ cfg = DMAFLOW_LIST | DI_EN | compute_wdsize(sport->wdsize) | NDSIZE_6;
+
+ setup_desc(sport->tx_desc, buf, fragcount, fragsize,
+ cfg|DMAEN, count, sport->wdsize);
+
+ return 0;
+}
+EXPORT_SYMBOL(sport_config_tx_dma);
+
+int sport_config_rx_dma(struct sport_device *sport, void *buf,
+ int fragcount, size_t fragsize)
+{
+ unsigned int count;
+ unsigned int cfg;
+ dma_addr_t addr;
+
+ count = fragsize/sport->wdsize;
+
+ if (sport->rx_desc)
+ dma_free_coherent(NULL, sport->rx_desc_size,
+ sport->rx_desc, 0);
+
+ sport->rx_desc = dma_alloc_coherent(NULL,
+ fragcount * sizeof(struct dmasg), &addr, 0);
+ sport->rx_desc_size = fragcount * sizeof(struct dmasg);
+ if (!sport->rx_desc)
+ return -ENOMEM;
+
+ sport->rx_buf = buf;
+ sport->rx_fragsize = fragsize;
+ sport->rx_frags = fragcount;
+ cfg = DMAFLOW_LIST | DI_EN | compute_wdsize(sport->wdsize)
+ | WNR | NDSIZE_6;
+
+ setup_desc(sport->rx_desc, buf, fragcount, fragsize,
+ cfg|DMAEN, count, sport->wdsize);
+
+ return 0;
+}
+EXPORT_SYMBOL(sport_config_rx_dma);
+
+unsigned long sport_curr_offset_tx(struct sport_device *sport)
+{
+ unsigned long curr = get_dma_curr_addr(sport->tx_dma_chan);
+
+ return (unsigned char *)curr - sport->tx_buf;
+}
+EXPORT_SYMBOL(sport_curr_offset_tx);
+
+unsigned long sport_curr_offset_rx(struct sport_device *sport)
+{
+ unsigned long curr = get_dma_curr_addr(sport->rx_dma_chan);
+
+ return (unsigned char *)curr - sport->rx_buf;
+}
+EXPORT_SYMBOL(sport_curr_offset_rx);
+
+static irqreturn_t sport_tx_irq(int irq, void *dev_id)
+{
+ struct sport_device *sport = dev_id;
+ static unsigned long status;
+
+ status = get_dma_curr_irqstat(sport->tx_dma_chan);
+ if (status & (DMA_DONE|DMA_ERR)) {
+ clear_dma_irqstat(sport->tx_dma_chan);
+ SSYNC();
+ }
+ if (sport->tx_callback)
+ sport->tx_callback(sport->tx_data);
+ return IRQ_HANDLED;
+}
+
+static irqreturn_t sport_rx_irq(int irq, void *dev_id)
+{
+ struct sport_device *sport = dev_id;
+ unsigned long status;
+
+ status = get_dma_curr_irqstat(sport->rx_dma_chan);
+ if (status & (DMA_DONE|DMA_ERR)) {
+ clear_dma_irqstat(sport->rx_dma_chan);
+ SSYNC();
+ }
+ if (sport->rx_callback)
+ sport->rx_callback(sport->rx_data);
+ return IRQ_HANDLED;
+}
+
+static irqreturn_t sport_err_irq(int irq, void *dev_id)
+{
+ struct sport_device *sport = dev_id;
+ struct device *dev = &sport->pdev->dev;
+
+ if (sport->tx_regs->spctl & SPORT_CTL_DERRPRI)
+ dev_dbg(dev, "sport error: TUVF\n");
+ if (sport->rx_regs->spctl & SPORT_CTL_DERRPRI)
+ dev_dbg(dev, "sport error: ROVF\n");
+
+ return IRQ_HANDLED;
+}
+
+static int sport_get_resource(struct sport_device *sport)
+{
+ struct platform_device *pdev = sport->pdev;
+ struct device *dev = &pdev->dev;
+ struct bfin_snd_platform_data *pdata = dev->platform_data;
+ struct resource *res;
+
+ if (!pdata) {
+ dev_err(dev, "No platform data\n");
+ return -ENODEV;
+ }
+ sport->pin_req = pdata->pin_req;
+
+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ if (!res) {
+ dev_err(dev, "No tx MEM resource\n");
+ return -ENODEV;
+ }
+ sport->tx_regs = (struct sport_register *)res->start;
+
+ res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
+ if (!res) {
+ dev_err(dev, "No rx MEM resource\n");
+ return -ENODEV;
+ }
+ sport->rx_regs = (struct sport_register *)res->start;
+
+ res = platform_get_resource(pdev, IORESOURCE_DMA, 0);
+ if (!res) {
+ dev_err(dev, "No tx DMA resource\n");
+ return -ENODEV;
+ }
+ sport->tx_dma_chan = res->start;
+
+ res = platform_get_resource(pdev, IORESOURCE_DMA, 1);
+ if (!res) {
+ dev_err(dev, "No rx DMA resource\n");
+ return -ENODEV;
+ }
+ sport->rx_dma_chan = res->start;
+
+ res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
+ if (!res) {
+ dev_err(dev, "No tx error irq resource\n");
+ return -ENODEV;
+ }
+ sport->tx_err_irq = res->start;
+
+ res = platform_get_resource(pdev, IORESOURCE_IRQ, 1);
+ if (!res) {
+ dev_err(dev, "No rx error irq resource\n");
+ return -ENODEV;
+ }
+ sport->rx_err_irq = res->start;
+
+ return 0;
+}
+
+static int sport_request_resource(struct sport_device *sport)
+{
+ struct device *dev = &sport->pdev->dev;
+ int ret;
+
+ ret = peripheral_request_list(sport->pin_req, "soc-audio");
+ if (ret) {
+ dev_err(dev, "Unable to request sport pin\n");
+ return ret;
+ }
+
+ ret = request_dma(sport->tx_dma_chan, "SPORT TX Data");
+ if (ret) {
+ dev_err(dev, "Unable to allocate DMA channel for sport tx\n");
+ goto err_tx_dma;
+ }
+ set_dma_callback(sport->tx_dma_chan, sport_tx_irq, sport);
+
+ ret = request_dma(sport->rx_dma_chan, "SPORT RX Data");
+ if (ret) {
+ dev_err(dev, "Unable to allocate DMA channel for sport rx\n");
+ goto err_rx_dma;
+ }
+ set_dma_callback(sport->rx_dma_chan, sport_rx_irq, sport);
+
+ ret = request_irq(sport->tx_err_irq, sport_err_irq,
+ 0, "SPORT TX ERROR", sport);
+ if (ret) {
+ dev_err(dev, "Unable to allocate tx error IRQ for sport\n");
+ goto err_tx_irq;
+ }
+
+ ret = request_irq(sport->rx_err_irq, sport_err_irq,
+ 0, "SPORT RX ERROR", sport);
+ if (ret) {
+ dev_err(dev, "Unable to allocate rx error IRQ for sport\n");
+ goto err_rx_irq;
+ }
+
+ return 0;
+err_rx_irq:
+ free_irq(sport->tx_err_irq, sport);
+err_tx_irq:
+ free_dma(sport->rx_dma_chan);
+err_rx_dma:
+ free_dma(sport->tx_dma_chan);
+err_tx_dma:
+ peripheral_free_list(sport->pin_req);
+ return ret;
+}
+
+static void sport_free_resource(struct sport_device *sport)
+{
+ free_irq(sport->rx_err_irq, sport);
+ free_irq(sport->tx_err_irq, sport);
+ free_dma(sport->rx_dma_chan);
+ free_dma(sport->tx_dma_chan);
+ peripheral_free_list(sport->pin_req);
+}
+
+struct sport_device *sport_create(struct platform_device *pdev)
+{
+ struct device *dev = &pdev->dev;
+ struct sport_device *sport;
+ int ret;
+
+ sport = kzalloc(sizeof(*sport), GFP_KERNEL);
+ if (!sport) {
+ dev_err(dev, "Unable to allocate memory for sport device\n");
+ return NULL;
+ }
+ sport->pdev = pdev;
+
+ ret = sport_get_resource(sport);
+ if (ret) {
+ kfree(sport);
+ return NULL;
+ }
+
+ ret = sport_request_resource(sport);
+ if (ret) {
+ kfree(sport);
+ return NULL;
+ }
+
+ dev_info(dev, "SPORT create success\n");
+ return sport;
+}
+EXPORT_SYMBOL(sport_create);
+
+void sport_delete(struct sport_device *sport)
+{
+ sport_free_resource(sport);
+}
+EXPORT_SYMBOL(sport_delete);
+
+MODULE_DESCRIPTION("Analog Devices BF6XX SPORT driver");
+MODULE_AUTHOR("Scott Jiang <Scott.Jiang.Linux(a)gmail.com>");
+MODULE_LICENSE("GPL v2");
diff --git a/sound/soc/blackfin/bf6xx-sport.h b/sound/soc/blackfin/bf6xx-sport.h
new file mode 100644
index 0000000..307d193
--- /dev/null
+++ b/sound/soc/blackfin/bf6xx-sport.h
@@ -0,0 +1,82 @@
+/*
+ * bf6xx_sport - Analog Devices BF6XX SPORT driver
+ *
+ * Copyright (c) 2012 Analog Devices Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * 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 _BF6XX_SPORT_H_
+#define _BF6XX_SPORT_H_
+
+#include <linux/platform_device.h>
+#include <asm/bfin_sport3.h>
+
+struct sport_device {
+ struct platform_device *pdev;
+ const unsigned short *pin_req;
+ struct sport_register *tx_regs;
+ struct sport_register *rx_regs;
+ int tx_dma_chan;
+ int rx_dma_chan;
+ int tx_err_irq;
+ int rx_err_irq;
+
+ void (*tx_callback)(void *data);
+ void *tx_data;
+ void (*rx_callback)(void *data);
+ void *rx_data;
+
+ struct dmasg *tx_desc;
+ struct dmasg *rx_desc;
+ unsigned int tx_desc_size;
+ unsigned int rx_desc_size;
+ unsigned char *tx_buf;
+ unsigned char *rx_buf;
+ unsigned int tx_fragsize;
+ unsigned int rx_fragsize;
+ unsigned int tx_frags;
+ unsigned int rx_frags;
+ unsigned int wdsize;
+};
+
+struct sport_params {
+ u32 spctl;
+ u32 div;
+};
+
+struct sport_device *sport_create(struct platform_device *pdev);
+void sport_delete(struct sport_device *sport);
+int sport_set_tx_params(struct sport_device *sport,
+ struct sport_params *params);
+int sport_set_rx_params(struct sport_device *sport,
+ struct sport_params *params);
+void sport_tx_start(struct sport_device *sport);
+void sport_rx_start(struct sport_device *sport);
+void sport_tx_stop(struct sport_device *sport);
+void sport_rx_stop(struct sport_device *sport);
+void sport_set_tx_callback(struct sport_device *sport,
+ void (*tx_callback)(void *), void *tx_data);
+void sport_set_rx_callback(struct sport_device *sport,
+ void (*rx_callback)(void *), void *rx_data);
+int sport_config_tx_dma(struct sport_device *sport, void *buf,
+ int fragcount, size_t fragsize);
+int sport_config_rx_dma(struct sport_device *sport, void *buf,
+ int fragcount, size_t fragsize);
+unsigned long sport_curr_offset_tx(struct sport_device *sport);
+unsigned long sport_curr_offset_rx(struct sport_device *sport);
+
+
+
+#endif
--
1.7.0.4
2
3

[alsa-devel] [PATCH] ASoC: tegra: add MODULE_DEVICE_TABLE to tegra30_ahub
by Stephen Warren 08 Jun '12
by Stephen Warren 08 Jun '12
08 Jun '12
From: Stephen Warren <swarren(a)nvidia.com>
This allows the module to automatically load when instantiated from
device tree.
Signed-off-by: Stephen Warren <swarren(a)nvidia.com>
---
This is useful in 3.5.
sound/soc/tegra/tegra30_ahub.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/sound/soc/tegra/tegra30_ahub.c b/sound/soc/tegra/tegra30_ahub.c
index 57cd419..f43edb3 100644
--- a/sound/soc/tegra/tegra30_ahub.c
+++ b/sound/soc/tegra/tegra30_ahub.c
@@ -629,3 +629,4 @@ MODULE_AUTHOR("Stephen Warren <swarren(a)nvidia.com>");
MODULE_DESCRIPTION("Tegra30 AHUB driver");
MODULE_LICENSE("GPL v2");
MODULE_ALIAS("platform:" DRV_NAME);
+MODULE_DEVICE_TABLE(of, tegra30_ahub_of_match);
--
1.7.0.4
2
1

Re: [alsa-devel] [PATCH 3/3] ASoC: follow the updated samsung DMA common operations
by Mark Brown 08 Jun '12
by Mark Brown 08 Jun '12
08 Jun '12
On Tue, Jun 05, 2012 at 04:20:10PM +0900, Boojin Kim wrote:
> This patch uses config() function to configure DMA transmit options.
Acked-by: Mark Brown <broonie(a)opensource.wolfsonmicro.com>
It'd be good if we could get all the older Samsung platforms moved over
to dmaengine...
1
0

08 Jun '12
We should set "isabelle_regmap" before using it. GCC complains.
Signed-off-by: Dan Carpenter <dan.carpenter(a)oracle.com>
diff --git a/sound/soc/codecs/isabelle.c b/sound/soc/codecs/isabelle.c
index bcc77ef..0d62f3b 100644
--- a/sound/soc/codecs/isabelle.c
+++ b/sound/soc/codecs/isabelle.c
@@ -1126,8 +1126,6 @@ static int __devinit isabelle_i2c_probe(struct i2c_client *i2c,
struct regmap *isabelle_regmap;
int ret = 0;
- i2c_set_clientdata(i2c, isabelle_regmap);
-
isabelle_regmap = devm_regmap_init_i2c(i2c, &isabelle_regmap_config);
if (IS_ERR(isabelle_regmap)) {
ret = PTR_ERR(isabelle_regmap);
@@ -1135,6 +1133,7 @@ static int __devinit isabelle_i2c_probe(struct i2c_client *i2c,
ret);
return ret;
}
+ i2c_set_clientdata(i2c, isabelle_regmap);
ret = snd_soc_register_codec(&i2c->dev,
&soc_codec_dev_isabelle, isabelle_dai,
2
1

08 Jun '12
We should only add source widgets to the input list.
Signed-off-by: Liam Girdwood <lrg(a)ti.com>
---
sound/soc/soc-dapm.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
index 9a67a75..20b3402 100644
--- a/sound/soc/soc-dapm.c
+++ b/sound/soc/soc-dapm.c
@@ -928,7 +928,7 @@ static int is_connected_input_ep(struct snd_soc_dapm_widget *widget,
/* do we need to add this widget to the list ? */
if (list) {
int err;
- err = dapm_list_add_widget(list, path->sink);
+ err = dapm_list_add_widget(list, path->source);
if (err < 0) {
dev_err(widget->dapm->dev, "could not add widget %s\n",
widget->name);
--
1.7.9.5
2
1

[alsa-devel] [PATCH] ASoC: dpcm: Fix dpcm_get_be() to check that DAI is BE.
by Liam Girdwood 08 Jun '12
by Liam Girdwood 08 Jun '12
08 Jun '12
Make sure that the dpcm_get_be() only returns BE DAI links.
Signed-off-by: Liam Girdwood <lrg(a)ti.com>
---
sound/soc/soc-pcm.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c
index edb0d0c..1b6f6be 100644
--- a/sound/soc/soc-pcm.c
+++ b/sound/soc/soc-pcm.c
@@ -830,6 +830,9 @@ static struct snd_soc_pcm_runtime *dpcm_get_be(struct snd_soc_card *card,
for (i = 0; i < card->num_links; i++) {
be = &card->rtd[i];
+ if (!be->dai_link->no_pcm)
+ continue;
+
if (be->cpu_dai->playback_widget == widget ||
be->codec_dai->playback_widget == widget)
return be;
@@ -839,6 +842,9 @@ static struct snd_soc_pcm_runtime *dpcm_get_be(struct snd_soc_card *card,
for (i = 0; i < card->num_links; i++) {
be = &card->rtd[i];
+ if (!be->dai_link->no_pcm)
+ continue;
+
if (be->cpu_dai->capture_widget == widget ||
be->codec_dai->capture_widget == widget)
return be;
--
1.7.9.5
2
1

[alsa-devel] [PATCH] ASoC: wm2000: Always use a 4s timeout for the firmware
by Mark Brown 08 Jun '12
by Mark Brown 08 Jun '12
08 Jun '12
Rather than having varying timeouts depending on the transition always
use a 4s timeout. This provides better diagnostics for clocking errors
and ensures compatibility with current calibration firmwares.
Signed-off-by: Mark Brown <broonie(a)opensource.wolfsonmicro.com>
---
sound/soc/codecs/wm2000.c | 59 ++++++++++++++++-----------------------------
1 file changed, 21 insertions(+), 38 deletions(-)
diff --git a/sound/soc/codecs/wm2000.c b/sound/soc/codecs/wm2000.c
index 78a148f..3fd5b29 100644
--- a/sound/soc/codecs/wm2000.c
+++ b/sound/soc/codecs/wm2000.c
@@ -99,8 +99,9 @@ static void wm2000_reset(struct wm2000_priv *wm2000)
}
static int wm2000_poll_bit(struct i2c_client *i2c,
- unsigned int reg, u8 mask, int timeout)
+ unsigned int reg, u8 mask)
{
+ int timeout = 4000;
int val;
val = wm2000_read(i2c, reg);
@@ -119,7 +120,7 @@ static int wm2000_poll_bit(struct i2c_client *i2c,
static int wm2000_power_up(struct i2c_client *i2c, int analogue)
{
struct wm2000_priv *wm2000 = dev_get_drvdata(&i2c->dev);
- int ret, timeout;
+ int ret;
BUG_ON(wm2000->anc_mode != ANC_OFF);
@@ -140,13 +141,13 @@ static int wm2000_power_up(struct i2c_client *i2c, int analogue)
/* Wait for ANC engine to become ready */
if (!wm2000_poll_bit(i2c, WM2000_REG_ANC_STAT,
- WM2000_ANC_ENG_IDLE, 1)) {
+ WM2000_ANC_ENG_IDLE)) {
dev_err(&i2c->dev, "ANC engine failed to reset\n");
return -ETIMEDOUT;
}
if (!wm2000_poll_bit(i2c, WM2000_REG_SYS_STATUS,
- WM2000_STATUS_BOOT_COMPLETE, 1)) {
+ WM2000_STATUS_BOOT_COMPLETE)) {
dev_err(&i2c->dev, "ANC engine failed to initialise\n");
return -ETIMEDOUT;
}
@@ -173,16 +174,13 @@ static int wm2000_power_up(struct i2c_client *i2c, int analogue)
dev_dbg(&i2c->dev, "Download complete\n");
if (analogue) {
- timeout = 248;
- wm2000_write(i2c, WM2000_REG_ANA_VMID_PU_TIME, timeout / 4);
+ wm2000_write(i2c, WM2000_REG_ANA_VMID_PU_TIME, 248 / 4);
wm2000_write(i2c, WM2000_REG_SYS_MODE_CNTRL,
WM2000_MODE_ANA_SEQ_INCLUDE |
WM2000_MODE_MOUSE_ENABLE |
WM2000_MODE_THERMAL_ENABLE);
} else {
- timeout = 10;
-
wm2000_write(i2c, WM2000_REG_SYS_MODE_CNTRL,
WM2000_MODE_MOUSE_ENABLE |
WM2000_MODE_THERMAL_ENABLE);
@@ -201,9 +199,8 @@ static int wm2000_power_up(struct i2c_client *i2c, int analogue)
wm2000_write(i2c, WM2000_REG_SYS_CTL2, WM2000_ANC_INT_N_CLR);
if (!wm2000_poll_bit(i2c, WM2000_REG_SYS_STATUS,
- WM2000_STATUS_MOUSE_ACTIVE, timeout)) {
- dev_err(&i2c->dev, "Timed out waiting for device after %dms\n",
- timeout * 10);
+ WM2000_STATUS_MOUSE_ACTIVE)) {
+ dev_err(&i2c->dev, "Timed out waiting for device\n");
return -ETIMEDOUT;
}
@@ -218,28 +215,25 @@ static int wm2000_power_up(struct i2c_client *i2c, int analogue)
static int wm2000_power_down(struct i2c_client *i2c, int analogue)
{
struct wm2000_priv *wm2000 = dev_get_drvdata(&i2c->dev);
- int timeout;
if (analogue) {
- timeout = 248;
- wm2000_write(i2c, WM2000_REG_ANA_VMID_PD_TIME, timeout / 4);
+ wm2000_write(i2c, WM2000_REG_ANA_VMID_PD_TIME, 248 / 4);
wm2000_write(i2c, WM2000_REG_SYS_MODE_CNTRL,
WM2000_MODE_ANA_SEQ_INCLUDE |
WM2000_MODE_POWER_DOWN);
} else {
- timeout = 10;
wm2000_write(i2c, WM2000_REG_SYS_MODE_CNTRL,
WM2000_MODE_POWER_DOWN);
}
if (!wm2000_poll_bit(i2c, WM2000_REG_SYS_STATUS,
- WM2000_STATUS_POWER_DOWN_COMPLETE, timeout)) {
+ WM2000_STATUS_POWER_DOWN_COMPLETE)) {
dev_err(&i2c->dev, "Timeout waiting for ANC power down\n");
return -ETIMEDOUT;
}
if (!wm2000_poll_bit(i2c, WM2000_REG_ANC_STAT,
- WM2000_ANC_ENG_IDLE, 1)) {
+ WM2000_ANC_ENG_IDLE)) {
dev_err(&i2c->dev, "Timeout waiting for ANC engine idle\n");
return -ETIMEDOUT;
}
@@ -268,13 +262,13 @@ static int wm2000_enter_bypass(struct i2c_client *i2c, int analogue)
}
if (!wm2000_poll_bit(i2c, WM2000_REG_SYS_STATUS,
- WM2000_STATUS_ANC_DISABLED, 10)) {
+ WM2000_STATUS_ANC_DISABLED)) {
dev_err(&i2c->dev, "Timeout waiting for ANC disable\n");
return -ETIMEDOUT;
}
if (!wm2000_poll_bit(i2c, WM2000_REG_ANC_STAT,
- WM2000_ANC_ENG_IDLE, 1)) {
+ WM2000_ANC_ENG_IDLE)) {
dev_err(&i2c->dev, "Timeout waiting for ANC engine idle\n");
return -ETIMEDOUT;
}
@@ -311,7 +305,7 @@ static int wm2000_exit_bypass(struct i2c_client *i2c, int analogue)
wm2000_write(i2c, WM2000_REG_SYS_CTL2, WM2000_ANC_INT_N_CLR);
if (!wm2000_poll_bit(i2c, WM2000_REG_SYS_STATUS,
- WM2000_STATUS_MOUSE_ACTIVE, 10)) {
+ WM2000_STATUS_MOUSE_ACTIVE)) {
dev_err(&i2c->dev, "Timed out waiting for MOUSE\n");
return -ETIMEDOUT;
}
@@ -325,38 +319,32 @@ static int wm2000_exit_bypass(struct i2c_client *i2c, int analogue)
static int wm2000_enter_standby(struct i2c_client *i2c, int analogue)
{
struct wm2000_priv *wm2000 = dev_get_drvdata(&i2c->dev);
- int timeout;
BUG_ON(wm2000->anc_mode != ANC_ACTIVE);
if (analogue) {
- timeout = 248;
- wm2000_write(i2c, WM2000_REG_ANA_VMID_PD_TIME, timeout / 4);
+ wm2000_write(i2c, WM2000_REG_ANA_VMID_PD_TIME, 248 / 4);
wm2000_write(i2c, WM2000_REG_SYS_MODE_CNTRL,
WM2000_MODE_ANA_SEQ_INCLUDE |
WM2000_MODE_THERMAL_ENABLE |
WM2000_MODE_STANDBY_ENTRY);
} else {
- timeout = 10;
-
wm2000_write(i2c, WM2000_REG_SYS_MODE_CNTRL,
WM2000_MODE_THERMAL_ENABLE |
WM2000_MODE_STANDBY_ENTRY);
}
if (!wm2000_poll_bit(i2c, WM2000_REG_SYS_STATUS,
- WM2000_STATUS_ANC_DISABLED, timeout)) {
+ WM2000_STATUS_ANC_DISABLED)) {
dev_err(&i2c->dev,
"Timed out waiting for ANC disable after 1ms\n");
return -ETIMEDOUT;
}
- if (!wm2000_poll_bit(i2c, WM2000_REG_ANC_STAT, WM2000_ANC_ENG_IDLE,
- 1)) {
+ if (!wm2000_poll_bit(i2c, WM2000_REG_ANC_STAT, WM2000_ANC_ENG_IDLE)) {
dev_err(&i2c->dev,
- "Timed out waiting for standby after %dms\n",
- timeout * 10);
+ "Timed out waiting for standby\n");
return -ETIMEDOUT;
}
@@ -374,23 +362,19 @@ static int wm2000_enter_standby(struct i2c_client *i2c, int analogue)
static int wm2000_exit_standby(struct i2c_client *i2c, int analogue)
{
struct wm2000_priv *wm2000 = dev_get_drvdata(&i2c->dev);
- int timeout;
BUG_ON(wm2000->anc_mode != ANC_STANDBY);
wm2000_write(i2c, WM2000_REG_SYS_CTL1, 0);
if (analogue) {
- timeout = 248;
- wm2000_write(i2c, WM2000_REG_ANA_VMID_PU_TIME, timeout / 4);
+ wm2000_write(i2c, WM2000_REG_ANA_VMID_PU_TIME, 248 / 4);
wm2000_write(i2c, WM2000_REG_SYS_MODE_CNTRL,
WM2000_MODE_ANA_SEQ_INCLUDE |
WM2000_MODE_THERMAL_ENABLE |
WM2000_MODE_MOUSE_ENABLE);
} else {
- timeout = 10;
-
wm2000_write(i2c, WM2000_REG_SYS_MODE_CNTRL,
WM2000_MODE_THERMAL_ENABLE |
WM2000_MODE_MOUSE_ENABLE);
@@ -400,9 +384,8 @@ static int wm2000_exit_standby(struct i2c_client *i2c, int analogue)
wm2000_write(i2c, WM2000_REG_SYS_CTL2, WM2000_ANC_INT_N_CLR);
if (!wm2000_poll_bit(i2c, WM2000_REG_SYS_STATUS,
- WM2000_STATUS_MOUSE_ACTIVE, timeout)) {
- dev_err(&i2c->dev, "Timed out waiting for MOUSE after %dms\n",
- timeout * 10);
+ WM2000_STATUS_MOUSE_ACTIVE)) {
+ dev_err(&i2c->dev, "Timed out waiting for MOUSE\n");
return -ETIMEDOUT;
}
--
1.7.10
1
0

[alsa-devel] [Q] Writing an alsa module for usb audio & video capture device
by Ezequiel Garcia 07 Jun '12
by Ezequiel Garcia 07 Jun '12
07 Jun '12
Hi everyone,
I'm writing a driver for stk1160 usb bridge (audio & video capture device).
The video part is almost done [1] and now I've started the alsa part.
As the driver replaces an in-tree staging driver I could just grab the alsa part
from the original driver (called easycap), or look into em28xx sources.
But as I want to learn a thing or two in this life, I've decided to
take a look at sound drivers first.
Currently I'm reading through sound/usb/6fire driver (picked randomly).
I would like to know: do you have any suggestions and/or hints in
order to write a *nice* driver?
What driver would you consider as being a *correct* usb sound capture
implementation?
[1] http://patchwork.linuxtv.org/patch/11577/
Thanks,
Ezequiel.
2
4

07 Jun '12
Posted to both alsa-devel and pulseaudio-discuss lists, as this is a
cross issue.
PulseAudio tries to figure out what equipment is present on the machine
using the mixer. If it finds e g "Headphone Playback Volume", "Headphone
Playback Switch", or "Headphone Jack", it assumes that a headphone is
present and creates a headphone port. If it finds no ports, it creates a
fallback "Analog Output" port.
Now assume that we have a laptop with speakers and a headphone jack, but
with only a "Master Playback Volume", and a "Headphone Jack" for the
jack detection.
PulseAudio will take the "Headphone Jack", and create a headphone port.
Now, if this port is currently unconnected/unavailable, it will not show
up at all [1]. As a result, the internal speakers - for which no port
was created - will be essentially unusable.
Now, I thought this was a problem with a pair of machines only, that we
could easily quirk on the PulseAudio side. But after looking through
Ubuntu bugs and posting a blog post [2] about the issue, I have now
collected 21 different machines affected, mostly on the input side.
Several Realtek chips are affected on the dmic side, and some older
STAC92xx chips have problems in both directions.
So it becomes evident to me, that this is something that needs to be
fixed pretty fast.
So, to move forward, we need to expose these speakers and internal mics
to userspace. A very simple (untested) patch is attached. This would
make "Internal Mic Jack" and "Speaker Jack" show up. Note that the
actual status can be overridden/ignored on the PulseAudio side - the
importance here is the sign that there are internal mics and speakers,
so that the PulseAudio ports get created.
I could develop it a little to make sure we don't actually do any jack
detection for these pins but always return them as being true/present.
That is, if you approve the idea? I admit that the "Internal Mic Jack"
is somewhat misleading/hacky as the internal mic is not connected to any
physical jack, but it seems like the simplest way of resolving the
problem currently.
--
David Henningsson, Canonical Ltd.
https://launchpad.net/~diwic
[1] At least in Ubuntu's new Sound Settings UI.
[2]
http://voices.canonical.com/david.henningsson/2012/05/22/three-audio-bugs-i…
3
8

07 Jun '12
codec may reject power state transition requests(reporting PS-ERROR set),
in that case we re-issue a power state setting and check error bit again.
Signed-off-by: Wang Xingchao <xingchao.wang(a)intel.com>
---
sound/pci/hda/hda_codec.c | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
index d0ca370..a93c7ca 100644
--- a/sound/pci/hda/hda_codec.c
+++ b/sound/pci/hda/hda_codec.c
@@ -3526,6 +3526,7 @@ static bool snd_hda_codec_get_supported_ps(struct hda_codec *codec, hda_nid_t fg
static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
unsigned int power_state)
{
+ int state, count = 0;
if (codec->patch_ops.set_power_state) {
codec->patch_ops.set_power_state(codec, fg, power_state);
return;
@@ -3537,9 +3538,19 @@ static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
bool epss = snd_hda_codec_get_supported_ps(codec, fg, AC_PWRST_EPSS);
msleep(epss? 10:100);
}
- snd_hda_codec_read(codec, fg, 0, AC_VERB_SET_POWER_STATE,
- power_state);
- snd_hda_codec_set_power_to_all(codec, fg, power_state, true);
+
+ /* repeat power states setting at most 10 times*/
+ while (count++ > 10) {
+ snd_hda_codec_read(codec, fg, 0, AC_VERB_SET_POWER_STATE,
+ power_state);
+ snd_hda_codec_set_power_to_all(codec, fg, power_state, true);
+ state = snd_hda_codec_read(codec, fg, 0,
+ AC_VERB_GET_POWER_STATE, 0);
+ if (!(state & AC_PWRST_ERROR))
+ break;
+ }
+ if (count > 10)
+ snd_printk(KERN_WARNING "Power states transition reject!\n");
}
/* modem wake on ring: transition from D2 to D0 in less than 2ms. For modems,
--
1.7.9.5
3
2

07 Jun '12
On Mon, 2012-06-04 at 14:37 +0800, Zhangfei Gao wrote:
> Add support for two-channel dma under dmaengine
> support: mmp-adma and pxa910-squ
>
> Signed-off-by: Zhangfei Gao <zhangfei.gao(a)marvell.com>
> Signed-off-by: Leo Yan <leoy(a)marvell.com>
> Signed-off-by: Qiao Zhou <zhouqiao(a)marvell.com>
> +
> +static int mmp_tdma_clear_chan_irq(struct mmp_tdma_chan *tdmac)
> +{
> + u32 reg = readl(tdmac->reg_base + TDISR);
> +
> + if (reg & TDISR_COMP) {
> + /* clear irq */
> + reg &= ~TDISR_COMP;
> + writel(reg, tdmac->reg_base + TDISR);
> +
> + return 1;
hrmm.?
> + }
> + return 0;
> +}
> +
> +static irqreturn_t mmp_tdma_chan_handler(int irq, void *dev_id)
> +{
> + struct mmp_tdma_chan *tdmac = dev_id;
> +
> + if (mmp_tdma_clear_chan_irq(tdmac)) {
> + tdmac->pos = (tdmac->pos + tdmac->period_len) % tdmac->buf_len;
> + tasklet_schedule(&tdmac->tasklet);
> + return IRQ_HANDLED;
> + } else
> + return IRQ_NONE;
> +}
> +
> +static irqreturn_t mmp_tdma_int_handler(int irq, void *dev_id)
> +{
> + struct mmp_tdma_device *tdev = dev_id;
> + int i, ret;
> + int irq_num = 0;
> +
> + for (i = 0; i < TDMA_CHANNEL_NUM; i++) {
> + struct mmp_tdma_chan *tdmac = tdev->tdmac[i];
> +
> + ret = mmp_tdma_chan_handler(irq, tdmac);
> + if (ret == IRQ_HANDLED)
> + irq_num++;
> + }
> +
> + if (irq_num)
> + return IRQ_HANDLED;
> + else
> + return IRQ_NONE;
> +}
> +
> +static void dma_do_tasklet(unsigned long data)
> +{
> + struct mmp_tdma_chan *tdmac = (struct mmp_tdma_chan *)data;
> +
> + if (tdmac->desc.callback)
> + tdmac->desc.callback(tdmac->desc.callback_param);
> +
> +}
> +
> +static void mmp_tdma_free_descriptor(struct mmp_tdma_chan *tdmac)
> +{
> + struct gen_pool *gpool;
> + int size = tdmac->desc_num * sizeof(struct mmp_tdma_desc);
> +
> + gpool = sram_get_gpool("asram");
> + if (tdmac->desc_arr)
> + gen_pool_free(gpool, (unsigned long)tdmac->desc_arr,
> + size);
> + tdmac->desc_arr = NULL;
> +
> + return;
> +}
> +
> +static dma_cookie_t mmp_tdma_tx_submit(struct dma_async_tx_descriptor *tx)
> +{
> + struct mmp_tdma_chan *tdmac = to_mmp_tdma_chan(tx->chan);
> +
> + mmp_tdma_chan_set_desc(tdmac, tdmac->desc_arr_phys);
This seems odd. In submit you are supposed to move this to your pending
list. Btw where is the .issue_pending handler?
> +
> + return 0;
> +}
> +
> +static int mmp_tdma_alloc_chan_resources(struct dma_chan *chan)
> +{
> + struct mmp_tdma_chan *tdmac = to_mmp_tdma_chan(chan);
> + int ret;
> +
> + dev_dbg(tdmac->dev, "%s: enter\n", __func__);
> +
> + dma_async_tx_descriptor_init(&tdmac->desc, chan);
> + tdmac->desc.tx_submit = mmp_tdma_tx_submit;
> +
> + if (tdmac->irq) {
> + ret = devm_request_irq(tdmac->dev, tdmac->irq,
> + mmp_tdma_chan_handler, IRQF_DISABLED, "tdma", tdmac);
> + if (ret)
> + goto err_request_irq;
> + }
> +
> + return 0;
NO. This is supposed to return the number of descriptors allocated.
> +
> +err_request_irq:
> + mmp_tdma_free_descriptor(tdmac);
> + return ret;
> +}
> +
> +static void mmp_tdma_free_chan_resources(struct dma_chan *chan)
> +{
> + struct mmp_tdma_chan *tdmac = to_mmp_tdma_chan(chan);
> +
> + dev_dbg(tdmac->dev, "%s: enter\n", __func__);
> +
> + if (tdmac->irq)
> + devm_free_irq(tdmac->dev, tdmac->irq, tdmac);
> + mmp_tdma_disable_chan(tdmac);
channel should be already disabled, why do you need this here?
> + mmp_tdma_free_descriptor(tdmac);
> + return;
> +}
> +
> +
> +static struct dma_async_tx_descriptor *mmp_tdma_prep_slave_sg(
> + struct dma_chan *chan, struct scatterlist *sgl,
> + unsigned int sg_len, enum dma_transfer_direction direction,
> + unsigned long flags, void *context)
> +{
> + /*
> + * This operation is not supported on the TDMA controller
> + *
> + * However, we need to provide the function pointer to allow the
> + * device_control() method to work.
> + */
> + return NULL;
> +}
Pls remove if not supported
> +
> +static int mmp_tdma_alloc_descriptor(struct mmp_tdma_chan *tdmac)
> +{
> + struct gen_pool *gpool;
> + int size = tdmac->desc_num * sizeof(struct mmp_tdma_desc);
> +
> + dev_dbg(tdmac->dev, "%s: enter\n", __func__);
> +
> + gpool = sram_get_gpool("asram");
> + if (!gpool)
> + return -ENOMEM;
> +
> + tdmac->desc_arr = (void *)gen_pool_alloc(gpool, size);
> + if (!tdmac->desc_arr)
> + return -ENOMEM;
> +
> + tdmac->desc_arr_phys = gen_pool_virt_to_phys(gpool,
> + (unsigned long)tdmac->desc_arr);
> +
> + return 0;
this needs fix
> +}
> +
> +static struct dma_async_tx_descriptor *mmp_tdma_prep_dma_cyclic(
> + struct dma_chan *chan, dma_addr_t dma_addr, size_t buf_len,
> + size_t period_len, enum dma_transfer_direction direction,
> + void *context)
> +{
> + struct mmp_tdma_chan *tdmac = to_mmp_tdma_chan(chan);
> + int num_periods = buf_len / period_len;
> + int i = 0, buf = 0;
> + int ret;
> +
> + if (tdmac->status != DMA_SUCCESS)
> + return NULL;
> +
> + if (period_len > TDMA_MAX_XFER_BYTES) {
> + dev_err(tdmac->dev,
> + "maximum period size exceeded: %d > %d\n",
> + period_len, TDMA_MAX_XFER_BYTES);
> + goto err_out;
> + }
> +
> + tdmac->status = DMA_IN_PROGRESS;
???
> + tdmac->desc_num = num_periods;
> + ret = mmp_tdma_alloc_descriptor(tdmac);
> + if (ret < 0)
> + goto err_out;
> +
> + while (buf < buf_len) {
> + struct mmp_tdma_desc *desc = &tdmac->desc_arr[i];
what if i call prepare twice on the same channel?
Better way would to manage a descriptor list, see other drivers for
examples.
> +
> + if (i + 1 == num_periods)
> + desc->nxt_desc = tdmac->desc_arr_phys;
> + else
> + desc->nxt_desc = tdmac->desc_arr_phys +
> + sizeof(*desc) * (i + 1);
pls use kernel link list, it is provided to you so that you dont have to
do above.
> +
> + if (direction == DMA_MEM_TO_DEV) {
> + desc->src_addr = dma_addr;
> + desc->dst_addr = tdmac->dev_addr;
> + } else {
> + desc->src_addr = tdmac->dev_addr;
> + desc->dst_addr = dma_addr;
> + }
> + desc->byte_cnt = period_len;
> + dma_addr += period_len;
> + buf += period_len;
> + i++;
> + }
> +
> + tdmac->buf_len = buf_len;
> + tdmac->period_len = period_len;
> + tdmac->pos = 0;
> +
> + return &tdmac->desc;
> +
> +err_out:
> + tdmac->status = DMA_ERROR;
> + return NULL;
> +}
> +
> +static int mmp_tdma_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd,
> + unsigned long arg)
> +{
> + struct mmp_tdma_chan *tdmac = to_mmp_tdma_chan(chan);
> + struct dma_slave_config *dmaengine_cfg = (void *)arg;
> + int ret = 0;
> +
> + switch (cmd) {
> + case DMA_TERMINATE_ALL:
> + mmp_tdma_disable_chan(tdmac);
> + break;
> + case DMA_PAUSE:
> + mmp_tdma_pause_chan(tdmac);
> + break;
> + case DMA_RESUME:
> + mmp_tdma_resume_chan(tdmac);
> + break;
> + case DMA_SLAVE_CONFIG:
> + if (dmaengine_cfg->direction == DMA_DEV_TO_MEM) {
> + tdmac->dev_addr = dmaengine_cfg->src_addr;
> + tdmac->burst_sz = dmaengine_cfg->src_maxburst;
> + } else {
> + tdmac->dev_addr = dmaengine_cfg->dst_addr;
> + tdmac->burst_sz = dmaengine_cfg->dst_maxburst;
> + }
> + tdmac->dir = dmaengine_cfg->direction;
> + return mmp_tdma_config_chan(tdmac);
> + default:
> + ret = -ENOSYS;
> + }
> +
> + return ret;
> +}
> +
> +static enum dma_status mmp_tdma_tx_status(struct dma_chan *chan,
> + dma_cookie_t cookie, struct dma_tx_state *txstate)
> +{
> + struct mmp_tdma_chan *tdmac = to_mmp_tdma_chan(chan);
> +
> + dma_set_residue(txstate, tdmac->buf_len - tdmac->pos);
> +
> + return tdmac->status;
> +}
> +
> +static void mmp_tdma_issue_pending(struct dma_chan *chan)
> +{
> + struct mmp_tdma_chan *tdmac = to_mmp_tdma_chan(chan);
> +
> + mmp_tdma_enable_chan(tdmac);
can you queue the descriptors here? That was purpose to have separate
issue pending and submit.
> +}
> +
> +static int __devexit mmp_tdma_remove(struct platform_device *pdev)
> +{
> + struct mmp_tdma_device *tdev = platform_get_drvdata(pdev);
> +
> + dma_async_device_unregister(&tdev->device);
> + return 0;
> +}
> +
> +static int __devinit mmp_tdma_chan_init(struct mmp_tdma_device *tdev,
> + int idx, int irq, int type)
> +{
> + struct mmp_tdma_chan *tdmac;
> +
> + if (idx >= TDMA_CHANNEL_NUM) {
> + dev_err(tdev->dev, "too many channels for device!\n");
> + return -EINVAL;
> + }
> +
> + /* alloc channel */
> + tdmac = devm_kzalloc(tdev->dev, sizeof(*tdmac), GFP_KERNEL);
> + if (!tdmac) {
> + dev_err(tdev->dev, "no free memory for DMA channels!\n");
> + return -ENOMEM;
> + }
> + if (irq)
> + tdmac->irq = irq + idx;
> + tdmac->dev = tdev->dev;
> + tdmac->chan.device = &tdev->device;
> + tdmac->idx = idx;
> + tdmac->type = type;
> + tdmac->reg_base = (unsigned long)tdev->base + idx * 4;
> + tdmac->status = DMA_SUCCESS;
> + tdev->tdmac[tdmac->idx] = tdmac;
> + tasklet_init(&tdmac->tasklet, dma_do_tasklet, (unsigned long)tdmac);
> +
> + /* add the channel to tdma_chan list */
> + list_add_tail(&tdmac->chan.device_node,
> + &tdev->device.channels);
> +
> + return 0;
> +}
> +
> +static int __devinit mmp_tdma_probe(struct platform_device *pdev)
> +{
> + const struct platform_device_id *id = platform_get_device_id(pdev);
> + enum mmp_tdma_type type = id->driver_data;
> + struct mmp_tdma_device *tdev;
> + struct resource *iores;
> + int i, ret;
> + int irq = 0;
> + int chan_num = TDMA_CHANNEL_NUM;
> +
> + /* always have couple channels */
> + tdev = devm_kzalloc(&pdev->dev, sizeof(*tdev), GFP_KERNEL);
> + if (!tdev)
> + return -ENOMEM;
> +
> + tdev->dev = &pdev->dev;
> + iores = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
> + if (!iores)
> + return -EINVAL;
> +
> + if (resource_size(iores) != chan_num)
> + tdev->irq = iores->start;
> + else
> + irq = iores->start;
> +
> + iores = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> + if (!iores)
> + return -EINVAL;
> +
> + tdev->base = devm_request_and_ioremap(&pdev->dev, iores);
> + if (!tdev->base)
> + return -EADDRNOTAVAIL;
> +
> + if (tdev->irq) {
> + ret = devm_request_irq(&pdev->dev, tdev->irq,
> + mmp_tdma_int_handler, IRQF_DISABLED, "tdma", tdev);
> + if (ret)
> + return ret;
> + }
> +
> + dma_cap_set(DMA_SLAVE, tdev->device.cap_mask);
> + dma_cap_set(DMA_CYCLIC, tdev->device.cap_mask);
> +
> + INIT_LIST_HEAD(&tdev->device.channels);
> +
> + /* initialize channel parameters */
> + for (i = 0; i < chan_num; i++) {
> + ret = mmp_tdma_chan_init(tdev, i, irq, type);
> + if (ret)
> + return ret;
> + }
> +
> + tdev->device.dev = &pdev->dev;
> + tdev->device.device_alloc_chan_resources =
> + mmp_tdma_alloc_chan_resources;
> + tdev->device.device_free_chan_resources =
> + mmp_tdma_free_chan_resources;
> + tdev->device.device_prep_slave_sg = mmp_tdma_prep_slave_sg;
> + tdev->device.device_prep_dma_cyclic = mmp_tdma_prep_dma_cyclic;
> + tdev->device.device_tx_status = mmp_tdma_tx_status;
> + tdev->device.device_issue_pending = mmp_tdma_issue_pending;
> + tdev->device.device_control = mmp_tdma_control;
> + tdev->device.copy_align = TDMA_ALIGNMENT;
> +
> + dma_set_mask(&pdev->dev, DMA_BIT_MASK(64));
> + platform_set_drvdata(pdev, tdev);
> +
> + ret = dma_async_device_register(&tdev->device);
> + if (ret) {
> + dev_err(tdev->device.dev, "unable to register\n");
> + return ret;
> + }
> +
> + dev_info(tdev->device.dev, "initialized\n");
> + return 0;
> +}
> +
> +static const struct platform_device_id mmp_tdma_id_table[] = {
> + { "mmp-adma", MMP_AUD_TDMA },
> + { "pxa910-squ", PXA910_SQU },
> + { },
> +};
> +
> +static struct platform_driver mmp_tdma_driver = {
> + .driver = {
> + .name = "mmp-tdma",
> + .owner = THIS_MODULE,
> + },
> + .id_table = mmp_tdma_id_table,
> + .probe = mmp_tdma_probe,
> + .remove = __devexit_p(mmp_tdma_remove),
> +};
> +
> +module_platform_driver(mmp_tdma_driver);
> +
> +MODULE_DESCRIPTION("MMP Two-Channel DMA Driver");
> +MODULE_LICENSE("GPL");
AUTHOR, ALIAS too pls
> diff --git a/include/linux/platform_data/mmp_dma.h b/include/linux/platform_data/mmp_dma.h
> new file mode 100644
> index 0000000..4e21cf9
> --- /dev/null
> +++ b/include/linux/platform_data/mmp_dma.h
> @@ -0,0 +1,20 @@
> +/*
> + * MMP Platform DMA Management
> + *
> + * Copyright (c) 2011 Marvell Semiconductors Inc.
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + *
> + */
> +
> +#ifndef MMP_DMA_H
> +#define MMP_DMA_H
> +
> +struct mmp_tdma_data {
> + u32 bus_size;
> + u32 pack_mod;
> +};
> +
> +#endif /* MMP_DMA_H */
why do you need separate header for this?
--
~Vinod
--
To unsubscribe from this list: send the line "unsubscribe alsa-devel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
2
3

07 Jun '12
On Mon, 2012-06-04 at 14:37 +0800, Zhangfei Gao wrote:
> mmp-pcm handle audio dma based on soc-dmaengine
> Support mmp and pxa910
See soc-dmaengine.c. You sneed to use the library to use dmaengine.
>
> Signed-off-by: Zhangfei Gao <zhangfei.gao(a)marvell.com>
> Signed-off-by: Leo Yan <leoy(a)marvell.com>
> Signed-off-by: Qiao Zhou <zhouqiao(a)marvell.com>
> ---
> include/linux/platform_data/mmp_audio.h | 22 ++
> sound/soc/pxa/Kconfig | 9 +
> sound/soc/pxa/Makefile | 2 +
> sound/soc/pxa/mmp-pcm.c | 317 +++++++++++++++++++++++++++++++
> 4 files changed, 350 insertions(+), 0 deletions(-)
> create mode 100644 include/linux/platform_data/mmp_audio.h
> create mode 100644 sound/soc/pxa/mmp-pcm.c
>
> diff --git a/include/linux/platform_data/mmp_audio.h b/include/linux/platform_data/mmp_audio.h
> new file mode 100644
> index 0000000..0f25d16
> --- /dev/null
> +++ b/include/linux/platform_data/mmp_audio.h
> @@ -0,0 +1,22 @@
> +/*
> + * MMP Platform AUDIO Management
> + *
> + * Copyright (c) 2011 Marvell Semiconductors Inc.
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + *
> + */
> +
> +#ifndef MMP_AUDIO_H
> +#define MMP_AUDIO_H
> +
> +struct mmp_audio_platdata {
> + u32 period_max_capture;
> + u32 buffer_max_capture;
> + u32 period_max_playback;
> + u32 buffer_max_playback;
> +};
> +
> +#endif /* MMP_AUDIO_H */
> diff --git a/sound/soc/pxa/Kconfig b/sound/soc/pxa/Kconfig
> index a0f7d3c..5d76e29 100644
> --- a/sound/soc/pxa/Kconfig
> +++ b/sound/soc/pxa/Kconfig
> @@ -8,6 +8,15 @@ config SND_PXA2XX_SOC
> the PXA2xx AC97, I2S or SSP interface. You will also need
> to select the audio interfaces to support below.
>
> +config SND_MMP_SOC
> + bool "Soc Audio for Marvell MMP chips"
> + depends on ARCH_MMP
> + select SND_SOC_DMAENGINE_PCM
> + select SND_ARM
> + help
> + Say Y if you want to add support for codecs attached to
> + the MMP SSPA interface.
> +
> config SND_PXA2XX_AC97
> tristate
> select SND_AC97_CODEC
> diff --git a/sound/soc/pxa/Makefile b/sound/soc/pxa/Makefile
> index af35762..f913e9b 100644
> --- a/sound/soc/pxa/Makefile
> +++ b/sound/soc/pxa/Makefile
> @@ -3,11 +3,13 @@ snd-soc-pxa2xx-objs := pxa2xx-pcm.o
> snd-soc-pxa2xx-ac97-objs := pxa2xx-ac97.o
> snd-soc-pxa2xx-i2s-objs := pxa2xx-i2s.o
> snd-soc-pxa-ssp-objs := pxa-ssp.o
> +snd-soc-mmp-objs := mmp-pcm.o
>
> obj-$(CONFIG_SND_PXA2XX_SOC) += snd-soc-pxa2xx.o
> obj-$(CONFIG_SND_PXA2XX_SOC_AC97) += snd-soc-pxa2xx-ac97.o
> obj-$(CONFIG_SND_PXA2XX_SOC_I2S) += snd-soc-pxa2xx-i2s.o
> obj-$(CONFIG_SND_PXA_SOC_SSP) += snd-soc-pxa-ssp.o
> +obj-$(CONFIG_SND_MMP_SOC) += snd-soc-mmp.o
>
> # PXA Machine Support
> snd-soc-corgi-objs := corgi.o
> diff --git a/sound/soc/pxa/mmp-pcm.c b/sound/soc/pxa/mmp-pcm.c
> new file mode 100644
> index 0000000..b7b09f9
> --- /dev/null
> +++ b/sound/soc/pxa/mmp-pcm.c
> @@ -0,0 +1,317 @@
> +/*
> + * linux/sound/soc/pxa/mmp-pcm.c
> + *
> + * Copyright (C) 2011 Marvell International Ltd.
> + *
> + * 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.
> + *
> + */
> +#include <linux/module.h>
> +#include <linux/init.h>
> +#include <linux/platform_device.h>
> +#include <linux/slab.h>
> +#include <linux/dma-mapping.h>
> +#include <linux/dmaengine.h>
> +#include <linux/platform_data/mmp_dma.h>
> +#include <linux/platform_data/mmp_audio.h>
> +#include <sound/pxa2xx-lib.h>
> +#include <sound/core.h>
> +#include <sound/pcm.h>
> +#include <sound/pcm_params.h>
> +#include <sound/soc.h>
> +#include <mach/sram.h>
> +#include <sound/dmaengine_pcm.h>
> +
> +struct mmp_dma_data {
> + int ssp_id;
> + struct resource *dma_res;
> + struct mmp_tdma_data tdma_data;
> +};
> +
> +#define MMP_PCM_INFO (SNDRV_PCM_INFO_MMAP | \
> + SNDRV_PCM_INFO_MMAP_VALID | \
> + SNDRV_PCM_INFO_INTERLEAVED | \
> + SNDRV_PCM_INFO_PAUSE | \
> + SNDRV_PCM_INFO_RESUME)
> +
> +#define MMP_PCM_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | \
> + SNDRV_PCM_FMTBIT_S24_LE | \
> + SNDRV_PCM_FMTBIT_S32_LE)
> +
> +static struct snd_pcm_hardware mmp_pcm_hardware[] = {
> + {
> + .info = MMP_PCM_INFO,
> + .formats = MMP_PCM_FORMATS,
> + .period_bytes_min = 1024,
> + .period_bytes_max = 2048,
> + .periods_min = 2,
> + .periods_max = 32,
> + .buffer_bytes_max = 4096,
> + .fifo_size = 32,
> + },
> + {
> + .info = MMP_PCM_INFO,
> + .formats = MMP_PCM_FORMATS,
> + .period_bytes_min = 1024,
> + .period_bytes_max = 2048,
> + .periods_min = 2,
> + .periods_max = 32,
> + .buffer_bytes_max = 4096,
> + .fifo_size = 32,
> + },
> +};
> +
> +static int mmp_pcm_hw_params(struct snd_pcm_substream *substream,
> + struct snd_pcm_hw_params *params)
> +{
> + struct mmp_dma_data *dma_data = snd_dmaengine_pcm_get_data(substream);
> + struct dma_chan *chan = snd_dmaengine_pcm_get_chan(substream);
> + struct snd_soc_pcm_runtime *rtd = substream->private_data;
> + struct pxa2xx_pcm_dma_params *dma_params;
> + int ret;
> + struct dma_slave_config slave_config;
> +
> + dma_params = snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);
> + if (!dma_params)
> + return 0;
> +
> + switch (params_format(params)) {
> + case SNDRV_PCM_FORMAT_S8:
> + dma_data->tdma_data.bus_size = 8;
> + break;
> + case SNDRV_PCM_FORMAT_S16_LE:
> + dma_data->tdma_data.bus_size = 16;
> + break;
> + case SNDRV_PCM_FORMAT_S24_LE:
> + dma_data->tdma_data.bus_size = 24;
> + break;
> + case SNDRV_PCM_FORMAT_S32_LE:
> + dma_data->tdma_data.bus_size = 32;
> + break;
> + default:
> + return -EINVAL;
> + }
> + dma_data->tdma_data.pack_mod = true;
> +
> + if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
> + slave_config.direction = DMA_TO_DEVICE;
> + slave_config.dst_addr = dma_params->dev_addr;
> + slave_config.dst_maxburst = 4;
> + } else {
> + slave_config.direction = DMA_FROM_DEVICE;
> + slave_config.src_addr = dma_params->dev_addr;
> + slave_config.src_maxburst = 4;
> + }
> +
> + ret = dmaengine_slave_config(chan, &slave_config);
> + if (ret)
> + return ret;
> +
> + snd_pcm_set_runtime_buffer(substream, &substream->dma_buffer);
> +
> + return 0;
> +}
> +
> +static bool filter(struct dma_chan *chan, void *param)
> +{
> + struct mmp_dma_data *dma_data = param;
> + bool found = false;
> + char *devname;
> +
> + devname = kasprintf(GFP_KERNEL, "%s.%d", dma_data->dma_res->name,
> + dma_data->ssp_id);
> + if ((strcmp(dev_name(chan->device->dev), devname) == 0) &&
> + (chan->chan_id == dma_data->dma_res->start)) {
> + chan->private = &dma_data->tdma_data;
> + found = true;
> + }
> +
> + kfree(devname);
> + return found;
> +}
> +
> +static int mmp_pcm_open(struct snd_pcm_substream *substream)
> +{
> + struct snd_soc_pcm_runtime *rtd = substream->private_data;
> + struct platform_device *pdev = to_platform_device(rtd->platform->dev);
> + struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
> + struct mmp_dma_data *dma_data;
> + struct resource *r;
> + int ret;
> +
> + r = platform_get_resource(pdev, IORESOURCE_DMA, substream->stream);
> + if (!r)
> + return -EBUSY;
> +
> + snd_soc_set_runtime_hwparams(substream,
> + &mmp_pcm_hardware[substream->stream]);
> + dma_data = devm_kzalloc(&pdev->dev,
> + sizeof(struct mmp_dma_data), GFP_KERNEL);
> + if (dma_data == NULL)
> + return -ENOMEM;
> +
> + dma_data->dma_res = r;
> + dma_data->ssp_id = cpu_dai->id;
> +
> + ret = snd_dmaengine_pcm_open(substream, filter, dma_data);
> + if (ret) {
> + devm_kfree(&pdev->dev, dma_data);
> + return ret;
> + }
> +
> + snd_dmaengine_pcm_set_data(substream, dma_data);
> + return 0;
> +}
> +
> +static int mmp_pcm_close(struct snd_pcm_substream *substream)
> +{
> + struct mmp_dma_data *dma_data = snd_dmaengine_pcm_get_data(substream);
> + struct snd_soc_pcm_runtime *rtd = substream->private_data;
> + struct platform_device *pdev = to_platform_device(rtd->platform->dev);
> +
> + snd_dmaengine_pcm_close(substream);
> + devm_kfree(&pdev->dev, dma_data);
> + return 0;
> +}
> +
> +static int mmp_pcm_mmap(struct snd_pcm_substream *substream,
> + struct vm_area_struct *vma)
> +{
> + struct snd_pcm_runtime *runtime = substream->runtime;
> + unsigned long off = vma->vm_pgoff;
> +
> + vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
> + return remap_pfn_range(vma, vma->vm_start,
> + __phys_to_pfn(runtime->dma_addr) + off,
> + vma->vm_end - vma->vm_start, vma->vm_page_prot);
> +}
> +
> +struct snd_pcm_ops mmp_pcm_ops = {
> + .open = mmp_pcm_open,
> + .close = mmp_pcm_close,
> + .ioctl = snd_pcm_lib_ioctl,
> + .hw_params = mmp_pcm_hw_params,
> + .trigger = snd_dmaengine_pcm_trigger,
> + .pointer = snd_dmaengine_pcm_pointer,
> + .mmap = mmp_pcm_mmap,
> +};
> +
> +static void mmp_pcm_free_dma_buffers(struct snd_pcm *pcm)
> +{
> + struct snd_pcm_substream *substream;
> + struct snd_dma_buffer *buf;
> + int stream;
> + struct gen_pool *gpool;
> +
> + gpool = sram_get_gpool("asram");
> + if (!gpool)
> + return;
> +
> + for (stream = 0; stream < 2; stream++) {
> + size_t size = mmp_pcm_hardware[stream].buffer_bytes_max;
> +
> + substream = pcm->streams[stream].substream;
> + if (!substream)
> + continue;
> +
> + buf = &substream->dma_buffer;
> + if (!buf->area)
> + continue;
> + gen_pool_free(gpool, (unsigned long)buf->area, size);
> + buf->area = NULL;
> + }
> +
> + return;
> +}
> +
> +static int mmp_pcm_preallocate_dma_buffer(struct snd_pcm_substream *substream,
> + int stream)
> +{
> + struct snd_dma_buffer *buf = &substream->dma_buffer;
> + size_t size = mmp_pcm_hardware[stream].buffer_bytes_max;
> + struct gen_pool *gpool;
> +
> + buf->dev.type = SNDRV_DMA_TYPE_DEV;
> + buf->dev.dev = substream->pcm->card->dev;
> + buf->private_data = NULL;
> +
> + gpool = sram_get_gpool("asram");
> + if (!gpool)
> + return -ENOMEM;
> +
> + buf->area = (unsigned char *)gen_pool_alloc(gpool, size);
> + if (!buf->area)
> + return -ENOMEM;
> + buf->addr = gen_pool_virt_to_phys(gpool, (unsigned long)buf->area);
> + buf->bytes = size;
> + return 0;
> +}
> +
> +int mmp_pcm_new(struct snd_soc_pcm_runtime *rtd)
> +{
> + struct snd_pcm_substream *substream;
> + struct snd_pcm *pcm = rtd->pcm;
> + int ret = 0, stream;
> +
> + for (stream = 0; stream < 2; stream++) {
> + substream = pcm->streams[stream].substream;
> +
> + ret = mmp_pcm_preallocate_dma_buffer(substream, stream);
> + if (ret)
> + goto err;
> + }
> +
> + return 0;
> +
> +err:
> + mmp_pcm_free_dma_buffers(pcm);
> + return ret;
> +}
> +
> +struct snd_soc_platform_driver mmp_soc_platform = {
> + .ops = &mmp_pcm_ops,
> + .pcm_new = mmp_pcm_new,
> + .pcm_free = mmp_pcm_free_dma_buffers,
> +};
> +
> +static __devinit int mmp_pcm_probe(struct platform_device *pdev)
> +{
> + struct mmp_audio_platdata *pdata = pdev->dev.platform_data;
> +
> + if (pdata) {
> + mmp_pcm_hardware[SNDRV_PCM_STREAM_PLAYBACK].buffer_bytes_max =
> + pdata->buffer_max_playback;
> + mmp_pcm_hardware[SNDRV_PCM_STREAM_PLAYBACK].period_bytes_max =
> + pdata->period_max_playback;
> + mmp_pcm_hardware[SNDRV_PCM_STREAM_CAPTURE].buffer_bytes_max =
> + pdata->buffer_max_capture;
> + mmp_pcm_hardware[SNDRV_PCM_STREAM_CAPTURE].period_bytes_max =
> + pdata->period_max_capture;
> + }
> + return snd_soc_register_platform(&pdev->dev, &mmp_soc_platform);
> +}
> +
> +static int __devexit mmp_pcm_remove(struct platform_device *pdev)
> +{
> + snd_soc_unregister_platform(&pdev->dev);
> + return 0;
> +}
> +
> +static struct platform_driver mmp_pcm_driver = {
> + .driver = {
> + .name = "mmp-pcm-audio",
> + .owner = THIS_MODULE,
> + },
> +
> + .probe = mmp_pcm_probe,
> + .remove = __devexit_p(mmp_pcm_remove),
> +};
> +
> +module_platform_driver(mmp_pcm_driver);
> +
> +MODULE_AUTHOR("Leo Yan <leoy(a)marvell.com>");
> +MODULE_DESCRIPTION("MMP Soc Audio DMA module");
> +MODULE_LICENSE("GPL");
--
~Vinod
--
To unsubscribe from this list: send the line "unsubscribe alsa-devel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
2
5
codec may reject power state transition requests(reporting PS-ERROR set),
in that case we re-issue a power state setting and check error bit again.
Signed-off-by: Wang Xingchao <xingchao.wang(a)intel.com>
---
sound/pci/hda/hda_codec.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
index d0ca370..bb64eba 100644
--- a/sound/pci/hda/hda_codec.c
+++ b/sound/pci/hda/hda_codec.c
@@ -3526,6 +3526,7 @@ static bool snd_hda_codec_get_supported_ps(struct hda_codec *codec, hda_nid_t fg
static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
unsigned int power_state)
{
+ int state, count = 0;
if (codec->patch_ops.set_power_state) {
codec->patch_ops.set_power_state(codec, fg, power_state);
return;
@@ -3537,9 +3538,19 @@ static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
bool epss = snd_hda_codec_get_supported_ps(codec, fg, AC_PWRST_EPSS);
msleep(epss? 10:100);
}
+again:
snd_hda_codec_read(codec, fg, 0, AC_VERB_SET_POWER_STATE,
power_state);
snd_hda_codec_set_power_to_all(codec, fg, power_state, true);
+ state = snd_hda_codec_read(codec, fg, 0,
+ AC_VERB_GET_POWER_STATE, 0);
+ if (state & AC_PWRST_ERROR) {
+ /* repeat power states setting at most 10 times*/
+ if (count++ > 10)
+ snd_printk(KERN_WARNING "Power states transition reject!\n");
+ else
+ goto again;
+ }
}
/* modem wake on ring: transition from D2 to D0 in less than 2ms. For modems,
--
1.7.9.5
3
2

[alsa-devel] [PATCH] ALSA: hda - modem function group wake on ring support
by Wang Xingchao 07 Jun '12
by Wang Xingchao 07 Jun '12
07 Jun '12
D2 allows for the lowest possible power consuming
state from which it can return to "fully on" state D0 within 2ms.
For modems, it's the "wake on ring" power state.
Signed-off-by: Wang Xingchao <xingchao.wang(a)intel.com>
---
sound/pci/hda/hda_codec.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
index 2737fe7..d0ca370 100644
--- a/sound/pci/hda/hda_codec.c
+++ b/sound/pci/hda/hda_codec.c
@@ -3542,6 +3542,18 @@ static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
snd_hda_codec_set_power_to_all(codec, fg, power_state, true);
}
+/* modem wake on ring: transition from D2 to D0 in less than 2ms. For modems,
+ * this is the wake-on-ring power state */
+static void hda_modem_wake_on_ring(struct hda_codec *codec, bool enter)
+{
+ if (codec->mfg) {
+ if (enter)
+ hda_set_power_state(codec, codec->mfg, AC_PWRST_D2);
+ else
+ hda_set_power_state(codec, codec->mfg, AC_PWRST_D0);
+ }
+}
+
#ifdef CONFIG_SND_HDA_HWDEP
/* execute additional init verbs */
static void hda_exec_init_verbs(struct hda_codec *codec)
--
1.7.9.5
3
3

07 Jun '12
At Thu, 07 Jun 2012 10:00:24 +0100,
Steven Newbury wrote:
>
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> On 07/06/12 09:47, Takashi Iwai wrote:
> > At the next time you submit a patch, please add Cc to maintainer
> > and subsystem ML. Otherwise it'd be easily overlooked.
> >
> I meant to, somehow I managed to send it off before adding the CC,
> probably too early in the morning!
>
> > At Thu, 07 Jun 2012 06:52:59 +0100, Steven Newbury wrote:
> >>
> >> When VGA_SWITCHEROO support is enabled hda_intel initialises the
> >> HDMI audio device on the current VGA device. When it's not
> >> enabled it only initialises the HDMI device on the default VGA
> >> adaptor, this means secondary cards get no audio support which is
> >> very unhelpful for multi-seat!
> >>
> >> With this patch, when SUPPORT_VGA_SWITCHEROO is disabled
> >> hda_intel initialises all HDMI audio devices, not just the
> >> default VGA.
> >>
> >> Signed-off-by: Steven Newbury <steve(a)snewbury.org.uk>
> >
> > OK, it must be fixed indeed. The bug was introduced due to the
> > change in VGA-switcheroo side -- originally check_hdmi_disabled()
> > really checked the VGA-switcheroo state, so it returned the correct
> > value in the earlier version.
> >
> > In anyway, your patch looks almost OK, but it'd be better to move
> > ifdef and simplify like below. Could you check whether it works
> > for you?
> >
> Looks better, saves the pointless function call. I'll give it spin on
> my next boot.
Thanks!
Meanwhile I found that the current version is also buggy for some
setups with VGA-switcheroo. The current version won't work, for
example, when VGA-switcheroo is built-in for systems without
switcheroo. I'll need to cook up the fix for 3.5-rc2 in addition to
your fix.
Takashi
1
0
snd_hda_param_read() return value -1 means error, others are responses
Signed-off-by: Wang Xingchao <xingchao.wang(a)intel.com>
---
sound/pci/hda/hda_proc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sound/pci/hda/hda_proc.c b/sound/pci/hda/hda_proc.c
index 79d0188..99316a7 100644
--- a/sound/pci/hda/hda_proc.c
+++ b/sound/pci/hda/hda_proc.c
@@ -451,7 +451,7 @@ static void print_power_state(struct snd_info_buffer *buffer,
int sup = snd_hda_param_read(codec, nid, AC_PAR_POWER_STATE);
int pwr = snd_hda_codec_read(codec, nid, 0,
AC_VERB_GET_POWER_STATE, 0);
- if (sup)
+ if (sup != -1)
snd_iprintf(buffer, " Power states: %s\n",
bits_names(sup, names, ARRAY_SIZE(names)));
--
1.7.9.5
2
1

07 Jun '12
Add function to check whether power states supported by specific
codec node.
Signed-off-by: Wang Xingchao <xingchao.wang(a)intel.com>
---
sound/pci/hda/hda_codec.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
index 41ca803..b89c8ec 100644
--- a/sound/pci/hda/hda_codec.c
+++ b/sound/pci/hda/hda_codec.c
@@ -3505,6 +3505,22 @@ void snd_hda_codec_set_power_to_all(struct hda_codec *codec, hda_nid_t fg,
EXPORT_SYMBOL_HDA(snd_hda_codec_set_power_to_all);
/*
+ * supported power states check
+ */
+static bool snd_hda_codec_get_supported_ps(struct hda_codec *codec, hda_nid_t fg,
+ unsigned int power_state)
+{
+ int sup = snd_hda_param_read(codec, fg, AC_PAR_POWER_STATE);
+
+ if (sup < 0)
+ return false;
+ if (sup & power_state)
+ return true;
+ else
+ return false;
+}
+
+/*
* set power state of the codec
*/
static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
--
1.7.9.5
4
4

[alsa-devel] [PATCH V2] ALSA: hda - reduce msleep time if EPSS power states supported
by Wang Xingchao 07 Jun '12
by Wang Xingchao 07 Jun '12
07 Jun '12
if EPSS supported, transition from D3 state to D0 state in less
than 10ms
Signed-off-by: Wang Xingchao <xingchao.wang(a)intel.com>
---
sound/pci/hda/hda_codec.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
index b89c8ec..2737fe7 100644
--- a/sound/pci/hda/hda_codec.c
+++ b/sound/pci/hda/hda_codec.c
@@ -3532,8 +3532,11 @@ static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg,
}
/* this delay seems necessary to avoid click noise at power-down */
- if (power_state == AC_PWRST_D3)
- msleep(100);
+ if (power_state == AC_PWRST_D3) {
+ /* transition time less than 10ms for power down */
+ bool epss = snd_hda_codec_get_supported_ps(codec, fg, AC_PWRST_EPSS);
+ msleep(epss ? 10 : 100);
+ }
snd_hda_codec_read(codec, fg, 0, AC_VERB_SET_POWER_STATE,
power_state);
snd_hda_codec_set_power_to_all(codec, fg, power_state, true);
--
1.7.9.5
1
0

07 Jun '12
At the next time you submit a patch, please add Cc to maintainer and
subsystem ML. Otherwise it'd be easily overlooked.
At Thu, 07 Jun 2012 06:52:59 +0100,
Steven Newbury wrote:
>
> When VGA_SWITCHEROO support is enabled hda_intel initialises the HDMI audio device on the current VGA device. When it's not enabled it only initialises the HDMI device on the default VGA adaptor, this means secondary cards get no audio support which is very unhelpful for multi-seat!
>
> With this patch, when SUPPORT_VGA_SWITCHEROO is disabled hda_intel initialises all HDMI audio devices, not just the default VGA.
>
> Signed-off-by: Steven Newbury <steve(a)snewbury.org.uk>
OK, it must be fixed indeed. The bug was introduced due to the change
in VGA-switcheroo side -- originally check_hdmi_disabled() really
checked the VGA-switcheroo state, so it returned the correct value in
the earlier version.
In anyway, your patch looks almost OK, but it'd be better to move
ifdef and simplify like below. Could you check whether it works for
you?
Also, please give a patch that is applicable directly via git-am.
Apparently you created it via git show. Instead, use git-format-patch
or use --pretty=email for git-show. Or, send the patch directly via
git-send-email.
thanks,
Takashi
---
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index 2b6392b..2eb1b47 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -2484,9 +2484,9 @@ static void azx_notifier_unregister(struct azx *chip)
static int DELAYED_INIT_MARK azx_first_init(struct azx *chip);
static int DELAYED_INIT_MARK azx_probe_continue(struct azx *chip);
+#ifdef SUPPORT_VGA_SWITCHEROO
static struct pci_dev __devinit *get_bound_vga(struct pci_dev *pci);
-#ifdef SUPPORT_VGA_SWITCHEROO
static void azx_vs_set_state(struct pci_dev *pci,
enum vga_switcheroo_state state)
{
@@ -2578,6 +2578,7 @@ static int __devinit register_vga_switcheroo(struct azx *chip)
#else
#define init_vga_switcheroo(chip) /* NOP */
#define register_vga_switcheroo(chip) 0
+#define check_hdmi_disabled(pci) false
#endif /* SUPPORT_VGA_SWITCHER */
/*
@@ -2638,6 +2639,7 @@ static int azx_dev_free(struct snd_device *device)
return azx_free(device->device_data);
}
+#ifdef SUPPORT_VGA_SWITCHEROO
/*
* Check of disabled HDMI controller by vga-switcheroo
*/
@@ -2676,6 +2678,7 @@ static bool __devinit check_hdmi_disabled(struct pci_dev *pci)
}
return vga_inactive;
}
+#endif /* SUPPORT_VGA_SWITCHEROO */
/*
* white/black-listing for position_fix
1
0
At Thu, 7 Jun 2012 03:38:30 +0000,
Jamie Heilman wrote:
>
> With the USB audio streaming logic changes, my HeadRoom Bithead
> (08bb:2902 Burr-Brown PCM2902) no longer works. Symptoms include the
> loss of most of the normally available formats leaving only:
>
> root@cucamonga:~# cat /proc/asound/bithead/stream0
> Burr-Brown from TI USB Audio CODEC at usb-0000:00:1a.7-1.1.4, full speed : USB Audio
>
> Playback:
> Status: Stop
> Interface 1
> Altset 6
> Format: U8
> Channels: 1
> Endpoint: 2 OUT (ADAPTIVE)
> Rates: 32000, 44100, 48000
>
> Capture:
> Status: Stop
> Interface 2
> Altset 18
> Format: S8
> Channels: 1
> Endpoint: 4 IN (SYNC)
> Rates: 11025
>
> (normally 2 channel S16_LE is available, with capture rates up to
> 48kHz ... only the last altset's are being reported now) and a slew of
> proc registration warnings logged:
>
> ------------[ cut here ]------------
> WARNING: at fs/proc/generic.c:586 proc_register+0x169/0x1a6()
> Hardware name: Precision WorkStation T3400
> proc_dir_entry 'card1/pcm0p' already registered
> Modules linked in: snd_usb_audio(+) snd_usbmidi_lib snd_hda_intel(+) snd_hda_codec snd_hwdep snd_seq_midi snd_seq_midi_event snd_pcm snd_page_alloc snd_rawmidi snd_seq snd_seq_device snd_timer snd soundcore dcdbas floppy sr_mod usb_storage cdrom kvm_intel psmouse kvm tg3 evdev xfs dm_mod raid1 md_mod
> Pid: 1152, comm: modprobe Not tainted 3.5.0-rc1-00110-g71fae7e #2
> Call Trace:
> [<ffffffff8102a400>] warn_slowpath_common+0x83/0x9c
> [<ffffffff8102a4bc>] warn_slowpath_fmt+0x46/0x48
> [<ffffffff813829ad>] ? add_preempt_count+0x39/0x3b
> [<ffffffff811292f0>] proc_register+0x169/0x1a6
> [<ffffffff8112962e>] create_proc_entry+0x74/0x8c
> [<ffffffffa018eb63>] snd_info_register+0x3e/0xc3 [snd]
> [<ffffffffa01fde2e>] snd_pcm_new_stream+0xb1/0x404 [snd_pcm]
> [<ffffffffa024861f>] snd_usb_add_audio_stream+0xd2/0x230 [snd_usb_audio]
> [<ffffffffa0241d33>] ? snd_usb_parse_audio_format+0x252/0x34f [snd_usb_audio]
> [<ffffffff810d6b17>] ? kmem_cache_alloc_trace+0xab/0xbb
> [<ffffffffa0248c29>] snd_usb_parse_audio_interface+0x4ac/0x567 [snd_usb_audio]
> [<ffffffffa023f0ff>] snd_usb_create_stream+0xe9/0x125 [snd_usb_audio]
> [<ffffffffa023f9b1>] usb_audio_probe+0x62a/0x72c [snd_usb_audio]
> [<ffffffff812c49f5>] usb_probe_interface+0x136/0x1b1
> [<ffffffff81287e66>] ? driver_probe_device+0x1d3/0x1d3
> [<ffffffff81287d43>] driver_probe_device+0xb0/0x1d3
> [<ffffffff81287ec5>] __driver_attach+0x5f/0x83
> [<ffffffff812863a2>] bus_for_each_dev+0x54/0x86
> [<ffffffff81287730>] driver_attach+0x1e/0x20
> [<ffffffff8128747f>] bus_add_driver+0xfd/0x23a
> [<ffffffff812882e8>] driver_register+0x93/0x10e
> [<ffffffff812c383f>] usb_register_driver+0x7e/0x12a
> [<ffffffffa0257000>] ? 0xffffffffa0256fff
> [<ffffffffa0257000>] ? 0xffffffffa0256fff
> [<ffffffffa0257040>] snd_usb_audio_init+0x40/0x1000 [snd_usb_audio]
> [<ffffffff810001ff>] do_one_initcall+0x7f/0x134
> [<ffffffffa0257000>] ? 0xffffffffa0256fff
> [<ffffffff810688d4>] sys_init_module+0x16cf/0x195e
> [<ffffffff8106516c>] ? free_notes_attrs+0x4d/0x4d
> [<ffffffff810c38cb>] ? mmap_region+0x1c7/0x469
> [<ffffffff813856d2>] system_call_fastpath+0x16/0x1b
> ---[ end trace c1baea1a25a91564 ]---
Looks like the PCM substream assignment is buggy.
Does the patch (untested at all) below help?
thanks,
Takashi
---
diff --git a/sound/usb/card.h b/sound/usb/card.h
index 0d37238..2b9ffff 100644
--- a/sound/usb/card.h
+++ b/sound/usb/card.h
@@ -119,6 +119,7 @@ struct snd_usb_substream {
unsigned long unlink_mask; /* bitmask of unlinked urbs */
/* data and sync endpoints for this stream */
+ unsigned int ep_num; /* the endpoint number */
struct snd_usb_endpoint *data_endpoint;
struct snd_usb_endpoint *sync_endpoint;
unsigned long flags;
diff --git a/sound/usb/stream.c b/sound/usb/stream.c
index 6b7d7a2..083ed81 100644
--- a/sound/usb/stream.c
+++ b/sound/usb/stream.c
@@ -97,6 +97,7 @@ static void snd_usb_init_substream(struct snd_usb_stream *as,
subs->formats |= fp->formats;
subs->num_formats++;
subs->fmt_type = fp->fmt_type;
+ subs->ep_num = fp->endpoint;
}
/*
@@ -119,9 +120,7 @@ int snd_usb_add_audio_stream(struct snd_usb_audio *chip,
if (as->fmt_type != fp->fmt_type)
continue;
subs = &as->substream[stream];
- if (!subs->data_endpoint)
- continue;
- if (subs->data_endpoint->ep_num == fp->endpoint) {
+ if (subs->ep_num == fp->endpoint) {
list_add_tail(&fp->list, &subs->fmt_list);
subs->num_formats++;
subs->formats |= fp->formats;
@@ -134,7 +133,7 @@ int snd_usb_add_audio_stream(struct snd_usb_audio *chip,
if (as->fmt_type != fp->fmt_type)
continue;
subs = &as->substream[stream];
- if (subs->data_endpoint)
+ if (subs->ep_num)
continue;
err = snd_pcm_new_stream(as->pcm, stream, 1);
if (err < 0)
1
0

[alsa-devel] [PATCH V2] ALSA: hda - add power states information in proc
by Wang Xingchao 06 Jun '12
by Wang Xingchao 06 Jun '12
06 Jun '12
add more power states information:
- reset status
- clock stop ok
- power states error
Output like:
Power: setting=D0, actual=D0, Error, Clock-stop-OK, Setting-reset
Signed-off-by: Wang Xingchao <xingchao.wang(a)intel.com>
---
sound/pci/hda/hda_codec.h | 3 +++
sound/pci/hda/hda_proc.c | 9 ++++++++-
2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/sound/pci/hda/hda_codec.h b/sound/pci/hda/hda_codec.h
index 4fc3960..71864cdd 100644
--- a/sound/pci/hda/hda_codec.h
+++ b/sound/pci/hda/hda_codec.h
@@ -323,6 +323,9 @@ enum {
#define AC_PWRST_D1 0x01
#define AC_PWRST_D2 0x02
#define AC_PWRST_D3 0x03
+#define AC_PWRST_ERROR (1<<8)
+#define AC_PWRST_CLK_STOP_OK (1<<9)
+#define AC_PWRST_SETTING_RESET (1<<10)
/* Processing capabilies */
#define AC_PCAP_BENIGN (1<<0)
diff --git a/sound/pci/hda/hda_proc.c b/sound/pci/hda/hda_proc.c
index e59e2f0..79d0188 100644
--- a/sound/pci/hda/hda_proc.c
+++ b/sound/pci/hda/hda_proc.c
@@ -455,10 +455,17 @@ static void print_power_state(struct snd_info_buffer *buffer,
snd_iprintf(buffer, " Power states: %s\n",
bits_names(sup, names, ARRAY_SIZE(names)));
- snd_iprintf(buffer, " Power: setting=%s, actual=%s\n",
+ snd_iprintf(buffer, " Power: setting=%s, actual=%s",
get_pwr_state(pwr & AC_PWRST_SETTING),
get_pwr_state((pwr & AC_PWRST_ACTUAL) >>
AC_PWRST_ACTUAL_SHIFT));
+ if (pwr & AC_PWRST_ERROR)
+ snd_iprintf(buffer, " , Error");
+ if (pwr & AC_PWRST_CLK_STOP_OK)
+ snd_iprintf(buffer, " , Clock-stop-OK");
+ if (pwr & AC_PWRST_SETTING_RESET)
+ snd_iprintf(buffer, " , Setting-reset");
+ snd_iprintf(buffer, "\n");
}
static void print_unsol_cap(struct snd_info_buffer *buffer,
--
1.7.9.5
2
1

06 Jun '12
On Wed, June 4, 2012 at 15:31, Mark Brown wrote:
> A few small things below, very minor and easy to correct though.
>
> > + { DA732X_REG_STATUS_EXT , 0x00 },
> > + { DA732X_REG_STATUS , 0x00 },
>
> > + { DA732X_REG_MBOX0 , 0x00 },
> > + { DA732X_REG_MBOX1 , 0x00 },
> > + { DA732X_REG_MBOX2 , 0x00 },
> > + { DA732X_REG_MBOX_STATUS , 0x00 },
>
> > + { DA732X_REG_ID , 0x00 },
>
> > + { DA732X_REG_DMA_STATUS , 0x00 },
> > + { DA732X_REG_BROWNOUT , 0x00 },
>
> I would be very surprised if some or all of the above regsters aren't
> volatile and therefore shouldn't have default specified.
Correct. Will remove those from the cache.
> > +static int da732x_hpf_set(struct snd_kcontrol *kcontrol,
> > + struct snd_ctl_elem_value *ucontrol)
>
> Why doesn't a standard enum work for this?
This is because the two bits that are required for this are not adjacent in the
register, so we use our own get/set methods to control them.
> > + /* High Pass Filters */
> > + SOC_ENUM_EXT("DAC1 High Pass Filter Mode Switch",
> > + da732x_dac1_hpf_mode_enum, da732x_hpf_get, da732x_hpf_set),
>
> This shouldn't be a Switch, it's an enumeration. Switches are plain
> boolean controls.
Ok, fair point. Will rename accordingly.
> > + SOC_SINGLE("ADC1 Equalizer Switch", DA732X_REG_ADC1_EQ5,
> > + DA732X_EQ_EN_SHIFT, DA732X_EQ_EN_MAX, DA732X_NO_INVERT),
> > + SOC_SINGLE_TLV("ADC1 EQ Band 1 Volume", DA732X_REG_ADC1_EQ12,
> > + DA732X_EQ_BAND1_SHIFT, DA732X_EQ_VOL_VAL_MAX,
> > + DA732X_INVERT, eq_band_pga_tlv),
>
> I'd suggest calling the Switch "ADC1 EQ Switch" for consistency with the
> gains for the bands (or expanding EQ in the gains but that'll make for a
> lot of really long control names).
Again, makes sense. Will update all the ADC & DAC instances to align.
> > + case SND_SOC_DAPM_POST_PMU:
> > + if (w->reg == DA732X_REG_ADC1_PD)
> > + snd_soc_update_bits(codec, DA732X_REG_CLK_EN3,
> > + DA732X_ADCA_BB_CLK_EN,
> > + DA732X_ADCA_BB_CLK_EN);
> > + else
> > + snd_soc_update_bits(codec, DA732X_REG_CLK_EN3,
> > + DA732X_ADCC_BB_CLK_EN,
> > + DA732X_ADCC_BB_CLK_EN);
>
> This reads like it should be a switch statement. The effect will be the
> same but it's a bit clearer.
Ok, don't mind changing it if you think it's clearer.
> > + da732x->regmap = devm_regmap_init_i2c(i2c, &da732x_regmap);
> > + if (IS_ERR(da732x->regmap)) {
> > + ret = PTR_ERR(da732x->regmap);
> > + dev_err(&i2c->dev, "Failed to initialize regmap\n");
> > + goto err;
> > + }
> > +
> > + ret = snd_soc_register_codec(&i2c->dev, &soc_codec_dev_da732x,
> > + da732x_dai, ARRAY_SIZE(da732x_dai));
>
> The register cache defaults make it look like there's a device ID
> (or possibly chip revision?) register - it'd be good practice to read it
> here and either verify that it has the expected value or log it
> depending on which it is.
Is revision information. Will log this.
> > +static const struct i2c_device_id da732x_i2c_id[] = {
> > + { "da732x", 0},
> > + { }
> > +};
> > +MODULE_DEVICE_TABLE(i2c, da732x_i2c_id);
>
> Good practice would be to enumerate all the device IDs (so users can
> just register devices) but it doesn't really matter.
For now will stick with this.
1
0

06 Jun '12
From: MR Swami Reddy <MR.Swami.Reddy(a)ti.com>
ASoC:isabelle:With devm_ APIs regmap_exit() not needed, so remove regmap_exit().
Signed-off-by: Vishwas A Deshpande <vishwas.a.deshpande(a)ti.com>
Signed-off-by: M R Swami Reddy <mr.swami.reddy(a)ti.com>
---
sound/soc/codecs/isabelle.c | 2 --
1 files changed, 0 insertions(+), 2 deletions(-)
diff --git a/sound/soc/codecs/isabelle.c b/sound/soc/codecs/isabelle.c
index 69228ec..bcc77ef 100644
--- a/sound/soc/codecs/isabelle.c
+++ b/sound/soc/codecs/isabelle.c
@@ -1141,7 +1141,6 @@ static int __devinit isabelle_i2c_probe(struct i2c_client *i2c,
ARRAY_SIZE(isabelle_dai));
if (ret < 0) {
dev_err(&i2c->dev, "Failed to register codec: %d\n", ret);
- regmap_exit(dev_get_regmap(&i2c->dev, NULL));
return ret;
}
@@ -1151,7 +1150,6 @@ static int __devinit isabelle_i2c_probe(struct i2c_client *i2c,
static int __devexit isabelle_i2c_remove(struct i2c_client *client)
{
snd_soc_unregister_codec(&client->dev);
- regmap_exit(dev_get_regmap(&client->dev, NULL));
return 0;
}
3
2

[alsa-devel] [PATCH v3] ASoC: omap-abe-twl6040: Add device tree support
by Peter Ujfalusi 06 Jun '12
by Peter Ujfalusi 06 Jun '12
06 Jun '12
When the board boots with device tree the driver will receive the name of the
card, DAPM routing map, phandle for the audio components described in the dts
file, mclk speed, and the possibility of detecting the jack detection.
The card will be set up based on this information.
Since the routing is provided via DT we can mark the card fully routed so
core can take care of disconnecting the unused pins.
Signed-off-by: Peter Ujfalusi <peter.ujfalusi(a)ti.com>
Reviwed-by: Mark Brown <broonie(a)opensource.wolfsonmicro.com>
---
Hi,
Changes since v2 (resend):
- Do not override the return value from snd_soc_of_parse_audio_routing in case
of error.
Regards,
Peter
.../devicetree/bindings/sound/omap-abe-twl6040.txt | 91 ++++++++++++
sound/soc/omap/omap-abe-twl6040.c | 145 ++++++++++++++++----
2 files changed, 206 insertions(+), 30 deletions(-)
create mode 100644 Documentation/devicetree/bindings/sound/omap-abe-twl6040.txt
diff --git a/Documentation/devicetree/bindings/sound/omap-abe-twl6040.txt b/Documentation/devicetree/bindings/sound/omap-abe-twl6040.txt
new file mode 100644
index 0000000..65dec87
--- /dev/null
+++ b/Documentation/devicetree/bindings/sound/omap-abe-twl6040.txt
@@ -0,0 +1,91 @@
+* Texas Instruments OMAP4+ and twl6040 based audio setups
+
+Required properties:
+- compatible: "ti,abe-twl6040"
+- ti,model: Name of the sound card ( for example "SDP4430")
+- ti,mclk-freq: MCLK frequency for HPPLL operation
+- ti,mcpdm: phandle for the McPDM node
+- ti,twl6040: phandle for the twl6040 core node
+- ti,audio-routing: List of connections between audio components.
+ Each entry is a pair of strings, the first being the connection's sink,
+ the second being the connection's source.
+
+Optional properties:
+- ti,dmic: phandle for the OMAP dmic node if the machine have it connected
+- ti,jack_detection: Need to be set to <1> if the board capable to detect jack
+ insertion, removal.
+
+Available audio endpoints for the audio-routing table:
+
+Board connectors:
+ * Headset Stereophone
+ * Earphone Spk
+ * Ext Spk
+ * Line Out
+ * Vibrator
+ * Headset Mic
+ * Main Handset Mic
+ * Sub Handset Mic
+ * Line In
+ * Digital Mic
+
+twl6040 pins:
+ * HSOL
+ * HSOR
+ * EP
+ * HFL
+ * HFR
+ * AUXL
+ * AUXR
+ * VIBRAL
+ * VIBRAR
+ * HSMIC
+ * MAINMIC
+ * SUBMIC
+ * AFML
+ * AFMR
+
+ * Headset Mic Bias
+ * Main Mic Bias
+ * Digital Mic1 Bias
+ * Digital Mic2 Bias
+
+Digital mic pins:
+ * DMic
+
+Example:
+
+sound {
+ compatible = "ti,abe-twl6040";
+ ti,model = "SDP4430";
+
+ ti,jack-detection = <1>;
+ ti,mclk-freq = <38400000>;
+
+ ti,mcpdm = <&mcpdm>;
+ ti,dmic = <&dmic>;
+
+ ti,twl6040 = <&twl6040>;
+
+ /* Audio routing */
+ ti,audio-routing =
+ "Headset Stereophone", "HSOL",
+ "Headset Stereophone", "HSOR",
+ "Earphone Spk", "EP",
+ "Ext Spk", "HFL",
+ "Ext Spk", "HFR",
+ "Line Out", "AUXL",
+ "Line Out", "AUXR",
+ "Vibrator", "VIBRAL",
+ "Vibrator", "VIBRAR",
+ "HSMIC", "Headset Mic",
+ "Headset Mic", "Headset Mic Bias",
+ "MAINMIC", "Main Handset Mic",
+ "Main Handset Mic", "Main Mic Bias",
+ "SUBMIC", "Sub Handset Mic",
+ "Sub Handset Mic", "Main Mic Bias",
+ "AFML", "Line In",
+ "AFMR", "Line In",
+ "DMic", "Digital Mic",
+ "Digital Mic", "Digital Mic1 Bias";
+};
diff --git a/sound/soc/omap/omap-abe-twl6040.c b/sound/soc/omap/omap-abe-twl6040.c
index 9d93793..1343147 100644
--- a/sound/soc/omap/omap-abe-twl6040.c
+++ b/sound/soc/omap/omap-abe-twl6040.c
@@ -25,6 +25,7 @@
#include <linux/mfd/twl6040.h>
#include <linux/platform_data/omap-abe-twl6040.h>
#include <linux/module.h>
+#include <linux/of.h>
#include <sound/core.h>
#include <sound/pcm.h>
@@ -43,6 +44,8 @@
struct abe_twl6040 {
int jack_detection; /* board can detect jack events */
int mclk_freq; /* MCLK frequency speed for twl6040 */
+
+ struct platform_device *dmic_codec_dev;
};
static int omap_abe_hw_params(struct snd_pcm_substream *substream,
@@ -185,17 +188,6 @@ static int omap_abe_twl6040_init(struct snd_soc_pcm_runtime *rtd)
int hs_trim;
int ret = 0;
- /* Disable not connected paths if not used */
- twl6040_disconnect_pin(dapm, pdata->has_hs, "Headset Stereophone");
- twl6040_disconnect_pin(dapm, pdata->has_hf, "Ext Spk");
- twl6040_disconnect_pin(dapm, pdata->has_ep, "Earphone Spk");
- twl6040_disconnect_pin(dapm, pdata->has_aux, "Line Out");
- twl6040_disconnect_pin(dapm, pdata->has_vibra, "Vinrator");
- twl6040_disconnect_pin(dapm, pdata->has_hsmic, "Headset Mic");
- twl6040_disconnect_pin(dapm, pdata->has_mainmic, "Main Handset Mic");
- twl6040_disconnect_pin(dapm, pdata->has_submic, "Sub Handset Mic");
- twl6040_disconnect_pin(dapm, pdata->has_afm, "Line In");
-
/*
* Configure McPDM offset cancellation based on the HSOTRIM value from
* twl6040.
@@ -216,6 +208,24 @@ static int omap_abe_twl6040_init(struct snd_soc_pcm_runtime *rtd)
twl6040_hs_jack_detect(codec, &hs_jack, SND_JACK_HEADSET);
}
+ /*
+ * NULL pdata means we booted with DT. In this case the routing is
+ * provided and the card is fully routed, no need to mark pins.
+ */
+ if (!pdata)
+ return ret;
+
+ /* Disable not connected paths if not used */
+ twl6040_disconnect_pin(dapm, pdata->has_hs, "Headset Stereophone");
+ twl6040_disconnect_pin(dapm, pdata->has_hf, "Ext Spk");
+ twl6040_disconnect_pin(dapm, pdata->has_ep, "Earphone Spk");
+ twl6040_disconnect_pin(dapm, pdata->has_aux, "Line Out");
+ twl6040_disconnect_pin(dapm, pdata->has_vibra, "Vinrator");
+ twl6040_disconnect_pin(dapm, pdata->has_hsmic, "Headset Mic");
+ twl6040_disconnect_pin(dapm, pdata->has_mainmic, "Main Handset Mic");
+ twl6040_disconnect_pin(dapm, pdata->has_submic, "Sub Handset Mic");
+ twl6040_disconnect_pin(dapm, pdata->has_afm, "Line In");
+
return ret;
}
@@ -270,52 +280,116 @@ static struct snd_soc_card omap_abe_card = {
static __devinit int omap_abe_probe(struct platform_device *pdev)
{
struct omap_abe_twl6040_data *pdata = dev_get_platdata(&pdev->dev);
+ struct device_node *node = pdev->dev.of_node;
struct snd_soc_card *card = &omap_abe_card;
struct abe_twl6040 *priv;
int num_links = 0;
- int ret;
+ int ret = 0;
card->dev = &pdev->dev;
- if (!pdata) {
- dev_err(&pdev->dev, "Missing pdata\n");
- return -ENODEV;
- }
-
priv = devm_kzalloc(&pdev->dev, sizeof(struct abe_twl6040), GFP_KERNEL);
if (priv == NULL)
return -ENOMEM;
- if (pdata->card_name) {
- card->name = pdata->card_name;
+ priv->dmic_codec_dev = ERR_PTR(-EINVAL);
+
+ if (node) {
+ struct device_node *dai_node;
+
+ if (snd_soc_of_parse_card_name(card, "ti,model")) {
+ dev_err(&pdev->dev, "Card name is not provided\n");
+ return -ENODEV;
+ }
+
+ ret = snd_soc_of_parse_audio_routing(card,
+ "ti,audio-routing");
+ if (ret) {
+ dev_err(&pdev->dev,
+ "Error while parsing DAPM routing\n");
+ return ret;
+ }
+
+ dai_node = of_parse_phandle(node, "ti,mcpdm", 0);
+ if (!dai_node) {
+ dev_err(&pdev->dev, "McPDM node is not provided\n");
+ return -EINVAL;
+ }
+ abe_twl6040_dai_links[0].cpu_dai_name = NULL;
+ abe_twl6040_dai_links[0].cpu_dai_of_node = dai_node;
+
+ dai_node = of_parse_phandle(node, "ti,dmic", 0);
+ if (dai_node) {
+ num_links = 2;
+ abe_twl6040_dai_links[1].cpu_dai_name = NULL;
+ abe_twl6040_dai_links[1].cpu_dai_of_node = dai_node;
+
+ priv->dmic_codec_dev = platform_device_register_simple(
+ "dmic-codec", -1, NULL, 0);
+ if (IS_ERR(priv->dmic_codec_dev)) {
+ dev_err(&pdev->dev,
+ "Can't instantiate dmic-codec\n");
+ return PTR_ERR(priv->dmic_codec_dev);
+ }
+ } else {
+ num_links = 1;
+ }
+
+ of_property_read_u32(node, "ti,jack-detection",
+ &priv->jack_detection);
+ of_property_read_u32(node, "ti,mclk-freq",
+ &priv->mclk_freq);
+ if (!priv->mclk_freq) {
+ dev_err(&pdev->dev, "MCLK frequency not provided\n");
+ ret = -EINVAL;
+ goto err_unregister;
+ }
+
+ omap_abe_card.fully_routed = 1;
+ } else if (pdata) {
+ if (pdata->card_name) {
+ card->name = pdata->card_name;
+ } else {
+ dev_err(&pdev->dev, "Card name is not provided\n");
+ return -ENODEV;
+ }
+
+ if (pdata->has_dmic)
+ num_links = 2;
+ else
+ num_links = 1;
+
+ priv->jack_detection = pdata->jack_detection;
+ priv->mclk_freq = pdata->mclk_freq;
} else {
- dev_err(&pdev->dev, "Card name is not provided\n");
+ dev_err(&pdev->dev, "Missing pdata\n");
return -ENODEV;
}
- priv->jack_detection = pdata->jack_detection;
- priv->mclk_freq = pdata->mclk_freq;
-
if (!priv->mclk_freq) {
dev_err(&pdev->dev, "MCLK frequency missing\n");
- return -ENODEV;
+ ret = -ENODEV;
+ goto err_unregister;
}
- if (pdata->has_dmic)
- num_links = 2;
- else
- num_links = 1;
-
card->dai_link = abe_twl6040_dai_links;
card->num_links = num_links;
snd_soc_card_set_drvdata(card, priv);
ret = snd_soc_register_card(card);
- if (ret)
+ if (ret) {
dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n",
ret);
+ goto err_unregister;
+ }
+
+ return 0;
+
+err_unregister:
+ if (!IS_ERR(priv->dmic_codec_dev))
+ platform_device_unregister(priv->dmic_codec_dev);
return ret;
}
@@ -323,17 +397,28 @@ static __devinit int omap_abe_probe(struct platform_device *pdev)
static int __devexit omap_abe_remove(struct platform_device *pdev)
{
struct snd_soc_card *card = platform_get_drvdata(pdev);
+ struct abe_twl6040 *priv = snd_soc_card_get_drvdata(card);
snd_soc_unregister_card(card);
+ if (!IS_ERR(priv->dmic_codec_dev))
+ platform_device_unregister(priv->dmic_codec_dev);
+
return 0;
}
+static const struct of_device_id omap_abe_of_match[] = {
+ {.compatible = "ti,abe-twl6040", },
+ { },
+};
+MODULE_DEVICE_TABLE(of, omap_abe_of_match);
+
static struct platform_driver omap_abe_driver = {
.driver = {
.name = "omap-abe-twl6040",
.owner = THIS_MODULE,
.pm = &snd_soc_pm_ops,
+ .of_match_table = omap_abe_of_match,
},
.probe = omap_abe_probe,
.remove = __devexit_p(omap_abe_remove),
--
1.7.8.6
1
0

[alsa-devel] [PATCH 9/8] printk: Only look for prefix levels in kernel messages
by Joe Perches 06 Jun '12
by Joe Perches 06 Jun '12
06 Jun '12
vprintk_emit prefix parsing should only be done for internal
kernel messages. This allows existing behavior to be kept
in all cases.
Signed-off-by: Joe Perches <joe(a)perches.com>
---
kernel/printk.c | 32 +++++++++++++++++---------------
1 files changed, 17 insertions(+), 15 deletions(-)
diff --git a/kernel/printk.c b/kernel/printk.c
index 5cd73f7..4e72c07 100644
--- a/kernel/printk.c
+++ b/kernel/printk.c
@@ -1267,7 +1267,6 @@ asmlinkage int vprintk_emit(int facility, int level,
static char cont_buf[LOG_LINE_MAX];
static size_t cont_len;
static int cont_level;
- int kern_level;
static struct task_struct *cont_task;
static char textbuf[LOG_LINE_MAX];
char *text = textbuf;
@@ -1329,21 +1328,24 @@ asmlinkage int vprintk_emit(int facility, int level,
newline = true;
}
- /* strip syslog prefix and extract log level or control flags */
- kern_level = printk_get_level(text);
- if (kern_level) {
- const char *end_of_header = printk_skip_level(text);
- switch (kern_level) {
- case '0' ... '7':
- if (level == -1)
- level = kern_level - '0';
- case 'd': /* KERN_DEFAULT */
- prefix = true;
- case 'c': /* KERN_CONT */
- break;
+ /* strip kernel syslog prefix and extract log level or control flags */
+ if (facility == 0) {
+ int kern_level = printk_get_level(text);
+
+ if (kern_level) {
+ const char *end_of_header = printk_skip_level(text);
+ switch (kern_level) {
+ case '0' ... '7':
+ if (level == -1)
+ level = kern_level - '0';
+ case 'd': /* KERN_DEFAULT */
+ prefix = true;
+ case 'c': /* KERN_CONT */
+ break;
+ }
+ text_len -= end_of_header - text;
+ text = (char *)end_of_header;
}
- text_len -= end_of_header - text;
- text = (char *)end_of_header;
}
if (level == -1)
1
0
On Wed, 2012-06-06 at 03:10 +0200, Kay Sievers wrote:
> On Wed, Jun 6, 2012 at 2:46 AM, Andrew Morton <akpm(a)linux-foundation.org> wrote:
> > On Tue, 05 Jun 2012 17:40:05 -0700 Joe Perches <joe(a)perches.com> wrote:
> >
> >> On Tue, 2012-06-05 at 17:37 -0700, Andrew Morton wrote:
> >> > On Tue, 05 Jun 2012 17:07:27 -0700 Joe Perches <joe(a)perches.com> wrote:
> >> >
> >> > > On Tue, 2012-06-05 at 16:58 -0700, Andrew Morton wrote:
> >> > > > echo "\0014Hello Joe" > /dev/kmsg
> >> > >
> >> > > # echo -e "\x014Hello Me" > /dev/kmsg
> >> > > gives:
> >> > > 12,778,4057982669;Hello Me
> >> >
> >> > That's changed behavior.
> >>
> >> Which is an improvement too.
> >
> > No it isn't. It exposes internal kernel implementation details in
> > random weird inexplicable ways. It doesn't seem at all important
> > though.
> >
> >> I very much doubt a single app will change
> >> because of this.
> >
> > I doubt it as well.
>
> Yeah, the value of injecting such binary data is kind of questionable. :)
>
> Joe, maybe you can change printk_emit() to skip the prefix
> detection/stripping if a prefix is already passed to the function?
Sure, it's pretty trivial.
Perhaps all binary data data should be elided.
Maybe print . for all non-printable ascii chars.
1
0
On Tue, 05 Jun 2012 17:07:27 -0700 Joe Perches <joe(a)perches.com> wrote:
> On Tue, 2012-06-05 at 16:58 -0700, Andrew Morton wrote:
> > echo "\0014Hello Joe" > /dev/kmsg
>
> # echo -e "\x014Hello Me" > /dev/kmsg
> gives:
> 12,778,4057982669;Hello Me
That's changed behavior.
On Wed, 6 Jun 2012 02:28:39 +0200 Kay Sievers <kay(a)vrfy.org> wrote:
> Yeah, but printk_emit() will not try to parse it? I did not check, but
> with your change, the prefix parsing in printk_emit() is still skipped
> if a level is given as a parameter to printk_emit(), right?
printk_emit() does parse the leading \0014, and then skips over it,
removing it from the output stream. printk_emit() then throws away the
resulting level because devkmsg_writev() did not pass in level==-1.
2
2
On Wed, 2012-06-06 at 02:28 +0200, Kay Sievers wrote:
> On Wed, Jun 6, 2012 at 2:19 AM, Joe Perches <joe(a)perches.com> wrote:
> > On Wed, 2012-06-06 at 02:13 +0200, Kay Sievers wrote:
> >> The question is what happens if you inject your new binary two-byte
> >> prefix, like:
> >> echo -e "\x01\x02Hello" > /dev/kmsg
> >
> > It's not a 2 byte binary.
> > It's a leading ascii SOH and a standard ascii char
> > '0' ... '7' or 'd'.
> >
> > #define KERN_EMERG KERN_SOH "0" /* system is unusable */
> > #define KERN_ALERT KERN_SOH "1" /* action must be taken immediately */
> > etc...
>
> Ok.
>
> >> And if that changes the log-level to "2" instead of the default "4"?
> >
> > No it doesn't.
>
> So:
> echo -e "\x012Hello" > /dev/kmsg
> is still level 4? Sounds all fine then.
Yes.
# echo -e "\x012Hello again Kay" > /dev/kmsg
gives:
12,780,6031964979;Hello again Kay
> > It's not triggering that because devkmsg_writev does
> > prefix parsing only on the old "<n>" form.
>
> Yeah, but printk_emit() will not try to parse it? I did not check, but
> with your change, the prefix parsing in printk_emit() is still skipped
> if a level is given as a parameter to printk_emit(), right?
If level is not -1, then whatever prefix level the
string has is ignored by vprintk_emit.
from vprintk_emit:
/* strip syslog prefix and extract log level or control flags */
kern_level = printk_get_level(text);
if (kern_level) {
const char *end_of_header = printk_skip_level(text);
switch (kern_level) {
case '0' ... '7':
if (level == -1)
level = kern_level - '0';
case 'd': /* Strip d KERN_DEFAULT, start new line */
plen = 0;
default:
if (!new_text_line) {
log_buf_emit_char('\n');
new_text_line = 1;
}
}
text_len -= end_of_header - text;
text = (char *)end_of_header;
}
Only level == -1 will use the prefix level.
devkmsg_writev always passes a non -1 level.
cheers, Joe
1
0
On Wed, 2012-06-06 at 02:13 +0200, Kay Sievers wrote:
> The question is what happens if you inject your new binary two-byte
> prefix, like:
> echo -e "\x01\x02Hello" > /dev/kmsg
It's not a 2 byte binary.
It's a leading ascii SOH and a standard ascii char
'0' ... '7' or 'd'.
#define KERN_EMERG KERN_SOH "0" /* system is unusable */
#define KERN_ALERT KERN_SOH "1" /* action must be taken immediately */
etc...
> And if that changes the log-level to "2" instead of the default "4"?
No it doesn't.
It's not triggering that because devkmsg_writev does
prefix parsing only on the old "<n>" form.
1
0
On Wed, 2012-06-06 at 01:48 +0200, Kay Sievers wrote:
> On Wed, Jun 6, 2012 at 1:43 AM, Joe Perches <joe(a)perches.com> wrote:
> > On Wed, 2012-06-06 at 01:39 +0200, Kay Sievers wrote:
>
> >> > # echo "\001Hello Andrew" > /dev/kmsg
> >> > /dev/kmsg has
> >> > 12,774,2462339252;\001Hello Andrew
> >>
> >> Try "echo -e"? The stuff is copied verbatim otherwise.
> >
> > # echo -e "\001Hello Kay" > /dev/kmsg
> > gives
> > 12,776,3046752764;\x01Hello Kay
>
> Don't you need two bytes to trigger the logic?
Yes. Angle brackets fore and aft.
If you use a "<n>" prefix for write to /dev/kmsg,
then it's supported just like before.
Otherwise, it's emitted at KERN_DEFAULT.
cheers, Joe
2
2
On Wed, 2012-06-06 at 01:39 +0200, Kay Sievers wrote:
> Try "echo -e"? The stuff is copied verbatim otherwise.
btw: I didn't change the devkmsg_writev function
which does the decoding of any "<n>" prefix for
printk_emit.
1
0
On Wed, 2012-06-06 at 01:39 +0200, Kay Sievers wrote:
> On Wed, Jun 6, 2012 at 1:35 AM, Joe Perches <joe(a)perches.com> wrote:
> > On Tue, 2012-06-05 at 16:29 -0700, Andrew Morton wrote:
> >> What about writes starting with \001n? AFACIT, that will be stripped
> >> away and the printk level will be altered. This is new behavior.
> >
> > Nope.
> >
> > # echo "\001Hello Andrew" > /dev/kmsg
> > /dev/kmsg has
> > 12,774,2462339252;\001Hello Andrew
>
> Try "echo -e"? The stuff is copied verbatim otherwise.
# echo -e "\001Hello Kay" > /dev/kmsg
gives
12,776,3046752764;\x01Hello Kay
1
0
KERN_<LEVEL> currently takes up 3 bytes.
Shrink the kernel size by using an ASCII SOH and then the level byte.
Remove the need for KERN_CONT.
Convert directly embedded uses of <.> to KERN_<LEVEL>
Joe Perches (8):
printk: Add generic functions to find KERN_<LEVEL> headers
printk: Add kern_levels.h to make KERN_<LEVEL> available for asm use
arch: Remove direct definitions of KERN_<LEVEL> uses
btrfs: Use printk_get_level and printk_skip_level, add __printf, fix fallout
sound: Use printk_get_level and printk_skip_level
staging: wlags49_h2: Remove direct declarations of KERN_<LEVEL> prefixes
printk: Convert the format for KERN_<LEVEL> to a 2 byte pattern
printk: Remove the now unnecessary "C" annotation for KERN_CONT
arch/arm/lib/io-acorn.S | 3 +-
arch/arm/vfp/vfphw.S | 7 +++--
arch/frv/kernel/kernel_thread.S | 2 +-
drivers/staging/wlags49_h2/hcf.c | 8 +++---
drivers/staging/wlags49_h2/wl_main.c | 4 +-
fs/btrfs/ctree.h | 13 ++++++++++
fs/btrfs/disk-io.c | 2 +-
fs/btrfs/relocation.c | 2 +-
fs/btrfs/super.c | 41 +++++++++++++++++++++++++++++-----
include/linux/kern_levels.h | 25 ++++++++++++++++++++
include/linux/printk.h | 41 +++++++++++++++++++--------------
kernel/printk.c | 14 +++++++----
sound/core/misc.c | 13 +++++++---
13 files changed, 130 insertions(+), 45 deletions(-)
create mode 100644 include/linux/kern_levels.h
--
1.7.8.111.gad25c.dirty
2
7
On Wed, 06 Jun 2012 00:55:00 +0200
Kay Sievers <kay(a)vrfy.org> wrote:
> On Tue, 2012-06-05 at 14:28 -0700, Andrew Morton wrote:
>
> > devkmsg_writev() does weird and wonderful things with
> > facilities/levels. That function incorrectly returns "success" when
> > copy_from_user() faults, btw.
>
> Oh. Better?
>
> Thanks,
> Kay
>
>
> From: Kay Sievers <kay(a)vrfy.org>
> Subject: kmsg: /dev/kmsg - properly return possible copy_from_user() failure
>
> Reported-By: Andrew Morton <akpm(a)linux-foundation.org>
> Signed-off-by: Kay Sievers <kay(a)vrfy.org
> ---
> printk.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/kernel/printk.c b/kernel/printk.c
> index 32462d2..6bdacab 100644
> --- a/kernel/printk.c
> +++ b/kernel/printk.c
> @@ -365,8 +365,10 @@ static ssize_t devkmsg_writev(struct kiocb *iocb, const struct iovec *iv,
>
> line = buf;
> for (i = 0; i < count; i++) {
> - if (copy_from_user(line, iv[i].iov_base, iv[i].iov_len))
> + if (copy_from_user(line, iv[i].iov_base, iv[i].iov_len)) {
> + ret = -EFAULT;
> goto out;
> + }
> line += iv[i].iov_len;
> }
Strictly speaking, when write() encounters an error it should return
number-of-bytes-written, or an errno if it wrote zero bytes. So
something like
--- a/kernel/printk.c~a
+++ a/kernel/printk.c
@@ -355,7 +355,7 @@ static ssize_t devkmsg_writev(struct kio
int level = default_message_loglevel;
int facility = 1; /* LOG_USER */
size_t len = iov_length(iv, count);
- ssize_t ret = len;
+ ssize_t ret;
if (len > LOG_LINE_MAX)
return -EINVAL;
@@ -365,8 +365,12 @@ static ssize_t devkmsg_writev(struct kio
line = buf;
for (i = 0; i < count; i++) {
- if (copy_from_user(line, iv[i].iov_base, iv[i].iov_len))
+ if (copy_from_user(line, iv[i].iov_base, iv[i].iov_len)) {
+ ret = line - buf;
+ if (!ret)
+ ret = -EFAULT;
goto out;
+ }
line += iv[i].iov_len;
}
@@ -396,6 +400,7 @@ static ssize_t devkmsg_writev(struct kio
line[len] = '\0';
printk_emit(facility, level, NULL, 0, "%s", line);
+ ret = 0;
out:
kfree(buf);
return ret;
_
1
0

06 Jun '12
add more power states information:
- reset status
- clock stop ok
- power states error
Signed-off-by: Wang Xingchao <xingchao.wang(a)intel.com>
---
sound/pci/hda/hda_codec.h | 3 +++
sound/pci/hda/hda_proc.c | 6 ++++++
2 files changed, 9 insertions(+)
diff --git a/sound/pci/hda/hda_codec.h b/sound/pci/hda/hda_codec.h
index 4fc3960..71864cdd 100644
--- a/sound/pci/hda/hda_codec.h
+++ b/sound/pci/hda/hda_codec.h
@@ -323,6 +323,9 @@ enum {
#define AC_PWRST_D1 0x01
#define AC_PWRST_D2 0x02
#define AC_PWRST_D3 0x03
+#define AC_PWRST_ERROR (1<<8)
+#define AC_PWRST_CLK_STOP_OK (1<<9)
+#define AC_PWRST_SETTING_RESET (1<<10)
/* Processing capabilies */
#define AC_PCAP_BENIGN (1<<0)
diff --git a/sound/pci/hda/hda_proc.c b/sound/pci/hda/hda_proc.c
index e59e2f0..5511de1 100644
--- a/sound/pci/hda/hda_proc.c
+++ b/sound/pci/hda/hda_proc.c
@@ -459,6 +459,12 @@ static void print_power_state(struct snd_info_buffer *buffer,
get_pwr_state(pwr & AC_PWRST_SETTING),
get_pwr_state((pwr & AC_PWRST_ACTUAL) >>
AC_PWRST_ACTUAL_SHIFT));
+ if (pwr & AC_PWRST_ERROR)
+ snd_iprintf(buffer, " Power state error\n");
+ if (pwr & AC_PWRST_CLK_STOP_OK)
+ snd_iprintf(buffer, " PS: clock stop ok\n");
+ if (pwr & AC_PWRST_SETTING_RESET)
+ snd_iprintf(buffer, " Power state setting reset\n");
}
static void print_unsol_cap(struct snd_info_buffer *buffer,
--
1.7.9.5
3
2

[alsa-devel] Confusing about Playback/Capture, CODEC/CODEC links, and snd_soc_dapm_link_dai_widgets()
by Stephen Warren 05 Jun '12
by Stephen Warren 05 Jun '12
05 Jun '12
Mark, Liam,
recall the Tegra AHUB structure:
> +-------------+ +-----+ +--------------+ +-----+ +------+
> | FIFO pair 0 |<->| CIF |<->| Cross-bar |<->| CIF |<->| I2S0 |<-> External IO
> +-------------+ +-----+ | (the "AHUB") | +-----+ +------+
> . . . | | . . .
> +-------------+ +-----+ | | +-----+ +------+
> | FIFO pair 3 |<->| CIF |<->| |<->| CIF |<->| I2S4 |<-> External IO
> +-------------+ +-----+ | | +-----+ +------+
> | |
> | | +-----+ +-------+
> | |<->| CIF |<->| SPDIF |<-> External IO
> | | +-----+ +-------+
> | |
> | | +-----+ +-------+
> | |<->| CIF |<->| DAM |
> | | +-----+ +-------+
> +--------------+
(CIF is AHUB XBAR Client InterFace; basically the DAI or DAI link)
I have created a driver for the 4 FIFOs on the left, which exposes 4
(CPU) DAIs.
I have created a driver for the AHUB XBAR, which is an ASoC CODEC, and
has a DAI for each of the CIFs.
There's a CODEC/CODEC link between each FIFO DAI and the relevant AHUB
CIF DAI.
In order to connect the I2S devices to the AHUB XBAR, I had to make that
a CODEC too. This exposes two DAIs; the CIF DAI to connect to the AHUB,
and the DAP (Digital Audio Port) DAI to represent the I/O pins on the
Tegra package that are connected to the external codec.
I have an issue with the paths that snd_soc_dapm_link_dai_widgets() sets
up inside both the AHUB XBAR and the I2S. I'll use the I2S to explain
since it's internally much simpler.
The two DAIs in I2S are roughly:
> static const struct snd_soc_dai_driver tegra30_i2s_dais[] = {
> {
> .playback = {
> .stream_name = "DAP Playback",
> },
> .capture = {
> .stream_name = "DAP Capture",
> },
> },
> {
> .playback = {
> .stream_name = "CIF Playback",
> },
> .capture = {
> .stream_name = "CIF Capture",
> },
> },
> };
For the CIF-side DAI, I instantiated widgets for the AIFs:
> static const struct snd_soc_dapm_widget tegra30_i2s_widgets[] = {
> SND_SOC_DAPM_AIF_IN("CIF RX", "CIF Playback", 0, SND_SOC_NOPM, 0, 0),
> SND_SOC_DAPM_AIF_OUT("CIF TX", "CIF Capture", 0, SND_SOC_NOPM, 0, 0),
This works fine; snd_soc_dapm_link_dai_widgets() create a route from the
DAI widget "DAP Playback" that feeds into the AIF_IN widget "CIF RX".
"works fine" means that the ASoC debugfs files in
"asoc/$card/tegra30-i2s.1/dapm/CIF {Playback,RX}" show the expected
connections.
The DAPM routes inside the I2S are:
> static const struct snd_soc_dapm_route tegra30_i2s_routes[] = {
> { "DAP TX", NULL, "CIF RX" },
> { "CIF TX", NULL, "DAP RX" },
> };
This also works fine.
Now, I instantiated two AIF widgets to interface with the DAP-side DAI:
> SND_SOC_DAPM_AIF_IN("DAP RX", "DAP Capture", 0, SND_SOC_NOPM, 0, 0),
> SND_SOC_DAPM_AIF_OUT("DAP TX", "DAP Playback", 0, SND_SOC_NOPM, 0, 0),
However, this causes snd_soc_dapm_link_dai_widgets() to set up some
unexpected paths; "DAP Playback" ends up feeding *into* "DAP TX", rather
than feeding from/out of it...
> # cat CIF\ Playback
> CIF Playback: Off in 0 out 0
> stream CIF Playback inactive
> out "static" "CIF RX"
> out "static" "CIF RX"
> # cat CIF\ RX
> CIF RX: Off in 0 out 0
> stream CIF Playback inactive
> in "static" "CIF Playback"
> in "static" "CIF Playback"
> out "static" "DAP TX"
> # cat DAP\ TX
> DAP TX: Off in 0 out 0
> stream DAP Playback inactive
> in "static" "DAP Playback" <<<<<<<<<<
> in "static" "DAP Playback" <<<<<<<<<<
> in "static" "CIF RX"
> # cat DAP\ Playback
> DAP Playback: Off in 0 out 0
> stream DAP Playback inactive
> out "static" "DAP TX"
> out "static" "DAP TX"
Now, I can fake this out by swapping the stream names on the DAP-side
AIF widgets:
> SND_SOC_DAPM_AIF_IN("DAP RX", "DAP Playback", 0, SND_SOC_NOPM, 0, 0),
> SND_SOC_DAPM_AIF_OUT("DAP TX", "DAP Capture", 0, SND_SOC_NOPM, 0, 0),
Which yields the expected paths in debugfs:
> # cat CIF\ Playback
> CIF Playback: Off in 0 out 0
> stream CIF Playback inactive
> out "static" "CIF RX"
> out "static" "CIF RX"
> # cat CIF\ RX
> CIF RX: Off in 0 out 0
> stream CIF Playback inactive
> in "static" "CIF Playback"
> in "static" "CIF Playback"
> out "static" "DAP TX"
> # cat DAP\ TX
> DAP TX: Off in 0 out 0
> stream DAP Capture inactive
> in "static" "CIF RX"
> out "static" "DAP Capture"
> out "static" "DAP Capture"
> # cat DAP\ Capture
> DAP Capture: Off in 0 out 0
> stream DAP Capture inactive
> in "static" "DAP TX"
> in "static" "DAP TX"
But I'm not sure if that's quite correct. In the DAI definitions, is the
.playback sub-structure always meant to represent:
1) Playback from the CPU's perspective, in which case the first set of
DAP AIF definitions above would be correct
or:
2) Is it more that Playback==RX_into_codec, Capture==TX_from_codec? This
appears to be supported by the fact that the paths get set up correctly
with the second set of AIF definitions above.
But if (2) is correct, I wonder why soc_dapm_stream_event()'s first if
statement appears to consider the playback_widget of both sides of the
DAI to be coupled; wouldn't one side's playback widget be coupled to the
other side's capture widget?
As an aside, I'm not sure if it's conceptually correct to talk about
playback or capture any more (beyond the initial CPU DAI) with arbitrary
CODEC/CODEC links, since who knows what kind of routing/CPU->CPU
loopbacks/external CODEC->CODEC loopbacks/... might exist in the CODECs?
Either way though, something is still not working correctly even when
the expected paths show up in debugfs. When I start playback on a PCM
exposed by the DMA FIFO driver, I see the relevant AHUB XBAR's stream
turned on, and a route exists to the relevant AIF_IN widget, but that
widget is not considered to have any outward connections by
is_connected_output_ep(), which I think is what is causing it and none
of the rest of the path to turn on:
(from asoc/$card/asoc/tegra30-ahub-xbar/dapm)
> # cat APBIF0\ Playback
> APBIF0 Playback: On in 1 out 1
> stream APBIF0 Playback active
> out "static" "APBIF0 RX"
> out "static" "APBIF0 RX"
> # cat APBIF0\ RX
> APBIF0 RX: Off in 2 out 0 <<<<< last value shouldn't be 0?
> stream APBIF0 Playback inactive <<<<< still inactive?
> in "static" "APBIF0 Playback"
> in "static" "APBIF0 Playback"
> out "APBIF0 RX" "I2S0 TX Mux"
even though when I look at all the debugfs files, all the expected paths
are there, at least within the AHUB XBAR and I2S drivers, and the
external DAI links in the machine driver all probed as expected and
bound all the components together.
Probably related, the I2S and WM8903 (DAI) drivers aren't being called
by the ASoC core to initialize themselves for playback either; pretty
much all that happens is that DMA is started. Is the machine driver
responsible for this?
At this point, I'm not sure whether I have a gross mis-understanding of
how this is supposed to work, or whether there are simply bits missing
from the DAPM code to fully support CODEC/CODEC links, rather than
CPU/CODEC links.
Probably slightly related to all of this, but is the following code correct:
> int snd_soc_dapm_dai_get_connected_widgets(struct snd_soc_dai *dai, int stream,
> struct snd_soc_dapm_widget_list **list)
...
> if (stream == SNDRV_PCM_STREAM_PLAYBACK)
> paths = is_connected_output_ep(dai->playback_widget, list);
> else
> paths = is_connected_input_ep(dai->playback_widget, list);
I would have expected this to use capture_widget on the final line, but
I haven't thought about this in detail, just noticed the lack of
symmetry by very brief inspection.
Thanks for any help. Sorry for the long email.
4
10
In dapm_widget_power_read_file(), there is first:
> list_for_each_entry(p, &w->sources, list_sink) {
> if (p->connected && !p->connected(w, p->sink))
> continue;
then right after that:
> list_for_each_entry(p, &w->sinks, list_source) {
> if (p->connected && !p->connected(w, p->sink))
> continue;
Should that last call to p->connected() be p->connected(p->source, w),
since the function's parameters are (source, sink)?
2
1

[alsa-devel] [PATCH] ALSA: au88x0 - Remove unused "Master Mono" Playback Volume and Playback Switch of ac97 codec
by Raymond Yau 05 Jun '12
by Raymond Yau 05 Jun '12
05 Jun '12
Remove "Master Mono Playback Volume" and "Master Mono Playback Switch"
of ac97 mixer since au88x0 does no use "Master Mono Pin" of AC97 codec
even au88x0 support mono playback
2
1
Hi everybody.
Please advice me to solve my problem.
1. My environment
Hardware Alpha-project MS104-SH4AG with SH7764
kernel sh-linux-2.6.29
ALSA driver sh7764-pcm.c developped
by Manuel Lauss <mano(a)roarinelk.homelinux.net>
2. My problem
I am using the above ALSA driver for SH7764 SSI.
I have found the runtime->dma_area address refers DMA area
via D-cache.
So, playback start is too late after executing
snd_pcm_writei().
Until D-cache writeback is done, sound data stays in D-cache.
I want to read and write from/to main memory
without D-cache.
3. My idea to solve this problem
3-1 change allocating type of DMA area as follows
snd_pcm_lib_preallocate_pages_for_all(
pcm, SNDRV_DMA_TYPE_CONTINUOUS,
snd_dma_continuous_data(GFP_KERNEL),
64*1024, 64*1024);
is changed to
snd_pcm_lib_preallocate_pages_for_all(
pcm, SNDRV_DMA_TYPE_DEV, <----------- here
snd_dma_continuous_data(GFP_KERNEL),
64*1024, 64*1024);
to let dma_addr pointing P2SEG area without caching
3-2 program internal DMA controller start address
with dma_addr
ssidma_outl(sd, (virt_to_phys)(u32)runtime->dma_addr,
SSIRDMADR);
3-3 add mmap_data_fault routine
static int sh7764_mmap_data_fault(
structvm_area_struct*area,
struct vm_fault *vmf)
{
struct snd_pcm_substream *substream = area->vm_private_data;
struct snd_pcm_runtime *runtime;
unsigned long offset;
struct page * page;
void *vaddr;
size_t dma_bytes;
pr_debug("mmap_data_fault\n");
if (substream == NULL)
return VM_FAULT_SIGBUS;
runtime = substream->runtime;
offset = vmf->pgoff << PAGE_SHIFT;
dma_bytes = PAGE_ALIGN(runtime->dma_bytes);
if (offset > dma_bytes - PAGE_SIZE)
return VM_FAULT_SIGBUS;
if (substream->ops->page) {
page = substream->ops->page(substream, offset);
if (!page)
return VM_FAULT_SIGBUS;
} else {
vaddr = runtime->dma_addr + offset;
page = virt_to_page(vaddr);
}
get_page(page);
vmf->page = page;
pr_debug("mmap_data_fault:page = %x\n", (unsigned int)page);
return 0;
}
static struct vm_operations_struct sh7764_pcm_vm_ops_data =
{
.open = snd_pcm_mmap_data_open,
.close = snd_pcm_mmap_data_close,
.fault = sh7764_mmap_data_fault,
};
3-3 add sh7764_pcm_mmap routine
static int sh7764_pcm_mmap(
struct snd_pcm_substream *substream,
struct vm_area_struct *area)
{
unsigned long offset;
unsigned long mp;
unsigned long virt;
int map_size;
struct page *map, *mapend, *ip;
struct snd_pcm_runtime *runtime;
int ret;
#ifdef pgprot_noncached
area->vm_page_prot = pgprot_noncached(area->vm_page_prot);
#endif
offset = area->vm_pgoff << PAGE_SHIFT;
runtime = substream->runtime;
map_size = runtime->dma_bytes;
mp = virt_to_phys((unsigned long)runtime->dma_addr));
map = virt_to_page(mp);
mapend = virt_to_page(mp+map_size - 1);
for (ip = map; ip <= mapend; ip++){
SetPageReserved(ip);
area->vm_ops = &sh7764_pcm_vm_ops_data;
area->vm_private_data = substream;
area->vm_flags |= VM_IO;
ret = io_remap_pfn_range(area, area->vm_start,
mp>>PAGE_SHIFT,
area->vm_end - area->vm_start,
area->vm_page_prot);
if (ret ){
pr_debug("sh7764-pcm.c:remap_pfn_range returned EAGAIN\n");
return -EAGAIN;
}
atomic_inc(&substream->mmap_count);
pr_debug("mmap_count=%u\n", substream->mmap_count);
return 0;
}
static struct snd_pcm_ops sh7764_ssidma_ops = {
.open = sh7764_ssidma_open,
.close = sh7764_ssidma_close,
.ioctl = snd_pcm_lib_ioctl,
.hw_params = sh7764_hw_params,
.hw_free = sh7764_hw_free,
.prepare = sh7764_prepare,
.trigger = sh7764_trigger,
.pointer = sh7764_pos,
.mmap = sh7764_pcm_mmap,
};
------------------------------------------------------------
Sorry, so long contents.
My solution is right?
or
Is there any better solution ?
Best regards
----------
MASAO TAKAHASHI <masao-takahashi(a)kanno.co.jp>
KANNO WORKS CO., LTD. JAPAN
TEL 093-436-2330
2
3

[alsa-devel] [PATCH v2 resend] ASoC: omap-abe-twl6040: Add device tree support
by Peter Ujfalusi 05 Jun '12
by Peter Ujfalusi 05 Jun '12
05 Jun '12
When the board boots with device tree the driver will receive the name of the
card, DAPM routing map, phandle for the audio components described in the dts
file, mclk speed, and the possibility of detecting the jack detection.
The card will be set up based on this information.
Since the routing is provided via DT we can mark the card fully routed so
core can take care of disconnecting the unused pins.
Signed-off-by: Peter Ujfalusi <peter.ujfalusi(a)ti.com>
---
Hi Mark, Liam.
This patch was part of the series to add the Device Tree support for ABE+TWL6040
based audio.
The intro mail for the series was:
http://mailman.alsa-project.org/pipermail/alsa-devel/2012-May/052103.html
Thank you,
Peter
.../devicetree/bindings/sound/omap-abe-twl6040.txt | 91 ++++++++++++
sound/soc/omap/omap-abe-twl6040.c | 145 ++++++++++++++++----
2 files changed, 206 insertions(+), 30 deletions(-)
create mode 100644 Documentation/devicetree/bindings/sound/omap-abe-twl6040.txt
diff --git a/Documentation/devicetree/bindings/sound/omap-abe-twl6040.txt b/Documentation/devicetree/bindings/sound/omap-abe-twl6040.txt
new file mode 100644
index 0000000..65dec87
--- /dev/null
+++ b/Documentation/devicetree/bindings/sound/omap-abe-twl6040.txt
@@ -0,0 +1,91 @@
+* Texas Instruments OMAP4+ and twl6040 based audio setups
+
+Required properties:
+- compatible: "ti,abe-twl6040"
+- ti,model: Name of the sound card ( for example "SDP4430")
+- ti,mclk-freq: MCLK frequency for HPPLL operation
+- ti,mcpdm: phandle for the McPDM node
+- ti,twl6040: phandle for the twl6040 core node
+- ti,audio-routing: List of connections between audio components.
+ Each entry is a pair of strings, the first being the connection's sink,
+ the second being the connection's source.
+
+Optional properties:
+- ti,dmic: phandle for the OMAP dmic node if the machine have it connected
+- ti,jack_detection: Need to be set to <1> if the board capable to detect jack
+ insertion, removal.
+
+Available audio endpoints for the audio-routing table:
+
+Board connectors:
+ * Headset Stereophone
+ * Earphone Spk
+ * Ext Spk
+ * Line Out
+ * Vibrator
+ * Headset Mic
+ * Main Handset Mic
+ * Sub Handset Mic
+ * Line In
+ * Digital Mic
+
+twl6040 pins:
+ * HSOL
+ * HSOR
+ * EP
+ * HFL
+ * HFR
+ * AUXL
+ * AUXR
+ * VIBRAL
+ * VIBRAR
+ * HSMIC
+ * MAINMIC
+ * SUBMIC
+ * AFML
+ * AFMR
+
+ * Headset Mic Bias
+ * Main Mic Bias
+ * Digital Mic1 Bias
+ * Digital Mic2 Bias
+
+Digital mic pins:
+ * DMic
+
+Example:
+
+sound {
+ compatible = "ti,abe-twl6040";
+ ti,model = "SDP4430";
+
+ ti,jack-detection = <1>;
+ ti,mclk-freq = <38400000>;
+
+ ti,mcpdm = <&mcpdm>;
+ ti,dmic = <&dmic>;
+
+ ti,twl6040 = <&twl6040>;
+
+ /* Audio routing */
+ ti,audio-routing =
+ "Headset Stereophone", "HSOL",
+ "Headset Stereophone", "HSOR",
+ "Earphone Spk", "EP",
+ "Ext Spk", "HFL",
+ "Ext Spk", "HFR",
+ "Line Out", "AUXL",
+ "Line Out", "AUXR",
+ "Vibrator", "VIBRAL",
+ "Vibrator", "VIBRAR",
+ "HSMIC", "Headset Mic",
+ "Headset Mic", "Headset Mic Bias",
+ "MAINMIC", "Main Handset Mic",
+ "Main Handset Mic", "Main Mic Bias",
+ "SUBMIC", "Sub Handset Mic",
+ "Sub Handset Mic", "Main Mic Bias",
+ "AFML", "Line In",
+ "AFMR", "Line In",
+ "DMic", "Digital Mic",
+ "Digital Mic", "Digital Mic1 Bias";
+};
diff --git a/sound/soc/omap/omap-abe-twl6040.c b/sound/soc/omap/omap-abe-twl6040.c
index 9d93793..1995a7f 100644
--- a/sound/soc/omap/omap-abe-twl6040.c
+++ b/sound/soc/omap/omap-abe-twl6040.c
@@ -25,6 +25,7 @@
#include <linux/mfd/twl6040.h>
#include <linux/platform_data/omap-abe-twl6040.h>
#include <linux/module.h>
+#include <linux/of.h>
#include <sound/core.h>
#include <sound/pcm.h>
@@ -43,6 +44,8 @@
struct abe_twl6040 {
int jack_detection; /* board can detect jack events */
int mclk_freq; /* MCLK frequency speed for twl6040 */
+
+ struct platform_device *dmic_codec_dev;
};
static int omap_abe_hw_params(struct snd_pcm_substream *substream,
@@ -185,17 +188,6 @@ static int omap_abe_twl6040_init(struct snd_soc_pcm_runtime *rtd)
int hs_trim;
int ret = 0;
- /* Disable not connected paths if not used */
- twl6040_disconnect_pin(dapm, pdata->has_hs, "Headset Stereophone");
- twl6040_disconnect_pin(dapm, pdata->has_hf, "Ext Spk");
- twl6040_disconnect_pin(dapm, pdata->has_ep, "Earphone Spk");
- twl6040_disconnect_pin(dapm, pdata->has_aux, "Line Out");
- twl6040_disconnect_pin(dapm, pdata->has_vibra, "Vinrator");
- twl6040_disconnect_pin(dapm, pdata->has_hsmic, "Headset Mic");
- twl6040_disconnect_pin(dapm, pdata->has_mainmic, "Main Handset Mic");
- twl6040_disconnect_pin(dapm, pdata->has_submic, "Sub Handset Mic");
- twl6040_disconnect_pin(dapm, pdata->has_afm, "Line In");
-
/*
* Configure McPDM offset cancellation based on the HSOTRIM value from
* twl6040.
@@ -216,6 +208,24 @@ static int omap_abe_twl6040_init(struct snd_soc_pcm_runtime *rtd)
twl6040_hs_jack_detect(codec, &hs_jack, SND_JACK_HEADSET);
}
+ /*
+ * NULL pdata means we booted with DT. In this case the routing is
+ * provided and the card is fully routed, no need to mark pins.
+ */
+ if (!pdata)
+ return ret;
+
+ /* Disable not connected paths if not used */
+ twl6040_disconnect_pin(dapm, pdata->has_hs, "Headset Stereophone");
+ twl6040_disconnect_pin(dapm, pdata->has_hf, "Ext Spk");
+ twl6040_disconnect_pin(dapm, pdata->has_ep, "Earphone Spk");
+ twl6040_disconnect_pin(dapm, pdata->has_aux, "Line Out");
+ twl6040_disconnect_pin(dapm, pdata->has_vibra, "Vinrator");
+ twl6040_disconnect_pin(dapm, pdata->has_hsmic, "Headset Mic");
+ twl6040_disconnect_pin(dapm, pdata->has_mainmic, "Main Handset Mic");
+ twl6040_disconnect_pin(dapm, pdata->has_submic, "Sub Handset Mic");
+ twl6040_disconnect_pin(dapm, pdata->has_afm, "Line In");
+
return ret;
}
@@ -270,52 +280,116 @@ static struct snd_soc_card omap_abe_card = {
static __devinit int omap_abe_probe(struct platform_device *pdev)
{
struct omap_abe_twl6040_data *pdata = dev_get_platdata(&pdev->dev);
+ struct device_node *node = pdev->dev.of_node;
struct snd_soc_card *card = &omap_abe_card;
struct abe_twl6040 *priv;
int num_links = 0;
- int ret;
+ int ret = 0;
card->dev = &pdev->dev;
- if (!pdata) {
- dev_err(&pdev->dev, "Missing pdata\n");
- return -ENODEV;
- }
-
priv = devm_kzalloc(&pdev->dev, sizeof(struct abe_twl6040), GFP_KERNEL);
if (priv == NULL)
return -ENOMEM;
- if (pdata->card_name) {
- card->name = pdata->card_name;
+ priv->dmic_codec_dev = ERR_PTR(-EINVAL);
+
+ if (node) {
+ struct device_node *dai_node;
+
+ if (snd_soc_of_parse_card_name(card, "ti,model")) {
+ dev_err(&pdev->dev, "Card name is not provided\n");
+ return -ENODEV;
+ }
+
+ ret = snd_soc_of_parse_audio_routing(card,
+ "ti,audio-routing");
+ if (ret) {
+ dev_err(&pdev->dev,
+ "Error while parsing DAPM routing\n");
+ return -EINVAL;
+ }
+
+ dai_node = of_parse_phandle(node, "ti,mcpdm", 0);
+ if (!dai_node) {
+ dev_err(&pdev->dev, "McPDM node is not provided\n");
+ return -EINVAL;
+ }
+ abe_twl6040_dai_links[0].cpu_dai_name = NULL;
+ abe_twl6040_dai_links[0].cpu_dai_of_node = dai_node;
+
+ dai_node = of_parse_phandle(node, "ti,dmic", 0);
+ if (dai_node) {
+ num_links = 2;
+ abe_twl6040_dai_links[1].cpu_dai_name = NULL;
+ abe_twl6040_dai_links[1].cpu_dai_of_node = dai_node;
+
+ priv->dmic_codec_dev = platform_device_register_simple(
+ "dmic-codec", -1, NULL, 0);
+ if (IS_ERR(priv->dmic_codec_dev)) {
+ dev_err(&pdev->dev,
+ "Can't instantiate dmic-codec\n");
+ return PTR_ERR(priv->dmic_codec_dev);
+ }
+ } else {
+ num_links = 1;
+ }
+
+ of_property_read_u32(node, "ti,jack-detection",
+ &priv->jack_detection);
+ of_property_read_u32(node, "ti,mclk-freq",
+ &priv->mclk_freq);
+ if (!priv->mclk_freq) {
+ dev_err(&pdev->dev, "MCLK frequency not provided\n");
+ ret = -EINVAL;
+ goto err_unregister;
+ }
+
+ omap_abe_card.fully_routed = 1;
+ } else if (pdata) {
+ if (pdata->card_name) {
+ card->name = pdata->card_name;
+ } else {
+ dev_err(&pdev->dev, "Card name is not provided\n");
+ return -ENODEV;
+ }
+
+ if (pdata->has_dmic)
+ num_links = 2;
+ else
+ num_links = 1;
+
+ priv->jack_detection = pdata->jack_detection;
+ priv->mclk_freq = pdata->mclk_freq;
} else {
- dev_err(&pdev->dev, "Card name is not provided\n");
+ dev_err(&pdev->dev, "Missing pdata\n");
return -ENODEV;
}
- priv->jack_detection = pdata->jack_detection;
- priv->mclk_freq = pdata->mclk_freq;
-
if (!priv->mclk_freq) {
dev_err(&pdev->dev, "MCLK frequency missing\n");
- return -ENODEV;
+ ret = -ENODEV;
+ goto err_unregister;
}
- if (pdata->has_dmic)
- num_links = 2;
- else
- num_links = 1;
-
card->dai_link = abe_twl6040_dai_links;
card->num_links = num_links;
snd_soc_card_set_drvdata(card, priv);
ret = snd_soc_register_card(card);
- if (ret)
+ if (ret) {
dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n",
ret);
+ goto err_unregister;
+ }
+
+ return 0;
+
+err_unregister:
+ if (!IS_ERR(priv->dmic_codec_dev))
+ platform_device_unregister(priv->dmic_codec_dev);
return ret;
}
@@ -323,17 +397,28 @@ static __devinit int omap_abe_probe(struct platform_device *pdev)
static int __devexit omap_abe_remove(struct platform_device *pdev)
{
struct snd_soc_card *card = platform_get_drvdata(pdev);
+ struct abe_twl6040 *priv = snd_soc_card_get_drvdata(card);
snd_soc_unregister_card(card);
+ if (!IS_ERR(priv->dmic_codec_dev))
+ platform_device_unregister(priv->dmic_codec_dev);
+
return 0;
}
+static const struct of_device_id omap_abe_of_match[] = {
+ {.compatible = "ti,abe-twl6040", },
+ { },
+};
+MODULE_DEVICE_TABLE(of, omap_abe_of_match);
+
static struct platform_driver omap_abe_driver = {
.driver = {
.name = "omap-abe-twl6040",
.owner = THIS_MODULE,
.pm = &snd_soc_pm_ops,
+ .of_match_table = omap_abe_of_match,
},
.probe = omap_abe_probe,
.remove = __devexit_p(omap_abe_remove),
--
1.7.8.6
2
1

05 Jun '12
Hello,
Changes since v1:
- Binding docukentation updated with available pins and connectors
- dts section for abe-twl6040 sound configuration has been changed
Instead of dai link pairs only the nodes probed via DT have phandle:
ti,mcpdm; ti,dmic, ti,twl6040.
The driver in turn is responsible to handle the provided information.
To provide dai link pairs (cpu dai - codec) we would need Linux (ASoC) specific
nodes in DT for the dmic codec and twl6040 ASoC codec driver.
If the DT section have ti,dmic phandle the ASoC machine driver will register the
device to load the ASoC dmic-codec runtime.
Example dts section for audio support (SDP4430):
sound {
compatible = "ti,abe-twl6040";
ti,model = "SDP4430";
ti,jack-detection = <1>;
ti,mclk-freq = <38400000>;
ti,mcpdm = <&mcpdm>;
ti,dmic = <&dmic>;
ti,twl6040 = <&twl6040>;
/* Audio routing */
ti,audio-routing =
"Headset Stereophone", "HSOL",
"Headset Stereophone", "HSOR",
"Earphone Spk", "EP",
"Ext Spk", "HFL",
"Ext Spk", "HFR",
"Line Out", "AUXL",
"Line Out", "AUXR",
"Vibrator", "VIBRAL",
"Vibrator", "VIBRAR",
"HSMIC", "Headset Mic",
"Headset Mic", "Headset Mic Bias",
"MAINMIC", "Main Handset Mic",
"Main Handset Mic", "Main Mic Bias",
"SUBMIC", "Sub Handset Mic",
"Sub Handset Mic", "Main Mic Bias",
"AFML", "Line In",
"AFMR", "Line In",
"DMic", "Digital Mic",
"Digital Mic", "Digital Mic1 Bias";
};
Regards,
Peter
---
Peter Ujfalusi (4):
ASoC: omap-abe-twl6040: Keep only one snd_soc_dai_link structure
ASoC: omap-abe-twl6040: Move Digital Mic widget into dapm table
ASoC: omap-abe-twl6040: Introduce driver data for runtime parameters
ASoC: omap-abe-twl6040: Add device tree support
.../devicetree/bindings/sound/omap-abe-twl6040.txt | 91 +++++++++
sound/soc/omap/omap-abe-twl6040.c | 195 ++++++++++++++------
2 files changed, 230 insertions(+), 56 deletions(-)
create mode 100644 Documentation/devicetree/bindings/sound/omap-abe-twl6040.txt
--
1.7.8.6
2
8

[alsa-devel] [PATCH 1/2] ASoC: wm8994: Ensure all AIFnCLK events are run from the _late variants
by Mark Brown 05 Jun '12
by Mark Brown 05 Jun '12
05 Jun '12
Ensure that all the actions get taken at appropriate times by calling the
_PRE and _POST events for the aifNclk_ev functions explicitly.
Signed-off-by: Mark Brown <broonie(a)opensource.wolfsonmicro.com>
---
sound/soc/codecs/wm8994.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c
index 993639d..6d3a865 100644
--- a/sound/soc/codecs/wm8994.c
+++ b/sound/soc/codecs/wm8994.c
@@ -1190,17 +1190,19 @@ static int late_enable_ev(struct snd_soc_dapm_widget *w,
switch (event) {
case SND_SOC_DAPM_PRE_PMU:
if (wm8994->aif1clk_enable) {
- aif1clk_ev(w, kcontrol, event);
+ aif1clk_ev(w, kcontrol, SND_SOC_DAPM_PRE_PMU);
snd_soc_update_bits(codec, WM8994_AIF1_CLOCKING_1,
WM8994_AIF1CLK_ENA_MASK,
WM8994_AIF1CLK_ENA);
+ aif1clk_ev(w, kcontrol, SND_SOC_DAPM_POST_PMU);
wm8994->aif1clk_enable = 0;
}
if (wm8994->aif2clk_enable) {
- aif2clk_ev(w, kcontrol, event);
+ aif2clk_ev(w, kcontrol, SND_SOC_DAPM_PRE_PMU);
snd_soc_update_bits(codec, WM8994_AIF2_CLOCKING_1,
WM8994_AIF2CLK_ENA_MASK,
WM8994_AIF2CLK_ENA);
+ aif2clk_ev(w, kcontrol, SND_SOC_DAPM_POST_PMU);
wm8994->aif2clk_enable = 0;
}
break;
@@ -1221,15 +1223,17 @@ static int late_disable_ev(struct snd_soc_dapm_widget *w,
switch (event) {
case SND_SOC_DAPM_POST_PMD:
if (wm8994->aif1clk_disable) {
+ aif1clk_ev(w, kcontrol, SND_SOC_DAPM_PRE_PMD);
snd_soc_update_bits(codec, WM8994_AIF1_CLOCKING_1,
WM8994_AIF1CLK_ENA_MASK, 0);
- aif1clk_ev(w, kcontrol, event);
+ aif1clk_ev(w, kcontrol, SND_SOC_DAPM_POST_PMD);
wm8994->aif1clk_disable = 0;
}
if (wm8994->aif2clk_disable) {
+ aif2clk_ev(w, kcontrol, SND_SOC_DAPM_PRE_PMD);
snd_soc_update_bits(codec, WM8994_AIF2_CLOCKING_1,
WM8994_AIF2CLK_ENA_MASK, 0);
- aif2clk_ev(w, kcontrol, event);
+ aif2clk_ev(w, kcontrol, SND_SOC_DAPM_POST_PMD);
wm8994->aif2clk_disable = 0;
}
break;
--
1.7.10
1
1

[alsa-devel] [PATCH v2 REBASE] ASoC: fsl_ssi: convert to use devm_clk_get
by Richard Zhao 05 Jun '12
by Richard Zhao 05 Jun '12
05 Jun '12
Signed-off-by: Richard Zhao <richard.zhao(a)freescale.com>
Acked-by: Timur Tabi <timur(a)freescale.com>
---
Rebase to 3.5rc1.
sound/soc/fsl/fsl_ssi.c | 7 ++-----
1 files changed, 2 insertions(+), 5 deletions(-)
diff --git a/sound/soc/fsl/fsl_ssi.c b/sound/soc/fsl/fsl_ssi.c
index 4ed2afd..b10a427 100644
--- a/sound/soc/fsl/fsl_ssi.c
+++ b/sound/soc/fsl/fsl_ssi.c
@@ -725,7 +725,7 @@ static int __devinit fsl_ssi_probe(struct platform_device *pdev)
u32 dma_events[2];
ssi_private->ssi_on_imx = true;
- ssi_private->clk = clk_get(&pdev->dev, NULL);
+ ssi_private->clk = devm_clk_get(&pdev->dev, NULL);
if (IS_ERR(ssi_private->clk)) {
ret = PTR_ERR(ssi_private->clk);
dev_err(&pdev->dev, "could not get clock: %d\n", ret);
@@ -842,10 +842,8 @@ error_dev:
device_remove_file(&pdev->dev, dev_attr);
error_clk:
- if (ssi_private->ssi_on_imx) {
+ if (ssi_private->ssi_on_imx)
clk_disable_unprepare(ssi_private->clk);
- clk_put(ssi_private->clk);
- }
error_irq:
free_irq(ssi_private->irq, ssi_private);
@@ -871,7 +869,6 @@ static int fsl_ssi_remove(struct platform_device *pdev)
if (ssi_private->ssi_on_imx) {
platform_device_unregister(ssi_private->imx_pcm_pdev);
clk_disable_unprepare(ssi_private->clk);
- clk_put(ssi_private->clk);
}
snd_soc_unregister_dai(&pdev->dev);
device_remove_file(&pdev->dev, &ssi_private->dev_attr);
--
1.7.5.4
4
10

[alsa-devel] [PATCH 1/2] ASoC: cs42l73: Convert to devm_regmap_init_i2c()
by Brian Austin 05 Jun '12
by Brian Austin 05 Jun '12
05 Jun '12
Signed-off-by: Brian Austin <brian.austin(a)cirrus.com>
---
sound/soc/codecs/cs42l73.c | 20 +++++---------------
1 file changed, 5 insertions(+), 15 deletions(-)
diff --git a/sound/soc/codecs/cs42l73.c b/sound/soc/codecs/cs42l73.c
index e0d45fd..2c08c4c 100644
--- a/sound/soc/codecs/cs42l73.c
+++ b/sound/soc/codecs/cs42l73.c
@@ -1362,11 +1362,11 @@ static __devinit int cs42l73_i2c_probe(struct i2c_client *i2c_client,
i2c_set_clientdata(i2c_client, cs42l73);
- cs42l73->regmap = regmap_init_i2c(i2c_client, &cs42l73_regmap);
+ cs42l73->regmap = devm_regmap_init_i2c(i2c_client, &cs42l73_regmap);
if (IS_ERR(cs42l73->regmap)) {
ret = PTR_ERR(cs42l73->regmap);
dev_err(&i2c_client->dev, "regmap_init() failed: %d\n", ret);
- goto err;
+ return ret;
}
/* initialize codec */
ret = regmap_read(cs42l73->regmap, CS42L73_DEVID_AB, ®);
@@ -1384,13 +1384,13 @@ static __devinit int cs42l73_i2c_probe(struct i2c_client *i2c_client,
dev_err(&i2c_client->dev,
"CS42L73 Device ID (%X). Expected %X\n",
devid, CS42L73_DEVID);
- goto err_regmap;
+ return ret;
}
ret = regmap_read(cs42l73->regmap, CS42L73_REVID, ®);
if (ret < 0) {
dev_err(&i2c_client->dev, "Get Revision ID failed\n");
- goto err_regmap;
+ return ret;;
}
dev_info(&i2c_client->dev,
@@ -1402,23 +1402,13 @@ static __devinit int cs42l73_i2c_probe(struct i2c_client *i2c_client,
&soc_codec_dev_cs42l73, cs42l73_dai,
ARRAY_SIZE(cs42l73_dai));
if (ret < 0)
- goto err_regmap;
+ return ret;
return 0;
-
-err_regmap:
- regmap_exit(cs42l73->regmap);
-
-err:
- return ret;
}
static __devexit int cs42l73_i2c_remove(struct i2c_client *client)
{
- struct cs42l73_private *cs42l73 = i2c_get_clientdata(client);
-
snd_soc_unregister_codec(&client->dev);
- regmap_exit(cs42l73->regmap);
-
return 0;
}
--
1.7.10
2
2
2012/6/1 David Henningsson <david.henningsson(a)canonical.com>:
> On 06/01/2012 04:54 AM, Raymond Yau wrote:
>
>> what is the definition of "Mono Output" in pulseaudio ?
>>
>> My three other sound cards does support mono playback and mono capture
>>
>> The system setting/sound in gnome session allow me to select "mono
>> duplex" but when it does not allow me to select "mono output + mono
>> input" in unity session.
>
>
> That sounds like the known bug I was working on yesterday.
>
The major problem of Analog Mono output is clipping
it seem pulseaudio just add the left and right channels instead of
half of the left and right channels and the sound is distorted
why database contrain invalid format since it is a clean install of
ubuntu 12.04l
D: [pulseaudio] module-device-restore.c: Database contains invalid
data for key: sink:alsa_output.pci-0000_04_02.0.analog-mono:null
D: [pulseaudio] module-suspend-on-idle.c: Sink
alsa_output.pci-0000_04_02.0.analog-mono becomes idle, timeout in 5
seconds.
I: [pulseaudio] resampler.c: Forcing resampler 'copy', because of
fixed, identical sample rates.
D: [pulseaudio] resampler.c: Channel matrix:
D: [pulseaudio] resampler.c: I00 I01
D: [pulseaudio] resampler.c: +------------
D: [pulseaudio] resampler.c: O00 | 1.000 1.000
I: [pulseaudio] remap.c: Using generic matrix remapping
1
0

04 Jun '12
From: Stephen Warren <swarren(a)nvidia.com>
The Tegra ASoC machine drivers only depend on Tegra architecture support
to compile, not specific board support. Remove Kconfig dependencies on
any particular board. This is required since Kconfig options for boards
are going away given the migration to device tree.
Signed-off-by: Stephen Warren <swarren(a)nvidia.com>
---
(This is for 3.6)
Note that changes in the Tegra tree will remove some of the chunks of
mach-tegra/Kconfig that are edited here, since those chunks are the
board-specific Kconfig options. However, I hope those conflicts are
easy enough to resolve that this is not an issue.
arch/arm/mach-tegra/Kconfig | 3 ---
sound/soc/tegra/Kconfig | 10 +---------
2 files changed, 1 insertions(+), 12 deletions(-)
diff --git a/arch/arm/mach-tegra/Kconfig b/arch/arm/mach-tegra/Kconfig
index 6a113a9..7c40739 100644
--- a/arch/arm/mach-tegra/Kconfig
+++ b/arch/arm/mach-tegra/Kconfig
@@ -63,7 +63,6 @@ comment "Tegra board type"
config MACH_HARMONY
bool "Harmony board"
depends on ARCH_TEGRA_2x_SOC
- select MACH_HAS_SND_SOC_TEGRA_WM8903 if SND_SOC
help
Support for nVidia Harmony development platform
@@ -71,7 +70,6 @@ config MACH_KAEN
bool "Kaen board"
depends on ARCH_TEGRA_2x_SOC
select MACH_SEABOARD
- select MACH_HAS_SND_SOC_TEGRA_WM8903 if SND_SOC
help
Support for the Kaen version of Seaboard
@@ -84,7 +82,6 @@ config MACH_PAZ00
config MACH_SEABOARD
bool "Seaboard board"
depends on ARCH_TEGRA_2x_SOC
- select MACH_HAS_SND_SOC_TEGRA_WM8903 if SND_SOC
help
Support for nVidia Seaboard development platform. It will
also be included for some of the derivative boards that
diff --git a/sound/soc/tegra/Kconfig b/sound/soc/tegra/Kconfig
index c1c8e95..76dc230 100644
--- a/sound/soc/tegra/Kconfig
+++ b/sound/soc/tegra/Kconfig
@@ -58,17 +58,9 @@ config SND_SOC_TEGRA_WM8753
Say Y or M here if you want to add support for SoC audio on Tegra
boards using the WM8753 codec, such as Whistler.
-config MACH_HAS_SND_SOC_TEGRA_WM8903
- bool
- help
- Machines that use the SND_SOC_TEGRA_WM8903 driver should select
- this config option, in order to allow the user to enable
- SND_SOC_TEGRA_WM8903.
-
config SND_SOC_TEGRA_WM8903
tristate "SoC Audio support for Tegra boards using a WM8903 codec"
depends on SND_SOC_TEGRA && I2C
- depends on MACH_HAS_SND_SOC_TEGRA_WM8903
select SND_SOC_TEGRA20_I2S if ARCH_TEGRA_2x_SOC
select SND_SOC_TEGRA30_I2S if ARCH_TEGRA_3x_SOC
select SND_SOC_WM8903
@@ -79,7 +71,7 @@ config SND_SOC_TEGRA_WM8903
config SND_SOC_TEGRA_TRIMSLICE
tristate "SoC Audio support for TrimSlice board"
- depends on SND_SOC_TEGRA && MACH_TRIMSLICE && I2C
+ depends on SND_SOC_TEGRA && I2C
select SND_SOC_TEGRA20_I2S if ARCH_TEGRA_2x_SOC
select SND_SOC_TLV320AIC23
help
--
1.7.0.4
2
2
The core fills in some blanks which makes it annoying to do the right thing
and constify the calls in the core.
Signed-off-by: Mark Brown <broonie(a)opensource.wolfsonmicro.com>
---
sound/soc/codecs/lm49453.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sound/soc/codecs/lm49453.c b/sound/soc/codecs/lm49453.c
index 802b9f1..5bd1294 100644
--- a/sound/soc/codecs/lm49453.c
+++ b/sound/soc/codecs/lm49453.c
@@ -1358,7 +1358,7 @@ static struct snd_soc_dai_ops lm49453_lineout_dai_ops = {
};
/* LM49453 dai structure. */
-static const struct snd_soc_dai_driver lm49453_dai[] = {
+static struct snd_soc_dai_driver lm49453_dai[] = {
{
.name = "LM49453 Headset",
.playback = {
--
1.7.10
1
0

04 Jun '12
On Thu, May 31, 2012 at 03:18:01PM +0100, Adam Thomson wrote:
> This patch adds support for the Dialog DA732x audio codec.
A few small things below, very minor and easy to correct though.
> + { DA732X_REG_STATUS_EXT , 0x00 },
> + { DA732X_REG_STATUS , 0x00 },
> + { DA732X_REG_MBOX0 , 0x00 },
> + { DA732X_REG_MBOX1 , 0x00 },
> + { DA732X_REG_MBOX2 , 0x00 },
> + { DA732X_REG_MBOX_STATUS , 0x00 },
> + { DA732X_REG_ID , 0x00 },
> + { DA732X_REG_DMA_STATUS , 0x00 },
> + { DA732X_REG_BROWNOUT , 0x00 },
I would be very surprised if some or all of the above regsters aren't
volatile and therefore shouldn't have default specified.
> +static int da732x_hpf_set(struct snd_kcontrol *kcontrol,
> + struct snd_ctl_elem_value *ucontrol)
Why doesn't a standard enum work for this?
> + /* High Pass Filters */
> + SOC_ENUM_EXT("DAC1 High Pass Filter Mode Switch",
> + da732x_dac1_hpf_mode_enum, da732x_hpf_get, da732x_hpf_set),
This shouldn't be a Switch, it's an enumeration. Switches are plain
boolean controls.
> + SOC_SINGLE("ADC1 Equalizer Switch", DA732X_REG_ADC1_EQ5,
> + DA732X_EQ_EN_SHIFT, DA732X_EQ_EN_MAX, DA732X_NO_INVERT),
> + SOC_SINGLE_TLV("ADC1 EQ Band 1 Volume", DA732X_REG_ADC1_EQ12,
> + DA732X_EQ_BAND1_SHIFT, DA732X_EQ_VOL_VAL_MAX,
> + DA732X_INVERT, eq_band_pga_tlv),
I'd suggest calling the Switch "ADC1 EQ Switch" for consistency with the
gains for the bands (or expanding EQ in the gains but that'll make for a
lot of really long control names).
> + case SND_SOC_DAPM_POST_PMU:
> + if (w->reg == DA732X_REG_ADC1_PD)
> + snd_soc_update_bits(codec, DA732X_REG_CLK_EN3,
> + DA732X_ADCA_BB_CLK_EN,
> + DA732X_ADCA_BB_CLK_EN);
> + else
> + snd_soc_update_bits(codec, DA732X_REG_CLK_EN3,
> + DA732X_ADCC_BB_CLK_EN,
> + DA732X_ADCC_BB_CLK_EN);
This reads like it should be a switch statement. The effect will be the
same but it's a bit clearer.
> + da732x->regmap = devm_regmap_init_i2c(i2c, &da732x_regmap);
> + if (IS_ERR(da732x->regmap)) {
> + ret = PTR_ERR(da732x->regmap);
> + dev_err(&i2c->dev, "Failed to initialize regmap\n");
> + goto err;
> + }
> +
> + ret = snd_soc_register_codec(&i2c->dev, &soc_codec_dev_da732x,
> + da732x_dai, ARRAY_SIZE(da732x_dai));
The register cache defaults make it look like there's a device ID
(or possibly chip revision?) register - it'd be good practice to read it
here and either verify that it has the expected value or log it
depending on which it is.
> +static const struct i2c_device_id da732x_i2c_id[] = {
> + { "da732x", 0},
> + { }
> +};
> +MODULE_DEVICE_TABLE(i2c, da732x_i2c_id);
Good practice would be to enumerate all the device IDs (so users can
just register devices) but it doesn't really matter.
1
0
On Fri, Jun 01, 2012 at 12:50:34PM +0200, Ola Lilja wrote:
> +/*
> + * Extended interface for codec-driver
> + */
So, a few issues below. Could you please submit a version with this
extended API removed or made driver internal as much as possible? The
rest of the driver looks good so it'd be good to split this stuff out
and review separately.
> +int ab8500_audio_init_audioblock(struct snd_soc_codec *codec)
> +{
> + int status;
> +
> + dev_dbg(codec->dev, "%s: Enter.\n", __func__);
> +
> + /* Reset audio-registers and disable 32kHz-clock output 2 */
> + status = ab8500_sysctrl_write(AB8500_STW4500CTRL3,
> + AB8500_STW4500CTRL3_CLK32KOUT2DIS |
> + AB8500_STW4500CTRL3_RESETAUDN,
> + AB8500_STW4500CTRL3_RESETAUDN);
> + if (status < 0)
> + return status;
> +
> + return 0;
> +}
> +EXPORT_SYMBOL_GPL(ab8500_audio_init_audioblock);
This is really odd (I'm sure I've queried this on previous versions of
the driver) - why is something else reinitialising the device?
Shouldn't the CODEC driver be doing this by itself - if nothing else I'd
expect it to cause confusion if the device is reinitialised underneath
the driver?
I didn't register this last time as I'd assumed that the issue was a
missing static rather than something else calling the function.
> +int ab8500_audio_setup_mics(struct snd_soc_codec *codec,
> + struct amic_settings *amics)
> +{
Similar thing here, I'd expect this to just be platform data.
> +int ab8500_audio_set_ear_cmv(struct snd_soc_codec *codec,
> + enum ear_cm_voltage ear_cmv)
> +{
> + char *cmv_str;
> +
> + switch (ear_cmv) {
> + case EAR_CMV_0_95V:
> + cmv_str = "0.95V";
> + break;
> + case EAR_CMV_1_10V:
> + cmv_str = "1.10V";
> + break;
> + case EAR_CMV_1_27V:
> + cmv_str = "1.27V";
> + break;
> + case EAR_CMV_1_58V:
> + cmv_str = "1.58V";
> + break;
> + default:
> + dev_err(codec->dev,
> + "%s: Unknown earpiece CM-voltage (%d)!\n",
> + __func__, (int)ear_cmv);
> + return -EINVAL;
> + }
> + dev_dbg(codec->dev, "%s: Earpiece CM-voltage: %s\n", __func__,
> + cmv_str);
> + snd_soc_update_bits(codec, AB8500_ANACONF1, AB8500_ANACONF1_EARSELCM,
> + ear_cmv);
> +
> + return 0;
> +}
> +EXPORT_SYMBOL_GPL(ab8500_audio_set_ear_cmv);
This is *possibly* OK, though again it does look platform dataish.
1
0

[alsa-devel] [PATCH v2] ASoC: Support TI Isabelle Audio driver
by MR.Swami.Reddyï¼ ti.com 04 Jun '12
by MR.Swami.Reddyï¼ ti.com 04 Jun '12
04 Jun '12
From: M R Swami Reddy <MR.Swami.Reddy(a)ti.com>
ASoC: Support TI Isabelle Audio driver
The Isabelle Audio IC is a complete low power high fidelity CODEC with integrated
ADCs, DACs, decimation and interpolation filters, PLL, and power providers. This
device supports 2 analog and 2 digital microphone channels, a mono earpiece driver,
stereo class G headphone drivers with ultra low power and best SNR in the industry,
stereo Class D speaker drivers, and 2 high performance Line drivers.
The below patch is a basic driver code for TI Isabelle audio codec. The
functionalities like headset detection, etc., will be included incrementally
in the up-coming patches.
Signed-off-by: Vishwas A Deshpande <vishwas.a.deshpande(a)ti.com>
Signed-off-by: M R Swami Reddy <mr.swami.reddy(a)ti.com>
---
Changes in v2:
o Used dev_get_regmap and devm_regmap_init_i2c APIs.
o Removed isabelle_priv structure.
sound/soc/codecs/Kconfig | 4 +
sound/soc/codecs/Makefile | 2 +
sound/soc/codecs/isabelle.c | 1179 ++++++++++++++++++++++++++++++++
sound/soc/codecs/isabelle.h | 143 ++++
4 files changed, 1328 insertions(+), 0 deletions(-)
diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig
index ed5f66c..4ebf9e8 100644
--- a/sound/soc/codecs/Kconfig
+++ b/sound/soc/codecs/Kconfig
@@ -30,6 +30,7 @@ config SND_SOC_ALL_CODECS
select SND_SOC_CX20442
select SND_SOC_DA7210 if I2C
select SND_SOC_DFBMCS320
+ select SND_SOC_ISABELLE if I2C
select SND_SOC_JZ4740_CODEC if SOC_JZ4740
select SND_SOC_LM4857 if I2C
select SND_SOC_LM49453 if I2C
@@ -185,6 +186,9 @@ config SND_SOC_DFBMCS320
config SND_SOC_DMIC
tristate
+config SND_SOC_ISABELLE
+ tristate
+
config SND_SOC_LM49453
tristate
diff --git a/sound/soc/codecs/Makefile b/sound/soc/codecs/Makefile
index 7bbfdb2..fdc1ff6 100644
--- a/sound/soc/codecs/Makefile
+++ b/sound/soc/codecs/Makefile
@@ -17,6 +17,7 @@ snd-soc-cx20442-objs := cx20442.o
snd-soc-da7210-objs := da7210.o
snd-soc-dfbmcs320-objs := dfbmcs320.o
snd-soc-dmic-objs := dmic.o
+snd-soc-isabelle-objs := isabelle.o
snd-soc-l3-objs := l3.o
snd-soc-lm49453-objs := lm49453.o
snd-soc-max98088-objs := max98088.o
@@ -106,6 +107,7 @@ obj-$(CONFIG_SND_SOC_CX20442) += snd-soc-cx20442.o
obj-$(CONFIG_SND_SOC_DA7210) += snd-soc-da7210.o
obj-$(CONFIG_SND_SOC_DFBMCS320) += snd-soc-dfbmcs320.o
obj-$(CONFIG_SND_SOC_DMIC) += snd-soc-dmic.o
+obj-$(CONFIG_SND_SOC_ISABELLE) += snd-soc-isabelle.o
obj-$(CONFIG_SND_SOC_L3) += snd-soc-l3.o
obj-$(CONFIG_SND_SOC_LM49453) += snd-soc-lm49453.o
obj-$(CONFIG_SND_SOC_JZ4740_CODEC) += snd-soc-jz4740-codec.o
diff --git a/sound/soc/codecs/isabelle.c b/sound/soc/codecs/isabelle.c
new file mode 100644
index 0000000..69228ec
--- /dev/null
+++ b/sound/soc/codecs/isabelle.c
@@ -0,0 +1,1179 @@
+/*
+ * isabelle.c - Low power high fidelity audio codec driver
+ *
+ * Copyright (c) 2012 Texas Instruments, Inc
+ *
+ * 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; version 2 of the License.
+ *
+ *
+ * Initially based on sound/soc/codecs/twl6040.c
+ *
+ */
+#include <linux/module.h>
+#include <linux/moduleparam.h>
+#include <linux/version.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/delay.h>
+#include <linux/pm.h>
+#include <linux/regmap.h>
+#include <linux/i2c.h>
+#include <linux/slab.h>
+#include <sound/core.h>
+#include <sound/pcm.h>
+#include <sound/pcm_params.h>
+#include <sound/soc.h>
+#include <sound/soc-dapm.h>
+#include <sound/tlv.h>
+#include <sound/jack.h>
+#include <sound/initval.h>
+#include <asm/div64.h>
+#include "isabelle.h"
+
+
+/* Register default values for ISABELLE driver. */
+static struct reg_default isabelle_reg_defs[] = {
+ { 0, 0x00 },
+ { 1, 0x00 },
+ { 2, 0x00 },
+ { 3, 0x00 },
+ { 4, 0x00 },
+ { 5, 0x00 },
+ { 6, 0x00 },
+ { 7, 0x00 },
+ { 8, 0x00 },
+ { 9, 0x00 },
+ { 10, 0x00 },
+ { 11, 0x00 },
+ { 12, 0x00 },
+ { 13, 0x00 },
+ { 14, 0x00 },
+ { 15, 0x00 },
+ { 16, 0x00 },
+ { 17, 0x00 },
+ { 18, 0x00 },
+ { 19, 0x00 },
+ { 20, 0x00 },
+ { 21, 0x02 },
+ { 22, 0x02 },
+ { 23, 0x02 },
+ { 24, 0x02 },
+ { 25, 0x0F },
+ { 26, 0x8F },
+ { 27, 0x0F },
+ { 28, 0x8F },
+ { 29, 0x00 },
+ { 30, 0x00 },
+ { 31, 0x00 },
+ { 32, 0x00 },
+ { 33, 0x00 },
+ { 34, 0x00 },
+ { 35, 0x00 },
+ { 36, 0x00 },
+ { 37, 0x00 },
+ { 38, 0x00 },
+ { 39, 0x00 },
+ { 40, 0x00 },
+ { 41, 0x00 },
+ { 42, 0x00 },
+ { 43, 0x00 },
+ { 44, 0x00 },
+ { 45, 0x00 },
+ { 46, 0x00 },
+ { 47, 0x00 },
+ { 48, 0x00 },
+ { 49, 0x00 },
+ { 50, 0x00 },
+ { 51, 0x00 },
+ { 52, 0x00 },
+ { 53, 0x00 },
+ { 54, 0x00 },
+ { 55, 0x00 },
+ { 56, 0x00 },
+ { 57, 0x00 },
+ { 58, 0x00 },
+ { 59, 0x00 },
+ { 60, 0x00 },
+ { 61, 0x00 },
+ { 62, 0x00 },
+ { 63, 0x00 },
+ { 64, 0x00 },
+ { 65, 0x00 },
+ { 66, 0x00 },
+ { 67, 0x00 },
+ { 68, 0x00 },
+ { 69, 0x90 },
+ { 70, 0x90 },
+ { 71, 0x90 },
+ { 72, 0x00 },
+ { 73, 0x00 },
+ { 74, 0x00 },
+ { 75, 0x00 },
+ { 76, 0x00 },
+ { 77, 0x00 },
+ { 78, 0x00 },
+ { 79, 0x00 },
+ { 80, 0x00 },
+ { 81, 0x00 },
+ { 82, 0x00 },
+ { 83, 0x00 },
+ { 84, 0x00 },
+ { 85, 0x07 },
+ { 86, 0x00 },
+ { 87, 0x00 },
+ { 88, 0x00 },
+ { 89, 0x07 },
+ { 90, 0x80 },
+ { 91, 0x07 },
+ { 92, 0x07 },
+ { 93, 0x00 },
+ { 94, 0x00 },
+ { 95, 0x00 },
+ { 96, 0x00 },
+ { 97, 0x00 },
+ { 98, 0x00 },
+ { 99, 0x00 },
+};
+
+static const char *isabelle_rx1_texts[] = {"VRX1", "ARX1"};
+static const char *isabelle_rx2_texts[] = {"VRX2", "ARX2"};
+
+static const struct soc_enum isabelle_rx1_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_VOICE_HPF_CFG_REG, 3, 1, isabelle_rx1_texts),
+ SOC_ENUM_SINGLE(ISABELLE_AUDIO_HPF_CFG_REG, 5, 1, isabelle_rx1_texts),
+};
+
+static const struct soc_enum isabelle_rx2_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_VOICE_HPF_CFG_REG, 2, 1, isabelle_rx2_texts),
+ SOC_ENUM_SINGLE(ISABELLE_AUDIO_HPF_CFG_REG, 4, 1, isabelle_rx2_texts),
+};
+
+/* Headset DAC playback switches */
+static const struct snd_kcontrol_new rx1_mux_controls =
+ SOC_DAPM_ENUM("Route", isabelle_rx1_enum);
+
+static const struct snd_kcontrol_new rx2_mux_controls =
+ SOC_DAPM_ENUM("Route", isabelle_rx2_enum);
+
+/* TX input selection */
+static const char *isabelle_atx_texts[] = {"AMIC1", "DMIC"};
+static const char *isabelle_vtx_texts[] = {"AMIC2", "DMIC"};
+
+static const struct soc_enum isabelle_atx_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_AMIC_CFG_REG, 7, 1, isabelle_atx_texts),
+ SOC_ENUM_SINGLE(ISABELLE_DMIC_CFG_REG, 0, 1, isabelle_atx_texts),
+};
+
+static const struct soc_enum isabelle_vtx_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_AMIC_CFG_REG, 6, 1, isabelle_vtx_texts),
+ SOC_ENUM_SINGLE(ISABELLE_DMIC_CFG_REG, 0, 1, isabelle_vtx_texts),
+};
+
+static const struct snd_kcontrol_new atx_mux_controls =
+ SOC_DAPM_ENUM("Route", isabelle_atx_enum);
+
+static const struct snd_kcontrol_new vtx_mux_controls =
+ SOC_DAPM_ENUM("Route", isabelle_vtx_enum);
+
+/* Left analog microphone selection */
+static const char *isabelle_amic1_texts[] = {
+ "Main Mic", "Headset Mic", "Aux/FM Left"};
+
+/* Left analog microphone selection */
+static const char *isabelle_amic2_texts[] = {"Sub Mic", "Aux/FM Right"};
+
+static const struct soc_enum isabelle_amic1_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_AMIC_CFG_REG, 5,
+ ARRAY_SIZE(isabelle_amic1_texts),
+ isabelle_amic1_texts),
+};
+
+static const struct soc_enum isabelle_amic2_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_AMIC_CFG_REG, 4,
+ ARRAY_SIZE(isabelle_amic2_texts),
+ isabelle_amic2_texts),
+};
+
+static const struct snd_kcontrol_new amic1_control =
+ SOC_DAPM_ENUM("Route", isabelle_amic1_enum);
+
+static const struct snd_kcontrol_new amic2_control =
+ SOC_DAPM_ENUM("Route", isabelle_amic2_enum);
+
+static const char *isabelle_st_audio_texts[] = {"ATX1", "ATX2"};
+
+static const char *isabelle_st_voice_texts[] = {"VTX1", "VTX2"};
+
+static const struct soc_enum isabelle_st_audio_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_ATX_STPGA1_CFG_REG, 7, 1,
+ isabelle_st_audio_texts),
+ SOC_ENUM_SINGLE(ISABELLE_ATX_STPGA2_CFG_REG, 7, 1,
+ isabelle_st_audio_texts),
+};
+
+static const struct soc_enum isabelle_st_voice_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_VTX_STPGA1_CFG_REG, 7, 1,
+ isabelle_st_voice_texts),
+ SOC_ENUM_SINGLE(ISABELLE_VTX2_STPGA2_CFG_REG, 7, 1,
+ isabelle_st_voice_texts),
+};
+
+static const struct snd_kcontrol_new st_audio_control =
+ SOC_DAPM_ENUM("Route", isabelle_st_audio_enum);
+
+static const struct snd_kcontrol_new st_voice_control =
+ SOC_DAPM_ENUM("Route", isabelle_st_voice_enum);
+
+/* Mixer controls */
+static const struct snd_kcontrol_new isabelle_hs_left_mixer_controls[] = {
+SOC_DAPM_SINGLE("DAC1L Playback Switch", ISABELLE_HSDRV_CFG1_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("APGA1 Playback Switch", ISABELLE_HSDRV_CFG1_REG, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_hs_right_mixer_controls[] = {
+SOC_DAPM_SINGLE("DAC1R Playback Switch", ISABELLE_HSDRV_CFG1_REG, 5, 1, 0),
+SOC_DAPM_SINGLE("APGA2 Playback Switch", ISABELLE_HSDRV_CFG1_REG, 4, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_hf_left_mixer_controls[] = {
+SOC_DAPM_SINGLE("DAC2L Playback Switch", ISABELLE_HFLPGA_CFG_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("APGA1 Playback Switch", ISABELLE_HFLPGA_CFG_REG, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_hf_right_mixer_controls[] = {
+SOC_DAPM_SINGLE("DAC2R Playback Switch", ISABELLE_HFRPGA_CFG_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("APGA2 Playback Switch", ISABELLE_HFRPGA_CFG_REG, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_ep_mixer_controls[] = {
+SOC_DAPM_SINGLE("DAC2L Playback Switch", ISABELLE_EARDRV_CFG1_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("APGA1 Playback Switch", ISABELLE_EARDRV_CFG1_REG, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_aux_left_mixer_controls[] = {
+SOC_DAPM_SINGLE("DAC3L Playback Switch", ISABELLE_LINEAMP_CFG_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("APGA1 Playback Switch", ISABELLE_LINEAMP_CFG_REG, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_aux_right_mixer_controls[] = {
+SOC_DAPM_SINGLE("DAC3R Playback Switch", ISABELLE_LINEAMP_CFG_REG, 5, 1, 0),
+SOC_DAPM_SINGLE("APGA2 Playback Switch", ISABELLE_LINEAMP_CFG_REG, 4, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_dpga1_left_mixer_controls[] = {
+SOC_DAPM_SINGLE("RX1 Playback Switch", ISABELLE_DPGA1LR_IN_SEL_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("RX3 Playback Switch", ISABELLE_DPGA1LR_IN_SEL_REG, 6, 1, 0),
+SOC_DAPM_SINGLE("RX5 Playback Switch", ISABELLE_DPGA1LR_IN_SEL_REG, 5, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_dpga1_right_mixer_controls[] = {
+SOC_DAPM_SINGLE("RX2 Playback Switch", ISABELLE_DPGA1LR_IN_SEL_REG, 3, 1, 0),
+SOC_DAPM_SINGLE("RX4 Playback Switch", ISABELLE_DPGA1LR_IN_SEL_REG, 2, 1, 0),
+SOC_DAPM_SINGLE("RX6 Playback Switch", ISABELLE_DPGA1LR_IN_SEL_REG, 1, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_dpga2_left_mixer_controls[] = {
+SOC_DAPM_SINGLE("RX1 Playback Switch", ISABELLE_DPGA2L_IN_SEL_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("RX2 Playback Switch", ISABELLE_DPGA2L_IN_SEL_REG, 6, 1, 0),
+SOC_DAPM_SINGLE("RX3 Playback Switch", ISABELLE_DPGA2L_IN_SEL_REG, 5, 1, 0),
+SOC_DAPM_SINGLE("RX4 Playback Switch", ISABELLE_DPGA2L_IN_SEL_REG, 4, 1, 0),
+SOC_DAPM_SINGLE("RX5 Playback Switch", ISABELLE_DPGA2L_IN_SEL_REG, 3, 1, 0),
+SOC_DAPM_SINGLE("RX6 Playback Switch", ISABELLE_DPGA2L_IN_SEL_REG, 2, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_dpga2_right_mixer_controls[] = {
+SOC_DAPM_SINGLE("USNC Playback Switch", ISABELLE_DPGA2R_IN_SEL_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("RX2 Playback Switch", ISABELLE_DPGA2R_IN_SEL_REG, 3, 1, 0),
+SOC_DAPM_SINGLE("RX4 Playback Switch", ISABELLE_DPGA2R_IN_SEL_REG, 2, 1, 0),
+SOC_DAPM_SINGLE("RX6 Playback Switch", ISABELLE_DPGA2R_IN_SEL_REG, 1, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_dpga3_left_mixer_controls[] = {
+SOC_DAPM_SINGLE("RX1 Playback Switch", ISABELLE_DPGA3LR_IN_SEL_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("RX3 Playback Switch", ISABELLE_DPGA3LR_IN_SEL_REG, 6, 1, 0),
+SOC_DAPM_SINGLE("RX5 Playback Switch", ISABELLE_DPGA3LR_IN_SEL_REG, 5, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_dpga3_right_mixer_controls[] = {
+SOC_DAPM_SINGLE("RX2 Playback Switch", ISABELLE_DPGA3LR_IN_SEL_REG, 3, 1, 0),
+SOC_DAPM_SINGLE("RX4 Playback Switch", ISABELLE_DPGA3LR_IN_SEL_REG, 2, 1, 0),
+SOC_DAPM_SINGLE("RX6 Playback Switch", ISABELLE_DPGA3LR_IN_SEL_REG, 1, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_rx1_mixer_controls[] = {
+SOC_DAPM_SINGLE("ST1 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("DL1 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_rx2_mixer_controls[] = {
+SOC_DAPM_SINGLE("ST2 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 5, 1, 0),
+SOC_DAPM_SINGLE("DL2 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 4, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_rx3_mixer_controls[] = {
+SOC_DAPM_SINGLE("ST1 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 3, 1, 0),
+SOC_DAPM_SINGLE("DL3 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 2, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_rx4_mixer_controls[] = {
+SOC_DAPM_SINGLE("ST2 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 1, 1, 0),
+SOC_DAPM_SINGLE("DL4 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 0, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_rx5_mixer_controls[] = {
+SOC_DAPM_SINGLE("ST1 Playback Switch", ISABELLE_RX_INPUT_CFG2_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("DL5 Playback Switch", ISABELLE_RX_INPUT_CFG2_REG, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_rx6_mixer_controls[] = {
+SOC_DAPM_SINGLE("ST2 Playback Switch", ISABELLE_RX_INPUT_CFG2_REG, 5, 1, 0),
+SOC_DAPM_SINGLE("DL6 Playback Switch", ISABELLE_RX_INPUT_CFG2_REG, 4, 1, 0),
+};
+
+static const struct snd_kcontrol_new ep_path_enable_control =
+ SOC_DAPM_SINGLE("Switch", ISABELLE_EARDRV_CFG2_REG, 0, 1, 0);
+
+/* TLV Declarations */
+static const DECLARE_TLV_DB_SCALE(mic_amp_tlv, 0, 100, 0);
+static const DECLARE_TLV_DB_SCALE(afm_amp_tlv, -3300, 300, 0);
+static const DECLARE_TLV_DB_SCALE(dac_tlv, -1200, 200, 0);
+static const DECLARE_TLV_DB_SCALE(hf_tlv, -5000, 200, 0);
+
+/* from -63 to 0 dB in 1 dB steps */
+static const DECLARE_TLV_DB_SCALE(dpga_tlv, -6300, 100, 1);
+
+/* from -63 to 9 dB in 1 dB steps */
+static const DECLARE_TLV_DB_SCALE(rx_tlv, -6300, 100, 1);
+
+static const DECLARE_TLV_DB_SCALE(st_tlv, -2700, 300, 1);
+static const DECLARE_TLV_DB_SCALE(tx_tlv, -600, 100, 0);
+
+static const struct snd_kcontrol_new isabelle_snd_controls[] = {
+ SOC_DOUBLE_TLV("Headset Playback Volume", ISABELLE_HSDRV_GAIN_REG,
+ 4, 0, 0xF, 0, dac_tlv),
+ SOC_DOUBLE_R_TLV("Handsfree Playback Volume",
+ ISABELLE_HFLPGA_CFG_REG, ISABELLE_HFRPGA_CFG_REG,
+ 0, 0x1F, 0, hf_tlv),
+ SOC_DOUBLE_TLV("Aux Playback Volume", ISABELLE_LINEAMP_GAIN_REG,
+ 4, 0, 0xF, 0, dac_tlv),
+ SOC_SINGLE_TLV("Earpiece Playback Volume", ISABELLE_EARDRV_CFG1_REG,
+ 0, 0xF, 0, dac_tlv),
+
+ SOC_DOUBLE_TLV("Aux FM Volume", ISABELLE_APGA_GAIN_REG, 4, 0, 0xF, 0,
+ afm_amp_tlv),
+ SOC_SINGLE_TLV("Mic1 Capture Volume", ISABELLE_MIC1_GAIN_REG, 3, 0x1F,
+ 0, mic_amp_tlv),
+ SOC_SINGLE_TLV("Mic2 Capture Volume", ISABELLE_MIC2_GAIN_REG, 3, 0x1F,
+ 0, mic_amp_tlv),
+
+ SOC_DOUBLE_R_TLV("DPGA1 Volume", ISABELLE_DPGA1L_GAIN_REG,
+ ISABELLE_DPGA1R_GAIN_REG, 0, 0x3F, 0, dpga_tlv),
+ SOC_DOUBLE_R_TLV("DPGA2 Volume", ISABELLE_DPGA2L_GAIN_REG,
+ ISABELLE_DPGA2R_GAIN_REG, 0, 0x3F, 0, dpga_tlv),
+ SOC_DOUBLE_R_TLV("DPGA3 Volume", ISABELLE_DPGA3L_GAIN_REG,
+ ISABELLE_DPGA3R_GAIN_REG, 0, 0x3F, 0, dpga_tlv),
+
+ SOC_SINGLE_TLV("Sidetone Audio TX1 Volume",
+ ISABELLE_ATX_STPGA1_CFG_REG, 0, 0xF, 0, st_tlv),
+ SOC_SINGLE_TLV("Sidetone Audio TX2 Volume",
+ ISABELLE_ATX_STPGA2_CFG_REG, 0, 0xF, 0, st_tlv),
+ SOC_SINGLE_TLV("Sidetone Voice TX1 Volume",
+ ISABELLE_VTX_STPGA1_CFG_REG, 0, 0xF, 0, st_tlv),
+ SOC_SINGLE_TLV("Sidetone Voice TX2 Volume",
+ ISABELLE_VTX2_STPGA2_CFG_REG, 0, 0xF, 0, st_tlv),
+
+ SOC_SINGLE_TLV("Audio TX1 Volume", ISABELLE_ATX1_DPGA_REG, 4, 0xF, 0,
+ tx_tlv),
+ SOC_SINGLE_TLV("Audio TX2 Volume", ISABELLE_ATX2_DPGA_REG, 4, 0xF, 0,
+ tx_tlv),
+ SOC_SINGLE_TLV("Voice TX1 Volume", ISABELLE_VTX1_DPGA_REG, 4, 0xF, 0,
+ tx_tlv),
+ SOC_SINGLE_TLV("Voice TX2 Volume", ISABELLE_VTX2_DPGA_REG, 4, 0xF, 0,
+ tx_tlv),
+
+ SOC_SINGLE_TLV("RX1 DPGA Volume", ISABELLE_RX1_DPGA_REG, 0, 0x3F, 0,
+ rx_tlv),
+ SOC_SINGLE_TLV("RX2 DPGA Volume", ISABELLE_RX2_DPGA_REG, 0, 0x3F, 0,
+ rx_tlv),
+ SOC_SINGLE_TLV("RX3 DPGA Volume", ISABELLE_RX3_DPGA_REG, 0, 0x3F, 0,
+ rx_tlv),
+ SOC_SINGLE_TLV("RX4 DPGA Volume", ISABELLE_RX4_DPGA_REG, 0, 0x3F, 0,
+ rx_tlv),
+ SOC_SINGLE_TLV("RX5 DPGA Volume", ISABELLE_RX5_DPGA_REG, 0, 0x3F, 0,
+ rx_tlv),
+ SOC_SINGLE_TLV("RX6 DPGA Volume", ISABELLE_RX6_DPGA_REG, 0, 0x3F, 0,
+ rx_tlv),
+
+ SOC_SINGLE("Headset Noise Gate", ISABELLE_HS_NG_CFG1_REG, 7, 1, 0),
+ SOC_SINGLE("Handsfree Noise Gate", ISABELLE_HF_NG_CFG1_REG, 7, 1, 0),
+
+ SOC_SINGLE("ATX1 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 7, 1, 0),
+ SOC_SINGLE("ATX2 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 6, 1, 0),
+ SOC_SINGLE("ARX1 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 5, 1, 0),
+ SOC_SINGLE("ARX2 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 4, 1, 0),
+ SOC_SINGLE("ARX3 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 3, 1, 0),
+ SOC_SINGLE("ARX4 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 2, 1, 0),
+ SOC_SINGLE("ARX5 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 1, 1, 0),
+ SOC_SINGLE("ARX6 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 0, 1, 0),
+ SOC_SINGLE("VRX1 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 3, 1, 0),
+ SOC_SINGLE("VRX2 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 2, 1, 0),
+
+ SOC_SINGLE("ATX1 Filter Enable Switch", ISABELLE_ALU_TX_EN_REG,
+ 7, 1, 0),
+ SOC_SINGLE("ATX2 Filter Enable Switch", ISABELLE_ALU_TX_EN_REG,
+ 6, 1, 0),
+ SOC_SINGLE("VTX1 Filter Enable Switch", ISABELLE_ALU_TX_EN_REG,
+ 5, 1, 0),
+ SOC_SINGLE("VTX2 Filter Enable Switch", ISABELLE_ALU_TX_EN_REG,
+ 4, 1, 0),
+ SOC_SINGLE("RX1 Filter Enable Switch", ISABELLE_ALU_RX_EN_REG,
+ 5, 1, 0),
+ SOC_SINGLE("RX2 Filter Enable Switch", ISABELLE_ALU_RX_EN_REG,
+ 4, 1, 0),
+ SOC_SINGLE("RX3 Filter Enable Switch", ISABELLE_ALU_RX_EN_REG,
+ 3, 1, 0),
+ SOC_SINGLE("RX4 Filter Enable Switch", ISABELLE_ALU_RX_EN_REG,
+ 2, 1, 0),
+ SOC_SINGLE("RX5 Filter Enable Switch", ISABELLE_ALU_RX_EN_REG,
+ 1, 1, 0),
+ SOC_SINGLE("RX6 Filter Enable Switch", ISABELLE_ALU_RX_EN_REG,
+ 0, 1, 0),
+
+ SOC_SINGLE("ULATX12 Capture Switch", ISABELLE_ULATX12_INTF_CFG_REG,
+ 7, 1, 0),
+
+ SOC_SINGLE("DL12 Playback Switch", ISABELLE_DL12_INTF_CFG_REG,
+ 7, 1, 0),
+ SOC_SINGLE("DL34 Playback Switch", ISABELLE_DL34_INTF_CFG_REG,
+ 7, 1, 0),
+ SOC_SINGLE("DL56 Playback Switch", ISABELLE_DL56_INTF_CFG_REG,
+ 7, 1, 0),
+
+ /* DMIC Switch */
+ SOC_SINGLE("DMIC Switch", ISABELLE_DMIC_CFG_REG, 0, 1, 0),
+};
+
+static const struct snd_soc_dapm_widget isabelle_dapm_widgets[] = {
+ /* Inputs */
+ SND_SOC_DAPM_INPUT("MAINMIC"),
+ SND_SOC_DAPM_INPUT("HSMIC"),
+ SND_SOC_DAPM_INPUT("SUBMIC"),
+ SND_SOC_DAPM_INPUT("LINEIN1"),
+ SND_SOC_DAPM_INPUT("LINEIN2"),
+ SND_SOC_DAPM_INPUT("DMICDAT"),
+
+ /* Outputs */
+ SND_SOC_DAPM_OUTPUT("HSOL"),
+ SND_SOC_DAPM_OUTPUT("HSOR"),
+ SND_SOC_DAPM_OUTPUT("HFL"),
+ SND_SOC_DAPM_OUTPUT("HFR"),
+ SND_SOC_DAPM_OUTPUT("EP"),
+ SND_SOC_DAPM_OUTPUT("LINEOUT1"),
+ SND_SOC_DAPM_OUTPUT("LINEOUT2"),
+
+ SND_SOC_DAPM_PGA("DL1", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DL2", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DL3", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DL4", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DL5", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DL6", SND_SOC_NOPM, 0, 0, NULL, 0),
+
+ /* Analog input muxes for the capture amplifiers */
+ SND_SOC_DAPM_MUX("Analog Left Capture Route",
+ SND_SOC_NOPM, 0, 0, &amic1_control),
+ SND_SOC_DAPM_MUX("Analog Right Capture Route",
+ SND_SOC_NOPM, 0, 0, &amic2_control),
+
+ SND_SOC_DAPM_MUX("Sidetone Audio Playback", SND_SOC_NOPM, 0, 0,
+ &st_audio_control),
+ SND_SOC_DAPM_MUX("Sidetone Voice Playback", SND_SOC_NOPM, 0, 0,
+ &st_voice_control),
+
+ /* AIF */
+ SND_SOC_DAPM_AIF_IN("INTF1_SDI", NULL, 0, ISABELLE_INTF_EN_REG, 7, 0),
+ SND_SOC_DAPM_AIF_IN("INTF2_SDI", NULL, 0, ISABELLE_INTF_EN_REG, 6, 0),
+
+ SND_SOC_DAPM_AIF_OUT("INTF1_SDO", NULL, 0, ISABELLE_INTF_EN_REG, 5, 0),
+ SND_SOC_DAPM_AIF_OUT("INTF2_SDO", NULL, 0, ISABELLE_INTF_EN_REG, 4, 0),
+
+ SND_SOC_DAPM_OUT_DRV("ULATX1", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("ULATX2", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("ULVTX1", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("ULVTX2", SND_SOC_NOPM, 0, 0, NULL, 0),
+
+ /* Analog Capture PGAs */
+ SND_SOC_DAPM_PGA("MicAmp1", ISABELLE_AMIC_CFG_REG, 5, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("MicAmp2", ISABELLE_AMIC_CFG_REG, 4, 0, NULL, 0),
+
+ /* Auxiliary FM PGAs */
+ SND_SOC_DAPM_PGA("APGA1", ISABELLE_APGA_CFG_REG, 7, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("APGA2", ISABELLE_APGA_CFG_REG, 6, 0, NULL, 0),
+
+ /* ADCs */
+ SND_SOC_DAPM_ADC("ADC1", "Left Front Capture",
+ ISABELLE_AMIC_CFG_REG, 7, 0),
+ SND_SOC_DAPM_ADC("ADC2", "Right Front Capture",
+ ISABELLE_AMIC_CFG_REG, 6, 0),
+
+ /* Microphone Bias */
+ SND_SOC_DAPM_SUPPLY("Headset Mic Bias", ISABELLE_ABIAS_CFG_REG,
+ 3, 0, NULL, 0),
+ SND_SOC_DAPM_SUPPLY("Main Mic Bias", ISABELLE_ABIAS_CFG_REG,
+ 2, 0, NULL, 0),
+ SND_SOC_DAPM_SUPPLY("Digital Mic1 Bias",
+ ISABELLE_DBIAS_CFG_REG, 3, 0, NULL, 0),
+ SND_SOC_DAPM_SUPPLY("Digital Mic2 Bias",
+ ISABELLE_DBIAS_CFG_REG, 2, 0, NULL, 0),
+
+ /* Mixers */
+ SND_SOC_DAPM_MIXER("Headset Left Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_hs_left_mixer_controls,
+ ARRAY_SIZE(isabelle_hs_left_mixer_controls)),
+ SND_SOC_DAPM_MIXER("Headset Right Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_hs_right_mixer_controls,
+ ARRAY_SIZE(isabelle_hs_right_mixer_controls)),
+ SND_SOC_DAPM_MIXER("Handsfree Left Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_hf_left_mixer_controls,
+ ARRAY_SIZE(isabelle_hf_left_mixer_controls)),
+ SND_SOC_DAPM_MIXER("Handsfree Right Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_hf_right_mixer_controls,
+ ARRAY_SIZE(isabelle_hf_right_mixer_controls)),
+ SND_SOC_DAPM_MIXER("LINEOUT1 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_aux_left_mixer_controls,
+ ARRAY_SIZE(isabelle_aux_left_mixer_controls)),
+ SND_SOC_DAPM_MIXER("LINEOUT2 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_aux_right_mixer_controls,
+ ARRAY_SIZE(isabelle_aux_right_mixer_controls)),
+ SND_SOC_DAPM_MIXER("Earphone Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_ep_mixer_controls,
+ ARRAY_SIZE(isabelle_ep_mixer_controls)),
+
+ SND_SOC_DAPM_MIXER("DPGA1L Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_dpga1_left_mixer_controls,
+ ARRAY_SIZE(isabelle_dpga1_left_mixer_controls)),
+ SND_SOC_DAPM_MIXER("DPGA1R Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_dpga1_right_mixer_controls,
+ ARRAY_SIZE(isabelle_dpga1_right_mixer_controls)),
+ SND_SOC_DAPM_MIXER("DPGA2L Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_dpga2_left_mixer_controls,
+ ARRAY_SIZE(isabelle_dpga2_left_mixer_controls)),
+ SND_SOC_DAPM_MIXER("DPGA2R Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_dpga2_right_mixer_controls,
+ ARRAY_SIZE(isabelle_dpga2_right_mixer_controls)),
+ SND_SOC_DAPM_MIXER("DPGA3L Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_dpga3_left_mixer_controls,
+ ARRAY_SIZE(isabelle_dpga3_left_mixer_controls)),
+ SND_SOC_DAPM_MIXER("DPGA3R Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_dpga3_right_mixer_controls,
+ ARRAY_SIZE(isabelle_dpga3_right_mixer_controls)),
+
+ SND_SOC_DAPM_MIXER("RX1 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_rx1_mixer_controls,
+ ARRAY_SIZE(isabelle_rx1_mixer_controls)),
+ SND_SOC_DAPM_MIXER("RX2 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_rx2_mixer_controls,
+ ARRAY_SIZE(isabelle_rx2_mixer_controls)),
+ SND_SOC_DAPM_MIXER("RX3 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_rx3_mixer_controls,
+ ARRAY_SIZE(isabelle_rx3_mixer_controls)),
+ SND_SOC_DAPM_MIXER("RX4 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_rx4_mixer_controls,
+ ARRAY_SIZE(isabelle_rx4_mixer_controls)),
+ SND_SOC_DAPM_MIXER("RX5 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_rx5_mixer_controls,
+ ARRAY_SIZE(isabelle_rx5_mixer_controls)),
+ SND_SOC_DAPM_MIXER("RX6 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_rx6_mixer_controls,
+ ARRAY_SIZE(isabelle_rx6_mixer_controls)),
+
+ /* DACs */
+ SND_SOC_DAPM_DAC("DAC1L", "Headset Playback", ISABELLE_DAC_CFG_REG,
+ 5, 0),
+ SND_SOC_DAPM_DAC("DAC1R", "Headset Playback", ISABELLE_DAC_CFG_REG,
+ 4, 0),
+ SND_SOC_DAPM_DAC("DAC2L", "Handsfree Playback", ISABELLE_DAC_CFG_REG,
+ 3, 0),
+ SND_SOC_DAPM_DAC("DAC2R", "Handsfree Playback", ISABELLE_DAC_CFG_REG,
+ 2, 0),
+ SND_SOC_DAPM_DAC("DAC3L", "Lineout Playback", ISABELLE_DAC_CFG_REG,
+ 1, 0),
+ SND_SOC_DAPM_DAC("DAC3R", "Lineout Playback", ISABELLE_DAC_CFG_REG,
+ 0, 0),
+
+ /* Analog Playback PGAs */
+ SND_SOC_DAPM_PGA("Sidetone Audio PGA", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("Sidetone Voice PGA", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("HF Left PGA", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("HF Right PGA", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DPGA1L", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DPGA1R", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DPGA2L", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DPGA2R", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DPGA3L", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DPGA3R", SND_SOC_NOPM, 0, 0, NULL, 0),
+
+ /* Analog Playback Mux */
+ SND_SOC_DAPM_MUX("RX1 Playback", ISABELLE_ALU_RX_EN_REG, 5, 0,
+ &rx1_mux_controls),
+ SND_SOC_DAPM_MUX("RX2 Playback", ISABELLE_ALU_RX_EN_REG, 4, 0,
+ &rx2_mux_controls),
+
+ /* TX Select */
+ SND_SOC_DAPM_MUX("ATX Select", ISABELLE_TX_INPUT_CFG_REG,
+ 7, 0, &atx_mux_controls),
+ SND_SOC_DAPM_MUX("VTX Select", ISABELLE_TX_INPUT_CFG_REG,
+ 6, 0, &vtx_mux_controls),
+
+ SND_SOC_DAPM_SWITCH("Earphone Playback", SND_SOC_NOPM, 0, 0,
+ &ep_path_enable_control),
+
+ /* Output Drivers */
+ SND_SOC_DAPM_OUT_DRV("HS Left Driver", ISABELLE_HSDRV_CFG2_REG,
+ 1, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("HS Right Driver", ISABELLE_HSDRV_CFG2_REG,
+ 0, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("LINEOUT1 Left Driver", ISABELLE_LINEAMP_CFG_REG,
+ 1, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("LINEOUT2 Right Driver", ISABELLE_LINEAMP_CFG_REG,
+ 0, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("Earphone Driver", ISABELLE_EARDRV_CFG2_REG,
+ 1, 0, NULL, 0),
+
+ SND_SOC_DAPM_OUT_DRV("HF Left Driver", ISABELLE_HFDRV_CFG_REG,
+ 1, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("HF Right Driver", ISABELLE_HFDRV_CFG_REG,
+ 0, 0, NULL, 0),
+};
+
+static const struct snd_soc_dapm_route isabelle_intercon[] = {
+ /* Interface mapping */
+ { "DL1", "DL12 Playback Switch", "INTF1_SDI" },
+ { "DL2", "DL12 Playback Switch", "INTF1_SDI" },
+ { "DL3", "DL34 Playback Switch", "INTF1_SDI" },
+ { "DL4", "DL34 Playback Switch", "INTF1_SDI" },
+ { "DL5", "DL56 Playback Switch", "INTF1_SDI" },
+ { "DL6", "DL56 Playback Switch", "INTF1_SDI" },
+
+ { "DL1", "DL12 Playback Switch", "INTF2_SDI" },
+ { "DL2", "DL12 Playback Switch", "INTF2_SDI" },
+ { "DL3", "DL34 Playback Switch", "INTF2_SDI" },
+ { "DL4", "DL34 Playback Switch", "INTF2_SDI" },
+ { "DL5", "DL56 Playback Switch", "INTF2_SDI" },
+ { "DL6", "DL56 Playback Switch", "INTF2_SDI" },
+
+ /* Input side mapping */
+ { "Sidetone Audio PGA", NULL, "Sidetone Audio Playback" },
+ { "Sidetone Voice PGA", NULL, "Sidetone Voice Playback" },
+
+ { "RX1 Mixer", "ST1 Playback Switch", "Sidetone Audio PGA" },
+
+ { "RX1 Mixer", "ST1 Playback Switch", "Sidetone Voice PGA" },
+ { "RX1 Mixer", "DL1 Playback Switch", "DL1" },
+
+ { "RX2 Mixer", "ST2 Playback Switch", "Sidetone Audio PGA" },
+
+ { "RX2 Mixer", "ST2 Playback Switch", "Sidetone Voice PGA" },
+ { "RX2 Mixer", "DL2 Playback Switch", "DL2" },
+
+ { "RX3 Mixer", "ST1 Playback Switch", "Sidetone Voice PGA" },
+ { "RX3 Mixer", "DL3 Playback Switch", "DL3" },
+
+ { "RX4 Mixer", "ST2 Playback Switch", "Sidetone Voice PGA" },
+ { "RX4 Mixer", "DL4 Playback Switch", "DL4" },
+
+ { "RX5 Mixer", "ST1 Playback Switch", "Sidetone Voice PGA" },
+ { "RX5 Mixer", "DL5 Playback Switch", "DL5" },
+
+ { "RX6 Mixer", "ST2 Playback Switch", "Sidetone Voice PGA" },
+ { "RX6 Mixer", "DL6 Playback Switch", "DL6" },
+
+ /* Capture path */
+ { "Analog Left Capture Route", "Headset Mic", "HSMIC" },
+ { "Analog Left Capture Route", "Main Mic", "MAINMIC" },
+ { "Analog Left Capture Route", "Aux/FM Left", "LINEIN1" },
+
+ { "Analog Right Capture Route", "Sub Mic", "SUBMIC" },
+ { "Analog Right Capture Route", "Aux/FM Right", "LINEIN2" },
+
+ { "MicAmp1", NULL, "Analog Left Capture Route" },
+ { "MicAmp2", NULL, "Analog Right Capture Route" },
+
+ { "ADC1", NULL, "MicAmp1" },
+ { "ADC2", NULL, "MicAmp2" },
+
+ { "ATX Select", "AMIC1", "ADC1" },
+ { "ATX Select", "DMIC", "DMICDAT" },
+ { "ATX Select", "AMIC2", "ADC2" },
+
+ { "VTX Select", "AMIC1", "ADC1" },
+ { "VTX Select", "DMIC", "DMICDAT" },
+ { "VTX Select", "AMIC2", "ADC2" },
+
+ { "ULATX1", "ATX1 Filter Enable Switch", "ATX Select" },
+ { "ULATX1", "ATX1 Filter Bypass Switch", "ATX Select" },
+ { "ULATX2", "ATX2 Filter Enable Switch", "ATX Select" },
+ { "ULATX2", "ATX2 Filter Bypass Switch", "ATX Select" },
+
+ { "ULVTX1", "VTX1 Filter Enable Switch", "VTX Select" },
+ { "ULVTX1", "VTX1 Filter Bypass Switch", "VTX Select" },
+ { "ULVTX2", "VTX2 Filter Enable Switch", "VTX Select" },
+ { "ULVTX2", "VTX2 Filter Bypass Switch", "VTX Select" },
+
+ { "INTF1_SDO", "ULATX12 Capture Switch", "ULATX1" },
+ { "INTF1_SDO", "ULATX12 Capture Switch", "ULATX2" },
+ { "INTF2_SDO", "ULATX12 Capture Switch", "ULATX1" },
+ { "INTF2_SDO", "ULATX12 Capture Switch", "ULATX2" },
+
+ { "INTF1_SDO", NULL, "ULVTX1" },
+ { "INTF1_SDO", NULL, "ULVTX2" },
+ { "INTF2_SDO", NULL, "ULVTX1" },
+ { "INTF2_SDO", NULL, "ULVTX2" },
+
+ /* AFM Path */
+ { "APGA1", NULL, "LINEIN1" },
+ { "APGA2", NULL, "LINEIN2" },
+
+ { "RX1 Playback", "VRX1 Filter Bypass Switch", "RX1 Mixer" },
+ { "RX1 Playback", "ARX1 Filter Bypass Switch", "RX1 Mixer" },
+ { "RX1 Playback", "RX1 Filter Enable Switch", "RX1 Mixer" },
+
+ { "RX2 Playback", "VRX2 Filter Bypass Switch", "RX2 Mixer" },
+ { "RX2 Playback", "ARX2 Filter Bypass Switch", "RX2 Mixer" },
+ { "RX2 Playback", "RX2 Filter Enable Switch", "RX2 Mixer" },
+
+ { "RX3 Playback", "ARX3 Filter Bypass Switch", "RX3 Mixer" },
+ { "RX3 Playback", "RX3 Filter Enable Switch", "RX3 Mixer" },
+
+ { "RX4 Playback", "ARX4 Filter Bypass Switch", "RX4 Mixer" },
+ { "RX4 Playback", "RX4 Filter Enable Switch", "RX4 Mixer" },
+
+ { "RX5 Playback", "ARX5 Filter Bypass Switch", "RX5 Mixer" },
+ { "RX5 Playback", "RX5 Filter Enable Switch", "RX5 Mixer" },
+
+ { "RX6 Playback", "ARX6 Filter Bypass Switch", "RX6 Mixer" },
+ { "RX6 Playback", "RX6 Filter Enable Switch", "RX6 Mixer" },
+
+ { "DPGA1L Mixer", "RX1 Playback Switch", "RX1 Playback" },
+ { "DPGA1L Mixer", "RX3 Playback Switch", "RX3 Playback" },
+ { "DPGA1L Mixer", "RX5 Playback Switch", "RX5 Playback" },
+
+ { "DPGA1R Mixer", "RX2 Playback Switch", "RX2 Playback" },
+ { "DPGA1R Mixer", "RX4 Playback Switch", "RX4 Playback" },
+ { "DPGA1R Mixer", "RX6 Playback Switch", "RX6 Playback" },
+
+ { "DPGA1L", NULL, "DPGA1L Mixer" },
+ { "DPGA1R", NULL, "DPGA1R Mixer" },
+
+ { "DAC1L", NULL, "DPGA1L" },
+ { "DAC1R", NULL, "DPGA1R" },
+
+ { "DPGA2L Mixer", "RX1 Playback Switch", "RX1 Playback" },
+ { "DPGA2L Mixer", "RX2 Playback Switch", "RX2 Playback" },
+ { "DPGA2L Mixer", "RX3 Playback Switch", "RX3 Playback" },
+ { "DPGA2L Mixer", "RX4 Playback Switch", "RX4 Playback" },
+ { "DPGA2L Mixer", "RX5 Playback Switch", "RX5 Playback" },
+ { "DPGA2L Mixer", "RX6 Playback Switch", "RX6 Playback" },
+
+ { "DPGA2R Mixer", "RX2 Playback Switch", "RX2 Playback" },
+ { "DPGA2R Mixer", "RX4 Playback Switch", "RX4 Playback" },
+ { "DPGA2R Mixer", "RX6 Playback Switch", "RX6 Playback" },
+
+ { "DPGA2L", NULL, "DPGA2L Mixer" },
+ { "DPGA2R", NULL, "DPGA2R Mixer" },
+
+ { "DAC2L", NULL, "DPGA2L" },
+ { "DAC2R", NULL, "DPGA2R" },
+
+ { "DPGA3L Mixer", "RX1 Playback Switch", "RX1 Playback" },
+ { "DPGA3L Mixer", "RX3 Playback Switch", "RX3 Playback" },
+ { "DPGA3L Mixer", "RX5 Playback Switch", "RX5 Playback" },
+
+ { "DPGA3R Mixer", "RX2 Playback Switch", "RX2 Playback" },
+ { "DPGA3R Mixer", "RX4 Playback Switch", "RX4 Playback" },
+ { "DPGA3R Mixer", "RX6 Playback Switch", "RX6 Playback" },
+
+ { "DPGA3L", NULL, "DPGA3L Mixer" },
+ { "DPGA3R", NULL, "DPGA3R Mixer" },
+
+ { "DAC3L", NULL, "DPGA3L" },
+ { "DAC3R", NULL, "DPGA3R" },
+
+ { "Headset Left Mixer", "DAC1L Playback Switch", "DAC1L" },
+ { "Headset Left Mixer", "APGA1 Playback Switch", "APGA1" },
+
+ { "Headset Right Mixer", "DAC1R Playback Switch", "DAC1R" },
+ { "Headset Right Mixer", "APGA2 Playback Switch", "APGA2" },
+
+ { "HS Left Driver", NULL, "Headset Left Mixer" },
+ { "HS Right Driver", NULL, "Headset Right Mixer" },
+
+ { "HSOL", NULL, "HS Left Driver" },
+ { "HSOR", NULL, "HS Right Driver" },
+
+ /* Earphone playback path */
+ { "Earphone Mixer", "DAC2L Playback Switch", "DAC2L" },
+ { "Earphone Mixer", "APGA1 Playback Switch", "APGA1" },
+
+ { "Earphone Playback", "Switch", "Earphone Mixer" },
+ { "Earphone Driver", NULL, "Earphone Playback" },
+ { "EP", NULL, "Earphone Driver" },
+
+ { "Handsfree Left Mixer", "DAC2L Playback Switch", "DAC2L" },
+ { "Handsfree Left Mixer", "APGA1 Playback Switch", "APGA1" },
+
+ { "Handsfree Right Mixer", "DAC2R Playback Switch", "DAC2R" },
+ { "Handsfree Right Mixer", "APGA2 Playback Switch", "APGA2" },
+
+ { "HF Left PGA", NULL, "Handsfree Left Mixer" },
+ { "HF Right PGA", NULL, "Handsfree Right Mixer" },
+
+ { "HF Left Driver", NULL, "HF Left PGA" },
+ { "HF Right Driver", NULL, "HF Right PGA" },
+
+ { "HFL", NULL, "HF Left Driver" },
+ { "HFR", NULL, "HF Right Driver" },
+
+ { "LINEOUT1 Mixer", "DAC3L Playback Switch", "DAC3L" },
+ { "LINEOUT1 Mixer", "APGA1 Playback Switch", "APGA1" },
+
+ { "LINEOUT2 Mixer", "DAC3R Playback Switch", "DAC3R" },
+ { "LINEOUT2 Mixer", "APGA2 Playback Switch", "APGA2" },
+
+ { "LINEOUT1 Driver", NULL, "LINEOUT1 Mixer" },
+ { "LINEOUT2 Driver", NULL, "LINEOUT2 Mixer" },
+
+ { "LINEOUT1", NULL, "LINEOUT1 Driver" },
+ { "LINEOUT2", NULL, "LINEOUT2 Driver" },
+};
+
+static int isabelle_hs_mute(struct snd_soc_dai *dai, int mute)
+{
+ snd_soc_update_bits(dai->codec, ISABELLE_DAC1_SOFTRAMP_REG,
+ BIT(4), (mute ? BIT(4) : 0));
+
+ return 0;
+}
+
+static int isabelle_hf_mute(struct snd_soc_dai *dai, int mute)
+{
+ snd_soc_update_bits(dai->codec, ISABELLE_DAC2_SOFTRAMP_REG,
+ BIT(4), (mute ? BIT(4) : 0));
+
+ return 0;
+}
+
+static int isabelle_line_mute(struct snd_soc_dai *dai, int mute)
+{
+ snd_soc_update_bits(dai->codec, ISABELLE_DAC3_SOFTRAMP_REG,
+ BIT(4), (mute ? BIT(4) : 0));
+
+ return 0;
+}
+
+static int isabelle_set_bias_level(struct snd_soc_codec *codec,
+ enum snd_soc_bias_level level)
+{
+ switch (level) {
+ case SND_SOC_BIAS_ON:
+ break;
+ case SND_SOC_BIAS_PREPARE:
+ break;
+
+ case SND_SOC_BIAS_STANDBY:
+ snd_soc_update_bits(codec, ISABELLE_PWR_EN_REG,
+ ISABELLE_CHIP_EN, BIT(0));
+ break;
+
+ case SND_SOC_BIAS_OFF:
+ snd_soc_update_bits(codec, ISABELLE_PWR_EN_REG,
+ ISABELLE_CHIP_EN, 0);
+ break;
+ }
+
+ codec->dapm.bias_level = level;
+
+ return 0;
+}
+
+static int isabelle_hw_params(struct snd_pcm_substream *substream,
+ struct snd_pcm_hw_params *params,
+ struct snd_soc_dai *dai)
+{
+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
+ struct snd_soc_codec *codec = rtd->codec;
+ u16 aif = 0;
+ unsigned int fs_val = 0;
+
+ switch (params_rate(params)) {
+ case 8000:
+ fs_val = ISABELLE_FS_RATE_8;
+ break;
+ case 11025:
+ fs_val = ISABELLE_FS_RATE_11;
+ break;
+ case 12000:
+ fs_val = ISABELLE_FS_RATE_12;
+ break;
+ case 16000:
+ fs_val = ISABELLE_FS_RATE_16;
+ break;
+ case 22050:
+ fs_val = ISABELLE_FS_RATE_22;
+ break;
+ case 24000:
+ fs_val = ISABELLE_FS_RATE_24;
+ break;
+ case 32000:
+ fs_val = ISABELLE_FS_RATE_32;
+ break;
+ case 44100:
+ fs_val = ISABELLE_FS_RATE_44;
+ break;
+ case 48000:
+ fs_val = ISABELLE_FS_RATE_48;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ snd_soc_update_bits(codec, ISABELLE_FS_RATE_CFG_REG,
+ ISABELLE_FS_RATE_MASK, fs_val);
+
+ /* bit size */
+ switch (params_format(params)) {
+ case SNDRV_PCM_FORMAT_S20_3LE:
+ aif |= ISABELLE_AIF_LENGTH_20;
+ break;
+ case SNDRV_PCM_FORMAT_S32_LE:
+ aif |= ISABELLE_AIF_LENGTH_32;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ snd_soc_update_bits(codec, ISABELLE_INTF_CFG_REG,
+ ISABELLE_AIF_LENGTH_MASK, aif);
+
+ return 0;
+}
+
+static int isabelle_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt)
+{
+ struct snd_soc_codec *codec = codec_dai->codec;
+ unsigned int aif_val = 0;
+
+ switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
+ case SND_SOC_DAIFMT_CBS_CFS:
+ aif_val &= ~ISABELLE_AIF_MS;
+ break;
+ case SND_SOC_DAIFMT_CBM_CFM:
+ aif_val |= ISABELLE_AIF_MS;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
+ case SND_SOC_DAIFMT_I2S:
+ aif_val |= ISABELLE_I2S_MODE;
+ break;
+ case SND_SOC_DAIFMT_LEFT_J:
+ aif_val |= ISABELLE_LEFT_J_MODE;
+ break;
+ case SND_SOC_DAIFMT_PDM:
+ aif_val |= ISABELLE_PDM_MODE;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ snd_soc_update_bits(codec, ISABELLE_INTF_CFG_REG,
+ (ISABELLE_AIF_MS | ISABELLE_AIF_FMT_MASK), aif_val);
+
+ return 0;
+}
+
+/* Rates supported by Isabelle driver */
+#define ISABELLE_RATES SNDRV_PCM_RATE_8000_48000
+
+/* Formates supported by Isabelle driver. */
+#define ISABELLE_FORMATS (SNDRV_PCM_FMTBIT_S20_3LE |\
+ SNDRV_PCM_FMTBIT_S32_LE)
+
+static struct snd_soc_dai_ops isabelle_hs_dai_ops = {
+ .hw_params = isabelle_hw_params,
+ .set_fmt = isabelle_set_dai_fmt,
+ .digital_mute = isabelle_hs_mute,
+};
+
+static struct snd_soc_dai_ops isabelle_hf_dai_ops = {
+ .hw_params = isabelle_hw_params,
+ .set_fmt = isabelle_set_dai_fmt,
+ .digital_mute = isabelle_hf_mute,
+};
+
+static struct snd_soc_dai_ops isabelle_line_dai_ops = {
+ .hw_params = isabelle_hw_params,
+ .set_fmt = isabelle_set_dai_fmt,
+ .digital_mute = isabelle_line_mute,
+};
+
+static struct snd_soc_dai_ops isabelle_ul_dai_ops = {
+ .hw_params = isabelle_hw_params,
+ .set_fmt = isabelle_set_dai_fmt,
+};
+
+/* ISABELLE dai structure */
+struct snd_soc_dai_driver isabelle_dai[] = {
+ {
+ .name = "isabelle-dl1",
+ .playback = {
+ .stream_name = "Headset Playback",
+ .channels_min = 1,
+ .channels_max = 2,
+ .rates = ISABELLE_RATES,
+ .formats = ISABELLE_FORMATS,
+ },
+ .ops = &isabelle_hs_dai_ops,
+ },
+ {
+ .name = "isabelle-dl2",
+ .playback = {
+ .stream_name = "Handsfree Playback",
+ .channels_min = 1,
+ .channels_max = 2,
+ .rates = ISABELLE_RATES,
+ .formats = ISABELLE_FORMATS,
+ },
+ .ops = &isabelle_hf_dai_ops,
+ },
+ {
+ .name = "isabelle-lineout",
+ .playback = {
+ .stream_name = "Lineout Playback",
+ .channels_min = 1,
+ .channels_max = 2,
+ .rates = ISABELLE_RATES,
+ .formats = ISABELLE_FORMATS,
+ },
+ .ops = &isabelle_line_dai_ops,
+ },
+ {
+ .name = "isabelle-ul",
+ .capture = {
+ .stream_name = "Capture",
+ .channels_min = 1,
+ .channels_max = 2,
+ .rates = ISABELLE_RATES,
+ .formats = ISABELLE_FORMATS,
+ },
+ .ops = &isabelle_ul_dai_ops,
+ },
+};
+
+static int isabelle_probe(struct snd_soc_codec *codec)
+{
+ int ret = 0;
+
+ codec->control_data = dev_get_regmap(codec->dev, NULL);
+
+ ret = snd_soc_codec_set_cache_io(codec, 8, 8, SND_SOC_REGMAP);
+ if (ret < 0) {
+ dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
+ return ret;
+ }
+
+ return 0;
+}
+
+static struct snd_soc_codec_driver soc_codec_dev_isabelle = {
+ .probe = isabelle_probe,
+ .set_bias_level = isabelle_set_bias_level,
+ .controls = isabelle_snd_controls,
+ .num_controls = ARRAY_SIZE(isabelle_snd_controls),
+ .dapm_widgets = isabelle_dapm_widgets,
+ .num_dapm_widgets = ARRAY_SIZE(isabelle_dapm_widgets),
+ .dapm_routes = isabelle_intercon,
+ .num_dapm_routes = ARRAY_SIZE(isabelle_intercon),
+ .idle_bias_off = true,
+};
+
+static const struct regmap_config isabelle_regmap_config = {
+ .reg_bits = 8,
+ .val_bits = 8,
+
+ .max_register = ISABELLE_MAX_REGISTER,
+ .reg_defaults = isabelle_reg_defs,
+ .num_reg_defaults = ARRAY_SIZE(isabelle_reg_defs),
+ .cache_type = REGCACHE_RBTREE,
+};
+
+static int __devinit isabelle_i2c_probe(struct i2c_client *i2c,
+ const struct i2c_device_id *id)
+{
+ struct regmap *isabelle_regmap;
+ int ret = 0;
+
+ i2c_set_clientdata(i2c, isabelle_regmap);
+
+ isabelle_regmap = devm_regmap_init_i2c(i2c, &isabelle_regmap_config);
+ if (IS_ERR(isabelle_regmap)) {
+ ret = PTR_ERR(isabelle_regmap);
+ dev_err(&i2c->dev, "Failed to allocate register map: %d\n",
+ ret);
+ return ret;
+ }
+
+ ret = snd_soc_register_codec(&i2c->dev,
+ &soc_codec_dev_isabelle, isabelle_dai,
+ ARRAY_SIZE(isabelle_dai));
+ if (ret < 0) {
+ dev_err(&i2c->dev, "Failed to register codec: %d\n", ret);
+ regmap_exit(dev_get_regmap(&i2c->dev, NULL));
+ return ret;
+ }
+
+ return ret;
+}
+
+static int __devexit isabelle_i2c_remove(struct i2c_client *client)
+{
+ snd_soc_unregister_codec(&client->dev);
+ regmap_exit(dev_get_regmap(&client->dev, NULL));
+ return 0;
+}
+
+static const struct i2c_device_id isabelle_i2c_id[] = {
+ { "isabelle", 0 },
+ { }
+};
+MODULE_DEVICE_TABLE(i2c, isabelle_i2c_id);
+
+static struct i2c_driver isabelle_i2c_driver = {
+ .driver = {
+ .name = "isabelle",
+ .owner = THIS_MODULE,
+ },
+ .probe = isabelle_i2c_probe,
+ .remove = __devexit_p(isabelle_i2c_remove),
+ .id_table = isabelle_i2c_id,
+};
+
+module_i2c_driver(isabelle_i2c_driver);
+
+MODULE_DESCRIPTION("ASoC ISABELLE driver");
+MODULE_AUTHOR("Vishwas A Deshpande <vishwas.a.deshpande(a)ti.com>");
+MODULE_AUTHOR("M R Swami Reddy <MR.Swami.Reddy(a)ti.com>");
+MODULE_LICENSE("GPL v2");
diff --git a/sound/soc/codecs/isabelle.h b/sound/soc/codecs/isabelle.h
new file mode 100644
index 0000000..96d839a
--- /dev/null
+++ b/sound/soc/codecs/isabelle.h
@@ -0,0 +1,143 @@
+/*
+ * isabelle.h - Low power high fidelity audio codec driver header file
+ *
+ * Copyright (c) 2012 Texas Instruments, Inc
+ *
+ * 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; version 2 of the License.
+ *
+ */
+
+#ifndef _ISABELLE_H
+#define _ISABELLE_H
+
+#include <linux/bitops.h>
+
+/* ISABELLE REGISTERS */
+
+#define ISABELLE_PWR_CFG_REG 0x01
+#define ISABELLE_PWR_EN_REG 0x02
+#define ISABELLE_PS_EN1_REG 0x03
+#define ISABELLE_INT1_STATUS_REG 0x04
+#define ISABELLE_INT1_MASK_REG 0x05
+#define ISABELLE_INT2_STATUS_REG 0x06
+#define ISABELLE_INT2_MASK_REG 0x07
+#define ISABELLE_HKCTL1_REG 0x08
+#define ISABELLE_HKCTL2_REG 0x09
+#define ISABELLE_HKCTL3_REG 0x0A
+#define ISABELLE_ACCDET_STATUS_REG 0x0B
+#define ISABELLE_BUTTON_ID_REG 0x0C
+#define ISABELLE_PLL_CFG_REG 0x10
+#define ISABELLE_PLL_EN_REG 0x11
+#define ISABELLE_FS_RATE_CFG_REG 0x12
+#define ISABELLE_INTF_CFG_REG 0x13
+#define ISABELLE_INTF_EN_REG 0x14
+#define ISABELLE_ULATX12_INTF_CFG_REG 0x15
+#define ISABELLE_DL12_INTF_CFG_REG 0x16
+#define ISABELLE_DL34_INTF_CFG_REG 0x17
+#define ISABELLE_DL56_INTF_CFG_REG 0x18
+#define ISABELLE_ATX_STPGA1_CFG_REG 0x19
+#define ISABELLE_ATX_STPGA2_CFG_REG 0x1A
+#define ISABELLE_VTX_STPGA1_CFG_REG 0x1B
+#define ISABELLE_VTX2_STPGA2_CFG_REG 0x1C
+#define ISABELLE_ATX1_DPGA_REG 0x1D
+#define ISABELLE_ATX2_DPGA_REG 0x1E
+#define ISABELLE_VTX1_DPGA_REG 0x1F
+#define ISABELLE_VTX2_DPGA_REG 0x20
+#define ISABELLE_TX_INPUT_CFG_REG 0x21
+#define ISABELLE_RX_INPUT_CFG_REG 0x22
+#define ISABELLE_RX_INPUT_CFG2_REG 0x23
+#define ISABELLE_VOICE_HPF_CFG_REG 0x24
+#define ISABELLE_AUDIO_HPF_CFG_REG 0x25
+#define ISABELLE_RX1_DPGA_REG 0x26
+#define ISABELLE_RX2_DPGA_REG 0x27
+#define ISABELLE_RX3_DPGA_REG 0x28
+#define ISABELLE_RX4_DPGA_REG 0x29
+#define ISABELLE_RX5_DPGA_REG 0x2A
+#define ISABELLE_RX6_DPGA_REG 0x2B
+#define ISABELLE_ALU_TX_EN_REG 0x2C
+#define ISABELLE_ALU_RX_EN_REG 0x2D
+#define ISABELLE_IIR_RESYNC_REG 0x2E
+#define ISABELLE_ABIAS_CFG_REG 0x30
+#define ISABELLE_DBIAS_CFG_REG 0x31
+#define ISABELLE_MIC1_GAIN_REG 0x32
+#define ISABELLE_MIC2_GAIN_REG 0x33
+#define ISABELLE_AMIC_CFG_REG 0x34
+#define ISABELLE_DMIC_CFG_REG 0x35
+#define ISABELLE_APGA_GAIN_REG 0x36
+#define ISABELLE_APGA_CFG_REG 0x37
+#define ISABELLE_TX_GAIN_DLY_REG 0x38
+#define ISABELLE_RX_GAIN_DLY_REG 0x39
+#define ISABELLE_RX_PWR_CTRL_REG 0x3A
+#define ISABELLE_DPGA1LR_IN_SEL_REG 0x3B
+#define ISABELLE_DPGA1L_GAIN_REG 0x3C
+#define ISABELLE_DPGA1R_GAIN_REG 0x3D
+#define ISABELLE_DPGA2L_IN_SEL_REG 0x3E
+#define ISABELLE_DPGA2R_IN_SEL_REG 0x3F
+#define ISABELLE_DPGA2L_GAIN_REG 0x40
+#define ISABELLE_DPGA2R_GAIN_REG 0x41
+#define ISABELLE_DPGA3LR_IN_SEL_REG 0x42
+#define ISABELLE_DPGA3L_GAIN_REG 0x43
+#define ISABELLE_DPGA3R_GAIN_REG 0x44
+#define ISABELLE_DAC1_SOFTRAMP_REG 0x45
+#define ISABELLE_DAC2_SOFTRAMP_REG 0x46
+#define ISABELLE_DAC3_SOFTRAMP_REG 0x47
+#define ISABELLE_DAC_CFG_REG 0x48
+#define ISABELLE_EARDRV_CFG1_REG 0x49
+#define ISABELLE_EARDRV_CFG2_REG 0x4A
+#define ISABELLE_HSDRV_GAIN_REG 0x4B
+#define ISABELLE_HSDRV_CFG1_REG 0x4C
+#define ISABELLE_HSDRV_CFG2_REG 0x4D
+#define ISABELLE_HS_NG_CFG1_REG 0x4E
+#define ISABELLE_HS_NG_CFG2_REG 0x4F
+#define ISABELLE_LINEAMP_GAIN_REG 0x50
+#define ISABELLE_LINEAMP_CFG_REG 0x51
+#define ISABELLE_HFL_VOL_CTRL_REG 0x52
+#define ISABELLE_HFL_SFTVOL_CTRL_REG 0x53
+#define ISABELLE_HFL_LIM_CTRL_1_REG 0x54
+#define ISABELLE_HFL_LIM_CTRL_2_REG 0x55
+#define ISABELLE_HFR_VOL_CTRL_REG 0x56
+#define ISABELLE_HFR_SFTVOL_CTRL_REG 0x57
+#define ISABELLE_HFR_LIM_CTRL_1_REG 0x58
+#define ISABELLE_HFR_LIM_CTRL_2_REG 0x59
+#define ISABELLE_HF_MODE_REG 0x5A
+#define ISABELLE_HFLPGA_CFG_REG 0x5B
+#define ISABELLE_HFRPGA_CFG_REG 0x5C
+#define ISABELLE_HFDRV_CFG_REG 0x5D
+#define ISABELLE_PDMOUT_CFG1_REG 0x5E
+#define ISABELLE_PDMOUT_CFG2_REG 0x5F
+#define ISABELLE_PDMOUT_L_WM_REG 0x60
+#define ISABELLE_PDMOUT_R_WM_REG 0x61
+#define ISABELLE_HF_NG_CFG1_REG 0x62
+#define ISABELLE_HF_NG_CFG2_REG 0x63
+
+/* ISABELLE_PWR_EN_REG (0x02h) */
+#define ISABELLE_CHIP_EN BIT(0)
+
+/* ISABELLE DAI FORMATS */
+#define ISABELLE_AIF_FMT_MASK 0x70
+#define ISABELLE_I2S_MODE 0x0
+#define ISABELLE_LEFT_J_MODE 0x1
+#define ISABELLE_PDM_MODE 0x2
+
+#define ISABELLE_AIF_LENGTH_MASK 0x30
+#define ISABELLE_AIF_LENGTH_20 0x00
+#define ISABELLE_AIF_LENGTH_32 0x10
+
+#define ISABELLE_AIF_MS 0x80
+
+#define ISABELLE_FS_RATE_MASK 0xF
+#define ISABELLE_FS_RATE_8 0x0
+#define ISABELLE_FS_RATE_11 0x1
+#define ISABELLE_FS_RATE_12 0x2
+#define ISABELLE_FS_RATE_16 0x4
+#define ISABELLE_FS_RATE_22 0x5
+#define ISABELLE_FS_RATE_24 0x6
+#define ISABELLE_FS_RATE_32 0x8
+#define ISABELLE_FS_RATE_44 0x9
+#define ISABELLE_FS_RATE_48 0xA
+
+#define ISABELLE_MAX_REGISTER 0xFF
+
+#endif
4
4

Re: [alsa-devel] [PATCH] ASoC: lm49453: Remove version.h header file inclusion
by Mark Brown 04 Jun '12
by Mark Brown 04 Jun '12
04 Jun '12
On Sun, Jun 03, 2012 at 10:58:40PM +0530, Sachin Kamat wrote:
> version.h header file is no longer required.
Applied, thanks.
1
0

Re: [alsa-devel] [PATCH] ASoC: cs42l52: Remove version.h header file inclusion
by Mark Brown 04 Jun '12
by Mark Brown 04 Jun '12
04 Jun '12
On Sun, Jun 03, 2012 at 10:50:18PM +0530, Sachin Kamat wrote:
> version.h header file is no longer needed.
Applied, thanks.
1
0
Signed-off-by: Mark Brown <broonie(a)opensource.wolfsonmicro.com>
---
sound/soc/soc-dapm.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
index 3bb7a6f..a66379a 100644
--- a/sound/soc/soc-dapm.c
+++ b/sound/soc/soc-dapm.c
@@ -2902,7 +2902,7 @@ snd_soc_dapm_new_control(struct snd_soc_dapm_context *dapm,
}
break;
case snd_soc_dapm_clock_supply:
- w->clk = clk_get(dapm->dev, w->name);
+ w->clk = devm_clk_get(dapm->dev, w->name);
if (IS_ERR(w->clk)) {
ret = PTR_ERR(w->clk);
dev_err(dapm->dev, "Failed to request %s: %d\n",
--
1.7.10
2
2

[PATCH] ALSA: HDA: Create phantom jacks for fixed inputs and outputs
by David Henningsson 04 Jun '12
by David Henningsson 04 Jun '12
04 Jun '12
PulseAudio sometimes have difficulties knowing that there is a
"Speaker" or "Internal Mic", if they have no individual volume
controls or selectors. As a result, only e g "Headphone" might
be created for a laptop, but no "Speaker".
To help out, create phantom jacks (that are always present,
at least for now) for "Speaker", "Internal Mic" etc, in case we
detect them.
The naming convention is e g "Speaker Phantom Jack".
In order not to pollute the /dev/input namespace with even more
devices, these are added to the kcontrols only, not the input devices.
Signed-off-by: David Henningsson <david.henningsson(a)canonical.com>
---
sound/pci/hda/hda_jack.c | 59 ++++++++++++++++++++++++++++++++--------------
sound/pci/hda/hda_jack.h | 1 +
2 files changed, 42 insertions(+), 18 deletions(-)
diff --git a/sound/pci/hda/hda_jack.c b/sound/pci/hda/hda_jack.c
index 2dd1c11..60c976f 100644
--- a/sound/pci/hda/hda_jack.c
+++ b/sound/pci/hda/hda_jack.c
@@ -127,10 +127,15 @@ void snd_hda_jack_tbl_clear(struct hda_codec *codec)
static void jack_detect_update(struct hda_codec *codec,
struct hda_jack_tbl *jack)
{
- if (jack->jack_dirty || !jack->jack_detect) {
+ if (!jack->jack_dirty)
+ return;
+
+ if (jack->phantom_jack)
+ jack->pin_sense = AC_PINSENSE_PRESENCE;
+ else
jack->pin_sense = read_pin_sense(codec, jack->nid);
- jack->jack_dirty = 0;
- }
+
+ jack->jack_dirty = 0;
}
/**
@@ -264,8 +269,8 @@ static void hda_free_jack_priv(struct snd_jack *jack)
* This assigns a jack-detection kctl to the given pin. The kcontrol
* will have the given name and index.
*/
-int snd_hda_jack_add_kctl(struct hda_codec *codec, hda_nid_t nid,
- const char *name, int idx)
+static int __snd_hda_jack_add_kctl(struct hda_codec *codec, hda_nid_t nid,
+ const char *name, int idx, bool phantom_jack)
{
struct hda_jack_tbl *jack;
struct snd_kcontrol *kctl;
@@ -283,19 +288,30 @@ int snd_hda_jack_add_kctl(struct hda_codec *codec, hda_nid_t nid,
if (err < 0)
return err;
jack->kctl = kctl;
+ jack->phantom_jack = !!phantom_jack;
+
state = snd_hda_jack_detect(codec, nid);
snd_kctl_jack_report(codec->bus->card, kctl, state);
#ifdef CONFIG_SND_HDA_INPUT_JACK
- jack->type = get_input_jack_type(codec, nid);
- err = snd_jack_new(codec->bus->card, name, jack->type, &jack->jack);
- if (err < 0)
- return err;
- jack->jack->private_data = jack;
- jack->jack->private_free = hda_free_jack_priv;
- snd_jack_report(jack->jack, state ? jack->type : 0);
+ if (!phantom_jack) {
+ jack->type = get_input_jack_type(codec, nid);
+ err = snd_jack_new(codec->bus->card, name, jack->type,
+ &jack->jack);
+ if (err < 0)
+ return err;
+ jack->jack->private_data = jack;
+ jack->jack->private_free = hda_free_jack_priv;
+ snd_jack_report(jack->jack, state ? jack->type : 0);
+ }
#endif
return 0;
}
+
+int snd_hda_jack_add_kctl(struct hda_codec *codec, hda_nid_t nid,
+ const char *name, int idx)
+{
+ return __snd_hda_jack_add_kctl(codec, nid, name, idx, false);
+}
EXPORT_SYMBOL_HDA(snd_hda_jack_add_kctl);
static int add_jack_kctl(struct hda_codec *codec, hda_nid_t nid,
@@ -305,25 +321,32 @@ static int add_jack_kctl(struct hda_codec *codec, hda_nid_t nid,
unsigned int def_conf, conn;
char name[44];
int idx, err;
+ bool phantom_jack;
if (!nid)
return 0;
- if (!is_jack_detectable(codec, nid))
- return 0;
def_conf = snd_hda_codec_get_pincfg(codec, nid);
conn = get_defcfg_connect(def_conf);
- if (conn != AC_JACK_PORT_COMPLEX)
+ if (conn == AC_JACK_PORT_NONE)
return 0;
+ phantom_jack = (conn != AC_JACK_PORT_COMPLEX) ||
+ !is_jack_detectable(codec, nid);
snd_hda_get_pin_label(codec, nid, cfg, name, sizeof(name), &idx);
+ if (phantom_jack)
+ /* Example final name: "Internal Mic Phantom Jack" */
+ strncat(name, " Phantom", sizeof(name) - strlen(name) - 1);
if (!strcmp(name, lastname) && idx == *lastidx)
idx++;
- strncpy(lastname, name, 44);
+ strncpy(lastname, name, sizeof(name));
*lastidx = idx;
- err = snd_hda_jack_add_kctl(codec, nid, name, idx);
+ err = __snd_hda_jack_add_kctl(codec, nid, name, idx, phantom_jack);
if (err < 0)
return err;
- return snd_hda_jack_detect_enable(codec, nid, 0);
+
+ if (!phantom_jack)
+ return snd_hda_jack_detect_enable(codec, nid, 0);
+ return 0;
}
/**
diff --git a/sound/pci/hda/hda_jack.h b/sound/pci/hda/hda_jack.h
index 8ae5246..a9803da 100644
--- a/sound/pci/hda/hda_jack.h
+++ b/sound/pci/hda/hda_jack.h
@@ -23,6 +23,7 @@ struct hda_jack_tbl {
unsigned int pin_sense; /* cached pin-sense value */
unsigned int jack_detect:1; /* capable of jack-detection? */
unsigned int jack_dirty:1; /* needs to update? */
+ unsigned int phantom_jack:1; /* a fixed, always present port? */
struct snd_kcontrol *kctl; /* assigned kctl for jack-detection */
#ifdef CONFIG_SND_HDA_INPUT_JACK
int type;
--
1.7.9.5
--------------010405080703040807000606--
1
0

[alsa-devel] [PATCH v2] ASoC: Support TI Isabelle Audio driver
by MR.Swami.Reddyï¼ ti.com 04 Jun '12
by MR.Swami.Reddyï¼ ti.com 04 Jun '12
04 Jun '12
sound/soc/codecs/Kconfig | 4 +
sound/soc/codecs/Makefile | 2 +
sound/soc/codecs/isabelle.c | 1179 ++++++++++++++++++++++++++++++++
sound/soc/codecs/isabelle.h | 143 ++++
4 files changed, 1328 insertions(+), 0 deletions(-)
diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig
index ed5f66c..4ebf9e8 100644
--- a/sound/soc/codecs/Kconfig
+++ b/sound/soc/codecs/Kconfig
@@ -30,6 +30,7 @@ config SND_SOC_ALL_CODECS
select SND_SOC_CX20442
select SND_SOC_DA7210 if I2C
select SND_SOC_DFBMCS320
+ select SND_SOC_ISABELLE if I2C
select SND_SOC_JZ4740_CODEC if SOC_JZ4740
select SND_SOC_LM4857 if I2C
select SND_SOC_LM49453 if I2C
@@ -185,6 +186,9 @@ config SND_SOC_DFBMCS320
config SND_SOC_DMIC
tristate
+config SND_SOC_ISABELLE
+ tristate
+
config SND_SOC_LM49453
tristate
diff --git a/sound/soc/codecs/Makefile b/sound/soc/codecs/Makefile
index 7bbfdb2..fdc1ff6 100644
--- a/sound/soc/codecs/Makefile
+++ b/sound/soc/codecs/Makefile
@@ -17,6 +17,7 @@ snd-soc-cx20442-objs := cx20442.o
snd-soc-da7210-objs := da7210.o
snd-soc-dfbmcs320-objs := dfbmcs320.o
snd-soc-dmic-objs := dmic.o
+snd-soc-isabelle-objs := isabelle.o
snd-soc-l3-objs := l3.o
snd-soc-lm49453-objs := lm49453.o
snd-soc-max98088-objs := max98088.o
@@ -106,6 +107,7 @@ obj-$(CONFIG_SND_SOC_CX20442) += snd-soc-cx20442.o
obj-$(CONFIG_SND_SOC_DA7210) += snd-soc-da7210.o
obj-$(CONFIG_SND_SOC_DFBMCS320) += snd-soc-dfbmcs320.o
obj-$(CONFIG_SND_SOC_DMIC) += snd-soc-dmic.o
+obj-$(CONFIG_SND_SOC_ISABELLE) += snd-soc-isabelle.o
obj-$(CONFIG_SND_SOC_L3) += snd-soc-l3.o
obj-$(CONFIG_SND_SOC_LM49453) += snd-soc-lm49453.o
obj-$(CONFIG_SND_SOC_JZ4740_CODEC) += snd-soc-jz4740-codec.o
diff --git a/sound/soc/codecs/isabelle.c b/sound/soc/codecs/isabelle.c
new file mode 100644
index 0000000..69228ec
--- /dev/null
+++ b/sound/soc/codecs/isabelle.c
@@ -0,0 +1,1179 @@
+/*
+ * isabelle.c - Low power high fidelity audio codec driver
+ *
+ * Copyright (c) 2012 Texas Instruments, Inc
+ *
+ * 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; version 2 of the License.
+ *
+ *
+ * Initially based on sound/soc/codecs/twl6040.c
+ *
+ */
+#include <linux/module.h>
+#include <linux/moduleparam.h>
+#include <linux/version.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/delay.h>
+#include <linux/pm.h>
+#include <linux/regmap.h>
+#include <linux/i2c.h>
+#include <linux/slab.h>
+#include <sound/core.h>
+#include <sound/pcm.h>
+#include <sound/pcm_params.h>
+#include <sound/soc.h>
+#include <sound/soc-dapm.h>
+#include <sound/tlv.h>
+#include <sound/jack.h>
+#include <sound/initval.h>
+#include <asm/div64.h>
+#include "isabelle.h"
+
+
+/* Register default values for ISABELLE driver. */
+static struct reg_default isabelle_reg_defs[] = {
+ { 0, 0x00 },
+ { 1, 0x00 },
+ { 2, 0x00 },
+ { 3, 0x00 },
+ { 4, 0x00 },
+ { 5, 0x00 },
+ { 6, 0x00 },
+ { 7, 0x00 },
+ { 8, 0x00 },
+ { 9, 0x00 },
+ { 10, 0x00 },
+ { 11, 0x00 },
+ { 12, 0x00 },
+ { 13, 0x00 },
+ { 14, 0x00 },
+ { 15, 0x00 },
+ { 16, 0x00 },
+ { 17, 0x00 },
+ { 18, 0x00 },
+ { 19, 0x00 },
+ { 20, 0x00 },
+ { 21, 0x02 },
+ { 22, 0x02 },
+ { 23, 0x02 },
+ { 24, 0x02 },
+ { 25, 0x0F },
+ { 26, 0x8F },
+ { 27, 0x0F },
+ { 28, 0x8F },
+ { 29, 0x00 },
+ { 30, 0x00 },
+ { 31, 0x00 },
+ { 32, 0x00 },
+ { 33, 0x00 },
+ { 34, 0x00 },
+ { 35, 0x00 },
+ { 36, 0x00 },
+ { 37, 0x00 },
+ { 38, 0x00 },
+ { 39, 0x00 },
+ { 40, 0x00 },
+ { 41, 0x00 },
+ { 42, 0x00 },
+ { 43, 0x00 },
+ { 44, 0x00 },
+ { 45, 0x00 },
+ { 46, 0x00 },
+ { 47, 0x00 },
+ { 48, 0x00 },
+ { 49, 0x00 },
+ { 50, 0x00 },
+ { 51, 0x00 },
+ { 52, 0x00 },
+ { 53, 0x00 },
+ { 54, 0x00 },
+ { 55, 0x00 },
+ { 56, 0x00 },
+ { 57, 0x00 },
+ { 58, 0x00 },
+ { 59, 0x00 },
+ { 60, 0x00 },
+ { 61, 0x00 },
+ { 62, 0x00 },
+ { 63, 0x00 },
+ { 64, 0x00 },
+ { 65, 0x00 },
+ { 66, 0x00 },
+ { 67, 0x00 },
+ { 68, 0x00 },
+ { 69, 0x90 },
+ { 70, 0x90 },
+ { 71, 0x90 },
+ { 72, 0x00 },
+ { 73, 0x00 },
+ { 74, 0x00 },
+ { 75, 0x00 },
+ { 76, 0x00 },
+ { 77, 0x00 },
+ { 78, 0x00 },
+ { 79, 0x00 },
+ { 80, 0x00 },
+ { 81, 0x00 },
+ { 82, 0x00 },
+ { 83, 0x00 },
+ { 84, 0x00 },
+ { 85, 0x07 },
+ { 86, 0x00 },
+ { 87, 0x00 },
+ { 88, 0x00 },
+ { 89, 0x07 },
+ { 90, 0x80 },
+ { 91, 0x07 },
+ { 92, 0x07 },
+ { 93, 0x00 },
+ { 94, 0x00 },
+ { 95, 0x00 },
+ { 96, 0x00 },
+ { 97, 0x00 },
+ { 98, 0x00 },
+ { 99, 0x00 },
+};
+
+static const char *isabelle_rx1_texts[] = {"VRX1", "ARX1"};
+static const char *isabelle_rx2_texts[] = {"VRX2", "ARX2"};
+
+static const struct soc_enum isabelle_rx1_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_VOICE_HPF_CFG_REG, 3, 1, isabelle_rx1_texts),
+ SOC_ENUM_SINGLE(ISABELLE_AUDIO_HPF_CFG_REG, 5, 1, isabelle_rx1_texts),
+};
+
+static const struct soc_enum isabelle_rx2_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_VOICE_HPF_CFG_REG, 2, 1, isabelle_rx2_texts),
+ SOC_ENUM_SINGLE(ISABELLE_AUDIO_HPF_CFG_REG, 4, 1, isabelle_rx2_texts),
+};
+
+/* Headset DAC playback switches */
+static const struct snd_kcontrol_new rx1_mux_controls =
+ SOC_DAPM_ENUM("Route", isabelle_rx1_enum);
+
+static const struct snd_kcontrol_new rx2_mux_controls =
+ SOC_DAPM_ENUM("Route", isabelle_rx2_enum);
+
+/* TX input selection */
+static const char *isabelle_atx_texts[] = {"AMIC1", "DMIC"};
+static const char *isabelle_vtx_texts[] = {"AMIC2", "DMIC"};
+
+static const struct soc_enum isabelle_atx_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_AMIC_CFG_REG, 7, 1, isabelle_atx_texts),
+ SOC_ENUM_SINGLE(ISABELLE_DMIC_CFG_REG, 0, 1, isabelle_atx_texts),
+};
+
+static const struct soc_enum isabelle_vtx_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_AMIC_CFG_REG, 6, 1, isabelle_vtx_texts),
+ SOC_ENUM_SINGLE(ISABELLE_DMIC_CFG_REG, 0, 1, isabelle_vtx_texts),
+};
+
+static const struct snd_kcontrol_new atx_mux_controls =
+ SOC_DAPM_ENUM("Route", isabelle_atx_enum);
+
+static const struct snd_kcontrol_new vtx_mux_controls =
+ SOC_DAPM_ENUM("Route", isabelle_vtx_enum);
+
+/* Left analog microphone selection */
+static const char *isabelle_amic1_texts[] = {
+ "Main Mic", "Headset Mic", "Aux/FM Left"};
+
+/* Left analog microphone selection */
+static const char *isabelle_amic2_texts[] = {"Sub Mic", "Aux/FM Right"};
+
+static const struct soc_enum isabelle_amic1_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_AMIC_CFG_REG, 5,
+ ARRAY_SIZE(isabelle_amic1_texts),
+ isabelle_amic1_texts),
+};
+
+static const struct soc_enum isabelle_amic2_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_AMIC_CFG_REG, 4,
+ ARRAY_SIZE(isabelle_amic2_texts),
+ isabelle_amic2_texts),
+};
+
+static const struct snd_kcontrol_new amic1_control =
+ SOC_DAPM_ENUM("Route", isabelle_amic1_enum);
+
+static const struct snd_kcontrol_new amic2_control =
+ SOC_DAPM_ENUM("Route", isabelle_amic2_enum);
+
+static const char *isabelle_st_audio_texts[] = {"ATX1", "ATX2"};
+
+static const char *isabelle_st_voice_texts[] = {"VTX1", "VTX2"};
+
+static const struct soc_enum isabelle_st_audio_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_ATX_STPGA1_CFG_REG, 7, 1,
+ isabelle_st_audio_texts),
+ SOC_ENUM_SINGLE(ISABELLE_ATX_STPGA2_CFG_REG, 7, 1,
+ isabelle_st_audio_texts),
+};
+
+static const struct soc_enum isabelle_st_voice_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_VTX_STPGA1_CFG_REG, 7, 1,
+ isabelle_st_voice_texts),
+ SOC_ENUM_SINGLE(ISABELLE_VTX2_STPGA2_CFG_REG, 7, 1,
+ isabelle_st_voice_texts),
+};
+
+static const struct snd_kcontrol_new st_audio_control =
+ SOC_DAPM_ENUM("Route", isabelle_st_audio_enum);
+
+static const struct snd_kcontrol_new st_voice_control =
+ SOC_DAPM_ENUM("Route", isabelle_st_voice_enum);
+
+/* Mixer controls */
+static const struct snd_kcontrol_new isabelle_hs_left_mixer_controls[] = {
+SOC_DAPM_SINGLE("DAC1L Playback Switch", ISABELLE_HSDRV_CFG1_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("APGA1 Playback Switch", ISABELLE_HSDRV_CFG1_REG, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_hs_right_mixer_controls[] = {
+SOC_DAPM_SINGLE("DAC1R Playback Switch", ISABELLE_HSDRV_CFG1_REG, 5, 1, 0),
+SOC_DAPM_SINGLE("APGA2 Playback Switch", ISABELLE_HSDRV_CFG1_REG, 4, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_hf_left_mixer_controls[] = {
+SOC_DAPM_SINGLE("DAC2L Playback Switch", ISABELLE_HFLPGA_CFG_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("APGA1 Playback Switch", ISABELLE_HFLPGA_CFG_REG, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_hf_right_mixer_controls[] = {
+SOC_DAPM_SINGLE("DAC2R Playback Switch", ISABELLE_HFRPGA_CFG_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("APGA2 Playback Switch", ISABELLE_HFRPGA_CFG_REG, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_ep_mixer_controls[] = {
+SOC_DAPM_SINGLE("DAC2L Playback Switch", ISABELLE_EARDRV_CFG1_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("APGA1 Playback Switch", ISABELLE_EARDRV_CFG1_REG, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_aux_left_mixer_controls[] = {
+SOC_DAPM_SINGLE("DAC3L Playback Switch", ISABELLE_LINEAMP_CFG_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("APGA1 Playback Switch", ISABELLE_LINEAMP_CFG_REG, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_aux_right_mixer_controls[] = {
+SOC_DAPM_SINGLE("DAC3R Playback Switch", ISABELLE_LINEAMP_CFG_REG, 5, 1, 0),
+SOC_DAPM_SINGLE("APGA2 Playback Switch", ISABELLE_LINEAMP_CFG_REG, 4, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_dpga1_left_mixer_controls[] = {
+SOC_DAPM_SINGLE("RX1 Playback Switch", ISABELLE_DPGA1LR_IN_SEL_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("RX3 Playback Switch", ISABELLE_DPGA1LR_IN_SEL_REG, 6, 1, 0),
+SOC_DAPM_SINGLE("RX5 Playback Switch", ISABELLE_DPGA1LR_IN_SEL_REG, 5, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_dpga1_right_mixer_controls[] = {
+SOC_DAPM_SINGLE("RX2 Playback Switch", ISABELLE_DPGA1LR_IN_SEL_REG, 3, 1, 0),
+SOC_DAPM_SINGLE("RX4 Playback Switch", ISABELLE_DPGA1LR_IN_SEL_REG, 2, 1, 0),
+SOC_DAPM_SINGLE("RX6 Playback Switch", ISABELLE_DPGA1LR_IN_SEL_REG, 1, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_dpga2_left_mixer_controls[] = {
+SOC_DAPM_SINGLE("RX1 Playback Switch", ISABELLE_DPGA2L_IN_SEL_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("RX2 Playback Switch", ISABELLE_DPGA2L_IN_SEL_REG, 6, 1, 0),
+SOC_DAPM_SINGLE("RX3 Playback Switch", ISABELLE_DPGA2L_IN_SEL_REG, 5, 1, 0),
+SOC_DAPM_SINGLE("RX4 Playback Switch", ISABELLE_DPGA2L_IN_SEL_REG, 4, 1, 0),
+SOC_DAPM_SINGLE("RX5 Playback Switch", ISABELLE_DPGA2L_IN_SEL_REG, 3, 1, 0),
+SOC_DAPM_SINGLE("RX6 Playback Switch", ISABELLE_DPGA2L_IN_SEL_REG, 2, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_dpga2_right_mixer_controls[] = {
+SOC_DAPM_SINGLE("USNC Playback Switch", ISABELLE_DPGA2R_IN_SEL_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("RX2 Playback Switch", ISABELLE_DPGA2R_IN_SEL_REG, 3, 1, 0),
+SOC_DAPM_SINGLE("RX4 Playback Switch", ISABELLE_DPGA2R_IN_SEL_REG, 2, 1, 0),
+SOC_DAPM_SINGLE("RX6 Playback Switch", ISABELLE_DPGA2R_IN_SEL_REG, 1, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_dpga3_left_mixer_controls[] = {
+SOC_DAPM_SINGLE("RX1 Playback Switch", ISABELLE_DPGA3LR_IN_SEL_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("RX3 Playback Switch", ISABELLE_DPGA3LR_IN_SEL_REG, 6, 1, 0),
+SOC_DAPM_SINGLE("RX5 Playback Switch", ISABELLE_DPGA3LR_IN_SEL_REG, 5, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_dpga3_right_mixer_controls[] = {
+SOC_DAPM_SINGLE("RX2 Playback Switch", ISABELLE_DPGA3LR_IN_SEL_REG, 3, 1, 0),
+SOC_DAPM_SINGLE("RX4 Playback Switch", ISABELLE_DPGA3LR_IN_SEL_REG, 2, 1, 0),
+SOC_DAPM_SINGLE("RX6 Playback Switch", ISABELLE_DPGA3LR_IN_SEL_REG, 1, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_rx1_mixer_controls[] = {
+SOC_DAPM_SINGLE("ST1 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("DL1 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_rx2_mixer_controls[] = {
+SOC_DAPM_SINGLE("ST2 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 5, 1, 0),
+SOC_DAPM_SINGLE("DL2 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 4, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_rx3_mixer_controls[] = {
+SOC_DAPM_SINGLE("ST1 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 3, 1, 0),
+SOC_DAPM_SINGLE("DL3 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 2, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_rx4_mixer_controls[] = {
+SOC_DAPM_SINGLE("ST2 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 1, 1, 0),
+SOC_DAPM_SINGLE("DL4 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 0, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_rx5_mixer_controls[] = {
+SOC_DAPM_SINGLE("ST1 Playback Switch", ISABELLE_RX_INPUT_CFG2_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("DL5 Playback Switch", ISABELLE_RX_INPUT_CFG2_REG, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_rx6_mixer_controls[] = {
+SOC_DAPM_SINGLE("ST2 Playback Switch", ISABELLE_RX_INPUT_CFG2_REG, 5, 1, 0),
+SOC_DAPM_SINGLE("DL6 Playback Switch", ISABELLE_RX_INPUT_CFG2_REG, 4, 1, 0),
+};
+
+static const struct snd_kcontrol_new ep_path_enable_control =
+ SOC_DAPM_SINGLE("Switch", ISABELLE_EARDRV_CFG2_REG, 0, 1, 0);
+
+/* TLV Declarations */
+static const DECLARE_TLV_DB_SCALE(mic_amp_tlv, 0, 100, 0);
+static const DECLARE_TLV_DB_SCALE(afm_amp_tlv, -3300, 300, 0);
+static const DECLARE_TLV_DB_SCALE(dac_tlv, -1200, 200, 0);
+static const DECLARE_TLV_DB_SCALE(hf_tlv, -5000, 200, 0);
+
+/* from -63 to 0 dB in 1 dB steps */
+static const DECLARE_TLV_DB_SCALE(dpga_tlv, -6300, 100, 1);
+
+/* from -63 to 9 dB in 1 dB steps */
+static const DECLARE_TLV_DB_SCALE(rx_tlv, -6300, 100, 1);
+
+static const DECLARE_TLV_DB_SCALE(st_tlv, -2700, 300, 1);
+static const DECLARE_TLV_DB_SCALE(tx_tlv, -600, 100, 0);
+
+static const struct snd_kcontrol_new isabelle_snd_controls[] = {
+ SOC_DOUBLE_TLV("Headset Playback Volume", ISABELLE_HSDRV_GAIN_REG,
+ 4, 0, 0xF, 0, dac_tlv),
+ SOC_DOUBLE_R_TLV("Handsfree Playback Volume",
+ ISABELLE_HFLPGA_CFG_REG, ISABELLE_HFRPGA_CFG_REG,
+ 0, 0x1F, 0, hf_tlv),
+ SOC_DOUBLE_TLV("Aux Playback Volume", ISABELLE_LINEAMP_GAIN_REG,
+ 4, 0, 0xF, 0, dac_tlv),
+ SOC_SINGLE_TLV("Earpiece Playback Volume", ISABELLE_EARDRV_CFG1_REG,
+ 0, 0xF, 0, dac_tlv),
+
+ SOC_DOUBLE_TLV("Aux FM Volume", ISABELLE_APGA_GAIN_REG, 4, 0, 0xF, 0,
+ afm_amp_tlv),
+ SOC_SINGLE_TLV("Mic1 Capture Volume", ISABELLE_MIC1_GAIN_REG, 3, 0x1F,
+ 0, mic_amp_tlv),
+ SOC_SINGLE_TLV("Mic2 Capture Volume", ISABELLE_MIC2_GAIN_REG, 3, 0x1F,
+ 0, mic_amp_tlv),
+
+ SOC_DOUBLE_R_TLV("DPGA1 Volume", ISABELLE_DPGA1L_GAIN_REG,
+ ISABELLE_DPGA1R_GAIN_REG, 0, 0x3F, 0, dpga_tlv),
+ SOC_DOUBLE_R_TLV("DPGA2 Volume", ISABELLE_DPGA2L_GAIN_REG,
+ ISABELLE_DPGA2R_GAIN_REG, 0, 0x3F, 0, dpga_tlv),
+ SOC_DOUBLE_R_TLV("DPGA3 Volume", ISABELLE_DPGA3L_GAIN_REG,
+ ISABELLE_DPGA3R_GAIN_REG, 0, 0x3F, 0, dpga_tlv),
+
+ SOC_SINGLE_TLV("Sidetone Audio TX1 Volume",
+ ISABELLE_ATX_STPGA1_CFG_REG, 0, 0xF, 0, st_tlv),
+ SOC_SINGLE_TLV("Sidetone Audio TX2 Volume",
+ ISABELLE_ATX_STPGA2_CFG_REG, 0, 0xF, 0, st_tlv),
+ SOC_SINGLE_TLV("Sidetone Voice TX1 Volume",
+ ISABELLE_VTX_STPGA1_CFG_REG, 0, 0xF, 0, st_tlv),
+ SOC_SINGLE_TLV("Sidetone Voice TX2 Volume",
+ ISABELLE_VTX2_STPGA2_CFG_REG, 0, 0xF, 0, st_tlv),
+
+ SOC_SINGLE_TLV("Audio TX1 Volume", ISABELLE_ATX1_DPGA_REG, 4, 0xF, 0,
+ tx_tlv),
+ SOC_SINGLE_TLV("Audio TX2 Volume", ISABELLE_ATX2_DPGA_REG, 4, 0xF, 0,
+ tx_tlv),
+ SOC_SINGLE_TLV("Voice TX1 Volume", ISABELLE_VTX1_DPGA_REG, 4, 0xF, 0,
+ tx_tlv),
+ SOC_SINGLE_TLV("Voice TX2 Volume", ISABELLE_VTX2_DPGA_REG, 4, 0xF, 0,
+ tx_tlv),
+
+ SOC_SINGLE_TLV("RX1 DPGA Volume", ISABELLE_RX1_DPGA_REG, 0, 0x3F, 0,
+ rx_tlv),
+ SOC_SINGLE_TLV("RX2 DPGA Volume", ISABELLE_RX2_DPGA_REG, 0, 0x3F, 0,
+ rx_tlv),
+ SOC_SINGLE_TLV("RX3 DPGA Volume", ISABELLE_RX3_DPGA_REG, 0, 0x3F, 0,
+ rx_tlv),
+ SOC_SINGLE_TLV("RX4 DPGA Volume", ISABELLE_RX4_DPGA_REG, 0, 0x3F, 0,
+ rx_tlv),
+ SOC_SINGLE_TLV("RX5 DPGA Volume", ISABELLE_RX5_DPGA_REG, 0, 0x3F, 0,
+ rx_tlv),
+ SOC_SINGLE_TLV("RX6 DPGA Volume", ISABELLE_RX6_DPGA_REG, 0, 0x3F, 0,
+ rx_tlv),
+
+ SOC_SINGLE("Headset Noise Gate", ISABELLE_HS_NG_CFG1_REG, 7, 1, 0),
+ SOC_SINGLE("Handsfree Noise Gate", ISABELLE_HF_NG_CFG1_REG, 7, 1, 0),
+
+ SOC_SINGLE("ATX1 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 7, 1, 0),
+ SOC_SINGLE("ATX2 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 6, 1, 0),
+ SOC_SINGLE("ARX1 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 5, 1, 0),
+ SOC_SINGLE("ARX2 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 4, 1, 0),
+ SOC_SINGLE("ARX3 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 3, 1, 0),
+ SOC_SINGLE("ARX4 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 2, 1, 0),
+ SOC_SINGLE("ARX5 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 1, 1, 0),
+ SOC_SINGLE("ARX6 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 0, 1, 0),
+ SOC_SINGLE("VRX1 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 3, 1, 0),
+ SOC_SINGLE("VRX2 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 2, 1, 0),
+
+ SOC_SINGLE("ATX1 Filter Enable Switch", ISABELLE_ALU_TX_EN_REG,
+ 7, 1, 0),
+ SOC_SINGLE("ATX2 Filter Enable Switch", ISABELLE_ALU_TX_EN_REG,
+ 6, 1, 0),
+ SOC_SINGLE("VTX1 Filter Enable Switch", ISABELLE_ALU_TX_EN_REG,
+ 5, 1, 0),
+ SOC_SINGLE("VTX2 Filter Enable Switch", ISABELLE_ALU_TX_EN_REG,
+ 4, 1, 0),
+ SOC_SINGLE("RX1 Filter Enable Switch", ISABELLE_ALU_RX_EN_REG,
+ 5, 1, 0),
+ SOC_SINGLE("RX2 Filter Enable Switch", ISABELLE_ALU_RX_EN_REG,
+ 4, 1, 0),
+ SOC_SINGLE("RX3 Filter Enable Switch", ISABELLE_ALU_RX_EN_REG,
+ 3, 1, 0),
+ SOC_SINGLE("RX4 Filter Enable Switch", ISABELLE_ALU_RX_EN_REG,
+ 2, 1, 0),
+ SOC_SINGLE("RX5 Filter Enable Switch", ISABELLE_ALU_RX_EN_REG,
+ 1, 1, 0),
+ SOC_SINGLE("RX6 Filter Enable Switch", ISABELLE_ALU_RX_EN_REG,
+ 0, 1, 0),
+
+ SOC_SINGLE("ULATX12 Capture Switch", ISABELLE_ULATX12_INTF_CFG_REG,
+ 7, 1, 0),
+
+ SOC_SINGLE("DL12 Playback Switch", ISABELLE_DL12_INTF_CFG_REG,
+ 7, 1, 0),
+ SOC_SINGLE("DL34 Playback Switch", ISABELLE_DL34_INTF_CFG_REG,
+ 7, 1, 0),
+ SOC_SINGLE("DL56 Playback Switch", ISABELLE_DL56_INTF_CFG_REG,
+ 7, 1, 0),
+
+ /* DMIC Switch */
+ SOC_SINGLE("DMIC Switch", ISABELLE_DMIC_CFG_REG, 0, 1, 0),
+};
+
+static const struct snd_soc_dapm_widget isabelle_dapm_widgets[] = {
+ /* Inputs */
+ SND_SOC_DAPM_INPUT("MAINMIC"),
+ SND_SOC_DAPM_INPUT("HSMIC"),
+ SND_SOC_DAPM_INPUT("SUBMIC"),
+ SND_SOC_DAPM_INPUT("LINEIN1"),
+ SND_SOC_DAPM_INPUT("LINEIN2"),
+ SND_SOC_DAPM_INPUT("DMICDAT"),
+
+ /* Outputs */
+ SND_SOC_DAPM_OUTPUT("HSOL"),
+ SND_SOC_DAPM_OUTPUT("HSOR"),
+ SND_SOC_DAPM_OUTPUT("HFL"),
+ SND_SOC_DAPM_OUTPUT("HFR"),
+ SND_SOC_DAPM_OUTPUT("EP"),
+ SND_SOC_DAPM_OUTPUT("LINEOUT1"),
+ SND_SOC_DAPM_OUTPUT("LINEOUT2"),
+
+ SND_SOC_DAPM_PGA("DL1", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DL2", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DL3", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DL4", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DL5", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DL6", SND_SOC_NOPM, 0, 0, NULL, 0),
+
+ /* Analog input muxes for the capture amplifiers */
+ SND_SOC_DAPM_MUX("Analog Left Capture Route",
+ SND_SOC_NOPM, 0, 0, &amic1_control),
+ SND_SOC_DAPM_MUX("Analog Right Capture Route",
+ SND_SOC_NOPM, 0, 0, &amic2_control),
+
+ SND_SOC_DAPM_MUX("Sidetone Audio Playback", SND_SOC_NOPM, 0, 0,
+ &st_audio_control),
+ SND_SOC_DAPM_MUX("Sidetone Voice Playback", SND_SOC_NOPM, 0, 0,
+ &st_voice_control),
+
+ /* AIF */
+ SND_SOC_DAPM_AIF_IN("INTF1_SDI", NULL, 0, ISABELLE_INTF_EN_REG, 7, 0),
+ SND_SOC_DAPM_AIF_IN("INTF2_SDI", NULL, 0, ISABELLE_INTF_EN_REG, 6, 0),
+
+ SND_SOC_DAPM_AIF_OUT("INTF1_SDO", NULL, 0, ISABELLE_INTF_EN_REG, 5, 0),
+ SND_SOC_DAPM_AIF_OUT("INTF2_SDO", NULL, 0, ISABELLE_INTF_EN_REG, 4, 0),
+
+ SND_SOC_DAPM_OUT_DRV("ULATX1", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("ULATX2", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("ULVTX1", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("ULVTX2", SND_SOC_NOPM, 0, 0, NULL, 0),
+
+ /* Analog Capture PGAs */
+ SND_SOC_DAPM_PGA("MicAmp1", ISABELLE_AMIC_CFG_REG, 5, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("MicAmp2", ISABELLE_AMIC_CFG_REG, 4, 0, NULL, 0),
+
+ /* Auxiliary FM PGAs */
+ SND_SOC_DAPM_PGA("APGA1", ISABELLE_APGA_CFG_REG, 7, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("APGA2", ISABELLE_APGA_CFG_REG, 6, 0, NULL, 0),
+
+ /* ADCs */
+ SND_SOC_DAPM_ADC("ADC1", "Left Front Capture",
+ ISABELLE_AMIC_CFG_REG, 7, 0),
+ SND_SOC_DAPM_ADC("ADC2", "Right Front Capture",
+ ISABELLE_AMIC_CFG_REG, 6, 0),
+
+ /* Microphone Bias */
+ SND_SOC_DAPM_SUPPLY("Headset Mic Bias", ISABELLE_ABIAS_CFG_REG,
+ 3, 0, NULL, 0),
+ SND_SOC_DAPM_SUPPLY("Main Mic Bias", ISABELLE_ABIAS_CFG_REG,
+ 2, 0, NULL, 0),
+ SND_SOC_DAPM_SUPPLY("Digital Mic1 Bias",
+ ISABELLE_DBIAS_CFG_REG, 3, 0, NULL, 0),
+ SND_SOC_DAPM_SUPPLY("Digital Mic2 Bias",
+ ISABELLE_DBIAS_CFG_REG, 2, 0, NULL, 0),
+
+ /* Mixers */
+ SND_SOC_DAPM_MIXER("Headset Left Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_hs_left_mixer_controls,
+ ARRAY_SIZE(isabelle_hs_left_mixer_controls)),
+ SND_SOC_DAPM_MIXER("Headset Right Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_hs_right_mixer_controls,
+ ARRAY_SIZE(isabelle_hs_right_mixer_controls)),
+ SND_SOC_DAPM_MIXER("Handsfree Left Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_hf_left_mixer_controls,
+ ARRAY_SIZE(isabelle_hf_left_mixer_controls)),
+ SND_SOC_DAPM_MIXER("Handsfree Right Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_hf_right_mixer_controls,
+ ARRAY_SIZE(isabelle_hf_right_mixer_controls)),
+ SND_SOC_DAPM_MIXER("LINEOUT1 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_aux_left_mixer_controls,
+ ARRAY_SIZE(isabelle_aux_left_mixer_controls)),
+ SND_SOC_DAPM_MIXER("LINEOUT2 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_aux_right_mixer_controls,
+ ARRAY_SIZE(isabelle_aux_right_mixer_controls)),
+ SND_SOC_DAPM_MIXER("Earphone Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_ep_mixer_controls,
+ ARRAY_SIZE(isabelle_ep_mixer_controls)),
+
+ SND_SOC_DAPM_MIXER("DPGA1L Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_dpga1_left_mixer_controls,
+ ARRAY_SIZE(isabelle_dpga1_left_mixer_controls)),
+ SND_SOC_DAPM_MIXER("DPGA1R Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_dpga1_right_mixer_controls,
+ ARRAY_SIZE(isabelle_dpga1_right_mixer_controls)),
+ SND_SOC_DAPM_MIXER("DPGA2L Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_dpga2_left_mixer_controls,
+ ARRAY_SIZE(isabelle_dpga2_left_mixer_controls)),
+ SND_SOC_DAPM_MIXER("DPGA2R Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_dpga2_right_mixer_controls,
+ ARRAY_SIZE(isabelle_dpga2_right_mixer_controls)),
+ SND_SOC_DAPM_MIXER("DPGA3L Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_dpga3_left_mixer_controls,
+ ARRAY_SIZE(isabelle_dpga3_left_mixer_controls)),
+ SND_SOC_DAPM_MIXER("DPGA3R Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_dpga3_right_mixer_controls,
+ ARRAY_SIZE(isabelle_dpga3_right_mixer_controls)),
+
+ SND_SOC_DAPM_MIXER("RX1 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_rx1_mixer_controls,
+ ARRAY_SIZE(isabelle_rx1_mixer_controls)),
+ SND_SOC_DAPM_MIXER("RX2 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_rx2_mixer_controls,
+ ARRAY_SIZE(isabelle_rx2_mixer_controls)),
+ SND_SOC_DAPM_MIXER("RX3 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_rx3_mixer_controls,
+ ARRAY_SIZE(isabelle_rx3_mixer_controls)),
+ SND_SOC_DAPM_MIXER("RX4 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_rx4_mixer_controls,
+ ARRAY_SIZE(isabelle_rx4_mixer_controls)),
+ SND_SOC_DAPM_MIXER("RX5 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_rx5_mixer_controls,
+ ARRAY_SIZE(isabelle_rx5_mixer_controls)),
+ SND_SOC_DAPM_MIXER("RX6 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_rx6_mixer_controls,
+ ARRAY_SIZE(isabelle_rx6_mixer_controls)),
+
+ /* DACs */
+ SND_SOC_DAPM_DAC("DAC1L", "Headset Playback", ISABELLE_DAC_CFG_REG,
+ 5, 0),
+ SND_SOC_DAPM_DAC("DAC1R", "Headset Playback", ISABELLE_DAC_CFG_REG,
+ 4, 0),
+ SND_SOC_DAPM_DAC("DAC2L", "Handsfree Playback", ISABELLE_DAC_CFG_REG,
+ 3, 0),
+ SND_SOC_DAPM_DAC("DAC2R", "Handsfree Playback", ISABELLE_DAC_CFG_REG,
+ 2, 0),
+ SND_SOC_DAPM_DAC("DAC3L", "Lineout Playback", ISABELLE_DAC_CFG_REG,
+ 1, 0),
+ SND_SOC_DAPM_DAC("DAC3R", "Lineout Playback", ISABELLE_DAC_CFG_REG,
+ 0, 0),
+
+ /* Analog Playback PGAs */
+ SND_SOC_DAPM_PGA("Sidetone Audio PGA", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("Sidetone Voice PGA", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("HF Left PGA", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("HF Right PGA", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DPGA1L", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DPGA1R", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DPGA2L", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DPGA2R", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DPGA3L", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DPGA3R", SND_SOC_NOPM, 0, 0, NULL, 0),
+
+ /* Analog Playback Mux */
+ SND_SOC_DAPM_MUX("RX1 Playback", ISABELLE_ALU_RX_EN_REG, 5, 0,
+ &rx1_mux_controls),
+ SND_SOC_DAPM_MUX("RX2 Playback", ISABELLE_ALU_RX_EN_REG, 4, 0,
+ &rx2_mux_controls),
+
+ /* TX Select */
+ SND_SOC_DAPM_MUX("ATX Select", ISABELLE_TX_INPUT_CFG_REG,
+ 7, 0, &atx_mux_controls),
+ SND_SOC_DAPM_MUX("VTX Select", ISABELLE_TX_INPUT_CFG_REG,
+ 6, 0, &vtx_mux_controls),
+
+ SND_SOC_DAPM_SWITCH("Earphone Playback", SND_SOC_NOPM, 0, 0,
+ &ep_path_enable_control),
+
+ /* Output Drivers */
+ SND_SOC_DAPM_OUT_DRV("HS Left Driver", ISABELLE_HSDRV_CFG2_REG,
+ 1, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("HS Right Driver", ISABELLE_HSDRV_CFG2_REG,
+ 0, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("LINEOUT1 Left Driver", ISABELLE_LINEAMP_CFG_REG,
+ 1, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("LINEOUT2 Right Driver", ISABELLE_LINEAMP_CFG_REG,
+ 0, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("Earphone Driver", ISABELLE_EARDRV_CFG2_REG,
+ 1, 0, NULL, 0),
+
+ SND_SOC_DAPM_OUT_DRV("HF Left Driver", ISABELLE_HFDRV_CFG_REG,
+ 1, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("HF Right Driver", ISABELLE_HFDRV_CFG_REG,
+ 0, 0, NULL, 0),
+};
+
+static const struct snd_soc_dapm_route isabelle_intercon[] = {
+ /* Interface mapping */
+ { "DL1", "DL12 Playback Switch", "INTF1_SDI" },
+ { "DL2", "DL12 Playback Switch", "INTF1_SDI" },
+ { "DL3", "DL34 Playback Switch", "INTF1_SDI" },
+ { "DL4", "DL34 Playback Switch", "INTF1_SDI" },
+ { "DL5", "DL56 Playback Switch", "INTF1_SDI" },
+ { "DL6", "DL56 Playback Switch", "INTF1_SDI" },
+
+ { "DL1", "DL12 Playback Switch", "INTF2_SDI" },
+ { "DL2", "DL12 Playback Switch", "INTF2_SDI" },
+ { "DL3", "DL34 Playback Switch", "INTF2_SDI" },
+ { "DL4", "DL34 Playback Switch", "INTF2_SDI" },
+ { "DL5", "DL56 Playback Switch", "INTF2_SDI" },
+ { "DL6", "DL56 Playback Switch", "INTF2_SDI" },
+
+ /* Input side mapping */
+ { "Sidetone Audio PGA", NULL, "Sidetone Audio Playback" },
+ { "Sidetone Voice PGA", NULL, "Sidetone Voice Playback" },
+
+ { "RX1 Mixer", "ST1 Playback Switch", "Sidetone Audio PGA" },
+
+ { "RX1 Mixer", "ST1 Playback Switch", "Sidetone Voice PGA" },
+ { "RX1 Mixer", "DL1 Playback Switch", "DL1" },
+
+ { "RX2 Mixer", "ST2 Playback Switch", "Sidetone Audio PGA" },
+
+ { "RX2 Mixer", "ST2 Playback Switch", "Sidetone Voice PGA" },
+ { "RX2 Mixer", "DL2 Playback Switch", "DL2" },
+
+ { "RX3 Mixer", "ST1 Playback Switch", "Sidetone Voice PGA" },
+ { "RX3 Mixer", "DL3 Playback Switch", "DL3" },
+
+ { "RX4 Mixer", "ST2 Playback Switch", "Sidetone Voice PGA" },
+ { "RX4 Mixer", "DL4 Playback Switch", "DL4" },
+
+ { "RX5 Mixer", "ST1 Playback Switch", "Sidetone Voice PGA" },
+ { "RX5 Mixer", "DL5 Playback Switch", "DL5" },
+
+ { "RX6 Mixer", "ST2 Playback Switch", "Sidetone Voice PGA" },
+ { "RX6 Mixer", "DL6 Playback Switch", "DL6" },
+
+ /* Capture path */
+ { "Analog Left Capture Route", "Headset Mic", "HSMIC" },
+ { "Analog Left Capture Route", "Main Mic", "MAINMIC" },
+ { "Analog Left Capture Route", "Aux/FM Left", "LINEIN1" },
+
+ { "Analog Right Capture Route", "Sub Mic", "SUBMIC" },
+ { "Analog Right Capture Route", "Aux/FM Right", "LINEIN2" },
+
+ { "MicAmp1", NULL, "Analog Left Capture Route" },
+ { "MicAmp2", NULL, "Analog Right Capture Route" },
+
+ { "ADC1", NULL, "MicAmp1" },
+ { "ADC2", NULL, "MicAmp2" },
+
+ { "ATX Select", "AMIC1", "ADC1" },
+ { "ATX Select", "DMIC", "DMICDAT" },
+ { "ATX Select", "AMIC2", "ADC2" },
+
+ { "VTX Select", "AMIC1", "ADC1" },
+ { "VTX Select", "DMIC", "DMICDAT" },
+ { "VTX Select", "AMIC2", "ADC2" },
+
+ { "ULATX1", "ATX1 Filter Enable Switch", "ATX Select" },
+ { "ULATX1", "ATX1 Filter Bypass Switch", "ATX Select" },
+ { "ULATX2", "ATX2 Filter Enable Switch", "ATX Select" },
+ { "ULATX2", "ATX2 Filter Bypass Switch", "ATX Select" },
+
+ { "ULVTX1", "VTX1 Filter Enable Switch", "VTX Select" },
+ { "ULVTX1", "VTX1 Filter Bypass Switch", "VTX Select" },
+ { "ULVTX2", "VTX2 Filter Enable Switch", "VTX Select" },
+ { "ULVTX2", "VTX2 Filter Bypass Switch", "VTX Select" },
+
+ { "INTF1_SDO", "ULATX12 Capture Switch", "ULATX1" },
+ { "INTF1_SDO", "ULATX12 Capture Switch", "ULATX2" },
+ { "INTF2_SDO", "ULATX12 Capture Switch", "ULATX1" },
+ { "INTF2_SDO", "ULATX12 Capture Switch", "ULATX2" },
+
+ { "INTF1_SDO", NULL, "ULVTX1" },
+ { "INTF1_SDO", NULL, "ULVTX2" },
+ { "INTF2_SDO", NULL, "ULVTX1" },
+ { "INTF2_SDO", NULL, "ULVTX2" },
+
+ /* AFM Path */
+ { "APGA1", NULL, "LINEIN1" },
+ { "APGA2", NULL, "LINEIN2" },
+
+ { "RX1 Playback", "VRX1 Filter Bypass Switch", "RX1 Mixer" },
+ { "RX1 Playback", "ARX1 Filter Bypass Switch", "RX1 Mixer" },
+ { "RX1 Playback", "RX1 Filter Enable Switch", "RX1 Mixer" },
+
+ { "RX2 Playback", "VRX2 Filter Bypass Switch", "RX2 Mixer" },
+ { "RX2 Playback", "ARX2 Filter Bypass Switch", "RX2 Mixer" },
+ { "RX2 Playback", "RX2 Filter Enable Switch", "RX2 Mixer" },
+
+ { "RX3 Playback", "ARX3 Filter Bypass Switch", "RX3 Mixer" },
+ { "RX3 Playback", "RX3 Filter Enable Switch", "RX3 Mixer" },
+
+ { "RX4 Playback", "ARX4 Filter Bypass Switch", "RX4 Mixer" },
+ { "RX4 Playback", "RX4 Filter Enable Switch", "RX4 Mixer" },
+
+ { "RX5 Playback", "ARX5 Filter Bypass Switch", "RX5 Mixer" },
+ { "RX5 Playback", "RX5 Filter Enable Switch", "RX5 Mixer" },
+
+ { "RX6 Playback", "ARX6 Filter Bypass Switch", "RX6 Mixer" },
+ { "RX6 Playback", "RX6 Filter Enable Switch", "RX6 Mixer" },
+
+ { "DPGA1L Mixer", "RX1 Playback Switch", "RX1 Playback" },
+ { "DPGA1L Mixer", "RX3 Playback Switch", "RX3 Playback" },
+ { "DPGA1L Mixer", "RX5 Playback Switch", "RX5 Playback" },
+
+ { "DPGA1R Mixer", "RX2 Playback Switch", "RX2 Playback" },
+ { "DPGA1R Mixer", "RX4 Playback Switch", "RX4 Playback" },
+ { "DPGA1R Mixer", "RX6 Playback Switch", "RX6 Playback" },
+
+ { "DPGA1L", NULL, "DPGA1L Mixer" },
+ { "DPGA1R", NULL, "DPGA1R Mixer" },
+
+ { "DAC1L", NULL, "DPGA1L" },
+ { "DAC1R", NULL, "DPGA1R" },
+
+ { "DPGA2L Mixer", "RX1 Playback Switch", "RX1 Playback" },
+ { "DPGA2L Mixer", "RX2 Playback Switch", "RX2 Playback" },
+ { "DPGA2L Mixer", "RX3 Playback Switch", "RX3 Playback" },
+ { "DPGA2L Mixer", "RX4 Playback Switch", "RX4 Playback" },
+ { "DPGA2L Mixer", "RX5 Playback Switch", "RX5 Playback" },
+ { "DPGA2L Mixer", "RX6 Playback Switch", "RX6 Playback" },
+
+ { "DPGA2R Mixer", "RX2 Playback Switch", "RX2 Playback" },
+ { "DPGA2R Mixer", "RX4 Playback Switch", "RX4 Playback" },
+ { "DPGA2R Mixer", "RX6 Playback Switch", "RX6 Playback" },
+
+ { "DPGA2L", NULL, "DPGA2L Mixer" },
+ { "DPGA2R", NULL, "DPGA2R Mixer" },
+
+ { "DAC2L", NULL, "DPGA2L" },
+ { "DAC2R", NULL, "DPGA2R" },
+
+ { "DPGA3L Mixer", "RX1 Playback Switch", "RX1 Playback" },
+ { "DPGA3L Mixer", "RX3 Playback Switch", "RX3 Playback" },
+ { "DPGA3L Mixer", "RX5 Playback Switch", "RX5 Playback" },
+
+ { "DPGA3R Mixer", "RX2 Playback Switch", "RX2 Playback" },
+ { "DPGA3R Mixer", "RX4 Playback Switch", "RX4 Playback" },
+ { "DPGA3R Mixer", "RX6 Playback Switch", "RX6 Playback" },
+
+ { "DPGA3L", NULL, "DPGA3L Mixer" },
+ { "DPGA3R", NULL, "DPGA3R Mixer" },
+
+ { "DAC3L", NULL, "DPGA3L" },
+ { "DAC3R", NULL, "DPGA3R" },
+
+ { "Headset Left Mixer", "DAC1L Playback Switch", "DAC1L" },
+ { "Headset Left Mixer", "APGA1 Playback Switch", "APGA1" },
+
+ { "Headset Right Mixer", "DAC1R Playback Switch", "DAC1R" },
+ { "Headset Right Mixer", "APGA2 Playback Switch", "APGA2" },
+
+ { "HS Left Driver", NULL, "Headset Left Mixer" },
+ { "HS Right Driver", NULL, "Headset Right Mixer" },
+
+ { "HSOL", NULL, "HS Left Driver" },
+ { "HSOR", NULL, "HS Right Driver" },
+
+ /* Earphone playback path */
+ { "Earphone Mixer", "DAC2L Playback Switch", "DAC2L" },
+ { "Earphone Mixer", "APGA1 Playback Switch", "APGA1" },
+
+ { "Earphone Playback", "Switch", "Earphone Mixer" },
+ { "Earphone Driver", NULL, "Earphone Playback" },
+ { "EP", NULL, "Earphone Driver" },
+
+ { "Handsfree Left Mixer", "DAC2L Playback Switch", "DAC2L" },
+ { "Handsfree Left Mixer", "APGA1 Playback Switch", "APGA1" },
+
+ { "Handsfree Right Mixer", "DAC2R Playback Switch", "DAC2R" },
+ { "Handsfree Right Mixer", "APGA2 Playback Switch", "APGA2" },
+
+ { "HF Left PGA", NULL, "Handsfree Left Mixer" },
+ { "HF Right PGA", NULL, "Handsfree Right Mixer" },
+
+ { "HF Left Driver", NULL, "HF Left PGA" },
+ { "HF Right Driver", NULL, "HF Right PGA" },
+
+ { "HFL", NULL, "HF Left Driver" },
+ { "HFR", NULL, "HF Right Driver" },
+
+ { "LINEOUT1 Mixer", "DAC3L Playback Switch", "DAC3L" },
+ { "LINEOUT1 Mixer", "APGA1 Playback Switch", "APGA1" },
+
+ { "LINEOUT2 Mixer", "DAC3R Playback Switch", "DAC3R" },
+ { "LINEOUT2 Mixer", "APGA2 Playback Switch", "APGA2" },
+
+ { "LINEOUT1 Driver", NULL, "LINEOUT1 Mixer" },
+ { "LINEOUT2 Driver", NULL, "LINEOUT2 Mixer" },
+
+ { "LINEOUT1", NULL, "LINEOUT1 Driver" },
+ { "LINEOUT2", NULL, "LINEOUT2 Driver" },
+};
+
+static int isabelle_hs_mute(struct snd_soc_dai *dai, int mute)
+{
+ snd_soc_update_bits(dai->codec, ISABELLE_DAC1_SOFTRAMP_REG,
+ BIT(4), (mute ? BIT(4) : 0));
+
+ return 0;
+}
+
+static int isabelle_hf_mute(struct snd_soc_dai *dai, int mute)
+{
+ snd_soc_update_bits(dai->codec, ISABELLE_DAC2_SOFTRAMP_REG,
+ BIT(4), (mute ? BIT(4) : 0));
+
+ return 0;
+}
+
+static int isabelle_line_mute(struct snd_soc_dai *dai, int mute)
+{
+ snd_soc_update_bits(dai->codec, ISABELLE_DAC3_SOFTRAMP_REG,
+ BIT(4), (mute ? BIT(4) : 0));
+
+ return 0;
+}
+
+static int isabelle_set_bias_level(struct snd_soc_codec *codec,
+ enum snd_soc_bias_level level)
+{
+ switch (level) {
+ case SND_SOC_BIAS_ON:
+ break;
+ case SND_SOC_BIAS_PREPARE:
+ break;
+
+ case SND_SOC_BIAS_STANDBY:
+ snd_soc_update_bits(codec, ISABELLE_PWR_EN_REG,
+ ISABELLE_CHIP_EN, BIT(0));
+ break;
+
+ case SND_SOC_BIAS_OFF:
+ snd_soc_update_bits(codec, ISABELLE_PWR_EN_REG,
+ ISABELLE_CHIP_EN, 0);
+ break;
+ }
+
+ codec->dapm.bias_level = level;
+
+ return 0;
+}
+
+static int isabelle_hw_params(struct snd_pcm_substream *substream,
+ struct snd_pcm_hw_params *params,
+ struct snd_soc_dai *dai)
+{
+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
+ struct snd_soc_codec *codec = rtd->codec;
+ u16 aif = 0;
+ unsigned int fs_val = 0;
+
+ switch (params_rate(params)) {
+ case 8000:
+ fs_val = ISABELLE_FS_RATE_8;
+ break;
+ case 11025:
+ fs_val = ISABELLE_FS_RATE_11;
+ break;
+ case 12000:
+ fs_val = ISABELLE_FS_RATE_12;
+ break;
+ case 16000:
+ fs_val = ISABELLE_FS_RATE_16;
+ break;
+ case 22050:
+ fs_val = ISABELLE_FS_RATE_22;
+ break;
+ case 24000:
+ fs_val = ISABELLE_FS_RATE_24;
+ break;
+ case 32000:
+ fs_val = ISABELLE_FS_RATE_32;
+ break;
+ case 44100:
+ fs_val = ISABELLE_FS_RATE_44;
+ break;
+ case 48000:
+ fs_val = ISABELLE_FS_RATE_48;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ snd_soc_update_bits(codec, ISABELLE_FS_RATE_CFG_REG,
+ ISABELLE_FS_RATE_MASK, fs_val);
+
+ /* bit size */
+ switch (params_format(params)) {
+ case SNDRV_PCM_FORMAT_S20_3LE:
+ aif |= ISABELLE_AIF_LENGTH_20;
+ break;
+ case SNDRV_PCM_FORMAT_S32_LE:
+ aif |= ISABELLE_AIF_LENGTH_32;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ snd_soc_update_bits(codec, ISABELLE_INTF_CFG_REG,
+ ISABELLE_AIF_LENGTH_MASK, aif);
+
+ return 0;
+}
+
+static int isabelle_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt)
+{
+ struct snd_soc_codec *codec = codec_dai->codec;
+ unsigned int aif_val = 0;
+
+ switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
+ case SND_SOC_DAIFMT_CBS_CFS:
+ aif_val &= ~ISABELLE_AIF_MS;
+ break;
+ case SND_SOC_DAIFMT_CBM_CFM:
+ aif_val |= ISABELLE_AIF_MS;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
+ case SND_SOC_DAIFMT_I2S:
+ aif_val |= ISABELLE_I2S_MODE;
+ break;
+ case SND_SOC_DAIFMT_LEFT_J:
+ aif_val |= ISABELLE_LEFT_J_MODE;
+ break;
+ case SND_SOC_DAIFMT_PDM:
+ aif_val |= ISABELLE_PDM_MODE;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ snd_soc_update_bits(codec, ISABELLE_INTF_CFG_REG,
+ (ISABELLE_AIF_MS | ISABELLE_AIF_FMT_MASK), aif_val);
+
+ return 0;
+}
+
+/* Rates supported by Isabelle driver */
+#define ISABELLE_RATES SNDRV_PCM_RATE_8000_48000
+
+/* Formates supported by Isabelle driver. */
+#define ISABELLE_FORMATS (SNDRV_PCM_FMTBIT_S20_3LE |\
+ SNDRV_PCM_FMTBIT_S32_LE)
+
+static struct snd_soc_dai_ops isabelle_hs_dai_ops = {
+ .hw_params = isabelle_hw_params,
+ .set_fmt = isabelle_set_dai_fmt,
+ .digital_mute = isabelle_hs_mute,
+};
+
+static struct snd_soc_dai_ops isabelle_hf_dai_ops = {
+ .hw_params = isabelle_hw_params,
+ .set_fmt = isabelle_set_dai_fmt,
+ .digital_mute = isabelle_hf_mute,
+};
+
+static struct snd_soc_dai_ops isabelle_line_dai_ops = {
+ .hw_params = isabelle_hw_params,
+ .set_fmt = isabelle_set_dai_fmt,
+ .digital_mute = isabelle_line_mute,
+};
+
+static struct snd_soc_dai_ops isabelle_ul_dai_ops = {
+ .hw_params = isabelle_hw_params,
+ .set_fmt = isabelle_set_dai_fmt,
+};
+
+/* ISABELLE dai structure */
+struct snd_soc_dai_driver isabelle_dai[] = {
+ {
+ .name = "isabelle-dl1",
+ .playback = {
+ .stream_name = "Headset Playback",
+ .channels_min = 1,
+ .channels_max = 2,
+ .rates = ISABELLE_RATES,
+ .formats = ISABELLE_FORMATS,
+ },
+ .ops = &isabelle_hs_dai_ops,
+ },
+ {
+ .name = "isabelle-dl2",
+ .playback = {
+ .stream_name = "Handsfree Playback",
+ .channels_min = 1,
+ .channels_max = 2,
+ .rates = ISABELLE_RATES,
+ .formats = ISABELLE_FORMATS,
+ },
+ .ops = &isabelle_hf_dai_ops,
+ },
+ {
+ .name = "isabelle-lineout",
+ .playback = {
+ .stream_name = "Lineout Playback",
+ .channels_min = 1,
+ .channels_max = 2,
+ .rates = ISABELLE_RATES,
+ .formats = ISABELLE_FORMATS,
+ },
+ .ops = &isabelle_line_dai_ops,
+ },
+ {
+ .name = "isabelle-ul",
+ .capture = {
+ .stream_name = "Capture",
+ .channels_min = 1,
+ .channels_max = 2,
+ .rates = ISABELLE_RATES,
+ .formats = ISABELLE_FORMATS,
+ },
+ .ops = &isabelle_ul_dai_ops,
+ },
+};
+
+static int isabelle_probe(struct snd_soc_codec *codec)
+{
+ int ret = 0;
+
+ codec->control_data = dev_get_regmap(codec->dev, NULL);
+
+ ret = snd_soc_codec_set_cache_io(codec, 8, 8, SND_SOC_REGMAP);
+ if (ret < 0) {
+ dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
+ return ret;
+ }
+
+ return 0;
+}
+
+static struct snd_soc_codec_driver soc_codec_dev_isabelle = {
+ .probe = isabelle_probe,
+ .set_bias_level = isabelle_set_bias_level,
+ .controls = isabelle_snd_controls,
+ .num_controls = ARRAY_SIZE(isabelle_snd_controls),
+ .dapm_widgets = isabelle_dapm_widgets,
+ .num_dapm_widgets = ARRAY_SIZE(isabelle_dapm_widgets),
+ .dapm_routes = isabelle_intercon,
+ .num_dapm_routes = ARRAY_SIZE(isabelle_intercon),
+ .idle_bias_off = true,
+};
+
+static const struct regmap_config isabelle_regmap_config = {
+ .reg_bits = 8,
+ .val_bits = 8,
+
+ .max_register = ISABELLE_MAX_REGISTER,
+ .reg_defaults = isabelle_reg_defs,
+ .num_reg_defaults = ARRAY_SIZE(isabelle_reg_defs),
+ .cache_type = REGCACHE_RBTREE,
+};
+
+static int __devinit isabelle_i2c_probe(struct i2c_client *i2c,
+ const struct i2c_device_id *id)
+{
+ struct regmap *isabelle_regmap;
+ int ret = 0;
+
+ i2c_set_clientdata(i2c, isabelle_regmap);
+
+ isabelle_regmap = devm_regmap_init_i2c(i2c, &isabelle_regmap_config);
+ if (IS_ERR(isabelle_regmap)) {
+ ret = PTR_ERR(isabelle_regmap);
+ dev_err(&i2c->dev, "Failed to allocate register map: %d\n",
+ ret);
+ return ret;
+ }
+
+ ret = snd_soc_register_codec(&i2c->dev,
+ &soc_codec_dev_isabelle, isabelle_dai,
+ ARRAY_SIZE(isabelle_dai));
+ if (ret < 0) {
+ dev_err(&i2c->dev, "Failed to register codec: %d\n", ret);
+ regmap_exit(dev_get_regmap(&i2c->dev, NULL));
+ return ret;
+ }
+
+ return ret;
+}
+
+static int __devexit isabelle_i2c_remove(struct i2c_client *client)
+{
+ snd_soc_unregister_codec(&client->dev);
+ regmap_exit(dev_get_regmap(&client->dev, NULL));
+ return 0;
+}
+
+static const struct i2c_device_id isabelle_i2c_id[] = {
+ { "isabelle", 0 },
+ { }
+};
+MODULE_DEVICE_TABLE(i2c, isabelle_i2c_id);
+
+static struct i2c_driver isabelle_i2c_driver = {
+ .driver = {
+ .name = "isabelle",
+ .owner = THIS_MODULE,
+ },
+ .probe = isabelle_i2c_probe,
+ .remove = __devexit_p(isabelle_i2c_remove),
+ .id_table = isabelle_i2c_id,
+};
+
+module_i2c_driver(isabelle_i2c_driver);
+
+MODULE_DESCRIPTION("ASoC ISABELLE driver");
+MODULE_AUTHOR("Vishwas A Deshpande <vishwas.a.deshpande(a)ti.com>");
+MODULE_AUTHOR("M R Swami Reddy <MR.Swami.Reddy(a)ti.com>");
+MODULE_LICENSE("GPL v2");
diff --git a/sound/soc/codecs/isabelle.h b/sound/soc/codecs/isabelle.h
new file mode 100644
index 0000000..96d839a
--- /dev/null
+++ b/sound/soc/codecs/isabelle.h
@@ -0,0 +1,143 @@
+/*
+ * isabelle.h - Low power high fidelity audio codec driver header file
+ *
+ * Copyright (c) 2012 Texas Instruments, Inc
+ *
+ * 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; version 2 of the License.
+ *
+ */
+
+#ifndef _ISABELLE_H
+#define _ISABELLE_H
+
+#include <linux/bitops.h>
+
+/* ISABELLE REGISTERS */
+
+#define ISABELLE_PWR_CFG_REG 0x01
+#define ISABELLE_PWR_EN_REG 0x02
+#define ISABELLE_PS_EN1_REG 0x03
+#define ISABELLE_INT1_STATUS_REG 0x04
+#define ISABELLE_INT1_MASK_REG 0x05
+#define ISABELLE_INT2_STATUS_REG 0x06
+#define ISABELLE_INT2_MASK_REG 0x07
+#define ISABELLE_HKCTL1_REG 0x08
+#define ISABELLE_HKCTL2_REG 0x09
+#define ISABELLE_HKCTL3_REG 0x0A
+#define ISABELLE_ACCDET_STATUS_REG 0x0B
+#define ISABELLE_BUTTON_ID_REG 0x0C
+#define ISABELLE_PLL_CFG_REG 0x10
+#define ISABELLE_PLL_EN_REG 0x11
+#define ISABELLE_FS_RATE_CFG_REG 0x12
+#define ISABELLE_INTF_CFG_REG 0x13
+#define ISABELLE_INTF_EN_REG 0x14
+#define ISABELLE_ULATX12_INTF_CFG_REG 0x15
+#define ISABELLE_DL12_INTF_CFG_REG 0x16
+#define ISABELLE_DL34_INTF_CFG_REG 0x17
+#define ISABELLE_DL56_INTF_CFG_REG 0x18
+#define ISABELLE_ATX_STPGA1_CFG_REG 0x19
+#define ISABELLE_ATX_STPGA2_CFG_REG 0x1A
+#define ISABELLE_VTX_STPGA1_CFG_REG 0x1B
+#define ISABELLE_VTX2_STPGA2_CFG_REG 0x1C
+#define ISABELLE_ATX1_DPGA_REG 0x1D
+#define ISABELLE_ATX2_DPGA_REG 0x1E
+#define ISABELLE_VTX1_DPGA_REG 0x1F
+#define ISABELLE_VTX2_DPGA_REG 0x20
+#define ISABELLE_TX_INPUT_CFG_REG 0x21
+#define ISABELLE_RX_INPUT_CFG_REG 0x22
+#define ISABELLE_RX_INPUT_CFG2_REG 0x23
+#define ISABELLE_VOICE_HPF_CFG_REG 0x24
+#define ISABELLE_AUDIO_HPF_CFG_REG 0x25
+#define ISABELLE_RX1_DPGA_REG 0x26
+#define ISABELLE_RX2_DPGA_REG 0x27
+#define ISABELLE_RX3_DPGA_REG 0x28
+#define ISABELLE_RX4_DPGA_REG 0x29
+#define ISABELLE_RX5_DPGA_REG 0x2A
+#define ISABELLE_RX6_DPGA_REG 0x2B
+#define ISABELLE_ALU_TX_EN_REG 0x2C
+#define ISABELLE_ALU_RX_EN_REG 0x2D
+#define ISABELLE_IIR_RESYNC_REG 0x2E
+#define ISABELLE_ABIAS_CFG_REG 0x30
+#define ISABELLE_DBIAS_CFG_REG 0x31
+#define ISABELLE_MIC1_GAIN_REG 0x32
+#define ISABELLE_MIC2_GAIN_REG 0x33
+#define ISABELLE_AMIC_CFG_REG 0x34
+#define ISABELLE_DMIC_CFG_REG 0x35
+#define ISABELLE_APGA_GAIN_REG 0x36
+#define ISABELLE_APGA_CFG_REG 0x37
+#define ISABELLE_TX_GAIN_DLY_REG 0x38
+#define ISABELLE_RX_GAIN_DLY_REG 0x39
+#define ISABELLE_RX_PWR_CTRL_REG 0x3A
+#define ISABELLE_DPGA1LR_IN_SEL_REG 0x3B
+#define ISABELLE_DPGA1L_GAIN_REG 0x3C
+#define ISABELLE_DPGA1R_GAIN_REG 0x3D
+#define ISABELLE_DPGA2L_IN_SEL_REG 0x3E
+#define ISABELLE_DPGA2R_IN_SEL_REG 0x3F
+#define ISABELLE_DPGA2L_GAIN_REG 0x40
+#define ISABELLE_DPGA2R_GAIN_REG 0x41
+#define ISABELLE_DPGA3LR_IN_SEL_REG 0x42
+#define ISABELLE_DPGA3L_GAIN_REG 0x43
+#define ISABELLE_DPGA3R_GAIN_REG 0x44
+#define ISABELLE_DAC1_SOFTRAMP_REG 0x45
+#define ISABELLE_DAC2_SOFTRAMP_REG 0x46
+#define ISABELLE_DAC3_SOFTRAMP_REG 0x47
+#define ISABELLE_DAC_CFG_REG 0x48
+#define ISABELLE_EARDRV_CFG1_REG 0x49
+#define ISABELLE_EARDRV_CFG2_REG 0x4A
+#define ISABELLE_HSDRV_GAIN_REG 0x4B
+#define ISABELLE_HSDRV_CFG1_REG 0x4C
+#define ISABELLE_HSDRV_CFG2_REG 0x4D
+#define ISABELLE_HS_NG_CFG1_REG 0x4E
+#define ISABELLE_HS_NG_CFG2_REG 0x4F
+#define ISABELLE_LINEAMP_GAIN_REG 0x50
+#define ISABELLE_LINEAMP_CFG_REG 0x51
+#define ISABELLE_HFL_VOL_CTRL_REG 0x52
+#define ISABELLE_HFL_SFTVOL_CTRL_REG 0x53
+#define ISABELLE_HFL_LIM_CTRL_1_REG 0x54
+#define ISABELLE_HFL_LIM_CTRL_2_REG 0x55
+#define ISABELLE_HFR_VOL_CTRL_REG 0x56
+#define ISABELLE_HFR_SFTVOL_CTRL_REG 0x57
+#define ISABELLE_HFR_LIM_CTRL_1_REG 0x58
+#define ISABELLE_HFR_LIM_CTRL_2_REG 0x59
+#define ISABELLE_HF_MODE_REG 0x5A
+#define ISABELLE_HFLPGA_CFG_REG 0x5B
+#define ISABELLE_HFRPGA_CFG_REG 0x5C
+#define ISABELLE_HFDRV_CFG_REG 0x5D
+#define ISABELLE_PDMOUT_CFG1_REG 0x5E
+#define ISABELLE_PDMOUT_CFG2_REG 0x5F
+#define ISABELLE_PDMOUT_L_WM_REG 0x60
+#define ISABELLE_PDMOUT_R_WM_REG 0x61
+#define ISABELLE_HF_NG_CFG1_REG 0x62
+#define ISABELLE_HF_NG_CFG2_REG 0x63
+
+/* ISABELLE_PWR_EN_REG (0x02h) */
+#define ISABELLE_CHIP_EN BIT(0)
+
+/* ISABELLE DAI FORMATS */
+#define ISABELLE_AIF_FMT_MASK 0x70
+#define ISABELLE_I2S_MODE 0x0
+#define ISABELLE_LEFT_J_MODE 0x1
+#define ISABELLE_PDM_MODE 0x2
+
+#define ISABELLE_AIF_LENGTH_MASK 0x30
+#define ISABELLE_AIF_LENGTH_20 0x00
+#define ISABELLE_AIF_LENGTH_32 0x10
+
+#define ISABELLE_AIF_MS 0x80
+
+#define ISABELLE_FS_RATE_MASK 0xF
+#define ISABELLE_FS_RATE_8 0x0
+#define ISABELLE_FS_RATE_11 0x1
+#define ISABELLE_FS_RATE_12 0x2
+#define ISABELLE_FS_RATE_16 0x4
+#define ISABELLE_FS_RATE_22 0x5
+#define ISABELLE_FS_RATE_24 0x6
+#define ISABELLE_FS_RATE_32 0x8
+#define ISABELLE_FS_RATE_44 0x9
+#define ISABELLE_FS_RATE_48 0xA
+
+#define ISABELLE_MAX_REGISTER 0xFF
+
+#endif
3
2
>
>> what is the definition of "Mono Output" in pulseaudio ?
>>
>> My three other sound cards does support mono playback and mono capture
>>
>> The system setting/sound in gnome session allow me to select "mono
>> duplex" but when it does not allow me to select "mono output + mono
>> input" in unity session.
>
>
> That sounds like the known bug I was working on yesterday.
>
Although those three sound cards (au8830, emu10k1 and ymfpci) support
mono playback and capture.
None of them use the AC97 "Master Mono" pin for output.
gnome speaker-test show only one speaker
"Master Mono Playback Volume" was also removed from emu10k1 driver but
still exist in au8830 and ymfpci driver
There is no "mono" volume control for capture volume.
There are "LFE on mono" in unity settings/sound in ubuntu 12.04 for
au8830 and ymfpci which still have "Master Mono Playback Volume" but
"LFE on mono" is not exist in gnome settings/sound Fedora 17 Live CD
Also My Creative 4.1 speaker set only have green and black jacks
(Surround40) supported by emu10k1 and au8830
Can anyone explain "Analog Mono Output" and "surround41" in pulseaudio ?
1
0
Hello everyone,
I compiled today the Kernel 3.4.0-rc7 from the git and used this git
to add the FTU support:
git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git
Unfortunately, all my USB sound card simply stopped working.
The FTU doesn't produce any sound, nor through Alsa or Jack.
I tried playing a simple song through mplayer and nothing. I double
checked the mixer, all volumes are set as they should.
I checked dmesg, no error that could help.
I'm running Ubuntu, and the only thing I can hear is the welcoming
sound of ubuntu being cut-off almost instantly.
I tested my Edirol UA-25Ex, it is working all ok.
Let me know if there is any other info I could provide that would help,
Thanks in advance,
Aurélien
4
14

[alsa-devel] [PATCH] alsa-lib/tlv: fix handling of raw value ranges
by Benoît Thébaudeau 02 Jun '12
by Benoît Thébaudeau 02 Jun '12
02 Jun '12
In case of a TLV dB range with all items having raw value ranges strictly within
the main raw value range reported by the driver, snd_tlv_convert_from_dB()
returned one of the main raw range boundaries, which was outside all dB range
items.
E.g.:
static const unsigned int bd3753x_vol_fader_gain_att_tlv[] = {
TLV_DB_RANGE_HEAD(2),
0, 0, TLV_DB_SCALE_ITEM(TLV_DB_GAIN_MUTE, 0, 1),
48, 142, TLV_DB_SCALE_ITEM(-7900, 100, 0),
};
SOC_SINGLE_TLV("Main Volume",
BD3753X_VOL_GAIN,
0, 255, 1, bd3753x_vol_fader_gain_att_tlv),
snd_tlv_convert_from_dB(tlv, 0, 255, 1500, &value, 1) returned 255 instead of
the expected 142.
or:
static const unsigned int max9850_tlv[] = {
TLV_DB_RANGE_HEAD(4),
0x18, 0x1f, TLV_DB_SCALE_ITEM(-7450, 400, 0),
0x20, 0x33, TLV_DB_SCALE_ITEM(-4150, 200, 0),
0x34, 0x37, TLV_DB_SCALE_ITEM(-150, 100, 0),
0x38, 0x3f, TLV_DB_SCALE_ITEM(250, 50, 0),
};
SOC_SINGLE_TLV("Headphone Volume", MAX9850_VOLUME, 0, 0x3f, 1, max9850_tlv),
snd_tlv_convert_from_dB(tlv, 0, 0x3f, -7450, &value, 0) returned 0 instead of
the expected 0x18.
Signed-off-by: Benoît Thébaudeau <benoit.thebaudeau(a)advansee.com>
--- alsa-lib/src/control/tlv.c
+++ alsa-lib/src/control/tlv.c
@@ -291,41 +291,37 @@ int snd_tlv_convert_from_dB(unsigned int
{
switch (tlv[0]) {
case SND_CTL_TLVT_DB_RANGE: {
- long dbmin, dbmax, prev_rangemax;
+ long dbmin, dbmax, prev_submax;
unsigned int pos, len;
len = int_index(tlv[1]);
- if (len > MAX_TLV_RANGE_SIZE)
- return -EINVAL;
- if (snd_tlv_get_dB_range(tlv, rangemin, rangemax,
- &dbmin, &dbmax))
+ if (len < 6 || len > MAX_TLV_RANGE_SIZE)
return -EINVAL;
- if (db_gain <= dbmin) {
- *value = rangemin;
- return 0;
- } else if (db_gain >= dbmax) {
- *value = rangemax;
- return 0;
- }
pos = 2;
- prev_rangemax = 0;
- while (pos + 4 <= len) {
- rangemin = (int)tlv[pos];
- rangemax = (int)tlv[pos + 1];
+ prev_submax = 0;
+ do {
+ long submin, submax;
+ submin = (int)tlv[pos];
+ submax = (int)tlv[pos + 1];
+ if (rangemax < submax)
+ submax = rangemax;
if (!snd_tlv_get_dB_range(tlv + pos + 2,
- rangemin, rangemax,
+ submin, submax,
&dbmin, &dbmax) &&
db_gain >= dbmin && db_gain <= dbmax)
return snd_tlv_convert_from_dB(tlv + pos + 2,
- rangemin, rangemax,
+ submin, submax,
db_gain, value, xdir);
else if (db_gain < dbmin) {
- *value = xdir ? rangemin : prev_rangemax;
+ *value = xdir || pos == 2 ? submin : prev_submax;
return 0;
}
- prev_rangemax = rangemax;
+ prev_submax = submax;
+ if (rangemax == submax)
+ break;
pos += int_index(tlv[pos + 3]) + 4;
- }
- return -EINVAL;
+ } while (pos + 4 <= len);
+ *value = prev_submax;
+ return 0;
}
case SND_CTL_TLVT_DB_SCALE: {
int min, step, max;
4
24

[alsa-devel] [PATCH] ASoC: omap-mcbsp: Add pm_runtime_get/put functions call for McBSP.
by Sebastien Guiriec 01 Jun '12
by Sebastien Guiriec 01 Jun '12
01 Jun '12
pm_runtime_get_sync() and put_sync() are not called by McBSP driver.
This is introducing a problem with PM and Audio Backend due to
missing get/put for McBSP IP.
Signed-off-by: Sebastien Guiriec <s-guiriec(a)ti.com>
---
sound/soc/omap/omap-mcbsp.c | 4 ++++
1 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/sound/soc/omap/omap-mcbsp.c b/sound/soc/omap/omap-mcbsp.c
index 1046083..007d239 100644
--- a/sound/soc/omap/omap-mcbsp.c
+++ b/sound/soc/omap/omap-mcbsp.c
@@ -117,6 +117,8 @@ static int omap_mcbsp_dai_startup(struct snd_pcm_substream *substream,
struct omap_mcbsp *mcbsp = snd_soc_dai_get_drvdata(cpu_dai);
int err = 0;
+ pm_runtime_get_sync(mcbsp->dev);
+
if (!cpu_dai->active)
err = omap_mcbsp_request(mcbsp);
@@ -165,6 +167,8 @@ static void omap_mcbsp_dai_shutdown(struct snd_pcm_substream *substream,
omap_mcbsp_free(mcbsp);
mcbsp->configured = 0;
}
+
+ pm_runtime_put_sync(mcbsp->dev);
}
static int omap_mcbsp_dai_trigger(struct snd_pcm_substream *substream, int cmd,
--
1.7.4.1
2
1

[alsa-devel] [PATCH] ASoC: dapm: Fix connected widget capture path query.
by Liam Girdwood 01 Jun '12
by Liam Girdwood 01 Jun '12
01 Jun '12
Make sure we check the correct path for capture.
Signed-off-by: Liam Girdwood <lrg(a)ti.com>
---
sound/soc/soc-dapm.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
index 3bb7a6f..24ddcb6 100644
--- a/sound/soc/soc-dapm.c
+++ b/sound/soc/soc-dapm.c
@@ -960,7 +960,7 @@ int snd_soc_dapm_dai_get_connected_widgets(struct snd_soc_dai *dai, int stream,
if (stream == SNDRV_PCM_STREAM_PLAYBACK)
paths = is_connected_output_ep(dai->playback_widget, list);
else
- paths = is_connected_input_ep(dai->playback_widget, list);
+ paths = is_connected_input_ep(dai->capture_widget, list);
trace_snd_soc_dapm_connected(paths, stream);
dapm_clear_walk(&card->dapm);
--
1.7.9.5
1
0

[alsa-devel] [PATCH v2] ASoC: Support TI Isabelle Audio driver
by MR.Swami.Reddyï¼ ti.com 01 Jun '12
by MR.Swami.Reddyï¼ ti.com 01 Jun '12
01 Jun '12
From: M R Swami Reddy <MR.Swami.Reddy(a)ti.com>
ASoC: Support TI Isabelle Audio driver
The Isabelle Audio IC is a complete low power high fidelity CODEC with integrated
ADCs, DACs, decimation and interpolation filters, PLL, and power providers. This
device supports 2 analog and 2 digital microphone channels, a mono earpiece driver,
stereo class G headphone drivers with ultra low power and best SNR in the industry,
stereo Class D speaker drivers, and 2 high performance Line drivers.
The below patch is a basic driver code for TI Isabelle audio codec. The
functionalities like headset detection, etc., will be included incrementally
in the up-coming patches.
Signed-off-by: Vishwas A Deshpande <vishwas.a.deshpande(a)ti.com>
Signed-off-by: M R Swami Reddy <mr.swami.reddy(a)ti.com>
---
Changes in v2:
o Used dev_get_regmap and devm_regmap_init_i2c APIs.
o Removed isabelle_priv structure.
sound/soc/codecs/Kconfig | 4 +
sound/soc/codecs/Makefile | 2 +
sound/soc/codecs/isabelle.c | 1185 ++++++++++++++++++++++++++++++++
sound/soc/codecs/isabelle.h | 143 ++++
4 files changed, 1334 insertions(+), 0 deletions(-)
diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig
index ed5f66c..4ebf9e8 100644
--- a/sound/soc/codecs/Kconfig
+++ b/sound/soc/codecs/Kconfig
@@ -30,6 +30,7 @@ config SND_SOC_ALL_CODECS
select SND_SOC_CX20442
select SND_SOC_DA7210 if I2C
select SND_SOC_DFBMCS320
+ select SND_SOC_ISABELLE if I2C
select SND_SOC_JZ4740_CODEC if SOC_JZ4740
select SND_SOC_LM4857 if I2C
select SND_SOC_LM49453 if I2C
@@ -185,6 +186,9 @@ config SND_SOC_DFBMCS320
config SND_SOC_DMIC
tristate
+config SND_SOC_ISABELLE
+ tristate
+
config SND_SOC_LM49453
tristate
diff --git a/sound/soc/codecs/Makefile b/sound/soc/codecs/Makefile
index 7bbfdb2..fdc1ff6 100644
--- a/sound/soc/codecs/Makefile
+++ b/sound/soc/codecs/Makefile
@@ -17,6 +17,7 @@ snd-soc-cx20442-objs := cx20442.o
snd-soc-da7210-objs := da7210.o
snd-soc-dfbmcs320-objs := dfbmcs320.o
snd-soc-dmic-objs := dmic.o
+snd-soc-isabelle-objs := isabelle.o
snd-soc-l3-objs := l3.o
snd-soc-lm49453-objs := lm49453.o
snd-soc-max98088-objs := max98088.o
@@ -106,6 +107,7 @@ obj-$(CONFIG_SND_SOC_CX20442) += snd-soc-cx20442.o
obj-$(CONFIG_SND_SOC_DA7210) += snd-soc-da7210.o
obj-$(CONFIG_SND_SOC_DFBMCS320) += snd-soc-dfbmcs320.o
obj-$(CONFIG_SND_SOC_DMIC) += snd-soc-dmic.o
+obj-$(CONFIG_SND_SOC_ISABELLE) += snd-soc-isabelle.o
obj-$(CONFIG_SND_SOC_L3) += snd-soc-l3.o
obj-$(CONFIG_SND_SOC_LM49453) += snd-soc-lm49453.o
obj-$(CONFIG_SND_SOC_JZ4740_CODEC) += snd-soc-jz4740-codec.o
diff --git a/sound/soc/codecs/isabelle.c b/sound/soc/codecs/isabelle.c
new file mode 100644
index 0000000..da79d92
--- /dev/null
+++ b/sound/soc/codecs/isabelle.c
@@ -0,0 +1,1185 @@
+/*
+ * isabelle.c - Low power high fidelity audio codec driver
+ *
+ * Copyright (c) 2012 Texas Instruments, Inc
+ *
+ * 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; version 2 of the License.
+ *
+ *
+ * Initially based on sound/soc/codecs/twl6040.c
+ *
+ */
+#include <linux/module.h>
+#include <linux/moduleparam.h>
+#include <linux/version.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/delay.h>
+#include <linux/pm.h>
+#include <linux/regmap.h>
+#include <linux/i2c.h>
+#include <linux/slab.h>
+#include <sound/core.h>
+#include <sound/pcm.h>
+#include <sound/pcm_params.h>
+#include <sound/soc.h>
+#include <sound/soc-dapm.h>
+#include <sound/tlv.h>
+#include <sound/jack.h>
+#include <sound/initval.h>
+#include <asm/div64.h>
+#include "isabelle.h"
+
+
+/* Register default values for ISABELLE driver. */
+static struct reg_default isabelle_reg_defs[] = {
+ { 0, 0x00 },
+ { 1, 0x00 },
+ { 2, 0x00 },
+ { 3, 0x00 },
+ { 4, 0x00 },
+ { 5, 0x00 },
+ { 6, 0x00 },
+ { 7, 0x00 },
+ { 8, 0x00 },
+ { 9, 0x00 },
+ { 10, 0x00 },
+ { 11, 0x00 },
+ { 12, 0x00 },
+ { 13, 0x00 },
+ { 14, 0x00 },
+ { 15, 0x00 },
+ { 16, 0x00 },
+ { 17, 0x00 },
+ { 18, 0x00 },
+ { 19, 0x00 },
+ { 20, 0x00 },
+ { 21, 0x02 },
+ { 22, 0x02 },
+ { 23, 0x02 },
+ { 24, 0x02 },
+ { 25, 0x0F },
+ { 26, 0x8F },
+ { 27, 0x0F },
+ { 28, 0x8F },
+ { 29, 0x00 },
+ { 30, 0x00 },
+ { 31, 0x00 },
+ { 32, 0x00 },
+ { 33, 0x00 },
+ { 34, 0x00 },
+ { 35, 0x00 },
+ { 36, 0x00 },
+ { 37, 0x00 },
+ { 38, 0x00 },
+ { 39, 0x00 },
+ { 40, 0x00 },
+ { 41, 0x00 },
+ { 42, 0x00 },
+ { 43, 0x00 },
+ { 44, 0x00 },
+ { 45, 0x00 },
+ { 46, 0x00 },
+ { 47, 0x00 },
+ { 48, 0x00 },
+ { 49, 0x00 },
+ { 50, 0x00 },
+ { 51, 0x00 },
+ { 52, 0x00 },
+ { 53, 0x00 },
+ { 54, 0x00 },
+ { 55, 0x00 },
+ { 56, 0x00 },
+ { 57, 0x00 },
+ { 58, 0x00 },
+ { 59, 0x00 },
+ { 60, 0x00 },
+ { 61, 0x00 },
+ { 62, 0x00 },
+ { 63, 0x00 },
+ { 64, 0x00 },
+ { 65, 0x00 },
+ { 66, 0x00 },
+ { 67, 0x00 },
+ { 68, 0x00 },
+ { 69, 0x90 },
+ { 70, 0x90 },
+ { 71, 0x90 },
+ { 72, 0x00 },
+ { 73, 0x00 },
+ { 74, 0x00 },
+ { 75, 0x00 },
+ { 76, 0x00 },
+ { 77, 0x00 },
+ { 78, 0x00 },
+ { 79, 0x00 },
+ { 80, 0x00 },
+ { 81, 0x00 },
+ { 82, 0x00 },
+ { 83, 0x00 },
+ { 84, 0x00 },
+ { 85, 0x07 },
+ { 86, 0x00 },
+ { 87, 0x00 },
+ { 88, 0x00 },
+ { 89, 0x07 },
+ { 90, 0x80 },
+ { 91, 0x07 },
+ { 92, 0x07 },
+ { 93, 0x00 },
+ { 94, 0x00 },
+ { 95, 0x00 },
+ { 96, 0x00 },
+ { 97, 0x00 },
+ { 98, 0x00 },
+ { 99, 0x00 },
+};
+
+static const char *isabelle_rx1_texts[] = {"VRX1", "ARX1"};
+static const char *isabelle_rx2_texts[] = {"VRX2", "ARX2"};
+
+static const struct soc_enum isabelle_rx1_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_VOICE_HPF_CFG_REG, 3, 1, isabelle_rx1_texts),
+ SOC_ENUM_SINGLE(ISABELLE_AUDIO_HPF_CFG_REG, 5, 1, isabelle_rx1_texts),
+};
+
+static const struct soc_enum isabelle_rx2_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_VOICE_HPF_CFG_REG, 2, 1, isabelle_rx2_texts),
+ SOC_ENUM_SINGLE(ISABELLE_AUDIO_HPF_CFG_REG, 4, 1, isabelle_rx2_texts),
+};
+
+/* Headset DAC playback switches */
+static const struct snd_kcontrol_new rx1_mux_controls =
+ SOC_DAPM_ENUM("Route", isabelle_rx1_enum);
+
+static const struct snd_kcontrol_new rx2_mux_controls =
+ SOC_DAPM_ENUM("Route", isabelle_rx2_enum);
+
+/* TX input selection */
+static const char *isabelle_atx_texts[] = {"AMIC1", "DMIC"};
+static const char *isabelle_vtx_texts[] = {"AMIC2", "DMIC"};
+
+static const struct soc_enum isabelle_atx_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_AMIC_CFG_REG, 7, 1, isabelle_atx_texts),
+ SOC_ENUM_SINGLE(ISABELLE_DMIC_CFG_REG, 0, 1, isabelle_atx_texts),
+};
+
+static const struct soc_enum isabelle_vtx_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_AMIC_CFG_REG, 6, 1, isabelle_vtx_texts),
+ SOC_ENUM_SINGLE(ISABELLE_DMIC_CFG_REG, 0, 1, isabelle_vtx_texts),
+};
+
+static const struct snd_kcontrol_new atx_mux_controls =
+ SOC_DAPM_ENUM("Route", isabelle_atx_enum);
+
+static const struct snd_kcontrol_new vtx_mux_controls =
+ SOC_DAPM_ENUM("Route", isabelle_vtx_enum);
+
+/* Left analog microphone selection */
+static const char *isabelle_amic1_texts[] = {
+ "Main Mic", "Headset Mic", "Aux/FM Left"};
+
+/* Left analog microphone selection */
+static const char *isabelle_amic2_texts[] = {"Sub Mic", "Aux/FM Right"};
+
+static const struct soc_enum isabelle_amic1_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_AMIC_CFG_REG, 5,
+ ARRAY_SIZE(isabelle_amic1_texts),
+ isabelle_amic1_texts),
+};
+
+static const struct soc_enum isabelle_amic2_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_AMIC_CFG_REG, 4,
+ ARRAY_SIZE(isabelle_amic2_texts),
+ isabelle_amic2_texts),
+};
+
+static const struct snd_kcontrol_new amic1_control =
+ SOC_DAPM_ENUM("Route", isabelle_amic1_enum);
+
+static const struct snd_kcontrol_new amic2_control =
+ SOC_DAPM_ENUM("Route", isabelle_amic2_enum);
+
+static const char *isabelle_st_audio_texts[] = {"ATX1", "ATX2"};
+
+static const char *isabelle_st_voice_texts[] = {"VTX1", "VTX2"};
+
+static const struct soc_enum isabelle_st_audio_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_ATX_STPGA1_CFG_REG, 7, 1,
+ isabelle_st_audio_texts),
+ SOC_ENUM_SINGLE(ISABELLE_ATX_STPGA2_CFG_REG, 7, 1,
+ isabelle_st_audio_texts),
+};
+
+static const struct soc_enum isabelle_st_voice_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_VTX_STPGA1_CFG_REG, 7, 1,
+ isabelle_st_voice_texts),
+ SOC_ENUM_SINGLE(ISABELLE_VTX2_STPGA2_CFG_REG, 7, 1,
+ isabelle_st_voice_texts),
+};
+
+static const struct snd_kcontrol_new st_audio_control =
+ SOC_DAPM_ENUM("Route", isabelle_st_audio_enum);
+
+static const struct snd_kcontrol_new st_voice_control =
+ SOC_DAPM_ENUM("Route", isabelle_st_voice_enum);
+
+/* Mixer controls */
+static const struct snd_kcontrol_new isabelle_hs_left_mixer_controls[] = {
+SOC_DAPM_SINGLE("DAC1L Playback Switch", ISABELLE_HSDRV_CFG1_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("APGA1 Playback Switch", ISABELLE_HSDRV_CFG1_REG, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_hs_right_mixer_controls[] = {
+SOC_DAPM_SINGLE("DAC1R Playback Switch", ISABELLE_HSDRV_CFG1_REG, 5, 1, 0),
+SOC_DAPM_SINGLE("APGA2 Playback Switch", ISABELLE_HSDRV_CFG1_REG, 4, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_hf_left_mixer_controls[] = {
+SOC_DAPM_SINGLE("DAC2L Playback Switch", ISABELLE_HFLPGA_CFG_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("APGA1 Playback Switch", ISABELLE_HFLPGA_CFG_REG, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_hf_right_mixer_controls[] = {
+SOC_DAPM_SINGLE("DAC2R Playback Switch", ISABELLE_HFRPGA_CFG_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("APGA2 Playback Switch", ISABELLE_HFRPGA_CFG_REG, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_ep_mixer_controls[] = {
+SOC_DAPM_SINGLE("DAC2L Playback Switch", ISABELLE_EARDRV_CFG1_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("APGA1 Playback Switch", ISABELLE_EARDRV_CFG1_REG, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_aux_left_mixer_controls[] = {
+SOC_DAPM_SINGLE("DAC3L Playback Switch", ISABELLE_LINEAMP_CFG_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("APGA1 Playback Switch", ISABELLE_LINEAMP_CFG_REG, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_aux_right_mixer_controls[] = {
+SOC_DAPM_SINGLE("DAC3R Playback Switch", ISABELLE_LINEAMP_CFG_REG, 5, 1, 0),
+SOC_DAPM_SINGLE("APGA2 Playback Switch", ISABELLE_LINEAMP_CFG_REG, 4, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_dpga1_left_mixer_controls[] = {
+SOC_DAPM_SINGLE("RX1 Playback Switch", ISABELLE_DPGA1LR_IN_SEL_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("RX3 Playback Switch", ISABELLE_DPGA1LR_IN_SEL_REG, 6, 1, 0),
+SOC_DAPM_SINGLE("RX5 Playback Switch", ISABELLE_DPGA1LR_IN_SEL_REG, 5, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_dpga1_right_mixer_controls[] = {
+SOC_DAPM_SINGLE("RX2 Playback Switch", ISABELLE_DPGA1LR_IN_SEL_REG, 3, 1, 0),
+SOC_DAPM_SINGLE("RX4 Playback Switch", ISABELLE_DPGA1LR_IN_SEL_REG, 2, 1, 0),
+SOC_DAPM_SINGLE("RX6 Playback Switch", ISABELLE_DPGA1LR_IN_SEL_REG, 1, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_dpga2_left_mixer_controls[] = {
+SOC_DAPM_SINGLE("RX1 Playback Switch", ISABELLE_DPGA2L_IN_SEL_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("RX2 Playback Switch", ISABELLE_DPGA2L_IN_SEL_REG, 6, 1, 0),
+SOC_DAPM_SINGLE("RX3 Playback Switch", ISABELLE_DPGA2L_IN_SEL_REG, 5, 1, 0),
+SOC_DAPM_SINGLE("RX4 Playback Switch", ISABELLE_DPGA2L_IN_SEL_REG, 4, 1, 0),
+SOC_DAPM_SINGLE("RX5 Playback Switch", ISABELLE_DPGA2L_IN_SEL_REG, 3, 1, 0),
+SOC_DAPM_SINGLE("RX6 Playback Switch", ISABELLE_DPGA2L_IN_SEL_REG, 2, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_dpga2_right_mixer_controls[] = {
+SOC_DAPM_SINGLE("USNC Playback Switch", ISABELLE_DPGA2R_IN_SEL_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("RX2 Playback Switch", ISABELLE_DPGA2R_IN_SEL_REG, 3, 1, 0),
+SOC_DAPM_SINGLE("RX4 Playback Switch", ISABELLE_DPGA2R_IN_SEL_REG, 2, 1, 0),
+SOC_DAPM_SINGLE("RX6 Playback Switch", ISABELLE_DPGA2R_IN_SEL_REG, 1, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_dpga3_left_mixer_controls[] = {
+SOC_DAPM_SINGLE("RX1 Playback Switch", ISABELLE_DPGA3LR_IN_SEL_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("RX3 Playback Switch", ISABELLE_DPGA3LR_IN_SEL_REG, 6, 1, 0),
+SOC_DAPM_SINGLE("RX5 Playback Switch", ISABELLE_DPGA3LR_IN_SEL_REG, 5, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_dpga3_right_mixer_controls[] = {
+SOC_DAPM_SINGLE("RX2 Playback Switch", ISABELLE_DPGA3LR_IN_SEL_REG, 3, 1, 0),
+SOC_DAPM_SINGLE("RX4 Playback Switch", ISABELLE_DPGA3LR_IN_SEL_REG, 2, 1, 0),
+SOC_DAPM_SINGLE("RX6 Playback Switch", ISABELLE_DPGA3LR_IN_SEL_REG, 1, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_rx1_mixer_controls[] = {
+SOC_DAPM_SINGLE("ST1 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("DL1 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_rx2_mixer_controls[] = {
+SOC_DAPM_SINGLE("ST2 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 5, 1, 0),
+SOC_DAPM_SINGLE("DL2 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 4, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_rx3_mixer_controls[] = {
+SOC_DAPM_SINGLE("ST1 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 3, 1, 0),
+SOC_DAPM_SINGLE("DL3 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 2, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_rx4_mixer_controls[] = {
+SOC_DAPM_SINGLE("ST2 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 1, 1, 0),
+SOC_DAPM_SINGLE("DL4 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 0, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_rx5_mixer_controls[] = {
+SOC_DAPM_SINGLE("ST1 Playback Switch", ISABELLE_RX_INPUT_CFG2_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("DL5 Playback Switch", ISABELLE_RX_INPUT_CFG2_REG, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_rx6_mixer_controls[] = {
+SOC_DAPM_SINGLE("ST2 Playback Switch", ISABELLE_RX_INPUT_CFG2_REG, 5, 1, 0),
+SOC_DAPM_SINGLE("DL6 Playback Switch", ISABELLE_RX_INPUT_CFG2_REG, 4, 1, 0),
+};
+
+static const struct snd_kcontrol_new ep_path_enable_control =
+ SOC_DAPM_SINGLE("Switch", ISABELLE_EARDRV_CFG2_REG, 0, 1, 0);
+
+/* TLV Declarations */
+static const DECLARE_TLV_DB_SCALE(mic_amp_tlv, 0, 100, 0);
+static const DECLARE_TLV_DB_SCALE(afm_amp_tlv, -3300, 300, 0);
+static const DECLARE_TLV_DB_SCALE(dac_tlv, -1200, 200, 0);
+static const DECLARE_TLV_DB_SCALE(hf_tlv, -5000, 200, 0);
+
+/* from -63 to 0 dB in 1 dB steps */
+static const DECLARE_TLV_DB_SCALE(dpga_tlv, -6300, 100, 1);
+
+/* from -63 to 9 dB in 1 dB steps */
+static const DECLARE_TLV_DB_SCALE(rx_tlv, -6300, 100, 1);
+
+static const DECLARE_TLV_DB_SCALE(st_tlv, -2700, 300, 1);
+static const DECLARE_TLV_DB_SCALE(tx_tlv, -600, 100, 0);
+
+static const struct snd_kcontrol_new isabelle_snd_controls[] = {
+ SOC_DOUBLE_TLV("Headset Playback Volume", ISABELLE_HSDRV_GAIN_REG,
+ 4, 0, 0xF, 0, dac_tlv),
+ SOC_DOUBLE_R_TLV("Handsfree Playback Volume",
+ ISABELLE_HFLPGA_CFG_REG, ISABELLE_HFRPGA_CFG_REG,
+ 0, 0x1F, 0, hf_tlv),
+ SOC_DOUBLE_TLV("Aux Playback Volume", ISABELLE_LINEAMP_GAIN_REG,
+ 4, 0, 0xF, 0, dac_tlv),
+ SOC_SINGLE_TLV("Earpiece Playback Volume", ISABELLE_EARDRV_CFG1_REG,
+ 0, 0xF, 0, dac_tlv),
+
+ SOC_DOUBLE_TLV("Aux FM Volume", ISABELLE_APGA_GAIN_REG, 4, 0, 0xF, 0,
+ afm_amp_tlv),
+ SOC_SINGLE_TLV("Mic1 Capture Volume", ISABELLE_MIC1_GAIN_REG, 3, 0x1F,
+ 0, mic_amp_tlv),
+ SOC_SINGLE_TLV("Mic2 Capture Volume", ISABELLE_MIC2_GAIN_REG, 3, 0x1F,
+ 0, mic_amp_tlv),
+
+ SOC_DOUBLE_R_TLV("DPGA1 Volume", ISABELLE_DPGA1L_GAIN_REG,
+ ISABELLE_DPGA1R_GAIN_REG, 0, 0x3F, 0, dpga_tlv),
+ SOC_DOUBLE_R_TLV("DPGA2 Volume", ISABELLE_DPGA2L_GAIN_REG,
+ ISABELLE_DPGA2R_GAIN_REG, 0, 0x3F, 0, dpga_tlv),
+ SOC_DOUBLE_R_TLV("DPGA3 Volume", ISABELLE_DPGA3L_GAIN_REG,
+ ISABELLE_DPGA3R_GAIN_REG, 0, 0x3F, 0, dpga_tlv),
+
+ SOC_SINGLE_TLV("Sidetone Audio TX1 Volume",
+ ISABELLE_ATX_STPGA1_CFG_REG, 0, 0xF, 0, st_tlv),
+ SOC_SINGLE_TLV("Sidetone Audio TX2 Volume",
+ ISABELLE_ATX_STPGA2_CFG_REG, 0, 0xF, 0, st_tlv),
+ SOC_SINGLE_TLV("Sidetone Voice TX1 Volume",
+ ISABELLE_VTX_STPGA1_CFG_REG, 0, 0xF, 0, st_tlv),
+ SOC_SINGLE_TLV("Sidetone Voice TX2 Volume",
+ ISABELLE_VTX2_STPGA2_CFG_REG, 0, 0xF, 0, st_tlv),
+
+ SOC_SINGLE_TLV("Audio TX1 Volume", ISABELLE_ATX1_DPGA_REG, 4, 0xF, 0,
+ tx_tlv),
+ SOC_SINGLE_TLV("Audio TX2 Volume", ISABELLE_ATX2_DPGA_REG, 4, 0xF, 0,
+ tx_tlv),
+ SOC_SINGLE_TLV("Voice TX1 Volume", ISABELLE_VTX1_DPGA_REG, 4, 0xF, 0,
+ tx_tlv),
+ SOC_SINGLE_TLV("Voice TX2 Volume", ISABELLE_VTX2_DPGA_REG, 4, 0xF, 0,
+ tx_tlv),
+
+ SOC_SINGLE_TLV("RX1 DPGA Volume", ISABELLE_RX1_DPGA_REG, 0, 0x3F, 0,
+ rx_tlv),
+ SOC_SINGLE_TLV("RX2 DPGA Volume", ISABELLE_RX2_DPGA_REG, 0, 0x3F, 0,
+ rx_tlv),
+ SOC_SINGLE_TLV("RX3 DPGA Volume", ISABELLE_RX3_DPGA_REG, 0, 0x3F, 0,
+ rx_tlv),
+ SOC_SINGLE_TLV("RX4 DPGA Volume", ISABELLE_RX4_DPGA_REG, 0, 0x3F, 0,
+ rx_tlv),
+ SOC_SINGLE_TLV("RX5 DPGA Volume", ISABELLE_RX5_DPGA_REG, 0, 0x3F, 0,
+ rx_tlv),
+ SOC_SINGLE_TLV("RX6 DPGA Volume", ISABELLE_RX6_DPGA_REG, 0, 0x3F, 0,
+ rx_tlv),
+
+ SOC_SINGLE("Headset Noise Gate", ISABELLE_HS_NG_CFG1_REG, 7, 1, 0),
+ SOC_SINGLE("Handsfree Noise Gate", ISABELLE_HF_NG_CFG1_REG, 7, 1, 0),
+
+ SOC_SINGLE("ATX1 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 7, 1, 0),
+ SOC_SINGLE("ATX2 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 6, 1, 0),
+ SOC_SINGLE("ARX1 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 5, 1, 0),
+ SOC_SINGLE("ARX2 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 4, 1, 0),
+ SOC_SINGLE("ARX3 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 3, 1, 0),
+ SOC_SINGLE("ARX4 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 2, 1, 0),
+ SOC_SINGLE("ARX5 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 1, 1, 0),
+ SOC_SINGLE("ARX6 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 0, 1, 0),
+ SOC_SINGLE("VRX1 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 3, 1, 0),
+ SOC_SINGLE("VRX2 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 2, 1, 0),
+
+ SOC_SINGLE("ATX1 Filter Enable Switch", ISABELLE_ALU_TX_EN_REG,
+ 7, 1, 0),
+ SOC_SINGLE("ATX2 Filter Enable Switch", ISABELLE_ALU_TX_EN_REG,
+ 6, 1, 0),
+ SOC_SINGLE("VTX1 Filter Enable Switch", ISABELLE_ALU_TX_EN_REG,
+ 5, 1, 0),
+ SOC_SINGLE("VTX2 Filter Enable Switch", ISABELLE_ALU_TX_EN_REG,
+ 4, 1, 0),
+ SOC_SINGLE("RX1 Filter Enable Switch", ISABELLE_ALU_RX_EN_REG,
+ 5, 1, 0),
+ SOC_SINGLE("RX2 Filter Enable Switch", ISABELLE_ALU_RX_EN_REG,
+ 4, 1, 0),
+ SOC_SINGLE("RX3 Filter Enable Switch", ISABELLE_ALU_RX_EN_REG,
+ 3, 1, 0),
+ SOC_SINGLE("RX4 Filter Enable Switch", ISABELLE_ALU_RX_EN_REG,
+ 2, 1, 0),
+ SOC_SINGLE("RX5 Filter Enable Switch", ISABELLE_ALU_RX_EN_REG,
+ 1, 1, 0),
+ SOC_SINGLE("RX6 Filter Enable Switch", ISABELLE_ALU_RX_EN_REG,
+ 0, 1, 0),
+
+ SOC_SINGLE("ULATX12 Capture Switch", ISABELLE_ULATX12_INTF_CFG_REG,
+ 7, 1, 0),
+
+ SOC_SINGLE("DL12 Playback Switch", ISABELLE_DL12_INTF_CFG_REG,
+ 7, 1, 0),
+ SOC_SINGLE("DL34 Playback Switch", ISABELLE_DL34_INTF_CFG_REG,
+ 7, 1, 0),
+ SOC_SINGLE("DL56 Playback Switch", ISABELLE_DL56_INTF_CFG_REG,
+ 7, 1, 0),
+
+ /* DMIC Switch */
+ SOC_SINGLE("DMIC Switch", ISABELLE_DMIC_CFG_REG, 0, 1, 0),
+};
+
+static const struct snd_soc_dapm_widget isabelle_dapm_widgets[] = {
+ /* Inputs */
+ SND_SOC_DAPM_INPUT("MAINMIC"),
+ SND_SOC_DAPM_INPUT("HSMIC"),
+ SND_SOC_DAPM_INPUT("SUBMIC"),
+ SND_SOC_DAPM_INPUT("LINEIN1"),
+ SND_SOC_DAPM_INPUT("LINEIN2"),
+ SND_SOC_DAPM_INPUT("DMICDAT"),
+
+ /* Outputs */
+ SND_SOC_DAPM_OUTPUT("HSOL"),
+ SND_SOC_DAPM_OUTPUT("HSOR"),
+ SND_SOC_DAPM_OUTPUT("HFL"),
+ SND_SOC_DAPM_OUTPUT("HFR"),
+ SND_SOC_DAPM_OUTPUT("EP"),
+ SND_SOC_DAPM_OUTPUT("LINEOUT1"),
+ SND_SOC_DAPM_OUTPUT("LINEOUT2"),
+
+ SND_SOC_DAPM_PGA("DL1", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DL2", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DL3", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DL4", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DL5", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DL6", SND_SOC_NOPM, 0, 0, NULL, 0),
+
+ /* Analog input muxes for the capture amplifiers */
+ SND_SOC_DAPM_MUX("Analog Left Capture Route",
+ SND_SOC_NOPM, 0, 0, &amic1_control),
+ SND_SOC_DAPM_MUX("Analog Right Capture Route",
+ SND_SOC_NOPM, 0, 0, &amic2_control),
+
+ SND_SOC_DAPM_MUX("Sidetone Audio Playback", SND_SOC_NOPM, 0, 0,
+ &st_audio_control),
+ SND_SOC_DAPM_MUX("Sidetone Voice Playback", SND_SOC_NOPM, 0, 0,
+ &st_voice_control),
+
+ /* AIF */
+ SND_SOC_DAPM_AIF_IN("INTF1_SDI", NULL, 0, ISABELLE_INTF_EN_REG, 7, 0),
+ SND_SOC_DAPM_AIF_IN("INTF2_SDI", NULL, 0, ISABELLE_INTF_EN_REG, 6, 0),
+
+ SND_SOC_DAPM_AIF_OUT("INTF1_SDO", NULL, 0, ISABELLE_INTF_EN_REG, 5, 0),
+ SND_SOC_DAPM_AIF_OUT("INTF2_SDO", NULL, 0, ISABELLE_INTF_EN_REG, 4, 0),
+
+ SND_SOC_DAPM_OUT_DRV("ULATX1", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("ULATX2", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("ULVTX1", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("ULVTX2", SND_SOC_NOPM, 0, 0, NULL, 0),
+
+ /* Analog Capture PGAs */
+ SND_SOC_DAPM_PGA("MicAmp1", ISABELLE_AMIC_CFG_REG, 5, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("MicAmp2", ISABELLE_AMIC_CFG_REG, 4, 0, NULL, 0),
+
+ /* Auxiliary FM PGAs */
+ SND_SOC_DAPM_PGA("APGA1", ISABELLE_APGA_CFG_REG, 7, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("APGA2", ISABELLE_APGA_CFG_REG, 6, 0, NULL, 0),
+
+ /* ADCs */
+ SND_SOC_DAPM_ADC("ADC1", "Left Front Capture",
+ ISABELLE_AMIC_CFG_REG, 7, 0),
+ SND_SOC_DAPM_ADC("ADC2", "Right Front Capture",
+ ISABELLE_AMIC_CFG_REG, 6, 0),
+
+ /* Microphone Bias */
+ SND_SOC_DAPM_SUPPLY("Headset Mic Bias", ISABELLE_ABIAS_CFG_REG,
+ 3, 0, NULL, 0),
+ SND_SOC_DAPM_SUPPLY("Main Mic Bias", ISABELLE_ABIAS_CFG_REG,
+ 2, 0, NULL, 0),
+ SND_SOC_DAPM_SUPPLY("Digital Mic1 Bias",
+ ISABELLE_DBIAS_CFG_REG, 3, 0, NULL, 0),
+ SND_SOC_DAPM_SUPPLY("Digital Mic2 Bias",
+ ISABELLE_DBIAS_CFG_REG, 2, 0, NULL, 0),
+
+ /* Mixers */
+ SND_SOC_DAPM_MIXER("Headset Left Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_hs_left_mixer_controls,
+ ARRAY_SIZE(isabelle_hs_left_mixer_controls)),
+ SND_SOC_DAPM_MIXER("Headset Right Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_hs_right_mixer_controls,
+ ARRAY_SIZE(isabelle_hs_right_mixer_controls)),
+ SND_SOC_DAPM_MIXER("Handsfree Left Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_hf_left_mixer_controls,
+ ARRAY_SIZE(isabelle_hf_left_mixer_controls)),
+ SND_SOC_DAPM_MIXER("Handsfree Right Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_hf_right_mixer_controls,
+ ARRAY_SIZE(isabelle_hf_right_mixer_controls)),
+ SND_SOC_DAPM_MIXER("LINEOUT1 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_aux_left_mixer_controls,
+ ARRAY_SIZE(isabelle_aux_left_mixer_controls)),
+ SND_SOC_DAPM_MIXER("LINEOUT2 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_aux_right_mixer_controls,
+ ARRAY_SIZE(isabelle_aux_right_mixer_controls)),
+ SND_SOC_DAPM_MIXER("Earphone Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_ep_mixer_controls,
+ ARRAY_SIZE(isabelle_ep_mixer_controls)),
+
+ SND_SOC_DAPM_MIXER("DPGA1L Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_dpga1_left_mixer_controls,
+ ARRAY_SIZE(isabelle_dpga1_left_mixer_controls)),
+ SND_SOC_DAPM_MIXER("DPGA1R Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_dpga1_right_mixer_controls,
+ ARRAY_SIZE(isabelle_dpga1_right_mixer_controls)),
+ SND_SOC_DAPM_MIXER("DPGA2L Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_dpga2_left_mixer_controls,
+ ARRAY_SIZE(isabelle_dpga2_left_mixer_controls)),
+ SND_SOC_DAPM_MIXER("DPGA2R Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_dpga2_right_mixer_controls,
+ ARRAY_SIZE(isabelle_dpga2_right_mixer_controls)),
+ SND_SOC_DAPM_MIXER("DPGA3L Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_dpga3_left_mixer_controls,
+ ARRAY_SIZE(isabelle_dpga3_left_mixer_controls)),
+ SND_SOC_DAPM_MIXER("DPGA3R Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_dpga3_right_mixer_controls,
+ ARRAY_SIZE(isabelle_dpga3_right_mixer_controls)),
+
+ SND_SOC_DAPM_MIXER("RX1 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_rx1_mixer_controls,
+ ARRAY_SIZE(isabelle_rx1_mixer_controls)),
+ SND_SOC_DAPM_MIXER("RX2 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_rx2_mixer_controls,
+ ARRAY_SIZE(isabelle_rx2_mixer_controls)),
+ SND_SOC_DAPM_MIXER("RX3 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_rx3_mixer_controls,
+ ARRAY_SIZE(isabelle_rx3_mixer_controls)),
+ SND_SOC_DAPM_MIXER("RX4 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_rx4_mixer_controls,
+ ARRAY_SIZE(isabelle_rx4_mixer_controls)),
+ SND_SOC_DAPM_MIXER("RX5 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_rx5_mixer_controls,
+ ARRAY_SIZE(isabelle_rx5_mixer_controls)),
+ SND_SOC_DAPM_MIXER("RX6 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_rx6_mixer_controls,
+ ARRAY_SIZE(isabelle_rx6_mixer_controls)),
+
+ /* DACs */
+ SND_SOC_DAPM_DAC("DAC1L", "Headset Playback", ISABELLE_DAC_CFG_REG,
+ 5, 0),
+ SND_SOC_DAPM_DAC("DAC1R", "Headset Playback", ISABELLE_DAC_CFG_REG,
+ 4, 0),
+ SND_SOC_DAPM_DAC("DAC2L", "Handsfree Playback", ISABELLE_DAC_CFG_REG,
+ 3, 0),
+ SND_SOC_DAPM_DAC("DAC2R", "Handsfree Playback", ISABELLE_DAC_CFG_REG,
+ 2, 0),
+ SND_SOC_DAPM_DAC("DAC3L", "Lineout Playback", ISABELLE_DAC_CFG_REG,
+ 1, 0),
+ SND_SOC_DAPM_DAC("DAC3R", "Lineout Playback", ISABELLE_DAC_CFG_REG,
+ 0, 0),
+
+ /* Analog Playback PGAs */
+ SND_SOC_DAPM_PGA("Sidetone Audio PGA", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("Sidetone Voice PGA", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("HF Left PGA", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("HF Right PGA", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DPGA1L", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DPGA1R", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DPGA2L", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DPGA2R", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DPGA3L", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DPGA3R", SND_SOC_NOPM, 0, 0, NULL, 0),
+
+ /* Analog Playback Mux */
+ SND_SOC_DAPM_MUX("RX1 Playback", ISABELLE_ALU_RX_EN_REG, 5, 0,
+ &rx1_mux_controls),
+ SND_SOC_DAPM_MUX("RX2 Playback", ISABELLE_ALU_RX_EN_REG, 4, 0,
+ &rx2_mux_controls),
+
+ /* TX Select */
+ SND_SOC_DAPM_MUX("ATX Select", ISABELLE_TX_INPUT_CFG_REG,
+ 7, 0, &atx_mux_controls),
+ SND_SOC_DAPM_MUX("VTX Select", ISABELLE_TX_INPUT_CFG_REG,
+ 6, 0, &vtx_mux_controls),
+
+ SND_SOC_DAPM_SWITCH("Earphone Playback", SND_SOC_NOPM, 0, 0,
+ &ep_path_enable_control),
+
+ /* Output Drivers */
+ SND_SOC_DAPM_OUT_DRV("HS Left Driver", ISABELLE_HSDRV_CFG2_REG,
+ 1, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("HS Right Driver", ISABELLE_HSDRV_CFG2_REG,
+ 0, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("LINEOUT1 Left Driver", ISABELLE_LINEAMP_CFG_REG,
+ 1, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("LINEOUT2 Right Driver", ISABELLE_LINEAMP_CFG_REG,
+ 0, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("Earphone Driver", ISABELLE_EARDRV_CFG2_REG,
+ 1, 0, NULL, 0),
+
+ SND_SOC_DAPM_OUT_DRV("HF Left Driver", ISABELLE_HFDRV_CFG_REG,
+ 1, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("HF Right Driver", ISABELLE_HFDRV_CFG_REG,
+ 0, 0, NULL, 0),
+};
+
+static const struct snd_soc_dapm_route isabelle_intercon[] = {
+ /* Interface mapping */
+ { "DL1", "DL12 Playback Switch", "INTF1_SDI" },
+ { "DL2", "DL12 Playback Switch", "INTF1_SDI" },
+ { "DL3", "DL34 Playback Switch", "INTF1_SDI" },
+ { "DL4", "DL34 Playback Switch", "INTF1_SDI" },
+ { "DL5", "DL56 Playback Switch", "INTF1_SDI" },
+ { "DL6", "DL56 Playback Switch", "INTF1_SDI" },
+
+ { "DL1", "DL12 Playback Switch", "INTF2_SDI" },
+ { "DL2", "DL12 Playback Switch", "INTF2_SDI" },
+ { "DL3", "DL34 Playback Switch", "INTF2_SDI" },
+ { "DL4", "DL34 Playback Switch", "INTF2_SDI" },
+ { "DL5", "DL56 Playback Switch", "INTF2_SDI" },
+ { "DL6", "DL56 Playback Switch", "INTF2_SDI" },
+
+ /* Input side mapping */
+ { "Sidetone Audio PGA", NULL, "Sidetone Audio Playback" },
+ { "Sidetone Voice PGA", NULL, "Sidetone Voice Playback" },
+
+ { "RX1 Mixer", "ST1 Playback Switch", "Sidetone Audio PGA" },
+
+ { "RX1 Mixer", "ST1 Playback Switch", "Sidetone Voice PGA" },
+ { "RX1 Mixer", "DL1 Playback Switch", "DL1" },
+
+ { "RX2 Mixer", "ST2 Playback Switch", "Sidetone Audio PGA" },
+
+ { "RX2 Mixer", "ST2 Playback Switch", "Sidetone Voice PGA" },
+ { "RX2 Mixer", "DL2 Playback Switch", "DL2" },
+
+ { "RX3 Mixer", "ST1 Playback Switch", "Sidetone Voice PGA" },
+ { "RX3 Mixer", "DL3 Playback Switch", "DL3" },
+
+ { "RX4 Mixer", "ST2 Playback Switch", "Sidetone Voice PGA" },
+ { "RX4 Mixer", "DL4 Playback Switch", "DL4" },
+
+ { "RX5 Mixer", "ST1 Playback Switch", "Sidetone Voice PGA" },
+ { "RX5 Mixer", "DL5 Playback Switch", "DL5" },
+
+ { "RX6 Mixer", "ST2 Playback Switch", "Sidetone Voice PGA" },
+ { "RX6 Mixer", "DL6 Playback Switch", "DL6" },
+
+ /* Capture path */
+ { "Analog Left Capture Route", "Headset Mic", "HSMIC" },
+ { "Analog Left Capture Route", "Main Mic", "MAINMIC" },
+ { "Analog Left Capture Route", "Aux/FM Left", "LINEIN1" },
+
+ { "Analog Right Capture Route", "Sub Mic", "SUBMIC" },
+ { "Analog Right Capture Route", "Aux/FM Right", "LINEIN2" },
+
+ { "MicAmp1", NULL, "Analog Left Capture Route" },
+ { "MicAmp2", NULL, "Analog Right Capture Route" },
+
+ { "ADC1", NULL, "MicAmp1" },
+ { "ADC2", NULL, "MicAmp2" },
+
+ { "ATX Select", "AMIC1", "ADC1" },
+ { "ATX Select", "DMIC", "DMICDAT" },
+ { "ATX Select", "AMIC2", "ADC2" },
+
+ { "VTX Select", "AMIC1", "ADC1" },
+ { "VTX Select", "DMIC", "DMICDAT" },
+ { "VTX Select", "AMIC2", "ADC2" },
+
+ { "ULATX1", "ATX1 Filter Enable Switch", "ATX Select" },
+ { "ULATX1", "ATX1 Filter Bypass Switch", "ATX Select" },
+ { "ULATX2", "ATX2 Filter Enable Switch", "ATX Select" },
+ { "ULATX2", "ATX2 Filter Bypass Switch", "ATX Select" },
+
+ { "ULVTX1", "VTX1 Filter Enable Switch", "VTX Select" },
+ { "ULVTX1", "VTX1 Filter Bypass Switch", "VTX Select" },
+ { "ULVTX2", "VTX2 Filter Enable Switch", "VTX Select" },
+ { "ULVTX2", "VTX2 Filter Bypass Switch", "VTX Select" },
+
+ { "INTF1_SDO", "ULATX12 Capture Switch", "ULATX1" },
+ { "INTF1_SDO", "ULATX12 Capture Switch", "ULATX2" },
+ { "INTF2_SDO", "ULATX12 Capture Switch", "ULATX1" },
+ { "INTF2_SDO", "ULATX12 Capture Switch", "ULATX2" },
+
+ { "INTF1_SDO", NULL, "ULVTX1" },
+ { "INTF1_SDO", NULL, "ULVTX2" },
+ { "INTF2_SDO", NULL, "ULVTX1" },
+ { "INTF2_SDO", NULL, "ULVTX2" },
+
+ /* AFM Path */
+ { "APGA1", NULL, "LINEIN1" },
+ { "APGA2", NULL, "LINEIN2" },
+
+ { "RX1 Playback", "VRX1 Filter Bypass Switch", "RX1 Mixer" },
+ { "RX1 Playback", "ARX1 Filter Bypass Switch", "RX1 Mixer" },
+ { "RX1 Playback", "RX1 Filter Enable Switch", "RX1 Mixer" },
+
+ { "RX2 Playback", "VRX2 Filter Bypass Switch", "RX2 Mixer" },
+ { "RX2 Playback", "ARX2 Filter Bypass Switch", "RX2 Mixer" },
+ { "RX2 Playback", "RX2 Filter Enable Switch", "RX2 Mixer" },
+
+ { "RX3 Playback", "ARX3 Filter Bypass Switch", "RX3 Mixer" },
+ { "RX3 Playback", "RX3 Filter Enable Switch", "RX3 Mixer" },
+
+ { "RX4 Playback", "ARX4 Filter Bypass Switch", "RX4 Mixer" },
+ { "RX4 Playback", "RX4 Filter Enable Switch", "RX4 Mixer" },
+
+ { "RX5 Playback", "ARX5 Filter Bypass Switch", "RX5 Mixer" },
+ { "RX5 Playback", "RX5 Filter Enable Switch", "RX5 Mixer" },
+
+ { "RX6 Playback", "ARX6 Filter Bypass Switch", "RX6 Mixer" },
+ { "RX6 Playback", "RX6 Filter Enable Switch", "RX6 Mixer" },
+
+ { "DPGA1L Mixer", "RX1 Playback Switch", "RX1 Playback" },
+ { "DPGA1L Mixer", "RX3 Playback Switch", "RX3 Playback" },
+ { "DPGA1L Mixer", "RX5 Playback Switch", "RX5 Playback" },
+
+ { "DPGA1R Mixer", "RX2 Playback Switch", "RX2 Playback" },
+ { "DPGA1R Mixer", "RX4 Playback Switch", "RX4 Playback" },
+ { "DPGA1R Mixer", "RX6 Playback Switch", "RX6 Playback" },
+
+ { "DPGA1L", NULL, "DPGA1L Mixer" },
+ { "DPGA1R", NULL, "DPGA1R Mixer" },
+
+ { "DAC1L", NULL, "DPGA1L" },
+ { "DAC1R", NULL, "DPGA1R" },
+
+ { "DPGA2L Mixer", "RX1 Playback Switch", "RX1 Playback" },
+ { "DPGA2L Mixer", "RX2 Playback Switch", "RX2 Playback" },
+ { "DPGA2L Mixer", "RX3 Playback Switch", "RX3 Playback" },
+ { "DPGA2L Mixer", "RX4 Playback Switch", "RX4 Playback" },
+ { "DPGA2L Mixer", "RX5 Playback Switch", "RX5 Playback" },
+ { "DPGA2L Mixer", "RX6 Playback Switch", "RX6 Playback" },
+
+ { "DPGA2R Mixer", "RX2 Playback Switch", "RX2 Playback" },
+ { "DPGA2R Mixer", "RX4 Playback Switch", "RX4 Playback" },
+ { "DPGA2R Mixer", "RX6 Playback Switch", "RX6 Playback" },
+
+ { "DPGA2L", NULL, "DPGA2L Mixer" },
+ { "DPGA2R", NULL, "DPGA2R Mixer" },
+
+ { "DAC2L", NULL, "DPGA2L" },
+ { "DAC2R", NULL, "DPGA2R" },
+
+ { "DPGA3L Mixer", "RX1 Playback Switch", "RX1 Playback" },
+ { "DPGA3L Mixer", "RX3 Playback Switch", "RX3 Playback" },
+ { "DPGA3L Mixer", "RX5 Playback Switch", "RX5 Playback" },
+
+ { "DPGA3R Mixer", "RX2 Playback Switch", "RX2 Playback" },
+ { "DPGA3R Mixer", "RX4 Playback Switch", "RX4 Playback" },
+ { "DPGA3R Mixer", "RX6 Playback Switch", "RX6 Playback" },
+
+ { "DPGA3L", NULL, "DPGA3L Mixer" },
+ { "DPGA3R", NULL, "DPGA3R Mixer" },
+
+ { "DAC3L", NULL, "DPGA3L" },
+ { "DAC3R", NULL, "DPGA3R" },
+
+ { "Headset Left Mixer", "DAC1L Playback Switch", "DAC1L" },
+ { "Headset Left Mixer", "APGA1 Playback Switch", "APGA1" },
+
+ { "Headset Right Mixer", "DAC1R Playback Switch", "DAC1R" },
+ { "Headset Right Mixer", "APGA2 Playback Switch", "APGA2" },
+
+ { "HS Left Driver", NULL, "Headset Left Mixer" },
+ { "HS Right Driver", NULL, "Headset Right Mixer" },
+
+ { "HSOL", NULL, "HS Left Driver" },
+ { "HSOR", NULL, "HS Right Driver" },
+
+ /* Earphone playback path */
+ { "Earphone Mixer", "DAC2L Playback Switch", "DAC2L" },
+ { "Earphone Mixer", "APGA1 Playback Switch", "APGA1" },
+
+ { "Earphone Playback", "Switch", "Earphone Mixer" },
+ { "Earphone Driver", NULL, "Earphone Playback" },
+ { "EP", NULL, "Earphone Driver" },
+
+ { "Handsfree Left Mixer", "DAC2L Playback Switch", "DAC2L" },
+ { "Handsfree Left Mixer", "APGA1 Playback Switch", "APGA1" },
+
+ { "Handsfree Right Mixer", "DAC2R Playback Switch", "DAC2R" },
+ { "Handsfree Right Mixer", "APGA2 Playback Switch", "APGA2" },
+
+ { "HF Left PGA", NULL, "Handsfree Left Mixer" },
+ { "HF Right PGA", NULL, "Handsfree Right Mixer" },
+
+ { "HF Left Driver", NULL, "HF Left PGA" },
+ { "HF Right Driver", NULL, "HF Right PGA" },
+
+ { "HFL", NULL, "HF Left Driver" },
+ { "HFR", NULL, "HF Right Driver" },
+
+ { "LINEOUT1 Mixer", "DAC3L Playback Switch", "DAC3L" },
+ { "LINEOUT1 Mixer", "APGA1 Playback Switch", "APGA1" },
+
+ { "LINEOUT2 Mixer", "DAC3R Playback Switch", "DAC3R" },
+ { "LINEOUT2 Mixer", "APGA2 Playback Switch", "APGA2" },
+
+ { "LINEOUT1 Driver", NULL, "LINEOUT1 Mixer" },
+ { "LINEOUT2 Driver", NULL, "LINEOUT2 Mixer" },
+
+ { "LINEOUT1", NULL, "LINEOUT1 Driver" },
+ { "LINEOUT2", NULL, "LINEOUT2 Driver" },
+};
+
+static int isabelle_hs_mute(struct snd_soc_dai *dai, int mute)
+{
+ snd_soc_update_bits(dai->codec, ISABELLE_DAC1_SOFTRAMP_REG,
+ BIT(4), (mute ? BIT(4) : 0));
+
+ return 0;
+}
+
+static int isabelle_hf_mute(struct snd_soc_dai *dai, int mute)
+{
+ snd_soc_update_bits(dai->codec, ISABELLE_DAC2_SOFTRAMP_REG,
+ BIT(4), (mute ? BIT(4) : 0));
+
+ return 0;
+}
+
+static int isabelle_line_mute(struct snd_soc_dai *dai, int mute)
+{
+ snd_soc_update_bits(dai->codec, ISABELLE_DAC3_SOFTRAMP_REG,
+ BIT(4), (mute ? BIT(4) : 0));
+
+ return 0;
+}
+
+static int isabelle_set_bias_level(struct snd_soc_codec *codec,
+ enum snd_soc_bias_level level)
+{
+ switch (level) {
+ case SND_SOC_BIAS_ON:
+ break;
+ case SND_SOC_BIAS_PREPARE:
+ break;
+
+ case SND_SOC_BIAS_STANDBY:
+ snd_soc_update_bits(codec, ISABELLE_PWR_EN_REG,
+ ISABELLE_CHIP_EN, BIT(0));
+ break;
+
+ case SND_SOC_BIAS_OFF:
+ snd_soc_update_bits(codec, ISABELLE_PWR_EN_REG,
+ ISABELLE_CHIP_EN, 0);
+ break;
+ }
+
+ codec->dapm.bias_level = level;
+
+ return 0;
+}
+
+static int isabelle_hw_params(struct snd_pcm_substream *substream,
+ struct snd_pcm_hw_params *params,
+ struct snd_soc_dai *dai)
+{
+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
+ struct snd_soc_codec *codec = rtd->codec;
+ u16 aif = 0;
+ unsigned int fs_val = 0;
+
+ switch (params_rate(params)) {
+ case 8000:
+ fs_val = ISABELLE_FS_RATE_8;
+ break;
+ case 11025:
+ fs_val = ISABELLE_FS_RATE_11;
+ break;
+ case 12000:
+ fs_val = ISABELLE_FS_RATE_12;
+ break;
+ case 16000:
+ fs_val = ISABELLE_FS_RATE_16;
+ break;
+ case 22050:
+ fs_val = ISABELLE_FS_RATE_22;
+ break;
+ case 24000:
+ fs_val = ISABELLE_FS_RATE_24;
+ break;
+ case 32000:
+ fs_val = ISABELLE_FS_RATE_32;
+ break;
+ case 44100:
+ fs_val = ISABELLE_FS_RATE_44;
+ break;
+ case 48000:
+ fs_val = ISABELLE_FS_RATE_48;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ snd_soc_update_bits(codec, ISABELLE_FS_RATE_CFG_REG,
+ ISABELLE_FS_RATE_MASK, fs_val);
+
+ /* bit size */
+ switch (params_format(params)) {
+ case SNDRV_PCM_FORMAT_S20_3LE:
+ aif |= ISABELLE_AIF_LENGTH_20;
+ break;
+ case SNDRV_PCM_FORMAT_S32_LE:
+ aif |= ISABELLE_AIF_LENGTH_32;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ snd_soc_update_bits(codec, ISABELLE_INTF_CFG_REG,
+ ISABELLE_AIF_LENGTH_MASK, aif);
+
+ return 0;
+}
+
+static int isabelle_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt)
+{
+ struct snd_soc_codec *codec = codec_dai->codec;
+ unsigned int aif_val = 0;
+
+ switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
+ case SND_SOC_DAIFMT_CBS_CFS:
+ aif_val &= ~ISABELLE_AIF_MS;
+ break;
+ case SND_SOC_DAIFMT_CBM_CFM:
+ aif_val |= ISABELLE_AIF_MS;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
+ case SND_SOC_DAIFMT_I2S:
+ aif_val |= ISABELLE_I2S_MODE;
+ break;
+ case SND_SOC_DAIFMT_LEFT_J:
+ aif_val |= ISABELLE_LEFT_J_MODE;
+ break;
+ case SND_SOC_DAIFMT_PDM:
+ aif_val |= ISABELLE_PDM_MODE;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ snd_soc_update_bits(codec, ISABELLE_INTF_CFG_REG,
+ (ISABELLE_AIF_MS | ISABELLE_AIF_FMT_MASK), aif_val);
+
+ return 0;
+}
+
+/* Rates supported by Isabelle driver */
+#define ISABELLE_RATES SNDRV_PCM_RATE_8000_48000
+
+/* Formates supported by Isabelle driver. */
+#define ISABELLE_FORMATS (SNDRV_PCM_FMTBIT_S20_3LE |\
+ SNDRV_PCM_FMTBIT_S32_LE)
+
+static struct snd_soc_dai_ops isabelle_hs_dai_ops = {
+ .hw_params = isabelle_hw_params,
+ .set_fmt = isabelle_set_dai_fmt,
+ .digital_mute = isabelle_hs_mute,
+};
+
+static struct snd_soc_dai_ops isabelle_hf_dai_ops = {
+ .hw_params = isabelle_hw_params,
+ .set_fmt = isabelle_set_dai_fmt,
+ .digital_mute = isabelle_hf_mute,
+};
+
+static struct snd_soc_dai_ops isabelle_line_dai_ops = {
+ .hw_params = isabelle_hw_params,
+ .set_fmt = isabelle_set_dai_fmt,
+ .digital_mute = isabelle_line_mute,
+};
+
+static struct snd_soc_dai_ops isabelle_ul_dai_ops = {
+ .hw_params = isabelle_hw_params,
+ .set_fmt = isabelle_set_dai_fmt,
+};
+
+/* ISABELLE dai structure */
+struct snd_soc_dai_driver isabelle_dai[] = {
+ {
+ .name = "isabelle-dl1",
+ .playback = {
+ .stream_name = "Headset Playback",
+ .channels_min = 1,
+ .channels_max = 2,
+ .rates = ISABELLE_RATES,
+ .formats = ISABELLE_FORMATS,
+ },
+ .ops = &isabelle_hs_dai_ops,
+ },
+ {
+ .name = "isabelle-dl2",
+ .playback = {
+ .stream_name = "Handsfree Playback",
+ .channels_min = 1,
+ .channels_max = 2,
+ .rates = ISABELLE_RATES,
+ .formats = ISABELLE_FORMATS,
+ },
+ .ops = &isabelle_hf_dai_ops,
+ },
+ {
+ .name = "isabelle-lineout",
+ .playback = {
+ .stream_name = "Lineout Playback",
+ .channels_min = 1,
+ .channels_max = 2,
+ .rates = ISABELLE_RATES,
+ .formats = ISABELLE_FORMATS,
+ },
+ .ops = &isabelle_line_dai_ops,
+ },
+ {
+ .name = "isabelle-ul",
+ .capture = {
+ .stream_name = "Capture",
+ .channels_min = 1,
+ .channels_max = 2,
+ .rates = ISABELLE_RATES,
+ .formats = ISABELLE_FORMATS,
+ },
+ .ops = &isabelle_ul_dai_ops,
+ },
+};
+
+static int isabelle_probe(struct snd_soc_codec *codec)
+{
+ int ret = 0;
+
+ codec->control_data = dev_get_regmap(codec->dev, NULL);
+
+ ret = snd_soc_codec_set_cache_io(codec, 8, 8, SND_SOC_REGMAP);
+ if (ret < 0) {
+ dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
+ return ret;
+ }
+
+ return 0;
+}
+
+static struct snd_soc_codec_driver soc_codec_dev_isabelle = {
+ .probe = isabelle_probe,
+ .set_bias_level = isabelle_set_bias_level,
+ .controls = isabelle_snd_controls,
+ .num_controls = ARRAY_SIZE(isabelle_snd_controls),
+ .dapm_widgets = isabelle_dapm_widgets,
+ .num_dapm_widgets = ARRAY_SIZE(isabelle_dapm_widgets),
+ .dapm_routes = isabelle_intercon,
+ .num_dapm_routes = ARRAY_SIZE(isabelle_intercon),
+ .idle_bias_off = true,
+};
+
+static const struct regmap_config isabelle_regmap_config = {
+ .reg_bits = 8,
+ .val_bits = 8,
+
+ .max_register = ISABELLE_MAX_REGISTER,
+ .reg_defaults = isabelle_reg_defs,
+ .num_reg_defaults = ARRAY_SIZE(isabelle_reg_defs),
+ .cache_type = REGCACHE_RBTREE,
+};
+
+static int __devinit isabelle_i2c_probe(struct i2c_client *i2c,
+ const struct i2c_device_id *id)
+{
+ struct regmap *isabelle_regmap;
+ int ret = 0;
+
+ isabelle_regmap = devm_kzalloc(&i2c->dev, sizeof(struct regmap),
+ GFP_KERNEL);
+
+ if (isabelle_regmap == NULL)
+ return -ENOMEM;
+
+ i2c_set_clientdata(i2c, isabelle_regmap);
+
+ isabelle_regmap = devm_regmap_init_i2c(i2c, &isabelle_regmap_config);
+ if (IS_ERR(isabelle_regmap)) {
+ ret = PTR_ERR(isabelle_regmap);
+ dev_err(&i2c->dev, "Failed to allocate register map: %d\n",
+ ret);
+ return ret;
+ }
+
+ ret = snd_soc_register_codec(&i2c->dev,
+ &soc_codec_dev_isabelle, isabelle_dai,
+ ARRAY_SIZE(isabelle_dai));
+ if (ret < 0) {
+ dev_err(&i2c->dev, "Failed to register codec: %d\n", ret);
+ regmap_exit(dev_get_regmap(i2c->dev, NULL));
+ return ret;
+ }
+
+ return ret;
+}
+
+static int __devexit isabelle_i2c_remove(struct i2c_client *client)
+{
+ snd_soc_unregister_codec(&client->dev);
+ regmap_exit(dev_get_regmap(client->dev, NULL));
+ return 0;
+}
+
+static const struct i2c_device_id isabelle_i2c_id[] = {
+ { "isabelle", 0 },
+ { }
+};
+MODULE_DEVICE_TABLE(i2c, isabelle_i2c_id);
+
+static struct i2c_driver isabelle_i2c_driver = {
+ .driver = {
+ .name = "isabelle",
+ .owner = THIS_MODULE,
+ },
+ .probe = isabelle_i2c_probe,
+ .remove = __devexit_p(isabelle_i2c_remove),
+ .id_table = isabelle_i2c_id,
+};
+
+module_i2c_driver(isabelle_i2c_driver);
+
+MODULE_DESCRIPTION("ASoC ISABELLE driver");
+MODULE_AUTHOR("Vishwas A Deshpande <vishwas.a.deshpande(a)ti.com>");
+MODULE_AUTHOR("M R Swami Reddy <MR.Swami.Reddy(a)ti.com>");
+MODULE_LICENSE("GPL v2");
diff --git a/sound/soc/codecs/isabelle.h b/sound/soc/codecs/isabelle.h
new file mode 100644
index 0000000..96d839a
--- /dev/null
+++ b/sound/soc/codecs/isabelle.h
@@ -0,0 +1,143 @@
+/*
+ * isabelle.h - Low power high fidelity audio codec driver header file
+ *
+ * Copyright (c) 2012 Texas Instruments, Inc
+ *
+ * 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; version 2 of the License.
+ *
+ */
+
+#ifndef _ISABELLE_H
+#define _ISABELLE_H
+
+#include <linux/bitops.h>
+
+/* ISABELLE REGISTERS */
+
+#define ISABELLE_PWR_CFG_REG 0x01
+#define ISABELLE_PWR_EN_REG 0x02
+#define ISABELLE_PS_EN1_REG 0x03
+#define ISABELLE_INT1_STATUS_REG 0x04
+#define ISABELLE_INT1_MASK_REG 0x05
+#define ISABELLE_INT2_STATUS_REG 0x06
+#define ISABELLE_INT2_MASK_REG 0x07
+#define ISABELLE_HKCTL1_REG 0x08
+#define ISABELLE_HKCTL2_REG 0x09
+#define ISABELLE_HKCTL3_REG 0x0A
+#define ISABELLE_ACCDET_STATUS_REG 0x0B
+#define ISABELLE_BUTTON_ID_REG 0x0C
+#define ISABELLE_PLL_CFG_REG 0x10
+#define ISABELLE_PLL_EN_REG 0x11
+#define ISABELLE_FS_RATE_CFG_REG 0x12
+#define ISABELLE_INTF_CFG_REG 0x13
+#define ISABELLE_INTF_EN_REG 0x14
+#define ISABELLE_ULATX12_INTF_CFG_REG 0x15
+#define ISABELLE_DL12_INTF_CFG_REG 0x16
+#define ISABELLE_DL34_INTF_CFG_REG 0x17
+#define ISABELLE_DL56_INTF_CFG_REG 0x18
+#define ISABELLE_ATX_STPGA1_CFG_REG 0x19
+#define ISABELLE_ATX_STPGA2_CFG_REG 0x1A
+#define ISABELLE_VTX_STPGA1_CFG_REG 0x1B
+#define ISABELLE_VTX2_STPGA2_CFG_REG 0x1C
+#define ISABELLE_ATX1_DPGA_REG 0x1D
+#define ISABELLE_ATX2_DPGA_REG 0x1E
+#define ISABELLE_VTX1_DPGA_REG 0x1F
+#define ISABELLE_VTX2_DPGA_REG 0x20
+#define ISABELLE_TX_INPUT_CFG_REG 0x21
+#define ISABELLE_RX_INPUT_CFG_REG 0x22
+#define ISABELLE_RX_INPUT_CFG2_REG 0x23
+#define ISABELLE_VOICE_HPF_CFG_REG 0x24
+#define ISABELLE_AUDIO_HPF_CFG_REG 0x25
+#define ISABELLE_RX1_DPGA_REG 0x26
+#define ISABELLE_RX2_DPGA_REG 0x27
+#define ISABELLE_RX3_DPGA_REG 0x28
+#define ISABELLE_RX4_DPGA_REG 0x29
+#define ISABELLE_RX5_DPGA_REG 0x2A
+#define ISABELLE_RX6_DPGA_REG 0x2B
+#define ISABELLE_ALU_TX_EN_REG 0x2C
+#define ISABELLE_ALU_RX_EN_REG 0x2D
+#define ISABELLE_IIR_RESYNC_REG 0x2E
+#define ISABELLE_ABIAS_CFG_REG 0x30
+#define ISABELLE_DBIAS_CFG_REG 0x31
+#define ISABELLE_MIC1_GAIN_REG 0x32
+#define ISABELLE_MIC2_GAIN_REG 0x33
+#define ISABELLE_AMIC_CFG_REG 0x34
+#define ISABELLE_DMIC_CFG_REG 0x35
+#define ISABELLE_APGA_GAIN_REG 0x36
+#define ISABELLE_APGA_CFG_REG 0x37
+#define ISABELLE_TX_GAIN_DLY_REG 0x38
+#define ISABELLE_RX_GAIN_DLY_REG 0x39
+#define ISABELLE_RX_PWR_CTRL_REG 0x3A
+#define ISABELLE_DPGA1LR_IN_SEL_REG 0x3B
+#define ISABELLE_DPGA1L_GAIN_REG 0x3C
+#define ISABELLE_DPGA1R_GAIN_REG 0x3D
+#define ISABELLE_DPGA2L_IN_SEL_REG 0x3E
+#define ISABELLE_DPGA2R_IN_SEL_REG 0x3F
+#define ISABELLE_DPGA2L_GAIN_REG 0x40
+#define ISABELLE_DPGA2R_GAIN_REG 0x41
+#define ISABELLE_DPGA3LR_IN_SEL_REG 0x42
+#define ISABELLE_DPGA3L_GAIN_REG 0x43
+#define ISABELLE_DPGA3R_GAIN_REG 0x44
+#define ISABELLE_DAC1_SOFTRAMP_REG 0x45
+#define ISABELLE_DAC2_SOFTRAMP_REG 0x46
+#define ISABELLE_DAC3_SOFTRAMP_REG 0x47
+#define ISABELLE_DAC_CFG_REG 0x48
+#define ISABELLE_EARDRV_CFG1_REG 0x49
+#define ISABELLE_EARDRV_CFG2_REG 0x4A
+#define ISABELLE_HSDRV_GAIN_REG 0x4B
+#define ISABELLE_HSDRV_CFG1_REG 0x4C
+#define ISABELLE_HSDRV_CFG2_REG 0x4D
+#define ISABELLE_HS_NG_CFG1_REG 0x4E
+#define ISABELLE_HS_NG_CFG2_REG 0x4F
+#define ISABELLE_LINEAMP_GAIN_REG 0x50
+#define ISABELLE_LINEAMP_CFG_REG 0x51
+#define ISABELLE_HFL_VOL_CTRL_REG 0x52
+#define ISABELLE_HFL_SFTVOL_CTRL_REG 0x53
+#define ISABELLE_HFL_LIM_CTRL_1_REG 0x54
+#define ISABELLE_HFL_LIM_CTRL_2_REG 0x55
+#define ISABELLE_HFR_VOL_CTRL_REG 0x56
+#define ISABELLE_HFR_SFTVOL_CTRL_REG 0x57
+#define ISABELLE_HFR_LIM_CTRL_1_REG 0x58
+#define ISABELLE_HFR_LIM_CTRL_2_REG 0x59
+#define ISABELLE_HF_MODE_REG 0x5A
+#define ISABELLE_HFLPGA_CFG_REG 0x5B
+#define ISABELLE_HFRPGA_CFG_REG 0x5C
+#define ISABELLE_HFDRV_CFG_REG 0x5D
+#define ISABELLE_PDMOUT_CFG1_REG 0x5E
+#define ISABELLE_PDMOUT_CFG2_REG 0x5F
+#define ISABELLE_PDMOUT_L_WM_REG 0x60
+#define ISABELLE_PDMOUT_R_WM_REG 0x61
+#define ISABELLE_HF_NG_CFG1_REG 0x62
+#define ISABELLE_HF_NG_CFG2_REG 0x63
+
+/* ISABELLE_PWR_EN_REG (0x02h) */
+#define ISABELLE_CHIP_EN BIT(0)
+
+/* ISABELLE DAI FORMATS */
+#define ISABELLE_AIF_FMT_MASK 0x70
+#define ISABELLE_I2S_MODE 0x0
+#define ISABELLE_LEFT_J_MODE 0x1
+#define ISABELLE_PDM_MODE 0x2
+
+#define ISABELLE_AIF_LENGTH_MASK 0x30
+#define ISABELLE_AIF_LENGTH_20 0x00
+#define ISABELLE_AIF_LENGTH_32 0x10
+
+#define ISABELLE_AIF_MS 0x80
+
+#define ISABELLE_FS_RATE_MASK 0xF
+#define ISABELLE_FS_RATE_8 0x0
+#define ISABELLE_FS_RATE_11 0x1
+#define ISABELLE_FS_RATE_12 0x2
+#define ISABELLE_FS_RATE_16 0x4
+#define ISABELLE_FS_RATE_22 0x5
+#define ISABELLE_FS_RATE_24 0x6
+#define ISABELLE_FS_RATE_32 0x8
+#define ISABELLE_FS_RATE_44 0x9
+#define ISABELLE_FS_RATE_48 0xA
+
+#define ISABELLE_MAX_REGISTER 0xFF
+
+#endif
2
1

[alsa-devel] [PATCH v2 1/2] ASoC: core: Add single controls with specified range of values
by Adam Thomson 01 Jun '12
by Adam Thomson 01 Jun '12
01 Jun '12
Control type added for cases where a specific range of values
within a register are required for control.
Added convenience macros:
SOC_SINGLE_RANGE
SOC_SINGLE_RANGE_TLV
Added accessor implementations:
snd_soc_info_volsw_range
snd_soc_put_volsw_range
snd_soc_get_volsw_range
Signed-off-by: Michal Hajduk <Michal.Hajduk(a)diasemi.com>
Signed-off-by: Adam Thomson <Adam.Thomson(a)diasemi.com>
---
include/sound/soc.h | 23 ++++++++++++
sound/soc/soc-core.c | 98 ++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 121 insertions(+), 0 deletions(-)
diff --git a/include/sound/soc.h b/include/sound/soc.h
index c703871..5f1b536 100644
--- a/include/sound/soc.h
+++ b/include/sound/soc.h
@@ -47,6 +47,13 @@
.info = snd_soc_info_volsw, .get = snd_soc_get_volsw,\
.put = snd_soc_put_volsw, \
.private_value = SOC_SINGLE_VALUE(reg, shift, max, invert) }
+#define SOC_SINGLE_RANGE(xname, xreg, xshift, xmin, xmax, xinvert) \
+{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\
+ .info = snd_soc_info_volsw_range, .get = snd_soc_get_volsw_range, \
+ .put = snd_soc_put_volsw_range, \
+ .private_value = (unsigned long)&(struct soc_mixer_control) \
+ {.reg = xreg, .shift = xshift, .min = xmin,\
+ .max = xmax, .platform_max = xmax, .invert = xinvert} }
#define SOC_SINGLE_TLV(xname, reg, shift, max, invert, tlv_array) \
{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
.access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |\
@@ -67,6 +74,16 @@
{.reg = xreg, .rreg = xreg, \
.shift = xshift, .rshift = xshift, \
.max = xmax, .min = xmin} }
+#define SOC_SINGLE_RANGE_TLV(xname, xreg, xshift, xmin, xmax, xinvert, tlv_array) \
+{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\
+ .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |\
+ SNDRV_CTL_ELEM_ACCESS_READWRITE,\
+ .tlv.p = (tlv_array), \
+ .info = snd_soc_info_volsw_range, \
+ .get = snd_soc_get_volsw_range, .put = snd_soc_put_volsw_range, \
+ .private_value = (unsigned long)&(struct soc_mixer_control) \
+ {.reg = xreg, .shift = xshift, .min = xmin,\
+ .max = xmax, .platform_max = xmax, .invert = xinvert} }
#define SOC_DOUBLE(xname, reg, shift_left, shift_right, max, invert) \
{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\
.info = snd_soc_info_volsw, .get = snd_soc_get_volsw, \
@@ -460,6 +477,12 @@ int snd_soc_get_volsw_s8(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol);
int snd_soc_put_volsw_s8(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol);
+int snd_soc_info_volsw_range(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_info *uinfo);
+int snd_soc_put_volsw_range(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol);
+int snd_soc_get_volsw_range(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol);
int snd_soc_limit_volume(struct snd_soc_codec *codec,
const char *name, int max);
int snd_soc_bytes_info(struct snd_kcontrol *kcontrol,
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index b37ee80..d68c67d 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -2790,6 +2790,104 @@ int snd_soc_put_volsw_s8(struct snd_kcontrol *kcontrol,
EXPORT_SYMBOL_GPL(snd_soc_put_volsw_s8);
/**
+ * snd_soc_info_volsw_range - single mixer info callback with range.
+ * @kcontrol: mixer control
+ * @uinfo: control element information
+ *
+ * Callback to provide information, within a range, about a single
+ * mixer control.
+ *
+ * returns 0 for success.
+ */
+int snd_soc_info_volsw_range(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_info *uinfo)
+{
+ struct soc_mixer_control *mc =
+ (struct soc_mixer_control *)kcontrol->private_value;
+ int platform_max;
+ int min = mc->min;
+
+ if (!mc->platform_max)
+ mc->platform_max = mc->max;
+ platform_max = mc->platform_max;
+
+ uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
+ uinfo->count = 1;
+ uinfo->value.integer.min = 0;
+ uinfo->value.integer.max = platform_max - min;
+
+ return 0;
+}
+EXPORT_SYMBOL_GPL(snd_soc_info_volsw_range);
+
+/**
+ * snd_soc_put_volsw_range - single mixer put value callback with range.
+ * @kcontrol: mixer control
+ * @ucontrol: control element information
+ *
+ * Callback to set the value, within a range, for a single mixer control.
+ *
+ * Returns 0 for success.
+ */
+int snd_soc_put_volsw_range(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct soc_mixer_control *mc =
+ (struct soc_mixer_control *)kcontrol->private_value;
+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+ unsigned int reg = mc->reg;
+ unsigned int shift = mc->shift;
+ int min = mc->min;
+ int max = mc->max;
+ unsigned int mask = (1 << fls(max)) - 1;
+ unsigned int invert = mc->invert;
+ unsigned int val, val_mask;
+
+ val = ((ucontrol->value.integer.value[0] + min) & mask);
+ if (invert)
+ val = max - val;
+ val_mask = mask << shift;
+ val = val << shift;
+
+ return snd_soc_update_bits_locked(codec, reg, val_mask, val);
+}
+EXPORT_SYMBOL_GPL(snd_soc_put_volsw_range);
+
+/**
+ * snd_soc_get_volsw_range - single mixer get callback with range
+ * @kcontrol: mixer control
+ * @ucontrol: control element information
+ *
+ * Callback to get the value, within a range, of a single mixer control.
+ *
+ * Returns 0 for success.
+ */
+int snd_soc_get_volsw_range(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct soc_mixer_control *mc =
+ (struct soc_mixer_control *)kcontrol->private_value;
+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+ unsigned int reg = mc->reg;
+ unsigned int shift = mc->shift;
+ int min = mc->min;
+ int max = mc->max;
+ unsigned int mask = (1 << fls(max)) - 1;
+ unsigned int invert = mc->invert;
+
+ ucontrol->value.integer.value[0] =
+ (snd_soc_read(codec, reg) >> shift) & mask;
+ if (invert)
+ ucontrol->value.integer.value[0] =
+ max - ucontrol->value.integer.value[0];
+ ucontrol->value.integer.value[0] =
+ ucontrol->value.integer.value[0] - min;
+
+ return 0;
+}
+EXPORT_SYMBOL_GPL(snd_soc_get_volsw_range);
+
+/**
* snd_soc_limit_volume - Set new limit to an existing volume control.
*
* @codec: where to look for the control
--
1.7.0.4
2
1

01 Jun '12
alsa-plugins version 1.0.25 cannot build with latest ffmpeg version 0.11 because a few CH_LAYOUT_* aliases to AV_CH_LAYOUT_* defines have been removed from the ffmpeg libavcodec header files.
A bug has been opened in the bug tracking system (#0005587):
https://bugtrack.alsa-project.org/alsa-bug/view.php?id=5587
Here is an example patch to fix the issue:
Ffmpeg 0.11 (LIBAVCODEC_VERSION_MAJOR = 54) removed the CH_LAYOUT_* aliases for the AV_CH_LAYOUT_* defines.
diff -pru alsa-plugins-1.0.25-original/a52/pcm_a52.c alsa-plugins-1.0.25-for-ffmpeg-0.11/a52/pcm_a52.c
--- alsa-plugins-1.0.25-original/a52/pcm_a52.c 2012-01-25 08:57:07.000000000 +0100
+++ alsa-plugins-1.0.25-for-ffmpeg-0.11/a52/pcm_a52.c 2012-06-01 14:59:47.096671464 +0200
@@ -441,7 +441,21 @@ static int a52_prepare(snd_pcm_ioplug_t
#else
rec->avctx->sample_fmt = SAMPLE_FMT_S16;
#endif
-#if LIBAVCODEC_VERSION_MAJOR > 52 || (LIBAVCODEC_VERSION_MAJOR == 52 && LIBAVCODEC_VERSION_MINOR >= 3)
+#if (LIBAVCODEC_VERSION_MAJOR >= 54)
+ switch (io->channels) {
+ case 2:
+ rec->avctx->channel_layout = AV_CH_LAYOUT_STEREO;
+ break;
+ case 4:
+ rec->avctx->channel_layout = AV_CH_LAYOUT_QUAD;
+ break;
+ case 6:
+ rec->avctx->channel_layout = AV_CH_LAYOUT_5POINT1;
+ break;
+ default:
+ break;
+ }
+#elif (LIBAVCODEC_VERSION_MAJOR > 52 && LIBAVCODEC_VERSION_MAJOR < 54) || (LIBAVCODEC_VERSION_MAJOR == 52 && LIBAVCODEC_VERSION_MINOR >= 3)
switch (io->channels) {
case 2:
rec->avctx->channel_layout = CH_LAYOUT_STEREO;
1
0

[alsa-devel] [PATCH RESEND] ASoC: Support TI Isabelle Audio driver
by MR.Swami.Reddyï¼ ti.com 01 Jun '12
by MR.Swami.Reddyï¼ ti.com 01 Jun '12
01 Jun '12
From: M R Swami Reddy <MR.Swami.Reddy(a)ti.com>
ASoC: Support TI ISABELLE Audio driver
The Isabelle Audio IC is a complete low power high fidelity CODEC with integrated
ADCs, DACs, decimation and interpolation filters, PLL, and power providers. This
device supports 2 analog and 2 digital microphone channels, a mono earpiece driver,
stereo class G headphone drivers with ultra low power and best SNR in the industry,
stereo Class D speaker drivers, and 2 high performance Line drivers.
The below patch is a basic driver code for TI Isabelle audio codec. The
functionalities like headset detection, etc., will be included incrementally
in the up-coming patches.
Signed-off-by: Vishwas A Deshpande <vishwas.a.deshpande(a)ti.com>
---
sound/soc/codecs/Kconfig | 4 +
sound/soc/codecs/Makefile | 2 +
sound/soc/codecs/isabelle.c | 1262 ++++++++++++++++++++++++++++++++++
sound/soc/codecs/isabelle.h | 143 ++++
4 files changed, 1411 insertions(+), 0 deletions(-)
diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig
index ed5f66c..4ebf9e8 100644
--- a/sound/soc/codecs/Kconfig
+++ b/sound/soc/codecs/Kconfig
@@ -30,6 +30,7 @@ config SND_SOC_ALL_CODECS
select SND_SOC_CX20442
select SND_SOC_DA7210 if I2C
select SND_SOC_DFBMCS320
+ select SND_SOC_ISABELLE if I2C
select SND_SOC_JZ4740_CODEC if SOC_JZ4740
select SND_SOC_LM4857 if I2C
select SND_SOC_LM49453 if I2C
@@ -185,6 +186,9 @@ config SND_SOC_DFBMCS320
config SND_SOC_DMIC
tristate
+config SND_SOC_ISABELLE
+ tristate
+
config SND_SOC_LM49453
tristate
diff --git a/sound/soc/codecs/Makefile b/sound/soc/codecs/Makefile
index 7bbfdb2..fdc1ff6 100644
--- a/sound/soc/codecs/Makefile
+++ b/sound/soc/codecs/Makefile
@@ -17,6 +17,7 @@ snd-soc-cx20442-objs := cx20442.o
snd-soc-da7210-objs := da7210.o
snd-soc-dfbmcs320-objs := dfbmcs320.o
snd-soc-dmic-objs := dmic.o
+snd-soc-isabelle-objs := isabelle.o
snd-soc-l3-objs := l3.o
snd-soc-lm49453-objs := lm49453.o
snd-soc-max98088-objs := max98088.o
@@ -106,6 +107,7 @@ obj-$(CONFIG_SND_SOC_CX20442) += snd-soc-cx20442.o
obj-$(CONFIG_SND_SOC_DA7210) += snd-soc-da7210.o
obj-$(CONFIG_SND_SOC_DFBMCS320) += snd-soc-dfbmcs320.o
obj-$(CONFIG_SND_SOC_DMIC) += snd-soc-dmic.o
+obj-$(CONFIG_SND_SOC_ISABELLE) += snd-soc-isabelle.o
obj-$(CONFIG_SND_SOC_L3) += snd-soc-l3.o
obj-$(CONFIG_SND_SOC_LM49453) += snd-soc-lm49453.o
obj-$(CONFIG_SND_SOC_JZ4740_CODEC) += snd-soc-jz4740-codec.o
diff --git a/sound/soc/codecs/isabelle.c b/sound/soc/codecs/isabelle.c
new file mode 100644
index 0000000..ac33d4f
--- /dev/null
+++ b/sound/soc/codecs/isabelle.c
@@ -0,0 +1,1262 @@
+/*
+ * isabelle.c - Low power high fidelity audio codec driver
+ *
+ * Copyright (c) 2012 Texas Instruments, Inc
+ *
+ * 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; version 2 of the License.
+ *
+ *
+ * Initially based on sound/soc/codecs/twl6040.c
+ *
+ */
+#include <linux/module.h>
+#include <linux/moduleparam.h>
+#include <linux/version.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/delay.h>
+#include <linux/pm.h>
+#include <linux/regmap.h>
+#include <linux/i2c.h>
+#include <linux/slab.h>
+#include <sound/core.h>
+#include <sound/pcm.h>
+#include <sound/pcm_params.h>
+#include <sound/soc.h>
+#include <sound/soc-dapm.h>
+#include <sound/tlv.h>
+#include <sound/jack.h>
+#include <sound/initval.h>
+#include <asm/div64.h>
+#include "isabelle.h"
+
+
+/* Register default values for ISABELLE driver. */
+static struct reg_default isabelle_reg_defs[] = {
+ { 0, 0x00 },
+ { 1, 0x00 },
+ { 2, 0x00 },
+ { 3, 0x00 },
+ { 4, 0x00 },
+ { 5, 0x00 },
+ { 6, 0x00 },
+ { 7, 0x00 },
+ { 8, 0x00 },
+ { 9, 0x00 },
+ { 10, 0x00 },
+ { 11, 0x00 },
+ { 12, 0x00 },
+ { 13, 0x00 },
+ { 14, 0x00 },
+ { 15, 0x00 },
+ { 16, 0x00 },
+ { 17, 0x00 },
+ { 18, 0x00 },
+ { 19, 0x00 },
+ { 20, 0x00 },
+ { 21, 0x02 },
+ { 22, 0x02 },
+ { 23, 0x02 },
+ { 24, 0x02 },
+ { 25, 0x0F },
+ { 26, 0x8F },
+ { 27, 0x0F },
+ { 28, 0x8F },
+ { 29, 0x00 },
+ { 30, 0x00 },
+ { 31, 0x00 },
+ { 32, 0x00 },
+ { 33, 0x00 },
+ { 34, 0x00 },
+ { 35, 0x00 },
+ { 36, 0x00 },
+ { 37, 0x00 },
+ { 38, 0x00 },
+ { 39, 0x00 },
+ { 40, 0x00 },
+ { 41, 0x00 },
+ { 42, 0x00 },
+ { 43, 0x00 },
+ { 44, 0x00 },
+ { 45, 0x00 },
+ { 46, 0x00 },
+ { 47, 0x00 },
+ { 48, 0x00 },
+ { 49, 0x00 },
+ { 50, 0x00 },
+ { 51, 0x00 },
+ { 52, 0x00 },
+ { 53, 0x00 },
+ { 54, 0x00 },
+ { 55, 0x00 },
+ { 56, 0x00 },
+ { 57, 0x00 },
+ { 58, 0x00 },
+ { 59, 0x00 },
+ { 60, 0x00 },
+ { 61, 0x00 },
+ { 62, 0x00 },
+ { 63, 0x00 },
+ { 64, 0x00 },
+ { 65, 0x00 },
+ { 66, 0x00 },
+ { 67, 0x00 },
+ { 68, 0x00 },
+ { 69, 0x90 },
+ { 70, 0x90 },
+ { 71, 0x90 },
+ { 72, 0x00 },
+ { 73, 0x00 },
+ { 74, 0x00 },
+ { 75, 0x00 },
+ { 76, 0x00 },
+ { 77, 0x00 },
+ { 78, 0x00 },
+ { 79, 0x00 },
+ { 80, 0x00 },
+ { 81, 0x00 },
+ { 82, 0x00 },
+ { 83, 0x00 },
+ { 84, 0x00 },
+ { 85, 0x07 },
+ { 86, 0x00 },
+ { 87, 0x00 },
+ { 88, 0x00 },
+ { 89, 0x07 },
+ { 90, 0x80 },
+ { 91, 0x07 },
+ { 92, 0x07 },
+ { 93, 0x00 },
+ { 94, 0x00 },
+ { 95, 0x00 },
+ { 96, 0x00 },
+ { 97, 0x00 },
+ { 98, 0x00 },
+ { 99, 0x00 },
+};
+
+/* codec private data */
+struct isabelle_priv {
+ struct regmap *regmap;
+};
+
+static const char *isabelle_rx1_texts[] = {"VRX1", "ARX1"};
+static const char *isabelle_rx2_texts[] = {"VRX2", "ARX2"};
+
+static const struct soc_enum isabelle_rx1_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_VOICE_HPF_CFG_REG, 3, 1, isabelle_rx1_texts),
+ SOC_ENUM_SINGLE(ISABELLE_AUDIO_HPF_CFG_REG, 5, 1, isabelle_rx1_texts),
+};
+
+static const struct soc_enum isabelle_rx2_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_VOICE_HPF_CFG_REG, 2, 1, isabelle_rx2_texts),
+ SOC_ENUM_SINGLE(ISABELLE_AUDIO_HPF_CFG_REG, 4, 1, isabelle_rx2_texts),
+};
+
+/* Headset DAC playback switches */
+static const struct snd_kcontrol_new rx1_mux_controls =
+ SOC_DAPM_ENUM("Route", isabelle_rx1_enum);
+
+static const struct snd_kcontrol_new rx2_mux_controls =
+ SOC_DAPM_ENUM("Route", isabelle_rx2_enum);
+
+/* TX input selection */
+static const char *isabelle_atx_texts[] = {"AMIC1", "DMIC"};
+static const char *isabelle_vtx_texts[] = {"AMIC2", "DMIC"};
+
+static const struct soc_enum isabelle_atx_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_AMIC_CFG_REG, 7, 1, isabelle_atx_texts),
+ SOC_ENUM_SINGLE(ISABELLE_DMIC_CFG_REG, 0, 1, isabelle_atx_texts),
+};
+
+static const struct soc_enum isabelle_vtx_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_AMIC_CFG_REG, 6, 1, isabelle_vtx_texts),
+ SOC_ENUM_SINGLE(ISABELLE_DMIC_CFG_REG, 0, 1, isabelle_vtx_texts),
+};
+
+static const struct snd_kcontrol_new atx_mux_controls =
+ SOC_DAPM_ENUM("Route", isabelle_atx_enum);
+
+static const struct snd_kcontrol_new vtx_mux_controls =
+ SOC_DAPM_ENUM("Route", isabelle_vtx_enum);
+
+/* Left analog microphone selection */
+static const char *isabelle_amic1_texts[] = {
+ "Main Mic", "Headset Mic", "Aux/FM Left"};
+
+/* Left analog microphone selection */
+static const char *isabelle_amic2_texts[] = {"Sub Mic", "Aux/FM Right"};
+
+static const struct soc_enum isabelle_amic1_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_AMIC_CFG_REG, 5,
+ ARRAY_SIZE(isabelle_amic1_texts),
+ isabelle_amic1_texts),
+};
+
+static const struct soc_enum isabelle_amic2_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_AMIC_CFG_REG, 4,
+ ARRAY_SIZE(isabelle_amic2_texts),
+ isabelle_amic2_texts),
+};
+
+static const struct snd_kcontrol_new amic1_control =
+ SOC_DAPM_ENUM("Route", isabelle_amic1_enum);
+
+static const struct snd_kcontrol_new amic2_control =
+ SOC_DAPM_ENUM("Route", isabelle_amic2_enum);
+
+static const char *isabelle_st_audio_texts[] = {"ATX1", "ATX2"};
+
+static const char *isabelle_st_voice_texts[] = {"VTX1", "VTX2"};
+
+static const struct soc_enum isabelle_st_audio_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_ATX_STPGA1_CFG_REG, 7, 1,
+ isabelle_st_audio_texts),
+ SOC_ENUM_SINGLE(ISABELLE_ATX_STPGA2_CFG_REG, 7, 1,
+ isabelle_st_audio_texts),
+};
+
+static const struct soc_enum isabelle_st_voice_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_VTX_STPGA1_CFG_REG, 7, 1,
+ isabelle_st_voice_texts),
+ SOC_ENUM_SINGLE(ISABELLE_VTX2_STPGA2_CFG_REG, 7, 1,
+ isabelle_st_voice_texts),
+};
+
+static const struct snd_kcontrol_new st_audio_control =
+ SOC_DAPM_ENUM("Route", isabelle_st_audio_enum);
+
+static const struct snd_kcontrol_new st_voice_control =
+ SOC_DAPM_ENUM("Route", isabelle_st_voice_enum);
+
+/* Mixer controls */
+static const struct snd_kcontrol_new isabelle_hs_left_mixer_controls[] = {
+SOC_DAPM_SINGLE("DAC1L Playback Switch", ISABELLE_HSDRV_CFG1_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("APGA1 Playback Switch", ISABELLE_HSDRV_CFG1_REG, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_hs_right_mixer_controls[] = {
+SOC_DAPM_SINGLE("DAC1R Playback Switch", ISABELLE_HSDRV_CFG1_REG, 5, 1, 0),
+SOC_DAPM_SINGLE("APGA2 Playback Switch", ISABELLE_HSDRV_CFG1_REG, 4, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_hf_left_mixer_controls[] = {
+SOC_DAPM_SINGLE("DAC2L Playback Switch", ISABELLE_HFLPGA_CFG_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("APGA1 Playback Switch", ISABELLE_HFLPGA_CFG_REG, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_hf_right_mixer_controls[] = {
+SOC_DAPM_SINGLE("DAC2R Playback Switch", ISABELLE_HFRPGA_CFG_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("APGA2 Playback Switch", ISABELLE_HFRPGA_CFG_REG, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_ep_mixer_controls[] = {
+SOC_DAPM_SINGLE("DAC2L Playback Switch", ISABELLE_EARDRV_CFG1_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("APGA1 Playback Switch", ISABELLE_EARDRV_CFG1_REG, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_aux_left_mixer_controls[] = {
+SOC_DAPM_SINGLE("DAC3L Playback Switch", ISABELLE_LINEAMP_CFG_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("APGA1 Playback Switch", ISABELLE_LINEAMP_CFG_REG, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_aux_right_mixer_controls[] = {
+SOC_DAPM_SINGLE("DAC3R Playback Switch", ISABELLE_LINEAMP_CFG_REG, 5, 1, 0),
+SOC_DAPM_SINGLE("APGA2 Playback Switch", ISABELLE_LINEAMP_CFG_REG, 4, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_dpga1_left_mixer_controls[] = {
+SOC_DAPM_SINGLE("RX1 Playback Switch", ISABELLE_DPGA1LR_IN_SEL_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("RX3 Playback Switch", ISABELLE_DPGA1LR_IN_SEL_REG, 6, 1, 0),
+SOC_DAPM_SINGLE("RX5 Playback Switch", ISABELLE_DPGA1LR_IN_SEL_REG, 5, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_dpga1_right_mixer_controls[] = {
+SOC_DAPM_SINGLE("RX2 Playback Switch", ISABELLE_DPGA1LR_IN_SEL_REG, 3, 1, 0),
+SOC_DAPM_SINGLE("RX4 Playback Switch", ISABELLE_DPGA1LR_IN_SEL_REG, 2, 1, 0),
+SOC_DAPM_SINGLE("RX6 Playback Switch", ISABELLE_DPGA1LR_IN_SEL_REG, 1, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_dpga2_left_mixer_controls[] = {
+SOC_DAPM_SINGLE("RX1 Playback Switch", ISABELLE_DPGA2L_IN_SEL_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("RX2 Playback Switch", ISABELLE_DPGA2L_IN_SEL_REG, 6, 1, 0),
+SOC_DAPM_SINGLE("RX3 Playback Switch", ISABELLE_DPGA2L_IN_SEL_REG, 5, 1, 0),
+SOC_DAPM_SINGLE("RX4 Playback Switch", ISABELLE_DPGA2L_IN_SEL_REG, 4, 1, 0),
+SOC_DAPM_SINGLE("RX5 Playback Switch", ISABELLE_DPGA2L_IN_SEL_REG, 3, 1, 0),
+SOC_DAPM_SINGLE("RX6 Playback Switch", ISABELLE_DPGA2L_IN_SEL_REG, 2, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_dpga2_right_mixer_controls[] = {
+SOC_DAPM_SINGLE("USNC Playback Switch", ISABELLE_DPGA2R_IN_SEL_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("RX2 Playback Switch", ISABELLE_DPGA2R_IN_SEL_REG, 3, 1, 0),
+SOC_DAPM_SINGLE("RX4 Playback Switch", ISABELLE_DPGA2R_IN_SEL_REG, 2, 1, 0),
+SOC_DAPM_SINGLE("RX6 Playback Switch", ISABELLE_DPGA2R_IN_SEL_REG, 1, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_dpga3_left_mixer_controls[] = {
+SOC_DAPM_SINGLE("RX1 Playback Switch", ISABELLE_DPGA3LR_IN_SEL_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("RX3 Playback Switch", ISABELLE_DPGA3LR_IN_SEL_REG, 6, 1, 0),
+SOC_DAPM_SINGLE("RX5 Playback Switch", ISABELLE_DPGA3LR_IN_SEL_REG, 5, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_dpga3_right_mixer_controls[] = {
+SOC_DAPM_SINGLE("RX2 Playback Switch", ISABELLE_DPGA3LR_IN_SEL_REG, 3, 1, 0),
+SOC_DAPM_SINGLE("RX4 Playback Switch", ISABELLE_DPGA3LR_IN_SEL_REG, 2, 1, 0),
+SOC_DAPM_SINGLE("RX6 Playback Switch", ISABELLE_DPGA3LR_IN_SEL_REG, 1, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_rx1_mixer_controls[] = {
+SOC_DAPM_SINGLE("ST1 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("DL1 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_rx2_mixer_controls[] = {
+SOC_DAPM_SINGLE("ST2 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 5, 1, 0),
+SOC_DAPM_SINGLE("DL2 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 4, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_rx3_mixer_controls[] = {
+SOC_DAPM_SINGLE("ST1 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 3, 1, 0),
+SOC_DAPM_SINGLE("DL3 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 2, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_rx4_mixer_controls[] = {
+SOC_DAPM_SINGLE("ST2 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 1, 1, 0),
+SOC_DAPM_SINGLE("DL4 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 0, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_rx5_mixer_controls[] = {
+SOC_DAPM_SINGLE("ST1 Playback Switch", ISABELLE_RX_INPUT_CFG2_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("DL5 Playback Switch", ISABELLE_RX_INPUT_CFG2_REG, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_rx6_mixer_controls[] = {
+SOC_DAPM_SINGLE("ST2 Playback Switch", ISABELLE_RX_INPUT_CFG2_REG, 5, 1, 0),
+SOC_DAPM_SINGLE("DL6 Playback Switch", ISABELLE_RX_INPUT_CFG2_REG, 4, 1, 0),
+};
+
+static const struct snd_kcontrol_new ep_path_enable_control =
+ SOC_DAPM_SINGLE("Switch", ISABELLE_EARDRV_CFG2_REG, 0, 1, 0);
+
+/* TLV Declarations */
+
+/*
+ * MICGAIN volume control:
+ * from 0 to 30 dB in 1 dB steps
+ */
+static const DECLARE_TLV_DB_SCALE(mic_amp_tlv, 0, 100, 0);
+
+/*
+ * AFMGAIN volume control:
+ * from -33 to 12 dB in 3 dB steps
+ */
+static const DECLARE_TLV_DB_SCALE(afm_amp_tlv, -3300, 300, 0);
+
+/*
+ * DACGAIN (HS, EP, LINE) volume control:
+ * from -12 to 6 dB in 2 dB steps
+ */
+static const DECLARE_TLV_DB_SCALE(dac_tlv, -1200, 200, 0);
+
+/*
+ * HFGAIN volume control:
+ * from -50 to 6 dB in 2 dB steps
+ */
+static const DECLARE_TLV_DB_SCALE(hf_tlv, -5000, 200, 0);
+
+/*
+ * DPGAGAIN volume control:
+ * from -63 to 0 dB in 1 dB steps
+ */
+static const DECLARE_TLV_DB_SCALE(dpga_tlv, -6300, 100, 1);
+
+/*
+ * STGAIN volume control:
+ * from -27 to 0 dB in 3 dB steps
+ */
+static const DECLARE_TLV_DB_SCALE(st_tlv, -2700, 300, 1);
+
+/*
+ * RXGAIN volume control:
+ * from -63 to 9 dB in 1 dB steps
+ */
+static const DECLARE_TLV_DB_SCALE(rx_tlv, -6300, 100, 1);
+
+/*
+ * TXGAIN volume control:
+ * from 9 to -6 dB in 1 dB steps
+ */
+static const DECLARE_TLV_DB_SCALE(tx_tlv, -600, 100, 0);
+
+static const struct snd_kcontrol_new isabelle_snd_controls[] = {
+ SOC_DOUBLE_TLV("Headset Playback Volume", ISABELLE_HSDRV_GAIN_REG,
+ 4, 0, 0xF, 0, dac_tlv),
+ SOC_DOUBLE_R_TLV("Handsfree Playback Volume",
+ ISABELLE_HFLPGA_CFG_REG, ISABELLE_HFRPGA_CFG_REG,
+ 0, 0x1F, 0, hf_tlv),
+ SOC_DOUBLE_TLV("Aux Playback Volume", ISABELLE_LINEAMP_GAIN_REG,
+ 4, 0, 0xF, 0, dac_tlv),
+ SOC_SINGLE_TLV("Earpiece Playback Volume", ISABELLE_EARDRV_CFG1_REG,
+ 0, 0xF, 0, dac_tlv),
+
+ SOC_DOUBLE_TLV("Aux FM Volume", ISABELLE_APGA_GAIN_REG, 4, 0, 0xF, 0,
+ afm_amp_tlv),
+ SOC_SINGLE_TLV("Mic1 Capture Volume", ISABELLE_MIC1_GAIN_REG, 3, 0x1F,
+ 0, mic_amp_tlv),
+ SOC_SINGLE_TLV("Mic2 Capture Volume", ISABELLE_MIC2_GAIN_REG, 3, 0x1F,
+ 0, mic_amp_tlv),
+
+ SOC_DOUBLE_R_TLV("DPGA1 Volume", ISABELLE_DPGA1L_GAIN_REG,
+ ISABELLE_DPGA1R_GAIN_REG, 0, 0x3F, 0, dpga_tlv),
+ SOC_DOUBLE_R_TLV("DPGA2 Volume", ISABELLE_DPGA2L_GAIN_REG,
+ ISABELLE_DPGA2R_GAIN_REG, 0, 0x3F, 0, dpga_tlv),
+ SOC_DOUBLE_R_TLV("DPGA3 Volume", ISABELLE_DPGA3L_GAIN_REG,
+ ISABELLE_DPGA3R_GAIN_REG, 0, 0x3F, 0, dpga_tlv),
+
+ SOC_SINGLE_TLV("Sidetone Audio TX1 Volume",
+ ISABELLE_ATX_STPGA1_CFG_REG, 0, 0xF, 0, st_tlv),
+ SOC_SINGLE_TLV("Sidetone Audio TX2 Volume",
+ ISABELLE_ATX_STPGA2_CFG_REG, 0, 0xF, 0, st_tlv),
+ SOC_SINGLE_TLV("Sidetone Voice TX1 Volume",
+ ISABELLE_VTX_STPGA1_CFG_REG, 0, 0xF, 0, st_tlv),
+ SOC_SINGLE_TLV("Sidetone Voice TX2 Volume",
+ ISABELLE_VTX2_STPGA2_CFG_REG, 0, 0xF, 0, st_tlv),
+
+ SOC_SINGLE_TLV("Audio TX1 Volume", ISABELLE_ATX1_DPGA_REG, 4, 0xF, 0,
+ tx_tlv),
+ SOC_SINGLE_TLV("Audio TX2 Volume", ISABELLE_ATX2_DPGA_REG, 4, 0xF, 0,
+ tx_tlv),
+ SOC_SINGLE_TLV("Voice TX1 Volume", ISABELLE_VTX1_DPGA_REG, 4, 0xF, 0,
+ tx_tlv),
+ SOC_SINGLE_TLV("Voice TX2 Volume", ISABELLE_VTX2_DPGA_REG, 4, 0xF, 0,
+ tx_tlv),
+
+ SOC_SINGLE_TLV("RX1 DPGA Volume", ISABELLE_RX1_DPGA_REG, 0, 0x3F, 0,
+ rx_tlv),
+ SOC_SINGLE_TLV("RX2 DPGA Volume", ISABELLE_RX2_DPGA_REG, 0, 0x3F, 0,
+ rx_tlv),
+ SOC_SINGLE_TLV("RX3 DPGA Volume", ISABELLE_RX3_DPGA_REG, 0, 0x3F, 0,
+ rx_tlv),
+ SOC_SINGLE_TLV("RX4 DPGA Volume", ISABELLE_RX4_DPGA_REG, 0, 0x3F, 0,
+ rx_tlv),
+ SOC_SINGLE_TLV("RX5 DPGA Volume", ISABELLE_RX5_DPGA_REG, 0, 0x3F, 0,
+ rx_tlv),
+ SOC_SINGLE_TLV("RX6 DPGA Volume", ISABELLE_RX6_DPGA_REG, 0, 0x3F, 0,
+ rx_tlv),
+
+ SOC_SINGLE("Headset Noise Gate", ISABELLE_HS_NG_CFG1_REG, 7, 1, 0),
+ SOC_SINGLE("Handsfree Noise Gate", ISABELLE_HF_NG_CFG1_REG, 7, 1, 0),
+
+ SOC_SINGLE("ATX1 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 7, 1, 0),
+ SOC_SINGLE("ATX2 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 6, 1, 0),
+ SOC_SINGLE("ARX1 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 5, 1, 0),
+ SOC_SINGLE("ARX2 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 4, 1, 0),
+ SOC_SINGLE("ARX3 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 3, 1, 0),
+ SOC_SINGLE("ARX4 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 2, 1, 0),
+ SOC_SINGLE("ARX5 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 1, 1, 0),
+ SOC_SINGLE("ARX6 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 0, 1, 0),
+ SOC_SINGLE("VRX1 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 3, 1, 0),
+ SOC_SINGLE("VRX2 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 2, 1, 0),
+
+ SOC_SINGLE("ATX1 Filter Enable Switch", ISABELLE_ALU_TX_EN_REG,
+ 7, 1, 0),
+ SOC_SINGLE("ATX2 Filter Enable Switch", ISABELLE_ALU_TX_EN_REG,
+ 6, 1, 0),
+ SOC_SINGLE("VTX1 Filter Enable Switch", ISABELLE_ALU_TX_EN_REG,
+ 5, 1, 0),
+ SOC_SINGLE("VTX2 Filter Enable Switch", ISABELLE_ALU_TX_EN_REG,
+ 4, 1, 0),
+ SOC_SINGLE("RX1 Filter Enable Switch", ISABELLE_ALU_RX_EN_REG,
+ 5, 1, 0),
+ SOC_SINGLE("RX2 Filter Enable Switch", ISABELLE_ALU_RX_EN_REG,
+ 4, 1, 0),
+ SOC_SINGLE("RX3 Filter Enable Switch", ISABELLE_ALU_RX_EN_REG,
+ 3, 1, 0),
+ SOC_SINGLE("RX4 Filter Enable Switch", ISABELLE_ALU_RX_EN_REG,
+ 2, 1, 0),
+ SOC_SINGLE("RX5 Filter Enable Switch", ISABELLE_ALU_RX_EN_REG,
+ 1, 1, 0),
+ SOC_SINGLE("RX6 Filter Enable Switch", ISABELLE_ALU_RX_EN_REG,
+ 0, 1, 0),
+
+ SOC_SINGLE("ULATX12 Capture Switch", ISABELLE_ULATX12_INTF_CFG_REG,
+ 7, 1, 0),
+
+ SOC_SINGLE("DL12 Playback Switch", ISABELLE_DL12_INTF_CFG_REG,
+ 7, 1, 0),
+ SOC_SINGLE("DL34 Playback Switch", ISABELLE_DL34_INTF_CFG_REG,
+ 7, 1, 0),
+ SOC_SINGLE("DL56 Playback Switch", ISABELLE_DL56_INTF_CFG_REG,
+ 7, 1, 0),
+
+ /* DMIC Switch */
+ SOC_SINGLE("DMIC Switch", ISABELLE_DMIC_CFG_REG, 0, 1, 0),
+};
+
+static const struct snd_soc_dapm_widget isabelle_dapm_widgets[] = {
+ /* Inputs */
+ SND_SOC_DAPM_INPUT("MAINMIC"),
+ SND_SOC_DAPM_INPUT("HSMIC"),
+ SND_SOC_DAPM_INPUT("SUBMIC"),
+ SND_SOC_DAPM_INPUT("LINEIN1"),
+ SND_SOC_DAPM_INPUT("LINEIN2"),
+ SND_SOC_DAPM_INPUT("DMICDAT"),
+
+ /* Outputs */
+ SND_SOC_DAPM_OUTPUT("HSOL"),
+ SND_SOC_DAPM_OUTPUT("HSOR"),
+ SND_SOC_DAPM_OUTPUT("HFL"),
+ SND_SOC_DAPM_OUTPUT("HFR"),
+ SND_SOC_DAPM_OUTPUT("EP"),
+ SND_SOC_DAPM_OUTPUT("LINEOUT1"),
+ SND_SOC_DAPM_OUTPUT("LINEOUT2"),
+
+ SND_SOC_DAPM_PGA("DL1", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DL2", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DL3", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DL4", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DL5", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DL6", SND_SOC_NOPM, 0, 0, NULL, 0),
+
+ /* Analog input muxes for the capture amplifiers */
+ SND_SOC_DAPM_MUX("Analog Left Capture Route",
+ SND_SOC_NOPM, 0, 0, &amic1_control),
+ SND_SOC_DAPM_MUX("Analog Right Capture Route",
+ SND_SOC_NOPM, 0, 0, &amic2_control),
+
+ SND_SOC_DAPM_MUX("Sidetone Audio Playback", SND_SOC_NOPM, 0, 0,
+ &st_audio_control),
+ SND_SOC_DAPM_MUX("Sidetone Voice Playback", SND_SOC_NOPM, 0, 0,
+ &st_voice_control),
+
+ /* AIF */
+ SND_SOC_DAPM_AIF_IN("INTF1_SDI", NULL, 0, ISABELLE_INTF_EN_REG, 7, 0),
+ SND_SOC_DAPM_AIF_IN("INTF2_SDI", NULL, 0, ISABELLE_INTF_EN_REG, 6, 0),
+
+ SND_SOC_DAPM_AIF_OUT("INTF1_SDO", NULL, 0, ISABELLE_INTF_EN_REG, 5, 0),
+ SND_SOC_DAPM_AIF_OUT("INTF2_SDO", NULL, 0, ISABELLE_INTF_EN_REG, 4, 0),
+
+ SND_SOC_DAPM_OUT_DRV("ULATX1", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("ULATX2", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("ULVTX1", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("ULVTX2", SND_SOC_NOPM, 0, 0, NULL, 0),
+
+ /* Analog Capture PGAs */
+ SND_SOC_DAPM_PGA("MicAmp1", ISABELLE_AMIC_CFG_REG, 5, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("MicAmp2", ISABELLE_AMIC_CFG_REG, 4, 0, NULL, 0),
+
+ /* Auxiliary FM PGAs */
+ SND_SOC_DAPM_PGA("APGA1", ISABELLE_APGA_CFG_REG, 7, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("APGA2", ISABELLE_APGA_CFG_REG, 6, 0, NULL, 0),
+
+ /* ADCs */
+ SND_SOC_DAPM_ADC("ADC1", "Left Front Capture",
+ ISABELLE_AMIC_CFG_REG, 7, 0),
+ SND_SOC_DAPM_ADC("ADC2", "Right Front Capture",
+ ISABELLE_AMIC_CFG_REG, 6, 0),
+
+ /* Microphone Bias */
+ SND_SOC_DAPM_SUPPLY("Headset Mic Bias", ISABELLE_ABIAS_CFG_REG,
+ 3, 0, NULL, 0),
+ SND_SOC_DAPM_SUPPLY("Main Mic Bias", ISABELLE_ABIAS_CFG_REG,
+ 2, 0, NULL, 0),
+ SND_SOC_DAPM_SUPPLY("Digital Mic1 Bias",
+ ISABELLE_DBIAS_CFG_REG, 3, 0, NULL, 0),
+ SND_SOC_DAPM_SUPPLY("Digital Mic2 Bias",
+ ISABELLE_DBIAS_CFG_REG, 2, 0, NULL, 0),
+
+ /* Mixers */
+ SND_SOC_DAPM_MIXER("Headset Left Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_hs_left_mixer_controls,
+ ARRAY_SIZE(isabelle_hs_left_mixer_controls)),
+ SND_SOC_DAPM_MIXER("Headset Right Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_hs_right_mixer_controls,
+ ARRAY_SIZE(isabelle_hs_right_mixer_controls)),
+ SND_SOC_DAPM_MIXER("Handsfree Left Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_hf_left_mixer_controls,
+ ARRAY_SIZE(isabelle_hf_left_mixer_controls)),
+ SND_SOC_DAPM_MIXER("Handsfree Right Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_hf_right_mixer_controls,
+ ARRAY_SIZE(isabelle_hf_right_mixer_controls)),
+ SND_SOC_DAPM_MIXER("LINEOUT1 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_aux_left_mixer_controls,
+ ARRAY_SIZE(isabelle_aux_left_mixer_controls)),
+ SND_SOC_DAPM_MIXER("LINEOUT2 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_aux_right_mixer_controls,
+ ARRAY_SIZE(isabelle_aux_right_mixer_controls)),
+ SND_SOC_DAPM_MIXER("Earphone Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_ep_mixer_controls,
+ ARRAY_SIZE(isabelle_ep_mixer_controls)),
+
+ SND_SOC_DAPM_MIXER("DPGA1L Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_dpga1_left_mixer_controls,
+ ARRAY_SIZE(isabelle_dpga1_left_mixer_controls)),
+ SND_SOC_DAPM_MIXER("DPGA1R Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_dpga1_right_mixer_controls,
+ ARRAY_SIZE(isabelle_dpga1_right_mixer_controls)),
+ SND_SOC_DAPM_MIXER("DPGA2L Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_dpga2_left_mixer_controls,
+ ARRAY_SIZE(isabelle_dpga2_left_mixer_controls)),
+ SND_SOC_DAPM_MIXER("DPGA2R Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_dpga2_right_mixer_controls,
+ ARRAY_SIZE(isabelle_dpga2_right_mixer_controls)),
+ SND_SOC_DAPM_MIXER("DPGA3L Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_dpga3_left_mixer_controls,
+ ARRAY_SIZE(isabelle_dpga3_left_mixer_controls)),
+ SND_SOC_DAPM_MIXER("DPGA3R Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_dpga3_right_mixer_controls,
+ ARRAY_SIZE(isabelle_dpga3_right_mixer_controls)),
+
+ SND_SOC_DAPM_MIXER("RX1 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_rx1_mixer_controls,
+ ARRAY_SIZE(isabelle_rx1_mixer_controls)),
+ SND_SOC_DAPM_MIXER("RX2 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_rx2_mixer_controls,
+ ARRAY_SIZE(isabelle_rx2_mixer_controls)),
+ SND_SOC_DAPM_MIXER("RX3 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_rx3_mixer_controls,
+ ARRAY_SIZE(isabelle_rx3_mixer_controls)),
+ SND_SOC_DAPM_MIXER("RX4 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_rx4_mixer_controls,
+ ARRAY_SIZE(isabelle_rx4_mixer_controls)),
+ SND_SOC_DAPM_MIXER("RX5 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_rx5_mixer_controls,
+ ARRAY_SIZE(isabelle_rx5_mixer_controls)),
+ SND_SOC_DAPM_MIXER("RX6 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_rx6_mixer_controls,
+ ARRAY_SIZE(isabelle_rx6_mixer_controls)),
+
+ /* DACs */
+ SND_SOC_DAPM_DAC("DAC1L", "Headset Playback", ISABELLE_DAC_CFG_REG,
+ 5, 0),
+ SND_SOC_DAPM_DAC("DAC1R", "Headset Playback", ISABELLE_DAC_CFG_REG,
+ 4, 0),
+ SND_SOC_DAPM_DAC("DAC2L", "Handsfree Playback", ISABELLE_DAC_CFG_REG,
+ 3, 0),
+ SND_SOC_DAPM_DAC("DAC2R", "Handsfree Playback", ISABELLE_DAC_CFG_REG,
+ 2, 0),
+ SND_SOC_DAPM_DAC("DAC3L", "Lineout Playback", ISABELLE_DAC_CFG_REG,
+ 1, 0),
+ SND_SOC_DAPM_DAC("DAC3R", "Lineout Playback", ISABELLE_DAC_CFG_REG,
+ 0, 0),
+
+ /* Analog Playback PGAs */
+ SND_SOC_DAPM_PGA("Sidetone Audio PGA", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("Sidetone Voice PGA", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("HF Left PGA", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("HF Right PGA", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DPGA1L", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DPGA1R", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DPGA2L", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DPGA2R", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DPGA3L", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DPGA3R", SND_SOC_NOPM, 0, 0, NULL, 0),
+
+ /* Analog Playback Mux */
+ SND_SOC_DAPM_MUX("RX1 Playback", ISABELLE_ALU_RX_EN_REG, 5, 0,
+ &rx1_mux_controls),
+ SND_SOC_DAPM_MUX("RX2 Playback", ISABELLE_ALU_RX_EN_REG, 4, 0,
+ &rx2_mux_controls),
+
+ /* TX Select */
+ SND_SOC_DAPM_MUX("ATX Select", ISABELLE_TX_INPUT_CFG_REG,
+ 7, 0, &atx_mux_controls),
+ SND_SOC_DAPM_MUX("VTX Select", ISABELLE_TX_INPUT_CFG_REG,
+ 6, 0, &vtx_mux_controls),
+
+ SND_SOC_DAPM_SWITCH("Earphone Playback", SND_SOC_NOPM, 0, 0,
+ &ep_path_enable_control),
+
+ /* Output Drivers */
+ SND_SOC_DAPM_OUT_DRV("HS Left Driver", ISABELLE_HSDRV_CFG2_REG,
+ 1, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("HS Right Driver", ISABELLE_HSDRV_CFG2_REG,
+ 0, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("LINEOUT1 Left Driver", ISABELLE_LINEAMP_CFG_REG,
+ 1, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("LINEOUT2 Right Driver", ISABELLE_LINEAMP_CFG_REG,
+ 0, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("Earphone Driver", ISABELLE_EARDRV_CFG2_REG,
+ 1, 0, NULL, 0),
+
+ SND_SOC_DAPM_OUT_DRV("HF Left Driver", ISABELLE_HFDRV_CFG_REG,
+ 1, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("HF Right Driver", ISABELLE_HFDRV_CFG_REG,
+ 0, 0, NULL, 0),
+};
+
+static const struct snd_soc_dapm_route isabelle_intercon[] = {
+ /* Interface mapping */
+ { "DL1", "DL12 Playback Switch", "INTF1_SDI" },
+ { "DL2", "DL12 Playback Switch", "INTF1_SDI" },
+ { "DL3", "DL34 Playback Switch", "INTF1_SDI" },
+ { "DL4", "DL34 Playback Switch", "INTF1_SDI" },
+ { "DL5", "DL56 Playback Switch", "INTF1_SDI" },
+ { "DL6", "DL56 Playback Switch", "INTF1_SDI" },
+
+ { "DL1", "DL12 Playback Switch", "INTF2_SDI" },
+ { "DL2", "DL12 Playback Switch", "INTF2_SDI" },
+ { "DL3", "DL34 Playback Switch", "INTF2_SDI" },
+ { "DL4", "DL34 Playback Switch", "INTF2_SDI" },
+ { "DL5", "DL56 Playback Switch", "INTF2_SDI" },
+ { "DL6", "DL56 Playback Switch", "INTF2_SDI" },
+
+ /* Input side mapping */
+ { "Sidetone Audio PGA", NULL, "Sidetone Audio Playback" },
+ { "Sidetone Voice PGA", NULL, "Sidetone Voice Playback" },
+
+ { "RX1 Mixer", "ST1 Playback Switch", "Sidetone Audio PGA" },
+
+ { "RX1 Mixer", "ST1 Playback Switch", "Sidetone Voice PGA" },
+ { "RX1 Mixer", "DL1 Playback Switch", "DL1" },
+
+ { "RX2 Mixer", "ST2 Playback Switch", "Sidetone Audio PGA" },
+
+ { "RX2 Mixer", "ST2 Playback Switch", "Sidetone Voice PGA" },
+ { "RX2 Mixer", "DL2 Playback Switch", "DL2" },
+
+ { "RX3 Mixer", "ST1 Playback Switch", "Sidetone Voice PGA" },
+ { "RX3 Mixer", "DL3 Playback Switch", "DL3" },
+
+ { "RX4 Mixer", "ST2 Playback Switch", "Sidetone Voice PGA" },
+ { "RX4 Mixer", "DL4 Playback Switch", "DL4" },
+
+ { "RX5 Mixer", "ST1 Playback Switch", "Sidetone Voice PGA" },
+ { "RX5 Mixer", "DL5 Playback Switch", "DL5" },
+
+ { "RX6 Mixer", "ST2 Playback Switch", "Sidetone Voice PGA" },
+ { "RX6 Mixer", "DL6 Playback Switch", "DL6" },
+
+ /* Capture path */
+ { "Analog Left Capture Route", "Headset Mic", "HSMIC" },
+ { "Analog Left Capture Route", "Main Mic", "MAINMIC" },
+ { "Analog Left Capture Route", "Aux/FM Left", "LINEIN1" },
+
+ { "Analog Right Capture Route", "Sub Mic", "SUBMIC" },
+ { "Analog Right Capture Route", "Aux/FM Right", "LINEIN2" },
+
+ { "MicAmp1", NULL, "Analog Left Capture Route" },
+ { "MicAmp2", NULL, "Analog Right Capture Route" },
+
+ { "ADC1", NULL, "MicAmp1" },
+ { "ADC2", NULL, "MicAmp2" },
+
+ { "ATX Select", "AMIC1", "ADC1" },
+ { "ATX Select", "DMIC", "DMICDAT" },
+ { "ATX Select", "AMIC2", "ADC2" },
+
+ { "VTX Select", "AMIC1", "ADC1" },
+ { "VTX Select", "DMIC", "DMICDAT" },
+ { "VTX Select", "AMIC2", "ADC2" },
+
+ { "ULATX1", "ATX1 Filter Enable Switch", "ATX Select" },
+ { "ULATX1", "ATX1 Filter Bypass Switch", "ATX Select" },
+ { "ULATX2", "ATX2 Filter Enable Switch", "ATX Select" },
+ { "ULATX2", "ATX2 Filter Bypass Switch", "ATX Select" },
+
+ { "ULVTX1", "VTX1 Filter Enable Switch", "VTX Select" },
+ { "ULVTX1", "VTX1 Filter Bypass Switch", "VTX Select" },
+ { "ULVTX2", "VTX2 Filter Enable Switch", "VTX Select" },
+ { "ULVTX2", "VTX2 Filter Bypass Switch", "VTX Select" },
+
+ { "INTF1_SDO", "ULATX12 Capture Switch", "ULATX1" },
+ { "INTF1_SDO", "ULATX12 Capture Switch", "ULATX2" },
+ { "INTF2_SDO", "ULATX12 Capture Switch", "ULATX1" },
+ { "INTF2_SDO", "ULATX12 Capture Switch", "ULATX2" },
+
+ { "INTF1_SDO", NULL, "ULVTX1" },
+ { "INTF1_SDO", NULL, "ULVTX2" },
+ { "INTF2_SDO", NULL, "ULVTX1" },
+ { "INTF2_SDO", NULL, "ULVTX2" },
+
+ /* AFM Path */
+ { "APGA1", NULL, "LINEIN1" },
+ { "APGA2", NULL, "LINEIN2" },
+
+ { "RX1 Playback", "VRX1 Filter Bypass Switch", "RX1 Mixer" },
+ { "RX1 Playback", "ARX1 Filter Bypass Switch", "RX1 Mixer" },
+ { "RX1 Playback", "RX1 Filter Enable Switch", "RX1 Mixer" },
+
+ { "RX2 Playback", "VRX2 Filter Bypass Switch", "RX2 Mixer" },
+ { "RX2 Playback", "ARX2 Filter Bypass Switch", "RX2 Mixer" },
+ { "RX2 Playback", "RX2 Filter Enable Switch", "RX2 Mixer" },
+
+ { "RX3 Playback", "ARX3 Filter Bypass Switch", "RX3 Mixer" },
+ { "RX3 Playback", "RX3 Filter Enable Switch", "RX3 Mixer" },
+
+ { "RX4 Playback", "ARX4 Filter Bypass Switch", "RX4 Mixer" },
+ { "RX4 Playback", "RX4 Filter Enable Switch", "RX4 Mixer" },
+
+ { "RX5 Playback", "ARX5 Filter Bypass Switch", "RX5 Mixer" },
+ { "RX5 Playback", "RX5 Filter Enable Switch", "RX5 Mixer" },
+
+ { "RX6 Playback", "ARX6 Filter Bypass Switch", "RX6 Mixer" },
+ { "RX6 Playback", "RX6 Filter Enable Switch", "RX6 Mixer" },
+
+ { "DPGA1L Mixer", "RX1 Playback Switch", "RX1 Playback" },
+ { "DPGA1L Mixer", "RX3 Playback Switch", "RX3 Playback" },
+ { "DPGA1L Mixer", "RX5 Playback Switch", "RX5 Playback" },
+
+ { "DPGA1R Mixer", "RX2 Playback Switch", "RX2 Playback" },
+ { "DPGA1R Mixer", "RX4 Playback Switch", "RX4 Playback" },
+ { "DPGA1R Mixer", "RX6 Playback Switch", "RX6 Playback" },
+
+ { "DPGA1L", NULL, "DPGA1L Mixer" },
+ { "DPGA1R", NULL, "DPGA1R Mixer" },
+
+ { "DAC1L", NULL, "DPGA1L" },
+ { "DAC1R", NULL, "DPGA1R" },
+
+ { "DPGA2L Mixer", "RX1 Playback Switch", "RX1 Playback" },
+ { "DPGA2L Mixer", "RX2 Playback Switch", "RX2 Playback" },
+ { "DPGA2L Mixer", "RX3 Playback Switch", "RX3 Playback" },
+ { "DPGA2L Mixer", "RX4 Playback Switch", "RX4 Playback" },
+ { "DPGA2L Mixer", "RX5 Playback Switch", "RX5 Playback" },
+ { "DPGA2L Mixer", "RX6 Playback Switch", "RX6 Playback" },
+
+ { "DPGA2R Mixer", "RX2 Playback Switch", "RX2 Playback" },
+ { "DPGA2R Mixer", "RX4 Playback Switch", "RX4 Playback" },
+ { "DPGA2R Mixer", "RX6 Playback Switch", "RX6 Playback" },
+
+ { "DPGA2L", NULL, "DPGA2L Mixer" },
+ { "DPGA2R", NULL, "DPGA2R Mixer" },
+
+ { "DAC2L", NULL, "DPGA2L" },
+ { "DAC2R", NULL, "DPGA2R" },
+
+ { "DPGA3L Mixer", "RX1 Playback Switch", "RX1 Playback" },
+ { "DPGA3L Mixer", "RX3 Playback Switch", "RX3 Playback" },
+ { "DPGA3L Mixer", "RX5 Playback Switch", "RX5 Playback" },
+
+ { "DPGA3R Mixer", "RX2 Playback Switch", "RX2 Playback" },
+ { "DPGA3R Mixer", "RX4 Playback Switch", "RX4 Playback" },
+ { "DPGA3R Mixer", "RX6 Playback Switch", "RX6 Playback" },
+
+ { "DPGA3L", NULL, "DPGA3L Mixer" },
+ { "DPGA3R", NULL, "DPGA3R Mixer" },
+
+ { "DAC3L", NULL, "DPGA3L" },
+ { "DAC3R", NULL, "DPGA3R" },
+
+ { "Headset Left Mixer", "DAC1L Playback Switch", "DAC1L" },
+ { "Headset Left Mixer", "APGA1 Playback Switch", "APGA1" },
+
+ { "Headset Right Mixer", "DAC1R Playback Switch", "DAC1R" },
+ { "Headset Right Mixer", "APGA2 Playback Switch", "APGA2" },
+
+ { "HS Left Driver", NULL, "Headset Left Mixer" },
+ { "HS Right Driver", NULL, "Headset Right Mixer" },
+
+ { "HSOL", NULL, "HS Left Driver" },
+ { "HSOR", NULL, "HS Right Driver" },
+
+ /* Earphone playback path */
+ { "Earphone Mixer", "DAC2L Playback Switch", "DAC2L" },
+ { "Earphone Mixer", "APGA1 Playback Switch", "APGA1" },
+
+ { "Earphone Playback", "Switch", "Earphone Mixer" },
+ { "Earphone Driver", NULL, "Earphone Playback" },
+ { "EP", NULL, "Earphone Driver" },
+
+ { "Handsfree Left Mixer", "DAC2L Playback Switch", "DAC2L" },
+ { "Handsfree Left Mixer", "APGA1 Playback Switch", "APGA1" },
+
+ { "Handsfree Right Mixer", "DAC2R Playback Switch", "DAC2R" },
+ { "Handsfree Right Mixer", "APGA2 Playback Switch", "APGA2" },
+
+ { "HF Left PGA", NULL, "Handsfree Left Mixer" },
+ { "HF Right PGA", NULL, "Handsfree Right Mixer" },
+
+ { "HF Left Driver", NULL, "HF Left PGA" },
+ { "HF Right Driver", NULL, "HF Right PGA" },
+
+ { "HFL", NULL, "HF Left Driver" },
+ { "HFR", NULL, "HF Right Driver" },
+
+ { "LINEOUT1 Mixer", "DAC3L Playback Switch", "DAC3L" },
+ { "LINEOUT1 Mixer", "APGA1 Playback Switch", "APGA1" },
+
+ { "LINEOUT2 Mixer", "DAC3R Playback Switch", "DAC3R" },
+ { "LINEOUT2 Mixer", "APGA2 Playback Switch", "APGA2" },
+
+ { "LINEOUT1 Driver", NULL, "LINEOUT1 Mixer" },
+ { "LINEOUT2 Driver", NULL, "LINEOUT2 Mixer" },
+
+ { "LINEOUT1", NULL, "LINEOUT1 Driver" },
+ { "LINEOUT2", NULL, "LINEOUT2 Driver" },
+};
+
+static int isabelle_hs_mute(struct snd_soc_dai *dai, int mute)
+{
+ snd_soc_update_bits(dai->codec, ISABELLE_DAC1_SOFTRAMP_REG,
+ BIT(4), (mute ? BIT(4) : 0));
+
+ return 0;
+}
+
+static int isabelle_hf_mute(struct snd_soc_dai *dai, int mute)
+{
+ snd_soc_update_bits(dai->codec, ISABELLE_DAC2_SOFTRAMP_REG,
+ BIT(4), (mute ? BIT(4) : 0));
+
+ return 0;
+}
+
+static int isabelle_line_mute(struct snd_soc_dai *dai, int mute)
+{
+ snd_soc_update_bits(dai->codec, ISABELLE_DAC3_SOFTRAMP_REG,
+ BIT(4), (mute ? BIT(4) : 0));
+
+ return 0;
+}
+
+static int isabelle_set_bias_level(struct snd_soc_codec *codec,
+ enum snd_soc_bias_level level)
+{
+ struct isabelle_priv *isabelle = snd_soc_codec_get_drvdata(codec);
+
+ switch (level) {
+ case SND_SOC_BIAS_ON:
+ break;
+ case SND_SOC_BIAS_PREPARE:
+ break;
+
+ case SND_SOC_BIAS_STANDBY:
+ if (codec->dapm.bias_level == SND_SOC_BIAS_OFF)
+ regcache_sync(isabelle->regmap);
+
+ snd_soc_update_bits(codec, ISABELLE_PWR_EN_REG,
+ ISABELLE_CHIP_EN, BIT(0));
+ break;
+
+ case SND_SOC_BIAS_OFF:
+ snd_soc_update_bits(codec, ISABELLE_PWR_EN_REG,
+ ISABELLE_CHIP_EN, 0);
+ break;
+ }
+
+ codec->dapm.bias_level = level;
+
+ return 0;
+}
+
+static int isabelle_hw_params(struct snd_pcm_substream *substream,
+ struct snd_pcm_hw_params *params,
+ struct snd_soc_dai *dai)
+{
+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
+ struct snd_soc_codec *codec = rtd->codec;
+ u16 aif = 0;
+ unsigned int fs_val = 0;
+
+ switch (params_rate(params)) {
+ case 8000:
+ fs_val = ISABELLE_FS_RATE_8;
+ break;
+ case 11025:
+ fs_val = ISABELLE_FS_RATE_11;
+ break;
+ case 12000:
+ fs_val = ISABELLE_FS_RATE_12;
+ break;
+ case 16000:
+ fs_val = ISABELLE_FS_RATE_16;
+ break;
+ case 22050:
+ fs_val = ISABELLE_FS_RATE_22;
+ break;
+ case 24000:
+ fs_val = ISABELLE_FS_RATE_24;
+ break;
+ case 32000:
+ fs_val = ISABELLE_FS_RATE_32;
+ break;
+ case 44100:
+ fs_val = ISABELLE_FS_RATE_44;
+ break;
+ case 48000:
+ fs_val = ISABELLE_FS_RATE_48;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ snd_soc_update_bits(codec, ISABELLE_FS_RATE_CFG_REG,
+ ISABELLE_FS_RATE_MASK, fs_val);
+
+ /* bit size */
+ switch (params_format(params)) {
+ case SNDRV_PCM_FORMAT_S20_3LE:
+ aif |= ISABELLE_AIF_LENGTH_20;
+ break;
+ case SNDRV_PCM_FORMAT_S32_LE:
+ aif |= ISABELLE_AIF_LENGTH_32;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ snd_soc_update_bits(codec, ISABELLE_INTF_CFG_REG,
+ ISABELLE_AIF_LENGTH_MASK, aif);
+
+ return 0;
+}
+
+static int isabelle_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt)
+{
+ struct snd_soc_codec *codec = codec_dai->codec;
+ unsigned int aif_val = 0;
+
+ switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
+ case SND_SOC_DAIFMT_CBS_CFS:
+ aif_val &= ~ISABELLE_AIF_MS;
+ break;
+ case SND_SOC_DAIFMT_CBM_CFM:
+ aif_val |= ISABELLE_AIF_MS;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
+ case SND_SOC_DAIFMT_I2S:
+ aif_val |= ISABELLE_I2S_MODE;
+ break;
+ case SND_SOC_DAIFMT_LEFT_J:
+ aif_val |= ISABELLE_LEFT_J_MODE;
+ break;
+ case SND_SOC_DAIFMT_PDM:
+ aif_val |= ISABELLE_PDM_MODE;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ snd_soc_update_bits(codec, ISABELLE_INTF_CFG_REG,
+ (ISABELLE_AIF_MS | ISABELLE_AIF_FMT_MASK), aif_val);
+
+ return 0;
+}
+
+/* Rates supported by Isabelle driver */
+#define ISABELLE_RATES SNDRV_PCM_RATE_8000_48000
+
+/* Formates supported by Isabelle driver. */
+#define ISABELLE_FORMATS (SNDRV_PCM_FMTBIT_S20_3LE |\
+ SNDRV_PCM_FMTBIT_S32_LE)
+
+static struct snd_soc_dai_ops isabelle_hs_dai_ops = {
+ .hw_params = isabelle_hw_params,
+ .set_fmt = isabelle_set_dai_fmt,
+ .digital_mute = isabelle_hs_mute,
+};
+
+static struct snd_soc_dai_ops isabelle_hf_dai_ops = {
+ .hw_params = isabelle_hw_params,
+ .set_fmt = isabelle_set_dai_fmt,
+ .digital_mute = isabelle_hf_mute,
+};
+
+static struct snd_soc_dai_ops isabelle_line_dai_ops = {
+ .hw_params = isabelle_hw_params,
+ .set_fmt = isabelle_set_dai_fmt,
+ .digital_mute = isabelle_line_mute,
+};
+
+static struct snd_soc_dai_ops isabelle_ul_dai_ops = {
+ .hw_params = isabelle_hw_params,
+ .set_fmt = isabelle_set_dai_fmt,
+};
+
+/* ISABELLE dai structure */
+struct snd_soc_dai_driver isabelle_dai[] = {
+ {
+ .name = "isabelle-dl1",
+ .playback = {
+ .stream_name = "Headset Playback",
+ .channels_min = 1,
+ .channels_max = 2,
+ .rates = ISABELLE_RATES,
+ .formats = ISABELLE_FORMATS,
+ },
+ .ops = &isabelle_hs_dai_ops,
+ },
+ {
+ .name = "isabelle-dl2",
+ .playback = {
+ .stream_name = "Handsfree Playback",
+ .channels_min = 1,
+ .channels_max = 2,
+ .rates = ISABELLE_RATES,
+ .formats = ISABELLE_FORMATS,
+ },
+ .ops = &isabelle_hf_dai_ops,
+ },
+ {
+ .name = "isabelle-lineout",
+ .playback = {
+ .stream_name = "Lineout Playback",
+ .channels_min = 1,
+ .channels_max = 2,
+ .rates = ISABELLE_RATES,
+ .formats = ISABELLE_FORMATS,
+ },
+ .ops = &isabelle_line_dai_ops,
+ },
+ {
+ .name = "isabelle-ul",
+ .capture = {
+ .stream_name = "Capture",
+ .channels_min = 1,
+ .channels_max = 2,
+ .rates = ISABELLE_RATES,
+ .formats = ISABELLE_FORMATS,
+ },
+ .ops = &isabelle_ul_dai_ops,
+ },
+};
+
+#ifdef CONFIG_PM
+static int isabelle_suspend(struct snd_soc_codec *codec)
+{
+ isabelle_set_bias_level(codec, SND_SOC_BIAS_OFF);
+ return 0;
+}
+
+static int isabelle_resume(struct snd_soc_codec *codec)
+{
+ isabelle_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
+ isabelle_set_bias_level(codec, codec->dapm.suspend_bias_level);
+
+ return 0;
+}
+#else
+#define isabelle_suspend NULL
+#define isabelle_resume NULL
+#endif
+
+static int isabelle_probe(struct snd_soc_codec *codec)
+{
+ struct isabelle_priv *isabelle = snd_soc_codec_get_drvdata(codec);
+ int ret = 0;
+
+ codec->control_data = isabelle->regmap;
+
+ ret = snd_soc_codec_set_cache_io(codec, 8, 8, SND_SOC_REGMAP);
+ if (ret < 0) {
+ dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
+ return ret;
+ }
+
+ return 0;
+}
+
+/* power down chip */
+static int isabelle_remove(struct snd_soc_codec *codec)
+{
+ isabelle_set_bias_level(codec, SND_SOC_BIAS_OFF);
+ return 0;
+}
+
+static struct snd_soc_codec_driver soc_codec_dev_isabelle = {
+ .probe = isabelle_probe,
+ .remove = isabelle_remove,
+ .suspend = isabelle_suspend,
+ .resume = isabelle_resume,
+ .set_bias_level = isabelle_set_bias_level,
+ .controls = isabelle_snd_controls,
+ .num_controls = ARRAY_SIZE(isabelle_snd_controls),
+ .dapm_widgets = isabelle_dapm_widgets,
+ .num_dapm_widgets = ARRAY_SIZE(isabelle_dapm_widgets),
+ .dapm_routes = isabelle_intercon,
+ .num_dapm_routes = ARRAY_SIZE(isabelle_intercon),
+ .idle_bias_off = true,
+};
+
+static const struct regmap_config isabelle_regmap_config = {
+ .reg_bits = 8,
+ .val_bits = 8,
+
+ .max_register = ISABELLE_MAX_REGISTER,
+ .reg_defaults = isabelle_reg_defs,
+ .num_reg_defaults = ARRAY_SIZE(isabelle_reg_defs),
+ .cache_type = REGCACHE_RBTREE,
+};
+
+static int __devinit isabelle_i2c_probe(struct i2c_client *i2c,
+ const struct i2c_device_id *id)
+{
+ struct isabelle_priv *isabelle;
+ int ret = 0;
+
+ isabelle = devm_kzalloc(&i2c->dev, sizeof(struct isabelle_priv),
+ GFP_KERNEL);
+
+ if (isabelle == NULL)
+ return -ENOMEM;
+
+ i2c_set_clientdata(i2c, isabelle);
+
+ isabelle->regmap = regmap_init_i2c(i2c, &isabelle_regmap_config);
+ if (IS_ERR(isabelle->regmap)) {
+ ret = PTR_ERR(isabelle->regmap);
+ dev_err(&i2c->dev, "Failed to allocate register map: %d\n",
+ ret);
+ return ret;
+ }
+
+ ret = snd_soc_register_codec(&i2c->dev,
+ &soc_codec_dev_isabelle, isabelle_dai,
+ ARRAY_SIZE(isabelle_dai));
+ if (ret < 0) {
+ dev_err(&i2c->dev, "Failed to register codec: %d\n", ret);
+ regmap_exit(isabelle->regmap);
+ return ret;
+ }
+
+ return ret;
+}
+
+static int __devexit isabelle_i2c_remove(struct i2c_client *client)
+{
+ struct isabelle_priv *isabelle = i2c_get_clientdata(client);
+
+ snd_soc_unregister_codec(&client->dev);
+ regmap_exit(isabelle->regmap);
+ return 0;
+}
+
+static const struct i2c_device_id isabelle_i2c_id[] = {
+ { "isabelle", 0 },
+ { }
+};
+MODULE_DEVICE_TABLE(i2c, isabelle_i2c_id);
+
+static struct i2c_driver isabelle_i2c_driver = {
+ .driver = {
+ .name = "isabelle",
+ .owner = THIS_MODULE,
+ },
+ .probe = isabelle_i2c_probe,
+ .remove = __devexit_p(isabelle_i2c_remove),
+ .id_table = isabelle_i2c_id,
+};
+
+module_i2c_driver(isabelle_i2c_driver);
+
+MODULE_DESCRIPTION("ASoC ISABELLE driver");
+MODULE_AUTHOR("Vishwas A Deshpande <vishwas.a.deshpande(a)ti.com>");
+MODULE_AUTHOR("M R Swami Reddy <MR.Swami.Reddy(a)ti.com>");
+MODULE_LICENSE("GPL v2");
diff --git a/sound/soc/codecs/isabelle.h b/sound/soc/codecs/isabelle.h
new file mode 100644
index 0000000..96d839a
--- /dev/null
+++ b/sound/soc/codecs/isabelle.h
@@ -0,0 +1,143 @@
+/*
+ * isabelle.h - Low power high fidelity audio codec driver header file
+ *
+ * Copyright (c) 2012 Texas Instruments, Inc
+ *
+ * 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; version 2 of the License.
+ *
+ */
+
+#ifndef _ISABELLE_H
+#define _ISABELLE_H
+
+#include <linux/bitops.h>
+
+/* ISABELLE REGISTERS */
+
+#define ISABELLE_PWR_CFG_REG 0x01
+#define ISABELLE_PWR_EN_REG 0x02
+#define ISABELLE_PS_EN1_REG 0x03
+#define ISABELLE_INT1_STATUS_REG 0x04
+#define ISABELLE_INT1_MASK_REG 0x05
+#define ISABELLE_INT2_STATUS_REG 0x06
+#define ISABELLE_INT2_MASK_REG 0x07
+#define ISABELLE_HKCTL1_REG 0x08
+#define ISABELLE_HKCTL2_REG 0x09
+#define ISABELLE_HKCTL3_REG 0x0A
+#define ISABELLE_ACCDET_STATUS_REG 0x0B
+#define ISABELLE_BUTTON_ID_REG 0x0C
+#define ISABELLE_PLL_CFG_REG 0x10
+#define ISABELLE_PLL_EN_REG 0x11
+#define ISABELLE_FS_RATE_CFG_REG 0x12
+#define ISABELLE_INTF_CFG_REG 0x13
+#define ISABELLE_INTF_EN_REG 0x14
+#define ISABELLE_ULATX12_INTF_CFG_REG 0x15
+#define ISABELLE_DL12_INTF_CFG_REG 0x16
+#define ISABELLE_DL34_INTF_CFG_REG 0x17
+#define ISABELLE_DL56_INTF_CFG_REG 0x18
+#define ISABELLE_ATX_STPGA1_CFG_REG 0x19
+#define ISABELLE_ATX_STPGA2_CFG_REG 0x1A
+#define ISABELLE_VTX_STPGA1_CFG_REG 0x1B
+#define ISABELLE_VTX2_STPGA2_CFG_REG 0x1C
+#define ISABELLE_ATX1_DPGA_REG 0x1D
+#define ISABELLE_ATX2_DPGA_REG 0x1E
+#define ISABELLE_VTX1_DPGA_REG 0x1F
+#define ISABELLE_VTX2_DPGA_REG 0x20
+#define ISABELLE_TX_INPUT_CFG_REG 0x21
+#define ISABELLE_RX_INPUT_CFG_REG 0x22
+#define ISABELLE_RX_INPUT_CFG2_REG 0x23
+#define ISABELLE_VOICE_HPF_CFG_REG 0x24
+#define ISABELLE_AUDIO_HPF_CFG_REG 0x25
+#define ISABELLE_RX1_DPGA_REG 0x26
+#define ISABELLE_RX2_DPGA_REG 0x27
+#define ISABELLE_RX3_DPGA_REG 0x28
+#define ISABELLE_RX4_DPGA_REG 0x29
+#define ISABELLE_RX5_DPGA_REG 0x2A
+#define ISABELLE_RX6_DPGA_REG 0x2B
+#define ISABELLE_ALU_TX_EN_REG 0x2C
+#define ISABELLE_ALU_RX_EN_REG 0x2D
+#define ISABELLE_IIR_RESYNC_REG 0x2E
+#define ISABELLE_ABIAS_CFG_REG 0x30
+#define ISABELLE_DBIAS_CFG_REG 0x31
+#define ISABELLE_MIC1_GAIN_REG 0x32
+#define ISABELLE_MIC2_GAIN_REG 0x33
+#define ISABELLE_AMIC_CFG_REG 0x34
+#define ISABELLE_DMIC_CFG_REG 0x35
+#define ISABELLE_APGA_GAIN_REG 0x36
+#define ISABELLE_APGA_CFG_REG 0x37
+#define ISABELLE_TX_GAIN_DLY_REG 0x38
+#define ISABELLE_RX_GAIN_DLY_REG 0x39
+#define ISABELLE_RX_PWR_CTRL_REG 0x3A
+#define ISABELLE_DPGA1LR_IN_SEL_REG 0x3B
+#define ISABELLE_DPGA1L_GAIN_REG 0x3C
+#define ISABELLE_DPGA1R_GAIN_REG 0x3D
+#define ISABELLE_DPGA2L_IN_SEL_REG 0x3E
+#define ISABELLE_DPGA2R_IN_SEL_REG 0x3F
+#define ISABELLE_DPGA2L_GAIN_REG 0x40
+#define ISABELLE_DPGA2R_GAIN_REG 0x41
+#define ISABELLE_DPGA3LR_IN_SEL_REG 0x42
+#define ISABELLE_DPGA3L_GAIN_REG 0x43
+#define ISABELLE_DPGA3R_GAIN_REG 0x44
+#define ISABELLE_DAC1_SOFTRAMP_REG 0x45
+#define ISABELLE_DAC2_SOFTRAMP_REG 0x46
+#define ISABELLE_DAC3_SOFTRAMP_REG 0x47
+#define ISABELLE_DAC_CFG_REG 0x48
+#define ISABELLE_EARDRV_CFG1_REG 0x49
+#define ISABELLE_EARDRV_CFG2_REG 0x4A
+#define ISABELLE_HSDRV_GAIN_REG 0x4B
+#define ISABELLE_HSDRV_CFG1_REG 0x4C
+#define ISABELLE_HSDRV_CFG2_REG 0x4D
+#define ISABELLE_HS_NG_CFG1_REG 0x4E
+#define ISABELLE_HS_NG_CFG2_REG 0x4F
+#define ISABELLE_LINEAMP_GAIN_REG 0x50
+#define ISABELLE_LINEAMP_CFG_REG 0x51
+#define ISABELLE_HFL_VOL_CTRL_REG 0x52
+#define ISABELLE_HFL_SFTVOL_CTRL_REG 0x53
+#define ISABELLE_HFL_LIM_CTRL_1_REG 0x54
+#define ISABELLE_HFL_LIM_CTRL_2_REG 0x55
+#define ISABELLE_HFR_VOL_CTRL_REG 0x56
+#define ISABELLE_HFR_SFTVOL_CTRL_REG 0x57
+#define ISABELLE_HFR_LIM_CTRL_1_REG 0x58
+#define ISABELLE_HFR_LIM_CTRL_2_REG 0x59
+#define ISABELLE_HF_MODE_REG 0x5A
+#define ISABELLE_HFLPGA_CFG_REG 0x5B
+#define ISABELLE_HFRPGA_CFG_REG 0x5C
+#define ISABELLE_HFDRV_CFG_REG 0x5D
+#define ISABELLE_PDMOUT_CFG1_REG 0x5E
+#define ISABELLE_PDMOUT_CFG2_REG 0x5F
+#define ISABELLE_PDMOUT_L_WM_REG 0x60
+#define ISABELLE_PDMOUT_R_WM_REG 0x61
+#define ISABELLE_HF_NG_CFG1_REG 0x62
+#define ISABELLE_HF_NG_CFG2_REG 0x63
+
+/* ISABELLE_PWR_EN_REG (0x02h) */
+#define ISABELLE_CHIP_EN BIT(0)
+
+/* ISABELLE DAI FORMATS */
+#define ISABELLE_AIF_FMT_MASK 0x70
+#define ISABELLE_I2S_MODE 0x0
+#define ISABELLE_LEFT_J_MODE 0x1
+#define ISABELLE_PDM_MODE 0x2
+
+#define ISABELLE_AIF_LENGTH_MASK 0x30
+#define ISABELLE_AIF_LENGTH_20 0x00
+#define ISABELLE_AIF_LENGTH_32 0x10
+
+#define ISABELLE_AIF_MS 0x80
+
+#define ISABELLE_FS_RATE_MASK 0xF
+#define ISABELLE_FS_RATE_8 0x0
+#define ISABELLE_FS_RATE_11 0x1
+#define ISABELLE_FS_RATE_12 0x2
+#define ISABELLE_FS_RATE_16 0x4
+#define ISABELLE_FS_RATE_22 0x5
+#define ISABELLE_FS_RATE_24 0x6
+#define ISABELLE_FS_RATE_32 0x8
+#define ISABELLE_FS_RATE_44 0x9
+#define ISABELLE_FS_RATE_48 0xA
+
+#define ISABELLE_MAX_REGISTER 0xFF
+
+#endif
3
5

Re: [alsa-devel] [PATCH 2/2] ASoC: fix pxa-ssp compiling issue under mach-mmp
by Mark Brown 01 Jun '12
by Mark Brown 01 Jun '12
01 Jun '12
On Thu, May 31, 2012 at 01:48:33PM +0800, Qiao Zhou wrote:
> pxa-ssp.c uses API like cpu_is_pxa3xx(), cpu_is_pxa2xx(), which is
> defined under arch-pxa architecture, and drivers under mach-mmp
> can't find it. so just use ssp->type to replace that API.
Still not applying against
git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound-2.6.git for-3.5
for some reason - what did you generate the patch against?
> Change-Id: I0a0671802189f61ff90d984ca577a41627f869fa
Shouldn't have this in mainline submissions...
1
0
The following changes since commit 766812e6d5e2e23be1e212cf84902d5e834dd865:
ASoC: sh: fsi: enable chip specific data transfer mode (2012-05-19 19:41:45 +0100)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git tags/asoc-3.5
for you to fetch changes up to fbe42f66c66c279b4ed9b8f515058a09bc731c49:
ASoC: fsi: bugfix: ensure dma is terminated (2012-05-30 11:04:12 +0100)
----------------------------------------------------------------
ASoC: A few bug fixes for the merge window
Small driver-specific updates.
----------------------------------------------------------------
Fabio Estevam (1):
ASoC: imx-ssi: Use clk_prepare_enable/clk_disable_unprepare
Kuninori Morimoto (3):
ASoC: fsi: bugfix: enable master clock control on DMA stream
ASoC: fsi: bugfix: correct dma area
ASoC: fsi: bugfix: ensure dma is terminated
sound/soc/fsl/imx-ssi.c | 6 +++---
sound/soc/sh/fsi.c | 25 ++++++++++++++++---------
2 files changed, 19 insertions(+), 12 deletions(-)
2
1
Hi,
I work on an Atom-based platform that uses a Realtek ALC892 codec connected
via HDA. The current code in patch_realtek.c seems to assume a standard
desktop setup and maps the ports accordingly. The setup that I have is
entirely different and involves, among other things, to reconfigure some of
the ports typically used as outputs as inputs and vice versa. It'll also need
to provide a way to pass through some inputs on the outputs without going
through the DAC.
All of these features are supported by the ALC982, but I don't see how this
could be implemented with the current driver. My question is how this could
possibly be solved in a way acceptable for mainline?
Thierry
3
4

[alsa-devel] [PATCH] ASoC: max98095: Staticise non-exported functions and export jack detect
by Mark Brown 31 May '12
by Mark Brown 31 May '12
31 May '12
Signed-off-by: Mark Brown <broonie(a)opensource.wolfsonmicro.com>
---
sound/soc/codecs/max98095.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/sound/soc/codecs/max98095.c b/sound/soc/codecs/max98095.c
index 35179e2..7cd508e 100644
--- a/sound/soc/codecs/max98095.c
+++ b/sound/soc/codecs/max98095.c
@@ -2216,7 +2216,7 @@ static irqreturn_t max98095_report_jack(int irq, void *data)
return IRQ_HANDLED;
}
-int max98095_jack_detect_enable(struct snd_soc_codec *codec)
+static int max98095_jack_detect_enable(struct snd_soc_codec *codec)
{
struct max98095_priv *max98095 = snd_soc_codec_get_drvdata(codec);
int ret = 0;
@@ -2245,7 +2245,7 @@ int max98095_jack_detect_enable(struct snd_soc_codec *codec)
return ret;
}
-int max98095_jack_detect_disable(struct snd_soc_codec *codec)
+static int max98095_jack_detect_disable(struct snd_soc_codec *codec)
{
int ret = 0;
@@ -2286,6 +2286,7 @@ int max98095_jack_detect(struct snd_soc_codec *codec,
max98095_report_jack(client->irq, codec);
return 0;
}
+EXPORT_SYMBOL_GPL(max98095_jack_detect);
#ifdef CONFIG_PM
static int max98095_suspend(struct snd_soc_codec *codec)
--
1.7.10
1
0
These patches add new controls to ASoC core and a driver
for the DA732x audio codec.
Adam Thomson (2):
ASoC: core: Add single controls with specified range of values
ASoC: codecs: Add DA732x codec driver
include/sound/soc.h | 23 +
sound/soc/codecs/Kconfig | 4 +
sound/soc/codecs/Makefile | 2 +
sound/soc/codecs/da732x.c | 1614 +++++++++++++++++++++++++++++++++++++++++
sound/soc/codecs/da732x.h | 133 ++++
sound/soc/codecs/da732x_reg.h | 650 +++++++++++++++++
sound/soc/soc-core.c | 98 +++
7 files changed, 2524 insertions(+), 0 deletions(-)
create mode 100644 sound/soc/codecs/da732x.c
create mode 100644 sound/soc/codecs/da732x.h
create mode 100644 sound/soc/codecs/da732x_reg.h
1
0

31 May '12
Signed-off-by: Mark Brown <broonie(a)opensource.wolfsonmicro.com>
---
sound/soc/codecs/wm2000.c | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
diff --git a/sound/soc/codecs/wm2000.c b/sound/soc/codecs/wm2000.c
index a75c376..4531c55 100644
--- a/sound/soc/codecs/wm2000.c
+++ b/sound/soc/codecs/wm2000.c
@@ -691,9 +691,39 @@ static int wm2000_resume(struct snd_soc_codec *codec)
#define wm2000_resume NULL
#endif
+static bool wm2000_readable_reg(struct device *dev, unsigned int reg)
+{
+ switch (reg) {
+ case WM2000_REG_SYS_START:
+ case WM2000_REG_SPEECH_CLARITY:
+ case WM2000_REG_SYS_WATCHDOG:
+ case WM2000_REG_ANA_VMID_PD_TIME:
+ case WM2000_REG_ANA_VMID_PU_TIME:
+ case WM2000_REG_CAT_FLTR_INDX:
+ case WM2000_REG_CAT_GAIN_0:
+ case WM2000_REG_SYS_STATUS:
+ case WM2000_REG_SYS_MODE_CNTRL:
+ case WM2000_REG_SYS_START0:
+ case WM2000_REG_SYS_START1:
+ case WM2000_REG_ID1:
+ case WM2000_REG_ID2:
+ case WM2000_REG_REVISON:
+ case WM2000_REG_SYS_CTL1:
+ case WM2000_REG_SYS_CTL2:
+ case WM2000_REG_ANC_STAT:
+ case WM2000_REG_IF_CTL:
+ return true;
+ default:
+ return false;
+ }
+}
+
static const struct regmap_config wm2000_regmap = {
.reg_bits = 8,
.val_bits = 8,
+
+ .max_register = WM2000_REG_IF_CTL,
+ .readable_reg = wm2000_readable_reg,
};
static int wm2000_probe(struct snd_soc_codec *codec)
--
1.7.10
1
0
Signed-off-by: Mark Brown <broonie(a)opensource.wolfsonmicro.com>
---
sound/soc/codecs/ac97.c | 6 ------
1 file changed, 6 deletions(-)
diff --git a/sound/soc/codecs/ac97.c b/sound/soc/codecs/ac97.c
index 2023c74..ea06b83 100644
--- a/sound/soc/codecs/ac97.c
+++ b/sound/soc/codecs/ac97.c
@@ -91,11 +91,6 @@ static int ac97_soc_probe(struct snd_soc_codec *codec)
return 0;
}
-static int ac97_soc_remove(struct snd_soc_codec *codec)
-{
- return 0;
-}
-
#ifdef CONFIG_PM
static int ac97_soc_suspend(struct snd_soc_codec *codec)
{
@@ -119,7 +114,6 @@ static struct snd_soc_codec_driver soc_codec_dev_ac97 = {
.write = ac97_write,
.read = ac97_read,
.probe = ac97_soc_probe,
- .remove = ac97_soc_remove,
.suspend = ac97_soc_suspend,
.resume = ac97_soc_resume,
};
--
1.7.10
1
0

Re: [alsa-devel] [PATCH] netwinder: encapsulate CPLD hardware locking and access
by David Woodhouse 31 May '12
by David Woodhouse 31 May '12
31 May '12
On Thu, 2012-05-31 at 12:15 +0200, Christian Dietrich wrote:
> I hope my draft of the preemption disabling is not to much crap. I would
> appreciate some comments. And please be aware, that i don't own this
> hardware, and haven't tested it on real hardware therefore.
Looks relatively sane at first glance; thanks.
--
dwmw2
1
0

[alsa-devel] [PATCH 1/2] ASoC: core: Add single controls with specified range of values
by Adam Thomson 31 May '12
by Adam Thomson 31 May '12
31 May '12
Control type added for cases where a specific range of values
within a register are required for control.
Added convenience macro:
SOC_SINGLE_RANGE_TLV
Added accessor implementations:
snd_soc_info_volsw_range
snd_soc_put_volsw_range
snd_soc_get_volsw_range
Signed-off-by: Michal Hajduk <Michal.Hajduk(a)diasemi.com>
Signed-off-by: Adam Thomson <Adam.Thomson(a)diasemi.com>
---
include/sound/soc.h | 16 +++++++++
sound/soc/soc-core.c | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 105 insertions(+), 0 deletions(-)
diff --git a/include/sound/soc.h b/include/sound/soc.h
index c703871..2096c60 100644
--- a/include/sound/soc.h
+++ b/include/sound/soc.h
@@ -67,6 +67,16 @@
{.reg = xreg, .rreg = xreg, \
.shift = xshift, .rshift = xshift, \
.max = xmax, .min = xmin} }
+#define SOC_SINGLE_RANGE_TLV(xname, xreg, xshift, xmin, xmax, tlv_array) \
+{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\
+ .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |\
+ SNDRV_CTL_ELEM_ACCESS_READWRITE,\
+ .tlv.p = (tlv_array), \
+ .info = snd_soc_info_volsw_range, \
+ .get = snd_soc_get_volsw_range, .put = snd_soc_put_volsw_range, \
+ .private_value = (unsigned long)&(struct soc_mixer_control) \
+ {.reg = xreg, .shift = xshift, .min = xmin,\
+ .max = xmax, .platform_max = xmax} }
#define SOC_DOUBLE(xname, reg, shift_left, shift_right, max, invert) \
{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\
.info = snd_soc_info_volsw, .get = snd_soc_get_volsw, \
@@ -460,6 +470,12 @@ int snd_soc_get_volsw_s8(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol);
int snd_soc_put_volsw_s8(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol);
+int snd_soc_info_volsw_range(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_info *uinfo);
+int snd_soc_put_volsw_range(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol);
+int snd_soc_get_volsw_range(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol);
int snd_soc_limit_volume(struct snd_soc_codec *codec,
const char *name, int max);
int snd_soc_bytes_info(struct snd_kcontrol *kcontrol,
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index b37ee80..1a1aba4 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -2790,6 +2790,95 @@ int snd_soc_put_volsw_s8(struct snd_kcontrol *kcontrol,
EXPORT_SYMBOL_GPL(snd_soc_put_volsw_s8);
/**
+ * snd_soc_info_volsw_range - single mixer info callback with range.
+ * @kcontrol: mixer control
+ * @uinfo: control element information
+ *
+ * Callback to provide information, within a range, about a single
+ * mixer control.
+ *
+ * returns 0 for success.
+ */
+int snd_soc_info_volsw_range(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_info *uinfo)
+{
+ struct soc_mixer_control *mc =
+ (struct soc_mixer_control *)kcontrol->private_value;
+ int platform_max;
+ int min = mc->min;
+
+ if (!mc->platform_max)
+ mc->platform_max = mc->max;
+ platform_max = mc->platform_max;
+
+ uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
+ uinfo->count = 1;
+ uinfo->value.integer.min = 0;
+ uinfo->value.integer.max = platform_max - min;
+
+ return 0;
+}
+EXPORT_SYMBOL_GPL(snd_soc_info_volsw_range);
+
+/**
+ * snd_soc_put_volsw_range - single mixer put value callback with range.
+ * @kcontrol: mixer control
+ * @ucontrol: control element information
+ *
+ * Callback to set the value, within a range, for a single mixer control.
+ *
+ * Returns 0 for success.
+ */
+int snd_soc_put_volsw_range(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct soc_mixer_control *mc =
+ (struct soc_mixer_control *)kcontrol->private_value;
+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+ unsigned int reg = mc->reg;
+ unsigned int shift = mc->shift;
+ int min = mc->min;
+ int max = mc->max;
+ unsigned int mask = (1 << fls(max)) - 1;
+ unsigned int val, val_mask;
+
+ val = ((ucontrol->value.integer.value[0] + min) & mask);
+ val_mask = mask << shift;
+ val = val << shift;
+
+ return snd_soc_update_bits_locked(codec, reg, val_mask, val);
+}
+EXPORT_SYMBOL_GPL(snd_soc_put_volsw_range);
+
+/**
+ * snd_soc_get_volsw_range - single mixer get callback with range
+ * @kcontrol: mixer control
+ * @ucontrol: control element information
+ *
+ * Callback to get the value, within a range, of a single mixer control.
+ *
+ * Returns 0 for success.
+ */
+int snd_soc_get_volsw_range(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct soc_mixer_control *mc =
+ (struct soc_mixer_control *)kcontrol->private_value;
+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+ unsigned int reg = mc->reg;
+ unsigned int shift = mc->shift;
+ int min = mc->min;
+ int max = mc->max;
+ unsigned int mask = (1 << fls(max)) - 1;
+
+ ucontrol->value.integer.value[0] =
+ ((snd_soc_read(codec, reg) >> shift) & mask) - min;
+
+ return 0;
+}
+EXPORT_SYMBOL_GPL(snd_soc_get_volsw_range);
+
+/**
* snd_soc_limit_volume - Set new limit to an existing volume control.
*
* @codec: where to look for the control
--
1.7.0.4
2
1
These patches add new controls to ASoC core and a driver
for the DA732x audio codec.
Adam Thomson (2):
ASoC: core: Add single controls with specified range of values
ASoC: codecs: Add DA732x codec driver
include/sound/soc.h | 16 +
sound/soc/codecs/Kconfig | 4 +
sound/soc/codecs/Makefile | 2 +
sound/soc/codecs/da732x.c | 1614 +++++++++++++++++++++++++++++++++++++++++
sound/soc/codecs/da732x.h | 133 ++++
sound/soc/codecs/da732x_reg.h | 650 +++++++++++++++++
sound/soc/soc-core.c | 89 +++
7 files changed, 2508 insertions(+), 0 deletions(-)
create mode 100644 sound/soc/codecs/da732x.c
create mode 100644 sound/soc/codecs/da732x.h
create mode 100644 sound/soc/codecs/da732x_reg.h
1
0

31 May '12
Alexander E. Patrakov wrote:
> On my home computer with linux-3.3.2, kmemleak found a lot of copies of
> this (not only from pulseaudio, but also from wine):
>
> unreferenced object 0xffff88021afaed40 (size 16):
> comm "pulseaudio", pid 839, jiffies 4294711382 (age 31392.844s)
> hex dump (first 16 bytes):
> 80 3e 00 00 c0 5d 00 00 00 7d 00 00 02 00 00 00 .>...]...}......
> backtrace:
> [<ffffffff811620d7>] create_object+0x127/0x2b0
> [<ffffffff81636d81>] kmemleak_alloc+0x21/0x50
> [<ffffffff81157bc3>] __kmalloc+0x103/0x1e0
> [<ffffffffa02f650b>] snd_usb_pcm_open+0x3bb/0x4c0 [snd_usb_audio]
Please try this patch.
--8<---------------------------------------------------------------->8--
ALSA: usb-audio: fix rate_list memory leak
The array of sample rates is reallocated every time when opening
the PCM device, but was freed only once when unplugging the device.
Reported-by: "Alexander E. Patrakov" <patrakov(a)gmail.com>
Signed-off-by: Clemens Ladisch <clemens(a)ladisch.de>
---
sound/usb/pcm.c | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)
--- a/sound/usb/pcm.c
+++ b/sound/usb/pcm.c
@@ -783,6 +783,9 @@ static int snd_usb_pcm_check_knot(struct snd_pcm_runtime *runtime,
int count = 0, needs_knot = 0;
int err;
+ kfree(subs->rate_list.list);
+ subs->rate_list.list = NULL;
+
list_for_each_entry(fp, &subs->fmt_list, list) {
if (fp->rates & SNDRV_PCM_RATE_CONTINUOUS)
return 0;
3
2

[alsa-devel] [PATCH 1/1] ALSA: hdspm - Work around broken DDS value on PCI RME MADI
by Adrian Knoth 31 May '12
by Adrian Knoth 31 May '12
31 May '12
On PCI RME MADI cards, the PLL register does not contain the proper
value, so the calculated system_sample_rate is wrong. In this case, we
simply return the cached rate from struct hdspm.
Signed-off-by: Adrian Knoth <adi(a)drcomp.erfurt.thur.de>
diff --git a/sound/pci/rme9652/hdspm.c b/sound/pci/rme9652/hdspm.c
index f27a98e..f3cf8d0 100644
--- a/sound/pci/rme9652/hdspm.c
+++ b/sound/pci/rme9652/hdspm.c
@@ -1988,6 +1988,13 @@ static int hdspm_get_system_sample_rate(struct hdspm *hdspm)
period = hdspm_read(hdspm, HDSPM_RD_PLL_FREQ);
rate = hdspm_calc_dds_value(hdspm, period);
+ if (rate > 207000) {
+ /* Unreasonable high sample rate as seen on PCI MADI cards.
+ * Use the cached value instead.
+ */
+ rate = hdspm->system_sample_rate;
+ }
+
return rate;
}
--
1.7.10
2
1

[alsa-devel] [PATCH] ASoC: tlv320aic3x: Change Class-D amplifier gain control name
by Jarkko Nikula 30 May '12
by Jarkko Nikula 30 May '12
30 May '12
ALSA mixers cannot classify this "Class-D Amplifier Gain" speaker output
gain control as a playback control. Fix this by changing the name as
"Class-D Playback Volume".
Signed-off-by: Jarkko Nikula <jarkko.nikula(a)bitmer.com>
---
sound/soc/codecs/tlv320aic3x.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sound/soc/codecs/tlv320aic3x.c b/sound/soc/codecs/tlv320aic3x.c
index 64d2a4f..58ef59d 100644
--- a/sound/soc/codecs/tlv320aic3x.c
+++ b/sound/soc/codecs/tlv320aic3x.c
@@ -368,7 +368,7 @@ static const struct snd_kcontrol_new aic3x_snd_controls[] = {
static DECLARE_TLV_DB_SCALE(classd_amp_tlv, 0, 600, 0);
static const struct snd_kcontrol_new aic3x_classd_amp_gain_ctrl =
- SOC_DOUBLE_TLV("Class-D Amplifier Gain", CLASSD_CTRL, 6, 4, 3, 0, classd_amp_tlv);
+ SOC_DOUBLE_TLV("Class-D Playback Volume", CLASSD_CTRL, 6, 4, 3, 0, classd_amp_tlv);
/* Left DAC Mux */
static const struct snd_kcontrol_new aic3x_left_dac_mux_controls =
--
1.7.10
2
1

30 May '12
On Thu, May 24, 2012 at 03:26:38PM +0200, Ola Lilja wrote:
> +static void show_regulator_status(struct device *dev)
> +{
> + struct ab8500_codec_drvdata *drvdata = dev_get_drvdata(dev);
> + struct ab8500_codec_drvdata_dbg *dbg = &drvdata->dbg;
> +
> + dev_dbg(dev, "%s: Regulator-status:\n", __func__);
> + dev_dbg(dev, "%s: V-AUD: %s\n", __func__,
> + (regulator_is_enabled(dbg->vaud) > 0) ?
> + "On" : "Off");
> + dev_dbg(dev, "%s: V-AMIC1: %s\n", __func__,
> + (regulator_is_enabled(dbg->vamic1) > 0) ?
> + "On" : "Off");
> + dev_dbg(dev, "%s: V-AMIC2: %s\n", __func__,
> + (regulator_is_enabled(dbg->vamic2) > 0) ?
> + "On" : "Off");
> + dev_dbg(dev, "%s: V-DMIC: %s\n", __func__,
> + (regulator_is_enabled(dbg->vdmic) > 0) ?
> + "On" : "Off");
What problems are you finding when you try to use the debug
infrastructure in both the regulator API and DAPM to discover the state
of the regulators?
> + /* Clocks */
> + SND_SOC_DAPM_CLOCK_SUPPLY("audioclk"),
> + SND_SOC_DAPM_CLOCK_SUPPLY("gpio.1"),
This looks wrong - audioclk looks reasonable but gpio.1 looks like a
board-specific name which shouldn't be encoded into the driver.
> + if (ucontrol->value.integer.value[0] != SID_APPLY_FIR) {
> + dev_err(codec->dev,
> + "%s: ERROR: This control supports '%s' only!\n",
> + __func__, enum_sid_state[SID_APPLY_FIR]);
> + return 0;
> + }
I'd expect this to return an error...
> + status = snd_soc_dapm_force_enable_pin(&codec->dapm,
> + "ANC Configure Input");
> + if (status < 0) {
> + dev_err(dev,
> + "%s: ERROR: Failed to enable power (status = %d)!\n",
> + __func__, status);
> + goto cleanup;
> + }
> + snd_soc_dapm_sync(&codec->dapm);
> +
> + mutex_lock(&codec->mutex);
Your locking looks bad here. Nothing ensures that something doesn't
come along and undo the force enable. Looking at the code this is the
only function that fiddles with the input but there's still a race where
one writer might exit the mutex section and disable the pin while a
second enters the mutex section.
> +static int filter_control_get(struct snd_kcontrol *kcontrol,
> + struct snd_ctl_elem_value *ucontrol)
> +{
> + struct filter_control *fc =
> + (struct filter_control *)kcontrol->private_value;
> + unsigned int i;
> +
> + for (i = 0; i < fc->count; i++)
> + ucontrol->value.integer.value[i] = fc->value[i];
> +
> + return 0;
> +}
> +
> +static int filter_control_put(struct snd_kcontrol *kcontrol,
> + struct snd_ctl_elem_value *ucontrol)
> +{
> + struct filter_control *fc =
> + (struct filter_control *)kcontrol->private_value;
> + unsigned int i;
> +
> + for (i = 0; i < fc->count; i++)
> + fc->value[i] = ucontrol->value.integer.value[i];
These don't seem to be locked?
> +int ab8500_audio_init_audioblock(struct snd_soc_codec *codec)
static. Lots of other functions in the rest of the driver have the same
issue.
> +static int ab8500_codec_pcm_hw_params(struct snd_pcm_substream *substream,
> + struct snd_pcm_hw_params *hw_params, struct snd_soc_dai *dai)
> +{
> + dev_dbg(dai->codec->dev, "%s Enter.\n", __func__);
> +
> + return 0;
> +}
Remove empty functions.
> + default:
> + dev_err(dai->codec->dev,
> + "%s: ERROR: Unsupported INV mask 0x%x\n",
> + __func__, fmt & SND_SOC_DAIFMT_INV_MASK);
> + return -EINVAL;
> + break;
The break is redundant.
> + /* Only 16 bit slot width is supported at the moment in TDM mode */
> + if (slot_width != 16) {
> + dev_err(dai->codec->dev,
> + "%s: ERROR: Unsupported slot_width %d.\n",
> + __func__, slot_width);
> + return -EINVAL;
> + }
You've got code which supports other widths...
> +static struct snd_soc_codec_driver ab8500_codec_driver = {
> + .probe = ab8500_codec_probe,
> + .read = ab8500_codec_read_reg,
> + .write = ab8500_codec_write_reg,
> + .reg_cache_size = 0,
no need to init things to zero or NULL in static structs.
> +#define PRE_PMU_POST_PMD (SND_SOC_DAPM_PRE_PMU | \
> + SND_SOC_DAPM_POST_PMD)
You shouldn't define stuff like this in your driver!
2
3

Re: [alsa-devel] [PATCH 2/2 V2] ASoC: fix pxa-ssp compiling issue under mach-mmp
by Mark Brown 30 May '12
by Mark Brown 30 May '12
30 May '12
On Fri, May 25, 2012 at 11:12:08AM +0800, Qiao Zhou wrote:
> pxa-ssp.c uses API like cpu_is_pxa3xx(), cpu_is_pxa2xx(), which is
> defined under arch-pxa architecture, and drivers under mach-mmp
> can't find it. so just use ssp->type to replace that API.
This doesn't apply to for-3.5 (or Linus' tree I suspect). Can you
please regenerate against that?
1
0

Re: [alsa-devel] [PATCH 2/2 V2] ASoC: fix pxa-ssp compiling issue under mach-mmp
by Eric Miao 30 May '12
by Eric Miao 30 May '12
30 May '12
On Fri, May 25, 2012 at 11:12 AM, Qiao Zhou <zhouqiao(a)marvell.com> wrote:
> pxa-ssp.c uses API like cpu_is_pxa3xx(), cpu_is_pxa2xx(), which is
> defined under arch-pxa architecture, and drivers under mach-mmp
> can't find it. so just use ssp->type to replace that API.
>
> Signed-off-by: Qiao Zhou <zhouqiao(a)marvell.com>
Part of job of #ifdef ... #endif, and cpu_is_pxa*() is to reduce code size when
the support for these SoCs are not compiled, but providing the overall
maintenance burden and ugliness, I'm fine with the changes here.
Acked-by: Eric Miao <eric.y.miao(a)gmail.com>
> ---
> Â include/linux/pxa2xx_ssp.h | Â Â 1 +
>  sound/soc/pxa/pxa-ssp.c   |  38 +++++++++++---------------------------
> Â 2 files changed, 12 insertions(+), 27 deletions(-)
>
> diff --git a/include/linux/pxa2xx_ssp.h b/include/linux/pxa2xx_ssp.h
> index f9fe15e..f366320 100644
> --- a/include/linux/pxa2xx_ssp.h
> +++ b/include/linux/pxa2xx_ssp.h
> @@ -160,6 +160,7 @@ enum pxa_ssp_type {
> Â Â Â Â PXA25x_SSP, Â /* pxa 210, 250, 255, 26x */
> Â Â Â Â PXA25x_NSSP, /* pxa 255, 26x (including ASSP) */
> Â Â Â Â PXA27x_SSP,
> + Â Â Â PXA3xx_SSP,
> Â Â Â Â PXA168_SSP,
> Â Â Â Â PXA910_SSP,
> Â Â Â Â CE4100_SSP,
> diff --git a/sound/soc/pxa/pxa-ssp.c b/sound/soc/pxa/pxa-ssp.c
> index fd04ce1..3c89162 100644
> --- a/sound/soc/pxa/pxa-ssp.c
> +++ b/sound/soc/pxa/pxa-ssp.c
> @@ -33,7 +33,6 @@
>
> Â #include <mach/hardware.h>
> Â #include <mach/dma.h>
> -#include <mach/audio.h>
>
> Â #include "../../arm/pxa2xx-pcm.h"
> Â #include "pxa-ssp.h"
> @@ -195,7 +194,7 @@ static void pxa_ssp_set_scr(struct ssp_device *ssp, u32 div)
> Â {
> Â Â Â Â u32 sscr0 = pxa_ssp_read_reg(ssp, SSCR0);
>
> - Â Â Â if (cpu_is_pxa25x() && ssp->type == PXA25x_SSP) {
> + Â Â Â if (ssp->type == PXA25x_SSP) {
> Â Â Â Â Â Â Â Â sscr0 &= ~0x0000ff00;
> Â Â Â Â Â Â Â Â sscr0 |= ((div - 2)/2) << 8; /* 2..512 */
> Â Â Â Â } else {
> @@ -213,7 +212,7 @@ static u32 pxa_ssp_get_scr(struct ssp_device *ssp)
> Â Â Â Â u32 sscr0 = pxa_ssp_read_reg(ssp, SSCR0);
> Â Â Â Â u32 div;
>
> - Â Â Â if (cpu_is_pxa25x() && ssp->type == PXA25x_SSP)
> + Â Â Â if (ssp->type == PXA25x_SSP)
> Â Â Â Â Â Â Â Â div = ((sscr0 >> 8) & 0xff) * 2 + 2;
> Â Â Â Â else
> Â Â Â Â Â Â Â Â div = ((sscr0 >> 8) & 0xfff) + 1;
> @@ -243,7 +242,7 @@ static int pxa_ssp_set_dai_sysclk(struct snd_soc_dai *cpu_dai,
> Â Â Â Â Â Â Â Â break;
> Â Â Â Â case PXA_SSP_CLK_PLL:
> Â Â Â Â Â Â Â Â /* Internal PLL is fixed */
> - Â Â Â Â Â Â Â if (cpu_is_pxa25x())
> + Â Â Â Â Â Â Â if (ssp->type == PXA25x_SSP)
> Â Â Â Â Â Â Â Â Â Â Â Â priv->sysclk = 1843200;
> Â Â Â Â Â Â Â Â else
> Â Â Â Â Â Â Â Â Â Â Â Â priv->sysclk = 13000000;
> @@ -267,11 +266,11 @@ static int pxa_ssp_set_dai_sysclk(struct snd_soc_dai *cpu_dai,
>
> Â Â Â Â /* The SSP clock must be disabled when changing SSP clock mode
> Â Â Â Â * on PXA2xx. Â On PXA3xx it must be enabled when doing so. */
> - Â Â Â if (!cpu_is_pxa3xx())
> + Â Â Â if (ssp->type != PXA3xx_SSP)
> Â Â Â Â Â Â Â Â clk_disable(ssp->clk);
> Â Â Â Â val = pxa_ssp_read_reg(ssp, SSCR0) | sscr0;
> Â Â Â Â pxa_ssp_write_reg(ssp, SSCR0, val);
> - Â Â Â if (!cpu_is_pxa3xx())
> + Â Â Â if (ssp->type != PXA3xx_SSP)
> Â Â Â Â Â Â Â Â clk_enable(ssp->clk);
>
> Â Â Â Â return 0;
> @@ -295,24 +294,20 @@ static int pxa_ssp_set_dai_clkdiv(struct snd_soc_dai *cpu_dai,
> Â Â Â Â case PXA_SSP_AUDIO_DIV_SCDB:
> Â Â Â Â Â Â Â Â val = pxa_ssp_read_reg(ssp, SSACD);
> Â Â Â Â Â Â Â Â val &= ~SSACD_SCDB;
> -#if defined(CONFIG_PXA3xx)
> - Â Â Â Â Â Â Â if (cpu_is_pxa3xx())
> + Â Â Â Â Â Â Â if (ssp->type == PXA3xx_SSP)
> Â Â Â Â Â Â Â Â Â Â Â Â val &= ~SSACD_SCDX8;
> -#endif
> Â Â Â Â Â Â Â Â switch (div) {
> Â Â Â Â Â Â Â Â case PXA_SSP_CLK_SCDB_1:
> Â Â Â Â Â Â Â Â Â Â Â Â val |= SSACD_SCDB;
> Â Â Â Â Â Â Â Â Â Â Â Â break;
> Â Â Â Â Â Â Â Â case PXA_SSP_CLK_SCDB_4:
> Â Â Â Â Â Â Â Â Â Â Â Â break;
> -#if defined(CONFIG_PXA3xx)
> Â Â Â Â Â Â Â Â case PXA_SSP_CLK_SCDB_8:
> - Â Â Â Â Â Â Â Â Â Â Â if (cpu_is_pxa3xx())
> + Â Â Â Â Â Â Â Â Â Â Â if (ssp->type == PXA3xx_SSP)
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â val |= SSACD_SCDX8;
> Â Â Â Â Â Â Â Â Â Â Â Â else
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â return -EINVAL;
> Â Â Â Â Â Â Â Â Â Â Â Â break;
> -#endif
> Â Â Â Â Â Â Â Â default:
> Â Â Â Â Â Â Â Â Â Â Â Â return -EINVAL;
> Â Â Â Â Â Â Â Â }
> @@ -338,10 +333,8 @@ static int pxa_ssp_set_dai_pll(struct snd_soc_dai *cpu_dai, int pll_id,
> Â Â Â Â struct ssp_device *ssp = priv->ssp;
> Â Â Â Â u32 ssacd = pxa_ssp_read_reg(ssp, SSACD) & ~0x70;
>
> -#if defined(CONFIG_PXA3xx)
> - Â Â Â if (cpu_is_pxa3xx())
> + Â Â Â if (ssp->type == PXA3xx_SSP)
> Â Â Â Â Â Â Â Â pxa_ssp_write_reg(ssp, SSACDD, 0);
> -#endif
>
> Â Â Â Â switch (freq_out) {
> Â Â Â Â case 5622000:
> @@ -366,11 +359,10 @@ static int pxa_ssp_set_dai_pll(struct snd_soc_dai *cpu_dai, int pll_id,
> Â Â Â Â Â Â Â Â break;
>
> Â Â Â Â default:
> -#ifdef CONFIG_PXA3xx
> Â Â Â Â Â Â Â Â /* PXA3xx has a clock ditherer which can be used to generate
> Â Â Â Â Â Â Â Â * a wider range of frequencies - calculate a value for it.
> Â Â Â Â Â Â Â Â */
> - Â Â Â Â Â Â Â if (cpu_is_pxa3xx()) {
> + Â Â Â Â Â Â Â if (ssp->type == PXA3xx_SSP) {
> Â Â Â Â Â Â Â Â Â Â Â Â u32 val;
> Â Â Â Â Â Â Â Â Â Â Â Â u64 tmp = 19968;
> Â Â Â Â Â Â Â Â Â Â Â Â tmp *= 1000000;
> @@ -387,7 +379,6 @@ static int pxa_ssp_set_dai_pll(struct snd_soc_dai *cpu_dai, int pll_id,
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â val, freq_out);
> Â Â Â Â Â Â Â Â Â Â Â Â break;
> Â Â Â Â Â Â Â Â }
> -#endif
>
> Â Â Â Â Â Â Â Â return -EINVAL;
> Â Â Â Â }
> @@ -596,10 +587,8 @@ static int pxa_ssp_hw_params(struct snd_pcm_substream *substream,
> Â Â Â Â /* bit size */
> Â Â Â Â switch (params_format(params)) {
> Â Â Â Â case SNDRV_PCM_FORMAT_S16_LE:
> -#ifdef CONFIG_PXA3xx
> - Â Â Â Â Â Â Â if (cpu_is_pxa3xx())
> + Â Â Â Â Â Â Â if (ssp->type == PXA3xx_SSP)
> Â Â Â Â Â Â Â Â Â Â Â Â sscr0 |= SSCR0_FPCKE;
> -#endif
> Â Â Â Â Â Â Â Â sscr0 |= SSCR0_DataSize(16);
> Â Â Â Â Â Â Â Â break;
> Â Â Â Â case SNDRV_PCM_FORMAT_S24_LE:
> @@ -624,9 +613,7 @@ static int pxa_ssp_hw_params(struct snd_pcm_substream *substream,
> Â Â Â Â Â Â Â Â Â Â Â Â * trying and failing a lot; some of the registers
> Â Â Â Â Â Â Â Â Â Â Â Â * needed for that mode are only available on PXA3xx.
> Â Â Â Â Â Â Â Â Â Â Â Â */
> -
> -#ifdef CONFIG_PXA3xx
> - Â Â Â Â Â Â Â Â Â Â Â if (!cpu_is_pxa3xx())
> + Â Â Â Â Â Â Â Â Â Â Â if (ssp->type != PXA3xx_SSP)
> Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â return -EINVAL;
>
> Â Â Â Â Â Â Â Â Â Â Â Â sspsp |= SSPSP_SFRMWDTH(width * 2);
> @@ -634,9 +621,6 @@ static int pxa_ssp_hw_params(struct snd_pcm_substream *substream,
> Â Â Â Â Â Â Â Â Â Â Â Â sspsp |= SSPSP_EDMYSTOP(3);
> Â Â Â Â Â Â Â Â Â Â Â Â sspsp |= SSPSP_DMYSTOP(3);
> Â Â Â Â Â Â Â Â Â Â Â Â sspsp |= SSPSP_DMYSTRT(1);
> -#else
> - Â Â Â Â Â Â Â Â Â Â Â return -EINVAL;
> -#endif
> Â Â Â Â Â Â Â Â } else {
> Â Â Â Â Â Â Â Â Â Â Â Â /* The frame width is the width the LRCLK is
> Â Â Â Â Â Â Â Â Â Â Â Â * asserted for; the delay is expressed in
> --
> 1.7.4.1
>
2
1
Hi Mark, Liam
These are bugfix for FSI DMAEngine.
Without these patches, FSI playback includes noise.
These are for v3.5 kernel
Kuninori Morimoto (2):
ASoC: fsi: bugfix: correct dma area
ASoC: fsi: bugfix: ensure dma is terminated
Best regards
---
Kuninori Morimoto
2
3

[alsa-devel] [PATCH] ASoC: fsi: use PIO handler if DMA handler was invalid
by Kuninori Morimoto 30 May '12
by Kuninori Morimoto 30 May '12
30 May '12
PIO handler is not good performance, but works on all platform.
So, switch to PIO handler if DMA handler was invalid case.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx(a)renesas.com>
---
sound/soc/sh/fsi.c | 29 ++++++++++++++++++++---------
1 files changed, 20 insertions(+), 9 deletions(-)
diff --git a/sound/soc/sh/fsi.c b/sound/soc/sh/fsi.c
index 05582c1..0da021a 100644
--- a/sound/soc/sh/fsi.c
+++ b/sound/soc/sh/fsi.c
@@ -247,7 +247,7 @@ struct fsi_priv {
struct fsi_stream_handler {
int (*init)(struct fsi_priv *fsi, struct fsi_stream *io);
int (*quit)(struct fsi_priv *fsi, struct fsi_stream *io);
- int (*probe)(struct fsi_priv *fsi, struct fsi_stream *io);
+ int (*probe)(struct fsi_priv *fsi, struct fsi_stream *io, struct device *dev);
int (*transfer)(struct fsi_priv *fsi, struct fsi_stream *io);
int (*remove)(struct fsi_priv *fsi, struct fsi_stream *io);
void (*start_stop)(struct fsi_priv *fsi, struct fsi_stream *io,
@@ -571,16 +571,16 @@ static int fsi_stream_transfer(struct fsi_stream *io)
#define fsi_stream_stop(fsi, io)\
fsi_stream_handler_call(io, start_stop, fsi, io, 0)
-static int fsi_stream_probe(struct fsi_priv *fsi)
+static int fsi_stream_probe(struct fsi_priv *fsi, struct device *dev)
{
struct fsi_stream *io;
int ret1, ret2;
io = &fsi->playback;
- ret1 = fsi_stream_handler_call(io, probe, fsi, io);
+ ret1 = fsi_stream_handler_call(io, probe, fsi, io, dev);
io = &fsi->capture;
- ret2 = fsi_stream_handler_call(io, probe, fsi, io);
+ ret2 = fsi_stream_handler_call(io, probe, fsi, io, dev);
if (ret1 < 0)
return ret1;
@@ -1182,7 +1182,7 @@ static void fsi_dma_push_start_stop(struct fsi_priv *fsi, struct fsi_stream *io,
fsi_master_mask_set(master, CLK_RST, clk, (enable) ? clk : 0);
}
-static int fsi_dma_probe(struct fsi_priv *fsi, struct fsi_stream *io)
+static int fsi_dma_probe(struct fsi_priv *fsi, struct fsi_stream *io, struct device *dev)
{
dma_cap_mask_t mask;
@@ -1190,8 +1190,19 @@ static int fsi_dma_probe(struct fsi_priv *fsi, struct fsi_stream *io)
dma_cap_set(DMA_SLAVE, mask);
io->chan = dma_request_channel(mask, fsi_dma_filter, &io->slave);
- if (!io->chan)
- return -EIO;
+ if (!io->chan) {
+
+ /* switch to PIO handler */
+ if (fsi_stream_is_play(fsi, io))
+ fsi->playback.handler = &fsi_pio_push_handler;
+ else
+ fsi->capture.handler = &fsi_pio_pop_handler;
+
+ dev_info(dev, "switch handler (dma => pio)\n");
+
+ /* probe again */
+ return fsi_stream_probe(fsi, dev);
+ }
tasklet_init(&io->tasklet, fsi_dma_do_tasklet, (unsigned long)io);
@@ -1681,7 +1692,7 @@ static int fsi_probe(struct platform_device *pdev)
master->fsia.master = master;
master->fsia.info = &info->port_a;
fsi_handler_init(&master->fsia);
- ret = fsi_stream_probe(&master->fsia);
+ ret = fsi_stream_probe(&master->fsia, &pdev->dev);
if (ret < 0) {
dev_err(&pdev->dev, "FSIA stream probe failed\n");
goto exit_iounmap;
@@ -1692,7 +1703,7 @@ static int fsi_probe(struct platform_device *pdev)
master->fsib.master = master;
master->fsib.info = &info->port_b;
fsi_handler_init(&master->fsib);
- ret = fsi_stream_probe(&master->fsib);
+ ret = fsi_stream_probe(&master->fsib, &pdev->dev);
if (ret < 0) {
dev_err(&pdev->dev, "FSIB stream probe failed\n");
goto exit_fsia;
--
1.7.5.4
2
3

[alsa-devel] [PATCH] ASoC: fsi: bugfix: enable master clock control on DMA stream
by Kuninori Morimoto 30 May '12
by Kuninori Morimoto 30 May '12
30 May '12
DMA stream handler didn't care about master clock.
This patch fixes it up.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx(a)renesas.com>
---
sound/soc/sh/fsi.c | 5 +++++
1 files changed, 5 insertions(+), 0 deletions(-)
diff --git a/sound/soc/sh/fsi.c b/sound/soc/sh/fsi.c
index 7cee225..05582c1 100644
--- a/sound/soc/sh/fsi.c
+++ b/sound/soc/sh/fsi.c
@@ -1172,9 +1172,14 @@ static int fsi_dma_transfer(struct fsi_priv *fsi, struct fsi_stream *io)
static void fsi_dma_push_start_stop(struct fsi_priv *fsi, struct fsi_stream *io,
int start)
{
+ struct fsi_master *master = fsi_get_master(fsi);
+ u32 clk = fsi_is_port_a(fsi) ? CRA : CRB;
u32 enable = start ? DMA_ON : 0;
fsi_reg_mask_set(fsi, OUT_DMAC, DMA_ON, enable);
+
+ if (fsi_is_clk_master(fsi))
+ fsi_master_mask_set(master, CLK_RST, clk, (enable) ? clk : 0);
}
static int fsi_dma_probe(struct fsi_priv *fsi, struct fsi_stream *io)
--
1.7.5.4
2
1
Sean M. Pappalardo - D.J. Pegasus wrote:
>It works perfectly with the SCS.1m!! The .1d works, but some of
>the non-standard data it sends appears to be getting corrupted. In
>particular, the device sends four-byte platter messages that start with
>0xF9 and the remaining three can range from 0x00 to 0xFF.
This is not MIDI. Into what MIDI messages should
the driver convert this?
Is this documented anywhere?
Regards,
Clemens
1
0
On Fri, 2012-05-25 at 15:11 +0800, Zhangfei Gao wrote:
> mmp-pcm handle audio dma based on dmaengine
> Support mmp and pxa910
Looks like this is *not* using soc-dmaengine library, why?
>
> Signed-off-by: Zhangfei Gao <zhangfei.gao(a)marvell.com>
> Signed-off-by: Leo Yan <leoy(a)marvell.com>
> Signed-off-by: Qiao Zhou <zhouqiao(a)marvell.com>
> ---
> include/linux/platform_data/mmp_audio.h | 22 ++
> sound/soc/pxa/Kconfig | 8 +
> sound/soc/pxa/Makefile | 2 +
> sound/soc/pxa/mmp-pcm.c | 448 +++++++++++++++++++++++++++++++
> 4 files changed, 480 insertions(+), 0 deletions(-)
> create mode 100644 include/linux/platform_data/mmp_audio.h
> create mode 100644 sound/soc/pxa/mmp-pcm.c
>
> diff --git a/include/linux/platform_data/mmp_audio.h b/include/linux/platform_data/mmp_audio.h
> new file mode 100644
> index 0000000..0f25d16
> --- /dev/null
> +++ b/include/linux/platform_data/mmp_audio.h
> @@ -0,0 +1,22 @@
> +/*
> + * MMP Platform AUDIO Management
> + *
> + * Copyright (c) 2011 Marvell Semiconductors Inc.
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + *
> + */
> +
> +#ifndef MMP_AUDIO_H
> +#define MMP_AUDIO_H
> +
> +struct mmp_audio_platdata {
> + u32 period_max_capture;
> + u32 buffer_max_capture;
> + u32 period_max_playback;
> + u32 buffer_max_playback;
> +};
> +
> +#endif /* MMP_AUDIO_H */
> diff --git a/sound/soc/pxa/Kconfig b/sound/soc/pxa/Kconfig
> index a0f7d3c..a516068 100644
> --- a/sound/soc/pxa/Kconfig
> +++ b/sound/soc/pxa/Kconfig
> @@ -8,6 +8,14 @@ config SND_PXA2XX_SOC
> the PXA2xx AC97, I2S or SSP interface. You will also need
> to select the audio interfaces to support below.
>
> +config SND_MMP_SOC
> + bool "Soc Audio for Marvell MMP chips"
> + depends on ARCH_MMP
> + select SND_ARM
> + help
> + Say Y if you want to add support for codecs attached to
> + the MMP SSPA interface.
> +
> config SND_PXA2XX_AC97
> tristate
> select SND_AC97_CODEC
> diff --git a/sound/soc/pxa/Makefile b/sound/soc/pxa/Makefile
> index af35762..f913e9b 100644
> --- a/sound/soc/pxa/Makefile
> +++ b/sound/soc/pxa/Makefile
> @@ -3,11 +3,13 @@ snd-soc-pxa2xx-objs := pxa2xx-pcm.o
> snd-soc-pxa2xx-ac97-objs := pxa2xx-ac97.o
> snd-soc-pxa2xx-i2s-objs := pxa2xx-i2s.o
> snd-soc-pxa-ssp-objs := pxa-ssp.o
> +snd-soc-mmp-objs := mmp-pcm.o
>
> obj-$(CONFIG_SND_PXA2XX_SOC) += snd-soc-pxa2xx.o
> obj-$(CONFIG_SND_PXA2XX_SOC_AC97) += snd-soc-pxa2xx-ac97.o
> obj-$(CONFIG_SND_PXA2XX_SOC_I2S) += snd-soc-pxa2xx-i2s.o
> obj-$(CONFIG_SND_PXA_SOC_SSP) += snd-soc-pxa-ssp.o
> +obj-$(CONFIG_SND_MMP_SOC) += snd-soc-mmp.o
>
> # PXA Machine Support
> snd-soc-corgi-objs := corgi.o
> diff --git a/sound/soc/pxa/mmp-pcm.c b/sound/soc/pxa/mmp-pcm.c
> new file mode 100644
> index 0000000..abafbb9
> --- /dev/null
> +++ b/sound/soc/pxa/mmp-pcm.c
> @@ -0,0 +1,448 @@
> +/*
> + * linux/sound/soc/pxa/mmp-pcm.c
> + *
> + * Copyright (C) 2011 Marvell International Ltd.
> + *
> + * 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.
> + *
> + */
> +#include <linux/module.h>
> +#include <linux/init.h>
> +#include <linux/platform_device.h>
> +#include <linux/slab.h>
> +#include <linux/dma-mapping.h>
> +#include <linux/dmaengine.h>
> +#include <linux/platform_data/mmp_dma.h>
> +#include <linux/platform_data/mmp_audio.h>
> +#include <sound/pxa2xx-lib.h>
> +#include <sound/core.h>
> +#include <sound/pcm.h>
> +#include <sound/pcm_params.h>
> +#include <sound/soc.h>
> +#include <mach/sram.h>
> +
> +struct mmp_runtime_data {
> + int ssp_id;
> + u32 period_size;
> + u32 pointer;
> + struct resource *dma_res;
> + struct mmp_tdma_data tdma_data;
> + struct gen_pool *gpool;
> + struct snd_pcm_substream *substream;
> + struct dma_chan *dma_chan;
> + struct dma_async_tx_descriptor *desc;
> +};
> +
> +#define MMP_PCM_INFO (SNDRV_PCM_INFO_MMAP | \
> + SNDRV_PCM_INFO_MMAP_VALID | \
> + SNDRV_PCM_INFO_INTERLEAVED | \
> + SNDRV_PCM_INFO_PAUSE | \
> + SNDRV_PCM_INFO_RESUME)
> +
> +#define MMP_PCM_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | \
> + SNDRV_PCM_FMTBIT_S24_LE | \
> + SNDRV_PCM_FMTBIT_S32_LE)
> +
> +static struct snd_pcm_hardware mmp_pcm_hardware[] = {
> + {
> + .info = MMP_PCM_INFO,
> + .formats = MMP_PCM_FORMATS,
> + .period_bytes_min = 1024,
> + .period_bytes_max = 2048,
> + .periods_min = 2,
> + .periods_max = 32,
> + .buffer_bytes_max = 4096,
> + .fifo_size = 32,
> + },
> + {
> + .info = MMP_PCM_INFO,
> + .formats = MMP_PCM_FORMATS,
> + .period_bytes_min = 1024,
> + .period_bytes_max = 2048,
> + .periods_min = 2,
> + .periods_max = 32,
> + .buffer_bytes_max = 4096,
> + .fifo_size = 32,
> + },
> +};
> +
> +static void mmp_pcm_adma_irq(void *data)
> +{
> + struct snd_pcm_substream *substream = data;
> + struct mmp_runtime_data *prtd = substream->runtime->private_data;
> + size_t dma_bytes = substream->runtime->dma_bytes;
> +
> + prtd->pointer = (prtd->pointer + prtd->period_size) % dma_bytes;
> + snd_pcm_period_elapsed(substream);
> + return;
> +}
> +
> +static bool filter(struct dma_chan *chan, void *param)
> +{
> + struct mmp_runtime_data *prtd = param;
> + bool found = false;
> + char *devname;
> +
> + devname = kasprintf(GFP_KERNEL, "%s.%d", prtd->dma_res->name,
> + prtd->ssp_id);
> + if ((strcmp(dev_name(chan->device->dev), devname) == 0) &&
> + (chan->chan_id == prtd->dma_res->start)) {
> + chan->private = &prtd->tdma_data;
> + found = true;
> + }
> +
> + kfree(devname);
> + return found;
> +}
> +
> +static int mmp_pcm_hw_params(struct snd_pcm_substream *substream,
> + struct snd_pcm_hw_params *params)
> +{
> + struct snd_pcm_runtime *runtime = substream->runtime;
> + struct mmp_runtime_data *prtd = runtime->private_data;
> + struct snd_soc_pcm_runtime *rtd = substream->private_data;
> + struct pxa2xx_pcm_dma_params *dma_params;
> + size_t totsize = params_buffer_bytes(params);
> + size_t period = params_period_bytes(params);
> + int ret;
> + struct dma_slave_config slave_config;
> + dma_cap_mask_t mask;
> +
> + dma_params = snd_soc_dai_get_dma_data(rtd->cpu_dai, substream);
> + if (!dma_params)
> + return 0;
> +
> + switch (params_format(params)) {
> + case SNDRV_PCM_FORMAT_S8:
> + prtd->tdma_data.bus_size = 8;
> + break;
> + case SNDRV_PCM_FORMAT_S16_LE:
> + prtd->tdma_data.bus_size = 16;
> + break;
> + case SNDRV_PCM_FORMAT_S24_LE:
> + prtd->tdma_data.bus_size = 24;
> + break;
> + case SNDRV_PCM_FORMAT_S32_LE:
> + prtd->tdma_data.bus_size = 32;
> + break;
> + default:
> + return -EINVAL;
> + }
> + prtd->tdma_data.pack_mod = true;
> +
> + dma_cap_zero(mask);
> + dma_cap_set(DMA_CYCLIC, mask);
> + prtd->dma_chan = dma_request_channel(mask, filter, prtd);
> + if (!prtd->dma_chan)
> + return -EINVAL;
> +
> + if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
> + slave_config.direction = DMA_TO_DEVICE;
> + slave_config.dst_addr = dma_params->dev_addr;
> + slave_config.dst_maxburst = 4;
> + } else {
> + slave_config.direction = DMA_FROM_DEVICE;
> + slave_config.src_addr = dma_params->dev_addr;
> + slave_config.src_maxburst = 4;
> + }
> +
> + ret = dmaengine_slave_config(prtd->dma_chan, &slave_config);
> + if (ret)
> + return ret;
> +
> + snd_pcm_set_runtime_buffer(substream, &substream->dma_buffer);
> +
> + prtd->period_size = period;
> + runtime->dma_bytes = totsize;
> +
> + prtd->desc = prtd->dma_chan->device->device_prep_dma_cyclic(
> + prtd->dma_chan, runtime->dma_addr, totsize, period,
> + substream->stream == SNDRV_PCM_STREAM_PLAYBACK ?
> + DMA_TO_DEVICE : DMA_FROM_DEVICE, NULL);
> + if (!prtd->desc) {
> + dev_err(&prtd->dma_chan->dev->device, "cannot prepare slave dma\n");
> + return -EINVAL;
> + }
> +
> + prtd->desc->callback = mmp_pcm_adma_irq;
> + prtd->desc->callback_param = substream;
> + dmaengine_submit(prtd->desc);
> + return 0;
> +}
> +
> +static int mmp_pcm_hw_free(struct snd_pcm_substream *substream)
> +{
> + struct mmp_runtime_data *prtd = substream->runtime->private_data;
> +
> + if (prtd->dma_chan) {
> + dma_release_channel(prtd->dma_chan);
> + prtd->dma_chan = NULL;
> + }
> +
> + return 0;
> +}
> +
> +static int mmp_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
> +{
> + struct mmp_runtime_data *prtd = substream->runtime->private_data;
> + int ret = 0;
> +
> + switch (cmd) {
> + case SNDRV_PCM_TRIGGER_START:
> + prtd->pointer = 0;
> + dma_async_issue_pending(prtd->dma_chan);
> + break;
> +
> + case SNDRV_PCM_TRIGGER_STOP:
> + case SNDRV_PCM_TRIGGER_SUSPEND:
> + case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
> + dmaengine_terminate_all(prtd->dma_chan);
> + break;
> +
> + case SNDRV_PCM_TRIGGER_RESUME:
> + dma_async_issue_pending(prtd->dma_chan);
> + break;
> +
> + case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
> + dma_async_issue_pending(prtd->dma_chan);
> + break;
> +
> + default:
> + ret = -EINVAL;
> + break;
> + }
> +
> + return ret;
> +}
> +
> +static snd_pcm_uframes_t mmp_pcm_pointer(struct snd_pcm_substream *substream)
> +{
> + struct snd_pcm_runtime *runtime = substream->runtime;
> + struct mmp_runtime_data *prtd = runtime->private_data;
> + snd_pcm_uframes_t x;
> +
> + x = bytes_to_frames(runtime, prtd->pointer);
> + if (x == runtime->buffer_size)
> + x = 0;
> +
> + return x;
> +}
> +
> +static int mmp_pcm_open(struct snd_pcm_substream *substream)
> +{
> + struct snd_soc_pcm_runtime *rtd = substream->private_data;
> + struct platform_device *pdev = to_platform_device(rtd->platform->dev);
> + struct snd_pcm_runtime *runtime = substream->runtime;
> + struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
> + struct mmp_runtime_data *prtd;
> + struct resource *r;
> + int ret;
> +
> + r = platform_get_resource(pdev, IORESOURCE_DMA, substream->stream);
> + if (!r)
> + return -EBUSY;
> +
> + snd_soc_set_runtime_hwparams(substream,
> + &mmp_pcm_hardware[substream->stream]);
> +
> + /*
> + * For mysterious reasons (and despite what the manual says)
> + * playback samples are lost if the DMA count is not a multiple
> + * of the DMA burst size. Let's add a rule to enforce that.
> + */
> + ret = snd_pcm_hw_constraint_step(runtime, 0,
> + SNDRV_PCM_HW_PARAM_PERIOD_BYTES, 32);
> + if (ret)
> + goto out;
> +
> + ret = snd_pcm_hw_constraint_step(runtime, 0,
> + SNDRV_PCM_HW_PARAM_BUFFER_BYTES, 32);
> + if (ret)
> + goto out;
> +
> + ret = snd_pcm_hw_constraint_integer(runtime,
> + SNDRV_PCM_HW_PARAM_PERIODS);
> + if (ret < 0)
> + goto out;
> +
> + prtd = devm_kzalloc(&pdev->dev,
> + sizeof(struct mmp_runtime_data), GFP_KERNEL);
> + if (prtd == NULL) {
> + ret = -ENOMEM;
> + goto out;
> + }
> +
> + prtd->substream = substream;
> + runtime->private_data = prtd;
> + prtd->dma_res = r;
> + prtd->ssp_id = cpu_dai->id;
> + return 0;
> +
> +out:
> + return ret;
> +}
> +
> +static int mmp_pcm_close(struct snd_pcm_substream *substream)
> +{
> + struct snd_soc_pcm_runtime *rtd = substream->private_data;
> + struct platform_device *pdev = to_platform_device(rtd->platform->dev);
> + struct snd_pcm_runtime *runtime = substream->runtime;
> + struct mmp_runtime_data *prtd = runtime->private_data;
> +
> + devm_kfree(&pdev->dev, prtd);
> + runtime->private_data = NULL;
> + return 0;
> +}
> +
> +static int mmp_pcm_mmap(struct snd_pcm_substream *substream,
> + struct vm_area_struct *vma)
> +{
> + struct snd_pcm_runtime *runtime = substream->runtime;
> + unsigned long off = vma->vm_pgoff;
> +
> + vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
> + return remap_pfn_range(vma, vma->vm_start,
> + __phys_to_pfn(runtime->dma_addr) + off,
> + vma->vm_end - vma->vm_start, vma->vm_page_prot);
> +}
> +
> +struct snd_pcm_ops mmp_pcm_ops = {
> + .open = mmp_pcm_open,
> + .close = mmp_pcm_close,
> + .ioctl = snd_pcm_lib_ioctl,
> + .hw_params = mmp_pcm_hw_params,
> + .hw_free = mmp_pcm_hw_free,
> + .trigger = mmp_pcm_trigger,
> + .pointer = mmp_pcm_pointer,
> + .mmap = mmp_pcm_mmap,
> +};
> +
> +static int mmp_pcm_preallocate_dma_buffer(struct snd_pcm *pcm, int stream)
> +{
> + struct snd_pcm_substream *substream = pcm->streams[stream].substream;
> + struct snd_dma_buffer *buf = &substream->dma_buffer;
> + size_t size = mmp_pcm_hardware[stream].buffer_bytes_max;
> + struct gen_pool *gpool;
> +
> + buf->dev.type = SNDRV_DMA_TYPE_DEV;
> + buf->dev.dev = pcm->card->dev;
> + buf->private_data = NULL;
> +
> + gpool = sram_get_gpool("asram");
> + if (!gpool)
> + return -ENOMEM;
> +
> + buf->area = (unsigned char *)gen_pool_alloc(gpool, size);
> + if (!buf->area)
> + return -ENOMEM;
> + buf->addr = gen_pool_virt_to_phys(gpool, (unsigned long)buf->area);
> + buf->bytes = size;
> + return 0;
> +}
> +
> +static void mmp_pcm_free_dma_buffers(struct snd_pcm *pcm)
> +{
> + struct snd_pcm_substream *substream;
> + struct snd_dma_buffer *buf;
> + int stream;
> + struct gen_pool *gpool;
> +
> + gpool = sram_get_gpool("asram");
> + if (!gpool)
> + return;
> +
> + for (stream = 0; stream < 2; stream++) {
> + size_t size = mmp_pcm_hardware[stream].buffer_bytes_max;
> +
> + substream = pcm->streams[stream].substream;
> + if (!substream)
> + continue;
> +
> + buf = &substream->dma_buffer;
> + if (!buf->area)
> + continue;
> + gen_pool_free(gpool, (unsigned long)buf->area, size);
> + buf->area = NULL;
> + }
> +
> + return;
> +}
> +
> +static u64 mmp_pcm_dmamask = DMA_BIT_MASK(64);
> +
> +int mmp_pcm_new(struct snd_soc_pcm_runtime *rtd)
> +{
> + struct snd_card *card = rtd->card->snd_card;
> + struct snd_pcm *pcm = rtd->pcm;
> + int ret = 0;
> +
> + if (!card->dev->dma_mask)
> + card->dev->dma_mask = &mmp_pcm_dmamask;
> +
> + if (!card->dev->coherent_dma_mask)
> + card->dev->coherent_dma_mask = DMA_BIT_MASK(64);
> +
> + if (pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream) {
> + ret = mmp_pcm_preallocate_dma_buffer(pcm,
> + SNDRV_PCM_STREAM_PLAYBACK);
> + if (ret)
> + goto out;
> + }
> +
> + if (pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream) {
> + ret = mmp_pcm_preallocate_dma_buffer(pcm,
> + SNDRV_PCM_STREAM_CAPTURE);
> + if (ret)
> + goto out;
> + }
> + out:
> + return ret;
> +}
> +
> +struct snd_soc_platform_driver mmp_soc_platform = {
> + .ops = &mmp_pcm_ops,
> + .pcm_new = mmp_pcm_new,
> + .pcm_free = mmp_pcm_free_dma_buffers,
> +};
> +
> +static __devinit int mmp_pcm_probe(struct platform_device *pdev)
> +{
> + struct mmp_audio_platdata *pdata = pdev->dev.platform_data;
> +
> + if (pdata) {
> + mmp_pcm_hardware[SNDRV_PCM_STREAM_PLAYBACK].buffer_bytes_max =
> + pdata->buffer_max_playback;
> + mmp_pcm_hardware[SNDRV_PCM_STREAM_PLAYBACK].period_bytes_max =
> + pdata->period_max_playback;
> + mmp_pcm_hardware[SNDRV_PCM_STREAM_CAPTURE].buffer_bytes_max =
> + pdata->buffer_max_capture;
> + mmp_pcm_hardware[SNDRV_PCM_STREAM_CAPTURE].period_bytes_max =
> + pdata->period_max_capture;
> + }
> + return snd_soc_register_platform(&pdev->dev, &mmp_soc_platform);
> +}
> +
> +static int __devexit mmp_pcm_remove(struct platform_device *pdev)
> +{
> + snd_soc_unregister_platform(&pdev->dev);
> + return 0;
> +}
> +
> +static struct platform_driver mmp_pcm_driver = {
> + .driver = {
> + .name = "mmp-pcm-audio",
> + .owner = THIS_MODULE,
> + },
> +
> + .probe = mmp_pcm_probe,
> + .remove = __devexit_p(mmp_pcm_remove),
> +};
> +
> +module_platform_driver(mmp_pcm_driver);
> +
> +MODULE_AUTHOR("Leo Yan <leoy(a)marvell.com>");
> +MODULE_DESCRIPTION("MMP Soc Audio DMA module");
> +MODULE_LICENSE("GPL");
--
~Vinod
--
To unsubscribe from this list: send the line "unsubscribe alsa-devel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
5
14
Mark, Liam,
Tegra30's AHUB is structured as follows:
> +-------------+ +-----+ +--------------+ +-----+ +------+
> | FIFO pair 0 |<->| CIF |<->| Cross-bar |<->| CIF |<->| I2S0 |<-> External IO
> +-------------+ +-----+ | (the "AHUB") | +-----+ +------+
> . . . | | . . .
> +-------------+ +-----+ | | +-----+ +------+
> | FIFO pair 3 |<->| CIF |<->| |<->| CIF |<->| I2S4 |<-> External IO
> +-------------+ +-----+ | | +-----+ +------+
> | |
> | | +-----+ +-------+
> | |<->| CIF |<->| SPDIF |<-> External IO
> | | +-----+ +-------+
> | |
> | | +-----+ +-------+
> | |<->| CIF |<->| DAM |
> | | +-----+ +-------+
> +--------------+
Notes on the diagram:
Each FIFO above is a separate TX and RX FIFO. I merged them in the
drawing for simplicity, but they operate completely independently;
different memory packing formats, data flow rates, ...
The CIF can convert the audio format, e.g. mono<->stereo conversion and
change the # of bits in the data in pretty arbitrary combinations. This
is true for all CIFs; those that join the AHUB core to either the DMA
FIFOs or the I2S/SPDIF/DAM controllers.
The AHUB core is a complete cross-bar; each output selects 1 of the n
inputs.
The I2S and SPDIF controllers take audio from the AHUB, format it to the
appropriate protocol, and send to external IO (or the other way around).
The I2S and SPDIF modules don't perform any additional data
rate/width/channel conversion; the CIF must do whatever conversions are
needed.
The DAMs take 2 input channels from the AHUB, optionally perform some
sample rate conversion and/or bit size conversion beyond what the CIF
does, mix them together, and send them back into the AHUB cross-bar.
Questions:
It seems like the whole point of ASoC dynamic PCM is to represent the
AHUB core, and at least some of the surrounding boxes above, as an ASoC
CODEC.
Initially, I would assume the AHUB CODEC's DAIs would be the DMA FIFOs
and the I2S* controllers themselves, i.e. include everything in the
above diagram.
If I do that, then the dai_links that the ASoC machine driver registers
for I2S->WM8903 would represent a codec DAI <-> codec DAI link rather
than a regular CPU DAI <-> codec DAI link. The difference here is the
lack of symmetry in struct snd_soc_dai_link: The CPU-side of each DAI
link only has a "cpu_dai_name" to identify it, whereas the codec side
has both a codec_name (or of node) /plus/ a DAI name. This is important
at least in the context of device tree, where to avoid hard-coding
specific device names into the dai_link structure's .codec_name field in
the machine driver, an of_node is looked up at run-time instead, and
then the codec_dai_name interpreted relative to that. Without a CPU-side
separation between name/node and dai_name, that's not possible. So, I
sent a patch for that in case this is the right approach.
An alternative to expanding struct snd_soc_dai_link might be to add an
API so the machine driver could ask the AHUB driver for the
globally-unique name of each DAI it exposes, and write that into
dai_link.cpu_dai_name. But if we have that API, we could use it for the
codec-side of the link to, and just have .codec_dai_name and remove the
.codec_name and .codec_of_node fields.
Alternatively, perhaps the DMA FIFOs should be registered as CPU DAIs
completely separately from the AHUB CODEC. The AHUB CIFs would then be
the DAIs registered by the AHUB CODEC. But then, the machine driver
would need to include dai_links for all the DMA FIFO <-> CIF
connections, which would end up duplicating that list of links into all
Tegra machine drives (or perhaps sharing it in common code).
Very curious for your thoughts...
2
2

29 May '12
From: M R Swami Reddy <MR.Swami.Reddy(a)ti.com>
Updated the patch by removing the startup(), as per the Liam's comments.
Plz review the below Isabelle audio codec driver patch.
Latest datasheet at below url:
https://sps07.itg.ti.com/sites/MIS/PAIS_DESIGN/ISABELLE/CHIP_DESIGN/Shared%…
-----------------
ASoC: Support TI ISABELLE Audio driver
The Isabelle Audio IC is a complete low power high fidelity CODEC with integrated
ADCs, DACs, decimation and interpolation filters, PLL, and power providers. This
device supports 2 analog and 2 digital microphone channels, a mono earpiece driver,
stereo class G headphone drivers with ultra low power and best SNR in the industry,
stereo Class D speaker drivers, and 2 high performance Line drivers.
Signed-off-by: Vishwas A Deshpande <vishwas.a.deshpande(a)ti.com>
---
sound/soc/codecs/Kconfig | 4 +
sound/soc/codecs/Makefile | 2 +
sound/soc/codecs/isabelle.c | 1262 ++++++++++++++++++++++++++++++++++
sound/soc/codecs/isabelle.h | 143 ++++
4 files changed, 1411 insertions(+), 0 deletions(-)
diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig
index ed5f66c..4ebf9e8 100644
--- a/sound/soc/codecs/Kconfig
+++ b/sound/soc/codecs/Kconfig
@@ -30,6 +30,7 @@ config SND_SOC_ALL_CODECS
select SND_SOC_CX20442
select SND_SOC_DA7210 if I2C
select SND_SOC_DFBMCS320
+ select SND_SOC_ISABELLE if I2C
select SND_SOC_JZ4740_CODEC if SOC_JZ4740
select SND_SOC_LM4857 if I2C
select SND_SOC_LM49453 if I2C
@@ -185,6 +186,9 @@ config SND_SOC_DFBMCS320
config SND_SOC_DMIC
tristate
+config SND_SOC_ISABELLE
+ tristate
+
config SND_SOC_LM49453
tristate
diff --git a/sound/soc/codecs/Makefile b/sound/soc/codecs/Makefile
index 7bbfdb2..fdc1ff6 100644
--- a/sound/soc/codecs/Makefile
+++ b/sound/soc/codecs/Makefile
@@ -17,6 +17,7 @@ snd-soc-cx20442-objs := cx20442.o
snd-soc-da7210-objs := da7210.o
snd-soc-dfbmcs320-objs := dfbmcs320.o
snd-soc-dmic-objs := dmic.o
+snd-soc-isabelle-objs := isabelle.o
snd-soc-l3-objs := l3.o
snd-soc-lm49453-objs := lm49453.o
snd-soc-max98088-objs := max98088.o
@@ -106,6 +107,7 @@ obj-$(CONFIG_SND_SOC_CX20442) += snd-soc-cx20442.o
obj-$(CONFIG_SND_SOC_DA7210) += snd-soc-da7210.o
obj-$(CONFIG_SND_SOC_DFBMCS320) += snd-soc-dfbmcs320.o
obj-$(CONFIG_SND_SOC_DMIC) += snd-soc-dmic.o
+obj-$(CONFIG_SND_SOC_ISABELLE) += snd-soc-isabelle.o
obj-$(CONFIG_SND_SOC_L3) += snd-soc-l3.o
obj-$(CONFIG_SND_SOC_LM49453) += snd-soc-lm49453.o
obj-$(CONFIG_SND_SOC_JZ4740_CODEC) += snd-soc-jz4740-codec.o
diff --git a/sound/soc/codecs/isabelle.c b/sound/soc/codecs/isabelle.c
new file mode 100644
index 0000000..ac33d4f
--- /dev/null
+++ b/sound/soc/codecs/isabelle.c
@@ -0,0 +1,1262 @@
+/*
+ * isabelle.c - Low power high fidelity audio codec driver
+ *
+ * Copyright (c) 2012 Texas Instruments, Inc
+ *
+ * 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; version 2 of the License.
+ *
+ *
+ * Initially based on sound/soc/codecs/twl6040.c
+ *
+ */
+#include <linux/module.h>
+#include <linux/moduleparam.h>
+#include <linux/version.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/delay.h>
+#include <linux/pm.h>
+#include <linux/regmap.h>
+#include <linux/i2c.h>
+#include <linux/slab.h>
+#include <sound/core.h>
+#include <sound/pcm.h>
+#include <sound/pcm_params.h>
+#include <sound/soc.h>
+#include <sound/soc-dapm.h>
+#include <sound/tlv.h>
+#include <sound/jack.h>
+#include <sound/initval.h>
+#include <asm/div64.h>
+#include "isabelle.h"
+
+
+/* Register default values for ISABELLE driver. */
+static struct reg_default isabelle_reg_defs[] = {
+ { 0, 0x00 },
+ { 1, 0x00 },
+ { 2, 0x00 },
+ { 3, 0x00 },
+ { 4, 0x00 },
+ { 5, 0x00 },
+ { 6, 0x00 },
+ { 7, 0x00 },
+ { 8, 0x00 },
+ { 9, 0x00 },
+ { 10, 0x00 },
+ { 11, 0x00 },
+ { 12, 0x00 },
+ { 13, 0x00 },
+ { 14, 0x00 },
+ { 15, 0x00 },
+ { 16, 0x00 },
+ { 17, 0x00 },
+ { 18, 0x00 },
+ { 19, 0x00 },
+ { 20, 0x00 },
+ { 21, 0x02 },
+ { 22, 0x02 },
+ { 23, 0x02 },
+ { 24, 0x02 },
+ { 25, 0x0F },
+ { 26, 0x8F },
+ { 27, 0x0F },
+ { 28, 0x8F },
+ { 29, 0x00 },
+ { 30, 0x00 },
+ { 31, 0x00 },
+ { 32, 0x00 },
+ { 33, 0x00 },
+ { 34, 0x00 },
+ { 35, 0x00 },
+ { 36, 0x00 },
+ { 37, 0x00 },
+ { 38, 0x00 },
+ { 39, 0x00 },
+ { 40, 0x00 },
+ { 41, 0x00 },
+ { 42, 0x00 },
+ { 43, 0x00 },
+ { 44, 0x00 },
+ { 45, 0x00 },
+ { 46, 0x00 },
+ { 47, 0x00 },
+ { 48, 0x00 },
+ { 49, 0x00 },
+ { 50, 0x00 },
+ { 51, 0x00 },
+ { 52, 0x00 },
+ { 53, 0x00 },
+ { 54, 0x00 },
+ { 55, 0x00 },
+ { 56, 0x00 },
+ { 57, 0x00 },
+ { 58, 0x00 },
+ { 59, 0x00 },
+ { 60, 0x00 },
+ { 61, 0x00 },
+ { 62, 0x00 },
+ { 63, 0x00 },
+ { 64, 0x00 },
+ { 65, 0x00 },
+ { 66, 0x00 },
+ { 67, 0x00 },
+ { 68, 0x00 },
+ { 69, 0x90 },
+ { 70, 0x90 },
+ { 71, 0x90 },
+ { 72, 0x00 },
+ { 73, 0x00 },
+ { 74, 0x00 },
+ { 75, 0x00 },
+ { 76, 0x00 },
+ { 77, 0x00 },
+ { 78, 0x00 },
+ { 79, 0x00 },
+ { 80, 0x00 },
+ { 81, 0x00 },
+ { 82, 0x00 },
+ { 83, 0x00 },
+ { 84, 0x00 },
+ { 85, 0x07 },
+ { 86, 0x00 },
+ { 87, 0x00 },
+ { 88, 0x00 },
+ { 89, 0x07 },
+ { 90, 0x80 },
+ { 91, 0x07 },
+ { 92, 0x07 },
+ { 93, 0x00 },
+ { 94, 0x00 },
+ { 95, 0x00 },
+ { 96, 0x00 },
+ { 97, 0x00 },
+ { 98, 0x00 },
+ { 99, 0x00 },
+};
+
+/* codec private data */
+struct isabelle_priv {
+ struct regmap *regmap;
+};
+
+static const char *isabelle_rx1_texts[] = {"VRX1", "ARX1"};
+static const char *isabelle_rx2_texts[] = {"VRX2", "ARX2"};
+
+static const struct soc_enum isabelle_rx1_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_VOICE_HPF_CFG_REG, 3, 1, isabelle_rx1_texts),
+ SOC_ENUM_SINGLE(ISABELLE_AUDIO_HPF_CFG_REG, 5, 1, isabelle_rx1_texts),
+};
+
+static const struct soc_enum isabelle_rx2_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_VOICE_HPF_CFG_REG, 2, 1, isabelle_rx2_texts),
+ SOC_ENUM_SINGLE(ISABELLE_AUDIO_HPF_CFG_REG, 4, 1, isabelle_rx2_texts),
+};
+
+/* Headset DAC playback switches */
+static const struct snd_kcontrol_new rx1_mux_controls =
+ SOC_DAPM_ENUM("Route", isabelle_rx1_enum);
+
+static const struct snd_kcontrol_new rx2_mux_controls =
+ SOC_DAPM_ENUM("Route", isabelle_rx2_enum);
+
+/* TX input selection */
+static const char *isabelle_atx_texts[] = {"AMIC1", "DMIC"};
+static const char *isabelle_vtx_texts[] = {"AMIC2", "DMIC"};
+
+static const struct soc_enum isabelle_atx_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_AMIC_CFG_REG, 7, 1, isabelle_atx_texts),
+ SOC_ENUM_SINGLE(ISABELLE_DMIC_CFG_REG, 0, 1, isabelle_atx_texts),
+};
+
+static const struct soc_enum isabelle_vtx_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_AMIC_CFG_REG, 6, 1, isabelle_vtx_texts),
+ SOC_ENUM_SINGLE(ISABELLE_DMIC_CFG_REG, 0, 1, isabelle_vtx_texts),
+};
+
+static const struct snd_kcontrol_new atx_mux_controls =
+ SOC_DAPM_ENUM("Route", isabelle_atx_enum);
+
+static const struct snd_kcontrol_new vtx_mux_controls =
+ SOC_DAPM_ENUM("Route", isabelle_vtx_enum);
+
+/* Left analog microphone selection */
+static const char *isabelle_amic1_texts[] = {
+ "Main Mic", "Headset Mic", "Aux/FM Left"};
+
+/* Left analog microphone selection */
+static const char *isabelle_amic2_texts[] = {"Sub Mic", "Aux/FM Right"};
+
+static const struct soc_enum isabelle_amic1_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_AMIC_CFG_REG, 5,
+ ARRAY_SIZE(isabelle_amic1_texts),
+ isabelle_amic1_texts),
+};
+
+static const struct soc_enum isabelle_amic2_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_AMIC_CFG_REG, 4,
+ ARRAY_SIZE(isabelle_amic2_texts),
+ isabelle_amic2_texts),
+};
+
+static const struct snd_kcontrol_new amic1_control =
+ SOC_DAPM_ENUM("Route", isabelle_amic1_enum);
+
+static const struct snd_kcontrol_new amic2_control =
+ SOC_DAPM_ENUM("Route", isabelle_amic2_enum);
+
+static const char *isabelle_st_audio_texts[] = {"ATX1", "ATX2"};
+
+static const char *isabelle_st_voice_texts[] = {"VTX1", "VTX2"};
+
+static const struct soc_enum isabelle_st_audio_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_ATX_STPGA1_CFG_REG, 7, 1,
+ isabelle_st_audio_texts),
+ SOC_ENUM_SINGLE(ISABELLE_ATX_STPGA2_CFG_REG, 7, 1,
+ isabelle_st_audio_texts),
+};
+
+static const struct soc_enum isabelle_st_voice_enum[] = {
+ SOC_ENUM_SINGLE(ISABELLE_VTX_STPGA1_CFG_REG, 7, 1,
+ isabelle_st_voice_texts),
+ SOC_ENUM_SINGLE(ISABELLE_VTX2_STPGA2_CFG_REG, 7, 1,
+ isabelle_st_voice_texts),
+};
+
+static const struct snd_kcontrol_new st_audio_control =
+ SOC_DAPM_ENUM("Route", isabelle_st_audio_enum);
+
+static const struct snd_kcontrol_new st_voice_control =
+ SOC_DAPM_ENUM("Route", isabelle_st_voice_enum);
+
+/* Mixer controls */
+static const struct snd_kcontrol_new isabelle_hs_left_mixer_controls[] = {
+SOC_DAPM_SINGLE("DAC1L Playback Switch", ISABELLE_HSDRV_CFG1_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("APGA1 Playback Switch", ISABELLE_HSDRV_CFG1_REG, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_hs_right_mixer_controls[] = {
+SOC_DAPM_SINGLE("DAC1R Playback Switch", ISABELLE_HSDRV_CFG1_REG, 5, 1, 0),
+SOC_DAPM_SINGLE("APGA2 Playback Switch", ISABELLE_HSDRV_CFG1_REG, 4, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_hf_left_mixer_controls[] = {
+SOC_DAPM_SINGLE("DAC2L Playback Switch", ISABELLE_HFLPGA_CFG_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("APGA1 Playback Switch", ISABELLE_HFLPGA_CFG_REG, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_hf_right_mixer_controls[] = {
+SOC_DAPM_SINGLE("DAC2R Playback Switch", ISABELLE_HFRPGA_CFG_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("APGA2 Playback Switch", ISABELLE_HFRPGA_CFG_REG, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_ep_mixer_controls[] = {
+SOC_DAPM_SINGLE("DAC2L Playback Switch", ISABELLE_EARDRV_CFG1_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("APGA1 Playback Switch", ISABELLE_EARDRV_CFG1_REG, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_aux_left_mixer_controls[] = {
+SOC_DAPM_SINGLE("DAC3L Playback Switch", ISABELLE_LINEAMP_CFG_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("APGA1 Playback Switch", ISABELLE_LINEAMP_CFG_REG, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_aux_right_mixer_controls[] = {
+SOC_DAPM_SINGLE("DAC3R Playback Switch", ISABELLE_LINEAMP_CFG_REG, 5, 1, 0),
+SOC_DAPM_SINGLE("APGA2 Playback Switch", ISABELLE_LINEAMP_CFG_REG, 4, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_dpga1_left_mixer_controls[] = {
+SOC_DAPM_SINGLE("RX1 Playback Switch", ISABELLE_DPGA1LR_IN_SEL_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("RX3 Playback Switch", ISABELLE_DPGA1LR_IN_SEL_REG, 6, 1, 0),
+SOC_DAPM_SINGLE("RX5 Playback Switch", ISABELLE_DPGA1LR_IN_SEL_REG, 5, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_dpga1_right_mixer_controls[] = {
+SOC_DAPM_SINGLE("RX2 Playback Switch", ISABELLE_DPGA1LR_IN_SEL_REG, 3, 1, 0),
+SOC_DAPM_SINGLE("RX4 Playback Switch", ISABELLE_DPGA1LR_IN_SEL_REG, 2, 1, 0),
+SOC_DAPM_SINGLE("RX6 Playback Switch", ISABELLE_DPGA1LR_IN_SEL_REG, 1, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_dpga2_left_mixer_controls[] = {
+SOC_DAPM_SINGLE("RX1 Playback Switch", ISABELLE_DPGA2L_IN_SEL_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("RX2 Playback Switch", ISABELLE_DPGA2L_IN_SEL_REG, 6, 1, 0),
+SOC_DAPM_SINGLE("RX3 Playback Switch", ISABELLE_DPGA2L_IN_SEL_REG, 5, 1, 0),
+SOC_DAPM_SINGLE("RX4 Playback Switch", ISABELLE_DPGA2L_IN_SEL_REG, 4, 1, 0),
+SOC_DAPM_SINGLE("RX5 Playback Switch", ISABELLE_DPGA2L_IN_SEL_REG, 3, 1, 0),
+SOC_DAPM_SINGLE("RX6 Playback Switch", ISABELLE_DPGA2L_IN_SEL_REG, 2, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_dpga2_right_mixer_controls[] = {
+SOC_DAPM_SINGLE("USNC Playback Switch", ISABELLE_DPGA2R_IN_SEL_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("RX2 Playback Switch", ISABELLE_DPGA2R_IN_SEL_REG, 3, 1, 0),
+SOC_DAPM_SINGLE("RX4 Playback Switch", ISABELLE_DPGA2R_IN_SEL_REG, 2, 1, 0),
+SOC_DAPM_SINGLE("RX6 Playback Switch", ISABELLE_DPGA2R_IN_SEL_REG, 1, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_dpga3_left_mixer_controls[] = {
+SOC_DAPM_SINGLE("RX1 Playback Switch", ISABELLE_DPGA3LR_IN_SEL_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("RX3 Playback Switch", ISABELLE_DPGA3LR_IN_SEL_REG, 6, 1, 0),
+SOC_DAPM_SINGLE("RX5 Playback Switch", ISABELLE_DPGA3LR_IN_SEL_REG, 5, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_dpga3_right_mixer_controls[] = {
+SOC_DAPM_SINGLE("RX2 Playback Switch", ISABELLE_DPGA3LR_IN_SEL_REG, 3, 1, 0),
+SOC_DAPM_SINGLE("RX4 Playback Switch", ISABELLE_DPGA3LR_IN_SEL_REG, 2, 1, 0),
+SOC_DAPM_SINGLE("RX6 Playback Switch", ISABELLE_DPGA3LR_IN_SEL_REG, 1, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_rx1_mixer_controls[] = {
+SOC_DAPM_SINGLE("ST1 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("DL1 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_rx2_mixer_controls[] = {
+SOC_DAPM_SINGLE("ST2 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 5, 1, 0),
+SOC_DAPM_SINGLE("DL2 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 4, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_rx3_mixer_controls[] = {
+SOC_DAPM_SINGLE("ST1 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 3, 1, 0),
+SOC_DAPM_SINGLE("DL3 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 2, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_rx4_mixer_controls[] = {
+SOC_DAPM_SINGLE("ST2 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 1, 1, 0),
+SOC_DAPM_SINGLE("DL4 Playback Switch", ISABELLE_RX_INPUT_CFG_REG, 0, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_rx5_mixer_controls[] = {
+SOC_DAPM_SINGLE("ST1 Playback Switch", ISABELLE_RX_INPUT_CFG2_REG, 7, 1, 0),
+SOC_DAPM_SINGLE("DL5 Playback Switch", ISABELLE_RX_INPUT_CFG2_REG, 6, 1, 0),
+};
+
+static const struct snd_kcontrol_new isabelle_rx6_mixer_controls[] = {
+SOC_DAPM_SINGLE("ST2 Playback Switch", ISABELLE_RX_INPUT_CFG2_REG, 5, 1, 0),
+SOC_DAPM_SINGLE("DL6 Playback Switch", ISABELLE_RX_INPUT_CFG2_REG, 4, 1, 0),
+};
+
+static const struct snd_kcontrol_new ep_path_enable_control =
+ SOC_DAPM_SINGLE("Switch", ISABELLE_EARDRV_CFG2_REG, 0, 1, 0);
+
+/* TLV Declarations */
+
+/*
+ * MICGAIN volume control:
+ * from 0 to 30 dB in 1 dB steps
+ */
+static const DECLARE_TLV_DB_SCALE(mic_amp_tlv, 0, 100, 0);
+
+/*
+ * AFMGAIN volume control:
+ * from -33 to 12 dB in 3 dB steps
+ */
+static const DECLARE_TLV_DB_SCALE(afm_amp_tlv, -3300, 300, 0);
+
+/*
+ * DACGAIN (HS, EP, LINE) volume control:
+ * from -12 to 6 dB in 2 dB steps
+ */
+static const DECLARE_TLV_DB_SCALE(dac_tlv, -1200, 200, 0);
+
+/*
+ * HFGAIN volume control:
+ * from -50 to 6 dB in 2 dB steps
+ */
+static const DECLARE_TLV_DB_SCALE(hf_tlv, -5000, 200, 0);
+
+/*
+ * DPGAGAIN volume control:
+ * from -63 to 0 dB in 1 dB steps
+ */
+static const DECLARE_TLV_DB_SCALE(dpga_tlv, -6300, 100, 1);
+
+/*
+ * STGAIN volume control:
+ * from -27 to 0 dB in 3 dB steps
+ */
+static const DECLARE_TLV_DB_SCALE(st_tlv, -2700, 300, 1);
+
+/*
+ * RXGAIN volume control:
+ * from -63 to 9 dB in 1 dB steps
+ */
+static const DECLARE_TLV_DB_SCALE(rx_tlv, -6300, 100, 1);
+
+/*
+ * TXGAIN volume control:
+ * from 9 to -6 dB in 1 dB steps
+ */
+static const DECLARE_TLV_DB_SCALE(tx_tlv, -600, 100, 0);
+
+static const struct snd_kcontrol_new isabelle_snd_controls[] = {
+ SOC_DOUBLE_TLV("Headset Playback Volume", ISABELLE_HSDRV_GAIN_REG,
+ 4, 0, 0xF, 0, dac_tlv),
+ SOC_DOUBLE_R_TLV("Handsfree Playback Volume",
+ ISABELLE_HFLPGA_CFG_REG, ISABELLE_HFRPGA_CFG_REG,
+ 0, 0x1F, 0, hf_tlv),
+ SOC_DOUBLE_TLV("Aux Playback Volume", ISABELLE_LINEAMP_GAIN_REG,
+ 4, 0, 0xF, 0, dac_tlv),
+ SOC_SINGLE_TLV("Earpiece Playback Volume", ISABELLE_EARDRV_CFG1_REG,
+ 0, 0xF, 0, dac_tlv),
+
+ SOC_DOUBLE_TLV("Aux FM Volume", ISABELLE_APGA_GAIN_REG, 4, 0, 0xF, 0,
+ afm_amp_tlv),
+ SOC_SINGLE_TLV("Mic1 Capture Volume", ISABELLE_MIC1_GAIN_REG, 3, 0x1F,
+ 0, mic_amp_tlv),
+ SOC_SINGLE_TLV("Mic2 Capture Volume", ISABELLE_MIC2_GAIN_REG, 3, 0x1F,
+ 0, mic_amp_tlv),
+
+ SOC_DOUBLE_R_TLV("DPGA1 Volume", ISABELLE_DPGA1L_GAIN_REG,
+ ISABELLE_DPGA1R_GAIN_REG, 0, 0x3F, 0, dpga_tlv),
+ SOC_DOUBLE_R_TLV("DPGA2 Volume", ISABELLE_DPGA2L_GAIN_REG,
+ ISABELLE_DPGA2R_GAIN_REG, 0, 0x3F, 0, dpga_tlv),
+ SOC_DOUBLE_R_TLV("DPGA3 Volume", ISABELLE_DPGA3L_GAIN_REG,
+ ISABELLE_DPGA3R_GAIN_REG, 0, 0x3F, 0, dpga_tlv),
+
+ SOC_SINGLE_TLV("Sidetone Audio TX1 Volume",
+ ISABELLE_ATX_STPGA1_CFG_REG, 0, 0xF, 0, st_tlv),
+ SOC_SINGLE_TLV("Sidetone Audio TX2 Volume",
+ ISABELLE_ATX_STPGA2_CFG_REG, 0, 0xF, 0, st_tlv),
+ SOC_SINGLE_TLV("Sidetone Voice TX1 Volume",
+ ISABELLE_VTX_STPGA1_CFG_REG, 0, 0xF, 0, st_tlv),
+ SOC_SINGLE_TLV("Sidetone Voice TX2 Volume",
+ ISABELLE_VTX2_STPGA2_CFG_REG, 0, 0xF, 0, st_tlv),
+
+ SOC_SINGLE_TLV("Audio TX1 Volume", ISABELLE_ATX1_DPGA_REG, 4, 0xF, 0,
+ tx_tlv),
+ SOC_SINGLE_TLV("Audio TX2 Volume", ISABELLE_ATX2_DPGA_REG, 4, 0xF, 0,
+ tx_tlv),
+ SOC_SINGLE_TLV("Voice TX1 Volume", ISABELLE_VTX1_DPGA_REG, 4, 0xF, 0,
+ tx_tlv),
+ SOC_SINGLE_TLV("Voice TX2 Volume", ISABELLE_VTX2_DPGA_REG, 4, 0xF, 0,
+ tx_tlv),
+
+ SOC_SINGLE_TLV("RX1 DPGA Volume", ISABELLE_RX1_DPGA_REG, 0, 0x3F, 0,
+ rx_tlv),
+ SOC_SINGLE_TLV("RX2 DPGA Volume", ISABELLE_RX2_DPGA_REG, 0, 0x3F, 0,
+ rx_tlv),
+ SOC_SINGLE_TLV("RX3 DPGA Volume", ISABELLE_RX3_DPGA_REG, 0, 0x3F, 0,
+ rx_tlv),
+ SOC_SINGLE_TLV("RX4 DPGA Volume", ISABELLE_RX4_DPGA_REG, 0, 0x3F, 0,
+ rx_tlv),
+ SOC_SINGLE_TLV("RX5 DPGA Volume", ISABELLE_RX5_DPGA_REG, 0, 0x3F, 0,
+ rx_tlv),
+ SOC_SINGLE_TLV("RX6 DPGA Volume", ISABELLE_RX6_DPGA_REG, 0, 0x3F, 0,
+ rx_tlv),
+
+ SOC_SINGLE("Headset Noise Gate", ISABELLE_HS_NG_CFG1_REG, 7, 1, 0),
+ SOC_SINGLE("Handsfree Noise Gate", ISABELLE_HF_NG_CFG1_REG, 7, 1, 0),
+
+ SOC_SINGLE("ATX1 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 7, 1, 0),
+ SOC_SINGLE("ATX2 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 6, 1, 0),
+ SOC_SINGLE("ARX1 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 5, 1, 0),
+ SOC_SINGLE("ARX2 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 4, 1, 0),
+ SOC_SINGLE("ARX3 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 3, 1, 0),
+ SOC_SINGLE("ARX4 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 2, 1, 0),
+ SOC_SINGLE("ARX5 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 1, 1, 0),
+ SOC_SINGLE("ARX6 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 0, 1, 0),
+ SOC_SINGLE("VRX1 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 3, 1, 0),
+ SOC_SINGLE("VRX2 Filter Bypass Switch", ISABELLE_AUDIO_HPF_CFG_REG,
+ 2, 1, 0),
+
+ SOC_SINGLE("ATX1 Filter Enable Switch", ISABELLE_ALU_TX_EN_REG,
+ 7, 1, 0),
+ SOC_SINGLE("ATX2 Filter Enable Switch", ISABELLE_ALU_TX_EN_REG,
+ 6, 1, 0),
+ SOC_SINGLE("VTX1 Filter Enable Switch", ISABELLE_ALU_TX_EN_REG,
+ 5, 1, 0),
+ SOC_SINGLE("VTX2 Filter Enable Switch", ISABELLE_ALU_TX_EN_REG,
+ 4, 1, 0),
+ SOC_SINGLE("RX1 Filter Enable Switch", ISABELLE_ALU_RX_EN_REG,
+ 5, 1, 0),
+ SOC_SINGLE("RX2 Filter Enable Switch", ISABELLE_ALU_RX_EN_REG,
+ 4, 1, 0),
+ SOC_SINGLE("RX3 Filter Enable Switch", ISABELLE_ALU_RX_EN_REG,
+ 3, 1, 0),
+ SOC_SINGLE("RX4 Filter Enable Switch", ISABELLE_ALU_RX_EN_REG,
+ 2, 1, 0),
+ SOC_SINGLE("RX5 Filter Enable Switch", ISABELLE_ALU_RX_EN_REG,
+ 1, 1, 0),
+ SOC_SINGLE("RX6 Filter Enable Switch", ISABELLE_ALU_RX_EN_REG,
+ 0, 1, 0),
+
+ SOC_SINGLE("ULATX12 Capture Switch", ISABELLE_ULATX12_INTF_CFG_REG,
+ 7, 1, 0),
+
+ SOC_SINGLE("DL12 Playback Switch", ISABELLE_DL12_INTF_CFG_REG,
+ 7, 1, 0),
+ SOC_SINGLE("DL34 Playback Switch", ISABELLE_DL34_INTF_CFG_REG,
+ 7, 1, 0),
+ SOC_SINGLE("DL56 Playback Switch", ISABELLE_DL56_INTF_CFG_REG,
+ 7, 1, 0),
+
+ /* DMIC Switch */
+ SOC_SINGLE("DMIC Switch", ISABELLE_DMIC_CFG_REG, 0, 1, 0),
+};
+
+static const struct snd_soc_dapm_widget isabelle_dapm_widgets[] = {
+ /* Inputs */
+ SND_SOC_DAPM_INPUT("MAINMIC"),
+ SND_SOC_DAPM_INPUT("HSMIC"),
+ SND_SOC_DAPM_INPUT("SUBMIC"),
+ SND_SOC_DAPM_INPUT("LINEIN1"),
+ SND_SOC_DAPM_INPUT("LINEIN2"),
+ SND_SOC_DAPM_INPUT("DMICDAT"),
+
+ /* Outputs */
+ SND_SOC_DAPM_OUTPUT("HSOL"),
+ SND_SOC_DAPM_OUTPUT("HSOR"),
+ SND_SOC_DAPM_OUTPUT("HFL"),
+ SND_SOC_DAPM_OUTPUT("HFR"),
+ SND_SOC_DAPM_OUTPUT("EP"),
+ SND_SOC_DAPM_OUTPUT("LINEOUT1"),
+ SND_SOC_DAPM_OUTPUT("LINEOUT2"),
+
+ SND_SOC_DAPM_PGA("DL1", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DL2", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DL3", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DL4", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DL5", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DL6", SND_SOC_NOPM, 0, 0, NULL, 0),
+
+ /* Analog input muxes for the capture amplifiers */
+ SND_SOC_DAPM_MUX("Analog Left Capture Route",
+ SND_SOC_NOPM, 0, 0, &amic1_control),
+ SND_SOC_DAPM_MUX("Analog Right Capture Route",
+ SND_SOC_NOPM, 0, 0, &amic2_control),
+
+ SND_SOC_DAPM_MUX("Sidetone Audio Playback", SND_SOC_NOPM, 0, 0,
+ &st_audio_control),
+ SND_SOC_DAPM_MUX("Sidetone Voice Playback", SND_SOC_NOPM, 0, 0,
+ &st_voice_control),
+
+ /* AIF */
+ SND_SOC_DAPM_AIF_IN("INTF1_SDI", NULL, 0, ISABELLE_INTF_EN_REG, 7, 0),
+ SND_SOC_DAPM_AIF_IN("INTF2_SDI", NULL, 0, ISABELLE_INTF_EN_REG, 6, 0),
+
+ SND_SOC_DAPM_AIF_OUT("INTF1_SDO", NULL, 0, ISABELLE_INTF_EN_REG, 5, 0),
+ SND_SOC_DAPM_AIF_OUT("INTF2_SDO", NULL, 0, ISABELLE_INTF_EN_REG, 4, 0),
+
+ SND_SOC_DAPM_OUT_DRV("ULATX1", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("ULATX2", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("ULVTX1", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("ULVTX2", SND_SOC_NOPM, 0, 0, NULL, 0),
+
+ /* Analog Capture PGAs */
+ SND_SOC_DAPM_PGA("MicAmp1", ISABELLE_AMIC_CFG_REG, 5, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("MicAmp2", ISABELLE_AMIC_CFG_REG, 4, 0, NULL, 0),
+
+ /* Auxiliary FM PGAs */
+ SND_SOC_DAPM_PGA("APGA1", ISABELLE_APGA_CFG_REG, 7, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("APGA2", ISABELLE_APGA_CFG_REG, 6, 0, NULL, 0),
+
+ /* ADCs */
+ SND_SOC_DAPM_ADC("ADC1", "Left Front Capture",
+ ISABELLE_AMIC_CFG_REG, 7, 0),
+ SND_SOC_DAPM_ADC("ADC2", "Right Front Capture",
+ ISABELLE_AMIC_CFG_REG, 6, 0),
+
+ /* Microphone Bias */
+ SND_SOC_DAPM_SUPPLY("Headset Mic Bias", ISABELLE_ABIAS_CFG_REG,
+ 3, 0, NULL, 0),
+ SND_SOC_DAPM_SUPPLY("Main Mic Bias", ISABELLE_ABIAS_CFG_REG,
+ 2, 0, NULL, 0),
+ SND_SOC_DAPM_SUPPLY("Digital Mic1 Bias",
+ ISABELLE_DBIAS_CFG_REG, 3, 0, NULL, 0),
+ SND_SOC_DAPM_SUPPLY("Digital Mic2 Bias",
+ ISABELLE_DBIAS_CFG_REG, 2, 0, NULL, 0),
+
+ /* Mixers */
+ SND_SOC_DAPM_MIXER("Headset Left Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_hs_left_mixer_controls,
+ ARRAY_SIZE(isabelle_hs_left_mixer_controls)),
+ SND_SOC_DAPM_MIXER("Headset Right Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_hs_right_mixer_controls,
+ ARRAY_SIZE(isabelle_hs_right_mixer_controls)),
+ SND_SOC_DAPM_MIXER("Handsfree Left Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_hf_left_mixer_controls,
+ ARRAY_SIZE(isabelle_hf_left_mixer_controls)),
+ SND_SOC_DAPM_MIXER("Handsfree Right Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_hf_right_mixer_controls,
+ ARRAY_SIZE(isabelle_hf_right_mixer_controls)),
+ SND_SOC_DAPM_MIXER("LINEOUT1 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_aux_left_mixer_controls,
+ ARRAY_SIZE(isabelle_aux_left_mixer_controls)),
+ SND_SOC_DAPM_MIXER("LINEOUT2 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_aux_right_mixer_controls,
+ ARRAY_SIZE(isabelle_aux_right_mixer_controls)),
+ SND_SOC_DAPM_MIXER("Earphone Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_ep_mixer_controls,
+ ARRAY_SIZE(isabelle_ep_mixer_controls)),
+
+ SND_SOC_DAPM_MIXER("DPGA1L Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_dpga1_left_mixer_controls,
+ ARRAY_SIZE(isabelle_dpga1_left_mixer_controls)),
+ SND_SOC_DAPM_MIXER("DPGA1R Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_dpga1_right_mixer_controls,
+ ARRAY_SIZE(isabelle_dpga1_right_mixer_controls)),
+ SND_SOC_DAPM_MIXER("DPGA2L Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_dpga2_left_mixer_controls,
+ ARRAY_SIZE(isabelle_dpga2_left_mixer_controls)),
+ SND_SOC_DAPM_MIXER("DPGA2R Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_dpga2_right_mixer_controls,
+ ARRAY_SIZE(isabelle_dpga2_right_mixer_controls)),
+ SND_SOC_DAPM_MIXER("DPGA3L Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_dpga3_left_mixer_controls,
+ ARRAY_SIZE(isabelle_dpga3_left_mixer_controls)),
+ SND_SOC_DAPM_MIXER("DPGA3R Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_dpga3_right_mixer_controls,
+ ARRAY_SIZE(isabelle_dpga3_right_mixer_controls)),
+
+ SND_SOC_DAPM_MIXER("RX1 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_rx1_mixer_controls,
+ ARRAY_SIZE(isabelle_rx1_mixer_controls)),
+ SND_SOC_DAPM_MIXER("RX2 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_rx2_mixer_controls,
+ ARRAY_SIZE(isabelle_rx2_mixer_controls)),
+ SND_SOC_DAPM_MIXER("RX3 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_rx3_mixer_controls,
+ ARRAY_SIZE(isabelle_rx3_mixer_controls)),
+ SND_SOC_DAPM_MIXER("RX4 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_rx4_mixer_controls,
+ ARRAY_SIZE(isabelle_rx4_mixer_controls)),
+ SND_SOC_DAPM_MIXER("RX5 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_rx5_mixer_controls,
+ ARRAY_SIZE(isabelle_rx5_mixer_controls)),
+ SND_SOC_DAPM_MIXER("RX6 Mixer", SND_SOC_NOPM, 0, 0,
+ isabelle_rx6_mixer_controls,
+ ARRAY_SIZE(isabelle_rx6_mixer_controls)),
+
+ /* DACs */
+ SND_SOC_DAPM_DAC("DAC1L", "Headset Playback", ISABELLE_DAC_CFG_REG,
+ 5, 0),
+ SND_SOC_DAPM_DAC("DAC1R", "Headset Playback", ISABELLE_DAC_CFG_REG,
+ 4, 0),
+ SND_SOC_DAPM_DAC("DAC2L", "Handsfree Playback", ISABELLE_DAC_CFG_REG,
+ 3, 0),
+ SND_SOC_DAPM_DAC("DAC2R", "Handsfree Playback", ISABELLE_DAC_CFG_REG,
+ 2, 0),
+ SND_SOC_DAPM_DAC("DAC3L", "Lineout Playback", ISABELLE_DAC_CFG_REG,
+ 1, 0),
+ SND_SOC_DAPM_DAC("DAC3R", "Lineout Playback", ISABELLE_DAC_CFG_REG,
+ 0, 0),
+
+ /* Analog Playback PGAs */
+ SND_SOC_DAPM_PGA("Sidetone Audio PGA", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("Sidetone Voice PGA", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("HF Left PGA", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("HF Right PGA", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DPGA1L", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DPGA1R", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DPGA2L", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DPGA2R", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DPGA3L", SND_SOC_NOPM, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("DPGA3R", SND_SOC_NOPM, 0, 0, NULL, 0),
+
+ /* Analog Playback Mux */
+ SND_SOC_DAPM_MUX("RX1 Playback", ISABELLE_ALU_RX_EN_REG, 5, 0,
+ &rx1_mux_controls),
+ SND_SOC_DAPM_MUX("RX2 Playback", ISABELLE_ALU_RX_EN_REG, 4, 0,
+ &rx2_mux_controls),
+
+ /* TX Select */
+ SND_SOC_DAPM_MUX("ATX Select", ISABELLE_TX_INPUT_CFG_REG,
+ 7, 0, &atx_mux_controls),
+ SND_SOC_DAPM_MUX("VTX Select", ISABELLE_TX_INPUT_CFG_REG,
+ 6, 0, &vtx_mux_controls),
+
+ SND_SOC_DAPM_SWITCH("Earphone Playback", SND_SOC_NOPM, 0, 0,
+ &ep_path_enable_control),
+
+ /* Output Drivers */
+ SND_SOC_DAPM_OUT_DRV("HS Left Driver", ISABELLE_HSDRV_CFG2_REG,
+ 1, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("HS Right Driver", ISABELLE_HSDRV_CFG2_REG,
+ 0, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("LINEOUT1 Left Driver", ISABELLE_LINEAMP_CFG_REG,
+ 1, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("LINEOUT2 Right Driver", ISABELLE_LINEAMP_CFG_REG,
+ 0, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("Earphone Driver", ISABELLE_EARDRV_CFG2_REG,
+ 1, 0, NULL, 0),
+
+ SND_SOC_DAPM_OUT_DRV("HF Left Driver", ISABELLE_HFDRV_CFG_REG,
+ 1, 0, NULL, 0),
+ SND_SOC_DAPM_OUT_DRV("HF Right Driver", ISABELLE_HFDRV_CFG_REG,
+ 0, 0, NULL, 0),
+};
+
+static const struct snd_soc_dapm_route isabelle_intercon[] = {
+ /* Interface mapping */
+ { "DL1", "DL12 Playback Switch", "INTF1_SDI" },
+ { "DL2", "DL12 Playback Switch", "INTF1_SDI" },
+ { "DL3", "DL34 Playback Switch", "INTF1_SDI" },
+ { "DL4", "DL34 Playback Switch", "INTF1_SDI" },
+ { "DL5", "DL56 Playback Switch", "INTF1_SDI" },
+ { "DL6", "DL56 Playback Switch", "INTF1_SDI" },
+
+ { "DL1", "DL12 Playback Switch", "INTF2_SDI" },
+ { "DL2", "DL12 Playback Switch", "INTF2_SDI" },
+ { "DL3", "DL34 Playback Switch", "INTF2_SDI" },
+ { "DL4", "DL34 Playback Switch", "INTF2_SDI" },
+ { "DL5", "DL56 Playback Switch", "INTF2_SDI" },
+ { "DL6", "DL56 Playback Switch", "INTF2_SDI" },
+
+ /* Input side mapping */
+ { "Sidetone Audio PGA", NULL, "Sidetone Audio Playback" },
+ { "Sidetone Voice PGA", NULL, "Sidetone Voice Playback" },
+
+ { "RX1 Mixer", "ST1 Playback Switch", "Sidetone Audio PGA" },
+
+ { "RX1 Mixer", "ST1 Playback Switch", "Sidetone Voice PGA" },
+ { "RX1 Mixer", "DL1 Playback Switch", "DL1" },
+
+ { "RX2 Mixer", "ST2 Playback Switch", "Sidetone Audio PGA" },
+
+ { "RX2 Mixer", "ST2 Playback Switch", "Sidetone Voice PGA" },
+ { "RX2 Mixer", "DL2 Playback Switch", "DL2" },
+
+ { "RX3 Mixer", "ST1 Playback Switch", "Sidetone Voice PGA" },
+ { "RX3 Mixer", "DL3 Playback Switch", "DL3" },
+
+ { "RX4 Mixer", "ST2 Playback Switch", "Sidetone Voice PGA" },
+ { "RX4 Mixer", "DL4 Playback Switch", "DL4" },
+
+ { "RX5 Mixer", "ST1 Playback Switch", "Sidetone Voice PGA" },
+ { "RX5 Mixer", "DL5 Playback Switch", "DL5" },
+
+ { "RX6 Mixer", "ST2 Playback Switch", "Sidetone Voice PGA" },
+ { "RX6 Mixer", "DL6 Playback Switch", "DL6" },
+
+ /* Capture path */
+ { "Analog Left Capture Route", "Headset Mic", "HSMIC" },
+ { "Analog Left Capture Route", "Main Mic", "MAINMIC" },
+ { "Analog Left Capture Route", "Aux/FM Left", "LINEIN1" },
+
+ { "Analog Right Capture Route", "Sub Mic", "SUBMIC" },
+ { "Analog Right Capture Route", "Aux/FM Right", "LINEIN2" },
+
+ { "MicAmp1", NULL, "Analog Left Capture Route" },
+ { "MicAmp2", NULL, "Analog Right Capture Route" },
+
+ { "ADC1", NULL, "MicAmp1" },
+ { "ADC2", NULL, "MicAmp2" },
+
+ { "ATX Select", "AMIC1", "ADC1" },
+ { "ATX Select", "DMIC", "DMICDAT" },
+ { "ATX Select", "AMIC2", "ADC2" },
+
+ { "VTX Select", "AMIC1", "ADC1" },
+ { "VTX Select", "DMIC", "DMICDAT" },
+ { "VTX Select", "AMIC2", "ADC2" },
+
+ { "ULATX1", "ATX1 Filter Enable Switch", "ATX Select" },
+ { "ULATX1", "ATX1 Filter Bypass Switch", "ATX Select" },
+ { "ULATX2", "ATX2 Filter Enable Switch", "ATX Select" },
+ { "ULATX2", "ATX2 Filter Bypass Switch", "ATX Select" },
+
+ { "ULVTX1", "VTX1 Filter Enable Switch", "VTX Select" },
+ { "ULVTX1", "VTX1 Filter Bypass Switch", "VTX Select" },
+ { "ULVTX2", "VTX2 Filter Enable Switch", "VTX Select" },
+ { "ULVTX2", "VTX2 Filter Bypass Switch", "VTX Select" },
+
+ { "INTF1_SDO", "ULATX12 Capture Switch", "ULATX1" },
+ { "INTF1_SDO", "ULATX12 Capture Switch", "ULATX2" },
+ { "INTF2_SDO", "ULATX12 Capture Switch", "ULATX1" },
+ { "INTF2_SDO", "ULATX12 Capture Switch", "ULATX2" },
+
+ { "INTF1_SDO", NULL, "ULVTX1" },
+ { "INTF1_SDO", NULL, "ULVTX2" },
+ { "INTF2_SDO", NULL, "ULVTX1" },
+ { "INTF2_SDO", NULL, "ULVTX2" },
+
+ /* AFM Path */
+ { "APGA1", NULL, "LINEIN1" },
+ { "APGA2", NULL, "LINEIN2" },
+
+ { "RX1 Playback", "VRX1 Filter Bypass Switch", "RX1 Mixer" },
+ { "RX1 Playback", "ARX1 Filter Bypass Switch", "RX1 Mixer" },
+ { "RX1 Playback", "RX1 Filter Enable Switch", "RX1 Mixer" },
+
+ { "RX2 Playback", "VRX2 Filter Bypass Switch", "RX2 Mixer" },
+ { "RX2 Playback", "ARX2 Filter Bypass Switch", "RX2 Mixer" },
+ { "RX2 Playback", "RX2 Filter Enable Switch", "RX2 Mixer" },
+
+ { "RX3 Playback", "ARX3 Filter Bypass Switch", "RX3 Mixer" },
+ { "RX3 Playback", "RX3 Filter Enable Switch", "RX3 Mixer" },
+
+ { "RX4 Playback", "ARX4 Filter Bypass Switch", "RX4 Mixer" },
+ { "RX4 Playback", "RX4 Filter Enable Switch", "RX4 Mixer" },
+
+ { "RX5 Playback", "ARX5 Filter Bypass Switch", "RX5 Mixer" },
+ { "RX5 Playback", "RX5 Filter Enable Switch", "RX5 Mixer" },
+
+ { "RX6 Playback", "ARX6 Filter Bypass Switch", "RX6 Mixer" },
+ { "RX6 Playback", "RX6 Filter Enable Switch", "RX6 Mixer" },
+
+ { "DPGA1L Mixer", "RX1 Playback Switch", "RX1 Playback" },
+ { "DPGA1L Mixer", "RX3 Playback Switch", "RX3 Playback" },
+ { "DPGA1L Mixer", "RX5 Playback Switch", "RX5 Playback" },
+
+ { "DPGA1R Mixer", "RX2 Playback Switch", "RX2 Playback" },
+ { "DPGA1R Mixer", "RX4 Playback Switch", "RX4 Playback" },
+ { "DPGA1R Mixer", "RX6 Playback Switch", "RX6 Playback" },
+
+ { "DPGA1L", NULL, "DPGA1L Mixer" },
+ { "DPGA1R", NULL, "DPGA1R Mixer" },
+
+ { "DAC1L", NULL, "DPGA1L" },
+ { "DAC1R", NULL, "DPGA1R" },
+
+ { "DPGA2L Mixer", "RX1 Playback Switch", "RX1 Playback" },
+ { "DPGA2L Mixer", "RX2 Playback Switch", "RX2 Playback" },
+ { "DPGA2L Mixer", "RX3 Playback Switch", "RX3 Playback" },
+ { "DPGA2L Mixer", "RX4 Playback Switch", "RX4 Playback" },
+ { "DPGA2L Mixer", "RX5 Playback Switch", "RX5 Playback" },
+ { "DPGA2L Mixer", "RX6 Playback Switch", "RX6 Playback" },
+
+ { "DPGA2R Mixer", "RX2 Playback Switch", "RX2 Playback" },
+ { "DPGA2R Mixer", "RX4 Playback Switch", "RX4 Playback" },
+ { "DPGA2R Mixer", "RX6 Playback Switch", "RX6 Playback" },
+
+ { "DPGA2L", NULL, "DPGA2L Mixer" },
+ { "DPGA2R", NULL, "DPGA2R Mixer" },
+
+ { "DAC2L", NULL, "DPGA2L" },
+ { "DAC2R", NULL, "DPGA2R" },
+
+ { "DPGA3L Mixer", "RX1 Playback Switch", "RX1 Playback" },
+ { "DPGA3L Mixer", "RX3 Playback Switch", "RX3 Playback" },
+ { "DPGA3L Mixer", "RX5 Playback Switch", "RX5 Playback" },
+
+ { "DPGA3R Mixer", "RX2 Playback Switch", "RX2 Playback" },
+ { "DPGA3R Mixer", "RX4 Playback Switch", "RX4 Playback" },
+ { "DPGA3R Mixer", "RX6 Playback Switch", "RX6 Playback" },
+
+ { "DPGA3L", NULL, "DPGA3L Mixer" },
+ { "DPGA3R", NULL, "DPGA3R Mixer" },
+
+ { "DAC3L", NULL, "DPGA3L" },
+ { "DAC3R", NULL, "DPGA3R" },
+
+ { "Headset Left Mixer", "DAC1L Playback Switch", "DAC1L" },
+ { "Headset Left Mixer", "APGA1 Playback Switch", "APGA1" },
+
+ { "Headset Right Mixer", "DAC1R Playback Switch", "DAC1R" },
+ { "Headset Right Mixer", "APGA2 Playback Switch", "APGA2" },
+
+ { "HS Left Driver", NULL, "Headset Left Mixer" },
+ { "HS Right Driver", NULL, "Headset Right Mixer" },
+
+ { "HSOL", NULL, "HS Left Driver" },
+ { "HSOR", NULL, "HS Right Driver" },
+
+ /* Earphone playback path */
+ { "Earphone Mixer", "DAC2L Playback Switch", "DAC2L" },
+ { "Earphone Mixer", "APGA1 Playback Switch", "APGA1" },
+
+ { "Earphone Playback", "Switch", "Earphone Mixer" },
+ { "Earphone Driver", NULL, "Earphone Playback" },
+ { "EP", NULL, "Earphone Driver" },
+
+ { "Handsfree Left Mixer", "DAC2L Playback Switch", "DAC2L" },
+ { "Handsfree Left Mixer", "APGA1 Playback Switch", "APGA1" },
+
+ { "Handsfree Right Mixer", "DAC2R Playback Switch", "DAC2R" },
+ { "Handsfree Right Mixer", "APGA2 Playback Switch", "APGA2" },
+
+ { "HF Left PGA", NULL, "Handsfree Left Mixer" },
+ { "HF Right PGA", NULL, "Handsfree Right Mixer" },
+
+ { "HF Left Driver", NULL, "HF Left PGA" },
+ { "HF Right Driver", NULL, "HF Right PGA" },
+
+ { "HFL", NULL, "HF Left Driver" },
+ { "HFR", NULL, "HF Right Driver" },
+
+ { "LINEOUT1 Mixer", "DAC3L Playback Switch", "DAC3L" },
+ { "LINEOUT1 Mixer", "APGA1 Playback Switch", "APGA1" },
+
+ { "LINEOUT2 Mixer", "DAC3R Playback Switch", "DAC3R" },
+ { "LINEOUT2 Mixer", "APGA2 Playback Switch", "APGA2" },
+
+ { "LINEOUT1 Driver", NULL, "LINEOUT1 Mixer" },
+ { "LINEOUT2 Driver", NULL, "LINEOUT2 Mixer" },
+
+ { "LINEOUT1", NULL, "LINEOUT1 Driver" },
+ { "LINEOUT2", NULL, "LINEOUT2 Driver" },
+};
+
+static int isabelle_hs_mute(struct snd_soc_dai *dai, int mute)
+{
+ snd_soc_update_bits(dai->codec, ISABELLE_DAC1_SOFTRAMP_REG,
+ BIT(4), (mute ? BIT(4) : 0));
+
+ return 0;
+}
+
+static int isabelle_hf_mute(struct snd_soc_dai *dai, int mute)
+{
+ snd_soc_update_bits(dai->codec, ISABELLE_DAC2_SOFTRAMP_REG,
+ BIT(4), (mute ? BIT(4) : 0));
+
+ return 0;
+}
+
+static int isabelle_line_mute(struct snd_soc_dai *dai, int mute)
+{
+ snd_soc_update_bits(dai->codec, ISABELLE_DAC3_SOFTRAMP_REG,
+ BIT(4), (mute ? BIT(4) : 0));
+
+ return 0;
+}
+
+static int isabelle_set_bias_level(struct snd_soc_codec *codec,
+ enum snd_soc_bias_level level)
+{
+ struct isabelle_priv *isabelle = snd_soc_codec_get_drvdata(codec);
+
+ switch (level) {
+ case SND_SOC_BIAS_ON:
+ break;
+ case SND_SOC_BIAS_PREPARE:
+ break;
+
+ case SND_SOC_BIAS_STANDBY:
+ if (codec->dapm.bias_level == SND_SOC_BIAS_OFF)
+ regcache_sync(isabelle->regmap);
+
+ snd_soc_update_bits(codec, ISABELLE_PWR_EN_REG,
+ ISABELLE_CHIP_EN, BIT(0));
+ break;
+
+ case SND_SOC_BIAS_OFF:
+ snd_soc_update_bits(codec, ISABELLE_PWR_EN_REG,
+ ISABELLE_CHIP_EN, 0);
+ break;
+ }
+
+ codec->dapm.bias_level = level;
+
+ return 0;
+}
+
+static int isabelle_hw_params(struct snd_pcm_substream *substream,
+ struct snd_pcm_hw_params *params,
+ struct snd_soc_dai *dai)
+{
+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
+ struct snd_soc_codec *codec = rtd->codec;
+ u16 aif = 0;
+ unsigned int fs_val = 0;
+
+ switch (params_rate(params)) {
+ case 8000:
+ fs_val = ISABELLE_FS_RATE_8;
+ break;
+ case 11025:
+ fs_val = ISABELLE_FS_RATE_11;
+ break;
+ case 12000:
+ fs_val = ISABELLE_FS_RATE_12;
+ break;
+ case 16000:
+ fs_val = ISABELLE_FS_RATE_16;
+ break;
+ case 22050:
+ fs_val = ISABELLE_FS_RATE_22;
+ break;
+ case 24000:
+ fs_val = ISABELLE_FS_RATE_24;
+ break;
+ case 32000:
+ fs_val = ISABELLE_FS_RATE_32;
+ break;
+ case 44100:
+ fs_val = ISABELLE_FS_RATE_44;
+ break;
+ case 48000:
+ fs_val = ISABELLE_FS_RATE_48;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ snd_soc_update_bits(codec, ISABELLE_FS_RATE_CFG_REG,
+ ISABELLE_FS_RATE_MASK, fs_val);
+
+ /* bit size */
+ switch (params_format(params)) {
+ case SNDRV_PCM_FORMAT_S20_3LE:
+ aif |= ISABELLE_AIF_LENGTH_20;
+ break;
+ case SNDRV_PCM_FORMAT_S32_LE:
+ aif |= ISABELLE_AIF_LENGTH_32;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ snd_soc_update_bits(codec, ISABELLE_INTF_CFG_REG,
+ ISABELLE_AIF_LENGTH_MASK, aif);
+
+ return 0;
+}
+
+static int isabelle_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt)
+{
+ struct snd_soc_codec *codec = codec_dai->codec;
+ unsigned int aif_val = 0;
+
+ switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
+ case SND_SOC_DAIFMT_CBS_CFS:
+ aif_val &= ~ISABELLE_AIF_MS;
+ break;
+ case SND_SOC_DAIFMT_CBM_CFM:
+ aif_val |= ISABELLE_AIF_MS;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
+ case SND_SOC_DAIFMT_I2S:
+ aif_val |= ISABELLE_I2S_MODE;
+ break;
+ case SND_SOC_DAIFMT_LEFT_J:
+ aif_val |= ISABELLE_LEFT_J_MODE;
+ break;
+ case SND_SOC_DAIFMT_PDM:
+ aif_val |= ISABELLE_PDM_MODE;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ snd_soc_update_bits(codec, ISABELLE_INTF_CFG_REG,
+ (ISABELLE_AIF_MS | ISABELLE_AIF_FMT_MASK), aif_val);
+
+ return 0;
+}
+
+/* Rates supported by Isabelle driver */
+#define ISABELLE_RATES SNDRV_PCM_RATE_8000_48000
+
+/* Formates supported by Isabelle driver. */
+#define ISABELLE_FORMATS (SNDRV_PCM_FMTBIT_S20_3LE |\
+ SNDRV_PCM_FMTBIT_S32_LE)
+
+static struct snd_soc_dai_ops isabelle_hs_dai_ops = {
+ .hw_params = isabelle_hw_params,
+ .set_fmt = isabelle_set_dai_fmt,
+ .digital_mute = isabelle_hs_mute,
+};
+
+static struct snd_soc_dai_ops isabelle_hf_dai_ops = {
+ .hw_params = isabelle_hw_params,
+ .set_fmt = isabelle_set_dai_fmt,
+ .digital_mute = isabelle_hf_mute,
+};
+
+static struct snd_soc_dai_ops isabelle_line_dai_ops = {
+ .hw_params = isabelle_hw_params,
+ .set_fmt = isabelle_set_dai_fmt,
+ .digital_mute = isabelle_line_mute,
+};
+
+static struct snd_soc_dai_ops isabelle_ul_dai_ops = {
+ .hw_params = isabelle_hw_params,
+ .set_fmt = isabelle_set_dai_fmt,
+};
+
+/* ISABELLE dai structure */
+struct snd_soc_dai_driver isabelle_dai[] = {
+ {
+ .name = "isabelle-dl1",
+ .playback = {
+ .stream_name = "Headset Playback",
+ .channels_min = 1,
+ .channels_max = 2,
+ .rates = ISABELLE_RATES,
+ .formats = ISABELLE_FORMATS,
+ },
+ .ops = &isabelle_hs_dai_ops,
+ },
+ {
+ .name = "isabelle-dl2",
+ .playback = {
+ .stream_name = "Handsfree Playback",
+ .channels_min = 1,
+ .channels_max = 2,
+ .rates = ISABELLE_RATES,
+ .formats = ISABELLE_FORMATS,
+ },
+ .ops = &isabelle_hf_dai_ops,
+ },
+ {
+ .name = "isabelle-lineout",
+ .playback = {
+ .stream_name = "Lineout Playback",
+ .channels_min = 1,
+ .channels_max = 2,
+ .rates = ISABELLE_RATES,
+ .formats = ISABELLE_FORMATS,
+ },
+ .ops = &isabelle_line_dai_ops,
+ },
+ {
+ .name = "isabelle-ul",
+ .capture = {
+ .stream_name = "Capture",
+ .channels_min = 1,
+ .channels_max = 2,
+ .rates = ISABELLE_RATES,
+ .formats = ISABELLE_FORMATS,
+ },
+ .ops = &isabelle_ul_dai_ops,
+ },
+};
+
+#ifdef CONFIG_PM
+static int isabelle_suspend(struct snd_soc_codec *codec)
+{
+ isabelle_set_bias_level(codec, SND_SOC_BIAS_OFF);
+ return 0;
+}
+
+static int isabelle_resume(struct snd_soc_codec *codec)
+{
+ isabelle_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
+ isabelle_set_bias_level(codec, codec->dapm.suspend_bias_level);
+
+ return 0;
+}
+#else
+#define isabelle_suspend NULL
+#define isabelle_resume NULL
+#endif
+
+static int isabelle_probe(struct snd_soc_codec *codec)
+{
+ struct isabelle_priv *isabelle = snd_soc_codec_get_drvdata(codec);
+ int ret = 0;
+
+ codec->control_data = isabelle->regmap;
+
+ ret = snd_soc_codec_set_cache_io(codec, 8, 8, SND_SOC_REGMAP);
+ if (ret < 0) {
+ dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
+ return ret;
+ }
+
+ return 0;
+}
+
+/* power down chip */
+static int isabelle_remove(struct snd_soc_codec *codec)
+{
+ isabelle_set_bias_level(codec, SND_SOC_BIAS_OFF);
+ return 0;
+}
+
+static struct snd_soc_codec_driver soc_codec_dev_isabelle = {
+ .probe = isabelle_probe,
+ .remove = isabelle_remove,
+ .suspend = isabelle_suspend,
+ .resume = isabelle_resume,
+ .set_bias_level = isabelle_set_bias_level,
+ .controls = isabelle_snd_controls,
+ .num_controls = ARRAY_SIZE(isabelle_snd_controls),
+ .dapm_widgets = isabelle_dapm_widgets,
+ .num_dapm_widgets = ARRAY_SIZE(isabelle_dapm_widgets),
+ .dapm_routes = isabelle_intercon,
+ .num_dapm_routes = ARRAY_SIZE(isabelle_intercon),
+ .idle_bias_off = true,
+};
+
+static const struct regmap_config isabelle_regmap_config = {
+ .reg_bits = 8,
+ .val_bits = 8,
+
+ .max_register = ISABELLE_MAX_REGISTER,
+ .reg_defaults = isabelle_reg_defs,
+ .num_reg_defaults = ARRAY_SIZE(isabelle_reg_defs),
+ .cache_type = REGCACHE_RBTREE,
+};
+
+static int __devinit isabelle_i2c_probe(struct i2c_client *i2c,
+ const struct i2c_device_id *id)
+{
+ struct isabelle_priv *isabelle;
+ int ret = 0;
+
+ isabelle = devm_kzalloc(&i2c->dev, sizeof(struct isabelle_priv),
+ GFP_KERNEL);
+
+ if (isabelle == NULL)
+ return -ENOMEM;
+
+ i2c_set_clientdata(i2c, isabelle);
+
+ isabelle->regmap = regmap_init_i2c(i2c, &isabelle_regmap_config);
+ if (IS_ERR(isabelle->regmap)) {
+ ret = PTR_ERR(isabelle->regmap);
+ dev_err(&i2c->dev, "Failed to allocate register map: %d\n",
+ ret);
+ return ret;
+ }
+
+ ret = snd_soc_register_codec(&i2c->dev,
+ &soc_codec_dev_isabelle, isabelle_dai,
+ ARRAY_SIZE(isabelle_dai));
+ if (ret < 0) {
+ dev_err(&i2c->dev, "Failed to register codec: %d\n", ret);
+ regmap_exit(isabelle->regmap);
+ return ret;
+ }
+
+ return ret;
+}
+
+static int __devexit isabelle_i2c_remove(struct i2c_client *client)
+{
+ struct isabelle_priv *isabelle = i2c_get_clientdata(client);
+
+ snd_soc_unregister_codec(&client->dev);
+ regmap_exit(isabelle->regmap);
+ return 0;
+}
+
+static const struct i2c_device_id isabelle_i2c_id[] = {
+ { "isabelle", 0 },
+ { }
+};
+MODULE_DEVICE_TABLE(i2c, isabelle_i2c_id);
+
+static struct i2c_driver isabelle_i2c_driver = {
+ .driver = {
+ .name = "isabelle",
+ .owner = THIS_MODULE,
+ },
+ .probe = isabelle_i2c_probe,
+ .remove = __devexit_p(isabelle_i2c_remove),
+ .id_table = isabelle_i2c_id,
+};
+
+module_i2c_driver(isabelle_i2c_driver);
+
+MODULE_DESCRIPTION("ASoC ISABELLE driver");
+MODULE_AUTHOR("Vishwas A Deshpande <vishwas.a.deshpande(a)ti.com>");
+MODULE_AUTHOR("M R Swami Reddy <MR.Swami.Reddy(a)ti.com>");
+MODULE_LICENSE("GPL v2");
diff --git a/sound/soc/codecs/isabelle.h b/sound/soc/codecs/isabelle.h
new file mode 100644
index 0000000..96d839a
--- /dev/null
+++ b/sound/soc/codecs/isabelle.h
@@ -0,0 +1,143 @@
+/*
+ * isabelle.h - Low power high fidelity audio codec driver header file
+ *
+ * Copyright (c) 2012 Texas Instruments, Inc
+ *
+ * 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; version 2 of the License.
+ *
+ */
+
+#ifndef _ISABELLE_H
+#define _ISABELLE_H
+
+#include <linux/bitops.h>
+
+/* ISABELLE REGISTERS */
+
+#define ISABELLE_PWR_CFG_REG 0x01
+#define ISABELLE_PWR_EN_REG 0x02
+#define ISABELLE_PS_EN1_REG 0x03
+#define ISABELLE_INT1_STATUS_REG 0x04
+#define ISABELLE_INT1_MASK_REG 0x05
+#define ISABELLE_INT2_STATUS_REG 0x06
+#define ISABELLE_INT2_MASK_REG 0x07
+#define ISABELLE_HKCTL1_REG 0x08
+#define ISABELLE_HKCTL2_REG 0x09
+#define ISABELLE_HKCTL3_REG 0x0A
+#define ISABELLE_ACCDET_STATUS_REG 0x0B
+#define ISABELLE_BUTTON_ID_REG 0x0C
+#define ISABELLE_PLL_CFG_REG 0x10
+#define ISABELLE_PLL_EN_REG 0x11
+#define ISABELLE_FS_RATE_CFG_REG 0x12
+#define ISABELLE_INTF_CFG_REG 0x13
+#define ISABELLE_INTF_EN_REG 0x14
+#define ISABELLE_ULATX12_INTF_CFG_REG 0x15
+#define ISABELLE_DL12_INTF_CFG_REG 0x16
+#define ISABELLE_DL34_INTF_CFG_REG 0x17
+#define ISABELLE_DL56_INTF_CFG_REG 0x18
+#define ISABELLE_ATX_STPGA1_CFG_REG 0x19
+#define ISABELLE_ATX_STPGA2_CFG_REG 0x1A
+#define ISABELLE_VTX_STPGA1_CFG_REG 0x1B
+#define ISABELLE_VTX2_STPGA2_CFG_REG 0x1C
+#define ISABELLE_ATX1_DPGA_REG 0x1D
+#define ISABELLE_ATX2_DPGA_REG 0x1E
+#define ISABELLE_VTX1_DPGA_REG 0x1F
+#define ISABELLE_VTX2_DPGA_REG 0x20
+#define ISABELLE_TX_INPUT_CFG_REG 0x21
+#define ISABELLE_RX_INPUT_CFG_REG 0x22
+#define ISABELLE_RX_INPUT_CFG2_REG 0x23
+#define ISABELLE_VOICE_HPF_CFG_REG 0x24
+#define ISABELLE_AUDIO_HPF_CFG_REG 0x25
+#define ISABELLE_RX1_DPGA_REG 0x26
+#define ISABELLE_RX2_DPGA_REG 0x27
+#define ISABELLE_RX3_DPGA_REG 0x28
+#define ISABELLE_RX4_DPGA_REG 0x29
+#define ISABELLE_RX5_DPGA_REG 0x2A
+#define ISABELLE_RX6_DPGA_REG 0x2B
+#define ISABELLE_ALU_TX_EN_REG 0x2C
+#define ISABELLE_ALU_RX_EN_REG 0x2D
+#define ISABELLE_IIR_RESYNC_REG 0x2E
+#define ISABELLE_ABIAS_CFG_REG 0x30
+#define ISABELLE_DBIAS_CFG_REG 0x31
+#define ISABELLE_MIC1_GAIN_REG 0x32
+#define ISABELLE_MIC2_GAIN_REG 0x33
+#define ISABELLE_AMIC_CFG_REG 0x34
+#define ISABELLE_DMIC_CFG_REG 0x35
+#define ISABELLE_APGA_GAIN_REG 0x36
+#define ISABELLE_APGA_CFG_REG 0x37
+#define ISABELLE_TX_GAIN_DLY_REG 0x38
+#define ISABELLE_RX_GAIN_DLY_REG 0x39
+#define ISABELLE_RX_PWR_CTRL_REG 0x3A
+#define ISABELLE_DPGA1LR_IN_SEL_REG 0x3B
+#define ISABELLE_DPGA1L_GAIN_REG 0x3C
+#define ISABELLE_DPGA1R_GAIN_REG 0x3D
+#define ISABELLE_DPGA2L_IN_SEL_REG 0x3E
+#define ISABELLE_DPGA2R_IN_SEL_REG 0x3F
+#define ISABELLE_DPGA2L_GAIN_REG 0x40
+#define ISABELLE_DPGA2R_GAIN_REG 0x41
+#define ISABELLE_DPGA3LR_IN_SEL_REG 0x42
+#define ISABELLE_DPGA3L_GAIN_REG 0x43
+#define ISABELLE_DPGA3R_GAIN_REG 0x44
+#define ISABELLE_DAC1_SOFTRAMP_REG 0x45
+#define ISABELLE_DAC2_SOFTRAMP_REG 0x46
+#define ISABELLE_DAC3_SOFTRAMP_REG 0x47
+#define ISABELLE_DAC_CFG_REG 0x48
+#define ISABELLE_EARDRV_CFG1_REG 0x49
+#define ISABELLE_EARDRV_CFG2_REG 0x4A
+#define ISABELLE_HSDRV_GAIN_REG 0x4B
+#define ISABELLE_HSDRV_CFG1_REG 0x4C
+#define ISABELLE_HSDRV_CFG2_REG 0x4D
+#define ISABELLE_HS_NG_CFG1_REG 0x4E
+#define ISABELLE_HS_NG_CFG2_REG 0x4F
+#define ISABELLE_LINEAMP_GAIN_REG 0x50
+#define ISABELLE_LINEAMP_CFG_REG 0x51
+#define ISABELLE_HFL_VOL_CTRL_REG 0x52
+#define ISABELLE_HFL_SFTVOL_CTRL_REG 0x53
+#define ISABELLE_HFL_LIM_CTRL_1_REG 0x54
+#define ISABELLE_HFL_LIM_CTRL_2_REG 0x55
+#define ISABELLE_HFR_VOL_CTRL_REG 0x56
+#define ISABELLE_HFR_SFTVOL_CTRL_REG 0x57
+#define ISABELLE_HFR_LIM_CTRL_1_REG 0x58
+#define ISABELLE_HFR_LIM_CTRL_2_REG 0x59
+#define ISABELLE_HF_MODE_REG 0x5A
+#define ISABELLE_HFLPGA_CFG_REG 0x5B
+#define ISABELLE_HFRPGA_CFG_REG 0x5C
+#define ISABELLE_HFDRV_CFG_REG 0x5D
+#define ISABELLE_PDMOUT_CFG1_REG 0x5E
+#define ISABELLE_PDMOUT_CFG2_REG 0x5F
+#define ISABELLE_PDMOUT_L_WM_REG 0x60
+#define ISABELLE_PDMOUT_R_WM_REG 0x61
+#define ISABELLE_HF_NG_CFG1_REG 0x62
+#define ISABELLE_HF_NG_CFG2_REG 0x63
+
+/* ISABELLE_PWR_EN_REG (0x02h) */
+#define ISABELLE_CHIP_EN BIT(0)
+
+/* ISABELLE DAI FORMATS */
+#define ISABELLE_AIF_FMT_MASK 0x70
+#define ISABELLE_I2S_MODE 0x0
+#define ISABELLE_LEFT_J_MODE 0x1
+#define ISABELLE_PDM_MODE 0x2
+
+#define ISABELLE_AIF_LENGTH_MASK 0x30
+#define ISABELLE_AIF_LENGTH_20 0x00
+#define ISABELLE_AIF_LENGTH_32 0x10
+
+#define ISABELLE_AIF_MS 0x80
+
+#define ISABELLE_FS_RATE_MASK 0xF
+#define ISABELLE_FS_RATE_8 0x0
+#define ISABELLE_FS_RATE_11 0x1
+#define ISABELLE_FS_RATE_12 0x2
+#define ISABELLE_FS_RATE_16 0x4
+#define ISABELLE_FS_RATE_22 0x5
+#define ISABELLE_FS_RATE_24 0x6
+#define ISABELLE_FS_RATE_32 0x8
+#define ISABELLE_FS_RATE_44 0x9
+#define ISABELLE_FS_RATE_48 0xA
+
+#define ISABELLE_MAX_REGISTER 0xFF
+
+#endif
1
0

29 May '12
On Tue, 2012-05-29 at 12:06 +0200, Christian Dietrich wrote:
> --- a/drivers/char/ds1620.c
> +++ b/drivers/char/ds1620.c
> @@ -74,21 +74,21 @@ static inline void netwinder_ds1620_reset(void)
>
> static inline void netwinder_lock(unsigned long *flags)
> {
> - spin_lock_irqsave(&nw_gpio_lock, *flags);
> + raw_spin_lock_irqsave(&nw_gpio_lock, *flags);
> }
>
> static inline void netwinder_unlock(unsigned long *flags)
> {
> - spin_unlock_irqrestore(&nw_gpio_lock, *flags);
> + raw_spin_unlock_irqrestore(&nw_gpio_lock, *flags);
> }
If you were to make these functions public by shifting them into
arch/arm/mach-footbridge/include/mach/hardware.h that would be a lot
nicer, and other places wouldn't have to touch the raw spinlock
directly.
Also... while we're thinking about preemption and netwinder, note that
the write enable is valid for only 2ms or so. So all the functions in
dc21285.c that you just touched should probably *also* be disabling
preemption when they're run on a netwinder, to ensure that that time
doesn't expire before they actually get to run.
--
dwmw2
1
0

29 May '12
On Tue, 2012-05-29 at 12:06 +0200, Christian Dietrich wrote:
> Since nw_gpio_lock is a raw_spinlock_t it should be used with the
> raw_spinlock_* functions and not the spinlock_* variants. Functionally
> this is equivalent at the moment, because the raw_spinlock_t is the
> first field of spinlock_t, and therefore &nw_gpio_lock ==
> &(nw_gpio_lock->rlock). But when other spinlock_t functions use other
> field they read and write random memory.
Hm, why are we exposing a raw spinlock to drivers?
Should we export a helper function (or macro, I suppose) which does the
appropriate locking *and* the GPIO operation?
--
dwmw2
1
0

[alsa-devel] [PATCH] ucm: Handle repeat device and modifier enables/disables
by Arun Raghavan 29 May '12
by Arun Raghavan 29 May '12
29 May '12
Currently, enabling a device twice can cause it to be added to
snd_use_case_mgr_t->active_devices twice, causing the list to become a
loop and subsequent uses to result in an infinite loop.
This patch makes sure we don't enable/disable a device twice, and avoid
doing the same for modifiers.
---
src/ucm/main.c | 62 ++++++++++++++++++++++++++++++-------------------------
1 files changed, 34 insertions(+), 28 deletions(-)
diff --git a/src/ucm/main.c b/src/ucm/main.c
index 76ca151..79901f8 100644
--- a/src/ucm/main.c
+++ b/src/ucm/main.c
@@ -565,6 +565,34 @@ static struct use_case_modifier *
return NULL;
}
+long device_status(snd_use_case_mgr_t *uc_mgr,
+ const char *device_name)
+{
+ struct use_case_device *dev;
+ struct list_head *pos;
+
+ list_for_each(pos, &uc_mgr->active_devices) {
+ dev = list_entry(pos, struct use_case_device, active_list);
+ if (strcmp(dev->name, device_name) == 0)
+ return 1;
+ }
+ return 0;
+}
+
+long modifier_status(snd_use_case_mgr_t *uc_mgr,
+ const char *modifier_name)
+{
+ struct use_case_modifier *mod;
+ struct list_head *pos;
+
+ list_for_each(pos, &uc_mgr->active_modifiers) {
+ mod = list_entry(pos, struct use_case_modifier, active_list);
+ if (strcmp(mod->name, modifier_name) == 0)
+ return 1;
+ }
+ return 0;
+}
+
/**
* \brief Set verb
* \param uc_mgr Use case manager
@@ -607,6 +635,9 @@ static int set_modifier(snd_use_case_mgr_t *uc_mgr,
struct list_head *seq;
int err;
+ if (modifier_status(uc_mgr, modifier->name) == enable)
+ return 0;
+
if (enable) {
seq = &modifier->enable_list;
} else {
@@ -638,6 +669,9 @@ static int set_device(snd_use_case_mgr_t *uc_mgr,
struct list_head *seq;
int err;
+ if (device_status(uc_mgr, device->name) == enable)
+ return 0;
+
if (enable) {
seq = &device->enable_list;
} else {
@@ -1316,34 +1350,6 @@ int snd_use_case_get(snd_use_case_mgr_t *uc_mgr,
return err;
}
-long device_status(snd_use_case_mgr_t *uc_mgr,
- const char *device_name)
-{
- struct use_case_device *dev;
- struct list_head *pos;
-
- list_for_each(pos, &uc_mgr->active_devices) {
- dev = list_entry(pos, struct use_case_device, active_list);
- if (strcmp(dev->name, device_name) == 0)
- return 1;
- }
- return 0;
-}
-
-long modifier_status(snd_use_case_mgr_t *uc_mgr,
- const char *modifier_name)
-{
- struct use_case_modifier *mod;
- struct list_head *pos;
-
- list_for_each(pos, &uc_mgr->active_modifiers) {
- mod = list_entry(pos, struct use_case_modifier, active_list);
- if (strcmp(mod->name, modifier_name) == 0)
- return 1;
- }
- return 0;
-}
-
/**
* \brief Get current - integer
--
1.7.8.6
3
4

29 May '12
This patch used dmaengine helper functions instead of using hand setting.
And reduced local variables
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx(a)renesas.com>
---
This is for v3.6
sound/soc/sh/fsi.c | 19 ++++---------------
1 files changed, 4 insertions(+), 15 deletions(-)
diff --git a/sound/soc/sh/fsi.c b/sound/soc/sh/fsi.c
index 18c920f..53486ff 100644
--- a/sound/soc/sh/fsi.c
+++ b/sound/soc/sh/fsi.c
@@ -1089,13 +1089,10 @@ static void fsi_dma_do_tasklet(unsigned long data)
{
struct fsi_stream *io = (struct fsi_stream *)data;
struct fsi_priv *fsi = fsi_stream_to_priv(io);
- struct dma_chan *chan;
struct snd_soc_dai *dai;
struct dma_async_tx_descriptor *desc;
- struct scatterlist sg;
struct snd_pcm_runtime *runtime;
enum dma_data_direction dir;
- dma_cookie_t cookie;
int is_play = fsi_stream_is_play(fsi, io);
int len;
dma_addr_t buf;
@@ -1104,7 +1101,6 @@ static void fsi_dma_do_tasklet(unsigned long data)
return;
dai = fsi_get_dai(io->substream);
- chan = io->chan;
runtime = io->substream->runtime;
dir = is_play ? DMA_TO_DEVICE : DMA_FROM_DEVICE;
len = samples_to_bytes(runtime, io->period_samples);
@@ -1112,14 +1108,8 @@ static void fsi_dma_do_tasklet(unsigned long data)
dma_sync_single_for_device(dai->dev, buf, len, dir);
- sg_init_table(&sg, 1);
- sg_set_page(&sg, pfn_to_page(PFN_DOWN(buf)),
- len , offset_in_page(buf));
- sg_dma_address(&sg) = buf;
- sg_dma_len(&sg) = len;
-
- desc = dmaengine_prep_slave_sg(chan, &sg, 1, dir,
- DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
+ desc = dmaengine_prep_slave_single(io->chan, buf, len, dir,
+ DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
if (!desc) {
dev_err(dai->dev, "dmaengine_prep_slave_sg() fail\n");
return;
@@ -1128,13 +1118,12 @@ static void fsi_dma_do_tasklet(unsigned long data)
desc->callback = fsi_dma_complete;
desc->callback_param = io;
- cookie = desc->tx_submit(desc);
- if (cookie < 0) {
+ if (dmaengine_submit(desc) < 0) {
dev_err(dai->dev, "tx_submit() fail\n");
return;
}
- dma_async_issue_pending(chan);
+ dma_async_issue_pending(io->chan);
/*
* FIXME
--
1.7.5.4
1
0
On Fri, May 25, 2012 at 03:11:02PM +0800, Zhangfei Gao wrote:
> The SSPA is a configurable multi-channel audio serial (TDM) interface.
> It's configurable at runtime to support up to 128 channels and the
> number of bits per sample: 8, 12, 16, 20, 24 and 32 bits. It also
> support stereo format: I2S, left-justified or right-justified.
Mostly looks good. A few fairly minor things...
> +static int mmp_sspa_startup(struct snd_pcm_substream *substream,
> + struct snd_soc_dai *dai)
> +{
> + struct snd_soc_pcm_runtime *rtd = substream->private_data;
> + struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
> + struct sspa_priv *sspa_priv = snd_soc_dai_get_drvdata(dai);
> + struct ssp_device *sspa = sspa_priv->sspa;
> + int ret = 0;
> +
> + if (!cpu_dai->active) {
> + clk_enable(sysclk);
> + clk_enable(sspa->clk);
> + }
The clock API is refcounted so you shouldn't need to worry about
multiple enables, you should just be able to unconditionally enable and
disable. If this is needed we probably have a problem we should fix.
> + switch (pll_id) {
> + case MMP_SYSCLK:
> + clk_set_rate(sysclk, freq_out);
> + break;
> + case MMP_SSPA_CLK:
> + clk_set_rate(sspa->clk, freq_out);
> + break;
You're ignoring the return values here.
> + priv->sspa->clk = clk_get(&pdev->dev, NULL);
> + if (IS_ERR(priv->sspa->clk)) {
> + ret = PTR_ERR(priv->sspa->clk);
> + goto err_free_clk;
> + }
devm_clk_get().
> + res = request_mem_region(res->start, resource_size(res),
> + pdev->name);
> + if (res == NULL) {
> + dev_err(&pdev->dev, "failed to request memory resource\n");
> + ret = -EBUSY;
> + goto err_get_res;
> + }
> +
> + priv->sspa->mmio_base = ioremap(res->start, resource_size(res));
> + if (priv->sspa->mmio_base == NULL) {
> + dev_err(&pdev->dev, "failed to ioremap() registers\n");
> + ret = -ENODEV;
> + goto err_free_mem;
> + }
devm_request_and_ioremap().
> +err_free_clk:
> + devm_kfree(&pdev->dev, priv->dma_params);
> +err_priv_dma_params:
> + devm_kfree(&pdev->dev, priv->sspa);
> +err_priv_sspa:
> + devm_kfree(&pdev->dev, priv);
The whole point of the devm_ stuff is that you don't need to do stuff
like this.
2
1

[alsa-devel] [PATCH 15/15] ASoC: mxs-saif: Use clk_prepare_enable/clk_disable_unprepare
by Fabio Estevam 28 May '12
by Fabio Estevam 28 May '12
28 May '12
From: Fabio Estevam <fabio.estevam(a)freescale.com>
Prepare the clock before enabling it.
Cc: Mark Brown <broonie(a)opensource.wolfsonmicro.com>
Cc: <alsa-devel(a)alsa-project.org>
Signed-off-by: Fabio Estevam <fabio.estevam(a)freescale.com>
---
sound/soc/mxs/mxs-saif.c | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/sound/soc/mxs/mxs-saif.c b/sound/soc/mxs/mxs-saif.c
index aba71bf..15ad61a 100644
--- a/sound/soc/mxs/mxs-saif.c
+++ b/sound/soc/mxs/mxs-saif.c
@@ -482,7 +482,7 @@ static int mxs_saif_trigger(struct snd_pcm_substream *substream, int cmd,
case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
dev_dbg(cpu_dai->dev, "start\n");
- clk_enable(master_saif->clk);
+ clk_prepare_enable(master_saif->clk);
if (!master_saif->mclk_in_use)
__raw_writel(BM_SAIF_CTRL_RUN,
master_saif->base + SAIF_CTRL + MXS_SET_ADDR);
@@ -492,7 +492,7 @@ static int mxs_saif_trigger(struct snd_pcm_substream *substream, int cmd,
* itself clk for its internal basic logic to work.
*/
if (saif != master_saif) {
- clk_enable(saif->clk);
+ clk_prepare_enable(saif->clk);
__raw_writel(BM_SAIF_CTRL_RUN,
saif->base + SAIF_CTRL + MXS_SET_ADDR);
}
@@ -534,13 +534,13 @@ static int mxs_saif_trigger(struct snd_pcm_substream *substream, int cmd,
master_saif->base + SAIF_CTRL + MXS_CLR_ADDR);
udelay(delay);
}
- clk_disable(master_saif->clk);
+ clk_disable_unprepare(master_saif->clk);
if (saif != master_saif) {
__raw_writel(BM_SAIF_CTRL_RUN,
saif->base + SAIF_CTRL + MXS_CLR_ADDR);
udelay(delay);
- clk_disable(saif->clk);
+ clk_disable_unprepare(saif->clk);
}
master_saif->ongoing = 0;
--
1.7.1
2
3
On Fri, May 25, 2012 at 03:11:03PM +0800, Zhangfei Gao wrote:
> +config SND_MMP_SOC_BROWNSTONE
> + tristate "SoC Audio support for Marvell Brownstone"
> + depends on SND_MMP_SOC && MACH_BROWNSTONE
> + select SND_MMP_SOC_SSPA
> + select SND_SOC_WM8994
Should depend on MFD_WM8994.
> +static void brownstone_ext_control(struct snd_soc_dapm_context *dapm)
> +{
This stuff is really unexpected in a modern machine driver, it was used
on things like spitz due to the odd wiring but for modern stuff I'd not
expect to see it.
> + if (brownstone_spk_func == BROWNSTONE_SPK_ON) {
> + snd_soc_dapm_enable_pin(dapm, "Ext Left Spk");
> + snd_soc_dapm_enable_pin(dapm, "Ext Right Spk");
> + } else {
> + snd_soc_dapm_disable_pin(dapm, "Ext Left Spk");
> + snd_soc_dapm_disable_pin(dapm, "Ext Right Spk");
> + }
Just define a single widget for the speakers and use a
SND_SOC_DAPM_PIN_SWITCH().
> + /* set up jack connection */
> + switch (brownstone_jack_func) {
> + case BROWNSTONE_HP:
> + snd_soc_dapm_disable_pin(dapm, "Headset Mic");
> + snd_soc_dapm_enable_pin(dapm, "Main Mic");
> + snd_soc_dapm_enable_pin(dapm, "Headset Stereophone");
> + break;
This should all be autodetectable, users having to manually select it is
*very* unusual. Is there really no accessory detection hardware on the
board?
> + snd_soc_dapm_enable_pin(dapm, "Ext Left Spk");
> + snd_soc_dapm_enable_pin(dapm, "Ext Right Spk");
> + snd_soc_dapm_enable_pin(dapm, "Headset Stereophone");
> + snd_soc_dapm_enable_pin(dapm, "Headset Mic");
> + snd_soc_dapm_enable_pin(dapm, "Main Mic");
Everything is enable dby default.
> + /* turn on micbias 1/2 always */
> + snd_soc_update_bits(codec, WM8994_POWER_MANAGEMENT_1,
> + WM8994_MICB1_ENA_MASK |
> + WM8994_MICB2_ENA_MASK,
> + WM8994_MICB1_ENA |
> + WM8994_MICB2_ENA);
If you need to do this force enable them with DAPM, this won't work
anyway as the widgets will be powered off as soon as DAPM notices
they're on.
> + snd_soc_dai_set_fmt(cpu_dai, SND_SOC_DAIFMT_I2S |
> + SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS);
> +
> + snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_I2S |
> + SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS);
Set this in the dai_link.
> +static struct platform_driver mmp_driver = {
> + .driver = {
> + .name = "mmp-audio",
Should probably be something like "brownstone-audio".
1
0

Re: [alsa-devel] [PATCH] ASoC: imx-ssi: Use clk_prepare_enable/clk_disable_unprepare
by Mark Brown 28 May '12
by Mark Brown 28 May '12
28 May '12
On Fri, May 25, 2012 at 05:27:20PM -0300, Fabio Estevam wrote:
> Fix the following kernel crash:
Applied, thanks.
1
0
Add platform-driver handling all DMA-activities.
Signed-off-by: Ola Lilja <ola.o.lilja(a)stericsson.com>
---
sound/soc/ux500/Kconfig | 7 +
sound/soc/ux500/Makefile | 3 +
sound/soc/ux500/ux500_pcm.c | 318 +++++++++++++++++++++++++++++++++++++++++++
sound/soc/ux500/ux500_pcm.h | 35 +++++
4 files changed, 363 insertions(+), 0 deletions(-)
create mode 100644 sound/soc/ux500/ux500_pcm.c
create mode 100644 sound/soc/ux500/ux500_pcm.h
diff --git a/sound/soc/ux500/Kconfig b/sound/soc/ux500/Kconfig
index 44cf434..1d38515 100644
--- a/sound/soc/ux500/Kconfig
+++ b/sound/soc/ux500/Kconfig
@@ -12,3 +12,10 @@ menuconfig SND_SOC_UX500
config SND_SOC_UX500_PLAT_MSP_I2S
tristate
depends on SND_SOC_UX500
+
+config SND_SOC_UX500_PLAT_DMA
+ tristate "Platform - DB8500 (DMA)"
+ depends on SND_SOC_UX500
+ select SND_SOC_DMAENGINE_PCM
+ help
+ Say Y if you want to enable the Ux500 platform-driver.
diff --git a/sound/soc/ux500/Makefile b/sound/soc/ux500/Makefile
index 19974c5..4634bf0 100644
--- a/sound/soc/ux500/Makefile
+++ b/sound/soc/ux500/Makefile
@@ -2,3 +2,6 @@
snd-soc-ux500-plat-msp-i2s-objs := ux500_msp_dai.o ux500_msp_i2s.o
obj-$(CONFIG_SND_SOC_UX500_PLAT_MSP_I2S) += snd-soc-ux500-plat-msp-i2s.o
+
+snd-soc-ux500-plat-dma-objs := ux500_pcm.o
+obj-$(CONFIG_SND_SOC_UX500_PLAT_DMA) += snd-soc-ux500-plat-dma.o
diff --git a/sound/soc/ux500/ux500_pcm.c b/sound/soc/ux500/ux500_pcm.c
new file mode 100644
index 0000000..66b080e
--- /dev/null
+++ b/sound/soc/ux500/ux500_pcm.c
@@ -0,0 +1,318 @@
+/*
+ * Copyright (C) ST-Ericsson SA 2012
+ *
+ * Author: Ola Lilja <ola.o.lilja(a)stericsson.com>,
+ * Roger Nilsson <roger.xr.nilsson(a)stericsson.com>
+ * for ST-Ericsson.
+ *
+ * License terms:
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as published
+ * by the Free Software Foundation.
+ */
+
+#include <asm/page.h>
+
+#include <linux/module.h>
+#include <linux/dma-mapping.h>
+#include <linux/dmaengine.h>
+#include <linux/slab.h>
+
+#include <plat/ste_dma40.h>
+
+#include <sound/pcm.h>
+#include <sound/pcm_params.h>
+#include <sound/soc.h>
+#include <sound/dmaengine_pcm.h>
+
+#include "ux500_msp_i2s.h"
+#include "ux500_pcm.h"
+
+static struct snd_pcm_hardware ux500_pcm_hw_playback = {
+ .info = SNDRV_PCM_INFO_INTERLEAVED |
+ SNDRV_PCM_INFO_MMAP |
+ SNDRV_PCM_INFO_RESUME |
+ SNDRV_PCM_INFO_PAUSE,
+ .formats = SNDRV_PCM_FMTBIT_S16_LE |
+ SNDRV_PCM_FMTBIT_U16_LE |
+ SNDRV_PCM_FMTBIT_S16_BE |
+ SNDRV_PCM_FMTBIT_U16_BE,
+ .rates = SNDRV_PCM_RATE_KNOT,
+ .rate_min = UX500_PLATFORM_MIN_RATE_PLAYBACK,
+ .rate_max = UX500_PLATFORM_MAX_RATE_PLAYBACK,
+ .channels_min = UX500_PLATFORM_MIN_CHANNELS,
+ .channels_max = UX500_PLATFORM_MAX_CHANNELS,
+ .buffer_bytes_max = UX500_PLATFORM_BUFFER_BYTES_MAX,
+ .period_bytes_min = UX500_PLATFORM_PERIODS_BYTES_MIN,
+ .period_bytes_max = UX500_PLATFORM_PERIODS_BYTES_MAX,
+ .periods_min = UX500_PLATFORM_PERIODS_MIN,
+ .periods_max = UX500_PLATFORM_PERIODS_MAX,
+};
+
+static struct snd_pcm_hardware ux500_pcm_hw_capture = {
+ .info = SNDRV_PCM_INFO_INTERLEAVED |
+ SNDRV_PCM_INFO_MMAP |
+ SNDRV_PCM_INFO_RESUME |
+ SNDRV_PCM_INFO_PAUSE,
+ .formats = SNDRV_PCM_FMTBIT_S16_LE |
+ SNDRV_PCM_FMTBIT_U16_LE |
+ SNDRV_PCM_FMTBIT_S16_BE |
+ SNDRV_PCM_FMTBIT_U16_BE,
+ .rates = SNDRV_PCM_RATE_KNOT,
+ .rate_min = UX500_PLATFORM_MIN_RATE_CAPTURE,
+ .rate_max = UX500_PLATFORM_MAX_RATE_CAPTURE,
+ .channels_min = UX500_PLATFORM_MIN_CHANNELS,
+ .channels_max = UX500_PLATFORM_MAX_CHANNELS,
+ .buffer_bytes_max = UX500_PLATFORM_BUFFER_BYTES_MAX,
+ .period_bytes_min = UX500_PLATFORM_PERIODS_BYTES_MIN,
+ .period_bytes_max = UX500_PLATFORM_PERIODS_BYTES_MAX,
+ .periods_min = UX500_PLATFORM_PERIODS_MIN,
+ .periods_max = UX500_PLATFORM_PERIODS_MAX,
+};
+
+static void ux500_pcm_dma_hw_free(struct device *dev,
+ struct snd_pcm_substream *substream)
+{
+ struct snd_pcm_runtime *runtime = substream->runtime;
+ struct snd_dma_buffer *buf = runtime->dma_buffer_p;
+
+ if (runtime->dma_area == NULL)
+ return;
+
+ if (buf != &substream->dma_buffer) {
+ dma_free_coherent(buf->dev.dev, buf->bytes, buf->area,
+ buf->addr);
+ kfree(runtime->dma_buffer_p);
+ }
+
+ snd_pcm_set_runtime_buffer(substream, NULL);
+}
+
+static int ux500_pcm_open(struct snd_pcm_substream *substream)
+{
+ int stream_id = substream->pstr->stream;
+ struct snd_pcm_runtime *runtime = substream->runtime;
+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
+ struct snd_soc_dai *dai = rtd->cpu_dai;
+ struct device *dev = dai->dev;
+ int ret;
+ struct ux500_msp_dma_params *dma_params;
+ u16 per_data_width, mem_data_width;
+ struct stedma40_chan_cfg *dma_cfg;
+
+ dev_dbg(dev, "%s: MSP %d (%s): Enter.\n", __func__, dai->id,
+ snd_pcm_stream_str(substream));
+
+ dev_dbg(dev, "%s: Set runtime hwparams.\n", __func__);
+ if (stream_id == SNDRV_PCM_STREAM_PLAYBACK)
+ snd_soc_set_runtime_hwparams(substream,
+ &ux500_pcm_hw_playback);
+ else
+ snd_soc_set_runtime_hwparams(substream,
+ &ux500_pcm_hw_capture);
+
+ /* ensure that buffer size is a multiple of period size */
+ ret = snd_pcm_hw_constraint_integer(runtime,
+ SNDRV_PCM_HW_PARAM_PERIODS);
+ if (ret < 0) {
+ dev_err(dev, "%s: Error: snd_pcm_hw_constraints failed (%d)\n",
+ __func__, ret);
+ return ret;
+ }
+
+ dev_dbg(dev, "%s: Set hw-struct for %s.\n", __func__,
+ snd_pcm_stream_str(substream));
+ runtime->hw = (stream_id == SNDRV_PCM_STREAM_PLAYBACK) ?
+ ux500_pcm_hw_playback : ux500_pcm_hw_capture;
+
+ mem_data_width = STEDMA40_HALFWORD_WIDTH;
+
+ dma_params = snd_soc_dai_get_dma_data(dai, substream);
+ switch (dma_params->data_size) {
+ case 32:
+ per_data_width = STEDMA40_WORD_WIDTH;
+ break;
+ case 16:
+ per_data_width = STEDMA40_HALFWORD_WIDTH;
+ break;
+ case 8:
+ per_data_width = STEDMA40_BYTE_WIDTH;
+ break;
+ default:
+ per_data_width = STEDMA40_WORD_WIDTH;
+ dev_warn(rtd->platform->dev,
+ "%s: Unknown data-size (%d)! Assuming 32 bits.\n",
+ __func__, dma_params->data_size);
+ }
+
+ dma_cfg = dma_params->dma_cfg;
+
+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
+ dma_cfg->src_info.data_width = mem_data_width;
+ dma_cfg->dst_info.data_width = per_data_width;
+ } else {
+ dma_cfg->src_info.data_width = per_data_width;
+ dma_cfg->dst_info.data_width = mem_data_width;
+ }
+
+
+ ret = snd_dmaengine_pcm_open(substream, stedma40_filter, dma_cfg);
+ if (ret) {
+ dev_dbg(dai->dev,
+ "%s: ERROR: snd_dmaengine_pcm_open failed (%d)!\n",
+ __func__, ret);
+ return ret;
+ }
+
+ snd_dmaengine_pcm_set_data(substream, dma_cfg);
+
+ return 0;
+}
+
+static int ux500_pcm_close(struct snd_pcm_substream *substream)
+{
+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
+ struct snd_soc_dai *dai = rtd->cpu_dai;
+
+ dev_dbg(dai->dev, "%s: Enter\n", __func__);
+
+ snd_dmaengine_pcm_close(substream);
+
+ return 0;
+}
+
+static int ux500_pcm_hw_params(struct snd_pcm_substream *substream,
+ struct snd_pcm_hw_params *hw_params)
+{
+ struct snd_pcm_runtime *runtime = substream->runtime;
+ struct snd_dma_buffer *buf = runtime->dma_buffer_p;
+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
+ int ret = 0;
+ int size;
+
+ dev_dbg(rtd->platform->dev, "%s: Enter\n", __func__);
+
+ size = params_buffer_bytes(hw_params);
+
+ if (buf) {
+ if (buf->bytes >= size)
+ goto out;
+ ux500_pcm_dma_hw_free(NULL, substream);
+ }
+
+ if (substream->dma_buffer.area != NULL &&
+ substream->dma_buffer.bytes >= size) {
+ buf = &substream->dma_buffer;
+ } else {
+ buf = kmalloc(sizeof(struct snd_dma_buffer), GFP_KERNEL);
+ if (!buf)
+ goto nomem;
+
+ buf->dev.type = SNDRV_DMA_TYPE_DEV;
+ buf->dev.dev = NULL;
+ buf->area = dma_alloc_coherent(NULL, size, &buf->addr,
+ GFP_KERNEL);
+ buf->bytes = size;
+ buf->private_data = NULL;
+
+ if (!buf->area)
+ goto free;
+ }
+ snd_pcm_set_runtime_buffer(substream, buf);
+ ret = 1;
+ out:
+ runtime->dma_bytes = size;
+ return ret;
+
+ free:
+ kfree(buf);
+ nomem:
+ return -ENOMEM;
+}
+
+static int ux500_pcm_hw_free(struct snd_pcm_substream *substream)
+{
+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
+
+ dev_dbg(rtd->platform->dev, "%s: Enter\n", __func__);
+
+ ux500_pcm_dma_hw_free(NULL, substream);
+
+ return 0;
+}
+
+static int ux500_pcm_mmap(struct snd_pcm_substream *substream,
+ struct vm_area_struct *vma)
+{
+ struct snd_pcm_runtime *runtime = substream->runtime;
+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
+
+ dev_dbg(rtd->platform->dev, "%s: Enter.\n", __func__);
+
+ return dma_mmap_coherent(NULL, vma, runtime->dma_area,
+ runtime->dma_addr, runtime->dma_bytes);
+}
+
+static struct snd_pcm_ops ux500_pcm_ops = {
+ .open = ux500_pcm_open,
+ .close = ux500_pcm_close,
+ .ioctl = snd_pcm_lib_ioctl,
+ .hw_params = ux500_pcm_hw_params,
+ .hw_free = ux500_pcm_hw_free,
+ .trigger = snd_dmaengine_pcm_trigger,
+ .pointer = snd_dmaengine_pcm_pointer,
+ .mmap = ux500_pcm_mmap
+};
+
+int ux500_pcm_new(struct snd_soc_pcm_runtime *rtd)
+{
+ struct snd_pcm *pcm = rtd->pcm;
+
+ dev_dbg(rtd->platform->dev, "%s: Enter (id = '%s').\n", __func__,
+ pcm->id);
+
+ pcm->info_flags = 0;
+
+ return 0;
+}
+
+static struct snd_soc_platform_driver ux500_pcm_soc_drv = {
+ .ops = &ux500_pcm_ops,
+ .pcm_new = ux500_pcm_new,
+};
+
+static int __devexit ux500_pcm_drv_probe(struct platform_device *pdev)
+{
+ int ret;
+
+ ret = snd_soc_register_platform(&pdev->dev, &ux500_pcm_soc_drv);
+ if (ret < 0) {
+ dev_err(&pdev->dev,
+ "%s: ERROR: Failed to register platform '%s' (%d)!\n",
+ __func__, pdev->name, ret);
+ return ret;
+ }
+
+ return 0;
+}
+
+static int __devinit ux500_pcm_drv_remove(struct platform_device *pdev)
+{
+ snd_soc_unregister_platform(&pdev->dev);
+
+ return 0;
+}
+
+static struct platform_driver ux500_pcm_driver = {
+ .driver = {
+ .name = "ux500-pcm",
+ .owner = THIS_MODULE,
+ },
+
+ .probe = ux500_pcm_drv_probe,
+ .remove = __devexit_p(ux500_pcm_drv_remove),
+};
+module_platform_driver(ux500_pcm_driver);
+
+MODULE_LICENSE("GPLv2");
diff --git a/sound/soc/ux500/ux500_pcm.h b/sound/soc/ux500/ux500_pcm.h
new file mode 100644
index 0000000..77ed44d
--- /dev/null
+++ b/sound/soc/ux500/ux500_pcm.h
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) ST-Ericsson SA 2012
+ *
+ * Author: Ola Lilja <ola.o.lilja(a)stericsson.com>,
+ * Roger Nilsson <roger.xr.nilsson(a)stericsson.com>
+ * for ST-Ericsson.
+ *
+ * License terms:
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as published
+ * by the Free Software Foundation.
+ */
+#ifndef UX500_PCM_H
+#define UX500_PCM_H
+
+#include <asm/page.h>
+
+#include <linux/workqueue.h>
+
+#define UX500_PLATFORM_MIN_RATE_PLAYBACK 8000
+#define UX500_PLATFORM_MAX_RATE_PLAYBACK 48000
+#define UX500_PLATFORM_MIN_RATE_CAPTURE 8000
+#define UX500_PLATFORM_MAX_RATE_CAPTURE 48000
+
+#define UX500_PLATFORM_MIN_CHANNELS 1
+#define UX500_PLATFORM_MAX_CHANNELS 8
+
+#define UX500_PLATFORM_PERIODS_BYTES_MIN 128
+#define UX500_PLATFORM_PERIODS_BYTES_MAX (64 * PAGE_SIZE)
+#define UX500_PLATFORM_PERIODS_MIN 2
+#define UX500_PLATFORM_PERIODS_MAX 48
+#define UX500_PLATFORM_BUFFER_BYTES_MAX (2048 * PAGE_SIZE)
+
+#endif
--
1.7.8.3
2
1

28 May '12
Adds a supply-widget variant for connection to the clock-framework.
This widget-type corresponds to the variant for regulators.
Signed-off-by: Ola Lilja <ola.o.lilja(a)stericsson.com>
---
include/sound/soc-dapm.h | 10 ++++++++++
sound/soc/soc-dapm.c | 38 ++++++++++++++++++++++++++++++++++++++
2 files changed, 48 insertions(+), 0 deletions(-)
diff --git a/include/sound/soc-dapm.h b/include/sound/soc-dapm.h
index e3833d9..05559e5 100644
--- a/include/sound/soc-dapm.h
+++ b/include/sound/soc-dapm.h
@@ -229,6 +229,10 @@ struct device;
{ .id = snd_soc_dapm_adc, .name = wname, .sname = stname, .reg = wreg, \
.shift = wshift, .invert = winvert, \
.event = wevent, .event_flags = wflags}
+#define SND_SOC_DAPM_CLOCK_SUPPLY(wname) \
+{ .id = snd_soc_dapm_clock_supply, .name = wname, \
+ .reg = SND_SOC_NOPM, .event = dapm_clock_event, \
+ .event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD }
/* generic widgets */
#define SND_SOC_DAPM_REG(wid, wname, wreg, wshift, wmask, won_val, woff_val) \
@@ -245,6 +249,7 @@ struct device;
.reg = SND_SOC_NOPM, .shift = wdelay, .event = dapm_regulator_event, \
.event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD }
+
/* dapm kcontrol types */
#define SOC_DAPM_SINGLE(xname, reg, shift, max, invert) \
{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
@@ -327,6 +332,8 @@ int dapm_reg_event(struct snd_soc_dapm_widget *w,
struct snd_kcontrol *kcontrol, int event);
int dapm_regulator_event(struct snd_soc_dapm_widget *w,
struct snd_kcontrol *kcontrol, int event);
+int dapm_clock_event(struct snd_soc_dapm_widget *w,
+ struct snd_kcontrol *kcontrol, int event);
/* dapm controls */
int snd_soc_dapm_put_volsw(struct snd_kcontrol *kcontrol,
@@ -432,6 +439,7 @@ enum snd_soc_dapm_type {
snd_soc_dapm_post, /* machine specific post widget - exec last */
snd_soc_dapm_supply, /* power/clock supply */
snd_soc_dapm_regulator_supply, /* external regulator */
+ snd_soc_dapm_clock_supply, /* external clock */
snd_soc_dapm_aif_in, /* audio interface input */
snd_soc_dapm_aif_out, /* audio interface output */
snd_soc_dapm_siggen, /* signal generator */
@@ -537,6 +545,8 @@ struct snd_soc_dapm_widget {
struct list_head dirty;
int inputs;
int outputs;
+
+ struct clk *clk;
};
struct snd_soc_dapm_update {
diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
index 90ee77d..3bb7a6f 100644
--- a/sound/soc/soc-dapm.c
+++ b/sound/soc/soc-dapm.c
@@ -35,6 +35,7 @@
#include <linux/debugfs.h>
#include <linux/pm_runtime.h>
#include <linux/regulator/consumer.h>
+#include <linux/clk.h>
#include <linux/slab.h>
#include <sound/core.h>
#include <sound/pcm.h>
@@ -51,6 +52,7 @@ static int dapm_up_seq[] = {
[snd_soc_dapm_pre] = 0,
[snd_soc_dapm_supply] = 1,
[snd_soc_dapm_regulator_supply] = 1,
+ [snd_soc_dapm_clock_supply] = 1,
[snd_soc_dapm_micbias] = 2,
[snd_soc_dapm_dai_link] = 2,
[snd_soc_dapm_dai] = 3,
@@ -92,6 +94,7 @@ static int dapm_down_seq[] = {
[snd_soc_dapm_aif_out] = 10,
[snd_soc_dapm_dai] = 10,
[snd_soc_dapm_dai_link] = 11,
+ [snd_soc_dapm_clock_supply] = 12,
[snd_soc_dapm_regulator_supply] = 12,
[snd_soc_dapm_supply] = 12,
[snd_soc_dapm_post] = 13,
@@ -391,6 +394,7 @@ static void dapm_set_path_status(struct snd_soc_dapm_widget *w,
case snd_soc_dapm_vmid:
case snd_soc_dapm_supply:
case snd_soc_dapm_regulator_supply:
+ case snd_soc_dapm_clock_supply:
case snd_soc_dapm_aif_in:
case snd_soc_dapm_aif_out:
case snd_soc_dapm_dai:
@@ -764,6 +768,7 @@ static int is_connected_output_ep(struct snd_soc_dapm_widget *widget,
switch (widget->id) {
case snd_soc_dapm_supply:
case snd_soc_dapm_regulator_supply:
+ case snd_soc_dapm_clock_supply:
return 0;
default:
break;
@@ -850,6 +855,7 @@ static int is_connected_input_ep(struct snd_soc_dapm_widget *widget,
switch (widget->id) {
case snd_soc_dapm_supply:
case snd_soc_dapm_regulator_supply:
+ case snd_soc_dapm_clock_supply:
return 0;
default:
break;
@@ -996,6 +1002,24 @@ int dapm_regulator_event(struct snd_soc_dapm_widget *w,
}
EXPORT_SYMBOL_GPL(dapm_regulator_event);
+/*
+ * Handler for clock supply widget.
+ */
+int dapm_clock_event(struct snd_soc_dapm_widget *w,
+ struct snd_kcontrol *kcontrol, int event)
+{
+ if (!w->clk)
+ return -EIO;
+
+ if (SND_SOC_DAPM_EVENT_ON(event)) {
+ return clk_enable(w->clk);
+ } else {
+ clk_disable(w->clk);
+ return 0;
+ }
+}
+EXPORT_SYMBOL_GPL(dapm_clock_event);
+
static int dapm_widget_power_check(struct snd_soc_dapm_widget *w)
{
if (w->power_checked)
@@ -1487,6 +1511,7 @@ static void dapm_widget_set_power(struct snd_soc_dapm_widget *w, bool power,
switch (w->id) {
case snd_soc_dapm_supply:
case snd_soc_dapm_regulator_supply:
+ case snd_soc_dapm_clock_supply:
/* Supplies can't affect their outputs, only their inputs */
break;
default:
@@ -1587,6 +1612,7 @@ static int dapm_power_widgets(struct snd_soc_dapm_context *dapm, int event)
break;
case snd_soc_dapm_supply:
case snd_soc_dapm_regulator_supply:
+ case snd_soc_dapm_clock_supply:
case snd_soc_dapm_micbias:
if (d->target_bias_level < SND_SOC_BIAS_STANDBY)
d->target_bias_level = SND_SOC_BIAS_STANDBY;
@@ -1941,6 +1967,7 @@ static ssize_t dapm_widget_show(struct device *dev,
case snd_soc_dapm_mixer_named_ctl:
case snd_soc_dapm_supply:
case snd_soc_dapm_regulator_supply:
+ case snd_soc_dapm_clock_supply:
if (w->name)
count += sprintf(buf + count, "%s: %s\n",
w->name, w->power ? "On":"Off");
@@ -2187,6 +2214,7 @@ static int snd_soc_dapm_add_route(struct snd_soc_dapm_context *dapm,
case snd_soc_dapm_post:
case snd_soc_dapm_supply:
case snd_soc_dapm_regulator_supply:
+ case snd_soc_dapm_clock_supply:
case snd_soc_dapm_aif_in:
case snd_soc_dapm_aif_out:
case snd_soc_dapm_dai:
@@ -2873,6 +2901,15 @@ snd_soc_dapm_new_control(struct snd_soc_dapm_context *dapm,
return NULL;
}
break;
+ case snd_soc_dapm_clock_supply:
+ w->clk = clk_get(dapm->dev, w->name);
+ if (IS_ERR(w->clk)) {
+ ret = PTR_ERR(w->clk);
+ dev_err(dapm->dev, "Failed to request %s: %d\n",
+ w->name, ret);
+ return NULL;
+ }
+ break;
default:
break;
}
@@ -2924,6 +2961,7 @@ snd_soc_dapm_new_control(struct snd_soc_dapm_context *dapm,
break;
case snd_soc_dapm_supply:
case snd_soc_dapm_regulator_supply:
+ case snd_soc_dapm_clock_supply:
w->power_check = dapm_supply_check_power;
break;
case snd_soc_dapm_dai:
--
1.7.8.3
2
1

28 May '12
Adds a function getting the stream-name as a string for
a specific stream.
Signed-off-by: Ola Lilja <ola.o.lilja(a)stericsson.com>
---
include/sound/pcm.h | 11 +++++++++++
1 files changed, 11 insertions(+), 0 deletions(-)
diff --git a/include/sound/pcm.h b/include/sound/pcm.h
index 0d11128..a55d5db 100644
--- a/include/sound/pcm.h
+++ b/include/sound/pcm.h
@@ -1073,4 +1073,15 @@ static inline void snd_pcm_limit_isa_dma_size(int dma, size_t *max)
const char *snd_pcm_format_name(snd_pcm_format_t format);
+/**
+ * Get a string naming the direction of a stream
+ */
+static inline const char *snd_pcm_stream_str(struct snd_pcm_substream *substream)
+{
+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
+ return "Playback";
+ else
+ return "Capture";
+}
+
#endif /* __SOUND_PCM_H */
--
1.7.8.3
3
2
2012/5/12 cee1 <fykcee1(a)gmail.com>:
> Hi all,
>
> We're using PA on our product, and sometimes audio playback may
> corrupt after adjusting volume.
>
> We found a way to (relatively) easily reproduce the problem:
> 1. Play sample.mp3 through totem in repeat mode.
> 2. In gnome-volume-control, Hardware tap, repeat to shift between "Off
> profile" and "Analog Stereo Duplex profile".
>
> When the problem happens, the corruption continues until I:
> * Do one more shift between "Off profile" and "Analog Stereo Duplex profile".
> * Close totem (close all PA playback clients).
> * Adjust volume.
>
> When the problem happens, open another PA client doing audio playback,
> is also corrupt.
>
> Some additional information:
> * Output of alsa-info.sh on our product:
> http://dev.lemote.com/files/upload/software/PA-apc/alsa-info-lemote
> * PA daemon log:
> http://dev.lemote.com/files/upload/software/PA-apc/pulseaudio.log
> * The corrupted sound:
> http://dev.lemote.com/files/upload/software/PA-apc/corrupted_sound.ogg
> * The sample mp3: http://dev.lemote.com/files/upload/software/PA-apc/sample.mp3
When the problem happens today, I notice:
1) PA complains "alsa-source.c: Overrun!". I doesn't run any recording
application then. Curious.
2) Playback becomes good automatically when play sample.mp3 again(note
totem is in repeat playing mode). It says sink becomes idle(I didn't
touch totem, so totem should keep playing back).
Any idea?
Following is PA daemon log:
I: [alsa-source] ratelimit.c: 1226 events suppressed
I: [alsa-source] alsa-source.c: Overrun!
I: [alsa-source] alsa-source.c: Increasing minimal latency to 1.00 ms
D: [alsa-source] alsa-source.c: latency set to 20.00ms
D: [alsa-source] alsa-source.c: hwbuf_unused=62008
D: [alsa-source] alsa-source.c: setting avail_min=442
I: [alsa-source] alsa-source.c: Overrun!
I: [alsa-source] alsa-source.c: Increasing minimal latency to 2.00 ms
D: [alsa-source] alsa-source.c: latency set to 20.00ms
D: [alsa-source] alsa-source.c: hwbuf_unused=62008
D: [alsa-source] alsa-source.c: setting avail_min=442
I: [alsa-source] alsa-source.c: Overrun!
I: [alsa-source] alsa-source.c: Increasing minimal latency to 4.00 ms
D: [alsa-source] alsa-source.c: latency set to 20.00ms
D: [alsa-source] alsa-source.c: hwbuf_unused=62008
D: [alsa-source] alsa-source.c: setting avail_min=442
I: [alsa-source] alsa-source.c: Overrun!
I: [alsa-source] alsa-source.c: Increasing minimal latency to 8.00 ms
D: [alsa-source] alsa-source.c: latency set to 20.00ms
D: [alsa-source] alsa-source.c: hwbuf_unused=62008
D: [alsa-source] alsa-source.c: setting avail_min=442
I: [alsa-source] alsa-source.c: Overrun!
I: [alsa-source] alsa-source.c: Increasing minimal latency to 16.00 ms
D: [alsa-source] alsa-source.c: latency set to 20.00ms
D: [alsa-source] alsa-source.c: hwbuf_unused=62008
D: [alsa-source] alsa-source.c: setting avail_min=442
I: [alsa-source] alsa-source.c: Overrun!
I: [alsa-source] alsa-source.c: Increasing minimal latency to 26.00 ms
D: [alsa-source] alsa-source.c: latency set to 26.00ms
D: [alsa-source] alsa-source.c: hwbuf_unused=60952
D: [alsa-source] alsa-source.c: setting avail_min=706
D: [alsa-sink] protocol-native.c: Underrun on 'Playback Stream', 0
bytes in queue.
D: [alsa-sink] protocol-native.c: Requesting rewind due to rewrite.
D: [alsa-sink] sink-input.c: Requesting rewind due to corking
D: [alsa-sink] alsa-sink.c: Requested to rewind 16208 bytes.
D: [alsa-sink] alsa-sink.c: Limited to 15096 bytes.
D: [alsa-sink] alsa-sink.c: before: 3774
D: [alsa-sink] alsa-sink.c: after: 3642
D: [alsa-sink] alsa-sink.c: Rewound 14568 bytes.
D: [alsa-sink] sink.c: Processing rewind...
D: [alsa-sink] sink.c: latency = 4156
D: [alsa-sink] sink-input.c: Have to rewind 14568 bytes on render memblockq.
D: [alsa-sink] sink-input.c: Have to rewind 29136 bytes on implementor.
D: [alsa-sink] source.c: Processing rewind...
D: [pulseaudio] module-suspend-on-idle.c: Sink
alsa_output.pci-0000_00_14.2.analog-stereo becomes idle, timeout in 5
seconds.
D: [alsa-sink] protocol-native.c: Requesting rewind due to end of underrun.
D: [alsa-sink] protocol-native.c: Requesting rewind due to end of underrun.
D: [alsa-sink] protocol-native.c: Requesting rewind due to end of underrun.
D: [alsa-sink] protocol-native.c: Requesting rewind due to end of underrun.
D: [alsa-sink] protocol-native.c: Requesting rewind due to end of underrun.
D: [pulseaudio] sink.c: Suspend cause of sink
alsa_output.pci-0000_00_14.2.analog-stereo is 0x0004, suspending
I: [alsa-sink] alsa-sink.c: Device suspended...
I: [pulseaudio] alsa-sink.c: Updating rate for device front:0, new rate is 44100
I: [pulseaudio] sink.c: Changed sampling rate successfully
D: [alsa-sink] protocol-native.c: Requesting rewind due to end of underrun.
D: [alsa-sink] sink-input.c: Requesting rewind due to uncorking
D: [pulseaudio] sink.c: Suspend cause of sink
alsa_output.pci-0000_00_14.2.analog-stereo is 0x0000, resuming
I: [alsa-sink] alsa-sink.c: Trying resume...
I: [alsa-sink] alsa-util.c: Trying to disable ALSA period wakeups,
using timers only
D: [alsa-sink] alsa-util.c: Maximum hw buffer size is 371 ms
D: [alsa-sink] alsa-util.c: Set buffer size first (to 16384 samples),
period size second (to 8192 samples).
I: [alsa-sink] alsa-util.c: ALSA period wakeups disabled
D: [alsa-sink] alsa-sink.c: Latency set to 90.00ms
D: [alsa-sink] alsa-sink.c: hwbuf_unused=49660
D: [alsa-sink] alsa-sink.c: setting avail_min=15503
I: [alsa-sink] alsa-sink.c: Time scheduling watermark is 20.00ms
I: [alsa-sink] alsa-sink.c: Resumed successfully...
D: [pulseaudio] core-subscribe.c: Dropped redundant event due to change event.
I: [alsa-sink] alsa-sink.c: Starting playback.
D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial
iterations by half.
D: [pulseaudio] core-subscribe.c: Dropped redundant event due to change event.
D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial
iterations by half.
D: [pulseaudio] module-suspend-on-idle.c: Sink
alsa_output.pci-0000_00_14.2.analog-stereo becomes busy.
D: [pulseaudio] module-udev-detect.c: /dev/snd/controlC0 is accessible: yes
D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial
iterations by half.
D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial
iterations by half.
D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial
iterations by half.
D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial
iterations by half.
D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial
iterations by half.
D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial
iterations by half.
D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial
iterations by half.
D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial
iterations by half.
D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial
iterations by half.
>
> We've tried PA 1.0-0ubuntu3, 1.1-0ubuntu15 and 2.0, the problem continues.
>
> The problem can also be reproduced on an AMD turion 64 x2 board with
> ubuntu 10.10 and ubuntu 12.04:
> * Output of alsa-info:
> Â ubuntu 10.10(32bit)
> http://dev.lemote.com/files/upload/software/PA-apc/alsa-info-ubuntu-10.10
> Â ubuntu 12.04(32bit)
> http://dev.lemote.com/files/upload/software/PA-apc/alsa-info-ubuntu-12.04
>
> Note:
> * The AMD turion 64 x2 board uses the same chipset as our product.
> * gnome-volume-control is removed in ubuntu 12.04, thus we compiled
> it: http://dev.lemote.com/files/upload/software/PA-apc/gnome-volume-control
--
Regards,
- cee1
2
6

25 May '12
Hi Fabio,
On Fri, May 25, 2012 at 05:06:50PM -0300, Fabio Estevam wrote:
> Fix the following kernel crash:
>
> This applies against linux-next.
>
> sound/soc/fsl/imx-ssi.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/sound/soc/fsl/imx-ssi.c b/sound/soc/fsl/imx-ssi.c
> index cf3ed03..9027a83 100644
> --- a/sound/soc/fsl/imx-ssi.c
> +++ b/sound/soc/fsl/imx-ssi.c
> @@ -543,7 +543,7 @@ static int imx_ssi_probe(struct platform_device *pdev)
> ret);
> goto failed_clk;
> }
> - clk_enable(ssi->clk);
> + clk_prepare_enable(ssi->clk);
You should use clk_disable_unprepare then aswell.
Sascha
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
1
0

Re: [alsa-devel] [PATCH] [emu10k1]: remove the kcallloc cast (reported from make coccicheck's drop_kmalloc_cast.cocci)
by Takashi Iwai 25 May '12
by Takashi Iwai 25 May '12
25 May '12
At Thu, 24 May 2012 19:32:29 +0530,
Devendra Naga wrote:
>
> Signed-off-by: Devendra Naga <devendra.aaru(a)gmail.com>
I don't think removing it improves anything much.
It's cast to __user pointer, and this rather helps to catch the
caution.
thanks,
Takashi
> ---
> sound/pci/emu10k1/emufx.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/sound/pci/emu10k1/emufx.c b/sound/pci/emu10k1/emufx.c
> index dae4050..272f8ac 100644
> --- a/sound/pci/emu10k1/emufx.c
> +++ b/sound/pci/emu10k1/emufx.c
> @@ -1815,7 +1815,7 @@ static int __devinit _snd_emu10k1_init_efx(struct snd_emu10k1 *emu)
>
> if ((icode = kzalloc(sizeof(*icode), GFP_KERNEL)) == NULL)
> return -ENOMEM;
> - if ((icode->gpr_map = (u_int32_t __user *)
> + if ((icode->gpr_map =
> kcalloc(256 + 160 + 160 + 2 * 512, sizeof(u_int32_t),
> GFP_KERNEL)) == NULL ||
> (controls = kcalloc(SND_EMU10K1_GPR_CONTROLS,
> --
> 1.7.9.5
>
1
0

[alsa-devel] [PATCH 1/2] ALSA: update sync header when streams are linked/unlinked
by Pierre-Louis Bossart 25 May '12
by Pierre-Louis Bossart 25 May '12
25 May '12
Previous code only reported card number and was not updated
when devices were linked/unlinked. This makes alsa-lib
snd_pcm_info_get_sync totally useless.
Add hooks to force update of sync header when devices are
linked/unlinked, and provide more information such as
number of devices and indices of capture/playback devices
linked to
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart(a)linux.intel.com>
---
sound/core/pcm_lib.c | 37 ++++++++++++++++++++++++++++++++-----
sound/core/pcm_native.c | 6 ++++++
2 files changed, 38 insertions(+), 5 deletions(-)
diff --git a/sound/core/pcm_lib.c b/sound/core/pcm_lib.c
index faedb14..ae46d75 100644
--- a/sound/core/pcm_lib.c
+++ b/sound/core/pcm_lib.c
@@ -533,11 +533,38 @@ EXPORT_SYMBOL(snd_pcm_set_ops);
void snd_pcm_set_sync(struct snd_pcm_substream *substream)
{
struct snd_pcm_runtime *runtime = substream->runtime;
-
- runtime->sync.id32[0] = substream->pcm->card->number;
- runtime->sync.id32[1] = -1;
- runtime->sync.id32[2] = -1;
- runtime->sync.id32[3] = -1;
+ struct snd_pcm_substream *s;
+ int dev_c, dev_p;
+
+ if (snd_pcm_stream_linked(substream)) {
+ runtime->sync.id32[0] = substream->pcm->card->number;
+ /* save number of devices linked */
+ runtime->sync.id32[1] = substream->group->count-1;
+ dev_c = dev_p = 0;
+
+ snd_pcm_group_for_each_entry(s, substream) {
+ if (s == substream)
+ continue;
+ if (s->stream == SNDRV_PCM_STREAM_PLAYBACK) {
+ dev_p++;
+ if (dev_p == 1)
+ runtime->sync.id32[2] = 0;
+ /* save mask of linked playback devices */
+ runtime->sync.id32[2] |= (1<<s->number);
+ } else {
+ dev_c++;
+ if (dev_c == 1)
+ runtime->sync.id32[3] = 0;
+ /* save mask of linked capture devices */
+ runtime->sync.id32[3] |= (1<<s->number);
+ }
+ }
+ } else {
+ runtime->sync.id32[0] = -1;
+ runtime->sync.id32[1] = -1;
+ runtime->sync.id32[2] = -1;
+ runtime->sync.id32[3] = -1;
+ }
}
EXPORT_SYMBOL(snd_pcm_set_sync);
diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c
index 3fe99e6..e92bc62 100644
--- a/sound/core/pcm_native.c
+++ b/sound/core/pcm_native.c
@@ -1619,6 +1619,9 @@ static int snd_pcm_link(struct snd_pcm_substream *substream, int fd)
list_add_tail(&substream1->link_list, &substream->group->substreams);
substream->group->count++;
substream1->group = substream->group;
+ snd_pcm_set_sync(substream);
+ snd_pcm_set_sync(substream1);
+
_end:
write_unlock_irq(&snd_pcm_link_rwlock);
up_write(&snd_pcm_link_rwsem);
@@ -1652,11 +1655,14 @@ static int snd_pcm_unlink(struct snd_pcm_substream *substream)
if (substream->group->count == 1) { /* detach the last stream, too */
snd_pcm_group_for_each_entry(s, substream) {
relink_to_local(s);
+ snd_pcm_set_sync(s);
break;
}
kfree(substream->group);
}
relink_to_local(substream);
+ snd_pcm_set_sync(substream);
+
_end:
write_unlock_irq(&snd_pcm_link_rwlock);
up_write(&snd_pcm_link_rwsem);
--
1.7.6.5
3
7
Dear all,
I am writing to ask how to route certain DSP 'outputs' from my Audigy 2 ZS
back into the equivalent 'ASIO inputs' for recording purposes.
Specifically, I'd like to route outputs from the Wavetable Synths on my
card to inputs that would go straight into a DAW (such as Ardour), so that
I can apply effects, record and mix-down as if they were external synth
signals.
I know that with the kX project drivers in Windows this is possible, by
routing the Synth outputs to FXBus outputs 16-63, leaving the ASIO inputs
as 0-15 for the audio input, and then patching which channels I require
from the Synth to those inputs (e.g. Synth Channel 1 -> FXBus out 16&17 ->
FXBus in 0&1).
After reading a thread that contained responses from Jaroslav, I believe
the answer is in emufx.c, but I'm unsure as to where to start as I need to
assign the outputs from the Synths correctly first.
Thanks in advance! Any help would be greatly appreciated!
Kind Regards,
Dan
--
Dan Swain <sp4md4n(a)gmail.com>
1
0
Hi,
I have developed a plugin that implements a bi-quad filter. filter's
parameters are given into asoundrc file.
Now I need to change those parameters during playback.
How can I do?
what help can gives alsalib to achieve this?
best regards
Max
1
0
Add machine-driver for ST-Ericsson U8500 platform, including
support for the AB8500-codec.
Signed-off-by: Ola Lilja <ola.o.lilja(a)stericsson.com>
---
sound/soc/ux500/Kconfig | 11 +
sound/soc/ux500/Makefile | 3 +
sound/soc/ux500/mop500.c | 117 +++++++++++
sound/soc/ux500/mop500_ab8500.c | 441 +++++++++++++++++++++++++++++++++++++++
sound/soc/ux500/mop500_ab8500.h | 22 ++
5 files changed, 594 insertions(+), 0 deletions(-)
create mode 100644 sound/soc/ux500/mop500.c
create mode 100644 sound/soc/ux500/mop500_ab8500.c
create mode 100644 sound/soc/ux500/mop500_ab8500.h
diff --git a/sound/soc/ux500/Kconfig b/sound/soc/ux500/Kconfig
index 1d38515..069330d 100644
--- a/sound/soc/ux500/Kconfig
+++ b/sound/soc/ux500/Kconfig
@@ -19,3 +19,14 @@ config SND_SOC_UX500_PLAT_DMA
select SND_SOC_DMAENGINE_PCM
help
Say Y if you want to enable the Ux500 platform-driver.
+
++config SND_SOC_UX500_MACH_MOP500
++ tristate "Machine - MOP500 (Ux500 + AB8500)"
+ depends on AB8500_CORE && AB8500_GPADC && SND_SOC_UX500
+ select SND_SOC_AB8500_CODEC
+ select SND_SOC_UX500_PLAT_MSP_I2S
+ select SND_SOC_UX500_PLAT_DMA
+ help
+ Select this to enable the MOP500 machine-driver.
+ This will enable platform-drivers for: Ux500
+ This will enable codec-drivers for: AB8500
diff --git a/sound/soc/ux500/Makefile b/sound/soc/ux500/Makefile
index 4634bf0..cce0c11 100644
--- a/sound/soc/ux500/Makefile
+++ b/sound/soc/ux500/Makefile
@@ -5,3 +5,6 @@ obj-$(CONFIG_SND_SOC_UX500_PLAT_MSP_I2S) += snd-soc-ux500-plat-msp-i2s.o
snd-soc-ux500-plat-dma-objs := ux500_pcm.o
obj-$(CONFIG_SND_SOC_UX500_PLAT_DMA) += snd-soc-ux500-plat-dma.o
+
+snd-soc-ux500-mach-mop500-objs := mop500.o mop500_ab8500.o
+obj-$(CONFIG_SND_SOC_UX500_MACH_MOP500) += snd-soc-ux500-mach-mop500.o
diff --git a/sound/soc/ux500/mop500.c b/sound/soc/ux500/mop500.c
new file mode 100644
index 0000000..d9f4a6b
--- /dev/null
+++ b/sound/soc/ux500/mop500.c
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) ST-Ericsson SA 2012
+ *
+ * Author: Ola Lilja (ola.o.lilja(a)stericsson.com)
+ * for ST-Ericsson.
+ *
+ * License terms:
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as published
+ * by the Free Software Foundation.
+ */
+
+#include <asm/mach-types.h>
+
+#include <linux/module.h>
+#include <linux/io.h>
+#include <linux/spi/spi.h>
+
+#include <mach/board-mop500-audio.h>
+
+#include <sound/soc.h>
+#include <sound/initval.h>
+
+#include "ux500_pcm.h"
+#include "ux500_msp_dai.h"
+
+#include <mop500_ab8500.h>
+
+/* Define the whole MOP500 soundcard, linking platform to the codec-drivers */
+struct snd_soc_dai_link mop500_dai_links[] = {
+ {
+ .name = "ab8500_0",
+ .stream_name = "ab8500_0",
+ .cpu_dai_name = "ux500-msp-i2s.1",
+ .codec_dai_name = "ab8500-codec-dai.0",
+ .platform_name = "ux500-pcm.0",
+ .codec_name = "ab8500-codec.0",
+ .init = mop500_ab8500_machine_init,
+ .ops = mop500_ab8500_ops,
+ },
+ {
+ .name = "ab8500_1",
+ .stream_name = "ab8500_1",
+ .cpu_dai_name = "ux500-msp-i2s.3",
+ .codec_dai_name = "ab8500-codec-dai.1",
+ .platform_name = "ux500-pcm.0",
+ .codec_name = "ab8500-codec.0",
+ .init = NULL,
+ .ops = mop500_ab8500_ops,
+ },
+};
+
+static struct snd_soc_card mop500_card = {
+ .name = "MOP500-card",
+ .probe = NULL,
+ .dai_link = mop500_dai_links,
+ .num_links = ARRAY_SIZE(mop500_dai_links),
+};
+
+static int __devinit mop500_probe(struct platform_device *pdev)
+{
+ int ret;
+
+ pr_debug("%s: Enter.\n", __func__);
+
+ dev_dbg(&pdev->dev, "%s: Enter.\n", __func__);
+
+ mop500_card.dev = &pdev->dev;
+
+ dev_dbg(&pdev->dev, "%s: Card %s: Set platform drvdata.\n",
+ __func__, mop500_card.name);
+ platform_set_drvdata(pdev, &mop500_card);
+
+ snd_soc_card_set_drvdata(&mop500_card, NULL);
+
+ dev_dbg(&pdev->dev, "%s: Card %s: num_links = %d\n",
+ __func__, mop500_card.name, mop500_card.num_links);
+ dev_dbg(&pdev->dev, "%s: Card %s: DAI-link 0: name = %s\n",
+ __func__, mop500_card.name, mop500_card.dai_link[0].name);
+ dev_dbg(&pdev->dev, "%s: Card %s: DAI-link 0: stream_name = %s\n",
+ __func__, mop500_card.name,
+ mop500_card.dai_link[0].stream_name);
+
+ ret = snd_soc_register_card(&mop500_card);
+ if (ret)
+ dev_err(&pdev->dev,
+ "Error: snd_soc_register_card failed (%d)!\n",
+ ret);
+
+ return ret;
+}
+
+static int __devexit mop500_remove(struct platform_device *pdev)
+{
+ struct snd_soc_card *mop500_card = platform_get_drvdata(pdev);
+
+ pr_debug("%s: Enter.\n", __func__);
+
+ mop500_ab8500_remove(mop500_card);
+
+ snd_soc_unregister_card(mop500_card);
+ platform_set_drvdata(pdev, NULL);
+
+ return 0;
+}
+
+static struct platform_driver snd_soc_mop500_driver = {
+ .driver = {
+ .owner = THIS_MODULE,
+ .name = "snd-soc-mop500",
+ },
+ .probe = mop500_probe,
+ .remove = __devexit_p(mop500_remove),
+};
+
+module_platform_driver(snd_soc_mop500_driver);
diff --git a/sound/soc/ux500/mop500_ab8500.c b/sound/soc/ux500/mop500_ab8500.c
new file mode 100644
index 0000000..32e0e34
--- /dev/null
+++ b/sound/soc/ux500/mop500_ab8500.c
@@ -0,0 +1,441 @@
+/*
+ * Copyright (C) ST-Ericsson SA 2012
+ *
+ * Author: Ola Lilja <ola.o.lilja(a)stericsson.com>,
+ * Kristoffer Karlsson <kristoffer.karlsson(a)stericsson.com>
+ * for ST-Ericsson.
+ *
+ * License terms:
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as published
+ * by the Free Software Foundation.
+ */
+
+#include <linux/module.h>
+#include <linux/device.h>
+#include <linux/io.h>
+#include <linux/clk.h>
+
+#include <mach/hardware.h>
+#include <mach/board-mop500-audio.h>
+
+#include <sound/soc.h>
+#include <sound/soc-dapm.h>
+#include <sound/pcm.h>
+#include <sound/pcm_params.h>
+
+#include "ux500_pcm.h"
+#include "ux500_msp_dai.h"
+#include "../codecs/ab8500-codec.h"
+
+#define TX_SLOT_MONO 0x0008
+#define TX_SLOT_STEREO 0x000a
+#define RX_SLOT_MONO 0x0001
+#define RX_SLOT_STEREO 0x0003
+#define TX_SLOT_8CH 0x00FF
+#define RX_SLOT_8CH 0x00FF
+
+#define DEF_TX_SLOTS TX_SLOT_STEREO
+#define DEF_RX_SLOTS RX_SLOT_MONO
+
+#define DRIVERMODE_NORMAL 0
+#define DRIVERMODE_CODEC_ONLY 1
+
+/* Slot configuration */
+static unsigned int tx_slots = DEF_TX_SLOTS;
+static unsigned int rx_slots = DEF_RX_SLOTS;
+
+/* Clocks */
+static const char * const enum_mclk[] = {
+ "SYSCLK",
+ "ULPCLK"
+};
+enum mclk {
+ MCLK_SYSCLK,
+ MCLK_ULPCLK,
+};
+
+static SOC_ENUM_SINGLE_EXT_DECL(soc_enum_mclk, enum_mclk);
+
+/* Private data for machine-part MOP500<->AB8500 */
+struct mop500_ab8500_drvdata {
+ /* Clocks */
+ enum mclk mclk_sel;
+ struct clk *clk_ptr_intclk;
+ struct clk *clk_ptr_sysclk;
+ struct clk *clk_ptr_ulpclk;
+};
+
+static inline const char *get_mclk_str(enum mclk mclk_sel)
+{
+ switch (mclk_sel) {
+ case MCLK_SYSCLK:
+ return "MCLK_SYSCLK";
+ case MCLK_ULPCLK:
+ return "MCLK_ULPCLK";
+ default:
+ return "Unknown";
+ }
+}
+
+static int mop500_ab8500_set_mclk(struct device *dev,
+ struct mop500_ab8500_drvdata *drvdata)
+{
+ int status;
+ struct clk *clk_ptr;
+
+ if (IS_ERR(drvdata->clk_ptr_intclk)) {
+ dev_err(dev,
+ "%s: ERROR: intclk not initialized!\n", __func__);
+ return -EIO;
+ }
+
+ switch (drvdata->mclk_sel) {
+ case MCLK_SYSCLK:
+ clk_ptr = drvdata->clk_ptr_sysclk;
+ break;
+ case MCLK_ULPCLK:
+ clk_ptr = drvdata->clk_ptr_ulpclk;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ if (IS_ERR(clk_ptr)) {
+ dev_err(dev, "%s: ERROR: %s not initialized!\n", __func__,
+ get_mclk_str(drvdata->mclk_sel));
+ return -EIO;
+ }
+
+ status = clk_set_parent(drvdata->clk_ptr_intclk, clk_ptr);
+ if (status)
+ dev_err(dev,
+ "%s: ERROR: Setting intclk parent to %s failed (ret = %d)!",
+ __func__, get_mclk_str(drvdata->mclk_sel), status);
+ else
+ dev_dbg(dev,
+ "%s: intclk parent changed to %s.\n",
+ __func__, get_mclk_str(drvdata->mclk_sel));
+
+ return status;
+}
+
+/*
+ * Control-events
+ */
+
+static int mclk_input_control_get(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+ struct mop500_ab8500_drvdata *drvdata =
+ snd_soc_card_get_drvdata(codec->card);
+
+ ucontrol->value.enumerated.item[0] = drvdata->mclk_sel;
+
+ return 0;
+}
+
+static int mclk_input_control_put(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+ struct mop500_ab8500_drvdata *drvdata =
+ snd_soc_card_get_drvdata(codec->card);
+ unsigned int val;
+
+ val = (ucontrol->value.enumerated.item[0] != 0);
+ if (drvdata->mclk_sel == val)
+ return 0;
+
+ drvdata->mclk_sel = val;
+
+ return 1;
+}
+
+/*
+ * Controls
+ */
+
+static struct snd_kcontrol_new mop500_ab8500_ctrls[] = {
+ SOC_ENUM_EXT("Master Clock Select",
+ soc_enum_mclk,
+ mclk_input_control_get, mclk_input_control_put),
+ /* Digital interface - Clocks */
+ SOC_SINGLE("Digital Interface Master Generator Switch",
+ AB8500_DIGIFCONF1, AB8500_DIGIFCONF1_ENMASTGEN,
+ 1, 0),
+ SOC_SINGLE("Digital Interface 0 Bit-clock Switch",
+ AB8500_DIGIFCONF1, AB8500_DIGIFCONF1_ENFSBITCLK0,
+ 1, 0),
+ SOC_SINGLE("Digital Interface 1 Bit-clock Switch",
+ AB8500_DIGIFCONF1, AB8500_DIGIFCONF1_ENFSBITCLK1,
+ 1, 0),
+ SOC_DAPM_PIN_SWITCH("Headset Left"),
+ SOC_DAPM_PIN_SWITCH("Headset Right"),
+ SOC_DAPM_PIN_SWITCH("Earpiece"),
+ SOC_DAPM_PIN_SWITCH("Speaker Left"),
+ SOC_DAPM_PIN_SWITCH("Speaker Right"),
+ SOC_DAPM_PIN_SWITCH("LineOut Left"),
+ SOC_DAPM_PIN_SWITCH("LineOut Right"),
+ SOC_DAPM_PIN_SWITCH("Vibra 1"),
+ SOC_DAPM_PIN_SWITCH("Vibra 2"),
+ SOC_DAPM_PIN_SWITCH("Mic 1"),
+ SOC_DAPM_PIN_SWITCH("Mic 2"),
+ SOC_DAPM_PIN_SWITCH("LineIn Left"),
+ SOC_DAPM_PIN_SWITCH("LineIn Right"),
+ SOC_DAPM_PIN_SWITCH("DMic 1"),
+ SOC_DAPM_PIN_SWITCH("DMic 2"),
+ SOC_DAPM_PIN_SWITCH("DMic 3"),
+ SOC_DAPM_PIN_SWITCH("DMic 4"),
+ SOC_DAPM_PIN_SWITCH("DMic 5"),
+ SOC_DAPM_PIN_SWITCH("DMic 6"),
+};
+
+/* ASoC */
+
+int mop500_ab8500_startup(struct snd_pcm_substream *substream)
+{
+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
+
+ /* Set audio-clock source */
+ return mop500_ab8500_set_mclk(rtd->card->dev,
+ snd_soc_card_get_drvdata(rtd->card));
+}
+
+void mop500_ab8500_shutdown(struct snd_pcm_substream *substream)
+{
+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
+ struct device *dev = rtd->card->dev;
+
+ dev_dbg(dev, "%s: Enter\n", __func__);
+
+ /* Reset slots configuration to default(s) */
+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
+ tx_slots = DEF_TX_SLOTS;
+ else
+ rx_slots = DEF_RX_SLOTS;
+}
+
+int mop500_ab8500_hw_params(struct snd_pcm_substream *substream,
+ struct snd_pcm_hw_params *params)
+{
+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
+ struct snd_soc_dai *codec_dai = rtd->codec_dai;
+ struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
+ struct device *dev = rtd->card->dev;
+ unsigned int fmt;
+ int channels, ret = 0, driver_mode, slots;
+ unsigned int sw_codec, sw_cpu;
+ bool is_playback;
+
+ dev_dbg(dev, "%s: Enter\n", __func__);
+
+ dev_dbg(dev, "%s: substream->pcm->name = %s\n"
+ "substream->pcm->id = %s.\n"
+ "substream->name = %s.\n"
+ "substream->number = %d.\n",
+ __func__,
+ substream->pcm->name,
+ substream->pcm->id,
+ substream->name,
+ substream->number);
+
+ channels = params_channels(params);
+
+ switch (params_format(params)) {
+ case SNDRV_PCM_FORMAT_S32_LE:
+ sw_cpu = 32;
+ break;
+
+ case SNDRV_PCM_FORMAT_S16_LE:
+ sw_cpu = 16;
+ break;
+
+ default:
+ return -EINVAL;
+ }
+
+ /* Setup codec depending on driver-mode */
+ driver_mode = (channels == 8) ?
+ DRIVERMODE_CODEC_ONLY : DRIVERMODE_NORMAL;
+ dev_dbg(dev, "%s: Driver-mode: %s.\n", __func__,
+ (driver_mode == DRIVERMODE_NORMAL) ? "NORMAL" : "CODEC_ONLY");
+
+ /* Setup format */
+
+ if (driver_mode == DRIVERMODE_NORMAL) {
+ fmt = SND_SOC_DAIFMT_DSP_A |
+ SND_SOC_DAIFMT_CBM_CFM |
+ SND_SOC_DAIFMT_NB_NF |
+ SND_SOC_DAIFMT_CONT;
+ } else {
+ fmt = SND_SOC_DAIFMT_DSP_A |
+ SND_SOC_DAIFMT_CBM_CFM |
+ SND_SOC_DAIFMT_NB_NF |
+ SND_SOC_DAIFMT_GATED;
+ }
+
+ ret = snd_soc_dai_set_fmt(codec_dai, fmt);
+ if (ret < 0) {
+ dev_err(dev,
+ "%s: ERROR: snd_soc_dai_set_fmt failed for codec_dai (ret = %d)!\n",
+ __func__, ret);
+ return ret;
+ }
+
+ ret = snd_soc_dai_set_fmt(cpu_dai, fmt);
+ if (ret < 0) {
+ dev_err(dev,
+ "%s: ERROR: snd_soc_dai_set_fmt failed for cpu_dai (ret = %d)!\n",
+ __func__, ret);
+ return ret;
+ }
+
+ /* Setup TDM-slots */
+
+ is_playback = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK);
+ switch (channels) {
+ case 1:
+ slots = 16;
+ tx_slots = (is_playback) ? TX_SLOT_MONO : 0;
+ rx_slots = (is_playback) ? 0 : RX_SLOT_MONO;
+ break;
+ case 2:
+ slots = 16;
+ tx_slots = (is_playback) ? TX_SLOT_STEREO : 0;
+ rx_slots = (is_playback) ? 0 : RX_SLOT_STEREO;
+ break;
+ case 8:
+ slots = 16;
+ tx_slots = (is_playback) ? TX_SLOT_8CH : 0;
+ rx_slots = (is_playback) ? 0 : RX_SLOT_8CH;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ sw_codec = (driver_mode == DRIVERMODE_NORMAL) ? sw_cpu : 20;
+
+ dev_dbg(dev, "%s: CPU-DAI TDM: TX=0x%04X RX=0x%04x\n", __func__,
+ tx_slots, rx_slots);
+ ret = snd_soc_dai_set_tdm_slot(cpu_dai, tx_slots, rx_slots, slots,
+ sw_cpu);
+ if (ret)
+ return ret;
+
+ dev_dbg(dev, "%s: CODEC-DAI TDM: TX=0x%04X RX=0x%04x\n", __func__,
+ tx_slots, rx_slots);
+ ret = snd_soc_dai_set_tdm_slot(codec_dai, tx_slots, rx_slots, slots,
+ sw_codec);
+ if (ret)
+ return ret;
+
+ return 0;
+}
+
+struct snd_soc_ops mop500_ab8500_ops[] = {
+ {
+ .hw_params = mop500_ab8500_hw_params,
+ .startup = mop500_ab8500_startup,
+ .shutdown = mop500_ab8500_shutdown,
+ }
+};
+
+int mop500_ab8500_machine_init(struct snd_soc_pcm_runtime *rtd)
+{
+ struct snd_soc_codec *codec = rtd->codec;
+ struct device *dev = rtd->card->dev;
+ struct mop500_audio_platform_data *pdata;
+ struct mop500_ab8500_drvdata *drvdata;
+ int ret;
+
+ dev_dbg(dev, "%s Enter.\n", __func__);
+
+ /* Create driver private-data struct */
+ drvdata = devm_kzalloc(dev, sizeof(struct mop500_ab8500_drvdata),
+ GFP_KERNEL);
+ snd_soc_card_set_drvdata(rtd->card, drvdata);
+
+ /* Setup clocks */
+
+ drvdata->clk_ptr_sysclk = clk_get(dev, "sysclk");
+ if (IS_ERR(drvdata->clk_ptr_sysclk))
+ dev_warn(dev, "%s: WARNING: clk_get failed for 'sysclk'!\n",
+ __func__);
+ drvdata->clk_ptr_ulpclk = clk_get(dev, "ulpclk");
+ if (IS_ERR(drvdata->clk_ptr_ulpclk))
+ dev_warn(dev, "%s: WARNING: clk_get failed for 'ulpclk'!\n",
+ __func__);
+ drvdata->clk_ptr_intclk = clk_get(dev, "intclk");
+ if (IS_ERR(drvdata->clk_ptr_intclk))
+ dev_warn(dev, "%s: WARNING: clk_get failed for 'intclk'!\n",
+ __func__);
+
+ /* Set intclk default parent to ulpclk */
+ drvdata->mclk_sel = MCLK_ULPCLK;
+ ret = mop500_ab8500_set_mclk(dev, drvdata);
+ if (ret < 0)
+ dev_warn(dev, "%s: WARNING: mop500_ab8500_set_mclk!\n",
+ __func__);
+
+ drvdata->mclk_sel = MCLK_ULPCLK;
+
+ /* Add controls */
+ ret = snd_soc_add_codec_controls(codec, mop500_ab8500_ctrls,
+ ARRAY_SIZE(mop500_ab8500_ctrls));
+ if (ret < 0) {
+ pr_err("%s: Failed to add machine-controls (%d)!\n",
+ __func__, ret);
+ return ret;
+ }
+
+ /* Setup AB8500 according to board-settings */
+ pdata = (struct mop500_audio_platform_data *)dev_get_platdata(dev);
+ ret = ab8500_audio_setup_mics(codec, &pdata->amics);
+ if (ret < 0) {
+ pr_err("%s: Failed to setup mics (%d)!\n", __func__, ret);
+ return ret;
+ }
+ ret = ab8500_audio_set_ear_cmv(codec, pdata->ear_cmv);
+ if (ret < 0) {
+ pr_err("%s: Failed to set earpiece CM-voltage (%d)!\n",
+ __func__, ret);
+ return ret;
+ }
+
+ ret = snd_soc_dapm_disable_pin(&codec->dapm, "Earpiece");
+ ret |= snd_soc_dapm_disable_pin(&codec->dapm, "Speaker Left");
+ ret |= snd_soc_dapm_disable_pin(&codec->dapm, "Speaker Right");
+ ret |= snd_soc_dapm_disable_pin(&codec->dapm, "LineOut Left");
+ ret |= snd_soc_dapm_disable_pin(&codec->dapm, "LineOut Right");
+ ret |= snd_soc_dapm_disable_pin(&codec->dapm, "Vibra 1");
+ ret |= snd_soc_dapm_disable_pin(&codec->dapm, "Vibra 2");
+ ret |= snd_soc_dapm_disable_pin(&codec->dapm, "Mic 1");
+ ret |= snd_soc_dapm_disable_pin(&codec->dapm, "Mic 2");
+ ret |= snd_soc_dapm_disable_pin(&codec->dapm, "LineIn Left");
+ ret |= snd_soc_dapm_disable_pin(&codec->dapm, "LineIn Right");
+ ret |= snd_soc_dapm_disable_pin(&codec->dapm, "DMic 1");
+ ret |= snd_soc_dapm_disable_pin(&codec->dapm, "DMic 2");
+ ret |= snd_soc_dapm_disable_pin(&codec->dapm, "DMic 3");
+ ret |= snd_soc_dapm_disable_pin(&codec->dapm, "DMic 4");
+ ret |= snd_soc_dapm_disable_pin(&codec->dapm, "DMic 5");
+ ret |= snd_soc_dapm_disable_pin(&codec->dapm, "DMic 6");
+
+ return ret;
+}
+
+void mop500_ab8500_remove(struct snd_soc_card *card)
+{
+ struct mop500_ab8500_drvdata *drvdata = snd_soc_card_get_drvdata(card);
+
+ if (drvdata->clk_ptr_sysclk != NULL)
+ clk_put(drvdata->clk_ptr_sysclk);
+ if (drvdata->clk_ptr_ulpclk != NULL)
+ clk_put(drvdata->clk_ptr_ulpclk);
+ if (drvdata->clk_ptr_intclk != NULL)
+ clk_put(drvdata->clk_ptr_intclk);
+
+ snd_soc_card_set_drvdata(card, drvdata);
+}
diff --git a/sound/soc/ux500/mop500_ab8500.h b/sound/soc/ux500/mop500_ab8500.h
new file mode 100644
index 0000000..cca5b33
--- /dev/null
+++ b/sound/soc/ux500/mop500_ab8500.h
@@ -0,0 +1,22 @@
+/*
+ * Copyright (C) ST-Ericsson SA 2012
+ *
+ * Author: Ola Lilja <ola.o.lilja(a)stericsson.com>
+ * for ST-Ericsson.
+ *
+ * License terms:
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as published
+ * by the Free Software Foundation.
+ */
+
+#ifndef MOP500_AB8500_H
+#define MOP500_AB8500_H
+
+extern struct snd_soc_ops mop500_ab8500_ops[];
+
+int mop500_ab8500_machine_init(struct snd_soc_pcm_runtime *runtime);
+void mop500_ab8500_remove(struct snd_soc_card *card);
+
+#endif
--
1.7.8.3
1
0

24 May '12
Adds a function getting the stream-name as a string for
a specific stream.
Signed-off-by: Ola Lilja <ola.o.lilja(a)stericsson.com>
---
include/sound/pcm.h | 11 +++++++++++
1 files changed, 11 insertions(+), 0 deletions(-)
diff --git a/include/sound/pcm.h b/include/sound/pcm.h
index 0d11128..a55d5db 100644
--- a/include/sound/pcm.h
+++ b/include/sound/pcm.h
@@ -1073,4 +1073,15 @@ static inline void snd_pcm_limit_isa_dma_size(int dma, size_t *max)
const char *snd_pcm_format_name(snd_pcm_format_t format);
+/**
+ * Get a string naming the direction of a stream
+ */
+static inline const char *snd_pcm_stream_str(struct snd_pcm_substream *substream)
+{
+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
+ return "Playback";
+ else
+ return "Capture";
+}
+
#endif /* __SOUND_PCM_H */
--
1.7.8.3
1
0
*) ALSA-core helper function made static inline
*) Removed debug-functions from the core-patch
*) Bug-fixes in codec-file
*) Controversial controls (clock-stuff) moved to machine-file
*) Removed custom functions for second codec-interface
*) Streams moved to separete DAPM-widgets
Ola Lilja (5):
ALSA: pcm: Add debug-print helper function
ASoC: core: Add widget SND_SOC_DAPM_CLOCK_SUPPLY
ASoC: Ux500: Add platform-driver
ASoC: codecs: Add AB8500 codec-driver
ASoC: Ux500: Add machine-driver
include/sound/pcm.h | 11 +
include/sound/soc-dapm.h | 10 +
sound/soc/codecs/Kconfig | 4 +
sound/soc/codecs/Makefile | 2 +
sound/soc/codecs/ab8500-codec.c | 2569 +++++++++++++++++++++++++++++++++++++++
sound/soc/codecs/ab8500-codec.h | 606 +++++++++
sound/soc/soc-dapm.c | 38 +
sound/soc/ux500/Kconfig | 18 +
sound/soc/ux500/Makefile | 6 +
sound/soc/ux500/mop500.c | 117 ++
sound/soc/ux500/mop500_ab8500.c | 441 +++++++
sound/soc/ux500/mop500_ab8500.h | 22 +
sound/soc/ux500/ux500_pcm.c | 318 +++++
sound/soc/ux500/ux500_pcm.h | 35 +
14 files changed, 4197 insertions(+), 0 deletions(-)
create mode 100644 sound/soc/codecs/ab8500-codec.c
create mode 100644 sound/soc/codecs/ab8500-codec.h
create mode 100644 sound/soc/ux500/mop500.c
create mode 100644 sound/soc/ux500/mop500_ab8500.c
create mode 100644 sound/soc/ux500/mop500_ab8500.h
create mode 100644 sound/soc/ux500/ux500_pcm.c
create mode 100644 sound/soc/ux500/ux500_pcm.h
--
1.7.8.3
1
0
Add codec-driver for ST-Ericsson AB8500 mixed-signal ASIC.
Signed-off-by: Ola Lilja <ola.o.lilja(a)stericsson.com>
---
sound/soc/codecs/Kconfig | 4 +
sound/soc/codecs/Makefile | 3 +
sound/soc/codecs/ab8500-codec.c | 2852 +++++++++++++++++++++++++++++++++++++++
sound/soc/codecs/ab8500-codec.h | 608 +++++++++
4 files changed, 3467 insertions(+), 0 deletions(-)
create mode 100644 sound/soc/codecs/ab8500-codec.c
create mode 100644 sound/soc/codecs/ab8500-codec.h
diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig
index 6508e8b..c7e0e8f 100644
--- a/sound/soc/codecs/Kconfig
+++ b/sound/soc/codecs/Kconfig
@@ -12,6 +12,7 @@ config SND_SOC_ALL_CODECS
tristate "Build all ASoC CODEC drivers"
select SND_SOC_88PM860X if MFD_88PM860X
select SND_SOC_L3
+ select SND_SOC_AB8500_CODEC if ABX500_CORE
select SND_SOC_AC97_CODEC if SND_SOC_AC97_BUS
select SND_SOC_AD1836 if SPI_MASTER
select SND_SOC_AD193X if SND_SOC_I2C_AND_SPI
@@ -126,6 +127,9 @@ config SND_SOC_WM_HUBS
default y if SND_SOC_WM8993=y || SND_SOC_WM8994=y
default m if SND_SOC_WM8993=m || SND_SOC_WM8994=m
+config SND_SOC_AB8500_CODEC
+ tristate
+
config SND_SOC_AC97_CODEC
tristate
select SND_AC97_CODEC
diff --git a/sound/soc/codecs/Makefile b/sound/soc/codecs/Makefile
index 6662eb0..d7b96a6 100644
--- a/sound/soc/codecs/Makefile
+++ b/sound/soc/codecs/Makefile
@@ -1,4 +1,5 @@
snd-soc-88pm860x-objs := 88pm860x-codec.o
+snd-soc-ab8500-codec-objs := ab8500-codec.o
snd-soc-ac97-objs := ac97.o
snd-soc-ad1836-objs := ad1836.o
snd-soc-ad193x-objs := ad193x.o
@@ -103,6 +104,7 @@ snd-soc-max9877-objs := max9877.o
snd-soc-tpa6130a2-objs := tpa6130a2.o
obj-$(CONFIG_SND_SOC_88PM860X) += snd-soc-88pm860x.o
+obj-$(CONFIG_SND_SOC_AB8500_CODEC) += snd-soc-ab8500-codec.o
obj-$(CONFIG_SND_SOC_AC97_CODEC) += snd-soc-ac97.o
obj-$(CONFIG_SND_SOC_AD1836) += snd-soc-ad1836.o
obj-$(CONFIG_SND_SOC_AD193X) += snd-soc-ad193x.o
@@ -205,3 +207,4 @@ obj-$(CONFIG_SND_SOC_WM_HUBS) += snd-soc-wm-hubs.o
# Amp
obj-$(CONFIG_SND_SOC_MAX9877) += snd-soc-max9877.o
obj-$(CONFIG_SND_SOC_TPA6130A2) += snd-soc-tpa6130a2.o
+
diff --git a/sound/soc/codecs/ab8500-codec.c b/sound/soc/codecs/ab8500-codec.c
new file mode 100644
index 0000000..f44a481
--- /dev/null
+++ b/sound/soc/codecs/ab8500-codec.c
@@ -0,0 +1,2852 @@
+/*
+ * Copyright (C) ST-Ericsson SA 2012
+ *
+ * Author: Ola Lilja <ola.o.lilja(a)stericsson.com>,
+ * Kristoffer Karlsson <kristoffer.karlsson(a)stericsson.com>,
+ * Roger Nilsson <roger.xr.nilsson(a)stericsson.com>,
+ * for ST-Ericsson.
+ *
+ * Based on the early work done by:
+ * Mikko J. Lehto <mikko.lehto(a)symbio.com>,
+ * Mikko Sarmanne <mikko.sarmanne(a)symbio.com>,
+ * Jarmo K. Kuronen <jarmo.kuronen(a)symbio.com>,
+ * for ST-Ericsson.
+ *
+ * License terms:
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published
+ * by the Free Software Foundation.
+ */
+
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/slab.h>
+#include <linux/moduleparam.h>
+#include <linux/init.h>
+#include <linux/delay.h>
+#include <linux/pm.h>
+#include <linux/platform_device.h>
+#include <linux/mutex.h>
+#include <linux/mfd/abx500/ab8500.h>
+#include <linux/mfd/abx500.h>
+#include <linux/mfd/abx500/ab8500-sysctrl.h>
+#include <linux/clk.h>
+#include <linux/regulator/consumer.h>
+
+#include <mach/board-mop500-audio.h>
+
+#include <sound/core.h>
+#include <sound/pcm.h>
+#include <sound/pcm_params.h>
+#include <sound/initval.h>
+#include <sound/soc.h>
+#include <sound/soc-dapm.h>
+#include <sound/tlv.h>
+
+#include "ab8500-codec.h"
+
+/* Macrocell value definitions */
+#define CLK_32K_OUT2_DISABLE 0x01
+#define INACTIVE_RESET_AUDIO 0x02
+#define ENABLE_AUDIO_CLK_TO_AUDIO_BLK 0x10
+#define ENABLE_VINTCORE12_SUPPLY 0x04
+#define GPIO27_DIR_OUTPUT 0x04
+#define GPIO29_DIR_OUTPUT 0x10
+#define GPIO31_DIR_OUTPUT 0x40
+
+/* Macrocell register definitions */
+#define AB8500_CTRL3_REG 0x0200
+#define AB8500_GPIO_DIR4_REG 0x1013
+
+/* Nr of FIR/IIR-coeff banks in ANC-block */
+#define AB8500_NR_OF_ANC_COEFF_BANKS 2
+
+/* Minimum duration to keep ANC IIR Init bit high or
+low before proceeding with the configuration sequence */
+#define AB8500_ANC_SM_DELAY 2000
+
+#define AB8500_FILTER_CONTROL(xname, xcount, xmin, xmax) \
+{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \
+ .info = filter_control_info, \
+ .get = filter_control_get, .put = filter_control_put, \
+ .private_value = (unsigned long)&(struct filter_control) \
+ {.count = xcount, .min = xmin, .max = xmax} }
+
+struct filter_control {
+ long min, max;
+ unsigned int count;
+ long value[128];
+};
+
+/* Sidetone states */
+static const char * const enum_sid_state[] = {
+ "Unconfigured",
+ "Apply FIR",
+ "FIR is configured",
+};
+enum sid_state {
+ SID_UNCONFIGURED = 0,
+ SID_APPLY_FIR = 1,
+ SID_FIR_CONFIGURED = 2,
+};
+
+static const char * const enum_anc_state[] = {
+ "Unconfigured",
+ "Apply FIR and IIR",
+ "FIR and IIR are configured",
+ "Apply FIR",
+ "FIR is configured",
+ "Apply IIR",
+ "IIR is configured"
+};
+enum anc_state {
+ ANC_UNCONFIGURED = 0,
+ ANC_APPLY_FIR_IIR = 1,
+ ANC_FIR_IIR_CONFIGURED = 2,
+ ANC_APPLY_FIR = 3,
+ ANC_FIR_CONFIGURED = 4,
+ ANC_APPLY_IIR = 5,
+ ANC_IIR_CONFIGURED = 6
+};
+
+/* Analog microphones */
+enum amic_idx {
+ AMIC_IDX_1A,
+ AMIC_IDX_1B,
+ AMIC_IDX_2
+};
+
+/* Clocks */
+static const char * const enum_mclk[] = {
+ "SYSCLK",
+ "ULPCLK"
+};
+enum mclk {
+ MCLK_SYSCLK,
+ MCLK_ULPCLK,
+};
+
+/* Private data for AB8500 device-driver */
+struct ab8500_codec_drvdata {
+ /* Clocks */
+ enum mclk mclk_sel;
+ struct clk *clk_ptr_intclk;
+ struct clk *clk_ptr_sysclk;
+ struct clk *clk_ptr_ulpclk;
+
+ /* Sidetone */
+ long *sid_fir_values;
+ enum sid_state sid_status;
+
+ /* ANC */
+ long *anc_fir_values;
+ long *anc_iir_values;
+ enum anc_state anc_status;
+};
+
+static inline const char *amic_micbias_str(enum amic_micbias micbias)
+{
+ switch (micbias) {
+ case AMIC_MICBIAS_VAMIC1:
+ return "VAMIC1";
+ case AMIC_MICBIAS_VAMIC2:
+ return "VAMIC2";
+ default:
+ return "Unknown";
+ }
+}
+
+static inline const char *amic_type_str(enum amic_type type)
+{
+ switch (type) {
+ case AMIC_TYPE_DIFFERENTIAL:
+ return "DIFFERENTIAL";
+ case AMIC_TYPE_SINGLE_ENDED:
+ return "SINGLE ENDED";
+ default:
+ return "Unknown";
+ }
+}
+
+/*
+ * Read'n'write functions
+ */
+
+/* Read a register from the audio-bank of AB8500 */
+static unsigned int ab8500_codec_read_reg(struct snd_soc_codec *codec,
+ unsigned int reg)
+{
+ int status;
+ unsigned int value = 0;
+
+ u8 value8;
+ status = abx500_get_register_interruptible(codec->dev, AB8500_AUDIO,
+ reg, &value8);
+ if (status < 0) {
+ dev_err(codec->dev,
+ "%s: ERROR: Register (0x%02x:0x%02x) read failed (%d).\n",
+ __func__, (u8)AB8500_AUDIO, (u8)reg, status);
+ } else {
+ dev_dbg(codec->dev,
+ "%s: Read 0x%02x from register 0x%02x:0x%02x\n",
+ __func__, value8, (u8)AB8500_AUDIO, (u8)reg);
+ value = (unsigned int)value8;
+ }
+
+ return value;
+}
+
+/* Write to a register in the audio-bank of AB8500 */
+static int ab8500_codec_write_reg(struct snd_soc_codec *codec,
+ unsigned int reg, unsigned int value)
+{
+ int status;
+
+ status = abx500_set_register_interruptible(codec->dev, AB8500_AUDIO,
+ reg, value);
+ if (status < 0)
+ dev_err(codec->dev,
+ "%s: ERROR: Register (%02x:%02x) write failed (%d).\n",
+ __func__, (u8)AB8500_AUDIO, (u8)reg, status);
+ else
+ dev_dbg(codec->dev,
+ "%s: Wrote 0x%02x into register %02x:%02x\n",
+ __func__, (u8)value, (u8)AB8500_AUDIO, (u8)reg);
+
+ return status;
+}
+
+/*
+ * Regulator functions
+ */
+
+static void show_regulator_status(struct snd_soc_dapm_context *dapm)
+{
+ struct device *dev = dapm->dev;
+
+ dev_dbg(dev, "%s: Regulator-status:\n", __func__);
+ dev_dbg(dev, "%s: V-AUD: %s\n", __func__,
+ (snd_soc_dapm_get_regulator_status(dapm, "V-AUD") > 0) ?
+ "On" : "Off");
+ dev_dbg(dev, "%s: V-AMIC1: %s\n", __func__,
+ (snd_soc_dapm_get_regulator_status(dapm, "V-AMIC1") > 0) ?
+ "On" : "Off");
+ dev_dbg(dev, "%s: V-AMIC2: %s\n", __func__,
+ (snd_soc_dapm_get_regulator_status(dapm, "V-AMIC2") > 0) ?
+ "On" : "Off");
+ dev_dbg(dev, "%s: V-DMIC: %s\n", __func__,
+ (snd_soc_dapm_get_regulator_status(dapm, "V-DMIC") > 0) ?
+ "On" : "Off");
+}
+
+/*
+ * Clock functions
+ */
+
+static void show_clock_status(struct snd_soc_dapm_context *dapm)
+{
+ struct device *dev = dapm->dev;
+
+ dev_dbg(dev, "%s: Clock-status:\n", __func__);
+ dev_dbg(dev, "%s: audioclk: %s\n", __func__,
+ (snd_soc_dapm_get_power_status(dapm, "audioclk") > 0) ?
+ "On" : "Off");
+ dev_dbg(dev, "%s: gpio.1: %s\n", __func__,
+ (snd_soc_dapm_get_power_status(dapm, "gpio.1") > 0) ?
+ "On" : "Off");
+}
+
+/*
+ * DAPM-events
+ */
+
+static int dapm_mainsupply_event(struct snd_soc_dapm_widget *w,
+ struct snd_kcontrol *k, int event)
+{
+ show_regulator_status(w->dapm);
+ show_clock_status(w->dapm);
+
+ return 0;
+}
+
+/*
+ * Controls - DAPM
+ */
+
+/* Earpiece */
+
+/* Earpiece source selector */
+static const char * const enum_ear_lineout_source[] = {"Headset Left",
+ "Speaker Left"};
+static SOC_ENUM_SINGLE_DECL(dapm_enum_ear_lineout_source, AB8500_DMICFILTCONF,
+ AB8500_DMICFILTCONF_DA3TOEAR, enum_ear_lineout_source);
+static const struct snd_kcontrol_new dapm_ear_lineout_source =
+ SOC_DAPM_ENUM("Earpiece or LineOut Mono Source",
+ dapm_enum_ear_lineout_source);
+
+/* LineOut */
+
+/* LineOut source selector */
+static const char * const enum_lineout_source[] = {"Mono Path", "Stereo Path"};
+static SOC_ENUM_DOUBLE_DECL(dapm_enum_lineout_source, AB8500_ANACONF5,
+ AB8500_ANACONF5_HSLDACTOLOL,
+ AB8500_ANACONF5_HSRDACTOLOR, enum_lineout_source);
+static const struct snd_kcontrol_new dapm_lineout_source[] = {
+ SOC_DAPM_ENUM("LineOut Source", dapm_enum_lineout_source),
+};
+
+/* Handsfree */
+
+/* Speaker Left - ANC selector */
+static const char * const enum_HFx_sel[] = {"Audio Path", "ANC"};
+static SOC_ENUM_SINGLE_DECL(dapm_enum_HFl_sel, AB8500_DIGMULTCONF2,
+ AB8500_DIGMULTCONF2_HFLSEL, enum_HFx_sel);
+static const struct snd_kcontrol_new dapm_HFl_select[] = {
+ SOC_DAPM_ENUM("Speaker Left Source", dapm_enum_HFl_sel),
+};
+
+/* Speaker Right - ANC selector */
+static SOC_ENUM_SINGLE_DECL(dapm_enum_HFr_sel, AB8500_DIGMULTCONF2,
+ AB8500_DIGMULTCONF2_HFRSEL, enum_HFx_sel);
+static const struct snd_kcontrol_new dapm_HFr_select[] = {
+ SOC_DAPM_ENUM("Speaker Right Source", dapm_enum_HFr_sel),
+};
+
+/* Mic 1 */
+
+/* Mic 1 - Mic 1a or 1b selector */
+static const char * const enum_mic1ab_sel[] = {"Mic 1b", "Mic 1a"};
+static SOC_ENUM_SINGLE_DECL(dapm_enum_mic1ab_sel, AB8500_ANACONF3,
+ AB8500_ANACONF3_MIC1SEL, enum_mic1ab_sel);
+static const struct snd_kcontrol_new dapm_mic1ab_mux[] = {
+ SOC_DAPM_ENUM("Mic 1a or 1b Select", dapm_enum_mic1ab_sel),
+};
+
+/* Mic 1 - AD3 - Mic 1 or DMic 3 selector */
+static const char * const enum_ad3_sel[] = {"Mic 1", "DMic 3"};
+static SOC_ENUM_SINGLE_DECL(dapm_enum_ad3_sel, AB8500_DIGMULTCONF1,
+ AB8500_DIGMULTCONF1_AD3SEL, enum_ad3_sel);
+static const struct snd_kcontrol_new dapm_ad3_select[] = {
+ SOC_DAPM_ENUM("AD3 Source Select", dapm_enum_ad3_sel),
+};
+
+/* Mic 1 - AD6 - Mic 1 or DMic 6 selector */
+static const char * const enum_ad6_sel[] = {"Mic 1", "DMic 6"};
+static SOC_ENUM_SINGLE_DECL(dapm_enum_ad6_sel, AB8500_DIGMULTCONF1,
+ AB8500_DIGMULTCONF1_AD6SEL, enum_ad6_sel);
+static const struct snd_kcontrol_new dapm_ad6_select[] = {
+ SOC_DAPM_ENUM("AD6 Source Select", dapm_enum_ad6_sel),
+};
+
+/* Mic 2 */
+
+/* Mic 2 - AD5 - Mic 2 or DMic 5 selector */
+static const char * const enum_ad5_sel[] = {"Mic 2", "DMic 5"};
+static SOC_ENUM_SINGLE_DECL(dapm_enum_ad5_sel, AB8500_DIGMULTCONF1,
+ AB8500_DIGMULTCONF1_AD5SEL, enum_ad5_sel);
+static const struct snd_kcontrol_new dapm_ad5_select[] = {
+ SOC_DAPM_ENUM("AD5 Source Select", dapm_enum_ad5_sel),
+};
+
+/* LineIn */
+
+/* LineIn left - AD1 - LineIn Left or DMic 1 selector */
+static const char * const enum_ad1_sel[] = {"LineIn Left", "DMic 1"};
+static SOC_ENUM_SINGLE_DECL(dapm_enum_ad1_sel, AB8500_DIGMULTCONF1,
+ AB8500_DIGMULTCONF1_AD1SEL, enum_ad1_sel);
+static const struct snd_kcontrol_new dapm_ad1_select[] = {
+ SOC_DAPM_ENUM("AD1 Source Select", dapm_enum_ad1_sel),
+};
+
+/* LineIn right - Mic 2 or LineIn Right selector */
+static const char * const enum_mic2lr_sel[] = {"Mic 2", "LineIn Right"};
+static SOC_ENUM_SINGLE_DECL(dapm_enum_mic2lr_sel, AB8500_ANACONF3,
+ AB8500_ANACONF3_LINRSEL, enum_mic2lr_sel);
+static const struct snd_kcontrol_new dapm_mic2lr_select[] = {
+ SOC_DAPM_ENUM("Mic 2 or LINR Select", dapm_enum_mic2lr_sel),
+};
+
+/* LineIn right - AD2 - LineIn Right or DMic2 selector */
+static const char * const enum_ad2_sel[] = {"LineIn Right", "DMic 2"};
+static SOC_ENUM_SINGLE_DECL(dapm_enum_ad2_sel, AB8500_DIGMULTCONF1,
+ AB8500_DIGMULTCONF1_AD2SEL, enum_ad2_sel);
+static const struct snd_kcontrol_new dapm_ad2_select[] = {
+ SOC_DAPM_ENUM("AD2 Source Select", dapm_enum_ad2_sel),
+};
+
+
+/* ANC */
+
+static const char * const enum_anc_in_sel[] = {"Mic 1 / DMic 6",
+ "Mic 2 / DMic 5"};
+static SOC_ENUM_SINGLE_DECL(dapm_enum_anc_in_sel, AB8500_DMICFILTCONF,
+ AB8500_DMICFILTCONF_ANCINSEL, enum_anc_in_sel);
+static const struct snd_kcontrol_new dapm_anc_in_select[] = {
+ SOC_DAPM_ENUM("ANC Source", dapm_enum_anc_in_sel),
+};
+
+/* ANC - Enable/Disable */
+static const struct snd_kcontrol_new dapm_anc_enable[] = {
+ SOC_DAPM_SINGLE("Switch", AB8500_ANCCONF1,
+ AB8500_ANCCONF1_ENANC, 0, 0),
+};
+
+/* ANC to Earpiece - Mute */
+static const struct snd_kcontrol_new dapm_anc_ear_mute[] = {
+ SOC_DAPM_SINGLE("Switch", AB8500_DIGMULTCONF1,
+ AB8500_DIGMULTCONF1_ANCSEL, 1, 0),
+};
+
+/* Sidetone left */
+
+/* Sidetone left - Input selector */
+static const char * const enum_stfir1_in_sel[] = {
+ "LineIn Left", "LineIn Right", "Mic 1", "Headset Left"
+};
+static SOC_ENUM_SINGLE_DECL(dapm_enum_stfir1_in_sel, AB8500_DIGMULTCONF2,
+ AB8500_DIGMULTCONF2_FIRSID1SEL, enum_stfir1_in_sel);
+static const struct snd_kcontrol_new dapm_stfir1_in_select[] = {
+ SOC_DAPM_ENUM("Sidetone Left Source", dapm_enum_stfir1_in_sel),
+};
+
+/* Sidetone right path */
+
+/* Sidetone right - Input selector */
+static const char * const enum_stfir2_in_sel[] = {
+ "LineIn Right", "Mic 1", "DMic 4", "Headset Right"
+};
+static SOC_ENUM_SINGLE_DECL(dapm_enum_stfir2_in_sel, AB8500_DIGMULTCONF2,
+ AB8500_DIGMULTCONF2_FIRSID2SEL, enum_stfir2_in_sel);
+static const struct snd_kcontrol_new dapm_stfir2_in_select[] = {
+ SOC_DAPM_ENUM("Sidetone Right Source", dapm_enum_stfir2_in_sel),
+};
+
+/* Vibra */
+
+static const char * const enum_pwm2vibx[] = {"Audio Path", "PWM Generator"};
+
+static SOC_ENUM_SINGLE_DECL(dapm_enum_pwm2vib1, AB8500_PWMGENCONF1,
+ AB8500_PWMGENCONF1_PWMTOVIB1, enum_pwm2vibx);
+
+static const struct snd_kcontrol_new dapm_pwm2vib1[] = {
+ SOC_DAPM_ENUM("Vibra 1 Controller", dapm_enum_pwm2vib1),
+};
+
+static SOC_ENUM_SINGLE_DECL(dapm_enum_pwm2vib2, AB8500_PWMGENCONF1,
+ AB8500_PWMGENCONF1_PWMTOVIB2, enum_pwm2vibx);
+
+static const struct snd_kcontrol_new dapm_pwm2vib2[] = {
+ SOC_DAPM_ENUM("Vibra 2 Controller", dapm_enum_pwm2vib2),
+};
+
+/*
+ * DAPM-widgets
+ */
+
+static const struct snd_soc_dapm_widget ab8500_dapm_widgets[] = {
+
+ /* Clocks */
+ SND_SOC_DAPM_CLOCK_SUPPLY("audioclk", 0),
+ SND_SOC_DAPM_CLOCK_SUPPLY("gpio.1", 1),
+
+ /* Regulators */
+ SND_SOC_DAPM_REGULATOR_SUPPLY("V-AUD", 0),
+ SND_SOC_DAPM_REGULATOR_SUPPLY("V-AMIC1", 0),
+ SND_SOC_DAPM_REGULATOR_SUPPLY("V-AMIC2", 0),
+ SND_SOC_DAPM_REGULATOR_SUPPLY("V-DMIC", 0),
+
+ /* Power */
+ SND_SOC_DAPM_SUPPLY("Audio Power",
+ AB8500_POWERUP, AB8500_POWERUP_POWERUP, 0,
+ NULL, PRE_PMU_POST_PMD),
+ SND_SOC_DAPM_SUPPLY("Audio Analog Power",
+ AB8500_POWERUP, AB8500_POWERUP_ENANA, 0,
+ NULL, PRE_PMU_POST_PMD),
+
+ /* Main supply node */
+ SND_SOC_DAPM_SUPPLY("Main Supply", SND_SOC_NOPM, 0, 0,
+ dapm_mainsupply_event, PRE_PMU_POST_PMD),
+
+ /* DA/AD */
+
+ SND_SOC_DAPM_INPUT("ADC Input"),
+ SND_SOC_DAPM_ADC("ADC", "ab8500_0c", SND_SOC_NOPM, 0, 0),
+
+ SND_SOC_DAPM_DAC("DAC", "ab8500_0p", SND_SOC_NOPM, 0, 0),
+ SND_SOC_DAPM_OUTPUT("DAC Output"),
+
+ SND_SOC_DAPM_AIF_IN("DA_IN1", "ab8500_0p", 0, SND_SOC_NOPM, 0, 0),
+ SND_SOC_DAPM_AIF_IN("DA_IN2", "ab8500_0p", 0, SND_SOC_NOPM, 0, 0),
+ SND_SOC_DAPM_AIF_IN("DA_IN3", "ab8500_0p", 0, SND_SOC_NOPM, 0, 0),
+ SND_SOC_DAPM_AIF_IN("DA_IN4", "ab8500_0p", 0, SND_SOC_NOPM, 0, 0),
+ SND_SOC_DAPM_AIF_IN("DA_IN5", "ab8500_0p", 0, SND_SOC_NOPM, 0, 0),
+ SND_SOC_DAPM_AIF_IN("DA_IN6", "ab8500_0p", 0, SND_SOC_NOPM, 0, 0),
+ SND_SOC_DAPM_AIF_OUT("AD_OUT1", "ab8500_0c", 0, SND_SOC_NOPM, 0, 0),
+ SND_SOC_DAPM_AIF_OUT("AD_OUT2", "ab8500_0c", 0, SND_SOC_NOPM, 0, 0),
+ SND_SOC_DAPM_AIF_OUT("AD_OUT3", "ab8500_0c", 0, SND_SOC_NOPM, 0, 0),
+ SND_SOC_DAPM_AIF_OUT("AD_OUT4", "ab8500_0c", 0, SND_SOC_NOPM, 0, 0),
+ SND_SOC_DAPM_AIF_OUT("AD_OUT57", "ab8500_0c", 0, SND_SOC_NOPM, 0, 0),
+ SND_SOC_DAPM_AIF_OUT("AD_OUT68", "ab8500_0c", 0, SND_SOC_NOPM, 0, 0),
+
+ /* Headset path */
+
+ SND_SOC_DAPM_SUPPLY("Charge Pump", AB8500_ANACONF5,
+ AB8500_ANACONF5_ENCPHS, 0, NULL, 0),
+
+ SND_SOC_DAPM_DAC("DA1 Enable", "ab8500_0p",
+ AB8500_DAPATHENA, AB8500_DAPATHENA_ENDA1, 0),
+ SND_SOC_DAPM_DAC("DA2 Enable", "ab8500_0p",
+ AB8500_DAPATHENA, AB8500_DAPATHENA_ENDA2, 0),
+
+ SND_SOC_DAPM_PGA("HSL Digital Gain", SND_SOC_NOPM, 0, 0,
+ NULL, 0),
+ SND_SOC_DAPM_PGA("HSR Digital Gain", SND_SOC_NOPM, 0, 0,
+ NULL, 0),
+
+ SND_SOC_DAPM_DAC("HSL DAC", "ab8500_0p",
+ AB8500_DAPATHCONF, AB8500_DAPATHCONF_ENDACHSL, 0),
+ SND_SOC_DAPM_DAC("HSR DAC", "ab8500_0p",
+ AB8500_DAPATHCONF, AB8500_DAPATHCONF_ENDACHSR, 0),
+ SND_SOC_DAPM_MIXER("HSL DAC Mute", AB8500_MUTECONF,
+ AB8500_MUTECONF_MUTDACHSL, 1,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("HSR DAC Mute", AB8500_MUTECONF,
+ AB8500_MUTECONF_MUTDACHSR, 1,
+ NULL, 0),
+ SND_SOC_DAPM_DAC("HSL DAC Driver", "ab8500_0p",
+ AB8500_ANACONF3, AB8500_ANACONF3_ENDRVHSL, 0),
+ SND_SOC_DAPM_DAC("HSR DAC Driver", "ab8500_0p",
+ AB8500_ANACONF3, AB8500_ANACONF3_ENDRVHSR, 0),
+
+ SND_SOC_DAPM_MIXER("HSL Mute",
+ AB8500_MUTECONF, AB8500_MUTECONF_MUTHSL, 1,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("HSR Mute",
+ AB8500_MUTECONF, AB8500_MUTECONF_MUTHSR, 1,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("HSL Enable",
+ AB8500_ANACONF4, AB8500_ANACONF4_ENHSL, 0,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("HSR Enable",
+ AB8500_ANACONF4, AB8500_ANACONF4_ENHSR, 0,
+ NULL, 0),
+ SND_SOC_DAPM_PGA("HSL Gain",
+ SND_SOC_NOPM, 0, 0,
+ NULL, 0),
+ SND_SOC_DAPM_PGA("HSR Gain",
+ SND_SOC_NOPM, 0, 0,
+ NULL, 0),
+
+ SND_SOC_DAPM_OUTPUT("Headset Left"),
+ SND_SOC_DAPM_OUTPUT("Headset Right"),
+
+ /* LineOut path */
+
+ SND_SOC_DAPM_MUX("LineOut Source",
+ SND_SOC_NOPM, 0, 0, dapm_lineout_source),
+
+ SND_SOC_DAPM_MIXER("LOL Disable HFL",
+ AB8500_ANACONF4, AB8500_ANACONF4_ENHFL, 1,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("LOR Disable HFR",
+ AB8500_ANACONF4, AB8500_ANACONF4_ENHFR, 1,
+ NULL, 0),
+
+ SND_SOC_DAPM_MIXER("LOL Enable",
+ AB8500_ANACONF5, AB8500_ANACONF5_ENLOL, 0,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("LOR Enable",
+ AB8500_ANACONF5, AB8500_ANACONF5_ENLOR, 0,
+ NULL, 0),
+
+ SND_SOC_DAPM_OUTPUT("LineOut Left"),
+ SND_SOC_DAPM_OUTPUT("LineOut Right"),
+
+ /* Earpiece path */
+
+ SND_SOC_DAPM_MUX("Earpiece or LineOut Mono Source",
+ SND_SOC_NOPM, 0, 0, &dapm_ear_lineout_source),
+ SND_SOC_DAPM_MIXER("EAR DAC",
+ AB8500_DAPATHCONF, AB8500_DAPATHCONF_ENDACEAR, 0,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("EAR Mute",
+ AB8500_MUTECONF, AB8500_MUTECONF_MUTEAR, 1,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("EAR Enable",
+ AB8500_ANACONF4, AB8500_ANACONF4_ENEAR, 0,
+ NULL, 0),
+
+ SND_SOC_DAPM_OUTPUT("Earpiece"),
+
+ /* Handsfree path */
+
+ SND_SOC_DAPM_MIXER("DA3 Channel Gain",
+ AB8500_DAPATHENA, AB8500_DAPATHENA_ENDA3, 0,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("DA4 Channel Gain",
+ AB8500_DAPATHENA, AB8500_DAPATHENA_ENDA4, 0,
+ NULL, 0),
+ SND_SOC_DAPM_MUX("Speaker Left Source",
+ SND_SOC_NOPM, 0, 0, dapm_HFl_select),
+ SND_SOC_DAPM_MUX("Speaker Right Source",
+ SND_SOC_NOPM, 0, 0, dapm_HFr_select),
+ SND_SOC_DAPM_MIXER("HFL DAC", AB8500_DAPATHCONF,
+ AB8500_DAPATHCONF_ENDACHFL, 0,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("HFR DAC",
+ AB8500_DAPATHCONF, AB8500_DAPATHCONF_ENDACHFR, 0,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("DA4 or ANC path to HfR",
+ AB8500_DIGMULTCONF2, AB8500_DIGMULTCONF2_DATOHFREN, 0,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("DA3 or ANC path to HfL",
+ AB8500_DIGMULTCONF2, AB8500_DIGMULTCONF2_DATOHFLEN, 0,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("HFL Enable",
+ AB8500_ANACONF4, AB8500_ANACONF4_ENHFL, 0,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("HFR Enable",
+ AB8500_ANACONF4, AB8500_ANACONF4_ENHFR, 0,
+ NULL, 0),
+
+ SND_SOC_DAPM_OUTPUT("Speaker Left"),
+ SND_SOC_DAPM_OUTPUT("Speaker Right"),
+
+ /* Vibrator path */
+
+ SND_SOC_DAPM_INPUT("PWMGEN1"),
+ SND_SOC_DAPM_INPUT("PWMGEN2"),
+
+ SND_SOC_DAPM_MIXER("DA5 Channel Gain",
+ AB8500_DAPATHENA, AB8500_DAPATHENA_ENDA5, 0,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("DA6 Channel Gain",
+ AB8500_DAPATHENA, AB8500_DAPATHENA_ENDA6, 0,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("VIB1 DAC",
+ AB8500_DAPATHCONF, AB8500_DAPATHCONF_ENDACVIB1, 0,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("VIB2 DAC",
+ AB8500_DAPATHCONF, AB8500_DAPATHCONF_ENDACVIB2, 0,
+ NULL, 0),
+ SND_SOC_DAPM_MUX("Vibra 1 Controller",
+ SND_SOC_NOPM, 0, 0, dapm_pwm2vib1),
+ SND_SOC_DAPM_MUX("Vibra 2 Controller",
+ SND_SOC_NOPM, 0, 0, dapm_pwm2vib2),
+ SND_SOC_DAPM_MIXER("VIB1 Enable",
+ AB8500_ANACONF4, AB8500_ANACONF4_ENVIB1, 0,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("VIB2 Enable",
+ AB8500_ANACONF4, AB8500_ANACONF4_ENVIB2, 0,
+ NULL, 0),
+
+ SND_SOC_DAPM_OUTPUT("Vibra 1"),
+ SND_SOC_DAPM_OUTPUT("Vibra 2"),
+
+ /* Mic 1 */
+
+ SND_SOC_DAPM_INPUT("Mic 1"),
+
+ SND_SOC_DAPM_MUX("Mic 1a or 1b Select",
+ SND_SOC_NOPM, 0, 0, dapm_mic1ab_mux),
+ SND_SOC_DAPM_MIXER("MIC1 Mute",
+ AB8500_ANACONF2, AB8500_ANACONF2_MUTMIC1, 1,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("MIC1A V-AMICx Enable",
+ AB8500_ANACONF2, AB8500_ANACONF2_ENMIC1, 0,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("MIC1B V-AMICx Enable",
+ AB8500_ANACONF2, AB8500_ANACONF2_ENMIC1, 0,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("MIC1 ADC",
+ AB8500_ANACONF3, AB8500_ANACONF3_ENADCMIC, 0,
+ NULL, 0),
+ SND_SOC_DAPM_MUX("AD3 Source Select",
+ SND_SOC_NOPM, 0, 0, dapm_ad3_select),
+ SND_SOC_DAPM_MIXER("AD3 Channel Gain",
+ SND_SOC_NOPM, 0, 0,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("AD3 Enable",
+ AB8500_ADPATHENA, AB8500_ADPATHENA_ENAD34, 0,
+ NULL, 0),
+
+ /* Mic 2 */
+
+ SND_SOC_DAPM_INPUT("Mic 2"),
+
+ SND_SOC_DAPM_MIXER("MIC2 Mute",
+ AB8500_ANACONF2, AB8500_ANACONF2_MUTMIC2, 1,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("MIC2 V-AMICx Enable", AB8500_ANACONF2,
+ AB8500_ANACONF2_ENMIC2, 0,
+ NULL, 0),
+
+ /* LineIn */
+
+ SND_SOC_DAPM_INPUT("LineIn Left"),
+ SND_SOC_DAPM_INPUT("LineIn Right"),
+
+ SND_SOC_DAPM_MIXER("LINL Mute",
+ AB8500_ANACONF2, AB8500_ANACONF2_MUTLINL, 1,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("LINR Mute",
+ AB8500_ANACONF2, AB8500_ANACONF2_MUTLINR, 1,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("LINL Enable", AB8500_ANACONF2,
+ AB8500_ANACONF2_ENLINL, 0,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("LINR Enable", AB8500_ANACONF2,
+ AB8500_ANACONF2_ENLINR, 0,
+ NULL, 0),
+
+ /* LineIn Bypass path */
+ SND_SOC_DAPM_MIXER("LINL to HSL Gain",
+ SND_SOC_NOPM, 0, 0,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("LINR to HSR Gain",
+ SND_SOC_NOPM, 0, 0,
+ NULL, 0),
+
+ /* LineIn, Mic 2 */
+ SND_SOC_DAPM_MUX("Mic 2 or LINR Select",
+ SND_SOC_NOPM, 0, 0, dapm_mic2lr_select),
+ SND_SOC_DAPM_MIXER("LINL ADC", AB8500_ANACONF3,
+ AB8500_ANACONF3_ENADCLINL, 0,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("LINR ADC", AB8500_ANACONF3,
+ AB8500_ANACONF3_ENADCLINR, 0,
+ NULL, 0),
+ SND_SOC_DAPM_MUX("AD1 Source Select",
+ SND_SOC_NOPM, 0, 0, dapm_ad1_select),
+ SND_SOC_DAPM_MUX("AD2 Source Select",
+ SND_SOC_NOPM, 0, 0, dapm_ad2_select),
+ SND_SOC_DAPM_MIXER("AD1 Channel Gain",
+ SND_SOC_NOPM, 0, 0,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("AD2 Channel Gain",
+ SND_SOC_NOPM, 0, 0,
+ NULL, 0),
+
+ SND_SOC_DAPM_MIXER("AD12 Enable",
+ AB8500_ADPATHENA, AB8500_ADPATHENA_ENAD12, 0,
+ NULL, 0),
+
+ /* HD Capture path */
+
+ SND_SOC_DAPM_MUX("AD5 Source Select",
+ SND_SOC_NOPM, 0, 0, dapm_ad5_select),
+ SND_SOC_DAPM_MUX("AD6 Source Select",
+ SND_SOC_NOPM, 0, 0, dapm_ad6_select),
+ SND_SOC_DAPM_MIXER("AD5 Channel Gain",
+ SND_SOC_NOPM, 0, 0,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("AD6 Channel Gain",
+ SND_SOC_NOPM, 0, 0,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("AD57 Enable",
+ AB8500_ADPATHENA, AB8500_ADPATHENA_ENAD5768, 0,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("AD68 Enable",
+ AB8500_ADPATHENA, AB8500_ADPATHENA_ENAD5768, 0,
+ NULL, 0),
+
+ /* Digital Microphone path */
+
+ SND_SOC_DAPM_INPUT("DMic 1"),
+ SND_SOC_DAPM_INPUT("DMic 2"),
+ SND_SOC_DAPM_INPUT("DMic 3"),
+ SND_SOC_DAPM_INPUT("DMic 4"),
+ SND_SOC_DAPM_INPUT("DMic 5"),
+ SND_SOC_DAPM_INPUT("DMic 6"),
+
+ SND_SOC_DAPM_MIXER("DMIC1",
+ AB8500_DIGMICCONF, AB8500_DIGMICCONF_ENDMIC1, 0,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("DMIC2",
+ AB8500_DIGMICCONF, AB8500_DIGMICCONF_ENDMIC2, 0,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("DMIC3",
+ AB8500_DIGMICCONF, AB8500_DIGMICCONF_ENDMIC3, 0,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("DMIC4",
+ AB8500_DIGMICCONF, AB8500_DIGMICCONF_ENDMIC4, 0,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("DMIC5",
+ AB8500_DIGMICCONF, AB8500_DIGMICCONF_ENDMIC5, 0,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("DMIC6",
+ AB8500_DIGMICCONF, AB8500_DIGMICCONF_ENDMIC6, 0,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("AD4 Channel Gain",
+ SND_SOC_NOPM, 0, 0,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("AD4 Enable",
+ AB8500_ADPATHENA, AB8500_ADPATHENA_ENAD34,
+ 0, NULL, 0),
+
+ /* Acoustical Noise Cancellation path */
+
+ SND_SOC_DAPM_INPUT("ANC Configure Input"),
+ SND_SOC_DAPM_OUTPUT("ANC Configure Output"),
+
+ SND_SOC_DAPM_MUX("ANC Source",
+ SND_SOC_NOPM, 0, 0,
+ dapm_anc_in_select),
+ SND_SOC_DAPM_SWITCH("ANC",
+ SND_SOC_NOPM, 0, 0,
+ dapm_anc_enable),
+ SND_SOC_DAPM_SWITCH("ANC to Earpiece",
+ SND_SOC_NOPM, 0, 0,
+ dapm_anc_ear_mute),
+
+ /* Sidetone Filter path */
+
+ SND_SOC_DAPM_MUX("Sidetone Left Source",
+ SND_SOC_NOPM, 0, 0,
+ dapm_stfir1_in_select),
+ SND_SOC_DAPM_MUX("Sidetone Right Source",
+ SND_SOC_NOPM, 0, 0,
+ dapm_stfir2_in_select),
+ SND_SOC_DAPM_MIXER("STFIR1 Control",
+ SND_SOC_NOPM, 0, 0,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("STFIR2 Control",
+ SND_SOC_NOPM, 0, 0,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("STFIR1 Gain",
+ SND_SOC_NOPM, 0, 0,
+ NULL, 0),
+ SND_SOC_DAPM_MIXER("STFIR2 Gain",
+ SND_SOC_NOPM, 0, 0,
+ NULL, 0),
+};
+
+/*
+ * DAPM-routes
+ */
+static const struct snd_soc_dapm_route ab8500_dapm_routes[] = {
+ /* Power AB8500 audio-block when AD/DA is active */
+ {"Main Supply", NULL, "V-AUD"},
+ {"Main Supply", NULL, "audioclk"},
+ {"Main Supply", NULL, "Audio Power"},
+ {"Main Supply", NULL, "Audio Analog Power"},
+ {"Main Supply", NULL, "gpio.1"},
+ {"DAC", NULL, "Main Supply"},
+ {"ADC", NULL, "Main Supply"},
+
+ /* ANC Configure */
+ {"ANC Configure Input", NULL, "Main Supply"},
+ {"ANC Configure Output", NULL, "ANC Configure Input"},
+
+ /* AD/DA */
+ {"ADC", NULL, "ADC Input"},
+ {"DAC Output", NULL, "DAC"},
+
+ /* Powerup charge pump if DA1/2 is in use */
+ {"DA_IN1", NULL, "Charge Pump"},
+ {"DA_IN2", NULL, "Charge Pump"},
+
+ /* Headset path */
+
+ {"DA1 Enable", NULL, "DA_IN1"},
+ {"DA2 Enable", NULL, "DA_IN2"},
+
+ {"HSL Digital Gain", NULL, "DA1 Enable"},
+ {"HSR Digital Gain", NULL, "DA2 Enable"},
+
+ {"HSL DAC", NULL, "HSL Digital Gain"},
+ {"HSR DAC", NULL, "HSR Digital Gain"},
+
+ {"HSL DAC Mute", NULL, "HSL DAC"},
+ {"HSR DAC Mute", NULL, "HSR DAC"},
+
+ {"HSL DAC Driver", NULL, "HSL DAC Mute"},
+ {"HSR DAC Driver", NULL, "HSR DAC Mute"},
+
+ {"HSL Mute", NULL, "HSL DAC Driver"},
+ {"HSR Mute", NULL, "HSR DAC Driver"},
+
+ {"HSL Enable", NULL, "HSL Mute"},
+ {"HSR Enable", NULL, "HSR Mute"},
+
+ {"HSL Gain", NULL, "HSL Enable"},
+ {"HSR Gain", NULL, "HSR Enable"},
+
+ {"Headset Left", NULL, "HSL Gain"},
+ {"Headset Right", NULL, "HSR Gain"},
+
+ /* HF or LineOut path */
+
+ {"DA3 Channel Gain", NULL, "DA_IN3"},
+ {"DA4 Channel Gain", NULL, "DA_IN4"},
+
+ {"Speaker Left Source", "Audio Path", "DA3 Channel Gain"},
+ {"Speaker Right Source", "Audio Path", "DA4 Channel Gain"},
+
+ {"DA3 or ANC path to HfL", NULL, "Speaker Left Source"},
+ {"DA4 or ANC path to HfR", NULL, "Speaker Right Source"},
+
+ /* HF path */
+
+ {"HFL DAC", NULL, "DA3 or ANC path to HfL"},
+ {"HFR DAC", NULL, "DA4 or ANC path to HfR"},
+
+ {"HFL Enable", NULL, "HFL DAC"},
+ {"HFR Enable", NULL, "HFR DAC"},
+
+ {"Speaker Left", NULL, "HFL Enable"},
+ {"Speaker Right", NULL, "HFR Enable"},
+
+ /* Earpiece path */
+
+ {"Earpiece or LineOut Mono Source", "Headset Left",
+ "HSL Digital Gain"},
+ {"Earpiece or LineOut Mono Source", "Speaker Left",
+ "DA3 or ANC path to HfL"},
+
+ {"EAR DAC", NULL, "Earpiece or LineOut Mono Source"},
+
+ {"EAR Mute", NULL, "EAR DAC"},
+
+ {"EAR Enable", NULL, "EAR Mute"},
+
+ {"Earpiece", NULL, "EAR Enable"},
+
+ /* LineOut path stereo */
+
+ {"LineOut Source", "Stereo Path", "HSL DAC Driver"},
+ {"LineOut Source", "Stereo Path", "HSR DAC Driver"},
+
+ /* LineOut path mono */
+
+ {"LineOut Source", "Mono Path", "EAR DAC"},
+
+ /* LineOut path */
+
+ {"LOL Disable HFL", NULL, "LineOut Source"},
+ {"LOR Disable HFR", NULL, "LineOut Source"},
+
+ {"LOL Enable", NULL, "LOL Disable HFL"},
+ {"LOR Enable", NULL, "LOR Disable HFR"},
+
+ {"LineOut Left", NULL, "LOL Enable"},
+ {"LineOut Right", NULL, "LOR Enable"},
+
+ /* Vibrator path */
+
+ {"DA5 Channel Gain", NULL, "DA_IN5"},
+ {"DA6 Channel Gain", NULL, "DA_IN6"},
+
+ {"VIB1 DAC", NULL, "DA5 Channel Gain"},
+ {"VIB2 DAC", NULL, "DA6 Channel Gain"},
+
+ {"Vibra 1 Controller", "Audio Path", "VIB1 DAC"},
+ {"Vibra 2 Controller", "Audio Path", "VIB2 DAC"},
+ {"Vibra 1 Controller", "PWM Generator", "PWMGEN1"},
+ {"Vibra 2 Controller", "PWM Generator", "PWMGEN2"},
+
+ {"VIB1 Enable", NULL, "Vibra 1 Controller"},
+ {"VIB2 Enable", NULL, "Vibra 2 Controller"},
+
+ {"Vibra 1", NULL, "VIB1 Enable"},
+ {"Vibra 2", NULL, "VIB2 Enable"},
+
+
+ /* Mic 2 */
+
+ {"MIC2 V-AMICx Enable", NULL, "Mic 2"},
+
+ /* LineIn */
+ {"LINL Mute", NULL, "LineIn Left"},
+ {"LINR Enable", NULL, "LineIn Right"},
+
+ {"LINL Enable", NULL, "LINL Mute"},
+ {"LINR Enable", NULL, "LineIn Right"},
+
+ /* LineIn, Mic 2 */
+ {"Mic 2 or LINR Select", "LineIn Right", "LINR Enable"},
+ {"Mic 2 or LINR Select", "Mic 2", "MIC2 V-AMICx Enable"},
+
+ {"LINL ADC", NULL, "LINL Enable"},
+ {"LINR ADC", NULL, "Mic 2 or LINR Select"},
+
+ {"AD1 Source Select", "LineIn Left", "LINL ADC"},
+ {"AD2 Source Select", "LineIn Right", "LINR ADC"},
+
+ {"AD1 Channel Gain", NULL, "AD1 Source Select"},
+ {"AD2 Channel Gain", NULL, "AD2 Source Select"},
+
+ {"AD12 Enable", NULL, "AD1 Channel Gain"},
+ {"AD12 Enable", NULL, "AD2 Channel Gain"},
+
+ {"AD_OUT1", NULL, "AD12 Enable"},
+ {"AD_OUT2", NULL, "AD12 Enable"},
+
+ /* Mic 1 */
+
+ {"MIC1 Mute", NULL, "Mic 1"},
+
+ {"MIC1A V-AMICx Enable", NULL, "MIC1 Mute"},
+ {"MIC1B V-AMICx Enable", NULL, "MIC1 Mute"},
+
+ {"Mic 1a or 1b Select", "Mic 1a", "MIC1A V-AMICx Enable"},
+ {"Mic 1a or 1b Select", "Mic 1b", "MIC1B V-AMICx Enable"},
+
+ {"MIC1 ADC", NULL, "Mic 1a or 1b Select"},
+
+ {"AD3 Source Select", "Mic 1", "MIC1 ADC"},
+
+ {"AD3 Channel Gain", NULL, "AD3 Source Select"},
+
+ {"AD3 Enable", NULL, "AD3 Channel Gain"},
+
+ {"AD_OUT3", NULL, "AD3 Enable"},
+
+ /* HD Capture path */
+
+ {"AD5 Source Select", "Mic 2", "LINR ADC"},
+ {"AD6 Source Select", "Mic 1", "MIC1 ADC"},
+
+ {"AD5 Channel Gain", NULL, "AD5 Source Select"},
+ {"AD6 Channel Gain", NULL, "AD6 Source Select"},
+
+ {"AD57 Enable", NULL, "AD5 Channel Gain"},
+ {"AD68 Enable", NULL, "AD6 Channel Gain"},
+
+ {"AD_OUT57", NULL, "AD57 Enable"},
+ {"AD_OUT68", NULL, "AD68 Enable"},
+
+ /* Digital Microphone path */
+
+ {"DMic 1", NULL, "V-DMIC"},
+ {"DMic 2", NULL, "V-DMIC"},
+ {"DMic 3", NULL, "V-DMIC"},
+ {"DMic 4", NULL, "V-DMIC"},
+ {"DMic 5", NULL, "V-DMIC"},
+ {"DMic 6", NULL, "V-DMIC"},
+
+ {"AD1 Source Select", NULL, "DMic 1"},
+ {"AD2 Source Select", NULL, "DMic 2"},
+ {"AD3 Source Select", NULL, "DMic 3"},
+ {"AD5 Source Select", NULL, "DMic 5"},
+ {"AD6 Source Select", NULL, "DMic 6"},
+
+ {"AD4 Channel Gain", NULL, "DMic 4"},
+ {"AD4 Enable", NULL, "AD4 Channel Gain"},
+
+ {"AD_OUT4", NULL, "AD4 Enable"},
+
+ /* LineIn Bypass path */
+
+ {"LINL to HSL Gain", NULL, "LINL Enable"},
+ {"LINR to HSR Gain", NULL, "LINR Enable"},
+
+ {"HSL DAC Driver", NULL, "LINL to HSL Gain"},
+ {"HSR DAC Driver", NULL, "LINR to HSR Gain"},
+
+ /* ANC path (Acoustic Noise Cancellation) */
+
+ {"ANC Source", "Mic 2 / DMic 5", "AD5 Channel Gain"},
+ {"ANC Source", "Mic 1 / DMic 6", "AD6 Channel Gain"},
+
+ {"ANC", "Switch", "ANC Source"},
+
+ {"Speaker Left Source", "ANC", "ANC"},
+ {"Speaker Right Source", "ANC", "ANC"},
+ {"ANC to Earpiece", "Switch", "ANC"},
+
+ {"HSL Digital Gain", NULL, "ANC to Earpiece"},
+
+ /* Sidetone Filter path */
+
+ {"Sidetone Left Source", "LineIn Left", "AD12 Enable"},
+ {"Sidetone Left Source", "LineIn Right", "AD12 Enable"},
+ {"Sidetone Left Source", "Mic 1", "AD3 Enable"},
+ {"Sidetone Left Source", "Headset Left", "DA_IN1"},
+ {"Sidetone Right Source", "LineIn Right", "AD12 Enable"},
+ {"Sidetone Right Source", "Mic 1", "AD3 Enable"},
+ {"Sidetone Right Source", "DMic 4", "AD4 Enable"},
+ {"Sidetone Right Source", "Headset Right", "DA_IN2"},
+
+ {"STFIR1 Control", NULL, "Sidetone Left Source"},
+ {"STFIR2 Control", NULL, "Sidetone Right Source"},
+
+ {"STFIR1 Gain", NULL, "STFIR1 Control"},
+ {"STFIR2 Gain", NULL, "STFIR2 Control"},
+
+ {"DA1 Enable", NULL, "STFIR1 Gain"},
+ {"DA2 Enable", NULL, "STFIR2 Gain"},
+};
+
+static const struct snd_soc_dapm_route ab8500_dapm_routes_mic1a_vamicx[] = {
+ {"MIC1A V-AMICx Enable", NULL, "V-AMIC1"},
+ {"MIC1A V-AMICx Enable", NULL, "V-AMIC2"},
+};
+
+static const struct snd_soc_dapm_route ab8500_dapm_routes_mic1b_vamicx[] = {
+ {"MIC1B V-AMICx Enable", NULL, "V-AMIC1"},
+ {"MIC1B V-AMICx Enable", NULL, "V-AMIC2"},
+};
+
+static const struct snd_soc_dapm_route ab8500_dapm_routes_mic2_vamicx[] = {
+ {"MIC2 V-AMICx Enable", NULL, "V-AMIC1"},
+ {"MIC2 V-AMICx Enable", NULL, "V-AMIC2"},
+};
+
+/* ANC FIR-coefficients configuration sequence */
+static void anc_fir(struct snd_soc_codec *codec,
+ unsigned int bnk, unsigned int par, unsigned int val)
+{
+ if (par == 0 && bnk == 0)
+ snd_soc_update_bits(codec, AB8500_ANCCONF1,
+ BIT(AB8500_ANCCONF1_ANCFIRUPDATE),
+ BIT(AB8500_ANCCONF1_ANCFIRUPDATE));
+
+ snd_soc_write(codec, AB8500_ANCCONF5, val >> 8 & 0xff);
+ snd_soc_write(codec, AB8500_ANCCONF6, val & 0xff);
+
+ if (par == AB8500_ANC_FIR_COEFFS - 1 && bnk == 1)
+ snd_soc_update_bits(codec, AB8500_ANCCONF1,
+ BIT(AB8500_ANCCONF1_ANCFIRUPDATE), 0);
+}
+
+/* ANC IIR-coefficients configuration sequence */
+static void anc_iir(struct snd_soc_codec *codec, unsigned int bnk,
+ unsigned int par, unsigned int val)
+{
+ if (par == 0) {
+ if (bnk == 0) {
+ snd_soc_update_bits(codec, AB8500_ANCCONF1,
+ BIT(AB8500_ANCCONF1_ANCIIRINIT),
+ BIT(AB8500_ANCCONF1_ANCIIRINIT));
+ usleep_range(AB8500_ANC_SM_DELAY, AB8500_ANC_SM_DELAY);
+ snd_soc_update_bits(codec, AB8500_ANCCONF1,
+ BIT(AB8500_ANCCONF1_ANCIIRINIT), 0);
+ usleep_range(AB8500_ANC_SM_DELAY, AB8500_ANC_SM_DELAY);
+ } else {
+ snd_soc_update_bits(codec, AB8500_ANCCONF1,
+ BIT(AB8500_ANCCONF1_ANCIIRUPDATE),
+ BIT(AB8500_ANCCONF1_ANCIIRUPDATE));
+ }
+ } else if (par > 3) {
+ snd_soc_write(codec, AB8500_ANCCONF7, 0);
+ snd_soc_write(codec, AB8500_ANCCONF8, val >> 16 & 0xff);
+ }
+
+ snd_soc_write(codec, AB8500_ANCCONF7, val >> 8 & 0xff);
+ snd_soc_write(codec, AB8500_ANCCONF8, val & 0xff);
+
+ if (par == AB8500_ANC_IIR_COEFFS - 1 && bnk == 1)
+ snd_soc_update_bits(codec, AB8500_ANCCONF1,
+ BIT(AB8500_ANCCONF1_ANCIIRUPDATE), 0);
+}
+
+/* ANC IIR-/FIR-coefficients configuration sequence */
+static void anc_configure(struct snd_soc_codec *codec,
+ bool apply_fir, bool apply_iir)
+{
+ struct ab8500_codec_drvdata *drvdata = dev_get_drvdata(codec->dev);
+ unsigned int bnk, par, val;
+
+ dev_dbg(codec->dev, "%s: Enter.\n", __func__);
+
+ if (apply_fir)
+ snd_soc_update_bits(codec, AB8500_ANCCONF1,
+ BIT(AB8500_ANCCONF1_ENANC), 0);
+
+ snd_soc_update_bits(codec, AB8500_ANCCONF1,
+ BIT(AB8500_ANCCONF1_ENANC), BIT(AB8500_ANCCONF1_ENANC));
+
+ if (apply_fir)
+ for (bnk = 0; bnk < AB8500_NR_OF_ANC_COEFF_BANKS; bnk++)
+ for (par = 0; par < AB8500_ANC_FIR_COEFFS; par++) {
+ val = snd_soc_read(codec,
+ drvdata->anc_fir_values[par]);
+ anc_fir(codec, bnk, par, val);
+ }
+
+ if (apply_iir)
+ for (bnk = 0; bnk < AB8500_NR_OF_ANC_COEFF_BANKS; bnk++)
+ for (par = 0; par < AB8500_ANC_IIR_COEFFS; par++) {
+ val = snd_soc_read(codec,
+ drvdata->anc_iir_values[par]);
+ anc_iir(codec, bnk, par, val);
+ }
+
+ dev_dbg(codec->dev, "%s: Exit.\n", __func__);
+}
+
+/*
+ * Control-events
+ */
+
+static int sid_status_control_get(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+ struct ab8500_codec_drvdata *drvdata = dev_get_drvdata(codec->dev);
+
+ mutex_lock(&codec->mutex);
+ ucontrol->value.integer.value[0] = drvdata->sid_status;
+ mutex_unlock(&codec->mutex);
+
+ return 0;
+}
+
+/* Write sidetone FIR-coefficients configuration sequence */
+static int sid_status_control_put(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+ struct ab8500_codec_drvdata *drvdata = dev_get_drvdata(codec->dev);
+ unsigned int param, sidconf, val;
+ int status = 1;
+
+ dev_dbg(codec->dev, "%s: Enter\n", __func__);
+
+ if (ucontrol->value.integer.value[0] != SID_APPLY_FIR) {
+ dev_err(codec->dev,
+ "%s: ERROR: This control supports '%s' only!\n",
+ __func__, enum_sid_state[SID_APPLY_FIR]);
+ return 0;
+ }
+
+ mutex_lock(&codec->mutex);
+
+ sidconf = snd_soc_read(codec, AB8500_SIDFIRCONF);
+ if (((sidconf & BIT(AB8500_SIDFIRCONF_FIRSIDBUSY)) != 0)) {
+ if ((sidconf & BIT(AB8500_SIDFIRCONF_ENFIRSIDS)) == 0) {
+ dev_err(codec->dev, "%s: Sidetone busy while off!\n",
+ __func__);
+ status = -EPERM;
+ } else {
+ status = -EBUSY;
+ }
+ goto out;
+ }
+
+ snd_soc_write(codec, AB8500_SIDFIRADR, 0);
+
+ for (param = 0; param < AB8500_SID_FIR_COEFFS; param++) {
+ val = snd_soc_read(codec, drvdata->sid_fir_values[param]);
+ snd_soc_write(codec, AB8500_SIDFIRCOEF1, val >> 8 & 0xff);
+ snd_soc_write(codec, AB8500_SIDFIRCOEF2, val & 0xff);
+ }
+
+ snd_soc_update_bits(codec, AB8500_SIDFIRADR,
+ BIT(AB8500_SIDFIRADR_FIRSIDSET),
+ BIT(AB8500_SIDFIRADR_FIRSIDSET));
+ snd_soc_update_bits(codec, AB8500_SIDFIRADR,
+ BIT(AB8500_SIDFIRADR_FIRSIDSET), 0);
+
+ drvdata->sid_status = SID_FIR_CONFIGURED;
+
+out:
+ mutex_unlock(&codec->mutex);
+
+ dev_dbg(codec->dev, "%s: Exit\n", __func__);
+
+ return status;
+}
+
+static int anc_status_control_get(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+ struct ab8500_codec_drvdata *drvdata = dev_get_drvdata(codec->dev);
+
+ mutex_lock(&codec->mutex);
+ ucontrol->value.integer.value[0] = drvdata->anc_status;
+ mutex_unlock(&codec->mutex);
+
+ return 0;
+}
+
+static int anc_status_control_put(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+ struct ab8500_codec_drvdata *drvdata = dev_get_drvdata(codec->dev);
+ struct device *dev = codec->dev;
+ bool apply_fir, apply_iir;
+ int req, status;
+
+ dev_dbg(dev, "%s: Enter.\n", __func__);
+
+ req = ucontrol->value.integer.value[0];
+ if (req != ANC_APPLY_FIR_IIR && req != ANC_APPLY_FIR &&
+ req != ANC_APPLY_IIR) {
+ dev_err(dev, "%s: ERROR: Unsupported status to set '%s'!\n",
+ __func__, enum_anc_state[req]);
+ return -EINVAL;
+ }
+ apply_fir = req == ANC_APPLY_FIR || req == ANC_APPLY_FIR_IIR;
+ apply_iir = req == ANC_APPLY_IIR || req == ANC_APPLY_FIR_IIR;
+
+ status = snd_soc_dapm_force_enable_pin(&codec->dapm,
+ "ANC Configure Input");
+ if (status < 0) {
+ dev_err(dev,
+ "%s: ERROR: Failed to enable power (status = %d)!\n",
+ __func__, status);
+ goto cleanup;
+ }
+ snd_soc_dapm_sync(&codec->dapm);
+
+ mutex_lock(&codec->mutex);
+
+ anc_configure(codec, apply_fir, apply_iir);
+
+ if (apply_fir) {
+ if (drvdata->anc_status == ANC_IIR_CONFIGURED)
+ drvdata->anc_status = ANC_FIR_IIR_CONFIGURED;
+ else if (drvdata->anc_status != ANC_FIR_IIR_CONFIGURED)
+ drvdata->anc_status = ANC_FIR_CONFIGURED;
+ }
+ if (apply_iir) {
+ if (drvdata->anc_status == ANC_FIR_CONFIGURED)
+ drvdata->anc_status = ANC_FIR_IIR_CONFIGURED;
+ else if (drvdata->anc_status != ANC_FIR_IIR_CONFIGURED)
+ drvdata->anc_status = ANC_IIR_CONFIGURED;
+ }
+
+ mutex_unlock(&codec->mutex);
+
+ status = snd_soc_dapm_disable_pin(&codec->dapm, "ANC Configure Input");
+ snd_soc_dapm_sync(&codec->dapm);
+
+cleanup:
+ if (status < 0)
+ dev_err(dev, "%s: Unable to configure ANC! (status = %d)\n",
+ __func__, status);
+
+ dev_dbg(dev, "%s: Exit.\n", __func__);
+
+ return (status < 0) ? status : 1;
+}
+
+static int filter_control_info(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_info *uinfo)
+{
+ struct filter_control *fc =
+ (struct filter_control *)kcontrol->private_value;
+
+ uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
+ uinfo->count = fc->count;
+ uinfo->value.integer.min = fc->min;
+ uinfo->value.integer.max = fc->max;
+
+ return 0;
+}
+
+static int filter_control_get(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct filter_control *fc =
+ (struct filter_control *)kcontrol->private_value;
+ unsigned int i;
+
+ for (i = 0; i < fc->count; i++)
+ ucontrol->value.integer.value[i] = fc->value[i];
+
+ return 0;
+}
+
+static int filter_control_put(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct filter_control *fc =
+ (struct filter_control *)kcontrol->private_value;
+ unsigned int i;
+
+ for (i = 0; i < fc->count; i++)
+ fc->value[i] = ucontrol->value.integer.value[i];
+
+ return 0;
+}
+
+static int mclk_input_control_get(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+ struct ab8500_codec_drvdata *drvdata = dev_get_drvdata(codec->dev);
+
+ ucontrol->value.enumerated.item[0] = drvdata->mclk_sel;
+
+ return 0;
+}
+
+static int mclk_input_control_put(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
+ struct ab8500_codec_drvdata *drvdata = dev_get_drvdata(codec->dev);
+ unsigned int val;
+
+ val = (ucontrol->value.enumerated.item[0] != 0);
+ if (drvdata->mclk_sel == val)
+ return 0;
+
+ drvdata->mclk_sel = val;
+
+ return 1;
+}
+
+/*
+ * Controls - Non-DAPM ASoC
+ */
+
+static const char * const enum_ena_dis[] = {"Enabled", "Disabled"};
+static const char * const enum_dis_ena[] = {"Disabled", "Enabled"};
+
+static DECLARE_TLV_DB_SCALE(adx_dig_gain_tlv, -3200, 100, 1);
+/* -32dB = Mute */
+
+static DECLARE_TLV_DB_SCALE(dax_dig_gain_tlv, -6300, 100, 1);
+/* -63dB = Mute */
+
+static DECLARE_TLV_DB_SCALE(hs_ear_dig_gain_tlv, -100, 100, 1);
+/* -1dB = Mute */
+
+static const unsigned int hs_gain_tlv[] = {
+ TLV_DB_RANGE_HEAD(2),
+ 0, 3, TLV_DB_SCALE_ITEM(-3200, 400, 0),
+ 4, 15, TLV_DB_SCALE_ITEM(-1800, 200, 0),
+};
+
+static DECLARE_TLV_DB_SCALE(mic_gain_tlv, 0, 100, 0);
+
+static DECLARE_TLV_DB_SCALE(lin_gain_tlv, -1000, 200, 0);
+
+static DECLARE_TLV_DB_SCALE(lin2hs_gain_tlv, -3800, 200, 1);
+/* -38dB = Mute */
+
+/* Headset */
+
+static SOC_ENUM_SINGLE_DECL(soc_enum_hshpen,
+ AB8500_ANACONF1, AB8500_ANACONF1_HSHPEN, enum_dis_ena);
+static SOC_ENUM_SINGLE_DECL(soc_enum_hslowpow,
+ AB8500_ANACONF1, AB8500_ANACONF1_HSLOWPOW, enum_dis_ena);
+static SOC_ENUM_SINGLE_DECL(soc_enum_daclowpow1,
+ AB8500_ANACONF1, AB8500_ANACONF1_DACLOWPOW1, enum_dis_ena);
+static SOC_ENUM_SINGLE_DECL(soc_enum_daclowpow0,
+ AB8500_ANACONF1, AB8500_ANACONF1_DACLOWPOW0, enum_dis_ena);
+
+static const char * const enum_hsfadspeed[] = {"2ms", "0.5ms", "10.6ms",
+ "5ms"};
+static SOC_ENUM_SINGLE_DECL(soc_enum_hsfadspeed,
+ AB8500_DIGMICCONF, AB8500_DIGMICCONF_HSFADSPEED, enum_hsfadspeed);
+
+static const char * const enum_envdetthre[] = {
+ "250mV", "300mV", "350mV", "400mV",
+ "450mV", "500mV", "550mV", "600mV",
+ "650mV", "700mV", "750mV", "800mV",
+ "850mV", "900mV", "950mV", "1.00V" };
+static SOC_ENUM_SINGLE_DECL(soc_enum_envdetcpen,
+ AB8500_SIGENVCONF, AB8500_SIGENVCONF_ENVDETCPEN, enum_dis_ena);
+static SOC_ENUM_SINGLE_DECL(soc_enum_envdeththre,
+ AB8500_ENVCPCONF, AB8500_ENVCPCONF_ENVDETHTHRE, enum_envdetthre);
+static SOC_ENUM_SINGLE_DECL(soc_enum_envdetlthre,
+ AB8500_ENVCPCONF, AB8500_ENVCPCONF_ENVDETLTHRE, enum_envdetthre);
+static const char * const enum_envdettime[] = {
+ "26.6us", "53.2us", "106us", "213us",
+ "426us", "851us", "1.70ms", "3.40ms",
+ "6.81ms", "13.6ms", "27.2ms", "54.5ms",
+ "109ms", "218ms", "436ms", "872ms" };
+static SOC_ENUM_SINGLE_DECL(soc_enum_envdettime,
+ AB8500_SIGENVCONF, AB8500_SIGENVCONF_ENVDETTIME, enum_envdettime);
+
+static const char * const enum_sinc31[] = {"Sinc 3", "Sinc 1"};
+static SOC_ENUM_SINGLE_DECL(soc_enum_hsesinc, AB8500_HSLEARDIGGAIN,
+ AB8500_HSLEARDIGGAIN_HSSINC1, enum_sinc31);
+
+static const char * const enum_fadespeed[] = {"1ms", "4ms", "8ms", "16ms"};
+static SOC_ENUM_SINGLE_DECL(soc_enum_fadespeed, AB8500_HSRDIGGAIN,
+ AB8500_HSRDIGGAIN_FADESPEED, enum_fadespeed);
+
+/* Earpiece */
+
+static const char * const enum_lowpow[] = {"Normal", "Low Power"};
+static SOC_ENUM_SINGLE_DECL(soc_enum_eardaclowpow, AB8500_ANACONF1,
+ AB8500_ANACONF1_EARDACLOWPOW, enum_lowpow);
+static SOC_ENUM_SINGLE_DECL(soc_enum_eardrvlowpow, AB8500_ANACONF1,
+ AB8500_ANACONF1_EARDRVLOWPOW, enum_lowpow);
+
+/* Handsfree */
+
+static SOC_ENUM_SINGLE_DECL(soc_enum_parlhf, AB8500_CLASSDCONF1,
+ AB8500_CLASSDCONF1_PARLHF, enum_dis_ena);
+static SOC_ENUM_DOUBLE_DECL(soc_enum_hflrswap, AB8500_CLASSDCONF1,
+ AB8500_CLASSDCONF1_HFLSWAPEN,
+ AB8500_CLASSDCONF1_HFRSWAPEN, enum_dis_ena);
+
+/* Vibra */
+
+static SOC_ENUM_SINGLE_DECL(soc_enum_parlvib,
+ AB8500_CLASSDCONF1, AB8500_CLASSDCONF1_PARLVIB,
+ enum_dis_ena);
+static SOC_ENUM_DOUBLE_DECL(soc_enum_vib12swap, AB8500_CLASSDCONF1,
+ AB8500_CLASSDCONF1_VIB1SWAPEN,
+ AB8500_CLASSDCONF1_VIB2SWAPEN,
+ enum_dis_ena);
+
+/* Mic 1 */
+
+static SOC_ENUM_SINGLE_DECL(soc_enum_lowpowmic1,
+ AB8500_ANAGAIN1, AB8500_ANAGAINX_LOWPOWMICX, enum_dis_ena);
+
+/* Mic 2 */
+
+static SOC_ENUM_SINGLE_DECL(soc_enum_lowpowmic2,
+ AB8500_ANAGAIN2, AB8500_ANAGAINX_LOWPOWMICX, enum_dis_ena);
+
+/* AD */
+
+static SOC_ENUM_DOUBLE_DECL(soc_enum_ad12nh, AB8500_ADFILTCONF,
+ AB8500_ADFILTCONF_AD1NH, AB8500_ADFILTCONF_AD2NH, enum_ena_dis);
+static SOC_ENUM_DOUBLE_DECL(soc_enum_ad34nh, AB8500_ADFILTCONF,
+ AB8500_ADFILTCONF_AD3NH, AB8500_ADFILTCONF_AD4NH, enum_ena_dis);
+
+static const char * const enum_av_mode[] = {"Audio", "Voice"};
+static SOC_ENUM_DOUBLE_DECL(soc_enum_ad12voice, AB8500_ADFILTCONF,
+ AB8500_ADFILTCONF_AD1VOICE, AB8500_ADFILTCONF_AD2VOICE, enum_av_mode);
+static SOC_ENUM_DOUBLE_DECL(soc_enum_ad34voice, AB8500_ADFILTCONF,
+ AB8500_ADFILTCONF_AD3VOICE, AB8500_ADFILTCONF_AD4VOICE, enum_av_mode);
+
+/* DA */
+
+static SOC_ENUM_SINGLE_DECL(soc_enum_da12voice,
+ AB8500_DASLOTCONF1, AB8500_DASLOTCONF1_DA12VOICE,
+ enum_av_mode);
+static SOC_ENUM_SINGLE_DECL(soc_enum_da34voice,
+ AB8500_DASLOTCONF3, AB8500_DASLOTCONF3_DA34VOICE,
+ enum_av_mode);
+static SOC_ENUM_SINGLE_DECL(soc_enum_da56voice,
+ AB8500_DASLOTCONF5, AB8500_DASLOTCONF5_DA56VOICE,
+ enum_av_mode);
+
+static SOC_ENUM_SINGLE_DECL(soc_enum_swapda12_34,
+ AB8500_DASLOTCONF1, AB8500_DASLOTCONF1_SWAPDA12_34,
+ enum_dis_ena);
+
+static const char * const enum_da2hslr[] = {"Sidetone", "Audio Path"};
+static SOC_ENUM_DOUBLE_DECL(soc_enum_da2hslr, AB8500_DIGMULTCONF1,
+ AB8500_DIGMULTCONF1_DATOHSLEN,
+ AB8500_DIGMULTCONF1_DATOHSREN, enum_da2hslr);
+
+/* FIR-filters */
+static SOC_ENUM_DOUBLE_DECL(soc_enum_fir01byp, AB8500_CLASSDCONF2,
+ AB8500_CLASSDCONF2_FIRBYP0, AB8500_CLASSDCONF2_FIRBYP1,
+ enum_dis_ena);
+static SOC_ENUM_DOUBLE_DECL(soc_enum_fir23byp, AB8500_CLASSDCONF2,
+ AB8500_CLASSDCONF2_FIRBYP2,
+ AB8500_CLASSDCONF2_FIRBYP3, enum_dis_ena);
+
+static const char * const enum_sinc53[] = {"Sinc 5", "Sinc 3"};
+static SOC_ENUM_DOUBLE_DECL(soc_enum_dmic12sinc, AB8500_DMICFILTCONF,
+ AB8500_DMICFILTCONF_DMIC1SINC3,
+ AB8500_DMICFILTCONF_DMIC2SINC3, enum_sinc53);
+static SOC_ENUM_DOUBLE_DECL(soc_enum_dmic34sinc, AB8500_DMICFILTCONF,
+ AB8500_DMICFILTCONF_DMIC3SINC3,
+ AB8500_DMICFILTCONF_DMIC4SINC3, enum_sinc53);
+static SOC_ENUM_DOUBLE_DECL(soc_enum_dmic56sinc, AB8500_DMICFILTCONF,
+ AB8500_DMICFILTCONF_DMIC5SINC3,
+ AB8500_DMICFILTCONF_DMIC6SINC3, enum_sinc53);
+
+/* Class-D amps */
+static SOC_ENUM_DOUBLE_DECL(soc_enum_highvol01, AB8500_CLASSDCONF2,
+ AB8500_CLASSDCONF2_HIGHVOLEN0,
+ AB8500_CLASSDCONF2_HIGHVOLEN1, enum_dis_ena);
+static SOC_ENUM_DOUBLE_DECL(soc_enum_highvol23, AB8500_CLASSDCONF2,
+ AB8500_CLASSDCONF2_HIGHVOLEN2,
+ AB8500_CLASSDCONF2_HIGHVOLEN3, enum_dis_ena);
+
+/* Digital interface - Clocks */
+static SOC_ENUM_SINGLE_DECL(soc_enum_mastgen,
+ AB8500_DIGIFCONF1, AB8500_DIGIFCONF1_ENMASTGEN,
+ enum_dis_ena);
+static SOC_ENUM_SINGLE_DECL(soc_enum_fsbitclk0,
+ AB8500_DIGIFCONF1, AB8500_DIGIFCONF1_ENFSBITCLK0,
+ enum_dis_ena);
+static SOC_ENUM_SINGLE_DECL(soc_enum_fsbitclk1,
+ AB8500_DIGIFCONF1, AB8500_DIGIFCONF1_ENFSBITCLK1,
+ enum_dis_ena);
+static SOC_ENUM_SINGLE_EXT_DECL(soc_enum_mclk, enum_mclk);
+
+/* Digital interface - DA from slot mapping */
+static const char * const enum_da_from_slot_map[] = {"SLOT0",
+ "SLOT1",
+ "SLOT2",
+ "SLOT3",
+ "SLOT4",
+ "SLOT5",
+ "SLOT6",
+ "SLOT7",
+ "SLOT8",
+ "SLOT9",
+ "SLOT10",
+ "SLOT11",
+ "SLOT12",
+ "SLOT13",
+ "SLOT14",
+ "SLOT15",
+ "SLOT16",
+ "SLOT17",
+ "SLOT18",
+ "SLOT19",
+ "SLOT20",
+ "SLOT21",
+ "SLOT22",
+ "SLOT23",
+ "SLOT24",
+ "SLOT25",
+ "SLOT26",
+ "SLOT27",
+ "SLOT28",
+ "SLOT29",
+ "SLOT30",
+ "SLOT31"};
+static SOC_ENUM_SINGLE_DECL(soc_enum_da1slotmap,
+ AB8500_DASLOTCONF1, AB8500_DASLOTCONFX_SLTODAX_SHIFT,
+ enum_da_from_slot_map);
+static SOC_ENUM_SINGLE_DECL(soc_enum_da2slotmap,
+ AB8500_DASLOTCONF2, AB8500_DASLOTCONFX_SLTODAX_SHIFT,
+ enum_da_from_slot_map);
+static SOC_ENUM_SINGLE_DECL(soc_enum_da3slotmap,
+ AB8500_DASLOTCONF3, AB8500_DASLOTCONFX_SLTODAX_SHIFT,
+ enum_da_from_slot_map);
+static SOC_ENUM_SINGLE_DECL(soc_enum_da4slotmap,
+ AB8500_DASLOTCONF4, AB8500_DASLOTCONFX_SLTODAX_SHIFT,
+ enum_da_from_slot_map);
+static SOC_ENUM_SINGLE_DECL(soc_enum_da5slotmap,
+ AB8500_DASLOTCONF5, AB8500_DASLOTCONFX_SLTODAX_SHIFT,
+ enum_da_from_slot_map);
+static SOC_ENUM_SINGLE_DECL(soc_enum_da6slotmap,
+ AB8500_DASLOTCONF6, AB8500_DASLOTCONFX_SLTODAX_SHIFT,
+ enum_da_from_slot_map);
+static SOC_ENUM_SINGLE_DECL(soc_enum_da7slotmap,
+ AB8500_DASLOTCONF7, AB8500_DASLOTCONFX_SLTODAX_SHIFT,
+ enum_da_from_slot_map);
+static SOC_ENUM_SINGLE_DECL(soc_enum_da8slotmap,
+ AB8500_DASLOTCONF8, AB8500_DASLOTCONFX_SLTODAX_SHIFT,
+ enum_da_from_slot_map);
+
+/* Digital interface - AD to slot mapping */
+static const char * const enum_ad_to_slot_map[] = {"AD_OUT1",
+ "AD_OUT2",
+ "AD_OUT3",
+ "AD_OUT4",
+ "AD_OUT5",
+ "AD_OUT6",
+ "AD_OUT7",
+ "AD_OUT8",
+ "zeroes",
+ "tristate"};
+static SOC_ENUM_SINGLE_DECL(soc_enum_adslot0map,
+ AB8500_ADSLOTSEL1, AB8500_ADSLOTSELX_EVEN_SHIFT,
+ enum_ad_to_slot_map);
+static SOC_ENUM_SINGLE_DECL(soc_enum_adslot1map,
+ AB8500_ADSLOTSEL1, AB8500_ADSLOTSELX_ODD_SHIFT,
+ enum_ad_to_slot_map);
+static SOC_ENUM_SINGLE_DECL(soc_enum_adslot2map,
+ AB8500_ADSLOTSEL2, AB8500_ADSLOTSELX_EVEN_SHIFT,
+ enum_ad_to_slot_map);
+static SOC_ENUM_SINGLE_DECL(soc_enum_adslot3map,
+ AB8500_ADSLOTSEL2, AB8500_ADSLOTSELX_ODD_SHIFT,
+ enum_ad_to_slot_map);
+static SOC_ENUM_SINGLE_DECL(soc_enum_adslot4map,
+ AB8500_ADSLOTSEL3, AB8500_ADSLOTSELX_EVEN_SHIFT,
+ enum_ad_to_slot_map);
+static SOC_ENUM_SINGLE_DECL(soc_enum_adslot5map,
+ AB8500_ADSLOTSEL3, AB8500_ADSLOTSELX_ODD_SHIFT,
+ enum_ad_to_slot_map);
+static SOC_ENUM_SINGLE_DECL(soc_enum_adslot6map,
+ AB8500_ADSLOTSEL4, AB8500_ADSLOTSELX_EVEN_SHIFT,
+ enum_ad_to_slot_map);
+static SOC_ENUM_SINGLE_DECL(soc_enum_adslot7map,
+ AB8500_ADSLOTSEL4, AB8500_ADSLOTSELX_ODD_SHIFT,
+ enum_ad_to_slot_map);
+static SOC_ENUM_SINGLE_DECL(soc_enum_adslot8map,
+ AB8500_ADSLOTSEL5, AB8500_ADSLOTSELX_EVEN_SHIFT,
+ enum_ad_to_slot_map);
+static SOC_ENUM_SINGLE_DECL(soc_enum_adslot9map,
+ AB8500_ADSLOTSEL5, AB8500_ADSLOTSELX_ODD_SHIFT,
+ enum_ad_to_slot_map);
+static SOC_ENUM_SINGLE_DECL(soc_enum_adslot10map,
+ AB8500_ADSLOTSEL6, AB8500_ADSLOTSELX_EVEN_SHIFT,
+ enum_ad_to_slot_map);
+static SOC_ENUM_SINGLE_DECL(soc_enum_adslot11map,
+ AB8500_ADSLOTSEL6, AB8500_ADSLOTSELX_ODD_SHIFT,
+ enum_ad_to_slot_map);
+static SOC_ENUM_SINGLE_DECL(soc_enum_adslot12map,
+ AB8500_ADSLOTSEL7, AB8500_ADSLOTSELX_EVEN_SHIFT,
+ enum_ad_to_slot_map);
+static SOC_ENUM_SINGLE_DECL(soc_enum_adslot13map,
+ AB8500_ADSLOTSEL7, AB8500_ADSLOTSELX_ODD_SHIFT,
+ enum_ad_to_slot_map);
+static SOC_ENUM_SINGLE_DECL(soc_enum_adslot14map,
+ AB8500_ADSLOTSEL8, AB8500_ADSLOTSELX_EVEN_SHIFT,
+ enum_ad_to_slot_map);
+static SOC_ENUM_SINGLE_DECL(soc_enum_adslot15map,
+ AB8500_ADSLOTSEL8, AB8500_ADSLOTSELX_ODD_SHIFT,
+ enum_ad_to_slot_map);
+static SOC_ENUM_SINGLE_DECL(soc_enum_adslot16map,
+ AB8500_ADSLOTSEL9, AB8500_ADSLOTSELX_EVEN_SHIFT,
+ enum_ad_to_slot_map);
+static SOC_ENUM_SINGLE_DECL(soc_enum_adslot17map,
+ AB8500_ADSLOTSEL9, AB8500_ADSLOTSELX_ODD_SHIFT,
+ enum_ad_to_slot_map);
+static SOC_ENUM_SINGLE_DECL(soc_enum_adslot18map,
+ AB8500_ADSLOTSEL10, AB8500_ADSLOTSELX_EVEN_SHIFT,
+ enum_ad_to_slot_map);
+static SOC_ENUM_SINGLE_DECL(soc_enum_adslot19map,
+ AB8500_ADSLOTSEL10, AB8500_ADSLOTSELX_ODD_SHIFT,
+ enum_ad_to_slot_map);
+static SOC_ENUM_SINGLE_DECL(soc_enum_adslot20map,
+ AB8500_ADSLOTSEL11, AB8500_ADSLOTSELX_EVEN_SHIFT,
+ enum_ad_to_slot_map);
+static SOC_ENUM_SINGLE_DECL(soc_enum_adslot21map,
+ AB8500_ADSLOTSEL11, AB8500_ADSLOTSELX_ODD_SHIFT,
+ enum_ad_to_slot_map);
+static SOC_ENUM_SINGLE_DECL(soc_enum_adslot22map,
+ AB8500_ADSLOTSEL12, AB8500_ADSLOTSELX_EVEN_SHIFT,
+ enum_ad_to_slot_map);
+static SOC_ENUM_SINGLE_DECL(soc_enum_adslot23map,
+ AB8500_ADSLOTSEL12, AB8500_ADSLOTSELX_ODD_SHIFT,
+ enum_ad_to_slot_map);
+static SOC_ENUM_SINGLE_DECL(soc_enum_adslot24map,
+ AB8500_ADSLOTSEL13, AB8500_ADSLOTSELX_EVEN_SHIFT,
+ enum_ad_to_slot_map);
+static SOC_ENUM_SINGLE_DECL(soc_enum_adslot25map,
+ AB8500_ADSLOTSEL13, AB8500_ADSLOTSELX_ODD_SHIFT,
+ enum_ad_to_slot_map);
+static SOC_ENUM_SINGLE_DECL(soc_enum_adslot26map,
+ AB8500_ADSLOTSEL14, AB8500_ADSLOTSELX_EVEN_SHIFT,
+ enum_ad_to_slot_map);
+static SOC_ENUM_SINGLE_DECL(soc_enum_adslot27map,
+ AB8500_ADSLOTSEL14, AB8500_ADSLOTSELX_ODD_SHIFT,
+ enum_ad_to_slot_map);
+static SOC_ENUM_SINGLE_DECL(soc_enum_adslot28map,
+ AB8500_ADSLOTSEL15, AB8500_ADSLOTSELX_EVEN_SHIFT,
+ enum_ad_to_slot_map);
+static SOC_ENUM_SINGLE_DECL(soc_enum_adslot29map,
+ AB8500_ADSLOTSEL15, AB8500_ADSLOTSELX_ODD_SHIFT,
+ enum_ad_to_slot_map);
+static SOC_ENUM_SINGLE_DECL(soc_enum_adslot30map,
+ AB8500_ADSLOTSEL16, AB8500_ADSLOTSELX_EVEN_SHIFT,
+ enum_ad_to_slot_map);
+static SOC_ENUM_SINGLE_DECL(soc_enum_adslot31map,
+ AB8500_ADSLOTSEL16, AB8500_ADSLOTSELX_ODD_SHIFT,
+ enum_ad_to_slot_map);
+
+/* Digital interface - Digital loopback */
+static SOC_ENUM_SINGLE_DECL(soc_enum_ad1loop,
+ AB8500_DASLOTCONF1, AB8500_DASLOTCONF1_DAI7TOADO1,
+ enum_dis_ena);
+static SOC_ENUM_SINGLE_DECL(soc_enum_ad2loop,
+ AB8500_DASLOTCONF2, AB8500_DASLOTCONF2_DAI8TOADO2,
+ enum_dis_ena);
+static SOC_ENUM_SINGLE_DECL(soc_enum_ad3loop,
+ AB8500_DASLOTCONF3, AB8500_DASLOTCONF3_DAI7TOADO3,
+ enum_dis_ena);
+static SOC_ENUM_SINGLE_DECL(soc_enum_ad4loop,
+ AB8500_DASLOTCONF4, AB8500_DASLOTCONF4_DAI8TOADO4,
+ enum_dis_ena);
+static SOC_ENUM_SINGLE_DECL(soc_enum_ad5loop,
+ AB8500_DASLOTCONF5, AB8500_DASLOTCONF5_DAI7TOADO5,
+ enum_dis_ena);
+static SOC_ENUM_SINGLE_DECL(soc_enum_ad6loop,
+ AB8500_DASLOTCONF6, AB8500_DASLOTCONF6_DAI8TOADO6,
+ enum_dis_ena);
+static SOC_ENUM_SINGLE_DECL(soc_enum_ad7loop,
+ AB8500_DASLOTCONF7, AB8500_DASLOTCONF7_DAI8TOADO7,
+ enum_dis_ena);
+static SOC_ENUM_SINGLE_DECL(soc_enum_ad8loop,
+ AB8500_DASLOTCONF8, AB8500_DASLOTCONF8_DAI7TOADO8,
+ enum_dis_ena);
+
+/* Digital interface - Burst mode */
+static SOC_ENUM_SINGLE_DECL(soc_enum_if0fifoen,
+ AB8500_DIGIFCONF3, AB8500_DIGIFCONF3_IF0BFIFOEN,
+ enum_dis_ena);
+static const char * const enum_mask[] = {"Unmasked", "Masked"};
+static SOC_ENUM_SINGLE_DECL(soc_enum_bfifomask,
+ AB8500_FIFOCONF1, AB8500_FIFOCONF1_BFIFOMASK,
+ enum_mask);
+static const char * const enum_bitclk0[] = {"19_2_MHz", "38_4_MHz"};
+static SOC_ENUM_SINGLE_DECL(soc_enum_bfifo19m2,
+ AB8500_FIFOCONF1, AB8500_FIFOCONF1_BFIFO19M2,
+ enum_bitclk0);
+static const char * const enum_slavemaster[] = {"Slave", "Master"};
+static SOC_ENUM_SINGLE_DECL(soc_enum_bfifomast,
+ AB8500_FIFOCONF3, AB8500_FIFOCONF3_BFIFOMAST_SHIFT,
+ enum_slavemaster);
+static SOC_ENUM_SINGLE_DECL(soc_enum_bfifoint,
+ AB8500_FIFOCONF3, AB8500_FIFOCONF3_BFIFORUN_SHIFT,
+ enum_dis_ena);
+
+/* Sidetone */
+static SOC_ENUM_SINGLE_EXT_DECL(soc_enum_sidstate, enum_sid_state);
+
+/* ANC */
+static SOC_ENUM_SINGLE_EXT_DECL(soc_enum_ancstate, enum_anc_state);
+
+static struct snd_kcontrol_new ab8500_ctrls[] = {
+ /* Charge pump */
+ SOC_ENUM("Charge Pump High Threshold For Low Voltage",
+ soc_enum_envdeththre),
+ SOC_ENUM("Charge Pump Low Threshold For Low Voltage",
+ soc_enum_envdetlthre),
+ SOC_ENUM("Charge Pump Envelope Detection", soc_enum_envdetcpen),
+ SOC_ENUM("Charge Pump Envelope Detection Decay Time",
+ soc_enum_envdettime),
+
+ /* Headset */
+ SOC_ENUM("Headset Mode", soc_enum_da12voice),
+ SOC_ENUM("Headset High Pass", soc_enum_hshpen),
+ SOC_ENUM("Headset Low Power", soc_enum_hslowpow),
+ SOC_ENUM("Headset DAC Low Power", soc_enum_daclowpow1),
+ SOC_ENUM("Headset DAC Drv Low Power",
+ soc_enum_daclowpow0),
+ SOC_ENUM("Headset Fade Speed", soc_enum_hsfadspeed),
+ SOC_ENUM("Headset Source", soc_enum_da2hslr),
+ SOC_ENUM("Headset Filter", soc_enum_hsesinc),
+ SOC_DOUBLE_R_TLV("Headset Master Gain",
+ AB8500_DADIGGAIN1, AB8500_DADIGGAIN2,
+ 0, AB8500_DADIGGAINX_DAXGAIN_MAX, 1, dax_dig_gain_tlv),
+ SOC_DOUBLE_R_TLV("Headset Digital Gain",
+ AB8500_HSLEARDIGGAIN, AB8500_HSRDIGGAIN,
+ 0, AB8500_HSLEARDIGGAIN_HSLDGAIN_MAX, 1, hs_ear_dig_gain_tlv),
+ SOC_DOUBLE_TLV("Headset Gain",
+ AB8500_ANAGAIN3,
+ AB8500_ANAGAIN3_HSLGAIN, AB8500_ANAGAIN3_HSRGAIN,
+ AB8500_ANAGAIN3_HSXGAIN_MAX, 1, hs_gain_tlv),
+
+ /* Earpiece */
+ SOC_ENUM("Earpiece DAC Mode",
+ soc_enum_eardaclowpow),
+ SOC_ENUM("Earpiece DAC Drv Mode",
+ soc_enum_eardrvlowpow),
+
+ /* HandsFree */
+ SOC_ENUM("HF Mode", soc_enum_da34voice),
+ SOC_ENUM("HF and Headset Swap", soc_enum_swapda12_34),
+ SOC_ENUM("HF Low EMI Mode", soc_enum_hflrswap),
+ SOC_ENUM("HF FIR Bypass", soc_enum_fir01byp),
+ SOC_ENUM("HF High Volume", soc_enum_highvol01),
+ SOC_ENUM("HF L and R Bridge", soc_enum_parlhf),
+ SOC_DOUBLE_R_TLV("HF Master Gain",
+ AB8500_DADIGGAIN3, AB8500_DADIGGAIN4,
+ 0, AB8500_DADIGGAINX_DAXGAIN_MAX, 1, dax_dig_gain_tlv),
+
+ /* Vibra */
+ SOC_ENUM("Vibra High Volume", soc_enum_highvol23),
+ SOC_ENUM("Vibra Low EMI Mode", soc_enum_vib12swap),
+ SOC_ENUM("Vibra FIR Bypass", soc_enum_fir23byp),
+ SOC_ENUM("Vibra Mode", soc_enum_da56voice),
+ SOC_DOUBLE_R("Vibra PWM Duty Cycle N",
+ AB8500_PWMGENCONF3, AB8500_PWMGENCONF5,
+ AB8500_PWMGENCONFX_PWMVIBXDUTCYC,
+ AB8500_PWMGENCONFX_PWMVIBXDUTCYC_MAX, 0),
+ SOC_DOUBLE_R("Vibra PWM Duty Cycle P",
+ AB8500_PWMGENCONF2, AB8500_PWMGENCONF4,
+ AB8500_PWMGENCONFX_PWMVIBXDUTCYC,
+ AB8500_PWMGENCONFX_PWMVIBXDUTCYC_MAX, 0),
+ SOC_ENUM("Vibra 1 and 2 Bridge", soc_enum_parlvib),
+ SOC_DOUBLE_R_TLV("Vibra Master Gain",
+ AB8500_DADIGGAIN5, AB8500_DADIGGAIN6,
+ 0, AB8500_DADIGGAINX_DAXGAIN_MAX, 1, dax_dig_gain_tlv),
+
+ /* HandsFree, Vibra */
+ SOC_SINGLE("ClassD High Pass Gain",
+ AB8500_CLASSDCONF3, AB8500_CLASSDCONF3_DITHHPGAIN,
+ AB8500_CLASSDCONF3_DITHHPGAIN_MAX, 0),
+ SOC_SINGLE("ClassD White Gain",
+ AB8500_CLASSDCONF3, AB8500_CLASSDCONF3_DITHWGAIN,
+ AB8500_CLASSDCONF3_DITHWGAIN_MAX, 0),
+
+ /* Mic 1, Mic 2, LineIn */
+ SOC_DOUBLE_R_TLV("Mic Master Gain",
+ AB8500_ADDIGGAIN3, AB8500_ADDIGGAIN4,
+ 0, AB8500_ADDIGGAINX_ADXGAIN_MAX, 1, adx_dig_gain_tlv),
+
+ /* Mic 1 */
+ SOC_ENUM("Mic 1 Low Power", soc_enum_lowpowmic1),
+ SOC_ENUM("Mic 2 Low Power", soc_enum_lowpowmic2),
+ SOC_SINGLE_TLV("Mic 1",
+ AB8500_ANAGAIN1,
+ AB8500_ANAGAINX_MICXGAIN,
+ AB8500_ANAGAINX_MICXGAIN_MAX, 0, mic_gain_tlv),
+
+ /* Mic 2 */
+ SOC_ENUM("Mic High Pass", soc_enum_ad34nh),
+ SOC_ENUM("Mic Mode", soc_enum_ad34voice),
+ SOC_ENUM("Mic Filter", soc_enum_dmic34sinc),
+ SOC_SINGLE_TLV("Mic 2",
+ AB8500_ANAGAIN2,
+ AB8500_ANAGAINX_MICXGAIN,
+ AB8500_ANAGAINX_MICXGAIN_MAX, 0, mic_gain_tlv),
+
+ /* LineIn */
+ SOC_ENUM("LineIn High Pass", soc_enum_ad12nh),
+ SOC_ENUM("LineIn Filter", soc_enum_dmic12sinc),
+ SOC_ENUM("LineIn Mode", soc_enum_ad12voice),
+ SOC_DOUBLE_R_TLV("LineIn Master Gain",
+ AB8500_ADDIGGAIN1, AB8500_ADDIGGAIN2,
+ 0, AB8500_ADDIGGAINX_ADXGAIN_MAX, 1, adx_dig_gain_tlv),
+ SOC_DOUBLE_TLV("LineIn",
+ AB8500_ANAGAIN4,
+ AB8500_ANAGAIN4_LINLGAIN, AB8500_ANAGAIN4_LINRGAIN,
+ AB8500_ANAGAIN4_LINXGAIN_MAX, 0, lin_gain_tlv),
+ SOC_DOUBLE_R_TLV("LineIn to Headset Bypass",
+ AB8500_DIGLINHSLGAIN, AB8500_DIGLINHSRGAIN,
+ AB8500_DIGLINHSXGAIN_LINTOHSXGAIN,
+ AB8500_DIGLINHSXGAIN_LINTOHSXGAIN_MAX, 1, lin2hs_gain_tlv),
+
+ /* DMic */
+ SOC_ENUM("DMic Filter", soc_enum_dmic56sinc),
+ SOC_DOUBLE_R_TLV("DMic Master Gain",
+ AB8500_ADDIGGAIN5, AB8500_ADDIGGAIN6,
+ 0, AB8500_ADDIGGAINX_ADXGAIN_MAX, 1, adx_dig_gain_tlv),
+
+ /* Digital gains */
+ SOC_ENUM("Digital Gain Fade Speed Switch", soc_enum_fadespeed),
+
+ /* Analog loopback */
+ SOC_DOUBLE_R_TLV("Analog Loopback Gain",
+ AB8500_ADDIGLOOPGAIN1, AB8500_ADDIGLOOPGAIN2,
+ 0, AB8500_ADDIGLOOPGAINX_ADXLBGAIN_MAX, 1, dax_dig_gain_tlv),
+
+ /* Digital interface - Clocks */
+ SOC_ENUM("Digital Interface Master Generator Switch", soc_enum_mastgen),
+ SOC_ENUM_EXT("Master Clock Select",
+ soc_enum_mclk,
+ mclk_input_control_get, mclk_input_control_put),
+ SOC_ENUM("Digital Interface 0 Bit-clock Switch", soc_enum_fsbitclk0),
+ SOC_ENUM("Digital Interface 1 Bit-clock Switch", soc_enum_fsbitclk1),
+
+ /* Digital interface - DA from slot mapping */
+ SOC_ENUM("Digital Interface DA 1 From Slot Map", soc_enum_da1slotmap),
+ SOC_ENUM("Digital Interface DA 2 From Slot Map", soc_enum_da2slotmap),
+ SOC_ENUM("Digital Interface DA 3 From Slot Map", soc_enum_da3slotmap),
+ SOC_ENUM("Digital Interface DA 4 From Slot Map", soc_enum_da4slotmap),
+ SOC_ENUM("Digital Interface DA 5 From Slot Map", soc_enum_da5slotmap),
+ SOC_ENUM("Digital Interface DA 6 From Slot Map", soc_enum_da6slotmap),
+ SOC_ENUM("Digital Interface DA 7 From Slot Map", soc_enum_da7slotmap),
+ SOC_ENUM("Digital Interface DA 8 From Slot Map", soc_enum_da8slotmap),
+
+ /* Digital interface - AD to slot mapping */
+ SOC_ENUM("Digital Interface AD To Slot 0 Map", soc_enum_adslot0map),
+ SOC_ENUM("Digital Interface AD To Slot 1 Map", soc_enum_adslot1map),
+ SOC_ENUM("Digital Interface AD To Slot 2 Map", soc_enum_adslot2map),
+ SOC_ENUM("Digital Interface AD To Slot 3 Map", soc_enum_adslot3map),
+ SOC_ENUM("Digital Interface AD To Slot 4 Map", soc_enum_adslot4map),
+ SOC_ENUM("Digital Interface AD To Slot 5 Map", soc_enum_adslot5map),
+ SOC_ENUM("Digital Interface AD To Slot 6 Map", soc_enum_adslot6map),
+ SOC_ENUM("Digital Interface AD To Slot 7 Map", soc_enum_adslot7map),
+ SOC_ENUM("Digital Interface AD To Slot 8 Map", soc_enum_adslot8map),
+ SOC_ENUM("Digital Interface AD To Slot 9 Map", soc_enum_adslot9map),
+ SOC_ENUM("Digital Interface AD To Slot 10 Map", soc_enum_adslot10map),
+ SOC_ENUM("Digital Interface AD To Slot 11 Map", soc_enum_adslot11map),
+ SOC_ENUM("Digital Interface AD To Slot 12 Map", soc_enum_adslot12map),
+ SOC_ENUM("Digital Interface AD To Slot 13 Map", soc_enum_adslot13map),
+ SOC_ENUM("Digital Interface AD To Slot 14 Map", soc_enum_adslot14map),
+ SOC_ENUM("Digital Interface AD To Slot 15 Map", soc_enum_adslot15map),
+ SOC_ENUM("Digital Interface AD To Slot 16 Map", soc_enum_adslot16map),
+ SOC_ENUM("Digital Interface AD To Slot 17 Map", soc_enum_adslot17map),
+ SOC_ENUM("Digital Interface AD To Slot 18 Map", soc_enum_adslot18map),
+ SOC_ENUM("Digital Interface AD To Slot 19 Map", soc_enum_adslot19map),
+ SOC_ENUM("Digital Interface AD To Slot 20 Map", soc_enum_adslot20map),
+ SOC_ENUM("Digital Interface AD To Slot 21 Map", soc_enum_adslot21map),
+ SOC_ENUM("Digital Interface AD To Slot 22 Map", soc_enum_adslot22map),
+ SOC_ENUM("Digital Interface AD To Slot 23 Map", soc_enum_adslot23map),
+ SOC_ENUM("Digital Interface AD To Slot 24 Map", soc_enum_adslot24map),
+ SOC_ENUM("Digital Interface AD To Slot 25 Map", soc_enum_adslot25map),
+ SOC_ENUM("Digital Interface AD To Slot 26 Map", soc_enum_adslot26map),
+ SOC_ENUM("Digital Interface AD To Slot 27 Map", soc_enum_adslot27map),
+ SOC_ENUM("Digital Interface AD To Slot 28 Map", soc_enum_adslot28map),
+ SOC_ENUM("Digital Interface AD To Slot 29 Map", soc_enum_adslot29map),
+ SOC_ENUM("Digital Interface AD To Slot 30 Map", soc_enum_adslot30map),
+ SOC_ENUM("Digital Interface AD To Slot 31 Map", soc_enum_adslot31map),
+
+ /* Digital interface - Loopback */
+ SOC_ENUM("Digital Interface AD 1 Loopback Switch", soc_enum_ad1loop),
+ SOC_ENUM("Digital Interface AD 2 Loopback Switch", soc_enum_ad2loop),
+ SOC_ENUM("Digital Interface AD 3 Loopback Switch", soc_enum_ad3loop),
+ SOC_ENUM("Digital Interface AD 4 Loopback Switch", soc_enum_ad4loop),
+ SOC_ENUM("Digital Interface AD 5 Loopback Switch", soc_enum_ad5loop),
+ SOC_ENUM("Digital Interface AD 6 Loopback Switch", soc_enum_ad6loop),
+ SOC_ENUM("Digital Interface AD 7 Loopback Switch", soc_enum_ad7loop),
+ SOC_ENUM("Digital Interface AD 8 Loopback Switch", soc_enum_ad8loop),
+
+ /* Digital interface - Burst FIFO */
+ SOC_ENUM("Digital Interface 0 FIFO Enable Switch", soc_enum_if0fifoen),
+ SOC_ENUM("Burst FIFO Mask", soc_enum_bfifomask),
+ SOC_ENUM("Burst FIFO Bit-clock Frequency", soc_enum_bfifo19m2),
+ SOC_SINGLE("Burst FIFO Threshold",
+ AB8500_FIFOCONF1,
+ AB8500_FIFOCONF1_BFIFOINT_SHIFT,
+ AB8500_FIFOCONF1_BFIFOINT_MAX,
+ 0),
+ SOC_SINGLE("Burst FIFO Length",
+ AB8500_FIFOCONF2,
+ AB8500_FIFOCONF2_BFIFOTX_SHIFT,
+ AB8500_FIFOCONF2_BFIFOTX_MAX,
+ 0),
+ SOC_SINGLE("Burst FIFO EOS Extra Slots",
+ AB8500_FIFOCONF3,
+ AB8500_FIFOCONF3_BFIFOEXSL_SHIFT,
+ AB8500_FIFOCONF3_BFIFOEXSL_MAX,
+ 0),
+ SOC_SINGLE("Burst FIFO FS Extra Bit-clocks",
+ AB8500_FIFOCONF3,
+ AB8500_FIFOCONF3_PREBITCLK0_SHIFT,
+ AB8500_FIFOCONF3_PREBITCLK0_MAX,
+ 0),
+ SOC_ENUM("Burst FIFO Interface Mode", soc_enum_bfifomast),
+ SOC_ENUM("Burst FIFO Interface Switch", soc_enum_bfifoint),
+ SOC_SINGLE("Burst FIFO Switch Frame Number",
+ AB8500_FIFOCONF4,
+ AB8500_FIFOCONF4_BFIFOFRAMSW_SHIFT,
+ AB8500_FIFOCONF4_BFIFOFRAMSW_MAX,
+ 0),
+ SOC_SINGLE("Burst FIFO Wake Up Delay",
+ AB8500_FIFOCONF5,
+ AB8500_FIFOCONF5_BFIFOWAKEUP_SHIFT,
+ AB8500_FIFOCONF5_BFIFOWAKEUP_MAX,
+ 0),
+ SOC_SINGLE("Burst FIFO Samples In FIFO",
+ AB8500_FIFOCONF6,
+ AB8500_FIFOCONF6_BFIFOSAMPLE_SHIFT,
+ AB8500_FIFOCONF6_BFIFOSAMPLE_MAX,
+ 0),
+
+ /* ANC */
+ SOC_ENUM_EXT("ANC Status", soc_enum_ancstate,
+ anc_status_control_get, anc_status_control_put),
+ SOC_SINGLE_XR_SX("ANC Warp Delay Shift",
+ AB8500_ANCCONF2, 1, AB8500_ANCCONF2_SHIFT,
+ AB8500_ANCCONF2_MIN, AB8500_ANCCONF2_MAX, 0),
+ SOC_SINGLE_XR_SX("ANC FIR Output Shift",
+ AB8500_ANCCONF3, 1, AB8500_ANCCONF3_SHIFT,
+ AB8500_ANCCONF3_MIN, AB8500_ANCCONF3_MAX, 0),
+ SOC_SINGLE_XR_SX("ANC IIR Output Shift",
+ AB8500_ANCCONF4, 1, AB8500_ANCCONF4_SHIFT,
+ AB8500_ANCCONF4_MIN, AB8500_ANCCONF4_MAX, 0),
+ SOC_SINGLE_XR_SX("ANC Warp Delay",
+ AB8500_ANCCONF9, 2, AB8500_ANC_WARP_DELAY_SHIFT,
+ AB8500_ANC_WARP_DELAY_MIN, AB8500_ANC_WARP_DELAY_MAX, 0),
+
+ /* Sidetone */
+ SOC_ENUM_EXT("Sidetone Status", soc_enum_sidstate,
+ sid_status_control_get, sid_status_control_put),
+ SOC_SINGLE_STROBE("Sidetone Reset",
+ AB8500_SIDFIRADR, AB8500_SIDFIRADR_FIRSIDSET, 0),
+};
+
+static struct snd_kcontrol_new ab8500_filter_controls[] = {
+ AB8500_FILTER_CONTROL("ANC FIR Coefficients", AB8500_ANC_FIR_COEFFS,
+ AB8500_ANC_FIR_COEFF_MIN, AB8500_ANC_FIR_COEFF_MAX),
+ AB8500_FILTER_CONTROL("ANC IIR Coefficients", AB8500_ANC_IIR_COEFFS,
+ AB8500_ANC_IIR_COEFF_MIN, AB8500_ANC_IIR_COEFF_MAX),
+ AB8500_FILTER_CONTROL("Sidetone FIR Coefficients",
+ AB8500_SID_FIR_COEFFS, AB8500_SID_FIR_COEFF_MIN,
+ AB8500_SID_FIR_COEFF_MAX)
+};
+enum ab8500_filter {
+ AB8500_FILTER_ANC_FIR = 0,
+ AB8500_FILTER_ANC_IIR = 1,
+ AB8500_FILTER_SID_FIR = 2,
+};
+
+static int ab8500_codec_set_format_if1(struct snd_soc_codec *codec,
+ unsigned int fmt)
+{
+ unsigned int mask, val;
+
+ /* Master or slave */
+
+ mask = BIT(AB8500_DIGIFCONF3_IF1MASTER);
+ val = 0;
+
+ switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
+ case SND_SOC_DAIFMT_CBM_CFM: /* codec clk & FRM master */
+ dev_dbg(codec->dev, "%s: IF1 Master-mode: AB8500 master.\n",
+ __func__);
+ val |= BIT(AB8500_DIGIFCONF3_IF1MASTER);
+ break;
+ case SND_SOC_DAIFMT_CBS_CFS: /* codec clk & FRM slave */
+ dev_dbg(codec->dev, "%s: IF1 Master-mode: AB8500 slave.\n",
+ __func__);
+ break;
+ case SND_SOC_DAIFMT_CBS_CFM: /* codec clk slave & FRM master */
+ case SND_SOC_DAIFMT_CBM_CFS: /* codec clk master & frame slave */
+ dev_err(codec->dev,
+ "%s: ERROR: The device is either a master or a slave.\n",
+ __func__);
+ default:
+ dev_err(codec->dev,
+ "%s: ERROR: Unsupported master mask 0x%x\n",
+ __func__, fmt & SND_SOC_DAIFMT_MASTER_MASK);
+ return -EINVAL;
+ }
+
+ snd_soc_update_bits(codec, AB8500_DIGIFCONF3,
+ BIT(AB8500_DIGIFCONF3_IF1MASTER),
+ BIT(AB8500_DIGIFCONF3_IF1MASTER));
+
+ /* I2S or TDM */
+
+ mask = BIT(AB8500_DIGIFCONF4_FSYNC1P) |
+ BIT(AB8500_DIGIFCONF4_BITCLK1P) |
+ BIT(AB8500_DIGIFCONF4_IF1FORMAT1) |
+ BIT(AB8500_DIGIFCONF4_IF1FORMAT0);
+ val = 0;
+
+ switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
+ case SND_SOC_DAIFMT_I2S: /* I2S mode */
+ dev_dbg(codec->dev, "%s: IF1 Protocol: I2S\n", __func__);
+ val |= BIT(AB8500_DIGIFCONF4_IF1FORMAT1);
+ break;
+ case SND_SOC_DAIFMT_DSP_B: /* L data MSB during FRM LRC */
+ dev_dbg(codec->dev, "%s: IF1 Protocol: DSP B (TDM)\n",
+ __func__);
+ val |= BIT(AB8500_DIGIFCONF4_IF1FORMAT0);
+ break;
+ default:
+ dev_err(codec->dev, "%s: ERROR: Unsupported format (0x%x)!\n",
+ __func__, fmt & SND_SOC_DAIFMT_FORMAT_MASK);
+ return -EINVAL;
+ }
+
+ snd_soc_update_bits(codec, AB8500_DIGIFCONF4, mask, val);
+
+ return 0;
+}
+
+static int ab8500_codec_set_word_length_if1(struct snd_soc_codec *codec,
+ unsigned int wl)
+{
+ unsigned int mask, val;
+
+ mask = BIT(AB8500_DIGIFCONF4_IF1WL1) |
+ BIT(AB8500_DIGIFCONF4_IF1WL0);
+ val = 0;
+
+ switch (wl) {
+ case 16:
+ break;
+ case 20:
+ val |= BIT(AB8500_DIGIFCONF4_IF1WL0);
+ break;
+ case 24:
+ val |= BIT(AB8500_DIGIFCONF4_IF1WL1);
+ break;
+ case 32:
+ val |= BIT(AB8500_DIGIFCONF2_IF0WL1) |
+ BIT(AB8500_DIGIFCONF2_IF0WL0);
+ break;
+ default:
+ dev_err(codec->dev, "%s: Unsupporter word-length 0x%x\n",
+ __func__, wl);
+ return -EINVAL;
+ }
+
+ dev_dbg(codec->dev, "%s: Word-length: %d bits.\n", __func__, wl);
+ snd_soc_update_bits(codec, AB8500_DIGIFCONF4, mask, val);
+
+ return 0;
+}
+
+static int ab8500_codec_set_bit_delay_if1(struct snd_soc_codec *codec,
+ unsigned int delay)
+{
+ unsigned int mask, val;
+
+ mask = BIT(AB8500_DIGIFCONF4_IF1DEL);
+ val = 0;
+
+ switch (delay) {
+ case 0:
+ break;
+ case 1:
+ val |= BIT(AB8500_DIGIFCONF4_IF1DEL);
+ break;
+ default:
+ dev_err(codec->dev,
+ "%s: ERROR: Unsupported bit-delay (0x%x)!\n",
+ __func__, delay);
+ return -EINVAL;
+ }
+
+ dev_dbg(codec->dev, "%s: IF1 Bit-delay: %d bits.\n", __func__, delay);
+ snd_soc_update_bits(codec, AB8500_DIGIFCONF4, mask, val);
+
+ return 0;
+}
+
+/*
+ * Extended interface for codec-driver
+ */
+
+int ab8500_audio_init_audioblock(struct snd_soc_codec *codec)
+{
+ int status;
+
+ dev_dbg(codec->dev, "%s: Enter.\n", __func__);
+
+ /* Reset audio-registers and disable 32kHz-clock output 2 */
+ status = ab8500_sysctrl_write(AB8500_STW4500CTRL3,
+ AB8500_STW4500CTRL3_CLK32KOUT2DIS |
+ AB8500_STW4500CTRL3_RESETAUDN,
+ AB8500_STW4500CTRL3_RESETAUDN);
+ if (status < 0)
+ return status;
+
+ return 0;
+}
+
+int ab8500_audio_setup_mics(struct snd_soc_codec *codec,
+ struct amic_settings *amics)
+{
+ u8 value8;
+ unsigned int value;
+ int status;
+ const struct snd_soc_dapm_route *route;
+
+ dev_dbg(codec->dev, "%s: Enter.\n", __func__);
+
+ /* Set DMic-clocks to outputs */
+ status = abx500_get_register_interruptible(codec->dev, (u8)AB8500_MISC,
+ (u8)AB8500_GPIO_DIR4_REG,
+ &value8);
+ if (status < 0)
+ return status;
+ value = value8 | GPIO27_DIR_OUTPUT | GPIO29_DIR_OUTPUT |
+ GPIO31_DIR_OUTPUT;
+ status = abx500_set_register_interruptible(codec->dev,
+ (u8)AB8500_MISC,
+ (u8)AB8500_GPIO_DIR4_REG,
+ value);
+ if (status < 0)
+ return status;
+
+ /* Attach regulators to AMic DAPM-paths */
+ dev_dbg(codec->dev, "%s: Mic 1a regulator: %s\n", __func__,
+ amic_micbias_str(amics->mic1a_micbias));
+ route = &ab8500_dapm_routes_mic1a_vamicx[amics->mic1a_micbias];
+ status = snd_soc_dapm_add_routes(&codec->dapm, route, 1);
+ dev_dbg(codec->dev, "%s: Mic 1b regulator: %s\n", __func__,
+ amic_micbias_str(amics->mic1b_micbias));
+ route = &ab8500_dapm_routes_mic1b_vamicx[amics->mic1b_micbias];
+ status |= snd_soc_dapm_add_routes(&codec->dapm, route, 1);
+ dev_dbg(codec->dev, "%s: Mic 2 regulator: %s\n", __func__,
+ amic_micbias_str(amics->mic2_micbias));
+ route = &ab8500_dapm_routes_mic2_vamicx[amics->mic2_micbias];
+ status |= snd_soc_dapm_add_routes(&codec->dapm, route, 1);
+ if (status < 0) {
+ dev_err(codec->dev,
+ "%s: Failed to add AMic-regulator DAPM-routes (%d).\n",
+ __func__, status);
+ return status;
+ }
+
+ /* Set AMic-configuration */
+ dev_dbg(codec->dev, "%s: Mic 1 mic-type: %s\n", __func__,
+ amic_type_str(amics->mic1_type));
+ snd_soc_update_bits(codec, AB8500_ANAGAIN1, AB8500_ANAGAINX_ENSEMICX,
+ amics->mic1_type == AMIC_TYPE_DIFFERENTIAL ?
+ 0 : AB8500_ANAGAINX_ENSEMICX);
+ dev_dbg(codec->dev, "%s: Mic 2 mic-type: %s\n", __func__,
+ amic_type_str(amics->mic2_type));
+ snd_soc_update_bits(codec, AB8500_ANAGAIN2, AB8500_ANAGAINX_ENSEMICX,
+ amics->mic2_type == AMIC_TYPE_DIFFERENTIAL ?
+ 0 : AB8500_ANAGAINX_ENSEMICX);
+
+ return 0;
+}
+
+int ab8500_audio_set_ear_cmv(struct snd_soc_codec *codec,
+ enum ear_cm_voltage ear_cmv)
+{
+ char *cmv_str;
+
+ switch (ear_cmv) {
+ case EAR_CMV_0_95V:
+ cmv_str = "0.95V";
+ break;
+ case EAR_CMV_1_10V:
+ cmv_str = "1.10V";
+ break;
+ case EAR_CMV_1_27V:
+ cmv_str = "1.27V";
+ break;
+ case EAR_CMV_1_58V:
+ cmv_str = "1.58V";
+ break;
+ default:
+ dev_err(codec->dev,
+ "%s: Unknown earpiece CM-voltage (%d)!\n",
+ __func__, (int)ear_cmv);
+ return -EINVAL;
+ }
+ dev_dbg(codec->dev, "%s: Earpiece CM-voltage: %s\n", __func__,
+ cmv_str);
+ snd_soc_update_bits(codec, AB8500_ANACONF1, AB8500_ANACONF1_EARSELCM,
+ ear_cmv);
+
+ return 0;
+}
+
+int ab8500_audio_setup_if1(struct snd_soc_codec *codec,
+ unsigned int fmt,
+ unsigned int wl,
+ unsigned int delay)
+{
+ int status;
+
+ dev_dbg(codec->dev, "%s: Enter.\n", __func__);
+
+ status = ab8500_codec_set_format_if1(codec, fmt);
+ if (status < 0)
+ return -1;
+
+ status = ab8500_codec_set_bit_delay_if1(codec, delay);
+ if (status < 0)
+ return -1;
+
+
+ status = ab8500_codec_set_word_length_if1(codec, wl);
+ if (status < 0)
+ return -1;
+
+ return 0;
+}
+
+static int ab8500_audio_set_bit_delay(struct snd_soc_dai *dai,
+ unsigned int delay)
+{
+ unsigned int mask, val;
+ struct snd_soc_codec *codec = dai->codec;
+
+ mask = BIT(AB8500_DIGIFCONF2_IF0DEL);
+ val = 0;
+
+ switch (delay) {
+ case 0:
+ break;
+ case 1:
+ val |= BIT(AB8500_DIGIFCONF2_IF0DEL);
+ break;
+ default:
+ dev_err(dai->codec->dev,
+ "%s: ERROR: Unsupported bit-delay (0x%x)!\n",
+ __func__, delay);
+ return -EINVAL;
+ }
+
+ dev_dbg(dai->codec->dev, "%s: IF0 Bit-delay: %d bits.\n",
+ __func__, delay);
+ snd_soc_update_bits(codec, AB8500_DIGIFCONF2, mask, val);
+
+ return 0;
+}
+
+static int ab8500_codec_pcm_hw_params(struct snd_pcm_substream *substream,
+ struct snd_pcm_hw_params *hw_params, struct snd_soc_dai *dai)
+{
+ dev_dbg(dai->codec->dev, "%s Enter.\n", __func__);
+
+ return 0;
+}
+
+/* Gates clocking according format mask */
+static int ab8500_codec_set_dai_clock_gate(struct snd_soc_codec *codec,
+ unsigned int fmt)
+{
+ unsigned int mask;
+ unsigned int val;
+
+ mask = BIT(AB8500_DIGIFCONF1_ENMASTGEN) |
+ BIT(AB8500_DIGIFCONF1_ENFSBITCLK0);
+
+ val = BIT(AB8500_DIGIFCONF1_ENMASTGEN);
+
+ switch (fmt & SND_SOC_DAIFMT_CLOCK_MASK) {
+ case SND_SOC_DAIFMT_CONT: /* continuous clock */
+ dev_dbg(codec->dev, "%s: IF0 Clock is continuous.\n",
+ __func__);
+ val |= BIT(AB8500_DIGIFCONF1_ENFSBITCLK0);
+ break;
+ case SND_SOC_DAIFMT_GATED: /* clock is gated */
+ dev_dbg(codec->dev, "%s: IF0 Clock is gated.\n",
+ __func__);
+ break;
+ default:
+ dev_err(codec->dev,
+ "%s: ERROR: Unsupported clock mask (0x%x)!\n",
+ __func__, fmt & SND_SOC_DAIFMT_CLOCK_MASK);
+ return -EINVAL;
+ }
+
+ snd_soc_update_bits(codec, AB8500_DIGIFCONF1, mask, val);
+
+ return 0;
+}
+
+static int ab8500_codec_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt)
+{
+ unsigned int mask;
+ unsigned int val;
+ struct snd_soc_codec *codec = dai->codec;
+ int status;
+
+ dev_dbg(codec->dev, "%s: Enter (fmt = 0x%x)\n", __func__, fmt);
+
+ mask = BIT(AB8500_DIGIFCONF3_IF1DATOIF0AD) |
+ BIT(AB8500_DIGIFCONF3_IF1CLKTOIF0CLK) |
+ BIT(AB8500_DIGIFCONF3_IF0BFIFOEN) |
+ BIT(AB8500_DIGIFCONF3_IF0MASTER);
+ val = 0;
+
+ switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
+ case SND_SOC_DAIFMT_CBM_CFM: /* codec clk & FRM master */
+ dev_dbg(dai->codec->dev,
+ "%s: IF0 Master-mode: AB8500 master.\n", __func__);
+ val |= BIT(AB8500_DIGIFCONF3_IF0MASTER);
+ break;
+ case SND_SOC_DAIFMT_CBS_CFS: /* codec clk & FRM slave */
+ dev_dbg(dai->codec->dev,
+ "%s: IF0 Master-mode: AB8500 slave.\n", __func__);
+ break;
+ case SND_SOC_DAIFMT_CBS_CFM: /* codec clk slave & FRM master */
+ case SND_SOC_DAIFMT_CBM_CFS: /* codec clk master & frame slave */
+ dev_err(dai->codec->dev,
+ "%s: ERROR: The device is either a master or a slave.\n",
+ __func__);
+ default:
+ dev_err(dai->codec->dev,
+ "%s: ERROR: Unsupporter master mask 0x%x\n",
+ __func__, fmt & SND_SOC_DAIFMT_MASTER_MASK);
+ return -EINVAL;
+ break;
+ }
+
+ snd_soc_update_bits(codec, AB8500_DIGIFCONF3, mask, val);
+
+ /* Set clock gating */
+ status = ab8500_codec_set_dai_clock_gate(codec, fmt);
+ if (status) {
+ dev_err(dai->codec->dev,
+ "%s: ERRROR: Failed to set clock gate (%d).\n",
+ __func__, status);
+ return status;
+ }
+
+ /* Setting data transfer format */
+
+ mask = BIT(AB8500_DIGIFCONF2_IF0FORMAT0) |
+ BIT(AB8500_DIGIFCONF2_IF0FORMAT1) |
+ BIT(AB8500_DIGIFCONF2_FSYNC0P) |
+ BIT(AB8500_DIGIFCONF2_BITCLK0P);
+ val = 0;
+
+ switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
+ case SND_SOC_DAIFMT_I2S: /* I2S mode */
+ dev_dbg(dai->codec->dev, "%s: IF0 Protocol: I2S\n", __func__);
+ val |= BIT(AB8500_DIGIFCONF2_IF0FORMAT1);
+ ab8500_audio_set_bit_delay(dai, 0);
+ break;
+
+ case SND_SOC_DAIFMT_DSP_A: /* L data MSB after FRM LRC */
+ dev_dbg(dai->codec->dev,
+ "%s: IF0 Protocol: DSP A (TDM)\n", __func__);
+ val |= BIT(AB8500_DIGIFCONF2_IF0FORMAT0);
+ ab8500_audio_set_bit_delay(dai, 1);
+ break;
+
+ case SND_SOC_DAIFMT_DSP_B: /* L data MSB during FRM LRC */
+ dev_dbg(dai->codec->dev,
+ "%s: IF0 Protocol: DSP B (TDM)\n", __func__);
+ val |= BIT(AB8500_DIGIFCONF2_IF0FORMAT0);
+ ab8500_audio_set_bit_delay(dai, 0);
+ break;
+
+ default:
+ dev_err(dai->codec->dev,
+ "%s: ERROR: Unsupported format (0x%x)!\n",
+ __func__, fmt & SND_SOC_DAIFMT_FORMAT_MASK);
+ return -EINVAL;
+ }
+
+ switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
+ case SND_SOC_DAIFMT_NB_NF: /* normal bit clock + frame */
+ dev_dbg(dai->codec->dev,
+ "%s: IF0: Normal bit clock, normal frame\n",
+ __func__);
+ break;
+ case SND_SOC_DAIFMT_NB_IF: /* normal BCLK + inv FRM */
+ dev_dbg(dai->codec->dev,
+ "%s: IF0: Normal bit clock, inverted frame\n",
+ __func__);
+ val |= BIT(AB8500_DIGIFCONF2_FSYNC0P);
+ break;
+ case SND_SOC_DAIFMT_IB_NF: /* invert BCLK + nor FRM */
+ dev_dbg(dai->codec->dev,
+ "%s: IF0: Inverted bit clock, normal frame\n",
+ __func__);
+ val |= BIT(AB8500_DIGIFCONF2_BITCLK0P);
+ break;
+ case SND_SOC_DAIFMT_IB_IF: /* invert BCLK + FRM */
+ dev_dbg(dai->codec->dev,
+ "%s: IF0: Inverted bit clock, inverted frame\n",
+ __func__);
+ val |= BIT(AB8500_DIGIFCONF2_FSYNC0P);
+ val |= BIT(AB8500_DIGIFCONF2_BITCLK0P);
+ break;
+ default:
+ dev_err(dai->codec->dev,
+ "%s: ERROR: Unsupported INV mask 0x%x\n",
+ __func__, fmt & SND_SOC_DAIFMT_INV_MASK);
+ return -EINVAL;
+ break;
+ }
+
+ snd_soc_update_bits(codec, AB8500_DIGIFCONF2, mask, val);
+
+ return 0;
+}
+
+static int ab8500_codec_set_dai_tdm_slot(struct snd_soc_dai *dai,
+ unsigned int tx_mask, unsigned int rx_mask,
+ int slots, int slot_width)
+{
+ struct snd_soc_codec *codec = dai->codec;
+ unsigned int val, mask, slots_active;
+
+ /* Only 16 bit slot width is supported at the moment in TDM mode */
+ if (slot_width != 16) {
+ dev_err(dai->codec->dev,
+ "%s: ERROR: Unsupported slot_width %d.\n",
+ __func__, slot_width);
+ return -EINVAL;
+ }
+
+ mask = BIT(AB8500_DIGIFCONF2_IF0WL0) |
+ BIT(AB8500_DIGIFCONF2_IF0WL1);
+ val = 0;
+
+ switch (slot_width) {
+ case 16:
+ break;
+ case 20:
+ val |= BIT(AB8500_DIGIFCONF2_IF0WL0);
+ break;
+ case 24:
+ val |= BIT(AB8500_DIGIFCONF2_IF0WL1);
+ break;
+ case 32:
+ val |= BIT(AB8500_DIGIFCONF2_IF0WL1) |
+ BIT(AB8500_DIGIFCONF2_IF0WL0);
+ break;
+ default:
+ dev_err(dai->codec->dev, "%s: Unsupported slot-width 0x%x\n",
+ __func__, slot_width);
+ return -EINVAL;
+ }
+
+ dev_dbg(dai->codec->dev, "%s: IF0 slot-width: %d bits.\n",
+ __func__, slot_width);
+ snd_soc_update_bits(codec, AB8500_DIGIFCONF2, mask, val);
+
+ /* Setup TDM clocking according to slot count */
+ dev_dbg(dai->codec->dev, "%s: Slots, total: %d\n", __func__, slots);
+ mask = BIT(AB8500_DIGIFCONF1_IF0BITCLKOS0) |
+ BIT(AB8500_DIGIFCONF1_IF0BITCLKOS1);
+ switch (slots) {
+ case 2:
+ val = AB8500_MASK_NONE;
+ break;
+ case 4:
+ val = BIT(AB8500_DIGIFCONF1_IF0BITCLKOS0);
+ break;
+ case 8:
+ val = BIT(AB8500_DIGIFCONF1_IF0BITCLKOS1);
+ break;
+ case 16:
+ val = BIT(AB8500_DIGIFCONF1_IF0BITCLKOS0) |
+ BIT(AB8500_DIGIFCONF1_IF0BITCLKOS1);
+ break;
+ default:
+ dev_err(dai->codec->dev,
+ "%s: ERROR: Unsupported number of slots (%d)!\n",
+ __func__, slots);
+ return -EINVAL;
+ }
+ snd_soc_update_bits(codec, AB8500_DIGIFCONF1, mask, val);
+
+ /* Setup TDM DA according to active tx slots */
+ mask = AB8500_DASLOTCONFX_SLTODAX_MASK;
+ slots_active = hweight32(tx_mask);
+ dev_dbg(dai->codec->dev, "%s: Slots, active, TX: %d\n", __func__,
+ slots_active);
+ switch (slots_active) {
+ case 0:
+ break;
+ case 1:
+ /* Slot 9 -> DA_IN1 & DA_IN3 */
+ snd_soc_update_bits(codec, AB8500_DASLOTCONF1, mask, 11);
+ snd_soc_update_bits(codec, AB8500_DASLOTCONF3, mask, 11);
+ snd_soc_update_bits(codec, AB8500_DASLOTCONF2, mask, 11);
+ snd_soc_update_bits(codec, AB8500_DASLOTCONF4, mask, 11);
+ break;
+ case 2:
+ /* Slot 9 -> DA_IN1 & DA_IN3, Slot 11 -> DA_IN2 & DA_IN4 */
+ snd_soc_update_bits(codec, AB8500_DASLOTCONF1, mask, 9);
+ snd_soc_update_bits(codec, AB8500_DASLOTCONF3, mask, 9);
+ snd_soc_update_bits(codec, AB8500_DASLOTCONF2, mask, 11);
+ snd_soc_update_bits(codec, AB8500_DASLOTCONF4, mask, 11);
+
+ break;
+ case 8:
+ dev_dbg(dai->codec->dev,
+ "%s: In 8-channel mode DA-from-slot mapping is set manually.",
+ __func__);
+ break;
+ default:
+ dev_err(dai->codec->dev,
+ "%s: Unsupported number of active TX-slots (%d)!\n",
+ __func__, slots_active);
+ return -EINVAL;
+ }
+
+ /* Setup TDM AD according to active RX-slots */
+ slots_active = hweight32(rx_mask);
+ dev_dbg(dai->codec->dev, "%s: Slots, active, RX: %d\n", __func__,
+ slots_active);
+ switch (slots_active) {
+ case 0:
+ break;
+ case 1:
+ /* AD_OUT3 -> slot 0 & 1 */
+ snd_soc_update_bits(codec, AB8500_ADSLOTSEL1, AB8500_MASK_ALL,
+ AB8500_ADSLOTSELX_AD_OUT3_TO_SLOT_EVEN |
+ AB8500_ADSLOTSELX_AD_OUT3_TO_SLOT_ODD);
+ break;
+ case 2:
+ /* AD_OUT3 -> slot 0, AD_OUT2 -> slot 1 */
+ snd_soc_update_bits(codec,
+ AB8500_ADSLOTSEL1,
+ AB8500_MASK_ALL,
+ AB8500_ADSLOTSELX_AD_OUT3_TO_SLOT_EVEN |
+ AB8500_ADSLOTSELX_AD_OUT2_TO_SLOT_ODD);
+ break;
+ case 8:
+ dev_dbg(dai->codec->dev,
+ "%s: In 8-channel mode AD-to-slot mapping is set manually.",
+ __func__);
+ break;
+ default:
+ dev_err(dai->codec->dev,
+ "%s: Unsupported number of active RX-slots (%d)!\n",
+ __func__, slots_active);
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+struct snd_soc_dai_driver ab8500_codec_dai[] = {
+ {
+ .name = "ab8500-codec-dai.0",
+ .id = 0,
+ .playback = {
+ .stream_name = "ab8500_0p",
+ .channels_min = 1,
+ .channels_max = 8,
+ .rates = AB8500_SUPPORTED_RATE,
+ .formats = AB8500_SUPPORTED_FMT,
+ },
+ .ops = (struct snd_soc_dai_ops[]) {
+ {
+ .hw_params = ab8500_codec_pcm_hw_params,
+ .set_tdm_slot = ab8500_codec_set_dai_tdm_slot,
+ .set_fmt = ab8500_codec_set_dai_fmt,
+ }
+ },
+ .symmetric_rates = 1
+ },
+ {
+ .name = "ab8500-codec-dai.1",
+ .id = 1,
+ .capture = {
+ .stream_name = "ab8500_0c",
+ .channels_min = 1,
+ .channels_max = 8,
+ .rates = AB8500_SUPPORTED_RATE,
+ .formats = AB8500_SUPPORTED_FMT,
+ },
+ .ops = (struct snd_soc_dai_ops[]) {
+ {
+ .hw_params = ab8500_codec_pcm_hw_params,
+ .set_tdm_slot = ab8500_codec_set_dai_tdm_slot,
+ .set_fmt = ab8500_codec_set_dai_fmt,
+ }
+ },
+ .symmetric_rates = 1
+ }
+};
+
+static int ab8500_codec_probe(struct snd_soc_codec *codec)
+{
+ struct device *dev = codec->dev;
+ struct ab8500_codec_drvdata *drvdata = dev_get_drvdata(dev);
+ struct filter_control *fc;
+ int status;
+
+ dev_dbg(dev, "%s: Enter.\n", __func__);
+
+ status = ab8500_audio_init_audioblock(codec);
+ if (status < 0) {
+ dev_err(dev, "%s: failed to init audio-block (%d)!\n",
+ __func__, status);
+ return status;
+ }
+
+ /* Override HW-defaults */
+ ab8500_codec_write_reg(codec,
+ AB8500_ANACONF5,
+ BIT(AB8500_ANACONF5_HSAUTOEN));
+ ab8500_codec_write_reg(codec,
+ AB8500_SHORTCIRCONF,
+ BIT(AB8500_SHORTCIRCONF_HSZCDDIS));
+
+ /* Add filter controls */
+ status = snd_soc_add_codec_controls(codec, ab8500_filter_controls,
+ ARRAY_SIZE(ab8500_filter_controls));
+ if (status < 0) {
+ dev_err(dev,
+ "%s: failed to add ab8500 filter controls (%d).\n",
+ __func__, status);
+ return status;
+ }
+ fc = (struct filter_control *)
+ &ab8500_filter_controls[AB8500_FILTER_ANC_FIR].private_value;
+ drvdata->anc_fir_values = (long *)fc->value;
+ fc = (struct filter_control *)
+ &ab8500_filter_controls[AB8500_FILTER_ANC_IIR].private_value;
+ drvdata->anc_iir_values = (long *)fc->value;
+ fc = (struct filter_control *)
+ &ab8500_filter_controls[AB8500_FILTER_SID_FIR].private_value;
+ drvdata->sid_fir_values = (long *)fc->value;
+
+ (void)snd_soc_dapm_disable_pin(&codec->dapm, "ANC Configure Input");
+
+ if (IS_ERR(drvdata->clk_ptr_sysclk)) {
+ dev_err(dev,
+ "%s: ERROR: Clocks needed for streaming not available!",
+ __func__);
+ return PTR_ERR(drvdata->clk_ptr_sysclk);
+ }
+
+ /* Get references to clock-nodes */
+ drvdata->clk_ptr_sysclk = NULL;
+ drvdata->clk_ptr_ulpclk = NULL;
+ drvdata->clk_ptr_intclk = NULL;
+ drvdata->clk_ptr_sysclk = clk_get(dev, "sysclk");
+ if (IS_ERR(drvdata->clk_ptr_sysclk))
+ dev_warn(dev, "WARNING: clk_get failed for 'sysclk'!\n");
+ drvdata->clk_ptr_ulpclk = clk_get(dev, "ulpclk");
+ if (IS_ERR(drvdata->clk_ptr_ulpclk))
+ dev_warn(dev, "WARNING: clk_get failed for 'ulpclk'!\n");
+ drvdata->clk_ptr_intclk = clk_get(dev, "intclk");
+ if (IS_ERR(drvdata->clk_ptr_intclk))
+ dev_warn(dev, "WARNING: clk_get failed for 'intclk'!\n");
+
+ /* Set intclk default parent to ulpclk */
+ status = clk_set_parent(drvdata->clk_ptr_intclk,
+ drvdata->clk_ptr_ulpclk);
+ if (status)
+ dev_warn(dev,
+ "%s: WARNING: Setting intclk parent to ulpclk failed (ret = %d)!",
+ __func__, status);
+
+ drvdata->mclk_sel = MCLK_ULPCLK;
+
+ return status;
+}
+
+static struct snd_soc_codec_driver ab8500_codec_driver = {
+ .probe = ab8500_codec_probe,
+ .read = ab8500_codec_read_reg,
+ .write = ab8500_codec_write_reg,
+ .reg_cache_size = 0,
+ .reg_word_size = sizeof(u8),
+ .controls = ab8500_ctrls,
+ .num_controls = ARRAY_SIZE(ab8500_ctrls),
+ .dapm_widgets = ab8500_dapm_widgets,
+ .num_dapm_widgets = ARRAY_SIZE(ab8500_dapm_widgets),
+ .dapm_routes = ab8500_dapm_routes,
+ .num_dapm_routes = ARRAY_SIZE(ab8500_dapm_routes),
+};
+
+static int __devinit ab8500_codec_driver_probe(struct platform_device *pdev)
+{
+ int status;
+ struct ab8500_codec_drvdata *drvdata;
+
+ dev_dbg(&pdev->dev, "%s: Enter.\n", __func__);
+
+ /* Create driver private-data struct */
+ drvdata = devm_kzalloc(&pdev->dev, sizeof(struct ab8500_codec_drvdata),
+ GFP_KERNEL);
+ drvdata->sid_status = SID_UNCONFIGURED;
+ drvdata->anc_status = ANC_UNCONFIGURED;
+ dev_set_drvdata(&pdev->dev, drvdata);
+
+ dev_dbg(&pdev->dev, "%s: Register codec.\n", __func__);
+ status = snd_soc_register_codec(&pdev->dev, &ab8500_codec_driver,
+ ab8500_codec_dai,
+ ARRAY_SIZE(ab8500_codec_dai));
+
+ if (status < 0)
+ dev_err(&pdev->dev,
+ "%s: Error: Failed to register codec (%d).\n",
+ __func__, status);
+
+ return status;
+}
+
+static int __devexit ab8500_codec_driver_remove(struct platform_device *pdev)
+{
+ struct ab8500_codec_drvdata *drvdata = dev_get_drvdata(&pdev->dev);
+
+ dev_info(&pdev->dev, "%s Enter.\n", __func__);
+
+ snd_soc_unregister_codec(&pdev->dev);
+
+ if (drvdata->clk_ptr_sysclk != NULL)
+ clk_put(drvdata->clk_ptr_sysclk);
+ if (drvdata->clk_ptr_ulpclk != NULL)
+ clk_put(drvdata->clk_ptr_ulpclk);
+ if (drvdata->clk_ptr_intclk != NULL)
+ clk_put(drvdata->clk_ptr_intclk);
+
+ return 0;
+}
+
+static struct platform_driver ab8500_codec_platform_driver = {
+ .driver = {
+ .name = "ab8500-codec",
+ .owner = THIS_MODULE,
+ },
+ .probe = ab8500_codec_driver_probe,
+ .remove = __devexit_p(ab8500_codec_driver_remove),
+ .suspend = NULL,
+ .resume = NULL,
+};
+module_platform_driver(ab8500_codec_platform_driver);
+
+MODULE_LICENSE("GPLv2");
+
diff --git a/sound/soc/codecs/ab8500-codec.h b/sound/soc/codecs/ab8500-codec.h
new file mode 100644
index 0000000..50282b3
--- /dev/null
+++ b/sound/soc/codecs/ab8500-codec.h
@@ -0,0 +1,608 @@
+/*
+ * Copyright (C) ST-Ericsson SA 2012
+ *
+ * Author: Ola Lilja <ola.o.lilja(a)stericsson.com>,
+ * Kristoffer Karlsson <kristoffer.karlsson(a)stericsson.com>,
+ * Roger Nilsson <roger.xr.nilsson(a)stericsson.com>,
+ * for ST-Ericsson.
+ *
+ * Based on the early work done by:
+ * Mikko J. Lehto <mikko.lehto(a)symbio.com>,
+ * Mikko Sarmanne <mikko.sarmanne(a)symbio.com>,
+ * for ST-Ericsson.
+ *
+ * License terms:
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published
+ * by the Free Software Foundation.
+ */
+
+#ifndef AB8500_CODEC_REGISTERS_H
+#define AB8500_CODEC_REGISTERS_H
+
+#include <mach/board-mop500-audio.h>
+
+extern struct snd_soc_dai_driver ab8500_codec_dai[];
+extern struct snd_soc_codec_driver soc_codec_dev_ab8500;
+
+/* Extended interface for codec-driver */
+
+int ab8500_audio_setup_if1(struct snd_soc_codec *codec, unsigned int fmt,
+ unsigned int wl, unsigned int delay);
+int ab8500_audio_setup_macrocell(struct snd_soc_codec *codec);
+int ab8500_audio_setup_mics(struct snd_soc_codec *codec,
+ struct amic_settings *amics);
+int ab8500_audio_set_ear_cmv(struct snd_soc_codec *codec,
+ enum ear_cm_voltage ear_cmv);
+
+#define AB8500_SUPPORTED_RATE (SNDRV_PCM_RATE_48000)
+#define AB8500_SUPPORTED_FMT (SNDRV_PCM_FMTBIT_S16_LE)
+
+#define PRE_PMU_POST_PMD (SND_SOC_DAPM_PRE_PMU | \
+ SND_SOC_DAPM_POST_PMD)
+
+/* AB8500 audio bank (0x0d) register definitions */
+
+#define AB8500_POWERUP 0x00
+#define AB8500_AUDSWRESET 0x01
+#define AB8500_ADPATHENA 0x02
+#define AB8500_DAPATHENA 0x03
+#define AB8500_ANACONF1 0x04
+#define AB8500_ANACONF2 0x05
+#define AB8500_DIGMICCONF 0x06
+#define AB8500_ANACONF3 0x07
+#define AB8500_ANACONF4 0x08
+#define AB8500_DAPATHCONF 0x09
+#define AB8500_MUTECONF 0x0A
+#define AB8500_SHORTCIRCONF 0x0B
+#define AB8500_ANACONF5 0x0C
+#define AB8500_ENVCPCONF 0x0D
+#define AB8500_SIGENVCONF 0x0E
+#define AB8500_PWMGENCONF1 0x0F
+#define AB8500_PWMGENCONF2 0x10
+#define AB8500_PWMGENCONF3 0x11
+#define AB8500_PWMGENCONF4 0x12
+#define AB8500_PWMGENCONF5 0x13
+#define AB8500_ANAGAIN1 0x14
+#define AB8500_ANAGAIN2 0x15
+#define AB8500_ANAGAIN3 0x16
+#define AB8500_ANAGAIN4 0x17
+#define AB8500_DIGLINHSLGAIN 0x18
+#define AB8500_DIGLINHSRGAIN 0x19
+#define AB8500_ADFILTCONF 0x1A
+#define AB8500_DIGIFCONF1 0x1B
+#define AB8500_DIGIFCONF2 0x1C
+#define AB8500_DIGIFCONF3 0x1D
+#define AB8500_DIGIFCONF4 0x1E
+#define AB8500_ADSLOTSEL1 0x1F
+#define AB8500_ADSLOTSEL2 0x20
+#define AB8500_ADSLOTSEL3 0x21
+#define AB8500_ADSLOTSEL4 0x22
+#define AB8500_ADSLOTSEL5 0x23
+#define AB8500_ADSLOTSEL6 0x24
+#define AB8500_ADSLOTSEL7 0x25
+#define AB8500_ADSLOTSEL8 0x26
+#define AB8500_ADSLOTSEL9 0x27
+#define AB8500_ADSLOTSEL10 0x28
+#define AB8500_ADSLOTSEL11 0x29
+#define AB8500_ADSLOTSEL12 0x2A
+#define AB8500_ADSLOTSEL13 0x2B
+#define AB8500_ADSLOTSEL14 0x2C
+#define AB8500_ADSLOTSEL15 0x2D
+#define AB8500_ADSLOTSEL16 0x2E
+#define AB8500_ADSLOTHIZCTRL1 0x2F
+#define AB8500_ADSLOTHIZCTRL2 0x30
+#define AB8500_ADSLOTHIZCTRL3 0x31
+#define AB8500_ADSLOTHIZCTRL4 0x32
+#define AB8500_DASLOTCONF1 0x33
+#define AB8500_DASLOTCONF2 0x34
+#define AB8500_DASLOTCONF3 0x35
+#define AB8500_DASLOTCONF4 0x36
+#define AB8500_DASLOTCONF5 0x37
+#define AB8500_DASLOTCONF6 0x38
+#define AB8500_DASLOTCONF7 0x39
+#define AB8500_DASLOTCONF8 0x3A
+#define AB8500_CLASSDCONF1 0x3B
+#define AB8500_CLASSDCONF2 0x3C
+#define AB8500_CLASSDCONF3 0x3D
+#define AB8500_DMICFILTCONF 0x3E
+#define AB8500_DIGMULTCONF1 0x3F
+#define AB8500_DIGMULTCONF2 0x40
+#define AB8500_ADDIGGAIN1 0x41
+#define AB8500_ADDIGGAIN2 0x42
+#define AB8500_ADDIGGAIN3 0x43
+#define AB8500_ADDIGGAIN4 0x44
+#define AB8500_ADDIGGAIN5 0x45
+#define AB8500_ADDIGGAIN6 0x46
+#define AB8500_DADIGGAIN1 0x47
+#define AB8500_DADIGGAIN2 0x48
+#define AB8500_DADIGGAIN3 0x49
+#define AB8500_DADIGGAIN4 0x4A
+#define AB8500_DADIGGAIN5 0x4B
+#define AB8500_DADIGGAIN6 0x4C
+#define AB8500_ADDIGLOOPGAIN1 0x4D
+#define AB8500_ADDIGLOOPGAIN2 0x4E
+#define AB8500_HSLEARDIGGAIN 0x4F
+#define AB8500_HSRDIGGAIN 0x50
+#define AB8500_SIDFIRGAIN1 0x51
+#define AB8500_SIDFIRGAIN2 0x52
+#define AB8500_ANCCONF1 0x53
+#define AB8500_ANCCONF2 0x54
+#define AB8500_ANCCONF3 0x55
+#define AB8500_ANCCONF4 0x56
+#define AB8500_ANCCONF5 0x57
+#define AB8500_ANCCONF6 0x58
+#define AB8500_ANCCONF7 0x59
+#define AB8500_ANCCONF8 0x5A
+#define AB8500_ANCCONF9 0x5B
+#define AB8500_ANCCONF10 0x5C
+#define AB8500_ANCCONF11 0x5D
+#define AB8500_ANCCONF12 0x5E
+#define AB8500_ANCCONF13 0x5F
+#define AB8500_ANCCONF14 0x60
+#define AB8500_SIDFIRADR 0x61
+#define AB8500_SIDFIRCOEF1 0x62
+#define AB8500_SIDFIRCOEF2 0x63
+#define AB8500_SIDFIRCONF 0x64
+#define AB8500_AUDINTMASK1 0x65
+#define AB8500_AUDINTSOURCE1 0x66
+#define AB8500_AUDINTMASK2 0x67
+#define AB8500_AUDINTSOURCE2 0x68
+#define AB8500_FIFOCONF1 0x69
+#define AB8500_FIFOCONF2 0x6A
+#define AB8500_FIFOCONF3 0x6B
+#define AB8500_FIFOCONF4 0x6C
+#define AB8500_FIFOCONF5 0x6D
+#define AB8500_FIFOCONF6 0x6E
+#define AB8500_AUDREV 0x6F
+
+#define AB8500_FIRST_REG AB8500_POWERUP
+#define AB8500_LAST_REG AB8500_AUDREV
+#define AB8500_CACHEREGNUM (AB8500_LAST_REG + 1)
+
+#define AB8500_MASK_ALL 0xFF
+#define AB8500_MASK_NONE 0x00
+
+/* AB8500_POWERUP */
+#define AB8500_POWERUP_POWERUP 7
+#define AB8500_POWERUP_ENANA 3
+
+/* AB8500_AUDSWRESET */
+#define AB8500_AUDSWRESET_SWRESET 7
+
+/* AB8500_ADPATHENA */
+#define AB8500_ADPATHENA_ENAD12 7
+#define AB8500_ADPATHENA_ENAD34 5
+#define AB8500_ADPATHENA_ENAD5768 3
+
+/* AB8500_DAPATHENA */
+#define AB8500_DAPATHENA_ENDA1 7
+#define AB8500_DAPATHENA_ENDA2 6
+#define AB8500_DAPATHENA_ENDA3 5
+#define AB8500_DAPATHENA_ENDA4 4
+#define AB8500_DAPATHENA_ENDA5 3
+#define AB8500_DAPATHENA_ENDA6 2
+
+/* AB8500_ANACONF1 */
+#define AB8500_ANACONF1_HSLOWPOW 7
+#define AB8500_ANACONF1_DACLOWPOW1 6
+#define AB8500_ANACONF1_DACLOWPOW0 5
+#define AB8500_ANACONF1_EARDACLOWPOW 4
+#define AB8500_ANACONF1_EARSELCM 2
+#define AB8500_ANACONF1_HSHPEN 1
+#define AB8500_ANACONF1_EARDRVLOWPOW 0
+
+/* AB8500_ANACONF2 */
+#define AB8500_ANACONF2_ENMIC1 7
+#define AB8500_ANACONF2_ENMIC2 6
+#define AB8500_ANACONF2_ENLINL 5
+#define AB8500_ANACONF2_ENLINR 4
+#define AB8500_ANACONF2_MUTMIC1 3
+#define AB8500_ANACONF2_MUTMIC2 2
+#define AB8500_ANACONF2_MUTLINL 1
+#define AB8500_ANACONF2_MUTLINR 0
+
+/* AB8500_DIGMICCONF */
+#define AB8500_DIGMICCONF_ENDMIC1 7
+#define AB8500_DIGMICCONF_ENDMIC2 6
+#define AB8500_DIGMICCONF_ENDMIC3 5
+#define AB8500_DIGMICCONF_ENDMIC4 4
+#define AB8500_DIGMICCONF_ENDMIC5 3
+#define AB8500_DIGMICCONF_ENDMIC6 2
+#define AB8500_DIGMICCONF_HSFADSPEED 0
+
+/* AB8500_ANACONF3 */
+#define AB8500_ANACONF3_MIC1SEL 7
+#define AB8500_ANACONF3_LINRSEL 6
+#define AB8500_ANACONF3_ENDRVHSL 5
+#define AB8500_ANACONF3_ENDRVHSR 4
+#define AB8500_ANACONF3_ENADCMIC 2
+#define AB8500_ANACONF3_ENADCLINL 1
+#define AB8500_ANACONF3_ENADCLINR 0
+
+/* AB8500_ANACONF4 */
+#define AB8500_ANACONF4_DISPDVSS 7
+#define AB8500_ANACONF4_ENEAR 6
+#define AB8500_ANACONF4_ENHSL 5
+#define AB8500_ANACONF4_ENHSR 4
+#define AB8500_ANACONF4_ENHFL 3
+#define AB8500_ANACONF4_ENHFR 2
+#define AB8500_ANACONF4_ENVIB1 1
+#define AB8500_ANACONF4_ENVIB2 0
+
+/* AB8500_DAPATHCONF */
+#define AB8500_DAPATHCONF_ENDACEAR 6
+#define AB8500_DAPATHCONF_ENDACHSL 5
+#define AB8500_DAPATHCONF_ENDACHSR 4
+#define AB8500_DAPATHCONF_ENDACHFL 3
+#define AB8500_DAPATHCONF_ENDACHFR 2
+#define AB8500_DAPATHCONF_ENDACVIB1 1
+#define AB8500_DAPATHCONF_ENDACVIB2 0
+
+/* AB8500_MUTECONF */
+#define AB8500_MUTECONF_MUTEAR 6
+#define AB8500_MUTECONF_MUTHSL 5
+#define AB8500_MUTECONF_MUTHSR 4
+#define AB8500_MUTECONF_MUTDACEAR 2
+#define AB8500_MUTECONF_MUTDACHSL 1
+#define AB8500_MUTECONF_MUTDACHSR 0
+
+/* AB8500_SHORTCIRCONF */
+#define AB8500_SHORTCIRCONF_ENSHORTPWD 7
+#define AB8500_SHORTCIRCONF_EARSHORTDIS 6
+#define AB8500_SHORTCIRCONF_HSSHORTDIS 5
+#define AB8500_SHORTCIRCONF_HSPULLDEN 4
+#define AB8500_SHORTCIRCONF_HSOSCEN 2
+#define AB8500_SHORTCIRCONF_HSFADDIS 1
+#define AB8500_SHORTCIRCONF_HSZCDDIS 0
+/* Zero cross should be disabled */
+
+/* AB8500_ANACONF5 */
+#define AB8500_ANACONF5_ENCPHS 7
+#define AB8500_ANACONF5_HSLDACTOLOL 5
+#define AB8500_ANACONF5_HSRDACTOLOR 4
+#define AB8500_ANACONF5_ENLOL 3
+#define AB8500_ANACONF5_ENLOR 2
+#define AB8500_ANACONF5_HSAUTOEN 0
+
+/* AB8500_ENVCPCONF */
+#define AB8500_ENVCPCONF_ENVDETHTHRE 4
+#define AB8500_ENVCPCONF_ENVDETLTHRE 0
+#define AB8500_ENVCPCONF_ENVDETHTHRE_MAX 0x0F
+#define AB8500_ENVCPCONF_ENVDETLTHRE_MAX 0x0F
+
+/* AB8500_SIGENVCONF */
+#define AB8500_SIGENVCONF_CPLVEN 5
+#define AB8500_SIGENVCONF_ENVDETCPEN 4
+#define AB8500_SIGENVCONF_ENVDETTIME 0
+#define AB8500_SIGENVCONF_ENVDETTIME_MAX 0x0F
+
+/* AB8500_PWMGENCONF1 */
+#define AB8500_PWMGENCONF1_PWMTOVIB1 7
+#define AB8500_PWMGENCONF1_PWMTOVIB2 6
+#define AB8500_PWMGENCONF1_PWM1CTRL 5
+#define AB8500_PWMGENCONF1_PWM2CTRL 4
+#define AB8500_PWMGENCONF1_PWM1NCTRL 3
+#define AB8500_PWMGENCONF1_PWM1PCTRL 2
+#define AB8500_PWMGENCONF1_PWM2NCTRL 1
+#define AB8500_PWMGENCONF1_PWM2PCTRL 0
+
+/* AB8500_PWMGENCONF2 */
+/* AB8500_PWMGENCONF3 */
+/* AB8500_PWMGENCONF4 */
+/* AB8500_PWMGENCONF5 */
+#define AB8500_PWMGENCONFX_PWMVIBXPOL 7
+#define AB8500_PWMGENCONFX_PWMVIBXDUTCYC 0
+#define AB8500_PWMGENCONFX_PWMVIBXDUTCYC_MAX 0x64
+
+/* AB8500_ANAGAIN1 */
+/* AB8500_ANAGAIN2 */
+#define AB8500_ANAGAINX_ENSEMICX 7
+#define AB8500_ANAGAINX_LOWPOWMICX 6
+#define AB8500_ANAGAINX_MICXGAIN 0
+#define AB8500_ANAGAINX_MICXGAIN_MAX 0x1F
+
+/* AB8500_ANAGAIN3 */
+#define AB8500_ANAGAIN3_HSLGAIN 4
+#define AB8500_ANAGAIN3_HSRGAIN 0
+#define AB8500_ANAGAIN3_HSXGAIN_MAX 0x0F
+
+/* AB8500_ANAGAIN4 */
+#define AB8500_ANAGAIN4_LINLGAIN 4
+#define AB8500_ANAGAIN4_LINRGAIN 0
+#define AB8500_ANAGAIN4_LINXGAIN_MAX 0x0F
+
+/* AB8500_DIGLINHSLGAIN */
+/* AB8500_DIGLINHSRGAIN */
+#define AB8500_DIGLINHSXGAIN_LINTOHSXGAIN 0
+#define AB8500_DIGLINHSXGAIN_LINTOHSXGAIN_MAX 0x13
+
+/* AB8500_ADFILTCONF */
+#define AB8500_ADFILTCONF_AD1NH 7
+#define AB8500_ADFILTCONF_AD2NH 6
+#define AB8500_ADFILTCONF_AD3NH 5
+#define AB8500_ADFILTCONF_AD4NH 4
+#define AB8500_ADFILTCONF_AD1VOICE 3
+#define AB8500_ADFILTCONF_AD2VOICE 2
+#define AB8500_ADFILTCONF_AD3VOICE 1
+#define AB8500_ADFILTCONF_AD4VOICE 0
+
+/* AB8500_DIGIFCONF1 */
+#define AB8500_DIGIFCONF1_ENMASTGEN 7
+#define AB8500_DIGIFCONF1_IF1BITCLKOS1 6
+#define AB8500_DIGIFCONF1_IF1BITCLKOS0 5
+#define AB8500_DIGIFCONF1_ENFSBITCLK1 4
+#define AB8500_DIGIFCONF1_IF0BITCLKOS1 2
+#define AB8500_DIGIFCONF1_IF0BITCLKOS0 1
+#define AB8500_DIGIFCONF1_ENFSBITCLK0 0
+
+/* AB8500_DIGIFCONF2 */
+#define AB8500_DIGIFCONF2_FSYNC0P 6
+#define AB8500_DIGIFCONF2_BITCLK0P 5
+#define AB8500_DIGIFCONF2_IF0DEL 4
+#define AB8500_DIGIFCONF2_IF0FORMAT1 3
+#define AB8500_DIGIFCONF2_IF0FORMAT0 2
+#define AB8500_DIGIFCONF2_IF0WL1 1
+#define AB8500_DIGIFCONF2_IF0WL0 0
+
+/* AB8500_DIGIFCONF3 */
+#define AB8500_DIGIFCONF3_IF0DATOIF1AD 7
+#define AB8500_DIGIFCONF3_IF0CLKTOIF1CLK 6
+#define AB8500_DIGIFCONF3_IF1MASTER 5
+#define AB8500_DIGIFCONF3_IF1DATOIF0AD 3
+#define AB8500_DIGIFCONF3_IF1CLKTOIF0CLK 2
+#define AB8500_DIGIFCONF3_IF0MASTER 1
+#define AB8500_DIGIFCONF3_IF0BFIFOEN 0
+
+/* AB8500_DIGIFCONF4 */
+#define AB8500_DIGIFCONF4_FSYNC1P 6
+#define AB8500_DIGIFCONF4_BITCLK1P 5
+#define AB8500_DIGIFCONF4_IF1DEL 4
+#define AB8500_DIGIFCONF4_IF1FORMAT1 3
+#define AB8500_DIGIFCONF4_IF1FORMAT0 2
+#define AB8500_DIGIFCONF4_IF1WL1 1
+#define AB8500_DIGIFCONF4_IF1WL0 0
+
+/* AB8500_ADSLOTSELX */
+#define AB8500_ADSLOTSELX_AD_OUT1_TO_SLOT_ODD 0x00
+#define AB8500_ADSLOTSELX_AD_OUT2_TO_SLOT_ODD 0x01
+#define AB8500_ADSLOTSELX_AD_OUT3_TO_SLOT_ODD 0x02
+#define AB8500_ADSLOTSELX_AD_OUT4_TO_SLOT_ODD 0x03
+#define AB8500_ADSLOTSELX_AD_OUT5_TO_SLOT_ODD 0x04
+#define AB8500_ADSLOTSELX_AD_OUT6_TO_SLOT_ODD 0x05
+#define AB8500_ADSLOTSELX_AD_OUT7_TO_SLOT_ODD 0x06
+#define AB8500_ADSLOTSELX_AD_OUT8_TO_SLOT_ODD 0x07
+#define AB8500_ADSLOTSELX_ZEROES_TO_SLOT_ODD 0x08
+#define AB8500_ADSLOTSELX_TRISTATE_TO_SLOT_ODD 0x0F
+#define AB8500_ADSLOTSELX_AD_OUT1_TO_SLOT_EVEN 0x00
+#define AB8500_ADSLOTSELX_AD_OUT2_TO_SLOT_EVEN 0x10
+#define AB8500_ADSLOTSELX_AD_OUT3_TO_SLOT_EVEN 0x20
+#define AB8500_ADSLOTSELX_AD_OUT4_TO_SLOT_EVEN 0x30
+#define AB8500_ADSLOTSELX_AD_OUT5_TO_SLOT_EVEN 0x40
+#define AB8500_ADSLOTSELX_AD_OUT6_TO_SLOT_EVEN 0x50
+#define AB8500_ADSLOTSELX_AD_OUT7_TO_SLOT_EVEN 0x60
+#define AB8500_ADSLOTSELX_AD_OUT8_TO_SLOT_EVEN 0x70
+#define AB8500_ADSLOTSELX_ZEROES_TO_SLOT_EVEN 0x80
+#define AB8500_ADSLOTSELX_TRISTATE_TO_SLOT_EVEN 0xF0
+#define AB8500_ADSLOTSELX_EVEN_SHIFT 0
+#define AB8500_ADSLOTSELX_ODD_SHIFT 4
+
+/* AB8500_ADSLOTHIZCTRL1 */
+/* AB8500_ADSLOTHIZCTRL2 */
+/* AB8500_ADSLOTHIZCTRL3 */
+/* AB8500_ADSLOTHIZCTRL4 */
+/* AB8500_DASLOTCONF1 */
+#define AB8500_DASLOTCONF1_DA12VOICE 7
+#define AB8500_DASLOTCONF1_SWAPDA12_34 6
+#define AB8500_DASLOTCONF1_DAI7TOADO1 5
+
+/* AB8500_DASLOTCONF2 */
+#define AB8500_DASLOTCONF2_DAI8TOADO2 5
+
+/* AB8500_DASLOTCONF3 */
+#define AB8500_DASLOTCONF3_DA34VOICE 7
+#define AB8500_DASLOTCONF3_DAI7TOADO3 5
+
+/* AB8500_DASLOTCONF4 */
+#define AB8500_DASLOTCONF4_DAI8TOADO4 5
+
+/* AB8500_DASLOTCONF5 */
+#define AB8500_DASLOTCONF5_DA56VOICE 7
+#define AB8500_DASLOTCONF5_DAI7TOADO5 5
+
+/* AB8500_DASLOTCONF6 */
+#define AB8500_DASLOTCONF6_DAI8TOADO6 5
+
+/* AB8500_DASLOTCONF7 */
+#define AB8500_DASLOTCONF7_DAI8TOADO7 5
+
+/* AB8500_DASLOTCONF8 */
+#define AB8500_DASLOTCONF8_DAI7TOADO8 5
+
+#define AB8500_DASLOTCONFX_SLTODAX_SHIFT 0
+#define AB8500_DASLOTCONFX_SLTODAX_MASK 0x1F
+
+/* AB8500_CLASSDCONF1 */
+#define AB8500_CLASSDCONF1_PARLHF 7
+#define AB8500_CLASSDCONF1_PARLVIB 6
+#define AB8500_CLASSDCONF1_VIB1SWAPEN 3
+#define AB8500_CLASSDCONF1_VIB2SWAPEN 2
+#define AB8500_CLASSDCONF1_HFLSWAPEN 1
+#define AB8500_CLASSDCONF1_HFRSWAPEN 0
+
+/* AB8500_CLASSDCONF2 */
+#define AB8500_CLASSDCONF2_FIRBYP3 7
+#define AB8500_CLASSDCONF2_FIRBYP2 6
+#define AB8500_CLASSDCONF2_FIRBYP1 5
+#define AB8500_CLASSDCONF2_FIRBYP0 4
+#define AB8500_CLASSDCONF2_HIGHVOLEN3 3
+#define AB8500_CLASSDCONF2_HIGHVOLEN2 2
+#define AB8500_CLASSDCONF2_HIGHVOLEN1 1
+#define AB8500_CLASSDCONF2_HIGHVOLEN0 0
+
+/* AB8500_CLASSDCONF3 */
+#define AB8500_CLASSDCONF3_DITHHPGAIN 4
+#define AB8500_CLASSDCONF3_DITHHPGAIN_MAX 0x0A
+#define AB8500_CLASSDCONF3_DITHWGAIN 0
+#define AB8500_CLASSDCONF3_DITHWGAIN_MAX 0x0A
+
+/* AB8500_DMICFILTCONF */
+#define AB8500_DMICFILTCONF_ANCINSEL 7
+#define AB8500_DMICFILTCONF_DA3TOEAR 6
+#define AB8500_DMICFILTCONF_DMIC1SINC3 5
+#define AB8500_DMICFILTCONF_DMIC2SINC3 4
+#define AB8500_DMICFILTCONF_DMIC3SINC3 3
+#define AB8500_DMICFILTCONF_DMIC4SINC3 2
+#define AB8500_DMICFILTCONF_DMIC5SINC3 1
+#define AB8500_DMICFILTCONF_DMIC6SINC3 0
+
+/* AB8500_DIGMULTCONF1 */
+#define AB8500_DIGMULTCONF1_DATOHSLEN 7
+#define AB8500_DIGMULTCONF1_DATOHSREN 6
+#define AB8500_DIGMULTCONF1_AD1SEL 5
+#define AB8500_DIGMULTCONF1_AD2SEL 4
+#define AB8500_DIGMULTCONF1_AD3SEL 3
+#define AB8500_DIGMULTCONF1_AD5SEL 2
+#define AB8500_DIGMULTCONF1_AD6SEL 1
+#define AB8500_DIGMULTCONF1_ANCSEL 0
+
+/* AB8500_DIGMULTCONF2 */
+#define AB8500_DIGMULTCONF2_DATOHFREN 7
+#define AB8500_DIGMULTCONF2_DATOHFLEN 6
+#define AB8500_DIGMULTCONF2_HFRSEL 5
+#define AB8500_DIGMULTCONF2_HFLSEL 4
+#define AB8500_DIGMULTCONF2_FIRSID1SEL 2
+#define AB8500_DIGMULTCONF2_FIRSID2SEL 0
+
+/* AB8500_ADDIGGAIN1 */
+/* AB8500_ADDIGGAIN2 */
+/* AB8500_ADDIGGAIN3 */
+/* AB8500_ADDIGGAIN4 */
+/* AB8500_ADDIGGAIN5 */
+/* AB8500_ADDIGGAIN6 */
+#define AB8500_ADDIGGAINX_FADEDISADX 6
+#define AB8500_ADDIGGAINX_ADXGAIN_MAX 0x3F
+
+/* AB8500_DADIGGAIN1 */
+/* AB8500_DADIGGAIN2 */
+/* AB8500_DADIGGAIN3 */
+/* AB8500_DADIGGAIN4 */
+/* AB8500_DADIGGAIN5 */
+/* AB8500_DADIGGAIN6 */
+#define AB8500_DADIGGAINX_FADEDISDAX 6
+#define AB8500_DADIGGAINX_DAXGAIN_MAX 0x3F
+
+/* AB8500_ADDIGLOOPGAIN1 */
+/* AB8500_ADDIGLOOPGAIN2 */
+#define AB8500_ADDIGLOOPGAINX_FADEDISADXL 6
+#define AB8500_ADDIGLOOPGAINX_ADXLBGAIN_MAX 0x3F
+
+/* AB8500_HSLEARDIGGAIN */
+#define AB8500_HSLEARDIGGAIN_HSSINC1 7
+#define AB8500_HSLEARDIGGAIN_FADEDISHSL 4
+#define AB8500_HSLEARDIGGAIN_HSLDGAIN_MAX 0x09
+
+/* AB8500_HSRDIGGAIN */
+#define AB8500_HSRDIGGAIN_FADESPEED 6
+#define AB8500_HSRDIGGAIN_FADEDISHSR 4
+#define AB8500_HSRDIGGAIN_HSRDGAIN_MAX 0x09
+
+/* AB8500_SIDFIRGAIN1 */
+/* AB8500_SIDFIRGAIN2 */
+#define AB8500_SIDFIRGAINX_FIRSIDXGAIN_MAX 0x1F
+
+/* AB8500_ANCCONF1 */
+#define AB8500_ANCCONF1_ANCIIRUPDATE 3
+#define AB8500_ANCCONF1_ENANC 2
+#define AB8500_ANCCONF1_ANCIIRINIT 1
+#define AB8500_ANCCONF1_ANCFIRUPDATE 0
+
+/* AB8500_ANCCONF2 */
+#define AB8500_ANCCONF2_SHIFT 5
+#define AB8500_ANCCONF2_MIN -0x10
+#define AB8500_ANCCONF2_MAX 0xF
+
+/* AB8500_ANCCONF3 */
+#define AB8500_ANCCONF3_SHIFT 5
+#define AB8500_ANCCONF3_MIN -0x10
+#define AB8500_ANCCONF3_MAX 0xF
+
+/* AB8500_ANCCONF4 */
+#define AB8500_ANCCONF4_SHIFT 5
+#define AB8500_ANCCONF4_MIN -0x10
+#define AB8500_ANCCONF4_MAX 0xF
+
+/* AB8500_ANC_FIR_COEFFS */
+#define AB8500_ANC_FIR_COEFF_MIN -0x8000
+#define AB8500_ANC_FIR_COEFF_MAX 0x7FFF
+#define AB8500_ANC_FIR_COEFFS 15
+
+/* AB8500_ANC_IIR_COEFFS */
+#define AB8500_ANC_IIR_COEFF_MIN -0x800000
+#define AB8500_ANC_IIR_COEFF_MAX 0x7FFFFF
+#define AB8500_ANC_IIR_COEFFS 24
+/* AB8500_ANC_WARP_DELAY */
+#define AB8500_ANC_WARP_DELAY_SHIFT 16
+#define AB8500_ANC_WARP_DELAY_MIN 0x0000
+#define AB8500_ANC_WARP_DELAY_MAX 0xFFFF
+
+/* AB8500_ANCCONF11 */
+/* AB8500_ANCCONF12 */
+/* AB8500_ANCCONF13 */
+/* AB8500_ANCCONF14 */
+
+/* AB8500_SIDFIRADR */
+#define AB8500_SIDFIRADR_FIRSIDSET 7
+#define AB8500_SIDFIRADR_ADDRESS_SHIFT 0
+#define AB8500_SIDFIRADR_ADDRESS_MAX 0x7F
+
+/* AB8500_SIDFIRCOEF1 */
+/* AB8500_SIDFIRCOEF2 */
+#define AB8500_SID_FIR_COEFF_MIN 0
+#define AB8500_SID_FIR_COEFF_MAX 0xFFFF
+#define AB8500_SID_FIR_COEFFS 128
+
+/* AB8500_SIDFIRCONF */
+#define AB8500_SIDFIRCONF_ENFIRSIDS 2
+#define AB8500_SIDFIRCONF_FIRSIDSTOIF1 1
+#define AB8500_SIDFIRCONF_FIRSIDBUSY 0
+
+/* AB8500_AUDINTMASK1 */
+/* AB8500_AUDINTSOURCE1 */
+/* AB8500_AUDINTMASK2 */
+/* AB8500_AUDINTSOURCE2 */
+
+/* AB8500_FIFOCONF1 */
+#define AB8500_FIFOCONF1_BFIFOMASK 0x80
+#define AB8500_FIFOCONF1_BFIFO19M2 0x40
+#define AB8500_FIFOCONF1_BFIFOINT_SHIFT 0
+#define AB8500_FIFOCONF1_BFIFOINT_MAX 0x3F
+
+/* AB8500_FIFOCONF2 */
+#define AB8500_FIFOCONF2_BFIFOTX_SHIFT 0
+#define AB8500_FIFOCONF2_BFIFOTX_MAX 0xFF
+
+/* AB8500_FIFOCONF3 */
+#define AB8500_FIFOCONF3_BFIFOEXSL_SHIFT 5
+#define AB8500_FIFOCONF3_BFIFOEXSL_MAX 0x5
+#define AB8500_FIFOCONF3_PREBITCLK0_SHIFT 2
+#define AB8500_FIFOCONF3_PREBITCLK0_MAX 0x7
+#define AB8500_FIFOCONF3_BFIFOMAST_SHIFT 1
+#define AB8500_FIFOCONF3_BFIFORUN_SHIFT 0
+
+/* AB8500_FIFOCONF4 */
+#define AB8500_FIFOCONF4_BFIFOFRAMSW_SHIFT 0
+#define AB8500_FIFOCONF4_BFIFOFRAMSW_MAX 0xFF
+
+/* AB8500_FIFOCONF5 */
+#define AB8500_FIFOCONF5_BFIFOWAKEUP_SHIFT 0
+#define AB8500_FIFOCONF5_BFIFOWAKEUP_MAX 0xFF
+
+/* AB8500_FIFOCONF6 */
+#define AB8500_FIFOCONF6_BFIFOSAMPLE_SHIFT 0
+#define AB8500_FIFOCONF6_BFIFOSAMPLE_MAX 0xFF
+
+/* AB8500_AUDREV */
+
+#endif
--
1.7.8.3
2
9
On Tue, May 22, 2012 at 12:57:35PM +0000, Software Maintainer wrote:
> +static void da732x_set_charge_pump(struct snd_soc_codec *codec, int state)
> +{
> + switch (state) {
> + case DA732X_ENABLE_CP:
You only ever enable this and it seems like it should be a widget - why
is it not a widget?
> +static const char *da732x_eq_text[] = {
> + "Disable", "Enable",
> +};
This should be a switch not an enum.
> +static int da732x_hpf_set(struct snd_kcontrol *kcontrol,
> + struct snd_ctl_elem_value *ucontrol)
> +{
> + struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
> + struct soc_enum *enum_ctrl = (struct soc_enum *)kcontrol->private_value;
> + unsigned int reg = enum_ctrl->reg;
> + unsigned int sel = ucontrol->value.integer.value[0];
> + unsigned int bits;
> +
> + switch (sel) {
> + case DA732X_HPF_DISABLED:
> + bits = DA732X_HPF_DIS;
> + break;
> + case DA732X_HPF_VOICE:
> + bits = DA732X_HPF_VOICE_EN;
> + break;
> + case DA732X_HPF_MUSIC:
> + bits = DA732X_HPF_MUSIC_EN;
> + break;
> + default:
> + return -EINVAL;
> + }
> +
> + snd_soc_update_bits(codec, reg, DA732X_HPF_MASK, bits);
Why is this not done using a normal enum?
> + if ((val & DA732X_HPF_MUSIC_EN) == DA732X_HPF_MUSIC_EN)
> + ucontrol->value.integer.value[0] = DA732X_HPF_MUSIC;
> + else if ((val & DA732X_HPF_VOICE_EN) == DA732X_HPF_VOICE_EN)
> + ucontrol->value.integer.value[0] = DA732X_HPF_VOICE;
> + else
> + ucontrol->value.integer.value[0] = DA732X_HPF_DISABLED;
Similarly here, and this looks like a switch statement.
> +static int da732x_info_volsw(struct snd_kcontrol *kcontrol,
> + struct snd_ctl_elem_info *uinfo)
> +{
> + struct soc_mixer_control *mc =
> + (struct soc_mixer_control *)kcontrol->private_value;
> + int platform_max;
> + int min = mc->min;
> +
> + if (!mc->platform_max)
> + mc->platform_max = mc->max;
> + platform_max = mc->platform_max;
> +
> + uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
> + uinfo->count = 1;
> + uinfo->value.integer.min = 0;
> + uinfo->value.integer.max = platform_max - min;
This should be generic code, there's nothing device specific about this
control type and it'd be useful for other devices.
> + /* MICs */
> + SOC_SINGLE("MIC1 Mute Switch", DA732X_REG_MIC1, DA732X_MIC_MUTE_SHIFT,
> + DA732X_SWITCH_MAX, DA732X_INVERT),
Just MIC1 Switch.
> + /* ADCs */
> + SOC_SINGLE_TLV("ADC1 L Capture", DA732X_REG_ADC1_SEL,
> + DA732X_ADCL_VOL_SHIFT, DA732X_ADC_VOL_VAL_MAX,
> + DA732X_INVERT, adc_pga_tlv),
All these should be Volumes, and really they should be stereo controls.
> + /* DACs */
> + SOC_DOUBLE_R_TLV("Digital Playback Volume DAC12", DA732X_REG_DAC1_L_VOL,
> + DA732X_REG_DAC1_R_VOL, DA732X_DAC_VOL_SHIFT,
> + DA732X_DAC_VOL_VAL_MAX, DA732X_INVERT, dac_pga_tlv),
Volume needs to be the last thing in the name.
> +static int da732x_adc_event(struct snd_soc_dapm_widget *w,
> + struct snd_kcontrol *kcontrol, int event)
> +{
> + struct snd_soc_codec *codec = w->codec;
> +
> + switch (event) {
> + case SND_SOC_DAPM_POST_PMU:
> + snd_soc_update_bits(codec, w->reg, 1 << w->shift,
> + 1 << w->shift);
> + snd_soc_update_bits(codec, w->reg,
> + DA732X_ADC_ACT_MASK(w->shift),
> + DA732X_ADC_ACT_EN(w->shift));
> + snd_soc_update_bits(codec, w->reg + DA732X_ADC_REG_SHIFT,
> + DA732X_ADC_MASK(w->shift),
> + DA732X_ADC_EN(w->shift));
> + break;
This looks like you perhaps need some supply widgets. Similarly for
most of your events.
> + /* Micbias */
> + SND_SOC_DAPM_MICBIAS("MICBIAS1", DA732X_REG_MICBIAS1,
> + DA732X_MICBIAS_EN_SHIFT, 0),
> + SND_SOC_DAPM_MICBIAS("MICBIAS2", DA732X_REG_MICBIAS2,
> + DA732X_MICBIAS_EN_SHIFT, 0),
Don't use MICBIAS widgets for new code, use supply widgets.
> + {"MICBIAS1", "NULL", "MIC1"},
> + {"MICBIAS2", "NULL", "MIC2"},
The MICBIASes should be connected on the board.
> + switch (dai->id) {
> + case DA732X_DAI_ID1:
> + reg_aif = DA732X_REG_AIFA1;
> + break;
Use dai->base.
> + aif = snd_soc_read(codec, reg_aif);
> + switch (params_format(params)) {
> + case SNDRV_PCM_FORMAT_S16_LE:
> + aif |= DA732X_AIF_WORD_16;
> + break;
> + case SNDRV_PCM_FORMAT_S20_3LE:
> + aif |= DA732X_AIF_WORD_20;
> + break;
> + case SNDRV_PCM_FORMAT_S24_LE:
> + aif |= DA732X_AIF_WORD_24;
> + break;
> + case SNDRV_PCM_FORMAT_S32_LE:
> + aif |= DA732X_AIF_WORD_32;
> + break;
Use snd_soc_update_bits, this will fix the issue where you don't
currently clear the register. You're also missing error handling in the
default: case.
> + switch (params_rate(params)) {
> + case SR_8000:
Don't make up private defines for generic things like this. Though
really a define like this is a bit silly...
> +static int da732x_set_dai_pll(struct snd_soc_codec *codec, int pll_id,
> + int source, unsigned int freq_in,
> + unsigned int freq_out)
> +{
> + struct da732x_priv *da732x = snd_soc_codec_get_drvdata(codec);
> + int fref, indiv;
> + u8 div_lo, div_mid, div_hi;
> + u64 frac_div;
> +
> + if (da732x->pll_en)
> + return 0;
This should either stop and restart the PLL or return an error if it's
already enabled.
> + if (source == DA732X_SRCCLK_MCLK) {
> + snd_soc_write(codec, DA732X_REG_PLL_CTRL, DA732X_PLL_BYPASS);
> + return 0;
> + }
This doesn't validate against the sysclk rate...
> + indiv = da732x_get_input_div(codec, da732x->sysclk);
> + if (indiv < 0)
> + return -EINVAL;
Pass back the error code.
> + snd_soc_update_bits(codec, DA732X_REG_PLL_CTRL, DA732X_PLL_EN,
> + DA732X_PLL_EN);
> +
> + da732x->pll_en = true;
This means there's no way to stop the PLL.
> + if (mute) {
> + snd_soc_update_bits(codec, DA732X_REG_DAC1_SOFTMUTE,
> + DA732X_SOFTMUTE_MASK,
> + 1 << DA732X_SOFTMUTE_SHIFT);
> + snd_soc_update_bits(codec, DA732X_REG_DAC2_SOFTMUTE,
> + DA732X_SOFTMUTE_MASK,
> + 1 << DA732X_SOFTMUTE_SHIFT);
> + snd_soc_update_bits(codec, DA732X_REG_DAC3_SOFTMUTE,
> + DA732X_SOFTMUTE_MASK,
> + 1 << DA732X_SOFTMUTE_SHIFT);
This appears to mute all the DACs but you have two audio interfaces and
also had some other code which also managed the mutes... If there's no
mutes on the actual audio interfaces just don't implement this.
> +#define DA732X_RATES (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | \
> + SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 | \
> + SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000)
SNDRV_PCM_RATE_8000_48000
> + /* Init Codec */
> + snd_soc_write(codec, DA732X_REG_REF1, DA732X_VMID_FASTCHG);
> + snd_soc_write(codec, DA732X_REG_BIAS_EN, DA732X_BIAS_EN);
> +
> + mdelay(DA732X_STARTUP_DELAY);
Almost all of this sequence looks like it should be in set_bias_level(),
it'll be needed every time the chip is powered up and sequencing looks
important.
> + /* Enable Charge Pump */
> + da732x_set_charge_pump(codec, DA732X_ENABLE_CP);
Shouldn't this be a supply, or again in set_bias_level()?
> + /* Initialize all clocks */
> + snd_soc_write(codec, DA732X_REG_CLK_EN1,
> + DA732X_SYS3_CLK_EN | DA732X_PC_CLK_EN);
> + snd_soc_write(codec, DA732X_REG_CLK_EN3,
> + DA732X_ADCA_BB_CLK_EN | DA732X_ADCC_BB_CLK_EN);
> + snd_soc_write(codec, DA732X_REG_CLK_EN4,
> + DA732X_DACA_BB_CLK_EN | DA732X_DACC_BB_CLK_EN);
> + snd_soc_write(codec, DA732X_REG_CLK_EN5, DA732X_DACE_BB_CLK_EN);
Should be dynamically managed.
> + da732x->regmap = regmap_init_i2c(i2c, &da732x_regmap);
devm_regmap_init_i2c().
> +static const struct i2c_device_id da732x_i2c_id[] = {
> + { "da732x-i2c", 0},
Remove the i2c, devices connected by I2C are generally i2c devices...
> + .name = "da732x-i2c",
Similarly here.
> +static int __init da732x_init(void)
> +{
> + int ret = 0;
> +
> + ret = i2c_add_driver(&da732x_i2c_driver);
module_i2c_driver().
> +/* DAPM helper macros */
> +#define DA732X_ADC_REG_SHIFT 4
> +#define DA732X_ADC_ACT_MASK(v) (1 << ((v) - 2))
> +#define DA732X_ADC_ACT_EN(v) (1 << ((v) - 2))
> +#define DA732X_ADC_ACT_DIS(v) (0 << ((v) - 2))
> +#define DA732X_ADC_EN_SHIFT(v) (((v) - 2) ? 7 : 3)
> +#define DA732X_ADC_MASK(v) (1 << DA732X_ADC_EN_SHIFT(v))
> +#define DA732X_ADC_EN(v) (1 << DA732X_ADC_EN_SHIFT(v))
> +#define DA732X_ADC_DIS(v) (0 << DA732X_ADC_EN_SHIFT(v))
> +#define DA732X_DAC_EN_MUTED_MASK(v) ((1 << (v)) | (1 << ((v) - 1)))
> +#define DA732X_DAC_EN_MUTED(v) DA732X_DAC_EN_MUTED_MASK(v)
> +#define DA732X_DAC_MUTE_MASK(v) (1 << ((v) - 1))
> +#define DA732X_DAC_EN_MASK(v) (1 << (v))
> +#define DA732X_DAC_DIS(v) (0 << (v))
> +#define DA732X_DAC_UNMUTE(v) (0 << ((v) - 1))
> +#define DA732X_DAC_MUTE(v) (1 << ((v) - 1))
Really not sure how helpful I found any of these reading the code.
2
1

Re: [alsa-devel] [PATCH 2/2] ASoC: fix pxa-ssp compiling issue under mach-mmp
by Mark Brown 23 May '12
by Mark Brown 23 May '12
23 May '12
On Tue, May 22, 2012 at 02:58:26PM +0800, Qiao Zhou wrote:
> +#if defined(CONFIG_ARCH_PXA)
> if (cpu_is_pxa25x() && ssp->type == PXA25x_SSP) {
> sscr0 &= ~0x0000ff00;
> sscr0 |= ((div - 2)/2) << 8; /* 2..512 */
> } else {
> +#endif
> sscr0 &= ~0x000fff00;
> sscr0 |= (div - 1) << 8; /* 1..4096 */
> +#if defined(CONFIG_ARCH_PXA)
> }
> +#endif
This is pretty large and fiddly, especially code like the above. Would
it not be simpler to just define always false versions of these when on
MMP, either in this driver or in the arch headers (where it'd help other
drivers too)? Right now it doesn't make the code look nice.
1
0

[alsa-devel] [PATCH] ASoC: tegra+wm8903: remove non-DT support for Seaboard
by Stephen Warren 23 May '12
by Stephen Warren 23 May '12
23 May '12
From: Stephen Warren <swarren(a)nvidia.com>
In kernel 3.6, Seaboard will only be supported when booting using device
tree; the board files are being removed. Hence, remove the non-DT support
for Seaboard and derivatives Kaen and Aebl from the audio driver.
Harmony is the only remaining board supported by this driver when not
using DT. This support is currently scheduled for removal in 3.7.
Signed-off-by: Stephen Warren <swarren(a)nvidia.com>
---
This is pretty independent from anything else, but is based on the previous
5-long series I posted in terms of context.
sound/soc/tegra/tegra_wm8903.c | 48 +--------------------------------------
1 files changed, 2 insertions(+), 46 deletions(-)
diff --git a/sound/soc/tegra/tegra_wm8903.c b/sound/soc/tegra/tegra_wm8903.c
index 1fd6a41..b75e0e8 100644
--- a/sound/soc/tegra/tegra_wm8903.c
+++ b/sound/soc/tegra/tegra_wm8903.c
@@ -28,8 +28,6 @@
*
*/
-#include <asm/mach-types.h>
-
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/slab.h>
@@ -196,37 +194,6 @@ static const struct snd_soc_dapm_route harmony_audio_map[] = {
{"IN1L", NULL, "Mic Jack"},
};
-static const struct snd_soc_dapm_route seaboard_audio_map[] = {
- {"Headphone Jack", NULL, "HPOUTR"},
- {"Headphone Jack", NULL, "HPOUTL"},
- {"Int Spk", NULL, "ROP"},
- {"Int Spk", NULL, "RON"},
- {"Int Spk", NULL, "LOP"},
- {"Int Spk", NULL, "LON"},
- {"Mic Jack", NULL, "MICBIAS"},
- {"IN1R", NULL, "Mic Jack"},
-};
-
-static const struct snd_soc_dapm_route kaen_audio_map[] = {
- {"Headphone Jack", NULL, "HPOUTR"},
- {"Headphone Jack", NULL, "HPOUTL"},
- {"Int Spk", NULL, "ROP"},
- {"Int Spk", NULL, "RON"},
- {"Int Spk", NULL, "LOP"},
- {"Int Spk", NULL, "LON"},
- {"Mic Jack", NULL, "MICBIAS"},
- {"IN2R", NULL, "Mic Jack"},
-};
-
-static const struct snd_soc_dapm_route aebl_audio_map[] = {
- {"Headphone Jack", NULL, "HPOUTR"},
- {"Headphone Jack", NULL, "HPOUTL"},
- {"Int Spk", NULL, "LINEOUTR"},
- {"Int Spk", NULL, "LINEOUTL"},
- {"Mic Jack", NULL, "MICBIAS"},
- {"IN1R", NULL, "Mic Jack"},
-};
-
static const struct snd_kcontrol_new tegra_wm8903_controls[] = {
SOC_DAPM_PIN_SWITCH("Int Spk"),
};
@@ -377,19 +344,8 @@ static __devinit int tegra_wm8903_driver_probe(struct platform_device *pdev)
tegra_wm8903_dai.platform_of_node =
tegra_wm8903_dai.cpu_dai_of_node;
} else {
- if (machine_is_harmony()) {
- card->dapm_routes = harmony_audio_map;
- card->num_dapm_routes = ARRAY_SIZE(harmony_audio_map);
- } else if (machine_is_seaboard()) {
- card->dapm_routes = seaboard_audio_map;
- card->num_dapm_routes = ARRAY_SIZE(seaboard_audio_map);
- } else if (machine_is_kaen()) {
- card->dapm_routes = kaen_audio_map;
- card->num_dapm_routes = ARRAY_SIZE(kaen_audio_map);
- } else {
- card->dapm_routes = aebl_audio_map;
- card->num_dapm_routes = ARRAY_SIZE(aebl_audio_map);
- }
+ card->dapm_routes = harmony_audio_map;
+ card->num_dapm_routes = ARRAY_SIZE(harmony_audio_map);
}
if (gpio_is_valid(pdata->gpio_spkr_en)) {
--
1.7.0.4
2
1

[alsa-devel] [PATCH 1/2] ASoC: tegra+alc5632: move all GPIO setup into probe
by Stephen Warren 23 May '12
by Stephen Warren 23 May '12
23 May '12
From: Stephen Warren <swarren(a)nvidia.com>
Now that deferred probe exists, we can parse device tree and request
GPIOs from probe(), rather than deferring this to the DAI link's init().
Signed-off-by: Stephen Warren <swarren(a)nvidia.com>
---
sound/soc/tegra/tegra_alc5632.c | 10 ++++++----
1 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/sound/soc/tegra/tegra_alc5632.c b/sound/soc/tegra/tegra_alc5632.c
index 32de700..facf6f0 100644
--- a/sound/soc/tegra/tegra_alc5632.c
+++ b/sound/soc/tegra/tegra_alc5632.c
@@ -1,5 +1,5 @@
/*
- * tegra_alc5632.c -- Toshiba AC100(PAZ00) machine ASoC driver
+* tegra_alc5632.c -- Toshiba AC100(PAZ00) machine ASoC driver
*
* Copyright (C) 2011 The AC100 Kernel Team <ac100(a)lists.lauchpad.net>
* Copyright (C) 2012 - NVIDIA, Inc.
@@ -110,7 +110,6 @@ static int tegra_alc5632_asoc_init(struct snd_soc_pcm_runtime *rtd)
{
struct snd_soc_codec *codec = rtd->codec;
struct snd_soc_dapm_context *dapm = &codec->dapm;
- struct device_node *np = codec->card->dev->of_node;
struct tegra_alc5632 *machine = snd_soc_card_get_drvdata(codec->card);
snd_soc_jack_new(codec, "Headset Jack", SND_JACK_HEADSET,
@@ -119,8 +118,6 @@ static int tegra_alc5632_asoc_init(struct snd_soc_pcm_runtime *rtd)
ARRAY_SIZE(tegra_alc5632_hs_jack_pins),
tegra_alc5632_hs_jack_pins);
- machine->gpio_hp_det = of_get_named_gpio(np, "nvidia,hp-det-gpios", 0);
-
if (gpio_is_valid(machine->gpio_hp_det)) {
tegra_alc5632_hp_jack_gpio.gpio = machine->gpio_hp_det;
snd_soc_jack_add_gpios(&tegra_alc5632_hs_jack,
@@ -159,6 +156,7 @@ static struct snd_soc_card snd_soc_tegra_alc5632 = {
static __devinit int tegra_alc5632_probe(struct platform_device *pdev)
{
+ struct device_node *np = pdev->dev.of_node;
struct snd_soc_card *card = &snd_soc_tegra_alc5632;
struct tegra_alc5632 *alc5632;
int ret;
@@ -181,6 +179,10 @@ static __devinit int tegra_alc5632_probe(struct platform_device *pdev)
goto err;
}
+ alc5632->gpio_hp_det = of_get_named_gpio(np, "nvidia,hp-det-gpios", 0);
+ if (alc5632->gpio_hp_det == -ENODEV)
+ return -EPROBE_DEFER;
+
ret = snd_soc_of_parse_card_name(card, "nvidia,model");
if (ret)
goto err;
--
1.7.0.4
3
3

[alsa-devel] [PATCH 1/5] ASoC: WM8903: init GPIOs during I2C probe not codec probe
by Stephen Warren 23 May '12
by Stephen Warren 23 May '12
23 May '12
From: Stephen Warren <swarren(a)nvidia.com>
This allows the GPIOs to be available as soon as the I2C device has
probed, which in turn enables machine drivers to request the GPIOs in
their probe(), rather than deferring this to their ASoC machine init
function, i.e. after the whole sound card has been constructed, and
hence the WM8903 codec is available.
Signed-off-by: Stephen Warren <swarren(a)nvidia.com>
---
sound/soc/codecs/wm8903.c | 48 ++++++++++++++++++++------------------------
1 files changed, 22 insertions(+), 26 deletions(-)
diff --git a/sound/soc/codecs/wm8903.c b/sound/soc/codecs/wm8903.c
index 86b8a29..f6a3fc5 100644
--- a/sound/soc/codecs/wm8903.c
+++ b/sound/soc/codecs/wm8903.c
@@ -2,7 +2,7 @@
* wm8903.c -- WM8903 ALSA SoC Audio driver
*
* Copyright 2008 Wolfson Microelectronics
- * Copyright 2011 NVIDIA, Inc.
+ * Copyright 2011-2012 NVIDIA, Inc.
*
* Author: Mark Brown <broonie(a)opensource.wolfsonmicro.com>
*
@@ -116,6 +116,7 @@ static const struct reg_default wm8903_reg_defaults[] = {
struct wm8903_priv {
struct wm8903_platform_data *pdata;
+ struct device *dev;
struct snd_soc_codec *codec;
struct regmap *regmap;
@@ -1774,7 +1775,6 @@ static int wm8903_gpio_request(struct gpio_chip *chip, unsigned offset)
static int wm8903_gpio_direction_in(struct gpio_chip *chip, unsigned offset)
{
struct wm8903_priv *wm8903 = gpio_to_wm8903(chip);
- struct snd_soc_codec *codec = wm8903->codec;
unsigned int mask, val;
int ret;
@@ -1782,8 +1782,8 @@ static int wm8903_gpio_direction_in(struct gpio_chip *chip, unsigned offset)
val = (WM8903_GPn_FN_GPIO_INPUT << WM8903_GP1_FN_SHIFT) |
WM8903_GP1_DIR;
- ret = snd_soc_update_bits(codec, WM8903_GPIO_CONTROL_1 + offset,
- mask, val);
+ ret = regmap_update_bits(wm8903->regmap,
+ WM8903_GPIO_CONTROL_1 + offset, mask, val);
if (ret < 0)
return ret;
@@ -1793,10 +1793,9 @@ static int wm8903_gpio_direction_in(struct gpio_chip *chip, unsigned offset)
static int wm8903_gpio_get(struct gpio_chip *chip, unsigned offset)
{
struct wm8903_priv *wm8903 = gpio_to_wm8903(chip);
- struct snd_soc_codec *codec = wm8903->codec;
- int reg;
+ unsigned int reg;
- reg = snd_soc_read(codec, WM8903_GPIO_CONTROL_1 + offset);
+ regmap_read(wm8903->regmap, WM8903_GPIO_CONTROL_1 + offset, ®);
return (reg & WM8903_GP1_LVL_MASK) >> WM8903_GP1_LVL_SHIFT;
}
@@ -1805,7 +1804,6 @@ static int wm8903_gpio_direction_out(struct gpio_chip *chip,
unsigned offset, int value)
{
struct wm8903_priv *wm8903 = gpio_to_wm8903(chip);
- struct snd_soc_codec *codec = wm8903->codec;
unsigned int mask, val;
int ret;
@@ -1813,8 +1811,8 @@ static int wm8903_gpio_direction_out(struct gpio_chip *chip,
val = (WM8903_GPn_FN_GPIO_OUTPUT << WM8903_GP1_FN_SHIFT) |
(value << WM8903_GP2_LVL_SHIFT);
- ret = snd_soc_update_bits(codec, WM8903_GPIO_CONTROL_1 + offset,
- mask, val);
+ ret = regmap_update_bits(wm8903->regmap,
+ WM8903_GPIO_CONTROL_1 + offset, mask, val);
if (ret < 0)
return ret;
@@ -1824,11 +1822,10 @@ static int wm8903_gpio_direction_out(struct gpio_chip *chip,
static void wm8903_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
{
struct wm8903_priv *wm8903 = gpio_to_wm8903(chip);
- struct snd_soc_codec *codec = wm8903->codec;
- snd_soc_update_bits(codec, WM8903_GPIO_CONTROL_1 + offset,
- WM8903_GP1_LVL_MASK,
- !!value << WM8903_GP1_LVL_SHIFT);
+ regmap_update_bits(wm8903->regmap, WM8903_GPIO_CONTROL_1 + offset,
+ WM8903_GP1_LVL_MASK,
+ !!value << WM8903_GP1_LVL_SHIFT);
}
static struct gpio_chip wm8903_template_chip = {
@@ -1842,15 +1839,14 @@ static struct gpio_chip wm8903_template_chip = {
.can_sleep = 1,
};
-static void wm8903_init_gpio(struct snd_soc_codec *codec)
+static void wm8903_init_gpio(struct wm8903_priv *wm8903)
{
- struct wm8903_priv *wm8903 = snd_soc_codec_get_drvdata(codec);
struct wm8903_platform_data *pdata = wm8903->pdata;
int ret;
wm8903->gpio_chip = wm8903_template_chip;
wm8903->gpio_chip.ngpio = WM8903_NUM_GPIO;
- wm8903->gpio_chip.dev = codec->dev;
+ wm8903->gpio_chip.dev = wm8903->dev;
if (pdata->gpio_base)
wm8903->gpio_chip.base = pdata->gpio_base;
@@ -1859,24 +1855,23 @@ static void wm8903_init_gpio(struct snd_soc_codec *codec)
ret = gpiochip_add(&wm8903->gpio_chip);
if (ret != 0)
- dev_err(codec->dev, "Failed to add GPIOs: %d\n", ret);
+ dev_err(wm8903->dev, "Failed to add GPIOs: %d\n", ret);
}
-static void wm8903_free_gpio(struct snd_soc_codec *codec)
+static void wm8903_free_gpio(struct wm8903_priv *wm8903)
{
- struct wm8903_priv *wm8903 = snd_soc_codec_get_drvdata(codec);
int ret;
ret = gpiochip_remove(&wm8903->gpio_chip);
if (ret != 0)
- dev_err(codec->dev, "Failed to remove GPIOs: %d\n", ret);
+ dev_err(wm8903->dev, "Failed to remove GPIOs: %d\n", ret);
}
#else
-static void wm8903_init_gpio(struct snd_soc_codec *codec)
+static void wm8903_init_gpio(struct wm8903_priv *wm8903)
{
}
-static void wm8903_free_gpio(struct snd_soc_codec *codec)
+static void wm8903_free_gpio(struct wm8903_priv *wm8903)
{
}
#endif
@@ -2000,8 +1995,6 @@ static int wm8903_probe(struct snd_soc_codec *codec)
WM8903_DAC_MUTEMODE | WM8903_DAC_MUTE,
WM8903_DAC_MUTEMODE | WM8903_DAC_MUTE);
- wm8903_init_gpio(codec);
-
return ret;
}
@@ -2010,7 +2003,6 @@ static int wm8903_remove(struct snd_soc_codec *codec)
{
struct wm8903_priv *wm8903 = snd_soc_codec_get_drvdata(codec);
- wm8903_free_gpio(codec);
wm8903_set_bias_level(codec, SND_SOC_BIAS_OFF);
if (wm8903->irq)
free_irq(wm8903->irq, codec);
@@ -2130,6 +2122,7 @@ static __devinit int wm8903_i2c_probe(struct i2c_client *i2c,
GFP_KERNEL);
if (wm8903 == NULL)
return -ENOMEM;
+ wm8903->dev = &i2c->dev;
wm8903->regmap = regmap_init_i2c(i2c, &wm8903_regmap);
if (IS_ERR(wm8903->regmap)) {
@@ -2189,6 +2182,8 @@ static __devinit int wm8903_i2c_probe(struct i2c_client *i2c,
/* Reset the device */
regmap_write(wm8903->regmap, WM8903_SW_RESET_AND_ID, 0x8903);
+ wm8903_init_gpio(wm8903);
+
ret = snd_soc_register_codec(&i2c->dev,
&soc_codec_dev_wm8903, &wm8903_dai, 1);
if (ret != 0)
@@ -2204,6 +2199,7 @@ static __devexit int wm8903_i2c_remove(struct i2c_client *client)
{
struct wm8903_priv *wm8903 = i2c_get_clientdata(client);
+ wm8903_free_gpio(wm8903);
regmap_exit(wm8903->regmap);
snd_soc_unregister_codec(&client->dev);
--
1.7.0.4
2
5
Hi,
I'm running ALSA 1.0.23 and kernel 2.6.37 on ARM. The UAC2 audio device
is the XMOS reference board.
This is what I'm observing. As soon as the XMOS board is plugged in to
the USB port, the display on my DAC indicates that is has locked at
192kHz which is the maximum sampling rate supported by the XMOS.
Is this the expected behavior or can I specify the defualt sampling rate
at start up?
Thanks
2
1

[alsa-devel] [PATCH] alsa-lib conf: Add more USB devices to S/PDIF blacklist
by David Henningsson 23 May '12
by David Henningsson 23 May '12
23 May '12
These devices don't have digital in/out, so prevent them from being
opened.
Signed-off-by: David Henningsson <david.henningsson(a)canonical.com>
---
src/conf/cards/USB-Audio.conf | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/src/conf/cards/USB-Audio.conf b/src/conf/cards/USB-Audio.conf
index 0a0e374..177a7af 100644
--- a/src/conf/cards/USB-Audio.conf
+++ b/src/conf/cards/USB-Audio.conf
@@ -42,6 +42,10 @@ USB-Audio.pcm.iec958_device {
"Logitech Speaker Lapdesk N700" 999
"Logitech USB Headset" 999
"Logitech Wireless Headset" 999
+ "Plantronics GameCom 780" 999
+ "Plantronics USB Headset" 999
+ "Plantronics Wireless Audio" 999
+ "SB WoW Headset" 999
"Sennheiser USB headset" 999
"USB Device 0x46d:0x992" 999
}
--
1.7.9.5
2
1

[alsa-devel] [PATCH 2/3] sb_mixer: Autodetect optional SB16 mixer controls
by Ondrej Zary 23 May '12
by Ondrej Zary 23 May '12
23 May '12
Tone (bass/treble), gain and 3D mixer controls are not present on all SB16 cards.
This attempts to detect chip type and enable them only if they're really present.
Signed-off-by: Ondrej Zary <linux(a)rainbow-software.org>
--- a/sound/isa/sb/sb_mixer.c
+++ b/sound/isa/sb/sb_mixer.c
@@ -592,10 +592,6 @@ static struct sbmix_elem snd_sb16_controls[] = {
SB_SINGLE("Mic Playback Switch", SB_DSP4_OUTPUT_SW, 0, 1),
SB_SINGLE("Mic Volume", SB_DSP4_MIC_DEV, 3, 31),
SB_SINGLE("Beep Volume", SB_DSP4_SPEAKER_DEV, 6, 3),
- SB_DOUBLE("Gain Capture Volume",
- SB_DSP4_IGAIN_DEV, (SB_DSP4_IGAIN_DEV + 1), 6, 6, 3),
- SB_DOUBLE("Gain Playback Volume",
- SB_DSP4_OGAIN_DEV, (SB_DSP4_OGAIN_DEV + 1), 6, 6, 3),
SB16_INPUT_SW("Line Capture Route",
SB_DSP4_INPUT_LEFT, SB_DSP4_INPUT_RIGHT, 4, 3),
SB_DOUBLE("Line Playback Switch",
@@ -603,13 +599,25 @@ static struct sbmix_elem snd_sb16_controls[] = {
SB_DOUBLE("Line Volume",
SB_DSP4_LINE_DEV, (SB_DSP4_LINE_DEV + 1), 3, 3, 31),
SB_SINGLE("Mic Auto Gain", SB_DSP4_MIC_AGC, 0, 1),
- SB_SINGLE("3D Control - Switch", SB_DSP4_3DSE, 0, 1),
+};
+
+static struct sbmix_elem snd_sb16_tone_ctls[] = {
SB_DOUBLE("Tone Control - Bass",
SB_DSP4_BASS_DEV, (SB_DSP4_BASS_DEV + 1), 4, 4, 15),
SB_DOUBLE("Tone Control - Treble",
- SB_DSP4_TREBLE_DEV, (SB_DSP4_TREBLE_DEV + 1), 4, 4, 15)
+ SB_DSP4_TREBLE_DEV, (SB_DSP4_TREBLE_DEV + 1), 4, 4, 15),
+};
+
+static struct sbmix_elem snd_sb16_gain_ctls[] = {
+ SB_DOUBLE("Gain Capture Volume",
+ SB_DSP4_IGAIN_DEV, (SB_DSP4_IGAIN_DEV + 1), 6, 6, 3),
+ SB_DOUBLE("Gain Playback Volume",
+ SB_DSP4_OGAIN_DEV, (SB_DSP4_OGAIN_DEV + 1), 6, 6, 3),
};
+static struct sbmix_elem snd_sb16_3d_ctl =
+ SB_SINGLE("3D Control - Switch", SB_DSP4_3DSE, 0, 1);
+
static unsigned char snd_sb16_init_values[][2] = {
{ SB_DSP4_MASTER_DEV + 0, 0 },
{ SB_DSP4_MASTER_DEV + 1, 0 },
@@ -720,6 +728,71 @@ static unsigned char snd_als4000_init_values[][2] = {
{ SB_ALS4000_MIC_IN_GAIN, 0 },
};
+static int snd_sbmixer_sb16_opt_init(struct snd_sb *chip)
+{
+ int idx, err;
+ enum { CLASSIC, CT2504, CT2505, CT2511, CT8903, CT8920 } sb16_type;
+ /*
+ The detection is a mess because some chips have registers that
+ appear to work (read/write) but don't do anything. This applies
+ mainly to tone controls which are present on all SB16 cards but
+ do nothing on all Vibra chips except CT2502. Also CT8903 appears to
+ have additional switch registers but they have no effect too.
+ CT8920 has non-working gain.
+
+ This tries to detect chip type. CLASSIC means older non-integrated
+ cards (CT1746/CT1747/CT1749 + CT1745 mixer).
+ No detection code for CT2501 Vibra 16, CT2502 Vibra 16Pro,
+ CT2508 Vibra 16CL and CT2510 Vibra 16X (lack of HW for testing).
+ */
+ sb16_type = CLASSIC;
+ if (snd_sbmixer_read(chip, SB_DSP4_IRQSTATUS) & 0x40) {
+ /* read chip ID (only present on newer (PnP?) chips) */
+ u16 id = snd_sbmixer_read(chip, 0xfd) |
+ snd_sbmixer_read(chip, 0xfe) << 8;
+ printk("sb16 id=0x%04x\n", id);
+ switch (id) {
+ case 0xffff: /* No ID? Assume CT2504 Vibra 16S */
+ sb16_type = CT2504;
+ break;
+ case 0x0721: /* CT2505 Vibra 16C */
+ sb16_type = CT2505;
+ break;
+ case 0x0810: /* CT2511 Vibra 16XV */
+ sb16_type = CT2511;
+ break;
+ case 0x1190: /* CT8903 AWE64 */
+ sb16_type = CT8903;
+ break;
+ case 0x1241: /* CT8920 AWE64 */
+ sb16_type = CT8920;
+ break;
+ }
+ }
+ /* tone controls */
+ if (sb16_type == CLASSIC || sb16_type == CT8903 || sb16_type == CT8920)
+ for (idx = 0; idx < ARRAY_SIZE(snd_sb16_tone_ctls); idx++) {
+ err = snd_sbmixer_add_ctl_elem(chip, &snd_sb16_tone_ctls[idx]);
+ if (err < 0)
+ return err;
+ }
+ /* gain */
+ if (sb16_type == CLASSIC || sb16_type == CT8903)
+ for (idx = 0; idx < ARRAY_SIZE(snd_sb16_gain_ctls); idx++) {
+ err = snd_sbmixer_add_ctl_elem(chip, &snd_sb16_gain_ctls[idx]);
+ if (err < 0)
+ return err;
+ }
+ /* 3D Stereo Enhancement */
+ if (snd_sbmixer_read(chip, SB_DSP4_3DSE) != 0xff) {
+ err = snd_sbmixer_add_ctl_elem(chip, &snd_sb16_3d_ctl);
+ if (err < 0)
+ return err;
+ }
+
+ return 0;
+}
+
/*
*/
static int snd_sbmixer_init(struct snd_sb *chip,
@@ -750,6 +823,14 @@ static int snd_sbmixer_init(struct snd_sb *chip,
if (err < 0)
return err;
}
+
+ /* detect optional SB16 controls */
+ if (controls == snd_sb16_controls) {
+ err = snd_sbmixer_sb16_opt_init(chip);
+ if (err < 0)
+ return err;
+ }
+
snd_component_add(card, name);
strcpy(card->mixername, name);
return 0;
--
Ondrej Zary
1
1
Hi Takashi,
It's mainly OMAP4 HDMI updates from Ricardo using the new DSS audio
interface and Device Tree updates from Peter for OMAP.
Thanks
Liam
---
The following changes since commit 766812e6d5e2e23be1e212cf84902d5e834dd865:
ASoC: sh: fsi: enable chip specific data transfer mode (2012-05-19 19:41:45 +0100)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/lrg/asoc.git for-3.5
for you to fetch changes up to ced47a3117ba084b404f3fc28de3ef6eaba1b911:
ASoC: OMAP: HDMI: Rename sound card source file (2012-05-22 17:33:24 +0100)
----------------------------------------------------------------
Peter Ujfalusi (9):
ASoC: omap-mcbsp: Use DMA packet mode for non mono streams on OMAP3+
ASoC: omap-mcbsp: Remove unused FRAME dma_op_mode
ASoC: omap-mcbsp: Use the common interrupt line if supported by the SoC
ASoC: omap-mcbsp: buffer size constraint only applies to playback stream
ASoC: omap-mcpdm: Add device tree bindings
ASoC: omap-dmic: Add device tree bindings
ASoC: omap-abe-twl6040: Keep only one snd_soc_dai_link structure
ASoC: omap-abe-twl6040: Move Digital Mic widget into dapm table
ASoC: omap-abe-twl6040: Introduce driver data for runtime parameters
Ricardo Neri (10):
ASoC: OMAP: HDMI: Update the platform device names
ASoC: OMAP: HDMI: Change error values in HDMI CPU DAI
ASoC: OMAP: HDMI: Create a structure for private data of the CPU DAI
ASoC: OMAP: HDMI: Use the DSS audio interface
ASoC: OMAP: HDMI: Expand configuration of hw_params
ASoC: OMAP: HDMI: Improve how the display state is verified
ASoC: OMAP: HDMI: Expand capabilities of the HDMI DAI
ASoC: OMAP: HDMI: Make build config options more generic
ASoC: OMAP: HDMI: Make sound card naming more generic
ASoC: OMAP: HDMI: Rename sound card source file
.../devicetree/bindings/sound/omap-dmic.txt | 21 ++
.../devicetree/bindings/sound/omap-mcpdm.txt | 21 ++
sound/soc/omap/Kconfig | 7 +-
sound/soc/omap/Makefile | 4 +-
sound/soc/omap/mcbsp.c | 115 ++++++++--
sound/soc/omap/mcbsp.h | 8 +-
sound/soc/omap/omap-abe-twl6040.c | 68 +++---
sound/soc/omap/omap-dmic.c | 8 +
sound/soc/omap/omap-hdmi-card.c | 87 +++++++
sound/soc/omap/omap-hdmi.c | 238 ++++++++++++++++++--
sound/soc/omap/omap-hdmi.h | 4 +-
sound/soc/omap/omap-mcbsp.c | 45 ++--
sound/soc/omap/omap-mcpdm.c | 8 +
sound/soc/omap/omap4-hdmi-card.c | 121 ----------
14 files changed, 531 insertions(+), 224 deletions(-)
create mode 100644 Documentation/devicetree/bindings/sound/omap-dmic.txt
create mode 100644 Documentation/devicetree/bindings/sound/omap-mcpdm.txt
create mode 100644 sound/soc/omap/omap-hdmi-card.c
delete mode 100644 sound/soc/omap/omap4-hdmi-card.c
2
1

Re: [alsa-devel] [PATCH 1/3] of: Add prefix parameter to of_modalias_node().
by Grant Likely 23 May '12
by Grant Likely 23 May '12
23 May '12
Cool, thanks.
g.
On Tue, May 22, 2012 at 4:49 PM, David Daney <ddaney.cavm(a)gmail.com> wrote:
> On 05/22/2012 01:09 PM, Grant Likely wrote:
>>
>> On Tue, May 22, 2012 at 1:45 PM, David Daney<ddaney.cavm(a)gmail.com>
>> Â wrote:
>>>
>>> On 05/19/2012 11:08 PM, Grant Likely wrote:
>>>>
>>>>
>>>> On Sat, 19 May 2012 23:54:36 -0600, Grant
>>>> Likely<grant.likely(a)secretlab.ca> Â Â wrote:
>>>>>
>>>>>
>>>>> On Fri, 11 May 2012 15:05:21 -0700, David Daney<ddaney.cavm(a)gmail.com>
>>>>> Â wrote:
>>>>>>
>>>>>>
>>>>>> From: David Daney<david.daney(a)cavium.com>
>>>>>>
>>>>>> When generating MODALIASes, it is convenient to add things like "spi:"
>>>>>> or "i2c:" to the front of the strings. Â This allows the standard
>>>>>> modprobe to find the right driver when automatically populating bus
>>>>>> children from the device tree structure.
>>>>>>
>>>>>> Add a prefix parameter, and adjust callers. Â For
>>>>>> of_register_spi_devices() use the "spi:" prefix.
>>>>>>
>>>>>> Signed-off-by: David Daney<david.daney(a)cavium.com>
>>>>>
>>>>>
>>>>>
>>>>> Applied, thanks. Â Some notes below...
>>>>
>>>>
>>>>
>>>> Wait... why is this necessary?
>>>
>>>
>>>
>>> Because in of_register_spi_devices() in of_spi.c, you do:
>>>
>>> Â Â Â Â request_module(spi->modalias);
>>>
>>> The string passed to request_module() must have the "spi:" prefix.
>>
>>
>> How about modifying the call to request_module() to include the prefix
>> also? Â I think that would be a simpler change overall. Â Would that
>> work?
>
>
> It seems to. Â I just sent such a patch in a new thread.
>
> David Daney
--
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.
1
0

Re: [alsa-devel] [PATCH 1/3] of: Add prefix parameter to of_modalias_node().
by Grant Likely 22 May '12
by Grant Likely 22 May '12
22 May '12
On Tue, May 22, 2012 at 1:45 PM, David Daney <ddaney.cavm(a)gmail.com> wrote:
> On 05/19/2012 11:08 PM, Grant Likely wrote:
>>
>> On Sat, 19 May 2012 23:54:36 -0600, Grant
>> Likely<grant.likely(a)secretlab.ca> Â wrote:
>>>
>>> On Fri, 11 May 2012 15:05:21 -0700, David Daney<ddaney.cavm(a)gmail.com>
>>> Â wrote:
>>>>
>>>> From: David Daney<david.daney(a)cavium.com>
>>>>
>>>> When generating MODALIASes, it is convenient to add things like "spi:"
>>>> or "i2c:" to the front of the strings. Â This allows the standard
>>>> modprobe to find the right driver when automatically populating bus
>>>> children from the device tree structure.
>>>>
>>>> Add a prefix parameter, and adjust callers. Â For
>>>> of_register_spi_devices() use the "spi:" prefix.
>>>>
>>>> Signed-off-by: David Daney<david.daney(a)cavium.com>
>>>
>>>
>>> Applied, thanks. Â Some notes below...
>>
>>
>> Wait... why is this necessary?
>
>
> Because in of_register_spi_devices() in of_spi.c, you do:
>
> Â Â Â Â request_module(spi->modalias);
>
> The string passed to request_module() must have the "spi:" prefix.
How about modifying the call to request_module() to include the prefix
also? I think that would be a simpler change overall. Would that
work?
g.
1
0

[alsa-devel] [PATCH 3/3] sb_mixer: Add extended SB16 mixer controls for newer chips
by Ondrej Zary 22 May '12
by Ondrej Zary 22 May '12
22 May '12
Newer SB16 chips (Vibra 16C and later) have extended mixer controls.
This detects them and enables automatically if present.
Supported extended controls:
Synth Playback Switch
PCM Playback Switch
Beep Playback Switch
Master Playback Switch
PCM Capture Switch
Master Capture Volume
Master Capture Switch
Vibra 16XV has an additional Aux input which is used on
SF16-FMD and SF16-FMD2 cards to connect the onboard FM tuner:
Aux Playback Switch
Aux Volume
Aux Capture Switch
Signed-off-by: Ondrej Zary <linux(a)rainbow-software.org>
--- a/include/sound/sb.h
+++ b/include/sound/sb.h
@@ -214,6 +214,12 @@ struct snd_sb {
#define SB_DSP4_IGAIN_DEV 0x3f
#define SB_DSP4_OGAIN_DEV 0x41
#define SB_DSP4_MIC_AGC 0x43
+/* extended registers for newer SB16 */
+#define SB_DSP4_OUTPUT2_SW 0x48
+#define SB_DSP4_MASTER_SW 0x49
+#define SB_DSP4_INPUT2_SW 0x4a
+#define SB_DSP4_MASTER_REC_DEV 0x50
+#define SB_DSP4_AUX_DEV 0x52
/* additional registers for SB 16 mixer */
#define SB_DSP4_IRQSETUP 0x80
--- a/sound/isa/sb/sb_mixer.c
+++ b/sound/isa/sb/sb_mixer.c
@@ -615,6 +615,38 @@ static struct sbmix_elem snd_sb16_gain_ctls[] = {
SB_DSP4_OGAIN_DEV, (SB_DSP4_OGAIN_DEV + 1), 6, 6, 3),
};
+static struct sbmix_elem snd_sb16_output2_ctls[] = {
+ SB_DOUBLE("Synth Playback Switch",
+ SB_DSP4_OUTPUT2_SW, SB_DSP4_OUTPUT2_SW, 4, 3, 1),
+ SB_DOUBLE("PCM Playback Switch",
+ SB_DSP4_OUTPUT2_SW, SB_DSP4_OUTPUT2_SW, 2, 1, 1),
+ SB_SINGLE("Beep Playback Switch", SB_DSP4_OUTPUT2_SW, 0, 1),
+};
+
+static struct sbmix_elem snd_sb16_master_sw_ctl =
+ SB_DOUBLE("Master Playback Switch",
+ SB_DSP4_MASTER_SW, SB_DSP4_MASTER_SW, 3, 2, 1);
+
+static struct sbmix_elem snd_sb16_pcm_capture_sw_ctl =
+ SB_DOUBLE("PCM Capture Switch",
+ SB_DSP4_INPUT2_SW, SB_DSP4_INPUT2_SW, 1, 0, 1);
+
+static struct sbmix_elem snd_sb16_master_rec_ctls[] = {
+ SB_DOUBLE("Master Capture Volume",
+ SB_DSP4_MASTER_REC_DEV, (SB_DSP4_MASTER_REC_DEV + 1), 3, 3, 31),
+ SB_DOUBLE("Master Capture Switch",
+ SB_DSP4_MASTER_SW, SB_DSP4_MASTER_SW, 1, 0, 1),
+};
+
+static struct sbmix_elem snd_sb16_aux_ctls[] = {
+ SB_DOUBLE("Aux Playback Switch",
+ SB_DSP4_OUTPUT2_SW, SB_DSP4_OUTPUT2_SW, 6, 5, 1),
+ SB_DOUBLE("Aux Volume",
+ SB_DSP4_AUX_DEV, (SB_DSP4_AUX_DEV + 1), 3, 3, 31),
+ SB_DOUBLE("Aux Capture Switch",
+ SB_DSP4_INPUT2_SW, SB_DSP4_INPUT2_SW, 3, 2, 1),
+};
+
static struct sbmix_elem snd_sb16_3d_ctl =
SB_SINGLE("3D Control - Switch", SB_DSP4_3DSE, 0, 1);
@@ -789,6 +821,43 @@ static int snd_sbmixer_sb16_opt_init(struct snd_sb *chip)
if (err < 0)
return err;
}
+ /* CT8903 has the following registers but they don't do anything */
+ if (sb16_type == CT8903)
+ return 0;
+ /* additional playback switches */
+ if ((snd_sbmixer_read(chip, SB_DSP4_OUTPUT2_SW) & 0x9f) == 0x1f)
+ for (idx = 0; idx < ARRAY_SIZE(snd_sb16_output2_ctls); idx++) {
+ err = snd_sbmixer_add_ctl_elem(chip, &snd_sb16_output2_ctls[idx]);
+ if (err < 0)
+ return err;
+ }
+ /* master playback switch */
+ if ((snd_sbmixer_read(chip, SB_DSP4_MASTER_SW) & 0xfc) == 0x0c) {
+ err = snd_sbmixer_add_ctl_elem(chip, &snd_sb16_master_sw_ctl);
+ if (err < 0)
+ return err;
+ }
+ /* PCM capture switch */
+ snd_sbmixer_write(chip, SB_DSP4_INPUT2_SW, 0xff);
+ if ((snd_sbmixer_read(chip, SB_DSP4_INPUT2_SW) & 0xf3) == 0x03) {
+ err = snd_sbmixer_add_ctl_elem(chip, &snd_sb16_pcm_capture_sw_ctl);
+ if (err < 0)
+ return err;
+ }
+ /* master capture volume + switch (CT2511) */
+ if (snd_sbmixer_read(chip, SB_DSP4_MASTER_REC_DEV) == 0xe0)
+ for (idx = 0; idx < ARRAY_SIZE(snd_sb16_master_rec_ctls); idx++) {
+ err = snd_sbmixer_add_ctl_elem(chip, &snd_sb16_master_rec_ctls[idx]);
+ if (err < 0)
+ return err;
+ }
+ /* Aux input + switches (CT2511) */
+ if (snd_sbmixer_read(chip, SB_DSP4_AUX_DEV) == 0xc0)
+ for (idx = 0; idx < ARRAY_SIZE(snd_sb16_aux_ctls); idx++) {
+ err = snd_sbmixer_add_ctl_elem(chip, &snd_sb16_aux_ctls[idx]);
+ if (err < 0)
+ return err;
+ }
return 0;
}
--
Ondrej Zary
1
0

22 May '12
SB16 volume controls affect both playback and recording. Correct the volume controls to match that.
(Beep volume was already correct).
Correct misleading "Capture Volume" and "Playback Volume" names - they're in fact gain controls.
Also change "3D Enhancement Switch" to standard name "3D Control - Switch".
Signed-off-by: Ondrej Zary <linux(a)rainbow-software.org>
--- a/sound/isa/sb/sb_mixer.c
+++ b/sound/isa/sb/sb_mixer.c
@@ -579,31 +579,31 @@ static struct sbmix_elem snd_sb16_controls[] = {
SB_DSP4_PCM_DEV, (SB_DSP4_PCM_DEV + 1), 3, 3, 31),
SB16_INPUT_SW("Synth Capture Route",
SB_DSP4_INPUT_LEFT, SB_DSP4_INPUT_RIGHT, 6, 5),
- SB_DOUBLE("Synth Playback Volume",
+ SB_DOUBLE("Synth Volume",
SB_DSP4_SYNTH_DEV, (SB_DSP4_SYNTH_DEV + 1), 3, 3, 31),
SB16_INPUT_SW("CD Capture Route",
SB_DSP4_INPUT_LEFT, SB_DSP4_INPUT_RIGHT, 2, 1),
SB_DOUBLE("CD Playback Switch",
SB_DSP4_OUTPUT_SW, SB_DSP4_OUTPUT_SW, 2, 1, 1),
- SB_DOUBLE("CD Playback Volume",
+ SB_DOUBLE("CD Volume",
SB_DSP4_CD_DEV, (SB_DSP4_CD_DEV + 1), 3, 3, 31),
SB16_INPUT_SW("Mic Capture Route",
SB_DSP4_INPUT_LEFT, SB_DSP4_INPUT_RIGHT, 0, 0),
SB_SINGLE("Mic Playback Switch", SB_DSP4_OUTPUT_SW, 0, 1),
- SB_SINGLE("Mic Playback Volume", SB_DSP4_MIC_DEV, 3, 31),
+ SB_SINGLE("Mic Volume", SB_DSP4_MIC_DEV, 3, 31),
SB_SINGLE("Beep Volume", SB_DSP4_SPEAKER_DEV, 6, 3),
- SB_DOUBLE("Capture Volume",
+ SB_DOUBLE("Gain Capture Volume",
SB_DSP4_IGAIN_DEV, (SB_DSP4_IGAIN_DEV + 1), 6, 6, 3),
- SB_DOUBLE("Playback Volume",
+ SB_DOUBLE("Gain Playback Volume",
SB_DSP4_OGAIN_DEV, (SB_DSP4_OGAIN_DEV + 1), 6, 6, 3),
SB16_INPUT_SW("Line Capture Route",
SB_DSP4_INPUT_LEFT, SB_DSP4_INPUT_RIGHT, 4, 3),
SB_DOUBLE("Line Playback Switch",
SB_DSP4_OUTPUT_SW, SB_DSP4_OUTPUT_SW, 4, 3, 1),
- SB_DOUBLE("Line Playback Volume",
+ SB_DOUBLE("Line Volume",
SB_DSP4_LINE_DEV, (SB_DSP4_LINE_DEV + 1), 3, 3, 31),
SB_SINGLE("Mic Auto Gain", SB_DSP4_MIC_AGC, 0, 1),
- SB_SINGLE("3D Enhancement Switch", SB_DSP4_3DSE, 0, 1),
+ SB_SINGLE("3D Control - Switch", SB_DSP4_3DSE, 0, 1),
SB_DOUBLE("Tone Control - Bass",
SB_DSP4_BASS_DEV, (SB_DSP4_BASS_DEV + 1), 4, 4, 15),
SB_DOUBLE("Tone Control - Treble",
--
Ondrej Zary
1
0
On Tue, May 22, 2012 at 12:57:35PM +0000, Software Maintainer wrote:
> This patch adds support for the Dialog DA732x audio codec.
>
> Signed-off-by: Michal Hajduk <Michal.Hajduk(a)diasemi.com>
> Signed-off-by: Adam Thomson <Adam.Thomson(a)diasemi.com>
I've not had time to look at the patch yet but I need these to come from
a human with proper signoffs, not from a role account. The signoff bit
is really important for licensing purposes, see SubmittingPatches.
2
1

[alsa-devel] [PATCH V2 00/11] enable imx6q_sabrelite sgtl5000 audio support
by Richard Zhao 22 May '12
by Richard Zhao 22 May '12
22 May '12
Changes since v1:
- rebase to latest clk and pinctrl base
- fix according v1 comments.
You can also get at:
https://github.com/riczhao/kernel-imx/tree/topics/audio
Richard Zhao (11):
dma: imx-sdma: make channel0 operations atomic
ARM: dts: imx6q-sabrelite: add i2c1 pinctrl support
ASoC: imx-audmux: add pinctrl support
ARM: dts: imx6q-sabrelite: add audmux pinctrl support
ARM: imx6q: add ssi1_ipg clk_lookup
ASoC: fsl_ssi: convert to use devm_clk_get
ARM: imx6q_sabrelite: clk_register_clkdev cko1 for sgtl5000
ARM: dts: imx6q-sabrelite: add sound device imx6q-sabrelite-sgtl5000
ARM: dts: imx6q-sabrelite: add serial2 pinctrl support
ARM: imx6q: change clkdev device name from xxxx.uart to xxxx.serial
ARM: imx6q: change clkdev device name from xxxx.enet to xxxx.ethernet
arch/arm/boot/dts/imx6q-sabrelite.dts | 20 +++++++++++
arch/arm/boot/dts/imx6q.dtsi | 23 +++++++++++++
arch/arm/mach-imx/clk-imx6q.c | 35 +++++++++++---------
arch/arm/mach-imx/mach-imx6q.c | 28 ++++++++++++++++
drivers/dma/imx-sdma.c | 57 ++++++++++++++++++---------------
sound/soc/fsl/fsl_ssi.c | 7 +---
sound/soc/fsl/imx-audmux.c | 8 +++++
7 files changed, 132 insertions(+), 46 deletions(-)
--
1.7.5.4
10
60
On Mon, May 21, 2012 at 05:33:42PM -0700, Qiao Zhou wrote:
> Is there any suggestion/comment for this patch? Thanks!
Don't top post.
> +config SND_PXA_SOC_SQU
> + tristate
> + select GENERIC_ALLOCATOR
> +
The main reason I've left this is that I'm trying to decide what to say
about the fact that it's not using dmaengine - why is it not doing so?
There's also a few smaller issues below:
> + for (i = 0; i < 2; i++) {
> + dint = SDISR(i);
> + if (dint) {
> + substream = squ_data->stream[i];
> + prtd = substream->runtime->private_data;
> + if (SDISR(i) & 0x1)
> + snd_pcm_period_elapsed(substream);
> + else
> + pr_debug("%s: SQU error on channel %d\n",
> + prtd->params->name, i);
Should be dev_err().
> + SDISR(i) = 0;
> + }
> + }
> +
> + return IRQ_HANDLED;
This interrupt handler unconditionally returns IRQ_HANDLED even if there
were no interrupts reported. It should probably only do this if one of
the tests in the loop returned true.
> + /* return if this is a bufferless transfer e.g.
> + * codec <--> BT codec or GSM modem -- lg FIXME */
> + if (!dma)
> + return 0;
Remove this, systems should use the framework features for this (and I
don't think you're Liam...).
> + prtd = kzalloc(sizeof(struct pxa_runtime_data), GFP_KERNEL);
> + if (prtd == NULL) {
> + ret = -ENOMEM;
> + goto out;
> + }
devm_kzalloc().
> +struct snd_soc_platform_driver pxa_squ_soc_platform = {
> + .ops = &pxa_squ_pcm_ops,
> + .pcm_new = pxa_squ_pcm_new,
> + .pcm_free = pxa_squ_pcm_free,
> +};
> +EXPORT_SYMBOL_GPL(pxa_squ_soc_platform);
This should never need to be exported.
> + squ_data = kzalloc(sizeof(struct pxa_squ_priv), GFP_KERNEL);
> + if (!squ_data)
> + return -ENOMEM;
devm_kzalloc().
> + squ_data->irq = pdata->irq;
Shouldn't the interrupt be supplied via a resource?
> + ret =
> + request_irq(squ_data->irq, pxa_squ_dma_irq, IRQF_DISABLED,
> + "pxa-squ", pdev);
> + if (ret) {
> + pr_err("Wow! Can't register IRQ for SQU\n");
dev_err() and print the error code.
> +static int __init pxa_squ_pcm_modinit(void)
> +{
> + return platform_driver_register(&pxa_squ_driver);
> +}
> +
> +module_init(pxa_squ_pcm_modinit);
module_platform_driver().
1
0
Hi,
Can snd_pcm_drain() be safely called on a non-running stream - particularly
one in SND_PCM_STATE_XRUN? I can demonstrate lock-ups (on rather old Alsa
versions, though) when _drain is called on a stream in Xrun but it does seem
to vary between hardwares.
However, the docs at:
http://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html
suggest that it should be fine.
In our case it seems safer (for widest compatibility) to always check for
SND_PCM_STATE_RUNNING, and call snd_pcm_drop() if the stream is not running.
Regards
Alan
2
3

Re: [alsa-devel] [PATCH 2/2] ASoC: fix pxa-ssp compiling issue under mach-mmp
by Haojian Zhuang 22 May '12
by Haojian Zhuang 22 May '12
22 May '12
On Tue, May 22, 2012 at 2:58 PM, Qiao Zhou <zhouqiao(a)marvell.com> wrote:
> pxa-ssp.c uses API like cpu_is_pxa3xx(), cpu_is_pxa2xx(), which is
> defined under arch-pxa architecture, so to compile it under mach-mmp
> just add CONFIG_ARCH_PXA macro to separate it.
>
> Signed-off-by: Qiao Zhou <zhouqiao(a)marvell.com>
> ---
> Â sound/soc/pxa/pxa-ssp.c | Â 25 ++++++++++++++++++-------
> Â 1 files changed, 18 insertions(+), 7 deletions(-)
>
Acked-by: Haojian Zhuang <haojian.zhuang(a)gmail.com>
Mark,
Do you mind that both of these two patches could apply into asoc git tree?
Regards
Haojian
--
To unsubscribe from this list: send the line "unsubscribe alsa-devel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
1
0

Re: [alsa-devel] [PATCH 1/2] ARM: MMP: add pxa910-ssp into ssp_id_table
by Haojian Zhuang 22 May '12
by Haojian Zhuang 22 May '12
22 May '12
On Tue, May 22, 2012 at 2:57 PM, Qiao Zhou <zhouqiao(a)marvell.com> wrote:
> add pxa910-ssp into ssp_id_table, and fix pxa-ssp compiling issue
> under mach-mmp architect.
>
> Signed-off-by: Qiao Zhou <zhouqiao(a)marvell.com>
> ---
>  arch/arm/plat-pxa/ssp.c     |   1 +
>  include/linux/pxa2xx_ssp.h   |   1 +
> Â include/linux/spi/pxa2xx_spi.h | Â Â 2 +-
> Â 3 files changed, 3 insertions(+), 1 deletions(-)
>
Acked-by: Haojian Zhuang <haojian.zhuang(a)gmail.com>
--
To unsubscribe from this list: send the line "unsubscribe alsa-devel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
1
0

22 May '12
On Fri, May 18, 2012 at 4:43 PM, Qiao Zhou <zhouqiao(a)marvell.com> wrote:
> add pxa-squ header file to support SQU DMA.
>
> Signed-off-by: Qiao Zhou <zhouqiao(a)marvell.com>
> ---
> Â arch/arm/mach-mmp/include/mach/pxa-squ.h | Â 39 ++++++++++++++++++++++++++++++
> Â 1 files changed, 39 insertions(+), 0 deletions(-)
> Â create mode 100644 arch/arm/mach-mmp/include/mach/pxa-squ.h
>
> diff --git a/arch/arm/mach-mmp/include/mach/pxa-squ.h b/arch/arm/mach-mmp/include/mach/pxa-squ.h
> new file mode 100644
> index 0000000..3ee187f
> --- /dev/null
> +++ b/arch/arm/mach-mmp/include/mach/pxa-squ.h
> @@ -0,0 +1,39 @@
> +#ifndef __MACH_SQU_H
> +#define __MACH_SQU_H
> +
> +#include <mach/addr-map.h>
> +
> +#define SQU_REGS_VIRT Â (AXI_VIRT_BASE + 0xA0000)
> +#define SQU_REG(x) Â Â (*((__iomem u32 *)(SQU_REGS_VIRT + (x))))
> +
> + /*SQU*/
> +#define SDSAR(x) Â Â Â Â Â Â Â SQU_REG(0x810 + ((x) << 2))
> +#define SDDAR(x) Â Â Â Â Â Â Â SQU_REG(0x820 + ((x) << 2))
> +#define SDNDPR(x) Â Â Â Â Â Â Â SQU_REG(0x830 + ((x) << 2))
> +#define SDCR(x) Â Â Â Â Â Â Â Â Â Â Â Â SQU_REG(0x840 + ((x) << 2))
> +#define SDIMR(x) Â Â Â Â Â Â Â SQU_REG(0x880 + ((x) << 2))
> +#define SDISR(x) Â Â Â Â Â Â Â SQU_REG(0x8a0 + ((x) << 2))
> +#define SDCR_SSPMOD Â Â Â Â Â Â (1 << 21) Â Â Â /* SSPMod */
> +#define SDCR_FETCHND Â (1 << 13)
> +#define SDCR_CHANEN Â Â Â Â Â Â (1 << 12) Â Â Â /* Channel Enable */
> +#define SDCR_DST_ADDR_INC Â Â Â (0 << 4)
> +#define SDCR_DST_ADDR_HOLD Â Â (0x2 << 4)
> +#define SDCR_SRC_ADDR_INC Â Â Â (0 << 2)
> +#define SDCR_SRC_ADDR_HOLD Â Â (0x2 << 2)
> +#define SDCR_DMA_BURST_4B Â Â Â (0x0 << 6)
> +#define SDCR_DMA_BURST_8B Â Â Â (0x1 << 6)
> +#define SDCR_DMA_BURST_16B Â Â (0x3 << 6)
> +#define SDCR_DMA_BURST_1B Â Â Â (0x5 << 6)
> +#define SDCR_DMA_BURST_2B Â Â Â (0x6 << 6)
> +#define SDCR_DMA_BURST_32B Â Â (0x7 << 6)
> +#define SDIMR_COMP Â Â Â Â Â Â Â Â Â Â (1 << 0)
> +
> +struct pxa_squ_platdata {
> + Â Â Â char *pool_name;
> + Â Â Â int irq;
> + Â Â Â int period_max_out; Â Â Â Â Â Â /* max period size for playback */
> + Â Â Â int period_max_in; Â Â Â Â Â Â Â /* max period size for capture */
> + Â Â Â int buffer_max_out; Â Â Â Â Â Â /* max buffer size for playback */
> + Â Â Â int buffer_max_in; Â Â Â Â Â Â Â /* max buffer size for capture */
> +};
> +#endif /* __MACH_SQU_H */
> --
> 1.7.4.1
>
Acked all.
Mark,
Would you mind to apply this patch series?
Thanks
Haojian
--
To unsubscribe from this list: send the line "unsubscribe alsa-devel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
1
0
The following changes since commit 5fb86e5d4a951ddb0474cdfd809380c8e2a8d101:
ARM: mx31_3ds: Add sound support (2012-05-18 16:42:44 +0100)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git tags/asoc-3.5
for you to fetch changes up to 766812e6d5e2e23be1e212cf84902d5e834dd865:
ASoC: sh: fsi: enable chip specific data transfer mode (2012-05-19 19:41:45 +0100)
----------------------------------------------------------------
ASoC: Last minute updates
These are all new code, they've been in -next already so should be OK
for merge this time round. I'd been planning to send a pull request
today after they'd had a bit of exposure there to make sure breakage
didn't propagate into your tree.
----------------------------------------------------------------
Kuninori Morimoto (5):
ASoC: sh: fsi: use register field macro name on IN/OUT_DMAC
ASoC: sh: fsi: add fsi_version() and removed meaningless version check
ASoC: sh: fsi: use same format for IN/OUT
ASoC: sh: fsi: call fsi_hw_startup/shutdown from fsi_dai_trigger()
ASoC: sh: fsi: enable chip specific data transfer mode
Ricardo Neri (1):
ASoC: OMAP: HDMI: Introduce codec
Stephen Warren (1):
ASoC: tegra: Add machine driver for WM8753 codec
.../bindings/sound/tegra-audio-wm8753.txt | 54 +++++
include/sound/sh_fsi.h | 6 +-
sound/soc/codecs/Kconfig | 4 +
sound/soc/codecs/Makefile | 2 +
sound/soc/codecs/omap-hdmi.c | 69 ++++++
sound/soc/omap/Kconfig | 1 +
sound/soc/sh/fsi.c | 224 ++++++++++++++------
sound/soc/tegra/Kconfig | 10 +
sound/soc/tegra/Makefile | 2 +
sound/soc/tegra/tegra_wm8753.c | 224 ++++++++++++++++++++
10 files changed, 529 insertions(+), 67 deletions(-)
create mode 100644 Documentation/devicetree/bindings/sound/tegra-audio-wm8753.txt
create mode 100644 sound/soc/codecs/omap-hdmi.c
create mode 100644 sound/soc/tegra/tegra_wm8753.c
2
1

21 May '12
Set some substream struct members to make the proc interface code work
again.
Signed-off-by: Daniel Mack <zonque(a)gmail.com>
Reported-by: Felix Homann <linuxaudio(a)showlabor.de>
---
sound/usb/pcm.c | 12 ++++++++++++
1 files changed, 12 insertions(+), 0 deletions(-)
diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c
index 2d3a04d..24839d9 100644
--- a/sound/usb/pcm.c
+++ b/sound/usb/pcm.c
@@ -474,6 +474,11 @@ unlock:
mutex_unlock(&subs->stream->chip->shutdown_mutex);
}
+ if (ret == 0) {
+ subs->interface = fmt->iface;
+ subs->altset_idx = fmt->altset_idx;
+ }
+
return ret;
}
@@ -1123,13 +1128,16 @@ static int snd_usb_substream_playback_trigger(struct snd_pcm_substream *substrea
case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
subs->data_endpoint->prepare_data_urb = prepare_playback_urb;
subs->data_endpoint->retire_data_urb = retire_playback_urb;
+ subs->running = 1;
return 0;
case SNDRV_PCM_TRIGGER_STOP:
stop_endpoints(subs, 0, 0, 0);
+ subs->running = 0;
return 0;
case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
subs->data_endpoint->prepare_data_urb = NULL;
subs->data_endpoint->retire_data_urb = NULL;
+ subs->running = 0;
return 0;
}
@@ -1148,15 +1156,19 @@ int snd_usb_substream_capture_trigger(struct snd_pcm_substream *substream, int c
return err;
subs->data_endpoint->retire_data_urb = retire_capture_urb;
+ subs->running = 1;
return 0;
case SNDRV_PCM_TRIGGER_STOP:
stop_endpoints(subs, 0, 0, 0);
+ subs->running = 0;
return 0;
case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
subs->data_endpoint->retire_data_urb = NULL;
+ subs->running = 0;
return 0;
case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
subs->data_endpoint->retire_data_urb = retire_capture_urb;
+ subs->running = 1;
return 0;
}
--
1.7.5.4
2
1

[alsa-devel] snd-usb-audio: Substream status not set with new streaming logic
by Felix Homann 21 May '12
by Felix Homann 21 May '12
21 May '12
With the new streaming logic subs->running will never be set to 1. So
/proc/... will never show the streams as running. Formerly the status
was set in endpoint.c.
Daniel?
Regards,
Felix
2
1

[alsa-devel] [PATCH] sound: sh: Fix up namespace collision in sh_dac_audio.
by Paul Mundt 21 May '12
by Paul Mundt 21 May '12
21 May '12
The module_platform_driver() conversion ended up tripping over the driver
name, leading to confusion in the macro with regards to 'driver' being
redefined. rename it to something slightly more suitable to avoid
namespace collisions.
sound/sh/sh_dac_audio.c:444:122: error: conflicting types for 'driver_init'
include/linux/device.h:773:6: note: previous declaration of 'driver_init' was here
make[3]: *** [sound/sh/sh_dac_audio.o] Error 1
Signed-off-by: Paul Mundt <lethal(a)linux-sh.org>
---
sound/sh/sh_dac_audio.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/sound/sh/sh_dac_audio.c b/sound/sh/sh_dac_audio.c
index b11f82b..f8b01c7 100644
--- a/sound/sh/sh_dac_audio.c
+++ b/sound/sh/sh_dac_audio.c
@@ -433,7 +433,7 @@ probe_error:
/*
* "driver" definition
*/
-static struct platform_driver driver = {
+static struct platform_driver sh_dac_driver = {
.probe = snd_sh_dac_probe,
.remove = snd_sh_dac_remove,
.driver = {
@@ -441,4 +441,4 @@ static struct platform_driver driver = {
},
};
-module_platform_driver(driver);
+module_platform_driver(sh_dac_driver);
2
1

20 May '12
From: David Daney <david.daney(a)cavium.com>
When generating MODALIASes, it is convenient to add things like "spi:"
or "i2c:" to the front of the strings. This allows the standard
modprobe to find the right driver when automatically populating bus
children from the device tree structure.
Add a prefix parameter, and adjust callers. For
of_register_spi_devices() use the "spi:" prefix.
Signed-off-by: David Daney <david.daney(a)cavium.com>
Cc: Liam Girdwood <lrg(a)ti.com>
Cc: Timur Tabi <timur(a)freescale.com>
Cc: Mark Brown <broonie(a)opensource.wolfsonmicro.com>
Cc: Jaroslav Kysela <perex(a)perex.cz>
Cc: Takashi Iwai <tiwai(a)suse.de>
Cc: alsa-devel(a)alsa-project.org
Cc: linuxppc-dev(a)lists.ozlabs.org
---
drivers/of/base.c | 22 ++++++++++++++++------
drivers/of/of_i2c.c | 2 +-
drivers/of/of_spi.c | 2 +-
include/linux/of.h | 3 ++-
sound/soc/fsl/mpc8610_hpcd.c | 2 +-
sound/soc/fsl/p1022_ds.c | 2 +-
6 files changed, 22 insertions(+), 11 deletions(-)
diff --git a/drivers/of/base.c b/drivers/of/base.c
index 5806449..f05a520 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -575,26 +575,36 @@ EXPORT_SYMBOL(of_find_matching_node);
/**
* of_modalias_node - Lookup appropriate modalias for a device node
* @node: pointer to a device tree node
+ * @prefix: prefix to be added to the compatible property, may be NULL
* @modalias: Pointer to buffer that modalias value will be copied into
* @len: Length of modalias value
*
- * Based on the value of the compatible property, this routine will attempt
- * to choose an appropriate modalias value for a particular device tree node.
- * It does this by stripping the manufacturer prefix (as delimited by a ',')
- * from the first entry in the compatible list property.
+ * Based on the value of the compatible property, this routine will
+ * attempt to choose an appropriate modalias value for a particular
+ * device tree node. It does this by stripping the manufacturer
+ * prefix (as delimited by a ',') from the first entry in the
+ * compatible list property, and appending it to the prefix.
*
* This routine returns 0 on success, <0 on failure.
*/
-int of_modalias_node(struct device_node *node, char *modalias, int len)
+int of_modalias_node(struct device_node *node, const char *prefix,
+ char *modalias, int len)
{
const char *compatible, *p;
int cplen;
+ if (len < 1)
+ return -EINVAL;
+
compatible = of_get_property(node, "compatible", &cplen);
if (!compatible || strlen(compatible) > cplen)
return -ENODEV;
p = strchr(compatible, ',');
- strlcpy(modalias, p ? p + 1 : compatible, len);
+ if (prefix)
+ strlcpy(modalias, prefix, len);
+ else
+ modalias[0] = 0;
+ strlcat(modalias, p ? p + 1 : compatible, len);
return 0;
}
EXPORT_SYMBOL_GPL(of_modalias_node);
diff --git a/drivers/of/of_i2c.c b/drivers/of/of_i2c.c
index f37fbeb..23b05ee 100644
--- a/drivers/of/of_i2c.c
+++ b/drivers/of/of_i2c.c
@@ -37,7 +37,7 @@ void of_i2c_register_devices(struct i2c_adapter *adap)
dev_dbg(&adap->dev, "of_i2c: register %s\n", node->full_name);
- if (of_modalias_node(node, info.type, sizeof(info.type)) < 0) {
+ if (of_modalias_node(node, NULL, info.type, sizeof(info.type)) < 0) {
dev_err(&adap->dev, "of_i2c: modalias failure on %s\n",
node->full_name);
continue;
diff --git a/drivers/of/of_spi.c b/drivers/of/of_spi.c
index 6dbc074..c329c6d 100644
--- a/drivers/of/of_spi.c
+++ b/drivers/of/of_spi.c
@@ -42,7 +42,7 @@ void of_register_spi_devices(struct spi_master *master)
}
/* Select device driver */
- if (of_modalias_node(nc, spi->modalias,
+ if (of_modalias_node(nc, SPI_MODULE_PREFIX, spi->modalias,
sizeof(spi->modalias)) < 0) {
dev_err(&master->dev, "cannot find modalias for %s\n",
nc->full_name);
diff --git a/include/linux/of.h b/include/linux/of.h
index fa7fb1d..ee34d76 100644
--- a/include/linux/of.h
+++ b/include/linux/of.h
@@ -233,7 +233,8 @@ extern int of_n_addr_cells(struct device_node *np);
extern int of_n_size_cells(struct device_node *np);
extern const struct of_device_id *of_match_node(
const struct of_device_id *matches, const struct device_node *node);
-extern int of_modalias_node(struct device_node *node, char *modalias, int len);
+extern int of_modalias_node(struct device_node *node,
+ const char *prefix, char *modalias, int len);
extern struct device_node *of_parse_phandle(struct device_node *np,
const char *phandle_name,
int index);
diff --git a/sound/soc/fsl/mpc8610_hpcd.c b/sound/soc/fsl/mpc8610_hpcd.c
index 3fea5a1..1fa0682 100644
--- a/sound/soc/fsl/mpc8610_hpcd.c
+++ b/sound/soc/fsl/mpc8610_hpcd.c
@@ -254,7 +254,7 @@ static int codec_node_dev_name(struct device_node *np, char *buf, size_t len)
char temp[DAI_NAME_SIZE];
struct i2c_client *i2c;
- of_modalias_node(np, temp, DAI_NAME_SIZE);
+ of_modalias_node(np, NULL, temp, DAI_NAME_SIZE);
iprop = of_get_property(np, "reg", NULL);
if (!iprop)
diff --git a/sound/soc/fsl/p1022_ds.c b/sound/soc/fsl/p1022_ds.c
index 982a1c9..3ea51ec 100644
--- a/sound/soc/fsl/p1022_ds.c
+++ b/sound/soc/fsl/p1022_ds.c
@@ -257,7 +257,7 @@ static int codec_node_dev_name(struct device_node *np, char *buf, size_t len)
char temp[DAI_NAME_SIZE];
struct i2c_client *i2c;
- of_modalias_node(np, temp, DAI_NAME_SIZE);
+ of_modalias_node(np, NULL, temp, DAI_NAME_SIZE);
iprop = of_get_property(np, "reg", NULL);
if (!iprop)
--
1.7.2.3
2
2

19 May '12
Hi Mark, Liam
These patches add stream transfer mode to FSI2
Kuninori Morimoto (5):
ASoC: sh: fsi: use register field macro name on IN/OUT_DMAC
ASoC: sh: fsi: add fsi_version() and removed meaningless version check
ASoC: sh: fsi: use same format for IN/OUT
ASoC: sh: fsi: call fsi_hw_startup/shutdown from fsi_dai_trigger()
ASoC: sh: fsi: enable chip specific data transfer mode
This stream transfer mode is required to use HDMI sound on latest SuperH
Best regards
---
Kuninori Morimoto
3
6

19 May '12
From: Stephen Warren <swarren(a)nvidia.com>
One such machine is Whistler.
Signed-off-by: Stephen Warren <swarren(a)nvidia.com>
---
Note that I haven't been able to get capture working; enabling sidetone
shows that the mic is working correctly (sound from mic shows up at
headphones), but arecord always captures digital 0. I don't think this
is due to wm8753.c using a MICBIAS widget rather than a supply widget,
since I adjusted the audio-routing table to cater for that, based on
neo1973_wm8753.c's routing.
---
.../bindings/sound/tegra-audio-wm8753.txt | 54 +++++
sound/soc/tegra/Kconfig | 10 +
sound/soc/tegra/Makefile | 2 +
sound/soc/tegra/tegra_wm8753.c | 224 ++++++++++++++++++++
4 files changed, 290 insertions(+), 0 deletions(-)
create mode 100644 Documentation/devicetree/bindings/sound/tegra-audio-wm8753.txt
create mode 100644 sound/soc/tegra/tegra_wm8753.c
diff --git a/Documentation/devicetree/bindings/sound/tegra-audio-wm8753.txt b/Documentation/devicetree/bindings/sound/tegra-audio-wm8753.txt
new file mode 100644
index 0000000..c4dd39c
--- /dev/null
+++ b/Documentation/devicetree/bindings/sound/tegra-audio-wm8753.txt
@@ -0,0 +1,54 @@
+NVIDIA Tegra audio complex
+
+Required properties:
+- compatible : "nvidia,tegra-audio-wm8753"
+- nvidia,model : The user-visible name of this sound complex.
+- nvidia,audio-routing : A list of the connections between audio components.
+ Each entry is a pair of strings, the first being the connection's sink,
+ the second being the connection's source. Valid names for sources and
+ sinks are the WM8753's pins, and the jacks on the board:
+
+ WM8753 pins:
+
+ * LOUT1
+ * LOUT2
+ * ROUT1
+ * ROUT2
+ * MONO1
+ * MONO2
+ * OUT3
+ * OUT4
+ * LINE1
+ * LINE2
+ * RXP
+ * RXN
+ * ACIN
+ * ACOP
+ * MIC1N
+ * MIC1
+ * MIC2N
+ * MIC2
+ * Mic Bias
+
+ Board connectors:
+
+ * Headphone Jack
+ * Mic Jack
+
+- nvidia,i2s-controller : The phandle of the Tegra I2S1 controller
+- nvidia,audio-codec : The phandle of the WM8753 audio codec
+Example:
+
+sound {
+ compatible = "nvidia,tegra-audio-wm8753-whistler",
+ "nvidia,tegra-audio-wm8753"
+ nvidia,model = "tegra-wm8753-harmony";
+
+ nvidia,audio-routing =
+ "Headphone Jack", "LOUT1",
+ "Headphone Jack", "ROUT1";
+
+ nvidia,i2s-controller = <&i2s1>;
+ nvidia,audio-codec = <&wm8753>;
+};
+
diff --git a/sound/soc/tegra/Kconfig b/sound/soc/tegra/Kconfig
index 5331c61..c1c8e95 100644
--- a/sound/soc/tegra/Kconfig
+++ b/sound/soc/tegra/Kconfig
@@ -48,6 +48,16 @@ config SND_SOC_TEGRA30_I2S
Tegra30 I2S interface. You will also need to select the individual
machine drivers to support below.
+config SND_SOC_TEGRA_WM8753
+ tristate "SoC Audio support for Tegra boards using a WM8753 codec"
+ depends on SND_SOC_TEGRA && I2C
+ select SND_SOC_TEGRA20_I2S if ARCH_TEGRA_2x_SOC
+ select SND_SOC_TEGRA30_I2S if ARCH_TEGRA_3x_SOC
+ select SND_SOC_WM8753
+ help
+ Say Y or M here if you want to add support for SoC audio on Tegra
+ boards using the WM8753 codec, such as Whistler.
+
config MACH_HAS_SND_SOC_TEGRA_WM8903
bool
help
diff --git a/sound/soc/tegra/Makefile b/sound/soc/tegra/Makefile
index 98704b4..391e78a 100644
--- a/sound/soc/tegra/Makefile
+++ b/sound/soc/tegra/Makefile
@@ -16,10 +16,12 @@ obj-$(CONFIG_SND_SOC_TEGRA30_AHUB) += snd-soc-tegra30-ahub.o
obj-$(CONFIG_SND_SOC_TEGRA30_I2S) += snd-soc-tegra30-i2s.o
# Tegra machine Support
+snd-soc-tegra-wm8753-objs := tegra_wm8753.o
snd-soc-tegra-wm8903-objs := tegra_wm8903.o
snd-soc-tegra-trimslice-objs := trimslice.o
snd-soc-tegra-alc5632-objs := tegra_alc5632.o
+obj-$(CONFIG_SND_SOC_TEGRA_WM8753) += snd-soc-tegra-wm8753.o
obj-$(CONFIG_SND_SOC_TEGRA_WM8903) += snd-soc-tegra-wm8903.o
obj-$(CONFIG_SND_SOC_TEGRA_TRIMSLICE) += snd-soc-tegra-trimslice.o
obj-$(CONFIG_SND_SOC_TEGRA_ALC5632) += snd-soc-tegra-alc5632.o
diff --git a/sound/soc/tegra/tegra_wm8753.c b/sound/soc/tegra/tegra_wm8753.c
new file mode 100644
index 0000000..4e77026
--- /dev/null
+++ b/sound/soc/tegra/tegra_wm8753.c
@@ -0,0 +1,224 @@
+/*
+ * tegra_wm8753.c - Tegra machine ASoC driver for boards using WM8753 codec.
+ *
+ * Author: Stephen Warren <swarren(a)nvidia.com>
+ * Copyright (C) 2010-2012 - NVIDIA, Inc.
+ *
+ * Based on code copyright/by:
+ *
+ * (c) 2009, 2010 Nvidia Graphics Pvt. Ltd.
+ *
+ * Copyright 2007 Wolfson Microelectronics PLC.
+ * Author: Graeme Gregory
+ * graeme.gregory(a)wolfsonmicro.com or linux(a)wolfsonmicro.com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * 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., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ *
+ */
+
+#include <asm/mach-types.h>
+
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/slab.h>
+#include <linux/gpio.h>
+#include <linux/of_gpio.h>
+
+#include <sound/core.h>
+#include <sound/jack.h>
+#include <sound/pcm.h>
+#include <sound/pcm_params.h>
+#include <sound/soc.h>
+
+#include "../codecs/wm8753.h"
+
+#include "tegra_asoc_utils.h"
+
+#define DRV_NAME "tegra-snd-wm8753"
+
+struct tegra_wm8753 {
+ struct tegra_asoc_utils_data util_data;
+};
+
+static int tegra_wm8753_hw_params(struct snd_pcm_substream *substream,
+ struct snd_pcm_hw_params *params)
+{
+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
+ struct snd_soc_dai *codec_dai = rtd->codec_dai;
+ struct snd_soc_codec *codec = rtd->codec;
+ struct snd_soc_card *card = codec->card;
+ struct tegra_wm8753 *machine = snd_soc_card_get_drvdata(card);
+ int srate, mclk;
+ int err;
+
+ srate = params_rate(params);
+ switch (srate) {
+ case 11025:
+ case 22050:
+ case 44100:
+ case 88200:
+ mclk = 11289600;
+ break;
+ default:
+ mclk = 12288000;
+ break;
+ }
+
+ err = tegra_asoc_utils_set_rate(&machine->util_data, srate, mclk);
+ if (err < 0) {
+ dev_err(card->dev, "Can't configure clocks\n");
+ return err;
+ }
+
+ err = snd_soc_dai_set_sysclk(codec_dai, WM8753_MCLK, mclk,
+ SND_SOC_CLOCK_IN);
+ if (err < 0) {
+ dev_err(card->dev, "codec_dai clock not set\n");
+ return err;
+ }
+
+ return 0;
+}
+
+static struct snd_soc_ops tegra_wm8753_ops = {
+ .hw_params = tegra_wm8753_hw_params,
+};
+
+static const struct snd_soc_dapm_widget tegra_wm8753_dapm_widgets[] = {
+ SND_SOC_DAPM_HP("Headphone Jack", NULL),
+ SND_SOC_DAPM_MIC("Mic Jack", NULL),
+};
+
+static struct snd_soc_dai_link tegra_wm8753_dai = {
+ .name = "WM8753",
+ .stream_name = "WM8753 PCM",
+ .codec_dai_name = "wm8753-hifi",
+ .ops = &tegra_wm8753_ops,
+ .dai_fmt = SND_SOC_DAIFMT_I2S |
+ SND_SOC_DAIFMT_NB_NF |
+ SND_SOC_DAIFMT_CBS_CFS,
+};
+
+static struct snd_soc_card snd_soc_tegra_wm8753 = {
+ .name = "tegra-wm8753",
+ .owner = THIS_MODULE,
+ .dai_link = &tegra_wm8753_dai,
+ .num_links = 1,
+
+ .dapm_widgets = tegra_wm8753_dapm_widgets,
+ .num_dapm_widgets = ARRAY_SIZE(tegra_wm8753_dapm_widgets),
+ .fully_routed = true,
+};
+
+static __devinit int tegra_wm8753_driver_probe(struct platform_device *pdev)
+{
+ struct snd_soc_card *card = &snd_soc_tegra_wm8753;
+ struct tegra_wm8753 *machine;
+ int ret;
+
+ machine = devm_kzalloc(&pdev->dev, sizeof(struct tegra_wm8753),
+ GFP_KERNEL);
+ if (!machine) {
+ dev_err(&pdev->dev, "Can't allocate tegra_wm8753 struct\n");
+ ret = -ENOMEM;
+ goto err;
+ }
+
+ card->dev = &pdev->dev;
+ platform_set_drvdata(pdev, card);
+ snd_soc_card_set_drvdata(card, machine);
+
+ ret = snd_soc_of_parse_card_name(card, "nvidia,model");
+ if (ret)
+ goto err;
+
+ ret = snd_soc_of_parse_audio_routing(card, "nvidia,audio-routing");
+ if (ret)
+ goto err;
+
+ tegra_wm8753_dai.codec_of_node = of_parse_phandle(
+ pdev->dev.of_node, "nvidia,audio-codec", 0);
+ if (!tegra_wm8753_dai.codec_of_node) {
+ dev_err(&pdev->dev,
+ "Property 'nvidia,audio-codec' missing or invalid\n");
+ ret = -EINVAL;
+ goto err;
+ }
+
+ tegra_wm8753_dai.cpu_dai_of_node = of_parse_phandle(
+ pdev->dev.of_node, "nvidia,i2s-controller", 0);
+ if (!tegra_wm8753_dai.cpu_dai_of_node) {
+ dev_err(&pdev->dev,
+ "Property 'nvidia,i2s-controller' missing or invalid\n");
+ ret = -EINVAL;
+ goto err;
+ }
+
+ tegra_wm8753_dai.platform_of_node =
+ tegra_wm8753_dai.cpu_dai_of_node;
+
+ ret = tegra_asoc_utils_init(&machine->util_data, &pdev->dev);
+ if (ret)
+ goto err;
+
+ ret = snd_soc_register_card(card);
+ if (ret) {
+ dev_err(&pdev->dev, "snd_soc_register_card failed (%d)\n",
+ ret);
+ goto err_fini_utils;
+ }
+
+ return 0;
+
+err_fini_utils:
+ tegra_asoc_utils_fini(&machine->util_data);
+err:
+ return ret;
+}
+
+static int __devexit tegra_wm8753_driver_remove(struct platform_device *pdev)
+{
+ struct snd_soc_card *card = platform_get_drvdata(pdev);
+ struct tegra_wm8753 *machine = snd_soc_card_get_drvdata(card);
+
+ snd_soc_unregister_card(card);
+
+ tegra_asoc_utils_fini(&machine->util_data);
+
+ return 0;
+}
+
+static const struct of_device_id tegra_wm8753_of_match[] __devinitconst = {
+ { .compatible = "nvidia,tegra-audio-wm8753", },
+ {},
+};
+
+static struct platform_driver tegra_wm8753_driver = {
+ .driver = {
+ .name = DRV_NAME,
+ .owner = THIS_MODULE,
+ .pm = &snd_soc_pm_ops,
+ .of_match_table = tegra_wm8753_of_match,
+ },
+ .probe = tegra_wm8753_driver_probe,
+ .remove = __devexit_p(tegra_wm8753_driver_remove),
+};
+module_platform_driver(tegra_wm8753_driver);
+
+MODULE_AUTHOR("Stephen Warren <swarren(a)nvidia.com>");
+MODULE_DESCRIPTION("Tegra+WM8753 machine ASoC driver");
+MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:" DRV_NAME);
+MODULE_DEVICE_TABLE(of, tegra_wm8753_of_match);
--
1.7.0.4
2
1
The following changes since commit fe33d4c5e2b27a4b82aa479a58f2621eec103d1b:
ASoC: don't flip master of DT-instantiated DAI links (2012-05-16 09:44:18 +0100)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git tags/asoc-3.5
for you to fetch changes up to 5fb86e5d4a951ddb0474cdfd809380c8e2a8d101:
ARM: mx31_3ds: Add sound support (2012-05-18 16:42:44 +0100)
----------------------------------------------------------------
ASoC: mc13783 audio support
A few extra patches adding a new driver and some machines using it.
----------------------------------------------------------------
Philippe Rétornaz (7):
mfd: mc13xxx: add codec platform data
ASoC: Add mc13783 codec
ASoC: add imx-mc13783 sound support
ASoC: mc13783 codec cleanups
mx31moboard: Add sound support
ASoC: imx-mc13783 cleanup
ARM: mx31_3ds: Add sound support
arch/arm/mach-imx/Kconfig | 2 +
arch/arm/mach-imx/mach-mx31_3ds.c | 22 +-
arch/arm/mach-imx/mach-mx31moboard.c | 20 +-
drivers/mfd/mc13xxx-core.c | 3 +-
include/linux/mfd/mc13xxx.h | 11 +
sound/soc/codecs/Kconfig | 4 +
sound/soc/codecs/Makefile | 2 +
sound/soc/codecs/mc13783.c | 786 ++++++++++++++++++++++++++++++++++
sound/soc/codecs/mc13783.h | 28 ++
sound/soc/fsl/Kconfig | 8 +
sound/soc/fsl/Makefile | 2 +
sound/soc/fsl/imx-mc13783.c | 156 +++++++
12 files changed, 1041 insertions(+), 3 deletions(-)
create mode 100644 sound/soc/codecs/mc13783.c
create mode 100644 sound/soc/codecs/mc13783.h
create mode 100644 sound/soc/fsl/imx-mc13783.c
2
1

[alsa-devel] [PATCH 00/11] ASoC: OMAP: HDMI: Use DSS audio interface and prepare for OMAP5
by Ricardo Neri 18 May '12
by Ricardo Neri 18 May '12
18 May '12
Hello,
The ASoC HDMI codec used to be embedded in the DSS HDMI driver. In order
to give the OMAP HDMI code a more logical arrangement and to remove
some dependency breaks[1][2], such ASoC HDMI codec was removed[3]. Instead, the
DSS HDMI audio functionality[4] is now provided through the new DSS device driver
audio interface [5]. Hence, the ASoC HDMI support for OMAP needs to be changed
to use this new DSS device driver audio interface. Under this new approach:
* The HDMI audio functionality provided by the OMAP is now regarded as a
CPU DAI rather than a codec. Hence, the CPU DAI will perform the operations
that were performed previously by the codec (using the DSS dev driver audio
interface).
* A new ASoC HDMI OMAP codec is introduced as a dummy component. In the
future, this component will examine the features supported by the sink
and limit the number of channels, sample rates and formats that are exposed
to the user.
Also, this set of patches paves the way to the introduction of the HDMI audio
functionality for OMAP5. The goal is to use the same set of ASoC drivers
for OMAP4 and OMAP5 (DSS will be in charge of selecting the correct set
of functions at run time). For this, several patches are submitted for:
* Generalizing the build files to encompass not only OMAP4.
* In the HDMI sound card driver, renaming the the functions and structures
from omap4_ to omap_.
This set includes the suggestions and improvements that Mark Brown kindly provided
some time ago [6][7].
Please note that this set of patches will not build unless the patches from [4],
[5] and [8] are present. All these patches have been accepted and should be
upstream for K3.5.
This implementation was validated on top of:
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git v3.4-rc7
and Liam Girdwood's:
git://gitorious.org/omap-audio/linux-audio.git lrg/topic/3.5-dev
Thanks,
Ricardo
[1] http://www.mail-archive.com/linux-omap@vger.kernel.org/msg67295.html
[2] http://www.spinics.net/lists/linux-omap/msg66178.html
[3] http://www.mail-archive.com/linux-omap@vger.kernel.org/msg67809.html
[4] http://www.spinics.net/lists/linux-omap/msg69466.html
[5] http://www.spinics.net/lists/linux-omap/msg69451.html
[6] http://mailman.alsa-project.org/pipermail/alsa-devel/2012-February/049064.h…
[7] http://mailman.alsa-project.org/pipermail/alsa-devel/2012-February/049065.h…
[8] http://www.mail-archive.com/linux-omap@vger.kernel.org/msg66600.html
Ricardo Neri (11):
ASoC: OMAP: HDMI: Introduce codec
ASoC: OMAP: HDMI: Update the platform device names
ASoC: OMAP: HDMI: Change error values in HDMI CPU DAI
ASoC: OMAP: HDMI: Create a structure for private data of the CPU DAI
ASoC: OMAP: HDMI: Use the DSS audio interface
ASoC: OMAP: HDMI: Expand configuration of hw_params
ASoC: OMAP: HDMI: Improve how the display state is verified
ASoC: OMAP: HDMI: Expand capabilities of the HDMI DAI
ASoC: OMAP: HDMI: Make build config options more generic
ASoC: OMAP: HDMI: Make sound card naming more generic
ASoC: OMAP: HDMI: Rename sound card driver
sound/soc/codecs/Kconfig | 4 +
sound/soc/codecs/Makefile | 2 +
sound/soc/codecs/omap-hdmi.c | 69 +++++++++++
sound/soc/omap/Kconfig | 8 +-
sound/soc/omap/Makefile | 4 +-
sound/soc/omap/omap-hdmi-card.c | 87 ++++++++++++++
sound/soc/omap/omap-hdmi.c | 238 +++++++++++++++++++++++++++++++++++---
sound/soc/omap/omap-hdmi.h | 4 +-
sound/soc/omap/omap4-hdmi-card.c | 121 -------------------
9 files changed, 395 insertions(+), 142 deletions(-)
create mode 100644 sound/soc/codecs/omap-hdmi.c
create mode 100644 sound/soc/omap/omap-hdmi-card.c
delete mode 100644 sound/soc/omap/omap4-hdmi-card.c
--
1.7.5.4
4
16
Hello
This patchset enables sound support on boards with mc13783 codec.
The first patch adds the necessary modification to the MFD driver.
The second patch adds the codec driver. It's Sascha's code ported
to the current kernel with DAPM.
The third patch adds a generic SoC platform driver for imx boards
with mc13783 codecs.
The last patch enable the sound on mx31moboard boards.
I will post a similar patch for mx31pdk_3ds as soon as I figure out why
it hangs early at boot with the latest kernel (unrelated to this patchset).
It is based on 3.4-rc4 with asoc-3.5 and the sdma channel 0 mutex to
spinlock fix.
Philippe Rétornaz (4):
mc13xxx: add codec platform data
ASoC: Add mc13783 codec
ASoC: add imx-mc13783 sound support
mx31moboard: Add sound support
arch/arm/mach-imx/Kconfig | 1 +
arch/arm/mach-imx/mach-mx31moboard.c | 20 +-
drivers/mfd/mc13xxx-core.c | 3 +-
include/linux/mfd/mc13xxx.h | 11 +
sound/soc/codecs/Kconfig | 4 +
sound/soc/codecs/Makefile | 2 +
sound/soc/codecs/mc13783.c | 800 ++++++++++++++++++++++++++++++++++
sound/soc/codecs/mc13783.h | 28 ++
sound/soc/fsl/Kconfig | 8 +
sound/soc/fsl/Makefile | 2 +
sound/soc/fsl/imx-mc13783.c | 163 +++++++
11 files changed, 1040 insertions(+), 2 deletions(-)
create mode 100644 sound/soc/codecs/mc13783.c
create mode 100644 sound/soc/codecs/mc13783.h
create mode 100644 sound/soc/fsl/imx-mc13783.c
2
10
In commit "ASoC: dapm: Add API call to query valid DAPM paths<http://git.kernel.org/?p=linux/kernel/git/broonie/sound.git;a=commit;h=ec2e…>" , the signature of the functions is_connected_input_ep / is_connected_output_ep has been modified so that the 2 functions now fill list of connected DAPM widgets.
What I don't understand is why the way widgets are added is not symmetric between the two:
In function is_connected_output_ep:
-----------------------------------------------
list_for_each_entry(path, &widget->sinks, list_source) {
...
err = dapm_list_add_widget(list, path->sink);
...
}
In function is_connected_input_ep:
---------------------------------------------
list_for_each_entry(path, &widget->sources, list_sink) {
...
err = dapm_list_add_widget(list, path->sink);
}
I would have expected to have for the latter:
err = dapm_list_add_widget(list, path->source);
regards,
Sebastien Le Duc
1
0

18 May '12
There is an spin_unlock() missing on this error path.
Signed-off-by: Dan Carpenter <dan.carpenter(a)oracle.com>
---
This was added recently in a82d51ed2 "ALSA: hda - Support
VGA-switcheroo". I don't have the hardware so I haven't tested it.
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index bbf953f..2b6392b 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -1268,8 +1268,10 @@ static irqreturn_t azx_interrupt(int irq, void *dev_id)
spin_lock(&chip->reg_lock);
- if (chip->disabled)
+ if (chip->disabled) {
+ spin_unlock(&chip->reg_lock);
return IRQ_NONE;
+ }
status = azx_readl(chip, INTSTS);
if (status == 0) {
2
1
On Fri, May 18, 2012 at 10:39 AM, Qiao Zhou <zhouqiao(a)marvell.com> wrote:
> this patch adds ASoC pxa-squ DMA audio support.
>
> Signed-off-by: Qiao Zhou <zhouqiao(a)marvell.com>
> +/*
> + * Descriptor structure for PXA's SQU engine
> + * Note: this structure must always be aligned to a 16-byte boundary.
> + */
> +struct pxa_squ_desc {
> + Â Â Â __iomem u32 byte_cnt; Â /* byte count */
> + Â Â Â __iomem u32 src_addr; Â /* source address */
> + Â Â Â __iomem u32 dst_addr; Â /* target address */
> + Â Â Â __iomem u32 nxt_desc; Â /* next descriptor dress */
Why do you use __iomem at here?
> +};
> +
--
To unsubscribe from this list: send the line "unsubscribe alsa-devel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
1
0

18 May '12
On Fri, May 18, 2012 at 10:39 AM, Qiao Zhou <zhouqiao(a)marvell.com> wrote:
> add pxa-squ header file to support SQU DMA.
>
> Signed-off-by: Qiao Zhou <zhouqiao(a)marvell.com>
> ---
> Â arch/arm/mach-mmp/include/mach/pxa-squ.h | Â 39 ++++++++++++++++++++++++++++++
> Â 1 files changed, 39 insertions(+), 0 deletions(-)
> Â create mode 100644 arch/arm/mach-mmp/include/mach/pxa-squ.h
>
> diff --git a/arch/arm/mach-mmp/include/mach/pxa-squ.h b/arch/arm/mach-mmp/include/mach/pxa-squ.h
> new file mode 100644
> index 0000000..3ee187f
> --- /dev/null
> +++ b/arch/arm/mach-mmp/include/mach/pxa-squ.h
> @@ -0,0 +1,39 @@
> +#ifndef __MACH_SQU_H
> +#define __MACH_SQU_H
> +
> +#include <mach/addr-map.h>
> +
> +#define SQU_REGS_VIRT Â (AXI_VIRT_BASE + 0xA0000)
> +#define SQU_REG(x) Â Â (*((__iomem u32 *)(SQU_REGS_VIRT + (x))))
> +
> + /*SQU*/
> +#define SDSAR(x) Â Â Â Â Â Â Â SQU_REG(0x810 + ((x) << 2))
> +#define SDDAR(x) Â Â Â Â Â Â Â SQU_REG(0x820 + ((x) << 2))
> +#define SDNDPR(x) Â Â Â Â Â Â Â SQU_REG(0x830 + ((x) << 2))
> +#define SDCR(x) Â Â Â Â Â Â Â Â Â Â Â Â SQU_REG(0x840 + ((x) << 2))
> +#define SDIMR(x) Â Â Â Â Â Â Â SQU_REG(0x880 + ((x) << 2))
> +#define SDISR(x) Â Â Â Â Â Â Â SQU_REG(0x8a0 + ((x) << 2))
> +#define SDCR_SSPMOD Â Â Â Â Â Â (1 << 21) Â Â Â /* SSPMod */
> +#define SDCR_FETCHND Â (1 << 13)
> +#define SDCR_CHANEN Â Â Â Â Â Â (1 << 12) Â Â Â /* Channel Enable */
> +#define SDCR_DST_ADDR_INC Â Â Â (0 << 4)
> +#define SDCR_DST_ADDR_HOLD Â Â (0x2 << 4)
> +#define SDCR_SRC_ADDR_INC Â Â Â (0 << 2)
> +#define SDCR_SRC_ADDR_HOLD Â Â (0x2 << 2)
> +#define SDCR_DMA_BURST_4B Â Â Â (0x0 << 6)
> +#define SDCR_DMA_BURST_8B Â Â Â (0x1 << 6)
> +#define SDCR_DMA_BURST_16B Â Â (0x3 << 6)
> +#define SDCR_DMA_BURST_1B Â Â Â (0x5 << 6)
> +#define SDCR_DMA_BURST_2B Â Â Â (0x6 << 6)
> +#define SDCR_DMA_BURST_32B Â Â (0x7 << 6)
> +#define SDIMR_COMP Â Â Â Â Â Â Â Â Â Â (1 << 0)
> +
> +struct pxa_squ_platdata {
> + Â Â Â char *pool_name;
> + Â Â Â int irq;
> + Â Â Â int period_max_out; Â Â Â Â Â Â /* max period size for playback */
> + Â Â Â int period_max_in; Â Â Â Â Â Â Â /* max period size for capture */
> + Â Â Â int buffer_max_out; Â Â Â Â Â Â /* max buffer size for playback */
> + Â Â Â int buffer_max_in; Â Â Â Â Â Â Â /* max buffer size for capture */
> +};
> +#endif /* __MACH_SQU_H */
> --
> 1.7.4.1
>
Acked-by: Haojian Zhuang <haojian.zhuang(a)gmail.com>
--
To unsubscribe from this list: send the line "unsubscribe alsa-devel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
1
0
Hi,
The CODEC I am working on has multiple digital audio interfaces included
in multiple DAI-LINks. DAILINK X has ignore_suspend flag set and
DAILINK Y has ignore_suspend flag cleared. The problem I encountered is
that as system attempts to enter suspend while DAILINK X is active,
snd_soc_suspend() calls snd_soc_dapm_stream_event(
SND_SOC_DAPM_STREAM_SUSPEND) on inactive DAILINK Y since DAILINK Y
ignore flag is not set. Consequently, CODEC widgets get powered off
even though they should remain powered for DAILINK X.
Kernel version I am working with is 3.0.
Couple questions with respect to this problem
1. Should soc-core check if CODEC DAI is active beside checking
ignore_suspend flag before calling snd_soc_dapm_stream_event()?
I checked latest soc-core.c from kernel 3.4 RC7. The logic is the same
as 3.0
2. Even if snd_soc_dapm_stream_event() is called, DAPM should not power
off widgets that are powered up for DAILINK x. It seems like DAPM has
the logic to only power off AIF widget if stream name of widget matches
CODEC DAI stream name in soc_dapm_stream_event(). I have not gotten
time to debug this problem further. However, is it a known bug on
kernel 3.0. If so, has the problem been addressed in more recent kernel?
Thanks
Patrick
--
Sent by an employee of the Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.
2
3

17 May '12
Hi,
My Asus Xonar DG doesn't play through FP Headphone connector (HD
Audio). Mic input doesn't work too (both rear and front connectors).
Same issue: https://bugs.launchpad.net/ubuntu/+source/alsa-driver/+bug/919809
I think its output should behave this way:
Speakers - rear connector
Headphones - rear connector + headphone amp
FP Headphones - front connector + headphone amp
Attached alsa-info.sh output.
Regards,
Marcos
3
3
Hi all,
I've to take again the HDA codec for Wolfson because I see that I can't
change the master volume. I would like to know how can I do to get with
amixer an entry for master o pcm volume.
Now I have:
~ # amixer
Simple mixer control 'IEC958',0
Capabilities: pswitch pswitch-joined
Playback channels: Mono
Mono: Playback [on]
Simple mixer control 'IEC958 Default PCM',0
Capabilities: pswitch pswitch-joined
Playback channels: Mono
Mono: Playback [on]
Simple mixer control 'Stereo Differential',0
Capabilities: pvolume pswitch
Playback channels: Front Left - Front Right
Limits: Playback 0 - 127
Mono:
Front Left: Playback 106 [83%] [-10.50dB] [on]
Front Right: Playback 106 [83%] [-10.50dB] [on]
but I only can enable or disable the audio with
# amixer sset 'IEC958' on / off
but no master sound control is present...
with
# amixer sset 'Stereo Differential' 100%
or
# amixer sset 'Stereo Differential' 0%
there is no difference.
Any hint is welcome
Thanks!
Jorge
________________________________________
From: Mark Brown [broonie(a)opensource.wolfsonmicro.com]
Sent: Monday, March 05, 2012 1:16 PM
To: Jorge Fernandez Monteagudo
Cc: Takashi Iwai; alsa-devel(a)alsa-project.org
Subject: Re: [alsa-devel] Support new HDA codec
On Thu, Mar 01, 2012 at 10:44:23AM +0100, Jorge Fernandez Monteagudo wrote:
> Attached it's the patch applied to alsa 1.0.23. A new patch_wolfson.c file
> is created. I would like to note that no Wolfson support was received to
> develop to this code, and this code is useful for us because we only need
Hrm, that's not strictly accurate - we didn't help with the code but I
know there's been some help (possibly via the distributor).
> the outputs differential and SPDIF. This code must be revisited in order to
> support the different inputs, the stereo normal output and the I/O.
Looking at the code it seems like most of this is things that I'd really
expect the generic driver to be able to cope with assuming a suitable
BIOS setup, but looking at the generic driver it seems like it might
need some enhancement to do so. Things like the S/PIDF output should
really be able to Just Work. Hrm.
Este mensaje se dirige exclusivamente a su destinatario y puede contener información privilegiada o CONFIDENCIAL. Si no es vd. el destinatario indicado, queda notificado de que la utilización, divulgación y/o copia sin autorización está prohibida en virtud de la legislación vigente. Si ha recibido este mensaje por error, le rogamos que nos lo comunique inmediatamente por esta misma vÃa y proceda a su destrucción.
This message is intended exclusively for its addressee and may contain information that is CONFIDENTIAL and protected by professional privilege.
If you are not the intended recipient you are hereby notified that any dissemination, copy or disclosure of this communication is strictly prohibited by law. If this message has been received in error, please immediately notify us via e-mail and delete it.
1
0
Witch a patch[1] of PA which dumps playback PCM data, I found the
dumped data(with ./wavformat.py[2] <dumpped_data> to convert to wav
file) is not corrupted.
Since PA uses mmap to transfer PCM data, the driver's DMA buffer
should also be "good".
It seems related to HDA controller of SB710, I tried HDMI output, and
can reproduce the problem
too(http://dev.lemote.com/files/upload/software/PA-apc/HDMI-corrupted_sound….
2012/5/12 cee1 <fykcee1(a)gmail.com>:
> Hi all,
>
> We're using PA on our product, and sometimes audio playback may
> corrupt after adjusting volume.
>
> We found a way to (relatively) easily reproduce the problem:
> 1. Play sample.mp3 through totem in repeat mode.
> 2. In gnome-volume-control, Hardware tap, repeat to shift between "Off
> profile" and "Analog Stereo Duplex profile".
>
> When the problem happens, the corruption continues until I:
> * Do one more shift between "Off profile" and "Analog Stereo Duplex profile".
> * Close totem (close all PA playback clients).
> * Adjust volume.
>
> When the problem happens, open another PA client doing audio playback,
> is also corrupt.
>
> Some additional information:
> * Output of alsa-info.sh on our product:
> http://dev.lemote.com/files/upload/software/PA-apc/alsa-info-lemote
> * PA daemon log:
> http://dev.lemote.com/files/upload/software/PA-apc/pulseaudio.log
> * The corrupted sound:
> http://dev.lemote.com/files/upload/software/PA-apc/corrupted_sound.ogg
> * The sample mp3: http://dev.lemote.com/files/upload/software/PA-apc/sample.mp3
>
> We've tried PA 1.0-0ubuntu3, 1.1-0ubuntu15 and 2.0, the problem continues.
>
> The problem can also be reproduced on an AMD turion 64 x2 board with
> ubuntu 10.10 and ubuntu 12.04:
> * Output of alsa-info:
> Â ubuntu 10.10(32bit)
> http://dev.lemote.com/files/upload/software/PA-apc/alsa-info-ubuntu-10.10
> Â ubuntu 12.04(32bit)
> http://dev.lemote.com/files/upload/software/PA-apc/alsa-info-ubuntu-12.04
>
> Note:
> * The AMD turion 64 x2 board uses the same chipset as our product.
> * gnome-volume-control is removed in ubuntu 12.04, thus we compiled
> it: http://dev.lemote.com/files/upload/software/PA-apc/gnome-volume-control
----
[1] http://dev.lemote.com/files/upload/software/PA-apc/debug/debug-alsa-sink.pa…
[2] http://dev.lemote.com/files/upload/software/PA-apc/debug/wavformat.py
--
Regards,
- cee1
2
3

[alsa-devel] [PATCH v2 0/2] ASoC: OMAP4 DMIC, McPDM device tree support
by Peter Ujfalusi 16 May '12
by Peter Ujfalusi 16 May '12
16 May '12
Hello,
Add DT support and the binding documentation for OMAP4+ DMIC, and McPDM ASoC dai
drivers.
Changes since v1:
- Ducumentation update: add properties for register address/size, interrupt
number (as Suggested by Mark and Tony).
I have not added Mark's acked-by since I think the changes are big enough from
v1.
Regards,
Peter
---
Peter Ujfalusi (2):
ASoC: omap-mcpdm: Add device tree bindings
ASoC: omap-dmic: Add device tree bindings
.../devicetree/bindings/sound/omap-dmic.txt | 21 ++++++++++++++++++++
.../devicetree/bindings/sound/omap-mcpdm.txt | 21 ++++++++++++++++++++
sound/soc/omap/omap-dmic.c | 8 +++++++
sound/soc/omap/omap-mcpdm.c | 8 +++++++
4 files changed, 58 insertions(+), 0 deletions(-)
create mode 100644 Documentation/devicetree/bindings/sound/omap-dmic.txt
create mode 100644 Documentation/devicetree/bindings/sound/omap-mcpdm.txt
--
1.7.8.6
2
4
The following changes since commit 36be50515fe2aef61533b516fa2576a2c7fe7664:
Linux 3.4-rc7 (2012-05-12 18:37:47 -0700)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git tags/asoc-3.5
for you to fetch changes up to fe33d4c5e2b27a4b82aa479a58f2621eec103d1b:
ASoC: don't flip master of DT-instantiated DAI links (2012-05-16 09:44:18 +0100)
----------------------------------------------------------------
ASoC: Updates for 3.5
The big things here in framework terms are the first two, otherwise it's
just a large number of incremental and driver specific updates:
- Dynamic PCM support, allowing support for SoCs with internal routing
through components with tight sequencing and formatting constraints
within their internal paths or where there are multiple components
connected with CPU managed DMA controllers inside the SoC.
- Greatly improved support for direct digital links between off-SoC
devices, providing a much simpler way of connecting things like digital
basebands to CODECs.
- Much more fine grained and robust locking, cleaning up some of the
confusion that crept in with multi-component.
- CPU support for nVidia Tegra 30 I2S and audio hub controllers and
ST-Ericsson MSP I2S controolers
- New CODEC drivers for Cirrus CS42L52, LAPIS Semiconductor ML26124, Texas
Instruments LM49453.
There's also some regmap changes needed by the Tegra I2S driver.
----------------------------------------------------------------
Ashish Chavan (5):
ASoC: da7210: Add support for spi regmap
ASoC: da7210: Add support for PLL and SRM
ASoC: da7210: Minor update for PLL and SRM
ASoC: da7210: Minor bugfix for non pll slave mode
ASoC: da7210: Minor improvements and a bugfix
Axel Lin (3):
ASoC: alc5623: Convert to module_i2c_driver()
ASoC: alc5632: Convert to module_i2c_driver()
ASoC: alc5632: Convert to devm_regmap_init_i2c()
Brian Austin (6):
ASoC: core: Rework SOC_DOUBLE_R_SX_TLV add SOC_SINGLE_SX_TLV
ASoC: core: Initialize err for snd_soc_put_volsw_sx
ASoC: Add support for CS42L52 Codec
ASoC: cs42l73: Convert to module_i2c_driver()
ASoC: cs42l73: Remove Chip ID's from reg_default
ASoC: cs42l73: Use DAPM routes to hook AIF widgets to DAI's
Dan Carpenter (1):
ASoC: dapm: release lock on error paths
Fabio Estevam (6):
ASoC: sgtl5000: Fix warning due to the lack of REGULATOR_CHANGE_VOLTAGE
ASoC: wm9712: Fix build due to missing definition of "runtime"
ASoC: ac97: Fix build due to removal of 'runtime' definition
ASoC: wm9705: Fix build due to removal of 'runtime' definition
ASoC: soc-dapm: Use '%llx' with 'u64' type.
ASoC: core: Remove unused variable 'min'
H Hartley Sweeten (2):
ASoC: ep93xx-ac97: use devm_* helpers to cleanup probe
ASoC: ep93xx-i2s: use devm_* helpers to cleanup probe
Jesper Juhl (2):
ASoC: wm8994: Don't test for NULL before release_firmware()
ASoC: wm8994: Delete trailing whitespace from sound/soc/codecs/wm8994.c
Kristoffer KARLSSON (2):
ASoC: core: Add signed multi register control
ASoC: core: Add strobe control
Kuninori Morimoto (5):
ASoC: add generic simple-card support
ASoC: sh: fsi: use simple-card instead of fsi-ak4642
ASoC: sh: fsi: use simple-card instead of fsi-hdmi
ASoC: sh: fsi: use simple-card instead of fsi-da7210
ASoC: sh: fsi: select simple-card on Kconfig
Kyung-Kwee Ryu (1):
ASoC: wm8994: Make sure we disable FLL bypass when stopping the FLL
Lars-Peter Clausen (4):
ASoC: bf5xx-ssm2602: Setup sysclock in init callback
ASoC: SSM2602: Add sysclk based rate constraints
ASoC: SSM2602: Remove driver specific version
ASoC: SSM2602: Convert to direct regmap API usage
Liam Girdwood (19):
ASoC: core: Add card mutex locking subclasses
ASoC: dapm: Use DAPM mutex for DAPM ops instead of codec mutex
ASoC: dapm: lock mixer & mux update power with DAPM mutex
ASoC: core: Add platform DAI widget mapping
ASoC: dapm: Add platform stream event support
ASoC: core: Rename card mutex subclass to better align with usage
ASoC: dapm: Rename dapm mutex subclass to better match usage
ASoC: dapm: Add regulator member to struct dapm_widget
ASoC: DAPM: Make sure DAPM widget IO ops hold the component mutex
ASoC: dapm: Add API call to query valid DAPM paths
ASoC: dapm: Fix x86_64 build warning.
ASoC: dpcm: Add Dynamic PCM core operations.
ASoC: dpcm: Add debugFS support for DPCM
ASoC: dpcm: Add runtime dynamic route update
ASoC: dpcm: Add API for DAI link substream and runtime lookup
ASoC: dpcm: Add bespoke trigger()
ASoC: pcm: Add pcm operation for pcm ioctl.
ASoC: dpcm: Fixup debugFS for DPCM state.
ASoC: core: Fix dai_link dereference.
M R Swami Reddy (3):
ASoC: Support TI LM49453 Audio driver
ASoC: MAINTAINERS: Add maintainer for TI LM49453 Audio codec driver
ASoC: lm49453: fix build warnings
Maarten ter Huurne (1):
ASoC: JZ4740: Replaced comma operators with semicolons.
Marc Reilly (2):
regmap: Add support for device with 24 data bits.
regmap: Use pad_bits and reg_bits when determining register format.
Mark Brown (78):
ASoC: ak4641: Convert to module_i2c_driver()
ASoC: ak4641: Push GPIO allocation out into the I2C probe
ASoC: dapm: Only lock CODEC for I/O if not using regmap
ASoC: wm5100: Convert to devm_regmap_init_i2c()
ASoC: wm8994: Don't lock CODEC mutex to do DAPM sync
ASoC: jack: Push locking for jacks down to the jack
ASoC: core: Use driver core probe deferral
ASoC: wm8962: Implement DSP2 configuration initialisation
ASoC: wm8962: Add 3D enhancement support
ASoC: wm8962: Add Direct-Form 1 filter support
ASoC: wm8962: Add Dynamic Range Control support
ASoC: wm8962: Add HD Bass and VSS coefficient configuration
ASoC: wm8962: Add HPF coefficient configuration support
ASoC: dapm: Remove bodges for no-widget CODECs
ASoC: cs4270: Check that we can enable regulators on resume
ASoC: wm8994: Don't allow reconfiguration of FLL when it provides SYSCLK
ASoC: sgtl5000: Convert mic bias to a supply widget
ASoC: dapm: Remove SND_SOC_DAPM_MICBIAS_E()
ASoC: wm8994: Don't bother lowering clock dividers inside idle AIFs
ASoC: max98095: Fix build failure
ASoC: sgtl5000: Convert to module_i2c_driver()
ASoC: dapm: Allow DAPM registers to be 31 bit
ASoC: wm8994: Don't bother updating the jackdet mode needlessly
ASoC: tlv320aic23: Remove driver-specific version number
ASoC: codecs: Remove rtd->codec usage from CODEC drivers
ASoC: wm8400: Use snd_soc_write() and snd_soc_read()
Merge tag 'v3.4-rc2' into for-3.5
ASoC: wm1250-ev1: Convert to module_i2c_driver
ASoC: wm8994: Implement FLL bypass support
ASoC: core: Return -ENOTSUPP instead of -EINVAL if mute is not supported
ASoC: dapm: Allow DAI widgets to be routed through
ASoC: core: Flip master for CODECs in the CPU slot of a CODEC<->CODEC link
ASoC: core: Bind DAIs to CODECs at registration time
ASoC: core: Support transparent CODEC<->CODEC DAI links
ASoC: Merge tag 'v3.4-rc3' into for-3.5
ASoC: Use dai_fmt in Speyside
ASoC: wm8994: Keep AIF3 tristated when not in use
ASoC: samsung: Hook up AIF2 to the CODEC on Littlemill
ASoC: wm1250-ev1: Support stereo
ASoC: wm1250-ev1: Support sample rate configuration
ASoC: Update regmap access for WM5100 DSP control registers
ASoC: wm8996: Put the microphone biases into bypass mode when idle
ASoC: wm8994: Tune debounce rates for jack detect mode
ASoC: wm8994: Allow rate configuration with custom mic callback
ASoC: wm8994: Add trace showing wm8958_micd_set_rate()
ASoC: dapm: Move CODEC<->CODEC params off stack
ASoC: wm_hubs: Special case headphones for digital paths in more use cases
ASoC: wm_hubs: Factor out class W management
ASoC: wm_hubs: Enable class W for output mixer paths
ASoC: cs42l52: Remove duplicate module exit code
ASoC: wm8350: Remove check for clocks in trigger()
ASoC: wm8350: Replace use of custom I/O with snd_soc_read()/write()
ASoC: wm_hubs: Cache multiple DCS offsets
ASoC: core: Allow DAIs to specify a base address
ASoC: wm5100: Set the DAI base address in the DAI drivers
ASoC: pcm: Fix DPCM for aux_devs
ASoC: lowland: Convert to dai_fmt
ASoC: lowland: Support digital link for WM9081
ASoC: wm9081: Hook DAC up via DAPM rather than stream
ASoC: rt5631: Convert to module_i2c_driver()
ASoC: rt5631: Convert to direct regmap API usage
ASoC: wm8994: Fix sparse warning due to use of 0 as NULL
ASoC: wm8994: Add debounce to wm8994 mic detection
ASoC: wm8994: Use regmap directly for wm8994_mic_work
ASoC: cs42l52: Staticise non-exported symbols
ASoC: ux500: Fix dependencies
ASoC: ux500: Don't make the CPU I2S driver user selectable
ASoC: pcm: Staticise non-exported functions
ASoC: littlemill: Use a widget to keep track of AIF2 clocking
ASoC: wm5100: Convert to module_i2c_driver()
ASoC: wm8731: Convert to devm_ functions
Merge tag 'v3.4-rc7' into for-3.5
ASoC: lm49453: Staticise non-exported symbol lm45453_dai
ASoC: lm49453: Fix author e-mail address
ASoC: max98095: Single bit bitfields should be unsigned
ASoC: wm8350: Don't use irq_base
ASoC: tlv320aic3x: Remove unused, non-standard headset detection
ASoC: wm8350: Remove direct usage of codec->control_data
Ola Lilja (1):
ASoC: Ux500: Add MSP I2S-driver
Peter Ujfalusi (1):
ASoC: twl6040: Remove HS/HF gain ramp feature
Philipp Zabel (1):
ASoC: pxa2xx-i2s: Add clk_prepare/clk_unprepare calls
Rhyland Klein (1):
ASoC: max98095: add jack detection
Richard Zhao (2):
ASoC: imx-sgtl5000: add of_node_put when probe fail.
ASoC: fsl: add sgtl5000 clock support for imx-sgtl5000
Shawn Guo (18):
ASoC: fsl: separate SSI and DMA Kconfig options
ASoC: imx: merge sound/soc/imx into sound/soc/fsl
ASoC: fsl: rename imx-pcm Kconfig options and filename
ASoC: fsl: create fsl_utils to accommodate the common functions
ASoC: fsl: remove helper fsl_asoc_get_codec_dev_name
ASoC: fsl: make fsl_ssi driver compilable on ARM/IMX
ASoC: fsl: let fsl_ssi work with imx pcm and machine drivers
ASoC: fsl: add imx-sgtl5000 machine driver
ASoC: fsl: assign dma peripheral type according to bus topology
ASoC: fsl: enable ssi clock in probe function
ASoC: fsl: add audio routing for imx-sgtl5000
ASoC: fsl: remove redundant Kconfig option SND_SOC_FSL_SSI
ASoC: fsl: remove redundant Kconfig dependency on SND_SOC_POWERPC_DMA
ASoC: mxs: add __devinit for mxs_saif_probe
ASoC: fsl: fix the binding of imx-sgtl5000
ASoC: mxs: mxs-pcm does not need to be a plaform_driver
ASoC: mxs: add device tree support for mxs-saif
ASoC: mxs: add device tree support for mxs-sgtl5000
Stephen Warren (38):
ASoC: tegra: fix comment indentation in ALC5632 machine
ASoC: tegra: register 'platform' from DAIs, get rid of pdev
ARM: tegra: remove tegra_pcm_device
ASoC: tegra: remove unnecessary includes
ASoC: tegra: fix Kconfig SND_SOC_TEGRA_ALC5632 indentation
ASoC: tegra: fix some checkpatch warnings
ASoC: tegra: introduce separate Kconfig variable for DAS driver
ASoC: tegra: sort Makefile into common and per-SoC files
ASoC: tegra: remove open-coded clk reference counting
ASoC: tegra: drop Kconfig description for SND_SOC_TEGRA_DAS
ASoC: tegra: make Tegra20 drivers depend on Tegra20 support
ASoC: tegra: rename Tegra20-specific driver files
ASoC: tegra: complete Tegra->Tegra20 renaming
ASoC: tegra: sort includes, remove mach/iomap.h
ASoC: tegra: use devm_ APIs in SPDIF driver
ASoC: tegra: set a sensible initial clock rate
ASoC: tegra: utils: add support for Tegra30 devices
ASoC: tegra: add runtime PM support
ASoC: tegra: utils: Don't use of_have_populated_dt()
regmap: introduce explicit bus_context for bus callbacks
regmap: introduce fast_io busses, and use a spinlock for them
regmap: add MMIO bus support
regmap: mmio: convert some error returns to BUG()
regmap: mmio: remove some error checks now in the core
regmap: validate regmap_raw_read/write val_len
regmap: allow regmap instances to be named
regmap: fix compilation when !CONFIG_DEBUG_FS
regmap: implement register striding
regmap: fix compile errors in regmap-irq.c due to stride changes
ASoC: tegra: add tegra30-ahub driver
ASoC: tegra: add tegra30-i2s driver
ASoC: tegra: add Kconfig and Makefile support for Tegra30
ASoC: tegra: select REGMAP_MMIO
ASoC: convert Tegra20 I2S driver to regmap
ASoC: convert Tegra20 SPDIF driver to regmap
ASoC: convert Tegra20 DAS driver to regmap
ASoC: tegra: add device tree support for TrimSlice
ASoC: don't flip master of DT-instantiated DAI links
Tomoya MORINAGA (1):
ASoC: Add LAPIS Semiconductor ML26124 driver
guoyh (1):
ASoC: pxa: allocate the SSP DMA parameters in startup
.../bindings/sound/imx-audio-sgtl5000.txt | 49 +
.../bindings/sound/mxs-audio-sgtl5000.txt | 17 +
.../devicetree/bindings/sound/mxs-saif.txt | 36 +
.../bindings/sound/nvidia,tegra30-ahub.txt | 32 +
.../bindings/sound/nvidia,tegra30-i2s.txt | 15 +
.../bindings/sound/tegra-audio-trimslice.txt | 14 +
MAINTAINERS | 6 +
arch/arm/mach-shmobile/Kconfig | 2 +
arch/arm/mach-shmobile/board-ap4evb.c | 35 +-
arch/arm/mach-shmobile/board-mackerel.c | 35 +-
arch/arm/mach-tegra/board-dt-tegra20.c | 6 +-
arch/arm/mach-tegra/board-harmony.c | 1 -
arch/arm/mach-tegra/board-seaboard.c | 1 -
arch/arm/mach-tegra/board-trimslice.c | 1 -
arch/arm/mach-tegra/devices.c | 11 +-
arch/arm/mach-tegra/devices.h | 1 -
arch/arm/mach-tegra/tegra2_clocks.c | 4 +-
arch/powerpc/configs/86xx/mpc8610_hpcd_defconfig | 1 +
arch/powerpc/configs/mpc85xx_defconfig | 1 +
arch/powerpc/configs/mpc85xx_smp_defconfig | 1 +
arch/sh/boards/Kconfig | 2 +
arch/sh/boards/mach-ecovec24/setup.c | 26 +
arch/sh/boards/mach-se/7724/setup.c | 15 +-
drivers/base/regmap/Kconfig | 3 +
drivers/base/regmap/Makefile | 1 +
drivers/base/regmap/internal.h | 22 +-
drivers/base/regmap/regcache-lzo.c | 11 +-
drivers/base/regmap/regcache-rbtree.c | 44 +-
drivers/base/regmap/regcache.c | 34 +-
drivers/base/regmap/regmap-debugfs.c | 18 +-
drivers/base/regmap/regmap-i2c.c | 13 +-
drivers/base/regmap/regmap-irq.c | 37 +-
drivers/base/regmap/regmap-mmio.c | 224 +++
drivers/base/regmap/regmap-spi.c | 13 +-
drivers/base/regmap/regmap.c | 169 +-
include/linux/regmap.h | 28 +-
include/sound/cs42l52.h | 36 +
include/sound/max98095.h | 12 +
include/sound/sh_fsi.h | 12 -
include/sound/simple_card.h | 38 +
include/sound/soc-dai.h | 4 +
include/sound/soc-dapm.h | 28 +-
include/sound/soc-dpcm.h | 138 ++
include/sound/soc.h | 118 +-
include/trace/events/asoc.h | 80 +
sound/soc/Kconfig | 5 +-
sound/soc/Makefile | 3 +-
sound/soc/blackfin/bf5xx-ssm2602.c | 37 +-
sound/soc/codecs/Kconfig | 12 +
sound/soc/codecs/Makefile | 8 +-
sound/soc/codecs/ac97.c | 6 +-
sound/soc/codecs/ad1836.c | 4 +-
sound/soc/codecs/ad193x.c | 4 +-
sound/soc/codecs/adau1701.c | 3 +-
sound/soc/codecs/ak4104.c | 3 +-
sound/soc/codecs/ak4535.c | 3 +-
sound/soc/codecs/ak4641.c | 113 +-
sound/soc/codecs/alc5623.c | 23 +-
sound/soc/codecs/alc5632.c | 31 +-
sound/soc/codecs/cs4270.c | 11 +-
sound/soc/codecs/cs4271.c | 3 +-
sound/soc/codecs/cs42l51.c | 9 +-
sound/soc/codecs/cs42l52.c | 1295 ++++++++++++++
sound/soc/codecs/cs42l52.h | 274 +++
sound/soc/codecs/cs42l73.c | 93 +-
sound/soc/codecs/da7210.c | 379 ++++-
sound/soc/codecs/jz4740.c | 3 +-
sound/soc/codecs/lm49453.c | 1550 +++++++++++++++++
sound/soc/codecs/lm49453.h | 380 +++++
sound/soc/codecs/max98095.c | 158 +-
sound/soc/codecs/max98095.h | 22 +
sound/soc/codecs/ml26124.c | 681 ++++++++
sound/soc/codecs/ml26124.h | 184 ++
sound/soc/codecs/rt5631.c | 110 +-
sound/soc/codecs/sgtl5000.c | 25 +-
sound/soc/codecs/ssm2602.c | 138 +-
sound/soc/codecs/sta32x.c | 3 +-
sound/soc/codecs/tlv320aic23.c | 13 +-
sound/soc/codecs/tlv320aic26.c | 3 +-
sound/soc/codecs/tlv320aic3x.c | 21 +-
sound/soc/codecs/tlv320dac33.c | 35 +-
sound/soc/codecs/twl4030.c | 18 +-
sound/soc/codecs/twl6040.c | 450 +----
sound/soc/codecs/uda134x.c | 6 +-
sound/soc/codecs/uda1380.c | 6 +-
sound/soc/codecs/wl1273.c | 6 +-
sound/soc/codecs/wm1250-ev1.c | 65 +-
sound/soc/codecs/wm5100-tables.c | 125 +-
sound/soc/codecs/wm5100.c | 47 +-
sound/soc/codecs/wm5100.h | 159 ++
sound/soc/codecs/wm8350.c | 187 +--
sound/soc/codecs/wm8400.c | 135 +-
sound/soc/codecs/wm8510.c | 3 +-
sound/soc/codecs/wm8523.c | 3 +-
sound/soc/codecs/wm8728.c | 3 +-
sound/soc/codecs/wm8731.c | 37 +-
sound/soc/codecs/wm8737.c | 3 +-
sound/soc/codecs/wm8741.c | 3 +-
sound/soc/codecs/wm8750.c | 3 +-
sound/soc/codecs/wm8753.c | 6 +-
sound/soc/codecs/wm8900.c | 3 +-
sound/soc/codecs/wm8903.c | 3 +-
sound/soc/codecs/wm8940.c | 3 +-
sound/soc/codecs/wm8960.c | 3 +-
sound/soc/codecs/wm8962.c | 18 +-
sound/soc/codecs/wm8971.c | 3 +-
sound/soc/codecs/wm8978.c | 3 +-
sound/soc/codecs/wm8988.c | 3 +-
sound/soc/codecs/wm8990.c | 3 +-
sound/soc/codecs/wm8993.c | 86 +-
sound/soc/codecs/wm8994.c | 290 ++--
sound/soc/codecs/wm8994.h | 3 +
sound/soc/codecs/wm8996.c | 12 +
sound/soc/codecs/wm9081.c | 5 +-
sound/soc/codecs/wm9705.c | 6 +-
sound/soc/codecs/wm9712.c | 10 +-
sound/soc/codecs/wm_hubs.c | 220 ++-
sound/soc/codecs/wm_hubs.h | 12 +-
sound/soc/ep93xx/ep93xx-ac97.c | 74 +-
sound/soc/ep93xx/ep93xx-i2s.c | 49 +-
sound/soc/fsl/Kconfig | 121 +-
sound/soc/fsl/Makefile | 29 +-
sound/soc/{imx => fsl}/eukrea-tlv320.c | 2 +-
sound/soc/fsl/fsl_ssi.c | 167 +-
sound/soc/fsl/fsl_utils.c | 91 +
sound/soc/fsl/fsl_utils.h | 26 +
sound/soc/{imx => fsl}/imx-audmux.c | 0
sound/soc/{imx => fsl}/imx-audmux.h | 0
.../{imx/imx-pcm-dma-mx2.c => fsl/imx-pcm-dma.c} | 3 +-
sound/soc/{imx => fsl}/imx-pcm-fiq.c | 0
sound/soc/{imx => fsl}/imx-pcm.c | 0
sound/soc/{imx => fsl}/imx-pcm.h | 1 +
sound/soc/fsl/imx-sgtl5000.c | 221 +++
sound/soc/{imx => fsl}/imx-ssi.c | 2 +-
sound/soc/{imx => fsl}/imx-ssi.h | 0
sound/soc/fsl/mpc8610_hpcd.c | 166 +-
sound/soc/{imx => fsl}/mx27vis-aic32x4.c | 0
sound/soc/fsl/p1022_ds.c | 158 +-
sound/soc/{imx => fsl}/phycore-ac97.c | 0
sound/soc/{imx => fsl}/wm1133-ev1.c | 0
sound/soc/generic/Kconfig | 4 +
sound/soc/generic/Makefile | 3 +
sound/soc/generic/simple-card.c | 114 ++
sound/soc/imx/Kconfig | 79 -
sound/soc/imx/Makefile | 22 -
sound/soc/jz4740/jz4740-i2s.c | 4 +-
sound/soc/mxs/mxs-pcm.c | 24 +-
sound/soc/mxs/mxs-pcm.h | 3 +
sound/soc/mxs/mxs-saif.c | 92 +-
sound/soc/mxs/mxs-saif.h | 1 -
sound/soc/mxs/mxs-sgtl5000.c | 50 +-
sound/soc/pxa/pxa-ssp.c | 28 +-
sound/soc/pxa/pxa2xx-i2s.c | 4 +-
sound/soc/samsung/littlemill.c | 102 +-
sound/soc/samsung/lowland.c | 75 +-
sound/soc/samsung/speyside.c | 33 +-
sound/soc/sh/Kconfig | 24 +-
sound/soc/sh/Makefile | 6 -
sound/soc/sh/fsi-ak4642.c | 108 --
sound/soc/sh/fsi-da7210.c | 81 -
sound/soc/sh/fsi-hdmi.c | 118 --
sound/soc/soc-core.c | 690 +++++---
sound/soc/soc-dapm.c | 562 +++++--
sound/soc/soc-jack.c | 5 +-
sound/soc/soc-pcm.c | 1772 +++++++++++++++++++-
sound/soc/tegra/Kconfig | 58 +-
sound/soc/tegra/Makefile | 18 +-
sound/soc/tegra/tegra20_das.c | 233 +++
sound/soc/tegra/tegra20_das.h | 134 ++
sound/soc/tegra/tegra20_i2s.c | 494 ++++++
sound/soc/tegra/tegra20_i2s.h | 164 ++
sound/soc/tegra/tegra20_spdif.c | 404 +++++
sound/soc/tegra/tegra20_spdif.h | 471 ++++++
sound/soc/tegra/tegra30_ahub.c | 631 +++++++
sound/soc/tegra/tegra30_ahub.h | 483 ++++++
sound/soc/tegra/tegra30_i2s.c | 536 ++++++
sound/soc/tegra/tegra30_i2s.h | 242 +++
sound/soc/tegra/tegra_alc5632.c | 48 +-
sound/soc/tegra/tegra_asoc_utils.c | 37 +-
sound/soc/tegra/tegra_asoc_utils.h | 9 +-
sound/soc/tegra/tegra_das.c | 261 ---
sound/soc/tegra/tegra_das.h | 135 --
sound/soc/tegra/tegra_i2s.c | 459 -----
sound/soc/tegra/tegra_i2s.h | 166 --
sound/soc/tegra/tegra_pcm.c | 28 +-
sound/soc/tegra/tegra_pcm.h | 5 +-
sound/soc/tegra/tegra_spdif.c | 364 ----
sound/soc/tegra/tegra_spdif.h | 473 ------
sound/soc/tegra/tegra_wm8903.c | 29 +-
sound/soc/tegra/trimslice.c | 41 +-
sound/soc/ux500/Kconfig | 14 +
sound/soc/ux500/Makefile | 4 +
sound/soc/ux500/ux500_msp_dai.c | 843 ++++++++++
sound/soc/ux500/ux500_msp_dai.h | 79 +
sound/soc/ux500/ux500_msp_i2s.c | 742 ++++++++
sound/soc/ux500/ux500_msp_i2s.h | 553 ++++++
196 files changed, 17192 insertions(+), 5071 deletions(-)
create mode 100644 Documentation/devicetree/bindings/sound/imx-audio-sgtl5000.txt
create mode 100644 Documentation/devicetree/bindings/sound/mxs-audio-sgtl5000.txt
create mode 100644 Documentation/devicetree/bindings/sound/mxs-saif.txt
create mode 100644 Documentation/devicetree/bindings/sound/nvidia,tegra30-ahub.txt
create mode 100644 Documentation/devicetree/bindings/sound/nvidia,tegra30-i2s.txt
create mode 100644 Documentation/devicetree/bindings/sound/tegra-audio-trimslice.txt
create mode 100644 drivers/base/regmap/regmap-mmio.c
create mode 100644 include/sound/cs42l52.h
create mode 100644 include/sound/simple_card.h
create mode 100644 include/sound/soc-dpcm.h
create mode 100644 sound/soc/codecs/cs42l52.c
create mode 100644 sound/soc/codecs/cs42l52.h
create mode 100644 sound/soc/codecs/lm49453.c
create mode 100644 sound/soc/codecs/lm49453.h
create mode 100644 sound/soc/codecs/ml26124.c
create mode 100644 sound/soc/codecs/ml26124.h
rename sound/soc/{imx => fsl}/eukrea-tlv320.c (99%)
create mode 100644 sound/soc/fsl/fsl_utils.c
create mode 100644 sound/soc/fsl/fsl_utils.h
rename sound/soc/{imx => fsl}/imx-audmux.c (100%)
rename sound/soc/{imx => fsl}/imx-audmux.h (100%)
rename sound/soc/{imx/imx-pcm-dma-mx2.c => fsl/imx-pcm-dma.c} (97%)
rename sound/soc/{imx => fsl}/imx-pcm-fiq.c (100%)
rename sound/soc/{imx => fsl}/imx-pcm.c (100%)
rename sound/soc/{imx => fsl}/imx-pcm.h (93%)
create mode 100644 sound/soc/fsl/imx-sgtl5000.c
rename sound/soc/{imx => fsl}/imx-ssi.c (99%)
rename sound/soc/{imx => fsl}/imx-ssi.h (100%)
rename sound/soc/{imx => fsl}/mx27vis-aic32x4.c (100%)
rename sound/soc/{imx => fsl}/phycore-ac97.c (100%)
rename sound/soc/{imx => fsl}/wm1133-ev1.c (100%)
create mode 100644 sound/soc/generic/Kconfig
create mode 100644 sound/soc/generic/Makefile
create mode 100644 sound/soc/generic/simple-card.c
delete mode 100644 sound/soc/imx/Kconfig
delete mode 100644 sound/soc/imx/Makefile
delete mode 100644 sound/soc/sh/fsi-ak4642.c
delete mode 100644 sound/soc/sh/fsi-da7210.c
delete mode 100644 sound/soc/sh/fsi-hdmi.c
create mode 100644 sound/soc/tegra/tegra20_das.c
create mode 100644 sound/soc/tegra/tegra20_das.h
create mode 100644 sound/soc/tegra/tegra20_i2s.c
create mode 100644 sound/soc/tegra/tegra20_i2s.h
create mode 100644 sound/soc/tegra/tegra20_spdif.c
create mode 100644 sound/soc/tegra/tegra20_spdif.h
create mode 100644 sound/soc/tegra/tegra30_ahub.c
create mode 100644 sound/soc/tegra/tegra30_ahub.h
create mode 100644 sound/soc/tegra/tegra30_i2s.c
create mode 100644 sound/soc/tegra/tegra30_i2s.h
delete mode 100644 sound/soc/tegra/tegra_das.c
delete mode 100644 sound/soc/tegra/tegra_das.h
delete mode 100644 sound/soc/tegra/tegra_i2s.c
delete mode 100644 sound/soc/tegra/tegra_i2s.h
delete mode 100644 sound/soc/tegra/tegra_spdif.c
delete mode 100644 sound/soc/tegra/tegra_spdif.h
create mode 100644 sound/soc/ux500/Kconfig
create mode 100644 sound/soc/ux500/Makefile
create mode 100644 sound/soc/ux500/ux500_msp_dai.c
create mode 100644 sound/soc/ux500/ux500_msp_dai.h
create mode 100644 sound/soc/ux500/ux500_msp_i2s.c
create mode 100644 sound/soc/ux500/ux500_msp_i2s.h
2
1

[alsa-devel] [PATCH] ASoC: don't flip master of DT-instantiated DAI links
by Stephen Warren 16 May '12
by Stephen Warren 16 May '12
16 May '12
From: Stephen Warren <swarren(a)nvidia.com>
Commit 4924082 "ASoC: core: Flip master for CODECs in the CPU slot of a
CODEC<->CODEC link" added code that was conditional on there being no
PCM/DMA driver for the link. However, it failed to cover the case where
the link was instantiated from device tree, and hence was specified by
DT node rather than name.
This prevents the following error on Toshiba AC100:
aplay: pcm_write:1603: write error: Input/output error
Signed-off-by: Stephen Warren <swarren(a)nvidia.com>
---
I tested this fix on AC100 (ALC5632), Harmony (WM8903), and TrimSlice
(TLV320AIC23). I'm not sure why the issue only affected AC100. Perhaps
the other codecs support being the I2S master but the ALC5632 driver
doesn't?
---
sound/soc/soc-core.c | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index 2783d2b..b37ee80 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -1612,7 +1612,8 @@ static int snd_soc_instantiate_card(struct snd_soc_card *card)
}
/* If this is a regular CPU link there will be a platform */
- if (dai_fmt && dai_link->platform_name) {
+ if (dai_fmt &&
+ (dai_link->platform_name || dai_link->platform_of_node)) {
ret = snd_soc_dai_set_fmt(card->rtd[i].cpu_dai,
dai_fmt);
if (ret != 0 && ret != -ENOTSUPP)
--
1.7.0.4
2
1

Re: [alsa-devel] [PATCH]: sound/usb/mixer.c: Volume quirks compare empty string kctl->id.name.
by Takashi Iwai 16 May '12
by Takashi Iwai 16 May '12
16 May '12
At Wed, 16 May 2012 10:03:42 +0200,
Christian Melki wrote:
>
> Takashi,
>
> I tried it on 3.3.2 on my embedded PPC machine (snd_usb_mixer_vol_tlv -> mixer_vol_tlv). Works fine for me.
Thanks, it was already queued for 3.5 kernel.
Takashi
>
> Regards,
> Christian
>
>
> > At Mon, 7 May 2012 09:51:29 +0200,
> > Christian Melki wrote:
> > >
> > > > > Hi,
> > > > >
> > > > > Sorry to mail you directly. But I have tried to mail
> > several times
> > > > > to the mailing list but I don't get through. Everything
> > checks out
> > > > > fine, no html etc, other mailing lists work fine, but
> > not alsa devel.
> > > > > Anyway, could you please have a look at this?
> > > >
> > > > Could you resend the patch but just add me, Clemens and
> > Daniel to Cc, so that it reaches to main developers for
> > usb-audio? Even if we take your patch as is, it'd be needed
> > to be applicable via git-am.
> > > >
> > > >
> > > > thanks,
> > > >
> > > > Takashi
> > >
> > > Hi.
> > >
> > > I noticied that volume quirks in usb-audio did not get applied.
> > > This is because kctl->id.name gets built properly _after_
> > calling the quirk adjustments.
> > > My solution is a bit ugly, but check_mapped_dB needs the
> > adjustment before getting called.
> > > I split the call over the switch. If someone feels like
> > writing something cleaner, please feel free.
> > > This works for me atleast.
> >
> > It's not ugly, but it'd be better to split the code to handle
> > the name string, call get_min_max_*(), then the rest for FU.
> >
> > Could you check whether the patch below works?
> >
> >
> > thanks,
> >
> > Takashi
> >
> > ---
> > From: Takashi Iwai <tiwai(a)suse.de>
> > Subject: [PATCH] ALSA: usb-audio - Call get_min_max_*() after
> > determining the name string
> >
> > get_min_max_with_quirks() must be called after the control id
> > name string is determined, but the current code changes the
> > id name string after calling the function.
> >
> > Reported-by: Christian Melki <christian.melki(a)ericsson.com>
> > Signed-off-by: Takashi Iwai <tiwai(a)suse.de>
> > ---
> > sound/usb/mixer.c | 26 +++++++++++++-------------
> > 1 file changed, 13 insertions(+), 13 deletions(-)
> >
> > diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c index
> > 3d70245..4f40ba8 100644
> > --- a/sound/usb/mixer.c
> > +++ b/sound/usb/mixer.c
> > @@ -1141,9 +1141,6 @@ static void build_feature_ctl(struct
> > mixer_build *state, void *raw_desc,
> > len = snd_usb_copy_string_desc(state, nameid,
> > kctl->id.name, sizeof(kctl->id.name));
> >
> > - /* get min/max values */
> > - get_min_max_with_quirks(cval, 0, kctl);
> > -
> > switch (control) {
> > case UAC_FU_MUTE:
> > case UAC_FU_VOLUME:
> > @@ -1175,17 +1172,7 @@ static void build_feature_ctl(struct
> > mixer_build *state, void *raw_desc,
> > }
> > append_ctl_name(kctl, control == UAC_FU_MUTE ?
> > " Switch" : " Volume");
> > - if (control == UAC_FU_VOLUME) {
> > - check_mapped_dB(map, cval);
> > - if (cval->dBmin < cval->dBmax ||
> > !cval->initialized) {
> > - kctl->tlv.c = snd_usb_mixer_vol_tlv;
> > - kctl->vd[0].access |=
> > - SNDRV_CTL_ELEM_ACCESS_TLV_READ |
> > -
> > SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK;
> > - }
> > - }
> > break;
> > -
> > default:
> > if (! len)
> > strlcpy(kctl->id.name,
> > audio_feature_info[control-1].name,
> > @@ -1193,6 +1180,19 @@ static void build_feature_ctl(struct
> > mixer_build *state, void *raw_desc,
> > break;
> > }
> >
> > + /* get min/max values */
> > + get_min_max_with_quirks(cval, 0, kctl);
> > +
> > + if (control == UAC_FU_VOLUME) {
> > + check_mapped_dB(map, cval);
> > + if (cval->dBmin < cval->dBmax || !cval->initialized) {
> > + kctl->tlv.c = snd_usb_mixer_vol_tlv;
> > + kctl->vd[0].access |=
> > + SNDRV_CTL_ELEM_ACCESS_TLV_READ |
> > + SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK;
> > + }
> > + }
> > +
> > range = (cval->max - cval->min) / cval->res;
> > /* Are there devices with volume range more than 255? I
> > use a bit more
> > * to be sure. 384 is a resolution magic number found
> > on Logitech
> > --
> > 1.7.9.2
> >
> >
1
0
Add bindings to be able to probe the dmic codec driver via device tree.
The device tree entry of a machine driver can use phandle to provide
the device node for it's dai link structure.
Signed-off-by: Peter Ujfalusi <peter.ujfalusi(a)ti.com>
---
.../devicetree/bindings/sound/dmic-codec.txt | 18 ++++++++++++++++++
sound/soc/codecs/dmic.c | 6 ++++++
2 files changed, 24 insertions(+), 0 deletions(-)
create mode 100644 Documentation/devicetree/bindings/sound/dmic-codec.txt
diff --git a/Documentation/devicetree/bindings/sound/dmic-codec.txt b/Documentation/devicetree/bindings/sound/dmic-codec.txt
new file mode 100644
index 0000000..f23f2e3
--- /dev/null
+++ b/Documentation/devicetree/bindings/sound/dmic-codec.txt
@@ -0,0 +1,18 @@
+Generic platform independent codec driver to represent digital microphones
+
+The dmic codec driver basically a dummy driver which exports the needed hooks
+to be used with digital microphone interfaces.
+
+Required properties:
+- compatible : Must be "generic,dmic-codec";
+
+Example:
+
+dmic_codec: dmic_codec@0 { /* generic DMIC codec */
+ compatible = "generic,dmic-codec";
+};
+
+sound { /* ASoC machine dirver */
+ ...
+ dai-link,codec = <&dmic_codec>;
+};
diff --git a/sound/soc/codecs/dmic.c b/sound/soc/codecs/dmic.c
index 3e929f0..90e92f5 100644
--- a/sound/soc/codecs/dmic.c
+++ b/sound/soc/codecs/dmic.c
@@ -78,12 +78,18 @@ static int __devexit dmic_dev_remove(struct platform_device *pdev)
return 0;
}
+static const struct of_device_id dmic_of_match[] = {
+ {.compatible = "generic,dmic-codec", },
+ { },
+};
+MODULE_DEVICE_TABLE(of, dmic_of_match);
MODULE_ALIAS("platform:dmic-codec");
static struct platform_driver dmic_driver = {
.driver = {
.name = "dmic-codec",
.owner = THIS_MODULE,
+ .of_match_table = dmic_of_match,
},
.probe = dmic_dev_probe,
.remove = __devexit_p(dmic_dev_remove),
--
1.7.8.6
2
4

15 May '12
Hello,
while playing with various SB16 types, found that the newer types have some
extended mixer registers that aren't documented anywhere. Windows 9x driver
detects and uses them so e.g. Auxiliary input appears when using CT2511-based
card, MIDI mute becomes available on some cards, etc.
Chips tested:
CT1746B+CT1745A: SB16 SCSI
CT1747+CT1745A: SB16 IDE
CT2504: Vibra 16S
CT2505: Vibra 16C (PnP)
CT2511: Vibra 16XV (PnP)
CT8920: AWE64 (the last one with integrated mixer) (PnP)
Registers found:
----------------
0x48: Output switches 2
all supported bits are set after reset
(0x1f on CT2505 and CT8920, 0x7f on CT2511)
bit 0: PC Speaker
bit 1: PCM
bit 2: PCM
bit 3: MIDI
bit 4: MIDI
bit 5: AUX (CT2511 only, zero otherwise)
bit 6: AUX (CT2511 only, zero otherwise)
bit 7: unused (always zero)
0x49: Master switches
all supported bits are set after reset
(0x0f on CT2511, 0x0c on CT8920)
bit 0: capture
bit 1: capture
bit 2: playback
bit 3: playback
bits 4..7: unused (always zero)
0x4a: Input switches 2
zero after reset
bit 0: PCM
bit 1: PCM
bit 2: AUX (CT2511 only, zero otherwise)
bit 3: AUX (CT2511 only, zero otherwise)
bits 4..7: unused (always zero)
0x4b: ??
0x63 after reset (on CT2511 and CT8920)
bits 0..5 writable
CT2511 also provides two additional volume controls:
0x50,0x51: Master Capture Volume (bits 7..3)
reads as 0xE0 after reset when present
0x52,0x53: AUX Volume (bits 7..3)
reads as 0xC0 after reset when present
There are no extended registers on the older cards (CT1746B+CT1745A,
CT1747+CT1745A and CT2504). CT2505 implements only 0x48.
AUX is an additional input, used at least on SF16-FMD2 card to connect
integrated FM tuner.
I'm going to prepare a patch that allows sb16 driver to detect these
additional controls and enable them if found.
However, I still haven't found how Windows driver detects Bass/Treble control
presence. All chips have the bass/treble registers (0x44-0x47) present and
writable but they have no effect on all Vibra chips except CT2502 (which I
don't have). There must be some other register which says that bass/treble
controls are not available.
--
Ondrej Zary
1
0
Hi
Here is the sound support for mx31_3ds.
It successfully outputs sound on the loudspeaker.
It needs the patchset: "MC13783 sound support".
Philippe Rétornaz (1):
mx31_3ds: Add sound support
arch/arm/mach-imx/Kconfig | 1 +
arch/arm/mach-imx/mach-mx31_3ds.c | 22 +++++++++++++++++++++-
2 files changed, 22 insertions(+), 1 deletions(-)
2
2
The following changes since commit 06412088ce98f745405b8f65cfc51ddd6b842bbf:
ASoC: s3c2412-i2s: Fix dai registration (2012-04-30 23:45:25 +0100)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git tags/asoc-3.4
for you to fetch changes up to c7f5f2389377b66028bc129890aa653deafe8d39:
ASoC: wm8994: Fix AIF2ADC power down (2012-05-15 18:29:30 +0100)
I'll send the big 3.5 update either later tonight or tomorrow.
----------------------------------------------------------------
ASoC: Last minute fixes
Some last minute fixes for ASoC. Small, focused changes to specific
drivers.
----------------------------------------------------------------
Brian Austin (1):
ASoC: cs42l73: Sync digital mixer kcontrols to allow for 0dB
Guennadi Liakhovetski (1):
ASoC: sh: fix migor.c compilation
Mark Brown (1):
ASoC: wm8994: Fix AIF2ADC power down
sound/soc/codecs/cs42l73.c | 16 ++++++++--------
sound/soc/codecs/wm8994.c | 2 +-
sound/soc/sh/migor.c | 2 +-
3 files changed, 10 insertions(+), 10 deletions(-)
2
1
Signed-off-by: Mark Brown <broonie(a)opensource.wolfsonmicro.com>
---
sound/soc/codecs/wm8994.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c
index 6c1fe3a..2de12eb 100644
--- a/sound/soc/codecs/wm8994.c
+++ b/sound/soc/codecs/wm8994.c
@@ -1144,7 +1144,7 @@ static int aif2clk_ev(struct snd_soc_dapm_widget *w,
snd_soc_update_bits(codec, WM8994_POWER_MANAGEMENT_5,
WM8994_AIF2DACL_ENA |
WM8994_AIF2DACR_ENA, 0);
- snd_soc_update_bits(codec, WM8994_POWER_MANAGEMENT_5,
+ snd_soc_update_bits(codec, WM8994_POWER_MANAGEMENT_4,
WM8994_AIF2ADCL_ENA |
WM8994_AIF2ADCR_ENA, 0);
--
1.7.10
1
0

[alsa-devel] ASoC: wm9712: Microphone doesn't work, "Capture Volume" inverted
by Christoph Fritz 15 May '12
by Christoph Fritz 15 May '12
15 May '12
Hi Mark, Liam, Hans J. and List,
I have a "wm9712" codec-chip on an ARM mx35 board and everything works
except Microphone.
Strange is that I can't change the Mic-Select-Source:
# amixer sset "Mic Select Source" 'Mic 2'
Simple mixer control 'Mic Select Source',0
Capabilities: enum
Items: 'Mic 1' 'Differential' 'Mic 2' 'Stereo'
Item0: 'Mic 1'
When I tested arecord for line-in, the "Capture Slide" in alsamixer was
wrongly inverted.
in sound/soc/codecs/wm9712.c:
SOC_DOUBLE("Capture Volume", AC97_REC_GAIN, 8, 0, 63, 1),
should get:
SOC_DOUBLE("Capture Volume", AC97_REC_GAIN, 8, 0, 63, 0),
If you want I can send a patch in.
I'm using the current linus git tree (3.4.0-rc4). I tried it with
linux-2.6.33.20 (with sound/soc/imx/imx-ssi.c etc. from 2.6.34) and it
works. On a fairly similar board I was told that it works on Kernel
3.0.4 with this patch applied:
Since patch "ASoC: Sync initial widget state with hardware"
(commitid: b66a70d5e9929f3b0df5a7177bba75652d2f4c3e) the mic capture doesn't
work. The MICBIAS bit from the "Power Management" Register are alway 1 (disabled).
So that the captering works the active status must be set to 1, at the right time.
That this works the stream name must be set.
---
include/sound/soc-dapm.h | 3 ++-
sound/soc/soc-dapm.c | 4 ++--
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/include/sound/soc-dapm.h b/include/sound/soc-dapm.h
index c46e7d8..308122a 100644
--- a/include/sound/soc-dapm.h
+++ b/include/sound/soc-dapm.h
@@ -85,7 +85,8 @@
.shift = wshift, .invert = winvert, .kcontrol_news = wcontrols, \
.num_kcontrols = wncontrols}
#define SND_SOC_DAPM_MICBIAS(wname, wreg, wshift, winvert) \
-{ .id = snd_soc_dapm_micbias, .name = wname, .reg = wreg, .shift = wshift, \
+{ .id = snd_soc_dapm_micbias, .name = wname, .sname = \
+ "Mic Bias HiFi Capture", .reg = wreg, .shift = wshift, \
.invert = winvert, .kcontrol_news = NULL, .num_kcontrols = 0}
#define SND_SOC_DAPM_SWITCH(wname, wreg, wshift, winvert, wcontrols) \
{ .id = snd_soc_dapm_switch, .name = wname, .reg = wreg, .shift = wshift, \
diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c
index 32ab7fc..250a1d2 100644
--- a/sound/soc/soc-dapm.c
+++ b/sound/soc/soc-dapm.c
@@ -646,7 +646,7 @@ static int is_connected_input_ep(struct snd_soc_dapm_widget *widget)
return snd_soc_dapm_suspend_check(widget);
/* connected VMID/Bias for lower pops */
- if (widget->id == snd_soc_dapm_vmid)
+ if (widget->id == snd_soc_dapm_vmid || widget->id == snd_soc_dapm_micbias)
return snd_soc_dapm_suspend_check(widget);
/* connected jack ? */
@@ -1835,6 +1835,7 @@ int snd_soc_dapm_new_widgets(struct snd_soc_dapm_context *dapm)
break;
case snd_soc_dapm_adc:
case snd_soc_dapm_aif_out:
+ case snd_soc_dapm_micbias:
w->power_check = dapm_adc_check_power;
break;
case snd_soc_dapm_dac:
@@ -1848,7 +1849,6 @@ int snd_soc_dapm_new_widgets(struct snd_soc_dapm_context *dapm)
break;
case snd_soc_dapm_input:
case snd_soc_dapm_output:
- case snd_soc_dapm_micbias:
case snd_soc_dapm_spk:
case snd_soc_dapm_hp:
case snd_soc_dapm_mic:
--
Thanks,
-- Christoph
It follows the output of "amixer scontents", "amixer controls" and
"amixer contents":
Simple mixer control 'Headphone',0
Capabilities: pvolume pswitch pswitch-joined penum
Playback channels: Front Left - Front Right
Limits: Playback 0 - 31
Mono:
Front Left: Playback 20 [65%] [on]
Front Right: Playback 20 [65%] [on]
Simple mixer control 'Headphone Playback ZC',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [off]
Simple mixer control 'Speaker',0
Capabilities: pvolume pswitch pswitch-joined penum
Playback channels: Front Left - Front Right
Limits: Playback 0 - 31
Mono:
Front Left: Playback 6 [19%] [off]
Front Right: Playback 6 [19%] [off]
Simple mixer control 'Speaker Mixer Aux',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [off]
Simple mixer control 'Speaker Mixer Line Bypass',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [off]
Simple mixer control 'Speaker Mixer PCBeep Bypass',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [off]
Simple mixer control 'Speaker Mixer PCM',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [off]
Simple mixer control 'Speaker Mixer Phone Bypass',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [off]
Simple mixer control 'Speaker Mux',0
Capabilities: enum
Items: 'Speaker Mix' 'Headphone Mix'
Item0: 'Speaker Mix'
Simple mixer control 'Speaker Playback Invert',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [off]
Simple mixer control 'Speaker Playback ZC',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [off]
Simple mixer control 'Tone Cut-off',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [off]
Simple mixer control 'Bass',0
Capabilities: volume volume-joined penum
Playback channels: Mono
Capture channels: Mono
Limits: 0 - 15
Mono: 0 [0%]
Simple mixer control 'Bass Control',0
Capabilities: enum
Items: 'Linear Control' 'Adaptive Boost'
Item0: 'Linear Control'
Simple mixer control 'Bass Cut-off',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [off]
Simple mixer control 'Treble',0
Capabilities: volume volume-joined penum
Playback channels: Mono
Capture channels: Mono
Limits: 0 - 15
Mono: 9 [60%]
Simple mixer control 'PCM',0
Capabilities: pvolume penum
Playback channels: Front Left - Front Right
Limits: Playback 0 - 31
Mono:
Front Left: Playback 17 [55%]
Front Right: Playback 17 [55%]
Simple mixer control 'Line',0
Capabilities: cvolume penum
Capture channels: Front Left - Front Right
Limits: Capture 0 - 31
Front Left: Capture 23 [74%]
Front Right: Capture 23 [74%]
Simple mixer control 'Mic 1',0
Capabilities: volume volume-joined penum
Playback channels: Mono
Capture channels: Mono
Limits: 0 - 31
Mono: 23 [74%] [0.00dB]
Simple mixer control 'Mic 2',0
Capabilities: volume volume-joined penum
Playback channels: Mono
Capture channels: Mono
Limits: 0 - 31
Mono: 18 [58%] [-7.50dB]
Simple mixer control 'Mic Boost',0
Capabilities: volume volume-joined penum
Playback channels: Mono
Capture channels: Mono
Limits: 0 - 1
Mono: 0 [0%] [0.00dB]
Simple mixer control 'Mic Headphone ',0
Capabilities: volume volume-joined penum
Playback channels: Mono
Capture channels: Mono
Limits: 0 - 7
Mono: 3 [43%]
Simple mixer control 'Mic Select Source',0
Capabilities: enum
Items: 'Mic 1' 'Differential' 'Mic 2' 'Stereo'
Item0: 'Mic 1'
Simple mixer control 'Phone',0
Capabilities: volume volume-joined penum
Playback channels: Mono
Capture channels: Mono
Limits: 0 - 15
Mono: 14 [93%]
Simple mixer control 'Phone Mixer Aux',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [off]
Simple mixer control 'Phone Mixer Line Bypass',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [off]
Simple mixer control 'Phone Mixer Mic 1 Sidetone',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [off]
Simple mixer control 'Phone Mixer Mic 2 Sidetone',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [off]
Simple mixer control 'Phone Mixer PCBeep Bypass',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [off]
Simple mixer control 'Phone Mixer PCM',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [off]
Simple mixer control 'Aux Playback Headphone',0
Capabilities: volume volume-joined penum
Playback channels: Mono
Capture channels: Mono
Limits: 0 - 7
Mono: 0 [0%]
Simple mixer control 'Aux Playback Phone',0
Capabilities: volume volume-joined penum
Playback channels: Mono
Capture channels: Mono
Limits: 0 - 7
Mono: 0 [0%]
Simple mixer control 'Aux Playback Speaker',0
Capabilities: volume volume-joined penum
Playback channels: Mono
Capture channels: Mono
Limits: 0 - 7
Mono: 0 [0%]
Simple mixer control 'Mono',0
Capabilities: pvolume pvolume-joined pswitch pswitch-joined penum
Playback channels: Mono
Limits: Playback 0 - 31
Mono: Playback 0 [0%] [off]
Simple mixer control 'Mono Playback ZC',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [off]
Simple mixer control 'Playback Attenuate (-6dB)',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [off]
Simple mixer control 'Capture',0
Capabilities: cvolume penum
Capture channels: Front Left - Front Right
Limits: Capture 0 - 63
Front Left: Capture 13 [21%]
Front Right: Capture 13 [21%]
Simple mixer control 'Capture 20dB Boost',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [off]
Simple mixer control 'Capture ADC',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [on]
Simple mixer control 'Capture Phone Mux',0
Capabilities: enum
Items: 'Stereo' 'Left' 'Right' 'Mute'
Item0: 'Mute'
Simple mixer control 'Capture Volume Steps',0
Capabilities: enum
Items: '+1.5dB Steps' '+0.75dB Steps'
Item0: '+0.75dB Steps'
Item1: '+0.75dB Steps'
Simple mixer control 'Capture ZC',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [on]
Simple mixer control 'Capture to Phone 20dB Boost',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [off]
Simple mixer control '3D',0
Capabilities: pvolume pvolume-joined penum
Playback channels: Mono
Limits: Playback 0 - 15
Mono: Playback 0 [0%]
Simple mixer control '3D Lower Cut-off',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [off]
Simple mixer control '3D Upper Cut-off',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [off]
Simple mixer control 'ALC Attack Time',0
Capabilities: volume volume-joined penum
Playback channels: Mono
Capture channels: Mono
Limits: 0 - 15
Mono: 0 [0%]
Simple mixer control 'ALC Decay Time',0
Capabilities: volume volume-joined penum
Playback channels: Mono
Capture channels: Mono
Limits: 0 - 15
Mono: 0 [0%]
Simple mixer control 'ALC Function',0
Capabilities: enum
Items: 'None' 'Left' 'Right' 'Stereo'
Item0: 'None'
Simple mixer control 'ALC Headphone',0
Capabilities: volume volume-joined penum
Playback channels: Mono
Capture channels: Mono
Limits: 0 - 7
Mono: 0 [0%]
Simple mixer control 'ALC Hold Time',0
Capabilities: volume volume-joined penum
Playback channels: Mono
Capture channels: Mono
Limits: 0 - 15
Mono: 0 [0%]
Simple mixer control 'ALC Max',0
Capabilities: volume volume-joined penum
Playback channels: Mono
Capture channels: Mono
Limits: 0 - 7
Mono: 0 [0%]
Simple mixer control 'ALC NG',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [off]
Simple mixer control 'ALC NG Threshold',0
Capabilities: volume volume-joined penum
Playback channels: Mono
Capture channels: Mono
Limits: 0 - 31
Mono: 0 [0%]
Simple mixer control 'ALC NG Type',0
Capabilities: enum
Items: 'Constant Gain' 'Mute'
Item0: 'Mute'
Simple mixer control 'ALC Sidetone Mux',0
Capabilities: enum
Items: 'Stereo' 'Left' 'Right' 'None'
Item0: 'Stereo'
Simple mixer control 'ALC Target',0
Capabilities: volume volume-joined penum
Playback channels: Mono
Capture channels: Mono
Limits: 0 - 15
Mono: 0 [0%]
Simple mixer control 'ALC ZC',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [off]
Simple mixer control 'ALC ZC Timeout',0
Capabilities: volume volume-joined penum
Playback channels: Mono
Capture channels: Mono
Limits: 0 - 3
Mono: 0 [0%]
Simple mixer control 'Differential Source',0
Capabilities: enum
Items: 'Mic' 'Line'
Item0: 'Mic'
Simple mixer control 'Left Capture Select',0
Capabilities: enum
Items: 'Mic' 'NC' 'NC' 'Speaker Mixer' 'Line' 'Headphone Mixer' 'Phone
Mixer' 'Phone'
Item0: 'NC'
Simple mixer control 'Left HP Mixer Aux',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [off]
Simple mixer control 'Left HP Mixer Line Bypass',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [on]
Simple mixer control 'Left HP Mixer Mic Sidetone',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [off]
Simple mixer control 'Left HP Mixer PCBeep Bypass',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [off]
Simple mixer control 'Left HP Mixer PCM',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [on]
Simple mixer control 'Left HP Mixer Phone Bypass',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [off]
Simple mixer control 'Out3',0
Capabilities: volume volume-joined pswitch pswitch-joined penum
Playback channels: Mono
Capture channels: Mono
Limits: 0 - 31
Mono: 0 [0%] Playback [off]
Simple mixer control 'Out3 Mux',0
Capabilities: enum
Items: 'Left' 'VREF' 'Left + Right' 'Mono'
Item0: 'Mono'
Simple mixer control 'Out3 ZC',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [off]
Simple mixer control 'PCBeep Bypass Headphone',0
Capabilities: volume volume-joined penum
Playback channels: Mono
Capture channels: Mono
Limits: 0 - 7
Mono: 0 [0%]
Simple mixer control 'PCBeep Bypass Phone',0
Capabilities: volume volume-joined penum
Playback channels: Mono
Capture channels: Mono
Limits: 0 - 7
Mono: 0 [0%]
Simple mixer control 'PCBeep Bypass Speaker',0
Capabilities: volume volume-joined penum
Playback channels: Mono
Capture channels: Mono
Limits: 0 - 7
Mono: 0 [0%]
Simple mixer control 'Right Capture Select',0
Capabilities: enum
Items: 'Mic' 'NC' 'NC' 'Speaker Mixer' 'Line' 'Headphone Mixer' 'Phone
Mixer' 'Phone'
Item0: 'NC'
Simple mixer control 'Right HP Mixer Aux',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [on]
Simple mixer control 'Right HP Mixer Line Bypass',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [on]
Simple mixer control 'Right HP Mixer Mic Sidetone',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [on]
Simple mixer control 'Right HP Mixer PCBeep Bypass',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [off]
Simple mixer control 'Right HP Mixer PCM',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [on]
Simple mixer control 'Right HP Mixer Phone Bypass',0
Capabilities: pswitch pswitch-joined penum
Playback channels: Mono
Mono: Playback [off]
numid=8,iface=MIXER,name='Headphone Playback ZC Switch'
numid=4,iface=MIXER,name='Headphone Playback Switch'
numid=3,iface=MIXER,name='Headphone Playback Volume'
numid=5,iface=MIXER,name='PCM Playback Volume'
numid=35,iface=MIXER,name='Line Capture Volume'
numid=51,iface=MIXER,name='Mic 1 Volume'
numid=52,iface=MIXER,name='Mic 2 Volume'
numid=53,iface=MIXER,name='Mic Boost Volume'
numid=23,iface=MIXER,name='Mic Headphone Volume'
numid=78,iface=MIXER,name='Mic Select Source'
numid=60,iface=MIXER,name='Phone Mixer Aux Playback Switch'
numid=61,iface=MIXER,name='Phone Mixer Line Bypass Switch'
numid=63,iface=MIXER,name='Phone Mixer Mic 1 Sidetone Switch'
numid=64,iface=MIXER,name='Phone Mixer Mic 2 Sidetone Switch'
numid=59,iface=MIXER,name='Phone Mixer PCBeep Bypass Switch'
numid=62,iface=MIXER,name='Phone Mixer PCM Playback Switch'
numid=34,iface=MIXER,name='Phone Volume'
numid=31,iface=MIXER,name='Aux Playback Headphone Volume'
numid=33,iface=MIXER,name='Aux Playback Phone Volume'
numid=32,iface=MIXER,name='Aux Playback Speaker Volume'
numid=9,iface=MIXER,name='Mono Playback ZC Switch'
numid=11,iface=MIXER,name='Mono Playback Switch'
numid=10,iface=MIXER,name='Mono Playback Volume'
numid=36,iface=MIXER,name='Capture 20dB Boost Switch'
numid=47,iface=MIXER,name='Capture ADC Switch'
numid=81,iface=MIXER,name='Capture Phone Mux'
numid=50,iface=MIXER,name='Capture ZC Switch'
numid=37,iface=MIXER,name='Capture to Phone 20dB Boost Switch'
numid=49,iface=MIXER,name='Capture Volume'
numid=48,iface=MIXER,name='Capture Volume Steps'
numid=44,iface=MIXER,name='Playback Attenuate (-6dB) Switch'
numid=39,iface=MIXER,name='3D Lower Cut-off Switch'
numid=40,iface=MIXER,name='3D Playback Volume'
numid=38,iface=MIXER,name='3D Upper Cut-off Switch'
numid=15,iface=MIXER,name='ALC Attack Time'
numid=14,iface=MIXER,name='ALC Decay Time'
numid=16,iface=MIXER,name='ALC Function'
numid=24,iface=MIXER,name='ALC Headphone Volume'
numid=13,iface=MIXER,name='ALC Hold Time'
numid=17,iface=MIXER,name='ALC Max Volume'
numid=20,iface=MIXER,name='ALC NG Switch'
numid=22,iface=MIXER,name='ALC NG Threshold'
numid=21,iface=MIXER,name='ALC NG Type'
numid=84,iface=MIXER,name='ALC Sidetone Mux'
numid=12,iface=MIXER,name='ALC Target Volume'
numid=19,iface=MIXER,name='ALC ZC Switch'
numid=18,iface=MIXER,name='ALC ZC Timeout'
numid=41,iface=MIXER,name='Bass Control'
numid=42,iface=MIXER,name='Bass Cut-off Switch'
numid=45,iface=MIXER,name='Bass Volume'
numid=77,iface=MIXER,name='Differential Source'
numid=80,iface=MIXER,name='Left Capture Select'
numid=72,iface=MIXER,name='Left HP Mixer Aux Playback Switch'
numid=74,iface=MIXER,name='Left HP Mixer Line Bypass Switch'
numid=76,iface=MIXER,name='Left HP Mixer Mic Sidetone Switch'
numid=71,iface=MIXER,name='Left HP Mixer PCBeep Bypass Switch'
numid=75,iface=MIXER,name='Left HP Mixer PCM Playback Switch'
numid=73,iface=MIXER,name='Left HP Mixer Phone Bypass Switch'
numid=83,iface=MIXER,name='Out3 Mux'
numid=25,iface=MIXER,name='Out3 Switch'
numid=27,iface=MIXER,name='Out3 Volume'
numid=26,iface=MIXER,name='Out3 ZC Switch'
numid=28,iface=MIXER,name='PCBeep Bypass Headphone Volume'
numid=30,iface=MIXER,name='PCBeep Bypass Phone Volume'
numid=29,iface=MIXER,name='PCBeep Bypass Speaker Volume'
numid=79,iface=MIXER,name='Right Capture Select'
numid=66,iface=MIXER,name='Right HP Mixer Aux Playback Switch'
numid=68,iface=MIXER,name='Right HP Mixer Line Bypass Switch'
numid=70,iface=MIXER,name='Right HP Mixer Mic Sidetone Switch'
numid=65,iface=MIXER,name='Right HP Mixer PCBeep Bypass Switch'
numid=69,iface=MIXER,name='Right HP Mixer PCM Playback Switch'
numid=67,iface=MIXER,name='Right HP Mixer Phone Bypass Switch'
numid=55,iface=MIXER,name='Speaker Mixer Aux Playback Switch'
numid=57,iface=MIXER,name='Speaker Mixer Line Bypass Switch'
numid=54,iface=MIXER,name='Speaker Mixer PCBeep Bypass Switch'
numid=58,iface=MIXER,name='Speaker Mixer PCM Playback Switch'
numid=56,iface=MIXER,name='Speaker Mixer Phone Bypass Switch'
numid=82,iface=MIXER,name='Speaker Mux'
numid=7,iface=MIXER,name='Speaker Playback Invert Switch'
numid=2,iface=MIXER,name='Speaker Playback Switch'
numid=1,iface=MIXER,name='Speaker Playback Volume'
numid=6,iface=MIXER,name='Speaker Playback ZC Switch'
numid=43,iface=MIXER,name='Tone Cut-off Switch'
numid=46,iface=MIXER,name='Treble Volume'
numid=8,iface=MIXER,name='Headphone Playback ZC Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=4,iface=MIXER,name='Headphone Playback Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=3,iface=MIXER,name='Headphone Playback Volume'
; type=INTEGER,access=rw------,values=2,min=0,max=31,step=0
: values=20,20
numid=5,iface=MIXER,name='PCM Playback Volume'
; type=INTEGER,access=rw------,values=2,min=0,max=31,step=0
: values=17,17
numid=35,iface=MIXER,name='Line Capture Volume'
; type=INTEGER,access=rw------,values=2,min=0,max=31,step=0
: values=23,23
numid=51,iface=MIXER,name='Mic 1 Volume'
; type=INTEGER,access=rw---R--,values=1,min=0,max=31,step=0
: values=23
| dBscale-min=-34.50dB,step=1.50dB,mute=0
numid=52,iface=MIXER,name='Mic 2 Volume'
; type=INTEGER,access=rw---R--,values=1,min=0,max=31,step=0
: values=18
| dBscale-min=-34.50dB,step=1.50dB,mute=0
numid=53,iface=MIXER,name='Mic Boost Volume'
; type=INTEGER,access=rw---R--,values=1,min=0,max=1,step=0
: values=0
| dBscale-min=0.00dB,step=20.00dB,mute=0
numid=23,iface=MIXER,name='Mic Headphone Volume'
; type=INTEGER,access=rw------,values=1,min=0,max=7,step=0
: values=3
numid=78,iface=MIXER,name='Mic Select Source'
; type=ENUMERATED,access=rw------,values=1,items=4
; Item #0 'Mic 1'
; Item #1 'Differential'
; Item #2 'Mic 2'
; Item #3 'Stereo'
: values=0
numid=60,iface=MIXER,name='Phone Mixer Aux Playback Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=61,iface=MIXER,name='Phone Mixer Line Bypass Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=63,iface=MIXER,name='Phone Mixer Mic 1 Sidetone Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=64,iface=MIXER,name='Phone Mixer Mic 2 Sidetone Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=59,iface=MIXER,name='Phone Mixer PCBeep Bypass Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=62,iface=MIXER,name='Phone Mixer PCM Playback Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=34,iface=MIXER,name='Phone Volume'
; type=INTEGER,access=rw------,values=1,min=0,max=15,step=0
: values=14
numid=31,iface=MIXER,name='Aux Playback Headphone Volume'
; type=INTEGER,access=rw------,values=1,min=0,max=7,step=0
: values=0
numid=33,iface=MIXER,name='Aux Playback Phone Volume'
; type=INTEGER,access=rw------,values=1,min=0,max=7,step=0
: values=0
numid=32,iface=MIXER,name='Aux Playback Speaker Volume'
; type=INTEGER,access=rw------,values=1,min=0,max=7,step=0
: values=0
numid=9,iface=MIXER,name='Mono Playback ZC Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=11,iface=MIXER,name='Mono Playback Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=10,iface=MIXER,name='Mono Playback Volume'
; type=INTEGER,access=rw------,values=1,min=0,max=31,step=0
: values=0
numid=36,iface=MIXER,name='Capture 20dB Boost Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=47,iface=MIXER,name='Capture ADC Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=81,iface=MIXER,name='Capture Phone Mux'
; type=ENUMERATED,access=rw------,values=1,items=4
; Item #0 'Stereo'
; Item #1 'Left'
; Item #2 'Right'
; Item #3 'Mute'
: values=3
numid=50,iface=MIXER,name='Capture ZC Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=37,iface=MIXER,name='Capture to Phone 20dB Boost Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=49,iface=MIXER,name='Capture Volume'
; type=INTEGER,access=rw------,values=2,min=0,max=63,step=0
: values=13,13
numid=48,iface=MIXER,name='Capture Volume Steps'
; type=ENUMERATED,access=rw------,values=2,items=2
; Item #0 '+1.5dB Steps'
; Item #1 '+0.75dB Steps'
: values=1,1
numid=44,iface=MIXER,name='Playback Attenuate (-6dB) Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=39,iface=MIXER,name='3D Lower Cut-off Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=40,iface=MIXER,name='3D Playback Volume'
; type=INTEGER,access=rw------,values=1,min=0,max=15,step=0
: values=0
numid=38,iface=MIXER,name='3D Upper Cut-off Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=15,iface=MIXER,name='ALC Attack Time'
; type=INTEGER,access=rw------,values=1,min=0,max=15,step=0
: values=0
numid=14,iface=MIXER,name='ALC Decay Time'
; type=INTEGER,access=rw------,values=1,min=0,max=15,step=0
: values=0
numid=16,iface=MIXER,name='ALC Function'
; type=ENUMERATED,access=rw------,values=1,items=4
; Item #0 'None'
; Item #1 'Left'
; Item #2 'Right'
; Item #3 'Stereo'
: values=0
numid=24,iface=MIXER,name='ALC Headphone Volume'
; type=INTEGER,access=rw------,values=1,min=0,max=7,step=0
: values=0
numid=13,iface=MIXER,name='ALC Hold Time'
; type=INTEGER,access=rw------,values=1,min=0,max=15,step=0
: values=0
numid=17,iface=MIXER,name='ALC Max Volume'
; type=INTEGER,access=rw------,values=1,min=0,max=7,step=0
: values=0
numid=20,iface=MIXER,name='ALC NG Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=22,iface=MIXER,name='ALC NG Threshold'
; type=INTEGER,access=rw------,values=1,min=0,max=31,step=0
: values=0
numid=21,iface=MIXER,name='ALC NG Type'
; type=ENUMERATED,access=rw------,values=1,items=2
; Item #0 'Constant Gain'
; Item #1 'Mute'
: values=1
numid=84,iface=MIXER,name='ALC Sidetone Mux'
; type=ENUMERATED,access=rw------,values=1,items=4
; Item #0 'Stereo'
; Item #1 'Left'
; Item #2 'Right'
; Item #3 'None'
: values=0
numid=12,iface=MIXER,name='ALC Target Volume'
; type=INTEGER,access=rw------,values=1,min=0,max=15,step=0
: values=0
numid=19,iface=MIXER,name='ALC ZC Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=18,iface=MIXER,name='ALC ZC Timeout'
; type=INTEGER,access=rw------,values=1,min=0,max=3,step=0
: values=0
numid=41,iface=MIXER,name='Bass Control'
; type=ENUMERATED,access=rw------,values=1,items=2
; Item #0 'Linear Control'
; Item #1 'Adaptive Boost'
: values=0
numid=42,iface=MIXER,name='Bass Cut-off Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=45,iface=MIXER,name='Bass Volume'
; type=INTEGER,access=rw------,values=1,min=0,max=15,step=0
: values=0
numid=77,iface=MIXER,name='Differential Source'
; type=ENUMERATED,access=rw------,values=1,items=2
; Item #0 'Mic'
; Item #1 'Line'
: values=0
numid=80,iface=MIXER,name='Left Capture Select'
; type=ENUMERATED,access=rw------,values=1,items=8
; Item #0 'Mic'
; Item #1 'NC'
; Item #2 'NC'
; Item #3 'Speaker Mixer'
; Item #4 'Line'
; Item #5 'Headphone Mixer'
; Item #6 'Phone Mixer'
; Item #7 'Phone'
: values=1
numid=72,iface=MIXER,name='Left HP Mixer Aux Playback Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=74,iface=MIXER,name='Left HP Mixer Line Bypass Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=76,iface=MIXER,name='Left HP Mixer Mic Sidetone Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=71,iface=MIXER,name='Left HP Mixer PCBeep Bypass Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=75,iface=MIXER,name='Left HP Mixer PCM Playback Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=73,iface=MIXER,name='Left HP Mixer Phone Bypass Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=83,iface=MIXER,name='Out3 Mux'
; type=ENUMERATED,access=rw------,values=1,items=4
; Item #0 'Left'
; Item #1 'VREF'
; Item #2 'Left + Right'
; Item #3 'Mono'
: values=3
numid=25,iface=MIXER,name='Out3 Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=27,iface=MIXER,name='Out3 Volume'
; type=INTEGER,access=rw------,values=1,min=0,max=31,step=0
: values=0
numid=26,iface=MIXER,name='Out3 ZC Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=28,iface=MIXER,name='PCBeep Bypass Headphone Volume'
; type=INTEGER,access=rw------,values=1,min=0,max=7,step=0
: values=0
numid=30,iface=MIXER,name='PCBeep Bypass Phone Volume'
; type=INTEGER,access=rw------,values=1,min=0,max=7,step=0
: values=0
numid=29,iface=MIXER,name='PCBeep Bypass Speaker Volume'
; type=INTEGER,access=rw------,values=1,min=0,max=7,step=0
: values=0
numid=79,iface=MIXER,name='Right Capture Select'
; type=ENUMERATED,access=rw------,values=1,items=8
; Item #0 'Mic'
; Item #1 'NC'
; Item #2 'NC'
; Item #3 'Speaker Mixer'
; Item #4 'Line'
; Item #5 'Headphone Mixer'
; Item #6 'Phone Mixer'
; Item #7 'Phone'
: values=1
numid=66,iface=MIXER,name='Right HP Mixer Aux Playback Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=68,iface=MIXER,name='Right HP Mixer Line Bypass Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=70,iface=MIXER,name='Right HP Mixer Mic Sidetone Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=65,iface=MIXER,name='Right HP Mixer PCBeep Bypass Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=69,iface=MIXER,name='Right HP Mixer PCM Playback Switch'
; type=BOOLEAN,access=rw------,values=1
: values=on
numid=67,iface=MIXER,name='Right HP Mixer Phone Bypass Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=55,iface=MIXER,name='Speaker Mixer Aux Playback Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=57,iface=MIXER,name='Speaker Mixer Line Bypass Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=54,iface=MIXER,name='Speaker Mixer PCBeep Bypass Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=58,iface=MIXER,name='Speaker Mixer PCM Playback Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=56,iface=MIXER,name='Speaker Mixer Phone Bypass Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=82,iface=MIXER,name='Speaker Mux'
; type=ENUMERATED,access=rw------,values=1,items=2
; Item #0 'Speaker Mix'
; Item #1 'Headphone Mix'
: values=0
numid=7,iface=MIXER,name='Speaker Playback Invert Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=2,iface=MIXER,name='Speaker Playback Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=1,iface=MIXER,name='Speaker Playback Volume'
; type=INTEGER,access=rw------,values=2,min=0,max=31,step=0
: values=6,6
numid=6,iface=MIXER,name='Speaker Playback ZC Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=43,iface=MIXER,name='Tone Cut-off Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=46,iface=MIXER,name='Treble Volume'
; type=INTEGER,access=rw------,values=1,min=0,max=15,step=0
: values=9
2
16
I'm writing 48KHz stereo to Intel HD audio on my mobo, and I'd like to send
it in parallel to both the analog and S/PDIF outputs, which share a clock
source. If I open both devices, configure them with the same buffer space,
and write the same data with snd_pcm_writei, how should I handle an
underrun? Call snd_pcm_prepare on both device handles? If so, and the first
device underruns, should I bother writing the buffer to the second device?
--
Ciao, Paul D. DeRocco
Paul mailto:pderocco@ix.netcom.com
3
2
Enable Device Tree based loading of the codec driver.
Example of dts section to load the twl6040-codec driver:
twl6040: twl6040@4b {
...
twl6040_codec: twl6040@0 {
compatible = "ti,twl6040-codec";
interrupts = <1>;
};
};
Signed-off-by: Peter Ujfalusi <peter.ujfalusi(a)ti.com>
---
.../devicetree/bindings/sound/twl6040.txt | 26 ++++++++++++++++++++
sound/soc/codecs/twl6040.c | 8 ++++++
2 files changed, 34 insertions(+), 0 deletions(-)
create mode 100644 Documentation/devicetree/bindings/sound/twl6040.txt
diff --git a/Documentation/devicetree/bindings/sound/twl6040.txt b/Documentation/devicetree/bindings/sound/twl6040.txt
new file mode 100644
index 0000000..1f3dd70
--- /dev/null
+++ b/Documentation/devicetree/bindings/sound/twl6040.txt
@@ -0,0 +1,26 @@
+ASoC codec driver for the twl6040 family
+
+The ASoC codec driver is a child of the twl6040 MFD dirver.
+Documentation/devicetree/bindings/mfd/twl6040.txt
+
+Required properties:
+- compatible : Must be "ti,twl6040-codec";
+- interrupts: 1, Jack plug detection IRQ
+
+Example:
+/*
+ * 8-channel high quality low-power audio codec
+ * http://www.ti.com/lit/ds/symlink/twl6040.pdf
+ */
+twl6040: twl6040@4b {
+ ...
+ twl6040_codec: twl6040@0 {
+ compatible = "ti,twl6040-codec";
+ interrupts = <1>;
+ };
+};
+
+sound { /* ASoC machine dirver */
+ ...
+ dai-link,codec = <&twl6040_codec>;
+};
diff --git a/sound/soc/codecs/twl6040.c b/sound/soc/codecs/twl6040.c
index 0747260..85c6e0c 100644
--- a/sound/soc/codecs/twl6040.c
+++ b/sound/soc/codecs/twl6040.c
@@ -25,6 +25,7 @@
#include <linux/delay.h>
#include <linux/pm.h>
#include <linux/platform_device.h>
+#include <linux/of_device.h>
#include <linux/slab.h>
#include <linux/mfd/twl6040.h>
@@ -1229,10 +1230,17 @@ static int __devexit twl6040_codec_remove(struct platform_device *pdev)
return 0;
}
+static const struct of_device_id twl6040_codec_of_match[] = {
+ {.compatible = "ti,twl6040-codec", },
+ { },
+};
+MODULE_DEVICE_TABLE(of, twl6040_codec_of_match);
+
static struct platform_driver twl6040_codec_driver = {
.driver = {
.name = "twl6040-codec",
.owner = THIS_MODULE,
+ .of_match_table = twl6040_codec_of_match,
},
.probe = twl6040_codec_probe,
.remove = __devexit_p(twl6040_codec_remove),
--
1.7.8.6
4
16
Hi All,
I would have a question regarding the behavior of snd_device_register.
Currently, the register operation will only be carried out if the
state is SNDRV_DEV_BUILD. This effectively prevents device which have
been disconnected via snd_device_disconnect (and thus having the state
SNDRV_DEV_DISCONNECTED) to be registered again.
Is this a wanted behavior? If so, I can't seem to find a reason for
this as per my testing and code reading registering a device in
DISCONNECTED sate works just fine.
Thanks,
--
Barratis
2
3
Hi,
The hardware I am working on has CODEC transfer microphone signal to
two SOCs simultaneously . In the machine driver, I have two dai-links
defined for main SOC and secondary SOC. Both DAI-LINKs include same
CODEC DAI. As long as only one dai-link is being accessed at a time,
thing is fine. However, when two dai-links are accessed at the same
time and one dai-link goes down, soc framework tears down the CODEC DAI
as it does not take account of same CODEC DAI is being used by other
dai-link. I see playback_active and capture_active being defined in
struct snd_soc_dai. I am thinking about using these flags to address
this problem. Is it the right approach? Is there precedence being
addressed with different approach? Also, I am referring to kernel 3.4
rc7. In soc-dai.h, playback_active and capture active are defined as
unsigned int capture_active:1; /* stream is in use */
unsigned int playback_active:1; /* stream is in use */
However, in soc-pcm.c, playback_active and capture_active are being
incremented and decremented instead of set and clear. If I use these
flags to address my problem, I am going to increase number of bits.
Thanks
Patrick
--
Sent by an employee of the Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.
2
2

[alsa-devel] [PATCH alsa-lib] pcm_dsnoop: comment fall-through in next "case"
by Antonio Borneo 14 May '12
by Antonio Borneo 14 May '12
14 May '12
Signed-off-by: Antonio Borneo <borneo.antonio(a)gmail.com>
---
src/pcm/pcm_dsnoop.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/src/pcm/pcm_dsnoop.c b/src/pcm/pcm_dsnoop.c
index 988f1f4..bacb4ae 100644
--- a/src/pcm/pcm_dsnoop.c
+++ b/src/pcm/pcm_dsnoop.c
@@ -223,6 +223,7 @@ static int snd_pcm_dsnoop_delay(snd_pcm_t *pcm, snd_pcm_sframes_t *delayp)
err = snd_pcm_dsnoop_sync_ptr(pcm);
if (err < 0)
return err;
+ /* Fall through */
case SNDRV_PCM_STATE_PREPARED:
case SNDRV_PCM_STATE_SUSPENDED:
*delayp = snd_pcm_mmap_capture_hw_avail(pcm);
--
1.7.3.4
2
1

14 May '12
Hi,
this is a very simple one line patch but the issue was
driving me crazy for few days.
After this finding, I have reviewed all the "switch"
statements in alsa-lib. All well done with proper comment
when a "case" falls through the next "case".
But there is one "switch" that does not follow the usual
scheme.
In file src/pcm/pcm_dsnoop.c
procedure snd_pcm_dsnoop_delay()
following code fragment:
switch(dsnoop->state) {
case SNDRV_PCM_STATE_DRAINING:
case SNDRV_PCM_STATE_RUNNING:
err = snd_pcm_dsnoop_sync_ptr(pcm);
if (err < 0)
return err;
case SNDRV_PCM_STATE_PREPARED:
case SNDRV_PCM_STATE_SUSPENDED:
*delayp = snd_pcm_mmap_capture_hw_avail(pcm);
return 0;
If snd_pcm_dsnoop_sync_ptr() returns no error, execution
falls through next "case".
It's missing the usual comment
/* Fall through */
to highlight such code behavior.
I think the code is correct, but I do not have enough
experience on alsa-lib to be sure. Please confirm.
In such case, I would suggest adding the comment above.
Best Regards,
Antonio Borneo
2
3
Hi,
this is a series of HD-audio patches for 3.5 kernel from topic/hda
branch of sound git tree.
One behavior change is about the suspend/resume. As seen in another
thread, now the driver tries to resume immediately instead of delaying
the initialization. This is because we found out that some hardware
(more exactly BIOS) don't initialize the chips correctly, thus the
driver _must_ initialize them properly even for the further sleep /
shutdown.
In the code organization side, I started moving some common codes into
hda_auto_parser.[ch]. This will gather the codes commonly used for the
BIOS auto-parser, and leave hda_codec.c a bit more cleaner.
In addition to these commits, there are pending commits for VGA-
switcheroo support in topic/hda-switcheroo branch. The changes in VGA
side have been already merged in Dave's upstream tree, and the rest
for HD-audio will be merged soon (once after the conflict in linux-next
is resolved...)
thanks,
Takashi
1
15

[alsa-devel] [PATCH]: sound/usb/mixer.c: Volume quirks compare empty string kctl->id.name.
by Christian Melki 14 May '12
by Christian Melki 14 May '12
14 May '12
> > Hi,
> >
> > Sorry to mail you directly. But I have tried to mail several times to
> > the mailing list but I don't get through. Everything checks out fine,
> > no html etc, other mailing lists work fine, but not alsa devel.
> > Anyway, could you please have a look at this?
>
> Could you resend the patch but just add me, Clemens and Daniel to Cc, so that it reaches to main developers for usb-audio? Even if we take your patch as is, it'd be needed to be applicable via git-am.
>
>
> thanks,
>
> Takashi
Hi.
I noticied that volume quirks in usb-audio did not get applied.
This is because kctl->id.name gets built properly _after_ calling the quirk adjustments.
My solution is a bit ugly, but check_mapped_dB needs the adjustment before getting called.
I split the call over the switch. If someone feels like writing something cleaner, please feel free.
This works for me atleast.
Regards,
Christian Melki
Signed-off-by: Christian Melki <christian.melki(a)ericsson.se>
---
diff -urN linux-3.3.2.orig/sound/usb/mixer.c linux-3.3.2/sound/usb/mixer.c
--- linux-3.3.2.orig//sound/usb/mixer.c 2012-04-30 09:08:29.000000000 +0200
+++ linux-3.3.2/sound/usb/mixer.c 2012-04-30 09:46:28.000000000 +0200
@@ -1121,9 +1121,6 @@
len = snd_usb_copy_string_desc(state, nameid,
kctl->id.name, sizeof(kctl->id.name));
- /* get min/max values */
- get_min_max_with_quirks(cval, 0, kctl);
-
switch (control) {
case UAC_FU_MUTE:
case UAC_FU_VOLUME:
@@ -1155,6 +1152,7 @@
}
append_ctl_name(kctl, control == UAC_FU_MUTE ?
" Switch" : " Volume");
+ get_min_max_with_quirks(cval, 0, kctl);
if (control == UAC_FU_VOLUME) {
check_mapped_dB(map, cval);
if (cval->dBmin < cval->dBmax || !cval->initialized) {
@@ -1170,6 +1168,7 @@
if (! len)
strlcpy(kctl->id.name, audio_feature_info[control-1].name,
sizeof(kctl->id.name));
+ get_min_max_with_quirks(cval, 0, kctl);
break;
}
2
1
Signed-off-by: Mark Brown <broonie(a)opensource.wolfsonmicro.com>
---
sound/soc/codecs/lm49453.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sound/soc/codecs/lm49453.c b/sound/soc/codecs/lm49453.c
index 02a8179..802b9f1 100644
--- a/sound/soc/codecs/lm49453.c
+++ b/sound/soc/codecs/lm49453.c
@@ -1546,5 +1546,5 @@ static struct i2c_driver lm49453_i2c_driver = {
module_i2c_driver(lm49453_i2c_driver);
MODULE_DESCRIPTION("ASoC LM49453 driver");
-MODULE_AUTHOR("M R Swami Reddy <MR.Swami.Reddy(a)ti.com");
+MODULE_AUTHOR("M R Swami Reddy <MR.Swami.Reddy(a)ti.com>");
MODULE_LICENSE("GPL v2");
--
1.7.10
2
1
Hi,
My sound get crackling after 3 days running. Here is the log I
captured. Â What happened here? I appreciate any help.
======================================================
period_update: pcmC0D0p:0: pos=0x440/0x440/0x1540, hwptr=0x18b5f162,
hw_base=0x18b5f140, hw_intr=0x18b5f140
hw_update: pcmC0D0p:0: pos=0x441/0x440/0x1540, hwptr=0x18b5f580,
hw_base=0x18b5f140, hw_intr=0x18b5f580
hw_update: pcmC0D0p:0: pos=0x441/0x440/0x1540, hwptr=0x18b5f581,
hw_base=0x18b5f140, hw_intr=0x18b5f580
May 14 05:19:04 172.25.18.160 last message repeated 2 times
period_update: pcmC0D0p:0: pos=0x880/0x440/0x1540, hwptr=0x18b5f581,
hw_base=0x18b5f140, hw_intr=0x18b5f580
period_update: pcmC0D0p:0: pos=0xcc0/0x440/0x1540, hwptr=0x18b5f9c0,
hw_base=0x18b5f140, hw_intr=0x18b5f9c0
hw_update: pcmC0D0p:0: pos=0xe1a/0x440/0x1540, hwptr=0x18b5fe00,
hw_base=0x18b5f140, hw_intr=0x18b5fe00
hw_update: pcmC0D0p:0: pos=0xe1a/0x440/0x1540, hwptr=0x18b5ff5a,
hw_base=0x18b5f140, hw_intr=0x18b5fe00
hw_update: pcmC0D0p:0: pos=0xe1d/0x440/0x1540, hwptr=0x18b5ff5a,
hw_base=0x18b5f140, hw_intr=0x18b5fe00
period_update: pcmC0D0p:0: pos=0x1100/0x440/0x1540, hwptr=0x18b5ff5d,
hw_base=0x18b5f140, hw_intr=0x18b5fe00
hw_update: pcmC0D0p:0: pos=0x1290/0x440/0x1540, hwptr=0x18b60240,
hw_base=0x18b5f140, hw_intr=0x18b60240
hw_update: pcmC0D0p:0: pos=0x1290/0x440/0x1540, hwptr=0x18b603d0,
hw_base=0x18b5f140, hw_intr=0x18b60240
hw_update: pcmC0D0p:0: pos=0x1290/0x440/0x1540, hwptr=0x18b603d0,
hw_base=0x18b5f140, hw_intr=0x18b60240
period_update: pcmC0D0p:0: pos=0x1/0x440/0x1540, hwptr=0x18b603d0,
hw_base=0x18b5f140, hw_intr=0x18b60240
hw_update: pcmC0D0p:0: pos=0x1c0/0x440/0x1540, hwptr=0x18b60681,
hw_base=0x18b60680, hw_intr=0x18b60680
hw_update: pcmC0D0p:0: pos=0x1c0/0x440/0x1540, hwptr=0x18b60840,
hw_base=0x18b60680, hw_intr=0x18b60680
hw_update: pcmC0D0p:0: pos=0x1c0/0x440/0x1540, hwptr=0x18b60840,
hw_base=0x18b60680, hw_intr=0x18b60680
period_update: pcmC0D0p:0: pos=0x440/0x440/0x1540, hwptr=0x18b60840,
hw_base=0x18b60680, hw_intr=0x18b60680
hw_update: pcmC0D0p:0: pos=0x652/0x440/0x1540, hwptr=0x18b60ac0,
hw_base=0x18b60680, hw_intr=0x18b60ac0
hw_update: pcmC0D0p:0: pos=0x652/0x440/0x1540, hwptr=0x18b60cd2,
hw_base=0x18b60680, hw_intr=0x18b60ac0
hw_update: pcmC0D0p:0: pos=0x652/0x440/0x1540, hwptr=0x18b60cd2,
hw_base=0x18b60680, hw_intr=0x18b60ac0
period_update: pcmC0D0p:0: pos=0x880/0x440/0x1540, hwptr=0x18b60cd2,
hw_base=0x18b60680, hw_intr=0x18b60ac0
hw_update: pcmC0D0p:0: pos=0xaed/0x440/0x1540, hwptr=0x18b60f00,
hw_base=0x18b60680, hw_intr=0x18b60f00
period_update: pcmC0D0p:0: pos=0xcc0/0x440/0x1540, hwptr=0x18b6116d,
hw_base=0x18b60680, hw_intr=0x18b60f00
hw_update: pcmC0D0p:0: pos=0xfa5/0x440/0x1540, hwptr=0x18b61340,
hw_base=0x18b60680, hw_intr=0x18b61340
period_update: pcmC0D0p:0: pos=0x1100/0x440/0x1540, hwptr=0x18b61625,
hw_base=0x18b60680, hw_intr=0x18b61340
hw_update: pcmC0D0p:0: pos=0x14ea/0x440/0x1540, hwptr=0x18b61780,
hw_base=0x18b60680, hw_intr=0x18b61780
period_update: pcmC0D0p:0: pos=0x0/0x440/0x1540, hwptr=0x18b61b6a,
hw_base=0x18b60680, hw_intr=0x18b61780
period_update: pcmC0D0p:0: pos=0x440/0x440/0x1540, hwptr=0x18b61bc0,
hw_base=0x18b61bc0, hw_intr=0x18b61bc0
hw_update: pcmC0D0p:0: pos=0x47d/0x440/0x1540, hwptr=0x18b62000,
hw_base=0x18b61bc0, hw_intr=0x18b62000
period_update: pcmC0D0p:0: pos=0x881/0x440/0x1540, hwptr=0x18b6203d,
hw_base=0x18b61bc0, hw_intr=0x18b62000
hw_update: pcmC0D0p:0: pos=0x935/0x440/0x1540, hwptr=0x18b62441,
hw_base=0x18b61bc0, hw_intr=0x18b62440
period_update: pcmC0D0p:0: pos=0xcc0/0x440/0x1540, hwptr=0x18b624f5,
hw_base=0x18b61bc0, hw_intr=0x18b62440
hw_update: pcmC0D0p:0: pos=0xddd/0x440/0x1540, hwptr=0x18b62880,
hw_base=0x18b61bc0, hw_intr=0x18b62880
period_update: pcmC0D0p:0: pos=0x1100/0x440/0x1540, hwptr=0x18b6299d,
hw_base=0x18b61bc0, hw_intr=0x18b62880
hw_update: pcmC0D0p:0: pos=0x128a/0x440/0x1540, hwptr=0x18b62cc0,
hw_base=0x18b61bc0, hw_intr=0x18b62cc0
=======================================================
Below is a piece of normal log. I found there were some more hw_update
between period_update. And the "pos" was a little bit different.
======================================================
period_update: pcmC0D0p:0: pos=0xcc1/0x440/0x1540, hwptr=0x3b69a355,
hw_base=0x3b699ac0, hw_intr=0x3b69a3
40
hw_update: pcmC0D0p:0: pos=0xcc1/0x440/0x1540, hwptr=0x3b69a781,
hw_base=0x3b699ac0, hw_intr=0x3b69a780
May 14 00:00:00 172.25.18.160 last message repeated 3 times
hw_update: pcmC0D0p:0: pos=0xcca/0x440/0x1540, hwptr=0x3b69a781,
hw_base=0x3b699ac0, hw_intr=0x3b69a780
hw_update: pcmC0D0p:0: pos=0xcca/0x440/0x1540, hwptr=0x3b69a78a,
hw_base=0x3b699ac0, hw_intr=0x3b69a780
hw_update: pcmC0D0p:0: pos=0xcca/0x440/0x1540, hwptr=0x3b69a78a,
hw_base=0x3b699ac0, hw_intr=0x3b69a780
hw_update: pcmC0D0p:0: pos=0xcd2/0x440/0x1540, hwptr=0x3b69a78a,
hw_base=0x3b699ac0, hw_intr=0x3b69a780
hw_update: pcmC0D0p:0: pos=0xcd2/0x440/0x1540, hwptr=0x3b69a792,
hw_base=0x3b699ac0, hw_intr=0x3b69a780
period_update: pcmC0D0p:0: pos=0x1100/0x440/0x1540, hwptr=0x3b69a792,
hw_base=0x3b699ac0, hw_intr=0x3b69a
780
hw_update: pcmC0D0p:0: pos=0x1101/0x440/0x1540, hwptr=0x3b69abc0,
hw_base=0x3b699ac0, hw_intr=0x3b69abc0
hw_update: pcmC0D0p:0: pos=0x1101/0x440/0x1540, hwptr=0x3b69abc1,
hw_base=0x3b699ac0, hw_intr=0x3b69abc0
hw_update: pcmC0D0p:0: pos=0x1101/0x440/0x1540, hwptr=0x3b69abc1,
hw_base=0x3b699ac0, hw_intr=0x3b69abc0
hw_update: pcmC0D0p:0: pos=0x1103/0x440/0x1540, hwptr=0x3b69abc1,
hw_base=0x3b699ac0, hw_intr=0x3b69abc0
hw_update: pcmC0D0p:0: pos=0x110a/0x440/0x1540, hwptr=0x3b69abc3,
hw_base=0x3b699ac0, hw_intr=0x3b69abc0
hw_update: pcmC0D0p:0: pos=0x110a/0x440/0x1540, hwptr=0x3b69abca,
hw_base=0x3b699ac0, hw_intr=0x3b69abc0
hw_update: pcmC0D0p:0: pos=0x110d/0x440/0x1540, hwptr=0x3b69abca,
hw_base=0x3b699ac0, hw_intr=0x3b69abc0
hw_update: pcmC0D0p:0: pos=0x1112/0x440/0x1540, hwptr=0x3b69abcd,
hw_base=0x3b699ac0, hw_intr=0x3b69abc0
hw_update: pcmC0D0p:0: pos=0x1112/0x440/0x1540, hwptr=0x3b69abd2,
hw_base=0x3b699ac0, hw_intr=0x3b69abc0
period_update: pcmC0D0p:0: pos=0x1/0x440/0x1540, hwptr=0x3b69abd2,
hw_base=0x3b699ac0, hw_intr=0x3b69abc0
hw_update: pcmC0D0p:0: pos=0x1/0x440/0x1540, hwptr=0x3b69b001,
hw_base=0x3b69b000, hw_intr=0x3b69b000
May 14 00:00:00 172.25.18.160 last message repeated 2 times
hw_update: pcmC0D0p:0: pos=0x3/0x440/0x1540, hwptr=0x3b69b001,
hw_base=0x3b69b000, hw_intr=0x3b69b000
hw_update: pcmC0D0p:0: pos=0x6/0x440/0x1540, hwptr=0x3b69b003,
hw_base=0x3b69b000, hw_intr=0x3b69b000
hw_update: pcmC0D0p:0: pos=0xd/0x440/0x1540, hwptr=0x3b69b006,
hw_base=0x3b69b000, hw_intr=0x3b69b000
hw_update: pcmC0D0p:0: pos=0xd/0x440/0x1540, hwptr=0x3b69b00d,
hw_base=0x3b69b000, hw_intr=0x3b69b000
hw_update: pcmC0D0p:0: pos=0x10/0x440/0x1540, hwptr=0x3b69b00d,
hw_base=0x3b69b000, hw_intr=0x3b69b000
hw_update: pcmC0D0p:0: pos=0x15/0x440/0x1540, hwptr=0x3b69b010,
hw_base=0x3b69b000, hw_intr=0x3b69b000
hw_update: pcmC0D0p:0: pos=0x15/0x440/0x1540, hwptr=0x3b69b015,
hw_base=0x3b69b000, hw_intr=0x3b69b000
period_update: pcmC0D0p:0: pos=0x441/0x440/0x1540, hwptr=0x3b69b015,
hw_base=0x3b69b000, hw_intr=0x3b69b0
00
hw_update: pcmC0D0p:0: pos=0x441/0x440/0x1540, hwptr=0x3b69b441,
hw_base=0x3b69b000, hw_intr=0x3b69b440
May 14 00:00:00 172.25.18.160 last message repeated 2 times
hw_update: pcmC0D0p:0: pos=0x443/0x440/0x1540, hwptr=0x3b69b441,
hw_base=0x3b69b000, hw_intr=0x3b69b440
hw_update: pcmC0D0p:0: pos=0x44a/0x440/0x1540, hwptr=0x3b69b443,
hw_base=0x3b69b000, hw_intr=0x3b69b440
hw_update: pcmC0D0p:0: pos=0x44a/0x440/0x1540, hwptr=0x3b69b44a,
hw_base=0x3b69b000, hw_intr=0x3b69b440
hw_update: pcmC0D0p:0: pos=0x44d/0x440/0x1540, hwptr=0x3b69b44a,
hw_base=0x3b69b000, hw_intr=0x3b69b440
hw_update: pcmC0D0p:0: pos=0x452/0x440/0x1540, hwptr=0x3b69b44d,
hw_base=0x3b69b000, hw_intr=0x3b69b440
hw_update: pcmC0D0p:0: pos=0x452/0x440/0x1540, hwptr=0x3b69b452,
hw_base=0x3b69b000, hw_intr=0x3b69b440
period_update: pcmC0D0p:0: pos=0x880/0x440/0x1540, hwptr=0x3b69b452,
hw_base=0x3b69b000, hw_intr=0x3b69b4
40
hw_update: pcmC0D0p:0: pos=0x881/0x440/0x1540, hwptr=0x3b69b880,
hw_base=0x3b69b000, hw_intr=0x3b69b880
hw_update: pcmC0D0p:0: pos=0x881/0x440/0x1540, hwptr=0x3b69b881,
hw_base=0x3b69b000, hw_intr=0x3b69b880
May 14 00:00:00 172.25.18.160 last message repeated 2 times
hw_update: pcmC0D0p:0: pos=0x886/0x440/0x1540, hwptr=0x3b69b881,
hw_base=0x3b69b000, hw_intr=0x3b69b880
hw_update: pcmC0D0p:0: pos=0x886/0x440/0x1540, hwptr=0x3b69b886,
hw_base=0x3b69b000, hw_intr=0x3b69b880
hw_update: pcmC0D0p:0: pos=0x889/0x440/0x1540, hwptr=0x3b69b886,
hw_base=0x3b69b000, hw_intr=0x3b69b880
hw_update: pcmC0D0p:0: pos=0x88d/0x440/0x1540, hwptr=0x3b69b889,
hw_base=0x3b69b000, hw_intr=0x3b69b880
hw_update: pcmC0D0p:0: pos=0x88d/0x440/0x1540, hwptr=0x3b69b88d,
hw_base=0x3b69b000, hw_intr=0x3b69b880
hw_update: pcmC0D0p:0: pos=0x88d/0x440/0x1540, hwptr=0x3b69b88d,
hw_base=0x3b69b000, hw_intr=0x3b69b880
hw_update: pcmC0D0p:0: pos=0x892/0x440/0x1540, hwptr=0x3b69b88d,
hw_base=0x3b69b000, hw_intr=0x3b69b880
hw_update: pcmC0D0p:0: pos=0x892/0x440/0x1540, hwptr=0x3b69b892,
hw_base=0x3b69b000, hw_intr=0x3b69b880
hw_update: pcmC0D0p:0: pos=0xa0d/0x440/0x1540, hwptr=0x3b69b892,
hw_base=0x3b69b000, hw_intr=0x3b69b880
hw_update: pcmC0D0p:0: pos=0xa10/0x440/0x1540, hwptr=0x3b69ba0d,
hw_base=0x3b69b000, hw_intr=0x3b69b880
=========================================================================================
I try to get some alsa information here. Sorry I can't use
"alsa-info.sh" because my environment is a customized linux
environment.
===============================================
./Intel/pcm0p/sub0/prealloc_max:32768
./Intel/pcm0p/sub0/prealloc:64
./Intel/pcm0p/sub0/status:state: RUNNING
./Intel/pcm0p/sub0/status:trigger_time: 139.020790344
./Intel/pcm0p/sub0/status:tstamp : 273665.508245384
./Intel/pcm0p/sub0/status:delay : -654836061
./Intel/pcm0p/sub0/status:avail : 654841501
./Intel/pcm0p/sub0/status:avail_max : 654841501
./Intel/pcm0p/sub0/status:-----
./Intel/pcm0p/sub0/status:hw_ptr : 654836061
./Intel/pcm0p/sub0/status:appl_ptr : 0
./Intel/pcm0p/sub0/sw_params:tstamp_mode: ENABLE
./Intel/pcm0p/sub0/sw_params:period_step: 1
./Intel/pcm0p/sub0/sw_params:avail_min: 1088
./Intel/pcm0p/sub0/sw_params:start_threshold: 1
./Intel/pcm0p/sub0/sw_params:stop_threshold: 1426063360
./Intel/pcm0p/sub0/sw_params:silence_threshold: 0
./Intel/pcm0p/sub0/sw_params:silence_size: 1426063360
./Intel/pcm0p/sub0/sw_params:boundary: 1426063360
./Intel/pcm0p/sub0/hw_params:access: MMAP_INTERLEAVED
./Intel/pcm0p/sub0/hw_params:format: S16_LE
./Intel/pcm0p/sub0/hw_params:subformat: STD
./Intel/pcm0p/sub0/hw_params:channels: 6
./Intel/pcm0p/sub0/hw_params:rate: 44100 (44100/1)
./Intel/pcm0p/sub0/hw_params:period_size: 1088
./Intel/pcm0p/sub0/hw_params:buffer_size: 5440
./Intel/pcm0p/sub0/info:card: 0
./Intel/pcm0p/sub0/info:device: 0
./Intel/pcm0p/sub0/info:subdevice: 0
./Intel/pcm0p/sub0/info:stream: PLAYBACK
./Intel/pcm0p/sub0/info:id: ALC883 Analog
./Intel/pcm0p/sub0/info:name: ALC883 Analog
./Intel/pcm0p/sub0/info:subname: subdevice #0
./Intel/pcm0p/sub0/info:class: 0
./Intel/pcm0p/sub0/info:subclass: 0
./Intel/pcm0p/sub0/info:subdevices_count: 1
./Intel/pcm0p/sub0/info:subdevices_avail: 0
./Intel/pcm0p/xrun_debug:31
./Intel/pcm0p/info:card: 0
./Intel/pcm0p/info:device: 0
./Intel/pcm0p/info:subdevice: 0
./Intel/pcm0p/info:stream: PLAYBACK
./Intel/pcm0p/info:id: ALC883 Analog
./Intel/pcm0p/info:name: ALC883 Analog
./Intel/pcm0p/info:subname: subdevice #0
./Intel/pcm0p/info:class: 0
./Intel/pcm0p/info:subclass: 0
./Intel/pcm0p/info:subdevices_count: 1
./Intel/pcm0p/info:subdevices_avail: 0
...
./card0/id:Intel
./card0/codec#0:Codec: Realtek ALC883
./card0/codec#0:Address: 0
./card0/codec#0:Function Id: 0x1
./card0/codec#0:Vendor Id: 0x10ec0883
./card0/codec#0:Subsystem Id: 0x10ec0883
./card0/codec#0:Revision Id: 0x100002
./card0/codec#0:No Modem Function Group found
./card0/codec#0:Default PCM:
./card0/codec#0: rates [0x560]: 44100 48000 96000 192000
./card0/codec#0: bits [0xe]: 16 20 24
./card0/codec#0: formats [0x1]: PCM
./card0/codec#0:Default Amp-In caps: N/A
./card0/codec#0:Default Amp-Out caps: N/A
./card0/codec#0:GPIO: io=2, o=0, i=0, unsolicited=1, wake=0
./card0/codec#0: IO[0]: enable=0, dir=0, wake=0, sticky=0, data=0, unsol=0
./card0/codec#0: IO[1]: enable=0, dir=0, wake=0, sticky=0, data=0, unsol=0
./card0/codec#0:Node 0x02 [Audio Output] wcaps 0x11: Stereo
./card0/codec#0: Converter: stream=5, channel=0
./card0/codec#0: PCM:
./card0/codec#0: rates [0x560]: 44100 48000 96000 192000
./card0/codec#0: bits [0xe]: 16 20 24
./card0/codec#0: formats [0x1]: PCM
./card0/codec#0:Node 0x03 [Audio Output] wcaps 0x11: Stereo
./card0/codec#0: Converter: stream=5, channel=4
./card0/codec#0: PCM:
./card0/codec#0: rates [0x560]: 44100 48000 96000 192000
./card0/codec#0: bits [0xe]: 16 20 24
./card0/codec#0: formats [0x1]: PCM
./card0/codec#0:Node 0x04 [Audio Output] wcaps 0x11: Stereo
./card0/codec#0: Converter: stream=5, channel=2
./card0/codec#0: PCM:
./card0/codec#0: rates [0x560]: 44100 48000 96000 192000
./card0/codec#0: bits [0xe]: 16 20 24
./card0/codec#0: formats [0x1]: PCM
./card0/codec#0:Node 0x05 [Audio Output] wcaps 0x11: Stereo
./card0/codec#0: Converter: stream=5, channel=0
./card0/codec#0: PCM:
./card0/codec#0: rates [0x560]: 44100 48000 96000 192000
./card0/codec#0: bits [0xe]: 16 20 24
./card0/codec#0: formats [0x1]: PCM
./card0/codec#0:Node 0x06 [Audio Output] wcaps 0x211: Stereo Digital
./card0/codec#0: Converter: stream=0, channel=0
./card0/codec#0: Digital:
./card0/codec#0: Digital category: 0x0
./card0/codec#0: PCM:
./card0/codec#0: rates [0x560]: 44100 48000 96000 192000
./card0/codec#0: bits [0x1e]: 16 20 24 32
./card0/codec#0: formats [0x1]: PCM
./card0/codec#0:Node 0x07 [Vendor Defined Widget] wcaps 0xf00000: Mono
./card0/codec#0:Node 0x08 [Audio Input] wcaps 0x10011b: Stereo Amp-In
./card0/codec#0: Amp-In caps: ofs=0x08, nsteps=0x1f, stepsize=0x05, mute=1
./card0/codec#0: Amp-In vals: [0x00 0x00]
./card0/codec#0: Converter: stream=0, channel=0
./card0/codec#0: SDI-Select: 0
./card0/codec#0: PCM:
./card0/codec#0: rates [0x160]: 44100 48000 96000
./card0/codec#0: bits [0x6]: 16 20
./card0/codec#0: formats [0x1]: PCM
./card0/codec#0: Connection: 1
./card0/codec#0: 0x23
./card0/codec#0:Node 0x09 [Audio Input] wcaps 0x10011b: Stereo Amp-In
./card0/codec#0: Amp-In caps: ofs=0x08, nsteps=0x1f, stepsize=0x05, mute=1
./card0/codec#0: Amp-In vals: [0x00 0x00]
./card0/codec#0: Converter: stream=0, channel=0
./card0/codec#0: SDI-Select: 0
./card0/codec#0: PCM:
./card0/codec#0: rates [0x160]: 44100 48000 96000
./card0/codec#0: bits [0x6]: 16 20
./card0/codec#0: formats [0x1]: PCM
./card0/codec#0: Connection: 1
./card0/codec#0: 0x22
./card0/codec#0:Node 0x0a [Audio Input] wcaps 0x100391: Stereo Digital
./card0/codec#0: Converter: stream=0, channel=0
./card0/codec#0: SDI-Select: 0
./card0/codec#0: Digital:
./card0/codec#0: Digital category: 0x0
./card0/codec#0: PCM:
./card0/codec#0: rates [0x560]: 44100 48000 96000 192000
./card0/codec#0: bits [0x1e]: 16 20 24 32
./card0/codec#0: formats [0x1]: PCM
./card0/codec#0: Unsolicited: tag=00, enabled=0
./card0/codec#0: Connection: 1
./card0/codec#0: 0x1f
./card0/codec#0:Node 0x0b [Audio Mixer] wcaps 0x20010b: Stereo Amp-In
./card0/codec#0: Amp-In caps: ofs=0x17, nsteps=0x1f, stepsize=0x05, mute=1
./card0/codec#0: Amp-In vals: [0x9f 0x9f] [0x80 0x80] [0x80 0x80]
[0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80
0x80] [0x80 0x80]
./card0/codec#0: Connection: 10
./card0/codec#0: 0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x14 0x15 0x16 0x17
./card0/codec#0:Node 0x0c [Audio Mixer] wcaps 0x20010f: Stereo Amp-In Amp-Out
./card0/codec#0: Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
./card0/codec#0: Amp-In vals: [0x00 0x00] [0x00 0x00]
./card0/codec#0: Amp-Out caps: ofs=0x1f, nsteps=0x1f, stepsize=0x05, mute=0
./card0/codec#0: Amp-Out vals: [0x1f 0x1f]
./card0/codec#0: Connection: 2
./card0/codec#0: 0x02 0x0b
./card0/codec#0:Node 0x0d [Audio Mixer] wcaps 0x20010f: Stereo Amp-In Amp-Out
./card0/codec#0: Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
./card0/codec#0: Amp-In vals: [0x00 0x00] [0x00 0x00]
./card0/codec#0: Amp-Out caps: ofs=0x1f, nsteps=0x1f, stepsize=0x05, mute=0
./card0/codec#0: Amp-Out vals: [0x1f 0x1f]
./card0/codec#0: Connection: 2
./card0/codec#0: 0x03 0x0b
./card0/codec#0:Node 0x0e [Audio Mixer] wcaps 0x20010f: Stereo Amp-In Amp-Out
./card0/codec#0: Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
./card0/codec#0: Amp-In vals: [0x00 0x00] [0x00 0x00]
./card0/codec#0: Amp-Out caps: ofs=0x1f, nsteps=0x1f, stepsize=0x05, mute=0
./card0/codec#0: Amp-Out vals: [0x1f 0x1f]
./card0/codec#0: Connection: 2
./card0/codec#0: 0x04 0x0b
./card0/codec#0:Node 0x0f [Audio Mixer] wcaps 0x20010f: Stereo Amp-In Amp-Out
./card0/codec#0: Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
./card0/codec#0: Amp-In vals: [0x00 0x00] [0x00 0x00]
./card0/codec#0: Amp-Out caps: ofs=0x1f, nsteps=0x1f, stepsize=0x05, mute=0
./card0/codec#0: Amp-Out vals: [0x00 0x00]
./card0/codec#0: Connection: 2
./card0/codec#0: 0x05 0x0b
./card0/codec#0:Node 0x10 [Vendor Defined Widget] wcaps 0xf00000: Mono
./card0/codec#0:Node 0x11 [Vendor Defined Widget] wcaps 0xf00000: Mono
./card0/codec#0:Node 0x12 [Vendor Defined Widget] wcaps 0xf00000: Mono
./card0/codec#0:Node 0x13 [Vendor Defined Widget] wcaps 0xf00000: Mono
./card0/codec#0:Node 0x14 [Pin Complex] wcaps 0x40018f: Stereo Amp-In Amp-Out
./card0/codec#0: Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
./card0/codec#0: Amp-In vals: [0x00 0x00]
./card0/codec#0: Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
./card0/codec#0: Amp-Out vals: [0x00 0x00]
./card0/codec#0: Pincap 0x0000003e: IN OUT HP Detect Trigger
./card0/codec#0: Pin Default 0x01014030: [Jack] Line Out at Ext Rear
./card0/codec#0: Conn = 1/8, Color = Green
./card0/codec#0: DefAssociation = 0x3, Sequence = 0x0
./card0/codec#0: Pin-ctls: 0x40: OUT
./card0/codec#0: Unsolicited: tag=00, enabled=0
./card0/codec#0: Connection: 5
./card0/codec#0: 0x0c* 0x0d 0x0e 0x0f 0x26
./card0/codec#0:Node 0x15 [Pin Complex] wcaps 0x40018f: Stereo Amp-In Amp-Out
./card0/codec#0: Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
./card0/codec#0: Amp-In vals: [0x00 0x00]
./card0/codec#0: Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
./card0/codec#0: Amp-Out vals: [0x00 0x00]
./card0/codec#0: Pincap 0x0000003e: IN OUT HP Detect Trigger
./card0/codec#0: Pin Default 0x01011031: [Jack] Line Out at Ext Rear
./card0/codec#0: Conn = 1/8, Color = Black
./card0/codec#0: DefAssociation = 0x3, Sequence = 0x1
./card0/codec#0: Pin-ctls: 0x40: OUT
./card0/codec#0: Unsolicited: tag=00, enabled=0
./card0/codec#0: Connection: 5
./card0/codec#0: 0x0c 0x0d* 0x0e 0x0f 0x26
./card0/codec#0:Node 0x16 [Pin Complex] wcaps 0x40018f: Stereo Amp-In Amp-Out
./card0/codec#0: Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
./card0/codec#0: Amp-In vals: [0x00 0x00]
./card0/codec#0: Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
./card0/codec#0: Amp-Out vals: [0x00 0x00]
./card0/codec#0: Pincap 0x0000003e: IN OUT HP Detect Trigger
./card0/codec#0: Pin Default 0x01016032: [Jack] Line Out at Ext Rear
./card0/codec#0: Conn = 1/8, Color = Orange
./card0/codec#0: DefAssociation = 0x3, Sequence = 0x2
./card0/codec#0: Pin-ctls: 0x40: OUT
./card0/codec#0: Unsolicited: tag=00, enabled=0
./card0/codec#0: Connection: 5
./card0/codec#0: 0x0c 0x0d 0x0e* 0x0f 0x26
./card0/codec#0:Node 0x17 [Pin Complex] wcaps 0x40018f: Stereo Amp-In Amp-Out
./card0/codec#0: Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
./card0/codec#0: Amp-In vals: [0x00 0x00]
./card0/codec#0: Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
./card0/codec#0: Amp-Out vals: [0x00 0x00]
./card0/codec#0: Pincap 0x0000003e: IN OUT HP Detect Trigger
./card0/codec#0: Pin Default 0x01012033: [Jack] Line Out at Ext Rear
./card0/codec#0: Conn = 1/8, Color = Grey
./card0/codec#0: DefAssociation = 0x3, Sequence = 0x3
./card0/codec#0: Pin-ctls: 0x40: OUT
./card0/codec#0: Unsolicited: tag=00, enabled=0
./card0/codec#0: Connection: 5
./card0/codec#0: 0x0c 0x0d 0x0e 0x0f* 0x26
./card0/codec#0:Node 0x18 [Pin Complex] wcaps 0x40018f: Stereo Amp-In Amp-Out
./card0/codec#0: Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
./card0/codec#0: Amp-In vals: [0x00 0x00]
./card0/codec#0: Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
./card0/codec#0: Amp-Out vals: [0x80 0x80]
./card0/codec#0: Pincap 0x0000173e: IN OUT HP Detect Trigger
./card0/codec#0: Vref caps: HIZ 50 GRD 80
./card0/codec#0: Pin Default 0x01a19850: [Jack] Mic at Ext Rear
./card0/codec#0: Conn = 1/8, Color = Pink
./card0/codec#0: DefAssociation = 0x5, Sequence = 0x0
./card0/codec#0: Pin-ctls: 0x24: IN VREF_80
./card0/codec#0: Unsolicited: tag=00, enabled=0
./card0/codec#0: Connection: 5
./card0/codec#0: 0x0c* 0x0d 0x0e 0x0f 0x26
./card0/codec#0:Node 0x19 [Pin Complex] wcaps 0x40018f: Stereo Amp-In Amp-Out
./card0/codec#0: Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
./card0/codec#0: Amp-In vals: [0x00 0x00]
./card0/codec#0: Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
./card0/codec#0: Amp-Out vals: [0x80 0x80]
./card0/codec#0: Pincap 0x0000173e: IN OUT HP Detect Trigger
./card0/codec#0: Vref caps: HIZ 50 GRD 80
./card0/codec#0: Pin Default 0x02a19c80: [Jack] Mic at Ext Front
./card0/codec#0: Conn = 1/8, Color = Pink
./card0/codec#0: DefAssociation = 0x8, Sequence = 0x0
./card0/codec#0: Pin-ctls: 0x24: IN VREF_80
./card0/codec#0: Unsolicited: tag=00, enabled=0
./card0/codec#0: Connection: 5
./card0/codec#0: 0x0c* 0x0d 0x0e 0x0f 0x26
./card0/codec#0:Node 0x1a [Pin Complex] wcaps 0x40018f: Stereo Amp-In Amp-Out
./card0/codec#0: Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
./card0/codec#0: Amp-In vals: [0x00 0x00]
./card0/codec#0: Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
./card0/codec#0: Amp-Out vals: [0x80 0x80]
./card0/codec#0: Pincap 0x0000173e: IN OUT HP Detect Trigger
./card0/codec#0: Vref caps: HIZ 50 GRD 80
./card0/codec#0: Pin Default 0x01813050: [Jack] Line In at Ext Rear
./card0/codec#0: Conn = 1/8, Color = Blue
./card0/codec#0: DefAssociation = 0x5, Sequence = 0x0
./card0/codec#0: Pin-ctls: 0x20: IN VREF_HIZ
./card0/codec#0: Unsolicited: tag=00, enabled=0
./card0/codec#0: Connection: 5
./card0/codec#0: 0x0c* 0x0d 0x0e 0x0f 0x26
./card0/codec#0:Node 0x1b [Pin Complex] wcaps 0x40018f: Stereo Amp-In Amp-Out
./card0/codec#0: Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
./card0/codec#0: Amp-In vals: [0x00 0x00]
./card0/codec#0: Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
./card0/codec#0: Amp-Out vals: [0x00 0x00]
./card0/codec#0: Pincap 0x0000173e: IN OUT HP Detect Trigger
./card0/codec#0: Vref caps: HIZ 50 GRD 80
./card0/codec#0: Pin Default 0x02214c40: [Jack] HP Out at Ext Front
./card0/codec#0: Conn = 1/8, Color = Green
./card0/codec#0: DefAssociation = 0x4, Sequence = 0x0
./card0/codec#0: Pin-ctls: 0xc0: OUT HP VREF_HIZ
./card0/codec#0: Unsolicited: tag=00, enabled=0
./card0/codec#0: Connection: 5
./card0/codec#0: 0x0c* 0x0d 0x0e 0x0f 0x26
./card0/codec#0:Node 0x1c [Pin Complex] wcaps 0x400001: Stereo
./card0/codec#0: Pincap 0x00000020: IN
./card0/codec#0: Pin Default 0x99331150: [Fixed] CD at Int ATAPI
./card0/codec#0: Conn = ATAPI, Color = Black
./card0/codec#0: DefAssociation = 0x5, Sequence = 0x0
./card0/codec#0: Misc = NO_PRESENCE
./card0/codec#0: Pin-ctls: 0x00:
./card0/codec#0:Node 0x1d [Pin Complex] wcaps 0x400000: Mono
./card0/codec#0: Pincap 0x00000020: IN
./card0/codec#0: Pin Default 0x00000100: [Jack] Line Out at Ext N/A
./card0/codec#0: Conn = Unknown, Color = Unknown
./card0/codec#0: DefAssociation = 0x0, Sequence = 0x0
./card0/codec#0: Misc = NO_PRESENCE
./card0/codec#0: Pin-ctls: 0x00:
./card0/codec#0:Node 0x1e [Pin Complex] wcaps 0x400300: Mono Digital
./card0/codec#0: Pincap 0x00000010: OUT
./card0/codec#0: Pin Default 0x01441170: [Jack] SPDIF Out at Ext Rear
./card0/codec#0: Conn = RCA, Color = Black
./card0/codec#0: DefAssociation = 0x7, Sequence = 0x0
./card0/codec#0: Misc = NO_PRESENCE
./card0/codec#0: Pin-ctls: 0x00:
./card0/codec#0: Connection: 1
./card0/codec#0: 0x06
./card0/codec#0:Node 0x1f [Pin Complex] wcaps 0x400200: Mono Digital
./card0/codec#0: Pincap 0x00000020: IN
./card0/codec#0: Pin Default 0x01c46160: [Jack] SPDIF In at Ext Rear
./card0/codec#0: Conn = RCA, Color = Orange
./card0/codec#0: DefAssociation = 0x6, Sequence = 0x0
./card0/codec#0: Misc = NO_PRESENCE
./card0/codec#0: Pin-ctls: 0x00:
./card0/codec#0:Node 0x20 [Vendor Defined Widget] wcaps 0xf00040: Mono
./card0/codec#0: Processing caps: benign=0, ncoeff=17
./card0/codec#0: Processing Coefficient: 0xcccc
./card0/codec#0: Coefficient Index: 0x10
./card0/codec#0:Node 0x21 [Vendor Defined Widget] wcaps 0xf00000: Mono
./card0/codec#0:Node 0x22 [Audio Mixer] wcaps 0x20010f: Stereo Amp-In Amp-Out
./card0/codec#0: Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
./card0/codec#0: Amp-In vals: [0x00 0x00] [0x80 0x80] [0x80 0x80]
[0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80
0x80] [0x80 0x80] [0x80 0x80]
./card0/codec#0: Amp-Out caps: N/A
./card0/codec#0: Amp-Out vals: [0x00 0x00]
./card0/codec#0: Connection: 11
./card0/codec#0: 0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x14 0x15 0x16 0x17 0x0b
./card0/codec#0:Node 0x23 [Audio Mixer] wcaps 0x20010f: Stereo Amp-In Amp-Out
./card0/codec#0: Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
./card0/codec#0: Amp-In vals: [0x00 0x00] [0x80 0x80] [0x80 0x80]
[0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80
0x80] [0x80 0x80] [0x80 0x80]
./card0/codec#0: Amp-Out caps: N/A
./card0/codec#0: Amp-Out vals: [0x00 0x00]
./card0/codec#0: Connection: 11
./card0/codec#0: 0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x14 0x15 0x16 0x17 0x0b
./card0/codec#0:Node 0x24 [Vendor Defined Widget] wcaps 0xf00000: Mono
./card0/codec#0:Node 0x25 [Audio Output] wcaps 0x11: Stereo
./card0/codec#0: Converter: stream=0, channel=0
./card0/codec#0: PCM:
./card0/codec#0: rates [0x560]: 44100 48000 96000 192000
./card0/codec#0: bits [0xe]: 16 20 24
./card0/codec#0: formats [0x1]: PCM
./card0/codec#0:Node 0x26 [Audio Mixer] wcaps 0x20010f: Stereo Amp-In Amp-Out
./card0/codec#0: Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
./card0/codec#0: Amp-In vals: [0x00 0x00] [0x00 0x00]
./card0/codec#0: Amp-Out caps: ofs=0x1f, nsteps=0x1f, stepsize=0x05, mute=0
./card0/codec#0: Amp-Out vals: [0x00 0x00]
./card0/codec#0: Connection: 2
./card0/codec#0: 0x25 0x0b
===============================================
Thanks,
Fred
1
0
In preparation for irq_domain support change the code to the not switch
based on the irq number. This actually makes things simpler, if slightly
repetitive.
Signed-off-by: Mark Brown <broonie(a)opensource.wolfsonmicro.com>
---
sound/soc/codecs/wm8350.c | 46 ++++++++++++++++++++++++++-------------------
1 file changed, 27 insertions(+), 19 deletions(-)
diff --git a/sound/soc/codecs/wm8350.c b/sound/soc/codecs/wm8350.c
index 8006149..8cee548 100644
--- a/sound/soc/codecs/wm8350.c
+++ b/sound/soc/codecs/wm8350.c
@@ -1291,35 +1291,36 @@ static void wm8350_hpr_work(struct work_struct *work)
wm8350_hp_work(priv, &priv->hpr, WM8350_JACK_R_LVL);
}
-static irqreturn_t wm8350_hp_jack_handler(int irq, void *data)
+static irqreturn_t wm8350_hpl_jack_handler(int irq, void *data)
{
struct wm8350_data *priv = data;
struct wm8350 *wm8350 = priv->wm8350;
- struct wm8350_jack_data *jack = NULL;
- switch (irq - wm8350->irq_base) {
- case WM8350_IRQ_CODEC_JCK_DET_L:
#ifndef CONFIG_SND_SOC_WM8350_MODULE
- trace_snd_soc_jack_irq("WM8350 HPL");
+ trace_snd_soc_jack_irq("WM8350 HPL");
#endif
- jack = &priv->hpl;
- break;
- case WM8350_IRQ_CODEC_JCK_DET_R:
+ if (device_may_wakeup(wm8350->dev))
+ pm_wakeup_event(wm8350->dev, 250);
+
+ schedule_delayed_work(&priv->hpl.work, 200);
+
+ return IRQ_HANDLED;
+}
+
+static irqreturn_t wm8350_hpr_jack_handler(int irq, void *data)
+{
+ struct wm8350_data *priv = data;
+ struct wm8350 *wm8350 = priv->wm8350;
+
#ifndef CONFIG_SND_SOC_WM8350_MODULE
- trace_snd_soc_jack_irq("WM8350 HPR");
+ trace_snd_soc_jack_irq("WM8350 HPR");
#endif
- jack = &priv->hpr;
- break;
-
- default:
- BUG();
- }
if (device_may_wakeup(wm8350->dev))
pm_wakeup_event(wm8350->dev, 250);
- schedule_delayed_work(&jack->work, 200);
+ schedule_delayed_work(&priv->hpr.work, 200);
return IRQ_HANDLED;
}
@@ -1370,7 +1371,14 @@ int wm8350_hp_jack_detect(struct snd_soc_codec *codec, enum wm8350_jack which,
}
/* Sync status */
- wm8350_hp_jack_handler(irq + wm8350->irq_base, priv);
+ switch (which) {
+ case WM8350_JDL:
+ wm8350_hpl_jack_handler(0, priv);
+ break;
+ case WM8350_JDR:
+ wm8350_hpr_jack_handler(0, priv);
+ break;
+ }
return 0;
}
@@ -1554,10 +1562,10 @@ static int wm8350_codec_probe(struct snd_soc_codec *codec)
WM8350_JDL_ENA | WM8350_JDR_ENA);
wm8350_register_irq(wm8350, WM8350_IRQ_CODEC_JCK_DET_L,
- wm8350_hp_jack_handler, 0, "Left jack detect",
+ wm8350_hpl_jack_handler, 0, "Left jack detect",
priv);
wm8350_register_irq(wm8350, WM8350_IRQ_CODEC_JCK_DET_R,
- wm8350_hp_jack_handler, 0, "Right jack detect",
+ wm8350_hpr_jack_handler, 0, "Right jack detect",
priv);
wm8350_register_irq(wm8350, WM8350_IRQ_CODEC_MICSCD,
wm8350_mic_handler, 0, "Microphone short", priv);
--
1.7.10
1
0

[alsa-devel] [PATCH] ASoC: max98095: Single bit bitfields should be unsigned
by Mark Brown 14 May '12
by Mark Brown 14 May '12
14 May '12
There's no space for the sign bit.
Signed-off-by: Mark Brown <broonie(a)opensource.wolfsonmicro.com>
---
include/sound/max98095.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/sound/max98095.h b/include/sound/max98095.h
index 65b1c90..e87ae67 100644
--- a/include/sound/max98095.h
+++ b/include/sound/max98095.h
@@ -55,7 +55,7 @@ struct max98095_pdata {
* 0 = PIN5 not supported
* 1 = PIN5 supported
*/
- int jack_detect_pin5en:1;
+ unsigned int jack_detect_pin5en:1;
/* Slew amount for jack detection. Calculated as 4 * (delay + 1).
* Default delay is 24 to get a time of 100ms.
--
1.7.10
1
0

[alsa-devel] [PATCH] ASoC: lm49453: Staticise non-exported symbol lm45453_dai
by Mark Brown 14 May '12
by Mark Brown 14 May '12
14 May '12
Signed-off-by: Mark Brown <broonie(a)opensource.wolfsonmicro.com>
---
sound/soc/codecs/lm49453.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sound/soc/codecs/lm49453.c b/sound/soc/codecs/lm49453.c
index 5eb726b..02a8179 100644
--- a/sound/soc/codecs/lm49453.c
+++ b/sound/soc/codecs/lm49453.c
@@ -1358,7 +1358,7 @@ static struct snd_soc_dai_ops lm49453_lineout_dai_ops = {
};
/* LM49453 dai structure. */
-struct snd_soc_dai_driver lm49453_dai[] = {
+static const struct snd_soc_dai_driver lm49453_dai[] = {
{
.name = "LM49453 Headset",
.playback = {
--
1.7.10
1
0

13 May '12
Hello,
I've recently been working with the wine sound subsystem and there is
an increasing issue where PA prevents access to the hardware. Now PA
already has a 'time out' to relinquish the hardware and this only serves
to confuse users as it's no-longer clear why "it" would work some times
but not others.
Wine currently has a number of bugs with it's implementation of the
ALSA API and it's not likely that these will be worked on or even if the
work is done that it'll make it to become part of wine. In short it
looks like the wine project has completely given up on supporting sound.
Even so, I've requested that wine's alsa output module issue the
correct paususpend signals prior to accessing ALSA hardware. However
it's non-trivial for an application to detect "If this ALSA driver
connects to PA?" A way to query the 'features' needed by a specific
device string would be handy, keeping in mind that a device in ALSA can
be configured to pass through plugs, routes, and what not and still
eventually end up with the pulse plugin.
Keeping on top of the entire issue, I believe that perhaps ALSA
plugins can also trigger paususpend. I guess there biggest issue is not
to paususpend if being called as part of PulseAudio. I believe that
this would be an important feature for every ALSA application, allowing
better integration with a vary popular Desktop sound server.
As I said, any plugin that attaches to direct hardware should attempt
discovery of needing to issue a paususpend. Perhaps an option can be
added that the PA server should set to disable paususpend.
Thank you.
1
0
Use the devm_ versions of the regmap and memory allocation functions,
saving some error handling code.
Signed-off-by: Mark Brown <broonie(a)opensource.wolfsonmicro.com>
---
sound/soc/codecs/wm8731.c | 37 ++++++++++---------------------------
1 file changed, 10 insertions(+), 27 deletions(-)
diff --git a/sound/soc/codecs/wm8731.c b/sound/soc/codecs/wm8731.c
index a32caa7..9d1b9b02 100644
--- a/sound/soc/codecs/wm8731.c
+++ b/sound/soc/codecs/wm8731.c
@@ -635,16 +635,17 @@ static int __devinit wm8731_spi_probe(struct spi_device *spi)
struct wm8731_priv *wm8731;
int ret;
- wm8731 = kzalloc(sizeof(struct wm8731_priv), GFP_KERNEL);
+ wm8731 = devm_kzalloc(&spi->dev, sizeof(struct wm8731_priv),
+ GFP_KERNEL);
if (wm8731 == NULL)
return -ENOMEM;
- wm8731->regmap = regmap_init_spi(spi, &wm8731_regmap);
+ wm8731->regmap = devm_regmap_init_spi(spi, &wm8731_regmap);
if (IS_ERR(wm8731->regmap)) {
ret = PTR_ERR(wm8731->regmap);
dev_err(&spi->dev, "Failed to allocate register map: %d\n",
ret);
- goto err;
+ return ret;
}
spi_set_drvdata(spi, wm8731);
@@ -653,25 +654,15 @@ static int __devinit wm8731_spi_probe(struct spi_device *spi)
&soc_codec_dev_wm8731, &wm8731_dai, 1);
if (ret != 0) {
dev_err(&spi->dev, "Failed to register CODEC: %d\n", ret);
- goto err_regmap;
+ return ret;
}
return 0;
-
-err_regmap:
- regmap_exit(wm8731->regmap);
-err:
- kfree(wm8731);
- return ret;
}
static int __devexit wm8731_spi_remove(struct spi_device *spi)
{
- struct wm8731_priv *wm8731 = spi_get_drvdata(spi);
-
snd_soc_unregister_codec(&spi->dev);
- regmap_exit(wm8731->regmap);
- kfree(wm8731);
return 0;
}
@@ -693,16 +684,17 @@ static __devinit int wm8731_i2c_probe(struct i2c_client *i2c,
struct wm8731_priv *wm8731;
int ret;
- wm8731 = kzalloc(sizeof(struct wm8731_priv), GFP_KERNEL);
+ wm8731 = devm_kzalloc(&i2c->dev, sizeof(struct wm8731_priv),
+ GFP_KERNEL);
if (wm8731 == NULL)
return -ENOMEM;
- wm8731->regmap = regmap_init_i2c(i2c, &wm8731_regmap);
+ wm8731->regmap = devm_regmap_init_i2c(i2c, &wm8731_regmap);
if (IS_ERR(wm8731->regmap)) {
ret = PTR_ERR(wm8731->regmap);
dev_err(&i2c->dev, "Failed to allocate register map: %d\n",
ret);
- goto err;
+ return ret;
}
i2c_set_clientdata(i2c, wm8731);
@@ -711,24 +703,15 @@ static __devinit int wm8731_i2c_probe(struct i2c_client *i2c,
&soc_codec_dev_wm8731, &wm8731_dai, 1);
if (ret != 0) {
dev_err(&i2c->dev, "Failed to register CODEC: %d\n", ret);
- goto err_regmap;
+ return ret;
}
return 0;
-
-err_regmap:
- regmap_exit(wm8731->regmap);
-err:
- kfree(wm8731);
- return ret;
}
static __devexit int wm8731_i2c_remove(struct i2c_client *client)
{
- struct wm8731_priv *wm8731 = i2c_get_clientdata(client);
snd_soc_unregister_codec(&client->dev);
- regmap_exit(wm8731->regmap);
- kfree(wm8731);
return 0;
}
--
1.7.10
1
0

[alsa-devel] [PATCH] ASoC: littlemill: Use a widget to keep track of AIF2 clocking
by Mark Brown 12 May '12
by Mark Brown 12 May '12
12 May '12
Since we only need to clock AIF2 when it's actively in use start up the
FLL for it using a supply widget which supplies AIF2CLK. This both makes
the sequencing more robust and ensures we minimise power consumption.
Signed-off-by: Mark Brown <broonie(a)opensource.wolfsonmicro.com>
---
sound/soc/samsung/littlemill.c | 86 +++++++++++++++++++++++++---------------
1 file changed, 53 insertions(+), 33 deletions(-)
diff --git a/sound/soc/samsung/littlemill.c b/sound/soc/samsung/littlemill.c
index fd5ac47..c82c646 100644
--- a/sound/soc/samsung/littlemill.c
+++ b/sound/soc/samsung/littlemill.c
@@ -67,7 +67,6 @@ static int littlemill_set_bias_level_post(struct snd_soc_card *card,
enum snd_soc_bias_level level)
{
struct snd_soc_dai *aif1_dai = card->rtd[0].codec_dai;
- struct snd_soc_dai *aif2_dai = card->rtd[1].cpu_dai;
int ret;
if (dapm->dev != aif1_dai->dev)
@@ -75,20 +74,6 @@ static int littlemill_set_bias_level_post(struct snd_soc_card *card,
switch (level) {
case SND_SOC_BIAS_STANDBY:
- ret = snd_soc_dai_set_sysclk(aif2_dai, WM8994_SYSCLK_MCLK2,
- 32768, SND_SOC_CLOCK_IN);
- if (ret < 0) {
- pr_err("Failed to switch away from FLL2: %d\n", ret);
- return ret;
- }
-
- ret = snd_soc_dai_set_pll(aif2_dai, WM8994_FLL2,
- 0, 0, 0);
- if (ret < 0) {
- pr_err("Failed to stop FLL2: %d\n", ret);
- return ret;
- }
-
ret = snd_soc_dai_set_sysclk(aif1_dai, WM8994_SYSCLK_MCLK2,
32768, SND_SOC_CLOCK_IN);
if (ret < 0) {
@@ -104,24 +89,6 @@ static int littlemill_set_bias_level_post(struct snd_soc_card *card,
}
break;
- case SND_SOC_BIAS_PREPARE:
- ret = snd_soc_dai_set_pll(aif2_dai, WM8994_FLL2,
- WM8994_FLL_SRC_BCLK, 64 * 8000,
- 8000 * 256);
- if (ret < 0) {
- pr_err("Failed to start FLL: %d\n", ret);
- return ret;
- }
-
- ret = snd_soc_dai_set_sysclk(aif2_dai, WM8994_SYSCLK_FLL2,
- 8000 * 256,
- SND_SOC_CLOCK_IN);
- if (ret < 0) {
- pr_err("Failed to set SYSCLK: %d\n", ret);
- return ret;
- }
- break;
-
default:
break;
}
@@ -197,11 +164,62 @@ static struct snd_soc_dai_link littlemill_dai[] = {
},
};
+static int bbclk_ev(struct snd_soc_dapm_widget *w,
+ struct snd_kcontrol *kcontrol, int event)
+{
+ struct snd_soc_card *card = w->dapm->card;
+ struct snd_soc_dai *aif2_dai = card->rtd[1].cpu_dai;
+ int ret;
+
+ switch (event) {
+ case SND_SOC_DAPM_PRE_PMU:
+ ret = snd_soc_dai_set_pll(aif2_dai, WM8994_FLL2,
+ WM8994_FLL_SRC_BCLK, 64 * 8000,
+ 8000 * 256);
+ if (ret < 0) {
+ pr_err("Failed to start FLL: %d\n", ret);
+ return ret;
+ }
+
+ ret = snd_soc_dai_set_sysclk(aif2_dai, WM8994_SYSCLK_FLL2,
+ 8000 * 256,
+ SND_SOC_CLOCK_IN);
+ if (ret < 0) {
+ pr_err("Failed to set SYSCLK: %d\n", ret);
+ return ret;
+ }
+ break;
+ case SND_SOC_DAPM_POST_PMD:
+ ret = snd_soc_dai_set_sysclk(aif2_dai, WM8994_SYSCLK_MCLK2,
+ 32768, SND_SOC_CLOCK_IN);
+ if (ret < 0) {
+ pr_err("Failed to switch away from FLL2: %d\n", ret);
+ return ret;
+ }
+
+ ret = snd_soc_dai_set_pll(aif2_dai, WM8994_FLL2,
+ 0, 0, 0);
+ if (ret < 0) {
+ pr_err("Failed to stop FLL2: %d\n", ret);
+ return ret;
+ }
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
static struct snd_soc_dapm_widget widgets[] = {
SND_SOC_DAPM_HP("Headphone", NULL),
SND_SOC_DAPM_MIC("AMIC", NULL),
SND_SOC_DAPM_MIC("DMIC", NULL),
+
+ SND_SOC_DAPM_SUPPLY_S("Baseband Clock", -1, SND_SOC_NOPM, 0, 0,
+ bbclk_ev,
+ SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
};
static struct snd_soc_dapm_route audio_paths[] = {
@@ -214,6 +232,8 @@ static struct snd_soc_dapm_route audio_paths[] = {
{ "DMIC", NULL, "MICBIAS2" }, /* Default for DMICBIAS jumper */
{ "DMIC1DAT", NULL, "DMIC" },
{ "DMIC2DAT", NULL, "DMIC" },
+
+ { "AIF2CLK", NULL, "Baseband Clock" },
};
static struct snd_soc_jack littlemill_headset;
--
1.7.10
1
0

12 May '12
Device tree support for OMAP4+ dmic cpu dai driver.
Signed-off-by: Peter Ujfalusi <peter.ujfalusi(a)ti.com>
---
.../devicetree/bindings/sound/omap-dmic.txt | 17 +++++++++++++++++
sound/soc/omap/omap-dmic.c | 8 ++++++++
2 files changed, 25 insertions(+), 0 deletions(-)
create mode 100644 Documentation/devicetree/bindings/sound/omap-dmic.txt
diff --git a/Documentation/devicetree/bindings/sound/omap-dmic.txt b/Documentation/devicetree/bindings/sound/omap-dmic.txt
new file mode 100644
index 0000000..1d79e3f
--- /dev/null
+++ b/Documentation/devicetree/bindings/sound/omap-dmic.txt
@@ -0,0 +1,17 @@
+* Texas Instruments OMAP4+ Digital Microphone Module
+
+Required properties:
+- compatible: "ti,omap4-dmic"
+- ti,hwmods: Name of the hwmod associated with OMAP dmic IP
+
+Example:
+
+dmic: dmic@4012e000 {
+ compatible = "ti,omap4-dmic";
+ ti,hwmods = "dmic";
+};
+
+sound { /* ASoC machine dirver */
+ ...
+ dai-link,dai = <&dmic>;
+};
diff --git a/sound/soc/omap/omap-dmic.c b/sound/soc/omap/omap-dmic.c
index 4dcb5a7..75f5dca 100644
--- a/sound/soc/omap/omap-dmic.c
+++ b/sound/soc/omap/omap-dmic.c
@@ -32,6 +32,7 @@
#include <linux/io.h>
#include <linux/slab.h>
#include <linux/pm_runtime.h>
+#include <linux/of_device.h>
#include <plat/dma.h>
#include <sound/core.h>
@@ -528,10 +529,17 @@ static int __devexit asoc_dmic_remove(struct platform_device *pdev)
return 0;
}
+static const struct of_device_id omap_dmic_of_match[] = {
+ { .compatible = "ti,omap4-dmic", },
+ { }
+};
+MODULE_DEVICE_TABLE(of, omap_dmic_of_match);
+
static struct platform_driver asoc_dmic_driver = {
.driver = {
.name = "omap-dmic",
.owner = THIS_MODULE,
+ .of_match_table = omap_dmic_of_match,
},
.probe = asoc_dmic_probe,
.remove = __devexit_p(asoc_dmic_remove),
--
1.7.8.6
2
1

12 May '12
Device tree support for OMAP4+ McPDM cpu dai driver.
Signed-off-by: Peter Ujfalusi <peter.ujfalusi(a)ti.com>
---
.../devicetree/bindings/sound/omap-mcpdm.txt | 17 +++++++++++++++++
sound/soc/omap/omap-mcpdm.c | 8 ++++++++
2 files changed, 25 insertions(+), 0 deletions(-)
create mode 100644 Documentation/devicetree/bindings/sound/omap-mcpdm.txt
diff --git a/Documentation/devicetree/bindings/sound/omap-mcpdm.txt b/Documentation/devicetree/bindings/sound/omap-mcpdm.txt
new file mode 100644
index 0000000..58b0e31
--- /dev/null
+++ b/Documentation/devicetree/bindings/sound/omap-mcpdm.txt
@@ -0,0 +1,17 @@
+* Texas Instruments OMAP4+ McPDM
+
+Required properties:
+- compatible: "ti,omap4-mcpdm"
+- ti,hwmods: Name of the hwmod associated to the McPDM
+
+Example:
+
+mcpdm: mcpdm@40132000 {
+ compatible = "ti,omap4-mcpdm";
+ ti,hwmods = "mcpdm";
+};
+
+sound { /* ASoC machine dirver */
+ ...
+ dai-link,dai = <&mcpdm>;
+};
diff --git a/sound/soc/omap/omap-mcpdm.c b/sound/soc/omap/omap-mcpdm.c
index 3970556..59d47ab 100644
--- a/sound/soc/omap/omap-mcpdm.c
+++ b/sound/soc/omap/omap-mcpdm.c
@@ -33,6 +33,7 @@
#include <linux/irq.h>
#include <linux/slab.h>
#include <linux/pm_runtime.h>
+#include <linux/of_device.h>
#include <sound/core.h>
#include <sound/pcm.h>
@@ -507,10 +508,17 @@ static int __devexit asoc_mcpdm_remove(struct platform_device *pdev)
return 0;
}
+static const struct of_device_id omap_mcpdm_of_match[] = {
+ { .compatible = "ti,omap4-mcpdm", },
+ { }
+};
+MODULE_DEVICE_TABLE(of, omap_mcpdm_of_match);
+
static struct platform_driver asoc_mcpdm_driver = {
.driver = {
.name = "omap-mcpdm",
.owner = THIS_MODULE,
+ .of_match_table = omap_mcpdm_of_match,
},
.probe = asoc_mcpdm_probe,
--
1.7.8.6
2
1

12 May '12
Changes since v1:
* Rebased on sound/for-3.5, and consequently the patch of devm_clk_get
is dropped.
* Fixed the issues caught by Dong (Thanks to Dong).
Shawn Guo (3):
ASoC: mxs: mxs-pcm does not need to be a plaform_driver
ASoC: mxs: add device tree support for mxs-saif
ASoC: mxs: add device tree support for mxs-sgtl5000
.../bindings/sound/mxs-audio-sgtl5000.txt | 17 ++++
.../devicetree/bindings/sound/mxs-saif.txt | 36 ++++++++
sound/soc/mxs/mxs-pcm.c | 24 ++----
sound/soc/mxs/mxs-pcm.h | 3 +
sound/soc/mxs/mxs-saif.c | 90 +++++++++++++-------
sound/soc/mxs/mxs-saif.h | 1 -
sound/soc/mxs/mxs-sgtl5000.c | 50 +++++++++++-
7 files changed, 168 insertions(+), 53 deletions(-)
2
4
Please find attached a patch to update the CA0132 HDA ALSA codec.
We would appreciate any feedback or comments.
Thanks very much,
Ian
---
ALSA: Update Creative CA0132 HDA codec to introduce DSP features.
patch_ca0132.c:
* Add DSP support to codec.
* 3 capture subdevices supported: Analog Mic1/Digital Mic,
Analog Mic2 and What U Hear.
Makefile:
* Move CA0132 to subdirectory to collect source files together.
hda_intel.c:
* Add CTHDA chip support
* in azx_pcm_trigger(), change spin_lock()/spin_unlock() pair to
spin_lock_irqsave()/spin_unlock_irqrestore(). Reason is that
if interrupt occurs after azx_stream_start() and before spin_unlock(),
it will cause deadlock as azx_interrupt() also acquires chip->reg_lock.
hda_codec.c:
* in snd_hda_calc_stream_format(), change max channels to 16 to
facilitate DSP download.
Developed and maintained by Creative Labs, Inc.
Signed-off-by: Ian Minett <ian_minett(a)creativelabs.com>
diff --git a/sound/pci/hda/Makefile b/sound/pci/hda/Makefile
index ace157c..ed91188 100644
--- a/sound/pci/hda/Makefile
+++ b/sound/pci/hda/Makefile
@@ -16,7 +16,6 @@ snd-hda-codec-idt-objs := patch_sigmatel.o
snd-hda-codec-si3054-objs := patch_si3054.o
snd-hda-codec-cirrus-objs := patch_cirrus.o
snd-hda-codec-ca0110-objs := patch_ca0110.o
-snd-hda-codec-ca0132-objs := patch_ca0132.o
snd-hda-codec-conexant-objs := patch_conexant.o
snd-hda-codec-via-objs := patch_via.o
snd-hda-codec-hdmi-objs := patch_hdmi.o hda_eld.o
@@ -47,7 +46,7 @@ ifdef CONFIG_SND_HDA_CODEC_CA0110
obj-$(CONFIG_SND_HDA_INTEL) += snd-hda-codec-ca0110.o
endif
ifdef CONFIG_SND_HDA_CODEC_CA0132
-obj-$(CONFIG_SND_HDA_INTEL) += snd-hda-codec-ca0132.o
+obj-$(CONFIG_SND_HDA_INTEL) += patch_ca0132/
endif
ifdef CONFIG_SND_HDA_CODEC_CONEXANT
obj-$(CONFIG_SND_HDA_INTEL) += snd-hda-codec-conexant.o
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
index 0c0ac0e..5db9988 100644
--- a/sound/pci/hda/hda_codec.c
+++ b/sound/pci/hda/hda_codec.c
@@ -3525,7 +3525,7 @@ unsigned int snd_hda_calc_stream_format(unsigned int rate,
return 0;
}
- if (channels == 0 || channels > 8) {
+ if (channels == 0 || channels > 16) {
snd_printdd("invalid channels %d\n", channels);
return 0;
}
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index c19e71a..44bd409 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -497,6 +497,7 @@ enum {
AZX_DRIVER_NVIDIA,
AZX_DRIVER_TERA,
AZX_DRIVER_CTX,
+ AZX_DRIVER_CTHDA,
AZX_DRIVER_GENERIC,
AZX_NUM_DRIVERS, /* keep this as last entry */
};
@@ -533,6 +534,10 @@ enum {
(AZX_DCAPS_NVIDIA_SNOOP | AZX_DCAPS_RIRB_DELAY | AZX_DCAPS_NO_MSI |\
AZX_DCAPS_ALIGN_BUFSIZE)
+/* quirks for Creative CTHDA */
+#define AZX_DCAPS_PRESET_CTHDA \
+ (AZX_DCAPS_NO_MSI | AZX_DCAPS_POSFIX_LPIB | AZX_DCAPS_ALIGN_BUFSIZE)
+
static char *driver_short_names[] __devinitdata = {
[AZX_DRIVER_ICH] = "HDA Intel",
[AZX_DRIVER_PCH] = "HDA Intel PCH",
@@ -546,6 +551,7 @@ static char *driver_short_names[] __devinitdata = {
[AZX_DRIVER_NVIDIA] = "HDA NVidia",
[AZX_DRIVER_TERA] = "HDA Teradici",
[AZX_DRIVER_CTX] = "HDA Creative",
+ [AZX_DRIVER_CTHDA] = "HDA Creative",
[AZX_DRIVER_GENERIC] = "HD-Audio Generic",
};
@@ -1283,7 +1289,7 @@ static irqreturn_t azx_interrupt(int irq, void *dev_id)
/*
* set up a BDL entry
*/
-static int setup_bdle(struct snd_pcm_substream *substream,
+static int setup_bdle(struct azx *chip, struct snd_pcm_substream *substream,
struct azx_dev *azx_dev, u32 **bdlp,
int ofs, int size, int with_ioc)
{
@@ -1302,6 +1308,12 @@ static int setup_bdle(struct snd_pcm_substream *substream,
bdl[1] = cpu_to_le32(upper_32_bits(addr));
/* program the size field of the BDL entry */
chunk = snd_pcm_sgbuf_get_chunk_size(substream, ofs, size);
+ /* one BDLE cannot cross 4K boundary on CTHDA chips */
+ if (chip->driver_type == AZX_DRIVER_CTHDA) {
+ u32 remain = 0x1000 - (ofs & 0xfff);
+ if (chunk > remain)
+ chunk = remain;
+ }
bdl[2] = cpu_to_le32(chunk);
/* program the IOC to enable interrupt
* only when the whole fragment is processed
@@ -1354,7 +1366,7 @@ static int azx_setup_periods(struct azx *chip,
bdl_pos_adj[chip->dev_index]);
pos_adj = 0;
} else {
- ofs = setup_bdle(substream, azx_dev,
+ ofs = setup_bdle(chip, substream, azx_dev,
&bdl, ofs, pos_adj,
!substream->runtime->no_period_wakeup);
if (ofs < 0)
@@ -1364,10 +1376,10 @@ static int azx_setup_periods(struct azx *chip,
pos_adj = 0;
for (i = 0; i < periods; i++) {
if (i == periods - 1 && pos_adj)
- ofs = setup_bdle(substream, azx_dev, &bdl, ofs,
+ ofs = setup_bdle(chip, substream, azx_dev, &bdl, ofs,
period_bytes - pos_adj, 0);
else
- ofs = setup_bdle(substream, azx_dev, &bdl, ofs,
+ ofs = setup_bdle(chip, substream, azx_dev, &bdl, ofs,
period_bytes,
!substream->runtime->no_period_wakeup);
if (ofs < 0)
@@ -1877,6 +1889,7 @@ static int azx_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
struct snd_pcm_substream *s;
int rstart = 0, start, nsync = 0, sbits = 0;
int nwait, timeout;
+ unsigned long flags;
switch (cmd) {
case SNDRV_PCM_TRIGGER_START:
@@ -1903,7 +1916,7 @@ static int azx_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
snd_pcm_trigger_done(s, substream);
}
- spin_lock(&chip->reg_lock);
+ spin_lock_irqsave(&chip->reg_lock, flags);
if (nsync > 1) {
/* first, set SYNC bits of corresponding streams */
if (chip->driver_caps & AZX_DCAPS_OLD_SSYNC)
@@ -1927,7 +1940,7 @@ static int azx_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
}
azx_dev->running = start;
}
- spin_unlock(&chip->reg_lock);
+ spin_unlock_irqrestore(&chip->reg_lock, flags);
if (start) {
if (nsync == 1)
return 0;
@@ -2611,7 +2624,7 @@ static void __devinit check_msi(struct azx *chip)
return;
}
- /* NVidia chipsets seem to cause troubles with MSI */
+ /* NVidia and CTHDA chipsets seem to cause troubles with MSI */
if (chip->driver_caps & AZX_DCAPS_NO_MSI) {
printk(KERN_INFO "hda_intel: Disabling MSI\n");
chip->msi = 0;
@@ -3116,6 +3129,11 @@ static DEFINE_PCI_DEVICE_TABLE(azx_ids) = {
.driver_data = AZX_DRIVER_CTX | AZX_DCAPS_CTX_WORKAROUND |
AZX_DCAPS_RIRB_PRE_DELAY | AZX_DCAPS_POSFIX_LPIB },
#endif
+ /* CTHDA chips */
+ { PCI_DEVICE(0x1102, 0x0010),
+ .driver_data = AZX_DRIVER_CTHDA | AZX_DCAPS_PRESET_CTHDA },
+ { PCI_DEVICE(0x1102, 0x0012),
+ .driver_data = AZX_DRIVER_CTHDA | AZX_DCAPS_PRESET_CTHDA },
/* Vortex86MX */
{ PCI_DEVICE(0x17f3, 0x3010), .driver_data = AZX_DRIVER_GENERIC },
/* VMware HDAudio */
diff --git a/sound/pci/hda/patch_ca0132.c b/sound/pci/hda/patch_ca0132.c
deleted file mode 100644
index 21d91d5..0000000
--- a/sound/pci/hda/patch_ca0132.c
+++ /dev/null
@@ -1,1103 +0,0 @@
-/*
- * HD audio interface patch for Creative CA0132 chip
- *
- * Copyright (c) 2011, Creative Technology Ltd.
- *
- * Based on patch_ca0110.c
- * Copyright (c) 2008 Takashi Iwai <tiwai(a)suse.de>
- *
- * This driver 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 driver 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#include <linux/init.h>
-#include <linux/delay.h>
-#include <linux/slab.h>
-#include <linux/pci.h>
-#include <linux/mutex.h>
-#include <linux/module.h>
-#include <sound/core.h>
-#include "hda_codec.h"
-#include "hda_local.h"
-
-#define WIDGET_CHIP_CTRL 0x15
-#define WIDGET_DSP_CTRL 0x16
-
-#define WUH_MEM_CONNID 10
-#define DSP_MEM_CONNID 16
-
-enum hda_cmd_vendor_io {
- /* for DspIO node */
- VENDOR_DSPIO_SCP_WRITE_DATA_LOW = 0x000,
- VENDOR_DSPIO_SCP_WRITE_DATA_HIGH = 0x100,
-
- VENDOR_DSPIO_STATUS = 0xF01,
- VENDOR_DSPIO_SCP_POST_READ_DATA = 0x702,
- VENDOR_DSPIO_SCP_READ_DATA = 0xF02,
- VENDOR_DSPIO_DSP_INIT = 0x703,
- VENDOR_DSPIO_SCP_POST_COUNT_QUERY = 0x704,
- VENDOR_DSPIO_SCP_READ_COUNT = 0xF04,
-
- /* for ChipIO node */
- VENDOR_CHIPIO_ADDRESS_LOW = 0x000,
- VENDOR_CHIPIO_ADDRESS_HIGH = 0x100,
- VENDOR_CHIPIO_STREAM_FORMAT = 0x200,
- VENDOR_CHIPIO_DATA_LOW = 0x300,
- VENDOR_CHIPIO_DATA_HIGH = 0x400,
-
- VENDOR_CHIPIO_GET_PARAMETER = 0xF00,
- VENDOR_CHIPIO_STATUS = 0xF01,
- VENDOR_CHIPIO_HIC_POST_READ = 0x702,
- VENDOR_CHIPIO_HIC_READ_DATA = 0xF03,
-
- VENDOR_CHIPIO_CT_EXTENSIONS_ENABLE = 0x70A,
-
- VENDOR_CHIPIO_PLL_PMU_WRITE = 0x70C,
- VENDOR_CHIPIO_PLL_PMU_READ = 0xF0C,
- VENDOR_CHIPIO_8051_ADDRESS_LOW = 0x70D,
- VENDOR_CHIPIO_8051_ADDRESS_HIGH = 0x70E,
- VENDOR_CHIPIO_FLAG_SET = 0x70F,
- VENDOR_CHIPIO_FLAGS_GET = 0xF0F,
- VENDOR_CHIPIO_PARAMETER_SET = 0x710,
- VENDOR_CHIPIO_PARAMETER_GET = 0xF10,
-
- VENDOR_CHIPIO_PORT_ALLOC_CONFIG_SET = 0x711,
- VENDOR_CHIPIO_PORT_ALLOC_SET = 0x712,
- VENDOR_CHIPIO_PORT_ALLOC_GET = 0xF12,
- VENDOR_CHIPIO_PORT_FREE_SET = 0x713,
-
- VENDOR_CHIPIO_PARAMETER_EX_ID_GET = 0xF17,
- VENDOR_CHIPIO_PARAMETER_EX_ID_SET = 0x717,
- VENDOR_CHIPIO_PARAMETER_EX_VALUE_GET = 0xF18,
- VENDOR_CHIPIO_PARAMETER_EX_VALUE_SET = 0x718
-};
-
-/*
- * Control flag IDs
- */
-enum control_flag_id {
- /* Connection manager stream setup is bypassed/enabled */
- CONTROL_FLAG_C_MGR = 0,
- /* DSP DMA is bypassed/enabled */
- CONTROL_FLAG_DMA = 1,
- /* 8051 'idle' mode is disabled/enabled */
- CONTROL_FLAG_IDLE_ENABLE = 2,
- /* Tracker for the SPDIF-in path is bypassed/enabled */
- CONTROL_FLAG_TRACKER = 3,
- /* DigitalOut to Spdif2Out connection is disabled/enabled */
- CONTROL_FLAG_SPDIF2OUT = 4,
- /* Digital Microphone is disabled/enabled */
- CONTROL_FLAG_DMIC = 5,
- /* ADC_B rate is 48 kHz/96 kHz */
- CONTROL_FLAG_ADC_B_96KHZ = 6,
- /* ADC_C rate is 48 kHz/96 kHz */
- CONTROL_FLAG_ADC_C_96KHZ = 7,
- /* DAC rate is 48 kHz/96 kHz (affects all DACs) */
- CONTROL_FLAG_DAC_96KHZ = 8,
- /* DSP rate is 48 kHz/96 kHz */
- CONTROL_FLAG_DSP_96KHZ = 9,
- /* SRC clock is 98 MHz/196 MHz (196 MHz forces rate to 96 KHz) */
- CONTROL_FLAG_SRC_CLOCK_196MHZ = 10,
- /* SRC rate is 48 kHz/96 kHz (48 kHz disabled when clock is 196 MHz) */
- CONTROL_FLAG_SRC_RATE_96KHZ = 11,
- /* Decode Loop (DSP->SRC->DSP) is disabled/enabled */
- CONTROL_FLAG_DECODE_LOOP = 12,
- /* De-emphasis filter on DAC-1 disabled/enabled */
- CONTROL_FLAG_DAC1_DEEMPHASIS = 13,
- /* De-emphasis filter on DAC-2 disabled/enabled */
- CONTROL_FLAG_DAC2_DEEMPHASIS = 14,
- /* De-emphasis filter on DAC-3 disabled/enabled */
- CONTROL_FLAG_DAC3_DEEMPHASIS = 15,
- /* High-pass filter on ADC_B disabled/enabled */
- CONTROL_FLAG_ADC_B_HIGH_PASS = 16,
- /* High-pass filter on ADC_C disabled/enabled */
- CONTROL_FLAG_ADC_C_HIGH_PASS = 17,
- /* Common mode on Port_A disabled/enabled */
- CONTROL_FLAG_PORT_A_COMMON_MODE = 18,
- /* Common mode on Port_D disabled/enabled */
- CONTROL_FLAG_PORT_D_COMMON_MODE = 19,
- /* Impedance for ramp generator on Port_A 16 Ohm/10K Ohm */
- CONTROL_FLAG_PORT_A_10KOHM_LOAD = 20,
- /* Impedance for ramp generator on Port_D, 16 Ohm/10K Ohm */
- CONTROL_FLAG_PORT_D_10K0HM_LOAD = 21,
- /* ASI rate is 48kHz/96kHz */
- CONTROL_FLAG_ASI_96KHZ = 22,
- /* DAC power settings able to control attached ports no/yes */
- CONTROL_FLAG_DACS_CONTROL_PORTS = 23,
- /* Clock Stop OK reporting is disabled/enabled */
- CONTROL_FLAG_CONTROL_STOP_OK_ENABLE = 24,
- /* Number of control flags */
- CONTROL_FLAGS_MAX = (CONTROL_FLAG_CONTROL_STOP_OK_ENABLE+1)
-};
-
-/*
- * Control parameter IDs
- */
-enum control_parameter_id {
- /* 0: force HDA, 1: allow DSP if HDA Spdif1Out stream is idle */
- CONTROL_PARAM_SPDIF1_SOURCE = 2,
-
- /* Stream Control */
-
- /* Select stream with the given ID */
- CONTROL_PARAM_STREAM_ID = 24,
- /* Source connection point for the selected stream */
- CONTROL_PARAM_STREAM_SOURCE_CONN_POINT = 25,
- /* Destination connection point for the selected stream */
- CONTROL_PARAM_STREAM_DEST_CONN_POINT = 26,
- /* Number of audio channels in the selected stream */
- CONTROL_PARAM_STREAMS_CHANNELS = 27,
- /*Enable control for the selected stream */
- CONTROL_PARAM_STREAM_CONTROL = 28,
-
- /* Connection Point Control */
-
- /* Select connection point with the given ID */
- CONTROL_PARAM_CONN_POINT_ID = 29,
- /* Connection point sample rate */
- CONTROL_PARAM_CONN_POINT_SAMPLE_RATE = 30,
-
- /* Node Control */
-
- /* Select HDA node with the given ID */
- CONTROL_PARAM_NODE_ID = 31
-};
-
-/*
- * Dsp Io Status codes
- */
-enum hda_vendor_status_dspio {
- /* Success */
- VENDOR_STATUS_DSPIO_OK = 0x00,
- /* Busy, unable to accept new command, the host must retry */
- VENDOR_STATUS_DSPIO_BUSY = 0x01,
- /* SCP command queue is full */
- VENDOR_STATUS_DSPIO_SCP_COMMAND_QUEUE_FULL = 0x02,
- /* SCP response queue is empty */
- VENDOR_STATUS_DSPIO_SCP_RESPONSE_QUEUE_EMPTY = 0x03
-};
-
-/*
- * Chip Io Status codes
- */
-enum hda_vendor_status_chipio {
- /* Success */
- VENDOR_STATUS_CHIPIO_OK = 0x00,
- /* Busy, unable to accept new command, the host must retry */
- VENDOR_STATUS_CHIPIO_BUSY = 0x01
-};
-
-/*
- * CA0132 sample rate
- */
-enum ca0132_sample_rate {
- SR_6_000 = 0x00,
- SR_8_000 = 0x01,
- SR_9_600 = 0x02,
- SR_11_025 = 0x03,
- SR_16_000 = 0x04,
- SR_22_050 = 0x05,
- SR_24_000 = 0x06,
- SR_32_000 = 0x07,
- SR_44_100 = 0x08,
- SR_48_000 = 0x09,
- SR_88_200 = 0x0A,
- SR_96_000 = 0x0B,
- SR_144_000 = 0x0C,
- SR_176_400 = 0x0D,
- SR_192_000 = 0x0E,
- SR_384_000 = 0x0F,
-
- SR_COUNT = 0x10,
-
- SR_RATE_UNKNOWN = 0x1F
-};
-
-/*
- * Scp Helper function
- */
-enum get_set {
- IS_SET = 0,
- IS_GET = 1,
-};
-
-/*
- * Duplicated from ca0110 codec
- */
-
-static void init_output(struct hda_codec *codec, hda_nid_t pin, hda_nid_t dac)
-{
- if (pin) {
- snd_hda_codec_write(codec, pin, 0,
- AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP);
- if (get_wcaps(codec, pin) & AC_WCAP_OUT_AMP)
- snd_hda_codec_write(codec, pin, 0,
- AC_VERB_SET_AMP_GAIN_MUTE,
- AMP_OUT_UNMUTE);
- }
- if (dac)
- snd_hda_codec_write(codec, dac, 0,
- AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO);
-}
-
-static void init_input(struct hda_codec *codec, hda_nid_t pin, hda_nid_t adc)
-{
- if (pin) {
- snd_hda_codec_write(codec, pin, 0,
- AC_VERB_SET_PIN_WIDGET_CONTROL,
- PIN_VREF80);
- if (get_wcaps(codec, pin) & AC_WCAP_IN_AMP)
- snd_hda_codec_write(codec, pin, 0,
- AC_VERB_SET_AMP_GAIN_MUTE,
- AMP_IN_UNMUTE(0));
- }
- if (adc)
- snd_hda_codec_write(codec, adc, 0, AC_VERB_SET_AMP_GAIN_MUTE,
- AMP_IN_UNMUTE(0));
-}
-
-static char *dirstr[2] = { "Playback", "Capture" };
-
-static int _add_switch(struct hda_codec *codec, hda_nid_t nid, const char *pfx,
- int chan, int dir)
-{
- char namestr[44];
- int type = dir ? HDA_INPUT : HDA_OUTPUT;
- struct snd_kcontrol_new knew =
- HDA_CODEC_MUTE_MONO(namestr, nid, chan, 0, type);
- sprintf(namestr, "%s %s Switch", pfx, dirstr[dir]);
- return snd_hda_ctl_add(codec, nid, snd_ctl_new1(&knew, codec));
-}
-
-static int _add_volume(struct hda_codec *codec, hda_nid_t nid, const char *pfx,
- int chan, int dir)
-{
- char namestr[44];
- int type = dir ? HDA_INPUT : HDA_OUTPUT;
- struct snd_kcontrol_new knew =
- HDA_CODEC_VOLUME_MONO(namestr, nid, chan, 0, type);
- sprintf(namestr, "%s %s Volume", pfx, dirstr[dir]);
- return snd_hda_ctl_add(codec, nid, snd_ctl_new1(&knew, codec));
-}
-
-#define add_out_switch(codec, nid, pfx) _add_switch(codec, nid, pfx, 3, 0)
-#define add_out_volume(codec, nid, pfx) _add_volume(codec, nid, pfx, 3, 0)
-#define add_in_switch(codec, nid, pfx) _add_switch(codec, nid, pfx, 3, 1)
-#define add_in_volume(codec, nid, pfx) _add_volume(codec, nid, pfx, 3, 1)
-#define add_mono_switch(codec, nid, pfx, chan) \
- _add_switch(codec, nid, pfx, chan, 0)
-#define add_mono_volume(codec, nid, pfx, chan) \
- _add_volume(codec, nid, pfx, chan, 0)
-#define add_in_mono_switch(codec, nid, pfx, chan) \
- _add_switch(codec, nid, pfx, chan, 1)
-#define add_in_mono_volume(codec, nid, pfx, chan) \
- _add_volume(codec, nid, pfx, chan, 1)
-
-
-/*
- * CA0132 specific
- */
-
-struct ca0132_spec {
- struct auto_pin_cfg autocfg;
- struct hda_multi_out multiout;
- hda_nid_t out_pins[AUTO_CFG_MAX_OUTS];
- hda_nid_t dacs[AUTO_CFG_MAX_OUTS];
- hda_nid_t hp_dac;
- hda_nid_t input_pins[AUTO_PIN_LAST];
- hda_nid_t adcs[AUTO_PIN_LAST];
- hda_nid_t dig_out;
- hda_nid_t dig_in;
- unsigned int num_inputs;
- long curr_hp_switch;
- long curr_hp_volume[2];
- long curr_speaker_switch;
- struct mutex chipio_mutex;
- const char *input_labels[AUTO_PIN_LAST];
- struct hda_pcm pcm_rec[2]; /* PCM information */
-};
-
-/* Chip access helper function */
-static int chipio_send(struct hda_codec *codec,
- unsigned int reg,
- unsigned int data)
-{
- unsigned int res;
- int retry = 50;
-
- /* send bits of data specified by reg */
- do {
- res = snd_hda_codec_read(codec, WIDGET_CHIP_CTRL, 0,
- reg, data);
- if (res == VENDOR_STATUS_CHIPIO_OK)
- return 0;
- } while (--retry);
- return -EIO;
-}
-
-/*
- * Write chip address through the vendor widget -- NOT protected by the Mutex!
- */
-static int chipio_write_address(struct hda_codec *codec,
- unsigned int chip_addx)
-{
- int res;
-
- /* send low 16 bits of the address */
- res = chipio_send(codec, VENDOR_CHIPIO_ADDRESS_LOW,
- chip_addx & 0xffff);
-
- if (res != -EIO) {
- /* send high 16 bits of the address */
- res = chipio_send(codec, VENDOR_CHIPIO_ADDRESS_HIGH,
- chip_addx >> 16);
- }
-
- return res;
-}
-
-/*
- * Write data through the vendor widget -- NOT protected by the Mutex!
- */
-
-static int chipio_write_data(struct hda_codec *codec, unsigned int data)
-{
- int res;
-
- /* send low 16 bits of the data */
- res = chipio_send(codec, VENDOR_CHIPIO_DATA_LOW, data & 0xffff);
-
- if (res != -EIO) {
- /* send high 16 bits of the data */
- res = chipio_send(codec, VENDOR_CHIPIO_DATA_HIGH,
- data >> 16);
- }
-
- return res;
-}
-
-/*
- * Read data through the vendor widget -- NOT protected by the Mutex!
- */
-static int chipio_read_data(struct hda_codec *codec, unsigned int *data)
-{
- int res;
-
- /* post read */
- res = chipio_send(codec, VENDOR_CHIPIO_HIC_POST_READ, 0);
-
- if (res != -EIO) {
- /* read status */
- res = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0);
- }
-
- if (res != -EIO) {
- /* read data */
- *data = snd_hda_codec_read(codec, WIDGET_CHIP_CTRL, 0,
- VENDOR_CHIPIO_HIC_READ_DATA,
- 0);
- }
-
- return res;
-}
-
-/*
- * Write given value to the given address through the chip I/O widget.
- * protected by the Mutex
- */
-static int chipio_write(struct hda_codec *codec,
- unsigned int chip_addx, const unsigned int data)
-{
- struct ca0132_spec *spec = codec->spec;
- int err;
-
- mutex_lock(&spec->chipio_mutex);
-
- /* write the address, and if successful proceed to write data */
- err = chipio_write_address(codec, chip_addx);
- if (err < 0)
- goto exit;
-
- err = chipio_write_data(codec, data);
- if (err < 0)
- goto exit;
-
-exit:
- mutex_unlock(&spec->chipio_mutex);
- return err;
-}
-
-/*
- * Read the given address through the chip I/O widget
- * protected by the Mutex
- */
-static int chipio_read(struct hda_codec *codec,
- unsigned int chip_addx, unsigned int *data)
-{
- struct ca0132_spec *spec = codec->spec;
- int err;
-
- mutex_lock(&spec->chipio_mutex);
-
- /* write the address, and if successful proceed to write data */
- err = chipio_write_address(codec, chip_addx);
- if (err < 0)
- goto exit;
-
- err = chipio_read_data(codec, data);
- if (err < 0)
- goto exit;
-
-exit:
- mutex_unlock(&spec->chipio_mutex);
- return err;
-}
-
-/*
- * PCM stuffs
- */
-static void ca0132_setup_stream(struct hda_codec *codec, hda_nid_t nid,
- u32 stream_tag,
- int channel_id, int format)
-{
- unsigned int oldval, newval;
-
- if (!nid)
- return;
-
- snd_printdd("ca0132_setup_stream: "
- "NID=0x%x, stream=0x%x, channel=%d, format=0x%x\n",
- nid, stream_tag, channel_id, format);
-
- /* update the format-id if changed */
- oldval = snd_hda_codec_read(codec, nid, 0,
- AC_VERB_GET_STREAM_FORMAT,
- 0);
- if (oldval != format) {
- msleep(20);
- snd_hda_codec_write(codec, nid, 0,
- AC_VERB_SET_STREAM_FORMAT,
- format);
- }
-
- oldval = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_CONV, 0);
- newval = (stream_tag << 4) | channel_id;
- if (oldval != newval) {
- snd_hda_codec_write(codec, nid, 0,
- AC_VERB_SET_CHANNEL_STREAMID,
- newval);
- }
-}
-
-static void ca0132_cleanup_stream(struct hda_codec *codec, hda_nid_t nid)
-{
- snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_STREAM_FORMAT, 0);
- snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CHANNEL_STREAMID, 0);
-}
-
-/*
- * PCM callbacks
- */
-static int ca0132_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
- struct hda_codec *codec,
- unsigned int stream_tag,
- unsigned int format,
- struct snd_pcm_substream *substream)
-{
- struct ca0132_spec *spec = codec->spec;
-
- ca0132_setup_stream(codec, spec->dacs[0], stream_tag, 0, format);
-
- return 0;
-}
-
-static int ca0132_playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
- struct hda_codec *codec,
- struct snd_pcm_substream *substream)
-{
- struct ca0132_spec *spec = codec->spec;
-
- ca0132_cleanup_stream(codec, spec->dacs[0]);
-
- return 0;
-}
-
-/*
- * Digital out
- */
-static int ca0132_dig_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
- struct hda_codec *codec,
- unsigned int stream_tag,
- unsigned int format,
- struct snd_pcm_substream *substream)
-{
- struct ca0132_spec *spec = codec->spec;
-
- ca0132_setup_stream(codec, spec->dig_out, stream_tag, 0, format);
-
- return 0;
-}
-
-static int ca0132_dig_playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
- struct hda_codec *codec,
- struct snd_pcm_substream *substream)
-{
- struct ca0132_spec *spec = codec->spec;
-
- ca0132_cleanup_stream(codec, spec->dig_out);
-
- return 0;
-}
-
-/*
- * Analog capture
- */
-static int ca0132_capture_pcm_prepare(struct hda_pcm_stream *hinfo,
- struct hda_codec *codec,
- unsigned int stream_tag,
- unsigned int format,
- struct snd_pcm_substream *substream)
-{
- struct ca0132_spec *spec = codec->spec;
-
- ca0132_setup_stream(codec, spec->adcs[substream->number],
- stream_tag, 0, format);
-
- return 0;
-}
-
-static int ca0132_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
- struct hda_codec *codec,
- struct snd_pcm_substream *substream)
-{
- struct ca0132_spec *spec = codec->spec;
-
- ca0132_cleanup_stream(codec, spec->adcs[substream->number]);
-
- return 0;
-}
-
-/*
- * Digital capture
- */
-static int ca0132_dig_capture_pcm_prepare(struct hda_pcm_stream *hinfo,
- struct hda_codec *codec,
- unsigned int stream_tag,
- unsigned int format,
- struct snd_pcm_substream *substream)
-{
- struct ca0132_spec *spec = codec->spec;
-
- ca0132_setup_stream(codec, spec->dig_in, stream_tag, 0, format);
-
- return 0;
-}
-
-static int ca0132_dig_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
- struct hda_codec *codec,
- struct snd_pcm_substream *substream)
-{
- struct ca0132_spec *spec = codec->spec;
-
- ca0132_cleanup_stream(codec, spec->dig_in);
-
- return 0;
-}
-
-/*
- */
-static struct hda_pcm_stream ca0132_pcm_analog_playback = {
- .substreams = 1,
- .channels_min = 2,
- .channels_max = 2,
- .ops = {
- .prepare = ca0132_playback_pcm_prepare,
- .cleanup = ca0132_playback_pcm_cleanup
- },
-};
-
-static struct hda_pcm_stream ca0132_pcm_analog_capture = {
- .substreams = 1,
- .channels_min = 2,
- .channels_max = 2,
- .ops = {
- .prepare = ca0132_capture_pcm_prepare,
- .cleanup = ca0132_capture_pcm_cleanup
- },
-};
-
-static struct hda_pcm_stream ca0132_pcm_digital_playback = {
- .substreams = 1,
- .channels_min = 2,
- .channels_max = 2,
- .ops = {
- .prepare = ca0132_dig_playback_pcm_prepare,
- .cleanup = ca0132_dig_playback_pcm_cleanup
- },
-};
-
-static struct hda_pcm_stream ca0132_pcm_digital_capture = {
- .substreams = 1,
- .channels_min = 2,
- .channels_max = 2,
- .ops = {
- .prepare = ca0132_dig_capture_pcm_prepare,
- .cleanup = ca0132_dig_capture_pcm_cleanup
- },
-};
-
-static int ca0132_build_pcms(struct hda_codec *codec)
-{
- struct ca0132_spec *spec = codec->spec;
- struct hda_pcm *info = spec->pcm_rec;
-
- codec->pcm_info = info;
- codec->num_pcms = 0;
-
- info->name = "CA0132 Analog";
- info->stream[SNDRV_PCM_STREAM_PLAYBACK] = ca0132_pcm_analog_playback;
- info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = spec->dacs[0];
- info->stream[SNDRV_PCM_STREAM_PLAYBACK].channels_max =
- spec->multiout.max_channels;
- info->stream[SNDRV_PCM_STREAM_CAPTURE] = ca0132_pcm_analog_capture;
- info->stream[SNDRV_PCM_STREAM_CAPTURE].substreams = spec->num_inputs;
- info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->adcs[0];
- codec->num_pcms++;
-
- if (!spec->dig_out && !spec->dig_in)
- return 0;
-
- info++;
- info->name = "CA0132 Digital";
- info->pcm_type = HDA_PCM_TYPE_SPDIF;
- if (spec->dig_out) {
- info->stream[SNDRV_PCM_STREAM_PLAYBACK] =
- ca0132_pcm_digital_playback;
- info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = spec->dig_out;
- }
- if (spec->dig_in) {
- info->stream[SNDRV_PCM_STREAM_CAPTURE] =
- ca0132_pcm_digital_capture;
- info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->dig_in;
- }
- codec->num_pcms++;
-
- return 0;
-}
-
-#define REG_CODEC_MUTE 0x18b014
-#define REG_CODEC_HP_VOL_L 0x18b070
-#define REG_CODEC_HP_VOL_R 0x18b074
-
-static int ca0132_hp_switch_get(struct snd_kcontrol *kcontrol,
- struct snd_ctl_elem_value *ucontrol)
-{
- struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
- struct ca0132_spec *spec = codec->spec;
- long *valp = ucontrol->value.integer.value;
-
- *valp = spec->curr_hp_switch;
- return 0;
-}
-
-static int ca0132_hp_switch_put(struct snd_kcontrol *kcontrol,
- struct snd_ctl_elem_value *ucontrol)
-{
- struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
- struct ca0132_spec *spec = codec->spec;
- long *valp = ucontrol->value.integer.value;
- unsigned int data;
- int err;
-
- /* any change? */
- if (spec->curr_hp_switch == *valp)
- return 0;
-
- snd_hda_power_up(codec);
-
- err = chipio_read(codec, REG_CODEC_MUTE, &data);
- if (err < 0)
- goto exit;
-
- /* *valp 0 is mute, 1 is unmute */
- data = (data & 0x7f) | (*valp ? 0 : 0x80);
- err = chipio_write(codec, REG_CODEC_MUTE, data);
- if (err < 0)
- goto exit;
-
- spec->curr_hp_switch = *valp;
-
- exit:
- snd_hda_power_down(codec);
- return err < 0 ? err : 1;
-}
-
-static int ca0132_speaker_switch_get(struct snd_kcontrol *kcontrol,
- struct snd_ctl_elem_value *ucontrol)
-{
- struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
- struct ca0132_spec *spec = codec->spec;
- long *valp = ucontrol->value.integer.value;
-
- *valp = spec->curr_speaker_switch;
- return 0;
-}
-
-static int ca0132_speaker_switch_put(struct snd_kcontrol *kcontrol,
- struct snd_ctl_elem_value *ucontrol)
-{
- struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
- struct ca0132_spec *spec = codec->spec;
- long *valp = ucontrol->value.integer.value;
- unsigned int data;
- int err;
-
- /* any change? */
- if (spec->curr_speaker_switch == *valp)
- return 0;
-
- snd_hda_power_up(codec);
-
- err = chipio_read(codec, REG_CODEC_MUTE, &data);
- if (err < 0)
- goto exit;
-
- /* *valp 0 is mute, 1 is unmute */
- data = (data & 0xef) | (*valp ? 0 : 0x10);
- err = chipio_write(codec, REG_CODEC_MUTE, data);
- if (err < 0)
- goto exit;
-
- spec->curr_speaker_switch = *valp;
-
- exit:
- snd_hda_power_down(codec);
- return err < 0 ? err : 1;
-}
-
-static int ca0132_hp_volume_get(struct snd_kcontrol *kcontrol,
- struct snd_ctl_elem_value *ucontrol)
-{
- struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
- struct ca0132_spec *spec = codec->spec;
- long *valp = ucontrol->value.integer.value;
-
- *valp++ = spec->curr_hp_volume[0];
- *valp = spec->curr_hp_volume[1];
- return 0;
-}
-
-static int ca0132_hp_volume_put(struct snd_kcontrol *kcontrol,
- struct snd_ctl_elem_value *ucontrol)
-{
- struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
- struct ca0132_spec *spec = codec->spec;
- long *valp = ucontrol->value.integer.value;
- long left_vol, right_vol;
- unsigned int data;
- int val;
- int err;
-
- left_vol = *valp++;
- right_vol = *valp;
-
- /* any change? */
- if ((spec->curr_hp_volume[0] == left_vol) &&
- (spec->curr_hp_volume[1] == right_vol))
- return 0;
-
- snd_hda_power_up(codec);
-
- err = chipio_read(codec, REG_CODEC_HP_VOL_L, &data);
- if (err < 0)
- goto exit;
-
- val = 31 - left_vol;
- data = (data & 0xe0) | val;
- err = chipio_write(codec, REG_CODEC_HP_VOL_L, data);
- if (err < 0)
- goto exit;
-
- val = 31 - right_vol;
- data = (data & 0xe0) | val;
- err = chipio_write(codec, REG_CODEC_HP_VOL_R, data);
- if (err < 0)
- goto exit;
-
- spec->curr_hp_volume[0] = left_vol;
- spec->curr_hp_volume[1] = right_vol;
-
- exit:
- snd_hda_power_down(codec);
- return err < 0 ? err : 1;
-}
-
-static int add_hp_switch(struct hda_codec *codec, hda_nid_t nid)
-{
- struct snd_kcontrol_new knew =
- HDA_CODEC_MUTE_MONO("Headphone Playback Switch",
- nid, 1, 0, HDA_OUTPUT);
- knew.get = ca0132_hp_switch_get;
- knew.put = ca0132_hp_switch_put;
- return snd_hda_ctl_add(codec, nid, snd_ctl_new1(&knew, codec));
-}
-
-static int add_hp_volume(struct hda_codec *codec, hda_nid_t nid)
-{
- struct snd_kcontrol_new knew =
- HDA_CODEC_VOLUME_MONO("Headphone Playback Volume",
- nid, 3, 0, HDA_OUTPUT);
- knew.get = ca0132_hp_volume_get;
- knew.put = ca0132_hp_volume_put;
- return snd_hda_ctl_add(codec, nid, snd_ctl_new1(&knew, codec));
-}
-
-static int add_speaker_switch(struct hda_codec *codec, hda_nid_t nid)
-{
- struct snd_kcontrol_new knew =
- HDA_CODEC_MUTE_MONO("Speaker Playback Switch",
- nid, 1, 0, HDA_OUTPUT);
- knew.get = ca0132_speaker_switch_get;
- knew.put = ca0132_speaker_switch_put;
- return snd_hda_ctl_add(codec, nid, snd_ctl_new1(&knew, codec));
-}
-
-static void ca0132_fix_hp_caps(struct hda_codec *codec)
-{
- struct ca0132_spec *spec = codec->spec;
- struct auto_pin_cfg *cfg = &spec->autocfg;
- unsigned int caps;
-
- /* set mute-capable, 1db step, 32 steps, ofs 6 */
- caps = 0x80031f06;
- snd_hda_override_amp_caps(codec, cfg->hp_pins[0], HDA_OUTPUT, caps);
-}
-
-static int ca0132_build_controls(struct hda_codec *codec)
-{
- struct ca0132_spec *spec = codec->spec;
- struct auto_pin_cfg *cfg = &spec->autocfg;
- int i, err;
-
- if (spec->multiout.num_dacs) {
- err = add_speaker_switch(codec, spec->out_pins[0]);
- if (err < 0)
- return err;
- }
-
- if (cfg->hp_outs) {
- ca0132_fix_hp_caps(codec);
- err = add_hp_switch(codec, cfg->hp_pins[0]);
- if (err < 0)
- return err;
- err = add_hp_volume(codec, cfg->hp_pins[0]);
- if (err < 0)
- return err;
- }
-
- for (i = 0; i < spec->num_inputs; i++) {
- const char *label = spec->input_labels[i];
-
- err = add_in_switch(codec, spec->adcs[i], label);
- if (err < 0)
- return err;
- err = add_in_volume(codec, spec->adcs[i], label);
- if (err < 0)
- return err;
- if (cfg->inputs[i].type == AUTO_PIN_MIC) {
- /* add Mic-Boost */
- err = add_in_mono_volume(codec, spec->input_pins[i],
- "Mic Boost", 1);
- if (err < 0)
- return err;
- }
- }
-
- if (spec->dig_out) {
- err = snd_hda_create_spdif_out_ctls(codec, spec->dig_out,
- spec->dig_out);
- if (err < 0)
- return err;
- err = add_out_volume(codec, spec->dig_out, "IEC958");
- if (err < 0)
- return err;
- }
-
- if (spec->dig_in) {
- err = snd_hda_create_spdif_in_ctls(codec, spec->dig_in);
- if (err < 0)
- return err;
- err = add_in_volume(codec, spec->dig_in, "IEC958");
- if (err < 0)
- return err;
- }
- return 0;
-}
-
-
-static void ca0132_set_ct_ext(struct hda_codec *codec, int enable)
-{
- /* Set Creative extension */
- snd_printdd("SET CREATIVE EXTENSION\n");
- snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
- VENDOR_CHIPIO_CT_EXTENSIONS_ENABLE,
- enable);
- msleep(20);
-}
-
-
-static void ca0132_config(struct hda_codec *codec)
-{
- struct ca0132_spec *spec = codec->spec;
- struct auto_pin_cfg *cfg = &spec->autocfg;
-
- /* line-outs */
- cfg->line_outs = 1;
- cfg->line_out_pins[0] = 0x0b; /* front */
- cfg->line_out_type = AUTO_PIN_LINE_OUT;
-
- spec->dacs[0] = 0x02;
- spec->out_pins[0] = 0x0b;
- spec->multiout.dac_nids = spec->dacs;
- spec->multiout.num_dacs = 1;
- spec->multiout.max_channels = 2;
-
- /* headphone */
- cfg->hp_outs = 1;
- cfg->hp_pins[0] = 0x0f;
-
- spec->hp_dac = 0;
- spec->multiout.hp_nid = 0;
-
- /* inputs */
- cfg->num_inputs = 2; /* Mic-in and line-in */
- cfg->inputs[0].pin = 0x12;
- cfg->inputs[0].type = AUTO_PIN_MIC;
- cfg->inputs[1].pin = 0x11;
- cfg->inputs[1].type = AUTO_PIN_LINE_IN;
-
- /* Mic-in */
- spec->input_pins[0] = 0x12;
- spec->input_labels[0] = "Mic-In";
- spec->adcs[0] = 0x07;
-
- /* Line-In */
- spec->input_pins[1] = 0x11;
- spec->input_labels[1] = "Line-In";
- spec->adcs[1] = 0x08;
- spec->num_inputs = 2;
-}
-
-static void ca0132_init_chip(struct hda_codec *codec)
-{
- struct ca0132_spec *spec = codec->spec;
-
- mutex_init(&spec->chipio_mutex);
-}
-
-static void ca0132_exit_chip(struct hda_codec *codec)
-{
- /* put any chip cleanup stuffs here. */
-}
-
-static int ca0132_init(struct hda_codec *codec)
-{
- struct ca0132_spec *spec = codec->spec;
- struct auto_pin_cfg *cfg = &spec->autocfg;
- int i;
-
- for (i = 0; i < spec->multiout.num_dacs; i++) {
- init_output(codec, spec->out_pins[i],
- spec->multiout.dac_nids[i]);
- }
- init_output(codec, cfg->hp_pins[0], spec->hp_dac);
- init_output(codec, cfg->dig_out_pins[0], spec->dig_out);
-
- for (i = 0; i < spec->num_inputs; i++)
- init_input(codec, spec->input_pins[i], spec->adcs[i]);
-
- init_input(codec, cfg->dig_in_pin, spec->dig_in);
-
- ca0132_set_ct_ext(codec, 1);
-
- return 0;
-}
-
-
-static void ca0132_free(struct hda_codec *codec)
-{
- ca0132_set_ct_ext(codec, 0);
- ca0132_exit_chip(codec);
- kfree(codec->spec);
-}
-
-static struct hda_codec_ops ca0132_patch_ops = {
- .build_controls = ca0132_build_controls,
- .build_pcms = ca0132_build_pcms,
- .init = ca0132_init,
- .free = ca0132_free,
-};
-
-
-
-static int patch_ca0132(struct hda_codec *codec)
-{
- struct ca0132_spec *spec;
-
- snd_printdd("patch_ca0132\n");
-
- spec = kzalloc(sizeof(*spec), GFP_KERNEL);
- if (!spec)
- return -ENOMEM;
- codec->spec = spec;
-
- ca0132_init_chip(codec);
-
- ca0132_config(codec);
-
- codec->patch_ops = ca0132_patch_ops;
-
- return 0;
-}
-
-/*
- * patch entries
- */
-static struct hda_codec_preset snd_hda_preset_ca0132[] = {
- { .id = 0x11020011, .name = "CA0132", .patch = patch_ca0132 },
- {} /* terminator */
-};
-
-MODULE_ALIAS("snd-hda-codec-id:11020011");
-
-MODULE_LICENSE("GPL");
-MODULE_DESCRIPTION("Creative CA0132, CA0132 HD-audio codec");
-
-static struct hda_codec_preset_list ca0132_list = {
- .preset = snd_hda_preset_ca0132,
- .owner = THIS_MODULE,
-};
-
-static int __init patch_ca0132_init(void)
-{
- return snd_hda_add_codec_preset(&ca0132_list);
-}
-
-static void __exit patch_ca0132_exit(void)
-{
- snd_hda_delete_codec_preset(&ca0132_list);
-}
-
-module_init(patch_ca0132_init)
-module_exit(patch_ca0132_exit)
diff --git a/sound/pci/hda/patch_ca0132/Makefile b/sound/pci/hda/patch_ca0132/Makefile
new file mode 100644
index 0000000..8f6f167
--- /dev/null
+++ b/sound/pci/hda/patch_ca0132/Makefile
@@ -0,0 +1,5 @@
+snd-hda-codec-ca0132-objs := patch_ca0132.o
+
+ifdef CONFIG_SND_HDA_CODEC_CA0132
+obj-$(CONFIG_SND_HDA_INTEL) += snd-hda-codec-ca0132.o
+endif
diff --git a/sound/pci/hda/patch_ca0132/ca0132_regs.h b/sound/pci/hda/patch_ca0132/ca0132_regs.h
new file mode 100644
index 0000000..831ca9c
--- /dev/null
+++ b/sound/pci/hda/patch_ca0132/ca0132_regs.h
@@ -0,0 +1,409 @@
+/*
+ * HD audio interface patch for Creative CA0132 chip.
+ * CA0132 registers defines.
+ *
+ * Copyright (c) 2011, Creative Technology Ltd.
+ *
+ * This driver 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 driver 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#ifndef __CA0132_REGS_H
+#define __CA0312_REGS_H
+
+#define DSP_CHIP_OFFSET 0x100000
+#define DSP_DBGCNTL_MODULE_OFFSET 0xE30
+#define DSP_DBGCNTL_INST_OFFSET \
+ (DSP_CHIP_OFFSET + DSP_DBGCNTL_MODULE_OFFSET)
+
+#define DSP_DBGCNTL_EXEC_LOBIT 0x0
+#define DSP_DBGCNTL_EXEC_HIBIT 0x3
+#define DSP_DBGCNTL_EXEC_MASK 0xF
+
+#define DSP_DBGCNTL_SS_LOBIT 0x4
+#define DSP_DBGCNTL_SS_HIBIT 0x7
+#define DSP_DBGCNTL_SS_MASK 0xF0
+
+#define DSP_DBGCNTL_STATE_LOBIT 0xA
+#define DSP_DBGCNTL_STATE_HIBIT 0xD
+#define DSP_DBGCNTL_STATE_MASK 0x3C00
+
+#define XRAM_CHIP_OFFSET 0x0
+#define XRAM_XRAM_CHANNEL_COUNT 0xE000
+#define XRAM_XRAM_MODULE_OFFSET 0x0
+#define XRAM_XRAM_CHAN_INCR 4
+#define XRAM_XRAM_INST_OFFSET(_chan) \
+ (XRAM_CHIP_OFFSET + XRAM_XRAM_MODULE_OFFSET + \
+ (_chan * XRAM_XRAM_CHAN_INCR))
+
+#define YRAM_CHIP_OFFSET 0x40000
+#define YRAM_YRAM_CHANNEL_COUNT 0x8000
+#define YRAM_YRAM_MODULE_OFFSET 0x0
+#define YRAM_YRAM_CHAN_INCR 4
+#define YRAM_YRAM_INST_OFFSET(_chan) \
+ (YRAM_CHIP_OFFSET + YRAM_YRAM_MODULE_OFFSET + \
+ (_chan * YRAM_YRAM_CHAN_INCR))
+
+#define UC_CHIP_OFFSET 0x80000
+#define UC_UC_CHANNEL_COUNT 0x10000
+#define UC_UC_MODULE_OFFSET 0x0
+#define UC_UC_CHAN_INCR 4
+#define UC_UC_INST_OFFSET(_chan) \
+ (UC_CHIP_OFFSET + UC_UC_MODULE_OFFSET + \
+ (_chan * UC_UC_CHAN_INCR))
+
+#define AXRAM_CHIP_OFFSET 0x3C000
+#define AXRAM_AXRAM_CHANNEL_COUNT 0x1000
+#define AXRAM_AXRAM_MODULE_OFFSET 0x0
+#define AXRAM_AXRAM_CHAN_INCR 4
+#define AXRAM_AXRAM_INST_OFFSET(_chan) \
+ (AXRAM_CHIP_OFFSET + AXRAM_AXRAM_MODULE_OFFSET + \
+ (_chan * AXRAM_AXRAM_CHAN_INCR))
+
+#define AYRAM_CHIP_OFFSET 0x78000
+#define AYRAM_AYRAM_CHANNEL_COUNT 0x1000
+#define AYRAM_AYRAM_MODULE_OFFSET 0x0
+#define AYRAM_AYRAM_CHAN_INCR 4
+#define AYRAM_AYRAM_INST_OFFSET(_chan) \
+ (AYRAM_CHIP_OFFSET + AYRAM_AYRAM_MODULE_OFFSET + \
+ (_chan * AYRAM_AYRAM_CHAN_INCR))
+
+#define DSPDMAC_CHIP_OFFSET 0x110000
+#define DSPDMAC_DMA_CFG_CHANNEL_COUNT 12
+#define DSPDMAC_DMACFG_MODULE_OFFSET 0xF00
+#define DSPDMAC_DMACFG_CHAN_INCR 0x10
+#define DSPDMAC_DMACFG_INST_OFFSET(_chan) \
+ (DSPDMAC_CHIP_OFFSET + DSPDMAC_DMACFG_MODULE_OFFSET + \
+ (_chan * DSPDMAC_DMACFG_CHAN_INCR))
+
+#define DSPDMAC_DMACFG_DBADR_LOBIT 0x0
+#define DSPDMAC_DMACFG_DBADR_HIBIT 0x10
+#define DSPDMAC_DMACFG_DBADR_MASK 0x1FFFF
+#define DSPDMAC_DMACFG_LP_LOBIT 0x11
+#define DSPDMAC_DMACFG_LP_HIBIT 0x11
+#define DSPDMAC_DMACFG_LP_MASK 0x20000
+
+#define DSPDMAC_DMACFG_AINCR_LOBIT 0x12
+#define DSPDMAC_DMACFG_AINCR_HIBIT 0x12
+#define DSPDMAC_DMACFG_AINCR_MASK 0x40000
+
+#define DSPDMAC_DMACFG_DWR_LOBIT 0x13
+#define DSPDMAC_DMACFG_DWR_HIBIT 0x13
+#define DSPDMAC_DMACFG_DWR_MASK 0x80000
+
+#define DSPDMAC_DMACFG_AJUMP_LOBIT 0x14
+#define DSPDMAC_DMACFG_AJUMP_HIBIT 0x17
+#define DSPDMAC_DMACFG_AJUMP_MASK 0xF00000
+
+#define DSPDMAC_DMACFG_AMODE_LOBIT 0x18
+#define DSPDMAC_DMACFG_AMODE_HIBIT 0x19
+#define DSPDMAC_DMACFG_AMODE_MASK 0x3000000
+
+#define DSPDMAC_DMACFG_LK_LOBIT 0x1A
+#define DSPDMAC_DMACFG_LK_HIBIT 0x1A
+#define DSPDMAC_DMACFG_LK_MASK 0x4000000
+
+#define DSPDMAC_DMACFG_AICS_LOBIT 0x1B
+#define DSPDMAC_DMACFG_AICS_HIBIT 0x1F
+#define DSPDMAC_DMACFG_AICS_MASK 0xF8000000
+
+#define DSPDMAC_DMACFG_LP_SINGLE 0
+#define DSPDMAC_DMACFG_LP_LOOPING 1
+
+#define DSPDMAC_DMACFG_AINCR_XANDY 0
+#define DSPDMAC_DMACFG_AINCR_XORY 1
+
+#define DSPDMAC_DMACFG_DWR_DMA_RD 0
+#define DSPDMAC_DMACFG_DWR_DMA_WR 1
+
+#define DSPDMAC_DMACFG_AMODE_LINEAR 0
+#define DSPDMAC_DMACFG_AMODE_RSV1 1
+#define DSPDMAC_DMACFG_AMODE_WINTLV 2
+#define DSPDMAC_DMACFG_AMODE_GINTLV 3
+
+#define DSPDMAC_DSP_ADR_OFS_CHANNEL_COUNT 12
+#define DSPDMAC_DSPADROFS_MODULE_OFFSET 0xF04
+#define DSPDMAC_DSPADROFS_CHAN_INCR 0x10
+#define DSPDMAC_DSPADROFS_INST_OFFSET(_chan) \
+ (DSPDMAC_CHIP_OFFSET + DSPDMAC_DSPADROFS_MODULE_OFFSET + \
+ (_chan * DSPDMAC_DSPADROFS_CHAN_INCR))
+
+#define DSPDMAC_DSPADROFS_COFS_LOBIT 0x0
+#define DSPDMAC_DSPADROFS_COFS_HIBIT 0xF
+#define DSPDMAC_DSPADROFS_COFS_MASK 0xFFFF
+
+#define DSPDMAC_DSPADROFS_BOFS_LOBIT 0x10
+#define DSPDMAC_DSPADROFS_BOFS_HIBIT 0x1F
+#define DSPDMAC_DSPADROFS_BOFS_MASK 0xFFFF0000
+
+#define DSPDMAC_DSP_ADR_WOFS_CHANNEL_COUNT 12
+#define DSPDMAC_DSPADRWOFS_MODULE_OFFSET 0xF04
+#define DSPDMAC_DSPADRWOFS_CHAN_INCR 0x10
+
+#define DSPDMAC_DSPADRWOFS_INST_OFFSET(_chan) \
+ (DSPDMAC_CHIP_OFFSET + DSPDMAC_DSPADRWOFS_MODULE_OFFSET + \
+ (_chan * DSPDMAC_DSPADRWOFS_CHAN_INCR))
+
+#define DSPDMAC_DSPADRWOFS_WCOFS_LOBIT 0x0
+#define DSPDMAC_DSPADRWOFS_WCOFS_HIBIT 0xA
+#define DSPDMAC_DSPADRWOFS_WCOFS_MASK 0x7FF
+
+#define DSPDMAC_DSPADRWOFS_WCBFR_LOBIT 0xB
+#define DSPDMAC_DSPADRWOFS_WCBFR_HIBIT 0xF
+#define DSPDMAC_DSPADRWOFS_WCBFR_MASK 0xF800
+
+#define DSPDMAC_DSPADRWOFS_WBOFS_LOBIT 0x10
+#define DSPDMAC_DSPADRWOFS_WBOFS_HIBIT 0x1A
+#define DSPDMAC_DSPADRWOFS_WBOFS_MASK 0x7FF0000
+
+#define DSPDMAC_DSPADRWOFS_WBBFR_LOBIT 0x1B
+#define DSPDMAC_DSPADRWOFS_WBBFR_HIBIT 0x1F
+#define DSPDMAC_DSPADRWOFS_WBBFR_MASK 0xF8000000
+
+#define DSPDMAC_DSP_ADR_GOFS_CHANNEL_COUNT 12
+#define DSPDMAC_DSPADRGOFS_MODULE_OFFSET 0xF04
+#define DSPDMAC_DSPADRGOFS_CHAN_INCR 0x10
+#define DSPDMAC_DSPADRGOFS_INST_OFFSET(_chan) \
+ (DSPDMAC_CHIP_OFFSET + DSPDMAC_DSPADRGOFS_MODULE_OFFSET + \
+ (_chan * DSPDMAC_DSPADRGOFS_CHAN_INCR))
+
+#define DSPDMAC_DSPADRGOFS_GCOFS_LOBIT 0x0
+#define DSPDMAC_DSPADRGOFS_GCOFS_HIBIT 0x9
+#define DSPDMAC_DSPADRGOFS_GCOFS_MASK 0x3FF
+
+#define DSPDMAC_DSPADRGOFS_GCS_LOBIT 0xA
+#define DSPDMAC_DSPADRGOFS_GCS_HIBIT 0xC
+#define DSPDMAC_DSPADRGOFS_GCS_MASK 0x1C00
+
+#define DSPDMAC_DSPADRGOFS_GCBFR_LOBIT 0xD
+#define DSPDMAC_DSPADRGOFS_GCBFR_HIBIT 0xF
+#define DSPDMAC_DSPADRGOFS_GCBFR_MASK 0xE000
+
+#define DSPDMAC_DSPADRGOFS_GBOFS_LOBIT 0x10
+#define DSPDMAC_DSPADRGOFS_GBOFS_HIBIT 0x19
+#define DSPDMAC_DSPADRGOFS_GBOFS_MASK 0x3FF0000
+
+#define DSPDMAC_DSPADRGOFS_GBS_LOBIT 0x1A
+#define DSPDMAC_DSPADRGOFS_GBS_HIBIT 0x1C
+#define DSPDMAC_DSPADRGOFS_GBS_MASK 0x1C000000
+
+#define DSPDMAC_DSPADRGOFS_GBBFR_LOBIT 0x1D
+#define DSPDMAC_DSPADRGOFS_GBBFR_HIBIT 0x1F
+#define DSPDMAC_DSPADRGOFS_GBBFR_MASK 0xE0000000
+
+#define DSPDMAC_XFR_CNT_CHANNEL_COUNT 12
+#define DSPDMAC_XFRCNT_MODULE_OFFSET 0xF08
+#define DSPDMAC_XFRCNT_CHAN_INCR 0x10
+
+#define DSPDMAC_XFRCNT_INST_OFFSET(_chan) \
+ (DSPDMAC_CHIP_OFFSET + DSPDMAC_XFRCNT_MODULE_OFFSET + \
+ (_chan * DSPDMAC_XFRCNT_CHAN_INCR))
+
+#define DSPDMAC_XFRCNT_CCNT_LOBIT 0x0
+#define DSPDMAC_XFRCNT_CCNT_HIBIT 0xF
+#define DSPDMAC_XFRCNT_CCNT_MASK 0xFFFF
+
+#define DSPDMAC_XFRCNT_BCNT_LOBIT 0x10
+#define DSPDMAC_XFRCNT_BCNT_HIBIT 0x1F
+#define DSPDMAC_XFRCNT_BCNT_MASK 0xFFFF0000
+
+#define DSPDMAC_IRQ_CNT_CHANNEL_COUNT 12
+#define DSPDMAC_IRQCNT_MODULE_OFFSET 0xF0C
+#define DSPDMAC_IRQCNT_CHAN_INCR 0x10
+#define DSPDMAC_IRQCNT_INST_OFFSET(_chan) \
+ (DSPDMAC_CHIP_OFFSET + DSPDMAC_IRQCNT_MODULE_OFFSET + \
+ (_chan * DSPDMAC_IRQCNT_CHAN_INCR))
+
+#define DSPDMAC_IRQCNT_CICNT_LOBIT 0x0
+#define DSPDMAC_IRQCNT_CICNT_HIBIT 0xF
+#define DSPDMAC_IRQCNT_CICNT_MASK 0xFFFF
+
+#define DSPDMAC_IRQCNT_BICNT_LOBIT 0x10
+#define DSPDMAC_IRQCNT_BICNT_HIBIT 0x1F
+#define DSPDMAC_IRQCNT_BICNT_MASK 0xFFFF0000
+
+#define DSPDMAC_AUD_CHSEL_CHANNEL_COUNT 12
+#define DSPDMAC_AUDCHSEL_MODULE_OFFSET 0xFC0
+#define DSPDMAC_AUDCHSEL_CHAN_INCR 0x4
+#define DSPDMAC_AUDCHSEL_INST_OFFSET(_chan) \
+ (DSPDMAC_CHIP_OFFSET + DSPDMAC_AUDCHSEL_MODULE_OFFSET + \
+ (_chan * DSPDMAC_AUDCHSEL_CHAN_INCR))
+
+#define DSPDMAC_AUDCHSEL_ACS_LOBIT 0x0
+#define DSPDMAC_AUDCHSEL_ACS_HIBIT 0x1F
+#define DSPDMAC_AUDCHSEL_ACS_MASK 0xFFFFFFFF
+
+#define DSPDMAC_CHNLSTART_MODULE_OFFSET 0xFF0
+#define DSPDMAC_CHNLSTART_INST_OFFSET \
+ (DSPDMAC_CHIP_OFFSET + DSPDMAC_CHNLSTART_MODULE_OFFSET)
+
+#define DSPDMAC_CHNLSTART_EN_LOBIT 0x0
+#define DSPDMAC_CHNLSTART_EN_HIBIT 0xB
+#define DSPDMAC_CHNLSTART_EN_MASK 0xFFF
+
+#define DSPDMAC_CHNLSTART_VAI1_LOBIT 0xC
+#define DSPDMAC_CHNLSTART_VAI1_HIBIT 0xF
+#define DSPDMAC_CHNLSTART_VAI1_MASK 0xF000
+
+#define DSPDMAC_CHNLSTART_DIS_LOBIT 0x10
+#define DSPDMAC_CHNLSTART_DIS_HIBIT 0x1B
+#define DSPDMAC_CHNLSTART_DIS_MASK 0xFFF0000
+
+#define DSPDMAC_CHNLSTART_VAI2_LOBIT 0x1C
+#define DSPDMAC_CHNLSTART_VAI2_HIBIT 0x1F
+#define DSPDMAC_CHNLSTART_VAI2_MASK 0xF0000000
+
+#define DSPDMAC_CHNLSTATUS_MODULE_OFFSET 0xFF4
+#define DSPDMAC_CHNLSTATUS_INST_OFFSET \
+ (DSPDMAC_CHIP_OFFSET + DSPDMAC_CHNLSTATUS_MODULE_OFFSET)
+
+#define DSPDMAC_CHNLSTATUS_ISC_LOBIT 0x0
+#define DSPDMAC_CHNLSTATUS_ISC_HIBIT 0xB
+#define DSPDMAC_CHNLSTATUS_ISC_MASK 0xFFF
+
+#define DSPDMAC_CHNLSTATUS_AOO_LOBIT 0xC
+#define DSPDMAC_CHNLSTATUS_AOO_HIBIT 0xC
+#define DSPDMAC_CHNLSTATUS_AOO_MASK 0x1000
+
+#define DSPDMAC_CHNLSTATUS_AOU_LOBIT 0xD
+#define DSPDMAC_CHNLSTATUS_AOU_HIBIT 0xD
+#define DSPDMAC_CHNLSTATUS_AOU_MASK 0x2000
+
+#define DSPDMAC_CHNLSTATUS_AIO_LOBIT 0xE
+#define DSPDMAC_CHNLSTATUS_AIO_HIBIT 0xE
+#define DSPDMAC_CHNLSTATUS_AIO_MASK 0x4000
+
+#define DSPDMAC_CHNLSTATUS_AIU_LOBIT 0xF
+#define DSPDMAC_CHNLSTATUS_AIU_HIBIT 0xF
+#define DSPDMAC_CHNLSTATUS_AIU_MASK 0x8000
+
+#define DSPDMAC_CHNLSTATUS_IEN_LOBIT 0x10
+#define DSPDMAC_CHNLSTATUS_IEN_HIBIT 0x1B
+#define DSPDMAC_CHNLSTATUS_IEN_MASK 0xFFF0000
+
+#define DSPDMAC_CHNLSTATUS_VAI0_LOBIT 0x1C
+#define DSPDMAC_CHNLSTATUS_VAI0_HIBIT 0x1F
+#define DSPDMAC_CHNLSTATUS_VAI0_MASK 0xF0000000
+
+#define DSPDMAC_CHNLPROP_MODULE_OFFSET 0xFF8
+#define DSPDMAC_CHNLPROP_INST_OFFSET \
+ (DSPDMAC_CHIP_OFFSET + DSPDMAC_CHNLPROP_MODULE_OFFSET)
+
+#define DSPDMAC_CHNLPROP_DCON_LOBIT 0x0
+#define DSPDMAC_CHNLPROP_DCON_HIBIT 0xB
+#define DSPDMAC_CHNLPROP_DCON_MASK 0xFFF
+
+#define DSPDMAC_CHNLPROP_FFS_LOBIT 0xC
+#define DSPDMAC_CHNLPROP_FFS_HIBIT 0xC
+#define DSPDMAC_CHNLPROP_FFS_MASK 0x1000
+
+#define DSPDMAC_CHNLPROP_NAJ_LOBIT 0xD
+#define DSPDMAC_CHNLPROP_NAJ_HIBIT 0xD
+#define DSPDMAC_CHNLPROP_NAJ_MASK 0x2000
+
+#define DSPDMAC_CHNLPROP_ENH_LOBIT 0xE
+#define DSPDMAC_CHNLPROP_ENH_HIBIT 0xE
+#define DSPDMAC_CHNLPROP_ENH_MASK 0x4000
+
+#define DSPDMAC_CHNLPROP_MSPCE_LOBIT 0x10
+#define DSPDMAC_CHNLPROP_MSPCE_HIBIT 0x1B
+#define DSPDMAC_CHNLPROP_MSPCE_MASK 0xFFF0000
+
+#define DSPDMAC_CHNLPROP_AC_LOBIT 0x1C
+#define DSPDMAC_CHNLPROP_AC_HIBIT 0x1F
+#define DSPDMAC_CHNLPROP_AC_MASK 0xF0000000
+
+#define DSPDMAC_ACTIVE_MODULE_OFFSET 0xFFC
+#define DSPDMAC_ACTIVE_INST_OFFSET \
+ (DSPDMAC_CHIP_OFFSET + DSPDMAC_ACTIVE_MODULE_OFFSET)
+
+#define DSPDMAC_ACTIVE_AAR_LOBIT 0x0
+#define DSPDMAC_ACTIVE_AAR_HIBIT 0xB
+#define DSPDMAC_ACTIVE_AAR_MASK 0xFFF
+
+#define DSPDMAC_ACTIVE_WFR_LOBIT 0xC
+#define DSPDMAC_ACTIVE_WFR_HIBIT 0x17
+#define DSPDMAC_ACTIVE_WFR_MASK 0xFFF000
+
+#define DSP_AUX_MEM_BASE 0xE000
+#define INVALID_CHIP_ADDRESS (~0UL)
+
+#define X_SIZE (XRAM_XRAM_CHANNEL_COUNT * XRAM_XRAM_CHAN_INCR)
+#define Y_SIZE (YRAM_YRAM_CHANNEL_COUNT * YRAM_YRAM_CHAN_INCR)
+#define AX_SIZE (AXRAM_AXRAM_CHANNEL_COUNT * AXRAM_AXRAM_CHAN_INCR)
+#define AY_SIZE (AYRAM_AYRAM_CHANNEL_COUNT * AYRAM_AYRAM_CHAN_INCR)
+#define UC_SIZE (UC_UC_CHANNEL_COUNT * UC_UC_CHAN_INCR)
+
+#define XEXT_SIZE (X_SIZE + AX_SIZE)
+#define YEXT_SIZE (Y_SIZE + AY_SIZE)
+
+#define U64K 0x10000UL
+
+#define X_END (XRAM_CHIP_OFFSET + X_SIZE)
+#define X_EXT (XRAM_CHIP_OFFSET + XEXT_SIZE)
+#define AX_END (XRAM_CHIP_OFFSET + U64K*4)
+
+#define Y_END (YRAM_CHIP_OFFSET + Y_SIZE)
+#define Y_EXT (YRAM_CHIP_OFFSET + YEXT_SIZE)
+#define AY_END (YRAM_CHIP_OFFSET + U64K*4)
+
+#define UC_END (UC_CHIP_OFFSET + UC_SIZE)
+
+#define X_RANGE_MAIN(a, s) \
+ (((a)+((s)-1)*XRAM_XRAM_CHAN_INCR < X_END))
+#define X_RANGE_AUX(a, s) \
+ (((a) >= X_END) && ((a)+((s)-1)*XRAM_XRAM_CHAN_INCR < AX_END))
+#define X_RANGE_EXT(a, s) \
+ (((a)+((s)-1)*XRAM_XRAM_CHAN_INCR < X_EXT))
+#define X_RANGE_ALL(a, s) \
+ (((a)+((s)-1)*XRAM_XRAM_CHAN_INCR < AX_END))
+
+#define Y_RANGE_MAIN(a, s) \
+ (((a) >= YRAM_CHIP_OFFSET) && \
+ ((a)+((s)-1)*YRAM_YRAM_CHAN_INCR < Y_END))
+#define Y_RANGE_AUX(a, s) \
+ (((a) >= Y_END) && \
+ ((a)+((s)-1)*YRAM_YRAM_CHAN_INCR < AY_END))
+#define Y_RANGE_EXT(a, s) \
+ (((a) >= YRAM_CHIP_OFFSET) && \
+ ((a)+((s)-1)*YRAM_YRAM_CHAN_INCR < Y_EXT))
+#define Y_RANGE_ALL(a, s) \
+ (((a) >= YRAM_CHIP_OFFSET) && \
+ ((a)+((s)-1)*YRAM_YRAM_CHAN_INCR < AY_END))
+
+#define UC_RANGE(a, s) \
+ (((a) >= UC_CHIP_OFFSET) && \
+ ((a)+((s)-1)*UC_UC_CHAN_INCR < UC_END))
+
+#define X_OFF(a) \
+ (((a) - XRAM_CHIP_OFFSET) / XRAM_XRAM_CHAN_INCR)
+#define AX_OFF(a) \
+ (((a) % (AXRAM_AXRAM_CHANNEL_COUNT * \
+ AXRAM_AXRAM_CHAN_INCR)) / AXRAM_AXRAM_CHAN_INCR)
+
+#define Y_OFF(a) \
+ (((a) - YRAM_CHIP_OFFSET) / YRAM_YRAM_CHAN_INCR)
+#define AY_OFF(a) \
+ (((a) % (AYRAM_AYRAM_CHANNEL_COUNT * \
+ AYRAM_AYRAM_CHAN_INCR)) / AYRAM_AYRAM_CHAN_INCR)
+
+#define UC_OFF(a) (((a) - UC_CHIP_OFFSET) / UC_UC_CHAN_INCR)
+
+#define X_EXT_MAIN_SIZE(a) (XRAM_XRAM_CHANNEL_COUNT - X_OFF(a))
+#define X_EXT_AUX_SIZE(a, s) ((s) - X_EXT_MAIN_SIZE(a))
+
+#define Y_EXT_MAIN_SIZE(a) (YRAM_YRAM_CHANNEL_COUNT - Y_OFF(a))
+#define Y_EXT_AUX_SIZE(a, s) ((s) - Y_EXT_MAIN_SIZE(a))
+
+#endif
diff --git a/sound/pci/hda/patch_ca0132/dsp_os.h b/sound/pci/hda/patch_ca0132/dsp_os.h
new file mode 100644
index 0000000..b23eb4e
--- /dev/null
+++ b/sound/pci/hda/patch_ca0132/dsp_os.h
@@ -0,0 +1,40981 @@
+/*-----------------------------------------------------------------------------
+// Generated by Coff2DspImage V0.3. (built on Thu Oct 7 14:48:09 2010)
+// ----
+// Input file: DspOS.x
+// Output file: dsp_os.h
+// On: 2011/09/14 05:13:02 UTC
+// ----
+// Copyright (c) 2011, Creative Technology Ltd.
+//---------------------------------------------------------------------------*/
+
+
+const u32 DspImage_dsp_os[] = {
+0x4c46584d, 0xffffff01, 0x8, 0x100d24,
+0xc, 0x100d34, 0xd, 0x100d38,
+0xe, 0x100d3c, 0xf, 0x4c46584d,
+0x80020, 0xfff8, 0x1e08000, 0xdd9100,
+0x64, 0x1883af, 0x100f0f, 0x1e08000,
+0xddd100, 0x64a, 0x1883af, 0x100f0a,
+0x1e08000, 0xde1100, 0xc30, 0x1883af,
+0x100f05, 0x1e08000, 0xde5100, 0x1216,
+0x1883af, 0x1e47fff, 0x1ffe000, 0x190190,
+0x400310, 0x1e08000, 0x2f34f, 0x1000000,
+0x1dbc0a, 0x1620000, 0x58fbb9, 0x1020001,
+0x1c0002c, 0x250000, 0x230000, 0x100fff,
+0xc8004c, 0x70000, 0xc80400, 0x1020001,
+0x1c0002a, 0xb00000, 0x108102, 0xc80002,
+0x1e08000, 0xde9200, 0x2, 0x188300,
+0xc82420, 0x1020001, 0x1c02bf2, 0x1008001,
+0x1c00028, 0xc80021, 0x1008001, 0x1c00028,
+0x240000, 0x1020001, 0x1c00845, 0xb00000,
+0x1181fd, 0x1020001, 0x1c0225f, 0xc80020,
+0x1020001, 0x1c01cd5, 0x0, 0x100ff6,
+0x240000, 0xc80021, 0x1020001, 0x1c01cd5,
+0x0, 0x100ffc, 0x240000, 0xc80022,
+0x1020001, 0x1c01cd5, 0x0, 0x100ffc,
+0x240000, 0xc80023, 0x1020001, 0x1c01cd5,
+0x0, 0x100ffc, 0x1e6ffff, 0x1ffc000,
+0x7f, 0x11803fc, 0x70000, 0xd10000,
+0x1e77fff, 0x1ffc000, 0x7f, 0x11803fc,
+0x70000, 0x1f30000, 0x610c, 0x1332160,
+0x193300, 0x130ff1, 0x1e77fff, 0x1ffc000,
+0x60, 0x9803fc, 0x110103, 0x771008,
+0x1081fa, 0xc80008, 0x70000, 0x1e08000,
+0x300, 0x102, 0x184310, 0x1b47fff,
+0x1fffc00, 0x31061, 0x180310, 0xd40c04,
+0xc0500, 0xc80030, 0x70000, 0x1647fff,
+0x1f00781, 0x70000, 0x1647fff, 0x1f00789,
+0x70000, 0x1647fff, 0x1f00791, 0x70000,
+0x1647fff, 0x1f00799, 0x70000, 0x1647fff,
+0x1f007a1, 0x70000, 0x1647fff, 0x1f007a9,
+0x70000, 0x1647fff, 0x1f007b1, 0x70000,
+0x1647fff, 0x1f007b9, 0x70000, 0x1647fff,
+0x1f007c1, 0x70000, 0x1647fff, 0x1f007c9,
+0x70000, 0x1647fff, 0x1f007d1, 0x70000,
+0x1647fff, 0x1f007d9, 0x70000, 0x1e08000,
+0x300, 0x162, 0x184310, 0x1b47fff,
+0x1fffc00, 0x31061, 0x180310, 0xd40c04,
+0xc0500, 0xc80030, 0x70000, 0x1647fff,
+0x1f00783, 0x70000, 0x1647fff, 0x1f0078b,
+0x70000, 0x1647fff, 0x1f00793, 0x70000,
+0x1647fff, 0x1f0079b, 0x70000, 0x1647fff,
+0x1f007a3, 0x70000, 0x1647fff, 0x1f007ab,
+0x70000, 0x1647fff, 0x1f007b3, 0x70000,
+0x1647fff, 0x1f007bb, 0x70000, 0x1647fff,
+0x1f007c3, 0x70000, 0x1647fff, 0x1f007cb,
+0x70000, 0x1647fff, 0x1f007d3, 0x70000,
+0x1647fff, 0x1f007db, 0x70000, 0x1b80000,
+0x604c, 0x1232761, 0x1903fe, 0x1fc0c81,
+0x120640c, 0x123fe61, 0x181300, 0x70000,
+0x1647fff, 0x1f007fb, 0x70000, 0x1647fff,
+0x1f007f9, 0x70000, 0xe81000, 0xb00022,
+0x100106, 0x1e6ffff, 0x1ffc000, 0x7f,
+0x15803fd, 0x70000, 0xd10000, 0x1e77fff,
+0x1ffc000, 0x7f, 0x15803fd, 0x70000,
+0xe81000, 0xb00022, 0x100106, 0x1e6ffff,
+0x1ffc000, 0x7f, 0x19803fe, 0x70000,
+0xd10000, 0x1e77fff, 0x1ffc000, 0x7f,
+0x19803fe, 0x70000, 0x16201ff, 0x1dfebfd,
+0x1647fff, 0x1ffe601, 0x1620000, 0x1ffbff,
+0x70000, 0x250000, 0x1620000, 0x58c318,
+0x0, 0x0, 0x1647fff, 0x1f00783,
+0x1647500, 0x30078b, 0x1647500, 0x300793,
+0x1647500, 0x30079b, 0x1647500, 0x3007a3,
+0x1647500, 0x3007ab, 0x1647500, 0x3007b3,
+0x1647500, 0x3007bb, 0x1647500, 0x3007c3,
+0x1647500, 0x3007cb, 0x1647500, 0x3007d3,
+0x1647500, 0x3007db, 0x1007400, 0x0,
+0x240000, 0x70000, 0x1e08000, 0x300,
+0x268, 0x184310, 0x1b47fff, 0x1fffc00,
+0x31061, 0x180310, 0xd40c04, 0xc0500,
+0xc80030, 0x70000, 0x1647fff, 0x1fc2605,
+0x70000, 0x1647fff, 0x1fc6605, 0x70000,
+0x1647fff, 0x1fca605, 0x70000, 0x1647fff,
+0x1fce605, 0x70000, 0x1647fff, 0x1fd2605,
+0x70000, 0x1647fff, 0x1fd6605, 0x70000,
+0x1647fff, 0x1fda605, 0x70000, 0x1647fff,
+0x1fde605, 0x70000, 0x1647fff, 0x1fe2605,
+0x70000, 0x1647fff, 0x1fe6605, 0x70000,
+0x1647fff, 0x1fea605, 0x70000, 0x1647fff,
+0x1fee605, 0x70000, 0x1e08000, 0x300,
+0x2c8, 0x184310, 0x1b47fff, 0x1fffc00,
+0x31061, 0x180310, 0xd40c04, 0xc0500,
+0xc80030, 0x70000, 0x1647fff, 0x1ff0605,
+0x70000, 0x1647fff, 0x1ff1605, 0x70000,
+0x1647fff, 0x1ff2605, 0x70000, 0x1647fff,
+0x1ff3605, 0x70000, 0x1647fff, 0x1ff4605,
+0x70000, 0x1647fff, 0x1ff5605, 0x70000,
+0x1647fff, 0x1ff6605, 0x70000, 0x1647fff,
+0x1ff7605, 0x70000, 0x1647fff, 0x1ff8605,
+0x70000, 0x1647fff, 0x1ff9605, 0x70000,
+0x1647fff, 0x1ffa605, 0x70000, 0x1647fff,
+0x1ffb605, 0x70000, 0x1e08000, 0x300,
+0x328, 0x184310, 0x1b47fff, 0x1fffc00,
+0x31061, 0x180310, 0xd40c04, 0xc0500,
+0xc80030, 0x70000, 0x1647fff, 0x1fc1605,
+0x70000, 0x1647fff, 0x1fc5605, 0x70000,
+0x1647fff, 0x1fc9605, 0x70000, 0x1647fff,
+0x1fcd605, 0x70000, 0x1647fff, 0x1fd1605,
+0x70000, 0x1647fff, 0x1fd5605, 0x70000,
+0x1647fff, 0x1fd9605, 0x70000, 0x1647fff,
+0x1fdd605, 0x70000, 0x1647fff, 0x1fe1605,
+0x70000, 0x1647fff, 0x1fe5605, 0x70000,
+0x1647fff, 0x1fe9605, 0x70000, 0x1647fff,
+0x1fed605, 0x70000, 0x1e08000, 0x300,
+0x388, 0x184310, 0x1b47fff, 0x1fffc00,
+0x31061, 0x180310, 0xd40c04, 0xc0500,
+0xc80030, 0x70000, 0x1647fff, 0x1fc3605,
+0x70000, 0x1647fff, 0x1fc7605, 0x70000,
+0x1647fff, 0x1fcb605, 0x70000, 0x1647fff,
+0x1fcf605, 0x70000, 0x1647fff, 0x1fd3605,
+0x70000, 0x1647fff, 0x1fd7605, 0x70000,
+0x1647fff, 0x1fdb605, 0x70000, 0x1647fff,
+0x1fdf605, 0x70000, 0x1647fff, 0x1fe3605,
+0x70000, 0x1647fff, 0x1fe7605, 0x70000,
+0x1647fff, 0x1feb605, 0x70000, 0x1647fff,
+0x1fef605, 0x70000, 0xc80420, 0x1d0007,
+0x1447fff, 0x1c46020, 0x1b77f00, 0x1ffd0,
+0x7e261, 0x190320, 0x1007981, 0x1800000,
+0xc80002, 0x70000, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x1008001,
+0x1c0d661, 0x0, 0x0, 0x0,
+0x1020001, 0x1c0003b, 0x0, 0x0,
+0x1020001, 0x1c0003b, 0x0, 0x1008001,
+0x1c0d654, 0x0, 0x0, 0x0,
+0x1020001, 0x1c0003b, 0x0, 0x0,
+0x1020001, 0x1c0003b, 0x0, 0x0,
+0x1020001, 0x1c0003b, 0x0, 0x1008001,
+0x1c004ac, 0x0, 0x0, 0x0,
+0x1020001, 0x1c0003b, 0x0, 0x0,
+0x1020001, 0x1c0003b, 0x0, 0x1008001,
+0x1c00464, 0x0, 0x0, 0x1008001,
+0x1c00469, 0x0, 0x0, 0x1008001,
+0x1c0046e, 0x0, 0x0, 0x1008001,
+0x1c00473, 0x0, 0x0, 0x1008001,
+0x1c00478, 0x0, 0x0, 0x1008001,
+0x1c0047d, 0x0, 0x0, 0x1008001,
+0x1c00482, 0x0, 0x0, 0x1008001,
+0x1c00487, 0x0, 0x0, 0x0,
+0x1020001, 0x1c0003b, 0x0, 0x1008001,
+0x1c004a0, 0x0, 0x0, 0x1008001,
+0x1c004a4, 0x0, 0x0, 0x1008001,
+0x1c004a8, 0x0, 0x0, 0x1008001,
+0x1c0048c, 0x0, 0x0, 0x1008001,
+0x1c00491, 0x0, 0x0, 0x1008001,
+0x1c00496, 0x0, 0x0, 0x1008001,
+0x1c0049b, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x1008001,
+0x1c0d661, 0x0, 0x0, 0x0,
+0x1020001, 0x1c0003b, 0x0, 0x0,
+0x1020001, 0x1c0003b, 0x0, 0x0,
+0x1020001, 0x1c0003b, 0x0, 0x0,
+0x1020001, 0x1c0003b, 0x0, 0x0,
+0x1020001, 0x1c0003b, 0x0, 0x0,
+0x1020001, 0x1c0003b, 0x0, 0x0,
+0x1020001, 0x1c0003b, 0x0, 0x0,
+0x1020001, 0x1c0003b, 0x0, 0x0,
+0x1020001, 0x1c0003b, 0x0, 0x1008001,
+0x1c00663, 0x0, 0x0, 0x1008001,
+0x1c00669, 0x0, 0x0, 0x1008001,
+0x1c0066f, 0x0, 0x0, 0x1008001,
+0x1c00675, 0x0, 0x0, 0x1008001,
+0x1c0067b, 0x0, 0x0, 0x1008001,
+0x1c00681, 0x0, 0x0, 0x1008001,
+0x1c00687, 0x0, 0x0, 0x1008001,
+0x1c0068d, 0x0, 0x0, 0x0,
+0x1020001, 0x1c0003b, 0x0, 0x1008001,
+0x1c006ab, 0x0, 0x0, 0x1008001,
+0x1c006af, 0x0, 0x0, 0x1008001,
+0x1c006b3, 0x0, 0x0, 0x1008001,
+0x1c00693, 0x0, 0x0, 0x1008001,
+0x1c00699, 0x0, 0x0, 0x1008001,
+0x1c0069f, 0x0, 0x0, 0x1008001,
+0x1c006a5, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x1008001,
+0x1c0d661, 0x0, 0x0, 0x0,
+0x1020001, 0x1c0003b, 0x0, 0x0,
+0x1020001, 0x1c0003b, 0x0, 0x0,
+0x1020001, 0x1c0003b, 0x0, 0x0,
+0x1020001, 0x1c0003b, 0x0, 0x0,
+0x1020001, 0x1c0003b, 0x0, 0x0,
+0x1020001, 0x1c0003b, 0x0, 0x0,
+0x1020001, 0x1c0003b, 0x0, 0x0,
+0x1020001, 0x1c0003b, 0x0, 0x0,
+0x1020001, 0x1c0003b, 0x0, 0x1008001,
+0x1c006b7, 0x0, 0x0, 0x1008001,
+0x1c006bd, 0x0, 0x0, 0x1008001,
+0x1c006c3, 0x0, 0x0, 0x1008001,
+0x1c006c9, 0x0, 0x0, 0x1008001,
+0x1c006cf, 0x0, 0x0, 0x1008001,
+0x1c006d5, 0x0, 0x0, 0x1008001,
+0x1c006db, 0x0, 0x0, 0x1008001,
+0x1c006e1, 0x0, 0x0, 0x0,
+0x1020001, 0x1c0003b, 0x0, 0x1008001,
+0x1c006ff, 0x0, 0x0, 0x1008001,
+0x1c00703, 0x0, 0x0, 0x1008001,
+0x1c00707, 0x0, 0x0, 0x1008001,
+0x1c006e7, 0x0, 0x0, 0x1008001,
+0x1c006ed, 0x0, 0x0, 0x1008001,
+0x1c006f3, 0x0, 0x0, 0x1008001,
+0x1c006f9, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x1008001,
+0x1c0d661, 0x0, 0x0, 0x0,
+0x1020001, 0x1c0003b, 0x0, 0x0,
+0x1020001, 0x1c0003b, 0x0, 0x0,
+0x1020001, 0x1c0003b, 0x0, 0x0,
+0x1020001, 0x1c0003b, 0x0, 0x0,
+0x1020001, 0x1c0003b, 0x0, 0x0,
+0x1020001, 0x1c0003b, 0x0, 0x0,
+0x1020001, 0x1c0003b, 0x0, 0x0,
+0x1020001, 0x1c0003b, 0x0, 0x0,
+0x1020001, 0x1c0003b, 0x0, 0x1008001,
+0x1c0070b, 0x0, 0x0, 0x1008001,
+0x1c00711, 0x0, 0x0, 0x1008001,
+0x1c00717, 0x0, 0x0, 0x1008001,
+0x1c0071d, 0x0, 0x0, 0x1008001,
+0x1c00723, 0x0, 0x0, 0x1008001,
+0x1c00729, 0x0, 0x0, 0x1008001,
+0x1c0072f, 0x0, 0x0, 0x1008001,
+0x1c00735, 0x0, 0x0, 0x0,
+0x1020001, 0x1c0003b, 0x0, 0x1008001,
+0x1c00753, 0x0, 0x0, 0x1008001,
+0x1c00757, 0x0, 0x0, 0x1008001,
+0x1c0075b, 0x0, 0x0, 0x1008001,
+0x1c0073b, 0x0, 0x0, 0x1008001,
+0x1c00741, 0x0, 0x0, 0x1008001,
+0x1c00747, 0x0, 0x0, 0x1008001,
+0x1c0074d, 0x1e08000, 0x300, 0x7e6,
+0x184310, 0x1b47fff, 0x1fffc00, 0x31061,
+0x180310, 0xd40c04, 0xc0500, 0xc80030,
+0x70000, 0x1647fff, 0x1fc0605, 0x70000,
+0x1647fff, 0x1fc4605, 0x70000, 0x1647fff,
+0x1fc8605, 0x70000, 0x1647fff, 0x1fcc605,
+0x70000, 0x1647fff, 0x1fd0605, 0x70000,
+0x1647fff, 0x1fd4605, 0x70000, 0x1647fff,
+0x1fd8605, 0x70000, 0x1647fff, 0x1fdc605,
+0x70000, 0x1647fff, 0x1fe0605, 0x70000,
+0x1647fff, 0x1fe4605, 0x70000, 0x1647fff,
+0x1fe8605, 0x70000, 0x1647fff, 0x1fec605,
+0x70000, 0x1e6ffff, 0x1ffc000, 0x77,
+0x5803b9, 0x70000, 0xd10000, 0x1e77fff,
+0x1ffc000, 0x77, 0x5803b9, 0x70000,
+0x1b77fff, 0x1ffc000, 0x71, 0x1d90b20,
+0x70000, 0x250000, 0x70000, 0x240000,
+0x70000, 0x1b47fff, 0x1fffc00, 0x30064,
+0x1180302, 0x1e08000, 0x0, 0x878,
+0x190302, 0x1b47fff, 0x1fffc00, 0x31064,
+0x980302, 0xd41004, 0x118502, 0xc0f00,
+0x0, 0x70000, 0x220000, 0x70000,
+0x220001, 0x70000, 0x220002, 0x70000,
+0x220003, 0x70000, 0x220004, 0x70000,
+0x220005, 0x70000, 0x220006, 0x70000,
+0x220007, 0x70000, 0x220008, 0x70000,
+0x220009, 0x70000, 0x22000a, 0x70000,
+0x22000b, 0x70000, 0x22000c, 0x70000,
+0x22000d, 0x70000, 0x22000e, 0x70000,
+0x22000f, 0x70000, 0xc8bc20, 0x1638000,
+0x5afb5f, 0x1e08000, 0xd0, 0x0,
+0x19035e, 0x70000, 0x100750f, 0x1800000,
+0x1620000, 0x180300, 0x100f48, 0x100750f,
+0x1800000, 0x1620000, 0x580300, 0x100f43,
+0x100750f, 0x1800000, 0x1620000, 0x980300,
+0x100f3e, 0x100750f, 0x1800000, 0x1620000,
+0xd80300, 0x100f39, 0x100750f, 0x1800000,
+0x1620000, 0x1180300, 0x100f34, 0x100750f,
+0x1800000, 0x1620000, 0x1580300, 0x100f2f,
+0x100750f, 0x1800000, 0x1620000, 0x1980300,
+0x100f2a, 0x100750f, 0x1800000, 0x1620000,
+0x1d80300, 0x100f25, 0x100750f, 0x1800000,
+0x1620001, 0x180300, 0x100f20, 0x100750f,
+0x1800000, 0x1620001, 0x580300, 0x100f1b,
+0x100750f, 0x1800000, 0x1620001, 0x980300,
+0x100f16, 0x100750f, 0x1800000, 0x1620001,
+0xd80300, 0x100f11, 0x164750f, 0x1b00643,
+0x1008001, 0x1c005b0, 0x164750f, 0x1b00645,
+0x1008001, 0x1c005b0, 0x164750f, 0x1b00647,
+0x1008001, 0x1c005b0, 0x164750f, 0x1b00641,
+0x1008001, 0x1c005b0, 0x1e46655, 0x1ffe000,
+0x18518c, 0x302310, 0x164455f, 0x1f18601,
+0x1e08000, 0x0, 0x1bd4c, 0x190310,
+0xc8044c, 0x320000, 0xd41004, 0x1010010,
+0x14005a5, 0xd40804, 0x1010000, 0x800580,
+0xd40024, 0x1010010, 0x400580, 0x1e08000,
+0x0, 0x1bd64, 0x190310, 0x1b47fff,
+0x1fffc00, 0x31064, 0x1580310, 0x0,
+0x360aa0, 0xd405a4, 0x1010000, 0x800580,
+0x100411f, 0x1c00000, 0x100433f, 0x1c00000,
+0x100455f, 0x1c00000, 0x100477f, 0x1c00000,
+0x165499f, 0x1e4c889, 0x1654bbf, 0x1ecd98b,
+0x1e46633, 0x1ffe000, 0x18498c, 0x301310,
+0x1e46677, 0x1ffe000, 0x18598c, 0x1303311,
+0x1e46633, 0x1ffe000, 0x18498d, 0x301312,
+0x1e46677, 0x1ffe000, 0x18598d, 0x1303313,
+0x1e46633, 0x1ffe000, 0x18498e, 0x301314,
+0x1e46677, 0x1ffe000, 0x18598e, 0x1303315,
+0x1e46633, 0x1ffe000, 0x18498f, 0x301316,
+0x1e46677, 0x1ffe000, 0x1859d4, 0x3033b0,
+0x1e46633, 0x1ffe000, 0x1849d4, 0x13013b1,
+0x1e46677, 0x1ffe000, 0x1859d5, 0x3033b2,
+0x1e46633, 0x1ffe000, 0x1849d5, 0x13013b3,
+0x1e46677, 0x1ffe000, 0x1859d6, 0x3033b4,
+0x1e46633, 0x1ffe000, 0x1849d6, 0x13013b5,
+0x1e46677, 0x1ffe000, 0x1859d7, 0x3033b6,
+0x1e46633, 0x1ffe000, 0x1d8990, 0x3b0320,
+0x1e46677, 0x1ffe000, 0x1d9990, 0x3b2320,
+0x1e46299, 0x1ffe000, 0x1da990, 0x3b4320,
+0x1644baf, 0x1fb6641, 0x1004ddf, 0x1c00000,
+0x1004fff, 0x1c00000, 0x1020001, 0x1c00d5f,
+0x11b7ff7, 0x17ffe77, 0x11b7fe7, 0x7ffc67,
+0x11a7fd6, 0x17ffa57, 0x11a7fc6, 0x7ff847,
+0x11b7fb5, 0x17ff637, 0x1e47fff, 0x1ffe000,
+0x1d7185, 0x13b6303, 0x11b7fa5, 0x17ff437,
+0x11b7f94, 0x17ff217, 0x1e47fff, 0x1ffe000,
+0x1d6985, 0x13b5303, 0x1e47fff, 0x1ffe000,
+0x1d6184, 0x13b4301, 0x11b7f85, 0x17ff037,
+0x11b7f74, 0x17fee17, 0x1e47fff, 0x1ffe000,
+0x1d5985, 0x13b3303, 0x1e47fff, 0x1ffe000,
+0x1d5184, 0x13b2301, 0x11b7f65, 0x17fec37,
+0x11b7f54, 0x17fea17, 0x1e47fff, 0x1ffe000,
+0x1d4985, 0x13b1303, 0x1e47fff, 0x1ffe000,
+0x1d4184, 0x13b0301, 0x11b7f4f, 0x7fe967,
+0x11b7f3e, 0x17fe757, 0x11b7f2e, 0x7fe547,
+0x11b7f1d, 0x17fe337, 0x11b7f0d, 0x7fe127,
+0x11b7efc, 0x17fdf17, 0x11b7eec, 0x7fdd07,
+0x11b7ed5, 0x17fda37, 0x11b7ec4, 0x17fd817,
+0xcad757, 0xcac343, 0x11b7eb5, 0x17fd637,
+0x11b7ea4, 0x17fd417, 0xc8d757, 0xc8c343,
+0x11b7e95, 0x17fd237, 0x11b7e85, 0x7fd027,
+0x11b7e74, 0x17fce17, 0x11b7e64, 0x7fcc07,
+0x1581ffc, 0x198bb17, 0xd40024, 0x10810e,
+0xd40904, 0x10810c, 0x100411f, 0x1c00000,
+0x1647d00, 0xdff8, 0x1020001, 0x1c000a5,
+0x1647c00, 0xdff9, 0x11b7ff4, 0x7ffe07,
+0x772e17, 0x1e08000, 0x0, 0x1bffc,
+0x190310, 0x1b47fff, 0x1fffc00, 0x30064,
+0x1180302, 0x1377fff, 0x1c80010, 0x0,
+0x1737fff, 0x1c12360, 0x1f38000, 0x600c,
+0x1336060, 0x993302, 0x169ffff, 0x1c22002,
+0x11010b, 0x1020000, 0xc0042b, 0x11b7ffc,
+0x7fff07, 0x11b7fe5, 0x7ffc27, 0x36fa07,
+0x1581fff, 0x158bb17, 0x160000, 0x1020001,
+0x1c0045c, 0x100ff6, 0x100411f, 0x1c00000,
+0x100433f, 0x1c00000, 0x100455f, 0x1c00000,
+0x100477f, 0x1c00000, 0x165499f, 0x1e4c889,
+0x1654bbf, 0x1ecd98b, 0x1e46633, 0x1ffe000,
+0x18498c, 0x301310, 0x1e46677, 0x1ffe000,
+0x18598c, 0x1303311, 0x1e46633, 0x1ffe000,
+0x18498d, 0x301312, 0x1e46677, 0x1ffe000,
+0x18598d, 0x1303313, 0x1e46633, 0x1ffe000,
+0x18498e, 0x301314, 0x1e46677, 0x1ffe000,
+0x18598e, 0x1303315, 0x1e46633, 0x1ffe000,
+0x18498f, 0x301316, 0x1e46677, 0x1ffe000,
+0x1859d4, 0x3033b0, 0x1e46633, 0x1ffe000,
+0x1849d4, 0x13013b1, 0x1e46677, 0x1ffe000,
+0x1859d5, 0x3033b2, 0x1e46633, 0x1ffe000,
+0x1849d5, 0x13013b3, 0x1e46677, 0x1ffe000,
+0x1859d6, 0x3033b4, 0x1e46633, 0x1ffe000,
+0x1849d6, 0x13013b5, 0x1e46677, 0x1ffe000,
+0x1859d7, 0x3033b6, 0x1e46633, 0x1ffe000,
+0x1d8990, 0x3b0320, 0x1e46677, 0x1ffe000,
+0x1d9990, 0x3b2320, 0x1e46299, 0x1ffe000,
+0x1da990, 0x3b4320, 0x1644baf, 0x1fb6641,
+0x1004ddf, 0x1c00000, 0x1004fff, 0x1c00000,
+0xc8044c, 0x1020001, 0x1c0128a, 0x11b7ff7,
+0x17ffe77, 0x11b7fe7, 0x7ffc67, 0x11a7fd6,
+0x17ffa57, 0x11a7fc6, 0x7ff847, 0x11b7fb5,
+0x17ff637, 0x1e47fff, 0x1ffe000, 0x1d7185,
+0x13b6303, 0x11b7fa5, 0x17ff437, 0x11b7f94,
+0x17ff217, 0x1e47fff, 0x1ffe000, 0x1d6985,
+0x13b5303, 0x1e47fff, 0x1ffe000, 0x1d6184,
+0x13b4301, 0x11b7f85, 0x17ff037, 0x11b7f74,
+0x17fee17, 0x1e47fff, 0x1ffe000, 0x1d5985,
+0x13b3303, 0x1e47fff, 0x1ffe000, 0x1d5184,
+0x13b2301, 0x11b7f65, 0x17fec37, 0x11b7f54,
+0x17fea17, 0x1e47fff, 0x1ffe000, 0x1d4985,
+0x13b1303, 0x1e47fff, 0x1ffe000, 0x1d4184,
+0x13b0301, 0x11b7f4f, 0x7fe967, 0x11b7f3e,
+0x17fe757, 0x11b7f2e, 0x7fe547, 0x11b7f1d,
+0x17fe337, 0x11b7f0d, 0x7fe127, 0x11b7efc,
+0x17fdf17, 0x11b7eec, 0x7fdd07, 0x11b7ed5,
+0x17fda37, 0x11b7ec4, 0x17fd817, 0xcad757,
+0xcac343, 0x11b7eb5, 0x17fd637, 0x11b7ea4,
+0x17fd417, 0xc8d757, 0xc8c343, 0x11b7e95,
+0x17fd237, 0x11b7e85, 0x7fd027, 0x11b7e74,
+0x17fce17, 0x11b7e64, 0x7fcc07, 0x1581ffc,
+0x198bb17, 0x0, 0x36fe07, 0x772e17,
+0x160000, 0x100750f, 0x1800000, 0x1620000,
+0x180300, 0x1008001, 0x1c004b0, 0x100750f,
+0x1800000, 0x1620000, 0x580300, 0x1008001,
+0x1c004b0, 0x100750f, 0x1800000, 0x1620000,
+0x980300, 0x1008001, 0x1c004b0, 0x100750f,
+0x1800000, 0x1620000, 0xd80300, 0x1008001,
+0x1c004b0, 0x100750f, 0x1800000, 0x1620000,
+0x1180300, 0x1008001, 0x1c004b0, 0x100750f,
+0x1800000, 0x1620000, 0x1580300, 0x1008001,
+0x1c004b0, 0x100750f, 0x1800000, 0x1620000,
+0x1980300, 0x1008001, 0x1c004b0, 0x100750f,
+0x1800000, 0x1620000, 0x1d80300, 0x1008001,
+0x1c004b0, 0x100750f, 0x1800000, 0x1620001,
+0x180300, 0x1008001, 0x1c004b0, 0x100750f,
+0x1800000, 0x1620001, 0x580300, 0x1008001,
+0x1c004b0, 0x100750f, 0x1800000, 0x1620001,
+0x980300, 0x1008001, 0x1c004b0, 0x100750f,
+0x1800000, 0x1620001, 0xd80300, 0x1008001,
+0x1c004b0, 0x164750f, 0x1b00643, 0x1008001,
+0x1c005b0, 0x164750f, 0x1b00645, 0x1008001,
+0x1c005b0, 0x164750f, 0x1b00647, 0x1008001,
+0x1c005b0, 0x100750f, 0x1800000, 0x1620000,
+0x180300, 0x1008001, 0x1c004b0, 0x100750f,
+0x1800000, 0x1620000, 0x580300, 0x1008001,
+0x1c004b0, 0x100750f, 0x1800000, 0x1620000,
+0x980300, 0x1008001, 0x1c004b0, 0x100750f,
+0x1800000, 0x1620000, 0xd80300, 0x1008001,
+0x1c004b0, 0x100750f, 0x1800000, 0x1620000,
+0x1180300, 0x1008001, 0x1c004b0, 0x100750f,
+0x1800000, 0x1620000, 0x1580300, 0x1008001,
+0x1c004b0, 0x100750f, 0x1800000, 0x1620000,
+0x1980300, 0x1008001, 0x1c004b0, 0x100750f,
+0x1800000, 0x1620000, 0x1d80300, 0x1008001,
+0x1c004b0, 0x100750f, 0x1800000, 0x1620001,
+0x180300, 0x1008001, 0x1c004b0, 0x100750f,
+0x1800000, 0x1620001, 0x580300, 0x1008001,
+0x1c004b0, 0x100750f, 0x1800000, 0x1620001,
+0x980300, 0x1008001, 0x1c004b0, 0x100750f,
+0x1800000, 0x1620001, 0xd80300, 0x1008001,
+0x1c004b0, 0x164750f, 0x1b00643, 0x1008001,
+0x1c005b0, 0x164750f, 0x1b00645, 0x1008001,
+0x1c005b0, 0x164750f, 0x1b00647, 0x1008001,
+0x1c005b0, 0x100750f, 0x1800000, 0x1620000,
+0x180300, 0x1008001, 0x1c004b0, 0x100750f,
+0x1800000, 0x1620000, 0x580300, 0x1008001,
+0x1c004b0, 0x100750f, 0x1800000, 0x1620000,
+0x980300, 0x1008001, 0x1c004b0, 0x100750f,
+0x1800000, 0x1620000, 0xd80300, 0x1008001,
+0x1c004b0, 0x100750f, 0x1800000, 0x1620000,
+0x1180300, 0x1008001, 0x1c004b0, 0x100750f,
+0x1800000, 0x1620000, 0x1580300, 0x1008001,
+0x1c004b0, 0x100750f, 0x1800000, 0x1620000,
+0x1980300, 0x1008001, 0x1c004b0, 0x100750f,
+0x1800000, 0x1620000, 0x1d80300, 0x1008001,
+0x1c004b0, 0x100750f, 0x1800000, 0x1620001,
+0x180300, 0x1008001, 0x1c004b0, 0x100750f,
+0x1800000, 0x1620001, 0x580300, 0x1008001,
+0x1c004b0, 0x100750f, 0x1800000, 0x1620001,
+0x980300, 0x1008001, 0x1c004b0, 0x100750f,
+0x1800000, 0x1620001, 0xd80300, 0x1008001,
+0x1c004b0, 0x164750f, 0x1b00643, 0x1008001,
+0x1c005b0, 0x164750f, 0x1b00645, 0x1008001,
+0x1c005b0, 0x164750f, 0x1b00647, 0x1008001,
+0x1c005b0, 0x1e47fff, 0x1ffe000, 0x18718d,
+0x1306313, 0x1004ddf, 0x1c00000, 0x1bd0000,
+0x768c, 0x30275, 0x1190b14, 0x1e47fff,
+0x1ffe000, 0x1db181, 0x3ae316, 0x3602e1,
+0x1b70000, 0x62cc, 0x731662, 0x11b1314,
+0x1b70000, 0x63cc, 0x1832060, 0x998302,
+0x360262, 0x3604e2, 0x1e47fff, 0x1ffe000,
+0x1d9987, 0x3ab306, 0x3604a1, 0x1e47fff,
+0x1ffe000, 0x183180, 0x313364, 0x10d0001,
+0x799, 0x77140a, 0x100307, 0x100690d,
+0x1000000, 0x1006907, 0x1800000, 0x164780c,
+0x30a60d, 0x1aa5211, 0x179e040, 0x200860,
+0x1180300, 0x10d0000, 0x800791, 0x1c15211,
+0x179e040, 0x80060, 0x1180308, 0x1c17fff,
+0x1ffe040, 0x80060, 0x1180308, 0x1007941,
+0x1800000, 0x1b80000, 0x62ce, 0x1731662,
+0x11d6314, 0x3704a1, 0x370141, 0x370361,
+0x370132, 0x1620000, 0x1db3b4, 0x1620000,
+0x1d9bb3, 0x11b7ffd, 0x17fff37, 0x772e17,
+0x70000, 0x0, 0x70000, 0x1580000,
+0x98bb17, 0x0, 0x37fc17, 0x37fc9f,
+0x37fe37, 0x1646100, 0x130e605, 0x1e08400,
+0xff, 0x1fe01fe, 0x18030a, 0xd00628,
+0x1677fff, 0x1c08560, 0x1e0ffff, 0xffff00,
+0x1fe, 0x185306, 0x370010, 0xce10c2,
+0x162000f, 0x1d80b01, 0xce082e, 0x1e083ff,
+0x1ffffff, 0x3fffe, 0x187306, 0x1677fff,
+0x1c181e0, 0xcd1843, 0xe81119, 0x1e0fdff,
+0x1fffffe, 0x1fffffe, 0x180b02, 0x370030,
+0xd10639, 0x1677fff, 0x1c50560, 0x3700a0,
+0x1677fff, 0x1c50360, 0xcd522a, 0x3700a0,
+0x1677fff, 0x1c50760, 0xcd000a, 0x370000,
+0x1677fff, 0x1c00160, 0x370000, 0x1677fff,
+0x1c000e0, 0x370000, 0x1677fff, 0x1c001e0,
+0x370000, 0x370280, 0x36fe37, 0x36fc9f,
+0x36fc17, 0x1581fff, 0x198bb17, 0x70000,
+0x1580002, 0x98bb17, 0x0, 0x37fe17,
+0x1581ffd, 0x198bb12, 0x1620000, 0x588310,
+0xc80220, 0x130f5e, 0xd40204, 0x110118,
+0xd40304, 0x11811b, 0x36dc07, 0x770428,
+0xce0040, 0x16a0010, 0x180304, 0x11810b,
+0x1581ffd, 0x198bb10, 0x1020001, 0x1c024ee,
+0x1581ffd, 0x198bb10, 0x1020001, 0x1c009a7,
+0xc80200, 0x100f06, 0x1581ffd, 0x198bb10,
+0x1020001, 0x1c008a2, 0xc80221, 0x1581ffd,
+0x198bb12, 0x1620000, 0x588310, 0x130f76,
+0xc80001, 0x36fe17, 0x1581ffd, 0x198bb17,
+0x70000, 0x1580002, 0x98bb17, 0x0,
+0x37fe17, 0x37dd1f, 0x1620002, 0x1988b11,
+0x1581ffd, 0x198bb12, 0xc80220, 0xc82011,
+0x130f2f, 0xd40204, 0x110113, 0xd40304,
+0x118115, 0x1581ffd, 0x198bb10, 0x1020001,
+0x1c024ee, 0x1581ffd, 0x198bb12, 0x1646100,
+0xb10623, 0x130f58, 0x1581ffd, 0x198bb10,
+0xc80001, 0x1020001, 0x1c009a7, 0xc80200,
+0x100f05, 0x1581ffd, 0x198bb12, 0xc82011,
+0x130f4d, 0xc80001, 0x36dd1f, 0x36fe17,
+0x1581ffd, 0x198bb17, 0x70000, 0x100751f,
+0x1800000, 0x130fa7, 0xc80200, 0x130fd2,
+0xcd0001, 0x36fe17, 0x772e17, 0x70000,
+0x362800, 0x362620, 0x700002, 0x110202,
+0xb01300, 0x0, 0x70000, 0x1580000,
+0x98bb17, 0x0, 0x37fd1f, 0x37ff3f,
+0xc82610, 0xc82212, 0xc82013, 0x130ff1,
+0xd40004, 0x118103, 0xc80020, 0x100f25,
+0x362823, 0xc8103d, 0x1377fff, 0x1c80113,
+0x0, 0x360020, 0x370021, 0xe91b22,
+0xce1202, 0xd41024, 0x118303, 0xc80022,
+0x100f18, 0x770000, 0xd32040, 0x110203,
+0xc80021, 0x100f13, 0x762211, 0x362883,
+0xc80020, 0xd40024, 0x11830d, 0x761008,
+0xd41384, 0x118202, 0xc81020, 0x1377fff,
+0x1c80413, 0x760000, 0x3600a0, 0x10075a3,
+0x1800000, 0xd32040, 0x1082f5, 0xc80023,
+0x36ff3f, 0x36fd1f, 0x1581fff, 0x198bb17,
+0x70000, 0x100751f, 0x1800000, 0x37ff1f,
+0xc82210, 0x360002, 0xc8043d, 0xe91b00,
+0xce0040, 0x760200, 0x130fba, 0xd32001,
+0x118302, 0xc80200, 0x362801, 0x6e0020,
+0xd41304, 0x118202, 0xb0ed00, 0x372801,
+0x36ff1f, 0x36fe17, 0x772e17, 0x70000,
+0x100751f, 0x1800000, 0x37ff1f, 0xc82210,
+0x770428, 0x360001, 0xce1040, 0xd40224,
+0x118156, 0xe91100, 0x162000f, 0x1d81302,
+0xce0040, 0xd40104, 0x11010e, 0xd40204,
+0x110114, 0xd40304, 0x11814c, 0x360201,
+0xed1800, 0x1020001, 0x1c01025, 0xc82011,
+0xd10039, 0x1677fff, 0x1c00060, 0x370000,
+0x1e08000, 0xfb, 0x1fffffe, 0x190300,
+0x1677fff, 0x1c00062, 0x370001, 0x100f3b,
+0x762011, 0x1020001, 0x1c00ef7, 0xd40004,
+0x110127, 0x360001, 0xc80421, 0xe91008,
+0xce1048, 0x110131, 0x1e0fdff, 0x1fffffd,
+0x1fffffe, 0x185302, 0xc81039, 0xce1040,
+0x771c28, 0x770028, 0xcd4202, 0x1e08000,
+0xffff, 0x1fe01fe, 0x181301, 0x370081,
+0xd01028, 0x1677fff, 0x1c30562, 0x771428,
+0x370061, 0xce72c6, 0xce0826, 0xe90866,
+0xce000e, 0xce1046, 0xe80800, 0xce1242,
+0xcd0001, 0x370001, 0x1677fff, 0x1c00462,
+0xcd0040, 0x370001, 0x100f10, 0x1e0fdff,
+0x1fffffd, 0x1fffffe, 0x184300, 0xc80439,
+0x1677fff, 0x1c00062, 0x149ffff, 0x1c52239,
+0xcd0040, 0x370001, 0x1677fff, 0x1c00462,
+0xcd0240, 0x370001, 0x36ff1f, 0x36fe17,
+0x772e17, 0x70000, 0x360000, 0x770428,
+0xce1040, 0x1e0ffff, 0x100ff00, 0x1fe,
+0x185308, 0xe90806, 0xce1202, 0x1620000,
+0x989312, 0xce0240, 0x771028, 0xe80822,
+0xce4206, 0x771428, 0xd01c28, 0xcd0040,
+0xce1248, 0x370000, 0x36268a, 0x36280a,
+0x1677fff, 0x1c50760, 0x700008, 0xcd104a,
+0x370020, 0xd40004, 0x110202, 0xb01300,
+0x360020, 0xc8103d, 0x1620002, 0xd8530a,
+0xe91b22, 0x70000a, 0xce1202, 0x761002,
+0xd32200, 0x110203, 0xc80020, 0x100f1a,
+0x1620000, 0x989312, 0xc80020, 0x36262a,
+0xd40084, 0x11830d, 0x1620000, 0x989312,
+0x13765a1, 0x1890112, 0x760402, 0x3700aa,
+0xd41324, 0x118202, 0xc80420, 0x760000,
+0xd32200, 0x1082f5, 0x1620000, 0x988310,
+0x0, 0x372628, 0x1020001, 0x1c00422,
+0xc80021, 0x0, 0x70000, 0xd40304,
+0x11010b, 0x1e08100, 0xfd, 0x1fffffe,
+0x184302, 0x1677fff, 0x1c10160, 0xcd1202,
+0x370020, 0xd40004, 0x110109, 0x1e08200,
+0xfb, 0x1fffffe, 0x181300, 0x1677fff,
+0x1c00060, 0xcd0040, 0x370000, 0x130fa7,
+0x0, 0x70000, 0x1580002, 0x58bb17,
+0x1581ffd, 0x1d8bb12, 0x1e08400, 0x7,
+0x1fffffe, 0x184302, 0x771428, 0xc82c12,
+0xc82810, 0x1c1103, 0x1006569, 0x1800000,
+0x100756d, 0x1800000, 0x36de67, 0xce1046,
+0xcd1202, 0xce4242, 0x37de27, 0x16a0012,
+0x1184304, 0x11812a, 0xe91128, 0x162000f,
+0x1d8530a, 0xce4248, 0xd40284, 0x11011c,
+0xd40384, 0x110111, 0xd40484, 0x110118,
+0xd40584, 0x11010d, 0xd40684, 0x110114,
+0xd40784, 0x11811a, 0x1e09000, 0x7,
+0x1fffffe, 0x185308, 0xce1202, 0xcd1242,
+0x37de27, 0x100f12, 0x36de27, 0x1bbffff,
+0x1ffe000, 0x18519b, 0x1308338, 0xce1202,
+0xcd1242, 0x37de27, 0x100f09, 0x36de27,
+0x1e0a000, 0x7, 0x1fffffe, 0x185308,
+0xce1202, 0xcd1242, 0x37de27, 0x1581ffd,
+0x1d8bb10, 0x130fa6, 0x1581ffd, 0x1d8bb17,
+0x70000, 0x100751f, 0x1800000, 0xc80220,
+0xd40004, 0x118111, 0x360020, 0xc81021,
+0xe9102a, 0xce420a, 0x118109, 0xe91820,
+0xc80421, 0xce0040, 0xd40104, 0x118105,
+0x1020001, 0x1c00904, 0x100f02, 0x130fa7,
+0xc80221, 0x100f02, 0x130f8d, 0xc80001,
+0x36fe17, 0x772e17, 0x70000, 0x1e08000,
+0xf0, 0xc000, 0x190300, 0x1020001,
+0x1c00100, 0x1621bd2, 0x1588310, 0x1581e00,
+0x190300, 0x370000, 0x70000, 0xc80421,
+0xc80020, 0x1621bd2, 0x1588310, 0x0,
+0x360080, 0xce5048, 0x118104, 0xcd1048,
+0x370020, 0x100f06, 0x760000, 0xe80122,
+0xd40c04, 0x1005f4, 0xc80030, 0x0,
+0x70000, 0xd40c04, 0x118509, 0x1621bd2,
+0x1588310, 0xc80421, 0xe60002, 0xd10000,
+0x1677fff, 0x1c00060, 0x370000, 0x0,
+0x70000, 0xc81021, 0xc80420, 0xce5200,
+0x110103, 0xc80002, 0x100f06, 0x760402,
+0xe80188, 0xd42024, 0x1082f9, 0xc80030,
+0x0, 0x70000, 0x1621bd2, 0x1988310,
+0xc81026, 0xc80420, 0x3600a0, 0xd3200a,
+0x110206, 0x762010, 0x771008, 0x760402,
+0xd40084, 0x1004f9, 0xc80002, 0x0,
+0x70000, 0x1621bd2, 0x1988310, 0x1377fff,
+0x1c80010, 0x0, 0x360000, 0x0,
+0x70000, 0x1580000, 0xd8bb17, 0x0,
+0x37fc17, 0x37fe37, 0x1646120, 0x1b01601,
+0x1020001, 0x1c00075, 0x37fa07, 0x1e08000,
+0x1ffb, 0x1fffffe, 0x181300, 0x36fa87,
+0x149ffff, 0x1c52239, 0xce1043, 0xce0008,
+0x770c38, 0xe81b22, 0xcd0240, 0xce00c0,
+0xcd0040, 0x37fa07, 0xc80001, 0x36fa27,
+0x1020001, 0x1c003e7, 0x36fe37, 0x36fc17,
+0x1581fff, 0x158bb17, 0x70000, 0x1580000,
+0x98bb17, 0x0, 0x37fe17, 0x37fd1f,
+0x37ff3f, 0x1646120, 0xb11621, 0xc82612,
+0x1020001, 0x1c000a5, 0x37fc07, 0x77002a,
+0x36fc27, 0xce0002, 0x110202, 0x760000,
+0xed010e, 0xc80401, 0xc8000e, 0x1020001,
+0x1c08de0, 0x370001, 0x16461e0, 0x302603,
+0x1020001, 0x1c08dfd, 0x370003, 0x36ff3f,
+0x36fd1f, 0x36fe17, 0x1581fff, 0x198bb17,
+0x70000, 0x1580000, 0xd8bb17, 0x0,
+0x37fc17, 0x37fb1f, 0x37fe37, 0xc82210,
+0x1e0fffd, 0x1ffff00, 0x0, 0x185302,
+0x1638000, 0x118730e, 0xc8003e, 0x37fa27,
+0x1e08000, 0xff, 0x1fbfffe, 0x190302,
+0x36fa67, 0x1639fff, 0x1984308, 0xce0a46,
+0x1e08000, 0x1ffc900, 0x40000, 0x18330a,
+0xcd72c1, 0x37fae7, 0x360011, 0xe9101e,
+0x36fa37, 0xce080e, 0xce0043, 0xcd0240,
+0xce0200, 0xcd00c0, 0x37fa07, 0xc80001,
+0x36fa27, 0x1020001, 0x1c003e7, 0x1638000,
+0x1981302, 0xc80001, 0x1020001, 0x1c00188,
+0x1646110, 0x302641, 0x1020001, 0x1c001b8,
+0xc80021, 0xc80420, 0xe60020, 0x1020001,
+0x1c000f3, 0x360421, 0xc80001, 0x1020001,
+0x1c00158, 0x36fb1f, 0x36fe37, 0x36fc17,
+0x1581fff, 0x158bb17, 0x70000, 0x1580000,
+0x1d8bb17, 0x0, 0x37fa17, 0x37f29f,
+0x37fc37, 0x37f4bf, 0x37fe77, 0x37f6ff,
+0x37f91f, 0x1646100, 0x1b11621, 0x1e0fffd,
+0x1ffff00, 0x0, 0x185309, 0xc81012,
+0xc80221, 0xc8043e, 0x1638000, 0x118730e,
+0xc80021, 0x37f297, 0xe80188, 0x1639fff,
+0x1987b0f, 0x36f267, 0xce3a46, 0x360061,
+0xd1143c, 0xcd72c7, 0xe9176b, 0xe91066,
+0x1e08000, 0x0, 0x3fffe, 0x190307,
+0xce582b, 0xce0846, 0x37f2e7, 0xce10e8,
+0x36f287, 0xce000b, 0xce4248, 0xe81300,
+0xcd0008, 0xce02e0, 0xcd0040, 0x37f207,
+0xc80001, 0x36f227, 0x1020001, 0x1c003e7,
+0x360021, 0xc8103e, 0x770029, 0xe91c22,
+0x37f497, 0x771429, 0xce1202, 0x36f487,
+0xe80122, 0xce4248, 0x770402, 0xce0002,
+0xe81000, 0xcd0008, 0x37f407, 0xc80001,
+0x36f427, 0x1020001, 0x1c00188, 0x360001,
+0x1e0ffff, 0x1000000, 0x1e, 0x184302,
+0xe91c0a, 0x36f667, 0x770029, 0xce504a,
+0xce3206, 0x770429, 0x771029, 0x7d506a,
+0x77140a, 0xce000a, 0xcd0006, 0xce1040,
+0xce0200, 0xe81022, 0xcd0040, 0x37f607,
+0xc80001, 0x36f627, 0x1020001, 0x1c00128,
+0x360001, 0x1e0ffff, 0x1000000, 0x1e,
+0x184302, 0xe91c0a, 0x36f867, 0x770029,
+0xce504a, 0xce3206, 0x770429, 0x771029,
+0x7d506a, 0x77140a, 0xce000a, 0xcd0006,
+0xce1040, 0xce0200, 0xe81022, 0xcd0040,
+0x37f807, 0xc80001, 0x36f827, 0x1020001,
+0x1c001b8, 0x360001, 0xc80421, 0xe91500,
+0x1676110, 0x10100, 0x1020001, 0x1c00c41,
+0xc80021, 0xc80421, 0xe60020, 0x1020001,
+0x1c000e4, 0xc80001, 0x360421, 0x1020001,
+0x1c00158, 0x360001, 0xc80421, 0xe91800,
+0xce0040, 0x118103, 0xc80421, 0x100f02,
+0xc80420, 0xc80021, 0xe60020, 0x1020001,
+0x1c000f3, 0x360401, 0xd40004, 0x118104,
+0xc80001, 0x1020001, 0x1c000d5, 0x36f91f,
+0x36fe77, 0x36fc37, 0x36f6ff, 0x36fa17,
+0x36f4bf, 0x36f29f, 0x1581fff, 0x58bb17,
+0x70000, 0x1580001, 0x18bb17, 0x0,
+0x37f817, 0x37f69f, 0x37fa37, 0x37f8bf,
+0x37fc77, 0x37faff, 0x37fe57, 0x37fd1f,
+0x37fedf, 0xc82210, 0xc81a00, 0x37f2af,
+0xc80a02, 0x37f48f, 0x1e0fffd, 0x1ffff00,
+0x0, 0x183303, 0xc80439, 0x1638000,
+0x118530a, 0xc8103e, 0x37f237, 0x360201,
+0x36f2e7, 0xed1000, 0xce08ce, 0x1e0fe7f,
+0x1ffffff, 0x1fbfffe, 0x187306, 0xcd0a41,
+0x1638000, 0x98530a, 0x37f217, 0xce30c1,
+0x360011, 0xcd5246, 0xe91016, 0xce52ca,
+0xce0a06, 0xcd104a, 0x37f227, 0x1020001,
+0x1c009f8, 0xc81200, 0xc81c3e, 0xc80021,
+0xc81021, 0x3600b1, 0xc81421, 0xe917b6,
+0xce72c9, 0x1e0fffb, 0x1ffffff, 0x1ffffe,
+0x183b02, 0xe914bb, 0xce0006, 0x36f2f7,
+0xe814e6, 0xce524b, 0xce0200, 0x360701,
+0xce104f, 0x1e08000, 0x0, 0x3fffe,
+0x190308, 0xcd10c2, 0xc81210, 0xe81300,
+0xe8019e, 0xce30e2, 0x1639fff, 0x1984b09,
+0xcd0006, 0xcd524e, 0x37f227, 0xce120a,
+0xce4220, 0x37f207, 0xcd0048, 0x37f207,
+0xc80001, 0x36f227, 0x1020001, 0x1c003e7,
+0x1bbffff, 0x1ffe000, 0x18019c, 0x308326,
+0xc8123d, 0x360021, 0xc81c3d, 0xe91c2a,
+0xe81026, 0x37f437, 0x77042a, 0x36f23f,
+0xce420a, 0xed1066, 0xce5a23, 0x3602a1,
+0x770608, 0x7d3aa6, 0xed10a8, 0xce72c3,
+0xe80bb6, 0x36f497, 0x1e08000, 0xf8,
+0x1fffe, 0x19030a, 0x6e18a7, 0x771608,
+0xce0009, 0xe81bee, 0x1e08000, 0x7ffff,
+0x1fe0ffe, 0x183b08, 0xe80133, 0xe801bb,
+0xcd02c0, 0xd0122a, 0xce704b, 0x37f407,
+0xce10e3, 0xe810e0, 0x36f4e7, 0xce524e,
+0xcd000a, 0xce0200, 0xcd00c0, 0xce0220,
+0xcd0040, 0x37f407, 0xc80001, 0x36f427,
+0x1020001, 0x1c00188, 0x360001, 0x36f46f,
+0xc8103e, 0xe91c0a, 0xe81002, 0x770629,
+0x7030c5, 0x770029, 0xce420a, 0xed102e,
+0x7d10c8, 0x7a32c8, 0x36f6a7, 0x771029,
+0xce706a, 0x770606, 0x1e0ffff, 0x1000000,
+0x1fffe, 0x185306, 0xce0003, 0xe81000,
+0xcd000e, 0xe9100e, 0xce0240, 0xce420e,
+0x701048, 0xce10c2, 0xcd0040, 0x37f607,
+0xc80001, 0x36f627, 0x1020001, 0x1c001b8,
+0x360001, 0xc80421, 0xe91500, 0x1676110,
+0x10100, 0x130f4e, 0xc81021, 0x360001,
+0xc80421, 0xe9160a, 0xe60028, 0xce104a,
+0x1020001, 0x1c000e4, 0xc80001, 0x360421,
+0x1020001, 0x1c00158, 0x360001, 0xc80421,
+0xe91800, 0xce0040, 0x118103, 0xc80421,
+0x100f02, 0xc80420, 0xc80021, 0xe60020,
+0x1020001, 0x1c000f3, 0x360401, 0xd40004,
+0x118104, 0xc80001, 0x1020001, 0x1c000d5,
+0x36fe77, 0xc80a07, 0x36feff, 0xc81a0f,
+0x36fd1f, 0x36fc77, 0x36fa37, 0x36faff,
+0x36f817, 0x36f8bf, 0x36f69f, 0x1581fff,
+0x18bb17, 0x70000, 0x1020001, 0x1c0005c,
+0x0, 0x70000, 0x100751f, 0x1800000,
+0xc80200, 0xc80420, 0x1020001, 0x1c000e4,
+0xc80001, 0x1020001, 0x1c00067, 0xd40004,
+0x118403, 0xc80021, 0x100f02, 0xc80020,
+0x36fe17, 0x772e17, 0x70000, 0x1621bd2,
+0x1588310, 0x0, 0x360000, 0x16a1e00,
+0x180304, 0x110103, 0xc80021, 0x100f02,
+0xc80020, 0x0, 0x70000, 0xd40404,
+0x11020c, 0xb01c00, 0xc81021, 0xe60008,
+0xd40024, 0x110104, 0x1020001, 0x1c000e7,
+0x100f15, 0x1020001, 0x1c000ec, 0x100f12,
+0xd40804, 0x110206, 0x1377fff, 0x1c02280,
+0xc81021, 0xe60008, 0x100f04, 0xb01400,
+0xc81021, 0xe60008, 0xd40024, 0x110104,
+0x1020001, 0x1c0005c, 0x100f03, 0x1020001,
+0x1c00061, 0x0, 0x70000, 0x1580001,
+0x18bb17, 0x0, 0x37f217, 0x37f69f,
+0x37f437, 0x37f8bf, 0x37f677, 0x37faff,
+0x37fd1f, 0x37ff3f, 0x1621bd6, 0x988b11,
+0x1620010, 0x181302, 0xc80020, 0xc82011,
+0x1020001, 0x1c03c73, 0x1621be6, 0x989b13,
+0xc80220, 0xc80626, 0x370811, 0x1e08000,
+0x1ff, 0x1e1fffe, 0x181300, 0x1677fff,
+0x1c00062, 0x1638001, 0x1d84308, 0xcd0200,
+0x370001, 0x370a21, 0xd40214, 0x11010d,
+0xd40414, 0x110107, 0xd40814, 0x110109,
+0x1621be9, 0x988310, 0x370f01, 0x100f08,
+0x1621be8, 0xd88310, 0x370f01, 0x100f04,
+0x1621bea, 0x1188310, 0x370f01, 0xd40814,
+0x118207, 0x360003, 0xc8043d, 0xe91b00,
+0xce0040, 0xd41f04, 0x118160, 0x360003,
+0xc8043e, 0xe91008, 0xce4848, 0x11835b,
+0xe90e02, 0xc81021, 0x16207ff, 0x1d8530a,
+0xce1202, 0xce5a40, 0xd40024, 0x110109,
+0x1621c0a, 0x1988310, 0x0, 0x360a00,
+0xd40004, 0x118403, 0xc80022, 0x7d580b,
+0x7d3a69, 0xc80007, 0x1020001, 0x1c009f8,
+0x1020001, 0x1c00a07, 0xc80c00, 0xc81421,
+0x770429, 0x771029, 0xc80021, 0x37f2af,
+0xc8143e, 0xce1047, 0x771e29, 0x37f4af,
+0xd01c29, 0x3602a1, 0x1e08000, 0xff,
+0x1dffffe, 0x190304, 0xce420a, 0xe8102a,
+0xd00429, 0xcd5248, 0xce42e6, 0x771e29,
+0x3702a1, 0xce52eb, 0x3602b1, 0xce7acb,
+0x3600b3, 0xe918be, 0xcd420f, 0xe914bb,
+0xce000e, 0x36f4ff, 0x36f2ef, 0x370281,
+0xce5aeb, 0x1677fff, 0x1c10162, 0xce72c0,
+0xe814e8, 0xcd5242, 0x771c0b, 0x3700a1,
+0xc81404, 0x7d30ce, 0x1677fff, 0x1c50562,
+0x6e10e6, 0xcd420a, 0x370081, 0x370c91,
+0xd40004, 0x110106, 0xc80002, 0x1020001,
+0x1c07d40, 0x370701, 0x100f05, 0xc80002,
+0x1020001, 0x1c07e67, 0x370701, 0x360701,
+0x16a0000, 0x188304, 0x11814b, 0x1020001,
+0x1c0003b, 0x100f48, 0x360003, 0xc80421,
+0xe91908, 0xce1048, 0x110143, 0xe91b0a,
+0x1621bd6, 0x988310, 0x1377fff, 0x1c92191,
+0xc80c3d, 0xc81c25, 0xc80421, 0x770029,
+0xc81021, 0xce50ca, 0x1e0fff7, 0x1ffff00,
+0x1fffe, 0x183b09, 0x7a5aca, 0x360261,
+0x771c29, 0xce5226, 0x1377fff, 0x1c80590,
+0x1639fff, 0x1d84b06, 0x1377fff, 0x1ca2190,
+0x3602b0, 0xed10bf, 0x771629, 0xce000f,
+0xe81000, 0xcd000a, 0x370201, 0x360200,
+0xe81000, 0x3602a1, 0xed1000, 0xce50ca,
+0xce02c0, 0xcd000a, 0x370201, 0x360000,
+0x1677fff, 0x1c504e2, 0xe81000, 0xed1000,
+0xce0260, 0xcd000a, 0x370001, 0x360000,
+0x1677fff, 0x1c503e2, 0xe91400, 0xce0040,
+0xce0200, 0xe81400, 0xcd000a, 0x370001,
+0x360c00, 0x370c01, 0xc82c12, 0xc82014,
+0x1c0103, 0x1006501, 0x1800000, 0x100750d,
+0x1800000, 0x1377fff, 0x1c8a291, 0x762613,
+0x770603, 0x760201, 0xd40034, 0x1008000,
+0xc00c78, 0x1621bd4, 0x1988310, 0xc80020,
+0xc8043d, 0x760000, 0x1007521, 0x1800000,
+0xd40c04, 0x1005fc, 0x36ff3f, 0x36fd1f,
+0x36f677, 0x36f437, 0x36f217, 0x36faff,
+0x36f8bf, 0x36f69f, 0x1581fff, 0x18bb17,
+0x70000, 0x1580000, 0x118bb17, 0x0,
+0x37fc17, 0x37f89f, 0x37fe37, 0x37fabf,
+0x37fd1f, 0xc82210, 0x360830, 0x1020001,
+0x1c00427, 0x360a01, 0xd40204, 0x1010010,
+0x800df3, 0xd40304, 0x118376, 0xd40404,
+0x1010010, 0x400df3, 0x1581fff, 0x118bb14,
+0x1581fff, 0x158bb12, 0xc82011, 0x1020001,
+0x1c0118c, 0xc80041, 0xc81420, 0x370a01,
+0x360801, 0xd40204, 0x118116, 0x360001,
+0xc8043e, 0xe91c00, 0xce0040, 0xd40604,
+0x118110, 0x1621c2d, 0x188310, 0xc80021,
+0x360100, 0x0, 0x360420, 0xe91b22,
+0xce0002, 0x110107, 0x361100, 0x0,
+0x360000, 0xd40204, 0x118102, 0xc81424,
+0xc82011, 0x36fa07, 0xc81020, 0x36f827,
+0x1020001, 0x1c00b3b, 0x36f807, 0x770000,
+0x37f807, 0x11020e, 0x360021, 0xe81022,
+0x36fa87, 0xed102a, 0x770408, 0x6e0240,
+0x37fa27, 0x37f807, 0xd40024, 0x110204,
+0x360c01, 0x6e0002, 0x37fa07, 0x1621bea,
+0x1d88310, 0xc81440, 0xc8043e, 0x360081,
+0xc80020, 0xe81088, 0x36f867, 0x7a5243,
+0xed1088, 0x1377fff, 0x1c80510, 0x36fae7,
+0x68dc86, 0x37f887, 0x360081, 0xe91c88,
+0xce1048, 0xd40024, 0x110413, 0x100f34,
+0x360281, 0xe81088, 0x360721, 0xed1088,
+0x36f8a7, 0x7d4008, 0x360060, 0x1377fff,
+0x1c90412, 0x1377fff, 0x1c90512, 0x0,
+0x37006a, 0x762010, 0x760000, 0xd32040,
+0x118523, 0x360081, 0xc81421, 0xe91488,
+0xce4248, 0x1081eb, 0x360281, 0xe81088,
+0x360721, 0xed1088, 0x36f8a7, 0x7d4008,
+0x360060, 0x1377fff, 0x1c90412, 0x1377fff,
+0x1c90512, 0x0, 0x370062, 0x100fea,
+0x1621bea, 0x1d88310, 0xc80440, 0xc80021,
+0x7a1043, 0x1377fff, 0x1c90110, 0xc82011,
+0x1020001, 0x1c00a95, 0xc80024, 0x370a01,
+0x100f03, 0x1020001, 0x1c0003b, 0xc82011,
+0xc8043e, 0x360001, 0xc81021, 0xe91000,
+0xce0040, 0xe60808, 0x1020001, 0x1c0112a,
+0xc81200, 0xd41f94, 0x110135, 0x360401,
+0x1020001, 0x1c009eb, 0xc81600, 0xd400b4,
+0x110217, 0x1621be6, 0x988310, 0xc8003d,
+0x1377fff, 0x1c80190, 0x0, 0x360020,
+0xe91b22, 0xce0002, 0xd40804, 0x118108,
+0x1621bd6, 0x988310, 0x0, 0x364400,
+0x1020001, 0x1c009eb, 0xc81600, 0xd400b4,
+0x110203, 0x1020001, 0x1c0003b, 0x1621bd6,
+0x988310, 0xc80025, 0x7a0009, 0x1377fff,
+0x1c88010, 0x0, 0x360a01, 0xd40504,
+0x11820f, 0x360001, 0xc8043e, 0xe91000,
+0x16761b0, 0x1000100, 0x1020001, 0x1c00a0f,
+0xc8043e, 0x360001, 0xc81021, 0xe91000,
+0xce0040, 0xe60008, 0xcd0801, 0xc80001,
+0x1020001, 0x1c00c20, 0x1020001, 0x1c00429,
+0x36fd1f, 0x36fe37, 0x36fc17, 0x36fabf,
+0x36f89f, 0x1581fff, 0x118bb17, 0x70000,
+0x360800, 0xd40404, 0x118104, 0x1020001,
+0x1c0121b, 0x100f08, 0xd40804, 0x110204,
+0x1020001, 0x1c00d5f, 0x100f03, 0x1020001,
+0x1c0122e, 0x0, 0x70000, 0xc81022,
+0x689020, 0x110153, 0xd40104, 0x110135,
+0xd40204, 0x11011b, 0xd40304, 0x118164,
+0x1621be8, 0x1188310, 0x1621bd6, 0x989312,
+0xc80023, 0xc81041, 0xc8143d, 0x1621be9,
+0x98a314, 0x1620001, 0x1181302, 0x370200,
+0x373f02, 0x77003e, 0x370420, 0x11b8008,
+0xcf0a, 0x370680, 0x375f02, 0x370aa4,
+0x11b8008, 0xef0a, 0x370800, 0x100f4c,
+0x1621bd6, 0x989312, 0x1621be8, 0x1188310,
+0xc80041, 0xc80423, 0xc8103d, 0x1621be9,
+0x98a314, 0x1620001, 0x118530a, 0x370200,
+0x375f02, 0x77003e, 0x11b8008, 0xef0a,
+0x370a24, 0x370400, 0x373f42, 0x370ca4,
+0x11b8008, 0xcf4a, 0x370680, 0x100f18,
+0x1621bd6, 0x989312, 0x1621be8, 0x1188310,
+0xc80023, 0xc80441, 0xc8103d, 0x1621be9,
+0x98a314, 0x77143e, 0x370200, 0x373f02,
+0x1620001, 0x1180300, 0x11b8008, 0xcf0a,
+0x370a24, 0x370400, 0x375f42, 0x370ca4,
+0x11b8008, 0xef4a, 0x370680, 0x1621be9,
+0x988310, 0xc8003d, 0x370e00, 0x100f18,
+0x1621be9, 0x988310, 0x1621bd6, 0x989312,
+0xc80023, 0xc81041, 0xc8143d, 0x1621be8,
+0x118a314, 0x1620001, 0x1181302, 0x370a00,
+0x373f02, 0x77003e, 0x370c20, 0x11b8008,
+0xcf0a, 0x370e80, 0x375f02, 0x3702a4,
+0x11b8008, 0xef0a, 0x371000, 0x0,
+0x70000, 0xd40104, 0x11011c, 0xd40204,
+0x11010d, 0x1e083ff, 0x1ffff00, 0x1be64,
+0x180310, 0x1377fff, 0x1c83790, 0xd00438,
+0x1677fff, 0x1c00060, 0xcd0040, 0x370000,
+0x100f1a, 0x1e083ff, 0x1ffff00, 0x1be64,
+0x180310, 0x1377fff, 0x1c83790, 0x1638e00,
+0x181302, 0x1677fff, 0x1c00060, 0xcd0040,
+0x370000, 0x100f0d, 0x1e083ff, 0x1ffff00,
+0x1be64, 0x180310, 0x1377fff, 0x1c83790,
+0x1638c00, 0x181302, 0x1677fff, 0x1c00060,
+0xcd0040, 0x370000, 0x0, 0x70000,
+0x360000, 0xc8043f, 0xe91900, 0xce0040,
+0x118104, 0x16207d0, 0x180300, 0x100f04,
+0x1621770, 0x181302, 0x7d0040, 0x0,
+0x70000, 0x1580000, 0x1d8bb17, 0x0,
+0x37f817, 0x37f69f, 0x37fa37, 0x37f8bf,
+0x37fc77, 0x37faff, 0x37fd1f, 0x37ff3f,
+0xc82210, 0x360000, 0xed1801, 0xd41014,
+0x1010000, 0x800fea, 0x1621bd6, 0x988310,
+0xc80025, 0x7a0001, 0x1377fff, 0x1c98010,
+0x0, 0x360a03, 0xd40104, 0x1010010,
+0x400fea, 0x1020001, 0x1c009cd, 0xc80600,
+0x169ffff, 0x1c23003, 0x1010000, 0x400fea,
+0xd40214, 0x11812a, 0x1621c2d, 0x188310,
+0xc80021, 0x360100, 0x0, 0x360420,
+0xe91b22, 0xce0002, 0x110121, 0x361100,
+0x0, 0x360000, 0xd40204, 0x11811c,
+0x1581fff, 0x98bb10, 0x1e0807f, 0x1ffff00,
+0x200000, 0x181300, 0xc81020, 0xc81221,
+0x1e0ff87, 0xffff04, 0x0, 0x18330a,
+0xc82810, 0xc82411, 0x1c0203, 0x10065e5,
+0x1800000, 0x10075e9, 0x1800000, 0x36f4e7,
+0xce104e, 0xcd1242, 0xce10c2, 0xcd0002,
+0x37f407, 0x370281, 0x100f02, 0xc81220,
+0x1bbffff, 0x1ffe000, 0x183995, 0x130b322,
+0xc80c3e, 0xc81c3e, 0xc80021, 0xc80421,
+0x3600a1, 0xc81021, 0x37f4bf, 0xe914ab,
+0x1e08000, 0xfe, 0x1fffffe, 0x19030f,
+0xce30cb, 0x1677fff, 0x1c383e6, 0xd1143b,
+0xce32c6, 0xe81c66, 0xcd30c7, 0x370063,
+0x360261, 0x370463, 0x3600e1, 0x1677fff,
+0x1c307e6, 0xe910ee, 0xce000e, 0xce0040,
+0xe81800, 0xcd0006, 0x370003, 0x360001,
+0x1677fff, 0x1c10566, 0xe90f00, 0xce0200,
+0x36f48f, 0xce0200, 0xe81500, 0xcd0002,
+0x370003, 0xd40814, 0x118203, 0xc80021,
+0x100f02, 0xc80020, 0x1e8ffff, 0x1ffe000,
+0x18419d, 0x302331, 0xce0040, 0x1677fff,
+0x1c10466, 0xe81700, 0xcd0002, 0x370003,
+0xd40214, 0x118219, 0xd40e14, 0x110317,
+0x1621bf0, 0x1d88310, 0x1377fff, 0x1c80090,
+0x0, 0x36fd00, 0x0, 0xc0f00,
+0x0, 0x1e08100, 0xf1, 0x1fffffe,
+0x181300, 0x1677fff, 0x1c00066, 0xcd0040,
+0x370003, 0x100f11, 0xc82013, 0x1020001,
+0x1c0126c, 0x100f0d, 0x1e0f8ff, 0x1ffff00,
+0x1c0b8, 0x181310, 0xc8003f, 0x1677fff,
+0x1c10166, 0x360080, 0xce0008, 0xe81900,
+0xcd0002, 0x370003, 0xd40214, 0x11010f,
+0xd40914, 0x11010d, 0xd40c14, 0x11010b,
+0xd40e14, 0x110109, 0x1e08000, 0xff,
+0x17ffffe, 0x190300, 0x1677fff, 0x1c00066,
+0x370003, 0x100f0b, 0x1020001, 0x1c01cbd,
+0x1e08020, 0xff, 0x17ffffe, 0x181300,
+0x1677fff, 0x1c00066, 0xcd0040, 0x370003,
+0x1e0fff8, 0xffff00, 0x1e, 0x181300,
+0xc81022, 0xce0003, 0x1677fff, 0x1c10166,
+0xe81000, 0xcd0002, 0x370003, 0x370813,
+0x370a83, 0xd40094, 0x11011c, 0x1581fff,
+0x98bb10, 0x1020001, 0x1c00ef7, 0xd40004,
+0x118116, 0xc80003, 0x1020001, 0x1c009df,
+0x1e0fff8, 0xffff00, 0x1bd4c, 0x180310,
+0xc8043d, 0xc81021, 0x1377fff, 0x1c80190,
+0x1677fff, 0x1c00066, 0x1638001, 0x1d8530a,
+0xcd0240, 0x370003, 0x370020, 0x370a83,
+0xc80020, 0x100f2f, 0x1621be6, 0x988310,
+0x1621bd4, 0x1989312, 0xc80421, 0x1377fff,
+0x1c80090, 0x1377fff, 0x1c90192, 0x360000,
+0xe91908, 0x370012, 0xce1048, 0x11010e,
+0xe91b00, 0x1621bd6, 0x988310, 0xc8043d,
+0xc81025, 0xce0040, 0x7a0200, 0x1377fff,
+0x1c80010, 0x0, 0x360a00, 0xd40404,
+0x110204, 0xc82013, 0x1020001, 0x1c01109,
+0xc82013, 0x1020001, 0x1c00e42, 0xd40094,
+0x11010b, 0x1621ffc, 0x988310, 0xd10028,
+0xc80428, 0x1677fff, 0x1c00061, 0x1621ffc,
+0x988310, 0xcd0040, 0x370008, 0xc80021,
+0x36ff3f, 0x36fd1f, 0x36fc77, 0x36fa37,
+0x36f817, 0x36faff, 0x36f8bf, 0x36f69f,
+0x1581fff, 0x58bb17, 0x70000, 0x1580000,
+0x98bb17, 0x0, 0x37fc17, 0x37fe37,
+0xc80200, 0x16a001f, 0x1d80b04, 0x11810a,
+0xc80220, 0xc80626, 0xc80001, 0x130ff4,
+0x770603, 0x760201, 0xd40034, 0x1003fb,
+0x100f4f, 0xd41014, 0x11024d, 0x1621bd6,
+0x988310, 0xc80025, 0xc8043e, 0x7a0001,
+0x1377fff, 0x1c80010, 0x0, 0x360000,
+0xe91000, 0xce1840, 0xd40f34, 0x110140,
+0xc80021, 0xe60060, 0x1020001, 0x1c00c24,
+0xd40004, 0x118107, 0x1020001, 0x1c0003b,
+0x1646130, 0x302641, 0x1020001, 0x1c00158,
+0xc80003, 0x1020001, 0x1c009df, 0x1621bd6,
+0x98a314, 0x1621bd4, 0x1988310, 0xc80025,
+0xc8103d, 0xc81421, 0x1377fff, 0x1cb0190,
+0x7a0001, 0x1e08007, 0x10000ff, 0x1e1fffe,
+0x183302, 0x1377fff, 0x1c90014, 0xc82012,
+0x370086, 0x1677fff, 0x1c00160, 0xcd00c0,
+0x370000, 0x370aa2, 0xd40214, 0x118118,
+0x364a04, 0xd40104, 0x118315, 0xc80024,
+0x130fb3, 0x1621c2d, 0x188310, 0x1621ffc,
+0x989312, 0xc80420, 0xc8003e, 0x1621ffc,
+0x98a314, 0xd11028, 0x360100, 0x1677fff,
+0x1c40465, 0x37008c, 0x361100, 0x0,
+0x370020, 0x1020001, 0x1c000d5, 0x36fe37,
+0x36fc17, 0x1581fff, 0x198bb17, 0x70000,
+0xd40004, 0x110203, 0x360c82, 0x6e0200,
+0x360c82, 0xd32200, 0x118202, 0x700200,
+0x360882, 0xd40984, 0x118103, 0xc81440,
+0x100f05, 0x360082, 0xc8143e, 0xe91c88,
+0xce5248, 0xc82810, 0x360062, 0xc81020,
+0xe81066, 0x3602e2, 0xed1066, 0x360722,
+0xe810ee, 0x7a3006, 0xed10e0, 0x1377fff,
+0x1c90312, 0xd400a4, 0x118308, 0x370124,
+0x1377fff, 0x1c90012, 0x762814, 0x761008,
+0xd32248, 0x1082fa, 0x13761a0, 0x80510,
+0xd3204a, 0x110207, 0xc82420, 0x760000,
+0x370120, 0x762010, 0xd32040, 0x1082fb,
+0x0, 0x70000, 0x1580000, 0x98bb17,
+0x0, 0x37fd1f, 0x37ff3f, 0xc82610,
+0xc82212, 0xc82013, 0x130fc6, 0x360801,
+0xd40904, 0x118103, 0xc80440, 0x100f05,
+0x360001, 0xc8043e, 0xe91c00, 0xce1040,
+0x360001, 0xe81000, 0xed1000, 0x110202,
+0x760000, 0xed0108, 0xc80020, 0xd40024,
+0x118309, 0x360103, 0x760000, 0x1377fff,
+0x1c80410, 0x370103, 0x762613, 0xd32040,
+0x1082f9, 0x36ff3f, 0x36fd1f, 0x1581fff,
+0x198bb17, 0x70000, 0x1580000, 0x98bb17,
+0x0, 0x37fe17, 0x37fd1f, 0x1646100,
+0xb11621, 0x360000, 0xc8043e, 0xe91000,
+0xce0040, 0x1020001, 0x1c000a5, 0x37fc07,
+0x77002a, 0x36fc27, 0xce0002, 0x110202,
+0x760000, 0x360021, 0xed0100, 0xe81022,
+0x1377fff, 0x1c02200, 0xed1022, 0x1020001,
+0x1c08de0, 0x700020, 0x770000, 0x110203,
+0x360c21, 0x6e0040, 0x36fd1f, 0x36fe17,
+0x1581fff, 0x198bb17, 0x70000, 0x1621be6,
+0x989312, 0xc81021, 0xc8043e, 0x360800,
+0x1377fff, 0x1c90012, 0x360000, 0xe9140a,
+0x360200, 0xe81006, 0x3600e2, 0xce420a,
+0xed1000, 0xed106a, 0xe914e6, 0xce1046,
+0x770402, 0x1347fff, 0x1ce2a20, 0xd40084,
+0x110106, 0xc80020, 0x360700, 0x1020001,
+0x1c06aa0, 0x100f05, 0xc80020, 0x360700,
+0x1020001, 0x1c03c73, 0x0, 0x70000,
+0x360800, 0xd40804, 0x11810d, 0x1621bd6,
+0x988310, 0xc8003e, 0x364020, 0xe91022,
+0xce0002, 0xd40f04, 0x110103, 0xc80024,
+0x100f02, 0xc80022, 0x100f10, 0x1621be6,
+0x988310, 0xc80421, 0x1377fff, 0x1c80010,
+0x0, 0x360000, 0xe91a08, 0xce1048,
+0x110105, 0xe91b00, 0xc8043d, 0xce0040,
+0x100f02, 0xc8003d, 0x0, 0x70000,
+0x1621be6, 0x989312, 0x360800, 0xc81021,
+0x1377fff, 0x1c80012, 0x0, 0x360020,
+0xe9192a, 0xce420a, 0x110112, 0xe91b22,
+0xc8103d, 0xce1202, 0xd41f24, 0x11010d,
+0x1621bd6, 0x988310, 0xc81025, 0x7a4202,
+0x1377fff, 0x1c80410, 0x0, 0x360a80,
+0xd40584, 0x118203, 0xc80002, 0x100f25,
+0x1621bd6, 0x988310, 0xc80425, 0xc81020,
+0x7a1040, 0x1377fff, 0x1c80110, 0x0,
+0x360f00, 0x0, 0x360020, 0xd41f24,
+0x110117, 0xd32002, 0x11010d, 0x1621bd6,
+0x989312, 0xc81425, 0x7a5242, 0x1377fff,
+0x1c90512, 0x0, 0x360aa2, 0xd405a4,
+0x118203, 0xc80002, 0x100f0a, 0x761008,
+0x1377fff, 0x1c90410, 0x0, 0x360022,
+0xd41f24, 0x110102, 0x100feb, 0xc8003d,
+0x0, 0x70000, 0x1580000, 0x198bb17,
+0x0, 0x37f817, 0x37f69f, 0x37fa37,
+0x37f8bf, 0x37fc77, 0x37fb1f, 0x37fd3f,
+0x37ff5f, 0xc82210, 0xc82a12, 0x37f54f,
+0xc82011, 0x130faf, 0xd41f04, 0x118106,
+0x36f50f, 0xc80020, 0x370000, 0x370005,
+0x100f6e, 0x1621bd6, 0x988310, 0xc81025,
+0x360021, 0xc80220, 0x3608b1, 0xe81022,
+0x7a4200, 0x1377fff, 0x1c98410, 0x360c91,
+0xed1023, 0xd408b4, 0x110207, 0xd40804,
+0x118203, 0xc80e31, 0x100f1d, 0xd408b4,
+0x11820a, 0xd40804, 0x110208, 0x1621be8,
+0x988310, 0x0, 0x360000, 0x1377fff,
+0x1c3a100, 0x100f12, 0x1621be8, 0x988310,
+0xc8103f, 0xc8003f, 0x360021, 0xc81422,
+0x360063, 0xe91922, 0xce1202, 0xe91966,
+0x360070, 0x7a1242, 0xce0006, 0xd32040,
+0x118103, 0x1377fff, 0x1c3a107, 0x1581fff,
+0xd8bb12, 0x360003, 0xc8103e, 0xe81002,
+0xe91000, 0x1581fff, 0x98bb10, 0xce0200,
+0xed1022, 0x1020001, 0x1c00a31, 0x360c03,
+0xd32009, 0x118102, 0x36f417, 0xc8003f,
+0x360081, 0xc8043f, 0xe91986, 0x36f6a7,
+0x360083, 0xce0006, 0x6e50ea, 0xe91988,
+0x7a0240, 0xce1048, 0x1020001, 0x1c08de0,
+0xd32060, 0x118206, 0xc80403, 0x1020001,
+0x1c08dfd, 0x760201, 0x100f05, 0xd40004,
+0x110203, 0x6e0060, 0x770201, 0x1621be6,
+0x988310, 0xc80421, 0x1377fff, 0x1c80590,
+0x0, 0x360080, 0xe91988, 0xce1048,
+0x110109, 0xd40014, 0x110203, 0x6e0a21,
+0x100f06, 0xd32221, 0x118204, 0x700a21,
+0x100f02, 0xc80220, 0x370015, 0x36f50f,
+0x0, 0x370000, 0x36ff5f, 0x36fd3f,
+0x36fb1f, 0x36fc77, 0x36fa37, 0x36f817,
+0x36f8bf, 0x36f69f, 0x1581fff, 0x98bb17,
+0x70000, 0x762e17, 0x0, 0x37ff1f,
+0xc82210, 0x1020001, 0x1c00a53, 0xc80041,
+0xc8043e, 0xc81021, 0x370a01, 0x360001,
+0xe91000, 0xce0040, 0xe60008, 0x1020001,
+0x1c00c20, 0x36ff1f, 0x772e17, 0x70000,
+0x1580000, 0x98bb17, 0x0, 0x37fd1f,
+0xc82210, 0x1020001, 0x1c00427, 0x1581fff,
+0x198bb14, 0x1581fff, 0x1d8bb12, 0xc82011,
+0x1020001, 0x1c0118c, 0xc82011, 0xc80041,
+0xc81420, 0xc81020, 0x370a01, 0x36fc27,
+0x36fe07, 0x1020001, 0x1c00b3b, 0xc82011,
+0x1020001, 0x1c0112a, 0xd41f04, 0x110115,
+0x1621bd6, 0x988310, 0xc80425, 0x7a0040,
+0x1377fff, 0x1c80010, 0x0, 0x360a00,
+0xd40304, 0x118313, 0x360400, 0x1020001,
+0x1c009eb, 0xc80400, 0x360001, 0xc8103e,
+0xe91000, 0xce0200, 0x1020001, 0x1c00a0f,
+0xc8043e, 0x360001, 0xc81021, 0xe91000,
+0xce0040, 0xe60008, 0x1020001, 0x1c00c20,
+0x1020001, 0x1c00429, 0x36fd1f, 0x1581fff,
+0x198bb17, 0x70000, 0xc80420, 0x360480,
+0xc80020, 0x10c8004, 0x1279, 0xc81421,
+0xe6504a, 0xce520a, 0x110103, 0xc81421,
+0x100f02, 0xc81420, 0x6e0240, 0x760402,
+0x360080, 0x1e0f8ff, 0x1ffff00, 0x1e,
+0x183302, 0xe91c8a, 0xce70c8, 0xce104a,
+0x1020001, 0x1c08de0, 0xc8043f, 0xce0040,
+0xe81900, 0xcd000e, 0x370000, 0x70000,
+0x1580006, 0x18bb17, 0x0, 0x37fc17,
+0x37a09f, 0x37fe37, 0xc80202, 0xd40014,
+0x118106, 0xd40304, 0x118104, 0x1020001,
+0x1c01c58, 0x100f5c, 0x1621bff, 0x1988310,
+0xc81220, 0x1377fff, 0x1c90090, 0x0,
+0x360022, 0xe81022, 0xed1022, 0xd32002,
+0x110107, 0x1377fff, 0x1c82210, 0x761209,
+0xd41094, 0x1082f4, 0x100f4b, 0xd41094,
+0x110249, 0x1621c1e, 0x1588310, 0x1621bd6,
+0x989312, 0xc80025, 0x1377fff, 0x1c80490,
+0x7a0009, 0x1377fff, 0x1c90012, 0x360100,
+0x16a0000, 0x188304, 0x11013b, 0x1377fff,
+0x1c80090, 0x0, 0x360100, 0x16a0000,
+0x188304, 0x110134, 0xc80601, 0xd40294,
+0x11811f, 0x1581ffe, 0x198bb14, 0x1621c0a,
+0x1988310, 0xc80620, 0x360000, 0xc82c14,
+0xc82012, 0x1c0803, 0x1006521, 0x1800000,
+0x100752d, 0x1800000, 0x1020001, 0x1c03e42,
+0x360000, 0x1bbffff, 0x1ffe000, 0x184195,
+0x1302326, 0xe81700, 0x1581ffe, 0x198bb12,
+0x36eca7, 0xed1b00, 0xce420a, 0xce0040,
+0xe81c00, 0xcd0008, 0x37ec07, 0x1581ffa,
+0x18bb10, 0xc80003, 0x130f15, 0x1621c1e,
+0x1589312, 0x1581ffa, 0x18bb10, 0x1377fff,
+0x1c90492, 0x0, 0x360122, 0x1377fff,
+0x1c90092, 0x0, 0x360122, 0x1020001,
+0x1c02469, 0x36fe37, 0x36a09f, 0x36fc17,
+0x1581ffa, 0x18bb17, 0x70000, 0x1580000,
+0x98bb17, 0x0, 0x37fc17, 0x37fd1f,
+0x37ff3f, 0xc82210, 0xc82612, 0xc82013,
+0x1020001, 0x1c010e4, 0x1376100, 0x884011,
+0xc82413, 0xc80440, 0xc80001, 0x1020001,
+0x1c0108a, 0x1377fff, 0x1c94011, 0xc82011,
+0xc80040, 0x1020001, 0x1c03c84, 0x1621c0a,
+0x1988310, 0x0, 0x360a00, 0xd40004,
+0x11840f, 0x1580003, 0x1988b10, 0x1646110,
+0x312627, 0xc80440, 0x1020001, 0x1c010bc,
+0x1580003, 0x1988b12, 0x1580003, 0x188b10,
+0xc80040, 0x1020001, 0x1c03c84, 0x36ff3f,
+0x36fd1f, 0x36fc17, 0x1581fff, 0x198bb17,
+0x70000, 0x0, 0x70000, 0x1580000,
+0xd8bb17, 0x0, 0x37fa17, 0x37fb1f,
+0x37fc37, 0x37fd3f, 0x37ff5f, 0xc82a10,
+0xc82212, 0xc82015, 0x1020001, 0x1c01521,
+0xb04000, 0x16a0010, 0x180304, 0x11031b,
+0xc82611, 0x1377fff, 0x1c8a195, 0x360015,
+0xc80622, 0x1377fff, 0x1c80091, 0x1620008,
+0x180300, 0x360123, 0x1020001, 0x1c03c84,
+0x770603, 0x1580010, 0x188b11, 0x762613,
+0xd40034, 0x1004f4, 0xb04010, 0x16a0010,
+0x180304, 0x118202, 0xc80020, 0x370005,
+0xc80020, 0x370405, 0x36ff5f, 0x36fd3f,
+0x36fb1f, 0x36fc37, 0x36fa17, 0x1581fff,
+0x158bb17, 0x70000, 0x1580001, 0x18bb17,
+0x0, 0x37f217, 0x37f89f, 0x37f437,
+0x37fb1f, 0x37fd3f, 0x37ff5f, 0xc82a10,
+0xc82012, 0x37f36f, 0x37f54f, 0x37f72f,
+0x158000f, 0x98ab13, 0xc80220, 0xc80622,
+0x360a00, 0xc81221, 0x360420, 0xc82014,
+0x1580010, 0x18ab11, 0x760000, 0x7d0040,
+0x11b8000, 0xf80d, 0x11b8008, 0xfb0d,
+0x1646110, 0x312627, 0xc82015, 0x1020001,
+0x1c01502, 0x770603, 0x370091, 0x762613,
+0x1580024, 0x1988b11, 0xd40034, 0x1004f5,
+0x36f36f, 0xc82015, 0x36f54f, 0x36f72f,
+0x1020001, 0x1c01f24, 0x36ff5f, 0x36fd3f,
+0x36fb1f, 0x36f437, 0x36f217, 0x36f89f,
+0x1581fff, 0x18bb17, 0x70000, 0x762e17,
+0xc81000, 0xd42184, 0x11050c, 0xd42284,
+0x11040a, 0x1376120, 0x90010, 0x158000f,
+0x989312, 0x1581ffb, 0x1d89312, 0x1020001,
+0x1c01502, 0x100f03, 0x1020001, 0x1c01f80,
+0x772e17, 0x70000, 0x1580002, 0x158bb17,
+0x0, 0x37fa17, 0x37ee9f, 0x37fc37,
+0x37f0bf, 0x37fe77, 0x37f31f, 0x37f53f,
+0x37f75f, 0x37d72f, 0x37d90f, 0x1020001,
+0x1c0151d, 0x36d90f, 0x1581ffe, 0x1d8bb13,
+0xc80622, 0xc80220, 0x158000f, 0x1988315,
+0x158000f, 0x988310, 0x1581ffd, 0xd8bb11,
+0x37db0f, 0x1580020, 0xd8ab10, 0xc82813,
+0xc82410, 0x1c0303, 0x1006505, 0x1800000,
+0x1007509, 0x1800000, 0x36db0f, 0x0,
+0x360000, 0xd40204, 0x118105, 0x1620002,
+0x1580300, 0x370001, 0x100f04, 0x1620008,
+0x180300, 0x370001, 0x1581ffd, 0x158bb10,
+0x1377fff, 0x1c80090, 0x37dd0f, 0xc82015,
+0x1020001, 0x1c01521, 0x36db0f, 0x770603,
+0x760201, 0x1580024, 0x198ab15, 0x762211,
+0x1377fff, 0x1c9a193, 0x762010, 0x37db0f,
+0x36dd0f, 0x0, 0x370000, 0xd40034,
+0x1004d5, 0xc80622, 0xc80220, 0x36d90f,
+0x1581ffd, 0x1d8bb15, 0xc81620, 0xc80e22,
+0x158000f, 0x1988313, 0x1581ffe, 0x58bb10,
+0x1581ffe, 0x1d8bb11, 0x37df0f, 0x1581ffd,
+0x158bb12, 0x1581ffd, 0xd8bb14, 0xc82020,
+0x1377fff, 0x1c90592, 0x1377fff, 0x1ca0594,
+0x36df6f, 0x360002, 0x370106, 0x360024,
+0xd32040, 0x118267, 0x36d90f, 0x1620010,
+0x180300, 0x1377fff, 0x1c80590, 0x7d0001,
+0x1377fff, 0x1c90013, 0x11b0000, 0xf408,
+0x1377fff, 0x1c82192, 0xc82410, 0xd40204,
+0x11814f, 0x1580020, 0xd89b10, 0x1581ffe,
+0x118bb14, 0xc81426, 0xc80023, 0xc80426,
+0x7d5241, 0x1620008, 0x184308, 0x37e10f,
+0x7d420b, 0x36d90f, 0x0, 0x11b0008,
+0xfb08, 0x37e34f, 0x1377fff, 0x1c80410,
+0x1581ffe, 0x118bb14, 0x1620008, 0x184308,
+0x37e54f, 0x1377fff, 0x1ca0513, 0x1620010,
+0x18530a, 0x37e74f, 0x36df4f, 0x0,
+0x370104, 0x1621d38, 0x988310, 0x37e90f,
+0x36e10f, 0xc82c11, 0xc82810, 0x1c0303,
+0x1006569, 0x1800000, 0x100756d, 0x1800000,
+0x1581ffe, 0x118bb10, 0x37eb0f, 0x36e70f,
+0x1580020, 0x1988310, 0x37ed0f, 0x36e36f,
+0x360293, 0x36df0f, 0x1377fff, 0x1ca0492,
+0x370326, 0x36e52f, 0x37e947, 0x360100,
+0x3704a2, 0x36eb2f, 0x36e94f, 0x36ed6f,
+0x1020001, 0x1c0075f, 0x1581ffe, 0x118bb10,
+0x36e927, 0x360300, 0x1387fff, 0x1c01012,
+0x700220, 0x370005, 0x11020e, 0x1580010,
+0x180300, 0x370005, 0x100f0a, 0x1620008,
+0x181302, 0x360203, 0x1377fff, 0x1c80010,
+0x370025, 0x36df2f, 0x0, 0x370102,
+0x36df0f, 0x770e07, 0x1580024, 0x1989b13,
+0x762a15, 0x1377fff, 0x1c8a191, 0x76160b,
+0x762010, 0x37df0f, 0xd40074, 0x100480,
+0x36d70f, 0x1581ffe, 0x58bb12, 0x1377fff,
+0x1c80090, 0x0, 0x360140, 0x370542,
+0x36d92f, 0x0, 0x11b0000, 0x920a,
+0xd40004, 0x110121, 0x36d94f, 0xc81024,
+0x1620008, 0x181302, 0xc80023, 0x1581ffe,
+0x58bb12, 0x7d4201, 0x1377fff, 0x1ca0414,
+0x360d00, 0x158000c, 0x98a316, 0x1580009,
+0x98a314, 0x1020001, 0x1c0872b, 0x36d90f,
+0xc81024, 0x1620008, 0x181302, 0xc80023,
+0x7d4201, 0x1377fff, 0x1c80410, 0x158000c,
+0x988312, 0x1580009, 0x988310, 0x1020001,
+0x1c08cba, 0x100f10, 0x36d94f, 0xc81024,
+0x1620008, 0x181302, 0xc80023, 0x1581ffe,
+0x58bb12, 0x7d4201, 0x1377fff, 0x1ca0414,
+0x360d00, 0x1580009, 0x98a314, 0x1020001,
+0x1c08cce, 0x770603, 0x760201, 0xd40034,
+0x1008000, 0x10013f5, 0x1581ffe, 0x58bb10,
+0x36d92f, 0x1581ffe, 0x1d8bb14, 0x1581ffd,
+0x1d8bb16, 0x158000f, 0x1989312, 0x10c8000,
+0x8014f1, 0x360110, 0x16a0000, 0x188b04,
+0x11011a, 0x1580020, 0xd89311, 0xc82a11,
+0xc82614, 0x1c0303, 0x1006507, 0x1800000,
+0x100750b, 0x1800000, 0x360202, 0x1377fff,
+0x1c0006c, 0x16a0010, 0x180304, 0x118203,
+0x1581ff0, 0x180300, 0x762212, 0x0,
+0x370001, 0x360022, 0xd32040, 0x118103,
+0xc80021, 0x370402, 0x762010, 0x1580024,
+0x1989312, 0x1377fff, 0x1ca2194, 0x762c16,
+0x36d90f, 0x1620008, 0x180300, 0x1020001,
+0x1c01f15, 0x36f75f, 0x36f53f, 0x36f31f,
+0x36fe77, 0x36fc37, 0x36fa17, 0x36f0bf,
+0x36ee9f, 0x1581ffd, 0xd8bb17, 0x70000,
+0x14b7fff, 0x1c02000, 0x11010a, 0xd40004,
+0x118306, 0xd40204, 0x110304, 0xc80022,
+0x370002, 0x100f0f, 0xc80022, 0x100f0e,
+0x11b0000, 0xf808, 0x1ea0000, 0x0,
+0x17700, 0x582300, 0x118104, 0xc80020,
+0x370002, 0x100f03, 0xc80021, 0x370002,
+0xc80020, 0x0, 0x70000, 0x1020001,
+0x1c01e71, 0x0, 0x70000, 0x360200,
+0x1387fff, 0x1c00060, 0x118106, 0x360420,
+0xd40024, 0x110103, 0xc80020, 0x100f05,
+0xd40004, 0x110303, 0x1580010, 0x180300,
+0x0, 0x70000, 0x1580000, 0x198bb17,
+0x0, 0x37f71f, 0x37f93f, 0x37fb5f,
+0xc82210, 0xc82616, 0x37f54f, 0x1581fff,
+0x98bb10, 0x1581fff, 0x98bb14, 0x14bffff,
+0x1c040be, 0xc82a10, 0xc82c12, 0x1c0603,
+0x100652d, 0x1800000, 0x100752b, 0x1800000,
+0x360223, 0x370224, 0x360103, 0x371501,
+0x360622, 0x371e21, 0x360622, 0x14bffff,
+0x1c12002, 0x1c47f00, 0x208000, 0x60,
+0xa05302, 0xc91802, 0x1020001, 0x1c08e17,
+0x14b7fff, 0x1c52000, 0x1377fff, 0x1c84091,
+0xc80420, 0xc81049, 0xc80020, 0x3720a1,
+0x370a21, 0x370c21, 0x370e21, 0x371081,
+0x371221, 0xc82811, 0xc82410, 0x1c0503,
+0x1006525, 0x1800000, 0x1007529, 0x1800000,
+0xc82011, 0x370081, 0x130f5d, 0x1377fff,
+0x1cb2213, 0x1581fff, 0x98bb12, 0x1580005,
+0x988b10, 0x36f54f, 0x1020001, 0x1c04c12,
+0x36fb5f, 0x36f93f, 0x36f71f, 0x1581fff,
+0x98bb17, 0x70000, 0xc81000, 0xd40084,
+0x110118, 0xd40184, 0x110111, 0xd40284,
+0x11010c, 0xd40384, 0x110112, 0xd40484,
+0x118106, 0x1e08000, 0xc1, 0x800000,
+0x185308, 0x100f0d, 0xc80021, 0x100f15,
+0xc81020, 0xc81448, 0x100f08, 0x1e0a088,
+0xc3, 0x900000, 0x185308, 0x100f03,
+0xc81020, 0xc8142d, 0x8e2202, 0x118208,
+0x8e2242, 0x110306, 0x1377fff, 0x1c80010,
+0xc80020, 0x370a20, 0x100f02, 0xc80022,
+0x0, 0x70000, 0x1580000, 0x98bb17,
+0x0, 0x37fd1f, 0x37ff3f, 0xc82610,
+0xc82212, 0xc82013, 0x130f5f, 0x360003,
+0xb00000, 0x118105, 0xc82411, 0xc82013,
+0x1020001, 0x1c0164b, 0x36ff3f, 0x36fd1f,
+0x1581fff, 0x198bb17, 0x70000, 0x360000,
+0x1477fff, 0x1c24400, 0x118103, 0x1020001,
+0x1c0164b, 0x0, 0x70000, 0x360000,
+0x1477fff, 0x1c22680, 0x118103, 0x1020001,
+0x1c0164b, 0x0, 0x70000, 0x1580000,
+0x98bb17, 0x0, 0x37fc17, 0x37fd1f,
+0x37fe37, 0x1646100, 0xb11621, 0x1377fff,
+0x1c82111, 0x360821, 0x360201, 0x144ffff,
+0x1c1e048, 0x880002, 0x1020001, 0x1c0877e,
+0x8c1060, 0xc81020, 0x10c8000, 0x801603,
+0x1621bf2, 0x1188310, 0xc80040, 0x7d0008,
+0x1377fff, 0x1ca0011, 0x1377fff, 0x1c80010,
+0x1580002, 0x98a312, 0x1580003, 0x198a314,
+0x10c8000, 0x1801602, 0x1467fff, 0x1c00160,
+0xd40014, 0x110405, 0x370002, 0xc80020,
+0x370004, 0x100f0d, 0x14bffff, 0x1c52001,
+0x1c47f00, 0x208000, 0x61, 0xa0530a,
+0x144ffff, 0x1c06200, 0xc9180a, 0x1020001,
+0x1c08e17, 0x370004, 0x762010, 0x762412,
+0x762814, 0x761008, 0x372211, 0x36fd1f,
+0x36fe37, 0x36fc17, 0x1581fff, 0x198bb17,
+0x70000, 0xc82410, 0x360a00, 0x360022,
+0x8e2002, 0x110113, 0x14b7fff, 0x1c12000,
+0x370002, 0xd40124, 0x11010b, 0xd40224,
+0x118105, 0x361d20, 0x11b8008, 0xc728,
+0x100f08, 0x361920, 0x11b8008, 0xc728,
+0x100f04, 0x361b20, 0x11b8008, 0xc728,
+0xc82410, 0x360c20, 0xc80020, 0x762412,
+0x0, 0x360082, 0x8e2048, 0x110103,
+0x370022, 0xc80021, 0x1377fff, 0x1c92110,
+0x360e20, 0x360082, 0x8e2048, 0x110103,
+0x370022, 0xc80021, 0x1377fff, 0x1c92210,
+0x361220, 0x360082, 0x8e2048, 0x110103,
+0x370022, 0xc80021, 0x1377fff, 0x1c92190,
+0x361020, 0x360082, 0x8e2048, 0x110102,
+0x370022, 0xd40004, 0x110105, 0x361e00,
+0x362020, 0x7d0040, 0x130f81, 0x0,
+0x70000, 0x1580005, 0x18bb17, 0x0,
+0x37fc17, 0x37b09f, 0x37fe37, 0x37b31f,
+0x37b53f, 0x37b75f, 0xc82610, 0xc82a12,
+0x361513, 0x0, 0x360a01, 0xd40504,
+0x1010010, 0x80171b, 0x1581ffb, 0x18bb10,
+0x1620004, 0x1981302, 0xc80020, 0x1020001,
+0x1c03c73, 0xc82011, 0xc80020, 0x1020001,
+0x1c010e4, 0x1581ffb, 0x18bb10, 0xc82411,
+0xc80440, 0x1377fff, 0x1c84010, 0x1020001,
+0x1c0108a, 0x1581ffb, 0x18bb10, 0x0,
+0x361100, 0x16a0000, 0x188304, 0x118149,
+0x360603, 0x1477fff, 0x1c24480, 0x11814b,
+0x362203, 0xd40004, 0x11012a, 0x1581ffb,
+0x18bb10, 0x1580003, 0x1989b16, 0xc82415,
+0xc80040, 0x1580002, 0x989b14, 0x361e23,
+0x360d00, 0x1020001, 0x1c0872b, 0x1580003,
+0x1989b12, 0x361e23, 0xc80040, 0x1580002,
+0x989b10, 0x1020001, 0x1c08cba, 0x1581ffb,
+0x18bb10, 0x1580004, 0x1189b16, 0xc82415,
+0xc80040, 0x1580003, 0x189b14, 0x361e23,
+0x360f00, 0x1020001, 0x1c0872b, 0x1580004,
+0x1189b12, 0x361e23, 0xc80040, 0x1580003,
+0x189b10, 0x1020001, 0x1c08cba, 0x100f15,
+0x1581ffb, 0x18bb10, 0x1580002, 0x989b14,
+0xc82415, 0xc80040, 0x361e23, 0x360d00,
+0x1020001, 0x1c08cce, 0x1581ffb, 0x18bb10,
+0x1580003, 0x189b14, 0xc82415, 0xc80040,
+0x361e23, 0x360f00, 0x1020001, 0x1c08cce,
+0xc80022, 0x11b8000, 0xb80b, 0x100f42,
+0x360603, 0x1477fff, 0x1c24480, 0x118103,
+0xc81220, 0x100f06, 0x360603, 0xc80422,
+0x14b7fff, 0x1c02000, 0x7a4840, 0x360603,
+0x1477fff, 0x1c24480, 0x118103, 0xc80240,
+0x100f02, 0xc80222, 0x1581ffb, 0x18bb10,
+0xc80620, 0x1377fff, 0x1c8c010, 0xd40014,
+0x11841f, 0x360101, 0x16a0000, 0x188304,
+0x110117, 0x1377fff, 0x1c90195, 0x1377fff,
+0x1c90492, 0x0, 0x360122, 0x16a0000,
+0x189304, 0x11010e, 0x362203, 0xd40004,
+0x110107, 0x361e83, 0x363c23, 0x362403,
+0x1020001, 0x1c08723, 0x100f05, 0x361e23,
+0x362403, 0x1020001, 0x1c08cc6, 0x762211,
+0x760603, 0xd32023, 0x1005e3, 0x1580003,
+0x1989b12, 0xc80021, 0x361e23, 0x1580002,
+0x989b10, 0x1020001, 0x1c08cba, 0x11b8000,
+0xb81b, 0x362203, 0xd40004, 0x11010b,
+0x361e23, 0xd32040, 0x118404, 0x700040,
+0x372203, 0x100f05, 0xc82013, 0xc80020,
+0x1020001, 0x1c015c9, 0x1581ffb, 0x18bb12,
+0x1581ffb, 0x18bb10, 0xc80040, 0x1377fff,
+0x1c94012, 0x1020001, 0x1c03c84, 0x1581ffb,
+0x18bb12, 0x1580005, 0x989b10, 0x1020001,
+0x1c04c97, 0x36b75f, 0x36b53f, 0x36b31f,
+0x36fe37, 0x36fc17, 0x36b09f, 0x1581ffb,
+0x18bb17, 0x70000, 0x762e17, 0x0,
+0x37fe07, 0x1581fff, 0x1d8bb10, 0xc81022,
+0xc80420, 0x1620006, 0x580300, 0x1020001,
+0x1c024bb, 0x1581fff, 0x1d8bb10, 0xc81022,
+0xc80420, 0x1620006, 0x980300, 0x1020001,
+0x1c024bb, 0x772e17, 0x70000, 0x762e17,
+0x0, 0x37fe07, 0x1581fff, 0x1d8bb10,
+0xc81024, 0xc80420, 0x1620006, 0x580300,
+0x1020001, 0x1c024bb, 0x1581fff, 0x1d8bb10,
+0xc81024, 0xc80420, 0x1620006, 0x980300,
+0x1020001, 0x1c024bb, 0x772e17, 0x70000,
+0xc82812, 0xc82410, 0x16a0000, 0x18a304,
+0x118120, 0x1580001, 0x1189314, 0x1580001,
+0x1189310, 0x1e0a080, 0x47, 0x1770000,
+0x181308, 0x1cb8000, 0x60cc, 0x1033e61,
+0x992321, 0xc80020, 0x370004, 0x370204,
+0x371c82, 0x371e22, 0x372022, 0x372202,
+0x372402, 0x3728a2, 0x372a62, 0x372c02,
+0x372e02, 0xc82c12, 0xc82810, 0x1c0c03,
+0x1006509, 0x1800000, 0x100750d, 0x1800000,
+0x0, 0x70000, 0x1580000, 0x98bb17,
+0x0, 0x37fe27, 0xc80400, 0xd41824,
+0x110475, 0x1621bf6, 0x189312, 0x1377fff,
+0x1c90112, 0x0, 0x360122, 0x0,
+0xc0f02, 0x0, 0xc80420, 0xc8102d,
+0x100f54, 0x1e0a3dd, 0x1800047, 0x770000,
+0x184302, 0x100f4f, 0x1621c0a, 0x1989312,
+0xc80420, 0x360082, 0x14bffff, 0x1c42008,
+0x100f48, 0x1621c0a, 0x1989312, 0xc80420,
+0x360282, 0x14bffff, 0x1c42008, 0x100f41,
+0x1e0a098, 0x0, 0x0, 0x184302,
+0x100f0e, 0x36fe07, 0x1020001, 0x1c01872,
+0x100f4e, 0x1e0a3bf, 0x1ff0000, 0x0,
+0x184302, 0x100f33, 0x1cb8000, 0x610c,
+0x1033f60, 0x990321, 0x36fea7, 0x14bffff,
+0x1c5200a, 0x1c47f00, 0x208000, 0x61,
+0xa0530a, 0x37fea7, 0x100f26, 0x1cb8000,
+0x610c, 0x1034160, 0x1990320, 0x3616e0,
+0x36fea7, 0xc80406, 0x8e20ce, 0x118103,
+0xd403a4, 0x110118, 0x361660, 0x1477fff,
+0x1c24506, 0x118103, 0xd404a4, 0x110112,
+0x361660, 0xd01c49, 0x8e22c6, 0x118105,
+0xd400a4, 0x11010c, 0xd405a4, 0x11010a,
+0x361660, 0x14bffff, 0x1c72041, 0x8e22c6,
+0x118103, 0xd400a4, 0x110103, 0xc80024,
+0x100f1a, 0x14bffff, 0x1c5200a, 0x37fea7,
+0x36fea7, 0x8e204a, 0x11820b, 0x36fe27,
+0x8e2202, 0x110308, 0x1377fff, 0x1c90010,
+0x36fe07, 0x371802, 0x1020001, 0x1c01a19,
+0x100f0a, 0xc80022, 0x100f08, 0x1621bf4,
+0x188310, 0x1020001, 0x1c00107, 0xc80020,
+0x100f02, 0xc80021, 0x1581fff, 0x198bb17,
+0x70000, 0x762e17, 0x0, 0x37ff1f,
+0xc82210, 0xc80400, 0xd40924, 0x11053f,
+0xd41724, 0x11043d, 0x1621bf9, 0x588310,
+0x1377fff, 0x1c80110, 0x0, 0x36ef00,
+0x0, 0xc0f00, 0x0, 0xc80048,
+0x370001, 0x100f2f, 0x1020001, 0x1c009cd,
+0x370001, 0xc80021, 0x360021, 0xe60040,
+0x1020001, 0x1c00c24, 0x100f26, 0x361602,
+0x14b6100, 0x1003000, 0xe80100, 0x14b7e00,
+0x802002, 0x370001, 0x100f1e, 0x361622,
+0xd01049, 0x8e2202, 0x110104, 0x770029,
+0x370001, 0x100f17, 0xb0f400, 0x1020001,
+0x1c0268d, 0x370001, 0x100f12, 0xc82011,
+0x1020001, 0x1c0196a, 0x14bffff, 0x1c02000,
+0x370001, 0x100f0b, 0xc82011, 0x1020001,
+0x1c0199b, 0x14bffff, 0x1c02000, 0x370001,
+0x100f04, 0x1020001, 0x1c02712, 0x370001,
+0xc80020, 0x100f02, 0xc80021, 0x36ff1f,
+0x772e17, 0x70000, 0x100751f, 0x1800000,
+0xc81c00, 0x14b7fff, 0x1c0b00e, 0xe80111,
+0x14b7e00, 0x80a00e, 0x1621c0a, 0x1988310,
+0x1ea0000, 0x0, 0x2ee00, 0x582301,
+0x118103, 0xc80021, 0x100f02, 0xc80020,
+0x370a00, 0x1ea0000, 0x0, 0x2ee00,
+0x582301, 0x118104, 0x1620010, 0x184308,
+0x100f03, 0x1620008, 0x184308, 0x1621770,
+0x181302, 0x14b7fff, 0x1c0300e, 0xe80100,
+0x14b7e00, 0x80200e, 0x1621c0b, 0x1189312,
+0x370680, 0x1020001, 0x1c08de0, 0x1621c0b,
+0x158a314, 0x14b7fff, 0x1c1300e, 0xe80122,
+0x14b7e00, 0x81200e, 0x370002, 0x370410,
+0x370424, 0x36fe17, 0x772e17, 0x70000,
+0x1580002, 0x198bb17, 0x0, 0x37fa17,
+0x37d69f, 0x37fc37, 0x37d8bf, 0x37fe77,
+0x37d607, 0xc80421, 0x36d607, 0xe90f08,
+0xce1048, 0x110104, 0x1639869, 0x181b03,
+0x100f0a, 0x1e099c0, 0x0, 0xfffe,
+0x184302, 0xce0040, 0xe81100, 0x14bffff,
+0x1c02000, 0x8c1a00, 0xc80220, 0xc81220,
+0x36d607, 0x770428, 0xc81625, 0xe91000,
+0xce3840, 0xc80021, 0xe60020, 0xce00e0,
+0x110133, 0x36d607, 0x770428, 0xe91800,
+0xce0040, 0x11011d, 0xd40c04, 0x110110,
+0xd40e04, 0x11810c, 0xd40214, 0x118521,
+0x1581ffd, 0x118bb10, 0x13b6132, 0x302603,
+0x1620007, 0x1180300, 0x1020001, 0x1c007ad,
+0x100f18, 0xc81224, 0x100f1d, 0xd40214,
+0x118514, 0x1581ffd, 0x118bb10, 0x13b6132,
+0x302603, 0x1620007, 0xd80300, 0x1020001,
+0x1c007ad, 0x100f0b, 0xd40614, 0x118509,
+0x1581ffd, 0x118bb10, 0x1376132, 0x12101,
+0x1620011, 0x1580300, 0x1020001, 0x1c007ad,
+0xd40094, 0x118106, 0x1581ffd, 0x118bb10,
+0x1020001, 0x1c024ee, 0xc81200, 0x77160b,
+0x760201, 0xd400b4, 0x1004c7, 0xc80009,
+0x36fe77, 0x36d8bf, 0x36fc37, 0x36d69f,
+0x36fa17, 0x1581ffd, 0x98bb17, 0x70000,
+0x762e17, 0xd40004, 0x110114, 0x1581fff,
+0x1d8bb10, 0xc81448, 0xc81026, 0xc80420,
+0x1620006, 0x180300, 0x37fea7, 0x1020001,
+0x1c024bb, 0x1581fff, 0x1d8bb10, 0xc81027,
+0xc80420, 0x1620006, 0x180300, 0x1020001,
+0x1c024bb, 0x100f19, 0x1581fff, 0x1d8bb10,
+0xc81020, 0xc80421, 0x1620008, 0xd80300,
+0x1020001, 0x1c024bb, 0x36fe07, 0x14b7fff,
+0x1c02000, 0x118103, 0xc81026, 0x100f02,
+0xc81027, 0x1581fff, 0x1d8bb10, 0xc81420,
+0xc80420, 0x1620006, 0x180300, 0x37fea7,
+0x1020001, 0x1c024bb, 0x772e17, 0x70000,
+0x1580000, 0xd8bb17, 0x0, 0x37fc17,
+0x37fe37, 0x37fa07, 0x1621bf5, 0x1188310,
+0xc80230, 0xc80620, 0x360000, 0x169ffff,
+0x1c23000, 0x11012b, 0x1020001, 0x1c0248c,
+0x16a0000, 0x188304, 0x11011b, 0x360400,
+0xc80421, 0xe91608, 0xce1048, 0x110116,
+0xe91a00, 0xc80421, 0xce0040, 0x110112,
+0x1621bf5, 0x1188310, 0x1377fff, 0x1c80190,
+0x0, 0x360010, 0x169ffff, 0x1c23001,
+0x110114, 0x1581fff, 0x158bb10, 0x1646110,
+0x308641, 0xc80420, 0x1020001, 0x1c024bb,
+0x100f0c, 0x1621bf5, 0x1188310, 0x760603,
+0x1377fff, 0x1c80190, 0x0, 0x360000,
+0x169ffff, 0x1c23000, 0x1001ec, 0x100fd7,
+0x36fe37, 0x36fc17, 0x1581fff, 0x158bb17,
+0x70000, 0x100751f, 0x1800000, 0x37ff1f,
+0x14b7fff, 0x1c02000, 0x1e08000, 0xff,
+0x1fe01fe, 0x190302, 0xce0840, 0x118104,
+0xc80021, 0x130f87, 0x100f16, 0x1621bd6,
+0x988b11, 0x1377fff, 0x1c82291, 0x1020001,
+0x1c01109, 0x1377fff, 0x1c82311, 0x1020001,
+0x1c01109, 0xd40114, 0x110103, 0xc80021,
+0x100f02, 0xc80020, 0x14bffff, 0x1c02000,
+0x130fa4, 0xc80020, 0x1020001, 0x1c018d6,
+0x36ff1f, 0x36fe17, 0x772e17, 0x70000,
+0x762e17, 0x0, 0x37ff1f, 0xc82210,
+0x1020001, 0x1c000e1, 0x16201ff, 0x1d81302,
+0xc81021, 0x37fe07, 0xc8003e, 0x36fea7,
+0xce504a, 0x360221, 0xce0002, 0xe60008,
+0xce400a, 0x110103, 0xc80024, 0x100f1b,
+0xc81021, 0xe91f22, 0xce1202, 0x1020001,
+0x1c000f2, 0xc8103e, 0xc81421, 0x360201,
+0xc80420, 0xce0200, 0xe6000a, 0x1020001,
+0x1c000f3, 0xc8103e, 0x360201, 0xce0200,
+0x360021, 0x1020001, 0x1c00158, 0xc8103e,
+0x360201, 0xc80430, 0xce0200, 0x1020001,
+0x1c001b8, 0xc80020, 0x36ff1f, 0x772e17,
+0x70000, 0x1580000, 0x118bb17, 0x0,
+0x37fe17, 0x37f91f, 0xc82210, 0x1e0ffff,
+0x0, 0x0, 0x184300, 0x1e08000,
+0x100, 0x3fffe, 0x185302, 0x37f807,
+0x770029, 0x360261, 0x36f817, 0x1677fff,
+0x1c00062, 0xe91f6e, 0xce1040, 0xce4201,
+0xce524e, 0xcd1048, 0x37f827, 0xd400a4,
+0x118116, 0xe91e6a, 0x36f827, 0x1e08000,
+0x1ff, 0x1f7fffe, 0x183308, 0xe80100,
+0xce1202, 0xce40ca, 0x1e08000, 0x1ffff00,
+0x80000, 0x18330e, 0xcd12c2, 0x1639fff,
+0x198530a, 0xcd0200, 0xce1242, 0xce00c0,
+0xcd0002, 0x37f807, 0xc8103e, 0x360201,
+0xce0200, 0x36f827, 0x1020001, 0x1c003e7,
+0xc81020, 0x360021, 0x771429, 0xc80021,
+0xe91022, 0x37fa87, 0x771029, 0x360261,
+0xce1242, 0x36faa7, 0x771c29, 0xe91f66,
+0xce52ca, 0x770402, 0xce0006, 0xce4202,
+0xe81088, 0xcd420a, 0x37fa87, 0xd40004,
+0x11810a, 0xe80120, 0x770429, 0x771029,
+0x36faa7, 0xce0040, 0xce120a, 0xe81000,
+0xcd0002, 0x37fa07, 0xc8103e, 0x360201,
+0xce0200, 0x36fa27, 0x1020001, 0x1c00188,
+0xc80020, 0x360021, 0x771029, 0xc8143e,
+0x37fc07, 0xe91020, 0x3602e1, 0x770c29,
+0xce0a00, 0xce024e, 0x36fce7, 0x770429,
+0x771401, 0xce104e, 0xd01029, 0xce50ca,
+0xe810a6, 0xcd10c2, 0xce1202, 0xcd1242,
+0x1020001, 0x1c00128, 0xc8043e, 0x360201,
+0xc81021, 0xce0040, 0xe60008, 0x1020001,
+0x1c00c20, 0xc80020, 0x36f91f, 0x36fe17,
+0x1581fff, 0x118bb17, 0x70000, 0x1580000,
+0xd8bb17, 0x0, 0x37fc17, 0x37fb1f,
+0x37fe37, 0x37fd3f, 0xc82210, 0x1580001,
+0x1188b13, 0xc80220, 0xc80622, 0xc82411,
+0x1377fff, 0x1c80092, 0x360003, 0x37fa07,
+0x360020, 0x8e2002, 0x110119, 0x370000,
+0xc80420, 0x360002, 0x8e2040, 0x110103,
+0xc80021, 0x100f02, 0xc80020, 0x360282,
+0x8e2048, 0x110103, 0xc80421, 0x100f02,
+0xc80420, 0x1020001, 0x1c00e51, 0x1581fff,
+0x158bb10, 0xb02118, 0xc80420, 0x1620006,
+0x1d80300, 0x1020001, 0x1c024bb, 0x762613,
+0x770603, 0x760201, 0xd40034, 0x1004dc,
+0x1377fff, 0x1c82111, 0x361c01, 0x37fa07,
+0x360020, 0x8e2002, 0x11010f, 0x370000,
+0x36fa07, 0x1020001, 0x1c0183c, 0x1620000,
+0x588310, 0x0, 0x360008, 0xd40004,
+0x110105, 0x1020001, 0x1c02c27, 0x1008001,
+0x1c01ade, 0x1377fff, 0x1c82191, 0x361e01,
+0x37fa07, 0x360020, 0x8e2002, 0x11010d,
+0x1620000, 0x589312, 0x370000, 0x36000a,
+0xd40004, 0x118107, 0x1621c0a, 0x1988310,
+0x36fa07, 0x14b7fff, 0x1c02000, 0x370000,
+0x1377fff, 0x1c82211, 0x362001, 0x37fa07,
+0x360020, 0x8e2002, 0x110117, 0x1620000,
+0x589312, 0x370000, 0x36000a, 0xd40004,
+0x118108, 0x1621c0a, 0x1988310, 0x36fa07,
+0x14b7fff, 0x1c02000, 0x370200, 0x100f0a,
+0x1581fff, 0x158bb10, 0xc80420, 0x1620007,
+0x1584308, 0x1620012, 0x1980300, 0x1020001,
+0x1c024bb, 0x362201, 0x37fa07, 0x360a21,
+0x8e2002, 0x11011c, 0xc80420, 0x8e2040,
+0x11010b, 0x144ffff, 0x1c44400, 0x14b7fff,
+0x1c42008, 0x1377fff, 0x1c80411, 0x0,
+0x360080, 0x8e2048, 0x11010f, 0x370a01,
+0x36fa07, 0x14b7fff, 0x1c02000, 0x1020001,
+0x1c00ebf, 0x1581fff, 0x158bb10, 0xc80420,
+0xc81020, 0x1620007, 0x580300, 0x1020001,
+0x1c024bb, 0x1377fff, 0x1c84011, 0x362401,
+0x37fa07, 0x360020, 0x8e2002, 0x110102,
+0x370000, 0x1377fff, 0x1c82291, 0x362801,
+0x37fa07, 0x360020, 0x8e2002, 0x110105,
+0x370000, 0x36fa07, 0x1020001, 0x1c01943,
+0x1580002, 0x1588b10, 0x14bffff, 0x1c0a03e,
+0x360000, 0x8e2020, 0x110116, 0x360000,
+0xc80421, 0x14b7fff, 0x1c02000, 0xe60002,
+0x1020001, 0x1c00c24, 0xc81021, 0x362a01,
+0xc80420, 0x14b7fff, 0x1c02000, 0xe60008,
+0x1020001, 0x1c000f2, 0x362a01, 0x14b7fff,
+0x1c02000, 0x1020001, 0x1c009df, 0x372a11,
+0xc80020, 0x36fd3f, 0x36fb1f, 0x36fe37,
+0x36fc17, 0x1581fff, 0x158bb17, 0x70000,
+0x1580000, 0xd8bb17, 0x0, 0x37fb1f,
+0x37fd3f, 0x37ff5f, 0xc82210, 0xc82016,
+0x360622, 0xc80028, 0x370421, 0x360622,
+0x1020001, 0x1c08de0, 0x370601, 0xc82811,
+0x1377fff, 0x1c94011, 0x1580001, 0x988b16,
+0xc81020, 0xc80020, 0x360130, 0x762814,
+0x1620040, 0x181302, 0x371331, 0x370281,
+0xc82a11, 0xc82614, 0x1c0103, 0x1006587,
+0x1800000, 0x100758b, 0x1800000, 0x360740,
+0x370142, 0x370f61, 0x360900, 0x371101,
+0x360102, 0x1020001, 0x1c03c73, 0x1620040,
+0x181302, 0xc80020, 0x361101, 0x1020001,
+0x1c06aa0, 0x1621bfb, 0x188310, 0x0,
+0x370110, 0x36ff5f, 0x36fd3f, 0x36fb1f,
+0x1581fff, 0x158bb17, 0x70000, 0xc81000,
+0xd40084, 0x11810d, 0xb00022, 0x118209,
+0x1477fff, 0x1c22682, 0x110306, 0x1377fff,
+0x1c80010, 0xc80020, 0x370220, 0x100f04,
+0xc80022, 0x100f02, 0xc80021, 0x0,
+0x70000, 0x1580001, 0x58bb17, 0x0,
+0x37fa17, 0x37f09f, 0x37fc37, 0x37f2bf,
+0x37fe77, 0x37f51f, 0x37f73f, 0x37f95f,
+0xc82212, 0x37ef0f, 0x361320, 0x360630,
+0x360a02, 0x360410, 0xd40504, 0x1010010,
+0x401bd0, 0x1581fff, 0x58bb10, 0xc80422,
+0xc80020, 0x1020001, 0x1c0108a, 0x36ef2f,
+0x1581fff, 0x58bb10, 0xc80422, 0xc80021,
+0x1377fff, 0x1c82110, 0x361322, 0x1020001,
+0x1c0108a, 0x36ef0f, 0x1581fff, 0x18bb12,
+0xc8103e, 0x361340, 0x360a20, 0x1581ffe,
+0x1d8bb10, 0x360004, 0x7d4822, 0xe8100a,
+0xe91000, 0xce0200, 0xed10a2, 0x1020001,
+0x1c00a31, 0x36ef0f, 0x36ee07, 0x760000,
+0x361300, 0x0, 0x360c20, 0xd32040,
+0x118203, 0xc80e20, 0x100f03, 0x36ee07,
+0x760e00, 0x1581fff, 0x58bb12, 0x36ef0f,
+0xc80022, 0x1377fff, 0x1c80490, 0x7a0007,
+0x36f027, 0x1377fff, 0x1c90012, 0x1580041,
+0x988310, 0x36f007, 0x705801, 0x360122,
+0x13761b0, 0x90112, 0x1020001, 0x1c03c84,
+0x1581fff, 0x58bb12, 0x36ef0f, 0xc80022,
+0x1377fff, 0x1c80490, 0x7a0007, 0x36f027,
+0x13761b0, 0x90012, 0x1580069, 0x988310,
+0x360322, 0x1377fff, 0x1c90112, 0x1020001,
+0x1c03c84, 0x1581fff, 0x58bb10, 0x36ee07,
+0xc80422, 0x7a1040, 0x36ef2f, 0x36f007,
+0x1377fff, 0x1ca0110, 0x1377fff, 0x1c90492,
+0x1377fff, 0x1c90592, 0x1580041, 0x989310,
+0x360124, 0x1020001, 0x1c03c84, 0x1581fff,
+0x58bb10, 0x36ee07, 0xc80422, 0x7a1040,
+0x36ef2f, 0x36f007, 0x1377fff, 0x1ca0110,
+0x1377fff, 0x1c90492, 0x1377fff, 0x1c90592,
+0x1580069, 0x989310, 0x360324, 0x1020001,
+0x1c03c84, 0x36ef0f, 0x0, 0x360a00,
+0xd40104, 0x118111, 0x36ef0f, 0xc80001,
+0x1580041, 0x988310, 0x1377fff, 0x1c92410,
+0x1020001, 0x1c03c84, 0x36ef0f, 0xc80001,
+0x1580069, 0x988310, 0x1377fff, 0x1c92410,
+0x1020001, 0x1c03c84, 0xc82a11, 0x36ef0f,
+0x1377fff, 0x1c8c011, 0xc81622, 0x1377fff,
+0x1c9c010, 0x360800, 0x7d4820, 0x360103,
+0xc80001, 0x360125, 0x1377fff, 0x1ca0490,
+0x360101, 0x1020001, 0x1c08dd5, 0x762211,
+0x762a15, 0x762613, 0x77160b, 0xd400b4,
+0x1004f3, 0x36ef0f, 0xc80422, 0x7d1043,
+0x360800, 0x760000, 0x370800, 0xd32040,
+0x118104, 0x36ef0f, 0xc80020, 0x370800,
+0x36ef0f, 0x760403, 0x360a00, 0x760000,
+0x370a00, 0xd32040, 0x110504, 0x36ef0f,
+0xc80021, 0x370a00, 0x36ef0f, 0xc80403,
+0x360800, 0x1020001, 0x1c08dfd, 0xd40004,
+0x118105, 0xc80423, 0xc80020, 0x1020001,
+0x1c0042b, 0x36f95f, 0x36f73f, 0x36f51f,
+0x36fe77, 0x36fc37, 0x36fa17, 0x36f2bf,
+0x36f09f, 0x1581ffe, 0x1d8bb17, 0x70000,
+0x1580000, 0x98bb17, 0x0, 0x37fd1f,
+0x37ff3f, 0xc82210, 0xc82612, 0xc82011,
+0x1020001, 0x1c01cc6, 0x1621c07, 0x1988310,
+0x0, 0x360000, 0x1477fff, 0x1c24400,
+0x118106, 0x360401, 0x360123, 0x360f03,
+0x1020001, 0x1c03c84, 0x360001, 0x1477fff,
+0x1c24400, 0x118105, 0xc82413, 0xc82011,
+0x1020001, 0x1c01b33, 0x36ff3f, 0x36fd1f,
+0x1581fff, 0x198bb17, 0x70000, 0x1580000,
+0x98bb17, 0x0, 0x37fd1f, 0x37ff3f,
+0xc82210, 0xc82612, 0xc82011, 0x1020001,
+0x1c01cc6, 0x1621c07, 0x1988310, 0x0,
+0x360200, 0x1477fff, 0x1c24400, 0x118106,
+0x360401, 0x360123, 0x360f03, 0x1020001,
+0x1c03c84, 0x360001, 0x1477fff, 0x1c22680,
+0x118105, 0xc82413, 0xc82011, 0x1020001,
+0x1c01b33, 0x36ff3f, 0x36fd1f, 0x1581fff,
+0x198bb17, 0x70000, 0x1580004, 0x198bb17,
+0x0, 0x37b71f, 0x37b93f, 0x37bb5f,
+0x1581ffb, 0x98bb10, 0xc80020, 0x1620004,
+0x1981302, 0x1020001, 0x1c03c73, 0x1621bfb,
+0x188310, 0x0, 0x360140, 0x0,
+0x360804, 0xd40004, 0x118104, 0xc80028,
+0xc80420, 0x100f03, 0xc80020, 0xc80428,
+0x1581ffb, 0x98bb10, 0x1377fff, 0x1cb4014,
+0x1581ffb, 0x98bb11, 0x1580041, 0x98a313,
+0x1377fff, 0x1c94010, 0x10c8000, 0x801c8c,
+0x360156, 0x1377fff, 0x1c82112, 0x762c16,
+0x1377fff, 0x1ca8015, 0x370152, 0x762412,
+0x370151, 0x370130, 0x1580028, 0x189b13,
+0x360100, 0x370501, 0x762211, 0x1581ffb,
+0x98bb15, 0x1581ffb, 0x98bb10, 0x361124,
+0x1581ffb, 0x98bb13, 0x1377fff, 0x1c90012,
+0x1581ffb, 0x98bb16, 0x37b55f, 0x1581ffb,
+0x98bb11, 0x1581ffb, 0x98bb15, 0x372520,
+0x362533, 0x1621c0c, 0xd89312, 0x1581ffb,
+0x98bb10, 0x371936, 0x361144, 0x1377fff,
+0x1ca0114, 0x372741, 0x36b54f, 0x0,
+0x362744, 0x371b45, 0x1020001, 0x1c02469,
+0x1581ffb, 0x98bb10, 0x1581ffb, 0x98bb14,
+0xc80028, 0x360d20, 0x360f04, 0x1020001,
+0x1c03c84, 0x36bb5f, 0x36b93f, 0x36b71f,
+0x1581ffb, 0x98bb17, 0x70000, 0x1621bfb,
+0x188310, 0xc80020, 0xc80420, 0x360100,
+0x0, 0x370800, 0x370a20, 0x70000,
+0xc82410, 0x762010, 0xc80421, 0x360000,
+0x360082, 0x8e2008, 0x110102, 0x370002,
+0x762010, 0x762412, 0x770402, 0xd40024,
+0x1004f7, 0x0, 0x70000, 0x100751f,
+0x1800000, 0x37ff1f, 0xc80200, 0x1621c0a,
+0x1988310, 0x1621bfb, 0x588b11, 0xc80040,
+0x7a0001, 0x1377fff, 0x1c90011, 0x360600,
+0x1377fff, 0x1c82192, 0x1020001, 0x1c0d636,
+0x1621bfe, 0x988310, 0xc80440, 0x1377fff,
+0x1c90090, 0x7a1041, 0x1377fff, 0x1c80111,
+0x1377fff, 0x1ca4090, 0x1377fff, 0x1cb2210,
+0x360022, 0x1377fff, 0x1c00068, 0x370004,
+0x360006, 0x760000, 0x370006, 0xd32040,
+0x110521, 0xc82410, 0x360004, 0x762412,
+0x370000, 0x360004, 0x360022, 0xd32040,
+0x118502, 0x370002, 0x1621bfb, 0x588310,
+0xc80040, 0x7a0001, 0x1377fff, 0x1c90010,
+0x1377fff, 0x1c82112, 0x360a02, 0x360020,
+0xd32040, 0x118402, 0x370000, 0x1621bfb,
+0x588310, 0xc80440, 0xc80020, 0x7a1041,
+0x1377fff, 0x1c80110, 0x0, 0x370800,
+0x370a00, 0x36ff1f, 0x36fe17, 0x772e17,
+0x70000, 0x1621bfb, 0x588310, 0xc81440,
+0xc81020, 0x7d0240, 0x1377fff, 0x1c80010,
+0x0, 0x370020, 0x370220, 0x370480,
+0x370680, 0x370a80, 0x370880, 0x70000,
+0x1580000, 0x98bb17, 0x0, 0x37fc17,
+0x37fe37, 0xc80200, 0xc80620, 0x10c8000,
+0x1001d3a, 0x1646110, 0x1300607, 0x130fe6,
+0x760603, 0x0, 0x36fe37, 0x36fc17,
+0x1581fff, 0x198bb17, 0x70000, 0x1580000,
+0x98bb17, 0x0, 0x37fc17, 0x37fe37,
+0xc80200, 0xc80401, 0x1638177, 0x180300,
+0x1020001, 0x1c08de0, 0xc80600, 0x1020001,
+0x1c0d62d, 0x1621c0a, 0x1988310, 0x1621bfe,
+0x1989312, 0x360600, 0xe90200, 0x7d0060,
+0x370002, 0x1ea0000, 0x0, 0x2ee00,
+0x582301, 0x118107, 0x1621bfe, 0x988310,
+0xc80040, 0xc80425, 0x370000, 0x370420,
+0x1621bfe, 0x1988310, 0x0, 0x360000,
+0x130fc8, 0x36fe37, 0x36fc17, 0x1581fff,
+0x198bb17, 0x70000, 0x1621c07, 0x198a314,
+0x0, 0x360c04, 0x1477fff, 0x1c24400,
+0x118103, 0x1020001, 0x1c03da6, 0x0,
+0x70000, 0x1621c07, 0x198a314, 0x0,
+0x360c04, 0x1477fff, 0x1c22680, 0x118103,
+0x1020001, 0x1c03da6, 0x0, 0x70000,
+0xc82810, 0xc82416, 0x1c0103, 0x1006505,
+0x1800000, 0x1007509, 0x1800000, 0x70000,
+0x1580000, 0x158bb17, 0x0, 0x37fc17,
+0x37f69f, 0x37fe37, 0x37f91f, 0x37fb3f,
+0x37fd5f, 0xc82a10, 0x360110, 0xc82011,
+0x1020001, 0x1c00eea, 0x1621c0b, 0x1188310,
+0xc80400, 0xc81023, 0x1e08000, 0x0,
+0x75300, 0x190300, 0x13d7fff, 0x1c00060,
+0x7a0200, 0x1020001, 0x1c08de0, 0xc80200,
+0x360001, 0xc8103e, 0xe81002, 0xe91000,
+0x1581fff, 0x158bb12, 0x1581fff, 0xd8bb10,
+0xce0200, 0xed1022, 0x1020001, 0x1c00a31,
+0x1621bfe, 0x589b13, 0xc8103e, 0x360001,
+0xc81221, 0xe81002, 0xe91000, 0x1581fff,
+0x158bb12, 0x1581fff, 0x118bb10, 0xce0200,
+0xed1022, 0x360033, 0x1020001, 0x1c00a31,
+0x360003, 0x700060, 0xd32020, 0x110503,
+0xc80021, 0x100f02, 0xc80020, 0x36f827,
+0x36f687, 0xd32202, 0x118124, 0x36fa27,
+0xd40424, 0x110221, 0x360a21, 0xd40524,
+0x11821e, 0xd40004, 0x118120, 0x1581fff,
+0x118bb10, 0x360001, 0xc8103e, 0x761209,
+0xe81002, 0xe91000, 0x1581fff, 0x158bb12,
+0xce0200, 0xed1022, 0x1020001, 0x1c00a31,
+0x1621bfe, 0x588310, 0x0, 0x360000,
+0x700060, 0xd32020, 0x110503, 0xc80021,
+0x100f02, 0xc80020, 0x36f827, 0x36f687,
+0xd32202, 0x1001de, 0xd40004, 0x118103,
+0x370295, 0x100f03, 0xc80030, 0x370205,
+0x36fd5f, 0x36fb3f, 0x36f91f, 0x36fe37,
+0x36fc17, 0x36f69f, 0x1581fff, 0xd8bb17,
+0x70000, 0x1580001, 0x18bb17, 0x0,
+0x37f017, 0x37f49f, 0x37f237, 0x37f6bf,
+0x37f477, 0x37f8ff, 0x37f657, 0x37fb1f,
+0x37fd3f, 0x37ff5f, 0x37f10f, 0xc81600,
+0x360000, 0x14b7fff, 0x1c02000, 0x1020001,
+0x1c03e42, 0xc80220, 0x37f30f, 0xc80a24,
+0x36f10f, 0xc80025, 0xc80620, 0xc81240,
+0x1580009, 0x988313, 0x158000c, 0x988315,
+0x7d0001, 0x1377fff, 0x1c88010, 0x762211,
+0x1377fff, 0x1c83791, 0x762211, 0x144ffff,
+0x1c3e048, 0x36f30f, 0x162003f, 0x1d84308,
+0xc80421, 0x360000, 0xe90e0a, 0x360001,
+0xce420a, 0xeb4068, 0xce1048, 0x14bffff,
+0x1c7a002, 0x1020001, 0x1c0877e, 0x8c12e7,
+0x8c0040, 0xd400b4, 0x110409, 0x1377fff,
+0x1c80093, 0x1377fff, 0x1c90095, 0xc80420,
+0x370000, 0x370022, 0x100f11, 0x1377fff,
+0x1c80093, 0x14bffff, 0x1c1200b, 0x1c47f00,
+0x208000, 0x60, 0xa05302, 0x1377fff,
+0x1c90095, 0xc91802, 0x144ffff, 0x1c06000,
+0x1020001, 0x1c08e17, 0x370002, 0x762211,
+0x1377fff, 0x1c9a213, 0x1377fff, 0x1caa215,
+0x771209, 0x760603, 0xd40094, 0x1004ce,
+0x770a05, 0x760201, 0xc80005, 0xd40004,
+0x1004b8, 0x36f10f, 0x0, 0x11b8000,
+0x92b8, 0x36f677, 0xc80a07, 0x36ff5f,
+0x36fd3f, 0x36fb1f, 0x36f477, 0x36f237,
+0x36f017, 0x36f8ff, 0x36f6bf, 0x36f49f,
+0x1581fff, 0x18bb17, 0x70000, 0xc82410,
+0x364220, 0xc80020, 0x360082, 0x8e2048,
+0x110103, 0x370022, 0xc80021, 0xc80420,
+0x10c8000, 0x1001ea2, 0xc81025, 0x7d4202,
+0x1377fff, 0x1ca0410, 0x1377fff, 0x1c92294,
+0x365284, 0x3600a2, 0x8e220a, 0x110103,
+0x370082, 0xc80021, 0xc81025, 0x7d4202,
+0x1377fff, 0x1ca0410, 0x1580004, 0xd8a312,
+0x1377fff, 0x1ca2114, 0x10c8000, 0x1801e9a,
+0x3600a4, 0x360082, 0x8e220a, 0x110103,
+0x370084, 0xc80021, 0x762412, 0x762814,
+0x0, 0xc81025, 0x7d4202, 0x760402,
+0x1377fff, 0x1c90410, 0x0, 0x364482,
+0x370282, 0xd40004, 0x110108, 0x11b0000,
+0x9008, 0x1620008, 0x181302, 0x7d0040,
+0x1020001, 0x1c01dff, 0x0, 0x70000,
+0x1580000, 0x118bb17, 0x0, 0x37f817,
+0x37fb1f, 0x37fa37, 0x37fd3f, 0x37ff5f,
+0x1646100, 0x1b13621, 0xc82a12, 0x37f94f,
+0xc82013, 0xc80020, 0x1620003, 0x181302,
+0x1020001, 0x1c03c73, 0x11b0000, 0x8c0d,
+0xc80220, 0xd40004, 0x110415, 0x100f48,
+0xc82011, 0xe81820, 0xed1800, 0x1020001,
+0x1c010e4, 0xc82411, 0xc81040, 0x6e0060,
+0xc80420, 0x7d4201, 0x1377fff, 0x1c80413,
+0x1020001, 0x1c0108a, 0x11b0000, 0x8c0d,
+0x760201, 0xd32001, 0x118535, 0x1377fff,
+0x1c80095, 0x1621bd6, 0x989312, 0xc80425,
+0x11b0000, 0x8408, 0xed1808, 0xe80800,
+0x7a1048, 0xed1800, 0x1377fff, 0x1c88112,
+0xd40104, 0x118104, 0x360a21, 0xd40524,
+0x1082ea, 0x1377fff, 0x1c80095, 0x0,
+0x11b0000, 0x8428, 0xe81028, 0xed1c88,
+0x11010f, 0x36f90f, 0xc80440, 0x360001,
+0xc8103e, 0xe91c00, 0x1377fff, 0x1c94010,
+0x7d1041, 0x1377fff, 0x1c80113, 0xce0200,
+0x1020001, 0x1c03c84, 0x100fd4, 0xd40204,
+0x1081c4, 0xc82411, 0xc81040, 0xc80420,
+0xc80020, 0x7d4201, 0x1377fff, 0x1c80413,
+0x1020001, 0x1c0108a, 0x100fc8, 0x36ff5f,
+0x36fd3f, 0x36fb1f, 0x36fa37, 0x36f817,
+0x1581fff, 0x118bb17, 0x70000, 0x11b0000,
+0x9228, 0xd40024, 0x11010a, 0xd32002,
+0x118405, 0x700002, 0x11b8000, 0x9208,
+0x100f04, 0xc80020, 0x1020001, 0x1c01dff,
+0x0, 0x70000, 0x1580000, 0xd8bb17,
+0x0, 0x37fd1f, 0x37ff3f, 0xc82210,
+0x1580008, 0x988b10, 0x1e09e40, 0x3c,
+0x47ae14, 0x181300, 0xc82610, 0xc82816,
+0x1c0503, 0x1006589, 0x1800000, 0x1007587,
+0x1800000, 0x360682, 0x11b8000, 0x8e89,
+0x360482, 0x14bffff, 0x1c42008, 0x1c47f00,
+0x208000, 0x61, 0x205308, 0x8c0008,
+0x8c0040, 0x1020001, 0x1c02c39, 0x14b7fff,
+0x1c02000, 0x11b8000, 0x9009, 0xd40004,
+0x110404, 0xc80021, 0x11b8000, 0x9009,
+0x1cb8000, 0x600c, 0x1032060, 0x991b21,
+0x374221, 0x10c8000, 0x1001f6d, 0x1377fff,
+0x1c80011, 0xc81425, 0xc81020, 0x13ee180,
+0x1050500, 0x11b0000, 0x8468, 0x1377fff,
+0x1c80511, 0x1580004, 0x988312, 0xe8146a,
+0xed1caa, 0xc82012, 0x762010, 0x14bffff,
+0x1c5200a, 0x370ea2, 0x370082, 0x10c8000,
+0x1801f6b, 0x1007521, 0x1800000, 0x760000,
+0x1580004, 0x588b10, 0xc80020, 0xc82811,
+0xc82410, 0x1c2103, 0x1006525, 0x1800000,
+0x1007529, 0x1800000, 0xc82011, 0x1020001,
+0x1c01dff, 0x36ff3f, 0x36fd1f, 0x1581fff,
+0x158bb17, 0x70000, 0xd42104, 0x110503,
+0xc80021, 0x100f42, 0xc81000, 0xd41084,
+0x118526, 0xd40084, 0x11011c, 0xd40184,
+0x110105, 0xd40884, 0x11012a, 0xd40984,
+0x11812e, 0x1639869, 0x184308, 0x8e2202,
+0x118218, 0x1638822, 0x184308, 0x8e2202,
+0x110314, 0x1377fff, 0x1c90010, 0x1580004,
+0x989312, 0x10c8000, 0x1801f9d, 0x1007525,
+0x1800000, 0x1377fff, 0x1c80010, 0xc80020,
+0x374220, 0x100f22, 0xb00022, 0x118205,
+0x14bffff, 0x1c421a1, 0x8e2202, 0x1083f6,
+0xc80022, 0x100f1a, 0xd41084, 0x110109,
+0xd41184, 0x1001e0, 0xd41884, 0x110105,
+0xd41984, 0x1001dc, 0xd42084, 0x118107,
+0xb00022, 0x1082f3, 0x1477fff, 0x1c24402,
+0x1003f0, 0x100fe4, 0x1639869, 0x184308,
+0x8e2202, 0x1082eb, 0x1638822, 0x184308,
+0x8e2202, 0x1003e7, 0x100fdb, 0x0,
+0x70000, 0x1580003, 0x198bb17, 0x0,
+0x37fc17, 0x37c49f, 0x37fe37, 0x37c6bf,
+0x37c91f, 0x37cb3f, 0xc82210, 0xc82612,
+0xc82011, 0x1020001, 0x1c01e71, 0x1581ffc,
+0x98bb10, 0xc82813, 0xc82411, 0xc80020,
+0x1020001, 0x1c01eae, 0x11b0000, 0x8eb9,
+0xd440b4, 0x118404, 0x1620008, 0x185b0b,
+0x100f01, 0x11b0000, 0x8e09, 0xc80220,
+0xd40004, 0x11041e, 0x100f6f, 0x1377fff,
+0x1c80193, 0x1581fff, 0x98bb12, 0xc80424,
+0x7d1043, 0x13761b0, 0x10a0111, 0x360d00,
+0x1580009, 0x98a314, 0x1377fff, 0x1c80090,
+0x1020001, 0x1c08cce, 0x771209, 0x760603,
+0xd40094, 0x11040c, 0x16461b0, 0x310623,
+0x1020001, 0x1c01f15, 0x11b0000, 0x8e09,
+0x6e0a61, 0xd32001, 0x118553, 0xc80620,
+0xc81240, 0x1377fff, 0x1c80193, 0x0,
+0x360d00, 0x16a0000, 0x188304, 0x1001eb,
+0x11b0000, 0x8c09, 0xc80420, 0xd40004,
+0x11042f, 0x11b0000, 0x9229, 0xd40024,
+0x1001d3, 0x1377fff, 0x1c80193, 0x1581fff,
+0x98bb12, 0xc80424, 0x7d1043, 0x13761b0,
+0x10a0111, 0x360d00, 0x158000c, 0x98a316,
+0x1377fff, 0x1c80090, 0x1580009, 0x98a314,
+0x1020001, 0x1c0872b, 0xc80424, 0x11b0000,
+0x8c09, 0x7d1043, 0x13761b0, 0x1080111,
+0x158000c, 0x988312, 0x1580009, 0x988310,
+0x1020001, 0x1c08cba, 0x100fc4, 0x1581fff,
+0x98bb10, 0xc82420, 0x1377fff, 0x1c80110,
+0x0, 0x370120, 0x760402, 0x11b0000,
+0x8c09, 0xd32002, 0x1085d3, 0x1581ffc,
+0x98bb10, 0xc80040, 0x7d0002, 0x1377fff,
+0x1c80010, 0x1377fff, 0x1c80190, 0x0,
+0x360100, 0x16a0000, 0x188304, 0x1001e8,
+0x1581fff, 0x98bb12, 0x1377fff, 0x1c80090,
+0x1377fff, 0x1c90112, 0x0, 0x370102,
+0x100fe6, 0x36cb3f, 0x36c91f, 0x36fe37,
+0x36fc17, 0x36c6bf, 0x36c49f, 0x1581ffc,
+0x98bb17, 0x70000, 0x1580000, 0xd8bb17,
+0x0, 0x37fb1f, 0x37fd3f, 0x37ff5f,
+0x1377fff, 0x1ca2110, 0xc82210, 0xc80020,
+0xc82a14, 0xc82616, 0x1c0203, 0x1006527,
+0x1800000, 0x100752b, 0x1800000, 0x762211,
+0x360622, 0x370820, 0x370000, 0xc82811,
+0xc82410, 0x1c0103, 0x1006505, 0x1800000,
+0x1007509, 0x1800000, 0x36ff5f, 0x36fd3f,
+0x36fb1f, 0x1581fff, 0x158bb17, 0x70000,
+0xc81000, 0xd40084, 0x11810d, 0xb00022,
+0x118209, 0x1477fff, 0x1c22682, 0x110306,
+0x1377fff, 0x1c80010, 0xc80020, 0x370220,
+0x100f04, 0xc80022, 0x100f02, 0xc80021,
+0x0, 0x70000, 0x1580000, 0x1d8bb17,
+0x0, 0x37fe17, 0x37f31f, 0x37f53f,
+0x37f75f, 0xc82a10, 0xc82612, 0x360515,
+0x1020001, 0x1c0002a, 0xc82011, 0x1020001,
+0x1c010e4, 0x1581fff, 0x58bb10, 0xc82411,
+0xc80440, 0x1020001, 0x1c0108a, 0x1581fff,
+0x58bb11, 0xc80240, 0x360101, 0x16a0000,
+0x188304, 0x110105, 0x360123, 0x360805,
+0x1020001, 0x1c03c84, 0x762211, 0x762613,
+0x770201, 0xd40014, 0x1004f4, 0x36f75f,
+0x36f53f, 0x36f31f, 0x36fe17, 0x1581fff,
+0x58bb17, 0x70000, 0x1580000, 0x98bb17,
+0x0, 0x37fd1f, 0x37ff3f, 0xc82610,
+0xc82212, 0xc82013, 0x130f22, 0x360003,
+0x1477fff, 0x1c24400, 0x118104, 0xc82411,
+0xc82013, 0x130fc5, 0x36ff3f, 0x36fd1f,
+0x1581fff, 0x198bb17, 0x70000, 0x1580000,
+0x98bb17, 0x0, 0x37fd1f, 0x37ff3f,
+0xc82610, 0xc82212, 0xc82013, 0x130f0d,
+0x360003, 0x1477fff, 0x1c22680, 0x118104,
+0xc82411, 0xc82013, 0x130fb0, 0x36ff3f,
+0x36fd1f, 0x1581fff, 0x198bb17, 0x70000,
+0xc82410, 0x360200, 0x360022, 0x8e2002,
+0x110102, 0x370002, 0x0, 0x70000,
+0x1580004, 0x98bb17, 0x0, 0x37bf1f,
+0x37c13f, 0x37c35f, 0xc82210, 0xc82612,
+0x37bd4f, 0x1581ffe, 0x98bb10, 0x1621bd6,
+0x989312, 0xc81040, 0xc80020, 0xc80420,
+0x37bc87, 0x1377fff, 0x1c92312, 0x77102b,
+0x360146, 0xc82a10, 0xc82c12, 0x1c0803,
+0x10065ad, 0x1800000, 0x10075ab, 0x1800000,
+0x1581ffb, 0x198bb16, 0x1638c00, 0x183306,
+0x1581ffe, 0x98bb12, 0x36e4a7, 0x1581fff,
+0x98bb10, 0xce420a, 0x370346, 0xcd40c8,
+0x37e487, 0x1020001, 0x1c0108a, 0x1621be6,
+0x989312, 0x1581fff, 0x98bb10, 0xc8043e,
+0x1581ffb, 0x198bb14, 0x16207ff, 0x1d84308,
+0x1377fff, 0x1ca2114, 0x360402, 0xe9100a,
+0x360120, 0xce0200, 0xce104a, 0x7a0002,
+0x10c8000, 0x1402137, 0x370124, 0x762010,
+0x370324, 0x370404, 0x360120, 0x1377fff,
+0x1ca2194, 0x0, 0x762010, 0x1581ffb,
+0x198bb16, 0x370124, 0x370324, 0xc82011,
+0xc82413, 0x370404, 0x1377fff, 0x1ca2194,
+0x0, 0x36bd4f, 0x1020001, 0x1c07be3,
+0x36c35f, 0x36c13f, 0x36bf1f, 0x1581ffb,
+0x198bb17, 0x70000, 0x1580000, 0xd8bb17,
+0x0, 0x37fc17, 0x37fc9f, 0x37fe37,
+0x37ff1f, 0x1646102, 0xb11621, 0xc80202,
+0x1646190, 0x310623, 0x1020001, 0x1c07c54,
+0xc80600, 0xd40034, 0x118108, 0xd40094,
+0x118106, 0xc82011, 0x14b7fff, 0x1c02001,
+0x1020001, 0x1c021fb, 0xc80003, 0x36ff1f,
+0x36fe37, 0x36fc17, 0x36fc9f, 0x1581fff,
+0x158bb17, 0x70000, 0x1580005, 0x18bb17,
+0x0, 0x37fe17, 0x37b91f, 0x37bb3f,
+0x37bd5f, 0xc82210, 0xc82a12, 0xc82011,
+0x1020001, 0x1c07c7c, 0x360001, 0xc80220,
+0x8e2020, 0x118379, 0x1621bd6, 0x989b13,
+0x0, 0x362a03, 0xd40504, 0x118273,
+0x1621bff, 0x188310, 0x362003, 0xc8043e,
+0xe91000, 0xce0040, 0x370000, 0xc82011,
+0x1020001, 0x1c02255, 0xc82011, 0x1020001,
+0x1c07ca2, 0x1581ffb, 0x58bb10, 0x1377fff,
+0x1c92293, 0x1bbffff, 0x1ffe000, 0x184195,
+0x1302326, 0xc80020, 0x37b10f, 0x762011,
+0x37b30f, 0x1377fff, 0x1c82293, 0x37b50f,
+0x1581ffb, 0x58bb10, 0x1677fff, 0x1c40464,
+0x37b70f, 0x36b10f, 0xc82c10, 0xc82815,
+0x1c2603, 0x10065a9, 0x1800000, 0x10075ad,
+0x1800000, 0x36b34f, 0x36b70f, 0x1377fff,
+0x1c84010, 0x3600a4, 0x14b7fff, 0x1c5200a,
+0xce104a, 0xe81c22, 0xcd1048, 0x370022,
+0xc82414, 0x360024, 0x36b52f, 0x14b7fff,
+0x1c12002, 0x1020001, 0x1c0108a, 0x1581ffb,
+0x58bb12, 0xc82011, 0x1020001, 0x1c07c2e,
+0x360001, 0x8e2020, 0x110130, 0x362001,
+0xd40104, 0x118107, 0x1620240, 0x181302,
+0xc80020, 0x362703, 0x1020001, 0x1c03c73,
+0x1581ffb, 0x18bb10, 0x1620001, 0x984308,
+0xc80421, 0x1620012, 0x1d80300, 0x1020001,
+0x1c024bb, 0xd40004, 0x11810b, 0x36b007,
+0xb00000, 0x110103, 0xc80026, 0x100f02,
+0xc80020, 0x1620002, 0x1d88310, 0x0,
+0x370008, 0x362001, 0xd40004, 0x118103,
+0xc80021, 0x100f02, 0xc80020, 0x14bffff,
+0x1c52000, 0x1581ffb, 0x18bb10, 0xc81027,
+0xc80420, 0x1620006, 0x180300, 0x37b0a7,
+0x1020001, 0x1c024bb, 0x36bd5f, 0x36bb3f,
+0x36b91f, 0x36fe17, 0x1581ffb, 0x18bb17,
+0x70000, 0x1580000, 0x98bb17, 0x0,
+0x37fe17, 0x37fd1f, 0x1646100, 0xb11621,
+0x1620006, 0x180300, 0x1020001, 0x1c0248c,
+0x16a0000, 0x188304, 0x110146, 0x361100,
+0x16a0000, 0x188304, 0x110142, 0xd40014,
+0x11012b, 0xd40014, 0x118340, 0xd40314,
+0x11033e, 0x1581fff, 0x198bb10, 0xc81026,
+0xc80420, 0x1620006, 0x180300, 0xc80248,
+0x37fc17, 0x1020001, 0x1c024bb, 0x1581fff,
+0x198bb10, 0xc81027, 0xc80420, 0x1620006,
+0x180300, 0x37fc17, 0x1020001, 0x1c024bb,
+0x1621bd6, 0x988310, 0x360201, 0xc8043e,
+0x14b6102, 0x3000, 0xe80100, 0x14b7e00,
+0x802008, 0x1377fff, 0x1c82290, 0xce0040,
+0x77102b, 0xe81c00, 0x1677fff, 0x1c10460,
+0xcd0002, 0x370000, 0x100f18, 0x1581fff,
+0x198bb10, 0xc81448, 0xc81027, 0xc80420,
+0x1620006, 0x180300, 0x37fca7, 0x1020001,
+0x1c024bb, 0x1581fff, 0x198bb10, 0xc81420,
+0xc81026, 0xc80420, 0x1620006, 0x180300,
+0x37fca7, 0x1020001, 0x1c024bb, 0x100f03,
+0x1020001, 0x1c0003b, 0x36fd1f, 0x36fe17,
+0x1581fff, 0x198bb17, 0x70000, 0x762e17,
+0x1621bff, 0x588310, 0x77002a, 0x360020,
+0x37fe27, 0xce0002, 0xe90100, 0x772e17,
+0x70000, 0x1580000, 0xd8bb17, 0x0,
+0x37fa17, 0x37fb1f, 0x37fd3f, 0x37ff5f,
+0x1621c07, 0x1988b11, 0x0, 0x361601,
+0x14b7fff, 0x1c02000, 0x11016c, 0xd40104,
+0x110150, 0xd40204, 0x11013a, 0xd40304,
+0x11012c, 0xd40404, 0x110115, 0xd40504,
+0x1010010, 0x402310, 0x362e21, 0xc80020,
+0x8e2002, 0x1010010, 0x402310, 0x361421,
+0x14b7fff, 0x1c12002, 0x110103, 0x1020001,
+0x1c0238c, 0x1621c07, 0x1988310, 0xc80020,
+0x371600, 0x1008001, 0x1c02310, 0x362e01,
+0xb00000, 0x110107, 0x362e01, 0x14bffff,
+0x1c12041, 0x8e2040, 0x1010010, 0x402310,
+0x1621c07, 0x1988b11, 0xc80421, 0x361401,
+0x14b7fff, 0x1c02000, 0x1020001, 0x1c02657,
+0x14bffff, 0x1c02041, 0x371601, 0x100f73,
+0x362e01, 0xd00249, 0x8e2020, 0x11816f,
+0x362c01, 0x371401, 0x14b7fff, 0x1c02000,
+0x1020001, 0x1c024fd, 0x371611, 0x100f67,
+0x1621bff, 0x1588310, 0x1621bff, 0xd89312,
+0x1621bfe, 0x58a314, 0x1621bff, 0x118b316,
+0x360000, 0x1387fff, 0x1c00068, 0x360022,
+0x370006, 0xd32040, 0x110558, 0x1020001,
+0x1c02610, 0xc8004a, 0x371601, 0x100f53,
+0x1621bff, 0x158ab15, 0x1621bff, 0x989312,
+0x1621bfe, 0x589b13, 0x1621bff, 0x1188310,
+0x360005, 0x1387fff, 0x1c00066, 0x360022,
+0x370000, 0xd32040, 0x110544, 0x361401,
+0xc80420, 0x14b7fff, 0x1c02000, 0x1020001,
+0x1c02657, 0x360003, 0xc8042d, 0x370005,
+0x371621, 0x100f39, 0x362e01, 0x1477fff,
+0x1c24500, 0x118135, 0x361401, 0x14b7fff,
+0x1c02000, 0x118109, 0x1621bff, 0x988310,
+0x1621bff, 0xd89312, 0xc80020, 0x370000,
+0x370002, 0x100f1e, 0xc80048, 0x1020001,
+0x1c0238c, 0x1020001, 0x1c00c35, 0xd40004,
+0x110110, 0x1e09e7a, 0x1c28f00, 0x1bff4,
+0x181310, 0x360401, 0x8c0040, 0x14b7fff,
+0x1c02000, 0x370000, 0x130f40, 0x1621bff,
+0xd88310, 0x0, 0x370000, 0x100f08,
+0x1621bff, 0x988310, 0x1621bff, 0xd89312,
+0xc80020, 0x370000, 0x370002, 0x130f51,
+0x1621bfe, 0x588310, 0x1621bff, 0x1589312,
+0xc80048, 0x1621c07, 0x198a314, 0x360020,
+0x371604, 0x370022, 0x36ff5f, 0x36fd3f,
+0x36fb1f, 0x36fa17, 0x1581fff, 0x158bb17,
+0x70000, 0x1621d9d, 0x189312, 0xc80420,
+0xc82012, 0x360082, 0xd40084, 0x118318,
+0x771028, 0x1677fff, 0x1c40460, 0xd32008,
+0x118108, 0x1621d9d, 0x188310, 0xc80041,
+0x7d0002, 0x1377fff, 0x1c80010, 0x100f0d,
+0x1621d9d, 0x188310, 0xc81041, 0x760402,
+0x7d4202, 0x1377fff, 0x1c80410, 0x0,
+0x360080, 0xd40084, 0x1003ea, 0xc82020,
+0x0, 0x70000, 0x1621d9d, 0x189312,
+0xc80020, 0xc80420, 0xc82012, 0x360082,
+0xd40084, 0x110302, 0x100f14, 0x360080,
+0x771429, 0xe91088, 0xce4248, 0xd32008,
+0x118302, 0xc80008, 0x1621d9d, 0x188310,
+0xc81041, 0x760402, 0x7d4202, 0x1377fff,
+0x1c80410, 0x0, 0x360080, 0xd40084,
+0x1083ee, 0x100fee, 0x0, 0x70000,
+0x1580000, 0xd8bb17, 0x0, 0x37fe17,
+0x1e09f95, 0xaaaa00, 0x1d9d0, 0x180312,
+0xc80420, 0xc80220, 0xc82012, 0x37fa27,
+0x360082, 0x37fc07, 0xd40084, 0x118323,
+0x770028, 0x1677fff, 0x1c00060, 0x16a0010,
+0x980304, 0x118111, 0x1581fff, 0x158bb10,
+0xc81020, 0xc80420, 0x1620012, 0x1980300,
+0x1020001, 0x1c024bb, 0x1581fff, 0x198bb10,
+0xc81021, 0xc80420, 0x1620012, 0x1980300,
+0x1020001, 0x1c024bb, 0x1621d9d, 0x188310,
+0xc80041, 0x760201, 0x7d0001, 0x1377fff,
+0x1c80010, 0x0, 0x360000, 0xd40004,
+0x118302, 0x100fdf, 0x36fe17, 0x1581fff,
+0x158bb17, 0x70000, 0x762e17, 0x0,
+0x37fe07, 0x1581fff, 0x1d8bb10, 0x1620007,
+0x984308, 0xc80420, 0x1620012, 0x1980300,
+0x1020001, 0x1c024bb, 0x1581fff, 0x1d8bb10,
+0xc81023, 0xc80420, 0x1620007, 0xd80300,
+0x1020001, 0x1c024bb, 0x1581fff, 0x1d8bb10,
+0xc81023, 0xc80420, 0x1620007, 0x1180300,
+0x1020001, 0x1c024bb, 0x1581fff, 0x1d8bb10,
+0xc81022, 0xc80420, 0x1620006, 0x580300,
+0x1020001, 0x1c024bb, 0x1581fff, 0x1d8bb10,
+0xc81022, 0xc80420, 0x1620006, 0x980300,
+0x1020001, 0x1c024bb, 0x772e17, 0x70000,
+0xc82c20, 0xc82820, 0xc82420, 0x1621c07,
+0x1988310, 0x1020001, 0x1c0174e, 0x1020001,
+0x1c0081b, 0xd40004, 0x1081fd, 0x0,
+0x70000, 0x1580002, 0xd8bb17, 0x0,
+0x37fa17, 0x37da9f, 0x37fc37, 0x37dcbf,
+0x37fe77, 0x37df1f, 0x37e13f, 0xc81220,
+0xc80220, 0xc80609, 0x1621c18, 0xd88310,
+0xc81620, 0x1620001, 0x980300, 0xc80e24,
+0x7a0009, 0x1377fff, 0x1c88010, 0x1377fff,
+0x1c80591, 0x0, 0x360130, 0x16a0000,
+0x189b04, 0x11812f, 0x770e07, 0x76160b,
+0xd40074, 0x1003f6, 0x761209, 0xd40594,
+0x11854b, 0x100fe9, 0xc80420, 0x1e0ffdf,
+0x1ffff00, 0x2, 0x183308, 0x3604a3,
+0xc80021, 0xce1202, 0xce40ca, 0xe81622,
+0xcd1048, 0x370423, 0xe91622, 0xce0002,
+0x110111, 0x360203, 0x770429, 0xce0040,
+0x11010d, 0x6e0801, 0xd41034, 0x118203,
+0x1020001, 0x1c0003b, 0x1646130, 0x312627,
+0x1581ffd, 0x158bb10, 0x1020001, 0x1c02731,
+0x760603, 0x360403, 0xc80421, 0x1580001,
+0x1189b13, 0xe91900, 0xce0040, 0x1081d3,
+0x360403, 0xc80421, 0xe91800, 0xce0040,
+0x11010a, 0x1621c0a, 0x1988310, 0x0,
+0x360400, 0x1ea0000, 0x0, 0x17700,
+0x582300, 0x11010f, 0x360403, 0xc80421,
+0xe91700, 0xce0040, 0x1001c8, 0x1621c0a,
+0x1988310, 0x0, 0x360400, 0x1ea0000,
+0x0, 0x2ee00, 0x582300, 0x1081bf,
+0x360403, 0xc80421, 0xe91b00, 0xce0040,
+0x1001ba, 0xc80421, 0x100fb9, 0xd40014,
+0x110129, 0xc80001, 0x1020001, 0x1c07e67,
+0xc82210, 0x16a0000, 0x188b04, 0x118103,
+0x1020001, 0x1c0003b, 0xc80001, 0x1020001,
+0x1c07d40, 0xc82610, 0x16a0000, 0x189b04,
+0x118103, 0x1020001, 0x1c0003b, 0x1581ffd,
+0x158bb10, 0xc80020, 0xd40034, 0x118312,
+0x360120, 0x762010, 0x770429, 0x760000,
+0x771429, 0x371512, 0x360282, 0x371732,
+0x360262, 0xce1048, 0x1377fff, 0x1c88111,
+0xce4246, 0x1377fff, 0x1c98413, 0xd32060,
+0x1082f0, 0x36e13f, 0x36df1f, 0x36fe77,
+0x36fc37, 0x36fa17, 0x36dcbf, 0x36da9f,
+0x1581ffd, 0x158bb17, 0x70000, 0x1580000,
+0x98bb17, 0x0, 0x37fd1f, 0x37ff3f,
+0xc82610, 0xc82212, 0x0, 0x360401,
+0xc80421, 0xe91608, 0xce1048, 0x11010a,
+0xe91a00, 0xc80421, 0xce0040, 0x110106,
+0x360b41, 0xc82413, 0x361101, 0xf0f04,
+0x0, 0x360401, 0xc80421, 0x1580001,
+0x1188b11, 0xe91900, 0xce0040, 0x118102,
+0x100fea, 0x36ff3f, 0x36fd1f, 0x1581fff,
+0x198bb17, 0x70000, 0xc80420, 0x100f07,
+0x761008, 0xd40484, 0x11820c, 0x760402,
+0xd40524, 0x118525, 0x1621c18, 0xd88310,
+0x1620001, 0x98530a, 0xc81020, 0x7a5242,
+0x1377fff, 0x1c90510, 0x1377fff, 0x1c80412,
+0x0, 0x360100, 0x16a0000, 0x188304,
+0x1001ec, 0x3604a0, 0x16207ff, 0x1d83306,
+0xe908ae, 0xce30ce, 0xd32006, 0x11010e,
+0xe919aa, 0xc80c21, 0x1580001, 0x1188310,
+0xce50ca, 0x1081df, 0x3604a0, 0x16207ff,
+0x1d83306, 0xe908ae, 0xce30ce, 0xd32006,
+0x1081f4, 0x100f02, 0xc82020, 0x0,
+0x70000, 0x1580000, 0x98bb17, 0x0,
+0x37fc17, 0x37fc9f, 0x37fe37, 0x37ff1f,
+0x1646120, 0xb11621, 0xc80608, 0xc81223,
+0x130fc6, 0x16a0000, 0x188304, 0x11011d,
+0x360400, 0xc80421, 0xe91600, 0xce0040,
+0x110118, 0xd40014, 0x11010c, 0x360f40,
+0x16a0000, 0x18a304, 0x110112, 0x361120,
+0x1646130, 0x310623, 0xf0f04, 0x0,
+0xc81200, 0x100f0b, 0x360d20, 0x16a0000,
+0x189304, 0x110107, 0x361100, 0xc80003,
+0x360021, 0xf0f02, 0x0, 0xc81200,
+0xc80009, 0x36ff1f, 0x36fe37, 0x36fc17,
+0x36fc9f, 0x1581fff, 0x198bb17, 0x70000,
+0xc82410, 0x360000, 0x162000f, 0x1d84308,
+0xc81421, 0x762010, 0xe91106, 0xe9100e,
+0x770428, 0xce0040, 0xce124e, 0xce4206,
+0x130fc1, 0x0, 0x70000, 0x1580000,
+0x118bb17, 0x0, 0x37f817, 0x37f89f,
+0x37fa37, 0x37fabf, 0x37fc77, 0x37fd1f,
+0x37ff3f, 0xc80200, 0xc80021, 0xc80620,
+0xe65820, 0x1621c18, 0xd88310, 0xc80425,
+0xc81220, 0x1620001, 0x980300, 0xc80e24,
+0x1621c20, 0x1d89312, 0x1621bd6, 0x98a314,
+0x7a0003, 0x1377fff, 0x1c80010, 0xc82610,
+0x360a00, 0x7a0040, 0x1377fff, 0x1c80014,
+0x370102, 0x1377fff, 0x1c80493, 0x0,
+0x360110, 0x16a0000, 0x188b04, 0x118131,
+0x770e07, 0x761209, 0xd40074, 0x1003f6,
+0x760603, 0xd40534, 0x1010010, 0x14025ca,
+0x100fdd, 0x770428, 0xc81021, 0x360401,
+0xce1040, 0xce1202, 0x118107, 0x1e08000,
+0xff, 0x17ffffe, 0x190302, 0xce0040,
+0x370401, 0x360401, 0x16207ff, 0x1d81302,
+0xe90800, 0xce0040, 0x16a0013, 0x980304,
+0x11810d, 0x1621c0a, 0x1988310, 0x0,
+0x360a00, 0xd40104, 0x118107, 0x1621770,
+0x180300, 0x1620008, 0x181302, 0x370400,
+0x370620, 0x360401, 0xc80421, 0x1580001,
+0x1188b11, 0xe91900, 0xce0040, 0x1081d1,
+0x360401, 0x16207ff, 0x1d81302, 0xe90800,
+0xce0040, 0x16a0013, 0xd80304, 0x11810d,
+0x1621c0a, 0x1988310, 0x0, 0x360a00,
+0xd40104, 0x118107, 0x1e08000, 0x8000,
+0x2ee00, 0x181300, 0x370400, 0x370620,
+0x360401, 0xc80421, 0xe91b08, 0xce1048,
+0x1001c1, 0x770428, 0xce1040, 0xce1262,
+0x1001bd, 0xe91800, 0xc80421, 0xce0040,
+0x11810a, 0x1621c0a, 0x1988310, 0x0,
+0x360400, 0x1ea0000, 0x0, 0x17700,
+0x582300, 0x1001b0, 0x360401, 0xc80421,
+0xe91700, 0xce0040, 0x11810a, 0x1621c0a,
+0x1988310, 0x0, 0x360400, 0x1ea0000,
+0x0, 0x2ee00, 0x582300, 0x1001a2,
+0xd40014, 0x110107, 0x360401, 0x770428,
+0xc81021, 0xce0040, 0xce0200, 0x118104,
+0xc82011, 0x1020001, 0x1c02a96, 0x770028,
+0xc81021, 0x360421, 0xce0002, 0xce4200,
+0xd32008, 0x110107, 0x1e08000, 0xfb,
+0x1fffffe, 0x190300, 0xce0002, 0x370401,
+0xd40014, 0x118103, 0xc80020, 0x100f05,
+0xc80421, 0x360401, 0xe91600, 0xce0040,
+0x360421, 0x1e08000, 0xff, 0x17ffffe,
+0x190308, 0xce1202, 0x1638008, 0x18530a,
+0xcd1242, 0x370421, 0xd40004, 0x108182,
+0x1621c18, 0xd88310, 0x1620001, 0x980300,
+0x7a0003, 0x1377fff, 0x1c80010, 0x1377fff,
+0x1ca0490, 0x360920, 0xc82011, 0x360d44,
+0x1020001, 0x1c02b88, 0x1008001, 0x1c0253b,
+0x36ff3f, 0x36fd1f, 0x36fc77, 0x36fa37,
+0x36f817, 0x36fabf, 0x36f89f, 0x1581fff,
+0x118bb17, 0x70000, 0x100751f, 0x1800000,
+0x1621dc0, 0x188310, 0x1620080, 0x180300,
+0x1621dc0, 0x189312, 0x1020001, 0x1c08e25,
+0xc80220, 0x1621c18, 0xd88310, 0x1620001,
+0x980300, 0x7a0001, 0x1377fff, 0x1c80010,
+0x0, 0x360a00, 0xd41f04, 0x110107,
+0x1621c1e, 0x1589312, 0x1377fff, 0x1c90012,
+0x0, 0x370102, 0x1621c18, 0xd88310,
+0x1620001, 0x980300, 0x7a0001, 0x1377fff,
+0x1c90010, 0x1377fff, 0x1c84012, 0x1020001,
+0x1c02763, 0x760201, 0xd40514, 0x118502,
+0x100fe1, 0xc80020, 0x1020001, 0x1c024fd,
+0x36fe17, 0x772e17, 0x70000, 0x100751f,
+0x1800000, 0xc80200, 0x1020001, 0x1c024fd,
+0x1646110, 0x302643, 0x130f4b, 0x36fe17,
+0x772e17, 0x70000, 0x1580000, 0xd8bb17,
+0x0, 0x37fa17, 0x37fa9f, 0x37fc37,
+0x37fd1f, 0x37ff3f, 0xc80220, 0x1621c18,
+0xd88310, 0xc80620, 0x1620001, 0x980300,
+0xc81224, 0x7a0001, 0x1377fff, 0x1c98010,
+0x1377fff, 0x1c80193, 0x0, 0x360110,
+0x16a0000, 0x188b04, 0x118109, 0x771209,
+0x760603, 0xd40094, 0x1003f6, 0x760201,
+0xd40514, 0x118520, 0x100fe9, 0x770428,
+0xc81021, 0x360401, 0xce1040, 0xce1202,
+0x118111, 0x1e08000, 0xff, 0x17ffffe,
+0x190302, 0xce0040, 0x370401, 0x361101,
+0x1020001, 0x1c04eef, 0x361301, 0x1020001,
+0x1c04e3a, 0xc82020, 0xc82420, 0x371101,
+0x371321, 0x360401, 0xc80421, 0x1580001,
+0x1188b11, 0xe91900, 0xce0040, 0x1081dc,
+0x100fe3, 0x36ff3f, 0x36fd1f, 0x36fc37,
+0x36fa17, 0x36fa9f, 0x1581fff, 0x158bb17,
+0x70000, 0x100751f, 0x1800000, 0xd40004,
+0x110130, 0xc81020, 0x1621c18, 0xd88310,
+0x1620001, 0x983306, 0xc81420, 0x7a30c8,
+0x1377fff, 0x1c80310, 0x10c8000, 0x1002685,
+0x1377fff, 0x1c90510, 0x0, 0x360122,
+0x16a0000, 0x189304, 0x110119, 0xc80c21,
+0x771c28, 0xe60806, 0x360462, 0xce72c6,
+0xce702e, 0x11010a, 0x1e0fdff, 0x1ffff00,
+0x2, 0x180b0e, 0xce72c2, 0xce3026,
+0xe81aee, 0xcd32c6, 0x370462, 0x360462,
+0xc81c21, 0x1580001, 0x1189312, 0xe91966,
+0xce32c6, 0x118102, 0x100fe9, 0x76140a,
+0x761008, 0xd40584, 0x118502, 0x100fd3,
+0x36fe17, 0x772e17, 0x70000, 0x1580000,
+0xd8bb17, 0x0, 0x37fc17, 0x37fe37,
+0xc80200, 0x1e0ffff, 0x1000000, 0x1d9d0,
+0x185312, 0xc80020, 0x1646100, 0x1310625,
+0x36fa87, 0x770c29, 0xce4248, 0x3600a2,
+0xcd40c8, 0x37fa87, 0xd400a4, 0x11836b,
+0x360080, 0xc80602, 0xe8148a, 0xe81086,
+0xed1caa, 0xed1c66, 0x6e50ca, 0x6e1242,
+0xd32022, 0x118456, 0x770028, 0xce0008,
+0x16a0012, 0x1d80304, 0x11012a, 0x16a0013,
+0x180304, 0x118159, 0x700061, 0x118113,
+0x1e0ffff, 0x1000000, 0x1c20a, 0x180310,
+0x36fa27, 0x771029, 0x360100, 0xce0002,
+0x770429, 0xc81410, 0x1638753, 0x183306,
+0xce420a, 0xcd0200, 0xce0040, 0xcd00c0,
+0x37fa07, 0x100f45, 0x1e0ffff, 0x1000000,
+0x1c20a, 0x180310, 0x36fa27, 0x771029,
+0x360300, 0xce0002, 0x770429, 0xc81410,
+0x16381f4, 0x183306, 0xce420a, 0xcd0200,
+0xce0040, 0xcd00c0, 0x37fa07, 0x100f33,
+0x1620012, 0x1d80300, 0x1020001, 0x1c0248c,
+0x700061, 0x361100, 0x118111, 0x11b0008,
+0x291108, 0xd00029, 0x36fa27, 0x771029,
+0xc81410, 0xce0002, 0xce120a, 0x771029,
+0x16380d6, 0x198530a, 0xcd0040, 0xce0200,
+0xcd0240, 0x37fa07, 0x100f1c, 0x11b0008,
+0x291308, 0xd00029, 0x36fa27, 0x771029,
+0xc81410, 0xce0002, 0xce120a, 0x771029,
+0x149ffff, 0x1c520b9, 0xcd0040, 0xce0200,
+0xcd0240, 0x37fa07, 0x100f0c, 0x1621d9d,
+0x188310, 0xc81041, 0x760000, 0x7d4200,
+0x1377fff, 0x1c80410, 0x0, 0x360080,
+0xd40084, 0x100397, 0x36fa07, 0x36fe37,
+0x36fc17, 0x1581fff, 0x158bb17, 0x70000,
+0x762e17, 0xc80420, 0x1620011, 0x1d80300,
+0x37fe27, 0x1020001, 0x1c0248c, 0x361100,
+0x16a0000, 0x188304, 0x110112, 0x361b20,
+0xd00029, 0x36fe27, 0x771029, 0xc81412,
+0x361700, 0xce0002, 0xce120a, 0x770c29,
+0xc81010, 0xcd0040, 0x771429, 0xce10c8,
+0xce0240, 0xe81022, 0xcd0040, 0x37fe07,
+0x36fe07, 0x772e17, 0x70000, 0x762e17,
+0x0, 0x37ff1f, 0xc82810, 0xc80420,
+0xd40004, 0x118325, 0x360164, 0xc8103e,
+0xc8143e, 0x360462, 0x3604e6, 0xe91c66,
+0xe91cee, 0xce4206, 0xce524e, 0xd32248,
+0x118316, 0x1377fff, 0x1cb0010, 0xc82816,
+0x1377fff, 0x1cb3016, 0xd32040, 0x11830a,
+0x360116, 0x1377fff, 0x1cb3016, 0x770000,
+0x370114, 0x1377fff, 0x1ca3014, 0xd32040,
+0x1003f8, 0x1377fff, 0x1c80110, 0x0,
+0x370120, 0x100f09, 0x762814, 0x760402,
+0xd32002, 0x1082dd, 0x1377fff, 0x1c80110,
+0x0, 0x370120, 0x36ff1f, 0x772e17,
+0x70000, 0x1580000, 0xd8bb17, 0x0,
+0x37fa17, 0x37fb1f, 0x37fc37, 0x37fd3f,
+0x37ff5f, 0xc82210, 0xc82a12, 0xc80220,
+0xc80624, 0x1377fff, 0x1c80095, 0x0,
+0x360100, 0x16a0000, 0x188304, 0x110124,
+0xc80020, 0x360420, 0xc81021, 0xe91622,
+0xce1202, 0x110107, 0x770429, 0x1677fff,
+0x1c10160, 0xd32002, 0x118402, 0xc80002,
+0x360420, 0xc81021, 0x1580001, 0x1188310,
+0xe91922, 0xce1202, 0x118102, 0x100fee,
+0xd40004, 0x11840e, 0x1377fff, 0x1c98091,
+0x1020001, 0x1c07e67, 0x1377fff, 0x1c90091,
+0x370103, 0x360102, 0x16a0000, 0x188304,
+0x118103, 0x1020001, 0x1c0003b, 0x770603,
+0x760201, 0xd40034, 0x1003d3, 0x36ff5f,
+0x36fd3f, 0x36fb1f, 0x36fc37, 0x36fa17,
+0x1581fff, 0x158bb17, 0x70000, 0x762e17,
+0x0, 0x37ff1f, 0xc82210, 0x360400,
+0x16207ff, 0x1d81302, 0xe90800, 0xce0040,
+0x1020001, 0x1c02317, 0x16a0000, 0x188304,
+0x110109, 0x360320, 0x370921, 0x360720,
+0x370d21, 0x360920, 0x370f21, 0x360500,
+0x370b01, 0x36ff1f, 0x772e17, 0x70000,
+0x1580000, 0x1d8bb17, 0x0, 0x37fb1f,
+0x37fd3f, 0x37ff5f, 0xc82210, 0x360400,
+0x16207ff, 0x1d81302, 0xe90800, 0xce0040,
+0xd43104, 0x1010010, 0x802a50, 0xd43a04,
+0x110351, 0x1621c6b, 0x1d88310, 0x1377fff,
+0x1c80010, 0x0, 0x369f00, 0x0,
+0xc0f00, 0x0, 0x360b01, 0x16202b4,
+0x1189312, 0x169ffff, 0x1c21110, 0x118106,
+0x360701, 0x361321, 0x370920, 0x1008001,
+0x1c02a50, 0x360701, 0x0, 0x360500,
+0x371101, 0x360701, 0x0, 0x360700,
+0x371301, 0x1008001, 0x1c02a50, 0x1621c2c,
+0xd88310, 0x361521, 0x370720, 0x361721,
+0x370920, 0x1008001, 0x1c02a50, 0x360701,
+0x0, 0x360500, 0x371101, 0x360701,
+0x0, 0x360300, 0x371301, 0x1008001,
+0x1c02a50, 0x1621c21, 0x189b13, 0x1620040,
+0x181302, 0x1621ca9, 0x989312, 0x1621dc0,
+0x188310, 0x370023, 0x1620040, 0x180300,
+0x370323, 0x361121, 0x1580001, 0xd89312,
+0x370523, 0x370703, 0x370903, 0x1020001,
+0x1c08a35, 0x1621dc0, 0x188310, 0x370a03,
+0x370d03, 0x1620040, 0x180300, 0x370f03,
+0x1020001, 0x1c08a35, 0x371003, 0x1008001,
+0x1c02a50, 0xd44304, 0x1010000, 0x402a48,
+0xd44404, 0x1010010, 0x802a50, 0xd44504,
+0x1010010, 0xc02a2f, 0x16a0010, 0x980304,
+0x1010010, 0x802a50, 0x16a0013, 0x1580304,
+0x1010000, 0xc02a50, 0x1621c68, 0xd88310,
+0x1377fff, 0x1c80010, 0x0, 0x11b0009,
+0x1fefd08, 0x0, 0xc0f00, 0x0,
+0x1621c21, 0x188310, 0x361321, 0x370120,
+0x1008001, 0x1c02a50, 0x360001, 0x770429,
+0xe91000, 0xce0040, 0x1010010, 0x402a50,
+0x1621c25, 0x988310, 0x0, 0x360100,
+0x371101, 0x1008001, 0x1c02a50, 0x1621c21,
+0x188310, 0x1620080, 0x180300, 0x370000,
+0x361521, 0x371720, 0x361721, 0x371920,
+0x361521, 0x1580040, 0x189312, 0x370320,
+0x361521, 0x1580080, 0x189312, 0x370520,
+0x361721, 0x1580040, 0x189312, 0x370720,
+0x361721, 0x1580080, 0x189312, 0x370920,
+0x1377fff, 0x1cb2110, 0xc80448, 0xc81020,
+0xc80020, 0xc82016, 0x10c803f, 0x1c02885,
+0x360120, 0x1377fff, 0x1c90012, 0x0,
+0x370022, 0x360100, 0x1377fff, 0x1c80010,
+0x36ff26, 0x1377fff, 0x1c90012, 0x3600a0,
+0x3700a2, 0x360526, 0x1377fff, 0x1c80012,
+0x360346, 0x1377fff, 0x1c98014, 0x370088,
+0x3600a8, 0xc82016, 0x3700ab, 0x760000,
+0x360120, 0x1377fff, 0x1c90012, 0x0,
+0x370022, 0xc80448, 0x360100, 0x1377fff,
+0x1c80010, 0x36ff26, 0x1377fff, 0x1c90012,
+0x3600a0, 0x3700a2, 0x360526, 0x1377fff,
+0x1c80012, 0x360346, 0x1377fff, 0x1c98014,
+0x760000, 0x370088, 0x1620040, 0x180300,
+0x3600a8, 0x1621dc0, 0x188310, 0x3700ab,
+0x1621c21, 0x189b13, 0x37002a, 0x370b03,
+0x36002a, 0x370d03, 0x37002c, 0x1020001,
+0x1c08a35, 0x1621dc0, 0x188310, 0x370e03,
+0x371103, 0x1620040, 0x180300, 0x371303,
+0x1020001, 0x1c08a35, 0x1580001, 0x1589b10,
+0x371403, 0x361321, 0x370120, 0x361321,
+0x1580060, 0x189312, 0x370320, 0x1008001,
+0x1c02a50, 0x1e0a2d6, 0x440000, 0x1c210,
+0x184313, 0x1621dc0, 0x188310, 0xc80422,
+0x361321, 0x1620010, 0x980300, 0x370123,
+0x1621dc0, 0x189312, 0x370303, 0x370523,
+0x370623, 0x370883, 0x1020001, 0x1c0248c,
+0xc82410, 0x1621ca9, 0x988310, 0x361542,
+0x370b43, 0x361722, 0x370d23, 0x370f03,
+0x100f37, 0x1621c21, 0x188310, 0x361121,
+0x158003f, 0x1589312, 0x370120, 0x361321,
+0x370320, 0x100f2e, 0x1621c21, 0x189b13,
+0x1621dc0, 0x188310, 0x1620040, 0x180300,
+0x370503, 0x370703, 0x1020001, 0x1c08a35,
+0x1621dc0, 0x188310, 0x370803, 0x370b03,
+0x1620040, 0x180300, 0x370d03, 0x1020001,
+0x1c08a35, 0x370e03, 0x361301, 0x371103,
+0x361501, 0x371303, 0x361701, 0x371503,
+0x361101, 0xc80010, 0x1580299, 0x1980300,
+0xc82000, 0x370103, 0x361301, 0xc80010,
+0x1580150, 0x180300, 0xc82000, 0x370303,
+0x100f07, 0x1621c20, 0x1588310, 0x361121,
+0x370120, 0x361321, 0x370320, 0xc82011,
+0x1020001, 0x1c027a5, 0x1008001, 0x1c02a50,
+0x1621c21, 0x189b13, 0x1621dc0, 0x188310,
+0x1377fff, 0x1caa293, 0x1620040, 0x180300,
+0x370105, 0x370305, 0x1020001, 0x1c08a35,
+0x370405, 0x1580001, 0xd89b15, 0x1621dc0,
+0x188310, 0x1620040, 0x180300, 0x370105,
+0x370305, 0x1020001, 0x1c08a35, 0x370405,
+0x1621ca9, 0x989312, 0x1377fff, 0x1c83713,
+0xc80020, 0x371d23, 0x1580002, 0x589b12,
+0x361141, 0xc80414, 0x15801cb, 0x181302,
+0xc82802, 0x1620040, 0x181302, 0x370343,
+0x361341, 0x370543, 0x10c8000, 0x40294f,
+0x361541, 0x7a1040, 0x1377fff, 0x1ca0114,
+0x370140, 0x361741, 0x1377fff, 0x1ca0114,
+0x370142, 0x762010, 0x762412, 0x1620040,
+0x181302, 0x760000, 0x7a1040, 0x361541,
+0x760000, 0x1377fff, 0x1ca0114, 0x370140,
+0x762010, 0x361741, 0x1621c21, 0x188310,
+0x1377fff, 0x1ca0114, 0x370142, 0x762412,
+0x0, 0x361521, 0x1580080, 0x189312,
+0x372720, 0x361721, 0x1580080, 0x189312,
+0x372920, 0x1008001, 0x1c02a50, 0x1621c21,
+0x188310, 0x16202e4, 0x1189312, 0x16202e7,
+0x58a314, 0x370120, 0x370340, 0x1008001,
+0x1c02a50, 0x1621c27, 0x589b13, 0x1621dc0,
+0x188310, 0x1620040, 0x180300, 0x370703,
+0x370903, 0x1020001, 0x1c08a35, 0x1621dc0,
+0x188310, 0x370a03, 0x370d03, 0x1620040,
+0x180300, 0x370f03, 0x1020001, 0x1c08a35,
+0x1377fff, 0x1c92193, 0x1621c28, 0x98a314,
+0x1377fff, 0x1cb4013, 0x1621c29, 0xd88310,
+0x37f32f, 0x1377fff, 0x1c92194, 0x1377fff,
+0x1ca4014, 0x37f56f, 0x1580002, 0x1188316,
+0x37f74f, 0x360140, 0x371003, 0x37f96f,
+0x372d40, 0x36f34f, 0xc82612, 0xc82c14,
+0x1c0303, 0x100650d, 0x1800000, 0x1007507,
+0x1800000, 0x36f76f, 0x360320, 0x36f54f,
+0x372f20, 0xc82a16, 0xc82614, 0x1c0303,
+0x1006507, 0x1800000, 0x100750b, 0x1800000,
+0x36f90f, 0x370701, 0x1008001, 0x1c02a50,
+0x1621c29, 0xd89b13, 0x1621dc0, 0x188310,
+0x1620040, 0x180300, 0x370903, 0x370b03,
+0x1020001, 0x1c08a35, 0x1621dc0, 0x188310,
+0x370c03, 0x370f03, 0x1620040, 0x180300,
+0x371103, 0x1020001, 0x1c08a35, 0x371203,
+0x1621c9c, 0x1988310, 0xc80420, 0xc80028,
+0x371503, 0x1621ca9, 0x989312, 0x1580001,
+0x1989b10, 0x371723, 0x361321, 0x1580102,
+0x1189314, 0x371943, 0x371b23, 0x10c8000,
+0x4029e3, 0x361521, 0x7a0002, 0x1377fff,
+0x1c90012, 0x370120, 0x361721, 0x1377fff,
+0x1c90012, 0x370320, 0x1377fff, 0x1c82110,
+0xc80028, 0x760402, 0x7a0002, 0x361521,
+0x760402, 0x1377fff, 0x1c90012, 0x370120,
+0x361721, 0x1377fff, 0x1c90012, 0x370320,
+0x1377fff, 0x1c82110, 0x1621c29, 0xd88310,
+0x361541, 0x1377fff, 0x1c92110, 0x1580040,
+0x18a314, 0x372540, 0x361741, 0x1580040,
+0x18a314, 0x372740, 0x370721, 0x361521,
+0x370120, 0x361721, 0x370320, 0x100f4f,
+0x1621c21, 0x188310, 0xc80022, 0x370000,
+0x100f4a, 0x1621c21, 0x188b11, 0x1620040,
+0x180300, 0x1621dc0, 0x188310, 0x370001,
+0x1620040, 0x180300, 0x370301, 0x370501,
+0x1020001, 0x1c08a35, 0x1621dc0, 0x188310,
+0x370601, 0x370901, 0x1620040, 0x180300,
+0x370b01, 0x1020001, 0x1c08a35, 0x370c01,
+0x100f32, 0x1621c21, 0x188310, 0xc80020,
+0x370200, 0x100f05, 0x1621c21, 0x188310,
+0xc80021, 0x370200, 0x1621c21, 0x188310,
+0xc80020, 0x361321, 0x370520, 0x370000,
+0x100f22, 0x1620006, 0x1d80300, 0x1020001,
+0x1c0248c, 0x16a0000, 0x188304, 0x11011b,
+0x361100, 0x16a0000, 0x188304, 0x110117,
+0x360401, 0x16207ff, 0x1d81302, 0xe90800,
+0x1620024, 0x1984308, 0xce0040, 0x7a0200,
+0x1377fff, 0x1c80010, 0x158164c, 0x1988310,
+0x371101, 0x100f09, 0x1621c21, 0x188310,
+0x1621dbe, 0x1189312, 0x370120, 0x100f03,
+0x1008001, 0x1c02866, 0x36ff5f, 0x36fd3f,
+0x36fb1f, 0x1581fff, 0x58bb17, 0x70000,
+0x360400, 0x16207ff, 0x1d81302, 0xe90800,
+0xce0040, 0xd43104, 0x118238, 0xd43204,
+0x11831a, 0xd43904, 0x110111, 0x16a0012,
+0x1180304, 0x110109, 0x16a0013, 0x1180304,
+0x11812e, 0x1621c25, 0x989312, 0x361100,
+0x370102, 0x100f29, 0x1621c2d, 0x189312,
+0x0, 0x370102, 0x100f24, 0x360720,
+0x361140, 0x370542, 0x360720, 0x361300,
+0x370302, 0x100f1d, 0x16202b4, 0x118b316,
+0x360b40, 0x169ffff, 0x1c21314, 0x11810b,
+0x360740, 0x361160, 0x370564, 0x360740,
+0x361360, 0x370764, 0x361100, 0x0,
+0x371920, 0x100f0d, 0x16202b7, 0x58b316,
+0x169ffff, 0x1c21314, 0x118105, 0x361100,
+0x0, 0x371b20, 0x100f04, 0x361100,
+0x0, 0x371d20, 0x0, 0x70000,
+0x1580000, 0x98bb17, 0x0, 0x37fc17,
+0x37fd1f, 0x37ff3f, 0xc82210, 0x360400,
+0x16207ff, 0x1d81302, 0xe90800, 0xce0040,
+0x16a0010, 0x980304, 0x11812d, 0x1620008,
+0x980300, 0x1020001, 0x1c02317, 0x16a0000,
+0x188304, 0x110114, 0x770029, 0x163835c,
+0x1181302, 0xc81021, 0x1677fff, 0x1c00062,
+0x771429, 0x1638155, 0x1d83306, 0x1621c21,
+0x188310, 0xcd0040, 0x370001, 0x360201,
+0xce0240, 0xcd00c0, 0x370201, 0x370080,
+0x100f13, 0x770029, 0x16386c3, 0x581302,
+0xc81020, 0x1677fff, 0x1c00062, 0x771429,
+0x16385a5, 0x583306, 0x1621c21, 0x188310,
+0xcd0040, 0x370001, 0x360201, 0xce0240,
+0xcd00c0, 0x370201, 0x370080, 0x360001,
+0x770429, 0xe91000, 0xce0040, 0x110111,
+0x1020001, 0x1c07e67, 0x371101, 0x16a0000,
+0x188304, 0x118103, 0x1020001, 0x1c0003b,
+0x360021, 0x771029, 0xc80020, 0xe91022,
+0x361101, 0xce1202, 0x1020001, 0x1c03c73,
+0x360201, 0x770429, 0xe91000, 0xce0040,
+0x1010000, 0x402b82, 0x1621c0a, 0x1989b13,
+0x0, 0x360203, 0x1020001, 0x1c03e42,
+0x360401, 0x16207ff, 0x1d81302, 0x360080,
+0xe90800, 0xce0040, 0xe81288, 0xed1b8e,
+0xd43104, 0x110156, 0xd43204, 0x110136,
+0x16a0010, 0x1180304, 0x110116, 0x16a0011,
+0x1580304, 0x11816b, 0xc8103e, 0x360403,
+0x162007d, 0x181302, 0x7d0200, 0x360261,
+0x771429, 0xce0a46, 0x1020001, 0x1c08de0,
+0x77040e, 0x771029, 0x7d0040, 0xce0200,
+0xe81000, 0xcd0001, 0x370201, 0x100f59,
+0x360403, 0x1ea0000, 0x0, 0x2ee00,
+0x582300, 0x118404, 0x1620024, 0x180300,
+0x100f0b, 0x1ea0000, 0x0, 0x17700,
+0x582300, 0x118404, 0x1620012, 0x180300,
+0x100f03, 0x1620009, 0x180300, 0x770429,
+0x7a02c0, 0x771029, 0xce0040, 0x3602a1,
+0xe81000, 0xce120a, 0xcd0002, 0x370201,
+0x100f3c, 0x360403, 0x1ea0000, 0x0,
+0x2ee00, 0x582300, 0x118404, 0x1620024,
+0x180300, 0x100f0b, 0x1ea0000, 0x0,
+0x17700, 0x582300, 0x118404, 0x1620012,
+0x180300, 0x100f03, 0x1620009, 0x180300,
+0x771029, 0xc80422, 0x771429, 0x7a0040,
+0x360221, 0xce0200, 0xe81000, 0xce1242,
+0xcd0002, 0x370201, 0x100f1e, 0x360403,
+0x1ea0000, 0x0, 0x2ee00, 0x582300,
+0x118404, 0x1620024, 0x180300, 0x100f0b,
+0x1ea0000, 0x0, 0x17700, 0x582300,
+0x118404, 0x1620012, 0x180300, 0x100f03,
+0x1620009, 0x180300, 0x771029, 0xc80440,
+0x771429, 0x7a0040, 0x360221, 0xce0200,
+0xce1242, 0xe81000, 0xcd0002, 0x370201,
+0x360201, 0x770429, 0xe91000, 0xce0040,
+0x1020001, 0x1c07d40, 0x371301, 0x16a0000,
+0x188304, 0x118103, 0x1020001, 0x1c0003b,
+0x360221, 0x771029, 0xc80020, 0xe91022,
+0x361301, 0xce1202, 0x1020001, 0x1c06aa0,
+0x36ff3f, 0x36fd1f, 0x36fc17, 0x1581fff,
+0x198bb17, 0x70000, 0x1580000, 0x118bb17,
+0x0, 0x37fb1f, 0x37fd3f, 0x37ff5f,
+0xc82210, 0xc82614, 0x37f92f, 0xc82011,
+0x1020001, 0x1c027be, 0x360761, 0x36f92f,
+0xc82813, 0x361101, 0x360951, 0x0,
+0xf0f05, 0x0, 0xc82413, 0xc82011,
+0x1020001, 0x1c02a56, 0x36ff5f, 0x36fd3f,
+0x36fb1f, 0x1581fff, 0x118bb17, 0x70000,
+0x1580000, 0xd8bb17, 0x0, 0x37fb1f,
+0x37fd3f, 0x37ff5f, 0x1621a2e, 0x1d80300,
+0x1020001, 0x1c07e54, 0x1620f1d, 0x1180300,
+0x1020001, 0x1c07d2d, 0x1621a2e, 0x1180300,
+0x1020001, 0x1c07e67, 0xc82210, 0xc80021,
+0x1020001, 0x1c07e67, 0xc82a10, 0xc82011,
+0x1020001, 0x1c04eef, 0x1620f1d, 0x580300,
+0x1020001, 0x1c07d40, 0xc82610, 0xc80021,
+0x1020001, 0x1c07d40, 0xc82210, 0xc82013,
+0x1020001, 0x1c04e3a, 0x1020001, 0x1c023ba,
+0x1020001, 0x1c023c7, 0x1621c0a, 0x1988310,
+0x0, 0x360400, 0x1020001, 0x1c01d41,
+0x1020001, 0x1c009c1, 0x1020001, 0x1c025d4,
+0xc82015, 0x1020001, 0x1c04eef, 0xc82011,
+0x1020001, 0x1c04e3a, 0x1020001, 0x1c00c61,
+0xc80021, 0x1020001, 0x1c02605, 0x1621c07,
+0x1988310, 0xc80048, 0x371400, 0x372c00,
+0x1020001, 0x1c007ab, 0x36ff5f, 0x36fd3f,
+0x36fb1f, 0x1581fff, 0x158bb17, 0x70000,
+0x100751f, 0x1800000, 0x37ff1f, 0x1020001,
+0x1c0002a, 0x1620000, 0x588b11, 0x1646100,
+0xb02641, 0x1e08000, 0x3, 0x1f7f808,
+0x190300, 0x370029, 0x1020001, 0x1c00417,
+0xd40014, 0x118109, 0x1620010, 0x180300,
+0x1020001, 0x1c00417, 0x130f9e, 0xc80021,
+0x370009, 0x100f04, 0x360009, 0xd40004,
+0x1001fe, 0xd40014, 0x110110, 0xd40114,
+0x11010b, 0xd40214, 0x110106, 0xd40314,
+0x11810c, 0x1020001, 0x1c00056, 0x100f09,
+0x1020001, 0x1c00050, 0x100f06, 0x1020001,
+0x1c0004a, 0x100f03, 0x1020001, 0x1c0003e,
+0xc80020, 0x36ff1f, 0x36fe17, 0x772e17,
+0x70000, 0xc80421, 0xc80020, 0x1020001,
+0x1c0042b, 0xc80422, 0xc80020, 0x1020001,
+0x1c0042b, 0xc80423, 0xc80020, 0x1020001,
+0x1c0042b, 0xc80420, 0xc80020, 0x1020001,
+0x1c0042b, 0x0, 0x70000, 0x951000,
+0xd41784, 0x11020f, 0x1e08000, 0x3f,
+0xfffffe, 0x19030a, 0x885240, 0x1c97fff,
+0x1fffc00, 0x30060, 0x185320, 0x14b7fff,
+0x1c42000, 0x14bffff, 0x1c02008, 0x70000,
+0x0, 0x70000, 0x1580000, 0x198bb17,
+0x0, 0x37f617, 0x37fb1f, 0x37f837,
+0x37fd3f, 0x37ff5f, 0x37f70f, 0x360106,
+0x360402, 0x37f90f, 0x36f70f, 0x0,
+0x11b8000, 0xf608, 0x360202, 0x11b8000,
+0xf808, 0x360602, 0x11b8000, 0xfc08,
+0x11b0000, 0xf808, 0x1020001, 0x1c03e42,
+0xc82c10, 0x36f70f, 0xc80420, 0x158000f,
+0x1588310, 0xc80002, 0xc82210, 0x36f70f,
+0xc82410, 0x1580005, 0x188310, 0xc82a11,
+0xc82616, 0x1c0103, 0x1006587, 0x1800000,
+0x100758b, 0x1800000, 0xc82812, 0x1580006,
+0x189312, 0x36f76f, 0x1580007, 0x18a314,
+0xc82216, 0x1580008, 0x18b316, 0x374c21,
+0x374e21, 0x10c8001, 0x2c8b, 0x1007501,
+0x1800000, 0x1007505, 0x1800000, 0x1007509,
+0x1800000, 0x100750d, 0x1800000, 0x36f70f,
+0x1e08000, 0x3c, 0x47ae14, 0x180302,
+0xc82410, 0x1580004, 0x1988310, 0x11b8000,
+0x902a, 0x11b8000, 0x940a, 0x11b8000,
+0x960a, 0xc82c12, 0xc82810, 0x1c2603,
+0x1006509, 0x1800000, 0x100750d, 0x1800000,
+0xc82012, 0x1020001, 0x1c02e30, 0x36f70f,
+0xc80020, 0x1020001, 0x1c02e51, 0x36f70f,
+0xc8103e, 0x162007d, 0x181302, 0x11b0000,
+0xf608, 0x7d0200, 0x1020001, 0x1c08de0,
+0x158000c, 0x1988311, 0x36f93f, 0xc80200,
+0xc80641, 0x1646110, 0x312627, 0xc82011,
+0x1020001, 0x1c0b9e8, 0x1377fff, 0x1c8a191,
+0x1377fff, 0x1c98093, 0x770603, 0xd40034,
+0x1004f5, 0x36f70f, 0xc80020, 0x1020001,
+0x1c02ef0, 0x36ff5f, 0x36fd3f, 0x36fb1f,
+0x36f837, 0x36f617, 0x1581fff, 0x98bb17,
+0x70000, 0xc81000, 0xd42584, 0x110438,
+0x1621c6f, 0x1589312, 0x1377fff, 0x1c90412,
+0x0, 0x360122, 0x0, 0xc0f02,
+0x0, 0xc81020, 0xc81448, 0x100f19,
+0x1e0a088, 0xc3, 0x900000, 0x185308,
+0x100f14, 0x1e0a0d0, 0xc1, 0x1400000,
+0x185308, 0x100f0f, 0x1e09e3a, 0x1c28f00,
+0x0, 0x185308, 0x100f0a, 0x1e09f80,
+0x3c, 0x47ae14, 0x185308, 0x100f05,
+0x1e08000, 0xc1, 0x800000, 0x185308,
+0x8e2202, 0x118210, 0x8e2242, 0x11030e,
+0xd40104, 0x118107, 0x1580005, 0x188312,
+0x10c8000, 0x1802d00, 0x1007525, 0x1800000,
+0x1377fff, 0x1c80010, 0xc80020, 0x374c20,
+0x100f04, 0xc80022, 0x100f02, 0xc80021,
+0x0, 0x70000, 0xc80400, 0xc80020,
+0xd42324, 0x11810c, 0x11b0000, 0x1022a,
+0xd40024, 0x118103, 0xc80421, 0x100f02,
+0xc80420, 0x14bffff, 0x1c12002, 0x370020,
+0x100f02, 0xc80021, 0x0, 0x70000,
+0x1580001, 0x198bb17, 0x0, 0x37fc17,
+0x37e51f, 0x37fe37, 0x37e73f, 0x37e95f,
+0xc82210, 0xc82612, 0xc82011, 0x1020001,
+0x1c02ddd, 0x11b0000, 0xfc39, 0xd44034,
+0x118404, 0x1620008, 0x181b03, 0x100f01,
+0x11b0000, 0xfc09, 0xc80220, 0xd40004,
+0x11040d, 0x1008001, 0x1c02dd5, 0xc82011,
+0xc80020, 0x1020001, 0x1c02ef0, 0x11b0000,
+0xfc09, 0x6e0861, 0xd32001, 0x1010010,
+0x1402dd5, 0x1581fff, 0x18bb10, 0x1377fff,
+0x1c94013, 0x1581ffe, 0x98bb14, 0xc82c13,
+0x10c8000, 0x1802d57, 0x360152, 0x762412,
+0x1377fff, 0x1ca8095, 0x370150, 0x762010,
+0x360156, 0x762c16, 0x1377fff, 0x1ca8095,
+0x370154, 0x762814, 0x11b0000, 0xf809,
+0xd40304, 0x11823e, 0xd40404, 0x118321,
+0xd40804, 0x11033a, 0x1581ffe, 0x98bb10,
+0x1581fff, 0x18bb15, 0xc80403, 0x158000b,
+0x1988b16, 0x11b0000, 0xc809, 0x360920,
+0x360905, 0x11b0008, 0xf349, 0x1020001,
+0x1c02faf, 0x1581ffe, 0x98bb10, 0x1581fff,
+0x18bb15, 0xc80403, 0x158000b, 0x1d88b16,
+0x11b0000, 0xca09, 0x360b20, 0x360b05,
+0x11b0008, 0xf549, 0x1020001, 0x1c02faf,
+0x361103, 0x16a0000, 0x188304, 0x110118,
+0x1581ffe, 0x98bb10, 0x1581fff, 0x18bb15,
+0xc80403, 0x158000b, 0x1188b16, 0x360520,
+0x360505, 0x11b0000, 0xc409, 0x11b0008,
+0xef49, 0x1020001, 0x1c02faf, 0x1581fff,
+0x18bb10, 0x1646130, 0x314623, 0x360520,
+0xc82012, 0x1020001, 0x1c02eb9, 0x158000b,
+0x988b16, 0x11b0000, 0xc009, 0xc80403,
+0x11b0008, 0xeb49, 0x36e527, 0x36f107,
+0x1020001, 0x1c02faf, 0x1581ffe, 0x98bb10,
+0x1581fff, 0x18bb15, 0xc80403, 0x158000b,
+0xd88b16, 0x11b0000, 0xc209, 0x360320,
+0x11b0008, 0xed49, 0x360305, 0x1020001,
+0x1c02faf, 0x11b0000, 0xfa09, 0xc80421,
+0xe91c00, 0xce0040, 0x110110, 0x1581ffe,
+0x98bb10, 0x1581fff, 0x18bb15, 0xc80403,
+0x158000b, 0x1588b16, 0x11b0000, 0xc609,
+0x360720, 0x11b0008, 0xf149, 0x360705,
+0x1020001, 0x1c02faf, 0x11b0000, 0x10209,
+0xd40004, 0x1008000, 0x402d3d, 0xd32060,
+0x1008010, 0x1002d39, 0x700060, 0x11b8000,
+0x10209, 0x1008001, 0x1c02d3d, 0x36e95f,
+0x36e73f, 0x36e51f, 0x36fe37, 0x36fc17,
+0x1581ffe, 0x98bb17, 0x70000, 0x1580000,
+0x158bb17, 0x0, 0x37f617, 0x37f69f,
+0x37f837, 0x37f8bf, 0x37fa77, 0x37fb1f,
+0x37fd3f, 0x37ff5f, 0xc82a10, 0x1580004,
+0x198ab13, 0xc82215, 0xc80220, 0x1620004,
+0x1983b07, 0x1646112, 0xb03603, 0x360001,
+0x3600b3, 0x8e2260, 0x11011c, 0xd40014,
+0x11810a, 0xc82015, 0x3700b5, 0x1620008,
+0x180300, 0x11b0000, 0xfe2d, 0x7a0002,
+0x130f53, 0x100f10, 0xd42214, 0x118105,
+0xc82015, 0x3744b5, 0x130f2c, 0x100f0a,
+0xd41a14, 0x118205, 0xd42114, 0x110305,
+0xc81221, 0x100f04, 0xd40114, 0x110102,
+0xc80621, 0x3700b1, 0x762613, 0x762211,
+0x770e07, 0x760201, 0xd40074, 0x1003dc,
+0xd40034, 0x110109, 0xc82015, 0x11b0000,
+0xfe0d, 0x1620008, 0x181302, 0x7a0040,
+0x1020001, 0x1c02ef0, 0xd40094, 0x110104,
+0xc82015, 0x1020001, 0x1c02f6d, 0x36ff5f,
+0x36fd3f, 0x36fb1f, 0x36fa77, 0x36f837,
+0x36f617, 0x36f8bf, 0x36f69f, 0x1581fff,
+0xd8bb17, 0x70000, 0x762e17, 0x0,
+0x37ff1f, 0xc82210, 0x364480, 0x1638790,
+0x181302, 0x11b0000, 0xf609, 0x8c1048,
+0x14bffff, 0x1c02000, 0x1c47f00, 0x208000,
+0x60, 0x205300, 0x1c07fff, 0x1fffc00,
+0x30060, 0x181347, 0x1020001, 0x1c08a13,
+0x14b7fff, 0x1c02000, 0x11b8000, 0xfe09,
+0x118104, 0xc80021, 0x11b8000, 0xfe09,
+0x36ff1f, 0x772e17, 0x70000, 0x1580000,
+0x198bb17, 0x0, 0x37fe17, 0x37f51f,
+0x1646100, 0xb11621, 0x360000, 0xb00000,
+0x11810c, 0x1581fff, 0x98bb10, 0xc80020,
+0xc80441, 0x1020001, 0x1c03c73, 0x1581fff,
+0x98bb10, 0xc80048, 0x370400, 0x100f2d,
+0x11b0000, 0xf609, 0x1ea0000, 0x0,
+0x15888, 0x582300, 0x118103, 0xc80020,
+0x100f15, 0x1ea0000, 0x0, 0x17700,
+0x582300, 0x118103, 0xc80021, 0x100f0e,
+0x1ea0000, 0x0, 0x2b110, 0x582300,
+0x118103, 0xc80022, 0x100f07, 0x1ea0000,
+0x0, 0x2ee00, 0x582300, 0x118133,
+0xc80023, 0x1621c6d, 0x589312, 0x1581fff,
+0x98bb10, 0xc80441, 0x7a0040, 0x1377fff,
+0x1c90012, 0xc82c10, 0xc82812, 0x1c0503,
+0x1006509, 0x1800000, 0x100750d, 0x1800000,
+0xd40014, 0x11040d, 0x1580009, 0x1188b10,
+0x1581fff, 0x98bb12, 0xc82c10, 0xc82812,
+0x1c0503, 0x1006509, 0x1800000, 0x100750d,
+0x1800000, 0x100f13, 0x14bffff, 0x1c12001,
+0x1c47f00, 0x208000, 0x60, 0xa05302,
+0xc80048, 0xc91802, 0x1020001, 0x1c08e17,
+0x1580009, 0x1188b14, 0x1581fff, 0x98bb12,
+0x158000a, 0x588b10, 0x1020001, 0x1c0b593,
+0x11b8000, 0x10019, 0x36f51f, 0x36fe17,
+0x1581fff, 0x98bb17, 0x70000, 0x1580000,
+0x98bb17, 0x0, 0x37fc17, 0x37fd1f,
+0x37ff3f, 0x1646100, 0xb13629, 0x11b0000,
+0x1000c, 0xd40004, 0x11011f, 0x158000a,
+0x1989b14, 0xc80001, 0xc82214, 0x158000a,
+0x589b16, 0x1580009, 0x1189b14, 0x1020001,
+0x1c0b4cb, 0x11b0000, 0x1000b, 0xd32020,
+0x11840c, 0x158000a, 0x589b12, 0x1580009,
+0x1189b10, 0x700020, 0x11b8000, 0x1000b,
+0xc80001, 0x1020001, 0x1c0b59e, 0x100f0d,
+0xc82013, 0xc80020, 0x1020001, 0x1c02e51,
+0x100f08, 0x158000a, 0x1989b16, 0x1580009,
+0x1189b14, 0xc80001, 0x1020001, 0x1c08d20,
+0x36ff3f, 0x36fd1f, 0x36fc17, 0x1581fff,
+0x198bb17, 0x70000, 0x1580001, 0x18bb17,
+0x0, 0x37f217, 0x37f69f, 0x37f437,
+0x37f8bf, 0x37fb1f, 0x37fd3f, 0x37ff5f,
+0x1646100, 0xb11621, 0x14bffff, 0x1c12001,
+0x1c47f00, 0x208000, 0x60, 0xa05302,
+0xc80048, 0xc91802, 0x1020001, 0x1c08e17,
+0x1376100, 0x1882111, 0x158000b, 0x988b13,
+0x158000c, 0x188b15, 0xc81220, 0xc81640,
+0x37f30f, 0x1580001, 0x988b10, 0x37f50f,
+0x36f30f, 0x364a01, 0x1447fff, 0x1c00060,
+0x36f50f, 0x0, 0x1447fff, 0x1c00060,
+0x1020001, 0x1c0877e, 0x1377fff, 0x1c80491,
+0xc80448, 0x364881, 0x894202, 0x3624a0,
+0x1c2ffff, 0x1fffc00, 0x30265, 0x1585302,
+0x8c1202, 0x8c0040, 0xd40014, 0x110405,
+0x370003, 0xc80020, 0x370005, 0x100f05,
+0x144ffff, 0x1c06300, 0x8c0060, 0x370005,
+0x36f30f, 0x762613, 0x762a15, 0x77160b,
+0x761209, 0x762010, 0x37f30f, 0x36f50f,
+0x762010, 0x37f50f, 0xd400b4, 0x1004d5,
+0x11b8000, 0x10219, 0x36ff5f, 0x36fd3f,
+0x36fb1f, 0x36f437, 0x36f217, 0x36f8bf,
+0x36f69f, 0x1581fff, 0x18bb17, 0x70000,
+0x762e17, 0x0, 0x37ff1f, 0xc82212,
+0x11b0000, 0xf628, 0x14bffff, 0x1c12002,
+0x1c47f00, 0x208000, 0x60, 0xa05302,
+0x8c0002, 0x1020001, 0x1c08a13, 0x14b6100,
+0x1003000, 0xe80100, 0x14b7e00, 0x802002,
+0x370401, 0x360101, 0x360401, 0x360321,
+0x1377fff, 0x1c80010, 0x169ffff, 0x1c21012,
+0x118204, 0x1377fff, 0x1c83010, 0x370301,
+0x36ff1f, 0x772e17, 0x70000, 0x1580001,
+0x58bb17, 0x0, 0x37fc17, 0x37f11f,
+0x37fe37, 0x37f33f, 0x37f55f, 0xc82610,
+0x1580003, 0x989b10, 0xc80048, 0x10c8000,
+0x1802f80, 0x360020, 0x8e2002, 0x110202,
+0xc80002, 0x762010, 0x0, 0x1581fff,
+0x18bb10, 0x1580003, 0x989b12, 0x10c8000,
+0x1802f8a, 0x144ffff, 0x1c10064, 0x762412,
+0x1007521, 0x1800000, 0x158000e, 0x1589b11,
+0x1581fff, 0x18bb15, 0xc80220, 0xc80640,
+0xc82020, 0x370101, 0x360005, 0xb00000,
+0x11830c, 0xc80423, 0x7d1041, 0x760201,
+0x1377fff, 0x1c80113, 0x158000c, 0x1988310,
+0x370101, 0xc82013, 0x360121, 0x130fa9,
+0x762211, 0x762a15, 0x770603, 0xd40034,
+0x1004ec, 0x36f55f, 0x36f33f, 0x36f11f,
+0x36fe37, 0x36fc17, 0x1581ffe, 0x1d8bb17,
+0x70000, 0x1580000, 0xd8bb17, 0x0,
+0x37fc17, 0x37fd1f, 0x37fe37, 0x37ff3f,
+0x1646100, 0xb11621, 0x1646120, 0x1b1362d,
+0x16a0000, 0x18a304, 0x110107, 0x1646130,
+0x310623, 0x1020001, 0x1c0b4b5, 0xc82411,
+0x100f01, 0x1646110, 0x1310623, 0x360003,
+0xc81003, 0x1020001, 0x1c08723, 0x360003,
+0x14bffff, 0x1c12003, 0x1c47f00, 0x208000,
+0x60, 0xa05302, 0x808220, 0x370003,
+0x36ff3f, 0x36fd1f, 0x36fe37, 0x36fc17,
+0x1581fff, 0x158bb17, 0x70000, 0x1580001,
+0x18bb17, 0x0, 0x37f417, 0x37f49f,
+0x37f637, 0x37f6bf, 0x37f877, 0x37f8ff,
+0x37fb1f, 0x37fd3f, 0x37ff5f, 0xc82210,
+0xc82612, 0xc82a16, 0x360a03, 0x11b8000,
+0x15009, 0x11b8008, 0x17749, 0x360213,
+0xd40014, 0x118211, 0xd40114, 0x11830d,
+0xd40214, 0x110109, 0xd40514, 0x110105,
+0xd40614, 0x118109, 0xc80225, 0x100f07,
+0xc8023f, 0x100f05, 0xc80224, 0x100f03,
+0xc80223, 0x100f01, 0xc80001, 0x1020001,
+0x1c03e42, 0x1580003, 0xd88b14, 0x1581fff,
+0x58bb12, 0xc80021, 0x37f34f, 0xc82c12,
+0xc82810, 0x1c0103, 0x1006529, 0x1800000,
+0x100752d, 0x1800000, 0x36f227, 0xe91d22,
+0xce0002, 0x372e01, 0xc80001, 0x36f30f,
+0x1020001, 0x1c03e4c, 0x360603, 0x372801,
+0x169ffff, 0x1c212a0, 0x118106, 0xc80020,
+0xc80420, 0x372a01, 0x372c21, 0x100f05,
+0x360005, 0x372a01, 0x360205, 0x372c01,
+0x360403, 0x16a07d0, 0x180304, 0x110134,
+0x16a0bb8, 0x180304, 0x110124, 0x16a0fa0,
+0x180304, 0x11810e, 0x1e09fc9, 0x10e5b00,
+0x1cac6, 0x180310, 0x1621caf, 0x1189312,
+0x11b8008, 0xbb09, 0x11b8008, 0xed29,
+0x11b8000, 0x14e09, 0x100f0d, 0x1e09fd6,
+0x1163700, 0x1cabc, 0x180310, 0x1621cae,
+0x1d89312, 0x11b8008, 0xbb09, 0x11b8008,
+0xed29, 0x11b8000, 0x14e09, 0x1620008,
+0x180300, 0x162000c, 0x181302, 0x374401,
+0x373221, 0x100f1f, 0x1e09fc3, 0x1131900,
+0x1cad0, 0x180310, 0x1621cb0, 0x589312,
+0x11b8008, 0xbb09, 0x11b8008, 0xed29,
+0x11b8000, 0x14e09, 0x100f0d, 0x1e09fbf,
+0x11cc00, 0x1cada, 0x180310, 0x1621cb0,
+0x1989312, 0x11b8008, 0xbb09, 0x11b8008,
+0xed29, 0x11b8000, 0x14e09, 0xc80027,
+0x1620006, 0x181302, 0x374401, 0x373221,
+0x364421, 0xc80048, 0x14bffff, 0x1c12002,
+0x1c47f00, 0x208000, 0x60, 0xa05302,
+0xc91802, 0x1020001, 0x1c08e17, 0x374601,
+0x360403, 0x364621, 0x14bffff, 0x1c02000,
+0x1c47f00, 0x208000, 0x60, 0x205300,
+0x8c0040, 0x374801, 0x362801, 0x364421,
+0xd32040, 0x118404, 0xc80220, 0x373421,
+0x100f03, 0x373401, 0x700802, 0x1580012,
+0x1588b13, 0xc80620, 0xc81240, 0x162000c,
+0x180300, 0x360505, 0x7d1003, 0x1377fff,
+0x1c90110, 0xc82013, 0x363201, 0x6e0020,
+0x1020001, 0x1c0b9e8, 0x1377fff, 0x1c9a193,
+0x771209, 0x760603, 0xd40094, 0x1004f0,
+0x11b0000, 0x15009, 0xc80620, 0xd40004,
+0x1010000, 0x1003154, 0x1e0e164, 0x0,
+0x0, 0x184b03, 0x362821, 0x1e0a164,
+0x3f, 0x1000000, 0x187b00, 0x364681,
+0x14bffff, 0x1c12002, 0x1c47f00, 0x208000,
+0x60, 0xa05302, 0x8c1202, 0x374a21,
+0x374c31, 0x11b8000, 0xa439, 0x11b8000,
+0xa699, 0x11b8000, 0xa839, 0x11b8000,
+0xaa39, 0x11b8000, 0xac39, 0x11b8000,
+0xae39, 0x11b8000, 0xb039, 0x11b8000,
+0xb209, 0x11b8000, 0xb439, 0x11b8000,
+0xb609, 0xc8000f, 0x11b8000, 0xb839,
+0x375431, 0x376431, 0x364821, 0x1020001,
+0x1c08765, 0x11b8000, 0x12409, 0x16388bf,
+0x980300, 0x364821, 0x1020001, 0x1c08765,
+0x11b8000, 0x12609, 0x1580001, 0x988b10,
+0x1e09f9e, 0x170a4c1, 0x1400000, 0x180307,
+0x1e0a33d, 0x3f, 0x0, 0x180b0b,
+0x372071, 0x372291, 0x371631, 0x371ab1,
+0x371431, 0x371801, 0x371e31, 0x372431,
+0x371c31, 0xc82811, 0xc82410, 0x1c0a03,
+0x1006505, 0x1800000, 0x1007509, 0x1800000,
+0x364821, 0xc80001, 0x1020001, 0x1c08765,
+0x11b8000, 0x9609, 0xc80001, 0x364821,
+0x1020001, 0x1c08765, 0x11b8000, 0x9809,
+0x1638879, 0x180300, 0x364821, 0x1020001,
+0x1c08765, 0x11b8000, 0x9009, 0x1638882,
+0x1980300, 0x364821, 0x1020001, 0x1c08765,
+0x11b8000, 0x9209, 0x362c01, 0xd40004,
+0x118166, 0x1e09f40, 0xc1, 0xc00000,
+0x180302, 0x1e0e020, 0xc1, 0x1200000,
+0x185308, 0x1e0e088, 0x40, 0xc00000,
+0x187306, 0x3778b1, 0x1e08000, 0x3e,
+0x99999a, 0x190303, 0x377a21, 0x377c01,
+0x377e81, 0x11b8000, 0x8009, 0xc80001,
+0x11b8000, 0x82a9, 0x11b8000, 0x8469,
+0x11b8000, 0x86e9, 0x11b8000, 0x8839,
+0x364821, 0x1020001, 0x1c08765, 0x376a01,
+0xc80001, 0x364821, 0x1020001, 0x1c08765,
+0x376e01, 0x14bffff, 0x1c021c1, 0x364821,
+0x1020001, 0x1c08765, 0x376c01, 0xc8000f,
+0x364821, 0x1020001, 0x1c08765, 0x375c01,
+0x16388af, 0x980300, 0x364821, 0x1020001,
+0x1c08765, 0x375e01, 0x14bffff, 0x1c021a1,
+0x377401, 0x100f66, 0x1620002, 0x980300,
+0xc81220, 0x1620048, 0x181302, 0xc81640,
+0x7d0003, 0x7d3843, 0x1377fff, 0x1c80011,
+0x1580015, 0x588313, 0x360505, 0x162000c,
+0x180300, 0x1377fff, 0x1c80390, 0x7d0009,
+0x363221, 0x1377fff, 0x1c80010, 0x6e0022,
+0x1580048, 0x188312, 0xc82013, 0x1020001,
+0x1c0b9e8, 0x1377fff, 0x1c9a193, 0x77160b,
+0x761209, 0xd400b4, 0x1004ec, 0x11b0000,
+0x15009, 0x760603, 0xd32003, 0x1008010,
+0x14030a8, 0x100fd9, 0x1e09f4c, 0x1999a3f,
+0x333334, 0x181300, 0x1e09f40, 0xc1,
+0x1600000, 0x185308, 0x1e0e0c8, 0xc0,
+0x800000, 0x181b06, 0x1e09ee6, 0xcccd40,
+0x800000, 0x184b0e, 0x377801, 0xc80001,
+0x377a71, 0x377c21, 0x377e81, 0x11b8000,
+0x80a9, 0x11b8000, 0x8269, 0x11b8000,
+0x84e9, 0x11b8000, 0x8639, 0x11b8000,
+0x8899, 0x364821, 0x1020001, 0x1c08765,
+0x376a01, 0xc80001, 0x364821, 0x1020001,
+0x1c08765, 0x376e01, 0x14bffff, 0x1c021c1,
+0x364821, 0x1020001, 0x1c08765, 0x376c01,
+0x1638869, 0x180300, 0x364821, 0x1020001,
+0x1c08765, 0x375c01, 0x163888f, 0x980300,
+0x364821, 0x1020001, 0x1c08765, 0x375e01,
+0x14bffff, 0x1c021a3, 0x377401, 0x1e08000,
+0x3c, 0xeb8520, 0x190302, 0x364801,
+0x8c0040, 0x1020001, 0x1c02c39, 0x377001,
+0x1638882, 0x1980300, 0x367021, 0x377221,
+0x364821, 0x1020001, 0x1c08765, 0x11b8000,
+0x9409, 0x1e0e14b, 0xc2, 0x1280000,
+0x181300, 0x362a81, 0x880008, 0x11b8000,
+0x9a09, 0x360c01, 0x362a81, 0x890002,
+0x880200, 0x11b8000, 0x12809, 0x11b8000,
+0x12209, 0x361001, 0x1020001, 0x1c0877e,
+0xc82011, 0xc80447, 0x375201, 0xc80002,
+0x1020001, 0x1c03878, 0xc82011, 0x1020001,
+0x1c03862, 0xc82011, 0x360401, 0x1020001,
+0x1c037b7, 0x36ff5f, 0x36fd3f, 0x36fb1f,
+0x36f877, 0x36f637, 0x36f417, 0x36f8ff,
+0x36f6bf, 0x36f49f, 0x1581fff, 0x18bb17,
+0x70000, 0x1580001, 0x1d8bb17, 0x0,
+0x37fa17, 0x37ec9f, 0x37fc37, 0x37eebf,
+0x37fe77, 0x37f11f, 0x37f33f, 0x37f55f,
+0xc82a10, 0x37e32f, 0x11b0008, 0x1770d,
+0x1377fff, 0x1c92210, 0x364c05, 0x37e50f,
+0x1377fff, 0x1c82290, 0x37e72f, 0x37e90f,
+0xb00000, 0x118103, 0xc80421, 0x100f02,
+0xc80420, 0x374e25, 0x364a25, 0x881840,
+0x1477fff, 0x1c24403, 0x118203, 0xc80021,
+0x100f02, 0xc80020, 0x375005, 0x1580003,
+0x118ab10, 0xc80020, 0x1581ffe, 0x58bb12,
+0x363615, 0x1581ffe, 0x1d8bb14, 0xd40014,
+0x118415, 0x36e36f, 0x360020, 0x760000,
+0x1377fff, 0x1cb0116, 0x0, 0x360166,
+0x370162, 0x762412, 0x36e36f, 0x1006521,
+0x1800000, 0x1377fff, 0x1cb0116, 0x0,
+0x360d66, 0x370164, 0x762814, 0xd32020,
+0x1005ed, 0x362e05, 0xd40004, 0x11010f,
+0x36e30f, 0x0, 0x360500, 0x169ffff,
+0x1c21020, 0x110109, 0x36e30f, 0x0,
+0x361100, 0x169ffff, 0x1c21020, 0x110103,
+0xc80021, 0x100f02, 0xc80020, 0x373005,
+0x364e05, 0xd40004, 0x110147, 0xc82015,
+0x1020001, 0x1c038cd, 0x360225, 0xc80020,
+0x8e2002, 0x110109, 0x360625, 0x8e2002,
+0x118306, 0x363005, 0xd40004, 0x110103,
+0xc80021, 0x100f02, 0xc80020, 0x11b8000,
+0x8e0d, 0xc80020, 0x360025, 0x8e2002,
+0x110107, 0x360425, 0x8e2002, 0x110309,
+0x360825, 0x8e2002, 0x110306, 0x360a05,
+0xb00000, 0x118103, 0xc80020, 0x100f02,
+0xc80021, 0x375a05, 0xc80020, 0x11b0000,
+0xa82d, 0x8e2002, 0x11030b, 0x11b0000,
+0x8e2d, 0xd40024, 0x110105, 0x11b0000,
+0x9e2d, 0x8e2002, 0x118103, 0xc80020,
+0x100f02, 0xc80021, 0x11b8000, 0xa00d,
+0x365a05, 0xd40004, 0x11810c, 0x11b0000,
+0x8e0d, 0xd40004, 0x118108, 0x365205,
+0x11b0000, 0xb22d, 0x8e2040, 0x118103,
+0xc80020, 0x100f02, 0xc80021, 0x11b8000,
+0xa20d, 0x365a05, 0xd40004, 0x118105,
+0x11b0000, 0x8e0d, 0xd40004, 0x11011a,
+0x1581ffe, 0x58bb14, 0x36e96f, 0xc82215,
+0x36e52f, 0x36e70f, 0x1020001, 0x1c033d9,
+0x365005, 0xd40004, 0x11010b, 0x14b7fff,
+0x1c03003, 0xe80100, 0x14b7e00, 0x802003,
+0x36e52f, 0xc82815, 0x36e70f, 0x1020001,
+0x1c0346f, 0x11b0000, 0x8e0d, 0xd40004,
+0x118129, 0x365005, 0xd40004, 0x110126,
+0x11b0000, 0xa00d, 0xd40004, 0x110114,
+0x14b7fff, 0x1c13003, 0xe80122, 0x14b7e00,
+0x812003, 0x36e50f, 0xc80020, 0xd40024,
+0x11840b, 0xc80448, 0x14b7fff, 0x1c43003,
+0xe80188, 0x14b7e00, 0x842003, 0x13b7521,
+0x1b00601, 0xd32200, 0x1005f8, 0x1e0e164,
+0x0, 0x0, 0x181300, 0x11b8000,
+0xa80d, 0x11b0000, 0xac8d, 0x11b8000,
+0xaa8d, 0x11b8000, 0xa40d, 0x11b8000,
+0xa62d, 0x1581ffe, 0x58bb10, 0x1581ffe,
+0x1d8bb13, 0xc81220, 0x1580012, 0x158ab11,
+0x37eb0f, 0xd40014, 0x118418, 0x36eb0f,
+0x0, 0x360120, 0x169ffff, 0x1c21120,
+0x110109, 0x360103, 0x169ffff, 0x1c21020,
+0x110105, 0xc82811, 0x362805, 0x1020001,
+0x1c0b4b5, 0x36eb0f, 0x762613, 0x1377fff,
+0x1c8a191, 0x761209, 0x762010, 0x37eb0f,
+0xd32029, 0x1005ea, 0x11b0000, 0x150bd,
+0xc81220, 0xd400b4, 0x11842b, 0x1580003,
+0x118ab13, 0x1620002, 0x980300, 0xc80e20,
+0x7d0009, 0x1377fff, 0x1c80015, 0x1580015,
+0x588311, 0xd40014, 0x11841c, 0x36e30f,
+0xc80440, 0x360003, 0x7d1049, 0x1377fff,
+0x1c80110, 0x1377fff, 0x1c90010, 0x0,
+0x363d02, 0x169ffff, 0x1c21020, 0x110109,
+0x363122, 0x169ffff, 0x1c21120, 0x110105,
+0xc82811, 0x362805, 0x1020001, 0x1c0b4b5,
+0x762613, 0x1377fff, 0x1c8a191, 0x760e07,
+0xd32027, 0x1005e6, 0x761209, 0xd32269,
+0x1005d7, 0x11b0000, 0xa20d, 0xd40004,
+0x110126, 0x365a05, 0xd40004, 0x11811c,
+0x11b0000, 0x8e0d, 0xd40004, 0x118118,
+0x365005, 0xd40004, 0x110115, 0x14b7fff,
+0x1c13003, 0xe80122, 0x14b7e00, 0x812003,
+0x36e70f, 0xc80020, 0xd40024, 0x11840c,
+0x365225, 0x14b7fff, 0x1c43003, 0xe80188,
+0x14b7e00, 0x842003, 0x760000, 0x1007521,
+0x1800000, 0xd32200, 0x1005f6, 0x36e74f,
+0xc82c15, 0x36e92f, 0x36e30f, 0x1020001,
+0x1c03658, 0x100f2c, 0x1581ffe, 0x58bb13,
+0x1581ffe, 0x1d8bb11, 0xc81220, 0xd40014,
+0x118413, 0x360103, 0x169ffff, 0x1c21020,
+0x11010a, 0x360121, 0x169ffff, 0x1c21120,
+0x110106, 0xc82012, 0x362825, 0x365205,
+0x1020001, 0x1c08cc6, 0x762613, 0x762211,
+0x761209, 0xd32029, 0x1005ef, 0x365225,
+0xc80020, 0x11b8000, 0xb22d, 0x11b8000,
+0xac0d, 0x11b8000, 0xae0d, 0x11b8000,
+0xb00d, 0x11b8000, 0xb40d, 0x367005,
+0x377205, 0x11b0000, 0x1280d, 0x11b8000,
+0x1220d, 0x11b0000, 0xa00d, 0xd40004,
+0x110108, 0x36e74f, 0xc82c15, 0x36e52f,
+0x36e30f, 0x1020001, 0x1c0370a, 0x100f08,
+0x11b0000, 0xb20d, 0xc80420, 0x11b8000,
+0xb60d, 0x11b8000, 0xb82d, 0x365005,
+0xd40004, 0x110102, 0xc80620, 0x374c35,
+0x36f55f, 0x36f33f, 0x36f11f, 0x36fe77,
+0x36fc37, 0x36fa17, 0x36eebf, 0x36ec9f,
+0x1581ffe, 0x58bb17, 0x70000, 0xc81000,
+0xd40884, 0x110426, 0x1621c7a, 0x1589312,
+0x1377fff, 0x1c90412, 0x0, 0x360122,
+0x0, 0xc0f02, 0x0, 0xc81020,
+0xc81448, 0x100f0f, 0xc81020, 0xc8142d,
+0x100f0c, 0x1e0a110, 0xc2, 0x400000,
+0x185308, 0x100f07, 0x1639859, 0x184308,
+0x100f03, 0x1639858, 0x184308, 0xc81420,
+0x8e2202, 0x118208, 0x8e2242, 0x110306,
+0x1377fff, 0x1c80010, 0xc80020, 0x371420,
+0x100f04, 0xc80022, 0x100f02, 0xc80021,
+0x0, 0x70000, 0xd40904, 0x118105,
+0x361222, 0xc80020, 0x370020, 0x100f02,
+0xc80021, 0x0, 0x70000, 0x1580001,
+0xd8bb17, 0x0, 0x37ea17, 0x37f49f,
+0x37ec37, 0x37f6bf, 0x37ee77, 0x37f8ff,
+0x37f057, 0x37fb1f, 0x37fd3f, 0x37ff5f,
+0x37eb1f, 0x37ed6f, 0x37ef4f, 0x37f12f,
+0x37f30f, 0xc82011, 0x364a01, 0x14b7fff,
+0x1c1b000, 0xe80133, 0x14b7e00, 0x81a000,
+0x3646b0, 0x363470, 0xd40034, 0x110402,
+0xc80621, 0x36eb0f, 0x0, 0x364e00,
+0xd40004, 0x110110, 0x36f30f, 0xc80020,
+0x36f12f, 0xd40034, 0x11840b, 0x1e08000,
+0x2b, 0x1197998, 0x190302, 0x13b7521,
+0x1b00601, 0x1007525, 0x1800000, 0xd32060,
+0x1005fb, 0x36eb0f, 0xc81220, 0x363600,
+0xc80a00, 0xd40004, 0x118444, 0x36ef0f,
+0x1377fff, 0x1c80490, 0x0, 0x360120,
+0x169ffff, 0x1c21120, 0x110138, 0x36eb0f,
+0xc80424, 0xc82810, 0x1377fff, 0x1c80490,
+0x7d1049, 0xc82c14, 0x1377fff, 0x1cb0116,
+0x362804, 0x158000b, 0x198b316, 0x11b0008,
+0xbb4c, 0x363810, 0x36ed0f, 0xc82a10,
+0x1020001, 0x1c08d20, 0x36f11f, 0xc81e20,
+0x36f33f, 0xd40034, 0x118420, 0x1646170,
+0x31062b, 0x1020001, 0x1c0b425, 0xd40214,
+0x118105, 0x360021, 0x809602, 0x370001,
+0x100f0f, 0xd40414, 0x11050a, 0x8c0260,
+0x360023, 0x1e08000, 0x3f, 0x168f5c2,
+0x190308, 0x809002, 0x370003, 0x100f04,
+0x360023, 0x809602, 0x370003, 0x1377fff,
+0x1ca8395, 0x762211, 0x762613, 0x761e0f,
+0xd3206f, 0x1005e2, 0x13b6150, 0x309613,
+0xd32009, 0x1005be, 0x36f077, 0xc80a07,
+0x36ff5f, 0x36fd3f, 0x36fb1f, 0x36ee77,
+0x36ec37, 0x36ea17, 0x36f8ff, 0x36f6bf,
+0x36f49f, 0x1581ffe, 0x158bb17, 0x70000,
+0x900402, 0x881202, 0x118309, 0xc81048,
+0x1407fff, 0x1ce22a8, 0x8c0002, 0x8e2200,
+0x118303, 0xc80008, 0x100f01, 0x0,
+0x70000, 0x1580002, 0x118bb17, 0x0,
+0x37da17, 0x37f29f, 0x37dc37, 0x37f4bf,
+0x37de77, 0x37f6ff, 0x35e057, 0x37f91f,
+0x37fb3f, 0x37fd5f, 0x35fedf, 0xc82214,
+0x37da0f, 0x11b0000, 0x8e09, 0xd40004,
+0x11010d, 0x11b0000, 0xa609, 0x37dc0f,
+0x11b0000, 0xa409, 0x37de0f, 0x11b0000,
+0xa809, 0x37e00f, 0x11b0000, 0xaa09,
+0x37e20f, 0x365a01, 0xd40004, 0x110116,
+0x11b0000, 0xae29, 0x37d8b7, 0x164e1d2,
+0x1b0d605, 0xc81a0b, 0x36d8b7, 0x11b0000,
+0xb029, 0x360a01, 0x37e42f, 0x11b0000,
+0xac29, 0x37e62f, 0x366421, 0x37e82f,
+0xb00000, 0x110104, 0x11b0000, 0x12209,
+0x37ea0f, 0xc82610, 0xc82a12, 0xc80020,
+0x37ec0f, 0x36da0f, 0xd40004, 0x1010010,
+0x1003625, 0x11b0000, 0x8e09, 0x360025,
+0x360073, 0x37d8b7, 0x164e152, 0x1b05605,
+0xc80a0b, 0x36d8b7, 0xd40004, 0x1010000,
+0x403545, 0xc90005, 0x1020001, 0x1c08777,
+0x1646170, 0x301601, 0x1020001, 0x1c08777,
+0x1646110, 0x1b0f601, 0xc81201, 0x36dc0f,
+0x895801, 0x11020c, 0x1e0e0e0, 0x3e,
+0x1000000, 0x18430a, 0xc8040b, 0x11b0000,
+0x9609, 0x130f93, 0x36dc2f, 0x1407fff,
+0x1ce3b02, 0x36de0f, 0x895801, 0x11830b,
+0x1e09f40, 0xc1, 0x1800000, 0x185308,
+0xc8040b, 0x11b0000, 0x9809, 0x130f85,
+0x36de2f, 0x80f602, 0x890223, 0x1e08000,
+0x3f, 0x333334, 0x190308, 0x11b0000,
+0x9a29, 0x809009, 0x8e2040, 0x110202,
+0xc80002, 0x37dc3f, 0x8912e1, 0x37de9f,
+0x11b0000, 0x8c89, 0x8e2202, 0x110203,
+0xc81020, 0x100f0b, 0x11b0000, 0x8a89,
+0x8e2202, 0x110206, 0xc81421, 0x894048,
+0x11b8000, 0xa0a9, 0x100f02, 0xc81020,
+0x8e2001, 0x110203, 0x36e00f, 0x100f20,
+0x36e00f, 0x890808, 0x11830b, 0x1e0e088,
+0x3e, 0x99999a, 0x18430a, 0x11b0000,
+0x9209, 0xc80401, 0x1020001, 0x1c03462,
+0x100f11, 0x11b0000, 0x8c09, 0x8e2002,
+0x11830b, 0x1c7ffff, 0x1ffe000, 0x1841a5,
+0x30a332, 0x11b0000, 0x9009, 0xc80401,
+0x1020001, 0x1c03462, 0x100f03, 0x11b0000,
+0x9409, 0x36e02f, 0x808202, 0x1e09f8c,
+0x1999abe, 0x199999a, 0x183302, 0x37e00f,
+0x1639812, 0x184308, 0x11b0000, 0x9ca9,
+0x880240, 0x8c1040, 0x8c48c0, 0x37ee2f,
+0x885069, 0x36e22f, 0x891a48, 0x891043,
+0x118306, 0x11b0000, 0x9089, 0x36e2af,
+0x1407fff, 0x1ce328a, 0x37e23f, 0x1020001,
+0x1c0877e, 0x1646190, 0x301601, 0x1020001,
+0x1c0877e, 0x37f00f, 0x36ee0f, 0x1020001,
+0x1c0877e, 0x370015, 0xc81e00, 0x365a01,
+0xd40004, 0x1010000, 0x40360d, 0x11b0000,
+0x8e09, 0xd40004, 0x11010b, 0x36f00f,
+0x8c12e7, 0xc81000, 0x8c0005, 0x8c0200,
+0x809e20, 0x1020001, 0x1c08777, 0xc80200,
+0x100f0d, 0x363001, 0xd40004, 0x110106,
+0x8800a7, 0x1020001, 0x1c08777, 0xc80200,
+0x100f05, 0xc80007, 0x1020001, 0x1c08777,
+0xc80200, 0x367601, 0x8e2001, 0x110204,
+0x36e40f, 0xc9120d, 0x100f2e, 0x1e08000,
+0xb8, 0x1a36e2e, 0x190300, 0x894aa1,
+0x8e2009, 0x11830c, 0x1646190, 0x1300641,
+0x377201, 0x11b0000, 0x80a9, 0x367e81,
+0x366e01, 0x1020001, 0x1c03462, 0x80f20d,
+0x100f0c, 0x367201, 0x1447fff, 0x1c04400,
+0x377201, 0x367021, 0x8e2040, 0x110303,
+0xc9120d, 0x100f03, 0x366c01, 0x80f20d,
+0x890221, 0x36e42f, 0x895840, 0x110209,
+0xc8040b, 0x367ca1, 0x367a81, 0x366a01,
+0x1020001, 0x1c03462, 0x36e42f, 0x809602,
+0x367421, 0x8e2040, 0x110202, 0xc80002,
+0x37e40f, 0x37d8b7, 0x164e1d2, 0x1b0d613,
+0xc81a0b, 0x36d8b7, 0x366821, 0x8e2041,
+0x118307, 0x366081, 0x891041, 0x144ffff,
+0x1c44408, 0x8c1202, 0x100f02, 0xc80420,
+0x367881, 0x808089, 0x8e2001, 0x110203,
+0x36e60f, 0x100f19, 0x36e80f, 0x880002,
+0x36e62f, 0x890840, 0x11830a, 0x11b0000,
+0x88a9, 0xc80401, 0x11b0000, 0x8689,
+0x365e01, 0x1020001, 0x1c03462, 0x100f09,
+0xc80401, 0x11b0000, 0x84a9, 0x11b0000,
+0x8289, 0x365c01, 0x1020001, 0x1c03462,
+0x36e62f, 0x808202, 0x37e60f, 0x360821,
+0x1477fff, 0x1c24402, 0x118113, 0x1e87fff,
+0x1ffe000, 0x181190, 0x308349, 0x880200,
+0x8e2040, 0x11020c, 0x1e08000, 0x3f,
+0x107ae14, 0x190308, 0x3662a1, 0x365461,
+0x894248, 0x808c80, 0x8e2040, 0x118302,
+0xc80002, 0x360821, 0x1477fff, 0x1c22682,
+0x118104, 0x1639822, 0x181302, 0x880040,
+0x360a21, 0xc81020, 0x8e2202, 0x110129,
+0x360e21, 0x36eaaf, 0x891242, 0x8e2202,
+0x118304, 0x11b0000, 0x12489, 0x100f03,
+0x11b0000, 0x12689, 0x36ea6f, 0x11b0000,
+0x128a9, 0x1407fff, 0x1ce2286, 0x37ea2f,
+0x891242, 0x365881, 0x8f1008, 0x8e2202,
+0x118302, 0xc80408, 0x3654a1, 0xc81020,
+0x891242, 0x8e2202, 0x110202, 0xc80408,
+0x36e88f, 0x8e2200, 0x118104, 0x366281,
+0x8c1048, 0x100f04, 0x365681, 0x8c4008,
+0x8c1048, 0x880040, 0x100f02, 0xc80020,
+0x11b0000, 0x8e29, 0xd40024, 0x110106,
+0x8e2060, 0x118302, 0xc80003, 0x36ee2f,
+0x880040, 0x361021, 0x880040, 0x1020001,
+0x1c0877e, 0x762a15, 0x36ec2f, 0x760402,
+0x37ec2f, 0x1647507, 0x1b00605, 0x36da2f,
+0xd32040, 0x1008000, 0x14034af, 0x11b0000,
+0x8e09, 0xd40004, 0x11010d, 0x36de0f,
+0x11b8000, 0xa409, 0x36dc0f, 0x11b8000,
+0xa609, 0x36e00f, 0x11b8000, 0xa809,
+0x36e20f, 0x11b8000, 0xaa09, 0x365a01,
+0xd40004, 0x11010f, 0x11a8000, 0xaed9,
+0x36e40f, 0x11b8000, 0xb009, 0x36e60f,
+0x11b8000, 0xac09, 0x360a01, 0xb00000,
+0x110104, 0x36ea0f, 0x11b8000, 0x12209,
+0xc80e05, 0x34e057, 0x16461d3, 0x1b0560f,
+0x34fedf, 0xc81a0f, 0x36fd5f, 0x36fb3f,
+0x36f91f, 0x36de77, 0x36dc37, 0x36da17,
+0x36f6ff, 0x36f4bf, 0x36f29f, 0x1581ffd,
+0x118bb17, 0x70000, 0x1580001, 0x158bb17,
+0x0, 0x37e817, 0x37f29f, 0x37ea37,
+0x37f4bf, 0x37ec77, 0x37f6ff, 0x37ee57,
+0x37f91f, 0x37fb3f, 0x37fd5f, 0x37fedf,
+0xc82a10, 0xc82216, 0x37e94f, 0x364a01,
+0x14b7fff, 0x1c02000, 0x363431, 0x37ea0f,
+0x364601, 0x37ec0f, 0x36ea0f, 0xd40004,
+0x110303, 0xc80021, 0x37ea0f, 0xc80020,
+0x11b0000, 0xb2f9, 0x37ee0f, 0x36ea0f,
+0xd40004, 0x118362, 0x365001, 0xd40004,
+0x110108, 0x36e90f, 0x0, 0x144ffff,
+0x1c107e0, 0x762010, 0x37e90f, 0x100f03,
+0x11b0000, 0xb429, 0x363601, 0x36ec8f,
+0x8c3848, 0x771a00, 0x36ee2f, 0xc8000d,
+0x7d2862, 0xd40004, 0x118246, 0x1377fff,
+0x1c80691, 0x0, 0x363890, 0x1377fff,
+0x1c80495, 0x0, 0x360d00, 0x169ffff,
+0x1c21020, 0x110137, 0xd40294, 0x118105,
+0x11b0000, 0xa009, 0xd40004, 0x118131,
+0x1377fff, 0x1c80495, 0x360801, 0xc80248,
+0x360d00, 0x1377fff, 0x1c98290, 0x1477fff,
+0x1c22680, 0x118113, 0x11b0008, 0xed49,
+0xc82413, 0xc80024, 0x7a000d, 0x1376130,
+0x80011, 0x158000e, 0x1d88316, 0xc82013,
+0x1020001, 0x1c08d20, 0xd40494, 0x118205,
+0x1e08000, 0x3f, 0x168f5c2, 0x190301,
+0x1646132, 0x312627, 0x1646170, 0x1310627,
+0x8c002f, 0x1020001, 0x1c08723, 0x37f00f,
+0x360801, 0x1477fff, 0x1c22680, 0x118104,
+0x11b0000, 0x14e09, 0x8c0801, 0x11b0000,
+0x15009, 0xc81620, 0xd40004, 0x110411,
+0x771a0d, 0xc8000d, 0xd40004, 0x1002bc,
+0x36f0ff, 0x36ee0f, 0x760000, 0x37ee0f,
+0x36ea2f, 0xd32040, 0x1082a0, 0x11b8000,
+0xb479, 0x11b8000, 0xb2f9, 0x100f19,
+0xc80040, 0x7d000b, 0x1377fff, 0x1c80015,
+0x1377fff, 0x1c80490, 0x0, 0x363d00,
+0x16a0000, 0x188304, 0x110108, 0x1376132,
+0x90290, 0x1466170, 0x100008f, 0xc82012,
+0x1020001, 0x1c08723, 0x11b0000, 0x15009,
+0x76160b, 0xd3200b, 0x1085da, 0x100fe9,
+0x36ee77, 0xc80a07, 0x36feff, 0xc81a0f,
+0x36fd5f, 0x36fb3f, 0x36f91f, 0x36ec77,
+0x36ea37, 0x36e817, 0x36f6ff, 0x36f4bf,
+0x36f29f, 0x1581ffe, 0xd8bb17, 0x70000,
+0x1580001, 0x58bb17, 0x0, 0x37f017,
+0x37f29f, 0x37f237, 0x37f4bf, 0x37f477,
+0x37f6ff, 0x37f657, 0x37f91f, 0x37fb3f,
+0x37fd5f, 0x35fedf, 0xc82610, 0xc82a12,
+0xc82216, 0x364a06, 0x14b7fff, 0x1c02000,
+0x363411, 0xc80a00, 0x364601, 0x37f00f,
+0xc80005, 0xd40004, 0x110302, 0xc80a21,
+0x365001, 0xd40004, 0x110121, 0x11b0000,
+0xa209, 0xd40004, 0x110110, 0x1646150,
+0x131062b, 0xc82414, 0xc80020, 0xd40024,
+0x118317, 0x13b6525, 0x1b00601, 0x1467fff,
+0x1c10160, 0x1647521, 0x1b0260b, 0xd32040,
+0x1082f9, 0x100f0e, 0x1646150, 0x131062b,
+0xc80020, 0xd40024, 0x118309, 0x365221,
+0x760000, 0x1467fff, 0x1c10160, 0x1647521,
+0x1b0260b, 0xd32040, 0x1082f9, 0x360801,
+0x11b0000, 0xb679, 0x1477fff, 0x1c22680,
+0x11810a, 0x361123, 0x158000f, 0x1d88b16,
+0xc82012, 0x362801, 0x11b0008, 0xed49,
+0x1020001, 0x1c08d20, 0xc80005, 0xc81e20,
+0xd40004, 0x118347, 0x365001, 0xd40004,
+0x110105, 0x144ffff, 0x1c003ea, 0x762a15,
+0x100f03, 0x11b0000, 0xb809, 0x361103,
+0x7d102f, 0x36f08f, 0x1466170, 0x18008,
+0x1376112, 0x90110, 0x1646130, 0x1310625,
+0x1020001, 0x1c08723, 0x37eeb7, 0x164e1d2,
+0x1b0d601, 0xc81a0b, 0x36eeb7, 0x11b0000,
+0x15009, 0xd40004, 0x110125, 0x364103,
+0x169ffff, 0x1c21020, 0x110121, 0x360821,
+0xc80048, 0x1477fff, 0x1c22682, 0x118103,
+0x11b0000, 0x14e09, 0x11b0000, 0x15029,
+0xc81220, 0xd40024, 0x118415, 0x8c3807,
+0x7d582f, 0x1646112, 0x300681, 0xc80403,
+0x7d0009, 0x1376170, 0x80013, 0x0,
+0x364100, 0x1377fff, 0x1c90590, 0xc82012,
+0x1020001, 0x1c08723, 0x11b0000, 0x15009,
+0x761209, 0xd32009, 0x1005ef, 0x13b6150,
+0x30f61f, 0xc90e0d, 0xd3200f, 0x1082bb,
+0x11b8000, 0xb839, 0x11b8000, 0xb679,
+0x36f677, 0x16461d3, 0x1b0560f, 0x34fedf,
+0xc81a0f, 0x36fd5f, 0x36fb3f, 0x36f91f,
+0x36f477, 0x36f237, 0x36f017, 0x36f6ff,
+0x36f4bf, 0x36f29f, 0x1581ffe, 0x1d8bb17,
+0x70000, 0x1580000, 0x98bb17, 0x0,
+0x37fc17, 0x37fc9f, 0x37fe37, 0x362ca0,
+0x365420, 0x366480, 0xd400a4, 0x11810e,
+0x1621c74, 0xd89312, 0x3608a0, 0xb000aa,
+0x110103, 0xc80048, 0x100f0c, 0x1e08000,
+0x3f, 0xb851ec, 0x19030a, 0x3762a0,
+0x100f06, 0x1e09fac, 0x1999a00, 0x1c764,
+0x185312, 0x3762a0, 0x3600a2, 0x8e2240,
+0x1010010, 0x80385c, 0x3618a2, 0x8e2240,
+0x1010000, 0xc0385c, 0xc82812, 0x3606a2,
+0xc81c20, 0x8e2240, 0x11830a, 0xc81423,
+0x761c0e, 0x7a524e, 0x1377fff, 0x1ca0512,
+0x0, 0x3606a4, 0x8e2240, 0x1003f8,
+0xc81423, 0x760c0e, 0x7a5246, 0x1377fff,
+0x1cb0512, 0x0, 0x3600a6, 0x8e2240,
+0x118103, 0xc80048, 0x100f07, 0x360014,
+0x89502a, 0x890020, 0xc9180a, 0x1020001,
+0x1c08e17, 0xc80623, 0xc81223, 0xc80248,
+0x7a3066, 0x7a722e, 0x895001, 0x1377fff,
+0x1ca0312, 0x1377fff, 0x1c90712, 0x360264,
+0x3602e2, 0x8c3006, 0x1407fff, 0x1ce6ae6,
+0x375860, 0x360464, 0x8c0006, 0x3604e2,
+0x8094e0, 0x375400, 0x360a00, 0xb00000,
+0x110105, 0x365400, 0x8e2020, 0x110202,
+0x375410, 0x365400, 0xc80c48, 0x164e160,
+0x30c601, 0x1020001, 0x1c08e17, 0x375600,
+0x365800, 0x164e160, 0x30c601, 0x1020001,
+0x1c08e17, 0x376600, 0x362c00, 0xd40004,
+0x118107, 0x362a00, 0x1639852, 0x18530a,
+0x880240, 0x377600, 0x100f06, 0x163984e,
+0x18530a, 0x362a00, 0x880240, 0x377600,
+0x365800, 0x362aa0, 0x880240, 0x376800,
+0x365400, 0xb00000, 0x118104, 0xc80048,
+0x376000, 0x100f06, 0x3658a0, 0x88000a,
+0x366660, 0x8c00c0, 0x376000, 0x366200,
+0x3654a0, 0x8c0240, 0x376400, 0x365a00,
+0xd40004, 0x110115, 0xb00022, 0x118313,
+0x3654a0, 0x11b0000, 0xac08, 0x89304a,
+0x8e2200, 0x118104, 0x366200, 0x8c00c0,
+0x100f05, 0xc91802, 0x1020001, 0x1c08e17,
+0x8c00c0, 0x11b0000, 0xac28, 0x880002,
+0x11b8000, 0xac08, 0x36fe37, 0x36fc9f,
+0x36fc17, 0x1581fff, 0x198bb17, 0x70000,
+0xc80020, 0x360220, 0x8e2002, 0x110110,
+0x360600, 0x1e08000, 0x3e, 0x1333334,
+0x190302, 0x8e2040, 0x110206, 0xc91802,
+0x1020001, 0x1c08e17, 0x371200, 0x100f05,
+0xc80048, 0x371200, 0x100f02, 0x371200,
+0x0, 0x70000, 0x762e17, 0x0,
+0x37ff1f, 0xc82210, 0xb00000, 0x11824d,
+0x1477fff, 0x1c24400, 0x11034a, 0x1621c78,
+0x588310, 0xc81020, 0x1377fff, 0x1c92210,
+0xc82012, 0x360022, 0x8e2040, 0x118307,
+0x1377fff, 0x1c82210, 0x761008, 0x360020,
+0x8e2040, 0x1003fb, 0x1621c78, 0x588310,
+0xc81424, 0x760408, 0x7a5242, 0x1377fff,
+0x1c90510, 0x0, 0x3600a2, 0x8e2240,
+0x118103, 0xc80048, 0x100f0c, 0xc80c24,
+0x7a30c8, 0x1377fff, 0x1c80310, 0x0,
+0x360060, 0x8950ca, 0x8900c0, 0xc9180a,
+0x1020001, 0x1c08e17, 0x1621c78, 0x588310,
+0xc81424, 0xc80c24, 0xc81c48, 0x7a5242,
+0x7a40c8, 0x89100e, 0x1377fff, 0x1c90510,
+0x1377fff, 0x1c80410, 0x3602a2, 0x8c500a,
+0x360280, 0x80c48a, 0x11b8000, 0x8a89,
+0x360482, 0x3604a0, 0x8c4008, 0x80c4a8,
+0x11b8000, 0x8c89, 0x360682, 0x3606a0,
+0x8c0008, 0x8084a0, 0x11b8000, 0x9c09,
+0x1020001, 0x1c0877e, 0x11b8000, 0x9e09,
+0x36ff1f, 0x772e17, 0x70000, 0x100751f,
+0x1800000, 0x37ff1f, 0xc82210, 0x361400,
+0xc80220, 0x360020, 0x8e2002, 0x110102,
+0x370000, 0xc82011, 0x361601, 0x762010,
+0x0, 0x360020, 0x8e2002, 0x110104,
+0x370000, 0xc82011, 0x130f82, 0x1377fff,
+0x1c82111, 0x361801, 0x360020, 0x8e2002,
+0x110103, 0x370000, 0xc80221, 0x1377fff,
+0x1c82211, 0x361c01, 0x360020, 0x8e2002,
+0x11010a, 0x1620003, 0x181302, 0xc80221,
+0x370000, 0x158000e, 0x1d88b10, 0xc80020,
+0x1020001, 0x1c03c73, 0x1377fff, 0x1c82191,
+0x361a01, 0x360020, 0x8e2002, 0x110108,
+0x370000, 0xc82011, 0x1020001, 0x1c03878,
+0xc82011, 0x1020001, 0x1c03862, 0x1377fff,
+0x1c84011, 0x362001, 0x360020, 0x8e2002,
+0x11010b, 0x370000, 0x1e08000, 0x1c2,
+0x12c0000, 0x180b02, 0x890002, 0x362a81,
+0x880200, 0x11b8000, 0x12809, 0x1377fff,
+0x1c84091, 0x361e01, 0x360020, 0x8e2002,
+0x11010c, 0x370000, 0xc80221, 0x11b0000,
+0x12829, 0x11b8000, 0x12229, 0xb00000,
+0x118104, 0x1639859, 0x180300, 0x372201,
+0x1377fff, 0x1c83791, 0x362201, 0x360020,
+0x8e2002, 0x110102, 0x370000, 0x1377fff,
+0x1c82291, 0x362401, 0x360020, 0x8e2002,
+0x110105, 0x370000, 0x1020001, 0x1c0877e,
+0x375201, 0xd40014, 0x110105, 0xc82011,
+0x360401, 0x1020001, 0x1c037b7, 0x36ff1f,
+0x36fe17, 0x772e17, 0x70000, 0x1580001,
+0x58bb17, 0x0, 0x37fb1f, 0x37fd3f,
+0x37ff5f, 0xc82210, 0xc82612, 0x37ef4f,
+0x15801c5, 0x1188b14, 0xc82016, 0x15801c4,
+0x1988b12, 0x1e09f95, 0xaaaa00, 0x0,
+0x184300, 0xc80448, 0x37f14f, 0x1377fff,
+0x1ca2190, 0x37f34f, 0x1377fff, 0x1ca4011,
+0x37f54f, 0x15801c7, 0x1988b14, 0x37f74f,
+0x1580002, 0x1588314, 0x37f94f, 0xc82c12,
+0xc82813, 0x1c0603, 0x10065a9, 0x1800000,
+0x10075ad, 0x1800000, 0x36ef2f, 0x11b8008,
+0x1caf29, 0x3600a0, 0x11b8000, 0x1c82a9,
+0x36f12f, 0x36f34f, 0xc82a12, 0xc82c14,
+0x1c1203, 0x10065ad, 0x1800000, 0x10075ab,
+0x1800000, 0x36f72f, 0x36f94f, 0xc82a12,
+0xc82c14, 0x1c0303, 0x10065ad, 0x1800000,
+0x10075ab, 0x1800000, 0x370c01, 0x370e21,
+0x371201, 0x371081, 0x360003, 0x14bffff,
+0x1c02000, 0x371401, 0x360203, 0x14bffff,
+0x1c02000, 0x371601, 0x36f52f, 0xc82c11,
+0xc82812, 0x1c0603, 0x1006509, 0x1800000,
+0x100750d, 0x1800000, 0x11b0000, 0x1c8209,
+0xd40104, 0x118111, 0x1620010, 0x180300,
+0x11b8000, 0x1c8409, 0x360320, 0x11b8008,
+0x1c5b29, 0x360520, 0x11b8008, 0x1c5929,
+0x360500, 0x15800f0, 0x188310, 0x11b8008,
+0x1c8109, 0x100f10, 0x1620040, 0x180300,
+0x11b8000, 0x1c8409, 0x360320, 0x11b8008,
+0x1c5b29, 0x360520, 0x11b8008, 0x1c5929,
+0x360500, 0x158053f, 0x988310, 0x11b8008,
+0x1c8109, 0x1e08000, 0x3f, 0x333334,
+0x190302, 0x360401, 0x8c0040, 0x11b8000,
+0x1cac09, 0x360623, 0x11b0000, 0x1c8409,
+0x1020001, 0x1c08de0, 0x11b8000, 0x1c8809,
+0x15801c9, 0x1188b10, 0xc80421, 0xc80040,
+0x11b8000, 0x1c8629, 0x1620008, 0x181302,
+0x10c8000, 0x10039db, 0x11b0008, 0x1caf29,
+0x7d1040, 0x1377fff, 0x1c90112, 0x1581fd0,
+0x189312, 0x370120, 0x762010, 0x1620008,
+0x181302, 0x760000, 0x7d1040, 0x11b0008,
+0x1caf29, 0x760000, 0x1377fff, 0x1c90112,
+0x1581fd0, 0x189312, 0x370120, 0x762010,
+0xc82011, 0x1020001, 0x1c03b96, 0x15801c8,
+0x1988b12, 0x11b0000, 0x1c8209, 0x15801c5,
+0x1188b16, 0x11b8000, 0x1c5c09, 0x11b8008,
+0x1c6129, 0x36ef0f, 0xc82413, 0x1580028,
+0x188314, 0x1580001, 0x1188b10, 0x1020001,
+0x1c0a54c, 0x15801c8, 0x1988b12, 0x11b0000,
+0x1c8209, 0x15801c7, 0x1988b16, 0x11b8000,
+0x1c7c09, 0x11b8008, 0x1c7f29, 0x36ef0f,
+0xc82413, 0x1580028, 0x188314, 0x15800c9,
+0x188b10, 0x1020001, 0x1c09329, 0xc82011,
+0x360001, 0x1020001, 0x1c03b03, 0xc82011,
+0x11b0000, 0x1cac09, 0x1020001, 0x1c03b1b,
+0x36ff5f, 0x36fd3f, 0x36fb1f, 0x1581ffe,
+0x1d8bb17, 0x70000, 0x1580004, 0x1d8bb17,
+0x0, 0x37b31f, 0x37b53f, 0x37b75f,
+0xc82210, 0xc82612, 0x1581ffb, 0x98bb10,
+0xc82810, 0xc82413, 0x1c2603, 0x1006505,
+0x1800000, 0x1007509, 0x1800000, 0x11b0000,
+0x1c8609, 0x770000, 0x11b8000, 0x1c8609,
+0x11810b, 0xc82011, 0x11b0000, 0x1c8809,
+0x11b8000, 0x1c8609, 0x1020001, 0x1c03ba7,
+0xc82011, 0x1020001, 0x1c03b6f, 0x15801c8,
+0x1988b10, 0x1377fff, 0x1c94013, 0x10c8000,
+0x1803a46, 0x360142, 0x762412, 0x370140,
+0x762010, 0x360201, 0xb00000, 0x11814e,
+0x11b0000, 0x1c8209, 0xd40004, 0x118115,
+0x11b0000, 0x1ca209, 0xd40004, 0x110111,
+0x15801c9, 0x1588b12, 0x15801c9, 0x988b14,
+0x15801c9, 0x1988b16, 0x360152, 0x360104,
+0x370154, 0x15801c9, 0xd88b14, 0x370102,
+0x360126, 0x360104, 0x370124, 0x370106,
+0x1580001, 0x1188b10, 0xc82413, 0x1020001,
+0x1c0a6c1, 0x11b0000, 0x1c8209, 0xd40004,
+0x118115, 0x11b0000, 0x1ca209, 0xd40004,
+0x110111, 0x15801c9, 0x1588b12, 0x15801c9,
+0x988b10, 0x15801c9, 0x1988b14, 0x360132,
+0x360160, 0x370130, 0x15801c9, 0xd88b10,
+0x370162, 0x360164, 0x360120, 0x370160,
+0x370124, 0x11b0000, 0x1c5629, 0xc80020,
+0xd40024, 0x118414, 0x1581ffb, 0x98bb10,
+0xc80440, 0x7d1040, 0x760000, 0x1377fff,
+0x1c80110, 0x1580003, 0x1988312, 0x1580003,
+0x188310, 0x360142, 0x370140, 0x360322,
+0x370320, 0x11b0000, 0x1c5629, 0xd32040,
+0x1005ee, 0x1581ffb, 0x98bb12, 0x15800c9,
+0x188b10, 0x1020001, 0x1c09390, 0x11b0000,
+0x1c8a09, 0xd40004, 0x110113, 0x15800c9,
+0x188b12, 0x1581ffb, 0x58bb10, 0xc80041,
+0x1020001, 0x1c0941a, 0xd40004, 0x118107,
+0x1580001, 0x1188b10, 0x36b227, 0xc80023,
+0x1020001, 0x1c0a881, 0xc80020, 0x11b8000,
+0x1c8a09, 0x36b75f, 0x36b53f, 0x36b31f,
+0x1581ffb, 0x58bb17, 0x70000, 0xc81000,
+0xd40384, 0x11840d, 0xd40484, 0x110107,
+0xd40584, 0x118103, 0xc81020, 0x100f04,
+0xc80021, 0x100f11, 0xc81048, 0x14bffff,
+0x1c521a1, 0x100f03, 0xc81020, 0xc81448,
+0x8e2202, 0x118208, 0x8e2242, 0x110306,
+0x1377fff, 0x1c80010, 0xc80020, 0x370c20,
+0x100f02, 0xc80022, 0x0, 0x70000,
+0xd40004, 0x110120, 0xd40604, 0x110118,
+0xd40704, 0x110110, 0xd40804, 0x11810c,
+0x11b0000, 0x1caa0a, 0xd40004, 0x110103,
+0xc80020, 0x100f02, 0xc80021, 0x14bffff,
+0x1c02000, 0x370000, 0x100f11, 0xc80021,
+0x100f10, 0xc8003f, 0x1580001, 0x1189312,
+0x1020001, 0x1c0a89e, 0x100f0a, 0xc80040,
+0x1580001, 0x1189312, 0x1020001, 0x1c0a89e,
+0x100f04, 0x360002, 0x370000, 0xc80020,
+0x0, 0x70000, 0xc80020, 0xc80420,
+0x370000, 0x370200, 0x370400, 0x370620,
+0x70000, 0x1580000, 0x98bb17, 0x0,
+0x37fe17, 0x37ff1f, 0x1646100, 0xb11621,
+0x1580001, 0x1188b10, 0xc80401, 0xc80020,
+0x1020001, 0x1c0a881, 0x15800c9, 0x188b10,
+0x1646110, 0x1300641, 0x1020001, 0x1c093fd,
+0x36ff1f, 0x36fe17, 0x1581fff, 0x198bb17,
+0x70000, 0x1580000, 0x98bb17, 0x0,
+0x37fe17, 0x37ff1f, 0x1646100, 0xb11621,
+0x1580001, 0x1188b10, 0xc80401, 0xc80021,
+0x1020001, 0x1c0a881, 0x15800c9, 0x188b10,
+0x1646110, 0x1300645, 0x1020001, 0x1c093fd,
+0xc80021, 0x11b8000, 0x1c8a09, 0x36ff1f,
+0x36fe17, 0x1581fff, 0x198bb17, 0x70000,
+0x1580000, 0x98bb17, 0x0, 0x37fe17,
+0x37ff1f, 0x1646120, 0xb11621, 0x8e2020,
+0x11012c, 0x360621, 0xd40024, 0x118102,
+0x370001, 0x370211, 0x14bffff, 0x1c0200a,
+0x1c47f00, 0x208000, 0x60, 0x205300,
+0x360422, 0xc91800, 0x14bffff, 0x1c02002,
+0x1c47f00, 0x208000, 0x60, 0x205300,
+0x8c0200, 0x1020001, 0x1c08e17, 0x1020001,
+0x1c02c39, 0x14b6100, 0x1003000, 0xe80100,
+0x14b7e00, 0x802002, 0x370601, 0x360621,
+0x144ffff, 0x1c06101, 0x14bffff, 0x1c12002,
+0x1c47f00, 0x208000, 0x60, 0xa05302,
+0xc91802, 0x1020001, 0x1c08e17, 0x370401,
+0x36ff1f, 0x36fe17, 0x1581fff, 0x198bb17,
+0x70000, 0x1580000, 0x98bb17, 0x0,
+0x37fd1f, 0x37ff3f, 0xc82610, 0x15801ca,
+0x989b11, 0x0, 0x360601, 0xd40004,
+0x110117, 0x770000, 0x370601, 0x11810e,
+0x360023, 0xc80020, 0x8e2002, 0x118103,
+0xc82013, 0x130f80, 0xc82013, 0x360201,
+0x130f95, 0xc82011, 0x1020001, 0x1c03afc,
+0x100f07, 0xc82013, 0x360401, 0x1447fff,
+0x1c00062, 0x370001, 0x130f8b, 0x36ff3f,
+0x36fd1f, 0x1581fff, 0x198bb17, 0x70000,
+0x360a00, 0xd00449, 0x8e2040, 0x118309,
+0x1638826, 0x181302, 0x8e2040, 0x110205,
+0xc80020, 0x11b8000, 0x1ca208, 0x100f04,
+0xc80021, 0x11b8000, 0x1ca208, 0x0,
+0x70000, 0x1580000, 0xd8bb17, 0x0,
+0x37fc17, 0x37fd1f, 0x37fe37, 0xc82210,
+0x360c30, 0x360001, 0x8e2060, 0x110123,
+0xc80220, 0x8e2023, 0x11810e, 0x15801c4,
+0x1988b12, 0x1646110, 0x130868f, 0x11b0000,
+0x1c84a9, 0x15801ca, 0x988b10, 0x11b0000,
+0x1cac09, 0x1020001, 0x1c03b36, 0x100f12,
+0xc82011, 0xc80048, 0x1020001, 0x1c03b03,
+0xc80001, 0x11b0000, 0x1c84a9, 0x14bffff,
+0x1c43023, 0x15801c4, 0x1988b12, 0x11b0000,
+0x1cac29, 0x15801ca, 0x988b10, 0x1020001,
+0x1c03b36, 0x370031, 0x360201, 0x360e11,
+0x8e2020, 0x110135, 0x1477fff, 0x1c24401,
+0x118128, 0x11b0008, 0x1caf49, 0x15801c5,
+0x1188b16, 0x15801c4, 0x1988b12, 0x1580001,
+0x1188b10, 0x1580028, 0x18a314, 0x1020001,
+0x1c0a54c, 0x11b0008, 0x1caf49, 0x15801c7,
+0x1988b16, 0x15801c4, 0x1988b12, 0x1580028,
+0x18a314, 0x15800c9, 0x188b10, 0x1020001,
+0x1c09329, 0xc82011, 0x360001, 0x1020001,
+0x1c03b03, 0xc82011, 0x11b0000, 0x1cac09,
+0x1020001, 0x1c03b1b, 0x1580001, 0x1188b10,
+0x360621, 0xc80022, 0x1020001, 0x1c0a881,
+0xc82411, 0x15800c9, 0x188b10, 0xc80021,
+0x762412, 0x0, 0x370012, 0x360022,
+0x1020001, 0x1c093fd, 0x1377fff, 0x1c82111,
+0x361001, 0x360020, 0x8e2002, 0x11011b,
+0x370000, 0x1e08000, 0x3f, 0x333334,
+0x190302, 0x360081, 0x8c0840, 0xb00088,
+0x11010d, 0xc80401, 0x11b0000, 0x1cac09,
+0xc81048, 0x15801c4, 0x1988b12, 0x15801ca,
+0x988b10, 0x11b0000, 0x1c84a9, 0x1020001,
+0x1c03b36, 0x11b8000, 0x1cac19, 0xc80021,
+0x11b8000, 0x1c8a09, 0x1377fff, 0x1c92191,
+0x361201, 0x360022, 0x8e2002, 0x110108,
+0x370002, 0x1580001, 0x1188b10, 0xc80022,
+0x360022, 0x1020001, 0x1c0a881, 0x1377fff,
+0x1c82211, 0x361411, 0x360000, 0x8e2020,
+0x110112, 0x370010, 0x1580001, 0x1188b10,
+0x14b7fff, 0x1c12001, 0xc80024, 0x11b8000,
+0x1c4c29, 0xc80401, 0x1020001, 0x1c0a881,
+0x15800c9, 0x188b10, 0xc80401, 0xc80023,
+0x1020001, 0x1c093fd, 0x1377fff, 0x1c84091,
+0x361611, 0x360000, 0x8e2020, 0x110118,
+0x370010, 0xc82011, 0x14b7fff, 0x1c02001,
+0x11b8000, 0x1c4e09, 0x1020001, 0x1c03b96,
+0x1580001, 0x1188b10, 0xc80401, 0xc80041,
+0x1020001, 0x1c0a881, 0x15800c9, 0x188b10,
+0x1646110, 0x1300649, 0x1020001, 0x1c093fd,
+0xc80021, 0x11b8000, 0x1c8a09, 0x36fd1f,
+0x36fe37, 0x36fc17, 0x1581fff, 0x158bb17,
+0x70000, 0x1d80000, 0xff, 0x1fe0000,
+0xa4102, 0x110208, 0xb00022, 0x110109,
+0x10d0000, 0x803c7c, 0x1007509, 0x1800000,
+0x70000, 0x13bf509, 0x1b02605, 0x1081fe,
+0x0, 0x70000, 0x1d80000, 0x0,
+0x0, 0xa4000, 0x110108, 0x10d0000,
+0x3c8d, 0x1006505, 0x1800000, 0x1007509,
+0x1800000, 0x70000, 0x0, 0x70000,
+0x1580000, 0x98bb17, 0x0, 0x37fd1f,
+0x37ff3f, 0xc82614, 0xc82210, 0xc82812,
+0x158000c, 0x188b12, 0x158000c, 0x1988b10,
+0x11b8008, 0xdd39, 0x360604, 0x11b8000,
+0xd809, 0x360006, 0x11b8000, 0xda09,
+0x1020001, 0x1c09cd0, 0x11b0000, 0xc609,
+0x11b8000, 0xd209, 0x36ff3f, 0x36fd1f,
+0x1581fff, 0x198bb17, 0x70000, 0xc82812,
+0x1580003, 0x18a316, 0x1377fff, 0x1c94014,
+0xc80020, 0x130f03, 0x0, 0x70000,
+0x1580001, 0x158bb17, 0x0, 0x37e617,
+0x37f69f, 0x37e837, 0x37f8bf, 0x37fb1f,
+0x37fd3f, 0x37ff5f, 0x37e70f, 0xc80200,
+0xd40014, 0x118107, 0x36e70f, 0x0,
+0x11b0000, 0xd808, 0xe90103, 0x100f06,
+0x36e70f, 0x0, 0x11b0000, 0xd808,
+0xe90203, 0xc81640, 0x37e92f, 0xc81220,
+0x37eb6f, 0x37ed4f, 0x36e70f, 0x0,
+0x11b0008, 0xdd08, 0x37ef0f, 0x36e70f,
+0x158000c, 0x1988310, 0x37f10f, 0x36f10f,
+0x0, 0x360000, 0xd40004, 0x110138,
+0x36e90f, 0x0, 0x360100, 0x16a0000,
+0x188304, 0x110132, 0x36eb0f, 0x0,
+0x360100, 0x37f30f, 0x16a0000, 0x188304,
+0x11810c, 0x36ef0f, 0xc80020, 0x37f30f,
+0x36e70f, 0x0, 0x11b0000, 0xd828,
+0x36ef0f, 0xe90122, 0x1020001, 0x1c03c73,
+0x1621cbc, 0x588310, 0xc81025, 0x1620006,
+0x181302, 0xc80022, 0xc82610, 0x36ed0f,
+0x7d1041, 0x7d4209, 0x360100, 0x37f50f,
+0x1621cbd, 0xd88310, 0xc82210, 0x36e70f,
+0x1376130, 0x1080110, 0x36e92f, 0x1377fff,
+0x1ca8410, 0x36ef6f, 0x360122, 0x1580006,
+0x18ab10, 0x37ff07, 0x36f34f, 0xc82012,
+0x36f52f, 0x1020001, 0x1c0bb51, 0x36e90f,
+0x77160b, 0x761209, 0x762010, 0x37e90f,
+0x36f10f, 0x762010, 0x37f10f, 0x36eb0f,
+0x762010, 0x37eb0f, 0x36ed0f, 0x762010,
+0x37ed0f, 0xd400b4, 0x1004b5, 0x36ff5f,
+0x36fd3f, 0x36fb1f, 0x36e837, 0x36e617,
+0x36f8bf, 0x36f69f, 0x1581ffe, 0xd8bb17,
+0x70000, 0x1580000, 0x98bb17, 0x0,
+0x37fe17, 0x37ff1f, 0xc82210, 0xc80021,
+0x370a01, 0x360402, 0x16a07d0, 0x180304,
+0x110124, 0x16a0bb8, 0x180304, 0x11011d,
+0x16a0fa0, 0x180304, 0x110113, 0x1ea0000,
+0x0, 0x17700, 0x582300, 0x11010a,
+0x1ea0000, 0x0, 0x2ee00, 0x582300,
+0x118119, 0x1621cab, 0x588310, 0x371501,
+0x100f08, 0x1621cab, 0x1988310, 0x371501,
+0x100f04, 0x1621cac, 0xd88310, 0x371501,
+0x1620008, 0x180300, 0x370401, 0x100f0a,
+0x1621cad, 0x188310, 0x371501, 0x100f04,
+0x1621cad, 0x1588310, 0x371501, 0xc80027,
+0x370401, 0x360401, 0xc81048, 0x14bffff,
+0x1c02000, 0x1c47f00, 0x208000, 0x60,
+0x205300, 0x164e180, 0x30c601, 0x1020001,
+0x1c08e17, 0x370601, 0x1639859, 0x180b01,
+0x360402, 0x360621, 0x14bffff, 0x1c02000,
+0x1c47f00, 0x208000, 0x60, 0x205300,
+0x8c0040, 0x370801, 0x360602, 0x370201,
+0x360621, 0x14bffff, 0x1c02000, 0x1c47f00,
+0x208000, 0x60, 0x205300, 0x8c0040,
+0x14b6100, 0x1003000, 0xe80100, 0x14b7e00,
+0x802002, 0x370c01, 0xc80008, 0x370e11,
+0x360821, 0x1020001, 0x1c08765, 0x371001,
+0x1638859, 0x180300, 0x360821, 0x1020001,
+0x1c08765, 0x371201, 0x370011, 0x36ff1f,
+0x36fe17, 0x1581fff, 0x198bb17, 0x70000,
+0x1580000, 0x98bb17, 0x0, 0x37fe17,
+0x37ff1f, 0xc82210, 0xc82c11, 0x1377fff,
+0x1ca2311, 0x360122, 0x1377fff, 0x1c83711,
+0x360c11, 0x130f30, 0x1376110, 0x83711,
+0xc82411, 0x130f5f, 0x360c01, 0x1639859,
+0x181302, 0x1377fff, 0x1c80011, 0x1377fff,
+0x1c83710, 0x0, 0x36fe00, 0x8e2040,
+0x110202, 0xc80002, 0x370001, 0x36ff1f,
+0x36fe17, 0x1581fff, 0x198bb17, 0x70000,
+0xd40004, 0x118105, 0x360022, 0xc80020,
+0x370020, 0x100f02, 0xc80021, 0x0,
+0x70000, 0x100751f, 0x1800000, 0x37ff1f,
+0x1646100, 0xb11621, 0xc80001, 0x1020001,
+0x1c08d20, 0x1646110, 0x310623, 0x1020001,
+0x1c0b425, 0x36ff1f, 0x36fe17, 0x772e17,
+0x70000, 0x1580000, 0x198bb17, 0x0,
+0x37f417, 0x37f69f, 0x37f637, 0x37f8bf,
+0x37f877, 0x37fb1f, 0x37fd3f, 0x37ff5f,
+0xc82210, 0xc82612, 0xc82a16, 0x37f54f,
+0x360c95, 0xc80620, 0x360415, 0x3606b5,
+0xd40094, 0x118414, 0x1e08000, 0x2b,
+0x1197998, 0x190307, 0x361545, 0x36f50f,
+0x1646110, 0x312627, 0x1580001, 0xd8ab16,
+0x130fd1, 0x1377fff, 0x1c98093, 0x809607,
+0x760603, 0x1007503, 0x1800000, 0xd32223,
+0x1005f2, 0x36ff5f, 0x36fd3f, 0x36fb1f,
+0x36f877, 0x36f637, 0x36f417, 0x36f8bf,
+0x36f69f, 0x1581fff, 0x98bb17, 0x70000,
+0x1580000, 0x158bb17, 0x0, 0x37f817,
+0x37f89f, 0x37fa37, 0x37fabf, 0x37fc77,
+0x37fd1f, 0x37ff3f, 0x1646100, 0xb13621,
+0xc82212, 0x3610b2, 0xc80620, 0x361271,
+0x360e91, 0xd40014, 0x11840f, 0x360003,
+0x1020001, 0x1c08777, 0x890220, 0x118303,
+0xc8040b, 0x100f02, 0xc80407, 0x808029,
+0x760603, 0x1647507, 0x1b09601, 0xd32023,
+0x1005f3, 0x370e91, 0x36ff3f, 0x36fd1f,
+0x36fc77, 0x36fa37, 0x36f817, 0x36fabf,
+0x36f89f, 0x1581fff, 0xd8bb17, 0x70000,
+0xd41004, 0x118203, 0xc82020, 0x100f05,
+0x1621c7b, 0x1988310, 0x1377fff, 0x1c80010,
+0x0, 0x70000, 0x1621c7b, 0x1989312,
+0xc81420, 0xc80c21, 0xc81c21, 0xc81022,
+0x1376180, 0x1090012, 0x3702a0, 0x370460,
+0x360002, 0xe91d00, 0xce02c0, 0x110103,
+0x370680, 0xc80423, 0x360002, 0xc81021,
+0xe91c00, 0xce0200, 0x110106, 0x1377fff,
+0x1ca0110, 0xc80023, 0x760402, 0x370204,
+0x1377fff, 0x1ca0110, 0xc80024, 0xc81041,
+0x370204, 0x370484, 0x360002, 0xe81200,
+0xed1b00, 0x370000, 0x70000, 0x1580000,
+0x98bb17, 0x0, 0x37ff1f, 0xc82210,
+0x360422, 0x1e0a396, 0x440000, 0x2,
+0x180308, 0x11b8000, 0x11e29, 0x360222,
+0x11b8000, 0x12029, 0x360622, 0x11b8000,
+0x12229, 0x360a22, 0x11b8000, 0x12829,
+0x11b8000, 0x12489, 0x11b0000, 0x11e29,
+0x14bffff, 0x1c12002, 0x1c47f00, 0x208000,
+0x60, 0xa05302, 0xc91802, 0x1020001,
+0x1c08e17, 0x1e09fb3, 0x666642, 0x0,
+0x185302, 0x149ffff, 0x1c430c7, 0x8c0040,
+0x14661a0, 0x10400, 0x1020001, 0x1c069b9,
+0x1377fff, 0x1c82191, 0x1e09f93, 0x66663f,
+0x1000000, 0x184302, 0x890002, 0x11b8000,
+0x8009, 0x370621, 0x370881, 0x370a21,
+0xc82811, 0xc82410, 0x1c0303, 0x1006505,
+0x1800000, 0x1007509, 0x1800000, 0xc82011,
+0x1020001, 0x1c04466, 0xc82011, 0x1020001,
+0x1c043bb, 0xc82011, 0x1020001, 0x1c040f0,
+0xc82011, 0x1020001, 0x1c04472, 0x36ff1f,
+0x1581fff, 0x198bb17, 0x70000, 0xc81400,
+0xc81020, 0xd401a4, 0x118404, 0xd402a4,
+0x11010f, 0xc81021, 0xc81420, 0xd40084,
+0x118111, 0x8e2242, 0x11820e, 0x1477fff,
+0x1c24402, 0x11030b, 0x1377fff, 0x1c80010,
+0x0, 0x370620, 0x100f07, 0x1e08000,
+0x3c, 0x47ae14, 0x19030a, 0x100ff0,
+0xc81022, 0xc80008, 0x0, 0x70000,
+0x1580001, 0x198bb17, 0x0, 0x37fc17,
+0x37e91f, 0x37fe37, 0x37eb3f, 0x37ed5f,
+0xc82a10, 0x37e52f, 0xc82015, 0x1020001,
+0x1c0409e, 0xc80427, 0x11b0000, 0x1240d,
+0xc80220, 0x11b0000, 0x1228d, 0x7d1840,
+0xd40084, 0x110412, 0x1008001, 0x1c03fc6,
+0x1581ffe, 0x98bb10, 0x1581fff, 0x18bb14,
+0xc80403, 0x360720, 0x360704, 0x1020001,
+0x1c08cc6, 0x11b0000, 0x1220d, 0x6e0861,
+0xd32001, 0x1010010, 0x1403fc6, 0x36e56f,
+0x1581fff, 0x18bb10, 0xc82416, 0x1581ffe,
+0x98bb14, 0x1377fff, 0x1c94012, 0x10c8000,
+0x1803f1a, 0x360112, 0x762412, 0x1377fff,
+0x1c88091, 0x370110, 0x762010, 0x360116,
+0x762c16, 0x1377fff, 0x1c88091, 0x370114,
+0x762814, 0x11b0000, 0x1200d, 0xd40004,
+0x110109, 0xd40104, 0x110107, 0xd40204,
+0x110105, 0xd40504, 0x110103, 0xd40604,
+0x118105, 0x1581ffe, 0x98bb10, 0xc82420,
+0x370520, 0x1581ffe, 0x98bb10, 0x1646130,
+0x31262b, 0x1020001, 0x1c03fce, 0x11b0000,
+0x1280d, 0xd40004, 0x110107, 0x1646130,
+0x31062b, 0xc80401, 0x36e52f, 0x1020001,
+0x1c04183, 0xc82015, 0x1020001, 0x1c044c6,
+0x11b0000, 0xe80d, 0xd40004, 0x118404,
+0xc82015, 0x1020001, 0x1c044f5, 0x11b0000,
+0x1200d, 0xd40304, 0x11823c, 0xd40404,
+0x11831d, 0xd40804, 0x110338, 0x1581ffe,
+0x98bb12, 0x1581fff, 0x18bb10, 0xc80003,
+0x1580010, 0x158ab16, 0x158000c, 0x158ab14,
+0x360922, 0x360900, 0x1020001, 0x1c08d20,
+0x1581ffe, 0x98bb12, 0x1581fff, 0x18bb10,
+0xc80003, 0x1580011, 0x58ab16, 0x158000c,
+0x158ab14, 0x360b00, 0x360b22, 0x1020001,
+0x1c08d20, 0x36e50f, 0x0, 0x361100,
+0x16a0000, 0x188304, 0x110118, 0x1581ffe,
+0x98bb10, 0x0, 0x360520, 0x16a0000,
+0x189304, 0x110111, 0x1581fff, 0x18bb10,
+0x158000b, 0x158ab14, 0xc80003, 0xc82614,
+0x1580009, 0x58ab14, 0x1580007, 0x98ab16,
+0xc82214, 0x360500, 0x1580006, 0x18ab14,
+0x1020001, 0x1c0407e, 0x158000b, 0x58ab10,
+0x1580007, 0x98ab16, 0xc80003, 0xc82610,
+0x1580008, 0x58ab10, 0x1580006, 0x18ab14,
+0x36e527, 0xc82210, 0x36f107, 0x1020001,
+0x1c0407e, 0x158000b, 0xd8ab12, 0x1581ffe,
+0x98bb10, 0xc80003, 0xc82612, 0x1580008,
+0x158ab12, 0x1581fff, 0x18bb11, 0x1580007,
+0x98ab16, 0x1580006, 0x18ab14, 0x37e72f,
+0x360320, 0x360301, 0x36e71f, 0x1020001,
+0x1c0407e, 0x36e50f, 0x0, 0x361300,
+0x16a0000, 0x188304, 0x1008000, 0x403eff,
+0x11b0000, 0x1260d, 0xb00000, 0x1008010,
+0x403ef6, 0x36e52f, 0x0, 0x360722,
+0x169ffff, 0x1c21110, 0x1008000, 0x403eff,
+0x1581fff, 0x18bb10, 0x1581ffe, 0x98bb12,
+0xc80003, 0x1377fff, 0x1c92192, 0x360700,
+0x1020001, 0x1c03c84, 0x1008001, 0x1c03eff,
+0x36ed5f, 0x36eb3f, 0x36e91f, 0x36fe37,
+0x36fc17, 0x1581ffe, 0x98bb17, 0x70000,
+0x1580000, 0x118bb17, 0x0, 0x37fe17,
+0x37fb1f, 0x37fd3f, 0xc82612, 0x1581fff,
+0x158bb16, 0x1580002, 0x589b14, 0x1621c7d,
+0x1989312, 0x1581fff, 0x198bb11, 0x1020001,
+0x1c0ba27, 0x363623, 0x36fa87, 0x881202,
+0x373623, 0x363823, 0x36fc87, 0x881202,
+0x373823, 0x363a23, 0x8e2040, 0x118302,
+0x373a03, 0x11b0000, 0x1240b, 0xc80220,
+0xd40004, 0x11041a, 0x1008001, 0x1c04078,
+0x361a83, 0xc80447, 0x8c4008, 0x8e2048,
+0x118202, 0xc81002, 0x363023, 0x8e2048,
+0x110206, 0x361603, 0xc81448, 0x8c4200,
+0x89000a, 0x80c408, 0xc80020, 0x373083,
+0x373603, 0x373a03, 0x11b0000, 0x1240b,
+0x760201, 0xd32001, 0x118570, 0x363c03,
+0x760400, 0x373c23, 0xd40004, 0x110133,
+0xd40104, 0x11010a, 0xd40204, 0x118105,
+0xc82013, 0x1020001, 0x1c0432a, 0x100fef,
+0xc80020, 0x373c03, 0x100fec, 0x363e23,
+0x363803, 0x8c0040, 0x1020001, 0x1c0410b,
+0x1580005, 0x189b10, 0x1e08000, 0x3f,
+0x14ccccc, 0x190302, 0x8c0040, 0x1020001,
+0x1c0449e, 0x361c83, 0xc80420, 0x890200,
+0x8e2002, 0x118302, 0x100f02, 0xc80400,
+0x361a83, 0xc80047, 0x8c4048, 0x8e2008,
+0x118202, 0xc81000, 0x363203, 0x8e2008,
+0x110206, 0x361823, 0xc81448, 0x8c4202,
+0x89104a, 0x80c028, 0x373283, 0xc80020,
+0x373803, 0x100fc5, 0x363a03, 0x363423,
+0x8e2040, 0x118309, 0x890040, 0x1e08000,
+0x3c, 0x47ae14, 0x190308, 0x809002,
+0x373403, 0x100f08, 0x890040, 0x1e08000,
+0x3a, 0x10624de, 0x190308, 0x809002,
+0x373403, 0x363423, 0x1e08000, 0x3c,
+0x1eb851e, 0x190300, 0x8e2002, 0x110302,
+0x373403, 0x363423, 0xc80048, 0xc91802,
+0x1020001, 0x1c08e17, 0x373e03, 0x363e23,
+0x363603, 0x8c0040, 0x1020001, 0x1c0410b,
+0x1377fff, 0x1c82393, 0x1e08000, 0x3f,
+0x666666, 0x190302, 0x8c0040, 0x1020001,
+0x1c0449e, 0x361c83, 0xc80420, 0x890200,
+0x8e2002, 0x1008010, 0xc03ff2, 0xc80002,
+0x1008001, 0x1c03ff2, 0x36fd3f, 0x36fb1f,
+0x36fe17, 0x1581fff, 0x118bb17, 0x70000,
+0x1580000, 0x158bb17, 0x0, 0x37f617,
+0x37fb1f, 0x37fd3f, 0x37ff5f, 0x37f71f,
+0x1646100, 0xb1562d, 0xc82210, 0x37f94f,
+0x1646110, 0x310623, 0xc82815, 0xc82c13,
+0x1020001, 0x1c08d87, 0x36f76f, 0x1646110,
+0x312623, 0xc82011, 0x36f94f, 0x1020001,
+0x1c08d20, 0x36ff5f, 0x36fd3f, 0x36fb1f,
+0x36f617, 0x1581fff, 0xd8bb17, 0x70000,
+0x762e17, 0x0, 0x37ff1f, 0xc82210,
+0x1377fff, 0x1c92191, 0xc80020, 0x360082,
+0x360020, 0x8e2202, 0x110104, 0x360022,
+0xc80021, 0x370020, 0xc82011, 0x1377fff,
+0x1c92211, 0x762010, 0x360082, 0x360020,
+0x8e2202, 0x110104, 0x360022, 0xc80021,
+0x370020, 0x1377fff, 0x1c82111, 0x1377fff,
+0x1c94091, 0x360020, 0x360082, 0x8e2202,
+0x11012d, 0x360002, 0x370000, 0xc82011,
+0x1020001, 0x1c04466, 0xc82011, 0x1020001,
+0x1c043bb, 0x11b0000, 0x12429, 0xc80026,
+0x1020001, 0x1c08de0, 0x11b8000, 0xe809,
+0xc80048, 0x11b0000, 0xe829, 0x14bffff,
+0x1c12002, 0x1c47f00, 0x208000, 0x60,
+0xa05302, 0xc91802, 0x1020001, 0x1c08e17,
+0x158000d, 0x1d88b10, 0x158000d, 0x988b12,
+0x158000c, 0x1588b14, 0x10c8000, 0x14040e8,
+0x1006529, 0x1800000, 0x144ffff, 0x1c10164,
+0x762412, 0x8c1002, 0x1007521, 0x1800000,
+0x100f03, 0xd40004, 0x1081d5, 0x36ff1f,
+0x772e17, 0x70000, 0x762e17, 0x0,
+0x37ff1f, 0x158000c, 0x1588312, 0x158000d,
+0x988314, 0xc80020, 0xc80420, 0xc82212,
+0xc82c14, 0x1c0503, 0x100658d, 0x1800000,
+0x1007583, 0x1800000, 0x11b8000, 0xe808,
+0x11b0000, 0x12a08, 0x11b8000, 0x12e08,
+0x11b8000, 0x13228, 0x36ff1f, 0x772e17,
+0x70000, 0x1e08000, 0x3d, 0x199999a,
+0x190302, 0x8e2040, 0x110209, 0x144ffff,
+0x1c02000, 0x1e08000, 0x40, 0x167e600,
+0x190302, 0x8c0040, 0x100f2a, 0x1e08000,
+0x3f, 0x1e66666, 0x190308, 0x8e2200,
+0x110208, 0x890040, 0x1e09f56, 0x1ffa43f,
+0x1feb28, 0x181308, 0x808408, 0x100f1d,
+0x14bffff, 0x1c12141, 0x8e2040, 0x110208,
+0x890200, 0x1e09fcb, 0x476f3d, 0xa9c130,
+0x184302, 0x808408, 0x100f12, 0x1638860,
+0xd84308, 0x8e2200, 0x110208, 0x890040,
+0x1e09e1d, 0x1385040, 0xeafe6, 0x181308,
+0x808408, 0x100f07, 0x890200, 0x1e0a02c,
+0x85163b, 0x51e754, 0x184302, 0x808408,
+0x0, 0x70000, 0x1580000, 0x198bb17,
+0x0, 0x37f617, 0x37f69f, 0x37f837,
+0x37f8bf, 0x37fa77, 0x37faff, 0x37fc57,
+0x37fd1f, 0x37ff3f, 0x1646120, 0x1b0b601,
+0x1646180, 0xb05609, 0xc81e0a, 0x1580003,
+0x1988311, 0xc80005, 0xc81220, 0x1580003,
+0x188313, 0x36f277, 0xd40004, 0x118419,
+0x1377fff, 0x1c80091, 0x0, 0x360100,
+0x16a0000, 0x188304, 0x11010b, 0x13761b2,
+0x90093, 0x1376170, 0x1080190, 0xc8000f,
+0x360122, 0x1377fff, 0x1c90192, 0x1020001,
+0x1c08723, 0x1376150, 0x8c011, 0x1377fff,
+0x1c9c013, 0x761209, 0xd32009, 0x1005e9,
+0x36fc77, 0xc80a07, 0x36ff3f, 0x36fd1f,
+0x36fa77, 0x36f837, 0x36faff, 0x36f617,
+0x36f8bf, 0x36f69f, 0x1581fff, 0x98bb17,
+0x70000, 0x1580000, 0xd8bb17, 0x0,
+0x37fa17, 0x37fa9f, 0x37fc37, 0x37fd1f,
+0x37ff3f, 0x1646100, 0x1b11621, 0x1646120,
+0xb13625, 0x11b0000, 0x12009, 0xd40004,
+0x11827b, 0xd40804, 0x110379, 0x1621c84,
+0x1188310, 0x1377fff, 0x1c80010, 0x0,
+0x360100, 0x0, 0xc0f00, 0x0,
+0xc82013, 0x11b0000, 0x12809, 0xc81024,
+0x1646130, 0x304601, 0x11b0000, 0x13229,
+0x37fe27, 0x11b0000, 0x12ea9, 0xc80401,
+0x130f9a, 0xc82013, 0x11b0000, 0x12809,
+0xc81041, 0x1646130, 0x304601, 0x11b0000,
+0x13229, 0x37fe27, 0x11b0000, 0x12ea9,
+0xc80401, 0x130f8d, 0x14bffff, 0x1c12003,
+0x1c47f00, 0x208000, 0x60, 0xa05302,
+0x11b0000, 0x13209, 0x11b0000, 0x12e89,
+0x808408, 0x11b8000, 0x12e09, 0xc82013,
+0x11b0000, 0x12809, 0xc81022, 0x1646130,
+0x304601, 0x11b0000, 0x13429, 0x37fe27,
+0x11b0000, 0x130a9, 0xc80401, 0x1020001,
+0x1c04144, 0xc82013, 0x11b0000, 0x12809,
+0xc81020, 0x1646130, 0x304601, 0x11b0000,
+0x13429, 0x37fe27, 0x11b0000, 0x130a9,
+0xc80401, 0x1020001, 0x1c04144, 0xc82013,
+0x11b0000, 0x12809, 0xc81021, 0x1646130,
+0x304601, 0x11b0000, 0x13429, 0x37fe27,
+0x11b0000, 0x130a9, 0xc80401, 0x1020001,
+0x1c04144, 0x11b0000, 0x13609, 0x770000,
+0x11b8000, 0x13609, 0x11810c, 0xc80420,
+0x11b0000, 0x12c09, 0xc81021, 0x11b8000,
+0x13009, 0x11b8000, 0x13429, 0x11b8000,
+0x13689, 0x100f0e, 0x11b0000, 0x13409,
+0x14bffff, 0x1c12003, 0x1c47f00, 0x208000,
+0x60, 0xa05302, 0x11b0000, 0x13089,
+0x808408, 0x11b8000, 0x13009, 0x11b0000,
+0x12809, 0xc81220, 0xd40004, 0x11040e,
+0x100f25, 0x363722, 0x1376130, 0x1080090,
+0x1377fff, 0x1c90092, 0x1020001, 0x1c08cc6,
+0x11b0000, 0x12809, 0x761209, 0xd32009,
+0x118519, 0xc80040, 0x7d0009, 0x1377fff,
+0x1c90013, 0x0, 0x364302, 0x16a0000,
+0x188304, 0x1001f3, 0x11b0000, 0x12609,
+0xb00000, 0x1081e8, 0x363722, 0x169ffff,
+0x1c21110, 0x1001eb, 0x1376130, 0x90092,
+0x1377fff, 0x1c80090, 0x1020001, 0x1c03c84,
+0x100fe4, 0x36ff3f, 0x36fd1f, 0x36fc37,
+0x36fa17, 0x36fa9f, 0x1581fff, 0x158bb17,
+0x70000, 0x16a0ac4, 0x980304, 0x110114,
+0x16a0bb8, 0x180304, 0x11010f, 0x16a0fa0,
+0x180304, 0x11010a, 0x1ea0000, 0x0,
+0x17700, 0x582300, 0x118103, 0xc80024,
+0x100f08, 0xc80023, 0x100f06, 0xc80022,
+0x100f04, 0xc80021, 0x100f02, 0xc80020,
+0x0, 0x70000, 0x1580000, 0x158bb17,
+0x0, 0x37f817, 0x37f89f, 0x37fa37,
+0x37fabf, 0x37fc77, 0x37fcff, 0x37ff1f,
+0xc82210, 0xc80020, 0x360021, 0x8e2002,
+0x110147, 0x360221, 0x8e2002, 0x118344,
+0x361e01, 0x1020001, 0x1c0877e, 0xc81600,
+0x362001, 0x1020001, 0x1c0877e, 0x16461b0,
+0x309601, 0x1020001, 0x1c08cfd, 0xc80400,
+0x1e08000, 0x3c, 0x123d248, 0x190300,
+0xc91802, 0x1020001, 0x1c08e17, 0xc80248,
+0x881020, 0x890020, 0xc91802, 0x1020001,
+0x1c08e17, 0x1646190, 0x303601, 0x1020001,
+0x1c08cfd, 0xc80400, 0x1e08000, 0x3e,
+0x14be956, 0x190300, 0xc91802, 0x1020001,
+0x1c08e17, 0x881020, 0x890020, 0xc91802,
+0x1020001, 0x1c08e17, 0x88382b, 0x894221,
+0x887829, 0x895a61, 0x1e08000, 0x3e,
+0xeb851e, 0x19030a, 0x883003, 0x8c7003,
+0x1407fff, 0x1ce208f, 0x87a67b, 0x8080f8,
+0x8c4a41, 0x8c2041, 0x85a6b7, 0x8f160e,
+0x8f0e06, 0x8c1a41, 0x80c014, 0x8c4809,
+0x8c0843, 0x8c1a48, 0x100f06, 0xc81620,
+0xc80248, 0x16461b2, 0xb03617, 0xc80e0b,
+0xc81e48, 0x881061, 0x8900ef, 0x894260,
+0x880222, 0xc91808, 0x1020001, 0x1c08e17,
+0x1020001, 0x1c08cfd, 0x8812e7, 0x894061,
+0x11b8000, 0x11a09, 0x891262, 0x880228,
+0xc91802, 0x1020001, 0x1c08e17, 0x158000d,
+0x1188b10, 0x11b8000, 0x11c09, 0x158000d,
+0x1588b12, 0x360c01, 0x158000d, 0x1988b14,
+0x8c0020, 0x370000, 0x360c01, 0x8c0060,
+0x370002, 0x360c01, 0x8c0220, 0x370004,
+0x11b8000, 0xd479, 0x11b8000, 0xd6b9,
+0x11b0000, 0x12609, 0xb00000, 0x11010e,
+0x1467fff, 0x1c00060, 0x370000, 0x11b0000,
+0x12609, 0x1467fff, 0x1c00064, 0x370002,
+0x11b0000, 0x12609, 0x1467fff, 0x1c00068,
+0x370004, 0x11b0000, 0x12809, 0xd40004,
+0x11011a, 0x360c01, 0x11b0000, 0x11c29,
+0x8c0040, 0x11b8000, 0x12a09, 0x11b0000,
+0x12609, 0xb00000, 0x110106, 0x11b0000,
+0x12a29, 0x8c0002, 0x11b8000, 0x12a09,
+0x11b0000, 0x12a09, 0x1638760, 0x181302,
+0x11b0000, 0x12e89, 0x890200, 0x8c0040,
+0x11b8000, 0x13209, 0x36ff1f, 0x36fc77,
+0x36fa37, 0x36fcff, 0x36f817, 0x36fabf,
+0x36f89f, 0x1581fff, 0xd8bb17, 0x70000,
+0xc80020, 0x360020, 0x8e2002, 0x11010f,
+0x360220, 0x8e2002, 0x11830c, 0x361000,
+0x377a00, 0x360e00, 0x880000, 0x8f0000,
+0x376a00, 0x360e00, 0x8c0000, 0x8f0000,
+0x376c00, 0x100f05, 0xc80020, 0x377a00,
+0x376a00, 0x376c00, 0x0, 0x70000,
+0x100751f, 0x1800000, 0xc81020, 0x360000,
+0x8e2200, 0x110157, 0x360200, 0x8e2200,
+0x118354, 0x1c98000, 0x614c, 0x1132d60,
+0x998b47, 0x361400, 0xc81c48, 0x363260,
+0x808c02, 0x11b0000, 0x11c68, 0x8c0240,
+0x361020, 0x8c0006, 0x360ca0, 0x8832c0,
+0x89700e, 0x1467fff, 0x1c5438a, 0x85bc26,
+0x142ffff, 0x1cee62e, 0x8c1241, 0x11b0000,
+0x12668, 0x8c524e, 0x8e2206, 0x110103,
+0x8c1046, 0x8c5246, 0x377c20, 0x377ea0,
+0x11b0000, 0x12828, 0xd40024, 0x11010f,
+0x11b0000, 0x12628, 0xb00022, 0x110107,
+0x8c0002, 0x360c80, 0x8c0200, 0x11b8000,
+0x12c08, 0x100f05, 0x360c20, 0x8c0002,
+0x11b8000, 0x12c08, 0x1c98000, 0x614c,
+0x1132d61, 0x198b47, 0x361220, 0x1c7ffff,
+0x1ffe000, 0x1801a3, 0x1306349, 0x3630e0,
+0x1407fff, 0x1ce2e28, 0x11b0000, 0x11a88,
+0x8c5242, 0x8c4248, 0x360e20, 0x8850c8,
+0x894206, 0x142ffff, 0x1ce682a, 0x85d428,
+0x8c0008, 0x1467fff, 0x1c14386, 0x8c4000,
+0x8c0002, 0x8c1042, 0x377280, 0x1467fff,
+0x1c02680, 0x377000, 0x376e20, 0x100f1d,
+0xc80420, 0x377e20, 0x11b0000, 0x12608,
+0x8e2040, 0x118104, 0xc80048, 0x377c00,
+0x100f02, 0x377c00, 0xc80420, 0xc81048,
+0x377220, 0x377020, 0x376e80, 0x11b0000,
+0x12808, 0xd40004, 0x110120, 0x11b0000,
+0x12608, 0x8e2040, 0x118104, 0x11b8000,
+0x12c88, 0x100f03, 0x11b8000, 0x12c08,
+0x11b0000, 0x12808, 0xd40004, 0x110113,
+0x11b0000, 0x12c28, 0x1e08000, 0x43c,
+0x0, 0x180308, 0x11b0000, 0x130a8,
+0x891242, 0x8c1202, 0x11b8000, 0x13428,
+0x11b0000, 0x12428, 0x1020001, 0x1c08de0,
+0x11b8000, 0x13608, 0x36fe17, 0x772e17,
+0x70000, 0x1580000, 0x118bb17, 0x0,
+0x37fa17, 0x37fa9f, 0x37fc37, 0x37fcbf,
+0x37fe77, 0x37ff1f, 0xc82210, 0x360200,
+0x1e08000, 0x3e, 0x1e66666, 0x190302,
+0x8e2040, 0x110307, 0x1e08000, 0x140,
+0xd7944, 0x181b02, 0x8c5840, 0x100f26,
+0x1477fff, 0x1c24380, 0x110309, 0x1e09fc1,
+0x1759f40, 0x14c1ba, 0x184302, 0xc80622,
+0x143ffff, 0x1ceb208, 0x100f1b, 0x1e08000,
+0x3f, 0x955554, 0x190302, 0x8e2040,
+0x110309, 0x1e0dfe4, 0xa60d40, 0x9f2298,
+0x184302, 0xc80622, 0x1407fff, 0x1ceb208,
+0x100f0d, 0xc81648, 0x8e2260, 0x110209,
+0x1e0e039, 0x1333340, 0x1333334, 0x184302,
+0xc80623, 0x1407fff, 0x1ceb208, 0x100f02,
+0xc80623, 0x11b0000, 0x11e09, 0xc80e48,
+0x770203, 0x894a67, 0x1020001, 0x1c0423f,
+0x8e20e9, 0x118203, 0xc80007, 0x100f06,
+0xc80049, 0x8e2009, 0x110302, 0x100f02,
+0xc80009, 0xc80448, 0x8e204b, 0x118202,
+0x100f06, 0xc80449, 0x8e204b, 0x110302,
+0x100f02, 0xc8040b, 0x1620001, 0xd84308,
+0x1620001, 0xd8530a, 0x1621c7f, 0x189312,
+0x7a4201, 0x7a5243, 0x1377fff, 0x1c80412,
+0x1377fff, 0x1c90512, 0x0, 0x1467fff,
+0x1c505e4, 0x360080, 0x80d28a, 0x370c81,
+0x360282, 0x3602a0, 0x8c4048, 0x80c0a8,
+0x370e81, 0x360482, 0x3604a0, 0x8c4048,
+0x80c0a8, 0x371081, 0x360682, 0x3606a0,
+0x8c4048, 0x80c0a8, 0x371281, 0x360882,
+0x3608a0, 0x8c4048, 0x80c0a8, 0x371481,
+0x360a82, 0x360aa0, 0x8c4048, 0x80c0a8,
+0x371681, 0x360c82, 0x360ca0, 0x8c4048,
+0x80c0a8, 0x371881, 0x360e82, 0x360ea0,
+0x8c4048, 0x80c0a8, 0x371a81, 0x361082,
+0x3610a0, 0x8c1048, 0x8080a2, 0x371c01,
+0x361202, 0x361220, 0x8c0260, 0x809220,
+0x371e01, 0x361402, 0x361420, 0xc82011,
+0x8c0260, 0x809220, 0x372001, 0x1020001,
+0x1c04258, 0xc82011, 0x1020001, 0x1c04312,
+0xc82011, 0x1020001, 0x1c0432a, 0x36ff1f,
+0x36fe77, 0x36fc37, 0x36fcbf, 0x36fa17,
+0x36fa9f, 0x1581fff, 0x118bb17, 0x70000,
+0x360400, 0x1477fff, 0x1c24400, 0x118105,
+0xc80020, 0x11b8000, 0x12608, 0x100f03,
+0x11b8000, 0x12608, 0x0, 0x70000,
+0x1580000, 0xd8bb17, 0x0, 0x37fb1f,
+0x37fd3f, 0x37ff5f, 0x1580007, 0x988312,
+0x1580007, 0x1588316, 0xc80020, 0xc80420,
+0x1580006, 0x188314, 0x1580006, 0x1588311,
+0xc82a12, 0xc82616, 0x1c0303, 0x1006587,
+0x1800000, 0x100758b, 0x1800000, 0xc82c14,
+0xc82411, 0x1c0503, 0x1006585, 0x1800000,
+0x100758d, 0x1800000, 0x11b0000, 0x12c88,
+0x11b8000, 0x13088, 0x11b8000, 0x13408,
+0x11b8000, 0x13628, 0x36ff5f, 0x36fd3f,
+0x36fb1f, 0x1581fff, 0x158bb17, 0x70000,
+0x360c20, 0x1377fff, 0x1c90110, 0x0,
+0x360022, 0x370002, 0x360c80, 0x761008,
+0x370c80, 0xd40584, 0x110503, 0xc81020,
+0x370c80, 0x360a80, 0x8e2048, 0x110205,
+0x370a20, 0xc80420, 0x370e20, 0x100f0d,
+0x360e20, 0x760402, 0x370e20, 0xd40524,
+0x110508, 0x360a20, 0x1e08000, 0x3f,
+0xf33334, 0x190308, 0x8c1202, 0x370a20,
+0x360a20, 0x1e08000, 0x3f, 0x99999a,
+0x190308, 0x859020, 0x0, 0x70000,
+0x1580007, 0x1588312, 0x1580007, 0x988314,
+0x10c8000, 0xc044dc, 0x11b0000, 0x8008,
+0x16386b4, 0x18530a, 0x360022, 0x360084,
+0x893202, 0x8c0006, 0x900c00, 0x8e2246,
+0x118304, 0x880008, 0x370004, 0x100f02,
+0x370024, 0x762412, 0x762814, 0x1580006,
+0x1588312, 0x1580006, 0x188314, 0x10c8000,
+0x14044f3, 0x11b0000, 0x8088, 0x16386b4,
+0x18530a, 0x360002, 0x360024, 0x893040,
+0x8c4206, 0x900c08, 0x8e2246, 0x118304,
+0x880202, 0x370004, 0x100f02, 0x370004,
+0x762412, 0x762814, 0x70000, 0x11b0000,
+0xe808, 0x770000, 0x11b8000, 0xe808,
+0x118104, 0x1020001, 0x1c040f0, 0x100f0d,
+0x158000c, 0x1588312, 0x158000d, 0x1d88310,
+0x10c8000, 0x1404508, 0x1006501, 0x1800000,
+0x1447fff, 0x1c00064, 0x1007505, 0x1800000,
+0x0, 0x70000, 0x1377fff, 0x1ca2210,
+0xc80048, 0x360622, 0xc81020, 0x371020,
+0x360a22, 0x371220, 0x370800, 0x370a00,
+0x370c80, 0x360202, 0x14bffff, 0x1c02000,
+0x370e00, 0xc82c10, 0xc82414, 0x1c0403,
+0x1006505, 0x1800000, 0x100750d, 0x1800000,
+0x1020001, 0x1c04666, 0x0, 0x70000,
+0x1580001, 0x18bb17, 0x0, 0x37fa17,
+0x37f29f, 0x37fc37, 0x37f4bf, 0x37fe77,
+0x37f71f, 0x37f93f, 0x37fb5f, 0xc82a10,
+0xc82612, 0x1581fff, 0x58bb10, 0x1621c86,
+0x1989312, 0x361415, 0x361035, 0x360295,
+0x360475, 0xc82c10, 0xc82812, 0x1c0203,
+0x1006509, 0x1800000, 0x100750d, 0x1800000,
+0xc82015, 0x1020001, 0x1c046db, 0x360005,
+0xb00000, 0x110107, 0xc82413, 0xc82015,
+0x1020001, 0x1c04678, 0x1008001, 0x1c04641,
+0x360605, 0x14b7fff, 0x1c02000, 0x1010010,
+0x8045e3, 0xd40804, 0x1010000, 0xc045e3,
+0x1621c85, 0x1588310, 0x1377fff, 0x1c80010,
+0x0, 0x360100, 0x0, 0xc0f00,
+0x0, 0x360103, 0x1581fff, 0xd8bb12,
+0x37f707, 0x360503, 0x370302, 0x100f38,
+0x360123, 0xc80003, 0x360d03, 0x1020001,
+0x1c03c84, 0x360323, 0xc80003, 0x360f03,
+0x1020001, 0x1c03c84, 0x360523, 0xc80003,
+0x361103, 0x1020001, 0x1c03c84, 0x100f6e,
+0x1581fff, 0x58bb16, 0x1581fff, 0xd8bb10,
+0x1e47fff, 0x1ffe000, 0x180191, 0x30b34b,
+0x1581fff, 0x58bb14, 0x1581fff, 0xd8bb12,
+0x8c1267, 0x370226, 0xc80403, 0x360963,
+0x37f767, 0x360563, 0x370360, 0x361503,
+0x1020001, 0x1c088be, 0x360b03, 0x1581fff,
+0x58bb14, 0x1646130, 0x1300645, 0x1581fff,
+0xd8bb12, 0x37f707, 0x361703, 0x1020001,
+0x1c088be, 0x1581fff, 0x58bb10, 0x8c0269,
+0x370200, 0x360103, 0x37f707, 0x360d03,
+0x1581fff, 0x58bb14, 0x1646130, 0x1300645,
+0x1581fff, 0xd8bb12, 0x1020001, 0x1c088be,
+0x360303, 0x1581fff, 0x58bb14, 0x1646130,
+0x1300645, 0x1581fff, 0xd8bb12, 0x37f707,
+0x360f03, 0x1020001, 0x1c088be, 0x100f32,
+0x360123, 0xc80003, 0x360d03, 0x1020001,
+0x1c03c84, 0x360323, 0xc80003, 0x360f03,
+0x1020001, 0x1c03c84, 0x1581fff, 0x58bb16,
+0x1581fff, 0xd8bb10, 0x1e47fff, 0x1ffe000,
+0x180191, 0x30234b, 0x1581fff, 0x58bb14,
+0x1581fff, 0xd8bb12, 0x8c1047, 0x370226,
+0xc80403, 0x360963, 0x37f767, 0x360563,
+0x370360, 0x361503, 0x1020001, 0x1c088be,
+0x360b03, 0x1581fff, 0x58bb14, 0x1646130,
+0x1300645, 0x1581fff, 0xd8bb12, 0x37f707,
+0x361703, 0x1020001, 0x1c088be, 0x361103,
+0x1646190, 0x302607, 0x360523, 0x1020001,
+0x1c08cc6, 0x361303, 0x16a0000, 0x188304,
+0x11010b, 0x360723, 0x16a0000, 0x189304,
+0x110107, 0x169ffff, 0x1c21110, 0x110104,
+0xc80003, 0x1020001, 0x1c03c84, 0x1377fff,
+0x1c8c013, 0xc81640, 0xc81220, 0x360101,
+0x16a0000, 0x188304, 0x11010a, 0xc80021,
+0xce0001, 0x118107, 0xd40394, 0x110105,
+0x1646130, 0x1300641, 0x1020001, 0x1c03c73,
+0x77160b, 0xed0111, 0x762211, 0x761209,
+0xd400b4, 0x1004ee, 0x361205, 0xd40004,
+0x118437, 0xc80220, 0xd40004, 0x118434,
+0xc80040, 0x7d0001, 0x1377fff, 0x1c90013,
+0x0, 0x363d02, 0x363122, 0x169ffff,
+0x1c21110, 0x110104, 0xc80003, 0x1020001,
+0x1c03c84, 0xc80040, 0x7d0001, 0x1377fff,
+0x1c90013, 0x0, 0x363f02, 0x363322,
+0x169ffff, 0x1c21110, 0x110104, 0xc80003,
+0x1020001, 0x1c03c84, 0xc80040, 0xc81224,
+0x7d0001, 0x1377fff, 0x1c80013, 0x1377fff,
+0x1c8a390, 0x0, 0x360101, 0x16a0000,
+0x188304, 0x110105, 0x1646130, 0x1300641,
+0x1020001, 0x1c03c73, 0x762211, 0x771209,
+0xd40094, 0x1004f4, 0x361205, 0x760201,
+0xd32001, 0x118502, 0x100fce, 0x36fb5f,
+0x36f93f, 0x36f71f, 0x36fe77, 0x36fc37,
+0x36fa17, 0x36f4bf, 0x36f29f, 0x1581fff,
+0x18bb17, 0x70000, 0xc81000, 0xd40284,
+0x11840a, 0xd40384, 0x118106, 0x1cb8000,
+0x614c, 0x11b2161, 0x190320, 0x100f05,
+0xc80021, 0x100f0d, 0xc81020, 0xc81448,
+0x8e2202, 0x118208, 0x8e2242, 0x110306,
+0x1377fff, 0x1c80010, 0xc80020, 0x370820,
+0x100f02, 0xc80022, 0x0, 0x70000,
+0x762e17, 0x0, 0x37ff1f, 0xc82210,
+0x360600, 0x14b7fff, 0x1c02000, 0x1020001,
+0x1c03e42, 0x360000, 0x162003f, 0x1d81302,
+0xe90e00, 0xce0040, 0x371401, 0x36ff1f,
+0x772e17, 0x70000, 0x1580000, 0x118bb17,
+0x0, 0x37f817, 0x37f89f, 0x37fa37,
+0x37fabf, 0x37fd1f, 0x37ff3f, 0xc82210,
+0xc82612, 0xc81240, 0x361431, 0xc80220,
+0x100f1a, 0x1377fff, 0x1c80093, 0x0,
+0x360120, 0x16a0000, 0x189304, 0x110108,
+0x360d00, 0x169ffff, 0x1c21110, 0x110104,
+0x361001, 0x1020001, 0x1c03c84, 0x361201,
+0xd40004, 0x118404, 0xc81620, 0xd40004,
+0x110425, 0x771209, 0xed0133, 0x760201,
+0xd40094, 0x118433, 0x1377fff, 0x1c80093,
+0x0, 0x360d00, 0x16a0000, 0x188304,
+0x1001ef, 0xc80021, 0xce0003, 0x1081de,
+0xd40314, 0x1001dc, 0x361021, 0xc80020,
+0x1020001, 0x1c03c73, 0x100fe5, 0x363122,
+0x16a0000, 0x189304, 0x110107, 0x169ffff,
+0x1c21110, 0x110104, 0x361001, 0x1020001,
+0x1c03c84, 0x361201, 0x76160b, 0xd3200b,
+0x1085dd, 0xc80040, 0x7d000b, 0x1377fff,
+0x1c80013, 0x1377fff, 0x1c90090, 0x0,
+0x363d02, 0x16a0000, 0x188304, 0x1001f2,
+0xc80021, 0xce0003, 0x1081e5, 0x361021,
+0xc80020, 0x1020001, 0x1c03c73, 0x100fea,
+0x36ff3f, 0x36fd1f, 0x36fa37, 0x36f817,
+0x36fabf, 0x36f89f, 0x1581fff, 0x118bb17,
+0x70000, 0xc82810, 0x1377fff, 0x1c92210,
+0x10c8000, 0xc046e6, 0x360002, 0x360024,
+0x8e2002, 0x110102, 0x370004, 0x762412,
+0x762814, 0x1377fff, 0x1c92190, 0x360e00,
+0x360022, 0x8e2002, 0x110104, 0x370002,
+0x1020001, 0x1c04666, 0x0, 0x70000,
+0x1580002, 0x118bb17, 0x0, 0x37ed1f,
+0x37ef3f, 0x37f15f, 0xc82210, 0xc82612,
+0xc82a16, 0x37d94f, 0x360603, 0x1e08000,
+0x46, 0x86a000, 0x190302, 0x376c01,
+0x360403, 0x14bffff, 0x1c02000, 0x1c47f00,
+0x208000, 0x60, 0x205300, 0x8e2040,
+0x118305, 0x1620080, 0x180300, 0x376801,
+0x100f04, 0x1620040, 0x180300, 0x376801,
+0xc82420, 0x1581ffd, 0x118bb14, 0xc80420,
+0x366801, 0xc81024, 0x37db2f, 0x1581ffe,
+0x158bb12, 0xe90200, 0x1581ffd, 0x118bb10,
+0x37dd2f, 0x1581ffd, 0x118bb12, 0x37df2f,
+0x1581ffe, 0x158bb12, 0x376a01, 0x37e12f,
+0x36d92f, 0x376721, 0x158000a, 0x988b12,
+0x37e32f, 0x158006a, 0x988b12, 0x37e52f,
+0x1581fff, 0x198bb12, 0x376e21, 0x37e72f,
+0x360125, 0x37e94f, 0xc82c10, 0xc82812,
+0x1c0903, 0x1006509, 0x1800000, 0x100750d,
+0x1800000, 0x1580007, 0x188b10, 0x37eb0f,
+0x36dd2f, 0x360305, 0xc82c12, 0xc82810,
+0x1c0903, 0x1006509, 0x1800000, 0x100750d,
+0x1800000, 0x36df0f, 0x36e32f, 0x366801,
+0x370520, 0x36e10f, 0x36e52f, 0x37fc87,
+0x370520, 0xc82413, 0x37d807, 0x37ea07,
+0x36e70f, 0x366801, 0x370200, 0x36e96f,
+0x36db4f, 0x36eb0f, 0x1020001, 0x1c0b705,
+0xc82413, 0x1581ffe, 0x158bb16, 0xc82820,
+0x1580008, 0x1588b10, 0x1020001, 0x1c0b61a,
+0x36d94f, 0xc82413, 0x1581fff, 0x198bb16,
+0xc82011, 0x1020001, 0x1c0acb8, 0x15800ca,
+0x988b10, 0x15800eb, 0x188b12, 0x15800ec,
+0x1188b14, 0x15800f1, 0x988b13, 0x11b8008,
+0xea509, 0x360565, 0x370162, 0x15800ef,
+0x1988b16, 0x360122, 0x11b8008, 0xef129,
+0x360725, 0x370124, 0x11b8008, 0xf0929,
+0x360525, 0x370126, 0x11b8008, 0xf3d29,
+0x360725, 0x370123, 0x11b8008, 0xf5529,
+0x11b8008, 0xf4909, 0x36f15f, 0x36ef3f,
+0x36ed1f, 0x1581ffd, 0x118bb17, 0x70000,
+0x1580000, 0xd8bb17, 0x0, 0x37fa17,
+0x37fa9f, 0x37fc37, 0x37fd1f, 0x37ff3f,
+0xc82210, 0xc82612, 0x366c01, 0xc80620,
+0x366e91, 0xd40004, 0x11843c, 0x366a21,
+0x700060, 0x700a22, 0xd32001, 0x118402,
+0xc80200, 0x1376110, 0x80491, 0x360123,
+0x360d63, 0x15800ca, 0x988314, 0x1377fff,
+0x1c90192, 0x1377fff, 0x1c80196, 0x1020001,
+0x1c08dd5, 0x6e4829, 0x366a01, 0x6e1823,
+0xd32009, 0x110521, 0x15800ea, 0x988b12,
+0x1580007, 0x188b10, 0x1020001, 0x1c0b741,
+0x16200a0, 0x981302, 0xc80020, 0x366701,
+0x1020001, 0x1c03c73, 0x15800ef, 0x188b12,
+0xc82011, 0x1020001, 0x1c0ad99, 0x15800f3,
+0x1988b12, 0x1580008, 0x1588b10, 0x1020001,
+0x1c0b657, 0x15800ca, 0x988b12, 0xc80047,
+0xc82012, 0x366a21, 0x1020001, 0x1c08cc6,
+0x366a01, 0x704809, 0x366c01, 0xd32003,
+0x118502, 0x100fc6, 0x376e91, 0x36ff3f,
+0x36fd1f, 0x36fc37, 0x36fa17, 0x36fa9f,
+0x1581fff, 0x158bb17, 0x70000, 0x1020001,
+0x1c0add4, 0x0, 0x70000, 0xc82420,
+0xc80020, 0x370000, 0x370320, 0x70000,
+0x1580000, 0xd8bb17, 0x0, 0x37fa17,
+0x37fb1f, 0x37fd3f, 0x37ff5f, 0xc82a10,
+0x1377fff, 0x1c8c012, 0xc82612, 0xc80240,
+0x360101, 0x16a0000, 0x188304, 0x110109,
+0x360123, 0x1620008, 0x180300, 0x1020001,
+0x1c001e8, 0x1377fff, 0x1c0006a, 0x370005,
+0x762211, 0x762613, 0x770201, 0x1003f1,
+0x36ff5f, 0x36fd3f, 0x36fb1f, 0x36fa17,
+0x1581fff, 0x158bb17, 0x70000, 0x1580000,
+0x118bb17, 0x0, 0x37f817, 0x37fb1f,
+0x37fd3f, 0x37ff5f, 0xc82210, 0x1580001,
+0x1588b13, 0x1580006, 0x188b14, 0x1377fff,
+0x1c84011, 0x1e09f95, 0xaaaa00, 0x0,
+0x181300, 0x1e09ee6, 0xcccd3f, 0x0,
+0x183308, 0xc81448, 0x37f93f, 0xc82a14,
+0xc82616, 0x1c0203, 0x10065e7, 0x1800000,
+0x10075eb, 0x1800000, 0x360412, 0x1e08000,
+0x3c, 0x1eb851e, 0x19030e, 0x375211,
+0x360612, 0x375411, 0x370001, 0x370221,
+0x370401, 0x370681, 0x370801, 0x370a01,
+0x370000, 0x370200, 0x370400, 0x370600,
+0x3716a1, 0x360222, 0x14bffff, 0x1c12002,
+0x371821, 0x36f90f, 0xc82810, 0xc82411,
+0x1c0d03, 0x1006525, 0x1800000, 0x1007529,
+0x1800000, 0xc82011, 0x373001, 0x375861,
+0x3756e1, 0x130f42, 0xc80020, 0x375e01,
+0x36ff5f, 0x36fd3f, 0x36fb1f, 0x36f817,
+0x1581fff, 0x118bb17, 0x70000, 0x762e17,
+0x0, 0x37ff1f, 0xc82210, 0x130f52,
+0xc82011, 0x1020001, 0x1c0499a, 0xc82011,
+0x1020001, 0x1c04b60, 0x36ff1f, 0x772e17,
+0x70000, 0x762e17, 0xc81002, 0xd43e04,
+0x118519, 0x1621c87, 0x189312, 0x771428,
+0x1377fff, 0x1c90012, 0x0, 0x360022,
+0xce0242, 0x16a001f, 0x1d80304, 0x110106,
+0x1377fff, 0x1c80010, 0xc80020, 0x371a80,
+0x100f0a, 0xe90820, 0x771428, 0xe91026,
+0x771c29, 0xce1240, 0xce02c6, 0x130f05,
+0x100f02, 0xc80021, 0x772e17, 0x70000,
+0x762e17, 0xc81402, 0x37fe87, 0x1581fff,
+0x1d8bb10, 0xc8100a, 0xc80420, 0x1020001,
+0x1c024bb, 0x772e17, 0x70000, 0x762e17,
+0x0, 0x37ff1f, 0xc82210, 0x365400,
+0x14bffff, 0x1c12000, 0x365601, 0xc91802,
+0x1020001, 0x1c08e17, 0x365221, 0x14bffff,
+0x1c12002, 0x1c47f00, 0x208000, 0x60,
+0xa05302, 0x1c07fff, 0x1fffc00, 0x30060,
+0x980347, 0x1020001, 0x1c08a13, 0x14b7fff,
+0x1c02000, 0x375c01, 0x36ff1f, 0x772e17,
+0x70000, 0x1580001, 0x18bb17, 0x0,
+0x37f217, 0x37f69f, 0x37f437, 0x37f8bf,
+0x37fb1f, 0x37fd3f, 0x37ff5f, 0xc82a10,
+0x1580001, 0x158ab10, 0xc82615, 0x1580003,
+0x98ab11, 0xc80220, 0x1620001, 0x1584b09,
+0x37f30f, 0x1580003, 0x98ab10, 0x37f50f,
+0x36f30f, 0x360003, 0x360030, 0x8e2060,
+0x11015f, 0xd40014, 0x110146, 0xd40214,
+0x110126, 0xd40a14, 0x110117, 0xd40b14,
+0x11814e, 0xc81620, 0x8e2263, 0x110102,
+0x100f02, 0x8f164a, 0x16461b2, 0x31062b,
+0x1620004, 0x1581302, 0x1620011, 0x1580300,
+0x130fa8, 0x366305, 0x16a0000, 0x188304,
+0x11013e, 0xc8000b, 0xf0f00, 0x0,
+0x100f3a, 0x365005, 0xd40004, 0x110103,
+0xd40404, 0x118135, 0x1646132, 0x31062b,
+0x1620004, 0x1181302, 0x1620011, 0x1580300,
+0x130f94, 0x100f2d, 0x36f50f, 0x1e87fff,
+0x1ffe000, 0x181194, 0x1308330, 0xc80020,
+0x1677fff, 0x1c10160, 0xcd1202, 0x370020,
+0x8e2003, 0x11010a, 0x360025, 0x8e2002,
+0x110104, 0xc80021, 0x374e05, 0x100f1b,
+0xc80022, 0x374e05, 0x100f18, 0x360025,
+0x8e2002, 0x110104, 0xc80021, 0x374e05,
+0x100f12, 0xc80023, 0x374e05, 0x100f0f,
+0xc80020, 0x8e2003, 0x110104, 0xc80021,
+0x374e05, 0x100f09, 0x360425, 0x8e2002,
+0x118104, 0xc80023, 0x374e05, 0x100f03,
+0xc80022, 0x374e05, 0x1e87fff, 0x1ffe000,
+0x181198, 0x300329, 0x1677fff, 0x1c00062,
+0xcd0040, 0x370001, 0x370033, 0x36f30f,
+0x762613, 0x762211, 0x771209, 0x760201,
+0x762010, 0x37f30f, 0xd40094, 0x100495,
+0x36ff5f, 0x36fd3f, 0x36fb1f, 0x36f437,
+0x36f217, 0x36f8bf, 0x36f69f, 0x1581fff,
+0x18bb17, 0x70000, 0x1580000, 0xd8bb17,
+0x0, 0x37fe17, 0x37fd1f, 0xc82210,
+0xc80220, 0x37fc17, 0x365001, 0xd40104,
+0x11013d, 0xd40204, 0x11012a, 0xd40304,
+0x110112, 0xd40404, 0x118149, 0x1581fff,
+0x198bb10, 0x1620004, 0xd84308, 0xc80421,
+0x1620011, 0x1580300, 0x1020001, 0x1c024bb,
+0x36fc07, 0x8e2020, 0x11013d, 0xc80020,
+0x375001, 0x100f3a, 0x365e01, 0x770000,
+0x375e01, 0x110336, 0xc82011, 0x361481,
+0x1620004, 0x1181302, 0x1620011, 0x1580300,
+0x1020001, 0x1c04886, 0x366101, 0x16a0000,
+0x188304, 0x110104, 0xc80001, 0xf0f00,
+0x0, 0xc80024, 0x375001, 0x100f24,
+0x1581fff, 0x198bb10, 0x1620004, 0xd84308,
+0xc80421, 0x1620011, 0x1580300, 0x1020001,
+0x1c024bb, 0x36fc07, 0x8e2020, 0x110118,
+0xc80023, 0x375001, 0x365c01, 0x375e01,
+0x100f13, 0xc82011, 0x1620004, 0x1181302,
+0xc80248, 0x1620011, 0x1580300, 0xc81001,
+0x1020001, 0x1c04886, 0x366101, 0x16a0000,
+0x188304, 0x110104, 0xc80001, 0xf0f00,
+0x0, 0xc80022, 0x375001, 0x36fd1f,
+0x36fe17, 0x1581fff, 0x158bb17, 0x70000,
+0x1580000, 0x98bb17, 0x0, 0x37fd1f,
+0x37ff3f, 0xc82610, 0x1580003, 0x989b11,
+0x770029, 0x1677fff, 0x1c00062, 0xd40104,
+0x118130, 0x364e03, 0xd40104, 0x110114,
+0xd40204, 0x110523, 0xd40304, 0x110421,
+0xc82013, 0xc80420, 0xc81020, 0x1620010,
+0x980300, 0x1020001, 0x1c04886, 0x770029,
+0x1638000, 0x1181302, 0x1677fff, 0x1c00062,
+0xcd0040, 0x370001, 0x100f12, 0xc82013,
+0x365883, 0x1620004, 0x981302, 0x1620011,
+0x1580300, 0x1020001, 0x1c04886, 0xc80021,
+0x770429, 0x1638000, 0x1584308, 0x375003,
+0x1677fff, 0x1c00162, 0xcd0200, 0x370001,
+0x1e87fff, 0x1ffe000, 0x181198, 0x1300329,
+0x1677fff, 0x1c00062, 0xcd0040, 0x370001,
+0x363803, 0x770429, 0xce0040, 0xd40104,
+0x118112, 0xc82013, 0xc80421, 0x360483,
+0x1620010, 0x1d80300, 0x1020001, 0x1c04886,
+0x1580003, 0x1189b10, 0x1e87fff, 0x1ffe000,
+0x181198, 0x1300329, 0x1677fff, 0x1c00060,
+0xcd0040, 0x370000, 0x363603, 0x770429,
+0xce0040, 0xd40104, 0x118112, 0xc82013,
+0xc80422, 0x360283, 0x1620010, 0x980300,
+0x1020001, 0x1c04886, 0x1580003, 0xd89b10,
+0x1e87fff, 0x1ffe000, 0x181198, 0x1300329,
+0x1677fff, 0x1c00060, 0xcd0040, 0x370000,
+0x363a03, 0x770429, 0xce0040, 0xd40104,
+0x118112, 0xc82013, 0xc80423, 0x360683,
+0x1620010, 0x1d80300, 0x1020001, 0x1c04886,
+0x1580003, 0x1589b10, 0x1e87fff, 0x1ffe000,
+0x181198, 0x1300329, 0x1677fff, 0x1c00060,
+0xcd0040, 0x370000, 0x1580003, 0x1989b10,
+0x10c8000, 0x1804a30, 0x770029, 0x1677fff,
+0x1c00060, 0xd40104, 0x118110, 0xc80021,
+0x770429, 0x1638000, 0x984308, 0xc81422,
+0x375003, 0xd00029, 0x1677fff, 0x1c10160,
+0xcd1202, 0x370020, 0x1677fff, 0x1c00060,
+0xcd0240, 0x370000, 0x762010, 0x1580004,
+0x1989b10, 0x770029, 0x1677fff, 0x1c00060,
+0xd40104, 0x118110, 0xc80021, 0x770429,
+0x1638000, 0x984308, 0xc81422, 0x375003,
+0xd00029, 0x1677fff, 0x1c10160, 0xcd1202,
+0x370020, 0x1677fff, 0x1c00060, 0xcd0240,
+0x370000, 0x36ff3f, 0x36fd1f, 0x1581fff,
+0x198bb17, 0x70000, 0x1580000, 0xd8bb17,
+0x0, 0x37fb1f, 0xc82210, 0x1581fff,
+0x158bb10, 0xc81040, 0xc80421, 0x1620010,
+0x980300, 0x1020001, 0x1c024bb, 0x1581fff,
+0x198bb10, 0xc8103f, 0xc80421, 0x1620010,
+0x980300, 0x1020001, 0x1c024bb, 0xc82011,
+0x36fa87, 0xc80421, 0x1620010, 0xd80300,
+0x1020001, 0x1c04886, 0xc82011, 0x36fc87,
+0xc80422, 0x1620010, 0xd80300, 0x1020001,
+0x1c04886, 0x1581fff, 0x1d8bb10, 0xc81448,
+0xc81025, 0xc80421, 0x1620010, 0x980300,
+0x37fea7, 0x1020001, 0x1c024bb, 0x36fe07,
+0x36fb1f, 0x1581fff, 0x158bb17, 0x70000,
+0x1580000, 0xd8bb17, 0x0, 0x37fc17,
+0x37fd1f, 0x37ff3f, 0x1646100, 0xb13621,
+0xc82212, 0x360002, 0x770429, 0xe91008,
+0xce1048, 0xd40424, 0x1010000, 0x404b13,
+0xd40524, 0x110164, 0xd40624, 0x110158,
+0xd40724, 0x110119, 0xd40824, 0x1010010,
+0x404b29, 0xc82013, 0x130fb4, 0xb00000,
+0x1010000, 0x404b29, 0x364e03, 0x770429,
+0xce0040, 0x1e0ffff, 0x1000000, 0x1fffe,
+0x181308, 0xe81000, 0x1677fff, 0x1c40462,
+0xcd0008, 0x370001, 0x1677fff, 0x1c00162,
+0x370001, 0x100f7e, 0x365003, 0xd40004,
+0x11817b, 0x364e03, 0xd40104, 0x11011a,
+0xd40204, 0x118108, 0x1646112, 0x310627,
+0xc80423, 0x1620010, 0x980300, 0x1020001,
+0x1c04886, 0x364e03, 0x770429, 0xce0040,
+0x1e0ffff, 0x1000000, 0x1fffe, 0x181308,
+0xe81000, 0x1677fff, 0x1c40462, 0xcd0008,
+0x370001, 0x1677fff, 0x1c00162, 0x370001,
+0x100f15, 0xc82013, 0xc81048, 0xc80420,
+0x1620010, 0x980300, 0x1020001, 0x1c04886,
+0x1646112, 0x310627, 0xc80423, 0x1620010,
+0x980300, 0x1020001, 0x1c04886, 0x770029,
+0xc8043c, 0x1677fff, 0x1c00062, 0xcd0040,
+0x370001, 0xc82013, 0x1e09e11, 0x1d70a00,
+0x44, 0x184302, 0x1620011, 0x1580300,
+0x1020001, 0x1c04886, 0x100f41, 0x365023,
+0xd40424, 0x11813e, 0x770429, 0x1638000,
+0x1d84308, 0xce0040, 0xcd0200, 0x370001,
+0x100f37, 0x365023, 0xd40324, 0x118134,
+0x770429, 0x1638000, 0x1984308, 0xce0040,
+0xcd0200, 0x370001, 0x364e03, 0xd40304,
+0x118103, 0xc81021, 0x100f02, 0xc81020,
+0xc82013, 0x14bffff, 0x1c0a008, 0xc80421,
+0x1620010, 0x980300, 0xc81001, 0x1020001,
+0x1c04886, 0x1646112, 0x310627, 0xc80420,
+0x1620010, 0xd80300, 0x1020001, 0x1c04886,
+0x100f17, 0xc82013, 0x1020001, 0x1c04a4c,
+0xb00000, 0x110112, 0xc82013, 0x365883,
+0x1620004, 0x981302, 0x1620011, 0x1580300,
+0x1020001, 0x1c04886, 0xc80021, 0x770429,
+0x1638000, 0x1584308, 0x375003, 0x1677fff,
+0x1c00162, 0xcd0200, 0x370001, 0x36ff3f,
+0x36fd1f, 0x36fc17, 0x1581fff, 0x158bb17,
+0x70000, 0x1580000, 0xd8bb17, 0x0,
+0x37fc17, 0x37fd1f, 0x37fe37, 0x37ff3f,
+0x1646100, 0xb13621, 0x1646120, 0x1b11625,
+0x360002, 0x770429, 0xe91000, 0xce0040,
+0xd40204, 0x11811a, 0x365003, 0xd40304,
+0x118117, 0x1646132, 0x310627, 0x1620011,
+0x980300, 0xc80401, 0x1020001, 0x1c04886,
+0xd40014, 0x11010a, 0xd40714, 0x110408,
+0x1646132, 0x310627, 0x760401, 0x1620011,
+0x980300, 0x1020001, 0x1c04886, 0xd00029,
+0x1677fff, 0x1c00062, 0x370001, 0x36ff3f,
+0x36fd1f, 0x36fe37, 0x36fc17, 0x1581fff,
+0x158bb17, 0x70000, 0x1580000, 0xd8bb17,
+0x0, 0x37fa17, 0x37fb1f, 0x37fc37,
+0x37fd3f, 0x37ff5f, 0xc82a10, 0x365000,
+0xd40004, 0x110104, 0xc82015, 0x1020001,
+0x1c0493c, 0x1580003, 0x98ab12, 0x770029,
+0x1677fff, 0x1c00064, 0xd40204, 0x118105,
+0xc82015, 0x365a05, 0x1020001, 0x1c04a7e,
+0x363805, 0x770429, 0xce0040, 0xd40204,
+0x110106, 0x363a05, 0x770429, 0xce0040,
+0xd40204, 0x11811c, 0x1580005, 0x158ab10,
+0x761025, 0xc80421, 0x1620010, 0x1d80300,
+0x1020001, 0x1c024bb, 0xc82015, 0xc80423,
+0x365a85, 0x1620010, 0x980300, 0x1020001,
+0x1c04886, 0x1580003, 0x118ab10, 0xd00029,
+0x1580003, 0x158ab12, 0xd00429, 0x1677fff,
+0x1c00060, 0x370000, 0x1677fff, 0x1c00164,
+0x370002, 0x363605, 0x770429, 0xce0040,
+0xd40204, 0x11810c, 0xc82015, 0x1020001,
+0x1c04a4c, 0xb00000, 0x110107, 0x1580003,
+0xd8ab10, 0xd00029, 0x1677fff, 0x1c00060,
+0x370000, 0x1580003, 0x198ab12, 0x770029,
+0x1677fff, 0x1c00064, 0xd40204, 0x118106,
+0xc82015, 0x760025, 0x360825, 0x1020001,
+0x1c04b2f, 0x1377fff, 0x1c93695, 0x770029,
+0x1677fff, 0x1c00064, 0xd40204, 0x118107,
+0xc82015, 0x1620001, 0x1180300, 0x360a25,
+0x1020001, 0x1c04b2f, 0x1377fff, 0x1c9a395,
+0x1377fff, 0x1c8c015, 0xc80624, 0xc80240,
+0x770029, 0x1677fff, 0x1c00066, 0xd40204,
+0x11810a, 0xc82413, 0xc82015, 0xc80422,
+0xb0fa10, 0x7d0040, 0x360021, 0x760000,
+0x1020001, 0x1c04b2f, 0x762613, 0x762211,
+0x770603, 0x760201, 0xd40034, 0x1004ed,
+0x770429, 0x364c05, 0xce1040, 0xd40224,
+0x118124, 0xe91000, 0x770429, 0xce0040,
+0xd40204, 0x11811f, 0x365005, 0xd40304,
+0x11811c, 0xc82015, 0x361885, 0xc80420,
+0x1620011, 0x980300, 0x1020001, 0x1c04886,
+0xc82015, 0x361885, 0xc80441, 0x1620010,
+0x980300, 0x1020001, 0x1c04886, 0xc82015,
+0x361885, 0xc80423, 0x1620010, 0xd80300,
+0x1020001, 0x1c04886, 0x1580004, 0x198ab10,
+0xd00029, 0x1677fff, 0x1c00060, 0x370000,
+0x36ff5f, 0x36fd3f, 0x36fb1f, 0x36fc37,
+0x36fa17, 0x1581fff, 0x158bb17, 0x70000,
+0x1580000, 0xd8bb17, 0x0, 0x37fa17,
+0x37fb1f, 0x37fd3f, 0x37ff5f, 0xc82210,
+0xc82a12, 0x360136, 0x377341, 0x360205,
+0x1020001, 0x1c03e42, 0x1580006, 0x988b10,
+0x360205, 0x1020001, 0x1c03e4c, 0x360405,
+0x1ea0000, 0x0, 0x17700, 0x582300,
+0x118407, 0xc80026, 0x1620012, 0x181302,
+0x370c01, 0x371221, 0x100f0f, 0x16a0bb8,
+0x180304, 0x118407, 0xc80025, 0x1620009,
+0x181302, 0x370c01, 0x371221, 0x100f06,
+0xc80024, 0x1620004, 0x1181302, 0x370c01,
+0x371221, 0x360c21, 0xc80048, 0x14bffff,
+0x1c12002, 0x1c47f00, 0x208000, 0x60,
+0xa05302, 0xc91802, 0x1020001, 0x1c08e17,
+0x370e01, 0xc80025, 0x760425, 0xc80220,
+0x371001, 0x371621, 0x366401, 0xd40004,
+0x118411, 0xc80423, 0x361201, 0x7d1041,
+0x7d4020, 0x1377fff, 0x1c80111, 0x1377fff,
+0x1c90413, 0x1377fff, 0x1c83710, 0x1020001,
+0x1c0b9e8, 0x366401, 0x760201, 0xd32001,
+0x1005f1, 0x1e0a1bd, 0x0, 0x0,
+0x18030a, 0xc80248, 0x360685, 0xc80447,
+0x370a81, 0x360e61, 0x14bffff, 0x1c42008,
+0x1c47f00, 0x208000, 0x61, 0x205308,
+0x8c40c8, 0x14b6181, 0x1043008, 0xe80188,
+0x14b7e00, 0x842006, 0x371481, 0x3706a1,
+0x370811, 0x371c21, 0x360425, 0x360e81,
+0x14bffff, 0x1c12002, 0x1c47f00, 0x208000,
+0x60, 0xa05302, 0x8c1202, 0x1020001,
+0x1c08765, 0x371801, 0xc82011, 0x1639812,
+0x180300, 0x762010, 0x371a01, 0x370010,
+0x360000, 0x370001, 0x36ff5f, 0x36fd3f,
+0x36fb1f, 0x36fa17, 0x1581fff, 0x158bb17,
+0x70000, 0x1580001, 0x198bb17, 0x0,
+0x37fc17, 0x37e71f, 0x37fe37, 0x37e93f,
+0x37eb5f, 0x37e50f, 0xc82610, 0x367310,
+0x1581ffe, 0x98bb14, 0xc80020, 0x1581fff,
+0x18bb16, 0x1377fff, 0x1c8b791, 0x366420,
+0x361433, 0x1580006, 0xd88310, 0x360a13,
+0xd40024, 0x118416, 0x360020, 0x760000,
+0x1377fff, 0x1c98112, 0x0, 0x360133,
+0x370134, 0x762814, 0x1006521, 0x1800000,
+0x1377fff, 0x1c98112, 0x0, 0x360d33,
+0x370136, 0x762c16, 0x36e53f, 0x0,
+0x366423, 0xd32040, 0x1005ec, 0x36e50f,
+0x0, 0x360800, 0x1477fff, 0x1c24400,
+0x110203, 0xc80021, 0x100f02, 0xc80020,
+0x36e50f, 0x0, 0x370400, 0x360000,
+0xb00000, 0x110111, 0x36e50f, 0x1581ffe,
+0x98bb14, 0xc82c10, 0x1580004, 0x588312,
+0xc82011, 0x130f4b, 0x36e50f, 0xc80403,
+0x1377fff, 0x1c92110, 0x361600, 0xc82011,
+0x1020001, 0x1c0ba0e, 0x36e50f, 0x0,
+0x360400, 0xd40004, 0x11011c, 0x1646130,
+0x310623, 0x130f60, 0x36e52f, 0x1646130,
+0x310623, 0x1020001, 0x1c04d70, 0x36e52f,
+0x1646130, 0x310623, 0x1020001, 0x1c04dab,
+0x1646130, 0x310623, 0x1020001, 0x1c04de7,
+0x1377fff, 0x1ca3011, 0x1581ffe, 0x98bb12,
+0x1581fff, 0x18bb10, 0x36e56f, 0x1020001,
+0x1c04dff, 0x100f1b, 0x36e50f, 0x1581fff,
+0x18bb15, 0xc80620, 0x1581ffe, 0x98bb11,
+0x1377fff, 0x1c9b710, 0x366400, 0xd40004,
+0x118410, 0x360105, 0x1646110, 0x314627,
+0x360121, 0x1020001, 0x1c0b4b5, 0x36e50f,
+0x762a15, 0x762211, 0x1377fff, 0x1c9a193,
+0x760603, 0x366400, 0xd32003, 0x1005f2,
+0x36eb5f, 0x36e93f, 0x36e71f, 0x36fe37,
+0x36fc17, 0x1581ffe, 0x98bb17, 0x70000,
+0x1580000, 0x118bb17, 0x0, 0x37fb1f,
+0x37fd3f, 0x37ff5f, 0xc82210, 0xc82a12,
+0xc82616, 0x37f94f, 0xc82415, 0xc82011,
+0x361603, 0x1020001, 0x1c03c84, 0x36f92f,
+0x361603, 0x1377fff, 0x1c80011, 0x361483,
+0x360c23, 0x366403, 0x1020001, 0x1c0b9b5,
+0xc82015, 0x361423, 0x1377fff, 0x1c90111,
+0x361603, 0x1020001, 0x1c03c84, 0x36ff5f,
+0x36fd3f, 0x36fb1f, 0x1581fff, 0x118bb17,
+0x70000, 0x1580000, 0xd8bb17, 0x0,
+0x37fc17, 0x37fc9f, 0x37fe37, 0x37ff1f,
+0x1646100, 0xb11621, 0xc81249, 0xc80620,
+0xc80409, 0xd40014, 0x118411, 0x360001,
+0x8e2220, 0x11010a, 0xc81200, 0x1477fff,
+0x1c24400, 0x118305, 0x1020001, 0x1c08789,
+0x8f0400, 0x100f02, 0xc80420, 0x13b7523,
+0x1b03607, 0xd32023, 0x1005f1, 0x36ff1f,
+0x36fe37, 0x36fc17, 0x36fc9f, 0x1581fff,
+0x158bb17, 0x70000, 0x1580000, 0x98bb17,
+0x0, 0x37fc17, 0x37fc9f, 0x37fe37,
+0x361882, 0xc80420, 0x361aa2, 0x361c62,
+0x3606e2, 0xd40004, 0x118428, 0x144ffff,
+0x1c08760, 0xc81220, 0x8e2221, 0x11831f,
+0x881a41, 0x8e2223, 0x11830f, 0x1c07fff,
+0x1fffc00, 0x30360, 0xd83348, 0x1e08000,
+0x3a, 0x10624de, 0x190309, 0x8c1a03,
+0x880a21, 0x1407fff, 0x1cee31e, 0x3700e0,
+0x100f09, 0x1e08000, 0x3a, 0x10624de,
+0x190303, 0x880861, 0x1407fff, 0x1cee81e,
+0x3700e0, 0x360010, 0xc81c20, 0x8e22c1,
+0x118302, 0x3700e0, 0x13b65e1, 0x1b02605,
+0xd32002, 0x1005da, 0x3706e2, 0x36fe37,
+0x36fc9f, 0x36fc17, 0x1581fff, 0x198bb17,
+0x70000, 0x1580000, 0xd8bb17, 0x0,
+0x37fa17, 0x37fb1f, 0x37fc37, 0x37fd3f,
+0x37ff5f, 0x1646100, 0x1b11621, 0xc82612,
+0x1580005, 0x989b15, 0x1581fff, 0x588b10,
+0xc8003f, 0xc82415, 0x361013, 0x1020001,
+0x1c03c84, 0x361423, 0xc8003f, 0x1377fff,
+0x1c80111, 0x1581fff, 0x588312, 0xc82015,
+0x1020001, 0x1c03c84, 0x770003, 0x118216,
+0x1621c8e, 0x1989312, 0x1377fff, 0x1c80011,
+0xc81020, 0xc80420, 0xd40014, 0x118309,
+0x13b6565, 0x1b02605, 0x3600a0, 0x1377fff,
+0x1c83010, 0x80cca8, 0xd32022, 0x1082f9,
+0x1377fff, 0x1c80011, 0x770000, 0x370080,
+0x1002ec, 0x36ff5f, 0x36fd3f, 0x36fb1f,
+0x36fc37, 0x36fa17, 0x1581fff, 0x158bb17,
+0x70000, 0x1580000, 0x98bb17, 0x0,
+0x37fc17, 0x37fd1f, 0x37fe37, 0x1646100,
+0xb11621, 0xc80620, 0xd40014, 0x118408,
+0x360001, 0x1020001, 0x1c0877e, 0x13b7503,
+0x1b03607, 0xd32023, 0x1005fa, 0x36fd1f,
+0x36fe37, 0x36fc17, 0x1581fff, 0x198bb17,
+0x70000, 0x1580000, 0x158bb17, 0x0,
+0x37f617, 0x37fb1f, 0x37f837, 0x37fd3f,
+0x37ff5f, 0xc82210, 0xc82a12, 0xc82016,
+0x37f76f, 0x37f94f, 0x360800, 0x1377fff,
+0x1c9b710, 0xc82014, 0xc80220, 0x370000,
+0xc82016, 0x366436, 0xd40034, 0x118412,
+0x36f74f, 0x360125, 0x360101, 0x36f96f,
+0x361484, 0x360e24, 0x360c04, 0xc82813,
+0x1020001, 0x1c0b7bb, 0x762211, 0x762a15,
+0x1377fff, 0x1c9a193, 0x760201, 0xd32061,
+0x1005f0, 0x36f70f, 0x0, 0x361400,
+0x36f90f, 0x1377fff, 0x1c80010, 0x0,
+0x360000, 0x36f70f, 0x0, 0x370800,
+0x36ff5f, 0x36fd3f, 0x36fb1f, 0x36f837,
+0x36f617, 0x1581fff, 0xd8bb17, 0x70000,
+0x1580000, 0x98bb17, 0x0, 0x37fd1f,
+0x37ff3f, 0x16a0000, 0x188304, 0x1010000,
+0x404eea, 0x1377fff, 0x1ca3010, 0x1621c9c,
+0x1188310, 0xc82420, 0x770429, 0xc82c14,
+0x36000c, 0xe91000, 0x360100, 0xce0040,
+0x1377fff, 0x1c88016, 0x16a0000, 0x188304,
+0x1010000, 0x404edd, 0x169ffff, 0x1c21011,
+0x11826d, 0x360008, 0x770429, 0xe91008,
+0xce1048, 0x1377fff, 0x1c98110, 0x169ffff,
+0x1c21196, 0x11812f, 0x36008c, 0x771429,
+0xe91088, 0x770c29, 0x771c29, 0xce4248,
+0xce02c0, 0x771429, 0x6e1202, 0xce10c2,
+0xe81022, 0xcd0040, 0x370008, 0xce1240,
+0xc82402, 0x169ffff, 0x1c21092, 0x118179,
+0x36002a, 0xe91008, 0x771429, 0x770c29,
+0xe91022, 0xce4248, 0x771429, 0xce30c2,
+0x771c29, 0x770429, 0x6e40c8, 0xce02c0,
+0x1e08000, 0xffffff, 0x1fe0000, 0x187306,
+0xce4248, 0xe81088, 0xcd0200, 0x370008,
+0x1677fff, 0x1c00165, 0x1677fff, 0x1c10361,
+0xce02c0, 0xcd0002, 0x370008, 0x100f5d,
+0x169ffff, 0x1c21090, 0x11812c, 0x36000c,
+0x771029, 0xe9100a, 0x770c29, 0xce420a,
+0xce00c0, 0x1e0ffff, 0x1000000, 0x1fffe,
+0x18330a, 0x6e1048, 0x771029, 0xce1242,
+0x771429, 0xe81022, 0xcd0040, 0x37000c,
+0x1677fff, 0x1c00461, 0x1677fff, 0x1c10369,
+0xce0240, 0xcd0002, 0x37000c, 0x16a0000,
+0x189304, 0x118106, 0x1621c9c, 0x1188310,
+0x0, 0x370140, 0x100f3a, 0x1e08000,
+0xffffff, 0x1fe0000, 0x184300, 0xc80414,
+0x1677fff, 0x1c00065, 0xce1202, 0xcd0040,
+0x37000a, 0x100f2f, 0xc82410, 0x770429,
+0xce0040, 0xc82000, 0x16a0000, 0x188304,
+0x108192, 0x16a0000, 0x189304, 0x110118,
+0x1e0ffff, 0x1000000, 0x1fffe, 0x181300,
+0xc81014, 0x1677fff, 0x1c00065, 0x1e0ffff,
+0x1000000, 0x1fffe, 0x18330a, 0x1677fff,
+0x1c10169, 0xce0240, 0x771429, 0xcd0002,
+0xce1248, 0x37000c, 0x1677fff, 0x1c00365,
+0xcd0040, 0x37000a, 0x100f0e, 0x1e0ffff,
+0x1000000, 0x1c9c8, 0x180310, 0x770429,
+0x1677fff, 0x1c00069, 0x360120, 0x370140,
+0xc81012, 0xce1048, 0xcd0040, 0x37000c,
+0x36ff3f, 0x36fd1f, 0x1581fff, 0x198bb17,
+0x70000, 0x1580000, 0x98bb17, 0x0,
+0x37fd1f, 0x37ff3f, 0x16a0000, 0x188304,
+0x1010000, 0x404f9f, 0x1377fff, 0x1ca3010,
+0x1621c9c, 0x1588310, 0xc82420, 0x770429,
+0xc82c14, 0x360004, 0xe91000, 0x360100,
+0xce0040, 0x1377fff, 0x1c88016, 0x16a0000,
+0x188304, 0x1010000, 0x404f92, 0x169ffff,
+0x1c21011, 0x11826d, 0x360020, 0x770029,
+0xe91028, 0xce0008, 0x1377fff, 0x1c98010,
+0x169ffff, 0x1c21196, 0x11812f, 0x360084,
+0x771429, 0xe91088, 0x770c29, 0x771c29,
+0xce4248, 0xce52c2, 0x770429, 0x6e0200,
+0xce00c0, 0xe81000, 0xcd000a, 0x370000,
+0xce1040, 0xc82402, 0x169ffff, 0x1c21092,
+0x118179, 0x360022, 0xe91008, 0x771429,
+0x770c29, 0xe91022, 0xce4248, 0x771429,
+0xce30c2, 0x771c29, 0x770429, 0x6e40c8,
+0xce02c0, 0x1e08000, 0xffffff, 0x1fe0000,
+0x187306, 0xce4248, 0xe81088, 0xcd0200,
+0x370000, 0x1677fff, 0x1c00164, 0x1677fff,
+0x1c10360, 0xce02c0, 0xcd0002, 0x370000,
+0x100f5d, 0x169ffff, 0x1c21090, 0x11812c,
+0x360084, 0x771429, 0x770429, 0xe91086,
+0x771c29, 0xce5246, 0xce32c8, 0x1e0ffff,
+0x1000000, 0x1fffe, 0x18430e, 0x6e000a,
+0x771429, 0xce0040, 0xe81000, 0xcd0006,
+0x370004, 0x1677fff, 0x1c00760, 0x1677fff,
+0x1c10468, 0xce0240, 0xcd0002, 0x370004,
+0x16a0000, 0x189304, 0x118106, 0x1621c9c,
+0x1588310, 0x0, 0x370140, 0x100f3a,
+0x1e08000, 0xffffff, 0x1fe0000, 0x184300,
+0xc80414, 0x1677fff, 0x1c00064, 0xce1202,
+0xcd0040, 0x370002, 0x100f2f, 0xc82410,
+0x770029, 0xce0002, 0xc82000, 0x16a0000,
+0x188304, 0x108192, 0x16a0000, 0x189304,
+0x110118, 0x1e0ffff, 0x1000000, 0x1fffe,
+0x181300, 0xc81014, 0x1677fff, 0x1c00064,
+0x1e0ffff, 0x1000000, 0x1fffe, 0x18330a,
+0x1677fff, 0x1c10168, 0xce0240, 0x771429,
+0xcd0002, 0xce1248, 0x370004, 0x1677fff,
+0x1c00364, 0xcd0040, 0x370002, 0x100f0e,
+0x1e0ffff, 0x1000000, 0x1c9ca, 0x180310,
+0x770429, 0x1677fff, 0x1c00068, 0x360120,
+0xc81012, 0xce1048, 0xcd0040, 0x370004,
+0x370140, 0x36ff3f, 0x36fd1f, 0x1581fff,
+0x198bb17, 0x70000, 0x1580000, 0x98bb17,
+0x0, 0x37fd1f, 0x37ff3f, 0xc82614,
+0xc82212, 0xc82810, 0x158000c, 0x18a312,
+0x158000c, 0x198a310, 0x11b8008, 0xdd3c,
+0x360601, 0x11b8000, 0xd80c, 0x360006,
+0x11b8000, 0xda0c, 0xc82811, 0x1020001,
+0x1c09cd0, 0x36ff3f, 0x36fd1f, 0x1581fff,
+0x198bb17, 0x70000, 0xc82c12, 0x1580003,
+0x198b314, 0x1377fff, 0x1c94016, 0xc80020,
+0x130f03, 0x0, 0x70000, 0x1580001,
+0x118bb17, 0x0, 0x37e817, 0x37f69f,
+0x37ea37, 0x37f8bf, 0x37fb1f, 0x37fd3f,
+0x37ff5f, 0x37e90f, 0xc80200, 0xd40014,
+0x118107, 0x36e90f, 0x0, 0x11b0000,
+0xd808, 0xe90103, 0x100f06, 0x36e90f,
+0x0, 0x11b0000, 0xd808, 0xe90203,
+0xc81640, 0x37eb6f, 0xc81220, 0x37ed2f,
+0x37ef4f, 0x36e90f, 0x158000c, 0x188310,
+0x37f10f, 0x36f10f, 0x0, 0x360000,
+0xd40004, 0x110131, 0x36eb0f, 0x0,
+0x360100, 0x16a0000, 0x188304, 0x11012b,
+0x36ef0f, 0x0, 0x360120, 0x16a0000,
+0x189304, 0x118104, 0x36ed0f, 0x0,
+0x360120, 0x1621cbd, 0xd88310, 0xc81025,
+0x1620006, 0x181302, 0xc80022, 0xc82610,
+0x36eb0f, 0x7d1041, 0x7d4209, 0x360100,
+0x37f30f, 0x1621cbc, 0x588310, 0x36ed4f,
+0xc82210, 0x36e90f, 0x360144, 0x1376130,
+0x1080110, 0x1377fff, 0x1ca8410, 0x1580006,
+0x18ab10, 0x37f54f, 0x36e94f, 0x37ff07,
+0x36f50f, 0x11b0008, 0xdd6c, 0x36f34f,
+0x1020001, 0x1c0ac24, 0x36eb0f, 0x77160b,
+0x761209, 0x762010, 0x37eb0f, 0x36ed0f,
+0x762010, 0x37ed0f, 0x36f10f, 0x762010,
+0x37f10f, 0x36ef0f, 0x762010, 0x37ef0f,
+0xd400b4, 0x1004bc, 0x36ff5f, 0x36fd3f,
+0x36fb1f, 0x36ea37, 0x36e817, 0x36f8bf,
+0x36f69f, 0x1581ffe, 0x118bb17, 0x70000,
+0x1580000, 0x158bb17, 0x0, 0x37f617,
+0x37f89f, 0x37f837, 0x37fb1f, 0x37fd3f,
+0x37ff5f, 0xc82212, 0x37f70f, 0xc82416,
+0xc80022, 0x1580008, 0x588310, 0x1020001,
+0x1c03c84, 0x36f70f, 0x360a21, 0xc80048,
+0x11b8000, 0x40e28, 0x360421, 0x14bffff,
+0x1c12002, 0x1c47f00, 0x208000, 0x60,
+0xa05302, 0xc91802, 0x1020001, 0x1c08e17,
+0x11b8000, 0x8808, 0x1e08000, 0x3c,
+0x47ae14, 0x190300, 0x360621, 0x11b8000,
+0x8a28, 0x360421, 0xe90122, 0x14bffff,
+0x1c12002, 0x1c47f00, 0x208000, 0x60,
+0xa05302, 0x11b8000, 0x8628, 0x11b0000,
+0x8a88, 0x360421, 0x14bffff, 0x1c42008,
+0x1c47f00, 0x208000, 0x61, 0x205308,
+0x14bffff, 0x1c12002, 0x1c47f00, 0x208000,
+0x60, 0xa05302, 0xc91808, 0x8c0002,
+0x1020001, 0x1c08e17, 0x1020001, 0x1c02c39,
+0x36f70f, 0x14b6100, 0x1003000, 0xe80100,
+0x14b7e00, 0x802002, 0x11b8000, 0x22608,
+0xd40004, 0x110405, 0x36f70f, 0xc80021,
+0x11b8000, 0x22608, 0x36f70f, 0xc80048,
+0x11b0000, 0x8a88, 0x11b0000, 0x22628,
+0x7d1202, 0x14bffff, 0x1c12002, 0x1c47f00,
+0x208000, 0x60, 0xa05302, 0xc91802,
+0x1020001, 0x1c08e17, 0x11b8000, 0x22008,
+0x1580008, 0x1988310, 0x360201, 0x1020001,
+0x1c03e4c, 0x1621c8f, 0x1988b11, 0x36f70f,
+0xc80027, 0xc82411, 0x1377fff, 0x1c82390,
+0x1020001, 0x1c03c84, 0xc82411, 0x36f70f,
+0xc80027, 0x1020001, 0x1c03c84, 0x36f70f,
+0x1e0a064, 0x10fdb00, 0x0, 0x184b00,
+0xc80420, 0xc80220, 0x1620001, 0x981b03,
+0x158001e, 0x1d88315, 0x1580002, 0x1988311,
+0x1580001, 0x1188313, 0x11b8000, 0x22a08,
+0x11b8000, 0x22808, 0x11b8000, 0x8028,
+0x36f70f, 0x1467fff, 0x1c004e2, 0x11b0000,
+0x8828, 0x8c0040, 0x370005, 0xc80001,
+0x360023, 0x1020001, 0x1c05748, 0x762a15,
+0x762211, 0x762613, 0x770603, 0x760201,
+0xd40034, 0x1004ef, 0x36f70f, 0x1020001,
+0x1c05720, 0x36f70f, 0xc80420, 0xc80021,
+0x11b8000, 0x22828, 0x1020001, 0x1c052f5,
+0x36f70f, 0x0, 0x11b0000, 0x40e08,
+0xd40004, 0x11010e, 0x36f70f, 0xc80020,
+0x11b0000, 0x8428, 0x158000f, 0x1d88310,
+0x770402, 0x1020001, 0x1c052cc, 0x36f70f,
+0x0, 0x11b8000, 0x41208, 0x36f70f,
+0x1020001, 0x1c053c6, 0x36ff5f, 0x36fd3f,
+0x36fb1f, 0x36f837, 0x36f617, 0x36f89f,
+0x1581fff, 0xd8bb17, 0x70000, 0xc80c20,
+0xd40004, 0x118111, 0xc81020, 0xc81448,
+0x8e2202, 0x118235, 0x8e2242, 0x110333,
+0x1377fff, 0x1c90010, 0xc80020, 0x374022,
+0x11b0000, 0x8028, 0xcd10c2, 0x11b8000,
+0x8028, 0x100f2a, 0xd40104, 0x118106,
+0x1e0a0a0, 0xc1, 0x800000, 0x185308,
+0x100fec, 0xd40204, 0x11051e, 0xd40c04,
+0x118507, 0x1e0a0e0, 0xc1, 0x1800000,
+0x185308, 0xc80c21, 0x100fe2, 0xd41604,
+0x11850c, 0x1e0a0d0, 0x46, 0x1770000,
+0x18430a, 0x11b0000, 0x8668, 0x8e20ca,
+0x110202, 0x100f09, 0xc81406, 0x100f07,
+0xd42004, 0x118507, 0x1e0a31d, 0x180003f,
+0x1000000, 0x185308, 0xc80c21, 0x100fcd,
+0xc80021, 0x100f02, 0xc80022, 0x0,
+0x70000, 0x1580001, 0x158bb17, 0x0,
+0x37fe17, 0x37e71f, 0x37e93f, 0x37eb5f,
+0xc82a10, 0xc82212, 0xc82015, 0x1020001,
+0x1c05777, 0x11b0000, 0x40e0d, 0xd40004,
+0x110105, 0xc82411, 0xc82015, 0x1020001,
+0x1c05239, 0x11b0000, 0x8c2d, 0xc80020,
+0xd40024, 0x11841e, 0x1377fff, 0x1c80015,
+0x1581ffe, 0xd8bb14, 0x1581fff, 0x58bb12,
+0x1580008, 0x1d88310, 0x1377fff, 0x1ca0014,
+0x1377fff, 0x1c90012, 0x760000, 0x360020,
+0x1377fff, 0x1cb0111, 0x0, 0x360166,
+0x370164, 0x360020, 0x1377fff, 0x1c80111,
+0x0, 0x360d00, 0x370102, 0x11b0000,
+0x8c2d, 0xd32040, 0x1005e4, 0x360005,
+0xb00000, 0x118124, 0x11b0000, 0x2220d,
+0xd40004, 0x11814f, 0x36e707, 0x36f327,
+0x169ffff, 0x1c21110, 0x1010000, 0x405232,
+0x1581fff, 0x58bb11, 0x11b0000, 0x8c0d,
+0xc80220, 0x1581ffe, 0xd8bb13, 0xd40004,
+0x1010010, 0x1005232, 0x11b0000, 0x8a0d,
+0x360123, 0x360101, 0x1020001, 0x1c03c84,
+0x762211, 0x762613, 0x11b0000, 0x8c0d,
+0x760201, 0xd32001, 0x1005f4, 0x1008001,
+0x1c05232, 0x11b0000, 0x2220d, 0xd40004,
+0x11812c, 0x1580022, 0x198ab16, 0x11b0000,
+0x8a0d, 0x1580009, 0x158ab14, 0x1581ffe,
+0xd8bb12, 0x1581fff, 0x58bb10, 0x1020001,
+0x1c05833, 0x158000a, 0x98ab13, 0x11b0000,
+0x840d, 0xc80221, 0x1580025, 0x198ab11,
+0xd40104, 0x11847b, 0xc82c11, 0xc82813,
+0x1581fff, 0x58bb12, 0x11b0000, 0x8a0d,
+0x1581fff, 0x58bb10, 0x11b0000, 0x8c2d,
+0x1020001, 0x1c05833, 0x11b0000, 0x840d,
+0x760201, 0x1377fff, 0x1c9c093, 0x1580003,
+0x188b11, 0xd32001, 0x1005ec, 0x100f65,
+0x11b0000, 0x2240d, 0xd40004, 0x118112,
+0x1580021, 0xd8ab16, 0x11b0000, 0x8c2d,
+0x1580009, 0x158ab14, 0x11b0000, 0x8a0d,
+0x1581ffe, 0xd8bb12, 0x1581fff, 0x58bb10,
+0x1580022, 0x198ab11, 0x1020001, 0x1c0585c,
+0x100f0f, 0x1580022, 0x198ab16, 0x11b0000,
+0x8a0d, 0x1580009, 0x158ab14, 0x11b0000,
+0x8c2d, 0x1581ffe, 0xd8bb12, 0x1581fff,
+0x58bb10, 0x1020001, 0x1c05833, 0x158000a,
+0x98ab13, 0x11b0000, 0x840d, 0xc80221,
+0x1580025, 0x198ab11, 0xd40104, 0x110427,
+0x11b0000, 0x2220d, 0x770000, 0x11b8000,
+0x2220d, 0x118133, 0xc82015, 0x1020001,
+0x1c05321, 0x11b0000, 0x2220d, 0xd40004,
+0x11812c, 0xc82015, 0x1020001, 0x1c053c6,
+0x100f28, 0xc82c11, 0xc82813, 0x1581fff,
+0x58bb12, 0x11b0000, 0x8a0d, 0x1581fff,
+0x58bb10, 0x11b0000, 0x8c2d, 0x1020001,
+0x1c05833, 0x11b0000, 0x840d, 0x760201,
+0x1377fff, 0x1c9c093, 0x1580003, 0x188b11,
+0xd32001, 0x1085db, 0x11b0000, 0x2240d,
+0xd32001, 0x1081e8, 0x1580021, 0xd8ab16,
+0xc82813, 0x11b0000, 0x8c2d, 0x1581fff,
+0x58bb12, 0x11b0000, 0x8a0d, 0x1581fff,
+0x58bb10, 0x1020001, 0x1c0585c, 0x100fe6,
+0x36eb5f, 0x36e93f, 0x36e71f, 0x36fe17,
+0x1581ffe, 0xd8bb17, 0x70000, 0x1580000,
+0x98bb17, 0x0, 0x37fc17, 0x37fd1f,
+0x37fe37, 0x37ff3f, 0xc82210, 0xc82612,
+0x11b0000, 0x40e09, 0xc80620, 0xd40004,
+0x11041b, 0x11b0000, 0x22209, 0xd40004,
+0x11017b, 0x11b0000, 0x22409, 0x11b0000,
+0x8429, 0xd32040, 0x118175, 0x11b0000,
+0x8a09, 0x14bffff, 0x1c02000, 0x1c47f00,
+0x208000, 0x60, 0x205300, 0x11b0000,
+0x41429, 0x11b0000, 0x41089, 0x808408,
+0x11b8000, 0x41009, 0x100f65, 0x11b0000,
+0x8c09, 0xc80220, 0xd40004, 0x11041f,
+0x11b0000, 0x40e09, 0x760603, 0xd32003,
+0x1085dd, 0x100ff6, 0x1377fff, 0x1c80091,
+0xc80040, 0x11b0000, 0x8a29, 0x7d4003,
+0x1377fff, 0x1c90413, 0x11b0000, 0x41009,
+0x11b0000, 0x8e88, 0x1377fff, 0x1c80412,
+0x0, 0x363120, 0x363d00, 0x1020001,
+0x1c08cc6, 0x11b0000, 0x8c09, 0x760201,
+0xd32001, 0x1085e3, 0x1377fff, 0x1c80091,
+0xc80040, 0x7d0003, 0x1377fff, 0x1c90013,
+0x11b0000, 0x8e08, 0x1377fff, 0x1c80012,
+0x0, 0x363120, 0x16a0000, 0x189304,
+0x1001ed, 0x363d00, 0x16a0000, 0x188304,
+0x1001e9, 0x360001, 0xb00000, 0x11810d,
+0x11b0000, 0x22209, 0xd40004, 0x11810d,
+0x169ffff, 0x1c21012, 0x1001df, 0x11b0000,
+0x8a09, 0x1020001, 0x1c03c84, 0x100fda,
+0x11b0000, 0x22209, 0xd40004, 0x1001c3,
+0x11b0000, 0x22409, 0x11b0000, 0x8429,
+0xd32040, 0x1081bd, 0x1377fff, 0x1c80091,
+0xc80040, 0x11b0000, 0x8a89, 0x7d0003,
+0x11b0000, 0x41429, 0x1377fff, 0x1c90013,
+0x11b0000, 0x8ea8, 0x1377fff, 0x1c80512,
+0x11b0000, 0x41009, 0x363120, 0x363d00,
+0x1020001, 0x1c08723, 0x100fbb, 0x36ff3f,
+0x36fd1f, 0x36fe37, 0x36fc17, 0x1581fff,
+0x198bb17, 0x70000, 0x1580000, 0x98bb17,
+0x0, 0x37fc17, 0x37fc9f, 0x37fe37,
+0xc81000, 0xc81c41, 0xc80c48, 0x1646162,
+0x130060d, 0x7d72c8, 0x1377fff, 0x1c80710,
+0xd32048, 0x110411, 0x3604e0, 0x1447fff,
+0x1c08360, 0x761008, 0x360630, 0x89706e,
+0x360890, 0x360230, 0x1377fff, 0x1c84090,
+0x88722e, 0x890861, 0x8c02c0, 0x8c502a,
+0xd32048, 0x1084f1, 0xc9180a, 0x1020001,
+0x1c08e17, 0x36fe37, 0x36fc9f, 0x36fc17,
+0x1581fff, 0x198bb17, 0x70000, 0x1580000,
+0x98bb17, 0x0, 0x37fe17, 0x37ff1f,
+0x1646120, 0xb11621, 0xd40104, 0x118108,
+0x1580016, 0x1988b12, 0x1580016, 0x588b10,
+0xc80041, 0x1020001, 0x1c03c84, 0xc80001,
+0x1020001, 0x1c0877e, 0x158000f, 0x1d88b10,
+0x11b0000, 0x16629, 0x8c1002, 0x370420,
+0x11b0000, 0x16829, 0x8c1002, 0x370620,
+0x11b0000, 0x16a29, 0x8c0002, 0x370800,
+0x11b0000, 0x16209, 0x370000, 0x11b0000,
+0x16409, 0x370200, 0x36ff1f, 0x36fe17,
+0x1581fff, 0x198bb17, 0x70000, 0x1580000,
+0x98bb17, 0x0, 0x37fe17, 0x37ff1f,
+0xc82210, 0x11b0000, 0x22408, 0xd40b04,
+0x118113, 0xc80020, 0x11b8000, 0x22409,
+0x11b0000, 0x22829, 0x11b0000, 0x22a89,
+0x8e2202, 0x110106, 0x1646180, 0x1310623,
+0xc80020, 0x130fbe, 0x100f1a, 0xc82011,
+0xc80021, 0x130fba, 0x100f16, 0xd40004,
+0x11810f, 0x11b0000, 0x22829, 0x11b0000,
+0x22a09, 0x8e2002, 0x110109, 0x11b8000,
+0x22809, 0xc82011, 0xc80021, 0x11b0000,
+0x22829, 0x130faa, 0x100f06, 0x11b0000,
+0x22409, 0x760000, 0x11b8000, 0x22409,
+0x11b0000, 0x8409, 0x11b0000, 0x22419,
+0xd32001, 0x11852c, 0xc80441, 0xc80041,
+0x7d1041, 0x1377fff, 0x1c80111, 0x1580009,
+0x1588312, 0x158000f, 0x1d88310, 0x1020001,
+0x1c0b9ec, 0xd40004, 0x110116, 0x1580021,
+0xd88b10, 0x11b0000, 0x22609, 0xc80441,
+0x11b8000, 0x22209, 0x11b0000, 0x22409,
+0x7d1040, 0x11b0000, 0x22009, 0x1377fff,
+0x1c90111, 0x1580009, 0x1589314, 0x158000f,
+0x1d89312, 0x1020001, 0x1c0b593, 0x100f0a,
+0x760001, 0x11b8000, 0x22409, 0x11b0000,
+0x8409, 0x11b0000, 0x22419, 0xd32001,
+0x1005d6, 0x11b0000, 0x40e09, 0xd40004,
+0x110125, 0x11b0000, 0x22209, 0xd40004,
+0x118129, 0x11b0000, 0x22429, 0x11b0000,
+0x8409, 0xd32002, 0x11811b, 0x770400,
+0x158000f, 0x1d88b10, 0xc80020, 0x1020001,
+0x1c052cc, 0x11b8000, 0x41209, 0x11b0000,
+0x41029, 0x8e2040, 0x11010f, 0x11b0000,
+0x22609, 0x11b8000, 0x22209, 0x11b0000,
+0x41209, 0x11b0000, 0x41029, 0x890040,
+0x11b0000, 0x22089, 0x8c0200, 0x11b8000,
+0x41409, 0x11b0000, 0x22209, 0xd40004,
+0x118105, 0x1620001, 0xd80300, 0x11b8000,
+0x22409, 0x36ff1f, 0x36fe17, 0x1581fff,
+0x198bb17, 0x70000, 0xc80400, 0xc81041,
+0xc80041, 0x7d1202, 0x1377fff, 0x1c80110,
+0x158000f, 0x1d88312, 0x1580009, 0x1588310,
+0x1020001, 0x1c03c84, 0x0, 0x70000,
+0x100751f, 0x1800000, 0x37ff1f, 0xc82210,
+0x11b0000, 0x8408, 0xc80220, 0xd40004,
+0x118409, 0x1646110, 0x310623, 0x130fe7,
+0x11b0000, 0x8409, 0x760201, 0xd32001,
+0x1005f9, 0x11b0000, 0x41209, 0xc80420,
+0x1620001, 0xd84308, 0x11b8000, 0x41009,
+0x11b8000, 0x22229, 0x11b8000, 0x22489,
+0x36ff1f, 0x36fe17, 0x772e17, 0x70000,
+0xc80448, 0xc80020, 0x370420, 0x370600,
+0x370800, 0x370000, 0x370200, 0x70000,
+0x1580000, 0x1d8bb17, 0x0, 0x37f417,
+0x37f69f, 0x37f637, 0x37f8bf, 0x37f877,
+0x37faff, 0x35fa57, 0x37fd1f, 0x35fedf,
+0x1646122, 0xb11621, 0xc80608, 0x1467fff,
+0x1c04380, 0x1020001, 0x1c0877e, 0xc80200,
+0xb00011, 0x118105, 0x1e08000, 0x2d,
+0x5fd7fe, 0x190301, 0x1e08000, 0x40,
+0x10b020c, 0x190300, 0x8c0009, 0x8e2060,
+0x110202, 0xc80600, 0x1e08000, 0x3f,
+0x555556, 0x190300, 0x806039, 0xc9000d,
+0x1020001, 0x1c07bb0, 0x37f40f, 0x1e09fd9,
+0x133333f, 0x1000000, 0x184300, 0xc91809,
+0x891001, 0x1406130, 0xe6110, 0x1020001,
+0x1c08e17, 0x1e09f66, 0xcccd3f, 0x69fbe8,
+0x18730a, 0x890240, 0x859c08, 0x164e160,
+0x30c601, 0x1020001, 0x1c08e17, 0x858420,
+0x110205, 0x1e08000, 0x38, 0x1a36e2e,
+0x190300, 0x1020001, 0x1c08cfd, 0xc80e48,
+0x37f2b7, 0x164e152, 0x1b05601, 0xc80a0b,
+0x36f2b7, 0x8918e1, 0x36f40f, 0x8848e1,
+0x14660d0, 0x58003, 0x887a2b, 0x1020001,
+0x1c07b7d, 0x8c1005, 0x88004f, 0x164e170,
+0x30c601, 0x1020001, 0x1c08e17, 0x894269,
+0x36f4af, 0xc80c2d, 0x8c5249, 0x887048,
+0x894048, 0x8c58c1, 0x8912e2, 0x894a43,
+0x88186a, 0x8c502e, 0x8c4028, 0x8c7269,
+0x8c500a, 0x8c30c3, 0x8c4008, 0x3704a1,
+0x8c700e, 0x8c3006, 0x8c0002, 0x3706e1,
+0x370881, 0x370061, 0x370201, 0xc80e05,
+0x34fa57, 0x16461d3, 0x1b0560f, 0x34fedf,
+0xc81a0f, 0x36fd1f, 0x36f877, 0x36f637,
+0x36faff, 0x36f417, 0x36f8bf, 0x36f69f,
+0x1581fff, 0x58bb17, 0x70000, 0x1580000,
+0xd8bb17, 0x0, 0x37fc17, 0x37fc9f,
+0x37fe37, 0x37ff1f, 0x1646120, 0x1b11621,
+0xc81208, 0x1020001, 0x1c0877e, 0xc80200,
+0xb00011, 0x118105, 0x1e08000, 0x2d,
+0x5fd7fe, 0x190301, 0xc80001, 0x1020001,
+0x1c08cfd, 0x164e190, 0x30c601, 0x1020001,
+0x1c08e17, 0xc80448, 0x884040, 0x890040,
+0xc91808, 0x1020001, 0x1c08e17, 0x894022,
+0x1cb8000, 0x612c, 0x1833060, 0x1998321,
+0x887041, 0x895002, 0x8c10c8, 0x8c70ce,
+0x8c4228, 0x8c086a, 0x85e02e, 0x8c306e,
+0x8c4068, 0x142ffff, 0x1ce20e2, 0x8c3246,
+0x370491, 0x87d486, 0x370681, 0x370821,
+0x370011, 0x370201, 0x36ff1f, 0x36fe37,
+0x36fc17, 0x36fc9f, 0x1581fff, 0x158bb17,
+0x70000, 0x1580000, 0x1d8bb17, 0x0,
+0x37f417, 0x37f69f, 0x37f637, 0x37f8bf,
+0x37f877, 0x37faff, 0x35fa57, 0x37fd1f,
+0x35fedf, 0x1646120, 0x1b11621, 0x1e09eb9,
+0x1f4843f, 0x15d70a4, 0x18130a, 0x1467fff,
+0x1c04380, 0x87f482, 0x1020001, 0x1c0877e,
+0xc80200, 0xb00011, 0x118105, 0x1e08000,
+0x2d, 0x5fd7fe, 0x190301, 0x1e08000,
+0x3f, 0x1666666, 0x190300, 0x8c0003,
+0x8e2220, 0x110202, 0xc81200, 0x1e08000,
+0x3e, 0x1cccccc, 0x190300, 0x856093,
+0xc9000d, 0x1020001, 0x1c07bb0, 0x37f40f,
+0x1e09fd9, 0x133333f, 0x1000000, 0x184300,
+0xc91803, 0x891001, 0x1406190, 0xe6110,
+0x1020001, 0x1c08e17, 0x1e08000, 0x3f,
+0x69fbe8, 0x19030a, 0x890240, 0x1c2ffff,
+0x1fffc00, 0x30065, 0x1580308, 0x164e160,
+0x30c601, 0x1020001, 0x1c08e17, 0x858420,
+0x110205, 0x1e08000, 0x38, 0x1a36e2e,
+0x190300, 0x1020001, 0x1c08cfd, 0xc80e48,
+0x37f2b7, 0x164e152, 0x1b05601, 0xc80a0b,
+0x36f2b7, 0x8948e1, 0x36f40f, 0x8818e1,
+0x14660d0, 0x58009, 0x897a63, 0x1020001,
+0x1c07b7d, 0x8c1005, 0x88004f, 0x164e170,
+0x30c601, 0x1020001, 0x1c08e17, 0x88406b,
+0x36f4af, 0xc80c32, 0x8c5243, 0x887048,
+0x894048, 0x8c58c1, 0x8912e2, 0x881a2a,
+0x894a49, 0x8c502e, 0x8c4028, 0x8c7263,
+0x8c500a, 0x8c30c9, 0x8c4008, 0x3704a1,
+0x8c700e, 0x8c3006, 0x8c0002, 0x3706e1,
+0x370881, 0x370061, 0x370201, 0xc80e05,
+0x34fa57, 0x16461d3, 0x1b0560f, 0x34fedf,
+0xc81a0f, 0x36fd1f, 0x36f877, 0x36f637,
+0x36faff, 0x36f417, 0x36f8bf, 0x36f69f,
+0x1581fff, 0x58bb17, 0x70000, 0x1580000,
+0x98bb17, 0x0, 0x37fe17, 0x1646182,
+0x1306615, 0x36fa87, 0x36f8e7, 0x36f617,
+0xb000aa, 0x118104, 0x1020001, 0x1c053e6,
+0x100f15, 0xd40004, 0x118106, 0x16461a0,
+0x30260d, 0x1020001, 0x1c053ee, 0x100f0e,
+0x770402, 0xd32040, 0x118106, 0x16461a0,
+0x30260d, 0x1020001, 0x1c054af, 0x100f06,
+0x16461e0, 0x1308603, 0xc8000a, 0x1020001,
+0x1c05471, 0x36fe17, 0x1581fff, 0x198bb17,
+0x70000, 0x1580000, 0x198bb17, 0x0,
+0x37f417, 0x37f49f, 0x37f637, 0x37f6bf,
+0x37f877, 0x37f8ff, 0x37fb1f, 0x37fd3f,
+0x37ff5f, 0xc81000, 0x1377fff, 0x1c80410,
+0x1377fff, 0x1ca0414, 0x1377fff, 0x1cb0416,
+0x1377fff, 0x1c88411, 0xd32048, 0x110431,
+0x1377fff, 0x1ca8413, 0x360212, 0xc80620,
+0x3600a1, 0x360065, 0x360002, 0x8c4826,
+0x360074, 0x1407fff, 0x1ceba09, 0x1c2ffff,
+0x1fffc00, 0x30960, 0x183b48, 0x8f000b,
+0x3604e2, 0x8c5800, 0x360602, 0x1407fff,
+0x1ce707e, 0x3608e2, 0x8c7ac6, 0x360066,
+0x1407fff, 0x1cea0af, 0x809c67, 0x142ffff,
+0x1ce6169, 0x1407fff, 0x1ce666b, 0x8e2066,
+0x118103, 0x370030, 0x100f07, 0x8c524a,
+0xc91806, 0x80800a, 0x1020001, 0x1c08e17,
+0x370000, 0x762010, 0x762814, 0x762c16,
+0x762211, 0x761008, 0xd32048, 0x1084d1,
+0x36ff5f, 0x36fd3f, 0x36fb1f, 0x36f877,
+0x36f637, 0x36f417, 0x36f8ff, 0x36f6bf,
+0x36f49f, 0x1581fff, 0x98bb17, 0x70000,
+0x1580001, 0x18bb17, 0x0, 0x37f217,
+0x37fb1f, 0x37f437, 0x37fd3f, 0x37ff5f,
+0x37f30f, 0x1377fff, 0x1caa110, 0x158001d,
+0x1588310, 0xc80220, 0x37f50f, 0x36f30f,
+0x158001e, 0x1d88313, 0x1580020, 0x588311,
+0x11b0000, 0x8438, 0xd40034, 0x11845e,
+0x360005, 0x370001, 0xd40014, 0x118106,
+0x360205, 0x144ffff, 0x1c06500, 0x900000,
+0x100f13, 0x770003, 0xd32001, 0x118106,
+0x36fe05, 0x144ffff, 0x1c0006a, 0x900000,
+0x100f0b, 0x360005, 0x360225, 0x36fe85,
+0x891002, 0x890200, 0x900402, 0x900000,
+0x880002, 0x1467fff, 0x1c04380, 0x14bffff,
+0x1c12123, 0x8e2040, 0x118302, 0xc80002,
+0x36f50f, 0x1e09eee, 0xac0841, 0x800000,
+0x185308, 0x1e09fe4, 0x10fdb3f, 0x69fbe8,
+0x181306, 0x890008, 0x809406, 0x1467fff,
+0x1c00060, 0x370003, 0x8e2040, 0x118302,
+0x370023, 0x36f30f, 0x1467fff, 0x1c043e6,
+0x1377fff, 0x1c80090, 0x37f70f, 0x158001c,
+0xd88310, 0x37f90f, 0x1020001, 0x1c07cb1,
+0x36f90f, 0xc80441, 0x370000, 0x7d0041,
+0x36f72f, 0x360060, 0x36f30f, 0x360023,
+0x1377fff, 0x1c80010, 0x11b0000, 0x1760a,
+0x37fe27, 0x36f52f, 0xc80403, 0x158000f,
+0x1d88310, 0x360081, 0x3600a2, 0x37fc07,
+0xc80001, 0x37fa67, 0x1020001, 0x1c05539,
+0x36f50f, 0x762211, 0x762613, 0x762a15,
+0x760201, 0x762010, 0x37f50f, 0xd32061,
+0x1005a4, 0x36f30f, 0xc80024, 0x11b8000,
+0x40c08, 0x36ff5f, 0x36fd3f, 0x36fb1f,
+0x36f437, 0x36f217, 0x1581fff, 0x18bb17,
+0x70000, 0x1580003, 0x98bb17, 0x0,
+0x37f617, 0x37d69f, 0x37f837, 0x37d91f,
+0x37db3f, 0x37dd5f, 0xc82a10, 0x158001e,
+0x1d8ab12, 0x1581ffe, 0x58bb10, 0xc80021,
+0x762010, 0x37cf2f, 0x158001d, 0x158ab12,
+0x11b0000, 0x843d, 0x1377fff, 0x1c0b083,
+0x37d12f, 0x110106, 0xc80448, 0x13b7521,
+0x1b00601, 0xd32020, 0x1084fd, 0xc81220,
+0xd40034, 0x11842a, 0x158001b, 0x58ab10,
+0x1580018, 0x158ab16, 0xc80441, 0xc80021,
+0xc82610, 0x1580019, 0x1d8ab10, 0x1580017,
+0xd8ab14, 0x7d1049, 0xc82210, 0x1376110,
+0x1090115, 0x1581ffc, 0x1d8bb10, 0x158000f,
+0x1d89312, 0x1020001, 0x1c0555f, 0x1581ffe,
+0x58bb10, 0x1581ffc, 0x1d8bb12, 0xc80021,
+0x762010, 0x762412, 0xd40014, 0x110109,
+0x13b6525, 0x1b00601, 0x1467fff, 0x1c10160,
+0x1007521, 0x1800000, 0xd32020, 0x1084f9,
+0x761209, 0xd32069, 0x1005d8, 0x1581ffe,
+0x58bb11, 0xc80621, 0x762211, 0xd40014,
+0x11010c, 0x14bffff, 0x1c4a0c1, 0x360001,
+0x1020001, 0x1c07e01, 0x8c0220, 0x760603,
+0x1007503, 0x1800000, 0xd32023, 0x1084f8,
+0x1581ffe, 0x58bb10, 0x1377fff, 0x1c92195,
+0x1580020, 0x98ab11, 0xc81221, 0x762010,
+0x1580010, 0x118ab13, 0x37d32f, 0x37d50f,
+0xd40014, 0x11013c, 0x36d50f, 0x360081,
+0x14bffff, 0x1c021a3, 0x360020, 0x36d30f,
+0x0, 0x144ffff, 0x1c10160, 0x1c07fff,
+0x1fffc00, 0x30368, 0x1d81308, 0x8e2003,
+0x118303, 0xc80600, 0x100f06, 0x1639838,
+0x180300, 0x8e2003, 0x110202, 0xc80600,
+0x1377fff, 0x1ca0495, 0x36cf0f, 0x11b0000,
+0x842d, 0x1377fff, 0x1c80490, 0x36d12f,
+0x1377fff, 0x1c90492, 0x11b0000, 0x1c60c,
+0x11b0000, 0x1768c, 0x37fa07, 0x360000,
+0xc82013, 0x3600a2, 0x37fc87, 0xc81003,
+0x37fe07, 0xc80009, 0x1020001, 0x1c05539,
+0x36d30f, 0x1377fff, 0x1c9c093, 0x761209,
+0x762010, 0x37d30f, 0x36d50f, 0x762010,
+0x37d50f, 0x1007533, 0x1800000, 0xd32029,
+0x1084c6, 0x36dd5f, 0x36db3f, 0x36d91f,
+0x36f837, 0x36f617, 0x36d69f, 0x1581ffc,
+0x198bb17, 0x70000, 0x1580000, 0x198bb17,
+0x0, 0x37f617, 0x37f69f, 0x37f837,
+0x37f91f, 0x37fb3f, 0xc82210, 0x11b0000,
+0x8408, 0xc80220, 0xd40004, 0x118424,
+0xc8062d, 0x1377fff, 0x1c98091, 0xc91803,
+0x11b0000, 0x1ee9b, 0xc80009, 0x1020001,
+0x1c08e17, 0x1020001, 0x1c07cb1, 0xc80441,
+0x11b0000, 0x1766b, 0x37fa07, 0x13ee110,
+0x10101, 0x11b0000, 0x1daab, 0x1377fff,
+0x1c80111, 0x360483, 0x37fe97, 0x158000f,
+0x1d88310, 0x11b0000, 0x8429, 0x37fc67,
+0x1020001, 0x1c05539, 0x11b0000, 0x8409,
+0x760201, 0xd32001, 0x1005df, 0x158000f,
+0x1d88b12, 0x1580016, 0x1988b10, 0xc80041,
+0x1020001, 0x1c03c84, 0x36fb3f, 0x36f91f,
+0x36f837, 0x36f617, 0x36f69f, 0x1581fff,
+0x98bb17, 0x70000, 0x1580000, 0x98bb17,
+0x0, 0x37fc17, 0x37fd1f, 0x37ff3f,
+0xc82210, 0x158000f, 0x1d88b13, 0x11b0000,
+0x8409, 0xc80220, 0xd40004, 0x11840b,
+0xc82013, 0x1020001, 0x1c053e6, 0x1377fff,
+0x1c9c093, 0x11b0000, 0x8409, 0x760201,
+0xd32001, 0x1005f7, 0x158000f, 0x1d88b12,
+0x1580016, 0x1988b10, 0xc80041, 0x1020001,
+0x1c03c84, 0xc80020, 0x11b8000, 0x22a09,
+0x36ff3f, 0x36fd1f, 0x36fc17, 0x1581fff,
+0x198bb17, 0x70000, 0x1580000, 0x98bb17,
+0x0, 0x37fc17, 0x37fd1f, 0x37ff3f,
+0x1377fff, 0x1c98010, 0x1e08000, 0x40,
+0x1921fb6, 0x190308, 0x11b0000, 0x88a8,
+0x158001d, 0x1589b11, 0x8c0202, 0x8c0240,
+0x370001, 0x1020001, 0x1c07bb0, 0x11b8000,
+0x1760b, 0xc8022d, 0x1467fff, 0x1c000e2,
+0x1020001, 0x1c07bb0, 0x11b8000, 0x18a0b,
+0x360001, 0x1020001, 0x1c07b7d, 0x11b8000,
+0x19e0b, 0x1467fff, 0x1c000e2, 0x1020001,
+0x1c07b7d, 0x11b8000, 0x1b20b, 0x36ff3f,
+0x36fd1f, 0x36fc17, 0x1581fff, 0x198bb17,
+0x70000, 0x1580000, 0x198bb17, 0x0,
+0x37f417, 0x37f89f, 0x37f637, 0x37fb1f,
+0x37fd3f, 0x37ff5f, 0xc82210, 0x364000,
+0xc80620, 0x360020, 0x8e2002, 0x11011e,
+0x370000, 0xb00000, 0x11810e, 0xc82011,
+0x130f96, 0xc82011, 0x1620001, 0xd80300,
+0xc80420, 0x11b8000, 0x22409, 0x11b8000,
+0x22229, 0x1020001, 0x1c05321, 0x100f0e,
+0xc80020, 0x1620001, 0xd81302, 0xc80621,
+0x11b8000, 0x40c09, 0x11b8000, 0x22209,
+0x11b8000, 0x22429, 0x360201, 0x11b8000,
+0x22a09, 0x360001, 0xb00000, 0x1010000,
+0x40582a, 0x11b0000, 0x40c09, 0xd40004,
+0x110114, 0x770000, 0x11b8000, 0x40c09,
+0x11810c, 0x158000f, 0x1d88b12, 0x1580016,
+0x1988b10, 0xc80041, 0x1020001, 0x1c03c84,
+0xc82011, 0x1020001, 0x1c05321, 0x100f61,
+0xc82011, 0x1020001, 0x1c05633, 0x100f5d,
+0x11b0000, 0x22209, 0xd40004, 0x118159,
+0x11b0000, 0x8009, 0xd40104, 0x118146,
+0x1580004, 0x988b10, 0x1377fff, 0x1caa111,
+0x1580001, 0x1188b13, 0xc80020, 0xc80220,
+0x1620001, 0x984b09, 0x37f50f, 0x1580005,
+0x1188b10, 0x11b8000, 0x8009, 0x37f70f,
+0x36f50f, 0x360025, 0x360000, 0x8e2002,
+0x110103, 0x370005, 0xc80621, 0x36f70f,
+0x360003, 0x360020, 0x8e2040, 0x110107,
+0x1646110, 0x310623, 0x370023, 0x1020001,
+0x1c05748, 0xc80621, 0x1377fff, 0x1c90091,
+0x1580002, 0x1989310, 0x366c02, 0x360020,
+0x8e2002, 0x110110, 0x370000, 0x11b0000,
+0x8229, 0xd40024, 0x11810b, 0x1e08000,
+0x140, 0x1921fb6, 0x181b02, 0x11b0000,
+0x8889, 0x8c0040, 0x8c0200, 0x11b8000,
+0x1ee0a, 0x36f50f, 0x762a15, 0x762613,
+0x771209, 0x760201, 0x762010, 0x37f50f,
+0x36f70f, 0x762010, 0x37f70f, 0xd40094,
+0x1004cc, 0xc82011, 0x364201, 0x762010,
+0x0, 0x360020, 0x8e2002, 0x110109,
+0x370000, 0x11b8000, 0x22a09, 0xd40034,
+0x118104, 0xc82011, 0x1020001, 0x1c05321,
+0xd40134, 0x11810f, 0x11b0000, 0x8209,
+0xd40104, 0x118105, 0xc82011, 0x1020001,
+0x1c055b2, 0x100f07, 0xc82011, 0x1020001,
+0x1c056e0, 0xc82011, 0x1020001, 0x1c05321,
+0x36ff5f, 0x36fd3f, 0x36fb1f, 0x36f637,
+0x36f417, 0x36f89f, 0x1581fff, 0x98bb17,
+0x70000, 0x1580000, 0x158bb17, 0x0,
+0x37f617, 0x37f89f, 0x37f837, 0x37fb1f,
+0x37fd3f, 0x37ff5f, 0x1646100, 0xb11621,
+0x1646120, 0x1b15625, 0xc82616, 0x37f74f,
+0xc81220, 0xd40034, 0x11840f, 0x360125,
+0x1646110, 0x316627, 0x36f74f, 0x360101,
+0x1020001, 0x1c08d20, 0x762211, 0x762a15,
+0x1377fff, 0x1c9a213, 0x761209, 0xd32069,
+0x1005f3, 0x36ff5f, 0x36fd3f, 0x36fb1f,
+0x36f837, 0x36f617, 0x36f89f, 0x1581fff,
+0xd8bb17, 0x70000, 0x1580000, 0x198bb17,
+0x0, 0x37f417, 0x37f89f, 0x37f637,
+0x37fb1f, 0x37fd3f, 0x37ff5f, 0x1646100,
+0xb13621, 0x1646120, 0x1b15625, 0x37f56f,
+0x37f74f, 0xc81220, 0xd40034, 0x11840f,
+0x360125, 0x36f56f, 0xc80001, 0x360103,
+0x36f74f, 0x1020001, 0x1c0b4cb, 0x762613,
+0x762a15, 0x1377fff, 0x1c8a211, 0x761209,
+0xd32069, 0x1005f3, 0x36f52f, 0xc80001,
+0x36f70f, 0x1020001, 0x1c0b59e, 0x36ff5f,
+0x36fd3f, 0x36fb1f, 0x36f637, 0x36f417,
+0x36f89f, 0x1581fff, 0x98bb17, 0x70000,
+0x1580002, 0x118bb17, 0x0, 0x37fc17,
+0x37e49f, 0x37fe37, 0x37e71f, 0x37e93f,
+0x37eb5f, 0xc82a10, 0xc82012, 0x37d92f,
+0x37db6f, 0x360600, 0xc82016, 0x370805,
+0x360000, 0xe90100, 0x370a05, 0x361700,
+0x11b8008, 0x18850d, 0xc82016, 0xc82410,
+0x361900, 0x11b8008, 0x18870d, 0x36d90f,
+0x0, 0x360a00, 0x11b8000, 0x18880d,
+0x360a05, 0x360825, 0x1020001, 0x1c08de0,
+0xc82812, 0x1580001, 0xd8ab10, 0x762412,
+0x1377fff, 0x1cb2194, 0x1580001, 0x158ab14,
+0x370c05, 0x10c8000, 0x8058c0, 0x360112,
+0x762412, 0x370110, 0x762010, 0x360116,
+0x762c16, 0x370114, 0x762814, 0x36db0f,
+0x1581ffd, 0x118bb14, 0xc82220, 0xc82620,
+0xc80222, 0x1377fff, 0x1c84090, 0x1581ffe,
+0x158bb16, 0x1581ffd, 0x118bb12, 0x1377fff,
+0x1c92192, 0x37dd0f, 0x36db0f, 0x1377fff,
+0x1c82290, 0x37df0f, 0x1581ffe, 0x158bb10,
+0x370336, 0x370314, 0x1377fff, 0x1c82190,
+0x1581ffe, 0x158bb14, 0x1581ffe, 0x158bb16,
+0x37e12f, 0x36dd2f, 0xc82610, 0xc82212,
+0x1c0303, 0x1006503, 0x1800000, 0x1007507,
+0x1800000, 0x1377fff, 0x1c82194, 0x1377fff,
+0x1ca4016, 0x1581ffd, 0x118bb12, 0x36e16f,
+0x1377fff, 0x1c94012, 0xc82616, 0xc82210,
+0x1c0303, 0x1006503, 0x1800000, 0x1007507,
+0x1800000, 0x1581ffe, 0x158bb10, 0x36df6f,
+0x1377fff, 0x1c84010, 0xc82614, 0xc82216,
+0x1c0303, 0x1006503, 0x1800000, 0x1007507,
+0x1800000, 0x1580108, 0x98ab14, 0x1580105,
+0x118ab11, 0x1580102, 0x198ab13, 0x37e34f,
+0xc82c12, 0xc82810, 0x1c0303, 0x1006509,
+0x1800000, 0x100750d, 0x1800000, 0x36db0f,
+0x0, 0x360000, 0x37d807, 0x37ea07,
+0x1581ffd, 0x118bb10, 0x36e32f, 0xc82820,
+0x1581ffd, 0x118bb16, 0x370520, 0xc82013,
+0x36d92f, 0x1020001, 0x1c0b7ee, 0xc82011,
+0x36d92f, 0x1581ffe, 0x158bb16, 0xc82820,
+0x1020001, 0x1c08a43, 0x36e30f, 0x770201,
+0x1580001, 0xd89b13, 0x1580040, 0x188310,
+0x1580001, 0xd88b11, 0x37e30f, 0xd40014,
+0x1004e4, 0x360c05, 0xd40404, 0x118530,
+0x1377fff, 0x1c83795, 0xc81020, 0x1646180,
+0x1300611, 0x371285, 0x10c8000, 0x805942,
+0x360c85, 0x771008, 0xce4048, 0x760402,
+0x1007581, 0x1800000, 0x1377fff, 0x1c82115,
+0x1e0e050, 0x3f, 0x1000000, 0x184302,
+0x1cb8000, 0x606c, 0x1032061, 0x990341,
+0x370425, 0x370685, 0xc82815, 0xc82410,
+0x1c0203, 0x1006525, 0x1800000, 0x1007529,
+0x1800000, 0x3702a5, 0x36db0f, 0x360a25,
+0x360885, 0x3600a0, 0x701202, 0xe902a8,
+0x11b0000, 0x1888ad, 0x6e1202, 0x6e0802,
+0xd400a4, 0x11041c, 0x100f3a, 0x1377fff,
+0x1c83795, 0xc80021, 0xc80420, 0xc81022,
+0x371205, 0x360805, 0x10c8000, 0x405975,
+0x7d4202, 0x360ca5, 0x761008, 0x77140a,
+0xce4248, 0x13b7581, 0x1b02605, 0xc81022,
+0x7d4202, 0x360ca5, 0x760402, 0x761008,
+0x77140a, 0xce4248, 0x1007581, 0x1800000,
+0x100fc6, 0x36db2f, 0xc80422, 0xc80040,
+0xc81222, 0x7d1043, 0x7d0003, 0x1377fff,
+0x1c90112, 0x1377fff, 0x1c80015, 0x1580001,
+0x1589311, 0x1580188, 0x1588313, 0x1646110,
+0x310627, 0x360121, 0x1020001, 0x1c0b9e8,
+0x1377fff, 0x1c9a193, 0x762211, 0x771209,
+0xd40094, 0x1004f6, 0x11b0000, 0x18880d,
+0x760603, 0xd32003, 0x118502, 0x100fe2,
+0x36eb5f, 0x36e93f, 0x36e71f, 0x36fe37,
+0x36fc17, 0x36e49f, 0x1581ffd, 0x118bb17,
+0x70000, 0xc81000, 0xd40084, 0x11010a,
+0xd40184, 0x118106, 0x1e08000, 0xc1,
+0x800000, 0x185308, 0x100f05, 0xc80021,
+0x100f0d, 0xc81020, 0xc81448, 0x8e2202,
+0x118208, 0x8e2242, 0x110306, 0x1377fff,
+0x1c80010, 0xc80020, 0x370420, 0x100f02,
+0xc80022, 0x0, 0x70000, 0x1580005,
+0x18bb17, 0x0, 0x37fc17, 0x37b71f,
+0x37fe37, 0x37b93f, 0x37bb5f, 0xc82210,
+0xc82a12, 0xc82011, 0x1020001, 0x1c05ac6,
+0x11b0000, 0x188809, 0xd40004, 0x110105,
+0xc82011, 0xc82415, 0x1020001, 0x1c05a70,
+0x1377fff, 0x1c84015, 0x1377fff, 0x1c9b791,
+0xc80622, 0x37b15f, 0xc80220, 0x37b30f,
+0x1580002, 0x1988b10, 0x37b50f, 0x360001,
+0xb00000, 0x11810b, 0x36b10f, 0x360821,
+0x361401, 0x360120, 0x36b30f, 0x0,
+0x360100, 0x1020001, 0x1c08cc6, 0x100f6b,
+0x36b10f, 0x360801, 0x13effff, 0x1c10066,
+0x360120, 0x36b50f, 0x1377fff, 0x1c80110,
+0x1020001, 0x1c03c84, 0x360003, 0x760000,
+0x370003, 0x360c21, 0xd32040, 0x11051a,
+0x1581ffb, 0x18bb10, 0xc80020, 0x1620001,
+0xd81302, 0x370003, 0x1581ffb, 0x18bb14,
+0x7d0041, 0x11b0008, 0x188769, 0x1377fff,
+0x1ca8011, 0x1581ffb, 0x18bb12, 0x372560,
+0x1580102, 0x198ab10, 0x11b0008, 0x188569,
+0x36b55f, 0x370d64, 0x37b157, 0x1020001,
+0x1c0b801, 0x360003, 0x361221, 0xd32040,
+0x118129, 0x1377fff, 0x1ca0091, 0x360a01,
+0x11b0008, 0x188729, 0x361b64, 0x11b0008,
+0x188509, 0x361744, 0x1020001, 0x1c0a52c,
+0x1620040, 0x180300, 0x1620001, 0xd81302,
+0x1581ffb, 0x18bb10, 0x1581ffb, 0x18bb14,
+0x7d0001, 0x1377fff, 0x1cb0011, 0x11b0008,
+0x188529, 0x7d0041, 0x37b127, 0x1580082,
+0x198b316, 0x1377fff, 0x1ca8011, 0x1581ffb,
+0x18bb12, 0x370d60, 0x1580105, 0x118ab10,
+0x11b0008, 0x188769, 0x371964, 0x1020001,
+0x1c08a56, 0x36b30f, 0x1620040, 0x181302,
+0x360003, 0x7d1041, 0x1377fff, 0x1c90111,
+0x361281, 0x360ca1, 0x704200, 0x77040a,
+0x360801, 0xce1048, 0x360100, 0x7d1002,
+0x1377fff, 0x1c90112, 0x1580082, 0x1989312,
+0x1020001, 0x1c03c84, 0x36b30f, 0x762613,
+0x770603, 0x760201, 0x762010, 0x37b30f,
+0x36b10f, 0x762010, 0x37b10f, 0x36b50f,
+0x1580040, 0x188310, 0x37b50f, 0xd40034,
+0x1008000, 0x10059e1, 0x36bb5f, 0x36b93f,
+0x36b71f, 0x36fe37, 0x36fc17, 0x1581ffb,
+0x18bb17, 0x70000, 0x1580000, 0x198bb17,
+0x0, 0x37f417, 0x37fb1f, 0x37f637,
+0x37fd3f, 0x37ff5f, 0xc82210, 0x37f52f,
+0x11b0000, 0x188809, 0xc80220, 0xd40004,
+0x11041c, 0x100f3f, 0x36f74f, 0x360821,
+0x360144, 0x0, 0x36000c, 0xc82813,
+0x900000, 0x1020001, 0x1c0b608, 0x36f90f,
+0x762a15, 0x1377fff, 0x1c9a193, 0x770603,
+0x762010, 0x37f90f, 0x36f70f, 0x762010,
+0x37f70f, 0xd40034, 0x110418, 0x11b0000,
+0x188809, 0x760201, 0xd32001, 0x118525,
+0x1580001, 0x1588b10, 0xc80040, 0xc80622,
+0x7d0001, 0x1377fff, 0x1c90011, 0x37f70f,
+0x36f50f, 0x1580188, 0x1589313, 0x1377fff,
+0x1c80010, 0x1580003, 0x188314, 0x1580003,
+0x1988315, 0x37f94f, 0x36f90f, 0x0,
+0x360120, 0x16a0000, 0x189304, 0x1001d8,
+0x360105, 0x16a0000, 0x188304, 0x1001d4,
+0x360001, 0xb00000, 0x1081c8, 0x360821,
+0x361401, 0x1020001, 0x1c08cc6, 0x100fcc,
+0x36ff5f, 0x36fd3f, 0x36fb1f, 0x36f637,
+0x36f417, 0x1581fff, 0x98bb17, 0x70000,
+0x762e17, 0x0, 0x37ff1f, 0xc82210,
+0x360400, 0x360020, 0x8e2002, 0x110102,
+0x370000, 0xc82011, 0x360601, 0x762010,
+0x0, 0x360020, 0x8e2002, 0x110105,
+0x370000, 0x1020001, 0x1c0877e, 0x371401,
+0x36ff1f, 0x772e17, 0x70000, 0x1580004,
+0x198bb17, 0x0, 0x37fc17, 0x37da9f,
+0x37fe37, 0x37dd1f, 0x37df3f, 0x37e15f,
+0xc82616, 0xc82210, 0xc82014, 0xc82c12,
+0x37b74f, 0x37b92f, 0x11b8008, 0x2bd709,
+0x1580006, 0x1d88b12, 0x1580006, 0x1188b10,
+0x1377fff, 0x1ca4093, 0x37bb2f, 0x1377fff,
+0x1c92113, 0x360406, 0x1581ffd, 0x198bb16,
+0x37bd6f, 0x1581ffb, 0x118bb16, 0x372401,
+0x37bf6f, 0x36b96f, 0x0, 0x360606,
+0x372a01, 0x360203, 0x372e01, 0xc82a10,
+0xc82c12, 0x1c0303, 0x100650d, 0x1800000,
+0x100750b, 0x1800000, 0x36bb0f, 0xc82c10,
+0xc82414, 0x1c0303, 0x1006505, 0x1800000,
+0x100750d, 0x1800000, 0x36bd2f, 0x361103,
+0x370302, 0x36bf2f, 0x361303, 0x370302,
+0x362e01, 0x37fa07, 0x360003, 0x372801,
+0x362e01, 0xe90100, 0x373001, 0x362e01,
+0xe90200, 0x362421, 0x14bffff, 0x1c42000,
+0x1c47f00, 0x208000, 0x61, 0x205308,
+0x14bffff, 0x1c02002, 0x1c47f00, 0x208000,
+0x60, 0x205300, 0xc91808, 0x1020001,
+0x1c08e17, 0x373201, 0x362401, 0x362e21,
+0x14bffff, 0x1c42000, 0x1c47f00, 0x208000,
+0x61, 0x205308, 0xc91808, 0x14bffff,
+0x1c02002, 0x1c47f00, 0x208000, 0x60,
+0x205300, 0x1020001, 0x1c08e17, 0x363021,
+0xc81c00, 0x362a01, 0x1020001, 0x1c08de0,
+0x372c01, 0x36b90f, 0x0, 0x360000,
+0xd40e04, 0x118103, 0xc80022, 0x100f02,
+0xc80021, 0x372601, 0x1581ffe, 0x1d8bb10,
+0xc80020, 0x36b92f, 0x1620001, 0x1584308,
+0xc82812, 0x360622, 0x1581ffe, 0x1d8bb12,
+0x37ee87, 0x370620, 0x1581ffe, 0x1d8bb10,
+0x360424, 0x1620003, 0x984308, 0x370420,
+0xc82014, 0x360224, 0x370222, 0x11b8000,
+0x9089, 0x1e09fc0, 0x147ae00, 0x1c942,
+0x181310, 0x1377fff, 0x1c90011, 0x1377fff,
+0x1ca0010, 0x1580009, 0x589310, 0x360084,
+0x1407fff, 0x1ce2e82, 0x14b6122, 0x13002,
+0xe80122, 0x14b7e00, 0x812008, 0x370020,
+0x360080, 0x363021, 0xd32048, 0x118405,
+0x370020, 0x11b8000, 0x9009, 0x100f06,
+0x11b0000, 0x9029, 0x760000, 0xd32040,
+0x1084e1, 0xc81020, 0xc80448, 0x1377fff,
+0x1c90411, 0xc82012, 0x11b0000, 0x940a,
+0x11b0000, 0x92a8, 0x700240, 0x14bffff,
+0x1c02000, 0x1c47f00, 0x208000, 0x60,
+0x205300, 0x164e120, 0x30c601, 0x1020001,
+0x1c08e17, 0x11b8000, 0xc808, 0x761008,
+0x11b0000, 0x9009, 0x770000, 0xd32008,
+0x1084e7, 0xc80420, 0x10c8000, 0xc05bdc,
+0x1e09fc0, 0x147ae00, 0x1c93c, 0x180310,
+0x1377fff, 0x1c90111, 0x1377fff, 0x1ca0110,
+0x1580008, 0x989310, 0x360084, 0x809c80,
+0x14b6102, 0x3000, 0xe80100, 0x14b7e00,
+0x802008, 0x370000, 0x360080, 0x363001,
+0xd32008, 0x118402, 0x370000, 0x1621c94,
+0x588310, 0x11b0000, 0x9089, 0xc80020,
+0xd40084, 0x118415, 0x1621c93, 0x1989312,
+0x1377fff, 0x1c90112, 0x360080, 0x3600a2,
+0x8e220a, 0x118107, 0x1377fff, 0x1c80111,
+0x0, 0x11b8000, 0x8a08, 0x100f07,
+0x762010, 0x11b0000, 0x9089, 0x760000,
+0xd32200, 0x1005ed, 0x760402, 0x362e01,
+0x1638882, 0x1981302, 0x362481, 0x14bffff,
+0x1c02000, 0x1c47f00, 0x208000, 0x60,
+0x205300, 0x14bffff, 0x1c42008, 0x1c47f00,
+0x208000, 0x61, 0x205308, 0x8c0040,
+0xc91808, 0x1020001, 0x1c08e17, 0x1020001,
+0x1c08a13, 0x14b7fff, 0x1c02000, 0x1e08000,
+0x45, 0x388000, 0x190302, 0x375c01,
+0x362e01, 0x362481, 0x14bffff, 0x1c02000,
+0x1c47f00, 0x208000, 0x60, 0x205300,
+0x14bffff, 0x1c42008, 0x1c47f00, 0x208000,
+0x61, 0x205308, 0x8c0040, 0xc91808,
+0x1020001, 0x1c08e17, 0x1020001, 0x1c02c39,
+0x14b7fff, 0x1c02000, 0x14bffff, 0x1c130a1,
+0x375e01, 0x365c81, 0x362ea1, 0x700200,
+0x14bffff, 0x1c4200a, 0x1c47f00, 0x208000,
+0x61, 0x205308, 0x14bffff, 0x1c52000,
+0xc9180a, 0x8c0048, 0x1020001, 0x1c08e17,
+0x376001, 0x1638875, 0x980300, 0x363221,
+0x1020001, 0x1c08765, 0x376201, 0x1e08000,
+0x40, 0x1921fb6, 0x190300, 0x362e21,
+0x14bffff, 0x1c12002, 0x1c47f00, 0x208000,
+0x60, 0xa05302, 0xc91802, 0x1020001,
+0x1c08e17, 0x376601, 0xc80020, 0x10c8000,
+0x805c6c, 0xc81022, 0x1620006, 0x118530a,
+0x1620040, 0x183306, 0xc80420, 0x7d7200,
+0x7d4240, 0x7d50c0, 0x1377fff, 0x1c90711,
+0x15801f8, 0x1589310, 0x15801f9, 0x589312,
+0x10c8000, 0x805c61, 0x361743, 0x1620003,
+0x983306, 0xc81c28, 0x1377fff, 0x1ca0414,
+0x7d30c2, 0x7d72c2, 0x760402, 0x1377fff,
+0x1ca0314, 0x370140, 0x762010, 0x361743,
+0x1377fff, 0x1ca0514, 0x1377fff, 0x1ca0714,
+0x158000d, 0x18a314, 0x370142, 0x762412,
+0x361703, 0x1377fff, 0x1c90011, 0xc80428,
+0x7d1040, 0x760000, 0x1377fff, 0x1c80110,
+0x15800bc, 0x188310, 0x11b8008, 0x1f9f0a,
+0x15801f9, 0x1588b10, 0x15801fa, 0x588b12,
+0xc80020, 0x1620017, 0x1181302, 0x10c8000,
+0x405c8b, 0x361743, 0x7d1040, 0x1377fff,
+0x1ca0114, 0x158008d, 0x18a314, 0x370140,
+0x1620003, 0x984308, 0x361743, 0x7d4200,
+0x1377fff, 0x1ca0414, 0x15800fc, 0x18a314,
+0x370142, 0x762010, 0x762412, 0x1620017,
+0x1181302, 0x760000, 0x361743, 0x7d1040,
+0x1620003, 0x984308, 0x7d4200, 0x1377fff,
+0x1ca0114, 0x760000, 0x158008d, 0x18a314,
+0xc80020, 0x370140, 0x762010, 0x361743,
+0x1377fff, 0x1ca0414, 0x15800fc, 0x18a314,
+0x370142, 0x762412, 0x361503, 0x11b8008,
+0x2be509, 0x362821, 0xd40024, 0x118414,
+0x1377fff, 0x1c80011, 0xc80422, 0x7d1040,
+0x15802bd, 0x1188310, 0x760000, 0x1377fff,
+0x1c90113, 0x1580001, 0x1189312, 0x0,
+0x360142, 0x370140, 0x360322, 0x370520,
+0x362821, 0xd32040, 0x1005ee, 0x15801fa,
+0xd88b12, 0x1580248, 0x1588b15, 0xc80220,
+0x362103, 0x37c12f, 0x11b8008, 0x2be109,
+0x362303, 0x11b8008, 0x2be309, 0x362e01,
+0x37b607, 0x362601, 0xd40004, 0x118421,
+0x11b0008, 0x2bd709, 0x1581ffb, 0xd8bb16,
+0x1580030, 0x188314, 0x36c10f, 0x1581ffe,
+0x1d8bb12, 0x1020001, 0x1c0a16b, 0x11b0008,
+0x2bd709, 0x1581fff, 0x158bb16, 0x1580030,
+0x188314, 0xc82015, 0x1581ffe, 0x1d8bb12,
+0x1020001, 0x1c09dcd, 0x36c10f, 0x362601,
+0x760201, 0x1580027, 0x588310, 0x158003a,
+0xd8ab15, 0x37c10f, 0xd32001, 0x1005e1,
+0x15801f9, 0x1d88b10, 0x1580011, 0x588b15,
+0xc80220, 0x362601, 0x37c30f, 0xd40004,
+0x118412, 0x36c30f, 0x362e01, 0xe90202,
+0x363001, 0x360120, 0xc82015, 0x1020001,
+0x1c061c8, 0x36c30f, 0x1377fff, 0x1caa215,
+0x362601, 0x760201, 0x762010, 0x37c30f,
+0xd32001, 0x1005f0, 0x362621, 0xc80020,
+0xd40024, 0x11842f, 0x1620004, 0x1981302,
+0x7d1040, 0x11b0008, 0x2bd749, 0x760000,
+0x1377fff, 0x1ca8111, 0x158013e, 0x158ab12,
+0x1580148, 0x58ab15, 0xc82012, 0x370342,
+0x1580001, 0x1189314, 0x11b0008, 0x2be569,
+0x370364, 0x11b0008, 0x2bd769, 0x370f62,
+0x11b0008, 0x2be569, 0x372762, 0x11b0008,
+0x2be129, 0x370120, 0x11b0008, 0x2be309,
+0x370104, 0x11b0008, 0x2be109, 0x370105,
+0x11b0008, 0x2be309, 0x371905, 0x11b0008,
+0x2be109, 0x370d05, 0x11b0008, 0x2be309,
+0x372505, 0x362621, 0xd32040, 0x1005d3,
+0xc82011, 0x1020001, 0x1c064e4, 0x1377fff,
+0x1cb4093, 0x1581ffd, 0x198bb14, 0x1581ffb,
+0x118bb10, 0x1377fff, 0x1c92113, 0xc80220,
+0x37c56f, 0xc82c20, 0x1377fff, 0x1ca2194,
+0x37c76f, 0x1581ffb, 0x118bb16, 0x37c96f,
+0x1377fff, 0x1cb2190, 0x1581ffc, 0x158bb10,
+0x1377fff, 0x1c82190, 0x37cb4f, 0xc82a16,
+0xc82812, 0x1c0303, 0x1006509, 0x1800000,
+0x100750b, 0x1800000, 0x1581ffd, 0x198bb12,
+0x36c94f, 0x1377fff, 0x1c92192, 0x37cd0f,
+0x36cb0f, 0x1377fff, 0x1ca2194, 0xc82a10,
+0xc82c14, 0x1c0303, 0x100650d, 0x1800000,
+0x100750b, 0x1800000, 0x1581ffb, 0x118bb10,
+0x36cd4f, 0x1377fff, 0x1c84010, 0xc82a14,
+0xc82c12, 0x1c0303, 0x100650d, 0x1800000,
+0x100750b, 0x1800000, 0x1581ffb, 0x118bb14,
+0x1581ffd, 0x198bb12, 0x37cf4f, 0x36c54f,
+0xc82a10, 0xc82c14, 0x1c0303, 0x100650d,
+0x1800000, 0x100750b, 0x1800000, 0x1581ffd,
+0x198bb14, 0x1377fff, 0x1c84012, 0x1581ffc,
+0x158bb12, 0x37d14f, 0x36cf4f, 0x1377fff,
+0x1ca4014, 0xc82a10, 0xc82c14, 0x1c0303,
+0x100650d, 0x1800000, 0x100750b, 0x1800000,
+0x1581ffc, 0x158bb10, 0x1580015, 0xd88b15,
+0x37d30f, 0x1377fff, 0x1c84012, 0x36d12f,
+0x1377fff, 0x1c94012, 0xc82c10, 0xc82812,
+0x1c0303, 0x1006509, 0x1800000, 0x100750d,
+0x1800000, 0x36d30f, 0x36c72f, 0x360203,
+0x1580012, 0x588b13, 0x37ca07, 0x370320,
+0x37b807, 0x37dc07, 0x362801, 0xd40004,
+0x118415, 0x1581ffc, 0x158bb10, 0x36b72f,
+0x1377fff, 0x1ca2412, 0x1581ffc, 0x158bb16,
+0x370550, 0xc82013, 0x36b92f, 0x1020001,
+0x1c0b705, 0x362801, 0x760201, 0x1580030,
+0x18ab15, 0x1580001, 0x1589b13, 0xd32001,
+
+0x1005ed, 0x1580078, 0x1588b10, 0x1580098,
+0x1588b13, 0xc80220, 0x362601, 0x37d50f,
+0x1580075, 0xd88b10, 0x37d70f, 0x158009b,
+0x1d88b10, 0x37d90f, 0xd40004, 0x118443,
+0x1581ffd, 0x198bb10, 0x36d52f, 0xc82820,
+0x1581ffd, 0x198bb16, 0x370520, 0x36b92f,
+0x36d70f, 0x1020001, 0x1c09d1b, 0x1581ffc,
+0x158bb10, 0x36b72f, 0x1377fff, 0x1ca2412,
+0x36d92f, 0x1581ffc, 0x158bb16, 0x370520,
+0xc82013, 0x36b92f, 0x1020001, 0x1c0b705,
+0x1581ffb, 0x118bb12, 0xc80028, 0x1620001,
+0xd81302, 0x36b70f, 0x1581ffb, 0x118bb16,
+0x7d0001, 0x7d1041, 0x1580030, 0x188314,
+0x1377fff, 0x1ca8011, 0x1377fff, 0x1c80111,
+0x15800fe, 0x158ab15, 0x15800fb, 0x1d88310,
+0x370552, 0x36b92f, 0x1020001, 0x1c0b7ee,
+0x36d50f, 0x362601, 0x760201, 0x1580010,
+0x188310, 0x1580001, 0x1589b13, 0x37d50f,
+0x36d70f, 0x1580001, 0x1588310, 0x37d70f,
+0x36d90f, 0x1580030, 0x188310, 0x37d90f,
+0xd32001, 0x1005bf, 0x1580001, 0x588b12,
+0xc82011, 0x1e09f9d, 0x96c400, 0x0,
+0x185302, 0x1cb8000, 0x60cc, 0x1034161,
+0x190321, 0xc81c47, 0x371221, 0xc80008,
+0x3714a1, 0x371621, 0x371881, 0x371a81,
+0x371c61, 0x371e21, 0x3720e1, 0x372221,
+0x10c8001, 0x405e2f, 0x1447fff, 0x1c10064,
+0x762412, 0x1007521, 0x1800000, 0xc82011,
+0x1020001, 0x1c063af, 0x363221, 0x1638851,
+0x1180300, 0x1020001, 0x1c08765, 0x377a01,
+0x163884b, 0x1180300, 0x363221, 0x1020001,
+0x1c08765, 0x377c01, 0x1638850, 0x980300,
+0x363221, 0x1020001, 0x1c08765, 0x377e01,
+0x1e0a1f2, 0x80003d, 0x147ae14, 0x180302,
+0xc81020, 0x3632a1, 0x8c104a, 0x14b7fff,
+0x1c12002, 0x377421, 0x373481, 0x363221,
+0x1020001, 0x1c08765, 0x11b8000, 0x8009,
+0x1e08000, 0x42, 0x1073334, 0x190300,
+0x363221, 0x1020001, 0x1c08765, 0x11b8000,
+0x8209, 0xc80220, 0x362601, 0xd40004,
+0x11841d, 0x1cb8000, 0x612c, 0x1033e60,
+0xd90321, 0x1620027, 0x581302, 0xc80025,
+0x7d1041, 0x1376130, 0x1080111, 0x15801fa,
+0xd88310, 0x1020001, 0x1c0a22c, 0x1620027,
+0x581302, 0xc80023, 0x7d1041, 0x1376190,
+0x1080111, 0x15801fa, 0xd88310, 0x1020001,
+0x1c0a22c, 0x362601, 0x760201, 0xd32001,
+0x1005e9, 0x36e15f, 0x36df3f, 0x36dd1f,
+0x36fe37, 0x36fc17, 0x36da9f, 0x1581ffb,
+0x98bb17, 0x70000, 0x1580005, 0x198bb17,
+0x0, 0x37f817, 0x37b29f, 0x37fa37,
+0x37b4bf, 0x37fc77, 0x37b6ff, 0x37fe57,
+0x37b91f, 0x37bb3f, 0x37bd5f, 0x37a52f,
+0x37a70f, 0x362e00, 0x11b0008, 0x2bd708,
+0xe90201, 0x1580030, 0x188310, 0x37a90f,
+0x36a70f, 0x1020001, 0x1c063af, 0x36a70f,
+0x0, 0x360000, 0xb00000, 0x11011e,
+0x36a70f, 0xc80022, 0x373400, 0x362820,
+0xd40024, 0x110405, 0x36a70f, 0xc80020,
+0x373400, 0x100f1c, 0x36a50f, 0xc80020,
+0x1377fff, 0x1c82110, 0xd40024, 0x118416,
+0x16a0000, 0x188304, 0x118104, 0x36a72f,
+0xc80420, 0x373422, 0x36a72f, 0x762010,
+0x760000, 0x362822, 0xd32040, 0x11850a,
+0x100ff4, 0x36a70f, 0x0, 0x363400,
+0xd40204, 0x118104, 0x36a70f, 0xc80021,
+0x373400, 0x36a70f, 0xc80e20, 0x362c00,
+0xd40004, 0x1010010, 0x1006165, 0xc81620,
+0x36a70f, 0xc80422, 0xc80620, 0x7d1047,
+0xc80a03, 0x361000, 0x6e1262, 0x7d4822,
+0xb00000, 0x110114, 0x36a70f, 0x0,
+0x363400, 0xd40204, 0x11810f, 0x36a70f,
+0x0, 0x366400, 0xd40104, 0x11830a,
+0x36a70f, 0x1020001, 0x1c06278, 0xc80a00,
+0xd40004, 0x110104, 0x36a70f, 0x0,
+0x376430, 0x36a70f, 0xc80620, 0x362600,
+0xd40004, 0x110476, 0x36a70f, 0x76160b,
+0x366400, 0x760000, 0x376400, 0xd402b4,
+0x1005d8, 0x36a70f, 0x760e07, 0x362c00,
+0xd32007, 0x1010010, 0x1406165, 0x100fd0,
+0xc80020, 0x14bffff, 0x1c12000, 0x36a70f,
+0x1620027, 0x584308, 0xc80020, 0x7d4203,
+0x1377fff, 0x1c80410, 0x15801fa, 0xd88310,
+0x1020001, 0x1c0a22c, 0x36a72f, 0x1620001,
+0xd81302, 0x36a50f, 0xc82212, 0x1581ffa,
+0x98bb14, 0x7d1043, 0x1377fff, 0x1c80190,
+0x1377fff, 0x1c88111, 0x1581ffa, 0x98bb16,
+0x363002, 0x1581ffa, 0x98bb12, 0x7d00e0,
+0x360d00, 0x1377fff, 0x1c80010, 0x37a507,
+0x15800fb, 0x1d88b10, 0x36a71f, 0x0,
+0x11b0008, 0x2be119, 0x370d14, 0x36a74f,
+0x0, 0x11b0008, 0x2be34c, 0x372546,
+0x1020001, 0x1c0b801, 0x36a70f, 0x1620004,
+0x1980300, 0xc82410, 0x162003a, 0xd81302,
+0x7d0003, 0x1377fff, 0x1c80010, 0x7d1043,
+0x1377fff, 0x1ca0112, 0x1580148, 0x588312,
+0x1580248, 0x158a310, 0x1020001, 0x1c09ec5,
+0x36a72f, 0x1620004, 0x1980300, 0xc82c12,
+0x36a50f, 0x7d0003, 0x1620027, 0x581302,
+0x1377fff, 0x1ca0190, 0x1377fff, 0x1c90012,
+0x36a507, 0x7d1043, 0x158013e, 0x1589312,
+0x1377fff, 0x1cb0116, 0x370d02, 0x15801fa,
+0xd8b310, 0x36a76f, 0x362544, 0x363006,
+0x7d00e0, 0x1377fff, 0x1ca0014, 0x372542,
+0x1020001, 0x1c0a204, 0x36a70f, 0x760603,
+0x362600, 0xd32003, 0x10858c, 0x36a50f,
+0xc80024, 0x1377fff, 0x1c80190, 0x36a76f,
+0x7d0003, 0x1376110, 0xb0016, 0x361140,
+0x1580011, 0x58b311, 0x1377fff, 0x1ca0494,
+0x360120, 0x360d00, 0x1377fff, 0x1c90492,
+0x1377fff, 0x1c80490, 0x37ab4f, 0x37ad0f,
+0xc82011, 0x1020001, 0x1c0910e, 0x370701,
+0x36a70f, 0x0, 0x363400, 0xd40004,
+0x1010000, 0x4060f7, 0xd40104, 0x1010000,
+0x406099, 0xd40204, 0x1010010, 0x40608b,
+0xd40034, 0x11813b, 0x36a70f, 0xc81e20,
+0x362800, 0xd40004, 0x118436, 0x36a50f,
+0xc80024, 0x1377fff, 0x1c80790, 0x36a72f,
+0x7d000f, 0x1377fff, 0x1c90792, 0x360540,
+0x36a70f, 0x1376110, 0xb0010, 0x11b0008,
+0x2bd90a, 0x1377fff, 0x1c90494, 0x158000f,
+0x1d8b314, 0x1020001, 0x1c0914e, 0x36a70f,
+0x1620001, 0x1580300, 0xc82410, 0x1377fff,
+0x1c80790, 0x1581ffa, 0x98bb11, 0x1581ffa,
+0x98bb13, 0x7d000f, 0x1377fff, 0x1ca8012,
+0x15802bd, 0x1188316, 0x1581ffa, 0x98bb12,
+0xc82816, 0x360106, 0x37a507, 0x1580012,
+0x58ab10, 0x360144, 0x370d41, 0x360546,
+0x372543, 0x1020001, 0x1c0b741, 0x36a70f,
+0x761e0f, 0x362800, 0xd3200f, 0x1005cc,
+0x1581fff, 0x18bb10, 0x36a72f, 0xc80003,
+0x1020001, 0x1c065c5, 0xd401b4, 0x11810e,
+0x36a70f, 0xc80048, 0x363020, 0x11b0008,
+0x2be368, 0x11b0008, 0x2be148, 0x11b0008,
+0x2be528, 0x11b0008, 0x2bd708, 0x1020001,
+0x1c09b89, 0x36a70f, 0x1581ffa, 0x98bb16,
+0x1581ffa, 0x98bb14, 0x1620001, 0x1580300,
+0x11b0008, 0x2be108, 0x1581ffa, 0x98bb11,
+0x7d0003, 0x1581ffa, 0x98bb12, 0x37a507,
+0x36a70f, 0xc82610, 0x36ab5f, 0x1377fff,
+0x1c80010, 0x1580075, 0xd88310, 0x11b0008,
+0x2be33b, 0x370d56, 0x371934, 0x36a94f,
+0x370f41, 0x1020001, 0x1c09d52, 0x36a70f,
+0xc81024, 0xc80048, 0x36a92f, 0x7d4203,
+0x363020, 0x1377fff, 0x1c80410, 0x1580011,
+0x588314, 0xc82012, 0x1020001, 0x1c09135,
+0x36a70f, 0xc82415, 0xc80424, 0xc80049,
+0x7d1043, 0x1376110, 0x1080110, 0x1580011,
+0x588311, 0x36ad0f, 0xc82811, 0x1020001,
+0x1c09135, 0x370301, 0xc80024, 0x36a70f,
+0x7d0003, 0x1376110, 0x90010, 0x363020,
+0x36a90f, 0x1580011, 0x589312, 0x1377fff,
+0x1c80110, 0x1020001, 0x1c09121, 0x36a70f,
+0x1581ffa, 0x98bb14, 0x36a92f, 0xc82c10,
+0x363000, 0x1581ffa, 0x98bb10, 0xc82216,
+0x1377fff, 0x1c90012, 0x1620001, 0x1580300,
+0x37a527, 0x1581ffa, 0x98bb12, 0x7d0003,
+0x11b0008, 0x2be16e, 0x1377fff, 0x1c88011,
+0x370d60, 0x1580098, 0x1588b10, 0x36a76f,
+0x0, 0x11b0008, 0x2be36e, 0x372564,
+0x1020001, 0x1c0b741, 0x36a70f, 0x1581fff,
+0x18bb11, 0xc80022, 0xc82410, 0x7d0003,
+0x11b0008, 0x2be348, 0x1376130, 0x80010,
+0xc82c12, 0x11b0008, 0x2be12a, 0x1580004,
+0x988310, 0x1020001, 0x1c06659, 0x36a70f,
+0xc80020, 0x363020, 0x36a90f, 0x1377fff,
+0x1c80110, 0x1020001, 0x1c03c73, 0x36a70f,
+0xc82c10, 0x36a94f, 0x11b0008, 0x2be328,
+0x11b0008, 0x2be108, 0x1020001, 0x1c0655e,
+0x36a70f, 0xc80022, 0xc82c10, 0x7d0003,
+0x11b0008, 0x2be348, 0x11b0008, 0x2be128,
+0x1376130, 0x80010, 0x1580004, 0x988310,
+0x1020001, 0x1c06885, 0x36a70f, 0x0,
+0x361000, 0xb00000, 0x110113, 0xc80005,
+0xd40004, 0x118110, 0x36a70f, 0xc81e20,
+0x362800, 0xd40004, 0x11840b, 0x16461f0,
+0x1300607, 0x36a70f, 0x1020001, 0x1c0623e,
+0x36a70f, 0x761e0f, 0x362800, 0xd3200f,
+0x1005f7, 0xd400b4, 0x1010010, 0x406135,
+0x36a70f, 0x1581fff, 0x98bb12, 0x1377fff,
+0x1c80190, 0x1377fff, 0x1c90192, 0x363800,
+0x370002, 0x1008001, 0x1c05f64, 0x36a70f,
+0x1620010, 0x180300, 0x7d0003, 0x1376110,
+0x80010, 0x1580078, 0x1588312, 0x36ab0f,
+0x1020001, 0x1c03c84, 0x36a70f, 0x1620010,
+0x181302, 0xc80020, 0x7d1043, 0x1376110,
+0x1080110, 0x1580078, 0x1588310, 0x1020001,
+0x1c03c73, 0x36a70f, 0xc80424, 0xc80049,
+0x36ab2f, 0x7d1043, 0x1376110, 0x1080110,
+0x1580011, 0x588311, 0x36ad0f, 0xc82811,
+0x1020001, 0x1c09135, 0x370301, 0xd40034,
+0x118111, 0x36a70f, 0xc81e20, 0x15802bd,
+0x1188311, 0x362800, 0x36a50f, 0x1377fff,
+0x1c82110, 0x37af0f, 0x36a70f, 0x158000f,
+0x1d88315, 0x1580012, 0x588313, 0xd40004,
+0x11040b, 0x36a70f, 0x0, 0x362600,
+0x770000, 0xd32060, 0x1081b7, 0x36a70f,
+0xc80020, 0x373400, 0x100fb3, 0x36af0f,
+0x1646110, 0x31462b, 0x360120, 0x1377fff,
+0x1c90492, 0x360101, 0x1020001, 0x1c0914e,
+0xd401b4, 0x118106, 0x1646110, 0x310627,
+0x360121, 0x1020001, 0x1c0699c, 0x36a70f,
+0x761e0f, 0x762211, 0x1377fff, 0x1caa215,
+0x1580001, 0x1589b13, 0x362800, 0x36af0f,
+0x762010, 0x37af0f, 0xd3200f, 0x1085da,
+0x100fe3, 0x36a70f, 0xc80024, 0x7d0003,
+0x1376110, 0x80010, 0x1580011, 0x588311,
+0x36ad0f, 0xc82411, 0x1020001, 0x1c09121,
+0x370301, 0xd40034, 0x108187, 0x36a70f,
+0xc81e20, 0x15802bd, 0x1188311, 0x362800,
+0x36a50f, 0x1377fff, 0x1c82110, 0x37b10f,
+0x36a70f, 0x158000f, 0x1d88315, 0x1580012,
+0x588313, 0xd40004, 0x1008010, 0x100608b,
+0x36b10f, 0x1646110, 0x31462b, 0x360120,
+0x1377fff, 0x1c90492, 0x360101, 0x1020001,
+0x1c0914e, 0xd401b4, 0x118106, 0x1646110,
+0x310627, 0x360121, 0x1020001, 0x1c0699c,
+0x36a70f, 0x761e0f, 0x762211, 0x1377fff,
+0x1caa215, 0x1580001, 0x1589b13, 0x362800,
+0x36b10f, 0x762010, 0x37b10f, 0xd3200f,
+0x1008010, 0x140608b, 0x100fe2, 0x1581fff,
+0x98bb10, 0x36a72f, 0x1377fff, 0x1c80190,
+0x1377fff, 0x1c90192, 0x360020, 0x363802,
+0x8e2002, 0x110307, 0x1581fff, 0x98bb10,
+0x1377fff, 0x1c80190, 0x0, 0x370000,
+0x1581fff, 0x98bb10, 0x1620027, 0x580300,
+0x7d1003, 0x1377fff, 0x1c80190, 0x36a72f,
+0x760025, 0x1377fff, 0x1c90112, 0x360020,
+0x15801fa, 0xd89310, 0x1020001, 0x1c0a22c,
+0x36a70f, 0x0, 0x360800, 0xb00000,
+0x1008000, 0x405f02, 0x36a70f, 0x0,
+0x363400, 0xd40204, 0x1008010, 0x405f02,
+0xc80021, 0x1008001, 0x1c05f03, 0x36fe77,
+0xc80a07, 0x36bd5f, 0x36bb3f, 0x36b91f,
+0x36fc77, 0x36fa37, 0x36f817, 0x36b6ff,
+0x36b4bf, 0x36b29f, 0x1581ffa, 0x98bb17,
+0x70000, 0x1580000, 0xd8bb17, 0x0,
+0x37fc17, 0x37fd1f, 0x37fe37, 0x37ff3f,
+0x1646120, 0xb11621, 0xc81000, 0xc80420,
+0xd40984, 0x110430, 0x1621c98, 0xd88310,
+0x1377fff, 0x1c80410, 0x0, 0x360100,
+0x0, 0xc0f00, 0x0, 0x1e0a09d,
+0x96c400, 0x0, 0x185308, 0x100f25,
+0xc81420, 0xc8100a, 0x100f22, 0x1e0a000,
+0x3a, 0x10624de, 0x185308, 0x100f1d,
+0x1cb8000, 0x614c, 0x1134161, 0x190320,
+0x100f18, 0x15801fa, 0xd88b13, 0x362601,
+0xc80620, 0xd40004, 0x11840d, 0x1646110,
+0x1310627, 0xc80023, 0x1020001, 0x1c0a22c,
+0xc80400, 0x760603, 0x362601, 0x1580027,
+0x589b13, 0xd32003, 0x1005f5, 0xc80002,
+0x100f13, 0xc80421, 0xc81020, 0xc81448,
+0xd40024, 0x1081fa, 0x8e2201, 0x118208,
+0x8e2241, 0x110306, 0x1377fff, 0x1c80011,
+0x0, 0x371210, 0x100ff1, 0xc80422,
+0x100fef, 0x100fdc, 0x100fdb, 0x36ff3f,
+0x36fd1f, 0x36fe37, 0x36fc17, 0x1581fff,
+0x158bb17, 0x70000, 0x1646100, 0x1308605,
+0x370320, 0x1377fff, 0x1c90412, 0xc80020,
+0x360340, 0x370140, 0x370720, 0x370420,
+0x360100, 0x1020001, 0x1c06aa0, 0x0,
+0x70000, 0x1580000, 0x118bb17, 0x0,
+0x37f817, 0x37f89f, 0x37fa37, 0x37fabf,
+0x37fd1f, 0x37ff3f, 0x1646102, 0x1311625,
+0x762010, 0x3600ea, 0xc80c21, 0x762211,
+0x1467fff, 0x1c7076d, 0x3700ea, 0xd40184,
+0x118418, 0x1377fff, 0x1c90514, 0x1377fff,
+0x1c98516, 0x3600e0, 0x360019, 0x760c06,
+0x6e500a, 0x1467fff, 0x1c48164, 0x36003b,
+0x8c5829, 0x8f0603, 0x8c4ac9, 0x87a239,
+0x1407fff, 0x1ceee3b, 0x1007713, 0x1800000,
+0x10075e1, 0x1800000, 0xd32206, 0x1005ea,
+0x36ff3f, 0x36fd1f, 0x36fa37, 0x36f817,
+0x36fabf, 0x36f89f, 0x1581fff, 0x118bb17,
+0x70000, 0x100751f, 0x1800000, 0xc81420,
+0x36008a, 0xc80420, 0x8e2248, 0x110203,
+0xc81023, 0x100f02, 0xc81020, 0x360060,
+0x8e2246, 0x110204, 0xc81421, 0xcc4248,
+0x100f01, 0x762412, 0x762010, 0xc81421,
+0xd40004, 0x11011b, 0x36006a, 0xc81c20,
+0x8e22c6, 0x110203, 0xc80c23, 0x100f02,
+0xc80c20, 0x360010, 0x8e22c1, 0x110203,
+0xc81c21, 0xcc32c6, 0x1386162, 0x70406,
+0x1621c97, 0x118a314, 0x762412, 0x762010,
+0x76140a, 0x1377fff, 0x1ca0714, 0x0,
+0x360664, 0x6e10c2, 0xd3200a, 0x1084e7,
+0xc80002, 0x36fe17, 0x772e17, 0x70000,
+0x1580000, 0x98bb17, 0x0, 0x37fd1f,
+0x37ff3f, 0xc82210, 0xc80c22, 0x1620040,
+0x184308, 0xc81428, 0x7d4200, 0x7d00c0,
+0x7d5242, 0x1377fff, 0x1c80411, 0x1377fff,
+0x1c90011, 0x365e61, 0x1377fff, 0x1ca0510,
+0x1377fff, 0x1c80112, 0x365c81, 0x1580005,
+0x988313, 0x700206, 0x11b0008, 0x1f9328,
+0x1377fff, 0x1c80414, 0x1377fff, 0x1c90412,
+0x1580151, 0x1588310, 0x130fab, 0x363021,
+0x14bffff, 0x1c02000, 0xe90522, 0x366081,
+0x14bffff, 0x1c12002, 0x1c47f00, 0x208000,
+0x60, 0xa05302, 0x3662a1, 0x143ffff,
+0x1ce2802, 0x360003, 0x891002, 0x809420,
+0x370003, 0x36ff3f, 0x36fd1f, 0x1581fff,
+0x198bb17, 0x70000, 0x1580000, 0x1d8bb17,
+0x0, 0x37f417, 0x37f49f, 0x37f637,
+0x37f6bf, 0x37f877, 0x37f8ff, 0x37fb1f,
+0x37fd3f, 0x37ff5f, 0xc82210, 0xc80220,
+0x362801, 0xc80620, 0xd40004, 0x110425,
+0xc80001, 0x1008001, 0x1c06354, 0xc81e48,
+0x1580151, 0x1588b15, 0x362601, 0xc81620,
+0x15801f9, 0x588b13, 0xd40004, 0x118315,
+0xc80028, 0x7d3803, 0x1376190, 0x90193,
+0x13761f0, 0x1080395, 0x363081, 0x367161,
+0x366b41, 0x360122, 0x1020001, 0x1c061d7,
+0x362601, 0x76160b, 0x1580040, 0x18ab15,
+0x1377fff, 0x1c9a113, 0xd3200b, 0x1082ef,
+0x362801, 0x760603, 0xd32003, 0x1085dd,
+0x1377fff, 0x1ca0191, 0x1580005, 0x1188b10,
+0x3626a1, 0xc80021, 0x1580004, 0x1188b12,
+0x365484, 0x364424, 0x14b7fff, 0x1c42008,
+0xd401a4, 0x118319, 0x1377fff, 0x1ca0190,
+0x14bffff, 0x1c32008, 0x3600a4, 0x8e20ca,
+0x110203, 0x14b7fff, 0x1c4200a, 0x1377fff,
+0x1ca0192, 0x0, 0x3600a4, 0x8e204a,
+0x118302, 0xc8040a, 0x1377fff, 0x1c82110,
+0x1377fff, 0x1c92112, 0x3626a1, 0x760000,
+0xd32240, 0x1082e9, 0x1e08000, 0x3f,
+0x666666, 0x190300, 0x8e2002, 0x118307,
+0xd4f684, 0x11830a, 0xd40a84, 0x1082cd,
+0xc81c21, 0x100f07, 0xd40184, 0x1003fd,
+0x169ffff, 0x1c23008, 0x1002c6, 0xc81c30,
+0x1377fff, 0x1c80191, 0x360401, 0x1e08000,
+0x3a, 0x10624de, 0x190302, 0x362481,
+0x8c0040, 0x14bffff, 0x1c12008, 0x1c47f00,
+0x208000, 0x60, 0xa05302, 0x11b0000,
+0x10e88, 0x8c0040, 0x14b7fff, 0x1c02000,
+0x700008, 0x6e02c0, 0x16a0017, 0x980304,
+0x118205, 0x1581fe8, 0x1d80300, 0x70700e,
+0x100f04, 0xd40004, 0x110202, 0x70700e,
+0x362621, 0xc80020, 0xd40024, 0x118313,
+0x1377fff, 0x1c80191, 0xc80422, 0x14bffff,
+0x1c4200e, 0x7a1040, 0x760000, 0x1377fff,
+0x1c80110, 0x1580005, 0x988310, 0x0,
+0x144ffff, 0x1c10460, 0x370020, 0x362621,
+0xd32040, 0x1082ef, 0x1377fff, 0x1c80191,
+0x1580010, 0x1d88310, 0x0, 0x1377fff,
+0x1c00760, 0x370000, 0xd400e4, 0x100185,
+0xc80024, 0xd0040e, 0xc80221, 0x7d0003,
+0x1377fff, 0x1c80011, 0x158000f, 0x1d88312,
+0x762012, 0x0, 0x360140, 0x1377fff,
+0x1ca0114, 0x370140, 0x360142, 0x360402,
+0x1377fff, 0x1cb0014, 0x360120, 0x169ffff,
+0x1c21312, 0x118206, 0xd00000, 0x1377fff,
+0x1c90012, 0x370120, 0x100f07, 0x169ffff,
+0x1c21212, 0x110204, 0x1377fff, 0x1c90012,
+0x370120, 0xc80021, 0x366c81, 0xe60200,
+0x363021, 0x1020001, 0x1c08de0, 0xc81200,
+0xd400e4, 0x1008000, 0x80628d, 0xc81e49,
+0x1008001, 0x1c0628e, 0x36ff5f, 0x36fd3f,
+0x36fb1f, 0x36f877, 0x36f637, 0x36f417,
+0x36f8ff, 0x36f6bf, 0x36f49f, 0x1581fff,
+0x58bb17, 0x70000, 0x1580000, 0x98bb17,
+0x0, 0x37fc17, 0x37fd1f, 0x37fe37,
+0xc82210, 0x362480, 0x14bffff, 0x1c12002,
+0x1e08000, 0x3a, 0x10624de, 0x19030a,
+0x880002, 0x14bffff, 0x1c42008, 0x1c47f00,
+0x208000, 0x61, 0x205308, 0x8c0200,
+0x8c0240, 0x14b7fff, 0x1c02000, 0x760200,
+0x16a0017, 0xd80b04, 0x118203, 0x1620017,
+0x980b01, 0x362801, 0xc80620, 0xd40004,
+0x118427, 0x1377fff, 0x1c80191, 0xc80424,
+0x1620017, 0x1180300, 0x7d1043, 0x11b8000,
+0x10e18, 0x11b0008, 0x1f9b28, 0x1376110,
+0x1080111, 0x158000f, 0x1d88310, 0x1020001,
+0x1c061c8, 0x362621, 0xc80020, 0xd40024,
+0x11840e, 0xc80420, 0x1377fff, 0x1c80191,
+0xc81022, 0x7d4200, 0x760000, 0x1377fff,
+0x1c80410, 0x0, 0x375420, 0x362681,
+0xd32200, 0x1005f5, 0x362801, 0x760603,
+0xd32003, 0x118502, 0x100fdb, 0x36fd1f,
+0x36fe37, 0x36fc17, 0x1581fff, 0x198bb17,
+0x70000, 0x1580000, 0xd8bb17, 0x0,
+0x37fc17, 0x37fd1f, 0x37fe37, 0x37ff3f,
+0xc82210, 0x361200, 0xc80420, 0x360080,
+0x8e2008, 0x110102, 0x370000, 0xc82011,
+0x361401, 0x762010, 0x0, 0x360080,
+0x8e2008, 0x110103, 0x370000, 0xc80421,
+0x1377fff, 0x1c82111, 0x361601, 0x360080,
+0x8e2008, 0x110122, 0x370000, 0xc82011,
+0x360421, 0x14b7fff, 0x1c12002, 0x360201,
+0x130f8e, 0x1377fff, 0x1c82191, 0x361821,
+0x360000, 0x8e2040, 0x110129, 0x370020,
+0x362e01, 0x16a0040, 0x180304, 0x118113,
+0x1e09f02, 0x18794b6, 0x23ec6e, 0x185308,
+0x362401, 0x14bffff, 0x1c02000, 0x1c47f00,
+0x208000, 0x60, 0x205300, 0x80900a,
+0x8c0040, 0x373601, 0x100f15, 0xd40024,
+0x1081df, 0x100fe4, 0x16a0080, 0x180304,
+0x11810f, 0x1e09ecf, 0x16556b4, 0x1a5fb04,
+0x185308, 0x362401, 0x14bffff, 0x1c02000,
+0x1c47f00, 0x208000, 0x60, 0x205300,
+0x80900a, 0x8c0040, 0x373601, 0x1377fff,
+0x1c82211, 0x361a11, 0x360000, 0x8e2020,
+0x110113, 0x15801fa, 0xd88b13, 0x370010,
+0xc80620, 0x362601, 0xd40004, 0x11840c,
+0x1646110, 0x1310627, 0xc80020, 0x1020001,
+0x1c0a22c, 0x362601, 0x760603, 0x1580027,
+0x589b13, 0xd32003, 0x1005f6, 0x1377fff,
+0x1c84091, 0x361c81, 0x360000, 0x8e2200,
+0x110123, 0x15801fa, 0xd88b13, 0x1e09f1c,
+0x1d7e3a, 0x1749c8, 0x18330a, 0x1e0a050,
+0x41, 0x1228f5c, 0x187300, 0x370080,
+0xc80620, 0x363221, 0x8942c8, 0x8c5242,
+0x8c30c2, 0x143ffff, 0x1ce22a6, 0x880002,
+0x3626a1, 0x880a00, 0xd400a4, 0x11840c,
+0x1646110, 0x1310627, 0xc80024, 0x1020001,
+0x1c0a22c, 0x362601, 0x760603, 0x1580027,
+0x589b13, 0xd32003, 0x1005f6, 0x1377fff,
+0x1c84011, 0x361e11, 0x360000, 0x8e2020,
+0x110113, 0x1580248, 0x1588b13, 0x370010,
+0xc80620, 0x362601, 0xd40004, 0x11840c,
+0x1646110, 0x1310627, 0xc80020, 0x1020001,
+0x1c09f0a, 0x362601, 0x760603, 0x158003a,
+0xd89b13, 0xd32003, 0x1005f6, 0x1377fff,
+0x1c83791, 0x362011, 0x360000, 0x8e2020,
+0x110113, 0x1580248, 0x1588b13, 0x370010,
+0xc80620, 0x362601, 0xd40004, 0x11840c,
+0x1646110, 0x1310627, 0xc80021, 0x1020001,
+0x1c09f0a, 0x362601, 0x760603, 0x158003a,
+0xd89b13, 0xd32003, 0x1005f6, 0x1377fff,
+0x1c82291, 0x362201, 0x360020, 0x8e2002,
+0x110102, 0x370000, 0x36ff3f, 0x36fd1f,
+0x36fe37, 0x36fc17, 0x1581fff, 0x158bb17,
+0x70000, 0x1580000, 0x1d8bb17, 0x0,
+0x37f217, 0x37f89f, 0x37f437, 0x37fb1f,
+0x37fd3f, 0x37ff5f, 0x1646102, 0xb11621,
+0x362800, 0xc80220, 0xd40004, 0x11844a,
+0xc81022, 0x1620040, 0x180300, 0x1620006,
+0x1181302, 0xc80648, 0x7d4209, 0x7d0009,
+0x7d1049, 0x1377fff, 0x1c80411, 0x1377fff,
+0x1c90011, 0x1377fff, 0x1ca0111, 0x15801f9,
+0x588316, 0x1580151, 0x1589312, 0x15801e5,
+0x58a315, 0x1580003, 0x1988313, 0x37f36f,
+0x15801f8, 0x1588316, 0x37f56f, 0x37f72f,
+0x36f70f, 0xc81028, 0x363021, 0xc80020,
+0x7d4201, 0x1377fff, 0x1c80410, 0x1020001,
+0x1c03c73, 0x1620003, 0x981302, 0xc80020,
+0x7d4041, 0x1377fff, 0x1c80415, 0x11b0000,
+0x9029, 0x1020001, 0x1c03c73, 0x36f30f,
+0x363021, 0xc80020, 0x1377fff, 0x1c80090,
+0x0, 0x360100, 0x1020001, 0x1c06aa0,
+0x36f50f, 0xc80020, 0x11b0000, 0x9029,
+0x1377fff, 0x1c80090, 0x0, 0x360100,
+0x1020001, 0x1c06aa0, 0x1377fff, 0x1c80093,
+0x760201, 0x370030, 0x362801, 0xd32001,
+0x1005d4, 0x1377fff, 0x1c80491, 0xc80048,
+0x374c00, 0x36ff5f, 0x36fd3f, 0x36fb1f,
+0x36f437, 0x36f217, 0x36f89f, 0x1581fff,
+0x58bb17, 0x70000, 0x100751f, 0x1800000,
+0x37ff1f, 0xc82210, 0x362600, 0xc80220,
+0xd40004, 0x118420, 0x1646110, 0x310623,
+0x130f91, 0x1620003, 0x981302, 0xc80020,
+0x7d4041, 0x1377fff, 0x1c80411, 0x11b0000,
+0x9029, 0x15801f2, 0x588310, 0x1020001,
+0x1c03c73, 0xc80424, 0xc80020, 0x7d1041,
+0x1377fff, 0x1c80111, 0x1580011, 0x588310,
+0x0, 0x360420, 0x360100, 0x1020001,
+0x1c06aa0, 0x362601, 0x760201, 0xd32001,
+0x1005e2, 0x362801, 0xc80220, 0xd40004,
+0x110404, 0xc80020, 0x376401, 0x100f49,
+0x1620003, 0x981302, 0xc80020, 0x7d4041,
+0x1377fff, 0x1c80411, 0x11b0000, 0x9029,
+0x15801d1, 0x1588310, 0x1020001, 0x1c03c73,
+0x1377fff, 0x1c80091, 0xc80020, 0x11b0000,
+0x9029, 0x11b0008, 0x1fa308, 0x1020001,
+0x1c06aa0, 0x362601, 0xc80420, 0xd40004,
+0x110406, 0x362801, 0x760201, 0xd32001,
+0x1085e1, 0x100fe3, 0x11b0000, 0x9089,
+0xc80020, 0xd40084, 0x118416, 0x1620006,
+0x118530a, 0x1620003, 0x983306, 0xc81048,
+0x7d5242, 0x7d30c1, 0x1377fff, 0x1c80511,
+0x1377fff, 0x1c80310, 0x15801d8, 0x588310,
+0x1377fff, 0x1c90010, 0x760000, 0x370082,
+0x11b0000, 0x90a9, 0xd32240, 0x1005f9,
+0xc80022, 0xc81048, 0xc81420, 0x7d0002,
+0x760402, 0x1377fff, 0x1c80011, 0x1377fff,
+0x1c80090, 0x0, 0x374480, 0x3754a0,
+0x362601, 0xd32002, 0x1085d3, 0x100fd7,
+0x36ff1f, 0x36fe17, 0x772e17, 0x70000,
+0x1580002, 0xd8bb17, 0x0, 0x37e11f,
+0x37e33f, 0x37e55f, 0xc82210, 0xc82612,
+0x37db6f, 0x37dd4f, 0x1581ffd, 0x198bb12,
+0x1581ffd, 0x198bb10, 0x37dd17, 0x37df2f,
+0xc82416, 0x370310, 0x363002, 0x1020001,
+0x1c08a35, 0x1581ffe, 0x58bb10, 0x37e337,
+0xc80400, 0x36db2f, 0x1581ffe, 0x58bb15,
+0x363002, 0x36df2f, 0x370330, 0x370422,
+0x1020001, 0x1c08a35, 0x36db0f, 0xc82413,
+0x370405, 0x36dd4f, 0x362e20, 0xc82011,
+0xc80002, 0x1020001, 0x1c091cb, 0x36db0f,
+0x1581ffe, 0x58bb12, 0xc82c10, 0x1580012,
+0x588310, 0x1377fff, 0x1ca2210, 0x762010,
+0x362e06, 0x1581ffe, 0x118bb11, 0xc82c14,
+0x1c0303, 0x100652d, 0x1800000, 0x1007523,
+0x1800000, 0x1581ffe, 0x1d8bb11, 0xc82810,
+0x1c0303, 0x1006529, 0x1800000, 0x1007523,
+0x1800000, 0x1581ffe, 0x58bb16, 0x1581ffd,
+0x198bb10, 0x1581fff, 0x98bb13, 0xc82812,
+0x1c0303, 0x1006529, 0x1800000, 0x1007527,
+0x1800000, 0x1581ffd, 0x198bb11, 0x1581fff,
+0x158bb13, 0xc82411, 0x1c0303, 0x1006525,
+0x1800000, 0x1007527, 0x1800000, 0x1581ffd,
+0x158bb14, 0x360326, 0x360300, 0x1020001,
+0x1c08e29, 0x36e55f, 0x36e33f, 0x36e11f,
+0x1581ffd, 0x158bb17, 0x70000, 0x1580001,
+0x18bb17, 0x0, 0x37f017, 0x37f89f,
+0x37f237, 0x37fb1f, 0x37fd3f, 0x37ff5f,
+0x1646100, 0xb15625, 0x37f10f, 0x11b0008,
+0x2be30d, 0xc80620, 0x362805, 0x37f30f,
+0x11b0008, 0x2be10d, 0x37f50f, 0xd40004,
+0x110410, 0x362805, 0xc81220, 0xd40004,
+0x11042f, 0x100f71, 0x36f74f, 0x363005,
+0x36f32f, 0x36f50f, 0x1020001, 0x1c0b879,
+0x362805, 0x760603, 0xd32003, 0x1085f2,
+0x1377fff, 0x1c80195, 0xc80022, 0x1620040,
+0x181302, 0xc81028, 0x15802bd, 0x1188310,
+0x7d0001, 0x7d1041, 0x7d4203, 0x1377fff,
+0x1c90015, 0x1377fff, 0x1ca0115, 0x360160,
+0x1377fff, 0x1c90192, 0x1377fff, 0x1ca0414,
+0x1580151, 0x158a311, 0x37f76f, 0x360560,
+0x11b0008, 0x1f933a, 0xd40034, 0x1081db,
+0x36f74f, 0x363005, 0x36f32f, 0x36f50f,
+0x1020001, 0x1c0b5ac, 0x100fda, 0x36f10f,
+0x1620006, 0x1180300, 0xc81020, 0x1377fff,
+0x1c80490, 0x7d0001, 0x1620003, 0x981302,
+0x1377fff, 0x1c90015, 0x7d1049, 0x370080,
+0x1377fff, 0x1c80112, 0x11b0000, 0x8a3d,
+0x1377fff, 0x1c80190, 0x1377fff, 0x1c90195,
+0x11b0000, 0x8e0d, 0x15801d8, 0x588311,
+0x1580009, 0x589313, 0xd32003, 0x110506,
+0x362805, 0x761209, 0xd32009, 0x118523,
+0x100fdf, 0x360001, 0x1e08000, 0x3f,
+0xb33334, 0x190302, 0x8e2040, 0x118313,
+0x36f30f, 0x360023, 0x1377fff, 0x1c90110,
+0x36f50f, 0x360203, 0x1377fff, 0x1c80110,
+0x700040, 0x1020001, 0x1c0b4aa, 0x36f10f,
+0x1377fff, 0x1c80490, 0x0, 0x1447fff,
+0x1c00060, 0x370000, 0x762211, 0x762613,
+0x11b0000, 0x8e0d, 0x760603, 0xd32003,
+0x1085dc, 0x100fe0, 0x36ff5f, 0x36fd3f,
+0x36fb1f, 0x36f237, 0x36f017, 0x36f89f,
+0x1581fff, 0x18bb17, 0x70000, 0x1580002,
+0x18bb17, 0x0, 0x37ee17, 0x37f69f,
+0x37f037, 0x37f8bf, 0x37fb1f, 0x37fd3f,
+0x37ff5f, 0x1646100, 0x1b1562d, 0x37e31f,
+0x37e54f, 0x37e72f, 0x37e90f, 0x1581ffe,
+0x158bb10, 0x1620003, 0x981302, 0xc80020,
+0x7d4043, 0x1377fff, 0x1c90415, 0x362825,
+0x15801f2, 0x589312, 0x37eb2f, 0xd40024,
+0x118406, 0xc81020, 0x13b7581, 0x1b00601,
+0xd32040, 0x1005fd, 0x1377fff, 0x1c80195,
+0xc80020, 0xc80220, 0x375000, 0x11b0000,
+0x900d, 0xd40004, 0x11041d, 0x362805,
+0xc80220, 0xd40004, 0x110473, 0x1377fff,
+0x1c90195, 0x36e90f, 0xc80420, 0xc80020,
+0x373822, 0x362825, 0xd40024, 0x1010000,
+0x100684a, 0x1377fff, 0x1c90195, 0xc80048,
+0x1580003, 0x1189310, 0x0, 0x360020,
+0x8e2002, 0x1010010, 0x40685c, 0x367405,
+0x377602, 0x1008001, 0x1c06866, 0x1377fff,
+0x1c80095, 0x0, 0x11b0000, 0x9228,
+0x11b0000, 0x9408, 0x36e50f, 0x1377fff,
+0x1c90110, 0x36e70f, 0x700040, 0x1377fff,
+0x1c80110, 0x1020001, 0x1c0b4aa, 0x11b0000,
+0x8a2d, 0xd32041, 0x110519, 0x11b0000,
+0x8e2d, 0xd32041, 0x118515, 0x1377fff,
+0x1c90195, 0x1581ffe, 0x158bb10, 0x1620006,
+0x1184308, 0xc80420, 0x1580005, 0x189312,
+0x7d4203, 0x1447fff, 0x1c50064, 0x3700a2,
+0x1377fff, 0x1c90415, 0x362885, 0x15801d8,
+0x589312, 0xd40084, 0x110413, 0x36eb0f,
+0x1377fff, 0x1c90095, 0x367c85, 0x1377fff,
+0x1c80090, 0x760201, 0x11b0000, 0xc8aa,
+0x360020, 0x879402, 0x809002, 0x370000,
+0x11b0000, 0x900d, 0xd32001, 0x1085a8,
+0x100fc3, 0x1377fff, 0x1ca0092, 0x1e08000,
+0x3f, 0xb33334, 0x190308, 0x3600a4,
+0x8e220a, 0x118304, 0x1447fff, 0x1c40060,
+0x370080, 0x362885, 0x760402, 0x1580003,
+0x989312, 0x762010, 0xd32202, 0x1085dc,
+0x100fed, 0x890040, 0x367e85, 0x809002,
+0x370000, 0x362805, 0x760201, 0xd32001,
+0x10858f, 0x1377fff, 0x1ca0095, 0x1620003,
+0x984308, 0xc80022, 0x1620006, 0x1181302,
+0x7d5003, 0x15802bd, 0x118a310, 0x7d0201,
+0x7d1043, 0x11b0008, 0x1fa34c, 0x1377fff,
+0x1cb0015, 0x1377fff, 0x1c90115, 0x1377fff,
+0x1c98515, 0x15801d1, 0x158b311, 0x1377fff,
+0x1c90012, 0x37ed4f, 0x1377fff, 0x1ca0093,
+0x360160, 0x37ef6f, 0x360500, 0x37f10f,
+0x15801e5, 0x589310, 0x37f30f, 0x11b0008,
+0x1f8b0c, 0x37f50f, 0xd40034, 0x11813e,
+0x11b0000, 0x900d, 0xc81220, 0xd40004,
+0x118439, 0x1377fff, 0x1ca0495, 0x1581ffe,
+0x118bb12, 0x1581ffe, 0x58bb10, 0x11b0000,
+0x922c, 0x11b0000, 0x940c, 0x36f14f,
+0x1377fff, 0x1cb0114, 0x36ef4f, 0x700040,
+0x1377fff, 0x1ca0114, 0x1020001, 0x1c09175,
+0x1377fff, 0x1c80495, 0x36e807, 0x11b0000,
+0xc828, 0x8c0040, 0x1020001, 0x1c08cfd,
+0x1376100, 0x1080491, 0x1377fff, 0x1ca0495,
+0x37e827, 0x36ed2f, 0x360080, 0x1377fff,
+0x1c90492, 0x367aa5, 0x891202, 0x761209,
+0x1407fff, 0x1ce2a28, 0x370020, 0x36000a,
+0x36e227, 0x11b0000, 0xc88c, 0x8c1202,
+0x37e227, 0x891002, 0x367c85, 0x11b0000,
+0x90ad, 0x809020, 0x37000a, 0xd32249,
+0x1005c9, 0x11b0000, 0x900d, 0xc81220,
+0xd40004, 0x11042b, 0x36e30f, 0x1377fff,
+0x1c80090, 0x0, 0x360000, 0xb00000,
+0x1010000, 0x4067f7, 0x1581ffe, 0x158bb10,
+0xc91800, 0x1377fff, 0x1c80090, 0x0,
+0x360000, 0x1020001, 0x1c08e17, 0x1020001,
+0x1c08cfd, 0xc80400, 0x1008001, 0x1c067f8,
+0xc8000b, 0x1620006, 0x1181302, 0x1620003,
+0x984308, 0x7d1043, 0x7d4201, 0x1377fff,
+0x1c80115, 0x1377fff, 0x1c80410, 0x1377fff,
+0x1c80490, 0x761209, 0x11b8000, 0x1d8208,
+0x11b0000, 0x900d, 0xd32009, 0x1085d7,
+0x1377fff, 0x1ca0495, 0x1581ffe, 0xd8bb12,
+0x1581ffe, 0x98bb10, 0x11b0000, 0x922c,
+0x11b0000, 0x940c, 0x36f14f, 0x1377fff,
+0x1ca0114, 0x700040, 0xc82614, 0x36ef4f,
+0x1377fff, 0x1ca0114, 0xc82214, 0x36e54f,
+0x1377fff, 0x1cb0114, 0x36e74f, 0x1377fff,
+0x1ca0114, 0x1020001, 0x1c09187, 0x36ed0f,
+0x1377fff, 0x1c88495, 0x36e407, 0xc81620,
+0x1377fff, 0x1ca0490, 0x158000c, 0x1188b11,
+0x36eb0f, 0x1377fff, 0x1cb0490, 0x36f52f,
+0x36e687, 0x1467fff, 0x1c50062, 0x1377fff,
+0x1c90492, 0x36000c, 0x36f30f, 0x1467fff,
+0x1c0006c, 0x37e4a7, 0x1377fff, 0x1c80490,
+0x1467fff, 0x1c40462, 0x36002a, 0x37e687,
+0x360080, 0x89520a, 0x367c65, 0x80cca8,
+0x370080, 0x36e687, 0x894048, 0x367ca5,
+0x1407fff, 0x1ce2a82, 0x37002a, 0x8e2260,
+0x1083a8, 0xc91800, 0x36002a, 0x360000,
+0x8c1042, 0x808002, 0x1020001, 0x1c08e17,
+0x1020001, 0x1c08cfd, 0x1620006, 0x1181302,
+0x1620003, 0x984308, 0x7d1043, 0x7d4201,
+0x1377fff, 0x1c80115, 0x1377fff, 0x1c80410,
+0x1377fff, 0x1c80490, 0x0, 0x11b0000,
+0x1d8228, 0x8e2040, 0x10028f, 0x1e08000,
+0x3e, 0x99999a, 0x190302, 0x890040,
+0x8e200b, 0x118303, 0xc8000b, 0x100f86,
+0x100f85, 0xc80448, 0xc81022, 0x11b0000,
+0x80ad, 0xc80020, 0x7d4203, 0x1377fff,
+0x1c80415, 0x1377fff, 0x1c80090, 0x1580003,
+0x1988310, 0x0, 0x360080, 0x891202,
+0x1407fff, 0x1ce2a28, 0x370020, 0x11b0000,
+0x8c2d, 0x11b0000, 0x8a8d, 0xd32048,
+0x118523, 0x1377fff, 0x1c80415, 0x1620006,
+0x118530a, 0x1620003, 0x983306, 0x1580009,
+0x588312, 0x7d5243, 0x7d30c1, 0x1377fff,
+0x1c80515, 0x1377fff, 0x1c80310, 0x1377fff,
+0x1c80410, 0x15801d8, 0x588310, 0x3602a2,
+0x761008, 0x1387fff, 0x1c5620a, 0x762412,
+0x1006561, 0x1800000, 0x14bffff, 0x1c5200a,
+0x1c47f00, 0x208000, 0x61, 0xa0530a,
+0x809460, 0xd32048, 0x1005f1, 0x11b0000,
+0x862d, 0x11b0000, 0x848d, 0x701202,
+0x14bffff, 0x1c12002, 0x1c47f00, 0x208000,
+0x60, 0xa05302, 0xc91802, 0x1020001,
+0x1c08e17, 0x36e90f, 0x1377fff, 0x1c80090,
+0x0, 0x360020, 0x8e2040, 0x1008000,
+0x8066f3, 0x370000, 0x1008001, 0x1c066f7,
+0x360020, 0x1e08000, 0x3f, 0x666666,
+0x190308, 0x8e2202, 0x110305, 0x1377fff,
+0x1c90195, 0xc80448, 0x373822, 0x762010,
+0x362825, 0x760000, 0xd32040, 0x1008010,
+0x1406693, 0x100fef, 0x1580007, 0xd89312,
+0x0, 0x360022, 0xd40024, 0x118305,
+0x370000, 0x360002, 0x770000, 0x370002,
+0x36ff5f, 0x36fd3f, 0x36fb1f, 0x36f037,
+0x36ee17, 0x36f8bf, 0x36f69f, 0x1581ffe,
+0x18bb17, 0x70000, 0x1580000, 0x98bb17,
+0x0, 0x37fe17, 0xc80200, 0xc80020,
+0x8e2001, 0x11830a, 0xc80001, 0x1020001,
+0x1c08cfd, 0x1020001, 0x1c08cfd, 0xc91801,
+0x1020001, 0x1c08e17, 0x100f01, 0x36fe17,
+0x1581fff, 0x198bb17, 0x70000, 0x1580001,
+0x158bb17, 0x0, 0x37e817, 0x37f69f,
+0x37ea37, 0x37f8bf, 0x37ec77, 0x37fb1f,
+0x37fd3f, 0x37ff5f, 0x1646100, 0xb1562d,
+0x37e94f, 0x37eb2f, 0x37ed0f, 0xc81620,
+0x11b0000, 0x8a9d, 0xc80648, 0x11b0000,
+0x8e0d, 0xd32009, 0x118517, 0x1377fff,
+0x1c80495, 0x0, 0x11b0000, 0x9228,
+0x11b0000, 0x9408, 0x36e90f, 0x1377fff,
+0x1c90110, 0x36eb0f, 0x700040, 0x1377fff,
+0x1c80110, 0x1020001, 0x1c0b4aa, 0x11b0000,
+0x8e2d, 0x761209, 0x88580b, 0xd32049,
+0x1005eb, 0xb000bb, 0x11010a, 0x1377fff,
+0x1c80095, 0xc9180b, 0x365000, 0x1020001,
+0x1c08e17, 0x1020001, 0x1c08cfd, 0xc80600,
+0x36ed0f, 0x362885, 0xc80021, 0xc82410,
+0x762010, 0x360022, 0xd40184, 0x11840a,
+0x360080, 0x8e2048, 0x110202, 0xc80408,
+0x762010, 0x362885, 0x760000, 0xd32200,
+0x1005f8, 0x1e08000, 0x3f, 0x666666,
+0x190300, 0x8e2002, 0x11830c, 0x1377fff,
+0x1c80095, 0x11b0000, 0x822d, 0x1580004,
+0x1988310, 0x0, 0x360000, 0x894003,
+0x808480, 0x370000, 0x362805, 0xc80620,
+0xd40004, 0x11040c, 0x1008001, 0x1c06991,
+0x1646110, 0x31062b, 0x1020001, 0x1c0647f,
+0x362805, 0x760603, 0xd32003, 0x1010010,
+0x1406991, 0x1377fff, 0x1c80195, 0x1e09fa6,
+0xcccd00, 0x4, 0x180308, 0x1620040,
+0x181302, 0xc81428, 0x15802bd, 0x1188310,
+0x7d1041, 0x7d4201, 0x7d5243, 0x1377fff,
+0x1c90115, 0x1377fff, 0x1ca0415, 0x360160,
+0x37ef6f, 0x1377fff, 0x1cb0512, 0x1377fff,
+0x1c90194, 0x360500, 0x363c22, 0x37f10f,
+0x1580151, 0x158b310, 0x37f30f, 0x11b0008,
+0x1f930a, 0x37f50f, 0x8e2002, 0x1082d5,
+0x1377fff, 0x1c80095, 0x14bffff, 0x1c130a3,
+0x364c00, 0x8e2040, 0x1082ce, 0x363695,
+0x1477fff, 0x1c24400, 0x110203, 0x1467fff,
+0x1c4c389, 0x36ed0f, 0x1e08000, 0x3f,
+0x666666, 0x190300, 0x1377fff, 0x1c80190,
+0x0, 0x360020, 0x8e2002, 0x1083c1,
+0x11b0000, 0x900d, 0xc81620, 0xd40004,
+0x11043f, 0x100fbb, 0x36ed0f, 0x14bffff,
+0x1c030a3, 0x1377fff, 0x1c80190, 0x0,
+0x360020, 0x8e2002, 0x11832f, 0x1e08000,
+0x3c, 0x47ae14, 0x190307, 0x1620003,
+0x980300, 0x7d0003, 0x1377fff, 0x1c80015,
+0x1377fff, 0x1c80590, 0x0, 0x11b0000,
+0x1d1a08, 0x1020001, 0x1c06870, 0x1377fff,
+0x1c80595, 0x8c00e0, 0x11b0000, 0x9288,
+0x11b0000, 0x9428, 0x36e90f, 0x1377fff,
+0x1c80410, 0x701202, 0xc82610, 0x36eb0f,
+0x1377fff, 0x1c80410, 0xc82210, 0x36f10f,
+0x1377fff, 0x1cb0410, 0x36ef0f, 0x1377fff,
+0x1ca0410, 0x36f50f, 0x1377fff, 0x1c90410,
+0x36f30f, 0x1377fff, 0x1c80410, 0x1020001,
+0x1c091aa, 0x11b0000, 0x900d, 0x76160b,
+0xd3200b, 0x1008010, 0x14068ea, 0x1620006,
+0x1180300, 0x1620003, 0x984308, 0xc80447,
+0x7d0001, 0x7d4203, 0x1377fff, 0x1c80015,
+0x1377fff, 0x1c80410, 0x1377fff, 0x1c80590,
+0x0, 0x11b0000, 0x1d8208, 0x8e2040,
+0x118303, 0xc80e09, 0x100fbd, 0x1e08000,
+0x3e, 0x1cccccc, 0x190308, 0x8e2200,
+0x118303, 0x8c3849, 0x100fb5, 0x8e2200,
+0x1083a6, 0x1e08000, 0x3d, 0x199999a,
+0x190300, 0x8c3809, 0x100fad, 0x36ff5f,
+0x36fd3f, 0x36fb1f, 0x36ec77, 0x36ea37,
+0x36e817, 0x36f8bf, 0x36f69f, 0x1581ffe,
+0xd8bb17, 0x70000, 0x100751f, 0x1800000,
+0x37ff1f, 0x1646100, 0xb11621, 0x361300,
+0xc80001, 0x1020001, 0x1c03c84, 0x361301,
+0x1377fff, 0x1c80090, 0x371301, 0x361501,
+0x361601, 0x1377fff, 0x1c90010, 0x361301,
+0x169ffff, 0x1c21110, 0x118205, 0xd00000,
+0x1377fff, 0x1c80010, 0x371301, 0x36ff1f,
+0x36fe17, 0x772e17, 0x70000, 0x14b7fff,
+0x1c42002, 0x14bffff, 0x1c52008, 0x8e204a,
+0x1010000, 0x406a64, 0x1477fff, 0x1c23500,
+0x1010010, 0x806a85, 0x1d80000, 0xb00,
+0x1bb00, 0x67d5f, 0x950c00, 0x1b70000,
+0x620c, 0x12b0a60, 0x1990b06, 0xd01006,
+0x930200, 0x1477fff, 0x1c26000, 0x1b77f00,
+0xe0e000, 0x600062, 0x18630a, 0x1387fff,
+0x1c52210, 0x1477fff, 0x1c26000, 0x1b77f00,
+0xe0e007, 0x1880062, 0x1a030a, 0x1b80000,
+0x610c, 0x1232061, 0x991310, 0x1477fff,
+0x1c26000, 0x1e77f00, 0xe0e000, 0x3fa62,
+0x119f310, 0x1d80000, 0x2000, 0x1bb00,
+0x95214, 0x0, 0xc91460, 0x1c5ffff,
+0x1ffe010, 0x61, 0x1185300, 0x144ffff,
+0x1c7628e, 0x9c140c, 0x1cdffff, 0x1ffffe0,
+0x3fe61, 0x198530e, 0x1cdffff, 0x1ffffe0,
+0x3fe61, 0x198530e, 0x1cdffff, 0x1ffffe0,
+0x3fe61, 0x198530e, 0x149ffff, 0x1c6208e,
+0x1e01fdc, 0xaa3b3d, 0x1556eb8, 0x182300,
+0x1467fff, 0x1fb0d0d, 0x1407fff, 0x1ceeaec,
+0x8c708e, 0x1b6ffff, 0x1fffc00, 0x31064,
+0x1983314, 0x14b7fff, 0x1c22202, 0x1cb8000,
+0x608c, 0x430462, 0x184310, 0x1c38c01,
+0x10261cc, 0x1030c69, 0x181304, 0x1c00c41,
+0x104620c, 0x1030061, 0x1188300, 0x14b7fff,
+0x1c32200, 0x973206, 0x1c58000, 0x614c,
+0x330060, 0x188306, 0x14b7fff, 0x1c32200,
+0x973206, 0x1c48000, 0x624d, 0x534961,
+0x1183300, 0x88528a, 0x1cb0000, 0x624c,
+0x1031260, 0x19230a, 0x1cb8000, 0x620c,
+0x432160, 0x184300, 0x1c5ffff, 0x1ffe010,
+0x461, 0x180306, 0x14b7fff, 0x1c42208,
+0x16a00ff, 0x1984304, 0x11035d, 0x16a1f04,
+0x584304, 0x11824f, 0x1477fff, 0x1c2200a,
+0x118204, 0x761008, 0x144ffff, 0x1c5100a,
+0x14bffff, 0x1c01108, 0x14b7fff, 0x1c02000,
+0x169ffff, 0x1c22008, 0x1b77f00, 0xc0a007,
+0x1fc0060, 0x1990b00, 0x1b68c41, 0x120640c,
+0x1031464, 0x1983308, 0x1d80000, 0x2000,
+0x1bb00, 0x94214, 0x1e01f3a, 0x1f3153d,
+0xbd51fc, 0x182308, 0x1406a04, 0xe8a84,
+0x809480, 0x1466840, 0x500, 0x808804,
+0x9300c0, 0x70000, 0x1e97fff, 0x1ffe000,
+0x185184, 0x306348, 0x1477fff, 0x1c2200a,
+0x110134, 0x900800, 0x1477fff, 0x1c23504,
+0x118217, 0x1d0a01, 0x8c30c0, 0xef1f84,
+0x118011, 0x900806, 0x1477fff, 0x1c23504,
+0x11821c, 0x1e4ffff, 0x1ffe000, 0x186183,
+0x300348, 0x9c080c, 0x14dffff, 0x1d20849,
+0x14dffff, 0x1d20849, 0x14dffff, 0x1d20849,
+0x70000, 0xc90006, 0x70000, 0x1477fff,
+0x1c22000, 0x118209, 0x1477fff, 0x1c22002,
+0x11820f, 0x1477fff, 0x1c23502, 0x118211,
+0xc80020, 0x70000, 0xc80030, 0x70000,
+0xef1f64, 0x100006, 0x1e08000, 0x7f,
+0xfffffe, 0x190300, 0x70000, 0x1e08000,
+0xff, 0xfffffe, 0x190300, 0x70000,
+0xc90048, 0x70000, 0xc82410, 0x1d0201,
+0x1007705, 0x1800000, 0x70000, 0x1580000,
+0x158bb17, 0x0, 0x37fa17, 0x37fb1f,
+0x37fc37, 0x37fd3f, 0x37ff5f, 0xc82210,
+0xc82612, 0xc82a16, 0x11b8008, 0xe7f49,
+0x14bffff, 0x1c02241, 0x360423, 0x14bffff,
+0x1c12002, 0x1c47f00, 0x208000, 0x60,
+0xa05302, 0x11b8000, 0xe8029, 0x360023,
+0x371421, 0x360025, 0x11b8000, 0xe8629,
+0xed0122, 0x11b8000, 0xe8829, 0x11b0000,
+0xe8629, 0x14bffff, 0x1c12002, 0x11b0000,
+0xe8089, 0xc91808, 0x8c0002, 0x1020001,
+0x1c08e17, 0x1447fff, 0x1c04380, 0x1020001,
+0x1c08a13, 0x15800ea, 0x1d88b10, 0x14b6100,
+0x1003000, 0xe80100, 0x14b7e00, 0x802002,
+0x1377fff, 0x1c92215, 0xc82810, 0x15800eb,
+0x988b10, 0x37f90f, 0xc82015, 0x762010,
+0x11b8000, 0xe8c09, 0xc82a14, 0xc82c10,
+0x1c0303, 0x100650d, 0x1800000, 0x100750b,
+0x1800000, 0x36f90f, 0xc82c10, 0xc82812,
+0x1c0303, 0x1006509, 0x1800000, 0x100750d,
+0x1800000, 0x360003, 0x1020001, 0x1c03e42,
+0x1581fff, 0x118bb12, 0xc82c12, 0xc82810,
+0x1c0103, 0x1006509, 0x1800000, 0x100750d,
+0x1800000, 0x36f807, 0xe81200, 0xed1b00,
+0x11b8000, 0xe8209, 0x11b0000, 0xe8809,
+0x11b0000, 0xe8089, 0x14bffff, 0x1c02000,
+0x164e180, 0x30c601, 0x1020001, 0x1c08e17,
+0x1e0a33d, 0x3d, 0x624de, 0x185302,
+0x8c1040, 0x8e2248, 0x110206, 0x1620001,
+0x1180300, 0x11b8000, 0xe9009, 0x100f04,
+0xc8003e, 0x11b8000, 0xe9009, 0x1580002,
+0x588b10, 0xc8002d, 0xc91802, 0x1020001,
+0x1c08e17, 0x14b7fff, 0x1c02000, 0x760000,
+0x370000, 0xd40204, 0x110303, 0xc80022,
+0x370000, 0xc91802, 0x1638822, 0x180300,
+0x1020001, 0x1c08e17, 0x1e09f82, 0x11eb83e,
+0x1eb851e, 0x185308, 0x14b7fff, 0x1c02000,
+0x372401, 0x1406180, 0xeaa28, 0xc9180a,
+0x1020001, 0x1c08e17, 0x1e09f99, 0x133333e,
+0x1333334, 0x18430a, 0x371601, 0x809428,
+0x164e180, 0x30c601, 0x1020001, 0x1c08e17,
+0xc81000, 0x1e09ea6, 0xccd03f, 0xe66666,
+0x180306, 0x808026, 0x371881, 0x164e160,
+0x30c601, 0x1020001, 0x1c08e17, 0x1e09f8c,
+0x1999a3e, 0x199999a, 0x18730a, 0x371c01,
+0x14061a0, 0xe1e2a, 0xc91801, 0x1020001,
+0x1c08e17, 0xc80600, 0x1e09f54, 0xf5c23f,
+0x570a3e, 0x185300, 0x1407fff, 0x1ceaa20,
+0x371e31, 0xc9180a, 0x1020001, 0x1c08e17,
+0x11b8000, 0xe9609, 0x1e08000, 0x3d,
+0x99999a, 0x190301, 0x808c21, 0x11b8000,
+0xe9489, 0x164e110, 0x30c601, 0x1020001,
+0x1c08e17, 0x11b8000, 0xeac09, 0x1e09fb3,
+0x66663d, 0x199999a, 0x184300, 0x80d020,
+0x11b8000, 0xe9839, 0xc91808, 0x1020001,
+0x1c08e17, 0x1e09e11, 0x1d70a3f, 0xfae148,
+0x18330a, 0x11b8000, 0x83c09, 0xc81048,
+0x809426, 0x164e160, 0x30c601, 0x1020001,
+0x1c08e17, 0x1e08000, 0x3e, 0x1999998,
+0x19030a, 0x891808, 0x80942e, 0x11b8000,
+0xea839, 0x164e1e0, 0x30c601, 0x1020001,
+0x1c08e17, 0xc81447, 0x890008, 0x11b8000,
+0x83809, 0x14061a0, 0xeea2a, 0xc9180e,
+0x1020001, 0x1c08e17, 0x890008, 0xc91802,
+0x11b8000, 0x83a09, 0xc80006, 0x11b8000,
+0x83e39, 0x1020001, 0x1c08e17, 0xc80400,
+0x1e0a2a4, 0x3c, 0x16872b0, 0x18030a,
+0x11b8000, 0xeaa29, 0x372021, 0x11b8000,
+0x830a9, 0x11b0000, 0xe8029, 0xc91802,
+0x1020001, 0x1c08e17, 0x11b8000, 0x84009,
+0x1377fff, 0x1c94091, 0xc82011, 0x1cb8000,
+0x604c, 0x10b3e60, 0x190320, 0x370a01,
+0x370c11, 0x370e21, 0x371021, 0x371201,
+0x10c8000, 0x1406bcb, 0x1447fff, 0x1c00464,
+0x762412, 0x1007501, 0x1800000, 0xc82011,
+0x1020001, 0x1c06d3d, 0x36ff5f, 0x36fd3f,
+0x36fb1f, 0x36fc37, 0x36fa17, 0x1581fff,
+0xd8bb17, 0x70000, 0x1580000, 0x118bb17,
+0x0, 0x37f817, 0x37fb1f, 0x37fd3f,
+0x37ff5f, 0xc82a10, 0x37f92f, 0xc82015,
+0x1020001, 0x1c07a1a, 0x360005, 0xc80220,
+0x8e2020, 0x1010000, 0x406c9d, 0x361405,
+0xd40e04, 0x1010010, 0x406c9d, 0x15800e8,
+0x18ab12, 0x15800e4, 0xd8ab10, 0x11b0000,
+0xe9c0d, 0x1020001, 0x1c0795d, 0x1580001,
+0xd8ab10, 0xc82210, 0x36f90f, 0x11b0000,
+0xe880d, 0x1377fff, 0x1ca4010, 0x11b0008,
+0xe7f0d, 0xc82610, 0x36f90f, 0x1580002,
+0x988316, 0x1580001, 0x1188312, 0x1020001,
+0x1c06dbe, 0x11b0008, 0xe7f2d, 0x15800e8,
+0x18ab16, 0x1580084, 0xd8ab14, 0x1580001,
+0xd8ab10, 0x1377fff, 0x1c92412, 0x1020001,
+0x1c06e7f, 0x11b0000, 0x8260d, 0x8e2020,
+0x118104, 0xc82015, 0x1020001, 0x1c06d3d,
+0x1580001, 0xd8ab10, 0x1020001, 0x1c06f7c,
+0x11b0008, 0xe7f0d, 0x15800eb, 0x198ab12,
+0x1377fff, 0x1c82410, 0x1020001, 0x1c06fa2,
+0x11b0008, 0xe7f4d, 0x15800e8, 0x18ab16,
+0x1580083, 0x18ab12, 0x15800e4, 0xd8ab10,
+0x1377fff, 0x1ca2414, 0x1020001, 0x1c07326,
+0x11b0008, 0xe7f0d, 0x1580083, 0x18ab14,
+0x15800e4, 0xd8ab12, 0x1377fff, 0x1c82410,
+0x1020001, 0x1c07372, 0x11b0008, 0xe7f2d,
+0x15800a4, 0xd8ab10, 0x1377fff, 0x1c92412,
+0x11b0000, 0xe880d, 0x11b0000, 0xe8c8d,
+0x362425, 0x1020001, 0x1c0744a, 0x11b0008,
+0xe7f0d, 0x1580083, 0x18ab16, 0x15800e8,
+0x18ab14, 0x15800e4, 0xd8ab12, 0x1377fff,
+0x1c82410, 0x1020001, 0x1c07489, 0x11b0000,
+0xf3c0d, 0xd40004, 0x118111, 0x1580083,
+0x18ab12, 0x15800e8, 0x18ab16, 0x11b0008,
+0xe7f0d, 0x15800eb, 0x198ab14, 0xc82212,
+0x1377fff, 0x1c92410, 0x15800e4, 0xd8ab10,
+0x1020001, 0x1c07737, 0x100f02, 0xc80023,
+0x15800e8, 0x18ab14, 0x1580001, 0xd8ab12,
+0x15800e4, 0xd8ab10, 0x1020001, 0x1c07910,
+0x15800eb, 0x198ab10, 0x15800e4, 0xd8ab16,
+0xc82210, 0x15800e8, 0x18ab14, 0x1580084,
+0xd8ab10, 0x11b0008, 0xe7f2d, 0x1020001,
+0x1c06fbf, 0x15800e8, 0x18ab14, 0x1580084,
+0xd8ab12, 0x36f90f, 0x1020001, 0x1c0708c,
+0x15800eb, 0x198ab10, 0x15800e8, 0x18ab14,
+0xc82610, 0x15800e4, 0xd8ab10, 0x1580084,
+0xd8ab12, 0xc82210, 0x11b0008, 0xe7f6d,
+0x36f90f, 0x1020001, 0x1c0710d, 0x11b0000,
+0xf3c0d, 0xd40004, 0x11012a, 0x770000,
+0x11b8000, 0xf3c0d, 0x100f26, 0x11b0000,
+0xe820d, 0xc80220, 0xd40004, 0x118321,
+0x36f90f, 0x1377fff, 0x1c80090, 0x0,
+0x360120, 0x360d00, 0x169ffff, 0x1c21012,
+0x110105, 0x11b0000, 0xe880d, 0x1020001,
+0x1c03c84, 0x36f90f, 0x1377fff, 0x1c80090,
+0x0, 0x361920, 0x362500, 0x169ffff,
+0x1c21012, 0x110105, 0x11b0000, 0xe880d,
+0x1020001, 0x1c09cc9, 0x11b0000, 0xe820d,
+0x760201, 0xd32001, 0x110202, 0x100fe1,
+0x36ff5f, 0x36fd3f, 0x36fb1f, 0x36f817,
+0x1581fff, 0x118bb17, 0x70000, 0xc81000,
+0xd40084, 0x11011f, 0xd40184, 0x110118,
+0xd40284, 0x110111, 0xd40384, 0x11010a,
+0xd40484, 0x118106, 0x1e0a020, 0xc1,
+0x1400000, 0x185308, 0x100f14, 0xc80021,
+0x100f1c, 0x1cb8000, 0x614c, 0x1133e61,
+0x191341, 0x100f0d, 0x1e0a19a, 0x41,
+0x1400000, 0x185308, 0x100f08, 0x1e09f40,
+0x3c, 0x47ae14, 0x185308, 0x100f03,
+0xc81020, 0xc81448, 0x8e2202, 0x118208,
+0x8e2242, 0x110306, 0x1377fff, 0x1c80010,
+0xc80020, 0x370a20, 0x100f02, 0xc80022,
+0x0, 0x70000, 0xc80020, 0xc80420,
+0x370000, 0x370400, 0x370600, 0x370820,
+0x70000, 0x360002, 0x370000, 0x360202,
+0x370200, 0x360402, 0x370400, 0x360602,
+0x370600, 0x70000, 0xb00000, 0x110203,
+0x8f1000, 0x100f02, 0xc81000, 0xb00022,
+0x110203, 0x8f1402, 0x100f02, 0xc81402,
+0x8e2248, 0x11020b, 0xb00022, 0x110203,
+0x8f1047, 0x100f02, 0xc81047, 0xc91802,
+0xc80c49, 0x1020001, 0x1c08e17, 0x100f0f,
+0xc81020, 0x8e2200, 0x118202, 0x100f06,
+0x8e2202, 0x110203, 0xc81049, 0x100f02,
+0xc81048, 0x164e120, 0x30c601, 0xc80c48,
+0x1020001, 0x1c08e17, 0x1621c99, 0x1589312,
+0x8c1000, 0x762012, 0x3600a2, 0x10065e1,
+0x1800000, 0x10c8000, 0x1406d35, 0x14065e1,
+0x18ea2ae, 0x1407fff, 0x1cea2ae, 0x8c1246,
+0x808028, 0x0, 0x70000, 0x1580000,
+0x98bb17, 0x0, 0x37fc17, 0x37fd1f,
+0x37fe37, 0x37ff3f, 0xc82210, 0x1580002,
+0xd88b10, 0x11b0000, 0xe8829, 0xc80020,
+0x1020001, 0x1c03c73, 0x1580022, 0xd88b10,
+0x11b0000, 0xe8829, 0xc80020, 0x1020001,
+0x1c03c73, 0x1580042, 0xd88b10, 0x11b0000,
+0xe8829, 0xc80020, 0x1020001, 0x1c03c73,
+0x1580062, 0xd88b10, 0x11b0000, 0xe8829,
+0xc80020, 0x1020001, 0x1c03c73, 0x1580084,
+0xd88b10, 0x11b0000, 0xe8829, 0xc80020,
+0x1020001, 0x1c03c73, 0x15800a4, 0xd88b10,
+0x11b0000, 0xe8829, 0xc80020, 0x1020001,
+0x1c03c73, 0x15800c4, 0xd88b10, 0x11b0000,
+0xe8829, 0xc80020, 0x1020001, 0x1c03c73,
+0x15800eb, 0x1988b10, 0x1620008, 0x181302,
+0xc80020, 0x1020001, 0x1c03c73, 0x15800e4,
+0xd88b13, 0xc80220, 0xc80620, 0x10c8000,
+0x1006d88, 0xc82013, 0x1020001, 0x1c06cf8,
+0x370a13, 0x370233, 0x1377fff, 0x1c9b793,
+0x1e0a80a, 0x102f900, 0x0, 0x181300,
+0xc81023, 0xc81421, 0x11b8000, 0x82a29,
+0x11b8000, 0x82c09, 0x11b8000, 0x82e09,
+0x11b8000, 0xeba09, 0x11b0000, 0x83009,
+0x11b8000, 0x84409, 0x11b8000, 0x84289,
+0x11b8000, 0xf3ca9, 0x36ff3f, 0x36fd1f,
+0x36fe37, 0x36fc17, 0x1581fff, 0x198bb17,
+0x70000, 0x1477fff, 0x1c24400, 0x118304,
+0x144ffff, 0x1c02680, 0x100f06, 0x1477fff,
+0x1c24480, 0x110303, 0x1447fff, 0x1c02680,
+0x0, 0x70000, 0x360082, 0x8c5008,
+0x8c3048, 0x360080, 0x1407fff, 0x1ce228a,
+0x878086, 0x370022, 0x370000, 0x70000,
+0x1580002, 0x118bb17, 0x0, 0x37da17,
+0x37f29f, 0x37dc37, 0x37f4bf, 0x37de77,
+0x37f6ff, 0x35e057, 0x37f91f, 0x37fb3f,
+0x37fd5f, 0x35fedf, 0x37da0f, 0x37dd1f,
+0x37df6f, 0xc82c11, 0x37e14f, 0x1580061,
+0x18b316, 0x762613, 0xc80020, 0xc80221,
+0x360340, 0xc82a13, 0x37d8b7, 0x164e1d2,
+0x1b0d601, 0xc81a0b, 0x36d8b7, 0x37e36f,
+0xc82c11, 0x762814, 0x1377fff, 0x1cb2296,
+0x37e56f, 0xc82c11, 0x1580041, 0x18b316,
+0x360132, 0x762613, 0x37e76f, 0x37e94f,
+0x360110, 0x36dd0f, 0x1580021, 0x188310,
+0x762211, 0x37eb0f, 0x36dd0f, 0x0,
+0x360000, 0x36df0f, 0x37d8b7, 0x164e152,
+0x1b05601, 0xc80a0b, 0x36d8b7, 0x360100,
+0x37ed0f, 0x36e10f, 0x0, 0x360100,
+0x37ef0f, 0x360302, 0x37f10f, 0x36da0f,
+0xd40104, 0x118463, 0x36f10f, 0x360021,
+0x1e08000, 0x33, 0x1ad7f2a, 0x190300,
+0x1377fff, 0x1c80090, 0x36e92f, 0x36008b,
+0x3600e8, 0x3600a2, 0x8c3208, 0x8c1ace,
+0x80e426, 0x8c32c8, 0x8c72c2, 0x1407fff,
+0x1cebaa3, 0x1407fff, 0x1ce7a26, 0x143ffff,
+0x1cefa8e, 0x881a69, 0x1467fff, 0x1c1c383,
+0x88686d, 0x8e2003, 0x118307, 0x1646170,
+0x30261f, 0x1020001, 0x1c06d08, 0x370005,
+0x100f03, 0xc80020, 0x370005, 0x36e50f,
+0xc80420, 0x1377fff, 0x1c80090, 0x36eb2f,
+0x1377fff, 0x1c90092, 0x36e74f, 0x36e36f,
+0x1377fff, 0x1ca0094, 0x360000, 0x1377fff,
+0x1cb0096, 0x894009, 0x808a80, 0x370000,
+0x360002, 0x89400b, 0x808a80, 0x370002,
+0x360004, 0x894007, 0x808a80, 0x370004,
+0x360006, 0x89400f, 0x808a80, 0x370006,
+0x8e2049, 0x110302, 0x100f08, 0x164e130,
+0x30c613, 0x1020001, 0x1c08e17, 0x1020001,
+0x1c08cfd, 0xc80400, 0x36ef0f, 0x1467fff,
+0x1c00162, 0x1467fff, 0x1c10167, 0x762a15,
+0x762211, 0x762613, 0x36ed2f, 0x1377fff,
+0x1c80090, 0x1377fff, 0x1c90092, 0x36e94f,
+0x760201, 0x762814, 0x37e94f, 0x370000,
+0x37002a, 0x36da0f, 0xd32001, 0x10059f,
+0xc9000d, 0x1020001, 0x1c08cfd, 0x36dd0f,
+0x0, 0x11b8000, 0x81008, 0xc80e05,
+0x34e057, 0x16461d3, 0x1b0560f, 0x34fedf,
+0xc81a0f, 0x36fd5f, 0x36fb3f, 0x36f91f,
+0x36de77, 0x36dc37, 0x36da17, 0x36f6ff,
+0x36f4bf, 0x36f29f, 0x1581ffd, 0x118bb17,
+0x70000, 0x1580001, 0x198bb17, 0x0,
+0x37e617, 0x37f29f, 0x37e837, 0x37f4bf,
+0x37ea77, 0x37f6ff, 0x35ec57, 0x37f91f,
+0x37fb3f, 0x37fd5f, 0x35fedf, 0xc82610,
+0xc82212, 0xc82a14, 0xc82016, 0x37e76f,
+0x360820, 0x1580061, 0x189b10, 0x762a15,
+0xc80048, 0x14bffff, 0x1c12002, 0x37e90f,
+0x1377fff, 0x1c82293, 0xc91802, 0x37eb0f,
+0x1580041, 0x189b10, 0x37ed0f, 0x1580021,
+0x189b10, 0x37ef0f, 0xc82016, 0x1020001,
+0x1c08e17, 0x37e4b7, 0x164e1d2, 0x1b0d601,
+0xc81a0b, 0x36e4b7, 0xc80020, 0xc80221,
+0x11b8000, 0x38209, 0xc80600, 0xc80020,
+0x1646101, 0x1b0f601, 0x11b8000, 0x8120b,
+0x37e4b7, 0x164e152, 0x1b05601, 0xc80a0b,
+0x36e4b7, 0x360800, 0xd40104, 0x110345,
+0x14bffff, 0x1c12000, 0x11b0000, 0x8120b,
+0xc91802, 0x1020001, 0x1c08e17, 0x11b8000,
+0x8120b, 0x1008001, 0x1c06f6a, 0x360803,
+0xc81221, 0x8c1260, 0x360005, 0x808020,
+0x100750b, 0x1800000, 0x11b0000, 0x8120b,
+0x880260, 0x11b8000, 0x8120b, 0xd40094,
+0x110127, 0x360c03, 0xd32003, 0x118223,
+0x11b0000, 0x38209, 0xd44004, 0x11021f,
+0x36e70f, 0x360e83, 0x360820, 0x701202,
+0xd32041, 0x110219, 0x13760d0, 0x80011,
+0xc91805, 0x1020001, 0x1c08e17, 0x1466170,
+0x1000060, 0x370000, 0x11b0000, 0x38209,
+0x13761f0, 0x80011, 0x37f10f, 0x1020001,
+0x1c06d08, 0x36f10f, 0x0, 0x11b8000,
+0x8008, 0x11b0000, 0x38209, 0x760000,
+0x11b8000, 0x38209, 0xc80620, 0x36e70f,
+0x760201, 0x360800, 0xd32001, 0x1002bd,
+0x36e90f, 0xc80020, 0x1377fff, 0x1c80090,
+0x36ed2f, 0x36eb4f, 0x1377fff, 0x1c90092,
+0x1377fff, 0x1ca0094, 0x360020, 0x8c4042,
+0x360022, 0x1407fff, 0x1ce2228, 0x360084,
+0x8e2008, 0x11830e, 0x36ef0f, 0x1377fff,
+0x1c80090, 0x0, 0x3600a0, 0x8e200a,
+0x118307, 0x8c0248, 0x164e120, 0x30c601,
+0x1020001, 0x1c08e17, 0x100f02, 0xc80020,
+0x360483, 0xc80c20, 0x895a00, 0x8e20cb,
+0x1083a3, 0xc80048, 0x3600a5, 0xc81220,
+0x890240, 0x360683, 0x80808a, 0x100750b,
+0x1800000, 0x11b0000, 0x38209, 0xd44004,
+0x10029e, 0xd40034, 0x110310, 0x1377fff,
+0x1c80011, 0x37e4b7, 0x164e152, 0x1b0560d,
+0xc80a0b, 0x36e4b7, 0x370060, 0x11b0000,
+0x38209, 0x1377fff, 0x1c80011, 0x0,
+0x360070, 0xc81e07, 0x11b0000, 0x38209,
+0x14bffff, 0x1c42001, 0x760603, 0x882a65,
+0x1377fff, 0x1c80011, 0x0, 0x360000,
+0x809680, 0x370000, 0xc80002, 0x1020001,
+0x1c08cfd, 0x164e1b0, 0x30c601, 0x1020001,
+0x1c08e17, 0x36ed0f, 0x360e23, 0x36e92f,
+0x1377fff, 0x1c80090, 0x1377fff, 0x1c90092,
+0x360080, 0x3600a2, 0x1407fff, 0x1cef08f,
+0x1407fff, 0x1ce70a7, 0xd32043, 0x1008010,
+0x806ed0, 0xc81221, 0x1008001, 0x1c06ed0,
+0xc80e05, 0x34ec57, 0x16461d3, 0x1b0560f,
+0x34fedf, 0xc81a0f, 0x36fd5f, 0x36fb3f,
+0x36f91f, 0x36ea77, 0x36e837, 0x36e617,
+0x36f6ff, 0x36f4bf, 0x36f29f, 0x1581ffe,
+0x98bb17, 0x70000, 0x11b0000, 0x81208,
+0xb00000, 0x11830d, 0x360420, 0x1e08000,
+0x3f, 0xdc28f6, 0x190300, 0x360a80,
+0x881202, 0x370420, 0x8e2002, 0x118217,
+0x370400, 0x100f15, 0x11b0000, 0x81028,
+0x11b0000, 0x81888, 0x8e2202, 0x11830f,
+0x1e08000, 0xbe, 0x99999a, 0x190302,
+0x8e2040, 0x110209, 0x360420, 0xc80047,
+0x360a80, 0x891202, 0x370420, 0x8e2002,
+0x110302, 0x370400, 0x0, 0x70000,
+0x11b0000, 0x38228, 0xc80020, 0xd40024,
+0x118317, 0x14bffff, 0x1c14021, 0x1377fff,
+0x1ca0010, 0x760000, 0x1467fff, 0x1c40168,
+0x1580008, 0x18a314, 0x14b7fff, 0x1c42008,
+0x1377fff, 0x1cb0412, 0x0, 0x360086,
+0x1447fff, 0x1c40468, 0x370084, 0x11b0000,
+0x38288, 0xd32200, 0x1082ed, 0x0,
+0x70000, 0x1580001, 0x198bb17, 0x0,
+0x37e617, 0x37f29f, 0x37e837, 0x37f4bf,
+0x37ea77, 0x37f6ff, 0x35ec57, 0x37f91f,
+0x37fb3f, 0x37fd5f, 0x35fedf, 0x37e71f,
+0xc82612, 0xc82214, 0x1377fff, 0x1caa410,
+0x360821, 0xc80048, 0x14bffff, 0x1c12002,
+0xc91802, 0x1020001, 0x1c08e17, 0x37e4b7,
+0x164e1d2, 0x1b0d601, 0xc81a0b, 0x36e4b7,
+0x1e09e91, 0x1d70a3c, 0x147ae14, 0x184300,
+0x3626a1, 0x1467fff, 0x1c306ec, 0x8c0002,
+0x8c2a02, 0x37e86f, 0x37ea0f, 0x361666,
+0x8c02aa, 0x37ec0f, 0xd40064, 0x11010c,
+0x360c01, 0x360e26, 0x770000, 0x8c12a2,
+0x361086, 0x14bffff, 0x1c02000, 0x37ee2f,
+0x1407fff, 0x1ce7208, 0x100f06, 0x1e0e164,
+0x0, 0x0, 0x183b00, 0x37ee0f,
+0x362406, 0xd40004, 0x11010b, 0x360c01,
+0x361c26, 0x770000, 0x8c12a2, 0x361e86,
+0x14bffff, 0x1c02000, 0x37f02f, 0x80a408,
+0x100f06, 0x1e0e164, 0x0, 0x0,
+0x180b00, 0x37f00f, 0x360c21, 0x36e86f,
+0x13be120, 0x1b00605, 0x360286, 0x14bffff,
+0x1c52000, 0x360801, 0x1407fff, 0x1cef6a8,
+0xd32002, 0x11820c, 0x100f5e, 0x1377fff,
+0x1c80195, 0x361421, 0x360000, 0x858400,
+0x370000, 0x360801, 0x760603, 0xd32003,
+0x110254, 0x1377fff, 0x1c80195, 0x36e82f,
+0x88784f, 0x36ee2f, 0x883847, 0x360000,
+0x36f02f, 0x880841, 0x1477fff, 0x1c24480,
+0x118104, 0xc80020, 0x370000, 0x100fee,
+0x36e72f, 0x1377fff, 0x1c80193, 0x14bffff,
+0x1c14021, 0x14bffff, 0x1c02003, 0x8c0040,
+0x8c02a0, 0x14b7fff, 0x1c02000, 0x1377fff,
+0x1c90012, 0x0, 0x360002, 0x1447fff,
+0x1c48060, 0x8902e9, 0x1020001, 0x1c06da7,
+0xc80400, 0x8900e9, 0x901602, 0x1020001,
+0x1c06da7, 0xc80400, 0x890029, 0x901202,
+0x1020001, 0x1c06da7, 0x1e08000, 0x3d,
+0x47ae14, 0x190308, 0xc80400, 0x880209,
+0x900402, 0x8e200b, 0x1003c1, 0x880202,
+0x8e200b, 0x1003be, 0x14bffff, 0x1c02003,
+0x36ea8f, 0x1446052, 0x400, 0x8e2200,
+0x118302, 0x100f02, 0xc90005, 0x36ec8f,
+0x8c0200, 0x8e200b, 0x1003b1, 0x8e222b,
+0x1003b5, 0x8e204b, 0x1003b3, 0x1377fff,
+0x1c80195, 0xc80448, 0x361481, 0x360000,
+0x891002, 0x809020, 0x370000, 0x100faa,
+0xc80e05, 0x34ec57, 0x16461d3, 0x1b0560f,
+0x34fedf, 0xc81a0f, 0x36fd5f, 0x36fb3f,
+0x36f91f, 0x36ea77, 0x36e837, 0x36e617,
+0x36f6ff, 0x36f4bf, 0x36f29f, 0x1581ffe,
+0x98bb17, 0x70000, 0x1580000, 0x158bb17,
+0x0, 0x37fb1f, 0x37fd3f, 0x37ff5f,
+0xc82610, 0x37f74f, 0xc82012, 0x1377fff,
+0x1caa412, 0xc8042d, 0x1377fff, 0x1c92110,
+0xc82215, 0x1377fff, 0x1ca2115, 0x13b6501,
+0x1b11623, 0xc82c10, 0x362503, 0x1467fff,
+0x1c0006a, 0x360d33, 0x37f93f, 0x1467fff,
+0x1c5016c, 0x13b6583, 0x1b1662d, 0x10c8000,
+0x4070af, 0x1406583, 0x18e0a80, 0x1467fff,
+0x1c5016c, 0x762c16, 0x36f93f, 0xc82a10,
+0x809480, 0xc80421, 0x762613, 0x762a15,
+0x10c8000, 0x8070ca, 0x360084, 0x1377fff,
+0x1ca3014, 0x760402, 0x3600a2, 0x1377fff,
+0x1c93012, 0x142e58d, 0x18e0a80, 0x1006563,
+0x1800000, 0x809060, 0x1467fff, 0x1c5006b,
+0x1467fff, 0x1c40066, 0x10077ab, 0x1800000,
+0x1007587, 0x1800000, 0x36f73f, 0x0,
+0x360883, 0xb0fd88, 0xd32202, 0x110318,
+0x36f93f, 0x1376589, 0x18a8110, 0x13765a5,
+0x1898113, 0x760402, 0x142e58d, 0x18e0a80,
+0x1006563, 0x1800000, 0x809060, 0x1467fff,
+0x1c40066, 0x1467fff, 0x1c5006b, 0x370083,
+0x3700ad, 0x36f73f, 0x0, 0x360883,
+0xb0fd88, 0xd32202, 0x1083ea, 0x36f73f,
+0x0, 0x360883, 0xd32202, 0x11021a,
+0x36f93f, 0x1376589, 0x18a8110, 0x13765a5,
+0x1898113, 0x760402, 0x859480, 0x360086,
+0x1377fff, 0x1cb3016, 0x360061, 0x1377fff,
+0x1c8b011, 0x809060, 0x1467fff, 0x1c40066,
+0x1467fff, 0x1c5006b, 0x370083, 0x3700ad,
+0x36f73f, 0x0, 0x360883, 0xd32202,
+0x1082e8, 0x36ff5f, 0x36fd3f, 0x36fb1f,
+0x1581fff, 0xd8bb17, 0x70000, 0x1580006,
+0x58bb17, 0x0, 0x37f817, 0x37bc9f,
+0x37fa37, 0x37bebf, 0x37fc77, 0x37c0ff,
+0x35fe57, 0x37c31f, 0x37c53f, 0x37c75f,
+0x35c8df, 0x37a13f, 0x37a36f, 0x37a54f,
+0x1580040, 0x189312, 0xc80248, 0x360824,
+0xc80001, 0x37a72f, 0x14bffff, 0x1c72002,
+0x362520, 0xc9180e, 0x37a92f, 0x360d00,
+0x37ab0f, 0xc82014, 0x1020001, 0x1c08e17,
+0x1e09e51, 0x1d70a42, 0x1900000, 0x181b0a,
+0x37ac0f, 0x1e09e91, 0x1d70a00, 0x2,
+0x184306, 0x363200, 0x379eb7, 0x164e152,
+0x1b05615, 0xc80a0b, 0x369eb7, 0x8c4a0e,
+0xe60006, 0x8c306e, 0x3626a0, 0x37ae6f,
+0x36ac8f, 0x8c420a, 0x37b08f, 0x1020001,
+0x1c08de0, 0x37b20f, 0x14bffff, 0x1c62041,
+0x1467fff, 0x1c6c38e, 0x361200, 0x1020001,
+0x1c08e17, 0x37b40f, 0xc80020, 0x37f207,
+0xc80600, 0x360801, 0xd40004, 0x110110,
+0xc82411, 0x1581ffa, 0x98bb10, 0x1020001,
+0x1c06cff, 0x1581ffa, 0x98bb10, 0x1581ffa,
+0x98bb12, 0xc80021, 0x37f207, 0xc80600,
+0x360200, 0x880020, 0x370202, 0x1377fff,
+0x1c8b791, 0x10c8000, 0x80717e, 0x360801,
+0xd40004, 0x110111, 0x1581ffa, 0x98bb10,
+0xc82411, 0xc8003f, 0x7a0003, 0x1377fff,
+0x1c80010, 0x1020001, 0x1c06cff, 0x1581fff,
+0x58bb10, 0xc80020, 0x1377fff, 0x1c80190,
+0x760603, 0x370000, 0x1377fff, 0x1c8b791,
+0x0, 0x1581ffc, 0x1d8bb10, 0x1581ffe,
+0x198bb15, 0xc80220, 0x1581ffa, 0x98bb13,
+0x1581ffe, 0xd8bb11, 0x37b70f, 0xd40034,
+0x11832a, 0x36a50f, 0x0, 0x360800,
+0x14bffff, 0x1c12000, 0x360003, 0xc91802,
+0x1020001, 0x1c08e17, 0x1581ffd, 0x98bb10,
+0x360223, 0x1377fff, 0x1c90090, 0x370021,
+0x370005, 0x36b70f, 0x360005, 0x1020001,
+0x1c0bbe2, 0x1581ffe, 0x18bb10, 0x1581ffd,
+0x158bb14, 0x1377fff, 0x1c90090, 0x1377fff,
+0x1c80094, 0x360001, 0x1020001, 0x1c0bbe2,
+0x36b70f, 0x762a15, 0x1377fff, 0x1c9b793,
+0x762211, 0x760201, 0x762010, 0x37b70f,
+0xd32061, 0x1082d8, 0x36ab0f, 0xc80020,
+0xc80430, 0xc80221, 0xc80e00, 0x370000,
+0x37b82f, 0x36a90f, 0x0, 0x370008,
+0x36a50f, 0x0, 0x360800, 0xd40104,
+0x110338, 0x1008001, 0x1c072a7, 0xc80409,
+0x36b08f, 0x1466052, 0x10402, 0x8e2048,
+0x11830e, 0x36a50f, 0x8c02a0, 0x14b7fff,
+0x1c02000, 0x36b22f, 0x7a0040, 0x363100,
+0x1377fff, 0x1c80010, 0x0, 0x360000,
+0x8f0000, 0x8c580b, 0x762211, 0x762613,
+0x761e0f, 0xd3206f, 0x1010010, 0x807280,
+0x36a50f, 0x36ab2f, 0x361600, 0x36a70f,
+0x1377fff, 0x1c90092, 0x1377fff, 0x1c80090,
+0x36a94f, 0x1377fff, 0x1ca0094, 0x760201,
+0x360020, 0x89404b, 0x808082, 0x370000,
+0x1467fff, 0x1c00064, 0x370002, 0x360000,
+0x36a50f, 0x1467fff, 0x1c00069, 0x360820,
+0x37000c, 0xd32041, 0x1010000, 0x8072a7,
+0x14bffff, 0x1c14021, 0x14bffff, 0x1c02001,
+0x8c0040, 0x36ac2f, 0x8c0040, 0x14b7fff,
+0x1c5a000, 0x36b80f, 0xd3200b, 0x110130,
+0x36a10f, 0x1581ffa, 0x58bb12, 0x1377fff,
+0x1ca0590, 0x1581ffa, 0x18bb10, 0x144ffff,
+0x1c06407, 0x1020001, 0x1c0bbe2, 0x1581ffd,
+0x158bb11, 0x1581ffe, 0x18bb13, 0xc81e20,
+0x1581ffe, 0xd8bb15, 0xd40034, 0x118316,
+0xc82011, 0xc82413, 0x36a007, 0x36a227,
+0x1020001, 0x1c06db4, 0x36a10f, 0x762211,
+0x762613, 0x761e0f, 0x1377fff, 0x1c80590,
+0x0, 0x144ffff, 0x1c06007, 0x1447fff,
+0x1c0006a, 0x100750b, 0x1800000, 0xd3206f,
+0x1082ec, 0x37b8bf, 0x36a10f, 0x1377fff,
+0x1c80590, 0x0, 0x360070, 0x1581ffc,
+0x1d8bb10, 0x1581ffe, 0xd8bb11, 0xc81620,
+0x1581ffd, 0x158bb15, 0x1581ffe, 0x18bb13,
+0x37bb0f, 0xd40034, 0x118321, 0x1581ffd,
+0x98bb10, 0x36bb2f, 0x1377fff, 0x1c80590,
+0x360002, 0xc82413, 0x360020, 0xc82015,
+0x1020001, 0x1c06db4, 0x1581ffe, 0x198bb10,
+0x1377fff, 0x1c80590, 0x0, 0x360000,
+0x1447fff, 0x1c00062, 0x370001, 0x1020001,
+0x1c06da7, 0x36bb0f, 0x762a15, 0x762613,
+0x76160b, 0x762010, 0x37bb0f, 0x1007503,
+0x1800000, 0xd3206b, 0x1082e1, 0x36a50f,
+0x0, 0x360c00, 0xd32001, 0x110204,
+0xc81620, 0x1008001, 0x1c071de, 0x36b4bf,
+0x36f207, 0xd40004, 0x11010c, 0x36a30f,
+0x36e607, 0x1377fff, 0x1c80090, 0x144ffff,
+0x1c04400, 0x144ffff, 0x1c00060, 0x1020001,
+0x1c06da7, 0x900a00, 0x1581ffe, 0xd8bb11,
+0x1581fff, 0x58bb13, 0xc81e20, 0xd40034,
+0x1008010, 0xc071de, 0x36a30f, 0x360001,
+0x1377fff, 0x1c80090, 0x0, 0x144ffff,
+0x1c00060, 0x1020001, 0x1c06da7, 0x360023,
+0x900000, 0xd40024, 0x1008010, 0x4071cb,
+0x36a50f, 0x0, 0x360e20, 0xd32041,
+0x118208, 0x14bffff, 0x1c130a1, 0x8e2040,
+0x110203, 0xc80020, 0x100f02, 0x890040,
+0x360023, 0xd40024, 0x1008010, 0x4071cb,
+0x14bffff, 0x1c12001, 0x36ae8f, 0x881202,
+0x8e2222, 0x1008010, 0xc071c5, 0x1008001,
+0x1c071c6, 0xc80e05, 0x34fe57, 0x16461d3,
+0x1b0560f, 0x34c8df, 0xc81a0f, 0x36c75f,
+0x36c53f, 0x36c31f, 0x36fc77, 0x36fa37,
+0x36f817, 0x36c0ff, 0x36bebf, 0x36bc9f,
+0x1581ff9, 0x1d8bb17, 0x70000, 0x360880,
+0xd40084, 0x110122, 0x144ffff, 0x1c56000,
+0x144ffff, 0x1c46200, 0x901c08, 0x360462,
+0x90100a, 0x3604a0, 0x8c30c8, 0x8c524e,
+0x8e2246, 0x110303, 0x8e2048, 0x11830c,
+0x144ffff, 0x1c06000, 0x1467fff, 0x1c14382,
+0x900000, 0x8e2040, 0x11030d, 0x360400,
+0x360422, 0x8e2040, 0x118309, 0x360400,
+0x370402, 0x360600, 0x370602, 0x1020001,
+0x1c06cf8, 0xc80021, 0x100f02, 0xc80020,
+0x0, 0x70000, 0x100751f, 0x1800000,
+0x3608a0, 0xd400a4, 0x11011f, 0x144ffff,
+0x1c36000, 0x144ffff, 0x1c56200, 0x90020a,
+0x3604e2, 0x901406, 0x360460, 0x8c72ca,
+0x8c30c1, 0x8e20ce, 0x110303, 0x8e204a,
+0x11830c, 0x144ffff, 0x1c56000, 0x1467fff,
+0x1c14382, 0x90140a, 0x8e204a, 0x11030a,
+0x360420, 0x3604a2, 0x8e2242, 0x118306,
+0x900000, 0x8e2200, 0x110205, 0xc80020,
+0x370004, 0xc80020, 0x100f08, 0x360400,
+0x370402, 0x360600, 0x370602, 0x1020001,
+0x1c06cf8, 0xc80021, 0x36fe17, 0x772e17,
+0x70000, 0x1580028, 0x188312, 0xc81020,
+0x11b0000, 0x382a8, 0xc80408, 0xd400a4,
+0x11830d, 0xc81421, 0x360062, 0xe6500a,
+0xd32246, 0x118102, 0x760402, 0x762412,
+0x11b0000, 0x382a8, 0x761008, 0xd32248,
+0x1082f5, 0xc80002, 0x0, 0x70000,
+0x1580000, 0xd8bb17, 0x0, 0x37fb1f,
+0x37fd3f, 0x37ff5f, 0xc80020, 0x372e00,
+0x361222, 0xd40324, 0x118105, 0x11b0000,
+0x800c, 0x372c00, 0x100f26, 0xc82a10,
+0x372c00, 0x10c8000, 0xc0734a, 0x1580002,
+0x1988314, 0x1377fff, 0x1c8a115, 0x1580002,
+0x1d88313, 0x360205, 0x1377fff, 0x1cab795,
+0x1467fff, 0x1c00062, 0x1447fff, 0x1c00068,
+0x370004, 0x360001, 0x1447fff, 0x1c00066,
+0x370003, 0x1e08000, 0x3d, 0x199999a,
+0x190300, 0x360023, 0x8e2002, 0x110204,
+0x360200, 0x370004, 0x100f06, 0x360004,
+0xc91802, 0x1020001, 0x1c08e17, 0x370004,
+0x361006, 0x370202, 0x362e00, 0x1477fff,
+0x1c24400, 0x11830d, 0x1cb8000, 0x614c,
+0x18b2361, 0x198b21, 0x360222, 0x80900a,
+0x14bffff, 0x1c12002, 0x8c0040, 0x14b7fff,
+0x1c02000, 0x370202, 0x36ff5f, 0x36fd3f,
+0x36fb1f, 0x1581fff, 0x158bb17, 0x70000,
+0x1580000, 0x158bb17, 0x0, 0x37f617,
+0x37f69f, 0x37f837, 0x37f8bf, 0x37fa77,
+0x37fb1f, 0x37fd3f, 0x37ff5f, 0xc82a10,
+0xc82612, 0xc82214, 0xc80020, 0xc80e23,
+0x373603, 0xc80600, 0xc8003f, 0xc80220,
+0x7a0003, 0x1377fff, 0x1c80013, 0x0,
+0x370c10, 0x360800, 0xd40004, 0x110139,
+0x11b0000, 0x3820d, 0xd40004, 0x11032d,
+0x100f49, 0xc8003f, 0x7a0003, 0x1377fff,
+0x1c80013, 0x0, 0x360220, 0x1377fff,
+0x1c80095, 0xc8103f, 0xc8162d, 0x7a4203,
+0xc9180b, 0x11b0000, 0x80a8, 0x360000,
+0x1377fff, 0x1c80413, 0x0, 0x360080,
+0x808082, 0x894a40, 0x1447fff, 0x1c04409,
+0x1020001, 0x1c08e17, 0x1020001, 0x1c08a13,
+0x1620008, 0x181302, 0x859609, 0x7a1043,
+0x8c0000, 0x1377fff, 0x1c80115, 0x1377fff,
+0x1c80090, 0x760201, 0x11b8000, 0x10008,
+0x11b0000, 0x3820d, 0xd32001, 0x11021e,
+0x1377fff, 0x1c80095, 0x361001, 0x360020,
+0x8e2002, 0x1003d0, 0x362c23, 0x100fd4,
+0x11b0000, 0x3820d, 0xd40004, 0x118312,
+0x1e0a80a, 0x102f900, 0x80, 0x180302,
+0x7a1043, 0x1377fff, 0x1c80115, 0x1580010,
+0x188310, 0x1377fff, 0x1c90090, 0x760201,
+0x370002, 0x11b0000, 0x3822d, 0xd32041,
+0x1082f9, 0x770e07, 0x760603, 0xd40074,
+0x1003a6, 0x11b0000, 0x3820d, 0xc80420,
+0xd40004, 0x110314, 0x1377fff, 0x1c84013,
+0xc80020, 0x1646100, 0x1308601, 0x11b8000,
+0x3800d, 0x10c8000, 0x10073f5, 0x360000,
+0xd32200, 0x118304, 0x11b8000, 0x3802d,
+0xc81000, 0x1377fff, 0x1c83790, 0x760402,
+0x100f49, 0x1377fff, 0x1ca0115, 0x1580010,
+0x18ab10, 0x1377fff, 0x1c94013, 0x1e0a80a,
+0x102f900, 0x0, 0x185308, 0xc80008,
+0x11b8000, 0x2808c, 0x11b8000, 0x300ac,
+0x10c8000, 0xc07428, 0x1377fff, 0x1ca0110,
+0x360081, 0x3600a4, 0x8e220a, 0x11020d,
+0x1377fff, 0x1ca0115, 0xc81021, 0x1580028,
+0x18a314, 0xe64008, 0x166ffff, 0x1c40468,
+0x370084, 0x360082, 0x761008, 0x370082,
+0x1377fff, 0x1cb0115, 0x1377fff, 0x1ca0110,
+0x1580030, 0x18b316, 0x360084, 0x3600a6,
+0x8e2248, 0x110202, 0x370086, 0x760000,
+0x1580008, 0x188310, 0x1377fff, 0x1c93792,
+0x1377fff, 0x1c80115, 0x1580028, 0x188310,
+0x0, 0x360000, 0xd40004, 0x118108,
+0x1580003, 0xd89b12, 0xc80025, 0x370000,
+0x360002, 0x760000, 0x370002, 0x11b0000,
+0x3820d, 0x760402, 0xd32002, 0x1002a7,
+0x100fb9, 0x36ff5f, 0x36fd3f, 0x36fb1f,
+0x36fa77, 0x36f837, 0x36f617, 0x36f8bf,
+0x36f69f, 0x1581fff, 0xd8bb17, 0x70000,
+0x1580000, 0x98bb17, 0x0, 0x37fc17,
+0x37fe37, 0x11b0000, 0x382ea, 0x1581ff3,
+0x1190306, 0xc81420, 0xd400e4, 0x11832f,
+0x1377fff, 0x1ca0512, 0x761c25, 0x11b0000,
+0x2801c, 0xce72c1, 0x118122, 0xc81c02,
+0xd400e4, 0x110202, 0x761c0e, 0x1377fff,
+0x1ca0512, 0xed01ee, 0x14bffff, 0x1c0a000,
+0x14bffff, 0x1c7200e, 0x360034, 0x143ffff,
+0x1cee13e, 0x14b7fff, 0x1c7200e, 0x6e084e,
+0xd322c8, 0x118302, 0xc81c08, 0x7018ce,
+0xd32043, 0x110202, 0xc81c06, 0x13761e1,
+0x10a0710, 0xd3202e, 0x110206, 0xc81c49,
+0x13b75e9, 0x1b0660d, 0xd32026, 0x1082fd,
+0x11b0000, 0x382ea, 0x76140a, 0xd322ca,
+0x110202, 0x100fd3, 0x36fe37, 0x36fc17,
+0x1581fff, 0x198bb17, 0x70000, 0x1580000,
+0x158bb17, 0x0, 0x37f617, 0x37fb1f,
+0x37fd3f, 0x37ff5f, 0xc82a10, 0xc82216,
+0xc82012, 0x37f74f, 0x37f92f, 0x1377fff,
+0x1c9c010, 0xc80220, 0x10c8000, 0xc074a1,
+0x1646110, 0x31062b, 0x1020001, 0x1c0730f,
+0x370003, 0x1377fff, 0x1c9b793, 0x760201,
+0x11b0000, 0x3802d, 0xd40324, 0x1010000,
+0x40754b, 0xc81021, 0xc81425, 0x11b0000,
+0x3826d, 0xc80020, 0xe61048, 0xcd1242,
+0xd40064, 0x11034b, 0xc80420, 0x11b0000,
+0x3828d, 0xc80002, 0xd40084, 0x110369,
+0x11b8000, 0x3820d, 0x11b0000, 0x3800d,
+0xd40304, 0x1010000, 0x40754b, 0x36f90f,
+0xc80420, 0x10c8000, 0xc0754a, 0xd40024,
+0x118109, 0x36f92f, 0x0, 0x360002,
+0x36f72f, 0x900000, 0x361c82, 0x8e2200,
+0x11027e, 0x11b0000, 0x3820d, 0x360281,
+0xd32200, 0x118205, 0x11b0000, 0x3800d,
+0xd32002, 0x110175, 0x360c00, 0xb0fc00,
+0x118364, 0x100f64, 0x1377fff, 0x1c80015,
+0x1580028, 0x188310, 0x0, 0x360080,
+0xd40884, 0x110116, 0xc80c21, 0x11b0000,
+0x380ad, 0xe63246, 0xd320c8, 0x110110,
+0x1620008, 0x184308, 0x7a420a, 0x3614a1,
+0x1377fff, 0x1c90415, 0x1377fff, 0x1c90012,
+0x0, 0x11b0000, 0x1008a, 0x8e2248,
+0x118303, 0xc81030, 0x370080, 0x11b0000,
+0x3828d, 0x760000, 0xd32200, 0x1002b7,
+0x1377fff, 0x1c90015, 0x1580028, 0x189310,
+0x0, 0x1677fff, 0x1c40160, 0x110304,
+0xc81030, 0x370080, 0x100ff1, 0x1620008,
+0x18530a, 0x11b0000, 0x3808d, 0x7a4248,
+0x11b0000, 0x300aa, 0x1377fff, 0x1c90415,
+0x1377fff, 0x1c90012, 0x0, 0x11b0000,
+0x1008a, 0x8e2248, 0x1083c4, 0x14bffff,
+0x1c530a1, 0x1467fff, 0x1c50562, 0x8e2248,
+0x1083be, 0xc81030, 0x370080, 0x100fd8,
+0x1377fff, 0x1c90115, 0x1580028, 0x189310,
+0x0, 0x360080, 0x169ffff, 0x1c23008,
+0x11010d, 0x1377fff, 0x1ca0015, 0x360082,
+0x760000, 0x370084, 0x11b0000, 0x808a,
+0x11b8000, 0x808c, 0x360080, 0x11b8000,
+0x2808c, 0x11b0000, 0x3828d, 0x760402,
+0xd32202, 0x1008000, 0x8074b6, 0x100fe5,
+0xc80020, 0x1377fff, 0x1c92110, 0x14bffff,
+0x1c42000, 0x1e09fc0, 0x3d, 0x1eb852,
+0x18330a, 0x360002, 0x8c4248, 0x895006,
+0x809480, 0x370002, 0x1377fff, 0x1c83790,
+0x760402, 0x36ff5f, 0x36fd3f, 0x36fb1f,
+0x36f617, 0x1581fff, 0xd8bb17, 0x70000,
+0x1580000, 0x1d8bb17, 0x0, 0x37fc17,
+0x37f49f, 0x37fe37, 0x37f71f, 0x37f93f,
+0x37fb5f, 0x1646100, 0xb11621, 0xc82a12,
+0xc82614, 0xc82011, 0xc80020, 0x360623,
+0x1020001, 0x1c03c73, 0x11b0000, 0x3820d,
+0xc80620, 0xd40004, 0x118337, 0x1377fff,
+0x1ca0195, 0x1581fff, 0xd8bb12, 0x360403,
+0x1581fff, 0x98bb10, 0x14bffff, 0x1c02000,
+0x360024, 0x11b0000, 0x808c, 0x808028,
+0x890020, 0x1020001, 0x1c0bbe2, 0x1377fff,
+0x1ca0195, 0x1581fff, 0x158bb12, 0x1581fff,
+0x118bb10, 0x360004, 0x8f0000, 0x1020001,
+0x1c0bbe2, 0x360603, 0xc81220, 0xd40004,
+0x118313, 0x1377fff, 0x1ca0491, 0x1581fff,
+0xd8bb12, 0x36f407, 0x1581fff, 0x98bb10,
+0x1447fff, 0x1c00068, 0x370004, 0x36f807,
+0x36fa27, 0x1020001, 0x1c06db4, 0x360603,
+0x761209, 0xd32009, 0x1082ef, 0x11b0000,
+0x3820d, 0x760603, 0xd32003, 0x110202,
+0x100fcb, 0x36fb5f, 0x36f93f, 0x36f71f,
+0x36fe37, 0x36fc17, 0x36f49f, 0x1581fff,
+0x58bb17, 0x70000, 0x1580000, 0x118bb17,
+0x0, 0x37fa17, 0x37fa9f, 0x37fc37,
+0x37fcbf, 0x37fe77, 0x37feff, 0xc80020,
+0xc80c21, 0x370000, 0x360604, 0x360020,
+0x770000, 0xc81002, 0xd40104, 0x110317,
+0x1e08000, 0x3f, 0x666666, 0x190300,
+0x8c0002, 0x8e2008, 0x118340, 0xc80021,
+0x100f3f, 0x8e2200, 0x118307, 0x144ffff,
+0x1c70760, 0x901c0e, 0x8e224e, 0x118302,
+0xc81000, 0x360604, 0x760c06, 0x770000,
+0xd32006, 0x1002eb, 0x1377fff, 0x1cb0312,
+0x0, 0x3600e6, 0x8802ce, 0x36fe16,
+0x890020, 0x360236, 0x890060, 0x1467fff,
+0x1c52680, 0x1083f0, 0x890023, 0x901200,
+0x8e2249, 0x1003ec, 0xc9180a, 0x1020001,
+0x1c08e17, 0xc81248, 0x8c7800, 0xc81447,
+0x14bffff, 0x1c5a006, 0x89200f, 0x88380f,
+0x897ae9, 0x88000b, 0x8c72ee, 0x8c2244,
+0x360494, 0x8c5a47, 0x80a81e, 0x14bffff,
+0x1c4a009, 0x897220, 0x809631, 0x8e2040,
+0x1083cd, 0x144ffff, 0x1c08760, 0x900201,
+0x8e2241, 0x118302, 0xc81002, 0xc80400,
+0x3700e0, 0x100fcc, 0xc80020, 0x36fe77,
+0x36feff, 0x36fc37, 0x36fcbf, 0x36fa17,
+0x36fa9f, 0x1581fff, 0x118bb17, 0x70000,
+0x1580001, 0x18bb17, 0x0, 0x37f217,
+0x37f49f, 0x37f437, 0x37f6bf, 0x37f677,
+0x37f8ff, 0x35f857, 0x37fb1f, 0x37fd3f,
+0x37ff5f, 0x1646103, 0x1b11621, 0x37f0b7,
+0x164e152, 0x1b05605, 0xc80a0b, 0x36f0b7,
+0xc80220, 0x11b0000, 0x38209, 0xc80620,
+0xd40004, 0x11832d, 0x1e09fd9, 0x1333340,
+0x0, 0x185b09, 0xc80e48, 0x1377fff,
+0x1c80191, 0xc91809, 0xc82410, 0x1580008,
+0x188315, 0x1580010, 0x188313, 0x37f30f,
+0x360002, 0x809e05, 0x144ffff, 0x1c06500,
+0x370003, 0x1447fff, 0x1c003e6, 0x1020001,
+0x1c08e17, 0x1020001, 0x1c08a13, 0x8c0220,
+0x760603, 0x1447fff, 0x1c1006a, 0x370025,
+0x144ffff, 0x1c00066, 0x370003, 0x8c0000,
+0x370003, 0x36f30f, 0x360003, 0x360020,
+0x85d629, 0x11b0000, 0x38229, 0x80a081,
+0xd32043, 0x1082da, 0x11b0000, 0x38269,
+0x14bffff, 0x1c02006, 0x164e110, 0x30c601,
+0x1020001, 0x1c08e17, 0xc81020, 0xc80408,
+0xd40064, 0x110304, 0x11b8000, 0x38229,
+0x100f1e, 0x1377fff, 0x1c80411, 0xc80c2d,
+0x3600a0, 0x1407fff, 0x1ce66a6, 0x11b0000,
+0x100e8, 0x8c3006, 0x8e20ce, 0x11020d,
+0x1377fff, 0x1c90111, 0x760402, 0x3700a2,
+0x11b0000, 0x80a8, 0x11b8000, 0x80aa,
+0x11b0000, 0x280a8, 0x11b8000, 0x280aa,
+0x11b0000, 0x382a9, 0x761008, 0xd32248,
+0x1002e2, 0x100fe4, 0xc80e05, 0x34f857,
+0xc80a07, 0x36ff5f, 0x36fd3f, 0x36fb1f,
+0x36f677, 0x36f437, 0x36f217, 0x36f8ff,
+0x36f6bf, 0x36f49f, 0x1581fff, 0x18bb17,
+0x70000, 0x1580000, 0x98bb17, 0x0,
+0x37fc17, 0x37fd1f, 0x37fe37, 0x1580008,
+0x18a311, 0xc82c14, 0xc80420, 0x11b0000,
+0x382ac, 0xc80020, 0x1646121, 0x130e605,
+0xc81002, 0xd400a4, 0x11830b, 0x13b651d,
+0x1b00601, 0x1446533, 0x1810082, 0x80c218,
+0x883066, 0x1407fff, 0x1cee31e, 0xd32240,
+0x1082f7, 0xc80020, 0x8e2008, 0x11831b,
+0x11b0000, 0x3820c, 0x8c0842, 0x14bffff,
+0x1c02000, 0x8c52c0, 0x142ffff, 0x1ce3801,
+0xc91803, 0x87846a, 0x1020001, 0x1c08e17,
+0x370000, 0x8c0206, 0x11b0000, 0x382ac,
+0x879c20, 0x14bffff, 0x1c1200a, 0x142ffff,
+0x1ce2821, 0xc91802, 0x1020001, 0x1c08e17,
+0x370002, 0x100f04, 0x370000, 0xc80049,
+0x370002, 0x11b0000, 0x382ac, 0xc82c14,
+0x1580008, 0x18a314, 0xc80020, 0xc81c20,
+0xd400a4, 0x11830d, 0x360020, 0x360082,
+0x13b656d, 0x1b0e61d, 0x1407fff, 0x1ce6268,
+0x144ffff, 0x1c36406, 0x762814, 0x808c60,
+0xd3224e, 0x1082f7, 0x36fd1f, 0x36fe37,
+0x36fc17, 0x1581fff, 0x198bb17, 0x70000,
+0x1580001, 0x18bb17, 0x0, 0x37f217,
+0x37f49f, 0x37f437, 0x37f6bf, 0x37f677,
+0x37f8ff, 0x35f857, 0x37fb1f, 0x37fd3f,
+0x37ff5f, 0x1646103, 0x1b13625, 0x37f30f,
+0x37f0b7, 0x164e152, 0x1b05605, 0xc80a0b,
+0x36f0b7, 0xc82214, 0x10c8008, 0x76fd,
+0x360e01, 0x1467fff, 0x1c00060, 0x1007501,
+0x1800000, 0x11b0000, 0x3820b, 0xc80620,
+0xd40004, 0x118325, 0x1cb8000, 0x60ed,
+0x32161, 0xd90b21, 0xc81248, 0x1377fff,
+0x1c80193, 0xc9180b, 0x360020, 0x11b0000,
+0x8008, 0x80de25, 0x36f30f, 0x8c10e2,
+0x890808, 0x14b7fff, 0x1c12002, 0x1377fff,
+0x1ca8110, 0x880221, 0x1020001, 0x1c08e17,
+0x1020001, 0x1c08a13, 0xc80400, 0x360c01,
+0x760603, 0x360085, 0x142ffff, 0x1ce2b21,
+0x808408, 0x370005, 0x11b0000, 0x3820b,
+0xd32003, 0x1082e2, 0xc80e05, 0x34f857,
+0xc80a07, 0x36ff5f, 0x36fd3f, 0x36fb1f,
+0x36f677, 0x36f437, 0x36f217, 0x36f8ff,
+0x36f6bf, 0x36f49f, 0x1581fff, 0x18bb17,
+0x70000, 0x158000b, 0x98bb17, 0x0,
+0x37fc17, 0x11b8003, 0x1ff529f, 0x37fe37,
+0x11b800b, 0x1ff551f, 0x11b800b, 0x1ff573f,
+0x11b800b, 0x1ff595f, 0x11b800b, 0x1ff4f1f,
+0xc82a10, 0xc82614, 0xc82212, 0x11b800b,
+0x1ff516f, 0x11b000b, 0x1ff4f0f, 0x11b0000,
+0x38229, 0x360200, 0x360030, 0xd32002,
+0x1010010, 0x807902, 0x1581ff5, 0xd8bb10,
+0xc82411, 0x362c05, 0x11b000b, 0x1ff4f4f,
+0x1020001, 0x1c07552, 0x1581ff5, 0xd8bb12,
+0x1581ff5, 0x58bb10, 0x11b000b, 0x1ff4f4f,
+0x1020001, 0x1c075a8, 0xd40004, 0x110104,
+0x14bffff, 0x1c030a1, 0x8c1803, 0xc82011,
+0x362c25, 0x11b0001, 0x1ff520f, 0x1020001,
+0x1c0760a, 0x11b000b, 0x1ff4f0f, 0x11b0000,
+0x38209, 0x360220, 0xd32040, 0x1010010,
+0x807902, 0xd44004, 0x110217, 0x11b000b,
+0x1ff4f0f, 0x360021, 0x361080, 0x8e2202,
+0x118311, 0x1377fff, 0x1c80011, 0xc80020,
+0x370000, 0x11b0000, 0x38209, 0x1377fff,
+0x1c80011, 0x362c05, 0x11b8000, 0x8008,
+0x11b0000, 0x38209, 0x760000, 0x11b8000,
+0x38209, 0x1581ff5, 0x18bb12, 0x1581ff4,
+0x1d8bb10, 0xc82811, 0x1020001, 0x1c0768b,
+0xc80200, 0x11b0001, 0x1ff4e0f, 0x1e08000,
+0x3f, 0x666666, 0x190302, 0x1467fff,
+0x1c04380, 0x11b0000, 0x38289, 0x901400,
+0x14bffff, 0x1c02008, 0x88104a, 0x8c1002,
+0x8c1843, 0x8e2061, 0x1010000, 0xc07902,
+0x11b000b, 0x1ff510f, 0x11b0001, 0x1ff4e2f,
+0x900402, 0x360a80, 0x8e2202, 0x1010000,
+0xc07902, 0x164e110, 0x30c601, 0x11b000b,
+0x1ff4f0f, 0x0, 0x361420, 0x1020001,
+0x1c08e17, 0x11b000b, 0x1ff510f, 0x890040,
+0x361880, 0x11b000b, 0x1ff4f0f, 0x809002,
+0x371400, 0x11b000b, 0x1ff510f, 0x11b0001,
+0x1ff4e0f, 0x900400, 0x361c00, 0x8e2002,
+0x11031e, 0x1377fff, 0x1c83795, 0xc80420,
+0x11b0001, 0x1ff4e0f, 0x11b8001, 0x1ff542f,
+0x11b000b, 0x1ff512f, 0x0, 0x362022,
+0xc82415, 0x1020001, 0x1c072b9, 0xc81200,
+0xd40094, 0x118136, 0x11b000b, 0x1ff510f,
+0xc82415, 0x11b0001, 0x1ff4e0f, 0x362020,
+0x1580001, 0x198ab10, 0x1020001, 0x1c072b9,
+0xc81200, 0x100f2a, 0x11b0001, 0x1ff4e2f,
+0x8e2002, 0x118314, 0x1581ff5, 0x98bb14,
+0x1377fff, 0x1c93795, 0xc80421, 0x11b0001,
+0x1ff4e0f, 0x11b8001, 0x1ff542f, 0x11b000b,
+0x1ff510f, 0x0, 0x361e80, 0x362020,
+0xc82015, 0x1020001, 0x1c072e0, 0xc81200,
+0x100f13, 0x1581ff5, 0x98bb14, 0x1580001,
+0x198ab12, 0xc80422, 0x11b8001, 0x1ff542f,
+0x11b0001, 0x1ff4e0f, 0x11b000b, 0x1ff510f,
+0x0, 0x361e80, 0x362020, 0xc82015,
+0x1020001, 0x1c072e0, 0xc81200, 0x164e110,
+0x30c607, 0x11b000b, 0x1ff4f0f, 0xc80648,
+0xc82810, 0x360a80, 0x893203, 0x1020001,
+0x1c08e17, 0xc82013, 0xc82411, 0x11b0001,
+0x1ff502f, 0x80a068, 0x11b0001, 0x1ff4e0f,
+0x1020001, 0x1c076e2, 0x11b0001, 0x1ff540f,
+0xc8043f, 0x7a0040, 0x1377fff, 0x1c80015,
+0x0, 0x360a00, 0xd40004, 0x11013a,
+0xd40094, 0x118138, 0xc82410, 0xc80c3f,
+0x894023, 0x11b0001, 0x1ff502f, 0xc8003f,
+0x762412, 0x0, 0x1467fff, 0x1c500e4,
+0x1407fff, 0x1ce228a, 0x360480, 0x11b000b,
+0x1ff4f0f, 0x0, 0x3608a0, 0x370022,
+0x8c1248, 0x11b0001, 0x1ff548f, 0x895043,
+0x7a40c8, 0x11b0001, 0x1ff50ef, 0x1377fff,
+0x1c90415, 0x11b0001, 0x1ff4e6f, 0xc82012,
+0x8830ce, 0x360282, 0x8c50ca, 0x1447fff,
+0x1c70460, 0x1407fff, 0x1ce22ea, 0x891202,
+0x370020, 0x11b0001, 0x1ff542f, 0x7a0002,
+0x1377fff, 0x1c80015, 0x1377fff, 0x1c82110,
+0x0, 0x360000, 0x891003, 0x1c07fff,
+0x1fffc00, 0x30068, 0x1d81300, 0x370000,
+0x100f29, 0x1e09f26, 0xcccd00, 0xe,
+0x184306, 0xc81c3f, 0xc80048, 0x11b0001,
+0x1ff54af, 0xc8043f, 0x7a50ca, 0x891820,
+0x1377fff, 0x1c80515, 0x11b0001, 0x1ff4e6f,
+0x370060, 0x11b0001, 0x1ff54af, 0x7a52ca,
+0x11b0001, 0x1ff506f, 0x1377fff, 0x1c80515,
+0x8c30c3, 0x362ca5, 0x1407fff, 0x1cea1a6,
+0x3702a0, 0x11b0001, 0x1ff54af, 0x7a104a,
+0x1377fff, 0x1c80115, 0x1377fff, 0x1c82110,
+0x0, 0x360020, 0x890040, 0x809002,
+0x370000, 0x11b0001, 0x1ff540f, 0xc8043f,
+0x7a0040, 0x1377fff, 0x1c80015, 0x0,
+0x360800, 0xd40004, 0x118134, 0xd40094,
+0x118132, 0xc82615, 0xc80220, 0x10c8000,
+0xc078cb, 0x11b0001, 0x1ff540f, 0xd32001,
+0x110127, 0x11b0000, 0x38009, 0xd40304,
+0x11811a, 0x360c03, 0xd40004, 0x118317,
+0x1646110, 0x310623, 0x1020001, 0x1c0730f,
+0x1377fff, 0x1c82113, 0x360c83, 0x14bffff,
+0x1c52000, 0xc80448, 0x14bffff, 0x1c02008,
+0x894240, 0x885040, 0xc9180a, 0x880048,
+0x1020001, 0x1c08e17, 0x1467fff, 0x1c00060,
+0x370000, 0x100f0a, 0x1377fff, 0x1c82113,
+0x1e08000, 0x3f, 0x333334, 0x190300,
+0x1467fff, 0x1c00060, 0x370000, 0x1377fff,
+0x1c9b793, 0x760201, 0xc82215, 0xc8103f,
+0xc80021, 0xc8143f, 0x11b0001, 0x1ff542f,
+0xc80220, 0x7a1202, 0x1377fff, 0x1c80115,
+0x0, 0x370800, 0x11b0001, 0x1ff542f,
+0x7a1242, 0x1377fff, 0x1c80115, 0x0,
+0x370a00, 0x11b000b, 0x1ff4f0f, 0x11b0001,
+0x1ff540f, 0x371200, 0x10c8000, 0xc078fe,
+0x11b0001, 0x1ff540f, 0xd32001, 0x110113,
+0x11b000b, 0x1ff512f, 0xc8043f, 0x11b0001,
+0x1ff540f, 0x7a0040, 0x1377fff, 0x1c80015,
+0x360021, 0x362202, 0x144ffff, 0x1c10160,
+0x900402, 0x8e2002, 0x110204, 0xc82011,
+0x1020001, 0x1c06cf8, 0x1377fff, 0x1c8b791,
+0x760201, 0x11b0001, 0x1ff540f, 0x100f02,
+0xc80023, 0x11b000b, 0x1ff595f, 0x11b000b,
+0x1ff573f, 0x11b000b, 0x1ff551f, 0x36fe37,
+0x36fc17, 0x11b0003, 0x1ff529f, 0x1581ff4,
+0x198bb17, 0x70000, 0xd40304, 0x11010e,
+0xc8103f, 0x11b0000, 0x8102a, 0x7a0200,
+0x1377fff, 0x1cb0010, 0x1377fff, 0x1cb2196,
+0x0, 0x360006, 0x8e2002, 0x118302,
+0x370026, 0x1377fff, 0x1c82190, 0x10c8000,
+0xc0792c, 0x11b0000, 0x8100a, 0x360020,
+0x8e2040, 0x110205, 0x890040, 0x362c84,
+0x809002, 0x370000, 0x1377fff, 0x1c83790,
+0x11b0000, 0x8100a, 0x11b0000, 0x8142a,
+0x8e2040, 0x110204, 0x11b8000, 0x8140a,
+0x100f09, 0x890040, 0x1e08000, 0x3c,
+0x47ae14, 0x190308, 0x809002, 0x11b8000,
+0x8140a, 0x11b0000, 0x8100a, 0x11b0000,
+0x8162a, 0x8e2040, 0x118304, 0x11b8000,
+0x8160a, 0x100f09, 0x890040, 0x1e08000,
+0x3c, 0x47ae14, 0x190308, 0x809002,
+0x11b8000, 0x8160a, 0x1e09f26, 0xcccd3f,
+0x99999a, 0x184302, 0x11b0000, 0x8140a,
+0x8c0040, 0x11b0000, 0x816aa, 0x8090a0,
+0x11b8000, 0x8180a, 0x70000, 0x1580000,
+0x98bb17, 0x0, 0x37fd1f, 0x37ff3f,
+0xc82610, 0xc82212, 0x360023, 0x900402,
+0x8e2002, 0x118305, 0x360403, 0x362a21,
+0x890040, 0x370403, 0x10c8000, 0xc0797d,
+0x1377fff, 0x1c82113, 0x362801, 0x1e08000,
+0x3d, 0x99999a, 0x190302, 0x1467fff,
+0x1c00060, 0x370000, 0x8e2040, 0x110204,
+0xc82013, 0x1020001, 0x1c06cf8, 0x1377fff,
+0x1c9b793, 0x0, 0x36ff3f, 0x36fd1f,
+0x1581fff, 0x198bb17, 0x70000, 0x1580000,
+0xd8bb17, 0x0, 0x37fc17, 0x37fd1f,
+0x37ff3f, 0xc82210, 0xc82611, 0x11b0000,
+0xe8009, 0x1e00000, 0x43, 0x1544ac0,
+0x19030c, 0x762613, 0x0, 0x1467fff,
+0x1c00066, 0x1020001, 0x1c08e17, 0x11b8000,
+0xe8409, 0x1e08000, 0x3f, 0x11eb852,
+0x190300, 0x11b0000, 0xe8429, 0x8c0002,
+0x11b8000, 0xe8a09, 0x1020001, 0x1c02c39,
+0x14b7fff, 0x1c32000, 0x1580001, 0x1588b10,
+0x1e09f18, 0x1d0d53e, 0x15e3a88, 0x181301,
+0x1e09ff3, 0x66663f, 0xcccccc, 0x185308,
+0x1e09f86, 0xcccd00, 0x4, 0x18030e,
+0x11b8000, 0x83469, 0x7a32c6, 0x760c06,
+0x11b8000, 0x83669, 0x11b0000, 0xe8469,
+0x8c3026, 0x11b8000, 0xea069, 0x11b0000,
+0xe8469, 0x8c1046, 0x11b8000, 0xea229,
+0x360023, 0x142ffff, 0x1ce2a28, 0x370020,
+0x8e2002, 0x110302, 0x370000, 0x760442,
+0x11b0000, 0xe9a09, 0x8c0040, 0x1020001,
+0x1c07b7d, 0x11b0000, 0xe8489, 0x1e09f80,
+0x3d, 0xc71c72, 0x18130a, 0x8c0200,
+0x11b8000, 0xe9c09, 0x11b0000, 0xe9a09,
+0x880240, 0x8e2002, 0x110202, 0x100f02,
+0xc80400, 0x760042, 0x8c0002, 0x1020001,
+0x1c07b7d, 0x15800e4, 0xd88b13, 0x11b0000,
+0xe8429, 0x8c0040, 0x11b8000, 0xe9e09,
+0x10c8000, 0xc079f3, 0xc82013, 0x1020001,
+0x1c06cf8, 0x1377fff, 0x1c9b793, 0x760442,
+0x11b0000, 0xea409, 0x8c0040, 0x1020001,
+0x1c07b7d, 0xc80400, 0x11b0000, 0xe8489,
+0x1e08000, 0x3f, 0xb33334, 0x190300,
+0x8c1202, 0x11b8000, 0xea629, 0xc91802,
+0x1020001, 0x1c08e17, 0x11b0000, 0xe8829,
+0x14bffff, 0x1c12002, 0x8c0040, 0x14b6100,
+0x1003000, 0xe80100, 0x14b7e00, 0x802002,
+0x11b8000, 0xe8e09, 0x36ff3f, 0x36fd1f,
+0x36fc17, 0x1581fff, 0x158bb17, 0x70000,
+0x100751f, 0x1800000, 0x37ff1f, 0xc82210,
+0x360a00, 0xc80220, 0x360020, 0x8e2002,
+0x110102, 0x370000, 0xc82011, 0x360c01,
+0x762010, 0x0, 0x360020, 0x8e2002,
+0x110103, 0x370000, 0xc80221, 0x1377fff,
+0x1c82111, 0x360e01, 0x360020, 0x8e2002,
+0x110109, 0x1630876, 0x118630c, 0x370000,
+0x1020001, 0x1c08e17, 0x11b8000, 0xe9a09,
+0xc80221, 0x1377fff, 0x1c82191, 0x361001,
+0x360020, 0x8e2002, 0x110109, 0x1630876,
+0x118630c, 0x370000, 0x1020001, 0x1c08e17,
+0x11b8000, 0xea409, 0xc80221, 0x1377fff,
+0x1c82211, 0x361201, 0x360020, 0x8e2002,
+0x110106, 0x370000, 0x1020001, 0x1c0877e,
+0x11b8000, 0xe9209, 0xd40014, 0x110104,
+0xc82011, 0x1020001, 0x1c07985, 0x36ff1f,
+0x36fe17, 0x772e17, 0x70000, 0x1e06157,
+0xac4e42, 0x162e42c, 0x183304, 0x8e2080,
+0x110332, 0x8e20c0, 0x118233, 0x1e01f40,
+0x3f, 0x1715476, 0x186308, 0x8c1200,
+0x14b7fff, 0x1c32002, 0x14bffff, 0x1c22006,
+0x1377fff, 0x1c32086, 0x1e05caf, 0x80833f,
+0x630000, 0x185308, 0x859040, 0x859440,
+0x8c1000, 0x1e01ea6, 0xbf5b3b, 0x110a610,
+0x185308, 0x1c00c31, 0x102614d, 0x3b0e60,
+0x98430c, 0x1c20c31, 0x10e600c, 0x630e61,
+0x1980320, 0x9c040c, 0x1cdffff, 0x1ffffa0,
+0x3fe61, 0x198130e, 0x1cdffff, 0x1ffffa0,
+0x3fe61, 0x198130e, 0x1cdffff, 0x1ffffa0,
+0x3fe61, 0x198130e, 0x1447fff, 0x1c7438e,
+0x9300ce, 0x70000, 0x1630ff0, 0x180300,
+0x70000, 0xc90020, 0x70000, 0x1580000,
+0x98bb17, 0x0, 0x37fd1f, 0x37ff3f,
+0xc82210, 0xc82616, 0x1580001, 0x588b10,
+0xc80424, 0xc80020, 0x1020001, 0x1c03c73,
+0xc80020, 0x1620025, 0x1181302, 0x370001,
+0x360103, 0x371b01, 0x371c21, 0x1020001,
+0x1c0ba25, 0x36ff3f, 0x36fd1f, 0x1581fff,
+0x198bb17, 0x70000, 0x360000, 0xd40104,
+0x118108, 0x361c00, 0x770000, 0x371c00,
+0x110307, 0xc80020, 0x370000, 0x100f04,
+0x1620025, 0x1180300, 0x371c00, 0x0,
+0x70000, 0x1580000, 0x118bb17, 0x0,
+0x37f817, 0x37fb1f, 0x37fd3f, 0x37ff5f,
+0x1646100, 0xb11621, 0xc82a12, 0xc82411,
+0x37f91f, 0xc80026, 0x361b35, 0xc82013,
+0x1020001, 0x1c0bb3f, 0xd40714, 0x110444,
+0x1621c9a, 0x1188310, 0x1377fff, 0x1c80090,
+0x0, 0x360100, 0x0, 0xc0f00,
+0x0, 0x360005, 0x14bffff, 0x1c02000,
+0x370001, 0xc80020, 0x100f36, 0xc82413,
+0xc82015, 0x1020001, 0x1c08fdd, 0x100f1f,
+0x162109f, 0xd8a314, 0xc82413, 0xc82015,
+0x1020001, 0x1c0a3f6, 0x100f0f, 0x162109f,
+0xd8a314, 0xc82413, 0xc82015, 0xc80020,
+0x1020001, 0x1c0a45e, 0x100f10, 0x16210a1,
+0xd8a314, 0xc82413, 0xc82015, 0x1020001,
+0x1c0a3f6, 0xc80426, 0x100f0f, 0x16210a1,
+0xd8a314, 0xc82413, 0xc82015, 0xc80021,
+0x1020001, 0x1c0a45e, 0xc80425, 0x100f06,
+0xc82413, 0xc82015, 0x1020001, 0x1c0a4e7,
+0xc80424, 0xd40004, 0x118107, 0x36f90f,
+0x1646120, 0x312627, 0x1020001, 0x1c0bb48,
+0x100fcd, 0xc80024, 0x100f02, 0xc80021,
+0x36ff5f, 0x36fd3f, 0x36fb1f, 0x36f817,
+0x1581fff, 0x118bb17, 0x70000, 0x762e17,
+0xc81000, 0x37fe27, 0x36fe07, 0xd40084,
+0x110114, 0xd40184, 0x11011c, 0xd45f84,
+0x110108, 0xd47f84, 0x118104, 0xc80020,
+0x370000, 0x100f15, 0xc80021, 0x100f14,
+0x162109f, 0xd89312, 0x162109d, 0xd88310,
+0xc80026, 0x1020001, 0x1c09cc9, 0x100f0b,
+0xd40004, 0x110108, 0x360020, 0xd40124,
+0x118103, 0xd40204, 0x110103, 0xc80022,
+0x100f03, 0x370000, 0xc80020, 0x772e17,
+0x70000, 0xc92448, 0x1e019d1, 0x21683f,
+0x45f306, 0x185302, 0xef1f04, 0x1c7ff00,
+0x2000, 0x189189, 0x300300, 0x8c1040,
+0x14b7fff, 0x1ca2002, 0x14bffff, 0x1c12014,
+0x1c2ffff, 0x1fffc00, 0x30068, 0xd81300,
+0x859420, 0x992141, 0x890040, 0x1e05f7f,
+0x1f672be, 0x554d02, 0x185302, 0x8c4000,
+0x1c00c39, 0x10a610d, 0x430260, 0x984348,
+0x8c0040, 0x1d07fff, 0x1ffe047, 0x1f00260,
+0x118230c, 0x1778000, 0x18a304, 0x1c67f00,
+0x2047, 0x1fff860, 0x11a4b0c, 0x1778000,
+0x58a304, 0x147fe00, 0x30ca09, 0x1c60000,
+0x608d, 0x430461, 0x118930c, 0x10078c0,
+0x0, 0x350240, 0x70000, 0xc92448,
+0x1e019d1, 0x21683f, 0x45f306, 0x185302,
+0xef1f04, 0x1c7ff00, 0x2000, 0x189189,
+0x300300, 0x8c1040, 0x14b7fff, 0x1ca2002,
+0x14bffff, 0x1c12014, 0x1c2ffff, 0x1fffc00,
+0x30068, 0xd81300, 0x859420, 0x992141,
+0x890040, 0x1e05f7f, 0x1f672be, 0x554d02,
+0x185302, 0x8c4000, 0x1c00c39, 0x10a610d,
+0x430260, 0x984348, 0x8c0040, 0x1d07fff,
+0x1ffe047, 0x1f00260, 0x118230c, 0x1778000,
+0x18a304, 0x1c67f00, 0x2047, 0x1fff860,
+0x11a4b0c, 0x1778000, 0x58a304, 0x147fe00,
+0x30ca09, 0x1c60000, 0x608d, 0x430460,
+0x18930c, 0x70000, 0xc92448, 0x1e019d1,
+0x21683f, 0x45f306, 0x185302, 0xef1f04,
+0x1c7ff00, 0x2000, 0x189189, 0x300300,
+0x8c1040, 0x14b7fff, 0x1ca2002, 0x14bffff,
+0x1c12014, 0x1c2ffff, 0x1fffc00, 0x30068,
+0xd81300, 0x859420, 0x992141, 0x890040,
+0x1e05f7f, 0x1f672be, 0x554d02, 0x185302,
+0x8c4000, 0x1c00c39, 0x10a610d, 0x430260,
+0x984348, 0x8c0040, 0x1d07fff, 0x1ffe047,
+0x1f00260, 0x118230c, 0x1778000, 0x18a304,
+0x1c67f00, 0x2047, 0x1fff860, 0x11a4b0c,
+0x1778000, 0x58a304, 0x147fe00, 0x30ca09,
+0x1c60000, 0x600d, 0x430461, 0x118930c,
+0x70000, 0x1580000, 0x98bb17, 0x0,
+0x37fd1f, 0x37ff3f, 0xc82210, 0xc82616,
+0x1377fff, 0x1c82211, 0xc81420, 0xc80448,
+0x360682, 0xc80021, 0x371081, 0x360482,
+0x371281, 0x3708a1, 0x370a21, 0x370c21,
+0x360622, 0x14bffff, 0x1c12002, 0x1c47f00,
+0x208000, 0x60, 0xa05302, 0x370e21,
+0xc82811, 0xc82410, 0x1c0403, 0x1006525,
+0x1800000, 0x1007529, 0x1800000, 0xc82011,
+0x360023, 0x14bffff, 0x1c12002, 0x1c47f00,
+0x208000, 0x60, 0xa05302, 0x130f47,
+0x1377fff, 0x1c92113, 0x1580003, 0x988b10,
+0x1620002, 0x980300, 0x1020001, 0x1c03c84,
+0x1580002, 0x1d88b10, 0x1580003, 0x988b12,
+0xc82c10, 0xc82812, 0x1c0303, 0x1006509,
+0x1800000, 0x100750d, 0x1800000, 0x360303,
+0x371701, 0xc82011, 0x1020001, 0x1c09c76,
+0xc82011, 0x1020001, 0x1c09c81, 0x36ff3f,
+0x36fd1f, 0x1581fff, 0x198bb17, 0x70000,
+0x1580000, 0x98bb17, 0x0, 0x37fd1f,
+0x37ff3f, 0xc82210, 0xc82612, 0xc82011,
+0x130f46, 0x360001, 0x14b7fff, 0x1c02000,
+0xd40104, 0x11010f, 0xd40204, 0x118212,
+0xd40304, 0x110310, 0xc82011, 0x361801,
+0x1020001, 0x1c09b96, 0x1377fff, 0x1c94013,
+0xc82011, 0x1020001, 0x1c0b919, 0x100f06,
+0x1377fff, 0x1c94013, 0xc82011, 0x1020001,
+0x1c0b8c4, 0x36ff3f, 0x36fd1f, 0x1581fff,
+0x198bb17, 0x70000, 0xc81000, 0xd40084,
+0x110118, 0xd40184, 0x110111, 0xd40284,
+0x11010a, 0xd40384, 0x118106, 0x1cb8000,
+0x614c, 0x12b2361, 0x190320, 0x100f0f,
+0xc80021, 0x100f17, 0x1cb8000, 0x614c,
+0x1132161, 0x198b21, 0x100f08, 0x1cb8000,
+0x614c, 0x10b2361, 0x190321, 0x100f03,
+0xc81020, 0xc8144a, 0x8e2202, 0x118208,
+0x8e2242, 0x110306, 0x1377fff, 0x1c80010,
+0xc80020, 0x370820, 0x100f02, 0xc80022,
+0x0, 0x70000, 0x1580000, 0xd8bb17,
+0x0, 0x37fa17, 0x37fb1f, 0x37fc37,
+0x37fd3f, 0x37ff5f, 0xc82a10, 0xc82615,
+0x1377fff, 0x1c8a215, 0xc80624, 0xc80220,
+0x360001, 0x360023, 0x8e2002, 0x110107,
+0x370003, 0xd40314, 0x118104, 0xc82015,
+0x1020001, 0x1c09c81, 0x762211, 0x762613,
+0x770603, 0x760201, 0xd40034, 0x1003f1,
+0x36ff5f, 0x36fd3f, 0x36fb1f, 0x36fc37,
+0x36fa17, 0x1581fff, 0x158bb17, 0x70000,
+0x363280, 0xd32200, 0x11850b, 0x363120,
+0x1377fff, 0x1c90012, 0x372f20, 0x361a20,
+0x701040, 0x110202, 0x6e1202, 0x371820,
+0x371a00, 0x0, 0x70000, 0x1580000,
+0x118bb17, 0x0, 0x37fc17, 0x37fa9f,
+0x37fe37, 0x37fcbf, 0xc80200, 0xc81220,
+0x1020001, 0x1c0b9fc, 0xd40004, 0x110103,
+0xc80001, 0x100f67, 0xb00011, 0x110203,
+0x8f0201, 0xc81221, 0x1e0a780, 0x3f,
+0x45f306, 0x181300, 0xc80647, 0x808013,
+0x8e2041, 0x11031a, 0x14b7fff, 0x1c12000,
+0x1e0db4a, 0x1777a3f, 0x1922000, 0x180306,
+0x14b7fff, 0x1c52001, 0x14bffff, 0x1c42002,
+0xd20602, 0xe81f33, 0xe91f33, 0x1377fff,
+0x1d00120, 0x1387e01, 0x4181a0, 0x14bffff,
+0x1c1200a, 0x142ffff, 0x1cea682, 0x891041,
+0x88104a, 0x85a082, 0x100f13, 0x1581fff,
+0x158bb10, 0x1020001, 0x1c0bc89, 0x1581fff,
+0x158bb10, 0x36fa27, 0x895060, 0x761043,
+0x8c0062, 0x8c0a0a, 0x1020001, 0x1c0bc89,
+0xb00000, 0x110103, 0xc80621, 0x100f02,
+0xc80620, 0x1639730, 0x180300, 0x8e2001,
+0x11830f, 0x1638730, 0x180300, 0x8e2001,
+0x11020b, 0xb00011, 0x118107, 0xd40034,
+0x110105, 0x1e08000, 0x33, 0x45f306,
+0x190301, 0xc80048, 0x100f10, 0x1621c9b,
+0x1188310, 0x8c5821, 0xc80422, 0xc8000b,
+0x1020001, 0x1c0b8ab, 0x1621c9b, 0x1d88310,
+0x8c4261, 0xc80424, 0x14061b0, 0xe1801,
+0x1020001, 0x1c0b8ab, 0xd40094, 0x110102,
+0x8f0201, 0xd40034, 0x110106, 0xc91801,
+0x1020001, 0x1c08e17, 0x8f0000, 0x100f05,
+0x164e110, 0x30c601, 0x1020001, 0x1c08e17,
+0x36fe37, 0x36fcbf, 0x36fc17, 0x36fa9f,
+0x1581fff, 0x118bb17, 0x70000, 0x162017f,
+0x1d89312, 0x770429, 0xc82012, 0x1621c9c,
+0x118a314, 0xce0040, 0x771029, 0xe81000,
+0x1677fff, 0x1c10461, 0xd01029, 0x370124,
+0xcd0002, 0x370008, 0x1677fff, 0x1c00461,
+0x370008, 0x70000, 0xd40004, 0x118103,
+0xc82020, 0x100f6d, 0x1621c9c, 0x1189312,
+0xc82020, 0xc82820, 0x760400, 0x360122,
+0x16a0000, 0x189304, 0x110164, 0x36000a,
+0x771029, 0xe9100a, 0xce420a, 0xd32048,
+0x110557, 0x704048, 0xd40184, 0x118438,
+0x1377fff, 0x1c80112, 0x770029, 0x771429,
+0xce0008, 0x1e08000, 0xffffff, 0x1fe0000,
+0x187306, 0x1677fff, 0x1c40561, 0xe81000,
+0x771429, 0xcd0008, 0x370008, 0x1677fff,
+0x1c00565, 0x1677fff, 0x1c40361, 0xce02c0,
+0xcd0008, 0x370008, 0x16a0000, 0x18a304,
+0x118106, 0x1621c9c, 0x118a314, 0x0,
+0x370104, 0x100f0b, 0x1e08000, 0xffffff,
+0x1fe0000, 0x185300, 0xc81010, 0x1677fff,
+0x1c00069, 0xce4248, 0xcd0200, 0x37000c,
+0x1e08000, 0xffffff, 0x1fe0000, 0x184300,
+0x1677fff, 0x1c00065, 0xce1202, 0x771429,
+0x37000a, 0xe81020, 0x1677fff, 0x1c10565,
+0xcd0002, 0x37000a, 0x100f1a, 0x16a0000,
+0x18a304, 0x118108, 0x1621c9c, 0x1188310,
+0x770429, 0xce0040, 0xc82800, 0x370140,
+0x100f0c, 0x1e0ffff, 0x1000000, 0x1fffe,
+0x184302, 0xce0040, 0x771429, 0x1677fff,
+0x1c10469, 0xce0240, 0xcd0002, 0x37000c,
+0xd00029, 0x1677fff, 0x1c00065, 0x37000a,
+0x762412, 0xc82012, 0x100f08, 0xc82812,
+0x771029, 0xce0200, 0xc82400, 0x16a0000,
+0x189304, 0x10819e, 0x0, 0x70000,
+0x1477fff, 0x1c23500, 0x1010010, 0x807e51,
+0x951400, 0x76140a, 0xd0040a, 0x930040,
+0x1477fff, 0x1c24580, 0x12830a, 0x1c48000,
+0x604d, 0x434760, 0x19a3b00, 0x1c00c31,
+0x147600d, 0x3b0669, 0x183302, 0x100f07,
+0x1c07fff, 0x1fffc00, 0x30c68, 0x1d83347,
+0x1387fff, 0x1c5208a, 0x9c040c, 0x1cdffff,
+0x1ffffe0, 0x660, 0x1981306, 0x1cdffff,
+0x1ffffe0, 0x660, 0x1981306, 0x1cdffff,
+0x1ffffe0, 0x660, 0x1981306, 0x8c00c6,
+0x1e00000, 0x3c, 0xbdad14, 0x190304,
+0x1e06059, 0x8622be, 0x1dc1060, 0x181308,
+0x1c00c31, 0x100690c, 0x130460, 0x182308,
+0x9c040c, 0x1cdffff, 0x1fffff0, 0x860,
+0x1181304, 0x1cdffff, 0x1fffff0, 0x860,
+0x1181304, 0x1cdffff, 0x1fffff0, 0x860,
+0x1181304, 0x8c0080, 0x808066, 0x14bffff,
+0x1c4200a, 0x1e05caf, 0x80833f, 0x630000,
+0x185302, 0x1c00c29, 0x102610c, 0x1030261,
+0x984300, 0x880242, 0x70000, 0x1477fff,
+0x1c23500, 0x11824e, 0x951400, 0x76140a,
+0xd0040a, 0x930040, 0x1477fff, 0x1c24580,
+0x12830a, 0x1c48000, 0x604d, 0x434760,
+0x19a3b00, 0x1c00c31, 0x147600d, 0x3b0669,
+0x183302, 0x100f07, 0x1c07fff, 0x1fffc00,
+0x30c68, 0x1d83347, 0x1387fff, 0x1c5208a,
+0x9c040c, 0x1cdffff, 0x1ffffe0, 0x660,
+0x1981306, 0x1cdffff, 0x1ffffe0, 0x660,
+0x1981306, 0x1cdffff, 0x1ffffe0, 0x660,
+0x1981306, 0x8c00c6, 0x1e01e2f, 0xd68a3e,
+0x1bcb7b2, 0x182310, 0x1e06059, 0x8622be,
+0x1dc1060, 0x181308, 0x1c00c31, 0x100690c,
+0x130460, 0x182308, 0x9c040c, 0x1cdffff,
+0x1fffff0, 0x860, 0x1181304, 0x1cdffff,
+0x1fffff0, 0x860, 0x1181304, 0x1cdffff,
+0x1fffff0, 0x860, 0x1181304, 0x8c0080,
+0x808066, 0x14bffff, 0x1c4200a, 0x1e05caf,
+0x80833f, 0x630000, 0x185302, 0x1c00c29,
+0x102610c, 0x1030261, 0x984300, 0x880242,
+0x1467fff, 0x1c01000, 0x70000, 0x1631ff0,
+0x180300, 0x70000, 0x162017f, 0x1d89312,
+0x770429, 0xc82012, 0x1621c9c, 0x158a314,
+0xce0040, 0x771029, 0xe81000, 0x1677fff,
+0x1c10460, 0xd01029, 0x370124, 0xcd0002,
+0x370000, 0x1677fff, 0x1c00460, 0x370000,
+0x70000, 0xd40004, 0x118103, 0xc82020,
+0x100f6d, 0x1621c9c, 0x1589312, 0xc82020,
+0xc82820, 0x760400, 0x360122, 0x16a0000,
+0x189304, 0x110164, 0x360002, 0x771029,
+0xe9100a, 0xce420a, 0xd32048, 0x110557,
+0x704048, 0xd40184, 0x118438, 0x1377fff,
+0x1c80112, 0x770029, 0x771429, 0xce0008,
+0x1e08000, 0xffffff, 0x1fe0000, 0x187306,
+0x1677fff, 0x1c40560, 0xe81000, 0x771429,
+0xcd0008, 0x370000, 0x1677fff, 0x1c00564,
+0x1677fff, 0x1c40360, 0xce02c0, 0xcd0008,
+0x370000, 0x16a0000, 0x18a304, 0x118106,
+0x1621c9c, 0x158a314, 0x0, 0x370104,
+0x100f0b, 0x1e08000, 0xffffff, 0x1fe0000,
+0x185300, 0xc81010, 0x1677fff, 0x1c00068,
+0xce4248, 0xcd0200, 0x370004, 0x1e08000,
+0xffffff, 0x1fe0000, 0x184300, 0x1677fff,
+0x1c00064, 0xce1202, 0x771429, 0x370002,
+0xe81020, 0x1677fff, 0x1c10564, 0xcd0002,
+0x370002, 0x100f1a, 0x16a0000, 0x18a304,
+0x118108, 0x1621c9c, 0x1588310, 0x770429,
+0xce0040, 0xc82800, 0x370140, 0x100f0c,
+0x1e0ffff, 0x1000000, 0x1fffe, 0x184302,
+0xce0040, 0x771429, 0x1677fff, 0x1c10468,
+0xce0240, 0xcd0002, 0x370004, 0xd00029,
+0x1677fff, 0x1c00064, 0x370002, 0x762412,
+0xc82012, 0x100f08, 0xc82812, 0x771029,
+0xce0200, 0xc82400, 0x16a0000, 0x189304,
+0x10819e, 0x0, 0x70000, 0x1580000,
+0x118bb17, 0x0, 0x37fb1f, 0x37fd3f,
+0x37ff5f, 0xc82a10, 0xc82612, 0xc82214,
+0x11b8008, 0x1f51d, 0xc80048, 0x360423,
+0x14bffff, 0x1c12002, 0x1c47f00, 0x208000,
+0x60, 0xa05302, 0xc91802, 0x1020001,
+0x1c08e17, 0x11b8000, 0x1e40d, 0x1e09e40,
+0x3c, 0x47ae14, 0x181300, 0x360683,
+0x11b8000, 0x1e88d, 0x360a83, 0x11b8000,
+0x1f28d, 0x360483, 0x14bffff, 0x1c42008,
+0x1c47f00, 0x208000, 0x61, 0x205308,
+0x8c0008, 0x8c0040, 0x1020001, 0x1c02c39,
+0x14b7fff, 0x1c02000, 0x11b8000, 0x1ea0d,
+0xd40004, 0x110404, 0xc80021, 0x11b8000,
+0x1ea0d, 0x158001e, 0x18ab10, 0x10c8000,
+0x807f17, 0x370110, 0x1580008, 0x188b11,
+0x762010, 0x0, 0x1e0a2a0, 0x1c00000,
+0x4, 0x180302, 0x11b8000, 0x1122d,
+0x360483, 0x14bffff, 0x1c12002, 0x1c47f00,
+0x208000, 0x60, 0xa05302, 0x14bffff,
+0x1c42008, 0x1c47f00, 0x208000, 0x61,
+0x205308, 0x8c1002, 0x8e2202, 0x110217,
+0xc81022, 0x11b0000, 0x1122d, 0x7d1202,
+0x11b8000, 0x1122d, 0x360483, 0x14bffff,
+0x1c12002, 0x1c47f00, 0x208000, 0x60,
+0xa05302, 0x14bffff, 0x1c42008, 0x1c47f00,
+0x208000, 0x61, 0x205308, 0x8c1002,
+0x8e2202, 0x1082eb, 0x360603, 0x14bffff,
+0x1c42000, 0x1c47f00, 0x208000, 0x61,
+0x205308, 0x360423, 0xc91808, 0x14bffff,
+0x1c02002, 0x1c47f00, 0x208000, 0x60,
+0x205300, 0x1020001, 0x1c08e17, 0xc80400,
+0x1638849, 0x180300, 0x1020001, 0x1c08765,
+0x11b8000, 0x1140d, 0x360603, 0x14bffff,
+0x1c42000, 0x1c47f00, 0x208000, 0x61,
+0x205308, 0x360423, 0xc91808, 0x14bffff,
+0x1c02002, 0x1c47f00, 0x208000, 0x60,
+0x205300, 0x1020001, 0x1c08e17, 0xc80400,
+0x163888f, 0x980300, 0x1020001, 0x1c08765,
+0x1377fff, 0x1c82315, 0x1e0a150, 0x3c,
+0x47ae14, 0x18430a, 0x11b8000, 0x1160d,
+0xc80420, 0x11b8000, 0x10ead, 0xc80002,
+0x11b8000, 0x11e2d, 0x373025, 0x373285,
+0x373a85, 0x10c8000, 0x1807f85, 0x1007501,
+0x1800000, 0x1377fff, 0x1c83715, 0xc80020,
+0xc80447, 0x373405, 0x373605, 0x373825,
+0x360203, 0x14bffff, 0x1c02000, 0x371e05,
+0xc82815, 0xc82410, 0x1c0f03, 0x1006505,
+0x1800000, 0x1007509, 0x1800000, 0xc82015,
+0x1020001, 0x1c08232, 0xc82015, 0x1020001,
+0x1c0817b, 0xc82015, 0x1020001, 0x1c08512,
+0x36ff5f, 0x36fd3f, 0x36fb1f, 0x1581fff,
+0x118bb17, 0x70000, 0xc81000, 0xd40e84,
+0x110421, 0x1621c9f, 0x1d89312, 0x1377fff,
+0x1c90412, 0x0, 0x360122, 0x0,
+0xc0f02, 0x0, 0x1cb8000, 0x614c,
+0x11b2161, 0x190320, 0x100f08, 0xc81020,
+0xc81448, 0x100f05, 0x1e0a23d, 0x41,
+0x400000, 0x185308, 0x8e2202, 0x118208,
+0x8e2242, 0x110306, 0x1377fff, 0x1c80010,
+0xc80020, 0x371e20, 0x100f04, 0xc80022,
+0x100f02, 0xc80021, 0x0, 0x70000,
+0x1580001, 0x198bb17, 0x0, 0x37fc17,
+0x37e69f, 0x37fe37, 0x37e91f, 0x37eb3f,
+0x37ed5f, 0xc82a10, 0x37e52f, 0x11b0000,
+0x1f00d, 0x11b0008, 0x1f51d, 0xd40004,
+0x110113, 0x11b0000, 0x1e60d, 0xc80421,
+0xe91c00, 0xce0040, 0x118106, 0x11b0000,
+0x1ea0d, 0x11b8000, 0x1ee0d, 0x100f05,
+0x11b0000, 0x1ea0d, 0x11b8000, 0x1ec0d,
+0xc80020, 0x11b8000, 0x1f00d, 0xc82015,
+0x1020001, 0x1c0814f, 0x11b0000, 0x1e80d,
+0xc80220, 0xd40004, 0x110426, 0x11b0000,
+0x1f20d, 0xc80220, 0xd40004, 0x1010000,
+0x100812c, 0x1008001, 0x1c08146, 0x1580004,
+0xd8ab12, 0x1620008, 0x180300, 0x1580003,
+0x198ab10, 0x1020001, 0x1c0b59e, 0x1580008,
+0x58ab12, 0x1620008, 0x180300, 0x1580007,
+0x118ab10, 0x1020001, 0x1c0b59e, 0x1580006,
+0x98ab12, 0x1620008, 0x180300, 0x1580005,
+0x158ab10, 0x1020001, 0x1c0b59e, 0x11b0000,
+0x1e80d, 0xb04011, 0xd32001, 0x1085dc,
+0x36e56f, 0x1581fff, 0x18bb10, 0xc82416,
+0x1581ffe, 0x98bb14, 0x1377fff, 0x1c94012,
+0x10c8000, 0x1808033, 0x360132, 0x762412,
+0x1377fff, 0x1c98093, 0x370130, 0x762010,
+0x360136, 0x762c16, 0x1377fff, 0x1c98093,
+0x370134, 0x762814, 0x1581ffe, 0x98bb12,
+0xc82815, 0xc82011, 0x1620008, 0x180300,
+0x1020001, 0x1c0848b, 0x11b0000, 0x1e60d,
+0xc80421, 0xe91c00, 0xce0040, 0x11010d,
+0x1581fff, 0x18bb10, 0xc82815, 0xc82411,
+0xc80440, 0x1620008, 0x184308, 0xc80023,
+0x360700, 0x1020001, 0x1c0849d, 0x100f29,
+0xc82815, 0xc82411, 0xc82011, 0xc80440,
+0x1620008, 0x184308, 0xc80023, 0x1020001,
+0x1c0849d, 0x1581fff, 0x18bb10, 0xc82811,
+0x1620008, 0x180300, 0x1581ffe, 0x98bb12,
+0x1020001, 0x1c084e8, 0x36e50f, 0x0,
+0x361300, 0x16a0000, 0x188304, 0x110109,
+0x1581fff, 0x18bb10, 0xc80020, 0x1620008,
+0x181302, 0x360700, 0x1020001, 0x1c03c73,
+0x1581fff, 0x18bb10, 0x1581ffe, 0x98bb12,
+0x36f147, 0x360300, 0x37e547, 0x370302,
+0x11b0000, 0x1e60d, 0xc80421, 0xe91c00,
+0xce0040, 0x11810a, 0x1581ffe, 0x98bb12,
+0xc82815, 0x1620008, 0x180300, 0x158001e,
+0x18ab10, 0x1020001, 0x1c085a2, 0x360005,
+0x14b7fff, 0x1c02000, 0xd40304, 0x118229,
+0xd40404, 0x118317, 0xd40804, 0x110325,
+0x1581ffe, 0x98bb12, 0xc82815, 0x1620008,
+0x181302, 0xc80024, 0x1581fff, 0x18bb10,
+0x1020001, 0x1c086ed, 0x1581fff, 0x18bb10,
+0xc82815, 0x1620008, 0x181302, 0xc80041,
+0x1581ffe, 0x98bb12, 0x1020001, 0x1c086ed,
+0x36e50f, 0x0, 0x361100, 0x16a0000,
+0x188304, 0x11010b, 0x1581ffe, 0x98bb12,
+0xc82815, 0x1620008, 0x181302, 0xc80022,
+0x1581fff, 0x18bb10, 0x1020001, 0x1c086ed,
+0x1581ffe, 0x98bb12, 0xc82815, 0x1620008,
+0x181302, 0xc80020, 0x1581fff, 0x18bb10,
+0x1020001, 0x1c086ed, 0x1581ffe, 0x98bb12,
+0xc82815, 0xc80021, 0x1620008, 0x181302,
+0x1581fff, 0x18bb10, 0x1020001, 0x1c086ed,
+0x11b0000, 0x1e60d, 0xc80421, 0xe91c00,
+0xce0040, 0x11810b, 0x158001e, 0x18ab14,
+0x1620008, 0x180300, 0x1581fff, 0x18bb12,
+0x1581fff, 0x18bb10, 0x1020001, 0x1c086c1,
+0x11b0000, 0x1ee0d, 0xd40004, 0x118430,
+0x770000, 0x11b8000, 0x1ee0d, 0x11810a,
+0xc82015, 0x1020001, 0x1c081f7, 0x11b0000,
+0x1ea0d, 0x11b8000, 0x1ec0d, 0x1008001,
+0x1c08019, 0x158000a, 0x18ab12, 0x1620008,
+0x180300, 0x1580009, 0xd8ab10, 0x1020001,
+0x1c0b59e, 0x158000b, 0x1d8ab12, 0x1620008,
+0x180300, 0x158000b, 0x98ab10, 0x1020001,
+0x1c0b59e, 0x158000f, 0x158ab12, 0x1620008,
+0x180300, 0x158000f, 0x18ab10, 0x1020001,
+0x1c0b59e, 0x158000d, 0x198ab12, 0x1620008,
+0x180300, 0x158000d, 0x58ab10, 0x1020001,
+0x1c0b59e, 0x1008001, 0x1c08019, 0x11b0000,
+0x1ec0d, 0xd40004, 0x1008010, 0x1008019,
+0x770000, 0x11b8000, 0x1ec0d, 0x1008010,
+0x408001, 0xc82015, 0x1020001, 0x1c081c7,
+0x1008001, 0x1c08019, 0x360101, 0x360123,
+0x169ffff, 0x1c21110, 0x110105, 0x11b0000,
+0x1e80d, 0x1020001, 0x1c03c84, 0x762211,
+0x762613, 0x771209, 0x760603, 0xd40094,
+0x110411, 0x11b0000, 0x1f20d, 0x760201,
+0xd32001, 0x11851b, 0x36e50f, 0xc80040,
+0xc81240, 0xc80620, 0x7d0001, 0x1377fff,
+0x1c80010, 0x1580003, 0x1988311, 0x1580003,
+0x188313, 0x360101, 0x16a0000, 0x188304,
+0x1001e7, 0xd40334, 0x1081dc, 0x361205,
+0xb00000, 0x1001d9, 0x11b0000, 0x1e82d,
+0xc80020, 0x1020001, 0x1c03c73, 0x100fdc,
+0x36ed5f, 0x36eb3f, 0x36e91f, 0x36fe37,
+0x36fc17, 0x36e69f, 0x1581ffe, 0x98bb17,
+0x70000, 0x100751f, 0x1800000, 0x37ff1f,
+0xc82210, 0xc82411, 0x1377fff, 0x1c83711,
+0xc80020, 0x1646102, 0x301601, 0x10c8001,
+0x1c0816c, 0x3600a2, 0x360020, 0x8e204a,
+0x11010c, 0xd40404, 0x110109, 0xd40a04,
+0x110105, 0xd40c04, 0x118204, 0xd40e04,
+0x110302, 0xc81021, 0xc80221, 0x370022,
+0x762010, 0x762412, 0x760000, 0xd40084,
+0x110104, 0xc82011, 0x1020001, 0x1c08232,
+0xd40014, 0x110104, 0xc82011, 0x1020001,
+0x1c08512, 0x36ff1f, 0x36fe17, 0x772e17,
+0x70000, 0x762e17, 0x0, 0x37ff1f,
+0xc82210, 0x130f78, 0xc82011, 0x130f46,
+0xc80020, 0x11b8000, 0x1f009, 0x36ff1f,
+0x772e17, 0x70000, 0xc80420, 0x361880,
+0x8e2048, 0x118106, 0x11b8000, 0x11028,
+0x11b8000, 0x12228, 0x100f35, 0x8e2040,
+0x118233, 0x1477fff, 0x1c24400, 0x110330,
+0x1621c9e, 0x989312, 0xc81020, 0x1377fff,
+0x1ca2192, 0xc82414, 0x360024, 0x8e2040,
+0x118307, 0x1377fff, 0x1c92192, 0x761008,
+0x360022, 0x8e2040, 0x1003fb, 0x1621c9e,
+0x98a314, 0xc81423, 0x760408, 0xc80c23,
+0x7a4248, 0x7a50c2, 0x1377fff, 0x1c90414,
+0x1377fff, 0x1ca0514, 0x360022, 0x144ffff,
+0x1c40168, 0x890040, 0xc91808, 0x1020001,
+0x1c08e17, 0x360224, 0xc81048, 0x8c3002,
+0x3602a2, 0x891008, 0x80c4a6, 0x11b8000,
+0x11088, 0x360484, 0x8c0008, 0x3604a2,
+0x8084a0, 0x11b8000, 0x12208, 0x0,
+0x70000, 0x1580000, 0xd8bb17, 0x0,
+0x37fb1f, 0x37fd3f, 0x37ff5f, 0x1580003,
+0x1988312, 0x1580005, 0x188316, 0xc80020,
+0x1580005, 0x1588314, 0x1580007, 0x1188311,
+0xc82a12, 0xc82616, 0x1c0503, 0x1006527,
+0x1800000, 0x100752b, 0x1800000, 0x1580006,
+0x1d88312, 0xc82614, 0xc82c12, 0x1c0503,
+0x100652d, 0x1800000, 0x1007527, 0x1800000,
+0x1580008, 0x1988312, 0xc82c11, 0xc82812,
+0x1c0503, 0x1006529, 0x1800000, 0x100752d,
+0x1800000, 0x11b8000, 0x1ec08, 0x36ff5f,
+0x36fd3f, 0x36fb1f, 0x1581fff, 0x158bb17,
+0x70000, 0x1580000, 0xd8bb17, 0x0,
+0x37fb1f, 0x37fd3f, 0x37ff5f, 0x1580009,
+0xd88314, 0x158000a, 0x1588311, 0xc80020,
+0x158000b, 0x988316, 0x158000d, 0x588312,
+0xc82a14, 0xc82611, 0x1c0503, 0x1006527,
+0x1800000, 0x100752b, 0x1800000, 0x158000c,
+0x1188314, 0xc82616, 0xc82214, 0x1c0503,
+0x1006523, 0x1800000, 0x1007527, 0x1800000,
+0x158000e, 0xd88316, 0x158000f, 0x188314,
+0xc82a12, 0xc82616, 0x1c0503, 0x1006527,
+0x1800000, 0x100752b, 0x1800000, 0x1580010,
+0x988311, 0xc82c14, 0xc82411, 0x1c0503,
+0x1006525, 0x1800000, 0x100752d, 0x1800000,
+0x11b8000, 0x1ee08, 0x36ff5f, 0x36fd3f,
+0x36fb1f, 0x1581fff, 0x158bb17, 0x70000,
+0x1580000, 0x158bb17, 0x0, 0x37f817,
+0x37f89f, 0x37fa37, 0x37fabf, 0x37fc77,
+0x37fcff, 0x37ff1f, 0xc82210, 0x361a00,
+0x1020001, 0x1c08188, 0x1580008, 0x1988b10,
+0x1e09f9a, 0x104f340, 0x1921fb6, 0x184b01,
+0x361401, 0x11b0000, 0x1e429, 0x8c0020,
+0x1466190, 0x1018100, 0xc80003, 0x1020001,
+0x1c0b5d6, 0x1646130, 0x302613, 0x1580005,
+0x188b10, 0x1020001, 0x1c0ac87, 0x11b0000,
+0x1ea29, 0x1620008, 0x184308, 0xc80048,
+0x7d1202, 0x14bffff, 0x1c12002, 0x1c47f00,
+0x208000, 0x60, 0xa05302, 0xc91802,
+0x1020001, 0x1c08e17, 0xc80e00, 0x11b0000,
+0x1e609, 0xc80421, 0xe91c00, 0xce0040,
+0x1010010, 0x408339, 0x1580006, 0x1d88b10,
+0x361c31, 0x8c4023, 0x11b0000, 0x1e409,
+0x11b0000, 0x12229, 0x8c0008, 0x1020001,
+0x1c0b3c7, 0x1e0a0d0, 0x3f, 0xc00000,
+0x180302, 0x8c0843, 0x891001, 0x8e2002,
+0x110203, 0x14bffff, 0x1c0a1c1, 0x891023,
+0x1638839, 0x180300, 0x8e2002, 0x118302,
+0x890803, 0x1e09f95, 0x1851f3a, 0x624de,
+0x184300, 0x1e08000, 0x3f, 0x8a3d70,
+0x190302, 0x808018, 0x11b8000, 0x11809,
+0x8e2040, 0x110204, 0x11b8000, 0x11829,
+0x100f09, 0x1e08000, 0x3f, 0xbd70a4,
+0x190302, 0x8e2040, 0x118303, 0x11b8000,
+0x11829, 0x1e0a0d0, 0x42, 0x12c0000,
+0x181300, 0x890001, 0x890040, 0x8e2040,
+0x110202, 0xc80002, 0x1e08000, 0x3e,
+0x1666666, 0x190302, 0x8c4041, 0x8e2200,
+0x110202, 0x8c0043, 0x1e0a1e9, 0x41,
+0x1400000, 0x181308, 0x894201, 0x1467fff,
+0x1c5a688, 0x8e204b, 0x118302, 0xc81602,
+0x1638859, 0x181302, 0x881041, 0x8e204b,
+0x110202, 0xc81602, 0x158000a, 0x1588b10,
+0x1e09f9a, 0x104f340, 0x1921fb6, 0x184b03,
+0x11b0000, 0x1e429, 0x8c0060, 0x1466190,
+0x1000100, 0x1020001, 0x1c0ac87, 0x158000c,
+0x1188b10, 0x14bffff, 0x1c7a141, 0x11b0000,
+0x1e429, 0x8902e1, 0x8c0060, 0x1466190,
+0x1000100, 0x1020001, 0x1c0b5d6, 0x158000e,
+0xd88b10, 0x11b0000, 0x1e409, 0x8c106b,
+0x1466190, 0x1000002, 0x1020001, 0x1c0b5d6,
+0x1580010, 0x988b10, 0x8802e1, 0x11b0000,
+0x1e429, 0x8c0060, 0x1466190, 0x1000100,
+0x1020001, 0x1c0ac87, 0x1580009, 0xd88b14,
+0x158000a, 0x1588b12, 0xc80007, 0x158000a,
+0x188b10, 0x1020001, 0x1c0b593, 0x158000b,
+0x988b14, 0x158000c, 0x1188b12, 0xc80007,
+0x158000b, 0x1d88b10, 0x1020001, 0x1c0b593,
+0x158000f, 0x188b14, 0x1580010, 0x988b12,
+0xc80007, 0x158000f, 0x1588b10, 0x1020001,
+0x1c0b593, 0x158000d, 0x588b14, 0x158000e,
+0xd88b12, 0xc80007, 0x158000d, 0x1988b10,
+0x1020001, 0x1c0b593, 0xc80001, 0x1020001,
+0x1c07db2, 0x1e09fb4, 0x1f3f9be, 0x1a9a74,
+0x185308, 0xc80420, 0x80d00a, 0x11b8000,
+0x11a89, 0x8e2048, 0x110203, 0x11b8000,
+0x11a29, 0x1638870, 0x981302, 0x8e2041,
+0x118308, 0x1e08000, 0xc2, 0x207ae2,
+0x190300, 0x11b8000, 0x11c09, 0x100f10,
+0x1e0a040, 0xe3bd42, 0x106c7ae, 0x181308,
+0x1e0a216, 0x9f5c43, 0x1667ae2, 0x18330a,
+0x143ffff, 0x1ce2208, 0x1407fff, 0x1ce202a,
+0x878026, 0x11b8000, 0x11c09, 0x1580005,
+0x1588b14, 0x1580006, 0x1d88b12, 0xc80007,
+0x1580006, 0x988b10, 0x1020001, 0x1c0b593,
+0x1580003, 0x1988b14, 0x1580005, 0x188b12,
+0xc80007, 0x1580004, 0xd88b10, 0x1020001,
+0x1c0b593, 0x1580007, 0x1188b14, 0xc80007,
+0x1580008, 0x1988b12, 0x1580008, 0x588b10,
+0x1020001, 0x1c0b593, 0xc80421, 0xc80020,
+0x11b8000, 0x1f029, 0x11b8000, 0x1ec09,
+0x11b8000, 0x1ee09, 0x36ff1f, 0x36fc77,
+0x36fa37, 0x36fcff, 0x36f817, 0x36fabf,
+0x36f89f, 0x1581fff, 0xd8bb17, 0x70000,
+0x11b0000, 0x1e628, 0xc81021, 0xe91c22,
+0xce1202, 0x11013b, 0x361280, 0xc80420,
+0x8e2048, 0x11012a, 0x1377fff, 0x1c90010,
+0x0, 0x360282, 0x8e2048, 0x110119,
+0x1580003, 0x1988314, 0x1580004, 0xd88316,
+0x11b8008, 0x1bd4a, 0x11b8008, 0x1c96a,
+0x361680, 0x8e2048, 0x110106, 0xc80448,
+0x11b8000, 0x1d42a, 0x1008001, 0x1c08412,
+0x1e08000, 0x3e, 0x6c310e, 0x190302,
+0x11b8000, 0x1d42a, 0x1008001, 0x1c08412,
+0x1621c9d, 0x18a314, 0x1621c9d, 0x158b316,
+0x11b8008, 0x1bd4a, 0x11b8008, 0x1c96a,
+0x11b8000, 0x1d42a, 0x100f7a, 0x1377fff,
+0x1c90010, 0x1621c9d, 0x18a314, 0x1621c9d,
+0x158b316, 0x11b8008, 0x1bd4a, 0x11b8008,
+0x1c96a, 0x11b8000, 0x1d42a, 0x100f6d,
+0x361880, 0xc80420, 0x8e2048, 0x110133,
+0xd40004, 0x110123, 0xd40104, 0x110121,
+0x1377fff, 0x1c90010, 0x0, 0x360282,
+0x8e2048, 0x110110, 0x1580003, 0x1988314,
+0x1580004, 0xd88316, 0x1e08000, 0x3e,
+0x6c310e, 0x190302, 0x11b8008, 0x1bd4a,
+0x11b8008, 0x1c96a, 0x11b8000, 0x1d42a,
+0x100f50, 0x1621c9d, 0x18a314, 0x1621c9d,
+0x158b316, 0x11b8008, 0x1bd4a, 0x11b8008,
+0x1c96a, 0x11b8000, 0x1d42a, 0x100f45,
+0x1377fff, 0x1c90010, 0x1580005, 0x1588314,
+0x1580006, 0x988316, 0xc80420, 0x11b8008,
+0x1bd4a, 0x11b8008, 0x1c96a, 0x11b8000,
+0x1d42a, 0x100f37, 0x361280, 0x8e2048,
+0x110128, 0x1377fff, 0x1c90010, 0x0,
+0x360282, 0x8e2048, 0x110114, 0xd40004,
+0x110112, 0xd40104, 0x110110, 0x1580003,
+0x1988314, 0x1580004, 0xd88316, 0x1e08000,
+0x3e, 0x6c310e, 0x190302, 0x11b8008,
+0x1bd4a, 0x11b8008, 0x1c96a, 0x11b8000,
+0x1d42a, 0x100f1b, 0x1377fff, 0x1c90010,
+0x1621c9d, 0x18a314, 0x1621c9d, 0x158b316,
+0xc80420, 0x11b8008, 0x1bd4a, 0x11b8008,
+0x1c96a, 0x11b8000, 0x1d42a, 0x100f0d,
+0x1377fff, 0x1c90010, 0x1621c9d, 0x18a314,
+0x1621c9d, 0x158b316, 0x11b8008, 0x1bd4a,
+0x11b8008, 0x1c96a, 0x11b8000, 0x1d42a,
+0xd40204, 0x11810b, 0x360020, 0x14bffff,
+0x1c42041, 0x8e2202, 0x118106, 0x1377fff,
+0x1c80010, 0xc80020, 0x11b8000, 0x1d408,
+0x0, 0x70000, 0x100751f, 0x1800000,
+0x37ff1f, 0xc82210, 0x11b0000, 0x1e608,
+0xc80220, 0xe81700, 0xed1b00, 0x11830f,
+0x1646110, 0x310623, 0x1020001, 0x1c08366,
+0x11b0000, 0x1e609, 0x760201, 0xe81700,
+0xed1b00, 0xd32001, 0x110204, 0xd40314,
+0x1001f8, 0x100ff3, 0x36ff1f, 0x36fe17,
+0x772e17, 0x70000, 0x11b0000, 0x1e608,
+0xc80421, 0xe91c00, 0xce0040, 0x11012a,
+0x361220, 0xc80020, 0x8e2002, 0x11011a,
+0x1580007, 0x1188312, 0x1580008, 0x588314,
+0x11b8008, 0x1c328, 0x11b8008, 0x1cf48,
+0x361620, 0x8e2002, 0x110108, 0x1e08000,
+0x40, 0x94c584, 0x190300, 0x11b8000,
+0x1da08, 0x100f32, 0x1e08000, 0x3e,
+0x1c02998, 0x190300, 0x11b8000, 0x1da08,
+0x100f2b, 0x1621c9d, 0x189312, 0x1621c9d,
+0x158a314, 0xc80048, 0x11b8008, 0x1c328,
+0x11b8008, 0x1cf48, 0x11b8000, 0x1da08,
+0x100f1f, 0x361220, 0xc80048, 0x8e2002,
+0x11010d, 0x361820, 0x8e2002, 0x11010a,
+0x1621c9d, 0x189312, 0x1621c9d, 0x158a314,
+0x11b8008, 0x1c328, 0x11b8008, 0x1cf48,
+0x100f09, 0x1580007, 0x1188312, 0x1580008,
+0x588314, 0x11b8008, 0x1c328, 0x11b8008,
+0x1cf48, 0x1e08000, 0x3e, 0x1c02998,
+0x190300, 0x11b8000, 0x1da08, 0x0,
+0x70000, 0xc80400, 0x11b0000, 0x1e60c,
+0xe81700, 0xed1b00, 0xd40404, 0x118506,
+0x360762, 0x16a0000, 0x18b304, 0x110102,
+0xc80024, 0x158001d, 0x98a314, 0x1020001,
+0x1c08cce, 0x0, 0x70000, 0x1580000,
+0xd8bb17, 0x0, 0x37fa17, 0x37fb1f,
+0x37fc37, 0x37fd3f, 0x37ff5f, 0x1646120,
+0xb15621, 0x1646180, 0x1b13629, 0x11b0000,
+0x1ec2c, 0xd40024, 0x11011d, 0x11b0008,
+0x1cf6b, 0xc80424, 0x11b0008, 0x1c34b,
+0x7a0040, 0x1376130, 0x80013, 0x1580012,
+0x988311, 0xc82015, 0x1020001, 0x1c0b4cb,
+0x11b0008, 0x1cf6b, 0xc82415, 0xc80024,
+0x11b0008, 0x1c34b, 0x7a0001, 0x1376130,
+0x80013, 0x1580012, 0x988311, 0xc82015,
+0x1020001, 0x1c0b4cb, 0x100f18, 0x11b0008,
+0x1c34b, 0xc80424, 0x7a0040, 0x1376130,
+0x80013, 0x1580012, 0x988316, 0xc82015,
+0x1020001, 0x1c08d20, 0x11b0008, 0x1c34b,
+0xc82415, 0xc80024, 0x7a0001, 0x1376130,
+0x80013, 0x1580012, 0x988316, 0xc82015,
+0x1020001, 0x1c08d20, 0x36ff5f, 0x36fd3f,
+0x36fb1f, 0x36fc37, 0x36fa17, 0x1581fff,
+0x158bb17, 0x70000, 0x1580000, 0xd8bb17,
+0x0, 0x37fe17, 0x37fb1f, 0x37fd3f,
+0x37ff5f, 0x1646100, 0xb13621, 0xc82a12,
+0x1581fff, 0x158bb10, 0x1621c9f, 0xd88b11,
+0xc80401, 0xc80022, 0x360165, 0x1581fff,
+0x158bb12, 0x370340, 0xc82811, 0x37fb67,
+0x360103, 0x1020001, 0x1c088be, 0x360305,
+0x1581fff, 0x158bb12, 0x1646110, 0x1314623,
+0xc80022, 0x37fb07, 0x360303, 0x1020001,
+0x1c088be, 0x36ff5f, 0x36fd3f, 0x36fb1f,
+0x36fe17, 0x1581fff, 0x158bb17, 0x70000,
+0x762e17, 0x0, 0x37ff1f, 0xc82210,
+0x360000, 0x14b7fff, 0x1c02000, 0x1020001,
+0x1c03e42, 0x158001e, 0xd88b12, 0xc82c12,
+0xc82810, 0x1c0103, 0x1006509, 0x1800000,
+0x100750d, 0x1800000, 0xc82011, 0x1020001,
+0x1c08420, 0xc82011, 0x1020001, 0x1c0843c,
+0x36ff1f, 0x772e17, 0x70000, 0x1580000,
+0x98bb17, 0x0, 0x37fc17, 0x37fe37,
+0xc80c20, 0xc80220, 0x10c8000, 0x808546,
+0x1377fff, 0x1ca0310, 0xc81c20, 0x360144,
+0xd400a4, 0x11840b, 0x360034, 0x900603,
+0x8e2023, 0x118302, 0xc80203, 0x1377fff,
+0x1ca0414, 0x6e720e, 0xd3224e, 0x1005f7,
+0x760c06, 0x1e08000, 0x38, 0x1a36e2e,
+0x190308, 0x8e2201, 0x11830a, 0x360082,
+0x8e2201, 0x118302, 0x100f02, 0xc80002,
+0x360022, 0x894041, 0x808082, 0x370002,
+0x36fe37, 0x36fc17, 0x1581fff, 0x198bb17,
+0x70000, 0x1580000, 0x158bb17, 0x0,
+0x37f817, 0x37f89f, 0x37fa37, 0x37fabf,
+0x37fc77, 0x37fcff, 0x37fe57, 0x37ff1f,
+0x1646102, 0x1b11621, 0x1646120, 0xb05609,
+0x16461a2, 0xb03611, 0x36f207, 0xc81e20,
+0x36f477, 0x8e22e0, 0x110112, 0xc8000b,
+0x1020001, 0x1c08789, 0x890007, 0x8c0220,
+0x8e22e0, 0x110202, 0x100f0a, 0x14bffff,
+0x1c120a3, 0x8e2040, 0x118302, 0xc80002,
+0x1020001, 0x1c0877e, 0x8c1860, 0x100f01,
+0x8c1263, 0xc80047, 0x8e2002, 0x118305,
+0xc9180b, 0x1020001, 0x1c08e17, 0xc80600,
+0xc80005, 0x14bffff, 0x1c12000, 0x1c47f00,
+0x208000, 0x60, 0xa05302, 0x890023,
+0xc91802, 0x1020001, 0x1c08e17, 0x370001,
+0x36fe77, 0xc80a07, 0x36ff1f, 0x36fc77,
+0x36fcff, 0x36fa37, 0x36fabf, 0x36f817,
+0x36f89f, 0x1581fff, 0xd8bb17, 0x70000,
+0x1580001, 0x118bb17, 0x0, 0x37e817,
+0x37f89f, 0x37ea37, 0x37fb1f, 0x37fd3f,
+0x37ff5f, 0x1646100, 0x1b15629, 0x37e90f,
+0x11b0000, 0x1ee0d, 0xd40004, 0x110171,
+0x36e90f, 0xc80220, 0xc81222, 0x37eb0f,
+0x1580016, 0x198ab10, 0x37ed2f, 0x37ef0f,
+0x1580019, 0x198ab10, 0x37f10f, 0x36ed0f,
+0x158000a, 0x18ab16, 0xc80024, 0x36eb1f,
+0x1580009, 0xd8ab14, 0x7d0001, 0x360120,
+0x1376130, 0x80015, 0x360131, 0x1580015,
+0x1988311, 0xc82013, 0x1020001, 0x1c0b4cb,
+0x36ef1f, 0x158000b, 0x1d8ab16, 0x1646130,
+0x312627, 0xc82013, 0x158000b, 0x98ab14,
+0x1020001, 0x1c0b4cb, 0x1646130, 0x310623,
+0x158000b, 0x1d8ab16, 0x158000b, 0x98ab14,
+0xc82413, 0x1377fff, 0x1c8a210, 0xc82013,
+0x1020001, 0x1c0b4cb, 0x1646130, 0x1312627,
+0xc82013, 0x11b0000, 0x1180d, 0x1020001,
+0x1c0bbc8, 0x158000d, 0x198ab16, 0x158000d,
+0x58ab14, 0xc82413, 0xc80024, 0x7d0001,
+0x1376130, 0x80015, 0x1580018, 0x1988311,
+0xc82013, 0x1020001, 0x1c0b4cb, 0x36f11f,
+0x158000f, 0x158ab16, 0x1646130, 0x312627,
+0xc82013, 0x158000f, 0x18ab14, 0x1020001,
+0x1c0b4cb, 0x1646130, 0x310623, 0x158000f,
+0x158ab16, 0x158000f, 0x18ab14, 0xc82413,
+0x1377fff, 0x1c8a210, 0xc82013, 0x1020001,
+0x1c0b4cb, 0x36ef0f, 0x771209, 0x760201,
+0x1377fff, 0x1c82290, 0x37ef0f, 0x36f10f,
+0x1377fff, 0x1c82290, 0x37f10f, 0x36eb0f,
+0x762010, 0x37eb0f, 0x36ed0f, 0x762010,
+0x37ed0f, 0xd40094, 0x10049d, 0x100f61,
+0x36e90f, 0x1580019, 0x198ab13, 0xc80220,
+0xc81222, 0x37f30f, 0x1580016, 0x198ab10,
+0x37f52f, 0x37f70f, 0x36f50f, 0x1580009,
+0xd8ab14, 0xc80024, 0x7d0001, 0x360120,
+0x36f30f, 0x0, 0x360110, 0x1376130,
+0x80015, 0x1580015, 0x1988316, 0xc82011,
+0x1020001, 0x1c08d20, 0x36f76f, 0x158000b,
+0x98ab14, 0x1646130, 0x312623, 0xc82011,
+0x1020001, 0x1c08d20, 0x36f70f, 0x158000b,
+0x98ab14, 0x1646130, 0x312623, 0x1377fff,
+0x1cb2210, 0xc82011, 0x1020001, 0x1c08d20,
+0x1646130, 0x1312623, 0xc82011, 0x11b0000,
+0x1180d, 0x1020001, 0x1c0bbc8, 0x158000d,
+0x58ab14, 0xc82411, 0xc80024, 0x7d0001,
+0x1376130, 0x80015, 0x1580018, 0x1988316,
+0xc82011, 0x1020001, 0x1c08d20, 0x1646130,
+0x316627, 0x158000f, 0x18ab14, 0xc82411,
+0xc82011, 0x1020001, 0x1c08d20, 0x1646130,
+0x310623, 0x1377fff, 0x1cb2213, 0x158000f,
+0x18ab14, 0xc82411, 0x1020001, 0x1c08d20,
+0x36f70f, 0x1377fff, 0x1c9a293, 0x771209,
+0x760201, 0x1377fff, 0x1c82290, 0x37f70f,
+0x36f30f, 0x762010, 0x37f30f, 0x36f50f,
+0x762010, 0x37f50f, 0xd40094, 0x1004ab,
+0x1580010, 0x1d8ab12, 0x36e90f, 0xc81403,
+0xc82210, 0x11b0000, 0x1128d, 0x11b0000,
+0x1162d, 0x11b0000, 0x1140d, 0x1020001,
+0x1c0852d, 0x1580012, 0x18ab10, 0xc80048,
+0x11b0000, 0x11c2d, 0xc80803, 0x11b0000,
+0x11aad, 0x37fc07, 0x11b0000, 0x1108d,
+0x37fe27, 0x11b0000, 0x10e0d, 0x11b0000,
+0x11e2d, 0x1020001, 0x1c0855b, 0xc80222,
+0x360121, 0xc81003, 0xc82012, 0x11b0000,
+0x1202d, 0x11b0000, 0x11e0d, 0x1020001,
+0x1c08723, 0x762211, 0x770201, 0xd40014,
+0x1004f4, 0x11b0000, 0x1200d, 0x14bffff,
+0x1c14021, 0x11b0000, 0x11e8d, 0x808408,
+0x11b8000, 0x11e0d, 0x36ff5f, 0x36fd3f,
+0x36fb1f, 0x36ea37, 0x36e817, 0x36f89f,
+0x1581ffe, 0x118bb17, 0x70000, 0x1580000,
+0x118bb17, 0x0, 0x37fc17, 0x37fb1f,
+0x37fe37, 0x37fd3f, 0x37ff5f, 0x1646100,
+0xb13629, 0xc82a10, 0x1621c9f, 0x1588310,
+0xc82212, 0xc80622, 0x37f90f, 0x360121,
+0x1581fff, 0x118bb10, 0x1646110, 0x1300645,
+0x37f927, 0x1581fff, 0x118bb12, 0x360143,
+0x370340, 0x360105, 0x36f94f, 0x1020001,
+0x1c088be, 0x762211, 0x762613, 0x762a15,
+0x770603, 0xd40034, 0x1004ed, 0x36ff5f,
+0x36fd3f, 0x36fb1f, 0x36fe37, 0x36fc17,
+0x1581fff, 0x118bb17, 0x70000, 0x1580000,
+0x98bb17, 0x0, 0x37fd1f, 0x37ff3f,
+0xc82c12, 0x11b0000, 0x1ec8c, 0xd40084,
+0x110116, 0x1377fff, 0x1c98014, 0x1377fff,
+0x1c90016, 0x1377fff, 0x1c80010, 0xc81024,
+0x7a0200, 0x1376120, 0xa0014, 0x360122,
+0x11b0008, 0x1c96b, 0x1580012, 0x98a311,
+0x360100, 0x11b0008, 0x1bd4b, 0x1020001,
+0x1c0b4cb, 0x100f13, 0x1377fff, 0x1c90014,
+0x1377fff, 0x1cb0016, 0x1377fff, 0x1c80010,
+0xc81024, 0x7a0200, 0x1376120, 0x88014,
+0x11b0008, 0x1bd4a, 0x360126, 0x1580012,
+0x988b16, 0x360100, 0x1020001, 0x1c08d20,
+0x36ff3f, 0x36fd1f, 0x1581fff, 0x198bb17,
+0x70000, 0x1620000, 0x58c31a, 0x1d0803,
+0x1467fff, 0x1c20074, 0x1447940, 0x100,
+0x70000, 0x1580004, 0x118bb17, 0x0,
+0x37bb1f, 0x37bd3f, 0x37bf5f, 0x37b90f,
+0xc81420, 0xc8100a, 0xd40004, 0x118420,
+0x360102, 0x16a0000, 0x188304, 0x110116,
+0x360064, 0xb00066, 0x110113, 0x1581ffb,
+0x118bb11, 0x1581ffd, 0x18bb13, 0x1377fff,
+0x1c88411, 0x1377fff, 0x1c98413, 0x1581ffe,
+0x118bb15, 0x1377fff, 0x1ca8415, 0x761008,
+0x370101, 0x360064, 0x370063, 0x360066,
+0x370065, 0x762412, 0x762814, 0x762c16,
+0x76140a, 0xd3200a, 0x1005e2, 0x1581ffe,
+0x118bb16, 0x1581ffd, 0x18bb14, 0xc80008,
+0x1581ffb, 0x118bb12, 0x36b90f, 0x1020001,
+0x1c08c14, 0x36bf5f, 0x36bd3f, 0x36bb1f,
+0x1581ffb, 0x118bb17, 0x70000, 0xb00000,
+0x110303, 0xc80048, 0x100f0d, 0x8c1002,
+0x1e08000, 0xc5, 0x130000, 0x190300,
+0xc91802, 0x1020001, 0x1c08e17, 0x1020001,
+0x1c07a5d, 0xc80448, 0x890002, 0x0,
+0x70000, 0x1020001, 0x1c07e01, 0x14bffff,
+0x1c120c1, 0x8c0040, 0x0, 0x70000,
+0x762e17, 0xc80400, 0x1e0a090, 0x3d,
+0x99999a, 0x180308, 0x8c1202, 0x1020001,
+0x1c069b9, 0x772e17, 0x70000, 0x1020001,
+0x1c07e01, 0x14bffff, 0x1c12141, 0x8c0040,
+0x0, 0x70000, 0x0, 0x70000,
+0x762e17, 0x0, 0x37fe27, 0xc80421,
+0xd42e04, 0x118511, 0x1621ca1, 0x1988310,
+0x771029, 0xc80420, 0x1377fff, 0x1c90010,
+0x1581fff, 0x1d8bb10, 0x771429, 0x360002,
+0xe91006, 0xce4200, 0xce0246, 0x1020001,
+0x1c024bb, 0xc80400, 0xc80002, 0x772e17,
+0x70000, 0x1580000, 0x158bb17, 0x0,
+0x37f617, 0x37f89f, 0x37f837, 0x37fb1f,
+0x37fd3f, 0x37ff5f, 0x37f70f, 0xc80200,
+0xc82410, 0x1377fff, 0x1c82190, 0xc81222,
+0xc82212, 0x1580001, 0x1189315, 0x144ffff,
+0x1c1e048, 0x762211, 0x1580001, 0x989313,
+0x360001, 0x1020001, 0x1c0877e, 0x8c0060,
+0xd40014, 0x110405, 0x370003, 0xc80020,
+0x370005, 0x100f0d, 0x14bffff, 0x1c12001,
+0x1c47f00, 0x208000, 0x60, 0xa05302,
+0x144ffff, 0x1c06300, 0xc91802, 0x1020001,
+0x1c08e17, 0x370005, 0x762211, 0x762613,
+0x762a15, 0x771209, 0xd40094, 0x1004e5,
+0x36f70f, 0x0, 0x371210, 0x36ff5f,
+0x36fd3f, 0x36fb1f, 0x36f837, 0x36f617,
+0x36f89f, 0x1581fff, 0xd8bb17, 0x70000,
+0x1377fff, 0x1c92190, 0x360e20, 0xc80020,
+0x360082, 0x8e2048, 0x110103, 0x370022,
+0xc80021, 0xc82810, 0x1377fff, 0x1c94090,
+0x762814, 0x10c8000, 0x808801, 0x360084,
+0x360022, 0x8e2048, 0x110103, 0x370024,
+0xc80021, 0x762412, 0x762814, 0x0,
+0x360820, 0x370020, 0xd40004, 0x110106,
+0x361000, 0x1620008, 0x181302, 0x7d0040,
+0x130fa1, 0x0, 0x70000, 0x361220,
+0xd40024, 0x110108, 0xd32002, 0x118404,
+0x700002, 0x371200, 0x100f03, 0xc80020,
+0x130f95, 0x0, 0x70000, 0x1580000,
+0x98bb17, 0x0, 0x37ff1f, 0xc82210,
+0x1e09e40, 0x3c, 0x47ae14, 0x184302,
+0x360402, 0x14bffff, 0x1c02000, 0x1c47f00,
+0x208000, 0x60, 0x205300, 0x8c0040,
+0x8c0200, 0x1020001, 0x1c02c39, 0x14b7fff,
+0x1c02000, 0x371001, 0xd40004, 0x110403,
+0xc80021, 0x371001, 0x1377fff, 0x1c84091,
+0xc80420, 0x370e21, 0xc80002, 0x370821,
+0x10c8000, 0x80883c, 0x1007501, 0x1800000,
+0x1377fff, 0x1c82211, 0xc80020, 0xc82811,
+0xc82410, 0x1c0403, 0x1006525, 0x1800000,
+0x1007529, 0x1800000, 0xc82011, 0x1020001,
+0x1c087ab, 0x36ff1f, 0x1581fff, 0x198bb17,
+0x70000, 0xc81000, 0xd40084, 0x110113,
+0xd40384, 0x118108, 0xb00022, 0x118204,
+0x1477fff, 0x1c24402, 0x11831c, 0xc80022,
+0x100f1e, 0x1639869, 0x184308, 0x8e2202,
+0x1082fb, 0x1638822, 0x184308, 0x8e2202,
+0x1003f7, 0x100f11, 0x1639869, 0x184308,
+0x8e2202, 0x1082f2, 0x1638822, 0x184308,
+0x8e2202, 0x1003ee, 0x1377fff, 0x1c90010,
+0x1377fff, 0x1c94092, 0x10c8000, 0x808872,
+0x1007525, 0x1800000, 0x1377fff, 0x1c80010,
+0xc80020, 0x370820, 0x0, 0x70000,
+0x1580000, 0x158bb17, 0x0, 0x37f617,
+0x37fb1f, 0x37fd3f, 0x37ff5f, 0xc82212,
+0x37f70f, 0x1020001, 0x1c087ea, 0x1377fff,
+0x1c84011, 0xc82611, 0xc80222, 0x37f90f,
+0x36f70f, 0x1580001, 0x988311, 0x1580001,
+0x1188315, 0x36f90f, 0x0, 0x360100,
+0x16a0000, 0x188304, 0x110115, 0x36f72f,
+0x0, 0x361202, 0xd40004, 0x11010a,
+0x360025, 0x1620008, 0x184308, 0x360001,
+0x360123, 0x1020001, 0x1c08723, 0x370001,
+0x100f07, 0x360001, 0x1620008, 0x181302,
+0x360123, 0x1020001, 0x1c08cc6, 0x36f90f,
+0x762211, 0x762613, 0x762a15, 0x770201,
+0x762010, 0x37f90f, 0xd40014, 0x1004de,
+0x36f70f, 0x1620008, 0x180300, 0x1020001,
+0x1c0880d, 0x36ff5f, 0x36fd3f, 0x36fb1f,
+0x36f617, 0x1581fff, 0xd8bb17, 0x70000,
+0x1e46233, 0x1ffe000, 0x18498c, 0x1301311,
+0x1e46277, 0x1ffe000, 0x18598d, 0x1303313,
+0x1e46633, 0x1ffe000, 0x18498e, 0x1301315,
+0x1e46677, 0x1ffe000, 0x18d990, 0x1318321,
+0x1e46633, 0x1ffe000, 0x18e990, 0x131c321,
+0x1d80000, 0xe53c00, 0x0, 0xb0000,
+0x1010010, 0x808970, 0x1b80000, 0x62cc,
+0x1036c61, 0x192b00, 0x1010000, 0xc089f4,
+0xc0f06, 0x1e47444, 0x2000, 0x18f190,
+0x1319321, 0x542000, 0x1d0201, 0x1007940,
+0x0, 0x1008001, 0x1c08970, 0x360132,
+0x1d0203, 0x1467fff, 0x1c20476, 0x1007940,
+0x0, 0x1008001, 0x1c08970, 0x340294,
+0x360132, 0x360342, 0x1d0207, 0x1467fff,
+0x1c20476, 0x1c07fff, 0x1fffc00, 0x30461,
+0x5bc304, 0x1007940, 0x0, 0x100f73,
+0x340294, 0x3404a4, 0x360132, 0x360342,
+0x360552, 0x1d020b, 0x1467fff, 0x1c20476,
+0x1c07fff, 0x1fffc00, 0x30461, 0x5bc304,
+0x1c07fff, 0x1fffc00, 0x30461, 0x9bd304,
+0x1007940, 0x0, 0x100f60, 0x340294,
+0x3404a4, 0x3406b4, 0x360132, 0x360342,
+0x360552, 0x360762, 0x1d020f, 0x1467fff,
+0x1c20476, 0x1c07fff, 0x1fffc00, 0x30461,
+0x5bc304, 0x1c07fff, 0x1fffc00, 0x30461,
+0x9bd304, 0x1c07fff, 0x1fffc00, 0x30461,
+0xdbe304, 0x1007940, 0x0, 0x100f47,
+0x340294, 0x3404a4, 0x3406b4, 0x340804,
+0x360132, 0x360342, 0x360552, 0x360762,
+0x360912, 0x1d0213, 0x1467fff, 0x1c20476,
+0x1c07fff, 0x1fffc00, 0x30461, 0x5bc304,
+0x1c07fff, 0x1fffc00, 0x30461, 0x9bd304,
+0x1c07fff, 0x1fffc00, 0x30461, 0xdbe304,
+0x1c07fff, 0x1fffc00, 0x30460, 0x1b9304,
+0x1007940, 0x0, 0x100f28, 0x340294,
+0x3404a4, 0x3406b4, 0x340804, 0x340a14,
+0x1e47fff, 0x1ffe000, 0x1899b2, 0x31a321,
+0x360342, 0x360552, 0x360762, 0x360912,
+0x360b22, 0x1d0217, 0x1467fff, 0x1c20476,
+0x1c07fff, 0x1fffc00, 0x30461, 0x5bc304,
+0x1c07fff, 0x1fffc00, 0x30461, 0x9bd304,
+0x1c07fff, 0x1fffc00, 0x30461, 0xdbe304,
+0x1c07fff, 0x1fffc00, 0x30460, 0x1b9304,
+0x1c07fff, 0x1fffc00, 0x30460, 0x5ba304,
+0x1007940, 0x0, 0x11a7ffe, 0x17fff57,
+0x11a7fed, 0x17ffd37, 0x11a7fdc, 0x17ffb17,
+0x11a7fc5, 0x17ff837, 0x11a7fb4, 0x17ff617,
+0x1581fff, 0xd8bb17, 0x70000, 0x340294,
+0x3404a4, 0x3406b4, 0x340804, 0x340a14,
+0x340c34, 0x1e47fff, 0x1ffe000, 0x1899b2,
+0x31a321, 0x360342, 0x360552, 0x360762,
+0x3608e2, 0x360b12, 0x360d22, 0x1d0223,
+0x1467fff, 0x1c20476, 0x1c07fff, 0x1fffc00,
+0x30461, 0x5bc304, 0x1c07fff, 0x1fffc00,
+0x30461, 0x9bd304, 0x1e47fff, 0x1ffe000,
+0x187188, 0x31030e, 0x1c07fff, 0x1fffc00,
+0x30461, 0xdbe304, 0x1c07fff, 0x1fffc00,
+0x30460, 0x1b8304, 0x1c07fff, 0x1fffc00,
+0x30460, 0x5b9304, 0x1e47fff, 0x1ffe000,
+0x187188, 0x31030e, 0x1c07fff, 0x1fffc00,
+0x30460, 0xdba304, 0x1007940, 0x0,
+0x100fbe, 0x340294, 0x3404a4, 0x3406b4,
+0x340804, 0x340a14, 0x340c34, 0x340ec4,
+0x1e47fff, 0x1ffe000, 0x1899b2, 0x31a321,
+0x360342, 0x360552, 0x360762, 0x3608e2,
+0x360b12, 0x360c62, 0x360f22, 0x1d022b,
+0x1467fff, 0x1c20476, 0x1c07fff, 0x1fffc00,
+0x30461, 0x5bc304, 0x1c07fff, 0x1fffc00,
+0x30461, 0x9bd304, 0x1e470b1, 0x1802000,
+0x183188, 0x31030e, 0x1c07fff, 0x1fffc00,
+0x30461, 0xdbe304, 0x1c07fff, 0x1fffc00,
+0x30460, 0x1b8304, 0x1e470b1, 0x1802000,
+0x183188, 0x31030e, 0x1c07fff, 0x1fffc00,
+0x30460, 0x5b9304, 0x1c07fff, 0x1fffc00,
+0x30460, 0xdb8304, 0x1e470b1, 0x1802000,
+0x183188, 0x31030e, 0x1c07fff, 0x1fffc00,
+0x30461, 0x11ba304, 0x1007940, 0x0,
+0x1008001, 0x1c08970, 0x1e47fff, 0x1ffe000,
+0x1d9180, 0x3aa312, 0x1e47fff, 0x1ffe000,
+0x1da180, 0x3ac314, 0x1e47fff, 0x1ffe000,
+0x18d190, 0x131b320, 0x543000, 0x1d020a,
+0x1d0005, 0x1377fff, 0x1c995f4, 0x1006989,
+0x0, 0x1c07fff, 0x1fffc00, 0x30661,
+0x1b3306, 0x1b77cb0, 0x20a8, 0x7fb60,
+0x1990320, 0x1620000, 0x1da3b2, 0x1008001,
+0x1c08970, 0x951000, 0xd41784, 0x11020f,
+0x1e08000, 0x3f, 0xfffffe, 0x19030a,
+0x895240, 0x1c8ffff, 0x1fffc00, 0x30060,
+0x185320, 0x14b7fff, 0x1c42000, 0x14bffff,
+0x1c02008, 0x70000, 0x0, 0x70000,
+0xc81420, 0xc8100a, 0xd40024, 0x118409,
+0xc80c21, 0xe80188, 0x76140a, 0xce30c0,
+0xe90100, 0x6e40c8, 0xd3204a, 0x1005f9,
+0xc80008, 0x0, 0x70000, 0xe90100,
+0xc80420, 0x110105, 0xe90100, 0x760402,
+0xd40004, 0x1081fd, 0xc80002, 0x0,
+0x70000, 0xc80421, 0xe60002, 0x0,
+0x70000, 0x371540, 0xc82810, 0xc82416,
+0x1c0903, 0x1006505, 0x1800000, 0x1007509,
+0x1800000, 0x360320, 0x16a0000, 0x189304,
+0x110106, 0x360202, 0x360020, 0x1020001,
+0x1c08de0, 0x371200, 0x0, 0x70000,
+0x1580002, 0xd8bb17, 0x0, 0x37e71f,
+0x37e93f, 0x37eb5f, 0xc82610, 0x37db2f,
+0x360122, 0x1581ffd, 0x198bb10, 0x1581ffd,
+0x198bb11, 0x360003, 0x37dd2f, 0xe90100,
+0x370320, 0x37dd27, 0x1020001, 0x1c08a35,
+0x1581ffe, 0x58bb12, 0x1581ffe, 0x58bb10,
+0x37df2f, 0x370401, 0x36db2f, 0x360023,
+0xe90122, 0x361952, 0xc80002, 0x370350,
+0x37e357, 0x1020001, 0x1c08a35, 0x36df0f,
+0x1581ffe, 0x58bb14, 0x1377fff, 0x1c92193,
+0x370400, 0x1377fff, 0x1c84013, 0x37e14f,
+0x1581ffe, 0x118bb16, 0xc82810, 0x360003,
+0x1c0303, 0x1006529, 0x1800000, 0x100752d,
+0x1800000, 0x1581ffd, 0x198bb10, 0x37e30f,
+0x1581ffe, 0x1d8bb14, 0xc82012, 0x1c0303,
+0x1006521, 0x1800000, 0x1007529, 0x1800000,
+0x36e10f, 0x1581ffd, 0x158bb14, 0x1581fff,
+0x98bb16, 0xc82410, 0x1c0303, 0x1006525,
+0x1800000, 0x100752d, 0x1800000, 0x36e30f,
+0x1581fff, 0x158bb16, 0xc82410, 0x1c0303,
+0x1006525, 0x1800000, 0x100752d, 0x1800000,
+0x36dd0f, 0xc82415, 0x1020001, 0x1c08eb6,
+0x360303, 0x16a0000, 0x188304, 0x110121,
+0x36db0f, 0x36dd2f, 0x360d00, 0x169ffff,
+0x1c21110, 0x118104, 0x361503, 0x37e50f,
+0x100f02, 0x37e50f, 0x360303, 0x36dd4f,
+0xc82c15, 0xc82210, 0x360523, 0x36e50f,
+0x361223, 0x360003, 0x1020001, 0x1c08f43,
+0x36db0f, 0x36e52f, 0x360d00, 0x169ffff,
+0x1c21110, 0x11010e, 0x36e52f, 0x360003,
+0xe90100, 0x1020001, 0x1c03c84, 0x100f08,
+0x36db0f, 0xc82815, 0x360003, 0x36dd2f,
+0x360d00, 0x1020001, 0x1c08fae, 0x36eb5f,
+0x36e93f, 0x36e71f, 0x1581ffd, 0x158bb17,
+0x70000, 0x1020001, 0x1c08bc7, 0x0,
+0x70000, 0x1580001, 0x158bb17, 0x0,
+0x37e617, 0x37e91f, 0x37eb3f, 0x37ed5f,
+0x1646100, 0xb11621, 0x37e72f, 0x1581ffc,
+0x1d8bb12, 0x1581ffd, 0x98bb10, 0x1581ffe,
+0x118bb13, 0xc82c12, 0x1c0303, 0x100650d,
+0x1800000, 0x1007507, 0x1800000, 0x1581ffd,
+0x158bb12, 0x1581ffe, 0x1d8bb15, 0xc82610,
+0x1c0303, 0x1006507, 0x1800000, 0x100750b,
+0x1800000, 0x1581ffe, 0x18bb16, 0x1581fff,
+0x98bb13, 0xc82012, 0x1c0303, 0x1006501,
+0x1800000, 0x1007507, 0x1800000, 0x1581fff,
+0x158bb12, 0xc82016, 0x1c0303, 0x1006501,
+0x1800000, 0x1007505, 0x1800000, 0x1646110,
+0x310629, 0x1020001, 0x1c0b283, 0x36e107,
+0x169ffff, 0x1c21011, 0x118119, 0x1581ffd,
+0x158bb10, 0x1581ffe, 0x18bb12, 0x1581fff,
+0x98bb16, 0xc82810, 0x1c0303, 0x1006509,
+0x1800000, 0x100750d, 0x1800000, 0x1581fff,
+0x158bb14, 0xc82012, 0x1c0303, 0x1006501,
+0x1800000, 0x1007509, 0x1800000, 0xc80001,
+0x1020001, 0x1c0b42c, 0x100f1a, 0x1581ffd,
+0x158bb10, 0x1581ffe, 0x18bb12, 0x1581fff,
+0x98bb16, 0xc82810, 0x1c0303, 0x1006509,
+0x1800000, 0x100750d, 0x1800000, 0x1581fff,
+0x158bb14, 0xc82012, 0x1c0303, 0x1006501,
+0x1800000, 0x1007509, 0x1800000, 0x1646110,
+0x310623, 0x36e72f, 0x1020001, 0x1c0b49b,
+0x36ed5f, 0x36eb3f, 0x36e91f, 0x36e617,
+0x1581ffe, 0xd8bb17, 0x70000, 0x1580001,
+0x158bb17, 0x0, 0x37e617, 0x37e91f,
+0x37eb3f, 0x37ed5f, 0x1646100, 0xb11621,
+0x37e72f, 0x1581ffc, 0x1d8bb12, 0x1581ffd,
+0x98bb10, 0x1581ffe, 0x118bb13, 0xc82c12,
+0x1c0303, 0x100650d, 0x1800000, 0x1007507,
+0x1800000, 0x1581ffd, 0x158bb12, 0x1581ffe,
+0x1d8bb15, 0xc82610, 0x1c0303, 0x1006507,
+0x1800000, 0x100750b, 0x1800000, 0x1581ffe,
+0x18bb16, 0x1581fff, 0x98bb13, 0xc82012,
+0x1c0303, 0x1006501, 0x1800000, 0x1007507,
+0x1800000, 0x1581fff, 0x158bb12, 0xc82016,
+0x1c0303, 0x1006501, 0x1800000, 0x1007505,
+0x1800000, 0x1646110, 0x310629, 0x1020001,
+0x1c091df, 0x36e107, 0x169ffff, 0x1c21011,
+0x118119, 0x1581ffd, 0x158bb10, 0x1581ffe,
+0x18bb12, 0x1581fff, 0x98bb16, 0xc82810,
+0x1c0303, 0x1006509, 0x1800000, 0x100750d,
+0x1800000, 0x1581fff, 0x158bb14, 0xc82012,
+0x1c0303, 0x1006501, 0x1800000, 0x1007509,
+0x1800000, 0xc80001, 0x1020001, 0x1c0b42c,
+0x100f1a, 0x1581ffd, 0x158bb10, 0x1581ffe,
+0x18bb12, 0x1581fff, 0x98bb16, 0xc82810,
+0x1c0303, 0x1006509, 0x1800000, 0x100750d,
+0x1800000, 0x1581fff, 0x158bb14, 0xc82012,
+0x1c0303, 0x1006501, 0x1800000, 0x1007509,
+0x1800000, 0x1646110, 0x310623, 0x36e72f,
+0x1020001, 0x1c0b49b, 0x36ed5f, 0x36eb3f,
+0x36e91f, 0x36e617, 0x1581ffe, 0xd8bb17,
+0x70000, 0x1580000, 0x1d8bb17, 0x0,
+0x37f417, 0x37f69f, 0x37f637, 0x37f8bf,
+0x37f877, 0x37fb1f, 0x37fd3f, 0x37ff5f,
+0x1646100, 0xb11621, 0xc82a12, 0x37f52f,
+0x14bffff, 0x1c12001, 0x1c47f00, 0x208000,
+0x60, 0xa05302, 0x1e08000, 0x40,
+0x1921fb6, 0x190300, 0xc91802, 0x1020001,
+0x1c08e17, 0x1646100, 0x1b13623, 0xe9011b,
+0xc81220, 0xd400b4, 0x118417, 0x14bffff,
+0x1c02009, 0x1c47f00, 0x208000, 0x60,
+0x205300, 0x8c3860, 0xc80007, 0x1020001,
+0x1c07b7d, 0x8f0000, 0x370003, 0xc80007,
+0x1020001, 0x1c07bb0, 0x762613, 0x8f0000,
+0x761209, 0x100770b, 0x1800000, 0xd32269,
+0x1005eb, 0x36f52f, 0xe90210, 0xc80420,
+0x1377fff, 0x1c80011, 0x1377fff, 0x1c90012,
+0xc80049, 0x37002a, 0x370000, 0x36ff5f,
+0x36fd3f, 0x36fb1f, 0x36f877, 0x36f637,
+0x36f417, 0x36f8bf, 0x36f69f, 0x1581fff,
+0x58bb17, 0x70000, 0x1e46233, 0x1ffe000,
+0x18498d, 0x1301313, 0x1e46277, 0x1ffe000,
+0x18598e, 0x1303315, 0x1e46633, 0x1ffe000,
+0x18d990, 0x1318321, 0x1e46677, 0x1ffe000,
+0x18e990, 0x131c321, 0x1d80000, 0xe54500,
+0x0, 0x98000, 0x118240, 0x1b80000,
+0x626c, 0x1036661, 0x192300, 0x110365,
+0xc0f03, 0x1646888, 0x31e643, 0x542000,
+0x1d0201, 0x1007940, 0x0, 0x100f33,
+0x340006, 0x360132, 0x1d0205, 0x1c00c21,
+0x100690c, 0x430461, 0x1bb320, 0x1007940,
+0x0, 0x100f29, 0x340294, 0x340006,
+0x340216, 0x360132, 0x360342, 0x1d0209,
+0x1c00c21, 0x100690c, 0x430461, 0x1bb320,
+0x1c00c25, 0x101690c, 0x4b0461, 0x5bc304,
+0x1007940, 0x0, 0x100f18, 0x340294,
+0x3404a4, 0x340006, 0x340216, 0x340466,
+0x360132, 0x360342, 0x360552, 0x1d020d,
+0x1c00c21, 0x100690c, 0x430461, 0x1bb320,
+0x1c00c25, 0x101690c, 0x4b0461, 0x5bc304,
+0x1c00c29, 0x106690c, 0x530461, 0x9bd304,
+0x1007940, 0x0, 0x11a7ffe, 0x17fff57,
+0x11a7fed, 0x17ffd37, 0x11a7fd5, 0x17ffa37,
+0x11a7fc4, 0x17ff817, 0x1581fff, 0x118bb17,
+0x70000, 0x340294, 0x3404a4, 0x3406b4,
+0x340006, 0x340216, 0x340466, 0x3406e6,
+0x360132, 0x360342, 0x360552, 0x360762,
+0x1d0211, 0x1c00c21, 0x100690c, 0x430461,
+0x1bb320, 0x1c00c25, 0x101690c, 0x4b0461,
+0x5bc304, 0x1c00c29, 0x106690c, 0x530461,
+0x9bd304, 0x1c00c2d, 0x10e690c, 0x5b0461,
+0xdbe304, 0x1007940, 0x0, 0x100fd7,
+0x1e47fff, 0x1ffe000, 0x1d9180, 0x3aa312,
+0x1e47fff, 0x1ffe000, 0x1da180, 0x3ac314,
+0x1e47fff, 0x1ffe000, 0x1db180, 0x3ae316,
+0x1e47fff, 0x1ffe000, 0x18d190, 0x131b320,
+0x5445c5, 0x1d0210, 0x1d000b, 0x1b70000,
+0x636c, 0x10b1b62, 0xd8db74, 0x10069ad,
+0x1000000, 0x1c00c39, 0x148690c, 0x730861,
+0x987378, 0x1c07fff, 0x1fffc00, 0x30661,
+0x1b3306, 0x12a7960, 0x384b09, 0x1620000,
+0x1da3b2, 0x1620000, 0x1db3b6, 0x100faf,
+0x14bffff, 0x1c12002, 0xc83421, 0x1d0006,
+0xc90c60, 0x1c07fff, 0x1fffc00, 0x3066e,
+0x1181306, 0x1007961, 0x1800000, 0x70000,
+0x1620000, 0x58c31a, 0x1d0203, 0x1467fff,
+0x1c20074, 0x1007940, 0x0, 0x70000,
+0x1580002, 0x18bb17, 0x0, 0x37e11f,
+0x37e33f, 0xc82c14, 0xc82812, 0xc81420,
+0xc8100a, 0xd40004, 0x118419, 0x360124,
+0x16a0000, 0x189304, 0x110110, 0x360066,
+0xb00066, 0x11010d, 0x1581ffe, 0x18bb11,
+0x1581fff, 0x18bb13, 0x1377fff, 0x1c88411,
+0x1377fff, 0x1c98413, 0x761008, 0x370121,
+0x360066, 0x370063, 0x762814, 0x762c16,
+0x76140a, 0xd3200a, 0x1005e9, 0x1581fff,
+0x18bb14, 0x1581ffe, 0x18bb12, 0xc80008,
+0x1020001, 0x1c088be, 0x36e33f, 0x36e11f,
+0x1581ffe, 0x18bb17, 0x70000, 0x1477fff,
+0x1c23500, 0x11821f, 0x9d0400, 0x1c60000,
+0x610c, 0x134761, 0x981302, 0x1c2ffff,
+0x1fffc00, 0x30a61, 0x98034a, 0x8c1248,
+0x1c60000, 0x610c, 0x134761, 0x981302,
+0x1c2ffff, 0x1fffc00, 0x30a61, 0x98034a,
+0x8c1248, 0x1c60000, 0x610c, 0x134761,
+0x981302, 0x1c2ffff, 0x1fffc00, 0x30a61,
+0x98034a, 0x8c1248, 0x8c0002, 0x70000,
+0xc90020, 0x70000, 0x138432f, 0x1c22200,
+0x13ccfef, 0x1f04609, 0x13ce979, 0x1b04609,
+0x16469f9, 0x1b18643, 0x1646989, 0x1b1a643,
+0x164e999, 0x1b00641, 0x16468a8, 0x314609,
+0x340016, 0x340226, 0x340466, 0x3406e6,
+0x801410, 0x1c0748a, 0x803a04, 0x630461,
+0x581304, 0x1416924, 0x130ba15, 0x1c17fff,
+0x1ffe047, 0x1f3f960, 0x118330f, 0x1c17fff,
+0x1ffe040, 0x860, 0x1187307, 0x1c07fff,
+0x1fff9b4, 0x1e30661, 0x980b00, 0x1c0748a,
+0x803a04, 0x530661, 0x581306, 0x1406924,
+0x123f54a, 0x1c07ca0, 0x3a27, 0x1430661,
+0x1d82306, 0x1c07ce0, 0x3a20, 0x430660,
+0x1d86306, 0x1d1421, 0x1c07fff, 0x1fffab5,
+0xf30461, 0x980b00, 0x1c0748a, 0x803a04,
+0x630461, 0x581304, 0x1416924, 0x130ba15,
+0x1c17cb0, 0x2047, 0x1f3f960, 0x118330f,
+0x1c17cf0, 0x2040, 0x860, 0x1187307,
+0x1c07fff, 0x1fff9b4, 0x1e30661, 0x980b00,
+0x1c0748a, 0x803a04, 0x530661, 0x581306,
+0x1406924, 0x123f54a, 0x1c07ca0, 0x3a27,
+0x1430661, 0x1d82306, 0x1c07ce0, 0x3a20,
+0x430660, 0x1d86306, 0x1407960, 0xee76e,
+0x10079e0, 0x0, 0x350016, 0x350226,
+0x350466, 0x3506e6, 0x11a7ff7, 0x17ffe77,
+0x11a7fe4, 0x17ffc17, 0x1581fff, 0x198bb17,
+0x70000, 0x138432f, 0x1c22200, 0x13ce9a9,
+0x1b04609, 0x13ce989, 0x1b04609, 0x1e4744c,
+0x2000, 0x180190, 0x314304, 0x1e47416,
+0x2000, 0x18d190, 0x1318321, 0x3402e6,
+0x1406914, 0x10e4920, 0x1c07492, 0x803a04,
+0x630461, 0x180b04, 0x1c17fff, 0x1ffe047,
+0x1d3fe60, 0x118730a, 0x1c0748a, 0x803984,
+0x1630661, 0x581300, 0x1c07492, 0x803a04,
+0x530661, 0x180b06, 0x1c07ca0, 0x3a39,
+0x1430661, 0x986306, 0x10079c0, 0x0,
+0x1d141b, 0x1c0748a, 0x803a85, 0x730461,
+0x581300, 0x1c07492, 0x803a04, 0x630461,
+0x180b04, 0x1c17cb0, 0x2047, 0x1d3fe60,
+0x118730a, 0x10079e0, 0x0, 0x1c0748a,
+0x803984, 0x1630661, 0x581300, 0x1c07492,
+0x803a04, 0x530661, 0x180b06, 0x1c07ca0,
+0x3a39, 0x1430661, 0x986306, 0x10079c0,
+0x0, 0x1407960, 0xeea6e, 0x10079e0,
+0x0, 0x350026, 0x3502e6, 0x11a7ff4,
+0x17ffe17, 0x772e17, 0x70000, 0x1620000,
+0x58d318, 0x1d0006, 0xc90c68, 0x10069e4,
+0x1000000, 0x10079e9, 0x1800000, 0x1007960,
+0x0, 0x70000, 0x1cbf081, 0x2060,
+0x260, 0x190300, 0x9c140c, 0x1cdffff,
+0x1ffe050, 0xc60, 0x185300, 0x1cdffff,
+0x1ffe050, 0xc60, 0x185300, 0x1cdffff,
+0x1ffe050, 0xc60, 0x185300, 0x1e47f00,
+0xc0a000, 0x186198, 0x30c321, 0x14b7fff,
+0x1c02000, 0x6cc408, 0xd281a5, 0xd32248,
+0x1377e00, 0x800600, 0x70000, 0x1cbf081,
+0x2060, 0x260, 0x190300, 0x9c140c,
+0x1cdffff, 0x1ffe050, 0xc60, 0x185300,
+0x1cdffff, 0x1ffe050, 0xc60, 0x185300,
+0x1cdffff, 0x1ffe050, 0xc60, 0x185300,
+0x14b7fff, 0x1c02000, 0x6c8408, 0x1697fff,
+0x1e00d05, 0xd32248, 0x1387e00, 0x800000,
+0x70000, 0x9c140c, 0x1cdffff, 0x1ffe050,
+0xc60, 0x185300, 0x1cdffff, 0x1ffe050,
+0xc60, 0x185300, 0x1cdffff, 0x1ffe050,
+0xc60, 0x185300, 0x70000, 0x1020001,
+0x1c08adf, 0x0, 0x70000, 0x1580001,
+0x158bb17, 0x0, 0x37e617, 0x37e91f,
+0x37eb3f, 0x37ed5f, 0x1646100, 0xb11621,
+0xc82612, 0x37e74f, 0x1581ffc, 0x1d8bb12,
+0x1581ffd, 0x98bb10, 0xe90110, 0x1581ffe,
+0x118bb16, 0xc82812, 0x1c0303, 0x1006529,
+0x1800000, 0x100752d, 0x1800000, 0x1581ffd,
+0x158bb12, 0x1581ffe, 0x1d8bb15, 0xc82c10,
+0x1c0303, 0x100652d, 0x1800000, 0x100752b,
+0x1800000, 0x1581ffe, 0x18bb14, 0x1581fff,
+0x98bb16, 0xc82012, 0x1c0303, 0x1006521,
+0x1800000, 0x100752d, 0x1800000, 0x1581fff,
+0x158bb12, 0xc82014, 0x1c0303, 0x1006521,
+0x1800000, 0x1007525, 0x1800000, 0x36e70f,
+0x1020001, 0x1c0b283, 0x36e107, 0x169ffff,
+0x1c21011, 0x118119, 0x1581ffd, 0x158bb12,
+0x1581ffe, 0x18bb10, 0xe90110, 0x1581fff,
+0x98bb16, 0xc82812, 0x1c0303, 0x1006529,
+0x1800000, 0x100752d, 0x1800000, 0x1581fff,
+0x158bb14, 0xc82410, 0x1c0303, 0x1006525,
+0x1800000, 0x1007529, 0x1800000, 0x1020001,
+0x1c0b42c, 0x100f1a, 0x1581ffd, 0x158bb12,
+0x1581ffe, 0x18bb10, 0xe90110, 0x1581fff,
+0x98bb16, 0xc82812, 0x1c0303, 0x1006529,
+0x1800000, 0x100752d, 0x1800000, 0x1581fff,
+0x158bb14, 0xc82410, 0x1c0303, 0x1006525,
+0x1800000, 0x1007529, 0x1800000, 0xc82011,
+0xc82413, 0x1020001, 0x1c0b49b, 0x1581ffc,
+0x1d8bb12, 0x1581ffd, 0x98bb10, 0xe90110,
+0x1581fff, 0x98bb16, 0xc82812, 0x1c0303,
+0x1006529, 0x1800000, 0x100752d, 0x1800000,
+0x1581fff, 0x158bb14, 0xc82410, 0x1c0303,
+0x1006525, 0x1800000, 0x1007529, 0x1800000,
+0xc82011, 0xc82413, 0x36e74f, 0x1020001,
+0x1c0bad5, 0x36ed5f, 0x36eb3f, 0x36e91f,
+0x36e617, 0x1581ffe, 0xd8bb17, 0x70000,
+0x1580001, 0x158bb17, 0x0, 0x37e617,
+0x37e91f, 0x37eb3f, 0x37ed5f, 0x1646100,
+0xb13621, 0xc82214, 0x37e72f, 0x1581ffc,
+0x1d8bb12, 0x1581ffd, 0x98bb10, 0xe90110,
+0x1581fff, 0x98bb16, 0xc82812, 0x1c0303,
+0x1006529, 0x1800000, 0x100752d, 0x1800000,
+0x1581fff, 0x158bb14, 0xc82410, 0x1c0303,
+0x1006525, 0x1800000, 0x1007529, 0x1800000,
+0xc82811, 0x36db27, 0x36e107, 0x1020001,
+0x1c0bc22, 0x1581ffc, 0x1d8bb12, 0x1581ffd,
+0x98bb10, 0xe90110, 0x1581ffe, 0x118bb16,
+0xc82812, 0x1c0303, 0x1006529, 0x1800000,
+0x100752d, 0x1800000, 0x1581ffd, 0x158bb12,
+0x1581ffe, 0x1d8bb15, 0xc82c10, 0x1c0303,
+0x100652d, 0x1800000, 0x100752b, 0x1800000,
+0x1581ffe, 0x18bb14, 0x1581fff, 0x98bb16,
+0xc82012, 0x1c0303, 0x1006521, 0x1800000,
+0x100752d, 0x1800000, 0x1581fff, 0x158bb12,
+0xc82014, 0x1c0303, 0x1006521, 0x1800000,
+0x1007525, 0x1800000, 0xc82011, 0x1020001,
+0x1c091df, 0x36e107, 0x169ffff, 0x1c21013,
+0x118119, 0x1581ffd, 0x158bb10, 0x1581ffe,
+0x18bb12, 0xe90110, 0x1581fff, 0x98bb16,
+0xc82810, 0x1c0303, 0x1006529, 0x1800000,
+0x100752d, 0x1800000, 0x1581fff, 0x158bb14,
+0xc82012, 0x1c0303, 0x1006521, 0x1800000,
+0x1007529, 0x1800000, 0x1020001, 0x1c0b42c,
+0x100f1a, 0x1581ffd, 0x158bb10, 0x1581ffe,
+0x18bb12, 0xe90110, 0x1581fff, 0x98bb16,
+0xc82810, 0x1c0303, 0x1006529, 0x1800000,
+0x100752d, 0x1800000, 0x1581fff, 0x158bb14,
+0xc82012, 0x1c0303, 0x1006521, 0x1800000,
+0x1007529, 0x1800000, 0xc82013, 0x36e72f,
+0x1020001, 0x1c0b49b, 0x36ed5f, 0x36eb3f,
+0x36e91f, 0x36e617, 0x1581ffe, 0xd8bb17,
+0x70000, 0x1580000, 0xd8bb17, 0x10065e3,
+0x1800000, 0x11bffdd, 0x17ffb37, 0x11bffee,
+0x17ffd57, 0x11bfff4, 0x17ffe17, 0x1e87421,
+0x2000, 0x18e190, 0x31b302, 0x1f58000,
+0x608c, 0x10b0460, 0x591300, 0x1a60000,
+0x62cc, 0xb1462, 0xd87304, 0x1e4ffff,
+0x1ffe000, 0x18a987, 0x31d302, 0x1cb8000,
+0x612c, 0x1032261, 0x1190300, 0x9c140c,
+0x1cdffff, 0x1ffe008, 0x361, 0x585309,
+0x1cdffff, 0x1ffe008, 0x361, 0x585309,
+0x1cdffff, 0x1ffe008, 0x361, 0x585309,
+0x13829a1, 0xa081, 0x1466ba6, 0x1830400,
+0x1c65241, 0x149c000, 0x60, 0x1184b06,
+0x1c65390, 0x14b4000, 0x61, 0x1985302,
+0x1c05a84, 0x17dfc00, 0x30c61, 0x58730c,
+0x1c65b94, 0x76c000, 0x60, 0x1984300,
+0x14669c5, 0x20486, 0x1467945, 0x1870502,
+0x14029a1, 0xec9ec, 0x1d0119, 0x1c65b94,
+0x76c000, 0x60, 0x1984300, 0x1c65241,
+0x149c000, 0x60, 0x1184b06, 0x1c65390,
+0x14b4000, 0x61, 0x1985302, 0x1c05a84,
+0x17dfc00, 0x30c61, 0x58730c, 0x1c65b94,
+0x76c000, 0x60, 0x1984300, 0x14669c5,
+0x20486, 0x1467945, 0x1870502, 0x14029a1,
+0xec9ec, 0x13879c1, 0x188a091, 0x11b7fdd,
+0x17ffb37, 0x11b7fee, 0x17ffd57, 0x11b7ff4,
+0x17ffe17, 0x1581fff, 0x158bb17, 0x70000,
+0x1cb8000, 0x610c, 0x1032261, 0x1190300,
+0x1e4ffff, 0x1ffe000, 0x18d198, 0x31c330,
+0x9c040c, 0x1cdffff, 0x1ffffd0, 0x461,
+0x181308, 0x1cdffff, 0x1ffffd0, 0x461,
+0x181308, 0x1cdffff, 0x1ffffd0, 0x461,
+0x181308, 0x1f58000, 0x604c, 0x1130060,
+0x190b00, 0x1b70000, 0x628c, 0x131461,
+0x981312, 0x1b70000, 0x624c, 0x1830a60,
+0x180310, 0x1b70000, 0x620c, 0x1830062,
+0x1198314, 0x1d0207, 0x1c60000, 0x618c,
+0x437960, 0x1184374, 0x10079c0, 0x1000000,
+0x1007940, 0x1000000, 0x70000, 0x1580000,
+0x198bb17, 0x0, 0x37f417, 0x37fb1f,
+0x37fd3f, 0x37ff5f, 0xc82610, 0xc82012,
+0x37f52f, 0x37f70f, 0xc80020, 0x361b03,
+0x1377fff, 0x1c8a310, 0xc82012, 0x370003,
+0x1377fff, 0x1caa211, 0xc82411, 0xc82815,
+0x130f78, 0xc82011, 0x1020001, 0x1c090f8,
+0xd40004, 0x110103, 0xc80021, 0x100f5b,
+0xc82011, 0x1020001, 0x1c09105, 0x162109d,
+0xd89312, 0xc80200, 0xc80424, 0x1580001,
+0x589b10, 0x1377fff, 0x1c02101, 0xd21000,
+0xe81e88, 0xe91e88, 0x1377fff, 0x1d00020,
+0x1387e01, 0x440420, 0x7a0048, 0x1377fff,
+0x1c90012, 0x37f92f, 0x1020001, 0x1c0cc5c,
+0xc82c20, 0x36f74f, 0xc82411, 0xc82013,
+0xc80021, 0x1020001, 0x1c0cd0c, 0x36f70f,
+0xc82415, 0x130f40, 0xd40004, 0x118103,
+0xc80022, 0x100f35, 0x360009, 0x1020001,
+0x1c0cd07, 0xc82011, 0x1020001, 0x1c0cd38,
+0xc82011, 0x1020001, 0x1c090f8, 0xd40004,
+0x1081f9, 0x36f92f, 0x1580001, 0x589b10,
+0x1020001, 0x1c0cc5c, 0xc82c20, 0xc82815,
+0xc82411, 0xc82013, 0xc80021, 0x1020001,
+0x1c0cd0c, 0xc82815, 0x36f50f, 0xc82411,
+0x1020001, 0x1c090c8, 0x162109d, 0xd89312,
+0x1580001, 0x589b10, 0xc80024, 0x7a0001,
+0x1377fff, 0x1c90012, 0x1020001, 0x1c0cc5c,
+0x36f54f, 0xc82c20, 0xc82013, 0xc80022,
+0xc82414, 0x1020001, 0x1c0cd0c, 0xc82411,
+0xc82013, 0x1020001, 0x1c0cd68, 0xc80421,
+0xc80020, 0x370023, 0x36ff5f, 0x36fd3f,
+0x36fb1f, 0x36f417, 0x1581fff, 0x98bb17,
+0x70000, 0xc80020, 0x360028, 0x36008a,
+0xd32202, 0x110103, 0xc80020, 0x100f07,
+0x762010, 0x762412, 0x760000, 0xd40404,
+0x1082f6, 0xc80021, 0x0, 0x70000,
+0x100751f, 0x1800000, 0x37ff1f, 0xc82c14,
+0xc82812, 0x1377fff, 0x1cb2196, 0xc80422,
+0xc80020, 0x10c8000, 0xc0909c, 0x7a1040,
+0x1377fff, 0x1c88110, 0x762411, 0x771029,
+0x1677fff, 0x1c40465, 0x771429, 0xe81081,
+0x1677fff, 0x1c30563, 0xcd30c1, 0x1007769,
+0x1800000, 0x360069, 0x1639fe0, 0x181302,
+0xce1046, 0x163801f, 0x1d8730e, 0xce72c6,
+0xe808e6, 0xe9082e, 0x163801f, 0x1d84308,
+0x36002a, 0xce4202, 0x1639fe0, 0x18530a,
+0xe90888, 0xce1242, 0xcd52c6, 0xcd420a,
+0xe91822, 0xcd1048, 0x37002e, 0x1377fff,
+0x1cb3016, 0xc80422, 0x760000, 0x7a1040,
+0x771029, 0x771429, 0x760000, 0x1377fff,
+0x1c88110, 0x1e0807f, 0x10000ff, 0x0,
+0x187302, 0x1677fff, 0x1c30563, 0x762411,
+0x1639fe0, 0x18530a, 0x1677fff, 0x1c40465,
+0xe81081, 0x163801f, 0x1d84308, 0xcd30c1,
+0x1007769, 0x1800000, 0x360069, 0xce1046,
+0xce72c6, 0xe808e6, 0xe9082e, 0x36002a,
+0xce4202, 0xce1242, 0xcd52c6, 0xe90888,
+0xe91822, 0xcd420a, 0xcd1048, 0x37002e,
+0x1377fff, 0x1cb3016, 0x36ff1f, 0x36fe17,
+0x772e17, 0x70000, 0xc82c14, 0xc82812,
+0x1377fff, 0x1c92196, 0xc80020, 0x10c8000,
+0x10090f6, 0x3600ea, 0x1e08000, 0x2ff,
+0x0, 0x183308, 0x7a30c0, 0xce420e,
+0x771429, 0x163801f, 0x1d81302, 0x760000,
+0x1677fff, 0x1c50569, 0xce104e, 0xe90888,
+0x1377fff, 0x1cb0310, 0x1e0ffff, 0x1000000,
+0x1fe00, 0x187306, 0xcd4248, 0xe80822,
+0x771428, 0xcd1048, 0x37002e, 0x1677fff,
+0x1c40769, 0x36002a, 0x1377fff, 0x1c93012,
+0x762814, 0xce30c2, 0xce1242, 0xe91088,
+0xe8086a, 0xe81822, 0xcd420a, 0xcd1048,
+0x37022e, 0x70000, 0xc80020, 0x360028,
+0xd40024, 0x110103, 0xc80020, 0x100f06,
+0x762010, 0x760000, 0xd40404, 0x1082f8,
+0xc80021, 0x0, 0x70000, 0x1e08000,
+0x3, 0x1fffffe, 0x190300, 0x360628,
+0xce0002, 0xe91800, 0x0, 0x70000,
+0x13be925, 0x1b00601, 0x1647fff, 0x1fae6c1,
+0x360440, 0x1647fff, 0x1fb6609, 0x360760,
+0x1d0001, 0x1804a44, 0x17dc000, 0x0,
+0x0, 0x1007b2d, 0x1800000, 0xc82016,
+0x1620000, 0x1db3b6, 0x70000, 0x1647fff,
+0x1fae6c9, 0x360442, 0x1647fff, 0x1fb6609,
+0x360362, 0x770000, 0x1006b2d, 0x1800000,
+0x1d0001, 0x1805a44, 0x7dc000, 0x0,
+0x0, 0x1007921, 0x1800000, 0xc82016,
+0x1620000, 0x1db3b6, 0x70000, 0x1647fff,
+0x1fae6d1, 0x360444, 0x1647fff, 0x1fb6609,
+0x360364, 0x770402, 0x1805298, 0x17dc000,
+0x0, 0x0, 0x894284, 0x1d0205,
+0x1c65298, 0x17dc000, 0x61, 0x980308,
+0x144f9a1, 0x1840604, 0x8c5008, 0x16478a0,
+0x31062d, 0x1620000, 0x1db3b6, 0x70000,
+0x1e47fff, 0x1ffe000, 0x18898a, 0x302311,
+0x13bf52f, 0x1b00601, 0x1e47fff, 0x1ffe000,
+0x1d61b1, 0x3ae362, 0x360441, 0x1e47492,
+0x1c02000, 0x1da182, 0x3b6304, 0x360761,
+0x360341, 0x1007b2d, 0x1800000, 0x1d0005,
+0x1805254, 0x179c000, 0x0, 0x0,
+0x1806344, 0x7dc000, 0x0, 0x0,
+0x1006ba9, 0x1800000, 0x10079a1, 0x1800000,
+0x370341, 0x370761, 0x1620000, 0x1da3b6,
+0x36ff17, 0x772e17, 0x70000, 0x1aa5315,
+0x7de040, 0x200860, 0x1180300, 0x1d0005,
+0x1d05315, 0x7dfff7, 0x1f80260, 0x985308,
+0x1c10000, 0x618c, 0x30060, 0x11a4300,
+0x1007840, 0x0, 0x10078c4, 0x0,
+0x70000, 0x1e47fff, 0x1ffe000, 0x185189,
+0x1302311, 0x164455f, 0x1f02637, 0x1e4fa97,
+0x1c02000, 0x18e190, 0x131b321, 0x1aa5314,
+0xfde040, 0x200860, 0x1180300, 0x1d0009,
+0x1d00000, 0x600c, 0x437760, 0x985378,
+0x1c85314, 0xfde000, 0x181181, 0x300300,
+0x1c47fff, 0x1ffe040, 0x80860, 0x1180304,
+0x1007840, 0x0, 0x36ffb7, 0x11b7fe9,
+0x17ffd17, 0x13878c4, 0xba117, 0x70000,
+0x1e47fff, 0x1ffe000, 0x185189, 0x1308311,
+0x164515f, 0x1f08637, 0x1e4fac7, 0x1c02000,
+0x18e190, 0x131b321, 0x1d020d, 0x1805314,
+0xfdc000, 0x0, 0x0, 0x1d00000,
+0x60cc, 0x437761, 0x1985378, 0x1c28c31,
+0x10061cd, 0x12b0460, 0x183360, 0x1806298,
+0x75c000, 0x0, 0x0, 0x36ffb7,
+0x11b7fe9, 0x17ffd17, 0x1581fff, 0x198bb17,
+0x70000, 0x175ffff, 0x1c02080, 0x13be929,
+0x1b00601, 0x10069a9, 0x1800000, 0x1d0007,
+0x1806254, 0x75c000, 0x0, 0x0,
+0x1006929, 0x1800000, 0x10069a9, 0x1800000,
+0x1806254, 0x75c000, 0x0, 0x0,
+0x70000, 0x36f447, 0x36e8c7, 0x36ec87,
+0x1e46633, 0x1ffe000, 0x18498c, 0x1301311,
+0x1e46633, 0x1ffe000, 0x18498d, 0x1301313,
+0x1e46633, 0x1ffe000, 0x18498e, 0x1301315,
+0x165433f, 0x1e4d88b, 0x1b86677, 0x1ffe017,
+0x1fc0063, 0x591308, 0x1f36633, 0x1ffe010,
+0x80063, 0x58cb21, 0x173cabf, 0x1cd2100,
+0x14bcaaf, 0x1c12000, 0x14acfff, 0x1f02605,
+0x1387fff, 0x1c00160, 0x1007400, 0x0,
+0x1f3e699, 0x1ffe02f, 0x1fc1f63, 0x190b02,
+0x128034, 0x1e47fff, 0x1ffe000, 0x1d9997,
+0x3b132e, 0x11b7ff9, 0x17fff07, 0x1b40c79,
+0x121634c, 0x10b1264, 0x98d310, 0x1b45210,
+0x1b6fc00, 0x31564, 0x98d330, 0x13b2443,
+0x716625, 0x1d150d, 0x1d05054, 0x2040,
+0x40160, 0x1184300, 0x1c5d233, 0x17dffc0,
+0x23f861, 0x198230a, 0x1c5e2dc, 0x71e047,
+0x1e00860, 0x1986302, 0x18062dc, 0x175c000,
+0x0, 0x0, 0x1d05054, 0x2040,
+0x40160, 0x1184300, 0x1c5ffff, 0x1ffffc0,
+0x23f861, 0x198230a, 0x1c5e2dc, 0x61a047,
+0x1e00860, 0x1986302, 0x1f3e2dc, 0x1658000,
+0x63, 0x990b1a, 0x1740000, 0x58eb1d,
+0x771418, 0x11836e, 0x1d0a6b, 0x11b7ff8,
+0x17fff07, 0x1e47fff, 0x1ffe000, 0x18798e,
+0x1313311, 0x1b45232, 0x927884, 0x31264,
+0x58d310, 0x1b40c79, 0x123634c, 0x10b1664,
+0x98d312, 0x1b85254, 0x1b6ffc8, 0x3fa63,
+0x1190b20, 0x1b70000, 0x630c, 0x1032281,
+0x190301, 0x1c7ffff, 0x1ffe000, 0x185185,
+0x409309, 0x1d0f4a, 0x1d05211, 0x79e00e,
+0x6fa80, 0x1a04c08, 0x1d05010, 0x2040,
+0x80260, 0x1984300, 0x1d0d010, 0x10439fb,
+0x14b0f60, 0x18430e, 0x1d05211, 0x17de042,
+0x50860, 0x1584300, 0x1d00000, 0x6110,
+0x3c0660, 0x184300, 0x1d151d, 0x1d0d233,
+0x14d3874, 0x1fb0c60, 0x182b05, 0x1d0d277,
+0x493a3b, 0x1430661, 0x1983300, 0x1806210,
+0x71c000, 0x0, 0x0, 0x1d0e2dc,
+0x175fa3b, 0x1430461, 0x1d83b07, 0x1d05010,
+0x2047, 0x1ffff60, 0x1985b03, 0x1d0e2ff,
+0x10c39fb, 0x14b0f60, 0x18430e, 0x1d05076,
+0x1042041, 0x1f90560, 0x184b01, 0x1d06299,
+0x82041, 0x1f90560, 0x1585b03, 0x1d0d232,
+0x927874, 0x1fb0c60, 0x182b05, 0x1d0d254,
+0x1b6fa3b, 0x1430661, 0x1983300, 0x1bbe210,
+0x61a000, 0x18b18b, 0x314314, 0x1d0e2dc,
+0x165ba3b, 0x1430461, 0x1d83b07, 0x1c7e299,
+0x69a000, 0x185185, 0x309309, 0x1e4e2ff,
+0x16da000, 0x204984, 0x1408301, 0x1748000,
+0x98d31a, 0x1740000, 0x98eb1d, 0x11b7ff8,
+0x17fff07, 0xc82611, 0x1e08000, 0x8ff,
+0x1fffff8, 0x18d318, 0x1b75232, 0x926060,
+0x81162, 0x990b10, 0x1b75254, 0x1b6e010,
+0x40062, 0x1191310, 0x147ffff, 0x1e8ac93,
+0x1d05010, 0x1042008, 0x40180, 0x1984b01,
+0x1d05211, 0x16da040, 0x40160, 0x1584300,
+0x1d00000, 0x61d0, 0x3c0660, 0x1984300,
+0x1d0d211, 0x69b85e, 0xfb0c60, 0x1982b05,
+0x1d05010, 0x2040, 0x80260, 0x1984300,
+0x1d0ffff, 0x1fffa7b, 0x13b0661, 0x180307,
+0x1d0d254, 0x1b6fa3b, 0x1430661, 0x1983300,
+0x1c7e210, 0x61a000, 0x185185, 0x309363,
+0x77001d, 0x1d0e2dc, 0x165ba3b, 0x1430361,
+0x1d83b07, 0x1d0021, 0x1d05010, 0x1042008,
+0x7a080, 0x1984b62, 0x1d05211, 0x10c2040,
+0x47260, 0x1584300, 0x1d062ff, 0x12ca041,
+0x1fd0660, 0x1984300, 0x1d0d211, 0x8385e,
+0xfb0c60, 0x1982b05, 0x1d05010, 0x2040,
+0x80260, 0x1984300, 0x1d0e277, 0x28ba7b,
+0x13b0661, 0x180307, 0x1d0d254, 0x1b6fa3b,
+0x1430661, 0x1983300, 0x1c7e210, 0x61a000,
+0x185185, 0x309363, 0x1d0e2dc, 0x165ba3b,
+0x1430361, 0x1d83b07, 0x1805211, 0x1080000,
+0x0, 0x0, 0x1004768, 0x1000000,
+0x1b860ff, 0x10c2047, 0x1f80962, 0x191b17,
+0x11b7fe7, 0x17ffc77, 0x1e452ba, 0x2000,
+0x1d9990, 0x3b1320, 0x1003103, 0x400000,
+0x1643103, 0x749a83, 0x1653107, 0xf49a83,
+0x1e47fff, 0x1ffe000, 0x18e9b8, 0x1315370,
+0x1e47fff, 0x1ffe000, 0x18d9b8, 0x1313370,
+0x1e47fff, 0x1ffe000, 0x18c9b8, 0x1311370,
+0x1643003, 0x717621, 0x70000, 0x1580000,
+0xd8bb17, 0x0, 0x37fb1f, 0x37fd3f,
+0x37ff5f, 0xc82210, 0xc82a12, 0xc82616,
+0x1377fff, 0x1c84091, 0x1e09f66, 0xcccd00,
+0x0, 0x185300, 0x360023, 0xc81048,
+0x371421, 0x360625, 0x371621, 0x360425,
+0x371821, 0x360a25, 0x371a21, 0x11b8008,
+0xfbb49, 0x372201, 0x370a01, 0x370c81,
+0x370ea1, 0x360005, 0x14bffff, 0x1c02000,
+0x371001, 0x360205, 0x14bffff, 0x1c02000,
+0x371201, 0xc82811, 0xc82410, 0x1c0503,
+0x1006505, 0x1800000, 0x1007509, 0x1800000,
+0x360503, 0x11b8008, 0x11709, 0x360005,
+0x1020001, 0x1c03e42, 0x1c98000, 0x614c,
+0x18b4a60, 0x990321, 0x360000, 0xc81047,
+0xe91c00, 0xce0040, 0x371e01, 0x360303,
+0x372101, 0xc82011, 0x11b8000, 0xba89,
+0x11b8000, 0xbca9, 0x1020001, 0x1c09680,
+0xc82011, 0x1020001, 0x1c09424, 0xc82011,
+0x1020001, 0x1c095e0, 0x1581fff, 0x158bb10,
+0x361401, 0x1581fff, 0x158bb12, 0x37fa07,
+0x362141, 0x1581fff, 0x158bb16, 0x370340,
+0x158005e, 0x1d88b10, 0x11b0008, 0x11749,
+0x1580025, 0x1d8a314, 0x370542, 0xc82415,
+0x11b0008, 0xfbb49, 0x1020001, 0x1c0c555,
+0x36ff5f, 0x36fd3f, 0x36fb1f, 0x1581fff,
+0x158bb17, 0x70000, 0x1580000, 0x118bb17,
+0x0, 0x37f817, 0x37fb1f, 0x37fd3f,
+0x37ff5f, 0xc82a10, 0x37f92f, 0xc82015,
+0x1020001, 0x1c096fe, 0x360205, 0xb00000,
+0x110131, 0x36f90f, 0xc82810, 0x1377fff,
+0x1c94010, 0xc82015, 0x1020001, 0x1c09876,
+0x361a05, 0xd40004, 0x118416, 0x36f90f,
+0xc80220, 0x1580003, 0x1988313, 0x1580003,
+0x188311, 0xd40004, 0x11840e, 0xc82811,
+0xc82413, 0xc82015, 0x1020001, 0x1c09876,
+0x1377fff, 0x1c9c013, 0x1377fff, 0x1c8c011,
+0x361a05, 0x760201, 0xd32001, 0x1005f4,
+0x361e05, 0xd40004, 0x110136, 0x36f90f,
+0x0, 0x361300, 0x16a0000, 0x188304,
+0x110130, 0x1580005, 0x98ab14, 0x361625,
+0xc80025, 0x36f92f, 0x1020001, 0x1c08cce,
+0x100f28, 0x361a05, 0xd40004, 0x118405,
+0x36f92f, 0xc82015, 0x1020001, 0x1c09b28,
+0x360005, 0xb00000, 0x118106, 0x36f92f,
+0xc82015, 0x1020001, 0x1c097a4, 0x100f19,
+0x360805, 0x1477fff, 0x1c24400, 0x118209,
+0xd00449, 0x8e2040, 0x110306, 0x36f92f,
+0xc82015, 0x1020001, 0x1c098e9, 0x100f0d,
+0x360805, 0xb00000, 0x118106, 0x36f92f,
+0xc82015, 0x1020001, 0x1c099a0, 0x100f05,
+0x36f92f, 0xc82015, 0x1020001, 0x1c09b24,
+0x36ff5f, 0x36fd3f, 0x36fb1f, 0x36f817,
+0x1581fff, 0x118bb17, 0x70000, 0xc81000,
+0xd40284, 0x11840d, 0xd40384, 0x110107,
+0xd40484, 0x118103, 0xc81020, 0x100f04,
+0xc80021, 0x100f11, 0xc81048, 0x14bffff,
+0x1c521a1, 0x100f03, 0xc81020, 0xc81448,
+0x8e2202, 0x118208, 0x8e2242, 0x110306,
+0x1377fff, 0x1c80010, 0xc80020, 0x370a20,
+0x100f02, 0xc80022, 0x0, 0x70000,
+0xc80400, 0xc80020, 0xd40524, 0x118104,
+0x362222, 0x370020, 0x100f02, 0xc80021,
+0x0, 0x70000, 0x1580000, 0x118bb17,
+0x0, 0x37f817, 0x37fb1f, 0x37fd3f,
+0x37ff5f, 0x37f90f, 0xc80428, 0xc80020,
+0x1580011, 0x1188310, 0x1020001, 0x1c03c73,
+0x36f90f, 0xc80428, 0xc80020, 0x1580031,
+0x1188310, 0x1020001, 0x1c03c73, 0x36f90f,
+0xc80425, 0xc80020, 0x158005a, 0x1988310,
+0x1020001, 0x1c03c73, 0x36f90f, 0xc80425,
+0xc80020, 0x158005d, 0x1d88310, 0x1020001,
+0x1c03c73, 0x36f90f, 0xc80425, 0xc80020,
+0x158005c, 0x1d88310, 0x1020001, 0x1c03c73,
+0x36f90f, 0xc80020, 0x1620008, 0x181302,
+0x1580051, 0x1188310, 0x1020001, 0x1c03c73,
+0x36f90f, 0x0, 0x360800, 0xb00000,
+0x11817c, 0x36f90f, 0xc80020, 0x1620008,
+0x181302, 0x7d1040, 0x16210d5, 0xd8a314,
+0x1621105, 0xd8b316, 0x760000, 0x158000c,
+0x1588312, 0xc82014, 0x1377fff, 0x1c98116,
+0x1620008, 0x180b01, 0x1377fff, 0x1c88110,
+0x1620008, 0x181302, 0x10c8000, 0x40947d,
+0xc82014, 0x370312, 0x7d1040, 0x370532,
+0x760000, 0x1377fff, 0x1c98116, 0x1377fff,
+0x1c88110, 0x1377fff, 0x1c94012, 0x1620008,
+0x181302, 0x7d1040, 0xc82014, 0x370312,
+0x760000, 0x370532, 0x1377fff, 0x1c98116,
+0x1377fff, 0x1c94012, 0x1377fff, 0x1c88110,
+0x1580010, 0x188316, 0xc8003d, 0x370312,
+0x370532, 0x1377fff, 0x1c94012, 0x1621cc9,
+0x189b13, 0x36f92f, 0x158000f, 0x1d89312,
+0x360143, 0x370342, 0x36f90f, 0x1580010,
+0xd88314, 0x158005d, 0x1d88311, 0x360303,
+0x36f93f, 0x370304, 0x158005c, 0x1d89b13,
+0x36f90f, 0xc82a10, 0x158005c, 0x588310,
+0x11b8008, 0x1116d, 0x370512, 0xc82415,
+0x370534, 0x11b0008, 0x1172a, 0x1020001,
+0x1c0b9e8, 0xc82015, 0xc80020, 0x158005c,
+0x588310, 0x0, 0x360420, 0x360100,
+0x1020001, 0x1c06aa0, 0xc82015, 0xc8003d,
+0x11b0008, 0x11728, 0x158005c, 0x1188310,
+0x1377fff, 0x1c93692, 0x1020001, 0x1c0b9e8,
+0xc82015, 0xc80020, 0x158005c, 0x1188310,
+0x0, 0x360420, 0x360100, 0x1020001,
+0x1c06aa0, 0xc82015, 0x1620008, 0x180300,
+0x1580051, 0x1188312, 0x1580010, 0x1d88310,
+0x0, 0x370000, 0x370520, 0x100f6b,
+0x16210d5, 0xd88310, 0x1621105, 0xd8a314,
+0xc80420, 0x1580018, 0x188316, 0x1620008,
+0x180300, 0x7d0002, 0x1580018, 0x18a311,
+0x36f92f, 0xc82016, 0x760402, 0xc82811,
+0x158000b, 0x1d89312, 0x1377fff, 0x1c98010,
+0x1620008, 0x180b01, 0x1377fff, 0x1ca8014,
+0x1620008, 0x180300, 0x10c8000, 0x4094fe,
+0xc82811, 0xc82016, 0x370332, 0x7d0002,
+0x370552, 0x760402, 0x1377fff, 0x1c94012,
+0x1377fff, 0x1c98010, 0x1377fff, 0x1ca8014,
+0x1620008, 0x180300, 0x7d0002, 0xc82016,
+0xc82811, 0x370332, 0x760402, 0x370552,
+0x1377fff, 0x1c94012, 0x1377fff, 0x1c98010,
+0x1377fff, 0x1ca8014, 0x162000e, 0x580300,
+0x370332, 0x370552, 0x1377fff, 0x1c94012,
+0x0, 0x36f92f, 0x158000e, 0x589316,
+0x0, 0x370306, 0xc82012, 0x370546,
+0x158000e, 0x1d88312, 0x1621cc7, 0x198a314,
+0xc82c10, 0x1377fff, 0x1c84094, 0x158005a,
+0x198b316, 0x370342, 0x36f94f, 0xc82214,
+0x158000f, 0xd8a314, 0x158005b, 0x988b11,
+0x370304, 0x36f90f, 0x370562, 0x370514,
+0x158005b, 0x1988310, 0x36f92f, 0x0,
+0x11b0008, 0x1172a, 0x1580007, 0x1989312,
+0x1020001, 0x1c0b9e8, 0x36f90f, 0xc80020,
+0x11b0000, 0x5c028, 0x11b0008, 0x5bd08,
+0x1020001, 0x1c06aa0, 0x36f90f, 0xc82410,
+0x158000b, 0x1d88310, 0xc82812, 0x1580011,
+0x1189312, 0x1580031, 0x118a314, 0x10c8000,
+0x1009554, 0x370010, 0x370720, 0x1580008,
+0x189312, 0x370940, 0x1580008, 0x18a314,
+0x1377fff, 0x1c84010, 0x0, 0x36ff5f,
+0x36fd3f, 0x36fb1f, 0x36f817, 0x1581fff,
+0x118bb17, 0x70000, 0x1580001, 0x58bb17,
+0x0, 0x37ee17, 0x37fb1f, 0x37fd3f,
+0x37ff5f, 0x37ef0f, 0xc80c20, 0x360820,
+0x8e20c2, 0x118172, 0x1638846, 0x1181302,
+0x8e2040, 0x11020c, 0x1cb8000, 0x618c,
+0x1033e60, 0x990b3e, 0x890040, 0x1020001,
+0x1c08e17, 0x1646160, 0x1308691, 0x893008,
+0x100f09, 0x890040, 0x14bffff, 0x1c6203e,
+0x1020001, 0x1c08e17, 0xc80400, 0xc80048,
+0x890040, 0x36ef0f, 0x16210ab, 0xd89312,
+0xc81020, 0x1621ca9, 0x1d8a314, 0x1621ca9,
+0x118b316, 0x11b0008, 0x11708, 0x762814,
+0x762c16, 0x37f12f, 0x1580015, 0x1d88311,
+0x16210a3, 0xd89312, 0x158001d, 0x1d88310,
+0x37f31f, 0x360114, 0x37f51f, 0x360344,
+0x37f74f, 0x360146, 0x360366, 0x10c8008,
+0x95bd, 0x1467fff, 0x1c70069, 0x36f75f,
+0x762814, 0x3600aa, 0x1377fff, 0x1ca8415,
+0x762412, 0x36f11f, 0x1407fff, 0x1cea6ae,
+0x36f53f, 0x1377fff, 0x1c88411, 0x37f95f,
+0x36001e, 0x1377fff, 0x1c98413, 0x762c16,
+0x36f35f, 0x1407fff, 0x1cea21a, 0x13777a1,
+0x18a8415, 0x761008, 0x3600a9, 0x1467fff,
+0x1c70067, 0x36f91f, 0x1407fff, 0x1cea6ae,
+0x360019, 0x1407fff, 0x1cea21a, 0x3700ad,
+0x36ef0f, 0x1621cca, 0x118a314, 0x11b0008,
+0x11728, 0x158000b, 0x1d88310, 0x158001d,
+0x1d89316, 0xc82414, 0x762412, 0x370360,
+0x36ef6f, 0x0, 0x11b0008, 0x1176e,
+0x1580015, 0x1d8b316, 0x370560, 0x36ef0f,
+0x1467fff, 0x1c00064, 0x360084, 0x809060,
+0x3602a2, 0x809420, 0x371c00, 0x36ff5f,
+0x36fd3f, 0x36fb1f, 0x36ee17, 0x1581ffe,
+0x1d8bb17, 0x70000, 0x1580000, 0xd8bb17,
+0x0, 0x37fc17, 0x37fc9f, 0x37fe37,
+0x37ff1f, 0xc82210, 0x158000a, 0x988b12,
+0x360411, 0x1e00000, 0x3e, 0x99999a,
+0x19030c, 0xc80001, 0x1020001, 0x1c08e17,
+0xc80400, 0xc80048, 0x8e2002, 0x118302,
+0xc80400, 0x360801, 0xb00000, 0x118108,
+0xc80048, 0x370022, 0x890040, 0x1467fff,
+0x1c04380, 0x370202, 0x100f3b, 0xc81048,
+0x8e2200, 0x118238, 0xd01449, 0x8e2240,
+0x110335, 0x1e08000, 0x3e, 0x99999a,
+0x19030a, 0x8e2241, 0x110304, 0x11b0000,
+0xba89, 0x100f24, 0x1e08000, 0x3e,
+0x199999a, 0x190300, 0x8e2001, 0x11030c,
+0x890241, 0xc9180a, 0x11b0000, 0xba89,
+0x1020001, 0x1c08e17, 0x11b0000, 0xbca9,
+0x89520a, 0x80d408, 0x100f13, 0x1e08000,
+0x3f, 0x333334, 0x19030a, 0x8e2241,
+0x11020d, 0x890001, 0x1e00000, 0x3e,
+0x99999c, 0x19030c, 0x11b0000, 0xbc69,
+0x1020001, 0x1c08e17, 0x8940c8, 0x80d006,
+0x100f01, 0x8c0202, 0x372201, 0x370002,
+0x144ffff, 0x1c06248, 0x1467fff, 0x1c04380,
+0x370202, 0x158005e, 0x1d88b10, 0x1e09fa6,
+0xcccd3f, 0x1000000, 0x184303, 0x1e09f45,
+0x3d713f, 0x666666, 0x18330a, 0x370422,
+0x1e08000, 0x3f, 0x6a0902, 0x18030e,
+0x891843, 0x1467fff, 0x1c4c383, 0x370692,
+0x370822, 0x370a32, 0x370c22, 0x371082,
+0x370ea2, 0x371262, 0x3714e2, 0x360c22,
+0x1020001, 0x1c0c689, 0x1e08000, 0x3e,
+0x99999a, 0x190300, 0x8e2001, 0x110304,
+0x14bffff, 0x1c020be, 0x100f16, 0x1e08000,
+0x3f, 0x333334, 0x190302, 0x8e2041,
+0x118204, 0x1638846, 0x1180300, 0x100f0d,
+0x1e00000, 0x3e, 0x199999c, 0x19030c,
+0x890001, 0x1020001, 0x1c08e17, 0x1cb8000,
+0x610c, 0x10b3e60, 0x99033e, 0x808408,
+0xc82011, 0x1020001, 0x1c0955c, 0x36ff1f,
+0x36fe37, 0x36fc17, 0x36fc9f, 0x1581fff,
+0x158bb17, 0x70000, 0x1580000, 0xd8bb17,
+0x0, 0x37fb1f, 0x37fd3f, 0x37ff5f,
+0xc82210, 0x360600, 0x14b7fff, 0x1c02000,
+0x1020001, 0x1c03e42, 0xc82a10, 0x360801,
+0x14b7fff, 0x1c02000, 0x1020001, 0x1c03e42,
+0xc82610, 0x1580002, 0x988b10, 0x1620008,
+0x181302, 0xc80020, 0x1020001, 0x1c03c73,
+0x1580002, 0x988b10, 0x1580003, 0x988b12,
+0xc80048, 0xc80421, 0x370000, 0x370202,
+0x360083, 0xe91d88, 0xce1048, 0x110103,
+0x374801, 0x100f07, 0x1e08000, 0x3f,
+0x6a77de, 0x190300, 0x370400, 0x370402,
+0x360003, 0xc80421, 0xe91b00, 0xce0040,
+0x110105, 0xc80048, 0x376c01, 0x377e01,
+0x100f04, 0xc80048, 0x372c01, 0x373e01,
+0x360005, 0xc80421, 0xe91700, 0xce0040,
+0x11011c, 0x360003, 0xc80421, 0xe91708,
+0xce1048, 0x110105, 0xc80048, 0x11b8000,
+0x9009, 0x100f13, 0xe91b00, 0xc80421,
+0xce0040, 0x110109, 0x1e08000, 0x3f,
+0x6a77de, 0x190300, 0x377001, 0x11b8000,
+0x8009, 0x100f07, 0x1e08000, 0x3f,
+0x6a77de, 0x190300, 0x373001, 0x374001,
+0x360005, 0xc80421, 0xe91900, 0xce0040,
+0x110118, 0x360003, 0xc80421, 0xe91908,
+0xce1048, 0x110107, 0xc80048, 0x11b8000,
+0x9009, 0x11b8000, 0xa209, 0x100f0d,
+0xe91b00, 0xc80421, 0xce0040, 0x110106,
+0xc80048, 0x377001, 0x11b8000, 0x8209,
+0x100f04, 0xc80048, 0x373001, 0x374201,
+0xc80048, 0x375a01, 0x36ff5f, 0x36fd3f,
+0x36fb1f, 0x1581fff, 0x158bb17, 0x70000,
+0x762e17, 0x0, 0x37ff1f, 0xc82210,
+0x360a00, 0x360020, 0x8e2002, 0x110102,
+0x370000, 0xc82011, 0x360c01, 0x762010,
+0x0, 0x360020, 0x8e2002, 0x110102,
+0x370000, 0x1377fff, 0x1c82191, 0x361021,
+0x360000, 0x8e2040, 0x11010e, 0x14b7fff,
+0x1c02002, 0x370020, 0x1020001, 0x1c03e42,
+0x360000, 0xc82011, 0xc80421, 0xe91c00,
+0xce0040, 0x371e01, 0x1020001, 0x1c09680,
+0x1377fff, 0x1c82211, 0x361201, 0x360020,
+0x8e2002, 0x11010b, 0x370000, 0xc82011,
+0x1020001, 0x1c09680, 0xc82011, 0x1020001,
+0x1c09424, 0xc82011, 0x1020001, 0x1c095e0,
+0x1377fff, 0x1c82111, 0x360e01, 0x360020,
+0x8e2002, 0x110105, 0x370000, 0xc82011,
+0x1020001, 0x1c095e0, 0x36ff1f, 0x772e17,
+0x70000, 0x1580000, 0xd8bb17, 0x0,
+0x37fa17, 0x37fb1f, 0x37fc37, 0x37fd3f,
+0x37ff5f, 0xc82210, 0x362100, 0x1e08000,
+0x3f, 0x6a77de, 0x190302, 0x361631,
+0x360d20, 0x11b0008, 0xfbb09, 0x1580008,
+0x188313, 0xc82a10, 0xc82013, 0x11b0000,
+0xae89, 0x11b0000, 0xac09, 0x8c0848,
+0x1466130, 0x1000100, 0x1020001, 0x1c08cc6,
+0x158000e, 0x1d88b10, 0x1646130, 0x312627,
+0x360560, 0x360340, 0xc82015, 0x1020001,
+0x1c08d20, 0x158000f, 0xd88b10, 0x1646130,
+0x31262b, 0x360560, 0x360340, 0xc82015,
+0x1020001, 0x1c08d20, 0x158005b, 0x1988b14,
+0x1646130, 0x312627, 0xc82013, 0x1020001,
+0x1c0b4b5, 0x362111, 0xc82015, 0xc82c13,
+0xc80020, 0x361121, 0x360d41, 0x360f11,
+0xd40034, 0x11841d, 0x1e09f81, 0x8f5c3f,
+0x666666, 0x184302, 0x13765a9, 0x1898012,
+0x1467fff, 0x1c30160, 0x760000, 0x1407fff,
+0x1cea1a6, 0x3600e6, 0x1447fff, 0x1c30562,
+0x762211, 0x1407fff, 0x1ce68e6, 0x1007561,
+0x1800000, 0x1447fff, 0x1c50566, 0x360066,
+0x142ffff, 0x1cea86a, 0x10075ad, 0x1800000,
+0xd32060, 0x1005e9, 0x36ff5f, 0x36fd3f,
+0x36fb1f, 0x36fc37, 0x36fa17, 0x1581fff,
+0x158bb17, 0x70000, 0x1580001, 0x158bb17,
+0x0, 0x37fe17, 0x37ed1f, 0x37ef3f,
+0x37f15f, 0xc82210, 0xc82612, 0x1581fff,
+0xd8bb12, 0x1581ffe, 0xd8bb14, 0x1e09f9a,
+0x13bef3f, 0x1000000, 0x181300, 0x1581fff,
+0xd8bb10, 0x1581fff, 0xd8bb16, 0x37e72f,
+0x1581fff, 0xd8bb12, 0x37e92f, 0x1581ffe,
+0x1d8bb12, 0x37eb4f, 0x1621caa, 0x98a314,
+0x370620, 0x361611, 0xc82a12, 0xc82014,
+0x1c0403, 0x1006521, 0x1800000, 0x100752b,
+0x1800000, 0x37f607, 0x36e70f, 0x0,
+0x370400, 0x36e90f, 0x0, 0x370200,
+0x36eb0f, 0xc82810, 0xc82416, 0x1c0403,
+0x1006505, 0x1800000, 0x1007509, 0x1800000,
+0x360801, 0x14b7fff, 0x1c02000, 0x1020001,
+0x1c03e42, 0xc82a10, 0x360000, 0xe81700,
+0xed1b00, 0xd40504, 0x11833f, 0x362121,
+0xc80001, 0x360d03, 0x360122, 0x1020001,
+0x1c03c84, 0x362121, 0xc80001, 0x360f03,
+0x360322, 0x1020001, 0x1c03c84, 0x362121,
+0xc80001, 0x361103, 0x360522, 0x1020001,
+0x1c03c84, 0x362121, 0xc80001, 0x361503,
+0x360922, 0x1020001, 0x1c03c84, 0x362121,
+0xc80001, 0x361703, 0x360b22, 0x1020001,
+0x1c03c84, 0x361401, 0xd40004, 0x11815e,
+0x360005, 0xc80421, 0xe91708, 0xce1048,
+0x110108, 0x362121, 0xc80001, 0x361903,
+0x360d22, 0x1020001, 0x1c03c84, 0x100f52,
+0xe91900, 0xc80421, 0xce0040, 0x11014e,
+0x362121, 0xc80001, 0x361903, 0x360f22,
+0x1020001, 0x1c03c84, 0x362121, 0xc80001,
+0x361b03, 0x361122, 0x1020001, 0x1c03c84,
+0x100f41, 0x362121, 0xc80001, 0x361103,
+0x360522, 0x1020001, 0x1c03c84, 0x362121,
+0x1581ffe, 0x1d8bb10, 0x360122, 0x37ef27,
+0x362121, 0x0, 0x360922, 0x370320,
+0x361401, 0xd40004, 0x11810c, 0x362121,
+0x1581ffe, 0x1d8bb14, 0x1581ffe, 0x1d8bb10,
+0x360f22, 0x370524, 0x362121, 0x0,
+0x360d22, 0x370720, 0x360d03, 0x1581ffe,
+0x1d8bb12, 0x1646110, 0x1300649, 0x1581ffe,
+0xd8bb14, 0x1020001, 0x1c08cce, 0x362121,
+0x1581ffe, 0x1d8bb10, 0x360322, 0x37ef27,
+0x362121, 0x0, 0x360b22, 0x370320,
+0x361401, 0xd40004, 0x118106, 0x362101,
+0x1581ffe, 0x1d8bb12, 0x361100, 0x370502,
+0x1581ffe, 0xd8bb14, 0x1581ffe, 0x1d8bb12,
+0x1646110, 0x1300649, 0x360f03, 0x1020001,
+0x1c08cce, 0x361e01, 0xd40004, 0x11010a,
+0x361303, 0x16a0000, 0x188304, 0x110106,
+0x362121, 0xc80001, 0x360722, 0x1020001,
+0x1c03c84, 0x36f15f, 0x36ef3f, 0x36ed1f,
+0x36fe17, 0x1581ffe, 0xd8bb17, 0x70000,
+0x1580000, 0x118bb17, 0x0, 0x37f817,
+0x37fb1f, 0x37fd3f, 0x37ff5f, 0xc82210,
+0xc82a12, 0xc82614, 0x360801, 0x14b7fff,
+0x1c02000, 0x361611, 0x1020001, 0x1c03e42,
+0x1580002, 0x988b14, 0x1646110, 0x1312627,
+0x37f90f, 0xc80025, 0x360105, 0x1020001,
+0x1c08cce, 0x360305, 0x1646110, 0x1312627,
+0xc80025, 0x1580003, 0x988b14, 0x1020001,
+0x1c08cce, 0x36f90f, 0xc80421, 0x360000,
+0xe91d00, 0xce0040, 0x110109, 0x360505,
+0x1646110, 0x1312627, 0xc80025, 0x1580004,
+0x988b14, 0x1020001, 0x1c08cce, 0x36f90f,
+0xc80421, 0x360000, 0xe91b00, 0xce0040,
+0x110111, 0x1580006, 0x988b14, 0x1646110,
+0x1312627, 0xc80025, 0x360905, 0x1020001,
+0x1c08cce, 0x1580007, 0x988b14, 0x1646110,
+0x1312627, 0xc80025, 0x360b05, 0x1020001,
+0x1c08cce, 0x361401, 0xd40004, 0x118125,
+0x36f90f, 0xc80421, 0x360000, 0xe91700,
+0xce0040, 0x110109, 0x360d05, 0x1646110,
+0x1312627, 0xc80025, 0x1580008, 0x988b14,
+0x1020001, 0x1c08cce, 0x36f90f, 0xc80421,
+0x360000, 0xe91900, 0xce0040, 0x110111,
+0x1580008, 0x988b14, 0x1646110, 0x1312627,
+0xc80025, 0x360d05, 0x1020001, 0x1c08cce,
+0x1580009, 0x988b14, 0x1646110, 0x1312627,
+0xc80025, 0x360f05, 0x1020001, 0x1c08cce,
+0x36ff5f, 0x36fd3f, 0x36fb1f, 0x36f817,
+0x1581fff, 0x118bb17, 0x70000, 0x1580000,
+0x118bb17, 0x0, 0x37f817, 0x37fb1f,
+0x37fd3f, 0x37ff5f, 0xc82a10, 0x37f92f,
+0x362105, 0xc80420, 0x11b0008, 0xfbb3d,
+0x1580008, 0x189b12, 0x361615, 0x360360,
+0xc80001, 0x360140, 0xc82013, 0x1020001,
+0x1c0cb13, 0x158000b, 0x1d8ab10, 0x1580008,
+0x189b16, 0x1646110, 0x314627, 0xc82210,
+0x36f90f, 0x11b0000, 0xa68d, 0x11b0000,
+0xa42d, 0x360f20, 0x360d00, 0x1020001,
+0x1c0c91d, 0x36f90f, 0x1646110, 0x302641,
+0x360d40, 0x360f60, 0xc82014, 0xc82416,
+0x1020001, 0x1c0cb13, 0x362105, 0x1580008,
+0x189b12, 0x1646110, 0x302641, 0x360b60,
+0x360940, 0xc82013, 0x1020001, 0x1c0cb13,
+0x1580008, 0x189b16, 0x1646110, 0x314627,
+0x158000c, 0x158ab10, 0xc82210, 0xc82416,
+0xc82014, 0x11b0000, 0xaa8d, 0x11b0000,
+0xa82d, 0x1020001, 0x1c0c91d, 0x36f90f,
+0x1646110, 0x314627, 0xc80421, 0x1580008,
+0x189b16, 0x360f20, 0x360d00, 0x1020001,
+0x1c0cb13, 0x361405, 0xd40004, 0x118147,
+0xc82015, 0x1020001, 0x1c0973f, 0x1646110,
+0x314627, 0x1580008, 0x189b16, 0xc80420,
+0xc82014, 0xc82416, 0x1020001, 0x1c0cb13,
+0x1580008, 0x189b16, 0x1646110, 0x314627,
+0x158000d, 0xd8ab10, 0xc82210, 0xc82416,
+0xc82014, 0x11b0000, 0xaa8d, 0x11b0000,
+0xa82d, 0x1020001, 0x1c0c91d, 0x36f90f,
+0x1580008, 0x189b16, 0x1646110, 0x314627,
+0xc80421, 0x360f20, 0x360d00, 0x1020001,
+0x1c0cb13, 0x362105, 0x1580008, 0x189b12,
+0x1646110, 0x302641, 0x361560, 0x361340,
+0xc82013, 0x1020001, 0x1c0cb13, 0x1580008,
+0x189b16, 0x1646110, 0x314627, 0x158000e,
+0x58ab10, 0xc81020, 0xc80448, 0xc82210,
+0xc82416, 0xc82014, 0x1020001, 0x1c0c91d,
+0x36f90f, 0x1580008, 0x189b16, 0x1646110,
+0x314627, 0xc80421, 0x360f20, 0x360d00,
+0x1020001, 0x1c0cb13, 0x362125, 0x36f90f,
+0xc80001, 0x360522, 0x361100, 0x1020001,
+0x1c03c84, 0x361e05, 0xd40004, 0x11010c,
+0x36f90f, 0x0, 0x361300, 0x16a0000,
+0x188304, 0x110106, 0x362125, 0xc80001,
+0x360722, 0x1020001, 0x1c03c84, 0x36ff5f,
+0x36fd3f, 0x36fb1f, 0x36f817, 0x1581fff,
+0x118bb17, 0x70000, 0x1580000, 0x1d8bb17,
+0x0, 0x37fe17, 0x37fb1f, 0x37fd3f,
+0x37ff5f, 0xc82610, 0x37f32f, 0x1581fff,
+0x58bb12, 0x1621caa, 0x198a314, 0x158005e,
+0x1d89b10, 0x361613, 0x11b0008, 0xfbb5b,
+0xc82212, 0xc82c14, 0x1c0303, 0x100650d,
+0x1800000, 0x1007503, 0x1800000, 0x36f32f,
+0x1020001, 0x1c0c5b8, 0x36f30f, 0x362143,
+0x1646110, 0x302641, 0x360f20, 0x360364,
+0x360d00, 0x360144, 0x1020001, 0x1c0cb13,
+0x158000b, 0x1d89b10, 0xc80001, 0xc82210,
+0x36f30f, 0x11b0000, 0xa68b, 0x11b0000,
+0xa42b, 0x360d40, 0x360f60, 0xc82014,
+0xc82416, 0x1020001, 0x1c0c91d, 0x36f30f,
+0x1646110, 0x302641, 0x360d40, 0x360f60,
+0xc82014, 0xc82416, 0x1020001, 0x1c0cb13,
+0x36f30f, 0x1581fff, 0x118bb16, 0x1646110,
+0x1300645, 0x1377fff, 0x1c84010, 0x1581fff,
+0x58bb14, 0x1581fff, 0x118bb12, 0x360110,
+0x370356, 0x37f917, 0x360100, 0x1020001,
+0x1c088be, 0x36f30f, 0x1581fff, 0x118bb12,
+0x1646110, 0x1300645, 0x1377fff, 0x1c83790,
+0x1580008, 0x18ab16, 0x1581fff, 0x58bb14,
+0x370362, 0x360110, 0x1581fff, 0x118bb12,
+0x37f917, 0x360100, 0x1020001, 0x1c088be,
+0x362103, 0x1580008, 0x18ab12, 0x1646110,
+0x302641, 0x360b60, 0x360940, 0xc82015,
+0x1020001, 0x1c0cb13, 0x1580008, 0x18ab16,
+0x1646110, 0x31462b, 0x158000c, 0x1589b10,
+0xc82210, 0xc82416, 0xc82014, 0x11b0000,
+0xaa8b, 0x11b0000, 0xa82b, 0x1020001,
+0x1c0c91d, 0x36f30f, 0x1646110, 0x31462b,
+0xc80421, 0x1580008, 0x18ab16, 0x360f20,
+0x360d00, 0x1020001, 0x1c0cb13, 0x361403,
+0xd40004, 0x1010010, 0x409b02, 0x362103,
+0x1580008, 0x18ab12, 0x1646110, 0x302641,
+0x361160, 0x360f40, 0xc82015, 0x1020001,
+0x1c0cb13, 0x1580008, 0x18ab16, 0x1646110,
+0x31462b, 0x158000d, 0xd89b10, 0xc82210,
+0xc82416, 0xc82014, 0x11b0000, 0xaa8b,
+0x11b0000, 0xa82b, 0x1020001, 0x1c0c91d,
+0x36f30f, 0x1580008, 0x18ab16, 0x1646110,
+0x31462b, 0xc80421, 0x360f20, 0x360d00,
+0x1020001, 0x1c0cb13, 0x158000e, 0x589b10,
+0xc80001, 0xc82210, 0x362123, 0x36f30f,
+0x11b0000, 0xae8b, 0x360d62, 0x360542,
+0xc82415, 0x11b0000, 0xac2b, 0x361100,
+0x1020001, 0x1c0c91d, 0x36f30f, 0x1581fff,
+0x58bb16, 0x1e08000, 0x23f, 0x6a77de,
+0x180302, 0x1377fff, 0x1c84010, 0x1581fff,
+0x118bb12, 0x1581fff, 0x58bb14, 0x370226,
+0x360110, 0xc80401, 0x370352, 0x1581fff,
+0x118bb12, 0x37f917, 0x360100, 0x1020001,
+0x1c088be, 0x36f30f, 0xc80401, 0xc80022,
+0x1377fff, 0x1c83790, 0x1581fff, 0x58bb14,
+0x360120, 0x37f927, 0x1581fff, 0x118bb12,
+0x360100, 0x1020001, 0x1c088be, 0x362103,
+0x158005c, 0x589b14, 0xc80001, 0x361320,
+0xc82015, 0x1020001, 0x1c0b4b5, 0x362123,
+0x158005c, 0x1189b14, 0xc80001, 0x1580008,
+0x18ab10, 0x361522, 0x1020001, 0x1c0b4b5,
+0x362123, 0x158000f, 0x1d89b10, 0xc80001,
+0x361322, 0x360560, 0x360340, 0xc82012,
+0x1020001, 0x1c08d20, 0x158000f, 0x1d89b12,
+0xc80001, 0x362103, 0x360342, 0x360562,
+0x361520, 0x1377fff, 0x1cb2216, 0xc82012,
+0x1020001, 0x1c08d20, 0x1580010, 0xd89b10,
+0x1646110, 0x31262b, 0x360560, 0x360340,
+0xc82012, 0x1020001, 0x1c08d20, 0x1580010,
+0xd89b10, 0x1580008, 0x18ab12, 0xc80001,
+0x360560, 0x360340, 0xc82012, 0x1377fff,
+0x1cb2216, 0x1020001, 0x1c08d20, 0x158000b,
+0x589b16, 0x1581fff, 0x58bb14, 0xc80023,
+0x36f30f, 0x1581fff, 0x58bb12, 0x1377fff,
+0x1c84010, 0x360026, 0x370224, 0x1581fff,
+0x118bb14, 0x37f54f, 0x1581fff, 0x118bb14,
+0x11b0000, 0xb42b, 0x1467fff, 0x1c1016c,
+0x1580008, 0x18ab16, 0x370422, 0x1581fff,
+0x58bb12, 0xc80401, 0x37f72f, 0x1581fff,
+0x118bb12, 0x360110, 0x37f917, 0x362113,
+0x0, 0x361311, 0x370564, 0x36f54f,
+0x0, 0x370314, 0x360100, 0x36f74f,
+0x1020001, 0x1c088be, 0x36f30f, 0x1581fff,
+0x118bb14, 0x1646110, 0x1300647, 0x1377fff,
+0x1c83790, 0x1581fff, 0x118bb16, 0x360120,
+0x37f927, 0x1581fff, 0x58bb12, 0x37f92f,
+0x1581fff, 0x118bb12, 0x362113, 0x0,
+0x361511, 0x370556, 0x370314, 0x360100,
+0x36f94f, 0x1020001, 0x1c088be, 0x100f0e,
+0x362123, 0x36f30f, 0xc80001, 0x1580010,
+0x1d89b14, 0x11b0000, 0xae8b, 0x11b0000,
+0xac2b, 0x360522, 0x361100, 0x1020001,
+0x1c0cb47, 0x361e03, 0xd40004, 0x11010c,
+0x36f30f, 0x0, 0x361300, 0x16a0000,
+0x188304, 0x110106, 0x362123, 0xc80001,
+0x360722, 0x1020001, 0x1c03c84, 0x36ff5f,
+0x36fd3f, 0x36fb1f, 0x36fe17, 0x1581fff,
+0x58bb17, 0x70000, 0x1020001, 0x1c097a4,
+0x0, 0x70000, 0x1580000, 0x158bb17,
+0x0, 0x37f817, 0x37f89f, 0x37fa37,
+0x37fb1f, 0x37fd3f, 0x37ff5f, 0xc82a10,
+0xc82212, 0x360805, 0x361635, 0xb00000,
+0x110124, 0x361a05, 0xc80220, 0xd40004,
+0x118446, 0xc80040, 0x7d0001, 0x1377fff,
+0x1c90011, 0x0, 0x363d02, 0x363122,
+0x169ffff, 0x1c21110, 0x110104, 0xc80003,
+0x1020001, 0x1c03c84, 0xc80040, 0x7d0001,
+0x1377fff, 0x1c90011, 0x0, 0x363f02,
+0x363322, 0x169ffff, 0x1c21110, 0x110104,
+0xc80003, 0x1020001, 0x1c03c84, 0x361a05,
+0x760201, 0xd32001, 0x118528, 0x100fe2,
+0x1580003, 0x1988b13, 0x11b0000, 0xa40d,
+0xc81220, 0x361c25, 0x1580003, 0x188b11,
+0x8c0040, 0x11b0000, 0xa68d, 0x361a25,
+0x1c07fff, 0x1fffc00, 0x30165, 0x1584300,
+0xd40024, 0x118415, 0x360121, 0x1646110,
+0x302607, 0x360103, 0x1020001, 0x1c08cc6,
+0x360321, 0x1646130, 0x1300603, 0x360303,
+0x1020001, 0x1c08cc6, 0x1377fff, 0x1c9c013,
+0x1377fff, 0x1c8c011, 0x361a05, 0x761209,
+0xd32009, 0x1005ed, 0x36ff5f, 0x36fd3f,
+0x36fb1f, 0x36fa37, 0x36f817, 0x36f89f,
+0x1581fff, 0xd8bb17, 0x70000, 0x1618000,
+0x58f31c, 0x10d0000, 0x809b91, 0x1c60000,
+0x618d, 0x1eb0060, 0x11bc300, 0x1806298,
+0x75c000, 0x0, 0x0, 0x70000,
+0x1580000, 0x98bb17, 0x0, 0x37fe17,
+0x37ff1f, 0x1646100, 0xb11621, 0x360000,
+0x14b7fff, 0x1c02000, 0xd40204, 0x110153,
+0xd40304, 0x110104, 0xc80048, 0x371c01,
+0x100f50, 0x362c01, 0xc80420, 0x8e2040,
+0x110142, 0xd40014, 0x11011b, 0x14bffff,
+0x1c42001, 0x1c47f00, 0x208000, 0x61,
+0x205308, 0xc91800, 0x890200, 0x900000,
+0x1020001, 0x1c08e17, 0x1e08000, 0x3d,
+0x99999a, 0x190308, 0x8e2200, 0x11830a,
+0x1646120, 0x310623, 0x1020001, 0x1c09ca9,
+0xc82011, 0x1020001, 0x1c09c76, 0x1008001,
+0x1c09c71, 0x362c01, 0xb00000, 0x110123,
+0x14bffff, 0x1c12001, 0x1c47f00, 0x208000,
+0x60, 0xa05302, 0x1e09fbf, 0x3c,
+0x0, 0x185308, 0x8c1202, 0x809402,
+0x372c01, 0x361001, 0x14bffff, 0x1c12000,
+0x1c47f00, 0x208000, 0x60, 0xa05302,
+0x362c01, 0xc91802, 0x1020001, 0x1c08e17,
+0x371c01, 0x14bffff, 0x1c02001, 0x1c47f00,
+0x208000, 0x60, 0x205300, 0x362c21,
+0x890002, 0x100f0c, 0x14bffff, 0x1c02001,
+0x1c47f00, 0x208000, 0x60, 0x205300,
+0x372c01, 0x100f7e, 0x360401, 0x371c01,
+0xc80020, 0xd40014, 0x118477, 0x900000,
+0x1477fff, 0x1c24500, 0x110273, 0xc82011,
+0x361c01, 0x1020001, 0x1c09ca9, 0xd40004,
+0x11016d, 0x362001, 0xd40104, 0x110117,
+0xd40204, 0x110125, 0xc82011, 0xc80021,
+0x372001, 0x130f76, 0xc80020, 0x14bffff,
+0x1c12001, 0x1c47f00, 0x208000, 0x60,
+0xa05302, 0x372401, 0x361c01, 0x371e01,
+0x362c01, 0x880040, 0x1467fff, 0x1c04380,
+0x372c01, 0x100f56, 0x14bffff, 0x1c12001,
+0x1c47f00, 0x208000, 0x60, 0xa05302,
+0x1e09f95, 0x1851f3e, 0x151eb86, 0x185308,
+0xc80022, 0x372001, 0x8c0202, 0x362c21,
+0x809420, 0x372c01, 0x1580003, 0x988b10,
+0x362f21, 0x360160, 0x363141, 0x360300,
+0x1387fff, 0x1c01212, 0x1387fff, 0x1c11016,
+0x700040, 0x110203, 0x363221, 0x6e0040,
+0x361021, 0x14bffff, 0x1c12002, 0x1c47f00,
+0x208000, 0x60, 0xa05302, 0x361e81,
+0x8c1202, 0x14b7fff, 0x1c12002, 0xd32040,
+0x110204, 0xc82011, 0x130f2e, 0x100f28,
+0x1e09b93, 0x1c5ac39, 0x13a92a4, 0x185308,
+0x1e0a090, 0x3a, 0x10624de, 0x181306,
+0x3622e1, 0x362411, 0x7072c0, 0x6e72c1,
+0x3724e1, 0x372201, 0x362401, 0x3626e1,
+0x14bffff, 0x1c02000, 0x362a11, 0x8c4200,
+0x14bffff, 0x1c7200e, 0x80d4e8, 0x890820,
+0x361ca1, 0x80cc18, 0x88420a, 0x371e81,
+0x8e2048, 0x118302, 0x371e21, 0x362621,
+0x362481, 0x6e1202, 0x372621, 0x372a01,
+0x100f03, 0xc80020, 0x372001, 0x36ff1f,
+0x36fe17, 0x1581fff, 0x198bb17, 0x70000,
+0xc80020, 0xc80420, 0x372200, 0x372400,
+0x372c20, 0x372000, 0x371c20, 0x371e20,
+0x372a20, 0x372600, 0x70000, 0x361000,
+0x361c20, 0x14bffff, 0x1c02000, 0x1c47f00,
+0x208000, 0x60, 0x205300, 0x8c0040,
+0x360620, 0x362f40, 0x14b7fff, 0x1c02000,
+0x14b7fff, 0x1c12002, 0xb00a08, 0x363120,
+0x6e4202, 0x1387fff, 0x1c51114, 0x363200,
+0x6e120a, 0xd32002, 0x118302, 0x701002,
+0x1580003, 0x988312, 0x704200, 0x372280,
+0x10c8000, 0x1809ca7, 0x360302, 0x1377fff,
+0x1c80110, 0x370102, 0x370402, 0x1377fff,
+0x1c92192, 0x0, 0x70000, 0x1c98000,
+0x604c, 0x1032161, 0x198347, 0x8e2200,
+0x110203, 0xc80420, 0x100f16, 0x1e08000,
+0x3f, 0x1255556, 0x190308, 0x8e2200,
+0x110205, 0x1621d33, 0x189312, 0x371520,
+0x100f0c, 0x1e08000, 0x40, 0xaaaa8,
+0x190308, 0x8e2200, 0x110205, 0x1621cd2,
+0x1d89312, 0x371520, 0x100f02, 0xc80420,
+0xc80002, 0x0, 0x70000, 0xc82810,
+0x1d0003, 0x10067a5, 0x1800000, 0x10077a9,
+0x1800000, 0x70000, 0x1580000, 0x98bb17,
+0x0, 0x37fd1f, 0x37ff3f, 0xc82610,
+0xc82214, 0xc82012, 0x360001, 0x130f09,
+0xc82013, 0x360201, 0x130f06, 0x36ff3f,
+0x36fd1f, 0x1581fff, 0x198bb17, 0x70000,
+0x1580000, 0x118bb17, 0x0, 0x37fa17,
+0x37f89f, 0x37fc37, 0x37fabf, 0x37fe77,
+0x37fcff, 0x37ff1f, 0xc82210, 0x1020001,
+0x1c03e42, 0x1581fff, 0x118bb12, 0xc80e21,
+0xc80021, 0xc80421, 0xc81021, 0xc81421,
+0xc80c21, 0xc82c12, 0xc82810, 0x1c0103,
+0x10065e9, 0x1800000, 0x10075ed, 0x1800000,
+0x36f8b7, 0xe91fbf, 0xe91ebe, 0xe91db1,
+0xe91cb3, 0xe91bb9, 0xe91abb, 0xce38ef,
+0xce000e, 0xce1041, 0xce4203, 0xce5249,
+0xce30cb, 0x370071, 0x370201, 0x370421,
+0x370681, 0x3708a1, 0x370a61, 0x36ff1f,
+0x36fe77, 0x36fc37, 0x36fcff, 0x36fa17,
+0x36fabf, 0x36f89f, 0x1581fff, 0x118bb17,
+0x70000, 0x1580000, 0x118bb17, 0x0,
+0x37fb1f, 0x37fd3f, 0x37ff5f, 0x1580001,
+0x588314, 0x1377fff, 0x1c8c010, 0x1377fff,
+0x1c9c016, 0xc80022, 0x360326, 0x37f94f,
+0x1377fff, 0x1ca2196, 0x370120, 0xc82a11,
+0xc82414, 0x1c0303, 0x1006525, 0x1800000,
+0x100752b, 0x1800000, 0x36f92f, 0xc82212,
+0xc82813, 0x1c0303, 0x1006529, 0x1800000,
+0x1007523, 0x1800000, 0x360026, 0x370220,
+0x360120, 0x360220, 0x360282, 0x7d0008,
+0x1020001, 0x1c08de0, 0x370400, 0x360526,
+0x370720, 0x360526, 0x370920, 0x360200,
+0xe90200, 0x370a00, 0x36ff5f, 0x36fd3f,
+0x36fb1f, 0x1581fff, 0x118bb17, 0x70000,
+0x1580002, 0xd8bb17, 0x0, 0x37dd1f,
+0x37df3f, 0x37e15f, 0xc82210, 0xc82012,
+0x37db2f, 0x1581ffd, 0x198bb12, 0x1581ffd,
+0x198bb13, 0x360201, 0x360100, 0xe90100,
+0x370302, 0x37dd07, 0x1020001, 0x1c08a35,
+0x1581ffe, 0x58bb12, 0x370403, 0x360221,
+0x36db0f, 0x1581ffe, 0x58bb15, 0xe90120,
+0x361900, 0x370302, 0x37e307, 0x1020001,
+0x1c08a35, 0x370405, 0x1580001, 0x588b12,
+0x1377fff, 0x1c84011, 0x360201, 0x1581ffe,
+0x118bb16, 0xc82812, 0x1c0303, 0x1006529,
+0x1800000, 0x100752d, 0x1800000, 0x1581ffe,
+0x58bb12, 0x1581ffe, 0x1d8bb13, 0xc82810,
+0x1c0303, 0x1006529, 0x1800000, 0x1007527,
+0x1800000, 0x1581ffe, 0x58bb16, 0x1581ffd,
+0x198bb10, 0x1581fff, 0x98bb15, 0xc82812,
+0x1c0303, 0x1006529, 0x1800000, 0x100752b,
+0x1800000, 0x1581ffd, 0x198bb13, 0x1581fff,
+0x158bb15, 0xc82413, 0x1c0303, 0x1006525,
+0x1800000, 0x100752b, 0x1800000, 0x1581ffd,
+0x158bb14, 0x360326, 0x360300, 0x1020001,
+0x1c08eb6, 0x1581ffd, 0x198bb16, 0x1581ffe,
+0x58bb12, 0x36db0f, 0x360201, 0x360342,
+0x360326, 0x360f00, 0x1020001, 0x1c0c6d3,
+0x1581ffe, 0x58bb12, 0x36db0f, 0x360421,
+0x360201, 0x360141, 0x360322, 0x360100,
+0x1020001, 0x1c0c6f4, 0x36db0f, 0x1581ffe,
+0x58bb14, 0x1377fff, 0x1cb2191, 0x360201,
+0x360120, 0x360344, 0x360d00, 0x1020001,
+0x1c0c735, 0x36e15f, 0x36df3f, 0x36dd1f,
+0x1581ffd, 0x158bb17, 0x70000, 0x1580000,
+0xd8bb17, 0x0, 0x37fc17, 0x37fc9f,
+0x37fe37, 0x37ff1f, 0xc82210, 0x11b8008,
+0x3a548, 0x360002, 0x370201, 0x360402,
+0x370001, 0x360006, 0x370601, 0xd40004,
+0x110202, 0x760000, 0xed0100, 0x370801,
+0x360001, 0x360621, 0x14bffff, 0x1c42000,
+0x1c47f00, 0x208000, 0x61, 0x205308,
+0x14bffff, 0x1c12002, 0x1467fff, 0x1c02688,
+0xc91802, 0x1020001, 0x1c08e17, 0x1646120,
+0x303601, 0xc91808, 0x1020001, 0x1c08e17,
+0x360221, 0xd40e24, 0x118103, 0xc80422,
+0x100f02, 0xc80421, 0x370421, 0x1620005,
+0x184308, 0xc80421, 0x1621cb3, 0x1d88310,
+0x371681, 0x371901, 0x361681, 0xd40184,
+0x110306, 0x100f33, 0x361681, 0x760402,
+0xd32202, 0x11022f, 0x361901, 0x1377fff,
+0x1c90111, 0x1377fff, 0x1ca0110, 0x1580001,
+0x1589310, 0x360084, 0x1c07fff, 0x1fffc00,
+0x30860, 0x184347, 0x14b7fff, 0x1c42008,
+0x370080, 0x3600a0, 0x360881, 0xd3220a,
+0x118302, 0x370080, 0x1377fff, 0x1c80111,
+0x1580001, 0x1588310, 0x0, 0x360080,
+0xd40084, 0x110203, 0xc81020, 0x370080,
+0x361901, 0x1377fff, 0x1c80110, 0x360081,
+0x14bffff, 0x1c42008, 0x1c47f00, 0x208000,
+0x61, 0x205308, 0x3600a0, 0x1467fff,
+0x1c44388, 0x8e220a, 0x1082d0, 0x371621,
+0xc81021, 0x361621, 0xc80020, 0x1377fff,
+0x1c80111, 0x360821, 0x371a20, 0x371a81,
+0x360421, 0xd40024, 0x11034c, 0x1e08000,
+0x3e, 0x1800000, 0x180b00, 0x8c0003,
+0x11b8000, 0x2ec19, 0x1020001, 0x1c08a13,
+0xc82011, 0x14b6100, 0x1003000, 0xe80100,
+0x14b7e00, 0x802002, 0x11b8000, 0x2ee09,
+0x1020001, 0x1c09fa8, 0xc80403, 0x14bffff,
+0x1c04021, 0x1020001, 0x1c08765, 0x1e08000,
+0x45, 0x1b58000, 0x190302, 0x370a01,
+0x1646130, 0x1300605, 0x1020001, 0x1c08765,
+0x1e08000, 0x44, 0x1518000, 0x190302,
+0x370c01, 0x1646130, 0x1300605, 0x1020001,
+0x1c08765, 0x14bffff, 0x1c140a1, 0x370e01,
+0x1646130, 0x1300605, 0x1020001, 0x1c08765,
+0x1580039, 0x1988b10, 0x371001, 0x10c8000,
+0x809e7b, 0x1007511, 0x1800000, 0x1e0a0a8,
+0x0, 0x0, 0x184300, 0x1e0e020,
+0x3f, 0x0, 0x185302, 0x11b8000,
+0x39809, 0x11b8000, 0x39a29, 0x11b0000,
+0x39a09, 0x80900a, 0x1020001, 0x1c0877e,
+0x371201, 0x100f2f, 0x361681, 0xc80420,
+0xd40084, 0x110306, 0x360421, 0x760000,
+0xd32040, 0x1002ae, 0x100ff8, 0x1e09e11,
+0x1d70a00, 0x50, 0x18530e, 0x1e0a80a,
+0x102f900, 0x10, 0x184309, 0x1620028,
+0x180b01, 0xc80c48, 0x7a72c0, 0x7a0820,
+0x7a4a22, 0x1377fff, 0x1c80711, 0x1377fff,
+0x1c90091, 0x1377fff, 0x1c80110, 0x1377fff,
+0x1c90492, 0x11b8000, 0x2f6a8, 0x11b8000,
+0x34668, 0x1580006, 0x1989310, 0x10c8001,
+0x9eb7, 0x1007581, 0x1800000, 0x361681,
+0x760402, 0xd32202, 0x1002d8, 0x100fdc,
+0x36ff1f, 0x36fe37, 0x36fc17, 0x36fc9f,
+0x1581fff, 0x158bb17, 0x70000, 0x1580000,
+0x98bb17, 0x0, 0x37fe17, 0x37fd1f,
+0x37ff3f, 0xc82210, 0xc82612, 0xc82011,
+0x1020001, 0x1c09f80, 0xc82011, 0x1020001,
+0x1c09fb3, 0xc82413, 0xc82011, 0x130f4d,
+0x1581fff, 0x198bb12, 0xc82011, 0x1020001,
+0x1c09ffe, 0x11b0000, 0x39809, 0xd40004,
+0x110107, 0xc82411, 0xc82013, 0x36fc07,
+0x1020001, 0x1c0a095, 0x100f20, 0x360401,
+0xc80220, 0xd40004, 0x11831c, 0x1377fff,
+0x1c80093, 0x0, 0x360120, 0x360d00,
+0x169ffff, 0x1c21012, 0x110104, 0x360801,
+0x1020001, 0x1c03c84, 0x1377fff, 0x1c80093,
+0x0, 0x361920, 0x362500, 0x169ffff,
+0x1c21012, 0x110104, 0x360801, 0x1020001,
+0x1c09cc9, 0x360401, 0x760201, 0xd32001,
+0x110202, 0x100fe6, 0x36ff3f, 0x36fd1f,
+0x36fe17, 0x1581fff, 0x198bb17, 0x70000,
+0x1646100, 0x1308605, 0xc80002, 0xd40104,
+0x118403, 0xc80021, 0x100f10, 0xb00088,
+0x11820d, 0x1477fff, 0x1c24408, 0x11030a,
+0x1377fff, 0x1c80110, 0xc81421, 0xc80020,
+0x11b8000, 0x3a088, 0x11b8000, 0x39ca8,
+0x100f02, 0xc80022, 0x0, 0x70000,
+0x1580001, 0x98bb17, 0x0, 0x37ec17,
+0x37f89f, 0x37ee37, 0x37fb1f, 0x37fd3f,
+0x37ff5f, 0x37ed2f, 0x37ef0f, 0x360400,
+0x1580001, 0x1588310, 0xc81220, 0x37f10f,
+0x36ef0f, 0x0, 0x361630, 0xd40004,
+0x118341, 0x36ed0f, 0x770203, 0x1620005,
+0x180300, 0x36f12f, 0x1377fff, 0x1c80490,
+0x7a0009, 0x1377fff, 0x1c98092, 0x36ef2f,
+0xc82a13, 0x360140, 0x762613, 0x11b0008,
+0x3a52a, 0x1377fff, 0x1c90012, 0x37f34f,
+0x1377fff, 0x1c88092, 0x37f52f, 0x361900,
+0x37f70f, 0xd40014, 0x118215, 0x36f70f,
+0x360025, 0x1377fff, 0x1c90110, 0x36f30f,
+0x1387fff, 0x1c00166, 0x1377fff, 0x1c80110,
+0x1020001, 0x1c0c965, 0x370001, 0x1377fff,
+0x1cab015, 0x1377fff, 0x1c9b013, 0x1377fff,
+0x1c8b011, 0x770201, 0x1002ed, 0x36f50f,
+0x0, 0x360020, 0x36f30f, 0x0,
+0x360000, 0x8c0000, 0x8e2040, 0x118304,
+0x36f50f, 0x0, 0x370000, 0x36ef0f,
+0x761209, 0x360400, 0xd32009, 0x110202,
+0x100fc1, 0x36ff5f, 0x36fd3f, 0x36fb1f,
+0x36ee37, 0x36ec17, 0x36f89f, 0x1581ffe,
+0x198bb17, 0x70000, 0x1580000, 0x98bb17,
+0x0, 0x37fd1f, 0x37ff3f, 0xc82210,
+0x1580039, 0x1188b13, 0x1377fff, 0x1c82113,
+0x0, 0x360000, 0xd40004, 0x110107,
+0x360803, 0xc80420, 0x14b7fff, 0x1c02000,
+0x370003, 0x370020, 0x360603, 0xd40004,
+0x11010d, 0x1e0e020, 0x41, 0xa00000,
+0x184302, 0x360a03, 0x370203, 0x808408,
+0x1020001, 0x1c0877e, 0x371201, 0xc80020,
+0x370603, 0x36ff3f, 0x36fd1f, 0x1581fff,
+0x198bb17, 0x70000, 0xc80021, 0x11b8000,
+0x2f408, 0x11b8000, 0x2f208, 0x11b0000,
+0x2ee08, 0xb0fd00, 0x11b8000, 0x2f008,
+0x70000, 0x11b0000, 0x2f008, 0x760000,
+0x11b8000, 0x2f008, 0x11b0000, 0x2ee28,
+0xd32040, 0x118141, 0xc80020, 0x11b8000,
+0x2f008, 0x11b0000, 0x2ec28, 0x760402,
+0x11b8000, 0x2ec28, 0xd40824, 0x118203,
+0x11b8000, 0x2ec08, 0x360400, 0xc80420,
+0xd40004, 0x11030c, 0x11b0000, 0x2f408,
+0xd40004, 0x110126, 0xc80021, 0xc80420,
+0x11b8000, 0x2f208, 0x11b8000, 0x2f428,
+0x100f26, 0x361680, 0xc80020, 0xd40084,
+0x118316, 0x1e0a80a, 0x102f900, 0x280,
+0x18430a, 0x7a5242, 0x1377fff, 0x1c90510,
+0xc81425, 0x11b0000, 0x2ec68, 0x7a5240,
+0x760000, 0x1377fff, 0x1ca0512, 0x1377fff,
+0x1ca0314, 0x0, 0x376c84, 0x3616a0,
+0xd32240, 0x1082f3, 0x360400, 0x760402,
+0xd32002, 0x1002d9, 0x100fe3, 0x11b0000,
+0x2f208, 0xd40804, 0x110204, 0x760000,
+0x11b8000, 0x2f208, 0x0, 0x70000,
+0x1580000, 0x1d8bb17, 0x0, 0x37f217,
+0x37f89f, 0x37f437, 0x37fb1f, 0x37fd3f,
+0x37ff5f, 0xc82210, 0xc82012, 0x37f32f,
+0xc80020, 0x360a91, 0xc80620, 0x370000,
+0x360401, 0xd40004, 0x110309, 0x36f30f,
+0x0, 0x360000, 0xb00000, 0x118177,
+0xc82011, 0x130f91, 0x100f74, 0x1620005,
+0x180300, 0xc80220, 0x11b0008, 0x3a509,
+0x7a0003, 0x1377fff, 0x1c90011, 0x1377fff,
+0x1c80010, 0x361621, 0x158002f, 0xd89312,
+0x1580005, 0x188313, 0x37f52f, 0x37f70f,
+0xd40024, 0x110306, 0x360401, 0x760603,
+0xd32003, 0x1002e2, 0x100fe9, 0x36f70f,
+0x1377fff, 0x1ca8090, 0x0, 0x360005,
+0x1020001, 0x1c08cfd, 0x370005, 0x36f70f,
+0x1e08000, 0x37, 0x4f8b58, 0x190300,
+0x1377fff, 0x1c80090, 0x0, 0x360020,
+0x8e2002, 0x118344, 0x36f50f, 0x1620028,
+0x184308, 0xc81425, 0x1377fff, 0x1c80090,
+0x7a4203, 0x7a5241, 0x1377fff, 0x1c90411,
+0x1377fff, 0x1c90512, 0x360000, 0x891002,
+0x809220, 0x370000, 0x11b0000, 0x2ec09,
+0x1377fff, 0x1c90012, 0x360000, 0x1580006,
+0x1989310, 0x0, 0x360020, 0x8e2040,
+0x110202, 0x370000, 0x1377fff, 0x1ca8093,
+0xc81025, 0x1620028, 0x181302, 0xc80025,
+0x7a1043, 0x7a5201, 0x1377fff, 0x1c80111,
+0x11b0000, 0x2ec89, 0x1377fff, 0x1c80510,
+0x11b0000, 0x2f229, 0x1580006, 0x1988310,
+0x1020001, 0x1c0cbd1, 0x1377fff, 0x1c80093,
+0x370005, 0x36f52f, 0x1377fff, 0x1c90092,
+0x360020, 0xc91802, 0x360002, 0x1020001,
+0x1c08e17, 0x36f30f, 0x0, 0x360020,
+0x8e2002, 0x110304, 0x36f30f, 0x0,
+0x370000, 0x361601, 0x760201, 0xd32001,
+0x1002a2, 0x100fa6, 0x36ff5f, 0x36fd3f,
+0x36fb1f, 0x36f437, 0x36f217, 0x36f89f,
+0x1581fff, 0x58bb17, 0x70000, 0x1580001,
+0x58bb17, 0x0, 0x37f017, 0x37f89f,
+0x37f237, 0x37fb1f, 0x37fd3f, 0x37ff5f,
+0x1646100, 0xb11625, 0x37f10f, 0x1580001,
+0x1588b10, 0xc81220, 0x360401, 0x37f30f,
+0x361931, 0xd40004, 0x1010010, 0xc0a162,
+0x1620005, 0x180300, 0xc80620, 0x11b0008,
+0x3a509, 0x7a0009, 0x1377fff, 0x1c80010,
+0x361621, 0x37f50f, 0x1580005, 0x188310,
+0x37f70f, 0xd40024, 0x110349, 0x36f10f,
+0x1620005, 0x180300, 0x7a0009, 0x1377fff,
+0x1c80490, 0x761209, 0x1377fff, 0x1ca0011,
+0x1580034, 0xd8a314, 0x360120, 0x360004,
+0x360d60, 0x1467fff, 0x1c00064, 0x370006,
+0x361601, 0x1377fff, 0x1c90014, 0x361940,
+0x362500, 0x36fe02, 0x1467fff, 0x1c00069,
+0x360421, 0x370008, 0xd32049, 0x1010000,
+0x80a162, 0x100fd3, 0x16388af, 0x98530a,
+0x8e2242, 0x110304, 0x14bffff, 0x1c12041,
+0x8c4048, 0x360020, 0x808082, 0x370000,
+0x36f32f, 0x1377fff, 0x1c90192, 0x0,
+0x360202, 0x360082, 0x701200, 0x110114,
+0x36f12f, 0x360000, 0x1377fff, 0x1ca8492,
+0x0, 0x361925, 0x1377fff, 0x1cb0412,
+0x360145, 0x362525, 0x1377fff, 0x1ca0414,
+0x360d55, 0x1377fff, 0x1c90412, 0x1377fff,
+0x1c80415, 0x1020001, 0x1c09b89, 0x361601,
+0x760603, 0xd32003, 0x1002b9, 0x36f50f,
+0x1e09b93, 0x1c5ac00, 0x50, 0x181300,
+0x1377fff, 0x1c80190, 0x7a0009, 0x1377fff,
+0x1c90011, 0x360000, 0x1377fff, 0x1c80192,
+0x1580034, 0xd88310, 0x8e2040, 0x1082ec,
+0x36f72f, 0x361221, 0xc91800, 0x1377fff,
+0x1c90192, 0x0, 0x360082, 0x858480,
+0x1020001, 0x1c08e17, 0xc81000, 0x1e08000,
+0x39, 0x14b9758, 0x190300, 0x8e2008,
+0x118302, 0x100f02, 0xc81000, 0x144ffff,
+0x1c06008, 0x110303, 0x370080, 0x100fb9,
+0x14bffff, 0x1c120a3, 0x8e2041, 0x110203,
+0x360c81, 0x100fb0, 0x1477fff, 0x1c24388,
+0x118303, 0x361081, 0x100fab, 0x1e08000,
+0x3f, 0x333334, 0x190308, 0x8e2200,
+0x118303, 0xc81048, 0x100fa3, 0x1e08000,
+0x3e, 0x99999a, 0x190308, 0x8e2200,
+0x118312, 0x1377fff, 0x1c90193, 0x163889f,
+0x983306, 0x360e81, 0x3600a2, 0x8e20ca,
+0x110303, 0x8c4048, 0x100f93, 0x16388af,
+0x981302, 0x8e204a, 0x10038f, 0x1467fff,
+0x1c42688, 0x100f8c, 0x1377fff, 0x1c90193,
+0x163889f, 0x98530a, 0x360c81, 0x360022,
+0x8e2242, 0x1008000, 0xc0a0d8, 0x14bffff,
+0x1c120c1, 0x8c4048, 0x1008001, 0x1c0a0df,
+0x36ff5f, 0x36fd3f, 0x36fb1f, 0x36f237,
+0x36f017, 0x36f89f, 0x1581ffe, 0x1d8bb17,
+0x70000, 0x1580000, 0x98bb17, 0x0,
+0x37fe17, 0x37ff1f, 0xc82210, 0x11b8008,
+0x27148, 0x360006, 0x372801, 0x360402,
+0x362821, 0x14bffff, 0x1c42000, 0x1c47f00,
+0x208000, 0x61, 0x205308, 0xc91808,
+0x14bffff, 0x1c02002, 0x1c47f00, 0x208000,
+0x60, 0x205300, 0xe90122, 0x1020001,
+0x1c08e17, 0xc81424, 0xc81020, 0x372ca1,
+0xd400a4, 0x110420, 0x1620001, 0x118530a,
+0xc81020, 0x373ea1, 0xd400a4, 0x11843b,
+0x1e09fc0, 0x147ae00, 0x1cb96, 0x185310,
+0x1377fff, 0x1c90411, 0x1377fff, 0x1ca0410,
+0x1377fff, 0x1c82392, 0x360064, 0x1407fff,
+0x1cea06a, 0x14b61a1, 0x105300a, 0xe801aa,
+0x14b7e00, 0x852006, 0x3700a0, 0xd3204a,
+0x110522, 0x370020, 0x760008, 0x373e01,
+0x100f22, 0x1621cb8, 0x1d88310, 0x1377fff,
+0x1c90411, 0x1377fff, 0x1ca0410, 0x1580002,
+0x1d89310, 0x3600a4, 0x1c07fff, 0x1fffc00,
+0x30a60, 0x185348, 0x14b61a1, 0x105300a,
+0xe801aa, 0x14b7e00, 0x852006, 0x3700a0,
+0xd3204a, 0x110504, 0x761408, 0x370020,
+0x372ca1, 0x362ca1, 0x761008, 0xd32248,
+0x1085c6, 0x100fe4, 0x363ea1, 0x761008,
+0xd32248, 0x1005c7, 0xc82011, 0x1020001,
+0x1c0a25f, 0x1580007, 0x188b10, 0xc80048,
+0x10c8020, 0xa1d4, 0x1007501, 0x1800000,
+0x1580001, 0x988b12, 0xc82011, 0x1e09f4c,
+0x1999a3f, 0xd70a3e, 0x185308, 0x1cb8000,
+0x61cc, 0x1232160, 0x1990b3f, 0x1e0e0a0,
+0x3f, 0x1000000, 0x180b02, 0x371421,
+0xc80002, 0x1e08000, 0x3e, 0x10a3d70,
+0x190302, 0x371681, 0xc81020, 0x3718a1,
+0x371a61, 0x371ce1, 0x371e11, 0x372021,
+0x372221, 0x372481, 0x372681, 0x10c8001,
+0x80a1fa, 0x1447fff, 0x1c10064, 0x762412,
+0x1007521, 0x1800000, 0xc82011, 0x1020001,
+0x1c0a295, 0x36ff1f, 0x36fe17, 0x1581fff,
+0x198bb17, 0x70000, 0x1580000, 0x98bb17,
+0x0, 0x37fd1f, 0x37ff3f, 0xc82210,
+0xc82612, 0xc82011, 0x1020001, 0x1c0a295,
+0x360001, 0xb00000, 0x110106, 0xc82411,
+0xc82013, 0x1020001, 0x1c0a365, 0x100f12,
+0x360123, 0x360d03, 0x169ffff, 0x1c21012,
+0x11010b, 0x362801, 0xe90100, 0x1020001,
+0x1c03c84, 0x362801, 0x361923, 0xe90100,
+0x362503, 0x1020001, 0x1c09cc9, 0xc82011,
+0x130f39, 0x36ff3f, 0x36fd1f, 0x1581fff,
+0x198bb17, 0x70000, 0xc81000, 0xd40984,
+0x11042e, 0x1621cba, 0x1d89312, 0x1377fff,
+0x1c90412, 0x0, 0x360122, 0x0,
+0xc0f02, 0x0, 0xc81020, 0xc81448,
+0x100f17, 0x1e09fbf, 0x1be773a, 0x10624de,
+0x185308, 0x100f12, 0x1cb8000, 0x614c,
+0x1133e61, 0x190320, 0x100f0d, 0x1e0a0f8,
+0xc0, 0x1800000, 0x185308, 0x100f08,
+0x1639828, 0x184308, 0x100f03, 0x1639818,
+0x184308, 0x14bffff, 0x1c52123, 0x8e2202,
+0x118208, 0x8e2242, 0x110306, 0x1377fff,
+0x1c80010, 0xc80020, 0x371420, 0x100f04,
+0xc80022, 0x100f02, 0xc80021, 0x0,
+0x70000, 0x363e20, 0xc80020, 0xd40024,
+0x118409, 0xc80447, 0x1377fff, 0x1c90010,
+0x760000, 0x375822, 0x363e80, 0xd32200,
+0x1005fa, 0x0, 0x70000, 0x100751f,
+0x1800000, 0xc82c14, 0xc82812, 0x1646143,
+0x1312621, 0xc82016, 0xc80c20, 0xd400e4,
+0x11841c, 0x1467fff, 0x1c70068, 0x360010,
+0x8e202e, 0x118303, 0xc81c02, 0x100f02,
+0xc81c48, 0x360012, 0x8e202e, 0x110206,
+0x89702e, 0x1407fff, 0x1ceeae1, 0x3700e2,
+0x100f05, 0x89702e, 0x1407fff, 0x1cee8e1,
+0x3700e2, 0x13b6143, 0x1314629, 0x762010,
+0x762412, 0x760c06, 0xd322c6, 0x1005e6,
+0x36fe17, 0x772e17, 0x70000, 0x100751f,
+0x1800000, 0x37ff1f, 0xc82210, 0x361400,
+0xc80220, 0x360020, 0x8e2002, 0x110104,
+0x370000, 0xc82011, 0x130fbf, 0xc82011,
+0x361601, 0x762010, 0x0, 0x360020,
+0x8e2002, 0x110102, 0x370000, 0x1377fff,
+0x1c82111, 0x361801, 0x360020, 0x8e2002,
+0x110102, 0x370000, 0x1377fff, 0x1c82191,
+0x361a21, 0x360000, 0x8e2040, 0x110106,
+0x8f0002, 0x370020, 0x1020001, 0x1c0877e,
+0x372a01, 0x1377fff, 0x1c82211, 0x361c01,
+0x360020, 0x8e2002, 0x110103, 0x370000,
+0xc80221, 0x1377fff, 0x1c84091, 0x361e01,
+0x360020, 0x8e2002, 0x110103, 0x370000,
+0xc80221, 0x1377fff, 0x1c84011, 0x362001,
+0x360020, 0x8e2002, 0x110103, 0x370000,
+0xc80221, 0x1377fff, 0x1c83791, 0x362201,
+0x360020, 0x8e2002, 0x11012c, 0x370000,
+0x360a21, 0xc8022d, 0x360801, 0x880040,
+0x8c0020, 0x1020001, 0x1c0877e, 0x373601,
+0x360801, 0x8c0020, 0x1020001, 0x1c0877e,
+0x373801, 0x360c21, 0x360801, 0x880040,
+0x8c0020, 0x1020001, 0x1c0877e, 0x373a01,
+0x360e21, 0x360801, 0x880040, 0x8c0020,
+0x1020001, 0x1c0877e, 0x373c01, 0x1377fff,
+0x1c82291, 0x362401, 0x360020, 0x8e2002,
+0x110102, 0x370000, 0x1580001, 0x588b10,
+0x362601, 0x360020, 0x8e2002, 0x110106,
+0x370000, 0x100f04, 0xd40014, 0x1081d5,
+0x100fef, 0x36ff1f, 0x36fe17, 0x772e17,
+0x70000, 0x1580000, 0x1d8bb17, 0x0,
+0x37f417, 0x37f69f, 0x37f637, 0x37f8bf,
+0x37fb1f, 0x37fd3f, 0x37ff5f, 0xc82212,
+0x37f50f, 0x11b0008, 0x27109, 0x1e09ea6,
+0xcccd3a, 0x624de, 0x18430a, 0xc80221,
+0xc80620, 0xc82610, 0x1580020, 0x988315,
+0x8c4a40, 0x363e21, 0x8c5a00, 0x762613,
+0xd40024, 0x110410, 0x100f33, 0xc8040b,
+0x36f50f, 0xc81048, 0x1377fff, 0x1c80190,
+0x894048, 0x1467fff, 0x1c40460, 0x808028,
+0x370000, 0x363e01, 0x760603, 0xd32003,
+0x118525, 0x1377fff, 0x1c80191, 0xc80020,
+0xc80400, 0x364080, 0xd32201, 0x11850a,
+0x1447fff, 0x1c0006a, 0x1447fff, 0x1c10166,
+0x762613, 0x762a15, 0x760201, 0xd32201,
+0x1005f8, 0xb00022, 0x1001eb, 0xc91802,
+0x1020001, 0x1c08e17, 0x1020001, 0x1c08cfd,
+0x14bffff, 0x1c120c1, 0x8e2040, 0x118302,
+0xc80002, 0x1377fff, 0x1c80191, 0x0,
+0x365820, 0x8e2040, 0x1083d1, 0xc80409,
+0x100fd0, 0x36ff5f, 0x36fd3f, 0x36fb1f,
+0x36f637, 0x36f417, 0x36f8bf, 0x36f69f,
+0x1581fff, 0x58bb17, 0x70000, 0x1580001,
+0x1d8bb17, 0x0, 0x37fc17, 0x37ec9f,
+0x37fe37, 0x37ef1f, 0x37f13f, 0x37f35f,
+0xc82212, 0x37e50f, 0x361940, 0x360120,
+0x11b0008, 0x27109, 0x362801, 0x37e70f,
+0x1580020, 0x588310, 0x37e90f, 0x1020001,
+0x1c0cd92, 0x36e50f, 0x362801, 0x361b40,
+0x360320, 0x36e70f, 0x1020001, 0x1c0cd92,
+0x361001, 0xb00000, 0x110121, 0x1377fff,
+0x1c82391, 0xc80448, 0x37eb0f, 0x361201,
+0x363e11, 0x8e2040, 0x110207, 0x1580005,
+0x1188b10, 0xc82411, 0x890002, 0x1020001,
+0x1c0a30b, 0x1581ffe, 0x98bb10, 0x1580005,
+0x1188b12, 0xc80020, 0x363821, 0xd40014,
+0x11841c, 0x13b6585, 0x1b00601, 0x370080,
+0x8c4208, 0x8c4048, 0x1007581, 0x1800000,
+0xd32020, 0x1005f8, 0x100f12, 0x1580002,
+0x1d88b10, 0x1580003, 0xd88b12, 0xc80020,
+0x37eb0f, 0x1581ffe, 0x98bb10, 0x362c11,
+0xd40014, 0x118407, 0x13b6525, 0x1b00601,
+0x1007521, 0x1800000, 0xd32020, 0x1005fb,
+0x361201, 0x1477fff, 0x1c24400, 0x118103,
+0x360431, 0x100f05, 0x1e08000, 0x3e,
+0x99999a, 0x190303, 0x1581ffe, 0x98bb13,
+0x36eb5f, 0xc80021, 0xc81220, 0xd40014,
+0x118417, 0x36e92f, 0x1376132, 0x80011,
+0x1387fff, 0x1c2006a, 0x1377fff, 0x1ca0012,
+0x36e72f, 0x3602a1, 0x1377fff, 0x1c90012,
+0x360003, 0x1580007, 0x188310, 0x362a21,
+0x1020001, 0x1c0a26d, 0x13b650b, 0x1b13627,
+0x761209, 0xd32029, 0x1005eb, 0x1580007,
+0x188b11, 0x36eb0f, 0xc80020, 0x1377fff,
+0x1c80090, 0x370001, 0x36fe00, 0x36e50f,
+0x0, 0x361960, 0x360140, 0x362520,
+0x360d00, 0x1020001, 0x1c0cd7e, 0x36f35f,
+0x36f13f, 0x36ef1f, 0x36fe37, 0x36fc17,
+0x36ec9f, 0x1581ffe, 0x58bb17, 0x70000,
+0x1580000, 0x118bb17, 0x0, 0x37f91f,
+0x37fb3f, 0x37fd5f, 0xc82610, 0xc82212,
+0xc82a14, 0xc82411, 0x1377fff, 0x1c82291,
+0xc80420, 0xc80024, 0x370023, 0x1020001,
+0x1c09cc9, 0x360009, 0x1020001, 0x1c0cd07,
+0xc82011, 0x1020001, 0x1c0cd38, 0xc82013,
+0xc82411, 0xc80024, 0x762010, 0x1020001,
+0x1c0bb48, 0x1377fff, 0x1c92215, 0x1581fff,
+0x118bb10, 0x1020001, 0x1c0cc5c, 0x1581fff,
+0x118bb12, 0x1581fff, 0x118bb14, 0x1581fff,
+0x118bb16, 0x360203, 0x1580001, 0x1188b10,
+0x36f827, 0xcc0040, 0x360222, 0x360483,
+0x370809, 0xcc1048, 0x360484, 0x360603,
+0x370a29, 0x360823, 0xcc0200, 0x360686,
+0x370c09, 0xcc0202, 0x370e09, 0x1020001,
+0x1c0cd38, 0x1580001, 0x1188b12, 0x1377fff,
+0x1c84093, 0xc80024, 0x1020001, 0x1c0bb48,
+0x1580001, 0x589b10, 0xc82415, 0x1020001,
+0x1c0cc5c, 0xc82c20, 0x1377fff, 0x1ca2211,
+0x1377fff, 0x1c92211, 0xc82013, 0xc80021,
+0x1020001, 0x1c0cd0c, 0x1580001, 0x118ab12,
+0x1580001, 0x589b10, 0x1020001, 0x1c0cc5c,
+0xc82c20, 0x1377fff, 0x1ca2291, 0x1377fff,
+0x1c92291, 0xc82013, 0xc80022, 0x1020001,
+0x1c0cd0c, 0xc80020, 0x36fd5f, 0x36fb3f,
+0x36f91f, 0x1581fff, 0x118bb17, 0x70000,
+0x1580000, 0x158bb17, 0x0, 0x37f617,
+0x37fb1f, 0x37fd3f, 0x37ff5f, 0x1646100,
+0xb11621, 0xc82612, 0x37f74f, 0xc82411,
+0xc82013, 0x762412, 0x10c8000, 0x100a472,
+0x360022, 0x360008, 0x1007505, 0x1800000,
+0x1007721, 0x1800000, 0x36f70f, 0x1377fff,
+0x1c92290, 0x1580001, 0x588b10, 0x1020001,
+0x1c0cc5c, 0xc82811, 0xc82c20, 0xc82011,
+0xc80021, 0x762814, 0xc82414, 0x1020001,
+0x1c0a50f, 0xc82411, 0x36000b, 0x762412,
+0x0, 0x360022, 0xd32040, 0x118156,
+0x1377fff, 0x1ca2111, 0x36020b, 0x360024,
+0xd32040, 0x118150, 0x1377fff, 0x1cb2191,
+0x36040b, 0x360026, 0xd32040, 0x11814a,
+0x1377fff, 0x1caa211, 0x36060b, 0x360025,
+0xd32040, 0x118144, 0x36f70f, 0x1377fff,
+0x1c82290, 0x36080b, 0x37f90f, 0x1580001,
+0x588b10, 0x370002, 0x360a0b, 0x370004,
+0x360c0b, 0x370006, 0x360e0b, 0x370005,
+0x36f92f, 0x1020001, 0x1c0cc5c, 0xc82811,
+0xc82c20, 0xc82011, 0xc80021, 0x762814,
+0xc82414, 0x130f5c, 0x1377fff, 0x1cb2213,
+0xc82813, 0xc82413, 0xc82011, 0x360a21,
+0xc80021, 0x37002b, 0x360c21, 0x37022b,
+0x360e21, 0x37042b, 0x361021, 0x37062b,
+0x360221, 0x37082b, 0x360421, 0x370a2b,
+0x360621, 0x360881, 0x370c2b, 0x370e8b,
+0x1020001, 0x1c0cd0c, 0xd40014, 0x11010a,
+0x36000b, 0x370a01, 0x36020b, 0x370c01,
+0x36040b, 0x36062b, 0x370e01, 0x371021,
+0x100f05, 0xc82413, 0xc82011, 0x1020001,
+0x1c0cd68, 0xc80421, 0xc80020, 0x370021,
+0x100f02, 0xc80023, 0x36ff5f, 0x36fd3f,
+0x36fb1f, 0x36f617, 0x1581fff, 0xd8bb17,
+0x70000, 0x1580000, 0xd8bb17, 0x0,
+0x37fb1f, 0x37fd3f, 0x37ff5f, 0xc82610,
+0xc82212, 0x361b03, 0x1377fff, 0x1caa310,
+0xc82015, 0x1020001, 0x1c0cd38, 0xc82c11,
+0xc82811, 0xc82415, 0xc82013, 0x360a23,
+0xc80021, 0x370029, 0x360c23, 0x370229,
+0x360e23, 0x361083, 0x370429, 0x370689,
+0x1020001, 0x1c0cd0c, 0xc82415, 0xc82013,
+0x1020001, 0x1c0cd68, 0xc80020, 0x36ff5f,
+0x36fd3f, 0x36fb1f, 0x1581fff, 0x158bb17,
+0x70000, 0x1580000, 0xd8bb17, 0x0,
+0x37fa17, 0x37fb1f, 0x37fd3f, 0x37ff5f,
+0x1646100, 0xb13621, 0xc82212, 0xc82a14,
+0xc82416, 0xc82013, 0x1020001, 0x1c0cd68,
+0x1580001, 0x589b10, 0x1646110, 0x31462b,
+0xc82411, 0x1020001, 0x1c0cca9, 0x36ff5f,
+0x36fd3f, 0x36fb1f, 0x36fa17, 0x1581fff,
+0x158bb17, 0x70000, 0x1e4d054, 0x42000,
+0x18d190, 0x31e321, 0x13be989, 0x1b00601,
+0x1c60000, 0x618d, 0x1eb0a60, 0x1184302,
+0x1806298, 0x658000, 0x0, 0x0,
+0x1805315, 0x648000, 0x0, 0x0,
+0x1d0009, 0x1d00000, 0x618d, 0x1eb0860,
+0x1185360, 0x1806298, 0x658000, 0x0,
+0x0, 0x1805315, 0x648000, 0x0,
+0x0, 0x70000, 0x1580003, 0x118bb17,
+0x0, 0x37fc17, 0x37d09f, 0x37fe37,
+0x37d31f, 0x37d53f, 0x37d75f, 0xc82a10,
+0x37c94f, 0x37cb2f, 0x1581fff, 0x98bb14,
+0x37cd6f, 0x1581ffe, 0x198bb10, 0x1621cc2,
+0x58b316, 0xc82614, 0xc82216, 0x1c0403,
+0x1006503, 0x1800000, 0x1007507, 0x1800000,
+0x1621cc1, 0x1589312, 0xc82c10, 0xc82812,
+0x1c0403, 0x1006509, 0x1800000, 0x100750d,
+0x1800000, 0x36c90f, 0x11b8008, 0xc770d,
+0x36cd0f, 0x0, 0x360400, 0x11b8000,
+0xb6a0d, 0x36cb0f, 0x0, 0x360600,
+0x11b8000, 0xb6c0d, 0x360a00, 0x11b8000,
+0xb700d, 0x360200, 0x1020001, 0x1c03e42,
+0x15800b7, 0x58ab12, 0xc82c12, 0xc82810,
+0x1c0103, 0x1006509, 0x1800000, 0x100750d,
+0x1800000, 0x36cb0f, 0x0, 0x360000,
+0x1020001, 0x1c03e42, 0x11b8008, 0xb750d,
+0x11b0000, 0xb6a0d, 0xd40104, 0x118112,
+0x1581ffe, 0x198bb10, 0x1620010, 0x180300,
+0xc80620, 0x11b8000, 0xb6e0d, 0x1620050,
+0x181302, 0x37cf0f, 0x36cd0f, 0x0,
+0x360100, 0xc82410, 0x1580050, 0x188310,
+0x100f11, 0x1581fff, 0x98bb10, 0x1620040,
+0x180300, 0xc80623, 0x11b8000, 0xb6e0d,
+0x16200b0, 0x181302, 0x37cf0f, 0x36cd0f,
+0x0, 0x360100, 0xc82410, 0x15802c0,
+0x188310, 0x15800c6, 0x158ab14, 0x761003,
+0xc80020, 0xd40084, 0x118409, 0x370124,
+0x1377fff, 0x1c90112, 0x762814, 0x761003,
+0x760000, 0xd32200, 0x1005f9, 0xc82410,
+0x15800c7, 0x58ab10, 0x10c8000, 0x80a5ce,
+0x370120, 0x1377fff, 0x1c90112, 0x762010,
+0x0, 0x1377fff, 0x1c84015, 0x1e09f66,
+0xcccd00, 0x0, 0x181300, 0x370c05,
+0x36c92f, 0x370e25, 0x371005, 0xc82812,
+0x1580008, 0x189312, 0x36cb6f, 0x1580010,
+0x18a314, 0x360006, 0x14bffff, 0x1c02000,
+0x371405, 0x360206, 0x14bffff, 0x1c02000,
+0x371605, 0xc82215, 0xc82c10, 0x1c0603,
+0x100650d, 0x1800000, 0x1007503, 0x1800000,
+0x36cd0f, 0x0, 0x360900, 0x11b8008,
+0xb910d, 0x36c90f, 0x11b8008, 0xb8f0d,
+0x11b8008, 0xb8b2d, 0x11b8008, 0xb8d4d,
+0x36cb0f, 0x0, 0x360400, 0x1ea0000,
+0x0, 0x17700, 0x582300, 0x118118,
+0x15800b9, 0x98ab10, 0x1621cc2, 0x158b316,
+0x15800b9, 0x1d8ab12, 0x1621cc3, 0x98a314,
+0xc82610, 0xc82216, 0x1c0503, 0x1006503,
+0x1800000, 0x1007507, 0x1800000, 0xc82c12,
+0xc82014, 0x1c0503, 0x1006501, 0x1800000,
+0x100750d, 0x1800000, 0x100f17, 0x15800b9,
+0x98ab10, 0x1621cc3, 0x1d8b316, 0x15800b9,
+0x1d8ab12, 0x1621cc4, 0x118a314, 0xc82610,
+0xc82216, 0x1c0503, 0x1006503, 0x1800000,
+0x1007507, 0x1800000, 0xc82c12, 0xc82014,
+0x1c0503, 0x1006501, 0x1800000, 0x100750d,
+0x1800000, 0xc80220, 0xc80024, 0x11b0000,
+0xb6e2d, 0x11b0000, 0xb6c8d, 0xe71022,
+0xd32202, 0x110105, 0x770000, 0x760201,
+0xd40004, 0x1004f6, 0x15800bb, 0x118ab13,
+0x15800c6, 0x158ab11, 0xc81220, 0xd40034,
+0x118410, 0x36cf0f, 0x360121, 0x1377fff,
+0x1c80090, 0x0, 0x360000, 0xc82013,
+0x1020001, 0x1c0b9e8, 0x1377fff, 0x1c9a193,
+0x762211, 0x761209, 0xd32069, 0x1005f2,
+0x36cf0f, 0x1377fff, 0x1ca0195, 0x1377fff,
+0x1c90090, 0x15800bc, 0x158ab10, 0x360002,
+0x11b0008, 0xc6b2c, 0x1020001, 0x1c0b9e8,
+0x15800c7, 0x58ab11, 0x15800bd, 0x18ab13,
+0xc80622, 0x36cf0f, 0x1377fff, 0x1c80090,
+0x360121, 0x360000, 0xc82013, 0x1020001,
+0x1c0b9e8, 0x1377fff, 0x1c9a193, 0x762211,
+0x770603, 0xd40034, 0x1004f3, 0x36cd2f,
+0x1581ffc, 0x118bb10, 0x1377fff, 0x1c92112,
+0x1581ffc, 0x118bb14, 0x15800b7, 0x118ab16,
+0xc82610, 0xc82212, 0x1c1003, 0x1006503,
+0x1800000, 0x1007507, 0x1800000, 0x370564,
+0x36c807, 0xd40104, 0x118107, 0x36cd2f,
+0x1581ffc, 0x118bb10, 0x360322, 0x370320,
+0x100f06, 0x36cd2f, 0x1581ffc, 0x118bb10,
+0x360322, 0x370320, 0x36c90f, 0x1581ffc,
+0x118bb16, 0x1580018, 0x188314, 0x36cb2f,
+0x1580001, 0x118ab10, 0x1020001, 0x1c0bdaf,
+0x36c807, 0xd40004, 0x118116, 0x15800b7,
+0x118ab10, 0x1581ffe, 0x118bb12, 0x1581ffe,
+0x118bb16, 0x37e907, 0x36c90f, 0x1580018,
+0x188314, 0x36cd0f, 0x0, 0x360110,
+0x15800b2, 0x198ab10, 0x1580420, 0x188b11,
+0x370312, 0x36cb2f, 0x1020001, 0x1c0c978,
+0xc82015, 0x1020001, 0x1c0ab0f, 0xc82015,
+0x1020001, 0x1c0ab7d, 0x36d75f, 0x36d53f,
+0x36d31f, 0x36fe37, 0x36fc17, 0x36d09f,
+0x1581ffc, 0x118bb17, 0x70000, 0x1580006,
+0x18bb17, 0x0, 0x37fc17, 0x37a09f,
+0x37fe37, 0x37a31f, 0x37a53f, 0x37a75f,
+0xc82210, 0xc82612, 0x1581ffa, 0x18bb12,
+0x1581ffe, 0x198bb10, 0x1621cc5, 0x58a314,
+0x11b0000, 0xb6c19, 0xc82a12, 0xc82c13,
+0x1c2603, 0x100650d, 0x1800000, 0x100750b,
+0x1800000, 0xc82c10, 0xc82414, 0x1c0203,
+0x1006505, 0x1800000, 0x100750d, 0x1800000,
+0xc82011, 0x1020001, 0x1c0abcd, 0x11b0000,
+0xb7009, 0xd40004, 0x118405, 0xc82011,
+0xc82413, 0x1020001, 0x1c0aa6e, 0x11b0008,
+0xb9109, 0x0, 0x360100, 0x11b8008,
+0xb7909, 0x11b0008, 0xb9109, 0x0,
+0x360300, 0x11b8008, 0xb7b09, 0x11b0008,
+0xb9109, 0x0, 0x360500, 0x11b8008,
+0xb7d09, 0x11b0008, 0xb9109, 0x0,
+0x360900, 0x11b8008, 0xb7f09, 0x11b0008,
+0xb9109, 0x0, 0x360b00, 0x11b8008,
+0xb8109, 0x11b0008, 0xb9109, 0x0,
+0x360f00, 0x11b8008, 0xb8309, 0x11b0008,
+0xb9109, 0x0, 0x361100, 0x11b8008,
+0xb8509, 0x11b0008, 0xb9109, 0x0,
+0x361300, 0x11b8008, 0xb8709, 0x11b0008,
+0xb9109, 0x0, 0x361500, 0x11b8008,
+0xb8909, 0x11b0000, 0xb6a09, 0xd40104,
+0x118124, 0x11b0008, 0xb7509, 0x0,
+0x360000, 0xe81c00, 0xed1c00, 0xd40204,
+0x11831c, 0xc80620, 0xc81240, 0xc80021,
+0x11b0000, 0xb7629, 0xe60060, 0xce0040,
+0x11010d, 0x11b0008, 0xb9109, 0x1377fff,
+0x1c80190, 0x360123, 0x360100, 0x169ffff,
+0x1c21110, 0x110104, 0xc80001, 0x1020001,
+0x1c03c84, 0x762613, 0x771209, 0x760603,
+0xd40094, 0x1004ea, 0x1008001, 0x1c0a878,
+0x1581ffa, 0x18bb12, 0xc82011, 0x1020001,
+0x1c0aa08, 0x11b0000, 0xb6a09, 0xd40004,
+0x118113, 0x15800bb, 0x1d88b14, 0xc80001,
+0x11b0008, 0xb7f29, 0x11b0008, 0xb8b09,
+0x1020001, 0x1c0b4b5, 0x11b0008, 0xb8d09,
+0xc80001, 0x15800bc, 0x988b14, 0x11b0008,
+0xb8129, 0x1020001, 0x1c0b4b5, 0x11b0008,
+0xb7509, 0xc80021, 0x360020, 0xe91d22,
+0xce0002, 0x11010f, 0x11b0000, 0xb6a09,
+0xd40004, 0x11810b, 0x1581ffa, 0x18bb12,
+0xc80001, 0x11b0008, 0xb8f09, 0x15800bb,
+0x1188b14, 0x360522, 0x1020001, 0x1c0b4b5,
+0x11b0008, 0xb7509, 0xc80021, 0x360020,
+0xe91c22, 0xce0002, 0x11010a, 0x11b0008,
+0xb9109, 0xc80001, 0x15800bc, 0x1588b14,
+0x360723, 0x360700, 0x1020001, 0x1c0b4b5,
+0x1580001, 0x1188b10, 0xc82413, 0x1020001,
+0x1c0bfba, 0x11b0000, 0xb7209, 0xc80421,
+0xe91d00, 0xce0040, 0x110115, 0x11b0008,
+0xb7d29, 0x15800ba, 0x1188b16, 0xc80001,
+0xc82012, 0x15800b9, 0x988b14, 0x1020001,
+0x1c08d20, 0x11b0008, 0xb7d29, 0xc80001,
+0x15800bb, 0x188b16, 0x15800b9, 0x1d88b14,
+0xc82012, 0x1020001, 0x1c08d20, 0x11b0000,
+0xb6a09, 0xd40104, 0x11810d, 0x11b0008,
+0xb9109, 0xc80401, 0x11b0000, 0xb9209,
+0x11b0008, 0xb7d29, 0x360500, 0x1020001,
+0x1c08cc6, 0x1008001, 0x1c0a878, 0x11b0008,
+0xb7509, 0xc80021, 0x360020, 0xe91d22,
+0xce0002, 0x110126, 0x11b0008, 0xb7d29,
+0x1581fff, 0x18bb10, 0xc80022, 0x1581ffe,
+0x198bb16, 0x1581ffe, 0x198bb14, 0x37f127,
+0x1581fff, 0x18bb12, 0x11b0000, 0xb9229,
+0x37ec27, 0x11b0008, 0xb8f39, 0x370330,
+0x11b0000, 0xbe429, 0x370226, 0xc80401,
+0x11b0008, 0xb9109, 0x0, 0x360500,
+0x1020001, 0x1c088be, 0x11b0008, 0xb8f29,
+0xc80401, 0xc82012, 0x11b0000, 0xbea09,
+0x1020001, 0x1c08cc6, 0x100f0b, 0x11b0008,
+0xb9109, 0xc80401, 0x11b0000, 0xb9209,
+0x11b0008, 0xb7d29, 0x360500, 0x1020001,
+0x1c08cc6, 0x1581ffe, 0x198bb10, 0x1581fff,
+0x18bb16, 0xc80448, 0xc80022, 0x1581ffe,
+0x198bb14, 0x37ec27, 0x1581fff, 0x18bb12,
+0x11b0000, 0xbde29, 0x370220, 0xc80401,
+0x11b0008, 0xb7f09, 0x37f107, 0x11b0008,
+0xb7939, 0x370336, 0x1020001, 0x1c088be,
+0x11b0008, 0xb8109, 0x1581fff, 0x18bb16,
+0x1646110, 0x1300645, 0x1581ffe, 0x198bb14,
+0x1581fff, 0x18bb12, 0x37f107, 0x11b0008,
+0xb7b39, 0x370336, 0x1020001, 0x1c088be,
+0x11b0008, 0xb9109, 0xc80401, 0x11b0000,
+0xbdc09, 0x11b0008, 0xb7929, 0x360100,
+0x1020001, 0x1c08cc6, 0x11b0008, 0xb9109,
+0xc80401, 0x11b0000, 0xbdc09, 0x11b0008,
+0xb7b29, 0x360300, 0x1020001, 0x1c08cc6,
+0x15800b2, 0x1988b10, 0x1581ffa, 0x18bb12,
+0x1020001, 0x1c0ca40, 0xc80620, 0xc8123f,
+0x760025, 0x7d0003, 0x1377fff, 0x1c80011,
+0x15800be, 0x1988314, 0x0, 0x360004,
+0xd40004, 0x11810f, 0x11b0008, 0xb9109,
+0x1377fff, 0x1c80190, 0x0, 0x360900,
+0x16a0000, 0x188304, 0x110130, 0x1646110,
+0x1300641, 0x1020001, 0x1c03c73, 0x100f2b,
+0xc82014, 0x1581fff, 0x98bb12, 0xc80020,
+0x1377fff, 0x1cb0010, 0x10c8000, 0xc0a85e,
+0x360226, 0x1377fff, 0x1cb0111, 0x0,
+0x11b0008, 0xb796e, 0xc82014, 0x760000,
+0x370162, 0x762412, 0x1377fff, 0x1cb0010,
+0x0, 0x1377fff, 0x1ca4090, 0x360226,
+0x760000, 0x1376110, 0x10b0111, 0x0,
+0x11b0008, 0xb796e, 0x370162, 0x762412,
+0x11b0008, 0xb9169, 0x1581fff, 0x98bb12,
+0x1377fff, 0x1cb0196, 0x360000, 0x360906,
+0x1020001, 0x1c088be, 0x771209, 0x760603,
+0xd40094, 0x1004bb, 0x36a75f, 0x36a53f,
+0x36a31f, 0x36fe37, 0x36fc17, 0x36a09f,
+0x1581ffa, 0x18bb17, 0x70000, 0xc81000,
+0xd40384, 0x11840d, 0xd40484, 0x110107,
+0xd40584, 0x118103, 0xc81020, 0x100f04,
+0xc80021, 0x100f11, 0xc81048, 0x14bffff,
+0x1c521a1, 0x100f03, 0xc81020, 0xc81448,
+0x8e2202, 0x118208, 0x8e2242, 0x110306,
+0x1377fff, 0x1c80010, 0xc80020, 0x370c20,
+0x100f02, 0xc80022, 0x0, 0x70000,
+0xc80400, 0xc80020, 0xd40624, 0x110109,
+0xd40724, 0x118105, 0x11b0000, 0xbde2a,
+0x370020, 0x100f06, 0xc80021, 0x100f04,
+0x11b0000, 0xbdc2a, 0x370020, 0x0,
+0x70000, 0x360080, 0x1377fff, 0x1c90410,
+0x0, 0x370a22, 0x370202, 0x360000,
+0x760000, 0x370000, 0x70000, 0x1580000,
+0xd8bb17, 0x0, 0x37fc17, 0x37fc9f,
+0x37fe37, 0x37ff1f, 0x1646100, 0x1b11621,
+0xc81421, 0x360082, 0x1620007, 0x1d81302,
+0xc80020, 0xe91d88, 0xce4a48, 0x1020001,
+0x1c03c73, 0xc82011, 0xc80248, 0xc80023,
+0xc80401, 0x130fe0, 0x1580001, 0x588b10,
+0x1646110, 0x1300649, 0x130fdb, 0x1646110,
+0x1310623, 0xc80041, 0x130fd7, 0x1580001,
+0x588b10, 0x1646110, 0x1300681, 0x130fd2,
+0x1646110, 0x1310623, 0x760025, 0x130fce,
+0x1580001, 0x588b10, 0x1620001, 0x980300,
+0xc80401, 0x130fc8, 0xd40034, 0x118240,
+0xd40834, 0x11033e, 0x1621cc0, 0x1188310,
+0x1377fff, 0x1c80190, 0x0, 0x360100,
+0x0, 0xc0f00, 0x0, 0xc80020,
+0x1020001, 0x1c08cfd, 0xc80600, 0x1580003,
+0xd88b10, 0xc8003f, 0xc80403, 0x130fb2,
+0x1580004, 0x1188b10, 0xc80403, 0xc80025,
+0x130fad, 0xc80001, 0x1020001, 0x1c08cfd,
+0xc80600, 0x1580005, 0x1588b10, 0xc8003f,
+0xc80403, 0x130fa4, 0x1580006, 0x1988b10,
+0x1646130, 0x130064b, 0x130f9f, 0xd40094,
+0x110117, 0x1580002, 0x988b10, 0x1620001,
+0xd80300, 0xc80401, 0x130f97, 0x100f10,
+0xd40094, 0x11010e, 0xc82011, 0x1e08000,
+0xb3f, 0x6a09e6, 0x180301, 0xc80401,
+0x130f8d, 0x1580001, 0x588b10, 0x1620001,
+0xd80300, 0xc80401, 0x130f87, 0x36ff1f,
+0x36fe37, 0x36fc17, 0x36fc9f, 0x1581fff,
+0x158bb17, 0x70000, 0x1580001, 0x198bb17,
+0x0, 0x37fa17, 0x37e69f, 0x37fc37,
+0x37e8bf, 0x37fe77, 0x37eaff, 0x37ed1f,
+0x37ef3f, 0x37f15f, 0xc82210, 0x1581fff,
+0x18bb12, 0x1581fff, 0x18bb10, 0x1e09f26,
+0xcccd3f, 0x99999a, 0x184300, 0x1e09f8c,
+0x1999a3e, 0x199999a, 0x185306, 0xc80448,
+0x1581fff, 0x18bb14, 0x1581fff, 0x18bb15,
+0xc80e02, 0x1581ffe, 0xd8bb16, 0x1581fff,
+0x18bb13, 0x370820, 0x3704a2, 0x370605,
+0x360201, 0x37f087, 0x370264, 0xc82416,
+0xc82013, 0x1c0503, 0x1006521, 0x1800000,
+0x1007525, 0x1800000, 0x8e2200, 0x118327,
+0x360021, 0xb00022, 0x110124, 0x1581ffe,
+0xd8bb10, 0xc81024, 0xc80421, 0x762010,
+0x0, 0x3600a0, 0x8e2240, 0x118306,
+0x762010, 0x771008, 0x760402, 0xd40084,
+0x1004f8, 0x1581ffe, 0xd8bb10, 0x1581ffe,
+0xd8bb12, 0x770202, 0x1377fff, 0x1c80090,
+0x1377fff, 0x1c90092, 0x0, 0x360022,
+0x360280, 0x890040, 0x891048, 0x8e2040,
+0x110108, 0xc91802, 0x1020001, 0x1c08e17,
+0xc80e00, 0x100f03, 0xc80e20, 0xc80220,
+0x11b0000, 0xb7209, 0xc80421, 0xe91d00,
+0xce0040, 0x118103, 0xc80420, 0x100f0c,
+0x1621cbf, 0x1d88310, 0xc80048, 0x1377fff,
+0x1c80090, 0x8900e0, 0x1467fff, 0x1c00060,
+0x360220, 0x1407fff, 0x1ce2720, 0x360401,
+0x8e2040, 0x118302, 0xc80400, 0x360601,
+0x8e2040, 0x118302, 0xc80400, 0x1580001,
+0x1188b10, 0xc80022, 0x1020001, 0x1c0c355,
+0x1e09fe4, 0x10fdb00, 0x1cbf4, 0x184b10,
+0x1621cbe, 0x1589312, 0xc80648, 0x1377fff,
+0x1c80090, 0x15800be, 0x988b13, 0x8910e3,
+0x360401, 0x890003, 0x1467fff, 0x1c40160,
+0x3602a0, 0x1377fff, 0x1c80092, 0x1407fff,
+0x1ceb7a8, 0x1467fff, 0x1c10160, 0x360260,
+0x1407fff, 0x1ce7762, 0x8c78e0, 0x8c0a2f,
+0xc80001, 0x1020001, 0x1c07bb0, 0x15800be,
+0x588b10, 0x370003, 0x1467fff, 0x1c005e6,
+0x15800be, 0x1588b13, 0x370000, 0x11b8000,
+0xbe009, 0xc80001, 0x1020001, 0x1c07b7d,
+0x15800be, 0x1188b10, 0x370003, 0x1467fff,
+0x1c005e6, 0x370000, 0x11b8000, 0xbe609,
+0x8e206f, 0x11020f, 0x8c0227, 0x1020001,
+0x1c07bb0, 0x1646110, 0x303601, 0x1020001,
+0x1c07bb0, 0x164e130, 0x30c601, 0x1020001,
+0x1c08e17, 0x11b8000, 0xbdc09, 0x100f04,
+0xc80020, 0x11b8000, 0xbdc09, 0x760643,
+0x8c0067, 0x1020001, 0x1c07b7d, 0xc80200,
+0x8c006f, 0x1020001, 0x1c07b7d, 0x890001,
+0x11b8000, 0xbde09, 0x36f15f, 0x36ef3f,
+0x36ed1f, 0x36fe77, 0x36fc37, 0x36fa17,
+0x36eaff, 0x36e8bf, 0x36e69f, 0x1581ffe,
+0x98bb17, 0x70000, 0x1580000, 0x158bb17,
+0x0, 0x37fe17, 0x37f71f, 0x37f93f,
+0x37fb5f, 0xc82210, 0xc82612, 0x11b0008,
+0xb7509, 0xc80021, 0x11b0000, 0xb6c19,
+0x360020, 0xe91b22, 0xce0002, 0x11012e,
+0x360923, 0x1581fff, 0x158bb10, 0xc80448,
+0xc80022, 0x1581fff, 0xd8bb16, 0x1581fff,
+0xd8bb14, 0x37fb27, 0x360153, 0x1581fff,
+0x158bb12, 0x37f627, 0x370350, 0x11b0000,
+0xbe629, 0x370226, 0xc80401, 0x11b0008,
+0xb7f09, 0x1020001, 0x1c088be, 0x360b23,
+0x1581fff, 0x158bb10, 0xc80022, 0x1581fff,
+0xd8bb16, 0x1581fff, 0xd8bb14, 0x37fb27,
+0x360353, 0x1581fff, 0x158bb12, 0x370350,
+0x11b0000, 0xbe829, 0x370226, 0xc80401,
+0x11b0008, 0xb8109, 0x1020001, 0x1c088be,
+0x100f11, 0x11b0000, 0xbe609, 0xc80401,
+0x360123, 0x11b0008, 0xb7f09, 0x1020001,
+0x1c08cc6, 0x11b0000, 0xbe809, 0xc80401,
+0x360323, 0x11b0008, 0xb8109, 0x1020001,
+0x1c08cc6, 0x11b0000, 0xbe009, 0xc80401,
+0x360123, 0x11b0008, 0xb7909, 0x1020001,
+0x1c08cc6, 0x11b0000, 0xbe209, 0xc80401,
+0x360323, 0x11b0008, 0xb7b09, 0x1020001,
+0x1c08cc6, 0x36fb5f, 0x36f93f, 0x36f71f,
+0x36fe17, 0x1581fff, 0xd8bb17, 0x70000,
+0x1580001, 0x118bb17, 0x0, 0x37fc17,
+0x37f09f, 0x37fe37, 0x37f2bf, 0x37f51f,
+0x37f73f, 0x37f95f, 0xc82210, 0x37e92f,
+0x37eb0f, 0x1581ffe, 0x118bb14, 0x1581fff,
+0x58bb10, 0xc80220, 0x1621cc5, 0xd8b316,
+0x1621cc6, 0x189312, 0x11b0000, 0xb6cb9,
+0xc82614, 0xc82216, 0x1c0503, 0x1006503,
+0x1800000, 0x1007507, 0x1800000, 0xc82c10,
+0xc82812, 0x1c0503, 0x1006509, 0x1800000,
+0x100750d, 0x1800000, 0x36eb0f, 0x0,
+0x11b0000, 0xb7008, 0xd40004, 0x11846c,
+0x1e09f9a, 0x13bef3f, 0x1000000, 0x184b03,
+0x1581fff, 0x58bb10, 0x1581ffe, 0x118bb13,
+0xc80440, 0xc80024, 0x1581ffe, 0x118bb14,
+0x1581fff, 0x58bb16, 0x7d1041, 0x1581ffe,
+0x118bb11, 0x37ed0f, 0x36e90f, 0x1581fff,
+0x58bb15, 0x37ef3f, 0x13761b0, 0x1090110,
+0x1580003, 0x189310, 0x0, 0x360130,
+0x37e837, 0x37f337, 0x360530, 0x370294,
+0x36ed4f, 0x0, 0x370334, 0x360900,
+0x370431, 0x370506, 0x363d02, 0x36ef4f,
+0xc82415, 0x1020001, 0x1c08cce, 0x36e96f,
+0x1581fff, 0x58bb10, 0xc80440, 0xc80041,
+0x1581ffe, 0x118bb14, 0x1581fff, 0x58bb12,
+0x7d1041, 0x13761b0, 0x1088116, 0x1580003,
+0x188b16, 0x0, 0x360336, 0x37f337,
+0x360b66, 0x370560, 0x363f01, 0x1020001,
+0x1c08cce, 0x36e90f, 0xc80022, 0xc80440,
+0xc81023, 0x36eb2f, 0x7d1041, 0x7d0001,
+0x1377fff, 0x1c80110, 0x7d0200, 0x13761b0,
+0x90012, 0x15800bd, 0x189314, 0x363d20,
+0xc82012, 0x1020001, 0x1c0b4b5, 0x36e90f,
+0xc80022, 0xc80440, 0xc81023, 0x36eb2f,
+0x7d0001, 0x7d1041, 0x1377fff, 0x1c80110,
+0x7d0200, 0x13761b0, 0x90012, 0x15800bd,
+0xd89314, 0x363f20, 0xc82012, 0x1020001,
+0x1c0b4b5, 0x36eb0f, 0x760201, 0x11b0000,
+0xb7008, 0xd32001, 0x10059a, 0x36f95f,
+0x36f73f, 0x36f51f, 0x36fe37, 0x36fc17,
+0x36f2bf, 0x36f09f, 0x1581ffe, 0x118bb17,
+0x70000, 0x1580000, 0x158bb17, 0x0,
+0x37f617, 0x37f69f, 0x37f837, 0x37f8bf,
+0x37fa77, 0x37faff, 0x37fd1f, 0x37ff3f,
+0xc82610, 0x360800, 0x14b7fff, 0x1c02000,
+0x1020001, 0x1c03e42, 0x11b8008, 0xb750b,
+0x15800be, 0x1989b10, 0xc80e21, 0xc80021,
+0xc80421, 0xc81421, 0xc80c21, 0xc81021,
+0x11b0008, 0xb752b, 0x0, 0x3600b2,
+0xe91bbe, 0xe91abf, 0xe91cb1, 0xe91db3,
+0xe91eb9, 0xe91fbb, 0xce000e, 0xce7249,
+0xce38ef, 0xce50cb, 0xce1041, 0xce4203,
+0xe80400, 0xe80576, 0xe80322, 0xe80288,
+0xe801ee, 0xcd0006, 0xcd0040, 0xcd0200,
+0xcd02c0, 0xcd0240, 0x11b8000, 0xb760b,
+0x360a03, 0x11b0008, 0xb752b, 0x14b7fff,
+0x1c02000, 0x1020001, 0x1c0a8b9, 0x11b0000,
+0xb6a0b, 0xd40004, 0x11810e, 0x15800bb,
+0x1189b11, 0xc80223, 0xc80020, 0x360421,
+0x360101, 0x1020001, 0x1c06aa0, 0x1377fff,
+0x1c8a191, 0x770201, 0xd40014, 0x1004f7,
+0x11b0000, 0xbce2b, 0xc80020, 0x11b0008,
+0xbcb0b, 0x1020001, 0x1c06aa0, 0x15800bd,
+0x189b11, 0xc80222, 0xc80020, 0x360421,
+0x360101, 0x1020001, 0x1c06aa0, 0x1377fff,
+0x1c8a191, 0x770201, 0xd40014, 0x1004f7,
+0x36ff3f, 0x36fd1f, 0x36fa77, 0x36f837,
+0x36f617, 0x36faff, 0x36f8bf, 0x36f69f,
+0x1581fff, 0xd8bb17, 0x70000, 0x100751f,
+0x1800000, 0x37ff1f, 0xc82210, 0x360a00,
+0x14b7fff, 0x1c0a000, 0xc80001, 0x1020001,
+0x1c03e42, 0x15800b7, 0x588b12, 0xc80421,
+0xc82c12, 0xc82810, 0x1c0103, 0x1006509,
+0x1800000, 0x100750d, 0x1800000, 0x11b0000,
+0xb7209, 0xe91d08, 0xce1048, 0x110107,
+0xc80020, 0x1020001, 0x1c0877e, 0x11b8000,
+0xb9209, 0x100f10, 0xd40014, 0x118109,
+0x1e09000, 0xdf, 0x1fffffe, 0x184302,
+0xce0040, 0xcd0200, 0x11b8000, 0xb7209,
+0x8f004a, 0x1020001, 0x1c0877e, 0x11b8000,
+0xb9209, 0x11b0000, 0xb7209, 0xe81c00,
+0xed1c00, 0xd40304, 0x118306, 0x1621cbf,
+0x988310, 0xc80048, 0x370600, 0x100f11,
+0x1e09f99, 0x1333300, 0x1cbf4, 0x180310,
+0x0, 0x370600, 0xd40014, 0x118104,
+0xc80020, 0x370601, 0x100f04, 0x14bffff,
+0x1c030a3, 0x370601, 0x360601, 0x371201,
+0xc82011, 0x1020001, 0x1c0a930, 0x36ff1f,
+0x36fe17, 0x772e17, 0x70000, 0x1580000,
+0xd8bb17, 0x0, 0x37fc17, 0x37fd1f,
+0x37fe37, 0xc82210, 0xc82411, 0x360c21,
+0xc80220, 0x360002, 0x8e2040, 0x110108,
+0x1580001, 0x1188b10, 0xc80020, 0x370022,
+0x1020001, 0x1c0c355, 0xc80221, 0xc82411,
+0x360e21, 0x762412, 0x0, 0x360002,
+0x8e2040, 0x110108, 0x1580001, 0x1188b10,
+0xc80021, 0x370022, 0x1020001, 0x1c0c355,
+0xc80221, 0x1377fff, 0x1c82111, 0x361001,
+0x360020, 0x8e2002, 0x110103, 0x370000,
+0xc80221, 0x1377fff, 0x1c82191, 0x361201,
+0x360020, 0x8e2002, 0x110103, 0x370000,
+0xc80221, 0x1377fff, 0x1c82211, 0x361401,
+0x360020, 0x8e2002, 0x110105, 0x370000,
+0xc82011, 0x1020001, 0x1c0ab0f, 0x1377fff,
+0x1c84091, 0x361631, 0x360000, 0x8e2060,
+0x11010b, 0x370030, 0xc82011, 0x1020001,
+0x1c0ab7d, 0x15800b2, 0x1988b10, 0x1646130,
+0x1300641, 0x1020001, 0x1c0caa8, 0xd40014,
+0x110104, 0xc82011, 0x1020001, 0x1c0a930,
+0x36fd1f, 0x36fe37, 0x36fc17, 0x1581fff,
+0x158bb17, 0x70000, 0x1580001, 0x98bb17,
+0x0, 0x37ec17, 0x37f89f, 0x37ee37,
+0x37fb1f, 0x37fd3f, 0x37ff5f, 0x1646120,
+0x1b01601, 0x37ed5f, 0x37ef3f, 0x37f16f,
+0xc82c15, 0xc82a10, 0x37f34f, 0x37f52f,
+0xc82414, 0x36eb07, 0x1646130, 0x314623,
+0xc81022, 0xc80421, 0x37f70f, 0x36f10f,
+0x1020001, 0x1c0cbf5, 0x36ed0f, 0x1377fff,
+0x1c9c091, 0xc81221, 0x1377fff, 0x1c8a210,
+0xd40114, 0x11840f, 0x36f12f, 0x1646130,
+0x316623, 0xc82813, 0xc82012, 0x1020001,
+0x1c08d20, 0x1377fff, 0x1c9c093, 0x1377fff,
+0x1c8a211, 0x761209, 0xd32029, 0x1005f3,
+0x36f32f, 0x1646130, 0x31062b, 0xc81022,
+0xc80421, 0x36f76f, 0x762412, 0x36ef4f,
+0x1020001, 0x1c0cbf5, 0x36ef0f, 0xc81221,
+0x1377fff, 0x1c9c090, 0x36f70f, 0x1377fff,
+0x1c8a210, 0xd40114, 0x11840f, 0x1646130,
+0x316623, 0xc82813, 0xc82415, 0xc82015,
+0x1020001, 0x1c08d20, 0x1377fff, 0x1c9c093,
+0x1377fff, 0x1c8a211, 0x761209, 0xd32029,
+0x1005f3, 0x36f14f, 0x1646130, 0x31662b,
+0xc82015, 0x36f52f, 0x1020001, 0x1c0bca2,
+0x36ff5f, 0x36fd3f, 0x36fb1f, 0x36ee37,
+0x36ec17, 0x36f89f, 0x1581ffe, 0x198bb17,
+0x70000, 0x1580000, 0xd8bb17, 0x0,
+0x37fc17, 0x37fc9f, 0x37fe37, 0x37ff1f,
+0x1646100, 0xb11621, 0xc80602, 0xc80001,
+0x1020001, 0x1c07b7d, 0x1467fff, 0x1c12683,
+0xc91802, 0x1020001, 0x1c08e17, 0xc80448,
+0x884040, 0x890002, 0xc91808, 0x1020001,
+0x1c08e17, 0x1646110, 0x309601, 0x881849,
+0x1020001, 0x1c07bb0, 0x8c1003, 0x8f1009,
+0x14bffff, 0x1c530a1, 0x370281, 0x880043,
+0x370021, 0x8c0240, 0x370801, 0x1467fff,
+0x1c43100, 0x370681, 0x370401, 0x36ff1f,
+0x36fe37, 0x36fc17, 0x36fc9f, 0x1581fff,
+0x158bb17, 0x70000, 0x1580000, 0x198bb17,
+0x0, 0x37f617, 0x37f69f, 0x37f837,
+0x37f8bf, 0x37fa77, 0x37faff, 0x35fc57,
+0x37fd1f, 0x35fedf, 0xc82210, 0x360402,
+0x14bffff, 0x1c02000, 0x1c47f00, 0x208000,
+0x60, 0x205300, 0x372401, 0x360206,
+0x373401, 0x373801, 0xe90100, 0x373601,
+0x373a01, 0x360006, 0xd40204, 0x118404,
+0x363a01, 0xe90100, 0x373a01, 0x363401,
+0xc81248, 0x14bffff, 0x1c02000, 0x1c47f00,
+0x208000, 0x60, 0x205300, 0x164e190,
+0x30c601, 0x1020001, 0x1c08e17, 0x372e01,
+0x363401, 0x362421, 0x14bffff, 0x1c02000,
+0x1c47f00, 0x208000, 0x60, 0x205300,
+0xc91802, 0x1020001, 0x1c08e17, 0xc80200,
+0x1e0a27d, 0x43, 0x1900000, 0x183b00,
+0x14bffff, 0x1c12123, 0x37f4b7, 0x164e1d2,
+0x1b0d601, 0xc81a0b, 0x36f4b7, 0x1638895,
+0x1d80300, 0x8c30e1, 0x8c42a1, 0x37f4b7,
+0x164e152, 0x1b05601, 0xc80a0b, 0x36f4b7,
+0x1e08000, 0x45, 0x1770000, 0x190300,
+0x8c50a1, 0x372681, 0x8c0001, 0x3728a1,
+0x372a61, 0x372c01, 0x363a01, 0x362481,
+0x14bffff, 0x1c02000, 0x1c47f00, 0x208000,
+0x60, 0x205300, 0xc91808, 0x8c0040,
+0x1020001, 0x1c08e17, 0x373001, 0x1e09f4c,
+0x1999a42, 0x900000, 0x180302, 0x1e09ee6,
+0xcccd41, 0x400000, 0x185b0f, 0xc80647,
+0x363081, 0x8c1041, 0x8c4008, 0x809e23,
+0x373281, 0x375f41, 0x1020001, 0x1c08a13,
+0xc80400, 0x1e08000, 0x44, 0x450000,
+0x190300, 0x8c0001, 0x8c1262, 0x373c21,
+0x809e03, 0x1020001, 0x1c08a13, 0x8c1260,
+0x1e08000, 0x3e, 0x99999a, 0x190300,
+0x373e21, 0x3740b1, 0x363a21, 0x362481,
+0x14bffff, 0x1c12002, 0x1c47f00, 0x208000,
+0x60, 0xa05302, 0xc91808, 0x8c0002,
+0x1020001, 0x1c08e17, 0xc80400, 0x1e08000,
+0x3e, 0x178d4fe, 0x190300, 0x1020001,
+0x1c069b9, 0x1646190, 0x302601, 0x1580001,
+0x588b12, 0xc82011, 0x1e0a29d, 0x1800042,
+0x1400000, 0x185308, 0x1638862, 0x1983306,
+0x897049, 0x80d013, 0x1407fff, 0x1ceaa13,
+0xc80420, 0x8c30c1, 0x3742e1, 0x14b6183,
+0x1043008, 0xe80188, 0x14b7e00, 0x84200e,
+0x14b61a3, 0x105300a, 0xe801aa, 0x14b7e00,
+0x85200e, 0x374481, 0x3746a1, 0x374821,
+0x374a61, 0x375c21, 0x365c81, 0x375a81,
+0x371221, 0x3514d1, 0x351651, 0x371871,
+0x371a91, 0x371c91, 0x371e91, 0x372021,
+0x372221, 0x10c8001, 0x40ad84, 0x1447fff,
+0x1c10064, 0x762412, 0x1007521, 0x1800000,
+0xc82011, 0x1020001, 0x1c0b1fc, 0xc80e05,
+0x34fc57, 0x16461d3, 0x1b0560f, 0x34fedf,
+0xc81a0f, 0x36fd1f, 0x36fa77, 0x36f837,
+0x36faff, 0x36f617, 0x36f8bf, 0x36f69f,
+0x1581fff, 0x98bb17, 0x70000, 0x1580000,
+0x98bb17, 0x0, 0x37fd1f, 0x37ff3f,
+0xc82610, 0xc82212, 0xc82013, 0x1020001,
+0x1c0b1fc, 0x360003, 0xb00000, 0x110116,
+0x361921, 0xc82813, 0x360101, 0x130f6f,
+0x1581fff, 0x1d8bb14, 0x1581fff, 0x198bb12,
+0xc82013, 0x1020001, 0x1c0b176, 0x361961,
+0x360141, 0x362521, 0x360d01, 0xc82213,
+0x36fe27, 0x36fc07, 0x1020001, 0x1c0aee3,
+0x100f15, 0x360121, 0x360d01, 0x169ffff,
+0x1c21012, 0x110104, 0x363603, 0x1020001,
+0x1c03c84, 0x361921, 0x362501, 0x169ffff,
+0x1c21012, 0x110104, 0x363603, 0x1020001,
+0x1c09cc9, 0x365f03, 0xc80020, 0x11b8000,
+0x80008, 0x36ff3f, 0x36fd1f, 0x1581fff,
+0x198bb17, 0x70000, 0xc81000, 0xd40884,
+0x11043f, 0x1621cc6, 0x1589312, 0x1377fff,
+0x1c90412, 0x0, 0x360122, 0x0,
+0xc0f02, 0x0, 0xc81020, 0xc81448,
+0x100f28, 0x1e0a224, 0x43, 0x900000,
+0x185308, 0x100f23, 0x1e0a270, 0x1000044,
+0x900000, 0x185308, 0x100f1e, 0x1e0a295,
+0x1e00044, 0x1900000, 0x185308, 0x100f19,
+0x1cb8000, 0x614c, 0x1132161, 0x198b21,
+0x100f14, 0x1e0a000, 0x3e, 0x199999a,
+0x185308, 0x100f0f, 0x1cb8000, 0x614c,
+0x1034161, 0x190330, 0x100f0a, 0x1e09f26,
+0xcccd00, 0x0, 0x185308, 0x100f05,
+0x1e09f66, 0xcccd00, 0x0, 0x185308,
+0x8e2202, 0x118208, 0x8e2242, 0x110306,
+0x1377fff, 0x1c80010, 0xc80020, 0x371220,
+0x100f04, 0xc80022, 0x100f02, 0xc80021,
+0x0, 0x70000, 0x1580000, 0x118bb17,
+0x0, 0x37fc17, 0x37f91f, 0x37fe37,
+0xc82214, 0xc82812, 0xc82410, 0x364401,
+0x364621, 0x365f01, 0x700802, 0xc80401,
+0x1020001, 0x1c0bce1, 0xc80620, 0x8e2060,
+0x11030c, 0x365f01, 0x0, 0x11b8000,
+0x80038, 0x365f01, 0x0, 0x11b0000,
+0x80008, 0x374801, 0x1008001, 0x1c0aedd,
+0x364621, 0xc91800, 0x14bffff, 0x1c02002,
+0x1c47f00, 0x208000, 0x60, 0x205300,
+0x365f21, 0x1020001, 0x1c08e17, 0x1646110,
+0x1310625, 0x1020001, 0x1c0bcf7, 0x1581fff,
+0x158bb14, 0x363c01, 0xc80801, 0x1581fff,
+0x118bb12, 0x3644a1, 0x364081, 0x363e21,
+0x365f01, 0x1020001, 0x1c0bd04, 0x36f807,
+0x8e2060, 0x118318, 0x363401, 0x1e08000,
+0x3d, 0x199999a, 0x190302, 0x36f887,
+0x14bffff, 0x1c52000, 0x1c47f00, 0x208000,
+0x61, 0xa0530a, 0x362401, 0x144ffff,
+0x1c44408, 0xc9180a, 0x8c1048, 0x1020001,
+0x1c08e17, 0x1638849, 0x184308, 0x808028,
+0x37f807, 0x36f807, 0x163886a, 0x1d81302,
+0x8e2040, 0x11820a, 0x36f807, 0x14bffff,
+0x1c122a1, 0x8e2040, 0x110205, 0x36f807,
+0x144ffff, 0x1c04400, 0x37f807, 0x363401,
+0x362421, 0x14bffff, 0x1c02000, 0x1c47f00,
+0x208000, 0x60, 0x205300, 0xc91802,
+0x36f827, 0x1020001, 0x1c08e17, 0x8c0002,
+0x37f807, 0x363821, 0x14bffff, 0x1c12002,
+0x1c47f00, 0x208000, 0x60, 0xa05302,
+0x362e81, 0x8c0002, 0x8c0200, 0x1020001,
+0x1c08cfd, 0x1e08000, 0x3f, 0xd89374,
+0x190302, 0x36fa87, 0x8c0040, 0x8e2200,
+0x118206, 0x364801, 0xc80420, 0x37f807,
+0x374821, 0x100f0e, 0x36f807, 0x374801,
+0x364a01, 0xb00000, 0x118303, 0x364201,
+0x100f02, 0xc80048, 0x36f887, 0x364a21,
+0x894048, 0x809002, 0x374a01, 0x36f807,
+0xb00000, 0x118324, 0x363401, 0x1e08000,
+0x46, 0x770000, 0x190302, 0x14bffff,
+0x1c02000, 0x1c47f00, 0x208000, 0x60,
+0x205300, 0x362481, 0x8c0040, 0xc91808,
+0x1020001, 0x1c08e17, 0x37fa07, 0x363621,
+0x14bffff, 0x1c12002, 0x1c47f00, 0x208000,
+0x60, 0xa05302, 0x8e2040, 0x118302,
+0x37fa27, 0x365f01, 0x36fa27, 0x1580080,
+0x588310, 0x36f807, 0x1020001, 0x1c0bd49,
+0x100f02, 0xc80020, 0x365f01, 0x760000,
+0x36f827, 0x11b8000, 0x80028, 0x365f01,
+0x0, 0x11b8000, 0xa0208, 0x36f91f,
+0x36fe37, 0x36fc17, 0x1581fff, 0x118bb17,
+0x70000, 0x1580001, 0x118bb17, 0x0,
+0x37ee17, 0x37f29f, 0x37f037, 0x37f4bf,
+0x37f277, 0x37f6ff, 0x37f457, 0x37f91f,
+0x35f657, 0x37fb3f, 0x37fd5f, 0x37fedf,
+0x1646100, 0xb1362d, 0x37ea2f, 0x37ed4f,
+0x37ef2f, 0x37f10f, 0x365f01, 0xc80620,
+0xc81620, 0x11b0000, 0x80008, 0x8e2060,
+0x1010010, 0xc0b15a, 0xc80020, 0x363421,
+0x1020001, 0x1c03c73, 0x365f01, 0x362421,
+0x11b0000, 0x80008, 0xc91802, 0x1020001,
+0x1c08e17, 0x363a81, 0x14bffff, 0x1c42008,
+0x1c47f00, 0x208000, 0x61, 0x205308,
+0x365aa1, 0x89420a, 0x362e61, 0x375a81,
+0x8c10c2, 0x365a81, 0x8c1040, 0x8e2068,
+0x110215, 0x1c2ffff, 0x1fffc00, 0x30060,
+0x984347, 0xc91802, 0x14b6102, 0x1003000,
+0xe80100, 0x14b7e00, 0x80200a, 0x14bffff,
+0x1c02000, 0x1c47f00, 0x208000, 0x60,
+0x205300, 0x1020001, 0x1c08e17, 0x880008,
+0x375a01, 0x363a01, 0x365c81, 0x14bffff,
+0x1c02000, 0x1c47f00, 0x208000, 0x60,
+0x205300, 0x890008, 0x375c01, 0x365c81,
+0xb00088, 0x110216, 0x8c0022, 0x1c2ffff,
+0x1fffc00, 0x30260, 0x184347, 0xc91800,
+0x14b7fff, 0x1c03002, 0xe80100, 0x14b7e00,
+0x802002, 0x14bffff, 0x1c02000, 0x1c47f00,
+0x208000, 0x60, 0x205300, 0x1020001,
+0x1c08e17, 0x880008, 0x375c01, 0x365f01,
+0x1e08000, 0x40, 0x13df3b8, 0x190300,
+0x11b0000, 0x80028, 0x8c4822, 0x8e2009,
+0x11010f, 0x1e08000, 0x41, 0x1140002,
+0x190300, 0x8e2009, 0x110109, 0x1e08000,
+0x41, 0x140002, 0x190300, 0x8e2009,
+0x110103, 0xc81a20, 0x100f02, 0xc81a21,
+0xc80209, 0x363601, 0xc80621, 0x14bffff,
+0x1c02000, 0x1c47f00, 0x208000, 0x60,
+0x205300, 0x8e2009, 0x1010000, 0x80b15a,
+0xb00011, 0x1010010, 0x80b15a, 0x364c01,
+0x8e2001, 0x110204, 0x365201, 0x8c0020,
+0x100f15, 0x364e21, 0x8e2041, 0x110206,
+0x890001, 0x365421, 0x362681, 0x808408,
+0x100f0d, 0x365001, 0x8e2001, 0x110206,
+0x890041, 0x362881, 0x365621, 0x808408,
+0x100f05, 0x890001, 0x365821, 0x362a81,
+0x808408, 0x365f01, 0x36ea2f, 0x8c0040,
+0x11b0000, 0x80028, 0xc91802, 0x1020001,
+0x1c08e17, 0x1e08000, 0x3f, 0x22,
+0x190302, 0x880040, 0x14b7fff, 0x1c3b000,
+0xe80177, 0x14b7e00, 0x83a000, 0xd40074,
+0x1010000, 0x100b073, 0xc80e21, 0x365f41,
+0x14bffff, 0x1c12007, 0x1c47f00, 0x208000,
+0x60, 0xa05302, 0x1581ffe, 0x198bb12,
+0x1581ffe, 0x158bb10, 0x365c81, 0x11b0000,
+0x800ac, 0x8c4028, 0x8c584a, 0x365a01,
+0x879608, 0x362e21, 0x1467fff, 0x1c02680,
+0x8c0040, 0x1020001, 0x1c0bbe2, 0x1447fff,
+0x1c0438b, 0xc81448, 0x14b7fff, 0x1c12000,
+0x14bffff, 0x1c02002, 0x89000b, 0x890001,
+0x14b7fff, 0x1c42000, 0x761008, 0x14bffff,
+0x1c32008, 0x890006, 0x8e2240, 0x118206,
+0xc80c0d, 0xd40064, 0x110103, 0x771008,
+0x890240, 0x365f01, 0x703202, 0x1377fff,
+0x1c80390, 0xc80806, 0x1580080, 0x588310,
+0x0, 0x36fea0, 0x707a46, 0xd320ca,
+0x11022d, 0x1377fff, 0x1c90513, 0x36ed0f,
+0x36ece7, 0x702202, 0x1377fff, 0x1c80510,
+0x76140a, 0x3600ba, 0x36026a, 0x360210,
+0x892a66, 0x36ea67, 0x1407fff, 0x1ceb05b,
+0x8c2acb, 0x3600e0, 0x365f01, 0x890ac1,
+0x1377fff, 0x1c80790, 0x80a01e, 0x143ffff,
+0x1ce6615, 0x1447fff, 0x1c30360, 0x370060,
+0x3634e1, 0x7072ee, 0x36ea67, 0x771e0f,
+0x365f01, 0x8c58cb, 0x1377fff, 0x1c80710,
+0x36ec67, 0x1407fff, 0x1ce661b, 0x144ffff,
+0x1c30360, 0x370060, 0xc80c04, 0xd320ca,
+0x1082d5, 0xc80c04, 0xd320ca, 0x110324,
+0x1377fff, 0x1cb0513, 0x36ed0f, 0xc80c2d,
+0xc82416, 0x1377fff, 0x1ca0510, 0x762c16,
+0xc82014, 0x762814, 0x3600ba, 0x365f51,
+0x762412, 0x707202, 0x76140a, 0x144ffff,
+0x1c785ed, 0x762c16, 0x14065b1, 0x18e40fb,
+0x144ffff, 0x1c785e8, 0x762814, 0x36ec17,
+0x8c2024, 0x1407fff, 0x1ceb0fb, 0x36ea17,
+0x143ffff, 0x1ceb1b4, 0x360015, 0x80acb1,
+0x370015, 0xd322ca, 0x1083e8, 0x365f01,
+0x6e320a, 0x1377fff, 0x1c90390, 0x3636e1,
+0x702846, 0x11b0000, 0x8026a, 0xd322c6,
+0x11853c, 0xd320ca, 0x1010000, 0x80b146,
+0x1377fff, 0x1ca0513, 0x36ed2f, 0x1377fff,
+0x1c80290, 0x36ece7, 0x1377fff, 0x1c90512,
+0x76140a, 0x3600bc, 0x36026c, 0x360212,
+0x897a66, 0x36ea67, 0x1407fff, 0x1ceb0fb,
+0x8c7acb, 0x3600e2, 0x890ac1, 0x80a01e,
+0x143ffff, 0x1ce661f, 0x1447fff, 0x1c30360,
+0x370060, 0x3634e1, 0x7070ae, 0x36ea67,
+0x760a05, 0x365f01, 0x8c58cb, 0x1377fff,
+0x1c80710, 0x36ec67, 0x1407fff, 0x1ce661b,
+0x1447fff, 0x1c30360, 0x370060, 0x365f01,
+0x1377fff, 0x1c90390, 0x0, 0x11b0000,
+0x8026a, 0xd320ca, 0x1082d2, 0x1008001,
+0x1c0b146, 0x11b0000, 0xa0208, 0xd32007,
+0x1010000, 0x80b15a, 0x1008001, 0x1c0afa9,
+0x770c0e, 0xd320ca, 0x11022d, 0x1377fff,
+0x1c90513, 0x36ed0f, 0x36ece7, 0x1377fff,
+0x1c80510, 0x76140a, 0x3600ba, 0x36026a,
+0x360210, 0x897a66, 0x36ea67, 0x1407fff,
+0x1ceb0fb, 0x8c7acb, 0x3600e0, 0x365f01,
+0x890ac1, 0x1377fff, 0x1c80290, 0x80a01e,
+0x143ffff, 0x1ce661f, 0x1447fff, 0x1c30360,
+0x370060, 0x3634e1, 0x7070ae, 0x36ea67,
+0x760a05, 0x365f01, 0x8c58cb, 0x1377fff,
+0x1c80710, 0x36ec67, 0x1407fff, 0x1ce661b,
+0x1447fff, 0x1c30360, 0x370060, 0x363661,
+0x770c06, 0xd320ca, 0x1082d5, 0x1377fff,
+0x1c80513, 0x36ed2f, 0x36ece7, 0x760c05,
+0x1377fff, 0x1c90512, 0x3600fb, 0x36ea17,
+0x76140a, 0x3600b8, 0x365f01, 0x37e8b7,
+0x164e142, 0x1b04617, 0xc8080b, 0x36e8b7,
+0x1377fff, 0x1c80290, 0x3600b2, 0x89608f,
+0x897a6f, 0x8000c4, 0x1407fff, 0x1ceb0fb,
+0x8c72c4, 0x143ffff, 0x1cee1be, 0x1447fff,
+0x1c70760, 0x3700e0, 0x363411, 0x36eae7,
+0x7008a1, 0x365f01, 0x8c7ac4, 0x1377fff,
+0x1c80090, 0x36ece7, 0x1407fff, 0x1ceeebf,
+0x1447fff, 0x1c70760, 0x3700e0, 0x365f01,
+0x1377fff, 0x1c90390, 0x0, 0x11b0000,
+0x802ea, 0xd322ca, 0x11026a, 0x36ed2f,
+0x1377fff, 0x1c80310, 0x3634e1, 0x760806,
+0x70724e, 0x36001b, 0x76140a, 0x1377fff,
+0x1c90712, 0x1377fff, 0x1ca0713, 0x37e8b7,
+0x164e152, 0x1b05603, 0xc80a0b, 0x36e8b7,
+0x36ea17, 0x36ece7, 0x36feb2, 0x36fefc,
+0x8958ab, 0x8978af, 0x1407fff, 0x1ceb0b5,
+0x1407fff, 0x1cef0f5, 0x8c72cb, 0x143ffff,
+0x1cee1fe, 0x1447fff, 0x1c70760, 0x3700e0,
+0x363411, 0x36eae7, 0x7030c1, 0x365f01,
+0x8c5acb, 0x1377fff, 0x1c80310, 0x36ece7,
+0x1407fff, 0x1ceeefb, 0x1447fff, 0x1c30760,
+0x370060, 0x365f01, 0x1377fff, 0x1c90390,
+0x0, 0x11b0000, 0x8026a, 0xd320ca,
+0x110234, 0x36ed2f, 0x1377fff, 0x1c80210,
+0x363461, 0x707246, 0x36ec17, 0x76140a,
+0x1377fff, 0x1ca0712, 0x1377fff, 0x1c90713,
+0x0, 0x3600ba, 0x36fe64, 0x36feea,
+0x897a6e, 0x3600e4, 0x892ac6, 0x1407fff,
+0x1ceb0fb, 0x36ea67, 0x1407fff, 0x1cef05e,
+0x8c702f, 0x143ffff, 0x1ce66be, 0x1447fff,
+0x1c30360, 0x370060, 0x363461, 0x703086,
+0x36eae7, 0x760804, 0x365f01, 0x8c0acf,
+0x1377fff, 0x1c80310, 0x36ece7, 0x1407fff,
+0x1ceeeb1, 0x1447fff, 0x1c30760, 0x370060,
+0x365f01, 0x1377fff, 0x1c90390, 0x0,
+0x11b0000, 0x8026a, 0xd320ca, 0x1082ce,
+0x760603, 0x363601, 0x6e420a, 0x14bffff,
+0x1c52003, 0x1c47f00, 0x208000, 0x61,
+0xa0530a, 0x14bffff, 0x1c02000, 0x1c47f00,
+0x208000, 0x60, 0x205300, 0x705848,
+0x8c0a2a, 0x8e2001, 0x1008010, 0x80af76,
+0x36ed4f, 0x16461b0, 0x316627, 0x363621,
+0x36ef2f, 0x365f11, 0x36f10f, 0x1020001,
+0x1c0bd6e, 0xc80e05, 0x34f657, 0xc80a07,
+0x36feff, 0xc81a0f, 0x36f477, 0xc80a07,
+0x36fd5f, 0x36fb3f, 0x36f91f, 0x36f277,
+0x36f037, 0x36ee17, 0x36f6ff, 0x36f4bf,
+0x36f29f, 0x1581ffe, 0x118bb17, 0x70000,
+0x1580000, 0x118bb17, 0x0, 0x37fa17,
+0x37fb1f, 0x37fd3f, 0x37ff5f, 0xc82a10,
+0xc82612, 0xc82214, 0x360c05, 0x14bffff,
+0x1c13023, 0x8e2040, 0x11820b, 0x365f05,
+0x364a85, 0x11b0000, 0x800a8, 0x8e220a,
+0x118303, 0x370003, 0x100f11, 0x370023,
+0x100f0f, 0xd0044a, 0x8e2040, 0x11030b,
+0x365f05, 0x364a85, 0x11b0000, 0x800a8,
+0x8e220a, 0x110203, 0x370003, 0x100f04,
+0x370023, 0x100f02, 0x370003, 0x365f05,
+0x0, 0x11b0000, 0x80008, 0xb00000,
+0x11830a, 0x364a25, 0xc91800, 0x890040,
+0x360083, 0x809002, 0x1020001, 0x1c08e17,
+0x370003, 0x100f03, 0xc80048, 0x370003,
+0x360003, 0xc80447, 0x8e2040, 0x118308,
+0xc8042d, 0x8e2040, 0x110202, 0x100f02,
+0xc80002, 0x370003, 0x100f02, 0x370023,
+0x360805, 0x1467fff, 0x1c00066, 0x370003,
+0x366005, 0x363025, 0x880040, 0x376005,
+0x1477fff, 0x1c24400, 0x118304, 0x144ffff,
+0x1c02680, 0x376005, 0x1e09fc0, 0x40,
+0x921fb6, 0x180b02, 0x366005, 0x8c0040,
+0x1020001, 0x1c07b7d, 0x360e25, 0x808401,
+0x1467fff, 0x1c00066, 0x370003, 0x366205,
+0x363225, 0x880040, 0x376205, 0x8e2020,
+0x118304, 0x144ffff, 0x1c02680, 0x376205,
+0x760442, 0x366205, 0x8c0040, 0x1020001,
+0x1c07b7d, 0x361025, 0x1c07fff, 0x1fffc00,
+0x30060, 0x980348, 0x1467fff, 0x1c00066,
+0x370003, 0x360a05, 0x370001, 0x365f05,
+0x0, 0x11b0000, 0x80008, 0xb00000,
+0x118303, 0x364a05, 0x376405, 0x36ff5f,
+0x36fd3f, 0x36fb1f, 0x36fa17, 0x1581fff,
+0x118bb17, 0x70000, 0xc82410, 0x361200,
+0x360022, 0x8e2002, 0x110102, 0x370002,
+0xc82410, 0x361400, 0x762412, 0x0,
+0x360022, 0x8e2002, 0x11011f, 0x370002,
+0x363420, 0x14bffff, 0x1c12002, 0x1c47f00,
+0x208000, 0x60, 0xa05302, 0x362480,
+0xc91808, 0x8c0002, 0x1020001, 0x1c08e17,
+0x374c00, 0x364c20, 0xc91802, 0x362600,
+0x1020001, 0x1c08e17, 0x375200, 0x364e00,
+0x364c20, 0x890040, 0x362620, 0x362880,
+0xc91800, 0x890048, 0x1020001, 0x1c08e17,
+0x375400, 0x1377fff, 0x1c92110, 0x361600,
+0x360022, 0x8e2002, 0x110122, 0x370002,
+0x363420, 0x14bffff, 0x1c12002, 0x1c47f00,
+0x208000, 0x60, 0xa05302, 0x362480,
+0xc91808, 0x8c0002, 0x1020001, 0x1c08e17,
+0x374e00, 0x364c20, 0x362880, 0x890040,
+0x362620, 0xc91800, 0x890048, 0x1020001,
+0x1c08e17, 0x375400, 0x365000, 0x364e20,
+0x890040, 0x362820, 0x362a80, 0xc91800,
+0x890048, 0x1020001, 0x1c08e17, 0x375600,
+0x1377fff, 0x1c92190, 0x361800, 0x360022,
+0x8e2002, 0x110121, 0x370002, 0x363420,
+0x14bffff, 0x1c12002, 0x1c47f00, 0x208000,
+0x60, 0xa05302, 0x362480, 0xc91808,
+0x8c0002, 0x1020001, 0x1c08e17, 0x375000,
+0x364e20, 0x362a80, 0x890040, 0x362820,
+0xc91800, 0x890048, 0x1020001, 0x1c08e17,
+0x375600, 0x362c00, 0x365020, 0x891040,
+0x362a80, 0xc91802, 0x890200, 0x1020001,
+0x1c08e17, 0x375800, 0x1580001, 0x1588312,
+0x1377fff, 0x1c82210, 0x10c8000, 0x140b281,
+0x360020, 0x360002, 0x8e2002, 0x110102,
+0x370000, 0x762412, 0x762010, 0x0,
+0x70000, 0x36f447, 0x36e8c7, 0x36ec87,
+0x1e46633, 0x1ffe000, 0x18498c, 0x1301311,
+0x1e46633, 0x1ffe000, 0x18498d, 0x1301313,
+0x1e46633, 0x1ffe000, 0x18498e, 0x1301315,
+0x165433f, 0x1e4d88b, 0x1b86677, 0x1ffe017,
+0x1fc0063, 0x591308, 0x1f36633, 0x1ffe010,
+0x80063, 0x58cb21, 0x173cabf, 0x1cd2100,
+0x14bcaaf, 0x1c12000, 0x14acfff, 0x1f02605,
+0x1f3e699, 0x1ffe02f, 0x1fc1f63, 0x190b02,
+0x128034, 0x1e47fff, 0x1ffe000, 0x1d9997,
+0x3b132e, 0x11b7ff9, 0x17fff07, 0x1b40c79,
+0x121634c, 0x10b1264, 0x98d310, 0x1b45210,
+0x1b6fc00, 0x31564, 0x98d330, 0x13b2443,
+0x716625, 0x1d150d, 0x1d05054, 0x2040,
+0x40160, 0x1184300, 0x1c5d233, 0x17dffc0,
+0x23f861, 0x198230a, 0x1c5e2dc, 0x71e047,
+0x1e00860, 0x1986302, 0x18062dc, 0x175c000,
+0x0, 0x0, 0x1d05054, 0x2040,
+0x40160, 0x1184300, 0x1c5ffff, 0x1ffffc0,
+0x23f861, 0x198230a, 0x1c5e2dc, 0x61a047,
+0x1e00860, 0x1986302, 0x1f3e2dc, 0x1658000,
+0x63, 0x990b1a, 0x1740000, 0x58eb1d,
+0x1bbffff, 0x1ffe000, 0x18e190, 0x30a318,
+0x118368, 0x1d0a65, 0x11b7ff8, 0x17fff07,
+0x1e47fff, 0x1ffe000, 0x18798e, 0x1313311,
+0x1b45232, 0x927884, 0x31264, 0x58d310,
+0x1e4ffff, 0x1ffe000, 0x202984, 0x1404301,
+0x1b40c79, 0x123634c, 0x10b1664, 0x98d312,
+0x1b85254, 0x1b6e0af, 0x1fc0860, 0xd90b1a,
+0x1d0f4a, 0x1d05211, 0x79e00e, 0x16fe80,
+0xa02c04, 0x1d05010, 0x2040, 0x80260,
+0x1984300, 0x1d0d010, 0x10439fb, 0x14b0761,
+0x180306, 0x1d05211, 0x17de041, 0x1f50460,
+0x1584300, 0x1d00000, 0x6110, 0x1c0260,
+0x184300, 0x1d031d, 0x1d0d233, 0x14d3874,
+0x1fb0461, 0x186b0d, 0x1d0d277, 0x493a3b,
+0x1430661, 0x1983300, 0x1806210, 0x71c000,
+0x0, 0x0, 0x1d0e2dc, 0x175fa3b,
+0x1430461, 0x1d83b07, 0x1d05010, 0x2047,
+0x1ffff60, 0x1985b03, 0x1d0e2ff, 0x10c39fb,
+0x14b0761, 0x180306, 0x1d05076, 0x1042041,
+0x1e90160, 0x184b01, 0x1d06299, 0x82041,
+0x1e90160, 0x1585b03, 0x1d0d232, 0x927874,
+0x1fb0461, 0x186b0d, 0x1d0d254, 0x1b6fa3b,
+0x1430661, 0x1983300, 0x1bbe210, 0x61a000,
+0x18b18b, 0x314314, 0x1d0e2dc, 0x165ba3b,
+0x1430461, 0x1d83b07, 0x1e4e299, 0x69a000,
+0x202984, 0x1404301, 0x1384fed, 0x181a09a,
+0x1748000, 0x98d31a, 0x1740000, 0x98eb1d,
+0x11b7ff8, 0x17fff07, 0x1e47fff, 0x1ffe000,
+0x189988, 0x1315310, 0x1372323, 0x492090,
+0x1b75254, 0x1b6e010, 0x40062, 0x1191310,
+0x1e08000, 0x5ff, 0x1fffffe, 0x18f31a,
+0x1e47fff, 0x1ffe000, 0x18a189, 0x1310311,
+0x1e47fff, 0x1ffe000, 0x1da197, 0x3b032e,
+0x1d05210, 0x124a040, 0x40160, 0xd84b01,
+0x1d05211, 0x12ca040, 0x40160, 0x1584300,
+0x1d07fff, 0x1ffe040, 0xc0360, 0x1984300,
+0x1d0d211, 0x16db85e, 0xfb0461, 0x1986b0d,
+0x1d05210, 0x165a040, 0x80260, 0x1984300,
+0x1d0d253, 0x3079fb, 0x14b0761, 0x180306,
+0x1d0ffff, 0x1fffa3b, 0x1430661, 0x1983300,
+0x77021d, 0x1d0e211, 0xfbfa3b, 0x1430761,
+0x1d83b03, 0x1d011d, 0x1d05010, 0x10c2008,
+0x17ba080, 0x984b62, 0x1d05213, 0x1206047,
+0x507260, 0x15bab00, 0x1d062dd, 0xfbe041,
+0x1ed0260, 0x1984300, 0x1d0d010, 0x10c385e,
+0xfb0461, 0x1986b0d, 0x1d05251, 0x35a040,
+0x1bf8660, 0x198437c, 0x1d0e2ff, 0xfbf9fb,
+0x14b0761, 0x180306, 0x1d0e277, 0xfbfa3b,
+0x1430661, 0x1983300, 0x1d0e211, 0xfbfa3b,
+0x1430761, 0x1d83b03, 0x18062dd, 0xfbc000,
+0x0, 0x0, 0x1e462ff, 0xfbe000,
+0x1da190, 0x3b0320, 0x1b86277, 0xfbe047,
+0x1f80962, 0x191b17, 0x11b7fe7, 0x17ffc77,
+0x1e452ba, 0x2000, 0x1d9990, 0x3b1320,
+0x1003103, 0x400000, 0x1643103, 0x749a83,
+0x1653107, 0xf49a83, 0x1e47fff, 0x1ffe000,
+0x18e9b8, 0x1315370, 0x1e47fff, 0x1ffe000,
+0x18d9b8, 0x1313370, 0x1e47fff, 0x1ffe000,
+0x18c9b8, 0x1311370, 0x1643003, 0x717621,
+0x70000, 0x1580000, 0x158bb17, 0x0,
+0x37f817, 0x37f89f, 0x37fa37, 0x37fabf,
+0x37fc77, 0x37fcff, 0x37ff1f, 0x1646121,
+0x1b11621, 0x1e09e8b, 0xbb99ba, 0x1205bc0,
+0x185302, 0x1e09f9b, 0x193de40, 0x0,
+0x18430f, 0xc80248, 0x8c5247, 0x8c1047,
+0xc9180f, 0x1407fff, 0x1ce272a, 0x881202,
+0x8c0040, 0x1020001, 0x1c08e17, 0x1020001,
+0x1c07cb1, 0x164e110, 0x30c601, 0x1020001,
+0x1c08e17, 0xc80400, 0x880022, 0x164e110,
+0x30c601, 0x1020001, 0x1c08e17, 0xc80600,
+0x1e0de16, 0x1ab9f3f, 0x14a64c2, 0x180308,
+0x1e0a060, 0x3f, 0x1d87fcc, 0x18330a,
+0x897041, 0x8c5862, 0x8c1207, 0x8c0007,
+0x8c486e, 0x808e02, 0x890240, 0x8800c0,
+0x1020001, 0x1c0877e, 0x8c4229, 0x8c52e3,
+0x881029, 0x1467fff, 0x1c33109, 0x8f1008,
+0x87802a, 0xc91802, 0x370281, 0x370061,
+0x1020001, 0x1c08e17, 0x8c0003, 0x8f040b,
+0x895029, 0x884220, 0x880020, 0x8c1048,
+0x8c426a, 0x8c0260, 0x370821, 0x370681,
+0x370401, 0x36ff1f, 0x36fc77, 0x36fa37,
+0x36fcff, 0x36f817, 0x36fabf, 0x36f89f,
+0x1581fff, 0xd8bb17, 0x70000, 0x164e981,
+0x1b04641, 0x1d0001, 0x1406981, 0x18e4884,
+0xc90004, 0x70000, 0x36f507, 0x1f3f080,
+0x18024c7, 0x1fc2e63, 0x1190b00, 0x1f58000,
+0x628c, 0x1031061, 0x1991306, 0x1eaffff,
+0x1fffc00, 0x30e64, 0x118730e, 0x1e9d610,
+0x71c000, 0x60, 0x1188314, 0x1d0e08,
+0x128307, 0x1643985, 0xb16629, 0x11bfff5,
+0xffe20, 0x100411c, 0x1800000, 0x1e9d610,
+0x71c000, 0x60, 0x1188314, 0x1f5d655,
+0x492057, 0x1f01c61, 0x1992306, 0x118321,
+0x1d0e20, 0x1e9d610, 0x71c000, 0x60,
+0x1188314, 0x128307, 0x1643985, 0xb16629,
+0x11bfff5, 0xffe20, 0x100411c, 0x1800000,
+0x1e9d610, 0x71c000, 0x60, 0x1188314,
+0x128307, 0x1643985, 0xb16629, 0x11bfff5,
+0xffe20, 0x100411c, 0x1800000, 0x169b101,
+0x21014, 0x128307, 0x1643985, 0xb16629,
+0x11bffe5, 0xffc20, 0x100411c, 0x1800000,
+0x1003985, 0x800000, 0x1387fff, 0x1cc2022,
+0x1f58000, 0x638c, 0x10b1c61, 0x1991b06,
+0x11830d, 0x169b101, 0x21014, 0x1d0e08,
+0x128307, 0x1643985, 0xb16629, 0x11bffe5,
+0xffc20, 0x100411c, 0x1800000, 0x169b101,
+0x21014, 0x1b85655, 0x492057, 0x1e41e61,
+0x1993b06, 0x1f58000, 0x638c, 0x10b1c61,
+0x199230e, 0x11830d, 0x169b101, 0x21014,
+0x1d0e08, 0x128307, 0x1643985, 0xb16629,
+0x11bffc5, 0xff820, 0x100411c, 0x1800000,
+0x169b101, 0x21014, 0x1620000, 0x1da3b4,
+0x70000, 0x36f547, 0x1f38000, 0x768c,
+0x1032e63, 0x1190b00, 0x1620000, 0x58d318,
+0x1d0003, 0x1002981, 0x0, 0x1004101,
+0x800000, 0x1620000, 0x1da3b4, 0x70000,
+0x1620000, 0x58d318, 0x540585, 0x10d0000,
+0xb4af, 0x1c10000, 0x618d, 0x1ab7560,
+0x11b8370, 0x880284, 0x70000, 0x1647fff,
+0x1fae6d1, 0x360444, 0x1e47fff, 0x1ffe000,
+0x18f190, 0x3b6304, 0x360364, 0x10d0000,
+0xb4c3, 0x1805298, 0x17d8000, 0x0,
+0x0, 0x1806388, 0x7dc000, 0x0,
+0x0, 0x370364, 0x1647fff, 0x1fb6641,
+0x70000, 0x138432f, 0x1c22200, 0x13ccfef,
+0x1f04609, 0x164476f, 0x1f0362b, 0x100477f,
+0x1c00000, 0x13ce979, 0x1b04609, 0x1e474fc,
+0x1c02000, 0x18d190, 0x1318321, 0x1006989,
+0x1800000, 0x1006999, 0x1800000, 0x16468a8,
+0x314609, 0x340036, 0x340406, 0x3408b6,
+0x1b77409, 0x2008, 0x80062, 0x1590b16,
+0x340221, 0x340461, 0x3406e1, 0x1c07fff,
+0x1fffc00, 0x30461, 0x980b20, 0x1446914,
+0x105058a, 0x1c00c31, 0x10a604c, 0x1030461,
+0x581304, 0x1c40000, 0x614c, 0x5b0a61,
+0x5b6309, 0x1416924, 0x130ba15, 0x1c40000,
+0x612d, 0x1630961, 0x180308, 0x1c17fff,
+0x1ffe047, 0x1f3f960, 0x118330f, 0x1c40000,
+0x610c, 0x30861, 0x1db530f, 0x1c17fff,
+0x1ffe040, 0x860, 0x1187307, 0x1c40000,
+0x61ed, 0x1530f60, 0x1d81b07, 0x1c00c31,
+0x107608c, 0x630661, 0x980b20, 0x1c4748a,
+0x803fef, 0x1e3fd61, 0x985b0a, 0x1c00c39,
+0x10a604c, 0x1030661, 0x581306, 0x1c40000,
+0x614c, 0x5b0a61, 0x5b6309, 0x1406924,
+0x123f54a, 0x1c40000, 0x612d, 0x1630961,
+0x180308, 0x1c07ca0, 0x3a27, 0x1430661,
+0x1d82306, 0x1c40000, 0x610c, 0x30861,
+0x1db530f, 0x1c07ce0, 0x3a20, 0x430660,
+0x1d86306, 0x1c40000, 0x61ed, 0x1530f60,
+0x1d81b07, 0x1d1449, 0x1c00c39, 0x10760cc,
+0x730461, 0x980b20, 0x1c4748a, 0x803fef,
+0x1e3fd61, 0x985b0a, 0x1c00c31, 0x10a604c,
+0x1030461, 0x581304, 0x1c40000, 0x614c,
+0x5b0a61, 0x5b6309, 0x1416924, 0x130ba15,
+0x1c40000, 0x612d, 0x1630961, 0x180308,
+0x1c17cb0, 0x2047, 0x1f3f960, 0x118330f,
+0x1c40000, 0x610c, 0x30861, 0x1db530f,
+0x1c17cf0, 0x2040, 0x860, 0x1187307,
+0x1c40000, 0x61ed, 0x1530f60, 0x1d81b07,
+0x1c00c31, 0x107608c, 0x630661, 0x980b20,
+0x1c4748a, 0x803fef, 0x1e3fd61, 0x985b0a,
+0x1c00c39, 0x10a604c, 0x1030661, 0x581306,
+0x1c40000, 0x614c, 0x5b0a61, 0x5b6309,
+0x1406924, 0x123f54a, 0x1c40000, 0x612d,
+0x1630961, 0x180308, 0x1c07ca0, 0x3a27,
+0x1430661, 0x1d82306, 0x1c40000, 0x610c,
+0x30861, 0x1db530f, 0x1c07ce0, 0x3a20,
+0x430660, 0x1d86306, 0x1c40000, 0x61ed,
+0x1530f60, 0x1d81b07, 0x1407960, 0xee76e,
+0x10079e0, 0x0, 0x350011, 0x350221,
+0x350461, 0x3506e1, 0x11b7ff5, 0x17fff57,
+0x11a7fe5, 0x17ffc37, 0x11a7fd7, 0x17ffa77,
+0x11a7fc4, 0x17ff817, 0x1387fff, 0x1cba217,
+0x70000, 0x1646925, 0x1b1c643, 0x10c8000,
+0x140b59b, 0x144ffff, 0x1c27402, 0x1466925,
+0x1820004, 0x1007941, 0x1800000, 0x70000,
+0x14bffff, 0x1c02000, 0x1620000, 0x58d31a,
+0x10c8000, 0x140b5a9, 0xc90460, 0x1c07fff,
+0x1fffc00, 0x30460, 0x1ba302, 0x1007941,
+0x1800000, 0x70000, 0x1e47fff, 0x1ffe000,
+0x185189, 0x1302311, 0x164455f, 0x1f02633,
+0x100752f, 0x1800000, 0x1e45255, 0x7de000,
+0x18e190, 0x131b321, 0x13be983, 0x1b00601,
+0x1c60000, 0x618d, 0x1bb0a60, 0x1184302,
+0x1806298, 0x75c000, 0x0, 0x0,
+0x10d0000, 0xb5cc, 0x1805314, 0xfdc000,
+0x0, 0x0, 0x1d00000, 0x618d,
+0x1bb0860, 0x1185378, 0x1806298, 0x75c000,
+0x0, 0x0, 0x36ff97, 0x11b7fe9,
+0x17ffd17, 0x1387fff, 0x1cba117, 0x70000,
+0x1580000, 0x118bb17, 0x0, 0x37fa17,
+0x37fa9f, 0x37fc37, 0x37fcbf, 0x37ff1f,
+0x1646100, 0xb11621, 0xc81202, 0xc80001,
+0xc8062d, 0x1020001, 0x1c07b7d, 0x8c1069,
+0xc91802, 0x1020001, 0x1c08e17, 0xc80448,
+0x884040, 0x890002, 0xc91808, 0x1020001,
+0x1c08e17, 0x1646110, 0x309601, 0x885849,
+0x1020001, 0x1c07bb0, 0x8c100b, 0x8f1009,
+0x14bffff, 0x1c530a1, 0x370281, 0x89004b,
+0x370021, 0x8c0240, 0x370801, 0x8c4060,
+0x370681, 0x370401, 0x36ff1f, 0x36fc37,
+0x36fa17, 0x36fcbf, 0x36fa9f, 0x1581fff,
+0x118bb17, 0x70000, 0x1647fff, 0x1fae6d1,
+0x360444, 0x1647fff, 0x1fb6609, 0x360364,
+0x10d0000, 0x80b612, 0x1466945, 0x1866680,
+0x1806388, 0x7dc000, 0x0, 0x0,
+0x370364, 0x1647fff, 0x1fb6641, 0x70000,
+0x1580000, 0x158bb17, 0x0, 0x37fb1f,
+0x37fd3f, 0x37ff5f, 0x371940, 0x1377fff,
+0x1c92196, 0x1377fff, 0x1ca4016, 0x37f72f,
+0xc82410, 0x37f94f, 0x762412, 0x1377fff,
+0x1ca2210, 0x360316, 0x370110, 0x36f71f,
+0xc82a12, 0xc82611, 0x1c0303, 0x1006507,
+0x1800000, 0x100750b, 0x1800000, 0x36f92f,
+0xc82614, 0xc82212, 0x1c0303, 0x1006503,
+0x1800000, 0x1007507, 0x1800000, 0x360006,
+0x370e00, 0x360120, 0x16a0000, 0x189304,
+0x110106, 0x360e20, 0x360202, 0x1020001,
+0x1c08de0, 0x371000, 0x360526, 0xc80023,
+0x371320, 0x360526, 0x371520, 0x360e20,
+0x7d0002, 0xe90200, 0x371600, 0x36ff5f,
+0x36fd3f, 0x36fb1f, 0x1581fff, 0xd8bb17,
+0x70000, 0x1580002, 0xd8bb17, 0x0,
+0x37e51f, 0x37e73f, 0x37e95f, 0xc82210,
+0x37db2f, 0x1581ffd, 0x198bb10, 0x1581ffd,
+0x198bb15, 0x360e01, 0x360132, 0xe90100,
+0x370330, 0x37dd37, 0x1020001, 0x1c08a35,
+0x1581ffe, 0x58bb12, 0x1581ffe, 0x58bb10,
+0x37dd2f, 0x370405, 0x360e21, 0x36db2f,
+0xe90120, 0x361952, 0x370350, 0x37e357,
+0x1020001, 0x1c08a35, 0x36dd0f, 0x1581ffe,
+0x58bb14, 0x762411, 0x370400, 0x1377fff,
+0x1c82211, 0x360e01, 0x37df4f, 0x1581ffe,
+0x118bb16, 0xc82810, 0x1c0303, 0x1006529,
+0x1800000, 0x100752d, 0x1800000, 0x1581ffd,
+0x198bb10, 0x1581ffd, 0x158bb14, 0x37e14f,
+0x1581ffe, 0x1d8bb16, 0xc82812, 0x1c0303,
+0x1006529, 0x1800000, 0x100752d, 0x1800000,
+0x36df2f, 0x1581fff, 0x98bb16, 0xc82812,
+0x1c0303, 0x1006529, 0x1800000, 0x100752d,
+0x1800000, 0x1581fff, 0x158bb14, 0xc82410,
+0x1c0303, 0x1006525, 0x1800000, 0x1007529,
+0x1800000, 0xc82013, 0x36e14f, 0xc82415,
+0x1020001, 0x1c08eb6, 0x360141, 0x16a0000,
+0x18a304, 0x110120, 0xc82013, 0xc82415,
+0x361021, 0x360e01, 0x1020001, 0x1c0c36f,
+0x36db0f, 0x0, 0x360d00, 0x169ffff,
+0x1c21190, 0x118109, 0x361901, 0xc82413,
+0x360e01, 0xe90100, 0x37e30f, 0x1020001,
+0x1c03c84, 0x100f02, 0x37e33f, 0x36db0f,
+0xc82815, 0x360e01, 0x1580001, 0x588b16,
+0x36e32f, 0x360d00, 0x1020001, 0x1c0c3bf,
+0x100f07, 0x36db0f, 0xc82815, 0xc82413,
+0x360e01, 0x360d00, 0x130f07, 0x36e95f,
+0x36e73f, 0x36e51f, 0x1581ffd, 0x158bb17,
+0x70000, 0xc80400, 0x14bffff, 0x1c42002,
+0x1c47f00, 0x208000, 0x61, 0x205308,
+0xe9022a, 0xc8002d, 0xc91808, 0x77100a,
+0x1020001, 0x1c08e17, 0x1377fff, 0x1cb0410,
+0xe9032a, 0x1377fff, 0x1ca0414, 0x1377fff,
+0x1c80412, 0xc80420, 0xd400a4, 0x118412,
+0x1467fff, 0x1c40069, 0x1377fff, 0x1c93016,
+0x1377fff, 0x1ca3014, 0x760402, 0x370086,
+0x1377fff, 0x1cb3012, 0x1467fff, 0x1c40060,
+0x1377fff, 0x1c83010, 0x370082, 0xd32242,
+0x1005f0, 0x0, 0x70000, 0x1580000,
+0x118bb17, 0x0, 0x37fb1f, 0x37fd3f,
+0x37ff5f, 0x371940, 0xc82416, 0x1377fff,
+0x1c8a210, 0xc82810, 0x37f91f, 0x1377fff,
+0x1cb2192, 0x762814, 0x1377fff, 0x1c8c012,
+0x360332, 0x370130, 0xc82a14, 0xc82616,
+0x1c0303, 0x1006507, 0x1800000, 0x100750b,
+0x1800000, 0x36f94f, 0xc82614, 0xc82c11,
+0x1c0303, 0x100650d, 0x1800000, 0x1007507,
+0x1800000, 0x360002, 0x370e00, 0x360140,
+0x16a0000, 0x18a304, 0x110106, 0x360e20,
+0x360204, 0x1020001, 0x1c08de0, 0x371000,
+0x360542, 0xc80023, 0x371340, 0x360522,
+0x371520, 0x360e20, 0x7d0002, 0xe90200,
+0x371600, 0x36ff5f, 0x36fd3f, 0x36fb1f,
+0x1581fff, 0x118bb17, 0x70000, 0x1580002,
+0xd8bb17, 0x0, 0x37e11f, 0x37e33f,
+0x37e55f, 0xc82610, 0x362502, 0x37db0f,
+0x360d02, 0x37dd0f, 0x360122, 0xc82a12,
+0x169ffff, 0x1c21012, 0x118107, 0x360e03,
+0x361903, 0xe90200, 0xc82a10, 0x1020001,
+0x1c03c84, 0x360113, 0x16a0000, 0x188b04,
+0x11010b, 0x1580001, 0x589b16, 0xc82815,
+0x361023, 0x36db2f, 0x360e03, 0x36dd0f,
+0x1020001, 0x1c0c40f, 0x100f09, 0x1580001,
+0x589b16, 0xc82815, 0x36db2f, 0x36dd0f,
+0x360e03, 0x1020001, 0x1c0c480, 0x1581ffd,
+0x198bb10, 0x36dd2f, 0x1581ffd, 0x198bb11,
+0x360e03, 0x37dd27, 0xe90100, 0x370320,
+0x1020001, 0x1c08a35, 0x1581ffe, 0x58bb10,
+0x360e23, 0x370401, 0x36db2f, 0xe90120,
+0x1581ffe, 0x58bb15, 0x370320, 0x37e327,
+0x1020001, 0x1c08a35, 0x1377fff, 0x1c92213,
+0x1581ffe, 0x58bb10, 0x370405, 0x360e03,
+0x762613, 0x1581ffe, 0x118bb16, 0xc82812,
+0x1c0303, 0x1006529, 0x1800000, 0x100752d,
+0x1800000, 0x1581ffd, 0x198bb12, 0x1581ffd,
+0x158bb14, 0x37df4f, 0x1581ffe, 0x1d8bb16,
+0xc82813, 0x1c0303, 0x1006529, 0x1800000,
+0x100752d, 0x1800000, 0x1581fff, 0x98bb16,
+0xc82810, 0x1c0303, 0x1006529, 0x1800000,
+0x100752d, 0x1800000, 0x1581fff, 0x158bb14,
+0xc82012, 0x1c0303, 0x1006521, 0x1800000,
+0x1007529, 0x1800000, 0x36df4f, 0x36db2f,
+0x36dd0f, 0x1020001, 0x1c08e29, 0x36e55f,
+0x36e33f, 0x36e11f, 0x1581ffd, 0x158bb17,
+0x70000, 0x1e46633, 0x1ffe000, 0x18498c,
+0x1301311, 0x164433f, 0x1f1c643, 0x164c77f,
+0x1f0b691, 0x1647fff, 0x1fa96f1, 0xc82278,
+0x1647fff, 0x1fb16d1, 0x16469cd, 0x1b19641,
+0x13be9ad, 0x1b00601, 0x1d0814, 0x1c4f4c6,
+0x1c02040, 0x260, 0x198630a, 0x1c05232,
+0x1727a95, 0x130460, 0x198730c, 0x1467b13,
+0x1818209, 0x1d0005, 0x1c05232, 0x1727a95,
+0x130460, 0x198730c, 0x1c66262, 0x73c000,
+0x60, 0xd82309, 0x164f931, 0x1a88e15,
+0x37ff14, 0x1647fff, 0x1fb1641, 0x11b7ff5,
+0x17ffe37, 0x11b7fec, 0x17ffd17, 0x11b7fd4,
+0x17ffa17, 0x1581fff, 0x158bb17, 0x70000,
+0x371540, 0xc82810, 0xc82416, 0x1c0903,
+0x1006505, 0x1800000, 0x1007509, 0x1800000,
+0x360320, 0x16a0000, 0x189304, 0x110106,
+0x360202, 0x360020, 0x1020001, 0x1c08de0,
+0x371200, 0x0, 0x70000, 0x1580002,
+0xd8bb17, 0x0, 0x37df1f, 0x37e13f,
+0x37e35f, 0xc82610, 0x362502, 0x37db0f,
+0x360d02, 0x37dd0f, 0x360152, 0x169ffff,
+0x1c21015, 0x118108, 0x36dd2f, 0x360003,
+0x361503, 0xe90100, 0xc82a10, 0x1020001,
+0x1c03c84, 0x360313, 0x16a0000, 0x188b04,
+0x11010a, 0x36db2f, 0xc82815, 0x361223,
+0x36dd0f, 0x360003, 0x360563, 0x1020001,
+0x1c0c4d0, 0x100f08, 0xc82815, 0x360563,
+0x36db2f, 0x36dd0f, 0x360003, 0x1020001,
+0x1c0c533, 0x1581ffd, 0x198bb10, 0x36dd2f,
+0x1581ffd, 0x198bb11, 0x360003, 0x37dd27,
+0xe90100, 0x370320, 0x1020001, 0x1c08a35,
+0x1581ffe, 0x58bb10, 0xc80400, 0x36db2f,
+0x360003, 0xe90100, 0x1581ffe, 0x58bb15,
+0x370320, 0x37e327, 0x370421, 0x1020001,
+0x1c08a35, 0x1377fff, 0x1c84013, 0x1377fff,
+0x1c92193, 0x1581ffe, 0x58bb16, 0x370405,
+0x1581ffe, 0x118bb11, 0xc82810, 0x360003,
+0x1c0303, 0x1006529, 0x1800000, 0x1007523,
+0x1800000, 0x1581ffd, 0x198bb10, 0x1581ffe,
+0x1d8bb11, 0xc82812, 0x1c0303, 0x1006529,
+0x1800000, 0x1007523, 0x1800000, 0x1581fff,
+0x98bb11, 0xc82416, 0x1c0303, 0x1006525,
+0x1800000, 0x1007523, 0x1800000, 0x1581ffd,
+0x158bb14, 0x1581fff, 0x158bb16, 0xc82410,
+0x1c0303, 0x1006525, 0x1800000, 0x100752d,
+0x1800000, 0x36db2f, 0x36dd0f, 0x1020001,
+0x1c08e29, 0x36e35f, 0x36e13f, 0x36df1f,
+0x1581ffd, 0x158bb17, 0x70000, 0x1e47fff,
+0x1ffe000, 0x185189, 0x1302311, 0x164455f,
+0x1f02633, 0x100752f, 0x1800000, 0x1e45255,
+0x7de000, 0x18e190, 0x131b321, 0x13be983,
+0x1b00601, 0x1c60000, 0x618d, 0x1bb0a60,
+0x1184302, 0x1c40000, 0x618d, 0x12b0c60,
+0x11b0304, 0x1806298, 0x75c000, 0x0,
+0x0, 0x10d0000, 0xb8a1, 0x1805314,
+0xfdc000, 0x0, 0x0, 0x1d00000,
+0x618d, 0x1bb0860, 0x1185378, 0x1c40000,
+0x618d, 0x12b0c60, 0x11b0304, 0x1806298,
+0x75c000, 0x0, 0x0, 0x36ff97,
+0x11b7fe9, 0x17ffd17, 0x1387fff, 0x1cba117,
+0x70000, 0xc82410, 0x360080, 0x762412,
+0x0, 0x13be5a5, 0x1b02605, 0x80d00a,
+0xd40024, 0x1003fb, 0xc80008, 0x0,
+0x70000, 0xc82410, 0x1447fff, 0x1c40060,
+0x762412, 0x0, 0x13be5a5, 0x1b02605,
+0x80d00a, 0xd40124, 0x1003fb, 0xc80008,
+0x0, 0x70000, 0x1580000, 0xd8bb17,
+0x0, 0x37fa17, 0x37fb1f, 0x37fc37,
+0x37fd3f, 0x37ff5f, 0xc82210, 0x1580003,
+0x988b16, 0x362f01, 0x360201, 0x360146,
+0x14b7fff, 0x1c0b000, 0xe80111, 0x14b7e00,
+0x80a000, 0x169ffff, 0x1c21210, 0x118204,
+0x1387fff, 0x1c01210, 0x100f06, 0x360406,
+0x1377fff, 0x1c80010, 0x1387fff, 0x1c01210,
+0x361021, 0xd32040, 0x11021a, 0x362f01,
+0x363141, 0x1387fff, 0x1c01210, 0x701040,
+0x110203, 0x363801, 0x6e1002, 0x1580003,
+0x988b10, 0xc80020, 0xd40014, 0x11840a,
+0x360340, 0x760000, 0x1377fff, 0x1ca0114,
+0x370140, 0x1377fff, 0x1c82190, 0xd32020,
+0x1005f8, 0xc80020, 0x372001, 0x100f03,
+0xc80022, 0x372001, 0x1580003, 0x988b15,
+0xc82612, 0xc80620, 0xd40014, 0x11840c,
+0x360103, 0xc82415, 0x361001, 0x1020001,
+0x1c0c75c, 0x762613, 0x1377fff, 0x1caa195,
+0x760603, 0xd32023, 0x1005f6, 0x36ff5f,
+0x36fd3f, 0x36fb1f, 0x36fc37, 0x36fa17,
+0x1581fff, 0x158bb17, 0x70000, 0x1580000,
+0x98bb17, 0x0, 0x37fd1f, 0x37ff3f,
+0xc82210, 0xc82612, 0x362001, 0xd40204,
+0x118143, 0x1621cd2, 0x1d88310, 0x361541,
+0x169ffff, 0x1c21014, 0x118112, 0x1580003,
+0x988b12, 0xc82013, 0x360201, 0x14b7fff,
+0x1c43000, 0xe80188, 0x14b7e00, 0x842000,
+0x3610a1, 0x361761, 0x361e21, 0x362801,
+0x1020001, 0x1c0c82b, 0x372801, 0x100f11,
+0x1580003, 0x988b12, 0xc82013, 0x360201,
+0x14b7fff, 0x1c43000, 0xe80188, 0x14b7e00,
+0x842000, 0x3610a1, 0x361761, 0x361e21,
+0x362801, 0x1020001, 0x1c0c76f, 0x372801,
+0x1580005, 0x1188b10, 0xc82413, 0x360221,
+0xc80020, 0xb00022, 0x110260, 0x360142,
+0x762412, 0x760000, 0x361081, 0x14bffff,
+0x1c12000, 0x1c47f00, 0x208000, 0x60,
+0xa05302, 0x1377fff, 0x1ca0414, 0x0,
+0x36fe84, 0x1007581, 0x1800000, 0x360281,
+0x8e2202, 0x1082ee, 0x100f4c, 0x361001,
+0xc80420, 0x361e81, 0x14bffff, 0x1c02000,
+0x1c47f00, 0x208000, 0x60, 0x205300,
+0x3628a1, 0x80d00a, 0x14b7fff, 0x1c02008,
+0x14bffff, 0x1c52000, 0x894248, 0x372881,
+0x360281, 0xb00088, 0x110238, 0x1377fff,
+0x1c80111, 0x1377fff, 0x1c90113, 0x361081,
+0x3658a0, 0x360102, 0xd40084, 0x11010a,
+0x1e08000, 0x3f, 0xfb645a, 0x190306,
+0x13bf5a1, 0x1b08611, 0x8c50ca, 0xd40084,
+0x1081fc, 0x1377fff, 0x1c80111, 0xc81023,
+0x7d4202, 0x3758a0, 0x1377fff, 0x1c80411,
+0x1580003, 0x988312, 0xc82012, 0x360142,
+0x1377fff, 0x1ca0014, 0x370140, 0x360342,
+0x360482, 0x1377fff, 0x1ca0414, 0x360120,
+0x169ffff, 0x1c21212, 0x118205, 0xd01008,
+0x1377fff, 0x1c90412, 0x370120, 0x760402,
+0x360281, 0x14bffff, 0x1c52002, 0x1c47f00,
+0x208000, 0x61, 0xa0530a, 0x8e220a,
+0x110202, 0x100fca, 0x36ff3f, 0x36fd1f,
+0x1581fff, 0x198bb17, 0x70000, 0x1620000,
+0x58f31a, 0x1e47fff, 0x1ffe000, 0x1d5189,
+0x3b2300, 0x1e47fff, 0x1ffe000, 0x18e190,
+0x130a320, 0xe90100, 0x137ffff, 0x1c02000,
+0x1d0821, 0x540585, 0x1b47fff, 0x1fffc00,
+0x31460, 0x985374, 0x1b47fff, 0x1fffc00,
+0x31660, 0x985374, 0x1d0010, 0x1006989,
+0x0, 0x1d0205, 0x1c87fff, 0x1ffe000,
+0x1871be, 0x306308, 0x1c8f4c4, 0x1003a22,
+0x430460, 0x1982304, 0x1b47fff, 0x1fffc00,
+0x31460, 0x985374, 0x1b47fff, 0x1fffc00,
+0x31660, 0x985374, 0x1647fff, 0x1f12755,
+0x911844, 0x13b7941, 0x1b0a615, 0x1647fff,
+0x1fb2641, 0x70000, 0x370320, 0x370120,
+0x370400, 0x70000, 0xd40004, 0x11010c,
+0x360020, 0x770000, 0x360082, 0xd32202,
+0x110103, 0x700202, 0x100f06, 0x762010,
+0x762412, 0xd40004, 0x1081f6, 0xc80020,
+0x0, 0x70000, 0x1638ff0, 0x181302,
+0xce4040, 0xd32048, 0x110103, 0xc80020,
+0x70000, 0x1e08000, 0x0, 0xfffffe,
+0x190302, 0x1677fff, 0x1d00100, 0x1e47f00,
+0xc06000, 0x180190, 0x1300320, 0x70000,
+0x770000, 0x1e4ffff, 0x1ffe000, 0x18c190,
+0x1306320, 0x1d020a, 0x1646940, 0x314621,
+0x1d0001, 0x1c8ffff, 0x1fffc00, 0x3046e,
+0x182304, 0x13b7848, 0x310629, 0x148ffff,
+0x1ce6466, 0x1477fff, 0x1c24406, 0x108302,
+0x3701f2, 0x0, 0x70000, 0x0,
+0x70000, 0x1e46677, 0x1ffe000, 0x18518c,
+0x1302311, 0x1e46655, 0x1ffe000, 0x18518d,
+0x1302313, 0x1e46655, 0x1ffe000, 0x18d990,
+0x1319321, 0x164433f, 0x1f18643, 0x173cfff,
+0x1c5a080, 0x360310, 0x360530, 0x360100,
+0x340a82, 0x340002, 0x100410f, 0x1c00000,
+0x340c82, 0x340202, 0x100410f, 0x1c00000,
+0x340e82, 0x340402, 0x100410f, 0x1c00000,
+0x341082, 0x340602, 0x100410f, 0x1c00000,
+0x341282, 0x340802, 0x100410f, 0x1c00000,
+0x1e01fa0, 0x3f, 0x19999a, 0x180308,
+0x1e00000, 0x3f, 0x19999a, 0x180b09,
+0x1377fff, 0x1c9a013, 0x164fe00, 0x641c01,
+0x1647e00, 0x713621, 0x1387b9f, 0x1804097,
+0x1e47fff, 0x1ffe000, 0x1d919f, 0x13aa300,
+0x1e47fff, 0x1ffe000, 0x18d198, 0x312317,
+0x1007b8f, 0x1800000, 0x3400f4, 0x340284,
+0x3404a4, 0x340694, 0x340834, 0x340a24,
+0x340c14, 0x5445c5, 0x12a6b04, 0x1038000,
+0x1d0b48, 0x1467fff, 0x1c60070, 0x1c07582,
+0x803c00, 0x30c60, 0x1b930c, 0x1c07fff,
+0x1fffc00, 0x30060, 0x1bb30c, 0x901800,
+0x148ffff, 0x1ce77cc, 0x1c67010, 0xc02040,
+0x40160, 0x11ba302, 0x1c17008, 0x802040,
+0x40160, 0x1180b74, 0x1c17000, 0x402040,
+0x160, 0x1180374, 0x1c14130, 0xa3e040,
+0x140160, 0x1185374, 0x1c10000, 0x618c,
+0x437560, 0x1184b74, 0x1c84098, 0x922000,
+0x186186, 0x304304, 0x1446b04, 0x13b2b45,
+0x1467fff, 0x1c60070, 0x1c07582, 0x803c00,
+0x30c60, 0x1b930c, 0x1c07fff, 0x1fffc00,
+0x30060, 0x1bb30c, 0x1467fff, 0x1c27202,
+0x1c07008, 0x803c00, 0x3046e, 0x1180b04,
+0x1c07000, 0x403c00, 0x3046e, 0x1180304,
+0x1c07049, 0x803c00, 0x3046e, 0x1185304,
+0x1c07fff, 0x1fffc00, 0x3046e, 0x1184b04,
+0x1486042, 0xb00a09, 0x148ffff, 0x1ce77cc,
+0x1446b04, 0x1030206, 0x1b87038, 0x24df,
+0x1840962, 0x1d9fb17, 0x350c14, 0x350a24,
+0x350834, 0x350694, 0x3504a4, 0x350284,
+0x3500f4, 0x11b7ff7, 0x17ffe77, 0x11b7fe4,
+0x17ffc17, 0x11b7fdd, 0x17ffb37, 0x11b7fcc,
+0x17ff917, 0x11b7fb5, 0x17ff637, 0x1387862,
+0xbc097, 0x3500e6, 0x70000, 0x1b80000,
+0x62cc, 0x11b1762, 0x1190b17, 0x1e46277,
+0x1ffe000, 0x185989, 0x1303311, 0x1e46277,
+0x1ffe000, 0x18598e, 0x1303315, 0x170477f,
+0x1f02601, 0x1b80000, 0x62cc, 0x1036c60,
+0x98133d, 0x1b80000, 0x63ac, 0x1032163,
+0x1981368, 0x1734fef, 0x1cf1721, 0x1e47fff,
+0x1ffe000, 0x18d190, 0x318330, 0x1e47fff,
+0x1ffe000, 0x18a989, 0x314310, 0x1b87496,
+0x1802018, 0xc0060, 0x190b00, 0x1b75255,
+0x7be010, 0x262, 0x580310, 0x1646909,
+0x1b1c663, 0x1c5d254, 0x862040, 0x60,
+0x1185302, 0x1d06298, 0x75e017, 0xefb961,
+0x11a3b47, 0x1d05211, 0x7cbff7, 0x10c3460,
+0x19a3b47, 0x1d05254, 0xf7e040, 0x107060,
+0x1d8230c, 0x173ffff, 0x1c42083, 0x1d0ffff,
+0x1fffa1e, 0xc30361, 0x1d87304, 0x1d080d,
+0x1d06298, 0xc72017, 0xefb961, 0x11a3b47,
+0x1d05211, 0x7cbff7, 0x10c3460, 0x19a3b47,
+0x1d05254, 0xf7e040, 0x107060, 0x1d8230c,
+0x1d0e276, 0x75fa1e, 0xc30361, 0x1d87304,
+0x1806276, 0x75c000, 0x0, 0x0,
+0x1006b8b, 0x800000, 0x1c4e298, 0xc72047,
+0x1a02060, 0x1190300, 0x1806298, 0x75c000,
+0x0, 0x0, 0x11a7ff7, 0x17ffe77,
+0x11a7fee, 0x17ffd57, 0x11a7fd9, 0x17ffb17,
+0x11a7fc5, 0x17ff837, 0x1581fff, 0x118bb17,
+0x70000, 0xc82810, 0x10065a5, 0x1800000,
+0x1d0001, 0x1804f54, 0x179c000, 0x0,
+0x0, 0x70000, 0xc82810, 0x10067a5,
+0x1800000, 0x1d0001, 0x1805f55, 0x75c000,
+0x0, 0x0, 0x70000, 0x1580001,
+0x98bb17, 0x0, 0x37ec17, 0x37f89f,
+0x37ee37, 0x37fb1f, 0x37fd3f, 0x37ff5f,
+0x1646120, 0x1b01601, 0x37ed5f, 0x37ef3f,
+0xc82611, 0x37f11f, 0xc82216, 0xc82c14,
+0xc82812, 0x37f30f, 0x1376130, 0xa8191,
+0xc82411, 0x37f51f, 0x36eb07, 0x37f70f,
+0xc82015, 0x1020001, 0x1c0cbe6, 0x36ed1f,
+0x770001, 0xc81220, 0xd40004, 0x118410,
+0x1646130, 0x316623, 0xc82813, 0xc82415,
+0xc82015, 0x1020001, 0x1c08d20, 0x1377fff,
+0x1c9c093, 0x1377fff, 0x1c8a211, 0x770001,
+0x761209, 0xd32009, 0x1005f2, 0x36ed0f,
+0xc80024, 0xc81441, 0xc81021, 0xc80422,
+0x36f12f, 0x7d0001, 0x7d5241, 0x1376130,
+0x80010, 0x1377fff, 0x1c90512, 0x1581fff,
+0xd89314, 0x1581fff, 0x1188316, 0xc82415,
+0x36f30f, 0x1020001, 0x1c0cbf5, 0x36f71f,
+0x770001, 0xc81220, 0x36ef3f, 0xd40004,
+0x118410, 0x36f52f, 0x1646130, 0x316623,
+0xc82813, 0xc82012, 0x1020001, 0x1c08d20,
+0x1377fff, 0x1c9c093, 0x1377fff, 0x1c8a211,
+0x770001, 0x761209, 0xd32009, 0x1005f2,
+0x36f72f, 0xc80024, 0xc81441, 0xc81021,
+0xc80422, 0x36ef4f, 0x7d0001, 0x7d5241,
+0x1376130, 0x90012, 0x1377fff, 0x1ca0514,
+0x36f30f, 0x1581fff, 0x1189316, 0x1581fff,
+0xd8a314, 0x762010, 0x36f52f, 0x1020001,
+0x1c0cbf5, 0x36ff5f, 0x36fd3f, 0x36fb1f,
+0x36ee37, 0x36ec17, 0x36f89f, 0x1581ffe,
+0x198bb17, 0x70000, 0x169ffff, 0x1c21110,
+0x12810a, 0xc83421, 0x1d0203, 0x1467fff,
+0x1c27200, 0x1bb7820, 0x20a000, 0x190190,
+0x310310, 0x70000, 0x1d0209, 0x1c60000,
+0x618d, 0x1a34860, 0x11ba300, 0x18078a0,
+0xa08000, 0x0, 0x0, 0x18078e0,
+0x808000, 0x0, 0x0, 0x70000,
+0x1c07fff, 0x1fffc00, 0x30468, 0x1d80347,
+0x14b7fff, 0x1c62004, 0x14bffff, 0x1c6200c,
+0x892284, 0x1447e10, 0x824404, 0x1c07fff,
+0x1fffc00, 0x30c65, 0x1582349, 0x1c40000,
+0x600c, 0x1030c60, 0x11a3b0c, 0x144fe10,
+0x860649, 0x1477fff, 0x1c2438c, 0x144fe00,
+0xc60648, 0x1477fff, 0x1c24384, 0x144fe00,
+0xc20248, 0x1e08000, 0x100, 0x30,
+0x18e314, 0x1467fff, 0x1fb0b41, 0x1c00c21,
+0x12061cd, 0x1cb0264, 0x183379, 0x1c00c21,
+0x10861cd, 0x1cb0260, 0x983379, 0x1c00c21,
+0x10861cd, 0x1cb0260, 0x983379, 0x1c00c21,
+0x10861cd, 0x1cb0260, 0x983379, 0x1c00c21,
+0x10861cd, 0x1cb0260, 0x983379, 0x1c67fff,
+0x1ffe030, 0x200660, 0x982302, 0x1007820,
+0x0, 0x1007884, 0x0, 0x70000,
+0x1b80000, 0x628c, 0x11b1762, 0x1990b17,
+0xe00c00, 0x1b75054, 0x2060, 0x802062,
+0x980310, 0x1e46277, 0x1ffe000, 0x185989,
+0x1303311, 0x173c77f, 0x1c42080, 0x1b862ff,
+0x1ffe01f, 0x1903560, 0xd91308, 0x1387fff,
+0x1ce036c, 0x1f30000, 0x628c, 0x1036863,
+0x118e321, 0x1c60000, 0x614d, 0x3b0a60,
+0x9a3b02, 0x1c5d211, 0x45a040, 0x60,
+0x1185302, 0x1806298, 0x71c000, 0x0,
+0x0, 0x1e47fff, 0x1ffe000, 0x18b189,
+0x313310, 0x1e45254, 0x165a000, 0x18d190,
+0x318321, 0x1646907, 0x1b11621, 0x1d00000,
+0x61cc, 0x30261, 0x11a3b47, 0x1d05210,
+0x1f8bff7, 0x10c2a60, 0x19a3b47, 0x1d07099,
+0x2040, 0x106c60, 0x1d8230c, 0x1d0d254,
+0x165ba65, 0x1bb0b61, 0x1987b0c, 0x1d080d,
+0x1d06299, 0x16da017, 0xe7bb61, 0x11a3b47,
+0x1d05210, 0x1f8bff7, 0x10c2a60, 0x19a3b47,
+0x1d05254, 0x165a040, 0x106c60, 0x1d8230c,
+0x1d0e276, 0xf3fa65, 0x1bb0b61, 0x1987b0c,
+0x1806276, 0xf3c000, 0x0, 0x0,
+0x1006b81, 0x1800000, 0x1c4e299, 0x16da047,
+0x1a02060, 0x1190300, 0x1806298, 0xf3c000,
+0x0, 0x0, 0x11a7ff7, 0x17ffe77,
+0x11b7fe9, 0x17ffd17, 0x11a7fd5, 0x17ffa37,
+0x1581fff, 0x158bb17, 0x70000, 0x1580000,
+0x98bb17, 0x0, 0x37fe17, 0x37ff1f,
+0x1646100, 0xb11621, 0xb00011, 0x118206,
+0xc80001, 0x1020001, 0x1c08a13, 0xc80400,
+0x100f05, 0x8f0001, 0x1020001, 0x1c08a13,
+0x8f0400, 0x890041, 0x370021, 0x36ff1f,
+0x36fe17, 0x1581fff, 0x198bb17, 0x70000,
+0x1620000, 0x58f31e, 0x1386929, 0x1802080,
+0x1c58000, 0x614d, 0x1e30261, 0x1be302,
+0x1c60000, 0x618d, 0x3b0a60, 0x11a3b08,
+0x10d0000, 0xbcb8, 0x1006929, 0x1800000,
+0x1c58000, 0x614d, 0x1e30261, 0x1be302,
+0x1467941, 0x1824388, 0x14679c5, 0x186438a,
+0x1007840, 0x0, 0x10078c4, 0x0,
+0x70000, 0x9d1804, 0x1467fff, 0x1c24384,
+0x1c60000, 0x610d, 0x3b4a60, 0x1986304,
+0x142ffff, 0x1ce6c68, 0x8c6286, 0x8c3284,
+0x142ffff, 0x1ce6c68, 0x8c6286, 0x8c3284,
+0x142ffff, 0x1ce6c68, 0x8c6286, 0x9d080c,
+0x1467fff, 0x1c6438c, 0x8c3284, 0x142ffff,
+0x1ce6468, 0x8c2086, 0x8c3284, 0x142ffff,
+0x1ce6468, 0x8c2086, 0x8c3284, 0x142ffff,
+0x1ce6468, 0x8c2086, 0x70000, 0x1b70000,
+0x628c, 0x31462, 0x980312, 0x545000,
+0xb00022, 0x11830e, 0x10d0000, 0x80bcf3,
+0x1805210, 0x179c000, 0x0, 0x0,
+0x1d07fff, 0x1ffffc7, 0x1e00861, 0x1184300,
+0x130fcd, 0x1447941, 0x185020a, 0xc9000a,
+0x70000, 0x1620000, 0x58d31a, 0xb00022,
+0x1183fb, 0x10d0000, 0x80bd01, 0x1c07fff,
+0x1fffc00, 0x30460, 0x1ba349, 0x1007941,
+0x1800000, 0x70000, 0x100433f, 0x1c00000,
+0x100477f, 0x1c00000, 0x1004fff, 0x1c00000,
+0x893002, 0x14b7fff, 0x1c32006, 0x1e08000,
+0x0, 0x14, 0x183b0e, 0x540585,
+0x1e00000, 0x3f, 0x51eb8, 0x19030f,
+0x1b47fff, 0x1fffc00, 0x30661, 0x1983321,
+0x118322, 0x10d0000, 0x180bd3b, 0x14bffff,
+0x1c32007, 0x1407fff, 0x1ceb860, 0x1e01fc0,
+0x0, 0x0, 0x184b0e, 0x100f06,
+0x300030, 0x1580000, 0x18c318, 0x1447e00,
+0x87018e, 0x1c00c25, 0x148690c, 0x4b0361,
+0x585b0f, 0x14b7fff, 0x1c1a003, 0x1387fff,
+0x1cc0503, 0x169ffff, 0x1c20098, 0x1082f1,
+0x8e228e, 0x1c47f00, 0xffc0, 0xa3f861,
+0x119030e, 0x760e07, 0x1007844, 0x0,
+0x10078c8, 0x0, 0x11b7ff7, 0x17ffe77,
+0x11b7fe5, 0x17ffc37, 0x11b7fd4, 0x17ffa17,
+0x1581fff, 0x158bb17, 0x70000, 0xc82410,
+0x1e4ffff, 0x1ffe000, 0x1851a4, 0x304320,
+0x8c300a, 0x8e2046, 0x11020d, 0x887086,
+0x1c07fff, 0x1fffc00, 0x30e61, 0x19a3b47,
+0x14b7fff, 0x1c7200e, 0x164f5e1, 0x1b0460d,
+0x1447fff, 0x1c5440a, 0x100ff2, 0x1446404,
+0x70206, 0x1c07fff, 0x1fffc00, 0x30e61,
+0x19a3b47, 0x14b7fff, 0x1c7200e, 0x10074e0,
+0x0, 0x1eaffff, 0x1fffc00, 0x30064,
+0x980300, 0x1387404, 0x1110, 0x70000,
+0x1e47fff, 0x1ffe000, 0x185189, 0x1308311,
+0x1e46715, 0x1ffe000, 0x18518e, 0x1308315,
+0x100515f, 0x1c00000, 0xd32040, 0x13bfe00,
+0xb00605, 0x1b47fff, 0x1fffc00, 0x31564,
+0x981311, 0x12a6983, 0x1850000, 0x1806314,
+0x75c000, 0x0, 0x0, 0xc83a30,
+0xb00000, 0x11830c, 0x772a15, 0x10d0000,
+0xbd8f, 0x1006983, 0x1800000, 0x10069ab,
+0x800000, 0x1806314, 0x75c000, 0x0,
+0x0, 0x704002, 0x771008, 0x118313,
+0x1b70000, 0x62cc, 0x31662, 0x1180314,
+0x1bb7fff, 0x1ffe000, 0x18b18b, 0x314314,
+0x10d0001, 0xbda4, 0x1805315, 0x7dc000,
+0x0, 0x0, 0x1806314, 0x75c000,
+0x0, 0x0, 0x11b7ffe, 0x17fff57,
+0x11b7fe9, 0x17ffd17, 0x1581fff, 0x198bb17,
+0x70000, 0x1580003, 0x18bb17, 0x0,
+0x37f617, 0x37f69f, 0x37f837, 0x37f8bf,
+0x37fb1f, 0x37fd3f, 0x37ff5f, 0xc82210,
+0x37d34f, 0x37d52f, 0xc82016, 0x1580002,
+0x1d88b15, 0x37d76f, 0x360000, 0xc82014,
+0x371001, 0x375d01, 0xc82012, 0x360602,
+0x371201, 0x360400, 0x371801, 0x361001,
+0xd40104, 0x11811c, 0x1620010, 0x180300,
+0x371401, 0x36d70f, 0x0, 0x360300,
+0x15800c8, 0x188312, 0x1377fff, 0x1c9a410,
+0x37d90f, 0x375921, 0x36d70f, 0x0,
+0x360300, 0x1580101, 0x1188310, 0x11b8008,
+0xb1109, 0x36d70f, 0x0, 0x360300,
+0x1580121, 0x1188310, 0x11b8008, 0xb1309,
+0x100f1b, 0x1620040, 0x180300, 0x371401,
+0x36d70f, 0x0, 0x360300, 0x1580278,
+0x188312, 0x1580080, 0x188313, 0x37d90f,
+0x375921, 0x36d70f, 0x0, 0x360300,
+0x15802b8, 0x588310, 0x11b8008, 0xb1109,
+0x36d70f, 0x0, 0x360300, 0x1580338,
+0x588310, 0x11b8008, 0xb1309, 0xc81023,
+0xc80020, 0xc80424, 0x371681, 0x361481,
+0x3612a1, 0xe74008, 0xd32248, 0x110108,
+0x361681, 0x770402, 0x760000, 0x771008,
+0x371681, 0xd40024, 0x1004f5, 0x1377fff,
+0x1c82211, 0x1e09f66, 0xcccd00, 0x0,
+0x181300, 0xc81648, 0x370801, 0x370a21,
+0x370cb1, 0x36d52f, 0x0, 0x360202,
+0x14bffff, 0x1c02000, 0x370e01, 0xc82811,
+0xc82410, 0x1c0403, 0x1006505, 0x1800000,
+0x1007509, 0x1800000, 0xc82011, 0x1020001,
+0x1c0d288, 0x1621d98, 0x589312, 0x15800a3,
+0x188b10, 0xc8003f, 0x1020001, 0x1c03c84,
+0xc82011, 0x1020001, 0x1c0d203, 0x1580006,
+0x188b10, 0x360001, 0x14b7fff, 0x1c02000,
+0x1020001, 0x1c0d2e8, 0x36d70f, 0xc80247,
+0xc80001, 0x360500, 0x375b01, 0x1020001,
+0x1c07db2, 0xc81200, 0x1e08000, 0x3f,
+0x99999a, 0x190300, 0x1020001, 0x1c07db2,
+0x36d50f, 0x1e08000, 0xc7, 0x588800,
+0x190303, 0x8c0060, 0x360420, 0x14bffff,
+0x1c12002, 0x1c47f00, 0x208000, 0x60,
+0xa05302, 0xc91802, 0x1020001, 0x1c08e17,
+0x8c0009, 0x1020001, 0x1c07a5d, 0x371a01,
+0xc80001, 0x1020001, 0x1c07db2, 0xc80200,
+0x1e08000, 0x3e, 0x1333334, 0x190300,
+0x1020001, 0x1c07db2, 0x36d50f, 0x8c0060,
+0x360420, 0x14bffff, 0x1c12002, 0x1c47f00,
+0x208000, 0x60, 0xa05302, 0xc91802,
+0x1020001, 0x1c08e17, 0x8c0001, 0x1020001,
+0x1c07a5d, 0x371c01, 0x1580051, 0x988b10,
+0x1e09fa9, 0xf9ef3f, 0xf4cfc4, 0x181300,
+0x158005c, 0x1988b12, 0x371e01, 0x372021,
+0x10c800b, 0x100be86, 0x10075b1, 0x1800000,
+0x10075b5, 0x1800000, 0xc82015, 0xc81430,
+0xc80020, 0xc81020, 0x1620002, 0x1581302,
+0x3726a1, 0xc80208, 0x372881, 0x1020001,
+0x1c03c73, 0x361601, 0xd40204, 0x1010010,
+0x80bf89, 0xc82015, 0xc82413, 0x10c8000,
+0x1c0bea1, 0x370120, 0x361401, 0x370200,
+0x1377fff, 0x1c82190, 0x361401, 0x1377fff,
+0x1c90012, 0x36d50f, 0x361421, 0x1580007,
+0x988b12, 0x360400, 0x1580007, 0x588b10,
+0x1020001, 0x1c0d085, 0x1580007, 0x988b14,
+0x377001, 0x36d56f, 0x361481, 0x1621d95,
+0x1d89312, 0x367221, 0x158008a, 0x1988b10,
+0x360406, 0x1020001, 0x1c0d10a, 0x36d50f,
+0x361481, 0x1580007, 0x988b14, 0x367221,
+0x1621d96, 0xd89312, 0x360400, 0x1580096,
+0x988b10, 0x1020001, 0x1c0d10a, 0x1580002,
+0x1588b10, 0x15800b0, 0x988b15, 0xc80220,
+0xc81222, 0x15800b0, 0x1188b13, 0xc80601,
+0x37db0f, 0x36d70f, 0x1580001, 0x988310,
+0x37dd0f, 0x1581ffd, 0x58bb14, 0x36d90f,
+0xc80022, 0x1377fff, 0x1c90190, 0x36d70f,
+0x1620001, 0xd81302, 0x37df4f, 0x1581ffd,
+0x58bb14, 0x1377fff, 0x1c80090, 0x7d1041,
+0x37e14f, 0x36d74f, 0x1377fff, 0x1ca2194,
+0x37e34f, 0x36d74f, 0x1377fff, 0x1ca4014,
+0x37e54f, 0x36db4f, 0x0, 0x370124,
+0x1581ffd, 0x58bb14, 0x36dd2f, 0x1377fff,
+0x1ca2194, 0x37e74f, 0x360162, 0x1377fff,
+0x1ca0111, 0x370165, 0x1581ffd, 0x58bb16,
+0x1581ffd, 0x58bb12, 0x1377fff, 0x1c94012,
+0x37e96f, 0x37eb2f, 0x15800a3, 0x1d8a312,
+0x361900, 0x37ed2f, 0x370103, 0x361421,
+0x7d0002, 0x37d207, 0x36d70f, 0x36df2f,
+0x361300, 0x370302, 0x36e12f, 0x11b0008,
+0xb1109, 0x1377fff, 0x1c80190, 0x370502,
+0x36e70f, 0x36e32f, 0xc82c10, 0xc82812,
+0x1c0303, 0x1006509, 0x1800000, 0x100750d,
+0x1800000, 0x36eb0f, 0x36e52f, 0xc82c10,
+0xc82812, 0x1c0303, 0x1006509, 0x1800000,
+0x100750d, 0x1800000, 0x36ed0f, 0x36e96f,
+0x36d34f, 0x36d52f, 0x1020001, 0x1c0b7ee,
+0x36db0f, 0x762a15, 0x762613, 0x361401,
+0x771209, 0x760201, 0x762010, 0x6e1803,
+0x37db0f, 0x36dd0f, 0x762010, 0x37dd0f,
+0xd40094, 0x10049c, 0x36d70f, 0x15800a6,
+0x1588b13, 0xc80220, 0xc8063f, 0x361d00,
+0x11b8008, 0xb0d09, 0x36d70f, 0x0,
+0x361f00, 0x11b8008, 0xb0f09, 0x1581ffe,
+0x98bb10, 0x1581ffe, 0x98bb15, 0xc80422,
+0x1581ffe, 0x98bb14, 0x361401, 0x1377fff,
+0x1ca2194, 0x1581ffe, 0x98bb12, 0x37ef0f,
+0x7d0040, 0x36d70f, 0x1377fff, 0x1c94012,
+0x1377fff, 0x1c82190, 0x37f10f, 0x36d70f,
+0xc82c10, 0x1377fff, 0x1c84010, 0x37f30f,
+0x1581ffe, 0x98bb10, 0x37e407, 0x361366,
+0x37f55f, 0x36ef5f, 0x0, 0x370365,
+0x11b0008, 0xb1369, 0x1377fff, 0x1cb0096,
+0x370560, 0x36f10f, 0xc82a14, 0xc82c10,
+0x1c0303, 0x100650d, 0x1800000, 0x100750b,
+0x1800000, 0x36f30f, 0xc82c12, 0xc82810,
+0x1c0303, 0x1006509, 0x1800000, 0x100750d,
+0x1800000, 0xc82013, 0x36f56f, 0x36d34f,
+0x36d52f, 0x1020001, 0x1c08a43, 0x361401,
+0x770603, 0x1580001, 0xd89b13, 0x6e0801,
+0xd40034, 0x1004be, 0x100f28, 0x1621cca,
+0x1d89312, 0xc82015, 0x10c8000, 0x1c0bfac,
+0x1377fff, 0x1ca0093, 0xc80022, 0xc80422,
+0xc81022, 0x370140, 0x3616a1, 0x7a000a,
+0x1377fff, 0x1ca0012, 0x0, 0x360004,
+0x370200, 0x361601, 0x7a0040, 0x361221,
+0x1377fff, 0x1ca0012, 0x0, 0x360204,
+0x7d0040, 0x370400, 0x1377fff, 0x1c82190,
+0x361601, 0x7a0200, 0x1377fff, 0x1ca0012,
+0x1377fff, 0x1c92212, 0x1377fff, 0x1c080e8,
+0x1008001, 0x1c0bea3, 0x36ff5f, 0x36fd3f,
+0x36fb1f, 0x36f837, 0x36f617, 0x36f8bf,
+0x36f69f, 0x1581ffd, 0x18bb17, 0x70000,
+0x1580005, 0xd8bb17, 0x0, 0x37f617,
+0x37b69f, 0x37f837, 0x37b8bf, 0x37fa77,
+0x37bb1f, 0x37bd3f, 0x37bf5f, 0xc82a10,
+0x1580096, 0x98ab10, 0x361005, 0x37ab0f,
+0x1580006, 0x18ab10, 0x37ad0f, 0x158003a,
+0x98ab10, 0x37af0f, 0x365905, 0x37b10f,
+0x1580002, 0x1d8ab10, 0x37b30f, 0x365d05,
+0x37b50f, 0x361215, 0xd40104, 0x118105,
+0x360142, 0xc81641, 0x360312, 0x100f05,
+0x365b05, 0xc8163f, 0x360140, 0x360310,
+0x11b0008, 0xb0d0d, 0x1581ffa, 0x158bb12,
+0x1e08000, 0x3d, 0x199999a, 0x190300,
+0x37ab07, 0x11b0008, 0xb0f0d, 0x371902,
+0xc82414, 0x365e25, 0x1466110, 0x18002,
+0x362895, 0x362b05, 0x1377fff, 0x1c80490,
+0x1020001, 0x1c03c84, 0x362d05, 0x1646110,
+0x312623, 0x1377fff, 0x1c80490, 0x1020001,
+0x1c03c84, 0x6e0029, 0x372805, 0x361425,
+0xd32040, 0x110505, 0xc80020, 0xc80420,
+0x372805, 0x372625, 0x1621cce, 0xd89b13,
+0x36b31f, 0xc81220, 0xd400b4, 0x118423,
+0x361605, 0x1377fff, 0x1c80013, 0x0,
+0x360000, 0xd40004, 0x118115, 0x365b05,
+0xc80001, 0x1377fff, 0x1c80490, 0x360121,
+0x360471, 0x360100, 0x1377fff, 0x1c90392,
+0x1020001, 0x1c03c84, 0x1377fff, 0x1c82111,
+0x6e0027, 0x370000, 0x360221, 0xd32040,
+0x110503, 0xc80020, 0x370000, 0x1377fff,
+0x1c9a213, 0x1377fff, 0x1c8a191, 0x761209,
+0xd32269, 0x1005df, 0x362605, 0xd40004,
+0x1010010, 0x80c322, 0xd40704, 0x1010000,
+0xc0c322, 0x1621cd1, 0x1d88310, 0x1377fff,
+0x1c80010, 0x0, 0x360100, 0x0,
+0xc0f00, 0x0, 0x362b05, 0x1581ffa,
+0x158bb14, 0x1581ffa, 0x158bb16, 0x1581ffa,
+0x158bb12, 0x37ab07, 0x11b0008, 0xb051d,
+0x15800a3, 0x1d8ab10, 0x370d14, 0x11b0008,
+0xb094d, 0x372546, 0x1020001, 0x1c0b801,
+0x362d05, 0x1581ffa, 0x158bb14, 0x1581ffa,
+0x158bb16, 0x1581ffa, 0x158bb12, 0x37ab07,
+0x11b0008, 0xb071d, 0x15800a5, 0x98ab10,
+0x370d14, 0x11b0008, 0xb0b4d, 0x372546,
+0x1020001, 0x1c0b801, 0x11b0008, 0xb0d0d,
+0x1581ffa, 0x158bb12, 0x37ab07, 0x11b0008,
+0xb0f0d, 0x371902, 0x361605, 0xd40004,
+0x118105, 0xc80021, 0x372605, 0x1008001,
+0x1c0c322, 0xc82015, 0x1020001, 0x1c0d1cc,
+0x1580007, 0x98ab16, 0x367025, 0x367205,
+0x365d45, 0x11b0008, 0xb092d, 0x11b0008,
+0xb050d, 0x1020001, 0x1c0cda8, 0x365d05,
+0x1580007, 0x98ab16, 0x1580017, 0x188314,
+0x367025, 0x367205, 0x11b0008, 0xb0b2d,
+0x11b0008, 0xb070d, 0x1020001, 0x1c0cda8,
+0x365d05, 0x158000c, 0x98ab14, 0x1580017,
+0x188312, 0x367005, 0x1020001, 0x1c0d328,
+0x1580001, 0x158ab14, 0x367005, 0x158003a,
+0x98ab12, 0x158000c, 0x98ab10, 0x1020001,
+0x1c0ceed, 0x365d25, 0x158003a, 0x98ab16,
+0x1580017, 0x189314, 0x367005, 0x365905,
+0x1020001, 0x1c0d054, 0x361605, 0xd40104,
+0x110305, 0xc80022, 0x372605, 0x1008001,
+0x1c0c322, 0x15800a3, 0x18ab16, 0x367005,
+0xc80421, 0xc80800, 0x362085, 0x158008a,
+0x198ab14, 0x361e05, 0x37fc87, 0x158000c,
+0x98ab10, 0x365ea5, 0x37fe07, 0x362205,
+0x365925, 0x360485, 0x1020001, 0x1c0d383,
+0x361605, 0xd40004, 0x118105, 0xc80023,
+0x372605, 0x1008001, 0x1c0c322, 0x1580051,
+0x98ab10, 0x367025, 0x362205, 0x365925,
+0x1020001, 0x1c0d030, 0x36ad0f, 0x16387ec,
+0x181302, 0x367085, 0x360e00, 0x36af0f,
+0x8c0040, 0xc82810, 0x1580039, 0x1188312,
+0x36b50f, 0x8c1060, 0x1020001, 0x1c0ceda,
+0x36b12f, 0x367205, 0x36b50f, 0x1580007,
+0x98ab14, 0x1020001, 0x1c0cdde, 0x11b0008,
+0xb0d6d, 0x36b10f, 0x361405, 0x11b0008,
+0xb094d, 0x11b0008, 0xb052d, 0x11b0008,
+0xb0f1d, 0x1020001, 0x1c0ce6a, 0x36ad0f,
+0x1e08000, 0xbe, 0x1f0a3d8, 0x190302,
+0x367085, 0x360e00, 0x36af0f, 0x1580039,
+0x1188312, 0x36b50f, 0x8c0040, 0x1581fd2,
+0x189314, 0x8c1060, 0x1020001, 0x1c0ceda,
+0x36b12f, 0x367205, 0x36b50f, 0x1580007,
+0x98ab14, 0x1020001, 0x1c0cdde, 0x36b10f,
+0x361405, 0x11b0008, 0xb0d6d, 0x11b0008,
+0xb0b4d, 0x11b0008, 0xb072d, 0x11b0008,
+0xb0f1d, 0x1020001, 0x1c0ce90, 0x1581ffa,
+0x158bb14, 0x15800aa, 0x198ab10, 0x36b16f,
+0x1581ffa, 0x158bb12, 0x370d64, 0x1020001,
+0x1c08a56, 0x36b30f, 0x361425, 0x361400,
+0x701040, 0x361680, 0x6e1202, 0xd32002,
+0x110502, 0x701002, 0x36b30f, 0x361495,
+0x6e4049, 0x361400, 0xd32008, 0x118403,
+0x704840, 0x100f01, 0x36b30f, 0xc80009,
+0x36b12f, 0x361300, 0x1377fff, 0x1c80110,
+0x1020001, 0x1c03c84, 0x36b10f, 0x361405,
+0x1377fff, 0x1c90490, 0x36b30f, 0x700220,
+0x361300, 0x1020001, 0x1c03c84, 0x36ad0f,
+0x1e08000, 0x3e, 0x1f0a3d8, 0x190302,
+0x367085, 0x360e00, 0x36af0f, 0x8c0040,
+0xc82810, 0x1580045, 0x188312, 0x36b50f,
+0x8c1060, 0x1020001, 0x1c0ceda, 0x1580007,
+0x98ab14, 0x367205, 0x36b12f, 0x36b50f,
+0x1020001, 0x1c0cdde, 0x36b10f, 0x361405,
+0x11b0008, 0xb0d6d, 0x11b0008, 0xb094d,
+0x11b0008, 0xb052d, 0x11b0008, 0xb0f1d,
+0x1020001, 0x1c0ce6a, 0x361605, 0xd40204,
+0x110305, 0xc80024, 0x372605, 0x1008001,
+0x1c0c322, 0x36ad0f, 0x16397ec, 0x181302,
+0x367085, 0x360e00, 0x36af0f, 0x1580045,
+0x188312, 0x36b50f, 0x8c0040, 0x1581fc6,
+0x1189314, 0x8c1060, 0x1020001, 0x1c0ceda,
+0x36b12f, 0x367205, 0x36b50f, 0x1580007,
+0x98ab14, 0x1020001, 0x1c0cdde, 0x36b10f,
+0x361405, 0x11b0008, 0xb0d6d, 0x11b0008,
+0xb0b4d, 0x11b0008, 0xb072d, 0x11b0008,
+0xb0f1d, 0x1020001, 0x1c0ce90, 0x1581ffa,
+0x158bb14, 0x15800ac, 0x58ab10, 0x36b16f,
+0x1581ffa, 0x158bb12, 0x370d64, 0x1020001,
+0x1c08a56, 0x36b30f, 0x361425, 0x361a00,
+0x701040, 0x361c80, 0x6e1202, 0xd32002,
+0x110502, 0x701002, 0x36b30f, 0x361435,
+0x6e4043, 0x361a00, 0xd32008, 0x118403,
+0x701840, 0x100f01, 0x36b30f, 0xc80003,
+0x36b12f, 0x361900, 0x1377fff, 0x1c80110,
+0x1020001, 0x1c03c84, 0x36b10f, 0x361405,
+0x1377fff, 0x1c90190, 0x36b30f, 0x700060,
+0x361900, 0x1020001, 0x1c03c84, 0x361005,
+0xd40004, 0x11812f, 0x36ad0f, 0x367085,
+0x36ab4f, 0x36af2f, 0x360c20, 0x360a00,
+0x36b50f, 0x1020001, 0x1c0cebe, 0x1580007,
+0x98ab14, 0x367205, 0x36b12f, 0x36b50f,
+0x1020001, 0x1c0cdde, 0x11b0008, 0xb0d6d,
+0x36b10f, 0x361405, 0x11b0008, 0xb094d,
+0x11b0008, 0xb052d, 0x11b0008, 0xb0f1d,
+0x1020001, 0x1c0ce14, 0x36af0f, 0x367085,
+0x158000b, 0x1188312, 0x36ad0f, 0x36ab4f,
+0x360c20, 0x360a00, 0x36b50f, 0x1020001,
+0x1c0cebe, 0x1580007, 0x98ab14, 0x367205,
+0x36b12f, 0x36b50f, 0x1020001, 0x1c0cdde,
+0x361605, 0xd40004, 0x118105, 0xc80041,
+0x372605, 0x1008001, 0x1c0c322, 0x361005,
+0xd40004, 0x118143, 0x1581ffa, 0x158bb14,
+0x15800ad, 0x118ab10, 0x36b56f, 0x1581ffa,
+0x158bb12, 0x370d64, 0x1020001, 0x1c08a56,
+0x36b30f, 0x361425, 0x362000, 0x701040,
+0x362280, 0x6e1202, 0xd32002, 0x110502,
+0x701002, 0x36b30f, 0x361435, 0x6e4043,
+0x362000, 0xd32008, 0x118403, 0x701840,
+0x100f01, 0x36b30f, 0xc80003, 0x36b52f,
+0x361f00, 0x1377fff, 0x1c80110, 0x1020001,
+0x1c03c84, 0x36b50f, 0x361405, 0x1377fff,
+0x1c90190, 0x36b30f, 0x700060, 0x361f00,
+0x1020001, 0x1c03c84, 0x36b10f, 0x361405,
+0x11b0008, 0xb0d6d, 0x11b0008, 0xb0b4d,
+0x11b0008, 0xb072d, 0x11b0008, 0xb0f1d,
+0x1020001, 0x1c0ce14, 0x1581ffa, 0x158bb14,
+0x36b16f, 0x1581ffa, 0x158bb12, 0x15800ae,
+0x1d8ab10, 0x370d64, 0x1020001, 0x1c08a56,
+0x361605, 0xd40104, 0x110305, 0xc80040,
+0x372605, 0x1008001, 0x1c0c322, 0x361005,
+0xd40004, 0x11811b, 0x36b30f, 0x361435,
+0x362820, 0x362600, 0x6e4043, 0xd32008,
+0x118403, 0x701840, 0x100f01, 0x36b30f,
+0xc80003, 0x36b12f, 0x362500, 0x1377fff,
+0x1c80110, 0x1020001, 0x1c03c84, 0x36b10f,
+0x361405, 0x1377fff, 0x1c90190, 0x36b30f,
+0x700060, 0x362500, 0x1020001, 0x1c03c84,
+0x36af0f, 0x1e09f9a, 0x104f33d, 0x199999a,
+0x184b02, 0x360405, 0xc82810, 0x158002e,
+0x188312, 0x36ad0f, 0x8c1840, 0x367085,
+0x360ea0, 0x36b50f, 0x8c022a, 0x8c1060,
+0x1020001, 0x1c0ceda, 0x36b12f, 0x367205,
+0x36b50f, 0x1580007, 0x98ab14, 0x1020001,
+0x1c0cdde, 0x11b0008, 0xb0d6d, 0x36b10f,
+0x361405, 0x11b0008, 0xb094d, 0x11b0008,
+0xb052d, 0x11b0008, 0xb0f1d, 0x1020001,
+0x1c0ce14, 0x36ad0f, 0x367085, 0x360e00,
+0x36af0f, 0x158002e, 0x188312, 0x36b50f,
+0x8c0220, 0x1581fdd, 0x1189314, 0x8c1060,
+0x1020001, 0x1c0ceda, 0x36b12f, 0x367205,
+0x36b50f, 0x1580007, 0x98ab14, 0x1020001,
+0x1c0cdde, 0x36b10f, 0x361405, 0x11b0008,
+0xb0d6d, 0x11b0008, 0xb0b4d, 0x11b0008,
+0xb072d, 0x11b0008, 0xb0f1d, 0x1020001,
+0x1c0ce3c, 0x1581ffa, 0x158bb14, 0x15800a9,
+0xd8ab10, 0x36b16f, 0x1581ffa, 0x158bb12,
+0x370d64, 0x1020001, 0x1c08a56, 0x36b30f,
+0x361435, 0x361020, 0x360e00, 0x6e4043,
+0xd32008, 0x118403, 0x701840, 0x100f01,
+0x36b30f, 0xc80003, 0x36b12f, 0x360d00,
+0x1377fff, 0x1c80110, 0x1020001, 0x1c03c84,
+0x36b10f, 0x361405, 0x1377fff, 0x1c90190,
+0x36b30f, 0x700060, 0x360d00, 0x1020001,
+0x1c03c84, 0x36af0f, 0x3670a5, 0xc82810,
+0x1580017, 0x188312, 0x36ad0f, 0x36ab6f,
+0x360880, 0x360620, 0x360e00, 0x36b50f,
+0x1020001, 0x1c0cec8, 0x1580007, 0x98ab14,
+0x367205, 0x36b12f, 0x36b50f, 0x1020001,
+0x1c0cdde, 0x36b10f, 0x361405, 0x11b0008,
+0xb0d6d, 0x11b0008, 0xb094d, 0x11b0008,
+0xb052d, 0x11b0008, 0xb0f1d, 0x1020001,
+0x1c0ce14, 0x36af0f, 0x3670a5, 0x1580022,
+0x1188312, 0x36ad0f, 0x1581fe9, 0x189314,
+0x36ab6f, 0x360880, 0x360620, 0x360e00,
+0x36b50f, 0x1020001, 0x1c0cec8, 0x1580007,
+0x98ab14, 0x367205, 0x36b12f, 0x36b50f,
+0x1020001, 0x1c0cdde, 0x361605, 0xd40004,
+0x118104, 0xc8003f, 0x372605, 0x100f25,
+0x36b30f, 0x1581ffa, 0x158bb14, 0x1581ffa,
+0x158bb12, 0x360160, 0x15800a6, 0x158ab10,
+0x370d64, 0x1020001, 0x1c08a56, 0x36b10f,
+0x361405, 0x11b0008, 0xb0d6d, 0x11b0008,
+0xb0b4d, 0x11b0008, 0xb072d, 0x11b0008,
+0xb0f1d, 0x1020001, 0x1c0ce14, 0x36b30f,
+0x1581ffa, 0x158bb14, 0x1581ffa, 0x158bb12,
+0x360760, 0x15800a8, 0x18ab10, 0x370d64,
+0x1020001, 0x1c08a56, 0xc80030, 0x372605,
+0x1621cce, 0xd89b13, 0x36b31f, 0xc80620,
+0xd400b4, 0x118423, 0x361605, 0x1377fff,
+0x1c80013, 0x0, 0x360000, 0xd40004,
+0x110115, 0x365b05, 0xc80001, 0x1377fff,
+0x1c80190, 0x360121, 0x360491, 0x360100,
+0x1377fff, 0x1c90492, 0x1020001, 0x1c03c84,
+0x1377fff, 0x1c82111, 0x6e0029, 0x370000,
+0x360221, 0xd32040, 0x110503, 0xc80020,
+0x370000, 0x1377fff, 0x1c9a213, 0x1377fff,
+0x1c8a191, 0x760603, 0xd32263, 0x1005df,
+0x36bf5f, 0x36bd3f, 0x36bb1f, 0x36fa77,
+0x36f837, 0x36f617, 0x36b8bf, 0x36b69f,
+0x1581ffa, 0x158bb17, 0x70000, 0xc81000,
+0xd40284, 0x11840a, 0xd40384, 0x118106,
+0x1cb8000, 0x614c, 0x11b2161, 0x190320,
+0x100f05, 0xc80021, 0x100f0d, 0xc81020,
+0xc81448, 0x8e2202, 0x118208, 0x8e2242,
+0x110306, 0x1377fff, 0x1c80010, 0xc80020,
+0x370820, 0x100f02, 0xc80022, 0x0,
+0x70000, 0x1e47fff, 0x1ffe000, 0x18518c,
+0x1308311, 0x1e46715, 0x1ffe000, 0x18d190,
+0x1318321, 0x1e0ffff, 0x1ffffff, 0x1fffffe,
+0x18f31c, 0x1e47fff, 0x1ffe000, 0x18c981,
+0x311368, 0x1cb8000, 0x610c, 0x1032261,
+0x1190300, 0x9c140c, 0x1cdffff, 0x1ffe010,
+0x461, 0x185308, 0x1cdffff, 0x1ffe010,
+0x461, 0x185308, 0x1cdffff, 0x1ffe010,
+0x461, 0x185308, 0x1f48000, 0x200,
+0x2, 0x50000, 0x77a501, 0x1b70000,
+0x62cc, 0x31262, 0x1180310, 0x1467fff,
+0x1c17188, 0x1467fff, 0x1c26002, 0x1467940,
+0x7188, 0x1467fff, 0x1c17188, 0x1c60000,
+0x618d, 0x12b0060, 0x11b0302, 0x1c60000,
+0x61cd, 0x16b0060, 0x19b4302, 0x10d0001,
+0x80c3b3, 0x1464981, 0x807188, 0x1464dc9,
+0x1817188, 0x1c60000, 0x618d, 0x12b0060,
+0x11b0302, 0x1c60000, 0x61cd, 0x16b0060,
+0x19b4302, 0x1004981, 0x800000, 0x1007bed,
+0x1000000, 0x11b7ffc, 0x17fff17, 0x772e17,
+0x70000, 0x1e47fff, 0x1ffe000, 0x18518c,
+0x1302311, 0x1e46655, 0x1ffe000, 0x18c990,
+0x1318321, 0x360226, 0x3604a6, 0x1e47fff,
+0x1ffe000, 0x1d8985, 0x3a9302, 0xc8226c,
+0x1f48000, 0x300, 0x4, 0x50040,
+0x1b70000, 0x628c, 0x131462, 0x981312,
+0x1620000, 0x58e31a, 0x10d0001, 0x80c3e2,
+0x1002589, 0x1000000, 0x1447fff, 0x1c27104,
+0x1007940, 0x0, 0x1447fff, 0x1c6710c,
+0x10079c0, 0x0, 0x10d0001, 0x80c3ee,
+0x1002589, 0x1000000, 0x1447fff, 0x1c26104,
+0x1007942, 0x800000, 0x1447fff, 0x1c6610c,
+0x10079c2, 0x800000, 0x1b60c51, 0x122604c,
+0xa31264, 0x981312, 0x10d0001, 0x80c3fe,
+0x1002589, 0x1000000, 0x1447fff, 0x1c26104,
+0x1007942, 0x800000, 0x1447fff, 0x1c6610c,
+0x10079c2, 0x800000, 0x10d0001, 0x80c406,
+0x1002589, 0x1000000, 0x1007942, 0x800000,
+0x10079c2, 0x800000, 0x370116, 0x1620000,
+0x1d8bb1, 0x11b7ffc, 0x17fff17, 0x772e17,
+0x70000, 0x1e47fff, 0x1ffe000, 0x18518c,
+0x1308311, 0x1e46715, 0x1ffe000, 0x18518d,
+0x1308313, 0x1e46715, 0x1ffe000, 0x18518e,
+0x1308315, 0x1e46715, 0x1ffe000, 0x18518f,
+0x308316, 0x1b86715, 0x1ffe00f, 0x1881e63,
+0x1590302, 0x1f48000, 0x300, 0x2,
+0x50040, 0x1f48000, 0x200, 0x4,
+0xd0300, 0x360261, 0x173e4e2, 0x32086,
+0x360246, 0x3604c6, 0x1e47fff, 0x1ffe000,
+0x1d8986, 0x3a9304, 0xc8226c, 0x1e47fff,
+0x1ffe000, 0x1d99d8, 0x13ab3a9, 0x1e47fff,
+0x1ffe000, 0x18d981, 0x313311, 0x1b70000,
+0x62cc, 0x330e62, 0x159030e, 0x1006586,
+0x1800000, 0x1620000, 0x58db19, 0x1006b8b,
+0x800000, 0x1d0a0b, 0x1466b8d, 0x1020476,
+0x1466b8b, 0x860472, 0x1466b8d, 0x1030476,
+0x1466b8b, 0x870472, 0x1188027, 0x2000c0,
+0x180628c, 0x75c000, 0x0, 0x0,
+0x1006909, 0x1800000, 0x1d0a13, 0x1007906,
+0x1800000, 0x1c65211, 0x7d8000, 0x60,
+0x1184300, 0x1466b8b, 0x860472, 0x1007906,
+0x1800000, 0x1c65211, 0x7d8000, 0x60,
+0x1984300, 0x1466b8b, 0x870472, 0x1188027,
+0x2000c0, 0x180628c, 0x75c000, 0x0,
+0x0, 0xc83202, 0x36ff67, 0x1006522,
+0x800000, 0x0, 0x370116, 0x1620000,
+0x1d9bb1, 0x11b7fcc, 0x17ff917, 0x11b7fdd,
+0x17ffb37, 0x11b7fee, 0x17ffd57, 0x1581fff,
+0x118bb17, 0x70000, 0x1e47fff, 0x1ffe000,
+0x185189, 0x1308311, 0x1e46715, 0x1ffe000,
+0x18518b, 0x308315, 0x1f5e715, 0x1fffff0,
+0x40063, 0x1990b00, 0x175e58d, 0x1802180,
+0x1b772d6, 0x1c02010, 0x262, 0x58e310,
+0x16464ac, 0x3ad615, 0x1e47fff, 0x1ffe000,
+0x1da985, 0x315308, 0x1e47fff, 0x1ffe000,
+0x1db1da, 0x13ae3ad, 0x16465ab, 0x131662b,
+0x1d000d, 0x100652b, 0x1800000, 0x10065ab,
+0x1800000, 0x1806654, 0x75c000, 0x0,
+0x0, 0x100652d, 0x1800000, 0x10065ad,
+0x1800000, 0x1806654, 0xf7c000, 0x0,
+0x0, 0x1d0011, 0x1006509, 0x1800000,
+0x1006529, 0x1800000, 0x1007501, 0x1800000,
+0x100658d, 0x1800000, 0x1007583, 0x1800000,
+0x1806605, 0xf5c000, 0x0, 0x0,
+0x100658d, 0x1800000, 0x1806651, 0xf7c000,
+0x0, 0x0, 0x36ff3f, 0x1e47fff,
+0x1ffe000, 0x1db190, 0x3b5320, 0x370153,
+0x11b7fe9, 0x17ffd17, 0x36ff57, 0x1581fff,
+0x198bb17, 0x70000, 0x1e474f1, 0x1c02000,
+0x18518d, 0x1308313, 0x1e4ffff, 0x1ffe000,
+0x182180, 0x30c362, 0x79cd49, 0x1ab6315,
+0x1ffe047, 0x1d81262, 0xd8630e, 0x1e4ffff,
+0x1ffe000, 0x1d8182, 0x3a8310, 0x1e4ffff,
+0x1ffe000, 0x1d9182, 0x3aa312, 0x1e4ffff,
+0x1ffe000, 0x1db182, 0x3ae316, 0x790804,
+0x1a65211, 0x176e010, 0x262, 0x182310,
+0x1a7d255, 0x176c000, 0x60, 0x1990b04,
+0x1c67fff, 0x1ffe040, 0x80260, 0x1184300,
+0x1d0609, 0x1805211, 0x176c000, 0x0,
+0x0, 0x1805255, 0x176c000, 0x0,
+0x0, 0x1c66298, 0x75e040, 0x80260,
+0x1184300, 0x1b86298, 0x75e047, 0x1ec1262,
+0xd9030e, 0x1647fff, 0x1fb6641, 0x1805211,
+0x76c000, 0x0, 0x0, 0x1805255,
+0x76c000, 0x0, 0x0, 0x1c67c86,
+0x1c02040, 0x80260, 0x1184300, 0x100792d,
+0x1800000, 0x1d060f, 0x1805211, 0x76c000,
+0x0, 0x0, 0x1805255, 0x76c000,
+0x0, 0x0, 0x1c66298, 0x75e040,
+0x80260, 0x1184300, 0x100790d, 0x1800000,
+0x100792d, 0x1800000, 0x11b7ffd, 0x17fff37,
+0x1b86298, 0x75ffd0, 0x3fa62, 0x1d90b17,
+0x1e47fff, 0x1ffe000, 0x1d9190, 0x3b0320,
+0x70000, 0x1e47fff, 0x1ffe000, 0x185189,
+0x1308311, 0x175d15f, 0x1c02100, 0x1b70000,
+0x626c, 0x31262, 0x580310, 0x1d000f,
+0x1006509, 0x1800000, 0x1006529, 0x1800000,
+0x1007501, 0x1800000, 0xc8106c, 0x1007583,
+0x1800000, 0x1806605, 0x175c000, 0x0,
+0x0, 0xc8106c, 0x1806651, 0x177c000,
+0x0, 0x0, 0x11b7ff9, 0x17fff17,
+0x1387fff, 0x1cba097, 0x70000, 0x1580001,
+0x98bb17, 0x0, 0x37fb1f, 0x37fd3f,
+0x37ff5f, 0xc82210, 0x37ed4f, 0x158009c,
+0x588b14, 0xc81420, 0xc81048, 0xc80020,
+0x37ef6f, 0xc80428, 0x16210d3, 0xd88310,
+0x37f14f, 0xc82816, 0x1621d93, 0x98b316,
+0x11b8008, 0x99309, 0x158009c, 0xd88b10,
+0x37f30f, 0x158009b, 0x188b10, 0x360064,
+0x158009b, 0x1188b14, 0x11b8000, 0x99a69,
+0x37f56f, 0x1621d93, 0x58b316, 0x11b8000,
+0x996a9, 0x37f76f, 0x3606a2, 0x1621d93,
+0xd89312, 0x37f92f, 0x11b8000, 0x994a9,
+0x11b8000, 0x99889, 0x11b8000, 0x9c689,
+0x36f12f, 0x36f36f, 0xc82a12, 0xc82616,
+0x1c0203, 0x1006587, 0x1800000, 0x100758b,
+0x1800000, 0x36ed2f, 0x11b8008, 0x9cb29,
+0x36ef2f, 0x0, 0x360522, 0x11b8008,
+0x9c129, 0x370520, 0x11b0008, 0x9c129,
+0x1377fff, 0x1c92412, 0x370524, 0x370600,
+0x370604, 0x36f52f, 0x370320, 0x370324,
+0x36f72f, 0x11b8008, 0x99129, 0x36f92f,
+0x11b8008, 0x99f29, 0x370020, 0xc82011,
+0x370024, 0x1020001, 0x1c0c69e, 0x36ef0f,
+0x0, 0x360300, 0x11b8008, 0x99d09,
+0x36ff5f, 0x36fd3f, 0x36fb1f, 0x1581ffe,
+0x198bb17, 0x70000, 0x1580002, 0x98bb17,
+0x0, 0x37fc17, 0x37e51f, 0x37fe37,
+0x37e73f, 0x37e95f, 0xc82210, 0x1581fff,
+0x58bb12, 0x1581fff, 0x58bb10, 0x1e09f9a,
+0x13bef3f, 0x1000000, 0x181300, 0x1621d94,
+0x18b316, 0x1581ffd, 0x1d8bb14, 0x37df2f,
+0x1581fff, 0x58bb12, 0x1581fff, 0x58bb13,
+0x37e12f, 0x1581fff, 0x58bb12, 0x37e32f,
+0x1581ffe, 0x118bb12, 0x370820, 0x11b0000,
+0x99419, 0xc82a12, 0xc82016, 0x1c0503,
+0x1006581, 0x1800000, 0x100758b, 0x1800000,
+0x37f207, 0x36df0f, 0x0, 0x370600,
+0x36e10f, 0x0, 0x370420, 0x36e30f,
+0x0, 0x370200, 0xc82414, 0xc82013,
+0x1c0503, 0x1006501, 0x1800000, 0x1007505,
+0x1800000, 0xc82011, 0x11b0008, 0x9cb39,
+0x1020001, 0x1c0c6be, 0x11b0000, 0x9c209,
+0x14bffff, 0x1c12001, 0x1c47f00, 0x208000,
+0x60, 0xa05302, 0xc82a13, 0x1580008,
+0x189b13, 0x11b0000, 0x99889, 0xc91802,
+0x890200, 0x1020001, 0x1c08e17, 0x11b0008,
+0x99d49, 0x1581ffe, 0x118bb10, 0xc80600,
+0x1581ffe, 0x118bb12, 0x360144, 0x37e947,
+0x11b0008, 0x99d49, 0x0, 0x360944,
+0x370340, 0x11b0008, 0x99d09, 0x0,
+0x360500, 0x370502, 0x11b0000, 0x99a09,
+0xd40004, 0x11810e, 0x11b0008, 0x99d29,
+0x1581ffe, 0x118bb14, 0x1581ffe, 0x118bb10,
+0x360f22, 0x370724, 0x11b0008, 0x99d29,
+0x0, 0x360d22, 0x370920, 0x1581ffe,
+0x118bb12, 0x1646110, 0x131062b, 0x1581ffd,
+0x1d8bb14, 0xc80041, 0x1020001, 0x1c08cce,
+0x11b0008, 0x99d29, 0x1581ffe, 0x118bb10,
+0x360322, 0x37e927, 0x11b0008, 0x99d29,
+0x0, 0x360b22, 0x370320, 0x11b0000,
+0x99a09, 0xd40004, 0x118107, 0x11b0008,
+0x99d09, 0x1581ffe, 0x118bb12, 0x361100,
+0x370702, 0x1581ffd, 0x1d8bb14, 0x1581ffe,
+0x118bb12, 0x1646110, 0x1310627, 0xc80041,
+0x1020001, 0x1c08cce, 0x1646130, 0x1316627,
+0xc82815, 0xc82413, 0xc82015, 0x162004c,
+0x1180300, 0x1020001, 0x1c0d57a, 0x11b0008,
+0x99f49, 0x158009a, 0x188b16, 0x1646110,
+0x31262b, 0xc82015, 0x1020001, 0x1c08d20,
+0x158009a, 0x1188b16, 0x1646110, 0x312627,
+0xc82013, 0x11b0008, 0x99f49, 0x1020001,
+0x1c08d20, 0x158009b, 0x188b14, 0x1646110,
+0x31262b, 0xc82015, 0x1020001, 0x1c0cb9a,
+0x158009b, 0x1188b14, 0x1646110, 0x312627,
+0xc82013, 0x1020001, 0x1c0cb9a, 0x11b0000,
+0x9c209, 0x11b8000, 0x99809, 0x36e95f,
+0x36e73f, 0x36e51f, 0x36fe37, 0x36fc17,
+0x1581ffd, 0x198bb17, 0x70000, 0xd40004,
+0x11810c, 0xb00022, 0x118208, 0x1477fff,
+0x1c24402, 0x110305, 0x11b8000, 0x9c628,
+0xc80020, 0x100f09, 0xc80022, 0x100f07,
+0xd40104, 0x118104, 0x11b8000, 0x9c828,
+0x100ff8, 0xc80021, 0x0, 0x70000,
+0x762e17, 0x0, 0x37ff1f, 0xc82210,
+0x162004c, 0x1181302, 0xc80020, 0x1020001,
+0x1c03c73, 0x158004c, 0x1188b10, 0x162004c,
+0x1181302, 0xc80020, 0x1020001, 0x1c03c73,
+0x158009a, 0x188b10, 0xc80425, 0xc80020,
+0x1020001, 0x1c03c73, 0x1620040, 0x181302,
+0xc80020, 0x11b0008, 0x9c109, 0x1020001,
+0x1c06aa0, 0x36ff1f, 0x772e17, 0x70000,
+0x158009c, 0x588312, 0x11b0000, 0x9c608,
+0x360022, 0x8e2002, 0x110102, 0x370002,
+0x158009c, 0x988312, 0x11b0000, 0x9c808,
+0x360022, 0x8e2002, 0x110105, 0x370002,
+0xb00000, 0x118102, 0x130fce, 0x0,
+0x70000, 0x14bffff, 0x1c62000, 0x1f58000,
+0x634c, 0x1032160, 0x191300, 0x1e4ffff,
+0x1ffe000, 0x18e190, 0x130832d, 0x9c040c,
+0x1cdffff, 0x1ffffd0, 0x461, 0x181308,
+0x1cdffff, 0x1ffffd0, 0x461, 0x181308,
+0x1cdffff, 0x1ffffd0, 0x461, 0x181308,
+0x1d0007, 0x1c60000, 0x618d, 0x1cb0860,
+0x11ba308, 0x1007941, 0x1800000, 0x10079c1,
+0x1800000, 0x70000, 0x1686426, 0x31c605,
+0x164752f, 0x1b1e661, 0x14bffff, 0x1c62000,
+0xc9102d, 0x9c040c, 0x1cdffff, 0x1ffffd0,
+0x461, 0x181308, 0x1cdffff, 0x1ffffd0,
+0x461, 0x181308, 0x1cdffff, 0x1ffffd0,
+0x461, 0x181308, 0x3602a4, 0x175ffff,
+0x1c5208a, 0x1f58000, 0x600c, 0x11b0060,
+0x991300, 0x1b70000, 0x604c, 0x1830262,
+0x1185368, 0x1b70000, 0x626c, 0x131262,
+0x1981310, 0x1467fff, 0x1c17488, 0x1467fff,
+0x1c26002, 0x1007941, 0x1800000, 0x1d0011,
+0x1467fff, 0x1c57488, 0x1467fff, 0x1c17488,
+0x1c60000, 0x618c, 0x536560, 0x1181360,
+0x1c60000, 0x61cc, 0x536760, 0x198136c,
+0x1806298, 0x75c000, 0x0, 0x0,
+0x18062dd, 0x1678000, 0x0, 0x0,
+0x36ff37, 0x772e17, 0x70000, 0x1e472c6,
+0x1c02000, 0x18d190, 0x1302316, 0x175e5ad,
+0x1802180, 0x1e47256, 0x2000, 0x18e190,
+0x13ae30a, 0x1e47fff, 0x1ffe000, 0x1db185,
+0x316308, 0x1d000b, 0x100694d, 0x1800000,
+0x10069cd, 0x1800000, 0x1c40000, 0x618c,
+0x637960, 0x1182374, 0x1007941, 0x1800000,
+0x10079c1, 0x1800000, 0x1d0005, 0x1002589,
+0x1000000, 0x100794d, 0x1800000, 0x10079cd,
+0x1800000, 0xc82002, 0x1620000, 0x1db3b6,
+0x370160, 0x70000, 0x360222, 0x3604a2,
+0x1e47fff, 0x1ffe000, 0x1da185, 0x3ac302,
+0x1620000, 0x58e318, 0x360142, 0x10d0000,
+0xc769, 0x1006909, 0x0, 0x1007900,
+0x0, 0x370142, 0x1620000, 0x1da3b4,
+0x70000, 0x1e46633, 0x1ffe000, 0x18498c,
+0x1301311, 0x1e46633, 0x1ffe000, 0x18498d,
+0x1301313, 0x1e46633, 0x1ffe000, 0x18498e,
+0x1301315, 0x1e46633, 0x1ffe000, 0x18d191,
+0x1318321, 0x1e46677, 0x1ffe000, 0x18e998,
+0x31b320, 0x1e47fff, 0x1ffe000, 0x1d8184,
+0x3a8310, 0x3604e2, 0x1bd0000, 0x764c,
+0x11b0875, 0x990b12, 0x1e47fff, 0x1ffe000,
+0x18e998, 0x3b530e, 0x1e47fff, 0x1ffe000,
+0x18e18d, 0x30b314, 0x1e47fff, 0x1ffe000,
+0x1da1d9, 0x3ac312, 0x1630860, 0x181b03,
+0x1647fff, 0x1fa962f, 0x1620001, 0x11d8bb1,
+0x1d80000, 0xc00, 0x2, 0xbde52,
+0x1e08000, 0x0, 0xfe, 0x19031e,
+0x10d0001, 0x80c815, 0x1c00c01, 0x148604c,
+0x30460, 0xd80320, 0x1cb0000, 0x632c,
+0x1030060, 0x1990304, 0x1377fff, 0x1cb030b,
+0x1cb8000, 0x614c, 0x1031961, 0x1990306,
+0x1c4f4e6, 0x1c03fe7, 0x1f3fc60, 0x1187304,
+0x144ffff, 0x1c7067c, 0x1580001, 0x118cb19,
+0x10c8000, 0x140c7c2, 0x14069cd, 0x18eee4c,
+0x144fbe3, 0x187067c, 0x1b67fff, 0x1fffc00,
+0x31664, 0x983316, 0xd03c1e, 0x14069cd,
+0x8eee4c, 0x144fbe3, 0x187067c, 0x10c8000,
+0x180c7d1, 0x14069cd, 0x8eee4c, 0x144fbe3,
+0x187067c, 0xd03c1e, 0x1647fff, 0x1fad6c9,
+0x10d0001, 0xc814, 0x1e47fff, 0x1ffe000,
+0x1901ba, 0x1315368, 0xc82670, 0x1805233,
+0xd3c000, 0x0, 0x0, 0x1c65233,
+0xd3c000, 0x61, 0x1184b01, 0x1c05233,
+0xd3fc00, 0x30c61, 0x580b0c, 0x1c05233,
+0xd3fc00, 0x30c61, 0x580b0c, 0x1c05233,
+0xd3fc00, 0x30c61, 0x580b0c, 0x1c05233,
+0xd3fc00, 0x30c61, 0x580b0c, 0x1c05233,
+0xd3fc00, 0x30c61, 0x580b0c, 0x1c05233,
+0xd3fc00, 0x30c61, 0x580b0c, 0x1c05233,
+0xd3fc00, 0x30c61, 0x580b0c, 0x1c05233,
+0xd3fc00, 0x30c61, 0x580b0c, 0x1c05233,
+0xd3fc00, 0x30c61, 0x580b0c, 0x1c05233,
+0xd3fc00, 0x30c61, 0x580b0c, 0x140651a,
+0x8ec91c, 0x370154, 0x1e47fff, 0x1ffe000,
+0x1901bc, 0x13ad364, 0x3106c3, 0x76361b,
+0x1581ffe, 0x118bb17, 0x1620000, 0x1d8bb0,
+0x1620000, 0x1da3b2, 0x1620000, 0x1dabb5,
+0x11b7fb4, 0x17ff617, 0x11b7fcc, 0x17ff917,
+0x11b7fdd, 0x17ffb37, 0x11b7fee, 0x17ffd57,
+0x11b7ff5, 0x17ffe37, 0x1581fff, 0xd8bb17,
+0x70000, 0x1e46633, 0x1ffe000, 0x18498c,
+0x1301311, 0x1e46633, 0x1ffe000, 0x18498d,
+0x1301313, 0x1e46633, 0x1ffe000, 0x18498e,
+0x1301315, 0x1e46633, 0x1ffe000, 0x18d191,
+0x1318321, 0x1e46677, 0x1ffe000, 0x18e998,
+0x31b320, 0x1e47fff, 0x1ffe000, 0x1d8184,
+0x3a8310, 0x3604e2, 0x1bd0000, 0x764c,
+0x11b0875, 0x990b12, 0x1e47fff, 0x1ffe000,
+0x18e998, 0x3b530e, 0x1e47fff, 0x1ffe000,
+0x18e18d, 0x30b314, 0x1e47fff, 0x1ffe000,
+0x1da1d9, 0x3ac312, 0x1e00000, 0x21,
+0x1000000, 0x190303, 0x1647fff, 0x1fa962f,
+0x1e08000, 0x0, 0x30, 0x1903b1,
+0x1d80000, 0x1800, 0x2, 0xbde52,
+0x1e08000, 0x0, 0x7e, 0x19031e,
+0x10d0001, 0x80c907, 0x1c00c01, 0x148604c,
+0x30460, 0xd80320, 0x1cb0000, 0x632c,
+0x1030060, 0x1990304, 0x1377fff, 0x1cb030b,
+0x1cb8000, 0x614c, 0x1031961, 0x1990306,
+0x1c4f4e6, 0x1c03fe7, 0x1f3fc60, 0x1187304,
+0x144ffff, 0x1c7067c, 0x1580003, 0x18cb19,
+0x10c8001, 0xc0c882, 0x14069cd, 0x18eee4c,
+0x144fbe3, 0x187067c, 0x1b67fff, 0x1fffc00,
+0x31664, 0x983316, 0xd03c1e, 0x14069cd,
+0x8eee4c, 0x144fbe3, 0x187067c, 0x10c8001,
+0x100c891, 0x14069cd, 0x8eee4c, 0x144fbe3,
+0x187067c, 0xd03c1e, 0x1647fff, 0x1fad6c9,
+0x10d0001, 0xc906, 0x1e47fff, 0x1ffe000,
+0x1901ba, 0x1315368, 0xc82670, 0x1805233,
+0xd3c000, 0x0, 0x0, 0x1c65233,
+0xd3c000, 0x61, 0x1184b01, 0x1c05233,
+0xd3fc00, 0x30c61, 0x580b0c, 0x1c05233,
+0xd3fc00, 0x30c61, 0x580b0c, 0x1c05233,
+0xd3fc00, 0x30c61, 0x580b0c, 0x1c05233,
+0xd3fc00, 0x30c61, 0x580b0c, 0x1c05233,
+0xd3fc00, 0x30c61, 0x580b0c, 0x1c05233,
+0xd3fc00, 0x30c61, 0x580b0c, 0x1c05233,
+0xd3fc00, 0x30c61, 0x580b0c, 0x1c05233,
+0xd3fc00, 0x30c61, 0x580b0c, 0x1c05233,
+0xd3fc00, 0x30c61, 0x580b0c, 0x1c05233,
+0xd3fc00, 0x30c61, 0x580b0c, 0x1c05233,
+0xd3fc00, 0x30c61, 0x580b0c, 0x1c05233,
+0xd3fc00, 0x30c61, 0x580b0c, 0x1c05233,
+0xd3fc00, 0x30c61, 0x580b0c, 0x1c05233,
+0xd3fc00, 0x30c61, 0x580b0c, 0x1c05233,
+0xd3fc00, 0x30c61, 0x580b0c, 0x1c05233,
+0xd3fc00, 0x30c61, 0x580b0c, 0x1c05233,
+0xd3fc00, 0x30c61, 0x580b0c, 0x1c05233,
+0xd3fc00, 0x30c61, 0x580b0c, 0x1c05233,
+0xd3fc00, 0x30c61, 0x580b0c, 0x1c05233,
+0xd3fc00, 0x30c61, 0x580b0c, 0x1c05233,
+0xd3fc00, 0x30c61, 0x580b0c, 0x1c05233,
+0xd3fc00, 0x30c61, 0x580b0c, 0x140651a,
+0x8ec91c, 0x1467fff, 0x1c6438c, 0x370154,
+0x1e47fff, 0x1ffe000, 0x1901bc, 0x13ad364,
+0x3106c3, 0x76361b, 0x1581ffd, 0x18bb17,
+0x1620000, 0x1d8bb0, 0x1620000, 0x1da3b2,
+0x1620000, 0x1dabb5, 0x11b7fb4, 0x17ff617,
+0x11b7fcc, 0x17ff917, 0x11b7fdd, 0x17ffb37,
+0x11b7fee, 0x17ffd57, 0x11b7ff5, 0x17ffe37,
+0x1581fff, 0xd8bb17, 0x70000, 0x1580000,
+0x1d8bb17, 0x0, 0x37fc17, 0x37f89f,
+0x37fe37, 0x37fb1f, 0x37fd3f, 0x37ff5f,
+0x37f56f, 0x1646100, 0xb16629, 0xc80602,
+0xc81208, 0x37f72f, 0x1581fff, 0x98bb12,
+0x1646192, 0x302607, 0x360001, 0x1581fff,
+0x98bb13, 0x37f407, 0x360341, 0x1581fff,
+0x98bb15, 0x370342, 0x1581fff, 0x98bb14,
+0x360721, 0x370523, 0xc82416, 0x360a01,
+0x370605, 0xc80001, 0x1020001, 0x1c0cb47,
+0x1581fff, 0x98bb14, 0x1581fff, 0x98bb10,
+0x1646130, 0x1308613, 0x360561, 0x1581fff,
+0x98bb12, 0x370364, 0x1581fff, 0x98bb14,
+0x360961, 0x370560, 0x360a01, 0x370602,
+0xc80001, 0x36f70f, 0x36f52f, 0x1020001,
+0x1c0cb47, 0x1581fff, 0x98bb10, 0x0,
+0x360600, 0x370a01, 0x36ff5f, 0x36fd3f,
+0x36fb1f, 0x36fe37, 0x36fc17, 0x36f89f,
+0x1581fff, 0x58bb17, 0x70000, 0x1b80000,
+0x600c, 0x1032060, 0x990300, 0x108103,
+0x0, 0x70000, 0x1620000, 0x58d318,
+0x10d0000, 0x80c976, 0x1467fff, 0x1c17070,
+0x1c07fff, 0x1fffc00, 0x3026e, 0x15bab02,
+0x918022, 0x70000, 0x1580000, 0x1d8bb17,
+0x0, 0x37f217, 0x37fb1f, 0x37f437,
+0x37fd3f, 0x37ff5f, 0xc82610, 0xc82212,
+0x37f36f, 0x1377fff, 0x1cb3713, 0x1580003,
+0x189b15, 0xc82813, 0x1377fff, 0x1c83793,
+0x1e09dcd, 0x2753e, 0x1dc28f6, 0x181300,
+0x1e08000, 0x3b, 0xe4f768, 0x190308,
+0x762814, 0x1e0a0a8, 0x3b, 0x1cac084,
+0x180b06, 0x3606a1, 0x37f56f, 0x1e08000,
+0x3a, 0x10624de, 0x190303, 0x3704a3,
+0x1580002, 0xd89b16, 0x1e08000, 0x3b,
+0x1a9fbe8, 0x19030a, 0x1580001, 0xd89b12,
+0x37f76f, 0x36f36f, 0x0, 0x360366,
+0x37f95f, 0x373d63, 0x3602e1, 0x14bffff,
+0x1c7200e, 0x3702e3, 0xc82a13, 0xc82c14,
+0x1c0103, 0x10065ed, 0x1800000, 0x10075eb,
+0x1800000, 0x36f34f, 0x0, 0x360144,
+0x372f43, 0x370200, 0x370202, 0x36f54f,
+0xc82c14, 0x370204, 0x36f74f, 0x0,
+0x370204, 0x363d43, 0x158009c, 0x18a314,
+0x370140, 0x363d43, 0x15800b8, 0x58a314,
+0x370142, 0x363d43, 0x15800ce, 0x98a314,
+0x370146, 0x36f76f, 0x363d43, 0x15800f5,
+0x98a314, 0x370146, 0x360401, 0x14bffff,
+0x1c02000, 0x1c47f00, 0x208000, 0x60,
+0x205300, 0x8c0040, 0x14b6100, 0x1003000,
+0xe80100, 0x14b7e00, 0x802002, 0x370600,
+0x360401, 0x14bffff, 0x1c02000, 0x1c47f00,
+0x208000, 0x60, 0x205300, 0x8c0200,
+0x14b6100, 0x1003000, 0xe80100, 0x14b7e00,
+0x802002, 0x370602, 0x36f50f, 0x360401,
+0x14bffff, 0x1c02000, 0x1c47f00, 0x208000,
+0x60, 0x205300, 0x8c0240, 0x14b6100,
+0x1003000, 0xe80100, 0x14b7e00, 0x802002,
+0x370600, 0xc82016, 0x360401, 0x14bffff,
+0x1c02000, 0x1c47f00, 0x208000, 0x60,
+0x205300, 0x8c00c0, 0x14b6100, 0x1003000,
+0xe80100, 0x14b7e00, 0x802002, 0x370600,
+0x36f90f, 0x360401, 0x14bffff, 0x1c02000,
+0x1c47f00, 0x208000, 0x60, 0x205300,
+0x363d23, 0x8c0020, 0x8c0060, 0x14b6100,
+0x1003000, 0xe80100, 0x14b7e00, 0x802002,
+0x1020001, 0x1c0b9e8, 0x1580003, 0xd89b10,
+0x360401, 0x14bffff, 0x1c02000, 0x1c47f00,
+0x208000, 0x60, 0x205300, 0x363d23,
+0x8c0020, 0x158004e, 0x189312, 0x8c0060,
+0x14b6100, 0x1003000, 0xe80100, 0x14b7e00,
+0x802002, 0x1020001, 0x1c0b9e8, 0xc82013,
+0x1020001, 0x1c0cab8, 0x36ff5f, 0x36fd3f,
+0x36fb1f, 0x36f437, 0x36f217, 0x1581fff,
+0x58bb17, 0x70000, 0x1580000, 0x118bb17,
+0x0, 0x37fa17, 0x37fb1f, 0x37fc37,
+0x37fd3f, 0x37ff5f, 0xc82210, 0x360410,
+0x1020001, 0x1c0cb0a, 0x360801, 0xd40004,
+0x110111, 0x362f01, 0x1580003, 0x188b14,
+0xc80001, 0x360b20, 0xc82012, 0x1020001,
+0x1c0b4b5, 0x362f01, 0x1580003, 0xd88b14,
+0xc80001, 0x360d20, 0xc82012, 0x1020001,
+0x1c0b4b5, 0x362f21, 0xc80401, 0x360c31,
+0x360b32, 0xc80003, 0x360f02, 0x360d52,
+0xc82413, 0x1020001, 0x1c08cc6, 0x362f01,
+0x1646130, 0x31262b, 0xc80401, 0x361100,
+0x1020001, 0x1c08cc6, 0x362f01, 0x1646110,
+0x1312627, 0x360a31, 0x360b00, 0xc80003,
+0x1020001, 0x1c08cc6, 0x362f01, 0x1646130,
+0x31262b, 0xc80401, 0x360d00, 0x1020001,
+0x1c08cc6, 0x360601, 0xd40004, 0x11011f,
+0x362f01, 0x1376110, 0xa3791, 0x360b20,
+0xc82012, 0x1020001, 0x1c0d523, 0x362f01,
+0x1580001, 0xd88b14, 0xc80001, 0x360d20,
+0xc82012, 0x1020001, 0x1c0d523, 0x362f01,
+0x1376110, 0xa3711, 0x360f20, 0xc82012,
+0x1020001, 0x1c0d523, 0x362f01, 0x1580002,
+0xd88b14, 0xc80001, 0x361120, 0xc82012,
+0x1020001, 0x1c0d523, 0x36ff5f, 0x36fd3f,
+0x36fb1f, 0x36fc37, 0x36fa17, 0x1581fff,
+0x118bb17, 0x70000, 0xd40004, 0x110103,
+0xc80021, 0x100f0b, 0xb00022, 0x118208,
+0x14bffff, 0x1c021a1, 0x8e2002, 0x110304,
+0xc80020, 0x370220, 0x100f02, 0xc80022,
+0x0, 0x70000, 0x1580000, 0x98bb17,
+0x0, 0x37fc17, 0x37fd1f, 0x37ff3f,
+0xc82610, 0x360000, 0xc80421, 0x14b7fff,
+0x1c02000, 0x370623, 0x118214, 0xd40804,
+0x110312, 0x1621d94, 0x1588310, 0x1377fff,
+0x1c80010, 0x0, 0x360100, 0x0,
+0xc0f00, 0x0, 0xc80020, 0x370c03,
+0x100f03, 0xc80048, 0x370c03, 0xc80021,
+0x370803, 0x100f06, 0xc80448, 0xc80020,
+0x370c23, 0x370803, 0x370603, 0x1377fff,
+0x1c84013, 0x0, 0x144ffff, 0x1c06048,
+0x1020001, 0x1c08cfd, 0x370a03, 0x360c03,
+0x1020001, 0x1c08cfd, 0x1377fff, 0x1c8b793,
+0x370c03, 0xc80224, 0x360621, 0xc80020,
+0x360101, 0x1020001, 0x1c06aa0, 0x1377fff,
+0x1c8a211, 0x770201, 0xd40014, 0x1004f7,
+0x1580003, 0x189b10, 0xc80020, 0x360420,
+0x360100, 0x1020001, 0x1c06aa0, 0x1580003,
+0xd89b10, 0xc80020, 0x360420, 0x360100,
+0x1020001, 0x1c06aa0, 0x36ff3f, 0x36fd1f,
+0x36fc17, 0x1581fff, 0x198bb17, 0x70000,
+0xc82410, 0x360200, 0x360022, 0x8e2002,
+0x110103, 0x370002, 0x130fa8, 0x0,
+0x70000, 0x1e46633, 0x1ffe000, 0x18c190,
+0x131a321, 0x1e46677, 0x1ffe000, 0x18f190,
+0x131c321, 0xd40024, 0x118112, 0x1006919,
+0x0, 0x1447fff, 0x1c26601, 0x144ffff,
+0x1c37601, 0x10d0000, 0xcb2b, 0x1006919,
+0x0, 0x100693d, 0x1000000, 0x1447940,
+0x20181, 0x144f964, 0x1030181, 0x100f13,
+0x1006919, 0x0, 0x100693d, 0x1000000,
+0x10d0000, 0xcb3e, 0x1446890, 0x20181,
+0x144e8b4, 0x30181, 0x1446919, 0x20209,
+0x144693d, 0x103030b, 0x1007940, 0x0,
+0x1007964, 0x1000000, 0x11b7fe4, 0x17ffc17,
+0x11b7ff5, 0x17ffe37, 0x1581fff, 0x198bb17,
+0x70000, 0x1e47254, 0x2000, 0x18718c,
+0x1306311, 0x1644ddf, 0x1f16629, 0x164433f,
+0x1e48885, 0x12a4fff, 0x1f04a09, 0x360516,
+0x360346, 0x360666, 0x1e47080, 0x802000,
+0x1d618a, 0x3a9311, 0x1e47fff, 0x1ffe000,
+0x1da185, 0x3b130a, 0x1b80000, 0x630c,
+0x1032061, 0x99130a, 0x1e08000, 0x1ff,
+0x1fffffe, 0x18d319, 0x1f48000, 0x100,
+0x2, 0x1094a, 0x1377fff, 0x1c88311,
+0x10d0000, 0x80cb88, 0x1c0ffff, 0x1fffbe0,
+0x4b0761, 0x5ba307, 0x1c0f5c4, 0x1c03be0,
+0x1b0f61, 0x5ba30f, 0x10d0001, 0x80cb7a,
+0x1c05250, 0xf9fa00, 0x1430761, 0x180307,
+0x1c05210, 0xf9fa03, 0x1430761, 0x181307,
+0x1c05250, 0x89fa00, 0x1430761, 0x180307,
+0x10079e3, 0x1800000, 0x1407962, 0xb1bf53,
+0x1007971, 0x1800000, 0x10079f1, 0x1800000,
+0x1620000, 0x1da3b1, 0x1b87fff, 0x1ffc000,
+0x60, 0x1d4b11, 0x370606, 0x11b7ff7,
+0x17ffe77, 0x11b7fe4, 0x17ffc17, 0x11b7fdc,
+0x17ffb17, 0x1581fff, 0x158bb17, 0x70000,
+0x360364, 0x1e47214, 0x2000, 0x18f191,
+0x31c330, 0x3604a4, 0x1e47246, 0x2000,
+0x1db181, 0x3ae30a, 0x360624, 0x1377fff,
+0x1cb0116, 0x175ffff, 0x1c02080, 0x1bbd298,
+0x17de000, 0x190190, 0x300300, 0x1406965,
+0x18e48c4, 0x142ebed, 0xe248c, 0x10d0000,
+0xcbbf, 0x1c04a88, 0x17dbc00, 0x30661,
+0x187306, 0x1c2da58, 0x7d3c00, 0x30260,
+0x198430e, 0x1c04acc, 0x17dbc00, 0x30461,
+0x186304, 0x1c2da5c, 0x7d3c00, 0x30260,
+0x118430c, 0x1407b4d, 0x18e68e6, 0x142f921,
+0x18e268e, 0x180624c, 0x7dc000, 0x0,
+0x0, 0x1b80000, 0x76ce, 0x1b3b660,
+0x9d7316, 0x370624, 0x70000, 0x1e47fff,
+0x1ffe000, 0x1d8180, 0x3a8310, 0xc83030,
+0x1b70000, 0x620c, 0x431060, 0x998302,
+0x120109, 0x1006900, 0x0, 0x1006980,
+0x0, 0x10d0000, 0x80cbe1, 0x1496980,
+0xe0800, 0x1647fff, 0x1fb0641, 0x70000,
+0x1620000, 0x58f31e, 0x10d0000, 0xcbf2,
+0x1006929, 0x1800000, 0x1c58000, 0x618d,
+0x1e30260, 0x11be302, 0x1007941, 0x1800000,
+0x10079c5, 0x1800000, 0x70000, 0x138432f,
+0x1c22200, 0x13ccfef, 0x1f04609, 0x13ce979,
+0x1b04609, 0x16469f9, 0x1b18605, 0x1646989,
+0x1b1a611, 0x164e999, 0x1b00641, 0x16468a8,
+0x314609, 0x340016, 0x340226, 0x340466,
+0x3406e6, 0x801410, 0x1c0748a, 0x803a04,
+0x630461, 0x581304, 0x1416924, 0x130ba15,
+0x1c17fff, 0x1ffe047, 0x1f3f960, 0x118330f,
+0x1c17fff, 0x1ffe040, 0x860, 0x1187307,
+0x1c07fff, 0x1fff9b4, 0x1e30661, 0x980b00,
+0x1c0748a, 0x803a04, 0x530661, 0x581306,
+0x1406924, 0x123f54a, 0x1c07ca0, 0x3a27,
+0x1430661, 0x1d82306, 0x1c07ce0, 0x3a20,
+0x430660, 0x1d86306, 0x1d1421, 0x1c07fff,
+0x1fffab5, 0xf30461, 0x980b00, 0x1c0748a,
+0x803a04, 0x630461, 0x581304, 0x1416924,
+0x130ba15, 0x1c17cb0, 0x2047, 0x1f3f960,
+0x118330f, 0x1c17cf0, 0x2040, 0x860,
+0x1187307, 0x1c07fff, 0x1fff9b4, 0x1e30661,
+0x980b00, 0x1c0748a, 0x803a04, 0x530661,
+0x581306, 0x1406924, 0x123f54a, 0x1c07ca0,
+0x3a27, 0x1430661, 0x1d82306, 0x1c07ce0,
+0x3a20, 0x430660, 0x1d86306, 0x1407960,
+0xee76e, 0x10079e0, 0x0, 0x350016,
+0x350226, 0x350466, 0x3506e6, 0x11a7ff7,
+0x17ffe77, 0x11a7fe4, 0x17ffc17, 0x1581fff,
+0x198bb17, 0x70000, 0x1580000, 0x118bb17,
+0x0, 0x37f907, 0x37fa97, 0x1581fff,
+0x118bb14, 0x1e08000, 0x0, 0x1cb1e,
+0x184b16, 0x10c8002, 0xcc73, 0xc82012,
+0x100650d, 0x1800000, 0x130f22, 0x1e47fff,
+0x1ffe000, 0x181180, 0x310314, 0xc80009,
+0x130f29, 0x761209, 0x1e08000, 0x0,
+0x1cb16, 0x190316, 0x1580000, 0xd8b312,
+0x36f907, 0xc83030, 0x1805651, 0x179c000,
+0x0, 0x0, 0x10c8000, 0x100cc88,
+0x13865a4, 0x108, 0x1e65651, 0x179c000,
+0x60, 0x185300, 0x1007501, 0x1800000,
+0x36fa97, 0x1581fff, 0x118bb17, 0x70000,
+0xe9020a, 0x1377fff, 0x1c80510, 0x1677fff,
+0x1c02180, 0x1737fff, 0x1c52180, 0xc80061,
+0x1fd8000, 0x618c, 0x1032560, 0x185300,
+0x70000, 0xe9020a, 0x1377fff, 0x1c80510,
+0x1677fff, 0x1c22180, 0x1736600, 0x52184,
+0x1fc0c31, 0x120640c, 0x12b0060, 0x185302,
+0x1007600, 0x0, 0x70000, 0x100433f,
+0x1c00000, 0xc80400, 0x1620000, 0x58e31a,
+0x1e08000, 0xff00, 0x2, 0x180b1e,
+0x1e08000, 0x0, 0xc06, 0x190300,
+0x1647c00, 0x10ffe2, 0x1e08000, 0x400,
+0x1ffc8, 0x1db3ae, 0x10d0000, 0x80cccd,
+0x10c8000, 0x100ccc2, 0x1006504, 0x1000000,
+0x100770d, 0x1000000, 0x1620000, 0x580300,
+0x130f29, 0x10c8000, 0x100cccb, 0x100670d,
+0x1000000, 0x1007509, 0x0, 0x0,
+0x1620000, 0x1db3b6, 0x11b7ff4, 0x17ffe17,
+0x772e17, 0x70000, 0xc8341f, 0x1e08000,
+0x0, 0x2, 0x190300, 0x1647c00,
+0x10ffe2, 0x1620000, 0x58f31e, 0x1621ffe,
+0x18b316, 0x10c8000, 0x100cce3, 0x1006500,
+0x1000000, 0x100770d, 0x1000000, 0x1620000,
+0x1180300, 0x130f08, 0x1e08000, 0x0,
+0xc06, 0x190300, 0x1647c00, 0x10ffe2,
+0x70000, 0x1647c00, 0x10ffe0, 0x1620000,
+0x181302, 0x1377d00, 0x50ffe1, 0x1081fe,
+0x0, 0x70000, 0x1e0a0e3, 0x4e6d00,
+0x1d95c, 0x180310, 0x1620fff, 0x1d84308,
+0x13effff, 0x1c00060, 0x1580607, 0x580302,
+0xe91020, 0x370020, 0xce0200, 0x0,
+0x70000, 0x1621d95, 0x1988310, 0x0,
+0x370000, 0x70000, 0x1580000, 0xd8bb17,
+0x0, 0x37fa17, 0x37fb1f, 0x37fd3f,
+0x37ff5f, 0x1646100, 0xb13621, 0xc82212,
+0xc82a14, 0x16a0000, 0x18b304, 0x11010d,
+0x1580001, 0x589b10, 0x100670d, 0x1800000,
+0x10c8000, 0xc0cd22, 0x1007501, 0x1800000,
+0x100670d, 0x1800000, 0x1007501, 0x1800000,
+0x1580001, 0x589b10, 0x1020001, 0x1c0ccd4,
+0x1580001, 0x589b10, 0x1646110, 0x31462b,
+0xc82411, 0x1020001, 0x1c0d54e, 0x36ff5f,
+0x36fd3f, 0x36fb1f, 0x36fa17, 0x1581fff,
+0x158bb17, 0x70000, 0x1580000, 0xd8bb17,
+0x0, 0x37fa17, 0x37fa9f, 0x37fc37,
+0x37fcbf, 0x37ff1f, 0xc82210, 0xc81624,
+0x1020001, 0x1c0ccf8, 0xc80200, 0x1020001,
+0x1c0ccf8, 0xc80600, 0x1020001, 0x1c0ccf8,
+0xc81200, 0x1020001, 0x1c0ccf8, 0x771428,
+0x770428, 0x77160b, 0xce3243, 0x771028,
+0xce1041, 0x771428, 0xce4209, 0xe80866,
+0xce0240, 0xcd10c2, 0xe81088, 0xe81800,
+0xcd1202, 0xcd0002, 0x1007703, 0x1800000,
+0xd400b4, 0x1003e3, 0x36ff1f, 0x36fc37,
+0x36fa17, 0x36fcbf, 0x36fa9f, 0x1581fff,
+0x158bb17, 0x70000, 0xc82812, 0x16a0000,
+0x18a304, 0x11010d, 0x1580001, 0x588312,
+0x1006709, 0x1800000, 0x10c8000, 0xc0cd74,
+0x1007505, 0x1800000, 0x1006709, 0x1800000,
+0x1007505, 0x1800000, 0x1580001, 0x588310,
+0x1020001, 0x1c0ccd4, 0x0, 0x70000,
+0x1e47fff, 0x1ffe000, 0x181188, 0x131c321,
+0x10d0000, 0xcd8c, 0x1805210, 0xfdc000,
+0x0, 0x0, 0x1c60000, 0x618c,
+0x430060, 0x11bc300, 0x1806298, 0x75c000,
+0x0, 0x0, 0xc82202, 0x70000,
+0xed0100, 0x1bbd314, 0x179e000, 0x190190,
+0x300300, 0x1c65314, 0x179fff0, 0x80260,
+0x1184308, 0x1007941, 0x1800000, 0x10d0000,
+0xcda3, 0x1d05314, 0x179ffc7, 0x1f80261,
+0x1185308, 0x1007941, 0x1800000, 0x1007921,
+0x1800000, 0x70000, 0x762e17, 0x1620000,
+0x58d318, 0x37ff37, 0x1377fff, 0x1c98114,
+0x138658d, 0x185050a, 0x13ba148, 0x1b08611,
+0x13b79a7, 0x1b1662d, 0x1387949, 0x1802100,
+0x1d0807, 0x1805298, 0x75c000, 0x0,
+0x0, 0x1007949, 0x1800000, 0x10079c7,
+0x1800000, 0x100658d, 0x1800000, 0x10065ad,
+0x1800000, 0x1d0010, 0x77140a, 0x1d080a,
+0x1002149, 0x1000000, 0x1d0a01, 0x1c40000,
+0x618d, 0x1ab0c60, 0x11b8304, 0x1007949,
+0x1800000, 0x10079c7, 0x1800000, 0x100658d,
+0x1800000, 0x10065ad, 0x1800000, 0x1002149,
+0x1000000, 0x14478c6, 0x20304, 0x1007848,
+0x0, 0x36ff37, 0x772e17, 0x70000,
+0x1e01fa0, 0x3e, 0x1000000, 0x185308,
+0x13be529, 0x1b0e601, 0x762814, 0x1d0203,
+0x1006901, 0x1800000, 0x1007905, 0x1800000,
+0x1006921, 0x1800000, 0x1006569, 0x1800000,
+0x1d0e22, 0x10065e9, 0x1800000, 0x1387fff,
+0x1c7210e, 0x118311, 0x1d060d, 0x1c67010,
+0x2040, 0x80260, 0x1184300, 0x1446921,
+0x1820604, 0x1007945, 0x1800000, 0x1d0e01,
+0x1007905, 0x1800000, 0x80502c, 0x10079c5,
+0x1800000, 0x110f0d, 0x1d060a, 0x1c67010,
+0x2040, 0x80260, 0x1184300, 0x1446921,
+0x1820604, 0x1007945, 0x1800000, 0x80502c,
+0x10079c5, 0x1800000, 0x1006969, 0x1800000,
+0x35fe02, 0x70000, 0x1ab52dc, 0x179e010,
+0x163, 0x180320, 0x1387fff, 0x1c02100,
+0x1006920, 0x0, 0x10069a0, 0x1000000,
+0x1467fff, 0x1f12a25, 0x1806299, 0x173c000,
+0x0, 0x0, 0x18052dc, 0x179c000,
+0x0, 0x0, 0x1006921, 0x1800000,
+0x1c67fff, 0x1ffe040, 0x860, 0x1181306,
+0x1d0007, 0x18052dc, 0x179c000, 0x0,
+0x0, 0x1006921, 0x1800000, 0x1c66299,
+0x173e040, 0x860, 0x1181306, 0x100498c,
+0x400000, 0x70000, 0x1ab52dc, 0x179e010,
+0x163, 0x180320, 0x1382c29, 0x1002100,
+0x1006920, 0x0, 0x10069a0, 0x1000000,
+0x1c17fff, 0x1ffe040, 0x200860, 0x1183302,
+0x1806299, 0x173c000, 0x0, 0x0,
+0x18052dc, 0x179c000, 0x0, 0x0,
+0x1002c29, 0x1000000, 0x1006921, 0x1800000,
+0x1c152dc, 0x179e040, 0x200060, 0x1183302,
+0x1d0009, 0x1806299, 0x173c000, 0x0,
+0x0, 0x1002c29, 0x1000000, 0x1006921,
+0x1800000, 0x1c152dc, 0x179e040, 0x200060,
+0x1183302, 0x100498c, 0x400000, 0x70000,
+0x1ab52dc, 0x179e010, 0x163, 0x180320,
+0x1387fff, 0x1c02100, 0x1006920, 0x0,
+0x10069a0, 0x1000000, 0x1467fff, 0x1f12a25,
+0x1806299, 0x173c000, 0x0, 0x0,
+0x1006921, 0x1800000, 0x1c7d3cc, 0x179e000,
+0x190190, 0x30a302, 0x1467fff, 0x1f12a25,
+0x1d0007, 0x1006921, 0x1800000, 0x1c7d3cc,
+0x179e000, 0x190190, 0x30a302, 0x1c66299,
+0x173e040, 0x200860, 0x1181306, 0x100498c,
+0x400000, 0x70000, 0x1ab52dc, 0x179e010,
+0x163, 0x180320, 0x1382c29, 0x1002100,
+0x1006920, 0x0, 0x10069a0, 0x1000000,
+0x1c17fff, 0x1ffe040, 0x200860, 0x1183302,
+0x1806299, 0x173c000, 0x0, 0x0,
+0x18053cc, 0x179c000, 0x0, 0x0,
+0x1006921, 0x1800000, 0x147ac29, 0x130a605,
+0x1c153cc, 0x179e040, 0x200860, 0x1183302,
+0x1d0009, 0x1806299, 0x173c000, 0x0,
+0x0, 0x1006921, 0x1800000, 0x147ac29,
+0x130a605, 0x1c153cc, 0x179e040, 0x200860,
+0x1183302, 0x100498c, 0x400000, 0x70000,
+0x10065a9, 0x1800000, 0x1d0805, 0x14669a5,
+0x182000a, 0x14069a9, 0x18e4a42, 0x1007941,
+0x1800000, 0x70000, 0x1006569, 0x1800000,
+0x10065ed, 0x1800000, 0x1d0a0b, 0x1c2f4f2,
+0x1c03a22, 0x130460, 0x1980300, 0x1c674b4,
+0x1c02047, 0x1e00860, 0x1187304, 0x14469ed,
+0x1820604, 0x1007941, 0x1800000, 0x70000,
+0x13be969, 0x1b08611, 0x10069e5, 0x1800000,
+0x851c6e, 0x14669e5, 0x1820004, 0x1406969,
+0x18e4264, 0x1d0805, 0x142f941, 0x18e4e6e,
+0x14669e5, 0x1820004, 0x1406969, 0x18e4264,
+0x1007840, 0x0, 0x70000, 0x1376868,
+0xba217, 0x3402e4, 0x11bfff9, 0x17fff17,
+0x11bffe0, 0x17ffd57, 0x11bffd1, 0x17ffa97,
+0x11bffc3, 0x17ff8b7, 0x1d80000, 0x5c00,
+0xb8, 0x9ca30, 0x158000b, 0x1188b14,
+0x158000b, 0x118a315, 0x1e00000, 0x33,
+0x1ad7f2a, 0x190308, 0xc90260, 0x10d0000,
+0xcf77, 0xc91262, 0x1476939, 0x1820401,
+0x11827a, 0x8e2209, 0x118278, 0x1c674dd,
+0x1c02067, 0x1e80260, 0x184b01, 0x1c00c1d,
+0x12d65ac, 0x1030c61, 0xd85b0c, 0x1020001,
+0x1c08cfd, 0xc90d41, 0x1020001, 0x1c08cfd,
+0x1e0e00a, 0x1555540, 0xaaaaaa, 0x185302,
+0x1c5ffff, 0x1ffe040, 0x60, 0xd84b01,
+0x1c67fff, 0x1ffe040, 0x40760, 0x1185304,
+0x800404, 0x164fe10, 0xf04641, 0x1c60000,
+0x602d, 0x434760, 0x1182304, 0x1c00c31,
+0x103602c, 0x1030060, 0x1183b0c, 0x1020001,
+0x1c08cfd, 0x142e9c1, 0x18e401c, 0x14e6042,
+0x1b02619, 0x1cdffff, 0x1fffff0, 0x860,
+0x1181304, 0x1cdffff, 0x1fffff0, 0x860,
+0x1181304, 0x1cdffff, 0x1fffff0, 0x860,
+0x1181304, 0x1476040, 0x22004, 0x164fe10,
+0xf00641, 0x1020000, 0xc08cfd, 0x10069c3,
+0x1800000, 0x14e6001, 0x302619, 0x1cdf40a,
+0x3fb8, 0x161, 0xd8130b, 0x1cdf44b,
+0x3fb8, 0x161, 0xd8130b, 0x1cdffff,
+0x1ffffb8, 0x161, 0xd8130b, 0x14760b0,
+0x2200b, 0x164fe10, 0xf00641, 0x1020000,
+0xc08cfd, 0x1e00000, 0x33, 0x1ad7f2a,
+0x190308, 0x1476060, 0x1020084, 0x164fe10,
+0xb0261d, 0x1c5ffff, 0x1ffe047, 0x1f3fd60,
+0x1184304, 0x1406003, 0xe4c24, 0x1476060,
+0x102048c, 0x164fe10, 0xb0261d, 0x1c5fca2,
+0x1c03fc0, 0x13fd61, 0x118430c, 0x1406810,
+0xec42c, 0x10079c7, 0x1800000, 0x11b7ff9,
+0x17fff17, 0x11b7fe0, 0x17ffd57, 0x11b7fd1,
+0x17ffa97, 0x11b7fc3, 0x17ff8b7, 0x1581fff,
+0x118bb17, 0x70000, 0x1e4ffff, 0x1ffe000,
+0x180190, 0x304320, 0x1bb740a, 0x2000,
+0x188188, 0x315315, 0x13b6896, 0x311623,
+0x100fd1, 0x1b70000, 0x62ec, 0x1131762,
+0x191310, 0x1e47fff, 0x1ffe000, 0x18c198,
+0x30632d, 0x11bfff7, 0x17ffe77, 0x37fc17,
+0x8e2040, 0x128327, 0x1e4ffff, 0x1ffe000,
+0x187990, 0x304348, 0x8e2240, 0x10830a,
+0x1007941, 0x1800000, 0x1007941, 0x1800000,
+0x10078f0, 0x0, 0x1018001, 0x1c0d02b,
+0x36fc17, 0x1466003, 0x70000, 0x870ce4,
+0x14e6041, 0x1b0e601, 0x1cdffff, 0x1ffe050,
+0x860, 0x1187304, 0x1cdffff, 0x1ffe050,
+0x860, 0x1187304, 0x1cdffff, 0x1ffe050,
+0x860, 0x1187304, 0x1007941, 0x1800000,
+0x10079f1, 0x1800000, 0xc91e00, 0x100f21,
+0x8e2242, 0x108309, 0x1007941, 0x1800000,
+0x1007941, 0x1800000, 0x10078f0, 0x0,
+0x120f61, 0x36fc17, 0x1466023, 0x70102,
+0x870ce4, 0x14e6041, 0x1b0e605, 0x1cdffff,
+0x1ffe050, 0x860, 0x1187304, 0x1cdffff,
+0x1ffe050, 0x860, 0x1187304, 0x1cdffff,
+0x1ffe050, 0x860, 0x1187304, 0x10079f1,
+0x1800000, 0x1007941, 0x1800000, 0xc91e02,
+0x1e01fc0, 0x40, 0x6a09e6, 0x183304,
+0x886040, 0x8c2004, 0x8c2044, 0x9c1c0c,
+0x1cdffff, 0x1ffe050, 0x860, 0x1187304,
+0x1cdffff, 0x1ffe050, 0x860, 0x1187304,
+0x1cdffff, 0x1ffe050, 0x860, 0x1187304,
+0x36fa17, 0x8e202f, 0x128318, 0x1007840,
+0x0, 0x1c4ffff, 0x1ffe047, 0x1c80060,
+0x1187b0a, 0x9c1c0c, 0x1cdffff, 0x1ffe050,
+0x860, 0x1187304, 0x1cdffff, 0x1ffe050,
+0x860, 0x1187304, 0x1cdffff, 0x1ffe050,
+0x860, 0x1187304, 0xc9e109, 0x1020001,
+0x1c08cfd, 0x8c400e, 0x1476800, 0x24408,
+0x120219, 0x36fc17, 0x8c0200, 0x1c67fff,
+0x1ffe047, 0x1e3f860, 0x1187b0f, 0x1c67fff,
+0x1ffffcf, 0x1fc0061, 0x1984308, 0x143f900,
+0xe4c46, 0x1406083, 0x10e04e6, 0x1020001,
+0x1c08cfd, 0x142e900, 0xe4f70, 0x1406901,
+0x18ece04, 0x14079c0, 0xece04, 0x10078c0,
+0x0, 0x11b7ff7, 0x17ffe77, 0x1581fff,
+0x198bb17, 0x70000, 0x1ab0000, 0x600c,
+0x1130062, 0x1d90b17, 0x1e019eb, 0xbf953f,
+0x666666, 0x185308, 0x11bfff9, 0x7fff07,
+0x1d0015, 0xc82810, 0x1006945, 0x1800000,
+0x10069e9, 0x1800000, 0x1d0207, 0x1c5f4a2,
+0x1c03fd7, 0x1e80a61, 0x1185304, 0x14069e9,
+0x18ec68c, 0x10079c1, 0x1800000, 0x11b7ff9,
+0x7fff07, 0x1d80000, 0x5c00, 0xb8,
+0x94a10, 0x11bfff9, 0x7fff07, 0x1581fff,
+0x1d8bb17, 0x70000, 0x1580000, 0x98bb17,
+0xc80c00, 0x11bfff9, 0x17fff17, 0x37fd57,
+0x1e0ffff, 0x1ffa400, 0xb8, 0x18d318,
+0x1b70000, 0x626c, 0x31462, 0x580312,
+0x158000b, 0x118b315, 0x1006925, 0x1800000,
+0x10069a9, 0x1800000, 0x1d0615, 0x1466923,
+0x1820102, 0x14669a7, 0x186050a, 0x141696d,
+0x1b1682d, 0x1020001, 0x1c08cfd, 0x164e9eb,
+0x180ca01, 0x1020001, 0x1c08cfd, 0x1c2f492,
+0x1c03a23, 0x630460, 0x1982304, 0x1007940,
+0x0, 0x10079c0, 0x1000000, 0x13b69a9,
+0x1b10621, 0x11b7ff9, 0x17fff17, 0x36fd57,
+0x1581fff, 0x198bb17, 0x70000, 0x1580000,
+0x158bb17, 0x0, 0x37f617, 0x37f69f,
+0x37f837, 0x37f8bf, 0x37fa77, 0x37faff,
+0x37fc57, 0x37fd1f, 0x37ff3f, 0xc82610,
+0xc82212, 0xc80a02, 0xc80422, 0x14bffff,
+0x1c02000, 0x1c47f00, 0x208000, 0x60,
+0x205300, 0x7d1045, 0xc91800, 0x14bffff,
+0x1c02002, 0x1c47f00, 0x208000, 0x60,
+0x205300, 0x1020001, 0x1c08e17, 0xc82011,
+0x1e0a0e2, 0x1999a00, 0x0, 0x18430a,
+0x1620005, 0x181302, 0x14661a0, 0x8400,
+0x1020001, 0x1c03c73, 0xc80021, 0xc81e20,
+0x16461f2, 0xb07601, 0x370201, 0x16461f2,
+0x1b0060b, 0xd40004, 0x118120, 0x76040b,
+0xc81022, 0xc81421, 0x703225, 0x76000f,
+0x761c02, 0x7d1202, 0x761006, 0x1377fff,
+0x1c80111, 0x0, 0x3700a0, 0x370280,
+0x3700e3, 0x100f36, 0x1646101, 0x1b02645,
+0x76160b, 0x7d104b, 0x1377fff, 0x1c90111,
+0xc82012, 0x360022, 0x760402, 0x370020,
+0x370202, 0x1376150, 0x1000389, 0x761e0f,
+0xd32040, 0x1004e2, 0x1e08000, 0x3d,
+0x1ba5e36, 0x190302, 0x14bffff, 0x1c02009,
+0x1c47f00, 0x208000, 0x60, 0x205300,
+0x1e08000, 0x3e, 0x1666666, 0x190308,
+0xc80609, 0x808401, 0x8c0200, 0x1020001,
+0x1c02c39, 0x14b6100, 0x1003000, 0xe80100,
+0x14b7e00, 0x802002, 0x6e4a20, 0x700069,
+0xd320e0, 0x1081d5, 0xc80022, 0x7d000b,
+0x1377fff, 0x1c80011, 0x0, 0x360000,
+0x760000, 0x370000, 0x100fd7, 0x36fc77,
+0xc80a07, 0x36ff3f, 0x36fd1f, 0x36fa77,
+0x36f837, 0x36faff, 0x36f617, 0x36f8bf,
+0x36f69f, 0x1581fff, 0xd8bb17, 0x70000,
+0x1580001, 0x98bb17, 0x0, 0x37ee17,
+0x37f29f, 0x37f037, 0x37f4bf, 0x37f277,
+0x37f6ff, 0x35f457, 0x37f91f, 0x37fb3f,
+0x37fd5f, 0x35fedf, 0x1646101, 0x1315621,
+0xc82612, 0xc82214, 0x37ee2f, 0x14bffff,
+0x1c52006, 0x1c47f00, 0x208000, 0x61,
+0xa0530a, 0x360403, 0xc8042d, 0xc9180a,
+0x1020001, 0x1c08e17, 0xc81c00, 0x14bffff,
+0x1c32006, 0x1c47f00, 0x208000, 0x60,
+0x1a05306, 0x14bffff, 0x1c52008, 0x1c47f00,
+0x208000, 0x61, 0xa0530a, 0x360603,
+0xc91806, 0x8c524e, 0x8c784a, 0x1020001,
+0x1c08e17, 0xc81400, 0x14bffff, 0x1c42008,
+0x1c47f00, 0x208000, 0x61, 0x205308,
+0x360003, 0x8c420a, 0x8c1048, 0x37f02f,
+0x1020001, 0x1c0877e, 0x164e101, 0x1b0c61f,
+0x36f00f, 0x1020001, 0x1c08e17, 0x1020001,
+0x1c07e01, 0x14bffff, 0x1c52141, 0xc80400,
+0x360283, 0x8c1242, 0x144ffff, 0x1c06308,
+0xc91802, 0x1020001, 0x1c08e17, 0x37ecb7,
+0x164e1d2, 0x1b0d601, 0xc81a0b, 0x36ecb7,
+0xc80008, 0x1020001, 0x1c0877e, 0xc81620,
+0x37ecb7, 0x164e152, 0x1b05601, 0xc80a0b,
+0x36ecb7, 0x16461b2, 0xb01617, 0x36ee0f,
+0xd40004, 0x11844f, 0xc80022, 0xc80620,
+0x7d000b, 0x1377fff, 0x1c80011, 0x0,
+0x360000, 0xd40004, 0x110416, 0x76160b,
+0x36ee0f, 0xd3200b, 0x1005f4, 0x100f41,
+0x1377fff, 0x1c80095, 0x0, 0x350050,
+0x760603, 0xc80022, 0x760201, 0x7d000b,
+0x1377fff, 0x1c90011, 0xc82012, 0x360222,
+0x360002, 0x6e4849, 0xd32003, 0x1085ec,
+0x14b7fff, 0x1c0300f, 0xe80100, 0x14b7e00,
+0x80200f, 0xd32009, 0x110406, 0x1377fff,
+0x1c80095, 0x0, 0x370070, 0x100fe9,
+0x36f00f, 0x14b6100, 0x1003000, 0xe80100,
+0x14b7e00, 0x802002, 0xd32009, 0x1085dd,
+0x360200, 0x14bffff, 0x1c12009, 0x1c47f00,
+0x208000, 0x60, 0xa05302, 0xc9180f,
+0x14bffff, 0x1c02000, 0x1c47f00, 0x208000,
+0x60, 0x205300, 0x1c07fff, 0x1fffc00,
+0x30068, 0x1d80302, 0x1020001, 0x1c08e17,
+0xc9040d, 0x1020001, 0x1c069b9, 0x1377fff,
+0x1c80095, 0x8c00e0, 0x370000, 0x100fc5,
+0xc80e05, 0x34f457, 0x16461d3, 0x1b0560f,
+0x34fedf, 0xc81a0f, 0x36fd5f, 0x36fb3f,
+0x36f91f, 0x36f277, 0x36f037, 0x36ee17,
+0x36f6ff, 0x36f4bf, 0x36f29f, 0x1581ffe,
+0x198bb17, 0x70000, 0x100751f, 0x1800000,
+0x37ff1f, 0xc82210, 0x360810, 0x360000,
+0x8e2020, 0x11010a, 0x370010, 0xc82011,
+0x130f2d, 0x1580006, 0x188b10, 0x14b7fff,
+0x1c02001, 0x1020001, 0x1c0d2e8, 0xc82011,
+0x360a01, 0x762010, 0x0, 0x360020,
+0x8e2002, 0x11010b, 0x370000, 0xc82011,
+0x130f1d, 0x1580006, 0x188b10, 0x360001,
+0x14b7fff, 0x1c02000, 0x1020001, 0x1c0d2e8,
+0x1377fff, 0x1c82111, 0x360c01, 0x360020,
+0x8e2002, 0x110102, 0x370000, 0x1377fff,
+0x1c82191, 0x360e01, 0x360020, 0x8e2002,
+0x110105, 0x370000, 0xc82011, 0x1020001,
+0x1c0d288, 0x36ff1f, 0x36fe17, 0x772e17,
+0x70000, 0x1580001, 0x98bb17, 0x0,
+0x37ed1f, 0x37ef3f, 0x37f15f, 0x1581fff,
+0xd8bb14, 0x1581fff, 0xd8bb12, 0x1e09fa6,
+0xcccd3e, 0x99999a, 0x184302, 0x1e09f8c,
+0x1999a3e, 0x199999a, 0x185306, 0xc80048,
+0x1581fff, 0xd8bb11, 0x1581fff, 0xd8bb16,
+0x1581ffe, 0x198bb13, 0x1581fff, 0xd8bb15,
+0x370682, 0x370801, 0x1580006, 0x188311,
+0x360200, 0x3704a4, 0x37f627, 0x370266,
+0xc82813, 0xc82415, 0x1c0503, 0x1006585,
+0x1800000, 0x1007589, 0x1800000, 0x8e2040,
+0x118329, 0x360020, 0xb00022, 0x110126,
+0x1581ffe, 0x198bb12, 0xc81024, 0xc80421,
+0x762412, 0x0, 0x3600a2, 0x8e2240,
+0x118306, 0x762412, 0x771008, 0x760402,
+0xd40084, 0x1004f8, 0x1581ffe, 0x198bb12,
+0x770402, 0x1377fff, 0x1c90112, 0x0,
+0x360282, 0x8e2200, 0x118103, 0xc80048,
+0x100f0f, 0x1581ffe, 0x198bb12, 0x1377fff,
+0x1c90112, 0x0, 0x3600a2, 0x894248,
+0x890240, 0xc91808, 0x1020001, 0x1c08e17,
+0x100f03, 0xc80020, 0xc80420, 0x1621d99,
+0x18b316, 0x1621d99, 0x158a314, 0x1377fff,
+0x1c90110, 0xc81048, 0x1377fff, 0x1cb0116,
+0x1377fff, 0x1ca0114, 0x894008, 0x1467fff,
+0x1c3046c, 0x3602a6, 0x1407fff, 0x1ce20a6,
+0x375e20, 0x1467fff, 0x1c50468, 0x360224,
+0x1407fff, 0x1ce202a, 0x370021, 0x11b0000,
+0xa1e2a, 0x11b0000, 0xa1caa, 0x8c1002,
+0x1407fff, 0x1ce28a2, 0x370221, 0x11b0000,
+0xa282a, 0x11b0000, 0xa26aa, 0x8c0002,
+0x8090a0, 0x1020001, 0x1c0877e, 0x370401,
+0x36f15f, 0x36ef3f, 0x36ed1f, 0x1581ffe,
+0x198bb17, 0x70000, 0x1580000, 0x98bb17,
+0x0, 0x37fc17, 0x37fd1f, 0x37fe37,
+0x37ff3f, 0xc82610, 0x360600, 0x14b7fff,
+0x1c02000, 0x1020001, 0x1c03e42, 0xc82810,
+0x1621d96, 0x1d89312, 0x15800a1, 0x1989b10,
+0xc80041, 0x372543, 0x1020001, 0x1c03c84,
+0x1621d97, 0x1189312, 0x15800a2, 0xd89b10,
+0xc80041, 0x1020001, 0x1c03c84, 0x362503,
+0x0, 0x360000, 0xe81c00, 0xed1c00,
+0xd40504, 0x110317, 0xc8003f, 0xc80448,
+0x372203, 0x360603, 0x8e2040, 0x118211,
+0xd01049, 0x8e2200, 0x11030e, 0x11b8000,
+0xa1e2b, 0xc80020, 0x11b8000, 0xa202b,
+0x11b8000, 0xa222b, 0x11b8000, 0xa242b,
+0x11b8000, 0xa280b, 0x11b8000, 0xa2a8b,
+0x1580002, 0x1d89b11, 0xc80620, 0xc8023f,
+0xc80020, 0x370431, 0x360221, 0x360101,
+0x1020001, 0x1c03c73, 0x1377fff, 0x1c8a191,
+0x770201, 0xd40014, 0x1004f6, 0xc81022,
+0x361423, 0xc80020, 0x11b0008, 0xb110b,
+0x7d1202, 0x1020001, 0x1c03c73, 0xc8103f,
+0x361423, 0xc80020, 0x11b0008, 0xb130b,
+0x7d1202, 0x1020001, 0x1c03c73, 0x36ff3f,
+0x36fd1f, 0x36fe37, 0x36fc17, 0x1581fff,
+0x198bb17, 0x70000, 0x1580000, 0xd8bb17,
+0x0, 0x37fc17, 0x37fd1f, 0x37fe37,
+0xc82210, 0x360200, 0x1020001, 0x1c08cfd,
+0x360481, 0xc80400, 0x360001, 0x8c1a02,
+0x1020001, 0x1c08cfd, 0xc80248, 0x890001,
+0x8c0060, 0x370a01, 0x360001, 0x1020001,
+0x1c08cfd, 0x8c0060, 0x370c01, 0x360201,
+0x890001, 0x1020001, 0x1c08cfd, 0xc80600,
+0x360001, 0x1020001, 0x1c08cfd, 0x360421,
+0x142ffff, 0x1ce2231, 0x858021, 0x370601,
+0x360201, 0x890001, 0x1020001, 0x1c08cfd,
+0xc80600, 0x360001, 0x1020001, 0x1c08cfd,
+0x360421, 0x890001, 0x142ffff, 0x1ce2231,
+0x8c0002, 0x370801, 0x360001, 0x360221,
+0x858401, 0x1020001, 0x1c08cfd, 0x370e01,
+0x36fd1f, 0x36fe37, 0x36fc17, 0x1581fff,
+0x158bb17, 0x70000, 0x1580001, 0x58bb17,
+0x0, 0x37ee17, 0x37f69f, 0x37f037,
+0x37f8bf, 0x37f277, 0x37fb1f, 0x37fd3f,
+0x37ff5f, 0x37ef4f, 0xc82c14, 0xc82812,
+0x37f12f, 0xc82410, 0x37f30f, 0xc82016,
+0xc80420, 0x158000b, 0x1188311, 0xd40004,
+0x11843a, 0x1e08000, 0x3e, 0x1333334,
+0x190301, 0x36f30f, 0x6e4040, 0x1377fff,
+0x1c98410, 0x36f10f, 0x1377fff, 0x1c80410,
+0x37f50f, 0x360083, 0x36f53f, 0x36ef0f,
+0x14665a5, 0x1870408, 0x1376569, 0x18a8110,
+0x1407fff, 0x1ceeaae, 0x760402, 0x1580017,
+0x18ab10, 0x144ffff, 0x1c4876c, 0x8c18c8,
+0x1407fff, 0x1ce719e, 0x3600e3, 0x1580022,
+0x118ab15, 0x146757d, 0x1858708, 0x8c4ace,
+0x87dca3, 0x1407fff, 0x1cee669, 0x1407fff,
+0x1cea6ab, 0x144ffff, 0x1c30762, 0x1407fff,
+0x1ce616e, 0x1007563, 0x1800000, 0x144ffff,
+0x1c30560, 0x1407fff, 0x1cea16a, 0x3700a0,
+0x144ffff, 0x1c5046a, 0x80c2a8, 0x370085,
+0xd32002, 0x1005cc, 0x36ff5f, 0x36fd3f,
+0x36fb1f, 0x36f277, 0x36f037, 0x36ee17,
+0x36f8bf, 0x36f69f, 0x1581ffe, 0x1d8bb17,
+0x70000, 0x1580001, 0x198bb17, 0x0,
+0x37f417, 0x37f29f, 0x37f637, 0x37f4bf,
+0x37f877, 0x37f6ff, 0x35fa57, 0x37f91f,
+0x37fb3f, 0x37fd5f, 0x35fedf, 0x1646102,
+0xb15621, 0xc82612, 0x37e64f, 0x37e4b7,
+0x164e152, 0x1b05615, 0xc80a0b, 0x36e4b7,
+0xc82216, 0x37e94f, 0x37ea8f, 0x36e007,
+0xc81e20, 0x37ec0f, 0x36e207, 0x37ee0f,
+0xc80004, 0xd40004, 0x1010010, 0x100d468,
+0x1377fff, 0x1c90793, 0x1e08000, 0x21,
+0x12725de, 0x190300, 0x360032, 0x11b0000,
+0xb81a, 0x8e2003, 0x11031d, 0x8e2001,
+0x11031b, 0x1580017, 0x189310, 0xc80448,
+0x1377fff, 0x1c43089, 0xc80022, 0x370022,
+0x11b8000, 0xb82a, 0xd40284, 0x11830a,
+0xc80420, 0x1377fff, 0x1c43089, 0x760000,
+0x370020, 0x158000b, 0x1188310, 0xd32200,
+0x1082f9, 0x761e0f, 0x36e60f, 0xd3200f,
+0x1005dc, 0x1008001, 0x1c0d468, 0x8c0021,
+0x808630, 0x1020001, 0x1c08cfd, 0x1646130,
+0x302601, 0xc91802, 0x1020001, 0x1c08e17,
+0x37f00f, 0x164e110, 0x30c605, 0x1020001,
+0x1c08e17, 0x1377fff, 0x1c80795, 0x37e4b7,
+0x164e1d2, 0x1b0d601, 0xc81a0b, 0x36e4b7,
+0xc9040d, 0x11b0000, 0x228a8, 0x36f00f,
+0x11b0000, 0x17088, 0x1020001, 0x1c0d47a,
+0xc80600, 0xc81648, 0x85863b, 0x1020001,
+0x1c08cfd, 0x1376100, 0x880795, 0x0,
+0x11b0000, 0x17008, 0xb00000, 0x11823a,
+0x36e90f, 0xc9040d, 0x1377fff, 0x1c90790,
+0x1581ffe, 0xd8bb10, 0x36ec0f, 0x37fe07,
+0x36ea0f, 0x1467fff, 0x1c38064, 0x36eeaf,
+0x36f00f, 0xc81007, 0x1020001, 0x1c0cf8f,
+0x1581ffe, 0xd8bb12, 0x1377fff, 0x1c80793,
+0x1581ffe, 0xd8bb14, 0x8c4027, 0x89006b,
+0x8c1025, 0x1581ffe, 0xd8bb16, 0x3604a1,
+0x360462, 0x8c7006, 0x143ffff, 0x1cea1ae,
+0x1407fff, 0x1cea5a6, 0x3700a0, 0x360664,
+0x3606a1, 0x8c0006, 0x8782a0, 0x808a06,
+0x11b8000, 0xb808, 0x360801, 0x8c0200,
+0x3608a6, 0x8086a0, 0x11b8000, 0x17008,
+0x360a01, 0x8c0040, 0x11b8000, 0x22808,
+0x360c01, 0x8c0040, 0x11b8000, 0x2e008,
+0x100f99, 0x16460d0, 0x1308613, 0x1581ffe,
+0xd8bb10, 0x36f00f, 0x130f62, 0x1581ffe,
+0xd8bb16, 0x1377fff, 0x1c80793, 0x36ea0f,
+0x1581ffe, 0xd8bb12, 0x360421, 0x8c0020,
+0x1581ffe, 0xd8bb14, 0x360486, 0x8c1022,
+0x1581ffe, 0xd8bb16, 0x1407fff, 0x1ce2382,
+0x1407fff, 0x1ce252b, 0x8910a2, 0x370020,
+0x360621, 0x8c1022, 0x360682, 0x1407fff,
+0x1ce2382, 0x1407fff, 0x1ce252b, 0x8910a2,
+0x11b8000, 0xb828, 0x360821, 0x8c0002,
+0x11b8000, 0x17008, 0x360a01, 0x360a24,
+0x8c0020, 0x808620, 0x8c00a0, 0x11b8000,
+0x22808, 0x360c01, 0x8c0020, 0x360c26,
+0x808620, 0x8c00a0, 0x11b8000, 0x2e008,
+0x1008001, 0x1c0d3c7, 0xc80e05, 0x34fa57,
+0x16461d3, 0x1b0560f, 0x34fedf, 0xc81a0f,
+0x36fd5f, 0x36fb3f, 0x36f91f, 0x36f877,
+0x36f637, 0x36f417, 0x36f6ff, 0x36f4bf,
+0x36f29f, 0x1581ffe, 0x98bb17, 0x70000,
+0x762e17, 0x1467fff, 0x1c72680, 0xc80c20,
+0x8c0208, 0x8c104e, 0x8e20c0, 0x118307,
+0x80d4a0, 0xc91808, 0x1020001, 0x1c08e17,
+0xc80c00, 0x100f01, 0x8c4042, 0xc80048,
+0xc80420, 0x8950c0, 0x8590a0, 0x8e2040,
+0x110302, 0x100f04, 0x1020001, 0x1c08cfd,
+0xc80400, 0xc80002, 0x772e17, 0x70000,
+0x1580000, 0xd8bb17, 0x0, 0x37fc17,
+0x37ff1f, 0x37fe37, 0x1646100, 0xb11621,
+0xc80602, 0x1e09ff3, 0xed8600, 0x0,
+0x180302, 0x370421, 0x8c4003, 0x370621,
+0x370a21, 0x370c21, 0x8e2201, 0x11832b,
+0x8c0063, 0x8c5021, 0x1e09fc0, 0x40,
+0xa09f54, 0x183308, 0xc9180a, 0x8c0200,
+0x1020001, 0x1c08e17, 0x890006, 0x8e2040,
+0x118304, 0x1020001, 0x1c08cfd, 0x370401,
+0xb00033, 0x118362, 0x8c0021, 0x1e09fc0,
+0x3e, 0x70d534, 0x180b02, 0x8c4063,
+0xc91808, 0x8c0040, 0x1020001, 0x1c08e17,
+0x880020, 0x1e08000, 0x3f, 0x2c2000,
+0x190302, 0x890040, 0x1020001, 0x1c08cfd,
+0x164e110, 0x30c601, 0x1020001, 0x1c08e17,
+0x370a01, 0x100f4a, 0x8c0001, 0x8e2003,
+0x11832b, 0x8c0021, 0x8c5063, 0x1e09fc0,
+0x40, 0xa09f54, 0x183308, 0xc9180a,
+0x8c0200, 0x1020001, 0x1c08e17, 0x890006,
+0x8e2040, 0x118304, 0x1020001, 0x1c08cfd,
+0x370601, 0xb00011, 0x118335, 0x8c4021,
+0x8c0063, 0x1e09fc0, 0x3e, 0x70d534,
+0x180b02, 0xc91808, 0x8c0040, 0x1020001,
+0x1c08e17, 0x880020, 0x1e08000, 0x3f,
+0x2c2000, 0x190302, 0x890040, 0x1020001,
+0x1c08cfd, 0x164e110, 0x30c601, 0x1020001,
+0x1c08e17, 0x370c01, 0x100f1d, 0x1e09f7c,
+0x51ec3f, 0xc00000, 0x184302, 0x1e08000,
+0x3f, 0xf9096, 0x190306, 0x8c0041,
+0x8c5203, 0x887240, 0x890240, 0x8c50ce,
+0xc9180a, 0x1020001, 0x1c08e17, 0x37fc0f,
+0x8c0043, 0x8c1201, 0x884040, 0x890040,
+0x8c10c8, 0xc91802, 0x36fc8f, 0x370a81,
+0x1020001, 0x1c08e17, 0x370c01, 0x36ff1f,
+0x36fe37, 0x36fc17, 0x1581fff, 0x158bb17,
+0x70000, 0x1647fff, 0x1fae6d1, 0x360424,
+0x1377fff, 0x1cb0116, 0x360624, 0x1e47fff,
+0x1ffe000, 0x18f191, 0x3b6302, 0x360284,
+0xc83830, 0x1f5d298, 0x17dc000, 0x60,
+0x190b00, 0x1406965, 0x18ec84c, 0x1d000d,
+0x1c2db9c, 0x7d3c00, 0x30261, 0x1184304,
+0x1c04a84, 0x17dbc00, 0x30e61, 0x18330e,
+0x1c2dbd8, 0x7d3c00, 0x30261, 0x1984306,
+0x1c04ac4, 0x17dbc00, 0x30c61, 0x18230c,
+0x100672d, 0x0, 0x1b80000, 0x76ce,
+0x1b3b660, 0x9d7316, 0x370424, 0x70000,
+0x100433f, 0x1c00000, 0xc80400, 0x1620000,
+0x58e31a, 0x1e08000, 0xff00, 0x2,
+0x180b1e, 0x1e08000, 0x0, 0xc02,
+0x190300, 0x1647c00, 0x10ffe2, 0x1e08000,
+0x400, 0x1ffc8, 0x1db3ae, 0x10d0000,
+0x80d573, 0x10c8000, 0x100d567, 0x1006704,
+0x1000000, 0x100770d, 0x1000000, 0x1620000,
+0x580300, 0x1020001, 0x1c0ccef, 0x10c8000,
+0x100d571, 0x100670d, 0x1000000, 0x1007709,
+0x0, 0x0, 0x1620000, 0x1db3b6,
+0x11b7ff4, 0x17ffe17, 0x772e17, 0x70000,
+0x1e46633, 0x1ffe000, 0x18498a, 0x1301313,
+0x100477f, 0x1c00000, 0x1e46633, 0x1ffe000,
+0x18498d, 0x1301319, 0x1e46633, 0x1ffe000,
+0x185988, 0x130a302, 0x11b0000, 0x99429,
+0x11b0000, 0x99889, 0x11b0000, 0x99039,
+0x11b0008, 0x99359, 0x1e47fff, 0x1ffe000,
+0x1da993, 0x3ad315, 0x1377fff, 0x1c98011,
+0x1e47fff, 0x1ffe000, 0x1d5989, 0x13a9311,
+0x1e47fff, 0x1ffe000, 0x1d9980, 0x3b1300,
+0x1e08000, 0x0, 0x1d932, 0x190309,
+0x11b0000, 0x99609, 0x1377fff, 0x1c88011,
+0x1377fff, 0x1c98013, 0x1e08000, 0xaa00,
+0x116, 0x18db19, 0x1d0269, 0x1b87480,
+0x1c02010, 0x7fe163, 0x119033f, 0x1466905,
+0x1820400, 0x1467942, 0x820400, 0x1447946,
+0x1840508, 0x1e08000, 0xfa00, 0x3a2,
+0x18d318, 0x1805232, 0xcbc000, 0x0,
+0x0, 0x1c65232, 0x1ebc000, 0x60,
+0x1184b01, 0x1e0ffff, 0x1ffe5ff, 0x1ffffc8,
+0x18f31c, 0x1c05232, 0x8bfc00, 0x30461,
+0x580b04, 0x1c65232, 0x1abc000, 0x61,
+0x1184b01, 0x1e08000, 0xa6ff, 0x1ffffb6,
+0x18d318, 0x1c05232, 0xcbfc00, 0x30c61,
+0x580b0c, 0x1c05232, 0x1ebfc00, 0x30461,
+0x580b04, 0x1e0ffff, 0x1fffd00, 0x6,
+0x18f31c, 0x1c05232, 0x8bfc00, 0x30461,
+0x580b04, 0x1c05232, 0x1abfc00, 0x30c61,
+0x580b0c, 0x1e08000, 0x4ff, 0x1fffe3e,
+0x18d318, 0x1c05232, 0xcbfc00, 0x30c61,
+0x580b0c, 0x1c05232, 0x1ebfc00, 0x30461,
+0x580b04, 0x1e08000, 0x1c00, 0x36,
+0x18f31c, 0x1c05232, 0x8bfc00, 0x30461,
+0x580b04, 0x1c05232, 0x1abfc00, 0x30c61,
+0x580b0c, 0x1e0ffff, 0x1fdbaff, 0x1fffd40,
+0x18d318, 0x1c05232, 0xcbfc00, 0x30c61,
+0x580b0c, 0x1c05232, 0x1ebfc00, 0x30461,
+0x580b04, 0x1c05232, 0x8bfc00, 0x30461,
+0x580b04, 0x1c05232, 0x1abfc00, 0x30c61,
+0x580b0c, 0x1407949, 0x18ec91c, 0x10079cd,
+0x1800000, 0xc8220b, 0x1b87fff, 0x1ffc000,
+0x60, 0x1d5b13, 0x11b8000, 0x99609,
+0x1620000, 0x1d9bb1, 0x1620000, 0x1dabb5,
+0x11b7ffd, 0x17fff97, 0x11b7fea, 0x17ffd37,
+0x11b7fd5, 0x17ffa37, 0x11b7fc4, 0x17ff817,
+0x1581fff, 0x118bb17, 0x70000, 0xc8b020,
+0x770000, 0x1760002, 0x180359, 0x1639800,
+0x1ac358, 0x1798000, 0xddcbb9, 0x70000,
+0x16a0010, 0x180304, 0x1e47fff, 0x1ffe000,
+0x180198, 0x30a340, 0x1647e00, 0x70a67f,
+0x1647e00, 0xf0a64b, 0x1377fff, 0x1c12060,
+0x108108, 0x175fd20, 0x140dff1, 0x175fd80,
+0x140dff1, 0xd32202, 0x1001fd, 0xc80408,
+0x175fd80, 0x140dff1, 0x1b80000, 0x600c,
+0x1830060, 0x1184302, 0x1001fa, 0x13d7480,
+0x2180, 0x70000, 0x164750f, 0x1b007fb,
+0x166fd00, 0xdff7, 0x1647c00, 0xdff7,
+0x13b7d00, 0xdff1, 0x1647c00, 0xdff1,
+0x36fe07, 0x772e17, 0x160000, 0x1e462cf,
+0x1ffe000, 0x1839d8, 0x306310, 0x1e462cf,
+0x1ffe000, 0x1d8190, 0x310400, 0x1387fff,
+0x1c321a6, 0x1fd8000, 0x640c, 0x1032360,
+0x1983382, 0x1fc0c81, 0x120640c, 0x133076c,
+0x193306, 0x17f7571, 0x1840307, 0x17f7571,
+0x1840307, 0x17f7571, 0x1840307, 0x17f7571,
+0x1840307, 0x17f7571, 0x1840307, 0x17f7571,
+0x1840307, 0x17f7571, 0x1840307, 0x17f7571,
+0x1800307, 0x1007470, 0x0, 0x1e47fff,
+0x1ffe000, 0x190190, 0x400310, 0x1e08000,
+0x0, 0x1ad32, 0x190307, 0xff0307,
+0x11b7ff3, 0x17ffe67, 0x1e47fff, 0x1ffe000,
+0x1d8183, 0x1310306, 0x11b7fe3, 0x17ffc67,
+0x1581fff, 0x198bb17, 0x160000, 0x250000,
+0x1e47fff, 0x1ffe000, 0x190190, 0x401380,
+0x1e462cf, 0x1ffe000, 0x18398c, 0x306310,
+0x1e462cf, 0x1ffe000, 0x18398c, 0x1306311,
+0x1e462cf, 0x1ffe000, 0x1d8190, 0x3063b0,
+0x100796f, 0x1800000, 0x1e47fff, 0x1ffe000,
+0x190190, 0x310400, 0x1e0ffff, 0x1ffff00,
+0x1a, 0x18c307, 0x1fd8000, 0x640c,
+0x1032360, 0x1983b82, 0x1fd8000, 0x640c,
+0x1032362, 0x593360, 0x1377fff, 0x1c31086,
+0x1737fff, 0x1c3a306, 0x1b70000, 0x60ec,
+0x330770, 0x990b82, 0x1b80000, 0x620c,
+0x331070, 0x983b82, 0x0, 0xc80e60,
+0xff0b07, 0x1e08000, 0x0, 0x1adaa,
+0x190311, 0x1b0f2b8, 0x3c00, 0x31964,
+0x983322, 0x0, 0xc0f49, 0x17fe570,
+0x40307, 0x17fe570, 0x40307, 0x17fe570,
+0x40307, 0x17fe570, 0x40307, 0x17fe570,
+0x40307, 0x17fe570, 0x40307, 0x17fe570,
+0x40307, 0xff0307, 0x1e47fff, 0x1ffe000,
+0x190190, 0x400310, 0x36fe67, 0x1647fff,
+0x1fb060d, 0x11b7fec, 0x17ffd17, 0x11b7fdc,
+0x7ffb07, 0x11b7fc3, 0x17ff867, 0x1581fff,
+0x118bb17, 0x1e47fff, 0x1ffe000, 0x190190,
+0x380401, 0x240000, 0x70000, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x70000,
+0x0, 0x70000, 0x0, 0x70000,
+0x0, 0x70000, 0x1008001, 0x1c07bb0,
+0x1008001, 0x1c08e17, 0x1008001, 0x1c08de0,
+0x1008001, 0x1c07a5d, 0x1008001, 0x1c08a13,
+0x1008001, 0x1c08b55, 0x1008001, 0x1c08a35,
+0x1008001, 0x1c07db2, 0x1008001, 0x1c03c84,
+0x1008001, 0x1c03c73, 0x1008001, 0x1c06aa0,
+0x1008001, 0x1c069b9, 0x1008001, 0x1c07b7d,
+0x1008001, 0x1c08cfd, 0x1008001, 0x1c07cb1,
+0x1008001, 0x1c088be, 0x1008001, 0x1c08cc6,
+0x1008001, 0x1c08d87, 0x1008001, 0x1c08d20,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x1008001, 0x1c00008,
+0x1008001, 0x1c0000d, 0x1008001, 0x1c00012,
+0x1008001, 0x1c00017, 0x4c46584d, 0x0,
+0xf000, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x3f800000, 0x3f75257d, 0x3f6ac0c6,
+0x3f60ccde, 0x3f5744fc, 0x3f4e248c, 0x3f45672a,
+0x3f3d08a3, 0x3f3504f3, 0x3f2d583e, 0x3f25fed6,
+0x3f1ef532, 0x3f1837f0, 0x3f11c3d3, 0x3f0b95c1,
+0x3f05aac3, 0x3f000000, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0xde91,
+0x0, 0x1, 0x0, 0x20,
+0x30, 0x40, 0x60, 0x80,
+0xc0, 0x100, 0x180, 0x200,
+0x300, 0x400, 0x600, 0x800,
+0xc00, 0x1000, 0x1800, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x4a65c040,
+0x4862c040, 0x46630100, 0x66228040, 0xf8000040,
+0x76228040, 0xf8000040, 0xf8228040, 0x16630100,
+0x2654040, 0xf8620040, 0xf8220040, 0x1e220040,
+0xf8200040, 0x2e220040, 0xf8000040, 0x0,
+0x1f, 0x7, 0x1f, 0x1f,
+0x1f, 0x1f, 0x1f, 0x9,
+0x0, 0x1, 0xa, 0xb,
+0x3, 0xc, 0x5, 0xe,
+0x1f, 0x8, 0x2, 0x1f,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0xf98, 0xf98, 0xf9c, 0xf98,
+0xf9c, 0xf98, 0xf98, 0xf9c,
+0xf8f, 0xf8f, 0xf98, 0xf9c,
+0xf98, 0x3f800000, 0x0, 0x3f353bef,
+0x3f800000, 0x3f800000, 0x0, 0x0,
+0x3f800000, 0x3f353bef, 0x3f800000, 0x0,
+0x3f800000, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x97, 0x98, 0x99,
+0xffffffff, 0x1784, 0x1784, 0x1787,
+0x178c, 0x1793, 0x1784, 0x1784,
+0x179f, 0x17a3, 0x179a, 0x17a8,
+0x17b5, 0x17ef, 0x17ef, 0x17ef,
+0x17ef, 0x17ef, 0x17ef, 0x17ef,
+0x17ef, 0x17ef, 0x17ef, 0x17ef,
+0x17ef, 0x17e9, 0x1808, 0x1838,
+0x1811, 0x1819, 0x1819, 0x1819,
+0x1819, 0x1819, 0x1819, 0x1819,
+0x1819, 0x1825, 0x182c, 0x1833,
+0x1805, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x3,
+0x1, 0x4, 0x1, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0xffff,
+0xffff, 0xffff, 0xffff, 0xffff,
+0xffff, 0xffff, 0xffff, 0xffff,
+0x10003, 0x20003, 0x30003, 0xffff,
+0xffff, 0xffff, 0xffff, 0xffff,
+0xffff, 0xffff, 0xffff, 0xffff,
+0xffff, 0xffff, 0xffff, 0xffff,
+0xffff, 0xffff, 0xffff, 0xffff,
+0xffff, 0xffff, 0xffff, 0xffff,
+0xffff, 0xffff, 0xffff, 0x2,
+0x10002, 0x20002, 0x30002, 0xffff,
+0xffff, 0xffff, 0xffff, 0xffff,
+0xffff, 0xffff, 0xffff, 0x1,
+0xffff, 0xffff, 0xffff, 0xffff,
+0xffff, 0xffff, 0xffff, 0x0,
+0xffff, 0xffff, 0xffff, 0xffff,
+0xffff, 0xffff, 0xffff, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x8,
+0x8, 0x17700, 0x80, 0x0,
+0x1, 0x2, 0x1, 0x1,
+0x17700, 0x40, 0x0, 0x0,
+0x15f30382, 0x9140300, 0x9d808642, 0xe14b,
+0x5add, 0x5e88, 0x6173, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x79f02c2, 0x0, 0xd808942, 0xe108,
+0x6aa5, 0x6bd8, 0x6cc9, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x10b0100, 0x0, 0xd803642, 0xe108,
+0x8a43, 0x8a56, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x7c40502, 0x0, 0xd808e62, 0xe14b,
+0x46f2, 0x478e, 0x47e1, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x20b0000, 0x0, 0xd809201, 0xe12b,
+0x503a, 0x5143, 0x5105, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0xbc0108, 0x600000, 0xd808801, 0xe108,
+0x2fd9, 0x31f7, 0x33a5, 0x33d0,
+0x0, 0x0, 0x0, 0x0,
+0x3a0050, 0x480000, 0xd808501, 0xe108,
+0x4c12, 0x4c97, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x23310180, 0x13880000, 0xf808c20, 0xe108,
+0xd7f8, 0xd7fe, 0xd7fa, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0xe169, 0x0,
+0xe056, 0x2, 0x0, 0x0,
+0x0, 0x0, 0xe181, 0xe1ed,
+0xe21d, 0xe24d, 0xe056, 0x9,
+0x0, 0x0, 0x0, 0x0,
+0xe2c5, 0x0, 0x0, 0x0,
+0xe05d, 0xc, 0x0, 0x0,
+0x0, 0x0, 0xe301, 0x0,
+0x0, 0x0, 0xe05d, 0xe,
+0x0, 0x0, 0x0, 0x0,
+0xe063, 0x0, 0x0, 0x0,
+0xe33d, 0x1f, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x11000, 0x1010000, 0x5010100,
+0x1020100, 0x4, 0x3010100, 0x5010100,
+0x9001000, 0x0, 0x3, 0x0,
+0x0, 0x8, 0x1, 0xa,
+0xdf02, 0x8, 0x0, 0x0,
+0x0, 0xdf0a, 0x1, 0x0,
+0x0, 0x0, 0x400, 0xe54a,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x400,
+0xe54a, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x2, 0x200,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0xe139, 0xe142, 0x0, 0x0,
+0xdeea, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x1b840262, 0xd000080,
+0x7d809744, 0xe108, 0xd7f8, 0xd7fe,
+0xd7fa, 0xd7fc, 0x0, 0x0,
+0x0, 0x0, 0x3a980000, 0xfa00000,
+0xf809808, 0xe105, 0xd7f8, 0xd7fe,
+0xd7fa, 0xd7fc, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x9c08001, 0x0, 0x174e, 0x0,
+0x1774, 0x17f3, 0xe03e, 0x0,
+0x0, 0x0, 0xf0000, 0x180000,
+0x9809401, 0xe108, 0x7a99, 0x0,
+0x7b21, 0x7ac3, 0x0, 0x0,
+0x0, 0x0, 0x320000, 0x0,
+0xd809601, 0xe108, 0x480d, 0x4859,
+0x4867, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x40000, 0x0,
+0x9809501, 0x0, 0x8790, 0x0,
+0x8792, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x320000, 0x0,
+0xd80435e, 0xe108, 0x20f2, 0x216c,
+0x214c, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x20000, 0x0,
+0xd803d01, 0xe107, 0x1d82, 0x1d8a,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x7a0000, 0x0,
+0xd803001, 0xe120, 0x1f24, 0x1fc7,
+0x1f80, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x20000, 0x0,
+0xd803501, 0x0, 0x47e5, 0x47ea,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x6f0040, 0x0,
+0xe809a01, 0xe108, 0x4fa4, 0x4fc0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x1afd0040, 0x1e0c0000,
+0x9d809d20, 0xe108, 0xd7f8, 0xd7fe,
+0xd7fa, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x640052, 0x3600000,
+0xd803101, 0xe12f, 0x1530, 0x15a4,
+0x157c, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x640052, 0x3600000,
+0xd803201, 0xe134, 0x1530, 0x15a4,
+0x157c, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x36190400, 0x2d290600,
+0x9f80824e, 0xe108, 0x3941, 0x3a1c,
+0x3ab9, 0x3ad6, 0x0, 0x0,
+0x0, 0x0, 0x2ca0080, 0x0,
+0xd803760, 0xe125, 0x1360, 0x13ac,
+0x1399, 0x0, 0x0, 0x0,
+0x0, 0x0, 0xbc0108, 0x4800000,
+0xd808701, 0xe108, 0x2fd9, 0x31f7,
+0x33a5, 0x33d0, 0x0, 0x0,
+0x0, 0x0, 0xb0000, 0x0,
+0xd80834e, 0x0, 0x450c, 0x4526,
+0x464c, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x9c0000, 0x0,
+0xf808101, 0x0, 0x3e71, 0x3ede,
+0x3ec1, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x20b0000, 0x0,
+0xd808b01, 0xe12d, 0x503a, 0x5143,
+0x5105, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x52, 0x0,
+0xd803101, 0xe12f, 0x1530, 0x15b9,
+0x157c, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x52, 0x0,
+0xd803201, 0xe134, 0x1530, 0x15b9,
+0x157c, 0x0, 0x0, 0x0,
+0x0, 0x0, 0xfb0080, 0x0,
+0xd808a01, 0x0, 0x7ed9, 0x7fce,
+0x7fa8, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x52, 0x0,
+0xd803101, 0xe12f, 0x1530, 0x15c1,
+0x157c, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x52, 0x0,
+0xd803201, 0xe134, 0x1530, 0x15c1,
+0x157c, 0x0, 0x0, 0x0,
+0x0, 0x0, 0xc4b0000, 0x6000600,
+0x9d808f01, 0xe108, 0x588a, 0x59c1,
+0x59a7, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x6f0080, 0x0,
+0xc809b01, 0xe108, 0x3c92, 0x3cb1,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x820000, 0x21c00000,
+0xd808d01, 0xe108, 0x2c4c, 0x2d1e,
+0x2ccf, 0x2d0c, 0x0, 0x0,
+0x0, 0x0, 0x3a0050, 0x3600000,
+0xf808401, 0xe108, 0x4c12, 0x4c97,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x20000, 0x0,
+0xd804001, 0xe107, 0x1d82, 0x1d8a,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x500000, 0x0,
+0xd809c01, 0x0, 0x3d37, 0x1d6c,
+0x0, 0x3dca, 0x0, 0x0,
+0x0, 0x0, 0x48a0000, 0x200,
+0x8d803901, 0xe163, 0x1ae6, 0x1c12,
+0x1b21, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0xd804460, 0x0, 0x132b, 0x132d,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0xe0000, 0x0,
+0xf803b01, 0x0, 0x8819, 0x887a,
+0x884f, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x20000, 0x0,
+0xd804101, 0xe107, 0x1d82, 0x1d8a,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0xd809c01, 0x0, 0x3d37, 0x1d77,
+0x0, 0x3dca, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0xd803a01, 0xe163, 0x1ae6, 0x1c35,
+0x1b21, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0xd804560, 0x0, 0x132b, 0x132d,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0xe0000, 0x0,
+0xf803c01, 0x0, 0x8819, 0x887a,
+0x884f, 0x0, 0x0, 0x0,
+0x0, 0x0, 0xe, 0xd,
+0x3e80, 0x100, 0x0, 0x0,
+0x2916, 0x2a50, 0x283a, 0x283a,
+0x29b2, 0x2a1f, 0x2a24, 0x2a07,
+0x2a50, 0x2a50, 0x28db, 0x283a,
+0x2973, 0x284d, 0x2a50, 0x2a50,
+0x2a50, 0x2a50, 0x283a, 0x2a50,
+0x2969, 0x28e4, 0x290b, 0x2a50,
+0x2a02, 0x2a02, 0x2840, 0x28bf,
+0x27d8, 0x27d8, 0x2a50, 0x2a50,
+0x2a50, 0x27ff, 0x2a50, 0x2a50,
+0x27ed, 0x27f5, 0x3ffa98c4, 0xbf759585,
+0x3f81984e, 0xbffa98c4, 0x3f7264e9, 0x3ffb0abd,
+0xbf766a04, 0x3f8177c4, 0xbffb0abd, 0x3f737a7c,
+0x3ffd51f6, 0xbf7abd2d, 0x3f80ce3c, 0xbffd51f6,
+0x3f7920b6, 0x3ffd89f0, 0xbf7b2936, 0x3f80bdb1,
+0xbffd89f0, 0x3f79add5, 0x2cdb, 0x2cde,
+0x2cde, 0x2cde, 0x2cde, 0x2cde,
+0x2cde, 0x2cde, 0x2d09, 0x2d09,
+0x2ce3, 0x2ce3, 0x2ce3, 0x2ce3,
+0x2ce3, 0x2ce3, 0x2d09, 0x2d09,
+0x2cdb, 0x2cdb, 0x2cdb, 0x2cdb,
+0x2cdb, 0x2cdb, 0x2d09, 0x2d09,
+0x2ce8, 0x2ce8, 0x2ce8, 0x2ce8,
+0x2ce8, 0x2ce8, 0x2d09, 0x2d09,
+0x2ced, 0x2d09, 0x2cdb, 0x2cf2,
+0x0, 0xc2500000, 0x0, 0x3f000000,
+0xc2500000, 0x41c80000, 0x3f3d70a4, 0xc2500000,
+0x42140000, 0x3f800000, 0xc2500000, 0x42480000,
+0x3f800000, 0xc2500000, 0x42480000, 0x0,
+0xc2500000, 0x0, 0x3f000000, 0xc2500000,
+0x41c80000, 0x3f3d70a4, 0xc2500000, 0x42140000,
+0x3f800000, 0xc2500000, 0x42480000, 0x3f800000,
+0xc2500000, 0x42480000, 0x0, 0x0,
+0x0, 0x0, 0x3e99999a, 0x40c00000,
+0xc0c00000, 0x0, 0x3f000000, 0x41100000,
+0xc1100000, 0x0, 0x3f4ccccd, 0x41400000,
+0xc1400000, 0x40400000, 0x3f800000, 0x41400000,
+0xc1400000, 0x40c00000, 0x33b1, 0x33b1,
+0x33b1, 0x33b1, 0x33b4, 0x33b1,
+0x33b7, 0x33bc, 0x33bf, 0xc000c422,
+0xc000c422, 0xd002c642, 0xe001c633, 0xf003c843,
+0xcc0cc864, 0xdc0eca64, 0xec0dca65, 0xfc0fcc65,
+0xeccdcc76, 0xfccfce76, 0xef3dce87, 0xff3fd087,
+0x80004211, 0xc000c422, 0x20010231, 0xbf099dac,
+0xbf3c5394, 0x3dc1fb16, 0xbe41fb16, 0x3dc1fb16,
+0x3fef72f9, 0xbf611b7c, 0x3e446b5e, 0xbebb9535,
+0x3e446b5e, 0x3f855555, 0xbf736545, 0x3f386306,
+0x0, 0x0, 0x3de25e9a, 0x3eaa3593,
+0x3f1ada34, 0x3ee66666, 0x0, 0x0,
+0x3f8ccccd, 0xbf77fa09, 0x3f345ae6, 0x3d9bd124,
+0x3e9bd534, 0x3d4b3c3e, 0x3e3ab2e1, 0x3eed198b,
+0x3ee66666, 0x405553ac, 0x40332f66, 0x3f8ccccd,
+0xbf7a4b66, 0x3f270d74, 0x3e059104, 0x3ede9db6,
+0x3d265f0f, 0x3d97add1, 0x3ecc7369, 0x3f000000,
+0x40844289, 0x406665cb, 0x3f800000, 0xbf7b7564,
+0x3f223151, 0x3e1bd534, 0x3f16432d, 0x3cc9b1fb,
+0x3cf66c6e, 0x3ecc7369, 0x3e4ccccd, 0x40a6644e,
+0x40aeed5d, 0x41d3, 0x41d3, 0x41d3,
+0x41c5, 0x41c5, 0x419e, 0x419e,
+0x419e, 0x419e, 0x455f, 0x455f,
+0x455f, 0x4566, 0x4566, 0x4576,
+0x4576, 0x45b2, 0x45b2, 0x3f800000,
+0x3f353bef, 0x820000, 0x820201, 0x870102,
+0x870303, 0x8700ff, 0x8702ff, 0x8704ff,
+0x8100ff, 0x8101ff, 0x8b00ff, 0x8b01ff,
+0x8b02ff, 0x8b03ff, 0x8b04ff, 0x8b05ff,
+0x8b06ff, 0x8b07ff, 0x8b08ff, 0x8b09ff,
+0x8b0aff, 0x8b0bff, 0x8a0904, 0x8a0aff,
+0x8a0eff, 0x8a0c05, 0x8a0dff, 0x8a0106,
+0x8a0307, 0x8a0508, 0x8a0709, 0x8a0bff,
+0x8f00ff, 0x8d00ff, 0x8d0aff, 0x8d0bff,
+0x8d0cff, 0x8d0dff, 0x8d0eff, 0x8d0fff,
+0x8d10ff, 0x8d11ff, 0x8d12ff, 0x8d13ff,
+0x8d14ff, 0x8d15ff, 0x8d16ff, 0x8d17ff,
+0x8d18ff, 0x8d19ff, 0x8d1aff, 0x8d1bff,
+0x8d1cff, 0x8d1dff, 0x8d1eff, 0x8d1fff,
+0x8d20ff, 0x8d21ff, 0x8d01ff, 0x8d240a,
+0x8f01ff, 0xb, 0xc, 0x3d4ccccd,
+0x3dcccccd, 0x3e19999a, 0x3e4ccccd, 0x3e4ccccd,
+0x3e19999a, 0x3dcccccd, 0x3d4ccccd, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x41fa0000,
+0x427a0000, 0x42fa0000, 0x437a0000, 0x43fa0000,
+0x447a0000, 0x44fa0000, 0x457a0000, 0x45fa0000,
+0x467a0000, 0x41b0c000, 0x4230c000, 0x42b0c000,
+0x4330c000, 0x43b0c000, 0x4430c000, 0x44b0c000,
+0x4530c000, 0x45b0c000, 0x4630c000, 0x44160000,
+0x44bb8000, 0x451c4000, 0x42200000, 0x432a0000,
+0x43960000, 0x43e10000, 0x44160000, 0x44480000,
+0x447a0000, 0x449c4000, 0x44bb8000, 0x44fa0000,
+0x451c4000, 0x453b8000, 0x455ac000, 0x457a0000,
+0x458ca000, 0x459c4000, 0x45bb8000, 0x45dac000,
+0x45fa0000, 0x460ca000, 0x461c4000, 0x463b8000,
+0x465ac000, 0x467a0000, 0x468ca000, 0x469c4000,
+0x46bb8000, 0xffffffff, 0x0, 0x1,
+0x0, 0xffffffff, 0x0, 0x1,
+0x61b0, 0x6189, 0x618e, 0x6191,
+0x61b0, 0x6196, 0x61b0, 0x61b0,
+0x61b0, 0x619b, 0x3b0e1962, 0xbc2f409b,
+0x3ccfa052, 0xbd2c8934, 0x3d81207b, 0xbdd9320a,
+0x3ea2f95a, 0x7adf, 0x7b17, 0x7ae5,
+0x7aea, 0x7af1, 0x7af9, 0x7b01,
+0x7b0a, 0xb795d5b9, 0x3b607415, 0xbe0895af,
+0x3505bba8, 0xb9a37b25, 0x3cd23cf5, 0xbeeef582,
+0x3f800000, 0x0, 0x0, 0xe9f2,
+0x400, 0x0, 0x0, 0x3f800000,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x3f000000, 0x41500000,
+0x40400000, 0x3f800000, 0x41940000, 0x40a00000,
+0x3f800000, 0x405660bd, 0x3f800000, 0x3f800000,
+0x7fb4, 0x7fb9, 0x7fb9, 0x7fb9,
+0x7fb9, 0x7fb9, 0x7fb9, 0x7fb9,
+0x7fb9, 0x7fb9, 0x7fbc, 0x7fb9,
+0x7fb9, 0x7fb9, 0x7fbc, 0x860000,
+0x860001, 0x860002, 0x860008, 0x860006,
+0x860007, 0x890000, 0x890001, 0x890002,
+0x890003, 0x8e0000, 0x8e0001, 0x8e0002,
+0x8e0003, 0x8e0004, 0x8e0005, 0x8e0006,
+0x8e0007, 0x8e0008, 0x920000, 0x920002,
+0x920003, 0x920004, 0x920005, 0x920006,
+0x920007, 0x920008, 0x920009, 0x92000c,
+0x92000d, 0x92000e, 0x92000f, 0x920010,
+0x920011, 0x920012, 0x920013, 0x920016,
+0x920017, 0x920018, 0x920019, 0x92001a,
+0x92001b, 0x92001c, 0x92001d, 0x880000,
+0x880002, 0x88e3, 0x88e9, 0x88f1,
+0x88fe, 0x8911, 0x892a, 0x8949,
+0x897d, 0x89b3, 0x8c31, 0x8c36,
+0x8c40, 0x8c51, 0x8c73, 0xebf3,
+0x400, 0x851b, 0x859b, 0x861b,
+0x855b, 0x85db, 0x865b, 0x0,
+0x0, 0x0, 0x0, 0x3f800000,
+0x3f800000, 0x3f800000, 0x3fff5cbc, 0xbf7eb9e1,
+0x3f8051a4, 0xc0005192, 0x3f805180, 0x3ffeb9e0,
+0xbf7d7560, 0x3f800000, 0xc0000000, 0x3f800000,
+0x3ffe1769, 0xbf7c3277, 0x3f7f5d77, 0xbfff5d91,
+0x3f7f5dab, 0x3ffd7558, 0xbf7af121, 0x3f7ebb33,
+0xbffebbcb, 0x3f7ebc62, 0x3ffc325d, 0xbf787322,
+0x3f7d7930, 0xbffd7a74, 0x3f7d7bb8, 0x3f973618,
+0xbe3e9426, 0xbfb7620b, 0x40022f17, 0xbf1ca61c,
+0x3f82fcaf, 0xbd0de03e, 0xbf97f68c, 0x3fb0863a,
+0xbe5dc55a, 0x3f7d3211, 0xbbd33d11, 0xbf8a5e4b,
+0x3f904ce5, 0xbdac7e35, 0x3f7a5a66, 0xba9d4191,
+0xbf847c75, 0x3f826fdb, 0xbd0d1527, 0x3f771f0b,
+0xb82e4db8, 0xbf80d701, 0x3f701807, 0xbbc839c5,
+0x13dfc397, 0xcacacafe, 0x793cfd31, 0xfadad3d7,
+0x7, 0x2, 0xf, 0x5,
+0x0, 0xd, 0x9, 0x4,
+0x1, 0x8, 0xe, 0x6,
+0x3, 0xb, 0xa, 0xc,
+0x0, 0x428c0000, 0x43020000, 0x43610000,
+0x43a28000, 0x43e10000, 0x44228000, 0x44548000,
+0x44834000, 0x449c4000, 0x44b54000, 0x44ce4000,
+0x44e74000, 0x45002000, 0x450ca000, 0x45192000,
+0x4525a000, 0x45322000, 0x453ea000, 0x454b2000,
+0x4557a000, 0x45642000, 0x4570a000, 0x457d2000,
+0x4584d000, 0x45915000, 0x459dd000, 0x45aa5000,
+0x45b6d000, 0x45c35000, 0x45cfd000, 0x45dc5000,
+0x45e8d000, 0x45f55000, 0x460ca000, 0x461c4000,
+0x462be000, 0x463b8000, 0x465ac000, 0x467a0000,
+0x447a0000, 0x45160000, 0x457a0000, 0x473b8000,
+0x42c80000, 0x43480000, 0x43c80000, 0x44160000,
+0x447a0000, 0x44fa0000, 0x453b8000, 0x457a0000,
+0x45fa0000, 0x467a0000, 0x46fa0000, 0x473b8000,
+0xa238, 0xa23b, 0xa23b, 0xa240,
+0xa245, 0xa24a, 0xa24d, 0xa24d,
+0xa238, 0xa238, 0xbf1a00cc, 0xbd89216b,
+0x3d89216b, 0x3f1a00cc, 0x3f800000, 0xbfd72e16,
+0xbf31e565, 0x3f31e565, 0x3fd72e16, 0x3f800000,
+0xbeab9db4, 0xbc40541e, 0x3c40541e, 0x3eab9db4,
+0x3f800000, 0xbfb95c5b, 0xbf0272af, 0x3f0272af,
+0x3fb95c5b, 0x3f800000, 0x0, 0x0,
+0x0, 0x0, 0x3f800000, 0x3f800000,
+0x3f800000, 0x3f800000, 0x3f800000, 0x3f800000,
+0x0, 0x3f800000, 0x3f800000, 0x3f19999a,
+0x3f800000, 0xa8f5, 0xa8f5, 0xa8f5,
+0xa8f5, 0xa8f5, 0xa929, 0xa929,
+0xa91a, 0xa91a, 0x80, 0x100,
+0x200, 0x280, 0x200, 0x400,
+0x500, 0x580, 0x3ed7741e, 0x3e222f84,
+0x3f98b9e5, 0xbed7741e, 0xbeb3ff56, 0x3fc2985f,
+0xbf12eb67, 0x3f800015, 0xbfc2985f, 0x3f12eb3e,
+0x3ea174ec, 0x3e7b0df2, 0x3f9a9421, 0xbea174ec,
+0xbee7d77d, 0x3fbd9257, 0xbf0b1318, 0x3f800016,
+0xbfbd9257, 0x3f0b12eb, 0x3f800000, 0x3f800000,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0xade0, 0xade3,
+0xade8, 0xaded, 0xadf2, 0xadf7,
+0xadfc, 0xae01, 0xae06, 0x3f8a7a23,
+0xbf62e872, 0x3e899369, 0xbe5d3d92, 0x3e2f09f5,
+0x3feb15fa, 0xbf5bd33d, 0x3f800000, 0xbfcfe668,
+0x3f2945e4, 0xe64a, 0xe64f, 0x3ff1349f,
+0xbf6407b3, 0x3f800000, 0xbff1349f, 0x3f6407b3,
+0x3ff38bdf, 0xbf683fde, 0x3f02e74a, 0xbf73d60f,
+0x3ee42dc6, 0x3f511098, 0x3f323943, 0x3f33a6c1,
+0x200, 0x2, 0x200, 0x2,
+0x200, 0x2, 0x200, 0x2,
+0x200, 0x2, 0x200, 0x2,
+0x2c0, 0x0, 0x280, 0x0,
+0x280, 0x0, 0x200, 0x0,
+0x240, 0x0, 0x200, 0x0,
+0x200, 0x0, 0x200, 0x0,
+0x1, 0x1, 0x1, 0x1,
+0x1, 0x1, 0x1, 0x1,
+0x0, 0x1, 0x1, 0x1,
+0x0, 0x0, 0x0, 0x1,
+0x0, 0x0, 0x1, 0x1,
+0x0, 0x0, 0x1, 0x1,
+0x0, 0x1, 0x1, 0x1,
+0xc040, 0xc073, 0xc0af, 0xc0c9,
+0xc16b, 0xc1f1, 0xc23d, 0xc2fe,
+0x0, 0x37a80016, 0x38160004, 0x38618003,
+0x389ac007, 0x38c77ffe, 0x38f57ffd, 0x39122003,
+0x39289ffe, 0x393dffff, 0x39523ffe, 0x39658003,
+0x3977dfff, 0x3984cfff, 0x398d6fff, 0x3995f000,
+0x399eb000, 0x39a79fff, 0x39b0f000, 0x39ba8fff,
+0x39c49fff, 0x39cf1001, 0x39da0000, 0x39e56000,
+0x39f11fff, 0x39fd6001, 0x3a0507ff, 0x3a0b9000,
+0x3a124800, 0x3a1937ff, 0x3a205801, 0x3a279fff,
+0x3a2f17ff, 0x3a36b000, 0x3a3e7800, 0x3a466800,
+0x3a4e7800, 0x3a56b800, 0x3a5f27ff, 0x3a67b800,
+0x3a707800, 0x3a7967ff, 0x3a814000, 0x3a85e000,
+0x3a8a9800, 0x3a8f6000, 0x3a943c00, 0x3a992c00,
+0x3a9e2c00, 0x3aa33c00, 0x3aa85c00, 0x3aad8c00,
+0x3ab2cc00, 0x3ab81c00, 0x3abd7c00, 0x3ac2e800,
+0x3ac86400, 0x3acdf000, 0x3ad38800, 0x3ad92c00,
+0x3adedc00, 0x3ae49800, 0x3aea5c00, 0x3af02c00,
+0x3af60400, 0x3afbe000, 0x3b00e200, 0x3b03d800,
+0x3b06d000, 0x3b09ca00, 0x3b0cc800, 0x3b0fc600,
+0x3b12c400, 0x3b15c400, 0x3b18c400, 0x3b1bc400,
+0x3b1ec400, 0x3b21c000, 0x3b24bc00, 0x3b27b600,
+0x3b2aac00, 0x3b2d9e00, 0x3b308a00, 0x3b337400,
+0x3b365600, 0x3b393400, 0x3b3c0c00, 0x3b3edc00,
+0x3b41a400, 0x3b446400, 0x3b471a00, 0x3b49c800,
+0x3b4c6a00, 0x3b4f0200, 0x3b518e00, 0x3b540e00,
+0x3b568000, 0x3b58e400, 0x3b5b3a00, 0x3b5d8000,
+0x3b5fb600, 0x3b61da00, 0x3b63ee00, 0x3b65ee00,
+0x3b67dc00, 0x3b69b600, 0x3b6b7a00, 0x3b6d2800,
+0x3b6ebe00, 0x3b703c00, 0x3b719e00, 0x3b72e800,
+0x3b741600, 0x3b752800, 0x3b761e00, 0x3b770200,
+0x3b77d400, 0x3b789400, 0x3b794400, 0x3b79e000,
+0x3b7a6c00, 0x3b7ae000, 0x3b7b3600, 0x3b7b5000,
+0x3b7b2400, 0x3b7aa400, 0x3b79bc00, 0x3b786a00,
+0x3b769200, 0x3b743a00, 0x3b715e00, 0x3b6e1a00,
+0x3b6a7200, 0x3b667a00, 0x3b624000, 0x3b5dce00,
+0x3b594000, 0x3b549c00, 0x3b4fe400, 0x3b4b1200,
+0x3b462400, 0x3b411400, 0x3b3bda00, 0x3b367000,
+0x3b30c800, 0x3b2adc00, 0x3b24aa00, 0x3b1e2e00,
+0x3b176400, 0x3b104c00, 0x3b08e400, 0x3b012a00,
+0x3af23c00, 0x3ae17c00, 0x3ad01c00, 0x3abe1000,
+0x3aab6400, 0x3a981000, 0x3a841800, 0x3a5ef000,
+0x3a3477ff, 0x3a08afff, 0x39b74ffe, 0x39354002,
+0xb714000e, 0xb94cfffe, 0xb9caf001, 0xba190800,
+0xba4de800, 0xba821400, 0xba9ddc00, 0xbaba4c00,
+0xbad76800, 0xbaf52c00, 0xbb09cc00, 0xbb195600,
+0xbb293200, 0xbb396000, 0xbb49e200, 0xbb5ab400,
+0xbb6bd800, 0xbb7d4c00, 0xbb878800, 0xbb909300,
+0xbb99c500, 0xbba31e00, 0xbbac9f00, 0xbbb64600,
+0xbbc01300, 0xbbca0500, 0xbbd41c00, 0xbbde5700,
+0xbbe8b600, 0xbbf33800, 0xbbfddb00, 0xbc045080,
+0xbc09c400, 0xbc0f4780, 0xbc14da80, 0xbc1a7d80,
+0xbc202f80, 0xbc25f000, 0xbc2bbe80, 0xbc319b00,
+0xbc378500, 0xbc3d7b80, 0xbc437e80, 0xbc498d00,
+0xbc4fa700, 0xbc55cb80, 0xbc5bfa00, 0xbc623200,
+0xbc687380, 0xbc6ebd00, 0xbc750e80, 0xbc7b6700,
+0xbc80e340, 0xbc841600, 0xbc874b40, 0xbc8a8300,
+0xbc8dbc80, 0xbc90f7c0, 0xbc943440, 0xbc9771c0,
+0xbc9aafc0, 0xbc9dedc0, 0xbca12b80, 0xbca468c0,
+0xbca7a4c0, 0xbcaadf80, 0xbcae1840, 0xbcb14ec0,
+0xbcb482c0, 0xbcb7b340, 0xbcbae080, 0xbcbe0980,
+0xbcc12e00, 0xbcc44d40, 0xbcc76700, 0xbcca7b00,
+0xbccd8880, 0xbcd08f40, 0xbcd38f40, 0xbcd68900,
+0xbcd97c40, 0xbcdc6940, 0xbcdf4f80, 0xbce22e80,
+0xbce50600, 0xbce7d480, 0xbcea9900, 0xbced4e80,
+0xbceff340, 0xbcf28480, 0xbcf4ff40, 0xbcf76240,
+0xbcf9aa00, 0xbcfbd5c0, 0xbcfde540, 0xbcffdc00,
+0xbd00dd60, 0xbd01c180, 0xbd029bc0, 0xbd036c80,
+0xbd0435a0, 0xbd04f780, 0xbd05b200, 0xbd066480,
+0xbd070ec0, 0xbd07b000, 0xbd084780, 0xbd08d4e0,
+0xbd0956a0, 0xbd09cc60, 0xbd0a35a0, 0xbd0a91e0,
+0xbd0ae0e0, 0xbd0b2260, 0xbd0b55e0, 0xbd0b7b40,
+0xbd0b9240, 0xbd0b9ac0, 0xbd0b94a0, 0xbd0b7f80,
+0xbd0b5b40, 0xbd0b27e0, 0xbd0ae500, 0xbd0a92c0,
+0xbd0a30e0, 0xbd09bf40, 0xbd093da0, 0xbd08ac00,
+0xbd080a00, 0xbd075780, 0xbd069480, 0xbd05c0a0,
+0xbd04dbe0, 0xbd03e5e0, 0xbd02dec0, 0xbd01c640,
+0xbd009c80, 0xbcfec240, 0xbcfc2880, 0xbcf96b80,
+0xbcf68b40, 0xbcf38780, 0xbcf06040, 0xbced1580,
+0xbce9a700, 0xbce614c0, 0xbce25e80, 0xbcde8480,
+0xbcda86c0, 0xbcd66500, 0xbcd21f80, 0xbccdb640,
+0xbcc92980, 0xbcc47900, 0xbcbfa540, 0xbcbaae40,
+0xbcb59440, 0xbcb05740, 0xbcaaf780, 0xbca57580,
+0xbc9fd140, 0xbc9a0b00, 0xbc942300, 0xbc8e1980,
+0xbc87ef40, 0xbc81a400, 0xbc767180, 0xbc695a80,
+0xbc5c0480, 0xbc4e7080, 0xbc409f80, 0xbc329180,
+0xbc244900, 0xbc15c600, 0xbc070a00, 0xbbf02c00,
+0xbbd1d600, 0xbbb31500, 0xbb93ec00, 0xbb68b800,
+0xbb28d200, 0xbad05800, 0xba1b2800, 0x39da7001,
+0x3abc2800, 0x3b218400, 0x3b659800, 0x3b952400,
+0x3bb7c600, 0x3bdab000, 0x3bfdde00, 0x3c10a600,
+0x3c227a80, 0x3c346c00, 0x3c467700, 0x3c589a80,
+0x3c6ad480, 0x3c7d2280, 0x3c87c140, 0x3c90f940,
+0x3c9a3800, 0x3ca37c40, 0x3cacc580, 0x3cb61240,
+0x3cbf6140, 0x3cc8b200, 0x3cd20300, 0x3cdb5480,
+0x3ce4a500, 0x3cedf440, 0x3cf74100, 0x3d0044c0,
+0x3d04e6c0, 0x3d098540, 0x3d0e1f40, 0x3d12b2a0,
+0x3d173e40, 0x3d1bc060, 0x3d2037a0, 0x3d24a2e0,
+0x3d290020, 0x3d2d4f00, 0x3d318ea0, 0x3d35bfe0,
+0x3d39e2a0, 0x3d3df720, 0x3d41fda0, 0x3d45f620,
+0x3d49e180, 0x3d4dbf80, 0x3d518fc0, 0x3d555120,
+0x3d5902e0, 0x3d5ca420, 0x3d6033c0, 0x3d63b0e0,
+0x3d6719e0, 0x3d6a6e00, 0x3d6dac40, 0x3d70d400,
+0x3d73e480, 0x3d76dce0, 0x3d79bc80, 0x3d7c82a0,
+0x3d7f2ec0, 0x3d80e010, 0x3d821b10, 0x3d834810,
+0x3d8466c0, 0x3d8576d0, 0x3d867800, 0x3d876a00,
+0x3d884c80, 0x3d891f40, 0x3d89e1f0, 0x3d8a9440,
+0x3d8b35f0, 0x3d8bc6b0, 0x3d8c4640, 0x3d8cb460,
+0x3d8d10b0, 0x3d8d5b00, 0x3d8d9310, 0x3d8db8a0,
+0x3d8dcb70, 0x3d8dcb50, 0x3d8db800, 0x3d8d9160,
+0x3d8d5720, 0x3d8d0920, 0x3d8ca720, 0x3d8c3110,
+0x3d8ba6a0, 0x3d8b07c0, 0x3d8a5430, 0x3d898be0,
+0x3d88aeb0, 0x3d87bc70, 0x3d86b500, 0x3d859840,
+0x3d846630, 0x3d831eb0, 0x3d81c1a0, 0x3d804ef0,
+0x3d7d8d40, 0x3d7a5140, 0x3d76e9c0, 0x3d7356c0,
+0x3d6f9820, 0x3d6bae20, 0x3d679860, 0x3d635740,
+0x3d5eeac0, 0x3d5a52c0, 0x3d558fa0, 0x3d50a160,
+0x3d4b8820, 0x3d464420, 0x3d40d580, 0x3d3b3ca0,
+0x3d3579a0, 0x3d2f8ce0, 0x3d2976a0, 0x3d233720,
+0x3d1ccee0, 0x3d163e20, 0x3d0f8560, 0x3d08a500,
+0x3d019da0, 0x3cf4dec0, 0x3ce63640, 0x3cd74240,
+0x3cc80400, 0x3cb87cc0, 0x3ca8adc0, 0x3c989800,
+0x3c883d40, 0x3c6f3c80, 0x3c4d7a00, 0x3c2b3580,
+0x3c087180, 0x3bca6400, 0x3b82f400, 0x3aea6800,
+0xb9ea3000, 0xbb317a00, 0xbba3ad00, 0xbbef6900,
+0xbc1df600, 0xbc449700, 0xbc6b9300, 0xbc897300,
+0xbc9d4640, 0xbcb14100, 0xbcc56100, 0xbcd9a480,
+0xbcee0940, 0xbd0146a0, 0xbd0b9700, 0xbd15f480,
+0xbd205e20, 0xbd2ad260, 0xbd354fe0, 0xbd3fd500,
+0xbd4a6020, 0xbd54efc0, 0xbd5f8240, 0xbd6a1620,
+0xbd74a9c0, 0xbd7f3b80, 0xbd84e520, 0xbd8a2a70,
+0xbd8f6d20, 0xbd94ac90, 0xbd99e830, 0xbd9f1f60,
+0xbda451b0, 0xbda97e50, 0xbdaea4b0, 0xbdb3c3e0,
+0xbdb8db20, 0xbdbde9b0, 0xbdc2eeb0, 0xbdc7e940,
+0xbdccd890, 0xbdd1bbc0, 0xbdd69200, 0xbddb5a80,
+0xbde01480, 0xbde4bf20, 0xbde959a0, 0xbdede320,
+0xbdf25ae0, 0xbdf6c020, 0xbdfb1200, 0xbdff4fb0,
+0xbe01bc30, 0xbe03c5a0, 0xbe05c3c8, 0xbe07b640,
+0xbe099c98, 0xbe0b7678, 0xbe0d4368, 0xbe0f0310,
+0xbe10b500, 0xbe1258d8, 0xbe13ee38, 0xbe1574b0,
+0xbe16ebe0, 0xbe185370, 0xbe19aaf0, 0xbe1af200,
+0xbe1c2848, 0xbe1d4d60, 0xbe1e60e8, 0xbe1f6288,
+0xbe2051e0, 0xbe212e90, 0xbe21f840, 0xbe22ae98,
+0xbe235140, 0xbe23dfd8, 0xbe245a10, 0xbe24bf98,
+0xbe251010, 0xbe254b38, 0xbe2570b0, 0xbe258028,
+0xbe257960, 0xbe255bf8, 0xbe2527b8, 0xbe24dc58,
+0xbe247980, 0xbe23fef0, 0xbe236c70, 0xbe22c1b8,
+0xbe21fe88, 0xbe2122a0, 0xbe202dc8, 0xbe1f1fc0,
+0xbe1df858, 0xbe1cb760, 0xbe1b5c98, 0xbe19e7d8,
+0xbe1858e8, 0xbe16afa8, 0xbe14ebe0, 0xbe130d70,
+0xbe111430, 0xbe0f0000, 0xbe0cd0c0, 0xbe0a8648,
+0xbe082080, 0xbe059f58, 0xbe0302b0, 0xbe004a78,
+0xbdfaed40, 0xbdf50e20, 0xbdeef780, 0xbde8a950,
+0xbde22380, 0xbddb6610, 0xbdd470f0, 0xbdcd4420,
+0xbdc5dfb0, 0xbdbe43b0, 0xbdb67020, 0xbdae6530,
+0xbda622f0, 0xbd9da980, 0xbd94f910, 0xbd8c11d0,
+0xbd82f400, 0xbd733f80, 0xbd602ac0, 0xbd4caa40,
+0xbd38be80, 0xbd246840, 0xbd0fa820, 0xbcf4fdc0,
+0xbcc9da80, 0xbc9de840, 0xbc625180, 0xbc073c80,
+0xbb2a5600, 0x3b4e7c00, 0x3c135d00, 0x3c749f80,
+0x3cabb140, 0x3cddd0c0, 0x3d085620, 0x3d222120,
+0x3d3c4860, 0x3d56cb00, 0x3d71a7e0, 0x3d866ef0,
+0x3d9435f0, 0x3da22850, 0x3db04530, 0x3dbe8b90,
+0x3dccfa90, 0x3ddb9130, 0x3dea4e60, 0x3df93130,
+0x3e041c30, 0x3e0bb188, 0x3e135818, 0x3e1b0f70,
+0x3e22d720, 0x3e2aaea8, 0x3e329588, 0x3e3a8b58,
+0x3e428f98, 0x3e4aa1c8, 0x3e52c168, 0x3e5aedf8,
+0x3e6326e0, 0x3e6b6ba0, 0x3e73bba8, 0x3e7c1670,
+0x3e823dac, 0x3e8674ec, 0x3e8ab0ac, 0x3e8ef0a0,
+0x3e93347c, 0x3e977bf0, 0x3e9bc6b4, 0x3ea01474,
+0x3ea464e0, 0x3ea8b7ac, 0x3ead0c88, 0x3eb16320,
+0x3eb5bb28, 0x3eba144c, 0x3ebe6e38, 0x3ec2c89c,
+0x3ec72324, 0x3ecb7d80, 0x3ecfd75c, 0x3ed43060,
+0x3ed8883c, 0x3edcde9c, 0x3ee13324, 0x3ee58584,
+0x3ee9d568, 0x3eee227c, 0x3ef26c64, 0x3ef6b2d0,
+0x3efaf56c, 0x3eff33e0, 0x3f01b6ec, 0x3f03d17e,
+0x3f05e97e, 0x3f07fec2, 0x3f0a111c, 0x3f0c2064,
+0x3f0e2c72, 0x3f10351a, 0x3f123a30, 0x3f143b90,
+0x3f16390c, 0x3f18327c, 0x3f1a27b6, 0x3f1c1894,
+0x3f1e04ec, 0x3f1fec96, 0x3f21cf6c, 0x3f23ad42,
+0x3f2585f6, 0x3f27595e, 0x3f292754, 0x3f2aefb2,
+0x3f2cb252, 0x3f2e6f10, 0x3f3025c8, 0x3f31d652,
+0x3f33808c, 0x3f352454, 0x3f36c186, 0x3f3857fe,
+0x3f39e79a, 0x3f3b703a, 0x3f3cf1bc, 0x3f3e6c02,
+0x3f3fdee8, 0x3f414a52, 0x3f42ae20, 0x3f440a34,
+0x3f455e72, 0x3f46aabc, 0x3f47eef8, 0x3f492b08,
+0x3f4a5ed2, 0x3f4b8a3e, 0x3f4cad2e, 0x3f4dc78e,
+0x3f4ed942, 0x3f4fe236, 0x3f50e250, 0x3f51d97a,
+0x3f52c7a2, 0x3f53acb2, 0x3f548894, 0x3f555b3a,
+0x3f56248c, 0x3f56e47e, 0x3f579afe, 0x3f5847fe,
+0x3f58eb6e, 0x3f598542, 0x3f5a156e, 0x3f5a9bf0,
+0x3f5b18ba, 0x3f5b8bc6, 0x3f5bf50c, 0x3f5c5482,
+0x3f5caa24, 0x3f5cf5e8, 0x3f5d37c0, 0x3f5d6f98,
+0x3f5d9d64, 0x3f5dc116, 0x3f5ddaa2, 0x3f5de9fe,
+0x3f5def1e, 0x0, 0x37ab0006, 0x3818fff4,
+0x38660007, 0x389d8007, 0x38cafffa, 0x38f98004,
+0x39145ffe, 0x392affff, 0x39408000, 0x3954bfff,
+0x3967fffd, 0x397a2001, 0x3985d000, 0x398e5002,
+0x3996a000, 0x399f3001, 0x39a7e002, 0x39b0f000,
+0x39ba5000, 0x39c42002, 0x39ce5001, 0x39d8dfff,
+0x39e3f001, 0x39ef7000, 0x39fb3ffe, 0x3a03c800,
+0x3a0a1801, 0x3a10a000, 0x3a175000, 0x3a1e3000,
+0x3a253000, 0x3a2c5fff, 0x3a33a800, 0x3a3b1800,
+0x3a42b000, 0x3a4a6801, 0x3a524000, 0x3a5a4000,
+0x3a626800, 0x3a6ab001, 0x3a732000, 0x3a7bb000,
+0x3a823400, 0x3a86a000, 0x3a8b1800, 0x3a8fa400,
+0x3a943c00, 0x3a98e000, 0x3a9d9400, 0x3aa25000,
+0x3aa71800, 0x3aabec00, 0x3ab0c800, 0x3ab5b400,
+0x3abaa400, 0x3abfa000, 0x3ac4a400, 0x3ac9b400,
+0x3acec800, 0x3ad3e000, 0x3ad90000, 0x3ade2400,
+0x3ae34c00, 0x3ae87800, 0x3aeda400, 0x3af2d000,
+0x3af7fc00, 0x3afd2400, 0x3b012800, 0x3b03ba00,
+0x3b064c00, 0x3b08dc00, 0x3b0b6a00, 0x3b0df600,
+0x3b107c00, 0x3b130000, 0x3b157e00, 0x3b17f800,
+0x3b1a6c00, 0x3b1cd800, 0x3b1f3e00, 0x3b219e00,
+0x3b23f400, 0x3b264200, 0x3b288600, 0x3b2ac200,
+0x3b2cf200, 0x3b2f1800, 0x3b313400, 0x3b334200,
+0x3b354600, 0x3b373a00, 0x3b392200, 0x3b3afa00,
+0x3b3cc200, 0x3b3e7c00, 0x3b402200, 0x3b41b800,
+0x3b433c00, 0x3b44ac00, 0x3b460a00, 0x3b475200,
+0x3b488600, 0x3b49a600, 0x3b4ab000, 0x3b4ba200,
+0x3b4c7a00, 0x3b4d3a00, 0x3b4dde00, 0x3b4e6600,
+0x3b4ed200, 0x3b4f1e00, 0x3b4f4c00, 0x3b4f5c00,
+0x3b4f5400, 0x3b4f3800, 0x3b4f0600, 0x3b4ec000,
+0x3b4e6400, 0x3b4df200, 0x3b4d6400, 0x3b4cb400,
+0x3b4bc200, 0x3b4a8600, 0x3b48f000, 0x3b46f000,
+0x3b447e00, 0x3b418400, 0x3b3e0400, 0x3b39fc00,
+0x3b358c00, 0x3b30b600, 0x3b2b9000, 0x3b262a00,
+0x3b208e00, 0x3b1ada00, 0x3b151400, 0x3b0f3e00,
+0x3b095200, 0x3b034c00, 0x3afa5000, 0x3aedb400,
+0x3ae0c000, 0x3ad35000, 0x3ac55800, 0x3ab6d000,
+0x3aa7b400, 0x3a980000, 0x3a87ac00, 0x3a6d6800,
+0x3a4a3800, 0x3a25c000, 0x3a000001, 0x39b20001,
+0x3942c002, 0x37e4fff1, 0xb90ea000, 0xb99f7000,
+0xb9fa0001, 0xba2b7800, 0xba5b27ff, 0xba860400,
+0xba9f1000, 0xbab8b800, 0xbad2fc00, 0xbaeddc00,
+0xbb04ac00, 0xbb12ba00, 0xbb211600, 0xbb2fc200,
+0xbb3eba00, 0xbb4e0200, 0xbb5d9600, 0xbb6d7400,
+0xbb7d9e00, 0xbb870900, 0xbb8f6700, 0xbb97ea00,
+0xbba09000, 0xbba95a00, 0xbbb24700, 0xbbbb5700,
+0xbbc48900, 0xbbcddd00, 0xbbd75300, 0xbbe0eb00,
+0xbbeaa200, 0xbbf47900, 0xbbfe6f00, 0xbc044200,
+0xbc095a80, 0xbc0e8200, 0xbc13b700, 0xbc18f980,
+0xbc1e4900, 0xbc23a580, 0xbc290e80, 0xbc2e8380,
+0xbc340400, 0xbc399000, 0xbc3f2680, 0xbc44c700,
+0xbc4a7180, 0xbc502580, 0xbc55e180, 0xbc5ba600,
+0xbc617200, 0xbc674480, 0xbc6d1d80, 0xbc72fc80,
+0xbc78e080, 0xbc7ec900, 0xbc825ac0, 0xbc8552c0,
+0xbc884c40, 0xbc8b4680, 0xbc8e4200, 0xbc913d80,
+0xbc943940, 0xbc9734c0, 0xbc9a2f80, 0xbc9d2940,
+0xbca02180, 0xbca31800, 0xbca60c40, 0xbca8fe00,
+0xbcabec80, 0xbcaed800, 0xbcb1bfc0, 0xbcb4a340,
+0xbcb78280, 0xbcba5cc0, 0xbcbd31c0, 0xbcc00140,
+0xbcc2ca40, 0xbcc58c40, 0xbcc84740, 0xbccafa40,
+0xbccda540, 0xbcd04740, 0xbcd2e040, 0xbcd56f80,
+0xbcd7f600, 0xbcda7340, 0xbcdce700, 0xbcdf5100,
+0xbce1b0c0, 0xbce405c0, 0xbce64ec0, 0xbce88a80,
+0xbceab540, 0xbceccd00, 0xbceecf40, 0xbcf0ba00,
+0xbcf28b80, 0xbcf44100, 0xbcf5da40, 0xbcf756c0,
+0xbcf8b9c0, 0xbcfa0400, 0xbcfb3780, 0xbcfc55c0,
+0xbcfd6040, 0xbcfe5a00, 0xbcff43c0, 0xbd000ec0,
+0xbd0072c0, 0xbd00cdc0, 0xbd011f20, 0xbd016600,
+0xbd01a200, 0xbd01d1c0, 0xbd01f4e0, 0xbd020ac0,
+0xbd021340, 0xbd020de0, 0xbd01fa40, 0xbd01d860,
+0xbd01a7e0, 0xbd0168a0, 0xbd011a80, 0xbd00bd60,
+0xbd005100, 0xbcffaac0, 0xbcfe94c0, 0xbcfd6000,
+0xbcfc0c40, 0xbcfa9940, 0xbcf90700, 0xbcf75540,
+0xbcf583c0, 0xbcf39200, 0xbcf18000, 0xbcef4d80,
+0xbcecfa00, 0xbcea8580, 0xbce7efc0, 0xbce538c0,
+0xbce26000, 0xbcdf65c0, 0xbcdc4a00, 0xbcd90cc0,
+0xbcd5adc0, 0xbcd22d40, 0xbcce8b00, 0xbccac780,
+0xbcc6e240, 0xbcc2db40, 0xbcbeb300, 0xbcba6900,
+0xbcb5fdc0, 0xbcb17140, 0xbcacc380, 0xbca7f480,
+0xbca304c0, 0xbc9df440, 0xbc98c380, 0xbc937240,
+0xbc8e0140, 0xbc887080, 0xbc82c040, 0xbc79e280,
+0xbc6e0680, 0xbc61ed80, 0xbc559880, 0xbc490880,
+0xbc3c3d00, 0xbc2f3800, 0xbc21fa00, 0xbc148400,
+0xbc06d680, 0xbbf1e700, 0xbbd5b600, 0xbbb91d00,
+0xbb9c1f00, 0xbb7d7c00, 0xbb41f800, 0xbb05b600,
+0xba917c00, 0xb9312003, 0x3a4d1801, 0x3ae48c00,
+0x3b31e800, 0x3b722600, 0x3b997d00, 0x3bba2f00,
+0x3bdb2600, 0x3bfc5e00, 0x3c0eea80, 0x3c1fc300,
+0x3c30b780, 0x3c41c600, 0x3c52ec00, 0x3c642880,
+0x3c757980, 0x3c836e40, 0x3c8c2800, 0x3c94e940,
+0x3c9db080, 0x3ca67d00, 0x3caf4dc0, 0x3cb82180,
+0x3cc0f740, 0x3cc9cdc0, 0x3cd2a400, 0x3cdb78c0,
+0x3ce44b00, 0x3ced1980, 0x3cf5e340, 0x3cfea700,
+0x3d03b220, 0x3d080ce0, 0x3d0c6360, 0x3d10b500,
+0x3d150120, 0x3d194700, 0x3d1d8620, 0x3d21bd60,
+0x3d25eb20, 0x3d2a0e80, 0x3d2e2640, 0x3d323120,
+0x3d362e60, 0x3d3a1c80, 0x3d3dfb00, 0x3d41c920,
+0x3d458760, 0x3d493580, 0x3d4cd380, 0x3d506160,
+0x3d53dee0, 0x3d574c80, 0x3d5aa9e0, 0x3d5df680,
+0x3d613160, 0x3d6459e0, 0x3d676f20, 0x3d6a7040,
+0x3d6d5c40, 0x3d703220, 0x3d72f0e0, 0x3d7597c0,
+0x3d782640, 0x3d7a9b80, 0x3d7cf700, 0x3d7f3800,
+0x3d80aee0, 0x3d81b400, 0x3d82ab00, 0x3d8393a0,
+0x3d846d80, 0x3d853880, 0x3d85f450, 0x3d86a0a0,
+0x3d873d40, 0x3d87c9e0, 0x3d884660, 0x3d88b260,
+0x3d890db0, 0x3d895800, 0x3d899130, 0x3d89b8e0,
+0x3d89cef0, 0x3d89d320, 0x3d89c520, 0x3d89a4e0,
+0x3d897220, 0x3d892cb0, 0x3d88d450, 0x3d8868f0,
+0x3d87ea60, 0x3d875870, 0x3d86b300, 0x3d85f9f0,
+0x3d852d10, 0x3d844c40, 0x3d835770, 0x3d824e80,
+0x3d813150, 0x3d7fffa0, 0x3d7d73c0, 0x3d7abf00,
+0x3d77e120, 0x3d74da00, 0x3d71a9c0, 0x3d6e5020,
+0x3d6acd20, 0x3d6720c0, 0x3d634ae0, 0x3d5f4be0,
+0x3d5b2360, 0x3d56d1c0, 0x3d5256e0, 0x3d4db300,
+0x3d48e620, 0x3d43f0a0, 0x3d3ed260, 0x3d398bc0,
+0x3d341d00, 0x3d2e8640, 0x3d28c7e0, 0x3d22e200,
+0x3d1cd520, 0x3d16a160, 0x3d104760, 0x3d09c740,
+0x3d032180, 0x3cf8ad40, 0x3ceace00, 0x3cdca640,
+0x3cce3700, 0x3cbf8140, 0x3cb08640, 0x3ca14700,
+0x3c91c4c0, 0x3c820080, 0x3c63f780, 0x3c436f80,
+0x3c226b80, 0x3c00ee80, 0x3bbdf800, 0x3b725800,
+0x3ace0000, 0xba182000, 0xbb34b600, 0xbba27e00,
+0xbbeb6500, 0xbc1a8480, 0xbc3fb180, 0xbc653580,
+0xbc858680, 0xbc989a00, 0xbcabd340, 0xbcbf3040,
+0xbcd2af40, 0xbce64d80, 0xbcfa0980, 0xbd06f060,
+0xbd10e8a0, 0xbd1aec80, 0xbd24faa0, 0xbd2f1200,
+0xbd393180, 0xbd4357c0, 0xbd4d83c0, 0xbd57b400,
+0xbd61e740, 0xbd6c1c40, 0xbd765160, 0xbd8042c0,
+0xbd855b90, 0xbd8a7260, 0xbd8f86a0, 0xbd949780,
+0xbd99a470, 0xbd9eacb0, 0xbda3afa0, 0xbda8ac80,
+0xbdada2c0, 0xbdb29190, 0xbdb77850, 0xbdbc5650,
+0xbdc12ac0, 0xbdc5f4e0, 0xbdcab400, 0xbdcf6760,
+0xbdd40e40, 0xbdd8a7d0, 0xbddd3360, 0xbde1b020,
+0xbde61d60, 0xbdea7a50, 0xbdeec630, 0xbdf30050,
+0xbdf727e0, 0xbdfb3c20, 0xbdff3c60, 0xbe0193e0,
+0xbe037ec0, 0xbe055e78, 0xbe073298, 0xbe08fad0,
+0xbe0ab6b0, 0xbe0c65d8, 0xbe0e07f0, 0xbe0f9c90,
+0xbe112358, 0xbe129bf0, 0xbe1405f8, 0xbe156110,
+0xbe16ace0, 0xbe17e900, 0xbe191528, 0xbe1a30f0,
+0xbe1b3c00, 0xbe1c35f8, 0xbe1d1e90, 0xbe1df558,
+0xbe1eba10, 0xbe1f6c58, 0xbe200bd8, 0xbe209848,
+0xbe211148, 0xbe217698, 0xbe21c7d8, 0xbe2204c8,
+0xbe222d10, 0xbe224070, 0xbe223e98, 0xbe222740,
+0xbe21fa20, 0xbe21b6f8, 0xbe215d78, 0xbe20ed68,
+0xbe206688, 0xbe1fc898, 0xbe1f1350, 0xbe1e4680,
+0xbe1d61f0, 0xbe1c6560, 0xbe1b50a0, 0xbe1a2380,
+0xbe18ddd0, 0xbe177f58, 0xbe1607f0, 0xbe147770,
+0xbe12cdb0, 0xbe110a78, 0xbe0f2db8, 0xbe0d3740,
+0xbe0b26f0, 0xbe08fcb0, 0xbe06b860, 0xbe0459e8,
+0xbe01e128, 0xbdfe9c40, 0xbdf94160, 0xbdf3b190,
+0xbdedecc0, 0xbde7f2d0, 0xbde1c3c0, 0xbddb5f70,
+0xbdd4c5f0, 0xbdcdf720, 0xbdc6f310, 0xbdbfb9d0,
+0xbdb84b70, 0xbdb0a7e0, 0xbda8cf60, 0xbda0c1f0,
+0xbd987fc0, 0xbd900900, 0xbd875de0, 0xbd7cfd00,
+0xbd6ad640, 0xbd584820, 0xbd455300, 0xbd31f780,
+0xbd1e3600, 0xbd0a0f80, 0xbceb0880, 0xbcc12a80,
+0xbc968640, 0xbc563b00, 0xbbfbc600, 0xbb102200,
+0x3b5d4000, 0x3c142280, 0x3c726c00, 0x3ca91380,
+0x3cd9a800, 0x3d0578a0, 0x3d1e7660, 0x3d37cc60,
+0x3d5179a0, 0x3d6b7d00, 0x3d82eac0, 0x3d904100,
+0x3d9dc080, 0x3dab68d0, 0x3db93920, 0x3dc730b0,
+0x3dd54e70, 0x3de391a0, 0x3df1f930, 0x3e004218,
+0x3e0798e0, 0x3e0f0058, 0x3e167810, 0x3e1dff88,
+0x3e259668, 0x3e2d3c28, 0x3e34f058, 0x3e3cb290,
+0x3e448250, 0x3e4c5f28, 0x3e5448a8, 0x3e5c3e50,
+0x3e643f98, 0x3e6c4c00, 0x3e746300, 0x3e7c8420,
+0x3e825764, 0x3e867138, 0x3e8a8f44, 0x3e8eb144,
+0x3e92d6ec, 0x3e96fff0, 0x3e9b2c0c, 0x3e9f5af0,
+0x3ea38c54, 0x3ea7bfe8, 0x3eabf564, 0x3eb02c74,
+0x3eb464d4, 0x3eb89e34, 0x3ebcd844, 0x3ec112b8,
+0x3ec54d40, 0x3ec98790, 0x3ecdc15c, 0x3ed1fa50,
+0x3ed6321c, 0x3eda6874, 0x3ede9d04, 0x3ee2cf78,
+0x3ee6ff88, 0x3eeb2cdc, 0x3eef5728, 0x3ef37e14,
+0x3ef7a158, 0x3efbc0a0, 0x3effdb9c, 0x3f01f8fc,
+0x3f0401b6, 0x3f0607d0, 0x3f080b22, 0x3f0a0b88,
+0x3f0c08d6, 0x3f0e02e6, 0x3f0ff992, 0x3f11ecae,
+0x3f13dc18, 0x3f15c7a6, 0x3f17af30, 0x3f199294,
+0x3f1b71a6, 0x3f1d4c46, 0x3f1f224a, 0x3f20f38c,
+0x3f22bfec, 0x3f248740, 0x3f264966, 0x3f28063a,
+0x3f29bd96, 0x3f2b6f5a, 0x3f2d1b60, 0x3f2ec188,
+0x3f3061ac, 0x3f31fbae, 0x3f338f6c, 0x3f351cc2,
+0x3f36a394, 0x3f3823c0, 0x3f399d26, 0x3f3b0fa8,
+0x3f3c7b28, 0x3f3ddf88, 0x3f3f3cac, 0x3f409276,
+0x3f41e0c8, 0x3f43278a, 0x3f4466a0, 0x3f459df0,
+0x3f46cd60, 0x3f47f4d6, 0x3f49143c, 0x3f4a2b76,
+0x3f4b3a72, 0x3f4c4114, 0x3f4d3f4c, 0x3f4e3500,
+0x3f4f221c, 0x3f50068e, 0x3f50e242, 0x3f51b528,
+0x3f527f2a, 0x3f53403a, 0x3f53f846, 0x3f54a740,
+0x3f554d1a, 0x3f55e9c8, 0x3f567d3a, 0x3f570766,
+0x3f578846, 0x3f57ffce, 0x3f586df6, 0x3f58d2b8,
+0x3f592e0a, 0x3f597fe4, 0x3f59c842, 0x3f5a0718,
+0x3f5a3c5a, 0x3f5a67fe, 0x3f5a89fa, 0x3f5aa248,
+0x3f5ab0e4, 0x3f5ab5c2, 0x30, 0x3f19999a,
+0x3fb81807, 0xbeefe85c, 0x3ef96388, 0xbef7cfef,
+0xb98838f9, 0x0, 0x0, 0x0,
+0x0, 0x0, 0xcad3, 0xcad8,
+0xcad8, 0xcad8, 0xcad8, 0xcad0,
+0xcad0, 0xcad0, 0xcad0, 0x1,
+0xc0c00000, 0x0, 0x428c0000, 0x43700000,
+0x0, 0xc0a00000, 0x45cb2000, 0x461c4000,
+0x0, 0x3ecccccd, 0x3f333333, 0x3f000000,
+0x0, 0x0, 0x3f800000, 0x40a00000,
+0x0, 0x0, 0x0, 0x0,
+0x3f3299b6, 0x3f3299b6, 0x3f11d39f, 0x3f17acb1,
+0x3f17acb1, 0x0, 0x3f800000, 0x3f800000,
+0x0, 0x3f800000, 0x3ca3d70a, 0x3ca3d70a,
+0x3ca3d70a, 0x3f800000, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0xffffffff, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x4c46584d, 0x40000, 0x9000,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x3d9e2596, 0xbf19197d, 0x402333b7, 0xc0a55ddb,
+0x40490fda, 0x0, 0x0, 0x0,
+0x3f317211, 0x31a92436, 0x0, 0x336c2a95,
+0x0, 0x31a8fc24, 0x0, 0x331f580c,
+0x0, 0x336a42a1, 0x0, 0x32c12342,
+0x0, 0x32e75624, 0x0, 0x32cf9891,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x489ccb3e,
+0x4b4c1611, 0xe4b7487d, 0x3e8395a8, 0x6ff876ae,
+0x8e2e17d0, 0x5b17df34, 0x40c6fe64, 0x855d581e,
+0xb31ac39f, 0x9b105964, 0x971b937f, 0x193f52c1,
+0xc90f9f8e, 0x50abd32f, 0xdc29cf35, 0x6e972f2f,
+0x6e440e44, 0x97ba07c8, 0xba07c80e, 0x6e972f2f,
+0x6e440e44, 0x97ba07c8, 0xba07c80e, 0x6e972f2f,
+0x6e440e44, 0x97ba07c8, 0xba07c80e, 0x6e972f2f,
+0x6e440e44, 0x97ba07c8, 0xba07c80e, 0x6e972f2f,
+0x6e440e44, 0x97ba07c8, 0xba07c80e, 0x6e972f2f,
+0x6e440e44, 0x97ba07c8, 0xba07c80e, 0x6e972f2f,
+0x6e440e44, 0x97ba07c8, 0xba07c80e, 0x6e972f2f,
+0x6e440e44, 0x97ba07c8, 0xba07c80e, 0x3f012657,
+0xbd06d27a, 0xbd7f2a10, 0x3dc6e055, 0xbc263fe8,
+0xbe025445, 0xbd8602c0, 0xbc74170a, 0xbc871435,
+0xbb38bdd8, 0x3c1b96ec, 0x3d7507e5, 0x3e1f67f5,
+0xbd2a6ac7, 0x3b974382, 0x3dbcc7d7, 0x3c27f8c8,
+0xbd0b02f0, 0xbb66e0c2, 0xbba67efa, 0xbc2b5a36,
+0xbbc36eaf, 0xbc90c9a7, 0x3cd60e57, 0x3d43fce7,
+0xbc13301f, 0xbccb587f, 0x3cad974a, 0x3c6a23ee,
+0xbbe4e072, 0x3be8e375, 0x3c16d3aa, 0xbc6bfadf,
+0xbc75125d, 0xb96d1d79, 0x3bb4ea69, 0x399e723c,
+0x3b0b195d, 0x3bd37eab, 0x3b5c4867, 0xbb416b18,
+0xb9e669dc, 0x3a33c83a, 0x3ace8673, 0x3b90d835,
+0x3ae40198, 0xbb818754, 0x3a565011, 0x3affd4c6,
+0xbbb6ab5f, 0xbbd00526, 0xbb366e90, 0xbc09b9b8,
+0xbc2e6dc6, 0xbbcea987, 0xbb74d21d, 0xbb4ecfb0,
+0xbb2a6292, 0xbb7e2d58, 0xbb7891af, 0xbb90caf9,
+0xbb6f63c7, 0xbaf840cd, 0xbacaf5db, 0x3f012657,
+0xbd06d27a, 0xbd7f2a10, 0x3dc6e055, 0xbc263fe8,
+0xbe025445, 0xbd8602c0, 0xbc74170a, 0xbc871435,
+0xbb38bdd8, 0x3c1b96ec, 0x3d7507e5, 0xbdeea797,
+0xbdcd1652, 0xbd0f8314, 0xbbcfdfb6, 0xbd9c198a,
+0xbc8699d6, 0x3d8a27bf, 0xbbddf423, 0xbd48283c,
+0x3cc561c5, 0x3d41750b, 0xbc071151, 0xbd12bea7,
+0x3b444e18, 0x3c8b098f, 0xbbaa14bb, 0x3bb7b283,
+0x3c372bbb, 0xbc38d73b, 0xbc2ed86f, 0xbc666b30,
+0xbc9eeafe, 0xbb84d4b7, 0xbc37b420, 0xbcd035e9,
+0xbc1fc208, 0xbbf811c4, 0xbc915fd5, 0xbbda11ec,
+0x3b5dbe13, 0xba78462e, 0xbb297bf0, 0xbb50e31b,
+0xbacf6794, 0x3b9d42e6, 0x3b9cc8a4, 0x3b220c9b,
+0x3be3f760, 0x3bc77f50, 0x3b41639c, 0x3c0a0655,
+0x3c48a325, 0x3c1041b5, 0x3bb15a6a, 0x3b2bc4c4,
+0x3b822135, 0x3be03c7f, 0x3ba5485b, 0x3b3513b0,
+0x3b37e309, 0xb8b92380, 0xbaa72407, 0x3efcb89d,
+0x3d96ea28, 0xbd4e0b8b, 0x3c882a93, 0xbcc38c42,
+0xbdc66d1d, 0xbda87660, 0xbd22da64, 0xbc2b1ad0,
+0x3cf14b06, 0x3d1ad350, 0x3caf9c6f, 0xbd050e3d,
+0xbd70c708, 0xbb6e42c7, 0x3cf72d4a, 0xbc52107a,
+0xbc741f7b, 0x3dbbd09d, 0x3c9ee47e, 0x3c152ccf,
+0x3d36a71e, 0x3d3eadca, 0x3cb861e1, 0xbafa8486,
+0xbaaf8238, 0x3bb64e12, 0xbb5742bd, 0xbc68226e,
+0x3bfc8851, 0x3ca1c6ab, 0xbbf961a0, 0xbccdc5b9,
+0xbb23ec81, 0x3c0e2271, 0x3b1c036e, 0x3b216586,
+0x3bbc152a, 0x3b8125f3, 0x3b801c6b, 0x3b94899f,
+0x3c1d26ac, 0x3c1d37ae, 0x3b948058, 0x3b8cd6d8,
+0x3bbaca7f, 0x3a8f1aed, 0xb9125d45, 0x3ad42455,
+0x3b4f7f62, 0x3b5079e5, 0x39a626ed, 0xbb6b72f8,
+0xba58c765, 0x3ab220fb, 0xbaf56b5d, 0xbb72a122,
+0xbb43b7f6, 0xbbd071fa, 0xbc05ebb8, 0xbbd788b8,
+0xbb968ac6, 0xbb860ce8, 0xbb912a3d, 0x3efcb89d,
+0x3d96ea28, 0xbd4e0b8b, 0x3c882a93, 0xbcc38c42,
+0xbdc66d1d, 0xbda87660, 0xbd22da64, 0xbc2b1ad0,
+0x3cf14b06, 0x3d1ad350, 0x3caf9c6f, 0xbd050e3d,
+0xbd70c708, 0xbb6e42c7, 0x3cf72d4a, 0xbc52107a,
+0xbc741f7b, 0xbda65caf, 0xbd1257f4, 0xbcfb8b65,
+0xbcf40f17, 0xbcd98c88, 0x3c2170e3, 0x3cd8e536,
+0xbc01cc23, 0xbcc6828d, 0x3bcbf38d, 0x3cabe8fa,
+0xbc41233c, 0xbd0a7f05, 0xbc41cb65, 0xbbfbbb37,
+0xbca70cb0, 0xbbb1a975, 0x3a66e593, 0xbc872bfd,
+0xbc883a3a, 0xbc34aac1, 0xbc4e4be8, 0xbc0d9ae7,
+0xbbfc003d, 0xbc21aa6a, 0xbbacd950, 0xbb91ee84,
+0xbbbd2210, 0xb9ef571b, 0x3b76d024, 0x3b469e75,
+0x3b026a1f, 0x38ed706b, 0x399bb002, 0x3b1cc807,
+0x3b0f193b, 0x3b4c47b0, 0x3bd07b24, 0x3b8c9db1,
+0x3affdc43, 0x3ba70ae8, 0x3bdd61f3, 0x3b98fd18,
+0x3b882362, 0x3b46a9d7, 0x3b29d3bf, 0x3ef7248c,
+0x3e389ec6, 0xbd1ced06, 0xbd82cb0c, 0xbd19fc48,
+0xbd8831b0, 0xbdcaea00, 0xbd845783, 0xbb901a6a,
+0x3d7cd6e3, 0x3d876073, 0xbc8ad6ec, 0xbdad2266,
+0xbd3f425a, 0x3c0213e5, 0x3c8ec6dc, 0x3bf0919e,
+0xbb973e80, 0xbcb011b9, 0xbc2a7a0b, 0x3c041397,
+0x3bbbf05e, 0x3baafb55, 0x3d76ced6, 0x3d35e89b,
+0x3c60be73, 0x3c2a143a, 0x3ccb4254, 0x3c95b7ec,
+0x3a72341d, 0xbbcc7adc, 0xbc04f10c, 0xbc55c309,
+0xbc09e0f8, 0x3bfc5b09, 0x3c92107c, 0x3c0ef9ef,
+0xbb6cdf3b, 0xbaef89d1, 0x3c076aeb, 0x3c38bc43,
+0x3c271553, 0x3c495a31, 0x3c74202d, 0x3c5d52ce,
+0x3c360f5b, 0x3c158be1, 0x3bf370a0, 0x3bceabda,
+0x3bcb4be4, 0x3b8e506b, 0x396dc515, 0xbb51f47b,
+0xbadb22e9, 0x3b1833f8, 0x3b3f13de, 0xba4daee5,
+0xbb5a2a86, 0xbb774069, 0xbb681094, 0xbb47df57,
+0xbaeacceb, 0xbb0c383b, 0xbb6373ed, 0x3f2e8c9a,
+0x3e826439, 0xbd5da9e7, 0xbdb8c010, 0xbd5982a0,
+0xbdc06117, 0xbe0f4fd6, 0xbdbaf015, 0xbbcb8d19,
+0x3db29294, 0x3dbf3989, 0xbcc41db7, 0xbdf48f0d,
+0xbd871494, 0x3c37bd5a, 0x3cc9ad75, 0x3c29e800,
+0xbbd5a356, 0xbcf8b453, 0xbc70ce06, 0x3c3a9023,
+0x3c04bc43, 0x3bf184a7, 0xbc9b48a1, 0xbc290471,
+0xbd17e275, 0xbd66aa98, 0xbd4a1cc9, 0xbd0dfab4,
+0xbc99b179, 0xbcccfac3, 0xbd298212, 0xbd0b5e3a,
+0xbb8b7c08, 0x3b8ece87, 0xbc01f93a, 0xbc873f52,
+0xbc73d735, 0xbc81ec29, 0xbc821c2a, 0xbc64db69,
+0xbc582488, 0xbc9177fd, 0xbcb1ebf4, 0xbcae2d6f,
+0xbc840e62, 0xbc496bcd, 0xbc05baf1, 0xbb04ad18,
+0x3b7c5510, 0x3b67f3c2, 0x3a9a5e31, 0x3a9145b4,
+0x3b80ec75, 0x3bbf3efb, 0x3bcb14e2, 0x3b67301a,
+0xb924a5d8, 0xbb1f20e4, 0xba4a170c, 0x3aa46b14,
+0x3b22d923, 0x3b3967c9, 0x3b723f37, 0x3e300f53,
+0x3de2f5af, 0x3deef13e, 0x3e233777, 0x3d810569,
+0x3d9c07cb, 0x3dcc5a70, 0x3e0671bf, 0x3db33e8c,
+0x3d9b138a, 0x3d9bcbc2, 0x3db24ac6, 0x3e151b9b,
+0x3dd41b64, 0x3da32368, 0x3d85125a, 0x3e604880,
+0x3d96aed5, 0x3ca2fa6f, 0x3cb2aee6, 0x3d42b5d3,
+0x3d210ac5, 0xbc82e9f1, 0xbbfe1779, 0x3d4ae878,
+0x3d097061, 0xbd2aaf1a, 0xbd3f171d, 0x3da539be,
+0x3dbb37b6, 0x3d444826, 0x3ca6733e, 0x3c9f71d3,
+0x3c10aa0a, 0xbcbf4484, 0xbcf1e1e7, 0xbb74188b,
+0x3c5a29cb, 0x3a33ebe1, 0xbc45c35f, 0xbc221fce,
+0x39275796, 0x3ab6c68e, 0xbb58bd4a, 0xbb7d3dba,
+0xba59cd34, 0xbbc35e3e, 0xbbfd1c30, 0xb9c3276f,
+0x3b40cc60, 0xba9a86c8, 0x3a12cf41, 0x3b218a00,
+0x3934010e, 0x3aad895f, 0x3bc64f2a, 0x3baec0a2,
+0x3b3b59ae, 0x3abbd57e, 0xb9b55c08, 0xbaa0be2d,
+0x3a6723df, 0x3b0e13db, 0x3a9e107a, 0xbaaf18b9,
+0xbb16c0a3, 0xba623aba, 0x3a35aed1, 0x39759630,
+0xb9a56cb3, 0xbaaac5b2, 0xbb160d5e, 0xbaf94a12,
+0xba8889d3, 0xbacb2b37, 0xbab57769, 0xba972e60,
+0xbae10358, 0xbb05f0e4, 0xbae6573d, 0x3ebd386d,
+0x3d686a4f, 0xbcc2538d, 0xbd36e8ae, 0xbb52f4f3,
+0x3cf3de6d, 0xbc899517, 0x3cea40ae, 0x3dd89d9e,
+0x3c84ecef, 0xbdf0f1b1, 0xbd9bb232, 0x3c97e24a,
+0x3d044589, 0x3c8299d7, 0x3c3e14db, 0xbc20fe72,
+0xbcbc5ad4, 0xbc89b63f, 0xbb87c2b0, 0xbbadac3f,
+0xbc8b6221, 0xbcbe74e4, 0x3bf8fa06, 0x3c07660a,
+0x3bfac1ac, 0x3cc6946f, 0x3ce19723, 0x3b8e9830,
+0xbb2cad5b, 0x3bc2e501, 0x3bf6f0d2, 0x3c2ae765,
+0x3c8ce875, 0x3c35d078, 0x3bb31543, 0x3c16c8d1,
+0x3c4b3d91, 0x3c6d2362, 0x3c942171, 0x3c54808b,
+0x3bbee222, 0x3bc849ee, 0x3be55137, 0x3b7cd777,
+0x3b3cd07a, 0x3b22bd93, 0x3ab88967, 0x3ac2fa3e,
+0x3b14b894, 0x3af8536d, 0x3af612d0, 0x3aa8a477,
+0x3a5840d4, 0x3a755ae9, 0x3a5869e2, 0xb964e1e0,
+0xba4de356, 0xbac9af66, 0xbac98dff, 0xbaa569d1,
+0xbaaf7d3e, 0xbafa5b97, 0xbac62655, 0x3f6fb9ba,
+0xbb0d03b5, 0xbd8bb2a7, 0x3e829687, 0x3e576d2d,
+0xbe33d56e, 0xbe9a0a0c, 0xbbf317d7, 0x3dca8ee6,
+0xbde812c9, 0xbe2288f3, 0x3dd4e0f4, 0x3e2cf5bb,
+0xbd2ffccd, 0xbddb5603, 0x3d1dcafd, 0x3d33da4a,
+0xbd11bb05, 0xbc234de7, 0x3cc83a4b, 0xbca22d86,
+0xbcb3c0a1, 0x3a7a3077, 0x3c148d78, 0x3c7a8db8,
+0x3b6a63e4, 0xbc41a85e, 0x3cf0c747, 0x3d066b9a,
+0xbc39e632, 0x3c7ecc73, 0x3d67eaf6, 0xbb1bb316,
+0xbd0110a7, 0x3c4f7148, 0x3b84a94c, 0xbd04167e,
+0xbc095ad2, 0xba2a9f1f, 0xbcc413e7, 0xbc648b49,
+0x3a902631, 0xbc329f88, 0xbc263e3f, 0xbbf0e915,
+0xbc689862, 0xbbda2bfc, 0x3b072519, 0xbbd8051e,
+0xbb9ad59f, 0x3b1b653d, 0xbad2fc1b, 0xbb107920,
+0x3addb8d2, 0xbb9f02f0, 0xbbdcb536, 0xba9a6faa,
+0xba589521, 0xbb41b67d, 0xba6f11a4, 0xbb23ba2d,
+0xbb4010db, 0xbac5d757, 0xbb0bf607, 0x3ef726e9,
+0xbd1019ae, 0xbd18a3ba, 0xbd25a3a7, 0xbd31be05,
+0xbd376ec4, 0xbd3232f5, 0xbd1f8126, 0xbcfebad8,
+0xbca8d54c, 0xbc0dd5e1, 0x3b56efa4, 0x3c6030bf,
+0x3cae6094, 0x3ccf3f8b, 0x3cd1437a, 0x3cb81a50,
+0x3c8bafb6, 0x3c2d0682, 0x3b8e4a09, 0xb9eeb091,
+0xbb49d32d, 0xbb57628f, 0xbab05e1f, 0x3b06cdbf,
+0x3bc45968, 0x3c1ba242, 0x3c4120f6, 0x3c4affe7,
+0x3c38189a, 0x3c0d8c8c, 0x3baa7a43, 0x3adaf655,
+0xbaa231f1, 0xbb433660, 0xbb579827, 0xbb11acc0,
+0xb8ee49f5, 0x3b246f77, 0x3ba564a2, 0x3be42e94,
+0x3c0136e4, 0x3bfb82e5, 0x3bd2a7b9, 0x3b919327,
+0x3b0bbd00, 0xb88a74f8, 0xbaea3adf, 0xbb37d9ab,
+0xbb490078, 0xbb2fc0d2, 0xbaf66f4b, 0xba78e683,
+0xb92bfdf7, 0x398fedd7, 0x398fad11, 0xb912292a,
+0xba5c46e1, 0xbad75bec, 0xbb1a109e, 0xbb37a299,
+0xbb3e55a7, 0xbb2d9f55, 0xbb0a1ce4, 0x3eb6c177,
+0xbe2d6e2e, 0x3ca7139a, 0x3da9c270, 0x3cb90421,
+0xbd556ade, 0xbd7730ac, 0xbc9153b7, 0x3c45388c,
+0x3b09d2c9, 0xbc8e09d9, 0xbc23bb0c, 0x3ca11ccf,
+0x3d1c9e08, 0x3ce8ed36, 0x3beafc80, 0xb9aab947,
+0x3c0b6b98, 0x3c80448b, 0x3c13cbf6, 0xbb60ef37,
+0xbbe7051c, 0x371032d0, 0x3bd6ad82, 0x3b9376b0,
+0xbacb1999, 0xbb1adc2a, 0x3b558a62, 0x3c02ed9a,
+0x3bd441dc, 0x3aea09ec, 0x396690cc, 0x3b3aad54,
+0x3ba544c8, 0x3b5e17c5, 0xb7f985fa, 0xba8cd5d3,
+0x3a5db9da, 0x3b278a21, 0x3ae67b32, 0xb934865c,
+0xba10501f, 0x3a719978, 0x3b09b191, 0x3ac516ed,
+0x38ae4976, 0xb9cbffbb, 0x39969642, 0x3a4a8297,
+0x394623f1, 0xba56b6a4, 0xba98a041, 0xba49efd6,
+0xb9f2e2c7, 0xba412648, 0xba9c45da, 0xbaa2f6ed,
+0xba708cb8, 0xba361ea6, 0xba4f7acb, 0xba787434,
+0xba688514, 0xba358628, 0xba206a47, 0x3efc8417,
+0xbcc72679, 0xbd401c49, 0xbd7caf54, 0xbd679fd2,
+0xbd14e202, 0xbc83cf4c, 0xbbcdaa4e, 0xbbb19229,
+0xbbaf4e24, 0xbab84298, 0x3b7866f4, 0x3bb0335d,
+0x3b352a2c, 0x389cfdac, 0x3a857d1f, 0x3b9d032c,
+0x3bf35ea2, 0x3bcfaeba, 0x3b3216dc, 0xb9a1714d,
+0xba821ebc, 0xb8853bbb, 0x3a6df7e9, 0x3ab5e20f,
+0x3b01ed38, 0x3b52f994, 0x3b9c93c1, 0x3bc2b16e,
+0x3bd27fbb, 0x3bd65620, 0x3bdb50c9, 0x3be2cf76,
+0x3be57745, 0x3bdee84f, 0x3bd2720d, 0x3bc5d90d,
+0x3bbb1385, 0x3bafd533, 0x3ba120ae, 0x3b8dfa1c,
+0x3b6f65b5, 0x3b422fdd, 0x3b1a5f68, 0x3af5ecc5,
+0x3ac387e8, 0x3a939162, 0x3a42e760, 0x39ccc1a6,
+0x3910fa65, 0xb6305cb2, 0xb8ca4389, 0xb95f1c3f,
+0xb9bca6fd, 0xba0191e8, 0xba189c19, 0xba25efcc,
+0xba317d31, 0xba3ec2a8, 0xba4b38a5, 0xba5409cc,
+0xba59ffa3, 0xba5fcb1b, 0xba66c3c6, 0x3e604880,
+0x3d96aed5, 0x3ca2fa6f, 0x3cb2aee6, 0x3d42b5d3,
+0x3d210ac5, 0xbc82e9f1, 0xbbfe1779, 0x3d4ae878,
+0x3d097061, 0xbd2aaf1a, 0xbd3f171d, 0xbd836e21,
+0xbd007cbc, 0xbd223135, 0xbd43354e, 0xbd3aaf67,
+0xbd165120, 0xbc96fc79, 0xbba7877e, 0xbca10422,
+0xbd143110, 0xbc970ee7, 0x3bda519e, 0xbb0604f2,
+0xbc8ec706, 0xbc3b8108, 0xbb3c42b2, 0xbb0a8492,
+0x398d00a0, 0xbafc6a73, 0xbbbff054, 0xbb358206,
+0xbb104480, 0xbbdfe30e, 0xbb8694b3, 0xb9c3e0e9,
+0xbb62e522, 0xbba17a0a, 0xbb831862, 0xbbd39891,
+0xbbcc4c9b, 0xbb347d3d, 0xbb29e956, 0xbb5d1ec3,
+0xbadf9cc9, 0xba3c6e13, 0x36f83653, 0x3aa2f795,
+0x3ac517bb, 0x3adb9b2b, 0x3b3f3c5e, 0x3b6e2e5f,
+0x3b7f2772, 0x3b7b1700, 0x3b78d2fb, 0x3b92a3dd,
+0x3b9e4a9a, 0x3b698e9a, 0x3b32bf7b, 0x3b2344fe,
+0x3b0a07e8, 0x3b02c48e, 0x3b066b13, 0x3ebd386d,
+0x3d686a4f, 0xbcc2538d, 0xbd36e8ae, 0xbb52f4f3,
+0x3cf3de6d, 0xbc899517, 0x3cea40ae, 0x3dd89d9e,
+0x3c84ecef, 0xbdf0f1b1, 0xbd9bb232, 0x3c97e24a,
+0x3d044589, 0x3c8299d7, 0x3c3e14db, 0xbc20fe72,
+0xbcbc5ad4, 0xbc89b63f, 0xbb87c2b0, 0xbbadac3f,
+0xbc8b6221, 0xbcbe74e4, 0xbd20d4f7, 0xbd4404a5,
+0xbd3acc23, 0xbcb03c01, 0xbc32ce7c, 0xbcd90b26,
+0xbccccd92, 0xbc3904c9, 0xbbd748f0, 0xbb1333b6,
+0x3ad39d1d, 0xbc2aea39, 0xbc9441b1, 0xbc5ee070,
+0xbc4e292d, 0xbc764e50, 0xbc37e78d, 0xbc31d11d,
+0xbc529c7e, 0xbc269a5e, 0xbb9db1e9, 0xba8f7e82,
+0x3a922c70, 0xba914588, 0xbb366140, 0xba59f864,
+0x3a824669, 0x3a0803c8, 0x3a19fdc1, 0xba115ee6,
+0xbaa392b8, 0xb833d99f, 0x3a84c8d0, 0x39b31b0b,
+0x39a1a8f6, 0x3994f994, 0x3a97c506, 0x3b0444a8,
+0x3abcc742, 0x38583a4a, 0x3a4ef0dd, 0x3e6f93ab,
+0x3e46ab34, 0x3dfbcbaa, 0x3dad593a, 0x3dac1d0d,
+0x3d781168, 0xbbdd2393, 0xbcd7c0fe, 0x3ce4881c,
+0x3d7819e0, 0x3c55a601, 0xbcfdb70a, 0xbc381df7,
+0x3caa746f, 0x3c3ac66e, 0xbbdfe435, 0xbbf77b42,
+0xbbf1b5e6, 0xbc78a1ae, 0xbc441ed8, 0xbaa4ef9e,
+0x3b4b590d, 0x3a090571, 0xbab413a1, 0xbbae56cf,
+0xbbdd4b34, 0xba670e40, 0x3bc81ffa, 0x3b32f03d,
+0xbbb450ee, 0xbc0267cd, 0xbb39fa54, 0x3af1bbe1,
+0x3b4e656e, 0x3b1d2b4d, 0x3ace2d89, 0xb8a51531,
+0xba6b5404, 0xba18dbff, 0xba240961, 0xbb1122bb,
+0xbb3ba0ed, 0xbb2449fc, 0xbb406e26, 0xbb917930,
+0xbba61aef, 0xbb9bee0e, 0xbb811cb7, 0xbb71c651,
+0xbb869b3d, 0xbb8eb223, 0xbb6beb8e, 0xbb50b300,
+0xbb460699, 0xbb1e44ae, 0xbb10a265, 0xbb60cac6,
+0xbb855116, 0xbb580451, 0xbb1865af, 0xbb110163,
+0xbb12416e, 0xbb2bca55, 0xbb4e41a6, 0x3efcc7cc,
+0xbc24a7aa, 0xbb44d280, 0x3bee76a5, 0x3c9cb6cf,
+0x3cfbd750, 0x3d25c1a0, 0x3d40e9a5, 0x3d4cf125,
+0x3d4a1bdf, 0x3d3b1547, 0x3d24359e, 0x3d0a865d,
+0x3ce57750, 0x3cc0ae36, 0x3caa394b, 0x3ca1dcee,
+0x3ca41d3e, 0x3cab605e, 0x3cb165d5, 0x3cb0bd2b,
+0x3ca5ecd7, 0x3c9011a8, 0x3c61c086, 0x3c182b95,
+0x3b9a0c10, 0x3a1df67e, 0xbb274404, 0xbb9424fc,
+0xbbade12d, 0xbba82bfc, 0xbb8f4eb8, 0xbb62bdf7,
+0xbb360021, 0xbb298faa, 0xbb439964, 0xbb7f27f4,
+0xbba7439d, 0xbbcfb3a6, 0xbbefd1f0, 0xbc00624f,
+0xbbff5412, 0xbbec5a82, 0xbbcc36f2, 0xbba57c67,
+0xbb7e7c7d, 0xbb3ed212, 0xbb131421, 0xbaf91309,
+0xbaee1921, 0xbaf564af, 0xbafc5ddb, 0xbaf2a4f3,
+0xbace078e, 0xba8c9475, 0xb9d1e6ac, 0x39b86192,
+0x3a8c565e, 0x3ad89ba8, 0x3b04ca9e, 0x3b0e0f3f,
+0x3b09bd0a, 0x3af7fe28, 0x3ad4aa00, 0x3ebfc5a6,
+0xbe26dc76, 0xbb95c075, 0x3db115ec, 0x3dc02966,
+0x3d8b5242, 0x3d6e552c, 0x3d898b9c, 0x3d8d6ca4,
+0x3d5aabd6, 0x3d1ded88, 0x3d367045, 0x3d85ed08,
+0x3d9c8ba7, 0x3d83444f, 0x3d2495bb, 0x3cd278ea,
+0x3cdd359a, 0x3d0631b1, 0x3cfdc2ad, 0x3cb8ea3f,
+0x3c885c32, 0x3c8da74e, 0x3ca221b1, 0x3c98d5f0,
+0x3c731d87, 0x3c562e8a, 0x3c7154e7, 0x3c863423,
+0x3c7692ae, 0x3c469b94, 0x3c333d22, 0x3c470414,
+0x3c597fb0, 0x3c4c47fb, 0x3c30e255, 0x3c28e430,
+0x3c35a8a8, 0x3c3b22c6, 0x3c2ac63f, 0x3c16857b,
+0x3c14b162, 0x3c20be3e, 0x3c240fe7, 0x3c166cb3,
+0x3c077583, 0x3c0706c5, 0x3c103e29, 0x3c12dfe7,
+0x3c0a7e8c, 0x3c02849e, 0x3c046e20, 0x3c0b3bc8,
+0x3c0c50ae, 0x3c069e98, 0x3c0298b8, 0x3c0530a7,
+0x3c098cc2, 0x3c0923ee, 0x3c04ff5c, 0x3c031e00,
+0x3c054468, 0x3c0706a4, 0x3c04ea5c, 0x3ef9a0aa,
+0xbcfc06ef, 0xbd17e1ab, 0xbcb6e3c1, 0x3ca857ba,
+0x3d95806c, 0x3dd71e34, 0x3dcd913a, 0x3d8c416e,
+0x3d0aba33, 0x3c7609b7, 0x3c55f6fd, 0x3c8f99c6,
+0x3c9f8946, 0x3c9397ea, 0x3c882358, 0x3c86da4d,
+0x3c759b53, 0x3c20328e, 0x3af5fb68, 0xbbac3f3b,
+0xbc193535, 0xbc351289, 0xbc4aa328, 0xbc69cd44,
+0xbc848792, 0xbc8df080, 0xbc9302aa, 0xbc9b1a16,
+0xbca9dc98, 0xbcbb53d9, 0xbcc8998f, 0xbcce64dc,
+0xbcce9367, 0xbccccbac, 0xbccb054e, 0xbcc914b4,
+0xbcc64960, 0xbcc2b567, 0xbcbf1eb6, 0xbcbc33e2,
+0xbcb9e5ea, 0xbcb75980, 0xbcb37d99, 0xbcadeb82,
+0xbca75377, 0xbca0f463, 0xbc9b8d52, 0xbc96db29,
+0xbc9225dc, 0xbc8d2d38, 0xbc886279, 0xbc844160,
+0xbc80a5be, 0xbc79cf83, 0xbc71196a, 0xbc676ffd,
+0xbc5dddf1, 0xbc551d9a, 0xbc4d1b5d, 0xbc4557a2,
+0xbc3d81fc, 0xbc35ac9e, 0xbc2e1353, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x3a11d6c1, 0x3a09ada5,
+0xbc8e190d, 0x3c381553, 0xbc887802, 0x3cbb6d46,
+0xbd0ea8e9, 0x3d91b96f, 0x3e9e68ab, 0xbd11011d,
+0x3c5ea01c, 0xbbb58da0, 0x3a8fd1d4, 0xbac39592,
+0xbc4fb525, 0x3b1576df, 0x3ad52b79, 0xbba3f8ff,
+0xbc5f6d92, 0x3c5d1a84, 0xbcb61452, 0x3d13e9b8,
+0xbd88c8e4, 0x3e57ec68, 0x3e57ec68, 0xbd88c8e4,
+0x3d13e9b8, 0xbcb61452, 0x3c5d1a84, 0xbc5f6d92,
+0xbba3f8ff, 0x3ad52b79, 0x3b1576df, 0xbc4fb525,
+0xbac39592, 0x3a8fd1d4, 0xbbb58da0, 0x3c5ea01c,
+0xbd11011d, 0x3e9e68ab, 0x3d91b96f, 0xbd0ea8e9,
+0x3cbb6d46, 0xbc887802, 0x3c381553, 0xbc8e190d,
+0x3a09ada5, 0x3a11d6c1, 0x3f800000, 0x3f7fff62,
+0x3f7ffd88, 0x3f7ffa73, 0x3f7ff622, 0x3f7ff094,
+0x3f7fe9cc, 0x3f7fe1c7, 0x3f7fd888, 0x3f7fce0c,
+0x3f7fc256, 0x3f7fb564, 0x3f7fa737, 0x3f7f97cf,
+0x3f7f872c, 0x3f7f754e, 0x3f7f6237, 0x3f7f4de4,
+0x3f7f3858, 0x3f7f2192, 0x3f7f0992, 0x3f7ef058,
+0x3f7ed5e6, 0x3f7eba3a, 0x3f7e9d56, 0x3f7e7f39,
+0x3f7e5fe5, 0x3f7e3f58, 0x3f7e1d94, 0x3f7dfa99,
+0x3f7dd667, 0x3f7db0fe, 0x3f7d8a5f, 0x3f7d628b,
+0x3f7d3981, 0x3f7d0f42, 0x3f7ce3cf, 0x3f7cb727,
+0x3f7c894c, 0x3f7c5a3d, 0x3f7c29fc, 0x3f7bf888,
+0x3f7bc5e3, 0x3f7b920c, 0x3f7b5d04, 0x3f7b26cb,
+0x3f7aef63, 0x3f7ab6cc, 0x3f7a7d05, 0x3f7a4211,
+0x3f7a05ef, 0x3f79c89f, 0x3f798a24, 0x3f794a7c,
+0x3f7909a9, 0x3f78c7ac, 0x3f788484, 0x3f784033,
+0x3f77faba, 0x3f77b418, 0x3f776c4f, 0x3f77235f,
+0x3f76d94a, 0x3f768e0f, 0x3f7641af, 0x3f75f42c,
+0x3f75a586, 0x3f7555bd, 0x3f7504d3, 0x3f74b2c9,
+0x3f745f9e, 0x3f740b54, 0x3f73b5ec, 0x3f735f66,
+0x3f7307c4, 0x3f72af06, 0x3f72552d, 0x3f71fa39,
+0x3f719e2d, 0x3f714108, 0x3f70e2cc, 0x3f708379,
+0x3f702311, 0x3f6fc194, 0x3f6f5f03, 0x3f6efb5f,
+0x3f6e96aa, 0x3f6e30e3, 0x3f6dca0d, 0x3f6d6228,
+0x3f6cf935, 0x3f6c8f35, 0x3f6c2429, 0x3f6bb813,
+0x3f6b4af2, 0x3f6adcc9, 0x3f6a6d99, 0x3f69fd61,
+0x3f698c24, 0x3f6919e3, 0x3f68a69f, 0x3f683258,
+0x3f67bd10, 0x3f6746c8, 0x3f66cf81, 0x3f66573d,
+0x3f65ddfc, 0x3f6563c0, 0x3f64e889, 0x3f646c5a,
+0x3f63ef33, 0x3f637115, 0x3f62f202, 0x3f6271fa,
+0x3f61f100, 0x3f616f14, 0x3f60ec38, 0x3f60686d,
+0x3f5fe3b4, 0x3f5f5e0e, 0x3f5ed77d, 0x3f5e5001,
+0x3f5dc79d, 0x3f5d3e52, 0x3f5cb421, 0x3f5c290b,
+0x3f5b9d11, 0x3f5b1036, 0x3f5a827a, 0x3f59f3de,
+0x3f596465, 0x3f58d40f, 0x3f5842dd, 0x3f57b0d2,
+0x3f571def, 0x3f568a35, 0x3f55f5a5, 0x3f556041,
+0x3f54ca0a, 0x3f543302, 0x3f539b2b, 0x3f530285,
+0x3f526912, 0x3f51ced4, 0x3f5133cd, 0x3f5097fc,
+0x3f4ffb65, 0x3f4f5e09, 0x3f4ebfe9, 0x3f4e2106,
+0x3f4d8163, 0x3f4ce100, 0x3f4c3fe0, 0x3f4b9e04,
+0x3f4afb6d, 0x3f4a581d, 0x3f49b415, 0x3f490f58,
+0x3f4869e6, 0x3f47c3c2, 0x3f471ced, 0x3f467568,
+0x3f45cd36, 0x3f452457, 0x3f447acd, 0x3f43d09b,
+0x3f4325c1, 0x3f427a42, 0x3f41ce1e, 0x3f412159,
+0x3f4073f2, 0x3f3fc5ed, 0x3f3f174a, 0x3f3e680b,
+0x3f3db833, 0x3f3d07c2, 0x3f3c56ba, 0x3f3ba51e,
+0x3f3af2ef, 0x3f3a402e, 0x3f398cdd, 0x3f38d8ff,
+0x3f382494, 0x3f376f9e, 0x3f36ba20, 0x3f36041b,
+0x3f354d90, 0x3f349682, 0x3f33def3, 0x3f3326e3,
+0x3f326e55, 0x3f31b54a, 0x3f30fbc5, 0x3f3041c7,
+0x3f2f8752, 0x3f2ecc68, 0x3f2e110a, 0x3f2d553b,
+0x3f2c98fc, 0x3f2bdc4e, 0x3f2b1f35, 0x3f2a61b1,
+0x3f29a3c5, 0x3f28e571, 0x3f2826b9, 0x3f27679e,
+0x3f26a822, 0x3f25e846, 0x3f25280c, 0x3f246777,
+0x3f23a688, 0x3f22e542, 0x3f2223a5, 0x3f2161b4,
+0x3f209f70, 0x3f1fdcdc, 0x3f1f19f9, 0x3f1e56ca,
+0x3f1d9350, 0x3f1ccf8d, 0x3f1c0b82, 0x3f1b4733,
+0x3f1a82a0, 0x3f19bdcc, 0x3f18f8b8, 0x3f183367,
+0x3f176dda, 0x3f16a813, 0x3f15e214, 0x3f151be0,
+0x3f145577, 0x3f138edc, 0x3f12c810, 0x3f120117,
+0x3f1139f1, 0x3f1072a0, 0x3f0fab27, 0x3f0ee387,
+0x3f0e1bc3, 0x3f0d53dc, 0x3f0c8bd3, 0x3f0bc3ac,
+0x3f0afb68, 0x3f0a3309, 0x3f096a90, 0x3f08a201,
+0x3f07d95c, 0x3f0710a3, 0x3f0647d9, 0x3f057f00,
+0x3f04b619, 0x3f03ed27, 0x3f03242b, 0x3f025b27,
+0x3f01921d, 0x3f00c910, 0x3f000000, 0x3efe6de1,
+0x3efcdbc6, 0x3efb49b2, 0x3ef9b7ab, 0x3ef825b2,
+0x3ef693cd, 0x3ef50200, 0x3ef3704d, 0x3ef1deb9,
+0x3ef04d49, 0x3eeebbff, 0x3eed2adf, 0x3eeb99ef,
+0x3eea0930, 0x3ee878a8, 0x3ee6e859, 0x3ee55849,
+0x3ee3c87a, 0x3ee238f1, 0x3ee0a9b2, 0x3edf1abf,
+0x3edd8c1e, 0x3edbfdd2, 0x3eda6fdf, 0x3ed8e249,
+0x3ed75513, 0x3ed5c841, 0x3ed43bd7, 0x3ed2afda,
+0x3ed1244c, 0x3ecf9932, 0x3ece0e90, 0x3ecc8468,
+0x3ecafac0, 0x3ec9719a, 0x3ec7e8fb, 0x3ec660e7,
+0x3ec4d960, 0x3ec3526c, 0x3ec1cc0d, 0x3ec04648,
+0x3ebec120, 0x3ebd3c99, 0x3ebbb8b6, 0x3eba357d,
+0x3eb8b2ef, 0x3eb73111, 0x3eb5afe7, 0x3eb42f75,
+0x3eb2afbd, 0x3eb130c4, 0x3eafb28e, 0x3eae351d,
+0x3eacb877, 0x3eab3c9e, 0x3ea9c196, 0x3ea84763,
+0x3ea6ce09, 0x3ea5558a, 0x3ea3ddeb, 0x3ea26730,
+0x3ea0f15b, 0x3e9f7c71, 0x3e9e0875, 0x3e9c956b,
+0x3e9b2356, 0x3e99b23a, 0x3e98421b, 0x3e96d2fb,
+0x3e9564df, 0x3e93f7ca, 0x3e928bc0, 0x3e9120c3,
+0x3e8fb6d9, 0x3e8e4e03, 0x3e8ce646, 0x3e8b7fa4,
+0x3e8a1a23, 0x3e88b5c4, 0x3e87528b, 0x3e85f07c,
+0x3e848f9b, 0x3e832fea, 0x3e81d16d, 0x3e807427,
+0x3e7e3038, 0x3e7b7a9e, 0x3e78c786, 0x3e7616f9,
+0x3e7368fb, 0x3e70bd94, 0x3e6e14cb, 0x3e6b6ea5,
+0x3e68cb2a, 0x3e662a5f, 0x3e638c4c, 0x3e60f0f7,
+0x3e5e5866, 0x3e5bc2a0, 0x3e592fab, 0x3e569f8e,
+0x3e54124e, 0x3e5187f2, 0x3e4f0080, 0x3e4c7bff,
+0x3e49fa75, 0x3e477be8, 0x3e45005d, 0x3e4287dc,
+0x3e40126b, 0x3e3da00f, 0x3e3b30ce, 0x3e38c4ae,
+0x3e365bb6, 0x3e33f5ec, 0x3e319354, 0x3e2f33f6,
+0x3e2cd7d7, 0x3e2a7efc, 0x3e28296d, 0x3e25d72d,
+0x3e238844, 0x3e213cb7, 0x3e1ef48b, 0x3e1cafc6,
+0x3e1a6e6e, 0x3e183088, 0x3e15f61a, 0x3e13bf29,
+0x3e118bbb, 0x3e0f5bd5, 0x3e0d2f7d, 0x3e0b06b7,
+0x3e08e18a, 0x3e06bffb, 0x3e04a20e, 0x3e0287c9,
+0x3e007132, 0x3dfcbc9a, 0x3df89e3e, 0x3df4875d,
+0x3df077fe, 0x3dec702d, 0x3de86ff3, 0x3de4775a,
+0x3de0866c, 0x3ddc9d32, 0x3dd8bbb7, 0x3dd4e203,
+0x3dd11021, 0x3dcd461a, 0x3dc983f7, 0x3dc5c9c1,
+0x3dc21782, 0x3dbe6d43, 0x3dbacb0c, 0x3db730e7,
+0x3db39edd, 0x3db014f6, 0x3dac933b, 0x3da919b5,
+0x3da5a86c, 0x3da23f69, 0x3d9edeb5, 0x3d9b8657,
+0x3d983658, 0x3d94eec0, 0x3d91af97, 0x3d8e78e6,
+0x3d8b4ab3, 0x3d882507, 0x3d8507ea, 0x3d81f364,
+0x3d7dcef6, 0x3d77c870, 0x3d71d344, 0x3d6bef80,
+0x3d661d33, 0x3d605c6b, 0x3d5aad38, 0x3d550fa6,
+0x3d4f83c3, 0x3d4a099e, 0x3d44a143, 0x3d3f4ac0,
+0x3d3a0623, 0x3d34d378, 0x3d2fb2cc, 0x3d2aa42b,
+0x3d25a7a3, 0x3d20bd3f, 0x3d1be50c, 0x3d171f16,
+0x3d126b67, 0x3d0dca0d, 0x3d093b12, 0x3d04be82,
+0x3d005467, 0x3cf7f99b, 0x3cef6f7e, 0x3ce70a8c,
+0x3cdecada, 0x3cd6b07e, 0x3ccebb8a, 0x3cc6ec12,
+0x3cbf422a, 0x3cb7bde5, 0x3cb05f55, 0x3ca9268c,
+0x3ca2139c, 0x3c9b2696, 0x3c945f8c, 0x3c8dbe8f,
+0x3c8743ae, 0x3c80eefa, 0x3c758104, 0x3c6970ac,
+0x3c5dad09, 0x3c523637, 0x3c470c54, 0x3c3c2f7a,
+0x3c319fc5, 0x3c275d4f, 0x3c1d6830, 0x3c13c082,
+0x3c0a665c, 0x3c0159d6, 0x3bf1360b, 0x3be05401,
+0x3bd00db6, 0x3bc06355, 0x3bb15502, 0x3ba2e2e4,
+0x3b950d1d, 0x3b87d3d0, 0x3b766e3c, 0x3b5e6e4c,
+0x3b47a80a, 0x3b321baf, 0x3b1dc971, 0x3b0ab180,
+0x3af1a81a, 0x3ad06287, 0x3ab19298, 0x3a95389a,
+0x3a76a9a6, 0x3a47cf07, 0x3a1de1c8, 0x39f1c4a4,
+0x39b1a200, 0x3976b880, 0x391de7e2, 0x38b1a5da,
+0x381de96a, 0x371de9f3, 0x0, 0x3f800000,
+0x3f7fffb1, 0x3f7ffec4, 0x3f7ffd39, 0x3f7ffb11,
+0x3f7ff84a, 0x3f7ff4e6, 0x3f7ff0e3, 0x3f7fec43,
+0x3f7fe705, 0x3f7fe129, 0x3f7fdaaf, 0x3f7fd398,
+0x3f7fcbe2, 0x3f7fc38f, 0x3f7fba9e, 0x3f7fb10f,
+0x3f7fa6e3, 0x3f7f9c18, 0x3f7f90b1, 0x3f7f84ab,
+0x3f7f7808, 0x3f7f6ac7, 0x3f7f5ce9, 0x3f7f4e6d,
+0x3f7f3f54, 0x3f7f2f9d, 0x3f7f1f49, 0x3f7f0e58,
+0x3f7efcc9, 0x3f7eea9d, 0x3f7ed7d4, 0x3f7ec46d,
+0x3f7eb069, 0x3f7e9bc9, 0x3f7e868b, 0x3f7e70b0,
+0x3f7e5a38, 0x3f7e4323, 0x3f7e2b72, 0x3f7e1324,
+0x3f7dfa38, 0x3f7de0b1, 0x3f7dc68c, 0x3f7dabcc,
+0x3f7d906e, 0x3f7d7474, 0x3f7d57de, 0x3f7d3aac,
+0x3f7d1cdd, 0x3f7cfe73, 0x3f7cdf6c, 0x3f7cbfc9,
+0x3f7c9f8a, 0x3f7c7eb0, 0x3f7c5d3a, 0x3f7c3b28,
+0x3f7c187a, 0x3f7bf531, 0x3f7bd14d, 0x3f7baccd,
+0x3f7b87b2, 0x3f7b61fc, 0x3f7b3bab, 0x3f7b14be,
+0x3f7aed37, 0x3f7ac516, 0x3f7a9c59, 0x3f7a7302,
+0x3f7a4910, 0x3f7a1e84, 0x3f79f35e, 0x3f79c79d,
+0x3f799b43, 0x3f796e4e, 0x3f7940c0, 0x3f791298,
+0x3f78e3d6, 0x3f78b47b, 0x3f788486, 0x3f7853f8,
+0x3f7822d1, 0x3f77f110, 0x3f77beb7, 0x3f778bc5,
+0x3f77583a, 0x3f772417, 0x3f76ef5b, 0x3f76ba07,
+0x3f76841b, 0x3f764d97, 0x3f76167a, 0x3f75dec6,
+0x3f75a67b, 0x3f756d97, 0x3f75341d, 0x3f74fa0b,
+0x3f74bf62, 0x3f748422, 0x3f74484b, 0x3f740bdd,
+0x3f73ced9, 0x3f73913f, 0x3f73530e, 0x3f731447,
+0x3f72d4eb, 0x3f7294f8, 0x3f725470, 0x3f721352,
+0x3f71d19f, 0x3f718f57, 0x3f714c7a, 0x3f710908,
+0x3f70c501, 0x3f708066, 0x3f703b37, 0x3f6ff573,
+0x3f6faf1b, 0x3f6f6830, 0x3f6f20b0, 0x3f6ed89e,
+0x3f6e8ff8, 0x3f6e46be, 0x3f6dfcf2, 0x3f6db293,
+0x3f6d67a1, 0x3f6d1c1d, 0x3f6cd007, 0x3f6c835e,
+0x3f6c3624, 0x3f6be858, 0x3f6b99fb, 0x3f6b4b0c,
+0x3f6afb8c, 0x3f6aab7b, 0x3f6a5ad9, 0x3f6a09a7,
+0x3f69b7e4, 0x3f696591, 0x3f6912ae, 0x3f68bf3c,
+0x3f686b39, 0x3f6816a8, 0x3f67c187, 0x3f676bd8,
+0x3f671599, 0x3f66becc, 0x3f666771, 0x3f660f88,
+0x3f65b710, 0x3f655e0b, 0x3f650479, 0x3f64aa59,
+0x3f644fac, 0x3f63f473, 0x3f6398ac, 0x3f633c5a,
+0x3f62df7b, 0x3f628210, 0x3f62241a, 0x3f61c598,
+0x3f61668a, 0x3f6106f2, 0x3f60a6cf, 0x3f604621,
+0x3f5fe4e9, 0x3f5f8327, 0x3f5f20db, 0x3f5ebe05,
+0x3f5e5aa6, 0x3f5df6be, 0x3f5d924d, 0x3f5d2d53,
+0x3f5cc7d1, 0x3f5c61c7, 0x3f5bfb34, 0x3f5b941a,
+0x3f5b2c79, 0x3f5ac450, 0x3f5a5ba0, 0x3f59f26a,
+0x3f5988ad, 0x3f591e6a, 0x3f58b3a1, 0x3f584853,
+0x3f57dc7f, 0x3f577026, 0x3f570348, 0x3f5695e5,
+0x3f5627fe, 0x3f55b993, 0x3f554aa4, 0x3f54db31,
+0x3f546b3b, 0x3f53fac3, 0x3f5389c7, 0x3f531849,
+0x3f52a649, 0x3f5233c6, 0x3f51c0c2, 0x3f514d3d,
+0x3f50d937, 0x3f5064af, 0x3f4fefa8, 0x3f4f7a1f,
+0x3f4f0417, 0x3f4e8d90, 0x3f4e1689, 0x3f4d9f02,
+0x3f4d26fd, 0x3f4cae79, 0x3f4c3578, 0x3f4bbbf8,
+0x3f4b41fa, 0x3f4ac77f, 0x3f4a4c87, 0x3f49d112,
+0x3f495521, 0x3f48d8b3, 0x3f485bca, 0x3f47de65,
+0x3f476085, 0x3f46e22a, 0x3f466354, 0x3f45e403,
+0x3f456439, 0x3f44e3f5, 0x3f446337, 0x3f43e200,
+0x3f436051, 0x3f42de29, 0x3f425b89, 0x3f41d870,
+0x3f4154e1, 0x3f40d0da, 0x3f404c5c, 0x3f3fc767,
+0x3f3f41fc, 0x3f3ebc1b, 0x3f3e35c5, 0x3f3daef9,
+0x3f3d27b8, 0x3f3ca003, 0x3f3c17d9, 0x3f3b8f3b,
+0x3f3b0629, 0x3f3a7ca4, 0x3f39f2ac, 0x3f396842,
+0x3f38dd65, 0x3f385216, 0x3f37c655, 0x3f373a23,
+0x3f36ad7f, 0x3f36206c, 0x3f3592e7, 0x3f3504f3,
+0x3f34768f, 0x3f33e7bc, 0x3f33587a, 0x3f32c8c9,
+0x3f3238aa, 0x3f31a81d, 0x3f311722, 0x3f3085bb,
+0x3f2ff3e6, 0x3f2f61a5, 0x3f2ecef7, 0x3f2e3bde,
+0x3f2da859, 0x3f2d1469, 0x3f2c800f, 0x3f2beb4a,
+0x3f2b561b, 0x3f2ac082, 0x3f2a2a80, 0x3f299415,
+0x3f28fd41, 0x3f286605, 0x3f27ce61, 0x3f273656,
+0x3f269de3, 0x3f26050a, 0x3f256bcb, 0x3f24d225,
+0x3f24381a, 0x3f239da9, 0x3f2302d3, 0x3f226799,
+0x3f21cbfb, 0x3f212ff9, 0x3f209393, 0x3f1ff6cb,
+0x3f1f599f, 0x3f1ebc12, 0x3f1e1e22, 0x3f1d7fd1,
+0x3f1ce11f, 0x3f1c420c, 0x3f1ba299, 0x3f1b02c6,
+0x3f1a6293, 0x3f19c200, 0x3f19210f, 0x3f187fc0,
+0x3f17de12, 0x3f173c07, 0x3f16999f, 0x3f15f6d9,
+0x3f1553b7, 0x3f14b039, 0x3f140c5f, 0x3f13682a,
+0x3f12c39a, 0x3f121eb0, 0x3f11796b, 0x3f10d3cd,
+0x3f102dd5, 0x3f0f8784, 0x3f0ee0db, 0x3f0e39da,
+0x3f0d9281, 0x3f0cead0, 0x3f0c42c9, 0x3f0b9a6b,
+0x3f0af1b7, 0x3f0a48ad, 0x3f099f4e, 0x3f08f59b,
+0x3f084b92, 0x3f07a136, 0x3f06f686, 0x3f064b82,
+0x3f05a02c, 0x3f04f484, 0x3f044889, 0x3f039c3d,
+0x3f02ef9f, 0x3f0242b1, 0x3f019573, 0x3f00e7e4,
+0x3f003a06, 0x3eff17b2, 0x3efdbabb, 0x3efc5d27,
+0x3efafef7, 0x3ef9a02d, 0x3ef840c8, 0x3ef6e0cb,
+0x3ef58035, 0x3ef41f07, 0x3ef2bd43, 0x3ef15aea,
+0x3eeff7fb, 0x3eee9479, 0x3eed3063, 0x3eebcbbb,
+0x3eea6681, 0x3ee900b7, 0x3ee79a5d, 0x3ee63375,
+0x3ee4cbfe, 0x3ee363fa, 0x3ee1fb6a, 0x3ee0924f,
+0x3edf28a9, 0x3eddbe79, 0x3edc53c1, 0x3edae880,
+0x3ed97cb9, 0x3ed8106b, 0x3ed6a399, 0x3ed53641,
+0x3ed3c867, 0x3ed25a09, 0x3ed0eb2a, 0x3ecf7bca,
+0x3ece0bea, 0x3ecc9b8b, 0x3ecb2aae, 0x3ec9b953,
+0x3ec8477c, 0x3ec6d529, 0x3ec5625c, 0x3ec3ef15,
+0x3ec27b55, 0x3ec1071e, 0x3ebf926f, 0x3ebe1d4a,
+0x3ebca7af, 0x3ebb31a0, 0x3eb9bb1e, 0x3eb8442a,
+0x3eb6ccc3, 0x3eb554ec, 0x3eb3dca5, 0x3eb263ef,
+0x3eb0eacb, 0x3eaf713a, 0x3eadf73c, 0x3eac7cd4,
+0x3eab0201, 0x3ea986c4, 0x3ea80b1f, 0x3ea68f12,
+0x3ea5129f, 0x3ea395c5, 0x3ea21887, 0x3ea09ae5,
+0x3e9f1cdf, 0x3e9d9e78, 0x3e9c1faf, 0x3e9aa086,
+0x3e9920fe, 0x3e97a117, 0x3e9620d2, 0x3e94a031,
+0x3e931f35, 0x3e919ddd, 0x3e901c2c, 0x3e8e9a22,
+0x3e8d17c0, 0x3e8b9507, 0x3e8a11f7, 0x3e888e93,
+0x3e870ada, 0x3e8586ce, 0x3e840270, 0x3e827dc0,
+0x3e80f8c0, 0x3e7ee6e1, 0x3e7bdba4, 0x3e78cfcc,
+0x3e75c35a, 0x3e72b651, 0x3e6fa8b2, 0x3e6c9a7f,
+0x3e698bba, 0x3e667c66, 0x3e636c83, 0x3e605c13,
+0x3e5d4b1a, 0x3e5a3997, 0x3e57278f, 0x3e541501,
+0x3e5101f1, 0x3e4dee60, 0x3e4ada4f, 0x3e47c5c2,
+0x3e44b0b9, 0x3e419b37, 0x3e3e853e, 0x3e3b6ecf,
+0x3e3857ec, 0x3e354098, 0x3e3228d4, 0x3e2f10a2,
+0x3e2bf804, 0x3e28defc, 0x3e25c58c, 0x3e22abb6,
+0x3e1f917b, 0x3e1c76de, 0x3e195be0, 0x3e164083,
+0x3e1324ca, 0x3e1008b7, 0x3e0cec4a, 0x3e09cf86,
+0x3e06b26e, 0x3e039502, 0x3e007745, 0x3dfab273,
+0x3df475c0, 0x3dee3876, 0x3de7fa9a, 0x3de1bc2e,
+0x3ddb7d37, 0x3dd53db9, 0x3dcefdb7, 0x3dc8bd36,
+0x3dc27c39, 0x3dbc3ac3, 0x3db5f8da, 0x3dafb680,
+0x3da973ba, 0x3da3308c, 0x3d9cecf9, 0x3d96a905,
+0x3d9064b4, 0x3d8a200a, 0x3d83db0a, 0x3d7b2b74,
+0x3d6ea038, 0x3d621469, 0x3d55880e, 0x3d48fb30,
+0x3d3c6dd5, 0x3d2fe007, 0x3d2351cc, 0x3d16c32c,
+0x3d0a342f, 0x3cfb49ba, 0x3ce22a7a, 0x3cc90ab0,
+0x3cafea69, 0x3c96c9b6, 0x3c7b514b, 0x3c490e90,
+0x3c16cb58, 0x3bc90f88, 0x3b490fc6, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x0, 0x0, 0x0, 0x0,
+0x4c46584d, 0xefbeadde, 0x0,
+};
+/*------ END OF FILE ------*/
diff --git a/sound/pci/hda/patch_ca0132/patch_ca0132.c b/sound/pci/hda/patch_ca0132/patch_ca0132.c
new file mode 100644
index 0000000..c59ff6c
--- /dev/null
+++ b/sound/pci/hda/patch_ca0132/patch_ca0132.c
@@ -0,0 +1,4489 @@
+/*
+ * HD audio interface patch for Creative Sound Core3D chip
+ *
+ * Copyright (c) 2011, Creative Technology Ltd.
+ *
+ * Based on patch_ca0110.c
+ * Copyright (c) 2008 Takashi Iwai <tiwai(a)suse.de>
+ *
+ * This driver 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 driver 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <linux/init.h>
+#include <linux/delay.h>
+#include <linux/slab.h>
+#include <linux/pci.h>
+#include <linux/module.h>
+#include <sound/core.h>
+#include <sound/tlv.h>
+#include "../hda_codec.h"
+#include "../hda_local.h"
+
+#include "ca0132_regs.h"
+#include "dsp_os.h"
+
+#include "speakereq_x.h"
+#include "speakereq_y.h"
+
+/* Enable this to see more debug messages. */
+/*#define ENABLE_CA0132_DEBUG*/
+/* Enable this to manual select HP/Speaker and AMic1/DMic. */
+#define ENABLE_MANUAL_SELECT
+/* Enable this to see controls for tuning purpose. */
+/*#define ENABLE_TUNING_CONTROLS*/
+
+#define FLOAT_ZERO 0x00000000
+#define FLOAT_ONE 0x3f800000
+#define FLOAT_TWO 0x40000000
+#define FLOAT_MINUS_5 0xc0a00000
+
+#define UNSOL_TAG_HP 0x0f
+#define UNSOL_TAG_DMIC 0x14
+#define UNSOL_TAG_AMIC1 0x15
+#define UNSOL_TAG_DSP 0x16
+
+#define SUCCEEDED(_x) (((int)(_x)) >= 0)
+#define FAILED(_x) (((int)(_x)) < 0)
+#define CT_OK (0)
+#define CT_FAIL (-1)
+
+#define MIN(x, y) (((x) < (y)) ? (x) : (y))
+#define MAX(x, y) (((x) > (y)) ? (x) : (y))
+
+#define DSP_DMA_WRITE_BUFLEN_INIT (1UL<<18)
+#define DSP_DMA_WRITE_BUFLEN_OVLY (1UL<<15)
+
+#define DMA_TRANSFER_FRAME_SIZE_NWORDS 8
+#define DMA_TRANSFER_MAX_FRAME_SIZE_NWORDS 32
+#define DMA_OVERLAY_FRAME_SIZE_NWORDS 2
+
+#define MASTERCONTROL 0x80
+#define MASTERCONTROL_ALLOC_DMA_CHAN 9
+#define MASTERCONTROL_QUERY_SPEAKER_EQ_ADDRESS 22
+
+#define WIDGET_CHIP_CTRL 0x15
+#define WIDGET_DSP_CTRL 0x16
+
+#define MEM_CONNID_MICIN1 3
+#define MEM_CONNID_MICIN2 5
+#define MEM_CONNID_MICOUT1 12
+#define MEM_CONNID_MICOUT2 14
+#define MEM_CONNID_WUH 10
+#define MEM_CONNID_DSP 16
+
+#define SCP_SET 0
+#define SCP_GET 1
+
+/* Debug message controls */
+#ifdef ENABLE_CA0132_DEBUG
+
+#define CTASSERT(x) \
+ { if (!(x)) snd_printdd(KERN_ERR "CTASSERT failed.\n"); }
+
+#define CA0132_LOG(fmt, args...) snd_printdd(fmt, ##args)
+#define CA0132_DSP_LOG(msg) snd_printdd(KERN_INFO "[%s]\n", msg)
+#define FAIL_MSG(n, s) fail_debug_out(n, s)
+
+static int fail_debug_out(int status, const char *s)
+{
+ snd_printdd(KERN_ERR "[%s]\n", s);
+ return status;
+}
+#else
+
+#define CTASSERT(x) do { } while (0)
+#define CA0132_LOG(fmt, args...) do { } while (0)
+#define CA0132_DSP_LOG(msg) do { } while (0)
+#define FAIL_MSG(n, s) fail_debug_out(n, s)
+
+static int fail_debug_out(int status, const char *s)
+{
+ return status;
+}
+#endif
+
+static char *dirstr[2] = { "Playback", "Capture" };
+
+enum {
+ SPEAKER_OUT,
+ HEADPHONE_OUT
+};
+
+enum {
+ DIGITAL_MIC,
+ LINE_MIC_IN
+};
+
+enum {
+#define VNODE_START_NID 0x80
+ VNID_HP = VNODE_START_NID, /* Headphone vnid */
+ VNID_SPK, /* Speaker vnid */
+ VNID_DMIC,
+ VNID_AMIC1,
+#ifdef ENABLE_MANUAL_SELECT
+ VNID_HP_SEL,
+ VNID_AMIC1_SEL,
+#endif
+ VNODE_END_NID,
+#define VNODES_COUNT (VNODE_END_NID - VNODE_START_NID)
+
+#define EFFECT_START_NID 0x90
+#define OUT_EFFECT_START_NID EFFECT_START_NID
+ SURROUND = OUT_EFFECT_START_NID,
+ CRYSTALIZER,
+ DIALOG_PLUS,
+ SMART_VOLUME,
+ X_BASS,
+ EQUALIZER,
+ OUT_EFFECT_END_NID,
+#define OUT_EFFECTS_COUNT (OUT_EFFECT_END_NID - OUT_EFFECT_START_NID)
+
+#define IN_EFFECT_START_NID OUT_EFFECT_END_NID
+ ECHO_CANCELLATION = IN_EFFECT_START_NID,
+ VOICE_FOCUS,
+ MIC_SVM,
+ IN_EFFECT_END_NID,
+#define IN_EFFECTS_COUNT (IN_EFFECT_END_NID - IN_EFFECT_START_NID)
+
+ VOICEFX = IN_EFFECT_END_NID,
+ PLAY_ENHANCEMENT,
+ CRYSTAL_VOICE,
+ EFFECT_END_NID
+#define EFFECTS_COUNT (EFFECT_END_NID - EFFECT_START_NID)
+};
+
+/* Effects values size*/
+#define EFFECT_VALS_MAX_COUNT 12
+
+struct ct_effect {
+ char name[44];
+ hda_nid_t nid;
+ int mid; /*effect module ID*/
+ int reqs[EFFECT_VALS_MAX_COUNT]; /*effect module request*/
+ int direct; /* 0:output; 1:input*/
+ int params; /* number of default non-on/off params */
+ /*effect default values, 1st is on/off. */
+ float def_vals[EFFECT_VALS_MAX_COUNT];
+};
+
+static struct ct_effect ca0132_effects[EFFECTS_COUNT] = {
+ { "Surround",
+ SURROUND,
+ 0x96,
+ {0, 1},
+ 0,
+ 1,
+ {1.00, 0.67}
+ },
+ { "Crystalizer",
+ CRYSTALIZER,
+ 0x96,
+ {7, 8},
+ 0,
+ 1,
+ {1.00, 0.65}
+ },
+ { "Dialog Plus",
+ DIALOG_PLUS,
+ 0x96,
+ {2, 3},
+ 0,
+ 1,
+ {0.00, 0.50}
+ },
+ { "Smart Volume",
+ SMART_VOLUME,
+ 0x96,
+ {4, 5, 6},
+ 0,
+ 2,
+ {1.00, 0.74, 0.00}
+ },
+ { "X-Bass",
+ X_BASS,
+ 0x96,
+ {24, 23, 25},
+ 0,
+ 2,
+ {1.00, 80.00, 0.50}
+ },
+ { "Equalizer",
+ EQUALIZER,
+ 0x96,
+ {9, 10, 11, 12, 13, 14,
+ 15, 16, 17, 18, 19, 20},
+ 0,
+ 11,
+ {0.00, 0.00, 0.00, 0.00, 0.00, 0.00,
+ 0.00, 0.00, 0.00, 0.00, 0.00, 0.00}
+ },
+ { "Echo Cancellation",
+ ECHO_CANCELLATION,
+ 0x95,
+ {0, 1, 2, 3},
+ 1,
+ 3,
+ {0.00, 0.72886, 0.00, 0.00}
+ },
+ { "Voice Focus",
+ VOICE_FOCUS,
+ 0x95,
+ {6, 7, 8, 9},
+ 1,
+ 3,
+ {1.00, 0.50, 30.00, 30.00}
+ },
+ { "Mic SVM",
+ MIC_SVM,
+ 0x95,
+ {44, 45},
+ 1,
+ 1,
+ {0.00, 0.74}
+ },
+ { "VoiceFX",
+ VOICEFX,
+ 0x95,
+ {10, 11, 12, 13, 14, 15, 16, 17, 18},
+ 1,
+ 8,
+ {0.00, 400.00, 1400.00, 2000.00, 1.00, 1.00, 1.00, 0.00, 0.00}
+ }
+};
+
+
+/* Tuning controls */
+#ifdef ENABLE_TUNING_CONTROLS
+
+enum {
+#define TUNING_CTL_START_NID 0xC0
+ WEDGE_ANGLE = TUNING_CTL_START_NID,
+ SVM_LEVEL,
+ EQUALIZER_BAND_0,
+ EQUALIZER_BAND_1,
+ EQUALIZER_BAND_2,
+ EQUALIZER_BAND_3,
+ EQUALIZER_BAND_4,
+ EQUALIZER_BAND_5,
+ EQUALIZER_BAND_6,
+ EQUALIZER_BAND_7,
+ EQUALIZER_BAND_8,
+ EQUALIZER_BAND_9,
+ TUNING_CTL_END_NID
+#define TUNING_CTLS_COUNT (TUNING_CTL_END_NID - TUNING_CTL_START_NID)
+};
+
+struct ct_tuning_ctl {
+ char name[44];
+ hda_nid_t parent_nid;
+ hda_nid_t nid;
+ int mid; /*effect module ID*/
+ int req; /*effect module request*/
+ int direct; /* 0:output; 1:input*/
+ float def_val;/*effect default values*/
+};
+
+static struct ct_tuning_ctl ca0132_tuning_ctls[] = {
+ { "Wedge Angle",
+ VOICE_FOCUS,
+ WEDGE_ANGLE,
+ 0x95,
+ 8,
+ 1,
+ 30.00
+ },
+ { "SVM Level",
+ MIC_SVM,
+ SVM_LEVEL,
+ 0x95,
+ 45,
+ 1,
+ 0.74
+ },
+ { "EQ Band0",
+ EQUALIZER,
+ EQUALIZER_BAND_0,
+ 0x96,
+ 11,
+ 0,
+ 0
+ },
+ { "EQ Band1",
+ EQUALIZER,
+ EQUALIZER_BAND_1,
+ 0x96,
+ 12,
+ 0,
+ 0
+ },
+ { "EQ Band2",
+ EQUALIZER,
+ EQUALIZER_BAND_2,
+ 0x96,
+ 13,
+ 0,
+ 0
+ },
+ { "EQ Band3",
+ EQUALIZER,
+ EQUALIZER_BAND_3,
+ 0x96,
+ 14,
+ 0,
+ 0
+ },
+ { "EQ Band4",
+ EQUALIZER,
+ EQUALIZER_BAND_4,
+ 0x96,
+ 15,
+ 0,
+ 0
+ },
+ { "EQ Band5",
+ EQUALIZER,
+ EQUALIZER_BAND_5,
+ 0x96,
+ 16,
+ 0,
+ 0
+ },
+ { "EQ Band6",
+ EQUALIZER,
+ EQUALIZER_BAND_6,
+ 0x96,
+ 17,
+ 0,
+ 0
+ },
+ { "EQ Band7",
+ EQUALIZER,
+ EQUALIZER_BAND_7,
+ 0x96,
+ 18,
+ 0,
+ 0
+ },
+ { "EQ Band8",
+ EQUALIZER,
+ EQUALIZER_BAND_8,
+ 0x96,
+ 19,
+ 0,
+ 0
+ },
+ { "EQ Band9",
+ EQUALIZER,
+ EQUALIZER_BAND_9,
+ 0x96,
+ 20,
+ 0,
+ 0
+ }
+};
+#endif
+
+/* Voice FX Presets */
+#define VOICEFX_MAX_PARAM_COUNT 9
+
+struct ct_voicefx {
+ char *name;
+ hda_nid_t nid;
+ int mid;
+ int reqs[VOICEFX_MAX_PARAM_COUNT]; /*effect module request*/
+};
+
+struct ct_voicefx_preset {
+ char *name; /*preset name*/
+ float vals[VOICEFX_MAX_PARAM_COUNT];
+};
+
+struct ct_voicefx ca0132_voicefx = {
+ "VoiceFX Capture Switch",
+ VOICEFX,
+ 0x95,
+ {10, 11, 12, 13, 14, 15, 16, 17, 18}
+};
+
+struct ct_voicefx_preset ca0132_voicefx_presets[] = {
+ { "Neutral",
+ { 0.000000E+000, 4.000000E+002, 1.400000E+003,
+ 2.000000E+003, 1.000000E+000, 1.000000E+000,
+ 1.000000E+000, 0.000000E+000, 0.000000E+000 }
+ },
+ { "Female2Male",
+ { 1.000000E+000, 4.000000E+002, 1.400000E+003,
+ 2.000000E+003, 6.000000E-001, 1.050000E+000,
+ 1.000000E+000, 0.000000E+000, 0.000000E+000 }
+ },
+ { "Male2Female",
+ { 1.000000E+000, 4.000000E+002, 1.400000E+003,
+ 2.220000E+003, 2.370000E+000, 9.200000E-001,
+ 1.000000E+000, 0.000000E+000, 0.000000E+000 }
+ },
+ { "ScrappyKid",
+ { 1.000000E+000, 4.000000E+002, 1.400000E+003,
+ 2.000000E+003, 3.000000E+000, 6.600000E-001,
+ 1.000000E+000, 0.000000E+000, 0.000000E+000 }
+ },
+ { "Elderly",
+ { 1.000000E+000, 7.130000E+002, 1.500000E+003,
+ 1.800000E+003, 1.400000E+000, 1.450000E+000,
+ 1.000000E+000, 1.818171E-001, 0.000000E+000 }
+ },
+ { "Org",
+ { 1.000000E+000, 4.680000E+002, 1.321000E+003,
+ 2.200000E+003, 6.500000E-001, 1.500000E+000,
+ 1.000000E+000, 0.000000E+000, 0.000000E+000 }
+ },
+ { "Elf",
+ { 1.000000E+000, 3.980000E+002, 1.395000E+003,
+ 2.451000E+003, 1.110000E+000, 9.600000E-001,
+ 1.000000E+000, 0.000000E+000, 0.000000E+000 }
+ },
+ { "Dwarf",
+ { 1.000000E+000, 2.940000E+002, 1.527000E+003,
+ 2.055000E+003, 7.700000E-001, 9.700000E-001,
+ 1.000000E+000, 0.000000E+000, 0.000000E+000 }
+ },
+ { "AlienBrute",
+ { 1.000000E+000, 3.835443E+002, 1.428496E+003,
+ 2.550000E+003, 6.500000E-001, 1.311318E+000,
+ 1.000000E+000, 3.000000E-002, 0.000000E+000 }
+ },
+ { "Robot",
+ { 1.000000E+000, 4.000000E+002, 1.400000E+003,
+ 2.000000E+003, 1.394090E+000, 1.000000E+000,
+ -8.239998E-003, 0.000000E+000, 0.000000E+000 }
+ },
+ { "Marine",
+ { 1.000000E+000, 3.880000E+002, 1.155000E+003,
+ 1.848000E+003, 8.000000E-001, 1.080000E+000,
+ 5.400000E-001, 0.000000E+000, 0.000000E+000 }
+ },
+ { "Emo",
+ { 1.000000E+000, 4.000000E+002, 1.400000E+003,
+ 2.000000E+003, 1.000000E+000, 1.000000E+000,
+ 2.000000E-001, 0.000000E+000, 0.000000E+000 }
+ },
+ { "DeepVoice",
+ { 1.000000E+000, 3.395443E+002, 1.362496E+003,
+ 2.046000E+003, 4.291186E-001, 1.201318E+000,
+ 1.000000E+000, 0.000000E+000, 0.000000E+000 }
+ },
+ { "Munchkin",
+ { 1.000000E+000, 4.000000E+002, 1.400000E+003,
+ 2.000000E+003, 6.016271E-001, 1.000000E+000,
+ 1.000000E+000, 0.000000E+000, 0.000000E+000 }
+ }
+};
+
+enum hda_cmd_vendor_io {
+ /* for DspIO node */
+ VENDOR_DSPIO_SCP_WRITE_DATA_LOW = 0x000,
+ VENDOR_DSPIO_SCP_WRITE_DATA_HIGH = 0x100,
+
+ VENDOR_DSPIO_STATUS = 0xF01,
+ VENDOR_DSPIO_SCP_POST_READ_DATA = 0x702,
+ VENDOR_DSPIO_SCP_READ_DATA = 0xF02,
+ VENDOR_DSPIO_DSP_INIT = 0x703,
+ VENDOR_DSPIO_SCP_POST_COUNT_QUERY = 0x704,
+ VENDOR_DSPIO_SCP_READ_COUNT = 0xF04,
+
+ /* for ChipIO node */
+ VENDOR_CHIPIO_ADDRESS_LOW = 0x000,
+ VENDOR_CHIPIO_ADDRESS_HIGH = 0x100,
+ VENDOR_CHIPIO_STREAM_FORMAT = 0x200,
+ VENDOR_CHIPIO_DATA_LOW = 0x300,
+ VENDOR_CHIPIO_DATA_HIGH = 0x400,
+
+ VENDOR_CHIPIO_GET_PARAMETER = 0xF00,
+ VENDOR_CHIPIO_STATUS = 0xF01,
+ VENDOR_CHIPIO_HIC_POST_READ = 0x702,
+ VENDOR_CHIPIO_HIC_READ_DATA = 0xF03,
+
+ VENDOR_CHIPIO_8051_DATA_WRITE = 0x707,
+ VENDOR_CHIPIO_8051_DATA_READ = 0xF07,
+
+ VENDOR_CHIPIO_CT_EXTENSIONS_ENABLE = 0x70A,
+ VENDOR_CHIPIO_CT_EXTENSIONS_GET = 0xF0A,
+
+ VENDOR_CHIPIO_PLL_PMU_WRITE = 0x70C,
+ VENDOR_CHIPIO_PLL_PMU_READ = 0xF0C,
+ VENDOR_CHIPIO_8051_ADDRESS_LOW = 0x70D,
+ VENDOR_CHIPIO_8051_ADDRESS_HIGH = 0x70E,
+ VENDOR_CHIPIO_FLAG_SET = 0x70F,
+ VENDOR_CHIPIO_FLAGS_GET = 0xF0F,
+ VENDOR_CHIPIO_PARAM_SET = 0x710,
+ VENDOR_CHIPIO_PARAM_GET = 0xF10,
+
+ VENDOR_CHIPIO_PORT_ALLOC_CONFIG_SET = 0x711,
+ VENDOR_CHIPIO_PORT_ALLOC_SET = 0x712,
+ VENDOR_CHIPIO_PORT_ALLOC_GET = 0xF12,
+ VENDOR_CHIPIO_PORT_FREE_SET = 0x713,
+
+ VENDOR_CHIPIO_PARAM_EX_ID_GET = 0xF17,
+ VENDOR_CHIPIO_PARAM_EX_ID_SET = 0x717,
+ VENDOR_CHIPIO_PARAM_EX_VALUE_GET = 0xF18,
+ VENDOR_CHIPIO_PARAM_EX_VALUE_SET = 0x718,
+
+ VENDOR_CHIPIO_DMIC_CTL_SET = 0x788,
+ VENDOR_CHIPIO_DMIC_CTL_GET = 0xF88,
+ VENDOR_CHIPIO_DMIC_PIN_SET = 0x789,
+ VENDOR_CHIPIO_DMIC_PIN_GET = 0xF89,
+ VENDOR_CHIPIO_DMIC_MCLK_SET = 0x78A,
+ VENDOR_CHIPIO_DMIC_MCLK_GET = 0xF8A
+};
+
+enum control_flag_id {
+ /* Connection manager stream setup is bypassed/enabled */
+ CONTROL_FLAG_C_MGR = 0,
+ /* DSP DMA is bypassed/enabled */
+ CONTROL_FLAG_DMA = 1,
+ /* 8051 'idle' mode is disabled/enabled */
+ CONTROL_FLAG_IDLE_ENABLE = 2,
+ /* Tracker for the SPDIF-in path is bypassed/enabled */
+ CONTROL_FLAG_TRACKER = 3,
+ /* DigitalOut to Spdif2Out connection is disabled/enabled */
+ CONTROL_FLAG_SPDIF2OUT = 4,
+ /* Digital Microphone is disabled/enabled */
+ CONTROL_FLAG_DMIC = 5,
+ /* ADC_B rate is 48 kHz/96 kHz */
+ CONTROL_FLAG_ADC_B_96KHZ = 6,
+ /* ADC_C rate is 48 kHz/96 kHz */
+ CONTROL_FLAG_ADC_C_96KHZ = 7,
+ /* DAC rate is 48 kHz/96 kHz (affects all DACs) */
+ CONTROL_FLAG_DAC_96KHZ = 8,
+ /* DSP rate is 48 kHz/96 kHz */
+ CONTROL_FLAG_DSP_96KHZ = 9,
+ /* SRC clock is 98 MHz/196 MHz (196 MHz forces rate to 96 KHz) */
+ CONTROL_FLAG_SRC_CLOCK_196MHZ = 10,
+ /* SRC rate is 48 kHz/96 kHz (48 kHz disabled when clock is 196 MHz) */
+ CONTROL_FLAG_SRC_RATE_96KHZ = 11,
+ /* Decode Loop (DSP->SRC->DSP) is disabled/enabled */
+ CONTROL_FLAG_DECODE_LOOP = 12,
+ /* De-emphasis filter on DAC-1 disabled/enabled */
+ CONTROL_FLAG_DAC1_DEEMPHASIS = 13,
+ /* De-emphasis filter on DAC-2 disabled/enabled */
+ CONTROL_FLAG_DAC2_DEEMPHASIS = 14,
+ /* De-emphasis filter on DAC-3 disabled/enabled */
+ CONTROL_FLAG_DAC3_DEEMPHASIS = 15,
+ /* High-pass filter on ADC_B disabled/enabled */
+ CONTROL_FLAG_ADC_B_HIGH_PASS = 16,
+ /* High-pass filter on ADC_C disabled/enabled */
+ CONTROL_FLAG_ADC_C_HIGH_PASS = 17,
+ /* Common mode on Port_A disabled/enabled */
+ CONTROL_FLAG_PORT_A_COMMON_MODE = 18,
+ /* Common mode on Port_D disabled/enabled */
+ CONTROL_FLAG_PORT_D_COMMON_MODE = 19,
+ /* Impedance for ramp generator on Port_A 16 Ohm/10K Ohm */
+ CONTROL_FLAG_PORT_A_10KOHM_LOAD = 20,
+ /* Impedance for ramp generator on Port_D, 16 Ohm/10K Ohm */
+ CONTROL_FLAG_PORT_D_10KOHM_LOAD = 21,
+ /* ASI rate is 48kHz/96kHz */
+ CONTROL_FLAG_ASI_96KHZ = 22,
+ /* DAC power settings able to control attached ports no/yes */
+ CONTROL_FLAG_DACS_CONTROL_PORTS = 23,
+ /* Clock Stop OK reporting is disabled/enabled */
+ CONTROL_FLAG_CONTROL_STOP_OK_ENABLE = 24,
+ /* Number of control flags */
+ CONTROL_FLAGS_MAX = (CONTROL_FLAG_CONTROL_STOP_OK_ENABLE+1)
+};
+
+enum control_param_id {
+ /* 0: force HDA, 1: allow DSP if HDA Spdif1Out stream is idle */
+ CONTROL_PARAM_SPDIF1_SOURCE = 2,
+
+ /* Stream Control */
+
+ /* Select stream with the given ID */
+ CONTROL_PARAM_STREAM_ID = 24,
+ /* Source connection point for the selected stream */
+ CONTROL_PARAM_STREAM_SOURCE_CONN_POINT = 25,
+ /* Destination connection point for the selected stream */
+ CONTROL_PARAM_STREAM_DEST_CONN_POINT = 26,
+ /* Number of audio channels in the selected stream */
+ CONTROL_PARAM_STREAMS_CHANNELS = 27,
+ /*Enable control for the selected stream */
+ CONTROL_PARAM_STREAM_CONTROL = 28,
+
+ /* Connection Point Control */
+
+ /* Select connection point with the given ID */
+ CONTROL_PARAM_CONN_POINT_ID = 29,
+ /* Connection point sample rate */
+ CONTROL_PARAM_CONN_POINT_SAMPLE_RATE = 30,
+
+ /* Node Control */
+
+ /* Select HDA node with the given ID */
+ CONTROL_PARAM_NODE_ID = 31
+};
+
+enum hda_vendor_status_dspio {
+ /* Success */
+ VENDOR_STATUS_DSPIO_OK = 0x00,
+ /* Busy, unable to accept new command, the host must retry */
+ VENDOR_STATUS_DSPIO_BUSY = 0x01,
+ /* SCP command queue is full */
+ VENDOR_STATUS_DSPIO_SCP_COMMAND_QUEUE_FULL = 0x02,
+ /* SCP response queue is empty */
+ VENDOR_STATUS_DSPIO_SCP_RESPONSE_QUEUE_EMPTY = 0x03
+};
+
+enum hda_vendor_status_chipio {
+ /* Success */
+ VENDOR_STATUS_CHIPIO_OK = 0x00,
+ /* Busy, unable to accept new command, the host must retry */
+ VENDOR_STATUS_CHIPIO_BUSY = 0x01
+};
+
+enum ca0132_sample_rate {
+ SR_6_000 = 0x00,
+ SR_8_000 = 0x01,
+ SR_9_600 = 0x02,
+ SR_11_025 = 0x03,
+ SR_16_000 = 0x04,
+ SR_22_050 = 0x05,
+ SR_24_000 = 0x06,
+ SR_32_000 = 0x07,
+ SR_44_100 = 0x08,
+ SR_48_000 = 0x09,
+ SR_88_200 = 0x0A,
+ SR_96_000 = 0x0B,
+ SR_144_000 = 0x0C,
+ SR_176_400 = 0x0D,
+ SR_192_000 = 0x0E,
+ SR_384_000 = 0x0F,
+
+ SR_COUNT = 0x10,
+
+ SR_RATE_UNKNOWN = 0x1F
+};
+
+enum dsp_download_state {
+ DSP_DOWNLOAD_FAILED = -1,
+ DSP_DOWNLOAD_INIT = 0,
+ DSP_DOWNLOADING = 1,
+ DSP_DOWNLOADED = 2
+};
+
+struct hda_stream_format {
+ unsigned int sample_rate;
+ unsigned short valid_bits_per_sample;
+ unsigned short container_size;
+ unsigned short number_channels;
+};
+
+/* retrieve parameters from hda format */
+#define get_hdafmt_chs(fmt) (fmt & 0xf)
+#define get_hdafmt_bits(fmt) ((fmt >> 4) & 0x7)
+#define get_hdafmt_rate(fmt) ((fmt >> 8) & 0x7f)
+#define get_hdafmt_type(fmt) ((fmt >> 15) & 0x1)
+
+struct ca0132_spec {
+ struct snd_kcontrol_new *mixers[5];
+ unsigned int num_mixers;
+ const struct hda_verb *base_init_verbs;
+ const struct hda_verb *base_exit_verbs;
+ const struct hda_verb *init_verbs[5];
+ unsigned int num_init_verbs; /* exclude base init verbs */
+
+ /* Nodes configurations */
+ struct hda_multi_out multiout;
+ hda_nid_t out_pins[5];
+ hda_nid_t dacs[5];
+ unsigned int num_outputs;
+ hda_nid_t input_pins[5];
+ hda_nid_t adcs[5];
+ unsigned int num_inputs;
+ hda_nid_t shared_mic_nid;
+ hda_nid_t shared_out_nid;
+ struct hda_pcm pcm_rec[5]; /* PCM information */
+
+ /* chip access */
+ struct mutex chipio_mutex; /* chip access mutex */
+ u32 curr_chip_addx;
+
+ /* DSP download related */
+ enum dsp_download_state dsp_state;
+ unsigned int dsp_stream_id;
+ unsigned int wait_scp;
+ unsigned int wait_scp_header;
+ unsigned int wait_num_data;
+ unsigned int scp_resp_header;
+ unsigned int scp_resp_data[4];
+ unsigned int scp_resp_count;
+
+ /* mixer and effects related */
+ unsigned char dmic_ctl;
+ int cur_out_type;
+ int cur_mic_type;
+ long vnode_lvol[VNODES_COUNT];
+ long vnode_rvol[VNODES_COUNT];
+ long vnode_lswitch[VNODES_COUNT];
+ long vnode_rswitch[VNODES_COUNT];
+ long effects_switch[EFFECTS_COUNT];
+ long voicefx_val;
+ long cur_mic_boost;
+
+ #ifdef ENABLE_TUNING_CONTROLS
+ long cur_ctl_vals[TUNING_CTLS_COUNT];
+ #endif
+};
+
+/*
+ * CA0132 codec access
+ */
+unsigned int codec_send_command(struct hda_codec *codec, hda_nid_t nid,
+ unsigned int verb, unsigned int parm, unsigned int *res)
+{
+ unsigned int response;
+ response = snd_hda_codec_read(codec, nid, 0, verb, parm);
+ *res = response;
+
+ return ((response == -1) ? CT_FAIL : CT_OK);
+}
+
+static int codec_set_converter_format(struct hda_codec *codec, hda_nid_t nid,
+ unsigned short converter_format, unsigned int *res)
+{
+ return codec_send_command(codec, nid, VENDOR_CHIPIO_STREAM_FORMAT,
+ converter_format & 0xffff, res);
+}
+
+static int codec_set_converter_stream_channel(struct hda_codec *codec,
+ hda_nid_t nid, unsigned char stream,
+ unsigned char channel, unsigned int *res)
+{
+ unsigned char converter_stream_channel = 0;
+
+ converter_stream_channel = (stream << 4) | (channel & 0x0f);
+ return codec_send_command(codec, nid, AC_VERB_SET_CHANNEL_STREAMID,
+ converter_stream_channel, res);
+}
+
+/*
+ * CA0132 chip access stuffs
+ */
+static int chipio_send(struct hda_codec *codec,
+ unsigned int reg,
+ u32 data)
+{
+ unsigned int res;
+ int retry = 50;
+
+ /* send bits of data specified by reg */
+ do {
+ res = snd_hda_codec_read(codec, WIDGET_CHIP_CTRL, 0,
+ reg, data);
+ if (res == VENDOR_STATUS_CHIPIO_OK)
+ return CT_OK;
+ } while (--retry);
+
+ CTASSERT(0);
+ return CT_FAIL;
+}
+
+static int chipio_write_addx(struct hda_codec *codec, u32 chip_addx)
+{
+ struct ca0132_spec *spec = codec->spec;
+ int status = CT_OK;
+
+ if (spec->curr_chip_addx == chip_addx)
+ return CT_OK;
+
+ /* send low 16 bits of the address */
+ status = chipio_send(codec, VENDOR_CHIPIO_ADDRESS_LOW,
+ chip_addx & 0xffff);
+
+ if (SUCCEEDED(status)) {
+ /* send high 16 bits of the address */
+ status = chipio_send(codec, VENDOR_CHIPIO_ADDRESS_HIGH,
+ chip_addx >> 16);
+ }
+
+ CTASSERT(SUCCEEDED(status));
+ spec->curr_chip_addx = SUCCEEDED(status) ? chip_addx : ~0UL;
+
+ return status;
+}
+
+static int chipio_write_data(struct hda_codec *codec, u32 data)
+{
+ struct ca0132_spec *spec = codec->spec;
+ int status = CT_OK;
+
+ /* send low 16 bits of the data */
+ status = chipio_send(codec, VENDOR_CHIPIO_DATA_LOW, data & 0xffff);
+
+ if (SUCCEEDED(status)) {
+ /* send high 16 bits of the data */
+ status = chipio_send(codec, VENDOR_CHIPIO_DATA_HIGH,
+ data >> 16);
+ }
+
+ CTASSERT(SUCCEEDED(status));
+ spec->curr_chip_addx = SUCCEEDED(status) ?
+ (spec->curr_chip_addx + 4) : ~0UL;
+
+ return status;
+}
+
+static int chipio_write_data_multiple(struct hda_codec *codec,
+ const u32 *data,
+ unsigned int count)
+{
+ int status = CT_OK;
+
+ if (data == NULL)
+ return FAIL_MSG(CT_FAIL, "chipio_write_data null ptr");
+
+ while ((count-- != 0) && (status == CT_OK))
+ status = chipio_write_data(codec, *data++);
+
+ return status;
+}
+
+static int chipio_read_data(struct hda_codec *codec, unsigned int *data)
+{
+ struct ca0132_spec *spec = codec->spec;
+ int status = CT_OK;
+
+ /* post read */
+ status = chipio_send(codec, VENDOR_CHIPIO_HIC_POST_READ, 0);
+
+ if (SUCCEEDED(status)) {
+ /* read status */
+ status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0);
+ }
+
+ if (SUCCEEDED(status)) {
+ /* read data */
+ *data = snd_hda_codec_read(codec, WIDGET_CHIP_CTRL, 0,
+ VENDOR_CHIPIO_HIC_READ_DATA, 0);
+ }
+
+ CTASSERT(SUCCEEDED(status));
+ spec->curr_chip_addx = SUCCEEDED(status) ?
+ (spec->curr_chip_addx + 4) : ~0UL;
+
+ return status;
+}
+
+static int chipio_write(struct hda_codec *codec, u32 chip_addx,
+ const u32 data)
+{
+ struct ca0132_spec *spec = codec->spec;
+ int status;
+
+ mutex_lock(&spec->chipio_mutex);
+ status = chipio_write_addx(codec, chip_addx);
+ if (SUCCEEDED(status))
+ status = chipio_write_data(codec, data);
+ mutex_unlock(&spec->chipio_mutex);
+
+ return status;
+}
+
+static int chipio_write_multiple(struct hda_codec *codec,
+ u32 chip_addx,
+ const u32 *data,
+ unsigned int count)
+{
+ struct ca0132_spec *spec = codec->spec;
+ int status;
+
+ mutex_lock(&spec->chipio_mutex);
+ status = chipio_write_addx(codec, chip_addx);
+ if (SUCCEEDED(status))
+ status = chipio_write_data_multiple(codec, data, count);
+ mutex_unlock(&spec->chipio_mutex);
+
+ return status;
+}
+
+static int chipio_read(struct hda_codec *codec, u32 chip_addx,
+ unsigned int *data)
+{
+ struct ca0132_spec *spec = codec->spec;
+ int status;
+
+ mutex_lock(&spec->chipio_mutex);
+ status = chipio_write_addx(codec, chip_addx);
+ if (SUCCEEDED(status))
+ status = chipio_read_data(codec, data);
+ mutex_unlock(&spec->chipio_mutex);
+
+ return status;
+}
+
+static void chipio_set_control_flag(struct hda_codec *codec,
+ enum control_flag_id flag_id,
+ bool flag_state)
+{
+ unsigned int val;
+ unsigned int flag_bit;
+
+ flag_bit = (flag_state ? 1 : 0);
+ val = (flag_bit << 7) | (flag_id);
+ snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
+ VENDOR_CHIPIO_FLAG_SET, val);
+}
+
+static void chipio_set_control_param(struct hda_codec *codec,
+ enum control_param_id param_id, int param_val)
+{
+ struct ca0132_spec *spec = codec->spec;
+ int val;
+
+ if ((param_id < 32) && (param_val < 8)) {
+ val = (param_val << 5) | (param_id);
+ snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
+ VENDOR_CHIPIO_PARAM_SET, val);
+ } else {
+ mutex_lock(&spec->chipio_mutex);
+ if (chipio_send(codec, VENDOR_CHIPIO_STATUS, 0) == CT_OK) {
+ snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
+ VENDOR_CHIPIO_PARAM_EX_ID_SET,
+ param_id);
+ snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
+ VENDOR_CHIPIO_PARAM_EX_VALUE_SET,
+ param_val);
+ } else
+ CA0132_LOG("set_control_param:FAIL! id=0x%x, val=%d\n",
+ param_id, param_val);
+ mutex_unlock(&spec->chipio_mutex);
+ }
+}
+
+static void chipio_set_conn_rate(struct hda_codec *codec,
+ int connid, enum ca0132_sample_rate rate)
+{
+ chipio_set_control_param(codec, CONTROL_PARAM_CONN_POINT_ID, connid);
+ chipio_set_control_param(codec, CONTROL_PARAM_CONN_POINT_SAMPLE_RATE,
+ rate);
+}
+
+static void chipio_enable_clocks(struct hda_codec *codec)
+{
+ struct ca0132_spec *spec = codec->spec;
+
+ mutex_lock(&spec->chipio_mutex);
+ snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
+ VENDOR_CHIPIO_8051_ADDRESS_LOW, 0);
+ snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
+ VENDOR_CHIPIO_PLL_PMU_WRITE, 0xff);
+ snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
+ VENDOR_CHIPIO_8051_ADDRESS_LOW, 5);
+ snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
+ VENDOR_CHIPIO_PLL_PMU_WRITE, 0x0b);
+ snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
+ VENDOR_CHIPIO_8051_ADDRESS_LOW, 6);
+ snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
+ VENDOR_CHIPIO_PLL_PMU_WRITE, 0xff);
+ mutex_unlock(&spec->chipio_mutex);
+}
+
+
+/*
+ * CA0132 DSP IO stuffs
+ */
+static int dspio_send(struct hda_codec *codec, unsigned int reg,
+ unsigned int data)
+{
+ unsigned int res;
+ int retry = 50;
+
+ /* send bits of data specified by reg to dsp */
+ do {
+ res = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0, reg, data);
+ if ((res >= 0) && (res != VENDOR_STATUS_DSPIO_BUSY))
+ return res;
+ } while (--retry);
+
+ CTASSERT(retry);
+ return CT_FAIL;
+}
+
+static void dspio_write_wait(struct hda_codec *codec)
+{
+ int cur_val, prv_val;
+ int retry = 50;
+
+ cur_val = 0;
+ do {
+ prv_val = cur_val;
+ msleep(20);
+ dspio_send(codec, VENDOR_DSPIO_SCP_POST_COUNT_QUERY, 1);
+ dspio_send(codec, VENDOR_DSPIO_STATUS, 0);
+ cur_val = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0,
+ VENDOR_DSPIO_SCP_READ_COUNT, 0);
+ } while (cur_val && (cur_val == prv_val) && --retry);
+}
+
+static int dspio_write(struct hda_codec *codec, unsigned int scp_data)
+{
+ struct ca0132_spec *spec = codec->spec;
+ int status;
+
+ dspio_write_wait(codec);
+
+ mutex_lock(&spec->chipio_mutex);
+ status = dspio_send(codec, VENDOR_DSPIO_SCP_WRITE_DATA_LOW,
+ scp_data & 0xffff);
+ if (SUCCEEDED(status))
+ status = dspio_send(codec, VENDOR_DSPIO_SCP_WRITE_DATA_HIGH,
+ scp_data >> 16);
+ mutex_unlock(&spec->chipio_mutex);
+
+ /* OK, now check if the write itself has executed*/
+ if (SUCCEEDED(status))
+ status = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0,
+ VENDOR_DSPIO_STATUS, 0);
+
+ if (status == VENDOR_STATUS_DSPIO_SCP_COMMAND_QUEUE_FULL)
+ CA0132_LOG("dspio_write: SCP_COMMAND_QUEUE_FULL!!!\n\n");
+
+ return (status == VENDOR_STATUS_DSPIO_SCP_COMMAND_QUEUE_FULL) ?
+ CT_FAIL : CT_OK;
+}
+
+static int dspio_write_multiple(struct hda_codec *codec,
+ unsigned int *buffer, unsigned int size)
+{
+ int status = CT_OK;
+ unsigned int count;
+
+ if ((buffer == NULL))
+ return CT_FAIL;
+
+ count = 0;
+ while (count < size) {
+ status = dspio_write(codec, *buffer++);
+ if (status != CT_OK)
+ break;
+ count++;
+ }
+
+ return status;
+}
+
+static int dspio_read(struct hda_codec *codec, unsigned int *data)
+{
+ int status;
+
+ status = dspio_send(codec, VENDOR_DSPIO_SCP_POST_READ_DATA, 0);
+ if (SUCCEEDED(status))
+ status = dspio_send(codec, VENDOR_DSPIO_STATUS, 0);
+
+ if (FAILED(status)
+ || (status == VENDOR_STATUS_DSPIO_SCP_RESPONSE_QUEUE_EMPTY))
+ return CT_FAIL;
+
+ *data = snd_hda_codec_read(codec, WIDGET_DSP_CTRL, 0,
+ VENDOR_DSPIO_SCP_READ_DATA, 0);
+
+ return CT_OK;
+}
+
+static int dspio_read_multiple(struct hda_codec *codec, unsigned int *buffer,
+ unsigned int *buf_size, unsigned int size_count)
+{
+ int status = CT_OK;
+ unsigned int size = *buf_size;
+ unsigned int count;
+ unsigned int skip_count;
+ unsigned int dummy;
+
+ if ((buffer == NULL))
+ return CT_FAIL;
+
+ count = 0;
+ while (count < size && count < size_count) {
+ status = dspio_read(codec, buffer++);
+ if (status != CT_OK)
+ break;
+ count++;
+ }
+
+ skip_count = count;
+ if (SUCCEEDED(status)) {
+ while (skip_count < size) {
+ status = dspio_read(codec, &dummy);
+ if (status != CT_OK)
+ break;
+ skip_count++;
+ }
+ }
+ *buf_size = count;
+
+ return status;
+}
+
+static inline unsigned int
+make_scp_header(unsigned int target_id, unsigned int source_id,
+ unsigned int get_flag, unsigned int req,
+ unsigned int device_flag, unsigned int resp_flag,
+ unsigned int error_flag, unsigned int data_size)
+{
+ unsigned int header = 0;
+
+ header = (data_size & 0x1f) << 27;
+ header |= (error_flag & 0x01) << 26;
+ header |= (resp_flag & 0x01) << 25;
+ header |= (device_flag & 0x01) << 24;
+ header |= (req & 0x7f) << 17;
+ header |= (get_flag & 0x01) << 16;
+ header |= (source_id & 0xff) << 8;
+ header |= target_id & 0xff;
+
+ return header;
+}
+
+static inline void
+extract_scp_header(unsigned int header,
+ unsigned int *target_id, unsigned int *source_id,
+ unsigned int *get_flag, unsigned int *req,
+ unsigned int *device_flag, unsigned int *resp_flag,
+ unsigned int *error_flag, unsigned int *data_size)
+{
+ if (data_size)
+ *data_size = (header >> 27) & 0x1f;
+ if (error_flag)
+ *error_flag = (header >> 26) & 0x01;
+ if (resp_flag)
+ *resp_flag = (header >> 25) & 0x01;
+ if (device_flag)
+ *device_flag = (header >> 24) & 0x01;
+ if (req)
+ *req = (header >> 17) & 0x7f;
+ if (get_flag)
+ *get_flag = (header >> 16) & 0x01;
+ if (source_id)
+ *source_id = (header >> 8) & 0xff;
+ if (target_id)
+ *target_id = header & 0xff;
+}
+
+#define SCP_MAX_DATA_WORDS (16)
+
+/* Data type to simplify using floats and integers */
+union _scp_data {
+ float f;
+ unsigned int ui;
+};
+
+/* Structure to contain any SCP message */
+struct scp_msg {
+ unsigned int hdr;
+ union _scp_data data[SCP_MAX_DATA_WORDS];
+};
+
+static void dspio_clear_response_queue(struct hda_codec *codec)
+{
+ unsigned int dummy = 0;
+ int status = CT_FAIL;
+
+ /* clear all from the response queue */
+ do {
+ status = dspio_read(codec, &dummy);
+ } while (status == CT_OK);
+}
+
+static int dspio_get_response_data(struct hda_codec *codec)
+{
+ struct ca0132_spec *spec = codec->spec;
+ unsigned int data = 0;
+ unsigned int count;
+
+ if (FAILED(dspio_read(codec, &data)))
+ return CT_FAIL;
+
+ CA0132_LOG("dspio_get_response_data: 0x%08x\n", data);
+ if ((data & 0x00ffffff) == spec->wait_scp_header) {
+ spec->scp_resp_header = data;
+ spec->scp_resp_count = data >> 27;
+ count = spec->wait_num_data;
+ dspio_read_multiple(codec, spec->scp_resp_data,
+ &spec->scp_resp_count, count);
+ return CT_OK;
+ }
+
+ return CT_FAIL;
+}
+
+static int dspio_send_scp_message(struct hda_codec *codec,
+ unsigned char *send_buf,
+ unsigned int send_buf_size,
+ unsigned char *return_buf,
+ unsigned int return_buf_size,
+ unsigned int *bytes_returned)
+{
+ struct ca0132_spec *spec = codec->spec;
+ int retry;
+ int status = CT_FAIL;
+ unsigned int scp_send_size = 0;
+ unsigned int total_size;
+ bool waiting_for_resp = false;
+ unsigned int header;
+ struct scp_msg *ret_msg;
+ unsigned int resp_src_id, resp_target_id;
+ unsigned int data_size, src_id, target_id, get_flag, device_flag;
+
+ if (bytes_returned)
+ *bytes_returned = 0;
+
+ /* get scp header from buffer */
+ header = *((unsigned int *)send_buf);
+ extract_scp_header(header, &target_id, &src_id, &get_flag, NULL,
+ &device_flag, NULL, NULL, &data_size);
+ scp_send_size = data_size + 1;
+ total_size = (scp_send_size * 4);
+
+ CTASSERT(send_buf_size >= total_size);
+ if (send_buf_size < total_size)
+ return CT_FAIL;
+
+ if (get_flag || device_flag) {
+ if (!return_buf || return_buf_size < 4 || !bytes_returned) {
+ CTASSERT(0);
+ return CT_FAIL;
+ }
+ spec->wait_scp_header = *((unsigned int *)send_buf);
+
+ /* swap source id with target id */
+ resp_target_id = src_id;
+ resp_src_id = target_id;
+ spec->wait_scp_header &= 0xffff0000;
+ spec->wait_scp_header |= (resp_src_id << 8) | (resp_target_id);
+ spec->wait_num_data = return_buf_size/sizeof(unsigned int) - 1;
+ spec->wait_scp = 1;
+ waiting_for_resp = true;
+ }
+
+ status = dspio_write_multiple(codec, (unsigned int *)send_buf,
+ scp_send_size);
+ if (FAILED(status)) {
+ CTASSERT(0);
+ spec->wait_scp = 0;
+ return status;
+ }
+
+ if (waiting_for_resp) {
+ memset(return_buf, 0, return_buf_size);
+ retry = 50;
+ do {
+ msleep(20);
+ } while (spec->wait_scp && (--retry != 0));
+ waiting_for_resp = false;
+ if (retry != 0) {
+ ret_msg = (struct scp_msg *)return_buf;
+ memcpy(&ret_msg->hdr, &spec->scp_resp_header, 4);
+ memcpy(&ret_msg->data, spec->scp_resp_data,
+ spec->wait_num_data);
+ *bytes_returned = (spec->scp_resp_count + 1) * 4;
+ status = CT_OK;
+ } else {
+ CTASSERT(*bytes_returned == 0);
+ status = CT_FAIL;
+ }
+ spec->wait_scp = 0;
+ }
+
+ return status;
+}
+
+static int dspio_scp(struct hda_codec *codec,
+ int mod_id, int req, int dir, void *data, unsigned int len,
+ void *reply, unsigned int *reply_len)
+{
+ int status = CT_OK;
+ struct scp_msg scp_send, scp_reply;
+ unsigned int ret_bytes, send_size, ret_size;
+ unsigned int send_get_flag, reply_resp_flag, reply_error_flag;
+ unsigned int reply_data_size;
+
+ memset(&scp_send, 0, sizeof(scp_send));
+ memset(&scp_reply, 0, sizeof(scp_reply));
+
+ CTASSERT((len == 0 || data != NULL) && len <= SCP_MAX_DATA_WORDS);
+ if ((len != 0 && data == NULL) || (len > SCP_MAX_DATA_WORDS))
+ return CT_FAIL;
+
+ CTASSERT(dir != SCP_GET || reply != NULL);
+ if (dir == SCP_GET && reply == NULL)
+ return FAIL_MSG(CT_FAIL, "dspio_scp get but has no buffer");
+
+ CTASSERT((reply == NULL) || (reply_len != NULL && (*reply_len > 0)));
+ if (reply != NULL && (reply_len == NULL || (*reply_len == 0)))
+ return FAIL_MSG(CT_FAIL, "dspio_scp bad resp buf len parms");
+
+ scp_send.hdr = make_scp_header(mod_id, 0x20, (dir == SCP_GET), req,
+ 0, 0, 0, len/sizeof(unsigned int));
+ if (data != NULL && len > 0) {
+ len = MIN(sizeof(scp_send.data), len);
+ memcpy(scp_send.data, data, len);
+ }
+
+ ret_bytes = 0;
+ send_size = sizeof(unsigned int) + len;
+ status = dspio_send_scp_message(codec, (unsigned char *)&scp_send,
+ send_size, (unsigned char *)&scp_reply,
+ sizeof(scp_reply), &ret_bytes);
+
+/* for debugging */
+#ifdef ENABLE_CA0132_DEBUG
+{
+ unsigned int x, *p, i;
+ unsigned int source_id;
+ unsigned int target_id;
+ unsigned int req;
+ unsigned int get_flag;
+ unsigned int resp_flag;
+ unsigned int device_flag;
+ unsigned int error_flag;
+ unsigned int data_size;
+
+ memcpy(&x, &scp_send.hdr, sizeof(unsigned int));
+ extract_scp_header(x, &target_id, &source_id,
+ &get_flag, &req, &device_flag, &resp_flag,
+ &error_flag, &data_size);
+
+ snd_printdd("ScpDispatch ----- REQ: "
+ "HDR=0x%08x "
+ "SID=%04x "
+ "TID=%04x "
+ "Req=%04x "
+ "GRDE=%d %d %d %d "
+ "Siz=%d [ ",
+ x,
+ source_id,
+ target_id,
+ req,
+ get_flag,
+ resp_flag,
+ device_flag,
+ error_flag,
+ data_size);
+
+ for (x = 0; x < data_size; x++)
+ snd_printdd("0x%08x ", scp_send.data[x].ui);
+
+ snd_printdd("]\n");
+
+ if (get_flag) {
+ if (ret_bytes >= sizeof(scp_reply.hdr)) {
+ memcpy(&x, &scp_reply.hdr, sizeof(unsigned int));
+ extract_scp_header(x, &target_id, &source_id,
+ &get_flag, &req, &device_flag, &resp_flag,
+ &error_flag, &data_size);
+
+ snd_printdd(
+ " ----- REP: "
+ "HDR=0x%08x "
+ "SID=%04x "
+ "TID=%04x "
+ "Req=%04x "
+ "GRDE=%d %d %d %d "
+ "Siz=%d [ ",
+ x,
+ source_id,
+ target_id,
+ req,
+ get_flag,
+ resp_flag,
+ device_flag,
+ error_flag,
+ data_size);
+
+ for (x = 0; x < data_size; x++)
+ snd_printdd("0x%08x ", scp_reply.data[x].ui);
+ } else {
+ snd_printdd("REP: (too short,nbytes=%d) [", ret_bytes);
+
+ for (p = (unsigned int *)&scp_reply, i = 0;
+ i < ret_bytes; p++, i++) {
+ snd_printdd("0x%04x ", *p);
+ }
+ }
+ snd_printdd("]\n");
+ }
+}
+#endif
+
+ if (FAILED(status))
+ return FAIL_MSG(status, "dspio_scp: send scp msg failed");
+
+ /* extract send and reply headers members */
+ extract_scp_header(scp_send.hdr, NULL, NULL, &send_get_flag,
+ NULL, NULL, NULL, NULL, NULL);
+ extract_scp_header(scp_reply.hdr, NULL, NULL, NULL, NULL, NULL,
+ &reply_resp_flag, &reply_error_flag,
+ &reply_data_size);
+
+ if (!send_get_flag)
+ return CT_OK;
+
+ if (reply_resp_flag && !reply_error_flag) {
+ ret_size = (ret_bytes - sizeof(scp_reply.hdr))
+ / sizeof(unsigned int);
+
+ CTASSERT(dir == SCP_GET && reply != NULL && reply_len != NULL);
+
+ if (*reply_len < ret_size*sizeof(unsigned int)) {
+ status = FAIL_MSG(CT_FAIL, "reply too long for buf");
+ } else if (ret_size != reply_data_size) {
+ status = FAIL_MSG(CT_FAIL, "RetLen and HdrLen .NE.");
+ } else {
+ *reply_len = ret_size*sizeof(unsigned int);
+ memcpy(reply, scp_reply.data, *reply_len);
+ }
+ } else
+ status = FAIL_MSG(CT_FAIL, "reply ill-formed or errflag set");
+
+ return status;
+}
+
+static int dspio_set_param(struct hda_codec *codec, int mod_id,
+ int req, void *data, unsigned int len)
+{
+ return dspio_scp(codec, mod_id, req, SCP_SET, data, len, NULL, NULL);
+}
+
+static int dspio_alloc_dma_chan(struct hda_codec *codec, unsigned int *dma_chan)
+{
+ int status = CT_OK;
+ unsigned int size = sizeof(dma_chan);
+
+ CA0132_DSP_LOG(" dspio_alloc_dma_chan() -- begin");
+ status = dspio_scp(codec, MASTERCONTROL, MASTERCONTROL_ALLOC_DMA_CHAN,
+ SCP_GET, NULL, 0, dma_chan, &size);
+
+ if (FAILED(status)) {
+ CA0132_DSP_LOG("dspio_alloc_dma_chan: SCP Failed");
+ return CT_FAIL;
+ }
+
+ if ((*dma_chan + 1) == 0) {
+ CA0132_DSP_LOG("no free dma channels to allocate");
+ return CT_FAIL;
+ }
+
+ CA0132_LOG("dspio_alloc_dma_chan: chan=%d\n", *dma_chan);
+ CA0132_DSP_LOG(" dspio_alloc_dma_chan() -- complete");
+
+ return status;
+}
+
+static int dspio_free_dma_chan(struct hda_codec *codec, unsigned int dma_chan)
+{
+ int status = CT_OK;
+ unsigned int dummy = 0;
+
+ CA0132_DSP_LOG(" dspio_free_dma_chan() -- begin");
+ CA0132_LOG("dspio_free_dma_chan: chan=%d\n", dma_chan);
+
+ status = dspio_scp(codec, MASTERCONTROL, MASTERCONTROL_ALLOC_DMA_CHAN,
+ SCP_SET, &dma_chan, sizeof(dma_chan), NULL, &dummy);
+
+ if (FAILED(status)) {
+ CA0132_DSP_LOG("dspio_free_dma_chan: SCP Failed");
+ return CT_FAIL;
+ }
+
+ CA0132_DSP_LOG(" dspio_free_dma_chan() -- complete");
+
+ return status;
+}
+
+/*
+ * CA0132 DSP access stuffs
+ */
+static int dsp_set_run_state(struct hda_codec *codec)
+{
+ unsigned int dbg_ctrl_reg;
+ unsigned int halt_state;
+ int err;
+
+ err = chipio_read(codec, DSP_DBGCNTL_INST_OFFSET, &dbg_ctrl_reg);
+ if (err < 0)
+ return err;
+
+ halt_state = (dbg_ctrl_reg & DSP_DBGCNTL_STATE_MASK) >>
+ DSP_DBGCNTL_STATE_LOBIT;
+
+ if (halt_state != 0) {
+ dbg_ctrl_reg &= ~((halt_state << DSP_DBGCNTL_SS_LOBIT) &
+ DSP_DBGCNTL_SS_MASK);
+ err = chipio_write(codec, DSP_DBGCNTL_INST_OFFSET,
+ dbg_ctrl_reg);
+ if (err < 0)
+ return err;
+
+ dbg_ctrl_reg |= (halt_state << DSP_DBGCNTL_EXEC_LOBIT) &
+ DSP_DBGCNTL_EXEC_MASK;
+ err = chipio_write(codec, DSP_DBGCNTL_INST_OFFSET,
+ dbg_ctrl_reg);
+ if (err < 0)
+ return err;
+ }
+
+ return CT_OK;
+}
+
+static int dsp_reset(struct hda_codec *codec)
+{
+ unsigned int res;
+ int retry = 20;
+
+ CA0132_LOG("dsp_reset\n");
+ do {
+ res = dspio_send(codec, VENDOR_DSPIO_DSP_INIT, 0);
+ retry--;
+ } while (res == CT_FAIL && retry);
+
+ if (!retry) {
+ CA0132_LOG("dsp_reset timeout\n");
+ return CT_FAIL;
+ }
+
+ return CT_OK;
+}
+
+static unsigned int dsp_chip_to_dsp_addx(unsigned int chip_addx,
+ bool *code, bool *yram)
+{
+ *code = *yram = false;
+
+ if (UC_RANGE(chip_addx, 1)) {
+ *code = true;
+ return UC_OFF(chip_addx);
+ } else if (X_RANGE_ALL(chip_addx, 1)) {
+ return X_OFF(chip_addx);
+ } else if (Y_RANGE_ALL(chip_addx, 1)) {
+ *yram = true;
+ return Y_OFF(chip_addx);
+ }
+
+ return INVALID_CHIP_ADDRESS;
+}
+
+static bool dsp_is_dma_active(struct hda_codec *codec, unsigned int dma_chan)
+{
+ unsigned int dma_chnlstart_reg;
+
+ chipio_read(codec, DSPDMAC_CHNLSTART_INST_OFFSET, &dma_chnlstart_reg);
+
+ return ((dma_chnlstart_reg & (1 <<
+ (DSPDMAC_CHNLSTART_EN_LOBIT + dma_chan))) != 0);
+}
+
+static int dsp_dma_setup_common(struct hda_codec *codec,
+ unsigned int chip_addx,
+ unsigned int dma_chan,
+ unsigned int port_map_mask,
+ bool ovly)
+{
+ int status = CT_OK;
+ unsigned int chnl_prop;
+ unsigned int dsp_addx;
+ unsigned int active;
+ bool code, yram;
+
+ CA0132_DSP_LOG("-- dsp_dma_setup_common() -- Begin ---------");
+
+ CTASSERT(dma_chan < DSPDMAC_DMA_CFG_CHANNEL_COUNT);
+ if (dma_chan >= DSPDMAC_DMA_CFG_CHANNEL_COUNT)
+ return FAIL_MSG(CT_FAIL, "dma chan num invalid");
+
+ if (dsp_is_dma_active(codec, dma_chan))
+ return FAIL_MSG(CT_FAIL, "dma already active");
+
+ dsp_addx = dsp_chip_to_dsp_addx(chip_addx, &code, &yram);
+
+ if (dsp_addx == INVALID_CHIP_ADDRESS)
+ return FAIL_MSG(CT_FAIL, "invalid chip addr");
+
+ chnl_prop = DSPDMAC_CHNLPROP_AC_MASK;
+ active = 0;
+
+ CA0132_DSP_LOG(" dsp_dma_setup_common() start reg pgm");
+
+ if (ovly) {
+ status = chipio_read(codec, DSPDMAC_CHNLPROP_INST_OFFSET,
+ &chnl_prop);
+
+ if (FAILED(status))
+ return FAIL_MSG(CT_FAIL, "read CHNLPROP Reg fail");
+
+ CA0132_DSP_LOG(" dsp_dma_setup_common() Read CHNLPROP");
+ }
+
+ if (!code)
+ chnl_prop &= ~(1 << (DSPDMAC_CHNLPROP_MSPCE_LOBIT + dma_chan));
+ else
+ chnl_prop |= (1 << (DSPDMAC_CHNLPROP_MSPCE_LOBIT + dma_chan));
+
+ chnl_prop &= ~(1 << (DSPDMAC_CHNLPROP_DCON_LOBIT + dma_chan));
+
+ status = chipio_write(codec, DSPDMAC_CHNLPROP_INST_OFFSET, chnl_prop);
+ if (FAILED(status))
+ return FAIL_MSG(CT_FAIL, "write CHNLPROP Reg fail");
+
+ CA0132_DSP_LOG(" dsp_dma_setup_common() Write CHNLPROP");
+
+ if (ovly) {
+ status = chipio_read(codec, DSPDMAC_ACTIVE_INST_OFFSET,
+ &active);
+
+ if (FAILED(status))
+ return FAIL_MSG(CT_FAIL, "read ACTIVE Reg fail");
+
+ CA0132_DSP_LOG(" dsp_dma_setup_common() Read ACTIVE");
+ }
+
+ active &= (~(1 << (DSPDMAC_ACTIVE_AAR_LOBIT + dma_chan))) &
+ DSPDMAC_ACTIVE_AAR_MASK;
+
+ status = chipio_write(codec, DSPDMAC_ACTIVE_INST_OFFSET, active);
+ if (FAILED(status))
+ return FAIL_MSG(CT_FAIL, "write ACTIVE Reg fail");
+
+ CA0132_DSP_LOG(" dsp_dma_setup_common() Write ACTIVE");
+
+ status = chipio_write(codec, DSPDMAC_AUDCHSEL_INST_OFFSET(dma_chan),
+ port_map_mask);
+ if (FAILED(status))
+ return FAIL_MSG(CT_FAIL, "write AUDCHSEL Reg fail");
+
+ CA0132_DSP_LOG(" dsp_dma_setup_common() Write AUDCHSEL");
+
+ status = chipio_write(codec, DSPDMAC_IRQCNT_INST_OFFSET(dma_chan),
+ DSPDMAC_IRQCNT_BICNT_MASK | DSPDMAC_IRQCNT_CICNT_MASK);
+ if (FAILED(status))
+ return FAIL_MSG(CT_FAIL, "write IRQCNT Reg fail");
+
+ CA0132_DSP_LOG(" dsp_dma_setup_common() Write IRQCNT");
+
+ CA0132_LOG("ChipA=0x%x,DspA=0x%x,dmaCh=%u,"
+ "CHSEL=0x%x,CHPROP=0x%x,Active=0x%x\n",
+ chip_addx, dsp_addx, dma_chan,
+ port_map_mask, chnl_prop, active);
+
+ CA0132_DSP_LOG("-- dsp_dma_setup_common() -- Complete ---------");
+
+ return CT_OK;
+}
+
+static int dsp_dma_setup(struct hda_codec *codec,
+ unsigned int chip_addx,
+ unsigned int count,
+ unsigned int dma_chan)
+{
+ int status = CT_OK;
+ bool code, yram;
+ unsigned int dsp_addx;
+ unsigned int addr_field;
+ unsigned int incr_field;
+ unsigned int base_cnt;
+ unsigned int cur_cnt;
+ unsigned int dma_cfg = 0;
+ unsigned int adr_ofs = 0;
+ unsigned int xfr_cnt = 0;
+ const unsigned int max_dma_count = 1 << (DSPDMAC_XFRCNT_BCNT_HIBIT -
+ DSPDMAC_XFRCNT_BCNT_LOBIT + 1);
+
+ CA0132_DSP_LOG("-- dsp_dma_setup() -- Begin ---------");
+
+ CTASSERT(count <= max_dma_count);
+ if (count > max_dma_count)
+ return FAIL_MSG(CT_FAIL, "count too big");
+
+ dsp_addx = dsp_chip_to_dsp_addx(chip_addx, &code, &yram);
+ if (dsp_addx == INVALID_CHIP_ADDRESS)
+ return FAIL_MSG(CT_FAIL, "invalid chip addr");
+
+ CA0132_DSP_LOG(" dsp_dma_setup() start reg pgm");
+
+ addr_field = dsp_addx << DSPDMAC_DMACFG_DBADR_LOBIT;
+ incr_field = 0;
+
+ if (!code) {
+ addr_field <<= 1;
+ if (yram)
+ addr_field |= (1 << DSPDMAC_DMACFG_DBADR_LOBIT);
+
+ incr_field = (1 << DSPDMAC_DMACFG_AINCR_LOBIT);
+ }
+
+ CTASSERT((addr_field & DSPDMAC_DMACFG_DBADR_MASK) == addr_field);
+ dma_cfg = addr_field + incr_field;
+ status = chipio_write(codec, DSPDMAC_DMACFG_INST_OFFSET(dma_chan),
+ dma_cfg);
+ if (FAILED(status))
+ return FAIL_MSG(CT_FAIL, "write DMACFG Reg fail");
+
+ CA0132_DSP_LOG(" dsp_dma_setup() Write DMACFG");
+
+ adr_ofs = (count - 1) << (DSPDMAC_DSPADROFS_BOFS_LOBIT +
+ (code ? 0 : 1));
+ CTASSERT((adr_ofs & DSPDMAC_DSPADROFS_BOFS_MASK) == adr_ofs);
+
+ status = chipio_write(codec, DSPDMAC_DSPADROFS_INST_OFFSET(dma_chan),
+ adr_ofs);
+ if (FAILED(status))
+ return FAIL_MSG(CT_FAIL, "write DSPADROFS Reg fail");
+
+ CA0132_DSP_LOG(" dsp_dma_setup() Write DSPADROFS");
+
+ base_cnt = (count - 1) << DSPDMAC_XFRCNT_BCNT_LOBIT;
+ CTASSERT((base_cnt & DSPDMAC_XFRCNT_BCNT_MASK) == base_cnt);
+
+ cur_cnt = (count - 1) << DSPDMAC_XFRCNT_CCNT_LOBIT;
+ CTASSERT((cur_cnt & DSPDMAC_XFRCNT_CCNT_MASK) == cur_cnt);
+
+ xfr_cnt = base_cnt | cur_cnt;
+
+ status = chipio_write(codec,
+ DSPDMAC_XFRCNT_INST_OFFSET(dma_chan), xfr_cnt);
+ if (FAILED(status))
+ return FAIL_MSG(CT_FAIL, "write XFRCNT Reg fail");
+
+ CA0132_DSP_LOG(" dsp_dma_setup() Write XFRCNT");
+
+ CA0132_LOG("ChipA=0x%x, cnt=0x%x, DMACFG=0x%x, "
+ "ADROFS=0x%x, XFRCNT=0x%x\n",
+ chip_addx, count, dma_cfg, adr_ofs, xfr_cnt);
+
+ CA0132_DSP_LOG("-- dsp_dma_setup() -- Complete ---------");
+
+ return CT_OK;
+}
+
+static int dsp_dma_start(struct hda_codec *codec,
+ unsigned int dma_chan, bool ovly)
+{
+ unsigned int reg = 0;
+ int status = CT_OK;
+
+ CA0132_DSP_LOG("-- dsp_dma_start() -- Begin ---------");
+
+ if (ovly) {
+ status = chipio_read(codec,
+ DSPDMAC_CHNLSTART_INST_OFFSET, ®);
+
+ if (FAILED(status))
+ return FAIL_MSG(CT_FAIL, "read CHNLSTART reg fail");
+
+ CA0132_DSP_LOG("-- dsp_dma_start() Read CHNLSTART");
+
+ reg &= ~(DSPDMAC_CHNLSTART_EN_MASK |
+ DSPDMAC_CHNLSTART_DIS_MASK);
+ }
+
+ status = chipio_write(codec, DSPDMAC_CHNLSTART_INST_OFFSET,
+ reg | (1 << (dma_chan + DSPDMAC_CHNLSTART_EN_LOBIT)));
+ if (FAILED(status))
+ return FAIL_MSG(CT_FAIL, "write CHNLSTART reg fail");
+
+ CA0132_DSP_LOG("-- dsp_dma_start() -- Complete ---------");
+
+ return status;
+}
+
+static int dsp_dma_stop(struct hda_codec *codec,
+ unsigned int dma_chan, bool ovly)
+{
+ unsigned int reg = 0;
+ int status = CT_OK;
+
+ CA0132_DSP_LOG("-- dsp_dma_stop() -- Begin ---------");
+
+ if (ovly) {
+ status = chipio_read(codec,
+ DSPDMAC_CHNLSTART_INST_OFFSET, ®);
+
+ if (FAILED(status))
+ return FAIL_MSG(CT_FAIL, "read CHNLSTART reg fail");
+
+ CA0132_DSP_LOG("-- dsp_dma_stop() Read CHNLSTART");
+ reg &= ~(DSPDMAC_CHNLSTART_EN_MASK |
+ DSPDMAC_CHNLSTART_DIS_MASK);
+ }
+
+ status = chipio_write(codec, DSPDMAC_CHNLSTART_INST_OFFSET,
+ reg | (1 << (dma_chan + DSPDMAC_CHNLSTART_DIS_LOBIT)));
+ if (FAILED(status))
+ return FAIL_MSG(CT_FAIL, "write CHNLSTART reg fail");
+
+ CA0132_DSP_LOG("-- dsp_dma_stop() -- Complete ---------");
+
+ return status;
+}
+
+static int dsp_allocate_router_ports(struct hda_codec *codec,
+ unsigned int num_chans,
+ unsigned int ports_per_channel,
+ unsigned int start_device,
+ unsigned int *port_map)
+{
+ int status = CT_OK;
+ int res;
+ u8 val;
+
+ status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0);
+ if (FAILED(status))
+ return status;
+
+ val = start_device << 6;
+ val |= (ports_per_channel - 1) << 4;
+ val |= num_chans - 1;
+
+ snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
+ VENDOR_CHIPIO_PORT_ALLOC_CONFIG_SET,
+ val);
+
+ snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
+ VENDOR_CHIPIO_PORT_ALLOC_SET,
+ MEM_CONNID_DSP);
+
+ status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0);
+ if (FAILED(status))
+ return status;
+
+ res = snd_hda_codec_read(codec, WIDGET_CHIP_CTRL, 0,
+ VENDOR_CHIPIO_PORT_ALLOC_GET, 0);
+
+ *port_map = res;
+
+ return (res < 0) ? CT_FAIL : CT_OK;
+}
+
+static int dsp_free_router_ports(struct hda_codec *codec)
+{
+ int status = CT_OK;
+
+ status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0);
+ if (FAILED(status))
+ return status;
+
+ snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
+ VENDOR_CHIPIO_PORT_FREE_SET,
+ MEM_CONNID_DSP);
+
+ status = chipio_send(codec, VENDOR_CHIPIO_STATUS, 0);
+
+ return status;
+}
+
+static int dsp_allocate_ports(struct hda_codec *codec,
+ unsigned int num_chans,
+ unsigned int rate_multi, unsigned int *port_map)
+{
+ int status = CT_FAIL;
+
+ CA0132_DSP_LOG(" dsp_allocate_ports() -- begin");
+
+ if ((rate_multi != 1) && (rate_multi != 2) && (rate_multi != 4))
+ return FAIL_MSG(status, "bad rate multiple");
+
+ status = dsp_allocate_router_ports(codec, num_chans,
+ rate_multi, 0, port_map);
+
+ CA0132_DSP_LOG(" dsp_allocate_ports() -- complete");
+
+ return status;
+}
+
+static int dsp_free_ports(struct hda_codec *codec)
+{
+ int status;
+
+ CA0132_DSP_LOG(" dsp_free_ports() -- begin");
+
+ status = dsp_free_router_ports(codec);
+ if (FAILED(status))
+ return FAIL_MSG(CT_FAIL, "free router ports fail");
+
+ CA0132_DSP_LOG(" dsp_free_ports() -- complete");
+
+ return status;
+}
+
+static int dsp_allocate_ports_format(struct hda_codec *codec,
+ const unsigned short fmt,
+ unsigned int *port_map)
+{
+ int status = CT_FAIL;
+ unsigned int num_chans;
+
+ unsigned int sample_rate_div = ((get_hdafmt_rate(fmt) >> 0) & 3) + 1;
+ unsigned int sample_rate_mul = ((get_hdafmt_rate(fmt) >> 3) & 3) + 1;
+ unsigned int rate_multi = sample_rate_mul / sample_rate_div;
+
+ if ((rate_multi != 1) && (rate_multi != 2) && (rate_multi != 4))
+ return FAIL_MSG(CT_FAIL, "bad rate multiple");
+
+ num_chans = get_hdafmt_chs(fmt) + 1;
+
+ status = dsp_allocate_ports(codec, num_chans, rate_multi, port_map);
+
+ return status;
+}
+
+/*
+ * HDA DMA engine stuffs for DSP code download
+ */
+struct dma_engine {
+ struct hda_codec *codec;
+ unsigned short m_converter_format;
+ void *m_buffer_addr;
+ unsigned int m_buffer_size;
+ unsigned int m_req_size;
+ struct snd_pcm_substream *substream;
+};
+
+enum dma_state {
+ DMA_STATE_RESET = 0,
+ DMA_STATE_STOP = 1,
+ DMA_STATE_RUN = 2
+};
+
+#define azx_pcm_open(a) (a->ops->open(a))
+#define azx_pcm_close(a) (a->ops->close(a))
+#define azx_pcm_prepare(a) (a->ops->prepare(a))
+#define azx_pcm_trigger(a, b) (a->ops->trigger(a, b))
+#define azx_pcm_hw_free(a) (a->ops->hw_free(a))
+
+static int dma_convert_to_hda_format(
+ struct hda_stream_format *stream_format,
+ unsigned short *hda_format)
+{
+ unsigned int format_val;
+
+ format_val = snd_hda_calc_stream_format(
+ stream_format->sample_rate,
+ stream_format->number_channels,
+ SNDRV_PCM_FORMAT_S32_LE,
+ stream_format->container_size, 0);
+
+ if (hda_format)
+ *hda_format = (unsigned short)format_val;
+
+ return CT_OK;
+}
+
+static int dma_init(
+ struct hda_codec *codec,
+ struct dma_engine **pp_dma,
+ struct hda_stream_format *stream_format,
+ unsigned short *format,
+ unsigned int req_size)
+{
+ struct dma_engine *dma;
+ struct snd_pcm_substream *substream;
+ struct snd_pcm *pcm;
+ struct snd_pcm_runtime *runtime;
+ unsigned int bits;
+ snd_pcm_uframes_t frames;
+
+ *pp_dma = NULL;
+ dma = kzalloc(sizeof(*dma), GFP_KERNEL);
+ memset((void *)dma, 0, sizeof(*dma));
+
+ dma_convert_to_hda_format(stream_format, format);
+ dma->m_converter_format = *format;
+
+ dma->substream = NULL;
+ pcm = codec->pcm_info->pcm;
+ for (substream = pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream;
+ substream; substream = substream->next) {
+ if (codec->pcm_info->pcm_type == HDA_PCM_TYPE_SPDIF)
+ continue;
+
+ if (!SUBSTREAM_BUSY(substream)) {
+ dma->substream = substream;
+ break;
+ }
+ }
+
+ if (NULL == dma->substream) {
+ kfree(dma);
+ return CT_FAIL;
+ }
+
+ runtime = kzalloc(sizeof(*runtime), GFP_KERNEL);
+ memset((void *)runtime, 0, sizeof(*runtime));
+ dma->substream->runtime = runtime;
+ dma->substream->private_data = pcm->private_data;
+
+ azx_pcm_open(dma->substream);
+ req_size = req_size * 2;
+ snd_pcm_lib_malloc_pages(dma->substream, req_size);
+
+ runtime->rate = stream_format->sample_rate;
+ runtime->channels = stream_format->number_channels;
+ runtime->format = SNDRV_PCM_FORMAT_S32_LE;
+ runtime->no_period_wakeup = 1;
+
+ bits = snd_pcm_format_physical_width(runtime->format);
+ runtime->sample_bits = bits;
+ bits *= runtime->channels;
+ runtime->frame_bits = bits;
+ frames = 1;
+ while (bits % 8 != 0) {
+ bits *= 2;
+ frames *= 2;
+ }
+ runtime->byte_align = bits / 8;
+ runtime->min_align = frames;
+ runtime->buffer_size = bytes_to_frames(runtime, req_size);
+ runtime->period_size = runtime->buffer_size;
+ dma->m_req_size = req_size;
+ dma->codec = codec;
+
+ *pp_dma = dma;
+ CA0132_LOG("dma_init: succeeded.\n");
+ return CT_OK;
+}
+
+static int dma_prepare(struct dma_engine *dma)
+{
+ struct snd_pcm_runtime *runtime;
+ int err;
+
+ CA0132_LOG("dma_prepare: begin\n");
+ runtime = dma->substream->runtime;
+
+ err = azx_pcm_prepare(dma->substream);
+ if (err < 0)
+ return CT_FAIL;
+
+ dma->m_buffer_size = snd_pcm_lib_buffer_bytes(dma->substream);
+ dma->m_buffer_addr = runtime->dma_area;
+
+ return CT_OK;
+}
+
+static int dma_reset(struct dma_engine *dma)
+{
+ struct snd_pcm_runtime *runtime = dma->substream->runtime;
+
+ CA0132_LOG("dma_reset: begin\n");
+ azx_pcm_hw_free(dma->substream);
+ snd_pcm_lib_malloc_pages(dma->substream, dma->m_req_size);
+
+ azx_pcm_prepare(dma->substream);
+ dma->m_buffer_size = snd_pcm_lib_buffer_bytes(dma->substream);
+ dma->m_buffer_addr = runtime->dma_area;
+
+ return CT_OK;
+}
+
+static int dma_set_state(struct dma_engine *dma, enum dma_state state)
+{
+ int cmd;
+
+ CA0132_LOG("dma_set_state state=%d\n", state);
+
+ switch (state) {
+ case DMA_STATE_RESET:
+ dma_reset(dma);
+ return CT_OK;
+ case DMA_STATE_STOP:
+ cmd = SNDRV_PCM_TRIGGER_STOP;
+ break;
+ case DMA_STATE_RUN:
+ cmd = SNDRV_PCM_TRIGGER_START;
+ break;
+ default:
+ return CT_OK;
+ }
+
+ azx_pcm_trigger(dma->substream, cmd);
+
+ return CT_OK;
+}
+
+static unsigned int dma_get_buffer_size(struct dma_engine *dma)
+{
+ return dma->m_buffer_size;
+}
+
+static unsigned int *dma_get_buffer_addr(struct dma_engine *dma)
+{
+ return dma->m_buffer_addr;
+}
+
+static int dma_free_buffer(struct dma_engine *dma)
+{
+ azx_pcm_hw_free(dma->substream);
+ azx_pcm_close(dma->substream);
+ kfree(dma->substream->runtime);
+ dma->substream->runtime = NULL;
+ return CT_OK;
+}
+
+static int dma_xfer(struct dma_engine *dma,
+ const unsigned int *data,
+ unsigned int count)
+{
+ memcpy(dma->m_buffer_addr, data, count);
+ return CT_OK;
+}
+
+static void dma_get_converter_format(
+ struct dma_engine *dma,
+ unsigned short *format)
+{
+ if (format)
+ *format = dma->m_converter_format;
+}
+
+static unsigned int dma_get_stream_id(struct dma_engine *dma)
+{
+ struct ca0132_spec *spec = dma->codec->spec;
+
+ return spec->dsp_stream_id;
+}
+
+static int dma_exit(struct dma_engine *dma)
+{
+ CA0132_LOG("dma_exit\n");
+ kfree(dma);
+ return 0;
+}
+
+/*
+ * CA0132 chip DSP image segment stuffs
+ */
+struct dsp_image_seg {
+ u32 magic;
+ u32 chip_addr;
+ u32 count;
+ u32 data[0];
+};
+
+static const u32 g_magic_value = 0x4c46584d;
+static const u32 g_chip_addr_magic_value = 0xFFFFFF01;
+
+static bool is_valid(const struct dsp_image_seg *p)
+{
+ return p->magic == g_magic_value;
+}
+
+static bool is_hci_prog_list_seg(const struct dsp_image_seg *p)
+{
+ return g_chip_addr_magic_value == p->chip_addr;
+}
+
+static bool is_last(const struct dsp_image_seg *p)
+{
+ return p->count == 0;
+}
+
+static size_t dsp_sizeof(const struct dsp_image_seg *p)
+{
+ return sizeof(*p) + p->count*sizeof(u32);
+}
+
+static const struct dsp_image_seg *get_next_seg_ptr(
+ const struct dsp_image_seg *p)
+{
+ return (struct dsp_image_seg *)((unsigned char *)(p) + dsp_sizeof(p));
+}
+
+/*
+ * CA0132 chip DSP trannsfer stuffs. For DSP download.
+ */
+#define INVALID_DMA_CHANNEL (~0UL)
+
+static int dspxfr_hci_write(struct hda_codec *codec,
+ const struct dsp_image_seg *fls)
+{
+ int status = CT_OK;
+ const u32 *data;
+ unsigned int count;
+
+ CTASSERT(fls != NULL && fls->chip_addr == g_chip_addr_magic_value);
+ if (fls == NULL || fls->chip_addr != g_chip_addr_magic_value)
+ return FAIL_MSG(CT_FAIL, "hci_write invalid params");
+
+ count = fls->count;
+ data = (u32 *)(fls->data);
+ while (SUCCEEDED(status) && count >= 2) {
+ status = chipio_write(codec, data[0], data[1]);
+ if (FAILED(status))
+ status = FAIL_MSG(status, "hci_write chipio failed");
+ count -= 2;
+ data += 2;
+ }
+ return status;
+}
+
+static int dspxfr_one_seg(struct hda_codec *codec,
+ const struct dsp_image_seg *fls,
+ unsigned int reloc,
+ struct dma_engine *dma_engine,
+ unsigned int dma_chan,
+ unsigned int port_map_mask,
+ bool ovly)
+{
+ int status = CT_OK;
+ bool comm_dma_setup_done = false;
+ const unsigned int *data;
+ unsigned int chip_addx;
+ unsigned int words_to_write;
+ unsigned int buffer_size_words;
+ unsigned int *buffer_addx;
+ unsigned short hda_format;
+ unsigned int sample_rate_div;
+ unsigned int sample_rate_mul;
+ unsigned int num_chans;
+ unsigned int hda_frame_size_words;
+ unsigned int remainder_words;
+ const u32 *data_remainder;
+ u32 chip_addx_remainder;
+ unsigned int run_size_words;
+ const struct dsp_image_seg *hci_write = NULL;
+ int retry;
+
+ CTASSERT(fls != NULL);
+ if (fls == NULL)
+ return CT_FAIL;
+ if (is_hci_prog_list_seg(fls)) {
+ hci_write = fls;
+ fls = get_next_seg_ptr(fls);
+ }
+
+ if (hci_write && (!fls || is_last(fls))) {
+ CA0132_LOG("hci_write\n");
+ return dspxfr_hci_write(codec, hci_write);
+ }
+
+ if (fls == NULL || dma_engine == NULL || port_map_mask == 0) {
+ CA0132_LOG("Invalid Params\n");
+ return CT_FAIL;
+ }
+
+ data = fls->data;
+ chip_addx = fls->chip_addr,
+ words_to_write = fls->count;
+
+ if (!words_to_write)
+ return hci_write ? dspxfr_hci_write(codec, hci_write) : CT_OK;
+ if (reloc)
+ chip_addx = (chip_addx & (0xFFFF0000 << 2)) + (reloc << 2);
+
+ if (!UC_RANGE(chip_addx, words_to_write) &&
+ !X_RANGE_ALL(chip_addx, words_to_write) &&
+ !Y_RANGE_ALL(chip_addx, words_to_write)) {
+ CA0132_LOG("Invalid chip_addx Params\n");
+ return CT_FAIL;
+ }
+
+ buffer_size_words = (unsigned int)dma_get_buffer_size(dma_engine) /
+ sizeof(u32);
+
+ buffer_addx = dma_get_buffer_addr(dma_engine);
+
+ if (buffer_addx == NULL)
+ status = FAIL_MSG(CT_FAIL, "dma_engine buffer NULL");
+
+ dma_get_converter_format(dma_engine, &hda_format);
+ sample_rate_div = ((get_hdafmt_rate(hda_format) >> 0) & 3) + 1;
+ sample_rate_mul = ((get_hdafmt_rate(hda_format) >> 3) & 3) + 1;
+ num_chans = get_hdafmt_chs(hda_format) + 1;
+
+ hda_frame_size_words = ((sample_rate_div == 0) ? 0 :
+ (num_chans * sample_rate_mul / sample_rate_div));
+
+ buffer_size_words = MIN(buffer_size_words, UC_RANGE(chip_addx, 1) ?
+ 65536UL : 32768UL);
+ buffer_size_words -= buffer_size_words % hda_frame_size_words;
+ CA0132_LOG("chpadr=0x%08x frmsz=%u nchan=%u "
+ "rate_mul=%u div=%u bufsz=%u\n",
+ chip_addx, hda_frame_size_words, num_chans,
+ sample_rate_mul, sample_rate_div, buffer_size_words);
+
+ CTASSERT(SUCCEEDED(status));
+ CTASSERT(buffer_addx != NULL);
+ CTASSERT(buffer_size_words >= hda_frame_size_words);
+ CTASSERT(hda_frame_size_words > 0);
+
+ if ((buffer_addx == NULL) || (hda_frame_size_words == 0) ||
+ (buffer_size_words < hda_frame_size_words)) {
+ status = FAIL_MSG(CT_FAIL, "dspxfr_one_seg:failed");
+ }
+
+ if (FAILED(status))
+ return status;
+
+ remainder_words = words_to_write % hda_frame_size_words;
+ data_remainder = data;
+ chip_addx_remainder = chip_addx;
+
+ data += remainder_words;
+ chip_addx += remainder_words*sizeof(u32);
+ words_to_write -= remainder_words;
+
+ while ((words_to_write != 0) && SUCCEEDED(status)) {
+ run_size_words = MIN(buffer_size_words, words_to_write);
+ CA0132_LOG("dspxfr (seg loop)cnt=%u rs=%u remainder=%u\n",
+ words_to_write, run_size_words, remainder_words);
+ dma_set_state(dma_engine, DMA_STATE_STOP);
+ dma_xfer(dma_engine, data, run_size_words*sizeof(u32));
+ if (!comm_dma_setup_done && SUCCEEDED(status)) {
+ status = dsp_dma_stop(codec, dma_chan, ovly);
+ if (SUCCEEDED(status))
+ status = dsp_dma_setup_common(codec, chip_addx,
+ dma_chan, port_map_mask, ovly);
+ comm_dma_setup_done = true;
+ }
+
+ if (SUCCEEDED(status))
+ status = dsp_dma_setup(codec, chip_addx,
+ run_size_words, dma_chan);
+ if (SUCCEEDED(status))
+ status = dsp_dma_start(codec, dma_chan, ovly);
+ if (SUCCEEDED(status) && !dsp_is_dma_active(codec, dma_chan))
+ status = FAIL_MSG(CT_FAIL, "dspxfr:DMA did not start");
+ if (SUCCEEDED(status))
+ status = dma_set_state(dma_engine, DMA_STATE_RUN);
+ if (SUCCEEDED(status)) {
+ if (remainder_words != 0) {
+ status = chipio_write_multiple(codec,
+ chip_addx_remainder,
+ data_remainder,
+ remainder_words);
+ remainder_words = 0;
+ }
+ if (hci_write) {
+ status = dspxfr_hci_write(codec, hci_write);
+ hci_write = NULL;
+ }
+ retry = 5000;
+ while (dsp_is_dma_active(codec, dma_chan)) {
+ if (--retry <= 0)
+ break;
+ }
+ CA0132_DSP_LOG("+++++ DMA complete");
+ dma_set_state(dma_engine, DMA_STATE_STOP);
+ dma_set_state(dma_engine, DMA_STATE_RESET);
+ }
+
+ CTASSERT(run_size_words <= words_to_write);
+ data += run_size_words;
+ chip_addx += run_size_words*sizeof(u32);
+ words_to_write -= run_size_words;
+ }
+
+ if (SUCCEEDED(status) && (remainder_words != 0)) {
+ status = chipio_write_multiple(codec, chip_addx_remainder,
+ data_remainder, remainder_words);
+ }
+
+ return status;
+}
+
+static int dspxfr_image(struct hda_codec *codec,
+ const struct dsp_image_seg *fls_data,
+ unsigned int reloc, struct hda_stream_format *format,
+ bool ovly)
+{
+ int status = CT_OK;
+ unsigned short hda_format = 0;
+ unsigned int response;
+ unsigned char stream_id = 0;
+ struct dma_engine *dma_engine;
+ unsigned int dma_chan;
+ unsigned int port_map_mask;
+ unsigned int buf_size;
+
+ CTASSERT(fls_data != NULL);
+ if (fls_data == NULL)
+ return CT_FAIL;
+
+ buf_size = ovly ? DSP_DMA_WRITE_BUFLEN_OVLY : DSP_DMA_WRITE_BUFLEN_INIT;
+ status = dma_init(codec, &dma_engine, format, &hda_format, buf_size);
+
+ if (FAILED(status))
+ return CT_FAIL;
+
+ dma_chan = 0;
+ do {
+ status = codec_set_converter_format(codec, WIDGET_CHIP_CTRL,
+ hda_format, &response);
+ if (FAILED(status)) {
+ status = FAIL_MSG(status, "set converter format fail");
+ break;
+ }
+
+ status = dma_prepare(dma_engine);
+ if (FAILED(status))
+ break;
+
+ if (ovly) {
+ status = dspio_alloc_dma_chan(codec, &dma_chan);
+ if (FAILED(status)) {
+ status = FAIL_MSG(status, "alloc dmachan fail");
+ dma_chan = INVALID_DMA_CHANNEL;
+ break;
+ }
+ }
+
+ port_map_mask = 0;
+ status = dsp_allocate_ports_format(codec, hda_format,
+ &port_map_mask);
+ if (FAILED(status)) {
+ status = FAIL_MSG(status, "alloc parts fail");
+ break;
+ }
+
+ stream_id = dma_get_stream_id(dma_engine);
+ status = codec_set_converter_stream_channel(codec,
+ WIDGET_CHIP_CTRL, stream_id, 0, &response);
+ if (FAILED(status)) {
+ status = FAIL_MSG(status, "set stream chan fail");
+ break;
+ }
+
+ while (SUCCEEDED(status) && (fls_data != NULL) &&
+ !is_last(fls_data)) {
+ if (!is_valid(fls_data)) {
+ status = FAIL_MSG(CT_FAIL, "FLS check fail");
+ break;
+ }
+ status = dspxfr_one_seg(codec, fls_data, reloc,
+ dma_engine, dma_chan,
+ port_map_mask, ovly);
+ if (is_hci_prog_list_seg(fls_data))
+ fls_data = get_next_seg_ptr(fls_data);
+
+ CTASSERT(fls_data != NULL);
+ if ((fls_data != NULL) && !is_last(fls_data))
+ fls_data = get_next_seg_ptr(fls_data);
+
+ CTASSERT(fls_data != NULL);
+ }
+
+ if (port_map_mask != 0)
+ status = dsp_free_ports(codec);
+
+ if (FAILED(status))
+ break;
+
+ status = codec_set_converter_stream_channel(codec,
+ WIDGET_CHIP_CTRL, 0, 0, &response);
+ } while (0);
+
+ if (ovly && (dma_chan != INVALID_DMA_CHANNEL))
+ status = dspio_free_dma_chan(codec, dma_chan);
+
+ status = dma_set_state(dma_engine, DMA_STATE_RESET);
+ if (FAILED(status))
+ status = FAIL_MSG(status, "dma set state Reset fail");
+
+ status = dma_free_buffer(dma_engine);
+ if (FAILED(status))
+ status = FAIL_MSG(status, "dma free buffer fail");
+
+ dma_exit(dma_engine);
+
+ return status;
+}
+
+/*
+ * CA0132 DSP download stuffs.
+ */
+static void dspload_post_setup(struct hda_codec *codec)
+{
+ CA0132_DSP_LOG("---- dspload_post_setup ------");
+
+ /*set DSP speaker to 2.0 configuration*/
+ chipio_write(codec, XRAM_XRAM_INST_OFFSET(0x18), 0x08080080);
+ chipio_write(codec, XRAM_XRAM_INST_OFFSET(0x19), 0x3f800000);
+
+ /*update write pointer*/
+ chipio_write(codec, XRAM_XRAM_INST_OFFSET(0x29), 0x00000002);
+}
+
+static int dspload_image(struct hda_codec *codec,
+ const struct dsp_image_seg *fls,
+ bool ovly,
+ unsigned int reloc,
+ bool autostart,
+ int router_chans)
+{
+ int status = CT_OK;
+ struct hda_stream_format stream_format;
+
+ CA0132_DSP_LOG("---- dspload_image begin ------");
+ if (router_chans == 0) {
+ if (!ovly)
+ router_chans = DMA_TRANSFER_FRAME_SIZE_NWORDS;
+ else
+ router_chans = DMA_OVERLAY_FRAME_SIZE_NWORDS;
+ }
+
+ stream_format.sample_rate = 48000;
+ stream_format.number_channels = (unsigned short)router_chans;
+
+ while (stream_format.number_channels > 16) {
+ stream_format.sample_rate *= 2;
+ stream_format.number_channels /= 2;
+ }
+
+ stream_format.container_size = 32;
+ stream_format.valid_bits_per_sample = 32;
+
+ do {
+ CA0132_DSP_LOG("Ready to program DMA");
+ if (!ovly)
+ status = dsp_reset(codec);
+
+ if (FAILED(status))
+ break;
+
+ CA0132_DSP_LOG("dsp_reset() complete");
+ status = dspxfr_image(codec, fls, reloc, &stream_format, ovly);
+
+ if (FAILED(status))
+ break;
+
+ CA0132_DSP_LOG("dspxfr_image() complete");
+ if (autostart && !ovly) {
+ dspload_post_setup(codec);
+ status = dsp_set_run_state(codec);
+ }
+
+ CA0132_DSP_LOG("LOAD FINISHED");
+ } while (0);
+
+ return status;
+}
+
+static int dspload_get_speakereq_addx(struct hda_codec *codec,
+ unsigned int *x,
+ unsigned int *y)
+{
+ int status = CT_OK;
+ struct { unsigned short x, y; } speakereq_info;
+ unsigned int size = sizeof(speakereq_info);
+
+ CA0132_DSP_LOG("dspload_get_speakereq_addx() -- begin");
+ status = dspio_scp(codec, MASTERCONTROL,
+ MASTERCONTROL_QUERY_SPEAKER_EQ_ADDRESS,
+ SCP_GET, NULL, 0, &speakereq_info, &size);
+
+ if (FAILED(status)) {
+ CA0132_DSP_LOG("dspload_get_speakereq_addx: SCP Failed");
+ return CT_FAIL;
+ }
+
+ *x = speakereq_info.x;
+ *y = speakereq_info.y;
+ CA0132_LOG("dspload_get_speakereq_addx: X=0x%x Y=0x%x\n", *x, *y);
+
+ CA0132_DSP_LOG("dspload_get_speakereq_addx() -- complete");
+
+ return status;
+}
+
+static int dspload_speakereq(struct hda_codec *codec)
+{
+ int status = CT_OK;
+ const struct dsp_image_seg *image_x, *image_y;
+ unsigned int x, y;
+
+ CA0132_DSP_LOG("dspload_speakereq() -- begin");
+
+ image_x = (struct dsp_image_seg *)Speaker_EQ_X;
+ image_y = (struct dsp_image_seg *)Speaker_EQ_Y;
+
+ status = dspload_get_speakereq_addx(codec, &x, &y);
+ if (FAILED(status))
+ return CT_FAIL;
+
+ status = dspload_image(codec, image_x, 1, x, 0, 8);
+ if (FAILED(status))
+ return CT_FAIL;
+
+ status = dspload_image(codec, image_y, 1, y, 0, 8);
+ if (FAILED(status))
+ return CT_FAIL;
+
+ CA0132_DSP_LOG("dspload_speakereq() -- complete");
+
+ return status;
+}
+
+static bool dspload_is_loaded(struct hda_codec *codec)
+{
+ unsigned int data = 0;
+ int status = CT_OK;
+
+ status = chipio_read(codec, 0x40004, &data);
+ if (FAILED(status) || (data != 1))
+ return false;
+
+ return true;
+}
+
+static bool dspload_wait_loaded(struct hda_codec *codec)
+{
+ int retry = 100;
+
+ do {
+ msleep(20);
+ if (dspload_is_loaded(codec)) {
+ printk(KERN_INFO "DOWNLOAD OK :-) DSP IS RUNNING.\n");
+ return true;
+ }
+ } while (--retry);
+
+ printk(KERN_ERR "DOWNLOAD FAILED!!! DSP IS NOT RUNNING.\n");
+ return false;
+}
+
+/*
+ * PCM stuffs.
+ */
+static void ca0132_setup_stream(struct hda_codec *codec, hda_nid_t nid,
+ u32 stream_tag,
+ int channel_id, int format)
+{
+ unsigned int oldval, newval;
+
+ if (!nid)
+ return;
+
+ CA0132_LOG("ca0132_setup_stream: "
+ "NID=0x%x, stream=0x%x, channel=%d, format=0x%x\n",
+ nid, stream_tag, channel_id, format);
+
+ /* update the format-id if changed */
+ oldval = snd_hda_codec_read(codec, nid, 0,
+ AC_VERB_GET_STREAM_FORMAT, 0);
+ if (oldval != format) {
+ msleep(20);
+ snd_hda_codec_write(codec, nid, 0,
+ AC_VERB_SET_STREAM_FORMAT,
+ format);
+ }
+
+ oldval = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_CONV, 0);
+ newval = (stream_tag << 4) | channel_id;
+ if (oldval != newval) {
+ snd_hda_codec_write(codec, nid, 0,
+ AC_VERB_SET_CHANNEL_STREAMID,
+ newval);
+ }
+}
+
+static void ca0132_cleanup_stream(struct hda_codec *codec, hda_nid_t nid)
+{
+ unsigned int val;
+
+ if (!nid)
+ return;
+
+ CA0132_LOG("ca0132_cleanup_stream: NID=0x%x\n", nid);
+
+ val = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_CONV, 0);
+ if (!val)
+ return;
+
+ snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_STREAM_FORMAT, 0);
+ snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CHANNEL_STREAMID, 0);
+}
+
+/*
+ * PCM playbacks
+ */
+
+static int ca0132_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
+ struct hda_codec *codec,
+ unsigned int stream_tag,
+ unsigned int format,
+ struct snd_pcm_substream *substream)
+{
+ struct ca0132_spec *spec = codec->spec;
+
+ if (spec->dsp_state == DSP_DOWNLOADING) {
+ spec->dsp_stream_id = stream_tag;
+ return 0;
+ }
+
+ ca0132_setup_stream(codec, spec->dacs[0], stream_tag, 0, format);
+ return 0;
+}
+
+static int ca0132_playback_pcm_cleanup(struct hda_pcm_stream *hinfo,
+ struct hda_codec *codec,
+ struct snd_pcm_substream *substream)
+{
+ struct ca0132_spec *spec = codec->spec;
+
+ if (spec->dsp_state == DSP_DOWNLOADING)
+ return 0;
+
+ ca0132_cleanup_stream(codec, spec->dacs[0]);
+ return 0;
+}
+
+/*
+ * PCM capture
+ */
+
+static int ca0132_capture_pcm_prepare(struct hda_pcm_stream *hinfo,
+ struct hda_codec *codec,
+ unsigned int stream_tag,
+ unsigned int format,
+ struct snd_pcm_substream *substream)
+{
+ struct ca0132_spec *spec = codec->spec;
+
+ if (spec->dsp_state == DSP_DOWNLOADING)
+ return 0;
+
+ ca0132_setup_stream(codec, hinfo->nid, stream_tag, 0, format);
+ return 0;
+}
+
+static int ca0132_capture_pcm_cleanup(struct hda_pcm_stream *hinfo,
+ struct hda_codec *codec,
+ struct snd_pcm_substream *substream)
+{
+ struct ca0132_spec *spec = codec->spec;
+
+ if (spec->dsp_state == DSP_DOWNLOADING)
+ return 0;
+
+ ca0132_cleanup_stream(codec, hinfo->nid);
+ return 0;
+}
+
+
+/*
+ * Controls stuffs.
+ */
+
+/*
+ * Mixer controls helpers.
+ */
+#define CA0132_CODEC_VOL_MONO(xname, nid, channel, dir) \
+ { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
+ .name = xname, \
+ .subdevice = HDA_SUBDEV_AMP_FLAG, \
+ .access = SNDRV_CTL_ELEM_ACCESS_READWRITE | \
+ SNDRV_CTL_ELEM_ACCESS_TLV_READ | \
+ SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK, \
+ .info = ca0132_volume_info, \
+ .get = ca0132_volume_get, \
+ .put = ca0132_volume_put, \
+ .tlv = { .c = ca0132_volume_tlv }, \
+ .private_value = HDA_COMPOSE_AMP_VAL(nid, channel, 0, dir) }
+
+#define CA0132_CODEC_MUTE_MONO(xname, nid, channel, dir) \
+ { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
+ .name = xname, \
+ .subdevice = HDA_SUBDEV_AMP_FLAG, \
+ .info = snd_hda_mixer_amp_switch_info, \
+ .get = ca0132_switch_get, \
+ .put = ca0132_switch_put, \
+ .private_value = HDA_COMPOSE_AMP_VAL(nid, channel, 0, dir) }
+
+/* stereo */
+#define CA0132_CODEC_VOL(xname, nid, dir) \
+ CA0132_CODEC_VOL_MONO(xname, nid, 3, dir)
+#define CA0132_CODEC_MUTE(xname, nid, dir) \
+ CA0132_CODEC_MUTE_MONO(xname, nid, 3, dir)
+
+
+/* The followings are for tuning of products */
+#ifdef ENABLE_TUNING_CONTROLS
+
+static float voice_focus_vals_lookup[] = {
+20.00, 21.00, 22.00, 23.00, 24.00, 25.00, 26.00, 27.00, 28.00, 29.00,
+30.00, 31.00, 32.00, 33.00, 34.00, 35.00, 36.00, 37.00, 38.00, 39.00,
+40.00, 41.00, 42.00, 43.00, 44.00, 45.00, 46.00, 47.00, 48.00, 49.00,
+50.00, 51.00, 52.00, 53.00, 54.00, 55.00, 56.00, 57.00, 58.00, 59.00,
+60.00, 61.00, 62.00, 63.00, 64.00, 65.00, 66.00, 67.00, 68.00, 69.00,
+70.00, 71.00, 72.00, 73.00, 74.00, 75.00, 76.00, 77.00, 78.00, 79.00,
+80.00, 81.00, 82.00, 83.00, 84.00, 85.00, 86.00, 87.00, 88.00, 89.00,
+90.00, 91.00, 92.00, 93.00, 94.00, 95.00, 96.00, 97.00, 98.00, 99.00,
+100.00, 101.00, 102.00, 103.00, 104.00, 105.00, 106.00, 107.00, 108.00, 109.00,
+110.00, 111.00, 112.00, 113.00, 114.00, 115.00, 116.00, 117.00, 118.00, 119.00,
+120.00, 121.00, 122.00, 123.00, 124.00, 125.00, 126.00, 127.00, 128.00, 129.00,
+130.00, 131.00, 132.00, 133.00, 134.00, 135.00, 136.00, 137.00, 138.00, 139.00,
+140.00, 141.00, 142.00, 143.00, 144.00, 145.00, 146.00, 147.00, 148.00, 149.00,
+150.00, 151.00, 152.00, 153.00, 154.00, 155.00, 156.00, 157.00, 158.00, 159.00,
+160.00, 161.00, 162.00, 163.00, 164.00, 165.00, 166.00, 167.00, 168.00, 169.00,
+170.00, 171.00, 172.00, 173.00, 174.00, 175.00, 176.00, 177.00, 178.00, 179.00,
+180.00
+};
+
+static float mic_svm_vals_lookup[] = {
+0.00, 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09,
+0.10, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19,
+0.20, 0.21, 0.22, 0.23, 0.24, 0.25, 0.26, 0.27, 0.28, 0.29,
+0.30, 0.31, 0.32, 0.33, 0.34, 0.35, 0.36, 0.37, 0.38, 0.39,
+0.40, 0.41, 0.42, 0.43, 0.44, 0.45, 0.46, 0.47, 0.48, 0.49,
+0.50, 0.51, 0.52, 0.53, 0.54, 0.55, 0.56, 0.57, 0.58, 0.59,
+0.60, 0.61, 0.62, 0.63, 0.64, 0.65, 0.66, 0.67, 0.68, 0.69,
+0.70, 0.71, 0.72, 0.73, 0.74, 0.75, 0.76, 0.77, 0.78, 0.79,
+0.80, 0.81, 0.82, 0.83, 0.84, 0.85, 0.86, 0.87, 0.88, 0.89,
+0.90, 0.91, 0.92, 0.93, 0.94, 0.95, 0.96, 0.97, 0.98, 0.99,
+1.00
+};
+
+static float equalizer_vals_lookup[] = {
+-24.00, -23.00, -22.00, -21.00, -20.00,
+-19.00, -18.00, -17.00, -16.00, -15.00, -14.00, -13.00, -12.00, -11.00, -10.00,
+-9.00, -8.00, -7.00, -6.00, -5.00, -4.00, -3.00, -2.00, -1.00, 00.00,
+1.00, 2.00, 3.00, 4.00, 5.00, 6.00, 7.00, 8.00, 9.00, 10.00,
+11.00, 12.00, 13.00, 14.00, 15.00, 16.00, 17.00, 18.00, 19.00, 20.00,
+21.00, 22.00, 23.00, 24.00
+};
+
+static int tuning_ctl_set(struct hda_codec *codec, hda_nid_t nid,
+ float *lookup, int idx)
+{
+ int i = 0;
+
+ for (i = 0; i < TUNING_CTLS_COUNT; i++)
+ if (nid == ca0132_tuning_ctls[i].nid)
+ break;
+
+ snd_hda_power_up(codec);
+ dspio_set_param(codec, ca0132_tuning_ctls[i].mid,
+ ca0132_tuning_ctls[i].req,
+ &(lookup[idx]), sizeof(float));
+ snd_hda_power_down(codec);
+
+ return 1;
+}
+
+static int tuning_ctl_get(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
+ struct ca0132_spec *spec = codec->spec;
+ hda_nid_t nid = get_amp_nid(kcontrol);
+ long *valp = ucontrol->value.integer.value;
+ int idx = nid - TUNING_CTL_START_NID;
+
+ *valp = spec->cur_ctl_vals[idx];
+ return 0;
+}
+
+static int voice_focus_ctl_info(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_info *uinfo)
+{
+ int chs = get_amp_channels(kcontrol);
+ uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
+ uinfo->count = chs == 3 ? 2 : 1;
+ uinfo->value.integer.min = 20;
+ uinfo->value.integer.max = 180;
+ uinfo->value.integer.step = 1;
+
+ return 0;
+}
+
+static int voice_focus_ctl_put(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
+ struct ca0132_spec *spec = codec->spec;
+ hda_nid_t nid = get_amp_nid(kcontrol);
+ long *valp = ucontrol->value.integer.value;
+ int idx;
+
+ idx = nid - TUNING_CTL_START_NID;
+ /* any change? */
+ if (spec->cur_ctl_vals[idx] == *valp)
+ return 0;
+
+ spec->cur_ctl_vals[idx] = *valp;
+
+ idx = *valp - 20;
+ tuning_ctl_set(codec, nid, voice_focus_vals_lookup, idx);
+
+ return 1;
+}
+
+static int mic_svm_ctl_info(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_info *uinfo)
+{
+ int chs = get_amp_channels(kcontrol);
+ uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
+ uinfo->count = chs == 3 ? 2 : 1;
+ uinfo->value.integer.min = 0;
+ uinfo->value.integer.max = 100;
+ uinfo->value.integer.step = 1;
+
+ return 0;
+}
+
+static int mic_svm_ctl_put(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
+ struct ca0132_spec *spec = codec->spec;
+ hda_nid_t nid = get_amp_nid(kcontrol);
+ long *valp = ucontrol->value.integer.value;
+ int idx;
+
+ idx = nid - TUNING_CTL_START_NID;
+ /* any change? */
+ if (spec->cur_ctl_vals[idx] == *valp)
+ return 0;
+
+ spec->cur_ctl_vals[idx] = *valp;
+
+ idx = *valp;
+ tuning_ctl_set(codec, nid, mic_svm_vals_lookup, idx);
+
+ return 0;
+}
+
+static int equalizer_ctl_info(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_info *uinfo)
+{
+ int chs = get_amp_channels(kcontrol);
+ uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
+ uinfo->count = chs == 3 ? 2 : 1;
+ uinfo->value.integer.min = 0;
+ uinfo->value.integer.max = 48;
+ uinfo->value.integer.step = 1;
+
+ return 0;
+}
+
+static int equalizer_ctl_put(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
+ struct ca0132_spec *spec = codec->spec;
+ hda_nid_t nid = get_amp_nid(kcontrol);
+ long *valp = ucontrol->value.integer.value;
+ int idx;
+
+ idx = nid - TUNING_CTL_START_NID;
+ /* any change? */
+ if (spec->cur_ctl_vals[idx] == *valp)
+ return 0;
+
+ spec->cur_ctl_vals[idx] = *valp;
+
+ idx = *valp;
+ tuning_ctl_set(codec, nid, equalizer_vals_lookup, idx);
+
+ return 1;
+}
+
+DECLARE_TLV_DB_SCALE(voice_focus_db_scale, 2000, 100, 0);
+DECLARE_TLV_DB_SCALE(eq_db_scale, -2400, 100, 0);
+
+static int add_tuning_control(struct hda_codec *codec,
+ hda_nid_t pnid, hda_nid_t nid,
+ const char *name, int dir)
+{
+ char namestr[44];
+ int type = dir ? HDA_INPUT : HDA_OUTPUT;
+ struct snd_kcontrol_new knew =
+ HDA_CODEC_VOLUME_MONO(namestr, nid, 1, 0, type);
+
+ knew.access = SNDRV_CTL_ELEM_ACCESS_READWRITE |
+ SNDRV_CTL_ELEM_ACCESS_TLV_READ;
+ knew.tlv.c = 0;
+ knew.tlv.p = 0;
+ switch (pnid) {
+ case VOICE_FOCUS:
+ knew.info = voice_focus_ctl_info;
+ knew.get = tuning_ctl_get;
+ knew.put = voice_focus_ctl_put;
+ knew.tlv.p = voice_focus_db_scale;
+ break;
+ case MIC_SVM:
+ knew.info = mic_svm_ctl_info;
+ knew.get = tuning_ctl_get;
+ knew.put = mic_svm_ctl_put;
+ break;
+ case EQUALIZER:
+ knew.info = equalizer_ctl_info;
+ knew.get = tuning_ctl_get;
+ knew.put = equalizer_ctl_put;
+ knew.tlv.p = eq_db_scale;
+ break;
+ default:
+ return 0;
+ }
+ knew.private_value =
+ HDA_COMPOSE_AMP_VAL(nid, 1, 0, type);
+ sprintf(namestr, "%s %s Volume", name, dirstr[dir]);
+ return snd_hda_ctl_add(codec, nid, snd_ctl_new1(&knew, codec));
+}
+
+static int add_tuning_ctls(struct hda_codec *codec)
+{
+ int i;
+ int err;
+
+ for (i = 0; i < TUNING_CTLS_COUNT; i++) {
+ err = add_tuning_control(codec,
+ ca0132_tuning_ctls[i].parent_nid,
+ ca0132_tuning_ctls[i].nid,
+ ca0132_tuning_ctls[i].name,
+ ca0132_tuning_ctls[i].direct);
+ if (err < 0)
+ return err;
+ }
+
+ return 0;
+}
+
+static void ca0132_init_tuning_defaults(struct hda_codec *codec)
+{
+ struct ca0132_spec *spec = codec->spec;
+ int i;
+
+ /* Wedge Angle defaults to 30. 10 below is 30 - 20. 20 is min. */
+ spec->cur_ctl_vals[WEDGE_ANGLE - TUNING_CTL_START_NID] = 10;
+ /* SVM level defaults to 0.74. */
+ spec->cur_ctl_vals[SVM_LEVEL - TUNING_CTL_START_NID] = 74;
+
+ /* EQ defaults to 0dB. */
+ for (i = 2; i < TUNING_CTLS_COUNT; i++)
+ spec->cur_ctl_vals[i] = 24;
+}
+#endif
+
+static void ca0132_apply_vnode_settings(struct hda_codec *codec,
+ hda_nid_t vnid,
+ hda_nid_t shared_nid, int type)
+{
+ struct ca0132_spec *spec = codec->spec;
+ int val;
+
+ /* apply selected volume and switch */
+ val = (int)spec->vnode_lvol[vnid - VNODE_START_NID];
+ snd_hda_codec_amp_update(codec, shared_nid, 0,
+ type, 0, HDA_AMP_VOLMASK, val);
+
+ val = (int)spec->vnode_rvol[vnid - VNODE_START_NID];
+ snd_hda_codec_amp_update(codec, shared_nid, 1,
+ type, 0, HDA_AMP_VOLMASK, val);
+
+ val = (int)spec->vnode_lswitch[vnid - VNODE_START_NID];
+ snd_hda_codec_amp_update(codec, shared_nid, 0,
+ type, 0, HDA_AMP_MUTE,
+ val ? 0 : HDA_AMP_MUTE);
+
+ val = (int)spec->vnode_rswitch[vnid - VNODE_START_NID];
+ snd_hda_codec_amp_update(codec, shared_nid, 1,
+ type, 0, HDA_AMP_MUTE,
+ val ? 0 : HDA_AMP_MUTE);
+}
+
+static int ca0132_select_out(struct hda_codec *codec)
+{
+ struct ca0132_spec *spec = codec->spec;
+ unsigned int pin_ctl;
+ int jack_present;
+ unsigned int tmp;
+ int err;
+
+ CA0132_LOG("ca0132_select_out\n");
+
+ snd_hda_power_up(codec);
+
+#ifdef ENABLE_MANUAL_SELECT
+ jack_present = spec->vnode_lswitch[VNID_HP_SEL - VNODE_START_NID];
+#else
+ /* Is headphone jack detected? */
+ jack_present = snd_hda_jack_detect(codec, spec->out_pins[1]);
+#endif
+ if (jack_present)
+ spec->cur_out_type = HEADPHONE_OUT;
+ else
+ spec->cur_out_type = SPEAKER_OUT;
+
+ if (spec->cur_out_type == SPEAKER_OUT) {
+ /*speaker out config*/
+ tmp = FLOAT_ONE;
+ err = dspio_set_param(codec, 0x80, 0x04,
+ &tmp, sizeof(unsigned int));
+ if (err < 0)
+ goto exit;
+ /*enable speaker EQ*/
+ tmp = FLOAT_ONE;
+ err = dspio_set_param(codec, 0x8f, 0x00,
+ &tmp, sizeof(unsigned int));
+ if (err < 0)
+ goto exit;
+ /*speaker EQ bypass attenuation is 0*/
+ tmp = FLOAT_ZERO;
+ err = dspio_set_param(codec, 0x8f, 0x01,
+ &tmp, sizeof(unsigned int));
+ if (err < 0)
+ goto exit;
+
+ /* disable headphone node */
+ pin_ctl = snd_hda_codec_read(codec, spec->out_pins[1], 0,
+ AC_VERB_GET_PIN_WIDGET_CONTROL, 0);
+ snd_hda_codec_write(codec, spec->out_pins[1], 0,
+ AC_VERB_SET_PIN_WIDGET_CONTROL,
+ pin_ctl & 0xBF);
+ /* disable headphone EAPD */
+ snd_hda_codec_write(codec, spec->out_pins[1], 0,
+ AC_VERB_SET_EAPD_BTLENABLE, 0x00);
+
+ /* apply selected volume and switch */
+ ca0132_apply_vnode_settings(codec, VNID_SPK,
+ spec->shared_out_nid, HDA_OUTPUT);
+
+ /* enable speaker node */
+ pin_ctl = snd_hda_codec_read(codec, spec->out_pins[0], 0,
+ AC_VERB_GET_PIN_WIDGET_CONTROL, 0);
+ snd_hda_codec_write(codec, spec->out_pins[0], 0,
+ AC_VERB_SET_PIN_WIDGET_CONTROL,
+ pin_ctl | 0x40);
+ /* enable speaker EAPD */
+ snd_hda_codec_write(codec, spec->out_pins[0], 0,
+ AC_VERB_SET_EAPD_BTLENABLE, 0x02);
+ } else {
+ /*headphone out config*/
+ tmp = FLOAT_ZERO;
+ err = dspio_set_param(codec, 0x80, 0x04,
+ &tmp, sizeof(unsigned int));
+ if (err < 0)
+ goto exit;
+ /*disable speaker EQ*/
+ tmp = FLOAT_ZERO;
+ err = dspio_set_param(codec, 0x8f, 0x00,
+ &tmp, sizeof(unsigned int));
+ if (err < 0)
+ goto exit;
+ /*speaker EQ bypass attenuation is -5.0*/
+ tmp = FLOAT_MINUS_5;
+ err = dspio_set_param(codec, 0x8f, 0x01,
+ &tmp, sizeof(unsigned int));
+ if (err < 0)
+ goto exit;
+
+ /* disable speaker*/
+ pin_ctl = snd_hda_codec_read(codec, spec->out_pins[0], 0,
+ AC_VERB_GET_PIN_WIDGET_CONTROL, 0);
+ snd_hda_codec_write(codec, spec->out_pins[0], 0,
+ AC_VERB_SET_PIN_WIDGET_CONTROL,
+ pin_ctl & 0xBF);
+ /* disable speaker EAPD */
+ snd_hda_codec_write(codec, spec->out_pins[0], 0,
+ AC_VERB_SET_EAPD_BTLENABLE, 0x00);
+
+ /* apply selected volume and switch */
+ ca0132_apply_vnode_settings(codec, VNID_HP,
+ spec->shared_out_nid, HDA_OUTPUT);
+
+ /* enable headphone*/
+ pin_ctl = snd_hda_codec_read(codec, spec->out_pins[1], 0,
+ AC_VERB_GET_PIN_WIDGET_CONTROL, 0);
+ snd_hda_codec_write(codec, spec->out_pins[1], 0,
+ AC_VERB_SET_PIN_WIDGET_CONTROL,
+ pin_ctl | 0x40);
+ /* enable headphone EAPD */
+ snd_hda_codec_write(codec, spec->out_pins[1], 0,
+ AC_VERB_SET_EAPD_BTLENABLE, 0x02);
+ }
+
+exit:
+ snd_hda_power_down(codec);
+
+ return err < 0 ? err : 0;
+}
+
+static void ca0132_set_dmic(struct hda_codec *codec, int enable);
+static int ca0132_mic_boost_set(struct hda_codec *codec, long val);
+static int ca0132_effects_set(struct hda_codec *codec, hda_nid_t nid, long val);
+
+static int ca0132_select_mic(struct hda_codec *codec)
+{
+ struct ca0132_spec *spec = codec->spec;
+ hda_nid_t vnid;
+ int jack_present;
+
+ CA0132_LOG("ca0132_select_mic\n");
+
+ snd_hda_power_up(codec);
+
+#ifdef ENABLE_MANUAL_SELECT
+ jack_present = spec->vnode_lswitch[VNID_AMIC1_SEL - VNODE_START_NID];
+#else
+ /* Is Analog Mic1 jack jack detected? */
+ jack_present = snd_hda_jack_detect(codec, spec->input_pins[0]);
+#endif
+ if (jack_present)
+ spec->cur_mic_type = LINE_MIC_IN;
+ else
+ spec->cur_mic_type = DIGITAL_MIC;
+
+ if (spec->cur_mic_type == DIGITAL_MIC) {
+ /* enable digital Mic */
+ ca0132_set_dmic(codec, 1);
+ ca0132_mic_boost_set(codec, 0);
+ /* set voice focus */
+ ca0132_effects_set(codec, VOICE_FOCUS,
+ spec->effects_switch[VOICE_FOCUS - EFFECT_START_NID]);
+ vnid = VNID_DMIC;
+ } else {
+ /* disable digital Mic */
+ ca0132_set_dmic(codec, 0);
+ ca0132_mic_boost_set(codec, spec->cur_mic_boost);
+ /* disable voice focus */
+ ca0132_effects_set(codec, VOICE_FOCUS, 0);
+ vnid = VNID_AMIC1;
+ }
+
+ /* apply selected volume and switch */
+ ca0132_apply_vnode_settings(codec, vnid,
+ spec->shared_mic_nid, HDA_INPUT);
+
+ snd_hda_power_down(codec);
+
+ return 0;
+}
+
+/*
+ * Check if VNODE settings take effect immediately.
+ */
+static bool ca0132_is_vnode_effective(struct hda_codec *codec,
+ hda_nid_t vnid,
+ hda_nid_t *shared_nid)
+{
+ struct ca0132_spec *spec = codec->spec;
+ hda_nid_t nid;
+ bool effective = false;
+
+ switch (vnid) {
+ case VNID_HP:
+ if (spec->cur_out_type == HEADPHONE_OUT) {
+ nid = spec->shared_out_nid;
+ effective = true;
+ }
+ break;
+ case VNID_SPK:
+ if (spec->cur_out_type == SPEAKER_OUT) {
+ nid = spec->shared_out_nid;
+ effective = true;
+ }
+ break;
+ case VNID_DMIC:
+ if (spec->cur_mic_type == DIGITAL_MIC) {
+ nid = spec->shared_mic_nid;
+ effective = true;
+ }
+ break;
+ case VNID_AMIC1:
+ if (spec->cur_mic_type == LINE_MIC_IN) {
+ nid = spec->shared_mic_nid;
+ effective = true;
+ }
+ break;
+ default:
+ break;
+ }
+
+ if (effective && shared_nid)
+ *shared_nid = nid;
+
+ return effective;
+}
+
+/*
+ * The following functions are control change helpers.
+ * They return 0 if no changed. Return 1 if changed.
+ */
+static int ca0132_voicefx_set(struct hda_codec *codec, int enable)
+{
+ struct ca0132_spec *spec = codec->spec;
+ unsigned int tmp;
+
+ /* based on CrystalVoice state to enable VoiceFX. */
+ if (enable) {
+ tmp = spec->effects_switch[CRYSTAL_VOICE - EFFECT_START_NID] ?
+ FLOAT_ONE : FLOAT_ZERO;
+ } else {
+ tmp = FLOAT_ZERO;
+ }
+
+ dspio_set_param(codec, ca0132_voicefx.mid,
+ ca0132_voicefx.reqs[0], &tmp, sizeof(float));
+
+ return 1;
+}
+
+static int ca0132_effects_set(struct hda_codec *codec, hda_nid_t nid, long val)
+{
+ struct ca0132_spec *spec = codec->spec;
+ unsigned int on;
+ int num_fx = OUT_EFFECTS_COUNT + IN_EFFECTS_COUNT;
+ int err = 0;
+ int idx = nid - EFFECT_START_NID;
+
+ if ((idx < 0) || (idx >= num_fx))
+ return 0; /* no changed */
+
+ /* for out effect, qualify with PE */
+ if ((nid >= OUT_EFFECT_START_NID) && (nid < OUT_EFFECT_END_NID)) {
+ /* if PE if off, turn off out effects. */
+ if (!spec->effects_switch[PLAY_ENHANCEMENT - EFFECT_START_NID])
+ val = 0;
+ }
+
+ /* for in effect, qualify with CrystalVoice */
+ if ((nid >= IN_EFFECT_START_NID) && (nid < IN_EFFECT_END_NID)) {
+ /* if CrystalVoice if off, turn off in effects. */
+ if (!spec->effects_switch[CRYSTAL_VOICE - EFFECT_START_NID])
+ val = 0;
+
+ /* Voice Focus applies to 2-ch Mic, Digital Mic */
+ if ((nid == VOICE_FOCUS) && (spec->cur_mic_type != DIGITAL_MIC))
+ val = 0;
+ }
+
+ CA0132_LOG("ca0132_effect_set: nid=0x%x, val=%ld\n", nid, val);
+
+ on = (val == 0) ? FLOAT_ZERO : FLOAT_ONE;
+ err = dspio_set_param(codec, ca0132_effects[idx].mid,
+ ca0132_effects[idx].reqs[0],
+ &on, sizeof(unsigned int));
+ if (err < 0)
+ return 0; /* no changed */
+
+ return 1;
+}
+
+static int ca0132_pe_switch_set(struct hda_codec *codec)
+{
+ struct ca0132_spec *spec = codec->spec;
+ hda_nid_t nid;
+ int i, ret = 0;
+
+ CA0132_LOG("ca0132_pe_switch_set: val=%ld\n",
+ spec->effects_switch[PLAY_ENHANCEMENT - EFFECT_START_NID]);
+
+ i = OUT_EFFECT_START_NID - EFFECT_START_NID;
+ nid = OUT_EFFECT_START_NID;
+ /* PE affects all out effects */
+ for (; nid < OUT_EFFECT_END_NID; nid++, i++)
+ ret |= ca0132_effects_set(codec, nid, spec->effects_switch[i]);
+
+ return ret;
+}
+
+static int ca0132_cvoice_switch_set(struct hda_codec *codec)
+{
+ struct ca0132_spec *spec = codec->spec;
+ hda_nid_t nid;
+ int i, ret = 0;
+
+ CA0132_LOG("ca0132_cvoice_switch_set: val=%ld\n",
+ spec->effects_switch[CRYSTAL_VOICE - EFFECT_START_NID]);
+
+ i = IN_EFFECT_START_NID - EFFECT_START_NID;
+ nid = IN_EFFECT_START_NID;
+ /* CrystalVoice affects all in effects */
+ for (; nid < IN_EFFECT_END_NID; nid++, i++)
+ ret |= ca0132_effects_set(codec, nid, spec->effects_switch[i]);
+
+ /* including VoiceFX */
+ ret |= ca0132_voicefx_set(codec, (spec->voicefx_val ? 1 : 0));
+ return ret;
+}
+
+static int ca0132_mic_boost_set(struct hda_codec *codec, long val)
+{
+ struct ca0132_spec *spec = codec->spec;
+ int ret = 0;
+
+ if (val) /* on */
+ ret = snd_hda_codec_amp_update(codec, spec->input_pins[0], 0,
+ HDA_INPUT, 0, HDA_AMP_VOLMASK, 3);
+ else /* off */
+ ret = snd_hda_codec_amp_update(codec, spec->input_pins[0], 0,
+ HDA_INPUT, 0, HDA_AMP_VOLMASK, 0);
+
+ return ret;
+}
+
+static int ca0132_vnode_switch_set(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
+ hda_nid_t nid = get_amp_nid(kcontrol);
+ hda_nid_t shared_nid = 0;
+ bool effective;
+ int ret = 0;
+
+#ifdef ENABLE_MANUAL_SELECT
+ if (nid == VNID_HP_SEL) {
+ ca0132_select_out(codec);
+ return 1;
+ }
+
+ if (nid == VNID_AMIC1_SEL) {
+ ca0132_select_mic(codec);
+ return 1;
+ }
+#endif
+
+ /* if effective conditions, then update hw immediately. */
+ effective = ca0132_is_vnode_effective(codec, nid, &shared_nid);
+ if (effective) {
+ int dir = get_amp_direction(kcontrol);
+ int ch = get_amp_channels(kcontrol);
+ unsigned long pval;
+
+ mutex_lock(&codec->control_mutex);
+ pval = kcontrol->private_value;
+ kcontrol->private_value = HDA_COMPOSE_AMP_VAL(shared_nid, ch,
+ 0, dir);
+ ret = snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
+ kcontrol->private_value = pval;
+ mutex_unlock(&codec->control_mutex);
+ }
+
+ return ret;
+}
+/* End of control change helpers. */
+
+static int ca0132_voicefx_info(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_info *uinfo)
+{
+ unsigned int items = sizeof(ca0132_voicefx_presets)
+ / sizeof(struct ct_voicefx_preset);
+
+ uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
+ uinfo->count = 1;
+ uinfo->value.enumerated.items = items;
+ if (uinfo->value.enumerated.item >= items)
+ uinfo->value.enumerated.item = items - 1;
+ strcpy(uinfo->value.enumerated.name,
+ ca0132_voicefx_presets[uinfo->value.enumerated.item].name);
+ return 0;
+}
+
+static int ca0132_voicefx_get(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
+ struct ca0132_spec *spec = codec->spec;
+
+ ucontrol->value.enumerated.item[0] = spec->voicefx_val;
+ return 0;
+}
+
+static int ca0132_voicefx_put(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
+ struct ca0132_spec *spec = codec->spec;
+ int i, err = 0;
+ int sel = ucontrol->value.enumerated.item[0];
+ unsigned int items = sizeof(ca0132_voicefx_presets)
+ / sizeof(struct ct_voicefx_preset);
+
+ if (sel >= items)
+ return 0;
+
+ CA0132_LOG("ca0132_voicefx_put: sel=%d, preset=%s\n",
+ sel, ca0132_voicefx_presets[sel].name);
+
+ /*
+ * Idx 0 is default.
+ * Default needs to qualify with CrystalVoice state.
+ */
+ for (i = 0; i < VOICEFX_MAX_PARAM_COUNT; i++) {
+ err = dspio_set_param(codec, ca0132_voicefx.mid,
+ ca0132_voicefx.reqs[i],
+ &(ca0132_voicefx_presets[sel].vals[i]),
+ sizeof(float));
+ if (err < 0)
+ break;
+ }
+
+ if (err >= 0) {
+ spec->voicefx_val = sel;
+ /* enable voice fx */
+ ca0132_voicefx_set(codec, (sel ? 1 : 0));
+ }
+
+ return 1;
+}
+
+static int ca0132_switch_get(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
+ struct ca0132_spec *spec = codec->spec;
+ hda_nid_t nid = get_amp_nid(kcontrol);
+ int ch = get_amp_channels(kcontrol);
+ long *valp = ucontrol->value.integer.value;
+
+ /* vnode */
+ if ((nid >= VNODE_START_NID) && (nid < VNODE_END_NID)) {
+ if (ch & 1) {
+ *valp = spec->vnode_lswitch[nid - VNODE_START_NID];
+ valp++;
+ }
+ if (ch & 2) {
+ *valp = spec->vnode_rswitch[nid - VNODE_START_NID];
+ valp++;
+ }
+ return 0;
+ }
+
+ /* effects, include PE and CrystalVoice */
+ if ((nid >= EFFECT_START_NID) && (nid < EFFECT_END_NID)) {
+ *valp = spec->effects_switch[nid - EFFECT_START_NID];
+ return 0;
+ }
+
+ /* mic boost */
+ if (nid == spec->input_pins[0]) {
+ *valp = spec->cur_mic_boost;
+ return 0;
+ }
+
+ return 0;
+}
+
+static int ca0132_switch_put(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
+ struct ca0132_spec *spec = codec->spec;
+ hda_nid_t nid = get_amp_nid(kcontrol);
+ int ch = get_amp_channels(kcontrol);
+ long *valp = ucontrol->value.integer.value;
+ int changed = 1;
+
+ CA0132_LOG("ca0132_switch_put: nid=0x%x, val=%ld\n", nid, *valp);
+
+ snd_hda_power_up(codec);
+ /* vnode */
+ if ((nid >= VNODE_START_NID) && (nid < VNODE_END_NID)) {
+ if (ch & 1) {
+ spec->vnode_lswitch[nid - VNODE_START_NID] = *valp;
+ valp++;
+ }
+ if (ch & 2) {
+ spec->vnode_rswitch[nid - VNODE_START_NID] = *valp;
+ valp++;
+ }
+ changed = ca0132_vnode_switch_set(kcontrol, ucontrol);
+ goto exit;
+ }
+
+ /* PE */
+ if (nid == PLAY_ENHANCEMENT) {
+ spec->effects_switch[nid - EFFECT_START_NID] = *valp;
+ changed = ca0132_pe_switch_set(codec);
+ goto exit;
+ }
+
+ /* CrystalVoice */
+ if (nid == CRYSTAL_VOICE) {
+ spec->effects_switch[nid - EFFECT_START_NID] = *valp;
+ changed = ca0132_cvoice_switch_set(codec);
+ goto exit;
+ }
+
+ /* out and in effects */
+ if (((nid >= OUT_EFFECT_START_NID) && (nid < OUT_EFFECT_END_NID)) ||
+ ((nid >= IN_EFFECT_START_NID) && (nid < IN_EFFECT_END_NID))) {
+ spec->effects_switch[nid - EFFECT_START_NID] = *valp;
+ changed = ca0132_effects_set(codec, nid, *valp);
+ goto exit;
+ }
+
+ /* mic boost */
+ if (nid == spec->input_pins[0]) {
+ spec->cur_mic_boost = *valp;
+
+ /* Mic boost does not apply to Digital Mic */
+ if (spec->cur_mic_type != DIGITAL_MIC)
+ changed = ca0132_mic_boost_set(codec, *valp);
+ goto exit;
+ }
+
+exit:
+ snd_hda_power_down(codec);
+ return changed;
+}
+
+/*
+ * Volume related
+ */
+static int ca0132_volume_info(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_info *uinfo)
+{
+ struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
+ struct ca0132_spec *spec = codec->spec;
+ hda_nid_t nid = get_amp_nid(kcontrol);
+ int ch = get_amp_channels(kcontrol);
+ int dir = get_amp_direction(kcontrol);
+ unsigned long pval;
+ int err;
+
+ switch (nid) {
+ case VNID_HP:
+ case VNID_SPK:
+ /* follow shared_out info */
+ nid = spec->shared_out_nid;
+ mutex_lock(&codec->control_mutex);
+ pval = kcontrol->private_value;
+ kcontrol->private_value = HDA_COMPOSE_AMP_VAL(nid, ch, 0, dir);
+ err = snd_hda_mixer_amp_volume_info(kcontrol, uinfo);
+ kcontrol->private_value = pval;
+ mutex_unlock(&codec->control_mutex);
+ break;
+ case VNID_DMIC:
+ case VNID_AMIC1:
+ /* follow shared_mic info */
+ nid = spec->shared_mic_nid;
+ mutex_lock(&codec->control_mutex);
+ pval = kcontrol->private_value;
+ kcontrol->private_value = HDA_COMPOSE_AMP_VAL(nid, ch, 0, dir);
+ err = snd_hda_mixer_amp_volume_info(kcontrol, uinfo);
+ kcontrol->private_value = pval;
+ mutex_unlock(&codec->control_mutex);
+ break;
+ default:
+ err = snd_hda_mixer_amp_volume_info(kcontrol, uinfo);
+ }
+ return err;
+}
+
+static int ca0132_volume_get(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
+ struct ca0132_spec *spec = codec->spec;
+ hda_nid_t nid = get_amp_nid(kcontrol);
+ int ch = get_amp_channels(kcontrol);
+ long *valp = ucontrol->value.integer.value;
+
+ /* store the left and right volume */
+ if (ch & 1) {
+ *valp = spec->vnode_lvol[nid - VNODE_START_NID];
+ valp++;
+ }
+ if (ch & 2) {
+ *valp = spec->vnode_rvol[nid - VNODE_START_NID];
+ valp++;
+ }
+ return 0;
+}
+
+static int ca0132_volume_put(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
+ struct ca0132_spec *spec = codec->spec;
+ hda_nid_t nid = get_amp_nid(kcontrol);
+ int ch = get_amp_channels(kcontrol);
+ long *valp = ucontrol->value.integer.value;
+ hda_nid_t shared_nid = 0;
+ bool effective;
+ int changed = 1;
+
+ /* store the left and right volume */
+ if (ch & 1) {
+ spec->vnode_lvol[nid - VNODE_START_NID] = *valp;
+ valp++;
+ }
+ if (ch & 2) {
+ spec->vnode_rvol[nid - VNODE_START_NID] = *valp;
+ valp++;
+ }
+
+ /* if effective conditions, then update hw immediately. */
+ effective = ca0132_is_vnode_effective(codec, nid, &shared_nid);
+ if (effective) {
+ int dir = get_amp_direction(kcontrol);
+ unsigned long pval;
+
+ snd_hda_power_up(codec);
+ mutex_lock(&codec->control_mutex);
+ pval = kcontrol->private_value;
+ kcontrol->private_value = HDA_COMPOSE_AMP_VAL(shared_nid, ch,
+ 0, dir);
+ changed = snd_hda_mixer_amp_volume_put(kcontrol, ucontrol);
+ kcontrol->private_value = pval;
+ mutex_unlock(&codec->control_mutex);
+ snd_hda_power_down(codec);
+ }
+
+ return changed;
+}
+
+static int ca0132_volume_tlv(struct snd_kcontrol *kcontrol, int op_flag,
+ unsigned int size, unsigned int __user *tlv)
+{
+ struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
+ struct ca0132_spec *spec = codec->spec;
+ hda_nid_t nid = get_amp_nid(kcontrol);
+ int ch = get_amp_channels(kcontrol);
+ int dir = get_amp_direction(kcontrol);
+ unsigned long pval;
+ int err;
+
+ switch (nid) {
+ case VNID_HP:
+ case VNID_SPK:
+ /* follow shared_out tlv */
+ nid = spec->shared_out_nid;
+ mutex_lock(&codec->control_mutex);
+ pval = kcontrol->private_value;
+ kcontrol->private_value = HDA_COMPOSE_AMP_VAL(nid, ch, 0, dir);
+ err = snd_hda_mixer_amp_tlv(kcontrol, op_flag, size, tlv);
+ kcontrol->private_value = pval;
+ mutex_unlock(&codec->control_mutex);
+ break;
+ case VNID_DMIC:
+ case VNID_AMIC1:
+ /* follow shared_mic tlv */
+ nid = spec->shared_mic_nid;
+ mutex_lock(&codec->control_mutex);
+ pval = kcontrol->private_value;
+ kcontrol->private_value = HDA_COMPOSE_AMP_VAL(nid, ch, 0, dir);
+ err = snd_hda_mixer_amp_tlv(kcontrol, op_flag, size, tlv);
+ kcontrol->private_value = pval;
+ mutex_unlock(&codec->control_mutex);
+ break;
+ default:
+ err = snd_hda_mixer_amp_tlv(kcontrol, op_flag, size, tlv);
+ }
+ return err;
+}
+
+static int add_fx_switch(struct hda_codec *codec, hda_nid_t nid,
+ const char *pfx, int dir)
+{
+ char namestr[44];
+ int type = dir ? HDA_INPUT : HDA_OUTPUT;
+ struct snd_kcontrol_new knew =
+ CA0132_CODEC_MUTE_MONO(namestr, nid, 1, type);
+ sprintf(namestr, "%s %s Switch", pfx, dirstr[dir]);
+ return snd_hda_ctl_add(codec, nid, snd_ctl_new1(&knew, codec));
+}
+
+static int add_voicefx(struct hda_codec *codec)
+{
+ struct snd_kcontrol_new knew =
+ HDA_CODEC_MUTE_MONO(ca0132_voicefx.name,
+ VOICEFX, 1, 0, HDA_INPUT);
+ knew.info = ca0132_voicefx_info;
+ knew.get = ca0132_voicefx_get;
+ knew.put = ca0132_voicefx_put;
+ return snd_hda_ctl_add(codec, VOICEFX, snd_ctl_new1(&knew, codec));
+}
+
+/*
+ * When changing Node IDs for Mixer Controls below, make sure to update
+ * Node IDs in ca0132_config() as well.
+ */
+static struct snd_kcontrol_new ca0132_mixer[] = {
+ CA0132_CODEC_VOL("Headphone Playback Volume", VNID_HP, HDA_OUTPUT),
+ CA0132_CODEC_MUTE("Headphone Playback Switch", VNID_HP, HDA_OUTPUT),
+ CA0132_CODEC_VOL("PC Speaker Playback Volume", VNID_SPK, HDA_OUTPUT),
+ CA0132_CODEC_MUTE("PC Speaker Playback Switch", VNID_SPK, HDA_OUTPUT),
+ CA0132_CODEC_VOL("Digital-Mic Capture Volume", VNID_DMIC, HDA_INPUT),
+ CA0132_CODEC_MUTE("Digital-Mic Capture Switch", VNID_DMIC, HDA_INPUT),
+ CA0132_CODEC_VOL("Analog-Mic1 Capture Volume", VNID_AMIC1, HDA_INPUT),
+ CA0132_CODEC_MUTE("Analog-Mic1 Capture Switch", VNID_AMIC1, HDA_INPUT),
+ HDA_CODEC_VOLUME("Analog-Mic2 Capture Volume", 0x08, 0, HDA_INPUT),
+ HDA_CODEC_MUTE("Analog-Mic2 Capture Switch", 0x08, 0, HDA_INPUT),
+ HDA_CODEC_VOLUME("What U Hear Capture Volume", 0x0a, 0, HDA_INPUT),
+ HDA_CODEC_MUTE("What U Hear Capture Switch", 0x0a, 0, HDA_INPUT),
+ CA0132_CODEC_MUTE_MONO("Mic1-Boost (30dB) Capture Switch",
+ 0x12, 1, HDA_INPUT),
+#ifdef ENABLE_MANUAL_SELECT
+ CA0132_CODEC_MUTE_MONO("HP/Speaker Playback Switch",
+ VNID_HP_SEL, 1, HDA_OUTPUT),
+ CA0132_CODEC_MUTE_MONO("AMic1/DMic Capture Switch",
+ VNID_AMIC1_SEL, 1, HDA_INPUT),
+#endif
+ { } /* end */
+};
+
+static int ca0132_build_controls(struct hda_codec *codec)
+{
+ struct ca0132_spec *spec = codec->spec;
+ int i, num_fx;
+ int err = 0;
+
+ /* Add Mixer controls */
+ for (i = 0; i < spec->num_mixers; i++) {
+ err = snd_hda_add_new_ctls(codec, spec->mixers[i]);
+ if (err < 0)
+ return err;
+ }
+
+ /* Add in and out effects controls.
+ * VoiceFX, PE and CrystalVoice are added separately.
+ */
+ num_fx = OUT_EFFECTS_COUNT + IN_EFFECTS_COUNT;
+ for (i = 0; i < num_fx; i++) {
+ err = add_fx_switch(codec, ca0132_effects[i].nid,
+ ca0132_effects[i].name,
+ ca0132_effects[i].direct);
+ if (err < 0)
+ return err;
+ }
+
+ err = add_fx_switch(codec, PLAY_ENHANCEMENT, "PlayEnhancement", 0);
+ if (err < 0)
+ return err;
+
+ err = add_fx_switch(codec, CRYSTAL_VOICE, "CrystalVoice", 1);
+ if (err < 0)
+ return err;
+
+ add_voicefx(codec);
+
+ #ifdef ENABLE_TUNING_CONTROLS
+ add_tuning_ctls(codec);
+ #endif
+
+ return 0;
+}
+
+/*
+ * PCM
+ */
+static struct hda_pcm_stream ca0132_pcm_analog_playback = {
+ .substreams = 1,
+ .channels_min = 2,
+ .channels_max = 6,
+ .ops = {
+ .prepare = ca0132_playback_pcm_prepare,
+ .cleanup = ca0132_playback_pcm_cleanup
+ },
+};
+
+static struct hda_pcm_stream ca0132_pcm_analog_capture = {
+ .substreams = 1,
+ .channels_min = 2,
+ .channels_max = 2,
+ .ops = {
+ .prepare = ca0132_capture_pcm_prepare,
+ .cleanup = ca0132_capture_pcm_cleanup
+ },
+};
+
+static int ca0132_build_pcms(struct hda_codec *codec)
+{
+ struct ca0132_spec *spec = codec->spec;
+ struct hda_pcm *info = spec->pcm_rec;
+
+ codec->pcm_info = info;
+ codec->num_pcms = 0;
+
+ info->name = "CA0132 Playback";
+ info->stream[SNDRV_PCM_STREAM_PLAYBACK] = ca0132_pcm_analog_playback;
+ info->stream[SNDRV_PCM_STREAM_PLAYBACK].nid = spec->dacs[0];
+ info->stream[SNDRV_PCM_STREAM_PLAYBACK].channels_max =
+ spec->multiout.max_channels;
+ codec->num_pcms++;
+
+ info++;
+ info->name = "CA0132 Digital-Mic / Analog-Mic1";
+ info->stream[SNDRV_PCM_STREAM_CAPTURE] = ca0132_pcm_analog_capture;
+ info->stream[SNDRV_PCM_STREAM_CAPTURE].substreams = 1;
+ info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->adcs[0];
+ codec->num_pcms++;
+
+ info++;
+ info->name = "CA0132 Analog Mic-In2";
+ info->stream[SNDRV_PCM_STREAM_CAPTURE] = ca0132_pcm_analog_capture;
+ info->stream[SNDRV_PCM_STREAM_CAPTURE].substreams = 1;
+ info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->adcs[1];
+ codec->num_pcms++;
+
+ info++;
+ info->name = "CA0132 What U Hear";
+ info->stream[SNDRV_PCM_STREAM_CAPTURE] = ca0132_pcm_analog_capture;
+ info->stream[SNDRV_PCM_STREAM_CAPTURE].substreams = 1;
+ info->stream[SNDRV_PCM_STREAM_CAPTURE].nid = spec->adcs[2];
+ codec->num_pcms++;
+
+ return 0;
+}
+
+static void init_output(struct hda_codec *codec, hda_nid_t pin, hda_nid_t dac)
+{
+ if (pin) {
+ snd_hda_codec_write(codec, pin, 0,
+ AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP);
+ if (get_wcaps(codec, pin) & AC_WCAP_OUT_AMP)
+ snd_hda_codec_write(codec, pin, 0,
+ AC_VERB_SET_AMP_GAIN_MUTE,
+ AMP_OUT_UNMUTE);
+ }
+ if (dac)
+ snd_hda_codec_write(codec, dac, 0, AC_VERB_SET_AMP_GAIN_MUTE,
+ AMP_OUT_ZERO);
+}
+
+static void init_input(struct hda_codec *codec, hda_nid_t pin, hda_nid_t adc)
+{
+ if (pin) {
+ snd_hda_codec_write(codec, pin, 0,
+ AC_VERB_SET_PIN_WIDGET_CONTROL,
+ PIN_VREF80);
+ if (get_wcaps(codec, pin) & AC_WCAP_IN_AMP)
+ snd_hda_codec_write(codec, pin, 0,
+ AC_VERB_SET_AMP_GAIN_MUTE,
+ AMP_IN_UNMUTE(0));
+ }
+ if (adc) {
+ snd_hda_codec_write(codec, adc, 0, AC_VERB_SET_AMP_GAIN_MUTE,
+ AMP_IN_UNMUTE(0));
+
+ /* init to 0 dB and unmute. */
+ snd_hda_codec_amp_stereo(codec, adc, HDA_INPUT, 0,
+ HDA_AMP_VOLMASK, 0x5a);
+ snd_hda_codec_amp_stereo(codec, adc, HDA_INPUT, 0,
+ HDA_AMP_MUTE, 0);
+ }
+}
+
+static void refresh_amp_caps(struct hda_codec *codec, hda_nid_t nid, int dir)
+{
+ unsigned int caps;
+
+ caps = snd_hda_param_read(codec, nid, dir == HDA_OUTPUT ?
+ AC_PAR_AMP_OUT_CAP : AC_PAR_AMP_IN_CAP);
+ snd_hda_override_amp_caps(codec, nid, dir, caps);
+}
+
+static void ca0132_set_dmic(struct hda_codec *codec, int enable)
+{
+ struct ca0132_spec *spec = codec->spec;
+ unsigned int tmp;
+ u8 val;
+
+ CA0132_LOG("ca0132_set_dmic: enable=%d\n", enable);
+
+ if (enable) {
+ /* set DMic input as 2-ch */
+ tmp = FLOAT_TWO;
+ dspio_set_param(codec, 0x80, 0x00, &tmp, sizeof(unsigned int));
+
+ val = spec->dmic_ctl;
+ val |= 0x80;
+ snd_hda_codec_write(codec, spec->input_pins[0], 0,
+ VENDOR_CHIPIO_DMIC_CTL_SET, val);
+
+ if (!(spec->dmic_ctl & 0x20))
+ chipio_set_control_flag(codec, CONTROL_FLAG_DMIC, 1);
+ } else {
+ /* set AMic input as mono */
+ tmp = FLOAT_ONE;
+ dspio_set_param(codec, 0x80, 0x00, &tmp, sizeof(unsigned int));
+
+ val = spec->dmic_ctl;
+ /* clear bit7 and bit5 to disable dmic */
+ val &= 0x5f;
+ snd_hda_codec_write(codec, spec->input_pins[0], 0,
+ VENDOR_CHIPIO_DMIC_CTL_SET, val);
+
+ if (!(spec->dmic_ctl & 0x20))
+ chipio_set_control_flag(codec, CONTROL_FLAG_DMIC, 0);
+ }
+}
+
+static void ca0132_init_dmic(struct hda_codec *codec)
+{
+ struct ca0132_spec *spec = codec->spec;
+ u8 val;
+
+ /* Setup Digital Mic here, but don't enable.
+ * Enable based on jack detect.
+ */
+
+ /* MCLK uses MPIO1, set to enable.
+ * Bit 2-0: MPIO select
+ * Bit 3: set to disable
+ * Bit 7-4: reserved
+ */
+ val = 0x01;
+ snd_hda_codec_write(codec, spec->input_pins[0], 0,
+ VENDOR_CHIPIO_DMIC_MCLK_SET, val);
+
+ /* Data1 uses MPIO3. Data2 not use
+ * Bit 2-0: Data1 MPIO select
+ * Bit 3: set disable Data1
+ * Bit 6-4: Data2 MPIO select
+ * Bit 7: set disable Data2
+ */
+ val = 0x83;
+ snd_hda_codec_write(codec, spec->input_pins[0], 0,
+ VENDOR_CHIPIO_DMIC_PIN_SET, val);
+
+ /* Use Ch-0 and Ch-1. Rate is 48K, mode 1. Disable DMic first.
+ * Bit 3-0: Channel mask
+ * Bit 4: set for 48KHz, clear for 32KHz
+ * Bit 5: mode
+ * Bit 6: set to select Data2, clear for Data1
+ * Bit 7: set to enable DMic, clear for AMic
+ */
+ val = 0x33;
+ /* keep a copy of dmic ctl val for enable/disable dmic purpuse */
+ spec->dmic_ctl = val;
+ snd_hda_codec_write(codec, spec->input_pins[0], 0,
+ VENDOR_CHIPIO_DMIC_CTL_SET, val);
+}
+
+static void ca0132_init_analog_mic2(struct hda_codec *codec)
+{
+ struct ca0132_spec *spec = codec->spec;
+
+ mutex_lock(&spec->chipio_mutex);
+ snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
+ VENDOR_CHIPIO_8051_ADDRESS_LOW, 0x20);
+ snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
+ VENDOR_CHIPIO_8051_ADDRESS_HIGH, 0x19);
+ snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
+ VENDOR_CHIPIO_8051_DATA_WRITE, 0x00);
+ snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
+ VENDOR_CHIPIO_8051_ADDRESS_LOW, 0x2D);
+ snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
+ VENDOR_CHIPIO_8051_ADDRESS_HIGH, 0x19);
+ snd_hda_codec_write(codec, WIDGET_CHIP_CTRL, 0,
+ VENDOR_CHIPIO_8051_DATA_WRITE, 0x00);
+ mutex_unlock(&spec->chipio_mutex);
+}
+
+static void ca0132_refresh_widget_caps(struct hda_codec *codec)
+{
+ struct ca0132_spec *spec = codec->spec;
+ int i;
+ hda_nid_t nid;
+
+ CA0132_LOG("ca0132_refresh_widget_caps.\n");
+ nid = codec->start_nid;
+ for (i = 0; i < codec->num_nodes; i++, nid++)
+ codec->wcaps[i] = snd_hda_param_read(codec, nid,
+ AC_PAR_AUDIO_WIDGET_CAP);
+
+ for (i = 0; i < spec->multiout.num_dacs; i++)
+ refresh_amp_caps(codec, spec->dacs[i], HDA_OUTPUT);
+
+ for (i = 0; i < spec->num_outputs; i++)
+ refresh_amp_caps(codec, spec->out_pins[i], HDA_OUTPUT);
+
+ for (i = 0; i < spec->num_inputs; i++) {
+ refresh_amp_caps(codec, spec->adcs[i], HDA_INPUT);
+ refresh_amp_caps(codec, spec->input_pins[i], HDA_INPUT);
+ }
+}
+
+static void ca0132_setup_defaults(struct hda_codec *codec)
+{
+ unsigned int tmp;
+ int num_fx;
+ int idx, i;
+
+ if (!dspload_is_loaded(codec))
+ return;
+
+ /* out, in effects + voicefx */
+ num_fx = OUT_EFFECTS_COUNT + IN_EFFECTS_COUNT + 1;
+ for (idx = 0; idx < num_fx; idx++) {
+ for (i = 0; i <= ca0132_effects[idx].params; i++) {
+ dspio_set_param(codec, ca0132_effects[idx].mid,
+ ca0132_effects[idx].reqs[i],
+ &(ca0132_effects[idx].def_vals[i]),
+ sizeof(float));
+ }
+ }
+
+ /* set AMic1 and AMic2 as mono mic */
+ tmp = FLOAT_ONE;
+ dspio_set_param(codec, 0x80, 0x00, &tmp, sizeof(unsigned int));
+ dspio_set_param(codec, 0x80, 0x01, &tmp, sizeof(unsigned int));
+
+ /* set AMic1 as CrystalVoice input */
+ tmp = FLOAT_ONE;
+ dspio_set_param(codec, 0x80, 0x05, &tmp, sizeof(unsigned int));
+}
+
+static void ca0132_init_flags(struct hda_codec *codec)
+{
+ chipio_set_control_flag(codec, CONTROL_FLAG_IDLE_ENABLE, 0);
+ chipio_set_control_flag(codec, CONTROL_FLAG_PORT_A_COMMON_MODE, 0);
+ chipio_set_control_flag(codec, CONTROL_FLAG_PORT_D_COMMON_MODE, 0);
+ chipio_set_control_flag(codec, CONTROL_FLAG_PORT_A_10KOHM_LOAD, 0);
+ chipio_set_control_flag(codec, CONTROL_FLAG_PORT_D_10KOHM_LOAD, 0);
+ chipio_set_control_flag(codec, CONTROL_FLAG_ADC_C_HIGH_PASS, 1);
+}
+
+static void ca0132_set_dsp_msr(struct hda_codec *codec, bool is96k)
+{
+ chipio_set_control_flag(codec, CONTROL_FLAG_DSP_96KHZ, is96k);
+ chipio_set_control_flag(codec, CONTROL_FLAG_DAC_96KHZ, is96k);
+ chipio_set_control_flag(codec, CONTROL_FLAG_SRC_RATE_96KHZ, is96k);
+ chipio_set_control_flag(codec, CONTROL_FLAG_SRC_CLOCK_196MHZ, is96k);
+ chipio_set_control_flag(codec, CONTROL_FLAG_ADC_B_96KHZ, is96k);
+ chipio_set_control_flag(codec, CONTROL_FLAG_ADC_C_96KHZ, is96k);
+
+ chipio_set_conn_rate(codec, MEM_CONNID_MICIN1, SR_16_000);
+ chipio_set_conn_rate(codec, MEM_CONNID_MICOUT1, SR_16_000);
+ chipio_set_conn_rate(codec, MEM_CONNID_WUH, SR_48_000);
+}
+
+static bool ca0132_download_dsp_images(struct hda_codec *codec)
+{
+ bool dsp_loaded = false;
+ const struct dsp_image_seg *dsp_os_image;
+
+ dsp_os_image = (struct dsp_image_seg *)DspImage_dsp_os;
+ dspload_image(codec, dsp_os_image, 0, 0, true, 0);
+ dsp_loaded = dspload_wait_loaded(codec);
+
+ if (dsp_loaded)
+ dspload_speakereq(codec);
+
+ return dsp_loaded;
+}
+
+static void ca0132_download_dsp(struct hda_codec *codec)
+{
+ struct ca0132_spec *spec = codec->spec;
+
+ spec->dsp_state = DSP_DOWNLOAD_INIT;
+ /* check if there is power cut-off to DSP */
+ if (dspload_is_loaded(codec)) {
+ /* dsp is already loaded. */
+ /*spec->dsp_state = DSP_DOWNLOADED;*/
+ }
+
+ if (spec->dsp_state == DSP_DOWNLOAD_INIT) {
+ chipio_enable_clocks(codec);
+ spec->dsp_state = DSP_DOWNLOADING;
+ if (!ca0132_download_dsp_images(codec))
+ spec->dsp_state = DSP_DOWNLOAD_FAILED;
+ else
+ spec->dsp_state = DSP_DOWNLOADED;
+ }
+
+ if (spec->dsp_state == DSP_DOWNLOADED)
+ ca0132_set_dsp_msr(codec, true);
+}
+
+static void ca0132_process_dsp_response(struct hda_codec *codec)
+{
+ struct ca0132_spec *spec = codec->spec;
+
+ CA0132_LOG("ca0132_process_dsp_response\n");
+ if (spec->wait_scp) {
+ if (dspio_get_response_data(codec) >= 0)
+ spec->wait_scp = 0;
+ }
+
+ dspio_clear_response_queue(codec);
+}
+
+static void ca0132_unsol_event(struct hda_codec *codec, unsigned int res)
+{
+ CA0132_LOG("ca0132_unsol_event: 0x%x\n", res);
+ switch ((res >> AC_UNSOL_RES_TAG_SHIFT) & 0x3f) {
+ case UNSOL_TAG_DSP:
+ ca0132_process_dsp_response(codec);
+ break;
+ case UNSOL_TAG_HP:
+ ca0132_select_out(codec);
+ break;
+ case UNSOL_TAG_AMIC1:
+ ca0132_select_mic(codec);
+ break;
+ default:
+ break;
+ }
+}
+
+/*
+ * Verbs tables.
+ */
+
+/* Sends before DSP download. */
+static struct hda_verb ca0132_base_init_verbs[] = {
+ /*enable ct extension*/
+ {0x15, VENDOR_CHIPIO_CT_EXTENSIONS_ENABLE, 0x1},
+ /*enable DSP node unsol, needed for DSP download*/
+ {0x16, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | UNSOL_TAG_DSP},
+ {}
+};
+
+/* Send at exit. */
+static struct hda_verb ca0132_base_exit_verbs[] = {
+ /*set afg to D3*/
+ {0x01, AC_VERB_SET_POWER_STATE, 0x03},
+ /*disable ct extension*/
+ {0x15, VENDOR_CHIPIO_CT_EXTENSIONS_ENABLE, 0},
+ {}
+};
+
+/* Other verbs tables. Sends after DSP download. */
+static struct hda_verb ca0132_init_verbs0[] = {
+ /* chip init verbs */
+ {0x15, 0x70D, 0xF0},
+ {0x15, 0x70E, 0xFE},
+ {0x15, 0x707, 0x75},
+ {0x15, 0x707, 0xD3},
+ {0x15, 0x707, 0x09},
+ {0x15, 0x707, 0x53},
+ {0x15, 0x707, 0xD4},
+ {0x15, 0x707, 0xEF},
+ {0x15, 0x707, 0x75},
+ {0x15, 0x707, 0xD3},
+ {0x15, 0x707, 0x09},
+ {0x15, 0x707, 0x02},
+ {0x15, 0x707, 0x37},
+ {0x15, 0x707, 0x78},
+ {0x15, 0x53C, 0xCE},
+ {0x15, 0x575, 0xC9},
+ {0x15, 0x53D, 0xCE},
+ {0x15, 0x5B7, 0xC9},
+ {0x15, 0x70D, 0xE8},
+ {0x15, 0x70E, 0xFE},
+ {0x15, 0x707, 0x02},
+ {0x15, 0x707, 0x68},
+ {0x15, 0x707, 0x62},
+ {0x15, 0x53A, 0xCE},
+ {0x15, 0x546, 0xC9},
+ {0x15, 0x53B, 0xCE},
+ {0x15, 0x5E8, 0xC9},
+ {0x15, 0x717, 0x0D},
+ {0x15, 0x718, 0x20},
+ {}
+};
+
+static struct hda_verb ca0132_init_verbs1[] = {
+ {0x0f, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | UNSOL_TAG_HP},
+ {0x12, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | UNSOL_TAG_AMIC1},
+ /* config EAPD */
+ {0x0b, 0x78D, 0x00},
+ /*{0x0b, AC_VERB_SET_EAPD_BTLENABLE, 0x02},*/
+ {0x10, 0x78D, 0x02},
+ /*{0x10, AC_VERB_SET_EAPD_BTLENABLE, 0x02},*/
+ {}
+};
+
+static void ca0132_init_chip(struct hda_codec *codec)
+{
+ struct ca0132_spec *spec = codec->spec;
+ int num_fx;
+ int i;
+ unsigned int on;
+
+ mutex_init(&spec->chipio_mutex);
+
+ spec->cur_out_type = SPEAKER_OUT;
+ spec->cur_mic_type = DIGITAL_MIC;
+ spec->cur_mic_boost = 0;
+
+ for (i = 0; i < VNODES_COUNT; i++) {
+ spec->vnode_lvol[i] = 0x5a;
+ spec->vnode_rvol[i] = 0x5a;
+ spec->vnode_lswitch[i] = 0;
+ spec->vnode_rswitch[i] = 0;
+ }
+
+ /*
+ * Default states for effects are in ca0132_effects[].
+ */
+ num_fx = OUT_EFFECTS_COUNT + IN_EFFECTS_COUNT;
+ for (i = 0; i < num_fx; i++) {
+ on = (unsigned int)ca0132_effects[i].reqs[0];
+ spec->effects_switch[i] = on ? 1 : 0;
+ }
+
+ spec->voicefx_val = 0;
+ spec->effects_switch[PLAY_ENHANCEMENT - EFFECT_START_NID] = 1;
+ spec->effects_switch[CRYSTAL_VOICE - EFFECT_START_NID] = 0;
+
+ #ifdef ENABLE_TUNING_CONTROLS
+ ca0132_init_tuning_defaults(codec);
+ #endif
+}
+
+static void ca0132_exit_chip(struct hda_codec *codec)
+{
+ /* put any chip cleanup stuffs here. */
+
+ if (dspload_is_loaded(codec))
+ dsp_reset(codec);
+}
+
+static int ca0132_init(struct hda_codec *codec)
+{
+ struct ca0132_spec *spec = codec->spec;
+ int i;
+
+ spec->dsp_state = DSP_DOWNLOAD_INIT;
+ spec->curr_chip_addx = ~0UL;
+
+ snd_hda_power_up(codec);
+
+ ca0132_init_flags(codec);
+ snd_hda_sequence_write(codec, spec->base_init_verbs);
+ ca0132_download_dsp(codec);
+ ca0132_refresh_widget_caps(codec);
+ ca0132_setup_defaults(codec);
+ ca0132_init_analog_mic2(codec);
+ ca0132_init_dmic(codec);
+
+ for (i = 0; i < spec->num_outputs; i++)
+ init_output(codec, spec->out_pins[i], spec->dacs[0]);
+
+ for (i = 0; i < spec->num_inputs; i++)
+ init_input(codec, spec->input_pins[i], spec->adcs[i]);
+
+ for (i = 0; i < spec->num_init_verbs; i++)
+ snd_hda_sequence_write(codec, spec->init_verbs[i]);
+
+ ca0132_select_out(codec);
+ ca0132_select_mic(codec);
+
+ snd_hda_power_down(codec);
+
+ return 0;
+}
+
+static void ca0132_free(struct hda_codec *codec)
+{
+ struct ca0132_spec *spec = codec->spec;
+
+ snd_hda_power_up(codec);
+ snd_hda_sequence_write(codec, spec->base_exit_verbs);
+ ca0132_exit_chip(codec);
+ snd_hda_power_down(codec);
+ kfree(codec->spec);
+}
+
+
+static struct hda_codec_ops ca0132_patch_ops = {
+ .build_controls = ca0132_build_controls,
+ .build_pcms = ca0132_build_pcms,
+ .init = ca0132_init,
+ .free = ca0132_free,
+ .unsol_event = ca0132_unsol_event,
+};
+
+static void ca0132_config(struct hda_codec *codec)
+{
+ struct ca0132_spec *spec = codec->spec;
+
+ spec->dacs[0] = 0x2;
+ spec->dacs[1] = 0x3;
+ spec->dacs[2] = 0x4;
+
+ spec->multiout.dac_nids = spec->dacs;
+ spec->multiout.num_dacs = 3;
+ spec->multiout.max_channels = 2;
+
+ spec->num_outputs = 2;
+ spec->out_pins[0] = 0x0b; /* speaker out */
+ spec->out_pins[1] = 0x10; /* headphone out */
+ spec->shared_out_nid = 0x2;
+
+ spec->num_inputs = 3;
+ spec->adcs[0] = 0x7; /* digital mic / analog mic1 */
+ spec->adcs[1] = 0x8; /* analog mic2 */
+ spec->adcs[2] = 0xa; /* what u hear */
+ spec->shared_mic_nid = 0x7;
+
+ spec->input_pins[0] = 0x12;
+ spec->input_pins[1] = 0x11;
+ spec->input_pins[2] = 0x13;
+}
+
+static int patch_ca0132(struct hda_codec *codec)
+{
+ struct ca0132_spec *spec;
+
+ snd_printdd("patch_ca0132\n");
+
+ spec = kzalloc(sizeof(*spec), GFP_KERNEL);
+ if (!spec)
+ return -ENOMEM;
+ codec->spec = spec;
+
+ spec->num_mixers = 1;
+ spec->mixers[0] = ca0132_mixer;
+
+ spec->base_init_verbs = ca0132_base_init_verbs;
+ spec->base_exit_verbs = ca0132_base_exit_verbs;
+ spec->init_verbs[0] = ca0132_init_verbs0;
+ spec->init_verbs[1] = ca0132_init_verbs1;
+ spec->num_init_verbs = 2;
+
+ ca0132_init_chip(codec);
+
+ ca0132_config(codec);
+
+ codec->patch_ops = ca0132_patch_ops;
+
+ return 0;
+}
+
+
+/*
+ * patch entries
+ */
+static struct hda_codec_preset snd_hda_preset_ca0132[] = {
+ { .id = 0x11020011, .name = "CA0132", .patch = patch_ca0132 },
+ {} /* terminator */
+};
+
+MODULE_ALIAS("snd-hda-codec-id:11020011");
+
+MODULE_LICENSE("GPL");
+MODULE_DESCRIPTION("Creative Sound Core3D codec");
+
+static struct hda_codec_preset_list ca0132_list = {
+ .preset = snd_hda_preset_ca0132,
+ .owner = THIS_MODULE,
+};
+
+static int __init patch_ca0132_init(void)
+{
+ return snd_hda_add_codec_preset(&ca0132_list);
+}
+
+static void __exit patch_ca0132_exit(void)
+{
+ snd_hda_delete_codec_preset(&ca0132_list);
+}
+
+module_init(patch_ca0132_init)
+module_exit(patch_ca0132_exit)
diff --git a/sound/pci/hda/patch_ca0132/speakereq_x.h b/sound/pci/hda/patch_ca0132/speakereq_x.h
new file mode 100644
index 0000000..9e40e3e
--- /dev/null
+++ b/sound/pci/hda/patch_ca0132/speakereq_x.h
@@ -0,0 +1,272 @@
+/*-----------------------------------------------------------------------------
+// Generated by Coff2DspImage V0.4. (built on Thu Oct 28 02:57:27 2010)
+// ----
+// Input file: coef_re.o
+// Output file: Speaker_EQ_X.cpp
+// On: 2011/01/13 16:06:51 UTC
+// ----
+// Copyright (c) 2011, Creative Technology Ltd.
+//---------------------------------------------------------------------------*/
+
+
+const u32 Speaker_EQ_X[] = {
+0x4c46584d, 0x0, 0x400, 0x3fbbe149,
+0x80000000, 0xbef168a2, 0x80000000, 0x3e8c4d50,
+0x0, 0xbeefa563, 0x80000000, 0x3efe9e2f,
+0x0, 0xbf1a0d27, 0x80000000, 0x3f5631fc,
+0x0, 0xbf302e68, 0x80000000, 0x3f45255b,
+0x0, 0xbf2f639c, 0x80000000, 0x3f5837a5,
+0x0, 0xbf39bb2e, 0x80000000, 0x3f18b10e,
+0x0, 0xbf11d34f, 0x80000000, 0x3f0eed9e,
+0x0, 0xbf1b5efe, 0x80000000, 0x3f208627,
+0x0, 0xbf0df857, 0x80000000, 0x3edbcf02,
+0x0, 0xbea4a063, 0x80000000, 0x3e8cab21,
+0x0, 0xbe86eda9, 0x80000000, 0x3e8f8977,
+0x0, 0xbe96fa87, 0x80000000, 0x3e9f831b,
+0x0, 0xbea99e6c, 0x80000000, 0x3ecba859,
+0x0, 0xbf03440a, 0x80000000, 0x3f286608,
+0x0, 0xbf3c0f37, 0x80000000, 0x3f3897c1,
+0x0, 0xbf28afae, 0x80000000, 0x3f223c7c,
+0x0, 0xbf28a32c, 0x80000000, 0x3f3ecc47,
+0x0, 0xbf59b830, 0x80000000, 0x3f738983,
+0x0, 0xbf802847, 0x80000000, 0x3f815e28,
+0x0, 0xbf7a4bbe, 0x80000000, 0x3f703961,
+0x0, 0xbf643801, 0x80000000, 0x3f5cced0,
+0x0, 0xbf56c14d, 0x80000000, 0x3f565ef9,
+0x0, 0xbf56c5f4, 0x80000000, 0x3f5b1e44,
+0x0, 0xbf5dbc24, 0x80000000, 0x3f619100,
+0x0, 0xbf6150d1, 0x80000000, 0x3f60ecbc,
+0x0, 0xbf5c6b05, 0x80000000, 0x3f58fc39,
+0x0, 0xbf5370aa, 0x80000000, 0x3f512d14,
+0x0, 0xbf4e978f, 0x80000000, 0x3f50579c,
+0x0, 0xbf51f17f, 0x80000000, 0x3f573e48,
+0x0, 0xbf5b21cd, 0x80000000, 0x3f612223,
+0x0, 0xbf642835, 0x80000000, 0x3f681d5e,
+0x0, 0xbf6885bc, 0x80000000, 0x3f69ecda,
+0x0, 0xbf684fd6, 0x80000000, 0x3f687927,
+0x0, 0xbf666057, 0x80000000, 0x3f669f0b,
+0x0, 0xbf64e71c, 0x80000000, 0x3f65926a,
+0x0, 0xbf642287, 0x80000000, 0x3f64d9df,
+0x0, 0xbf633585, 0x80000000, 0x3f638252,
+0x0, 0xbf614d73, 0x80000000, 0x3f60f78c,
+0x0, 0xbf5e1e61, 0x80000000, 0x3f5d3336,
+0x0, 0xbf59e464, 0x80000000, 0x3f58b51a,
+0x0, 0xbf5564fa, 0x80000000, 0x3f5488aa,
+0x0, 0xbf51ebbd, 0x80000000, 0x3f522b9c,
+0x0, 0xbf5113f3, 0x80000000, 0x3f53388e,
+0x0, 0xbf54549c, 0x80000000, 0x3f58e29a,
+0x0, 0xbf5c7cd4, 0x80000000, 0x3f6378e5,
+0x0, 0xbf6948ec, 0x80000000, 0x3f7216be,
+0x0, 0xbf792709, 0x80000000, 0x3f8140b0,
+0x0, 0xbf84ab0d, 0x80000000, 0x3f88ce45,
+0x0, 0xbf8b478d, 0x80000000, 0x3f8e2359,
+0x0, 0xbf8f15ad, 0x80000000, 0x3f9048db,
+0x0, 0xbf8f9247, 0x80000000, 0x3f8f3afc,
+0x0, 0xbf8d3320, 0x80000000, 0x3f8bd59a,
+0x0, 0xbf891b04, 0x80000000, 0x3f875e82,
+0x0, 0xbf849157, 0x80000000, 0x3f830265,
+0x0, 0xbf809350, 0x80000000, 0x3f7f07d3,
+0x0, 0xbf7b4900, 0x80000000, 0x3f7a51fd,
+0x0, 0xbf77a651, 0x80000000, 0x3f77a35f,
+0x0, 0xbf75b626, 0x80000000, 0x3f76424a,
+0x0, 0xbf74a610, 0x80000000, 0x3f755948,
+0x0, 0xbf73b40b, 0x80000000, 0x3f744784,
+0x0, 0xbf72725c, 0x80000000, 0x3f72d3f1,
+0x0, 0xbf70e4e0, 0x80000000, 0x3f713638,
+0x0, 0xbf6f7216, 0x80000000, 0x3f6ff879,
+0x0, 0xbf6eb679, 0x80000000, 0x3f6fc6ff,
+0x0, 0xbf6f4ea9, 0x80000000, 0x3f7139dc,
+0x0, 0xbf71adbd, 0x80000000, 0x3f74adab,
+0x0, 0xbf760885, 0x80000000, 0x3f7a2950,
+0x0, 0xbf7c4ce8, 0x80000000, 0x3f80aa62,
+0x0, 0xbf820cad, 0x80000000, 0x3f84c644,
+0x0, 0xbf865a25, 0x80000000, 0x3f89040e,
+0x0, 0xbf8a89f0, 0x80000000, 0x3f8cf937,
+0x0, 0xbf8e1272, 0x80000000, 0x3f902e0e,
+0x0, 0xbf9092fc, 0x80000000, 0x3f922366,
+0x0, 0xbf91dc2b, 0x80000000, 0x3f928e36,
+0x0, 0xbf91c669, 0x80000000, 0x3f918c90,
+0x0, 0xbf903642, 0x80000000, 0x3f8f6add,
+0x0, 0xbf8d6677, 0x80000000, 0x3f8c575b,
+0x0, 0xbf89dfd1, 0x80000000, 0x3f88906c,
+0x0, 0xbf8605bc, 0x80000000, 0x3f849665,
+0x0, 0xbf8210d7, 0x80000000, 0x3f80cf75,
+0x0, 0xbf7ccb1f, 0x80000000, 0x3f7ab17c,
+0x0, 0xbf76a732, 0x80000000, 0x3f74e29e,
+0x0, 0xbf719ebf, 0x80000000, 0x3f70bd3c,
+0x0, 0xbf6dd2a9, 0x80000000, 0x3f6df20a,
+0x0, 0xbf6bc015, 0x80000000, 0x3f6c40a2,
+0x0, 0xbf6b0f4a, 0x80000000, 0x3f6c0b52,
+0x0, 0xbf6b3c0b, 0x80000000, 0x3f6d061f,
+0x0, 0xbf6c7e92, 0x80000000, 0x3f6e9687,
+0x0, 0xbf6e948e, 0x80000000, 0x3f70d031,
+0x0, 0xbf70f4c1, 0x80000000, 0x3f736b54,
+0x0, 0xbf739b96, 0x80000000, 0x3f760a68,
+0x0, 0xbf7633fd, 0x80000000, 0x3f789f0b,
+0x0, 0xbf789bb7, 0x80000000, 0x3f7acc6f,
+0x0, 0xbf7abbe0, 0x80000000, 0x3f7caef9,
+0x0, 0xbf7c427a, 0x80000000, 0x3f7e2100,
+0x0, 0xbf7d7bc6, 0x80000000, 0x3f7ef0e4,
+0x0, 0xbf7e2ec1, 0x80000000, 0x3f7f7f04,
+0x0, 0xbf7e5cb4, 0x80000000, 0x3f7f871b,
+0x0, 0xbf7e5482, 0x80000000, 0x3f7f3953,
+0x0, 0xbf7ddc7c, 0x80000000, 0x3f7ebc47,
+0x0, 0xbf7d3a64, 0x80000000, 0x3f7df5ab,
+0x0, 0xbf7c6f74, 0x80000000, 0x3f7d1eb6,
+0x0, 0xbf7b8247, 0x80000000, 0x3f7c2b7a,
+0x0, 0xbf7a8d7b, 0x80000000, 0x3f7b2f43,
+0x0, 0xbf798c3a, 0x80000000, 0x3f7a2e7a,
+0x0, 0xbf788ac9, 0x80000000, 0x3f792def,
+0x0, 0xbf778916, 0x80000000, 0x3f787c5b,
+0x0, 0xbf776200, 0x80000000, 0x3f787f64,
+0x0, 0xbf7760d4, 0x80000000, 0x3f787ffe,
+0x0, 0xbf776078, 0x80000000, 0x3f78803b,
+0x0, 0xbf77604c, 0x80000000, 0x3f78805c,
+0x0, 0xbf776033, 0x80000000, 0x3f78806f,
+0x0, 0xbf776023, 0x80000000, 0x3f78807c,
+0x0, 0xbf776019, 0x80000000, 0x3f788085,
+0x0, 0xbf776011, 0x80000000, 0x3f78808c,
+0x0, 0xbf77600b, 0x80000000, 0x3f788091,
+0x0, 0xbf776007, 0x80000000, 0x3f788095,
+0x0, 0xbf776004, 0x80000000, 0x3f788097,
+0x0, 0xbf776001, 0x80000000, 0x3f78809a,
+0x0, 0xbf775fff, 0x80000000, 0x3f78809c,
+0x0, 0xbf775ffd, 0x80000000, 0x3f78809d,
+0x0, 0xbf775ffc, 0x80000000, 0x3f78809e,
+0x0, 0xbf775ffb, 0x80000000, 0x3f78809f,
+0x0, 0xbf775ffa, 0x80000000, 0x3f7880a0,
+0x0, 0xbf775ff9, 0x80000000, 0x3f7880a0,
+0x0, 0xbf775ff9, 0x80000000, 0x3f7880a1,
+0x0, 0xbf775ff9, 0x80000000, 0x3f7880a1,
+0x0, 0xbf775ff9, 0x80000000, 0x3fcb05b8,
+0x80000000, 0xbeee4467, 0x80000000, 0x3e9932f9,
+0x0, 0xbef0af71, 0x80000000, 0x3f1265c8,
+0x0, 0xbee284be, 0x80000000, 0x3f198608,
+0x0, 0xbf1a76c6, 0x80000000, 0x3f16b40c,
+0x0, 0xbf0faae2, 0x80000000, 0x3f2cef0e,
+0x0, 0xbf2d55b8, 0x80000000, 0x3f1ca946,
+0x0, 0xbeeb4ea9, 0x80000000, 0x3ed11606,
+0x0, 0xbeffebb9, 0x80000000, 0x3f0694f2,
+0x0, 0xbeef1542, 0x80000000, 0x3ed02c5c,
+0x0, 0xbebf66fa, 0x80000000, 0x3eb92770,
+0x0, 0xbeaeead2, 0x80000000, 0x3ea08e82,
+0x0, 0xbe936895, 0x80000000, 0x3e971575,
+0x0, 0xbea9a969, 0x80000000, 0x3ecb418f,
+0x0, 0xbeec6a8c, 0x80000000, 0x3f067b68,
+0x0, 0xbf13ac79, 0x80000000, 0x3f22af6d,
+0x0, 0xbf307174, 0x80000000, 0x3f3eea66,
+0x0, 0xbf48805e, 0x80000000, 0x3f4fce7a,
+0x0, 0xbf51e954, 0x80000000, 0x3f5411cd,
+0x0, 0xbf53af02, 0x80000000, 0x3f552818,
+0x0, 0xbf551cd4, 0x80000000, 0x3f5822c8,
+0x0, 0xbf5af5dd, 0x80000000, 0x3f61b27c,
+0x0, 0xbf67944c, 0x80000000, 0x3f6f0035,
+0x0, 0xbf7210e6, 0x80000000, 0x3f739d04,
+0x0, 0xbf6f84d2, 0x80000000, 0x3f6afa60,
+0x0, 0xbf63773a, 0x80000000, 0x3f5ea1f7,
+0x0, 0xbf595ca4, 0x80000000, 0x3f585d70,
+0x0, 0xbf579672, 0x80000000, 0x3f5b1b71,
+0x0, 0xbf5e5b2b, 0x80000000, 0x3f6517cf,
+0x0, 0xbf6a69e6, 0x80000000, 0x3f71d855,
+0x0, 0xbf764ffa, 0x80000000, 0x3f7b5e53,
+0x0, 0xbf7c2bb3, 0x80000000, 0x3f7cc6b9,
+0x0, 0xbf78ece7, 0x80000000, 0x3f7543e2,
+0x0, 0xbf6dfa71, 0x80000000, 0x3f67fb41,
+0x0, 0xbf5f799b, 0x80000000, 0x3f594ab7,
+0x0, 0xbf516f56, 0x80000000, 0x3f4c8989,
+0x0, 0xbf465eef, 0x80000000, 0x3f43673b,
+0x0, 0xbf3f4611, 0x80000000, 0x3f3e5c37,
+0x0, 0xbf3c3a5c, 0x80000000, 0x3f3d3d3e,
+0x0, 0xbf3cedd9, 0x80000000, 0x3f3fabf5,
+0x0, 0xbf410104, 0x80000000, 0x3f4552d6,
+0x0, 0xbf482b39, 0x80000000, 0x3f4df2a4,
+0x0, 0xbf5231c7, 0x80000000, 0x3f594b59,
+0x0, 0xbf5eb903, 0x80000000, 0x3f66d9b8,
+0x0, 0xbf6d148d, 0x80000000, 0x3f75b6dd,
+0x0, 0xbf7c1753, 0x80000000, 0x3f823ef7,
+0x0, 0xbf851d75, 0x80000000, 0x3f88ccb7,
+0x0, 0xbf8af8b9, 0x80000000, 0x3f8dd423,
+0x0, 0xbf8f194d, 0x80000000, 0x3f910a9a,
+0x0, 0xbf91716a, 0x80000000, 0x3f92a03d,
+0x0, 0xbf9268c2, 0x80000000, 0x3f9324d5,
+0x0, 0xbf92a5a3, 0x80000000, 0x3f934371,
+0x0, 0xbf92c65e, 0x80000000, 0x3f937f11,
+0x0, 0xbf93280f, 0x80000000, 0x3f940915,
+0x0, 0xbf93cf3d, 0x80000000, 0x3f94bc82,
+0x0, 0xbf94749e, 0x80000000, 0x3f953979,
+0x0, 0xbf94aca4, 0x80000000, 0x3f951632,
+0x0, 0xbf941d55, 0x80000000, 0x3f94134e,
+0x0, 0xbf92ab6b, 0x80000000, 0x3f923c83,
+0x0, 0xbf908a86, 0x80000000, 0x3f8fe7c0,
+0x0, 0xbf8e2c0c, 0x80000000, 0x3f8d9738,
+0x0, 0xbf8c1699, 0x80000000, 0x3f8bcce1,
+0x0, 0xbf8abc92, 0x80000000, 0x3f8ae855,
+0x0, 0xbf8a5fe1, 0x80000000, 0x3f8b1165,
+0x0, 0xbf8b06a9, 0x80000000, 0x3f8c3332,
+0x0, 0xbf8c7dbb, 0x80000000, 0x3f8dff3a,
+0x0, 0xbf8e6640, 0x80000000, 0x3f8ffd1e,
+0x0, 0xbf90489f, 0x80000000, 0x3f91a29d,
+0x0, 0xbf91a5bf, 0x80000000, 0x3f927453,
+0x0, 0xbf920863, 0x80000000, 0x3f92247f,
+0x0, 0xbf911e85, 0x80000000, 0x3f9098a5,
+0x0, 0xbf8ed782, 0x80000000, 0x3f8dda10,
+0x0, 0xbf8b6c05, 0x80000000, 0x3f8a0fa7,
+0x0, 0xbf873d17, 0x80000000, 0x3f858ea4,
+0x0, 0xbf82a361, 0x80000000, 0x3f80d106,
+0x0, 0xbf7bd6bb, 0x80000000, 0x3f787da4,
+0x0, 0xbf72e277, 0x80000000, 0x3f701bf8,
+0x0, 0xbf6b220b, 0x80000000, 0x3f68d09d,
+0x0, 0xbf64dbb2, 0x80000000, 0x3f631cc7,
+0x0, 0xbf5ff96f, 0x80000000, 0x3f5f4a07,
+0x0, 0xbf5ca224, 0x80000000, 0x3f5d12fb,
+0x0, 0xbf5b2cfc, 0x80000000, 0x3f5c32e4,
+0x0, 0xbf5b6b94, 0x80000000, 0x3f5ce3a3,
+0x0, 0xbf5cd5a4, 0x80000000, 0x3f5f2996,
+0x0, 0xbf5f6437, 0x80000000, 0x3f6270f9,
+0x0, 0xbf633409, 0x80000000, 0x3f6676fd,
+0x0, 0xbf67c675, 0x80000000, 0x3f6b4ed4,
+0x0, 0xbf6cbdb0, 0x80000000, 0x3f708c31,
+0x0, 0xbf72136b, 0x80000000, 0x3f75dd69,
+0x0, 0xbf7762ea, 0x80000000, 0x3f7b2a9a,
+0x0, 0xbf7c7f7f, 0x80000000, 0x3f8003a3,
+0x0, 0xbf80a4ff, 0x80000000, 0x3f823dd6,
+0x0, 0xbf82a7d1, 0x80000000, 0x3f843389,
+0x0, 0xbf846917, 0x80000000, 0x3f85aef2,
+0x0, 0xbf85d56f, 0x80000000, 0x3f86e9b0,
+0x0, 0xbf86c542, 0x80000000, 0x3f87c8cd,
+0x0, 0xbf877eba, 0x80000000, 0x3f883bdb,
+0x0, 0xbf87de4f, 0x80000000, 0x3f8885fe,
+0x0, 0xbf87efda, 0x80000000, 0x3f88813c,
+0x0, 0xbf87e277, 0x80000000, 0x3f884eb1,
+0x0, 0xbf879952, 0x80000000, 0x3f880311,
+0x0, 0xbf873b65, 0x80000000, 0x3f879327,
+0x0, 0xbf86c950, 0x80000000, 0x3f871ba9,
+0x0, 0xbf8647a6, 0x80000000, 0x3f86973e,
+0x0, 0xbf85c29b, 0x80000000, 0x3f860f3e,
+0x0, 0xbf853879, 0x80000000, 0x3f858568,
+0x0, 0xbf84ae87, 0x80000000, 0x3f84fc48,
+0x0, 0xbf8424d4, 0x80000000, 0x3f849d66,
+0x0, 0xbf840fef, 0x80000000, 0x3f849f07,
+0x0, 0xbf840f4e, 0x80000000, 0x3f849f5b,
+0x0, 0xbf840f1a, 0x80000000, 0x3f849f7e,
+0x0, 0xbf840f01, 0x80000000, 0x3f849f90,
+0x0, 0xbf840ef3, 0x80000000, 0x3f849f9c,
+0x0, 0xbf840ee9, 0x80000000, 0x3f849fa5,
+0x0, 0xbf840ee2, 0x80000000, 0x3f849fab,
+0x0, 0xbf840edc, 0x80000000, 0x3f849fb0,
+0x0, 0xbf840ed8, 0x80000000, 0x3f849fb3,
+0x0, 0xbf840ed5, 0x80000000, 0x3f849fb6,
+0x0, 0xbf840ed2, 0x80000000, 0x3f849fb9,
+0x0, 0xbf840ed0, 0x80000000, 0x3f849fbb,
+0x0, 0xbf840ece, 0x80000000, 0x3f849fbd,
+0x0, 0xbf840ecc, 0x80000000, 0x3f849fbe,
+0x0, 0xbf840ecb, 0x80000000, 0x3f849fbf,
+0x0, 0xbf840eca, 0x80000000, 0x3f849fc0,
+0x0, 0xbf840ec9, 0x80000000, 0x3f849fc1,
+0x0, 0xbf840ec8, 0x80000000, 0x3f849fc2,
+0x0, 0xbf840ec8, 0x80000000, 0x3f849fc2,
+0x0, 0xbf840ec8, 0x80000000, 0x3f849fc2,
+0x0, 0xbf840ec7, 0x80000000, 0x4c46584d,
+0xefbeadde, 0x0,
+};
+/*------ END OF FILE ------*/
diff --git a/sound/pci/hda/patch_ca0132/speakereq_y.h b/sound/pci/hda/patch_ca0132/speakereq_y.h
new file mode 100644
index 0000000..5c2152d
--- /dev/null
+++ b/sound/pci/hda/patch_ca0132/speakereq_y.h
@@ -0,0 +1,272 @@
+/*-----------------------------------------------------------------------------
+// Generated by Coff2DspImage V0.4. (built on Thu Oct 28 02:57:27 2010)
+// ----
+// Input file: coef_im.o
+// Output file: Speaker_EQ_Y.cpp
+// On: 2011/01/13 16:07:24 UTC
+// ----
+// Copyright (c) 2011, Creative Technology Ltd.
+//---------------------------------------------------------------------------*/
+
+
+const u32 Speaker_EQ_Y[] = {
+0x4c46584d, 0x40000, 0x400, 0x3f7880a1,
+0xbf8f6831, 0x80000000, 0x3e23112a, 0x0,
+0xbee39f86, 0x80000000, 0x3eea1573, 0x0,
+0xbf0aa258, 0x80000000, 0x3f3ad61e, 0x0,
+0xbf4bc821, 0x80000000, 0x3f308d3f, 0x0,
+0xbf431da8, 0x80000000, 0x3f36f372, 0x0,
+0xbf5e497e, 0x80000000, 0x3f18cb4d, 0x0,
+0xbf1e6872, 0x80000000, 0x3f0645df, 0x0,
+0xbf1b97a9, 0x80000000, 0x3f19c10a, 0x0,
+0xbf2047ba, 0x80000000, 0x3ef1754c, 0x0,
+0xbec791b4, 0x80000000, 0x3e8b3d8b, 0x0,
+0xbe91510f, 0x80000000, 0x3e816bb0, 0x0,
+0xbe9c066b, 0x80000000, 0x3e9340f7, 0x0,
+0xbeaac3d6, 0x80000000, 0x3eafce70, 0x0,
+0xbeece184, 0x80000000, 0x3f12e9a5, 0x0,
+0xbf38b044, 0x80000000, 0x3f39c7c5, 0x0,
+0xbf33aced, 0x80000000, 0x3f20ddb4, 0x0,
+0xbf265839, 0x80000000, 0x3f2f8f4f, 0x0,
+0xbf4eaf17, 0x80000000, 0x3f650a29, 0x0,
+0xbf7e1137, 0x80000000, 0x3f803d7f, 0x0,
+0xbf80d55a, 0x80000000, 0x3f732104, 0x0,
+0xbf6c460f, 0x80000000, 0x3f5deb83, 0x0,
+0xbf5b76bc, 0x80000000, 0x3f540f11, 0x0,
+0xbf584dc1, 0x80000000, 0x3f56d0db, 0x0,
+0xbf5e67e9, 0x80000000, 0x3f5df17b, 0x0,
+0xbf639414, 0x80000000, 0x3f5f95ef, 0x0,
+0xbf60a5e1, 0x80000000, 0x3f5907a7, 0x0,
+0xbf57d63c, 0x80000000, 0x3f507214, 0x0,
+0xbf5141dc, 0x80000000, 0x3f4d97d2, 0x0,
+0xbf527c2a, 0x80000000, 0x3f52e79e, 0x0,
+0xbf5aa813, 0x80000000, 0x3f5cb50d, 0x0,
+0xbf643ce2, 0x80000000, 0x3f64e061, 0x0,
+0xbf69e39a, 0x80000000, 0x3f67f90b, 0x0,
+0xbf6a8d44, 0x80000000, 0x3f67165f, 0x0,
+0xbf68b9f5, 0x80000000, 0x3f652f13, 0x0,
+0xbf670004, 0x80000000, 0x3f63f903, 0x0,
+0xbf66137b, 0x80000000, 0x3f634ce0, 0x0,
+0xbf653e5f, 0x80000000, 0x3f623a2d, 0x0,
+0xbf639898, 0x80000000, 0x3f600b28, 0x0,
+0xbf60b1d8, 0x80000000, 0x3f5c975a, 0x0,
+0xbf5ca505, 0x80000000, 0x3f583c70, 0x0,
+0xbf58148e, 0x80000000, 0x3f53e31b, 0x0,
+0xbf542d3d, 0x80000000, 0x3f50f232, 0x0,
+0xbf527ea1, 0x80000000, 0x3f510906, 0x0,
+0xbf5495bc, 0x80000000, 0x3f5580a4, 0x0,
+0xbf5b7799, 0x80000000, 0x3f5eeb19, 0x0,
+0xbf672bd7, 0x80000000, 0x3f6cb5f8, 0x0,
+0xbf76783c, 0x80000000, 0x3f7cf872, 0x0,
+0xbf836c9b, 0x80000000, 0x3f865f70, 0x0,
+0xbf8a8aa4, 0x80000000, 0x3f8c64b2, 0x0,
+0xbf8f1f95, 0x80000000, 0x3f8f637a, 0x0,
+0xbf906bda, 0x80000000, 0x3f8f1804, 0x0,
+0xbf8eaa11, 0x80000000, 0x3f8c2e5f, 0x0,
+0xbf8addfa, 0x80000000, 0x3f87df49, 0x0,
+0xbf86520c, 0x80000000, 0x3f8367f7, 0x0,
+0xbf821d36, 0x80000000, 0x3f7f527d, 0x0,
+0xbf7dc58f, 0x80000000, 0x3f7a0ea9, 0x0,
+0xbf7997c7, 0x80000000, 0x3f76f01a, 0x0,
+0xbf774a84, 0x80000000, 0x3f755256, 0x0,
+0xbf761531, 0x80000000, 0x3f745e3a, 0x0,
+0xbf752a22, 0x80000000, 0x3f73602c, 0x0,
+0xbf7400ab, 0x80000000, 0x3f7204c5, 0x0,
+0xbf727d23, 0x80000000, 0x3f706c59, 0x0,
+0xbf70ed99, 0x80000000, 0x3f6f1358, 0x0,
+0xbf6fe456, 0x80000000, 0x3f6ea1ff, 0x0,
+0xbf7006a4, 0x80000000, 0x3f6fb2c6, 0x0,
+0xbf71de58, 0x80000000, 0x3f72a89e, 0x0,
+0xbf75bc1c, 0x80000000, 0x3f7799b0, 0x0,
+0xbf7ba127, 0x80000000, 0x3f7e4e21, 0x0,
+0xbf819693, 0x80000000, 0x3f832684, 0x0,
+0xbf85d0b3, 0x80000000, 0x3f8772c6, 0x0,
+0xbf8a03f8, 0x80000000, 0x3f8b933b, 0x0,
+0xbf8dbdbc, 0x80000000, 0x3f8ef83e, 0x0,
+0xbf90a107, 0x80000000, 0x3f912756, 0x0,
+0xbf925347, 0x80000000, 0x3f91f431, 0x0,
+0xbf928097, 0x80000000, 0x3f917193, 0x0,
+0xbf912274, 0x80000000, 0x3f8fab50, 0x0,
+0xbf8e995b, 0x80000000, 0x3f8cb8fe, 0x0,
+0xbf8b4fcf, 0x80000000, 0x3f890686, 0x0,
+0xbf87800d, 0x80000000, 0x3f851c71, 0x0,
+0xbf83807b, 0x80000000, 0x3f813e07, 0x0,
+0xbf7f9422, 0x80000000, 0x3f7b47a9, 0x0,
+0xbf790f10, 0x80000000, 0x3f7559b5, 0x0,
+0xbf7384f8, 0x80000000, 0x3f70dd38, 0x0,
+0xbf6f8543, 0x80000000, 0x3f6d7fa5, 0x0,
+0xbf6d3355, 0x80000000, 0x3f6b8ebe, 0x0,
+0xbf6bf9b4, 0x80000000, 0x3f6b38f0, 0x0,
+0xbf6bde8b, 0x80000000, 0x3f6bd34c, 0x0,
+0xbf6d0ca4, 0x80000000, 0x3f6d2f55, 0x0,
+0xbf6ee485, 0x80000000, 0x3f6f6387, 0x0,
+0xbf712799, 0x80000000, 0x3f71e785, 0x0,
+0xbf73cb82, 0x80000000, 0x3f748d3c, 0x0,
+0xbf76640d, 0x80000000, 0x3f77279b, 0x0,
+0xbf78e726, 0x80000000, 0x3f796f48, 0x0,
+0xbf7b09c2, 0x80000000, 0x3f7b7e17, 0x0,
+0xbf7cb603, 0x80000000, 0x3f7cf67b, 0x0,
+0xbf7e1629, 0x80000000, 0x3f7df91b, 0x0,
+0xbf7ecc00, 0x80000000, 0x3f7ea63b, 0x0,
+0xbf7f27fe, 0x80000000, 0x3f7eb8d3, 0x0,
+0xbf7f2bbc, 0x80000000, 0x3f7e936a, 0x0,
+0xbf7ebe6d, 0x80000000, 0x3f7e1bce, 0x0,
+0xbf7e314c, 0x80000000, 0x3f7d651f, 0x0,
+0xbf7d6480, 0x80000000, 0x3f7c9915, 0x0,
+0xbf7c7f78, 0x80000000, 0x3f7ba8d0, 0x0,
+0xbf7b8a32, 0x80000000, 0x3f7ab2b1, 0x0,
+0xbf7a888a, 0x80000000, 0x3f79b396, 0x0,
+0xbf79853e, 0x80000000, 0x3f78b53f, 0x0,
+0xbf787f86, 0x80000000, 0x3f77cdd0, 0x0,
+0xbf781632, 0x80000000, 0x3f77cb33, 0x0,
+0xbf781469, 0x80000000, 0x3f77cd2f, 0x0,
+0xbf78126e, 0x80000000, 0x3f77cf24, 0x0,
+0xbf78107f, 0x80000000, 0x3f77d10f, 0x0,
+0xbf780e99, 0x80000000, 0x3f77d2f2, 0x0,
+0xbf780cb8, 0x80000000, 0x3f77d4d0, 0x0,
+0xbf780adc, 0x80000000, 0x3f77d6ab, 0x0,
+0xbf780903, 0x80000000, 0x3f77d882, 0x0,
+0xbf78072d, 0x80000000, 0x3f77da56, 0x0,
+0xbf78055a, 0x80000000, 0x3f77dc29, 0x0,
+0xbf780389, 0x80000000, 0x3f77ddf9, 0x0,
+0xbf7801b9, 0x80000000, 0x3f77dfc8, 0x0,
+0xbf77ffeb, 0x80000000, 0x3f77e195, 0x0,
+0xbf77fe1f, 0x80000000, 0x3f77e360, 0x0,
+0xbf77fc54, 0x80000000, 0x3f77e52b, 0x0,
+0xbf77fa8a, 0x80000000, 0x3f77e6f4, 0x0,
+0xbf77f8c1, 0x80000000, 0x3f77e8bd, 0x0,
+0xbf77f6f8, 0x80000000, 0x3f77ea85, 0x0,
+0xbf77f531, 0x80000000, 0x3f77ec4d, 0x0,
+0xbf77f369, 0x80000000, 0x3f77ee14, 0x0,
+0xbf77f1a2, 0x80000000, 0x3f77efdb, 0x3f849fc2,
+0xbf9849f7, 0x80000000, 0x3e170833, 0x0,
+0xbeefd7c0, 0x80000000, 0x3efa10af, 0x0,
+0xbf0dacc1, 0x80000000, 0x3ee69f0f, 0x0,
+0xbf2cdda2, 0x80000000, 0x3f0c5634, 0x0,
+0xbf1b925b, 0x80000000, 0x3f1256f6, 0x0,
+0xbf3bcab5, 0x80000000, 0x3f1d71e0, 0x0,
+0xbf136e78, 0x80000000, 0x3ec05881, 0x0,
+0xbef584d1, 0x80000000, 0x3f00491b, 0x0,
+0xbf0697d3, 0x80000000, 0x3ed25faa, 0x0,
+0xbed0db4d, 0x80000000, 0x3eb1a6c7, 0x0,
+0xbebe896f, 0x80000000, 0x3e9f01b6, 0x0,
+0xbea164c7, 0x80000000, 0x3e8aca7b, 0x0,
+0xbea635a9, 0x80000000, 0x3eb1fd43, 0x0,
+0xbee34cc2, 0x80000000, 0x3ef64ed8, 0x0,
+0xbf107cb1, 0x80000000, 0x3f17e0d3, 0x0,
+0xbf2cab9a, 0x80000000, 0x3f34f26d, 0x0,
+0xbf471972, 0x80000000, 0x3f49d928, 0x0,
+0xbf53e77d, 0x80000000, 0x3f507d52, 0x0,
+0xbf567925, 0x80000000, 0x3f51e982, 0x0,
+0xbf5776bd, 0x80000000, 0x3f541525, 0x0,
+0xbf5b979d, 0x80000000, 0x3f5be0d9, 0x0,
+0xbf66c290, 0x80000000, 0x3f695853, 0x0,
+0xbf72ffc2, 0x80000000, 0x3f714acc, 0x0,
+0xbf73f22f, 0x80000000, 0x3f6b882a, 0x0,
+0xbf691f83, 0x80000000, 0x3f5f0bf7, 0x0,
+0xbf5d8e6e, 0x80000000, 0x3f56cdba, 0x0,
+0xbf596c53, 0x80000000, 0x3f576483, 0x0,
+0xbf5e3149, 0x80000000, 0x3f5ff56d, 0x0,
+0xbf694f5c, 0x80000000, 0x3f6c9c66, 0x0,
+0xbf75c5ac, 0x80000000, 0x3f778fe7, 0x0,
+0xbf7d8a7d, 0x80000000, 0x3f7b4fea, 0x0,
+0xbf7c8e59, 0x80000000, 0x3f75e7cd, 0x0,
+0xbf7326a0, 0x80000000, 0x3f69b20f, 0x0,
+0xbf6512ef, 0x80000000, 0x3f5b06b5, 0x0,
+0xbf5692a7, 0x80000000, 0x3f4d9b51, 0x0,
+0xbf4a9554, 0x80000000, 0x3f4386fe, 0x0,
+0xbf426bc1, 0x80000000, 0x3f3d7fda, 0x0,
+0xbf3e58f4, 0x80000000, 0x3f3b76b9, 0x0,
+0xbf3e1d58, 0x80000000, 0x3f3d1393, 0x0,
+0xbf415820, 0x80000000, 0x3f41fb0c, 0x0,
+0xbf47ba4a, 0x80000000, 0x3f49e9e5, 0x0,
+0xbf51076c, 0x80000000, 0x3f54a4f3, 0x0,
+0xbf5cf484, 0x80000000, 0x3f61bce1, 0x0,
+0xbf6aeabe, 0x80000000, 0x3f706adf, 0x0,
+0xbf79dfca, 0x80000000, 0x3f7f6325, 0x0,
+0xbf842dbd, 0x80000000, 0x3f868abf, 0x0,
+0xbf8a6442, 0x80000000, 0x3f8c0270, 0x0,
+0xbf8ef69f, 0x80000000, 0x3f8fb073, 0x0,
+0xbf91b868, 0x80000000, 0x3f91a610, 0x0,
+0xbf92f709, 0x80000000, 0x3f926138, 0x0,
+0xbf934fc0, 0x80000000, 0x3f928cda, 0x0,
+0xbf93694a, 0x80000000, 0x3f92bb30, 0x0,
+0xbf93b4c9, 0x80000000, 0x3f9333de, 0x0,
+0xbf944d12, 0x80000000, 0x3f93e5eb, 0x0,
+0xbf94fb01, 0x80000000, 0x3f947c4b, 0x0,
+0xbf95573c, 0x80000000, 0x3f948a85, 0x0,
+0xbf94fe52, 0x80000000, 0x3f93c2a7, 0x0,
+0xbf93c210, 0x80000000, 0x3f921cd4, 0x0,
+0xbf91c22d, 0x80000000, 0x3f8fdf01, 0x0,
+0xbf8f62f4, 0x80000000, 0x3f8d8504, 0x0,
+0xbf8d29a3, 0x80000000, 0x3f8b94ec, 0x0,
+0xbf8b90d3, 0x80000000, 0x3f8a78e5, 0x0,
+0xbf8ae9ce, 0x80000000, 0x3f8a657a, 0x0,
+0xbf8b4cb1, 0x80000000, 0x3f8b516b, 0x0,
+0xbf8c97b9, 0x80000000, 0x3f8cf87b, 0x0,
+0xbf8e7651, 0x80000000, 0x3f8eecb7, 0x0,
+0xbf906fb4, 0x80000000, 0x3f90af10, 0x0,
+0xbf91f90e, 0x80000000, 0x3f91c8ec, 0x0,
+0xbf929161, 0x80000000, 0x3f91ddcc, 0x0,
+0xbf91e788, 0x80000000, 0x3f90b1ae, 0x0,
+0xbf8ff10e, 0x80000000, 0x3f8e3384, 0x0,
+0xbf8cdabb, 0x80000000, 0x3f8a8f03, 0x0,
+0xbf88e420, 0x80000000, 0x3f862cd2, 0x0,
+0xbf845586, 0x80000000, 0x3f81818d, 0x0,
+0xbf7f23b8, 0x80000000, 0x3f79bc98, 0x0,
+0xbf761436, 0x80000000, 0x3f7101b5, 0x0,
+0xbf6e1043, 0x80000000, 0x3f697015, 0x0,
+0xbf673eec, 0x80000000, 0x3f638972, 0x0,
+0xbf61d331, 0x80000000, 0x3f5f47bc, 0x0,
+0xbf5e387c, 0x80000000, 0x3f5c7056, 0x0,
+0xbf5c7fcc, 0x80000000, 0x3f5b2f5d, 0x0,
+0xbf5c32f4, 0x80000000, 0x3f5bbc24, 0x0,
+0xbf5d2302, 0x80000000, 0x3f5dacd2, 0x0,
+0xbf5f8bd1, 0x80000000, 0x3f608aa7, 0x0,
+0xbf632be9, 0x80000000, 0x3f64703b, 0x0,
+0xbf6771ae, 0x80000000, 0x3f693726, 0x0,
+0xbf6c50a3, 0x80000000, 0x3f6e5492, 0x0,
+0xbf719f32, 0x80000000, 0x3f73aabb, 0x0,
+0xbf76ec72, 0x80000000, 0x3f78fd88, 0x0,
+0xbf7c26f1, 0x80000000, 0x3f7df6d8, 0x0,
+0xbf807bb9, 0x80000000, 0x3f815331, 0x0,
+0xbf829420, 0x80000000, 0x3f834ed1, 0x0,
+0xbf847751, 0x80000000, 0x3f84e85a, 0x0,
+0xbf85e6b5, 0x80000000, 0x3f864657, 0x0,
+0xbf86f5e8, 0x80000000, 0x3f8729b5, 0x0,
+0xbf87c9a5, 0x80000000, 0x3f87be49, 0x0,
+0xbf882b8a, 0x80000000, 0x3f881a64, 0x0,
+0xbf885856, 0x80000000, 0x3f881bae, 0x0,
+0xbf885154, 0x80000000, 0x3f87fea2, 0x0,
+0xbf880e01, 0x80000000, 0x3f87b5a5, 0x0,
+0xbf87ba6e, 0x80000000, 0x3f874d99, 0x0,
+0xbf874768, 0x80000000, 0x3f86db29, 0x0,
+0xbf86c960, 0x80000000, 0x3f865830, 0x0,
+0xbf8643ee, 0x80000000, 0x3f85d2d9, 0x0,
+0xbf85b97a, 0x80000000, 0x3f8549d5, 0x0,
+0xbf852e6f, 0x80000000, 0x3f84c1af, 0x0,
+0xbf84a2a5, 0x80000000, 0x3f8445f7, 0x0,
+0xbf846a6c, 0x80000000, 0x3f844483, 0x0,
+0xbf846987, 0x80000000, 0x3f844584, 0x0,
+0xbf846886, 0x80000000, 0x3f844682, 0x0,
+0xbf84678b, 0x80000000, 0x3f84477a, 0x0,
+0xbf846695, 0x80000000, 0x3f84486e, 0x0,
+0xbf8465a2, 0x80000000, 0x3f844960, 0x0,
+0xbf8464b2, 0x80000000, 0x3f844a50, 0x0,
+0xbf8463c3, 0x80000000, 0x3f844b3e, 0x0,
+0xbf8462d5, 0x80000000, 0x3f844c2b, 0x0,
+0xbf8461e9, 0x80000000, 0x3f844d16, 0x0,
+0xbf8460fe, 0x80000000, 0x3f844e01, 0x0,
+0xbf846014, 0x80000000, 0x3f844eeb, 0x0,
+0xbf845f2a, 0x80000000, 0x3f844fd4, 0x0,
+0xbf845e42, 0x80000000, 0x3f8450bc, 0x0,
+0xbf845d5a, 0x80000000, 0x3f8451a4, 0x0,
+0xbf845c72, 0x80000000, 0x3f84528b, 0x0,
+0xbf845b8b, 0x80000000, 0x3f845372, 0x0,
+0xbf845aa4, 0x80000000, 0x3f845459, 0x0,
+0xbf8459be, 0x80000000, 0x3f84553f, 0x0,
+0xbf8458d8, 0x80000000, 0x3f845625, 0x0,
+0xbf8457f1, 0x80000000, 0x3f84570b, 0x4c46584d,
+0xefbeadde, 0x0,
+};
+/*------ END OF FILE ------*/
--
1.7.4.1
2
1
Hi!
JFTR, we've seen users that report distorted sound on their macbooks
when using jackd.
The workaround is to force 16-bit output:
http://jackaudio.org/macbook_distortion
Chip in question was the Cirrus Logic CS4206. We don't know yet which of
the formats (32/24) is broken, maybe only one, maybe both.
I happen to have a spare MacBookPro around, but I won't have time to
look into that myself anytime soon.
If somebody else has such a device and wants to give it a whirl, feel
free to go ahead. ;)
Cheers
2
5

[alsa-devel] [PATCH v2 00/14] OMAPDSS: HDMI: Prepare for DSS dev driver audio support and OMAP5
by Ricardo Neri 12 May '12
by Ricardo Neri 12 May '12
12 May '12
Hi,
This set of patches is intended to prepare the HDMI driver to implement the DSS
device driver interface for audio proposed here:
http://www.mail-archive.com/linux-omap@vger.kernel.org/msg67804.html
In preparation for that, it removes the current ASoC HDMI codec driver and
decouples HDMI audio build configuration from ASoC. Instead, a config option
may be selected by the parties interested in the HDMI audio functionality. While
the ASoC HDMI codec is removed, HDMI audio functionality restored in the last
patch of the series in the form of DSS audio support.
Also, this set prepares the HDMI driver for the introduction of the OMAP5 HDMI
audio functionality by further abstracting the portions of code that are
generic to all HDMI implementations (e.g, N/CTS params calculation). Also, an
IP-dependent audio configuration function is introduced as an HDMI IP operation;
this function takes IP-independent parameters and applies them as required by
the IP.
For the specific case of OMAP4, the configuration of the IEC-60958 channel
status word is expanded to provide more flexibility. Also, some duplicated
IEC-60958 definitions are removed to, instead, reuse the definitions provided
by ALSA. Please note that this patches depend on the following patch adding
CEA-861 definitions:
http://www.spinics.net/lists/linux-omap/msg68246.html.
Without such patch, the patches in this series will not compile.
The changes for OMAP4 configuration expand the current support to cover more
audio sample rates: 32, 44.1, 48, 88.2, 176.4 and 192 kHz. Audio sample world
length of 16 through 24 bits as well as up to 8 audio channels.
These changes are based on the 3.4-rc5 kernel.
Validation was performed using Onkyo TX-SR508 and Yamaha RX-V367 AV receivers.
These are the changes with respect to v1:
*The DSS dev driver audio operations are, at the moment, protected using a
hardirq-safe spinlock. Except for the audio_start/stop functions, it was
concluded that a mutex could be used in the future is needed.
*In audio configuration, instead of parsing the IEC-60958 channel status word,
and setting bits individually, the word is passed directly to the IP. This
saves code, makes it more readable and fully configurable by the user.
*Split HDMI video_enable, audio_enable and audio_start into two separate
functions to enable/disable and start/stop. Also, update their return values.
*Audio channels are remapped to match the order preferred by ALSA's speaker-test.
*Remove OMAP4 HDMI IP configuration regarding High Bitrate audio and I2S
word select polarity, as this is not supported according to updated TI's
documentation.
*Rename the lock of the HDMI panel.
*Remove unneeded header files.
*Rephrase the description of several patches.
BR,
Ricardo
Axel Castaneda Gonzalez (1):
OMAPDSS: HDMI: Decouple wrapper enable/disable and audio start/stop
Ricardo Neri (13):
OMAPDSS: HDMI: Split audio_enable into audio_enable/disable
OMAPDSS: HDMI: Split video_enable into video_enable/disable
OMAPDSS: HDMI: Remove ASoC codec
OMAPDSS: HDMI: OMAP4: Remove CEA-861 audio infoframe and IEC-60958
enums
OMAPDSS: HDMI: OMAP4: Remove invalid I2S settings
OMAPDSS: HDMI: Decouple HDMI audio from ASoC
OMAPDSS: HDMI: OMAP4: Expand configuration for IEC-60958 audio
OMAPDSS: HDMI: Relocate N/CTS calculation
OMAPDSS: HDMI: Add support for more audio sample rates in N/CTS
calculation
OMAPDSS: HDMI: Add an audio configuration function
OMAPDSS: HDMI: OMAP4: Remap speaker order to match ALSA order
OMAPDSS: HDMI: Panel: Simplify the name of the HDMI mutex
OMAPDSS: HDMI: Implement DSS driver interface for audio
drivers/video/omap2/dss/Kconfig | 4 +
drivers/video/omap2/dss/dss.h | 8 +
drivers/video/omap2/dss/dss_features.c | 8 +-
drivers/video/omap2/dss/hdmi.c | 355 +++++++++++------------------
drivers/video/omap2/dss/hdmi_panel.c | 141 ++++++++++--
drivers/video/omap2/dss/ti_hdmi.h | 32 ++-
drivers/video/omap2/dss/ti_hdmi_4xxx_ip.c | 316 +++++++++++++++++++------
drivers/video/omap2/dss/ti_hdmi_4xxx_ip.h | 104 +---------
8 files changed, 537 insertions(+), 431 deletions(-)
--
1.7.5.4
2
22
The sgtl5000 data sheet does not particularly mention that the Mic Bias
will internally supplies to MIC_IN, so fix the example in imx-sgtl5000
binding document to have a better reflection of the actual circuit.
Signed-off-by: Shawn Guo <shawn.guo(a)linaro.org>
---
.../bindings/sound/imx-audio-sgtl5000.txt | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/Documentation/devicetree/bindings/sound/imx-audio-sgtl5000.txt b/Documentation/devicetree/bindings/sound/imx-audio-sgtl5000.txt
index d09b4e3..e4acdd8 100644
--- a/Documentation/devicetree/bindings/sound/imx-audio-sgtl5000.txt
+++ b/Documentation/devicetree/bindings/sound/imx-audio-sgtl5000.txt
@@ -41,8 +41,8 @@ sound {
ssi-controller = <&ssi1>;
audio-codec = <&sgtl5000>;
audio-routing =
+ "MIC_IN", "Mic Jack",
"Mic Jack", "Mic Bias",
- "MIC_IN", "Mic Bias",
"Headphone Jack", "HP_OUT";
mux-int-port = <1>;
mux-ext-port = <3>;
--
1.7.5.4
3
2

[alsa-devel] [PATCH] ASoC: cs42l73: Sync digital mixer kcontrols to allow for 0dB
by Brian Austin 11 May '12
by Brian Austin 11 May '12
11 May '12
Some of the Digital mixer kcontrol max values were off by 1 not allowing a max of 0dB.
Signed-off-by: Brian Austin <brian.austin(a)cirrus.com>
---
sound/soc/codecs/cs42l73.c | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/sound/soc/codecs/cs42l73.c b/sound/soc/codecs/cs42l73.c
index 5a537b7..e0d45fd 100644
--- a/sound/soc/codecs/cs42l73.c
+++ b/sound/soc/codecs/cs42l73.c
@@ -565,22 +565,22 @@ static const struct snd_kcontrol_new cs42l73_snd_controls[] = {
attn_tlv),
SOC_SINGLE_TLV("SPK-IP Mono Volume",
- CS42L73_SPKMIPMA, 0, 0x3E, 1, attn_tlv),
+ CS42L73_SPKMIPMA, 0, 0x3F, 1, attn_tlv),
SOC_SINGLE_TLV("SPK-XSP Mono Volume",
- CS42L73_SPKMXSPA, 0, 0x3E, 1, attn_tlv),
+ CS42L73_SPKMXSPA, 0, 0x3F, 1, attn_tlv),
SOC_SINGLE_TLV("SPK-ASP Mono Volume",
- CS42L73_SPKMASPA, 0, 0x3E, 1, attn_tlv),
+ CS42L73_SPKMASPA, 0, 0x3F, 1, attn_tlv),
SOC_SINGLE_TLV("SPK-VSP Mono Volume",
- CS42L73_SPKMVSPMA, 0, 0x3E, 1, attn_tlv),
+ CS42L73_SPKMVSPMA, 0, 0x3F, 1, attn_tlv),
SOC_SINGLE_TLV("ESL-IP Mono Volume",
- CS42L73_ESLMIPMA, 0, 0x3E, 1, attn_tlv),
+ CS42L73_ESLMIPMA, 0, 0x3F, 1, attn_tlv),
SOC_SINGLE_TLV("ESL-XSP Mono Volume",
- CS42L73_ESLMXSPA, 0, 0x3E, 1, attn_tlv),
+ CS42L73_ESLMXSPA, 0, 0x3F, 1, attn_tlv),
SOC_SINGLE_TLV("ESL-ASP Mono Volume",
- CS42L73_ESLMASPA, 0, 0x3E, 1, attn_tlv),
+ CS42L73_ESLMASPA, 0, 0x3F, 1, attn_tlv),
SOC_SINGLE_TLV("ESL-VSP Mono Volume",
- CS42L73_ESLMVSPMA, 0, 0x3E, 1, attn_tlv),
+ CS42L73_ESLMVSPMA, 0, 0x3F, 1, attn_tlv),
SOC_ENUM("IP Digital Swap/Mono Select", ip_swap_enum),
--
1.7.10
2
1
Explained by Takashi in <s5hfwbtmz0q.wl%tiwai(a)suse.de>
> The reason is because get_min_max*() isn't called in the place you
> created these controls, and get_min_max() would be called only for
> integer volumes later even if uninitialized. A short cut for booleans.
Signed-off-by: Mark Hills <mark(a)pogo.org.uk>
---
sound/usb/mixer_quirks.c | 12 ++----------
1 files changed, 2 insertions(+), 10 deletions(-)
diff --git a/sound/usb/mixer_quirks.c b/sound/usb/mixer_quirks.c
index 12125ca..41f4b69 100644
--- a/sound/usb/mixer_quirks.c
+++ b/sound/usb/mixer_quirks.c
@@ -79,16 +79,8 @@ static int snd_create_std_mono_ctl(struct usb_mixer_interface *mixer,
cval->control = control;
cval->cmask = cmask;
- /* FIXME: Do we need this?
- * The following values are for compatibility with
- * Ebox-44 mixer.
- * But the corresponding ebox-44 function says:
- * "Volume controls will override these values"
- *
- * These values don't have any effect at all for
- * M-Audio FTUs.
- * So I think, we can safely omit the range settings here.
- */
+ /* get_min_max() is called only for integer volumes later,
+ * so provide a short-cut for booleans */
cval->min = 0;
cval->max = 1;
cval->res = 0;
--
1.7.4.4
2
1

11 May '12
I'm wondering what is causing ALSA to behave as follows - I have a 64KiB
buffer, which is divided up into 4 16KiB periods. The log below is from
my soc-dmaengine.c code which supports audio on the Assabet (as we don't
have cyclic DMA support there yet.)
I'm just trying to sort out the DMA engine tx_status residue code, and
am using this as proof that its working.
However, it seems that ALSA for whatever reason likes to hammer away at
the pcm_pointer callback from time to time:
soc_dmaengine_pointer: index 3 stat 1 residue 0018 cookie 3cfe pos 10000 bytes ffe8
soc_dmaengine_pointer: index 3 stat 1 residue 0008 cookie 3cfe pos 10000 bytes fff8
soc_dmaengine_callback: complete
soc_dmaengine_pointer: index 0 stat 1 residue 3ff0 cookie 3cff pos 4000 bytes 0010
soc_dmaengine_submit: submitting index 3 size 4000 cookie 3d02
soc_dmaengine_pointer: index 0 stat 1 residue 3fd0 cookie 3cff pos 4000 bytes 0030
soc_dmaengine_pointer: index 0 stat 1 residue 17b8 cookie 3cff pos 4000 bytes 2848
soc_dmaengine_pointer: index 0 stat 1 residue 1770 cookie 3cff pos 4000 bytes 2890
soc_dmaengine_pointer: index 0 stat 1 residue 1768 cookie 3cff pos 4000 bytes 2898
soc_dmaengine_pointer: index 0 stat 1 residue 1758 cookie 3cff pos 4000 bytes 28a8
soc_dmaengine_pointer: index 0 stat 1 residue 1748 cookie 3cff pos 4000 bytes 28b8
soc_dmaengine_pointer: index 0 stat 1 residue 1740 cookie 3cff pos 4000 bytes 28c0
soc_dmaengine_pointer: index 0 stat 1 residue 1730 cookie 3cff pos 4000 bytes 28d0
soc_dmaengine_pointer: index 0 stat 1 residue 1720 cookie 3cff pos 4000 bytes 28e0
soc_dmaengine_pointer: index 0 stat 1 residue 1718 cookie 3cff pos 4000 bytes 28e8
...
soc_dmaengine_pointer: index 0 stat 1 residue 0018 cookie 3cff pos 4000 bytes 3fe8
soc_dmaengine_pointer: index 0 stat 1 residue 0008 cookie 3cff pos 4000 bytes 3ff8
soc_dmaengine_callback: complete
soc_dmaengine_pointer: index 1 stat 1 residue 3ff0 cookie 3d00 pos 8000 bytes 4010
soc_dmaengine_submit: submitting index 0 size 4000 cookie 3d03
soc_dmaengine_pointer: index 1 stat 1 residue 3fd0 cookie 3d00 pos 8000 bytes 4030
soc_dmaengine_pointer: index 1 stat 1 residue 3b28 cookie 3d00 pos 8000 bytes 44d8
soc_dmaengine_pointer: index 1 stat 1 residue 3b10 cookie 3d00 pos 8000 bytes 44f0
soc_dmaengine_pointer: index 1 stat 1 residue 3b00 cookie 3d00 pos 8000 bytes 4500
'pos' is the end of the current DMA buffer ((index + 1) * period_byte_size)
'residue' is the value returned from tx_status
'bytes' is the value passed into bytes_to_frames() to return from my
pcm_pointer function.
The question is - what would cause ALSA to hammer away at the buffer
like that - checking it every 16 or 8 DMA bytes transferred? I'm also
seeing around 75% system CPU time, which really isn't good.
The above was captured while aplay was running, with no apparant audio
corruption.
Any ideas?
5
20

11 May '12
[Re-added Cc to alsa-devel to let others following]
At Fri, 11 May 2012 10:37:44 -0300,
Dâniel Fraga wrote:
>
> On Fri, 11 May 2012 09:43:48 +0200
> Takashi Iwai <tiwai(a)suse.de> wrote:
>
> > Does it mean that you have no headphone, or does the machine have no
> > headphone jack?
>
> The machine has a headphone jack, but I never use a headphone.
>
> > That's why I'm asking to test. Usually when such a noise occurs due
> > to the auto-mute feature, it's because the bogus unsolicited events
> > are fired up too much although no jack is plugged actually. Thus
> > usually the auto-mute feature itself doesn't work in such a case
> > (either no hardware implementation or the hardware has its own
> > switching mechanism.)
>
> I understand. Ok... so you want me to plug the headphone and
> test if the auto-mute works right? Ok, I did that and yes, it works
> fine as expected (the audio from speakers is automatically muted when a
> headphone is inserted).
Hm, so it's strange that the auto-mute causes a problem.
Could you check which unsolicited events are triggered on your
machine? When you build your kernel with the tracing support
(CONFIG_TRACEPOINTS=y), you can enable the tracing via
% echo 1 > /sys/kernel/debug/tracing/events/hda/hda_unsol_event/enable
then after some time, gather the result by checking
/sys/kernel/debug/tracing/trace file. The output is like below.
% cat /sys/kernel/debug/tracing/trace
# tracer: nop
#
# entries-in-buffer/entries-written: 4/4 #P:4
#
# _-----=> irqs-off
# / _----=> need-resched
# | / _---=> hardirq/softirq
# || / _--=> preempt-depth
# ||| / delay
# TASK-PID CPU# |||| TIMESTAMP FUNCTION
# | | | |||| | |
<idle>-0 [001] d.h3 10157.942108: hda_unsol_event: [0] res=10010020, res_ex=10
<idle>-0 [001] d.h3 10158.848271: hda_unsol_event: [0] res=10010000, res_ex=10
.....
Check whether the events come up frequently even without
plugging/unplugging any jacks. Usually this shouldn't happen. But in
the case of problematic hardware with the auto-mute, many bogus unsol
events are triggered.
thanks,
Takashi
2
5
I changed my motherboard to Asus P8Z68V-Pro/gen3 and it uses
the Realtek ACL892.
Everything works, except for the fact that the sound has a
"gap" each 10 seconds... it's annoying... it's just like a small pop or
click...
What can I do to debug that? Is there a workaround I can try?
Thanks.
--
Linux 3.3.0: Saber-toothed Squirrel
http://www.youtube.com/DanielFragaBR
4
11

11 May '12
It allows showing the vu-meter while recording to stdout, eg:
aplay -C -V stereo | oggenc - > out.ogg
Signed-off-by: Jerome Carretero <cJ(a)zougloub.eu>
diff --git a/aplay/aplay.c b/aplay/aplay.c
index 1ce34c4..8462484 100644
--- a/aplay/aplay.c
+++ b/aplay/aplay.c
@@ -1453,9 +1453,9 @@ static void print_vu_meter_mono(int perc, int maxperc)
sprintf(line + val, "| MAX");
else
sprintf(line + val, "| %02i%%", maxperc);
- fputs(line, stdout);
+ fputs(line, stderr);
if (perc > 100)
- printf(_(" !clip "));
+ fprintf(stderr, _(" !clip "));
}
static void print_vu_meter_stereo(int *perc, int *maxperc)
@@ -1493,7 +1493,7 @@ static void print_vu_meter_stereo(int *perc, int *maxperc)
memcpy(line + bar_length, tmp, 3);
}
line[bar_length * 2 + 6 + 2] = 0;
- fputs(line, stdout);
+ fputs(line, stderr);
}
static void print_vu_meter(signed int *perc, signed int *maxperc)
@@ -1631,9 +1631,9 @@ static void compute_max_peak(u_char *data, size_t count)
if (perc[c] > maxperc[c])
maxperc[c] = perc[c];
- putchar('\r');
+ putc('\r', stderr);
print_vu_meter(perc, maxperc);
- fflush(stdout);
+ fflush(stderr);
}
else if(verbose==3) {
printf(_("Max peak (%li samples): 0x%08x "), (long)ocount, max_peak[0]);
@@ -1642,8 +1642,8 @@ static void compute_max_peak(u_char *data, size_t count)
putchar('#');
else
putchar(' ');
- printf(" %i%%\n", perc[0]);
- fflush(stdout);
+ fprintf(stderr, " %i%%\n", perc[0]);
+ fflush(stderr);
}
}
--
1.7.10
2
2
This series adds device tree probe for mxs-saif driver and mxs-sgtl5000
ASoC machine driver, and is tested on imx28-evk board.
It's based on sound, clkdev, mxs pinctrl and DT branches, and probably
easier to have it go through arm-soc with sound/for-3.5 pulled in as
dependency.
Shawn Guo (6):
ASoC: mxs: add __devinit for mxs_saif_probe
ASoC: mxs: use devm_clk_get for mxs_saif_probe
ASoC: mxs: mxs-pcm does not need to be a plaform_driver
ASoC: mxs: add device tree support for mxs-saif
ASoC: mxs: add device tree support for mxs-sgtl5000
ARM: dts: enable audio support for imx28-evk
.../bindings/sound/mxs-audio-sgtl5000.txt | 17 +++
.../devicetree/bindings/sound/mxs-saif.txt | 36 ++++++
arch/arm/boot/dts/imx28-evk.dts | 41 +++++++
arch/arm/boot/dts/imx28.dtsi | 23 ++++
sound/soc/mxs/mxs-pcm.c | 24 +---
sound/soc/mxs/mxs-pcm.h | 3 +
sound/soc/mxs/mxs-saif.c | 119 +++++++++++---------
sound/soc/mxs/mxs-saif.h | 1 -
sound/soc/mxs/mxs-sgtl5000.c | 61 ++++++++++-
9 files changed, 253 insertions(+), 72 deletions(-)
3
24
Marc Nostromo [M-.-n] wrote:
> > The alsa-driver package has the snddevices script, but it works only if
> > the kernel was compiled without CONFIG_SND_DYNAMIC_MINORS.
>
> So I should be able to use it to create the devices ?
Yes.
Regards,
Clemens
1
0
Hi,
I'm trying to get alsa to work on an open source korean game console called
the caanoo
http://en.wikipedia.org/wiki/CAANOO
It's open source and pretty cheap with respect to the horse power it
delivers, so using it as base for an embedded synth / sequencer makes a lot
of sense to me.
I've successfully compiled and loaded the modules for audio & midi support
but I'm still stuck with the last step so I wondered if I could get any
help over here, I hope it's the right place to ask.
Right now, when I connect a midi device through USB, I get the following
console message
root@wiz:/mnt/sd/ko_s# dmesg
> usb 1-1: new full speed USB device using UBI9032 Test HCD and address 2
> usb 1-1: configuration #1 chosen from 1 choice
> MIDIStreaming version 01.00
> EP 82: 1 jack(s)
> EP 02: 1 jack(s)
> created 1 output and 1 input ports
And querying /proc/asound gives me
root@wiz:/mnt/sd/ko_s# cat /proc/asound/*
> 0 [nanoKONTROL ]: USB-Audio =96 nanoKONTROL
> KORG INC. nanoKONTROL at usb-ubisys-usb-1, full speed
> 0: [ 0] : control
> 1: : sequencer
> 8: [ 0- 0]: raw midi
> 33: : timer 0 snd_usb_audio
> G0: system timer : 10000.000us (10000000 ticks)
> Advanced Linux Sound Architecture Driver Version 1.0.15 (Tue Nov 20
> 19:16:42 2007 UTC).
So I'm thinking I'm on the right track.
But I don't see anything in /dev to connect to so I can't really do
anything with my device.
_From what I read here
http://www.gp32x.com/board/index.php?/topic/60064-usbrs232-device-with-the-=
caanoo/page__p__954641&#entry954641
it could be due to the fact /dev is mounted in read-only (and that there's
no /dev/midiXX present) and that I need to create the device file with
mknod.
However I'm not sure of what I should do in the specific context of
midi/audio with alsa. Right now all I'm looking for is raw midi & pcm out.
Could anyone give me a clue as what to try next ?
Thanks a lot
Marc
---
http://www.marc-nostromo.com
3
2

[alsa-devel] [PATCH] atmel/ac97c: correct the unexpected behavior when using uninitial value for reset pin
by Bo Shen 11 May '12
by Bo Shen 11 May '12
11 May '12
When pdata->reset_pin is passed with a negative value (means gpio
is invalid), then chip->reset_pin will not be assigned to a vaule,
it will use default value 0. This will cause unexpected behavior.
So, add this patch to correct.
Signed-off-by: Bo Shen <voice.shen(a)atmel.com>
Acked-by: Nicolas Ferre <nicolas.ferre(a)atmel.com>
---
sound/atmel/ac97c.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/sound/atmel/ac97c.c b/sound/atmel/ac97c.c
index 115313e..f5ded64 100644
--- a/sound/atmel/ac97c.c
+++ b/sound/atmel/ac97c.c
@@ -991,6 +991,8 @@ static int __devinit atmel_ac97c_probe(struct platform_device *pdev)
gpio_direction_output(pdata->reset_pin, 1);
chip->reset_pin = pdata->reset_pin;
}
+ } else {
+ chip->reset_pin = -EINVAL;
}
snd_card_set_dev(card, &pdev->dev);
--
1.7.10
2
1
I've written this code to play a sine wave but I don't think it's right.
Could you tell me where I am wrong?
Especially I don't know what period_time and buffer_time are. What I
have to do to extend the playback time?
Code:
#include <alsa/asoundlib.h>
#include <math.h>
int main() {
int err;
snd_pcm_t *handle;
snd_pcm_hw_params_t *params;
unsigned int Fc, val;
int channels=2;
int size;
int dir=0;
unsigned int period_time= 400000;
unsigned int buffer_time= 800000;
snd_pcm_uframes_t frames;
snd_pcm_uframes_t bufferSize;
char *buffer;
/* Open PCM device for playback. */
err = snd_pcm_open(&handle, "default",SND_PCM_STREAM_PLAYBACK, 0);
if (err < 0) {
fprintf(stderr,"unable to open pcm device: %s\n",snd_strerror(err));
exit(1);
}
snd_pcm_hw_params_alloca(¶ms);
err=snd_pcm_hw_params_any(handle, params);
if (err < 0) {
printf("Broken configuration for playback: no configurations
available: %s\n", snd_strerror(err));
return err;
}
err = snd_pcm_hw_params_set_access(handle, params,
SND_PCM_ACCESS_RW_INTERLEAVED);
if (err < 0) {
printf("Access type not available for playback: %s\n",
snd_strerror(err));
return err;
}
err=snd_pcm_hw_params_set_format(handle, params,
SND_PCM_FORMAT_S16_LE);
if (err < 0) {
printf("Sample format not available for playback: %s\n",
snd_strerror(err));
return err;
}
err = snd_pcm_hw_params_set_channels(handle, params, channels);
if (err < 0) {
printf("Channels count (%i) not available for playbacks: %s\n",
channels, snd_strerror(err));
return err;
}
Fc = 5000;
dir=1;
err=snd_pcm_hw_params_set_rate_near(handle, params, &Fc, &dir);
if (err < 0) {
printf("Rate %iHz not available for playback: %s\n", Fc,
snd_strerror(err));
return err;
}
dir=0;
err = snd_pcm_hw_params_set_period_time_near(handle, params,
&period_time, &dir);
if (err < 0) {
printf("Unable to set period time %i for playback:
%s\n", period_time, snd_strerror(err));
return err;
}
err = snd_pcm_hw_params_set_buffer_time_near(handle, params,
&buffer_time, &dir);
if (err < 0) {
printf("Unable to set buffer time %i for playback:
%s\n", buffer_time, snd_strerror(err));
return err;
}
err = snd_pcm_hw_params(handle, params);
if (err < 0) {
printf("Unable to set hw params for playback: %s\n",
snd_strerror(err));
return err;
}
/* Use a buffer large enough to hold one period */
snd_pcm_hw_params_get_period_size(params, &frames, 0);
size = frames * 4;
short buf[size];
unsigned short ampiezza;
double frequenza = 500;
double omega; /* Pulsazione */
int x;
omega = 2 * M_PI * frequenza / 180;
ampiezza = 20000;
for (x = 0; x < size ; x++)
{
buf[x] = (short)(ampiezza * (sin (omega*x)));
}
err = snd_pcm_writei(handle, buf, frames);
if (err == -EPIPE) {
fprintf(stderr, "underrun occurred\n");
snd_pcm_prepare(handle);
} else if (err < 0) {
fprintf(stderr,
"error from writei: %s\n",
snd_strerror(err));
} else if (err != (int)frames) {
fprintf(stderr,
"short write, write %d frames\n", err);
}
snd_pcm_drain(handle);
snd_pcm_close(handle);
return 0;
}
2
1

10 May '12
They pollute the global namespace and cause sparse to complain.
Signed-off-by: Mark Brown <broonie(a)opensource.wolfsonmicro.com>
---
sound/soc/soc-pcm.c | 22 ++++++++++++----------
1 file changed, 12 insertions(+), 10 deletions(-)
diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c
index a3ea8a7..82766af 100644
--- a/sound/soc/soc-pcm.c
+++ b/sound/soc/soc-pcm.c
@@ -632,7 +632,8 @@ static int soc_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
return 0;
}
-int soc_pcm_bespoke_trigger(struct snd_pcm_substream *substream, int cmd)
+static int soc_pcm_bespoke_trigger(struct snd_pcm_substream *substream,
+ int cmd)
{
struct snd_soc_pcm_runtime *rtd = substream->private_data;
struct snd_soc_platform *platform = rtd->platform;
@@ -1087,7 +1088,7 @@ unwind:
return err;
}
-void dpcm_set_fe_runtime(struct snd_pcm_substream *substream)
+static void dpcm_set_fe_runtime(struct snd_pcm_substream *substream)
{
struct snd_pcm_runtime *runtime = substream->runtime;
struct snd_soc_pcm_runtime *rtd = substream->private_data;
@@ -1247,7 +1248,7 @@ static int dpcm_be_dai_hw_free(struct snd_soc_pcm_runtime *fe, int stream)
return 0;
}
-int dpcm_fe_dai_hw_free(struct snd_pcm_substream *substream)
+static int dpcm_fe_dai_hw_free(struct snd_pcm_substream *substream)
{
struct snd_soc_pcm_runtime *fe = substream->private_data;
int err, stream = substream->stream;
@@ -1354,8 +1355,8 @@ unwind:
return ret;
}
-int dpcm_fe_dai_hw_params(struct snd_pcm_substream *substream,
- struct snd_pcm_hw_params *params)
+static int dpcm_fe_dai_hw_params(struct snd_pcm_substream *substream,
+ struct snd_pcm_hw_params *params)
{
struct snd_soc_pcm_runtime *fe = substream->private_data;
int ret, stream = substream->stream;
@@ -1404,7 +1405,8 @@ static int dpcm_do_trigger(struct snd_soc_dpcm *dpcm,
return ret;
}
-int dpcm_be_dai_trigger(struct snd_soc_pcm_runtime *fe, int stream, int cmd)
+static int dpcm_be_dai_trigger(struct snd_soc_pcm_runtime *fe, int stream,
+ int cmd)
{
struct snd_soc_dpcm *dpcm;
int ret = 0;
@@ -1497,7 +1499,7 @@ int dpcm_be_dai_trigger(struct snd_soc_pcm_runtime *fe, int stream, int cmd)
}
EXPORT_SYMBOL_GPL(dpcm_be_dai_trigger);
-int dpcm_fe_dai_trigger(struct snd_pcm_substream *substream, int cmd)
+static int dpcm_fe_dai_trigger(struct snd_pcm_substream *substream, int cmd)
{
struct snd_soc_pcm_runtime *fe = substream->private_data;
int stream = substream->stream, ret;
@@ -1605,7 +1607,7 @@ static int dpcm_be_dai_prepare(struct snd_soc_pcm_runtime *fe, int stream)
return ret;
}
-int dpcm_fe_dai_prepare(struct snd_pcm_substream *substream)
+static int dpcm_fe_dai_prepare(struct snd_pcm_substream *substream)
{
struct snd_soc_pcm_runtime *fe = substream->private_data;
int stream = substream->stream, ret = 0;
@@ -1935,7 +1937,7 @@ int soc_dpcm_be_digital_mute(struct snd_soc_pcm_runtime *fe, int mute)
return 0;
}
-int dpcm_fe_dai_open(struct snd_pcm_substream *fe_substream)
+static int dpcm_fe_dai_open(struct snd_pcm_substream *fe_substream)
{
struct snd_soc_pcm_runtime *fe = fe_substream->private_data;
struct snd_soc_dpcm *dpcm;
@@ -1972,7 +1974,7 @@ int dpcm_fe_dai_open(struct snd_pcm_substream *fe_substream)
return ret;
}
-int dpcm_fe_dai_close(struct snd_pcm_substream *fe_substream)
+static int dpcm_fe_dai_close(struct snd_pcm_substream *fe_substream)
{
struct snd_soc_pcm_runtime *fe = fe_substream->private_data;
struct snd_soc_dpcm *dpcm;
--
1.7.10
2
1

[alsa-devel] [PATCH] ASoC: ux500: Don't make the CPU I2S driver user selectable
by Mark Brown 10 May '12
by Mark Brown 10 May '12
10 May '12
It can only be used with a machine driver so the idiomatic thing for
ASoC is to select this driver from the machine driver.
Signed-off-by: Mark Brown <broonie(a)opensource.wolfsonmicro.com>
---
sound/soc/ux500/Kconfig | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/sound/soc/ux500/Kconfig b/sound/soc/ux500/Kconfig
index 1be1f50..44cf434 100644
--- a/sound/soc/ux500/Kconfig
+++ b/sound/soc/ux500/Kconfig
@@ -10,7 +10,5 @@ menuconfig SND_SOC_UX500
any of the Ux500 platforms (e.g. U8500).
config SND_SOC_UX500_PLAT_MSP_I2S
- tristate "Platform - MSP (I2S)"
+ tristate
depends on SND_SOC_UX500
- help
- Say Y if you want to enable the Ux500 MSP I2S-driver.
--
1.7.10
1
0
Hi,
I have often wondered whether Alsa had an intrinsic requirement that an int
would always be at least 32-bit, but been unable to find a clear statement
with web searches.
Looking recently at snd_pcm_hw_params_set_rate(), for example, the rate value
parameter is unsigned int, which suggests to me that it would be broken with
16-bit ints; is it correct then to deduce that Alsa does not support 16-bit
int platforms?
Regards,
Alan
2
1

[alsa-devel] [PATCH v3] OMAPDSS: HDMI: Implement DSS driver interface for audio
by Ricardo Neri 10 May '12
by Ricardo Neri 10 May '12
10 May '12
Hi,
This patch is the third version of PATCH 14 of this series:
http://www.spinics.net/lists/linux-omap/msg69466.html
I send this patch separately to ease review, as the rest of the
patches in the series were regarded as OK by the DSS maintainer.
Changes with respect to v2:
*An improved locking strategy. The new strategy maintains an audio state
machine. The audio state may only be transitioned if the panel is active.
Audio can only be started if the previous state is AUDIO_ENABLED. Such state
may only be reached if the panel is enabled. If the panel is disabled, it
will also disable audio. As the panel and audio states are protected by
a mutex and a spinlock, a video thread and audio thread cannot concurrently
execute audio functions.
BR,
Ricardo
Ricardo Neri (1):
OMAPDSS: HDMI: Implement DSS driver interface for audio
drivers/video/omap2/dss/dss.h | 8 ++
drivers/video/omap2/dss/hdmi.c | 42 ++++++++++
drivers/video/omap2/dss/hdmi_panel.c | 140 ++++++++++++++++++++++++++++++++++
3 files changed, 190 insertions(+), 0 deletions(-)
--
1.7.5.4
1
1

10 May '12
Hi,
This patch is proposed as a result of a previous discussion related to
include audio support in the DSS device driver
(http://www.spinics.net/lists/linux-omap/msg64748.html)
At the moment, this is intended to cover display technologies with audio based
on CEA-861 and IEC-60958, such as HDMI and DisplayPort. However, provisions are
made to make it extensible (see below).
These are the changes with respect to v2:
* A new enum and field is added to DSS to help implementations of the interface
to keep track of the audio state.
These are the changes with respect to v1:
* The audio_enable and audio_start functions were split into enable/disable
and start/stop respectively to improve readability.
* Comments were added on whether the DSS audio functions may sleep.
* In order to make the audio configuration parameters extensible, a
struct omap_dss_audio is defined. This helps to easily add more config
parameters in the future if/when required (e.g., speaker order configuration).
BR,
Ricardo
Ricardo Neri (1):
OMAPDSS: Provide an interface for audio support
Documentation/arm/OMAP/DSS | 45 ++++++++++++++++++++++++++++++++++++++++++++
include/video/omapdss.h | 34 +++++++++++++++++++++++++++++++++
2 files changed, 79 insertions(+), 0 deletions(-)
--
1.7.5.4
1
1

09 May '12
Makes sparse happy and avoids polluting the global namespace.
Signed-off-by: Mark Brown <broonie(a)opensource.wolfsonmicro.com>
---
sound/soc/codecs/cs42l52.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/sound/soc/codecs/cs42l52.c b/sound/soc/codecs/cs42l52.c
index 703060d..a710941 100644
--- a/sound/soc/codecs/cs42l52.c
+++ b/sound/soc/codecs/cs42l52.c
@@ -919,7 +919,7 @@ static struct snd_soc_dai_ops cs42l52_ops = {
.set_sysclk = cs42l52_set_sysclk,
};
-struct snd_soc_dai_driver cs42l52_dai = {
+static struct snd_soc_dai_driver cs42l52_dai = {
.name = "cs42l52",
.playback = {
.stream_name = "Playback",
@@ -1163,7 +1163,7 @@ static int cs42l52_remove(struct snd_soc_codec *codec)
return 0;
}
-struct snd_soc_codec_driver soc_codec_dev_cs42l52 = {
+static struct snd_soc_codec_driver soc_codec_dev_cs42l52 = {
.probe = cs42l52_probe,
.remove = cs42l52_remove,
.suspend = cs42l52_suspend,
--
1.7.10
2
1

[alsa-devel] [PATCH 1/2] ASoC: wm8994: Add debounce to wm8994 mic detection
by Mark Brown 09 May '12
by Mark Brown 09 May '12
09 May '12
Signed-off-by: Mark Brown <broonie(a)opensource.wolfsonmicro.com>
---
sound/soc/codecs/wm8994.c | 27 ++++++++++++++++++++-------
sound/soc/codecs/wm8994.h | 2 ++
2 files changed, 22 insertions(+), 7 deletions(-)
diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c
index dfc4e90..93d81a9 100644
--- a/sound/soc/codecs/wm8994.c
+++ b/sound/soc/codecs/wm8994.c
@@ -3227,22 +3227,20 @@ int wm8994_mic_detect(struct snd_soc_codec *codec, struct snd_soc_jack *jack,
}
EXPORT_SYMBOL_GPL(wm8994_mic_detect);
-static irqreturn_t wm8994_mic_irq(int irq, void *data)
+static void wm8994_mic_work(struct work_struct *work)
{
- struct wm8994_priv *priv = data;
+ struct wm8994_priv *priv = container_of(work,
+ struct wm8994_priv,
+ mic_work.work);
struct snd_soc_codec *codec = priv->codec;
int reg;
int report;
-#ifndef CONFIG_SND_SOC_WM8994_MODULE
- trace_snd_soc_jack_irq(dev_name(codec->dev));
-#endif
-
reg = snd_soc_read(codec, WM8994_INTERRUPT_RAW_STATUS_2);
if (reg < 0) {
dev_err(codec->dev, "Failed to read microphone status: %d\n",
reg);
- return IRQ_HANDLED;
+ return;
}
dev_dbg(codec->dev, "Microphone status: %x\n", reg);
@@ -3284,6 +3282,20 @@ static irqreturn_t wm8994_mic_irq(int irq, void *data)
snd_soc_jack_report(priv->micdet[1].jack, report,
SND_JACK_HEADSET | SND_JACK_BTN_0);
+}
+
+static irqreturn_t wm8994_mic_irq(int irq, void *data)
+{
+ struct wm8994_priv *priv = data;
+ struct snd_soc_codec *codec = priv->codec;
+
+#ifndef CONFIG_SND_SOC_WM8994_MODULE
+ trace_snd_soc_jack_irq(dev_name(codec->dev));
+#endif
+
+ pm_wakeup_event(codec->dev, 300);
+
+ schedule_delayed_work(&priv->mic_work, msecs_to_jiffies(250));
return IRQ_HANDLED;
}
@@ -3656,6 +3668,7 @@ static int wm8994_codec_probe(struct snd_soc_codec *codec)
wm8994->codec = codec;
mutex_init(&wm8994->accdet_lock);
+ INIT_DELAYED_WORK(&wm8994->mic_work, wm8994_mic_work);
for (i = 0; i < ARRAY_SIZE(wm8994->fll_locked); i++)
init_completion(&wm8994->fll_locked[i]);
diff --git a/sound/soc/codecs/wm8994.h b/sound/soc/codecs/wm8994.h
index 91650bb..d77e06f 100644
--- a/sound/soc/codecs/wm8994.h
+++ b/sound/soc/codecs/wm8994.h
@@ -12,6 +12,7 @@
#include <sound/soc.h>
#include <linux/firmware.h>
#include <linux/completion.h>
+#include <linux/workqueue.h>
#include "wm_hubs.h"
@@ -127,6 +128,7 @@ struct wm8994_priv {
struct mutex accdet_lock;
struct wm8994_micdet micdet[2];
+ struct delayed_work mic_work;
bool mic_detecting;
bool jack_mic;
int btn_mask;
--
1.7.10
1
1