summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
Diffstat (limited to 'sys')
-rw-r--r--sys/amd64/amd64/cpu_switch.S3
-rw-r--r--sys/amd64/amd64/fpu.c153
-rw-r--r--sys/amd64/amd64/machdep.c2
-rw-r--r--sys/amd64/amd64/pmap.c164
-rw-r--r--sys/amd64/amd64/ptrace_machdep.c7
-rw-r--r--sys/amd64/amd64/trap.c17
-rw-r--r--sys/amd64/amd64/vm_machdep.c4
-rw-r--r--sys/amd64/include/cpufunc.h7
-rw-r--r--sys/amd64/include/fpu.h3
-rw-r--r--sys/amd64/include/md_var.h1
-rw-r--r--sys/amd64/include/pcpu.h22
-rw-r--r--sys/arm/arm/nexus.c8
-rw-r--r--sys/arm/at91/at91.c48
-rw-r--r--sys/arm/at91/at91_machdep.c33
-rw-r--r--sys/arm/at91/at91_pio_rm9200.h208
-rw-r--r--sys/arm/at91/at91_pio_sam9g45.h272
-rw-r--r--sys/arm/at91/at91_pmc.c48
-rw-r--r--sys/arm/at91/at91_pmcreg.h13
-rw-r--r--sys/arm/at91/at91_spi.c18
-rw-r--r--sys/arm/at91/at91rm9200.c113
-rw-r--r--sys/arm/at91/at91rm9200_devices.c142
-rw-r--r--sys/arm/at91/at91rm9200var.h58
-rw-r--r--sys/arm/at91/at91sam9260.c115
-rw-r--r--sys/arm/at91/at91sam9g20.c119
-rw-r--r--sys/arm/at91/at91sam9g45.c177
-rw-r--r--sys/arm/at91/at91sam9g45reg.h294
-rw-r--r--sys/arm/at91/at91sam9x5.c (renamed from sys/arm/at91/at91sam9x25.c)107
-rw-r--r--sys/arm/at91/at91sam9x5reg.h (renamed from sys/arm/at91/at91sam9x25reg.h)7
-rw-r--r--sys/arm/at91/at91var.h5
-rw-r--r--sys/arm/at91/board_bwct.c35
-rw-r--r--sys/arm/at91/board_ethernut5.c2
-rw-r--r--sys/arm/at91/board_hl200.c43
-rw-r--r--sys/arm/at91/board_kb920x.c53
-rw-r--r--sys/arm/at91/board_sam9260ek.c169
-rw-r--r--sys/arm/at91/board_sn9g45.c55
-rw-r--r--sys/arm/at91/board_tsc4370.c46
-rw-r--r--sys/arm/at91/files.at9115
-rw-r--r--sys/arm/at91/hints.at91rm920068
-rw-r--r--sys/arm/at91/hints.at91sam926167
-rw-r--r--sys/arm/at91/if_ate.c24
-rw-r--r--sys/arm/at91/std.at91sam9g4514
-rw-r--r--sys/arm/at91/std.atmel3
-rw-r--r--sys/arm/at91/std.sam9260ek11
-rw-r--r--sys/arm/at91/std.sam9x25ek2
-rw-r--r--sys/arm/at91/std.sn9g4512
-rw-r--r--sys/arm/at91/uart_bus_at91usart.c6
-rw-r--r--sys/arm/at91/uart_cpu_at91usart.c (renamed from sys/arm/at91/uart_cpu_at91rm9200usart.c)6
-rw-r--r--sys/arm/conf/ATMEL13
-rw-r--r--sys/arm/conf/ETHERNUT54
-rw-r--r--sys/arm/conf/ETHERNUT5.hints2
-rw-r--r--sys/arm/conf/HL2012
-rw-r--r--sys/arm/conf/KB920X6
-rw-r--r--sys/arm/conf/QILA9G201
-rw-r--r--sys/arm/conf/SAM9260EK166
-rw-r--r--sys/arm/conf/SAM9260EK.hints48
-rw-r--r--sys/arm/conf/SAM9G20EK1
-rw-r--r--sys/arm/conf/SAM9X25EK3
-rw-r--r--sys/arm/conf/SN9G45129
-rw-r--r--sys/arm/econa/econa.c2
-rw-r--r--sys/arm/mv/common.c15
-rw-r--r--sys/arm/mv/gpio.c3
-rw-r--r--sys/arm/mv/ic.c4
-rw-r--r--sys/arm/mv/kirkwood/kirkwood.c2
-rw-r--r--sys/arm/mv/mv_sata.c1
-rw-r--r--sys/arm/mv/mvreg.h1
-rw-r--r--sys/arm/s3c2xx0/s3c24x0.c1
-rw-r--r--sys/arm/xscale/i8134x/i81342.c1
-rw-r--r--sys/arm/xscale/pxa/pxa_obio.c1
-rw-r--r--sys/boot/arm/at91/bootspi/ee.c8
-rw-r--r--sys/boot/arm/at91/libat91/at91rm9200.h2
-rw-r--r--sys/boot/arm/at91/libat91/at91rm9200_lowlevel.c4
-rw-r--r--sys/boot/arm/at91/libat91/eeprom.c8
-rw-r--r--sys/boot/arm/at91/libat91/emac_init.c28
-rw-r--r--sys/boot/arm/at91/libat91/lib_AT91RM9200.h12
-rw-r--r--sys/boot/arm/at91/libat91/spi_flash.c8
-rw-r--r--sys/boot/ficl/Makefile2
-rw-r--r--sys/boot/forth/beastie.4th2
-rw-r--r--sys/boot/forth/beastie.4th.82
-rw-r--r--sys/boot/forth/brand.4th2
-rw-r--r--sys/boot/forth/brand.4th.82
-rw-r--r--sys/boot/forth/check-password.4th2
-rw-r--r--sys/boot/forth/check-password.4th.82
-rw-r--r--sys/boot/forth/color.4th2
-rw-r--r--sys/boot/forth/color.4th.82
-rw-r--r--sys/boot/forth/delay.4th2
-rw-r--r--sys/boot/forth/delay.4th.82
-rw-r--r--sys/boot/forth/menu-commands.4th2
-rw-r--r--sys/boot/forth/menu.4th2
-rw-r--r--sys/boot/forth/menu.4th.82
-rw-r--r--sys/boot/forth/shortcuts.4th2
-rw-r--r--sys/boot/forth/version.4th2
-rw-r--r--sys/boot/forth/version.4th.82
-rw-r--r--sys/boot/sparc64/loader/main.c52
-rw-r--r--sys/boot/zfs/Makefile2
-rw-r--r--sys/cam/ata/ata_all.c6
-rw-r--r--sys/cam/ata/ata_all.h1
-rw-r--r--sys/cam/ata/ata_xpt.c12
-rw-r--r--sys/cam/cam_ccb.h1
-rw-r--r--sys/cam/cam_periph.c7
-rw-r--r--sys/cam/cam_xpt.c1
-rw-r--r--sys/cam/ctl/scsi_ctl.c128
-rw-r--r--sys/cam/scsi/scsi_all.c173
-rw-r--r--sys/cam/scsi/scsi_cd.c130
-rw-r--r--sys/cam/scsi/scsi_da.c136
-rw-r--r--sys/cam/scsi/scsi_enc.c2
-rw-r--r--sys/cam/scsi/scsi_enc_safte.c2
-rw-r--r--sys/cam/scsi/scsi_enc_ses.c4
-rw-r--r--sys/cam/scsi/scsi_ses.h2
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c21
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfeature.h2
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfeature.c9
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c12
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h1
-rw-r--r--sys/cddl/dev/dtrace/amd64/dtrace_subr.c9
-rw-r--r--sys/cddl/dev/dtrace/i386/dtrace_subr.c9
-rw-r--r--sys/compat/ia32/ia32_sysvec.c2
-rw-r--r--sys/compat/ia32/ia32_util.h17
-rw-r--r--sys/conf/Makefile.arm2
-rw-r--r--sys/conf/NOTES2
-rw-r--r--sys/conf/files14
-rw-r--r--sys/contrib/libfdt/fdt.c9
-rw-r--r--sys/contrib/libfdt/fdt_empty_tree.c84
-rw-r--r--sys/contrib/libfdt/fdt_ro.c123
-rw-r--r--sys/contrib/libfdt/fdt_rw.c27
-rw-r--r--sys/contrib/libfdt/libfdt.h378
-rw-r--r--sys/contrib/libfdt/libfdt_env.h16
-rw-r--r--sys/contrib/libfdt/libfdt_internal.h1
-rw-r--r--sys/contrib/pf/net/pf_if.c3
-rw-r--r--sys/dev/aac/aac_disk.c4
-rw-r--r--sys/dev/acpica/acpi_cpu.c106
-rw-r--r--sys/dev/ahci/ahci.c136
-rw-r--r--sys/dev/ahci/ahci.h20
-rw-r--r--sys/dev/ahci/ahciem.c600
-rw-r--r--sys/dev/ata/ata-all.c2
-rw-r--r--sys/dev/ata/ata-lowlevel.c32
-rw-r--r--sys/dev/ath/ath_hal/ah.c3
-rw-r--r--sys/dev/ath/ath_hal/ah.h18
-rw-r--r--sys/dev/ath/ath_hal/ah_desc.h23
-rw-r--r--sys/dev/ath/ath_hal/ah_internal.h1
-rw-r--r--sys/dev/ath/ath_hal/ar5210/ar5210.h6
-rw-r--r--sys/dev/ath/ath_hal/ar5210/ar5210_attach.c4
-rw-r--r--sys/dev/ath/ath_hal/ar5210/ar5210_xmit.c33
-rw-r--r--sys/dev/ath/ath_hal/ar5211/ar5211.h6
-rw-r--r--sys/dev/ath/ath_hal/ar5211/ar5211_attach.c4
-rw-r--r--sys/dev/ath/ath_hal/ar5211/ar5211_xmit.c24
-rw-r--r--sys/dev/ath/ath_hal/ar5212/ar5212.h6
-rw-r--r--sys/dev/ath/ath_hal/ar5212/ar5212_attach.c4
-rw-r--r--sys/dev/ath/ath_hal/ar5212/ar5212_xmit.c24
-rw-r--r--sys/dev/ath/ath_hal/ar5416/ar5416.h2
-rw-r--r--sys/dev/ath/ath_hal/ar5416/ar5416_attach.c1
-rw-r--r--sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c7
-rw-r--r--sys/dev/ath/ath_rate/amrr/amrr.c8
-rw-r--r--sys/dev/ath/ath_rate/onoe/onoe.c8
-rw-r--r--sys/dev/ath/ath_rate/sample/sample.c107
-rw-r--r--sys/dev/ath/ath_rate/sample/sample.h16
-rw-r--r--sys/dev/ath/if_ath.c328
-rw-r--r--sys/dev/ath/if_ath_ahb.c6
-rw-r--r--sys/dev/ath/if_ath_beacon.c9
-rw-r--r--sys/dev/ath/if_ath_misc.h15
-rw-r--r--sys/dev/ath/if_ath_pci.c6
-rw-r--r--sys/dev/ath/if_ath_rx.c13
-rw-r--r--sys/dev/ath/if_ath_rx_edma.c153
-rw-r--r--sys/dev/ath/if_ath_sysctl.c2
-rw-r--r--sys/dev/ath/if_ath_tx.c212
-rw-r--r--sys/dev/ath/if_ath_tx.h19
-rw-r--r--sys/dev/ath/if_ath_tx_edma.c311
-rw-r--r--sys/dev/ath/if_ath_tx_edma.h36
-rw-r--r--sys/dev/ath/if_ath_tx_ht.c26
-rw-r--r--sys/dev/ath/if_athioctl.h51
-rw-r--r--sys/dev/ath/if_athrate.h12
-rw-r--r--sys/dev/ath/if_athvar.h86
-rw-r--r--sys/dev/cesa/cesa.c1
-rw-r--r--sys/dev/e1000/if_igb.c1
-rw-r--r--sys/dev/e1000/if_lem.c103
-rw-r--r--sys/dev/isp/isp.c569
-rw-r--r--sys/dev/isp/isp_freebsd.c1294
-rw-r--r--sys/dev/isp/isp_freebsd.h161
-rw-r--r--sys/dev/isp/isp_library.c397
-rw-r--r--sys/dev/isp/isp_library.h8
-rw-r--r--sys/dev/isp/isp_pci.c100
-rw-r--r--sys/dev/isp/isp_sbus.c2
-rw-r--r--sys/dev/isp/isp_stds.h78
-rw-r--r--sys/dev/isp/isp_target.c95
-rw-r--r--sys/dev/isp/isp_target.h1
-rw-r--r--sys/dev/isp/ispmbox.h112
-rw-r--r--sys/dev/isp/ispvar.h46
-rw-r--r--sys/dev/ispfw/asm_2300.h12607
-rw-r--r--sys/dev/md/md.c18
-rw-r--r--sys/dev/mge/if_mge.c4
-rw-r--r--sys/dev/mii/e1000phy.c7
-rw-r--r--sys/dev/mlx/mlxvar.h2
-rw-r--r--sys/dev/mps/mps.c57
-rw-r--r--sys/dev/mps/mps_sas.c1
-rw-r--r--sys/dev/mps/mps_sas_lsi.c4
-rw-r--r--sys/dev/mps/mps_table.c12
-rw-r--r--sys/dev/mps/mps_user.c28
-rw-r--r--sys/dev/mps/mpsvar.h8
-rw-r--r--sys/dev/mvs/mvs_soc.c1
-rw-r--r--sys/dev/netmap/if_em_netmap.h2
-rw-r--r--sys/dev/netmap/if_igb_netmap.h2
-rw-r--r--sys/dev/netmap/ixgbe_netmap.h2
-rw-r--r--sys/dev/netmap/netmap.c888
-rw-r--r--sys/dev/netmap/netmap_kern.h86
-rw-r--r--sys/dev/netmap/netmap_mem2.c11
-rw-r--r--sys/dev/pccbb/pccbb_pci.c5
-rw-r--r--sys/dev/puc/puc_cfg.h2
-rw-r--r--sys/dev/puc/pucdata.c19
-rw-r--r--sys/dev/sdhci/sdhci.c2
-rw-r--r--sys/dev/spibus/spi.h3
-rw-r--r--sys/dev/spibus/spibus.c3
-rw-r--r--sys/dev/sym/sym_hipd.c4
-rw-r--r--sys/dev/usb/controller/at91dci_atmelarm.c4
-rw-r--r--sys/dev/usb/controller/ohci_atmelarm.c1
-rw-r--r--sys/dev/usb/controller/xhci_pci.c11
-rw-r--r--sys/dev/usb/controller/xhcireg.h3
-rw-r--r--sys/dev/usb/net/if_udav.c18
-rw-r--r--sys/dev/usb/net/if_udavreg.h1
-rw-r--r--sys/dev/usb/quirk/usb_quirk.c1
-rw-r--r--sys/dev/usb/serial/u3g.c5
-rw-r--r--sys/dev/usb/serial/uplcom.c1
-rw-r--r--sys/dev/usb/serial/uslcom.c47
-rw-r--r--sys/dev/usb/usbdevs65
-rw-r--r--sys/dev/wtap/if_wtap.c8
-rw-r--r--sys/fs/cd9660/cd9660_vfsops.c4
-rw-r--r--sys/fs/ext2fs/ext2_vfsops.c2
-rw-r--r--sys/fs/fifofs/fifo_vnops.c31
-rw-r--r--sys/fs/msdosfs/msdosfs_lookup.c2
-rw-r--r--sys/fs/portalfs/portal_vnops.c8
-rw-r--r--sys/fs/smbfs/smbfs_node.c15
-rw-r--r--sys/fs/udf/udf_vfsops.c2
-rw-r--r--sys/geom/gate/g_gate.c140
-rw-r--r--sys/geom/geom.h10
-rw-r--r--sys/geom/geom_dev.c20
-rw-r--r--sys/geom/geom_disk.c26
-rw-r--r--sys/geom/geom_disk.h2
-rw-r--r--sys/geom/geom_event.c6
-rw-r--r--sys/geom/geom_io.c2
-rw-r--r--sys/geom/geom_slice.c1
-rw-r--r--sys/geom/geom_subr.c98
-rw-r--r--sys/geom/multipath/g_multipath.c74
-rw-r--r--sys/geom/part/g_part.c12
-rw-r--r--sys/gnu/fs/reiserfs/reiserfs_vfsops.c4
-rw-r--r--sys/i386/i386/machdep.c2
-rw-r--r--sys/i386/i386/pmap.c6
-rw-r--r--sys/i386/i386/ptrace_machdep.c2
-rw-r--r--sys/i386/i386/trap.c28
-rw-r--r--sys/i386/i386/vm86.c6
-rw-r--r--sys/i386/i386/vm_machdep.c4
-rw-r--r--sys/i386/include/cpufunc.h7
-rw-r--r--sys/i386/include/npx.h3
-rw-r--r--sys/i386/include/pcpu.h22
-rw-r--r--sys/i386/isa/npx.c87
-rw-r--r--sys/i386/linux/linux_proto.h4
-rw-r--r--sys/i386/linux/linux_syscall.h2
-rw-r--r--sys/i386/linux/linux_syscalls.c2
-rw-r--r--sys/i386/linux/linux_sysent.c2
-rw-r--r--sys/i386/linux/linux_systrace_args.c4
-rw-r--r--sys/i386/linux/syscalls.master2
-rw-r--r--sys/kern/imgact_aout.c3
-rw-r--r--sys/kern/imgact_elf.c27
-rw-r--r--sys/kern/kern_clocksource.c26
-rw-r--r--sys/kern/kern_descrip.c22
-rw-r--r--sys/kern/kern_event.c17
-rw-r--r--sys/kern/kern_ktr.c4
-rw-r--r--sys/kern/kern_malloc.c2
-rw-r--r--sys/kern/kern_proc.c4
-rw-r--r--sys/kern/kern_tc.c20
-rw-r--r--sys/kern/sys_pipe.c8
-rw-r--r--sys/kern/vfs_syscalls.c44
-rw-r--r--sys/kern/vfs_vnops.c60
-rw-r--r--sys/mips/mips/pmap.c12
-rw-r--r--sys/modules/ahci/Makefile2
-rw-r--r--sys/modules/ath/Makefile2
-rw-r--r--sys/modules/cam/Makefile1
-rw-r--r--sys/net/flowtable.c4
-rw-r--r--sys/net/if_llatbl.c74
-rw-r--r--sys/net/if_llatbl.h38
-rw-r--r--sys/net/if_loop.c28
-rw-r--r--sys/net/if_stf.c16
-rw-r--r--sys/net/if_var.h2
-rw-r--r--sys/net80211/ieee80211_hwmp.c23
-rw-r--r--sys/netgraph/ng_ether.c2
-rw-r--r--sys/netgraph/ng_pptpgre.c2
-rw-r--r--sys/netinet/if_ether.c126
-rw-r--r--sys/netinet/in.c101
-rw-r--r--sys/netinet/in_cksum.c2
-rw-r--r--sys/netinet/in_var.h6
-rw-r--r--sys/netinet/ip_carp.c24
-rw-r--r--sys/netinet/ip_output.c10
-rw-r--r--sys/netinet/ipfw/ip_dummynet.c7
-rw-r--r--sys/netinet/ipfw/ip_fw2.c2
-rw-r--r--sys/netinet/ipfw/ip_fw_dynamic.c18
-rw-r--r--sys/netinet/ipfw/ip_fw_log.c4
-rw-r--r--sys/netinet/sctp_asconf.c14
-rw-r--r--sys/netinet/sctp_input.c14
-rw-r--r--sys/netinet/sctp_output.c15
-rw-r--r--sys/netinet/sctp_pcb.c33
-rw-r--r--sys/netinet/sctp_uio.h4
-rw-r--r--sys/netinet/sctp_usrreq.c16
-rw-r--r--sys/netinet/sctputil.c12
-rw-r--r--sys/netinet/tcp_input.c13
-rw-r--r--sys/netinet/tcp_output.c43
-rw-r--r--sys/netinet6/in6.c103
-rw-r--r--sys/netinet6/ip6_ipsec.c8
-rw-r--r--sys/netinet6/ip6_output.c21
-rw-r--r--sys/netinet6/sctp6_usrreq.c7
-rw-r--r--sys/netipsec/ipsec_output.c3
-rw-r--r--sys/powerpc/powerpc/busdma_machdep.c39
-rw-r--r--sys/sys/ata.h14
-rw-r--r--sys/sys/fcntl.h23
-rw-r--r--sys/sys/param.h2
-rw-r--r--sys/sys/pipe.h4
-rw-r--r--sys/sys/refcount.h2
-rw-r--r--sys/sys/stat.h6
-rw-r--r--sys/sys/user.h2
-rw-r--r--sys/ufs/ffs/ffs_snapshot.c6
-rw-r--r--sys/ufs/ffs/ffs_vfsops.c2
-rw-r--r--sys/vm/memguard.c26
-rw-r--r--sys/vm/memguard.h2
-rw-r--r--sys/vm/vm_contig.c351
-rw-r--r--sys/vm/vm_kern.c142
-rw-r--r--sys/vm/vm_map.h4
-rw-r--r--sys/vm/vm_page.c59
-rw-r--r--sys/vm/vm_page.h87
-rw-r--r--sys/vm/vm_pageout.c208
-rw-r--r--sys/vm/vm_pageout.h4
-rw-r--r--sys/vm/vm_reserv.c2
-rw-r--r--sys/x86/include/specialreg.h5
-rw-r--r--sys/x86/x86/busdma_machdep.c43
-rw-r--r--sys/x86/x86/local_apic.c43
-rw-r--r--sys/x86/x86/tsc.c97
331 files changed, 16766 insertions, 10208 deletions
diff --git a/sys/amd64/amd64/cpu_switch.S b/sys/amd64/amd64/cpu_switch.S
index 1254f3f..ed1ccb5 100644
--- a/sys/amd64/amd64/cpu_switch.S
+++ b/sys/amd64/amd64/cpu_switch.S
@@ -122,6 +122,9 @@ done_store_dr:
1: movq %rdx,%rcx
movl xsave_mask,%eax
movl xsave_mask+4,%edx
+ .globl ctx_switch_xsave
+ctx_switch_xsave:
+ /* This is patched to xsaveopt if supported, see fpuinit_bsp1() */
xsave (%r8)
movq %rcx,%rdx
2: smsw %ax
diff --git a/sys/amd64/amd64/fpu.c b/sys/amd64/amd64/fpu.c
index ca951ad..4bf3635 100644
--- a/sys/amd64/amd64/fpu.c
+++ b/sys/amd64/amd64/fpu.c
@@ -73,6 +73,7 @@ __FBSDID("$FreeBSD$");
#define fxrstor(addr) __asm __volatile("fxrstor %0" : : "m" (*(addr)))
#define fxsave(addr) __asm __volatile("fxsave %0" : "=m" (*(addr)))
#define ldmxcsr(csr) __asm __volatile("ldmxcsr %0" : : "m" (csr))
+#define stmxcsr(addr) __asm __volatile("stmxcsr %0" : : "m" (*(addr)))
static __inline void
xrstor(char *addr, uint64_t mask)
@@ -105,6 +106,7 @@ void fnstsw(caddr_t addr);
void fxsave(caddr_t addr);
void fxrstor(caddr_t addr);
void ldmxcsr(u_int csr);
+void stmxcsr(u_int *csr);
void xrstor(char *addr, uint64_t mask);
void xsave(char *addr, uint64_t mask);
@@ -113,9 +115,6 @@ void xsave(char *addr, uint64_t mask);
#define start_emulating() load_cr0(rcr0() | CR0_TS)
#define stop_emulating() clts()
-#define GET_FPU_CW(thread) ((thread)->td_pcb->pcb_save->sv_env.en_cw)
-#define GET_FPU_SW(thread) ((thread)->td_pcb->pcb_save->sv_env.en_sw)
-
CTASSERT(sizeof(struct savefpu) == 512);
CTASSERT(sizeof(struct xstate_hdr) == 64);
CTASSERT(sizeof(struct savefpu_ymm) == 832);
@@ -132,10 +131,16 @@ static void fpu_clean_state(void);
SYSCTL_INT(_hw, HW_FLOATINGPT, floatingpoint, CTLFLAG_RD,
NULL, 1, "Floating point instructions executed in hardware");
+static int use_xsaveopt;
int use_xsave; /* non-static for cpu_switch.S */
uint64_t xsave_mask; /* the same */
static struct savefpu *fpu_initialstate;
+struct xsave_area_elm_descr {
+ u_int offset;
+ u_int size;
+} *xsave_area_desc;
+
void
fpusave(void *addr)
{
@@ -182,6 +187,17 @@ fpuinit_bsp1(void)
TUNABLE_ULONG_FETCH("hw.xsave_mask", &xsave_mask_user);
xsave_mask_user |= XFEATURE_ENABLED_X87 | XFEATURE_ENABLED_SSE;
xsave_mask &= xsave_mask_user;
+
+ cpuid_count(0xd, 0x1, cp);
+ if ((cp[0] & CPUID_EXTSTATE_XSAVEOPT) != 0) {
+ /*
+ * Patch the XSAVE instruction in the cpu_switch code
+ * to XSAVEOPT. We assume that XSAVE encoding used
+ * REX byte, and set the bit 4 of the r/m byte.
+ */
+ ctx_switch_xsave[3] |= 0x10;
+ use_xsaveopt = 1;
+ }
}
/*
@@ -252,6 +268,7 @@ static void
fpuinitstate(void *arg __unused)
{
register_t saveintr;
+ int cp[4], i, max_ext_n;
fpu_initialstate = malloc(cpu_max_ext_state_size, M_DEVBUF,
M_WAITOK | M_ZERO);
@@ -273,6 +290,28 @@ fpuinitstate(void *arg __unused)
*/
bzero(&fpu_initialstate->sv_xmm[0], sizeof(struct xmmacc));
+ /*
+ * Create a table describing the layout of the CPU Extended
+ * Save Area.
+ */
+ if (use_xsaveopt) {
+ max_ext_n = flsl(xsave_mask);
+ xsave_area_desc = malloc(max_ext_n * sizeof(struct
+ xsave_area_elm_descr), M_DEVBUF, M_WAITOK | M_ZERO);
+ /* x87 state */
+ xsave_area_desc[0].offset = 0;
+ xsave_area_desc[0].size = 160;
+ /* XMM */
+ xsave_area_desc[1].offset = 160;
+ xsave_area_desc[1].size = 288 - 160;
+
+ for (i = 2; i < max_ext_n; i++) {
+ cpuid_count(0xd, i, cp);
+ xsave_area_desc[i].offset = cp[1];
+ xsave_area_desc[i].size = cp[0];
+ }
+ }
+
start_emulating();
intr_restore(saveintr);
}
@@ -288,7 +327,7 @@ fpuexit(struct thread *td)
critical_enter();
if (curthread == PCPU_GET(fpcurthread)) {
stop_emulating();
- fpusave(PCPU_GET(curpcb)->pcb_save);
+ fpusave(curpcb->pcb_save);
start_emulating();
PCPU_SET(fpcurthread, 0);
}
@@ -474,25 +513,26 @@ static char fpetable[128] = {
};
/*
- * Preserve the FP status word, clear FP exceptions, then generate a SIGFPE.
+ * Read the FP status and control words, then generate si_code value
+ * for SIGFPE. The error code chosen will be one of the
+ * FPE_... macros. It will be sent as the second argument to old
+ * BSD-style signal handlers and as "siginfo_t->si_code" (second
+ * argument) to SA_SIGINFO signal handlers.
*
- * Clearing exceptions is necessary mainly to avoid IRQ13 bugs. We now
- * depend on longjmp() restoring a usable state. Restoring the state
- * or examining it might fail if we didn't clear exceptions.
+ * Some time ago, we cleared the x87 exceptions with FNCLEX there.
+ * Clearing exceptions was necessary mainly to avoid IRQ13 bugs. The
+ * usermode code which understands the FPU hardware enough to enable
+ * the exceptions, can also handle clearing the exception state in the
+ * handler. The only consequence of not clearing the exception is the
+ * rethrow of the SIGFPE on return from the signal handler and
+ * reexecution of the corresponding instruction.
*
- * The error code chosen will be one of the FPE_... macros. It will be
- * sent as the second argument to old BSD-style signal handlers and as
- * "siginfo_t->si_code" (second argument) to SA_SIGINFO signal handlers.
- *
- * XXX the FP state is not preserved across signal handlers. So signal
- * handlers cannot afford to do FP unless they preserve the state or
- * longjmp() out. Both preserving the state and longjmp()ing may be
- * destroyed by IRQ13 bugs. Clearing FP exceptions is not an acceptable
- * solution for signals other than SIGFPE.
+ * For XMM traps, the exceptions were never cleared.
*/
int
-fputrap()
+fputrap_x87(void)
{
+ struct savefpu *pcb_save;
u_short control, status;
critical_enter();
@@ -503,19 +543,32 @@ fputrap()
* wherever they are.
*/
if (PCPU_GET(fpcurthread) != curthread) {
- control = GET_FPU_CW(curthread);
- status = GET_FPU_SW(curthread);
+ pcb_save = curpcb->pcb_save;
+ control = pcb_save->sv_env.en_cw;
+ status = pcb_save->sv_env.en_sw;
} else {
fnstcw(&control);
fnstsw(&status);
}
- if (PCPU_GET(fpcurthread) == curthread)
- fnclex();
critical_exit();
return (fpetable[status & ((~control & 0x3f) | 0x40)]);
}
+int
+fputrap_sse(void)
+{
+ u_int mxcsr;
+
+ critical_enter();
+ if (PCPU_GET(fpcurthread) != curthread)
+ mxcsr = curpcb->pcb_save->sv_env.en_mxcsr;
+ else
+ stmxcsr(&mxcsr);
+ critical_exit();
+ return (fpetable[(mxcsr & (~mxcsr >> 7)) & 0x3f]);
+}
+
/*
* Implement device not available (DNA) exception
*
@@ -529,7 +582,6 @@ static int err_count = 0;
void
fpudna(void)
{
- struct pcb *pcb;
critical_enter();
if (PCPU_GET(fpcurthread) == curthread) {
@@ -551,26 +603,31 @@ fpudna(void)
* Record new context early in case frstor causes a trap.
*/
PCPU_SET(fpcurthread, curthread);
- pcb = PCPU_GET(curpcb);
fpu_clean_state();
- if ((pcb->pcb_flags & PCB_FPUINITDONE) == 0) {
+ if ((curpcb->pcb_flags & PCB_FPUINITDONE) == 0) {
/*
* This is the first time this thread has used the FPU or
* the PCB doesn't contain a clean FPU state. Explicitly
* load an initial state.
+ *
+ * We prefer to restore the state from the actual save
+ * area in PCB instead of directly loading from
+ * fpu_initialstate, to ignite the XSAVEOPT
+ * tracking engine.
*/
- fpurestore(fpu_initialstate);
- if (pcb->pcb_initial_fpucw != __INITIAL_FPUCW__)
- fldcw(pcb->pcb_initial_fpucw);
- if (PCB_USER_FPU(pcb))
- set_pcb_flags(pcb,
+ bcopy(fpu_initialstate, curpcb->pcb_save, cpu_max_ext_state_size);
+ fpurestore(curpcb->pcb_save);
+ if (curpcb->pcb_initial_fpucw != __INITIAL_FPUCW__)
+ fldcw(curpcb->pcb_initial_fpucw);
+ if (PCB_USER_FPU(curpcb))
+ set_pcb_flags(curpcb,
PCB_FPUINITDONE | PCB_USERFPUINITDONE);
else
- set_pcb_flags(pcb, PCB_FPUINITDONE);
+ set_pcb_flags(curpcb, PCB_FPUINITDONE);
} else
- fpurestore(pcb->pcb_save);
+ fpurestore(curpcb->pcb_save);
critical_exit();
}
@@ -596,6 +653,9 @@ int
fpugetregs(struct thread *td)
{
struct pcb *pcb;
+ uint64_t *xstate_bv, bit;
+ char *sa;
+ int max_ext_n, i;
pcb = td->td_pcb;
if ((pcb->pcb_flags & PCB_USERFPUINITDONE) == 0) {
@@ -613,6 +673,25 @@ fpugetregs(struct thread *td)
return (_MC_FPOWNED_FPU);
} else {
critical_exit();
+ if (use_xsaveopt) {
+ /*
+ * Handle partially saved state.
+ */
+ sa = (char *)get_pcb_user_save_pcb(pcb);
+ xstate_bv = (uint64_t *)(sa + sizeof(struct savefpu) +
+ offsetof(struct xstate_hdr, xstate_bv));
+ max_ext_n = flsl(xsave_mask);
+ for (i = 0; i < max_ext_n; i++) {
+ bit = 1 << i;
+ if ((*xstate_bv & bit) != 0)
+ continue;
+ bcopy((char *)fpu_initialstate +
+ xsave_area_desc[i].offset,
+ sa + xsave_area_desc[i].offset,
+ xsave_area_desc[i].size);
+ *xstate_bv |= bit;
+ }
+ }
return (_MC_FPOWNED_PCB);
}
}
@@ -882,16 +961,14 @@ fpu_kern_leave(struct thread *td, struct fpu_kern_ctx *ctx)
int
fpu_kern_thread(u_int flags)
{
- struct pcb *pcb;
- pcb = PCPU_GET(curpcb);
KASSERT((curthread->td_pflags & TDP_KTHREAD) != 0,
("Only kthread may use fpu_kern_thread"));
- KASSERT(pcb->pcb_save == get_pcb_user_save_pcb(pcb),
+ KASSERT(curpcb->pcb_save == get_pcb_user_save_pcb(curpcb),
("mangled pcb_save"));
- KASSERT(PCB_USER_FPU(pcb), ("recursive call"));
+ KASSERT(PCB_USER_FPU(curpcb), ("recursive call"));
- set_pcb_flags(pcb, PCB_KERNFPU);
+ set_pcb_flags(curpcb, PCB_KERNFPU);
return (0);
}
@@ -901,5 +978,5 @@ is_fpu_kern_thread(u_int flags)
if ((curthread->td_pflags & TDP_KTHREAD) == 0)
return (0);
- return ((PCPU_GET(curpcb)->pcb_flags & PCB_KERNFPU) != 0);
+ return ((curpcb->pcb_flags & PCB_KERNFPU) != 0);
}
diff --git a/sys/amd64/amd64/machdep.c b/sys/amd64/amd64/machdep.c
index 8044fe5..cd3ebc5 100644
--- a/sys/amd64/amd64/machdep.c
+++ b/sys/amd64/amd64/machdep.c
@@ -996,7 +996,7 @@ exec_setregs(struct thread *td, struct image_params *imgp, u_long stack)
pcb->pcb_dr3 = 0;
pcb->pcb_dr6 = 0;
pcb->pcb_dr7 = 0;
- if (pcb == PCPU_GET(curpcb)) {
+ if (pcb == curpcb) {
/*
* Clear the debug registers on the running
* CPU, otherwise they will end up affecting
diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c
index e8272d906..c92f142 100644
--- a/sys/amd64/amd64/pmap.c
+++ b/sys/amd64/amd64/pmap.c
@@ -3502,13 +3502,13 @@ pmap_enter(pmap_t pmap, vm_offset_t va, vm_prot_t access, vm_page_t m,
pv_entry_t pv;
vm_paddr_t opa, pa;
vm_page_t mpte, om;
- boolean_t invlva;
va = trunc_page(va);
KASSERT(va <= VM_MAX_KERNEL_ADDRESS, ("pmap_enter: toobig"));
KASSERT(va < UPT_MIN_ADDRESS || va >= UPT_MAX_ADDRESS,
("pmap_enter: invalid to pmap_enter page table pages (va: 0x%lx)",
va));
+ KASSERT((prot & access) == access, ("pmap_enter: access not in prot"));
KASSERT((m->oflags & VPO_UNMANAGED) != 0 || va < kmi.clean_sva ||
va >= kmi.clean_eva,
("pmap_enter: managed mapping within the clean submap"));
@@ -3516,9 +3516,9 @@ pmap_enter(pmap_t pmap, vm_offset_t va, vm_prot_t access, vm_page_t m,
VM_OBJECT_LOCKED(m->object),
("pmap_enter: page %p is not busy", m));
pa = VM_PAGE_TO_PHYS(m);
- newpte = (pt_entry_t)(pa | pmap_cache_bits(m->md.pat_mode, 0) | PG_V);
- if ((m->oflags & VPO_UNMANAGED) == 0)
- newpte |= PG_MANAGED;
+ newpte = (pt_entry_t)(pa | PG_A | PG_V);
+ if ((access & VM_PROT_WRITE) != 0)
+ newpte |= PG_M;
if ((prot & VM_PROT_WRITE) != 0)
newpte |= PG_RW;
if ((prot & VM_PROT_EXECUTE) == 0)
@@ -3529,6 +3529,7 @@ pmap_enter(pmap_t pmap, vm_offset_t va, vm_prot_t access, vm_page_t m,
newpte |= PG_U;
if (pmap == kernel_pmap)
newpte |= PG_G;
+ newpte |= pmap_cache_bits(m->md.pat_mode, 0);
mpte = om = NULL;
@@ -3540,109 +3541,111 @@ pmap_enter(pmap_t pmap, vm_offset_t va, vm_prot_t access, vm_page_t m,
* In the case that a page table page is not
* resident, we are creating it here.
*/
- if (va < VM_MAXUSER_ADDRESS)
- mpte = pmap_allocpte(pmap, va, &lock);
-
+retry:
pde = pmap_pde(pmap, va);
- if (pde != NULL && (*pde & PG_V) != 0) {
- if ((*pde & PG_PS) != 0)
- panic("pmap_enter: attempted pmap_enter on 2MB page");
+ if (pde != NULL && (*pde & PG_V) != 0 && ((*pde & PG_PS) == 0 ||
+ pmap_demote_pde_locked(pmap, pde, va, &lock))) {
pte = pmap_pde_to_pte(pde, va);
+ if (va < VM_MAXUSER_ADDRESS && mpte == NULL) {
+ mpte = PHYS_TO_VM_PAGE(*pde & PG_FRAME);
+ mpte->wire_count++;
+ }
+ } else if (va < VM_MAXUSER_ADDRESS) {
+ /*
+ * Here if the pte page isn't mapped, or if it has been
+ * deallocated.
+ */
+ mpte = _pmap_allocpte(pmap, pmap_pde_pindex(va), &lock);
+ goto retry;
} else
panic("pmap_enter: invalid page directory va=%#lx", va);
origpte = *pte;
- opa = origpte & PG_FRAME;
/*
- * Mapping has not changed, must be protection or wiring change.
+ * Is the specified virtual address already mapped?
*/
- if (origpte && (opa == pa)) {
+ if ((origpte & PG_V) != 0) {
/*
* Wiring change, just update stats. We don't worry about
* wiring PT pages as they remain resident as long as there
* are valid mappings in them. Hence, if a user page is wired,
* the PT page will be also.
*/
- if (wired && ((origpte & PG_W) == 0))
+ if ((newpte & PG_W) != 0 && (origpte & PG_W) == 0)
pmap->pm_stats.wired_count++;
- else if (!wired && (origpte & PG_W))
+ else if ((newpte & PG_W) == 0 && (origpte & PG_W) != 0)
pmap->pm_stats.wired_count--;
/*
- * Remove extra pte reference
+ * Remove the extra PT page reference.
*/
- if (mpte)
- mpte->wire_count--;
-
- if ((origpte & PG_MANAGED) != 0)
- om = m;
- goto validate;
- }
-
- /*
- * Mapping has changed, invalidate old range and fall through to
- * handle validating new mapping.
- */
- if (opa) {
- if (origpte & PG_W)
- pmap->pm_stats.wired_count--;
- if ((origpte & PG_MANAGED) != 0)
- om = PHYS_TO_VM_PAGE(opa);
if (mpte != NULL) {
mpte->wire_count--;
KASSERT(mpte->wire_count > 0,
("pmap_enter: missing reference to page table page,"
" va: 0x%lx", va));
}
- } else
- pmap_resident_count_inc(pmap, 1);
- /*
- * Increment the counters.
- */
- if (wired)
- pmap->pm_stats.wired_count++;
+ /*
+ * Has the physical page changed?
+ */
+ opa = origpte & PG_FRAME;
+ if (opa == pa) {
+ /*
+ * No, might be a protection or wiring change.
+ */
+ if ((origpte & PG_MANAGED) != 0) {
+ newpte |= PG_MANAGED;
+ if ((newpte & PG_RW) != 0)
+ vm_page_aflag_set(m, PGA_WRITEABLE);
+ }
+ if (((origpte ^ newpte) & ~(PG_M | PG_A)) == 0)
+ goto unchanged;
+ goto validate;
+ } else {
+ /*
+ * Yes, fall through to validate the new mapping.
+ */
+ if ((origpte & PG_MANAGED) != 0)
+ om = PHYS_TO_VM_PAGE(opa);
+ }
+ } else {
+ /*
+ * Increment the counters.
+ */
+ if ((newpte & PG_W) != 0)
+ pmap->pm_stats.wired_count++;
+ pmap_resident_count_inc(pmap, 1);
+ }
/*
* Enter on the PV list if part of our managed memory.
*/
- if ((newpte & PG_MANAGED) != 0) {
+ if ((m->oflags & VPO_UNMANAGED) == 0) {
+ newpte |= PG_MANAGED;
pv = get_pv_entry(pmap, &lock);
pv->pv_va = va;
CHANGE_PV_LIST_LOCK_TO_PHYS(&lock, pa);
TAILQ_INSERT_TAIL(&m->md.pv_list, pv, pv_list);
+ if ((newpte & PG_RW) != 0)
+ vm_page_aflag_set(m, PGA_WRITEABLE);
}
-validate:
-
/*
- * Update the PTE only if the mapping or protection/wiring bits are
- * different.
+ * Update the PTE.
*/
- if ((origpte & ~(PG_M | PG_A)) != newpte) {
- newpte |= PG_A;
- if ((access & VM_PROT_WRITE) != 0)
- newpte |= PG_M;
- if ((newpte & (PG_MANAGED | PG_RW)) == (PG_MANAGED | PG_RW))
- vm_page_aflag_set(m, PGA_WRITEABLE);
- if (origpte & PG_V) {
- invlva = FALSE;
- origpte = pte_load_store(pte, newpte);
- if (origpte & PG_A) {
- if (origpte & PG_MANAGED)
- vm_page_aflag_set(om, PGA_REFERENCED);
- if (opa != pa || ((origpte & PG_NX) == 0 &&
- (newpte & PG_NX) != 0))
- invlva = TRUE;
- }
- if ((origpte & (PG_M | PG_RW)) == (PG_M | PG_RW)) {
- if ((origpte & PG_MANAGED) != 0)
+ if ((origpte & PG_V) != 0) {
+validate:
+ origpte = pte_load_store(pte, newpte);
+ opa = origpte & PG_FRAME;
+ if (opa != pa) {
+ if ((origpte & PG_MANAGED) != 0) {
+ if ((origpte & (PG_M | PG_RW)) == (PG_M |
+ PG_RW))
vm_page_dirty(om);
- if ((newpte & PG_RW) == 0)
- invlva = TRUE;
- }
- if (opa != pa && (origpte & PG_MANAGED) != 0) {
+ if ((origpte & PG_A) != 0)
+ vm_page_aflag_set(om, PGA_REFERENCED);
CHANGE_PV_LIST_LOCK_TO_PHYS(&lock, opa);
pmap_pvh_free(&om->md, pmap, va);
if ((om->aflags & PGA_WRITEABLE) != 0 &&
@@ -3651,11 +3654,28 @@ validate:
TAILQ_EMPTY(&pa_to_pvh(opa)->pv_list)))
vm_page_aflag_clear(om, PGA_WRITEABLE);
}
- if (invlva)
- pmap_invalidate_page(pmap, va);
- } else
- pte_store(pte, newpte);
- }
+ } else if ((newpte & PG_M) == 0 && (origpte & (PG_M |
+ PG_RW)) == (PG_M | PG_RW)) {
+ if ((origpte & PG_MANAGED) != 0)
+ vm_page_dirty(m);
+
+ /*
+ * Although the PTE may still have PG_RW set, TLB
+ * invalidation may nonetheless be required because
+ * the PTE no longer has PG_M set.
+ */
+ } else if ((origpte & PG_NX) != 0 || (newpte & PG_NX) == 0) {
+ /*
+ * This PTE change does not require TLB invalidation.
+ */
+ goto unchanged;
+ }
+ if ((origpte & PG_A) != 0)
+ pmap_invalidate_page(pmap, va);
+ } else
+ pte_store(pte, newpte);
+
+unchanged:
/*
* If both the page table page and the reservation are fully
diff --git a/sys/amd64/amd64/ptrace_machdep.c b/sys/amd64/amd64/ptrace_machdep.c
index 8236321..9fa1917 100644
--- a/sys/amd64/amd64/ptrace_machdep.c
+++ b/sys/amd64/amd64/ptrace_machdep.c
@@ -50,6 +50,7 @@ cpu_ptrace_xstate(struct thread *td, int req, void *addr, int data)
switch (req) {
case PT_GETXSTATE:
+ fpugetregs(td);
savefpu = (char *)(get_pcb_user_save_td(td) + 1);
error = copyout(savefpu, addr,
cpu_max_ext_state_size - sizeof(struct savefpu));
@@ -62,8 +63,10 @@ cpu_ptrace_xstate(struct thread *td, int req, void *addr, int data)
}
savefpu = malloc(data, M_TEMP, M_WAITOK);
error = copyin(addr, savefpu, data);
- if (error == 0)
+ if (error == 0) {
+ fpugetregs(td);
error = fpusetxstate(td, savefpu, data);
+ }
free(savefpu, M_TEMP);
break;
@@ -89,11 +92,13 @@ cpu32_ptrace(struct thread *td, int req, void *addr, int data)
switch (req) {
case PT_I386_GETXMMREGS:
+ fpugetregs(td);
error = copyout(get_pcb_user_save_td(td), addr,
sizeof(*fpstate));
break;
case PT_I386_SETXMMREGS:
+ fpugetregs(td);
fpstate = get_pcb_user_save_td(td);
error = copyin(addr, fpstate, sizeof(*fpstate));
fpstate->sv_env.en_mxcsr &= cpu_mxcsr_mask;
diff --git a/sys/amd64/amd64/trap.c b/sys/amd64/amd64/trap.c
index 75e15e0..d035a7e 100644
--- a/sys/amd64/amd64/trap.c
+++ b/sys/amd64/amd64/trap.c
@@ -328,7 +328,7 @@ trap(struct trapframe *frame)
break;
case T_ARITHTRAP: /* arithmetic trap */
- ucode = fputrap();
+ ucode = fputrap_x87();
if (ucode == -1)
goto userout;
i = SIGFPE;
@@ -442,7 +442,9 @@ trap(struct trapframe *frame)
break;
case T_XMMFLT: /* SIMD floating-point exception */
- ucode = 0; /* XXX */
+ ucode = fputrap_sse();
+ if (ucode == -1)
+ goto userout;
i = SIGFPE;
break;
}
@@ -518,9 +520,8 @@ trap(struct trapframe *frame)
frame->tf_rip = (long)fsbase_load_fault;
goto out;
}
- if (PCPU_GET(curpcb)->pcb_onfault != NULL) {
- frame->tf_rip =
- (long)PCPU_GET(curpcb)->pcb_onfault;
+ if (curpcb->pcb_onfault != NULL) {
+ frame->tf_rip = (long)curpcb->pcb_onfault;
goto out;
}
break;
@@ -706,7 +707,7 @@ trap_pfault(frame, usermode)
* it normally, and panic immediately.
*/
if (!usermode && (td->td_intr_nesting_level != 0 ||
- PCPU_GET(curpcb)->pcb_onfault == NULL)) {
+ curpcb->pcb_onfault == NULL)) {
trap_fatal(frame, eva);
return (-1);
}
@@ -762,8 +763,8 @@ trap_pfault(frame, usermode)
nogo:
if (!usermode) {
if (td->td_intr_nesting_level == 0 &&
- PCPU_GET(curpcb)->pcb_onfault != NULL) {
- frame->tf_rip = (long)PCPU_GET(curpcb)->pcb_onfault;
+ curpcb->pcb_onfault != NULL) {
+ frame->tf_rip = (long)curpcb->pcb_onfault;
return (0);
}
trap_fatal(frame, eva);
diff --git a/sys/amd64/amd64/vm_machdep.c b/sys/amd64/amd64/vm_machdep.c
index 103fa0d..070d8c9 100644
--- a/sys/amd64/amd64/vm_machdep.c
+++ b/sys/amd64/amd64/vm_machdep.c
@@ -90,6 +90,10 @@ static u_int cpu_reset_proxyid;
static volatile u_int cpu_reset_proxy_active;
#endif
+CTASSERT((struct thread **)OFFSETOF_CURTHREAD ==
+ &((struct pcpu *)NULL)->pc_curthread);
+CTASSERT((struct pcb **)OFFSETOF_CURPCB == &((struct pcpu *)NULL)->pc_curpcb);
+
struct savefpu *
get_pcb_user_save_td(struct thread *td)
{
diff --git a/sys/amd64/include/cpufunc.h b/sys/amd64/include/cpufunc.h
index 94d4133..881fcd2 100644
--- a/sys/amd64/include/cpufunc.h
+++ b/sys/amd64/include/cpufunc.h
@@ -290,6 +290,13 @@ popcntq(u_long mask)
}
static __inline void
+lfence(void)
+{
+
+ __asm __volatile("lfence" : : : "memory");
+}
+
+static __inline void
mfence(void)
{
diff --git a/sys/amd64/include/fpu.h b/sys/amd64/include/fpu.h
index 98a016b..7d0f0ea 100644
--- a/sys/amd64/include/fpu.h
+++ b/sys/amd64/include/fpu.h
@@ -62,7 +62,8 @@ int fpusetregs(struct thread *td, struct savefpu *addr,
char *xfpustate, size_t xfpustate_size);
int fpusetxstate(struct thread *td, char *xfpustate,
size_t xfpustate_size);
-int fputrap(void);
+int fputrap_sse(void);
+int fputrap_x87(void);
void fpuuserinited(struct thread *td);
struct fpu_kern_ctx *fpu_kern_alloc_ctx(u_int flags);
void fpu_kern_free_ctx(struct fpu_kern_ctx *ctx);
diff --git a/sys/amd64/include/md_var.h b/sys/amd64/include/md_var.h
index ff11ea1..ff322bb 100644
--- a/sys/amd64/include/md_var.h
+++ b/sys/amd64/include/md_var.h
@@ -57,6 +57,7 @@ extern u_int cpu_procinfo;
extern u_int cpu_procinfo2;
extern char cpu_vendor[];
extern u_int cpu_vendor_id;
+extern char ctx_switch_xsave[];
extern char kstack[];
extern char sigcode[];
extern int szsigcode;
diff --git a/sys/amd64/include/pcpu.h b/sys/amd64/include/pcpu.h
index d07dbac..2188442 100644
--- a/sys/amd64/include/pcpu.h
+++ b/sys/amd64/include/pcpu.h
@@ -216,16 +216,36 @@ extern struct pcpu *pcpup;
#define PCPU_PTR(member) __PCPU_PTR(pc_ ## member)
#define PCPU_SET(member, val) __PCPU_SET(pc_ ## member, val)
+#define OFFSETOF_CURTHREAD 0
+#ifdef __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wnull-dereference"
+#endif
static __inline __pure2 struct thread *
__curthread(void)
{
struct thread *td;
- __asm("movq %%gs:0,%0" : "=r" (td));
+ __asm("movq %%gs:%1,%0" : "=r" (td)
+ : "m" (*(char *)OFFSETOF_CURTHREAD));
return (td);
}
+#ifdef __clang__
+#pragma clang diagnostic pop
+#endif
#define curthread (__curthread())
+#define OFFSETOF_CURPCB 32
+static __inline __pure2 struct pcb *
+__curpcb(void)
+{
+ struct pcb *pcb;
+
+ __asm("movq %%gs:%1,%0" : "=r" (pcb) : "m" (*(char *)OFFSETOF_CURPCB));
+ return (pcb);
+}
+#define curpcb (__curpcb())
+
#define IS_BSP() (PCPU_GET(cpuid) == 0)
#else /* !lint || defined(__GNUCLIKE_ASM) && defined(__GNUCLIKE___TYPEOF) */
diff --git a/sys/arm/arm/nexus.c b/sys/arm/arm/nexus.c
index 04cf1bf..93643d5 100644
--- a/sys/arm/arm/nexus.c
+++ b/sys/arm/arm/nexus.c
@@ -117,12 +117,16 @@ static int
nexus_setup_intr(device_t dev, device_t child, struct resource *res, int flags,
driver_filter_t *filt, driver_intr_t *intr, void *arg, void **cookiep)
{
+ int irq;
if ((rman_get_flags(res) & RF_SHAREABLE) == 0)
flags |= INTR_EXCL;
- arm_setup_irqhandler(device_get_nameunit(child),
- filt, intr, arg, rman_get_start(res), flags, cookiep);
+ for (irq = rman_get_start(res); irq <= rman_get_end(res); irq++) {
+ arm_setup_irqhandler(device_get_nameunit(child),
+ filt, intr, arg, irq, flags, cookiep);
+ arm_unmask_irq(irq);
+ }
return (0);
}
diff --git a/sys/arm/at91/at91.c b/sys/arm/at91/at91.c
index da3aa72..deb3c38 100644
--- a/sys/arm/at91/at91.c
+++ b/sys/arm/at91/at91.c
@@ -242,15 +242,29 @@ at91_identify(driver_t *drv, device_t parent)
BUS_ADD_CHILD(parent, 0, "atmelarm", 0);
}
+static void
+at91_cpu_add_builtin_children(device_t dev, const struct cpu_devs *walker)
+{
+ int i;
+
+ for (i = 1; walker->name; i++, walker++) {
+ at91_add_child(dev, i, walker->name, walker->unit,
+ walker->mem_base, walker->mem_len, walker->irq0,
+ walker->irq1, walker->irq2);
+ }
+}
+
static int
at91_attach(device_t dev)
{
struct at91_softc *sc = device_get_softc(dev);
const struct pmap_devmap *pdevmap;
+ int i;
at91_softc = sc;
sc->sc_st = &at91_bs_tag;
sc->sc_sh = AT91_BASE;
+ sc->sc_aic_sh = AT91_BASE + AT91_SYS_BASE;
sc->dev = dev;
sc->sc_irq_rman.rm_type = RMAN_ARRAY;
@@ -269,13 +283,34 @@ at91_attach(device_t dev)
panic("at91_attach: failed to set up memory rman");
}
-
/*
- * Our device list will be added automatically by the cpu device
- * e.g. at91rm9200.c when it is identified. To ensure that the
- * CPU and PMC are attached first any other "identified" devices
- * call BUS_ADD_CHILD(9) with an "order" of at least 2.
+ * Setup the interrupt table.
+ */
+ if (soc_info.soc_data == NULL || soc_info.soc_data->soc_irq_prio == NULL)
+ panic("Interrupt priority table missing\n");
+ for (i = 0; i < 32; i++) {
+ bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_SVR +
+ i * 4, i);
+ /* Priority. */
+ bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_SMR + i * 4,
+ soc_info.soc_data->soc_irq_prio[i]);
+ if (i < 8)
+ bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_EOICR,
+ 1);
+ }
+
+ bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_SPU, 32);
+ /* No debug. */
+ bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_DCR, 0);
+ /* Disable and clear all interrupts. */
+ bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_IDCR, 0xffffffff);
+ bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_ICCR, 0xffffffff);
+
+ /*
+ * Add this device's children...
*/
+ at91_cpu_add_builtin_children(dev, soc_info.soc_data->soc_children);
+ soc_info.soc_data->soc_clock_init();
bus_generic_probe(dev);
bus_generic_attach(dev);
@@ -362,7 +397,6 @@ at91_setup_intr(device_t dev, device_t child,
struct resource *ires, int flags, driver_filter_t *filt,
driver_intr_t *intr, void *arg, void **cookiep)
{
- struct at91_softc *sc = device_get_softc(dev);
int error;
if (rman_get_start(ires) == AT91_IRQ_SYSTEM && filt == NULL)
@@ -372,8 +406,6 @@ at91_setup_intr(device_t dev, device_t child,
if (error)
return (error);
- bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_IECR,
- 1 << rman_get_start(ires));
return (0);
}
diff --git a/sys/arm/at91/at91_machdep.c b/sys/arm/at91/at91_machdep.c
index 0bb79bd..2dc95e3 100644
--- a/sys/arm/at91/at91_machdep.c
+++ b/sys/arm/at91/at91_machdep.c
@@ -94,6 +94,7 @@ __FBSDID("$FreeBSD$");
#include <arm/at91/at91_usartreg.h>
#include <arm/at91/at91rm92reg.h>
#include <arm/at91/at91sam9g20reg.h>
+#include <arm/at91/at91sam9g45reg.h>
/* Page table for mapping proc0 zero page */
#define KERNEL_PT_SYS 0
@@ -201,6 +202,17 @@ const struct pmap_devmap at91_devmap[] = {
VM_PROT_READ|VM_PROT_WRITE,
PTE_NOCACHE,
},
+ /*
+ * The next should be good for the 9G45.
+ */
+ {
+ /* Internal Memory 1MB */
+ AT91SAM9G45_OHCI_BASE,
+ AT91SAM9G45_OHCI_PA_BASE,
+ 0x00100000,
+ VM_PROT_READ|VM_PROT_WRITE,
+ PTE_NOCACHE,
+ },
{ 0, 0, 0, 0, 0, }
};
@@ -213,7 +225,7 @@ extern int memsize[];
long
at91_ramsize(void)
{
- uint32_t cr, mr, *SDRAMC;
+ uint32_t cr, mdr, mr, *SDRAMC;
int banks, rows, cols, bw;
#ifdef LINUX_BOOT_ABI
/*
@@ -231,6 +243,24 @@ at91_ramsize(void)
rows = ((cr & AT91RM92_SDRAMC_CR_NR_MASK) >> 2) + 11;
cols = (cr & AT91RM92_SDRAMC_CR_NC_MASK) + 8;
bw = (mr & AT91RM92_SDRAMC_MR_DBW_16) ? 1 : 2;
+ } else if (at91_cpu_is(AT91_T_SAM9G45)) {
+ SDRAMC = (uint32_t *)(AT91_BASE + AT91SAM9G45_DDRSDRC0_BASE);
+ cr = SDRAMC[AT91SAM9G45_DDRSDRC_CR / 4];
+ mdr = SDRAMC[AT91SAM9G45_DDRSDRC_MDR / 4];
+ banks = 0;
+ rows = ((cr & AT91SAM9G45_DDRSDRC_CR_NR_MASK) >> 2) + 11;
+ cols = (cr & AT91SAM9G45_DDRSDRC_CR_NC_MASK) + 8;
+ bw = (mdr & AT91SAM9G45_DDRSDRC_MDR_DBW_16) ? 1 : 2;
+
+ /* Fix the calculation for DDR memory */
+ mdr &= AT91SAM9G45_DDRSDRC_MDR_MASK;
+ if (mdr & AT91SAM9G45_DDRSDRC_MDR_LPDDR1 ||
+ mdr & AT91SAM9G45_DDRSDRC_MDR_DDR2) {
+ /* The cols value is 1 higher for DDR */
+ cols += 1;
+ /* DDR has 4 internal banks. */
+ banks = 2;
+ }
} else {
/*
* This should be good for the 9260, 9261, 9G20, 9G35 and 9X25
@@ -402,6 +432,7 @@ at91_try_id(uint32_t dbgu_base)
* try to get the matching CPU support.
*/
soc_info.soc_data = at91_match_soc(soc_info.type, soc_info.subtype);
+ soc_info.dbgu_base = AT91_BASE + dbgu_base;
return (1);
}
diff --git a/sys/arm/at91/at91_pio_rm9200.h b/sys/arm/at91/at91_pio_rm9200.h
deleted file mode 100644
index 809262f..0000000
--- a/sys/arm/at91/at91_pio_rm9200.h
+++ /dev/null
@@ -1,208 +0,0 @@
-/* $FreeBSD$ */
-
-#ifndef ARM_AT91_AT91_PIO_RM9200_H
-#define ARM_AT91_AT91_PIO_RM9200_H
-
-#include <arm/at91/at91_pioreg.h>
-/*
- * These defines come from an atmel file that says specifically that it
- * has no copyright.
- */
-
-//*****************************************************************************
-// PIO DEFINITIONS FOR AT91RM9200
-//*****************************************************************************
-#define AT91C_PA0_MISO (AT91C_PIO_PA0) // SPI Master In Slave
-#define AT91C_PA0_PCK3 (AT91C_PIO_PA0) // PMC Programmable Clock Output 3
-#define AT91C_PA1_MOSI (AT91C_PIO_PA1) // SPI Master Out Slave
-#define AT91C_PA1_PCK0 (AT91C_PIO_PA1) // PMC Programmable Clock Output 0
-#define AT91C_PA10_ETX1 (AT91C_PIO_PA10) // Ethernet MAC Transmit Data 1
-#define AT91C_PA10_MCDB1 (AT91C_PIO_PA10) // Multimedia Card B Data 1
-#define AT91C_PA11_ECRS_ECRSDV (AT91C_PIO_PA11) // Ethernet MAC Carrier Sense/Carrier Sense and Data Valid
-#define AT91C_PA11_MCDB2 (AT91C_PIO_PA11) // Multimedia Card B Data 2
-#define AT91C_PA12_ERX0 (AT91C_PIO_PA12) // Ethernet MAC Receive Data 0
-#define AT91C_PA12_MCDB3 (AT91C_PIO_PA12) // Multimedia Card B Data 3
-#define AT91C_PA13_ERX1 (AT91C_PIO_PA13) // Ethernet MAC Receive Data 1
-#define AT91C_PA13_TCLK0 (AT91C_PIO_PA13) // Timer Counter 0 external clock input
-#define AT91C_PA14_ERXER (AT91C_PIO_PA14) // Ethernet MAC Receive Error
-#define AT91C_PA14_TCLK1 (AT91C_PIO_PA14) // Timer Counter 1 external clock input
-#define AT91C_PA15_EMDC (AT91C_PIO_PA15) // Ethernet MAC Management Data Clock
-#define AT91C_PA15_TCLK2 (AT91C_PIO_PA15) // Timer Counter 2 external clock input
-#define AT91C_PA16_EMDIO (AT91C_PIO_PA16) // Ethernet MAC Management Data Input/Output
-#define AT91C_PA16_IRQ6 (AT91C_PIO_PA16) // AIC Interrupt input 6
-#define AT91C_PA17_TXD0 (AT91C_PIO_PA17) // USART 0 Transmit Data
-#define AT91C_PA17_TIOA0 (AT91C_PIO_PA17) // Timer Counter 0 Multipurpose Timer I/O Pin A
-#define AT91C_PA18_RXD0 (AT91C_PIO_PA18) // USART 0 Receive Data
-#define AT91C_PA18_TIOB0 (AT91C_PIO_PA18) // Timer Counter 0 Multipurpose Timer I/O Pin B
-#define AT91C_PA19_SCK0 (AT91C_PIO_PA19) // USART 0 Serial Clock
-#define AT91C_PA19_TIOA1 (AT91C_PIO_PA19) // Timer Counter 1 Multipurpose Timer I/O Pin A
-#define AT91C_PA2_SPCK (AT91C_PIO_PA2) // SPI Serial Clock
-#define AT91C_PA2_IRQ4 (AT91C_PIO_PA2) // AIC Interrupt Input 4
-#define AT91C_PA20_CTS0 (AT91C_PIO_PA20) // USART 0 Clear To Send
-#define AT91C_PA20_TIOB1 (AT91C_PIO_PA20) // Timer Counter 1 Multipurpose Timer I/O Pin B
-#define AT91C_PA21_RTS0 (AT91C_PIO_PA21) // Usart 0 Ready To Send
-#define AT91C_PA21_TIOA2 (AT91C_PIO_PA21) // Timer Counter 2 Multipurpose Timer I/O Pin A
-#define AT91C_PA22_RXD2 (AT91C_PIO_PA22) // USART 2 Receive Data
-#define AT91C_PA22_TIOB2 (AT91C_PIO_PA22) // Timer Counter 2 Multipurpose Timer I/O Pin B
-#define AT91C_PA23_TXD2 (AT91C_PIO_PA23) // USART 2 Transmit Data
-#define AT91C_PA23_IRQ3 (AT91C_PIO_PA23) // Interrupt input 3
-#define AT91C_PA24_SCK2 (AT91C_PIO_PA24) // USART2 Serial Clock
-#define AT91C_PA24_PCK1 (AT91C_PIO_PA24) // PMC Programmable Clock Output 1
-#define AT91C_PA25_TWD (AT91C_PIO_PA25) // TWI Two-wire Serial Data
-#define AT91C_PA25_IRQ2 (AT91C_PIO_PA25) // Interrupt input 2
-#define AT91C_PA26_TWCK (AT91C_PIO_PA26) // TWI Two-wire Serial Clock
-#define AT91C_PA26_IRQ1 (AT91C_PIO_PA26) // Interrupt input 1
-#define AT91C_PA27_MCCK (AT91C_PIO_PA27) // Multimedia Card Clock
-#define AT91C_PA27_TCLK3 (AT91C_PIO_PA27) // Timer Counter 3 External Clock Input
-#define AT91C_PA28_MCCDA (AT91C_PIO_PA28) // Multimedia Card A Command
-#define AT91C_PA28_TCLK4 (AT91C_PIO_PA28) // Timer Counter 4 external Clock Input
-#define AT91C_PA29_MCDA0 (AT91C_PIO_PA29) // Multimedia Card A Data 0
-#define AT91C_PA29_TCLK5 (AT91C_PIO_PA29) // Timer Counter 5 external clock input
-#define AT91C_PA3_NPCS0 (AT91C_PIO_PA3) // SPI Peripheral Chip Select 0
-#define AT91C_PA3_IRQ5 (AT91C_PIO_PA3) // AIC Interrupt Input 5
-#define AT91C_PA30_DRXD (AT91C_PIO_PA30) // DBGU Debug Receive Data
-#define AT91C_PA30_CTS2 (AT91C_PIO_PA30) // Usart 2 Clear To Send
-#define AT91C_PA31_DTXD (AT91C_PIO_PA31) // DBGU Debug Transmit Data
-#define AT91C_PA31_RTS2 (AT91C_PIO_PA31) // USART 2 Ready To Send
-#define AT91C_PA4_NPCS1 (AT91C_PIO_PA4) // SPI Peripheral Chip Select 1
-#define AT91C_PA4_PCK1 (AT91C_PIO_PA4) // PMC Programmable Clock Output 1
-#define AT91C_PA5_NPCS2 (AT91C_PIO_PA5) // SPI Peripheral Chip Select 2
-#define AT91C_PA5_TXD3 (AT91C_PIO_PA5) // USART 3 Transmit Data
-#define AT91C_PA6_NPCS3 (AT91C_PIO_PA6) // SPI Peripheral Chip Select 3
-#define AT91C_PA6_RXD3 (AT91C_PIO_PA6) // USART 3 Receive Data
-#define AT91C_PA7_ETXCK_EREFCK (AT91C_PIO_PA7) // Ethernet MAC Transmit Clock/Reference Clock
-#define AT91C_PA7_PCK2 (AT91C_PIO_PA7) // PMC Programmable Clock 2
-#define AT91C_PA8_ETXEN (AT91C_PIO_PA8) // Ethernet MAC Transmit Enable
-#define AT91C_PA8_MCCDB (AT91C_PIO_PA8) // Multimedia Card B Command
-#define AT91C_PA9_ETX0 (AT91C_PIO_PA9) // Ethernet MAC Transmit Data 0
-#define AT91C_PA9_MCDB0 (AT91C_PIO_PA9) // Multimedia Card B Data 0
-#define AT91C_PB0_TF0 (AT91C_PIO_PB0) // SSC Transmit Frame Sync 0
-#define AT91C_PB0_TIOB3 (AT91C_PIO_PB0) // Timer Counter 3 Multipurpose Timer I/O Pin B
-#define AT91C_PB1_TK0 (AT91C_PIO_PB1) // SSC Transmit Clock 0
-#define AT91C_PB1_CTS3 (AT91C_PIO_PB1) // USART 3 Clear To Send
-#define AT91C_PB10_RK1 (AT91C_PIO_PB10) // SSC Receive Clock 1
-#define AT91C_PB10_TIOA5 (AT91C_PIO_PB10) // Timer Counter 5 Multipurpose Timer I/O Pin A
-#define AT91C_PB11_RF1 (AT91C_PIO_PB11) // SSC Receive Frame Sync 1
-#define AT91C_PB11_TIOB5 (AT91C_PIO_PB11) // Timer Counter 5 Multipurpose Timer I/O Pin B
-#define AT91C_PB12_TF2 (AT91C_PIO_PB12) // SSC Transmit Frame Sync 2
-#define AT91C_PB12_ETX2 (AT91C_PIO_PB12) // Ethernet MAC Transmit Data 2
-#define AT91C_PB13_TK2 (AT91C_PIO_PB13) // SSC Transmit Clock 2
-#define AT91C_PB13_ETX3 (AT91C_PIO_PB13) // Ethernet MAC Transmit Data 3
-#define AT91C_PB14_TD2 (AT91C_PIO_PB14) // SSC Transmit Data 2
-#define AT91C_PB14_ETXER (AT91C_PIO_PB14) // Ethernet MAC Transmikt Coding Error
-#define AT91C_PB15_RD2 (AT91C_PIO_PB15) // SSC Receive Data 2
-#define AT91C_PB15_ERX2 (AT91C_PIO_PB15) // Ethernet MAC Receive Data 2
-#define AT91C_PB16_RK2 (AT91C_PIO_PB16) // SSC Receive Clock 2
-#define AT91C_PB16_ERX3 (AT91C_PIO_PB16) // Ethernet MAC Receive Data 3
-#define AT91C_PB17_RF2 (AT91C_PIO_PB17) // SSC Receive Frame Sync 2
-#define AT91C_PB17_ERXDV (AT91C_PIO_PB17) // Ethernet MAC Receive Data Valid
-#define AT91C_PB18_RI1 (AT91C_PIO_PB18) // USART 1 Ring Indicator
-#define AT91C_PB18_ECOL (AT91C_PIO_PB18) // Ethernet MAC Collision Detected
-#define AT91C_PB19_DTR1 (AT91C_PIO_PB19) // USART 1 Data Terminal ready
-#define AT91C_PB19_ERXCK (AT91C_PIO_PB19) // Ethernet MAC Receive Clock
-#define AT91C_PB2_TD0 (AT91C_PIO_PB2) // SSC Transmit data
-#define AT91C_PB2_SCK3 (AT91C_PIO_PB2) // USART 3 Serial Clock
-#define AT91C_PB20_TXD1 (AT91C_PIO_PB20) // USART 1 Transmit Data
-#define AT91C_PB21_RXD1 (AT91C_PIO_PB21) // USART 1 Receive Data
-#define AT91C_PB22_SCK1 (AT91C_PIO_PB22) // USART1 Serial Clock
-#define AT91C_PB23_DCD1 (AT91C_PIO_PB23) // USART 1 Data Carrier Detect
-#define AT91C_PB24_CTS1 (AT91C_PIO_PB24) // USART 1 Clear To Send
-#define AT91C_PB25_DSR1 (AT91C_PIO_PB25) // USART 1 Data Set ready
-#define AT91C_PB25_EF100 (AT91C_PIO_PB25) // Ethernet MAC Force 100 Mbits/sec
-#define AT91C_PB26_RTS1 (AT91C_PIO_PB26) // Usart 0 Ready To Send
-#define AT91C_PB27_PCK0 (AT91C_PIO_PB27) // PMC Programmable Clock Output 0
-#define AT91C_PB28_FIQ (AT91C_PIO_PB28) // AIC Fast Interrupt Input
-#define AT91C_PB29_IRQ0 (AT91C_PIO_PB29) // Interrupt input 0
-#define AT91C_PB3_RD0 (AT91C_PIO_PB3) // SSC Receive Data
-#define AT91C_PB3_MCDA1 (AT91C_PIO_PB3) // Multimedia Card A Data 1
-#define AT91C_PB4_RK0 (AT91C_PIO_PB4) // SSC Receive Clock
-#define AT91C_PB4_MCDA2 (AT91C_PIO_PB4) // Multimedia Card A Data 2
-#define AT91C_PB5_RF0 (AT91C_PIO_PB5) // SSC Receive Frame Sync 0
-#define AT91C_PB5_MCDA3 (AT91C_PIO_PB5) // Multimedia Card A Data 3
-#define AT91C_PB6_TF1 (AT91C_PIO_PB6) // SSC Transmit Frame Sync 1
-#define AT91C_PB6_TIOA3 (AT91C_PIO_PB6) // Timer Counter 4 Multipurpose Timer I/O Pin A
-#define AT91C_PB7_TK1 (AT91C_PIO_PB7) // SSC Transmit Clock 1
-#define AT91C_PB7_TIOB3 (AT91C_PIO_PB7) // Timer Counter 3 Multipurpose Timer I/O Pin B
-#define AT91C_PB8_TD1 (AT91C_PIO_PB8) // SSC Transmit Data 1
-#define AT91C_PB8_TIOA4 (AT91C_PIO_PB8) // Timer Counter 4 Multipurpose Timer I/O Pin A
-#define AT91C_PB9_RD1 (AT91C_PIO_PB9) // SSC Receive Data 1
-#define AT91C_PB9_TIOB4 (AT91C_PIO_PB9) // Timer Counter 4 Multipurpose Timer I/O Pin B
-#define AT91C_PC0_BFCK (AT91C_PIO_PC0) // Burst Flash Clock
-#define AT91C_PC1_BFRDY_SMOE (AT91C_PIO_PC1) // Burst Flash Ready
-#define AT91C_PC10_NCS4_CFCS (AT91C_PIO_PC10) // Compact Flash Chip Select
-#define AT91C_PC11_NCS5_CFCE1 (AT91C_PIO_PC11) // Chip Select 5 / Compact Flash Chip Enable 1
-#define AT91C_PC12_NCS6_CFCE2 (AT91C_PIO_PC12) // Chip Select 6 / Compact Flash Chip Enable 2
-#define AT91C_PC13_NCS7 (AT91C_PIO_PC13) // Chip Select 7
-#define AT91C_PC16_D16 (AT91C_PIO_PC16) // Data Bus [16]
-#define AT91C_PC17_D17 (AT91C_PIO_PC17) // Data Bus [17]
-#define AT91C_PC18_D18 (AT91C_PIO_PC18) // Data Bus [18]
-#define AT91C_PC19_D19 (AT91C_PIO_PC19) // Data Bus [19]
-#define AT91C_PC2_BFAVD (AT91C_PIO_PC2)u // Burst Flash Address Valid
-#define AT91C_PC20_D20 (AT91C_PIO_PC20) // Data Bus [20]
-#define AT91C_PC21_D21 (AT91C_PIO_PC21) // Data Bus [21]
-#define AT91C_PC22_D22 (AT91C_PIO_PC22) // Data Bus [22]
-#define AT91C_PC23_D23 (AT91C_PIO_PC23) // Data Bus [23]
-#define AT91C_PC24_D24 (AT91C_PIO_PC24) // Data Bus [24]
-#define AT91C_PC25_D25 (AT91C_PIO_PC25) // Data Bus [25]
-#define AT91C_PC26_D26 (AT91C_PIO_PC26) // Data Bus [26]
-#define AT91C_PC27_D27 (AT91C_PIO_PC27) // Data Bus [27]
-#define AT91C_PC28_D28 (AT91C_PIO_PC28) // Data Bus [28]
-#define AT91C_PC29_D29 (AT91C_PIO_PC29) // Data Bus [29]
-#define AT91C_PC3_BFBAA_SMWE (AT91C_PIO_PC3) // Burst Flash Address Advance / SmartMedia Write Enable
-#define AT91C_PC30_D30 (AT91C_PIO_PC30) // Data Bus [30]
-#define AT91C_PC31_D31 (AT91C_PIO_PC31) // Data Bus [31]
-#define AT91C_PC4_BFOE (AT91C_PIO_PC4) // Burst Flash Output Enable
-#define AT91C_PC5_BFWE (AT91C_PIO_PC5) // Burst Flash Write Enable
-#define AT91C_PC6_NWAIT (AT91C_PIO_PC6) // NWAIT
-#define AT91C_PC7_A23 (AT91C_PIO_PC7) // Address Bus[23]
-#define AT91C_PC8_A24 (AT91C_PIO_PC8) // Address Bus[24]
-#define AT91C_PC9_A25_CFRNW (AT91C_PIO_PC9) // Address Bus[25] / Compact Flash Read Not Write
-#define AT91C_PD0_ETX0 (AT91C_PIO_PD0) // Ethernet MAC Transmit Data 0
-#define AT91C_PD1_ETX1 (AT91C_PIO_PD1) // Ethernet MAC Transmit Data 1
-#define AT91C_PD10_PCK3 (AT91C_PIO_PD10) // PMC Programmable Clock Output 3
-#define AT91C_PD10_TPS1 (AT91C_PIO_PD10) // ETM ARM9 pipeline status 1
-#define AT91C_PD11_ (AT91C_PIO_PD11) //
-#define AT91C_PD11_TPS2 (AT91C_PIO_PD11) // ETM ARM9 pipeline status 2
-#define AT91C_PD12_ (AT91C_PIO_PD12) //
-#define AT91C_PD12_TPK0 (AT91C_PIO_PD12) // ETM Trace Packet 0
-#define AT91C_PD13_ (AT91C_PIO_PD13) //
-#define AT91C_PD13_TPK1 (AT91C_PIO_PD13) // ETM Trace Packet 1
-#define AT91C_PD14_ (AT91C_PIO_PD14) //
-#define AT91C_PD14_TPK2 (AT91C_PIO_PD14) // ETM Trace Packet 2
-#define AT91C_PD15_TD0 (AT91C_PIO_PD15) // SSC Transmit data
-#define AT91C_PD15_TPK3 (AT91C_PIO_PD15) // ETM Trace Packet 3
-#define AT91C_PD16_TD1 (AT91C_PIO_PD16) // SSC Transmit Data 1
-#define AT91C_PD16_TPK4 (AT91C_PIO_PD16) // ETM Trace Packet 4
-#define AT91C_PD17_TD2 (AT91C_PIO_PD17) // SSC Transmit Data 2
-#define AT91C_PD17_TPK5 (AT91C_PIO_PD17) // ETM Trace Packet 5
-#define AT91C_PD18_NPCS1 (AT91C_PIO_PD18) // SPI Peripheral Chip Select 1
-#define AT91C_PD18_TPK6 (AT91C_PIO_PD18) // ETM Trace Packet 6
-#define AT91C_PD19_NPCS2 (AT91C_PIO_PD19) // SPI Peripheral Chip Select 2
-#define AT91C_PD19_TPK7 (AT91C_PIO_PD19) // ETM Trace Packet 7
-#define AT91C_PD2_ETX2 (AT91C_PIO_PD2) // Ethernet MAC Transmit Data 2
-#define AT91C_PD20_NPCS3 (AT91C_PIO_PD20) // SPI Peripheral Chip Select 3
-#define AT91C_PD20_TPK8 (AT91C_PIO_PD20) // ETM Trace Packet 8
-#define AT91C_PD21_RTS0 (AT91C_PIO_PD21) // Usart 0 Ready To Send
-#define AT91C_PD21_TPK9 (AT91C_PIO_PD21) // ETM Trace Packet 9
-#define AT91C_PD22_RTS1 (AT91C_PIO_PD22) // Usart 0 Ready To Send
-#define AT91C_PD22_TPK10 (AT91C_PIO_PD22) // ETM Trace Packet 10
-#define AT91C_PD23_RTS2 (AT91C_PIO_PD23) // USART 2 Ready To Send
-#define AT91C_PD23_TPK11 (AT91C_PIO_PD23) // ETM Trace Packet 11
-#define AT91C_PD24_RTS3 (AT91C_PIO_PD24) // USART 3 Ready To Send
-#define AT91C_PD24_TPK12 (AT91C_PIO_PD24) // ETM Trace Packet 12
-#define AT91C_PD25_DTR1 (AT91C_PIO_PD25) // USART 1 Data Terminal ready
-#define AT91C_PD25_TPK13 (AT91C_PIO_PD25) // ETM Trace Packet 13
-#define AT91C_PD26_TPK14 (AT91C_PIO_PD26) // ETM Trace Packet 14
-#define AT91C_PD27_TPK15 (AT91C_PIO_PD27) // ETM Trace Packet 15
-#define AT91C_PD3_ETX3 (AT91C_PIO_PD3) // Ethernet MAC Transmit Data 3
-#define AT91C_PD4_ETXEN (AT91C_PIO_PD4) // Ethernet MAC Transmit Enable
-#define AT91C_PD5_ETXER (AT91C_PIO_PD5) // Ethernet MAC Transmikt Coding Error
-#define AT91C_PD6_DTXD (AT91C_PIO_PD6) // DBGU Debug Transmit Data
-#define AT91C_PD7_PCK0 (AT91C_PIO_PD7) // PMC Programmable Clock Output 0
-#define AT91C_PD7_TSYNC (AT91C_PIO_PD7) // ETM Synchronization signal
-#define AT91C_PD8_PCK1 (AT91C_PIO_PD8) // PMC Programmable Clock Output 1
-#define AT91C_PD8_TCLK (AT91C_PIO_PD8) // ETM Trace Clock signal
-#define AT91C_PD9_PCK2 (AT91C_PIO_PD9) // PMC Programmable Clock 2
-#define AT91C_PD9_TPS0 (AT91C_PIO_PD9) // ETM ARM9 pipeline status 0
-
-#endif /* ARM_AT91_AT91_PIO_RM9200_H */
diff --git a/sys/arm/at91/at91_pio_sam9g45.h b/sys/arm/at91/at91_pio_sam9g45.h
new file mode 100644
index 0000000..6045536
--- /dev/null
+++ b/sys/arm/at91/at91_pio_sam9g45.h
@@ -0,0 +1,272 @@
+/*-
+ * ----------------------------------------------------------------------------
+ * ATMEL Microcontroller Software Support - ROUSSET -
+ * ----------------------------------------------------------------------------
+ * Copyright (c) 2009, Atmel Corporation
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the disclaimer below.
+ *
+ * Atmel's name may not be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ----------------------------------------------------------------------------
+ *
+ * From AT91LIB version 1.9 boards/at91sam9g45-ek/at91sam9g45/AT91SAM9G45.h
+ */
+
+/* $FreeBSD$ */
+
+#ifndef ARM_AT91_AT91_PIO_SAM9G45_H
+#define ARM_AT91_AT91_PIO_SAM9G45_H
+
+#include <arm/at91/at91_pioreg.h>
+
+// *****************************************************************************
+// PIO DEFINITIONS FOR AT91SAM9G45
+// *****************************************************************************
+#define AT91C_PA0_MCI0_CK (AT91C_PIO_PA0) //
+#define AT91C_PA0_TCLK3 (AT91C_PIO_PA0) //
+#define AT91C_PA1_MCI0_CDA (AT91C_PIO_PA1) //
+#define AT91C_PA1_TIOA3 (AT91C_PIO_PA1) //
+#define AT91C_PA10_ETX0 (AT91C_PIO_PA10) // Ethernet MAC Transmit Data 0
+#define AT91C_PA11_ETX1 (AT91C_PIO_PA11) // Ethernet MAC Transmit Data 1
+#define AT91C_PA12_ERX0 (AT91C_PIO_PA12) // Ethernet MAC Receive Data 0
+#define AT91C_PA13_ERX1 (AT91C_PIO_PA13) // Ethernet MAC Receive Data 1
+#define AT91C_PA14_ETXEN (AT91C_PIO_PA14) // Ethernet MAC Transmit Enable
+#define AT91C_PA15_ERXDV (AT91C_PIO_PA15) // Ethernet MAC Receive Data Valid
+#define AT91C_PA16_ERXER (AT91C_PIO_PA16) // Ethernet MAC Receive Error
+#define AT91C_PA17_ETXCK_EREFCK (AT91C_PIO_PA17) // Ethernet MAC Transmit Clock/Reference Clock
+#define AT91C_PA18_EMDC (AT91C_PIO_PA18) // Ethernet MAC Management Data Clock
+#define AT91C_PA19_EMDIO (AT91C_PIO_PA19) // Ethernet MAC Management Data Input/Output
+#define AT91C_PA2_MCI0_DA0 (AT91C_PIO_PA2) //
+#define AT91C_PA2_TIOB3 (AT91C_PIO_PA2) //
+#define AT91C_PA20_TWD0 (AT91C_PIO_PA20) // TWI Two-wire Serial Data
+#define AT91C_PA21_TWCK0 (AT91C_PIO_PA21) // TWI Two-wire Serial Clock
+#define AT91C_PA22_MCI1_CDA (AT91C_PIO_PA22) //
+#define AT91C_PA22_SCK3 (AT91C_PIO_PA22) //
+#define AT91C_PA23_MCI1_DA0 (AT91C_PIO_PA23) //
+#define AT91C_PA23_RTS3 (AT91C_PIO_PA23) //
+#define AT91C_PA24_MCI1_DA1 (AT91C_PIO_PA24) //
+#define AT91C_PA24_CTS3 (AT91C_PIO_PA24) //
+#define AT91C_PA25_MCI1_DA2 (AT91C_PIO_PA25) //
+#define AT91C_PA25_PWM3 (AT91C_PIO_PA25) //
+#define AT91C_PA26_MCI1_DA3 (AT91C_PIO_PA26) //
+#define AT91C_PA26_TIOB2 (AT91C_PIO_PA26) //
+#define AT91C_PA27_MCI1_DA4 (AT91C_PIO_PA27) //
+#define AT91C_PA27_ETXER (AT91C_PIO_PA27) // Ethernet MAC Transmikt Coding Error
+#define AT91C_PA28_MCI1_DA5 (AT91C_PIO_PA28) //
+#define AT91C_PA28_ERXCK (AT91C_PIO_PA28) // Ethernet MAC Receive Clock
+#define AT91C_PA29_MCI1_DA6 (AT91C_PIO_PA29) //
+#define AT91C_PA29_ECRS (AT91C_PIO_PA29) // Ethernet MAC Carrier Sense/Carrier Sense and Data Valid
+#define AT91C_PA3_MCI0_DA1 (AT91C_PIO_PA3) //
+#define AT91C_PA3_TCLK4 (AT91C_PIO_PA3) //
+#define AT91C_PA30_MCI1_DA7 (AT91C_PIO_PA30) //
+#define AT91C_PA30_ECOL (AT91C_PIO_PA30) // Ethernet MAC Collision Detected
+#define AT91C_PA31_MCI1_CK (AT91C_PIO_PA31) //
+#define AT91C_PA31_PCK0 (AT91C_PIO_PA31) //
+#define AT91C_PA4_MCI0_DA2 (AT91C_PIO_PA4) //
+#define AT91C_PA4_TIOA4 (AT91C_PIO_PA4) //
+#define AT91C_PA5_MCI0_DA3 (AT91C_PIO_PA5) //
+#define AT91C_PA5_TIOB4 (AT91C_PIO_PA5) //
+#define AT91C_PA6_MCI0_DA4 (AT91C_PIO_PA6) //
+#define AT91C_PA6_ETX2 (AT91C_PIO_PA6) // Ethernet MAC Transmit Data 2
+#define AT91C_PA7_MCI0_DA5 (AT91C_PIO_PA7) //
+#define AT91C_PA7_ETX3 (AT91C_PIO_PA7) // Ethernet MAC Transmit Data 3
+#define AT91C_PA8_MCI0_DA6 (AT91C_PIO_PA8) //
+#define AT91C_PA8_ERX2 (AT91C_PIO_PA8) // Ethernet MAC Receive Data 2
+#define AT91C_PA9_MCI0_DA7 (AT91C_PIO_PA9) //
+#define AT91C_PA9_ERX3 (AT91C_PIO_PA9) // Ethernet MAC Receive Data 3
+#define AT91C_PB0_SPI0_MISO (AT91C_PIO_PB0) // SPI 0 Master In Slave
+#define AT91C_PB1_SPI0_MOSI (AT91C_PIO_PB1) // SPI 0 Master Out Slave
+#define AT91C_PB10_TWD1 (AT91C_PIO_PB10) //
+#define AT91C_PB10_ISI_D10 (AT91C_PIO_PB10) //
+#define AT91C_PB11_TWCK1 (AT91C_PIO_PB11) //
+#define AT91C_PB11_ISI_D11 (AT91C_PIO_PB11) //
+#define AT91C_PB12_DRXD (AT91C_PIO_PB12) //
+#define AT91C_PB13_DTXD (AT91C_PIO_PB13) //
+#define AT91C_PB14_SPI1_MISO (AT91C_PIO_PB14) //
+#define AT91C_PB15_SPI1_MOSI (AT91C_PIO_PB15) //
+#define AT91C_PB15_CTS0 (AT91C_PIO_PB15) //
+#define AT91C_PB16_SPI1_SPCK (AT91C_PIO_PB16) //
+#define AT91C_PB16_SCK0 (AT91C_PIO_PB16) //
+#define AT91C_PB17_SPI1_NPCS0 (AT91C_PIO_PB17) //
+#define AT91C_PB17_RTS0 (AT91C_PIO_PB17) //
+#define AT91C_PB18_RXD0 (AT91C_PIO_PB18) //
+#define AT91C_PB18_SPI0_NPCS1 (AT91C_PIO_PB18) //
+#define AT91C_PB19_TXD0 (AT91C_PIO_PB19) //
+#define AT91C_PB19_SPI0_NPCS2 (AT91C_PIO_PB19) //
+#define AT91C_PB2_SPI0_SPCK (AT91C_PIO_PB2) // SPI 0 Serial Clock
+#define AT91C_PB20_ISI_D0 (AT91C_PIO_PB20) //
+#define AT91C_PB21_ISI_D1 (AT91C_PIO_PB21) //
+#define AT91C_PB22_ISI_D2 (AT91C_PIO_PB22) //
+#define AT91C_PB23_ISI_D3 (AT91C_PIO_PB23) //
+#define AT91C_PB24_ISI_D4 (AT91C_PIO_PB24) //
+#define AT91C_PB25_ISI_D5 (AT91C_PIO_PB25) //
+#define AT91C_PB26_ISI_D6 (AT91C_PIO_PB26) //
+#define AT91C_PB27_ISI_D7 (AT91C_PIO_PB27) //
+#define AT91C_PB28_ISI_PCK (AT91C_PIO_PB28) //
+#define AT91C_PB29_ISI_VSYNC (AT91C_PIO_PB29) //
+#define AT91C_PB3_SPI0_NPCS0 (AT91C_PIO_PB3) // SPI 0 Peripheral Chip Select 0
+#define AT91C_PB30_ISI_HSYNC (AT91C_PIO_PB30) //
+#define AT91C_PB31_ (AT91C_PIO_PB31) //
+#define AT91C_PB31_PCK1 (AT91C_PIO_PB31) //
+#define AT91C_PB4_TXD1 (AT91C_PIO_PB4) // USART 1 Transmit Data
+#define AT91C_PB5_RXD1 (AT91C_PIO_PB5) // USART 1 Receive Data
+#define AT91C_PB6_TXD2 (AT91C_PIO_PB6) // USART 2 Transmit Data
+#define AT91C_PB7_RXD2 (AT91C_PIO_PB7) // USART 2 Receive Data
+#define AT91C_PB8_TXD3 (AT91C_PIO_PB8) // USART 3 Transmit Data
+#define AT91C_PB8_ISI_D8 (AT91C_PIO_PB8) //
+#define AT91C_PB9_RXD3 (AT91C_PIO_PB9) // USART 3 Receive Data
+#define AT91C_PB9_ISI_D9 (AT91C_PIO_PB9) //
+#define AT91C_PC0_DQM2 (AT91C_PIO_PC0) // DQM2
+#define AT91C_PC1_DQM3 (AT91C_PIO_PC1) // DQM3
+#define AT91C_PC10_NCS4_CFCS0 (AT91C_PIO_PC10) //
+#define AT91C_PC10_TCLK2 (AT91C_PIO_PC10) //
+#define AT91C_PC11_NCS5_CFCS1 (AT91C_PIO_PC11) //
+#define AT91C_PC11_CTS2 (AT91C_PIO_PC11) //
+#define AT91C_PC12_A25_CFRNW (AT91C_PIO_PC12) //
+#define AT91C_PC13_NCS2 (AT91C_PIO_PC13) //
+#define AT91C_PC14_NCS3_NANDCS (AT91C_PIO_PC14) //
+#define AT91C_PC15_NWAIT (AT91C_PIO_PC15) //
+#define AT91C_PC16_D16 (AT91C_PIO_PC16) //
+#define AT91C_PC17_D17 (AT91C_PIO_PC17) //
+#define AT91C_PC18_D18 (AT91C_PIO_PC18) //
+#define AT91C_PC19_D19 (AT91C_PIO_PC19) //
+#define AT91C_PC2_A19 (AT91C_PIO_PC2) //
+#define AT91C_PC20_D20 (AT91C_PIO_PC20) //
+#define AT91C_PC21_D21 (AT91C_PIO_PC21) //
+#define AT91C_PC22_D22 (AT91C_PIO_PC22) //
+#define AT91C_PC23_D23 (AT91C_PIO_PC23) //
+#define AT91C_PC24_D24 (AT91C_PIO_PC24) //
+#define AT91C_PC25_D25 (AT91C_PIO_PC25) //
+#define AT91C_PC26_D26 (AT91C_PIO_PC26) //
+#define AT91C_PC27_D27 (AT91C_PIO_PC27) //
+#define AT91C_PC28_D28 (AT91C_PIO_PC28) //
+#define AT91C_PC29_D29 (AT91C_PIO_PC29) //
+#define AT91C_PC3_A20 (AT91C_PIO_PC3) //
+#define AT91C_PC30_D30 (AT91C_PIO_PC30) //
+#define AT91C_PC31_D31 (AT91C_PIO_PC31) //
+#define AT91C_PC4_A21_NANDALE (AT91C_PIO_PC4) //
+#define AT91C_PC5_A22_NANDCLE (AT91C_PIO_PC5) //
+#define AT91C_PC6_A23 (AT91C_PIO_PC6) //
+#define AT91C_PC7_A24 (AT91C_PIO_PC7) //
+#define AT91C_PC8_CFCE1 (AT91C_PIO_PC8) //
+#define AT91C_PC9_CFCE2 (AT91C_PIO_PC9) //
+#define AT91C_PC9_RTS2 (AT91C_PIO_PC9) //
+#define AT91C_PD0_TK0 (AT91C_PIO_PD0) //
+#define AT91C_PD0_PWM3 (AT91C_PIO_PD0) //
+#define AT91C_PD1_TF0 (AT91C_PIO_PD1) //
+#define AT91C_PD10_TD1 (AT91C_PIO_PD10) //
+#define AT91C_PD11_RD1 (AT91C_PIO_PD11) //
+#define AT91C_PD12_TK1 (AT91C_PIO_PD12) //
+#define AT91C_PD12_PCK0 (AT91C_PIO_PD12) //
+#define AT91C_PD13_RK1 (AT91C_PIO_PD13) //
+#define AT91C_PD14_TF1 (AT91C_PIO_PD14) //
+#define AT91C_PD15_RF1 (AT91C_PIO_PD15) //
+#define AT91C_PD16_RTS1 (AT91C_PIO_PD16) //
+#define AT91C_PD17_CTS1 (AT91C_PIO_PD17) //
+#define AT91C_PD18_SPI1_NPCS2 (AT91C_PIO_PD18) //
+#define AT91C_PD18_IRQ (AT91C_PIO_PD18) //
+#define AT91C_PD19_SPI1_NPCS3 (AT91C_PIO_PD19) //
+#define AT91C_PD19_FIQ (AT91C_PIO_PD19) //
+#define AT91C_PD2_TD0 (AT91C_PIO_PD2) //
+#define AT91C_PD20_TIOA0 (AT91C_PIO_PD20) //
+#define AT91C_PD21_TIOA1 (AT91C_PIO_PD21) //
+#define AT91C_PD22_TIOA2 (AT91C_PIO_PD22) //
+#define AT91C_PD23_TCLK0 (AT91C_PIO_PD23) //
+#define AT91C_PD24_SPI0_NPCS1 (AT91C_PIO_PD24) //
+#define AT91C_PD24_PWM0 (AT91C_PIO_PD24) //
+#define AT91C_PD25_SPI0_NPCS2 (AT91C_PIO_PD25) //
+#define AT91C_PD25_PWM1 (AT91C_PIO_PD25) //
+#define AT91C_PD26_PCK0 (AT91C_PIO_PD26) //
+#define AT91C_PD26_PWM2 (AT91C_PIO_PD26) //
+#define AT91C_PD27_PCK1 (AT91C_PIO_PD27) //
+#define AT91C_PD27_SPI0_NPCS3 (AT91C_PIO_PD27) //
+#define AT91C_PD28_TSADTRG (AT91C_PIO_PD28) //
+#define AT91C_PD28_SPI1_NPCS1 (AT91C_PIO_PD28) //
+#define AT91C_PD29_TCLK1 (AT91C_PIO_PD29) //
+#define AT91C_PD29_SCK1 (AT91C_PIO_PD29) //
+#define AT91C_PD3_RD0 (AT91C_PIO_PD3) //
+#define AT91C_PD30_TIOB0 (AT91C_PIO_PD30) //
+#define AT91C_PD30_SCK2 (AT91C_PIO_PD30) //
+#define AT91C_PD31_TIOB1 (AT91C_PIO_PD31) //
+#define AT91C_PD31_PWM1 (AT91C_PIO_PD31) //
+#define AT91C_PD4_RK0 (AT91C_PIO_PD4) //
+#define AT91C_PD5_RF0 (AT91C_PIO_PD5) //
+#define AT91C_PD6_AC97RX (AT91C_PIO_PD6) //
+#define AT91C_PD7_AC97TX (AT91C_PIO_PD7) //
+#define AT91C_PD7_TIOA5 (AT91C_PIO_PD7) //
+#define AT91C_PD8_AC97FS (AT91C_PIO_PD8) //
+#define AT91C_PD8_TIOB5 (AT91C_PIO_PD8) //
+#define AT91C_PD9_AC97CK (AT91C_PIO_PD9) //
+#define AT91C_PD9_TCLK5 (AT91C_PIO_PD9) //
+#define AT91C_PE0_LCDPWR (AT91C_PIO_PE0) //
+#define AT91C_PE0_PCK0 (AT91C_PIO_PE0) //
+#define AT91C_PE1_LCDMOD (AT91C_PIO_PE1) //
+#define AT91C_PE10_LCDD3 (AT91C_PIO_PE10) //
+#define AT91C_PE10_LCDD5 (AT91C_PIO_PE10) //
+#define AT91C_PE11_LCDD4 (AT91C_PIO_PE11) //
+#define AT91C_PE11_LCDD6 (AT91C_PIO_PE11) //
+#define AT91C_PE12_LCDD5 (AT91C_PIO_PE12) //
+#define AT91C_PE12_LCDD7 (AT91C_PIO_PE12) //
+#define AT91C_PE13_LCDD6 (AT91C_PIO_PE13) //
+#define AT91C_PE13_LCDD10 (AT91C_PIO_PE13) //
+#define AT91C_PE14_LCDD7 (AT91C_PIO_PE14) //
+#define AT91C_PE14_LCDD11 (AT91C_PIO_PE14) //
+#define AT91C_PE15_LCDD8 (AT91C_PIO_PE15) //
+#define AT91C_PE15_LCDD12 (AT91C_PIO_PE15) //
+#define AT91C_PE16_LCDD9 (AT91C_PIO_PE16) //
+#define AT91C_PE16_LCDD13 (AT91C_PIO_PE16) //
+#define AT91C_PE17_LCDD10 (AT91C_PIO_PE17) //
+#define AT91C_PE17_LCDD14 (AT91C_PIO_PE17) //
+#define AT91C_PE18_LCDD11 (AT91C_PIO_PE18) //
+#define AT91C_PE18_LCDD15 (AT91C_PIO_PE18) //
+#define AT91C_PE19_LCDD12 (AT91C_PIO_PE19) //
+#define AT91C_PE19_LCDD18 (AT91C_PIO_PE19) //
+#define AT91C_PE2_LCDCC (AT91C_PIO_PE2) //
+#define AT91C_PE20_LCDD13 (AT91C_PIO_PE20) //
+#define AT91C_PE20_LCDD19 (AT91C_PIO_PE20) //
+#define AT91C_PE21_LCDD14 (AT91C_PIO_PE21) //
+#define AT91C_PE21_LCDD20 (AT91C_PIO_PE21) //
+#define AT91C_PE22_LCDD15 (AT91C_PIO_PE22) //
+#define AT91C_PE22_LCDD21 (AT91C_PIO_PE22) //
+#define AT91C_PE23_LCDD16 (AT91C_PIO_PE23) //
+#define AT91C_PE23_LCDD22 (AT91C_PIO_PE23) //
+#define AT91C_PE24_LCDD17 (AT91C_PIO_PE24) //
+#define AT91C_PE24_LCDD23 (AT91C_PIO_PE24) //
+#define AT91C_PE25_LCDD18 (AT91C_PIO_PE25) //
+#define AT91C_PE26_LCDD19 (AT91C_PIO_PE26) //
+#define AT91C_PE27_LCDD20 (AT91C_PIO_PE27) //
+#define AT91C_PE28_LCDD21 (AT91C_PIO_PE28) //
+#define AT91C_PE29_LCDD22 (AT91C_PIO_PE29) //
+#define AT91C_PE3_LCDVSYNC (AT91C_PIO_PE3) //
+#define AT91C_PE30_LCDD23 (AT91C_PIO_PE30) //
+#define AT91C_PE31_PWM2 (AT91C_PIO_PE31) //
+#define AT91C_PE31_PCK1 (AT91C_PIO_PE31) //
+#define AT91C_PE4_LCDHSYNC (AT91C_PIO_PE4) //
+#define AT91C_PE5_LCDDOTCK (AT91C_PIO_PE5) //
+#define AT91C_PE6_LCDDEN (AT91C_PIO_PE6) //
+#define AT91C_PE7_LCDD0 (AT91C_PIO_PE7) //
+#define AT91C_PE7_LCDD2 (AT91C_PIO_PE7) //
+#define AT91C_PE8_LCDD1 (AT91C_PIO_PE8) //
+#define AT91C_PE8_LCDD3 (AT91C_PIO_PE8) //
+#define AT91C_PE9_LCDD2 (AT91C_PIO_PE9) //
+#define AT91C_PE9_LCDD4 (AT91C_PIO_PE9) //
+
+#endif /* ARM_AT91_AT91_PIO_SAM9G45_H */
diff --git a/sys/arm/at91/at91_pmc.c b/sys/arm/at91/at91_pmc.c
index 799a87b..8711d17 100644
--- a/sys/arm/at91/at91_pmc.c
+++ b/sys/arm/at91/at91_pmc.c
@@ -65,6 +65,7 @@ MALLOC_DEFINE(M_PMC, "at91_pmc_clocks", "AT91 PMC Clock descriptors");
#define AT91_PMC_BASE 0xffffc00
static void at91_pmc_set_pllb_mode(struct at91_pmc_clock *, int);
+static void at91_pmc_set_upll_mode(struct at91_pmc_clock *, int);
static void at91_pmc_set_sys_mode(struct at91_pmc_clock *, int);
static void at91_pmc_set_periph_mode(struct at91_pmc_clock *, int);
static void at91_pmc_clock_alias(const char *name, const char *alias);
@@ -110,6 +111,18 @@ static struct at91_pmc_clock pllb = {
.set_mode = &at91_pmc_set_pllb_mode,
};
+/* Used by USB on at91sam9g45 */
+static struct at91_pmc_clock upll = {
+ .name = "upll", // UTMI PLL, used for USB functions on 9G45
+ .parent = &main_ck,
+ .refcnt = 0,
+ .id = 0,
+ .primary = 1,
+ .pll = 1,
+ .pmc_mask = (1 << 6),
+ .set_mode = &at91_pmc_set_upll_mode,
+};
+
static struct at91_pmc_clock udpck = {
.name = "udpck",
.parent = &pllb,
@@ -143,6 +156,7 @@ static struct at91_pmc_clock *clock_list[16+32] = {
&main_ck,
&plla,
&pllb,
+ &upll,
&udpck,
&uhpck,
&mck,
@@ -199,6 +213,26 @@ at91_pmc_set_pllb_mode(struct at91_pmc_clock *clk, int on)
}
static void
+at91_pmc_set_upll_mode(struct at91_pmc_clock *clk, int on)
+{
+ struct at91_pmc_softc *sc = pmc_softc;
+ uint32_t value;
+
+ if (on) {
+ on = PMC_IER_LOCKU;
+ value = CKGR_UCKR_UPLLEN | CKGR_UCKR_BIASEN;
+ } else
+ value = 0;
+
+ WR4(sc, CKGR_UCKR, RD4(sc, CKGR_UCKR) | value);
+ while ((RD4(sc, PMC_SR) & PMC_IER_LOCKU) != on)
+ continue;
+
+ WR4(sc, PMC_USB, PMC_USB_USBDIV(9) | PMC_USB_USBS);
+ WR4(sc, PMC_SCER, PMC_SCER_UHP_SAM9);
+}
+
+static void
at91_pmc_set_sys_mode(struct at91_pmc_clock *clk, int on)
{
struct at91_pmc_softc *sc = pmc_softc;
@@ -466,6 +500,12 @@ at91_pmc_init_clock(void)
uhpck.pmc_mask = PMC_SCER_UHP_SAM9;
udpck.pmc_mask = PMC_SCER_UDP_SAM9;
}
+ /* There is no pllb on AT91SAM9G45 */
+ if (at91_cpu_is(AT91_T_SAM9G45)) {
+ uhpck.parent = &upll;
+ uhpck.pmc_mask = PMC_SCER_UHP_SAM9;
+ }
+
mckr = RD4(sc, PMC_MCKR);
main_ck.hz = main_clock;
@@ -506,8 +546,14 @@ at91_pmc_init_clock(void)
mdiv = (mckr & PMC_MCKR_MDIV_MASK) >> 8;
if (at91_is_sam9() || at91_is_sam9xe()) {
+ /*
+ * On AT91SAM9G45 when mdiv == 3 we need to divide
+ * MCK by 3 but not, for example, on 9g20.
+ */
+ if (!at91_cpu_is(AT91_T_SAM9G45) || mdiv <= 2)
+ mdiv *= 2;
if (mdiv > 0)
- mck.hz /= mdiv * 2;
+ mck.hz /= mdiv;
} else
mck.hz /= (1 + mdiv);
diff --git a/sys/arm/at91/at91_pmcreg.h b/sys/arm/at91/at91_pmcreg.h
index eaf08c6..ce6165d 100644
--- a/sys/arm/at91/at91_pmcreg.h
+++ b/sys/arm/at91/at91_pmcreg.h
@@ -36,14 +36,14 @@
#define PMC_PCER 0x10 /* Peripheral Clock Enable Register */
#define PMC_PCDR 0x14 /* Peripheral Clock Disable Register */
#define PMC_PCSR 0x18 /* Peripheral Clock Status Register */
- /* 0x1c reserved */
+#define CKGR_UCKR 0x1c /* UTMI Clock Configuration Register */
#define CKGR_MOR 0x20 /* Main Oscillator Register */
#define CKGR_MCFR 0x24 /* Main Clock Frequency Register */
#define CKGR_PLLAR 0x28 /* PLL A Register */
#define CKGR_PLLBR 0x2c /* PLL B Register */
#define PMC_MCKR 0x30 /* Master Clock Register */
/* 0x34 reserved */
- /* 0x38 reserved */
+#define PMC_USB 0x38 /* USB Clock Register */
/* 0x3c reserved */
#define PMC_PCK0 0x40 /* Programmable Clock 0 Register */
#define PMC_PCK1 0x44 /* Programmable Clock 1 Register */
@@ -77,6 +77,10 @@
/* PMC Peripheral Clock Status Register */
/* Each bit here is 1 << peripheral number to enable/disable/status */
+/* PMC UTMI Clock Configuration Register */
+#define CKGR_UCKR_BIASEN (1UL << 24)
+#define CKGR_UCKR_UPLLEN (1UL << 16)
+
/* PMC Clock Generator Main Oscillator Register */
#define CKGR_MOR_MOSCEN (1UL << 0) /* MOSCEN: Main Oscillator Enable */
#define CKGR_MOR_OSCBYPASS (1UL << 1) /* Oscillator Bypass */
@@ -93,6 +97,10 @@
#define PMC_MCKR_MDIV_MASK (3 << 8)
#define PMC_MCKR_PRES_MASK (7 << 2)
+/* PMC USB Clock Register */
+#define PMC_USB_USBDIV(n) (((n) & 0x0F) << 8)
+#define PMC_USB_USBS (1 << 0)
+
/* PMC Interrupt Enable Register */
/* PMC Interrupt Disable Register */
/* PMC Status Register */
@@ -101,6 +109,7 @@
#define PMC_IER_LOCKA (1UL << 1) /* PLL A Locked */
#define PMC_IER_LOCKB (1UL << 2) /* PLL B Locked */
#define PMC_IER_MCKRDY (1UL << 3) /* Master Clock Status */
+#define PMC_IER_LOCKU (1UL << 6) /* UPLL Locked */
#define PMC_IER_PCK0RDY (1UL << 8) /* Programmable Clock 0 Ready */
#define PMC_IER_PCK1RDY (1UL << 9) /* Programmable Clock 1 Ready */
#define PMC_IER_PCK2RDY (1UL << 10) /* Programmable Clock 2 Ready */
diff --git a/sys/arm/at91/at91_spi.c b/sys/arm/at91/at91_spi.c
index a81e0be..f01e984 100644
--- a/sys/arm/at91/at91_spi.c
+++ b/sys/arm/at91/at91_spi.c
@@ -42,6 +42,7 @@ __FBSDID("$FreeBSD$");
#include <machine/bus.h>
+#include <arm/at91/at91var.h>
#include <arm/at91/at91_spireg.h>
#include <arm/at91/at91_pdcreg.h>
@@ -144,6 +145,7 @@ at91_spi_attach(device_t dev)
* memory and APB bandwidth.
* Also, currently we lack a way for lettting both the board and the
* slave devices take their maximum supported SPI clocks into account.
+ * Also, we hard-wire SPI mode to 3.
*/
csr = SPI_CSR_CPOL | (4 << 16) | (0xff << 8);
WR4(sc, SPI_CSR0, csr);
@@ -285,7 +287,10 @@ at91_spi_transfer(device_t dev, device_t child, struct spi_command *cmd)
*/
WR4(sc, PDC_PTCR, PDC_PTCR_TXTDIS | PDC_PTCR_RXTDIS);
-#ifdef SPI_CHIPSEL_SUPPORT
+ /*
+ * PSCDEC = 0 has a range of 0..3 for chip select. We
+ * don't support PSCDEC = 1 which has a range of 0..15.
+ */
if (cmd->cs < 0 || cmd->cs > 3) {
device_printf(dev,
"Invalid chip select %d requested by %s\n", cmd->cs,
@@ -293,18 +298,23 @@ at91_spi_transfer(device_t dev, device_t child, struct spi_command *cmd)
err = EINVAL;
goto out;
}
+
#ifdef SPI_CHIP_SELECT_HIGH_SUPPORT
+ /*
+ * The AT91RM9200 couldn't do CS high for CS 0. Other chips can, but we
+ * don't support that yet, or other spi modes.
+ */
if (at91_is_rm92() && cmd->cs == 0 &&
(cmd->flags & SPI_CHIP_SELECT_HIGH) != 0) {
device_printf(dev,
- "Invalid chip select high requested by %s\n",
+ "Invalid chip select high requested by %s for cs 0.\n",
device_get_nameunit(child));
err = EINVAL;
goto out;
}
#endif
- WR4(sc, SPI_MR, (RD4(sc, SPI_MR) & ~0x000f0000) | CS_TO_MR(cmd->cs));
-#endif
+ err = (RD4(sc, SPI_MR) & ~0x000f0000) | CS_TO_MR(cmd->cs);
+ WR4(sc, SPI_MR, err);
/*
* Set up the TX side of the transfer.
diff --git a/sys/arm/at91/at91rm9200.c b/sys/arm/at91/at91rm9200.c
index 51627f0..a3201e3 100644
--- a/sys/arm/at91/at91rm9200.c
+++ b/sys/arm/at91/at91rm9200.c
@@ -46,14 +46,6 @@ __FBSDID("$FreeBSD$");
#include <arm/at91/at91_pmcvar.h>
#include <arm/at91/at91soc.h>
-
-struct at91rm92_softc {
- device_t dev;
- bus_space_tag_t sc_st;
- bus_space_handle_t sc_sh;
- bus_space_handle_t sc_sys_sh;
- bus_space_handle_t sc_aic_sh;
-};
/*
* Standard priority levels for the system. 0 is lowest and 7 is highest.
* These values are the ones Atmel uses for its Linux port, which differ
@@ -137,19 +129,6 @@ static const struct cpu_devs at91_devs[] =
{ 0, 0, 0, 0, 0 }
};
-static void
-at91_cpu_add_builtin_children(device_t dev)
-{
- int i;
- const struct cpu_devs *walker;
-
- for (i = 1, walker = at91_devs; walker->name; i++, walker++) {
- at91_add_child(dev, i, walker->name, walker->unit,
- walker->mem_base, walker->mem_len, walker->irq0,
- walker->irq1, walker->irq2);
- }
-}
-
static uint32_t
at91_pll_outb(int freq)
{
@@ -160,71 +139,19 @@ at91_pll_outb(int freq)
return (0x8000);
}
-static void
-at91_identify(driver_t *drv, device_t parent)
-{
-
- if (at91_cpu_is(AT91_T_RM9200)) {
- at91_add_child(parent, 0, "at91rm920", 0, 0, 0, -1, 0, 0);
- at91_cpu_add_builtin_children(parent);
- }
-}
-
-static int
-at91_probe(device_t dev)
-{
-
- device_set_desc(dev, soc_info.name);
- return (0);
-}
-
-static int
-at91_attach(device_t dev)
-{
- struct at91_pmc_clock *clk;
- struct at91rm92_softc *sc = device_get_softc(dev);
- int i;
-
- struct at91_softc *at91sc = device_get_softc(device_get_parent(dev));
-
- sc->sc_st = at91sc->sc_st;
- sc->sc_sh = at91sc->sc_sh;
- sc->dev = dev;
-
- if (bus_space_subregion(sc->sc_st, sc->sc_sh, AT91RM92_SYS_BASE,
- AT91RM92_SYS_SIZE, &sc->sc_sys_sh) != 0)
- panic("Enable to map system registers");
-
- if (bus_space_subregion(sc->sc_st, sc->sc_sh, AT91RM92_AIC_BASE,
- AT91RM92_AIC_SIZE, &sc->sc_aic_sh) != 0)
- panic("Enable to map system registers");
-
- /* XXX Hack to tell atmelarm about the AIC */
- at91sc->sc_aic_sh = sc->sc_aic_sh;
-
- for (i = 0; i < 32; i++) {
- bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_SVR +
- i * 4, i);
- /* Priority. */
- bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_SMR + i * 4,
- at91_irq_prio[i]);
- if (i < 8)
- bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_EOICR,
- 1);
- }
-
- bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_SPU, 32);
- /* No debug. */
- bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_DCR, 0);
- /* Disable and clear all interrupts. */
- bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_IDCR, 0xffffffff);
- bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_ICCR, 0xffffffff);
-
+#if 0
+/* -- XXX are these needed? */
/* Disable all interrupts for RTC (0xe24 == RTC_IDR) */
bus_space_write_4(sc->sc_st, sc->sc_sys_sh, 0xe24, 0xffffffff);
/* Disable all interrupts for the SDRAM controller */
bus_space_write_4(sc->sc_st, sc->sc_sys_sh, 0xfa8, 0xffffffff);
+#endif
+
+static void
+at91_clock_init(void)
+{
+ struct at91_pmc_clock *clk;
/* Update USB device port clock info */
clk = at91_pmc_clock_ref("udpck");
@@ -260,30 +187,14 @@ at91_attach(device_t dev)
clk->pll_div_mask = RM9200_PLL_B_DIV_MASK;
clk->set_outb = at91_pll_outb;
at91_pmc_clock_deref(clk);
-
- return (0);
}
-static device_method_t at91_methods[] = {
- DEVMETHOD(device_probe, at91_probe),
- DEVMETHOD(device_attach, at91_attach),
- DEVMETHOD(device_identify, at91_identify),
- {0, 0},
-};
-
-static driver_t at91rm92_driver = {
- "at91rm920",
- at91_methods,
- sizeof(struct at91rm92_softc),
-};
-
-static devclass_t at91rm92_devclass;
-
-DRIVER_MODULE(at91rm920, atmelarm, at91rm92_driver, at91rm92_devclass, 0, 0);
-
static struct at91_soc_data soc_data = {
.soc_delay = at91_st_delay,
- .soc_reset = at91_st_cpu_reset
+ .soc_reset = at91_st_cpu_reset,
+ .soc_clock_init = at91_clock_init,
+ .soc_irq_prio = at91_irq_prio,
+ .soc_children = at91_devs,
};
AT91_SOC(AT91_T_RM9200, &soc_data);
diff --git a/sys/arm/at91/at91rm9200_devices.c b/sys/arm/at91/at91rm9200_devices.c
new file mode 100644
index 0000000..9f5efa4
--- /dev/null
+++ b/sys/arm/at91/at91rm9200_devices.c
@@ -0,0 +1,142 @@
+/*-
+ * Copyright (c) 2012 M. Warner Losh. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/bus.h>
+#include <sys/kernel.h>
+#include <sys/malloc.h>
+#include <sys/module.h>
+
+#define _ARM32_BUS_DMA_PRIVATE
+#include <machine/bus.h>
+
+#include <arm/at91/at91var.h>
+#include <arm/at91/at91board.h>
+#include <arm/at91/at91rm92reg.h>
+#include <arm/at91/at91rm9200var.h>
+#include <arm/at91/at91_pioreg.h>
+#include <arm/at91/at91_piovar.h>
+
+/*
+ * The AT91RM9200 uses the same silicon for both the BGA and PQFP
+ * packages. There's no documented way to detect this at runtime,
+ * so we require the board code to register what type of SoC is on the
+ * board in question. The pinouts are not quite compatible, and we
+ * use this information to cope with the slight differences.
+ */
+void
+at91rm9200_set_subtype(enum at91_soc_subtype st)
+{
+
+ switch (st) {
+ case AT91_ST_RM9200_BGA:
+ case AT91_ST_RM9200_PQFP:
+ soc_info.subtype = st;
+ break;
+ default:
+ panic("Bad SoC subtype %d for at91rm9200_set_subtype.", st);
+ break;
+ }
+}
+
+void
+at91rm9200_config_uart(unsigned devid, unsigned unit, unsigned pinmask)
+{
+
+ /*
+ * Since the USART supports RS-485 multidrop mode, it allows the
+ * TX pins to float. However, for RS-232 operations, we don't want
+ * these pins to float. Instead, they should be pulled up to avoid
+ * mismatches. Linux does something similar when it configures the
+ * TX lines. This implies that we also allow the RX lines to float
+ * rather than be in the state they are left in by the boot loader.
+ * Since they are input pins, I think that this is the right thing
+ * to do.
+ */
+
+ /*
+ * Current boards supported don't need the extras, but they should be
+ * implemented. But that should wait until the new pin api goes in.
+ */
+ switch (devid) {
+ case AT91_ID_DBGU:
+ at91_pio_use_periph_a(AT91RM92_PIOA_BASE, AT91C_PIO_PA30, 0); /* DRXD */
+ at91_pio_use_periph_a(AT91RM92_PIOA_BASE, AT91C_PIO_PA31, 1); /* DTXD */
+ break;
+
+ case AT91RM9200_ID_USART0:
+ at91_pio_use_periph_a(AT91RM92_PIOA_BASE, AT91C_PIO_PA17, 1); /* TXD0 */
+ at91_pio_use_periph_a(AT91RM92_PIOA_BASE, AT91C_PIO_PA19, 0); /* RXD0 */
+ /* CTS PA20 */
+ /* RTS -- errata #39 PA21 */
+ break;
+
+ case AT91RM9200_ID_USART1:
+ at91_pio_use_periph_a(AT91RM92_PIOB_BASE, AT91C_PIO_PB20, 1); /* TXD1 */
+ at91_pio_use_periph_a(AT91RM92_PIOB_BASE, AT91C_PIO_PB21, 0); /* RXD1 */
+ /* RI - PB18 */
+ /* DTR - PB19 */
+ /* DCD - PB23 */
+ /* CTS - PB24 */
+ /* DSR - PB25 */
+ /* RTS - PB26 */
+ break;
+
+ case AT91RM9200_ID_USART2:
+ at91_pio_use_periph_a(AT91RM92_PIOA_BASE, AT91C_PIO_PA22, 0); /* RXD2 */
+ at91_pio_use_periph_a(AT91RM92_PIOA_BASE, AT91C_PIO_PA23, 1); /* TXD2 */
+ /* CTS - PA30 B periph */
+ /* RTS - PA31 B periph */
+ break;
+
+ case AT91RM9200_ID_USART3:
+ at91_pio_use_periph_b(AT91RM92_PIOA_BASE, AT91C_PIO_PA5, 1); /* TXD3 */
+ at91_pio_use_periph_b(AT91RM92_PIOA_BASE, AT91C_PIO_PA6, 0); /* RXD3 */
+ /* CTS - PB0 B periph */
+ /* RTS - PB1 B periph */
+ break;
+
+ default:
+ break;
+ }
+}
+
+void
+at91rm9200_config_mci(int has_4wire)
+{
+ /* XXX TODO chip changed GPIO, other slots, etc */
+ at91_pio_use_periph_a(AT91RM92_PIOA_BASE, AT91C_PIO_PA27, 0); /* MCCK */
+ at91_pio_use_periph_a(AT91RM92_PIOA_BASE, AT91C_PIO_PA28, 1); /* MCCDA */
+ at91_pio_use_periph_a(AT91RM92_PIOA_BASE, AT91C_PIO_PA29, 1); /* MCDA0 */
+ if (has_4wire) {
+ at91_pio_use_periph_b(AT91RM92_PIOB_BASE, AT91C_PIO_PB3, 1); /* MCDA1 */
+ at91_pio_use_periph_b(AT91RM92_PIOB_BASE, AT91C_PIO_PB4, 1); /* MCDA2 */
+ at91_pio_use_periph_b(AT91RM92_PIOB_BASE, AT91C_PIO_PB5, 1); /* MCDA3 */
+ }
+}
diff --git a/sys/arm/at91/at91rm9200var.h b/sys/arm/at91/at91rm9200var.h
new file mode 100644
index 0000000..156320e
--- /dev/null
+++ b/sys/arm/at91/at91rm9200var.h
@@ -0,0 +1,58 @@
+/*-
+ * Copyright (c) 2012 M. Warner Losh. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/* $FreeBSD$ */
+
+#ifndef ARM_AT91_AT91RM9200VAR_H
+#define ARM_AT91_AT91RM9200VAR_H
+
+void at91rm9200_set_subtype(enum at91_soc_subtype st);
+
+#define AT91RM9200_ID_USART0 1
+#define AT91RM9200_ID_USART1 2
+#define AT91RM9200_ID_USART2 3
+#define AT91RM9200_ID_USART3 4
+
+/*
+ * Serial port convenience routines
+ */
+/* uart pins that are wired... */
+#define AT91_UART_CTS 0x01
+#define AT91_UART_RTS 0x02
+#define AT91_UART_RI 0x04
+#define AT91_UART_DTR 0x08
+#define AT91_UART_DCD 0x10
+#define AT91_UART_DSR 0x20
+
+#define AT91_ID_DBGU 0
+
+void at91rm9200_config_uart(unsigned devid, unsigned unit, unsigned pinmask);
+
+/*
+ * MCI (sd/mmc card support)
+ */
+void at91rm9200_config_mci(int has_4wire);
+
+#endif /* ARM_AT91_AT91RM9200VAR_H */
diff --git a/sys/arm/at91/at91sam9260.c b/sys/arm/at91/at91sam9260.c
index 9ea0335..23a5f57 100644
--- a/sys/arm/at91/at91sam9260.c
+++ b/sys/arm/at91/at91sam9260.c
@@ -47,15 +47,6 @@ __FBSDID("$FreeBSD$");
#include <arm/at91/at91_pmcvar.h>
#include <arm/at91/at91_rstreg.h>
-struct at91sam9_softc {
- device_t dev;
- bus_space_tag_t sc_st;
- bus_space_handle_t sc_sh;
- bus_space_handle_t sc_sys_sh;
- bus_space_handle_t sc_aic_sh;
- bus_space_handle_t sc_matrix_sh;
-};
-
/*
* Standard priority levels for the system. 0 is lowest and 7 is highest.
* These values are the ones Atmel uses for its Linux port
@@ -131,19 +122,6 @@ static const struct cpu_devs at91_devs[] =
{ 0, 0, 0, 0, 0 }
};
-static void
-at91_cpu_add_builtin_children(device_t dev)
-{
- int i;
- const struct cpu_devs *walker;
-
- for (i = 1, walker = at91_devs; walker->name; i++, walker++) {
- at91_add_child(dev, i, walker->name, walker->unit,
- walker->mem_base, walker->mem_len, walker->irq0,
- walker->irq1, walker->irq2);
- }
-}
-
static uint32_t
at91_pll_outa(int freq)
{
@@ -162,76 +140,9 @@ at91_pll_outb(int freq)
}
static void
-at91_identify(driver_t *drv, device_t parent)
-{
-
- if (soc_info.type == AT91_T_SAM9260) {
- at91_add_child(parent, 0, "at91sam9260", 0, 0, 0, -1, 0, 0);
- at91_cpu_add_builtin_children(parent);
- }
-}
-
-static int
-at91_probe(device_t dev)
-{
-
- device_set_desc(dev, soc_info.name);
- return (0);
-}
-
-static int
-at91_attach(device_t dev)
+at91_clock_init(void)
{
struct at91_pmc_clock *clk;
- struct at91sam9_softc *sc = device_get_softc(dev);
- int i;
-
- struct at91_softc *at91sc = device_get_softc(device_get_parent(dev));
-
- sc->sc_st = at91sc->sc_st;
- sc->sc_sh = at91sc->sc_sh;
- sc->dev = dev;
-
- if (bus_space_subregion(sc->sc_st, sc->sc_sh, AT91SAM9260_SYS_BASE,
- AT91SAM9260_SYS_SIZE, &sc->sc_sys_sh) != 0)
- panic("Enable to map system registers");
-
- if (bus_space_subregion(sc->sc_st, sc->sc_sh, AT91SAM9260_AIC_BASE,
- AT91SAM9260_AIC_SIZE, &sc->sc_aic_sh) != 0)
- panic("Enable to map system registers");
-
- /* XXX Hack to tell atmelarm about the AIC */
- at91sc->sc_aic_sh = sc->sc_aic_sh;
-
- for (i = 0; i < 32; i++) {
- bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_SVR +
- i * 4, i);
- /* Priority. */
- bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_SMR + i * 4,
- at91_irq_prio[i]);
- if (i < 8)
- bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_EOICR,
- 1);
- }
-
- bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_SPU, 32);
- /* No debug. */
- bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_DCR, 0);
- /* Disable and clear all interrupts. */
- bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_IDCR, 0xffffffff);
- bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_ICCR, 0xffffffff);
-
- if (bus_space_subregion(sc->sc_st, sc->sc_sh,
- AT91SAM9260_MATRIX_BASE, AT91SAM9260_MATRIX_SIZE,
- &sc->sc_matrix_sh) != 0)
- panic("Enable to map matrix registers");
-
- /* activate NAND */
- i = bus_space_read_4(sc->sc_st, sc->sc_matrix_sh,
- AT91SAM9260_EBICSA);
- bus_space_write_4(sc->sc_st, sc->sc_matrix_sh,
- AT91SAM9260_EBICSA,
- i | AT91_MATRIX_EBI_CS3A_SMC_SMARTMEDIA);
/* Update USB device port clock info */
clk = at91_pmc_clock_ref("udpck");
@@ -276,30 +187,14 @@ at91_attach(device_t dev)
clk->pll_div_mask = SAM9260_PLL_B_DIV_MASK;
clk->set_outb = at91_pll_outb;
at91_pmc_clock_deref(clk);
- return (0);
}
-static device_method_t at91sam9260_methods[] = {
- DEVMETHOD(device_probe, at91_probe),
- DEVMETHOD(device_attach, at91_attach),
- DEVMETHOD(device_identify, at91_identify),
- DEVMETHOD_END
-};
-
-static driver_t at91sam9260_driver = {
- "at91sam9260",
- at91sam9260_methods,
- sizeof(struct at91sam9_softc),
-};
-
-static devclass_t at91sam9260_devclass;
-
-DRIVER_MODULE(at91sam9260, atmelarm, at91sam9260_driver, at91sam9260_devclass,
- NULL, NULL);
-
static struct at91_soc_data soc_data = {
.soc_delay = at91_pit_delay,
- .soc_reset = at91_rst_cpu_reset
+ .soc_reset = at91_rst_cpu_reset,
+ .soc_clock_init = at91_clock_init,
+ .soc_irq_prio = at91_irq_prio,
+ .soc_children = at91_devs,
};
AT91_SOC(AT91_T_SAM9260, &soc_data);
diff --git a/sys/arm/at91/at91sam9g20.c b/sys/arm/at91/at91sam9g20.c
index 4b87ad0..73876b0 100644
--- a/sys/arm/at91/at91sam9g20.c
+++ b/sys/arm/at91/at91sam9g20.c
@@ -47,15 +47,6 @@ __FBSDID("$FreeBSD$");
#include <arm/at91/at91_pmcvar.h>
#include <arm/at91/at91_rstreg.h>
-struct at91sam9_softc {
- device_t dev;
- bus_space_tag_t sc_st;
- bus_space_handle_t sc_sh;
- bus_space_handle_t sc_sys_sh;
- bus_space_handle_t sc_aic_sh;
- bus_space_handle_t sc_matrix_sh;
-};
-
/*
* Standard priority levels for the system. 0 is lowest and 7 is highest.
* These values are the ones Atmel uses for its Linux port
@@ -131,19 +122,6 @@ static const struct cpu_devs at91_devs[] =
{ 0, 0, 0, 0, 0 }
};
-static void
-at91_cpu_add_builtin_children(device_t dev)
-{
- int i;
- const struct cpu_devs *walker;
-
- for (i = 1, walker = at91_devs; walker->name; i++, walker++) {
- at91_add_child(dev, i, walker->name, walker->unit,
- walker->mem_base, walker->mem_len, walker->irq0,
- walker->irq1, walker->irq2);
- }
-}
-
static uint32_t
at91_pll_outa(int freq)
{
@@ -169,81 +147,9 @@ at91_pll_outb(int freq)
}
static void
-at91_identify(driver_t *drv, device_t parent)
-{
-
- if (at91_cpu_is(AT91_T_SAM9G20)) {
- at91_add_child(parent, 0, "at91sam", 9, 0, 0, -1, 0, 0);
- at91_cpu_add_builtin_children(parent);
- }
-}
-
-static int
-at91_probe(device_t dev)
-{
-
- device_set_desc(dev, soc_info.name);
- return (0);
-}
-
-static int
-at91_attach(device_t dev)
+at91_clock_init(void)
{
struct at91_pmc_clock *clk;
- struct at91sam9_softc *sc = device_get_softc(dev);
- int i;
-
- struct at91_softc *at91sc = device_get_softc(device_get_parent(dev));
-
- sc->sc_st = at91sc->sc_st;
- sc->sc_sh = at91sc->sc_sh;
- sc->dev = dev;
-
- /*
- * XXX These values work for the RM9200, SAM926[01], and SAM9G20
- * will have to fix this when we want to support anything else. XXX
- */
- if (bus_space_subregion(sc->sc_st, sc->sc_sh, AT91SAM9G20_SYS_BASE,
- AT91SAM9G20_SYS_SIZE, &sc->sc_sys_sh) != 0)
- panic("Enable to map system registers");
-
- if (bus_space_subregion(sc->sc_st, sc->sc_sh, AT91SAM9G20_AIC_BASE,
- AT91SAM9G20_AIC_SIZE, &sc->sc_aic_sh) != 0)
- panic("Enable to map system registers");
-
- /* XXX Hack to tell atmelarm about the AIC */
- at91sc->sc_aic_sh = sc->sc_aic_sh;
-
- for (i = 0; i < 32; i++) {
- bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_SVR +
- i * 4, i);
- /* Priority. */
- bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_SMR + i * 4,
- at91_irq_prio[i]);
- if (i < 8)
- bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_EOICR,
- 1);
- }
-
- bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_SPU, 32);
- /* No debug. */
- bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_DCR, 0);
- /* Disable and clear all interrupts. */
- bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_IDCR, 0xffffffff);
- bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_ICCR, 0xffffffff);
-
- if (bus_space_subregion(sc->sc_st, sc->sc_sh,
- AT91SAM9G20_MATRIX_BASE, AT91SAM9G20_MATRIX_SIZE,
- &sc->sc_matrix_sh) != 0)
- panic("Enable to map matrix registers");
-
- /* activate NAND*/
- i = bus_space_read_4(sc->sc_st, sc->sc_matrix_sh,
- AT91SAM9G20_EBICSA);
- bus_space_write_4(sc->sc_st, sc->sc_matrix_sh,
- AT91SAM9G20_EBICSA,
- i | AT91_MATRIX_EBI_CS3A_SMC_SMARTMEDIA);
-
/* Update USB device port clock info */
clk = at91_pmc_clock_ref("udpck");
@@ -279,29 +185,14 @@ at91_attach(device_t dev)
clk->pll_div_mask = SAM9G20_PLL_B_DIV_MASK;
clk->set_outb = at91_pll_outb;
at91_pmc_clock_deref(clk);
- return (0);
}
-static device_method_t at91_methods[] = {
- DEVMETHOD(device_probe, at91_probe),
- DEVMETHOD(device_attach, at91_attach),
- DEVMETHOD(device_identify, at91_identify),
- {0, 0},
-};
-
-static driver_t at91sam9_driver = {
- "at91sam",
- at91_methods,
- sizeof(struct at91sam9_softc),
-};
-
-static devclass_t at91sam9_devclass;
-
-DRIVER_MODULE(at91sam, atmelarm, at91sam9_driver, at91sam9_devclass, 0, 0);
-
static struct at91_soc_data soc_data = {
.soc_delay = at91_pit_delay,
- .soc_reset = at91_rst_cpu_reset
+ .soc_reset = at91_rst_cpu_reset,
+ .soc_clock_init = at91_clock_init,
+ .soc_irq_prio = at91_irq_prio,
+ .soc_children = at91_devs,
};
AT91_SOC(AT91_T_SAM9G20, &soc_data);
diff --git a/sys/arm/at91/at91sam9g45.c b/sys/arm/at91/at91sam9g45.c
new file mode 100644
index 0000000..638c3d9
--- /dev/null
+++ b/sys/arm/at91/at91sam9g45.c
@@ -0,0 +1,177 @@
+/*-
+ * Copyright (c) 2005 Olivier Houchard. All rights reserved.
+ * Copyright (c) 2010 Greg Ansley. All rights reserved.
+ * Copyright (c) 2012 Andrew Turner. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/bus.h>
+#include <sys/kernel.h>
+#include <sys/malloc.h>
+#include <sys/module.h>
+
+#define _ARM32_BUS_DMA_PRIVATE
+#include <machine/bus.h>
+
+#include <arm/at91/at91var.h>
+#include <arm/at91/at91reg.h>
+#include <arm/at91/at91soc.h>
+#include <arm/at91/at91_aicreg.h>
+#include <arm/at91/at91sam9g45reg.h>
+#include <arm/at91/at91_pitreg.h>
+#include <arm/at91/at91_pmcreg.h>
+#include <arm/at91/at91_pmcvar.h>
+#include <arm/at91/at91_rstreg.h>
+
+/*
+ * Standard priority levels for the system. 0 is lowest and 7 is highest.
+ * These values are the ones Atmel uses for its Linux port
+ */
+static const int at91_irq_prio[32] =
+{
+ 7, /* Advanced Interrupt Controller */
+ 7, /* System Peripherals */
+ 1, /* Parallel IO Controller A */
+ 1, /* Parallel IO Controller B */
+ 1, /* Parallel IO Controller C */
+ 1, /* Parallel IO Controller D and E */
+ 0,
+ 5, /* USART 0 */
+ 5, /* USART 1 */
+ 5, /* USART 2 */
+ 5, /* USART 3 */
+ 0, /* Multimedia Card Interface 0 */
+ 6, /* Two-Wire Interface 0 */
+ 6, /* Two-Wire Interface 1 */
+ 5, /* Serial Peripheral Interface 0 */
+ 5, /* Serial Peripheral Interface 1 */
+ 4, /* Serial Synchronous Controller 0 */
+ 4, /* Serial Synchronous Controller 1 */
+ 0, /* Timer Counter 0, 1, 2, 3, 4 and 5 */
+ 0, /* Pulse Width Modulation Controller */
+ 0, /* Touch Screen Controller */
+ 0, /* DMA Controller */
+ 2, /* USB Host High Speed port */
+ 3, /* LCD Controller */
+ 5, /* AC97 Controller */
+ 3, /* Ethernet */
+ 0, /* Image Sensor Interface */
+ 2, /* USB Device High Speed port */
+ 0, /* (reserved) */
+ 0, /* Multimedia Card Interface 1 */
+ 0, /* (reserved) */
+ 0, /* Advanced Interrupt Controller IRQ0 */
+};
+
+#define DEVICE(_name, _id, _unit) \
+ { \
+ _name, _unit, \
+ AT91SAM9G45_ ## _id ##_BASE, \
+ AT91SAM9G45_ ## _id ## _SIZE, \
+ AT91SAM9G45_IRQ_ ## _id \
+ }
+
+static const struct cpu_devs at91_devs[] =
+{
+ DEVICE("at91_pmc", PMC, 0),
+ DEVICE("at91_wdt", WDT, 0),
+ DEVICE("at91_rst", RSTC, 0),
+ DEVICE("at91_pit", PIT, 0),
+ DEVICE("at91_pio", PIOA, 0),
+ DEVICE("at91_pio", PIOB, 1),
+ DEVICE("at91_pio", PIOC, 2),
+ DEVICE("at91_pio", PIOD, 3),
+ DEVICE("at91_pio", PIOE, 4),
+ DEVICE("at91_twi", TWI0, 0),
+ DEVICE("at91_twi", TWI1, 1),
+ DEVICE("at91_mci", HSMCI0, 0),
+ DEVICE("at91_mci", HSMCI1, 1),
+ DEVICE("uart", DBGU, 0),
+ DEVICE("uart", USART0, 1),
+ DEVICE("uart", USART1, 2),
+ DEVICE("uart", USART2, 3),
+ DEVICE("uart", USART3, 4),
+ DEVICE("spi", SPI0, 0),
+ DEVICE("spi", SPI1, 1),
+ DEVICE("ate", EMAC, 0),
+ DEVICE("macb", EMAC, 0),
+ DEVICE("nand", NAND, 0),
+ DEVICE("ohci", OHCI, 0),
+ { 0, 0, 0, 0, 0 }
+};
+
+static uint32_t
+at91_pll_outa(int freq)
+{
+
+ switch (freq / 10000000) {
+ case 747 ... 801: return ((1 << 29) | (0 << 14));
+ case 697 ... 746: return ((1 << 29) | (1 << 14));
+ case 647 ... 696: return ((1 << 29) | (2 << 14));
+ case 597 ... 646: return ((1 << 29) | (3 << 14));
+ case 547 ... 596: return ((1 << 29) | (4 << 14));
+ case 497 ... 546: return ((1 << 29) | (5 << 14));
+ case 447 ... 496: return ((1 << 29) | (6 << 14));
+ case 397 ... 446: return ((1 << 29) | (7 << 14));
+ default: return (1 << 29);
+ }
+}
+
+static void
+at91_clock_init(void)
+{
+ struct at91_pmc_clock *clk;
+
+ /* Update USB host port clock info */
+ clk = at91_pmc_clock_ref("uhpck");
+ clk->pmc_mask = PMC_SCER_UHP_SAM9;
+ at91_pmc_clock_deref(clk);
+
+ /* Each SOC has different PLL contraints */
+ clk = at91_pmc_clock_ref("plla");
+ clk->pll_min_in = SAM9G45_PLL_A_MIN_IN_FREQ; /* 2 MHz */
+ clk->pll_max_in = SAM9G45_PLL_A_MAX_IN_FREQ; /* 32 MHz */
+ clk->pll_min_out = SAM9G45_PLL_A_MIN_OUT_FREQ; /* 400 MHz */
+ clk->pll_max_out = SAM9G45_PLL_A_MAX_OUT_FREQ; /* 800 MHz */
+ clk->pll_mul_shift = SAM9G45_PLL_A_MUL_SHIFT;
+ clk->pll_mul_mask = SAM9G45_PLL_A_MUL_MASK;
+ clk->pll_div_shift = SAM9G45_PLL_A_DIV_SHIFT;
+ clk->pll_div_mask = SAM9G45_PLL_A_DIV_MASK;
+ clk->set_outb = at91_pll_outa;
+ at91_pmc_clock_deref(clk);
+}
+
+static struct at91_soc_data soc_data = {
+ .soc_delay = at91_pit_delay,
+ .soc_reset = at91_rst_cpu_reset,
+ .soc_clock_init = at91_clock_init,
+ .soc_irq_prio = at91_irq_prio,
+ .soc_children = at91_devs,
+};
+
+AT91_SOC(AT91_T_SAM9G45, &soc_data);
diff --git a/sys/arm/at91/at91sam9g45reg.h b/sys/arm/at91/at91sam9g45reg.h
new file mode 100644
index 0000000..86574b3
--- /dev/null
+++ b/sys/arm/at91/at91sam9g45reg.h
@@ -0,0 +1,294 @@
+/*-
+ * Copyright (c) 2009 Sylvestre Gallon. All rights reserved.
+ * Copyright (c) 2010 Greg Ansley. All rights reserved.
+ * Copyright (c) 2012 Andrew Turner. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/* $FreeBSD$ */
+
+#ifndef AT91SAM9G45REG_H_
+#define AT91SAM9G45REG_H_
+
+/* Chip Specific limits */
+#define SAM9G45_PLL_A_MIN_IN_FREQ 2000000 /* 2 Mhz */
+#define SAM9G45_PLL_A_MAX_IN_FREQ 32000000 /* 32 Mhz */
+#define SAM9G45_PLL_A_MIN_OUT_FREQ 400000000 /* 400 Mhz */
+#define SAM9G45_PLL_A_MAX_OUT_FREQ 800000000 /* 800 Mhz */
+#define SAM9G45_PLL_A_MUL_SHIFT 16
+#define SAM9G45_PLL_A_MUL_MASK 0xFF
+#define SAM9G45_PLL_A_DIV_SHIFT 0
+#define SAM9G45_PLL_A_DIV_MASK 0xFF
+
+/*
+ * Memory map, from datasheet :
+ * 0x00000000 - 0x0ffffffff : Internal Memories
+ * 0x10000000 - 0x1ffffffff : Chip Select 0
+ * 0x20000000 - 0x2ffffffff : Chip Select 1
+ * 0x30000000 - 0x3ffffffff : Chip Select 2
+ * 0x40000000 - 0x4ffffffff : Chip Select 3
+ * 0x50000000 - 0x5ffffffff : Chip Select 4
+ * 0x60000000 - 0x6ffffffff : Chip Select 5
+ * 0x70000000 - 0x7ffffffff : DDR SDRC 0
+ * 0x80000000 - 0xeffffffff : Undefined (Abort)
+ * 0xf0000000 - 0xfffffffff : Peripherals
+ */
+
+#define AT91_CHIPSELECT_0 0x10000000
+#define AT91_CHIPSELECT_1 0x20000000
+#define AT91_CHIPSELECT_2 0x30000000
+#define AT91_CHIPSELECT_3 0x40000000
+#define AT91_CHIPSELECT_4 0x50000000
+#define AT91_CHIPSELECT_5 0x60000000
+
+
+#define AT91SAM9G45_EMAC_BASE 0xffbc000
+#define AT91SAM9G45_EMAC_SIZE 0x4000
+
+#define AT91SAM9G45_RSTC_BASE 0xffffd00
+#define AT91SAM9G45_RSTC_SIZE 0x10
+
+/* USART*/
+
+#define AT91SAM9G45_USART_SIZE 0x4000
+#define AT91SAM9G45_USART0_BASE 0xff8c000
+#define AT91SAM9G45_USART0_SIZE AT91SAM9G45_USART_SIZE
+#define AT91SAM9G45_USART1_BASE 0xff90000
+#define AT91SAM9G45_USART1_SIZE AT91SAM9G45_USART_SIZE
+#define AT91SAM9G45_USART2_BASE 0xff94000
+#define AT91SAM9G45_USART2_SIZE AT91SAM9G45_USART_SIZE
+#define AT91SAM9G45_USART3_BASE 0xff98000
+#define AT91SAM9G45_USART3_SIZE AT91SAM9G45_USART_SIZE
+
+/*TC*/
+#define AT91SAM9G45_TC0_BASE 0xff7c000
+#define AT91SAM9G45_TC0_SIZE 0x4000
+#define AT91SAM9G45_TC0C0_BASE 0xff7c000
+#define AT91SAM9G45_TC0C1_BASE 0xff7c040
+#define AT91SAM9G45_TC0C2_BASE 0xff7c080
+
+#define AT91SAM9G45_TC1_BASE 0xffd4000
+#define AT91SAM9G45_TC1_SIZE 0x4000
+#define AT91SAM9G45_TC1C0_BASE 0xffd4000
+#define AT91SAM9G45_TC1C1_BASE 0xffd4040
+#define AT91SAM9G45_TC1C2_BASE 0xffd4080
+
+/*SPI*/
+
+#define AT91SAM9G45_SPI0_BASE 0xffa48000
+#define AT91SAM9G45_SPI0_SIZE 0x4000
+
+#define AT91SAM9G45_SPI1_BASE 0xffa8000
+#define AT91SAM9G45_SPI1_SIZE 0x4000
+
+/* System Registers */
+#define AT91SAM9G45_SYS_BASE 0xffff000
+#define AT91SAM9G45_SYS_SIZE 0x1000
+
+#define AT91SAM9G45_MATRIX_BASE 0xfffea00
+#define AT91SAM9G45_MATRIX_SIZE 0x200
+
+#define AT91SAM9G45_DBGU_BASE 0xfffee00
+#define AT91SAM9G45_DBGU_SIZE 0x200
+
+/*
+ * PIO
+ */
+#define AT91SAM9G45_PIOA_BASE 0xffff200
+#define AT91SAM9G45_PIOA_SIZE 0x200
+#define AT91SAM9G45_PIOB_BASE 0xffff400
+#define AT91SAM9G45_PIOB_SIZE 0x200
+#define AT91SAM9G45_PIOC_BASE 0xffff600
+#define AT91SAM9G45_PIOC_SIZE 0x200
+#define AT91SAM9G45_PIOD_BASE 0xffff800
+#define AT91SAM9G45_PIOD_SIZE 0x200
+#define AT91SAM9G45_PIOE_BASE 0xffffa00
+#define AT91SAM9G45_PIOE_SIZE 0x200
+
+#define AT91SAM9G45_PMC_BASE 0xffffc00
+#define AT91SAM9G45_PMC_SIZE 0x100
+
+/* IRQs : */
+/*
+ * 0: AIC
+ * 1: System peripheral (System timer, RTC, DBGU)
+ * 2: PIO Controller A
+ * 3: PIO Controller B
+ * 4: PIO Controller C
+ * 5: PIO Controller D/E
+ * 6: TRNG
+ * 7: USART 0
+ * 8: USART 1
+ * 9: USART 2
+ * 10: USART 3
+ * 11: Multimedia Card interface 0
+ * 12: Two-wirte interface 0
+ * 13: Two-wirte interface 1
+ * 14: SPI 0
+ * 15: SPI 1
+ * 16: SSC 0
+ * 17: SSC 0
+ * 18: Timer Counter 0, 2, 3, 4, 5
+ * 19: PWM
+ * 20: Touch Screen ADC
+ * 21: DMA
+ * 22: USB Host port
+ * 23: LCD
+ * 24: AC97
+ * 25: EMAC
+ * 26: Image Sensor Interface
+ * 27: USB Device High Speed
+ * 28: -
+ * 29: Multimedia Card interface 1
+ * 30: Reserved
+ * 31: AIC
+ */
+
+#define AT91SAM9G45_IRQ_SYSTEM 1
+#define AT91SAM9G45_IRQ_PIOA 2
+#define AT91SAM9G45_IRQ_PIOB 3
+#define AT91SAM9G45_IRQ_PIOC 4
+#define AT91SAM9G45_IRQ_PIOD 5
+#define AT91SAM9G45_IRQ_PIOE 6
+#define AT91SAM9G45_IRQ_USART0 7
+#define AT91SAM9G45_IRQ_USART1 8
+#define AT91SAM9G45_IRQ_USART2 9
+#define AT91SAM9G45_IRQ_USART3 10
+#define AT91SAM9G45_IRQ_HSMCI0 11
+#define AT91SAM9G45_IRQ_TWI0 12
+#define AT91SAM9G45_IRQ_TWI1 13
+#define AT91SAM9G45_IRQ_SPI0 14
+#define AT91SAM9G45_IRQ_SPI1 15
+#define AT91SAM9G45_IRQ_SSC0 16
+#define AT91SAM9G45_IRQ_SSC1 17
+#define AT91SAM9G45_IRQ_TC0_TC5 18
+#define AT91SAM9G45_IRQ_PWM 19
+#define AT91SAM9G45_IRQ_TSADCC 20
+#define AT91SAM9G45_IRQ_DMA 21
+#define AT91SAM9G45_IRQ_UHP 22
+#define AT91SAM9G45_IRQ_LCDC 23
+#define AT91SAM9G45_IRQ_AC97C 24
+#define AT91SAM9G45_IRQ_EMAC 25
+#define AT91SAM9G45_IRQ_ISI 26
+#define AT91SAM9G45_IRQ_UDPHS 27
+/* Reserved 28 */
+#define AT91SAM9G45_IRQ_HSMCI1 29
+/* Reserved 30 */
+#define AT91SAM9G45_IRQ_AICBASE 31
+
+/* Alias */
+#define AT91SAM9G45_IRQ_DBGU AT91SAM9G45_IRQ_SYSTEM
+#define AT91SAM9G45_IRQ_PMC AT91SAM9G45_IRQ_SYSTEM
+#define AT91SAM9G45_IRQ_WDT AT91SAM9G45_IRQ_SYSTEM
+#define AT91SAM9G45_IRQ_PIT AT91SAM9G45_IRQ_SYSTEM
+#define AT91SAM9G45_IRQ_RSTC AT91SAM9G45_IRQ_SYSTEM
+#define AT91SAM9G45_IRQ_OHCI AT91SAM9G45_IRQ_UHP
+#define AT91SAM9G45_IRQ_TC0 AT91SAM9G45_IRQ_TC0_TC5
+#define AT91SAM9G45_IRQ_TC1 AT91SAM9G45_IRQ_TC0_TC5
+#define AT91SAM9G45_IRQ_TC2 AT91SAM9G45_IRQ_TC0_TC5
+#define AT91SAM9G45_IRQ_TC3 AT91SAM9G45_IRQ_TC0_TC5
+#define AT91SAM9G45_IRQ_TC4 AT91SAM9G45_IRQ_TC0_TC5
+#define AT91SAM9G45_IRQ_TC5 AT91SAM9G45_IRQ_TC0_TC5
+#define AT91SAM9G45_IRQ_NAND (-1)
+
+#define AT91SAM9G45_AIC_BASE 0xffff000
+#define AT91SAM9G45_AIC_SIZE 0x200
+
+/* Timer */
+
+#define AT91SAM9G45_WDT_BASE 0xffffd40
+#define AT91SAM9G45_WDT_SIZE 0x10
+
+#define AT91SAM9G45_PIT_BASE 0xffffd30
+#define AT91SAM9G45_PIT_SIZE 0x10
+
+#define AT91SAM9G45_SMC_BASE 0xfffe800
+#define AT91SAM9G45_SMC_SIZE 0x200
+
+#define AT91SAM9G45_PMC_BASE 0xffffc00
+#define AT91SAM9G45_PMC_SIZE 0x100
+
+#define AT91SAM9G45_HSMCI0_BASE 0xff80000
+#define AT91SAM9G45_HSMCI0_SIZE 0x4000
+
+#define AT91SAM9G45_HSMCI1_BASE 0xffd0000
+#define AT91SAM9G45_HSMCI1_SIZE 0x4000
+
+#define AT91SAM9G45_TWI0_BASE 0xff84000
+#define AT91SAM9G45_TWI0_SIZE 0x4000
+#define AT91SAM9G45_TWI1_BASE 0xff88000
+#define AT91SAM9G45_TWI1_SIZE 0x4000
+
+/* XXX Needs to be carfully coordinated with
+ * other * soc's so phyical and vm address
+ * mapping are unique. XXX
+ */
+#define AT91SAM9G45_OHCI_BASE 0xdfb00000
+#define AT91SAM9G45_OHCI_PA_BASE 0x00700000
+#define AT91SAM9G45_OHCI_SIZE 0x00100000
+
+#define AT91SAM9G45_NAND_BASE 0xe0000000
+#define AT91SAM9G45_NAND_PA_BASE 0x40000000
+#define AT91SAM9G45_NAND_SIZE 0x10000000
+
+
+/* DDRSDRC */
+#define AT91SAM9G45_DDRSDRC1_BASE 0xfffea00
+#define AT91SAM9G45_DDRSDRC0_BASE 0xfffe600
+#define AT91SAM9G45_DDRSDRC_MR 0x00
+#define AT91SAM9G45_DDRSDRC_TR 0x04
+#define AT91SAM9G45_DDRSDRC_CR 0x08
+#define AT91SAM9G45_DDRSDRC_CR_NC_8 0x0
+#define AT91SAM9G45_DDRSDRC_CR_NC_9 0x1
+#define AT91SAM9G45_DDRSDRC_CR_NC_10 0x2
+#define AT91SAM9G45_DDRSDRC_CR_NC_11 0x3
+#define AT91SAM9G45_DDRSDRC_CR_NC_MASK 0x00000003
+#define AT91SAM9G45_DDRSDRC_CR_NR_11 0x0
+#define AT91SAM9G45_DDRSDRC_CR_NR_12 0x4
+#define AT91SAM9G45_DDRSDRC_CR_NR_13 0x8
+#define AT91SAM9G45_DDRSDRC_CR_NR_14 0xc
+#define AT91SAM9G45_DDRSDRC_CR_NR_MASK 0x0000000c
+#define AT91SAM9G45_DDRSDRC_TPR0 0x0c
+#define AT91SAM9G45_DDRSDRC_TPR1 0x10
+#define AT91SAM9G45_DDRSDRC_TPR2 0x14
+/* Reserved 0x18 */
+#define AT91SAM9G45_DDRSDRC_LPR 0x1c
+#define AT91SAM9G45_DDRSDRC_MDR 0x20
+#define AT91SAM9G45_DDRSDRC_MDR_SDR 0x0
+#define AT91SAM9G45_DDRSDRC_MDR_LPSDR 0x1
+#define AT91SAM9G45_DDRSDRC_MDR_LPDDR1 0x3
+#define AT91SAM9G45_DDRSDRC_MDR_DDR2 0x6
+#define AT91SAM9G45_DDRSDRC_MDR_MASK 0x00000007
+#define AT91SAM9G45_DDRSDRC_MDR_DBW_16 0x10
+#define AT91SAM9G45_DDRSDRC_DLL 0x24
+#define AT91SAM9G45_DDRSDRC_HSR 0x2c
+#define AT91SAM9G45_DDRSDRC_DELAY1R 0x40
+#define AT91SAM9G45_DDRSDRC_DELAY2R 0x44
+#define AT91SAM9G45_DDRSDRC_DELAY3R 0x48
+#define AT91SAM9G45_DDRSDRC_DELAY4R 0x4c
+/* Reserved 0x50 - 0xe0 */
+#define AT91SAM9G45_DDRSDRC_WPMR 0xe4
+#define AT91SAM9G45_DDRSDRC_WPSR 0xe8
+
+#endif /* AT91SAM9G45REG_H_*/
+
diff --git a/sys/arm/at91/at91sam9x25.c b/sys/arm/at91/at91sam9x5.c
index b84d30c..3de9ebd 100644
--- a/sys/arm/at91/at91sam9x25.c
+++ b/sys/arm/at91/at91sam9x5.c
@@ -41,20 +41,12 @@ __FBSDID("$FreeBSD$");
#include <arm/at91/at91reg.h>
#include <arm/at91/at91soc.h>
#include <arm/at91/at91_aicreg.h>
-#include <arm/at91/at91sam9x25reg.h>
+#include <arm/at91/at91sam9x5reg.h>
#include <arm/at91/at91_pitreg.h>
#include <arm/at91/at91_pmcreg.h>
#include <arm/at91/at91_pmcvar.h>
#include <arm/at91/at91_rstreg.h>
-struct at91sam9x25_softc {
- device_t dev;
- bus_space_tag_t sc_st;
- bus_space_handle_t sc_sh;
- bus_space_handle_t sc_sys_sh;
- bus_space_handle_t sc_aic_sh;
-};
-
/*
* Standard priority levels for the system. 0 is lowest and 7 is highest.
* These values are the ones Atmel uses for its Linux port
@@ -133,19 +125,6 @@ static const struct cpu_devs at91_devs[] =
{ 0, 0, 0, 0, 0 }
};
-static void
-at91_cpu_add_builtin_children(device_t dev)
-{
- int i;
- const struct cpu_devs *walker;
-
- for (i = 1, walker = at91_devs; walker->name; i++, walker++) {
- at91_add_child(dev, i, walker->name, walker->unit,
- walker->mem_base, walker->mem_len, walker->irq0,
- walker->irq1, walker->irq2);
- }
-}
-
static uint32_t
at91_pll_outa(int freq)
{
@@ -171,68 +150,9 @@ at91_pll_outb(int freq)
}
static void
-at91_identify(driver_t *drv, device_t parent)
-{
-
- if (soc_info.type == AT91_T_SAM9X5 && soc_info.subtype == AT91_ST_SAM9X25) {
- at91_add_child(parent, 0, "at91sam9x25", 0, 0, 0, -1, 0, 0);
- at91_cpu_add_builtin_children(parent);
- }
-}
-
-static int
-at91_probe(device_t dev)
-{
-
- device_set_desc(dev, "AT91SAM9X25");
- return (0);
-}
-
-static int
-at91_attach(device_t dev)
+at91_clock_init(void)
{
struct at91_pmc_clock *clk;
- struct at91sam9x25_softc *sc = device_get_softc(dev);
- int i;
-
- struct at91_softc *at91sc = device_get_softc(device_get_parent(dev));
-
- sc->sc_st = at91sc->sc_st;
- sc->sc_sh = at91sc->sc_sh;
- sc->dev = dev;
-
- /*
- * XXX These values work for the RM9200, SAM926[01], and SAM9X25
- * will have to fix this when we want to support anything else. XXX
- */
- if (bus_space_subregion(sc->sc_st, sc->sc_sh, AT91SAM9X25_SYS_BASE,
- AT91SAM9X25_SYS_SIZE, &sc->sc_sys_sh) != 0)
- panic("Enable to map system registers");
-
- if (bus_space_subregion(sc->sc_st, sc->sc_sh, AT91SAM9X25_AIC_BASE,
- AT91SAM9X25_AIC_SIZE, &sc->sc_aic_sh) != 0)
- panic("Enable to map system registers");
-
- /* XXX Hack to tell atmelarm about the AIC */
- at91sc->sc_aic_sh = sc->sc_aic_sh;
-
- for (i = 0; i < 32; i++) {
- bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_SVR +
- i * 4, i);
- /* Priority. */
- bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_SMR + i * 4,
- at91_irq_prio[i]);
- if (i < 8)
- bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_EOICR,
- 1);
- }
-
- bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_SPU, 32);
- /* No debug. */
- bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_DCR, 0);
- /* Disable and clear all interrupts. */
- bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_IDCR, 0xffffffff);
- bus_space_write_4(sc->sc_st, sc->sc_aic_sh, IC_ICCR, 0xffffffff);
/* Update USB device port clock info */
clk = at91_pmc_clock_ref("udpck");
@@ -268,29 +188,14 @@ at91_attach(device_t dev)
clk->pll_div_mask = SAM9X25_PLL_B_DIV_MASK;
clk->set_outb = at91_pll_outb;
at91_pmc_clock_deref(clk);
- return (0);
}
-static device_method_t at91sam9x25_methods[] = {
- DEVMETHOD(device_probe, at91_probe),
- DEVMETHOD(device_attach, at91_attach),
- DEVMETHOD(device_identify, at91_identify),
- {0, 0},
-};
-
-static driver_t at91sam9x25_driver = {
- "at91sam9x25",
- at91sam9x25_methods,
- sizeof(struct at91sam9x25_softc),
-};
-
-static devclass_t at91sam9x25_devclass;
-
-DRIVER_MODULE(at91sam9x25, atmelarm, at91sam9x25_driver, at91sam9x25_devclass, 0, 0);
-
static struct at91_soc_data soc_data = {
.soc_delay = at91_pit_delay,
- .soc_reset = at91_rst_cpu_reset
+ .soc_reset = at91_rst_cpu_reset,
+ .soc_clock_init = at91_clock_init,
+ .soc_irq_prio = at91_irq_prio,
+ .soc_children = at91_devs,
};
AT91_SOC_SUB(AT91_T_SAM9X5, AT91_ST_SAM9X25, &soc_data);
diff --git a/sys/arm/at91/at91sam9x25reg.h b/sys/arm/at91/at91sam9x5reg.h
index d497e2b..17c43ff 100644
--- a/sys/arm/at91/at91sam9x25reg.h
+++ b/sys/arm/at91/at91sam9x5reg.h
@@ -27,8 +27,8 @@
/* $FreeBSD$ */
-#ifndef AT91SAM9X25REG_H_
-#define AT91SAM9X25REG_H_
+#ifndef AT91SAM9X5REG_H_
+#define AT91SAM9X5REG_H_
#ifndef AT91SAM9X25_MASTER_CLOCK
#define AT91SAM9X25_MASTER_CLOCK ((18432000 * 43)/6)
@@ -312,5 +312,4 @@
#define AT91SAM9X25_SDRAMC_ISR 0x20
#define AT91SAM9X25_SDRAMC_MDR 0x24
-#endif /* AT91SAM9X25REG_H_*/
-
+#endif /* AT91SAM9X5REG_H_*/
diff --git a/sys/arm/at91/at91var.h b/sys/arm/at91/at91var.h
index 183b723..b149465 100644
--- a/sys/arm/at91/at91var.h
+++ b/sys/arm/at91/at91var.h
@@ -104,10 +104,14 @@ enum at91_soc_family {
typedef void (*DELAY_t)(int);
typedef void (*cpu_reset_t)(void);
+typedef void (*clk_init_t)(void);
struct at91_soc_data {
DELAY_t soc_delay;
cpu_reset_t soc_reset;
+ clk_init_t soc_clock_init;
+ const int *soc_irq_prio;
+ const struct cpu_devs *soc_children;
};
struct at91_soc_info {
@@ -117,6 +121,7 @@ struct at91_soc_info {
uint32_t cidr;
uint32_t exid;
char name[AT91_SOC_NAME_MAX];
+ uint32_t dbgu_base;
struct at91_soc_data *soc_data;
};
diff --git a/sys/arm/at91/board_bwct.c b/sys/arm/at91/board_bwct.c
index 63f3910..0515b21 100644
--- a/sys/arm/at91/board_bwct.c
+++ b/sys/arm/at91/board_bwct.c
@@ -1,6 +1,6 @@
/*-
* Copyright (c) 2005-2008 Olivier Houchard. All rights reserved.
- * Copyright (c) 2005-2008 Warner Losh. All rights reserved.
+ * Copyright (c) 2005-2012 Warner Losh. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -31,37 +31,22 @@ __FBSDID("$FreeBSD$");
#include <machine/board.h>
#include <arm/at91/at91board.h>
-#include <arm/at91/at91rm92reg.h>
-#include <arm/at91/at91_piovar.h>
-#include <arm/at91/at91_pio_rm9200.h>
+#include <arm/at91/at91var.h>
+#include <arm/at91/at91rm9200var.h>
BOARD_INIT long
board_init(void)
{
+
+ at91rm9200_set_subtype(AT91_ST_RM9200_BGA);
+
/*
- * Since the USART supports RS-485 multidrop mode, it allows the
- * TX pins to float. However, for RS-232 operations, we don't want
- * these pins to float. Instead, they should be pulled up to avoid
- * mismatches. Linux does something similar when it configures the
- * TX lines. This implies that we also allow the RX lines to float
- * rather than be in the state they are left in by the boot loader.
- * Since they are input pins, I think that this is the right thing
- * to do.
+ * I don't know anything at all about this board.
*/
+ at91rm9200_config_uart(AT91_ID_DBGU, 0, 0); /* DBGU just Tx and Rx */
- /* PIOA's A periph: Turn USART 0 and 2's TX/RX pins */
- at91_pio_use_periph_a(AT91RM92_PIOA_BASE,
- AT91C_PA18_RXD0 | AT91C_PA22_RXD2, 0);
- at91_pio_use_periph_a(AT91RM92_PIOA_BASE,
- AT91C_PA17_TXD0 | AT91C_PA23_TXD2, 1);
- /* PIOA's B periph: Turn USART 3's TX/RX pins */
- at91_pio_use_periph_b(AT91RM92_PIOA_BASE, AT91C_PA6_RXD3, 0);
- at91_pio_use_periph_b(AT91RM92_PIOA_BASE, AT91C_PA5_TXD3, 1);
- /* PIOB's A periph: Turn USART 1's TX/RX pins */
- at91_pio_use_periph_a(AT91RM92_PIOB_BASE, AT91C_PB21_RXD1, 0);
- at91_pio_use_periph_a(AT91RM92_PIOB_BASE, AT91C_PB20_TXD1, 1);
-
- /* Pin assignment */
+ at91rm9200_config_mci(0);
+ /* Configure ethernet */
return (at91_ramsize());
}
diff --git a/sys/arm/at91/board_ethernut5.c b/sys/arm/at91/board_ethernut5.c
index a09c335..96beeba 100644
--- a/sys/arm/at91/board_ethernut5.c
+++ b/sys/arm/at91/board_ethernut5.c
@@ -146,4 +146,4 @@ board_init(void)
return (at91_ramsize());
}
-ARM_BOARD(NONE, "Ethernut 5")
+ARM_BOARD(ETHERNUT5, "Ethernut 5")
diff --git a/sys/arm/at91/board_hl200.c b/sys/arm/at91/board_hl200.c
index 07db749..d3ac4fe 100644
--- a/sys/arm/at91/board_hl200.c
+++ b/sys/arm/at91/board_hl200.c
@@ -1,6 +1,6 @@
/*-
* Copyright (c) 2005-2008 Olivier Houchard. All rights reserved.
- * Copyright (c) 2005-2008 Warner Losh. All rights reserved.
+ * Copyright (c) 2005-2012 Warner Losh. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -31,34 +31,33 @@ __FBSDID("$FreeBSD$");
#include <machine/board.h>
#include <arm/at91/at91board.h>
+#include <arm/at91/at91var.h>
#include <arm/at91/at91rm92reg.h>
-#include <arm/at91/at91_piovar.h>
-#include <arm/at91/at91_pio_rm9200.h>
+#include <arm/at91/at91rm9200var.h>
BOARD_INIT long
board_init(void)
{
+
+ at91rm9200_set_subtype(AT91_ST_RM9200_BGA);
+
/*
- * Since the USART supports RS-485 multidrop mode, it allows the
- * TX pins to float. However, for RS-232 operations, we don't want
- * these pins to float. Instead, they should be pulled up to avoid
- * mismatches. Linux does something similar when it configures the
- * TX lines. This implies that we also allow the RX lines to float
- * rather than be in the state they are left in by the boot loader.
- * Since they are input pins, I think that this is the right thing
- * to do.
+ * Unsure what all is in the HOTe HL200, but I do know there's
+ * one serial port that isn't DBGU. There's many other peripherals
+ * that need to be configured here.
*/
- /* PIOA's A periph: Turn USART 0 and 2's TX/RX pins */
- at91_pio_use_periph_a(AT91RM92_PIOA_BASE,
- AT91C_PA18_RXD0 | AT91C_PA22_RXD2, 0);
- at91_pio_use_periph_a(AT91RM92_PIOA_BASE,
- AT91C_PA17_TXD0 | AT91C_PA23_TXD2, 1);
- /* PIOA's B periph: Turn USART 3's TX/RX pins */
- at91_pio_use_periph_b(AT91RM92_PIOA_BASE, AT91C_PA6_RXD3, 0);
- at91_pio_use_periph_b(AT91RM92_PIOA_BASE, AT91C_PA5_TXD3, 1);
- /* PIOB's A periph: Turn USART 1's TX/RX pins */
- at91_pio_use_periph_a(AT91RM92_PIOB_BASE, AT91C_PB21_RXD1, 0);
- at91_pio_use_periph_a(AT91RM92_PIOB_BASE, AT91C_PB20_TXD1, 1);
+ at91rm9200_config_uart(AT91_ID_DBGU, 0, 0); /* DBGU just Tx and Rx */
+ at91rm9200_config_uart(AT91RM9200_ID_USART0, 1, 0); /* Tx and Rx */
+
+ at91rm9200_config_mci(0); /* HOTe HL200 unknown 1 vs 4 wire */
+
+ /* Enable CF card slot */
+ /* Enable sound thing */
+ /* Enable VGA chip */
+ /* Enable ethernet */
+ /* Enable TWI + RTC */
+ /* Enable USB Host */
+ /* Enable USB Device (gadget) */
return (at91_ramsize());
}
diff --git a/sys/arm/at91/board_kb920x.c b/sys/arm/at91/board_kb920x.c
index a577f87..1f35705 100644
--- a/sys/arm/at91/board_kb920x.c
+++ b/sys/arm/at91/board_kb920x.c
@@ -1,6 +1,6 @@
/*-
* Copyright (c) 2005-2008 Olivier Houchard. All rights reserved.
- * Copyright (c) 2005-2008 Warner Losh. All rights reserved.
+ * Copyright (c) 2005-2012 Warner Losh. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -30,44 +30,35 @@ __FBSDID("$FreeBSD$");
#include <sys/systm.h>
#include <machine/board.h>
-#include <arm/at91/at91var.h>
#include <arm/at91/at91board.h>
-#include <arm/at91/at91rm92reg.h>
-#include <arm/at91/at91_piovar.h>
-#include <arm/at91/at91_pio_rm9200.h>
+#include <arm/at91/at91var.h>
+#include <arm/at91/at91rm9200var.h>
BOARD_INIT long
board_init(void)
{
+
+ at91rm9200_set_subtype(AT91_ST_RM9200_PQFP);
+
/*
- * Since the USART supports RS-485 multidrop mode, it allows the
- * TX pins to float. However, for RS-232 operations, we don't want
- * these pins to float. Instead, they should be pulled up to avoid
- * mismatches. Linux does something similar when it configures the
- * TX lines. This implies that we also allow the RX lines to float
- * rather than be in the state they are left in by the boot loader.
- * Since they are input pins, I think that this is the right thing
- * to do.
+ * Setup the serial ports.
+ * DBGU is the main one, although jumpers can make USART0 default.
+ * USART1 is IrDA, and USART3 is optional RS485.
*/
- /* PIOA's A periph: Turn USART 0 and 2's TX/RX pins */
- at91_pio_use_periph_a(AT91RM92_PIOA_BASE,
- AT91C_PA18_RXD0 | AT91C_PA22_RXD2, 0);
- at91_pio_use_periph_a(AT91RM92_PIOA_BASE,
- AT91C_PA17_TXD0 | AT91C_PA23_TXD2, 1);
- /* PIOA's B periph: Turn USART 3's TX/RX pins */
- at91_pio_use_periph_b(AT91RM92_PIOA_BASE, AT91C_PA6_RXD3, 0);
- at91_pio_use_periph_b(AT91RM92_PIOA_BASE, AT91C_PA5_TXD3, 1);
- /* PIOB's A periph: Turn USART 1's TX/RX pins */
- at91_pio_use_periph_a(AT91RM92_PIOB_BASE, AT91C_PB21_RXD1, 0);
- at91_pio_use_periph_a(AT91RM92_PIOB_BASE, AT91C_PB20_TXD1, 1);
+ at91rm9200_config_uart(AT91_ID_DBGU, 0, 0); /* DBGU just Tx and Rx */
+ at91rm9200_config_uart(AT91RM9200_ID_USART0, 1, 0); /* Tx and Rx */
+ at91rm9200_config_uart(AT91RM9200_ID_USART1, 2, 0); /* Tx and Rx - IRDA */
+ at91rm9200_config_uart(AT91RM9200_ID_USART3, 3, /* Tx, Rx, CTS, RTS - RS485 */
+ AT91_UART_CTS | AT91_UART_RTS);
+
+ at91rm9200_config_mci(1);
- /* MMC/SD Interface */
- at91_pio_use_periph_a(AT91RM92_PIOA_BASE,AT91C_PA27_MCCK, 0);
- at91_pio_use_periph_a(AT91RM92_PIOA_BASE,AT91C_PA28_MCCDA, 1);
- at91_pio_use_periph_a(AT91RM92_PIOA_BASE,AT91C_PA29_MCDA0, 1);
- at91_pio_use_periph_b(AT91RM92_PIOB_BASE,AT91C_PB3_MCDA1, 1);
- at91_pio_use_periph_b(AT91RM92_PIOB_BASE,AT91C_PB4_MCDA2, 1);
- at91_pio_use_periph_b(AT91RM92_PIOB_BASE,AT91C_PB5_MCDA3, 1);
+ /* CFE interface */
+ /* ethernet interface */
+ /* lcd interface */
+ /* USB host */
+ /* USB device (gadget) */
+ /* TWI */
return (at91_ramsize());
}
diff --git a/sys/arm/at91/board_sam9260ek.c b/sys/arm/at91/board_sam9260ek.c
new file mode 100644
index 0000000..61b9cbd
--- /dev/null
+++ b/sys/arm/at91/board_sam9260ek.c
@@ -0,0 +1,169 @@
+/*-
+ * Copyright (c) 2012 Marius Strobl <marius@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * Ethernut 5 board support
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <machine/board.h>
+#include <arm/at91/at91_pioreg.h>
+#include <arm/at91/at91_piovar.h>
+#include <arm/at91/at91board.h>
+#include <arm/at91/at91sam9260reg.h>
+
+BOARD_INIT long
+board_init(void)
+{
+
+ /*
+ * DBGU
+ */
+ /* DRXD */
+ at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB14, 0);
+ /* DTXD */
+ at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB15, 1);
+
+ /*
+ * EMAC
+ */
+ /* ETX0 */
+ at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA12, 0);
+ /* ETX1 */
+ at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA13, 0);
+ /* ERX0 */
+ at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA14, 0);
+ /* ERX1 */
+ at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA15, 0);
+ /* ETXEN */
+ at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA16, 0);
+ /* ERXDV */
+ at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA17, 0);
+ /* ERXER */
+ at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA18, 0);
+ /* ETXCK */
+ at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA19, 0);
+ /* EMDC */
+ at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA20, 0);
+ /* EMDIO */
+ at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA21, 0);
+ /* Not RMII */
+ /* ETX2 */
+ at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA10, 0);
+ /* ETX3 */
+ at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA11, 0);
+ /* ETXER */
+ at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA22, 0);
+ /* ERX2 */
+ at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA25, 0);
+ /* ERX3 */
+ at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA26, 0);
+ /* ERXCK */
+ at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA27, 0);
+ /* ECRS */
+ at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA28, 0);
+ /* ECOL */
+ at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA29, 0);
+
+
+ /*
+ * MMC, wired to socket B.
+ */
+ /* MCDB0 */
+ at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA0, 1);
+ /* MCCDB */
+ at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA1, 1);
+ /* MCDB3 */
+ at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA3, 1);
+ /* MCDB2 */
+ at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA4, 1);
+ /* MCDB1 */
+ at91_pio_use_periph_b(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA5, 1);
+ /* MCCK */
+ at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA8, 1);
+
+ /*
+ * SPI0 and MMC are wired together, since we don't support sharing
+ * don't support the dataflash. But if you did, you'd have to
+ * use CS0 and CS1.
+ */
+
+ /*
+ * SPI1 is wired to a audio CODEC that we don't support, so
+ * give it a pass.
+ */
+
+ /*
+ * TWI. Only one child on the iic bus, which we take care of
+ * via hints.
+ */
+ /* TWD */
+ at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA23, 1);
+ /* TWCK */
+ at91_pio_use_periph_a(AT91SAM9260_PIOA_BASE, AT91C_PIO_PA24, 1);
+
+ /*
+ * USART0
+ */
+ /* TXD0 */
+ at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB4, 1);
+ /* RXD0 */
+ at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB5, 0);
+ /* DSR0 */
+ at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB22, 0);
+ /* DCD0 */
+ at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB23, 0);
+ /* DTR0 */
+ at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB24, 1);
+ /* RI0 */
+ at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB25, 0);
+ /* RTS0 */
+ at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB26, 1);
+ /* CTS0 */
+ at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB27, 0);
+
+ /*
+ * USART1
+ */
+ /* RTS1 */
+ at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB28, 1);
+ /* CTS1 */
+ at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB29, 0);
+ /* TXD1 */
+ at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB6, 1);
+ /* RXD1 */
+ at91_pio_use_periph_a(AT91SAM9260_PIOB_BASE, AT91C_PIO_PB7, 0);
+
+ /* USART2 - USART5 aren't wired up, except via PIO pins, ignore them. */
+
+ return (at91_ramsize());
+}
+
+ARM_BOARD(AT91SAM9260EK, "Atmel SMA9260-EK")
diff --git a/sys/arm/at91/board_sn9g45.c b/sys/arm/at91/board_sn9g45.c
new file mode 100644
index 0000000..eb1980e
--- /dev/null
+++ b/sys/arm/at91/board_sn9g45.c
@@ -0,0 +1,55 @@
+/*-
+ * Copyright (c) 2009 Greg Ansley. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * DesignA Electronics Snapper9g45
+ * http://www.designa-electronics.com/
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+#include <sys/param.h>
+#include <sys/systm.h>
+
+#include <machine/board.h>
+#include <arm/at91/at91board.h>
+#include <arm/at91/at91reg.h>
+#include <arm/at91/at91var.h>
+#include <arm/at91/at91sam9g45reg.h>
+#include <arm/at91/at91_piovar.h>
+#include <arm/at91/at91_pio_sam9g45.h>
+
+BOARD_INIT long
+board_init(void)
+{
+
+ /* PIOB's A periph: Turn the debug USART's TX/RX pins */
+ at91_pio_use_periph_a(AT91SAM9G45_PIOB_BASE, AT91C_PB12_DRXD, 0);
+ at91_pio_use_periph_a(AT91SAM9G45_PIOB_BASE, AT91C_PB13_DTXD, 1);
+
+ return (at91_ramsize());
+}
+
+ARM_BOARD(SNAPPER9G45, "DesignA Electronics Snapper9G45");
diff --git a/sys/arm/at91/board_tsc4370.c b/sys/arm/at91/board_tsc4370.c
index 8139a4a..7b1086b 100644
--- a/sys/arm/at91/board_tsc4370.c
+++ b/sys/arm/at91/board_tsc4370.c
@@ -1,6 +1,6 @@
/*-
* Copyright (c) 2005-2008 Olivier Houchard. All rights reserved.
- * Copyright (c) 2005-2008 Warner Losh. All rights reserved.
+ * Copyright (c) 2005-2012 Warner Losh. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -31,38 +31,32 @@ __FBSDID("$FreeBSD$");
#include <machine/board.h>
#include <arm/at91/at91board.h>
+#include <arm/at91/at91var.h>
#include <arm/at91/at91rm92reg.h>
+#include <arm/at91/at91rm9200var.h>
#include <arm/at91/at91_piovar.h>
-#include <arm/at91/at91_pio_rm9200.h>
+#include <arm/at91/at91_pioreg.h>
BOARD_INIT long
board_init(void)
{
- /*
- * Since the USART supports RS-485 multidrop mode, it allows the
- * TX pins to float. However, for RS-232 operations, we don't want
- * these pins to float. Instead, they should be pulled up to avoid
- * mismatches. Linux does something similar when it configures the
- * TX lines. This implies that we also allow the RX lines to float
- * rather than be in the state they are left in by the boot loader.
- * Since they are input pins, I think that this is the right thing
- * to do.
- */
- /* PIOA's A periph: Turn USART 0 and 2's TX/RX pins */
- at91_pio_use_periph_a(AT91RM92_PIOA_BASE,
- AT91C_PA18_RXD0 | AT91C_PA22_RXD2, 0);
- at91_pio_use_periph_a(AT91RM92_PIOA_BASE,
- AT91C_PA17_TXD0 | AT91C_PA23_TXD2, 1);
- /* PIOA's B periph: Turn USART 3's TX/RX pins */
- at91_pio_use_periph_b(AT91RM92_PIOA_BASE, AT91C_PA6_RXD3, 0);
- at91_pio_use_periph_b(AT91RM92_PIOA_BASE, AT91C_PA5_TXD3, 1);
- /* We're using TC0's A1 and A2 input */
- at91_pio_use_periph_b(AT91RM92_PIOA_BASE,
- AT91C_PA19_TIOA1 | AT91C_PA21_TIOA2, 0);
- /* PIOB's A periph: Turn USART 1's TX/RX pins */
- at91_pio_use_periph_a(AT91RM92_PIOB_BASE, AT91C_PB21_RXD1, 0);
- at91_pio_use_periph_a(AT91RM92_PIOB_BASE, AT91C_PB20_TXD1, 1);
+ at91rm9200_set_subtype(AT91_ST_RM9200_PQFP);
+
+ at91rm9200_config_uart(AT91_ID_DBGU, 0, 0); /* DBGU just Tx and Rx */
+ at91rm9200_config_uart(AT91RM9200_ID_USART0, 1, 0); /* Tx and Rx */
+ at91rm9200_config_uart(AT91RM9200_ID_USART1, 2, 0); /* Tx and Rx */
+ at91rm9200_config_uart(AT91RM9200_ID_USART2, 3, 0); /* Tx and Rx */
+ at91rm9200_config_uart(AT91RM9200_ID_USART3, 4, 0); /* Tx and Rx */
+
+ at91rm9200_config_mci(0); /* tsc4370 board has only 1 wire */
+ /* Newer boards may have 4 wires */
+
+ /* Configure TWI */
+ /* Configure SPI + dataflash */
+ /* Configure SSC */
+ /* Configure USB Host */
+ /* Configure FPGA attached to chip selects */
/* Pin assignment */
/* Assert PA24 low -- talk to rubidium */
diff --git a/sys/arm/at91/files.at91 b/sys/arm/at91/files.at91
index 8e3a75d..04dfd16 100644
--- a/sys/arm/at91/files.at91
+++ b/sys/arm/at91/files.at91
@@ -22,16 +22,18 @@ arm/at91/at91_wdt.c optional at91_wdt
arm/at91/if_ate.c optional ate
arm/at91/if_macb.c optional macb
arm/at91/uart_bus_at91usart.c optional uart
-arm/at91/uart_cpu_at91rm9200usart.c optional uart
+arm/at91/uart_cpu_at91usart.c optional uart
arm/at91/uart_dev_at91usart.c optional uart
#
# All the "systems on a chip" we support
#
arm/at91/at91soc.c standard
arm/at91/at91rm9200.c optional at91rm9200
+arm/at91/at91rm9200_devices.c optional at91rm9200
arm/at91/at91sam9260.c optional at91sam9260
arm/at91/at91sam9g20.c optional at91sam9g20
-arm/at91/at91sam9x25.c optional at91sam9x25
+arm/at91/at91sam9g45.c optional at91sam9g45
+arm/at91/at91sam9x5.c optional at91sam9x5
#
# All the boards we support
#
@@ -41,6 +43,15 @@ arm/at91/board_hl200.c optional at91_board_hl200
arm/at91/board_hl201.c optional at91_board_hl201
arm/at91/board_kb920x.c optional at91_board_kb920x
arm/at91/board_qila9g20.c optional at91_board_qila9g20
+arm/at91/board_sam9260ek.c optional at91_board_sam9260ek
arm/at91/board_sam9g20ek.c optional at91_board_sam9g20ek
arm/at91/board_sam9x25ek.c optional at91_board_sam9x25ek
+arm/at91/board_sn9g45.c optional at91_board_sn9g45
arm/at91/board_tsc4370.c optional at91_board_tsc4370
+#
+# usb
+#
+dev/usb/controller/at91dci.c optional at91_dci
+dev/usb/controller/at91dci_atmelarm.c optional at91_dci
+dev/usb/controller/ohci_atmelarm.c optional ohci
+dev/usb/controller/ehci_atmelarm.c optional ehci
diff --git a/sys/arm/at91/hints.at91rm9200 b/sys/arm/at91/hints.at91rm9200
deleted file mode 100644
index 4fb861f..0000000
--- a/sys/arm/at91/hints.at91rm9200
+++ /dev/null
@@ -1,68 +0,0 @@
-# $FreeBSD$
-#
-
-# These are the wiring for the at91rm9200. These are the built-in devices
-# for that cpu.
-
-# DBGU is unit 0
-hint.uart.0.at="apb"
-hint.uart.0.maddr="0xfffff200"
-hint.uart.0.flags=0x10
-# USART0 is unit 1
-hint.uart.1.at="apb"
-hint.uart.1.maddr="0xfffc0000"
-# USART1 is unit 2
-hint.uart.2.at="apb"
-hint.uart.2.maddr="0xfffc4000"
-# USART2 is unit 3
-hint.uart.3.at="apb"
-hint.uart.3.maddr="0xfffc8000"
-# USART3 is unit 4
-hint.uart.4.at="apb"
-hint.uart.4.maddr="0xfffcc000"
-
-# SSC0
-hint.ssc.0.at="apb"
-hint.ssc.0.maddr="0xfffd0000"
-# SSC1
-hint.ssc.1.at="apb"
-hint.ssc.1.maddr="0xfffd4000"
-# SSC2
-hint.ssc.1.at="apb"
-hint.ssc.1.maddr="0xfffd8000"
-
-# TC0, TC1, TC2
-hint.tc.0.at="apb"
-hint.tc.0.maddr="0xfffa0000"
-# TC3, TC4, TC5
-hint.tc.1.at="apb"
-hint.tc.1.maddr="0xfffa4000"
-
-# USB Device
-hint.udp.0.at="apb"
-hint.udp.0.maddr="0xfffb0000"
-
-# MCI
-hint.mci.0.at="apb"
-hint.mci.0.maddr="0xfffb4000"
-
-# TWI
-hint.twi.0.at="apb"
-hint.twi.0.maddr="0xfffb8000"
-
-# EMAC
-hint.emac.0.at="apb"
-hint.emac.0.maddr="0xfffbc000"
-
-# SPI
-hint.spi.0.at="apb"
-hint.spi.0.maddr="0xfffe0000"
-
-# PMC
-hint.pmc.0.at="apb"
-hint.pmc.0.maddr="0xfffffc00"
-
-# USB host (ohci)
-#??? maybe this needs to be on asb instead of apb
-hint.ohci.at="apb"
-hint.ohci.maddr="0x00300000"
diff --git a/sys/arm/at91/hints.at91sam9261 b/sys/arm/at91/hints.at91sam9261
deleted file mode 100644
index b60c60e..0000000
--- a/sys/arm/at91/hints.at91sam9261
+++ /dev/null
@@ -1,67 +0,0 @@
-# $FreeBSD$
-#
-
-# These are the wiring for the at91sam9261. These are the built-in devices
-# for that cpu.
-
-# DBGU is unit 0
-hint.uart.0.at="apb"
-hint.uart.0.maddr="0xfffff200"
-hint.uart.0.flags=0x10
-# USART0 is unit 1
-hint.uart.1.at="apb"
-hint.uart.1.maddr="0xfffb0000"
-# USART1 is unit 2
-hint.uart.2.at="apb"
-hint.uart.2.maddr="0xfffb4000"
-# USART2 is unit 3
-hint.uart.3.at="apb"
-hint.uart.3.maddr="0xfffb8000"
-# USART3 is unit 4
-hint.uart.4.at="apb"
-hint.uart.4.maddr="0xfffbc000"
-
-# TC0, TC1, TC2
-hint.tc.0.at="apb"
-hint.tc.0.maddr="0xfffa0000"
-
-# USB Device
-hint.udp.0.at="apb"
-hint.udp.0.maddr="0xfffa4000"
-
-# MCI
-hint.mci.0.at="apb"
-hint.mci.0.maddr="0xfffa8000"
-
-# TWI
-hint.twi.0.at="apb"
-hint.twi.0.maddr="0xfffac000"
-
-# SSC0
-hint.ssc.0.at="apb"
-hint.ssc.0.maddr="0xfffbc000"
-# SSC1
-hint.ssc.1.at="apb"
-hint.ssc.1.maddr="0xfffc0000"
-# SSC2
-hint.ssc.1.at="apb"
-hint.ssc.1.maddr="0xfffc4000"
-
-# SPI0
-hint.spi.0.at="apb"
-hint.spi.0.maddr="0xfffc8000"
-# SSC1
-hint.spi.1.at="apb"
-hint.spi.1.maddr="0xfffcc000"
-
-# PMC
-hint.pmc.0.at="apb"
-hint.pmc.0.maddr="0xfffffc00"
-
-# USB host (ohci)
-#??? maybe this needs to be on asb instead of apb
-hint.ohci.at="apb"
-hint.ohci.maddr="0x00500000"
-# LCD controller
-hint.atlcd.at="apb"
-hint.atlcd.maddr="0x00600000"
diff --git a/sys/arm/at91/if_ate.c b/sys/arm/at91/if_ate.c
index 3d80435..58062e7 100644
--- a/sys/arm/at91/if_ate.c
+++ b/sys/arm/at91/if_ate.c
@@ -569,8 +569,6 @@ ate_activate(device_t dev)
/*
* DMA tag and map for the TX descriptors.
- * XXX Old EMAC (not EMACB) doesn't really need DMA'able
- * memory. We could just malloc it. gja XXX
*/
if (bus_dma_tag_create(bus_get_dma_tag(dev), sizeof(eth_tx_desc_t),
0, BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL,
@@ -606,11 +604,10 @@ ate_activate(device_t dev)
if (sc->is_emacb) {
/* Write the descriptor queue address. */
WR4(sc, ETHB_TBQP, sc->tx_desc_phys);
- }
- /* EMACB: Enable transceiver input clock */
- if (sc->is_emacb)
+ /* EMACB: Enable transceiver input clock */
WR4(sc, ETHB_UIO, RD4(sc, ETHB_UIO) | ETHB_UIO_CLKE);
+ }
return (0);
@@ -676,7 +673,7 @@ ate_deactivate(struct ate_softc *sc)
}
if (sc->is_emacb)
- WR4(sc, ETHB_UIO, RD4(sc, ETHB_UIO) & ~ETHB_UIO_CLKE);
+ WR4(sc, ETHB_UIO, RD4(sc, ETHB_UIO) & ~ETHB_UIO_CLKE);
}
/*
@@ -849,12 +846,11 @@ ate_intr(void *xsc)
return;
if (status & ETH_ISR_RCOM) {
-
- bus_dmamap_sync(sc->rx_desc_tag, sc->rx_desc_map,
+ bus_dmamap_sync(sc->rx_desc_tag, sc->rx_desc_map,
BUS_DMASYNC_POSTREAD);
- rxdhead = &sc->rx_descs[sc->rxhead];
- while (rxdhead->addr & ETH_CPU_OWNER) {
+ rxdhead = &sc->rx_descs[sc->rxhead];
+ while (rxdhead->addr & ETH_CPU_OWNER) {
if (!sc->is_emacb) {
/*
* Simulate SAM9 FIRST/LAST bits for RM9200.
@@ -933,7 +929,8 @@ ate_intr(void *xsc)
/* XXX Performance robbing copy. Could
* recieve directly to mbufs if not an
- * RM9200. XXX */
+ * RM9200. And even then we could likely
+ * copy just the protocol headers. XXX */
m_append(mb, count, sc->rx_buf[sc->rxhead]);
remain -= count;
}
@@ -1014,6 +1011,9 @@ ate_intr(void *xsc)
BARRIER(sc, ETH_CTL, 4, BUS_SPACE_BARRIER_WRITE);
WR4(sc, ETH_CTL, reg | ETH_CTL_RE);
}
+
+ /* XXX need to work around SAM9260 errata 43.2.4.1:
+ * disable the mac, reset tx buffer, enable mac on TUND */
}
/*
@@ -1269,7 +1269,7 @@ atestop(struct ate_softc *sc)
/* Turn off transeiver input clock */
if (sc->is_emacb)
- WR4(sc, ETHB_UIO, RD4(sc, ETHB_UIO) & ~ETHB_UIO_CLKE);
+ WR4(sc, ETHB_UIO, RD4(sc, ETHB_UIO) & ~ETHB_UIO_CLKE);
/*
* XXX we should power down the EMAC if it isn't in use, after
diff --git a/sys/arm/at91/std.at91sam9g45 b/sys/arm/at91/std.at91sam9g45
new file mode 100644
index 0000000..7e7c1a3
--- /dev/null
+++ b/sys/arm/at91/std.at91sam9g45
@@ -0,0 +1,14 @@
+# $FreeBSD$
+#
+# Unlike other Atmel SoCs, which have their SDRAM at CS1, the
+# at91sam9g45 family has it on CS6, so PHYSADDR must be adjusted
+# accordingly. The at91sam9g45, at91sam9g46, at91sam9m10 and at91sam9m11
+# SoCs are members of this family.
+
+files "../at91/files.at91"
+cpu CPU_ARM9
+makeoptions CONF_CFLAGS=-mcpu=arm9
+options PHYSADDR=0x70000000
+
+# bring in the sam specific timers and such
+device at91sam9
diff --git a/sys/arm/at91/std.atmel b/sys/arm/at91/std.atmel
index c278cf0..e707da5 100644
--- a/sys/arm/at91/std.atmel
+++ b/sys/arm/at91/std.atmel
@@ -9,7 +9,8 @@ options PHYSADDR=0x20000000
device at91rm9200
device at91sam9260
device at91sam9g20
-device at91sam9x25
+device at91sam9g45
+device at91sam9x5
# bring in the sam specific timers and such
device at91sam9
diff --git a/sys/arm/at91/std.sam9260ek b/sys/arm/at91/std.sam9260ek
new file mode 100644
index 0000000..e7d1884
--- /dev/null
+++ b/sys/arm/at91/std.sam9260ek
@@ -0,0 +1,11 @@
+# $FreeBSD$
+include "../at91/std.at91sam9"
+
+options STARTUP_PAGETABLE_ADDR=0x20800000
+makeoptions KERNPHYSADDR=0x20000000
+makeoptions KERNVIRTADDR=0xc0000000
+options KERNPHYSADDR=0x20000000
+options KERNVIRTADDR=0xc0000000
+
+device at91_board_sam9260ek
+device at91sam9260
diff --git a/sys/arm/at91/std.sam9x25ek b/sys/arm/at91/std.sam9x25ek
index 32b1f3b..661213b 100644
--- a/sys/arm/at91/std.sam9x25ek
+++ b/sys/arm/at91/std.sam9x25ek
@@ -8,4 +8,4 @@ options KERNPHYSADDR=0x20000000
options KERNVIRTADDR=0xc0000000
device at91_board_sam9x25ek
-device at91sam9x25
+device at91sam9x5
diff --git a/sys/arm/at91/std.sn9g45 b/sys/arm/at91/std.sn9g45
new file mode 100644
index 0000000..e0d7c98
--- /dev/null
+++ b/sys/arm/at91/std.sn9g45
@@ -0,0 +1,12 @@
+#$FreeBSD$
+include "../at91/std.at91sam9g45"
+
+options STARTUP_PAGETABLE_ADDR=0x70800000
+makeoptions KERNPHYSADDR=0x70008000
+options KERNPHYSADDR=0x70008000
+makeoptions KERNVIRTADDR=0xc0008000
+options KERNVIRTADDR=0xc0008000
+
+device at91sam9g45
+device at91_board_sn9g45
+
diff --git a/sys/arm/at91/uart_bus_at91usart.c b/sys/arm/at91/uart_bus_at91usart.c
index b042537..98cde1d 100644
--- a/sys/arm/at91/uart_bus_at91usart.c
+++ b/sys/arm/at91/uart_bus_at91usart.c
@@ -95,6 +95,12 @@ usart_at91_probe(device_t dev)
case 4:
device_set_desc(dev, "USART3");
break;
+ case 5:
+ device_set_desc(dev, "USART4");
+ break;
+ case 6:
+ device_set_desc(dev, "USART5");
+ break;
}
sc->sc_class = &at91_usart_class;
if (sc->sc_class->uc_rclk == 0)
diff --git a/sys/arm/at91/uart_cpu_at91rm9200usart.c b/sys/arm/at91/uart_cpu_at91usart.c
index cb39bf9..33b5621 100644
--- a/sys/arm/at91/uart_cpu_at91rm9200usart.c
+++ b/sys/arm/at91/uart_cpu_at91usart.c
@@ -43,7 +43,6 @@ __FBSDID("$FreeBSD$");
#include <dev/uart/uart_bus.h>
#include <dev/uart/uart_cpu.h>
-#include <arm/at91/at91rm92reg.h>
#include <arm/at91/at91var.h>
bus_space_tag_t uart_bus_space_io;
@@ -71,9 +70,10 @@ uart_cpu_getdev(int devtype, struct uart_devinfo *di)
di->bas.bst = &at91_bs_tag;
/*
* XXX: Not pretty, but will work because we map the needed addresses
- * early.
+ * early. At least we probed this so that the console will work on
+ * all flavors of Atmel we can detect.
*/
- di->bas.bsh = AT91_BASE + AT91RM92_DBGU_BASE;
+ di->bas.bsh = soc_info.dbgu_base;
di->baudrate = 115200;
di->bas.regshft = 0;
di->bas.rclk = 0;
diff --git a/sys/arm/conf/ATMEL b/sys/arm/conf/ATMEL
index 0c4c9e0..fc23165 100644
--- a/sys/arm/conf/ATMEL
+++ b/sys/arm/conf/ATMEL
@@ -8,7 +8,8 @@ ident ATMEL
include "../at91/std.atmel"
-# Arbitrary values for testing purposes.
+# Typical values for most SoCs and board configurations. Will not work for
+# at91sam9g45 or on some boards with non u-boot boot loaders.
options STARTUP_PAGETABLE_ADDR=0x20800000
makeoptions KERNPHYSADDR=0x20000000
makeoptions KERNVIRTADDR=0xc0000000
@@ -25,8 +26,10 @@ device at91_board_hl200
device at91_board_hl201
device at91_board_kb920x
device at91_board_qila9g20
+device at91_board_sam9260ek
device at91_board_sam9g20ek
device at91_board_sam9x25ek
+device at91_board_sn9g45
device at91_board_tsc4370
#makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols
@@ -155,10 +158,16 @@ options ALT_BREAK_TO_DEBUGGER
# USB support
options USB_DEBUG # enable debug msgs
-device ohci # OHCI PCI->USB interface
+device ohci # OHCI USB interface
device usb # USB Bus (required)
device umass # Disks/Mass storage - Requires scbus and da
+# USB device (gadget) support
+device at91_dci # Atmel's usb device
+device usfs # emulate a flash
+device cdce # emulate an ethernet
+device usb_template # Control of the gadget
+
# watchdog
device at91_wdt # Atmel AT91 Watchdog Timer
diff --git a/sys/arm/conf/ETHERNUT5 b/sys/arm/conf/ETHERNUT5
index 65490b0..ef52bc6 100644
--- a/sys/arm/conf/ETHERNUT5
+++ b/sys/arm/conf/ETHERNUT5
@@ -103,7 +103,7 @@ device bpf # Berkeley packet filter
# Ethernet
device mii # Minimal MII support
-device ate # Atmel AT91 Ethernet friver
+device ate # Atmel AT91 Ethernet driver
# I2C
device at91_twi # Atmel AT91 Two-wire Interface
@@ -150,7 +150,7 @@ options ALT_BREAK_TO_DEBUGGER
# USB support
#options USB_DEBUG # enable debug msgs
-device ohci # OHCI PCI->USB interface
+device ohci # OHCI USB interface
device usb # USB Bus (required)
#device umass # Disks/Mass storage - Requires scbus and da
diff --git a/sys/arm/conf/ETHERNUT5.hints b/sys/arm/conf/ETHERNUT5.hints
index 6ab41a1..19be9ce 100644
--- a/sys/arm/conf/ETHERNUT5.hints
+++ b/sys/arm/conf/ETHERNUT5.hints
@@ -2,7 +2,7 @@
# Atmel AT45DB21D
hint.at45d.0.at="spibus0"
-hint.at45d.0.addr=0x00
+hint.at45d.0.cs=0
# user 132 kbytes
hint.map.0.at="flash/spi0"
hint.map.0.start=0x00000000
diff --git a/sys/arm/conf/HL201 b/sys/arm/conf/HL201
index 1baa357..1a143a5 100644
--- a/sys/arm/conf/HL201
+++ b/sys/arm/conf/HL201
@@ -70,7 +70,7 @@ device random
device loop
device ether
device uart
-device macb
+device ate
device mii
#device lxtphy
diff --git a/sys/arm/conf/KB920X b/sys/arm/conf/KB920X
index d102f5f..8eb4b41 100644
--- a/sys/arm/conf/KB920X
+++ b/sys/arm/conf/KB920X
@@ -138,6 +138,12 @@ device wlan_ccmp # 802.11 CCMP support
device wlan_tkip # 802.11 TKIP support
device wlan_amrr # AMRR transmit rate control algorithm
+# USB device (gadget) support
+device at91_dci # Atmel's usb device
+device usfs # emulate a flash
+device cdce # emulate an ethernet
+device usb_template # Control of the gadget
+
options IEEE80211_SUPPORT_MESH
options AH_SUPPORT_AR5416
diff --git a/sys/arm/conf/QILA9G20 b/sys/arm/conf/QILA9G20
index 5a17594..9dc5032 100644
--- a/sys/arm/conf/QILA9G20
+++ b/sys/arm/conf/QILA9G20
@@ -86,7 +86,6 @@ device uart # Serial Ports
# Ethernet
device ate # Ethernet Driver
-#device macb # Alternate Ethernet driver
device mii
option AT91_ATE_USE_RMII
diff --git a/sys/arm/conf/SAM9260EK b/sys/arm/conf/SAM9260EK
new file mode 100644
index 0000000..08b308d
--- /dev/null
+++ b/sys/arm/conf/SAM9260EK
@@ -0,0 +1,166 @@
+# Kernel configuration for Ethernut 5 boards
+#
+# For more information on this file, please read the config(5) manual page,
+# and/or the handbook section on Kernel Configuration Files:
+#
+# http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-config.html
+#
+# The handbook is also available locally in /usr/share/doc/handbook
+# if you've installed the doc distribution, otherwise always see the
+# FreeBSD World Wide Web server (http://www.FreeBSD.org/) for the
+# latest information.
+#
+# An exhaustive list of options and more detailed explanations of the
+# device lines is also present in the ../../conf/NOTES and NOTES files.
+# If you are in doubt as to the purpose or necessity of a line, check first
+# in NOTES.
+#
+# $FreeBSD$
+
+ident SAM9260EK
+
+include "../at91/std.sam9260ek"
+
+# To statically compile in device wiring instead of /boot/device.hints
+hints "SAM9260EK.hints"
+
+#makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols
+
+options SCHED_4BSD # 4BSD scheduler
+#options PREEMPTION # Enable kernel thread preemption
+options INET # InterNETworking
+#options INET6 # IPv6 communications protocols
+#options SCTP # Stream Control Transmission Protocol
+options FFS # Berkeley Fast Filesystem
+options SOFTUPDATES # Enable FFS soft updates support
+#options UFS_ACL # Support for access control lists
+options UFS_DIRHASH # Improve performance on big directories
+#options UFS_GJOURNAL # Enable gjournal-based UFS journaling
+#options MD_ROOT # MD is a potential root device
+options NFSCL # New Network Filesystem Client
+#options NFSD # New Network Filesystem Server
+options NFSLOCKD # Network Lock Manager
+options NFS_ROOT # NFS usable as /, requires NFSCL
+#options MSDOSFS # MSDOS Filesystem
+#options CD9660 # ISO 9660 Filesystem
+#options PROCFS # Process filesystem (requires PSEUDOFS)
+#options PSEUDOFS # Pseudo-filesystem framework
+#options GEOM_PART_GPT # GUID Partition Tables.
+#options GEOM_LABEL # Provides labelization
+#options COMPAT_FREEBSD5 # Compatible with FreeBSD5
+#options COMPAT_FREEBSD6 # Compatible with FreeBSD6
+#options COMPAT_FREEBSD7 # Compatible with FreeBSD7
+options SCSI_DELAY=5000 # Delay (in ms) before probing SCSI
+options KTRACE # ktrace(1) support
+#options STACK # stack(9) support
+options SYSVSHM # SYSV-style shared memory
+options SYSVMSG # SYSV-style message queues
+options SYSVSEM # SYSV-style semaphores
+options _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions
+options PRINTF_BUFR_SIZE=128 # Prevent printf output being interspersed.
+#options HWPMC_HOOKS # Necessary kernel hooks for hwpmc(4)
+#options AUDIT # Security event auditing
+#options CAPABILITY_MODE # Capsicum capability mode
+#options CAPABILITIES # Capsicum capabilities
+#options MAC # TrustedBSD MAC Framework
+#options INCLUDE_CONFIG_FILE # Include this file in kernel
+
+# required for netbooting
+#options BOOTP
+#options BOOTP_COMPAT
+#options BOOTP_NFSROOT
+#options BOOTP_NFSV3
+#options BOOTP_WIRED_TO=ate0
+
+# alternatively, boot from a MMC/SD memory card
+#options ROOTDEVNAME=\"ufs:/dev/mmcsd0s1a\"
+
+# Alternatively, boot from a USB card.
+options ROOTDEVNAME=\"ufs:/dev/da0s1a\"
+
+# kernel/memory size reduction
+options MUTEX_NOINLINE
+options NO_FFS_SNAPSHOT
+options NO_SWAPPING
+options NO_SYSCTL_DESCR
+options RWLOCK_NOINLINE
+
+# Debugging support. Always need this:
+#options KDB # Enable kernel debugger support.
+# For minimum debugger support (stable branch) use:
+#options KDB_TRACE # Print a stack trace for a panic.
+# For full debugger support use this instead:
+#options DDB # Support DDB.
+#options GDB # Support remote GDB.
+#options DEADLKRES # Enable the deadlock resolver
+#options INVARIANTS # Enable calls of extra sanity checking
+#options INVARIANT_SUPPORT # Extra sanity checks of internal structures, required by INVARIANTS
+#options WITNESS # Enable checks to detect deadlocks and cycles
+#options WITNESS_SKIPSPIN # Don't run witness on spinlocks for speed
+#options MALLOC_DEBUG_MAXZONES=8 # Separate malloc(9) zones
+
+# The `bpf' device enables the Berkeley Packet Filter.
+# Be aware of the administrative consequences of enabling this!
+# Note that 'bpf' is required for DHCP.
+device bpf # Berkeley packet filter
+
+# Ethernet
+device mii # Minimal MII support
+device ate # Atmel AT91 Ethernet driver
+
+# I2C
+device at91_twi # Atmel AT91 Two-wire Interface
+device iic # I2C generic I/O device driver
+device iicbus # I2C bus system
+device icee # I2C eeprom
+
+# MMC/SD
+# See comment for DataFlash below
+device at91_mci # Atmel AT91 Multimedia Card Interface
+options AT91_MCI_HAS_4WIRE # 4 wires
+options AT91_MCI_SLOT_B # Wired to slot B
+device mmc # MMC/SD bus
+device mmcsd # MMC/SD memory card
+
+# DataFlash
+# The DataFlash and MMC card are wired together, so we must pick one or the
+# other. This is due to pin mux, and also due to the design of the
+# SAM9260EK board. SLOT A wouldn't have this issue.
+#device at91_spi # Atmel AT91 Serial Peripheral Interface
+#device spibus # SPI bus
+#device at45d # Atmel AT45D
+#device geom_map # GEOM partition mapping
+
+# Pseudo devices.
+device loop # Network loopback
+device random # Entropy device
+device ether # Ethernet support
+#device vlan # 802.1Q VLAN support
+#device tun # Packet tunnel.
+#device md # Memory "disks"
+#device gif # IPv6 and IPv4 tunneling
+#device faith # IPv6-to-IPv4 relaying (translation)
+#device firmware # firmware assist module
+
+# SCSI peripherals
+device scbus # SCSI bus (required for ATA/SCSI)
+#device ch # SCSI media changers
+device da # Direct Access (disks)
+#device sa # Sequential Access (tape etc)
+device cd # CD/DVD
+device pass # Passthrough device (direct ATA/SCSI access)
+device ses # Enclosure Services (SES and SAF-TE)
+#device ctl # CAM Target Layer
+
+# Serial (COM) ports
+device uart # Multi-uart driver
+options ALT_BREAK_TO_DEBUGGER
+
+# USB support
+#options USB_DEBUG # enable debug msgs
+device ohci # OHCI USB interface
+device usb # USB Bus (required)
+device umass # Disks/Mass storage - Requires scbus and da
+
+# watchdog
+device at91_wdt # Atmel AT91 Watchdog Timer
diff --git a/sys/arm/conf/SAM9260EK.hints b/sys/arm/conf/SAM9260EK.hints
new file mode 100644
index 0000000..9bc2d01
--- /dev/null
+++ b/sys/arm/conf/SAM9260EK.hints
@@ -0,0 +1,48 @@
+# $FreeBSD$
+
+# Atmel AT45DB21D
+hint.at45d.0.at="spibus0"
+hint.at45d.0.cs=1
+# Area 0: 00000000 to 000041FF (RO) Bootstrap
+# Area 1: 00004200 to 000083FF Environment
+# Area 2: 00008400 to 00041FFF (RO) U-Boot
+# Area 3: 00042000 to 00251FFF Kernel
+# Area 4: 00252000 to 0083FFFF FS
+# bootstrap
+hint.map.0.at="flash/spi0"
+hint.map.0.start=0x00000000
+hint.map.0.end=0x000041ff
+hint.map.0.name="bootstrap"
+hint.map.0.readonly=1
+# uboot environment
+hint.map.1.at="flash/spi0"
+hint.map.1.start=0x00004200
+hint.map.1.end=0x00083ff
+hint.map.1.name="uboot-env"
+#hint.map.1.readonly=1
+# uboot
+hint.map.2.at="flash/spi0"
+hint.map.2.start=0x00008400
+hint.map.2.end=0x00041fff
+hint.map.2.name="uboot"
+hint.map.2.readonly=1
+# kernel
+hint.map.3.at="flash/spi0"
+hint.map.3.start=0x00042000
+hint.map.3.end=0x00251fff
+hint.map.3.name="fs"
+#hint.map.3.readonly=1
+# fs
+hint.map.4.at="flash/spi0"
+hint.map.4.start=0x00252000
+hint.map.4.end=0x0083ffff
+hint.map.4.name="fs"
+#hint.map.4.readonly=1
+
+# EEPROM at24c512 - 512kbit 65,536x8 memory
+hint.icee.0.at="iicbus0"
+hint.icee.0.addr=0xa0
+hint.icee.0.type=16
+hint.icee.0.size=65536
+hint.icee.0.rd_sz=128
+hint.icee.0.wr_sz=128
diff --git a/sys/arm/conf/SAM9G20EK b/sys/arm/conf/SAM9G20EK
index 5740695..2192fda 100644
--- a/sys/arm/conf/SAM9G20EK
+++ b/sys/arm/conf/SAM9G20EK
@@ -85,7 +85,6 @@ device uart # Serial Ports
# Ethernet
device ate # Ethernet Driver
-#device macb # Alternate Ethernet driver
device mii
option AT91_ATE_USE_RMII
diff --git a/sys/arm/conf/SAM9X25EK b/sys/arm/conf/SAM9X25EK
index 3b5b2d7..0ae2b76 100644
--- a/sys/arm/conf/SAM9X25EK
+++ b/sys/arm/conf/SAM9X25EK
@@ -86,8 +86,7 @@ device md
device uart # Serial Ports
# Ethernet
-#device ate # Ethernet Driver
-device macb # Alternate Ethernet driver
+device ate # Ethernet Driver
device mii
option AT91_ATE_USE_RMII
diff --git a/sys/arm/conf/SN9G45 b/sys/arm/conf/SN9G45
new file mode 100644
index 0000000..ee0b5d9
--- /dev/null
+++ b/sys/arm/conf/SN9G45
@@ -0,0 +1,129 @@
+# Kernel configuration for DesignA Electronics Snapper9G45 System on Module
+#
+# For more information on this file, please read the handbook section on
+# Kernel Configuration Files:
+#
+# http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-config.html
+#
+# The handbook is also available locally in /usr/share/doc/handbook
+# if you've installed the doc distribution, otherwise always see the
+# FreeBSD World Wide Web server (http://www.FreeBSD.org/) for the
+# latest information.
+#
+# An exhaustive list of options and more detailed explanations of the
+# device lines is also present in the ../../conf/NOTES and NOTES files.
+# If you are in doubt as to the purpose or necessity of a line, check first
+# in NOTES.
+#
+# $FreeBSD$
+
+ident SN9G45
+
+include "../at91/std.sn9g45"
+
+#To statically compile in device wiring instead of /boot/device.hints
+#hints "SN9G45.hints"
+makeoptions MODULES_OVERRIDE=""
+
+makeoptions DEBUG=-g #Build kernel with gdb(1) debug symbols
+options DDB
+options KDB
+
+options SCHED_4BSD #4BSD scheduler
+options INET #InterNETworking
+#options INET6 #IPv6 communications protocols
+options FFS #Berkeley Fast Filesystem
+#options SOFTUPDATES #Enable FFS soft updates support
+#options UFS_ACL #Support for access control lists
+#options UFS_DIRHASH #Improve performance on big directories
+#options MD_ROOT #MD is a potential root device
+#options MD_ROOT_SIZE=4096 # 3MB ram disk
+options NFSCL #New Network Filesystem Client
+#options NFSD #New Network Filesystem Server
+#options NFSLOCKD #Network Lock Manager
+#options NFS_ROOT #NFS usable as /, requires NFSCL
+#options BOOTP_NFSROOT
+#options BOOTP
+#options BOOTP_NFSV3
+#options BOOTP_WIRED_TO=ate0
+#options BOOTP_COMPAT
+
+options ROOTDEVNAME=\"ufs:/dev/da0s1\"
+
+options ALT_BREAK_TO_DEBUGGER
+
+#options MSDOSFS #MSDOS Filesystem
+#options CD9660 #ISO 9660 Filesystem
+#options PROCFS #Process filesystem (requires PSEUDOFS)
+#options PSEUDOFS #Pseudo-filesystem framework
+options SCSI_DELAY=1000 #Delay (in ms) before probing SCSI
+#options KTRACE #ktrace(1) support
+options SYSVSHM #SYSV-style shared memory
+options SYSVMSG #SYSV-style message queues
+options SYSVSEM #SYSV-style semaphores
+options _KPOSIX_PRIORITY_SCHEDULING #Posix P1003_1B real-time extensions
+#options SYSCTL_OMIT_DESCR
+options MUTEX_NOINLINE
+options RWLOCK_NOINLINE
+options NO_FFS_SNAPSHOT
+options NO_SWAPPING
+
+# Debugging for use in -current
+#options INVARIANTS #Enable calls of extra sanity checking
+#options INVARIANT_SUPPORT #Extra sanity checks of internal structures, required by INVARIANTS
+#options WITNESS #Enable checks to detect deadlocks and cycles
+#options WITNESS_SKIPSPIN #Don't run witness on spinlocks for speed
+#options DIAGNOSTIC
+
+device random
+device loop
+device bpf
+device ether
+device md
+
+device uart # Serial Ports
+
+# Ethernet
+device ate # Ethernet Driver
+device mii
+option AT91_ATE_USE_RMII
+
+device at91_wdt # WDT: Watchdog timer
+
+# SCSI peripherals
+device scbus # SCSI bus (required for SCSI)
+device da # Direct Access (disks)
+device cd # CD
+device pass # Passthrough device (direct SCSI access)
+
+# USB support
+device ohci # OHCI localbus->USB interface
+device usb # USB Bus (required)
+device umass # Disks/Mass storage - Requires scbus and da
+device uhid # "Human Interface Devices"
+#device ulpt # Printer
+#device udbp # USB Double Bulk Pipe devices
+
+# USB Ethernet, requires miibus
+device miibus
+#device aue # ADMtek USB Ethernet
+#device axe # ASIX Electronics USB Ethernet
+#device cdce # Generic USB over Ethernet
+#device cue # CATC USB Ethernet
+#device kue # Kawasaki LSI USB Ethernet
+#device rue # RealTek RTL8150 USB Ethernet
+device udav # Davicom DM9601E USB
+
+# USB Wireless
+#device rum # Ralink Technology RT2501USB wireless NICs
+#device uath # Atheros AR5523 wireless NICs
+#device ural # Ralink Technology RT2500USB wireless NICs
+#device zyd # ZyDAS zd1211/zd1211b wireless NICs
+
+# Wireless NIC cards
+#device wlan # 802.11 support
+#device wlan_wep # 802.11 WEP support
+#device wlan_ccmp # 802.11 CCMP support
+#device wlan_tkip # 802.11 TKIP support
+#device wlan_amrr # AMRR transmit rate control algorithm
+
diff --git a/sys/arm/econa/econa.c b/sys/arm/econa/econa.c
index f96dfc3..9f29a7f 100644
--- a/sys/arm/econa/econa.c
+++ b/sys/arm/econa/econa.c
@@ -602,8 +602,6 @@ econa_setup_intr(device_t dev, device_t child,
if (error)
return (error);
- arm_unmask_irq(rman_get_start(ires));
-
return (0);
}
diff --git a/sys/arm/mv/common.c b/sys/arm/mv/common.c
index 06104f1..b451bf4 100644
--- a/sys/arm/mv/common.c
+++ b/sys/arm/mv/common.c
@@ -251,7 +251,9 @@ cpu_extra_feat(void)
uint32_t ef = 0;
soc_id(&dev, &rev);
- if (dev == MV_DEV_88F6281 || dev == MV_DEV_MV78100_Z0 ||
+ if (dev == MV_DEV_88F6281 ||
+ dev == MV_DEV_88F6282 ||
+ dev == MV_DEV_MV78100_Z0 ||
dev == MV_DEV_MV78100)
__asm __volatile("mrc p15, 1, %0, c15, c1, 0" : "=r" (ef));
else if (dev == MV_DEV_88F5182 || dev == MV_DEV_88F5281)
@@ -351,6 +353,13 @@ soc_identify(void)
else if (r == 3)
rev = "A1";
break;
+ case MV_DEV_88F6282:
+ dev = "Marvell 88F6282";
+ if (r == 0)
+ rev = "A0";
+ else if (r == 1)
+ rev = "A1";
+ break;
case MV_DEV_MV78100_Z0:
dev = "Marvell MV78100 Z0";
break;
@@ -536,6 +545,7 @@ win_cpu_can_remap(int i)
if ((dev == MV_DEV_88F5182 && i < 2) ||
(dev == MV_DEV_88F5281 && i < 4) ||
(dev == MV_DEV_88F6281 && i < 4) ||
+ (dev == MV_DEV_88F6282 && i < 4) ||
(dev == MV_DEV_MV78100 && i < 8) ||
(dev == MV_DEV_MV78100_Z0 && i < 8))
return (1);
@@ -1320,7 +1330,8 @@ xor_max_eng(void)
uint32_t dev, rev;
soc_id(&dev, &rev);
- if (dev == MV_DEV_88F6281)
+ if (dev == MV_DEV_88F6281 ||
+ dev == MV_DEV_88F6282)
return (2);
else if ((dev == MV_DEV_MV78100) || (dev == MV_DEV_MV78100_Z0))
return (1);
diff --git a/sys/arm/mv/gpio.c b/sys/arm/mv/gpio.c
index ffcab14..7e4ae53 100644
--- a/sys/arm/mv/gpio.c
+++ b/sys/arm/mv/gpio.c
@@ -155,7 +155,8 @@ mv_gpio_attach(device_t dev)
sc->pin_num = 32;
sc->irq_num = 4;
- } else if (dev_id == MV_DEV_88F6281) {
+ } else if (dev_id == MV_DEV_88F6281 ||
+ dev_id == MV_DEV_88F6282) {
sc->pin_num = 50;
sc->irq_num = 7;
diff --git a/sys/arm/mv/ic.c b/sys/arm/mv/ic.c
index 14c6b7b..96159a7 100644
--- a/sys/arm/mv/ic.c
+++ b/sys/arm/mv/ic.c
@@ -105,7 +105,9 @@ mv_ic_attach(device_t dev)
sc->ic_high_regs = 0;
sc->ic_error_regs = 0;
- if (dev_id == MV_DEV_88F6281 || dev_id == MV_DEV_MV78100 ||
+ if (dev_id == MV_DEV_88F6281 ||
+ dev_id == MV_DEV_88F6282 ||
+ dev_id == MV_DEV_MV78100 ||
dev_id == MV_DEV_MV78100_Z0)
sc->ic_high_regs = 1;
diff --git a/sys/arm/mv/kirkwood/kirkwood.c b/sys/arm/mv/kirkwood/kirkwood.c
index 7b0d88a..e6fd442 100644
--- a/sys/arm/mv/kirkwood/kirkwood.c
+++ b/sys/arm/mv/kirkwood/kirkwood.c
@@ -74,6 +74,8 @@ get_tclk(void)
soc_id(&dev, &rev);
if (dev == MV_DEV_88F6281 && (rev == 2 || rev == 3))
return (TCLK_200MHZ);
+ if (dev == MV_DEV_88F6282)
+ return (TCLK_200MHZ);
return (TCLK_166MHZ);
}
diff --git a/sys/arm/mv/mv_sata.c b/sys/arm/mv/mv_sata.c
index 277c837..28c641f 100644
--- a/sys/arm/mv/mv_sata.c
+++ b/sys/arm/mv/mv_sata.c
@@ -197,6 +197,7 @@ sata_probe(device_t dev)
sc->sc_edma_qlen = 128;
break;
case MV_DEV_88F6281:
+ case MV_DEV_88F6282:
case MV_DEV_MV78100:
case MV_DEV_MV78100_Z0:
sc->sc_version = 2;
diff --git a/sys/arm/mv/mvreg.h b/sys/arm/mv/mvreg.h
index 87c93e5..398fa15 100644
--- a/sys/arm/mv/mvreg.h
+++ b/sys/arm/mv/mvreg.h
@@ -326,6 +326,7 @@
#define MV_DEV_88F5182 0x5182
#define MV_DEV_88F5281 0x5281
#define MV_DEV_88F6281 0x6281
+#define MV_DEV_88F6282 0x6282
#define MV_DEV_MV78100_Z0 0x6381
#define MV_DEV_MV78100 0x7810
diff --git a/sys/arm/s3c2xx0/s3c24x0.c b/sys/arm/s3c2xx0/s3c24x0.c
index cddd435..f90c15d 100644
--- a/sys/arm/s3c2xx0/s3c24x0.c
+++ b/sys/arm/s3c2xx0/s3c24x0.c
@@ -220,7 +220,6 @@ s3c24x0_setup_intr(device_t dev, device_t child,
/* Enable the external interrupt pin */
s3c24x0_enable_ext_intr(irq - S3C24X0_EXTIRQ_MIN);
}
- arm_unmask_irq(irq);
}
return (0);
}
diff --git a/sys/arm/xscale/i8134x/i81342.c b/sys/arm/xscale/i8134x/i81342.c
index 2bfab78..bb3795c 100644
--- a/sys/arm/xscale/i8134x/i81342.c
+++ b/sys/arm/xscale/i8134x/i81342.c
@@ -435,7 +435,6 @@ i81342_setup_intr(device_t dev, device_t child, struct resource *ires,
filt, intr, arg, cookiep);
if (error)
return (error);
- arm_unmask_irq(rman_get_start(ires));
return (0);
}
diff --git a/sys/arm/xscale/pxa/pxa_obio.c b/sys/arm/xscale/pxa/pxa_obio.c
index 0f7e4a6..5cbb9c3 100644
--- a/sys/arm/xscale/pxa/pxa_obio.c
+++ b/sys/arm/xscale/pxa/pxa_obio.c
@@ -181,7 +181,6 @@ pxa_setup_intr(device_t dev, device_t child, struct resource *irq, int flags,
filter, ithread, arg, cookiep);
if (error)
return (error);
- arm_unmask_irq(rman_get_start(irq));
return (0);
}
diff --git a/sys/boot/arm/at91/bootspi/ee.c b/sys/boot/arm/at91/bootspi/ee.c
index 62a02d9..ef05719 100644
--- a/sys/boot/arm/at91/bootspi/ee.c
+++ b/sys/boot/arm/at91/bootspi/ee.c
@@ -59,11 +59,11 @@ EEInit(void)
AT91PS_PIO pPio = (AT91PS_PIO)AT91C_BASE_PIOA;
AT91PS_PMC pPMC = (AT91PS_PMC)AT91C_BASE_PMC;
- pPio->PIO_ASR = AT91C_PA25_TWD | AT91C_PA26_TWCK;
- pPio->PIO_PDR = AT91C_PA25_TWD | AT91C_PA26_TWCK;
+ pPio->PIO_ASR = AT91C_PIO_PA25 | AT91C_PIO_PA26;
+ pPio->PIO_PDR = AT91C_PIO_PA25 | AT91C_PIO_PA26;
- pPio->PIO_MDDR = ~AT91C_PA25_TWD;
- pPio->PIO_MDER = AT91C_PA25_TWD;
+ pPio->PIO_MDDR = ~AT91C_PIO_PA25;
+ pPio->PIO_MDER = AT91C_PIO_PA25;
pPMC->PMC_PCER = 1u << AT91C_ID_TWI;
diff --git a/sys/boot/arm/at91/libat91/at91rm9200.h b/sys/boot/arm/at91/libat91/at91rm9200.h
index db76708..80d44c8 100644
--- a/sys/boot/arm/at91/libat91/at91rm9200.h
+++ b/sys/boot/arm/at91/libat91/at91rm9200.h
@@ -2311,7 +2311,7 @@ typedef struct _AT91S_BFC {
// ========== Register definition for BFC peripheral ==========
#define AT91C_BFC_MR ((AT91_REG *) 0xFFFFFFC0) // (BFC) BFC Mode Register
-#include <at91/at91_pio_rm9200.h>
+#include <at91/at91_pioreg.h>
// *****************************************************************************
// PERIPHERAL ID DEFINITIONS FOR AT91RM9200
diff --git a/sys/boot/arm/at91/libat91/at91rm9200_lowlevel.c b/sys/boot/arm/at91/libat91/at91rm9200_lowlevel.c
index fb9d9c6..1d54cfd 100644
--- a/sys/boot/arm/at91/libat91/at91rm9200_lowlevel.c
+++ b/sys/boot/arm/at91/libat91/at91rm9200_lowlevel.c
@@ -188,8 +188,8 @@ _init(void)
AT91C_BASE_PIOC->PIO_PDR = 0xffff0000;
#endif
// Configure DBGU -use local routine optimized for space
- AT91C_BASE_PIOA->PIO_ASR = AT91C_PA31_DTXD | AT91C_PA30_DRXD;
- AT91C_BASE_PIOA->PIO_PDR = AT91C_PA31_DTXD | AT91C_PA30_DRXD;
+ AT91C_BASE_PIOA->PIO_ASR = AT91C_PIO_PA31 | AT91C_PIO_PA30;
+ AT91C_BASE_PIOA->PIO_PDR = AT91C_PIO_PA31 | AT91C_PIO_PA30;
pUSART->US_IDR = (unsigned int) -1;
pUSART->US_CR =
AT91C_US_RSTRX | AT91C_US_RSTTX | AT91C_US_RXDIS | AT91C_US_TXDIS;
diff --git a/sys/boot/arm/at91/libat91/eeprom.c b/sys/boot/arm/at91/libat91/eeprom.c
index f5fc52b..e08996b 100644
--- a/sys/boot/arm/at91/libat91/eeprom.c
+++ b/sys/boot/arm/at91/libat91/eeprom.c
@@ -58,11 +58,11 @@ InitEEPROM(void)
AT91PS_PIO pPio = (AT91PS_PIO)AT91C_BASE_PIOA;
AT91PS_PMC pPMC = (AT91PS_PMC)AT91C_BASE_PMC;
- pPio->PIO_ASR = AT91C_PA25_TWD | AT91C_PA26_TWCK;
- pPio->PIO_PDR = AT91C_PA25_TWD | AT91C_PA26_TWCK;
+ pPio->PIO_ASR = AT91C_PIO_PA25 | AT91C_PIO_PA26;
+ pPio->PIO_PDR = AT91C_PIO_PA25 | AT91C_PIO_PA26;
- pPio->PIO_MDDR = ~AT91C_PA25_TWD;
- pPio->PIO_MDER = AT91C_PA25_TWD;
+ pPio->PIO_MDDR = ~AT91C_PIO_PA25;
+ pPio->PIO_MDER = AT91C_PIO_PA25;
pPMC->PMC_PCER = 1u << AT91C_ID_TWI;
diff --git a/sys/boot/arm/at91/libat91/emac_init.c b/sys/boot/arm/at91/libat91/emac_init.c
index 3024622..a3869b6 100644
--- a/sys/boot/arm/at91/libat91/emac_init.c
+++ b/sys/boot/arm/at91/libat91/emac_init.c
@@ -85,24 +85,24 @@ EMAC_SetMACAddress(unsigned char mac[6])
AT91C_BASE_PMC->PMC_PCER = 1u << AT91C_ID_EMAC;
AT91C_BASE_PIOA->PIO_ASR =
- AT91C_PA14_ERXER | AT91C_PA12_ERX0 | AT91C_PA13_ERX1 |
- AT91C_PA8_ETXEN | AT91C_PA16_EMDIO | AT91C_PA9_ETX0 |
- AT91C_PA10_ETX1 | AT91C_PA11_ECRS_ECRSDV | AT91C_PA15_EMDC |
- AT91C_PA7_ETXCK_EREFCK;
+ AT91C_PIO_PA14 | AT91C_PIO_PA12 | AT91C_PIO_PA13 |
+ AT91C_PIO_PA8 | AT91C_PIO_PA16 | AT91C_PIO_PA9 |
+ AT91C_PIO_PA10 | AT91C_PIO_PA11 | AT91C_PIO_PA15 |
+ AT91C_PIO_PA7;
AT91C_BASE_PIOA->PIO_PDR =
- AT91C_PA14_ERXER | AT91C_PA12_ERX0 | AT91C_PA13_ERX1 |
- AT91C_PA8_ETXEN | AT91C_PA16_EMDIO | AT91C_PA9_ETX0 |
- AT91C_PA10_ETX1 | AT91C_PA11_ECRS_ECRSDV | AT91C_PA15_EMDC |
- AT91C_PA7_ETXCK_EREFCK;
+ AT91C_PIO_PA14 | AT91C_PIO_PA12 | AT91C_PIO_PA13 |
+ AT91C_PIO_PA8 | AT91C_PIO_PA16 | AT91C_PIO_PA9 |
+ AT91C_PIO_PA10 | AT91C_PIO_PA11 | AT91C_PIO_PA15 |
+ AT91C_PIO_PA7;
#if defined(BOOT_KB920X) | defined(BOOT_BWCT) /* Really !RMII */
AT91C_BASE_PIOB->PIO_BSR =
- AT91C_PB12_ETX2 | AT91C_PB13_ETX3 | AT91C_PB14_ETXER |
- AT91C_PB15_ERX2 | AT91C_PB16_ERX3 | AT91C_PB17_ERXDV |
- AT91C_PB18_ECOL | AT91C_PB19_ERXCK;
+ AT91C_PIO_PB12 | AT91C_PIO_PB13 | AT91C_PIO_PB14 |
+ AT91C_PIO_PB15 | AT91C_PIO_PB16 | AT91C_PIO_PB17 |
+ AT91C_PIO_PB18 | AT91C_PIO_PB19;
AT91C_BASE_PIOB->PIO_PDR =
- AT91C_PB12_ETX2 | AT91C_PB13_ETX3 | AT91C_PB14_ETXER |
- AT91C_PB15_ERX2 | AT91C_PB16_ERX3 | AT91C_PB17_ERXDV |
- AT91C_PB18_ECOL | AT91C_PB19_ERXCK;
+ AT91C_PIO_PB12 | AT91C_PIO_PB13 | AT91C_PIO_PB14 |
+ AT91C_PIO_PB15 | AT91C_PIO_PB16 | AT91C_PIO_PB17 |
+ AT91C_PIO_PB18 | AT91C_PIO_PB19;
#endif
pEmac->EMAC_CTL = 0;
diff --git a/sys/boot/arm/at91/libat91/lib_AT91RM9200.h b/sys/boot/arm/at91/libat91/lib_AT91RM9200.h
index d5a5b67..c87512f 100644
--- a/sys/boot/arm/at91/libat91/lib_AT91RM9200.h
+++ b/sys/boot/arm/at91/libat91/lib_AT91RM9200.h
@@ -134,17 +134,17 @@ AT91F_MCI_CfgPIO(void)
// Configure PIO controllers to periph mode
AT91F_PIO_CfgPeriph(
AT91C_BASE_PIOA, // PIO controller base address
- ((unsigned int) AT91C_PA28_MCCDA ) |
- ((unsigned int) AT91C_PA29_MCDA0 ) |
- ((unsigned int) AT91C_PA27_MCCK ), // Peripheral A
+ ((unsigned int) AT91C_PIO_PA28 ) |
+ ((unsigned int) AT91C_PIO_PA29 ) |
+ ((unsigned int) AT91C_PIO_PA27 ), // Peripheral A
0); // Peripheral B
// Configure PIO controllers to periph mode
AT91F_PIO_CfgPeriph(
AT91C_BASE_PIOB, // PIO controller base address
0, // Peripheral A
- ((unsigned int) AT91C_PB5_MCDA3 ) |
- ((unsigned int) AT91C_PB3_MCDA1 ) |
- ((unsigned int) AT91C_PB4_MCDA2 )); // Peripheral B
+ ((unsigned int) AT91C_PIO_PB5 ) |
+ ((unsigned int) AT91C_PIO_PB3 ) |
+ ((unsigned int) AT91C_PIO_PB4 )); // Peripheral B
}
diff --git a/sys/boot/arm/at91/libat91/spi_flash.c b/sys/boot/arm/at91/libat91/spi_flash.c
index 591b9eb..388e64e 100644
--- a/sys/boot/arm/at91/libat91/spi_flash.c
+++ b/sys/boot/arm/at91/libat91/spi_flash.c
@@ -223,10 +223,10 @@ SPI_InitFlash(void)
// enable CS0, CLK, MOSI, MISO
pPio = (AT91PS_PIO)AT91C_BASE_PIOA;
- pPio->PIO_ASR = AT91C_PA3_NPCS0 | AT91C_PA1_MOSI | AT91C_PA0_MISO |
- AT91C_PA2_SPCK;
- pPio->PIO_PDR = AT91C_PA3_NPCS0 | AT91C_PA1_MOSI | AT91C_PA0_MISO |
- AT91C_PA2_SPCK;
+ pPio->PIO_ASR = AT91C_PIO_PA3 | AT91C_PIO_PA1 | AT91C_PIO_PA0 |
+ AT91C_PIO_PA2;
+ pPio->PIO_PDR = AT91C_PIO_PA3 | AT91C_PIO_PA1 | AT91C_PIO_PA0 |
+ AT91C_PIO_PA2;
// enable clocks to SPI
AT91C_BASE_PMC->PMC_PCER = 1u << AT91C_ID_SPI;
diff --git a/sys/boot/ficl/Makefile b/sys/boot/ficl/Makefile
index e441573..1f8de9b 100644
--- a/sys/boot/ficl/Makefile
+++ b/sys/boot/ficl/Makefile
@@ -54,9 +54,11 @@ softcore.c: ${SOFTWORDS} softcore.awk
| awk -f softcore.awk -v datestamp="`LC_ALL=C date`") > ${.TARGET}
.if ${MACHINE_CPUARCH} == "amd64"
+.if !exists(machine)
${SRCS:M*.c:R:S/$/.o/g}: machine
beforedepend ${OBJS}: machine
+.endif
machine:
ln -sf ${.CURDIR}/../../i386/include machine
diff --git a/sys/boot/forth/beastie.4th b/sys/boot/forth/beastie.4th
index fa455ce..5c1ca81 100644
--- a/sys/boot/forth/beastie.4th
+++ b/sys/boot/forth/beastie.4th
@@ -1,6 +1,6 @@
\ Copyright (c) 2003 Scott Long <scottl@freebsd.org>
\ Copyright (c) 2003 Aleksander Fafula <alex@fafula.com>
-\ Copyright (c) 2006-2011 Devin Teske <dteske@freebsd.org>
+\ Copyright (c) 2006-2011 Devin Teske <dteske@FreeBSD.org>
\ All rights reserved.
\
\ Redistribution and use in source and binary forms, with or without
diff --git a/sys/boot/forth/beastie.4th.8 b/sys/boot/forth/beastie.4th.8
index 814867d..679a082 100644
--- a/sys/boot/forth/beastie.4th.8
+++ b/sys/boot/forth/beastie.4th.8
@@ -168,4 +168,4 @@ set of commands was written by
.An Scott Long Aq scottl@FreeBSD.org ,
.An Aleksander Fafula Aq alex@fafula.com
and
-.An Devin Teske Aq dteske@freebsd.org .
+.An Devin Teske Aq dteske@FreeBSD.org .
diff --git a/sys/boot/forth/brand.4th b/sys/boot/forth/brand.4th
index 367ab93..b6f22c8 100644
--- a/sys/boot/forth/brand.4th
+++ b/sys/boot/forth/brand.4th
@@ -1,4 +1,4 @@
-\ Copyright (c) 2006-2011 Devin Teske <dteske@freebsd.org>
+\ Copyright (c) 2006-2011 Devin Teske <dteske@FreeBSD.org>
\ All rights reserved.
\
\ Redistribution and use in source and binary forms, with or without
diff --git a/sys/boot/forth/brand.4th.8 b/sys/boot/forth/brand.4th.8
index 10e8c55..64e6854 100644
--- a/sys/boot/forth/brand.4th.8
+++ b/sys/boot/forth/brand.4th.8
@@ -122,4 +122,4 @@ The
.Nm
set of commands was written by
.An -nosplit
-.An Devin Teske Aq dteske@freebsd.org .
+.An Devin Teske Aq dteske@FreeBSD.org .
diff --git a/sys/boot/forth/check-password.4th b/sys/boot/forth/check-password.4th
index 005edf1..4728fc2 100644
--- a/sys/boot/forth/check-password.4th
+++ b/sys/boot/forth/check-password.4th
@@ -1,4 +1,4 @@
-\ Copyright (c) 2006-2011 Devin Teske <dteske@freebsd.org>
+\ Copyright (c) 2006-2011 Devin Teske <dteske@FreeBSD.org>
\ All rights reserved.
\
\ Redistribution and use in source and binary forms, with or without
diff --git a/sys/boot/forth/check-password.4th.8 b/sys/boot/forth/check-password.4th.8
index 1b1d42e..b9c7b66 100644
--- a/sys/boot/forth/check-password.4th.8
+++ b/sys/boot/forth/check-password.4th.8
@@ -120,4 +120,4 @@ The
.Nm
set of commands was written by
.An -nosplit
-.An Devin Teske Aq dteske@freebsd.org .
+.An Devin Teske Aq dteske@FreeBSD.org .
diff --git a/sys/boot/forth/color.4th b/sys/boot/forth/color.4th
index d16e1b3..8d7c1ec 100644
--- a/sys/boot/forth/color.4th
+++ b/sys/boot/forth/color.4th
@@ -1,4 +1,4 @@
-\ Copyright (c) 2011 Devin Teske <dteske@freebsd.org>
+\ Copyright (c) 2011 Devin Teske <dteske@FreeBSD.org>
\ All rights reserved.
\
\ Redistribution and use in source and binary forms, with or without
diff --git a/sys/boot/forth/color.4th.8 b/sys/boot/forth/color.4th.8
index 6c24989..d0233ed 100644
--- a/sys/boot/forth/color.4th.8
+++ b/sys/boot/forth/color.4th.8
@@ -114,4 +114,4 @@ The
.Nm
set of commands was written by
.An -nosplit
-.An Devin Teske Aq dteske@freebsd.org .
+.An Devin Teske Aq dteske@FreeBSD.org .
diff --git a/sys/boot/forth/delay.4th b/sys/boot/forth/delay.4th
index 69b8781..0d5ecbc 100644
--- a/sys/boot/forth/delay.4th
+++ b/sys/boot/forth/delay.4th
@@ -1,4 +1,4 @@
-\ Copyright (c) 2008-2011 Devin Teske <dteske@freebsd.org>
+\ Copyright (c) 2008-2011 Devin Teske <dteske@FreeBSD.org>
\ All rights reserved.
\
\ Redistribution and use in source and binary forms, with or without
diff --git a/sys/boot/forth/delay.4th.8 b/sys/boot/forth/delay.4th.8
index 1e4e71d..dd1680e 100644
--- a/sys/boot/forth/delay.4th.8
+++ b/sys/boot/forth/delay.4th.8
@@ -123,4 +123,4 @@ The
.Nm
set of commands was written by
.An -nosplit
-.An Devin Teske Aq dteske@freebsd.org .
+.An Devin Teske Aq dteske@FreeBSD.org .
diff --git a/sys/boot/forth/menu-commands.4th b/sys/boot/forth/menu-commands.4th
index 3f36537..2006131 100644
--- a/sys/boot/forth/menu-commands.4th
+++ b/sys/boot/forth/menu-commands.4th
@@ -1,4 +1,4 @@
-\ Copyright (c) 2006-2011 Devin Teske <dteske@freebsd.org>
+\ Copyright (c) 2006-2011 Devin Teske <dteske@FreeBSD.org>
\ All rights reserved.
\
\ Redistribution and use in source and binary forms, with or without
diff --git a/sys/boot/forth/menu.4th b/sys/boot/forth/menu.4th
index bf203f4..60f62b9 100644
--- a/sys/boot/forth/menu.4th
+++ b/sys/boot/forth/menu.4th
@@ -1,6 +1,6 @@
\ Copyright (c) 2003 Scott Long <scottl@freebsd.org>
\ Copyright (c) 2003 Aleksander Fafula <alex@fafula.com>
-\ Copyright (c) 2006-2011 Devin Teske <dteske@freebsd.org>
+\ Copyright (c) 2006-2011 Devin Teske <dteske@FreeBSD.org>
\ All rights reserved.
\
\ Redistribution and use in source and binary forms, with or without
diff --git a/sys/boot/forth/menu.4th.8 b/sys/boot/forth/menu.4th.8
index e94ee86..457952f 100644
--- a/sys/boot/forth/menu.4th.8
+++ b/sys/boot/forth/menu.4th.8
@@ -320,4 +320,4 @@ The
.Nm
set of commands was written by
.An -nosplit
-.An Devin Teske Aq dteske@freebsd.org .
+.An Devin Teske Aq dteske@FreeBSD.org .
diff --git a/sys/boot/forth/shortcuts.4th b/sys/boot/forth/shortcuts.4th
index ff64162..33a1cf6 100644
--- a/sys/boot/forth/shortcuts.4th
+++ b/sys/boot/forth/shortcuts.4th
@@ -1,4 +1,4 @@
-\ Copyright (c) 2008-2011 Devin Teske <dteske@freebsd.org>
+\ Copyright (c) 2008-2011 Devin Teske <dteske@FreeBSD.org>
\ All rights reserved.
\
\ Redistribution and use in source and binary forms, with or without
diff --git a/sys/boot/forth/version.4th b/sys/boot/forth/version.4th
index 8fa0b98..358b6b1 100644
--- a/sys/boot/forth/version.4th
+++ b/sys/boot/forth/version.4th
@@ -1,4 +1,4 @@
-\ Copyright (c) 2006-2011 Devin Teske <dteske@freebsd.org>
+\ Copyright (c) 2006-2011 Devin Teske <dteske@FreeBSD.org>
\ All rights reserved.
\
\ Redistribution and use in source and binary forms, with or without
diff --git a/sys/boot/forth/version.4th.8 b/sys/boot/forth/version.4th.8
index c080a5d..dc36391 100644
--- a/sys/boot/forth/version.4th.8
+++ b/sys/boot/forth/version.4th.8
@@ -123,4 +123,4 @@ The
.Nm
set of commands was written by
.An -nosplit
-.An Devin Teske Aq dteske@freebsd.org .
+.An Devin Teske Aq dteske@FreeBSD.org .
diff --git a/sys/boot/sparc64/loader/main.c b/sys/boot/sparc64/loader/main.c
index 4cbea17..9b76f0d 100644
--- a/sys/boot/sparc64/loader/main.c
+++ b/sys/boot/sparc64/loader/main.c
@@ -7,7 +7,7 @@
* unchanged, you can do what ever you want with this file.
*/
/*-
- * Copyright (c) 2008 Marius Strobl <marius@FreeBSD.org>
+ * Copyright (c) 2008 - 2012 Marius Strobl <marius@FreeBSD.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -75,8 +75,6 @@ __FBSDID("$FreeBSD$");
#include "libofw.h"
#include "dev_net.h"
-#define MAXDEV 31
-
extern char bootprog_name[], bootprog_rev[], bootprog_date[], bootprog_maker[];
enum {
@@ -735,18 +733,52 @@ sparc64_zfs_probe(void)
{
struct vtoc8 vtoc;
struct zfs_devdesc zfs_currdev;
- char devname[32];
+ char alias[64], devname[sizeof(alias) + sizeof(":x") - 1];
+ char type[sizeof("device_type")];
+ char *bdev, *dev, *odev;
uint64_t guid;
- int fd, part, unit;
+ int fd, len, part;
+ phandle_t aliases, options;
/* Get the GUID of the ZFS pool on the boot device. */
guid = 0;
zfs_probe_dev(bootpath, &guid);
- for (unit = 0; unit < MAXDEV; unit++) {
+ /*
+ * Get the GUIDs of the ZFS pools on any additional disks listed in
+ * the boot-device environment variable.
+ */
+ if ((aliases = OF_finddevice("/aliases")) == -1)
+ goto out;
+ options = OF_finddevice("/options");
+ len = OF_getproplen(options, "boot-device");
+ if (len <= 0)
+ goto out;
+ bdev = odev = malloc(len + 1);
+ if (bdev == NULL)
+ goto out;
+ if (OF_getprop(options, "boot-device", bdev, len) <= 0)
+ goto out;
+ bdev[len] = '\0';
+ while ((dev = strsep(&bdev, " ")) != NULL) {
+ if (*dev == '\0')
+ continue;
+ strcpy(alias, dev);
+ (void)OF_getprop(aliases, dev, alias, sizeof(alias));
+ /*
+ * Don't probe the boot disk twice. Note that bootpath
+ * includes the partition specifier.
+ */
+ if (strncmp(alias, bootpath, strlen(alias)) == 0)
+ continue;
+ if (OF_getprop(OF_finddevice(alias), "device_type", type,
+ sizeof(type)) == -1)
+ continue;
+ if (strcmp(type, "block") != 0)
+ continue;
+
/* Find freebsd-zfs slices in the VTOC. */
- sprintf(devname, "disk%d:", unit);
- fd = open(devname, O_RDONLY);
+ fd = open(alias, O_RDONLY);
if (fd == -1)
continue;
lseek(fd, 0, SEEK_SET);
@@ -760,12 +792,14 @@ sparc64_zfs_probe(void)
if (part == 2 || vtoc.part[part].tag !=
VTOC_TAG_FREEBSD_ZFS)
continue;
- sprintf(devname, "disk%d:%c", unit, part + 'a');
+ (void)sprintf(devname, "%s:%c", alias, part + 'a');
if (zfs_probe_dev(devname, NULL) == ENXIO)
break;
}
}
+ free(odev);
+ out:
if (guid != 0) {
zfs_currdev.pool_guid = guid;
zfs_currdev.root_guid = 0;
diff --git a/sys/boot/zfs/Makefile b/sys/boot/zfs/Makefile
index a6fba3a..ff423a0 100644
--- a/sys/boot/zfs/Makefile
+++ b/sys/boot/zfs/Makefile
@@ -33,5 +33,7 @@ machine:
.include <bsd.lib.mk>
.if ${MACHINE_CPUARCH} == "amd64"
+.if !exists(machine)
beforedepend ${OBJS}: machine
.endif
+.endif
diff --git a/sys/cam/ata/ata_all.c b/sys/cam/ata/ata_all.c
index 5135efb..6ad6df7 100644
--- a/sys/cam/ata/ata_all.c
+++ b/sys/cam/ata/ata_all.c
@@ -359,7 +359,7 @@ ata_28bit_cmd(struct ccb_ataio *ataio, uint8_t cmd, uint8_t features,
ataio->cmd.lba_low = lba;
ataio->cmd.lba_mid = lba >> 8;
ataio->cmd.lba_high = lba >> 16;
- ataio->cmd.device = 0x40 | ((lba >> 24) & 0x0f);
+ ataio->cmd.device = ATA_DEV_LBA | ((lba >> 24) & 0x0f);
ataio->cmd.sector_count = sector_count;
}
@@ -384,7 +384,7 @@ ata_48bit_cmd(struct ccb_ataio *ataio, uint8_t cmd, uint16_t features,
ataio->cmd.lba_low = lba;
ataio->cmd.lba_mid = lba >> 8;
ataio->cmd.lba_high = lba >> 16;
- ataio->cmd.device = 0x40;
+ ataio->cmd.device = ATA_DEV_LBA;
ataio->cmd.lba_low_exp = lba >> 24;
ataio->cmd.lba_mid_exp = lba >> 32;
ataio->cmd.lba_high_exp = lba >> 40;
@@ -404,7 +404,7 @@ ata_ncq_cmd(struct ccb_ataio *ataio, uint8_t cmd,
ataio->cmd.lba_low = lba;
ataio->cmd.lba_mid = lba >> 8;
ataio->cmd.lba_high = lba >> 16;
- ataio->cmd.device = 0x40;
+ ataio->cmd.device = ATA_DEV_LBA;
ataio->cmd.lba_low_exp = lba >> 24;
ataio->cmd.lba_mid_exp = lba >> 32;
ataio->cmd.lba_high_exp = lba >> 40;
diff --git a/sys/cam/ata/ata_all.h b/sys/cam/ata/ata_all.h
index 924fdfe..848a8fc 100644
--- a/sys/cam/ata/ata_all.h
+++ b/sys/cam/ata/ata_all.h
@@ -35,6 +35,7 @@ struct ccb_ataio;
struct cam_periph;
union ccb;
+#define SID_AEN 0x04 /* Abuse inq_flags bit to track enabled AEN. */
#define SID_DMA 0x10 /* Abuse inq_flags bit to track enabled DMA. */
struct ata_cmd {
diff --git a/sys/cam/ata/ata_xpt.c b/sys/cam/ata/ata_xpt.c
index 20f22eb..91f985d 100644
--- a/sys/cam/ata/ata_xpt.c
+++ b/sys/cam/ata/ata_xpt.c
@@ -468,6 +468,12 @@ negotiate:
0, 0x02);
break;
case PROBE_SETAN:
+ /* Remember what transport thinks about AEN. */
+ if (softc->caps & CTS_SATA_CAPS_H_AN)
+ path->device->inq_flags |= SID_AEN;
+ else
+ path->device->inq_flags &= ~SID_AEN;
+ xpt_async(AC_GETDEV_CHANGED, path, NULL);
cam_fill_ataio(ataio,
1,
probedone,
@@ -1154,6 +1160,12 @@ notsata:
cts.xport_specific.sata.valid = CTS_SATA_VALID_CAPS;
xpt_action((union ccb *)&cts);
softc->caps = caps;
+ /* Remember what transport thinks about AEN. */
+ if (softc->caps & CTS_SATA_CAPS_H_AN)
+ path->device->inq_flags |= SID_AEN;
+ else
+ path->device->inq_flags &= ~SID_AEN;
+ xpt_async(AC_GETDEV_CHANGED, path, NULL);
if (periph->path->device->flags & CAM_DEV_UNCONFIGURED) {
path->device->flags &= ~CAM_DEV_UNCONFIGURED;
xpt_acquire_device(path->device);
diff --git a/sys/cam/cam_ccb.h b/sys/cam/cam_ccb.h
index 52d7496..1f12d91 100644
--- a/sys/cam/cam_ccb.h
+++ b/sys/cam/cam_ccb.h
@@ -755,6 +755,7 @@ struct ccb_relsim {
* Definitions for the asynchronous callback CCB fields.
*/
typedef enum {
+ AC_UNIT_ATTENTION = 0x4000,/* Device reported UNIT ATTENTION */
AC_ADVINFO_CHANGED = 0x2000,/* Advance info might have changes */
AC_CONTRACT = 0x1000,/* A contractual callback */
AC_GETDEV_CHANGED = 0x800,/* Getdev info might have changed */
diff --git a/sys/cam/cam_periph.c b/sys/cam/cam_periph.c
index d947732..4ebf84c 100644
--- a/sys/cam/cam_periph.c
+++ b/sys/cam/cam_periph.c
@@ -1593,6 +1593,7 @@ cam_periph_error(union ccb *ccb, cam_flags camflags,
const char *action_string;
cam_status status;
int frozen, error, openings, print, lost_device;
+ int error_code, sense_key, asc, ascq;
u_int32_t relsim_flags, timeout;
print = 1;
@@ -1759,6 +1760,12 @@ cam_periph_error(union ccb *ccb, cam_flags camflags,
xpt_async(AC_LOST_DEVICE, newpath, NULL);
xpt_free_path(newpath);
}
+
+ /* Broadcast UNIT ATTENTIONs to all periphs. */
+ } else if (scsi_extract_sense_ccb(ccb,
+ &error_code, &sense_key, &asc, &ascq) &&
+ sense_key == SSD_KEY_UNIT_ATTENTION) {
+ xpt_async(AC_UNIT_ATTENTION, orig_ccb->ccb_h.path, orig_ccb);
}
/* Attempt a retry */
diff --git a/sys/cam/cam_xpt.c b/sys/cam/cam_xpt.c
index 3065c12..4a174d7 100644
--- a/sys/cam/cam_xpt.c
+++ b/sys/cam/cam_xpt.c
@@ -4055,6 +4055,7 @@ xpt_async_string(u_int32_t async_code)
case AC_GETDEV_CHANGED: return ("AC_GETDEV_CHANGED");
case AC_CONTRACT: return ("AC_CONTRACT");
case AC_ADVINFO_CHANGED: return ("AC_ADVINFO_CHANGED");
+ case AC_UNIT_ATTENTION: return ("AC_UNIT_ATTENTION");
}
return ("AC_UNKNOWN");
}
diff --git a/sys/cam/ctl/scsi_ctl.c b/sys/cam/ctl/scsi_ctl.c
index ab51f01..a6f58dd 100644
--- a/sys/cam/ctl/scsi_ctl.c
+++ b/sys/cam/ctl/scsi_ctl.c
@@ -1081,11 +1081,81 @@ ctlfe_free_ccb(struct cam_periph *periph, union ccb *ccb)
}
}
+static int
+ctlfe_adjust_cdb(struct ccb_accept_tio *atio, uint32_t offset)
+{
+ uint64_t lba;
+ uint32_t num_blocks, nbc;
+ uint8_t *cmdbyt = (atio->ccb_h.flags & CAM_CDB_POINTER)?
+ atio->cdb_io.cdb_ptr : atio->cdb_io.cdb_bytes;
+
+ nbc = offset >> 9; /* ASSUMING 512 BYTE BLOCKS */
+
+ switch (cmdbyt[0]) {
+ case READ_6:
+ case WRITE_6:
+ {
+ struct scsi_rw_6 *cdb = (struct scsi_rw_6 *)cmdbyt;
+ lba = scsi_3btoul(cdb->addr);
+ lba &= 0x1fffff;
+ num_blocks = cdb->length;
+ if (num_blocks == 0)
+ num_blocks = 256;
+ lba += nbc;
+ num_blocks -= nbc;
+ scsi_ulto3b(lba, cdb->addr);
+ cdb->length = num_blocks;
+ break;
+ }
+ case READ_10:
+ case WRITE_10:
+ {
+ struct scsi_rw_10 *cdb = (struct scsi_rw_10 *)cmdbyt;
+ lba = scsi_4btoul(cdb->addr);
+ num_blocks = scsi_2btoul(cdb->length);
+ lba += nbc;
+ num_blocks -= nbc;
+ scsi_ulto4b(lba, cdb->addr);
+ scsi_ulto2b(num_blocks, cdb->length);
+ break;
+ }
+ case READ_12:
+ case WRITE_12:
+ {
+ struct scsi_rw_12 *cdb = (struct scsi_rw_12 *)cmdbyt;
+ lba = scsi_4btoul(cdb->addr);
+ num_blocks = scsi_4btoul(cdb->length);
+ lba += nbc;
+ num_blocks -= nbc;
+ scsi_ulto4b(lba, cdb->addr);
+ scsi_ulto4b(num_blocks, cdb->length);
+ break;
+ }
+ case READ_16:
+ case WRITE_16:
+ {
+ struct scsi_rw_16 *cdb = (struct scsi_rw_16 *)cmdbyt;
+ lba = scsi_8btou64(cdb->addr);
+ num_blocks = scsi_4btoul(cdb->length);
+ lba += nbc;
+ num_blocks -= nbc;
+ scsi_u64to8b(lba, cdb->addr);
+ scsi_ulto4b(num_blocks, cdb->length);
+ break;
+ }
+ default:
+ return -1;
+ }
+ return (0);
+}
+
static void
ctlfedone(struct cam_periph *periph, union ccb *done_ccb)
{
struct ctlfe_lun_softc *softc;
struct ctlfe_softc *bus_softc;
+ struct ccb_accept_tio *atio = NULL;
+ union ctl_io *io = NULL;
#ifdef CTLFE_DEBUG
printf("%s: entered, func_code = %#x, type = %#lx\n", __func__,
@@ -1123,13 +1193,12 @@ ctlfedone(struct cam_periph *periph, union ccb *done_ccb)
}
switch (done_ccb->ccb_h.func_code) {
case XPT_ACCEPT_TARGET_IO: {
- union ctl_io *io;
- struct ccb_accept_tio *atio;
atio = &done_ccb->atio;
softc->atios_returned++;
+ resubmit:
/*
* Allocate a ctl_io, pass it to CTL, and wait for the
* datamove or done.
@@ -1213,8 +1282,8 @@ ctlfedone(struct cam_periph *periph, union ccb *done_ccb)
break;
}
case XPT_CONT_TARGET_IO: {
- struct ccb_accept_tio *atio;
- union ctl_io *io;
+ int srr = 0;
+ uint32_t srr_off = 0;
atio = (struct ccb_accept_tio *)done_ccb->ccb_h.ccb_atio;
io = (union ctl_io *)atio->ccb_h.io_ptr;
@@ -1225,6 +1294,57 @@ ctlfedone(struct cam_periph *periph, union ccb *done_ccb)
__func__, atio->tag_id, done_ccb->ccb_h.flags);
#endif
/*
+ * Handle SRR case were the data pointer is pushed back hack
+ */
+ if ((done_ccb->ccb_h.status & CAM_STATUS_MASK) == CAM_MESSAGE_RECV
+ && done_ccb->csio.msg_ptr != NULL
+ && done_ccb->csio.msg_ptr[0] == MSG_EXTENDED
+ && done_ccb->csio.msg_ptr[1] == 5
+ && done_ccb->csio.msg_ptr[2] == 0) {
+ srr = 1;
+ srr_off =
+ (done_ccb->csio.msg_ptr[3] << 24)
+ | (done_ccb->csio.msg_ptr[4] << 16)
+ | (done_ccb->csio.msg_ptr[5] << 8)
+ | (done_ccb->csio.msg_ptr[6]);
+ }
+
+ if (srr && (done_ccb->ccb_h.flags & CAM_SEND_STATUS)) {
+ /*
+ * If status was being sent, the back end data is now
+ * history. Hack it up and resubmit a new command with
+ * the CDB adjusted. If the SIM does the right thing,
+ * all of the resid math should work.
+ */
+ softc->ccbs_freed++;
+ xpt_release_ccb(done_ccb);
+ ctl_free_io(io);
+ if (ctlfe_adjust_cdb(atio, srr_off) == 0) {
+ done_ccb = (union ccb *)atio;
+ goto resubmit;
+ }
+ /*
+ * Fall through to doom....
+ */
+ } else if (srr) {
+ /*
+ * If we have an srr and we're still sending data, we
+ * should be able to adjust offsets and cycle again.
+ */
+ io->scsiio.kern_rel_offset =
+ io->scsiio.ext_data_filled = srr_off;
+ io->scsiio.ext_data_len = io->scsiio.kern_total_len -
+ io->scsiio.kern_rel_offset;
+ softc->ccbs_freed++;
+ io->scsiio.io_hdr.status = CTL_STATUS_NONE;
+ xpt_release_ccb(done_ccb);
+ TAILQ_INSERT_HEAD(&softc->work_queue, &atio->ccb_h,
+ periph_links.tqe);
+ xpt_schedule(periph, /*priority*/ 1);
+ return;
+ }
+
+ /*
* If we were sending status back to the initiator, free up
* resources. If we were doing a datamove, call the
* datamove done routine.
diff --git a/sys/cam/scsi/scsi_all.c b/sys/cam/scsi/scsi_all.c
index b5a41bb..a37ae19 100644
--- a/sys/cam/scsi/scsi_all.c
+++ b/sys/cam/scsi/scsi_all.c
@@ -768,7 +768,7 @@ static struct asc_table_entry asc_table[] = {
*
* SCSI ASC/ASCQ Assignments
* Numeric Sorted Listing
- * as of 7/29/08
+ * as of 5/20/12
*
* D - DIRECT ACCESS DEVICE (SBC-2) device column key
* .T - SEQUENTIAL ACCESS DEVICE (SSC) -------------------
@@ -854,6 +854,12 @@ static struct asc_table_entry asc_table[] = {
/* DT R MAEBKV */
{ SST(0x00, 0x1E, SS_RDEF, /* XXX TBD */
"Conflicting SA creation request") },
+ /* DT B */
+ { SST(0x00, 0x1F, SS_RDEF, /* XXX TBD */
+ "Logical unit transitioning to another power condition") },
+ /* DT P B */
+ { SST(0x00, 0x20, SS_RDEF, /* XXX TBD */
+ "Extended copy information available") },
/* D W O BK */
{ SST(0x01, 0x00, SS_RDEF,
"No index/sector signal") },
@@ -923,6 +929,33 @@ static struct asc_table_entry asc_table[] = {
/* DT R MAEBKV */
{ SST(0x04, 0x13, SS_RDEF, /* XXX TBD */
"Logical unit not ready, SA creation in progress") },
+ /* D B */
+ { SST(0x04, 0x14, SS_RDEF, /* XXX TBD */
+ "Logical unit not ready, space allocation in progress") },
+ /* M */
+ { SST(0x04, 0x15, SS_RDEF, /* XXX TBD */
+ "Logical unit not ready, robotics disabled") },
+ /* M */
+ { SST(0x04, 0x16, SS_RDEF, /* XXX TBD */
+ "Logical unit not ready, configuration required") },
+ /* M */
+ { SST(0x04, 0x17, SS_RDEF, /* XXX TBD */
+ "Logical unit not ready, calibration required") },
+ /* M */
+ { SST(0x04, 0x18, SS_RDEF, /* XXX TBD */
+ "Logical unit not ready, a door is open") },
+ /* M */
+ { SST(0x04, 0x19, SS_RDEF, /* XXX TBD */
+ "Logical unit not ready, operating in sequential mode") },
+ /* DT B */
+ { SST(0x04, 0x1A, SS_RDEF, /* XXX TBD */
+ "Logical unit not ready, START/STOP UNIT command in progress") },
+ /* D B */
+ { SST(0x04, 0x1B, SS_RDEF, /* XXX TBD */
+ "Logical unit not ready, sanitize in progress") },
+ /* DT MAEB */
+ { SST(0x04, 0x1C, SS_RDEF, /* XXX TBD */
+ "Logical unit not ready, additional power use not yet granted") },
/* DTL WROMAEBKVF */
{ SST(0x05, 0x00, SS_RDEF,
"Logical unit does not respond to selection") },
@@ -989,6 +1022,12 @@ static struct asc_table_entry asc_table[] = {
/* DTLPWROMAEBKVF */
{ SST(0x0B, 0x07, SS_RDEF, /* XXX TBD */
"Warning - degraded power to non-volatile cache") },
+ /* DTLPWROMAEBKVF */
+ { SST(0x0B, 0x08, SS_RDEF, /* XXX TBD */
+ "Warning - power loss expected") },
+ /* D */
+ { SST(0x0B, 0x09, SS_RDEF, /* XXX TBD */
+ "Warning - device statistics notification available") },
/* T R */
{ SST(0x0C, 0x00, SS_RDEF,
"Write error") },
@@ -1031,6 +1070,9 @@ static struct asc_table_entry asc_table[] = {
/* DTLPWRO AEBKVF */
{ SST(0x0C, 0x0D, SS_RDEF, /* XXX TBD */
"Write error - not enough unsolicited data") },
+ /* DT W O BK */
+ { SST(0x0C, 0x0E, SS_RDEF, /* XXX TBD */
+ "Multiple write errors") },
/* R */
{ SST(0x0C, 0x0F, SS_RDEF, /* XXX TBD */
"Defects in error window") },
@@ -1076,6 +1118,12 @@ static struct asc_table_entry asc_table[] = {
/* DT W O */
{ SST(0x10, 0x03, SS_RDEF, /* XXX TBD */
"Logical block reference tag check failed") },
+ /* T */
+ { SST(0x10, 0x04, SS_RDEF, /* XXX TBD */
+ "Logical block protection error on recovered buffer data") },
+ /* T */
+ { SST(0x10, 0x05, SS_RDEF, /* XXX TBD */
+ "Logical block protection method error") },
/* DT WRO BK */
{ SST(0x11, 0x00, SS_FATAL|EIO,
"Unrecovered read error") },
@@ -1280,6 +1328,9 @@ static struct asc_table_entry asc_table[] = {
/* DT WRO BK */
{ SST(0x1D, 0x00, SS_FATAL,
"Miscompare during verify operation") },
+ /* D B */
+ { SST(0x1D, 0x01, SS_RDEF, /* XXX TBD */
+ "Miscomparable verify of unmapped LBA") },
/* D W O BK */
{ SST(0x1E, 0x00, SS_NOP | SSQ_PRINT_SENSE,
"Recovered ID with ECC correction") },
@@ -1322,6 +1373,9 @@ static struct asc_table_entry asc_table[] = {
/* DT PWROMAEBK */
{ SST(0x20, 0x0B, SS_RDEF, /* XXX TBD */
"Access denied - ACL LUN conflict") },
+ /* T */
+ { SST(0x20, 0x0C, SS_FATAL | EINVAL,
+ "Illegal command when not in append-only mode") },
/* DT WRO BK */
{ SST(0x21, 0x00, SS_FATAL | EINVAL,
"Logical block address out of range") },
@@ -1337,6 +1391,39 @@ static struct asc_table_entry asc_table[] = {
/* D */
{ SST(0x22, 0x00, SS_FATAL | EINVAL,
"Illegal function (use 20 00, 24 00, or 26 00)") },
+ /* DT P B */
+ { SST(0x23, 0x00, SS_RDEF, /* XXX TBD */
+ "Invalid token operation, cause not reportable") },
+ /* DT P B */
+ { SST(0x23, 0x01, SS_RDEF, /* XXX TBD */
+ "Invalid token operation, unsupported token type") },
+ /* DT P B */
+ { SST(0x23, 0x02, SS_RDEF, /* XXX TBD */
+ "Invalid token operation, remote token usage not supported") },
+ /* DT P B */
+ { SST(0x23, 0x03, SS_RDEF, /* XXX TBD */
+ "Invalid token operation, remote ROD token creation not supported") },
+ /* DT P B */
+ { SST(0x23, 0x04, SS_RDEF, /* XXX TBD */
+ "Invalid token operation, token unknown") },
+ /* DT P B */
+ { SST(0x23, 0x05, SS_RDEF, /* XXX TBD */
+ "Invalid token operation, token corrupt") },
+ /* DT P B */
+ { SST(0x23, 0x06, SS_RDEF, /* XXX TBD */
+ "Invalid token operation, token revoked") },
+ /* DT P B */
+ { SST(0x23, 0x07, SS_RDEF, /* XXX TBD */
+ "Invalid token operation, token expired") },
+ /* DT P B */
+ { SST(0x23, 0x08, SS_RDEF, /* XXX TBD */
+ "Invalid token operation, token cancelled") },
+ /* DT P B */
+ { SST(0x23, 0x09, SS_RDEF, /* XXX TBD */
+ "Invalid token operation, token deleted") },
+ /* DT P B */
+ { SST(0x23, 0x0A, SS_RDEF, /* XXX TBD */
+ "Invalid token operation, invalid token length") },
/* DTLPWROMAEBKVF */
{ SST(0x24, 0x00, SS_FATAL | EINVAL,
"Invalid field in CDB") },
@@ -1445,6 +1532,9 @@ static struct asc_table_entry asc_table[] = {
/* R F */
{ SST(0x27, 0x06, SS_RDEF, /* XXX TBD */
"Conditional write protect") },
+ /* D B */
+ { SST(0x27, 0x07, SS_RDEF, /* XXX TBD */
+ "Space allocation failed write protect") },
/* DTLPWROMAEBKVF */
{ SST(0x28, 0x00, SS_FATAL | ENXIO,
"Not ready to ready change, medium may have changed") },
@@ -1543,6 +1633,9 @@ static struct asc_table_entry asc_table[] = {
/* DT R MAEBKV */
{ SST(0x2A, 0x14, SS_RDEF, /* XXX TBD */
"SA creation capabilities data has changed") },
+ /* T M V */
+ { SST(0x2A, 0x15, SS_RDEF, /* XXX TBD */
+ "Medium removal prevention preempted") },
/* DTLPWRO K */
{ SST(0x2B, 0x00, SS_RDEF,
"Copy cannot execute since host cannot disconnect") },
@@ -1582,6 +1675,9 @@ static struct asc_table_entry asc_table[] = {
/* T */
{ SST(0x2C, 0x0B, SS_RDEF, /* XXX TBD */
"Not reserved") },
+ /* D */
+ { SST(0x2C, 0x0C, SS_RDEF, /* XXX TBD */
+ "ORWRITE generation does not match") },
/* T */
{ SST(0x2D, 0x00, SS_RDEF,
"Overwrite error on update in place") },
@@ -1645,6 +1741,9 @@ static struct asc_table_entry asc_table[] = {
/* M */
{ SST(0x30, 0x12, SS_RDEF, /* XXX TBD */
"Incompatible volume qualifier") },
+ /* M */
+ { SST(0x30, 0x13, SS_RDEF, /* XXX TBD */
+ "Cleaning volume expired") },
/* DT WRO BK */
{ SST(0x31, 0x00, SS_RDEF,
"Medium format corrupted") },
@@ -1654,6 +1753,9 @@ static struct asc_table_entry asc_table[] = {
/* R */
{ SST(0x31, 0x02, SS_RDEF, /* XXX TBD */
"Zoned formatting failed due to spare linking") },
+ /* D B */
+ { SST(0x31, 0x03, SS_RDEF, /* XXX TBD */
+ "SANITIZE command failed") },
/* D W O BK */
{ SST(0x32, 0x00, SS_RDEF,
"No defect spare location available") },
@@ -1702,6 +1804,9 @@ static struct asc_table_entry asc_table[] = {
/* B */
{ SST(0x38, 0x06, SS_RDEF, /* XXX TBD */
"ESN - device busy class event") },
+ /* D */
+ { SST(0x38, 0x07, SS_RDEF, /* XXX TBD */
+ "Thin provisioning soft threshold reached") },
/* DTL WROMAE K */
{ SST(0x39, 0x00, SS_RDEF,
"Saving parameters not supported") },
@@ -1801,6 +1906,9 @@ static struct asc_table_entry asc_table[] = {
/* M */
{ SST(0x3B, 0x1B, SS_RDEF, /* XXX TBD */
"Data transfer device inserted") },
+ /* T */
+ { SST(0x3B, 0x1C, SS_RDEF, /* XXX TBD */
+ "Too many logical objects on partition to support operation") },
/* DTLPWROMAE K */
{ SST(0x3D, 0x00, SS_RDEF,
"Invalid bits in IDENTIFY message") },
@@ -1904,6 +2012,9 @@ static struct asc_table_entry asc_table[] = {
/* DTLPWROMAEBKVF */
{ SST(0x44, 0x00, SS_RDEF,
"Internal target failure") },
+ /* DT P MAEBKVF */
+ { SST(0x44, 0x01, SS_RDEF, /* XXX TBD */
+ "Persistent reservation information lost") },
/* DT B */
{ SST(0x44, 0x71, SS_RDEF, /* XXX TBD */
"ATA device failed set features") },
@@ -1967,6 +2078,27 @@ static struct asc_table_entry asc_table[] = {
/* DT PWROMAEBK */
{ SST(0x4B, 0x06, SS_RDEF, /* XXX TBD */
"Initiator response timeout") },
+ /* DT PWROMAEBK F */
+ { SST(0x4B, 0x07, SS_RDEF, /* XXX TBD */
+ "Connection lost") },
+ /* DT PWROMAEBK F */
+ { SST(0x4B, 0x08, SS_RDEF, /* XXX TBD */
+ "Data-in buffer overflow - data buffer size") },
+ /* DT PWROMAEBK F */
+ { SST(0x4B, 0x09, SS_RDEF, /* XXX TBD */
+ "Data-in buffer overflow - data buffer descriptor area") },
+ /* DT PWROMAEBK F */
+ { SST(0x4B, 0x0A, SS_RDEF, /* XXX TBD */
+ "Data-in buffer error") },
+ /* DT PWROMAEBK F */
+ { SST(0x4B, 0x0B, SS_RDEF, /* XXX TBD */
+ "Data-out buffer overflow - data buffer size") },
+ /* DT PWROMAEBK F */
+ { SST(0x4B, 0x0C, SS_RDEF, /* XXX TBD */
+ "Data-out buffer overflow - data buffer descriptor area") },
+ /* DT PWROMAEBK F */
+ { SST(0x4B, 0x0D, SS_RDEF, /* XXX TBD */
+ "Data-out buffer error") },
/* DTLPWROMAEBKVF */
{ SST(0x4C, 0x00, SS_RDEF,
"Logical unit failed self-configuration") },
@@ -2012,6 +2144,18 @@ static struct asc_table_entry asc_table[] = {
/* T */
{ SST(0x53, 0x04, SS_RDEF, /* XXX TBD */
"Medium thread or unthread failure") },
+ /* M */
+ { SST(0x53, 0x05, SS_RDEF, /* XXX TBD */
+ "Volume identifier invalid") },
+ /* T */
+ { SST(0x53, 0x06, SS_RDEF, /* XXX TBD */
+ "Volume identifier missing") },
+ /* M */
+ { SST(0x53, 0x07, SS_RDEF, /* XXX TBD */
+ "Duplicate volume identifier") },
+ /* M */
+ { SST(0x53, 0x08, SS_RDEF, /* XXX TBD */
+ "Element status unknown") },
/* P */
{ SST(0x54, 0x00, SS_RDEF,
"SCSI to host system interface failure") },
@@ -2048,6 +2192,15 @@ static struct asc_table_entry asc_table[] = {
/* M */
{ SST(0x55, 0x0A, SS_RDEF, /* XXX TBD */
"Data currently unavailable") },
+ /* DTLPWROMAEBKVF */
+ { SST(0x55, 0x0B, SS_RDEF, /* XXX TBD */
+ "Insufficient power for operation") },
+ /* DT P B */
+ { SST(0x55, 0x0C, SS_RDEF, /* XXX TBD */
+ "Insufficient resources to create ROD") },
+ /* DT P B */
+ { SST(0x55, 0x0D, SS_RDEF, /* XXX TBD */
+ "Insufficient resources to create ROD token") },
/* R */
{ SST(0x57, 0x00, SS_RDEF,
"Unable to recover table-of-contents") },
@@ -2354,6 +2507,24 @@ static struct asc_table_entry asc_table[] = {
/* DTLPWRO A K */
{ SST(0x5E, 0x04, SS_RDEF,
"Standby condition activated by command") },
+ /* DTLPWRO A K */
+ { SST(0x5E, 0x05, SS_RDEF,
+ "Idle-B condition activated by timer") },
+ /* DTLPWRO A K */
+ { SST(0x5E, 0x06, SS_RDEF,
+ "Idle-B condition activated by command") },
+ /* DTLPWRO A K */
+ { SST(0x5E, 0x07, SS_RDEF,
+ "Idle-C condition activated by timer") },
+ /* DTLPWRO A K */
+ { SST(0x5E, 0x08, SS_RDEF,
+ "Idle-C condition activated by command") },
+ /* DTLPWRO A K */
+ { SST(0x5E, 0x09, SS_RDEF,
+ "Standby-Y condition activated by timer") },
+ /* DTLPWRO A K */
+ { SST(0x5E, 0x0A, SS_RDEF,
+ "Standby-Y condition activated by command") },
/* B */
{ SST(0x5E, 0x41, SS_RDEF, /* XXX TBD */
"Power state change to active") },
diff --git a/sys/cam/scsi/scsi_cd.c b/sys/cam/scsi/scsi_cd.c
index 7b24ddb..c102c60 100644
--- a/sys/cam/scsi/scsi_cd.c
+++ b/sys/cam/scsi/scsi_cd.c
@@ -97,6 +97,7 @@ typedef enum {
CD_FLAG_NEW_DISC = 0x0002,
CD_FLAG_DISC_LOCKED = 0x0004,
CD_FLAG_DISC_REMOVABLE = 0x0008,
+ CD_FLAG_SAW_MEDIA = 0x0010,
CD_FLAG_CHANGER = 0x0040,
CD_FLAG_ACTIVE = 0x0080,
CD_FLAG_SCHED_ON_COMP = 0x0100,
@@ -110,6 +111,7 @@ typedef enum {
CD_CCB_PROBE = 0x01,
CD_CCB_BUFFER_IO = 0x02,
CD_CCB_WAITING = 0x03,
+ CD_CCB_TUR = 0x04,
CD_CCB_TYPE_MASK = 0x0F,
CD_CCB_RETRY_UA = 0x10
} cd_ccb_state;
@@ -154,12 +156,14 @@ struct cd_softc {
struct cam_periph *periph;
int minimum_command_size;
int outstanding_cmds;
+ int tur;
struct task sysctl_task;
struct sysctl_ctx_list sysctl_ctx;
struct sysctl_oid *sysctl_tree;
STAILQ_HEAD(, cd_mode_params) mode_queue;
struct cd_tocdata toc;
struct disk *disk;
+ struct callout mediapoll_c;
};
struct cd_page_sizes {
@@ -281,6 +285,7 @@ static int cdsendkey(struct cam_periph *periph,
struct dvd_authinfo *authinfo);
static int cdreaddvdstructure(struct cam_periph *periph,
struct dvd_struct *dvdstruct);
+static timeout_t cdmediapoll;
static struct periph_driver cddriver =
{
@@ -290,6 +295,9 @@ static struct periph_driver cddriver =
PERIPHDRIVER_DECLARE(cd, cddriver);
+#ifndef CD_DEFAULT_POLL_PERIOD
+#define CD_DEFAULT_POLL_PERIOD 3
+#endif
#ifndef CD_DEFAULT_RETRY
#define CD_DEFAULT_RETRY 4
#endif
@@ -303,6 +311,7 @@ PERIPHDRIVER_DECLARE(cd, cddriver);
#define CHANGER_MAX_BUSY_SECONDS 15
#endif
+static int cd_poll_period = CD_DEFAULT_POLL_PERIOD;
static int cd_retry_count = CD_DEFAULT_RETRY;
static int cd_timeout = CD_DEFAULT_TIMEOUT;
static int changer_min_busy_seconds = CHANGER_MIN_BUSY_SECONDS;
@@ -311,6 +320,9 @@ static int changer_max_busy_seconds = CHANGER_MAX_BUSY_SECONDS;
static SYSCTL_NODE(_kern_cam, OID_AUTO, cd, CTLFLAG_RD, 0, "CAM CDROM driver");
static SYSCTL_NODE(_kern_cam_cd, OID_AUTO, changer, CTLFLAG_RD, 0,
"CD Changer");
+SYSCTL_INT(_kern_cam_cd, OID_AUTO, poll_period, CTLFLAG_RW,
+ &cd_poll_period, 0, "Media polling period in seconds");
+TUNABLE_INT("kern.cam.cd.poll_period", &cd_poll_period);
SYSCTL_INT(_kern_cam_cd, OID_AUTO, retry_count, CTLFLAG_RW,
&cd_retry_count, 0, "Normal I/O retry count");
TUNABLE_INT("kern.cam.cd.retry_count", &cd_retry_count);
@@ -494,6 +506,7 @@ cdcleanup(struct cam_periph *periph)
xpt_print(periph->path, "can't remove sysctl context\n");
}
+ callout_drain(&softc->mediapoll_c);
disk_destroy(softc->disk);
free(softc, M_DEVBUF);
cam_periph_lock(periph);
@@ -504,6 +517,7 @@ cdasync(void *callback_arg, u_int32_t code,
struct cam_path *path, void *arg)
{
struct cam_periph *periph;
+ struct cd_softc *softc;
periph = (struct cam_periph *)callback_arg;
switch (code) {
@@ -541,10 +555,39 @@ cdasync(void *callback_arg, u_int32_t code,
break;
}
+ case AC_UNIT_ATTENTION:
+ {
+ union ccb *ccb;
+ int error_code, sense_key, asc, ascq;
+
+ softc = (struct cd_softc *)periph->softc;
+ ccb = (union ccb *)arg;
+
+ /*
+ * Handle all media change UNIT ATTENTIONs except
+ * our own, as they will be handled by cderror().
+ */
+ if (xpt_path_periph(ccb->ccb_h.path) != periph &&
+ scsi_extract_sense_ccb(ccb,
+ &error_code, &sense_key, &asc, &ascq)) {
+ if (asc == 0x28 && ascq == 0x00)
+ disk_media_changed(softc->disk, M_NOWAIT);
+ }
+ cam_periph_async(periph, code, path, arg);
+ break;
+ }
+ case AC_SCSI_AEN:
+ softc = (struct cd_softc *)periph->softc;
+ if (softc->state == CD_STATE_NORMAL && !softc->tur) {
+ if (cam_periph_acquire(periph) == CAM_REQ_CMP) {
+ softc->tur = 1;
+ xpt_schedule(periph, CAM_PRIORITY_DEV);
+ }
+ }
+ /* FALLTHROUGH */
case AC_SENT_BDR:
case AC_BUS_RESET:
{
- struct cd_softc *softc;
struct ccb_hdr *ccbh;
softc = (struct cd_softc *)periph->softc;
@@ -788,8 +831,8 @@ cdregister(struct cam_periph *periph, void *arg)
* Add an async callback so that we get
* notified if this device goes away.
*/
- xpt_register_async(AC_SENT_BDR | AC_BUS_RESET | AC_LOST_DEVICE,
- cdasync, periph, periph->path);
+ xpt_register_async(AC_SENT_BDR | AC_BUS_RESET | AC_LOST_DEVICE |
+ AC_SCSI_AEN | AC_UNIT_ATTENTION, cdasync, periph, periph->path);
/*
* If the target lun is greater than 0, we most likely have a CD
@@ -1005,6 +1048,17 @@ cdregister(struct cam_periph *periph, void *arg)
}
}
+ /*
+ * Schedule a periodic media polling events.
+ */
+ callout_init_mtx(&softc->mediapoll_c, periph->sim->mtx, 0);
+ if ((softc->flags & CD_FLAG_DISC_REMOVABLE) &&
+ (softc->flags & CD_FLAG_CHANGER) == 0 &&
+ (cgd->inq_flags & SID_AEN) == 0 &&
+ cd_poll_period != 0)
+ callout_reset(&softc->mediapoll_c, cd_poll_period * hz,
+ cdmediapoll, periph);
+
cdregisterexit:
if ((softc->flags & CD_FLAG_CHANGER) == 0)
@@ -1500,8 +1554,25 @@ cdstart(struct cam_periph *periph, union ccb *start_ccb)
periph->immediate_priority = CAM_PRIORITY_NONE;
wakeup(&periph->ccb_list);
} else if (bp == NULL) {
- xpt_release_ccb(start_ccb);
+ if (softc->tur) {
+ softc->tur = 0;
+ csio = &start_ccb->csio;
+ scsi_test_unit_ready(csio,
+ /*retries*/ cd_retry_count,
+ cddone,
+ MSG_SIMPLE_Q_TAG,
+ SSD_FULL_SIZE,
+ cd_timeout);
+ start_ccb->ccb_h.ccb_bp = NULL;
+ start_ccb->ccb_h.ccb_state = CD_CCB_TUR;
+ xpt_action(start_ccb);
+ } else
+ xpt_release_ccb(start_ccb);
} else {
+ if (softc->tur) {
+ softc->tur = 0;
+ cam_periph_release_locked(periph);
+ }
bioq_remove(&softc->bio_queue, bp);
scsi_read_write(&start_ccb->csio,
@@ -1545,7 +1616,7 @@ cdstart(struct cam_periph *periph, union ccb *start_ccb)
xpt_action(start_ccb);
}
- if (bp != NULL) {
+ if (bp != NULL || softc->tur) {
/* Have more work to do, so ensure we stay scheduled */
xpt_schedule(periph, CAM_PRIORITY_NORMAL);
}
@@ -1840,6 +1911,25 @@ cddone(struct cam_periph *periph, union ccb *done_ccb)
wakeup(&done_ccb->ccb_h.cbfcnp);
return;
}
+ case CD_CCB_TUR:
+ {
+ if ((done_ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) {
+
+ if (cderror(done_ccb, CAM_RETRY_SELTO,
+ SF_RETRY_UA | SF_NO_RECOVERY | SF_NO_PRINT) ==
+ ERESTART)
+ return;
+ if ((done_ccb->ccb_h.status & CAM_DEV_QFRZN) != 0)
+ cam_release_devq(done_ccb->ccb_h.path,
+ /*relsim_flags*/0,
+ /*reduction*/0,
+ /*timeout*/0,
+ /*getcount_only*/0);
+ }
+ xpt_release_ccb(done_ccb);
+ cam_periph_release_locked(periph);
+ return;
+ }
default:
break;
}
@@ -2830,7 +2920,7 @@ cdcheckmedia(struct cam_periph *periph)
cdprevent(periph, PR_ALLOW);
return (error);
} else {
- softc->flags |= CD_FLAG_VALID_MEDIA;
+ softc->flags |= CD_FLAG_SAW_MEDIA | CD_FLAG_VALID_MEDIA;
softc->disk->d_sectorsize = softc->params.blksize;
softc->disk->d_mediasize =
(off_t)softc->params.blksize * softc->params.disksize;
@@ -3175,6 +3265,14 @@ cderror(union ccb *ccb, u_int32_t cam_flags, u_int32_t sense_flags)
&error_code, &sense_key, &asc, &ascq)) {
if (sense_key == SSD_KEY_ILLEGAL_REQUEST)
error = cd6byteworkaround(ccb);
+ else if (sense_key == SSD_KEY_UNIT_ATTENTION &&
+ asc == 0x28 && ascq == 0x00)
+ disk_media_changed(softc->disk, M_NOWAIT);
+ else if (sense_key == SSD_KEY_NOT_READY &&
+ asc == 0x3a && (softc->flags & CD_FLAG_SAW_MEDIA)) {
+ softc->flags &= ~CD_FLAG_SAW_MEDIA;
+ disk_media_gone(softc->disk, M_NOWAIT);
+ }
}
if (error == ERESTART)
@@ -3190,6 +3288,26 @@ cderror(union ccb *ccb, u_int32_t cam_flags, u_int32_t sense_flags)
&softc->saved_ccb));
}
+static void
+cdmediapoll(void *arg)
+{
+ struct cam_periph *periph = arg;
+ struct cd_softc *softc = periph->softc;
+
+ if (softc->flags & CD_FLAG_CHANGER)
+ return;
+
+ if (softc->state == CD_STATE_NORMAL && !softc->tur) {
+ if (cam_periph_acquire(periph) == CAM_REQ_CMP) {
+ softc->tur = 1;
+ xpt_schedule(periph, CAM_PRIORITY_DEV);
+ }
+ }
+ /* Queue us up again */
+ if (cd_poll_period != 0)
+ callout_schedule(&softc->mediapoll_c, cd_poll_period * hz);
+}
+
/*
* Read table of contents
*/
diff --git a/sys/cam/scsi/scsi_da.c b/sys/cam/scsi/scsi_da.c
index 8a5c72a..3253e02 100644
--- a/sys/cam/scsi/scsi_da.c
+++ b/sys/cam/scsi/scsi_da.c
@@ -77,6 +77,7 @@ typedef enum {
DA_FLAG_NEW_PACK = 0x002,
DA_FLAG_PACK_LOCKED = 0x004,
DA_FLAG_PACK_REMOVABLE = 0x008,
+ DA_FLAG_SAW_MEDIA = 0x010,
DA_FLAG_NEED_OTAG = 0x020,
DA_FLAG_WENT_IDLE = 0x040,
DA_FLAG_RETRY_UA = 0x080,
@@ -101,6 +102,7 @@ typedef enum {
DA_CCB_WAITING = 0x04,
DA_CCB_DUMP = 0x05,
DA_CCB_DELETE = 0x06,
+ DA_CCB_TUR = 0x07,
DA_CCB_TYPE_MASK = 0x0F,
DA_CCB_RETRY_UA = 0x10
} da_ccb_state;
@@ -150,6 +152,7 @@ struct da_softc {
int unmap_max_ranges;
int unmap_max_lba;
int delete_running;
+ int tur;
da_delete_methods delete_method;
struct disk_params params;
struct disk *disk;
@@ -161,6 +164,7 @@ struct da_softc {
uint64_t wwpn;
uint8_t unmap_buf[UNMAP_MAX_RANGES * 16 + 8];
struct scsi_read_capacity_data_long rcaplong;
+ struct callout mediapoll_c;
};
struct da_quirk_entry {
@@ -857,6 +861,11 @@ static void dasetgeom(struct cam_periph *periph, uint32_t block_len,
size_t rcap_size);
static timeout_t dasendorderedtag;
static void dashutdown(void *arg, int howto);
+static timeout_t damediapoll;
+
+#ifndef DA_DEFAULT_POLL_PERIOD
+#define DA_DEFAULT_POLL_PERIOD 3
+#endif
#ifndef DA_DEFAULT_TIMEOUT
#define DA_DEFAULT_TIMEOUT 60 /* Timeout in seconds */
@@ -871,12 +880,16 @@ static void dashutdown(void *arg, int howto);
#endif
+static int da_poll_period = DA_DEFAULT_POLL_PERIOD;
static int da_retry_count = DA_DEFAULT_RETRY;
static int da_default_timeout = DA_DEFAULT_TIMEOUT;
static int da_send_ordered = DA_DEFAULT_SEND_ORDERED;
static SYSCTL_NODE(_kern_cam, OID_AUTO, da, CTLFLAG_RD, 0,
"CAM Direct Access Disk driver");
+SYSCTL_INT(_kern_cam_da, OID_AUTO, poll_period, CTLFLAG_RW,
+ &da_poll_period, 0, "Media polling period in seconds");
+TUNABLE_INT("kern.cam.da.poll_period", &da_poll_period);
SYSCTL_INT(_kern_cam_da, OID_AUTO, retry_count, CTLFLAG_RW,
&da_retry_count, 0, "Normal I/O retry count");
TUNABLE_INT("kern.cam.da.retry_count", &da_retry_count);
@@ -966,6 +979,9 @@ daopen(struct disk *dp)
(softc->quirks & DA_Q_NO_PREVENT) == 0)
daprevent(periph, PR_PREVENT);
+ if (error == 0)
+ softc->flags |= DA_FLAG_SAW_MEDIA;
+
cam_periph_unhold(periph);
cam_periph_unlock(periph);
@@ -1050,7 +1066,8 @@ daschedule(struct cam_periph *periph)
/* Check if we have more work to do. */
if (bioq_first(&softc->bio_queue) ||
- (!softc->delete_running && bioq_first(&softc->delete_queue))) {
+ (!softc->delete_running && bioq_first(&softc->delete_queue)) ||
+ softc->tur) {
prio = CAM_PRIORITY_NORMAL;
}
@@ -1297,6 +1314,7 @@ dacleanup(struct cam_periph *periph)
xpt_print(periph->path, "can't remove sysctl context\n");
}
+ callout_drain(&softc->mediapoll_c);
disk_destroy(softc->disk);
callout_drain(&softc->sendordered_c);
free(softc, M_DEVBUF);
@@ -1308,6 +1326,7 @@ daasync(void *callback_arg, u_int32_t code,
struct cam_path *path, void *arg)
{
struct cam_periph *periph;
+ struct da_softc *softc;
periph = (struct cam_periph *)callback_arg;
switch (code) {
@@ -1359,10 +1378,43 @@ daasync(void *callback_arg, u_int32_t code,
}
break;
}
+ case AC_UNIT_ATTENTION:
+ {
+ union ccb *ccb;
+ int error_code, sense_key, asc, ascq;
+
+ softc = (struct da_softc *)periph->softc;
+ ccb = (union ccb *)arg;
+
+ /*
+ * Handle all UNIT ATTENTIONs except our own,
+ * as they will be handled by daerror().
+ */
+ if (xpt_path_periph(ccb->ccb_h.path) != periph &&
+ scsi_extract_sense_ccb(ccb,
+ &error_code, &sense_key, &asc, &ascq)) {
+ if (asc == 0x2A && ascq == 0x09) {
+ xpt_print(ccb->ccb_h.path,
+ "capacity data has changed\n");
+ dareprobe(periph);
+ } else if (asc == 0x28 && ascq == 0x00)
+ disk_media_changed(softc->disk, M_NOWAIT);
+ }
+ cam_periph_async(periph, code, path, arg);
+ break;
+ }
+ case AC_SCSI_AEN:
+ softc = (struct da_softc *)periph->softc;
+ if (softc->state == DA_STATE_NORMAL && !softc->tur) {
+ if (cam_periph_acquire(periph) == CAM_REQ_CMP) {
+ softc->tur = 1;
+ xpt_schedule(periph, CAM_PRIORITY_DEV);
+ }
+ }
+ /* FALLTHROUGH */
case AC_SENT_BDR:
case AC_BUS_RESET:
{
- struct da_softc *softc;
struct ccb_hdr *ccbh;
softc = (struct da_softc *)periph->softc;
@@ -1698,9 +1750,9 @@ daregister(struct cam_periph *periph, void *arg)
* fine without them and the only alternative
* would be to not attach the device on failure.
*/
- xpt_register_async(AC_SENT_BDR | AC_BUS_RESET
- | AC_LOST_DEVICE | AC_ADVINFO_CHANGED,
- daasync, periph, periph->path);
+ xpt_register_async(AC_SENT_BDR | AC_BUS_RESET | AC_LOST_DEVICE |
+ AC_ADVINFO_CHANGED | AC_SCSI_AEN | AC_UNIT_ATTENTION,
+ daasync, periph, periph->path);
/*
* Emit an attribute changed notification just in case
@@ -1710,6 +1762,16 @@ daregister(struct cam_periph *periph, void *arg)
*/
disk_attr_changed(softc->disk, "GEOM::physpath", M_NOWAIT);
+ /*
+ * Schedule a periodic media polling events.
+ */
+ callout_init_mtx(&softc->mediapoll_c, periph->sim->mtx, 0);
+ if ((softc->flags & DA_FLAG_PACK_REMOVABLE) &&
+ (cgd->inq_flags & SID_AEN) == 0 &&
+ da_poll_period != 0)
+ callout_reset(&softc->mediapoll_c, da_poll_period * hz,
+ damediapoll, periph);
+
xpt_schedule(periph, CAM_PRIORITY_DEV);
return(CAM_REQ_CMP);
@@ -1847,9 +1909,25 @@ dastart(struct cam_periph *periph, union ccb *start_ccb)
/* Run regular command. */
bp = bioq_takefirst(&softc->bio_queue);
if (bp == NULL) {
- xpt_release_ccb(start_ccb);
+ if (softc->tur) {
+ softc->tur = 0;
+ scsi_test_unit_ready(&start_ccb->csio,
+ /*retries*/ da_retry_count,
+ dadone,
+ MSG_SIMPLE_Q_TAG,
+ SSD_FULL_SIZE,
+ da_default_timeout * 1000);
+ start_ccb->ccb_h.ccb_bp = NULL;
+ start_ccb->ccb_h.ccb_state = DA_CCB_TUR;
+ xpt_action(start_ccb);
+ } else
+ xpt_release_ccb(start_ccb);
break;
}
+ if (softc->tur) {
+ softc->tur = 0;
+ cam_periph_release_locked(periph);
+ }
if ((bp->bio_flags & BIO_ORDERED) != 0 ||
(softc->flags & DA_FLAG_NEED_OTAG) != 0) {
@@ -2417,6 +2495,25 @@ dadone(struct cam_periph *periph, union ccb *done_ccb)
case DA_CCB_DUMP:
/* No-op. We're polling */
return;
+ case DA_CCB_TUR:
+ {
+ if ((done_ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) {
+
+ if (daerror(done_ccb, CAM_RETRY_SELTO,
+ SF_RETRY_UA | SF_NO_RECOVERY | SF_NO_PRINT) ==
+ ERESTART)
+ return;
+ if ((done_ccb->ccb_h.status & CAM_DEV_QFRZN) != 0)
+ cam_release_devq(done_ccb->ccb_h.path,
+ /*relsim_flags*/0,
+ /*reduction*/0,
+ /*timeout*/0,
+ /*getcount_only*/0);
+ }
+ xpt_release_ccb(done_ccb);
+ cam_periph_release_locked(periph);
+ return;
+ }
default:
break;
}
@@ -2477,6 +2574,13 @@ daerror(union ccb *ccb, u_int32_t cam_flags, u_int32_t sense_flags)
xpt_print(periph->path, "capacity data has changed\n");
dareprobe(periph);
sense_flags |= SF_NO_PRINT;
+ } else if (sense_key == SSD_KEY_UNIT_ATTENTION &&
+ asc == 0x28 && ascq == 0x00)
+ disk_media_changed(softc->disk, M_NOWAIT);
+ else if (sense_key == SSD_KEY_NOT_READY &&
+ asc == 0x3a && (softc->flags & DA_FLAG_SAW_MEDIA)) {
+ softc->flags &= ~DA_FLAG_SAW_MEDIA;
+ disk_media_gone(softc->disk, M_NOWAIT);
}
}
if (error == ERESTART)
@@ -2493,6 +2597,23 @@ daerror(union ccb *ccb, u_int32_t cam_flags, u_int32_t sense_flags)
}
static void
+damediapoll(void *arg)
+{
+ struct cam_periph *periph = arg;
+ struct da_softc *softc = periph->softc;
+
+ if (softc->state == DA_STATE_NORMAL && !softc->tur) {
+ if (cam_periph_acquire(periph) == CAM_REQ_CMP) {
+ softc->tur = 1;
+ daschedule(periph);
+ }
+ }
+ /* Queue us up again */
+ if (da_poll_period != 0)
+ callout_schedule(&softc->mediapoll_c, da_poll_period * hz);
+}
+
+static void
daprevent(struct cam_periph *periph, int action)
{
struct da_softc *softc;
@@ -2645,7 +2766,10 @@ dasetgeom(struct cam_periph *periph, uint32_t block_len, uint64_t maxsector,
else
softc->disk->d_flags &= ~DISKFLAG_CANDELETE;
+/* Currently as of 6/13/2012, panics if DIAGNOSTIC is set */
+#ifndef DIAGNOSTIC
disk_resize(softc->disk);
+#endif
}
static void
diff --git a/sys/cam/scsi/scsi_enc.c b/sys/cam/scsi/scsi_enc.c
index fe2ec81..616df5b 100644
--- a/sys/cam/scsi/scsi_enc.c
+++ b/sys/cam/scsi/scsi_enc.c
@@ -56,8 +56,6 @@ __FBSDID("$FreeBSD$");
#include <cam/scsi/scsi_enc.h>
#include <cam/scsi/scsi_enc_internal.h>
-#include <opt_enc.h>
-
MALLOC_DEFINE(M_SCSIENC, "SCSI ENC", "SCSI ENC buffers");
/* Enclosure type independent driver */
diff --git a/sys/cam/scsi/scsi_enc_safte.c b/sys/cam/scsi/scsi_enc_safte.c
index f661e51..875dec7 100644
--- a/sys/cam/scsi/scsi_enc_safte.c
+++ b/sys/cam/scsi/scsi_enc_safte.c
@@ -48,8 +48,6 @@ __FBSDID("$FreeBSD$");
#include <cam/scsi/scsi_enc_internal.h>
#include <cam/scsi/scsi_message.h>
-#include <opt_enc.h>
-
/*
* SAF-TE Type Device Emulation
*/
diff --git a/sys/cam/scsi/scsi_enc_ses.c b/sys/cam/scsi/scsi_enc_ses.c
index 9b6fba3..4adb593 100644
--- a/sys/cam/scsi/scsi_enc_ses.c
+++ b/sys/cam/scsi/scsi_enc_ses.c
@@ -56,8 +56,6 @@ __FBSDID("$FreeBSD$");
#include <cam/scsi/scsi_enc.h>
#include <cam/scsi/scsi_enc_internal.h>
-#include <opt_enc.h>
-
/* SES Native Type Device Support */
/* SES Diagnostic Page Codes */
@@ -1473,7 +1471,7 @@ ses_process_config(enc_softc_t *enc, struct enc_fsm_state *state,
out:
if (err)
- ses_softc_cleanup(enc);
+ ses_cache_free(enc, enc_cache);
else {
enc_update_request(enc, SES_UPDATE_GETSTATUS);
enc_update_request(enc, SES_UPDATE_GETELMDESCS);
diff --git a/sys/cam/scsi/scsi_ses.h b/sys/cam/scsi/scsi_ses.h
index ffc5493..0aeb22e 100644
--- a/sys/cam/scsi/scsi_ses.h
+++ b/sys/cam/scsi/scsi_ses.h
@@ -117,7 +117,7 @@ struct ses_enc_desc {
static inline uint8_t *
ses_enc_desc_last_byte(struct ses_enc_desc *encdesc)
{
- return (&encdesc->length + encdesc->length + 1);
+ return (&encdesc->length + encdesc->length);
}
static inline struct ses_enc_desc *
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c
index c796533..53ce61f 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/spa.c
@@ -2172,7 +2172,7 @@ spa_load_impl(spa_t *spa, uint64_t pool_guid, nvlist_t *config,
if (spa_version(spa) >= SPA_VERSION_FEATURES) {
boolean_t missing_feat_read = B_FALSE;
- nvlist_t *unsup_feat;
+ nvlist_t *unsup_feat, *enabled_feat;
if (spa_dir_prop(spa, DMU_POOL_FEATURES_FOR_READ,
&spa->spa_feat_for_read_obj) != 0) {
@@ -2189,27 +2189,32 @@ spa_load_impl(spa_t *spa, uint64_t pool_guid, nvlist_t *config,
return (spa_vdev_err(rvd, VDEV_AUX_CORRUPT_DATA, EIO));
}
- VERIFY(nvlist_alloc(&unsup_feat, NV_UNIQUE_NAME, KM_SLEEP) ==
- 0);
+ enabled_feat = fnvlist_alloc();
+ unsup_feat = fnvlist_alloc();
if (!feature_is_supported(spa->spa_meta_objset,
spa->spa_feat_for_read_obj, spa->spa_feat_desc_obj,
- unsup_feat))
+ unsup_feat, enabled_feat))
missing_feat_read = B_TRUE;
if (spa_writeable(spa) || state == SPA_LOAD_TRYIMPORT) {
if (!feature_is_supported(spa->spa_meta_objset,
spa->spa_feat_for_write_obj, spa->spa_feat_desc_obj,
- unsup_feat))
+ unsup_feat, enabled_feat)) {
missing_feat_write = B_TRUE;
+ }
}
+ fnvlist_add_nvlist(spa->spa_load_info,
+ ZPOOL_CONFIG_ENABLED_FEAT, enabled_feat);
+
if (!nvlist_empty(unsup_feat)) {
- VERIFY(nvlist_add_nvlist(spa->spa_load_info,
- ZPOOL_CONFIG_UNSUP_FEAT, unsup_feat) == 0);
+ fnvlist_add_nvlist(spa->spa_load_info,
+ ZPOOL_CONFIG_UNSUP_FEAT, unsup_feat);
}
- nvlist_free(unsup_feat);
+ fnvlist_free(enabled_feat);
+ fnvlist_free(unsup_feat);
if (!missing_feat_read) {
fnvlist_add_boolean(spa->spa_load_info,
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfeature.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfeature.h
index 9ff1c93..481e85b 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfeature.h
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfeature.h
@@ -35,7 +35,7 @@ extern "C" {
#endif
extern boolean_t feature_is_supported(objset_t *os, uint64_t obj,
- uint64_t desc_obj, nvlist_t *unsup_feat);
+ uint64_t desc_obj, nvlist_t *unsup_feat, nvlist_t *enabled_feat);
struct spa;
extern void spa_feature_create_zap_objects(struct spa *, dmu_tx_t *);
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfeature.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfeature.c
index ba72208..b9250df 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfeature.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfeature.c
@@ -173,7 +173,7 @@ typedef enum {
*/
boolean_t
feature_is_supported(objset_t *os, uint64_t obj, uint64_t desc_obj,
- nvlist_t *unsup_feat)
+ nvlist_t *unsup_feat, nvlist_t *enabled_feat)
{
boolean_t supported;
zap_cursor_t zc;
@@ -186,11 +186,16 @@ feature_is_supported(objset_t *os, uint64_t obj, uint64_t desc_obj,
ASSERT(za.za_integer_length == sizeof (uint64_t) &&
za.za_num_integers == 1);
+ if (NULL != enabled_feat) {
+ fnvlist_add_uint64(enabled_feat, za.za_name,
+ za.za_first_integer);
+ }
+
if (za.za_first_integer != 0 &&
!zfeature_is_supported(za.za_name)) {
supported = B_FALSE;
- if (unsup_feat != NULL) {
+ if (NULL != unsup_feat) {
char *desc = "";
char buf[MAXPATHLEN];
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c
index d22edbf..3a93d6f 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c
@@ -177,15 +177,9 @@ zvol_size_changed(zvol_state_t *zv)
pp = zv->zv_provider;
if (pp == NULL)
return;
- if (zv->zv_volsize == pp->mediasize)
- return;
- /*
- * Changing provider size is not really supported by GEOM, but it
- * should be safe when provider is closed.
- */
- if (zv->zv_total_opens > 0)
- return;
- pp->mediasize = zv->zv_volsize;
+ g_topology_lock();
+ g_resize_provider(pp, zv->zv_volsize);
+ g_topology_unlock();
#endif /* !sun */
}
diff --git a/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h b/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h
index f2d996a..64fd2e6 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h
+++ b/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h
@@ -520,6 +520,7 @@ typedef struct zpool_rewind_policy {
#define ZPOOL_CONFIG_LOAD_INFO "load_info" /* not stored on disk */
#define ZPOOL_CONFIG_REWIND_INFO "rewind_info" /* not stored on disk */
#define ZPOOL_CONFIG_UNSUP_FEAT "unsup_feat" /* not stored on disk */
+#define ZPOOL_CONFIG_ENABLED_FEAT "enabled_feat" /* not stored on disk */
#define ZPOOL_CONFIG_CAN_RDONLY "can_rdonly" /* not stored on disk */
#define ZPOOL_CONFIG_FEATURES_FOR_READ "features_for_read"
#define ZPOOL_CONFIG_FEATURE_STATS "feature_stats" /* not stored on disk */
diff --git a/sys/cddl/dev/dtrace/amd64/dtrace_subr.c b/sys/cddl/dev/dtrace/amd64/dtrace_subr.c
index 4895231..1ec1509 100644
--- a/sys/cddl/dev/dtrace/amd64/dtrace_subr.c
+++ b/sys/cddl/dev/dtrace/amd64/dtrace_subr.c
@@ -47,6 +47,8 @@
extern uintptr_t dtrace_in_probe_addr;
extern int dtrace_in_probe;
+extern void dtrace_getnanotime(struct timespec *tsp);
+
int dtrace_invop(uintptr_t, uintptr_t *, uintptr_t);
typedef struct dtrace_invop_hdlr {
@@ -461,8 +463,11 @@ dtrace_gethrtime()
uint64_t
dtrace_gethrestime(void)
{
- printf("%s(%d): XXX\n",__func__,__LINE__);
- return (0);
+ struct timespec current_time;
+
+ dtrace_getnanotime(&current_time);
+
+ return (current_time.tv_sec * 1000000000ULL + current_time.tv_nsec);
}
/* Function to handle DTrace traps during probes. See amd64/amd64/trap.c */
diff --git a/sys/cddl/dev/dtrace/i386/dtrace_subr.c b/sys/cddl/dev/dtrace/i386/dtrace_subr.c
index e8384bf..49e5c76 100644
--- a/sys/cddl/dev/dtrace/i386/dtrace_subr.c
+++ b/sys/cddl/dev/dtrace/i386/dtrace_subr.c
@@ -49,6 +49,8 @@ extern uintptr_t kernelbase;
extern uintptr_t dtrace_in_probe_addr;
extern int dtrace_in_probe;
+extern void dtrace_getnanotime(struct timespec *tsp);
+
int dtrace_invop(uintptr_t, uintptr_t *, uintptr_t);
typedef struct dtrace_invop_hdlr {
@@ -462,8 +464,11 @@ dtrace_gethrtime()
uint64_t
dtrace_gethrestime(void)
{
- printf("%s(%d): XXX\n",__func__,__LINE__);
- return (0);
+ struct timespec current_time;
+
+ dtrace_getnanotime(&current_time);
+
+ return (current_time.tv_sec * 1000000000ULL + current_time.tv_nsec);
}
/* Function to handle DTrace traps during probes. See i386/i386/trap.c */
diff --git a/sys/compat/ia32/ia32_sysvec.c b/sys/compat/ia32/ia32_sysvec.c
index 5a7b1b8..a8e52e8 100644
--- a/sys/compat/ia32/ia32_sysvec.c
+++ b/sys/compat/ia32/ia32_sysvec.c
@@ -117,7 +117,7 @@ struct sysentvec ia32_freebsd_sysvec = {
.sv_imgact_try = NULL,
.sv_minsigstksz = MINSIGSTKSZ,
.sv_pagesize = IA32_PAGE_SIZE,
- .sv_minuser = 0,
+ .sv_minuser = FREEBSD32_MINUSER,
.sv_maxuser = FREEBSD32_MAXUSER,
.sv_usrstack = FREEBSD32_USRSTACK,
.sv_psstrings = FREEBSD32_PS_STRINGS,
diff --git a/sys/compat/ia32/ia32_util.h b/sys/compat/ia32/ia32_util.h
index f153492..fe87b72 100644
--- a/sys/compat/ia32/ia32_util.h
+++ b/sys/compat/ia32/ia32_util.h
@@ -35,29 +35,30 @@
#include <vm/vm_param.h>
#include <vm/pmap.h>
-
#include <sys/exec.h>
#include <sys/sysent.h>
#include <sys/cdefs.h>
#ifdef __ia64__
-#define FREEBSD32_MAXUSER ((1ul << 32) - IA32_PAGE_SIZE * 2)
+#define FREEBSD32_MAXUSER ((1ul << 32) - IA32_PAGE_SIZE * 2)
+#define FREEBSD32_MINUSER 0
#define FREEBSD32_SHAREDPAGE 0
-#define FREEBSD32_USRSTACK FREEBSD32_MAXUSER
-#else
+#define FREEBSD32_USRSTACK FREEBSD32_MAXUSER
+#else /* __ia64__ */
#define FREEBSD32_MAXUSER ((1ul << 32) - IA32_PAGE_SIZE)
+#define FREEBSD32_MINUSER 0
#define FREEBSD32_SHAREDPAGE (FREEBSD32_MAXUSER - IA32_PAGE_SIZE)
-#define FREEBSD32_USRSTACK FREEBSD32_SHAREDPAGE
-#endif
+#define FREEBSD32_USRSTACK FREEBSD32_SHAREDPAGE
+#endif /* __ia64 */
#define IA32_PAGE_SIZE 4096
#define IA32_MAXDSIZ (512*1024*1024) /* 512MB */
#define IA32_MAXSSIZ (64*1024*1024) /* 64MB */
-#define IA32_MAXVMEM 0 /* Unlimited */
+#define IA32_MAXVMEM 0 /* Unlimited */
struct syscall_args;
int ia32_fetch_syscall_args(struct thread *td, struct syscall_args *sa);
void ia32_set_syscall_retval(struct thread *, int);
void ia32_fixlimit(struct rlimit *rl, int which);
-#endif
+#endif /* _COMPAT_IA32_IA32_UTIL_H */
diff --git a/sys/conf/Makefile.arm b/sys/conf/Makefile.arm
index d099256..57d7fb6 100644
--- a/sys/conf/Makefile.arm
+++ b/sys/conf/Makefile.arm
@@ -105,7 +105,7 @@ ${KERNEL_KO}.tramp: ${KERNEL_KO} $S/$M/$M/inckern.S $S/$M/$M/elf_trampoline.c
>opt_kernname.h
eval $$(stat -s ${KERNEL_KO}.tmp) && \
echo "#define KERNSIZE $$st_size" >>opt_kernname.h
- gzip -9 ${KERNEL_KO}.tmp
+ gzip -f9 ${KERNEL_KO}.tmp
eval $$(stat -s ${KERNEL_KO}.tmp.gz) && \
echo "#define KERNCOMPSIZE $$st_size" >>opt_kernname.h
${CC} -O2 -ffreestanding -DKZIP -I. -I$S -c $S/kern/inflate.c -o \
diff --git a/sys/conf/NOTES b/sys/conf/NOTES
index 895a301..b625663 100644
--- a/sys/conf/NOTES
+++ b/sys/conf/NOTES
@@ -435,7 +435,7 @@ options KTRACE_REQUEST_POOL=101
#
# KTR is a kernel tracing facility imported from BSD/OS. It is
# enabled with the KTR option. KTR_ENTRIES defines the number of
-# entries in the circular trace buffer; it must be a power of two.
+# entries in the circular trace buffer; it may be an arbitrary number.
# KTR_COMPILE defines the mask of events to compile into the kernel as
# defined by the KTR_* constants in <sys/ktr.h>. KTR_MASK defines the
# initial value of the ktr_mask variable which determines at runtime
diff --git a/sys/conf/files b/sys/conf/files
index c0c52da..6be8ccb 100644
--- a/sys/conf/files
+++ b/sys/conf/files
@@ -639,6 +639,7 @@ dev/aha/aha_isa.c optional aha isa
dev/aha/aha_mca.c optional aha mca
dev/ahb/ahb.c optional ahb eisa
dev/ahci/ahci.c optional ahci pci
+dev/ahci/ahciem.c optional ahci pci
dev/aic/aic.c optional aic
dev/aic/aic_pccard.c optional aic pccard
dev/aic7xxx/ahc_eisa.c optional ahc eisa
@@ -729,6 +730,8 @@ dev/ath/if_ath_led.c optional ath \
compile-with "${NORMAL_C} -I$S/dev/ath"
dev/ath/if_ath_tx.c optional ath \
compile-with "${NORMAL_C} -I$S/dev/ath"
+dev/ath/if_ath_tx_edma.c optional ath \
+ compile-with "${NORMAL_C} -I$S/dev/ath"
dev/ath/if_ath_tx_ht.c optional ath \
compile-with "${NORMAL_C} -I$S/dev/ath"
dev/ath/if_ath_tdma.c optional ath \
@@ -2207,6 +2210,16 @@ dev/utopia/idtphy.c optional utopia
dev/utopia/suni.c optional utopia
dev/utopia/utopia.c optional utopia
dev/vge/if_vge.c optional vge
+#
+# virtio support
+#
+dev/virtio/pci/virtio_pci.c optional vtnet
+dev/virtio/virtio.c optional vtnet
+dev/virtio/virtqueue.c optional vtnet
+dev/virtio/network/if_vtnet.c optional vtnet
+dev/virtio/virtio_bus_if.m optional vtnet
+dev/virtio/virtio_if.m optional vtnet
+
dev/vkbd/vkbd.c optional vkbd
dev/vr/if_vr.c optional vr pci
dev/vte/if_vte.c optional vte pci
@@ -3551,7 +3564,6 @@ vm/sg_pager.c standard
vm/swap_pager.c standard
vm/uma_core.c standard
vm/uma_dbg.c standard
-vm/vm_contig.c standard
vm/memguard.c optional DEBUG_MEMGUARD
vm/vm_fault.c standard
vm/vm_glue.c standard
diff --git a/sys/contrib/libfdt/fdt.c b/sys/contrib/libfdt/fdt.c
index b1130c2..e56833a 100644
--- a/sys/contrib/libfdt/fdt.c
+++ b/sys/contrib/libfdt/fdt.c
@@ -149,6 +149,15 @@ int _fdt_check_node_offset(const void *fdt, int offset)
return offset;
}
+int _fdt_check_prop_offset(const void *fdt, int offset)
+{
+ if ((offset < 0) || (offset % FDT_TAGSIZE)
+ || (fdt_next_tag(fdt, offset, &offset) != FDT_PROP))
+ return -FDT_ERR_BADOFFSET;
+
+ return offset;
+}
+
int fdt_next_node(const void *fdt, int offset, int *depth)
{
int nextoffset = 0;
diff --git a/sys/contrib/libfdt/fdt_empty_tree.c b/sys/contrib/libfdt/fdt_empty_tree.c
new file mode 100644
index 0000000..f72d13b
--- /dev/null
+++ b/sys/contrib/libfdt/fdt_empty_tree.c
@@ -0,0 +1,84 @@
+/*
+ * libfdt - Flat Device Tree manipulation
+ * Copyright (C) 2012 David Gibson, IBM Corporation.
+ *
+ * libfdt is dual licensed: you can use it either under the terms of
+ * the GPL, or the BSD license, at your option.
+ *
+ * a) This library 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 library 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 library; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ *
+ * Alternatively,
+ *
+ * b) Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer.
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "libfdt_env.h"
+
+#include <fdt.h>
+#include <libfdt.h>
+
+#include "libfdt_internal.h"
+
+int fdt_create_empty_tree(void *buf, int bufsize)
+{
+ int err;
+
+ err = fdt_create(buf, bufsize);
+ if (err)
+ return err;
+
+ err = fdt_finish_reservemap(buf);
+ if (err)
+ return err;
+
+ err = fdt_begin_node(buf, "");
+ if (err)
+ return err;
+
+ err = fdt_end_node(buf);
+ if (err)
+ return err;
+
+ err = fdt_finish(buf);
+ if (err)
+ return err;
+
+ return fdt_open_into(buf, buf, bufsize);
+}
+
diff --git a/sys/contrib/libfdt/fdt_ro.c b/sys/contrib/libfdt/fdt_ro.c
index 951cc74..02b6d68 100644
--- a/sys/contrib/libfdt/fdt_ro.c
+++ b/sys/contrib/libfdt/fdt_ro.c
@@ -105,6 +105,30 @@ int fdt_num_mem_rsv(const void *fdt)
return i;
}
+static int _nextprop(const void *fdt, int offset)
+{
+ uint32_t tag;
+ int nextoffset;
+
+ do {
+ tag = fdt_next_tag(fdt, offset, &nextoffset);
+
+ switch (tag) {
+ case FDT_END:
+ if (nextoffset >= 0)
+ return -FDT_ERR_BADSTRUCTURE;
+ else
+ return nextoffset;
+
+ case FDT_PROP:
+ return offset;
+ }
+ offset = nextoffset;
+ } while (tag == FDT_NOP);
+
+ return -FDT_ERR_NOTFOUND;
+}
+
int fdt_subnode_offset_namelen(const void *fdt, int offset,
const char *name, int namelen)
{
@@ -194,52 +218,66 @@ const char *fdt_get_name(const void *fdt, int nodeoffset, int *len)
return NULL;
}
-const struct fdt_property *fdt_get_property_namelen(const void *fdt,
- int nodeoffset,
- const char *name,
- int namelen, int *lenp)
+int fdt_first_property_offset(const void *fdt, int nodeoffset)
+{
+ int offset;
+
+ if ((offset = _fdt_check_node_offset(fdt, nodeoffset)) < 0)
+ return offset;
+
+ return _nextprop(fdt, offset);
+}
+
+int fdt_next_property_offset(const void *fdt, int offset)
+{
+ if ((offset = _fdt_check_prop_offset(fdt, offset)) < 0)
+ return offset;
+
+ return _nextprop(fdt, offset);
+}
+
+const struct fdt_property *fdt_get_property_by_offset(const void *fdt,
+ int offset,
+ int *lenp)
{
- uint32_t tag;
- const struct fdt_property *prop;
- int offset, nextoffset;
int err;
+ const struct fdt_property *prop;
- if (((err = fdt_check_header(fdt)) != 0)
- || ((err = _fdt_check_node_offset(fdt, nodeoffset)) < 0))
- goto fail;
+ if ((err = _fdt_check_prop_offset(fdt, offset)) < 0) {
+ if (lenp)
+ *lenp = err;
+ return NULL;
+ }
- nextoffset = err;
- do {
- offset = nextoffset;
+ prop = _fdt_offset_ptr(fdt, offset);
- tag = fdt_next_tag(fdt, offset, &nextoffset);
- switch (tag) {
- case FDT_END:
- if (nextoffset < 0)
- err = nextoffset;
- else
- /* FDT_END tag with unclosed nodes */
- err = -FDT_ERR_BADSTRUCTURE;
- goto fail;
+ if (lenp)
+ *lenp = fdt32_to_cpu(prop->len);
- case FDT_PROP:
- prop = _fdt_offset_ptr(fdt, offset);
- if (_fdt_string_eq(fdt, fdt32_to_cpu(prop->nameoff),
- name, namelen)) {
- /* Found it! */
- if (lenp)
- *lenp = fdt32_to_cpu(prop->len);
-
- return prop;
- }
+ return prop;
+}
+
+const struct fdt_property *fdt_get_property_namelen(const void *fdt,
+ int offset,
+ const char *name,
+ int namelen, int *lenp)
+{
+ for (offset = fdt_first_property_offset(fdt, offset);
+ (offset >= 0);
+ (offset = fdt_next_property_offset(fdt, offset))) {
+ const struct fdt_property *prop;
+
+ if (!(prop = fdt_get_property_by_offset(fdt, offset, lenp))) {
+ offset = -FDT_ERR_INTERNAL;
break;
}
- } while ((tag != FDT_BEGIN_NODE) && (tag != FDT_END_NODE));
+ if (_fdt_string_eq(fdt, fdt32_to_cpu(prop->nameoff),
+ name, namelen))
+ return prop;
+ }
- err = -FDT_ERR_NOTFOUND;
- fail:
if (lenp)
- *lenp = err;
+ *lenp = offset;
return NULL;
}
@@ -263,6 +301,19 @@ const void *fdt_getprop_namelen(const void *fdt, int nodeoffset,
return prop->data;
}
+const void *fdt_getprop_by_offset(const void *fdt, int offset,
+ const char **namep, int *lenp)
+{
+ const struct fdt_property *prop;
+
+ prop = fdt_get_property_by_offset(fdt, offset, lenp);
+ if (!prop)
+ return NULL;
+ if (namep)
+ *namep = fdt_string(fdt, fdt32_to_cpu(prop->nameoff));
+ return prop->data;
+}
+
const void *fdt_getprop(const void *fdt, int nodeoffset,
const char *name, int *lenp)
{
diff --git a/sys/contrib/libfdt/fdt_rw.c b/sys/contrib/libfdt/fdt_rw.c
index 994037b..24437df 100644
--- a/sys/contrib/libfdt/fdt_rw.c
+++ b/sys/contrib/libfdt/fdt_rw.c
@@ -289,6 +289,33 @@ int fdt_setprop(void *fdt, int nodeoffset, const char *name,
return 0;
}
+int fdt_appendprop(void *fdt, int nodeoffset, const char *name,
+ const void *val, int len)
+{
+ struct fdt_property *prop;
+ int err, oldlen, newlen;
+
+ FDT_RW_CHECK_HEADER(fdt);
+
+ prop = fdt_get_property_w(fdt, nodeoffset, name, &oldlen);
+ if (prop) {
+ newlen = len + oldlen;
+ err = _fdt_splice_struct(fdt, prop->data,
+ FDT_TAGALIGN(oldlen),
+ FDT_TAGALIGN(newlen));
+ if (err)
+ return err;
+ prop->len = cpu_to_fdt32(newlen);
+ memcpy(prop->data + oldlen, val, len);
+ } else {
+ err = _fdt_add_property(fdt, nodeoffset, name, len, &prop);
+ if (err)
+ return err;
+ memcpy(prop->data, val, len);
+ }
+ return 0;
+}
+
int fdt_delprop(void *fdt, int nodeoffset, const char *name)
{
struct fdt_property *prop;
diff --git a/sys/contrib/libfdt/libfdt.h b/sys/contrib/libfdt/libfdt.h
index 18de52b..73f4975 100644
--- a/sys/contrib/libfdt/libfdt.h
+++ b/sys/contrib/libfdt/libfdt.h
@@ -343,6 +343,75 @@ int fdt_path_offset(const void *fdt, const char *path);
const char *fdt_get_name(const void *fdt, int nodeoffset, int *lenp);
/**
+ * fdt_first_property_offset - find the offset of a node's first property
+ * @fdt: pointer to the device tree blob
+ * @nodeoffset: structure block offset of a node
+ *
+ * fdt_first_property_offset() finds the first property of the node at
+ * the given structure block offset.
+ *
+ * returns:
+ * structure block offset of the property (>=0), on success
+ * -FDT_ERR_NOTFOUND, if the requested node has no properties
+ * -FDT_ERR_BADOFFSET, if nodeoffset did not point to an FDT_BEGIN_NODE tag
+ * -FDT_ERR_BADMAGIC,
+ * -FDT_ERR_BADVERSION,
+ * -FDT_ERR_BADSTATE,
+ * -FDT_ERR_BADSTRUCTURE,
+ * -FDT_ERR_TRUNCATED, standard meanings.
+ */
+int fdt_first_property_offset(const void *fdt, int nodeoffset);
+
+/**
+ * fdt_next_property_offset - step through a node's properties
+ * @fdt: pointer to the device tree blob
+ * @offset: structure block offset of a property
+ *
+ * fdt_next_property_offset() finds the property immediately after the
+ * one at the given structure block offset. This will be a property
+ * of the same node as the given property.
+ *
+ * returns:
+ * structure block offset of the next property (>=0), on success
+ * -FDT_ERR_NOTFOUND, if the given property is the last in its node
+ * -FDT_ERR_BADOFFSET, if nodeoffset did not point to an FDT_PROP tag
+ * -FDT_ERR_BADMAGIC,
+ * -FDT_ERR_BADVERSION,
+ * -FDT_ERR_BADSTATE,
+ * -FDT_ERR_BADSTRUCTURE,
+ * -FDT_ERR_TRUNCATED, standard meanings.
+ */
+int fdt_next_property_offset(const void *fdt, int offset);
+
+/**
+ * fdt_get_property_by_offset - retrieve the property at a given offset
+ * @fdt: pointer to the device tree blob
+ * @offset: offset of the property to retrieve
+ * @lenp: pointer to an integer variable (will be overwritten) or NULL
+ *
+ * fdt_get_property_by_offset() retrieves a pointer to the
+ * fdt_property structure within the device tree blob at the given
+ * offset. If lenp is non-NULL, the length of the property value is
+ * also returned, in the integer pointed to by lenp.
+ *
+ * returns:
+ * pointer to the structure representing the property
+ * if lenp is non-NULL, *lenp contains the length of the property
+ * value (>=0)
+ * NULL, on error
+ * if lenp is non-NULL, *lenp contains an error code (<0):
+ * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_PROP tag
+ * -FDT_ERR_BADMAGIC,
+ * -FDT_ERR_BADVERSION,
+ * -FDT_ERR_BADSTATE,
+ * -FDT_ERR_BADSTRUCTURE,
+ * -FDT_ERR_TRUNCATED, standard meanings
+ */
+const struct fdt_property *fdt_get_property_by_offset(const void *fdt,
+ int offset,
+ int *lenp);
+
+/**
* fdt_get_property_namelen - find a property based on substring
* @fdt: pointer to the device tree blob
* @nodeoffset: offset of the node whose property to find
@@ -396,6 +465,40 @@ static inline struct fdt_property *fdt_get_property_w(void *fdt, int nodeoffset,
}
/**
+ * fdt_getprop_by_offset - retrieve the value of a property at a given offset
+ * @fdt: pointer to the device tree blob
+ * @ffset: offset of the property to read
+ * @namep: pointer to a string variable (will be overwritten) or NULL
+ * @lenp: pointer to an integer variable (will be overwritten) or NULL
+ *
+ * fdt_getprop_by_offset() retrieves a pointer to the value of the
+ * property at structure block offset 'offset' (this will be a pointer
+ * to within the device blob itself, not a copy of the value). If
+ * lenp is non-NULL, the length of the property value is also
+ * returned, in the integer pointed to by lenp. If namep is non-NULL,
+ * the property's namne will also be returned in the char * pointed to
+ * by namep (this will be a pointer to within the device tree's string
+ * block, not a new copy of the name).
+ *
+ * returns:
+ * pointer to the property's value
+ * if lenp is non-NULL, *lenp contains the length of the property
+ * value (>=0)
+ * if namep is non-NULL *namep contiains a pointer to the property
+ * name.
+ * NULL, on error
+ * if lenp is non-NULL, *lenp contains an error code (<0):
+ * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_PROP tag
+ * -FDT_ERR_BADMAGIC,
+ * -FDT_ERR_BADVERSION,
+ * -FDT_ERR_BADSTATE,
+ * -FDT_ERR_BADSTRUCTURE,
+ * -FDT_ERR_TRUNCATED, standard meanings
+ */
+const void *fdt_getprop_by_offset(const void *fdt, int offset,
+ const char **namep, int *lenp);
+
+/**
* fdt_getprop_namelen - get property value based on substring
* @fdt: pointer to the device tree blob
* @nodeoffset: offset of the node whose property to find
@@ -749,17 +852,17 @@ int fdt_setprop_inplace(void *fdt, int nodeoffset, const char *name,
const void *val, int len);
/**
- * fdt_setprop_inplace_cell - change the value of a single-cell property
+ * fdt_setprop_inplace_u32 - change the value of a 32-bit integer property
* @fdt: pointer to the device tree blob
* @nodeoffset: offset of the node whose property to change
* @name: name of the property to change
- * @val: cell (32-bit integer) value to replace the property with
+ * @val: 32-bit integer value to replace the property with
*
- * fdt_setprop_inplace_cell() replaces the value of a given property
- * with the 32-bit integer cell value in val, converting val to
- * big-endian if necessary. This function cannot change the size of a
- * property, and so will only work if the property already exists and
- * has length 4.
+ * fdt_setprop_inplace_u32() replaces the value of a given property
+ * with the 32-bit integer value in val, converting val to big-endian
+ * if necessary. This function cannot change the size of a property,
+ * and so will only work if the property already exists and has length
+ * 4.
*
* This function will alter only the bytes in the blob which contain
* the given property value, and will not alter or move any other part
@@ -768,7 +871,7 @@ int fdt_setprop_inplace(void *fdt, int nodeoffset, const char *name,
* returns:
* 0, on success
* -FDT_ERR_NOSPACE, if the property's length is not equal to 4
- * -FDT_ERR_NOTFOUND, node does not have the named property
+ * -FDT_ERR_NOTFOUND, node does not have the named property
* -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
* -FDT_ERR_BADMAGIC,
* -FDT_ERR_BADVERSION,
@@ -776,14 +879,60 @@ int fdt_setprop_inplace(void *fdt, int nodeoffset, const char *name,
* -FDT_ERR_BADSTRUCTURE,
* -FDT_ERR_TRUNCATED, standard meanings
*/
-static inline int fdt_setprop_inplace_cell(void *fdt, int nodeoffset,
- const char *name, uint32_t val)
+static inline int fdt_setprop_inplace_u32(void *fdt, int nodeoffset,
+ const char *name, uint32_t val)
{
val = cpu_to_fdt32(val);
return fdt_setprop_inplace(fdt, nodeoffset, name, &val, sizeof(val));
}
/**
+ * fdt_setprop_inplace_u64 - change the value of a 64-bit integer property
+ * @fdt: pointer to the device tree blob
+ * @nodeoffset: offset of the node whose property to change
+ * @name: name of the property to change
+ * @val: 64-bit integer value to replace the property with
+ *
+ * fdt_setprop_inplace_u64() replaces the value of a given property
+ * with the 64-bit integer value in val, converting val to big-endian
+ * if necessary. This function cannot change the size of a property,
+ * and so will only work if the property already exists and has length
+ * 8.
+ *
+ * This function will alter only the bytes in the blob which contain
+ * the given property value, and will not alter or move any other part
+ * of the tree.
+ *
+ * returns:
+ * 0, on success
+ * -FDT_ERR_NOSPACE, if the property's length is not equal to 8
+ * -FDT_ERR_NOTFOUND, node does not have the named property
+ * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
+ * -FDT_ERR_BADMAGIC,
+ * -FDT_ERR_BADVERSION,
+ * -FDT_ERR_BADSTATE,
+ * -FDT_ERR_BADSTRUCTURE,
+ * -FDT_ERR_TRUNCATED, standard meanings
+ */
+static inline int fdt_setprop_inplace_u64(void *fdt, int nodeoffset,
+ const char *name, uint64_t val)
+{
+ val = cpu_to_fdt64(val);
+ return fdt_setprop_inplace(fdt, nodeoffset, name, &val, sizeof(val));
+}
+
+/**
+ * fdt_setprop_inplace_cell - change the value of a single-cell property
+ *
+ * This is an alternative name for fdt_setprop_inplace_u32()
+ */
+static inline int fdt_setprop_inplace_cell(void *fdt, int nodeoffset,
+ const char *name, uint32_t val)
+{
+ return fdt_setprop_inplace_u32(fdt, nodeoffset, name, val);
+}
+
+/**
* fdt_nop_property - replace a property with nop tags
* @fdt: pointer to the device tree blob
* @nodeoffset: offset of the node whose property to nop
@@ -842,11 +991,20 @@ int fdt_add_reservemap_entry(void *fdt, uint64_t addr, uint64_t size);
int fdt_finish_reservemap(void *fdt);
int fdt_begin_node(void *fdt, const char *name);
int fdt_property(void *fdt, const char *name, const void *val, int len);
-static inline int fdt_property_cell(void *fdt, const char *name, uint32_t val)
+static inline int fdt_property_u32(void *fdt, const char *name, uint32_t val)
{
val = cpu_to_fdt32(val);
return fdt_property(fdt, name, &val, sizeof(val));
}
+static inline int fdt_property_u64(void *fdt, const char *name, uint64_t val)
+{
+ val = cpu_to_fdt64(val);
+ return fdt_property(fdt, name, &val, sizeof(val));
+}
+static inline int fdt_property_cell(void *fdt, const char *name, uint32_t val)
+{
+ return fdt_property_u32(fdt, name, val);
+}
#define fdt_property_string(fdt, name, str) \
fdt_property(fdt, name, str, strlen(str)+1)
int fdt_end_node(void *fdt);
@@ -856,6 +1014,7 @@ int fdt_finish(void *fdt);
/* Read-write functions */
/**********************************************************************/
+int fdt_create_empty_tree(void *buf, int bufsize);
int fdt_open_into(const void *fdt, void *buf, int bufsize);
int fdt_pack(void *fdt);
@@ -965,14 +1124,14 @@ int fdt_setprop(void *fdt, int nodeoffset, const char *name,
const void *val, int len);
/**
- * fdt_setprop_cell - set a property to a single cell value
+ * fdt_setprop_u32 - set a property to a 32-bit integer
* @fdt: pointer to the device tree blob
* @nodeoffset: offset of the node whose property to change
* @name: name of the property to change
* @val: 32-bit integer value for the property (native endian)
*
- * fdt_setprop_cell() sets the value of the named property in the
- * given node to the given cell value (converting to big-endian if
+ * fdt_setprop_u32() sets the value of the named property in the given
+ * node to the given 32-bit integer value (converting to big-endian if
* necessary), or creates a new property with that value if it does
* not already exist.
*
@@ -992,14 +1151,60 @@ int fdt_setprop(void *fdt, int nodeoffset, const char *name,
* -FDT_ERR_BADLAYOUT,
* -FDT_ERR_TRUNCATED, standard meanings
*/
-static inline int fdt_setprop_cell(void *fdt, int nodeoffset, const char *name,
- uint32_t val)
+static inline int fdt_setprop_u32(void *fdt, int nodeoffset, const char *name,
+ uint32_t val)
{
val = cpu_to_fdt32(val);
return fdt_setprop(fdt, nodeoffset, name, &val, sizeof(val));
}
/**
+ * fdt_setprop_u64 - set a property to a 64-bit integer
+ * @fdt: pointer to the device tree blob
+ * @nodeoffset: offset of the node whose property to change
+ * @name: name of the property to change
+ * @val: 64-bit integer value for the property (native endian)
+ *
+ * fdt_setprop_u64() sets the value of the named property in the given
+ * node to the given 64-bit integer value (converting to big-endian if
+ * necessary), or creates a new property with that value if it does
+ * not already exist.
+ *
+ * This function may insert or delete data from the blob, and will
+ * therefore change the offsets of some existing nodes.
+ *
+ * returns:
+ * 0, on success
+ * -FDT_ERR_NOSPACE, there is insufficient free space in the blob to
+ * contain the new property value
+ * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
+ * -FDT_ERR_BADLAYOUT,
+ * -FDT_ERR_BADMAGIC,
+ * -FDT_ERR_BADVERSION,
+ * -FDT_ERR_BADSTATE,
+ * -FDT_ERR_BADSTRUCTURE,
+ * -FDT_ERR_BADLAYOUT,
+ * -FDT_ERR_TRUNCATED, standard meanings
+ */
+static inline int fdt_setprop_u64(void *fdt, int nodeoffset, const char *name,
+ uint64_t val)
+{
+ val = cpu_to_fdt64(val);
+ return fdt_setprop(fdt, nodeoffset, name, &val, sizeof(val));
+}
+
+/**
+ * fdt_setprop_cell - set a property to a single cell value
+ *
+ * This is an alternative name for fdt_setprop_u32()
+ */
+static inline int fdt_setprop_cell(void *fdt, int nodeoffset, const char *name,
+ uint32_t val)
+{
+ return fdt_setprop_u32(fdt, nodeoffset, name, val);
+}
+
+/**
* fdt_setprop_string - set a property to a string value
* @fdt: pointer to the device tree blob
* @nodeoffset: offset of the node whose property to change
@@ -1031,6 +1236,147 @@ static inline int fdt_setprop_cell(void *fdt, int nodeoffset, const char *name,
fdt_setprop((fdt), (nodeoffset), (name), (str), strlen(str)+1)
/**
+ * fdt_appendprop - append to or create a property
+ * @fdt: pointer to the device tree blob
+ * @nodeoffset: offset of the node whose property to change
+ * @name: name of the property to append to
+ * @val: pointer to data to append to the property value
+ * @len: length of the data to append to the property value
+ *
+ * fdt_appendprop() appends the value to the named property in the
+ * given node, creating the property if it does not already exist.
+ *
+ * This function may insert data into the blob, and will therefore
+ * change the offsets of some existing nodes.
+ *
+ * returns:
+ * 0, on success
+ * -FDT_ERR_NOSPACE, there is insufficient free space in the blob to
+ * contain the new property value
+ * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
+ * -FDT_ERR_BADLAYOUT,
+ * -FDT_ERR_BADMAGIC,
+ * -FDT_ERR_BADVERSION,
+ * -FDT_ERR_BADSTATE,
+ * -FDT_ERR_BADSTRUCTURE,
+ * -FDT_ERR_BADLAYOUT,
+ * -FDT_ERR_TRUNCATED, standard meanings
+ */
+int fdt_appendprop(void *fdt, int nodeoffset, const char *name,
+ const void *val, int len);
+
+/**
+ * fdt_appendprop_u32 - append a 32-bit integer value to a property
+ * @fdt: pointer to the device tree blob
+ * @nodeoffset: offset of the node whose property to change
+ * @name: name of the property to change
+ * @val: 32-bit integer value to append to the property (native endian)
+ *
+ * fdt_appendprop_u32() appends the given 32-bit integer value
+ * (converting to big-endian if necessary) to the value of the named
+ * property in the given node, or creates a new property with that
+ * value if it does not already exist.
+ *
+ * This function may insert data into the blob, and will therefore
+ * change the offsets of some existing nodes.
+ *
+ * returns:
+ * 0, on success
+ * -FDT_ERR_NOSPACE, there is insufficient free space in the blob to
+ * contain the new property value
+ * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
+ * -FDT_ERR_BADLAYOUT,
+ * -FDT_ERR_BADMAGIC,
+ * -FDT_ERR_BADVERSION,
+ * -FDT_ERR_BADSTATE,
+ * -FDT_ERR_BADSTRUCTURE,
+ * -FDT_ERR_BADLAYOUT,
+ * -FDT_ERR_TRUNCATED, standard meanings
+ */
+static inline int fdt_appendprop_u32(void *fdt, int nodeoffset,
+ const char *name, uint32_t val)
+{
+ val = cpu_to_fdt32(val);
+ return fdt_appendprop(fdt, nodeoffset, name, &val, sizeof(val));
+}
+
+/**
+ * fdt_appendprop_u64 - append a 64-bit integer value to a property
+ * @fdt: pointer to the device tree blob
+ * @nodeoffset: offset of the node whose property to change
+ * @name: name of the property to change
+ * @val: 64-bit integer value to append to the property (native endian)
+ *
+ * fdt_appendprop_u64() appends the given 64-bit integer value
+ * (converting to big-endian if necessary) to the value of the named
+ * property in the given node, or creates a new property with that
+ * value if it does not already exist.
+ *
+ * This function may insert data into the blob, and will therefore
+ * change the offsets of some existing nodes.
+ *
+ * returns:
+ * 0, on success
+ * -FDT_ERR_NOSPACE, there is insufficient free space in the blob to
+ * contain the new property value
+ * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
+ * -FDT_ERR_BADLAYOUT,
+ * -FDT_ERR_BADMAGIC,
+ * -FDT_ERR_BADVERSION,
+ * -FDT_ERR_BADSTATE,
+ * -FDT_ERR_BADSTRUCTURE,
+ * -FDT_ERR_BADLAYOUT,
+ * -FDT_ERR_TRUNCATED, standard meanings
+ */
+static inline int fdt_appendprop_u64(void *fdt, int nodeoffset,
+ const char *name, uint64_t val)
+{
+ val = cpu_to_fdt64(val);
+ return fdt_appendprop(fdt, nodeoffset, name, &val, sizeof(val));
+}
+
+/**
+ * fdt_appendprop_cell - append a single cell value to a property
+ *
+ * This is an alternative name for fdt_appendprop_u32()
+ */
+static inline int fdt_appendprop_cell(void *fdt, int nodeoffset,
+ const char *name, uint32_t val)
+{
+ return fdt_appendprop_u32(fdt, nodeoffset, name, val);
+}
+
+/**
+ * fdt_appendprop_string - append a string to a property
+ * @fdt: pointer to the device tree blob
+ * @nodeoffset: offset of the node whose property to change
+ * @name: name of the property to change
+ * @str: string value to append to the property
+ *
+ * fdt_appendprop_string() appends the given string to the value of
+ * the named property in the given node, or creates a new property
+ * with that value if it does not already exist.
+ *
+ * This function may insert data into the blob, and will therefore
+ * change the offsets of some existing nodes.
+ *
+ * returns:
+ * 0, on success
+ * -FDT_ERR_NOSPACE, there is insufficient free space in the blob to
+ * contain the new property value
+ * -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
+ * -FDT_ERR_BADLAYOUT,
+ * -FDT_ERR_BADMAGIC,
+ * -FDT_ERR_BADVERSION,
+ * -FDT_ERR_BADSTATE,
+ * -FDT_ERR_BADSTRUCTURE,
+ * -FDT_ERR_BADLAYOUT,
+ * -FDT_ERR_TRUNCATED, standard meanings
+ */
+#define fdt_appendprop_string(fdt, nodeoffset, name, str) \
+ fdt_appendprop((fdt), (nodeoffset), (name), (str), strlen(str)+1)
+
+/**
* fdt_delprop - delete a property
* @fdt: pointer to the device tree blob
* @nodeoffset: offset of the node whose property to nop
diff --git a/sys/contrib/libfdt/libfdt_env.h b/sys/contrib/libfdt/libfdt_env.h
index 7ac3f52..f91f137 100644
--- a/sys/contrib/libfdt/libfdt_env.h
+++ b/sys/contrib/libfdt/libfdt_env.h
@@ -13,19 +13,25 @@
#include <string.h>
#endif
-#define _B(n) ((unsigned long long)((uint8_t *)&x)[n])
+#define EXTRACT_BYTE(n) ((unsigned long long)((uint8_t *)&x)[n])
+static inline uint16_t fdt16_to_cpu(uint16_t x)
+{
+ return (EXTRACT_BYTE(0) << 8) | EXTRACT_BYTE(1);
+}
+#define cpu_to_fdt16(x) fdt16_to_cpu(x)
+
static inline uint32_t fdt32_to_cpu(uint32_t x)
{
- return (_B(0) << 24) | (_B(1) << 16) | (_B(2) << 8) | _B(3);
+ return (EXTRACT_BYTE(0) << 24) | (EXTRACT_BYTE(1) << 16) | (EXTRACT_BYTE(2) << 8) | EXTRACT_BYTE(3);
}
#define cpu_to_fdt32(x) fdt32_to_cpu(x)
static inline uint64_t fdt64_to_cpu(uint64_t x)
{
- return (_B(0) << 56) | (_B(1) << 48) | (_B(2) << 40) | (_B(3) << 32)
- | (_B(4) << 24) | (_B(5) << 16) | (_B(6) << 8) | _B(7);
+ return (EXTRACT_BYTE(0) << 56) | (EXTRACT_BYTE(1) << 48) | (EXTRACT_BYTE(2) << 40) | (EXTRACT_BYTE(3) << 32)
+ | (EXTRACT_BYTE(4) << 24) | (EXTRACT_BYTE(5) << 16) | (EXTRACT_BYTE(6) << 8) | EXTRACT_BYTE(7);
}
#define cpu_to_fdt64(x) fdt64_to_cpu(x)
-#undef _B
+#undef EXTRACT_BYTE
#endif /* _LIBFDT_ENV_H */
diff --git a/sys/contrib/libfdt/libfdt_internal.h b/sys/contrib/libfdt/libfdt_internal.h
index d2dcbd6..381133b 100644
--- a/sys/contrib/libfdt/libfdt_internal.h
+++ b/sys/contrib/libfdt/libfdt_internal.h
@@ -63,6 +63,7 @@
}
int _fdt_check_node_offset(const void *fdt, int offset);
+int _fdt_check_prop_offset(const void *fdt, int offset);
const char *_fdt_find_string(const char *strtab, int tabsize, const char *s);
int _fdt_node_end_offset(void *fdt, int nodeoffset);
diff --git a/sys/contrib/pf/net/pf_if.c b/sys/contrib/pf/net/pf_if.c
index 6336c79..b4491b8 100644
--- a/sys/contrib/pf/net/pf_if.c
+++ b/sys/contrib/pf/net/pf_if.c
@@ -506,8 +506,7 @@ pfi_dynaddr_setup(struct pf_addr_wrap *aw, sa_family_t af)
if (aw->type != PF_ADDR_DYNIFTL)
return (0);
#ifdef __FreeBSD__
- /* XXX: revisit! */
- if ((dyn = pool_get(&V_pfi_addr_pl, PR_WAITOK | PR_ZERO))
+ if ((dyn = pool_get(&V_pfi_addr_pl, PR_NOWAIT | PR_ZERO))
#else
if ((dyn = pool_get(&pfi_addr_pl, PR_WAITOK | PR_LIMITFAIL | PR_ZERO))
#endif
diff --git a/sys/dev/aac/aac_disk.c b/sys/dev/aac/aac_disk.c
index e4042f7..f2f6636 100644
--- a/sys/dev/aac/aac_disk.c
+++ b/sys/dev/aac/aac_disk.c
@@ -334,8 +334,10 @@ aac_biodone(struct bio *bp)
{
fwprintf(NULL, HBA_FLAGS_DBG_FUNCTION_ENTRY_B, "");
- if (bp->bio_flags & BIO_ERROR)
+ if (bp->bio_flags & BIO_ERROR) {
+ bp->bio_resid = bp->bio_bcount;
disk_err(bp, "hard error", -1, 1);
+ }
biodone(bp);
}
diff --git a/sys/dev/acpica/acpi_cpu.c b/sys/dev/acpica/acpi_cpu.c
index 0f2f7f9..d35a526 100644
--- a/sys/dev/acpica/acpi_cpu.c
+++ b/sys/dev/acpica/acpi_cpu.c
@@ -89,6 +89,7 @@ struct acpi_cpu_softc {
struct sysctl_ctx_list cpu_sysctl_ctx;
struct sysctl_oid *cpu_sysctl_tree;
int cpu_cx_lowest;
+ int cpu_cx_lowest_lim;
char cpu_cx_supported[64];
int cpu_rid;
};
@@ -138,13 +139,12 @@ static int cpu_quirks; /* Indicate any hardware bugs. */
/* Runtime state. */
static int cpu_disable_idle; /* Disable entry to idle function */
-static int cpu_cx_count; /* Number of valid Cx states */
/* Values for sysctl. */
static struct sysctl_ctx_list cpu_sysctl_ctx;
static struct sysctl_oid *cpu_sysctl_tree;
static int cpu_cx_generic;
-static int cpu_cx_lowest;
+static int cpu_cx_lowest_lim;
static device_t *cpu_devices;
static int cpu_ndevices;
@@ -173,7 +173,7 @@ static void acpi_cpu_idle(void);
static void acpi_cpu_notify(ACPI_HANDLE h, UINT32 notify, void *context);
static int acpi_cpu_quirks(void);
static int acpi_cpu_usage_sysctl(SYSCTL_HANDLER_ARGS);
-static int acpi_cpu_set_cx_lowest(struct acpi_cpu_softc *sc, int val);
+static int acpi_cpu_set_cx_lowest(struct acpi_cpu_softc *sc);
static int acpi_cpu_cx_lowest_sysctl(SYSCTL_HANDLER_ARGS);
static int acpi_cpu_global_cx_lowest_sysctl(SYSCTL_HANDLER_ARGS);
@@ -590,6 +590,7 @@ acpi_cpu_cx_probe(struct acpi_cpu_softc *sc)
/* Use initial sleep value of 1 sec. to start with lowest idle state. */
sc->cpu_prev_sleep = 1000000;
sc->cpu_cx_lowest = 0;
+ sc->cpu_cx_lowest_lim = 0;
/*
* Check for the ACPI 2.0 _CST sleep states object. If we can't find
@@ -820,7 +821,6 @@ acpi_cpu_startup(void *arg)
*/
acpi_cpu_quirks();
- cpu_cx_count = 0;
if (cpu_cx_generic) {
/*
* We are using generic Cx mode, probe for available Cx states
@@ -829,24 +829,10 @@ acpi_cpu_startup(void *arg)
for (i = 0; i < cpu_ndevices; i++) {
sc = device_get_softc(cpu_devices[i]);
acpi_cpu_generic_cx_probe(sc);
- if (sc->cpu_cx_count > cpu_cx_count)
- cpu_cx_count = sc->cpu_cx_count;
- }
-
- /*
- * Find the highest Cx state common to all CPUs
- * in the system, taking quirks into account.
- */
- for (i = 0; i < cpu_ndevices; i++) {
- sc = device_get_softc(cpu_devices[i]);
- if (sc->cpu_cx_count < cpu_cx_count)
- cpu_cx_count = sc->cpu_cx_count;
}
} else {
/*
* We are using _CST mode, remove C3 state if necessary.
- * Update the largest Cx state supported in the global cpu_cx_count.
- * It will be used in the global Cx sysctl handler.
* As we now know for sure that we will be using _CST mode
* install our notify handler.
*/
@@ -855,8 +841,6 @@ acpi_cpu_startup(void *arg)
if (cpu_quirks & CPU_QUIRK_NO_C3) {
sc->cpu_cx_count = sc->cpu_non_c3 + 1;
}
- if (sc->cpu_cx_count > cpu_cx_count)
- cpu_cx_count = sc->cpu_cx_count;
AcpiInstallNotifyHandler(sc->cpu_handle, ACPI_DEVICE_NOTIFY,
acpi_cpu_notify, sc);
}
@@ -875,7 +859,7 @@ acpi_cpu_startup(void *arg)
"Global lowest Cx sleep state to use");
/* Take over idling from cpu_idle_default(). */
- cpu_cx_lowest = 0;
+ cpu_cx_lowest_lim = 0;
cpu_disable_idle = FALSE;
cpu_idle_hook = acpi_cpu_idle;
}
@@ -892,7 +876,8 @@ acpi_cpu_cx_list(struct acpi_cpu_softc *sc)
sbuf_new(&sb, sc->cpu_cx_supported, sizeof(sc->cpu_cx_supported),
SBUF_FIXEDLEN);
for (i = 0; i < sc->cpu_cx_count; i++)
- sbuf_printf(&sb, "C%d/%d ", i + 1, sc->cpu_cx_states[i].trans_lat);
+ sbuf_printf(&sb, "C%d/%d/%d ", i + 1, sc->cpu_cx_states[i].type,
+ sc->cpu_cx_states[i].trans_lat);
sbuf_trim(&sb);
sbuf_finish(&sb);
}
@@ -937,6 +922,7 @@ acpi_cpu_idle()
{
struct acpi_cpu_softc *sc;
struct acpi_cx *cx_next;
+ uint64_t cputicks;
uint32_t start_time, end_time;
int bm_active, cx_next_idx, i;
@@ -976,11 +962,12 @@ acpi_cpu_idle()
* driver polling for new devices keeps this bit set all the
* time if USB is loaded.
*/
- if ((cpu_quirks & CPU_QUIRK_NO_BM_CTRL) == 0) {
+ if ((cpu_quirks & CPU_QUIRK_NO_BM_CTRL) == 0 &&
+ cx_next_idx > sc->cpu_non_c3) {
AcpiReadBitRegister(ACPI_BITREG_BUS_MASTER_STATUS, &bm_active);
if (bm_active != 0) {
AcpiWriteBitRegister(ACPI_BITREG_BUS_MASTER_STATUS, 1);
- cx_next_idx = min(cx_next_idx, sc->cpu_non_c3);
+ cx_next_idx = sc->cpu_non_c3;
}
}
@@ -996,11 +983,10 @@ acpi_cpu_idle()
* we are called inside critical section, delaying context switch.
*/
if (cx_next->type == ACPI_STATE_C1) {
- AcpiHwRead(&start_time, &AcpiGbl_FADT.XPmTimerBlock);
+ cputicks = cpu_ticks();
acpi_cpu_c1();
- AcpiHwRead(&end_time, &AcpiGbl_FADT.XPmTimerBlock);
- end_time = PM_USEC(acpi_TimerDelta(end_time, start_time));
- if (curthread->td_critnest == 0)
+ end_time = ((cpu_ticks() - cputicks) << 20) / cpu_tickrate();
+ if (curthread->td_critnest == 0)
end_time = min(end_time, 500000 / hz);
sc->cpu_prev_sleep = (sc->cpu_prev_sleep * 3 + end_time) / 4;
return;
@@ -1024,7 +1010,13 @@ acpi_cpu_idle()
* get the time very close to the CPU start/stop clock logic, this
* is the only reliable time source.
*/
- AcpiHwRead(&start_time, &AcpiGbl_FADT.XPmTimerBlock);
+ if (cx_next->type == ACPI_STATE_C3) {
+ AcpiHwRead(&start_time, &AcpiGbl_FADT.XPmTimerBlock);
+ cputicks = 0;
+ } else {
+ start_time = 0;
+ cputicks = cpu_ticks();
+ }
CPU_GET_REG(cx_next->p_lvlx, 1);
/*
@@ -1034,7 +1026,11 @@ acpi_cpu_idle()
* margin that we are certain to have a correct value.
*/
AcpiHwRead(&end_time, &AcpiGbl_FADT.XPmTimerBlock);
- AcpiHwRead(&end_time, &AcpiGbl_FADT.XPmTimerBlock);
+ if (cx_next->type == ACPI_STATE_C3) {
+ AcpiHwRead(&end_time, &AcpiGbl_FADT.XPmTimerBlock);
+ end_time = acpi_TimerDelta(end_time, start_time);
+ } else
+ end_time = ((cpu_ticks() - cputicks) << 20) / cpu_tickrate();
/* Enable bus master arbitration and disable bus master wakeup. */
if (cx_next->type == ACPI_STATE_C3 &&
@@ -1044,8 +1040,6 @@ acpi_cpu_idle()
}
ACPI_ENABLE_IRQS();
- /* Find the actual time asleep in microseconds. */
- end_time = acpi_TimerDelta(end_time, start_time);
sc->cpu_prev_sleep = (sc->cpu_prev_sleep * 3 + PM_USEC(end_time)) / 4;
}
@@ -1058,8 +1052,6 @@ static void
acpi_cpu_notify(ACPI_HANDLE h, UINT32 notify, void *context)
{
struct acpi_cpu_softc *sc = (struct acpi_cpu_softc *)context;
- struct acpi_cpu_softc *isc;
- int i;
if (notify != ACPI_NOTIFY_CX_STATES)
return;
@@ -1068,16 +1060,8 @@ acpi_cpu_notify(ACPI_HANDLE h, UINT32 notify, void *context)
acpi_cpu_cx_cst(sc);
acpi_cpu_cx_list(sc);
- /* Update the new lowest useable Cx state for all CPUs. */
ACPI_SERIAL_BEGIN(cpu);
- cpu_cx_count = 0;
- for (i = 0; i < cpu_ndevices; i++) {
- isc = device_get_softc(cpu_devices[i]);
- if (isc->cpu_cx_count > cpu_cx_count)
- cpu_cx_count = isc->cpu_cx_count;
- }
- if (sc->cpu_cx_lowest < cpu_cx_lowest)
- acpi_cpu_set_cx_lowest(sc, min(cpu_cx_lowest, sc->cpu_cx_count - 1));
+ acpi_cpu_set_cx_lowest(sc);
ACPI_SERIAL_END(cpu);
}
@@ -1205,12 +1189,12 @@ acpi_cpu_usage_sysctl(SYSCTL_HANDLER_ARGS)
}
static int
-acpi_cpu_set_cx_lowest(struct acpi_cpu_softc *sc, int val)
+acpi_cpu_set_cx_lowest(struct acpi_cpu_softc *sc)
{
int i;
ACPI_SERIAL_ASSERT(cpu);
- sc->cpu_cx_lowest = val;
+ sc->cpu_cx_lowest = min(sc->cpu_cx_lowest_lim, sc->cpu_cx_count - 1);
/* If not disabling, cache the new lowest non-C3 state. */
sc->cpu_non_c3 = 0;
@@ -1234,18 +1218,23 @@ acpi_cpu_cx_lowest_sysctl(SYSCTL_HANDLER_ARGS)
int val, error;
sc = (struct acpi_cpu_softc *) arg1;
- snprintf(state, sizeof(state), "C%d", sc->cpu_cx_lowest + 1);
+ snprintf(state, sizeof(state), "C%d", sc->cpu_cx_lowest_lim + 1);
error = sysctl_handle_string(oidp, state, sizeof(state), req);
if (error != 0 || req->newptr == NULL)
return (error);
if (strlen(state) < 2 || toupper(state[0]) != 'C')
return (EINVAL);
- val = (int) strtol(state + 1, NULL, 10) - 1;
- if (val < 0 || val > sc->cpu_cx_count - 1)
- return (EINVAL);
+ if (strcasecmp(state, "Cmax") == 0)
+ val = MAX_CX_STATES;
+ else {
+ val = (int) strtol(state + 1, NULL, 10);
+ if (val < 1 || val > MAX_CX_STATES)
+ return (EINVAL);
+ }
ACPI_SERIAL_BEGIN(cpu);
- acpi_cpu_set_cx_lowest(sc, val);
+ sc->cpu_cx_lowest_lim = val - 1;
+ acpi_cpu_set_cx_lowest(sc);
ACPI_SERIAL_END(cpu);
return (0);
@@ -1258,22 +1247,27 @@ acpi_cpu_global_cx_lowest_sysctl(SYSCTL_HANDLER_ARGS)
char state[8];
int val, error, i;
- snprintf(state, sizeof(state), "C%d", cpu_cx_lowest + 1);
+ snprintf(state, sizeof(state), "C%d", cpu_cx_lowest_lim + 1);
error = sysctl_handle_string(oidp, state, sizeof(state), req);
if (error != 0 || req->newptr == NULL)
return (error);
if (strlen(state) < 2 || toupper(state[0]) != 'C')
return (EINVAL);
- val = (int) strtol(state + 1, NULL, 10) - 1;
- if (val < 0 || val > cpu_cx_count - 1)
- return (EINVAL);
- cpu_cx_lowest = val;
+ if (strcasecmp(state, "Cmax") == 0)
+ val = MAX_CX_STATES;
+ else {
+ val = (int) strtol(state + 1, NULL, 10);
+ if (val < 1 || val > MAX_CX_STATES)
+ return (EINVAL);
+ }
/* Update the new lowest useable Cx state for all CPUs. */
ACPI_SERIAL_BEGIN(cpu);
+ cpu_cx_lowest_lim = val - 1;
for (i = 0; i < cpu_ndevices; i++) {
sc = device_get_softc(cpu_devices[i]);
- acpi_cpu_set_cx_lowest(sc, min(val, sc->cpu_cx_count - 1));
+ sc->cpu_cx_lowest_lim = cpu_cx_lowest_lim;
+ acpi_cpu_set_cx_lowest(sc);
}
ACPI_SERIAL_END(cpu);
diff --git a/sys/dev/ahci/ahci.c b/sys/dev/ahci/ahci.c
index 481fe0a..1bbfba7 100644
--- a/sys/dev/ahci/ahci.c
+++ b/sys/dev/ahci/ahci.c
@@ -1,5 +1,5 @@
/*-
- * Copyright (c) 2009 Alexander Motin <mav@FreeBSD.org>
+ * Copyright (c) 2009-2012 Alexander Motin <mav@FreeBSD.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -31,21 +31,16 @@ __FBSDID("$FreeBSD$");
#include <sys/module.h>
#include <sys/systm.h>
#include <sys/kernel.h>
-#include <sys/ata.h>
#include <sys/bus.h>
#include <sys/conf.h>
#include <sys/endian.h>
#include <sys/malloc.h>
#include <sys/lock.h>
#include <sys/mutex.h>
-#include <sys/sema.h>
-#include <sys/taskqueue.h>
-#include <vm/uma.h>
#include <machine/stdarg.h>
#include <machine/resource.h>
#include <machine/bus.h>
#include <sys/rman.h>
-#include <dev/led/led.h>
#include <dev/pci/pcivar.h>
#include <dev/pci/pcireg.h>
#include "ahci.h"
@@ -69,7 +64,6 @@ static int ahci_ch_resume(device_t dev);
static void ahci_ch_pm(void *arg);
static void ahci_ch_intr_locked(void *data);
static void ahci_ch_intr(void *data);
-static void ahci_ch_led(void *priv, int onoff);
static int ahci_ctlr_reset(device_t dev);
static int ahci_ctlr_setup(device_t dev);
static void ahci_begin_transaction(device_t dev, union ccb *ccb);
@@ -441,7 +435,6 @@ ahci_attach(device_t dev)
ctlr->caps &= ~AHCI_CAP_SNCQ;
if ((ctlr->caps & AHCI_CAP_CCCS) == 0)
ctlr->ccc = 0;
- mtx_init(&ctlr->em_mtx, "AHCI EM lock", NULL, MTX_DEF);
ctlr->emloc = ATA_INL(ctlr->r_mem, AHCI_EM_LOC);
ahci_ctlr_setup(dev);
/* Setup interrupts. */
@@ -494,17 +487,6 @@ ahci_attach(device_t dev)
(ctlr->caps2 & AHCI_CAP2_NVMP) ? " NVMP":"",
(ctlr->caps2 & AHCI_CAP2_BOH) ? " BOH":"");
}
- if (bootverbose && (ctlr->caps & AHCI_CAP_EMS)) {
- device_printf(dev, "EM Caps:%s%s%s%s%s%s%s%s\n",
- (ctlr->capsem & AHCI_EM_PM) ? " PM":"",
- (ctlr->capsem & AHCI_EM_ALHD) ? " ALHD":"",
- (ctlr->capsem & AHCI_EM_XMT) ? " XMT":"",
- (ctlr->capsem & AHCI_EM_SMB) ? " SMB":"",
- (ctlr->capsem & AHCI_EM_SGPIO) ? " SGPIO":"",
- (ctlr->capsem & AHCI_EM_SES2) ? " SES-2":"",
- (ctlr->capsem & AHCI_EM_SAFTE) ? " SAF-TE":"",
- (ctlr->capsem & AHCI_EM_LED) ? " LED":"");
- }
/* Attach all channels on this controller */
for (unit = 0; unit < ctlr->channels; unit++) {
child = device_add_child(dev, "ahcich", -1);
@@ -516,6 +498,13 @@ ahci_attach(device_t dev)
if ((ctlr->ichannels & (1 << unit)) == 0)
device_disable(child);
}
+ if (ctlr->caps & AHCI_CAP_EMS) {
+ child = device_add_child(dev, "ahciem", -1);
+ if (child == NULL)
+ device_printf(dev, "failed to add enclosure device\n");
+ else
+ device_set_ivars(child, (void *)(intptr_t)-1);
+ }
bus_generic_attach(dev);
return 0;
}
@@ -543,7 +532,6 @@ ahci_detach(device_t dev)
rman_fini(&ctlr->sc_iomem);
if (ctlr->r_mem)
bus_release_resource(dev, SYS_RES_MEMORY, ctlr->r_rid, ctlr->r_mem);
- mtx_destroy(&ctlr->em_mtx);
return (0);
}
@@ -753,16 +741,34 @@ ahci_alloc_resource(device_t dev, device_t child, int type, int *rid,
u_long start, u_long end, u_long count, u_int flags)
{
struct ahci_controller *ctlr = device_get_softc(dev);
- int unit = ((struct ahci_channel *)device_get_softc(child))->unit;
- struct resource *res = NULL;
- int offset = AHCI_OFFSET + (unit << 7);
+ struct resource *res;
long st;
+ int offset, size, unit;
+ unit = (intptr_t)device_get_ivars(child);
+ res = NULL;
switch (type) {
case SYS_RES_MEMORY:
+ if (unit >= 0) {
+ offset = AHCI_OFFSET + (unit << 7);
+ size = 128;
+ } else if (*rid == 0) {
+ offset = AHCI_EM_CTL;
+ size = 4;
+ } else {
+ offset = (ctlr->emloc & 0xffff0000) >> 14;
+ size = (ctlr->emloc & 0x0000ffff) << 2;
+ if (*rid != 1) {
+ if (*rid == 2 && (ctlr->capsem &
+ (AHCI_EM_XMT | AHCI_EM_SMB)) == 0)
+ offset += size;
+ else
+ break;
+ }
+ }
st = rman_get_start(ctlr->r_mem);
res = rman_reserve_resource(&ctlr->sc_iomem, st + offset,
- st + offset + 127, 128, RF_ACTIVE, child);
+ st + offset + size - 1, size, RF_ACTIVE, child);
if (res) {
bus_space_handle_t bsh;
bus_space_tag_t bst;
@@ -830,13 +836,13 @@ ahci_teardown_intr(device_t dev, device_t child, struct resource *irq,
static int
ahci_print_child(device_t dev, device_t child)
{
- int retval;
+ int retval, channel;
retval = bus_print_child_header(dev, child);
- retval += printf(" at channel %d",
- (int)(intptr_t)device_get_ivars(child));
+ channel = (int)(intptr_t)device_get_ivars(child);
+ if (channel >= 0)
+ retval += printf(" at channel %d", channel);
retval += bus_print_child_footer(dev, child);
-
return (retval);
}
@@ -844,9 +850,11 @@ static int
ahci_child_location_str(device_t dev, device_t child, char *buf,
size_t buflen)
{
+ int channel;
- snprintf(buf, buflen, "channel=%d",
- (int)(intptr_t)device_get_ivars(child));
+ channel = (int)(intptr_t)device_get_ivars(child);
+ if (channel >= 0)
+ snprintf(buf, buflen, "channel=%d", channel);
return (0);
}
@@ -910,7 +918,6 @@ ahci_ch_attach(device_t dev)
struct cam_devq *devq;
int rid, error, i, sata_rev = 0;
u_int32_t version;
- char buf[32];
ch->dev = dev;
ch->unit = (intptr_t)device_get_ivars(dev);
@@ -950,7 +957,7 @@ ahci_ch_attach(device_t dev)
ch->user[i].caps |= CTS_SATA_CAPS_H_DMAAA |
CTS_SATA_CAPS_H_AN;
}
- rid = ch->unit;
+ rid = 0;
if (!(ch->r_mem = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
&rid, RF_ACTIVE)))
return (ENXIO);
@@ -1019,25 +1026,6 @@ ahci_ch_attach(device_t dev)
ahci_ch_pm, dev);
}
mtx_unlock(&ch->mtx);
- if ((ch->caps & AHCI_CAP_EMS) &&
- (ctlr->capsem & AHCI_EM_LED)) {
- for (i = 0; i < AHCI_NUM_LEDS; i++) {
- ch->leds[i].dev = dev;
- ch->leds[i].num = i;
- }
- if ((ctlr->capsem & AHCI_EM_ALHD) == 0) {
- snprintf(buf, sizeof(buf), "%s.act",
- device_get_nameunit(dev));
- ch->leds[0].led = led_create(ahci_ch_led,
- &ch->leds[0], buf);
- }
- snprintf(buf, sizeof(buf), "%s.locate",
- device_get_nameunit(dev));
- ch->leds[1].led = led_create(ahci_ch_led, &ch->leds[1], buf);
- snprintf(buf, sizeof(buf), "%s.fault",
- device_get_nameunit(dev));
- ch->leds[2].led = led_create(ahci_ch_led, &ch->leds[2], buf);
- }
return (0);
err3:
@@ -1057,12 +1045,7 @@ static int
ahci_ch_detach(device_t dev)
{
struct ahci_channel *ch = device_get_softc(dev);
- int i;
- for (i = 0; i < AHCI_NUM_LEDS; i++) {
- if (ch->leds[i].led)
- led_destroy(ch->leds[i].led);
- }
mtx_lock(&ch->mtx);
xpt_async(AC_LOST_DEVICE, ch->path, NULL);
/* Forget about reset. */
@@ -1185,47 +1168,6 @@ static driver_t ahcich_driver = {
};
DRIVER_MODULE(ahcich, ahci, ahcich_driver, ahcich_devclass, 0, 0);
-static void
-ahci_ch_setleds(device_t dev)
-{
- struct ahci_channel *ch;
- struct ahci_controller *ctlr;
- size_t buf;
- int i, timeout;
- int16_t val;
-
- ctlr = device_get_softc(device_get_parent(dev));
- ch = device_get_softc(dev);
-
- val = 0;
- for (i = 0; i < AHCI_NUM_LEDS; i++)
- val |= ch->leds[i].state << (i * 3);
-
- buf = (ctlr->emloc & 0xffff0000) >> 14;
- mtx_lock(&ctlr->em_mtx);
- timeout = 1000;
- while (ATA_INL(ctlr->r_mem, AHCI_EM_CTL) & (AHCI_EM_TM | AHCI_EM_RST) &&
- --timeout > 0)
- DELAY(1000);
- if (timeout == 0)
- device_printf(dev, "EM timeout\n");
- ATA_OUTL(ctlr->r_mem, buf, (1 << 8) | (0 << 16) | (0 << 24));
- ATA_OUTL(ctlr->r_mem, buf + 4, ch->unit | (val << 16));
- ATA_OUTL(ctlr->r_mem, AHCI_EM_CTL, AHCI_EM_TM);
- mtx_unlock(&ctlr->em_mtx);
-}
-
-static void
-ahci_ch_led(void *priv, int onoff)
-{
- struct ahci_led *led;
-
- led = (struct ahci_led *)priv;
-
- led->state = onoff;
- ahci_ch_setleds(led->dev);
-}
-
struct ahci_dc_cb_args {
bus_addr_t maddr;
int error;
diff --git a/sys/dev/ahci/ahci.h b/sys/dev/ahci/ahci.h
index ecce136..2eef321 100644
--- a/sys/dev/ahci/ahci.h
+++ b/sys/dev/ahci/ahci.h
@@ -1,6 +1,6 @@
/*-
* Copyright (c) 1998 - 2008 Søren Schmidt <sos@FreeBSD.org>
- * Copyright (c) 2009 Alexander Motin <mav@FreeBSD.org>
+ * Copyright (c) 2009-2012 Alexander Motin <mav@FreeBSD.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -395,7 +395,6 @@ struct ahci_channel {
struct ata_dma dma; /* DMA data */
struct cam_sim *sim;
struct cam_path *path;
- struct ahci_led leds[3];
uint32_t caps; /* Controller capabilities */
uint32_t caps2; /* Controller capabilities */
uint32_t chcaps; /* Channel capabilities */
@@ -435,6 +434,22 @@ struct ahci_channel {
struct ahci_device curr[16]; /* Current settings */
};
+struct ahci_enclosure {
+ device_t dev; /* Device handle */
+ struct resource *r_memc; /* Control register */
+ struct resource *r_memt; /* Transmit buffer */
+ struct resource *r_memr; /* Recieve buffer */
+ struct cam_sim *sim;
+ struct cam_path *path;
+ struct mtx mtx; /* state lock */
+ struct ahci_led leds[AHCI_MAX_PORTS * 3];
+ uint32_t capsem; /* Controller capabilities */
+ uint8_t status[AHCI_MAX_PORTS][4]; /* ArrayDev statuses */
+ int quirks;
+ int channels;
+ int ichannels;
+};
+
/* structure describing a AHCI controller */
struct ahci_controller {
device_t dev;
@@ -465,7 +480,6 @@ struct ahci_controller {
void (*function)(void *);
void *argument;
} interrupt[AHCI_MAX_PORTS];
- struct mtx em_mtx; /* EM access lock */
};
enum ahci_err_type {
diff --git a/sys/dev/ahci/ahciem.c b/sys/dev/ahci/ahciem.c
new file mode 100644
index 0000000..11e7230
--- /dev/null
+++ b/sys/dev/ahci/ahciem.c
@@ -0,0 +1,600 @@
+/*-
+ * Copyright (c) 2012 Alexander Motin <mav@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer,
+ * without modification, immediately at the beginning of the file.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/module.h>
+#include <sys/systm.h>
+#include <sys/kernel.h>
+#include <sys/bus.h>
+#include <sys/conf.h>
+#include <sys/endian.h>
+#include <sys/malloc.h>
+#include <sys/lock.h>
+#include <sys/mutex.h>
+#include <machine/stdarg.h>
+#include <machine/resource.h>
+#include <machine/bus.h>
+#include <sys/rman.h>
+#include <dev/led/led.h>
+#include <dev/pci/pcivar.h>
+#include <dev/pci/pcireg.h>
+#include "ahci.h"
+
+#include <cam/cam.h>
+#include <cam/cam_ccb.h>
+#include <cam/cam_sim.h>
+#include <cam/cam_xpt_sim.h>
+#include <cam/cam_debug.h>
+#include <cam/scsi/scsi_ses.h>
+
+/* local prototypes */
+static void ahciemaction(struct cam_sim *sim, union ccb *ccb);
+static void ahciempoll(struct cam_sim *sim);
+static int ahci_em_reset(device_t dev);
+static void ahci_em_led(void *priv, int onoff);
+static void ahci_em_setleds(device_t dev, int c);
+
+static int
+ahci_em_probe(device_t dev)
+{
+
+ device_set_desc_copy(dev, "AHCI enclosure management bridge");
+ return (0);
+}
+
+static int
+ahci_em_attach(device_t dev)
+{
+ device_t parent = device_get_parent(dev);
+ struct ahci_controller *ctlr = device_get_softc(parent);
+ struct ahci_enclosure *enc = device_get_softc(dev);
+ struct cam_devq *devq;
+ int i, c, rid, error;
+ char buf[32];
+
+ enc->dev = dev;
+ enc->quirks = ctlr->quirks;
+ enc->channels = ctlr->channels;
+ enc->ichannels = ctlr->ichannels;
+ mtx_init(&enc->mtx, "AHCI enclosure lock", NULL, MTX_DEF);
+ rid = 0;
+ if (!(enc->r_memc = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
+ &rid, RF_ACTIVE)))
+ return (ENXIO);
+ enc->capsem = ATA_INL(enc->r_memc, 0);;
+ rid = 1;
+ if (!(enc->r_memt = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
+ &rid, RF_ACTIVE))) {
+ error = ENXIO;
+ goto err0;
+ }
+ if ((enc->capsem & (AHCI_EM_XMT | AHCI_EM_SMB)) == 0) {
+ rid = 2;
+ if (!(enc->r_memr = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
+ &rid, RF_ACTIVE))) {
+ error = ENXIO;
+ goto err0;
+ }
+ } else
+ enc->r_memr = NULL;
+ mtx_lock(&enc->mtx);
+ ahci_em_reset(dev);
+ rid = ATA_IRQ_RID;
+ /* Create the device queue for our SIM. */
+ devq = cam_simq_alloc(1);
+ if (devq == NULL) {
+ device_printf(dev, "Unable to allocate SIM queue\n");
+ error = ENOMEM;
+ goto err1;
+ }
+ /* Construct SIM entry */
+ enc->sim = cam_sim_alloc(ahciemaction, ahciempoll, "ahciem", enc,
+ device_get_unit(dev), &enc->mtx,
+ 1, 0, devq);
+ if (enc->sim == NULL) {
+ cam_simq_free(devq);
+ device_printf(dev, "Unable to allocate SIM\n");
+ error = ENOMEM;
+ goto err1;
+ }
+ if (xpt_bus_register(enc->sim, dev, 0) != CAM_SUCCESS) {
+ device_printf(dev, "unable to register xpt bus\n");
+ error = ENXIO;
+ goto err2;
+ }
+ if (xpt_create_path(&enc->path, /*periph*/NULL, cam_sim_path(enc->sim),
+ CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD) != CAM_REQ_CMP) {
+ device_printf(dev, "Unable to create path\n");
+ error = ENXIO;
+ goto err3;
+ }
+ mtx_unlock(&enc->mtx);
+ if (bootverbose) {
+ device_printf(dev, "Caps:%s%s%s%s%s%s%s%s\n",
+ (enc->capsem & AHCI_EM_PM) ? " PM":"",
+ (enc->capsem & AHCI_EM_ALHD) ? " ALHD":"",
+ (enc->capsem & AHCI_EM_XMT) ? " XMT":"",
+ (enc->capsem & AHCI_EM_SMB) ? " SMB":"",
+ (enc->capsem & AHCI_EM_SGPIO) ? " SGPIO":"",
+ (enc->capsem & AHCI_EM_SES2) ? " SES-2":"",
+ (enc->capsem & AHCI_EM_SAFTE) ? " SAF-TE":"",
+ (enc->capsem & AHCI_EM_LED) ? " LED":"");
+ }
+ if ((enc->capsem & AHCI_EM_LED)) {
+ for (c = 0; c < enc->channels; c++) {
+ if ((enc->ichannels & (1 << c)) == 0)
+ continue;
+ for (i = 0; i < AHCI_NUM_LEDS; i++) {
+ enc->leds[c * AHCI_NUM_LEDS + i].dev = dev;
+ enc->leds[c * AHCI_NUM_LEDS + i].num =
+ c * AHCI_NUM_LEDS + i;
+ }
+ if ((enc->capsem & AHCI_EM_ALHD) == 0) {
+ snprintf(buf, sizeof(buf), "%s.%d.act",
+ device_get_nameunit(parent), c);
+ enc->leds[c * AHCI_NUM_LEDS + 0].led =
+ led_create(ahci_em_led,
+ &enc->leds[c * AHCI_NUM_LEDS + 0], buf);
+ }
+ snprintf(buf, sizeof(buf), "%s.%d.locate",
+ device_get_nameunit(parent), c);
+ enc->leds[c * AHCI_NUM_LEDS + 1].led =
+ led_create(ahci_em_led,
+ &enc->leds[c * AHCI_NUM_LEDS + 1], buf);
+ snprintf(buf, sizeof(buf), "%s.%d.fault",
+ device_get_nameunit(parent), c);
+ enc->leds[c * AHCI_NUM_LEDS + 2].led =
+ led_create(ahci_em_led,
+ &enc->leds[c * AHCI_NUM_LEDS + 2], buf);
+ }
+ }
+ return (0);
+
+err3:
+ xpt_bus_deregister(cam_sim_path(enc->sim));
+err2:
+ cam_sim_free(enc->sim, /*free_devq*/TRUE);
+err1:
+ mtx_unlock(&enc->mtx);
+ if (enc->r_memr)
+ bus_release_resource(dev, SYS_RES_MEMORY, 2, enc->r_memr);
+err0:
+ if (enc->r_memt)
+ bus_release_resource(dev, SYS_RES_MEMORY, 1, enc->r_memt);
+ bus_release_resource(dev, SYS_RES_MEMORY, 0, enc->r_memc);
+ mtx_destroy(&enc->mtx);
+ return (error);
+}
+
+static int
+ahci_em_detach(device_t dev)
+{
+ struct ahci_enclosure *enc = device_get_softc(dev);
+ int i;
+
+ for (i = 0; i < enc->channels * AHCI_NUM_LEDS; i++) {
+ if (enc->leds[i].led)
+ led_destroy(enc->leds[i].led);
+ }
+ mtx_lock(&enc->mtx);
+ xpt_async(AC_LOST_DEVICE, enc->path, NULL);
+ xpt_free_path(enc->path);
+ xpt_bus_deregister(cam_sim_path(enc->sim));
+ cam_sim_free(enc->sim, /*free_devq*/TRUE);
+ mtx_unlock(&enc->mtx);
+
+ bus_release_resource(dev, SYS_RES_MEMORY, 0, enc->r_memc);
+ bus_release_resource(dev, SYS_RES_MEMORY, 1, enc->r_memt);
+ if (enc->r_memr)
+ bus_release_resource(dev, SYS_RES_MEMORY, 2, enc->r_memr);
+ mtx_destroy(&enc->mtx);
+ return (0);
+}
+
+static int
+ahci_em_reset(device_t dev)
+{
+ struct ahci_enclosure *enc;
+ int i, timeout;
+
+ enc = device_get_softc(dev);
+ ATA_OUTL(enc->r_memc, 0, AHCI_EM_RST);
+ timeout = 1000;
+ while ((ATA_INL(enc->r_memc, 0) & AHCI_EM_RST) &&
+ --timeout > 0)
+ DELAY(1000);
+ if (timeout == 0) {
+ device_printf(dev, "EM timeout\n");
+ return (1);
+ }
+ for (i = 0; i < enc->channels; i++)
+ ahci_em_setleds(dev, i);
+ return (0);
+}
+
+static int
+ahci_em_suspend(device_t dev)
+{
+ struct ahci_enclosure *enc = device_get_softc(dev);
+
+ mtx_lock(&enc->mtx);
+ xpt_freeze_simq(enc->sim, 1);
+ mtx_unlock(&enc->mtx);
+ return (0);
+}
+
+static int
+ahci_em_resume(device_t dev)
+{
+ struct ahci_enclosure *enc = device_get_softc(dev);
+
+ mtx_lock(&enc->mtx);
+ ahci_em_reset(dev);
+ xpt_release_simq(enc->sim, TRUE);
+ mtx_unlock(&enc->mtx);
+ return (0);
+}
+
+devclass_t ahciem_devclass;
+static device_method_t ahciem_methods[] = {
+ DEVMETHOD(device_probe, ahci_em_probe),
+ DEVMETHOD(device_attach, ahci_em_attach),
+ DEVMETHOD(device_detach, ahci_em_detach),
+ DEVMETHOD(device_suspend, ahci_em_suspend),
+ DEVMETHOD(device_resume, ahci_em_resume),
+ { 0, 0 }
+};
+static driver_t ahciem_driver = {
+ "ahciem",
+ ahciem_methods,
+ sizeof(struct ahci_enclosure)
+};
+DRIVER_MODULE(ahciem, ahci, ahciem_driver, ahciem_devclass, 0, 0);
+
+static void
+ahci_em_setleds(device_t dev, int c)
+{
+ struct ahci_enclosure *enc;
+ int timeout;
+ int16_t val;
+
+ enc = device_get_softc(dev);
+
+ val = 0;
+ if (enc->status[c][2] & 0x80) /* Activity */
+ val |= (1 << 0);
+ if (enc->status[c][2] & SESCTL_RQSID) /* Identification */
+ val |= (1 << 3);
+ else if (enc->status[c][3] & SESCTL_RQSFLT) /* Fault */
+ val |= (1 << 6);
+ else if (enc->status[c][1] & 0x02) /* Rebuild */
+ val |= (1 << 6) | (1 << 3);
+
+ timeout = 10000;
+ while (ATA_INL(enc->r_memc, 0) & (AHCI_EM_TM | AHCI_EM_RST) &&
+ --timeout > 0)
+ DELAY(100);
+ if (timeout == 0)
+ device_printf(dev, "Transmit timeout\n");
+ ATA_OUTL(enc->r_memt, 0, (1 << 8) | (0 << 16) | (0 << 24));
+ ATA_OUTL(enc->r_memt, 4, c | (0 << 8) | (val << 16));
+ ATA_OUTL(enc->r_memc, 0, AHCI_EM_TM);
+}
+
+static void
+ahci_em_led(void *priv, int onoff)
+{
+ struct ahci_led *led;
+ struct ahci_enclosure *enc;
+ int c, l;
+
+ led = (struct ahci_led *)priv;
+ enc = device_get_softc(led->dev);
+ c = led->num / AHCI_NUM_LEDS;
+ l = led->num % AHCI_NUM_LEDS;
+
+ if (l == 0) {
+ if (onoff)
+ enc->status[c][2] |= 0x80;
+ else
+ enc->status[c][2] &= ~0x80;
+ } else if (l == 1) {
+ if (onoff)
+ enc->status[c][2] |= SESCTL_RQSID;
+ else
+ enc->status[c][2] &= ~SESCTL_RQSID;
+ } else if (l == 2) {
+ if (onoff)
+ enc->status[c][3] |= SESCTL_RQSFLT;
+ else
+ enc->status[c][3] &= SESCTL_RQSFLT;
+ }
+ ahci_em_setleds(led->dev, c);
+}
+
+static int
+ahci_check_ids(device_t dev, union ccb *ccb)
+{
+
+ if (ccb->ccb_h.target_id != 0) {
+ ccb->ccb_h.status = CAM_TID_INVALID;
+ xpt_done(ccb);
+ return (-1);
+ }
+ if (ccb->ccb_h.target_lun != 0) {
+ ccb->ccb_h.status = CAM_LUN_INVALID;
+ xpt_done(ccb);
+ return (-1);
+ }
+ return (0);
+}
+
+static void
+ahci_em_emulate_ses_on_led(device_t dev, union ccb *ccb)
+{
+ struct ahci_enclosure *enc;
+ struct ses_status_page *page;
+ struct ses_status_array_dev_slot *ads, *ads0;
+ struct ses_elm_desc_hdr *elmd;
+ uint8_t *buf;
+ int i;
+
+ enc = device_get_softc(dev);
+ buf = ccb->ataio.data_ptr;
+
+ /* General request validation. */
+ if (ccb->ataio.cmd.command != ATA_SEP_ATTN ||
+ ccb->ataio.dxfer_len < ccb->ataio.cmd.sector_count * 4) {
+ ccb->ccb_h.status = CAM_REQ_INVALID;
+ goto out;
+ }
+
+ /* SEMB IDENTIFY */
+ if (ccb->ataio.cmd.features == 0xEC &&
+ ccb->ataio.cmd.sector_count >= 16) {
+ bzero(buf, ccb->ataio.dxfer_len);
+ buf[0] = 64; /* Valid bytes. */
+ strncpy(&buf[10], "AHCI ", SID_VENDOR_SIZE);
+ strncpy(&buf[18], "SGPIO Enclosure ", SID_PRODUCT_SIZE);
+ strncpy(&buf[34], "1.00", SID_REVISION_SIZE);
+ strncpy(&buf[39], "0001", 4);
+ strncpy(&buf[43], "S-E-S ", 6);
+ strncpy(&buf[49], "2.00", 4);
+ ccb->ccb_h.status = CAM_REQ_CMP;
+ goto out;
+ }
+
+ /* SEMB RECEIVE DIAGNOSTIC RESULT (0) */
+ page = (struct ses_status_page *)buf;
+ if (ccb->ataio.cmd.lba_low == 0x02 &&
+ ccb->ataio.cmd.features == 0x00 &&
+ ccb->ataio.cmd.sector_count >= 2) {
+ bzero(buf, ccb->ataio.dxfer_len);
+ page->hdr.page_code = 0;
+ scsi_ulto2b(3, page->hdr.length);
+ buf[4] = 0;
+ buf[5] = 1;
+ buf[6] = 2;
+ ccb->ccb_h.status = CAM_REQ_CMP;
+ goto out;
+ }
+
+ /* SEMB RECEIVE DIAGNOSTIC RESULT (1) */
+ if (ccb->ataio.cmd.lba_low == 0x02 &&
+ ccb->ataio.cmd.features == 0x01 &&
+ ccb->ataio.cmd.sector_count >= 13) {
+ struct ses_enc_desc *ed;
+ struct ses_elm_type_desc *td;
+
+ bzero(buf, ccb->ataio.dxfer_len);
+ page->hdr.page_code = 0x01;
+ scsi_ulto2b(4 + 4 + 36 + 4, page->hdr.length);
+ ed = (struct ses_enc_desc *)&buf[8];
+ ed->byte0 = 0x11;
+ ed->subenc_id = 0;
+ ed->num_types = 1;
+ ed->length = 36;
+ strncpy(ed->vendor_id, "AHCI ", SID_VENDOR_SIZE);
+ strncpy(ed->product_id, "SGPIO Enclosure ", SID_PRODUCT_SIZE);
+ strncpy(ed->product_rev, " ", SID_REVISION_SIZE);
+ td = (struct ses_elm_type_desc *)ses_enc_desc_next(ed);
+ td->etype_elm_type = 0x17;
+ td->etype_maxelt = enc->channels;
+ td->etype_subenc = 0;
+ td->etype_txt_len = 0;
+ ccb->ccb_h.status = CAM_REQ_CMP;
+ goto out;
+ }
+
+ /* SEMB RECEIVE DIAGNOSTIC RESULT (2) */
+ if (ccb->ataio.cmd.lba_low == 0x02 &&
+ ccb->ataio.cmd.features == 0x02 &&
+ ccb->ataio.cmd.sector_count >= (3 + enc->channels)) {
+ bzero(buf, ccb->ataio.dxfer_len);
+ page->hdr.page_code = 0x02;
+ scsi_ulto2b(4 + 4 * (1 + enc->channels),
+ page->hdr.length);
+ for (i = 0; i < enc->channels; i++) {
+ ads = &page->elements[i + 1].array_dev_slot;
+ memcpy(ads, enc->status[i], 4);
+ ads->common.bytes[0] |=
+ (enc->ichannels & (1 << i)) ?
+ SES_OBJSTAT_UNKNOWN :
+ SES_OBJSTAT_NOTINSTALLED;
+ }
+ ccb->ccb_h.status = CAM_REQ_CMP;
+ goto out;
+ }
+
+ /* SEMB SEND DIAGNOSTIC (2) */
+ if (ccb->ataio.cmd.lba_low == 0x82 &&
+ ccb->ataio.cmd.features == 0x02 &&
+ ccb->ataio.cmd.sector_count >= (3 + enc->channels)) {
+ ads0 = &page->elements[0].array_dev_slot;
+ for (i = 0; i < enc->channels; i++) {
+ ads = &page->elements[i + 1].array_dev_slot;
+ if (ads->common.bytes[0] & SESCTL_CSEL) {
+ enc->status[i][0] = 0;
+ enc->status[i][1] =
+ ads->bytes[0] & 0x02;
+ enc->status[i][2] =
+ ads->bytes[1] & (0x80 | SESCTL_RQSID);
+ enc->status[i][3] =
+ ads->bytes[2] & SESCTL_RQSFLT;
+ ahci_em_setleds(dev, i);
+ } else if (ads0->common.bytes[0] & SESCTL_CSEL) {
+ enc->status[i][0] = 0;
+ enc->status[i][1] =
+ ads0->bytes[0] & 0x02;
+ enc->status[i][2] =
+ ads0->bytes[1] & (0x80 | SESCTL_RQSID);
+ enc->status[i][3] =
+ ads0->bytes[2] & SESCTL_RQSFLT;
+ ahci_em_setleds(dev, i);
+ }
+ }
+ ccb->ccb_h.status = CAM_REQ_CMP;
+ goto out;
+ }
+
+ /* SEMB RECEIVE DIAGNOSTIC RESULT (7) */
+ if (ccb->ataio.cmd.lba_low == 0x02 &&
+ ccb->ataio.cmd.features == 0x07 &&
+ ccb->ataio.cmd.sector_count >= (3 + 3 * enc->channels)) {
+ bzero(buf, ccb->ataio.dxfer_len);
+ page->hdr.page_code = 0x07;
+ scsi_ulto2b(4 + 4 + 12 * enc->channels,
+ page->hdr.length);
+ for (i = 0; i < enc->channels; i++) {
+ elmd = (struct ses_elm_desc_hdr *)&buf[8 + 4 + 12 * i];
+ scsi_ulto2b(8, elmd->length);
+ snprintf((char *)(elmd + 1), 9, "SLOT %03d", i);
+ }
+ ccb->ccb_h.status = CAM_REQ_CMP;
+ goto out;
+ }
+
+ ccb->ccb_h.status = CAM_REQ_INVALID;
+out:
+ xpt_done(ccb);
+}
+
+static void
+ahci_em_begin_transaction(device_t dev, union ccb *ccb)
+{
+ struct ahci_enclosure *enc;
+ struct ata_res *res;
+
+ enc = device_get_softc(dev);
+ res = &ccb->ataio.res;
+ bzero(res, sizeof(*res));
+ if ((ccb->ataio.cmd.flags & CAM_ATAIO_CONTROL) &&
+ (ccb->ataio.cmd.control & ATA_A_RESET)) {
+ res->lba_high = 0xc3;
+ res->lba_mid = 0x3c;
+ ccb->ccb_h.status = CAM_REQ_CMP;
+ xpt_done(ccb);
+ return;
+ }
+
+ if (enc->capsem & AHCI_EM_LED) {
+ ahci_em_emulate_ses_on_led(dev, ccb);
+ return;
+ } else
+ device_printf(dev, "Unsupported enclosure interface\n");
+
+ ccb->ccb_h.status = CAM_REQ_INVALID;
+ xpt_done(ccb);
+}
+
+static void
+ahciemaction(struct cam_sim *sim, union ccb *ccb)
+{
+ device_t dev, parent;
+ struct ahci_enclosure *enc;
+
+ CAM_DEBUG(ccb->ccb_h.path, CAM_DEBUG_TRACE,
+ ("ahciemaction func_code=%x\n", ccb->ccb_h.func_code));
+
+ enc = cam_sim_softc(sim);
+ dev = enc->dev;
+ switch (ccb->ccb_h.func_code) {
+ case XPT_ATA_IO: /* Execute the requested I/O operation */
+ if (ahci_check_ids(dev, ccb))
+ return;
+ ahci_em_begin_transaction(dev, ccb);
+ return;
+ case XPT_RESET_BUS: /* Reset the specified bus */
+ case XPT_RESET_DEV: /* Bus Device Reset the specified device */
+ ahci_em_reset(dev);
+ ccb->ccb_h.status = CAM_REQ_CMP;
+ break;
+ case XPT_PATH_INQ: /* Path routing inquiry */
+ {
+ struct ccb_pathinq *cpi = &ccb->cpi;
+
+ parent = device_get_parent(dev);
+ cpi->version_num = 1; /* XXX??? */
+ cpi->hba_inquiry = PI_SDTR_ABLE;
+ cpi->target_sprt = 0;
+ cpi->hba_misc = PIM_SEQSCAN;
+ cpi->hba_eng_cnt = 0;
+ cpi->max_target = 0;
+ cpi->max_lun = 0;
+ cpi->initiator_id = 0;
+ cpi->bus_id = cam_sim_bus(sim);
+ cpi->base_transfer_speed = 150000;
+ strncpy(cpi->sim_vid, "FreeBSD", SIM_IDLEN);
+ strncpy(cpi->hba_vid, "AHCI", HBA_IDLEN);
+ strncpy(cpi->dev_name, cam_sim_name(sim), DEV_IDLEN);
+ cpi->unit_number = cam_sim_unit(sim);
+ cpi->transport = XPORT_SATA;
+ cpi->transport_version = XPORT_VERSION_UNSPECIFIED;
+ cpi->protocol = PROTO_ATA;
+ cpi->protocol_version = PROTO_VERSION_UNSPECIFIED;
+ cpi->maxio = MAXPHYS;
+ cpi->hba_vendor = pci_get_vendor(parent);
+ cpi->hba_device = pci_get_device(parent);
+ cpi->hba_subvendor = pci_get_subvendor(parent);
+ cpi->hba_subdevice = pci_get_subdevice(parent);
+ cpi->ccb_h.status = CAM_REQ_CMP;
+ break;
+ }
+ default:
+ ccb->ccb_h.status = CAM_REQ_INVALID;
+ break;
+ }
+ xpt_done(ccb);
+}
+
+static void
+ahciempoll(struct cam_sim *sim)
+{
+
+}
diff --git a/sys/dev/ata/ata-all.c b/sys/dev/ata/ata-all.c
index b1c09ab..07cb91f 100644
--- a/sys/dev/ata/ata-all.c
+++ b/sys/dev/ata/ata-all.c
@@ -1532,7 +1532,7 @@ ata_cam_request_sense(device_t dev, struct ata_request *request)
ch->requestsense = 1;
- bzero(request, sizeof(&request));
+ bzero(request, sizeof(*request));
request->dev = NULL;
request->parent = dev;
request->unit = ccb->ccb_h.target_id;
diff --git a/sys/dev/ata/ata-lowlevel.c b/sys/dev/ata/ata-lowlevel.c
index 42dbf87..e6522c6 100644
--- a/sys/dev/ata/ata-lowlevel.c
+++ b/sys/dev/ata/ata-lowlevel.c
@@ -836,23 +836,21 @@ static void
ata_pio_read(struct ata_request *request, int length)
{
struct ata_channel *ch = device_get_softc(request->parent);
+ uint8_t *addr;
int size = min(request->transfersize, length);
int resid;
uint8_t buf[2];
- if (ch->flags & ATA_USE_16BIT || (size % sizeof(int32_t))) {
- ATA_IDX_INSW_STRM(ch, ATA_DATA,
- (void*)((uintptr_t)request->data+request->donecount),
- size / sizeof(int16_t));
+ addr = (uint8_t *)request->data + request->donecount;
+ if (ch->flags & ATA_USE_16BIT || (size % sizeof(int32_t)) ||
+ ((uintptr_t)addr % sizeof(int32_t))) {
+ ATA_IDX_INSW_STRM(ch, ATA_DATA, (void*)addr, size / sizeof(int16_t));
if (size & 1) {
ATA_IDX_INSW_STRM(ch, ATA_DATA, (void*)buf, 1);
- ((uint8_t *)request->data + request->donecount +
- (size & ~1))[0] = buf[0];
+ (addr + (size & ~1))[0] = buf[0];
}
} else
- ATA_IDX_INSL_STRM(ch, ATA_DATA,
- (void*)((uintptr_t)request->data+request->donecount),
- size / sizeof(int32_t));
+ ATA_IDX_INSL_STRM(ch, ATA_DATA, (void*)addr, size / sizeof(int32_t));
if (request->transfersize < length) {
device_printf(request->parent, "WARNING - %s read data overrun %d>%d\n",
@@ -867,23 +865,21 @@ static void
ata_pio_write(struct ata_request *request, int length)
{
struct ata_channel *ch = device_get_softc(request->parent);
+ uint8_t *addr;
int size = min(request->transfersize, length);
int resid;
uint8_t buf[2];
- if (ch->flags & ATA_USE_16BIT || (size % sizeof(int32_t))) {
- ATA_IDX_OUTSW_STRM(ch, ATA_DATA,
- (void*)((uintptr_t)request->data+request->donecount),
- size / sizeof(int16_t));
+ addr = (uint8_t *)request->data + request->donecount;
+ if (ch->flags & ATA_USE_16BIT || (size % sizeof(int32_t)) ||
+ ((uintptr_t)addr % sizeof(int32_t))) {
+ ATA_IDX_OUTSW_STRM(ch, ATA_DATA, (void*)addr, size / sizeof(int16_t));
if (size & 1) {
- buf[0] = ((uint8_t *)request->data + request->donecount +
- (size & ~1))[0];
+ buf[0] = (addr + (size & ~1))[0];
ATA_IDX_OUTSW_STRM(ch, ATA_DATA, (void*)buf, 1);
}
} else
- ATA_IDX_OUTSL_STRM(ch, ATA_DATA,
- (void*)((uintptr_t)request->data+request->donecount),
- size / sizeof(int32_t));
+ ATA_IDX_OUTSL_STRM(ch, ATA_DATA, (void*)addr, size / sizeof(int32_t));
if (request->transfersize < length) {
device_printf(request->parent, "WARNING - %s write data underrun %d>%d\n",
diff --git a/sys/dev/ath/ath_hal/ah.c b/sys/dev/ath/ath_hal/ah.c
index dea1736..36815f1 100644
--- a/sys/dev/ath/ath_hal/ah.c
+++ b/sys/dev/ath/ath_hal/ah.c
@@ -657,7 +657,8 @@ ath_hal_getcapability(struct ath_hal *ah, HAL_CAPABILITY_TYPE type,
}
case HAL_CAP_RXBUFSIZE:
case HAL_CAP_NUM_MR_RETRIES:
- return HAL_EINVAL; /* XXX not yet */
+ *result = pCap->halNumMRRetries;
+ return HAL_OK;
case HAL_CAP_BT_COEX:
return pCap->halBtCoexSupport ? HAL_OK : HAL_ENOTSUPP;
case HAL_CAP_HT20_SGI:
diff --git a/sys/dev/ath/ath_hal/ah.h b/sys/dev/ath/ath_hal/ah.h
index aa3e8b6..a22c25d 100644
--- a/sys/dev/ath/ath_hal/ah.h
+++ b/sys/dev/ath/ath_hal/ah.h
@@ -220,6 +220,8 @@ typedef enum {
#define HAL_NUM_RX_QUEUES 2 /* max possible # of queues */
+#define HAL_TXFIFO_DEPTH 8 /* transmit fifo depth */
+
/*
* Transmit queue subtype. These map directly to
* WME Access Categories (except for UPSD). Refer
@@ -580,13 +582,16 @@ typedef enum {
typedef struct {
u_int Tries;
- u_int Rate;
+ u_int Rate; /* hardware rate code */
+ u_int RateIndex; /* rate series table index */
u_int PktDuration;
u_int ChSel;
u_int RateFlags;
#define HAL_RATESERIES_RTS_CTS 0x0001 /* use rts/cts w/this series */
#define HAL_RATESERIES_2040 0x0002 /* use ext channel for series */
#define HAL_RATESERIES_HALFGI 0x0004 /* use half-gi for series */
+#define HAL_RATESERIES_STBC 0x0008 /* use STBC for series */
+ u_int tx_power_cap;
} HAL_11N_RATE_SERIES;
typedef enum {
@@ -1084,6 +1089,15 @@ struct ath_hal {
void __ahdecl(*ah_reqTxIntrDesc)(struct ath_hal *, struct ath_desc*);
HAL_BOOL __ahdecl(*ah_getTxCompletionRates)(struct ath_hal *,
const struct ath_desc *ds, int *rates, int *tries);
+ void __ahdecl(*ah_setTxDescLink)(struct ath_hal *ah, void *ds,
+ uint32_t link);
+ void __ahdecl(*ah_getTxDescLink)(struct ath_hal *ah, void *ds,
+ uint32_t *link);
+ void __ahdecl(*ah_getTxDescLinkPtr)(struct ath_hal *ah, void *ds,
+ uint32_t **linkptr);
+ void __ahdecl(*ah_setupTxStatusRing)(struct ath_hal *,
+ void *ts_start, uint32_t ts_paddr_start,
+ uint16_t size);
/* Receive Functions */
uint32_t __ahdecl(*ah_getRxDP)(struct ath_hal*, HAL_RX_QUEUE);
@@ -1224,7 +1238,7 @@ struct ath_hal {
struct ath_desc *, u_int, u_int,
HAL_11N_RATE_SERIES [], u_int, u_int);
void __ahdecl(*ah_set11nAggrFirst)(struct ath_hal *,
- struct ath_desc *, u_int, u_int);
+ struct ath_desc *, u_int);
void __ahdecl(*ah_set11nAggrMiddle)(struct ath_hal *,
struct ath_desc *, u_int);
void __ahdecl(*ah_set11nAggrLast)(struct ath_hal *,
diff --git a/sys/dev/ath/ath_hal/ah_desc.h b/sys/dev/ath/ath_hal/ah_desc.h
index 1203ebb..542453f 100644
--- a/sys/dev/ath/ath_hal/ah_desc.h
+++ b/sys/dev/ath/ath_hal/ah_desc.h
@@ -57,16 +57,19 @@ struct ath_tx_status {
uint8_t ts_finaltsi; /* final transmit series index */
#ifdef AH_SUPPORT_AR5416
/* 802.11n status */
- uint8_t ts_flags; /* misc flags */
- int8_t ts_rssi_ctl[3]; /* tx ack RSSI [ctl, chain 0-2] */
- int8_t ts_rssi_ext[3]; /* tx ack RSSI [ext, chain 0-2] */
-/* #define ts_rssi ts_rssi_combined */
- uint32_t ts_ba_low; /* blockack bitmap low */
- uint32_t ts_ba_high; /* blockack bitmap high */
+ uint8_t ts_flags; /* misc flags */
+ uint8_t ts_queue_id; /* AR9300: TX queue id */
+ uint8_t ts_desc_id; /* AR9300: TX descriptor id */
uint8_t ts_tid; /* TID */
- uint32_t ts_evm0; /* evm bytes */
- uint32_t ts_evm1;
- uint32_t ts_evm2;
+/* #define ts_rssi ts_rssi_combined */
+ uint32_t ts_ba_low; /* blockack bitmap low */
+ uint32_t ts_ba_high; /* blockack bitmap high */
+ uint32_t ts_evm0; /* evm bytes */
+ uint32_t ts_evm1;
+ uint32_t ts_evm2;
+ int8_t ts_rssi_ctl[3]; /* tx ack RSSI [ctl, chain 0-2] */
+ int8_t ts_rssi_ext[3]; /* tx ack RSSI [ext, chain 0-2] */
+ uint8_t ts_pad[2];
#endif /* AH_SUPPORT_AR5416 */
};
@@ -243,6 +246,8 @@ struct ath_desc_status {
#define HAL_TXDESC_EXT_ONLY 0x0080 /* send on ext channel only (11n) */
#define HAL_TXDESC_EXT_AND_CTL 0x0100 /* send on ext + ctl channels (11n) */
#define HAL_TXDESC_VMF 0x0200 /* virtual more frag */
+#define HAL_TXDESC_LOWRXCHAIN 0x0400 /* switch to low RX chain */
+#define HAL_TXDESC_LDPC 0x1000
/* flags passed to rx descriptor setup methods */
#define HAL_RXDESC_INTREQ 0x0020 /* enable per-descriptor interrupt */
diff --git a/sys/dev/ath/ath_hal/ah_internal.h b/sys/dev/ath/ath_hal/ah_internal.h
index 65ec50e..200b84e 100644
--- a/sys/dev/ath/ath_hal/ah_internal.h
+++ b/sys/dev/ath/ath_hal/ah_internal.h
@@ -252,6 +252,7 @@ typedef struct {
int halRxStatusLen;
int halRxHpFifoDepth;
int halRxLpFifoDepth;
+ int halNumMRRetries;
} HAL_CAPABILITIES;
struct regDomain;
diff --git a/sys/dev/ath/ath_hal/ar5210/ar5210.h b/sys/dev/ath/ath_hal/ar5210/ar5210.h
index 657e250..b7cfea3 100644
--- a/sys/dev/ath/ath_hal/ar5210/ar5210.h
+++ b/sys/dev/ath/ath_hal/ar5210/ar5210.h
@@ -179,6 +179,12 @@ extern void ar5210GetTxIntrQueue(struct ath_hal *ah, uint32_t *);
extern void ar5210IntrReqTxDesc(struct ath_hal *ah, struct ath_desc *);
extern HAL_BOOL ar5210GetTxCompletionRates(struct ath_hal *ah,
const struct ath_desc *, int *rates, int *tries);
+extern void ar5210SetTxDescLink(struct ath_hal *ah, void *ds,
+ uint32_t link);
+extern void ar5210GetTxDescLink(struct ath_hal *ah, void *ds,
+ uint32_t *link);
+extern void ar5210GetTxDescLinkPtr(struct ath_hal *ah, void *ds,
+ uint32_t **linkptr);
extern uint32_t ar5210GetRxDP(struct ath_hal *, HAL_RX_QUEUE);
extern void ar5210SetRxDP(struct ath_hal *, uint32_t rxdp, HAL_RX_QUEUE);
diff --git a/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c b/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c
index 03c5f93..c62f936 100644
--- a/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c
+++ b/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c
@@ -75,6 +75,9 @@ static const struct ath_hal_private ar5210hal = {{
.ah_getTxIntrQueue = ar5210GetTxIntrQueue,
.ah_reqTxIntrDesc = ar5210IntrReqTxDesc,
.ah_getTxCompletionRates = ar5210GetTxCompletionRates,
+ .ah_setTxDescLink = ar5210SetTxDescLink,
+ .ah_getTxDescLink = ar5210GetTxDescLink,
+ .ah_getTxDescLinkPtr = ar5210GetTxDescLinkPtr,
/* RX Functions */
.ah_getRxDP = ar5210GetRxDP,
@@ -358,6 +361,7 @@ ar5210FillCapabilityInfo(struct ath_hal *ah)
pCap->halSleepAfterBeaconBroken = AH_TRUE;
pCap->halPSPollBroken = AH_FALSE;
+ pCap->halNumMRRetries = 1; /* No hardware MRR support */
pCap->halTotalQueues = HAL_NUM_TX_QUEUES;
pCap->halKeyCacheSize = 64;
diff --git a/sys/dev/ath/ath_hal/ar5210/ar5210_xmit.c b/sys/dev/ath/ath_hal/ar5210/ar5210_xmit.c
index f7c6030..ac3cb65 100644
--- a/sys/dev/ath/ath_hal/ar5210/ar5210_xmit.c
+++ b/sys/dev/ath/ath_hal/ar5210/ar5210_xmit.c
@@ -630,3 +630,36 @@ ar5210GetTxCompletionRates(struct ath_hal *ah, const struct ath_desc *ds0, int *
{
return AH_FALSE;
}
+
+/*
+ * Set the TX descriptor link pointer
+ */
+void
+ar5210SetTxDescLink(struct ath_hal *ah, void *ds, uint32_t link)
+{
+ struct ar5210_desc *ads = AR5210DESC(ds);
+
+ ads->ds_link = link;
+}
+
+/*
+ * Get the TX descriptor link pointer
+ */
+void
+ar5210GetTxDescLink(struct ath_hal *ah, void *ds, uint32_t *link)
+{
+ struct ar5210_desc *ads = AR5210DESC(ds);
+
+ *link = ads->ds_link;
+}
+
+/*
+ * Get a pointer to the TX descriptor link pointer
+ */
+void
+ar5210GetTxDescLinkPtr(struct ath_hal *ah, void *ds, uint32_t **linkptr)
+{
+ struct ar5210_desc *ads = AR5210DESC(ds);
+
+ *linkptr = &ads->ds_link;
+}
diff --git a/sys/dev/ath/ath_hal/ar5211/ar5211.h b/sys/dev/ath/ath_hal/ar5211/ar5211.h
index 1d6c8af..2d631fb 100644
--- a/sys/dev/ath/ath_hal/ar5211/ar5211.h
+++ b/sys/dev/ath/ath_hal/ar5211/ar5211.h
@@ -204,6 +204,12 @@ extern void ar5211GetTxIntrQueue(struct ath_hal *ah, uint32_t *);
extern void ar5211IntrReqTxDesc(struct ath_hal *ah, struct ath_desc *);
extern HAL_BOOL ar5211GetTxCompletionRates(struct ath_hal *ah,
const struct ath_desc *ds0, int *rates, int *tries);
+extern void ar5211SetTxDescLink(struct ath_hal *ah, void *ds,
+ uint32_t link);
+extern void ar5211GetTxDescLink(struct ath_hal *ah, void *ds,
+ uint32_t *link);
+extern void ar5211GetTxDescLinkPtr(struct ath_hal *ah, void *ds,
+ uint32_t **linkptr);
extern uint32_t ar5211GetRxDP(struct ath_hal *, HAL_RX_QUEUE);
extern void ar5211SetRxDP(struct ath_hal *, uint32_t rxdp, HAL_RX_QUEUE);
diff --git a/sys/dev/ath/ath_hal/ar5211/ar5211_attach.c b/sys/dev/ath/ath_hal/ar5211/ar5211_attach.c
index 186ece2..40a1f8a 100644
--- a/sys/dev/ath/ath_hal/ar5211/ar5211_attach.c
+++ b/sys/dev/ath/ath_hal/ar5211/ar5211_attach.c
@@ -75,6 +75,9 @@ static const struct ath_hal_private ar5211hal = {{
.ah_getTxIntrQueue = ar5211GetTxIntrQueue,
.ah_reqTxIntrDesc = ar5211IntrReqTxDesc,
.ah_getTxCompletionRates = ar5211GetTxCompletionRates,
+ .ah_setTxDescLink = ar5211SetTxDescLink,
+ .ah_getTxDescLink = ar5211GetTxDescLink,
+ .ah_getTxDescLinkPtr = ar5211GetTxDescLinkPtr,
/* RX Functions */
.ah_getRxDP = ar5211GetRxDP,
@@ -493,6 +496,7 @@ ar5211FillCapabilityInfo(struct ath_hal *ah)
pCap->halSleepAfterBeaconBroken = AH_TRUE;
pCap->halPSPollBroken = AH_TRUE;
pCap->halVEOLSupport = AH_TRUE;
+ pCap->halNumMRRetries = 1; /* No hardware MRR support */
pCap->halTotalQueues = HAL_NUM_TX_QUEUES;
pCap->halKeyCacheSize = 128;
diff --git a/sys/dev/ath/ath_hal/ar5211/ar5211_xmit.c b/sys/dev/ath/ath_hal/ar5211/ar5211_xmit.c
index e1e7f73..da6e5c9 100644
--- a/sys/dev/ath/ath_hal/ar5211/ar5211_xmit.c
+++ b/sys/dev/ath/ath_hal/ar5211/ar5211_xmit.c
@@ -671,3 +671,27 @@ ar5211GetTxCompletionRates(struct ath_hal *ah, const struct ath_desc *ds0, int *
return AH_FALSE;
}
+
+void
+ar5211SetTxDescLink(struct ath_hal *ah, void *ds, uint32_t link)
+{
+ struct ar5211_desc *ads = AR5211DESC(ds);
+
+ ads->ds_link = link;
+}
+
+void
+ar5211GetTxDescLink(struct ath_hal *ah, void *ds, uint32_t *link)
+{
+ struct ar5211_desc *ads = AR5211DESC(ds);
+
+ *link = ads->ds_link;
+}
+
+void
+ar5211GetTxDescLinkPtr(struct ath_hal *ah, void *ds, uint32_t **linkptr)
+{
+ struct ar5211_desc *ads = AR5211DESC(ds);
+
+ *linkptr = &ads->ds_link;
+}
diff --git a/sys/dev/ath/ath_hal/ar5212/ar5212.h b/sys/dev/ath/ath_hal/ar5212/ar5212.h
index a8b95d1..24770ce 100644
--- a/sys/dev/ath/ath_hal/ar5212/ar5212.h
+++ b/sys/dev/ath/ath_hal/ar5212/ar5212.h
@@ -602,6 +602,12 @@ extern void ar5212GetTxIntrQueue(struct ath_hal *ah, uint32_t *);
extern void ar5212IntrReqTxDesc(struct ath_hal *ah, struct ath_desc *);
extern HAL_BOOL ar5212GetTxCompletionRates(struct ath_hal *ah,
const struct ath_desc *ds0, int *rates, int *tries);
+extern void ar5212SetTxDescLink(struct ath_hal *ah, void *ds,
+ uint32_t link);
+extern void ar5212GetTxDescLink(struct ath_hal *ah, void *ds,
+ uint32_t *link);
+extern void ar5212GetTxDescLinkPtr(struct ath_hal *ah, void *ds,
+ uint32_t **linkptr);
extern const HAL_RATE_TABLE *ar5212GetRateTable(struct ath_hal *, u_int mode);
diff --git a/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c b/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c
index 43cbe7f..c3fd1c7 100644
--- a/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c
+++ b/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c
@@ -71,6 +71,9 @@ static const struct ath_hal_private ar5212hal = {{
.ah_getTxIntrQueue = ar5212GetTxIntrQueue,
.ah_reqTxIntrDesc = ar5212IntrReqTxDesc,
.ah_getTxCompletionRates = ar5212GetTxCompletionRates,
+ .ah_setTxDescLink = ar5212SetTxDescLink,
+ .ah_getTxDescLink = ar5212GetTxDescLink,
+ .ah_getTxDescLinkPtr = ar5212GetTxDescLinkPtr,
/* RX Functions */
.ah_getRxDP = ar5212GetRxDP,
@@ -821,6 +824,7 @@ ar5212FillCapabilityInfo(struct ath_hal *ah)
pCap->halTurboGSupport = pCap->halWirelessModes & HAL_MODE_108G;
pCap->halPSPollBroken = AH_TRUE; /* XXX fixed in later revs? */
+ pCap->halNumMRRetries = 4; /* Hardware supports 4 MRR */
pCap->halVEOLSupport = AH_TRUE;
pCap->halBssIdMaskSupport = AH_TRUE;
pCap->halMcastKeySrchSupport = AH_TRUE;
diff --git a/sys/dev/ath/ath_hal/ar5212/ar5212_xmit.c b/sys/dev/ath/ath_hal/ar5212/ar5212_xmit.c
index 008330a..773d5f4 100644
--- a/sys/dev/ath/ath_hal/ar5212/ar5212_xmit.c
+++ b/sys/dev/ath/ath_hal/ar5212/ar5212_xmit.c
@@ -971,3 +971,27 @@ ar5212GetTxCompletionRates(struct ath_hal *ah, const struct ath_desc *ds0, int *
return AH_TRUE;
}
+
+void
+ar5212SetTxDescLink(struct ath_hal *ah, void *ds, uint32_t link)
+{
+ struct ar5212_desc *ads = AR5212DESC(ds);
+
+ ads->ds_link = link;
+}
+
+void
+ar5212GetTxDescLink(struct ath_hal *ah, void *ds, uint32_t *link)
+{
+ struct ar5212_desc *ads = AR5212DESC(ds);
+
+ *link = ads->ds_link;
+}
+
+void
+ar5212GetTxDescLinkPtr(struct ath_hal *ah, void *ds, uint32_t **linkptr)
+{
+ struct ar5212_desc *ads = AR5212DESC(ds);
+
+ *linkptr = &ads->ds_link;
+}
diff --git a/sys/dev/ath/ath_hal/ar5416/ar5416.h b/sys/dev/ath/ath_hal/ar5416/ar5416.h
index 5a0e7ef..75cd3df 100644
--- a/sys/dev/ath/ath_hal/ar5416/ar5416.h
+++ b/sys/dev/ath/ath_hal/ar5416/ar5416.h
@@ -387,7 +387,7 @@ extern void ar5416Set11nRateScenario(struct ath_hal *ah, struct ath_desc *ds,
u_int nseries, u_int flags);
extern void ar5416Set11nAggrFirst(struct ath_hal *ah, struct ath_desc *ds,
- u_int aggrLen, u_int numDelims);
+ u_int aggrLen);
extern void ar5416Set11nAggrMiddle(struct ath_hal *ah, struct ath_desc *ds, u_int numDelims);
extern void ar5416Set11nAggrLast(struct ath_hal *ah, struct ath_desc *ds);
diff --git a/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c b/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c
index fc5eefb..295124f7 100644
--- a/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c
+++ b/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c
@@ -892,6 +892,7 @@ ar5416FillCapabilityInfo(struct ath_hal *ah)
pCap->halTurboGSupport = pCap->halWirelessModes & HAL_MODE_108G;
pCap->halPSPollBroken = AH_TRUE; /* XXX fixed in later revs? */
+ pCap->halNumMRRetries = 4; /* Hardware supports 4 MRR */
pCap->halVEOLSupport = AH_TRUE;
pCap->halBssIdMaskSupport = AH_TRUE;
pCap->halMcastKeySrchSupport = AH_TRUE; /* Works on AR5416 and later */
diff --git a/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c b/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c
index e33a55d..bc1b7ee4 100644
--- a/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c
+++ b/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c
@@ -135,6 +135,7 @@ ar5416StopTxDma(struct ath_hal *ah, u_int q)
#define set11nRateFlags(_series, _index) \
((_series)[_index].RateFlags & HAL_RATESERIES_2040 ? AR_2040_##_index : 0) \
|((_series)[_index].RateFlags & HAL_RATESERIES_HALFGI ? AR_GI##_index : 0) \
+ |((_series)[_index].RateFlags & HAL_RATESERIES_STBC ? AR_STBC##_index : 0) \
|SM((_series)[_index].ChSel, AR_ChainSel##_index)
/*
@@ -727,16 +728,14 @@ ar5416Set11nRateScenario(struct ath_hal *ah, struct ath_desc *ds,
}
void
-ar5416Set11nAggrFirst(struct ath_hal *ah, struct ath_desc *ds,
- u_int aggrLen, u_int numDelims)
+ar5416Set11nAggrFirst(struct ath_hal *ah, struct ath_desc *ds, u_int aggrLen)
{
struct ar5416_desc *ads = AR5416DESC(ds);
ads->ds_ctl1 |= (AR_IsAggr | AR_MoreAggr);
ads->ds_ctl6 &= ~(AR_AggrLen | AR_PadDelim);
- ads->ds_ctl6 |= SM(aggrLen, AR_AggrLen) |
- SM(numDelims, AR_PadDelim);
+ ads->ds_ctl6 |= SM(aggrLen, AR_AggrLen);
}
void
diff --git a/sys/dev/ath/ath_rate/amrr/amrr.c b/sys/dev/ath/ath_rate/amrr/amrr.c
index efba5dd..c252009 100644
--- a/sys/dev/ath/ath_rate/amrr/amrr.c
+++ b/sys/dev/ath/ath_rate/amrr/amrr.c
@@ -421,6 +421,14 @@ ath_rate_ctl(void *arg, struct ieee80211_node *ni)
}
}
+static int
+ath_rate_fetch_node_stats(struct ath_softc *sc, struct ath_node *an,
+ struct ath_rateioctl *re)
+{
+
+ return (EINVAL);
+}
+
static void
ath_rate_sysctlattach(struct ath_softc *sc)
{
diff --git a/sys/dev/ath/ath_rate/onoe/onoe.c b/sys/dev/ath/ath_rate/onoe/onoe.c
index 7160346..7c73926 100644
--- a/sys/dev/ath/ath_rate/onoe/onoe.c
+++ b/sys/dev/ath/ath_rate/onoe/onoe.c
@@ -407,6 +407,14 @@ ath_rate_sysctlattach(struct ath_softc *sc)
"rate control: # good periods before raising rate");
}
+static int
+ath_rate_fetch_node_stats(struct ath_softc *sc, struct ath_node *an,
+ struct ath_rateioctl *re)
+{
+
+ return (EINVAL);
+}
+
struct ath_ratectrl *
ath_rate_attach(struct ath_softc *sc)
{
diff --git a/sys/dev/ath/ath_rate/sample/sample.c b/sys/dev/ath/ath_rate/sample/sample.c
index ae77e5e..985551b 100644
--- a/sys/dev/ath/ath_rate/sample/sample.c
+++ b/sys/dev/ath/ath_rate/sample/sample.c
@@ -105,8 +105,6 @@ __FBSDID("$FreeBSD$");
static void ath_rate_ctl_reset(struct ath_softc *, struct ieee80211_node *);
-static const int packet_size_bins[NUM_PACKET_SIZE_BINS] = { 250, 1600 };
-
static __inline int
size_to_bin(int size)
{
@@ -128,12 +126,6 @@ size_to_bin(int size)
return NUM_PACKET_SIZE_BINS-1;
}
-static __inline int
-bin_to_size(int index)
-{
- return packet_size_bins[index];
-}
-
void
ath_rate_node_init(struct ath_softc *sc, struct ath_node *an)
{
@@ -510,8 +502,10 @@ ath_rate_findrate(struct ath_softc *sc, struct ath_node *an,
goto done;
}
- /* XXX TODO: this doesn't know about 11gn vs 11g protection; teach it */
- mrr = sc->sc_mrretry && !(ic->ic_flags & IEEE80211_F_USEPROT);
+ mrr = sc->sc_mrretry;
+ /* XXX check HT protmode too */
+ if (mrr && (ic->ic_flags & IEEE80211_F_USEPROT && !sc->sc_mrrprot))
+ mrr = 0;
best_rix = pick_best_rate(an, rt, size_bin, !mrr);
if (best_rix >= 0) {
@@ -918,7 +912,11 @@ ath_rate_tx_complete(struct ath_softc *sc, struct ath_node *an,
short_tries, long_tries);
return;
}
- mrr = sc->sc_mrretry && !(ic->ic_flags & IEEE80211_F_USEPROT);
+ mrr = sc->sc_mrretry;
+ /* XXX check HT protmode too */
+ if (mrr && (ic->ic_flags & IEEE80211_F_USEPROT && !sc->sc_mrrprot))
+ mrr = 0;
+
if (!mrr || ts->ts_finaltsi == 0) {
if (!IS_RATE_DEFINED(sn, final_rix)) {
badrate(ifp, 0, ts->ts_rate, long_tries, status);
@@ -1198,6 +1196,93 @@ ath_rate_ctl_reset(struct ath_softc *sc, struct ieee80211_node *ni)
#undef DOT11RATE
}
+/*
+ * Fetch the statistics for the given node.
+ *
+ * The ieee80211 node must be referenced and unlocked, however the ath_node
+ * must be locked.
+ *
+ * The main difference here is that we convert the rate indexes
+ * to 802.11 rates, or the userland output won't make much sense
+ * as it has no access to the rix table.
+ */
+int
+ath_rate_fetch_node_stats(struct ath_softc *sc, struct ath_node *an,
+ struct ath_rateioctl *rs)
+{
+ struct sample_node *sn = ATH_NODE_SAMPLE(an);
+ const HAL_RATE_TABLE *rt = sc->sc_currates;
+ struct ath_rateioctl_tlv av;
+ struct ath_rateioctl_rt *tv;
+ int y;
+ int o = 0;
+
+ ATH_NODE_LOCK_ASSERT(an);
+
+ /*
+ * Ensure there's enough space for the statistics.
+ */
+ if (rs->len <
+ sizeof(struct ath_rateioctl_tlv) +
+ sizeof(struct ath_rateioctl_rt) +
+ sizeof(struct ath_rateioctl_tlv) +
+ sizeof(struct sample_node)) {
+ device_printf(sc->sc_dev, "%s: len=%d, too short\n",
+ __func__,
+ rs->len);
+ return (EINVAL);
+ }
+
+ /*
+ * Take a temporary copy of the sample node state so we can
+ * modify it before we copy it.
+ */
+ tv = malloc(sizeof(struct ath_rateioctl_rt), M_TEMP,
+ M_NOWAIT | M_ZERO);
+ if (tv == NULL) {
+ return (ENOMEM);
+ }
+
+ /*
+ * Populate the rate table mapping TLV.
+ */
+ tv->nentries = rt->rateCount;
+ for (y = 0; y < rt->rateCount; y++) {
+ tv->ratecode[y] = rt->info[y].dot11Rate & IEEE80211_RATE_VAL;
+ if (rt->info[y].phy == IEEE80211_T_HT)
+ tv->ratecode[y] |= IEEE80211_RATE_MCS;
+ }
+
+ o = 0;
+ /*
+ * First TLV - rate code mapping
+ */
+ av.tlv_id = ATH_RATE_TLV_RATETABLE;
+ av.tlv_len = sizeof(struct ath_rateioctl_rt);
+ copyout(&av, rs->buf + o, sizeof(struct ath_rateioctl_tlv));
+ o += sizeof(struct ath_rateioctl_tlv);
+ copyout(tv, rs->buf + o, sizeof(struct ath_rateioctl_rt));
+ o += sizeof(struct ath_rateioctl_rt);
+
+ /*
+ * Second TLV - sample node statistics
+ */
+ av.tlv_id = ATH_RATE_TLV_SAMPLENODE;
+ av.tlv_len = sizeof(struct sample_node);
+ copyout(&av, rs->buf + o, sizeof(struct ath_rateioctl_tlv));
+ o += sizeof(struct ath_rateioctl_tlv);
+
+ /*
+ * Copy the statistics over to the provided buffer.
+ */
+ copyout(sn, rs->buf + o, sizeof(struct sample_node));
+ o += sizeof(struct sample_node);
+
+ free(tv, M_TEMP);
+
+ return (0);
+}
+
static void
sample_stats(void *arg, struct ieee80211_node *ni)
{
diff --git a/sys/dev/ath/ath_rate/sample/sample.h b/sys/dev/ath/ath_rate/sample/sample.h
index bb72c0a..b9e7230 100644
--- a/sys/dev/ath/ath_rate/sample/sample.h
+++ b/sys/dev/ath/ath_rate/sample/sample.h
@@ -79,10 +79,18 @@ struct txschedule {
*/
#define NUM_PACKET_SIZE_BINS 2
+static const int packet_size_bins[NUM_PACKET_SIZE_BINS] = { 250, 1600 };
+
+static inline int
+bin_to_size(int index)
+{
+ return packet_size_bins[index];
+}
+
/* per-node state */
struct sample_node {
int static_rix; /* rate index of fixed tx rate */
-#define SAMPLE_MAXRATES 32 /* NB: corresponds to hal info[32] */
+#define SAMPLE_MAXRATES 64 /* NB: corresponds to hal info[32] */
uint32_t ratemask; /* bit mask of valid rate indices */
const struct txschedule *sched; /* tx schedule table */
@@ -101,6 +109,9 @@ struct sample_node {
int packets_since_sample[NUM_PACKET_SIZE_BINS];
unsigned sample_tt[NUM_PACKET_SIZE_BINS];
};
+
+#ifdef _KERNEL
+
#define ATH_NODE_SAMPLE(an) ((struct sample_node *)&(an)[1])
#define IS_RATE_DEFINED(sn, rix) (((sn)->ratemask & (1<<(rix))) != 0)
@@ -225,4 +236,7 @@ static unsigned calc_usecs_unicast_packet(struct ath_softc *sc,
}
return tt;
}
+
+#endif /* _KERNEL */
+
#endif /* _DEV_ATH_RATE_SAMPLE_H */
diff --git a/sys/dev/ath/if_ath.c b/sys/dev/ath/if_ath.c
index 965a1fd..caae6308 100644
--- a/sys/dev/ath/if_ath.c
+++ b/sys/dev/ath/if_ath.c
@@ -109,6 +109,7 @@ __FBSDID("$FreeBSD$");
#include <dev/ath/if_ath_keycache.h>
#include <dev/ath/if_ath_rx.h>
#include <dev/ath/if_ath_rx_edma.h>
+#include <dev/ath/if_ath_tx_edma.h>
#include <dev/ath/if_ath_beacon.h>
#include <dev/ath/if_athdfs.h>
@@ -253,6 +254,28 @@ SYSCTL_INT(_hw_ath, OID_AUTO, bstuck, CTLFLAG_RW, &ath_bstuck_threshold,
MALLOC_DEFINE(M_ATHDEV, "athdev", "ath driver dma buffers");
+void
+ath_legacy_attach_comp_func(struct ath_softc *sc)
+{
+
+ /*
+ * Special case certain configurations. Note the
+ * CAB queue is handled by these specially so don't
+ * include them when checking the txq setup mask.
+ */
+ switch (sc->sc_txqsetup &~ (1<<sc->sc_cabq->axq_qnum)) {
+ case 0x01:
+ TASK_INIT(&sc->sc_txtask, 0, ath_tx_proc_q0, sc);
+ break;
+ case 0x0f:
+ TASK_INIT(&sc->sc_txtask, 0, ath_tx_proc_q0123, sc);
+ break;
+ default:
+ TASK_INIT(&sc->sc_txtask, 0, ath_tx_proc, sc);
+ break;
+ }
+}
+
#define HAL_MODE_HT20 (HAL_MODE_11NG_HT20 | HAL_MODE_11NA_HT20)
#define HAL_MODE_HT40 \
(HAL_MODE_11NG_HT40PLUS | HAL_MODE_11NG_HT40MINUS | \
@@ -306,8 +329,11 @@ ath_attach(u_int16_t devid, struct ath_softc *sc)
if (ath_hal_hasedma(sc->sc_ah)) {
sc->sc_isedma = 1;
ath_recv_setup_edma(sc);
- } else
+ ath_xmit_setup_edma(sc);
+ } else {
ath_recv_setup_legacy(sc);
+ ath_xmit_setup_legacy(sc);
+ }
/*
* Check if the MAC has multi-rate retry support.
@@ -367,14 +393,24 @@ ath_attach(u_int16_t devid, struct ath_softc *sc)
ath_setcurmode(sc, IEEE80211_MODE_11A);
/*
- * Allocate tx+rx descriptors and populate the lists.
+ * Allocate TX descriptors and populate the lists.
*/
error = ath_desc_alloc(sc);
if (error != 0) {
- if_printf(ifp, "failed to allocate descriptors: %d\n", error);
+ if_printf(ifp, "failed to allocate TX descriptors: %d\n",
+ error);
+ goto bad;
+ }
+ error = ath_txdma_setup(sc);
+ if (error != 0) {
+ if_printf(ifp, "failed to allocate TX descriptors: %d\n",
+ error);
goto bad;
}
+ /*
+ * Allocate RX descriptors and populate the lists.
+ */
error = ath_rxdma_setup(sc);
if (error != 0) {
if_printf(ifp, "failed to allocate RX descriptors: %d\n",
@@ -446,21 +482,12 @@ ath_attach(u_int16_t devid, struct ath_softc *sc)
}
/*
- * Special case certain configurations. Note the
- * CAB queue is handled by these specially so don't
- * include them when checking the txq setup mask.
+ * Attach the TX completion function.
+ *
+ * The non-EDMA chips may have some special case optimisations;
+ * this method gives everyone a chance to attach cleanly.
*/
- switch (sc->sc_txqsetup &~ (1<<sc->sc_cabq->axq_qnum)) {
- case 0x01:
- TASK_INIT(&sc->sc_txtask, 0, ath_tx_proc_q0, sc);
- break;
- case 0x0f:
- TASK_INIT(&sc->sc_txtask, 0, ath_tx_proc_q0123, sc);
- break;
- default:
- TASK_INIT(&sc->sc_txtask, 0, ath_tx_proc, sc);
- break;
- }
+ sc->sc_tx.xmit_attach_comp_func(sc);
/*
* Setup rate control. Some rate control modules
@@ -678,6 +705,12 @@ ath_attach(u_int16_t devid, struct ath_softc *sc)
(void) ath_hal_settxchainmask(sc->sc_ah, tx_chainmask);
}
+ /*
+ * Disable MRR with protected frames by default.
+ * Only 802.11n series NICs can handle this.
+ */
+ sc->sc_mrrprot = 0; /* XXX should be a capability */
+
#ifdef ATH_ENABLE_11N
/*
* Query HT capabilities
@@ -687,6 +720,9 @@ ath_attach(u_int16_t devid, struct ath_softc *sc)
int rxs, txs;
device_printf(sc->sc_dev, "[HT] enabling HT modes\n");
+
+ sc->sc_mrrprot = 1; /* XXX should be a capability */
+
ic->ic_htcaps = IEEE80211_HTC_HT /* HT operation */
| IEEE80211_HTC_AMPDU /* A-MPDU tx/rx */
| IEEE80211_HTC_AMSDU /* A-MSDU tx/rx */
@@ -858,6 +894,7 @@ ath_attach(u_int16_t devid, struct ath_softc *sc)
bad2:
ath_tx_cleanup(sc);
ath_desc_free(sc);
+ ath_txdma_teardown(sc);
ath_rxdma_teardown(sc);
bad:
if (ah)
@@ -901,6 +938,7 @@ ath_detach(struct ath_softc *sc)
ath_dfs_detach(sc);
ath_desc_free(sc);
+ ath_txdma_teardown(sc);
ath_rxdma_teardown(sc);
ath_tx_cleanup(sc);
ath_hal_detach(sc->sc_ah); /* NB: sets chip in full sleep */
@@ -2749,28 +2787,32 @@ ath_load_cb(void *arg, bus_dma_segment_t *segs, int nsegs, int error)
*paddr = segs->ds_addr;
}
+/*
+ * Allocate the descriptors and appropriate DMA tag/setup.
+ *
+ * For some situations (eg EDMA TX completion), there isn't a requirement
+ * for the ath_buf entries to be allocated.
+ */
int
-ath_descdma_setup(struct ath_softc *sc,
+ath_descdma_alloc_desc(struct ath_softc *sc,
struct ath_descdma *dd, ath_bufhead *head,
- const char *name, int nbuf, int ndesc)
+ const char *name, int ds_size, int ndesc)
{
#define DS2PHYS(_dd, _ds) \
((_dd)->dd_desc_paddr + ((caddr_t)(_ds) - (caddr_t)(_dd)->dd_desc))
#define ATH_DESC_4KB_BOUND_CHECK(_daddr, _len) \
((((u_int32_t)(_daddr) & 0xFFF) > (0x1000 - (_len))) ? 1 : 0)
struct ifnet *ifp = sc->sc_ifp;
- uint8_t *ds;
- struct ath_buf *bf;
- int i, bsize, error;
- int desc_len;
+ int error;
- desc_len = sizeof(struct ath_desc);
+ dd->dd_descsize = ds_size;
- DPRINTF(sc, ATH_DEBUG_RESET, "%s: %s DMA: %u buffers %u desc/buf\n",
- __func__, name, nbuf, ndesc);
+ DPRINTF(sc, ATH_DEBUG_RESET,
+ "%s: %s DMA: %u desc, %d bytes per descriptor\n",
+ __func__, name, ndesc, dd->dd_descsize);
dd->dd_name = name;
- dd->dd_desc_len = desc_len * nbuf * ndesc;
+ dd->dd_desc_len = dd->dd_descsize * ndesc;
/*
* Merlin work-around:
@@ -2778,8 +2820,8 @@ ath_descdma_setup(struct ath_softc *sc,
* Assume one skipped descriptor per 4KB page.
*/
if (! ath_hal_split4ktrans(sc->sc_ah)) {
- int numdescpage = 4096 / (desc_len * ndesc);
- dd->dd_desc_len = (nbuf / numdescpage + 1) * 4096;
+ int numpages = dd->dd_desc_len / 4096;
+ dd->dd_desc_len += ds_size * numpages;
}
/*
@@ -2815,7 +2857,7 @@ ath_descdma_setup(struct ath_softc *sc,
&dd->dd_dmamap);
if (error != 0) {
if_printf(ifp, "unable to alloc memory for %u %s descriptors, "
- "error %u\n", nbuf * ndesc, dd->dd_name, error);
+ "error %u\n", ndesc, dd->dd_name, error);
goto fail1;
}
@@ -2829,10 +2871,49 @@ ath_descdma_setup(struct ath_softc *sc,
goto fail2;
}
- ds = (uint8_t *) dd->dd_desc;
DPRINTF(sc, ATH_DEBUG_RESET, "%s: %s DMA map: %p (%lu) -> %p (%lu)\n",
- __func__, dd->dd_name, ds, (u_long) dd->dd_desc_len,
- (caddr_t) dd->dd_desc_paddr, /*XXX*/ (u_long) dd->dd_desc_len);
+ __func__, dd->dd_name, (uint8_t *) dd->dd_desc,
+ (u_long) dd->dd_desc_len, (caddr_t) dd->dd_desc_paddr,
+ /*XXX*/ (u_long) dd->dd_desc_len);
+
+ return (0);
+
+fail2:
+ bus_dmamem_free(dd->dd_dmat, dd->dd_desc, dd->dd_dmamap);
+fail1:
+ bus_dmamap_destroy(dd->dd_dmat, dd->dd_dmamap);
+fail0:
+ bus_dma_tag_destroy(dd->dd_dmat);
+ memset(dd, 0, sizeof(*dd));
+ return error;
+#undef DS2PHYS
+#undef ATH_DESC_4KB_BOUND_CHECK
+}
+
+int
+ath_descdma_setup(struct ath_softc *sc,
+ struct ath_descdma *dd, ath_bufhead *head,
+ const char *name, int ds_size, int nbuf, int ndesc)
+{
+#define DS2PHYS(_dd, _ds) \
+ ((_dd)->dd_desc_paddr + ((caddr_t)(_ds) - (caddr_t)(_dd)->dd_desc))
+#define ATH_DESC_4KB_BOUND_CHECK(_daddr, _len) \
+ ((((u_int32_t)(_daddr) & 0xFFF) > (0x1000 - (_len))) ? 1 : 0)
+ struct ifnet *ifp = sc->sc_ifp;
+ uint8_t *ds;
+ struct ath_buf *bf;
+ int i, bsize, error;
+
+ /* Allocate descriptors */
+ error = ath_descdma_alloc_desc(sc, dd, head, name, ds_size,
+ nbuf * ndesc);
+
+ /* Assume any errors during allocation were dealt with */
+ if (error != 0) {
+ return (error);
+ }
+
+ ds = (uint8_t *) dd->dd_desc;
/* allocate rx buffers */
bsize = sizeof(struct ath_buf) * nbuf;
@@ -2845,7 +2926,7 @@ ath_descdma_setup(struct ath_softc *sc,
dd->dd_bufptr = bf;
TAILQ_INIT(head);
- for (i = 0; i < nbuf; i++, bf++, ds += (ndesc * desc_len)) {
+ for (i = 0; i < nbuf; i++, bf++, ds += (ndesc * dd->dd_descsize)) {
bf->bf_desc = (struct ath_desc *) ds;
bf->bf_daddr = DS2PHYS(dd, ds);
if (! ath_hal_split4ktrans(sc->sc_ah)) {
@@ -2855,7 +2936,7 @@ ath_descdma_setup(struct ath_softc *sc,
* in the descriptor.
*/
if (ATH_DESC_4KB_BOUND_CHECK(bf->bf_daddr,
- desc_len * ndesc)) {
+ dd->dd_descsize)) {
/* Start at the next page */
ds += 0x1000 - (bf->bf_daddr & 0xFFF);
bf->bf_desc = (struct ath_desc *) ds;
@@ -2873,14 +2954,18 @@ ath_descdma_setup(struct ath_softc *sc,
bf->bf_lastds = bf->bf_desc; /* Just an initial value */
TAILQ_INSERT_TAIL(head, bf, bf_list);
}
+
+ /*
+ * XXX TODO: ensure that ds doesn't overflow the descriptor
+ * allocation otherwise weird stuff will occur and crash your
+ * machine.
+ */
return 0;
+ /* XXX this should likely just call ath_descdma_cleanup() */
fail3:
bus_dmamap_unload(dd->dd_dmat, dd->dd_dmamap);
-fail2:
bus_dmamem_free(dd->dd_dmat, dd->dd_desc, dd->dd_dmamap);
-fail1:
bus_dmamap_destroy(dd->dd_dmat, dd->dd_dmamap);
-fail0:
bus_dma_tag_destroy(dd->dd_dmat);
memset(dd, 0, sizeof(*dd));
return error;
@@ -2888,6 +2973,69 @@ fail0:
#undef ATH_DESC_4KB_BOUND_CHECK
}
+/*
+ * Allocate ath_buf entries but no descriptor contents.
+ *
+ * This is for RX EDMA where the descriptors are the header part of
+ * the RX buffer.
+ */
+int
+ath_descdma_setup_rx_edma(struct ath_softc *sc,
+ struct ath_descdma *dd, ath_bufhead *head,
+ const char *name, int nbuf, int rx_status_len)
+{
+ struct ifnet *ifp = sc->sc_ifp;
+ struct ath_buf *bf;
+ int i, bsize, error;
+
+ DPRINTF(sc, ATH_DEBUG_RESET, "%s: %s DMA: %u buffers\n",
+ __func__, name, nbuf);
+
+ dd->dd_name = name;
+ /*
+ * This is (mostly) purely for show. We're not allocating any actual
+ * descriptors here as EDMA RX has the descriptor be part
+ * of the RX buffer.
+ *
+ * However, dd_desc_len is used by ath_descdma_free() to determine
+ * whether we have already freed this DMA mapping.
+ */
+ dd->dd_desc_len = rx_status_len * nbuf;
+ dd->dd_descsize = rx_status_len;
+
+ /* allocate rx buffers */
+ bsize = sizeof(struct ath_buf) * nbuf;
+ bf = malloc(bsize, M_ATHDEV, M_NOWAIT | M_ZERO);
+ if (bf == NULL) {
+ if_printf(ifp, "malloc of %s buffers failed, size %u\n",
+ dd->dd_name, bsize);
+ error = ENOMEM;
+ goto fail3;
+ }
+ dd->dd_bufptr = bf;
+
+ TAILQ_INIT(head);
+ for (i = 0; i < nbuf; i++, bf++) {
+ bf->bf_desc = NULL;
+ bf->bf_daddr = 0;
+ bf->bf_lastds = NULL; /* Just an initial value */
+
+ error = bus_dmamap_create(sc->sc_dmat, BUS_DMA_NOWAIT,
+ &bf->bf_dmamap);
+ if (error != 0) {
+ if_printf(ifp, "unable to create dmamap for %s "
+ "buffer %u, error %u\n", dd->dd_name, i, error);
+ ath_descdma_cleanup(sc, dd, head);
+ return error;
+ }
+ TAILQ_INSERT_TAIL(head, bf, bf_list);
+ }
+ return 0;
+fail3:
+ memset(dd, 0, sizeof(*dd));
+ return error;
+}
+
void
ath_descdma_cleanup(struct ath_softc *sc,
struct ath_descdma *dd, ath_bufhead *head)
@@ -2895,32 +3043,39 @@ ath_descdma_cleanup(struct ath_softc *sc,
struct ath_buf *bf;
struct ieee80211_node *ni;
- bus_dmamap_unload(dd->dd_dmat, dd->dd_dmamap);
- bus_dmamem_free(dd->dd_dmat, dd->dd_desc, dd->dd_dmamap);
- bus_dmamap_destroy(dd->dd_dmat, dd->dd_dmamap);
- bus_dma_tag_destroy(dd->dd_dmat);
+ if (dd->dd_dmamap != 0) {
+ bus_dmamap_unload(dd->dd_dmat, dd->dd_dmamap);
+ bus_dmamem_free(dd->dd_dmat, dd->dd_desc, dd->dd_dmamap);
+ bus_dmamap_destroy(dd->dd_dmat, dd->dd_dmamap);
+ bus_dma_tag_destroy(dd->dd_dmat);
+ }
- TAILQ_FOREACH(bf, head, bf_list) {
- if (bf->bf_m) {
- m_freem(bf->bf_m);
- bf->bf_m = NULL;
- }
- if (bf->bf_dmamap != NULL) {
- bus_dmamap_destroy(sc->sc_dmat, bf->bf_dmamap);
- bf->bf_dmamap = NULL;
- }
- ni = bf->bf_node;
- bf->bf_node = NULL;
- if (ni != NULL) {
- /*
- * Reclaim node reference.
- */
- ieee80211_free_node(ni);
+ if (head != NULL) {
+ TAILQ_FOREACH(bf, head, bf_list) {
+ if (bf->bf_m) {
+ m_freem(bf->bf_m);
+ bf->bf_m = NULL;
+ }
+ if (bf->bf_dmamap != NULL) {
+ bus_dmamap_destroy(sc->sc_dmat, bf->bf_dmamap);
+ bf->bf_dmamap = NULL;
+ }
+ ni = bf->bf_node;
+ bf->bf_node = NULL;
+ if (ni != NULL) {
+ /*
+ * Reclaim node reference.
+ */
+ ieee80211_free_node(ni);
+ }
}
}
- TAILQ_INIT(head);
- free(dd->dd_bufptr, M_ATHDEV);
+ if (head != NULL)
+ TAILQ_INIT(head);
+
+ if (dd->dd_bufptr != NULL)
+ free(dd->dd_bufptr, M_ATHDEV);
memset(dd, 0, sizeof(*dd));
}
@@ -2930,14 +3085,15 @@ ath_desc_alloc(struct ath_softc *sc)
int error;
error = ath_descdma_setup(sc, &sc->sc_txdma, &sc->sc_txbuf,
- "tx", ath_txbuf, ATH_TXDESC);
+ "tx", sc->sc_tx_desclen, ath_txbuf, ATH_TXDESC);
if (error != 0) {
return error;
}
sc->sc_txbuf_cnt = ath_txbuf;
error = ath_descdma_setup(sc, &sc->sc_txdma_mgmt, &sc->sc_txbuf_mgmt,
- "tx_mgmt", ath_txbuf_mgmt, ATH_TXDESC);
+ "tx_mgmt", sc->sc_tx_desclen, ath_txbuf_mgmt,
+ ATH_TXDESC);
if (error != 0) {
ath_descdma_cleanup(sc, &sc->sc_txdma, &sc->sc_txbuf);
return error;
@@ -2949,7 +3105,7 @@ ath_desc_alloc(struct ath_softc *sc)
*/
error = ath_descdma_setup(sc, &sc->sc_bdma, &sc->sc_bbuf,
- "beacon", ATH_BCBUF, 1);
+ "beacon", sc->sc_tx_desclen, ATH_BCBUF, 1);
if (error != 0) {
ath_descdma_cleanup(sc, &sc->sc_txdma, &sc->sc_txbuf);
ath_descdma_cleanup(sc, &sc->sc_txdma_mgmt,
@@ -3429,8 +3585,8 @@ ath_tx_update_busy(struct ath_softc *sc)
* Kick the packet scheduler if needed. This can occur from this
* particular task.
*/
-static int
-ath_tx_processq(struct ath_softc *sc, struct ath_txq *txq, int dosched)
+int
+ath_legacy_tx_processq(struct ath_softc *sc, struct ath_txq *txq, int dosched)
{
struct ath_hal *ah = sc->sc_ah;
struct ath_buf *bf;
@@ -3830,7 +3986,7 @@ ath_tx_freebuf(struct ath_softc *sc, struct ath_buf *bf, int status)
}
void
-ath_tx_draintxq(struct ath_softc *sc, struct ath_txq *txq)
+ath_legacy_tx_draintxq(struct ath_softc *sc, struct ath_txq *txq)
{
#ifdef ATH_DEBUG
struct ath_hal *ah = sc->sc_ah;
@@ -4861,6 +5017,43 @@ ath_watchdog(void *arg)
callout_schedule(&sc->sc_wd_ch, hz);
}
+/*
+ * Fetch the rate control statistics for the given node.
+ */
+static int
+ath_ioctl_ratestats(struct ath_softc *sc, struct ath_rateioctl *rs)
+{
+ struct ath_node *an;
+ struct ieee80211com *ic = sc->sc_ifp->if_l2com;
+ struct ieee80211_node *ni;
+ int error = 0;
+
+ /* Perform a lookup on the given node */
+ ni = ieee80211_find_node(&ic->ic_sta, rs->is_u.macaddr);
+ if (ni == NULL) {
+ error = EINVAL;
+ goto bad;
+ }
+
+ /* Lock the ath_node */
+ an = ATH_NODE(ni);
+ ATH_NODE_LOCK(an);
+
+ /* Fetch the rate control stats for this node */
+ error = ath_rate_fetch_node_stats(sc, an, rs);
+
+ /* No matter what happens here, just drop through */
+
+ /* Unlock the ath_node */
+ ATH_NODE_UNLOCK(an);
+
+ /* Unref the node */
+ ieee80211_node_decref(ni);
+
+bad:
+ return (error);
+}
+
#ifdef ATH_DIAGAPI
/*
* Diagnostic interface to the HAL. This is used by various
@@ -5009,6 +5202,9 @@ ath_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
error = ath_ioctl_phyerr(sc,(struct ath_diag*) ifr);
break;
#endif
+ case SIOCGATHNODERATESTATS:
+ error = ath_ioctl_ratestats(sc, (struct ath_rateioctl *) ifr);
+ break;
case SIOCGIFADDR:
error = ether_ioctl(ifp, cmd, data);
break;
diff --git a/sys/dev/ath/if_ath_ahb.c b/sys/dev/ath/if_ath_ahb.c
index a5bb413..1d8d7ac 100644
--- a/sys/dev/ath/if_ath_ahb.c
+++ b/sys/dev/ath/if_ath_ahb.c
@@ -193,11 +193,15 @@ ath_ahb_attach(device_t dev)
ATH_LOCK_INIT(sc);
ATH_PCU_LOCK_INIT(sc);
+ ATH_RX_LOCK_INIT(sc);
+ ATH_TXSTATUS_LOCK_INIT(sc);
error = ath_attach(AR9130_DEVID, sc);
if (error == 0) /* success */
return 0;
+ ATH_TXSTATUS_LOCK_DESTROY(sc);
+ ATH_RX_LOCK_DESTROY(sc);
ATH_PCU_LOCK_DESTROY(sc);
ATH_LOCK_DESTROY(sc);
bus_dma_tag_destroy(sc->sc_dmat);
@@ -238,6 +242,8 @@ ath_ahb_detach(device_t dev)
if (sc->sc_eepromdata)
free(sc->sc_eepromdata, M_TEMP);
+ ATH_TXSTATUS_LOCK_DESTROY(sc);
+ ATH_RX_LOCK_DESTROY(sc);
ATH_PCU_LOCK_DESTROY(sc);
ATH_LOCK_DESTROY(sc);
diff --git a/sys/dev/ath/if_ath_beacon.c b/sys/dev/ath/if_ath_beacon.c
index c4b159a..4ebdcf0 100644
--- a/sys/dev/ath/if_ath_beacon.c
+++ b/sys/dev/ath/if_ath_beacon.c
@@ -277,14 +277,15 @@ ath_beacon_setup(struct ath_softc *sc, struct ath_buf *bf)
flags = HAL_TXDESC_NOACK;
if (ic->ic_opmode == IEEE80211_M_IBSS && sc->sc_hasveol) {
- ds->ds_link = bf->bf_daddr; /* self-linked */
+ /* self-linked descriptor */
+ ath_hal_settxdesclink(sc->sc_ah, ds, bf->bf_daddr);
flags |= HAL_TXDESC_VEOL;
/*
* Let hardware handle antenna switching.
*/
antenna = sc->sc_txantenna;
} else {
- ds->ds_link = 0;
+ ath_hal_settxdesclink(sc->sc_ah, ds, 0);
/*
* Switch antenna every 4 beacons.
* XXX assumes two antenna
@@ -405,8 +406,10 @@ ath_beacon_proc(void *arg, int pending)
if (vap != NULL && vap->iv_state >= IEEE80211_S_RUN) {
bf = ath_beacon_generate(sc, vap);
if (bf != NULL) {
+ /* XXX should do this using the ds */
*bflink = bf->bf_daddr;
- bflink = &bf->bf_desc->ds_link;
+ ath_hal_gettxdesclinkptr(sc->sc_ah,
+ bf->bf_desc, &bflink);
}
}
}
diff --git a/sys/dev/ath/if_ath_misc.h b/sys/dev/ath/if_ath_misc.h
index 0a51fee..d34c72c 100644
--- a/sys/dev/ath/if_ath_misc.h
+++ b/sys/dev/ath/if_ath_misc.h
@@ -66,7 +66,6 @@ extern void ath_returnbuf_head(struct ath_softc *sc, struct ath_buf *bf);
extern void ath_returnbuf_tail(struct ath_softc *sc, struct ath_buf *bf);
extern int ath_reset(struct ifnet *, ATH_RESET_TYPE);
-extern void ath_tx_draintxq(struct ath_softc *sc, struct ath_txq *txq);
extern void ath_tx_default_comp(struct ath_softc *sc, struct ath_buf *bf,
int fail);
extern void ath_tx_update_ratectrl(struct ath_softc *sc,
@@ -84,11 +83,23 @@ extern void ath_setdefantenna(struct ath_softc *sc, u_int antenna);
extern void ath_setslottime(struct ath_softc *sc);
+extern int ath_descdma_alloc_desc(struct ath_softc *sc,
+ struct ath_descdma *dd, ath_bufhead *head, const char *name,
+ int ds_size, int ndesc);
extern int ath_descdma_setup(struct ath_softc *sc, struct ath_descdma *dd,
- ath_bufhead *head, const char *name, int nbuf, int ndesc);
+ ath_bufhead *head, const char *name, int ds_size, int nbuf,
+ int ndesc);
+extern int ath_descdma_setup_rx_edma(struct ath_softc *sc,
+ struct ath_descdma *dd, ath_bufhead *head, const char *name,
+ int nbuf, int desclen);
extern void ath_descdma_cleanup(struct ath_softc *sc,
struct ath_descdma *dd, ath_bufhead *head);
+extern void ath_legacy_attach_comp_func(struct ath_softc *sc);
+extern void ath_legacy_tx_draintxq(struct ath_softc *sc, struct ath_txq *txq);
+extern int ath_legacy_tx_processq(struct ath_softc *sc, struct ath_txq *txq,
+ int dosched);
+
/*
* This is only here so that the RX proc function can call it.
* It's very likely that the "start TX after RX" call should be
diff --git a/sys/dev/ath/if_ath_pci.c b/sys/dev/ath/if_ath_pci.c
index 773b79d..5973dc3 100644
--- a/sys/dev/ath/if_ath_pci.c
+++ b/sys/dev/ath/if_ath_pci.c
@@ -249,12 +249,16 @@ ath_pci_attach(device_t dev)
ATH_LOCK_INIT(sc);
ATH_PCU_LOCK_INIT(sc);
+ ATH_RX_LOCK_INIT(sc);
+ ATH_TXSTATUS_LOCK_INIT(sc);
error = ath_attach(pci_get_device(dev), sc);
if (error == 0) /* success */
return 0;
+ ATH_TXSTATUS_LOCK_DESTROY(sc);
ATH_PCU_LOCK_DESTROY(sc);
+ ATH_RX_LOCK_DESTROY(sc);
ATH_LOCK_DESTROY(sc);
bus_dma_tag_destroy(sc->sc_dmat);
bad3:
@@ -293,7 +297,9 @@ ath_pci_detach(device_t dev)
if (sc->sc_eepromdata)
free(sc->sc_eepromdata, M_TEMP);
+ ATH_TXSTATUS_LOCK_DESTROY(sc);
ATH_PCU_LOCK_DESTROY(sc);
+ ATH_RX_LOCK_DESTROY(sc);
ATH_LOCK_DESTROY(sc);
return (0);
diff --git a/sys/dev/ath/if_ath_rx.c b/sys/dev/ath/if_ath_rx.c
index eba6ba5..4027bfe 100644
--- a/sys/dev/ath/if_ath_rx.c
+++ b/sys/dev/ath/if_ath_rx.c
@@ -534,6 +534,14 @@ ath_rx_pkt(struct ath_softc *sc, struct ath_rx_status *rs, HAL_STATUS status,
goto rx_accept;
sc->sc_stats.ast_rx_badcrypt++;
}
+ /*
+ * Similar as above - if the failure was a keymiss
+ * just punt it up to the upper layers for now.
+ */
+ if (rs->rs_status & HAL_RXERR_KEYMISS) {
+ sc->sc_stats.ast_rx_keymiss++;
+ goto rx_accept;
+ }
if (rs->rs_status & HAL_RXERR_MIC) {
sc->sc_stats.ast_rx_badmic++;
/*
@@ -1067,7 +1075,7 @@ ath_legacy_dma_rxsetup(struct ath_softc *sc)
device_printf(sc->sc_dev, "%s: called\n", __func__);
error = ath_descdma_setup(sc, &sc->sc_rxdma, &sc->sc_rxbuf,
- "rx", ath_rxbuf, 1);
+ "rx", sizeof(struct ath_desc), ath_rxbuf, 1);
if (error != 0)
return (error);
@@ -1091,6 +1099,9 @@ ath_recv_setup_legacy(struct ath_softc *sc)
device_printf(sc->sc_dev, "DMA setup: legacy\n");
+ /* Sensible legacy defaults */
+ sc->sc_rx_statuslen = 0;
+
sc->sc_rx.recv_start = ath_legacy_startrecv;
sc->sc_rx.recv_stop = ath_legacy_stoprecv;
sc->sc_rx.recv_flush = ath_legacy_flushrecv;
diff --git a/sys/dev/ath/if_ath_rx_edma.c b/sys/dev/ath/if_ath_rx_edma.c
index 9e3580d..b6f7dfd 100644
--- a/sys/dev/ath/if_ath_rx_edma.c
+++ b/sys/dev/ath/if_ath_rx_edma.c
@@ -156,6 +156,7 @@ ath_edma_stoprecv(struct ath_softc *sc, int dodelay)
{
struct ath_hal *ah = sc->sc_ah;
+ ATH_RX_LOCK(sc);
ath_hal_stoppcurecv(ah);
ath_hal_setrxfilter(ah, 0);
ath_hal_stopdmarecv(ah);
@@ -173,6 +174,7 @@ ath_edma_stoprecv(struct ath_softc *sc, int dodelay)
m_freem(sc->sc_rxedma[HAL_RX_QUEUE_LP].m_rxpending);
sc->sc_rxedma[HAL_RX_QUEUE_LP].m_rxpending = NULL;
}
+ ATH_RX_UNLOCK(sc);
}
/*
@@ -187,6 +189,8 @@ ath_edma_reinit_fifo(struct ath_softc *sc, HAL_RX_QUEUE qtype)
struct ath_buf *bf;
int i, j;
+ ATH_RX_LOCK_ASSERT(sc);
+
i = re->m_fifo_head;
for (j = 0; j < re->m_fifo_depth; j++) {
bf = re->m_fifo[i];
@@ -221,6 +225,8 @@ ath_edma_startrecv(struct ath_softc *sc)
{
struct ath_hal *ah = sc->sc_ah;
+ ATH_RX_LOCK(sc);
+
/* Enable RX FIFO */
ath_hal_rxena(ah);
@@ -266,6 +272,9 @@ ath_edma_startrecv(struct ath_softc *sc)
ath_mode_init(sc);
ath_hal_startpcurecv(ah);
+
+ ATH_RX_UNLOCK(sc);
+
return (0);
}
@@ -275,8 +284,16 @@ ath_edma_recv_flush(struct ath_softc *sc)
device_printf(sc->sc_dev, "%s: called\n", __func__);
+ ATH_PCU_LOCK(sc);
+ sc->sc_rxproc_cnt++;
+ ATH_PCU_UNLOCK(sc);
+
ath_edma_recv_proc_queue(sc, HAL_RX_QUEUE_HP, 0);
ath_edma_recv_proc_queue(sc, HAL_RX_QUEUE_LP, 0);
+
+ ATH_PCU_LOCK(sc);
+ sc->sc_rxproc_cnt--;
+ ATH_PCU_UNLOCK(sc);
}
/*
@@ -300,16 +317,21 @@ ath_edma_recv_proc_queue(struct ath_softc *sc, HAL_RX_QUEUE qtype,
struct ath_desc *ds;
struct ath_buf *bf;
struct mbuf *m;
- HAL_STATUS status;
struct ath_hal *ah = sc->sc_ah;
uint64_t tsf;
int16_t nf;
- int ngood = 0;
+ int ngood = 0, npkts = 0;
+ ath_bufhead rxlist;
+ struct ath_buf *next;
+
+ TAILQ_INIT(&rxlist);
tsf = ath_hal_gettsf64(ah);
nf = ath_hal_getchannoise(ah, sc->sc_curchan);
sc->sc_stats.ast_rx_noise = nf;
+ ATH_RX_LOCK(sc);
+
do {
bf = re->m_fifo[re->m_fifo_head];
/* This shouldn't occur! */
@@ -330,12 +352,13 @@ ath_edma_recv_proc_queue(struct ath_softc *sc, HAL_RX_QUEUE qtype,
bus_dmamap_sync(sc->sc_dmat, bf->bf_dmamap,
BUS_DMASYNC_POSTREAD);
rs = &bf->bf_status.ds_rxstat;
- status = ath_hal_rxprocdesc(ah, ds, bf->bf_daddr, NULL, rs);
+ bf->bf_rxstatus = ath_hal_rxprocdesc(ah, ds, bf->bf_daddr,
+ NULL, rs);
#ifdef ATH_DEBUG
if (sc->sc_debug & ATH_DEBUG_RECV_DESC)
- ath_printrxbuf(sc, bf, 0, status == HAL_OK);
+ ath_printrxbuf(sc, bf, 0, bf->bf_rxstatus == HAL_OK);
#endif
- if (status == HAL_EINPROGRESS)
+ if (bf->bf_rxstatus == HAL_EINPROGRESS)
break;
/*
@@ -347,36 +370,67 @@ ath_edma_recv_proc_queue(struct ath_softc *sc, HAL_RX_QUEUE qtype,
*/
DPRINTF(sc, ATH_DEBUG_EDMA_RX,
"%s: Q%d: completed!\n", __func__, qtype);
+ npkts++;
/*
- * Remove the FIFO entry!
+ * Remove the FIFO entry and place it on the completion
+ * queue.
*/
re->m_fifo[re->m_fifo_head] = NULL;
+ TAILQ_INSERT_TAIL(&rxlist, bf, bf_list);
+ /* Bump the descriptor FIFO stats */
+ INCR(re->m_fifo_head, re->m_fifolen);
+ re->m_fifo_depth--;
+ /* XXX check it doesn't fall below 0 */
+ } while (re->m_fifo_depth > 0);
+
+ /* Append some more fresh frames to the FIFO */
+ if (dosched)
+ ath_edma_rxfifo_alloc(sc, qtype, re->m_fifolen);
+
+ ATH_RX_UNLOCK(sc);
+
+ /* Handle the completed descriptors */
+ TAILQ_FOREACH_SAFE(bf, &rxlist, bf_list, next) {
/*
* Skip the RX descriptor status - start at the data offset
*/
- m_adj(m, sc->sc_rx_statuslen);
+ m_adj(bf->bf_m, sc->sc_rx_statuslen);
/* Handle the frame */
- if (ath_rx_pkt(sc, rs, status, tsf, nf, qtype, bf))
+ /*
+ * Note: this may or may not free bf->bf_m and sync/unmap
+ * the frame.
+ */
+ rs = &bf->bf_status.ds_rxstat;
+ if (ath_rx_pkt(sc, rs, bf->bf_rxstatus, tsf, nf, qtype, bf))
ngood++;
+ }
+ /* Free in one set, inside the lock */
+ ATH_RX_LOCK(sc);
+ TAILQ_FOREACH_SAFE(bf, &rxlist, bf_list, next) {
/* Free the buffer/mbuf */
ath_edma_rxbuf_free(sc, bf);
+ }
+ ATH_RX_UNLOCK(sc);
- /* Bump the descriptor FIFO stats */
- INCR(re->m_fifo_head, re->m_fifolen);
- re->m_fifo_depth--;
- /* XXX check it doesn't fall below 0 */
- } while (re->m_fifo_depth > 0);
+ /* rx signal state monitoring */
+ ath_hal_rxmonitor(ah, &sc->sc_halstats, sc->sc_curchan);
+ if (ngood)
+ sc->sc_lastrx = tsf;
+
+ CTR2(ATH_KTR_INTR, "ath edma rx proc: npkts=%d, ngood=%d",
+ npkts, ngood);
/* Handle resched and kickpcu appropriately */
ATH_PCU_LOCK(sc);
if (dosched && sc->sc_kickpcu) {
CTR0(ATH_KTR_ERR, "ath_edma_recv_proc_queue(): kickpcu");
- device_printf(sc->sc_dev, "%s: handled %d descriptors\n",
- __func__, ngood);
+ device_printf(sc->sc_dev,
+ "%s: handled npkts %d ngood %d\n",
+ __func__, npkts, ngood);
/*
* XXX TODO: what should occur here? Just re-poke and
@@ -386,10 +440,6 @@ ath_edma_recv_proc_queue(struct ath_softc *sc, HAL_RX_QUEUE qtype,
}
ATH_PCU_UNLOCK(sc);
- /* Append some more fresh frames to the FIFO */
- if (dosched)
- ath_edma_rxfifo_alloc(sc, qtype, re->m_fifolen);
-
return (ngood);
}
@@ -397,6 +447,10 @@ static void
ath_edma_recv_tasklet(void *arg, int npending)
{
struct ath_softc *sc = (struct ath_softc *) arg;
+ struct ifnet *ifp = sc->sc_ifp;
+#ifdef IEEE80211_SUPPORT_SUPERG
+ struct ieee80211com *ic = ifp->if_l2com;
+#endif
DPRINTF(sc, ATH_DEBUG_EDMA_RX, "%s: called; npending=%d\n",
__func__,
@@ -409,10 +463,26 @@ ath_edma_recv_tasklet(void *arg, int npending)
ATH_PCU_UNLOCK(sc);
return;
}
+ sc->sc_rxproc_cnt++;
ATH_PCU_UNLOCK(sc);
ath_edma_recv_proc_queue(sc, HAL_RX_QUEUE_HP, 1);
ath_edma_recv_proc_queue(sc, HAL_RX_QUEUE_LP, 1);
+
+ /* XXX inside IF_LOCK ? */
+ if ((ifp->if_drv_flags & IFF_DRV_OACTIVE) == 0) {
+#ifdef IEEE80211_SUPPORT_SUPERG
+ ieee80211_ff_age_all(ic, 100);
+#endif
+ if (! IFQ_IS_EMPTY(&ifp->if_snd))
+ ath_tx_kick(sc);
+ }
+ if (ath_dfs_tasklet_needed(sc, sc->sc_curchan))
+ taskqueue_enqueue(sc->sc_tq, &sc->sc_dfstask);
+
+ ATH_PCU_LOCK(sc);
+ sc->sc_rxproc_cnt--;
+ ATH_PCU_UNLOCK(sc);
}
/*
@@ -435,6 +505,8 @@ ath_edma_rxbuf_init(struct ath_softc *sc, struct ath_buf *bf)
int error;
int len;
+ ATH_RX_LOCK_ASSERT(sc);
+
// device_printf(sc->sc_dev, "%s: called; bf=%p\n", __func__, bf);
m = m_getm(NULL, sc->sc_edma_bufsize, M_DONTWAIT, MT_DATA);
@@ -498,6 +570,8 @@ ath_edma_rxbuf_alloc(struct ath_softc *sc)
struct ath_buf *bf;
int error;
+ ATH_RX_LOCK_ASSERT(sc);
+
/* Allocate buffer */
bf = TAILQ_FIRST(&sc->sc_rxbuf);
/* XXX shouldn't happen upon startup? */
@@ -526,6 +600,9 @@ static void
ath_edma_rxbuf_free(struct ath_softc *sc, struct ath_buf *bf)
{
+ ATH_RX_LOCK_ASSERT(sc);
+
+ /* We're doing this multiple times? */
bus_dmamap_unload(sc->sc_dmat, bf->bf_dmamap);
if (bf->bf_m) {
@@ -550,6 +627,8 @@ ath_edma_rxfifo_alloc(struct ath_softc *sc, HAL_RX_QUEUE qtype, int nbufs)
struct ath_buf *bf;
int i;
+ ATH_RX_LOCK_ASSERT(sc);
+
/*
* Allocate buffers until the FIFO is full or nbufs is reached.
*/
@@ -616,6 +695,8 @@ ath_edma_rxfifo_flush(struct ath_softc *sc, HAL_RX_QUEUE qtype)
struct ath_rx_edma *re = &sc->sc_rxedma[qtype];
int i;
+ ATH_RX_LOCK_ASSERT(sc);
+
for (i = 0; i < re->m_fifolen; i++) {
if (re->m_fifo[i] != NULL) {
#ifdef ATH_DEBUG
@@ -647,6 +728,8 @@ ath_edma_setup_rxfifo(struct ath_softc *sc, HAL_RX_QUEUE qtype)
{
struct ath_rx_edma *re = &sc->sc_rxedma[qtype];
+ ATH_RX_LOCK_ASSERT(sc);
+
if (! ath_hal_getrxfifodepth(sc->sc_ah, qtype, &re->m_fifolen)) {
device_printf(sc->sc_dev, "%s: qtype=%d, failed\n",
__func__,
@@ -696,16 +779,18 @@ ath_edma_dma_rxsetup(struct ath_softc *sc)
{
int error;
- /* Create RX DMA tag */
- /* Create RX ath_buf array */
-
- error = ath_descdma_setup(sc, &sc->sc_rxdma, &sc->sc_rxbuf,
- "rx", ath_rxbuf, 1);
+ /*
+ * Create RX DMA tag and buffers.
+ */
+ error = ath_descdma_setup_rx_edma(sc, &sc->sc_rxdma, &sc->sc_rxbuf,
+ "rx", ath_rxbuf, sc->sc_rx_statuslen);
if (error != 0)
return error;
+ ATH_RX_LOCK(sc);
(void) ath_edma_setup_rxfifo(sc, HAL_RX_QUEUE_HP);
(void) ath_edma_setup_rxfifo(sc, HAL_RX_QUEUE_LP);
+ ATH_RX_UNLOCK(sc);
return (0);
}
@@ -716,11 +801,13 @@ ath_edma_dma_rxteardown(struct ath_softc *sc)
device_printf(sc->sc_dev, "%s: called\n", __func__);
+ ATH_RX_LOCK(sc);
ath_edma_rxfifo_flush(sc, HAL_RX_QUEUE_HP);
ath_edma_rxfifo_free(sc, HAL_RX_QUEUE_HP);
ath_edma_rxfifo_flush(sc, HAL_RX_QUEUE_LP);
ath_edma_rxfifo_free(sc, HAL_RX_QUEUE_LP);
+ ATH_RX_UNLOCK(sc);
/* Free RX ath_buf */
/* Free RX DMA tag */
@@ -739,25 +826,17 @@ ath_recv_setup_edma(struct ath_softc *sc)
/* Set buffer size to 4k */
sc->sc_edma_bufsize = 4096;
- /* Configure the hardware with this */
- (void) ath_hal_setrxbufsize(sc->sc_ah, sc->sc_edma_bufsize);
-
/* Fetch EDMA field and buffer sizes */
(void) ath_hal_getrxstatuslen(sc->sc_ah, &sc->sc_rx_statuslen);
- (void) ath_hal_gettxdesclen(sc->sc_ah, &sc->sc_tx_desclen);
- (void) ath_hal_gettxstatuslen(sc->sc_ah, &sc->sc_tx_statuslen);
- (void) ath_hal_getntxmaps(sc->sc_ah, &sc->sc_tx_nmaps);
+
+ /* Configure the hardware with the RX buffer size */
+ (void) ath_hal_setrxbufsize(sc->sc_ah, sc->sc_edma_bufsize -
+ sc->sc_rx_statuslen);
device_printf(sc->sc_dev, "RX status length: %d\n",
sc->sc_rx_statuslen);
- device_printf(sc->sc_dev, "TX descriptor length: %d\n",
- sc->sc_tx_desclen);
- device_printf(sc->sc_dev, "TX status length: %d\n",
- sc->sc_tx_statuslen);
- device_printf(sc->sc_dev, "TX/RX buffer size: %d\n",
+ device_printf(sc->sc_dev, "RX buffer size: %d\n",
sc->sc_edma_bufsize);
- device_printf(sc->sc_dev, "TX buffers per descriptor: %d\n",
- sc->sc_tx_nmaps);
sc->sc_rx.recv_stop = ath_edma_stoprecv;
sc->sc_rx.recv_start = ath_edma_startrecv;
diff --git a/sys/dev/ath/if_ath_sysctl.c b/sys/dev/ath/if_ath_sysctl.c
index ff75888..e1e9426 100644
--- a/sys/dev/ath/if_ath_sysctl.c
+++ b/sys/dev/ath/if_ath_sysctl.c
@@ -934,6 +934,8 @@ ath_sysctl_stats_attach(struct ath_softc *sc)
SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_tx_mcastq_overflow",
CTLFLAG_RD, &sc->sc_stats.ast_tx_mcastq_overflow, 0,
"Number of multicast frames exceeding maximum mcast queue depth");
+ SYSCTL_ADD_UINT(ctx, child, OID_AUTO, "ast_rx_keymiss", CTLFLAG_RD,
+ &sc->sc_stats.ast_rx_keymiss, 0, "");
/* Attach the RX phy error array */
ath_sysctl_stats_attach_rxphyerr(sc, child);
diff --git a/sys/dev/ath/if_ath_tx.c b/sys/dev/ath/if_ath_tx.c
index 934f9dc..699478a 100644
--- a/sys/dev/ath/if_ath_tx.c
+++ b/sys/dev/ath/if_ath_tx.c
@@ -302,6 +302,11 @@ ath_tx_chaindesclist(struct ath_softc *sc, struct ath_buf *bf)
struct ath_hal *ah = sc->sc_ah;
struct ath_desc *ds, *ds0;
int i;
+ /*
+ * XXX There's txdma and txdma_mgmt; the descriptor
+ * sizes must match.
+ */
+ struct ath_descdma *dd = &sc->sc_txdma;
/*
* Fillin the remainder of the descriptor info.
@@ -310,9 +315,10 @@ ath_tx_chaindesclist(struct ath_softc *sc, struct ath_buf *bf)
for (i = 0; i < bf->bf_nseg; i++, ds++) {
ds->ds_data = bf->bf_segs[i].ds_addr;
if (i == bf->bf_nseg - 1)
- ds->ds_link = 0;
+ ath_hal_settxdesclink(ah, ds, 0);
else
- ds->ds_link = bf->bf_daddr + sizeof(*ds) * (i + 1);
+ ath_hal_settxdesclink(ah, ds,
+ bf->bf_daddr + dd->dd_descsize * (i + 1));
ath_hal_filltxdesc(ah, ds
, bf->bf_segs[i].ds_len /* segment length */
, i == 0 /* first segment */
@@ -340,6 +346,11 @@ ath_tx_chaindesclist_subframe(struct ath_softc *sc, struct ath_buf *bf)
struct ath_hal *ah = sc->sc_ah;
struct ath_desc *ds, *ds0;
int i;
+ /*
+ * XXX There's txdma and txdma_mgmt; the descriptor
+ * sizes must match.
+ */
+ struct ath_descdma *dd = &sc->sc_txdma;
ds0 = ds = bf->bf_desc;
@@ -350,9 +361,10 @@ ath_tx_chaindesclist_subframe(struct ath_softc *sc, struct ath_buf *bf)
for (i = 0; i < bf->bf_nseg; i++, ds++) {
ds->ds_data = bf->bf_segs[i].ds_addr;
if (i == bf->bf_nseg - 1)
- ds->ds_link = 0;
+ ath_hal_settxdesclink(ah, ds, 0);
else
- ds->ds_link = bf->bf_daddr + sizeof(*ds) * (i + 1);
+ ath_hal_settxdesclink(ah, ds,
+ bf->bf_daddr + dd->dd_descsize * (i + 1));
/*
* This performs the setup for an aggregate frame.
@@ -382,6 +394,50 @@ ath_tx_chaindesclist_subframe(struct ath_softc *sc, struct ath_buf *bf)
}
/*
+ * Set the rate control fields in the given descriptor based on
+ * the bf_state fields and node state.
+ *
+ * The bfs fields should already be set with the relevant rate
+ * control information, including whether MRR is to be enabled.
+ *
+ * Since the FreeBSD HAL currently sets up the first TX rate
+ * in ath_hal_setuptxdesc(), this will setup the MRR
+ * conditionally for the pre-11n chips, and call ath_buf_set_rate
+ * unconditionally for 11n chips. These require the 11n rate
+ * scenario to be set if MCS rates are enabled, so it's easier
+ * to just always call it. The caller can then only set rates 2, 3
+ * and 4 if multi-rate retry is needed.
+ */
+static void
+ath_tx_set_ratectrl(struct ath_softc *sc, struct ieee80211_node *ni,
+ struct ath_buf *bf)
+{
+ struct ath_rc_series *rc = bf->bf_state.bfs_rc;
+
+ /* If mrr is disabled, blank tries 1, 2, 3 */
+ if (! bf->bf_state.bfs_ismrr)
+ rc[1].tries = rc[2].tries = rc[3].tries = 0;
+
+ /*
+ * Always call - that way a retried descriptor will
+ * have the MRR fields overwritten.
+ *
+ * XXX TODO: see if this is really needed - setting up
+ * the first descriptor should set the MRR fields to 0
+ * for us anyway.
+ */
+ if (ath_tx_is_11n(sc)) {
+ ath_buf_set_rate(sc, ni, bf);
+ } else {
+ ath_hal_setupxtxdesc(sc->sc_ah, bf->bf_desc
+ , rc[1].ratecode, rc[1].tries
+ , rc[2].ratecode, rc[2].tries
+ , rc[3].ratecode, rc[3].tries
+ );
+ }
+}
+
+/*
* Setup segments+descriptors for an 11n aggregate.
* bf_first is the first buffer in the aggregate.
* The descriptor list must already been linked together using
@@ -414,7 +470,8 @@ ath_tx_setds_11n(struct ath_softc *sc, struct ath_buf *bf_first)
* to the beginning descriptor of this frame.
*/
if (bf_prev != NULL)
- bf_prev->bf_lastds->ds_link = bf->bf_daddr;
+ ath_hal_settxdesclink(sc->sc_ah, bf_prev->bf_lastds,
+ bf->bf_daddr);
/* Save a copy so we can link the next descriptor in */
bf_prev = bf;
@@ -439,13 +496,6 @@ ath_tx_setds_11n(struct ath_softc *sc, struct ath_buf *bf_first)
bf_first->bf_state.bfs_ctsduration);
/*
- * Setup the last descriptor in the list.
- * bf_prev points to the last; bf is NULL here.
- */
- ath_hal_setuplasttxdesc(sc->sc_ah, bf_prev->bf_desc,
- bf_first->bf_desc);
-
- /*
* Set the first descriptor bf_lastds field to point to
* the last descriptor in the last subframe, that's where
* the status update will occur.
@@ -458,6 +508,21 @@ ath_tx_setds_11n(struct ath_softc *sc, struct ath_buf *bf_first)
*/
bf_first->bf_last = bf_prev;
+ /*
+ * setup first desc with rate and aggr info
+ */
+ ath_tx_set_ratectrl(sc, bf_first->bf_node, bf_first);
+
+ /*
+ * Setup the last descriptor in the list.
+ *
+ * bf_first->bf_lastds already points to it; the rate
+ * control information needs to be squirreled away here
+ * as well ans clearing the moreaggr/paddelim fields.
+ */
+ ath_hal_setuplasttxdesc(sc->sc_ah, bf_first->bf_lastds,
+ bf_first->bf_desc);
+
DPRINTF(sc, ATH_DEBUG_SW_TX_AGGR, "%s: end\n", __func__);
}
@@ -482,7 +547,7 @@ ath_tx_handoff_mcast(struct ath_softc *sc, struct ath_txq *txq,
*txq->axq_link = bf->bf_daddr;
}
ATH_TXQ_INSERT_TAIL(txq, bf, bf_list);
- txq->axq_link = &bf->bf_lastds->ds_link;
+ ath_hal_gettxdesclinkptr(sc->sc_ah, bf->bf_lastds, &txq->axq_link);
}
/*
@@ -616,7 +681,7 @@ ath_tx_handoff_hw(struct ath_softc *sc, struct ath_txq *txq,
#endif /* IEEE80211_SUPPORT_TDMA */
if (bf->bf_state.bfs_aggr)
txq->axq_aggr_depth++;
- txq->axq_link = &bf->bf_lastds->ds_link;
+ ath_hal_gettxdesclinkptr(ah, bf->bf_lastds, &txq->axq_link);
ath_hal_txstart(ah, txq->axq_qnum);
}
}
@@ -626,8 +691,8 @@ ath_tx_handoff_hw(struct ath_softc *sc, struct ath_txq *txq,
*
* This must be called whether the queue is empty or not.
*/
-void
-ath_txq_restart_dma(struct ath_softc *sc, struct ath_txq *txq)
+static void
+ath_legacy_tx_dma_restart(struct ath_softc *sc, struct ath_txq *txq)
{
struct ath_hal *ah = sc->sc_ah;
struct ath_buf *bf, *bf_last;
@@ -645,7 +710,7 @@ ath_txq_restart_dma(struct ath_softc *sc, struct ath_txq *txq)
return;
ath_hal_puttxbuf(ah, txq->axq_qnum, bf->bf_daddr);
- txq->axq_link = &bf_last->bf_lastds->ds_link;
+ ath_hal_gettxdesclinkptr(ah, bf->bf_lastds, &txq->axq_link);
ath_hal_txstart(ah, txq->axq_qnum);
}
@@ -655,7 +720,8 @@ ath_txq_restart_dma(struct ath_softc *sc, struct ath_txq *txq)
* The relevant hardware txq should be locked.
*/
static void
-ath_tx_handoff(struct ath_softc *sc, struct ath_txq *txq, struct ath_buf *bf)
+ath_legacy_xmit_handoff(struct ath_softc *sc, struct ath_txq *txq,
+ struct ath_buf *bf)
{
ATH_TXQ_LOCK_ASSERT(txq);
@@ -988,11 +1054,12 @@ ath_tx_set_rtscts(struct ath_softc *sc, struct ath_buf *bf)
/*
* Must disable multi-rate retry when using RTS/CTS.
- * XXX TODO: only for pre-11n NICs.
*/
- bf->bf_state.bfs_ismrr = 0;
- bf->bf_state.bfs_try0 =
- bf->bf_state.bfs_rc[0].tries = ATH_TXMGTTRY; /* XXX ew */
+ if (!sc->sc_mrrprot) {
+ bf->bf_state.bfs_ismrr = 0;
+ bf->bf_state.bfs_try0 =
+ bf->bf_state.bfs_rc[0].tries = ATH_TXMGTTRY; /* XXX ew */
+ }
}
/*
@@ -1025,7 +1092,9 @@ ath_tx_setds(struct ath_softc *sc, struct ath_buf *bf)
bf->bf_lastds = ds;
bf->bf_last = bf;
- /* XXX TODO: Setup descriptor chain */
+ /* Set rate control and descriptor chain for this frame */
+ ath_tx_set_ratectrl(sc, bf->bf_node, bf);
+ ath_tx_chaindesclist(sc, bf);
}
/*
@@ -1074,50 +1143,6 @@ ath_tx_do_ratelookup(struct ath_softc *sc, struct ath_buf *bf)
}
/*
- * Set the rate control fields in the given descriptor based on
- * the bf_state fields and node state.
- *
- * The bfs fields should already be set with the relevant rate
- * control information, including whether MRR is to be enabled.
- *
- * Since the FreeBSD HAL currently sets up the first TX rate
- * in ath_hal_setuptxdesc(), this will setup the MRR
- * conditionally for the pre-11n chips, and call ath_buf_set_rate
- * unconditionally for 11n chips. These require the 11n rate
- * scenario to be set if MCS rates are enabled, so it's easier
- * to just always call it. The caller can then only set rates 2, 3
- * and 4 if multi-rate retry is needed.
- */
-static void
-ath_tx_set_ratectrl(struct ath_softc *sc, struct ieee80211_node *ni,
- struct ath_buf *bf)
-{
- struct ath_rc_series *rc = bf->bf_state.bfs_rc;
-
- /* If mrr is disabled, blank tries 1, 2, 3 */
- if (! bf->bf_state.bfs_ismrr)
- rc[1].tries = rc[2].tries = rc[3].tries = 0;
-
- /*
- * Always call - that way a retried descriptor will
- * have the MRR fields overwritten.
- *
- * XXX TODO: see if this is really needed - setting up
- * the first descriptor should set the MRR fields to 0
- * for us anyway.
- */
- if (ath_tx_is_11n(sc)) {
- ath_buf_set_rate(sc, ni, bf);
- } else {
- ath_hal_setupxtxdesc(sc->sc_ah, bf->bf_desc
- , rc[1].ratecode, rc[1].tries
- , rc[2].ratecode, rc[2].tries
- , rc[3].ratecode, rc[3].tries
- );
- }
-}
-
-/*
* Transmit the given frame to the hardware.
*
* The frame must already be setup; rate control must already have
@@ -1142,8 +1167,6 @@ ath_tx_xmit_normal(struct ath_softc *sc, struct ath_txq *txq,
ath_tx_set_rtscts(sc, bf);
ath_tx_rate_fill_rcflags(sc, bf);
ath_tx_setds(sc, bf);
- ath_tx_set_ratectrl(sc, bf->bf_node, bf);
- ath_tx_chaindesclist(sc, bf);
/* Hand off to hardware */
ath_tx_handoff(sc, txq, bf);
@@ -2391,8 +2414,6 @@ ath_tx_xmit_aggr(struct ath_softc *sc, struct ath_node *an, struct ath_buf *bf)
ath_tx_set_rtscts(sc, bf);
ath_tx_rate_fill_rcflags(sc, bf);
ath_tx_setds(sc, bf);
- ath_tx_set_ratectrl(sc, bf->bf_node, bf);
- ath_tx_chaindesclist(sc, bf);
/* Statistics */
sc->sc_aggr_stats.aggr_low_hwq_single_pkt++;
@@ -3834,7 +3855,6 @@ ath_tx_tid_hw_queue_aggr(struct ath_softc *sc, struct ath_node *an,
struct ath_buf *bf;
struct ath_txq *txq = sc->sc_ac2q[tid->ac];
struct ieee80211_tx_ampdu *tap;
- struct ieee80211_node *ni = &an->an_node;
ATH_AGGR_STATUS status;
ath_bufhead bf_q;
@@ -3882,9 +3902,7 @@ ath_tx_tid_hw_queue_aggr(struct ath_softc *sc, struct ath_node *an,
ath_tx_set_rtscts(sc, bf);
ath_tx_rate_fill_rcflags(sc, bf);
ath_tx_setds(sc, bf);
- ath_tx_chaindesclist(sc, bf);
ath_hal_clr11n_aggr(sc->sc_ah, bf->bf_desc);
- ath_tx_set_ratectrl(sc, ni, bf);
sc->sc_aggr_stats.aggr_nonbaw_pkt++;
@@ -3942,9 +3960,7 @@ ath_tx_tid_hw_queue_aggr(struct ath_softc *sc, struct ath_node *an,
"%s: single-frame aggregate\n", __func__);
bf->bf_state.bfs_aggr = 0;
ath_tx_setds(sc, bf);
- ath_tx_chaindesclist(sc, bf);
ath_hal_clr11n_aggr(sc->sc_ah, bf->bf_desc);
- ath_tx_set_ratectrl(sc, ni, bf);
if (status == ATH_AGGR_BAW_CLOSED)
sc->sc_aggr_stats.aggr_baw_closed_single_pkt++;
else
@@ -3979,10 +3995,6 @@ ath_tx_tid_hw_queue_aggr(struct ath_softc *sc, struct ath_node *an,
*/
ath_tx_setds_11n(sc, bf);
- /*
- * setup first desc with rate and aggr info
- */
- ath_tx_set_ratectrl(sc, ni, bf);
}
queuepkt:
//txq = bf->bf_state.bfs_txq;
@@ -4022,7 +4034,6 @@ ath_tx_tid_hw_queue_norm(struct ath_softc *sc, struct ath_node *an,
{
struct ath_buf *bf;
struct ath_txq *txq = sc->sc_ac2q[tid->ac];
- struct ieee80211_node *ni = &an->an_node;
DPRINTF(sc, ATH_DEBUG_SW_TX, "%s: node %p: TID %d: called\n",
__func__, an, tid->tid);
@@ -4071,8 +4082,6 @@ ath_tx_tid_hw_queue_norm(struct ath_softc *sc, struct ath_node *an,
ath_tx_set_rtscts(sc, bf);
ath_tx_rate_fill_rcflags(sc, bf);
ath_tx_setds(sc, bf);
- ath_tx_chaindesclist(sc, bf);
- ath_tx_set_ratectrl(sc, ni, bf);
/* Track outstanding buffer count to hardware */
/* aggregates are "one" buffer */
@@ -4450,3 +4459,40 @@ ath_addba_response_timeout(struct ieee80211_node *ni,
ath_tx_tid_resume(sc, atid);
ATH_TXQ_UNLOCK(sc->sc_ac2q[atid->ac]);
}
+
+static int
+ath_legacy_dma_txsetup(struct ath_softc *sc)
+{
+
+ /* nothing new needed */
+ return (0);
+}
+
+static int
+ath_legacy_dma_txteardown(struct ath_softc *sc)
+{
+
+ /* nothing new needed */
+ return (0);
+}
+
+void
+ath_xmit_setup_legacy(struct ath_softc *sc)
+{
+ /*
+ * For now, just set the descriptor length to sizeof(ath_desc);
+ * worry about extracting the real length out of the HAL later.
+ */
+ sc->sc_tx_desclen = sizeof(struct ath_desc);
+ sc->sc_tx_statuslen = 0;
+ sc->sc_tx_nmaps = 1; /* only one buffer per TX desc */
+
+ sc->sc_tx.xmit_setup = ath_legacy_dma_txsetup;
+ sc->sc_tx.xmit_teardown = ath_legacy_dma_txteardown;
+ sc->sc_tx.xmit_attach_comp_func = ath_legacy_attach_comp_func;
+
+ sc->sc_tx.xmit_dma_restart = ath_legacy_tx_dma_restart;
+ sc->sc_tx.xmit_handoff = ath_legacy_xmit_handoff;
+ sc->sc_tx.xmit_processq = ath_legacy_tx_processq;
+ sc->sc_tx.xmit_drainq = ath_legacy_tx_draintxq;
+}
diff --git a/sys/dev/ath/if_ath_tx.h b/sys/dev/ath/if_ath_tx.h
index 958acf9..4ac4589 100644
--- a/sys/dev/ath/if_ath_tx.h
+++ b/sys/dev/ath/if_ath_tx.h
@@ -79,7 +79,6 @@
#define BAW_WITHIN(_start, _bawsz, _seqno) \
((((_seqno) - (_start)) & 4095) < (_bawsz))
-extern void ath_txq_restart_dma(struct ath_softc *sc, struct ath_txq *txq);
extern void ath_freetx(struct mbuf *m);
extern void ath_tx_node_flush(struct ath_softc *sc, struct ath_node *an);
extern void ath_tx_txq_drain(struct ath_softc *sc, struct ath_txq *txq);
@@ -124,4 +123,22 @@ extern void ath_bar_response(struct ieee80211_node *ni,
extern void ath_addba_response_timeout(struct ieee80211_node *ni,
struct ieee80211_tx_ampdu *tap);
+/*
+ * Setup path
+ */
+#define ath_txdma_setup(_sc) \
+ (_sc)->sc_tx.xmit_setup(_sc)
+#define ath_txdma_teardown(_sc) \
+ (_sc)->sc_tx.xmit_teardown(_sc)
+#define ath_txq_restart_dma(_sc, _txq) \
+ (_sc)->sc_tx.xmit_dma_restart((_sc), (_txq))
+#define ath_tx_handoff(_sc, _txq, _bf) \
+ (_sc)->sc_tx.xmit_handoff((_sc), (_txq), (_bf))
+#define ath_tx_draintxq(_sc, _txq) \
+ (_sc)->sc_tx.xmit_drainq((_sc), (_txq))
+#define ath_tx_processq(_sc, _txq, _dosched) \
+ (_sc)->sc_tx.xmit_processq((_sc), (_txq), (_dosched))
+
+extern void ath_xmit_setup_legacy(struct ath_softc *sc);
+
#endif
diff --git a/sys/dev/ath/if_ath_tx_edma.c b/sys/dev/ath/if_ath_tx_edma.c
new file mode 100644
index 0000000..5991d1c
--- /dev/null
+++ b/sys/dev/ath/if_ath_tx_edma.c
@@ -0,0 +1,311 @@
+/*-
+ * Copyright (c) 2012 Adrian Chadd <adrian@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer,
+ * without modification.
+ * 2. Redistributions in binary form must reproduce at minimum a disclaimer
+ * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
+ * redistribution must be conditioned upon including a substantially
+ * similar Disclaimer requirement for further binary redistribution.
+ *
+ * NO WARRANTY
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
+ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGES.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+/*
+ * Driver for the Atheros Wireless LAN controller.
+ *
+ * This software is derived from work of Atsushi Onoe; his contribution
+ * is greatly appreciated.
+ */
+
+#include "opt_inet.h"
+#include "opt_ath.h"
+/*
+ * This is needed for register operations which are performed
+ * by the driver - eg, calls to ath_hal_gettsf32().
+ *
+ * It's also required for any AH_DEBUG checks in here, eg the
+ * module dependencies.
+ */
+#include "opt_ah.h"
+#include "opt_wlan.h"
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/sysctl.h>
+#include <sys/mbuf.h>
+#include <sys/malloc.h>
+#include <sys/lock.h>
+#include <sys/mutex.h>
+#include <sys/kernel.h>
+#include <sys/socket.h>
+#include <sys/sockio.h>
+#include <sys/errno.h>
+#include <sys/callout.h>
+#include <sys/bus.h>
+#include <sys/endian.h>
+#include <sys/kthread.h>
+#include <sys/taskqueue.h>
+#include <sys/priv.h>
+#include <sys/module.h>
+#include <sys/ktr.h>
+#include <sys/smp.h> /* for mp_ncpus */
+
+#include <machine/bus.h>
+
+#include <net/if.h>
+#include <net/if_dl.h>
+#include <net/if_media.h>
+#include <net/if_types.h>
+#include <net/if_arp.h>
+#include <net/ethernet.h>
+#include <net/if_llc.h>
+
+#include <net80211/ieee80211_var.h>
+#include <net80211/ieee80211_regdomain.h>
+#ifdef IEEE80211_SUPPORT_SUPERG
+#include <net80211/ieee80211_superg.h>
+#endif
+#ifdef IEEE80211_SUPPORT_TDMA
+#include <net80211/ieee80211_tdma.h>
+#endif
+
+#include <net/bpf.h>
+
+#ifdef INET
+#include <netinet/in.h>
+#include <netinet/if_ether.h>
+#endif
+
+#include <dev/ath/if_athvar.h>
+#include <dev/ath/ath_hal/ah_devid.h> /* XXX for softled */
+#include <dev/ath/ath_hal/ah_diagcodes.h>
+
+#include <dev/ath/if_ath_debug.h>
+#include <dev/ath/if_ath_misc.h>
+#include <dev/ath/if_ath_tsf.h>
+#include <dev/ath/if_ath_tx.h>
+#include <dev/ath/if_ath_sysctl.h>
+#include <dev/ath/if_ath_led.h>
+#include <dev/ath/if_ath_keycache.h>
+#include <dev/ath/if_ath_rx.h>
+#include <dev/ath/if_ath_beacon.h>
+#include <dev/ath/if_athdfs.h>
+
+#ifdef ATH_TX99_DIAG
+#include <dev/ath/ath_tx99/ath_tx99.h>
+#endif
+
+#include <dev/ath/if_ath_tx_edma.h>
+
+/*
+ * some general macros
+ */
+#define INCR(_l, _sz) (_l) ++; (_l) &= ((_sz) - 1)
+#define DECR(_l, _sz) (_l) --; (_l) &= ((_sz) - 1)
+
+/*
+ * XXX doesn't belong here, and should be tunable
+ */
+#define ATH_TXSTATUS_RING_SIZE 512
+
+MALLOC_DECLARE(M_ATHDEV);
+
+/*
+ * Re-initialise the DMA FIFO with the current contents of
+ * said FIFO.
+ *
+ * This should only be called as part of the chip reset path, as it
+ * assumes the FIFO is currently empty.
+ *
+ * TODO: verify that a cold/warm reset does clear the TX FIFO, so
+ * writing in a partially-filled FIFO will not cause double-entries
+ * to appear.
+ */
+static void
+ath_edma_dma_restart(struct ath_softc *sc, struct ath_txq *txq)
+{
+
+ device_printf(sc->sc_dev, "%s: called: txq=%p, qnum=%d\n",
+ __func__,
+ txq,
+ txq->axq_qnum);
+}
+
+/*
+ * Handoff this frame to the hardware.
+ *
+ * For the multicast queue, this will treat it as a software queue
+ * and append it to the list, after updating the MORE_DATA flag
+ * in the previous frame. The cabq processing code will ensure
+ * that the queue contents gets transferred over.
+ *
+ * For the hardware queues, this will queue a frame to the queue
+ * like before, then populate the FIFO from that. Since the
+ * EDMA hardware has 8 FIFO slots per TXQ, this ensures that
+ * frames such as management frames don't get prematurely dropped.
+ *
+ * This does imply that a similar flush-hwq-to-fifoq method will
+ * need to be called from the processq function, before the
+ * per-node software scheduler is called.
+ */
+static void
+ath_edma_xmit_handoff(struct ath_softc *sc, struct ath_txq *txq,
+ struct ath_buf *bf)
+{
+
+ device_printf(sc->sc_dev, "%s: called; bf=%p, txq=%p, qnum=%d\n",
+ __func__,
+ bf,
+ txq,
+ txq->axq_qnum);
+
+ /*
+ * XXX For now this is a placeholder; free the buffer
+ * and inform the stack that the TX failed.
+ */
+ ath_tx_default_comp(sc, bf, 1);
+}
+
+static int
+ath_edma_setup_txfifo(struct ath_softc *sc, int qnum)
+{
+ struct ath_tx_edma_fifo *te = &sc->sc_txedma[qnum];
+
+ te->m_fifo = malloc(sizeof(struct ath_buf *) * HAL_TXFIFO_DEPTH,
+ M_ATHDEV,
+ M_NOWAIT | M_ZERO);
+ if (te->m_fifo == NULL) {
+ device_printf(sc->sc_dev, "%s: malloc failed\n",
+ __func__);
+ return (-ENOMEM);
+ }
+
+ /*
+ * Set initial "empty" state.
+ */
+ te->m_fifo_head = te->m_fifo_tail = te->m_fifo_depth = 0;
+
+ return (0);
+}
+
+static int
+ath_edma_free_txfifo(struct ath_softc *sc, int qnum)
+{
+ struct ath_tx_edma_fifo *te = &sc->sc_txedma[qnum];
+
+ /* XXX TODO: actually deref the ath_buf entries? */
+ free(te->m_fifo, M_ATHDEV);
+ return (0);
+}
+
+static int
+ath_edma_dma_txsetup(struct ath_softc *sc)
+{
+ int error;
+ int i;
+
+ error = ath_descdma_alloc_desc(sc, &sc->sc_txsdma,
+ NULL, "txcomp", sc->sc_tx_statuslen, ATH_TXSTATUS_RING_SIZE);
+ if (error != 0)
+ return (error);
+
+ ath_hal_setuptxstatusring(sc->sc_ah,
+ (void *) sc->sc_txsdma.dd_desc,
+ sc->sc_txsdma.dd_desc_paddr,
+ ATH_TXSTATUS_RING_SIZE);
+
+ for (i = 0; i < HAL_NUM_TX_QUEUES; i++) {
+ ath_edma_setup_txfifo(sc, i);
+ }
+
+
+ return (0);
+}
+
+static int
+ath_edma_dma_txteardown(struct ath_softc *sc)
+{
+ int i;
+
+ for (i = 0; i < HAL_NUM_TX_QUEUES; i++) {
+ ath_edma_free_txfifo(sc, i);
+ }
+
+ ath_descdma_cleanup(sc, &sc->sc_txsdma, NULL);
+ return (0);
+}
+
+static int
+ath_edma_tx_processq(struct ath_softc *sc, struct ath_txq *txq, int dosched)
+{
+
+ return (0);
+}
+
+static void
+ath_edma_tx_draintxq(struct ath_softc *sc, struct ath_txq *txq)
+{
+
+}
+
+static void
+ath_edma_tx_proc(void *arg, int npending)
+{
+ struct ath_softc *sc = (struct ath_softc *) arg;
+
+ device_printf(sc->sc_dev, "%s: called, npending=%d\n",
+ __func__, npending);
+}
+
+static void
+ath_edma_attach_comp_func(struct ath_softc *sc)
+{
+
+ TASK_INIT(&sc->sc_txtask, 0, ath_edma_tx_proc, sc);
+}
+
+void
+ath_xmit_setup_edma(struct ath_softc *sc)
+{
+
+ /* Fetch EDMA field and buffer sizes */
+ (void) ath_hal_gettxdesclen(sc->sc_ah, &sc->sc_tx_desclen);
+ (void) ath_hal_gettxstatuslen(sc->sc_ah, &sc->sc_tx_statuslen);
+ (void) ath_hal_getntxmaps(sc->sc_ah, &sc->sc_tx_nmaps);
+
+ device_printf(sc->sc_dev, "TX descriptor length: %d\n",
+ sc->sc_tx_desclen);
+ device_printf(sc->sc_dev, "TX status length: %d\n",
+ sc->sc_tx_statuslen);
+ device_printf(sc->sc_dev, "TX buffers per descriptor: %d\n",
+ sc->sc_tx_nmaps);
+
+ sc->sc_tx.xmit_setup = ath_edma_dma_txsetup;
+ sc->sc_tx.xmit_teardown = ath_edma_dma_txteardown;
+ sc->sc_tx.xmit_attach_comp_func = ath_edma_attach_comp_func;
+
+ sc->sc_tx.xmit_dma_restart = ath_edma_dma_restart;
+ sc->sc_tx.xmit_handoff = ath_edma_xmit_handoff;
+ sc->sc_tx.xmit_processq = ath_edma_tx_processq;
+ sc->sc_tx.xmit_drainq = ath_edma_tx_draintxq;
+}
diff --git a/sys/dev/ath/if_ath_tx_edma.h b/sys/dev/ath/if_ath_tx_edma.h
new file mode 100644
index 0000000..d4975a6
--- /dev/null
+++ b/sys/dev/ath/if_ath_tx_edma.h
@@ -0,0 +1,36 @@
+/*-
+ * Copyright (c) 2012 Adrian Chadd <adrian@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer,
+ * without modification.
+ * 2. Redistributions in binary form must reproduce at minimum a disclaimer
+ * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
+ * redistribution must be conditioned upon including a substantially
+ * similar Disclaimer requirement for further binary redistribution.
+ *
+ * NO WARRANTY
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
+ * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * $FreeBSD$
+ */
+#ifndef __IF_ATH_TX_EDMA_H__
+#define __IF_ATH_TX_EDMA_H__
+
+extern void ath_xmit_setup_edma(struct ath_softc *sc);
+
+#endif
diff --git a/sys/dev/ath/if_ath_tx_ht.c b/sys/dev/ath/if_ath_tx_ht.c
index e9ec632..6495a04 100644
--- a/sys/dev/ath/if_ath_tx_ht.c
+++ b/sys/dev/ath/if_ath_tx_ht.c
@@ -511,6 +511,8 @@ ath_rateseries_setup(struct ath_softc *sc, struct ieee80211_node *ni,
series[i].RateFlags |= HAL_RATESERIES_HALFGI;
series[i].Rate = rt->info[rc[i].rix].rateCode;
+ series[i].RateIndex = rc[i].rix;
+ series[i].tx_power_cap = 0x3f; /* XXX for now */
/*
* PktDuration doesn't include slot, ACK, RTS, etc timing -
@@ -558,14 +560,12 @@ ath_rateseries_print(struct ath_softc *sc, HAL_11N_RATE_SERIES *series)
* This isn't useful for sending beacon frames, which has different needs
* wrt what's passed into the rate scenario function.
*/
-
void
ath_buf_set_rate(struct ath_softc *sc, struct ieee80211_node *ni,
struct ath_buf *bf)
{
HAL_11N_RATE_SERIES series[4];
struct ath_desc *ds = bf->bf_desc;
- struct ath_desc *lastds = NULL;
struct ath_hal *ah = sc->sc_ah;
int is_pspoll = (bf->bf_state.bfs_atype == HAL_PKT_TYPE_PSPOLL);
int ctsrate = bf->bf_state.bfs_ctsrate;
@@ -576,13 +576,6 @@ ath_buf_set_rate(struct ath_softc *sc, struct ieee80211_node *ni,
ath_rateseries_setup(sc, ni, bf, series);
- /* Enforce AR5416 aggregate limit - can't do RTS w/ an agg frame > 8k */
-
- /* Enforce RTS and CTS are mutually exclusive */
-
- /* Get a pointer to the last tx descriptor in the list */
- lastds = bf->bf_lastds;
-
#if 0
printf("pktlen: %d; flags 0x%x\n", pktlen, flags);
ath_rateseries_print(sc, series);
@@ -600,21 +593,6 @@ ath_buf_set_rate(struct ath_softc *sc, struct ieee80211_node *ni,
4, /* number of series */
flags);
- /* Setup the last descriptor in the chain */
- /*
- * XXX Why is this done here, and not in the upper layer?
- * The rate control code stores a copy of the RC info in
- * the last descriptor as well as the first, then uses
- * the shadow copy in the last descriptor to see what the RC
- * decisions were. I'm not sure why; perhaps earlier hardware
- * overwrote the first descriptor contents.
- *
- * In the 802.11n case, it also clears the moreaggr/delim
- * fields. Again, this should be done by the caller of
- * ath_buf_set_rate().
- */
- ath_hal_setuplasttxdesc(ah, lastds, ds);
-
/* Set burst duration */
/*
* This is only required when doing 11n burst, not aggregation
diff --git a/sys/dev/ath/if_athioctl.h b/sys/dev/ath/if_athioctl.h
index 71813ae..514e5a7 100644
--- a/sys/dev/ath/if_athioctl.h
+++ b/sys/dev/ath/if_athioctl.h
@@ -161,7 +161,9 @@ struct ath_stats {
u_int32_t ast_tx_aggr_ok; /* aggregate TX ok */
u_int32_t ast_tx_aggr_fail; /* aggregate TX failed */
u_int32_t ast_tx_mcastq_overflow; /* multicast queue overflow */
- u_int32_t ast_pad[1];
+ u_int32_t ast_rx_keymiss;
+
+ u_int32_t ast_pad[16];
};
#define SIOCGATHSTATS _IOWR('i', 137, struct ifreq)
@@ -184,6 +186,53 @@ struct ath_diag {
#define SIOCGATHDIAG _IOWR('i', 138, struct ath_diag)
#define SIOCGATHPHYERR _IOWR('i', 140, struct ath_diag)
+
+/*
+ * The rate control ioctl has to support multiple potential rate
+ * control classes. For now, instead of trying to support an
+ * abstraction for this in the API, let's just use a TLV
+ * representation for the payload and let userspace sort it out.
+ */
+struct ath_rateioctl_tlv {
+ uint16_t tlv_id;
+ uint16_t tlv_len; /* length excluding TLV header */
+};
+
+/*
+ * This is purely the six byte MAC address.
+ */
+#define ATH_RATE_TLV_MACADDR 0xaab0
+
+/*
+ * The rate control modules may decide to push a mapping table
+ * of rix -> net80211 ratecode as part of the update.
+ */
+#define ATH_RATE_TLV_RATETABLE_NENTRIES 64
+struct ath_rateioctl_rt {
+ uint16_t nentries;
+ uint16_t pad[1];
+ uint8_t ratecode[ATH_RATE_TLV_RATETABLE_NENTRIES];
+};
+#define ATH_RATE_TLV_RATETABLE 0xaab1
+
+/*
+ * This is the sample node statistics structure.
+ * More in ath_rate/sample/sample.h.
+ */
+#define ATH_RATE_TLV_SAMPLENODE 0xaab2
+
+struct ath_rateioctl {
+ char if_name[IFNAMSIZ]; /* if name */
+ union {
+ uint8_t macaddr[IEEE80211_ADDR_LEN];
+ uint64_t pad;
+ } is_u;
+ uint32_t len;
+ caddr_t buf;
+};
+#define SIOCGATHNODERATESTATS _IOWR('i', 149, struct ath_rateioctl)
+#define SIOCGATHRATESTATS _IOWR('i', 150, struct ath_rateioctl)
+
/*
* Radio capture format.
*/
diff --git a/sys/dev/ath/if_athrate.h b/sys/dev/ath/if_athrate.h
index 10f6040..d07c9ca 100644
--- a/sys/dev/ath/if_athrate.h
+++ b/sys/dev/ath/if_athrate.h
@@ -150,4 +150,16 @@ struct ath_buf;
void ath_rate_tx_complete(struct ath_softc *, struct ath_node *,
const struct ath_rc_series *, const struct ath_tx_status *,
int pktlen, int nframes, int nbad);
+
+/*
+ * Fetch the global rate control statistics.
+ */
+int ath_rate_fetch_stats(struct ath_softc *sc, struct ath_rateioctl *rs);
+
+/*
+ * Fetch the per-node statistics.
+ */
+int ath_rate_fetch_node_stats(struct ath_softc *sc, struct ath_node *an,
+ struct ath_rateioctl *rs);
+
#endif /* _ATH_RATECTRL_H_ */
diff --git a/sys/dev/ath/if_athvar.h b/sys/dev/ath/if_athvar.h
index 7370e01..94097ad 100644
--- a/sys/dev/ath/if_athvar.h
+++ b/sys/dev/ath/if_athvar.h
@@ -189,6 +189,7 @@ struct ath_buf {
TAILQ_ENTRY(ath_buf) bf_list;
struct ath_buf * bf_next; /* next buffer in the aggregate */
int bf_nseg;
+ HAL_STATUS bf_rxstatus;
uint16_t bf_flags; /* status flags (below) */
struct ath_desc *bf_desc; /* virtual addr of desc */
struct ath_desc_status bf_status; /* tx/rx status */
@@ -276,6 +277,7 @@ typedef TAILQ_HEAD(ath_bufhead_s, ath_buf) ath_bufhead;
struct ath_descdma {
const char* dd_name;
struct ath_desc *dd_desc; /* descriptors */
+ int dd_descsize; /* size of single descriptor */
bus_addr_t dd_desc_paddr; /* physical addr of dd_desc */
bus_size_t dd_desc_len; /* size of dd_desc */
bus_dma_segment_t dd_dseg;
@@ -395,6 +397,30 @@ struct ath_rx_edma {
struct mbuf *m_rxpending;
};
+struct ath_tx_edma_fifo {
+ struct ath_buf **m_fifo;
+ int m_fifolen;
+ int m_fifo_head;
+ int m_fifo_tail;
+ int m_fifo_depth;
+};
+
+struct ath_tx_methods {
+ int (*xmit_setup)(struct ath_softc *sc);
+ int (*xmit_teardown)(struct ath_softc *sc);
+ void (*xmit_attach_comp_func)(struct ath_softc *sc);
+
+ void (*xmit_dma_restart)(struct ath_softc *sc,
+ struct ath_txq *txq);
+ void (*xmit_handoff)(struct ath_softc *sc,
+ struct ath_txq *txq, struct ath_buf *bf);
+
+ void (*xmit_drainq)(struct ath_softc *sc,
+ struct ath_txq *txq);
+ int (*xmit_processq)(struct ath_softc *sc,
+ struct ath_txq *txq, int dosched);
+};
+
struct ath_softc {
struct ifnet *sc_ifp; /* interface common */
struct ath_stats sc_stats; /* interface statistics */
@@ -409,7 +435,10 @@ struct ath_softc {
uint32_t sc_bssidmask; /* bssid mask */
struct ath_rx_methods sc_rx;
- struct ath_rx_edma sc_rxedma[2]; /* HP/LP queues */
+ struct ath_rx_edma sc_rxedma[HAL_NUM_RX_QUEUES]; /* HP/LP queues */
+ struct ath_tx_methods sc_tx;
+ struct ath_tx_edma_fifo sc_txedma[HAL_NUM_TX_QUEUES];
+
int sc_rx_statuslen;
int sc_tx_desclen;
int sc_tx_statuslen;
@@ -425,6 +454,8 @@ struct ath_softc {
struct mtx sc_mtx; /* master lock (recursive) */
struct mtx sc_pcu_mtx; /* PCU access mutex */
char sc_pcu_mtx_name[32];
+ struct mtx sc_rx_mtx; /* RX access mutex */
+ char sc_rx_mtx_name[32];
struct taskqueue *sc_tq; /* private task queue */
struct ath_hal *sc_ah; /* Atheros HAL */
struct ath_ratectrl *sc_rc; /* tx rate control support */
@@ -432,6 +463,7 @@ struct ath_softc {
void (*sc_setdefantenna)(struct ath_softc *, u_int);
unsigned int sc_invalid : 1,/* disable hardware accesses */
sc_mrretry : 1,/* multi-rate retry support */
+ sc_mrrprot : 1,/* MRR + protection support */
sc_softled : 1,/* enable LED gpio status */
sc_hardled : 1,/* enable MAC LED status */
sc_splitmic : 1,/* split TKIP MIC keys */
@@ -546,6 +578,7 @@ struct ath_softc {
int sc_txbuf_cnt; /* how many buffers avail */
struct ath_descdma sc_txdma_mgmt; /* mgmt TX descriptors */
ath_bufhead sc_txbuf_mgmt; /* mgmt transmit buffer */
+ struct ath_descdma sc_txsdma; /* EDMA TX status desc's */
struct mtx sc_txbuflock; /* txbuf lock */
char sc_txname[12]; /* e.g. "ath0_buf" */
u_int sc_txqsetup; /* h/w queues setup */
@@ -554,6 +587,11 @@ struct ath_softc {
struct ath_txq *sc_ac2q[5]; /* WME AC -> h/w q map */
struct task sc_txtask; /* tx int processing */
struct task sc_txqtask; /* tx proc processing */
+
+ struct ath_descdma sc_txcompdma; /* TX EDMA completion */
+ struct mtx sc_txcomplock; /* TX EDMA completion lock */
+ char sc_txcompname[12]; /* eg ath0_txcomp */
+
int sc_wd_timer; /* count down for wd timer */
struct callout sc_wd_ch; /* tx watchdog timer */
struct ath_tx_radiotap_header sc_tx_th;
@@ -696,6 +734,28 @@ struct ath_softc {
#define ATH_PCU_UNLOCK_ASSERT(_sc) mtx_assert(&(_sc)->sc_pcu_mtx, \
MA_NOTOWNED)
+/*
+ * The RX lock is primarily a(nother) workaround to ensure that the
+ * RX FIFO/list isn't modified by various execution paths.
+ * Even though RX occurs in a single context (the ath taskqueue), the
+ * RX path can be executed via various reset/channel change paths.
+ */
+#define ATH_RX_LOCK_INIT(_sc) do {\
+ snprintf((_sc)->sc_rx_mtx_name, \
+ sizeof((_sc)->sc_rx_mtx_name), \
+ "%s RX lock", \
+ device_get_nameunit((_sc)->sc_dev)); \
+ mtx_init(&(_sc)->sc_rx_mtx, (_sc)->sc_rx_mtx_name, \
+ NULL, MTX_DEF); \
+ } while (0)
+#define ATH_RX_LOCK_DESTROY(_sc) mtx_destroy(&(_sc)->sc_rx_mtx)
+#define ATH_RX_LOCK(_sc) mtx_lock(&(_sc)->sc_rx_mtx)
+#define ATH_RX_UNLOCK(_sc) mtx_unlock(&(_sc)->sc_rx_mtx)
+#define ATH_RX_LOCK_ASSERT(_sc) mtx_assert(&(_sc)->sc_rx_mtx, \
+ MA_OWNED)
+#define ATH_RX_UNLOCK_ASSERT(_sc) mtx_assert(&(_sc)->sc_rx_mtx, \
+ MA_NOTOWNED)
+
#define ATH_TXQ_SETUP(sc, i) ((sc)->sc_txqsetup & (1<<i))
#define ATH_TXBUF_LOCK_INIT(_sc) do { \
@@ -709,6 +769,19 @@ struct ath_softc {
#define ATH_TXBUF_LOCK_ASSERT(_sc) \
mtx_assert(&(_sc)->sc_txbuflock, MA_OWNED)
+#define ATH_TXSTATUS_LOCK_INIT(_sc) do { \
+ snprintf((_sc)->sc_txcompname, sizeof((_sc)->sc_txcompname), \
+ "%s_buf", \
+ device_get_nameunit((_sc)->sc_dev)); \
+ mtx_init(&(_sc)->sc_txcomplock, (_sc)->sc_txcompname, NULL, \
+ MTX_DEF); \
+} while (0)
+#define ATH_TXSTATUS_LOCK_DESTROY(_sc) mtx_destroy(&(_sc)->sc_txcomplock)
+#define ATH_TXSTATUS_LOCK(_sc) mtx_lock(&(_sc)->sc_txcomplock)
+#define ATH_TXSTATUS_UNLOCK(_sc) mtx_unlock(&(_sc)->sc_txcomplock)
+#define ATH_TXSTATUS_LOCK_ASSERT(_sc) \
+ mtx_assert(&(_sc)->sc_txcomplock, MA_OWNED)
+
int ath_attach(u_int16_t, struct ath_softc *);
int ath_detach(struct ath_softc *);
void ath_resume(struct ath_softc *);
@@ -1042,6 +1115,15 @@ void ath_intr(void *);
((*(_ah)->ah_getTxIntrQueue)((_ah), (_txqs)))
#define ath_hal_gettxcompletionrates(_ah, _ds, _rates, _tries) \
((*(_ah)->ah_getTxCompletionRates)((_ah), (_ds), (_rates), (_tries)))
+#define ath_hal_settxdesclink(_ah, _ds, _link) \
+ ((*(_ah)->ah_setTxDescLink)((_ah), (_ds), (_link)))
+#define ath_hal_gettxdesclink(_ah, _ds, _link) \
+ ((*(_ah)->ah_getTxDescLink)((_ah), (_ds), (_link)))
+#define ath_hal_gettxdesclinkptr(_ah, _ds, _linkptr) \
+ ((*(_ah)->ah_getTxDescLinkPtr)((_ah), (_ds), (_linkptr)))
+#define ath_hal_setuptxstatusring(_ah, _tsstart, _tspstart, _size) \
+ ((*(_ah)->ah_setupTxStatusRing)((_ah), (_tsstart), (_tspstart), \
+ (_size)))
#define ath_hal_setupfirsttxdesc(_ah, _ds, _aggrlen, _flags, _txpower, \
_txr0, _txtr0, _antm, _rcr, _rcd) \
@@ -1060,7 +1142,7 @@ void ath_intr(void *);
(_series), (_ns), (_flags)))
#define ath_hal_set11n_aggr_first(_ah, _ds, _len, _num) \
- ((*(_ah)->ah_set11nAggrFirst)((_ah), (_ds), (_len), (_num)))
+ ((*(_ah)->ah_set11nAggrFirst)((_ah), (_ds), (_len)))
#define ath_hal_set11naggrmiddle(_ah, _ds, _num) \
((*(_ah)->ah_set11nAggrMiddle)((_ah), (_ds), (_num)))
#define ath_hal_set11n_aggr_last(_ah, _ds) \
diff --git a/sys/dev/cesa/cesa.c b/sys/dev/cesa/cesa.c
index 9c758a4..835bb06 100644
--- a/sys/dev/cesa/cesa.c
+++ b/sys/dev/cesa/cesa.c
@@ -1005,6 +1005,7 @@ cesa_attach(device_t dev)
switch (d) {
case MV_DEV_88F6281:
+ case MV_DEV_88F6282:
sc->sc_tperr = 0;
break;
case MV_DEV_MV78100:
diff --git a/sys/dev/e1000/if_igb.c b/sys/dev/e1000/if_igb.c
index 26d0903..d81bf0c 100644
--- a/sys/dev/e1000/if_igb.c
+++ b/sys/dev/e1000/if_igb.c
@@ -2522,7 +2522,6 @@ igb_allocate_msix(struct adapter *adapter)
"Bound queue %d to cpu %d\n",
i,igb_last_bind_cpu);
igb_last_bind_cpu = CPU_NEXT(igb_last_bind_cpu);
- igb_last_bind_cpu = igb_last_bind_cpu % mp_ncpus;
}
#if __FreeBSD_version >= 800000
TASK_INIT(&que->txr->txq_task, 0, igb_deferred_mq_start,
diff --git a/sys/dev/e1000/if_lem.c b/sys/dev/e1000/if_lem.c
index b5bca6a..882bd3c 100644
--- a/sys/dev/e1000/if_lem.c
+++ b/sys/dev/e1000/if_lem.c
@@ -1,6 +1,6 @@
/******************************************************************************
- Copyright (c) 2001-2011, Intel Corporation
+ Copyright (c) 2001-2012, Intel Corporation
All rights reserved.
Redistribution and use in source and binary forms, with or without
@@ -85,7 +85,7 @@
/*********************************************************************
* Legacy Em Driver version:
*********************************************************************/
-char lem_driver_version[] = "1.0.4";
+char lem_driver_version[] = "1.0.5";
/*********************************************************************
* PCI Device ID Table
@@ -239,15 +239,12 @@ static void lem_enable_wakeup(device_t);
static int lem_enable_phy_wakeup(struct adapter *);
static void lem_led_func(void *, int);
-#ifdef EM_LEGACY_IRQ
static void lem_intr(void *);
-#else /* FAST IRQ */
static int lem_irq_fast(void *);
static void lem_handle_rxtx(void *context, int pending);
static void lem_handle_link(void *context, int pending);
static void lem_add_rx_process_limit(struct adapter *, const char *,
const char *, int *, int);
-#endif /* ~EM_LEGACY_IRQ */
#ifdef DEVICE_POLLING
static poll_handler_t lem_poll;
@@ -304,11 +301,13 @@ TUNABLE_INT("hw.em.txd", &lem_txd);
TUNABLE_INT("hw.em.smart_pwr_down", &lem_smart_pwr_down);
TUNABLE_INT("hw.em.sbp", &lem_debug_sbp);
-#ifndef EM_LEGACY_IRQ
+/* Interrupt style - default to fast */
+static int lem_use_legacy_irq = 0;
+TUNABLE_INT("hw.em.use_legacy_irq", &lem_use_legacy_irq);
+
/* How many packets rxeof tries to clean at a time */
static int lem_rx_process_limit = 100;
TUNABLE_INT("hw.em.rx_process_limit", &lem_rx_process_limit);
-#endif
/* Flow control setting - default to FULL */
static int lem_fc_setting = e1000_fc_full;
@@ -450,12 +449,10 @@ lem_attach(device_t dev)
lem_tx_abs_int_delay_dflt);
}
-#ifndef EM_LEGACY_IRQ
/* Sysctls for limiting the amount of work done in the taskqueue */
lem_add_rx_process_limit(adapter, "rx_processing_limit",
"max number of rx packets to process", &adapter->rx_process_limit,
lem_rx_process_limit);
-#endif
/* Sysctl for setting the interface flow control */
lem_set_flow_cntrl(adapter, "flow_control",
@@ -1197,22 +1194,6 @@ lem_init_locked(struct adapter *adapter)
callout_reset(&adapter->timer, hz, lem_local_timer, adapter);
e1000_clear_hw_cntrs_base_generic(&adapter->hw);
- /* MSI/X configuration for 82574 */
- if (adapter->hw.mac.type == e1000_82574) {
- int tmp;
- tmp = E1000_READ_REG(&adapter->hw, E1000_CTRL_EXT);
- tmp |= E1000_CTRL_EXT_PBA_CLR;
- E1000_WRITE_REG(&adapter->hw, E1000_CTRL_EXT, tmp);
- /*
- ** Set the IVAR - interrupt vector routing.
- ** Each nibble represents a vector, high bit
- ** is enable, other 3 bits are the MSIX table
- ** entry, we map RXQ0 to 0, TXQ0 to 1, and
- ** Link (other) to 2, hence the magic number.
- */
- E1000_WRITE_REG(&adapter->hw, E1000_IVAR, 0x800A0908);
- }
-
#ifdef DEVICE_POLLING
/*
* Only enable interrupts if we are not polling, make sure
@@ -1281,7 +1262,6 @@ lem_poll(struct ifnet *ifp, enum poll_cmd cmd, int count)
}
#endif /* DEVICE_POLLING */
-#ifdef EM_LEGACY_IRQ
/*********************************************************************
*
* Legacy Interrupt Service routine
@@ -1295,7 +1275,8 @@ lem_intr(void *arg)
u32 reg_icr;
- if (ifp->if_capenable & IFCAP_POLLING)
+ if ((ifp->if_capenable & IFCAP_POLLING) ||
+ ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0))
return;
EM_CORE_LOCK(adapter);
@@ -1303,11 +1284,10 @@ lem_intr(void *arg)
if (reg_icr & E1000_ICR_RXO)
adapter->rx_overruns++;
- if ((reg_icr == 0xffffffff) || (reg_icr == 0))
- goto out;
-
- if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
- goto out;
+ if ((reg_icr == 0xffffffff) || (reg_icr == 0)) {
+ EM_CORE_UNLOCK(adapter);
+ return;
+ }
if (reg_icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
callout_stop(&adapter->timer);
@@ -1317,23 +1297,22 @@ lem_intr(void *arg)
lem_tx_purge(adapter);
callout_reset(&adapter->timer, hz,
lem_local_timer, adapter);
- goto out;
+ EM_CORE_UNLOCK(adapter);
+ return;
}
- EM_TX_LOCK(adapter);
+ EM_CORE_UNLOCK(adapter);
lem_rxeof(adapter, -1, NULL);
+
+ EM_TX_LOCK(adapter);
lem_txeof(adapter);
if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
lem_start_locked(ifp);
EM_TX_UNLOCK(adapter);
-
-out:
- EM_CORE_UNLOCK(adapter);
return;
}
-#else /* EM_FAST_IRQ, then fast interrupt routines only */
static void
lem_handle_link(void *context, int pending)
@@ -1417,7 +1396,6 @@ lem_irq_fast(void *arg)
adapter->rx_overruns++;
return FILTER_HANDLED;
}
-#endif /* ~EM_LEGACY_IRQ */
/*********************************************************************
@@ -2214,19 +2192,21 @@ lem_allocate_irq(struct adapter *adapter)
return (ENXIO);
}
-#ifdef EM_LEGACY_IRQ
- /* We do Legacy setup */
- if ((error = bus_setup_intr(dev, adapter->res[0],
- INTR_TYPE_NET | INTR_MPSAFE, NULL, lem_intr, adapter,
- &adapter->tag[0])) != 0) {
- device_printf(dev, "Failed to register interrupt handler");
- return (error);
+ /* Do Legacy setup? */
+ if (lem_use_legacy_irq) {
+ if ((error = bus_setup_intr(dev, adapter->res[0],
+ INTR_TYPE_NET | INTR_MPSAFE, NULL, lem_intr, adapter,
+ &adapter->tag[0])) != 0) {
+ device_printf(dev,
+ "Failed to register interrupt handler");
+ return (error);
+ }
+ return (0);
}
-#else /* FAST_IRQ */
/*
- * Try allocating a fast interrupt and the associated deferred
- * processing contexts.
+ * Use a Fast interrupt and the associated
+ * deferred processing contexts.
*/
TASK_INIT(&adapter->rxtx_task, 0, lem_handle_rxtx, adapter);
TASK_INIT(&adapter->link_task, 0, lem_handle_link, adapter);
@@ -2243,7 +2223,6 @@ lem_allocate_irq(struct adapter *adapter)
adapter->tq = NULL;
return (error);
}
-#endif /* EM_LEGACY_IRQ */
return (0);
}
@@ -3301,20 +3280,6 @@ lem_initialize_receive_unit(struct adapter *adapter)
E1000_WRITE_REG(&adapter->hw, E1000_ITR, DEFAULT_ITR);
}
- /*
- ** When using MSIX interrupts we need to throttle
- ** using the EITR register (82574 only)
- */
- if (adapter->msix)
- for (int i = 0; i < 4; i++)
- E1000_WRITE_REG(&adapter->hw,
- E1000_EITR_82574(i), DEFAULT_ITR);
-
- /* Disable accelerated ackknowledge */
- if (adapter->hw.mac.type == e1000_82574)
- E1000_WRITE_REG(&adapter->hw,
- E1000_RFCTL, E1000_RFCTL_ACK_DIS);
-
/* Setup the Base and Length of the Rx Descriptor Ring */
bus_addr = adapter->rxdma.dma_paddr;
E1000_WRITE_REG(&adapter->hw, E1000_RDLEN(0),
@@ -3834,10 +3799,6 @@ lem_enable_intr(struct adapter *adapter)
struct e1000_hw *hw = &adapter->hw;
u32 ims_mask = IMS_ENABLE_MASK;
- if (adapter->msix) {
- E1000_WRITE_REG(hw, EM_EIAC, EM_MSIX_MASK);
- ims_mask |= EM_MSIX_MASK;
- }
E1000_WRITE_REG(hw, E1000_IMS, ims_mask);
}
@@ -3846,9 +3807,7 @@ lem_disable_intr(struct adapter *adapter)
{
struct e1000_hw *hw = &adapter->hw;
- if (adapter->msix)
- E1000_WRITE_REG(hw, EM_EIAC, 0);
- E1000_WRITE_REG(&adapter->hw, E1000_IMC, 0xffffffff);
+ E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
}
/*
@@ -4682,7 +4641,6 @@ lem_set_flow_cntrl(struct adapter *adapter, const char *name,
OID_AUTO, name, CTLTYPE_INT|CTLFLAG_RW, limit, value, description);
}
-#ifndef EM_LEGACY_IRQ
static void
lem_add_rx_process_limit(struct adapter *adapter, const char *name,
const char *description, int *limit, int value)
@@ -4692,4 +4650,3 @@ lem_add_rx_process_limit(struct adapter *adapter, const char *name,
SYSCTL_CHILDREN(device_get_sysctl_tree(adapter->dev)),
OID_AUTO, name, CTLTYPE_INT|CTLFLAG_RW, limit, value, description);
}
-#endif
diff --git a/sys/dev/isp/isp.c b/sys/dev/isp/isp.c
index a2853a2..2c6b0b8 100644
--- a/sys/dev/isp/isp.c
+++ b/sys/dev/isp/isp.c
@@ -65,7 +65,7 @@ __FBSDID("$FreeBSD$");
*/
#define MBOX_DELAY_COUNT 1000000 / 100
#define ISP_MARK_PORTDB(a, b, c) \
- isp_prt(isp, ISP_LOGSANCFG, \
+ isp_prt(isp, ISP_LOG_SANCFG, \
"Chan %d ISP_MARK_PORTDB@LINE %d", b, __LINE__); \
isp_mark_portdb(a, b, c)
@@ -670,8 +670,7 @@ isp_reset(ispsoftc_t *isp, int do_load_defaults)
ISP_DELAY(100);
if (--loops < 0) {
ISP_RESET0(isp);
- isp_prt(isp, ISP_LOGERR,
- "MBOX_BUSY never cleared on reset");
+ isp_prt(isp, ISP_LOGERR, "MBOX_BUSY never cleared on reset");
return;
}
}
@@ -1715,6 +1714,25 @@ isp_fibre_init(ispsoftc_t *isp)
icbp->icb_xfwoptions = fcp->isp_xfwoptions;
+ if (ISP_CAP_FCTAPE(isp)) {
+ if (isp->isp_confopts & ISP_CFG_NOFCTAPE)
+ icbp->icb_xfwoptions &= ~ICBXOPT_FCTAPE;
+
+ if (isp->isp_confopts & ISP_CFG_FCTAPE)
+ icbp->icb_xfwoptions |= ICBXOPT_FCTAPE;
+
+ if (icbp->icb_xfwoptions & ICBXOPT_FCTAPE) {
+ icbp->icb_fwoptions &= ~ICBOPT_FULL_LOGIN; /* per documents */
+ icbp->icb_xfwoptions |= ICBXOPT_FCTAPE_CCQ|ICBXOPT_FCTAPE_CONFIRM;
+ FCPARAM(isp, 0)->fctape_enabled = 1;
+ } else {
+ FCPARAM(isp, 0)->fctape_enabled = 0;
+ }
+ } else {
+ icbp->icb_xfwoptions &= ~ICBXOPT_FCTAPE;
+ FCPARAM(isp, 0)->fctape_enabled = 0;
+ }
+
/*
* Prefer or force Point-To-Point instead Loop?
*/
@@ -1804,6 +1822,9 @@ isp_fibre_init(ispsoftc_t *isp)
if (ISP_FW_NEWER_THAN(isp, 3, 16, 0)) {
mbs.param[1] |= IFCOPT1_EQFQASYNC|IFCOPT1_CTIO_RETRY;
if (fcp->role & ISP_ROLE_TARGET) {
+ if (ISP_FW_NEWER_THAN(isp, 3, 25, 0)) {
+ mbs.param[1] |= IFCOPT1_ENAPURE;
+ }
mbs.param[3] = IFCOPT3_NOPRLI;
}
}
@@ -1813,8 +1834,15 @@ isp_fibre_init(ispsoftc_t *isp)
}
}
icbp->icb_logintime = ICB_LOGIN_TOV;
- icbp->icb_lunetimeout = ICB_LUN_ENABLE_TOV;
+#ifdef ISP_TARGET_MODE
+ if (ISP_FW_NEWER_THAN(isp, 3, 25, 0) && (icbp->icb_fwoptions & ICBOPT_TGT_ENABLE)) {
+ icbp->icb_lunenables = 0xffff;
+ icbp->icb_ccnt = DFLT_CMND_CNT;
+ icbp->icb_icnt = DFLT_INOT_CNT;
+ icbp->icb_lunetimeout = ICB_LUN_ENABLE_TOV;
+ }
+#endif
if (fcp->isp_wwnn && fcp->isp_wwpn && (fcp->isp_wwnn >> 60) != 2) {
icbp->icb_fwoptions |= ICBOPT_BOTH_WWNS;
MAKE_NODE_NAME_FROM_WWN(icbp->icb_nodename, fcp->isp_wwnn);
@@ -1910,7 +1938,7 @@ isp_fibre_init_2400(ispsoftc_t *isp)
}
}
if (chan == isp->isp_nchan) {
- isp_prt(isp, ISP_LOGDEBUG0, "all %d channels with role 'none'", chan);
+ isp_prt(isp, ISP_LOG_WARN1, "all %d channels with role 'none'", chan);
isp->isp_state = ISP_INITSTATE;
return;
}
@@ -1978,6 +2006,19 @@ isp_fibre_init_2400(ispsoftc_t *isp)
icbp->icb_fwoptions1 |= ICB2400_OPT1_HARD_ADDRESS;
icbp->icb_fwoptions2 = fcp->isp_xfwoptions;
+ if (isp->isp_confopts & ISP_CFG_NOFCTAPE) {
+ icbp->icb_fwoptions2 &= ~ICB2400_OPT2_FCTAPE;
+ }
+ if (isp->isp_confopts & ISP_CFG_FCTAPE) {
+ icbp->icb_fwoptions2 |= ICB2400_OPT2_FCTAPE;
+ }
+
+ if (icbp->icb_fwoptions2 & ICB2400_OPT2_FCTAPE) {
+ FCPARAM(isp, chan)->fctape_enabled = 1;
+ } else {
+ FCPARAM(isp, chan)->fctape_enabled = 0;
+ }
+
switch (isp->isp_confopts & ISP_CFG_PORT_PREF) {
case ISP_CFG_NPORT_ONLY:
icbp->icb_fwoptions2 &= ~ICB2400_OPT2_TOPO_MASK;
@@ -2286,7 +2327,7 @@ isp_plogx(ispsoftc_t *isp, int chan, uint16_t handle, uint32_t portid, int flags
goto out;
} else if (plp->plogx_status != PLOGX_STATUS_IOCBERR) {
isp_prt(isp, ISP_LOGWARN,
- "status 0x%x on port login IOCB chanel %d",
+ "status 0x%x on port login IOCB channel %d",
plp->plogx_status, chan);
rval = -1;
goto out;
@@ -2336,13 +2377,13 @@ isp_plogx(ispsoftc_t *isp, int chan, uint16_t handle, uint32_t portid, int flags
msg = buf;
break;
case PLOGX_IOCBERR_PORTUSED:
- lev = ISP_LOGSANCFG|ISP_LOGDEBUG0;
+ lev = ISP_LOG_SANCFG|ISP_LOG_WARN1;
ISP_SNPRINTF(buf, sizeof (buf), "already logged in with N-Port handle 0x%x", parm1);
msg = buf;
rval = MBOX_PORT_ID_USED | (parm1 << 16);
break;
case PLOGX_IOCBERR_HNDLUSED:
- lev = ISP_LOGSANCFG|ISP_LOGDEBUG0;
+ lev = ISP_LOG_SANCFG|ISP_LOG_WARN1;
ISP_SNPRINTF(buf, sizeof (buf), "handle already used for PortID 0x%06x", parm1);
msg = buf;
rval = MBOX_LOOP_ID_USED;
@@ -2388,35 +2429,26 @@ isp_port_login(ispsoftc_t *isp, uint16_t handle, uint32_t portid)
switch (mbs.param[0]) {
case MBOX_PORT_ID_USED:
- isp_prt(isp, ISP_LOGDEBUG0,
- "isp_port_login: portid 0x%06x already logged in as %u",
- portid, mbs.param[1]);
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOG_WARN1, "isp_port_login: portid 0x%06x already logged in as %u", portid, mbs.param[1]);
return (MBOX_PORT_ID_USED | (mbs.param[1] << 16));
case MBOX_LOOP_ID_USED:
- isp_prt(isp, ISP_LOGDEBUG0,
- "isp_port_login: handle 0x%04x in use for port id 0x%02xXXXX",
- handle, mbs.param[1] & 0xff);
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOG_WARN1, "isp_port_login: handle 0x%04x in use for port id 0x%02xXXXX", handle, mbs.param[1] & 0xff);
return (MBOX_LOOP_ID_USED);
case MBOX_COMMAND_COMPLETE:
return (0);
case MBOX_COMMAND_ERROR:
- isp_prt(isp, ISP_LOGINFO,
- "isp_port_login: error 0x%x in PLOGI to port 0x%06x",
- mbs.param[1], portid);
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOG_WARN1, "isp_port_login: error 0x%x in PLOGI to port 0x%06x", mbs.param[1], portid);
return (MBOX_COMMAND_ERROR);
case MBOX_ALL_IDS_USED:
- isp_prt(isp, ISP_LOGINFO,
- "isp_port_login: all IDs used for fabric login");
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOG_WARN1, "isp_port_login: all IDs used for fabric login");
return (MBOX_ALL_IDS_USED);
default:
- isp_prt(isp, ISP_LOGINFO,
- "isp_port_login: error 0x%x on port login of 0x%06x@0x%0x",
- mbs.param[0], portid, handle);
+ isp_prt(isp, ISP_LOG_SANCFG, "isp_port_login: error 0x%x on port login of 0x%06x@0x%0x", mbs.param[0], portid, handle);
return (mbs.param[0]);
}
}
@@ -2483,16 +2515,12 @@ isp_getpdb(ispsoftc_t *isp, int chan, uint16_t id, isp_pdb_t *pdb, int dolock)
if (IS_24XX(isp)) {
isp_get_pdb_24xx(isp, fcp->isp_scratch, &un.bill);
pdb->handle = un.bill.pdb_handle;
- pdb->s3_role = un.bill.pdb_prli_svc3;
+ pdb->prli_word3 = un.bill.pdb_prli_svc3;
pdb->portid = BITS2WORD_24XX(un.bill.pdb_portid_bits);
ISP_MEMCPY(pdb->portname, un.bill.pdb_portname, 8);
ISP_MEMCPY(pdb->nodename, un.bill.pdb_nodename, 8);
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d Port 0x%06x flags 0x%x curstate %x",
- chan, pdb->portid, un.bill.pdb_flags,
- un.bill.pdb_curstate);
- if (un.bill.pdb_curstate < PDB2400_STATE_PLOGI_DONE ||
- un.bill.pdb_curstate > PDB2400_STATE_LOGGED_IN) {
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Port 0x%06x flags 0x%x curstate %x", chan, pdb->portid, un.bill.pdb_flags, un.bill.pdb_curstate);
+ if (un.bill.pdb_curstate < PDB2400_STATE_PLOGI_DONE || un.bill.pdb_curstate > PDB2400_STATE_LOGGED_IN) {
mbs.param[0] = MBOX_NOT_LOGGED_IN;
if (dolock) {
FC_SCRATCH_RELEASE(isp, chan);
@@ -2502,7 +2530,7 @@ isp_getpdb(ispsoftc_t *isp, int chan, uint16_t id, isp_pdb_t *pdb, int dolock)
} else {
isp_get_pdb_21xx(isp, fcp->isp_scratch, &un.fred);
pdb->handle = un.fred.pdb_loopid;
- pdb->s3_role = un.fred.pdb_prli_svc3;
+ pdb->prli_word3 = un.fred.pdb_prli_svc3;
pdb->portid = BITS2WORD(un.fred.pdb_portid_bits);
ISP_MEMCPY(pdb->portname, un.fred.pdb_portname, 8);
ISP_MEMCPY(pdb->nodename, un.fred.pdb_nodename, 8);
@@ -2528,7 +2556,7 @@ isp_dump_chip_portdb(ispsoftc_t *isp, int chan, int dolock)
if (isp_getpdb(isp, chan, loopid, &pdb, dolock)) {
continue;
}
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGINFO, "Chan %d Loopid 0x%04x "
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGINFO, "Chan %d Loopid 0x%04x "
"PortID 0x%06x WWPN 0x%02x%02x%02x%02x%02x%02x%02x%02x",
chan, loopid, pdb.portid, pdb.portname[0], pdb.portname[1],
pdb.portname[2], pdb.portname[3], pdb.portname[4],
@@ -2606,7 +2634,7 @@ isp_fclink_test(ispsoftc_t *isp, int chan, int usdelay)
fcp = FCPARAM(isp, chan);
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Chan %d FC Link Test Entry", chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC Link Test Entry", chan);
ISP_MARK_PORTDB(isp, chan, 1);
/*
@@ -2622,7 +2650,7 @@ isp_fclink_test(ispsoftc_t *isp, int chan, int usdelay)
GET_NANOTIME(&hra);
isp_fw_state(isp, chan);
if (lwfs != fcp->isp_fwstate) {
- isp_prt(isp, ISP_LOGCONFIG|ISP_LOGSANCFG, "Chan %d Firmware State <%s->%s>", chan, isp_fc_fw_statename((int)lwfs), isp_fc_fw_statename((int)fcp->isp_fwstate));
+ isp_prt(isp, ISP_LOGCONFIG|ISP_LOG_SANCFG, "Chan %d Firmware State <%s->%s>", chan, isp_fc_fw_statename((int)lwfs), isp_fc_fw_statename((int)fcp->isp_fwstate));
lwfs = fcp->isp_fwstate;
}
if (fcp->isp_fwstate == FW_READY) {
@@ -2673,7 +2701,7 @@ isp_fclink_test(ispsoftc_t *isp, int chan, int usdelay)
* If we haven't gone to 'ready' state, return.
*/
if (fcp->isp_fwstate != FW_READY) {
- isp_prt(isp, ISP_LOGSANCFG, "%s: chan %d not at FW_READY state", __func__, chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "%s: chan %d not at FW_READY state", __func__, chan);
return (-1);
}
@@ -2738,7 +2766,9 @@ isp_fclink_test(ispsoftc_t *isp, int chan, int usdelay)
}
}
if (alpa_map[i] && fcp->isp_loopid != i) {
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Chan %d deriving loopid %d from AL_PA map (AL_PA 0x%x) and ignoring returned value %d (AL_PA 0x%x)", chan, i, alpa_map[i], fcp->isp_loopid, alpa);
+ isp_prt(isp, ISP_LOG_SANCFG,
+ "Chan %d deriving loopid %d from AL_PA map (AL_PA 0x%x) and ignoring returned value %d (AL_PA 0x%x)",
+ chan, i, alpa_map[i], fcp->isp_loopid, alpa);
fcp->isp_loopid = i;
}
}
@@ -2778,18 +2808,17 @@ isp_fclink_test(ispsoftc_t *isp, int chan, int usdelay)
lp->state = FC_PORTDB_STATE_PENDING_VALID;
MAKE_WWN_FROM_NODE_NAME(lp->node_wwn, pdb.nodename);
MAKE_WWN_FROM_NODE_NAME(lp->port_wwn, pdb.portname);
- lp->roles = (pdb.s3_role & SVC3_ROLE_MASK) >> SVC3_ROLE_SHIFT;
+ lp->prli_word3 = pdb.prli_word3;
lp->portid = pdb.portid;
lp->handle = pdb.handle;
lp->new_portid = lp->portid;
- lp->new_roles = lp->roles;
+ lp->new_prli_word3 = lp->prli_word3;
if (IS_24XX(isp)) {
if (check_for_fabric) {
/*
* The mbs is still hanging out from the MBOX_GET_LOOP_ID above.
*/
fcp->isp_fabric_params = mbs.param[7];
- isp_prt(isp, ISP_LOGCONFIG, "fabric params 0x%x", mbs.param[7]);
} else {
fcp->isp_fabric_params = 0;
}
@@ -2809,7 +2838,7 @@ isp_fclink_test(ispsoftc_t *isp, int chan, int usdelay)
r = isp_register_fc4_type(isp, chan);
}
if (r) {
- isp_prt(isp, ISP_LOGWARN|ISP_LOGSANCFG, "%s: register fc4 type failed", __func__);
+ isp_prt(isp, ISP_LOGWARN|ISP_LOG_SANCFG, "%s: register fc4 type failed", __func__);
return (-1);
}
} else {
@@ -2843,8 +2872,8 @@ not_on_fabric:
/*
* Announce ourselves, too.
*/
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGCONFIG, topology, chan, (uint32_t) (fcp->isp_wwpn >> 32), (uint32_t) fcp->isp_wwpn, fcp->isp_portid, fcp->isp_loopid, isp_fc_toponame(fcp));
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Chan %d FC Link Test Complete", chan);
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGCONFIG, topology, chan, (uint32_t) (fcp->isp_wwpn >> 32), (uint32_t) fcp->isp_wwpn, fcp->isp_portid, fcp->isp_loopid, isp_fc_toponame(fcp));
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC Link Test Complete", chan);
return (0);
}
@@ -2912,8 +2941,7 @@ isp_pdb_sync(ispsoftc_t *isp, int chan)
}
}
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d Synchronizing PDBs", chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Synchronizing PDBs", chan);
fcp->isp_loopstate = LOOP_SYNCING_PDB;
@@ -2950,7 +2978,7 @@ isp_pdb_sync(ispsoftc_t *isp, int chan)
} else {
lp->autologin = 0;
}
- lp->new_roles = 0;
+ lp->new_prli_word3 = 0;
lp->new_portid = 0;
/*
* Note that we might come out of this with our state
@@ -2963,13 +2991,12 @@ isp_pdb_sync(ispsoftc_t *isp, int chan)
* target id in isp_dev_map (if any).
*/
lp->portid = lp->new_portid;
- lp->roles = lp->new_roles;
+ lp->prli_word3 = lp->new_prli_word3;
lp->state = FC_PORTDB_STATE_VALID;
isp_async(isp, ISPASYNC_DEV_ARRIVED, chan, lp);
- lp->new_roles = 0;
+ lp->new_prli_word3 = 0;
lp->new_portid = 0;
- lp->reserved = 0;
- lp->new_reserved = 0;
+ lp->announced = 0;
break;
case FC_PORTDB_STATE_CHANGED:
/*
@@ -2977,14 +3004,13 @@ isp_pdb_sync(ispsoftc_t *isp, int chan)
*/
lp->state = FC_PORTDB_STATE_VALID;
isp_async(isp, ISPASYNC_DEV_CHANGED, chan, lp);
- lp->new_roles = 0;
+ lp->new_prli_word3 = 0;
lp->new_portid = 0;
- lp->reserved = 0;
- lp->new_reserved = 0;
+ lp->announced = 0;
break;
case FC_PORTDB_STATE_PENDING_VALID:
lp->portid = lp->new_portid;
- lp->roles = lp->new_roles;
+ lp->prli_word3 = lp->new_prli_word3;
if (lp->dev_map_idx) {
int t = lp->dev_map_idx - 1;
fcp->isp_dev_map[t] = dbidx + 1;
@@ -2992,11 +3018,10 @@ isp_pdb_sync(ispsoftc_t *isp, int chan)
lp->state = FC_PORTDB_STATE_VALID;
isp_async(isp, ISPASYNC_DEV_STAYED, chan, lp);
if (dbidx != FL_ID) {
- lp->new_roles = 0;
+ lp->new_prli_word3 = 0;
lp->new_portid = 0;
}
- lp->reserved = 0;
- lp->new_reserved = 0;
+ lp->announced = 0;
break;
case FC_PORTDB_STATE_ZOMBIE:
break;
@@ -3054,8 +3079,7 @@ isp_scan_loop(ispsoftc_t *isp, int chan)
break;
case TOPO_FL_PORT:
if (IS_24XX(isp) && isp->isp_nchan > 1) {
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d Skipping Local Loop Scan", chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Skipping Local Loop Scan", chan);
fcp->isp_loopstate = LOOP_LSCAN_DONE;
return (0);
}
@@ -3065,16 +3089,14 @@ isp_scan_loop(ispsoftc_t *isp, int chan)
lim = 2;
break;
default:
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d no loop topology to scan", chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d no loop topology to scan", chan);
fcp->isp_loopstate = LOOP_LSCAN_DONE;
return (0);
}
fcp->isp_loopstate = LOOP_SCANNING_LOOP;
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d FC scan loop 0..%d", chan, lim-1);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC scan loop 0..%d", chan, lim-1);
/*
@@ -3100,8 +3122,7 @@ isp_scan_loop(ispsoftc_t *isp, int chan)
if (IS_2100(isp) || IS_2200(isp)) {
uint64_t node_wwn = isp_get_wwn(isp, chan, handle, 1);
if (fcp->isp_loopstate < LOOP_SCANNING_LOOP) {
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d FC scan loop DONE (bad)", chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC scan loop DONE (bad)", chan);
return (-1);
}
if (node_wwn == INI_NONE) {
@@ -3119,8 +3140,7 @@ isp_scan_loop(ispsoftc_t *isp, int chan)
chan, handle, r);
if (fcp->isp_loopstate < LOOP_SCANNING_LOOP) {
ISP_MARK_PORTDB(isp, chan, 1);
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d FC scan loop DONE (bad)", chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC scan loop DONE (bad)", chan);
return (-1);
}
continue;
@@ -3128,8 +3148,7 @@ isp_scan_loop(ispsoftc_t *isp, int chan)
if (fcp->isp_loopstate < LOOP_SCANNING_LOOP) {
ISP_MARK_PORTDB(isp, chan, 1);
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d FC scan loop DONE (bad)", chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC scan loop DONE (bad)", chan);
return (-1);
}
@@ -3143,8 +3162,7 @@ isp_scan_loop(ispsoftc_t *isp, int chan)
isp_prt(isp, ISP_LOGWARN,
"Chan %d cannot synchronize port database", chan);
ISP_MARK_PORTDB(isp, chan, 1);
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d FC scan loop DONE (bad)", chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC scan loop DONE (bad)", chan);
return (-1);
}
@@ -3153,7 +3171,7 @@ isp_scan_loop(ispsoftc_t *isp, int chan)
*/
MAKE_WWN_FROM_NODE_NAME(tmp.node_wwn, pdb.nodename);
MAKE_WWN_FROM_NODE_NAME(tmp.port_wwn, pdb.portname);
- tmp.roles = (pdb.s3_role & SVC3_ROLE_MASK) >> SVC3_ROLE_SHIFT;
+ tmp.prli_word3 = pdb.prli_word3;
tmp.portid = pdb.portid;
tmp.handle = pdb.handle;
@@ -3192,8 +3210,7 @@ isp_scan_loop(ispsoftc_t *isp, int chan)
for (i = 0; i < MAX_FC_TARG; i++) {
lp = &fcp->portdb[i];
- if (lp->state == FC_PORTDB_STATE_NIL ||
- lp->target_mode) {
+ if (lp->state == FC_PORTDB_STATE_NIL || lp->target_mode) {
continue;
}
if (lp->node_wwn != tmp.node_wwn) {
@@ -3214,8 +3231,7 @@ isp_scan_loop(ispsoftc_t *isp, int chan)
chan, i, lp->state);
isp_dump_portdb(isp, chan);
ISP_MARK_PORTDB(isp, chan, 1);
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d FC scan loop DONE (bad)", chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC scan loop DONE (bad)", chan);
return (-1);
}
@@ -3229,15 +3245,11 @@ isp_scan_loop(ispsoftc_t *isp, int chan)
* Check to make see if really still the same
* device. If it is, we mark it pending valid.
*/
- if (lp->portid == tmp.portid &&
- lp->handle == tmp.handle &&
- lp->roles == tmp.roles) {
+ if (lp->portid == tmp.portid && lp->handle == tmp.handle && lp->prli_word3 == tmp.prli_word3) {
lp->new_portid = tmp.portid;
- lp->new_roles = tmp.roles;
+ lp->new_prli_word3 = tmp.prli_word3;
lp->state = FC_PORTDB_STATE_PENDING_VALID;
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d Loop Port 0x%06x@0x%04x Pending "
- "Valid", chan, tmp.portid, tmp.handle);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Loop Port 0x%06x@0x%04x Pending Valid", chan, tmp.portid, tmp.handle);
break;
}
@@ -3251,12 +3263,10 @@ isp_scan_loop(ispsoftc_t *isp, int chan)
* Claim that this has changed and let somebody else
* decide what to do.
*/
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d Loop Port 0x%06x@0x%04x changed",
- chan, tmp.portid, tmp.handle);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Loop Port 0x%06x@0x%04x changed", chan, tmp.portid, tmp.handle);
lp->state = FC_PORTDB_STATE_CHANGED;
lp->new_portid = tmp.portid;
- lp->new_roles = tmp.roles;
+ lp->new_prli_word3 = tmp.prli_word3;
break;
}
@@ -3290,17 +3300,14 @@ isp_scan_loop(ispsoftc_t *isp, int chan)
lp->autologin = 1;
lp->state = FC_PORTDB_STATE_NEW;
lp->new_portid = tmp.portid;
- lp->new_roles = tmp.roles;
+ lp->new_prli_word3 = tmp.prli_word3;
lp->handle = tmp.handle;
lp->port_wwn = tmp.port_wwn;
lp->node_wwn = tmp.node_wwn;
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d Loop Port 0x%06x@0x%04x is New Entry",
- chan, tmp.portid, tmp.handle);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Loop Port 0x%06x@0x%04x is New Entry", chan, tmp.portid, tmp.handle);
}
fcp->isp_loopstate = LOOP_LSCAN_DONE;
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d FC scan loop DONE", chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC scan loop DONE", chan);
return (0);
}
@@ -3343,8 +3350,7 @@ isp_gid_ft_sns(ispsoftc_t *isp, int chan)
sns_gid_ft_req_t *rq = &un._x;
mbreg_t mbs;
- isp_prt(isp, ISP_LOGDEBUG0,
- "Chan %d scanning fabric (GID_FT) via SNS", chan);
+ isp_prt(isp, ISP_LOGDEBUG0, "Chan %d scanning fabric (GID_FT) via SNS", chan);
ISP_MEMZERO(rq, SNS_GID_FT_REQ_SIZE);
rq->snscb_rblen = GIDLEN >> 1;
@@ -3393,8 +3399,7 @@ isp_gid_ft_ct_passthru(ispsoftc_t *isp, int chan)
uint32_t *rp;
uint8_t *scp = fcp->isp_scratch;
- isp_prt(isp, ISP_LOGDEBUG0,
- "Chan %d scanning fabric (GID_FT) via CT", chan);
+ isp_prt(isp, ISP_LOGDEBUG0, "Chan %d scanning fabric (GID_FT) via CT", chan);
if (!IS_24XX(isp)) {
return (1);
@@ -3488,10 +3493,8 @@ isp_scan_fabric(ispsoftc_t *isp, int chan)
int portidx, portlim, r;
sns_gid_ft_rsp_t *rs0, *rs1;
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d FC Scan Fabric", chan);
- if (fcp->isp_fwstate != FW_READY ||
- fcp->isp_loopstate < LOOP_LSCAN_DONE) {
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC Scan Fabric", chan);
+ if (fcp->isp_fwstate != FW_READY || fcp->isp_loopstate < LOOP_LSCAN_DONE) {
return (-1);
}
if (fcp->isp_loopstate > LOOP_SCANNING_FABRIC) {
@@ -3499,8 +3502,7 @@ isp_scan_fabric(ispsoftc_t *isp, int chan)
}
if (fcp->isp_topo != TOPO_FL_PORT && fcp->isp_topo != TOPO_F_PORT) {
fcp->isp_loopstate = LOOP_FSCAN_DONE;
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d FC Scan Fabric Done (no fabric)", chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC Scan Fabric Done (no fabric)", chan);
return (0);
}
@@ -3568,9 +3570,8 @@ isp_scan_fabric(ispsoftc_t *isp, int chan)
}
if (rs1->snscb_cthdr.ct_cmd_resp != LS_ACC) {
int level;
- if (rs1->snscb_cthdr.ct_reason == 9 &&
- rs1->snscb_cthdr.ct_explanation == 7) {
- level = ISP_LOGSANCFG|ISP_LOGDEBUG0;
+ if (rs1->snscb_cthdr.ct_reason == 9 && rs1->snscb_cthdr.ct_explanation == 7) {
+ level = ISP_LOG_SANCFG;
} else {
level = ISP_LOGWARN;
}
@@ -3614,7 +3615,7 @@ isp_scan_fabric(ispsoftc_t *isp, int chan)
"fabric too big for scratch area: increase ISP_FC_SCRLEN");
}
portlim = portidx + 1;
- isp_prt(isp, ISP_LOGSANCFG,
+ isp_prt(isp, ISP_LOG_SANCFG,
"Chan %d got %d ports back from name server", chan, portlim);
for (portidx = 0; portidx < portlim; portidx++) {
@@ -3639,9 +3640,7 @@ isp_scan_fabric(ispsoftc_t *isp, int chan)
rs1->snscb_ports[npidx].portid[0] = 0;
rs1->snscb_ports[npidx].portid[1] = 0;
rs1->snscb_ports[npidx].portid[2] = 0;
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d removing duplicate PortID 0x%06x"
- " entry from list", chan, portid);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d removing duplicate PortID 0x%06x entry from list", chan, portid);
}
}
@@ -3671,7 +3670,7 @@ isp_scan_fabric(ispsoftc_t *isp, int chan)
((rs1->snscb_ports[portidx].portid[2]));
if (portid == 0) {
- isp_prt(isp, ISP_LOGSANCFG,
+ isp_prt(isp, ISP_LOG_SANCFG,
"Chan %d skipping null PortID at idx %d",
chan, portidx);
continue;
@@ -3687,19 +3686,19 @@ isp_scan_fabric(ispsoftc_t *isp, int chan)
*/
if (ISP_CAP_MULTI_ID(isp)) {
if ((portid >> 8) == (fcp->isp_portid >> 8)) {
- isp_prt(isp, ISP_LOGSANCFG,
+ isp_prt(isp, ISP_LOG_SANCFG,
"Chan %d skip PortID 0x%06x",
chan, portid);
continue;
}
} else if (portid == fcp->isp_portid) {
- isp_prt(isp, ISP_LOGSANCFG,
+ isp_prt(isp, ISP_LOG_SANCFG,
"Chan %d skip ourselves on @ PortID 0x%06x",
chan, portid);
continue;
}
- isp_prt(isp, ISP_LOGSANCFG,
+ isp_prt(isp, ISP_LOG_SANCFG,
"Chan %d Checking Fabric Port 0x%06x", chan, portid);
/*
@@ -3711,8 +3710,7 @@ isp_scan_fabric(ispsoftc_t *isp, int chan)
for (dbidx = 0; dbidx < MAX_FC_TARG; dbidx++) {
lp = &fcp->portdb[dbidx];
- if (lp->state != FC_PORTDB_STATE_PROBATIONAL ||
- lp->target_mode) {
+ if (lp->state != FC_PORTDB_STATE_PROBATIONAL || lp->target_mode) {
continue;
}
if (lp->portid == portid) {
@@ -3754,9 +3752,7 @@ isp_scan_fabric(ispsoftc_t *isp, int chan)
if (r != 0) {
lp->new_portid = portid;
lp->state = FC_PORTDB_STATE_DEAD;
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d Fabric Port 0x%06x is dead",
- chan, portid);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Fabric Port 0x%06x is dead", chan, portid);
continue;
}
@@ -3773,7 +3769,7 @@ isp_scan_fabric(ispsoftc_t *isp, int chan)
pdb.portid != portid ||
wwpn != lp->port_wwn ||
wwnn != lp->node_wwn) {
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
+ isp_prt(isp, ISP_LOG_SANCFG,
fconf, chan, dbidx, pdb.handle, pdb.portid,
(uint32_t) (wwnn >> 32), (uint32_t) wwnn,
(uint32_t) (wwpn >> 32), (uint32_t) wwpn,
@@ -3824,7 +3820,7 @@ isp_scan_fabric(ispsoftc_t *isp, int chan)
handle_changed++;
}
- nr = (pdb.s3_role & SVC3_ROLE_MASK) >> SVC3_ROLE_SHIFT;
+ nr = pdb.prli_word3;
/*
* Check to see whether the portid and roles have
@@ -3839,17 +3835,12 @@ isp_scan_fabric(ispsoftc_t *isp, int chan)
*/
lp->new_portid = portid;
- lp->new_roles = nr;
- if (pdb.portid != lp->portid || nr != lp->roles ||
- handle_changed) {
- isp_prt(isp, ISP_LOGSANCFG,
- "Chan %d Fabric Port 0x%06x changed",
- chan, portid);
+ lp->new_prli_word3 = nr;
+ if (pdb.portid != lp->portid || nr != lp->prli_word3 || handle_changed) {
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Fabric Port 0x%06x changed", chan, portid);
lp->state = FC_PORTDB_STATE_CHANGED;
} else {
- isp_prt(isp, ISP_LOGSANCFG,
- "Chan %d Fabric Port 0x%06x "
- "Now Pending Valid", chan, portid);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Fabric Port 0x%06x Now Pending Valid", chan, portid);
lp->state = FC_PORTDB_STATE_PENDING_VALID;
}
continue;
@@ -3935,7 +3926,7 @@ isp_scan_fabric(ispsoftc_t *isp, int chan)
handle = pdb.handle;
MAKE_WWN_FROM_NODE_NAME(wwnn, pdb.nodename);
MAKE_WWN_FROM_NODE_NAME(wwpn, pdb.portname);
- nr = (pdb.s3_role & SVC3_ROLE_MASK) >> SVC3_ROLE_SHIFT;
+ nr = pdb.prli_word3;
/*
* And go through the database *one* more time to make sure
@@ -3949,8 +3940,7 @@ isp_scan_fabric(ispsoftc_t *isp, int chan)
if (fcp->portdb[dbidx].target_mode) {
continue;
}
- if (fcp->portdb[dbidx].node_wwn == wwnn &&
- fcp->portdb[dbidx].port_wwn == wwpn) {
+ if (fcp->portdb[dbidx].node_wwn == wwnn && fcp->portdb[dbidx].port_wwn == wwpn) {
break;
}
}
@@ -3961,11 +3951,9 @@ isp_scan_fabric(ispsoftc_t *isp, int chan)
lp->node_wwn = wwnn;
lp->port_wwn = wwpn;
lp->new_portid = portid;
- lp->new_roles = nr;
+ lp->new_prli_word3 = nr;
lp->state = FC_PORTDB_STATE_NEW;
- isp_prt(isp, ISP_LOGSANCFG,
- "Chan %d Fabric Port 0x%06x is a New Entry",
- chan, portid);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Fabric Port 0x%06x is a New Entry", chan, portid);
continue;
}
@@ -3991,16 +3979,12 @@ isp_scan_fabric(ispsoftc_t *isp, int chan)
lp = &fcp->portdb[dbidx];
lp->handle = handle;
lp->new_portid = portid;
- lp->new_roles = nr;
- if (lp->portid != portid || lp->roles != nr) {
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d Zombie Fabric Port 0x%06x Now Changed",
- chan, portid);
+ lp->new_prli_word3 = nr;
+ if (lp->portid != portid || lp->prli_word3 != nr) {
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Zombie Fabric Port 0x%06x Now Changed", chan, portid);
lp->state = FC_PORTDB_STATE_CHANGED;
} else {
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d Zombie Fabric Port 0x%06x "
- "Now Pending Valid", chan, portid);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Zombie Fabric Port 0x%06x Now Pending Valid", chan, portid);
lp->state = FC_PORTDB_STATE_PENDING_VALID;
}
}
@@ -4011,8 +3995,7 @@ isp_scan_fabric(ispsoftc_t *isp, int chan)
return (-1);
}
fcp->isp_loopstate = LOOP_FSCAN_DONE;
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d FC Scan Fabric Done", chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC Scan Fabric Done", chan);
return (0);
}
@@ -4261,17 +4244,13 @@ isp_register_fc4_type_24xx(ispsoftc_t *isp, int chan)
FC_SCRATCH_RELEASE(isp, chan);
if (ct->ct_cmd_resp == LS_RJT) {
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d Register FC4 Type rejected", chan);
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOG_WARN1, "Chan %d Register FC4 Type rejected", chan);
return (-1);
} else if (ct->ct_cmd_resp == LS_ACC) {
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0,
- "Chan %d Register FC4 Type accepted", chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Register FC4 Type accepted", chan);
return (0);
} else {
- isp_prt(isp, ISP_LOGWARN,
- "Chan %d Register FC4 Type: 0x%x",
- chan, ct->ct_cmd_resp);
+ isp_prt(isp, ISP_LOGWARN, "Chan %d Register FC4 Type: 0x%x", chan, ct->ct_cmd_resp);
return (-1);
}
}
@@ -4369,6 +4348,7 @@ isp_start(XS_T *xs)
fcparam *fcp = FCPARAM(isp, XS_CHANNEL(xs));
if ((fcp->role & ISP_ROLE_INITIATOR) == 0) {
+ isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d I am not an initiator", XS_CHANNEL(xs), target, XS_LUN(xs));
XS_SETERR(xs, HBA_SELTIMEOUT);
return (CMD_COMPLETE);
}
@@ -4381,6 +4361,7 @@ isp_start(XS_T *xs)
}
if (XS_TGT(xs) >= MAX_FC_TARG) {
+ isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d target too big", XS_CHANNEL(xs), target, XS_LUN(xs));
XS_SETERR(xs, HBA_SELTIMEOUT);
return (CMD_COMPLETE);
}
@@ -4392,9 +4373,11 @@ isp_start(XS_T *xs)
return (CMD_COMPLETE);
}
if (fcp->portdb[hdlidx].state == FC_PORTDB_STATE_ZOMBIE) {
+ isp_prt(isp, ISP_LOGDEBUG1, "%d.%d.%d target zombie", XS_CHANNEL(xs), target, XS_LUN(xs));
return (CMD_RQLATER);
}
if (fcp->portdb[hdlidx].state != FC_PORTDB_STATE_VALID) {
+ isp_prt(isp, ISP_LOGDEBUG1, "%d.%d.%d bad db port state 0x%x", XS_CHANNEL(xs), target, XS_LUN(xs), fcp->portdb[hdlidx].state);
XS_SETERR(xs, HBA_SELTIMEOUT);
return (CMD_COMPLETE);
}
@@ -4403,6 +4386,7 @@ isp_start(XS_T *xs)
} else {
sdparam *sdp = SDPARAM(isp, XS_CHANNEL(xs));
if ((sdp->role & ISP_ROLE_INITIATOR) == 0) {
+ isp_prt(isp, ISP_LOGDEBUG1, "%d.%d.%d I am not an initiator", XS_CHANNEL(xs), target, XS_LUN(xs));
XS_SETERR(xs, HBA_SELTIMEOUT);
return (CMD_COMPLETE);
}
@@ -4415,7 +4399,7 @@ isp_start(XS_T *xs)
qep = isp_getrqentry(isp);
if (qep == NULL) {
- isp_prt(isp, ISP_LOGDEBUG0, "Request Queue Overflow");
+ isp_prt(isp, ISP_LOG_WARN1, "Request Queue Overflow");
XS_SETERR(xs, HBA_BOTCH);
return (CMD_EAGAIN);
}
@@ -4449,6 +4433,14 @@ isp_start(XS_T *xs)
}
reqp->req_header.rqs_entry_count = 1;
+
+ /*
+ * Select and install Header Code.
+ * Note that it might be overridden before going out
+ * if we're on a 64 bit platform. The lower level
+ * code (isp_send_cmd) will select the appropriate
+ * 64 bit variant if it needs to.
+ */
if (IS_24XX(isp)) {
reqp->req_header.rqs_entry_type = RQSTYPE_T7RQS;
} else if (IS_FC(isp)) {
@@ -4461,6 +4453,9 @@ isp_start(XS_T *xs)
}
}
+ /*
+ * Set task attributes
+ */
if (IS_24XX(isp)) {
int ttype;
if (XS_TAG_P(xs)) {
@@ -4513,20 +4508,30 @@ isp_start(XS_T *xs)
tptr = &reqp->req_time;
/*
- * NB: we do not support long CDBs
+ * NB: we do not support long CDBs (yet)
*/
cdblen = XS_CDBLEN(xs);
if (IS_SCSI(isp)) {
+ if (cdblen > sizeof (reqp->req_cdb)) {
+ isp_prt(isp, ISP_LOGERR, "Command Length %u too long for this chip", cdblen);
+ XS_SETERR(xs, HBA_BOTCH);
+ return (CMD_COMPLETE);
+ }
reqp->req_target = target | (XS_CHANNEL(xs) << 7);
reqp->req_lun_trn = XS_LUN(xs);
- cdblen = ISP_MIN(cdblen, sizeof (reqp->req_cdb));
cdbp = reqp->req_cdb;
reqp->req_cdblen = cdblen;
} else if (IS_24XX(isp)) {
ispreqt7_t *t7 = (ispreqt7_t *)local;
fcportdb_t *lp;
+ if (cdblen > sizeof (t7->req_cdb)) {
+ isp_prt(isp, ISP_LOGERR, "Command Length %u too long for this chip", cdblen);
+ XS_SETERR(xs, HBA_BOTCH);
+ return (CMD_COMPLETE);
+ }
+
lp = &FCPARAM(isp, XS_CHANNEL(xs))->portdb[hdlidx];
t7->req_nphdl = target;
t7->req_tidlo = lp->portid;
@@ -4537,28 +4542,47 @@ isp_start(XS_T *xs)
t7->req_lun[0] |= 0x40;
}
t7->req_lun[1] = XS_LUN(xs);
- FCP_NEXT_CRN(isp, xs, t7->req_crn, XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
+ if (FCPARAM(isp, XS_CHANNEL(xs))->fctape_enabled && (lp->prli_word3 & PRLI_WD3_RETRY)) {
+ if (FCP_NEXT_CRN(isp, &t7->req_crn, xs)) {
+ isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d cannot generate next CRN", XS_CHANNEL(xs), target, XS_LUN(xs));
+ XS_SETERR(xs, HBA_BOTCH);
+ return (CMD_EAGAIN);
+ }
+ }
tptr = &t7->req_time;
cdbp = t7->req_cdb;
- cdblen = ISP_MIN(cdblen, sizeof (t7->req_cdb));
- } else if (ISP_CAP_2KLOGIN(isp)) {
- ispreqt2e_t *t2e = (ispreqt2e_t *)local;
- t2e->req_target = target;
- t2e->req_scclun = XS_LUN(xs);
- cdbp = t2e->req_cdb;
- cdblen = ISP_MIN(cdblen, sizeof (t2e->req_cdb));
- } else if (ISP_CAP_SCCFW(isp)) {
- ispreqt2_t *t2 = (ispreqt2_t *)local;
- t2->req_target = target;
- t2->req_scclun = XS_LUN(xs);
- cdbp = t2->req_cdb;
- cdblen = ISP_MIN(cdblen, sizeof (t2->req_cdb));
} else {
ispreqt2_t *t2 = (ispreqt2_t *)local;
- t2->req_target = target;
- t2->req_lun_trn = XS_LUN(xs);
- cdbp = t2->req_cdb;
- cdblen = ISP_MIN(cdblen, sizeof (t2->req_cdb));
+ fcportdb_t *lp;
+
+ if (cdblen > sizeof t2->req_cdb) {
+ isp_prt(isp, ISP_LOGERR, "Command Length %u too long for this chip", cdblen);
+ XS_SETERR(xs, HBA_BOTCH);
+ return (CMD_COMPLETE);
+ }
+ lp = &FCPARAM(isp, XS_CHANNEL(xs))->portdb[hdlidx];
+ if (FCPARAM(isp, XS_CHANNEL(xs))->fctape_enabled && (lp->prli_word3 & PRLI_WD3_RETRY)) {
+ if (FCP_NEXT_CRN(isp, &t2->req_crn, xs)) {
+ isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d cannot generate next CRN", XS_CHANNEL(xs), target, XS_LUN(xs));
+ XS_SETERR(xs, HBA_BOTCH);
+ return (CMD_EAGAIN);
+ }
+ }
+ if (ISP_CAP_2KLOGIN(isp)) {
+ ispreqt2e_t *t2e = (ispreqt2e_t *)local;
+ t2e->req_target = target;
+ t2e->req_scclun = XS_LUN(xs);
+ cdbp = t2e->req_cdb;
+ } else if (ISP_CAP_SCCFW(isp)) {
+ ispreqt2_t *t2 = (ispreqt2_t *)local;
+ t2->req_target = target;
+ t2->req_scclun = XS_LUN(xs);
+ cdbp = t2->req_cdb;
+ } else {
+ t2->req_target = target;
+ t2->req_lun_trn = XS_LUN(xs);
+ cdbp = t2->req_cdb;
+ }
}
ISP_MEMCPY(cdbp, XS_CDBP(xs), cdblen);
@@ -4571,7 +4595,7 @@ isp_start(XS_T *xs)
}
if (isp_allocate_xs(isp, xs, &handle)) {
- isp_prt(isp, ISP_LOGDEBUG0, "out of xflist pointers");
+ isp_prt(isp, ISP_LOG_WARN1, "out of xflist pointers");
XS_SETERR(xs, HBA_BOTCH);
return (CMD_EAGAIN);
}
@@ -4618,7 +4642,7 @@ isp_control(ispsoftc_t *isp, ispctl_t ctl, ...)
* Issue a bus reset.
*/
if (IS_24XX(isp)) {
- isp_prt(isp, ISP_LOGWARN, "RESET BUS NOT IMPLEMENTED");
+ isp_prt(isp, ISP_LOGERR, "BUS RESET NOT IMPLEMENTED");
break;
} else if (IS_FC(isp)) {
mbs.param[1] = 10;
@@ -4639,8 +4663,7 @@ isp_control(ispsoftc_t *isp, ispctl_t ctl, ...)
if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
break;
}
- isp_prt(isp, ISP_LOGINFO,
- "driver initiated bus reset of bus %d", chan);
+ isp_prt(isp, ISP_LOGINFO, "driver initiated bus reset of bus %d", chan);
return (0);
case ISPCTL_RESET_DEV:
@@ -4658,17 +4681,12 @@ isp_control(ispsoftc_t *isp, ispctl_t ctl, ...)
hdlidx = fcp->isp_dev_map[tgt] - 1;
if (hdlidx < 0 || hdlidx >= MAX_FC_TARG) {
- isp_prt(isp, ISP_LOGWARN,
- "Chan %d bad handle %d trying to reset"
- "target %d", chan, hdlidx, tgt);
+ isp_prt(isp, ISP_LOGWARN, "Chan %d bad handle %d trying to reset target %d", chan, hdlidx, tgt);
break;
}
lp = &fcp->portdb[hdlidx];
if (lp->state != FC_PORTDB_STATE_VALID) {
- isp_prt(isp, ISP_LOGWARN,
- "Chan %d handle %d for abort of target %d "
- "no longer valid", chan,
- hdlidx, tgt);
+ isp_prt(isp, ISP_LOGWARN, "Chan %d handle %d for abort of target %d no longer valid", chan, hdlidx, tgt);
break;
}
@@ -4703,18 +4721,14 @@ isp_control(ispsoftc_t *isp, ispctl_t ctl, ...)
FC_SCRATCH_RELEASE(isp, chan);
break;
}
- MEMORYBARRIER(isp, SYNC_SFORCPU, QENTRY_LEN,
- QENTRY_LEN, chan);
+ MEMORYBARRIER(isp, SYNC_SFORCPU, QENTRY_LEN, QENTRY_LEN, chan);
sp = (isp24xx_statusreq_t *) local;
- isp_get_24xx_response(isp,
- &((isp24xx_statusreq_t *)fcp->isp_scratch)[1], sp);
+ isp_get_24xx_response(isp, &((isp24xx_statusreq_t *)fcp->isp_scratch)[1], sp);
FC_SCRATCH_RELEASE(isp, chan);
if (sp->req_completion_status == 0) {
return (0);
}
- isp_prt(isp, ISP_LOGWARN,
- "Chan %d reset of target %d returned 0x%x",
- chan, tgt, sp->req_completion_status);
+ isp_prt(isp, ISP_LOGWARN, "Chan %d reset of target %d returned 0x%x", chan, tgt, sp->req_completion_status);
break;
} else if (IS_FC(isp)) {
if (ISP_CAP_2KLOGIN(isp)) {
@@ -4732,8 +4746,7 @@ isp_control(ispsoftc_t *isp, ispctl_t ctl, ...)
if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
break;
}
- isp_prt(isp, ISP_LOGINFO,
- "Target %d on Bus %d Reset Succeeded", tgt, chan);
+ isp_prt(isp, ISP_LOGINFO, "Target %d on Bus %d Reset Succeeded", tgt, chan);
ISP_SET_SENDMARKER(isp, chan, 1);
return (0);
@@ -4747,8 +4760,7 @@ isp_control(ispsoftc_t *isp, ispctl_t ctl, ...)
handle = isp_find_handle(isp, xs);
if (handle == 0) {
- isp_prt(isp, ISP_LOGWARN,
- "cannot find handle for command to abort");
+ isp_prt(isp, ISP_LOGWARN, "cannot find handle for command to abort");
break;
}
if (IS_24XX(isp)) {
@@ -4760,21 +4772,15 @@ isp_control(ispsoftc_t *isp, ispctl_t ctl, ...)
fcp = FCPARAM(isp, chan);
hdlidx = fcp->isp_dev_map[tgt] - 1;
if (hdlidx < 0 || hdlidx >= MAX_FC_TARG) {
- isp_prt(isp, ISP_LOGWARN,
- "Chan %d bad handle %d trying to abort"
- "target %d", chan, hdlidx, tgt);
+ isp_prt(isp, ISP_LOGWARN, "Chan %d bad handle %d trying to abort target %d", chan, hdlidx, tgt);
break;
}
lp = &fcp->portdb[hdlidx];
if (lp->state != FC_PORTDB_STATE_VALID) {
- isp_prt(isp, ISP_LOGWARN,
- "Chan %d handle %d for abort of target %d "
- "no longer valid", chan, hdlidx, tgt);
+ isp_prt(isp, ISP_LOGWARN, "Chan %d handle %d for abort of target %d no longer valid", chan, hdlidx, tgt);
break;
}
- isp_prt(isp, ISP_LOGALL,
- "Chan %d Abort Cmd for N-Port 0x%04x @ Port "
- "0x%06x %p", chan, lp->handle, lp->portid, xs);
+ isp_prt(isp, ISP_LOGALL, "Chan %d Abort Cmd for N-Port 0x%04x @ Port 0x%06x", chan, lp->handle, lp->portid);
ISP_MEMZERO(ab, QENTRY_LEN);
ab->abrt_header.rqs_entry_type = RQSTYPE_ABORT_IO;
ab->abrt_header.rqs_entry_count = 1;
@@ -4797,8 +4803,7 @@ isp_control(ispsoftc_t *isp, ispctl_t ctl, ...)
break;
}
isp_put_24xx_abrt(isp, ab, fcp->isp_scratch);
- ab2 = (isp24xx_abrt_t *)
- &((uint8_t *)fcp->isp_scratch)[QENTRY_LEN];
+ ab2 = (isp24xx_abrt_t *) &((uint8_t *)fcp->isp_scratch)[QENTRY_LEN];
ab2->abrt_nphdl = 0xdeaf;
MEMORYBARRIER(isp, SYNC_SFORDEV, 0, 2 * QENTRY_LEN, chan);
isp_mboxcmd(isp, &mbs);
@@ -4806,16 +4811,13 @@ isp_control(ispsoftc_t *isp, ispctl_t ctl, ...)
FC_SCRATCH_RELEASE(isp, chan);
break;
}
- MEMORYBARRIER(isp, SYNC_SFORCPU, QENTRY_LEN,
- QENTRY_LEN, chan);
+ MEMORYBARRIER(isp, SYNC_SFORCPU, QENTRY_LEN, QENTRY_LEN, chan);
isp_get_24xx_abrt(isp, ab2, ab);
FC_SCRATCH_RELEASE(isp, chan);
if (ab->abrt_nphdl == ISP24XX_ABRT_OKAY) {
return (0);
}
- isp_prt(isp, ISP_LOGWARN,
- "Chan %d handle %d abort returned 0x%x", chan,
- hdlidx, ab->abrt_nphdl);
+ isp_prt(isp, ISP_LOGWARN, "Chan %d handle %d abort returned 0x%x", chan, hdlidx, ab->abrt_nphdl);
break;
} else if (IS_FC(isp)) {
if (ISP_CAP_SCCFW(isp)) {
@@ -5003,7 +5005,8 @@ isp_intr(ispsoftc_t *isp, uint32_t isr, uint16_t sema, uint16_t mbox)
{
XS_T *complist[MAX_REQUESTQ_COMPLETIONS], *xs;
uint32_t iptr, optr, junk;
- int i, nlooked = 0, ndone = 0;
+ int i, nlooked = 0, ndone = 0, continuations_expected = 0;
+ int etype, last_etype = 0;
again:
optr = isp->isp_residx;
@@ -5179,10 +5182,10 @@ again:
uint8_t qe[QENTRY_LEN];
ispstatusreq_t *sp = (ispstatusreq_t *) qe;
isphdr_t *hp;
- int buddaboom, etype, scsi_status, completion_status;
+ int buddaboom, scsi_status, completion_status;
int req_status_flags, req_state_flags;
uint8_t *snsp, *resp;
- uint32_t rlen, slen;
+ uint32_t rlen, slen, totslen;
long resid;
uint16_t oop;
@@ -5234,9 +5237,22 @@ again:
isp->isp_fpcchiwater = rio->req_header.rqs_seqno;
}
ISP_MEMZERO(hp, QENTRY_LEN); /* PERF */
+ last_etype = etype;
continue;
} else if (etype == RQSTYPE_RIO2) {
- isp_prt(isp, ISP_LOGERR, "dropping RIO2 response\n");
+ isp_prt(isp, ISP_LOGERR, "dropping RIO2 response");
+ ISP_MEMZERO(hp, QENTRY_LEN); /* PERF */
+ last_etype = etype;
+ continue;
+ } else if (etype == RQSTYPE_STATUS_CONT) {
+ isp_get_cont_response(isp, (ispstatus_cont_t *) hp, (ispstatus_cont_t *) sp);
+ if (last_etype == RQSTYPE_RESPONSE && continuations_expected && ndone > 0 && (xs = complist[ndone-1]) != NULL) {
+ ispstatus_cont_t *scp = (ispstatus_cont_t *) sp;
+ XS_SENSE_APPEND(xs, scp->req_sense_data, sizeof (scp->req_sense_data));
+ isp_prt(isp, ISP_LOGDEBUG0|ISP_LOG_CWARN, "%d more Status Continuations expected", --continuations_expected);
+ } else {
+ isp_prt(isp, ISP_LOG_WARN1, "Ignored Continuation Response");
+ }
ISP_MEMZERO(hp, QENTRY_LEN); /* PERF */
continue;
} else {
@@ -5256,12 +5272,12 @@ again:
* optr to be one more than the updated amount.
*/
while (tsto != oop) {
- optr = ISP_NXT_QENTRY(tsto,
- RESULT_QUEUE_LEN(isp));
+ optr = ISP_NXT_QENTRY(tsto, RESULT_QUEUE_LEN(isp));
}
if (r > 0) {
ISP_WRITE(isp, isp->isp_respoutrp, optr);
ISP_MEMZERO(hp, QENTRY_LEN); /* PERF */
+ last_etype = etype;
continue;
}
@@ -5277,11 +5293,10 @@ again:
* not, something bad has happened.
*/
if (etype != RQSTYPE_REQUEST) {
- isp_prt(isp, ISP_LOGERR, notresp,
- etype, oop, optr, nlooked);
- isp_print_bytes(isp,
- "Request Queue Entry", QENTRY_LEN, sp);
+ isp_prt(isp, ISP_LOGERR, notresp, etype, oop, optr, nlooked);
+ isp_print_bytes(isp, "Request Queue Entry", QENTRY_LEN, sp);
ISP_MEMZERO(hp, QENTRY_LEN); /* PERF */
+ last_etype = etype;
continue;
}
buddaboom = 1;
@@ -5296,10 +5311,11 @@ again:
if (sp->req_header.rqs_flags & RQSFLAG_CONTINUATION) {
isp_print_bytes(isp, "unexpected continuation segment", QENTRY_LEN, sp);
ISP_WRITE(isp, isp->isp_respoutrp, optr);
+ last_etype = etype;
continue;
}
if (sp->req_header.rqs_flags & RQSFLAG_FULL) {
- isp_prt(isp, ISP_LOGDEBUG0, "internal queues full");
+ isp_prt(isp, ISP_LOG_WARN1, "internal queues full");
/*
* We'll synthesize a QUEUE FULL message below.
*/
@@ -5319,6 +5335,7 @@ again:
if (sp->req_header.rqs_flags & RQSFLAG_BADORDER) {
isp_print_bytes(isp, "invalid IOCB ordering", QENTRY_LEN, sp);
ISP_WRITE(isp, isp->isp_respoutrp, optr);
+ last_etype = etype;
continue;
}
}
@@ -5327,6 +5344,7 @@ again:
isp_prt(isp, ISP_LOGERR, "bad request handle 0x%x (iocb type 0x%x)", sp->req_handle, etype);
ISP_MEMZERO(hp, QENTRY_LEN); /* PERF */
ISP_WRITE(isp, isp->isp_respoutrp, optr);
+ last_etype = etype;
continue;
}
xs = isp_find_xs(isp, sp->req_handle);
@@ -5343,20 +5361,23 @@ again:
}
ISP_MEMZERO(hp, QENTRY_LEN); /* PERF */
ISP_WRITE(isp, isp->isp_respoutrp, optr);
+ last_etype = etype;
continue;
}
if (req_status_flags & RQSTF_BUS_RESET) {
+ isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d bus was reset", XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
XS_SETERR(xs, HBA_BUSRESET);
ISP_SET_SENDMARKER(isp, XS_CHANNEL(xs), 1);
}
if (buddaboom) {
+ isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d buddaboom", XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
XS_SETERR(xs, HBA_BOTCH);
}
resp = NULL;
rlen = 0;
snsp = NULL;
- slen = 0;
+ totslen = slen = 0;
if (IS_24XX(isp) && (scsi_status & (RQCS_RV|RQCS_SV)) != 0) {
resp = ((isp24xx_statusreq_t *)sp)->req_rsp_sense;
rlen = ((isp24xx_statusreq_t *)sp)->req_response_len;
@@ -5374,14 +5395,23 @@ again:
if (IS_24XX(isp)) {
snsp = ((isp24xx_statusreq_t *)sp)->req_rsp_sense;
snsp += rlen;
- slen = ((isp24xx_statusreq_t *)sp)->req_sense_len;
+ totslen = ((isp24xx_statusreq_t *)sp)->req_sense_len;
+ slen = (sizeof (((isp24xx_statusreq_t *)sp)->req_rsp_sense)) - rlen;
+ if (totslen < slen)
+ slen = totslen;
} else {
snsp = sp->req_sense_data;
- slen = sp->req_sense_len;
+ totslen = sp->req_sense_len;
+ slen = sizeof (sp->req_sense_data);
+ if (totslen < slen)
+ slen = totslen;
}
} else if (IS_SCSI(isp) && (req_state_flags & RQSF_GOT_SENSE)) {
snsp = sp->req_sense_data;
- slen = sp->req_sense_len;
+ totslen = sp->req_sense_len;
+ slen = sizeof (sp->req_sense_data);
+ if (totslen < slen)
+ slen = totslen;
}
if (req_state_flags & RQSF_GOT_STATUS) {
*XS_STSP(xs) = scsi_status & 0xff;
@@ -5442,7 +5472,22 @@ again:
}
}
if (snsp && slen) {
- XS_SAVE_SENSE(xs, snsp, slen);
+ if (totslen > slen) {
+ continuations_expected += ((totslen - slen + QENTRY_LEN - 5) / (QENTRY_LEN - 4));
+ if (ndone > (MAX_REQUESTQ_COMPLETIONS - continuations_expected - 1)) {
+ /* we'll lose some stats, but that's a small price to pay */
+ for (i = 0; i < ndone; i++) {
+ if (complist[i]) {
+ isp->isp_rsltccmplt++;
+ isp_done(complist[i]);
+ }
+ }
+ ndone = 0;
+ }
+ isp_prt(isp, ISP_LOGDEBUG0|ISP_LOG_CWARN, "Expecting %d more Status Continuations for total sense length of %u",
+ continuations_expected, totslen);
+ }
+ XS_SAVE_SENSE(xs, snsp, totslen, slen);
} else if ((req_status_flags & RQSF_GOT_STATUS) && (scsi_status & 0xff) == SCSI_CHECK && IS_FC(isp)) {
isp_prt(isp, ISP_LOGWARN, "CHECK CONDITION w/o sense data for CDB=0x%x", XS_CDBP(xs)[0] & 0xff);
isp_print_bytes(isp, "CC with no Sense", QENTRY_LEN, qe);
@@ -5461,6 +5506,7 @@ again:
*XS_STSP(xs) = SCSI_QFULL;
XS_SETERR(xs, HBA_NOERROR);
} else if (XS_NOERR(xs)) {
+ isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d badness at %s:%u", XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs), __func__, __LINE__);
XS_SETERR(xs, HBA_BOTCH);
}
XS_SET_RESID(xs, XS_XFRLEN(xs));
@@ -5482,15 +5528,12 @@ again:
}
isp_destroy_handle(isp, sp->req_handle);
- if (((isp->isp_dblev & (ISP_LOGDEBUG1|ISP_LOGDEBUG2|ISP_LOGDEBUG3))) ||
- ((isp->isp_dblev & (ISP_LOGDEBUG0|ISP_LOG_CWARN) && ((!XS_NOERR(xs)) || (*XS_STSP(xs) != SCSI_GOOD))))) {
- isp_prt_endcmd(isp, xs);
- }
if (isp->isp_nactive > 0) {
isp->isp_nactive--;
}
complist[ndone++] = xs; /* defer completion call until later */
ISP_MEMZERO(hp, QENTRY_LEN); /* PERF */
+ last_etype = etype;
if (ndone == MAX_REQUESTQ_COMPLETIONS) {
break;
}
@@ -5525,6 +5568,10 @@ out:
for (i = 0; i < ndone; i++) {
xs = complist[i];
if (xs) {
+ if (((isp->isp_dblev & (ISP_LOGDEBUG1|ISP_LOGDEBUG2|ISP_LOGDEBUG3))) ||
+ ((isp->isp_dblev & (ISP_LOGDEBUG0|ISP_LOG_CWARN) && ((!XS_NOERR(xs)) || (*XS_STSP(xs) != SCSI_GOOD))))) {
+ isp_prt_endcmd(isp, xs);
+ }
isp->isp_rsltccmplt++;
isp_done(xs);
}
@@ -5547,8 +5594,8 @@ isp_prt_endcmd(ispsoftc_t *isp, XS_T *xs)
ISP_SNPRINTF(cdbstr, sizeof (cdbstr), "%s0x%02x ", cdbstr, XS_CDBP(xs)[i]);
}
if (XS_SENSE_VALID(xs)) {
- isp_xs_prt(isp, xs, ISP_LOGALL, "FIN dl%d resid %ld CDB=%s KEY/ASC/ASCQ=0x%02x/0x%02x/0x%02x",
- XS_XFRLEN(xs), (long) XS_GET_RESID(xs), cdbstr, XS_SNSKEY(xs), XS_SNSASC(xs), XS_SNSASCQ(xs));
+ isp_xs_prt(isp, xs, ISP_LOGALL, "FIN dl%d resid %ld CDB=%s SenseLength=%u/%u KEY/ASC/ASCQ=0x%02x/0x%02x/0x%02x",
+ XS_XFRLEN(xs), (long) XS_GET_RESID(xs), cdbstr, XS_CUR_SNSLEN(xs), XS_TOT_SNSLEN(xs), XS_SNSKEY(xs), XS_SNSASC(xs), XS_SNSASCQ(xs));
} else {
isp_xs_prt(isp, xs, ISP_LOGALL, "FIN dl%d resid %ld CDB=%s STS 0x%x XS_ERR=0x%x", XS_XFRLEN(xs), (long) XS_GET_RESID(xs), cdbstr, *XS_STSP(xs), XS_ERR(xs));
}
@@ -5876,6 +5923,7 @@ isp_parse_async_fc(ispsoftc_t *isp, uint16_t mbox)
continue;
}
j++;
+ isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d bus reset set at %s:%u", XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs), __func__, __LINE__);
XS_SETERR(xs, HBA_BUSRESET);
}
if (j) {
@@ -6102,10 +6150,10 @@ isp_handle_other_response(ispsoftc_t *isp, int type, isphdr_t *hp, uint32_t *opt
{
switch (type) {
case RQSTYPE_STATUS_CONT:
- isp_prt(isp, ISP_LOGDEBUG0, "Ignored Continuation Response");
+ isp_prt(isp, ISP_LOG_WARN1, "Ignored Continuation Response");
return (1);
case RQSTYPE_MARKER:
- isp_prt(isp, ISP_LOGDEBUG0, "Marker Response");
+ isp_prt(isp, ISP_LOG_WARN1, "Marker Response");
return (1);
case RQSTYPE_ATIO:
case RQSTYPE_CTIO:
@@ -6170,7 +6218,7 @@ isp_parse_status(ispsoftc_t *isp, ispstatusreq_t *sp, XS_T *xs, long *rp)
case RQCS_INCOMPLETE:
if ((sp->req_state_flags & RQSF_GOT_TARGET) == 0) {
- isp_xs_prt(isp, xs, ISP_LOGDEBUG1, "Selection Timeout");
+ isp_xs_prt(isp, xs, ISP_LOG_WARN1, "Selection Timeout @ %s:%d", __func__, __LINE__);
if (XS_NOERR(xs)) {
XS_SETERR(xs, HBA_SELTIMEOUT);
*rp = XS_XFRLEN(xs);
@@ -6366,7 +6414,7 @@ isp_parse_status(ispsoftc_t *isp, ispstatusreq_t *sp, XS_T *xs, long *rp)
break;
case RQCS_QUEUE_FULL:
- isp_xs_prt(isp, xs, ISP_LOGDEBUG0, "internal queues full status 0x%x", *XS_STSP(xs));
+ isp_xs_prt(isp, xs, ISP_LOG_WARN1, "internal queues full status 0x%x", *XS_STSP(xs));
/*
* If QFULL or some other status byte is set, then this
@@ -6374,17 +6422,14 @@ isp_parse_status(ispsoftc_t *isp, ispstatusreq_t *sp, XS_T *xs, long *rp)
*
* Unfortunately, some QLogic f/w writers have, in
* some cases, ommitted to *set* status to QFULL.
- *
-
+ */
+#if 0
if (*XS_STSP(xs) != SCSI_GOOD && XS_NOERR(xs)) {
XS_SETERR(xs, HBA_NOERROR);
return;
}
- *
- *
- */
-
+#endif
*XS_STSP(xs) = SCSI_QFULL;
XS_SETERR(xs, HBA_NOERROR);
return;
@@ -6446,8 +6491,7 @@ isp_parse_status(ispsoftc_t *isp, ispstatusreq_t *sp, XS_T *xs, long *rp)
reason = "logout";
}
- isp_prt(isp, ISP_LOGINFO, "port %s for target %d",
- reason, XS_TGT(xs));
+ isp_prt(isp, ISP_LOGINFO, "port %s for target %d", reason, XS_TGT(xs));
/*
* If we're on a local loop, force a LIP (which is overkill)
@@ -6469,24 +6513,21 @@ isp_parse_status(ispsoftc_t *isp, ispstatusreq_t *sp, XS_T *xs, long *rp)
return;
}
case RQCS_PORT_CHANGED:
- isp_prt(isp, ISP_LOGWARN,
- "port changed for target %d", XS_TGT(xs));
+ isp_prt(isp, ISP_LOGWARN, "port changed for target %d", XS_TGT(xs));
if (XS_NOERR(xs)) {
XS_SETERR(xs, HBA_SELTIMEOUT);
}
return;
case RQCS_PORT_BUSY:
- isp_prt(isp, ISP_LOGWARN,
- "port busy for target %d", XS_TGT(xs));
+ isp_prt(isp, ISP_LOGWARN, "port busy for target %d", XS_TGT(xs));
if (XS_NOERR(xs)) {
XS_SETERR(xs, HBA_TGTBSY);
}
return;
default:
- isp_prt(isp, ISP_LOGERR, "Unknown Completion Status 0x%x",
- sp->req_completion_status);
+ isp_prt(isp, ISP_LOGERR, "Unknown Completion Status 0x%x", sp->req_completion_status);
break;
}
if (XS_NOERR(xs)) {
@@ -6547,9 +6588,7 @@ isp_parse_status_24xx(ispsoftc_t *isp, isp24xx_statusreq_t *sp, XS_T *xs, long *
return;
case RQCS_24XX_DRE: /* data reassembly error */
- isp_prt(isp, ISP_LOGERR,
- "Chan %d data reassembly error for target %d",
- chan, XS_TGT(xs));
+ isp_prt(isp, ISP_LOGERR, "Chan %d data reassembly error for target %d", chan, XS_TGT(xs));
if (XS_NOERR(xs)) {
XS_SETERR(xs, HBA_ABORTED);
}
@@ -6557,8 +6596,7 @@ isp_parse_status_24xx(ispsoftc_t *isp, isp24xx_statusreq_t *sp, XS_T *xs, long *
return;
case RQCS_24XX_TABORT: /* aborted by target */
- isp_prt(isp, ISP_LOGERR, "Chan %d target %d sent ABTS",
- chan, XS_TGT(xs));
+ isp_prt(isp, ISP_LOGERR, "Chan %d target %d sent ABTS", chan, XS_TGT(xs));
if (XS_NOERR(xs)) {
XS_SETERR(xs, HBA_ABORTED);
}
@@ -6580,7 +6618,7 @@ isp_parse_status_24xx(ispsoftc_t *isp, isp24xx_statusreq_t *sp, XS_T *xs, long *
return;
}
XS_SET_RESID(xs, sp->req_resid);
- isp_xs_prt(isp, xs, ISP_LOGDEBUG0, "Data Underrun (%d) for command 0x%x", sp->req_resid, XS_CDBP(xs)[0] & 0xff);
+ isp_xs_prt(isp, xs, ISP_LOG_WARN1, "Data Underrun (%d) for command 0x%x", sp->req_resid, XS_CDBP(xs)[0] & 0xff);
if (XS_NOERR(xs)) {
XS_SETERR(xs, HBA_NOERROR);
}
@@ -6616,8 +6654,7 @@ isp_parse_status_24xx(ispsoftc_t *isp, isp24xx_statusreq_t *sp, XS_T *xs, long *
return;
}
case RQCS_PORT_CHANGED:
- isp_prt(isp, ISP_LOGWARN,
- "port changed for target %d chan %d", XS_TGT(xs), chan);
+ isp_prt(isp, ISP_LOGWARN, "port changed for target %d chan %d", XS_TGT(xs), chan);
if (XS_NOERR(xs)) {
XS_SETERR(xs, HBA_SELTIMEOUT);
}
@@ -6625,9 +6662,7 @@ isp_parse_status_24xx(ispsoftc_t *isp, isp24xx_statusreq_t *sp, XS_T *xs, long *
case RQCS_24XX_ENOMEM: /* f/w resource unavailable */
- isp_prt(isp, ISP_LOGWARN,
- "f/w resource unavailable for target %d chan %d",
- XS_TGT(xs), chan);
+ isp_prt(isp, ISP_LOGWARN, "f/w resource unavailable for target %d chan %d", XS_TGT(xs), chan);
if (XS_NOERR(xs)) {
*XS_STSP(xs) = SCSI_BUSY;
XS_SETERR(xs, HBA_TGTBSY);
@@ -6635,9 +6670,7 @@ isp_parse_status_24xx(ispsoftc_t *isp, isp24xx_statusreq_t *sp, XS_T *xs, long *
return;
case RQCS_24XX_TMO: /* task management overrun */
- isp_prt(isp, ISP_LOGWARN,
- "command for target %d overlapped task management for "
- "chan %d", XS_TGT(xs), chan);
+ isp_prt(isp, ISP_LOGWARN, "command for target %d overlapped task management for chan %d", XS_TGT(xs), chan);
if (XS_NOERR(xs)) {
*XS_STSP(xs) = SCSI_BUSY;
XS_SETERR(xs, HBA_TGTBSY);
@@ -6645,9 +6678,7 @@ isp_parse_status_24xx(ispsoftc_t *isp, isp24xx_statusreq_t *sp, XS_T *xs, long *
return;
default:
- isp_prt(isp, ISP_LOGERR,
- "Unknown Completion Status 0x%x on chan %d",
- sp->req_completion_status, chan);
+ isp_prt(isp, ISP_LOGERR, "Unknown Completion Status 0x%x on chan %d", sp->req_completion_status, chan);
break;
}
if (XS_NOERR(xs)) {
@@ -6991,7 +7022,7 @@ static const uint32_t mbpfc[] = {
ISP_FC_OPMAP(0x03, 0x07), /* 0x05: MBOX_READ_RAM_WORD */
ISP_FC_OPMAP_FULL(0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff), /* 0x06: MBOX_MAILBOX_REG_TEST */
ISP_FC_OPMAP(0x07, 0x07), /* 0x07: MBOX_VERIFY_CHECKSUM */
- ISP_FC_OPMAP_FULL(0x0, 0x0, 0x0, 0x01, 0x0, 0x3, 0x80, 0x4f), /* 0x08: MBOX_ABOUT_FIRMWARE */
+ ISP_FC_OPMAP_FULL(0x0, 0x0, 0x0, 0x01, 0x0, 0x3, 0x80, 0x7f), /* 0x08: MBOX_ABOUT_FIRMWARE */
ISP_FC_OPMAP(0xdf, 0x01), /* 0x09: MBOX_LOAD_RISC_RAM_2100 */
ISP_FC_OPMAP(0xdf, 0x01), /* 0x0a: DUMP RAM */
ISP_FC_OPMAP_HALF(0x1, 0xff, 0x0, 0x01), /* 0x0b: MBOX_LOAD_RISC_RAM */
diff --git a/sys/dev/isp/isp_freebsd.c b/sys/dev/isp/isp_freebsd.c
index 6aea120..34a49fa 100644
--- a/sys/dev/isp/isp_freebsd.c
+++ b/sys/dev/isp/isp_freebsd.c
@@ -55,9 +55,6 @@ int isp_change_is_bad = 0; /* "changed" devices are bad */
int isp_quickboot_time = 7; /* don't wait more than N secs for loop up */
int isp_gone_device_time = 30; /* grace time before reporting device lost */
int isp_autoconfig = 1; /* automatically attach/detach devices */
-static const char *roles[4] = {
- "(none)", "Target", "Initiator", "Target/Initiator"
-};
static const char prom3[] = "Chan %d PortID 0x%06x Departed from Target %u because of %s";
static const char rqo[] = "%s: Request Queue Overflow\n";
@@ -120,7 +117,10 @@ isp_attach_chan(ispsoftc_t *isp, struct cam_devq *devq, int chan)
csa.event_enable = AC_LOST_DEVICE;
csa.callback = isp_cam_async;
csa.callback_arg = sim;
+
+ ISP_LOCK(isp);
xpt_action((union ccb *)&csa);
+ ISP_UNLOCK(isp);
if (IS_SCSI(isp)) {
struct isp_spi *spi = ISP_SPI_PC(isp, chan);
@@ -154,15 +154,14 @@ isp_attach_chan(ispsoftc_t *isp, struct cam_devq *devq, int chan)
if (fcp->role & ISP_ROLE_INITIATOR) {
isp_freeze_loopdown(isp, chan, "isp_attach");
callout_reset(&fc->ldt, isp_quickboot_time * hz, isp_ldt, fc);
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Starting Initial Loop Down Timer @ %lu", (unsigned long) time_uptime);
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "Starting Initial Loop Down Timer @ %lu", (unsigned long) time_uptime);
}
ISP_UNLOCK(isp);
if (THREAD_CREATE(isp_kthread, fc, &fc->kproc, 0, 0, "%s: fc_thrd%d", device_get_nameunit(isp->isp_osinfo.dev), chan)) {
xpt_free_path(fc->path);
ISP_LOCK(isp);
- if (callout_active(&fc->ldt)) {
+ if (callout_active(&fc->ldt))
callout_stop(&fc->ldt);
- }
xpt_bus_deregister(cam_sim_path(fc->sim));
ISP_UNLOCK(isp);
cam_sim_free(fc->sim, FALSE);
@@ -182,6 +181,9 @@ isp_attach_chan(ispsoftc_t *isp, struct cam_devq *devq, int chan)
SYSCTL_ADD_QUAD(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, "wwpn", CTLFLAG_RD, &FCPARAM(isp, 0)->isp_wwpn, "World Wide Port Name");
SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, "loop_down_limit", CTLFLAG_RW, &ISP_FC_PC(isp, 0)->loop_down_limit, 0, "Loop Down Limit");
SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, "gone_device_time", CTLFLAG_RW, &ISP_FC_PC(isp, 0)->gone_device_time, 0, "Gone Device Time");
+#if defined(ISP_TARGET_MODE) && defined(DEBUG)
+ SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, "inject_lost_data_frame", CTLFLAG_RW, &ISP_FC_PC(isp, 0)->inject_lost_data_frame, 0, "Cause a Lost Frame on a Read");
+#endif
}
}
return (0);
@@ -301,7 +303,9 @@ isp_detach(ispsoftc_t *isp)
csa.event_enable = 0;
csa.callback = isp_cam_async;
csa.callback_arg = sim;
+ ISP_LOCK(isp);
xpt_action((union ccb *)&csa);
+ ISP_UNLOCK(isp);
xpt_free_path(path);
xpt_bus_deregister(cam_sim_path(sim));
cam_sim_free(sim, FALSE);
@@ -346,7 +350,7 @@ isp_unfreeze_loopdown(ispsoftc_t *isp, int chan)
int wasfrozen = fc->simqfrozen & SIMQFRZ_LOOPDOWN;
fc->simqfrozen &= ~SIMQFRZ_LOOPDOWN;
if (wasfrozen && fc->simqfrozen == 0) {
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "%s: Chan %d releasing simq", __func__, chan);
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "%s: Chan %d releasing simq", __func__, chan);
xpt_release_simq(fc->sim, 1);
}
}
@@ -360,7 +364,7 @@ ispioctl(struct cdev *dev, u_long c, caddr_t addr, int flags, struct thread *td)
int nr, chan, retval = ENOTTY;
isp = dev->si_drv1;
-
+
switch (c) {
case ISP_SDBLEV:
{
@@ -479,7 +483,7 @@ ispioctl(struct cdev *dev, u_long c, caddr_t addr, int flags, struct thread *td)
}
lp = &FCPARAM(isp, ifc->chan)->portdb[ifc->loopid];
if (lp->state == FC_PORTDB_STATE_VALID || lp->target_mode) {
- ifc->role = lp->roles;
+ ifc->role = (lp->prli_word3 & SVC3_ROLE_MASK) >> SVC3_ROLE_SHIFT;
ifc->loopid = lp->handle;
ifc->portid = lp->portid;
ifc->node_wwn = lp->node_wwn;
@@ -772,14 +776,16 @@ isp_get_pcmd(ispsoftc_t *isp, union ccb *ccb)
static ISP_INLINE void
isp_free_pcmd(ispsoftc_t *isp, union ccb *ccb)
{
- ((struct isp_pcmd *)ISP_PCMD(ccb))->next = isp->isp_osinfo.pcmd_free;
- isp->isp_osinfo.pcmd_free = ISP_PCMD(ccb);
- ISP_PCMD(ccb) = NULL;
+ if (ISP_PCMD(ccb)) {
+ ((struct isp_pcmd *)ISP_PCMD(ccb))->next = isp->isp_osinfo.pcmd_free;
+ isp->isp_osinfo.pcmd_free = ISP_PCMD(ccb);
+ ISP_PCMD(ccb) = NULL;
+ }
}
+
/*
* Put the target mode functions here, because some are inlines
*/
-
#ifdef ISP_TARGET_MODE
static ISP_INLINE void isp_tmlock(ispsoftc_t *, const char *);
static ISP_INLINE void isp_tmunlk(ispsoftc_t *);
@@ -804,9 +810,11 @@ static int isp_enable_target_mode(ispsoftc_t *, int);
static int isp_disable_target_mode(ispsoftc_t *, int);
static void isp_ledone(ispsoftc_t *, lun_entry_t *);
static timeout_t isp_refire_putback_atio;
+static timeout_t isp_refire_notify_ack;
static void isp_complete_ctio(union ccb *);
static void isp_target_putback_atio(union ccb *);
-static void isp_target_start_ctio(ispsoftc_t *, union ccb *);
+enum Start_Ctio_How { FROM_CAM, FROM_SRR, FROM_CTIO_DONE };
+static void isp_target_start_ctio(ispsoftc_t *, union ccb *, enum Start_Ctio_How);
static void isp_handle_platform_atio(ispsoftc_t *, at_entry_t *);
static void isp_handle_platform_atio2(ispsoftc_t *, at2_entry_t *);
static void isp_handle_platform_atio7(ispsoftc_t *, at7_entry_t *);
@@ -1026,8 +1034,10 @@ isp_get_atpd(ispsoftc_t *isp, tstate_t *tptr, uint32_t tag)
static ISP_INLINE void
isp_put_atpd(ispsoftc_t *isp, tstate_t *tptr, atio_private_data_t *atp)
{
- atp->tag = 0;
- atp->dead = 0;
+ if (atp->ests) {
+ isp_put_ecmd(isp, atp->ests);
+ }
+ memset(atp, 0, sizeof (*atp));
atp->next = tptr->atfree;
tptr->atfree = atp;
}
@@ -1248,7 +1258,7 @@ isp_enable_lun(ispsoftc_t *isp, union ccb *ccb)
ISP_SET_PC(isp, bus, tm_enable_defer, 1);
ccb->ccb_h.status = CAM_REQ_CMP;
xpt_print(ccb->ccb_h.path, "Target Mode not enabled yet- lun enable deferred\n");
- goto done;
+ goto done1;
}
/*
@@ -1265,6 +1275,7 @@ done:
} else {
tptr->enabled = 1;
}
+done1:
if (tptr) {
rls_lun_statep(isp, tptr);
}
@@ -1283,6 +1294,7 @@ isp_enable_deferred_luns(ispsoftc_t *isp, int bus)
struct tslist *lhp;
int i, n;
+
ISP_GET_PC(isp, bus, tm_enabled, i);
if (i == 1) {
return (CAM_REQ_CMP);
@@ -1303,7 +1315,7 @@ isp_enable_deferred_luns(ispsoftc_t *isp, int bus)
SLIST_FOREACH(tptr, lhp, next) {
tptr->hold++;
if (tptr->enabled == 0) {
- if (isp_enable_deferred(isp, bus, xpt_path_lun_id(tptr->owner)) == 0) {
+ if (isp_enable_deferred(isp, bus, xpt_path_lun_id(tptr->owner)) == CAM_REQ_CMP) {
tptr->enabled = 1;
n++;
}
@@ -1325,9 +1337,10 @@ static cam_status
isp_enable_deferred(ispsoftc_t *isp, int bus, lun_id_t lun)
{
cam_status status;
- int luns_already_enabled = ISP_FC_PC(isp, bus)->tm_luns_enabled;
+ int luns_already_enabled;
- isp_prt(isp, ISP_LOGTINFO, "%s: bus %d lun %u", __func__, bus, lun);
+ ISP_GET_PC(isp, bus, tm_luns_enabled, luns_already_enabled);
+ isp_prt(isp, ISP_LOGTINFO, "%s: bus %d lun %u luns_enabled %d", __func__, bus, lun, luns_already_enabled);
if (IS_24XX(isp) || (IS_FC(isp) && luns_already_enabled)) {
status = CAM_REQ_CMP;
} else {
@@ -1342,7 +1355,7 @@ isp_enable_deferred(ispsoftc_t *isp, int bus, lun_id_t lun)
}
status = CAM_REQ_INPROG;
isp->isp_osinfo.rptr = &status;
- if (isp_lun_cmd(isp, RQSTYPE_ENABLE_LUN, bus, lun, DFLT_CMND_CNT, DFLT_INOT_CNT)) {
+ if (isp_lun_cmd(isp, RQSTYPE_ENABLE_LUN, bus, lun == CAM_LUN_WILDCARD? 0 : lun, cmd_cnt, not_cnt)) {
status = CAM_RESRC_UNAVAIL;
} else {
mtx_sleep(&status, &isp->isp_lock, PRIBIO, "isp_enable_deferred", 0);
@@ -1412,8 +1425,9 @@ isp_disable_lun(ispsoftc_t *isp, union ccb *ccb)
/*
* For SCC FW, we only deal with lun zero.
*/
- if (IS_FC(isp)) {
- lun = 0;
+ if (IS_FC(isp) && lun > 0) {
+ status = CAM_REQ_CMP;
+ goto done;
}
isp->isp_osinfo.rptr = &status;
if (isp_lun_cmd(isp, RQSTYPE_ENABLE_LUN, bus, lun, 0, 0)) {
@@ -1426,7 +1440,8 @@ done:
if (status == CAM_REQ_CMP) {
tptr->enabled = 0;
/*
- * If we have no more luns enabled for this bus, delete all tracked wwns for it (if we are FC)
+ * If we have no more luns enabled for this bus,
+ * delete all tracked wwns for it (if we are FC),
* and disable target mode.
*/
if (is_any_lun_enabled(isp, bus) == 0) {
@@ -1492,7 +1507,7 @@ isp_disable_target_mode(ispsoftc_t *isp, int bus)
}
}
ISP_SET_PC(isp, bus, tm_enabled, 0);
- isp_prt(isp, ISP_LOGINFO, "Target Role disabled onon Bus %d", bus);
+ isp_prt(isp, ISP_LOGINFO, "Target Role disabled on Bus %d", bus);
return (0);
}
@@ -1517,21 +1532,25 @@ isp_ledone(ispsoftc_t *isp, lun_entry_t *lep)
}
static void
-isp_target_start_ctio(ispsoftc_t *isp, union ccb *ccb)
+isp_target_start_ctio(ispsoftc_t *isp, union ccb *ccb, enum Start_Ctio_How how)
{
+
void *qe;
+ int fctape, sendstatus, resid, repval = ISP_LOGTDEBUG0;
tstate_t *tptr;
+ fcparam *fcp;
atio_private_data_t *atp;
struct ccb_scsiio *cso = &ccb->csio;
- uint32_t dmaresult, handle;
+ uint32_t dmaresult, handle, xfrlen, sense_length;
uint8_t local[QENTRY_LEN];
/*
* Do some sanity checks.
*/
- if (cso->dxfer_len == 0) {
+ xfrlen = cso->dxfer_len;
+ if (xfrlen == 0) {
if ((ccb->ccb_h.flags & CAM_SEND_STATUS) == 0) {
- xpt_print(ccb->ccb_h.path, "a data transfer length of zero but no status to send is wrong\n");
+ ISP_PATH_PRT(isp, ISP_LOGERR, ccb->ccb_h.path, "a data transfer length of zero but no status to send is wrong\n");
ccb->ccb_h.status = CAM_REQ_INVALID;
xpt_done(ccb);
return;
@@ -1542,8 +1561,7 @@ isp_target_start_ctio(ispsoftc_t *isp, union ccb *ccb)
if (tptr == NULL) {
tptr = get_lun_statep(isp, XS_CHANNEL(ccb), CAM_LUN_WILDCARD);
if (tptr == NULL) {
- xpt_print(ccb->ccb_h.path, "%s: [0x%x] cannot find tstate pointer in %s\n", __func__, cso->tag_id);
- dump_tstates(isp, XS_CHANNEL(ccb));
+ ISP_PATH_PRT(isp, ISP_LOGERR, ccb->ccb_h.path, "%s: [0x%x] cannot find tstate pointer in %s\n", __func__, cso->tag_id);
ccb->ccb_h.status = CAM_DEV_NOT_THERE;
xpt_done(ccb);
return;
@@ -1552,14 +1570,18 @@ isp_target_start_ctio(ispsoftc_t *isp, union ccb *ccb)
atp = isp_get_atpd(isp, tptr, cso->tag_id);
if (atp == NULL) {
- xpt_print(ccb->ccb_h.path, "%s: [0x%x] cannot find private data adjunct\n", __func__, cso->tag_id);
+ ISP_PATH_PRT(isp, ISP_LOGERR, ccb->ccb_h.path, "%s: [0x%x] cannot find private data adjunct\n", __func__, cso->tag_id);
isp_dump_atpd(isp, tptr);
ccb->ccb_h.status = CAM_REQ_CMP_ERR;
xpt_done(ccb);
return;
}
+
+ /*
+ * Is this command a dead duck?
+ */
if (atp->dead) {
- xpt_print(ccb->ccb_h.path, "%s: [0x%x] stopping sending a CTIO for a dead command\n", __func__, cso->tag_id);
+ ISP_PATH_PRT(isp, ISP_LOGERR, ccb->ccb_h.path, "%s: [0x%x] not sending a CTIO for a dead command\n", __func__, cso->tag_id);
ccb->ccb_h.status = CAM_REQ_ABORTED;
xpt_done(ccb);
return;
@@ -1568,38 +1590,83 @@ isp_target_start_ctio(ispsoftc_t *isp, union ccb *ccb)
/*
* Check to make sure we're still in target mode.
*/
- if ((FCPARAM(isp, XS_CHANNEL(ccb))->role & ISP_ROLE_TARGET) == 0) {
- xpt_print(ccb->ccb_h.path, "%s: [0x%x] stopping sending a CTIO because we're no longer in target mode\n", __func__, cso->tag_id);
+ fcp = FCPARAM(isp, XS_CHANNEL(ccb));
+ if ((fcp->role & ISP_ROLE_TARGET) == 0) {
+ ISP_PATH_PRT(isp, ISP_LOGERR, ccb->ccb_h.path, "%s: [0x%x] stopping sending a CTIO because we're no longer in target mode\n", __func__, cso->tag_id);
ccb->ccb_h.status = CAM_PROVIDE_FAIL;
xpt_done(ccb);
return;
}
/*
+ * We're only handling one outstanding CTIO at a time (which
+ * could be split into two to split data and status)
+ */
+ if (atp->ctcnt) {
+ ISP_PATH_PRT(isp, ISP_LOGINFO, ccb->ccb_h.path, "sending only one CTIO at a time\n");
+ goto restart_delay;
+ }
+
+
+ /*
* Get some resources
*/
if (isp_get_pcmd(isp, ccb)) {
- rls_lun_statep(isp, tptr);
- xpt_print(ccb->ccb_h.path, "out of PCMDs\n");
- cam_freeze_devq(ccb->ccb_h.path);
- cam_release_devq(ccb->ccb_h.path, RELSIM_RELEASE_AFTER_TIMEOUT, 0, 250, 0);
- ccb->ccb_h.status = CAM_REQUEUE_REQ;
- xpt_done(ccb);
- return;
+ ISP_PATH_PRT(isp, ISP_LOGWARN, ccb->ccb_h.path, "out of PCMDs\n");
+ goto restart_delay;
}
qe = isp_getrqentry(isp);
if (qe == NULL) {
- xpt_print(ccb->ccb_h.path, rqo, __func__);
- cam_freeze_devq(ccb->ccb_h.path);
- cam_release_devq(ccb->ccb_h.path, RELSIM_RELEASE_AFTER_TIMEOUT, 0, 250, 0);
- ccb->ccb_h.status = CAM_REQUEUE_REQ;
- goto out;
+ ISP_PATH_PRT(isp, ISP_LOGWARN, ccb->ccb_h.path, rqo, __func__);
+ goto restart_delay;
}
memset(local, 0, QENTRY_LEN);
/*
- * We're either moving data or completing a command here.
+ * Does the initiator expect FC-Tape style responses?
+ * Can we provide them?
*/
+ if ((atp->word3 & PRLI_WD3_RETRY) && fcp->fctape_enabled) {
+ fctape = 1;
+ } else {
+ fctape = 0;
+ }
+
+ /*
+ * If we already did the data xfer portion of a CTIO that sends data
+ * and status, don't do it again and do the status portion now.
+ */
+ if (atp->sendst) {
+ xfrlen = 0; /* we already did the data transfer */
+ atp->sendst = 0;
+ }
+ if (ccb->ccb_h.flags & CAM_SEND_STATUS) {
+ sendstatus = 1;
+ } else {
+ sendstatus = 0;
+ }
+
+ if (ccb->ccb_h.flags & CAM_SEND_SENSE) {
+ /*
+ * Sense length is not the entire sense data structure size. Periph
+ * drivers don't seem to be setting sense_len to reflect the actual
+ * size. We'll peek inside to get the right amount.
+ */
+ sense_length = cso->sense_len;
+
+ /*
+ * This 'cannot' happen
+ */
+ if (sense_length > (XCMD_SIZE - MIN_FCP_RESPONSE_SIZE)) {
+ sense_length = XCMD_SIZE - MIN_FCP_RESPONSE_SIZE;
+ }
+ } else {
+ sense_length = 0;
+ }
+
+ if (how == FROM_SRR || atp->nsrr)
+ repval = ISP_LOGINFO;
+
if (IS_24XX(isp)) {
ct7_entry_t *cto = (ct7_entry_t *) local;
@@ -1612,58 +1679,155 @@ isp_target_start_ctio(ispsoftc_t *isp, union ccb *ccb)
cto->ct_iid_hi = atp->portid >> 16;
cto->ct_oxid = atp->oxid;
cto->ct_vpidx = ISP_GET_VPIDX(isp, XS_CHANNEL(ccb));
- cto->ct_scsi_status = cso->scsi_status;
cto->ct_timeout = 120;
cto->ct_flags = atp->tattr << CT7_TASK_ATTR_SHIFT;
- if (ccb->ccb_h.flags & CAM_SEND_STATUS) {
- cto->ct_flags |= CT7_SENDSTATUS;
- }
- if (cso->dxfer_len == 0) {
- cto->ct_flags |= CT7_FLAG_MODE1 | CT7_NO_DATA;
- if ((ccb->ccb_h.flags & CAM_SEND_SENSE) != 0) {
- int m = min(cso->sense_len, sizeof (struct scsi_sense_data));
- cto->rsp.m1.ct_resplen = cto->ct_senselen = min(m, MAXRESPLEN_24XX);
- memcpy(cto->rsp.m1.ct_resp, &cso->sense_data, cto->ct_senselen);
- cto->ct_scsi_status |= (FCP_SNSLEN_VALID << 8);
+
+ /*
+ * Mode 1, status, no data. Only possible when we are sending status, have
+ * no data to transfer, and any sense length can fit in the ct7_entry.
+ *
+ * Mode 2, status, no data. We have to use this in the case sense data
+ * won't fit into a ct7_entry_t.
+ *
+ */
+ if (sendstatus && xfrlen == 0) {
+ cto->ct_flags |= CT7_SENDSTATUS | CT7_NO_DATA;
+ resid = atp->orig_datalen - atp->bytes_xfered;
+ if (sense_length <= MAXRESPLEN_24XX) {
+ if (resid < 0) {
+ cto->ct_resid = -resid;
+ } else if (resid > 0) {
+ cto->ct_resid = resid;
+ }
+ cto->ct_flags |= CT7_FLAG_MODE1;
+ cto->ct_scsi_status = cso->scsi_status;
+ if (resid < 0) {
+ cto->ct_scsi_status |= (FCP_RESID_OVERFLOW << 8);
+ } else if (resid > 0) {
+ cto->ct_scsi_status |= (FCP_RESID_UNDERFLOW << 8);
+ }
+ if (fctape) {
+ cto->ct_flags |= CT7_CONFIRM|CT7_EXPLCT_CONF;
+ }
+ if (sense_length) {
+ cto->ct_scsi_status |= (FCP_SNSLEN_VALID << 8);
+ cto->rsp.m1.ct_resplen = cto->ct_senselen = sense_length;
+ memcpy(cto->rsp.m1.ct_resp, &cso->sense_data, sense_length);
+ }
+ } else {
+ bus_addr_t addr;
+ char buf[XCMD_SIZE];
+ fcp_rsp_iu_t *rp;
+
+ if (atp->ests == NULL) {
+ atp->ests = isp_get_ecmd(isp);
+ if (atp->ests == NULL) {
+ goto restart_delay;
+ }
+ }
+ memset(buf, 0, sizeof (buf));
+ rp = (fcp_rsp_iu_t *)buf;
+ if (fctape) {
+ cto->ct_flags |= CT7_CONFIRM|CT7_EXPLCT_CONF;
+ rp->fcp_rsp_bits |= FCP_CONF_REQ;
+ }
+ cto->ct_flags |= CT7_FLAG_MODE2;
+ rp->fcp_rsp_scsi_status = cso->scsi_status;
+ if (resid < 0) {
+ rp->fcp_rsp_resid = -resid;
+ rp->fcp_rsp_bits |= FCP_RESID_OVERFLOW;
+ } else if (resid > 0) {
+ rp->fcp_rsp_resid = resid;
+ rp->fcp_rsp_bits |= FCP_RESID_UNDERFLOW;
+ }
+ if (sense_length) {
+ rp->fcp_rsp_snslen = sense_length;
+ cto->ct_senselen = sense_length;
+ rp->fcp_rsp_bits |= FCP_SNSLEN_VALID;
+ isp_put_fcp_rsp_iu(isp, rp, atp->ests);
+ memcpy(((fcp_rsp_iu_t *)atp->ests)->fcp_rsp_extra, &cso->sense_data, sense_length);
+ } else {
+ isp_put_fcp_rsp_iu(isp, rp, atp->ests);
+ }
+ if (isp->isp_dblev & ISP_LOGTDEBUG1) {
+ isp_print_bytes(isp, "FCP Response Frame After Swizzling", MIN_FCP_RESPONSE_SIZE + sense_length, atp->ests);
+ }
+ addr = isp->isp_osinfo.ecmd_dma;
+ addr += ((((isp_ecmd_t *)atp->ests) - isp->isp_osinfo.ecmd_base) * XCMD_SIZE);
+ isp_prt(isp, repval, "%s: ests base %p vaddr %p ecmd_dma %jx addr %jx len %u", __func__, isp->isp_osinfo.ecmd_base, atp->ests,
+ (uintmax_t) isp->isp_osinfo.ecmd_dma, (uintmax_t)addr, MIN_FCP_RESPONSE_SIZE + sense_length);
+ cto->rsp.m2.ct_datalen = MIN_FCP_RESPONSE_SIZE + sense_length;
+ cto->rsp.m2.ct_fcp_rsp_iudata.ds_base = DMA_LO32(addr);
+ cto->rsp.m2.ct_fcp_rsp_iudata.ds_basehi = DMA_HI32(addr);
+ cto->rsp.m2.ct_fcp_rsp_iudata.ds_count = MIN_FCP_RESPONSE_SIZE + sense_length;
}
- } else {
+ if (sense_length) {
+ isp_prt(isp, repval, "%s: CTIO7[0x%x] CDB0=%x sstatus=0x%x flags=0x%x resid=%d slen %u sense: %x %x/%x/%x", __func__,
+ cto->ct_rxid, atp->cdb0, cto->ct_scsi_status, cto->ct_flags, cto->ct_resid, sense_length, cso->sense_data.error_code,
+ cso->sense_data.sense_buf[1], cso->sense_data.sense_buf[11], cso->sense_data.sense_buf[12]);
+ } else {
+ isp_prt(isp, repval, "%s: CTIO7[0x%x] CDB0=%x sstatus=0x%x flags=0x%x resid=%d", __func__,
+ cto->ct_rxid, atp->cdb0, cto->ct_scsi_status, cto->ct_flags, cto->ct_resid);
+ }
+ atp->state = ATPD_STATE_LAST_CTIO;
+ }
+
+ /*
+ * Mode 0 data transfers, *possibly* with status.
+ */
+ if (xfrlen != 0) {
cto->ct_flags |= CT7_FLAG_MODE0;
if ((cso->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_IN) {
cto->ct_flags |= CT7_DATA_IN;
} else {
cto->ct_flags |= CT7_DATA_OUT;
}
- cto->rsp.m0.reloff = atp->bytes_xfered;
+
/*
- * Don't overrun the limits placed on us
+ * Don't overrun the limits placed on us, but record it as
+ * if we had so that we can set an overflow bit later.
*/
- if (atp->bytes_xfered + cso->dxfer_len > atp->orig_datalen) {
- cso->dxfer_len = atp->orig_datalen - atp->bytes_xfered;
+ atp->last_xframt = xfrlen;
+ if (atp->bytes_xfered >= atp->orig_datalen) {
+ resid = atp->orig_datalen - (atp->bytes_xfered + xfrlen);
+ } else if (atp->bytes_xfered + xfrlen > atp->orig_datalen) {
+ resid = atp->orig_datalen - (atp->bytes_xfered + xfrlen);
+ xfrlen = atp->orig_datalen - atp->bytes_xfered;
+ } else {
+ resid = atp->orig_datalen - xfrlen;
}
- atp->last_xframt = cso->dxfer_len;
- cto->rsp.m0.ct_xfrlen = cso->dxfer_len;
- }
- if (cto->ct_flags & CT7_SENDSTATUS) {
- int lvl = (cso->scsi_status)? ISP_LOGTINFO : ISP_LOGTDEBUG0;
- cto->ct_resid = atp->orig_datalen - (atp->bytes_xfered + cso->dxfer_len);
- if (cto->ct_resid < 0) {
- cto->ct_scsi_status |= (FCP_RESID_OVERFLOW << 8);
- } else if (cto->ct_resid > 0) {
- cto->ct_scsi_status |= (FCP_RESID_UNDERFLOW << 8);
+ cto->rsp.m0.reloff = atp->bytes_xfered;
+ cto->rsp.m0.ct_xfrlen = xfrlen;
+
+#ifdef DEBUG
+ if (ISP_FC_PC(isp, XS_CHANNEL(ccb))->inject_lost_data_frame && xfrlen > ISP_FC_PC(isp, XS_CHANNEL(ccb))->inject_lost_data_frame) {
+ isp_prt(isp, ISP_LOGWARN, "%s: truncating data frame with xfrlen %d to %d", __func__, xfrlen, xfrlen - (xfrlen >> 2));
+ ISP_FC_PC(isp, XS_CHANNEL(ccb))->inject_lost_data_frame = 0;
+ cto->rsp.m0.ct_xfrlen -= xfrlen >> 2;
}
- atp->state = ATPD_STATE_LAST_CTIO;
- ISP_PATH_PRT(isp, lvl, cso->ccb_h.path, "%s: CTIO7[%x] CDB0=%x scsi status %x flags %x resid %d xfrlen %u offset %u\n", __func__, cto->ct_rxid,
- atp->cdb0, cto->ct_scsi_status, cto->ct_flags, cto->ct_resid, cso->dxfer_len, atp->bytes_xfered);
- } else {
- cto->ct_resid = 0;
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, cso->ccb_h.path, "%s: CTIO7[%x] flags %x xfrlen %u offset %u\n", __func__, cto->ct_rxid, cto->ct_flags,
- cso->dxfer_len, atp->bytes_xfered);
- atp->state = ATPD_STATE_CTIO;
+#endif
+ if (sendstatus) {
+ if (cso->scsi_status == SCSI_STATUS_OK && resid == 0 && fctape == 0) {
+ cto->ct_flags |= CT7_SENDSTATUS;
+ atp->state = ATPD_STATE_LAST_CTIO;
+ } else {
+ atp->sendst = 1; /* send status later */
+ cto->ct_header.rqs_seqno = 0;
+ atp->state = ATPD_STATE_CTIO;
+ }
+ } else {
+ atp->state = ATPD_STATE_CTIO;
+ }
+ isp_prt(isp, repval, "%s: CTIO7[0x%x] CDB0=%x sstatus=0x%x flags=0x%x xfrlen=%u off=%u", __func__,
+ cto->ct_rxid, atp->cdb0, cto->ct_scsi_status, cto->ct_flags, xfrlen, atp->bytes_xfered);
}
} else if (IS_FC(isp)) {
ct2_entry_t *cto = (ct2_entry_t *) local;
- cto->ct_header.rqs_entry_type = RQSTYPE_CTIO2;
+ if (isp->isp_osinfo.sixtyfourbit)
+ cto->ct_header.rqs_entry_type = RQSTYPE_CTIO3;
+ else
+ cto->ct_header.rqs_entry_type = RQSTYPE_CTIO2;
cto->ct_header.rqs_entry_count = 1;
cto->ct_header.rqs_seqno = 1;
if (ISP_CAP_2KLOGIN(isp) == 0) {
@@ -1674,76 +1838,142 @@ isp_target_start_ctio(ispsoftc_t *isp, union ccb *ccb)
cto->ct_lun = ccb->ccb_h.target_lun;
}
}
-
-
+ cto->ct_timeout = 10;
cto->ct_rxid = cso->tag_id;
- if (cso->dxfer_len == 0) {
- cto->ct_flags |= CT2_FLAG_MODE1 | CT2_NO_DATA | CT2_SENDSTATUS;
- cto->rsp.m1.ct_scsi_status = cso->scsi_status;
- cto->ct_resid = atp->orig_datalen - atp->bytes_xfered;
- if (cto->ct_resid < 0) {
- cto->rsp.m1.ct_scsi_status |= CT2_DATA_OVER;
- } else if (cto->ct_resid > 0) {
- cto->rsp.m1.ct_scsi_status |= CT2_DATA_UNDER;
+
+ /*
+ * Mode 1, status, no data. Only possible when we are sending status, have
+ * no data to transfer, and the sense length can fit in the ct7_entry.
+ *
+ * Mode 2, status, no data. We have to use this in the case the the response
+ * length won't fit into a ct2_entry_t.
+ *
+ * We'll fill out this structure with information as if this were a
+ * Mode 1. The hardware layer will create the Mode 2 FCP RSP IU as
+ * needed based upon this.
+ */
+ if (sendstatus && xfrlen == 0) {
+ cto->ct_flags |= CT2_SENDSTATUS | CT2_NO_DATA;
+ resid = atp->orig_datalen - atp->bytes_xfered;
+ if (sense_length <= MAXRESPLEN) {
+ if (resid < 0) {
+ cto->ct_resid = -resid;
+ } else if (resid > 0) {
+ cto->ct_resid = resid;
+ }
+ cto->ct_flags |= CT2_FLAG_MODE1;
+ cto->rsp.m1.ct_scsi_status = cso->scsi_status;
+ if (resid < 0) {
+ cto->rsp.m1.ct_scsi_status |= CT2_DATA_OVER;
+ } else if (resid > 0) {
+ cto->rsp.m1.ct_scsi_status |= CT2_DATA_UNDER;
+ }
+ if (fctape) {
+ cto->ct_flags |= CT2_CONFIRM;
+ }
+ if (sense_length) {
+ cto->rsp.m1.ct_scsi_status |= CT2_SNSLEN_VALID;
+ cto->rsp.m1.ct_resplen = cto->rsp.m1.ct_senselen = sense_length;
+ memcpy(cto->rsp.m1.ct_resp, &cso->sense_data, sense_length);
+ }
+ } else {
+ bus_addr_t addr;
+ char buf[XCMD_SIZE];
+ fcp_rsp_iu_t *rp;
+
+ if (atp->ests == NULL) {
+ atp->ests = isp_get_ecmd(isp);
+ if (atp->ests == NULL) {
+ goto restart_delay;
+ }
+ }
+ memset(buf, 0, sizeof (buf));
+ rp = (fcp_rsp_iu_t *)buf;
+ if (fctape) {
+ cto->ct_flags |= CT2_CONFIRM;
+ rp->fcp_rsp_bits |= FCP_CONF_REQ;
+ }
+ cto->ct_flags |= CT2_FLAG_MODE2;
+ rp->fcp_rsp_scsi_status = cso->scsi_status;
+ if (resid < 0) {
+ rp->fcp_rsp_resid = -resid;
+ rp->fcp_rsp_bits |= FCP_RESID_OVERFLOW;
+ } else if (resid > 0) {
+ rp->fcp_rsp_resid = resid;
+ rp->fcp_rsp_bits |= FCP_RESID_UNDERFLOW;
+ }
+ if (sense_length) {
+ rp->fcp_rsp_snslen = sense_length;
+ rp->fcp_rsp_bits |= FCP_SNSLEN_VALID;
+ isp_put_fcp_rsp_iu(isp, rp, atp->ests);
+ memcpy(((fcp_rsp_iu_t *)atp->ests)->fcp_rsp_extra, &cso->sense_data, sense_length);
+ } else {
+ isp_put_fcp_rsp_iu(isp, rp, atp->ests);
+ }
+ if (isp->isp_dblev & ISP_LOGTDEBUG1) {
+ isp_print_bytes(isp, "FCP Response Frame After Swizzling", MIN_FCP_RESPONSE_SIZE + sense_length, atp->ests);
+ }
+ addr = isp->isp_osinfo.ecmd_dma;
+ addr += ((((isp_ecmd_t *)atp->ests) - isp->isp_osinfo.ecmd_base) * XCMD_SIZE);
+ isp_prt(isp, repval, "%s: ests base %p vaddr %p ecmd_dma %jx addr %jx len %u", __func__, isp->isp_osinfo.ecmd_base, atp->ests,
+ (uintmax_t) isp->isp_osinfo.ecmd_dma, (uintmax_t)addr, MIN_FCP_RESPONSE_SIZE + sense_length);
+ cto->rsp.m2.ct_datalen = MIN_FCP_RESPONSE_SIZE + sense_length;
+ if (isp->isp_osinfo.sixtyfourbit) {
+ cto->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_base = DMA_LO32(addr);
+ cto->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_basehi = DMA_HI32(addr);
+ cto->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_count = MIN_FCP_RESPONSE_SIZE + sense_length;
+ } else {
+ cto->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_base = DMA_LO32(addr);
+ cto->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_count = MIN_FCP_RESPONSE_SIZE + sense_length;
+ }
}
- if ((ccb->ccb_h.flags & CAM_SEND_SENSE) != 0) {
- int m = min(cso->sense_len, MAXRESPLEN);
- memcpy(cto->rsp.m1.ct_resp, &cso->sense_data, m);
- cto->rsp.m1.ct_senselen = m;
- cto->rsp.m1.ct_scsi_status |= CT2_SNSLEN_VALID;
- } else if (cso->scsi_status == SCSI_STATUS_CHECK_COND) {
- /*
- * XXX: DEBUG
- */
- xpt_print(ccb->ccb_h.path, "CHECK CONDITION being sent without associated SENSE DATA for CDB=0x%x\n", atp->cdb0);
+ if (sense_length) {
+ isp_prt(isp, repval, "%s: CTIO2[0x%x] CDB0=%x sstatus=0x%x flags=0x%x resid=%d sense: %x %x/%x/%x", __func__,
+ cto->ct_rxid, atp->cdb0, cso->scsi_status, cto->ct_flags, cto->ct_resid, cso->sense_data.error_code,
+ cso->sense_data.sense_buf[1], cso->sense_data.sense_buf[11], cso->sense_data.sense_buf[12]);
+ } else {
+ isp_prt(isp, repval, "%s: CTIO2[0x%x] CDB0=%x sstatus=0x%x flags=0x%x resid=%d", __func__,
+ cto->ct_rxid, atp->cdb0, cso->scsi_status, cto->ct_flags, cto->ct_resid);
}
- } else {
+ atp->state = ATPD_STATE_LAST_CTIO;
+ }
+
+ if (xfrlen != 0) {
+ int resid = 0;
cto->ct_flags |= CT2_FLAG_MODE0;
if ((cso->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_IN) {
cto->ct_flags |= CT2_DATA_IN;
} else {
cto->ct_flags |= CT2_DATA_OUT;
}
- cto->ct_reloff = atp->bytes_xfered;
- cto->rsp.m0.ct_xfrlen = cso->dxfer_len;
+
/*
- * Don't overrun the limits placed on us
+ * Don't overrun the limits placed on us, but record it as
+ * if we had so that we can set an overflow bit later.
*/
- if (atp->bytes_xfered + cso->dxfer_len > atp->orig_datalen) {
- cso->dxfer_len = atp->orig_datalen - atp->bytes_xfered;
+ atp->last_xframt = xfrlen;
+ if (atp->bytes_xfered + xfrlen > atp->orig_datalen) {
+ resid = 1;
+ xfrlen = atp->orig_datalen - atp->bytes_xfered;
}
- if ((ccb->ccb_h.flags & CAM_SEND_STATUS) != 0) {
- cto->ct_flags |= CT2_SENDSTATUS;
- cto->rsp.m0.ct_scsi_status = cso->scsi_status;
- cto->ct_resid = atp->orig_datalen - (atp->bytes_xfered + cso->dxfer_len);
- if (cto->ct_resid < 0) {
- cto->rsp.m0.ct_scsi_status |= CT2_DATA_OVER;
- } else if (cto->ct_resid > 0) {
- cto->rsp.m0.ct_scsi_status |= CT2_DATA_UNDER;
+ cto->ct_reloff = atp->bytes_xfered;
+ cto->rsp.m0.ct_xfrlen = xfrlen;
+
+ if (sendstatus) {
+ if (cso->scsi_status == SCSI_STATUS_OK && resid == 0 && fctape == 0) {
+ cto->ct_flags |= CT2_SENDSTATUS;
+ atp->state = ATPD_STATE_LAST_CTIO;
+ } else {
+ atp->sendst = 1; /* send status later */
+ cto->ct_header.rqs_seqno = 0;
+ atp->state = ATPD_STATE_CTIO;
}
} else {
- atp->last_xframt = cso->dxfer_len;
+ atp->state = ATPD_STATE_CTIO;
}
- /*
- * If we're sending data and status back together,
- * we can't also send back sense data as well.
- */
- ccb->ccb_h.flags &= ~CAM_SEND_SENSE;
- }
-
- if (cto->ct_flags & CT2_SENDSTATUS) {
- int lvl = (cso->scsi_status)? ISP_LOGTINFO : ISP_LOGTDEBUG0;
- cto->ct_flags |= CT2_CCINCR;
- atp->state = ATPD_STATE_LAST_CTIO;
- ISP_PATH_PRT(isp, lvl, cso->ccb_h.path, "%s: CTIO2[%x] CDB0=%x scsi status %x flags %x resid %d xfrlen %u offset %u\n", __func__, cto->ct_rxid,
- atp->cdb0, cto->rsp.m0.ct_scsi_status, cto->ct_flags, cto->ct_resid, cso->dxfer_len, atp->bytes_xfered);
- } else {
- cto->ct_resid = 0;
- atp->state = ATPD_STATE_CTIO;
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "%s: CTIO2[%x] flags %x xfrlen %u offset %u\n", __func__, cto->ct_rxid, cto->ct_flags,
- cso->dxfer_len, atp->bytes_xfered);
}
- cto->ct_timeout = 10;
+ isp_prt(isp, ISP_LOGTDEBUG0, "%s: CTIO2[%x] CDB0=%x scsi status %x flags %x resid %d xfrlen %u offset %u", __func__, cto->ct_rxid,
+ atp->cdb0, cso->scsi_status, cto->ct_flags, cto->ct_resid, cso->dxfer_len, atp->bytes_xfered);
} else {
ct_entry_t *cto = (ct_entry_t *) local;
@@ -1754,9 +1984,9 @@ isp_target_start_ctio(ispsoftc_t *isp, union ccb *ccb)
cto->ct_iid |= XS_CHANNEL(ccb) << 7;
cto->ct_tgt = ccb->ccb_h.target_id;
cto->ct_lun = ccb->ccb_h.target_lun;
- cto->ct_fwhandle = cso->tag_id >> 16;
- if (AT_HAS_TAG(cso->tag_id)) {
- cto->ct_tag_val = cso->tag_id;
+ cto->ct_fwhandle = cso->tag_id;
+ if (atp->rxid) {
+ cto->ct_tag_val = atp->rxid;
cto->ct_flags |= CT_TQAE;
}
if (ccb->ccb_h.flags & CAM_DIS_DISCONNECT) {
@@ -1773,7 +2003,7 @@ isp_target_start_ctio(ispsoftc_t *isp, union ccb *ccb)
cto->ct_flags |= CT_SENDSTATUS|CT_CCINCR;
cto->ct_scsi_status = cso->scsi_status;
cto->ct_resid = cso->resid;
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "%s: CTIO[%x] scsi status %x resid %d tag_id %x\n", __func__,
+ isp_prt(isp, ISP_LOGTDEBUG0, "%s: CTIO[%x] scsi status %x resid %d tag_id %x", __func__,
cto->ct_fwhandle, cso->scsi_status, cso->resid, cso->tag_id);
}
ccb->ccb_h.flags &= ~CAM_SEND_SENSE;
@@ -1781,12 +2011,10 @@ isp_target_start_ctio(ispsoftc_t *isp, union ccb *ccb)
}
if (isp_allocate_xs_tgt(isp, ccb, &handle)) {
- xpt_print(ccb->ccb_h.path, "No XFLIST pointers for %s\n", __func__);
- ccb->ccb_h.status = CAM_REQUEUE_REQ;
- goto out;
+ ISP_PATH_PRT(isp, ISP_LOGWARN, ccb->ccb_h.path, "No XFLIST pointers for %s\n", __func__);
+ goto restart_delay;
}
-
/*
* Call the dma setup routines for this entry (and any subsequent
* CTIOs) if there's data to move, and then tell the f/w it's got
@@ -1810,16 +2038,25 @@ isp_target_start_ctio(ispsoftc_t *isp, union ccb *ccb)
dmaresult = ISP_DMASETUP(isp, cso, (ispreq_t *) local);
if (dmaresult == CMD_QUEUED) {
isp->isp_nactive++;
- ccb->ccb_h.status |= CAM_SIM_QUEUED;
+ if (xfrlen) {
+ ccb->ccb_h.spriv_field0 = atp->bytes_xfered;
+ } else {
+ ccb->ccb_h.spriv_field0 = ~0;
+ }
+ ccb->ccb_h.status = CAM_REQ_INPROG | CAM_SIM_QUEUED;
+ atp->ctcnt++;
rls_lun_statep(isp, tptr);
return;
}
- if (dmaresult == CMD_EAGAIN) {
- ccb->ccb_h.status = CAM_REQUEUE_REQ;
- } else {
+ isp_destroy_tgt_handle(isp, handle);
+ if (dmaresult != CMD_EAGAIN) {
ccb->ccb_h.status = CAM_REQ_CMP_ERR;
+ goto out;
}
- isp_destroy_tgt_handle(isp, handle);
+restart_delay:
+ cam_freeze_devq(ccb->ccb_h.path);
+ cam_release_devq(ccb->ccb_h.path, RELSIM_RELEASE_AFTER_TIMEOUT, 0, 250, 0);
+ ccb->ccb_h.status = CAM_REQUEUE_REQ;
out:
rls_lun_statep(isp, tptr);
isp_free_pcmd(isp, ccb);
@@ -1837,6 +2074,21 @@ isp_refire_putback_atio(void *arg)
}
static void
+isp_refire_notify_ack(void *arg)
+{
+ isp_tna_t *tp = arg;
+ ispsoftc_t *isp = tp->isp;
+ ISP_LOCK(isp);
+ if (isp_notify_ack(isp, tp->not)) {
+ (void) timeout(isp_refire_notify_ack, tp, 5);
+ } else {
+ free(tp, M_DEVBUF);
+ }
+ ISP_UNLOCK(isp);
+}
+
+
+static void
isp_target_putback_atio(union ccb *ccb)
{
ispsoftc_t *isp;
@@ -1889,12 +2141,10 @@ isp_target_putback_atio(union ccb *ccb)
static void
isp_complete_ctio(union ccb *ccb)
{
- if ((ccb->ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_INPROG) {
- ccb->ccb_h.status |= CAM_REQ_CMP;
+ if ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_INPROG) {
+ ccb->ccb_h.status &= ~CAM_SIM_QUEUED;
+ xpt_done(ccb);
}
- ccb->ccb_h.status &= ~CAM_SIM_QUEUED;
- isp_free_pcmd(XS_ISP(ccb), ccb);
- xpt_done(ccb);
}
/*
@@ -1975,14 +2225,12 @@ isp_handle_platform_atio(ispsoftc_t *isp, at_entry_t *aep)
rls_lun_statep(isp, tptr);
return;
}
- atp->tag = aep->at_tag_val;
- if (atp->tag == 0) {
- atp->tag = ~0;
- }
+ atp->tag = aep->at_handle;
+ atp->rxid = aep->at_tag_val;
atp->state = ATPD_STATE_ATIO;
SLIST_REMOVE_HEAD(&tptr->atios, sim_links.sle);
tptr->atio_count--;
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, atiop->ccb_h.path, "Take FREE ATIO count now %d\n", tptr->atio_count);
+ ISP_PATH_PRT(isp, ISP_LOGTDEBUG2, atiop->ccb_h.path, "Take FREE ATIO count now %d\n", tptr->atio_count);
atiop->ccb_h.target_id = aep->at_tgt;
atiop->ccb_h.target_lun = aep->at_lun;
if (aep->at_flags & AT_NODISC) {
@@ -2022,7 +2270,7 @@ isp_handle_platform_atio(ispsoftc_t *isp, at_entry_t *aep)
atp->cdb0 = atiop->cdb_io.cdb_bytes[0];
atp->tattr = aep->at_tag_type;
atp->state = ATPD_STATE_CAM;
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, tptr->owner, "ATIO[%x] CDB=0x%x lun %d\n", aep->at_tag_val, atp->cdb0, atp->lun);
+ isp_prt(isp, ISP_LOGTDEBUG0, "ATIO[0x%x] CDB=0x%x lun %d", aep->at_tag_val, atp->cdb0, atp->lun);
rls_lun_statep(isp, tptr);
}
@@ -2063,8 +2311,12 @@ isp_handle_platform_atio2(ispsoftc_t *isp, at2_entry_t *aep)
if (tptr == NULL) {
tptr = get_lun_statep(isp, 0, CAM_LUN_WILDCARD);
if (tptr == NULL) {
- isp_prt(isp, ISP_LOGTDEBUG0, "[0x%x] no state pointer for lun %d", aep->at_rxid, lun);
- isp_endcmd(isp, aep, SCSI_STATUS_CHECK_COND | ECMD_SVALID | (0x5 << 12) | (0x25 << 16), 0);
+ isp_prt(isp, ISP_LOGWARN, "%s: [0x%x] no state pointer for lun %d or wildcard", __func__, aep->at_rxid, lun);
+ if (lun == 0) {
+ isp_endcmd(isp, aep, SCSI_STATUS_BUSY, 0);
+ } else {
+ isp_endcmd(isp, aep, SCSI_STATUS_CHECK_COND | ECMD_SVALID | (0x5 << 12) | (0x25 << 16), 0);
+ }
return;
}
}
@@ -2112,7 +2364,7 @@ isp_handle_platform_atio2(ispsoftc_t *isp, at2_entry_t *aep)
atp->state = ATPD_STATE_ATIO;
SLIST_REMOVE_HEAD(&tptr->atios, sim_links.sle);
tptr->atio_count--;
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, atiop->ccb_h.path, "Take FREE ATIO count now %d\n", tptr->atio_count);
+ isp_prt(isp, ISP_LOGTDEBUG2, "Take FREE ATIO count now %d", tptr->atio_count);
atiop->ccb_h.target_id = FCPARAM(isp, 0)->isp_loopid;
atiop->ccb_h.target_lun = lun;
@@ -2146,7 +2398,7 @@ isp_handle_platform_atio2(ispsoftc_t *isp, at2_entry_t *aep)
if (isp_find_pdb_by_wwn(isp, 0, iid, &lp)) {
isp_del_wwn_entry(isp, 0, iid, lp->handle, lp->portid);
}
- isp_add_wwn_entry(isp, 0, iid, atiop->init_id, PORT_ANY);
+ isp_add_wwn_entry(isp, 0, iid, atiop->init_id, PORT_ANY, 0);
}
atiop->cdb_len = ATIO2_CDBLEN;
ISP_MEMCPY(atiop->cdb_io.cdb_bytes, aep->at_cdb, ATIO2_CDBLEN);
@@ -2183,7 +2435,7 @@ isp_handle_platform_atio2(ispsoftc_t *isp, at2_entry_t *aep)
atp->tattr = aep->at_taskflags & ATIO2_TC_ATTR_MASK;
atp->state = ATPD_STATE_CAM;
xpt_done((union ccb *)atiop);
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, tptr->owner, "ATIO2[%x] CDB=0x%x lun %d datalen %u\n", aep->at_rxid, atp->cdb0, lun, atp->orig_datalen);
+ isp_prt(isp, ISP_LOGTDEBUG0, "ATIO2[0x%x] CDB=0x%x lun %d datalen %u", aep->at_rxid, atp->cdb0, lun, atp->orig_datalen);
rls_lun_statep(isp, tptr);
return;
noresrc:
@@ -2281,8 +2533,12 @@ isp_handle_platform_atio7(ispsoftc_t *isp, at7_entry_t *aep)
if (tptr == NULL) {
tptr = get_lun_statep(isp, chan, CAM_LUN_WILDCARD);
if (tptr == NULL) {
- isp_prt(isp, ISP_LOGTDEBUG0, "[0x%x] no state pointer for lun %d or wildcard", aep->at_rxid, lun);
- isp_endcmd(isp, aep, nphdl, chan, SCSI_STATUS_CHECK_COND | ECMD_SVALID | (0x5 << 12) | (0x25 << 16), 0);
+ isp_prt(isp, ISP_LOGWARN, "%s: [0x%x] no state pointer for lun %d or wildcard", __func__, aep->at_rxid, lun);
+ if (lun == 0) {
+ isp_endcmd(isp, aep, nphdl, SCSI_STATUS_BUSY, 0);
+ } else {
+ isp_endcmd(isp, aep, nphdl, chan, SCSI_STATUS_CHECK_COND | ECMD_SVALID | (0x5 << 12) | (0x25 << 16), 0);
+ }
return;
}
}
@@ -2344,18 +2600,19 @@ isp_handle_platform_atio7(ispsoftc_t *isp, at7_entry_t *aep)
}
oatp = isp_get_atpd(isp, tptr, aep->at_rxid);
if (oatp) {
- isp_prt(isp, ISP_LOGTDEBUG0, "[0x%x] tag wraparound in isp_handle_platforms_atio7 (N-Port Handle 0x%04x S_ID 0x%04x OX_ID 0x%04x) oatp state %d\n",
+ isp_prt(isp, ISP_LOGTDEBUG0, "[0x%x] tag wraparound in isp_handle_platforms_atio7 (N-Port Handle 0x%04x S_ID 0x%04x OX_ID 0x%04x) oatp state %d",
aep->at_rxid, nphdl, sid, aep->at_hdr.ox_id, oatp->state);
/*
* It's not a "no resource" condition- but we can treat it like one
*/
goto noresrc;
}
+ atp->word3 = lp->prli_word3;
atp->tag = aep->at_rxid;
atp->state = ATPD_STATE_ATIO;
SLIST_REMOVE_HEAD(&tptr->atios, sim_links.sle);
tptr->atio_count--;
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, atiop->ccb_h.path, "Take FREE ATIO count now %d\n", tptr->atio_count);
+ ISP_PATH_PRT(isp, ISP_LOGTDEBUG2, atiop->ccb_h.path, "Take FREE ATIO count now %d\n", tptr->atio_count);
atiop->init_id = nphdl;
atiop->ccb_h.target_id = FCPARAM(isp, chan)->isp_loopid;
atiop->ccb_h.target_lun = lun;
@@ -2400,7 +2657,7 @@ isp_handle_platform_atio7(ispsoftc_t *isp, at7_entry_t *aep)
atp->cdb0 = atiop->cdb_io.cdb_bytes[0];
atp->tattr = aep->at_cmnd.fcp_cmnd_task_attribute & FCP_CMND_TASK_ATTR_MASK;
atp->state = ATPD_STATE_CAM;
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, tptr->owner, "ATIO7[%x] CDB=0x%x lun %d datalen %u\n", aep->at_rxid, atp->cdb0, lun, atp->orig_datalen);
+ isp_prt(isp, ISP_LOGTDEBUG0, "ATIO7[0x%x] CDB=0x%x lun %d datalen %u", aep->at_rxid, atp->cdb0, lun, atp->orig_datalen);
xpt_done((union ccb *)atiop);
rls_lun_statep(isp, tptr);
return;
@@ -2420,15 +2677,157 @@ noresrc:
rls_lun_statep(isp, tptr);
}
+
+/*
+ * Handle starting an SRR (sequence retransmit request)
+ * We get here when we've gotten the immediate notify
+ * and the return of all outstanding CTIOs for this
+ * transaction.
+ */
+static void
+isp_handle_srr_start(ispsoftc_t *isp, tstate_t *tptr, atio_private_data_t *atp)
+{
+ in_fcentry_24xx_t *inot;
+ uint32_t srr_off, ccb_off, ccb_len, ccb_end;
+ union ccb *ccb;
+
+ inot = (in_fcentry_24xx_t *)atp->srr;
+ srr_off = inot->in_srr_reloff_lo | (inot->in_srr_reloff_hi << 16);
+ ccb = atp->srr_ccb;
+ atp->srr_ccb = NULL;
+ atp->nsrr++;
+ if (ccb == NULL) {
+ isp_prt(isp, ISP_LOGWARN, "SRR[0x%08x] null ccb", atp->tag);
+ goto fail;
+ }
+
+ ccb_off = ccb->ccb_h.spriv_field0;
+ ccb_len = ccb->csio.dxfer_len;
+ ccb_end = (ccb_off == ~0)? ~0 : ccb_off + ccb_len;
+
+ switch (inot->in_srr_iu) {
+ case R_CTL_INFO_SOLICITED_DATA:
+ /*
+ * We have to restart a FCP_DATA data out transaction
+ */
+ atp->sendst = 0;
+ atp->last_xframt = 0;
+ atp->bytes_xfered = srr_off;
+ if (ccb_len == 0) {
+ isp_prt(isp, ISP_LOGWARN, "SRR[0x%08x] SRR offset 0x%x but current CCB doesn't transfer data", atp->tag, srr_off);
+ goto mdp;
+ }
+ if (srr_off < ccb_off || ccb_off > srr_off + ccb_len) {
+ isp_prt(isp, ISP_LOGWARN, "SRR[0x%08x] SRR offset 0x%x not covered by current CCB data range [0x%x..0x%x]", atp->tag, srr_off, ccb_off, ccb_end);
+ goto mdp;
+ }
+ isp_prt(isp, ISP_LOGWARN, "SRR[0x%08x] SRR offset 0x%x covered by current CCB data range [0x%x..0x%x]", atp->tag, srr_off, ccb_off, ccb_end);
+ break;
+ case R_CTL_INFO_COMMAND_STATUS:
+ isp_prt(isp, ISP_LOGTINFO, "SRR[0x%08x] Got an FCP RSP SRR- resending status", atp->tag);
+ atp->sendst = 1;
+ /*
+ * We have to restart a FCP_RSP IU transaction
+ */
+ break;
+ case R_CTL_INFO_DATA_DESCRIPTOR:
+ /*
+ * We have to restart an FCP DATA in transaction
+ */
+ isp_prt(isp, ISP_LOGWARN, "Got an FCP DATA IN SRR- dropping");
+ goto fail;
+
+ default:
+ isp_prt(isp, ISP_LOGWARN, "Got an unknown information (%x) SRR- dropping", inot->in_srr_iu);
+ goto fail;
+ }
+
+ /*
+ * We can't do anything until this is acked, so we might as well start it now.
+ * We aren't going to do the usual asynchronous ack issue because we need
+ * to make sure this gets on the wire first.
+ */
+ if (isp_notify_ack(isp, inot)) {
+ isp_prt(isp, ISP_LOGWARN, "could not push positive ack for SRR- you lose");
+ goto fail;
+ }
+ isp_target_start_ctio(isp, ccb, FROM_SRR);
+ return;
+fail:
+ inot->in_reserved = 1;
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot);
+ ccb->ccb_h.status &= ~CAM_STATUS_MASK;
+ ccb->ccb_h.status |= CAM_REQ_CMP_ERR;
+ isp_complete_ctio(ccb);
+ return;
+mdp:
+ if (isp_notify_ack(isp, inot)) {
+ isp_prt(isp, ISP_LOGWARN, "could not push positive ack for SRR- you lose");
+ goto fail;
+ }
+ ccb->ccb_h.status &= ~CAM_STATUS_MASK;
+ ccb->ccb_h.status = CAM_MESSAGE_RECV;
+ /*
+ * This is not a strict interpretation of MDP, but it's close
+ */
+ ccb->csio.msg_ptr = &ccb->csio.sense_data.sense_buf[SSD_FULL_SIZE - 16];
+ ccb->csio.msg_len = 7;
+ ccb->csio.msg_ptr[0] = MSG_EXTENDED;
+ ccb->csio.msg_ptr[1] = 5;
+ ccb->csio.msg_ptr[2] = 0; /* modify data pointer */
+ ccb->csio.msg_ptr[3] = srr_off >> 24;
+ ccb->csio.msg_ptr[4] = srr_off >> 16;
+ ccb->csio.msg_ptr[5] = srr_off >> 8;
+ ccb->csio.msg_ptr[6] = srr_off;
+ isp_complete_ctio(ccb);
+}
+
+
+static void
+isp_handle_srr_notify(ispsoftc_t *isp, void *inot_raw)
+{
+ tstate_t *tptr;
+ in_fcentry_24xx_t *inot = inot_raw;
+ atio_private_data_t *atp;
+ uint32_t tag = inot->in_rxid;
+ uint32_t bus = inot->in_vpidx;
+
+ if (!IS_24XX(isp)) {
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot_raw);
+ return;
+ }
+
+ tptr = get_lun_statep_from_tag(isp, bus, tag);
+ if (tptr == NULL) {
+ isp_prt(isp, ISP_LOGERR, "%s: cannot find tptr for tag %x in SRR Notify", __func__, tag);
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot);
+ return;
+ }
+ atp = isp_get_atpd(isp, tptr, tag);
+ if (atp == NULL) {
+ rls_lun_statep(isp, tptr);
+ isp_prt(isp, ISP_LOGERR, "%s: cannot find adjunct for %x in SRR Notify", __func__, tag);
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot);
+ return;
+ }
+ atp->srr_notify_rcvd = 1;
+ memcpy(atp->srr, inot, sizeof (atp->srr));
+ isp_prt(isp, ISP_LOGTINFO /* ISP_LOGTDEBUG0 */, "SRR[0x%08x] inot->in_rxid flags 0x%x srr_iu=%x reloff 0x%x", inot->in_rxid, inot->in_flags, inot->in_srr_iu,
+ inot->in_srr_reloff_lo | (inot->in_srr_reloff_hi << 16));
+ if (atp->srr_ccb)
+ isp_handle_srr_start(isp, tptr, atp);
+ rls_lun_statep(isp, tptr);
+}
+
static void
isp_handle_platform_ctio(ispsoftc_t *isp, void *arg)
{
union ccb *ccb;
- int sentstatus, ok, notify_cam, resid = 0;
+ int sentstatus = 0, ok = 0, notify_cam = 0, resid = 0, moved_data = 0, failure = 0;
tstate_t *tptr = NULL;
atio_private_data_t *atp = NULL;
int bus;
- uint32_t tval, handle;
+ uint32_t handle;
/*
* CTIO handles are 16 bits.
@@ -2446,147 +2845,155 @@ isp_handle_platform_ctio(ispsoftc_t *isp, void *arg)
return;
}
isp_destroy_tgt_handle(isp, handle);
+ isp_free_pcmd(isp, ccb);
+ if (isp->isp_nactive) {
+ isp->isp_nactive--;
+ }
+
bus = XS_CHANNEL(ccb);
tptr = get_lun_statep(isp, bus, XS_LUN(ccb));
if (tptr == NULL) {
tptr = get_lun_statep(isp, bus, CAM_LUN_WILDCARD);
}
- KASSERT((tptr != NULL), ("cannot get state pointer"));
- if (isp->isp_nactive) {
- isp->isp_nactive++;
+ if (tptr == NULL) {
+ isp_prt(isp, ISP_LOGERR, "%s: cannot find tptr for tag %x after I/O", __func__, ccb->csio.tag_id);
+ return;
}
+
+ if (IS_24XX(isp)) {
+ atp = isp_get_atpd(isp, tptr, ((ct7_entry_t *)arg)->ct_rxid);
+ } else if (IS_FC(isp)) {
+ atp = isp_get_atpd(isp, tptr, ((ct2_entry_t *)arg)->ct_rxid);
+ } else {
+ atp = isp_get_atpd(isp, tptr, ((ct_entry_t *)arg)->ct_fwhandle);
+ }
+ if (atp == NULL) {
+ rls_lun_statep(isp, tptr);
+ isp_prt(isp, ISP_LOGERR, "%s: cannot find adjunct for %x after I/O", __func__, ccb->csio.tag_id);
+ return;
+ }
+ KASSERT((atp->ctcnt > 0), ("ctio count not greater than zero"));
+ atp->ctcnt -= 1;
+ ccb->ccb_h.status &= ~CAM_STATUS_MASK;
+
if (IS_24XX(isp)) {
ct7_entry_t *ct = arg;
- atp = isp_get_atpd(isp, tptr, ct->ct_rxid);
- if (atp == NULL) {
+ if (ct->ct_nphdl == CT7_SRR) {
+ atp->srr_ccb = ccb;
+ if (atp->srr_notify_rcvd)
+ isp_handle_srr_start(isp, tptr, atp);
rls_lun_statep(isp, tptr);
- isp_prt(isp, ISP_LOGERR, "%s: cannot find adjunct for %x after I/O", __func__, ct->ct_rxid);
return;
}
-
- sentstatus = ct->ct_flags & CT7_SENDSTATUS;
- ok = (ct->ct_nphdl == CT7_OK);
- if (ok && sentstatus && (ccb->ccb_h.flags & CAM_SEND_SENSE)) {
- ccb->ccb_h.status |= CAM_SENT_SENSE;
- }
- notify_cam = ct->ct_header.rqs_seqno & 0x1;
- if ((ct->ct_flags & CT7_DATAMASK) != CT7_NO_DATA) {
- resid = ct->ct_resid;
- atp->bytes_xfered += (atp->last_xframt - resid);
- atp->last_xframt = 0;
- }
if (ct->ct_nphdl == CT_HBA_RESET) {
- ok = 0;
- notify_cam = 1;
- sentstatus = 1;
- ccb->ccb_h.status |= CAM_UNREC_HBA_ERROR;
- } else if (!ok) {
- ccb->ccb_h.status |= CAM_REQ_CMP_ERR;
+ failure = CAM_UNREC_HBA_ERROR;
+ } else {
+ sentstatus = ct->ct_flags & CT7_SENDSTATUS;
+ ok = (ct->ct_nphdl == CT7_OK);
+ notify_cam = ct->ct_header.rqs_seqno & 0x1;
+ if ((ct->ct_flags & CT7_DATAMASK) != CT7_NO_DATA) {
+ resid = ct->ct_resid;
+ moved_data = 1;
+ }
}
- tval = atp->tag;
isp_prt(isp, ok? ISP_LOGTDEBUG0 : ISP_LOGWARN, "%s: CTIO7[%x] sts 0x%x flg 0x%x sns %d resid %d %s", __func__,
ct->ct_rxid, ct->ct_nphdl, ct->ct_flags, (ccb->ccb_h.status & CAM_SENT_SENSE) != 0, resid, sentstatus? "FIN" : "MID");
- atp->state = ATPD_STATE_PDON; /* XXX: should really come after isp_complete_ctio */
} else if (IS_FC(isp)) {
ct2_entry_t *ct = arg;
-
- atp = isp_get_atpd(isp, tptr, ct->ct_rxid);
- if (atp == NULL) {
+ if (ct->ct_status == CT_SRR) {
+ atp->srr_ccb = ccb;
+ if (atp->srr_notify_rcvd)
+ isp_handle_srr_start(isp, tptr, atp);
rls_lun_statep(isp, tptr);
- isp_prt(isp, ISP_LOGERR, "%s: cannot find adjunct for %x after I/O", __func__, ct->ct_rxid);
+ isp_target_putback_atio(ccb);
return;
}
- sentstatus = ct->ct_flags & CT2_SENDSTATUS;
- ok = (ct->ct_status & ~QLTM_SVALID) == CT_OK;
- if (ok && sentstatus && (ccb->ccb_h.flags & CAM_SEND_SENSE)) {
- ccb->ccb_h.status |= CAM_SENT_SENSE;
- }
- notify_cam = ct->ct_header.rqs_seqno & 0x1;
- if ((ct->ct_flags & CT2_DATAMASK) != CT2_NO_DATA) {
- resid = ct->ct_resid;
- atp->bytes_xfered += (atp->last_xframt - resid);
- atp->last_xframt = 0;
- }
if (ct->ct_status == CT_HBA_RESET) {
- ok = 0;
- notify_cam = 1;
- sentstatus = 1;
- ccb->ccb_h.status |= CAM_UNREC_HBA_ERROR;
- } else if (!ok) {
- ccb->ccb_h.status |= CAM_REQ_CMP_ERR;
+ failure = CAM_UNREC_HBA_ERROR;
+ } else {
+ sentstatus = ct->ct_flags & CT2_SENDSTATUS;
+ ok = (ct->ct_status & ~QLTM_SVALID) == CT_OK;
+ notify_cam = ct->ct_header.rqs_seqno & 0x1;
+ if ((ct->ct_flags & CT2_DATAMASK) != CT2_NO_DATA) {
+ resid = ct->ct_resid;
+ moved_data = 1;
+ }
}
isp_prt(isp, ok? ISP_LOGTDEBUG0 : ISP_LOGWARN, "%s: CTIO2[%x] sts 0x%x flg 0x%x sns %d resid %d %s", __func__,
ct->ct_rxid, ct->ct_status, ct->ct_flags, (ccb->ccb_h.status & CAM_SENT_SENSE) != 0, resid, sentstatus? "FIN" : "MID");
- tval = atp->tag;
- atp->state = ATPD_STATE_PDON; /* XXX: should really come after isp_complete_ctio */
} else {
ct_entry_t *ct = arg;
- sentstatus = ct->ct_flags & CT_SENDSTATUS;
- ok = (ct->ct_status & ~QLTM_SVALID) == CT_OK;
- /*
- * We *ought* to be able to get back to the original ATIO
- * here, but for some reason this gets lost. It's just as
- * well because it's squirrelled away as part of periph
- * private data.
- *
- * We can live without it as long as we continue to use
- * the auto-replenish feature for CTIOs.
- */
- notify_cam = ct->ct_header.rqs_seqno & 0x1;
+
if (ct->ct_status == (CT_HBA_RESET & 0xff)) {
- ok = 0;
- notify_cam = 1;
- sentstatus = 1;
- ccb->ccb_h.status |= CAM_UNREC_HBA_ERROR;
- } else if (!ok) {
- ccb->ccb_h.status |= CAM_REQ_CMP_ERR;
- } else if (ct->ct_status & QLTM_SVALID) {
- char *sp = (char *)ct;
- sp += CTIO_SENSE_OFFSET;
- ccb->csio.sense_len = min(sizeof (ccb->csio.sense_data), QLTM_SENSELEN);
- ISP_MEMCPY(&ccb->csio.sense_data, sp, ccb->csio.sense_len);
- ccb->ccb_h.status |= CAM_AUTOSNS_VALID;
+ failure = CAM_UNREC_HBA_ERROR;
+ } else {
+ sentstatus = ct->ct_flags & CT_SENDSTATUS;
+ ok = (ct->ct_status & ~QLTM_SVALID) == CT_OK;
+ notify_cam = ct->ct_header.rqs_seqno & 0x1;
}
if ((ct->ct_flags & CT_DATAMASK) != CT_NO_DATA) {
resid = ct->ct_resid;
+ moved_data = 1;
}
isp_prt(isp, ISP_LOGTDEBUG0, "%s: CTIO[%x] tag %x S_ID 0x%x lun %d sts %x flg %x resid %d %s", __func__,
ct->ct_fwhandle, ct->ct_tag_val, ct->ct_iid, ct->ct_lun, ct->ct_status, ct->ct_flags, resid, sentstatus? "FIN" : "MID");
- tval = ct->ct_fwhandle;
}
- ccb->csio.resid += resid;
+ if (ok) {
+ if (moved_data) {
+ ccb->csio.resid += resid;
+ atp->bytes_xfered += (atp->last_xframt - resid);
+ atp->last_xframt = 0;
+ }
+ if (sentstatus && (ccb->ccb_h.flags & CAM_SEND_SENSE)) {
+ ccb->ccb_h.status |= CAM_SENT_SENSE;
+ }
+ ccb->ccb_h.status |= CAM_REQ_CMP;
+ } else {
+ notify_cam = 1;
+ if (failure == CAM_UNREC_HBA_ERROR)
+ ccb->ccb_h.status |= CAM_UNREC_HBA_ERROR;
+ else
+ ccb->ccb_h.status |= CAM_REQ_CMP_ERR;
+ }
+ atp->state = ATPD_STATE_PDON;
+ rls_lun_statep(isp, tptr);
/*
- * We're here either because intermediate data transfers are done
- * and/or the final status CTIO (which may have joined with a
- * Data Transfer) is done.
- *
- * In any case, for this platform, the upper layers figure out
- * what to do next, so all we do here is collect status and
- * pass information along. Any DMA handles have already been
- * freed.
+ * We never *not* notify CAM when there has been any error (ok == 0),
+ * so we never need to do an ATIO putback if we're not notifying CAM.
*/
+ isp_prt(isp, ISP_LOGTDEBUG0, "%s CTIO[0x%x] done (notify_cam=%d nowsendstatus=%d)", (sentstatus)? " FINAL " : "MIDTERM ", atp->tag, notify_cam, atp->sendst);
if (notify_cam == 0) {
- isp_prt(isp, ISP_LOGTDEBUG0, " INTER CTIO[0x%x] done", tval);
+ if (atp->sendst) {
+ isp_target_start_ctio(isp, ccb, FROM_CTIO_DONE);
+ }
return;
}
- if (tptr) {
- rls_lun_statep(isp, tptr);
- }
- isp_prt(isp, ISP_LOGTDEBUG0, "%s CTIO[0x%x] done", (sentstatus)? " FINAL " : "MIDTERM ", tval);
- if (!ok && !IS_24XX(isp)) {
- isp_target_putback_atio(ccb);
- } else {
+ /*
+ * We're telling CAM we're done with this CTIO transaction.
+ *
+ * 24XX cards never need an ATIO put back.
+ *
+ * Other cards need one put back only on error.
+ * In the latter case, a timeout will re-fire
+ * and try again in case we didn't have
+ * queue resources to do so at first. In any case,
+ * once the putback is done we do the completion
+ * call.
+ */
+ if (ok || IS_24XX(isp)) {
isp_complete_ctio(ccb);
+ } else {
+ isp_target_putback_atio(ccb);
}
}
static void
isp_handle_platform_notify_scsi(ispsoftc_t *isp, in_entry_t *inot)
{
- (void) isp_notify_ack(isp, inot);
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot);
}
static void
@@ -2649,9 +3056,9 @@ isp_handle_platform_notify_fc(ispsoftc_t *isp, in_fcentry_t *inp)
if (inot) {
tptr->inot_count--;
SLIST_REMOVE_HEAD(&tptr->inots, sim_links.sle);
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, inot->ccb_h.path, "%s: Take FREE INOT count now %d\n", __func__, tptr->inot_count);
+ ISP_PATH_PRT(isp, ISP_LOGTDEBUG2, inot->ccb_h.path, "%s: Take FREE INOT count now %d\n", __func__, tptr->inot_count);
} else {
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, tptr->owner, "out of INOT structures\n");
+ ISP_PATH_PRT(isp, ISP_LOGWARN, tptr->owner, "out of INOT structures\n");
}
} else {
ISP_PATH_PRT(isp, ISP_LOGWARN, tptr->owner, "abort task RX_ID %x from wwn 0x%016llx, state unknown\n", inp->in_seqid, wwn);
@@ -2680,7 +3087,7 @@ isp_handle_platform_notify_fc(ispsoftc_t *isp, in_fcentry_t *inp)
break;
}
if (needack) {
- (void) isp_notify_ack(isp, inp);
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inp);
}
}
@@ -2688,6 +3095,7 @@ static void
isp_handle_platform_notify_24xx(ispsoftc_t *isp, in_fcentry_24xx_t *inot)
{
uint16_t nphdl;
+ uint16_t prli_options = 0;
uint32_t portid;
fcportdb_t *lp;
uint8_t *ptr = NULL;
@@ -2737,10 +3145,12 @@ isp_handle_platform_notify_24xx(ispsoftc_t *isp, in_fcentry_24xx_t *inot)
/*
* Treat PRLI the same as PLOGI and make a database entry for it.
*/
- if (inot->in_status_subcode == PLOGI)
+ if (inot->in_status_subcode == PLOGI) {
msg = "PLOGI";
- else
+ } else {
+ prli_options = inot->in_prli_options;
msg = "PRLI";
+ }
if (ISP_FW_NEWER_THAN(isp, 4, 0, 25)) {
ptr = (uint8_t *)inot; /* point to unswizzled entry! */
wwn = (((uint64_t) ptr[IN24XX_PLOGI_WWPN_OFF]) << 56) |
@@ -2754,7 +3164,7 @@ isp_handle_platform_notify_24xx(ispsoftc_t *isp, in_fcentry_24xx_t *inot)
} else {
wwn = INI_NONE;
}
- isp_add_wwn_entry(isp, chan, wwn, nphdl, portid);
+ isp_add_wwn_entry(isp, chan, wwn, nphdl, portid, prli_options);
break;
case PDISC:
msg = "PDISC";
@@ -2773,7 +3183,7 @@ isp_handle_platform_notify_24xx(ispsoftc_t *isp, in_fcentry_24xx_t *inot)
}
isp_prt(isp, ISP_LOGTDEBUG0, "%s Chan %d ELS N-port handle %x PortID 0x%06x RX_ID 0x%x OX_ID 0x%x", msg, chan, nphdl, portid,
inot->in_rxid, inot->in_oxid);
- (void) isp_notify_ack(isp, inot);
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot);
break;
}
@@ -2800,14 +3210,30 @@ isp_handle_platform_notify_24xx(ispsoftc_t *isp, in_fcentry_24xx_t *inot)
* this initiator (known by N-port handle).
*/
/* XXX IMPLEMENT XXX */
- (void) isp_notify_ack(isp, inot);
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot);
break;
+ case IN24XX_SRR_RCVD:
+#ifdef ISP_TARGET_MODE
+ isp_handle_srr_notify(isp, inot);
+ break;
+#else
+ if (ptr == NULL) {
+ ptr = "SRR RCVD";
+ }
+ /* FALLTHROUGH */
+#endif
case IN24XX_LINK_RESET:
+ if (ptr == NULL) {
+ ptr = "LINK RESET";
+ }
case IN24XX_LINK_FAILED:
- case IN24XX_SRR_RCVD:
+ if (ptr == NULL) {
+ ptr = "LINK FAILED";
+ }
default:
- (void) isp_notify_ack(isp, inot);
+ isp_prt(isp, ISP_LOGWARN, "Chan %d %s", ISP_GET_VPIDX(isp, inot->in_vpidx), ptr);
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot);
break;
}
}
@@ -2905,6 +3331,9 @@ isp_handle_platform_target_notify_ack(ispsoftc_t *isp, isp_notify_t *mp)
*/
if (mp->nt_need_ack) {
isp_prt(isp, ISP_LOGTINFO, "Notify Code 0x%x (qevalid=%d) being acked", mp->nt_ncode, mp->nt_lreserved != NULL);
+ /*
+ * Don't need to use the guaranteed send because the caller can retry
+ */
return (isp_notify_ack(isp, mp->nt_lreserved));
}
return (0);
@@ -3003,7 +3432,7 @@ isp_handle_platform_target_tmf(ispsoftc_t *isp, isp_notify_t *notify)
tptr->inot_count--;
SLIST_REMOVE_HEAD(&tptr->inots, sim_links.sle);
rls_lun_statep(isp, tptr);
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, inot->ccb_h.path, "%s: Take FREE INOT count now %d\n", __func__, tptr->inot_count);
+ ISP_PATH_PRT(isp, ISP_LOGTDEBUG2, inot->ccb_h.path, "%s: Take FREE INOT count now %d\n", __func__, tptr->inot_count);
inot->ccb_h.status = CAM_MESSAGE_RECV;
xpt_done((union ccb *)inot);
return;
@@ -3013,9 +3442,11 @@ bad:
}
if (notify->nt_need_ack && notify->nt_lreserved) {
if (((isphdr_t *)notify->nt_lreserved)->rqs_entry_type == RQSTYPE_ABTS_RCVD) {
- (void) isp_acknak_abts(isp, notify->nt_lreserved, ENOMEM);
+ if (isp_acknak_abts(isp, notify->nt_lreserved, ENOMEM)) {
+ isp_prt(isp, ISP_LOGWARN, "you lose- unable to send an ACKNAK");
+ }
} else {
- (void) isp_notify_ack(isp, notify->nt_lreserved);
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, notify->nt_lreserved);
}
}
}
@@ -3182,7 +3613,7 @@ isptargstart(struct cam_periph *periph, union ccb *iccb)
'O', 'R', 'Y', ' ', 'D', 'I', 'S', 'K',
'0', '0', '0', '1'
};
- int i, more = 0, last;
+ int r, i, more = 0, last;
struct isptarg_softc *softc = periph->softc;
struct ccb_scsiio *csio;
lun_id_t return_lun;
@@ -3193,7 +3624,7 @@ isptargstart(struct cam_periph *periph, union ccb *iccb)
struct ccb_hdr *ccbh;
mtx_assert(periph->sim->mtx, MA_OWNED);
- ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG0, iccb->ccb_h.path, "%s: function code 0x%x INOTQ=%c WORKQ=%c REWORKQ=%c\n", __func__, iccb->ccb_h.func_code,
+ ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG1, iccb->ccb_h.path, "%s: function code 0x%x INOTQ=%c WORKQ=%c REWORKQ=%c\n", __func__, iccb->ccb_h.func_code,
TAILQ_FIRST(&softc->inot_queue)? 'y' : 'n', TAILQ_FIRST(&softc->work_queue)? 'y' : 'n', TAILQ_FIRST(&softc->rework_queue)? 'y' : 'n');
/*
* Check for immediate notifies first
@@ -3219,7 +3650,7 @@ isptargstart(struct cam_periph *periph, union ccb *iccb)
} else {
ccbh = TAILQ_FIRST(&softc->work_queue);
if (ccbh == NULL) {
- ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG0, iccb->ccb_h.path, "%s: woken up but no work?\n", __func__);
+ ISP_PATH_PRT(softc->isp, ISP_LOGWARN, iccb->ccb_h.path, "%s: woken up but no work?\n", __func__);
xpt_release_ccb(iccb);
return;
}
@@ -3240,7 +3671,7 @@ isptargstart(struct cam_periph *periph, union ccb *iccb)
flags = CAM_SEND_STATUS;
memset(&atio->sense_data, 0, sizeof (atio->sense_data));
cdb = atio->cdb_io.cdb_bytes;
- ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG0, ccbh->path, "%s: [0x%x] processing ATIO from 0x%x CDB=0x%x data_offset=%u\n", __func__, atio->tag_id, atio->init_id,
+ ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG1, ccbh->path, "%s: [0x%x] processing ATIO from 0x%x CDB=0x%x data_offset=%u\n", __func__, atio->tag_id, atio->init_id,
cdb[0], atio->ccb_h.ccb_data_offset);
return_lun = XS_LUN(atio);
@@ -3248,9 +3679,9 @@ isptargstart(struct cam_periph *periph, union ccb *iccb)
xpt_print(atio->ccb_h.path, "[0x%x] Non-Zero Lun %d: cdb0=0x%x\n", atio->tag_id, return_lun, cdb[0]);
if (cdb[0] != INQUIRY && cdb[0] != REPORT_LUNS && cdb[0] != REQUEST_SENSE) {
status = SCSI_STATUS_CHECK_COND;
- SDFIXED(atio->sense_data)->error_code = SSD_ERRCODE_VALID|SSD_CURRENT_ERROR|SSD_KEY_ILLEGAL_REQUEST;
- SDFIXED(atio->sense_data)->add_sense_code = 0x25;
- SDFIXED(atio->sense_data)->add_sense_code_qual = 0x0;
+ SDFIXED(atio->sense_data)->error_code = SSD_ERRCODE_VALID|SSD_CURRENT_ERROR;
+ SDFIXED(atio->sense_data)->flags = SSD_KEY_ILLEGAL_REQUEST;
+ SDFIXED(atio->sense_data)->add_sense_code = 0x25; /* LOGICAL UNIT NOT SUPPORTED */
atio->sense_len = SSD_MIN_SIZE;
}
return_lun = CAM_LUN_WILDCARD;
@@ -3273,11 +3704,16 @@ isptargstart(struct cam_periph *periph, union ccb *iccb)
case READ_10:
case READ_12:
case READ_16:
- if (isptarg_rwparm(cdb, disk_data, disk_size, atio->ccb_h.ccb_data_offset, &data_ptr, &data_len, &last)) {
+ r = isptarg_rwparm(cdb, disk_data, disk_size, atio->ccb_h.ccb_data_offset, &data_ptr, &data_len, &last);
+ if (r != 0) {
status = SCSI_STATUS_CHECK_COND;
- SDFIXED(atio->sense_data)->error_code = SSD_ERRCODE_VALID|SSD_CURRENT_ERROR|SSD_KEY_UNIT_ATTENTION;
- SDFIXED(atio->sense_data)->add_sense_code = 0x5;
- SDFIXED(atio->sense_data)->add_sense_code_qual = 0x24;
+ SDFIXED(atio->sense_data)->error_code = SSD_ERRCODE_VALID|SSD_CURRENT_ERROR;
+ SDFIXED(atio->sense_data)->flags = SSD_KEY_ILLEGAL_REQUEST;
+ if (r == -1) {
+ SDFIXED(atio->sense_data)->add_sense_code = 0x21; /* LOGICAL BLOCK ADDRESS OUT OF RANGE */
+ } else {
+ SDFIXED(atio->sense_data)->add_sense_code = 0x20; /* INVALID COMMAND OPERATION CODE */
+ }
atio->sense_len = SSD_MIN_SIZE;
} else {
#ifdef ISP_FORCE_TIMEOUT
@@ -3312,11 +3748,16 @@ isptargstart(struct cam_periph *periph, union ccb *iccb)
case WRITE_10:
case WRITE_12:
case WRITE_16:
- if (isptarg_rwparm(cdb, disk_data, disk_size, atio->ccb_h.ccb_data_offset, &data_ptr, &data_len, &last)) {
+ r = isptarg_rwparm(cdb, disk_data, disk_size, atio->ccb_h.ccb_data_offset, &data_ptr, &data_len, &last);
+ if (r != 0) {
status = SCSI_STATUS_CHECK_COND;
- SDFIXED(atio->sense_data)->error_code = SSD_ERRCODE_VALID|SSD_CURRENT_ERROR|SSD_KEY_UNIT_ATTENTION;
- SDFIXED(atio->sense_data)->add_sense_code = 0x5;
- SDFIXED(atio->sense_data)->add_sense_code_qual = 0x24;
+ SDFIXED(atio->sense_data)->error_code = SSD_ERRCODE_VALID|SSD_CURRENT_ERROR;
+ SDFIXED(atio->sense_data)->flags = SSD_KEY_ILLEGAL_REQUEST;
+ if (r == -1) {
+ SDFIXED(atio->sense_data)->add_sense_code = 0x21; /* LOGICAL BLOCK ADDRESS OUT OF RANGE */
+ } else {
+ SDFIXED(atio->sense_data)->add_sense_code = 0x20; /* INVALID COMMAND OPERATION CODE */
+ }
atio->sense_len = SSD_MIN_SIZE;
} else {
#ifdef ISP_FORCE_TIMEOUT
@@ -3351,9 +3792,9 @@ isptargstart(struct cam_periph *periph, union ccb *iccb)
flags |= CAM_DIR_IN;
if (cdb[1] || cdb[2] || cdb[3]) {
status = SCSI_STATUS_CHECK_COND;
- SDFIXED(atio->sense_data)->error_code = SSD_ERRCODE_VALID|SSD_CURRENT_ERROR|SSD_KEY_UNIT_ATTENTION;
- SDFIXED(atio->sense_data)->add_sense_code = 0x5;
- SDFIXED(atio->sense_data)->add_sense_code_qual = 0x20;
+ SDFIXED(atio->sense_data)->error_code = SSD_ERRCODE_VALID|SSD_CURRENT_ERROR;
+ SDFIXED(atio->sense_data)->flags = SSD_KEY_UNIT_ATTENTION;
+ SDFIXED(atio->sense_data)->add_sense_code = 0x24; /* INVALID FIELD IN CDB */
atio->sense_len = SSD_MIN_SIZE;
break;
}
@@ -3375,9 +3816,9 @@ isptargstart(struct cam_periph *periph, union ccb *iccb)
if (ca) {
ca = 0;
status = SCSI_STATUS_CHECK_COND;
- SDFIXED(atio->sense_data)->error_code = SSD_ERRCODE_VALID|SSD_CURRENT_ERROR|SSD_KEY_UNIT_ATTENTION;
- SDFIXED(atio->sense_data)->add_sense_code = 0x28;
- SDFIXED(atio->sense_data)->add_sense_code_qual = 0x0;
+ SDFIXED(atio->sense_data)->error_code = SSD_ERRCODE_VALID|SSD_CURRENT_ERROR;
+ SDFIXED(atio->sense_data)->flags = SSD_KEY_UNIT_ATTENTION;
+ SDFIXED(atio->sense_data)->add_sense_code = 0x29; /* POWER ON, RESET, OR BUS DEVICE RESET OCCURRED */
atio->sense_len = SSD_MIN_SIZE;
}
break;
@@ -3393,9 +3834,9 @@ isptargstart(struct cam_periph *periph, union ccb *iccb)
flags |= CAM_DIR_IN;
if (cdb[2] || cdb[3] || cdb[4] || cdb[5]) {
status = SCSI_STATUS_CHECK_COND;
- SDFIXED(atio->sense_data)->error_code = SSD_ERRCODE_VALID|SSD_CURRENT_ERROR|SSD_KEY_UNIT_ATTENTION;
- SDFIXED(atio->sense_data)->add_sense_code = 0x5;
- SDFIXED(atio->sense_data)->add_sense_code_qual = 0x24;
+ SDFIXED(atio->sense_data)->error_code = SSD_ERRCODE_VALID|SSD_CURRENT_ERROR;
+ SDFIXED(atio->sense_data)->flags = SSD_KEY_ILLEGAL_REQUEST;
+ SDFIXED(atio->sense_data)->add_sense_code = 0x24; /* INVALID FIELD IN CDB */
atio->sense_len = SSD_MIN_SIZE;
break;
}
@@ -3447,9 +3888,9 @@ isptargstart(struct cam_periph *periph, union ccb *iccb)
default:
flags |= CAM_DIR_NONE;
status = SCSI_STATUS_CHECK_COND;
- SDFIXED(atio->sense_data)->error_code = SSD_ERRCODE_VALID|SSD_CURRENT_ERROR|SSD_KEY_UNIT_ATTENTION;
- SDFIXED(atio->sense_data)->add_sense_code = 0x5;
- SDFIXED(atio->sense_data)->add_sense_code_qual = 0x20;
+ SDFIXED(atio->sense_data)->error_code = SSD_ERRCODE_VALID|SSD_CURRENT_ERROR;
+ SDFIXED(atio->sense_data)->flags = SSD_KEY_ILLEGAL_REQUEST;
+ SDFIXED(atio->sense_data)->add_sense_code = 0x20; /* INVALID COMMAND OPERATION CODE */
atio->sense_len = SSD_MIN_SIZE;
break;
}
@@ -3492,7 +3933,7 @@ isptargctor(struct cam_periph *periph, void *arg)
periph->softc = softc;
softc->periph = periph;
softc->path = periph->path;
- ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG0, periph->path, "%s called\n", __func__);
+ ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG1, periph->path, "%s called\n", __func__);
return (CAM_REQ_CMP);
}
@@ -3501,7 +3942,7 @@ isptargdtor(struct cam_periph *periph)
{
struct isptarg_softc *softc;
softc = (struct isptarg_softc *)periph->softc;
- ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG0, periph->path, "%s called\n", __func__);
+ ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG1, periph->path, "%s called\n", __func__);
softc->periph = NULL;
softc->path = NULL;
periph->softc = NULL;
@@ -3523,13 +3964,13 @@ isptarg_done(struct cam_periph *periph, union ccb *ccb)
switch (ccb->ccb_h.func_code) {
case XPT_ACCEPT_TARGET_IO:
atio = (struct ccb_accept_tio *) ccb;
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "[0x%x] ATIO seen in %s\n", atio->tag_id, __func__);
+ ISP_PATH_PRT(isp, ISP_LOGTDEBUG1, ccb->ccb_h.path, "[0x%x] ATIO seen in %s\n", atio->tag_id, __func__);
TAILQ_INSERT_TAIL(&softc->work_queue, &ccb->ccb_h, periph_links.tqe);
xpt_schedule(periph, 1);
break;
case XPT_IMMEDIATE_NOTIFY:
inot = (struct ccb_immediate_notify *) ccb;
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "[0x%x] INOT for 0x%x seen in %s\n", inot->tag_id, inot->seq_id, __func__);
+ ISP_PATH_PRT(isp, ISP_LOGTDEBUG1, ccb->ccb_h.path, "[0x%x] INOT for 0x%x seen in %s\n", inot->tag_id, inot->seq_id, __func__);
TAILQ_INSERT_TAIL(&softc->inot_queue, &ccb->ccb_h, periph_links.tqe);
xpt_schedule(periph, 1);
break;
@@ -3540,8 +3981,16 @@ isptarg_done(struct cam_periph *periph, union ccb *ccb)
}
atio = ccb->ccb_h.ccb_atio;
if ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) {
- cam_error_print(ccb, CAM_ESF_ALL, CAM_EPF_ALL);
- xpt_action((union ccb *)atio);
+ if ((ccb->ccb_h.status & CAM_STATUS_MASK) == CAM_MESSAGE_RECV) {
+ uint32_t newoff = (ccb->csio.msg_ptr[3] << 24) | (ccb->csio.msg_ptr[4] << 16) | (ccb->csio.msg_ptr[5] << 8) | (ccb->csio.msg_ptr[6]);
+ ISP_PATH_PRT(isp, ISP_LOGWARN, ccb->ccb_h.path, "[0x%08x] got message to return to reset offset to 0x%x\n", atio->tag_id, newoff);
+ atio->ccb_h.ccb_data_offset = newoff;
+ TAILQ_INSERT_TAIL(&softc->rework_queue, &atio->ccb_h, periph_links.tqe);
+ xpt_schedule(periph, 1);
+ } else {
+ cam_error_print(ccb, CAM_ESF_ALL, CAM_EPF_ALL);
+ xpt_action((union ccb *)atio);
+ }
} else if ((ccb->ccb_h.flags & CAM_SEND_STATUS) == 0) {
ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "[0x%x] MID CTIO seen in %s\n", atio->tag_id, __func__);
TAILQ_INSERT_TAIL(&softc->rework_queue, &atio->ccb_h, periph_links.tqe);
@@ -3558,7 +4007,7 @@ isptarg_done(struct cam_periph *periph, union ccb *ccb)
ccb->ccb_h.status &= ~CAM_DEV_QFRZN;
}
inot = ccb->ccb_h.ccb_inot;
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, inot->ccb_h.path, "[0x%x] recycle notify for tag 0x%x\n", inot->tag_id, inot->seq_id);
+ ISP_PATH_PRT(isp, ISP_LOGTDEBUG1, inot->ccb_h.path, "[0x%x] recycle notify for tag 0x%x\n", inot->tag_id, inot->seq_id);
xpt_release_ccb(ccb);
xpt_action((union ccb *)inot);
break;
@@ -3890,7 +4339,7 @@ isptarg_rwparm(uint8_t *cdb, uint8_t *dp, uint64_t dl, uint32_t offset, uint8_t
}
if (lba + cnt > dl) {
- return (-1);
+ return (-2);
}
@@ -3976,14 +4425,6 @@ isp_watchdog(void *arg)
handle = isp_find_handle(isp, xs);
- if (handle != ISP_HANDLE_FREE && !XS_CMD_WPEND_P(xs)) {
- isp_xs_prt(isp, xs, ISP_LOGWARN, "first watchdog (handle 0x%x) timed out- deferring for grace period", handle);
- callout_reset(&PISP_PCMD(xs)->wdog, 2 * hz, isp_watchdog, xs);
- XS_CMD_S_WPEND(xs);
- return;
- }
- XS_C_TACTIVE(xs);
-
/*
* Hand crank the interrupt code just to be sure the command isn't stuck somewhere.
*/
@@ -4031,7 +4472,8 @@ isp_watchdog(void *arg)
}
isp_destroy_handle(isp, handle);
isp_prt(isp, ISP_LOGERR, "%s: timeout for handle 0x%x", __func__, handle);
- XS_SETERR(xs, CAM_CMD_TIMEOUT);
+ xs->ccb_h.status &= ~CAM_STATUS_MASK;
+ xs->ccb_h.status |= CAM_CMD_TIMEOUT;
isp_prt_endcmd(isp, xs);
isp_done(xs);
} else {
@@ -4122,7 +4564,7 @@ isp_gdt_task(void *arg, int pending)
continue;
}
if (lp->gone_timer != 0) {
- isp_prt(isp, ISP_LOGSANCFG, "%s: Chan %d more to do for target %u (timer=%u)", __func__, chan, lp->dev_map_idx - 1, lp->gone_timer);
+ isp_prt(isp, ISP_LOG_SANCFG, "%s: Chan %d more to do for target %u (timer=%u)", __func__, chan, lp->dev_map_idx - 1, lp->gone_timer);
lp->gone_timer -= 1;
more_to_do++;
continue;
@@ -4139,7 +4581,7 @@ isp_gdt_task(void *arg, int pending)
callout_reset(&fc->gdt, hz, isp_gdt, fc);
} else {
callout_deactivate(&fc->gdt);
- isp_prt(isp, ISP_LOGSANCFG, "Chan %d Stopping Gone Device Timer @ %lu", chan, (unsigned long) time_uptime);
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Stopping Gone Device Timer @ %lu", chan, (unsigned long) time_uptime);
}
}
ISP_UNLOCK(isp);
@@ -4171,7 +4613,7 @@ isp_ldt_task(void *arg, int pending)
int dbidx, tgt, i;
ISP_LOCK(isp);
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Chan %d Loop Down Timer expired @ %lu", chan, (unsigned long) time_uptime);
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "Chan %d Loop Down Timer expired @ %lu", chan, (unsigned long) time_uptime);
callout_deactivate(&fc->ldt);
/*
@@ -4190,7 +4632,7 @@ isp_ldt_task(void *arg, int pending)
/*
* XXX: CLEAN UP AND COMPLETE ANY PENDING COMMANDS FIRST!
*/
-
+
for (i = 0; i < isp->isp_maxcmds; i++) {
struct ccb_scsiio *xs;
@@ -4211,7 +4653,7 @@ isp_ldt_task(void *arg, int pending)
/*
* Mark that we've announced that this device is gone....
*/
- lp->reserved = 1;
+ lp->announced = 1;
/*
* but *don't* change the state of the entry. Just clear
@@ -4254,7 +4696,7 @@ isp_kthread(void *arg)
for (;;) {
int lb, lim;
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "%s: Chan %d checking FC state", __func__, chan);
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "%s: Chan %d checking FC state", __func__, chan);
lb = isp_fc_runstate(isp, chan, 250000);
/*
@@ -4272,9 +4714,9 @@ isp_kthread(void *arg)
fc->loop_down_time += slp;
if (lb < 0) {
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "%s: Chan %d FC loop not up (down count %d)", __func__, chan, fc->loop_down_time);
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "%s: Chan %d FC loop not up (down count %d)", __func__, chan, fc->loop_down_time);
} else {
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "%s: Chan %d FC got to %d (down count %d)", __func__, chan, lb, fc->loop_down_time);
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "%s: Chan %d FC got to %d (down count %d)", __func__, chan, lb, fc->loop_down_time);
}
/*
@@ -4304,11 +4746,14 @@ isp_kthread(void *arg)
}
} else if (lb) {
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "%s: Chan %d FC Loop Down", __func__, chan);
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "%s: Chan %d FC Loop Down", __func__, chan);
fc->loop_down_time += slp;
- slp = 60;
+ if (fc->loop_down_time > 300)
+ slp = 0;
+ else
+ slp = 60;
} else {
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "%s: Chan %d FC state OK", __func__, chan);
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "%s: Chan %d FC state OK", __func__, chan);
fc->loop_down_time = 0;
slp = 0;
}
@@ -4326,7 +4771,7 @@ isp_kthread(void *arg)
isp_unfreeze_loopdown(isp, chan);
}
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "%s: Chan %d sleep time %d", __func__, chan, slp);
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "%s: Chan %d sleep time %d", __func__, chan, slp);
msleep(fc, &isp->isp_osinfo.lock, PRIBIO, "ispf", slp * hz);
@@ -4338,7 +4783,7 @@ isp_kthread(void *arg)
* to settle.
*/
if (slp == 0 && fc->hysteresis) {
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "%s: Chan %d sleep hysteresis ticks %d", __func__, chan, fc->hysteresis * hz);
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "%s: Chan %d sleep hysteresis ticks %d", __func__, chan, fc->hysteresis * hz);
mtx_unlock(&isp->isp_osinfo.lock);
pause("ispt", fc->hysteresis * hz);
mtx_lock(&isp->isp_osinfo.lock);
@@ -4355,7 +4800,7 @@ isp_action(struct cam_sim *sim, union ccb *ccb)
struct ccb_trans_settings *cts;
CAM_DEBUG(ccb->ccb_h.path, CAM_DEBUG_TRACE, ("isp_action\n"));
-
+
isp = (ispsoftc_t *)cam_sim_softc(sim);
mtx_assert(&isp->isp_lock, MA_OWNED);
@@ -4388,6 +4833,7 @@ isp_action(struct cam_sim *sim, union ccb *ccb)
break;
}
}
+ ccb->csio.req_map = NULL;
#ifdef DIAGNOSTIC
if (ccb->ccb_h.target_id > (ISP_MAX_TARGETS(isp) - 1)) {
xpt_print(ccb->ccb_h.path, "invalid target\n");
@@ -4412,7 +4858,6 @@ isp_action(struct cam_sim *sim, union ccb *ccb)
error = isp_start((XS_T *) ccb);
switch (error) {
case CMD_QUEUED:
- XS_CMD_S_CLEAR(ccb);
ccb->ccb_h.status |= CAM_SIM_QUEUED;
if (ccb->ccb_h.timeout == CAM_TIME_INFINITY) {
break;
@@ -4422,7 +4867,6 @@ isp_action(struct cam_sim *sim, union ccb *ccb)
ts = 60*1000;
}
ts = isp_mstohz(ts);
- XS_S_TACTIVE(ccb);
callout_reset(&PISP_PCMD(ccb)->wdog, ts, isp_watchdog, ccb);
break;
case CMD_RQLATER:
@@ -4449,7 +4893,7 @@ isp_action(struct cam_sim *sim, union ccb *ccb)
isp_prt(isp, ISP_LOGDEBUG0, "%d.%d retry later", XS_TGT(ccb), XS_LUN(ccb));
cam_freeze_devq(ccb->ccb_h.path);
cam_release_devq(ccb->ccb_h.path, RELSIM_RELEASE_AFTER_TIMEOUT, 0, 1000, 0);
- XS_SETERR(ccb, CAM_REQUEUE_REQ);
+ ccb->ccb_h.status = CAM_REQUEUE_REQ;
isp_free_pcmd(isp, ccb);
xpt_done(ccb);
break;
@@ -4457,7 +4901,7 @@ isp_action(struct cam_sim *sim, union ccb *ccb)
isp_free_pcmd(isp, ccb);
cam_freeze_devq(ccb->ccb_h.path);
cam_release_devq(ccb->ccb_h.path, RELSIM_RELEASE_AFTER_TIMEOUT, 0, 100, 0);
- XS_SETERR(ccb, CAM_REQUEUE_REQ);
+ ccb->ccb_h.status = CAM_REQUEUE_REQ;
xpt_done(ccb);
break;
case CMD_COMPLETE:
@@ -4465,7 +4909,7 @@ isp_action(struct cam_sim *sim, union ccb *ccb)
break;
default:
isp_prt(isp, ISP_LOGERR, "What's this? 0x%x at %d in file %s", error, __LINE__, __FILE__);
- XS_SETERR(ccb, CAM_REQ_CMP_ERR);
+ ccb->ccb_h.status = CAM_REQUEUE_REQ;
isp_free_pcmd(isp, ccb);
xpt_done(ccb);
}
@@ -4503,8 +4947,8 @@ isp_action(struct cam_sim *sim, union ccb *ccb)
ccb->ccb_h.status = CAM_DEV_NOT_THERE;
break;
}
- ccb->ccb_h.sim_priv.entries[0].field = 0;
- ccb->ccb_h.sim_priv.entries[1].ptr = isp;
+ ccb->ccb_h.spriv_field0 = 0;
+ ccb->ccb_h.spriv_ptr1 = isp;
ccb->ccb_h.flags = 0;
if (ccb->ccb_h.func_code == XPT_ACCEPT_TARGET_IO) {
@@ -4516,7 +4960,7 @@ isp_action(struct cam_sim *sim, union ccb *ccb)
}
tptr->atio_count++;
SLIST_INSERT_HEAD(&tptr->atios, &ccb->ccb_h, sim_links.sle);
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "Put FREE ATIO (tag id 0x%x), count now %d\n",
+ ISP_PATH_PRT(isp, ISP_LOGTDEBUG2, ccb->ccb_h.path, "Put FREE ATIO (tag id 0x%x), count now %d\n",
ccb->atio.tag_id, tptr->atio_count);
} else if (ccb->ccb_h.func_code == XPT_IMMEDIATE_NOTIFY) {
if (ccb->cin1.tag_id) {
@@ -4527,12 +4971,12 @@ isp_action(struct cam_sim *sim, union ccb *ccb)
}
tptr->inot_count++;
SLIST_INSERT_HEAD(&tptr->inots, &ccb->ccb_h, sim_links.sle);
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "Put FREE INOT, (seq id 0x%x) count now %d\n",
+ ISP_PATH_PRT(isp, ISP_LOGTDEBUG2, ccb->ccb_h.path, "Put FREE INOT, (seq id 0x%x) count now %d\n",
ccb->cin1.seq_id, tptr->inot_count);
} else if (ccb->ccb_h.func_code == XPT_IMMED_NOTIFY) {
tptr->inot_count++;
SLIST_INSERT_HEAD(&tptr->inots, &ccb->ccb_h, sim_links.sle);
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "Put FREE INOT, (seq id 0x%x) count now %d\n",
+ ISP_PATH_PRT(isp, ISP_LOGTDEBUG2, ccb->ccb_h.path, "Put FREE INOT, (seq id 0x%x) count now %d\n",
ccb->cin1.seq_id, tptr->inot_count);
}
rls_lun_statep(isp, tptr);
@@ -4567,7 +5011,8 @@ isp_action(struct cam_sim *sim, union ccb *ccb)
rls_lun_statep(isp, tptr);
cam_freeze_devq(ccb->ccb_h.path);
cam_release_devq(ccb->ccb_h.path, RELSIM_RELEASE_AFTER_TIMEOUT, 0, 1000, 0);
- XS_SETERR(ccb, CAM_REQUEUE_REQ);
+ ccb->ccb_h.status &= ~CAM_STATUS_MASK;
+ ccb->ccb_h.status |= CAM_REQUEUE_REQ;
break;
}
isp_put_ntpd(isp, tptr, ntp);
@@ -4578,7 +5023,7 @@ isp_action(struct cam_sim *sim, union ccb *ccb)
break;
}
case XPT_CONT_TARGET_IO:
- isp_target_start_ctio(isp, ccb);
+ isp_target_start_ctio(isp, ccb, FROM_CAM);
break;
#endif
case XPT_RESET_DEV: /* BDR the specified SCSI device */
@@ -4874,13 +5319,24 @@ isp_action(struct cam_sim *sim, union ccb *ccb)
}
if (rchange) {
ISP_PATH_PRT(isp, ISP_LOGCONFIG, ccb->ccb_h.path, "changing role on from %d to %d\n", fcp->role, newrole);
+#ifdef ISP_TARGET_MODE
+ ISP_SET_PC(isp, bus, tm_enabled, 0);
+ ISP_SET_PC(isp, bus, tm_luns_enabled, 0);
+#endif
if (isp_fc_change_role(isp, bus, newrole) != 0) {
ccb->ccb_h.status = CAM_REQ_CMP_ERR;
+ xpt_done(ccb);
+ break;
+ }
#ifdef ISP_TARGET_MODE
- } else if (newrole == ISP_ROLE_TARGET || newrole == ISP_ROLE_BOTH) {
+ if (newrole == ISP_ROLE_TARGET || newrole == ISP_ROLE_BOTH) {
+ /*
+ * Give the new role a chance to complain and settle
+ */
+ msleep(isp, &isp->isp_lock, PRIBIO, "taking a breather", 2);
ccb->ccb_h.status = isp_enable_deferred_luns(isp, bus);
-#endif
}
+#endif
}
}
xpt_done(ccb);
@@ -5026,10 +5482,8 @@ isp_done(XS_T *sccb)
xpt_print(sccb->ccb_h.path, "cam completion status 0x%x\n", sccb->ccb_h.status);
}
- XS_CMD_S_DONE(sccb);
- if (XS_TACTIVE_P(sccb))
+ if (callout_active(&PISP_PCMD(sccb)->wdog))
callout_stop(&PISP_PCMD(sccb)->wdog);
- XS_CMD_S_CLEAR(sccb);
isp_free_pcmd(isp, (union ccb *) sccb);
xpt_done((union ccb *) sccb);
}
@@ -5038,8 +5492,9 @@ void
isp_async(ispsoftc_t *isp, ispasync_t cmd, ...)
{
int bus;
- static const char prom[] = "Chan %d PortID 0x%06x handle 0x%x role %s %s WWPN 0x%08x%08x";
- static const char prom2[] = "Chan %d PortID 0x%06x handle 0x%x role %s %s tgt %u WWPN 0x%08x%08x";
+ static const char prom0[] = "Chan %d PortID 0x%06x handle 0x%x %s %s WWPN 0x%08x%08x";
+ static const char prom2[] = "Chan %d PortID 0x%06x handle 0x%x %s %s tgt %u WWPN 0x%08x%08x";
+ char buf[64];
char *msg = NULL;
target_id_t tgt;
fcportdb_t *lp;
@@ -5148,7 +5603,7 @@ isp_async(ispsoftc_t *isp, ispasync_t cmd, ...)
}
if (!callout_active(&fc->ldt)) {
callout_reset(&fc->ldt, fc->loop_down_limit * hz, isp_ldt, fc);
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Starting Loop Down Timer @ %lu", (unsigned long) time_uptime);
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "Starting Loop Down Timer @ %lu", (unsigned long) time_uptime);
}
}
}
@@ -5177,9 +5632,9 @@ isp_async(ispsoftc_t *isp, ispasync_t cmd, ...)
lp = va_arg(ap, fcportdb_t *);
va_end(ap);
fc = ISP_FC_PC(isp, bus);
- lp->reserved = 0;
+ lp->announced = 0;
lp->gone_timer = 0;
- if ((FCPARAM(isp, bus)->role & ISP_ROLE_INITIATOR) && (lp->roles & (SVC3_TGT_ROLE >> SVC3_ROLE_SHIFT))) {
+ if ((FCPARAM(isp, bus)->role & ISP_ROLE_INITIATOR) && (lp->prli_word3 & PRLI_WD3_TARGET_FUNCTION)) {
int dbidx = lp - FCPARAM(isp, bus)->portdb;
int i;
@@ -5199,12 +5654,13 @@ isp_async(ispsoftc_t *isp, ispasync_t cmd, ...)
isp_dump_portdb(isp, bus);
}
}
+ isp_gen_role_str(buf, sizeof (buf), lp->prli_word3);
if (lp->dev_map_idx) {
tgt = lp->dev_map_idx - 1;
- isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, roles[lp->roles], "arrived at", tgt, (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn);
+ isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, buf, "arrived at", tgt, (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn);
isp_make_here(isp, bus, tgt);
} else {
- isp_prt(isp, ISP_LOGCONFIG, prom, bus, lp->portid, lp->handle, roles[lp->roles], "arrived", (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn);
+ isp_prt(isp, ISP_LOGCONFIG, prom0, bus, lp->portid, lp->handle, buf, "arrived", (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn);
}
break;
case ISPASYNC_DEV_CHANGED:
@@ -5213,7 +5669,7 @@ isp_async(ispsoftc_t *isp, ispasync_t cmd, ...)
lp = va_arg(ap, fcportdb_t *);
va_end(ap);
fc = ISP_FC_PC(isp, bus);
- lp->reserved = 0;
+ lp->announced = 0;
lp->gone_timer = 0;
if (isp_change_is_bad) {
lp->state = FC_PORTDB_STATE_NIL;
@@ -5224,20 +5680,22 @@ isp_async(ispsoftc_t *isp, ispasync_t cmd, ...)
isp_prt(isp, ISP_LOGCONFIG, prom3, bus, lp->portid, tgt, "change is bad");
isp_make_gone(isp, bus, tgt);
} else {
- isp_prt(isp, ISP_LOGCONFIG, prom, bus, lp->portid, lp->handle, roles[lp->roles], "changed and departed",
+ isp_gen_role_str(buf, sizeof (buf), lp->prli_word3);
+ isp_prt(isp, ISP_LOGCONFIG, prom0, bus, lp->portid, lp->handle, buf, "changed and departed",
(uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn);
}
} else {
lp->portid = lp->new_portid;
- lp->roles = lp->new_roles;
+ lp->prli_word3 = lp->new_prli_word3;
+ isp_gen_role_str(buf, sizeof (buf), lp->prli_word3);
if (lp->dev_map_idx) {
int t = lp->dev_map_idx - 1;
FCPARAM(isp, bus)->isp_dev_map[t] = (lp - FCPARAM(isp, bus)->portdb) + 1;
tgt = lp->dev_map_idx - 1;
- isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, roles[lp->roles], "changed at", tgt,
+ isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, buf, "changed at", tgt,
(uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn);
} else {
- isp_prt(isp, ISP_LOGCONFIG, prom, bus, lp->portid, lp->handle, roles[lp->roles], "changed", (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn);
+ isp_prt(isp, ISP_LOGCONFIG, prom0, bus, lp->portid, lp->handle, buf, "changed", (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn);
}
}
break;
@@ -5246,12 +5704,13 @@ isp_async(ispsoftc_t *isp, ispasync_t cmd, ...)
bus = va_arg(ap, int);
lp = va_arg(ap, fcportdb_t *);
va_end(ap);
+ isp_gen_role_str(buf, sizeof (buf), lp->prli_word3);
if (lp->dev_map_idx) {
tgt = lp->dev_map_idx - 1;
- isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, roles[lp->roles], "stayed at", tgt,
+ isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, buf, "stayed at", tgt,
(uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn);
} else {
- isp_prt(isp, ISP_LOGCONFIG, prom, bus, lp->portid, lp->handle, roles[lp->roles], "stayed",
+ isp_prt(isp, ISP_LOGCONFIG, prom0, bus, lp->portid, lp->handle, buf, "stayed",
(uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn);
}
break;
@@ -5270,18 +5729,19 @@ isp_async(ispsoftc_t *isp, ispasync_t cmd, ...)
* announce that it's gone.
*
*/
- if (lp->dev_map_idx && lp->reserved == 0) {
- lp->reserved = 1;
+ isp_gen_role_str(buf, sizeof (buf), lp->prli_word3);
+ if (lp->dev_map_idx && lp->announced == 0) {
+ lp->announced = 1;
lp->state = FC_PORTDB_STATE_ZOMBIE;
lp->gone_timer = ISP_FC_PC(isp, bus)->gone_device_time;
if (fc->ready && !callout_active(&fc->gdt)) {
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Chan %d Starting Gone Device Timer with %u seconds time now %lu", bus, lp->gone_timer, (unsigned long)time_uptime);
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "Chan %d Starting Gone Device Timer with %u seconds time now %lu", bus, lp->gone_timer, (unsigned long)time_uptime);
callout_reset(&fc->gdt, hz, isp_gdt, fc);
}
tgt = lp->dev_map_idx - 1;
- isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, roles[lp->roles], "gone zombie at", tgt, (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn);
- } else if (lp->reserved == 0) {
- isp_prt(isp, ISP_LOGCONFIG, prom, bus, lp->portid, lp->handle, roles[lp->roles], "departed", (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn);
+ isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, buf, "gone zombie at", tgt, (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn);
+ } else if (lp->announced == 0) {
+ isp_prt(isp, ISP_LOGCONFIG, prom0, bus, lp->portid, lp->handle, buf, "departed", (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn);
}
break;
case ISPASYNC_CHANGE_NOTIFY:
@@ -5315,7 +5775,7 @@ isp_async(ispsoftc_t *isp, ispasync_t cmd, ...)
* If the loop down timer is running, cancel it.
*/
if (fc->ready && callout_active(&fc->ldt)) {
- isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Stopping Loop Down Timer @ %lu", (unsigned long) time_uptime);
+ isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "Stopping Loop Down Timer @ %lu", (unsigned long) time_uptime);
callout_stop(&fc->ldt);
}
isp_prt(isp, ISP_LOGINFO, msg, bus);
@@ -5355,6 +5815,7 @@ isp_async(ispsoftc_t *isp, ispasync_t cmd, ...)
case NT_HBA_RESET:
isp_del_all_wwn_entries(isp, ISP_NOCHAN);
break;
+ case NT_GLOBAL_LOGOUT:
case NT_LOGOUT:
/*
* This is device arrival/departure notification
@@ -5396,6 +5857,29 @@ isp_async(ispsoftc_t *isp, ispasync_t cmd, ...)
}
break;
}
+ case ISPASYNC_TARGET_NOTIFY_ACK:
+ {
+ void *inot;
+ va_start(ap, cmd);
+ inot = va_arg(ap, void *);
+ va_end(ap);
+ if (isp_notify_ack(isp, inot)) {
+ isp_tna_t *tp = malloc(sizeof (*tp), M_DEVBUF, M_NOWAIT);
+ if (tp) {
+ tp->isp = isp;
+ if (inot) {
+ memcpy(tp->data, inot, sizeof (tp->data));
+ tp->not = tp->data;
+ } else {
+ tp->not = NULL;
+ }
+ (void) timeout(isp_refire_notify_ack, tp, 5);
+ } else {
+ isp_prt(isp, ISP_LOGERR, "you lose- cannot allocate a notify refire");
+ }
+ }
+ break;
+ }
case ISPASYNC_TARGET_ACTION:
{
isphdr_t *hp;
@@ -5628,13 +6112,13 @@ void
isp_prt(ispsoftc_t *isp, int level, const char *fmt, ...)
{
int loc;
- char lbuf[128];
+ char lbuf[200];
va_list ap;
if (level != ISP_LOGALL && (level & isp->isp_dblev) == 0) {
return;
}
- sprintf(lbuf, "%s: ", device_get_nameunit(isp->isp_dev));
+ snprintf(lbuf, sizeof (lbuf), "%s: ", device_get_nameunit(isp->isp_dev));
loc = strlen(lbuf);
va_start(ap, fmt);
vsnprintf(&lbuf[loc], sizeof (lbuf) - loc - 1, fmt, ap);
@@ -5805,6 +6289,47 @@ isp_common_dmateardown(ispsoftc_t *isp, struct ccb_scsiio *csio, uint32_t hdl)
bus_dmamap_unload(isp->isp_osinfo.dmat, PISP_PCMD(csio)->dmap);
}
+int
+isp_fcp_next_crn(ispsoftc_t *isp, uint8_t *crnp, XS_T *cmd)
+{
+ uint32_t chan = XS_CHANNEL(cmd);
+ uint32_t tgt = XS_TGT(cmd);
+ uint32_t lun = XS_LUN(cmd);
+ struct isp_fc *fc = &isp->isp_osinfo.pc.fc[chan];
+ int idx = NEXUS_HASH(tgt, lun);
+ struct isp_nexus *nxp = fc->nexus_hash[idx];
+
+ while (nxp) {
+ if (nxp->tgt == tgt && nxp->lun == lun)
+ break;
+ nxp = nxp->next;
+ }
+ if (nxp == NULL) {
+ nxp = fc->nexus_free_list;
+ if (nxp == NULL) {
+ nxp = malloc(sizeof (struct isp_nexus), M_DEVBUF, M_ZERO|M_NOWAIT);
+ if (nxp == NULL) {
+ return (-1);
+ }
+ } else {
+ fc->nexus_free_list = nxp->next;
+ }
+ nxp->tgt = tgt;
+ nxp->lun = lun;
+ nxp->next = fc->nexus_hash[idx];
+ fc->nexus_hash[idx] = nxp;
+ }
+ if (nxp) {
+ if (nxp->crnseed == 0)
+ nxp->crnseed = 1;
+ if (cmd)
+ PISP_PCMD(cmd)->crn = nxp->crnseed;
+ *crnp = nxp->crnseed++;
+ return (0);
+ }
+ return (-1);
+}
+
void
isp_timer(void *arg)
{
@@ -5814,3 +6339,20 @@ isp_timer(void *arg)
#endif
callout_reset(&isp->isp_osinfo.tmo, hz, isp_timer, isp);
}
+
+isp_ecmd_t *
+isp_get_ecmd(ispsoftc_t *isp)
+{
+ isp_ecmd_t *ecmd = isp->isp_osinfo.ecmd_free;
+ if (ecmd) {
+ isp->isp_osinfo.ecmd_free = ecmd->next;
+ }
+ return (ecmd);
+}
+
+void
+isp_put_ecmd(ispsoftc_t *isp, isp_ecmd_t *ecmd)
+{
+ ecmd->next = isp->isp_osinfo.ecmd_free;
+ isp->isp_osinfo.ecmd_free = ecmd;
+}
diff --git a/sys/dev/isp/isp_freebsd.h b/sys/dev/isp/isp_freebsd.h
index 001c699..5bd1268 100644
--- a/sys/dev/isp/isp_freebsd.h
+++ b/sys/dev/isp/isp_freebsd.h
@@ -75,6 +75,16 @@
#define ISP_IFLAGS INTR_TYPE_CAM | INTR_ENTROPY | INTR_MPSAFE
+#define N_XCMDS 64
+#define XCMD_SIZE 512
+struct ispsoftc;
+typedef union isp_ecmd {
+ union isp_ecmd * next;
+ uint8_t data[XCMD_SIZE];
+} isp_ecmd_t;
+isp_ecmd_t * isp_get_ecmd(struct ispsoftc *);
+void isp_put_ecmd(struct ispsoftc *, isp_ecmd_t *);
+
#ifdef ISP_TARGET_MODE
/* Not quite right, but there was no bump for this change */
#if __FreeBSD_version < 225469
@@ -100,12 +110,22 @@ typedef struct {
uint32_t portid;
uint16_t rxid; /* wire rxid */
uint16_t oxid; /* wire oxid */
+ uint16_t word3; /* PRLI word3 params */
+ uint16_t ctcnt; /* number of CTIOs currently active */
uint32_t
- cdb0 : 8,
- : 1,
- dead : 1,
- tattr : 3,
- state : 3;
+ srr_notify_rcvd : 1,
+ cdb0 : 8,
+ sendst : 1,
+ dead : 1,
+ tattr : 3,
+ state : 3;
+ void * ests;
+ /*
+ * The current SRR notify copy
+ */
+ uint8_t srr[64]; /* sb QENTRY_LEN, but order of definitions is wrong */
+ void * srr_ccb;
+ uint32_t nsrr;
} atio_private_data_t;
#define ATPD_STATE_FREE 0
#define ATPD_STATE_ATIO 1
@@ -123,6 +143,11 @@ union inot_private_data {
uint32_t tag_id, seq_id;
} rd;
};
+typedef struct isp_timed_notify_ack {
+ void *isp;
+ void *not;
+ uint8_t data[64]; /* sb QENTRY_LEN, but order of definitions is wrong */
+} isp_tna_t;
typedef struct tstate {
SLIST_ENTRY(tstate) next;
@@ -151,15 +176,32 @@ typedef struct tstate {
*/
struct isp_pcmd {
struct isp_pcmd * next;
- bus_dmamap_t dmap; /* dma map for this command */
- struct ispsoftc * isp; /* containing isp */
- struct callout wdog; /* watchdog timer */
- uint8_t crn; /* command reference number */
+ bus_dmamap_t dmap; /* dma map for this command */
+ struct ispsoftc * isp; /* containing isp */
+ struct callout wdog; /* watchdog timer */
+ uint8_t totslen; /* sense length on status response */
+ uint8_t cumslen; /* sense length on status response */
+ uint8_t crn; /* command reference number */
};
#define ISP_PCMD(ccb) (ccb)->ccb_h.spriv_ptr1
#define PISP_PCMD(ccb) ((struct isp_pcmd *)ISP_PCMD(ccb))
/*
+ * Per nexus info.
+ */
+struct isp_nexus {
+ struct isp_nexus * next;
+ uint32_t
+ crnseed : 8; /* next command reference number */
+ uint32_t
+ tgt : 16, /* TGT for target */
+ lun : 16; /* LUN for target */
+};
+#define NEXUS_HASH_WIDTH 32
+#define INITIAL_NEXUS_COUNT MAX_FC_TARG
+#define NEXUS_HASH(tgt, lun) ((tgt + lun) % NEXUS_HASH_WIDTH)
+
+/*
* Per channel information
*/
SLIST_HEAD(tslist, tstate);
@@ -176,6 +218,11 @@ struct isp_fc {
uint32_t loop_down_time;
uint32_t loop_down_limit;
uint32_t gone_device_time;
+ /*
+ * Per target/lun info- just to keep a per-ITL nexus crn count
+ */
+ struct isp_nexus *nexus_hash[NEXUS_HASH_WIDTH];
+ struct isp_nexus *nexus_free_list;
uint32_t
#ifdef ISP_TARGET_MODE
#ifdef ISP_INTERNAL_TARGET
@@ -202,8 +249,10 @@ struct isp_fc {
#ifdef ISP_INTERNAL_TARGET
struct proc * target_proc;
#endif
+#if defined(DEBUG)
+ unsigned int inject_lost_data_frame;
+#endif
#endif
- uint8_t crnseed; /* next command reference number */
};
struct isp_spi {
@@ -266,6 +315,7 @@ struct isposinfo {
#else
: 2,
#endif
+ sixtyfourbit : 1, /* sixtyfour bit platform */
timer_active : 1,
autoconf : 1,
ehook_active : 1,
@@ -288,6 +338,10 @@ struct isposinfo {
cam_status * rptr;
#endif
+ bus_addr_t ecmd_dma;
+ isp_ecmd_t * ecmd_base;
+ isp_ecmd_t * ecmd_free;
+
/*
* Per-type private storage...
*/
@@ -318,16 +372,7 @@ struct isposinfo {
ISP_FC_PC(isp, chan)-> tag = val; \
}
-#define FCP_NEXT_CRN(isp, cmd, rslt, chan, tgt, lun) \
- if ((isp)->isp_osinfo.pc.fc[(chan)].crnseed == 0) { \
- (isp)->isp_osinfo.pc.fc[(chan)].crnseed = 1; \
- } \
- if (cmd) { \
- PISP_PCMD(cmd)->crn = (isp)->isp_osinfo.pc.fc[(chan)].crnseed; \
- } \
- (rslt) = (isp)->isp_osinfo.pc.fc[(chan)].crnseed++
-
-
+#define FCP_NEXT_CRN isp_fcp_next_crn
#define isp_lock isp_osinfo.lock
#define isp_bus_tag isp_osinfo.bus_tag
#define isp_bus_handle isp_osinfo.bus_handle
@@ -341,7 +386,6 @@ struct isposinfo {
/*
* Required Macros/Defines
*/
-
#define ISP_FC_SCRLEN 0x1000
#define ISP_MEMZERO(a, b) memset(a, 0, b)
@@ -459,20 +503,17 @@ default: \
#define XS_STSP(ccb) (&(ccb)->scsi_status)
#define XS_SNSP(ccb) (&(ccb)->sense_data)
-#define XS_SNSLEN(ccb) \
- imin((sizeof((ccb)->sense_data)), ccb->sense_len - ccb->sense_resid)
+#define XS_TOT_SNSLEN(ccb) ccb->sense_len
+#define XS_CUR_SNSLEN(ccb) (ccb->sense_len - ccb->sense_resid)
#define XS_SNSKEY(ccb) (scsi_get_sense_key(&(ccb)->sense_data, \
- ccb->sense_len - ccb->sense_resid, \
- /*show_errors*/ 1))
+ ccb->sense_len - ccb->sense_resid, 1))
#define XS_SNSASC(ccb) (scsi_get_asc(&(ccb)->sense_data, \
- ccb->sense_len - ccb->sense_resid, \
- /*show_errors*/ 1))
+ ccb->sense_len - ccb->sense_resid, 1))
#define XS_SNSASCQ(ccb) (scsi_get_ascq(&(ccb)->sense_data, \
- ccb->sense_len - ccb->sense_resid, \
- /*show_errors*/ 1))
+ ccb->sense_len - ccb->sense_resid, 1))
#define XS_TAG_P(ccb) \
(((ccb)->ccb_h.flags & CAM_TAG_ACTION_VALID) && \
(ccb)->tag_action != CAM_TAG_ACTION_NONE)
@@ -483,8 +524,7 @@ default: \
#define XS_SETERR(ccb, v) (ccb)->ccb_h.status &= ~CAM_STATUS_MASK, \
- (ccb)->ccb_h.status |= v, \
- (ccb)->ccb_h.spriv_field0 |= ISP_SPRIV_ERRSET
+ (ccb)->ccb_h.status |= v
# define HBA_NOERROR CAM_REQ_INPROG
# define HBA_BOTCH CAM_UNREC_HBA_ERROR
@@ -499,21 +539,31 @@ default: \
#define XS_ERR(ccb) ((ccb)->ccb_h.status & CAM_STATUS_MASK)
-#define XS_NOERR(ccb) \
- (((ccb)->ccb_h.spriv_field0 & ISP_SPRIV_ERRSET) == 0 || \
- ((ccb)->ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_INPROG)
-
-#define XS_INITERR(ccb) \
- XS_SETERR(ccb, CAM_REQ_INPROG), (ccb)->ccb_h.spriv_field0 = 0
-
-#define XS_SAVE_SENSE(xs, sense_ptr, slen) do { \
- (xs)->ccb_h.status |= CAM_AUTOSNS_VALID; \
- memset(&(xs)->sense_data, 0, sizeof((xs)->sense_data)); \
- memcpy(&(xs)->sense_data, sense_ptr, imin(XS_SNSLEN(xs),\
- slen)); \
- if (slen < (xs)->sense_len) \
- (xs)->sense_resid = (xs)->sense_len - slen; \
- } while (0);
+#define XS_NOERR(ccb) (((ccb)->ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_INPROG)
+
+#define XS_INITERR(ccb) XS_SETERR(ccb, CAM_REQ_INPROG), ccb->sense_resid = ccb->sense_len
+
+#define XS_SAVE_SENSE(xs, sense_ptr, totslen, slen) do { \
+ uint32_t tlen = slen; \
+ if (tlen > (xs)->sense_len) \
+ tlen = (xs)->sense_len; \
+ PISP_PCMD(xs)->totslen = imin((xs)->sense_len, totslen); \
+ PISP_PCMD(xs)->cumslen = tlen; \
+ memcpy(&(xs)->sense_data, sense_ptr, tlen); \
+ (xs)->sense_resid = (xs)->sense_len - tlen; \
+ (xs)->ccb_h.status |= CAM_AUTOSNS_VALID; \
+ } while (0)
+
+#define XS_SENSE_APPEND(xs, xsnsp, xsnsl) do { \
+ uint32_t off = PISP_PCMD(xs)->cumslen; \
+ uint8_t *ptr = &((uint8_t *)(&(xs)->sense_data))[off]; \
+ uint32_t amt = imin(xsnsl, PISP_PCMD(xs)->totslen - off); \
+ if (amt) { \
+ memcpy(ptr, xsnsp, amt); \
+ (xs)->sense_resid -= amt; \
+ PISP_PCMD(xs)->cumslen += amt; \
+ } \
+ } while (0)
#define XS_SENSE_VALID(xs) (((xs)->ccb_h.status & CAM_AUTOSNS_VALID) != 0)
@@ -634,24 +684,6 @@ extern int isp_autoconfig;
/*
* Platform private flags
*/
-#define ISP_SPRIV_ERRSET 0x1
-#define ISP_SPRIV_TACTIVE 0x2
-#define ISP_SPRIV_DONE 0x8
-#define ISP_SPRIV_WPEND 0x10
-
-#define XS_S_TACTIVE(sccb) (sccb)->ccb_h.spriv_field0 |= ISP_SPRIV_TACTIVE
-#define XS_C_TACTIVE(sccb) (sccb)->ccb_h.spriv_field0 &= ~ISP_SPRIV_TACTIVE
-#define XS_TACTIVE_P(sccb) ((sccb)->ccb_h.spriv_field0 & ISP_SPRIV_TACTIVE)
-
-#define XS_CMD_S_DONE(sccb) (sccb)->ccb_h.spriv_field0 |= ISP_SPRIV_DONE
-#define XS_CMD_C_DONE(sccb) (sccb)->ccb_h.spriv_field0 &= ~ISP_SPRIV_DONE
-#define XS_CMD_DONE_P(sccb) ((sccb)->ccb_h.spriv_field0 & ISP_SPRIV_DONE)
-
-#define XS_CMD_S_WPEND(sccb) (sccb)->ccb_h.spriv_field0 |= ISP_SPRIV_WPEND
-#define XS_CMD_C_WPEND(sccb) (sccb)->ccb_h.spriv_field0 &= ~ISP_SPRIV_WPEND
-#define XS_CMD_WPEND_P(sccb) ((sccb)->ccb_h.spriv_field0 & ISP_SPRIV_WPEND)
-
-#define XS_CMD_S_CLEAR(sccb) (sccb)->ccb_h.spriv_field0 = 0
/*
* Platform Library Functions
@@ -667,6 +699,7 @@ int isp_fc_scratch_acquire(ispsoftc_t *, int);
int isp_mstohz(int);
void isp_platform_intr(void *);
void isp_common_dmateardown(ispsoftc_t *, struct ccb_scsiio *, uint32_t);
+int isp_fcp_next_crn(ispsoftc_t *, uint8_t *, XS_T *);
/*
* Platform Version specific defines
diff --git a/sys/dev/isp/isp_library.c b/sys/dev/isp/isp_library.c
index e8b563f..d5535f2 100644
--- a/sys/dev/isp/isp_library.c
+++ b/sys/dev/isp/isp_library.c
@@ -58,7 +58,7 @@ const char *isp_class3_roles[4] = {
* Called with the first queue entry at least partially filled out.
*/
int
-isp_send_cmd(ispsoftc_t *isp, void *fqe, void *segp, uint32_t nsegs, uint32_t totalcnt, isp_ddir_t ddir)
+isp_send_cmd(ispsoftc_t *isp, void *fqe, void *segp, uint32_t nsegs, uint32_t totalcnt, isp_ddir_t ddir, ispds64_t *ecmd)
{
uint8_t storage[QENTRY_LEN];
uint8_t type, nqe;
@@ -396,11 +396,11 @@ isp_fc_runstate(ispsoftc_t *isp, int chan, int tval)
}
if (fcp->isp_fwstate < FW_READY || fcp->isp_loopstate < LOOP_PDB_RCVD) {
if (isp_control(isp, ISPCTL_FCLINK_TEST, chan, tval) != 0) {
- isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: linktest failed for channel %d", chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "isp_fc_runstate: linktest failed for channel %d", chan);
return (-1);
}
if (fcp->isp_fwstate != FW_READY || fcp->isp_loopstate < LOOP_PDB_RCVD) {
- isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: f/w not ready for channel %d", chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "isp_fc_runstate: f/w not ready for channel %d", chan);
return (-1);
}
}
@@ -410,19 +410,19 @@ isp_fc_runstate(ispsoftc_t *isp, int chan, int tval)
}
if (isp_control(isp, ISPCTL_SCAN_LOOP, chan) != 0) {
- isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: scan loop fails on channel %d", chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "isp_fc_runstate: scan loop fails on channel %d", chan);
return (LOOP_PDB_RCVD);
}
if (isp_control(isp, ISPCTL_SCAN_FABRIC, chan) != 0) {
- isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: scan fabric fails on channel %d", chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "isp_fc_runstate: scan fabric fails on channel %d", chan);
return (LOOP_LSCAN_DONE);
}
if (isp_control(isp, ISPCTL_PDB_SYNC, chan) != 0) {
- isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: pdb_sync fails on channel %d", chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "isp_fc_runstate: pdb_sync fails on channel %d", chan);
return (LOOP_FSCAN_DONE);
}
if (fcp->isp_fwstate != FW_READY || fcp->isp_loopstate != LOOP_READY) {
- isp_prt(isp, ISP_LOGSANCFG, "isp_fc_runstate: f/w not ready again on channel %d", chan);
+ isp_prt(isp, ISP_LOG_SANCFG, "isp_fc_runstate: f/w not ready again on channel %d", chan);
return (-1);
}
return (0);
@@ -438,7 +438,7 @@ isp_dump_portdb(ispsoftc_t *isp, int chan)
int i;
for (i = 0; i < MAX_FC_TARG; i++) {
- char mb[4];
+ char mb[4], buf1[64], buf2[64];
const char *dbs[8] = {
"NIL ",
"PROB",
@@ -449,9 +449,6 @@ isp_dump_portdb(ispsoftc_t *isp, int chan)
"ZOMB",
"VLD "
};
- const char *roles[4] = {
- " UNK", " TGT", " INI", "TINI"
- };
fcportdb_t *lp = &fcp->portdb[i];
if (lp->state == FC_PORTDB_STATE_NIL && lp->target_mode == 0) {
@@ -462,12 +459,81 @@ isp_dump_portdb(ispsoftc_t *isp, int chan)
} else {
ISP_SNPRINTF(mb, sizeof (mb), "---");
}
+ isp_gen_role_str(buf1, sizeof (buf1), lp->prli_word3);
+ isp_gen_role_str(buf2, sizeof (buf2), lp->new_prli_word3);
isp_prt(isp, ISP_LOGALL, "Chan %d [%d]: hdl 0x%x %s al%d tgt %s %s 0x%06x =>%s 0x%06x; WWNN 0x%08x%08x WWPN 0x%08x%08x",
- chan, i, lp->handle, dbs[lp->state], lp->autologin, mb, roles[lp->roles], lp->portid, roles[lp->new_roles], lp->new_portid,
+ chan, i, lp->handle, dbs[lp->state], lp->autologin, mb, buf1, lp->portid, buf2, lp->new_portid,
(uint32_t) (lp->node_wwn >> 32), (uint32_t) (lp->node_wwn), (uint32_t) (lp->port_wwn >> 32), (uint32_t) (lp->port_wwn));
}
}
+void
+isp_gen_role_str(char *buf, size_t len, uint16_t p3)
+{
+ int nd = 0;
+ buf[0] = '(';
+ buf[1] = 0;
+ if (p3 & PRLI_WD3_ENHANCED_DISCOVERY) {
+ nd++;
+ strlcat(buf, "EDisc", len);
+ }
+ if (p3 & PRLI_WD3_REC_SUPPORT) {
+ if (nd++) {
+ strlcat(buf, ",", len);
+ }
+ strlcat(buf, "REC", len);
+ }
+ if (p3 & PRLI_WD3_TASK_RETRY_IDENTIFICATION_REQUESTED) {
+ if (nd++) {
+ strlcat(buf, ",", len);
+ }
+ strlcat(buf, "RetryID", len);
+ }
+ if (p3 & PRLI_WD3_RETRY) {
+ if (nd++) {
+ strlcat(buf, ",", len);
+ }
+ strlcat(buf, "Retry", len);
+ }
+ if (p3 & PRLI_WD3_CONFIRMED_COMPLETION_ALLOWED) {
+ if (nd++) {
+ strlcat(buf, ",", len);
+ }
+ strlcat(buf, "CNFRM", len);
+ }
+ if (p3 & PRLI_WD3_DATA_OVERLAY_ALLOWED) {
+ if (nd++) {
+ strlcat(buf, ",", len);
+ }
+ strlcat(buf, "DOver", len);
+ }
+ if (p3 & PRLI_WD3_INITIATOR_FUNCTION) {
+ if (nd++) {
+ strlcat(buf, ",", len);
+ }
+ strlcat(buf, "INI", len);
+ }
+ if (p3 & PRLI_WD3_TARGET_FUNCTION) {
+ if (nd++) {
+ strlcat(buf, ",", len);
+ }
+ strlcat(buf, "TGT", len);
+ }
+ if (p3 & PRLI_WD3_READ_FCP_XFER_RDY_DISABLED) {
+ if (nd++) {
+ strlcat(buf, ",", len);
+ }
+ strlcat(buf, "RdXfrDis", len);
+ }
+ if (p3 & PRLI_WD3_WRITE_FCP_XFER_RDY_DISABLED) {
+ if (nd++) {
+ strlcat(buf, ",", len);
+ }
+ strlcat(buf, "XfrDis", len);
+ }
+ strlcat(buf, ")", len);
+}
+
const char *
isp_fc_fw_statename(int state)
{
@@ -535,7 +601,6 @@ isp_fc_change_role(ispsoftc_t *isp, int chan, int new_role)
isp_del_all_wwn_entries(isp, chan);
#endif
isp_clear_commands(isp);
-
isp_reset(isp, 0);
if (isp->isp_state != ISP_RESETSTATE) {
isp_prt(isp, ISP_LOGERR, "%s: cannot reset card", __func__);
@@ -896,7 +961,8 @@ isp_put_request_t3(ispsoftc_t *isp, ispreqt3_t *src, ispreqt3_t *dst)
ISP_IOXPUT_8(isp, src->req_target, &dst->req_target);
ISP_IOXPUT_16(isp, src->req_scclun, &dst->req_scclun);
ISP_IOXPUT_16(isp, src->req_flags, &dst->req_flags);
- ISP_IOXPUT_16(isp, src->req_reserved, &dst->req_reserved);
+ ISP_IOXPUT_8(isp, src->req_crn, &dst->req_crn);
+ ISP_IOXPUT_8(isp, src->req_reserved, &dst->req_reserved);
ISP_IOXPUT_16(isp, src->req_time, &dst->req_time);
ISP_IOXPUT_16(isp, src->req_seg_count, &dst->req_seg_count);
for (i = 0; i < ASIZE(src->req_cdb); i++) {
@@ -919,7 +985,8 @@ isp_put_request_t3e(ispsoftc_t *isp, ispreqt3e_t *src, ispreqt3e_t *dst)
ISP_IOXPUT_16(isp, src->req_target, &dst->req_target);
ISP_IOXPUT_16(isp, src->req_scclun, &dst->req_scclun);
ISP_IOXPUT_16(isp, src->req_flags, &dst->req_flags);
- ISP_IOXPUT_16(isp, src->req_reserved, &dst->req_reserved);
+ ISP_IOXPUT_8(isp, src->req_crn, &dst->req_crn);
+ ISP_IOXPUT_8(isp, src->req_reserved, &dst->req_reserved);
ISP_IOXPUT_16(isp, src->req_time, &dst->req_time);
ISP_IOXPUT_16(isp, src->req_seg_count, &dst->req_seg_count);
for (i = 0; i < ASIZE(src->req_cdb); i++) {
@@ -1077,15 +1144,34 @@ isp_get_response(ispsoftc_t *isp, ispstatusreq_t *src, ispstatusreq_t *dst)
ISP_IOXGET_16(isp, &src->req_time, dst->req_time);
ISP_IOXGET_16(isp, &src->req_sense_len, dst->req_sense_len);
ISP_IOXGET_32(isp, &src->req_resid, dst->req_resid);
- for (i = 0; i < 8; i++) {
+ for (i = 0; i < sizeof (src->req_response); i++) {
ISP_IOXGET_8(isp, &src->req_response[i], dst->req_response[i]);
}
- for (i = 0; i < 32; i++) {
+ for (i = 0; i < sizeof (src->req_sense_data); i++) {
ISP_IOXGET_8(isp, &src->req_sense_data[i], dst->req_sense_data[i]);
}
}
void
+isp_get_cont_response(ispsoftc_t *isp, ispstatus_cont_t *src, ispstatus_cont_t *dst)
+{
+ int i;
+ isp_get_hdr(isp, &src->req_header, &dst->req_header);
+ if (IS_24XX(isp)) {
+ uint32_t *a, *b;
+ a = (uint32_t *) src->req_sense_data;
+ b = (uint32_t *) dst->req_sense_data;
+ for (i = 0; i < (sizeof (src->req_sense_data) / sizeof (uint32_t)); i++) {
+ ISP_IOZGET_32(isp, a++, *b++);
+ }
+ } else {
+ for (i = 0; i < sizeof (src->req_sense_data); i++) {
+ ISP_IOXGET_8(isp, &src->req_sense_data[i], dst->req_sense_data[i]);
+ }
+ }
+}
+
+void
isp_get_24xx_response(ispsoftc_t *isp, isp24xx_statusreq_t *src, isp24xx_statusreq_t *dst)
{
int i;
@@ -1929,6 +2015,29 @@ isp_get_fc_hdr(ispsoftc_t *isp, fc_hdr_t *src, fc_hdr_t *dst)
}
void
+isp_put_fc_hdr(ispsoftc_t *isp, fc_hdr_t *src, fc_hdr_t *dst)
+{
+ ISP_IOZPUT_8(isp, src->r_ctl, &dst->r_ctl);
+ ISP_IOZPUT_8(isp, src->d_id[0], &dst->d_id[0]);
+ ISP_IOZPUT_8(isp, src->d_id[1], &dst->d_id[1]);
+ ISP_IOZPUT_8(isp, src->d_id[2], &dst->d_id[2]);
+ ISP_IOZPUT_8(isp, src->cs_ctl, &dst->cs_ctl);
+ ISP_IOZPUT_8(isp, src->s_id[0], &dst->s_id[0]);
+ ISP_IOZPUT_8(isp, src->s_id[1], &dst->s_id[1]);
+ ISP_IOZPUT_8(isp, src->s_id[2], &dst->s_id[2]);
+ ISP_IOZPUT_8(isp, src->type, &dst->type);
+ ISP_IOZPUT_8(isp, src->f_ctl[0], &dst->f_ctl[0]);
+ ISP_IOZPUT_8(isp, src->f_ctl[1], &dst->f_ctl[1]);
+ ISP_IOZPUT_8(isp, src->f_ctl[2], &dst->f_ctl[2]);
+ ISP_IOZPUT_8(isp, src->seq_id, &dst->seq_id);
+ ISP_IOZPUT_8(isp, src->df_ctl, &dst->df_ctl);
+ ISP_IOZPUT_16(isp, src->seq_cnt, &dst->seq_cnt);
+ ISP_IOZPUT_16(isp, src->ox_id, &dst->ox_id);
+ ISP_IOZPUT_16(isp, src->rx_id, &dst->rx_id);
+ ISP_IOZPUT_32(isp, src->parameter, &dst->parameter);
+}
+
+void
isp_get_fcp_cmnd_iu(ispsoftc_t *isp, fcp_cmnd_iu_t *src, fcp_cmnd_iu_t *dst)
{
int i;
@@ -1998,23 +2107,43 @@ isp_put_ct_hdr(ispsoftc_t *isp, ct_hdr_t *src, ct_hdr_t *dst)
ISP_IOZPUT_8(isp, src->ct_vunique, &dst->ct_vunique);
}
+void
+isp_put_fcp_rsp_iu(ispsoftc_t *isp, fcp_rsp_iu_t *src, fcp_rsp_iu_t *dst)
+{
+ int i;
+ for (i = 0; i < ((sizeof (src->fcp_rsp_reserved))/(sizeof (src->fcp_rsp_reserved[0]))); i++) {
+ ISP_IOZPUT_8(isp, src->fcp_rsp_reserved[i], &dst->fcp_rsp_reserved[i]);
+ }
+ ISP_IOZPUT_16(isp, src->fcp_rsp_status_qualifier, &dst->fcp_rsp_status_qualifier);
+ ISP_IOZPUT_8(isp, src->fcp_rsp_bits, &dst->fcp_rsp_bits);
+ ISP_IOZPUT_8(isp, src->fcp_rsp_scsi_status, &dst->fcp_rsp_scsi_status);
+ ISP_IOZPUT_32(isp, src->fcp_rsp_resid, &dst->fcp_rsp_resid);
+ ISP_IOZPUT_32(isp, src->fcp_rsp_snslen, &dst->fcp_rsp_snslen);
+ ISP_IOZPUT_32(isp, src->fcp_rsp_rsplen, &dst->fcp_rsp_rsplen);
+}
+
#ifdef ISP_TARGET_MODE
/*
* Command shipping- finish off first queue entry and do dma mapping and
* additional segments as needed.
*
- * Called with the first queue entry at least partially filled out.
+ * Called with the first queue entry mostly filled out.
+ * Our job here is to finish that and add additional data
+ * segments if needed.
+ *
+ * We used to do synthetic entries to split data and status
+ * at this level, but that started getting too tricky.
*/
int
isp_send_tgt_cmd(ispsoftc_t *isp, void *fqe, void *segp, uint32_t nsegs, uint32_t totalcnt, isp_ddir_t ddir, void *snsptr, uint32_t snslen)
{
- uint8_t storage[QENTRY_LEN], storage2[QENTRY_LEN];
+ uint8_t storage[QENTRY_LEN];
uint8_t type, nqe;
uint32_t seg, curseg, seglim, nxt, nxtnxt;
ispds_t *dsp = NULL;
ispds64_t *dsp64 = NULL;
- void *qe0, *qe1, *sqe = NULL;
+ void *qe0, *qe1;
qe0 = isp_getrqentry(isp);
if (qe0 == NULL) {
@@ -2027,7 +2156,7 @@ isp_send_tgt_cmd(ispsoftc_t *isp, void *fqe, void *segp, uint32_t nsegs, uint32_
seglim = 0;
/*
- * If we have no data to transmit, just copy the first IOCB and start it up.
+ * If we have data to transmit, figure out how many segments can fit into the first entry.
*/
if (ddir != ISP_NOXFR) {
/*
@@ -2039,100 +2168,25 @@ isp_send_tgt_cmd(ispsoftc_t *isp, void *fqe, void *segp, uint32_t nsegs, uint32_
seglim = ISP_RQDSEG;
break;
case RQSTYPE_CTIO2:
+ dsp = ((ct2_entry_t *)fqe)->rsp.m0.u.ct_dataseg;
+ seglim = ISP_RQDSEG_T2;
+ break;
case RQSTYPE_CTIO3:
- {
- ct2_entry_t *ct = fqe, *ct2 = (ct2_entry_t *) storage2;
- uint16_t swd = ct->rsp.m0.ct_scsi_status & 0xff;
-
- if ((ct->ct_flags & CT2_SENDSTATUS) && (swd || ct->ct_resid)) {
- memcpy(ct2, ct, QENTRY_LEN);
- /*
- * Clear fields from first CTIO2 that now need to be cleared
- */
- ct->ct_header.rqs_seqno = 0;
- ct->ct_flags &= ~(CT2_SENDSTATUS|CT2_CCINCR|CT2_FASTPOST);
- ct->ct_resid = 0;
- ct->ct_syshandle = 0;
- ct->rsp.m0.ct_scsi_status = 0;
-
- /*
- * Reset fields in the second CTIO2 as appropriate.
- */
- ct2->ct_flags &= ~(CT2_FLAG_MMASK|CT2_DATAMASK|CT2_FASTPOST);
- ct2->ct_flags |= CT2_NO_DATA|CT2_FLAG_MODE1;
- ct2->ct_seg_count = 0;
- ct2->ct_reloff = 0;
- memset(&ct2->rsp, 0, sizeof (ct2->rsp));
- if (swd == SCSI_CHECK && snsptr && snslen) {
- ct2->rsp.m1.ct_senselen = min(snslen, MAXRESPLEN);
- memcpy(ct2->rsp.m1.ct_resp, snsptr, ct2->rsp.m1.ct_senselen);
- swd |= CT2_SNSLEN_VALID;
- }
- if (ct2->ct_resid > 0) {
- swd |= CT2_DATA_UNDER;
- } else if (ct2->ct_resid < 0) {
- swd |= CT2_DATA_OVER;
- }
- ct2->rsp.m1.ct_scsi_status = swd;
- sqe = storage2;
- }
- if (type == RQSTYPE_CTIO2) {
- dsp = ct->rsp.m0.u.ct_dataseg;
- seglim = ISP_RQDSEG_T2;
- } else {
- dsp64 = ct->rsp.m0.u.ct_dataseg64;
- seglim = ISP_RQDSEG_T3;
- }
+ dsp64 = ((ct2_entry_t *)fqe)->rsp.m0.u.ct_dataseg64;
+ seglim = ISP_RQDSEG_T3;
break;
- }
case RQSTYPE_CTIO7:
- {
- ct7_entry_t *ct = fqe, *ct2 = (ct7_entry_t *)storage2;
- uint16_t swd = ct->ct_scsi_status & 0xff;
-
- dsp64 = &ct->rsp.m0.ds;
+ dsp64 = &((ct7_entry_t *)fqe)->rsp.m0.ds;
seglim = 1;
- if ((ct->ct_flags & CT7_SENDSTATUS) && (swd || ct->ct_resid)) {
- memcpy(ct2, ct, sizeof (ct7_entry_t));
-
- /*
- * Clear fields from first CTIO7 that now need to be cleared
- */
- ct->ct_header.rqs_seqno = 0;
- ct->ct_flags &= ~CT7_SENDSTATUS;
- ct->ct_resid = 0;
- ct->ct_syshandle = 0;
- ct->ct_scsi_status = 0;
-
- /*
- * Reset fields in the second CTIO7 as appropriate.
- */
- ct2->ct_flags &= ~(CT7_FLAG_MMASK|CT7_DATAMASK);
- ct2->ct_flags |= CT7_NO_DATA|CT7_NO_DATA|CT7_FLAG_MODE1;
- ct2->ct_seg_count = 0;
- memset(&ct2->rsp, 0, sizeof (ct2->rsp));
- if (swd == SCSI_CHECK && snsptr && snslen) {
- ct2->rsp.m1.ct_resplen = min(snslen, MAXRESPLEN_24XX);
- memcpy(ct2->rsp.m1.ct_resp, snsptr, ct2->rsp.m1.ct_resplen);
- swd |= (FCP_SNSLEN_VALID << 8);
- }
- if (ct2->ct_resid < 0) {
- swd |= (FCP_RESID_OVERFLOW << 8);
- } else if (ct2->ct_resid > 0) {
- swd |= (FCP_RESID_UNDERFLOW << 8);
- }
- ct2->ct_scsi_status = swd;
- sqe = storage2;
- }
break;
- }
default:
return (CMD_COMPLETE);
}
}
/*
- * Fill out the data transfer stuff in the first queue entry
+ * First, fill out any of the data transfer stuff that fits
+ * in the first queue entry.
*/
if (seglim > nsegs) {
seglim = nsegs;
@@ -2147,12 +2201,6 @@ isp_send_tgt_cmd(ispsoftc_t *isp, void *fqe, void *segp, uint32_t nsegs, uint32_
}
/*
- * First, if we are sending status with data and we have a non-zero
- * status or non-zero residual, we have to make a synthetic extra CTIO
- * that contains the status that we'll ship separately (FC cards only).
- */
-
- /*
* Second, start building additional continuation segments as needed.
*/
while (seg < nsegs) {
@@ -2198,25 +2246,10 @@ isp_send_tgt_cmd(ispsoftc_t *isp, void *fqe, void *segp, uint32_t nsegs, uint32_
}
/*
- * If we have a synthetic queue entry to complete things, do it here.
+ * Third, not patch up the first queue entry with the number of segments
+ * we actually are going to be transmitting. At the same time, handle
+ * any mode 2 requests.
*/
- if (sqe) {
- nxtnxt = ISP_NXT_QENTRY(nxt, RQUEST_QUEUE_LEN(isp));
- if (nxtnxt == isp->isp_reqodx) {
- return (CMD_EAGAIN);
- }
- qe1 = ISP_QUEUE_ENTRY(isp->isp_rquest, nxt);
- nxt = nxtnxt;
- if (type == RQSTYPE_CTIO7) {
- isp_put_ctio7(isp, sqe, qe1);
- } else {
- isp_put_ctio2(isp, sqe, qe1);
- }
- if (isp->isp_dblev & ISP_LOGTDEBUG1) {
- isp_print_bytes(isp, "synthetic final queue entry", QENTRY_LEN, storage2);
- }
- }
-
((isphdr_t *)fqe)->rqs_entry_count = nqe;
switch (type) {
case RQSTYPE_CTIO:
@@ -2225,7 +2258,11 @@ isp_send_tgt_cmd(ispsoftc_t *isp, void *fqe, void *segp, uint32_t nsegs, uint32_
break;
case RQSTYPE_CTIO2:
case RQSTYPE_CTIO3:
- ((ct2_entry_t *)fqe)->ct_seg_count = nsegs;
+ if (((ct2_entry_t *)fqe)->ct_flags & CT2_FLAG_MODE2) {
+ ((ct2_entry_t *)fqe)->ct_seg_count = 1;
+ } else {
+ ((ct2_entry_t *)fqe)->ct_seg_count = nsegs;
+ }
if (ISP_CAP_2KLOGIN(isp)) {
isp_put_ctio2e(isp, fqe, qe0);
} else {
@@ -2233,7 +2270,11 @@ isp_send_tgt_cmd(ispsoftc_t *isp, void *fqe, void *segp, uint32_t nsegs, uint32_
}
break;
case RQSTYPE_CTIO7:
- ((ct7_entry_t *)fqe)->ct_seg_count = nsegs;
+ if (((ct7_entry_t *)fqe)->ct_flags & CT7_FLAG_MODE2) {
+ ((ct7_entry_t *)fqe)->ct_seg_count = 1;
+ } else {
+ ((ct7_entry_t *)fqe)->ct_seg_count = nsegs;
+ }
isp_put_ctio7(isp, fqe, qe0);
break;
default:
@@ -2405,8 +2446,9 @@ isp_find_chan_by_did(ispsoftc_t *isp, uint32_t did, uint16_t *cp)
* Add an initiator device to the port database
*/
void
-isp_add_wwn_entry(ispsoftc_t *isp, int chan, uint64_t ini, uint16_t nphdl, uint32_t s_id)
+isp_add_wwn_entry(ispsoftc_t *isp, int chan, uint64_t ini, uint16_t nphdl, uint32_t s_id, uint16_t prli_params)
{
+ char buf[64];
fcparam *fcp;
fcportdb_t *lp;
isp_notify_t nt;
@@ -2415,8 +2457,8 @@ isp_add_wwn_entry(ispsoftc_t *isp, int chan, uint64_t ini, uint16_t nphdl, uint3
fcp = FCPARAM(isp, chan);
if (nphdl >= MAX_NPORT_HANDLE) {
- isp_prt(isp, ISP_LOGWARN, "%s: Chan %d IID 0x%016llx bad N-Port handle 0x%04x Port ID 0x%06x",
- __func__, chan, (unsigned long long) ini, nphdl, s_id);
+ isp_prt(isp, ISP_LOGWARN, "Chan %d IID 0x%016llx bad N-Port handle 0x%04x Port ID 0x%06x",
+ chan, (unsigned long long) ini, nphdl, s_id);
return;
}
@@ -2451,19 +2493,18 @@ isp_add_wwn_entry(ispsoftc_t *isp, int chan, uint64_t ini, uint16_t nphdl, uint3
if (lp) {
int something = 0;
if (lp->handle != nphdl) {
- isp_prt(isp, ISP_LOGWARN, "%s: Chan %d attempt to re-enter N-port handle 0x%04x IID 0x%016llx Port ID 0x%06x finds IID 0x%016llx N-Port Handle 0x%04x Port ID 0x%06x",
- __func__, chan, nphdl, (unsigned long long)ini, s_id, (unsigned long long) lp->port_wwn, lp->handle, lp->portid);
+ isp_prt(isp, ISP_LOGWARN, "Chan %d attempt to re-enter N-port handle 0x%04x IID 0x%016llx Port ID 0x%06x finds IID 0x%016llx N-Port Handle 0x%04x Port ID 0x%06x",
+ chan, nphdl, (unsigned long long)ini, s_id, (unsigned long long) lp->port_wwn, lp->handle, lp->portid);
isp_dump_portdb(isp, chan);
return;
}
if (s_id != PORT_NONE) {
if (lp->portid == PORT_NONE) {
lp->portid = s_id;
- isp_prt(isp, ISP_LOGTINFO, "%s: Chan %d N-port handle 0x%04x gets Port ID 0x%06x", __func__, chan, nphdl, s_id);
+ isp_prt(isp, ISP_LOGTINFO, "Chan %d N-port handle 0x%04x gets Port ID 0x%06x", chan, nphdl, s_id);
something++;
} else if (lp->portid != s_id) {
- isp_prt(isp, ISP_LOGTINFO, "%s: Chan %d N-port handle 0x%04x tries to change Port ID 0x%06x to 0x%06x", __func__, chan, nphdl,
- lp->portid, s_id);
+ isp_prt(isp, ISP_LOGTINFO, "Chan %d N-port handle 0x%04x tries to change Port ID 0x%06x to 0x%06x", chan, nphdl, lp->portid, s_id);
isp_dump_portdb(isp, chan);
return;
}
@@ -2471,18 +2512,24 @@ isp_add_wwn_entry(ispsoftc_t *isp, int chan, uint64_t ini, uint16_t nphdl, uint3
if (VALID_INI(ini)) {
if (!VALID_INI(lp->port_wwn)) {
lp->port_wwn = ini;
- isp_prt(isp, ISP_LOGTINFO, "%s: Chan %d N-port handle 0x%04x gets WWN 0x%016llxx", __func__, chan, nphdl, (unsigned long long) ini);
+ isp_prt(isp, ISP_LOGTINFO, "Chan %d N-port handle 0x%04x gets WWN 0x%016llxx", chan, nphdl, (unsigned long long) ini);
something++;
} else if (lp->port_wwn != ini) {
- isp_prt(isp, ISP_LOGWARN, "%s: Chan %d N-port handle 0x%04x tries to change WWN 0x%016llx to 0x%016llx", __func__, chan, nphdl,
+ isp_prt(isp, ISP_LOGWARN, "Chan %d N-port handle 0x%04x tries to change WWN 0x%016llx to 0x%016llx", chan, nphdl,
(unsigned long long) lp->port_wwn, (unsigned long long) ini);
isp_dump_portdb(isp, chan);
return;
}
}
-
+ if (prli_params != lp->prli_word3) {
+ lp->prli_word3 = prli_params;
+ isp_gen_role_str(buf, sizeof (buf), lp->prli_word3);
+ isp_prt(isp, ISP_LOGTINFO|ISP_LOGCONFIG, "Chan %d IID 0x%016llx N-Port Handle 0x%04x Port ID 0x%06x new PRLI Word 3 params %s", chan,
+ (unsigned long long) lp->port_wwn, lp->handle, lp->portid, buf);
+ something++;
+ }
if (!something) {
- isp_prt(isp, ISP_LOGWARN, "%s: Chan %d IID 0x%016llx N-Port Handle 0x%04x Port ID 0x%06x reentered", __func__, chan,
+ isp_prt(isp, ISP_LOGWARN, "Chan %d IID 0x%016llx N-Port Handle 0x%04x Port ID 0x%06x reentered", chan,
(unsigned long long) lp->port_wwn, lp->handle, lp->portid);
}
return;
@@ -2500,8 +2547,8 @@ isp_add_wwn_entry(ispsoftc_t *isp, int chan, uint64_t ini, uint16_t nphdl, uint3
}
}
if (i < 0) {
- isp_prt(isp, ISP_LOGWARN, "%s: Chan %d IID 0x%016llx N-Port Handle 0x%04x Port ID 0x%06x- no room in port database",
- __func__, chan, (unsigned long long) ini, nphdl, s_id);
+ isp_prt(isp, ISP_LOGWARN, "Chan %d IID 0x%016llx N-Port Handle 0x%04x Port ID 0x%06x- no room in port database",
+ chan, (unsigned long long) ini, nphdl, s_id);
return;
}
@@ -2511,9 +2558,12 @@ isp_add_wwn_entry(ispsoftc_t *isp, int chan, uint64_t ini, uint16_t nphdl, uint3
lp->handle = nphdl;
lp->portid = s_id;
lp->port_wwn = ini;
+ lp->prli_word3 = prli_params;
+ isp_gen_role_str(buf, sizeof (buf), lp->prli_word3);
fcp->isp_tgt_map[nphdl] = i + 1;
- isp_prt(isp, ISP_LOGTINFO, "%s: Chan %d IID 0x%016llx N-Port Handle 0x%04x Port ID 0x%06x vtgt %d added", __func__, chan, (unsigned long long) ini, nphdl, s_id, fcp->isp_tgt_map[nphdl] - 1);
+ isp_prt(isp, ISP_LOGTINFO, "Chan %d IID 0x%016llx N-Port Handle 0x%04x Port ID 0x%06x vtgt %d %s added", chan,
+ (unsigned long long) ini, nphdl, s_id, fcp->isp_tgt_map[nphdl] - 1, buf);
ISP_MEMZERO(&nt, sizeof (nt));
nt.nt_hba = isp;
@@ -2538,8 +2588,8 @@ isp_del_wwn_entry(ispsoftc_t *isp, int chan, uint64_t ini, uint16_t nphdl, uint3
fcportdb_t *lp;
if (nphdl >= MAX_NPORT_HANDLE) {
- isp_prt(isp, ISP_LOGWARN, "%s: Chan %d IID 0x%016llx bad N-Port handle 0x%04x Port ID 0x%06x",
- __func__, chan, (unsigned long long) ini, nphdl, s_id);
+ isp_prt(isp, ISP_LOGWARN, "Chan %d IID 0x%016llx bad N-Port handle 0x%04x Port ID 0x%06x",
+ chan, (unsigned long long) ini, nphdl, s_id);
return;
}
@@ -2553,13 +2603,13 @@ isp_del_wwn_entry(ispsoftc_t *isp, int chan, uint64_t ini, uint16_t nphdl, uint3
}
}
if (lp == NULL) {
- isp_prt(isp, ISP_LOGWARN, "%s: Chan %d IID 0x%016llx N-Port Handle 0x%04x Port ID 0x%06x cannot be found to be cleared",
- __func__, chan, (unsigned long long) ini, nphdl, s_id);
+ isp_prt(isp, ISP_LOGWARN, "Chan %d IID 0x%016llx N-Port Handle 0x%04x Port ID 0x%06x cannot be found to be cleared",
+ chan, (unsigned long long) ini, nphdl, s_id);
isp_dump_portdb(isp, chan);
return;
}
- isp_prt(isp, ISP_LOGTINFO, "%s: Chan %d IID 0x%016llx N-Port Handle 0x%04x Port ID 0x%06x vtgt %d cleared",
- __func__, chan, (unsigned long long) lp->port_wwn, nphdl, lp->portid, fcp->isp_tgt_map[nphdl] - 1);
+ isp_prt(isp, ISP_LOGTINFO, "Chan %d IID 0x%016llx N-Port Handle 0x%04x Port ID 0x%06x vtgt %d cleared",
+ chan, (unsigned long long) lp->port_wwn, nphdl, lp->portid, fcp->isp_tgt_map[nphdl] - 1);
fcp->isp_tgt_map[nphdl] = 0;
ISP_MEMZERO(&nt, sizeof (nt));
@@ -2650,7 +2700,7 @@ isp_del_wwn_entries(ispsoftc_t *isp, isp_notify_t *mp)
return;
}
}
- isp_prt(isp, ISP_LOGWARN, "%s: Chan %d unable to find entry to delete N-port handle 0x%04x initiator WWN 0x%016llx Port ID 0x%06x", __func__,
+ isp_prt(isp, ISP_LOGWARN, "Chan %d unable to find entry to delete N-port handle 0x%04x initiator WWN 0x%016llx Port ID 0x%06x",
mp->nt_channel, mp->nt_nphdl, (unsigned long long) mp->nt_wwn, mp->nt_sid);
}
@@ -2973,8 +3023,14 @@ isp_put_ctio2(ispsoftc_t *isp, ct2_entry_t *src, ct2_entry_t *dst)
ISP_IOXPUT_16(isp, src->rsp.m2._reserved2, &dst->rsp.m2._reserved2);
ISP_IOXPUT_16(isp, src->rsp.m2._reserved3, &dst->rsp.m2._reserved3);
ISP_IOXPUT_32(isp, src->rsp.m2.ct_datalen, &dst->rsp.m2.ct_datalen);
- ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_base, &dst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
- ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_count, &dst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
+ if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO2) {
+ ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_base, &dst->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_base);
+ ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_count, &dst->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_count);
+ } else {
+ ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_base, &dst->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_base);
+ ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_basehi, &dst->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_basehi);
+ ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_count, &dst->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_count);
+ }
}
}
@@ -3026,8 +3082,14 @@ isp_put_ctio2e(ispsoftc_t *isp, ct2e_entry_t *src, ct2e_entry_t *dst)
ISP_IOXPUT_16(isp, src->rsp.m2._reserved2, &dst->rsp.m2._reserved2);
ISP_IOXPUT_16(isp, src->rsp.m2._reserved3, &dst->rsp.m2._reserved3);
ISP_IOXPUT_32(isp, src->rsp.m2.ct_datalen, &dst->rsp.m2.ct_datalen);
- ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_base, &dst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
- ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_count, &dst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
+ if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO2) {
+ ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_base, &dst->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_base);
+ ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_count, &dst->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_count);
+ } else {
+ ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_base, &dst->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_base);
+ ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_basehi, &dst->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_basehi);
+ ISP_IOXPUT_32(isp, src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_count, &dst->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_count);
+ }
}
}
@@ -3072,8 +3134,9 @@ isp_put_ctio7(ispsoftc_t *isp, ct7_entry_t *src, ct7_entry_t *dst)
}
} else {
ISP_IOXPUT_32(isp, src->rsp.m2.reserved0, &dst->rsp.m2.reserved0);
- ISP_IOXPUT_32(isp, src->rsp.m2.ct_datalen, &dst->rsp.m2.ct_datalen);
ISP_IOXPUT_32(isp, src->rsp.m2.reserved1, &dst->rsp.m2.reserved1);
+ ISP_IOXPUT_32(isp, src->rsp.m2.ct_datalen, &dst->rsp.m2.ct_datalen);
+ ISP_IOXPUT_32(isp, src->rsp.m2.reserved2, &dst->rsp.m2.reserved2);
ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_base, &dst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_basehi, &dst->rsp.m2.ct_fcp_rsp_iudata.ds_basehi);
ISP_IOXPUT_32(isp, src->rsp.m2.ct_fcp_rsp_iudata.ds_count, &dst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
@@ -3132,8 +3195,14 @@ isp_get_ctio2(ispsoftc_t *isp, ct2_entry_t *src, ct2_entry_t *dst)
ISP_IOXGET_16(isp, &src->rsp.m2._reserved2, dst->rsp.m2._reserved2);
ISP_IOXGET_16(isp, &src->rsp.m2._reserved3, dst->rsp.m2._reserved3);
ISP_IOXGET_32(isp, &src->rsp.m2.ct_datalen, dst->rsp.m2.ct_datalen);
- ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_base, dst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
- ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_count, dst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
+ if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO2) {
+ ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_base, dst->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_base);
+ ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_count, dst->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_count);
+ } else {
+ ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_base, dst->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_base);
+ ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_basehi, dst->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_basehi);
+ ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_count, dst->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_count);
+ }
}
}
@@ -3187,8 +3256,14 @@ isp_get_ctio2e(ispsoftc_t *isp, ct2e_entry_t *src, ct2e_entry_t *dst)
ISP_IOXGET_16(isp, &src->rsp.m2._reserved2, dst->rsp.m2._reserved2);
ISP_IOXGET_16(isp, &src->rsp.m2._reserved3, dst->rsp.m2._reserved3);
ISP_IOXGET_32(isp, &src->rsp.m2.ct_datalen, dst->rsp.m2.ct_datalen);
- ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_base, dst->rsp.m2.ct_fcp_rsp_iudata.ds_base);
- ISP_IOXGET_32(isp, &src->rsp.m2.ct_fcp_rsp_iudata.ds_count, dst->rsp.m2.ct_fcp_rsp_iudata.ds_count);
+ if (src->ct_header.rqs_entry_type == RQSTYPE_CTIO2) {
+ ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_base, dst->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_base);
+ ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_count, dst->rsp.m2.u.ct_fcp_rsp_iudata_32.ds_count);
+ } else {
+ ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_base, dst->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_base);
+ ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_basehi, dst->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_basehi);
+ ISP_IOXGET_32(isp, &src->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_count, dst->rsp.m2.u.ct_fcp_rsp_iudata_64.ds_count);
+ }
}
}
diff --git a/sys/dev/isp/isp_library.h b/sys/dev/isp/isp_library.h
index 4e0c7f8..a326bfa 100644
--- a/sys/dev/isp/isp_library.h
+++ b/sys/dev/isp/isp_library.h
@@ -36,7 +36,7 @@
* stuff figured out, you can make all the code in one spot.
*/
typedef enum { ISP_TO_DEVICE, ISP_FROM_DEVICE, ISP_NOXFR} isp_ddir_t;
-int isp_send_cmd(ispsoftc_t *, void *, void *, uint32_t, uint32_t, isp_ddir_t);
+int isp_send_cmd(ispsoftc_t *, void *, void *, uint32_t, uint32_t, isp_ddir_t, ispds64_t *);
/*
* Handle management functions.
@@ -66,6 +66,7 @@ void isp_print_bytes(ispsoftc_t *, const char *, int, void *);
extern const char *isp_class3_roles[4];
int isp_fc_runstate(ispsoftc_t *, int, int);
void isp_dump_portdb(ispsoftc_t *, int);
+void isp_gen_role_str(char *, size_t, uint16_t);
const char *isp_fc_fw_statename(int);
const char *isp_fc_loop_statename(int);
@@ -106,6 +107,7 @@ void isp_put_24xx_abrt(ispsoftc_t *, isp24xx_abrt_t *, isp24xx_abrt_t *);
void isp_put_cont_req(ispsoftc_t *, ispcontreq_t *, ispcontreq_t *);
void isp_put_cont64_req(ispsoftc_t *, ispcontreq64_t *, ispcontreq64_t *);
void isp_get_response(ispsoftc_t *, ispstatusreq_t *, ispstatusreq_t *);
+void isp_get_cont_response(ispsoftc_t *, ispstatus_cont_t *, ispstatus_cont_t *);
void isp_get_24xx_response(ispsoftc_t *, isp24xx_statusreq_t *, isp24xx_statusreq_t *);
void isp_get_24xx_abrt(ispsoftc_t *, isp24xx_abrt_t *, isp24xx_abrt_t *);
void isp_get_rio1(ispsoftc_t *, isp_rio1_t *, isp_rio1_t *);
@@ -139,10 +141,12 @@ void isp_get_ga_nxt_response(ispsoftc_t *, sns_ga_nxt_rsp_t *, sns_ga_nxt_rsp_t
void isp_get_els(ispsoftc_t *, els_t *, els_t *);
void isp_put_els(ispsoftc_t *, els_t *, els_t *);
void isp_get_fc_hdr(ispsoftc_t *, fc_hdr_t *, fc_hdr_t *);
+void isp_put_fc_hdr(ispsoftc_t *, fc_hdr_t *, fc_hdr_t *);
void isp_get_fcp_cmnd_iu(ispsoftc_t *, fcp_cmnd_iu_t *, fcp_cmnd_iu_t *);
void isp_put_rft_id(ispsoftc_t *, rft_id_t *, rft_id_t *);
void isp_get_ct_hdr(ispsoftc_t *isp, ct_hdr_t *, ct_hdr_t *);
void isp_put_ct_hdr(ispsoftc_t *isp, ct_hdr_t *, ct_hdr_t *);
+void isp_put_fcp_rsp_iu(ispsoftc_t *isp, fcp_rsp_iu_t *, fcp_rsp_iu_t *);
#define ISP_HANDLE_MASK 0x7fff
@@ -166,7 +170,7 @@ int isp_find_pdb_by_wwn(ispsoftc_t *, int, uint64_t, fcportdb_t **);
int isp_find_pdb_by_loopid(ispsoftc_t *, int, uint32_t, fcportdb_t **);
int isp_find_pdb_by_sid(ispsoftc_t *, int, uint32_t, fcportdb_t **);
void isp_find_chan_by_did(ispsoftc_t *, uint32_t, uint16_t *);
-void isp_add_wwn_entry(ispsoftc_t *, int, uint64_t, uint16_t, uint32_t);
+void isp_add_wwn_entry(ispsoftc_t *, int, uint64_t, uint16_t, uint32_t, uint16_t);
void isp_del_wwn_entry(ispsoftc_t *, int, uint64_t, uint16_t, uint32_t);
void isp_del_all_wwn_entries(ispsoftc_t *, int);
void isp_del_wwn_entries(ispsoftc_t *, isp_notify_t *);
diff --git a/sys/dev/isp/isp_pci.c b/sys/dev/isp/isp_pci.c
index 7a852cb..d4a214b 100644
--- a/sys/dev/isp/isp_pci.c
+++ b/sys/dev/isp/isp_pci.c
@@ -588,6 +588,20 @@ isp_get_specific_options(device_t dev, int chan, ispsoftc_t *isp)
}
}
+ tval = 0;
+ (void) resource_int_value(device_get_name(dev), device_get_unit(dev), "nofctape", &tval);
+ if (tval) {
+ isp->isp_confopts |= ISP_CFG_NOFCTAPE;
+ }
+
+ tval = 0;
+ (void) resource_int_value(device_get_name(dev), device_get_unit(dev), "fctape", &tval);
+ if (tval) {
+ isp->isp_confopts &= ~ISP_CFG_NOFCTAPE;
+ isp->isp_confopts |= ISP_CFG_FCTAPE;
+ }
+
+
/*
* Because the resource_*_value functions can neither return
* 64 bit integer values, nor can they be directly coerced
@@ -664,6 +678,8 @@ isp_pci_attach(device_t dev)
isp = &pcs->pci_isp;
isp->isp_dev = dev;
isp->isp_nchan = 1;
+ if (sizeof (bus_addr_t) > 4)
+ isp->isp_osinfo.sixtyfourbit = 1;
/*
* Get Generic Options
@@ -1028,6 +1044,9 @@ isp_pci_detach(device_t dev)
pci_release_msi(dev);
}
(void) bus_release_resource(dev, pcs->rtp, pcs->rgd, pcs->regs);
+ /*
+ * XXX: THERE IS A LOT OF LEAKAGE HERE
+ */
if (pcs->pci_isp.isp_param) {
free(pcs->pci_isp.isp_param, M_DEVBUF);
pcs->pci_isp.isp_param = NULL;
@@ -1441,6 +1460,7 @@ static void
imc(void *arg, bus_dma_segment_t *segs, int nseg, int error)
{
struct imush *imushp = (struct imush *) arg;
+ isp_ecmd_t *ecmd;
if (error) {
imushp->error = error;
@@ -1451,17 +1471,33 @@ imc(void *arg, bus_dma_segment_t *segs, int nseg, int error)
return;
}
isp_prt(imushp->isp, ISP_LOGDEBUG0, "request/result area @ 0x%jx/0x%jx", (uintmax_t) segs->ds_addr, (uintmax_t) segs->ds_len);
+
imushp->isp->isp_rquest = imushp->vbase;
imushp->isp->isp_rquest_dma = segs->ds_addr;
segs->ds_addr += ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(imushp->isp));
imushp->vbase += ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(imushp->isp));
+
imushp->isp->isp_result_dma = segs->ds_addr;
imushp->isp->isp_result = imushp->vbase;
-
+ segs->ds_addr += ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(imushp->isp));
+ imushp->vbase += ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(imushp->isp));
+
+ if (imushp->isp->isp_type >= ISP_HA_FC_2300) {
+ imushp->isp->isp_osinfo.ecmd_dma = segs->ds_addr;
+ imushp->isp->isp_osinfo.ecmd_free = (isp_ecmd_t *)imushp->vbase;
+ imushp->isp->isp_osinfo.ecmd_base = imushp->isp->isp_osinfo.ecmd_free;
+ for (ecmd = imushp->isp->isp_osinfo.ecmd_free; ecmd < &imushp->isp->isp_osinfo.ecmd_free[N_XCMDS]; ecmd++) {
+ if (ecmd == &imushp->isp->isp_osinfo.ecmd_free[N_XCMDS - 1]) {
+ ecmd->next = NULL;
+ } else {
+ ecmd->next = ecmd + 1;
+ }
+ }
+ }
#ifdef ISP_TARGET_MODE
+ segs->ds_addr += (N_XCMDS * XCMD_SIZE);
+ imushp->vbase += (N_XCMDS * XCMD_SIZE);
if (IS_24XX(imushp->isp)) {
- segs->ds_addr += ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(imushp->isp));
- imushp->vbase += ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(imushp->isp));
imushp->isp->isp_atioq_dma = segs->ds_addr;
imushp->isp->isp_atioq = imushp->vbase;
}
@@ -1531,11 +1567,11 @@ isp_pci_mbxdma(ispsoftc_t *isp)
return (1);
}
+#ifdef ISP_TARGET_MODE
/*
* XXX: We don't really support 64 bit target mode for parallel scsi yet
*/
-#ifdef ISP_TARGET_MODE
- if (IS_SCSI(isp) && sizeof (bus_addr_t) > 4) {
+ if (IS_SCSI(isp) && isp->isp_osinfo.sixtyfourbit) {
free(isp->isp_osinfo.pcmd_pool, M_DEVBUF);
isp_prt(isp, ISP_LOGERR, "we cannot do DAC for SPI cards yet");
ISP_LOCK(isp);
@@ -1580,7 +1616,9 @@ isp_pci_mbxdma(ispsoftc_t *isp)
/*
* Allocate and map the request and result queues (and ATIO queue
- * if we're a 2400 supporting target mode).
+ * if we're a 2400 supporting target mode), and a region for
+ * external dma addressable command/status structures (23XX and
+ * later).
*/
len = ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(isp));
len += ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(isp));
@@ -1589,7 +1627,9 @@ isp_pci_mbxdma(ispsoftc_t *isp)
len += ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(isp));
}
#endif
-
+ if (isp->isp_type >= ISP_HA_FC_2300) {
+ len += (N_XCMDS * XCMD_SIZE);
+ }
ns = (len / PAGE_SIZE) + 1;
/*
@@ -1650,6 +1690,19 @@ isp_pci_mbxdma(ispsoftc_t *isp)
bus_dma_tag_destroy(fc->tdmat);
goto bad;
}
+ for (i = 0; i < INITIAL_NEXUS_COUNT; i++) {
+ struct isp_nexus *n = malloc(sizeof (struct isp_nexus), M_DEVBUF, M_NOWAIT | M_ZERO);
+ if (n == NULL) {
+ while (fc->nexus_free_list) {
+ n = fc->nexus_free_list;
+ fc->nexus_free_list = n->next;
+ free(n, M_DEVBUF);
+ }
+ goto bad;
+ }
+ n->next = fc->nexus_free_list;
+ fc->nexus_free_list = n;
+ }
}
}
@@ -1679,6 +1732,11 @@ bad:
struct isp_fc *fc = ISP_FC_PC(isp, cmap);
bus_dmamem_free(fc->tdmat, base, fc->tdmap);
bus_dma_tag_destroy(fc->tdmat);
+ while (fc->nexus_free_list) {
+ struct isp_nexus *n = fc->nexus_free_list;
+ fc->nexus_free_list = n->next;
+ free(n, M_DEVBUF);
+ }
}
bus_dmamem_free(isp->isp_osinfo.cdmat, base, isp->isp_osinfo.cdmap);
bus_dma_tag_destroy(isp->isp_osinfo.cdmat);
@@ -1733,7 +1791,7 @@ tdma2(void *arg, bus_dma_segment_t *dm_segs, int nseg, int error)
isp = mp->isp;
rq = mp->rq;
if (nseg) {
- if (sizeof (bus_addr_t) > 4) {
+ if (isp->isp_osinfo.sixtyfourbit) {
if (nseg >= ISP_NSEG64_MAX) {
isp_prt(isp, ISP_LOGERR, "number of segments (%d) exceed maximum we can support (%d)", nseg, ISP_NSEG64_MAX);
mp->error = EFAULT;
@@ -1766,8 +1824,14 @@ tdma2(void *arg, bus_dma_segment_t *dm_segs, int nseg, int error)
ddir = ISP_NOXFR;
}
- if (isp_send_tgt_cmd(isp, rq, dm_segs, nseg, XS_XFRLEN(csio), ddir, &csio->sense_data, csio->sense_len) != CMD_QUEUED) {
+ error = isp_send_tgt_cmd(isp, rq, dm_segs, nseg, XS_XFRLEN(csio), ddir, &csio->sense_data, csio->sense_len);
+ switch (error) {
+ case CMD_EAGAIN:
mp->error = MUSHERR_NOQENTRIES;
+ case CMD_QUEUED:
+ break;
+ default:
+ mp->error = EIO;
}
}
#endif
@@ -1802,7 +1866,7 @@ dma2(void *arg, bus_dma_segment_t *dm_segs, int nseg, int error)
isp = mp->isp;
rq = mp->rq;
if (nseg) {
- if (sizeof (bus_addr_t) > 4) {
+ if (isp->isp_osinfo.sixtyfourbit) {
if (nseg >= ISP_NSEG64_MAX) {
isp_prt(isp, ISP_LOGERR, "number of segments (%d) exceed maximum we can support (%d)", nseg, ISP_NSEG64_MAX);
mp->error = EFAULT;
@@ -1835,8 +1899,16 @@ dma2(void *arg, bus_dma_segment_t *dm_segs, int nseg, int error)
ddir = ISP_NOXFR;
}
- if (isp_send_cmd(isp, rq, dm_segs, nseg, XS_XFRLEN(csio), ddir) != CMD_QUEUED) {
+ error = isp_send_cmd(isp, rq, dm_segs, nseg, XS_XFRLEN(csio), ddir, (ispds64_t *)csio->req_map);
+ switch (error) {
+ case CMD_EAGAIN:
mp->error = MUSHERR_NOQENTRIES;
+ break;
+ case CMD_QUEUED:
+ break;
+ default:
+ mp->error = EIO;
+ break;
}
}
@@ -1936,11 +2008,11 @@ isp_pci_dmasetup(ispsoftc_t *isp, struct ccb_scsiio *csio, void *ff)
if (mp->error == MUSHERR_NOQENTRIES) {
retval = CMD_EAGAIN;
} else if (mp->error == EFBIG) {
- XS_SETERR(csio, CAM_REQ_TOO_BIG);
+ csio->ccb_h.status = CAM_REQ_TOO_BIG;
} else if (mp->error == EINVAL) {
- XS_SETERR(csio, CAM_REQ_INVALID);
+ csio->ccb_h.status = CAM_REQ_INVALID;
} else {
- XS_SETERR(csio, CAM_UNREC_HBA_ERROR);
+ csio->ccb_h.status = CAM_UNREC_HBA_ERROR;
}
return (retval);
}
diff --git a/sys/dev/isp/isp_sbus.c b/sys/dev/isp/isp_sbus.c
index 26452e6..e63fe7e 100644
--- a/sys/dev/isp/isp_sbus.c
+++ b/sys/dev/isp/isp_sbus.c
@@ -600,7 +600,7 @@ dma2(void *arg, bus_dma_segment_t *dm_segs, int nseg, int error)
ddir = ISP_NOXFR;
}
- if (isp_send_cmd(isp, rq, dm_segs, nseg, XS_XFRLEN(csio), ddir) != CMD_QUEUED) {
+ if (isp_send_cmd(isp, rq, dm_segs, nseg, XS_XFRLEN(csio), ddir, NULL) != CMD_QUEUED) {
mp->error = MUSHERR_NOQENTRIES;
}
}
diff --git a/sys/dev/isp/isp_stds.h b/sys/dev/isp/isp_stds.h
index 2ed66cb..e53f005 100644
--- a/sys/dev/isp/isp_stds.h
+++ b/sys/dev/isp/isp_stds.h
@@ -137,9 +137,30 @@ typedef struct {
} rft_id_t;
/*
- * FCP Response IU Bits of interest
- * Source: NCITS T10, Project 1144D, Revision 08 (aka FCP2r08)
+ * FCP Response IU and bits of interest
+ * Source: NCITS T10, Project 1828D, Revision 02b (aka FCP4r02b)
*/
+typedef struct {
+ uint8_t fcp_rsp_reserved[8];
+ uint16_t fcp_rsp_status_qualifier; /* SAM-5 Status Qualifier */
+ uint8_t fcp_rsp_bits;
+ uint8_t fcp_rsp_scsi_status; /* SAM-5 SCSI Status Byte */
+ uint32_t fcp_rsp_resid;
+ uint32_t fcp_rsp_snslen;
+ uint32_t fcp_rsp_rsplen;
+ /*
+ * In the bytes that follow, it's going to be
+ * FCP RESPONSE INFO (max 8 bytes, possibly 0)
+ * FCP SENSE INFO (if any)
+ * FCP BIDIRECTIONAL READ RESID (if any)
+ */
+ uint8_t fcp_rsp_extra[0];
+} fcp_rsp_iu_t;
+#define MIN_FCP_RESPONSE_SIZE 24
+
+#define FCP_BIDIR_RSP 0x80 /* Bi-Directional response */
+#define FCP_BIDIR_RESID_UNDERFLOW 0x40
+#define FCP_BIDIR_RESID_OVERFLOW 0x20
#define FCP_CONF_REQ 0x10
#define FCP_RESID_UNDERFLOW 0x08
#define FCP_RESID_OVERFLOW 0x04
@@ -162,17 +183,41 @@ typedef struct {
#define FCP_RSPNS_TMF_SUCCEEDED 8
#define FCP_RSPNS_TMF_INCORRECT_LUN 9
+/*
+ * R_CTL field definitions
+ *
+ * Bits 31-28 are ROUTING
+ * Bits 27-24 are INFORMATION
+ *
+ * These are nibble values, not bits
+ */
+#define R_CTL_ROUTE_DATA 0x00
+#define R_CTL_ROUTE_ELS 0x02
+#define R_CTL_ROUTE_FC4_LINK 0x03
+#define R_CTL_ROUTE_VDATA 0x04
+#define R_CTL_ROUTE_EXENDED 0x05
+#define R_CTL_ROUTE_BASIC 0x08
+#define R_CTL_ROUTE_LINK 0x0c
+#define R_CTL_ROUTE_EXT_ROUTING 0x0f
+
+#define R_CTL_INFO_UNCATEGORIZED 0x00
+#define R_CTL_INFO_SOLICITED_DATA 0x01
+#define R_CTL_INFO_UNSOLICITED_CONTROL 0x02
+#define R_CTL_INFO_SOLICITED_CONTROL 0x03
+#define R_CTL_INFO_UNSOLICITED_DATA 0x04
+#define R_CTL_INFO_DATA_DESCRIPTOR 0x05
+#define R_CTL_INFO_UNSOLICITED_COMMAND 0x06
+#define R_CTL_INFO_COMMAND_STATUS 0x07
+
+#define MAKE_RCTL(a, b) (((a) << 4) | (b))
/* unconverted miscellany */
/*
* Basic FC Link Service defines
*/
-/*
- * These are in the R_CTL field.
- */
-#define ABTS 0x81
-#define BA_ACC 0x84 /* of ABORT SEQUENCE */
-#define BA_RJT 0x85 /* of ABORT SEQUENCE */
+/* #define ABTS MAKE_RCTL(R_CTL_ROUTE_BASIC, R_CTL_INFO_SOLICITED_DATA) */
+#define BA_ACC MAKE_RCTL(R_CTL_ROUTE_BASIC, R_CTL_INFO_UNSOLICITED_DATA) /* of ABORT */
+#define BA_RJT MAKE_RCTL(R_CTL_ROUTE_BASIC, R_CTL_INFO_DATA_DESCRIPTOR) /* of ABORT */
/*
* Link Service Accept/Reject
@@ -196,6 +241,23 @@ typedef struct {
#define RNC 0x53
/*
+ * PRLI Word 3 definitions
+ * FPC4-r02b January, 2011
+ */
+#define PRLI_WD3_ENHANCED_DISCOVERY (1 << 11)
+#define PRLI_WD3_REC_SUPPORT (1 << 10)
+#define PRLI_WD3_TASK_RETRY_IDENTIFICATION_REQUESTED (1 << 9)
+#define PRLI_WD3_RETRY (1 << 8)
+#define PRLI_WD3_CONFIRMED_COMPLETION_ALLOWED (1 << 7)
+#define PRLI_WD3_DATA_OVERLAY_ALLOWED (1 << 6)
+#define PRLI_WD3_INITIATOR_FUNCTION (1 << 5)
+#define PRLI_WD3_TARGET_FUNCTION (1 << 4)
+#define PRLI_WD3_READ_FCP_XFER_RDY_DISABLED (1 << 1) /* definitely supposed to be set */
+#define PRLI_WD3_WRITE_FCP_XFER_RDY_DISABLED (1 << 0)
+
+
+
+/*
* FC4 defines
*/
#define FC4_IP 5 /* ISO/EEC 8802-2 LLC/SNAP */
diff --git a/sys/dev/isp/isp_target.c b/sys/dev/isp/isp_target.c
index 8707961..aa34622 100644
--- a/sys/dev/isp/isp_target.c
+++ b/sys/dev/isp/isp_target.c
@@ -291,7 +291,7 @@ isp_target_notify(ispsoftc_t *isp, void *vptr, uint32_t *optrp)
break;
case IN_RSRC_UNAVAIL:
isp_prt(isp, ISP_LOGINFO, "Firmware out of ATIOs");
- (void) isp_notify_ack(isp, local);
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, local);
break;
case IN_RESET:
@@ -346,19 +346,29 @@ isp_target_notify(ispsoftc_t *isp, void *vptr, uint32_t *optrp)
notify.nt_sid = PORT_ANY;
notify.nt_did = PORT_ANY;
notify.nt_ncode = NT_GLOBAL_LOGOUT;
+ notify.nt_need_ack = 1;
+ notify.nt_lreserved = local;
isp_async(isp, ISPASYNC_TARGET_NOTIFY, &notify);
- (void) isp_notify_ack(isp, local);
break;
case IN_PORT_CHANGED:
isp_prt(isp, ISP_LOGTINFO, "%s: port changed", __func__);
- (void) isp_notify_ack(isp, local);
+ ISP_MEMZERO(&notify, sizeof (isp_notify_t));
+ notify.nt_hba = isp;
+ notify.nt_wwn = INI_ANY;
+ notify.nt_nphdl = NIL_HANDLE;
+ notify.nt_sid = PORT_ANY;
+ notify.nt_did = PORT_ANY;
+ notify.nt_ncode = NT_CHANGED;
+ notify.nt_need_ack = 1;
+ notify.nt_lreserved = local;
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY, &notify);
break;
default:
ISP_SNPRINTF(local, sizeof local, "%s: unknown status to RQSTYPE_NOTIFY (0x%x)", __func__, status);
isp_print_bytes(isp, local, QENTRY_LEN, vptr);
- (void) isp_notify_ack(isp, local);
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, local);
break;
}
break;
@@ -466,23 +476,30 @@ isp_lun_cmd(ispsoftc_t *isp, int cmd, int bus, int lun, int cmd_cnt, int inot_cn
if (IS_DUALBUS(isp)) {
el.le_rsvd = (bus & 0x1) << 7;
}
- el.le_cmd_count = cmd_cnt;
- el.le_in_count = inot_cnt;
+ el.le_cmd_count = (cmd_cnt < 0)? -cmd_cnt : cmd_cnt;
+ el.le_in_count = (inot_cnt < 0)? -inot_cnt : inot_cnt;
if (cmd == RQSTYPE_ENABLE_LUN) {
if (IS_SCSI(isp)) {
el.le_flags = LUN_TQAE|LUN_DISAD;
el.le_cdb6len = 12;
el.le_cdb7len = 12;
}
- } else if (cmd == -RQSTYPE_ENABLE_LUN) {
- cmd = RQSTYPE_ENABLE_LUN;
- el.le_cmd_count = 0;
- el.le_in_count = 0;
- } else if (cmd == -RQSTYPE_MODIFY_LUN) {
- cmd = RQSTYPE_MODIFY_LUN;
- el.le_ops = LUN_CCDECR | LUN_INDECR;
+ } else if (cmd == RQSTYPE_MODIFY_LUN) {
+ if (cmd_cnt == 0 && inot_cnt == 0) {
+ isp_prt(isp, ISP_LOGWARN, "makes no sense to modify a lun with both command and immediate notify counts as zero");
+ return (0);
+ }
+ if (cmd_cnt < 0)
+ el.le_ops |= LUN_CCDECR;
+ else
+ el.le_ops |= LUN_CCINCR;
+ if (inot_cnt < 0)
+ el.le_ops |= LUN_INDECR;
+ else
+ el.le_ops |= LUN_ININCR;
} else {
- el.le_ops = LUN_CCINCR | LUN_ININCR;
+ isp_prt(isp, ISP_LOGWARN, "unknown cmd (0x%x) in %s", cmd, __func__);
+ return (-1);
}
el.le_header.rqs_entry_type = cmd;
el.le_header.rqs_entry_count = 1;
@@ -662,8 +679,8 @@ isp_endcmd(ispsoftc_t *isp, ...)
cto->rsp.m1.ct_resp[0] = 0xf0;
cto->rsp.m1.ct_resp[2] = (code >> 12) & 0xf;
cto->rsp.m1.ct_resp[7] = 8;
- cto->rsp.m1.ct_resp[12] = (code >> 24) & 0xff;
- cto->rsp.m1.ct_resp[13] = (code >> 16) & 0xff;
+ cto->rsp.m1.ct_resp[12] = (code >> 16) & 0xff;
+ cto->rsp.m1.ct_resp[13] = (code >> 24) & 0xff;
} else {
cto->ct_flags |= CT7_FLAG_MODE1 | CT7_SENDSTATUS;
}
@@ -837,7 +854,7 @@ isp_target_async(ispsoftc_t *isp, int bus, int event)
default:
isp_prt(isp, ISP_LOGERR, "%s: unknown event 0x%x", __func__, event);
if (isp->isp_state == ISP_RUNSTATE) {
- (void) isp_notify_ack(isp, NULL);
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, NULL);
}
break;
}
@@ -897,13 +914,13 @@ isp_got_msg(ispsoftc_t *isp, in_entry_t *inp)
break;
default:
isp_prt(isp, ISP_LOGERR, "%s: unhandled message 0x%x", __func__, inp->in_msg[0]);
- (void) isp_notify_ack(isp, inp);
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inp);
return;
}
isp_async(isp, ISPASYNC_TARGET_NOTIFY, &notify);
} else {
isp_prt(isp, ISP_LOGERR, "%s: unknown immediate notify status 0x%x", __func__, inp->in_status);
- (void) isp_notify_ack(isp, inp);
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inp);
}
}
@@ -946,7 +963,7 @@ isp_got_msg_fc(ispsoftc_t *isp, in_fcentry_t *inp)
if (inp->in_status != IN_MSG_RECEIVED) {
isp_prt(isp, ISP_LOGINFO, f2, "immediate notify status", inp->in_status, notify.nt_lun, loopid, inp->in_task_flags, inp->in_seqid);
- (void) isp_notify_ack(isp, inp);
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inp);
return;
}
@@ -967,7 +984,7 @@ isp_got_msg_fc(ispsoftc_t *isp, in_fcentry_t *inp)
notify.nt_ncode = NT_CLEAR_ACA;
} else {
isp_prt(isp, ISP_LOGWARN, f2, "task flag", inp->in_status, notify.nt_lun, loopid, inp->in_task_flags, inp->in_seqid);
- (void) isp_notify_ack(isp, inp);
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inp);
return;
}
isp_async(isp, ISPASYNC_TARGET_NOTIFY, &notify);
@@ -1054,10 +1071,12 @@ isp_notify_ack(ispsoftc_t *isp, void *arg)
if (IS_24XX(isp)) {
na_fcentry_24xx_t *na = (na_fcentry_24xx_t *) storage;
+ na->na_header.rqs_entry_type = RQSTYPE_NOTIFY_ACK;
+ na->na_header.rqs_entry_count = 1;
if (arg) {
in_fcentry_24xx_t *in = arg;
na->na_nphdl = in->in_nphdl;
- na->na_flags = in->in_flags & IN24XX_FLAG_PUREX_IOCB;
+ na->na_flags = in->in_flags;
na->na_status = in->in_status;
na->na_status_subcode = in->in_status_subcode;
na->na_rxid = in->in_rxid;
@@ -1068,14 +1087,19 @@ isp_notify_ack(ispsoftc_t *isp, void *arg)
na->na_srr_reloff_hi = in->in_srr_reloff_hi;
na->na_srr_reloff_lo = in->in_srr_reloff_lo;
na->na_srr_iu = in->in_srr_iu;
- na->na_srr_flags = 1;
- na->na_srr_reject_vunique = 0;
- na->na_srr_reject_explanation = 1;
- na->na_srr_reject_code = 1;
+ /*
+ * Whether we're accepting the SRR or rejecting
+ * it is determined by looking at the in_reserved
+ * field in the original notify structure.
+ */
+ if (in->in_reserved) {
+ na->na_srr_flags = 1;
+ na->na_srr_reject_vunique = 0;
+ na->na_srr_reject_code = 9; /* unable to perform this command at this time */
+ na->na_srr_reject_explanation = 0x2a; /* unable to supply the requested data */
+ }
}
}
- na->na_header.rqs_entry_type = RQSTYPE_NOTIFY_ACK;
- na->na_header.rqs_entry_count = 1;
isp_put_notify_24xx_ack(isp, na, (na_fcentry_24xx_t *)outp);
} else if (IS_FC(isp)) {
na_fcentry_t *na = (na_fcentry_t *) storage;
@@ -1093,10 +1117,10 @@ isp_notify_ack(ispsoftc_t *isp, void *arg)
}
na->na_task_flags = inp->in_task_flags & TASK_FLAGS_RESERVED_MASK;
na->na_seqid = inp->in_seqid;
- na->na_flags = NAFC_RCOUNT;
na->na_status = inp->in_status;
+ na->na_flags = NAFC_RCOUNT;
if (inp->in_status == IN_RESET) {
- na->na_flags |= NAFC_RST_CLRD;
+ na->na_flags = NAFC_RST_CLRD; /* We do not modify resource counts for LIP resets */
}
if (inp->in_status == IN_MSG_RECEIVED) {
na->na_flags |= NAFC_TVALID;
@@ -1200,7 +1224,7 @@ isp_acknak_abts(ispsoftc_t *isp, void *arg, int errno)
ISP_MEMZERO(&rsp->abts_rsp_payload.ba_rjt, sizeof (rsp->abts_rsp_payload.ba_acc));
switch (errno) {
case ENOMEM:
- rsp->abts_rsp_payload.ba_rjt.reason = 5; /* Logical Busy */
+ rsp->abts_rsp_payload.ba_rjt.reason = 5; /* Logical Unit Busy */
break;
default:
rsp->abts_rsp_payload.ba_rjt.reason = 9; /* Unable to perform command request */
@@ -1771,7 +1795,7 @@ isp_handle_ctio7(ispsoftc_t *isp, ct7_entry_t *ct)
break;
case CT7_SRR:
- isp_prt(isp, ISP_LOGWARN, "SRR received");
+ isp_prt(isp, ISP_LOGTDEBUG0, "SRR received");
break;
default:
@@ -1789,7 +1813,7 @@ isp_handle_ctio7(ispsoftc_t *isp, ct7_entry_t *ct)
*/
if (ct->ct_syshandle == 0) {
if (ct->ct_flags & CT7_TERMINATE) {
- isp_prt(isp, ISP_LOGINFO, "termination of 0x%x complete", ct->ct_rxid);
+ isp_prt(isp, ISP_LOGINFO, "termination of [RX_ID 0x%x] complete", ct->ct_rxid);
} else if ((ct->ct_flags & CT7_SENDSTATUS) == 0) {
isp_prt(isp, pl, "intermediate CTIO completed ok");
} else {
@@ -1844,7 +1868,7 @@ isp_handle_24xx_inotify(ispsoftc_t *isp, in_fcentry_24xx_t *inot_24xx)
char buf[64];
ISP_SNPRINTF(buf, sizeof buf, "%s: bad channel %d for status 0x%x", __func__, chan, inot_24xx->in_status);
isp_print_bytes(isp, buf, QENTRY_LEN, inot_24xx);
- (void) isp_notify_ack(isp, inot_24xx);
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot_24xx);
return;
}
lochan = chan;
@@ -1860,12 +1884,13 @@ isp_handle_24xx_inotify(ispsoftc_t *isp, in_fcentry_24xx_t *inot_24xx)
case IN24XX_LINK_FAILED:
case IN24XX_SRR_RCVD:
case IN24XX_ELS_RCVD:
+ inot_24xx->in_reserved = 0; /* clear this for later usage */
inot_24xx->in_vpidx = chan;
isp_async(isp, ISPASYNC_TARGET_ACTION, inot_24xx);
break;
default:
isp_prt(isp, ISP_LOGINFO, "%s: unhandled status (0x%x) for chan %d", __func__, inot_24xx->in_status, chan);
- (void) isp_notify_ack(isp, inot_24xx);
+ isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot_24xx);
break;
}
}
diff --git a/sys/dev/isp/isp_target.h b/sys/dev/isp/isp_target.h
index 9905c4f..40a1732 100644
--- a/sys/dev/isp/isp_target.h
+++ b/sys/dev/isp/isp_target.h
@@ -50,6 +50,7 @@ typedef enum {
NT_LINK_DOWN,
NT_LOGOUT,
NT_GLOBAL_LOGOUT,
+ NT_CHANGED,
NT_ARRIVED,
NT_DEPARTED,
NT_HBA_RESET
diff --git a/sys/dev/isp/ispmbox.h b/sys/dev/isp/ispmbox.h
index c86ce60..85b31e5 100644
--- a/sys/dev/isp/ispmbox.h
+++ b/sys/dev/isp/ispmbox.h
@@ -428,7 +428,8 @@ typedef struct {
uint8_t req_target;
uint16_t req_scclun;
uint16_t req_flags;
- uint16_t req_reserved;
+ uint8_t req_crn;
+ uint8_t req_reserved;
uint16_t req_time;
uint16_t req_seg_count;
uint8_t req_cdb[16];
@@ -458,7 +459,8 @@ typedef struct {
uint8_t req_target;
uint16_t req_scclun;
uint16_t req_flags;
- uint16_t req_reserved;
+ uint8_t req_crn;
+ uint8_t req_reserved;
uint16_t req_time;
uint16_t req_seg_count;
uint8_t req_cdb[16];
@@ -473,7 +475,8 @@ typedef struct {
uint16_t req_target;
uint16_t req_scclun;
uint16_t req_flags;
- uint16_t req_reserved;
+ uint8_t req_crn;
+ uint8_t req_reserved;
uint16_t req_time;
uint16_t req_seg_count;
uint8_t req_cdb[16];
@@ -515,40 +518,10 @@ typedef struct {
uint8_t req_cdb[44];
} ispextreq_t;
-/* 24XX only */
-typedef struct {
- uint16_t fcd_length;
- uint16_t fcd_a1500;
- uint16_t fcd_a3116;
- uint16_t fcd_a4732;
- uint16_t fcd_a6348;
-} fcp_cmnd_ds_t;
-
-typedef struct {
- isphdr_t req_header;
- uint32_t req_handle;
- uint16_t req_nphdl;
- uint16_t req_time;
- uint16_t req_seg_count;
- uint16_t req_fc_rsp_dsd_length;
- uint8_t req_lun[8];
- uint16_t req_flags;
- uint16_t req_fc_cmnd_dsd_length;
- uint16_t req_fc_cmnd_dsd_a1500;
- uint16_t req_fc_cmnd_dsd_a3116;
- uint16_t req_fc_cmnd_dsd_a4732;
- uint16_t req_fc_cmnd_dsd_a6348;
- uint16_t req_fc_rsp_dsd_a1500;
- uint16_t req_fc_rsp_dsd_a3116;
- uint16_t req_fc_rsp_dsd_a4732;
- uint16_t req_fc_rsp_dsd_a6348;
- uint32_t req_totalcnt;
- uint16_t req_tidlo;
- uint8_t req_tidhi;
- uint8_t req_vpidx;
- ispds64_t req_dataseg;
-} ispreqt6_t;
+/*
+ * ISP24XX structures
+ */
typedef struct {
isphdr_t req_header;
uint32_t req_handle;
@@ -945,7 +918,7 @@ typedef struct {
#define ICBOPT_SRCHDOWN 0x0400
#define ICBOPT_NOLIP 0x0200
#define ICBOPT_PDBCHANGE_AE 0x0100
-#define ICBOPT_INI_TGTTYPE 0x0080
+#define ICBOPT_TGT_TYPE 0x0080
#define ICBOPT_INI_ADISC 0x0040
#define ICBOPT_INI_DISABLE 0x0020
#define ICBOPT_TGT_ENABLE 0x0010
@@ -1044,7 +1017,7 @@ typedef struct {
#define ICB_DFLT_RCOUNT 3
#define ICB_LOGIN_TOV 30
-#define ICB_LUN_ENABLE_TOV 180
+#define ICB_LUN_ENABLE_TOV 15
/*
@@ -1272,10 +1245,8 @@ typedef struct {
#define PDB_STATE_PLOGO 10
#define PDB_STATE_PLOG_ACK 11
-#define SVC3_TGT_ROLE 0x10
-#define SVC3_INI_ROLE 0x20
-#define SVC3_ROLE_MASK 0x30
-#define SVC3_ROLE_SHIFT 4
+#define SVC3_ROLE_MASK 0x30
+#define SVC3_ROLE_SHIFT 4
#define BITS2WORD(x) ((x)[0] << 16 | (x)[3] << 8 | (x)[2])
#define BITS2WORD_24XX(x) ((x)[0] << 16 | (x)[1] << 8 | (x)[2])
@@ -1321,8 +1292,8 @@ typedef struct {
*/
typedef struct {
uint16_t handle;
- uint16_t reserved;
- uint32_t s3_role : 8,
+ uint16_t prli_word3;
+ uint32_t : 8,
portid : 24;
uint8_t portname[8];
uint8_t nodename[8];
@@ -1781,6 +1752,7 @@ typedef struct {
#define IN_PORT_CHANGED 0x2A /* port changed */
#define IN_GLOBAL_LOGO 0x2E /* all ports logged out */
#define IN_NO_NEXUS 0x3B /* Nexus not established */
+#define IN_SRR_RCVD 0x45 /* SRR received */
/*
* Values for the in_task_flags field- should only get one at a time!
@@ -1811,24 +1783,17 @@ typedef struct {
uint16_t in_srr_iu;
uint16_t in_srr_oxid;
/*
- * If bit 2 is set in in_flags, the following
- * two tags are valid. If the received ELS is
+ * If bit 2 is set in in_flags, the N-Port and
+ * handle tags are valid. If the received ELS is
* a LOGO, then these tags contain the N Port ID
* from the LOGO payload. If the received ELS
* request is TPRLO, these tags contain the
* Third Party Originator N Port ID.
*/
uint16_t in_nport_id_hi;
+#define in_prli_options in_nport_id_hi
uint8_t in_nport_id_lo;
uint8_t in_reserved3;
- /*
- * If bit 2 is set in in_flags, the following
- * tag is valid. If the received ELS is a LOGO,
- * then this tag contains the n-port handle
- * from the LOGO payload. If the received ELS
- * request is TPRLO, this tag contain the
- * n-port handle for the Third Party Originator.
- */
uint16_t in_np_handle;
uint8_t in_reserved4[12];
uint8_t in_reserved5;
@@ -2183,7 +2148,7 @@ typedef struct {
uint8_t ct_tag_val; /* tag value */
uint8_t ct_tag_type; /* tag type */
uint32_t ct_xfrlen; /* transfer length */
- int32_t ct_resid; /* residual length */
+ uint32_t ct_resid; /* residual length */
uint16_t ct_timeout;
uint16_t ct_seg_count;
ispds_t ct_dataseg[ISP_RQDSEG];
@@ -2206,8 +2171,8 @@ typedef struct {
* ct_flags values
*/
#define CT_TQAE 0x00000002 /* bit 1, Tagged Queue Action enable */
-#define CT_DATA_IN 0x00000040 /* bits 6&7, Data direction */
-#define CT_DATA_OUT 0x00000080 /* bits 6&7, Data direction */
+#define CT_DATA_IN 0x00000040 /* bits 6&7, Data direction - *to* initiator */
+#define CT_DATA_OUT 0x00000080 /* bits 6&7, Data direction - *from* initiator */
#define CT_NO_DATA 0x000000C0 /* bits 6&7, Data direction */
#define CT_CCINCR 0x00000100 /* bit 8, autoincrement atio count */
#define CT_DATAMASK 0x000000C0 /* bits 6&7, Data direction */
@@ -2278,7 +2243,7 @@ typedef struct {
uint16_t ct_timeout;
uint16_t ct_seg_count;
uint32_t ct_reloff; /* relative offset */
- int32_t ct_resid; /* residual length */
+ uint32_t ct_resid; /* residual length */
union {
/*
* The three different modes that the target driver
@@ -2317,7 +2282,10 @@ typedef struct {
uint16_t _reserved2;
uint16_t _reserved3;
uint32_t ct_datalen;
- ispds_t ct_fcp_rsp_iudata;
+ union {
+ ispds_t ct_fcp_rsp_iudata_32;
+ ispds64_t ct_fcp_rsp_iudata_64;
+ } u;
} m2;
} rsp;
} ct2_entry_t;
@@ -2332,7 +2300,7 @@ typedef struct {
uint16_t ct_timeout;
uint16_t ct_seg_count;
uint32_t ct_reloff; /* relative offset */
- int32_t ct_resid; /* residual length */
+ uint32_t ct_resid; /* residual length */
union {
struct {
uint32_t _reserved;
@@ -2358,7 +2326,10 @@ typedef struct {
uint16_t _reserved2;
uint16_t _reserved3;
uint32_t ct_datalen;
- ispds_t ct_fcp_rsp_iudata;
+ union {
+ ispds_t ct_fcp_rsp_iudata_32;
+ ispds64_t ct_fcp_rsp_iudata_64;
+ } u;
} m2;
} rsp;
} ct2e_entry_t;
@@ -2370,8 +2341,8 @@ typedef struct {
#define CT2_FLAG_MODE1 0x0001
#define CT2_FLAG_MODE2 0x0002
#define CT2_FLAG_MMASK 0x0003
-#define CT2_DATA_IN 0x0040
-#define CT2_DATA_OUT 0x0080
+#define CT2_DATA_IN 0x0040 /* *to* initiator */
+#define CT2_DATA_OUT 0x0080 /* *from* initiator */
#define CT2_NO_DATA 0x00C0
#define CT2_DATAMASK 0x00C0
#define CT2_CCINCR 0x0100
@@ -2412,7 +2383,7 @@ typedef struct {
uint32_t ct_rxid;
uint16_t ct_senselen; /* mode 1 only */
uint16_t ct_flags;
- int32_t ct_resid; /* residual length */
+ uint32_t ct_resid; /* residual length */
uint16_t ct_oxid;
uint16_t ct_scsi_status; /* modes 0 && 1 only */
union {
@@ -2430,8 +2401,9 @@ typedef struct {
} m1;
struct {
uint32_t reserved0;
- uint32_t ct_datalen;
uint32_t reserved1;
+ uint32_t ct_datalen;
+ uint32_t reserved2;
ispds64_t ct_fcp_rsp_iudata;
} m2;
} rsp;
@@ -2440,10 +2412,10 @@ typedef struct {
/*
* ct_flags values for CTIO7
*/
-#define CT7_DATA_IN 0x0002
-#define CT7_DATA_OUT 0x0001
#define CT7_NO_DATA 0x0000
-#define CT7_DATAMASK 0x003
+#define CT7_DATA_OUT 0x0001 /* *from* initiator */
+#define CT7_DATA_IN 0x0002 /* *to* initiator */
+#define CT7_DATAMASK 0x3
#define CT7_DSD_ENABLE 0x0004
#define CT7_CONF_STSFD 0x0010
#define CT7_EXPLCT_CONF 0x0020
@@ -2451,9 +2423,9 @@ typedef struct {
#define CT7_FLAG_MODE1 0x0040
#define CT7_FLAG_MODE2 0x0080
#define CT7_FLAG_MMASK 0x00C0
-#define CT7_NOACK 0x0100
+#define CT7_NOACK 0x0100
#define CT7_TASK_ATTR_SHIFT 9
-#define CT7_CONFIRM 0x2000
+#define CT7_CONFIRM 0x2000
#define CT7_TERMINATE 0x4000
#define CT7_SENDSTATUS 0x8000
diff --git a/sys/dev/isp/ispvar.h b/sys/dev/isp/ispvar.h
index 253cdd3..2023f61 100644
--- a/sys/dev/isp/ispvar.h
+++ b/sys/dev/isp/ispvar.h
@@ -77,7 +77,7 @@ struct ispmdvec {
*/
#define MAX_TARGETS 16
#ifndef MAX_FC_TARG
-#define MAX_FC_TARG 512
+#define MAX_FC_TARG 256
#endif
#define ISP_MAX_TARGETS(isp) (IS_FC(isp)? MAX_FC_TARG : MAX_TARGETS)
#define ISP_MAX_LUNS(isp) (isp)->isp_maxluns
@@ -400,9 +400,9 @@ typedef struct {
* A device is 'autologin' if the firmware automatically logs into
* it (re-logins as needed). Basically, local private loop devices.
*
- * The state is the current state of this entry.
+ * PRLI word 3 parameters contains role as well as other things.
*
- * Role is Initiator, Target, Both
+ * The state is the current state of this entry.
*
* Portid is obvious, as are node && port WWNs. The new_role and
* new_portid is for when we are pending a change.
@@ -412,17 +412,18 @@ typedef struct {
* You should also never see anything with an initiator role
* with this set.
*/
+ uint16_t prli_word3; /* PRLI parameters */
+ uint16_t new_prli_word3; /* Incoming new PRLI parameters */
uint16_t dev_map_idx : 12,
autologin : 1, /* F/W does PLOGI/PLOGO */
state : 3;
- uint32_t reserved : 5,
+ uint32_t : 7,
target_mode : 1,
- roles : 2,
portid : 24;
uint32_t
+ : 6,
+ announced : 1,
dirty : 1, /* commands have been run */
- new_reserved : 5,
- new_roles : 2,
new_portid : 24;
uint64_t node_wwn;
uint64_t port_wwn;
@@ -447,6 +448,7 @@ typedef struct {
typedef struct {
uint32_t
+ fctape_enabled : 1,
link_active : 1,
sendmarker : 1,
role : 2,
@@ -680,21 +682,24 @@ struct ispsoftc {
/*
* ISP Runtime Configuration Options
*/
-#define ISP_CFG_NORELOAD 0x80 /* don't download f/w */
-#define ISP_CFG_NONVRAM 0x40 /* ignore NVRAM */
-#define ISP_CFG_TWOGB 0x20 /* force 2GB connection (23XX only) */
-#define ISP_CFG_ONEGB 0x10 /* force 1GB connection (23XX only) */
#define ISP_CFG_FULL_DUPLEX 0x01 /* Full Duplex (Fibre Channel only) */
-#define ISP_CFG_PORT_PREF 0x0C /* Mask for Port Prefs (2200 only) */
+#define ISP_CFG_PORT_PREF 0x0c /* Mask for Port Prefs (all FC except 2100) */
#define ISP_CFG_LPORT 0x00 /* prefer {N/F}L-Port connection */
#define ISP_CFG_NPORT 0x04 /* prefer {N/F}-Port connection */
#define ISP_CFG_NPORT_ONLY 0x08 /* insist on {N/F}-Port connection */
-#define ISP_CFG_LPORT_ONLY 0x0C /* insist on {N/F}L-Port connection */
+#define ISP_CFG_LPORT_ONLY 0x0c /* insist on {N/F}L-Port connection */
+#define ISP_CFG_ONEGB 0x10 /* force 1GB connection (23XX only) */
+#define ISP_CFG_TWOGB 0x20 /* force 2GB connection (23XX only) */
+#define ISP_CFG_NORELOAD 0x80 /* don't download f/w */
+#define ISP_CFG_NONVRAM 0x40 /* ignore NVRAM */
+#define ISP_CFG_NOFCTAPE 0x100 /* disable FC-Tape */
+#define ISP_CFG_FCTAPE 0x200 /* enable FC-Tape */
#define ISP_CFG_OWNFSZ 0x400 /* override NVRAM frame size */
#define ISP_CFG_OWNLOOPID 0x800 /* override NVRAM loopid */
#define ISP_CFG_OWNEXCTHROTTLE 0x1000 /* override NVRAM execution throttle */
#define ISP_CFG_FOURGB 0x2000 /* force 4GB connection (24XX only) */
#define ISP_CFG_EIGHTGB 0x4000 /* force 8GB connection (25XX only) */
+#define ISP_CFG_SIXTEENGB 0x8000 /* force 16GB connection (82XX only) */
/*
* For each channel, the outer layers should know what role that channel
@@ -951,6 +956,7 @@ typedef enum {
ISPASYNC_DEV_STAYED, /* FC Device Stayed */
ISPASYNC_DEV_GONE, /* FC Device Departure */
ISPASYNC_TARGET_NOTIFY, /* All target async notification */
+ ISPASYNC_TARGET_NOTIFY_ACK, /* All target notify ack required */
ISPASYNC_TARGET_ACTION, /* All target action requested */
ISPASYNC_FW_CRASH, /* All Firmware has crashed */
ISPASYNC_FW_RESTARTED /* All Firmware has been restarted */
@@ -987,8 +993,9 @@ void isp_prt_endcmd(ispsoftc_t *, XS_T *);
#define ISP_LOGDEBUG1 0x20 /* log intermediate debug messages */
#define ISP_LOGDEBUG2 0x40 /* log most debug messages */
#define ISP_LOGDEBUG3 0x80 /* log high frequency debug messages */
-#define ISP_LOGSANCFG 0x100 /* log SAN configuration */
+#define ISP_LOG_SANCFG 0x100 /* log SAN configuration */
#define ISP_LOG_CWARN 0x200 /* log SCSI command "warnings" (e.g., check conditions) */
+#define ISP_LOG_WARN1 0x400 /* log WARNS we might be interested at some time */
#define ISP_LOGTINFO 0x1000 /* log informational messages (target mode) */
#define ISP_LOGTDEBUG0 0x2000 /* log simple debug messages (target mode) */
#define ISP_LOGTDEBUG1 0x4000 /* log intermediate debug messages (target) */
@@ -1063,7 +1070,8 @@ void isp_prt_endcmd(ispsoftc_t *, XS_T *);
* XS_GET_RESID(xs, resid) sets the current residual count
* XS_STSP(xs) gets a pointer to the SCSI status byte ""
* XS_SNSP(xs) gets a pointer to the associate sense data
- * XS_SNSLEN(xs) gets the length of sense data storage
+ * XS_TOT_SNSLEN(xs) gets the total length of sense data storage
+ * XS_CUR_SNSLEN(xs) gets the currently used lenght of sense data storage
* XS_SNSKEY(xs) dereferences XS_SNSP to get the current stored Sense Key
* XS_SNSASC(xs) dereferences XS_SNSP to get the current stored Additional Sense Code
* XS_SNSASCQ(xs) dereferences XS_SNSP to get the current stored Additional Sense Code Qualifier
@@ -1085,7 +1093,9 @@ void isp_prt_endcmd(ispsoftc_t *, XS_T *);
* XS_NOERR(xs) there is no error currently set
* XS_INITERR(xs) initialize error state
*
- * XS_SAVE_SENSE(xs, sp, len) save sense data
+ * XS_SAVE_SENSE(xs, sp, total_len, this_len) save sense data (total and current amount)
+ *
+ * XS_APPEND_SENSE(xs, sp, len) append more sense data
*
* XS_SENSE_VALID(xs) indicates whether sense is valid
*
@@ -1154,8 +1164,8 @@ int isp_acknak_abts(ispsoftc_t *, void *, int);
* Enable/Disable/Modify a logical unit.
* (softc, cmd, bus, tgt, lun, cmd_cnt, inotify_cnt)
*/
-#define DFLT_CMND_CNT 0xfe /* unmonitored */
-#define DFLT_INOT_CNT 0xfe /* unmonitored */
+#define DFLT_CMND_CNT 0xff /* unmonitored */
+#define DFLT_INOT_CNT 0xff /* unmonitored */
int isp_lun_cmd(ispsoftc_t *, int, int, int, int, int);
/*
diff --git a/sys/dev/ispfw/asm_2300.h b/sys/dev/ispfw/asm_2300.h
index c108cb4..5903ba3 100644
--- a/sys/dev/ispfw/asm_2300.h
+++ b/sys/dev/ispfw/asm_2300.h
@@ -27,17 +27,17 @@
/************************************************************************
* *
- * --- ISP2300 Initiator/Target Firmware --- *
- * with Fabric support (Public Loop), with expanded LUN *
- * addressing and 2K port logins. *
+ * --- ISP2300 Initiator/Target Firmware --- *
+ * with Fabric (Public Loop), Point-point, *
+ * expanded LUN addressing for FCTAPE, and 2K port logins *
* *
************************************************************************/
/*
- * Firmware Version 3.03.26 (16:54 Aug 14, 2007)
+ * Firmware Version 3.03.26 (16:58 Aug 14, 2007)
*/
static const uint16_t isp_2300_risc_code[] = {
- 0x0470, 0x0000, 0x0000, 0xd048, 0x0000, 0x0003, 0x0003, 0x001a,
- 0x0107, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2032, 0x3030,
+ 0x0470, 0x0000, 0x0000, 0xddef, 0x0000, 0x0003, 0x0003, 0x001a,
+ 0x0117, 0x2043, 0x4f50, 0x5952, 0x4947, 0x4854, 0x2032, 0x3030,
0x3120, 0x514c, 0x4f47, 0x4943, 0x2043, 0x4f52, 0x504f, 0x5241,
0x5449, 0x4f4e, 0x2049, 0x5350, 0x3233, 0x3030, 0x2046, 0x6972,
0x6d77, 0x6172, 0x6520, 0x2056, 0x6572, 0x7369, 0x6f6e, 0x2030,
@@ -50,487 +50,496 @@ static const uint16_t isp_2300_risc_code[] = {
0x2c00, 0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2e00,
0x20a9, 0x000f, 0x2001, 0x0000, 0x400f, 0x2091, 0x2000, 0x2001,
0x0000, 0x20c1, 0x0004, 0x20c9, 0x1bff, 0x2059, 0x0000, 0x2b78,
- 0x7883, 0x0004, 0x2089, 0x2bf2, 0x2051, 0x1800, 0x2a70, 0x20e1,
- 0x0001, 0x20e9, 0x0001, 0x2009, 0x0000, 0x080c, 0x0e53, 0x2029,
- 0x3500, 0x2031, 0xffff, 0x2039, 0x34c8, 0x2021, 0x0200, 0x20e9,
+ 0x7883, 0x0004, 0x2089, 0x2c69, 0x2051, 0x1800, 0x2a70, 0x20e1,
+ 0x0001, 0x20e9, 0x0001, 0x2009, 0x0000, 0x080c, 0x0e51, 0x2029,
+ 0x4d00, 0x2031, 0xffff, 0x2039, 0x4cd0, 0x2021, 0x0200, 0x20e9,
0x0001, 0x20a1, 0x0000, 0x20a9, 0x0800, 0x900e, 0x4104, 0x20e9,
0x0001, 0x20a1, 0x1000, 0x900e, 0x2001, 0x0cc0, 0x9084, 0x0fff,
0x20a8, 0x4104, 0x2001, 0x0000, 0x9086, 0x0000, 0x0120, 0x21a8,
0x4104, 0x8001, 0x1de0, 0x756a, 0x766e, 0x7766, 0x7472, 0x7476,
- 0x00e6, 0x2071, 0x1aa0, 0x2472, 0x00ee, 0x20a1, 0x1cc8, 0x716c,
+ 0x00e6, 0x2071, 0x1aac, 0x2472, 0x00ee, 0x20a1, 0x1cd0, 0x716c,
0x810d, 0x810d, 0x810d, 0x810d, 0x918c, 0x000f, 0x2001, 0x0001,
0x9112, 0x900e, 0x21a8, 0x4104, 0x8211, 0x1de0, 0x716c, 0x3400,
0x8001, 0x9102, 0x0120, 0x0218, 0x20a8, 0x900e, 0x4104, 0x2009,
0x1800, 0x810d, 0x810d, 0x810d, 0x810d, 0x810d, 0x918c, 0x001f,
0x2001, 0x0001, 0x9112, 0x20e9, 0x0001, 0x20a1, 0x0800, 0x900e,
- 0x20a9, 0x0800, 0x4104, 0x8211, 0x1dd8, 0x080c, 0x0f19, 0x080c,
- 0x5f04, 0x080c, 0x9eae, 0x080c, 0x10d0, 0x080c, 0x12b8, 0x080c,
- 0x1a99, 0x080c, 0x0d58, 0x080c, 0x1055, 0x080c, 0x32cc, 0x080c,
- 0x75f0, 0x080c, 0x6836, 0x080c, 0x8273, 0x080c, 0x235c, 0x080c,
- 0x857b, 0x080c, 0x7c59, 0x080c, 0x2191, 0x080c, 0x22c5, 0x080c,
- 0x2351, 0x2091, 0x3009, 0x7883, 0x0000, 0x1004, 0x091d, 0x7880,
+ 0x20a9, 0x0800, 0x4104, 0x8211, 0x1dd8, 0x080c, 0x0f25, 0x080c,
+ 0x5fc1, 0x080c, 0xa333, 0x080c, 0x10dc, 0x080c, 0x12c4, 0x080c,
+ 0x1ae1, 0x080c, 0x0d55, 0x080c, 0x1061, 0x080c, 0x3368, 0x080c,
+ 0x7660, 0x080c, 0x695d, 0x080c, 0x83d5, 0x080c, 0x23a4, 0x080c,
+ 0x874c, 0x080c, 0x7cf9, 0x080c, 0x21d9, 0x080c, 0x230d, 0x080c,
+ 0x2399, 0x2091, 0x3009, 0x7883, 0x0000, 0x1004, 0x091d, 0x7880,
0x9086, 0x0002, 0x1190, 0x7883, 0x4000, 0x7837, 0x4000, 0x7833,
0x0010, 0x0e04, 0x0911, 0x2091, 0x5000, 0x2091, 0x4080, 0x2001,
- 0x0089, 0x2004, 0xd084, 0x190c, 0x119d, 0x2071, 0x1800, 0x7003,
+ 0x0089, 0x2004, 0xd084, 0x190c, 0x11a9, 0x2071, 0x1800, 0x7003,
0x0000, 0x2071, 0x1800, 0x7000, 0x908e, 0x0003, 0x1168, 0x080c,
- 0x4b82, 0x080c, 0x32f3, 0x080c, 0x7661, 0x080c, 0x6d5c, 0x080c,
- 0x829f, 0x080c, 0x2b09, 0x0c68, 0x000b, 0x0c88, 0x0940, 0x0941,
- 0x0ade, 0x093e, 0x0b9e, 0x0d57, 0x0d57, 0x0d57, 0x080c, 0x0dc4,
+ 0x4c32, 0x080c, 0x338f, 0x080c, 0x76d1, 0x080c, 0x6e62, 0x080c,
+ 0x8401, 0x080c, 0x2b72, 0x0c68, 0x000b, 0x0c88, 0x0940, 0x0941,
+ 0x0ade, 0x093e, 0x0b9e, 0x0d54, 0x0d54, 0x0d54, 0x080c, 0x0dc3,
0x0005, 0x0126, 0x00f6, 0x2091, 0x8000, 0x7000, 0x9086, 0x0001,
- 0x1904, 0x0ab1, 0x080c, 0x0ecd, 0x080c, 0x72e5, 0x0150, 0x080c,
- 0x7308, 0x15b0, 0x2079, 0x0100, 0x7828, 0x9085, 0x1800, 0x782a,
- 0x0478, 0x080c, 0x7212, 0x7000, 0x9086, 0x0001, 0x1904, 0x0ab1,
- 0x7094, 0x9086, 0x0029, 0x1904, 0x0ab1, 0x080c, 0x8253, 0x080c,
- 0x8245, 0x2079, 0x0100, 0x782f, 0x0008, 0x2001, 0x0161, 0x2003,
+ 0x1904, 0x0ab1, 0x080c, 0x0e93, 0x080c, 0x7351, 0x0150, 0x080c,
+ 0x7374, 0x15b0, 0x2079, 0x0100, 0x7828, 0x9085, 0x1800, 0x782a,
+ 0x0478, 0x080c, 0x727e, 0x7000, 0x9086, 0x0001, 0x1904, 0x0ab1,
+ 0x7094, 0x9086, 0x0029, 0x1904, 0x0ab1, 0x080c, 0x83b5, 0x080c,
+ 0x83a7, 0x2079, 0x0100, 0x782f, 0x0008, 0x2001, 0x0161, 0x2003,
0x0001, 0x7827, 0xffff, 0x7a28, 0x9295, 0x5e2f, 0x7a2a, 0x2011,
- 0x7176, 0x080c, 0x835e, 0x2011, 0x7169, 0x080c, 0x8474, 0x2011,
- 0x5d5f, 0x080c, 0x835e, 0x2011, 0x8030, 0x901e, 0x7392, 0x04d0,
- 0x080c, 0x5607, 0x2079, 0x0100, 0x7844, 0x9005, 0x1904, 0x0ab1,
- 0x2011, 0x5d5f, 0x080c, 0x835e, 0x2011, 0x7176, 0x080c, 0x835e,
- 0x2011, 0x7169, 0x080c, 0x8474, 0x2001, 0x0265, 0x2001, 0x0205,
+ 0x71cd, 0x080c, 0x84c2, 0x2011, 0x71c0, 0x080c, 0x85e0, 0x2011,
+ 0x5e1c, 0x080c, 0x84c2, 0x2011, 0x8030, 0x901e, 0x7392, 0x04d0,
+ 0x080c, 0x56c4, 0x2079, 0x0100, 0x7844, 0x9005, 0x1904, 0x0ab1,
+ 0x2011, 0x5e1c, 0x080c, 0x84c2, 0x2011, 0x71cd, 0x080c, 0x84c2,
+ 0x2011, 0x71c0, 0x080c, 0x85e0, 0x2001, 0x0265, 0x2001, 0x0205,
0x2003, 0x0000, 0x7840, 0x9084, 0xfffb, 0x7842, 0x2001, 0x1983,
- 0x2004, 0x9005, 0x1140, 0x00c6, 0x2061, 0x0100, 0x080c, 0x5eac,
- 0x00ce, 0x0804, 0x0ab1, 0x780f, 0x006b, 0x7a28, 0x080c, 0x72ed,
+ 0x2004, 0x9005, 0x1140, 0x00c6, 0x2061, 0x0100, 0x080c, 0x5f69,
+ 0x00ce, 0x0804, 0x0ab1, 0x780f, 0x006b, 0x7a28, 0x080c, 0x7359,
0x0118, 0x9295, 0x5e2f, 0x0010, 0x9295, 0x402f, 0x7a2a, 0x2011,
- 0x8010, 0x73d4, 0x2001, 0x1984, 0x2003, 0x0001, 0x080c, 0x29ae,
- 0x080c, 0x4abd, 0x7244, 0xc284, 0x7246, 0x2001, 0x180c, 0x200c,
- 0xc1ac, 0xc1cc, 0x2102, 0x080c, 0x98cb, 0x2011, 0x0004, 0x080c,
- 0xb965, 0x080c, 0x664c, 0x080c, 0x72e5, 0x1120, 0x080c, 0x29f2,
- 0x02e0, 0x0400, 0x080c, 0x5eb3, 0x0140, 0x7093, 0x0001, 0x70cf,
- 0x0000, 0x080c, 0x57d9, 0x0804, 0x0ab1, 0x080c, 0x55a7, 0xd094,
- 0x0188, 0x2011, 0x180c, 0x2204, 0xc0cd, 0x2012, 0x080c, 0x55ab,
- 0xd0d4, 0x1118, 0x080c, 0x29f2, 0x1270, 0x2011, 0x180c, 0x2204,
- 0xc0bc, 0x00a8, 0x080c, 0x55ab, 0xd0d4, 0x1db8, 0x2011, 0x180c,
+ 0x8010, 0x73d4, 0x2001, 0x1984, 0x2003, 0x0001, 0x080c, 0x2a17,
+ 0x080c, 0x4b6d, 0x7244, 0xc284, 0x7246, 0x2001, 0x180c, 0x200c,
+ 0xc1ac, 0xc1cc, 0x2102, 0x080c, 0x9b9c, 0x2011, 0x0004, 0x080c,
+ 0xc1dd, 0x080c, 0x6758, 0x080c, 0x7351, 0x1120, 0x080c, 0x2a5b,
+ 0x02e0, 0x0400, 0x080c, 0x5f70, 0x0140, 0x7093, 0x0001, 0x70cf,
+ 0x0000, 0x080c, 0x5896, 0x0804, 0x0ab1, 0x080c, 0x5664, 0xd094,
+ 0x0188, 0x2011, 0x180c, 0x2204, 0xc0cd, 0x2012, 0x080c, 0x5668,
+ 0xd0d4, 0x1118, 0x080c, 0x2a5b, 0x1270, 0x2011, 0x180c, 0x2204,
+ 0xc0bc, 0x00a8, 0x080c, 0x5668, 0xd0d4, 0x1db8, 0x2011, 0x180c,
0x2204, 0xc0bd, 0x0060, 0x2011, 0x180c, 0x2204, 0xc0bd, 0x2012,
- 0x080c, 0x673e, 0x1128, 0xd0a4, 0x0118, 0x2204, 0xc0fd, 0x2012,
- 0x080c, 0x6704, 0x0120, 0x7a0c, 0xc2b4, 0x7a0e, 0x00a8, 0x707b,
- 0x0000, 0x080c, 0x72e5, 0x1130, 0x70ac, 0x9005, 0x1168, 0x080c,
- 0xbc7a, 0x0050, 0x080c, 0xbc7a, 0x70d8, 0xd09c, 0x1128, 0x70ac,
- 0x9005, 0x0110, 0x080c, 0x5e89, 0x70e3, 0x0000, 0x70df, 0x0000,
- 0x70a3, 0x0000, 0x080c, 0x29fa, 0x0228, 0x2011, 0x0101, 0x2204,
- 0xc0c4, 0x2012, 0x72d8, 0x080c, 0x72e5, 0x1178, 0x9016, 0x0016,
- 0x080c, 0x27b7, 0x2019, 0x194a, 0x211a, 0x001e, 0x705b, 0xffff,
- 0x705f, 0x00ef, 0x707f, 0x0000, 0x0020, 0x2019, 0x194a, 0x201b,
+ 0x080c, 0x6865, 0x1128, 0xd0a4, 0x0118, 0x2204, 0xc0fd, 0x2012,
+ 0x080c, 0x682b, 0x0120, 0x7a0c, 0xc2b4, 0x7a0e, 0x00a8, 0x707b,
+ 0x0000, 0x080c, 0x7351, 0x1130, 0x70ac, 0x9005, 0x1168, 0x080c,
+ 0xc617, 0x0050, 0x080c, 0xc617, 0x70d8, 0xd09c, 0x1128, 0x70ac,
+ 0x9005, 0x0110, 0x080c, 0x5f46, 0x70e3, 0x0000, 0x70df, 0x0000,
+ 0x70a3, 0x0000, 0x080c, 0x2a63, 0x0228, 0x2011, 0x0101, 0x2204,
+ 0xc0c4, 0x2012, 0x72d8, 0x080c, 0x7351, 0x1178, 0x9016, 0x0016,
+ 0x080c, 0x2820, 0x2019, 0x1949, 0x211a, 0x001e, 0x705b, 0xffff,
+ 0x705f, 0x00ef, 0x707f, 0x0000, 0x0020, 0x2019, 0x1949, 0x201b,
0x0000, 0x2079, 0x185e, 0x7804, 0xd0ac, 0x0108, 0xc295, 0x72da,
- 0x080c, 0x72e5, 0x0118, 0x9296, 0x0004, 0x0548, 0x2011, 0x0001,
- 0x080c, 0xb965, 0x70a7, 0x0000, 0x70ab, 0xffff, 0x7003, 0x0002,
+ 0x080c, 0x7351, 0x0118, 0x9296, 0x0004, 0x0548, 0x2011, 0x0001,
+ 0x080c, 0xc1dd, 0x70a7, 0x0000, 0x70ab, 0xffff, 0x7003, 0x0002,
0x2079, 0x0100, 0x7827, 0x0003, 0x7828, 0x9085, 0x0003, 0x782a,
- 0x00fe, 0x080c, 0x2e5f, 0x2011, 0x0005, 0x080c, 0x99d6, 0x080c,
- 0x8c37, 0x080c, 0x72e5, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016,
- 0x080c, 0x27b7, 0x61e2, 0x001e, 0x00ce, 0x012e, 0x0420, 0x70a7,
+ 0x00fe, 0x080c, 0x2ed6, 0x2011, 0x0005, 0x080c, 0x9ca7, 0x080c,
+ 0x8e38, 0x080c, 0x7351, 0x0148, 0x00c6, 0x2061, 0x0100, 0x0016,
+ 0x080c, 0x2820, 0x61e2, 0x001e, 0x00ce, 0x012e, 0x0420, 0x70a7,
0x0000, 0x70ab, 0xffff, 0x7003, 0x0002, 0x00f6, 0x2079, 0x0100,
0x7827, 0x0003, 0x7828, 0x9085, 0x0003, 0x782a, 0x00fe, 0x2011,
- 0x0005, 0x080c, 0x99d6, 0x080c, 0x8c37, 0x080c, 0x72e5, 0x0148,
- 0x00c6, 0x2061, 0x0100, 0x0016, 0x080c, 0x27b7, 0x61e2, 0x001e,
- 0x00ce, 0x00fe, 0x012e, 0x0005, 0x00c6, 0x00b6, 0x080c, 0x72e5,
- 0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9, 0x0782, 0x080c, 0x72e5,
+ 0x0005, 0x080c, 0x9ca7, 0x080c, 0x8e38, 0x080c, 0x7351, 0x0148,
+ 0x00c6, 0x2061, 0x0100, 0x0016, 0x080c, 0x2820, 0x61e2, 0x001e,
+ 0x00ce, 0x00fe, 0x012e, 0x0005, 0x00c6, 0x00b6, 0x080c, 0x7351,
+ 0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9, 0x0782, 0x080c, 0x7351,
0x1110, 0x900e, 0x0010, 0x2009, 0x007e, 0x86ff, 0x0138, 0x9180,
- 0x1000, 0x2004, 0x905d, 0x0110, 0xb800, 0xd0bc, 0x090c, 0x3162,
+ 0x1000, 0x2004, 0x905d, 0x0110, 0xb800, 0xd0bc, 0x090c, 0x31fe,
0x8108, 0x1f04, 0x0ac5, 0x707b, 0x0000, 0x707c, 0x9084, 0x00ff,
0x707e, 0x70af, 0x0000, 0x00be, 0x00ce, 0x0005, 0x00b6, 0x0126,
0x2091, 0x8000, 0x7000, 0x9086, 0x0002, 0x1904, 0x0b9b, 0x70a8,
- 0x9086, 0xffff, 0x0130, 0x080c, 0x2e5f, 0x080c, 0x8c37, 0x0804,
+ 0x9086, 0xffff, 0x0130, 0x080c, 0x2ed6, 0x080c, 0x8e38, 0x0804,
0x0b9b, 0x70d8, 0xd0ac, 0x1110, 0xd09c, 0x0558, 0xd084, 0x0548,
0x0006, 0x2001, 0x0103, 0x2003, 0x002b, 0x000e, 0xd08c, 0x0508,
- 0x080c, 0x31c5, 0x11d0, 0x70dc, 0x9086, 0xffff, 0x01b0, 0x080c,
- 0x2fd8, 0x080c, 0x8c37, 0x70d8, 0xd094, 0x1904, 0x0b9b, 0x2011,
- 0x0001, 0x080c, 0xbef8, 0x0110, 0x2011, 0x0003, 0x901e, 0x080c,
- 0x3012, 0x080c, 0x8c37, 0x0804, 0x0b9b, 0x70e0, 0x9005, 0x1904,
+ 0x080c, 0x3261, 0x11d0, 0x70dc, 0x9086, 0xffff, 0x01b0, 0x080c,
+ 0x306e, 0x080c, 0x8e38, 0x70d8, 0xd094, 0x1904, 0x0b9b, 0x2011,
+ 0x0001, 0x080c, 0xc8ce, 0x0110, 0x2011, 0x0003, 0x901e, 0x080c,
+ 0x30a8, 0x080c, 0x8e38, 0x0804, 0x0b9b, 0x70e0, 0x9005, 0x1904,
0x0b9b, 0x70a4, 0x9005, 0x1904, 0x0b9b, 0x70d8, 0xd0a4, 0x0118,
- 0xd0b4, 0x0904, 0x0b9b, 0x080c, 0x6704, 0x1904, 0x0b9b, 0x080c,
- 0x6757, 0x1904, 0x0b9b, 0x080c, 0x673e, 0x01c0, 0x0156, 0x00c6,
- 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x6411, 0x1118, 0xb800,
+ 0xd0b4, 0x0904, 0x0b9b, 0x080c, 0x682b, 0x1904, 0x0b9b, 0x080c,
+ 0x687e, 0x1904, 0x0b9b, 0x080c, 0x6865, 0x01c0, 0x0156, 0x00c6,
+ 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x64fc, 0x1118, 0xb800,
0xd0ec, 0x1138, 0x001e, 0x8108, 0x1f04, 0x0b3b, 0x00ce, 0x015e,
0x0028, 0x001e, 0x00ce, 0x015e, 0x0804, 0x0b9b, 0x0006, 0x2001,
- 0x0103, 0x2003, 0x006b, 0x000e, 0x2011, 0x1990, 0x080c, 0x0f89,
- 0x2011, 0x19aa, 0x080c, 0x0f89, 0x7030, 0xc08c, 0x7032, 0x7003,
- 0x0003, 0x70ab, 0xffff, 0x080c, 0x0ecd, 0x9006, 0x080c, 0x264c,
- 0x080c, 0x31c5, 0x0118, 0x080c, 0x4c5a, 0x0050, 0x0036, 0x0046,
- 0x2019, 0xffff, 0x2021, 0x0006, 0x080c, 0x4c74, 0x004e, 0x003e,
- 0x00f6, 0x2079, 0x0100, 0x080c, 0x7308, 0x0150, 0x080c, 0x72e5,
+ 0x0103, 0x2003, 0x006b, 0x000e, 0x2011, 0x1990, 0x080c, 0x0f95,
+ 0x2011, 0x19aa, 0x080c, 0x0f95, 0x7030, 0xc08c, 0x7032, 0x7003,
+ 0x0003, 0x70ab, 0xffff, 0x080c, 0x0e75, 0x9006, 0x080c, 0x26b1,
+ 0x080c, 0x3261, 0x0118, 0x080c, 0x4d0a, 0x0050, 0x0036, 0x0046,
+ 0x2019, 0xffff, 0x2021, 0x0006, 0x080c, 0x4d24, 0x004e, 0x003e,
+ 0x00f6, 0x2079, 0x0100, 0x080c, 0x7374, 0x0150, 0x080c, 0x7351,
0x7828, 0x0118, 0x9084, 0xe1ff, 0x0010, 0x9084, 0xffdf, 0x782a,
0x00fe, 0x2001, 0x19c5, 0x2004, 0x9086, 0x0005, 0x1120, 0x2011,
- 0x0000, 0x080c, 0x99d6, 0x2011, 0x0000, 0x080c, 0x99e0, 0x080c,
- 0x8c37, 0x080c, 0x8d06, 0x012e, 0x00be, 0x0005, 0x0016, 0x0046,
+ 0x0000, 0x080c, 0x9ca7, 0x2011, 0x0000, 0x080c, 0x9cb1, 0x080c,
+ 0x8e38, 0x080c, 0x8f0e, 0x012e, 0x00be, 0x0005, 0x0016, 0x0046,
0x00f6, 0x0126, 0x2091, 0x8000, 0x2079, 0x0100, 0x7904, 0x918c,
- 0xfffd, 0x7906, 0x2009, 0x00f7, 0x080c, 0x5e72, 0x7940, 0x918c,
+ 0xfffd, 0x7906, 0x2009, 0x00f7, 0x080c, 0x5f2f, 0x7940, 0x918c,
0x0010, 0x7942, 0x7924, 0xd1b4, 0x0110, 0x7827, 0x0040, 0xd19c,
0x0110, 0x7827, 0x0008, 0x0006, 0x0036, 0x0156, 0x7954, 0xd1ac,
0x1904, 0x0c2b, 0x2001, 0x1984, 0x2004, 0x9005, 0x1518, 0x080c,
- 0x2a75, 0x1148, 0x2001, 0x0001, 0x080c, 0x29dd, 0x2001, 0x0001,
- 0x080c, 0x29c0, 0x00b8, 0x080c, 0x2a7d, 0x1138, 0x9006, 0x080c,
- 0x29dd, 0x9006, 0x080c, 0x29c0, 0x0068, 0x080c, 0x2a85, 0x1d50,
- 0x2001, 0x1974, 0x2004, 0xd0fc, 0x0108, 0x0020, 0x080c, 0x27eb,
- 0x0804, 0x0d0a, 0x080c, 0x72f6, 0x0148, 0x080c, 0x7308, 0x1118,
- 0x080c, 0x75eb, 0x0050, 0x080c, 0x72ed, 0x0dd0, 0x080c, 0x75e6,
- 0x080c, 0x75dc, 0x080c, 0x7212, 0x0058, 0x080c, 0x72e5, 0x0140,
- 0x2009, 0x00f8, 0x080c, 0x5e72, 0x7843, 0x0090, 0x7843, 0x0010,
- 0x20a9, 0x09c4, 0x7820, 0xd09c, 0x1138, 0x080c, 0x72e5, 0x0138,
- 0x7824, 0xd0ac, 0x1904, 0x0d0f, 0x1f04, 0x0c0a, 0x0070, 0x7824,
- 0x080c, 0x72ff, 0x0118, 0xd0ac, 0x1904, 0x0d0f, 0x9084, 0x1800,
- 0x0d98, 0x7003, 0x0001, 0x0804, 0x0d0f, 0x2001, 0x0001, 0x080c,
- 0x264c, 0x0804, 0x0d22, 0x2001, 0x1984, 0x2004, 0x9005, 0x1518,
- 0x080c, 0x2a75, 0x1148, 0x2001, 0x0001, 0x080c, 0x29dd, 0x2001,
- 0x0001, 0x080c, 0x29c0, 0x00b8, 0x080c, 0x2a7d, 0x1138, 0x9006,
- 0x080c, 0x29dd, 0x9006, 0x080c, 0x29c0, 0x0068, 0x080c, 0x2a85,
+ 0x2ade, 0x1148, 0x2001, 0x0001, 0x080c, 0x2a46, 0x2001, 0x0001,
+ 0x080c, 0x2a29, 0x00b8, 0x080c, 0x2ae6, 0x1138, 0x9006, 0x080c,
+ 0x2a46, 0x9006, 0x080c, 0x2a29, 0x0068, 0x080c, 0x2aee, 0x1d50,
+ 0x2001, 0x1974, 0x2004, 0xd0fc, 0x0108, 0x0020, 0x080c, 0x2854,
+ 0x0804, 0x0d0b, 0x080c, 0x7362, 0x0148, 0x080c, 0x7374, 0x1118,
+ 0x080c, 0x765b, 0x0050, 0x080c, 0x7359, 0x0dd0, 0x080c, 0x7656,
+ 0x080c, 0x764c, 0x080c, 0x727e, 0x0058, 0x080c, 0x7351, 0x0140,
+ 0x2009, 0x00f8, 0x080c, 0x5f2f, 0x7843, 0x0090, 0x7843, 0x0010,
+ 0x20a9, 0x09c4, 0x7820, 0xd09c, 0x1138, 0x080c, 0x7351, 0x0138,
+ 0x7824, 0xd0ac, 0x1904, 0x0d10, 0x1f04, 0x0c0a, 0x0070, 0x7824,
+ 0x080c, 0x736b, 0x0118, 0xd0ac, 0x1904, 0x0d10, 0x9084, 0x1800,
+ 0x0d98, 0x7003, 0x0001, 0x0804, 0x0d10, 0x2001, 0x0001, 0x080c,
+ 0x26b1, 0x0804, 0x0d23, 0x2001, 0x1984, 0x2004, 0x9005, 0x1518,
+ 0x080c, 0x2ade, 0x1148, 0x2001, 0x0001, 0x080c, 0x2a46, 0x2001,
+ 0x0001, 0x080c, 0x2a29, 0x00b8, 0x080c, 0x2ae6, 0x1138, 0x9006,
+ 0x080c, 0x2a46, 0x9006, 0x080c, 0x2a29, 0x0068, 0x080c, 0x2aee,
0x1d50, 0x2001, 0x1974, 0x2004, 0xd0fc, 0x0108, 0x0020, 0x080c,
- 0x27eb, 0x0804, 0x0d0a, 0x7850, 0x9085, 0x0040, 0x7852, 0x7938,
- 0x7850, 0x9084, 0xfbcf, 0x7852, 0x080c, 0x2a8d, 0x9085, 0x2000,
- 0x7852, 0x793a, 0x20a9, 0x0046, 0x1d04, 0x0c64, 0x080c, 0x8454,
+ 0x2854, 0x0804, 0x0d0b, 0x7850, 0x9085, 0x0040, 0x7852, 0x7938,
+ 0x7850, 0x9084, 0xfbcf, 0x7852, 0x080c, 0x2af6, 0x9085, 0x2000,
+ 0x7852, 0x793a, 0x20a9, 0x0046, 0x1d04, 0x0c64, 0x080c, 0x85c0,
0x1f04, 0x0c64, 0x7850, 0x9085, 0x0400, 0x9084, 0xdfbf, 0x7852,
- 0x793a, 0x080c, 0x72f6, 0x0148, 0x080c, 0x7308, 0x1118, 0x080c,
- 0x75eb, 0x0050, 0x080c, 0x72ed, 0x0dd0, 0x080c, 0x75e6, 0x080c,
- 0x75dc, 0x080c, 0x7212, 0x0020, 0x2009, 0x00f8, 0x080c, 0x5e72,
+ 0x793a, 0x080c, 0x7362, 0x0148, 0x080c, 0x7374, 0x1118, 0x080c,
+ 0x765b, 0x0050, 0x080c, 0x7359, 0x0dd0, 0x080c, 0x7656, 0x080c,
+ 0x764c, 0x080c, 0x727e, 0x0020, 0x2009, 0x00f8, 0x080c, 0x5f2f,
0x20a9, 0x0028, 0xa001, 0x1f04, 0x0c8a, 0x7850, 0x9085, 0x1400,
- 0x7852, 0x080c, 0x72e5, 0x0120, 0x7843, 0x0090, 0x7843, 0x0010,
- 0x2021, 0xe678, 0x2019, 0xea60, 0x0d0c, 0x8454, 0x7820, 0xd09c,
- 0x1580, 0x080c, 0x72e5, 0x0904, 0x0cef, 0x7824, 0xd0ac, 0x1904,
- 0x0d0f, 0x080c, 0x7308, 0x1528, 0x0046, 0x2021, 0x0320, 0x8421,
- 0x1df0, 0x004e, 0x7827, 0x1800, 0x080c, 0x2a8d, 0x7824, 0x9084,
- 0x1800, 0x1160, 0x9484, 0x0fff, 0x1138, 0x2001, 0x1810, 0x2004,
- 0xd0fc, 0x0110, 0x080c, 0x0d34, 0x8421, 0x1158, 0x1d04, 0x0cca,
- 0x080c, 0x8454, 0x080c, 0x75e6, 0x080c, 0x75dc, 0x7003, 0x0001,
- 0x04f0, 0x8319, 0x1948, 0x1d04, 0x0cd7, 0x080c, 0x8454, 0x2009,
- 0x1977, 0x2104, 0x9005, 0x0118, 0x8001, 0x200a, 0x1178, 0x200b,
- 0x000a, 0x7827, 0x0048, 0x20a9, 0x0002, 0x080c, 0x2a6e, 0x7924,
- 0x080c, 0x2a8d, 0xd19c, 0x0110, 0x080c, 0x29ae, 0x00d8, 0x080c,
- 0x72f6, 0x1140, 0x94a2, 0x03e8, 0x1128, 0x080c, 0x72bd, 0x7003,
- 0x0001, 0x00a8, 0x7827, 0x1800, 0x080c, 0x2a8d, 0x7824, 0x080c,
- 0x72ff, 0x0110, 0xd0ac, 0x1158, 0x9084, 0x1800, 0x0950, 0x7003,
- 0x0001, 0x0028, 0x2001, 0x0001, 0x080c, 0x264c, 0x0078, 0x2009,
- 0x180c, 0x210c, 0xd19c, 0x1120, 0x7904, 0x918d, 0x0002, 0x7906,
- 0x7827, 0x0048, 0x7828, 0x9085, 0x0028, 0x782a, 0x7850, 0x9085,
- 0x0400, 0x7852, 0x2001, 0x1984, 0x2003, 0x0000, 0x9006, 0x78f2,
- 0x015e, 0x003e, 0x000e, 0x080c, 0x55b6, 0x090c, 0x0e64, 0x012e,
- 0x00fe, 0x004e, 0x001e, 0x0005, 0x0006, 0x0016, 0x0036, 0x0046,
- 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x0069, 0x0d0c,
- 0x8454, 0x015e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x004e,
- 0x003e, 0x001e, 0x000e, 0x0005, 0x00e6, 0x2071, 0x189f, 0x7004,
- 0x9086, 0x0001, 0x1110, 0x080c, 0x32f3, 0x00ee, 0x0005, 0x0005,
- 0x2a70, 0x2061, 0x1988, 0x2063, 0x0003, 0x6007, 0x0003, 0x600b,
- 0x001a, 0x600f, 0x0107, 0x2001, 0x1959, 0x900e, 0x2102, 0x7192,
- 0x2001, 0x0100, 0x2004, 0x9082, 0x0002, 0x0218, 0x705b, 0xffff,
- 0x0008, 0x715a, 0x7063, 0xffff, 0x717a, 0x717e, 0x080c, 0xbc7a,
- 0x2061, 0x1949, 0x6003, 0x0909, 0x6106, 0x600b, 0x8800, 0x600f,
- 0x0200, 0x6013, 0x00ff, 0x6017, 0x000f, 0x611a, 0x601f, 0x07d0,
- 0x2061, 0x1951, 0x6003, 0x8000, 0x6106, 0x610a, 0x600f, 0x0200,
- 0x6013, 0x00ff, 0x6116, 0x601b, 0x0001, 0x611e, 0x2061, 0x1965,
- 0x6003, 0x514c, 0x6007, 0x4f47, 0x600b, 0x4943, 0x600f, 0x2020,
- 0x2001, 0x182b, 0x2102, 0x0005, 0x9016, 0x080c, 0x6411, 0x1178,
- 0xb804, 0x90c4, 0x00ff, 0x98c6, 0x0006, 0x0128, 0x90c4, 0xff00,
- 0x98c6, 0x0600, 0x1120, 0x9186, 0x0080, 0x0108, 0x8210, 0x8108,
- 0x9186, 0x0800, 0x1d50, 0x2208, 0x0005, 0x2091, 0x8000, 0x2079,
- 0x0000, 0x000e, 0x00f6, 0x0010, 0x2091, 0x8000, 0x0e04, 0x0dc6,
- 0x0006, 0x0016, 0x2001, 0x8002, 0x0006, 0x2079, 0x0000, 0x000e,
- 0x7882, 0x7836, 0x001e, 0x798e, 0x000e, 0x788a, 0x000e, 0x7886,
- 0x3900, 0x789a, 0x00d6, 0x2069, 0x0300, 0x6818, 0x78ae, 0x681c,
- 0x78b2, 0x2001, 0x19e5, 0x2004, 0x78b6, 0x2001, 0x1a61, 0x2004,
- 0x78ba, 0x6808, 0x78be, 0x00de, 0x7833, 0x0012, 0x2091, 0x5000,
- 0x0156, 0x00d6, 0x0036, 0x0026, 0x2079, 0x0300, 0x2069, 0x1a84,
- 0x7a08, 0x226a, 0x2069, 0x1a85, 0x7a18, 0x226a, 0x8d68, 0x7a1c,
- 0x226a, 0x782c, 0x2019, 0x1a92, 0x201a, 0x2019, 0x1a95, 0x9016,
- 0x7808, 0xd09c, 0x0168, 0x7820, 0x201a, 0x8210, 0x8318, 0x9386,
- 0x1a9e, 0x0108, 0x0ca8, 0x7808, 0xd09c, 0x0110, 0x2011, 0xdead,
- 0x2019, 0x1a93, 0x782c, 0x201a, 0x8318, 0x221a, 0x7803, 0x0000,
- 0x2069, 0x1a64, 0x901e, 0x20a9, 0x0020, 0x7b26, 0x7a28, 0x226a,
- 0x8d68, 0x8318, 0x1f04, 0x0e25, 0x002e, 0x003e, 0x00de, 0x015e,
- 0x2079, 0x1800, 0x7803, 0x0005, 0x2091, 0x4080, 0x2001, 0x0089,
- 0x2004, 0xd084, 0x0188, 0x2001, 0x19f8, 0x2004, 0x9005, 0x0130,
- 0x2001, 0x008b, 0x2004, 0x9084, 0x8004, 0x0dd0, 0x2001, 0x008a,
- 0x2003, 0x0002, 0x2003, 0x1001, 0x080c, 0x55b6, 0x1110, 0x080c,
- 0x0e9b, 0x0cd0, 0x0005, 0x918c, 0x03ff, 0x2001, 0x0003, 0x2004,
- 0x9084, 0x0600, 0x1118, 0x918d, 0x2800, 0x0010, 0x918d, 0x2000,
- 0x2001, 0x017f, 0x2102, 0x0005, 0x00f6, 0x0006, 0x2079, 0x1826,
- 0x2f04, 0x8000, 0x207a, 0x080c, 0x2a85, 0x1150, 0x0006, 0x2001,
- 0x1974, 0x2004, 0xd0fc, 0x000e, 0x1118, 0x9082, 0x7530, 0x0010,
- 0x9082, 0x000f, 0x0258, 0x9006, 0x207a, 0x2079, 0x1829, 0x2f04,
- 0x9084, 0x0001, 0x9086, 0x0001, 0x207a, 0x0090, 0x2079, 0x1829,
- 0x2f7c, 0x8fff, 0x1138, 0x0026, 0x2011, 0x0080, 0x080c, 0x0ee1,
- 0x002e, 0x0030, 0x0026, 0x2011, 0x0000, 0x080c, 0x0ee1, 0x002e,
- 0x000e, 0x00fe, 0x0005, 0x0026, 0x0126, 0x2011, 0x0080, 0x080c,
- 0x0ee1, 0x20a9, 0x0fff, 0x080c, 0x0f02, 0x2011, 0x0040, 0x04c9,
- 0x20a9, 0x0fff, 0x080c, 0x0f02, 0x0c80, 0x2011, 0x0040, 0x0488,
- 0x2011, 0x0080, 0x0470, 0x0005, 0x0026, 0x70eb, 0x0000, 0x04b1,
- 0x1148, 0x080c, 0x2a85, 0x1118, 0x2011, 0x8484, 0x0058, 0x2011,
- 0x8282, 0x0040, 0x080c, 0x2a85, 0x1118, 0x2011, 0xcdc5, 0x0010,
- 0x2011, 0xcac2, 0x0441, 0x002e, 0x0005, 0x080c, 0x55b6, 0x1140,
- 0x0026, 0x2001, 0x1800, 0x2004, 0x9084, 0x0007, 0x0013, 0x002e,
- 0x0005, 0x0ecc, 0x0eb0, 0x0eb0, 0x0ead, 0x0e64, 0x0eb0, 0x0eb0,
- 0x0e64, 0x0016, 0x3b08, 0x3a00, 0x9104, 0x918d, 0x00c0, 0x21d8,
- 0x9084, 0xff3f, 0x9205, 0x20d0, 0x001e, 0x0005, 0x2001, 0x1839,
- 0x2004, 0xd0dc, 0x0005, 0x9e86, 0x1800, 0x190c, 0x0dc4, 0x70e4,
- 0xd0e4, 0x0108, 0xc2e5, 0x72e6, 0xd0e4, 0x1118, 0x9294, 0x00c0,
- 0x0c01, 0x0005, 0x1d04, 0x0f02, 0x2091, 0x6000, 0x1f04, 0x0f02,
- 0x0005, 0x890e, 0x810e, 0x810f, 0x9194, 0x003f, 0x918c, 0xffc0,
- 0x0005, 0x0006, 0x2200, 0x914d, 0x894f, 0x894d, 0x894d, 0x000e,
- 0x0005, 0x01d6, 0x0146, 0x0036, 0x0096, 0x2061, 0x188e, 0x600b,
- 0x0000, 0x600f, 0x0000, 0x6003, 0x0000, 0x6007, 0x0000, 0x2009,
- 0xffc0, 0x2105, 0x0006, 0x2001, 0xaaaa, 0x200f, 0x2019, 0x5555,
- 0x9016, 0x2049, 0x0bff, 0xab02, 0xa001, 0xa001, 0xa800, 0x9306,
- 0x1138, 0x2105, 0x9306, 0x0120, 0x8210, 0x99c8, 0x0400, 0x0c98,
- 0x000e, 0x200f, 0x2001, 0x189e, 0x928a, 0x000e, 0x1638, 0x928a,
- 0x0006, 0x2011, 0x0006, 0x1210, 0x2011, 0x0000, 0x2202, 0x9006,
- 0x2008, 0x82ff, 0x01b0, 0x8200, 0x600a, 0x600f, 0xffff, 0x6003,
- 0x0002, 0x6007, 0x0000, 0x0026, 0x2019, 0x0010, 0x9280, 0x0001,
- 0x20e8, 0x21a0, 0x21a8, 0x4104, 0x8319, 0x1de0, 0x8211, 0x1da0,
- 0x002e, 0x009e, 0x003e, 0x014e, 0x01de, 0x0005, 0x2011, 0x000e,
- 0x08e8, 0x0016, 0x0026, 0x0096, 0x3348, 0x080c, 0x0f09, 0x2100,
- 0x9300, 0x2098, 0x22e0, 0x009e, 0x002e, 0x001e, 0x0036, 0x3518,
- 0x20a9, 0x0001, 0x4002, 0x8007, 0x4004, 0x8319, 0x1dd8, 0x003e,
- 0x0005, 0x20e9, 0x0001, 0x71b4, 0x81ff, 0x11c0, 0x9006, 0x2009,
- 0x0200, 0x20a9, 0x0002, 0x9298, 0x0018, 0x23a0, 0x4001, 0x2009,
- 0x0700, 0x20a9, 0x0002, 0x9298, 0x0008, 0x23a0, 0x4001, 0x7078,
- 0x8007, 0x717c, 0x810f, 0x20a9, 0x0002, 0x4001, 0x9298, 0x000c,
- 0x23a0, 0x900e, 0x080c, 0x0da4, 0x2001, 0x0000, 0x810f, 0x20a9,
- 0x0002, 0x4001, 0x0005, 0x89ff, 0x0140, 0xa804, 0xa807, 0x0000,
- 0x0006, 0x080c, 0x1033, 0x009e, 0x0cb0, 0x0005, 0x00e6, 0x2071,
- 0x1800, 0x080c, 0x10ac, 0x090c, 0x0dc4, 0x00ee, 0x0005, 0x0086,
- 0x00e6, 0x0006, 0x0026, 0x0036, 0x0126, 0x2091, 0x8000, 0x00c9,
- 0x2071, 0x1800, 0x73bc, 0x702c, 0x9016, 0x9045, 0x0158, 0x8210,
- 0x9906, 0x090c, 0x0dc4, 0x2300, 0x9202, 0x0120, 0x1a0c, 0x0dc4,
- 0xa000, 0x0c98, 0x012e, 0x003e, 0x002e, 0x000e, 0x00ee, 0x008e,
- 0x0005, 0x0086, 0x00e6, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071,
- 0x1911, 0x7010, 0x9005, 0x0140, 0x7018, 0x9045, 0x0128, 0x9906,
- 0x090c, 0x0dc4, 0xa000, 0x0cc8, 0x012e, 0x000e, 0x00ee, 0x008e,
- 0x0005, 0x00e6, 0x2071, 0x1800, 0x0126, 0x2091, 0x8000, 0x70bc,
- 0x8001, 0x0270, 0x70be, 0x702c, 0x2048, 0x9085, 0x0001, 0xa800,
- 0x702e, 0xa803, 0x0000, 0xa807, 0x0000, 0x012e, 0x00ee, 0x0005,
- 0x904e, 0x0cd8, 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071, 0x1800,
- 0x70bc, 0x90ca, 0x0040, 0x0268, 0x8001, 0x70be, 0x702c, 0x2048,
- 0xa800, 0x702e, 0xa803, 0x0000, 0xa807, 0x0000, 0x012e, 0x00ee,
- 0x0005, 0x904e, 0x0cd8, 0x00e6, 0x0126, 0x2091, 0x8000, 0x0016,
- 0x890e, 0x810e, 0x810f, 0x9184, 0x003f, 0xa862, 0x9184, 0xffc0,
- 0xa85e, 0x001e, 0x0020, 0x00e6, 0x0126, 0x2091, 0x8000, 0x2071,
- 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be,
- 0x080c, 0x8245, 0x012e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9026,
- 0x2009, 0x0000, 0x2049, 0x0400, 0x2900, 0x702e, 0x8940, 0x2800,
- 0xa802, 0xa95e, 0xa863, 0x0001, 0x8420, 0x9886, 0x0440, 0x0120,
- 0x2848, 0x9188, 0x0040, 0x0c90, 0x2071, 0x188e, 0x7000, 0x9005,
- 0x11a0, 0x2001, 0x04d4, 0xa802, 0x2048, 0x2009, 0x3500, 0x8940,
- 0x2800, 0xa802, 0xa95e, 0xa863, 0x0001, 0x8420, 0x9886, 0x0800,
- 0x0120, 0x2848, 0x9188, 0x0040, 0x0c90, 0x2071, 0x188e, 0x7104,
- 0x7200, 0x82ff, 0x01d0, 0x7308, 0x8318, 0x831f, 0x831b, 0x831b,
- 0x7312, 0x8319, 0x2001, 0x0800, 0xa802, 0x2048, 0x8900, 0xa802,
- 0x2040, 0xa95e, 0xaa62, 0x8420, 0x2300, 0x9906, 0x0130, 0x2848,
- 0x9188, 0x0040, 0x9291, 0x0000, 0x0c88, 0xa803, 0x0000, 0x2071,
- 0x1800, 0x74ba, 0x74be, 0x0005, 0x00e6, 0x0016, 0x9984, 0xfc00,
- 0x01e8, 0x908c, 0xf800, 0x1168, 0x9982, 0x0400, 0x02b8, 0x9982,
- 0x0440, 0x0278, 0x9982, 0x04d4, 0x0288, 0x9982, 0x0800, 0x1270,
- 0x0040, 0x9982, 0x0800, 0x0250, 0x2071, 0x188e, 0x7010, 0x9902,
- 0x1228, 0x9085, 0x0001, 0x001e, 0x00ee, 0x0005, 0x9006, 0x0cd8,
- 0x00e6, 0x2071, 0x19f7, 0x7007, 0x0000, 0x9006, 0x701e, 0x7022,
- 0x7002, 0x2071, 0x0000, 0x7010, 0x9085, 0x8044, 0x7012, 0x2071,
- 0x0080, 0x9006, 0x20a9, 0x0040, 0x7022, 0x1f04, 0x10e4, 0x702b,
- 0x0020, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x00e6, 0xa073,
- 0x0000, 0x2071, 0x19f7, 0x701c, 0x9088, 0x1a01, 0x280a, 0x8000,
- 0x9084, 0x003f, 0x701e, 0x7120, 0x9106, 0x090c, 0x0dc4, 0x7004,
- 0x9005, 0x1128, 0x00f6, 0x2079, 0x0080, 0x00a9, 0x00fe, 0x00ee,
- 0x012e, 0x0005, 0x0126, 0x2091, 0x8000, 0x00e6, 0x2071, 0x19f7,
- 0x7004, 0x9005, 0x1128, 0x00f6, 0x2079, 0x0080, 0x0021, 0x00fe,
- 0x00ee, 0x012e, 0x0005, 0x7004, 0x9086, 0x0000, 0x1110, 0x7007,
- 0x0006, 0x7000, 0x0002, 0x112d, 0x112b, 0x112b, 0x112b, 0x12a7,
- 0x12a7, 0x12a7, 0x12a7, 0x080c, 0x0dc4, 0x701c, 0x7120, 0x9106,
- 0x1148, 0x792c, 0x9184, 0x0001, 0x1120, 0xd1fc, 0x1110, 0x7007,
- 0x0000, 0x0005, 0x0096, 0x9180, 0x1a01, 0x2004, 0x700a, 0x2048,
- 0x8108, 0x918c, 0x003f, 0x7122, 0x782b, 0x0026, 0xa890, 0x7802,
- 0xa894, 0x7806, 0xa898, 0x780a, 0xa89c, 0x780e, 0xa87c, 0x700e,
- 0xa874, 0x7016, 0xa878, 0x701a, 0xa86c, 0x009e, 0xd084, 0x0120,
- 0x7007, 0x0001, 0x0029, 0x0005, 0x7007, 0x0002, 0x00b1, 0x0005,
- 0x0016, 0x0026, 0x710c, 0x2011, 0x0040, 0x9182, 0x0040, 0x1210,
- 0x2110, 0x9006, 0x700e, 0x7212, 0x8203, 0x7812, 0x782b, 0x0020,
- 0x782b, 0x0041, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x0136,
- 0x0146, 0x0156, 0x7014, 0x20e0, 0x7018, 0x2098, 0x20e9, 0x0000,
- 0x20a1, 0x0088, 0x782b, 0x0026, 0x710c, 0x2011, 0x0040, 0x9182,
- 0x0040, 0x1210, 0x2110, 0x9006, 0x700e, 0x22a8, 0x4006, 0x8203,
- 0x7812, 0x782b, 0x0020, 0x3300, 0x701a, 0x782b, 0x0001, 0x015e,
- 0x014e, 0x013e, 0x002e, 0x001e, 0x0005, 0x0016, 0x2009, 0x19f7,
- 0x2104, 0xc095, 0x200a, 0x080c, 0x110a, 0x001e, 0x0005, 0x0016,
- 0x00e6, 0x2071, 0x19f7, 0x00f6, 0x2079, 0x0080, 0x792c, 0xd1bc,
- 0x190c, 0x0dbd, 0x782b, 0x0002, 0xd1fc, 0x0120, 0x918c, 0x0700,
- 0x7004, 0x0023, 0x00fe, 0x00ee, 0x001e, 0x0005, 0x111b, 0x11c5,
- 0x11f9, 0x0dc4, 0x0dc4, 0x12b3, 0x0dc4, 0x918c, 0x0700, 0x1550,
- 0x0136, 0x0146, 0x0156, 0x7014, 0x20e8, 0x7018, 0x20a0, 0x20e1,
- 0x0000, 0x2099, 0x0088, 0x782b, 0x0040, 0x7010, 0x20a8, 0x4005,
- 0x3400, 0x701a, 0x015e, 0x014e, 0x013e, 0x700c, 0x9005, 0x0578,
- 0x7800, 0x7802, 0x7804, 0x7806, 0x080c, 0x1160, 0x0005, 0x7008,
- 0x0096, 0x2048, 0xa873, 0x0100, 0x009e, 0x7007, 0x0000, 0x080c,
- 0x111b, 0x0005, 0x7008, 0x0096, 0x2048, 0xa873, 0x0200, 0x009e,
- 0x0ca0, 0x918c, 0x0700, 0x1150, 0x700c, 0x9005, 0x0180, 0x7800,
- 0x7802, 0x7804, 0x7806, 0x080c, 0x1175, 0x0005, 0x7008, 0x0096,
- 0x2048, 0xa873, 0x0200, 0x009e, 0x7007, 0x0000, 0x0080, 0x0096,
- 0x7008, 0x2048, 0x7800, 0xa892, 0x7804, 0xa896, 0x7808, 0xa89a,
- 0x780c, 0xa89e, 0xa873, 0x0100, 0x009e, 0x7007, 0x0000, 0x0096,
- 0x00d6, 0x7008, 0x2048, 0x2001, 0x18ba, 0x2004, 0x9906, 0x1128,
- 0xa8a0, 0x080f, 0x00de, 0x009e, 0x00a0, 0x00de, 0x009e, 0x0096,
- 0x00d6, 0x7008, 0x2048, 0x0081, 0x0150, 0xa8a0, 0x0086, 0x2940,
- 0x080f, 0x008e, 0x00de, 0x009e, 0x080c, 0x110a, 0x0005, 0x00de,
- 0x009e, 0x080c, 0x110a, 0x0005, 0xa8ac, 0xd08c, 0x0005, 0x0096,
- 0xa0a4, 0x904d, 0x090c, 0x0dc4, 0xa070, 0x908e, 0x0100, 0x0130,
- 0xa87f, 0x0030, 0xa887, 0x0000, 0xa89b, 0x4002, 0xa898, 0x908e,
- 0x006b, 0x090c, 0x469d, 0x080c, 0x6b11, 0xa0a3, 0x0000, 0xa0a7,
- 0x0000, 0x2848, 0x080c, 0x1033, 0x009e, 0x0005, 0x00a6, 0xa0a4,
- 0x904d, 0x090c, 0x0dc4, 0xa070, 0x908e, 0x0100, 0x0128, 0xa87f,
- 0x0001, 0xa887, 0x0000, 0x00c0, 0xa80c, 0x2050, 0xb004, 0x9005,
- 0x0198, 0xa80e, 0x2050, 0x8006, 0x8006, 0x8007, 0x908c, 0x003f,
- 0x9084, 0xffc0, 0x9080, 0x0002, 0xa07a, 0xa176, 0xb000, 0xa07e,
- 0x2810, 0x080c, 0x10eb, 0x00c8, 0xa980, 0xa898, 0x0016, 0x0006,
- 0x080c, 0x6b11, 0x000e, 0x001e, 0xd1a4, 0x0128, 0x00c6, 0x2060,
- 0x080c, 0x9f18, 0x00ce, 0x7008, 0x2048, 0xa8a3, 0x0000, 0xa8a7,
- 0x0000, 0x080c, 0x1033, 0x080c, 0x110a, 0x00ae, 0x0005, 0x0126,
- 0x2091, 0x8000, 0x782b, 0x1001, 0x7007, 0x0005, 0x7000, 0xc094,
- 0x7002, 0x012e, 0x0005, 0x7007, 0x0000, 0x080c, 0x111b, 0x0005,
- 0x0126, 0x2091, 0x2200, 0x2079, 0x0300, 0x2071, 0x1a41, 0x7003,
- 0x0000, 0x78bf, 0x00f6, 0x781b, 0x4800, 0x00c1, 0x7803, 0x0003,
- 0x780f, 0x0000, 0x20a9, 0x0259, 0x2061, 0xd387, 0x2c0d, 0x7912,
- 0xe104, 0x9ce0, 0x0002, 0x7916, 0x1f04, 0x12ce, 0x7807, 0x0007,
- 0x7803, 0x0000, 0x7803, 0x0001, 0x012e, 0x0005, 0x00c6, 0x7803,
- 0x0000, 0x7808, 0xd09c, 0x0110, 0x7820, 0x0cd8, 0x2001, 0x1a42,
- 0x2003, 0x0000, 0x78ab, 0x0004, 0x78ac, 0xd0ac, 0x1de8, 0x78ab,
- 0x0002, 0x7807, 0x0007, 0x7827, 0x0030, 0x782b, 0x0400, 0x7827,
- 0x0031, 0x782b, 0x1a64, 0x781f, 0xff00, 0x781b, 0xb700, 0x2001,
- 0x0200, 0x2004, 0xd0dc, 0x0110, 0x781f, 0x0303, 0x2061, 0x1a64,
- 0x602f, 0x1cc8, 0x2001, 0x1819, 0x2004, 0x9082, 0x1cc8, 0x6032,
- 0x603b, 0x1f70, 0x2001, 0x31cc, 0xd0fc, 0x190c, 0x0dc4, 0x2001,
- 0x1810, 0x2004, 0xd0c4, 0x1128, 0x2001, 0x0003, 0x2004, 0xd0d4,
- 0x1118, 0x783f, 0x31cc, 0x0020, 0x9084, 0xc000, 0x783f, 0xb1cc,
- 0x00ce, 0x0005, 0x0126, 0x2091, 0x2200, 0x7908, 0x9184, 0x0030,
- 0x190c, 0x0dbd, 0xd19c, 0x0158, 0x7820, 0x908c, 0xf000, 0x15f0,
- 0x908a, 0x0024, 0x1a0c, 0x0dc4, 0x0023, 0x012e, 0x0005, 0x012e,
- 0x0005, 0x1366, 0x1366, 0x137d, 0x1382, 0x1386, 0x138b, 0x13b3,
- 0x13b7, 0x13c5, 0x13c9, 0x1366, 0x1452, 0x1456, 0x14c6, 0x1366,
- 0x1366, 0x1366, 0x1366, 0x1366, 0x1366, 0x1366, 0x1366, 0x1366,
- 0x1366, 0x1366, 0x1366, 0x1366, 0x138d, 0x1366, 0x1366, 0x1366,
- 0x1366, 0x1366, 0x1366, 0x136a, 0x1368, 0x1366, 0x080c, 0x0dc4,
- 0x080c, 0x0dbd, 0x080c, 0x14cd, 0x2009, 0x1a59, 0x2104, 0x8000,
- 0x200a, 0x080c, 0x7d22, 0x080c, 0x199b, 0x0005, 0x2009, 0x0048,
- 0x2060, 0x080c, 0x9f88, 0x012e, 0x0005, 0x7004, 0xc085, 0xc0b5,
- 0x7006, 0x0005, 0x7004, 0xc085, 0x7006, 0x0005, 0x080c, 0x14cd,
- 0x080c, 0x1636, 0x0005, 0x080c, 0x0dc4, 0x080c, 0x14cd, 0x2060,
- 0x6014, 0x0096, 0x2048, 0xa83b, 0xffff, 0x009e, 0x2009, 0x0048,
- 0x080c, 0x9f88, 0x2001, 0x015d, 0x2003, 0x0000, 0x2009, 0x03e8,
- 0x8109, 0x0160, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x2001,
- 0x0218, 0x2004, 0xd0ec, 0x1110, 0x080c, 0x14d2, 0x2001, 0x0307,
- 0x2003, 0x8000, 0x0005, 0x7004, 0xc095, 0x7006, 0x0005, 0x080c,
- 0x14cd, 0x2060, 0x6014, 0x0096, 0x2048, 0xa83b, 0xffff, 0x009e,
- 0x2009, 0x0048, 0x080c, 0x9f88, 0x0005, 0x080c, 0x14cd, 0x080c,
- 0x0dc4, 0x080c, 0x14cd, 0x080c, 0x143d, 0x7827, 0x0018, 0x79ac,
- 0xd1dc, 0x0540, 0x7827, 0x0015, 0x7828, 0x782b, 0x0000, 0x9065,
- 0x0138, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020, 0x0400,
- 0x7004, 0x9005, 0x1180, 0x78ab, 0x0004, 0x7827, 0x0018, 0x782b,
- 0x0000, 0xd1bc, 0x090c, 0x0dc4, 0x2001, 0x020d, 0x2003, 0x0050,
- 0x2003, 0x0020, 0x0478, 0x78ab, 0x0004, 0x7803, 0x0001, 0x080c,
- 0x1456, 0x0005, 0x7828, 0x782b, 0x0000, 0x9065, 0x090c, 0x0dc4,
- 0x6014, 0x2048, 0x78ab, 0x0004, 0x918c, 0x0700, 0x01d8, 0x080c,
- 0x7d22, 0x080c, 0x199b, 0x080c, 0xb955, 0x0158, 0xa9b0, 0xa936,
- 0xa9b4, 0xa93a, 0xa83f, 0xffff, 0xa843, 0xffff, 0xa884, 0xc0bd,
- 0xa886, 0xa984, 0x9184, 0x0020, 0x1120, 0xc1ad, 0xa986, 0x080c,
- 0xb5c5, 0x0005, 0x2029, 0x00c8, 0x8529, 0x0128, 0x2001, 0x0201,
- 0x2004, 0x9005, 0x0dc8, 0x7dbc, 0x080c, 0xd314, 0xd5a4, 0x1118,
- 0x080c, 0x14d2, 0x0005, 0x080c, 0x7d22, 0x080c, 0x199b, 0x0005,
- 0x781f, 0x0300, 0x7803, 0x0001, 0x0005, 0x0016, 0x0066, 0x0076,
- 0x00f6, 0x2079, 0x0300, 0x7908, 0x918c, 0x0007, 0x9186, 0x0003,
- 0x0120, 0x2001, 0x0016, 0x080c, 0x1553, 0x00fe, 0x007e, 0x006e,
- 0x001e, 0x0005, 0x7004, 0xc09d, 0x7006, 0x0005, 0x7104, 0x9184,
- 0x0004, 0x190c, 0x0dc4, 0xd184, 0x11b1, 0xd19c, 0x0180, 0xc19c,
- 0x7106, 0x0016, 0x080c, 0x1619, 0x001e, 0x0148, 0x2001, 0x020d,
- 0x2003, 0x0050, 0x2003, 0x0020, 0x080c, 0x14d2, 0x0005, 0x81ff,
- 0x190c, 0x0dc4, 0x0005, 0x2100, 0xc184, 0xc1b4, 0x7106, 0xd0b4,
- 0x0016, 0x00e6, 0x1904, 0x14bb, 0x2071, 0x0200, 0x080c, 0x160d,
- 0x080c, 0x1619, 0x05a8, 0x6014, 0x9005, 0x05a8, 0x0096, 0x2048,
- 0xa868, 0x009e, 0x9084, 0x00ff, 0x908e, 0x0029, 0x0160, 0x908e,
- 0x0048, 0x1548, 0x601c, 0xd084, 0x11d8, 0x00f6, 0x2c78, 0x080c,
- 0x1679, 0x00fe, 0x00a8, 0x00f6, 0x2c78, 0x080c, 0x17bd, 0x00fe,
- 0x2009, 0x01f4, 0x8109, 0x0160, 0x2001, 0x0201, 0x2004, 0x9005,
- 0x0dc8, 0x2001, 0x0218, 0x2004, 0xd0ec, 0x1110, 0x0419, 0x0040,
- 0x2001, 0x020d, 0x2003, 0x0020, 0x080c, 0x12de, 0x7803, 0x0001,
- 0x00ee, 0x001e, 0x0005, 0x080c, 0x1619, 0x0dd0, 0x2001, 0x020d,
- 0x2003, 0x0050, 0x2003, 0x0020, 0x0069, 0x0c90, 0x0031, 0x2060,
- 0x2009, 0x0053, 0x080c, 0x9f88, 0x0005, 0x7808, 0xd09c, 0x0de8,
- 0x7820, 0x0005, 0x080c, 0x143d, 0x00d6, 0x2069, 0x0200, 0x2009,
- 0x01f4, 0x8109, 0x0520, 0x6804, 0x9005, 0x0dd8, 0x2001, 0x015d,
- 0x2003, 0x0000, 0x79bc, 0xd1a4, 0x1578, 0x79b8, 0x918c, 0x0fff,
- 0x0180, 0x9182, 0x0841, 0x1268, 0x9188, 0x0007, 0x918c, 0x0ff8,
- 0x810c, 0x810c, 0x810c, 0x080c, 0x153f, 0x6827, 0x0001, 0x8109,
- 0x1dd0, 0x080c, 0x153f, 0x6827, 0x0002, 0x080c, 0x153f, 0x6804,
- 0x9005, 0x1170, 0x682c, 0xd0e4, 0x1540, 0x691c, 0x9184, 0x0014,
- 0x0120, 0x6830, 0x9084, 0x9554, 0x15b9, 0x6804, 0x9005, 0x0da8,
- 0x79b8, 0xd1ec, 0x1130, 0x0870, 0x080c, 0x7d22, 0x080c, 0x199b,
- 0x0090, 0x7827, 0x0015, 0x782b, 0x0000, 0x7827, 0x0018, 0x782b,
- 0x0000, 0x2001, 0x020d, 0x2003, 0x0020, 0x2001, 0x0307, 0x2003,
- 0x0300, 0x7803, 0x0001, 0x00de, 0x0005, 0x682c, 0x9084, 0x5400,
- 0x9086, 0x5400, 0x0d30, 0x7827, 0x0015, 0x782b, 0x0000, 0x7803,
- 0x0001, 0x6800, 0x9085, 0x1800, 0x6802, 0x00de, 0x0005, 0x6824,
- 0x9084, 0x0003, 0x1de0, 0x0005, 0x2079, 0x0001, 0x000e, 0x00f6,
- 0x0804, 0x0dc6, 0x2001, 0x0030, 0x2c08, 0x621c, 0x0021, 0x7830,
- 0x9086, 0x0041, 0x0005, 0x00f6, 0x2079, 0x0300, 0x0006, 0x7808,
- 0xd09c, 0x0140, 0x0016, 0x0026, 0x00c6, 0x080c, 0x132a, 0x00ce,
- 0x002e, 0x001e, 0x000e, 0x0006, 0x7832, 0x7936, 0x7a3a, 0x781b,
- 0x8080, 0x0059, 0x1118, 0x000e, 0x00fe, 0x0005, 0x000e, 0x792c,
- 0x3900, 0x8000, 0x2004, 0x080c, 0x0dc4, 0x2009, 0x180c, 0x2104,
- 0xc0f4, 0x200a, 0x2009, 0xff00, 0x8109, 0x0904, 0x15d1, 0x7a18,
- 0x9284, 0x0030, 0x0904, 0x15cc, 0x9284, 0x0048, 0x9086, 0x0008,
- 0x1904, 0x15cc, 0x2001, 0x0109, 0x2004, 0xd08c, 0x01f0, 0x0006,
- 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x0126, 0x2091, 0x2800,
- 0x00f6, 0x0026, 0x0016, 0x2009, 0x1a5c, 0x2104, 0x8000, 0x0208,
- 0x200a, 0x080c, 0x8689, 0x001e, 0x002e, 0x00fe, 0x012e, 0x015e,
- 0x014e, 0x013e, 0x01de, 0x01ce, 0x000e, 0x2001, 0x009b, 0x2004,
- 0xd0fc, 0x01d0, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
- 0x0156, 0x00f6, 0x0016, 0x2009, 0x1a5d, 0x2104, 0x8000, 0x0208,
- 0x200a, 0x080c, 0x1d94, 0x001e, 0x00fe, 0x015e, 0x014e, 0x013e,
- 0x01de, 0x01ce, 0x012e, 0x000e, 0x7818, 0xd0bc, 0x1904, 0x157c,
- 0x0005, 0x2001, 0x180c, 0x2004, 0xd0f4, 0x1528, 0x7a18, 0x9284,
- 0x0030, 0x0508, 0x9284, 0x0048, 0x9086, 0x0008, 0x11e0, 0x2001,
- 0x19d3, 0x2004, 0x9005, 0x01b8, 0x2001, 0x1a44, 0x2004, 0x9086,
- 0x0000, 0x0188, 0x2009, 0x1a5b, 0x2104, 0x8000, 0x0208, 0x200a,
- 0x080c, 0x96a1, 0x2009, 0x180c, 0x2104, 0xc0f5, 0x200a, 0x2009,
- 0xff00, 0x0804, 0x157c, 0x9085, 0x0001, 0x0005, 0x7832, 0x7936,
- 0x7a3a, 0x781b, 0x8080, 0x080c, 0x1575, 0x1108, 0x0005, 0x792c,
- 0x3900, 0x8000, 0x2004, 0x080c, 0x0dc4, 0x7037, 0x0001, 0x7150,
- 0x7037, 0x0002, 0x7050, 0x2060, 0xd1bc, 0x1110, 0x7054, 0x2060,
- 0x0005, 0x0006, 0x0046, 0x00e6, 0x2071, 0x0200, 0x7037, 0x0002,
- 0x7058, 0x9084, 0xff00, 0x8007, 0x9086, 0x00bc, 0x1158, 0x2021,
- 0x1a5a, 0x2404, 0x8000, 0x0208, 0x2022, 0x080c, 0x7d22, 0x080c,
- 0x199b, 0x9006, 0x00ee, 0x004e, 0x000e, 0x0005, 0x0c11, 0x1108,
- 0x0005, 0x00e6, 0x0016, 0x2071, 0x0200, 0x0879, 0x6120, 0x9186,
- 0x0000, 0x0560, 0x9186, 0x0002, 0x0548, 0x7358, 0x745c, 0x6014,
- 0x905d, 0x0520, 0x2b48, 0xab42, 0xac3e, 0x2001, 0x1880, 0x2004,
- 0xd0b4, 0x1138, 0x601c, 0xd0e4, 0x1120, 0xa83b, 0x7fff, 0xa837,
- 0xffff, 0x080c, 0x1f90, 0x1190, 0x080c, 0x181a, 0x2a00, 0xa816,
+ 0x7852, 0x080c, 0x7351, 0x0120, 0x7843, 0x0090, 0x7843, 0x0010,
+ 0x2021, 0xe678, 0x2019, 0xea60, 0x0d0c, 0x85c0, 0x7820, 0xd09c,
+ 0x1588, 0x080c, 0x7351, 0x0904, 0x0cf0, 0x7824, 0xd0ac, 0x1904,
+ 0x0d10, 0x080c, 0x7374, 0x1530, 0x0046, 0x2021, 0x0320, 0x8421,
+ 0x1df0, 0x004e, 0x7827, 0x1800, 0x080c, 0x2af6, 0x7824, 0x9084,
+ 0x1800, 0x1168, 0x9484, 0x0fff, 0x1140, 0x2001, 0x1810, 0x2004,
+ 0x9084, 0x9000, 0x0110, 0x080c, 0x0d31, 0x8421, 0x1158, 0x1d04,
+ 0x0ccb, 0x080c, 0x85c0, 0x080c, 0x7656, 0x080c, 0x764c, 0x7003,
+ 0x0001, 0x04f0, 0x8319, 0x1940, 0x1d04, 0x0cd8, 0x080c, 0x85c0,
+ 0x2009, 0x1977, 0x2104, 0x9005, 0x0118, 0x8001, 0x200a, 0x1178,
+ 0x200b, 0x000a, 0x7827, 0x0048, 0x20a9, 0x0002, 0x080c, 0x2ad7,
+ 0x7924, 0x080c, 0x2af6, 0xd19c, 0x0110, 0x080c, 0x2a17, 0x00d8,
+ 0x080c, 0x7362, 0x1140, 0x94a2, 0x03e8, 0x1128, 0x080c, 0x7329,
+ 0x7003, 0x0001, 0x00a8, 0x7827, 0x1800, 0x080c, 0x2af6, 0x7824,
+ 0x080c, 0x736b, 0x0110, 0xd0ac, 0x1158, 0x9084, 0x1800, 0x0950,
+ 0x7003, 0x0001, 0x0028, 0x2001, 0x0001, 0x080c, 0x26b1, 0x0078,
+ 0x2009, 0x180c, 0x210c, 0xd19c, 0x1120, 0x7904, 0x918d, 0x0002,
+ 0x7906, 0x7827, 0x0048, 0x7828, 0x9085, 0x0028, 0x782a, 0x7850,
+ 0x9085, 0x0400, 0x7852, 0x2001, 0x1984, 0x2003, 0x0000, 0x9006,
+ 0x78f2, 0x015e, 0x003e, 0x000e, 0x012e, 0x00fe, 0x004e, 0x001e,
+ 0x0005, 0x0006, 0x0016, 0x0036, 0x0046, 0x00b6, 0x00c6, 0x00d6,
+ 0x00e6, 0x00f6, 0x0156, 0x0069, 0x0d0c, 0x85c0, 0x015e, 0x00fe,
+ 0x00ee, 0x00de, 0x00ce, 0x00be, 0x004e, 0x003e, 0x001e, 0x000e,
+ 0x0005, 0x00e6, 0x2071, 0x189f, 0x7004, 0x9086, 0x0001, 0x1110,
+ 0x080c, 0x338f, 0x00ee, 0x0005, 0x0005, 0x2a70, 0x2061, 0x1988,
+ 0x2063, 0x0003, 0x6007, 0x0003, 0x600b, 0x001a, 0x600f, 0x0117,
+ 0x2001, 0x1958, 0x900e, 0x2102, 0x7192, 0x2001, 0x0100, 0x2004,
+ 0x9082, 0x0002, 0x0218, 0x705b, 0xffff, 0x0008, 0x715a, 0x7063,
+ 0xffff, 0x717a, 0x717e, 0x080c, 0xc617, 0x70e7, 0x00c0, 0x2061,
+ 0x1948, 0x6003, 0x0909, 0x6106, 0x600b, 0x8800, 0x600f, 0x0200,
+ 0x6013, 0x00ff, 0x6017, 0x000f, 0x611a, 0x601f, 0x07d0, 0x2061,
+ 0x1950, 0x6003, 0x8000, 0x6106, 0x610a, 0x600f, 0x0200, 0x6013,
+ 0x00ff, 0x6116, 0x601b, 0x0001, 0x611e, 0x2061, 0x1965, 0x6003,
+ 0x514c, 0x6007, 0x4f47, 0x600b, 0x4943, 0x600f, 0x2020, 0x2001,
+ 0x182b, 0x2102, 0x0005, 0x9016, 0x080c, 0x64fc, 0x1178, 0xb804,
+ 0x90c4, 0x00ff, 0x98c6, 0x0006, 0x0128, 0x90c4, 0xff00, 0x98c6,
+ 0x0600, 0x1120, 0x9186, 0x0080, 0x0108, 0x8210, 0x8108, 0x9186,
+ 0x0800, 0x1d50, 0x2208, 0x0005, 0x2091, 0x8000, 0x2079, 0x0000,
+ 0x000e, 0x00f6, 0x0010, 0x2091, 0x8000, 0x0e04, 0x0dc5, 0x0006,
+ 0x0016, 0x2001, 0x8002, 0x0006, 0x2079, 0x0000, 0x000e, 0x7882,
+ 0x7836, 0x001e, 0x798e, 0x000e, 0x788a, 0x000e, 0x7886, 0x3900,
+ 0x789a, 0x00d6, 0x2069, 0x0300, 0x6818, 0x78ae, 0x681c, 0x78b2,
+ 0x2001, 0x19e5, 0x2004, 0x78b6, 0x2001, 0x1a61, 0x2004, 0x78ba,
+ 0x6808, 0x78be, 0x00de, 0x7833, 0x0012, 0x2091, 0x5000, 0x0156,
+ 0x00d6, 0x0036, 0x0026, 0x2079, 0x0300, 0x2069, 0x1a84, 0x7a08,
+ 0x226a, 0x2069, 0x1a85, 0x7a18, 0x226a, 0x8d68, 0x7a1c, 0x226a,
+ 0x782c, 0x2019, 0x1a92, 0x201a, 0x2019, 0x1a95, 0x9016, 0x7808,
+ 0xd09c, 0x0168, 0x7820, 0x201a, 0x8210, 0x8318, 0x9386, 0x1aaa,
+ 0x0108, 0x0ca8, 0x7808, 0xd09c, 0x0110, 0x2011, 0xdead, 0x2019,
+ 0x1a93, 0x782c, 0x201a, 0x8318, 0x221a, 0x7803, 0x0000, 0x2069,
+ 0x1a64, 0x901e, 0x20a9, 0x0020, 0x7b26, 0x7a28, 0x226a, 0x8d68,
+ 0x8318, 0x1f04, 0x0e24, 0x002e, 0x003e, 0x00de, 0x015e, 0x2079,
+ 0x1800, 0x7803, 0x0005, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
+ 0xd084, 0x0188, 0x2001, 0x19f8, 0x2004, 0x9005, 0x0130, 0x2001,
+ 0x008b, 0x2004, 0x9084, 0x8004, 0x0dd0, 0x2001, 0x008a, 0x2003,
+ 0x0002, 0x2003, 0x1001, 0x080c, 0x5673, 0x1108, 0x0099, 0x0cd8,
+ 0x0005, 0x918c, 0x03ff, 0x2001, 0x0003, 0x2004, 0x9084, 0x0600,
+ 0x1118, 0x918d, 0x2800, 0x0010, 0x918d, 0x2000, 0x2001, 0x017f,
+ 0x2102, 0x0005, 0x0026, 0x0126, 0x2011, 0x0080, 0x080c, 0x0eed,
+ 0x20a9, 0x0900, 0x080c, 0x0f0e, 0x2011, 0x0040, 0x080c, 0x0eed,
+ 0x20a9, 0x0900, 0x080c, 0x0f0e, 0x0c78, 0x0026, 0x080c, 0x0efa,
+ 0x1118, 0x2011, 0x0040, 0x0098, 0x2011, 0x010e, 0x2214, 0x9294,
+ 0x0007, 0x9296, 0x0007, 0x0118, 0x2011, 0xa880, 0x0010, 0x2011,
+ 0x6840, 0xd0e4, 0x70eb, 0x0000, 0x1120, 0x70eb, 0x0fa0, 0x080c,
+ 0x0eff, 0x002e, 0x0005, 0x0026, 0x080c, 0x0efa, 0x0128, 0xd0a4,
+ 0x1138, 0x2011, 0xcdd5, 0x0010, 0x2011, 0x0080, 0x080c, 0x0eff,
+ 0x002e, 0x0005, 0x0026, 0x70eb, 0x0000, 0x080c, 0x0efa, 0x1148,
+ 0x080c, 0x2aee, 0x1118, 0x2011, 0x8484, 0x0058, 0x2011, 0x8282,
+ 0x0040, 0x080c, 0x2aee, 0x1118, 0x2011, 0xcdc5, 0x0010, 0x2011,
+ 0xcac2, 0x080c, 0x0eff, 0x002e, 0x0005, 0x00e6, 0x0006, 0x2071,
+ 0x1800, 0xd0b4, 0x70e4, 0x1110, 0xc0e4, 0x0048, 0x0006, 0x3b00,
+ 0x9084, 0xff3f, 0x20d8, 0x000e, 0x70eb, 0x0000, 0xc0e5, 0x0079,
+ 0x000e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800, 0xd0e4, 0x70e4,
+ 0x1110, 0xc0dc, 0x0008, 0xc0dd, 0x0011, 0x00ee, 0x0005, 0x70e6,
+ 0x7000, 0x9084, 0x0007, 0x000b, 0x0005, 0x0ebc, 0x0e93, 0x0e93,
+ 0x0e75, 0x0ea2, 0x0e93, 0x0e93, 0x0ea2, 0x0016, 0x3b08, 0x3a00,
+ 0x9104, 0x918d, 0x00c0, 0x21d8, 0x9084, 0xff3f, 0x9205, 0x20d0,
+ 0x001e, 0x0005, 0x2001, 0x1839, 0x2004, 0xd0dc, 0x0005, 0x9e86,
+ 0x1800, 0x190c, 0x0dc3, 0x70e4, 0xd0e4, 0x0108, 0xc2e5, 0x72e6,
+ 0xd0e4, 0x1118, 0x9294, 0x00c0, 0x0c01, 0x0005, 0x1d04, 0x0f0e,
+ 0x2091, 0x6000, 0x1f04, 0x0f0e, 0x0005, 0x890e, 0x810e, 0x810f,
+ 0x9194, 0x003f, 0x918c, 0xffc0, 0x0005, 0x0006, 0x2200, 0x914d,
+ 0x894f, 0x894d, 0x894d, 0x000e, 0x0005, 0x01d6, 0x0146, 0x0036,
+ 0x0096, 0x2061, 0x188e, 0x600b, 0x0000, 0x600f, 0x0000, 0x6003,
+ 0x0000, 0x6007, 0x0000, 0x2009, 0xffc0, 0x2105, 0x0006, 0x2001,
+ 0xaaaa, 0x200f, 0x2019, 0x5555, 0x9016, 0x2049, 0x0bff, 0xab02,
+ 0xa001, 0xa001, 0xa800, 0x9306, 0x1138, 0x2105, 0x9306, 0x0120,
+ 0x8210, 0x99c8, 0x0400, 0x0c98, 0x000e, 0x200f, 0x2001, 0x189e,
+ 0x928a, 0x000e, 0x1638, 0x928a, 0x0006, 0x2011, 0x0006, 0x1210,
+ 0x2011, 0x0000, 0x2202, 0x9006, 0x2008, 0x82ff, 0x01b0, 0x8200,
+ 0x600a, 0x600f, 0xffff, 0x6003, 0x0002, 0x6007, 0x0000, 0x0026,
+ 0x2019, 0x0010, 0x9280, 0x0001, 0x20e8, 0x21a0, 0x21a8, 0x4104,
+ 0x8319, 0x1de0, 0x8211, 0x1da0, 0x002e, 0x009e, 0x003e, 0x014e,
+ 0x01de, 0x0005, 0x2011, 0x000e, 0x08e8, 0x0016, 0x0026, 0x0096,
+ 0x3348, 0x080c, 0x0f15, 0x2100, 0x9300, 0x2098, 0x22e0, 0x009e,
+ 0x002e, 0x001e, 0x0036, 0x3518, 0x20a9, 0x0001, 0x4002, 0x8007,
+ 0x4004, 0x8319, 0x1dd8, 0x003e, 0x0005, 0x20e9, 0x0001, 0x71b4,
+ 0x81ff, 0x11c0, 0x9006, 0x2009, 0x0200, 0x20a9, 0x0002, 0x9298,
+ 0x0018, 0x23a0, 0x4001, 0x2009, 0x0700, 0x20a9, 0x0002, 0x9298,
+ 0x0008, 0x23a0, 0x4001, 0x7078, 0x8007, 0x717c, 0x810f, 0x20a9,
+ 0x0002, 0x4001, 0x9298, 0x000c, 0x23a0, 0x900e, 0x080c, 0x0da3,
+ 0x2001, 0x0000, 0x810f, 0x20a9, 0x0002, 0x4001, 0x0005, 0x89ff,
+ 0x0140, 0xa804, 0xa807, 0x0000, 0x0006, 0x080c, 0x103f, 0x009e,
+ 0x0cb0, 0x0005, 0x00e6, 0x2071, 0x1800, 0x080c, 0x10b8, 0x090c,
+ 0x0dc3, 0x00ee, 0x0005, 0x0086, 0x00e6, 0x0006, 0x0026, 0x0036,
+ 0x0126, 0x2091, 0x8000, 0x00c9, 0x2071, 0x1800, 0x73bc, 0x702c,
+ 0x9016, 0x9045, 0x0158, 0x8210, 0x9906, 0x090c, 0x0dc3, 0x2300,
+ 0x9202, 0x0120, 0x1a0c, 0x0dc3, 0xa000, 0x0c98, 0x012e, 0x003e,
+ 0x002e, 0x000e, 0x00ee, 0x008e, 0x0005, 0x0086, 0x00e6, 0x0006,
+ 0x0126, 0x2091, 0x8000, 0x2071, 0x1911, 0x7010, 0x9005, 0x0140,
+ 0x7018, 0x9045, 0x0128, 0x9906, 0x090c, 0x0dc3, 0xa000, 0x0cc8,
+ 0x012e, 0x000e, 0x00ee, 0x008e, 0x0005, 0x00e6, 0x2071, 0x1800,
+ 0x0126, 0x2091, 0x8000, 0x70bc, 0x8001, 0x0270, 0x70be, 0x702c,
+ 0x2048, 0x9085, 0x0001, 0xa800, 0x702e, 0xa803, 0x0000, 0xa807,
+ 0x0000, 0x012e, 0x00ee, 0x0005, 0x904e, 0x0cd8, 0x00e6, 0x0126,
+ 0x2091, 0x8000, 0x2071, 0x1800, 0x70bc, 0x90ca, 0x0040, 0x0268,
+ 0x8001, 0x70be, 0x702c, 0x2048, 0xa800, 0x702e, 0xa803, 0x0000,
+ 0xa807, 0x0000, 0x012e, 0x00ee, 0x0005, 0x904e, 0x0cd8, 0x00e6,
+ 0x0126, 0x2091, 0x8000, 0x0016, 0x890e, 0x810e, 0x810f, 0x9184,
+ 0x003f, 0xa862, 0x9184, 0xffc0, 0xa85e, 0x001e, 0x0020, 0x00e6,
+ 0x0126, 0x2091, 0x8000, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900,
+ 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x83a7, 0x012e, 0x00ee,
+ 0x0005, 0x2071, 0x1800, 0x9026, 0x2009, 0x0000, 0x2049, 0x0400,
+ 0x2900, 0x702e, 0x8940, 0x2800, 0xa802, 0xa95e, 0xa863, 0x0001,
+ 0x8420, 0x9886, 0x0440, 0x0120, 0x2848, 0x9188, 0x0040, 0x0c90,
+ 0x2071, 0x188e, 0x7000, 0x9005, 0x11a0, 0x2001, 0x0534, 0xa802,
+ 0x2048, 0x2009, 0x4d00, 0x8940, 0x2800, 0xa802, 0xa95e, 0xa863,
+ 0x0001, 0x8420, 0x9886, 0x0800, 0x0120, 0x2848, 0x9188, 0x0040,
+ 0x0c90, 0x2071, 0x188e, 0x7104, 0x7200, 0x82ff, 0x01d0, 0x7308,
+ 0x8318, 0x831f, 0x831b, 0x831b, 0x7312, 0x8319, 0x2001, 0x0800,
+ 0xa802, 0x2048, 0x8900, 0xa802, 0x2040, 0xa95e, 0xaa62, 0x8420,
+ 0x2300, 0x9906, 0x0130, 0x2848, 0x9188, 0x0040, 0x9291, 0x0000,
+ 0x0c88, 0xa803, 0x0000, 0x2071, 0x1800, 0x74ba, 0x74be, 0x0005,
+ 0x00e6, 0x0016, 0x9984, 0xfc00, 0x01e8, 0x908c, 0xf800, 0x1168,
+ 0x9982, 0x0400, 0x02b8, 0x9982, 0x0440, 0x0278, 0x9982, 0x0534,
+ 0x0288, 0x9982, 0x0800, 0x1270, 0x0040, 0x9982, 0x0800, 0x0250,
+ 0x2071, 0x188e, 0x7010, 0x9902, 0x1228, 0x9085, 0x0001, 0x001e,
+ 0x00ee, 0x0005, 0x9006, 0x0cd8, 0x00e6, 0x2071, 0x19f7, 0x7007,
+ 0x0000, 0x9006, 0x701e, 0x7022, 0x7002, 0x2071, 0x0000, 0x7010,
+ 0x9085, 0x8044, 0x7012, 0x2071, 0x0080, 0x9006, 0x20a9, 0x0040,
+ 0x7022, 0x1f04, 0x10f0, 0x702b, 0x0020, 0x00ee, 0x0005, 0x0126,
+ 0x2091, 0x8000, 0x00e6, 0xa073, 0x0000, 0x2071, 0x19f7, 0x701c,
+ 0x9088, 0x1a01, 0x280a, 0x8000, 0x9084, 0x003f, 0x701e, 0x7120,
+ 0x9106, 0x090c, 0x0dc3, 0x7004, 0x9005, 0x1128, 0x00f6, 0x2079,
+ 0x0080, 0x00a9, 0x00fe, 0x00ee, 0x012e, 0x0005, 0x0126, 0x2091,
+ 0x8000, 0x00e6, 0x2071, 0x19f7, 0x7004, 0x9005, 0x1128, 0x00f6,
+ 0x2079, 0x0080, 0x0021, 0x00fe, 0x00ee, 0x012e, 0x0005, 0x7004,
+ 0x9086, 0x0000, 0x1110, 0x7007, 0x0006, 0x7000, 0x0002, 0x1139,
+ 0x1137, 0x1137, 0x1137, 0x12b3, 0x12b3, 0x12b3, 0x12b3, 0x080c,
+ 0x0dc3, 0x701c, 0x7120, 0x9106, 0x1148, 0x792c, 0x9184, 0x0001,
+ 0x1120, 0xd1fc, 0x1110, 0x7007, 0x0000, 0x0005, 0x0096, 0x9180,
+ 0x1a01, 0x2004, 0x700a, 0x2048, 0x8108, 0x918c, 0x003f, 0x7122,
+ 0x782b, 0x0026, 0xa890, 0x7802, 0xa894, 0x7806, 0xa898, 0x780a,
+ 0xa89c, 0x780e, 0xa87c, 0x700e, 0xa874, 0x7016, 0xa878, 0x701a,
+ 0xa86c, 0x009e, 0xd084, 0x0120, 0x7007, 0x0001, 0x0029, 0x0005,
+ 0x7007, 0x0002, 0x00b1, 0x0005, 0x0016, 0x0026, 0x710c, 0x2011,
+ 0x0040, 0x9182, 0x0040, 0x1210, 0x2110, 0x9006, 0x700e, 0x7212,
+ 0x8203, 0x7812, 0x782b, 0x0020, 0x782b, 0x0041, 0x002e, 0x001e,
+ 0x0005, 0x0016, 0x0026, 0x0136, 0x0146, 0x0156, 0x7014, 0x20e0,
+ 0x7018, 0x2098, 0x20e9, 0x0000, 0x20a1, 0x0088, 0x782b, 0x0026,
+ 0x710c, 0x2011, 0x0040, 0x9182, 0x0040, 0x1210, 0x2110, 0x9006,
+ 0x700e, 0x22a8, 0x4006, 0x8203, 0x7812, 0x782b, 0x0020, 0x3300,
+ 0x701a, 0x782b, 0x0001, 0x015e, 0x014e, 0x013e, 0x002e, 0x001e,
+ 0x0005, 0x0016, 0x2009, 0x19f7, 0x2104, 0xc095, 0x200a, 0x080c,
+ 0x1116, 0x001e, 0x0005, 0x0016, 0x00e6, 0x2071, 0x19f7, 0x00f6,
+ 0x2079, 0x0080, 0x792c, 0xd1bc, 0x190c, 0x0dbc, 0x782b, 0x0002,
+ 0xd1fc, 0x0120, 0x918c, 0x0700, 0x7004, 0x0023, 0x00fe, 0x00ee,
+ 0x001e, 0x0005, 0x1127, 0x11d1, 0x1205, 0x0dc3, 0x0dc3, 0x12bf,
+ 0x0dc3, 0x918c, 0x0700, 0x1550, 0x0136, 0x0146, 0x0156, 0x7014,
+ 0x20e8, 0x7018, 0x20a0, 0x20e1, 0x0000, 0x2099, 0x0088, 0x782b,
+ 0x0040, 0x7010, 0x20a8, 0x4005, 0x3400, 0x701a, 0x015e, 0x014e,
+ 0x013e, 0x700c, 0x9005, 0x0578, 0x7800, 0x7802, 0x7804, 0x7806,
+ 0x080c, 0x116c, 0x0005, 0x7008, 0x0096, 0x2048, 0xa873, 0x0100,
+ 0x009e, 0x7007, 0x0000, 0x080c, 0x1127, 0x0005, 0x7008, 0x0096,
+ 0x2048, 0xa873, 0x0200, 0x009e, 0x0ca0, 0x918c, 0x0700, 0x1150,
+ 0x700c, 0x9005, 0x0180, 0x7800, 0x7802, 0x7804, 0x7806, 0x080c,
+ 0x1181, 0x0005, 0x7008, 0x0096, 0x2048, 0xa873, 0x0200, 0x009e,
+ 0x7007, 0x0000, 0x0080, 0x0096, 0x7008, 0x2048, 0x7800, 0xa892,
+ 0x7804, 0xa896, 0x7808, 0xa89a, 0x780c, 0xa89e, 0xa873, 0x0100,
+ 0x009e, 0x7007, 0x0000, 0x0096, 0x00d6, 0x7008, 0x2048, 0x2001,
+ 0x18ba, 0x2004, 0x9906, 0x1128, 0xa8a0, 0x080f, 0x00de, 0x009e,
+ 0x00a0, 0x00de, 0x009e, 0x0096, 0x00d6, 0x7008, 0x2048, 0x0081,
+ 0x0150, 0xa8a0, 0x0086, 0x2940, 0x080f, 0x008e, 0x00de, 0x009e,
+ 0x080c, 0x1116, 0x0005, 0x00de, 0x009e, 0x080c, 0x1116, 0x0005,
+ 0xa8ac, 0xd08c, 0x0005, 0x0096, 0xa0a4, 0x904d, 0x090c, 0x0dc3,
+ 0xa070, 0x908e, 0x0100, 0x0130, 0xa87f, 0x0030, 0xa887, 0x0000,
+ 0xa89b, 0x4002, 0xa898, 0x908e, 0x006b, 0x090c, 0x4740, 0x080c,
+ 0x6bf5, 0xa0a3, 0x0000, 0xa0a7, 0x0000, 0x2848, 0x080c, 0x103f,
+ 0x009e, 0x0005, 0x00a6, 0xa0a4, 0x904d, 0x090c, 0x0dc3, 0xa070,
+ 0x908e, 0x0100, 0x0128, 0xa87f, 0x0001, 0xa887, 0x0000, 0x00c0,
+ 0xa80c, 0x2050, 0xb004, 0x9005, 0x0198, 0xa80e, 0x2050, 0x8006,
+ 0x8006, 0x8007, 0x908c, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002,
+ 0xa07a, 0xa176, 0xb000, 0xa07e, 0x2810, 0x080c, 0x10f7, 0x00c8,
+ 0xa980, 0xa898, 0x0016, 0x0006, 0x080c, 0x6bf5, 0x000e, 0x001e,
+ 0xd1a4, 0x0128, 0x00c6, 0x2060, 0x080c, 0xa39d, 0x00ce, 0x7008,
+ 0x2048, 0xa8a3, 0x0000, 0xa8a7, 0x0000, 0x080c, 0x103f, 0x080c,
+ 0x1116, 0x00ae, 0x0005, 0x0126, 0x2091, 0x8000, 0x782b, 0x1001,
+ 0x7007, 0x0005, 0x7000, 0xc094, 0x7002, 0x012e, 0x0005, 0x7007,
+ 0x0000, 0x080c, 0x1127, 0x0005, 0x0126, 0x2091, 0x2200, 0x2079,
+ 0x0300, 0x2071, 0x1a41, 0x7003, 0x0000, 0x78bf, 0x00f6, 0x781b,
+ 0x4800, 0x00c1, 0x7803, 0x0003, 0x780f, 0x0000, 0x20a9, 0x0266,
+ 0x2061, 0xe114, 0x2c0d, 0x7912, 0xe104, 0x9ce0, 0x0002, 0x7916,
+ 0x1f04, 0x12da, 0x7807, 0x0007, 0x7803, 0x0000, 0x7803, 0x0001,
+ 0x012e, 0x0005, 0x00c6, 0x7803, 0x0000, 0x7808, 0xd09c, 0x0110,
+ 0x7820, 0x0cd8, 0x2001, 0x1a42, 0x2003, 0x0000, 0x78ab, 0x0004,
+ 0x78ac, 0xd0ac, 0x1de8, 0x78ab, 0x0002, 0x7807, 0x0007, 0x7827,
+ 0x0030, 0x782b, 0x0400, 0x7827, 0x0031, 0x782b, 0x1a64, 0x781f,
+ 0xff00, 0x781b, 0xb700, 0x2001, 0x0200, 0x2004, 0xd0dc, 0x0110,
+ 0x781f, 0x0303, 0x2061, 0x1a64, 0x602f, 0x1cd0, 0x2001, 0x1819,
+ 0x2004, 0x9082, 0x1cd0, 0x6032, 0x603b, 0x1fb8, 0x2001, 0x3268,
+ 0xd0fc, 0x190c, 0x0dc3, 0x2001, 0x1810, 0x2004, 0xd0c4, 0x1128,
+ 0x2001, 0x0003, 0x2004, 0xd0d4, 0x1118, 0x783f, 0x3268, 0x0020,
+ 0x9084, 0xc000, 0x783f, 0xb268, 0x00ce, 0x0005, 0x0126, 0x2091,
+ 0x2200, 0x7908, 0x9184, 0x0030, 0x190c, 0x0dbc, 0xd19c, 0x0158,
+ 0x7820, 0x908c, 0xf000, 0x15f0, 0x908a, 0x0024, 0x1a0c, 0x0dc3,
+ 0x0023, 0x012e, 0x0005, 0x012e, 0x0005, 0x1372, 0x1372, 0x1389,
+ 0x138e, 0x1392, 0x1397, 0x13bf, 0x13c3, 0x13d1, 0x13d5, 0x1372,
+ 0x1467, 0x146b, 0x14db, 0x1372, 0x1372, 0x1372, 0x1372, 0x1372,
+ 0x1372, 0x1372, 0x1372, 0x1372, 0x1372, 0x1372, 0x1372, 0x1372,
+ 0x1399, 0x1372, 0x1372, 0x1372, 0x1372, 0x1372, 0x1372, 0x1376,
+ 0x1374, 0x1372, 0x080c, 0x0dc3, 0x080c, 0x0dbc, 0x080c, 0x14e2,
+ 0x2009, 0x1a59, 0x2104, 0x8000, 0x200a, 0x080c, 0x7dcd, 0x080c,
+ 0x19e3, 0x0005, 0x2009, 0x0048, 0x2060, 0x080c, 0xa419, 0x012e,
+ 0x0005, 0x7004, 0xc085, 0xc0b5, 0x7006, 0x0005, 0x7004, 0xc085,
+ 0x7006, 0x0005, 0x080c, 0x14e2, 0x080c, 0x164b, 0x0005, 0x080c,
+ 0x0dc3, 0x080c, 0x14e2, 0x2060, 0x6014, 0x0096, 0x2048, 0xa83b,
+ 0xffff, 0x009e, 0x2009, 0x0048, 0x080c, 0xa419, 0x2001, 0x015d,
+ 0x2003, 0x0000, 0x2009, 0x03e8, 0x8109, 0x0160, 0x2001, 0x0201,
+ 0x2004, 0x9005, 0x0dc8, 0x2001, 0x0218, 0x2004, 0xd0ec, 0x1110,
+ 0x080c, 0x14e7, 0x2001, 0x0307, 0x2003, 0x8000, 0x0005, 0x7004,
+ 0xc095, 0x7006, 0x0005, 0x080c, 0x14e2, 0x2060, 0x6014, 0x0096,
+ 0x2048, 0xa83b, 0xffff, 0x009e, 0x2009, 0x0048, 0x080c, 0xa419,
+ 0x0005, 0x080c, 0x14e2, 0x080c, 0x0dc3, 0x080c, 0x14e2, 0x080c,
+ 0x1452, 0x7827, 0x0018, 0x79ac, 0xd1dc, 0x0540, 0x7827, 0x0015,
+ 0x7828, 0x782b, 0x0000, 0x9065, 0x0138, 0x2001, 0x020d, 0x2003,
+ 0x0050, 0x2003, 0x0020, 0x0400, 0x7004, 0x9005, 0x1180, 0x78ab,
+ 0x0004, 0x7827, 0x0018, 0x782b, 0x0000, 0xd1bc, 0x090c, 0x0dc3,
+ 0x2001, 0x020d, 0x2003, 0x0050, 0x2003, 0x0020, 0x04c0, 0x78ab,
+ 0x0004, 0x7803, 0x0001, 0x080c, 0x146b, 0x0005, 0x7828, 0x782b,
+ 0x0000, 0x9065, 0x090c, 0x0dc3, 0x6014, 0x2048, 0x78ab, 0x0004,
+ 0x918c, 0x0700, 0x01d8, 0x080c, 0x7dcd, 0x080c, 0x19e3, 0x080c,
+ 0xc1cd, 0x0158, 0xa9b0, 0xa936, 0xa9b4, 0xa93a, 0xa83f, 0xffff,
+ 0xa843, 0xffff, 0xa884, 0xc0bd, 0xa886, 0xa984, 0x9184, 0x0020,
+ 0x1120, 0xc1ad, 0xa986, 0x080c, 0xbde5, 0x0005, 0x6010, 0x00b6,
+ 0x2058, 0xb800, 0x00be, 0xd0bc, 0x6024, 0x190c, 0xc5b0, 0x2029,
+ 0x00c8, 0x8529, 0x0128, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8,
+ 0x7dbc, 0x080c, 0xe0a1, 0xd5a4, 0x1118, 0x080c, 0x14e7, 0x0005,
+ 0x080c, 0x7dcd, 0x080c, 0x19e3, 0x0005, 0x781f, 0x0300, 0x7803,
+ 0x0001, 0x0005, 0x0016, 0x0066, 0x0076, 0x00f6, 0x2079, 0x0300,
+ 0x7908, 0x918c, 0x0007, 0x9186, 0x0003, 0x0120, 0x2001, 0x0016,
+ 0x080c, 0x1568, 0x00fe, 0x007e, 0x006e, 0x001e, 0x0005, 0x7004,
+ 0xc09d, 0x7006, 0x0005, 0x7104, 0x9184, 0x0004, 0x190c, 0x0dc3,
+ 0xd184, 0x11b1, 0xd19c, 0x0180, 0xc19c, 0x7106, 0x0016, 0x080c,
+ 0x162e, 0x001e, 0x0148, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003,
+ 0x0020, 0x080c, 0x14e7, 0x0005, 0x81ff, 0x190c, 0x0dc3, 0x0005,
+ 0x2100, 0xc184, 0xc1b4, 0x7106, 0xd0b4, 0x0016, 0x00e6, 0x1904,
+ 0x14d0, 0x2071, 0x0200, 0x080c, 0x1622, 0x080c, 0x162e, 0x05a8,
+ 0x6014, 0x9005, 0x05a8, 0x0096, 0x2048, 0xa868, 0x009e, 0x9084,
+ 0x00ff, 0x908e, 0x0029, 0x0160, 0x908e, 0x0048, 0x1548, 0x601c,
+ 0xd084, 0x11d8, 0x00f6, 0x2c78, 0x080c, 0x16c1, 0x00fe, 0x00a8,
+ 0x00f6, 0x2c78, 0x080c, 0x1805, 0x00fe, 0x2009, 0x01f4, 0x8109,
+ 0x0160, 0x2001, 0x0201, 0x2004, 0x9005, 0x0dc8, 0x2001, 0x0218,
+ 0x2004, 0xd0ec, 0x1110, 0x0419, 0x0040, 0x2001, 0x020d, 0x2003,
+ 0x0020, 0x080c, 0x12ea, 0x7803, 0x0001, 0x00ee, 0x001e, 0x0005,
+ 0x080c, 0x162e, 0x0dd0, 0x2001, 0x020d, 0x2003, 0x0050, 0x2003,
+ 0x0020, 0x0069, 0x0c90, 0x0031, 0x2060, 0x2009, 0x0053, 0x080c,
+ 0xa419, 0x0005, 0x7808, 0xd09c, 0x0de8, 0x7820, 0x0005, 0x080c,
+ 0x1452, 0x00d6, 0x2069, 0x0200, 0x2009, 0x01f4, 0x8109, 0x0520,
+ 0x6804, 0x9005, 0x0dd8, 0x2001, 0x015d, 0x2003, 0x0000, 0x79bc,
+ 0xd1a4, 0x1578, 0x79b8, 0x918c, 0x0fff, 0x0180, 0x9182, 0x0841,
+ 0x1268, 0x9188, 0x0007, 0x918c, 0x0ff8, 0x810c, 0x810c, 0x810c,
+ 0x080c, 0x1554, 0x6827, 0x0001, 0x8109, 0x1dd0, 0x080c, 0x1554,
+ 0x6827, 0x0002, 0x080c, 0x1554, 0x6804, 0x9005, 0x1170, 0x682c,
+ 0xd0e4, 0x1540, 0x691c, 0x9184, 0x0014, 0x0120, 0x6830, 0x9084,
+ 0x9554, 0x15b9, 0x6804, 0x9005, 0x0da8, 0x79b8, 0xd1ec, 0x1130,
+ 0x0870, 0x080c, 0x7dcd, 0x080c, 0x19e3, 0x0090, 0x7827, 0x0015,
+ 0x782b, 0x0000, 0x7827, 0x0018, 0x782b, 0x0000, 0x2001, 0x020d,
+ 0x2003, 0x0020, 0x2001, 0x0307, 0x2003, 0x0300, 0x7803, 0x0001,
+ 0x00de, 0x0005, 0x682c, 0x9084, 0x5400, 0x9086, 0x5400, 0x0d30,
+ 0x7827, 0x0015, 0x782b, 0x0000, 0x7803, 0x0001, 0x6800, 0x9085,
+ 0x1800, 0x6802, 0x00de, 0x0005, 0x6824, 0x9084, 0x0003, 0x1de0,
+ 0x0005, 0x2079, 0x0001, 0x000e, 0x00f6, 0x0804, 0x0dc5, 0x2001,
+ 0x0030, 0x2c08, 0x621c, 0x0021, 0x7830, 0x9086, 0x0041, 0x0005,
+ 0x00f6, 0x2079, 0x0300, 0x0006, 0x7808, 0xd09c, 0x0140, 0x0016,
+ 0x0026, 0x00c6, 0x080c, 0x1336, 0x00ce, 0x002e, 0x001e, 0x000e,
+ 0x0006, 0x7832, 0x7936, 0x7a3a, 0x781b, 0x8080, 0x0059, 0x1118,
+ 0x000e, 0x00fe, 0x0005, 0x000e, 0x792c, 0x3900, 0x8000, 0x2004,
+ 0x080c, 0x0dc3, 0x2009, 0x180c, 0x2104, 0xc0f4, 0x200a, 0x2009,
+ 0xff00, 0x8109, 0x0904, 0x15e6, 0x7a18, 0x9284, 0x0030, 0x0904,
+ 0x15e1, 0x9284, 0x0048, 0x9086, 0x0008, 0x1904, 0x15e1, 0x2001,
+ 0x0109, 0x2004, 0xd08c, 0x01f0, 0x0006, 0x01c6, 0x01d6, 0x0136,
+ 0x0146, 0x0156, 0x0126, 0x2091, 0x2800, 0x00f6, 0x0026, 0x0016,
+ 0x2009, 0x1a5c, 0x2104, 0x8000, 0x0208, 0x200a, 0x080c, 0x885a,
+ 0x001e, 0x002e, 0x00fe, 0x012e, 0x015e, 0x014e, 0x013e, 0x01de,
+ 0x01ce, 0x000e, 0x2001, 0x009b, 0x2004, 0xd0fc, 0x01d0, 0x0006,
+ 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x00f6, 0x0016,
+ 0x2009, 0x1a5d, 0x2104, 0x8000, 0x0208, 0x200a, 0x080c, 0x1ddc,
+ 0x001e, 0x00fe, 0x015e, 0x014e, 0x013e, 0x01de, 0x01ce, 0x012e,
+ 0x000e, 0x7818, 0xd0bc, 0x1904, 0x1591, 0x0005, 0x2001, 0x180c,
+ 0x2004, 0xd0f4, 0x1528, 0x7a18, 0x9284, 0x0030, 0x0508, 0x9284,
+ 0x0048, 0x9086, 0x0008, 0x11e0, 0x2001, 0x19d3, 0x2004, 0x9005,
+ 0x01b8, 0x2001, 0x1a44, 0x2004, 0x9086, 0x0000, 0x0188, 0x2009,
+ 0x1a5b, 0x2104, 0x8000, 0x0208, 0x200a, 0x080c, 0x994f, 0x2009,
+ 0x180c, 0x2104, 0xc0f5, 0x200a, 0x2009, 0xff00, 0x0804, 0x1591,
+ 0x9085, 0x0001, 0x0005, 0x7832, 0x7936, 0x7a3a, 0x781b, 0x8080,
+ 0x080c, 0x158a, 0x1108, 0x0005, 0x792c, 0x3900, 0x8000, 0x2004,
+ 0x080c, 0x0dc3, 0x7037, 0x0001, 0x7150, 0x7037, 0x0002, 0x7050,
+ 0x2060, 0xd1bc, 0x1110, 0x7054, 0x2060, 0x0005, 0x0006, 0x0046,
+ 0x00e6, 0x2071, 0x0200, 0x7037, 0x0002, 0x7058, 0x9084, 0xff00,
+ 0x8007, 0x9086, 0x00bc, 0x1158, 0x2021, 0x1a5a, 0x2404, 0x8000,
+ 0x0208, 0x2022, 0x080c, 0x7dcd, 0x080c, 0x19e3, 0x9006, 0x00ee,
+ 0x004e, 0x000e, 0x0005, 0x0c11, 0x1108, 0x0005, 0x00e6, 0x0016,
+ 0x2071, 0x0200, 0x0879, 0x6120, 0x9186, 0x0000, 0x0904, 0x16b6,
+ 0x9186, 0x0002, 0x0904, 0x16b6, 0x6124, 0xd1dc, 0x01f8, 0x701c,
+ 0xd08c, 0x0904, 0x16b6, 0x7017, 0x0000, 0x2001, 0x0264, 0x2004,
+ 0xd0bc, 0x0904, 0x16b6, 0x2001, 0x0268, 0x00c6, 0x2064, 0x6104,
+ 0x6038, 0x00ce, 0x918e, 0x0039, 0x1904, 0x16b6, 0x9c06, 0x15f0,
+ 0x0126, 0x2091, 0x2600, 0x080c, 0x7d14, 0x012e, 0x7358, 0x745c,
+ 0x6014, 0x905d, 0x0598, 0x2b48, 0x6010, 0x00b6, 0x2058, 0xb800,
+ 0x00be, 0xd0bc, 0x190c, 0xc58b, 0xab42, 0xac3e, 0x2001, 0x1880,
+ 0x2004, 0xd0b4, 0x1170, 0x601c, 0xd0e4, 0x1158, 0x6010, 0x00b6,
+ 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1120, 0xa83b, 0x7fff, 0xa837,
+ 0xffff, 0x080c, 0x1fd8, 0x1190, 0x080c, 0x1862, 0x2a00, 0xa816,
0x0130, 0x2800, 0xa80e, 0x2c05, 0xa80a, 0x2c00, 0xa812, 0x7037,
0x0020, 0x781f, 0x0300, 0x001e, 0x00ee, 0x0005, 0x7037, 0x0050,
- 0x7037, 0x0020, 0x001e, 0x00ee, 0x080c, 0x14d2, 0x0005, 0x080c,
- 0x0dc4, 0x2001, 0x180d, 0x2004, 0xd08c, 0x190c, 0x6818, 0x2ff0,
+ 0x7037, 0x0020, 0x001e, 0x00ee, 0x080c, 0x14e7, 0x0005, 0x080c,
+ 0x0dc3, 0x2001, 0x180d, 0x2004, 0xd08c, 0x190c, 0x693f, 0x2ff0,
0x0126, 0x2091, 0x2200, 0x0016, 0x00c6, 0x3e60, 0x6014, 0x2048,
0x2940, 0x903e, 0x2730, 0xa868, 0x2068, 0xa81a, 0x9d84, 0x000f,
- 0x9088, 0x1f70, 0x2165, 0x0002, 0x16ab, 0x16f8, 0x16ab, 0x16ab,
- 0x16ab, 0x16da, 0x16ab, 0x16af, 0x16a4, 0x16ef, 0x16ab, 0x16ab,
- 0x16ab, 0x17b5, 0x16c3, 0x16b9, 0xa968, 0x918c, 0x00ff, 0x918e,
- 0x0048, 0x0904, 0x16ef, 0x9085, 0x0001, 0x0804, 0x17ab, 0xa880,
+ 0x9088, 0x1fb8, 0x2165, 0x0002, 0x16f3, 0x1740, 0x16f3, 0x16f3,
+ 0x16f3, 0x1722, 0x16f3, 0x16f7, 0x16ec, 0x1737, 0x16f3, 0x16f3,
+ 0x16f3, 0x17fd, 0x170b, 0x1701, 0xa968, 0x918c, 0x00ff, 0x918e,
+ 0x0048, 0x0904, 0x1737, 0x9085, 0x0001, 0x0804, 0x17f3, 0xa880,
0xd0bc, 0x0dc8, 0xa894, 0xa842, 0xa890, 0xa83e, 0xa88c, 0x0804,
- 0x16ff, 0xa880, 0xd0bc, 0x0d78, 0xa894, 0xa842, 0xa890, 0xa83e,
- 0xa88c, 0x0804, 0x174e, 0xa880, 0xd0bc, 0x0d28, 0xa894, 0xa842,
- 0xa890, 0xa83e, 0xa804, 0x9045, 0x090c, 0x0dc4, 0xa168, 0xa91a,
- 0x91ec, 0x000f, 0x9d80, 0x1f70, 0x2065, 0xa88c, 0xd19c, 0x1904,
- 0x174e, 0x0428, 0xa880, 0xd0ac, 0x0970, 0xa804, 0x9045, 0x090c,
- 0x0dc4, 0xa168, 0xa91a, 0x91ec, 0x000f, 0x9d80, 0x1f70, 0x2065,
- 0x9006, 0xa842, 0xa83e, 0xd19c, 0x1904, 0x174e, 0x0080, 0xa880,
- 0xd0ac, 0x0904, 0x16ab, 0x9006, 0xa842, 0xa83e, 0x0804, 0x174e,
- 0xa880, 0xd0ac, 0x0904, 0x16ab, 0x9006, 0xa842, 0xa83e, 0x2c05,
- 0x908a, 0x0037, 0x1a0c, 0x0dc4, 0x9082, 0x001c, 0x0002, 0x1722,
- 0x1722, 0x1724, 0x1722, 0x1722, 0x1722, 0x172a, 0x1722, 0x1722,
- 0x1722, 0x1730, 0x1722, 0x1722, 0x1722, 0x1736, 0x1722, 0x1722,
- 0x1722, 0x173c, 0x1722, 0x1722, 0x1722, 0x1742, 0x1722, 0x1722,
- 0x1722, 0x1748, 0x080c, 0x0dc4, 0xa578, 0xa47c, 0xa380, 0xa284,
- 0x0804, 0x1793, 0xa588, 0xa48c, 0xa390, 0xa294, 0x0804, 0x1793,
- 0xa598, 0xa49c, 0xa3a0, 0xa2a4, 0x0804, 0x1793, 0xa5a8, 0xa4ac,
- 0xa3b0, 0xa2b4, 0x0804, 0x1793, 0xa5b8, 0xa4bc, 0xa3c0, 0xa2c4,
- 0x0804, 0x1793, 0xa5c8, 0xa4cc, 0xa3d0, 0xa2d4, 0x0804, 0x1793,
- 0xa5d8, 0xa4dc, 0xa3e0, 0xa2e4, 0x0804, 0x1793, 0x2c05, 0x908a,
- 0x0035, 0x1a0c, 0x0dc4, 0x9082, 0x001c, 0x0002, 0x1771, 0x176f,
- 0x176f, 0x176f, 0x176f, 0x176f, 0x1778, 0x176f, 0x176f, 0x176f,
- 0x176f, 0x176f, 0x177f, 0x176f, 0x176f, 0x176f, 0x176f, 0x176f,
- 0x1786, 0x176f, 0x176f, 0x176f, 0x176f, 0x176f, 0x178d, 0x080c,
- 0x0dc4, 0xa570, 0xa474, 0xa778, 0xa67c, 0xa380, 0xa284, 0x00d8,
+ 0x1747, 0xa880, 0xd0bc, 0x0d78, 0xa894, 0xa842, 0xa890, 0xa83e,
+ 0xa88c, 0x0804, 0x1796, 0xa880, 0xd0bc, 0x0d28, 0xa894, 0xa842,
+ 0xa890, 0xa83e, 0xa804, 0x9045, 0x090c, 0x0dc3, 0xa168, 0xa91a,
+ 0x91ec, 0x000f, 0x9d80, 0x1fb8, 0x2065, 0xa88c, 0xd19c, 0x1904,
+ 0x1796, 0x0428, 0xa880, 0xd0ac, 0x0970, 0xa804, 0x9045, 0x090c,
+ 0x0dc3, 0xa168, 0xa91a, 0x91ec, 0x000f, 0x9d80, 0x1fb8, 0x2065,
+ 0x9006, 0xa842, 0xa83e, 0xd19c, 0x1904, 0x1796, 0x0080, 0xa880,
+ 0xd0ac, 0x0904, 0x16f3, 0x9006, 0xa842, 0xa83e, 0x0804, 0x1796,
+ 0xa880, 0xd0ac, 0x0904, 0x16f3, 0x9006, 0xa842, 0xa83e, 0x2c05,
+ 0x908a, 0x0037, 0x1a0c, 0x0dc3, 0x9082, 0x001c, 0x0002, 0x176a,
+ 0x176a, 0x176c, 0x176a, 0x176a, 0x176a, 0x1772, 0x176a, 0x176a,
+ 0x176a, 0x1778, 0x176a, 0x176a, 0x176a, 0x177e, 0x176a, 0x176a,
+ 0x176a, 0x1784, 0x176a, 0x176a, 0x176a, 0x178a, 0x176a, 0x176a,
+ 0x176a, 0x1790, 0x080c, 0x0dc3, 0xa578, 0xa47c, 0xa380, 0xa284,
+ 0x0804, 0x17db, 0xa588, 0xa48c, 0xa390, 0xa294, 0x0804, 0x17db,
+ 0xa598, 0xa49c, 0xa3a0, 0xa2a4, 0x0804, 0x17db, 0xa5a8, 0xa4ac,
+ 0xa3b0, 0xa2b4, 0x0804, 0x17db, 0xa5b8, 0xa4bc, 0xa3c0, 0xa2c4,
+ 0x0804, 0x17db, 0xa5c8, 0xa4cc, 0xa3d0, 0xa2d4, 0x0804, 0x17db,
+ 0xa5d8, 0xa4dc, 0xa3e0, 0xa2e4, 0x0804, 0x17db, 0x2c05, 0x908a,
+ 0x0035, 0x1a0c, 0x0dc3, 0x9082, 0x001c, 0x0002, 0x17b9, 0x17b7,
+ 0x17b7, 0x17b7, 0x17b7, 0x17b7, 0x17c0, 0x17b7, 0x17b7, 0x17b7,
+ 0x17b7, 0x17b7, 0x17c7, 0x17b7, 0x17b7, 0x17b7, 0x17b7, 0x17b7,
+ 0x17ce, 0x17b7, 0x17b7, 0x17b7, 0x17b7, 0x17b7, 0x17d5, 0x080c,
+ 0x0dc3, 0xa570, 0xa474, 0xa778, 0xa67c, 0xa380, 0xa284, 0x00d8,
0xa588, 0xa48c, 0xa790, 0xa694, 0xa398, 0xa29c, 0x00a0, 0xa5a0,
0xa4a4, 0xa7a8, 0xa6ac, 0xa3b0, 0xa2b4, 0x0068, 0xa5b8, 0xa4bc,
0xa7c0, 0xa6c4, 0xa3c8, 0xa2cc, 0x0030, 0xa5d0, 0xa4d4, 0xa7d8,
@@ -538,120 +547,120 @@ static const uint16_t isp_2300_risc_code[] = {
0xae2a, 0xa98c, 0x8c60, 0x2c1d, 0xa8b0, 0xaab4, 0xa836, 0xaa3a,
0x8109, 0xa916, 0x1160, 0x3e60, 0x601c, 0xc085, 0x601e, 0xa880,
0xc0dd, 0xa882, 0x9006, 0x00ce, 0x001e, 0x012e, 0x0005, 0x2800,
- 0xa80e, 0xab0a, 0x2c00, 0xa812, 0x0c70, 0x0804, 0x16ab, 0x2001,
- 0x180d, 0x2004, 0xd08c, 0x190c, 0x6818, 0x2ff0, 0x0126, 0x2091,
+ 0xa80e, 0xab0a, 0x2c00, 0xa812, 0x0c70, 0x0804, 0x16f3, 0x2001,
+ 0x180d, 0x2004, 0xd08c, 0x190c, 0x693f, 0x2ff0, 0x0126, 0x2091,
0x2200, 0x0016, 0x00c6, 0x3e60, 0x6014, 0x2048, 0x2940, 0xa80e,
- 0x2061, 0x1f6b, 0xa813, 0x1f6b, 0x2c05, 0xa80a, 0xa968, 0xa91a,
- 0xa880, 0xd0ac, 0x090c, 0x0dc4, 0x9006, 0xa842, 0xa83e, 0x2c05,
- 0x908a, 0x0035, 0x1a0c, 0x0dc4, 0xadd0, 0xacd4, 0xafd8, 0xaedc,
+ 0x2061, 0x1fb3, 0xa813, 0x1fb3, 0x2c05, 0xa80a, 0xa968, 0xa91a,
+ 0xa880, 0xd0ac, 0x090c, 0x0dc3, 0x9006, 0xa842, 0xa83e, 0x2c05,
+ 0x908a, 0x0035, 0x1a0c, 0x0dc3, 0xadd0, 0xacd4, 0xafd8, 0xaedc,
0xabe0, 0xaae4, 0xab2e, 0xaa32, 0xad1e, 0xac22, 0xaf26, 0xae2a,
0xa8b0, 0xaab4, 0xa836, 0xaa3a, 0xa98c, 0xa868, 0x9084, 0x00ff,
0x9086, 0x0008, 0x1120, 0x8109, 0xa916, 0x0128, 0x0080, 0x918a,
0x0002, 0xa916, 0x1160, 0x3e60, 0x601c, 0xc085, 0x601e, 0xa880,
0xc0dd, 0xa882, 0x9006, 0x00ce, 0x001e, 0x012e, 0x0005, 0xa804,
- 0x9045, 0x090c, 0x0dc4, 0xa80e, 0xa068, 0xa81a, 0x9084, 0x000f,
- 0x9080, 0x1f70, 0x2015, 0x82ff, 0x090c, 0x0dc4, 0xaa12, 0x2205,
+ 0x9045, 0x090c, 0x0dc3, 0xa80e, 0xa068, 0xa81a, 0x9084, 0x000f,
+ 0x9080, 0x1fb8, 0x2015, 0x82ff, 0x090c, 0x0dc3, 0xaa12, 0x2205,
0xa80a, 0x0c08, 0x903e, 0x2730, 0xa884, 0xd0fc, 0x1190, 0x2d00,
- 0x0002, 0x190f, 0x1871, 0x1871, 0x190f, 0x190f, 0x1909, 0x190f,
- 0x1871, 0x18c0, 0x18c0, 0x18c0, 0x190f, 0x190f, 0x190f, 0x1906,
- 0x18c0, 0xc0fc, 0xa886, 0xab2c, 0xaa30, 0xad1c, 0xac20, 0xdd9c,
- 0x0904, 0x1911, 0x2c05, 0x908a, 0x0035, 0x1a0c, 0x0dc4, 0x9082,
- 0x001c, 0x0002, 0x185d, 0x185b, 0x185b, 0x185b, 0x185b, 0x185b,
- 0x1861, 0x185b, 0x185b, 0x185b, 0x185b, 0x185b, 0x1865, 0x185b,
- 0x185b, 0x185b, 0x185b, 0x185b, 0x1869, 0x185b, 0x185b, 0x185b,
- 0x185b, 0x185b, 0x186d, 0x080c, 0x0dc4, 0xa778, 0xa67c, 0x0804,
- 0x1911, 0xa790, 0xa694, 0x0804, 0x1911, 0xa7a8, 0xa6ac, 0x0804,
- 0x1911, 0xa7c0, 0xa6c4, 0x0804, 0x1911, 0xa7d8, 0xa6dc, 0x0804,
- 0x1911, 0x2c05, 0x908a, 0x0037, 0x1a0c, 0x0dc4, 0x9082, 0x001c,
- 0x0002, 0x1894, 0x1894, 0x1896, 0x1894, 0x1894, 0x1894, 0x189c,
- 0x1894, 0x1894, 0x1894, 0x18a2, 0x1894, 0x1894, 0x1894, 0x18a8,
- 0x1894, 0x1894, 0x1894, 0x18ae, 0x1894, 0x1894, 0x1894, 0x18b4,
- 0x1894, 0x1894, 0x1894, 0x18ba, 0x080c, 0x0dc4, 0xa578, 0xa47c,
- 0xa380, 0xa284, 0x0804, 0x1911, 0xa588, 0xa48c, 0xa390, 0xa294,
- 0x0804, 0x1911, 0xa598, 0xa49c, 0xa3a0, 0xa2a4, 0x0804, 0x1911,
- 0xa5a8, 0xa4ac, 0xa3b0, 0xa2b4, 0x0804, 0x1911, 0xa5b8, 0xa4bc,
- 0xa3c0, 0xa2c4, 0x0804, 0x1911, 0xa5c8, 0xa4cc, 0xa3d0, 0xa2d4,
- 0x0804, 0x1911, 0xa5d8, 0xa4dc, 0xa3e0, 0xa2e4, 0x0804, 0x1911,
- 0x2c05, 0x908a, 0x0035, 0x1a0c, 0x0dc4, 0x9082, 0x001c, 0x0002,
- 0x18e3, 0x18e1, 0x18e1, 0x18e1, 0x18e1, 0x18e1, 0x18ea, 0x18e1,
- 0x18e1, 0x18e1, 0x18e1, 0x18e1, 0x18f1, 0x18e1, 0x18e1, 0x18e1,
- 0x18e1, 0x18e1, 0x18f8, 0x18e1, 0x18e1, 0x18e1, 0x18e1, 0x18e1,
- 0x18ff, 0x080c, 0x0dc4, 0xa570, 0xa474, 0xa778, 0xa67c, 0xa380,
+ 0x0002, 0x1957, 0x18b9, 0x18b9, 0x1957, 0x1957, 0x1951, 0x1957,
+ 0x18b9, 0x1908, 0x1908, 0x1908, 0x1957, 0x1957, 0x1957, 0x194e,
+ 0x1908, 0xc0fc, 0xa886, 0xab2c, 0xaa30, 0xad1c, 0xac20, 0xdd9c,
+ 0x0904, 0x1959, 0x2c05, 0x908a, 0x0035, 0x1a0c, 0x0dc3, 0x9082,
+ 0x001c, 0x0002, 0x18a5, 0x18a3, 0x18a3, 0x18a3, 0x18a3, 0x18a3,
+ 0x18a9, 0x18a3, 0x18a3, 0x18a3, 0x18a3, 0x18a3, 0x18ad, 0x18a3,
+ 0x18a3, 0x18a3, 0x18a3, 0x18a3, 0x18b1, 0x18a3, 0x18a3, 0x18a3,
+ 0x18a3, 0x18a3, 0x18b5, 0x080c, 0x0dc3, 0xa778, 0xa67c, 0x0804,
+ 0x1959, 0xa790, 0xa694, 0x0804, 0x1959, 0xa7a8, 0xa6ac, 0x0804,
+ 0x1959, 0xa7c0, 0xa6c4, 0x0804, 0x1959, 0xa7d8, 0xa6dc, 0x0804,
+ 0x1959, 0x2c05, 0x908a, 0x0037, 0x1a0c, 0x0dc3, 0x9082, 0x001c,
+ 0x0002, 0x18dc, 0x18dc, 0x18de, 0x18dc, 0x18dc, 0x18dc, 0x18e4,
+ 0x18dc, 0x18dc, 0x18dc, 0x18ea, 0x18dc, 0x18dc, 0x18dc, 0x18f0,
+ 0x18dc, 0x18dc, 0x18dc, 0x18f6, 0x18dc, 0x18dc, 0x18dc, 0x18fc,
+ 0x18dc, 0x18dc, 0x18dc, 0x1902, 0x080c, 0x0dc3, 0xa578, 0xa47c,
+ 0xa380, 0xa284, 0x0804, 0x1959, 0xa588, 0xa48c, 0xa390, 0xa294,
+ 0x0804, 0x1959, 0xa598, 0xa49c, 0xa3a0, 0xa2a4, 0x0804, 0x1959,
+ 0xa5a8, 0xa4ac, 0xa3b0, 0xa2b4, 0x0804, 0x1959, 0xa5b8, 0xa4bc,
+ 0xa3c0, 0xa2c4, 0x0804, 0x1959, 0xa5c8, 0xa4cc, 0xa3d0, 0xa2d4,
+ 0x0804, 0x1959, 0xa5d8, 0xa4dc, 0xa3e0, 0xa2e4, 0x0804, 0x1959,
+ 0x2c05, 0x908a, 0x0035, 0x1a0c, 0x0dc3, 0x9082, 0x001c, 0x0002,
+ 0x192b, 0x1929, 0x1929, 0x1929, 0x1929, 0x1929, 0x1932, 0x1929,
+ 0x1929, 0x1929, 0x1929, 0x1929, 0x1939, 0x1929, 0x1929, 0x1929,
+ 0x1929, 0x1929, 0x1940, 0x1929, 0x1929, 0x1929, 0x1929, 0x1929,
+ 0x1947, 0x080c, 0x0dc3, 0xa570, 0xa474, 0xa778, 0xa67c, 0xa380,
0xa284, 0x0438, 0xa588, 0xa48c, 0xa790, 0xa694, 0xa398, 0xa29c,
0x0400, 0xa5a0, 0xa4a4, 0xa7a8, 0xa6ac, 0xa3b0, 0xa2b4, 0x00c8,
0xa5b8, 0xa4bc, 0xa7c0, 0xa6c4, 0xa3c8, 0xa2cc, 0x0090, 0xa5d0,
0xa4d4, 0xa7d8, 0xa6dc, 0xa3e0, 0xa2e4, 0x0058, 0x9d86, 0x000e,
- 0x1130, 0x080c, 0x1f28, 0x1904, 0x181a, 0x900e, 0x0050, 0x080c,
- 0x0dc4, 0xab2e, 0xaa32, 0xad1e, 0xac22, 0xaf26, 0xae2a, 0x080c,
- 0x1f28, 0x0005, 0x6014, 0x2048, 0x6218, 0x82ff, 0x0158, 0x900e,
- 0x2001, 0x000a, 0x080c, 0x854b, 0x8204, 0x1110, 0x2011, 0x0002,
+ 0x1130, 0x080c, 0x1f70, 0x1904, 0x1862, 0x900e, 0x0050, 0x080c,
+ 0x0dc3, 0xab2e, 0xaa32, 0xad1e, 0xac22, 0xaf26, 0xae2a, 0x080c,
+ 0x1f70, 0x0005, 0x6014, 0x2048, 0x6218, 0x82ff, 0x0158, 0x900e,
+ 0x2001, 0x000a, 0x080c, 0x871c, 0x8204, 0x1110, 0x2011, 0x0002,
0x8211, 0xaa8a, 0x601b, 0x0002, 0xa878, 0x9084, 0x00ff, 0x9084,
0x0008, 0x0150, 0x00e9, 0x6000, 0x9086, 0x0004, 0x1120, 0x2009,
- 0x0048, 0x080c, 0x9f88, 0x0005, 0xa978, 0xd1dc, 0x1108, 0x0005,
+ 0x0048, 0x080c, 0xa419, 0x0005, 0xa978, 0xd1dc, 0x1108, 0x0005,
0xa934, 0xa890, 0x9106, 0x1158, 0xa938, 0xa894, 0x9106, 0x1138,
- 0x601c, 0xc084, 0x601e, 0x2009, 0x0048, 0x0804, 0x9f88, 0x0005,
+ 0x601c, 0xc084, 0x601e, 0x2009, 0x0048, 0x0804, 0xa419, 0x0005,
0x0126, 0x00c6, 0x2091, 0x2200, 0x00ce, 0x7908, 0x918c, 0x0007,
0x9186, 0x0000, 0x05b0, 0x9186, 0x0003, 0x0598, 0x6020, 0x6023,
0x0000, 0x0006, 0x2031, 0x0008, 0x00c6, 0x781f, 0x0808, 0x7808,
- 0xd09c, 0x0120, 0x080c, 0x132a, 0x8631, 0x1db8, 0x00ce, 0x781f,
- 0x0800, 0x2031, 0x0168, 0x00c6, 0x7808, 0xd09c, 0x190c, 0x132a,
- 0x00ce, 0x2001, 0x0038, 0x080c, 0x1a2b, 0x7930, 0x9186, 0x0040,
- 0x0160, 0x9186, 0x0042, 0x190c, 0x0dc4, 0x2001, 0x001e, 0x8001,
- 0x1df0, 0x8631, 0x1d40, 0x080c, 0x1a3a, 0x000e, 0x6022, 0x012e,
- 0x0005, 0x080c, 0x1a27, 0x7827, 0x0015, 0x7828, 0x9c06, 0x1db8,
+ 0xd09c, 0x0120, 0x080c, 0x1336, 0x8631, 0x1db8, 0x00ce, 0x781f,
+ 0x0800, 0x2031, 0x0168, 0x00c6, 0x7808, 0xd09c, 0x190c, 0x1336,
+ 0x00ce, 0x2001, 0x0038, 0x080c, 0x1a73, 0x7930, 0x9186, 0x0040,
+ 0x0160, 0x9186, 0x0042, 0x190c, 0x0dc3, 0x2001, 0x001e, 0x8001,
+ 0x1df0, 0x8631, 0x1d40, 0x080c, 0x1a82, 0x000e, 0x6022, 0x012e,
+ 0x0005, 0x080c, 0x1a6f, 0x7827, 0x0015, 0x7828, 0x9c06, 0x1db8,
0x782b, 0x0000, 0x0ca0, 0x00f6, 0x2079, 0x0300, 0x7803, 0x0000,
- 0x78ab, 0x0004, 0x2001, 0xf000, 0x8001, 0x090c, 0x0dc4, 0x7aac,
- 0xd2ac, 0x1dd0, 0x00fe, 0x080c, 0x72e5, 0x1188, 0x2001, 0x0138,
+ 0x78ab, 0x0004, 0x2001, 0xf000, 0x8001, 0x090c, 0x0dc3, 0x7aac,
+ 0xd2ac, 0x1dd0, 0x00fe, 0x080c, 0x7351, 0x1188, 0x2001, 0x0138,
0x2003, 0x0000, 0x2001, 0x0160, 0x2003, 0x0000, 0x2011, 0x012c,
- 0xa001, 0xa001, 0x8211, 0x1de0, 0x0059, 0x0804, 0x7393, 0x0479,
+ 0xa001, 0xa001, 0x8211, 0x1de0, 0x0059, 0x0804, 0x73fe, 0x0479,
0x0039, 0x2001, 0x0160, 0x2502, 0x2001, 0x0138, 0x2202, 0x0005,
- 0x00e6, 0x2071, 0x0200, 0x080c, 0x2a99, 0x2009, 0x003c, 0x080c,
- 0x22b2, 0x2001, 0x015d, 0x2003, 0x0000, 0x7000, 0x9084, 0x003c,
- 0x1de0, 0x080c, 0x8245, 0x70a0, 0x70a2, 0x7098, 0x709a, 0x709c,
+ 0x00e6, 0x2071, 0x0200, 0x080c, 0x2b02, 0x2009, 0x003c, 0x080c,
+ 0x22fa, 0x2001, 0x015d, 0x2003, 0x0000, 0x7000, 0x9084, 0x003c,
+ 0x1de0, 0x080c, 0x83a7, 0x70a0, 0x70a2, 0x7098, 0x709a, 0x709c,
0x709e, 0x2001, 0x020d, 0x2003, 0x0020, 0x00f6, 0x2079, 0x0300,
- 0x080c, 0x12de, 0x7803, 0x0001, 0x00fe, 0x00ee, 0x0005, 0x2001,
+ 0x080c, 0x12ea, 0x7803, 0x0001, 0x00fe, 0x00ee, 0x0005, 0x2001,
0x0138, 0x2014, 0x2003, 0x0000, 0x2001, 0x0160, 0x202c, 0x2003,
- 0x0000, 0x080c, 0x72e5, 0x1108, 0x0005, 0x2021, 0x0260, 0x2001,
+ 0x0000, 0x080c, 0x7351, 0x1108, 0x0005, 0x2021, 0x0260, 0x2001,
0x0141, 0x201c, 0xd3dc, 0x1168, 0x2001, 0x0109, 0x201c, 0x939c,
0x0048, 0x1160, 0x2001, 0x0111, 0x201c, 0x83ff, 0x1110, 0x8421,
0x1d70, 0x2001, 0x015d, 0x2003, 0x0000, 0x0005, 0x0046, 0x2021,
0x0019, 0x2003, 0x0048, 0xa001, 0xa001, 0x201c, 0x939c, 0x0048,
0x0120, 0x8421, 0x1db0, 0x004e, 0x0c60, 0x004e, 0x0c40, 0x601c,
- 0xc084, 0x601e, 0x0005, 0x2c08, 0x621c, 0x080c, 0x1553, 0x7930,
- 0x0005, 0x2c08, 0x621c, 0x080c, 0x15fe, 0x7930, 0x0005, 0x8001,
+ 0xc084, 0x601e, 0x0005, 0x2c08, 0x621c, 0x080c, 0x1568, 0x7930,
+ 0x0005, 0x2c08, 0x621c, 0x080c, 0x1613, 0x7930, 0x0005, 0x8001,
0x1df0, 0x0005, 0x2031, 0x0064, 0x781c, 0x9084, 0x0007, 0x0170,
- 0x2001, 0x0038, 0x0c41, 0x9186, 0x0040, 0x0904, 0x1a98, 0x2001,
- 0x001e, 0x0c69, 0x8631, 0x1d80, 0x080c, 0x0dc4, 0x781f, 0x0202,
+ 0x2001, 0x0038, 0x0c41, 0x9186, 0x0040, 0x0904, 0x1ae0, 0x2001,
+ 0x001e, 0x0c69, 0x8631, 0x1d80, 0x080c, 0x0dc3, 0x781f, 0x0202,
0x2001, 0x015d, 0x2003, 0x0000, 0x2001, 0x0dac, 0x0c01, 0x781c,
0xd084, 0x0110, 0x0861, 0x04e0, 0x2001, 0x0030, 0x0891, 0x9186,
0x0040, 0x0568, 0x781c, 0xd084, 0x1da8, 0x781f, 0x0101, 0x2001,
0x0014, 0x0869, 0x2001, 0x0037, 0x0821, 0x9186, 0x0040, 0x0140,
- 0x2001, 0x0030, 0x080c, 0x1a31, 0x9186, 0x0040, 0x190c, 0x0dc4,
+ 0x2001, 0x0030, 0x080c, 0x1a79, 0x9186, 0x0040, 0x190c, 0x0dc3,
0x00d6, 0x2069, 0x0200, 0x692c, 0xd1f4, 0x1170, 0xd1c4, 0x0160,
0xd19c, 0x0130, 0x6800, 0x9085, 0x1800, 0x6802, 0x00de, 0x0080,
0x6908, 0x9184, 0x0007, 0x1db0, 0x00de, 0x781f, 0x0100, 0x791c,
- 0x9184, 0x0007, 0x090c, 0x0dc4, 0xa001, 0xa001, 0x781f, 0x0200,
+ 0x9184, 0x0007, 0x090c, 0x0dc3, 0xa001, 0xa001, 0x781f, 0x0200,
0x0005, 0x0126, 0x2091, 0x2400, 0x2071, 0x1a44, 0x2079, 0x0090,
0x012e, 0x0005, 0x9280, 0x0005, 0x2004, 0x2048, 0xa980, 0xd1dc,
- 0x1904, 0x1b2d, 0xa968, 0x9184, 0x0007, 0x0002, 0x1ab6, 0x1b18,
- 0x1acd, 0x1acd, 0x1acd, 0x1b00, 0x1ae0, 0x1acf, 0x918c, 0x00ff,
- 0x9186, 0x0008, 0x1170, 0xa880, 0xd0b4, 0x0904, 0x1d4e, 0x9006,
- 0xa842, 0xa83e, 0xa98c, 0x2900, 0xa85a, 0xa813, 0x1f6b, 0x0804,
- 0x1b29, 0x9186, 0x0048, 0x0904, 0x1b18, 0x080c, 0x0dc4, 0xa880,
- 0xd0b4, 0x0904, 0x1d4e, 0xa894, 0xa842, 0xa83a, 0xa890, 0xa83e,
- 0xa836, 0xa8b0, 0xa846, 0xa8b4, 0xa84a, 0xa98c, 0x0804, 0x1b20,
+ 0x1904, 0x1b75, 0xa968, 0x9184, 0x0007, 0x0002, 0x1afe, 0x1b60,
+ 0x1b15, 0x1b15, 0x1b15, 0x1b48, 0x1b28, 0x1b17, 0x918c, 0x00ff,
+ 0x9186, 0x0008, 0x1170, 0xa880, 0xd0b4, 0x0904, 0x1d96, 0x9006,
+ 0xa842, 0xa83e, 0xa98c, 0x2900, 0xa85a, 0xa813, 0x1fb3, 0x0804,
+ 0x1b71, 0x9186, 0x0048, 0x0904, 0x1b60, 0x080c, 0x0dc3, 0xa880,
+ 0xd0b4, 0x0904, 0x1d96, 0xa894, 0xa842, 0xa83a, 0xa890, 0xa83e,
+ 0xa836, 0xa8b0, 0xa846, 0xa8b4, 0xa84a, 0xa98c, 0x0804, 0x1b68,
0xa868, 0x9084, 0x00ff, 0x9086, 0x001e, 0x1d38, 0xa880, 0xd0b4,
- 0x0904, 0x1d4e, 0xa894, 0xa842, 0xa83a, 0xa890, 0xa83e, 0xa836,
+ 0x0904, 0x1d96, 0xa894, 0xa842, 0xa83a, 0xa890, 0xa83e, 0xa836,
0xa8b0, 0xa846, 0xa8b4, 0xa84a, 0xa804, 0xa85a, 0x2040, 0xa068,
- 0x9084, 0x000f, 0x9080, 0x1f70, 0x2005, 0xa812, 0xa98c, 0x0448,
+ 0x9084, 0x000f, 0x9080, 0x1fb8, 0x2005, 0xa812, 0xa98c, 0x0448,
0x918c, 0x00ff, 0x9186, 0x0015, 0x1540, 0xa880, 0xd0b4, 0x0904,
- 0x1d4e, 0xa804, 0xa85a, 0x2040, 0xa068, 0x9084, 0x000f, 0x9080,
- 0x1f70, 0x2005, 0xa812, 0xa98c, 0x9006, 0xa842, 0xa83e, 0x0088,
- 0xa880, 0xd0b4, 0x0904, 0x1d4e, 0xa98c, 0x9006, 0xa842, 0xa83e,
- 0x2900, 0xa85a, 0xa868, 0x9084, 0x000f, 0x9080, 0x1f70, 0x2005,
+ 0x1d96, 0xa804, 0xa85a, 0x2040, 0xa068, 0x9084, 0x000f, 0x9080,
+ 0x1fb8, 0x2005, 0xa812, 0xa98c, 0x9006, 0xa842, 0xa83e, 0x0088,
+ 0xa880, 0xd0b4, 0x0904, 0x1d96, 0xa98c, 0x9006, 0xa842, 0xa83e,
+ 0x2900, 0xa85a, 0xa868, 0x9084, 0x000f, 0x9080, 0x1fb8, 0x2005,
0xa812, 0xa916, 0xa880, 0xc0dd, 0xa882, 0x0005, 0x00f6, 0x2079,
- 0x0090, 0x782c, 0xd0fc, 0x190c, 0x1d94, 0x00e6, 0x2071, 0x1a44,
- 0x7000, 0x9005, 0x1904, 0x1b94, 0x7206, 0x9280, 0x0005, 0x204c,
+ 0x0090, 0x782c, 0xd0fc, 0x190c, 0x1ddc, 0x00e6, 0x2071, 0x1a44,
+ 0x7000, 0x9005, 0x1904, 0x1bdc, 0x7206, 0x9280, 0x0005, 0x204c,
0x9280, 0x0004, 0x2004, 0x782b, 0x0004, 0x00f6, 0x2079, 0x0200,
0x7803, 0x0040, 0x00fe, 0x00b6, 0x2058, 0xb86c, 0x7836, 0xb890,
0x00be, 0x00f6, 0x2079, 0x0200, 0x7803, 0x0040, 0xa001, 0xa001,
@@ -663,46 +672,46 @@ static const uint16_t isp_2300_risc_code[] = {
0x0118, 0x001e, 0x000e, 0x0098, 0x001e, 0x000e, 0x8aff, 0x01c8,
0x0126, 0x2091, 0x8000, 0x2009, 0x0306, 0x200b, 0x0808, 0x00d9,
0x0108, 0x00c9, 0x012e, 0x9006, 0x00ee, 0x00fe, 0x0005, 0x0036,
- 0x0046, 0xab38, 0xac34, 0x080c, 0x1f90, 0x004e, 0x003e, 0x0d30,
+ 0x0046, 0xab38, 0xac34, 0x080c, 0x1fd8, 0x004e, 0x003e, 0x0d30,
0x0c98, 0x9085, 0x0001, 0x0c80, 0x2009, 0x0306, 0x200b, 0x4800,
0x7027, 0x0000, 0x0005, 0x0076, 0x0066, 0x0056, 0x0046, 0x0036,
- 0x0026, 0x8aff, 0x0904, 0x1d47, 0x700c, 0x7214, 0x923a, 0x7010,
- 0x7218, 0x9203, 0x0a04, 0x1d46, 0x9705, 0x0904, 0x1d46, 0x903e,
- 0x2730, 0xa884, 0xd0fc, 0x1190, 0x2d00, 0x0002, 0x1cd6, 0x1c16,
- 0x1c16, 0x1cd6, 0x1cd6, 0x1cb3, 0x1cd6, 0x1c16, 0x1cba, 0x1c65,
- 0x1c65, 0x1cd6, 0x1cd6, 0x1cd6, 0x1cad, 0x1c65, 0xc0fc, 0xa886,
- 0xab2c, 0xaa30, 0xad1c, 0xac20, 0xdd9c, 0x0904, 0x1cd8, 0x2c05,
- 0x908a, 0x0035, 0x1a0c, 0x0dc4, 0x9082, 0x001c, 0x0002, 0x1c02,
- 0x1c00, 0x1c00, 0x1c00, 0x1c00, 0x1c00, 0x1c06, 0x1c00, 0x1c00,
- 0x1c00, 0x1c00, 0x1c00, 0x1c0a, 0x1c00, 0x1c00, 0x1c00, 0x1c00,
- 0x1c00, 0x1c0e, 0x1c00, 0x1c00, 0x1c00, 0x1c00, 0x1c00, 0x1c12,
- 0x080c, 0x0dc4, 0xa778, 0xa67c, 0x0804, 0x1cd8, 0xa790, 0xa694,
- 0x0804, 0x1cd8, 0xa7a8, 0xa6ac, 0x0804, 0x1cd8, 0xa7c0, 0xa6c4,
- 0x0804, 0x1cd8, 0xa7d8, 0xa6dc, 0x0804, 0x1cd8, 0x2c05, 0x908a,
- 0x0037, 0x1a0c, 0x0dc4, 0x9082, 0x001c, 0x0002, 0x1c39, 0x1c39,
- 0x1c3b, 0x1c39, 0x1c39, 0x1c39, 0x1c41, 0x1c39, 0x1c39, 0x1c39,
- 0x1c47, 0x1c39, 0x1c39, 0x1c39, 0x1c4d, 0x1c39, 0x1c39, 0x1c39,
- 0x1c53, 0x1c39, 0x1c39, 0x1c39, 0x1c59, 0x1c39, 0x1c39, 0x1c39,
- 0x1c5f, 0x080c, 0x0dc4, 0xa578, 0xa47c, 0xa380, 0xa284, 0x0804,
- 0x1cd8, 0xa588, 0xa48c, 0xa390, 0xa294, 0x0804, 0x1cd8, 0xa598,
- 0xa49c, 0xa3a0, 0xa2a4, 0x0804, 0x1cd8, 0xa5a8, 0xa4ac, 0xa3b0,
- 0xa2b4, 0x0804, 0x1cd8, 0xa5b8, 0xa4bc, 0xa3c0, 0xa2c4, 0x0804,
- 0x1cd8, 0xa5c8, 0xa4cc, 0xa3d0, 0xa2d4, 0x0804, 0x1cd8, 0xa5d8,
- 0xa4dc, 0xa3e0, 0xa2e4, 0x0804, 0x1cd8, 0x2c05, 0x908a, 0x0035,
- 0x1a0c, 0x0dc4, 0x9082, 0x001c, 0x0002, 0x1c88, 0x1c86, 0x1c86,
- 0x1c86, 0x1c86, 0x1c86, 0x1c90, 0x1c86, 0x1c86, 0x1c86, 0x1c86,
- 0x1c86, 0x1c98, 0x1c86, 0x1c86, 0x1c86, 0x1c86, 0x1c86, 0x1c9f,
- 0x1c86, 0x1c86, 0x1c86, 0x1c86, 0x1c86, 0x1ca6, 0x080c, 0x0dc4,
- 0xa570, 0xa474, 0xa778, 0xa67c, 0xa380, 0xa284, 0x0804, 0x1cd8,
- 0xa588, 0xa48c, 0xa790, 0xa694, 0xa398, 0xa29c, 0x0804, 0x1cd8,
+ 0x0026, 0x8aff, 0x0904, 0x1d8f, 0x700c, 0x7214, 0x923a, 0x7010,
+ 0x7218, 0x9203, 0x0a04, 0x1d8e, 0x9705, 0x0904, 0x1d8e, 0x903e,
+ 0x2730, 0xa884, 0xd0fc, 0x1190, 0x2d00, 0x0002, 0x1d1e, 0x1c5e,
+ 0x1c5e, 0x1d1e, 0x1d1e, 0x1cfb, 0x1d1e, 0x1c5e, 0x1d02, 0x1cad,
+ 0x1cad, 0x1d1e, 0x1d1e, 0x1d1e, 0x1cf5, 0x1cad, 0xc0fc, 0xa886,
+ 0xab2c, 0xaa30, 0xad1c, 0xac20, 0xdd9c, 0x0904, 0x1d20, 0x2c05,
+ 0x908a, 0x0035, 0x1a0c, 0x0dc3, 0x9082, 0x001c, 0x0002, 0x1c4a,
+ 0x1c48, 0x1c48, 0x1c48, 0x1c48, 0x1c48, 0x1c4e, 0x1c48, 0x1c48,
+ 0x1c48, 0x1c48, 0x1c48, 0x1c52, 0x1c48, 0x1c48, 0x1c48, 0x1c48,
+ 0x1c48, 0x1c56, 0x1c48, 0x1c48, 0x1c48, 0x1c48, 0x1c48, 0x1c5a,
+ 0x080c, 0x0dc3, 0xa778, 0xa67c, 0x0804, 0x1d20, 0xa790, 0xa694,
+ 0x0804, 0x1d20, 0xa7a8, 0xa6ac, 0x0804, 0x1d20, 0xa7c0, 0xa6c4,
+ 0x0804, 0x1d20, 0xa7d8, 0xa6dc, 0x0804, 0x1d20, 0x2c05, 0x908a,
+ 0x0037, 0x1a0c, 0x0dc3, 0x9082, 0x001c, 0x0002, 0x1c81, 0x1c81,
+ 0x1c83, 0x1c81, 0x1c81, 0x1c81, 0x1c89, 0x1c81, 0x1c81, 0x1c81,
+ 0x1c8f, 0x1c81, 0x1c81, 0x1c81, 0x1c95, 0x1c81, 0x1c81, 0x1c81,
+ 0x1c9b, 0x1c81, 0x1c81, 0x1c81, 0x1ca1, 0x1c81, 0x1c81, 0x1c81,
+ 0x1ca7, 0x080c, 0x0dc3, 0xa578, 0xa47c, 0xa380, 0xa284, 0x0804,
+ 0x1d20, 0xa588, 0xa48c, 0xa390, 0xa294, 0x0804, 0x1d20, 0xa598,
+ 0xa49c, 0xa3a0, 0xa2a4, 0x0804, 0x1d20, 0xa5a8, 0xa4ac, 0xa3b0,
+ 0xa2b4, 0x0804, 0x1d20, 0xa5b8, 0xa4bc, 0xa3c0, 0xa2c4, 0x0804,
+ 0x1d20, 0xa5c8, 0xa4cc, 0xa3d0, 0xa2d4, 0x0804, 0x1d20, 0xa5d8,
+ 0xa4dc, 0xa3e0, 0xa2e4, 0x0804, 0x1d20, 0x2c05, 0x908a, 0x0035,
+ 0x1a0c, 0x0dc3, 0x9082, 0x001c, 0x0002, 0x1cd0, 0x1cce, 0x1cce,
+ 0x1cce, 0x1cce, 0x1cce, 0x1cd8, 0x1cce, 0x1cce, 0x1cce, 0x1cce,
+ 0x1cce, 0x1ce0, 0x1cce, 0x1cce, 0x1cce, 0x1cce, 0x1cce, 0x1ce7,
+ 0x1cce, 0x1cce, 0x1cce, 0x1cce, 0x1cce, 0x1cee, 0x080c, 0x0dc3,
+ 0xa570, 0xa474, 0xa778, 0xa67c, 0xa380, 0xa284, 0x0804, 0x1d20,
+ 0xa588, 0xa48c, 0xa790, 0xa694, 0xa398, 0xa29c, 0x0804, 0x1d20,
0xa5a0, 0xa4a4, 0xa7a8, 0xa6ac, 0xa3b0, 0xa2b4, 0x04c8, 0xa5b8,
0xa4bc, 0xa7c0, 0xa6c4, 0xa3c8, 0xa2cc, 0x0490, 0xa5d0, 0xa4d4,
0xa7d8, 0xa6dc, 0xa3e0, 0xa2e4, 0x0458, 0xa868, 0x9084, 0x00ff,
- 0x9086, 0x001e, 0x1518, 0x080c, 0x1f28, 0x1904, 0x1bb1, 0x900e,
- 0x0804, 0x1d47, 0xab68, 0x939c, 0x00ff, 0x9386, 0x0048, 0x1180,
+ 0x9086, 0x001e, 0x1518, 0x080c, 0x1f70, 0x1904, 0x1bf9, 0x900e,
+ 0x0804, 0x1d8f, 0xab68, 0x939c, 0x00ff, 0x9386, 0x0048, 0x1180,
0x00c6, 0x7004, 0x2060, 0x6004, 0x9086, 0x0043, 0x00ce, 0x0904,
- 0x1c65, 0xaba0, 0x9016, 0xad90, 0xac94, 0xaf98, 0xae9c, 0x0040,
- 0x9386, 0x0008, 0x0904, 0x1c65, 0x080c, 0x0dc4, 0x080c, 0x0dc4,
+ 0x1cad, 0xaba0, 0x9016, 0xad90, 0xac94, 0xaf98, 0xae9c, 0x0040,
+ 0x9386, 0x0008, 0x0904, 0x1cad, 0x080c, 0x0dc3, 0x080c, 0x0dc3,
0x2009, 0x030f, 0x2104, 0xd0fc, 0x0538, 0x0066, 0x2009, 0x0306,
0x2134, 0x200b, 0x4000, 0x2104, 0x9084, 0x0030, 0x15b8, 0x2031,
0x1000, 0x2600, 0x9302, 0x928b, 0x0000, 0xa82e, 0xa932, 0x0278,
@@ -711,169 +720,169 @@ static const uint16_t isp_2300_risc_code[] = {
0x0000, 0xa833, 0x0000, 0x006e, 0x7b12, 0x7a16, 0x7d02, 0x7c06,
0x7f0a, 0x7e0e, 0x782b, 0x0001, 0x7000, 0x8000, 0x7002, 0xa83c,
0x9300, 0xa83e, 0xa840, 0x9201, 0xa842, 0x700c, 0x9300, 0x700e,
- 0x7010, 0x9201, 0x7012, 0x080c, 0x1f28, 0x0448, 0xd6b4, 0x0110,
+ 0x7010, 0x9201, 0x7012, 0x080c, 0x1f70, 0x0448, 0xd6b4, 0x0110,
0x200b, 0x4040, 0x2031, 0x0080, 0x9584, 0x007f, 0x0108, 0x9632,
0x7124, 0x7000, 0x9086, 0x0000, 0x1198, 0xc185, 0x7126, 0x2009,
- 0x0306, 0x2104, 0xd0b4, 0x1904, 0x1ce9, 0x200b, 0x4040, 0x2009,
- 0x1a5e, 0x2104, 0x8000, 0x0a04, 0x1ce9, 0x200a, 0x0804, 0x1ce9,
- 0xc18d, 0x7126, 0xd184, 0x1d58, 0x0804, 0x1ce9, 0x9006, 0x002e,
- 0x003e, 0x004e, 0x005e, 0x006e, 0x007e, 0x0005, 0x080c, 0x0dc4,
+ 0x0306, 0x2104, 0xd0b4, 0x1904, 0x1d31, 0x200b, 0x4040, 0x2009,
+ 0x1a5e, 0x2104, 0x8000, 0x0a04, 0x1d31, 0x200a, 0x0804, 0x1d31,
+ 0xc18d, 0x7126, 0xd184, 0x1d58, 0x0804, 0x1d31, 0x9006, 0x002e,
+ 0x003e, 0x004e, 0x005e, 0x006e, 0x007e, 0x0005, 0x080c, 0x0dc3,
0x0026, 0x2001, 0x0105, 0x2003, 0x0010, 0x782b, 0x0004, 0x7003,
- 0x0000, 0x7004, 0x2060, 0x6014, 0x2048, 0x080c, 0xb955, 0x0118,
- 0xa884, 0xc0bd, 0xa886, 0x782c, 0xd0ac, 0x1de8, 0x080c, 0x1ba4,
+ 0x0000, 0x7004, 0x2060, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x0118,
+ 0xa884, 0xc0bd, 0xa886, 0x782c, 0xd0ac, 0x1de8, 0x080c, 0x1bec,
0x6020, 0x9086, 0x0006, 0x1180, 0x2061, 0x0100, 0x62c8, 0x2001,
0x00fa, 0x8001, 0x1df0, 0x60c8, 0x9206, 0x1dc0, 0x60c4, 0xa89e,
- 0x60c8, 0xa89a, 0x7004, 0x2060, 0x00c6, 0x080c, 0xb5c5, 0x00ce,
+ 0x60c8, 0xa89a, 0x7004, 0x2060, 0x00c6, 0x080c, 0xbde5, 0x00ce,
0x2001, 0x19d3, 0x2004, 0x9c06, 0x1160, 0x2009, 0x0040, 0x080c,
- 0x22b2, 0x080c, 0x9b40, 0x2011, 0x0000, 0x080c, 0x99e0, 0x080c,
- 0x8d06, 0x002e, 0x0804, 0x1ed8, 0x0126, 0x2091, 0x2400, 0xa858,
- 0x2040, 0x792c, 0x782b, 0x0002, 0x9184, 0x0700, 0x1904, 0x1d50,
- 0x7000, 0x0002, 0x1ed8, 0x1da6, 0x1e26, 0x1ed6, 0x8001, 0x7002,
- 0x7027, 0x0000, 0xd19c, 0x1158, 0x8aff, 0x0904, 0x1df3, 0x080c,
- 0x1bab, 0x0904, 0x1ed8, 0x080c, 0x1bab, 0x0804, 0x1ed8, 0x782b,
+ 0x22fa, 0x080c, 0x9e13, 0x2011, 0x0000, 0x080c, 0x9cb1, 0x080c,
+ 0x8f0e, 0x002e, 0x0804, 0x1f20, 0x0126, 0x2091, 0x2400, 0xa858,
+ 0x2040, 0x792c, 0x782b, 0x0002, 0x9184, 0x0700, 0x1904, 0x1d98,
+ 0x7000, 0x0002, 0x1f20, 0x1dee, 0x1e6e, 0x1f1e, 0x8001, 0x7002,
+ 0x7027, 0x0000, 0xd19c, 0x1158, 0x8aff, 0x0904, 0x1e3b, 0x080c,
+ 0x1bf3, 0x0904, 0x1f20, 0x080c, 0x1bf3, 0x0804, 0x1f20, 0x782b,
0x0004, 0xd194, 0x0148, 0xa884, 0xc0fc, 0xa886, 0x8aff, 0x1518,
0xa880, 0xc0f5, 0xa882, 0x00f8, 0x0026, 0x0036, 0xab3c, 0xaa40,
0x0016, 0x7910, 0xa82c, 0x9100, 0xa82e, 0x7914, 0xa830, 0x9101,
0xa832, 0x001e, 0x7810, 0x931a, 0x7814, 0x9213, 0x7800, 0xa81e,
- 0x7804, 0xa822, 0xab3e, 0xaa42, 0x003e, 0x002e, 0x080c, 0x1f43,
+ 0x7804, 0xa822, 0xab3e, 0xaa42, 0x003e, 0x002e, 0x080c, 0x1f8b,
0xa884, 0xc0fd, 0xa886, 0x2a00, 0xa816, 0x2800, 0xa85a, 0x2c00,
0xa812, 0x7003, 0x0000, 0x2009, 0x0306, 0x200b, 0x4800, 0x7027,
- 0x0000, 0x0804, 0x1ed8, 0x00f6, 0x0026, 0x781c, 0x0006, 0x7818,
+ 0x0000, 0x0804, 0x1f20, 0x00f6, 0x0026, 0x781c, 0x0006, 0x7818,
0x0006, 0x2079, 0x0100, 0x7a14, 0x9284, 0x1984, 0x9085, 0x0012,
- 0x7816, 0x0036, 0x2019, 0x1000, 0x8319, 0x090c, 0x0dc4, 0x7820,
+ 0x7816, 0x0036, 0x2019, 0x1000, 0x8319, 0x090c, 0x0dc3, 0x7820,
0xd0bc, 0x1dd0, 0x003e, 0x79c8, 0x000e, 0x9102, 0x001e, 0x0006,
0x0016, 0x79c4, 0x000e, 0x9103, 0x78c6, 0x000e, 0x78ca, 0x9284,
0x1984, 0x9085, 0x0012, 0x7816, 0x002e, 0x00fe, 0x782b, 0x0008,
- 0x7003, 0x0000, 0x080c, 0x1ba4, 0x0804, 0x1ed8, 0x8001, 0x7002,
+ 0x7003, 0x0000, 0x080c, 0x1bec, 0x0804, 0x1f20, 0x8001, 0x7002,
0x7024, 0x8004, 0x7026, 0xd194, 0x0170, 0x782c, 0xd0fc, 0x1904,
- 0x1d99, 0xd19c, 0x1904, 0x1ed4, 0x8aff, 0x0904, 0x1ed8, 0x080c,
- 0x1bab, 0x0804, 0x1ed8, 0x0026, 0x0036, 0xab3c, 0xaa40, 0x080c,
- 0x1f43, 0xdd9c, 0x1904, 0x1e93, 0x2c05, 0x908a, 0x0037, 0x1a0c,
- 0x0dc4, 0x9082, 0x001c, 0x0002, 0x1e67, 0x1e67, 0x1e69, 0x1e67,
- 0x1e67, 0x1e67, 0x1e6f, 0x1e67, 0x1e67, 0x1e67, 0x1e75, 0x1e67,
- 0x1e67, 0x1e67, 0x1e7b, 0x1e67, 0x1e67, 0x1e67, 0x1e81, 0x1e67,
- 0x1e67, 0x1e67, 0x1e87, 0x1e67, 0x1e67, 0x1e67, 0x1e8d, 0x080c,
- 0x0dc4, 0xa080, 0x931a, 0xa084, 0x9213, 0x0804, 0x1dc8, 0xa090,
- 0x931a, 0xa094, 0x9213, 0x0804, 0x1dc8, 0xa0a0, 0x931a, 0xa0a4,
- 0x9213, 0x0804, 0x1dc8, 0xa0b0, 0x931a, 0xa0b4, 0x9213, 0x0804,
- 0x1dc8, 0xa0c0, 0x931a, 0xa0c4, 0x9213, 0x0804, 0x1dc8, 0xa0d0,
- 0x931a, 0xa0d4, 0x9213, 0x0804, 0x1dc8, 0xa0e0, 0x931a, 0xa0e4,
- 0x9213, 0x0804, 0x1dc8, 0x2c05, 0x908a, 0x0035, 0x1a0c, 0x0dc4,
- 0x9082, 0x001c, 0x0002, 0x1eb6, 0x1eb4, 0x1eb4, 0x1eb4, 0x1eb4,
- 0x1eb4, 0x1ebc, 0x1eb4, 0x1eb4, 0x1eb4, 0x1eb4, 0x1eb4, 0x1ec2,
- 0x1eb4, 0x1eb4, 0x1eb4, 0x1eb4, 0x1eb4, 0x1ec8, 0x1eb4, 0x1eb4,
- 0x1eb4, 0x1eb4, 0x1eb4, 0x1ece, 0x080c, 0x0dc4, 0xa080, 0x931a,
- 0xa084, 0x9213, 0x0804, 0x1dc8, 0xa098, 0x931a, 0xa09c, 0x9213,
- 0x0804, 0x1dc8, 0xa0b0, 0x931a, 0xa0b4, 0x9213, 0x0804, 0x1dc8,
- 0xa0c8, 0x931a, 0xa0cc, 0x9213, 0x0804, 0x1dc8, 0xa0e0, 0x931a,
- 0xa0e4, 0x9213, 0x0804, 0x1dc8, 0x0804, 0x1dc4, 0x080c, 0x0dc4,
+ 0x1de1, 0xd19c, 0x1904, 0x1f1c, 0x8aff, 0x0904, 0x1f20, 0x080c,
+ 0x1bf3, 0x0804, 0x1f20, 0x0026, 0x0036, 0xab3c, 0xaa40, 0x080c,
+ 0x1f8b, 0xdd9c, 0x1904, 0x1edb, 0x2c05, 0x908a, 0x0037, 0x1a0c,
+ 0x0dc3, 0x9082, 0x001c, 0x0002, 0x1eaf, 0x1eaf, 0x1eb1, 0x1eaf,
+ 0x1eaf, 0x1eaf, 0x1eb7, 0x1eaf, 0x1eaf, 0x1eaf, 0x1ebd, 0x1eaf,
+ 0x1eaf, 0x1eaf, 0x1ec3, 0x1eaf, 0x1eaf, 0x1eaf, 0x1ec9, 0x1eaf,
+ 0x1eaf, 0x1eaf, 0x1ecf, 0x1eaf, 0x1eaf, 0x1eaf, 0x1ed5, 0x080c,
+ 0x0dc3, 0xa080, 0x931a, 0xa084, 0x9213, 0x0804, 0x1e10, 0xa090,
+ 0x931a, 0xa094, 0x9213, 0x0804, 0x1e10, 0xa0a0, 0x931a, 0xa0a4,
+ 0x9213, 0x0804, 0x1e10, 0xa0b0, 0x931a, 0xa0b4, 0x9213, 0x0804,
+ 0x1e10, 0xa0c0, 0x931a, 0xa0c4, 0x9213, 0x0804, 0x1e10, 0xa0d0,
+ 0x931a, 0xa0d4, 0x9213, 0x0804, 0x1e10, 0xa0e0, 0x931a, 0xa0e4,
+ 0x9213, 0x0804, 0x1e10, 0x2c05, 0x908a, 0x0035, 0x1a0c, 0x0dc3,
+ 0x9082, 0x001c, 0x0002, 0x1efe, 0x1efc, 0x1efc, 0x1efc, 0x1efc,
+ 0x1efc, 0x1f04, 0x1efc, 0x1efc, 0x1efc, 0x1efc, 0x1efc, 0x1f0a,
+ 0x1efc, 0x1efc, 0x1efc, 0x1efc, 0x1efc, 0x1f10, 0x1efc, 0x1efc,
+ 0x1efc, 0x1efc, 0x1efc, 0x1f16, 0x080c, 0x0dc3, 0xa080, 0x931a,
+ 0xa084, 0x9213, 0x0804, 0x1e10, 0xa098, 0x931a, 0xa09c, 0x9213,
+ 0x0804, 0x1e10, 0xa0b0, 0x931a, 0xa0b4, 0x9213, 0x0804, 0x1e10,
+ 0xa0c8, 0x931a, 0xa0cc, 0x9213, 0x0804, 0x1e10, 0xa0e0, 0x931a,
+ 0xa0e4, 0x9213, 0x0804, 0x1e10, 0x0804, 0x1e0c, 0x080c, 0x0dc3,
0x012e, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a44, 0x7000, 0x9086,
- 0x0000, 0x0904, 0x1f23, 0x2079, 0x0090, 0x2009, 0x0207, 0x210c,
+ 0x0000, 0x0904, 0x1f6b, 0x2079, 0x0090, 0x2009, 0x0207, 0x210c,
0xd194, 0x01b8, 0x2009, 0x020c, 0x210c, 0x9184, 0x0003, 0x0188,
- 0x080c, 0xd379, 0x2001, 0x0133, 0x2004, 0x9005, 0x090c, 0x0dc4,
- 0x0016, 0x2009, 0x0040, 0x080c, 0x22b2, 0x001e, 0x2001, 0x020c,
+ 0x080c, 0xe106, 0x2001, 0x0133, 0x2004, 0x9005, 0x090c, 0x0dc3,
+ 0x0016, 0x2009, 0x0040, 0x080c, 0x22fa, 0x001e, 0x2001, 0x020c,
0x2102, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106,
- 0x1120, 0x2009, 0x0040, 0x080c, 0x22b2, 0x782c, 0xd0fc, 0x09a8,
- 0x080c, 0x1d94, 0x7000, 0x9086, 0x0000, 0x1978, 0x782b, 0x0004,
- 0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c, 0x22b2, 0x782b,
- 0x0002, 0x7003, 0x0000, 0x080c, 0x1ba4, 0x00ee, 0x00fe, 0x0005,
+ 0x1120, 0x2009, 0x0040, 0x080c, 0x22fa, 0x782c, 0xd0fc, 0x09a8,
+ 0x080c, 0x1ddc, 0x7000, 0x9086, 0x0000, 0x1978, 0x782b, 0x0004,
+ 0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c, 0x22fa, 0x782b,
+ 0x0002, 0x7003, 0x0000, 0x080c, 0x1bec, 0x00ee, 0x00fe, 0x0005,
0xa884, 0xd0fc, 0x11a8, 0x8c60, 0x2c05, 0x9005, 0x0110, 0x8a51,
0x0005, 0xa004, 0x9005, 0x0168, 0xa85a, 0x2040, 0xa068, 0x9084,
- 0x000f, 0x9080, 0x1f70, 0x2065, 0x8cff, 0x090c, 0x0dc4, 0x8a51,
+ 0x000f, 0x9080, 0x1fb8, 0x2065, 0x8cff, 0x090c, 0x0dc3, 0x8a51,
0x0005, 0x2050, 0x0005, 0xa884, 0xd0fc, 0x11b8, 0x8a50, 0x8c61,
0x2c05, 0x9005, 0x1190, 0x2800, 0x9906, 0x0120, 0xa000, 0x9005,
0x1108, 0x2900, 0x2040, 0xa85a, 0xa068, 0x9084, 0x000f, 0x9080,
- 0x1f80, 0x2065, 0x8cff, 0x090c, 0x0dc4, 0x0005, 0x0000, 0x001e,
+ 0x1fc8, 0x2065, 0x8cff, 0x090c, 0x0dc3, 0x0005, 0x0000, 0x001e,
0x0022, 0x0026, 0x002a, 0x002e, 0x0032, 0x0036, 0x0000, 0x001c,
0x0022, 0x0028, 0x002e, 0x0034, 0x0000, 0x0000, 0x0024, 0x0000,
- 0x0000, 0x1f63, 0x1f5f, 0x0000, 0x0000, 0x1f6d, 0x0000, 0x1f63,
- 0x1f6a, 0x1f6a, 0x1f67, 0x0000, 0x0000, 0x0000, 0x1f6d, 0x1f6a,
- 0x0000, 0x1f65, 0x1f65, 0x0000, 0x0000, 0x1f6d, 0x0000, 0x1f65,
- 0x1f6b, 0x1f6b, 0x1f6b, 0x0000, 0x0000, 0x0000, 0x1f6d, 0x1f6b,
+ 0x0000, 0x1fab, 0x1fa7, 0x0000, 0x0000, 0x1fb5, 0x0000, 0x1fab,
+ 0x1fb2, 0x1fb2, 0x1faf, 0x0000, 0x0000, 0x0000, 0x1fb5, 0x1fb2,
+ 0x0000, 0x1fad, 0x1fad, 0x0000, 0x0000, 0x1fb5, 0x0000, 0x1fad,
+ 0x1fb3, 0x1fb3, 0x1fb3, 0x0000, 0x0000, 0x0000, 0x1fb5, 0x1fb3,
0x00c6, 0x00d6, 0x0086, 0xab42, 0xac3e, 0xa88c, 0x9055, 0x0904,
- 0x216f, 0x2940, 0xa068, 0x90ec, 0x000f, 0x9084, 0x00ff, 0x9086,
- 0x0008, 0x1118, 0x2061, 0x1f6b, 0x00d0, 0x9de0, 0x1f70, 0x9d86,
+ 0x21b7, 0x2940, 0xa068, 0x90ec, 0x000f, 0x9084, 0x00ff, 0x9086,
+ 0x0008, 0x1118, 0x2061, 0x1fb3, 0x00d0, 0x9de0, 0x1fb8, 0x9d86,
0x0007, 0x0130, 0x9d86, 0x000e, 0x0118, 0x9d86, 0x000f, 0x1120,
0xa090, 0x9422, 0xa094, 0x931b, 0x2c05, 0x9065, 0x1140, 0x0310,
- 0x0804, 0x216f, 0xa004, 0x9045, 0x0904, 0x216f, 0x08d8, 0x2c05,
- 0x9005, 0x0904, 0x2057, 0xdd9c, 0x1904, 0x2013, 0x908a, 0x0037,
- 0x1a0c, 0x0dc4, 0x9082, 0x001c, 0x0002, 0x1fe8, 0x1fe8, 0x1fea,
- 0x1fe8, 0x1fe8, 0x1fe8, 0x1ff0, 0x1fe8, 0x1fe8, 0x1fe8, 0x1ff6,
- 0x1fe8, 0x1fe8, 0x1fe8, 0x1ffc, 0x1fe8, 0x1fe8, 0x1fe8, 0x2002,
- 0x1fe8, 0x1fe8, 0x1fe8, 0x2008, 0x1fe8, 0x1fe8, 0x1fe8, 0x200e,
- 0x080c, 0x0dc4, 0xa080, 0x9422, 0xa084, 0x931b, 0x0804, 0x204d,
- 0xa090, 0x9422, 0xa094, 0x931b, 0x0804, 0x204d, 0xa0a0, 0x9422,
- 0xa0a4, 0x931b, 0x0804, 0x204d, 0xa0b0, 0x9422, 0xa0b4, 0x931b,
- 0x0804, 0x204d, 0xa0c0, 0x9422, 0xa0c4, 0x931b, 0x0804, 0x204d,
- 0xa0d0, 0x9422, 0xa0d4, 0x931b, 0x0804, 0x204d, 0xa0e0, 0x9422,
- 0xa0e4, 0x931b, 0x04d0, 0x908a, 0x0035, 0x1a0c, 0x0dc4, 0x9082,
- 0x001c, 0x0002, 0x2035, 0x2033, 0x2033, 0x2033, 0x2033, 0x2033,
- 0x203a, 0x2033, 0x2033, 0x2033, 0x2033, 0x2033, 0x203f, 0x2033,
- 0x2033, 0x2033, 0x2033, 0x2033, 0x2044, 0x2033, 0x2033, 0x2033,
- 0x2033, 0x2033, 0x2049, 0x080c, 0x0dc4, 0xa080, 0x9422, 0xa084,
+ 0x0804, 0x21b7, 0xa004, 0x9045, 0x0904, 0x21b7, 0x08d8, 0x2c05,
+ 0x9005, 0x0904, 0x209f, 0xdd9c, 0x1904, 0x205b, 0x908a, 0x0037,
+ 0x1a0c, 0x0dc3, 0x9082, 0x001c, 0x0002, 0x2030, 0x2030, 0x2032,
+ 0x2030, 0x2030, 0x2030, 0x2038, 0x2030, 0x2030, 0x2030, 0x203e,
+ 0x2030, 0x2030, 0x2030, 0x2044, 0x2030, 0x2030, 0x2030, 0x204a,
+ 0x2030, 0x2030, 0x2030, 0x2050, 0x2030, 0x2030, 0x2030, 0x2056,
+ 0x080c, 0x0dc3, 0xa080, 0x9422, 0xa084, 0x931b, 0x0804, 0x2095,
+ 0xa090, 0x9422, 0xa094, 0x931b, 0x0804, 0x2095, 0xa0a0, 0x9422,
+ 0xa0a4, 0x931b, 0x0804, 0x2095, 0xa0b0, 0x9422, 0xa0b4, 0x931b,
+ 0x0804, 0x2095, 0xa0c0, 0x9422, 0xa0c4, 0x931b, 0x0804, 0x2095,
+ 0xa0d0, 0x9422, 0xa0d4, 0x931b, 0x0804, 0x2095, 0xa0e0, 0x9422,
+ 0xa0e4, 0x931b, 0x04d0, 0x908a, 0x0035, 0x1a0c, 0x0dc3, 0x9082,
+ 0x001c, 0x0002, 0x207d, 0x207b, 0x207b, 0x207b, 0x207b, 0x207b,
+ 0x2082, 0x207b, 0x207b, 0x207b, 0x207b, 0x207b, 0x2087, 0x207b,
+ 0x207b, 0x207b, 0x207b, 0x207b, 0x208c, 0x207b, 0x207b, 0x207b,
+ 0x207b, 0x207b, 0x2091, 0x080c, 0x0dc3, 0xa080, 0x9422, 0xa084,
0x931b, 0x0098, 0xa098, 0x9422, 0xa09c, 0x931b, 0x0070, 0xa0b0,
0x9422, 0xa0b4, 0x931b, 0x0048, 0xa0c8, 0x9422, 0xa0cc, 0x931b,
0x0020, 0xa0e0, 0x9422, 0xa0e4, 0x931b, 0x0630, 0x2300, 0x9405,
- 0x0160, 0x8a51, 0x0904, 0x216f, 0x8c60, 0x0804, 0x1fbf, 0xa004,
- 0x9045, 0x0904, 0x216f, 0x0804, 0x1f9a, 0x8a51, 0x0904, 0x216f,
- 0x8c60, 0x2c05, 0x9005, 0x1158, 0xa004, 0x9045, 0x0904, 0x216f,
- 0xa068, 0x90ec, 0x000f, 0x9de0, 0x1f70, 0x2c05, 0x2060, 0xa884,
- 0xc0fc, 0xa886, 0x0804, 0x2164, 0x2c05, 0x8422, 0x8420, 0x831a,
- 0x9399, 0x0000, 0xac2e, 0xab32, 0xdd9c, 0x1904, 0x2101, 0x9082,
- 0x001c, 0x0002, 0x209d, 0x209d, 0x209f, 0x209d, 0x209d, 0x209d,
- 0x20ad, 0x209d, 0x209d, 0x209d, 0x20bb, 0x209d, 0x209d, 0x209d,
- 0x20c9, 0x209d, 0x209d, 0x209d, 0x20d7, 0x209d, 0x209d, 0x209d,
- 0x20e5, 0x209d, 0x209d, 0x209d, 0x20f3, 0x080c, 0x0dc4, 0xa180,
- 0x2400, 0x9122, 0xa184, 0x2300, 0x911b, 0x0a0c, 0x0dc4, 0xa078,
- 0x9420, 0xa07c, 0x9319, 0x0804, 0x215f, 0xa190, 0x2400, 0x9122,
- 0xa194, 0x2300, 0x911b, 0x0a0c, 0x0dc4, 0xa088, 0x9420, 0xa08c,
- 0x9319, 0x0804, 0x215f, 0xa1a0, 0x2400, 0x9122, 0xa1a4, 0x2300,
- 0x911b, 0x0a0c, 0x0dc4, 0xa098, 0x9420, 0xa09c, 0x9319, 0x0804,
- 0x215f, 0xa1b0, 0x2400, 0x9122, 0xa1b4, 0x2300, 0x911b, 0x0a0c,
- 0x0dc4, 0xa0a8, 0x9420, 0xa0ac, 0x9319, 0x0804, 0x215f, 0xa1c0,
- 0x2400, 0x9122, 0xa1c4, 0x2300, 0x911b, 0x0a0c, 0x0dc4, 0xa0b8,
- 0x9420, 0xa0bc, 0x9319, 0x0804, 0x215f, 0xa1d0, 0x2400, 0x9122,
- 0xa1d4, 0x2300, 0x911b, 0x0a0c, 0x0dc4, 0xa0c8, 0x9420, 0xa0cc,
- 0x9319, 0x0804, 0x215f, 0xa1e0, 0x2400, 0x9122, 0xa1e4, 0x2300,
- 0x911b, 0x0a0c, 0x0dc4, 0xa0d8, 0x9420, 0xa0dc, 0x9319, 0x0804,
- 0x215f, 0x9082, 0x001c, 0x0002, 0x211f, 0x211d, 0x211d, 0x211d,
- 0x211d, 0x211d, 0x212c, 0x211d, 0x211d, 0x211d, 0x211d, 0x211d,
- 0x2139, 0x211d, 0x211d, 0x211d, 0x211d, 0x211d, 0x2146, 0x211d,
- 0x211d, 0x211d, 0x211d, 0x211d, 0x2153, 0x080c, 0x0dc4, 0xa180,
- 0x2400, 0x9122, 0xa184, 0x2300, 0x911b, 0x0a0c, 0x0dc4, 0xa070,
+ 0x0160, 0x8a51, 0x0904, 0x21b7, 0x8c60, 0x0804, 0x2007, 0xa004,
+ 0x9045, 0x0904, 0x21b7, 0x0804, 0x1fe2, 0x8a51, 0x0904, 0x21b7,
+ 0x8c60, 0x2c05, 0x9005, 0x1158, 0xa004, 0x9045, 0x0904, 0x21b7,
+ 0xa068, 0x90ec, 0x000f, 0x9de0, 0x1fb8, 0x2c05, 0x2060, 0xa884,
+ 0xc0fc, 0xa886, 0x0804, 0x21ac, 0x2c05, 0x8422, 0x8420, 0x831a,
+ 0x9399, 0x0000, 0xac2e, 0xab32, 0xdd9c, 0x1904, 0x2149, 0x9082,
+ 0x001c, 0x0002, 0x20e5, 0x20e5, 0x20e7, 0x20e5, 0x20e5, 0x20e5,
+ 0x20f5, 0x20e5, 0x20e5, 0x20e5, 0x2103, 0x20e5, 0x20e5, 0x20e5,
+ 0x2111, 0x20e5, 0x20e5, 0x20e5, 0x211f, 0x20e5, 0x20e5, 0x20e5,
+ 0x212d, 0x20e5, 0x20e5, 0x20e5, 0x213b, 0x080c, 0x0dc3, 0xa180,
+ 0x2400, 0x9122, 0xa184, 0x2300, 0x911b, 0x0a0c, 0x0dc3, 0xa078,
+ 0x9420, 0xa07c, 0x9319, 0x0804, 0x21a7, 0xa190, 0x2400, 0x9122,
+ 0xa194, 0x2300, 0x911b, 0x0a0c, 0x0dc3, 0xa088, 0x9420, 0xa08c,
+ 0x9319, 0x0804, 0x21a7, 0xa1a0, 0x2400, 0x9122, 0xa1a4, 0x2300,
+ 0x911b, 0x0a0c, 0x0dc3, 0xa098, 0x9420, 0xa09c, 0x9319, 0x0804,
+ 0x21a7, 0xa1b0, 0x2400, 0x9122, 0xa1b4, 0x2300, 0x911b, 0x0a0c,
+ 0x0dc3, 0xa0a8, 0x9420, 0xa0ac, 0x9319, 0x0804, 0x21a7, 0xa1c0,
+ 0x2400, 0x9122, 0xa1c4, 0x2300, 0x911b, 0x0a0c, 0x0dc3, 0xa0b8,
+ 0x9420, 0xa0bc, 0x9319, 0x0804, 0x21a7, 0xa1d0, 0x2400, 0x9122,
+ 0xa1d4, 0x2300, 0x911b, 0x0a0c, 0x0dc3, 0xa0c8, 0x9420, 0xa0cc,
+ 0x9319, 0x0804, 0x21a7, 0xa1e0, 0x2400, 0x9122, 0xa1e4, 0x2300,
+ 0x911b, 0x0a0c, 0x0dc3, 0xa0d8, 0x9420, 0xa0dc, 0x9319, 0x0804,
+ 0x21a7, 0x9082, 0x001c, 0x0002, 0x2167, 0x2165, 0x2165, 0x2165,
+ 0x2165, 0x2165, 0x2174, 0x2165, 0x2165, 0x2165, 0x2165, 0x2165,
+ 0x2181, 0x2165, 0x2165, 0x2165, 0x2165, 0x2165, 0x218e, 0x2165,
+ 0x2165, 0x2165, 0x2165, 0x2165, 0x219b, 0x080c, 0x0dc3, 0xa180,
+ 0x2400, 0x9122, 0xa184, 0x2300, 0x911b, 0x0a0c, 0x0dc3, 0xa070,
0x9420, 0xa074, 0x9319, 0x0498, 0xa198, 0x2400, 0x9122, 0xa19c,
- 0x2300, 0x911b, 0x0a0c, 0x0dc4, 0xa088, 0x9420, 0xa08c, 0x9319,
+ 0x2300, 0x911b, 0x0a0c, 0x0dc3, 0xa088, 0x9420, 0xa08c, 0x9319,
0x0430, 0xa1b0, 0x2400, 0x9122, 0xa1b4, 0x2300, 0x911b, 0x0a0c,
- 0x0dc4, 0xa0a0, 0x9420, 0xa0a4, 0x9319, 0x00c8, 0xa1c8, 0x2400,
- 0x9122, 0xa1cc, 0x2300, 0x911b, 0x0a0c, 0x0dc4, 0xa0b8, 0x9420,
+ 0x0dc3, 0xa0a0, 0x9420, 0xa0a4, 0x9319, 0x00c8, 0xa1c8, 0x2400,
+ 0x9122, 0xa1cc, 0x2300, 0x911b, 0x0a0c, 0x0dc3, 0xa0b8, 0x9420,
0xa0bc, 0x9319, 0x0060, 0xa1e0, 0x2400, 0x9122, 0xa1e4, 0x2300,
- 0x911b, 0x0a0c, 0x0dc4, 0xa0d0, 0x9420, 0xa0d4, 0x9319, 0xac1e,
+ 0x911b, 0x0a0c, 0x0dc3, 0xa0d0, 0x9420, 0xa0d4, 0x9319, 0xac1e,
0xab22, 0xa884, 0xc0fd, 0xa886, 0x2800, 0xa85a, 0x2c00, 0xa812,
0x2a00, 0xa816, 0x000e, 0x000e, 0x000e, 0x9006, 0x0028, 0x008e,
0x00de, 0x00ce, 0x9085, 0x0001, 0x0005, 0x2001, 0x0005, 0x2004,
- 0xd0bc, 0x190c, 0x0dbd, 0x9084, 0x0007, 0x0002, 0x2190, 0x1d94,
- 0x2190, 0x2186, 0x2189, 0x218c, 0x2189, 0x218c, 0x080c, 0x1d94,
- 0x0005, 0x080c, 0x11a7, 0x0005, 0x080c, 0x1d94, 0x080c, 0x11a7,
+ 0xd0bc, 0x190c, 0x0dbc, 0x9084, 0x0007, 0x0002, 0x21d8, 0x1ddc,
+ 0x21d8, 0x21ce, 0x21d1, 0x21d4, 0x21d1, 0x21d4, 0x080c, 0x1ddc,
+ 0x0005, 0x080c, 0x11b3, 0x0005, 0x080c, 0x1ddc, 0x080c, 0x11b3,
0x0005, 0x0126, 0x2091, 0x2600, 0x2079, 0x0200, 0x2071, 0x0260,
0x2069, 0x1800, 0x7817, 0x0000, 0x789b, 0x0814, 0x78a3, 0x0406,
0x789f, 0x0410, 0x2009, 0x013b, 0x200b, 0x0400, 0x781b, 0x0002,
0x783b, 0x001f, 0x7837, 0x0020, 0x7803, 0x1600, 0x012e, 0x0005,
- 0x2091, 0x2600, 0x781c, 0xd0a4, 0x1904, 0x22af, 0x7900, 0xd1dc,
- 0x1118, 0x9084, 0x0006, 0x001a, 0x9084, 0x000e, 0x0002, 0x21d7,
- 0x21cf, 0x7c74, 0x21cf, 0x21d1, 0x21d1, 0x21d1, 0x21d1, 0x7c5a,
- 0x21cf, 0x21d3, 0x21cf, 0x21d1, 0x21cf, 0x21d1, 0x21cf, 0x080c,
- 0x0dc4, 0x0031, 0x0020, 0x080c, 0x7c5a, 0x080c, 0x7c74, 0x0005,
- 0x0006, 0x0016, 0x0026, 0x080c, 0xd379, 0x7930, 0x9184, 0x0003,
+ 0x2091, 0x2600, 0x781c, 0xd0a4, 0x1904, 0x22f7, 0x7900, 0xd1dc,
+ 0x1118, 0x9084, 0x0006, 0x001a, 0x9084, 0x000e, 0x0002, 0x221f,
+ 0x2217, 0x7d14, 0x2217, 0x2219, 0x2219, 0x2219, 0x2219, 0x7cfa,
+ 0x2217, 0x221b, 0x2217, 0x2219, 0x2217, 0x2219, 0x2217, 0x080c,
+ 0x0dc3, 0x0031, 0x0020, 0x080c, 0x7cfa, 0x080c, 0x7d14, 0x0005,
+ 0x0006, 0x0016, 0x0026, 0x080c, 0xe106, 0x7930, 0x9184, 0x0003,
0x01c0, 0x2001, 0x19d3, 0x2004, 0x9005, 0x0170, 0x2001, 0x0133,
- 0x2004, 0x9005, 0x090c, 0x0dc4, 0x00c6, 0x2001, 0x19d3, 0x2064,
- 0x080c, 0xb5c5, 0x00ce, 0x00f8, 0x2009, 0x0040, 0x080c, 0x22b2,
+ 0x2004, 0x9005, 0x090c, 0x0dc3, 0x00c6, 0x2001, 0x19d3, 0x2064,
+ 0x080c, 0xbde5, 0x00ce, 0x00f8, 0x2009, 0x0040, 0x080c, 0x22fa,
0x00d0, 0x9184, 0x0014, 0x01a0, 0x6a00, 0x9286, 0x0003, 0x0160,
- 0x080c, 0x72e5, 0x1138, 0x080c, 0x75dc, 0x080c, 0x5ef6, 0x080c,
- 0x7212, 0x0010, 0x080c, 0x5db5, 0x080c, 0x7d18, 0x0041, 0x0018,
+ 0x080c, 0x7351, 0x1138, 0x080c, 0x764c, 0x080c, 0x5fb3, 0x080c,
+ 0x727e, 0x0010, 0x080c, 0x5e72, 0x080c, 0x7dc3, 0x0041, 0x0018,
0x9184, 0x9540, 0x1dc8, 0x002e, 0x001e, 0x000e, 0x0005, 0x00e6,
- 0x0036, 0x0046, 0x0056, 0x2071, 0x1a41, 0x080c, 0x199b, 0x005e,
+ 0x0036, 0x0046, 0x0056, 0x2071, 0x1a41, 0x080c, 0x19e3, 0x005e,
0x004e, 0x003e, 0x00ee, 0x0005, 0x0126, 0x2091, 0x2e00, 0x2071,
- 0x1800, 0x7128, 0x2001, 0x194c, 0x2102, 0x2001, 0x1954, 0x2102,
+ 0x1800, 0x7128, 0x2001, 0x194b, 0x2102, 0x2001, 0x1953, 0x2102,
0x2001, 0x013b, 0x2102, 0x2079, 0x0200, 0x2001, 0x0201, 0x789e,
0x78a3, 0x0200, 0x9198, 0x0007, 0x831c, 0x831c, 0x831c, 0x9398,
0x0005, 0x2320, 0x9182, 0x0204, 0x1230, 0x2011, 0x0008, 0x8423,
@@ -890,1979 +899,1996 @@ static const uint16_t isp_2300_risc_code[] = {
0x2069, 0x0200, 0x9005, 0x6810, 0x0110, 0xc0a5, 0x0008, 0xc0a4,
0x6812, 0x00de, 0x0005, 0x0006, 0x00d6, 0x2069, 0x0200, 0x6810,
0x9084, 0xfff8, 0x910d, 0x6912, 0x00de, 0x000e, 0x0005, 0x7938,
- 0x080c, 0x0dbd, 0x00f6, 0x2079, 0x0200, 0x7902, 0xa001, 0xa001,
+ 0x080c, 0x0dbc, 0x00f6, 0x2079, 0x0200, 0x7902, 0xa001, 0xa001,
0xa001, 0xa001, 0xa001, 0xa001, 0x7902, 0xa001, 0xa001, 0xa001,
0xa001, 0xa001, 0xa001, 0x00fe, 0x0005, 0x0126, 0x2091, 0x2800,
- 0x2061, 0x0100, 0x2071, 0x1800, 0x2009, 0x0000, 0x080c, 0x2a93,
- 0x080c, 0x29ae, 0x6054, 0x8004, 0x8004, 0x8004, 0x8004, 0x9084,
+ 0x2061, 0x0100, 0x2071, 0x1800, 0x2009, 0x0000, 0x080c, 0x2afc,
+ 0x080c, 0x2a17, 0x6054, 0x8004, 0x8004, 0x8004, 0x8004, 0x9084,
0x000c, 0x6150, 0x918c, 0xfff3, 0x9105, 0x6052, 0x6050, 0x9084,
0xb17f, 0x9085, 0x2000, 0x6052, 0x2009, 0x1979, 0x2011, 0x197a,
- 0x6358, 0x939c, 0x38f0, 0x2320, 0x080c, 0x29f2, 0x1238, 0x939d,
+ 0x6358, 0x939c, 0x38f0, 0x2320, 0x080c, 0x2a5b, 0x1238, 0x939d,
0x4003, 0x94a5, 0x8603, 0x230a, 0x2412, 0x0030, 0x939d, 0x0203,
- 0x94a5, 0x8603, 0x230a, 0x2412, 0x9006, 0x080c, 0x29dd, 0x9006,
- 0x080c, 0x29c0, 0x20a9, 0x0012, 0x1d04, 0x2304, 0x2091, 0x6000,
- 0x1f04, 0x2304, 0x602f, 0x0100, 0x602f, 0x0000, 0x6050, 0x9085,
- 0x0400, 0x9084, 0xdfff, 0x6052, 0x6024, 0x6026, 0x080c, 0x26d8,
- 0x2009, 0x00ef, 0x6132, 0x6136, 0x080c, 0x26e8, 0x60e7, 0x0000,
+ 0x94a5, 0x8603, 0x230a, 0x2412, 0x9006, 0x080c, 0x2a46, 0x9006,
+ 0x080c, 0x2a29, 0x20a9, 0x0012, 0x1d04, 0x234c, 0x2091, 0x6000,
+ 0x1f04, 0x234c, 0x602f, 0x0100, 0x602f, 0x0000, 0x6050, 0x9085,
+ 0x0400, 0x9084, 0xdfff, 0x6052, 0x6024, 0x6026, 0x080c, 0x2741,
+ 0x2009, 0x00ef, 0x6132, 0x6136, 0x080c, 0x2751, 0x60e7, 0x0000,
0x61ea, 0x2001, 0x180d, 0x2004, 0xd08c, 0x2001, 0x0002, 0x1110,
0x2001, 0x0008, 0x60e2, 0x604b, 0xf7f7, 0x6043, 0x0000, 0x602f,
0x0080, 0x602f, 0x0000, 0x6007, 0x149f, 0x60bb, 0x0000, 0x20a9,
- 0x0018, 0x60bf, 0x0000, 0x1f04, 0x2339, 0x60bb, 0x0000, 0x60bf,
+ 0x0018, 0x60bf, 0x0000, 0x1f04, 0x2381, 0x60bb, 0x0000, 0x60bf,
0x0108, 0x60bf, 0x0012, 0x60bf, 0x0320, 0x60bf, 0x0018, 0x601b,
0x00f0, 0x601f, 0x001e, 0x600f, 0x006b, 0x602b, 0x402f, 0x012e,
0x0005, 0x00f6, 0x2079, 0x0140, 0x78c3, 0x0080, 0x78c3, 0x0083,
0x78c3, 0x0000, 0x00fe, 0x0005, 0x2001, 0x1834, 0x2003, 0x0000,
0x2001, 0x1833, 0x2003, 0x0001, 0x0005, 0x0126, 0x2091, 0x2800,
0x0006, 0x0016, 0x0026, 0x6124, 0x9184, 0x5e2c, 0x1118, 0x9184,
- 0x0007, 0x002a, 0x9195, 0x0004, 0x9284, 0x0007, 0x0002, 0x2399,
- 0x237f, 0x2382, 0x2385, 0x238a, 0x238c, 0x2390, 0x2394, 0x080c,
- 0x85b8, 0x00b8, 0x080c, 0x8689, 0x00a0, 0x080c, 0x8689, 0x080c,
- 0x85b8, 0x0078, 0x0099, 0x0068, 0x080c, 0x85b8, 0x0079, 0x0048,
- 0x080c, 0x8689, 0x0059, 0x0028, 0x080c, 0x8689, 0x080c, 0x85b8,
+ 0x0007, 0x002a, 0x9195, 0x0004, 0x9284, 0x0007, 0x0002, 0x23e1,
+ 0x23c7, 0x23ca, 0x23cd, 0x23d2, 0x23d4, 0x23d8, 0x23dc, 0x080c,
+ 0x8789, 0x00b8, 0x080c, 0x885a, 0x00a0, 0x080c, 0x885a, 0x080c,
+ 0x8789, 0x0078, 0x0099, 0x0068, 0x080c, 0x8789, 0x0079, 0x0048,
+ 0x080c, 0x885a, 0x0059, 0x0028, 0x080c, 0x885a, 0x080c, 0x8789,
0x0029, 0x002e, 0x001e, 0x000e, 0x012e, 0x0005, 0x00a6, 0x6124,
- 0x6028, 0xd09c, 0x0118, 0xd19c, 0x1904, 0x25f3, 0xd1f4, 0x190c,
- 0x0dbd, 0x080c, 0x72e5, 0x0904, 0x23f6, 0x080c, 0xbef8, 0x1120,
+ 0x6028, 0xd09c, 0x0118, 0xd19c, 0x1904, 0x2654, 0xd1f4, 0x190c,
+ 0x0dbc, 0x080c, 0x7351, 0x0904, 0x243e, 0x080c, 0xc8ce, 0x1120,
0x7000, 0x9086, 0x0003, 0x0570, 0x6024, 0x9084, 0x1800, 0x0550,
- 0x080c, 0x7308, 0x0118, 0x080c, 0x72f6, 0x1520, 0x6027, 0x0020,
- 0x6043, 0x0000, 0x080c, 0xbef8, 0x0168, 0x080c, 0x7308, 0x1150,
- 0x2001, 0x1984, 0x2003, 0x0001, 0x6027, 0x1800, 0x080c, 0x7176,
- 0x0804, 0x25f6, 0x70a0, 0x9005, 0x1150, 0x70a3, 0x0001, 0x00d6,
- 0x2069, 0x0140, 0x080c, 0x733a, 0x00de, 0x1904, 0x25f6, 0x080c,
- 0x75e6, 0x0438, 0x080c, 0x7308, 0x1904, 0x242b, 0x6024, 0x9084,
- 0x1800, 0x1110, 0x0804, 0x242b, 0x080c, 0x75e6, 0x080c, 0x75dc,
- 0x080c, 0x5ef6, 0x080c, 0x7212, 0x0804, 0x25f3, 0xd1ac, 0x1598,
+ 0x080c, 0x7374, 0x0118, 0x080c, 0x7362, 0x1520, 0x6027, 0x0020,
+ 0x6043, 0x0000, 0x080c, 0xc8ce, 0x0168, 0x080c, 0x7374, 0x1150,
+ 0x2001, 0x1984, 0x2003, 0x0001, 0x6027, 0x1800, 0x080c, 0x71cd,
+ 0x0804, 0x2657, 0x70a0, 0x9005, 0x1150, 0x70a3, 0x0001, 0x00d6,
+ 0x2069, 0x0140, 0x080c, 0x73a5, 0x00de, 0x1904, 0x2657, 0x080c,
+ 0x7656, 0x0438, 0x080c, 0x7374, 0x1904, 0x2473, 0x6024, 0x9084,
+ 0x1800, 0x1110, 0x0804, 0x2473, 0x080c, 0x7656, 0x080c, 0x764c,
+ 0x080c, 0x5fb3, 0x080c, 0x727e, 0x0804, 0x2654, 0xd1ac, 0x1598,
0x6024, 0xd0dc, 0x1170, 0xd0e4, 0x11c0, 0xd0d4, 0x1520, 0xd0cc,
- 0x0130, 0x7094, 0x9086, 0x0029, 0x1110, 0x080c, 0x74c7, 0x0804,
- 0x25f3, 0x080c, 0xbef8, 0x0130, 0x0046, 0x2021, 0x0001, 0x080c,
- 0x2bbf, 0x004e, 0x080c, 0x75e1, 0x0090, 0x080c, 0xbef8, 0x0130,
- 0x0046, 0x2021, 0x0002, 0x080c, 0x2bbf, 0x004e, 0x2001, 0x195a,
- 0x2003, 0x0002, 0x0020, 0x080c, 0x7423, 0x0804, 0x25f3, 0x080c,
- 0x7569, 0x0804, 0x25f3, 0xd1ac, 0x0904, 0x2514, 0x080c, 0x72e5,
- 0x1510, 0x6027, 0x0020, 0x0006, 0x0026, 0x0036, 0x080c, 0xbef8,
- 0x0138, 0x0046, 0x634c, 0x2021, 0x0000, 0x080c, 0x2bbf, 0x004e,
- 0x080c, 0x72ff, 0x1158, 0x080c, 0x75dc, 0x080c, 0x5ef6, 0x080c,
- 0x7212, 0x003e, 0x002e, 0x000e, 0x00ae, 0x0005, 0x003e, 0x002e,
- 0x000e, 0x080c, 0x72bd, 0x0016, 0x0046, 0x00c6, 0x644c, 0x9486,
+ 0x0130, 0x7094, 0x9086, 0x0029, 0x1110, 0x080c, 0x7532, 0x0804,
+ 0x2654, 0x080c, 0xc8ce, 0x0130, 0x0046, 0x2021, 0x0001, 0x080c,
+ 0x2c28, 0x004e, 0x080c, 0x7651, 0x0090, 0x080c, 0xc8ce, 0x0130,
+ 0x0046, 0x2021, 0x0002, 0x080c, 0x2c28, 0x004e, 0x2001, 0x1959,
+ 0x2003, 0x0002, 0x0020, 0x080c, 0x748e, 0x0804, 0x2654, 0x080c,
+ 0x75d4, 0x0804, 0x2654, 0xd1ac, 0x0904, 0x2575, 0x080c, 0x7351,
+ 0x1510, 0x6027, 0x0020, 0x0006, 0x0026, 0x0036, 0x080c, 0xc8ce,
+ 0x0138, 0x0046, 0x634c, 0x2021, 0x0000, 0x080c, 0x2c28, 0x004e,
+ 0x080c, 0x736b, 0x1158, 0x080c, 0x764c, 0x080c, 0x5fb3, 0x080c,
+ 0x727e, 0x003e, 0x002e, 0x000e, 0x00ae, 0x0005, 0x003e, 0x002e,
+ 0x000e, 0x080c, 0x7329, 0x0016, 0x0046, 0x00c6, 0x644c, 0x9486,
0xf0f0, 0x1138, 0x2061, 0x0100, 0x644a, 0x6043, 0x0090, 0x6043,
0x0010, 0x74d6, 0x948c, 0xff00, 0x7038, 0xd084, 0x0178, 0x080c,
- 0xbef8, 0x1118, 0x9186, 0xf800, 0x1148, 0x0036, 0x0046, 0x2418,
- 0x2021, 0x0000, 0x080c, 0x2bbf, 0x004e, 0x003e, 0x080c, 0xbef1,
- 0x1904, 0x24f1, 0x9196, 0xff00, 0x01e8, 0x705c, 0x9084, 0x00ff,
- 0x810f, 0x81ff, 0x0110, 0x9116, 0x01a8, 0x7130, 0xd18c, 0x1190,
- 0x080c, 0x31c0, 0x0118, 0xc18d, 0x7132, 0x0060, 0x6240, 0x9294,
- 0x0010, 0x0904, 0x24f1, 0x6248, 0x9294, 0xff00, 0x9296, 0xff00,
- 0x1904, 0x24f1, 0x7038, 0xd08c, 0x1140, 0x2001, 0x180c, 0x200c,
- 0xd1ac, 0x1904, 0x24f1, 0xc1ad, 0x2102, 0x0036, 0x73d4, 0x2011,
- 0x8013, 0x080c, 0x4abd, 0x003e, 0x7130, 0xc185, 0x7132, 0x2011,
+ 0xc8ce, 0x1118, 0x9186, 0xf800, 0x1148, 0x0036, 0x0046, 0x2418,
+ 0x2021, 0x0000, 0x080c, 0x2c28, 0x004e, 0x003e, 0x080c, 0xc8c7,
+ 0x1904, 0x2552, 0x9196, 0xff00, 0x05a8, 0x705c, 0x9084, 0x00ff,
+ 0x810f, 0x81ff, 0x0110, 0x9116, 0x0568, 0x7130, 0xd184, 0x1550,
+ 0x080c, 0x325c, 0x0128, 0xc18d, 0x7132, 0x080c, 0x6865, 0x1510,
+ 0x6240, 0x9294, 0x0010, 0x0130, 0x6248, 0x9294, 0xff00, 0x9296,
+ 0xff00, 0x01c0, 0x7030, 0xd08c, 0x0904, 0x2552, 0x7038, 0xd08c,
+ 0x1140, 0x2001, 0x180c, 0x200c, 0xd1ac, 0x1904, 0x2552, 0xc1ad,
+ 0x2102, 0x0036, 0x73d4, 0x2011, 0x8013, 0x080c, 0x4b6d, 0x003e,
+ 0x0804, 0x2552, 0x7038, 0xd08c, 0x1140, 0x2001, 0x180c, 0x200c,
+ 0xd1ac, 0x1904, 0x2552, 0xc1ad, 0x2102, 0x0036, 0x73d4, 0x2011,
+ 0x8013, 0x080c, 0x4b6d, 0x003e, 0x7130, 0xc185, 0x7132, 0x2011,
0x185f, 0x220c, 0xd1a4, 0x01f0, 0x0016, 0x2009, 0x0001, 0x2011,
- 0x0100, 0x080c, 0x8532, 0x2019, 0x000e, 0x00c6, 0x2061, 0x0000,
- 0x080c, 0xd0d7, 0x00ce, 0x9484, 0x00ff, 0x9080, 0x31cc, 0x200d,
+ 0x0100, 0x080c, 0x8703, 0x2019, 0x000e, 0x00c6, 0x2061, 0x0000,
+ 0x080c, 0xdc90, 0x00ce, 0x9484, 0x00ff, 0x9080, 0x3268, 0x200d,
0x918c, 0xff00, 0x810f, 0x2120, 0x9006, 0x2009, 0x000e, 0x080c,
- 0xd156, 0x001e, 0xd1ac, 0x1140, 0x0016, 0x900e, 0x2019, 0x0004,
- 0x080c, 0x3037, 0x001e, 0x00a8, 0x0156, 0x00b6, 0x20a9, 0x007f,
- 0x900e, 0x080c, 0x6411, 0x1140, 0x7030, 0xd084, 0x1118, 0xb800,
- 0xd0bc, 0x1110, 0x080c, 0x5f10, 0x8108, 0x1f04, 0x24e1, 0x00be,
- 0x015e, 0x00ce, 0x004e, 0x080c, 0x9e89, 0x60e3, 0x0000, 0x001e,
- 0x2001, 0x1800, 0x2014, 0x9296, 0x0004, 0x1170, 0xd19c, 0x11a0,
- 0x2011, 0x180c, 0x2214, 0xd29c, 0x1120, 0x6204, 0x9295, 0x0002,
- 0x6206, 0x6228, 0xc29d, 0x622a, 0x2003, 0x0001, 0x2001, 0x1825,
- 0x2003, 0x0000, 0x6027, 0x0020, 0xd194, 0x0904, 0x25f3, 0x0016,
- 0x6220, 0xd2b4, 0x0904, 0x259c, 0x080c, 0x8420, 0x080c, 0x9623,
- 0x6027, 0x0004, 0x00f6, 0x2019, 0x19cd, 0x2304, 0x907d, 0x0904,
- 0x256b, 0x7804, 0x9086, 0x0032, 0x15f0, 0x00d6, 0x00c6, 0x00e6,
- 0x0096, 0x2069, 0x0140, 0x782c, 0x685e, 0x7808, 0x685a, 0x6043,
- 0x0002, 0x2001, 0x0003, 0x8001, 0x1df0, 0x6043, 0x0000, 0x2001,
- 0x003c, 0x8001, 0x1df0, 0x080c, 0x2b75, 0x2001, 0x001e, 0x8001,
- 0x0240, 0x20a9, 0x0009, 0x080c, 0x2a6e, 0x6904, 0xd1dc, 0x1140,
- 0x0cb0, 0x2001, 0x0100, 0x080c, 0x2b65, 0x9006, 0x080c, 0x2b65,
- 0x080c, 0x8b2b, 0x080c, 0x8c37, 0x7814, 0x2048, 0xa86b, 0x0103,
- 0x2f60, 0x080c, 0x9f18, 0x009e, 0x00ee, 0x00ce, 0x00de, 0x00fe,
- 0x001e, 0x00ae, 0x0005, 0x00fe, 0x00d6, 0x2069, 0x0140, 0x6804,
- 0x9084, 0x4000, 0x0110, 0x080c, 0x2b75, 0x00de, 0x00c6, 0x2061,
- 0x19c4, 0x6028, 0x080c, 0xbef8, 0x0120, 0x909a, 0x0003, 0x1258,
- 0x0018, 0x909a, 0x00c8, 0x1238, 0x8000, 0x602a, 0x00ce, 0x080c,
- 0x95ff, 0x0804, 0x25f2, 0x2061, 0x0100, 0x62c0, 0x080c, 0x9d0f,
- 0x2019, 0x19cd, 0x2304, 0x9065, 0x0120, 0x2009, 0x0027, 0x080c,
- 0x9f88, 0x00ce, 0x0804, 0x25f2, 0xd2bc, 0x0904, 0x25df, 0x080c,
- 0x842d, 0x6014, 0x9084, 0x1984, 0x9085, 0x0010, 0x6016, 0x6027,
- 0x0004, 0x00d6, 0x2069, 0x0140, 0x6804, 0x9084, 0x4000, 0x0110,
- 0x080c, 0x2b75, 0x00de, 0x00c6, 0x2061, 0x19c4, 0x6044, 0x080c,
- 0xbef8, 0x0120, 0x909a, 0x0003, 0x1628, 0x0018, 0x909a, 0x00c8,
- 0x1608, 0x8000, 0x6046, 0x603c, 0x00ce, 0x9005, 0x0558, 0x2009,
- 0x07d0, 0x080c, 0x8425, 0x9080, 0x0008, 0x2004, 0x9086, 0x0006,
- 0x1138, 0x6114, 0x918c, 0x1984, 0x918d, 0x0012, 0x6116, 0x00d0,
- 0x6114, 0x918c, 0x1984, 0x918d, 0x0016, 0x6116, 0x0098, 0x6027,
- 0x0004, 0x0080, 0x0036, 0x2019, 0x0001, 0x080c, 0x9964, 0x003e,
- 0x2019, 0x19d3, 0x2304, 0x9065, 0x0120, 0x2009, 0x004f, 0x080c,
- 0x9f88, 0x00ce, 0x001e, 0xd19c, 0x0904, 0x2647, 0x7038, 0xd0ac,
- 0x1538, 0x0016, 0x0156, 0x6027, 0x0008, 0x080c, 0x2b9f, 0x20a9,
- 0x0028, 0xa001, 0x1f04, 0x2601, 0x6150, 0x9185, 0x1400, 0x6052,
- 0x20a9, 0x0366, 0x1d04, 0x260a, 0x080c, 0x8454, 0x6020, 0xd09c,
- 0x1130, 0x015e, 0x6152, 0x001e, 0x6027, 0x0008, 0x0480, 0x080c,
- 0x2a55, 0x1f04, 0x260a, 0x015e, 0x6152, 0x001e, 0x6027, 0x0008,
- 0x0016, 0x6028, 0xc09c, 0x602a, 0x080c, 0x9e89, 0x60e3, 0x0000,
- 0x080c, 0xd33c, 0x080c, 0xd373, 0x080c, 0x55ab, 0xd0fc, 0x1138,
- 0x080c, 0xbef1, 0x1120, 0x9085, 0x0001, 0x080c, 0x732a, 0x9006,
- 0x080c, 0x2b65, 0x2009, 0x0002, 0x080c, 0x2a93, 0x2001, 0x1800,
- 0x2003, 0x0004, 0x6027, 0x0008, 0x080c, 0x0b9e, 0x001e, 0x918c,
- 0xffd0, 0x6126, 0x00ae, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036,
- 0x00e6, 0x00f6, 0x0126, 0x2091, 0x8000, 0x2071, 0x1800, 0x71cc,
- 0x70ce, 0x9116, 0x05e0, 0x81ff, 0x01a0, 0x2009, 0x0000, 0x080c,
- 0x2a93, 0x2011, 0x8011, 0x2019, 0x010e, 0x231c, 0x939e, 0x0007,
- 0x1118, 0x2019, 0x0001, 0x0010, 0x2019, 0x0000, 0x080c, 0x4abd,
- 0x0430, 0x2001, 0x1985, 0x200c, 0x81ff, 0x1140, 0x2001, 0x0109,
- 0x2004, 0xd0b4, 0x0118, 0x2019, 0x0003, 0x0008, 0x2118, 0x2011,
- 0x8012, 0x080c, 0x4abd, 0x080c, 0x55ab, 0xd0fc, 0x1180, 0x080c,
- 0xbef1, 0x1168, 0x00c6, 0x080c, 0x2733, 0x080c, 0x98cb, 0x2061,
- 0x0100, 0x2019, 0x0028, 0x900e, 0x080c, 0x3037, 0x00ce, 0x012e,
- 0x00fe, 0x00ee, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x2028,
- 0x918c, 0x00ff, 0x2130, 0x9094, 0xff00, 0x11f0, 0x2011, 0x1836,
- 0x2214, 0xd2ac, 0x11c8, 0x81ff, 0x01e8, 0x2011, 0x181e, 0x2204,
- 0x9106, 0x1190, 0x2011, 0x181f, 0x2214, 0x9294, 0xff00, 0x9584,
- 0xff00, 0x9206, 0x1148, 0x2011, 0x181f, 0x2214, 0x9294, 0x00ff,
- 0x9584, 0x00ff, 0x9206, 0x1120, 0x2500, 0x080c, 0x7f2a, 0x0048,
- 0x9584, 0x00ff, 0x9080, 0x31cc, 0x200d, 0x918c, 0xff00, 0x810f,
- 0x9006, 0x0005, 0x9080, 0x31cc, 0x200d, 0x918c, 0x00ff, 0x0005,
- 0x00d6, 0x2069, 0x0140, 0x2001, 0x1817, 0x2003, 0x00ef, 0x20a9,
- 0x0010, 0x9006, 0x6852, 0x6856, 0x1f04, 0x26e3, 0x00de, 0x0005,
- 0x0006, 0x00d6, 0x0026, 0x2069, 0x0140, 0x2001, 0x1817, 0x2102,
- 0x8114, 0x8214, 0x8214, 0x8214, 0x20a9, 0x0010, 0x6853, 0x0000,
- 0x9006, 0x82ff, 0x1128, 0x9184, 0x000f, 0x9080, 0xd837, 0x2005,
- 0x6856, 0x8211, 0x1f04, 0x26f8, 0x002e, 0x00de, 0x000e, 0x0005,
- 0x00c6, 0x2061, 0x1800, 0x6030, 0x0110, 0xc09d, 0x0008, 0xc09c,
- 0x6032, 0x00ce, 0x0005, 0x0156, 0x00d6, 0x0026, 0x0016, 0x0006,
- 0x2069, 0x0140, 0x6980, 0x9116, 0x0180, 0x9112, 0x1230, 0x8212,
- 0x8210, 0x22a8, 0x2001, 0x0402, 0x0018, 0x22a8, 0x2001, 0x0404,
- 0x680e, 0x1f04, 0x2728, 0x680f, 0x0000, 0x000e, 0x001e, 0x002e,
- 0x00de, 0x015e, 0x0005, 0x080c, 0x55a7, 0xd0c4, 0x0150, 0xd0a4,
- 0x0140, 0x9006, 0x0046, 0x2020, 0x2009, 0x002e, 0x080c, 0xd156,
- 0x004e, 0x0005, 0x00f6, 0x0016, 0x0026, 0x2079, 0x0140, 0x78c4,
- 0xd0dc, 0x0904, 0x279f, 0x080c, 0x29f2, 0x0660, 0x9084, 0x0700,
- 0x908e, 0x0600, 0x1120, 0x2011, 0x4000, 0x900e, 0x0458, 0x908e,
- 0x0500, 0x1120, 0x2011, 0x8000, 0x900e, 0x0420, 0x908e, 0x0400,
- 0x1120, 0x9016, 0x2009, 0x0001, 0x00e8, 0x908e, 0x0300, 0x1120,
- 0x9016, 0x2009, 0x0002, 0x00b0, 0x908e, 0x0200, 0x1120, 0x9016,
- 0x2009, 0x0004, 0x0078, 0x908e, 0x0100, 0x1548, 0x9016, 0x2009,
- 0x0008, 0x0040, 0x9084, 0x0700, 0x908e, 0x0300, 0x1500, 0x2011,
- 0x0030, 0x0058, 0x2300, 0x9080, 0x0020, 0x2018, 0x080c, 0x854b,
- 0x928c, 0xff00, 0x0110, 0x2011, 0x00ff, 0x2200, 0x8007, 0x9085,
- 0x004c, 0x78c2, 0x2009, 0x0138, 0x220a, 0x080c, 0x72e5, 0x1118,
- 0x2009, 0x194a, 0x220a, 0x002e, 0x001e, 0x00fe, 0x0005, 0x78c3,
- 0x0000, 0x0cc8, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026,
- 0x2001, 0x0170, 0x200c, 0x8000, 0x2014, 0x9184, 0x0003, 0x0110,
- 0x080c, 0x0dbd, 0x002e, 0x001e, 0x000e, 0x012e, 0x0005, 0x2001,
- 0x180d, 0x2004, 0xd08c, 0x0118, 0x2009, 0x0002, 0x0005, 0x2001,
- 0x0171, 0x2004, 0xd0dc, 0x0168, 0x2001, 0x0170, 0x200c, 0x918c,
- 0x00ff, 0x918e, 0x004c, 0x1128, 0x200c, 0x918c, 0xff00, 0x810f,
- 0x0005, 0x900e, 0x2001, 0x0227, 0x2004, 0x8007, 0x9084, 0x00ff,
- 0x8004, 0x9108, 0x2001, 0x0226, 0x2004, 0x8007, 0x9084, 0x00ff,
- 0x8004, 0x9108, 0x0005, 0x0018, 0x000c, 0x0018, 0x0020, 0x1000,
- 0x0800, 0x1000, 0x1800, 0x0156, 0x0006, 0x0016, 0x0026, 0x00e6,
- 0x2001, 0x196c, 0x2004, 0x908a, 0x0007, 0x1a0c, 0x0dc4, 0x0033,
- 0x00ee, 0x002e, 0x001e, 0x000e, 0x015e, 0x0005, 0x2805, 0x2823,
- 0x2847, 0x2849, 0x2872, 0x2874, 0x2876, 0x2001, 0x0001, 0x080c,
- 0x264c, 0x080c, 0x2a50, 0x2001, 0x196e, 0x2003, 0x0000, 0x7828,
- 0x9084, 0xe1d7, 0x782a, 0x9006, 0x20a9, 0x0009, 0x080c, 0x2a0e,
- 0x2001, 0x196c, 0x2003, 0x0006, 0x2009, 0x001e, 0x2011, 0x2877,
- 0x080c, 0x8432, 0x0005, 0x2009, 0x1971, 0x200b, 0x0000, 0x2001,
- 0x1976, 0x2003, 0x0036, 0x2001, 0x1975, 0x2003, 0x002a, 0x2001,
- 0x196e, 0x2003, 0x0001, 0x9006, 0x080c, 0x29c0, 0x2001, 0xffff,
- 0x20a9, 0x0009, 0x080c, 0x2a0e, 0x2001, 0x196c, 0x2003, 0x0006,
- 0x2009, 0x001e, 0x2011, 0x2877, 0x080c, 0x8432, 0x0005, 0x080c,
- 0x0dc4, 0x2001, 0x1976, 0x2003, 0x0036, 0x2001, 0x196e, 0x2003,
- 0x0003, 0x7a38, 0x9294, 0x0005, 0x9296, 0x0004, 0x0110, 0x9006,
- 0x0010, 0x2001, 0x0001, 0x080c, 0x29c0, 0x2001, 0x1972, 0x2003,
- 0x0000, 0x2001, 0xffff, 0x20a9, 0x0009, 0x080c, 0x2a0e, 0x2001,
- 0x196c, 0x2003, 0x0006, 0x2009, 0x001e, 0x2011, 0x2877, 0x080c,
- 0x8432, 0x0005, 0x080c, 0x0dc4, 0x080c, 0x0dc4, 0x0005, 0x0006,
- 0x0016, 0x0026, 0x00e6, 0x00f6, 0x0156, 0x0126, 0x2091, 0x8000,
- 0x2079, 0x0100, 0x2001, 0x196e, 0x2004, 0x908a, 0x0007, 0x1a0c,
- 0x0dc4, 0x0043, 0x012e, 0x015e, 0x00fe, 0x00ee, 0x002e, 0x001e,
- 0x000e, 0x0005, 0x2899, 0x28b5, 0x28f1, 0x291d, 0x293d, 0x2949,
- 0x294b, 0x080c, 0x2a02, 0x1190, 0x2009, 0x1974, 0x2104, 0x7a38,
- 0x9294, 0x0005, 0x9296, 0x0004, 0x0110, 0xc08d, 0x0008, 0xc085,
- 0x200a, 0x2001, 0x196c, 0x2003, 0x0001, 0x0030, 0x080c, 0x296f,
- 0x2001, 0xffff, 0x080c, 0x2814, 0x0005, 0x080c, 0x294d, 0x05c0,
- 0x2009, 0x1975, 0x2104, 0x8001, 0x200a, 0x080c, 0x2a02, 0x1158,
- 0x7a38, 0x9294, 0x0005, 0x9296, 0x0005, 0x0518, 0x2009, 0x1974,
- 0x2104, 0xc085, 0x200a, 0x2009, 0x1971, 0x2104, 0x8000, 0x200a,
- 0x9086, 0x0005, 0x0118, 0x080c, 0x2955, 0x00c0, 0x200b, 0x0000,
- 0x7a38, 0x9294, 0x0006, 0x9296, 0x0004, 0x0110, 0x9006, 0x0010,
- 0x2001, 0x0001, 0x080c, 0x29dd, 0x2001, 0x196e, 0x2003, 0x0002,
- 0x0028, 0x2001, 0x196c, 0x2003, 0x0003, 0x0010, 0x080c, 0x2836,
- 0x0005, 0x080c, 0x294d, 0x0540, 0x2009, 0x1975, 0x2104, 0x8001,
- 0x200a, 0x080c, 0x2a02, 0x1148, 0x2001, 0x196c, 0x2003, 0x0003,
- 0x2001, 0x196d, 0x2003, 0x0000, 0x00b8, 0x2009, 0x1975, 0x2104,
- 0x9005, 0x1118, 0x080c, 0x2992, 0x0010, 0x080c, 0x2962, 0x080c,
- 0x2955, 0x2009, 0x1971, 0x200b, 0x0000, 0x2001, 0x196e, 0x2003,
- 0x0001, 0x080c, 0x2836, 0x0000, 0x0005, 0x0479, 0x01e8, 0x080c,
- 0x2a02, 0x1198, 0x2009, 0x1972, 0x2104, 0x8000, 0x200a, 0x9086,
- 0x0007, 0x0108, 0x0078, 0x2001, 0x1977, 0x2003, 0x000a, 0x2009,
- 0x1974, 0x2104, 0xc0fd, 0x200a, 0x0038, 0x00f9, 0x2001, 0x196e,
- 0x2003, 0x0004, 0x080c, 0x2861, 0x0005, 0x0079, 0x0148, 0x080c,
- 0x2a02, 0x1118, 0x080c, 0x284d, 0x0018, 0x0079, 0x080c, 0x2861,
- 0x0005, 0x080c, 0x0dc4, 0x080c, 0x0dc4, 0x2009, 0x1976, 0x2104,
- 0x8001, 0x200a, 0x090c, 0x29ae, 0x0005, 0x7a38, 0x9294, 0x0005,
- 0x9296, 0x0005, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x080c,
- 0x29dd, 0x0005, 0x7a38, 0x9294, 0x0006, 0x9296, 0x0006, 0x0110,
- 0x9006, 0x0010, 0x2001, 0x0001, 0x080c, 0x29c0, 0x0005, 0x2009,
- 0x1971, 0x2104, 0x8000, 0x200a, 0x9086, 0x0005, 0x0108, 0x0068,
- 0x200b, 0x0000, 0x7a38, 0x9294, 0x0006, 0x9296, 0x0006, 0x0110,
- 0x9006, 0x0010, 0x2001, 0x0001, 0x04d9, 0x7a38, 0x9294, 0x0005,
- 0x9296, 0x0005, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x080c,
- 0x29dd, 0x0005, 0x0086, 0x2001, 0x1974, 0x2004, 0x9084, 0x7fff,
- 0x090c, 0x0dc4, 0x2009, 0x1973, 0x2144, 0x8846, 0x280a, 0x9844,
- 0x0dd8, 0xd08c, 0x1120, 0xd084, 0x1120, 0x080c, 0x0dc4, 0x9006,
- 0x0010, 0x2001, 0x0001, 0x00a1, 0x008e, 0x0005, 0x0006, 0x0156,
- 0x2001, 0x196c, 0x20a9, 0x0009, 0x2003, 0x0000, 0x8000, 0x1f04,
- 0x29b4, 0x2001, 0x1973, 0x2003, 0x8000, 0x015e, 0x000e, 0x0005,
- 0x00f6, 0x2079, 0x0100, 0x9085, 0x0000, 0x0158, 0x7838, 0x9084,
- 0xfff9, 0x9085, 0x0004, 0x783a, 0x2009, 0x1979, 0x210c, 0x795a,
- 0x0050, 0x7838, 0x9084, 0xfffb, 0x9085, 0x0006, 0x783a, 0x2009,
- 0x197a, 0x210c, 0x795a, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0100,
- 0x9085, 0x0000, 0x0138, 0x7838, 0x9084, 0xfffa, 0x9085, 0x0004,
- 0x783a, 0x0030, 0x7838, 0x9084, 0xfffb, 0x9085, 0x0005, 0x783a,
- 0x00fe, 0x0005, 0x0006, 0x2001, 0x0100, 0x2004, 0x9082, 0x0007,
- 0x000e, 0x0005, 0x0006, 0x2001, 0x0100, 0x2004, 0x9082, 0x0009,
- 0x000e, 0x0005, 0x0156, 0x20a9, 0x0064, 0x7820, 0x080c, 0x2a8d,
- 0xd09c, 0x1110, 0x1f04, 0x2a05, 0x015e, 0x0005, 0x0126, 0x0016,
- 0x0006, 0x2091, 0x8000, 0x7850, 0x9085, 0x0040, 0x7852, 0x7850,
- 0x9084, 0xfbcf, 0x7852, 0x080c, 0x2a8d, 0x9085, 0x2000, 0x7852,
- 0x000e, 0x2008, 0x9186, 0x0000, 0x1118, 0x783b, 0x0007, 0x0090,
- 0x9186, 0x0001, 0x1118, 0x783b, 0x0006, 0x0060, 0x9186, 0x0002,
- 0x1118, 0x783b, 0x0005, 0x0030, 0x9186, 0x0003, 0x1118, 0x783b,
- 0x0004, 0x0000, 0x0006, 0x1d04, 0x2a3b, 0x080c, 0x8454, 0x1f04,
- 0x2a3b, 0x7850, 0x9085, 0x0400, 0x9084, 0xdfbf, 0x7852, 0x080c,
- 0x2a8d, 0x9085, 0x1000, 0x7852, 0x000e, 0x001e, 0x012e, 0x0005,
- 0x7850, 0x9084, 0xffcf, 0x7852, 0x0005, 0x0006, 0x0156, 0x00f6,
- 0x2079, 0x0100, 0x20a9, 0x000a, 0x7854, 0xd0ac, 0x1130, 0x7820,
- 0xd0e4, 0x1140, 0x1f04, 0x2a5f, 0x0028, 0x7854, 0xd08c, 0x1110,
- 0x1f04, 0x2a65, 0x00fe, 0x015e, 0x000e, 0x0005, 0x1d04, 0x2a6e,
- 0x080c, 0x8454, 0x1f04, 0x2a6e, 0x0005, 0x0006, 0x2001, 0x1978,
- 0x2004, 0x9086, 0x0000, 0x000e, 0x0005, 0x0006, 0x2001, 0x1978,
- 0x2004, 0x9086, 0x0001, 0x000e, 0x0005, 0x0006, 0x2001, 0x1978,
- 0x2004, 0x9086, 0x0002, 0x000e, 0x0005, 0xa001, 0xa001, 0xa001,
- 0xa001, 0xa001, 0x0005, 0x0006, 0x2001, 0x1985, 0x2102, 0x000e,
- 0x0005, 0x2009, 0x0171, 0x2104, 0xd0dc, 0x0140, 0x2009, 0x0170,
- 0x2104, 0x200b, 0x0080, 0xa001, 0xa001, 0x200a, 0x0005, 0x0036,
- 0x0046, 0x2001, 0x0141, 0x200c, 0x918c, 0xff00, 0x9186, 0x2100,
- 0x0140, 0x9186, 0x2000, 0x0170, 0x9186, 0x0100, 0x1904, 0x2b06,
- 0x0048, 0x0016, 0x2009, 0x1a62, 0x2104, 0x8000, 0x0208, 0x200a,
- 0x001e, 0x04f0, 0x2009, 0x00a2, 0x080c, 0x0e53, 0x2019, 0x0160,
- 0x2324, 0x2011, 0x0003, 0x2009, 0x0169, 0x2104, 0x9084, 0x0007,
- 0x210c, 0x918c, 0x0007, 0x910e, 0x1db0, 0x9086, 0x0003, 0x1548,
- 0x2304, 0x0066, 0x0076, 0x2031, 0x0002, 0x233c, 0x973e, 0x0148,
- 0x8631, 0x1dd8, 0x2031, 0x1a63, 0x263c, 0x8738, 0x0208, 0x2732,
- 0x2304, 0x007e, 0x006e, 0x9402, 0x02a0, 0x19d0, 0x8211, 0x19d8,
- 0x84ff, 0x0170, 0x2001, 0x0141, 0x200c, 0x918c, 0xff00, 0x9186,
- 0x0100, 0x0130, 0x2009, 0x180c, 0x2104, 0xc0dd, 0x200a, 0x0008,
- 0x0421, 0x2001, 0x195e, 0x200c, 0x080c, 0x0e53, 0x004e, 0x003e,
- 0x0005, 0x2001, 0x180c, 0x2004, 0xd0dc, 0x01b0, 0x2001, 0x0160,
- 0x2004, 0x9005, 0x0140, 0x2001, 0x0141, 0x2004, 0x9084, 0xff00,
- 0x9086, 0x0100, 0x1148, 0x0126, 0x2091, 0x8000, 0x0016, 0x0026,
- 0x0021, 0x002e, 0x001e, 0x012e, 0x0005, 0x00c6, 0x2061, 0x0100,
- 0x6014, 0x0006, 0x2001, 0x0161, 0x2003, 0x0000, 0x6017, 0x0018,
- 0xa001, 0xa001, 0x602f, 0x0008, 0x6104, 0x918e, 0x0010, 0x6106,
- 0x918e, 0x0010, 0x6106, 0x6017, 0x0040, 0x04b9, 0x001e, 0x9184,
- 0x0003, 0x01e0, 0x0036, 0x0016, 0x2019, 0x0141, 0x6124, 0x918c,
- 0x0028, 0x1120, 0x2304, 0x9084, 0x2800, 0x0dc0, 0x001e, 0x919c,
- 0xffe4, 0x9184, 0x0001, 0x0118, 0x9385, 0x0009, 0x6016, 0x9184,
- 0x0002, 0x0118, 0x9385, 0x0012, 0x6016, 0x003e, 0x2001, 0x180c,
- 0x200c, 0xc1dc, 0x2102, 0x00ce, 0x0005, 0x0016, 0x0026, 0x080c,
- 0x72ff, 0x0108, 0xc0bc, 0x2009, 0x0140, 0x2114, 0x9294, 0x0001,
- 0x9215, 0x220a, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x2009,
- 0x0140, 0x2114, 0x9294, 0x0001, 0x9285, 0x1000, 0x200a, 0x220a,
- 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x2009, 0x0140, 0x2114,
- 0x9294, 0x0001, 0x9215, 0x220a, 0x002e, 0x001e, 0x0005, 0x0006,
- 0x0016, 0x2009, 0x0140, 0x2104, 0x1128, 0x080c, 0x72ff, 0x0110,
- 0xc0bc, 0x0008, 0xc0bd, 0x200a, 0x001e, 0x000e, 0x0005, 0x0006,
- 0x0156, 0x6050, 0x9085, 0x0040, 0x6052, 0x6050, 0x9084, 0xfbcf,
- 0x6052, 0x080c, 0x2a8d, 0x9085, 0x2000, 0x6052, 0x20a9, 0x0012,
- 0x1d04, 0x2bb0, 0x080c, 0x8454, 0x1f04, 0x2bb0, 0x6050, 0x9085,
- 0x0400, 0x9084, 0xdfbf, 0x6052, 0x015e, 0x000e, 0x0005, 0x7044,
- 0xd084, 0x1130, 0xc085, 0x7046, 0x2011, 0x8016, 0x080c, 0x4abd,
- 0x0005, 0x0016, 0x0006, 0x6027, 0x4000, 0x080c, 0xd348, 0x2001,
- 0x19d3, 0x2004, 0x00c6, 0x9065, 0x090c, 0x0dc4, 0x0096, 0x6014,
- 0x2048, 0x080c, 0xb955, 0x0178, 0xa884, 0xc0dd, 0xa886, 0x6020,
- 0x9086, 0x0006, 0x1140, 0x2001, 0x0132, 0x200c, 0x2001, 0x0131,
- 0x2004, 0xa99a, 0xa89e, 0x009e, 0x080c, 0xb5c5, 0x00ce, 0x000e,
- 0x001e, 0x0005, 0x2e5e, 0x2e5e, 0x2c82, 0x2c82, 0x2c8e, 0x2c8e,
- 0x2c9a, 0x2c9a, 0x2ca8, 0x2ca8, 0x2cb4, 0x2cb4, 0x2cc2, 0x2cc2,
- 0x2cd0, 0x2cd0, 0x2ce2, 0x2ce2, 0x2cee, 0x2cee, 0x2cfc, 0x2cfc,
- 0x2d1a, 0x2d1a, 0x2d3a, 0x2d3a, 0x2d0a, 0x2d0a, 0x2d2a, 0x2d2a,
- 0x2d48, 0x2d48, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0,
- 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0,
- 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0,
- 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0,
- 0x2ce0, 0x2ce0, 0x2d5a, 0x2d5a, 0x2d66, 0x2d66, 0x2d74, 0x2d74,
- 0x2d82, 0x2d82, 0x2d92, 0x2d92, 0x2da0, 0x2da0, 0x2db0, 0x2db0,
- 0x2dc0, 0x2dc0, 0x2dd2, 0x2dd2, 0x2de0, 0x2de0, 0x2df0, 0x2df0,
- 0x2e12, 0x2e12, 0x2e34, 0x2e34, 0x2e00, 0x2e00, 0x2e23, 0x2e23,
- 0x2e43, 0x2e43, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0,
- 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0,
- 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0,
- 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0,
- 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0,
- 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0, 0x2ce0,
- 0x2ce0, 0x2ce0, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
- 0x0146, 0x0156, 0x080c, 0x2365, 0x0804, 0x2e56, 0x0106, 0x0006,
- 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2175,
- 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
- 0x0146, 0x0156, 0x080c, 0x2175, 0x080c, 0x2365, 0x0804, 0x2e56,
- 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
- 0x080c, 0x21b0, 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6,
- 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2365, 0x080c, 0x21b0,
- 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
- 0x0146, 0x0156, 0x080c, 0x2175, 0x080c, 0x21b0, 0x0804, 0x2e56,
- 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
- 0x080c, 0x2175, 0x080c, 0x2365, 0x080c, 0x21b0, 0x0804, 0x2e56,
- 0xa001, 0x0cf0, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
- 0x0146, 0x0156, 0x080c, 0x132a, 0x0804, 0x2e56, 0x0106, 0x0006,
- 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2365,
- 0x080c, 0x132a, 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6,
- 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x2175, 0x080c, 0x132a,
- 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
- 0x0146, 0x0156, 0x080c, 0x2365, 0x080c, 0x132a, 0x080c, 0x21b0,
- 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
- 0x0146, 0x0156, 0x080c, 0x2175, 0x080c, 0x2365, 0x080c, 0x132a,
- 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
- 0x0146, 0x0156, 0x080c, 0x2175, 0x080c, 0x132a, 0x080c, 0x21b0,
- 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
- 0x0146, 0x0156, 0x080c, 0x132a, 0x080c, 0x21b0, 0x0804, 0x2e56,
- 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
- 0x080c, 0x2175, 0x080c, 0x2365, 0x080c, 0x132a, 0x080c, 0x21b0,
- 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
- 0x0146, 0x0156, 0x080c, 0x27a2, 0x0804, 0x2e56, 0x0106, 0x0006,
- 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x27a2,
- 0x080c, 0x2365, 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6,
- 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x27a2, 0x080c, 0x2175,
- 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
- 0x0146, 0x0156, 0x080c, 0x27a2, 0x080c, 0x2175, 0x080c, 0x2365,
- 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
- 0x0146, 0x0156, 0x080c, 0x27a2, 0x080c, 0x21b0, 0x0804, 0x2e56,
- 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
- 0x080c, 0x27a2, 0x080c, 0x2365, 0x080c, 0x21b0, 0x0804, 0x2e56,
- 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
- 0x080c, 0x27a2, 0x080c, 0x2175, 0x080c, 0x21b0, 0x0804, 0x2e56,
- 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
- 0x080c, 0x27a2, 0x080c, 0x2175, 0x080c, 0x2365, 0x080c, 0x21b0,
- 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
- 0x0146, 0x0156, 0x080c, 0x27a2, 0x080c, 0x132a, 0x0804, 0x2e56,
- 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
- 0x080c, 0x27a2, 0x080c, 0x2365, 0x080c, 0x132a, 0x0804, 0x2e56,
- 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
- 0x080c, 0x27a2, 0x080c, 0x2175, 0x080c, 0x132a, 0x0804, 0x2e56,
- 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156,
- 0x080c, 0x27a2, 0x080c, 0x2365, 0x080c, 0x132a, 0x080c, 0x21b0,
- 0x0804, 0x2e56, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
- 0x0146, 0x0156, 0x080c, 0x27a2, 0x080c, 0x2175, 0x080c, 0x2365,
- 0x080c, 0x132a, 0x0498, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
- 0x0136, 0x0146, 0x0156, 0x080c, 0x27a2, 0x080c, 0x2175, 0x080c,
- 0x132a, 0x080c, 0x21b0, 0x0410, 0x0106, 0x0006, 0x0126, 0x01c6,
- 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x27a2, 0x080c, 0x132a,
- 0x080c, 0x21b0, 0x0098, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
- 0x0136, 0x0146, 0x0156, 0x080c, 0x27a2, 0x080c, 0x2175, 0x080c,
- 0x2365, 0x080c, 0x132a, 0x080c, 0x21b0, 0x0000, 0x015e, 0x014e,
- 0x013e, 0x01de, 0x01ce, 0x012e, 0x000e, 0x010e, 0x000d, 0x00b6,
- 0x00c6, 0x0026, 0x0046, 0x9026, 0x080c, 0x6704, 0x1904, 0x2f62,
- 0x72d8, 0x2001, 0x1959, 0x2004, 0x9005, 0x1110, 0xd29c, 0x0148,
- 0xd284, 0x1138, 0xd2bc, 0x1904, 0x2f62, 0x080c, 0x2f67, 0x0804,
- 0x2f62, 0xd2cc, 0x1904, 0x2f62, 0x080c, 0x72e5, 0x1120, 0x70ab,
- 0xffff, 0x0804, 0x2f62, 0xd294, 0x0120, 0x70ab, 0xffff, 0x0804,
- 0x2f62, 0x080c, 0x31bb, 0x0160, 0x080c, 0xbef8, 0x0128, 0x2001,
- 0x1817, 0x203c, 0x0804, 0x2ef3, 0x70ab, 0xffff, 0x0804, 0x2f62,
- 0x2001, 0x1817, 0x203c, 0x7290, 0xd284, 0x0904, 0x2ef3, 0xd28c,
- 0x1904, 0x2ef3, 0x0036, 0x73a8, 0x938e, 0xffff, 0x1110, 0x2019,
- 0x0001, 0x8314, 0x92e0, 0x1c80, 0x2c04, 0x938c, 0x0001, 0x0120,
- 0x9084, 0xff00, 0x8007, 0x0010, 0x9084, 0x00ff, 0x970e, 0x0588,
- 0x908e, 0x0000, 0x0570, 0x908e, 0x00ff, 0x1150, 0x080c, 0x31c0,
- 0x1568, 0x7290, 0xc28d, 0x7292, 0x70ab, 0xffff, 0x003e, 0x0458,
- 0x2009, 0x180d, 0x210c, 0xd18c, 0x0150, 0x0026, 0x2011, 0x0010,
- 0x080c, 0x6781, 0x002e, 0x0118, 0x70ab, 0xffff, 0x00c8, 0x900e,
- 0x080c, 0x269f, 0x080c, 0x63c1, 0x1178, 0x080c, 0x6746, 0x1120,
- 0x080c, 0x2f80, 0x0148, 0x0028, 0x080c, 0x30ab, 0x080c, 0x2fac,
- 0x0118, 0x8318, 0x0804, 0x2ea9, 0x73aa, 0x0010, 0x70ab, 0xffff,
- 0x003e, 0x0804, 0x2f62, 0x9780, 0x31cc, 0x203d, 0x97bc, 0xff00,
+ 0xdd18, 0x001e, 0xd1ac, 0x1148, 0x0016, 0x2009, 0x0002, 0x2019,
+ 0x0004, 0x080c, 0x30cd, 0x001e, 0x00a8, 0x0156, 0x00b6, 0x20a9,
+ 0x007f, 0x900e, 0x080c, 0x64fc, 0x1140, 0x7030, 0xd084, 0x1118,
+ 0xb800, 0xd0bc, 0x1110, 0x080c, 0x5fcd, 0x8108, 0x1f04, 0x2542,
+ 0x00be, 0x015e, 0x00ce, 0x004e, 0x080c, 0xa30e, 0x60e3, 0x0000,
+ 0x001e, 0x2001, 0x1800, 0x2014, 0x9296, 0x0004, 0x1170, 0xd19c,
+ 0x11a0, 0x2011, 0x180c, 0x2214, 0xd29c, 0x1120, 0x6204, 0x9295,
+ 0x0002, 0x6206, 0x6228, 0xc29d, 0x622a, 0x2003, 0x0001, 0x2001,
+ 0x1825, 0x2003, 0x0000, 0x6027, 0x0020, 0xd194, 0x0904, 0x2654,
+ 0x0016, 0x6220, 0xd2b4, 0x0904, 0x25fd, 0x080c, 0x858c, 0x080c,
+ 0x98d1, 0x6027, 0x0004, 0x00f6, 0x2019, 0x19cd, 0x2304, 0x907d,
+ 0x0904, 0x25cc, 0x7804, 0x9086, 0x0032, 0x15f0, 0x00d6, 0x00c6,
+ 0x00e6, 0x0096, 0x2069, 0x0140, 0x782c, 0x685e, 0x7808, 0x685a,
+ 0x6043, 0x0002, 0x2001, 0x0003, 0x8001, 0x1df0, 0x6043, 0x0000,
+ 0x2001, 0x003c, 0x8001, 0x1df0, 0x080c, 0x2bde, 0x2001, 0x001e,
+ 0x8001, 0x0240, 0x20a9, 0x0009, 0x080c, 0x2ad7, 0x6904, 0xd1dc,
+ 0x1140, 0x0cb0, 0x2001, 0x0100, 0x080c, 0x2bce, 0x9006, 0x080c,
+ 0x2bce, 0x080c, 0x8d2c, 0x080c, 0x8e38, 0x7814, 0x2048, 0xa86b,
+ 0x0103, 0x2f60, 0x080c, 0xa39d, 0x009e, 0x00ee, 0x00ce, 0x00de,
+ 0x00fe, 0x001e, 0x00ae, 0x0005, 0x00fe, 0x00d6, 0x2069, 0x0140,
+ 0x6804, 0x9084, 0x4000, 0x0110, 0x080c, 0x2bde, 0x00de, 0x00c6,
+ 0x2061, 0x19c4, 0x6028, 0x080c, 0xc8ce, 0x0120, 0x909a, 0x0003,
+ 0x1258, 0x0018, 0x909a, 0x00c8, 0x1238, 0x8000, 0x602a, 0x00ce,
+ 0x080c, 0x98ad, 0x0804, 0x2653, 0x2061, 0x0100, 0x62c0, 0x080c,
+ 0xa194, 0x2019, 0x19cd, 0x2304, 0x9065, 0x0120, 0x2009, 0x0027,
+ 0x080c, 0xa419, 0x00ce, 0x0804, 0x2653, 0xd2bc, 0x0904, 0x2640,
+ 0x080c, 0x8599, 0x6014, 0x9084, 0x1984, 0x9085, 0x0010, 0x6016,
+ 0x6027, 0x0004, 0x00d6, 0x2069, 0x0140, 0x6804, 0x9084, 0x4000,
+ 0x0110, 0x080c, 0x2bde, 0x00de, 0x00c6, 0x2061, 0x19c4, 0x6044,
+ 0x080c, 0xc8ce, 0x0120, 0x909a, 0x0003, 0x1628, 0x0018, 0x909a,
+ 0x00c8, 0x1608, 0x8000, 0x6046, 0x603c, 0x00ce, 0x9005, 0x0558,
+ 0x2009, 0x07d0, 0x080c, 0x8591, 0x9080, 0x0008, 0x2004, 0x9086,
+ 0x0006, 0x1138, 0x6114, 0x918c, 0x1984, 0x918d, 0x0012, 0x6116,
+ 0x00d0, 0x6114, 0x918c, 0x1984, 0x918d, 0x0016, 0x6116, 0x0098,
+ 0x6027, 0x0004, 0x0080, 0x0036, 0x2019, 0x0001, 0x080c, 0x9c35,
+ 0x003e, 0x2019, 0x19d3, 0x2304, 0x9065, 0x0120, 0x2009, 0x004f,
+ 0x080c, 0xa419, 0x00ce, 0x001e, 0xd19c, 0x0904, 0x26ac, 0x7038,
+ 0xd0ac, 0x1538, 0x0016, 0x0156, 0x6027, 0x0008, 0x080c, 0x2c08,
+ 0x20a9, 0x0028, 0xa001, 0x1f04, 0x2662, 0x6150, 0x9185, 0x1400,
+ 0x6052, 0x20a9, 0x0366, 0x1d04, 0x266b, 0x080c, 0x85c0, 0x6020,
+ 0xd09c, 0x1130, 0x015e, 0x6152, 0x001e, 0x6027, 0x0008, 0x04a0,
+ 0x080c, 0x2abe, 0x1f04, 0x266b, 0x015e, 0x6152, 0x001e, 0x6027,
+ 0x0008, 0x0016, 0x6028, 0xc09c, 0x602a, 0x080c, 0xa30e, 0x60e3,
+ 0x0000, 0x080c, 0xe0c9, 0x080c, 0xe100, 0x080c, 0x5668, 0xd0fc,
+ 0x1138, 0x080c, 0xc8c7, 0x1120, 0x9085, 0x0001, 0x080c, 0x7395,
+ 0x9006, 0x080c, 0x2bce, 0x2009, 0x0002, 0x080c, 0x2afc, 0x00e6,
+ 0x2071, 0x1800, 0x7003, 0x0004, 0x080c, 0x0ea2, 0x00ee, 0x6027,
+ 0x0008, 0x080c, 0x0b9e, 0x001e, 0x918c, 0xffd0, 0x6126, 0x00ae,
+ 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00e6, 0x00f6, 0x0126,
+ 0x2091, 0x8000, 0x2071, 0x1800, 0x71cc, 0x70ce, 0x9116, 0x0904,
+ 0x2700, 0x81ff, 0x01a0, 0x2009, 0x0000, 0x080c, 0x2afc, 0x2011,
+ 0x8011, 0x2019, 0x010e, 0x231c, 0x939e, 0x0007, 0x1118, 0x2019,
+ 0x0001, 0x0010, 0x2019, 0x0000, 0x080c, 0x4b6d, 0x0448, 0x2001,
+ 0x1985, 0x200c, 0x81ff, 0x1140, 0x2001, 0x0109, 0x2004, 0xd0b4,
+ 0x0118, 0x2019, 0x0003, 0x0008, 0x2118, 0x2011, 0x8012, 0x080c,
+ 0x4b6d, 0x080c, 0x0ea2, 0x080c, 0x5668, 0xd0fc, 0x1188, 0x080c,
+ 0xc8c7, 0x1170, 0x00c6, 0x080c, 0x279c, 0x080c, 0x9b9c, 0x2061,
+ 0x0100, 0x2019, 0x0028, 0x2009, 0x0002, 0x080c, 0x30cd, 0x00ce,
+ 0x012e, 0x00fe, 0x00ee, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005,
+ 0x2028, 0x918c, 0x00ff, 0x2130, 0x9094, 0xff00, 0x11f0, 0x2011,
+ 0x1836, 0x2214, 0xd2ac, 0x11c8, 0x81ff, 0x01e8, 0x2011, 0x181e,
+ 0x2204, 0x9106, 0x1190, 0x2011, 0x181f, 0x2214, 0x9294, 0xff00,
+ 0x9584, 0xff00, 0x9206, 0x1148, 0x2011, 0x181f, 0x2214, 0x9294,
+ 0x00ff, 0x9584, 0x00ff, 0x9206, 0x1120, 0x2500, 0x080c, 0x8050,
+ 0x0048, 0x9584, 0x00ff, 0x9080, 0x3268, 0x200d, 0x918c, 0xff00,
+ 0x810f, 0x9006, 0x0005, 0x9080, 0x3268, 0x200d, 0x918c, 0x00ff,
+ 0x0005, 0x00d6, 0x2069, 0x0140, 0x2001, 0x1817, 0x2003, 0x00ef,
+ 0x20a9, 0x0010, 0x9006, 0x6852, 0x6856, 0x1f04, 0x274c, 0x00de,
+ 0x0005, 0x0006, 0x00d6, 0x0026, 0x2069, 0x0140, 0x2001, 0x1817,
+ 0x2102, 0x8114, 0x8214, 0x8214, 0x8214, 0x20a9, 0x0010, 0x6853,
+ 0x0000, 0x9006, 0x82ff, 0x1128, 0x9184, 0x000f, 0x9080, 0xe5de,
+ 0x2005, 0x6856, 0x8211, 0x1f04, 0x2761, 0x002e, 0x00de, 0x000e,
+ 0x0005, 0x00c6, 0x2061, 0x1800, 0x6030, 0x0110, 0xc09d, 0x0008,
+ 0xc09c, 0x6032, 0x00ce, 0x0005, 0x0156, 0x00d6, 0x0026, 0x0016,
+ 0x0006, 0x2069, 0x0140, 0x6980, 0x9116, 0x0180, 0x9112, 0x1230,
+ 0x8212, 0x8210, 0x22a8, 0x2001, 0x0402, 0x0018, 0x22a8, 0x2001,
+ 0x0404, 0x680e, 0x1f04, 0x2791, 0x680f, 0x0000, 0x000e, 0x001e,
+ 0x002e, 0x00de, 0x015e, 0x0005, 0x080c, 0x5664, 0xd0c4, 0x0150,
+ 0xd0a4, 0x0140, 0x9006, 0x0046, 0x2020, 0x2009, 0x002e, 0x080c,
+ 0xdd18, 0x004e, 0x0005, 0x00f6, 0x0016, 0x0026, 0x2079, 0x0140,
+ 0x78c4, 0xd0dc, 0x0904, 0x2808, 0x080c, 0x2a5b, 0x0660, 0x9084,
+ 0x0700, 0x908e, 0x0600, 0x1120, 0x2011, 0x4000, 0x900e, 0x0458,
+ 0x908e, 0x0500, 0x1120, 0x2011, 0x8000, 0x900e, 0x0420, 0x908e,
+ 0x0400, 0x1120, 0x9016, 0x2009, 0x0001, 0x00e8, 0x908e, 0x0300,
+ 0x1120, 0x9016, 0x2009, 0x0002, 0x00b0, 0x908e, 0x0200, 0x1120,
+ 0x9016, 0x2009, 0x0004, 0x0078, 0x908e, 0x0100, 0x1548, 0x9016,
+ 0x2009, 0x0008, 0x0040, 0x9084, 0x0700, 0x908e, 0x0300, 0x1500,
+ 0x2011, 0x0030, 0x0058, 0x2300, 0x9080, 0x0020, 0x2018, 0x080c,
+ 0x871c, 0x928c, 0xff00, 0x0110, 0x2011, 0x00ff, 0x2200, 0x8007,
+ 0x9085, 0x004c, 0x78c2, 0x2009, 0x0138, 0x220a, 0x080c, 0x7351,
+ 0x1118, 0x2009, 0x1949, 0x220a, 0x002e, 0x001e, 0x00fe, 0x0005,
+ 0x78c3, 0x0000, 0x0cc8, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016,
+ 0x0026, 0x2001, 0x0170, 0x200c, 0x8000, 0x2014, 0x9184, 0x0003,
+ 0x0110, 0x080c, 0x0dbc, 0x002e, 0x001e, 0x000e, 0x012e, 0x0005,
+ 0x2001, 0x180d, 0x2004, 0xd08c, 0x0118, 0x2009, 0x0002, 0x0005,
+ 0x2001, 0x0171, 0x2004, 0xd0dc, 0x0168, 0x2001, 0x0170, 0x200c,
+ 0x918c, 0x00ff, 0x918e, 0x004c, 0x1128, 0x200c, 0x918c, 0xff00,
+ 0x810f, 0x0005, 0x900e, 0x2001, 0x0227, 0x2004, 0x8007, 0x9084,
+ 0x00ff, 0x8004, 0x9108, 0x2001, 0x0226, 0x2004, 0x8007, 0x9084,
+ 0x00ff, 0x8004, 0x9108, 0x0005, 0x0018, 0x000c, 0x0018, 0x0020,
+ 0x1000, 0x0800, 0x1000, 0x1800, 0x0156, 0x0006, 0x0016, 0x0026,
+ 0x00e6, 0x2001, 0x196c, 0x2004, 0x908a, 0x0007, 0x1a0c, 0x0dc3,
+ 0x0033, 0x00ee, 0x002e, 0x001e, 0x000e, 0x015e, 0x0005, 0x286e,
+ 0x288c, 0x28b0, 0x28b2, 0x28db, 0x28dd, 0x28df, 0x2001, 0x0001,
+ 0x080c, 0x26b1, 0x080c, 0x2ab9, 0x2001, 0x196e, 0x2003, 0x0000,
+ 0x7828, 0x9084, 0xe1d7, 0x782a, 0x9006, 0x20a9, 0x0009, 0x080c,
+ 0x2a77, 0x2001, 0x196c, 0x2003, 0x0006, 0x2009, 0x001e, 0x2011,
+ 0x28e0, 0x080c, 0x859e, 0x0005, 0x2009, 0x1971, 0x200b, 0x0000,
+ 0x2001, 0x1976, 0x2003, 0x0036, 0x2001, 0x1975, 0x2003, 0x002a,
+ 0x2001, 0x196e, 0x2003, 0x0001, 0x9006, 0x080c, 0x2a29, 0x2001,
+ 0xffff, 0x20a9, 0x0009, 0x080c, 0x2a77, 0x2001, 0x196c, 0x2003,
+ 0x0006, 0x2009, 0x001e, 0x2011, 0x28e0, 0x080c, 0x859e, 0x0005,
+ 0x080c, 0x0dc3, 0x2001, 0x1976, 0x2003, 0x0036, 0x2001, 0x196e,
+ 0x2003, 0x0003, 0x7a38, 0x9294, 0x0005, 0x9296, 0x0004, 0x0110,
+ 0x9006, 0x0010, 0x2001, 0x0001, 0x080c, 0x2a29, 0x2001, 0x1972,
+ 0x2003, 0x0000, 0x2001, 0xffff, 0x20a9, 0x0009, 0x080c, 0x2a77,
+ 0x2001, 0x196c, 0x2003, 0x0006, 0x2009, 0x001e, 0x2011, 0x28e0,
+ 0x080c, 0x859e, 0x0005, 0x080c, 0x0dc3, 0x080c, 0x0dc3, 0x0005,
+ 0x0006, 0x0016, 0x0026, 0x00e6, 0x00f6, 0x0156, 0x0126, 0x2091,
+ 0x8000, 0x2079, 0x0100, 0x2001, 0x196e, 0x2004, 0x908a, 0x0007,
+ 0x1a0c, 0x0dc3, 0x0043, 0x012e, 0x015e, 0x00fe, 0x00ee, 0x002e,
+ 0x001e, 0x000e, 0x0005, 0x2902, 0x291e, 0x295a, 0x2986, 0x29a6,
+ 0x29b2, 0x29b4, 0x080c, 0x2a6b, 0x1190, 0x2009, 0x1974, 0x2104,
+ 0x7a38, 0x9294, 0x0005, 0x9296, 0x0004, 0x0110, 0xc08d, 0x0008,
+ 0xc085, 0x200a, 0x2001, 0x196c, 0x2003, 0x0001, 0x0030, 0x080c,
+ 0x29d8, 0x2001, 0xffff, 0x080c, 0x287d, 0x0005, 0x080c, 0x29b6,
+ 0x05c0, 0x2009, 0x1975, 0x2104, 0x8001, 0x200a, 0x080c, 0x2a6b,
+ 0x1158, 0x7a38, 0x9294, 0x0005, 0x9296, 0x0005, 0x0518, 0x2009,
+ 0x1974, 0x2104, 0xc085, 0x200a, 0x2009, 0x1971, 0x2104, 0x8000,
+ 0x200a, 0x9086, 0x0005, 0x0118, 0x080c, 0x29be, 0x00c0, 0x200b,
+ 0x0000, 0x7a38, 0x9294, 0x0006, 0x9296, 0x0004, 0x0110, 0x9006,
+ 0x0010, 0x2001, 0x0001, 0x080c, 0x2a46, 0x2001, 0x196e, 0x2003,
+ 0x0002, 0x0028, 0x2001, 0x196c, 0x2003, 0x0003, 0x0010, 0x080c,
+ 0x289f, 0x0005, 0x080c, 0x29b6, 0x0540, 0x2009, 0x1975, 0x2104,
+ 0x8001, 0x200a, 0x080c, 0x2a6b, 0x1148, 0x2001, 0x196c, 0x2003,
+ 0x0003, 0x2001, 0x196d, 0x2003, 0x0000, 0x00b8, 0x2009, 0x1975,
+ 0x2104, 0x9005, 0x1118, 0x080c, 0x29fb, 0x0010, 0x080c, 0x29cb,
+ 0x080c, 0x29be, 0x2009, 0x1971, 0x200b, 0x0000, 0x2001, 0x196e,
+ 0x2003, 0x0001, 0x080c, 0x289f, 0x0000, 0x0005, 0x0479, 0x01e8,
+ 0x080c, 0x2a6b, 0x1198, 0x2009, 0x1972, 0x2104, 0x8000, 0x200a,
+ 0x9086, 0x0007, 0x0108, 0x0078, 0x2001, 0x1977, 0x2003, 0x000a,
+ 0x2009, 0x1974, 0x2104, 0xc0fd, 0x200a, 0x0038, 0x00f9, 0x2001,
+ 0x196e, 0x2003, 0x0004, 0x080c, 0x28ca, 0x0005, 0x0079, 0x0148,
+ 0x080c, 0x2a6b, 0x1118, 0x080c, 0x28b6, 0x0018, 0x0079, 0x080c,
+ 0x28ca, 0x0005, 0x080c, 0x0dc3, 0x080c, 0x0dc3, 0x2009, 0x1976,
+ 0x2104, 0x8001, 0x200a, 0x090c, 0x2a17, 0x0005, 0x7a38, 0x9294,
+ 0x0005, 0x9296, 0x0005, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001,
+ 0x080c, 0x2a46, 0x0005, 0x7a38, 0x9294, 0x0006, 0x9296, 0x0006,
+ 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x080c, 0x2a29, 0x0005,
+ 0x2009, 0x1971, 0x2104, 0x8000, 0x200a, 0x9086, 0x0005, 0x0108,
+ 0x0068, 0x200b, 0x0000, 0x7a38, 0x9294, 0x0006, 0x9296, 0x0006,
+ 0x0110, 0x9006, 0x0010, 0x2001, 0x0001, 0x04d9, 0x7a38, 0x9294,
+ 0x0005, 0x9296, 0x0005, 0x0110, 0x9006, 0x0010, 0x2001, 0x0001,
+ 0x080c, 0x2a46, 0x0005, 0x0086, 0x2001, 0x1974, 0x2004, 0x9084,
+ 0x7fff, 0x090c, 0x0dc3, 0x2009, 0x1973, 0x2144, 0x8846, 0x280a,
+ 0x9844, 0x0dd8, 0xd08c, 0x1120, 0xd084, 0x1120, 0x080c, 0x0dc3,
+ 0x9006, 0x0010, 0x2001, 0x0001, 0x00a1, 0x008e, 0x0005, 0x0006,
+ 0x0156, 0x2001, 0x196c, 0x20a9, 0x0009, 0x2003, 0x0000, 0x8000,
+ 0x1f04, 0x2a1d, 0x2001, 0x1973, 0x2003, 0x8000, 0x015e, 0x000e,
+ 0x0005, 0x00f6, 0x2079, 0x0100, 0x9085, 0x0000, 0x0158, 0x7838,
+ 0x9084, 0xfff9, 0x9085, 0x0004, 0x783a, 0x2009, 0x1979, 0x210c,
+ 0x795a, 0x0050, 0x7838, 0x9084, 0xfffb, 0x9085, 0x0006, 0x783a,
+ 0x2009, 0x197a, 0x210c, 0x795a, 0x00fe, 0x0005, 0x00f6, 0x2079,
+ 0x0100, 0x9085, 0x0000, 0x0138, 0x7838, 0x9084, 0xfffa, 0x9085,
+ 0x0004, 0x783a, 0x0030, 0x7838, 0x9084, 0xfffb, 0x9085, 0x0005,
+ 0x783a, 0x00fe, 0x0005, 0x0006, 0x2001, 0x0100, 0x2004, 0x9082,
+ 0x0007, 0x000e, 0x0005, 0x0006, 0x2001, 0x0100, 0x2004, 0x9082,
+ 0x0009, 0x000e, 0x0005, 0x0156, 0x20a9, 0x0064, 0x7820, 0x080c,
+ 0x2af6, 0xd09c, 0x1110, 0x1f04, 0x2a6e, 0x015e, 0x0005, 0x0126,
+ 0x0016, 0x0006, 0x2091, 0x8000, 0x7850, 0x9085, 0x0040, 0x7852,
+ 0x7850, 0x9084, 0xfbcf, 0x7852, 0x080c, 0x2af6, 0x9085, 0x2000,
+ 0x7852, 0x000e, 0x2008, 0x9186, 0x0000, 0x1118, 0x783b, 0x0007,
+ 0x0090, 0x9186, 0x0001, 0x1118, 0x783b, 0x0006, 0x0060, 0x9186,
+ 0x0002, 0x1118, 0x783b, 0x0005, 0x0030, 0x9186, 0x0003, 0x1118,
+ 0x783b, 0x0004, 0x0000, 0x0006, 0x1d04, 0x2aa4, 0x080c, 0x85c0,
+ 0x1f04, 0x2aa4, 0x7850, 0x9085, 0x0400, 0x9084, 0xdfbf, 0x7852,
+ 0x080c, 0x2af6, 0x9085, 0x1000, 0x7852, 0x000e, 0x001e, 0x012e,
+ 0x0005, 0x7850, 0x9084, 0xffcf, 0x7852, 0x0005, 0x0006, 0x0156,
+ 0x00f6, 0x2079, 0x0100, 0x20a9, 0x000a, 0x7854, 0xd0ac, 0x1130,
+ 0x7820, 0xd0e4, 0x1140, 0x1f04, 0x2ac8, 0x0028, 0x7854, 0xd08c,
+ 0x1110, 0x1f04, 0x2ace, 0x00fe, 0x015e, 0x000e, 0x0005, 0x1d04,
+ 0x2ad7, 0x080c, 0x85c0, 0x1f04, 0x2ad7, 0x0005, 0x0006, 0x2001,
+ 0x1978, 0x2004, 0x9086, 0x0000, 0x000e, 0x0005, 0x0006, 0x2001,
+ 0x1978, 0x2004, 0x9086, 0x0001, 0x000e, 0x0005, 0x0006, 0x2001,
+ 0x1978, 0x2004, 0x9086, 0x0002, 0x000e, 0x0005, 0xa001, 0xa001,
+ 0xa001, 0xa001, 0xa001, 0x0005, 0x0006, 0x2001, 0x1985, 0x2102,
+ 0x000e, 0x0005, 0x2009, 0x0171, 0x2104, 0xd0dc, 0x0140, 0x2009,
+ 0x0170, 0x2104, 0x200b, 0x0080, 0xa001, 0xa001, 0x200a, 0x0005,
+ 0x0036, 0x0046, 0x2001, 0x0141, 0x200c, 0x918c, 0xff00, 0x9186,
+ 0x2100, 0x0140, 0x9186, 0x2000, 0x0170, 0x9186, 0x0100, 0x1904,
+ 0x2b6f, 0x0048, 0x0016, 0x2009, 0x1a62, 0x2104, 0x8000, 0x0208,
+ 0x200a, 0x001e, 0x04f0, 0x2009, 0x00a2, 0x080c, 0x0e51, 0x2019,
+ 0x0160, 0x2324, 0x2011, 0x0003, 0x2009, 0x0169, 0x2104, 0x9084,
+ 0x0007, 0x210c, 0x918c, 0x0007, 0x910e, 0x1db0, 0x9086, 0x0003,
+ 0x1548, 0x2304, 0x0066, 0x0076, 0x2031, 0x0002, 0x233c, 0x973e,
+ 0x0148, 0x8631, 0x1dd8, 0x2031, 0x1a63, 0x263c, 0x8738, 0x0208,
+ 0x2732, 0x2304, 0x007e, 0x006e, 0x9402, 0x02a0, 0x19d0, 0x8211,
+ 0x19d8, 0x84ff, 0x0170, 0x2001, 0x0141, 0x200c, 0x918c, 0xff00,
+ 0x9186, 0x0100, 0x0130, 0x2009, 0x180c, 0x2104, 0xc0dd, 0x200a,
+ 0x0008, 0x0421, 0x2001, 0x195d, 0x200c, 0x080c, 0x0e51, 0x004e,
+ 0x003e, 0x0005, 0x2001, 0x180c, 0x2004, 0xd0dc, 0x01b0, 0x2001,
+ 0x0160, 0x2004, 0x9005, 0x0140, 0x2001, 0x0141, 0x2004, 0x9084,
+ 0xff00, 0x9086, 0x0100, 0x1148, 0x0126, 0x2091, 0x8000, 0x0016,
+ 0x0026, 0x0021, 0x002e, 0x001e, 0x012e, 0x0005, 0x00c6, 0x2061,
+ 0x0100, 0x6014, 0x0006, 0x2001, 0x0161, 0x2003, 0x0000, 0x6017,
+ 0x0018, 0xa001, 0xa001, 0x602f, 0x0008, 0x6104, 0x918e, 0x0010,
+ 0x6106, 0x918e, 0x0010, 0x6106, 0x6017, 0x0040, 0x04b9, 0x001e,
+ 0x9184, 0x0003, 0x01e0, 0x0036, 0x0016, 0x2019, 0x0141, 0x6124,
+ 0x918c, 0x0028, 0x1120, 0x2304, 0x9084, 0x2800, 0x0dc0, 0x001e,
+ 0x919c, 0xffe4, 0x9184, 0x0001, 0x0118, 0x9385, 0x0009, 0x6016,
+ 0x9184, 0x0002, 0x0118, 0x9385, 0x0012, 0x6016, 0x003e, 0x2001,
+ 0x180c, 0x200c, 0xc1dc, 0x2102, 0x00ce, 0x0005, 0x0016, 0x0026,
+ 0x080c, 0x736b, 0x0108, 0xc0bc, 0x2009, 0x0140, 0x2114, 0x9294,
+ 0x0001, 0x9215, 0x220a, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026,
+ 0x2009, 0x0140, 0x2114, 0x9294, 0x0001, 0x9285, 0x1000, 0x200a,
+ 0x220a, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x2009, 0x0140,
+ 0x2114, 0x9294, 0x0001, 0x9215, 0x220a, 0x002e, 0x001e, 0x0005,
+ 0x0006, 0x0016, 0x2009, 0x0140, 0x2104, 0x1128, 0x080c, 0x736b,
+ 0x0110, 0xc0bc, 0x0008, 0xc0bd, 0x200a, 0x001e, 0x000e, 0x0005,
+ 0x0006, 0x0156, 0x6050, 0x9085, 0x0040, 0x6052, 0x6050, 0x9084,
+ 0xfbcf, 0x6052, 0x080c, 0x2af6, 0x9085, 0x2000, 0x6052, 0x20a9,
+ 0x0012, 0x1d04, 0x2c19, 0x080c, 0x85c0, 0x1f04, 0x2c19, 0x6050,
+ 0x9085, 0x0400, 0x9084, 0xdfbf, 0x6052, 0x015e, 0x000e, 0x0005,
+ 0x7044, 0xd084, 0x1130, 0xc085, 0x7046, 0x2011, 0x8016, 0x080c,
+ 0x4b6d, 0x0005, 0x0016, 0x0006, 0x6027, 0x4000, 0x080c, 0xe0d5,
+ 0x2001, 0x19d3, 0x2004, 0x00c6, 0x9065, 0x090c, 0x0dc3, 0x0096,
+ 0x6014, 0x2048, 0x080c, 0xc1cd, 0x0178, 0xa884, 0xc0dd, 0xa886,
+ 0x6020, 0x9086, 0x0006, 0x1140, 0x2001, 0x0132, 0x200c, 0x2001,
+ 0x0131, 0x2004, 0xa99a, 0xa89e, 0x009e, 0x6020, 0x9086, 0x0003,
+ 0x1150, 0x080c, 0x6823, 0x0138, 0x2031, 0x0001, 0x080c, 0xbe31,
+ 0x080c, 0xc4fe, 0x0010, 0x080c, 0xbde5, 0x00ce, 0x000e, 0x001e,
+ 0x0005, 0x2ed5, 0x2ed5, 0x2cf9, 0x2cf9, 0x2d05, 0x2d05, 0x2d11,
+ 0x2d11, 0x2d1f, 0x2d1f, 0x2d2b, 0x2d2b, 0x2d39, 0x2d39, 0x2d47,
+ 0x2d47, 0x2d59, 0x2d59, 0x2d65, 0x2d65, 0x2d73, 0x2d73, 0x2d91,
+ 0x2d91, 0x2db1, 0x2db1, 0x2d81, 0x2d81, 0x2da1, 0x2da1, 0x2dbf,
+ 0x2dbf, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57,
+ 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57,
+ 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57,
+ 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57,
+ 0x2d57, 0x2dd1, 0x2dd1, 0x2ddd, 0x2ddd, 0x2deb, 0x2deb, 0x2df9,
+ 0x2df9, 0x2e09, 0x2e09, 0x2e17, 0x2e17, 0x2e27, 0x2e27, 0x2e37,
+ 0x2e37, 0x2e49, 0x2e49, 0x2e57, 0x2e57, 0x2e67, 0x2e67, 0x2e89,
+ 0x2e89, 0x2eab, 0x2eab, 0x2e77, 0x2e77, 0x2e9a, 0x2e9a, 0x2eba,
+ 0x2eba, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57,
+ 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57,
+ 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57,
+ 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57,
+ 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57,
+ 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57, 0x2d57,
+ 0x2d57, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+ 0x0156, 0x080c, 0x23ad, 0x0804, 0x2ecd, 0x0106, 0x0006, 0x0126,
+ 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x21bd, 0x0804,
+ 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+ 0x0156, 0x080c, 0x21bd, 0x080c, 0x23ad, 0x0804, 0x2ecd, 0x0106,
+ 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
+ 0x21f8, 0x0804, 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
+ 0x0136, 0x0146, 0x0156, 0x080c, 0x23ad, 0x080c, 0x21f8, 0x0804,
+ 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+ 0x0156, 0x080c, 0x21bd, 0x080c, 0x21f8, 0x0804, 0x2ecd, 0x0106,
+ 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
+ 0x21bd, 0x080c, 0x23ad, 0x080c, 0x21f8, 0x0804, 0x2ecd, 0xa001,
+ 0x0cf0, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+ 0x0156, 0x080c, 0x1336, 0x0804, 0x2ecd, 0x0106, 0x0006, 0x0126,
+ 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x23ad, 0x080c,
+ 0x1336, 0x0804, 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
+ 0x0136, 0x0146, 0x0156, 0x080c, 0x21bd, 0x080c, 0x1336, 0x0804,
+ 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+ 0x0156, 0x080c, 0x23ad, 0x080c, 0x1336, 0x080c, 0x21f8, 0x0804,
+ 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+ 0x0156, 0x080c, 0x21bd, 0x080c, 0x23ad, 0x080c, 0x1336, 0x0804,
+ 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+ 0x0156, 0x080c, 0x21bd, 0x080c, 0x1336, 0x080c, 0x21f8, 0x0804,
+ 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+ 0x0156, 0x080c, 0x1336, 0x080c, 0x21f8, 0x0804, 0x2ecd, 0x0106,
+ 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
+ 0x21bd, 0x080c, 0x23ad, 0x080c, 0x1336, 0x080c, 0x21f8, 0x0804,
+ 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+ 0x0156, 0x080c, 0x280b, 0x0804, 0x2ecd, 0x0106, 0x0006, 0x0126,
+ 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c, 0x280b, 0x080c,
+ 0x23ad, 0x0804, 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
+ 0x0136, 0x0146, 0x0156, 0x080c, 0x280b, 0x080c, 0x21bd, 0x0804,
+ 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+ 0x0156, 0x080c, 0x280b, 0x080c, 0x21bd, 0x080c, 0x23ad, 0x0804,
+ 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+ 0x0156, 0x080c, 0x280b, 0x080c, 0x21f8, 0x0804, 0x2ecd, 0x0106,
+ 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
+ 0x280b, 0x080c, 0x23ad, 0x080c, 0x21f8, 0x0804, 0x2ecd, 0x0106,
+ 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
+ 0x280b, 0x080c, 0x21bd, 0x080c, 0x21f8, 0x0804, 0x2ecd, 0x0106,
+ 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
+ 0x280b, 0x080c, 0x21bd, 0x080c, 0x23ad, 0x080c, 0x21f8, 0x0804,
+ 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+ 0x0156, 0x080c, 0x280b, 0x080c, 0x1336, 0x0804, 0x2ecd, 0x0106,
+ 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
+ 0x280b, 0x080c, 0x23ad, 0x080c, 0x1336, 0x0804, 0x2ecd, 0x0106,
+ 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
+ 0x280b, 0x080c, 0x21bd, 0x080c, 0x1336, 0x0804, 0x2ecd, 0x0106,
+ 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x0156, 0x080c,
+ 0x280b, 0x080c, 0x23ad, 0x080c, 0x1336, 0x080c, 0x21f8, 0x0804,
+ 0x2ecd, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136, 0x0146,
+ 0x0156, 0x080c, 0x280b, 0x080c, 0x21bd, 0x080c, 0x23ad, 0x080c,
+ 0x1336, 0x0498, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
+ 0x0146, 0x0156, 0x080c, 0x280b, 0x080c, 0x21bd, 0x080c, 0x1336,
+ 0x080c, 0x21f8, 0x0410, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6,
+ 0x0136, 0x0146, 0x0156, 0x080c, 0x280b, 0x080c, 0x1336, 0x080c,
+ 0x21f8, 0x0098, 0x0106, 0x0006, 0x0126, 0x01c6, 0x01d6, 0x0136,
+ 0x0146, 0x0156, 0x080c, 0x280b, 0x080c, 0x21bd, 0x080c, 0x23ad,
+ 0x080c, 0x1336, 0x080c, 0x21f8, 0x0000, 0x015e, 0x014e, 0x013e,
+ 0x01de, 0x01ce, 0x012e, 0x000e, 0x010e, 0x000d, 0x00b6, 0x00c6,
+ 0x0026, 0x0046, 0x9026, 0x080c, 0x682b, 0x1904, 0x2fe9, 0x72d8,
+ 0x2001, 0x1958, 0x2004, 0x9005, 0x1110, 0xd29c, 0x0148, 0xd284,
+ 0x1138, 0xd2bc, 0x1904, 0x2fe9, 0x080c, 0x2fee, 0x0804, 0x2fe9,
+ 0xd2cc, 0x1904, 0x2fe9, 0x080c, 0x7351, 0x1120, 0x70ab, 0xffff,
+ 0x0804, 0x2fe9, 0xd294, 0x0120, 0x70ab, 0xffff, 0x0804, 0x2fe9,
+ 0x080c, 0x3257, 0x0160, 0x080c, 0xc8ce, 0x0128, 0x2001, 0x1817,
+ 0x203c, 0x0804, 0x2f73, 0x70ab, 0xffff, 0x0804, 0x2fe9, 0x2001,
+ 0x1817, 0x203c, 0x7290, 0xd284, 0x0904, 0x2f73, 0xd28c, 0x1904,
+ 0x2f73, 0x0036, 0x73a8, 0x938e, 0xffff, 0x1110, 0x2019, 0x0001,
+ 0x8314, 0x92e0, 0x1c80, 0x2c04, 0x938c, 0x0001, 0x0120, 0x9084,
+ 0xff00, 0x8007, 0x0010, 0x9084, 0x00ff, 0x970e, 0x05d0, 0x908e,
+ 0x0000, 0x05b8, 0x908e, 0x00ff, 0x1150, 0x7230, 0xd284, 0x15b0,
+ 0x7290, 0xc28d, 0x7292, 0x70ab, 0xffff, 0x003e, 0x04a0, 0x2009,
+ 0x180d, 0x210c, 0xd18c, 0x0150, 0x0026, 0x2011, 0x0010, 0x080c,
+ 0x68a8, 0x002e, 0x0118, 0x70ab, 0xffff, 0x0410, 0x900e, 0x080c,
+ 0x2708, 0x080c, 0x6497, 0x11c0, 0x080c, 0x686d, 0x1168, 0x7030,
+ 0xd08c, 0x0130, 0xb800, 0xd0bc, 0x0138, 0x080c, 0x6748, 0x0120,
+ 0x080c, 0x3007, 0x0148, 0x0028, 0x080c, 0x3147, 0x080c, 0x3033,
+ 0x0118, 0x8318, 0x0804, 0x2f20, 0x73aa, 0x0010, 0x70ab, 0xffff,
+ 0x003e, 0x0804, 0x2fe9, 0x9780, 0x3268, 0x203d, 0x97bc, 0xff00,
0x873f, 0x2041, 0x007e, 0x70a8, 0x9096, 0xffff, 0x1118, 0x900e,
0x28a8, 0x0050, 0x9812, 0x0220, 0x2008, 0x9802, 0x20a8, 0x0020,
- 0x70ab, 0xffff, 0x0804, 0x2f62, 0x2700, 0x0156, 0x0016, 0x9106,
- 0x0904, 0x2f57, 0x2001, 0x180d, 0x2004, 0xd08c, 0x0150, 0x0026,
- 0x2011, 0x0010, 0x080c, 0x6781, 0x002e, 0x0118, 0x2009, 0xffff,
- 0x04f0, 0xc484, 0x080c, 0x6411, 0x0150, 0x080c, 0xbef8, 0x1578,
- 0x080c, 0x31bb, 0x1560, 0x080c, 0x63c1, 0x1588, 0x0008, 0xc485,
- 0x080c, 0x6746, 0x01e0, 0x7290, 0xd28c, 0x0180, 0x080c, 0x6746,
- 0x9082, 0x0006, 0x02e0, 0xd484, 0x1118, 0x080c, 0x63eb, 0x0028,
- 0x080c, 0x3137, 0x01a0, 0x080c, 0x3162, 0x0088, 0x080c, 0x30ab,
- 0x080c, 0xbef8, 0x1160, 0x080c, 0x2fac, 0x0188, 0x0040, 0x080c,
- 0xbef8, 0x1118, 0x080c, 0x3137, 0x0110, 0x0451, 0x0140, 0x001e,
- 0x8108, 0x015e, 0x1f04, 0x2f0c, 0x70ab, 0xffff, 0x0018, 0x001e,
- 0x015e, 0x71aa, 0x004e, 0x002e, 0x00ce, 0x00be, 0x0005, 0x00c6,
- 0x0016, 0x70ab, 0x0001, 0x2009, 0x007e, 0x080c, 0x63c1, 0x1168,
- 0xb813, 0x00ff, 0xb817, 0xfffe, 0x080c, 0x30ab, 0x04a9, 0x0128,
- 0x70d8, 0xc0bd, 0x70da, 0x080c, 0xbc7a, 0x001e, 0x00ce, 0x0005,
- 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2001, 0x1863, 0x2004, 0x9084,
- 0x00ff, 0xb842, 0x080c, 0x9f5b, 0x01d0, 0x2b00, 0x6012, 0x080c,
- 0xbc97, 0x6023, 0x0001, 0x9006, 0x080c, 0x635e, 0x2001, 0x0000,
- 0x080c, 0x6372, 0x0126, 0x2091, 0x8000, 0x70a4, 0x8000, 0x70a6,
- 0x012e, 0x2009, 0x0004, 0x080c, 0x9f88, 0x9085, 0x0001, 0x00ce,
- 0x00de, 0x007e, 0x001e, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6,
- 0x2001, 0x1863, 0x2004, 0x9084, 0x00ff, 0xb842, 0x080c, 0x9f5b,
- 0x01d0, 0x2b00, 0x6012, 0x080c, 0xbc97, 0x6023, 0x0001, 0x9006,
- 0x080c, 0x635e, 0x2001, 0x0002, 0x080c, 0x6372, 0x0126, 0x2091,
- 0x8000, 0x70a4, 0x8000, 0x70a6, 0x012e, 0x2009, 0x0002, 0x080c,
- 0x9f88, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005,
- 0x00b6, 0x00c6, 0x0026, 0x2009, 0x0080, 0x080c, 0x63c1, 0x1140,
- 0xb813, 0x00ff, 0xb817, 0xfffc, 0x0039, 0x0110, 0x70df, 0xffff,
- 0x002e, 0x00ce, 0x00be, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6,
- 0x080c, 0x9ec2, 0x01d0, 0x2b00, 0x6012, 0x080c, 0xbc97, 0x6023,
- 0x0001, 0x9006, 0x080c, 0x635e, 0x2001, 0x0002, 0x080c, 0x6372,
- 0x0126, 0x2091, 0x8000, 0x70e0, 0x8000, 0x70e2, 0x012e, 0x2009,
- 0x0002, 0x080c, 0x9f88, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e,
- 0x001e, 0x0005, 0x00c6, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2009,
- 0x007f, 0x080c, 0x63c1, 0x11b8, 0xb813, 0x00ff, 0xb817, 0xfffd,
- 0xb8bb, 0x0004, 0x080c, 0x9ec2, 0x0170, 0x2b00, 0x6012, 0x6316,
- 0x6023, 0x0001, 0x620a, 0x080c, 0xbc97, 0x2009, 0x0022, 0x080c,
- 0x9f88, 0x9085, 0x0001, 0x012e, 0x00de, 0x00ce, 0x0005, 0x00e6,
- 0x00c6, 0x0066, 0x0036, 0x0026, 0x00b6, 0x21f0, 0x080c, 0x884e,
- 0x080c, 0x87ef, 0x080c, 0x9d56, 0x080c, 0xacec, 0x3e08, 0x2130,
- 0x81ff, 0x0120, 0x20a9, 0x007e, 0x900e, 0x0018, 0x20a9, 0x007f,
- 0x900e, 0x0016, 0x080c, 0x6411, 0x1110, 0x080c, 0x5f10, 0x001e,
- 0x8108, 0x1f04, 0x3051, 0x9686, 0x0001, 0x190c, 0x318f, 0x00be,
- 0x002e, 0x003e, 0x006e, 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x00c6,
- 0x0046, 0x0036, 0x0026, 0x0016, 0x00b6, 0x6210, 0x2258, 0xbaa0,
- 0x0026, 0x2019, 0x0029, 0x080c, 0x8843, 0x0076, 0x2039, 0x0000,
- 0x080c, 0x8748, 0x2c08, 0x080c, 0xce89, 0x007e, 0x001e, 0xba10,
- 0xbb14, 0xbcac, 0x080c, 0x5f10, 0xba12, 0xbb16, 0xbcae, 0x00be,
- 0x001e, 0x002e, 0x003e, 0x004e, 0x00ce, 0x00ee, 0x0005, 0x00e6,
- 0x0006, 0x00b6, 0x6010, 0x2058, 0xb8a0, 0x00be, 0x9086, 0x0080,
- 0x0150, 0x2071, 0x1800, 0x70a4, 0x9005, 0x0110, 0x8001, 0x70a6,
- 0x000e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x70e0, 0x9005, 0x0dc0,
- 0x8001, 0x70e2, 0x0ca8, 0xb800, 0xc08c, 0xb802, 0x0005, 0x00f6,
- 0x00e6, 0x00c6, 0x00b6, 0x0046, 0x0036, 0x0026, 0x0016, 0x0156,
- 0x2178, 0x81ff, 0x1118, 0x20a9, 0x0001, 0x0078, 0x080c, 0x55a7,
- 0xd0c4, 0x0140, 0xd0a4, 0x0130, 0x9006, 0x2020, 0x2009, 0x002d,
- 0x080c, 0xd156, 0x20a9, 0x0800, 0x9016, 0x0026, 0x928e, 0x007e,
- 0x0904, 0x3116, 0x928e, 0x007f, 0x0904, 0x3116, 0x928e, 0x0080,
- 0x05e8, 0x9288, 0x1000, 0x210c, 0x81ff, 0x05c0, 0x8fff, 0x1148,
- 0x2001, 0x196a, 0x0006, 0x2003, 0x0001, 0x04f1, 0x000e, 0x2003,
- 0x0000, 0x00b6, 0x00c6, 0x2158, 0x2001, 0x0001, 0x080c, 0x6710,
- 0x00ce, 0x00be, 0x2019, 0x0029, 0x080c, 0x8843, 0x0076, 0x2039,
- 0x0000, 0x080c, 0x8748, 0x00b6, 0x00c6, 0x0026, 0x2158, 0xba04,
- 0x9294, 0x00ff, 0x9286, 0x0006, 0x1118, 0xb807, 0x0404, 0x0028,
- 0x2001, 0x0004, 0x8007, 0x9215, 0xba06, 0x002e, 0x00ce, 0x00be,
- 0x0016, 0x2c08, 0x080c, 0xce89, 0x001e, 0x007e, 0x002e, 0x8210,
- 0x1f04, 0x30cd, 0x015e, 0x001e, 0x002e, 0x003e, 0x004e, 0x00be,
- 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0046, 0x0026, 0x0016, 0x080c,
- 0x55a7, 0xd0c4, 0x0140, 0xd0a4, 0x0130, 0x9006, 0x2220, 0x2009,
- 0x0029, 0x080c, 0xd156, 0x001e, 0x002e, 0x004e, 0x0005, 0x0016,
- 0x0026, 0x0036, 0x00c6, 0x7290, 0x82ff, 0x01e8, 0x080c, 0x673e,
- 0x11d0, 0x2100, 0x080c, 0x26d2, 0x81ff, 0x01b8, 0x2019, 0x0001,
- 0x8314, 0x92e0, 0x1c80, 0x2c04, 0xd384, 0x0120, 0x9084, 0xff00,
- 0x8007, 0x0010, 0x9084, 0x00ff, 0x9116, 0x0138, 0x9096, 0x00ff,
- 0x0110, 0x8318, 0x0c68, 0x9085, 0x0001, 0x00ce, 0x003e, 0x002e,
- 0x001e, 0x0005, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x0036,
- 0x2019, 0x0029, 0x00a9, 0x003e, 0x9180, 0x1000, 0x2004, 0x9065,
- 0x0158, 0x0016, 0x00c6, 0x2061, 0x1a92, 0x001e, 0x6112, 0x080c,
- 0x3066, 0x001e, 0x080c, 0x63eb, 0x012e, 0x00ce, 0x001e, 0x0005,
- 0x0016, 0x0026, 0x2110, 0x080c, 0x9b81, 0x080c, 0xd251, 0x002e,
- 0x001e, 0x0005, 0x2001, 0x1836, 0x2004, 0xd0cc, 0x0005, 0x00c6,
- 0x00b6, 0x080c, 0x72e5, 0x1118, 0x20a9, 0x0800, 0x0010, 0x20a9,
- 0x0782, 0x080c, 0x72e5, 0x1110, 0x900e, 0x0010, 0x2009, 0x007e,
- 0x9180, 0x1000, 0x2004, 0x905d, 0x0130, 0x86ff, 0x0110, 0xb800,
- 0xd0bc, 0x090c, 0x63eb, 0x8108, 0x1f04, 0x31a0, 0x2061, 0x1800,
- 0x607b, 0x0000, 0x607c, 0x9084, 0x00ff, 0x607e, 0x60af, 0x0000,
- 0x00be, 0x00ce, 0x0005, 0x2001, 0x1880, 0x2004, 0xd0bc, 0x0005,
- 0x2011, 0x185f, 0x2214, 0xd2ec, 0x0005, 0x0026, 0x2011, 0x187e,
- 0x2214, 0xd2dc, 0x002e, 0x0005, 0x7eef, 0x7de8, 0x7ce4, 0x80e2,
- 0x7be1, 0x80e0, 0x80dc, 0x80da, 0x7ad9, 0x80d6, 0x80d5, 0x80d4,
- 0x80d3, 0x80d2, 0x80d1, 0x79ce, 0x78cd, 0x80cc, 0x80cb, 0x80ca,
- 0x80c9, 0x80c7, 0x80c6, 0x77c5, 0x76c3, 0x80bc, 0x80ba, 0x75b9,
- 0x80b6, 0x74b5, 0x73b4, 0x72b3, 0x80b2, 0x80b1, 0x80ae, 0x71ad,
- 0x80ac, 0x70ab, 0x6faa, 0x6ea9, 0x80a7, 0x6da6, 0x6ca5, 0x6ba3,
- 0x6a9f, 0x699e, 0x689d, 0x809b, 0x8098, 0x6797, 0x6690, 0x658f,
- 0x6488, 0x6384, 0x6282, 0x8081, 0x8080, 0x617c, 0x607a, 0x8079,
- 0x5f76, 0x8075, 0x8074, 0x8073, 0x8072, 0x8071, 0x806e, 0x5e6d,
- 0x806c, 0x5d6b, 0x5c6a, 0x5b69, 0x8067, 0x5a66, 0x5965, 0x5863,
- 0x575c, 0x565a, 0x5559, 0x8056, 0x8055, 0x5454, 0x5353, 0x5252,
- 0x5151, 0x504e, 0x4f4d, 0x804c, 0x804b, 0x4e4a, 0x4d49, 0x8047,
- 0x4c46, 0x8045, 0x8043, 0x803c, 0x803a, 0x8039, 0x8036, 0x4b35,
- 0x8034, 0x4a33, 0x4932, 0x4831, 0x802e, 0x472d, 0x462c, 0x452b,
- 0x442a, 0x4329, 0x4227, 0x8026, 0x8025, 0x4123, 0x401f, 0x3f1e,
- 0x3e1d, 0x3d1b, 0x3c18, 0x8017, 0x8010, 0x3b0f, 0x3a08, 0x8004,
- 0x3902, 0x8001, 0x8000, 0x8000, 0x3800, 0x3700, 0x3600, 0x8000,
- 0x3500, 0x8000, 0x8000, 0x8000, 0x3400, 0x8000, 0x8000, 0x8000,
- 0x8000, 0x8000, 0x8000, 0x3300, 0x3200, 0x8000, 0x8000, 0x8000,
- 0x8000, 0x8000, 0x8000, 0x3100, 0x3000, 0x8000, 0x8000, 0x2f00,
- 0x8000, 0x2e00, 0x2d00, 0x2c00, 0x8000, 0x8000, 0x8000, 0x2b00,
- 0x8000, 0x2a00, 0x2900, 0x2800, 0x8000, 0x2700, 0x2600, 0x2500,
- 0x2400, 0x2300, 0x2200, 0x8000, 0x8000, 0x2100, 0x2000, 0x1f00,
- 0x1e00, 0x1d00, 0x1c00, 0x8000, 0x8000, 0x1b00, 0x1a00, 0x8000,
- 0x1900, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x1800,
- 0x8000, 0x1700, 0x1600, 0x1500, 0x8000, 0x1400, 0x1300, 0x1200,
- 0x1100, 0x1000, 0x0f00, 0x8000, 0x8000, 0x0e00, 0x0d00, 0x0c00,
- 0x0b00, 0x0a00, 0x0900, 0x8000, 0x8000, 0x0800, 0x0700, 0x8000,
- 0x0600, 0x8000, 0x8000, 0x8000, 0x0500, 0x0400, 0x0300, 0x8000,
- 0x0200, 0x8000, 0x8000, 0x8000, 0x0100, 0x8000, 0x8000, 0x8000,
- 0x8000, 0x8000, 0x8000, 0x0000, 0x8000, 0x8000, 0x8000, 0x8000,
+ 0x70ab, 0xffff, 0x0804, 0x2fe9, 0x2700, 0x0156, 0x0016, 0x9106,
+ 0x0904, 0x2fde, 0x2001, 0x180d, 0x2004, 0xd08c, 0x0158, 0x0026,
+ 0x2011, 0x0010, 0x080c, 0x68a8, 0x002e, 0x0120, 0x2009, 0xffff,
+ 0x0804, 0x2fe6, 0xc484, 0x080c, 0x64fc, 0x0150, 0x080c, 0xc8ce,
+ 0x15a8, 0x080c, 0x3257, 0x1590, 0x080c, 0x6497, 0x15b8, 0x0008,
+ 0xc485, 0x080c, 0x686d, 0x1130, 0x7030, 0xd08c, 0x01f8, 0xb800,
+ 0xd0bc, 0x11e0, 0x7290, 0xd28c, 0x0180, 0x080c, 0x686d, 0x9082,
+ 0x0006, 0x02e0, 0xd484, 0x1118, 0x080c, 0x64c1, 0x0028, 0x080c,
+ 0x31d3, 0x01a0, 0x080c, 0x31fe, 0x0088, 0x080c, 0x3147, 0x080c,
+ 0xc8ce, 0x1160, 0x080c, 0x3033, 0x0188, 0x0040, 0x080c, 0xc8ce,
+ 0x1118, 0x080c, 0x31d3, 0x0110, 0x0451, 0x0140, 0x001e, 0x8108,
+ 0x015e, 0x1f04, 0x2f8c, 0x70ab, 0xffff, 0x0018, 0x001e, 0x015e,
+ 0x71aa, 0x004e, 0x002e, 0x00ce, 0x00be, 0x0005, 0x00c6, 0x0016,
+ 0x70ab, 0x0001, 0x2009, 0x007e, 0x080c, 0x6497, 0x1168, 0xb813,
+ 0x00ff, 0xb817, 0xfffe, 0x080c, 0x3147, 0x04a9, 0x0128, 0x70d8,
+ 0xc0bd, 0x70da, 0x080c, 0xc617, 0x001e, 0x00ce, 0x0005, 0x0016,
+ 0x0076, 0x00d6, 0x00c6, 0x2001, 0x1863, 0x2004, 0x9084, 0x00ff,
+ 0xb842, 0x080c, 0xa3ec, 0x01d0, 0x2b00, 0x6012, 0x080c, 0xc640,
+ 0x6023, 0x0001, 0x9006, 0x080c, 0x6434, 0x2001, 0x0000, 0x080c,
+ 0x6448, 0x0126, 0x2091, 0x8000, 0x70a4, 0x8000, 0x70a6, 0x012e,
+ 0x2009, 0x0004, 0x080c, 0xa419, 0x9085, 0x0001, 0x00ce, 0x00de,
+ 0x007e, 0x001e, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x2001,
+ 0x1863, 0x2004, 0x9084, 0x00ff, 0xb842, 0x080c, 0xa3ec, 0x0548,
+ 0x2b00, 0x6012, 0xb800, 0xc0c4, 0xb802, 0xb8a0, 0x9086, 0x007e,
+ 0x0140, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1110, 0x080c,
+ 0x3102, 0x080c, 0xc640, 0x6023, 0x0001, 0x9006, 0x080c, 0x6434,
+ 0x2001, 0x0002, 0x080c, 0x6448, 0x0126, 0x2091, 0x8000, 0x70a4,
+ 0x8000, 0x70a6, 0x012e, 0x2009, 0x0002, 0x080c, 0xa419, 0x9085,
+ 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005, 0x00b6, 0x00c6,
+ 0x0026, 0x2009, 0x0080, 0x080c, 0x6497, 0x1140, 0xb813, 0x00ff,
+ 0xb817, 0xfffc, 0x0039, 0x0110, 0x70df, 0xffff, 0x002e, 0x00ce,
+ 0x00be, 0x0005, 0x0016, 0x0076, 0x00d6, 0x00c6, 0x080c, 0xa347,
+ 0x01d0, 0x2b00, 0x6012, 0x080c, 0xc640, 0x6023, 0x0001, 0x9006,
+ 0x080c, 0x6434, 0x2001, 0x0002, 0x080c, 0x6448, 0x0126, 0x2091,
+ 0x8000, 0x70e0, 0x8000, 0x70e2, 0x012e, 0x2009, 0x0002, 0x080c,
+ 0xa419, 0x9085, 0x0001, 0x00ce, 0x00de, 0x007e, 0x001e, 0x0005,
+ 0x00c6, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2009, 0x007f, 0x080c,
+ 0x6497, 0x11b8, 0xb813, 0x00ff, 0xb817, 0xfffd, 0xb8bf, 0x0004,
+ 0x080c, 0xa347, 0x0170, 0x2b00, 0x6012, 0x6316, 0x6023, 0x0001,
+ 0x620a, 0x080c, 0xc640, 0x2009, 0x0022, 0x080c, 0xa419, 0x9085,
+ 0x0001, 0x012e, 0x00de, 0x00ce, 0x0005, 0x00e6, 0x00c6, 0x0066,
+ 0x0036, 0x0026, 0x00b6, 0x21f0, 0x080c, 0x8a36, 0x080c, 0x89c0,
+ 0x080c, 0xa1db, 0x080c, 0xb3a0, 0x3e08, 0x2130, 0x81ff, 0x0120,
+ 0x20a9, 0x007e, 0x900e, 0x0018, 0x20a9, 0x007f, 0x900e, 0x0016,
+ 0x080c, 0x64fc, 0x1140, 0x9686, 0x0002, 0x1118, 0xb800, 0xd0bc,
+ 0x1110, 0x080c, 0x5fcd, 0x001e, 0x8108, 0x1f04, 0x30e7, 0x9686,
+ 0x0001, 0x190c, 0x322b, 0x00be, 0x002e, 0x003e, 0x006e, 0x00ce,
+ 0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0046, 0x0036, 0x0026, 0x0016,
+ 0x00b6, 0x6210, 0x2258, 0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c,
+ 0x8a2b, 0x0076, 0x2039, 0x0000, 0x080c, 0x8919, 0x2c08, 0x080c,
+ 0xda37, 0x007e, 0x001e, 0xba10, 0xbb14, 0xbcb0, 0x080c, 0x5fcd,
+ 0xba12, 0xbb16, 0xbcb2, 0x00be, 0x001e, 0x002e, 0x003e, 0x004e,
+ 0x00ce, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x00b6, 0x6010, 0x2058,
+ 0xb8a0, 0x00be, 0x9086, 0x0080, 0x0150, 0x2071, 0x1800, 0x70a4,
+ 0x9005, 0x0110, 0x8001, 0x70a6, 0x000e, 0x00ee, 0x0005, 0x2071,
+ 0x1800, 0x70e0, 0x9005, 0x0dc0, 0x8001, 0x70e2, 0x0ca8, 0xb800,
+ 0xc08c, 0xb802, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x00b6, 0x0046,
+ 0x0036, 0x0026, 0x0016, 0x0156, 0x2178, 0x81ff, 0x1118, 0x20a9,
+ 0x0001, 0x0078, 0x080c, 0x5664, 0xd0c4, 0x0140, 0xd0a4, 0x0130,
+ 0x9006, 0x2020, 0x2009, 0x002d, 0x080c, 0xdd18, 0x20a9, 0x0800,
+ 0x9016, 0x0026, 0x928e, 0x007e, 0x0904, 0x31b2, 0x928e, 0x007f,
+ 0x0904, 0x31b2, 0x928e, 0x0080, 0x05e8, 0x9288, 0x1000, 0x210c,
+ 0x81ff, 0x05c0, 0x8fff, 0x1148, 0x2001, 0x196a, 0x0006, 0x2003,
+ 0x0001, 0x04f1, 0x000e, 0x2003, 0x0000, 0x00b6, 0x00c6, 0x2158,
+ 0x2001, 0x0001, 0x080c, 0x6837, 0x00ce, 0x00be, 0x2019, 0x0029,
+ 0x080c, 0x8a2b, 0x0076, 0x2039, 0x0000, 0x080c, 0x8919, 0x00b6,
+ 0x00c6, 0x0026, 0x2158, 0xba04, 0x9294, 0x00ff, 0x9286, 0x0006,
+ 0x1118, 0xb807, 0x0404, 0x0028, 0x2001, 0x0004, 0x8007, 0x9215,
+ 0xba06, 0x002e, 0x00ce, 0x00be, 0x0016, 0x2c08, 0x080c, 0xda37,
+ 0x001e, 0x007e, 0x002e, 0x8210, 0x1f04, 0x3169, 0x015e, 0x001e,
+ 0x002e, 0x003e, 0x004e, 0x00be, 0x00ce, 0x00ee, 0x00fe, 0x0005,
+ 0x0046, 0x0026, 0x0016, 0x080c, 0x5664, 0xd0c4, 0x0140, 0xd0a4,
+ 0x0130, 0x9006, 0x2220, 0x2009, 0x0029, 0x080c, 0xdd18, 0x001e,
+ 0x002e, 0x004e, 0x0005, 0x0016, 0x0026, 0x0036, 0x00c6, 0x7290,
+ 0x82ff, 0x01e8, 0x080c, 0x6865, 0x11d0, 0x2100, 0x080c, 0x273b,
+ 0x81ff, 0x01b8, 0x2019, 0x0001, 0x8314, 0x92e0, 0x1c80, 0x2c04,
+ 0xd384, 0x0120, 0x9084, 0xff00, 0x8007, 0x0010, 0x9084, 0x00ff,
+ 0x9116, 0x0138, 0x9096, 0x00ff, 0x0110, 0x8318, 0x0c68, 0x9085,
+ 0x0001, 0x00ce, 0x003e, 0x002e, 0x001e, 0x0005, 0x0016, 0x00c6,
+ 0x0126, 0x2091, 0x8000, 0x0036, 0x2019, 0x0029, 0x00a9, 0x003e,
+ 0x9180, 0x1000, 0x2004, 0x9065, 0x0158, 0x0016, 0x00c6, 0x2061,
+ 0x1a92, 0x001e, 0x6112, 0x080c, 0x3102, 0x001e, 0x080c, 0x64c1,
+ 0x012e, 0x00ce, 0x001e, 0x0005, 0x0016, 0x0026, 0x2110, 0x080c,
+ 0x9e54, 0x080c, 0xdfde, 0x002e, 0x001e, 0x0005, 0x2001, 0x1836,
+ 0x2004, 0xd0cc, 0x0005, 0x00c6, 0x00b6, 0x080c, 0x7351, 0x1118,
+ 0x20a9, 0x0800, 0x0010, 0x20a9, 0x0782, 0x080c, 0x7351, 0x1110,
+ 0x900e, 0x0010, 0x2009, 0x007e, 0x9180, 0x1000, 0x2004, 0x905d,
+ 0x0130, 0x86ff, 0x0110, 0xb800, 0xd0bc, 0x090c, 0x64c1, 0x8108,
+ 0x1f04, 0x323c, 0x2061, 0x1800, 0x607b, 0x0000, 0x607c, 0x9084,
+ 0x00ff, 0x607e, 0x60af, 0x0000, 0x00be, 0x00ce, 0x0005, 0x2001,
+ 0x1880, 0x2004, 0xd0bc, 0x0005, 0x2011, 0x185f, 0x2214, 0xd2ec,
+ 0x0005, 0x0026, 0x2011, 0x187e, 0x2214, 0xd2dc, 0x002e, 0x0005,
+ 0x7eef, 0x7de8, 0x7ce4, 0x80e2, 0x7be1, 0x80e0, 0x80dc, 0x80da,
+ 0x7ad9, 0x80d6, 0x80d5, 0x80d4, 0x80d3, 0x80d2, 0x80d1, 0x79ce,
+ 0x78cd, 0x80cc, 0x80cb, 0x80ca, 0x80c9, 0x80c7, 0x80c6, 0x77c5,
+ 0x76c3, 0x80bc, 0x80ba, 0x75b9, 0x80b6, 0x74b5, 0x73b4, 0x72b3,
+ 0x80b2, 0x80b1, 0x80ae, 0x71ad, 0x80ac, 0x70ab, 0x6faa, 0x6ea9,
+ 0x80a7, 0x6da6, 0x6ca5, 0x6ba3, 0x6a9f, 0x699e, 0x689d, 0x809b,
+ 0x8098, 0x6797, 0x6690, 0x658f, 0x6488, 0x6384, 0x6282, 0x8081,
+ 0x8080, 0x617c, 0x607a, 0x8079, 0x5f76, 0x8075, 0x8074, 0x8073,
+ 0x8072, 0x8071, 0x806e, 0x5e6d, 0x806c, 0x5d6b, 0x5c6a, 0x5b69,
+ 0x8067, 0x5a66, 0x5965, 0x5863, 0x575c, 0x565a, 0x5559, 0x8056,
+ 0x8055, 0x5454, 0x5353, 0x5252, 0x5151, 0x504e, 0x4f4d, 0x804c,
+ 0x804b, 0x4e4a, 0x4d49, 0x8047, 0x4c46, 0x8045, 0x8043, 0x803c,
+ 0x803a, 0x8039, 0x8036, 0x4b35, 0x8034, 0x4a33, 0x4932, 0x4831,
+ 0x802e, 0x472d, 0x462c, 0x452b, 0x442a, 0x4329, 0x4227, 0x8026,
+ 0x8025, 0x4123, 0x401f, 0x3f1e, 0x3e1d, 0x3d1b, 0x3c18, 0x8017,
+ 0x8010, 0x3b0f, 0x3a08, 0x8004, 0x3902, 0x8001, 0x8000, 0x8000,
+ 0x3800, 0x3700, 0x3600, 0x8000, 0x3500, 0x8000, 0x8000, 0x8000,
+ 0x3400, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3300,
+ 0x3200, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x3100,
+ 0x3000, 0x8000, 0x8000, 0x2f00, 0x8000, 0x2e00, 0x2d00, 0x2c00,
+ 0x8000, 0x8000, 0x8000, 0x2b00, 0x8000, 0x2a00, 0x2900, 0x2800,
+ 0x8000, 0x2700, 0x2600, 0x2500, 0x2400, 0x2300, 0x2200, 0x8000,
+ 0x8000, 0x2100, 0x2000, 0x1f00, 0x1e00, 0x1d00, 0x1c00, 0x8000,
+ 0x8000, 0x1b00, 0x1a00, 0x8000, 0x1900, 0x8000, 0x8000, 0x8000,
+ 0x8000, 0x8000, 0x8000, 0x1800, 0x8000, 0x1700, 0x1600, 0x1500,
+ 0x8000, 0x1400, 0x1300, 0x1200, 0x1100, 0x1000, 0x0f00, 0x8000,
+ 0x8000, 0x0e00, 0x0d00, 0x0c00, 0x0b00, 0x0a00, 0x0900, 0x8000,
+ 0x8000, 0x0800, 0x0700, 0x8000, 0x0600, 0x8000, 0x8000, 0x8000,
+ 0x0500, 0x0400, 0x0300, 0x8000, 0x0200, 0x8000, 0x8000, 0x8000,
+ 0x0100, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x0000,
0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
- 0x8000, 0x8000, 0x8000, 0x8000, 0x2071, 0x189f, 0x7003, 0x0002,
- 0x9006, 0x7016, 0x701a, 0x704a, 0x704e, 0x700e, 0x7042, 0x7046,
- 0x703b, 0x18bb, 0x703f, 0x18bb, 0x7007, 0x0001, 0x080c, 0x101a,
- 0x090c, 0x0dc4, 0x2900, 0x706a, 0xa86b, 0x0002, 0xa8af, 0xdcb0,
- 0x080c, 0x101a, 0x090c, 0x0dc4, 0x2900, 0x706e, 0xa86b, 0x0002,
- 0xa8af, 0xdcb0, 0x0005, 0x2071, 0x189f, 0x7004, 0x0002, 0x32fb,
- 0x32fc, 0x330f, 0x3323, 0x0005, 0x1004, 0x330c, 0x0e04, 0x330c,
- 0x2079, 0x0000, 0x0126, 0x2091, 0x8000, 0x700c, 0x9005, 0x1128,
- 0x700f, 0x0001, 0x012e, 0x0468, 0x0005, 0x012e, 0x0ce8, 0x2079,
- 0x0000, 0x2061, 0x18b9, 0x2c4c, 0xa870, 0x908e, 0x0100, 0x0128,
- 0x9086, 0x0200, 0x0904, 0x33f7, 0x0005, 0x7018, 0x2048, 0x2061,
- 0x1800, 0x701c, 0x0807, 0x7014, 0x2048, 0xa868, 0x9094, 0x00ff,
- 0x9296, 0x0029, 0x1120, 0xaa7c, 0xd2fc, 0x0128, 0x0005, 0x9086,
- 0x0103, 0x0108, 0x0005, 0x2079, 0x0000, 0x2061, 0x1800, 0x701c,
- 0x0807, 0x2061, 0x1800, 0x7880, 0x908a, 0x0040, 0x1210, 0x61cc,
- 0x0042, 0x2100, 0x908a, 0x003f, 0x1a04, 0x33f4, 0x61cc, 0x0804,
- 0x3389, 0x33cb, 0x3403, 0x33f4, 0x340f, 0x3419, 0x341f, 0x3423,
- 0x3433, 0x3437, 0x344d, 0x3453, 0x3459, 0x3464, 0x346f, 0x347e,
- 0x348d, 0x349b, 0x34b2, 0x34cd, 0x33f4, 0x3578, 0x35b6, 0x3658,
- 0x3669, 0x368c, 0x33f4, 0x33f4, 0x33f4, 0x36c4, 0x36e0, 0x36e9,
- 0x3717, 0x371d, 0x33f4, 0x3763, 0x33f4, 0x33f4, 0x33f4, 0x33f4,
- 0x33f4, 0x376e, 0x3777, 0x377f, 0x3781, 0x33f4, 0x33f4, 0x33f4,
- 0x33f4, 0x33f4, 0x33f4, 0x37ad, 0x33f4, 0x33f4, 0x33f4, 0x33f4,
- 0x33f4, 0x37ca, 0x384c, 0x33f4, 0x33f4, 0x33f4, 0x33f4, 0x33f4,
- 0x33f4, 0x0002, 0x3876, 0x3879, 0x38d8, 0x38f1, 0x3921, 0x3bc3,
- 0x33f4, 0x5165, 0x33f4, 0x33f4, 0x33f4, 0x33f4, 0x33f4, 0x33f4,
- 0x33f4, 0x33f4, 0x344d, 0x3453, 0x40f8, 0x55c1, 0x410e, 0x51f4,
- 0x5246, 0x5351, 0x33f4, 0x53b3, 0x53ef, 0x5420, 0x5529, 0x544d,
- 0x54a9, 0x33f4, 0x4112, 0x42da, 0x42f0, 0x4315, 0x437a, 0x43ee,
- 0x440e, 0x4485, 0x44e1, 0x453d, 0x4540, 0x4565, 0x46ec, 0x4751,
- 0x4759, 0x488e, 0x49eb, 0x4a1f, 0x4c7f, 0x33f4, 0x4c9c, 0x4d60,
- 0x4e3d, 0x33f4, 0x33f4, 0x33f4, 0x33f4, 0x4ea3, 0x4ebe, 0x4759,
- 0x5105, 0x714c, 0x0000, 0x2021, 0x4000, 0x080c, 0x4a99, 0x0126,
- 0x2091, 0x8000, 0x0e04, 0x33d5, 0x0010, 0x012e, 0x0cc0, 0x7c36,
- 0x9486, 0x4000, 0x0118, 0x7833, 0x0011, 0x0010, 0x7833, 0x0010,
- 0x7c82, 0x7986, 0x7a8a, 0x7b8e, 0x2091, 0x4080, 0x2001, 0x0089,
- 0x2004, 0xd084, 0x190c, 0x119d, 0x7007, 0x0001, 0x2091, 0x5000,
- 0x700f, 0x0000, 0x012e, 0x0005, 0x2021, 0x4001, 0x08b0, 0x2021,
- 0x4002, 0x0898, 0x2021, 0x4003, 0x0880, 0x2021, 0x4005, 0x0868,
- 0x2021, 0x4006, 0x0850, 0x2039, 0x0001, 0x902e, 0x2520, 0x7b88,
- 0x7a8c, 0x7884, 0x7990, 0x81ff, 0x0d98, 0x0804, 0x4aa6, 0x2039,
- 0x0001, 0x902e, 0x2520, 0x7b88, 0x7a8c, 0x7884, 0x7990, 0x0804,
- 0x4aa9, 0x7984, 0x7888, 0x2114, 0x200a, 0x0804, 0x33cb, 0x7984,
- 0x2114, 0x0804, 0x33cb, 0x20e1, 0x0000, 0x2099, 0x0021, 0x20e9,
- 0x0000, 0x20a1, 0x0021, 0x20a9, 0x001f, 0x4003, 0x7984, 0x7a88,
- 0x7b8c, 0x0804, 0x33cb, 0x7884, 0x2060, 0x0804, 0x3480, 0x2009,
- 0x0003, 0x2011, 0x0003, 0x2019, 0x001a, 0x789b, 0x0107, 0x7893,
- 0xffff, 0x2001, 0x1890, 0x2004, 0x9005, 0x0118, 0x7896, 0x0804,
- 0x33cb, 0x7897, 0x0001, 0x0804, 0x33cb, 0x2039, 0x0001, 0x7d98,
- 0x7c9c, 0x0804, 0x3407, 0x2039, 0x0001, 0x7d98, 0x7c9c, 0x0804,
- 0x3413, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x3400, 0x2138,
- 0x7d98, 0x7c9c, 0x0804, 0x3407, 0x79a0, 0x9182, 0x0040, 0x0210,
- 0x0804, 0x3400, 0x2138, 0x7d98, 0x7c9c, 0x0804, 0x3413, 0x79a0,
- 0x9182, 0x0040, 0x0210, 0x0804, 0x3400, 0x21e8, 0x7984, 0x7888,
- 0x20a9, 0x0001, 0x21a0, 0x4004, 0x0804, 0x33cb, 0x2061, 0x0800,
- 0xe10c, 0x9006, 0x2c15, 0x9200, 0x8c60, 0x8109, 0x1dd8, 0x2010,
- 0x9005, 0x0904, 0x33cb, 0x0804, 0x33fa, 0x79a0, 0x9182, 0x0040,
- 0x0210, 0x0804, 0x3400, 0x21e0, 0x20a9, 0x0001, 0x7984, 0x2198,
- 0x4012, 0x0804, 0x33cb, 0x2069, 0x185e, 0x7884, 0x7990, 0x911a,
- 0x1a04, 0x3400, 0x8019, 0x0904, 0x3400, 0x684a, 0x6942, 0x788c,
- 0x6852, 0x7888, 0x6856, 0x9006, 0x685a, 0x685e, 0x080c, 0x760d,
- 0x0804, 0x33cb, 0x2069, 0x185e, 0x7884, 0x7994, 0x911a, 0x1a04,
- 0x3400, 0x8019, 0x0904, 0x3400, 0x684e, 0x6946, 0x788c, 0x6862,
- 0x7888, 0x6866, 0x9006, 0x686a, 0x686e, 0x0126, 0x2091, 0x8000,
- 0x080c, 0x68f1, 0x012e, 0x0804, 0x33cb, 0x902e, 0x2520, 0x81ff,
- 0x0120, 0x2009, 0x0001, 0x0804, 0x33fd, 0x7984, 0x7b88, 0x7a8c,
- 0x20a9, 0x0005, 0x20e9, 0x0001, 0x20a1, 0x18a7, 0x4101, 0x080c,
- 0x4a61, 0x1120, 0x2009, 0x0002, 0x0804, 0x33fd, 0x2009, 0x0020,
- 0xa85c, 0x9080, 0x001a, 0xaf60, 0x080c, 0x4aa6, 0x701f, 0x34f1,
- 0x0005, 0xa868, 0x2008, 0x9084, 0x00ff, 0x9096, 0x0011, 0x0168,
- 0x9096, 0x0019, 0x0150, 0x9096, 0x0015, 0x0138, 0x9096, 0x0048,
- 0x0120, 0x9096, 0x0029, 0x1904, 0x33fd, 0x810f, 0x918c, 0x00ff,
- 0x0904, 0x33fd, 0x7112, 0x7010, 0x8001, 0x0560, 0x7012, 0x080c,
- 0x4a61, 0x1120, 0x2009, 0x0002, 0x0804, 0x33fd, 0x2009, 0x0020,
- 0x7068, 0x2040, 0xa290, 0xa394, 0xa498, 0xa59c, 0x9290, 0x0040,
- 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9, 0x0000, 0xa85c, 0x9080,
- 0x001a, 0xaf60, 0x080c, 0x4aa6, 0x701f, 0x352f, 0x0005, 0xa868,
- 0x9084, 0x00ff, 0x9096, 0x0002, 0x0120, 0x9096, 0x000a, 0x1904,
- 0x33fd, 0x0888, 0x0126, 0x2091, 0x8000, 0x7014, 0x2048, 0xa86c,
- 0xc0fd, 0xa86e, 0xa868, 0x9084, 0x00ff, 0x9096, 0x0029, 0x1148,
- 0xc2fd, 0xaa7e, 0x080c, 0x5ff5, 0x0138, 0xa87e, 0xa986, 0x012e,
- 0x0060, 0x080c, 0x6313, 0x1130, 0x7007, 0x0003, 0x701f, 0x355d,
- 0x012e, 0x0005, 0x080c, 0x6d45, 0x012e, 0x0126, 0x2091, 0x8000,
- 0x20a9, 0x0005, 0x20e1, 0x0001, 0x2099, 0x18a7, 0x400a, 0x2100,
- 0x9210, 0x9399, 0x0000, 0x94a1, 0x0000, 0x95a9, 0x0000, 0xa85c,
- 0x9080, 0x001a, 0x2009, 0x0020, 0x012e, 0xaf60, 0x0804, 0x4aa9,
- 0x2091, 0x8000, 0x7837, 0x4000, 0x7833, 0x0010, 0x7883, 0x4000,
- 0x7887, 0x4953, 0x788b, 0x5020, 0x788f, 0x2020, 0x2009, 0x017f,
- 0x2104, 0x7892, 0x3f00, 0x7896, 0x2061, 0x0100, 0x6200, 0x2061,
- 0x0200, 0x603c, 0x8007, 0x9205, 0x789a, 0x2009, 0x04fd, 0x2104,
- 0x789e, 0x2091, 0x5000, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
- 0xd084, 0x0180, 0x2001, 0x19f8, 0x2004, 0x9005, 0x0128, 0x2001,
- 0x008b, 0x2004, 0xd0fc, 0x0dd8, 0x2001, 0x008a, 0x2003, 0x0002,
- 0x2003, 0x1001, 0x2071, 0x0080, 0x0804, 0x0427, 0x81ff, 0x1904,
- 0x33fd, 0x7984, 0x080c, 0x6411, 0x1904, 0x3400, 0x7e98, 0x9682,
- 0x4000, 0x1a04, 0x3400, 0x7c88, 0x7d8c, 0x080c, 0x6579, 0x080c,
- 0x6548, 0x0000, 0x1518, 0x2061, 0x1cc8, 0x0126, 0x2091, 0x8000,
- 0x6000, 0x9086, 0x0000, 0x0148, 0x6014, 0x904d, 0x0130, 0xa870,
- 0x9406, 0x1118, 0xa874, 0x9506, 0x0150, 0x012e, 0x9ce0, 0x000c,
- 0x2001, 0x1819, 0x2004, 0x9c02, 0x1a04, 0x33fd, 0x0c30, 0x080c,
- 0xb5c5, 0x012e, 0x0904, 0x33fd, 0x0804, 0x33cb, 0x900e, 0x2001,
- 0x0005, 0x080c, 0x6d45, 0x0126, 0x2091, 0x8000, 0x080c, 0xbc45,
- 0x080c, 0x6b1d, 0x012e, 0x0804, 0x33cb, 0x00a6, 0x2950, 0xb19c,
- 0x080c, 0x6411, 0x1904, 0x3645, 0xb6a8, 0x9682, 0x4000, 0x16e8,
- 0xb4a0, 0xb5a4, 0x080c, 0x6579, 0x080c, 0x6548, 0x1520, 0x2061,
- 0x1cc8, 0x0126, 0x2091, 0x8000, 0x6000, 0x9086, 0x0000, 0x0148,
+ 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000,
+ 0x2071, 0x189f, 0x7003, 0x0002, 0x9006, 0x7016, 0x701a, 0x704a,
+ 0x704e, 0x700e, 0x7042, 0x7046, 0x703b, 0x18bb, 0x703f, 0x18bb,
+ 0x7007, 0x0001, 0x080c, 0x1026, 0x090c, 0x0dc3, 0x2900, 0x706a,
+ 0xa86b, 0x0002, 0xa8af, 0xdcb0, 0x080c, 0x1026, 0x090c, 0x0dc3,
+ 0x2900, 0x706e, 0xa86b, 0x0002, 0xa8af, 0xdcb0, 0x0005, 0x2071,
+ 0x189f, 0x7004, 0x0002, 0x3397, 0x3398, 0x33ab, 0x33bf, 0x0005,
+ 0x1004, 0x33a8, 0x0e04, 0x33a8, 0x2079, 0x0000, 0x0126, 0x2091,
+ 0x8000, 0x700c, 0x9005, 0x1128, 0x700f, 0x0001, 0x012e, 0x0468,
+ 0x0005, 0x012e, 0x0ce8, 0x2079, 0x0000, 0x2061, 0x18b9, 0x2c4c,
+ 0xa870, 0x908e, 0x0100, 0x0128, 0x9086, 0x0200, 0x0904, 0x3493,
+ 0x0005, 0x7018, 0x2048, 0x2061, 0x1800, 0x701c, 0x0807, 0x7014,
+ 0x2048, 0xa868, 0x9094, 0x00ff, 0x9296, 0x0029, 0x1120, 0xaa7c,
+ 0xd2fc, 0x0128, 0x0005, 0x9086, 0x0103, 0x0108, 0x0005, 0x2079,
+ 0x0000, 0x2061, 0x1800, 0x701c, 0x0807, 0x2061, 0x1800, 0x7880,
+ 0x908a, 0x0040, 0x1210, 0x61cc, 0x0042, 0x2100, 0x908a, 0x003f,
+ 0x1a04, 0x3490, 0x61cc, 0x0804, 0x3425, 0x3467, 0x349f, 0x3490,
+ 0x34ab, 0x34b5, 0x34bb, 0x34bf, 0x34cf, 0x34d3, 0x34e9, 0x34ef,
+ 0x34f5, 0x3500, 0x350b, 0x351a, 0x3529, 0x3537, 0x354e, 0x3569,
+ 0x3490, 0x3614, 0x3652, 0x36f4, 0x3705, 0x3728, 0x3490, 0x3490,
+ 0x3490, 0x3760, 0x377c, 0x3785, 0x37b3, 0x37b9, 0x3490, 0x37ff,
+ 0x3490, 0x3490, 0x3490, 0x3490, 0x3490, 0x380a, 0x3813, 0x381b,
+ 0x381d, 0x3490, 0x3490, 0x3490, 0x3490, 0x3490, 0x3490, 0x3849,
+ 0x3490, 0x3490, 0x3490, 0x3490, 0x3490, 0x3866, 0x38ea, 0x3490,
+ 0x3490, 0x3490, 0x3490, 0x3490, 0x3490, 0x0002, 0x3914, 0x3917,
+ 0x3976, 0x398f, 0x39bf, 0x3c61, 0x3490, 0x5222, 0x3490, 0x3490,
+ 0x3490, 0x3490, 0x3490, 0x3490, 0x3490, 0x3490, 0x34e9, 0x34ef,
+ 0x4196, 0x567e, 0x41ac, 0x52b1, 0x5303, 0x540e, 0x3490, 0x5470,
+ 0x54ac, 0x54dd, 0x55e6, 0x550a, 0x5566, 0x3490, 0x41b0, 0x437d,
+ 0x4393, 0x43b8, 0x441d, 0x4491, 0x44b1, 0x4528, 0x4584, 0x45e0,
+ 0x45e3, 0x4608, 0x478f, 0x47f4, 0x47fc, 0x4931, 0x4a9b, 0x4acf,
+ 0x4d2f, 0x3490, 0x4d4d, 0x4e1d, 0x4efa, 0x3490, 0x3490, 0x3490,
+ 0x3490, 0x4f60, 0x4f7b, 0x47fc, 0x51c2, 0x714c, 0x0000, 0x2021,
+ 0x4000, 0x080c, 0x4b49, 0x0126, 0x2091, 0x8000, 0x0e04, 0x3471,
+ 0x0010, 0x012e, 0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118, 0x7833,
+ 0x0011, 0x0010, 0x7833, 0x0010, 0x7c82, 0x7986, 0x7a8a, 0x7b8e,
+ 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11a9,
+ 0x7007, 0x0001, 0x2091, 0x5000, 0x700f, 0x0000, 0x012e, 0x0005,
+ 0x2021, 0x4001, 0x08b0, 0x2021, 0x4002, 0x0898, 0x2021, 0x4003,
+ 0x0880, 0x2021, 0x4005, 0x0868, 0x2021, 0x4006, 0x0850, 0x2039,
+ 0x0001, 0x902e, 0x2520, 0x7b88, 0x7a8c, 0x7884, 0x7990, 0x81ff,
+ 0x0d98, 0x0804, 0x4b56, 0x2039, 0x0001, 0x902e, 0x2520, 0x7b88,
+ 0x7a8c, 0x7884, 0x7990, 0x0804, 0x4b59, 0x7984, 0x7888, 0x2114,
+ 0x200a, 0x0804, 0x3467, 0x7984, 0x2114, 0x0804, 0x3467, 0x20e1,
+ 0x0000, 0x2099, 0x0021, 0x20e9, 0x0000, 0x20a1, 0x0021, 0x20a9,
+ 0x001f, 0x4003, 0x7984, 0x7a88, 0x7b8c, 0x0804, 0x3467, 0x7884,
+ 0x2060, 0x0804, 0x351c, 0x2009, 0x0003, 0x2011, 0x0003, 0x2019,
+ 0x001a, 0x789b, 0x0117, 0x7893, 0xffff, 0x2001, 0x1890, 0x2004,
+ 0x9005, 0x0118, 0x7896, 0x0804, 0x3467, 0x7897, 0x0001, 0x0804,
+ 0x3467, 0x2039, 0x0001, 0x7d98, 0x7c9c, 0x0804, 0x34a3, 0x2039,
+ 0x0001, 0x7d98, 0x7c9c, 0x0804, 0x34af, 0x79a0, 0x9182, 0x0040,
+ 0x0210, 0x0804, 0x349c, 0x2138, 0x7d98, 0x7c9c, 0x0804, 0x34a3,
+ 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x349c, 0x2138, 0x7d98,
+ 0x7c9c, 0x0804, 0x34af, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804,
+ 0x349c, 0x21e8, 0x7984, 0x7888, 0x20a9, 0x0001, 0x21a0, 0x4004,
+ 0x0804, 0x3467, 0x2061, 0x0800, 0xe10c, 0x9006, 0x2c15, 0x9200,
+ 0x8c60, 0x8109, 0x1dd8, 0x2010, 0x9005, 0x0904, 0x3467, 0x0804,
+ 0x3496, 0x79a0, 0x9182, 0x0040, 0x0210, 0x0804, 0x349c, 0x21e0,
+ 0x20a9, 0x0001, 0x7984, 0x2198, 0x4012, 0x0804, 0x3467, 0x2069,
+ 0x185e, 0x7884, 0x7990, 0x911a, 0x1a04, 0x349c, 0x8019, 0x0904,
+ 0x349c, 0x684a, 0x6942, 0x788c, 0x6852, 0x7888, 0x6856, 0x9006,
+ 0x685a, 0x685e, 0x080c, 0x767d, 0x0804, 0x3467, 0x2069, 0x185e,
+ 0x7884, 0x7994, 0x911a, 0x1a04, 0x349c, 0x8019, 0x0904, 0x349c,
+ 0x684e, 0x6946, 0x788c, 0x6862, 0x7888, 0x6866, 0x9006, 0x686a,
+ 0x686e, 0x0126, 0x2091, 0x8000, 0x080c, 0x69d9, 0x012e, 0x0804,
+ 0x3467, 0x902e, 0x2520, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804,
+ 0x3499, 0x7984, 0x7b88, 0x7a8c, 0x20a9, 0x0005, 0x20e9, 0x0001,
+ 0x20a1, 0x18a7, 0x4101, 0x080c, 0x4b11, 0x1120, 0x2009, 0x0002,
+ 0x0804, 0x3499, 0x2009, 0x0020, 0xa85c, 0x9080, 0x001a, 0xaf60,
+ 0x080c, 0x4b56, 0x701f, 0x358d, 0x0005, 0xa868, 0x2008, 0x9084,
+ 0x00ff, 0x9096, 0x0011, 0x0168, 0x9096, 0x0019, 0x0150, 0x9096,
+ 0x0015, 0x0138, 0x9096, 0x0048, 0x0120, 0x9096, 0x0029, 0x1904,
+ 0x3499, 0x810f, 0x918c, 0x00ff, 0x0904, 0x3499, 0x7112, 0x7010,
+ 0x8001, 0x0560, 0x7012, 0x080c, 0x4b11, 0x1120, 0x2009, 0x0002,
+ 0x0804, 0x3499, 0x2009, 0x0020, 0x7068, 0x2040, 0xa290, 0xa394,
+ 0xa498, 0xa59c, 0x9290, 0x0040, 0x9399, 0x0000, 0x94a1, 0x0000,
+ 0x95a9, 0x0000, 0xa85c, 0x9080, 0x001a, 0xaf60, 0x080c, 0x4b56,
+ 0x701f, 0x35cb, 0x0005, 0xa868, 0x9084, 0x00ff, 0x9096, 0x0002,
+ 0x0120, 0x9096, 0x000a, 0x1904, 0x3499, 0x0888, 0x0126, 0x2091,
+ 0x8000, 0x7014, 0x2048, 0xa86c, 0xc0fd, 0xa86e, 0xa868, 0x9084,
+ 0x00ff, 0x9096, 0x0029, 0x1148, 0xc2fd, 0xaa7e, 0x080c, 0x60c5,
+ 0x0138, 0xa87e, 0xa986, 0x012e, 0x0060, 0x080c, 0x63e9, 0x1130,
+ 0x7007, 0x0003, 0x701f, 0x35f9, 0x012e, 0x0005, 0x080c, 0x6e4b,
+ 0x012e, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0005, 0x20e1, 0x0001,
+ 0x2099, 0x18a7, 0x400a, 0x2100, 0x9210, 0x9399, 0x0000, 0x94a1,
+ 0x0000, 0x95a9, 0x0000, 0xa85c, 0x9080, 0x001a, 0x2009, 0x0020,
+ 0x012e, 0xaf60, 0x0804, 0x4b59, 0x2091, 0x8000, 0x7837, 0x4000,
+ 0x7833, 0x0010, 0x7883, 0x4000, 0x7887, 0x4953, 0x788b, 0x5020,
+ 0x788f, 0x2020, 0x2009, 0x017f, 0x2104, 0x7892, 0x3f00, 0x7896,
+ 0x2061, 0x0100, 0x6200, 0x2061, 0x0200, 0x603c, 0x8007, 0x9205,
+ 0x789a, 0x2009, 0x04fd, 0x2104, 0x789e, 0x2091, 0x5000, 0x2091,
+ 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x0180, 0x2001, 0x19f8,
+ 0x2004, 0x9005, 0x0128, 0x2001, 0x008b, 0x2004, 0xd0fc, 0x0dd8,
+ 0x2001, 0x008a, 0x2003, 0x0002, 0x2003, 0x1001, 0x2071, 0x0080,
+ 0x0804, 0x0427, 0x81ff, 0x1904, 0x3499, 0x7984, 0x080c, 0x64fc,
+ 0x1904, 0x349c, 0x7e98, 0x9682, 0x4000, 0x1a04, 0x349c, 0x7c88,
+ 0x7d8c, 0x080c, 0x6681, 0x080c, 0x6650, 0x0000, 0x1518, 0x2061,
+ 0x1cd0, 0x0126, 0x2091, 0x8000, 0x6000, 0x9086, 0x0000, 0x0148,
0x6014, 0x904d, 0x0130, 0xa870, 0x9406, 0x1118, 0xa874, 0x9506,
- 0x0158, 0x012e, 0x9ce0, 0x000c, 0x2001, 0x1819, 0x2004, 0x9c02,
- 0x2009, 0x000d, 0x12b0, 0x0c28, 0x080c, 0xb5c5, 0x012e, 0x2009,
- 0x0003, 0x0178, 0x00e0, 0x900e, 0x2001, 0x0005, 0x080c, 0x6d45,
- 0x0126, 0x2091, 0x8000, 0x080c, 0xbc45, 0x080c, 0x6b11, 0x012e,
- 0x0070, 0xb09b, 0x4005, 0xb19e, 0x0010, 0xb09b, 0x4006, 0x900e,
- 0x9085, 0x0001, 0x2001, 0x0030, 0x2a48, 0x00ae, 0x0005, 0xb09b,
- 0x4000, 0x9006, 0x918d, 0x0001, 0x2008, 0x2a48, 0x00ae, 0x0005,
- 0x81ff, 0x1904, 0x33fd, 0x080c, 0x4a78, 0x0904, 0x3400, 0x080c,
- 0x64bb, 0x0904, 0x33fd, 0x080c, 0x6583, 0x0904, 0x33fd, 0x0804,
- 0x4405, 0x81ff, 0x1904, 0x33fd, 0x080c, 0x4a90, 0x0904, 0x3400,
- 0x080c, 0x660e, 0x0904, 0x33fd, 0x2019, 0x0005, 0x79a8, 0x080c,
- 0x6592, 0x0904, 0x33fd, 0x7888, 0x908a, 0x1000, 0x1a04, 0x3400,
- 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x836c, 0x79a8, 0xd184,
- 0x1904, 0x33cb, 0x0804, 0x4405, 0x0126, 0x2091, 0x8000, 0x81ff,
- 0x0118, 0x2009, 0x0001, 0x0450, 0x2029, 0x07ff, 0x6458, 0x2400,
- 0x9506, 0x01f8, 0x2508, 0x080c, 0x6411, 0x11d8, 0x080c, 0x660e,
- 0x1128, 0x2009, 0x0002, 0x62bc, 0x2518, 0x00c0, 0x2019, 0x0004,
- 0x900e, 0x080c, 0x6592, 0x1118, 0x2009, 0x0006, 0x0078, 0x7884,
- 0x908a, 0x1000, 0x1270, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c,
- 0x836c, 0x8529, 0x1ae0, 0x012e, 0x0804, 0x33cb, 0x012e, 0x0804,
- 0x33fd, 0x012e, 0x0804, 0x3400, 0x080c, 0x4a78, 0x0904, 0x3400,
- 0x080c, 0x64bb, 0x0904, 0x33fd, 0xbaa0, 0x2019, 0x0005, 0x00c6,
- 0x9066, 0x080c, 0x8843, 0x0076, 0x903e, 0x080c, 0x8748, 0x900e,
- 0x080c, 0xce89, 0x007e, 0x00ce, 0x080c, 0x6579, 0x0804, 0x33cb,
- 0x080c, 0x4a78, 0x0904, 0x3400, 0x080c, 0x6579, 0x2208, 0x0804,
- 0x33cb, 0x0156, 0x00d6, 0x00e6, 0x2069, 0x1911, 0x6810, 0x6914,
- 0x910a, 0x1208, 0x900e, 0x6816, 0x9016, 0x901e, 0x20a9, 0x007e,
- 0x2069, 0x1000, 0x2d04, 0x905d, 0x0118, 0xb84c, 0x0059, 0x9210,
- 0x8d68, 0x1f04, 0x36fa, 0x2300, 0x9218, 0x00ee, 0x00de, 0x015e,
- 0x0804, 0x33cb, 0x0086, 0x9045, 0x0140, 0x0016, 0x900e, 0x8108,
- 0xa000, 0x9045, 0x1de0, 0x2100, 0x001e, 0x008e, 0x0005, 0x2069,
- 0x1911, 0x6910, 0x62b8, 0x0804, 0x33cb, 0x81ff, 0x0120, 0x2009,
- 0x0001, 0x0804, 0x33fd, 0x0126, 0x2091, 0x8000, 0x080c, 0x55bb,
- 0x0128, 0x2009, 0x0007, 0x012e, 0x0804, 0x33fd, 0x012e, 0x6158,
- 0x9190, 0x31cc, 0x2215, 0x9294, 0x00ff, 0x6378, 0x83ff, 0x0108,
- 0x627c, 0x67d8, 0x97c4, 0x000a, 0x98c6, 0x000a, 0x1118, 0x2031,
- 0x0001, 0x00e8, 0x97c4, 0x0022, 0x98c6, 0x0022, 0x1118, 0x2031,
- 0x0003, 0x00a8, 0x97c4, 0x0012, 0x98c6, 0x0012, 0x1118, 0x2031,
- 0x0002, 0x0068, 0x080c, 0x72e5, 0x1118, 0x2031, 0x0004, 0x0038,
- 0xd79c, 0x0120, 0x2009, 0x0005, 0x0804, 0x33fd, 0x9036, 0x7e9a,
- 0x7f9e, 0x0804, 0x33cb, 0x6148, 0x624c, 0x2019, 0x1963, 0x231c,
- 0x2001, 0x1964, 0x2004, 0x789a, 0x0804, 0x33cb, 0x0126, 0x2091,
- 0x8000, 0x6138, 0x623c, 0x6340, 0x012e, 0x0804, 0x33cb, 0x080c,
- 0x4a90, 0x0904, 0x3400, 0xba44, 0xbb38, 0x0804, 0x33cb, 0x080c,
- 0x0dc4, 0x080c, 0x4a90, 0x2110, 0x0904, 0x3400, 0xb804, 0x908c,
- 0x00ff, 0x918e, 0x0006, 0x0140, 0x9084, 0xff00, 0x9086, 0x0600,
- 0x2009, 0x0009, 0x1904, 0x33fd, 0x0126, 0x2091, 0x8000, 0x2019,
- 0x0005, 0x00c6, 0x9066, 0x080c, 0x9b81, 0x080c, 0x8843, 0x0076,
- 0x903e, 0x080c, 0x8748, 0x900e, 0x080c, 0xce89, 0x007e, 0x00ce,
- 0xb807, 0x0407, 0x012e, 0x0804, 0x33cb, 0x6148, 0x624c, 0x7884,
- 0x604a, 0x7b88, 0x634e, 0x2069, 0x185e, 0x831f, 0x9305, 0x6816,
- 0x788c, 0x2069, 0x1963, 0x2d1c, 0x206a, 0x7e98, 0x9682, 0x0014,
- 0x1210, 0x2031, 0x07d0, 0x2069, 0x1964, 0x2d04, 0x266a, 0x789a,
- 0x0804, 0x33cb, 0x0126, 0x2091, 0x8000, 0x6138, 0x7884, 0x603a,
- 0x910e, 0xd1b4, 0x0118, 0x080c, 0x0ecd, 0x7884, 0xd094, 0x0148,
- 0x00e6, 0x2071, 0x19d7, 0x79b4, 0x9192, 0x07d0, 0x1208, 0x713e,
- 0x00ee, 0xd0c4, 0x01a8, 0x00d6, 0x78a8, 0x2009, 0x1979, 0x200a,
- 0x78ac, 0x2011, 0x197a, 0x2012, 0x2069, 0x0100, 0x6838, 0x9086,
- 0x0007, 0x1118, 0x2214, 0x6a5a, 0x0010, 0x210c, 0x695a, 0x00de,
- 0x7884, 0xd0b4, 0x0120, 0x3b00, 0x9084, 0xff3f, 0x20d8, 0x7888,
- 0x603e, 0x7888, 0xd0ec, 0x0178, 0x6034, 0xc08d, 0x6036, 0x2001,
- 0x0050, 0x6072, 0x6076, 0x6052, 0x6067, 0x2088, 0x00c6, 0x2061,
- 0x1aa0, 0x2062, 0x00ce, 0x2011, 0x0114, 0x220c, 0x7888, 0xd08c,
- 0x0118, 0x918d, 0x0080, 0x0010, 0x918c, 0xff7f, 0x2112, 0x788c,
- 0x6042, 0x6040, 0xd0c4, 0x0120, 0x2009, 0x030f, 0x200b, 0x31cc,
- 0xd0cc, 0x0120, 0x78b0, 0x2011, 0x0114, 0x2012, 0x012e, 0x0804,
- 0x33cb, 0x00f6, 0x2079, 0x1800, 0x7a38, 0xa89c, 0x9084, 0xfebf,
- 0x9215, 0xa8a0, 0x9084, 0xfebf, 0x8002, 0x9214, 0x7838, 0x9084,
- 0x0140, 0x9215, 0x7a3a, 0xa89b, 0x4000, 0x900e, 0x9085, 0x0001,
- 0x2001, 0x0000, 0x00fe, 0x0005, 0x7898, 0x9005, 0x01a8, 0x7888,
- 0x9025, 0x0904, 0x3400, 0x788c, 0x902d, 0x0904, 0x3400, 0x900e,
- 0x080c, 0x6411, 0x1120, 0xba44, 0xbb38, 0xbc46, 0xbd3a, 0x9186,
- 0x07ff, 0x0190, 0x8108, 0x0ca0, 0x080c, 0x4a90, 0x0904, 0x3400,
- 0x7888, 0x900d, 0x0904, 0x3400, 0x788c, 0x9005, 0x0904, 0x3400,
- 0xba44, 0xb946, 0xbb38, 0xb83a, 0x0804, 0x33cb, 0x2011, 0xbc09,
- 0x0010, 0x2011, 0xbc05, 0x080c, 0x55bb, 0x1904, 0x33fd, 0x00c6,
- 0x2061, 0x0100, 0x7984, 0x9186, 0x00ff, 0x1130, 0x2001, 0x1817,
- 0x2004, 0x9085, 0xff00, 0x0088, 0x9182, 0x007f, 0x16e0, 0x9188,
- 0x31cc, 0x210d, 0x918c, 0x00ff, 0x2001, 0x1817, 0x2004, 0x0026,
- 0x9116, 0x002e, 0x0580, 0x810f, 0x9105, 0x0126, 0x2091, 0x8000,
- 0x0006, 0x080c, 0x9ec2, 0x000e, 0x0510, 0x602e, 0x620a, 0x7984,
- 0x00b6, 0x080c, 0x63c7, 0x2b08, 0x00be, 0x1500, 0x6112, 0x6023,
- 0x0001, 0x080c, 0x4a61, 0x01d0, 0x9006, 0xa86a, 0x7007, 0x0003,
- 0xa832, 0xa86c, 0xc0fd, 0xa86e, 0x701f, 0x38d1, 0x2900, 0x6016,
- 0x2009, 0x0032, 0x080c, 0x9f88, 0x012e, 0x00ce, 0x0005, 0x012e,
- 0x00ce, 0x0804, 0x33fd, 0x00ce, 0x0804, 0x3400, 0x080c, 0x9f18,
- 0x0cb0, 0xa830, 0x9086, 0x0100, 0x0904, 0x33fd, 0x0804, 0x33cb,
- 0x2061, 0x1a4f, 0x0126, 0x2091, 0x8000, 0x6000, 0xd084, 0x0170,
- 0x6104, 0x6208, 0x2061, 0x1800, 0x6350, 0x6070, 0x789a, 0x60bc,
- 0x789e, 0x60b8, 0x78aa, 0x012e, 0x0804, 0x33cb, 0x900e, 0x2110,
- 0x0c88, 0x81ff, 0x1904, 0x33fd, 0x080c, 0x72e5, 0x0904, 0x33fd,
- 0x0126, 0x2091, 0x8000, 0x6250, 0x6070, 0x9202, 0x0248, 0x9085,
- 0x0001, 0x080c, 0x2708, 0x080c, 0x57d9, 0x012e, 0x0804, 0x33cb,
- 0x012e, 0x0804, 0x3400, 0x0006, 0x0016, 0x00c6, 0x00e6, 0x2001,
- 0x1986, 0x2070, 0x2061, 0x185e, 0x6008, 0x2072, 0x900e, 0x2011,
- 0x1400, 0x080c, 0x854b, 0x7206, 0x00ee, 0x00ce, 0x001e, 0x000e,
- 0x0005, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0128, 0x012e, 0x2021,
- 0x400b, 0x0804, 0x33cd, 0x7884, 0xd0fc, 0x0158, 0x2001, 0x002a,
- 0x2004, 0x9005, 0x0180, 0x9082, 0x00e1, 0x0298, 0x012e, 0x0804,
- 0x3400, 0x2001, 0x002a, 0x2004, 0x9005, 0x0128, 0x2069, 0x185e,
- 0x6908, 0x9102, 0x1230, 0x012e, 0x0804, 0x3400, 0x012e, 0x0804,
- 0x33fd, 0x080c, 0x9e82, 0x0dd0, 0x7884, 0xd0fc, 0x0904, 0x39a0,
- 0x00c6, 0x080c, 0x4a61, 0x00ce, 0x0d88, 0xa86b, 0x0000, 0x7884,
- 0xa80a, 0x7898, 0xa80e, 0x789c, 0xa812, 0x2001, 0x002e, 0x2004,
- 0xa81a, 0x2001, 0x002f, 0x2004, 0xa81e, 0x2001, 0x0030, 0x2004,
- 0xa822, 0x2001, 0x0031, 0x2004, 0xa826, 0x2001, 0x0034, 0x2004,
- 0xa82a, 0x2001, 0x0035, 0x2004, 0xa82e, 0x2001, 0x002a, 0x2004,
- 0x9080, 0x0003, 0x9084, 0x00fc, 0x8004, 0xa816, 0x080c, 0x3b26,
- 0x0928, 0x7014, 0x2048, 0xad2c, 0xac28, 0xab1c, 0xaa18, 0xa930,
- 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, 0x0000, 0x8906,
- 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001c,
- 0x080c, 0x4aa6, 0x701f, 0x3a63, 0x7023, 0x0001, 0x012e, 0x0005,
- 0x0046, 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6,
- 0x00f6, 0x080c, 0x390b, 0x2001, 0x197c, 0x2003, 0x0000, 0x2021,
- 0x000a, 0x2061, 0x0100, 0x6104, 0x0016, 0x60bb, 0x0000, 0x60bf,
- 0x32e1, 0x60bf, 0x0012, 0x080c, 0x3b95, 0x080c, 0x3b54, 0x00f6,
- 0x00e6, 0x0086, 0x2940, 0x2071, 0x1a44, 0x2079, 0x0090, 0x00d6,
- 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0140, 0x2001, 0x0035, 0x2004,
- 0x780e, 0x2001, 0x0034, 0x2004, 0x780a, 0x00de, 0x2011, 0x0001,
- 0x080c, 0x3f3c, 0x008e, 0x00ee, 0x00fe, 0x080c, 0x3e5e, 0x080c,
- 0x3d63, 0x05b8, 0x2001, 0x020b, 0x2004, 0x9084, 0x0140, 0x1db8,
- 0x080c, 0x3fb0, 0x00f6, 0x2079, 0x0300, 0x78bc, 0x00fe, 0x908c,
- 0x0070, 0x1560, 0x2071, 0x0200, 0x7037, 0x0000, 0x7050, 0x9084,
- 0xff00, 0x9086, 0x3200, 0x1510, 0x7037, 0x0001, 0x7050, 0x9084,
- 0xff00, 0x9086, 0xe100, 0x11d0, 0x7037, 0x0000, 0x7054, 0x7037,
- 0x0000, 0x715c, 0x9106, 0x1190, 0x2001, 0x181f, 0x2004, 0x9106,
- 0x1168, 0x00c6, 0x2061, 0x0100, 0x6024, 0x9084, 0x1e00, 0x00ce,
- 0x0138, 0x080c, 0x3d6d, 0x080c, 0x3b4f, 0x0058, 0x080c, 0x3b4f,
- 0x080c, 0x3ed4, 0x080c, 0x3e54, 0x2001, 0x020b, 0x2004, 0xd0e4,
- 0x0dd8, 0x2001, 0x032a, 0x2003, 0x0004, 0x2061, 0x0100, 0x6027,
- 0x0002, 0x001e, 0x6106, 0x2011, 0x020d, 0x2013, 0x0020, 0x60bb,
- 0x0000, 0x60bf, 0x0108, 0x60bf, 0x0012, 0x2001, 0x0004, 0x200c,
- 0x918c, 0xfffd, 0x2102, 0x080c, 0x12b8, 0x2009, 0x0028, 0x080c,
- 0x22b2, 0x2001, 0x0227, 0x200c, 0x2102, 0x00fe, 0x00ee, 0x00de,
- 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, 0x004e, 0x2001, 0x197c,
- 0x2004, 0x9005, 0x1118, 0x012e, 0x0804, 0x33cb, 0x012e, 0x2021,
- 0x400c, 0x0804, 0x33cd, 0x0016, 0x0026, 0x0036, 0x0046, 0x0056,
- 0x0076, 0x0086, 0x0096, 0x00d6, 0x0156, 0x7014, 0x2048, 0x7020,
- 0x20a8, 0x8000, 0x7022, 0xa804, 0x9005, 0x0904, 0x3abf, 0x2048,
- 0x1f04, 0x3a73, 0x7068, 0x2040, 0xa290, 0xa394, 0xa498, 0xa59c,
+ 0x0150, 0x012e, 0x9ce0, 0x0018, 0x2001, 0x1819, 0x2004, 0x9c02,
+ 0x1a04, 0x3499, 0x0c30, 0x080c, 0xbde5, 0x012e, 0x0904, 0x3499,
+ 0x0804, 0x3467, 0x900e, 0x2001, 0x0005, 0x080c, 0x6e4b, 0x0126,
+ 0x2091, 0x8000, 0x080c, 0xc4c0, 0x080c, 0x6c02, 0x012e, 0x0804,
+ 0x3467, 0x00a6, 0x2950, 0xb19c, 0x080c, 0x64fc, 0x1904, 0x36e1,
+ 0xb6a8, 0x9682, 0x4000, 0x16e8, 0xb4a0, 0xb5a4, 0x080c, 0x6681,
+ 0x080c, 0x6650, 0x1520, 0x2061, 0x1cd0, 0x0126, 0x2091, 0x8000,
+ 0x6000, 0x9086, 0x0000, 0x0148, 0x6014, 0x904d, 0x0130, 0xa870,
+ 0x9406, 0x1118, 0xa874, 0x9506, 0x0158, 0x012e, 0x9ce0, 0x0018,
+ 0x2001, 0x1819, 0x2004, 0x9c02, 0x2009, 0x000d, 0x12b0, 0x0c28,
+ 0x080c, 0xbde5, 0x012e, 0x2009, 0x0003, 0x0178, 0x00e0, 0x900e,
+ 0x2001, 0x0005, 0x080c, 0x6e4b, 0x0126, 0x2091, 0x8000, 0x080c,
+ 0xc4c0, 0x080c, 0x6bf5, 0x012e, 0x0070, 0xb09b, 0x4005, 0xb19e,
+ 0x0010, 0xb09b, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030,
+ 0x2a48, 0x00ae, 0x0005, 0xb09b, 0x4000, 0x9006, 0x918d, 0x0001,
+ 0x2008, 0x2a48, 0x00ae, 0x0005, 0x81ff, 0x1904, 0x3499, 0x080c,
+ 0x4b28, 0x0904, 0x349c, 0x080c, 0x65c3, 0x0904, 0x3499, 0x080c,
+ 0x668b, 0x0904, 0x3499, 0x0804, 0x44a8, 0x81ff, 0x1904, 0x3499,
+ 0x080c, 0x4b40, 0x0904, 0x349c, 0x080c, 0x6716, 0x0904, 0x3499,
+ 0x2019, 0x0005, 0x79a8, 0x080c, 0x669a, 0x0904, 0x3499, 0x7888,
+ 0x908a, 0x1000, 0x1a04, 0x349c, 0x8003, 0x800b, 0x810b, 0x9108,
+ 0x080c, 0x84d0, 0x79a8, 0xd184, 0x1904, 0x3467, 0x0804, 0x44a8,
+ 0x0126, 0x2091, 0x8000, 0x81ff, 0x0118, 0x2009, 0x0001, 0x0450,
+ 0x2029, 0x07ff, 0x6458, 0x2400, 0x9506, 0x01f8, 0x2508, 0x080c,
+ 0x64fc, 0x11d8, 0x080c, 0x6716, 0x1128, 0x2009, 0x0002, 0x62bc,
+ 0x2518, 0x00c0, 0x2019, 0x0004, 0x900e, 0x080c, 0x669a, 0x1118,
+ 0x2009, 0x0006, 0x0078, 0x7884, 0x908a, 0x1000, 0x1270, 0x8003,
+ 0x800b, 0x810b, 0x9108, 0x080c, 0x84d0, 0x8529, 0x1ae0, 0x012e,
+ 0x0804, 0x3467, 0x012e, 0x0804, 0x3499, 0x012e, 0x0804, 0x349c,
+ 0x080c, 0x4b28, 0x0904, 0x349c, 0x080c, 0x65c3, 0x0904, 0x3499,
+ 0xbaa0, 0x2019, 0x0005, 0x00c6, 0x9066, 0x080c, 0x8a2b, 0x0076,
+ 0x903e, 0x080c, 0x8919, 0x900e, 0x080c, 0xda37, 0x007e, 0x00ce,
+ 0x080c, 0x6681, 0x0804, 0x3467, 0x080c, 0x4b28, 0x0904, 0x349c,
+ 0x080c, 0x6681, 0x2208, 0x0804, 0x3467, 0x0156, 0x00d6, 0x00e6,
+ 0x2069, 0x1911, 0x6810, 0x6914, 0x910a, 0x1208, 0x900e, 0x6816,
+ 0x9016, 0x901e, 0x20a9, 0x007e, 0x2069, 0x1000, 0x2d04, 0x905d,
+ 0x0118, 0xb84c, 0x0059, 0x9210, 0x8d68, 0x1f04, 0x3796, 0x2300,
+ 0x9218, 0x00ee, 0x00de, 0x015e, 0x0804, 0x3467, 0x0086, 0x9045,
+ 0x0140, 0x0016, 0x900e, 0x8108, 0xa000, 0x9045, 0x1de0, 0x2100,
+ 0x001e, 0x008e, 0x0005, 0x2069, 0x1911, 0x6910, 0x62b8, 0x0804,
+ 0x3467, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x3499, 0x0126,
+ 0x2091, 0x8000, 0x080c, 0x5678, 0x0128, 0x2009, 0x0007, 0x012e,
+ 0x0804, 0x3499, 0x012e, 0x6158, 0x9190, 0x3268, 0x2215, 0x9294,
+ 0x00ff, 0x6378, 0x83ff, 0x0108, 0x627c, 0x67d8, 0x97c4, 0x000a,
+ 0x98c6, 0x000a, 0x1118, 0x2031, 0x0001, 0x00e8, 0x97c4, 0x0022,
+ 0x98c6, 0x0022, 0x1118, 0x2031, 0x0003, 0x00a8, 0x97c4, 0x0012,
+ 0x98c6, 0x0012, 0x1118, 0x2031, 0x0002, 0x0068, 0x080c, 0x7351,
+ 0x1118, 0x2031, 0x0004, 0x0038, 0xd79c, 0x0120, 0x2009, 0x0005,
+ 0x0804, 0x3499, 0x9036, 0x7e9a, 0x7f9e, 0x0804, 0x3467, 0x6148,
+ 0x624c, 0x2019, 0x1962, 0x231c, 0x2001, 0x1963, 0x2004, 0x789a,
+ 0x0804, 0x3467, 0x0126, 0x2091, 0x8000, 0x6138, 0x623c, 0x6340,
+ 0x012e, 0x0804, 0x3467, 0x080c, 0x4b40, 0x0904, 0x349c, 0xba44,
+ 0xbb38, 0x0804, 0x3467, 0x080c, 0x0dc3, 0x080c, 0x4b40, 0x2110,
+ 0x0904, 0x349c, 0xb804, 0x908c, 0x00ff, 0x918e, 0x0006, 0x0140,
+ 0x9084, 0xff00, 0x9086, 0x0600, 0x2009, 0x0009, 0x1904, 0x3499,
+ 0x0126, 0x2091, 0x8000, 0x2019, 0x0005, 0x00c6, 0x9066, 0x080c,
+ 0x9e54, 0x080c, 0x8a2b, 0x0076, 0x903e, 0x080c, 0x8919, 0x900e,
+ 0x080c, 0xda37, 0x007e, 0x00ce, 0xb807, 0x0407, 0x012e, 0x0804,
+ 0x3467, 0x6148, 0x624c, 0x7884, 0x604a, 0x7b88, 0x634e, 0x2069,
+ 0x185e, 0x831f, 0x9305, 0x6816, 0x788c, 0x2069, 0x1962, 0x2d1c,
+ 0x206a, 0x7e98, 0x9682, 0x0014, 0x1210, 0x2031, 0x07d0, 0x2069,
+ 0x1963, 0x2d04, 0x266a, 0x789a, 0x0804, 0x3467, 0x0126, 0x2091,
+ 0x8000, 0x6138, 0x7884, 0x603a, 0x910e, 0xd1b4, 0x190c, 0x0ebd,
+ 0xd094, 0x0148, 0x00e6, 0x2071, 0x19d7, 0x79b4, 0x9192, 0x07d0,
+ 0x1208, 0x713e, 0x00ee, 0xd0c4, 0x01a8, 0x00d6, 0x78a8, 0x2009,
+ 0x1979, 0x200a, 0x78ac, 0x2011, 0x197a, 0x2012, 0x2069, 0x0100,
+ 0x6838, 0x9086, 0x0007, 0x1118, 0x2214, 0x6a5a, 0x0010, 0x210c,
+ 0x695a, 0x00de, 0x7888, 0xd0ec, 0x0178, 0x6034, 0xc08d, 0x6036,
+ 0x2001, 0x0050, 0x6072, 0x6076, 0x6052, 0x6067, 0x2450, 0x00c6,
+ 0x2061, 0x1aac, 0x2062, 0x00ce, 0x2011, 0x0114, 0x220c, 0x7888,
+ 0xd08c, 0x0118, 0x918d, 0x0080, 0x0010, 0x918c, 0xff7f, 0x2112,
+ 0x603c, 0x7988, 0x613e, 0x6140, 0x910d, 0x788c, 0x6042, 0x7a88,
+ 0x9294, 0x1000, 0x9205, 0x910e, 0xd1e4, 0x190c, 0x0ed3, 0x6040,
+ 0xd0c4, 0x0120, 0x2009, 0x030f, 0x200b, 0x3268, 0xd0cc, 0x0120,
+ 0x78b0, 0x2011, 0x0114, 0x2012, 0x012e, 0x0804, 0x3467, 0x00f6,
+ 0x2079, 0x1800, 0x7a38, 0xa89c, 0x9084, 0xfebf, 0x9215, 0xa8a0,
+ 0x9084, 0xfebf, 0x8002, 0x9214, 0x7838, 0x9084, 0x0140, 0x9215,
+ 0x7a3a, 0xa89b, 0x4000, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000,
+ 0x00fe, 0x0005, 0x7898, 0x9005, 0x01a8, 0x7888, 0x9025, 0x0904,
+ 0x349c, 0x788c, 0x902d, 0x0904, 0x349c, 0x900e, 0x080c, 0x64fc,
+ 0x1120, 0xba44, 0xbb38, 0xbc46, 0xbd3a, 0x9186, 0x07ff, 0x0190,
+ 0x8108, 0x0ca0, 0x080c, 0x4b40, 0x0904, 0x349c, 0x7888, 0x900d,
+ 0x0904, 0x349c, 0x788c, 0x9005, 0x0904, 0x349c, 0xba44, 0xb946,
+ 0xbb38, 0xb83a, 0x0804, 0x3467, 0x2011, 0xbc09, 0x0010, 0x2011,
+ 0xbc05, 0x080c, 0x5678, 0x1904, 0x3499, 0x00c6, 0x2061, 0x0100,
+ 0x7984, 0x9186, 0x00ff, 0x1130, 0x2001, 0x1817, 0x2004, 0x9085,
+ 0xff00, 0x0088, 0x9182, 0x007f, 0x16e0, 0x9188, 0x3268, 0x210d,
+ 0x918c, 0x00ff, 0x2001, 0x1817, 0x2004, 0x0026, 0x9116, 0x002e,
+ 0x0580, 0x810f, 0x9105, 0x0126, 0x2091, 0x8000, 0x0006, 0x080c,
+ 0xa347, 0x000e, 0x0510, 0x602e, 0x620a, 0x7984, 0x00b6, 0x080c,
+ 0x649d, 0x2b08, 0x00be, 0x1500, 0x6112, 0x6023, 0x0001, 0x080c,
+ 0x4b11, 0x01d0, 0x9006, 0xa86a, 0x7007, 0x0003, 0xa832, 0xa86c,
+ 0xc0fd, 0xa86e, 0x701f, 0x396f, 0x2900, 0x6016, 0x2009, 0x0032,
+ 0x080c, 0xa419, 0x012e, 0x00ce, 0x0005, 0x012e, 0x00ce, 0x0804,
+ 0x3499, 0x00ce, 0x0804, 0x349c, 0x080c, 0xa39d, 0x0cb0, 0xa830,
+ 0x9086, 0x0100, 0x0904, 0x3499, 0x0804, 0x3467, 0x2061, 0x1a4f,
+ 0x0126, 0x2091, 0x8000, 0x6000, 0xd084, 0x0170, 0x6104, 0x6208,
+ 0x2061, 0x1800, 0x6350, 0x6070, 0x789a, 0x60bc, 0x789e, 0x60b8,
+ 0x78aa, 0x012e, 0x0804, 0x3467, 0x900e, 0x2110, 0x0c88, 0x81ff,
+ 0x1904, 0x3499, 0x080c, 0x7351, 0x0904, 0x3499, 0x0126, 0x2091,
+ 0x8000, 0x6250, 0x6070, 0x9202, 0x0248, 0x9085, 0x0001, 0x080c,
+ 0x2771, 0x080c, 0x5896, 0x012e, 0x0804, 0x3467, 0x012e, 0x0804,
+ 0x349c, 0x0006, 0x0016, 0x00c6, 0x00e6, 0x2001, 0x1986, 0x2070,
+ 0x2061, 0x185e, 0x6008, 0x2072, 0x900e, 0x2011, 0x1400, 0x080c,
+ 0x871c, 0x7206, 0x00ee, 0x00ce, 0x001e, 0x000e, 0x0005, 0x0126,
+ 0x2091, 0x8000, 0x81ff, 0x0128, 0x012e, 0x2021, 0x400b, 0x0804,
+ 0x3469, 0x7884, 0xd0fc, 0x0158, 0x2001, 0x002a, 0x2004, 0x9005,
+ 0x0180, 0x9082, 0x00e1, 0x0298, 0x012e, 0x0804, 0x349c, 0x2001,
+ 0x002a, 0x2004, 0x9005, 0x0128, 0x2069, 0x185e, 0x6908, 0x9102,
+ 0x1230, 0x012e, 0x0804, 0x349c, 0x012e, 0x0804, 0x3499, 0x080c,
+ 0xa307, 0x0dd0, 0x7884, 0xd0fc, 0x0904, 0x3a3e, 0x00c6, 0x080c,
+ 0x4b11, 0x00ce, 0x0d88, 0xa86b, 0x0000, 0x7884, 0xa80a, 0x7898,
+ 0xa80e, 0x789c, 0xa812, 0x2001, 0x002e, 0x2004, 0xa81a, 0x2001,
+ 0x002f, 0x2004, 0xa81e, 0x2001, 0x0030, 0x2004, 0xa822, 0x2001,
+ 0x0031, 0x2004, 0xa826, 0x2001, 0x0034, 0x2004, 0xa82a, 0x2001,
+ 0x0035, 0x2004, 0xa82e, 0x2001, 0x002a, 0x2004, 0x9080, 0x0003,
+ 0x9084, 0x00fc, 0x8004, 0xa816, 0x080c, 0x3bc4, 0x0928, 0x7014,
+ 0x2048, 0xad2c, 0xac28, 0xab1c, 0xaa18, 0xa930, 0xa808, 0xd0b4,
+ 0x1120, 0x2029, 0x0000, 0x2021, 0x0000, 0x8906, 0x8006, 0x8007,
+ 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001c, 0x080c, 0x4b56,
+ 0x701f, 0x3b01, 0x7023, 0x0001, 0x012e, 0x0005, 0x0046, 0x0086,
+ 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x080c,
+ 0x39a9, 0x2001, 0x197c, 0x2003, 0x0000, 0x2021, 0x000a, 0x2061,
+ 0x0100, 0x6104, 0x0016, 0x60bb, 0x0000, 0x60bf, 0x32e1, 0x60bf,
+ 0x0012, 0x080c, 0x3c33, 0x080c, 0x3bf2, 0x00f6, 0x00e6, 0x0086,
+ 0x2940, 0x2071, 0x1a44, 0x2079, 0x0090, 0x00d6, 0x2069, 0x0000,
+ 0x6884, 0xd0b4, 0x0140, 0x2001, 0x0035, 0x2004, 0x780e, 0x2001,
+ 0x0034, 0x2004, 0x780a, 0x00de, 0x2011, 0x0001, 0x080c, 0x3fda,
+ 0x008e, 0x00ee, 0x00fe, 0x080c, 0x3efc, 0x080c, 0x3e01, 0x05b8,
+ 0x2001, 0x020b, 0x2004, 0x9084, 0x0140, 0x1db8, 0x080c, 0x404e,
+ 0x00f6, 0x2079, 0x0300, 0x78bc, 0x00fe, 0x908c, 0x0070, 0x1560,
+ 0x2071, 0x0200, 0x7037, 0x0000, 0x7050, 0x9084, 0xff00, 0x9086,
+ 0x3200, 0x1510, 0x7037, 0x0001, 0x7050, 0x9084, 0xff00, 0x9086,
+ 0xe100, 0x11d0, 0x7037, 0x0000, 0x7054, 0x7037, 0x0000, 0x715c,
+ 0x9106, 0x1190, 0x2001, 0x181f, 0x2004, 0x9106, 0x1168, 0x00c6,
+ 0x2061, 0x0100, 0x6024, 0x9084, 0x1e00, 0x00ce, 0x0138, 0x080c,
+ 0x3e0b, 0x080c, 0x3bed, 0x0058, 0x080c, 0x3bed, 0x080c, 0x3f72,
+ 0x080c, 0x3ef2, 0x2001, 0x020b, 0x2004, 0xd0e4, 0x0dd8, 0x2001,
+ 0x032a, 0x2003, 0x0004, 0x2061, 0x0100, 0x6027, 0x0002, 0x001e,
+ 0x6106, 0x2011, 0x020d, 0x2013, 0x0020, 0x60bb, 0x0000, 0x60bf,
+ 0x0108, 0x60bf, 0x0012, 0x2001, 0x0004, 0x200c, 0x918c, 0xfffd,
+ 0x2102, 0x080c, 0x12c4, 0x2009, 0x0028, 0x080c, 0x22fa, 0x2001,
+ 0x0227, 0x200c, 0x2102, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be,
+ 0x00ae, 0x009e, 0x008e, 0x004e, 0x2001, 0x197c, 0x2004, 0x9005,
+ 0x1118, 0x012e, 0x0804, 0x3467, 0x012e, 0x2021, 0x400c, 0x0804,
+ 0x3469, 0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0076, 0x0086,
+ 0x0096, 0x00d6, 0x0156, 0x7014, 0x2048, 0x7020, 0x20a8, 0x8000,
+ 0x7022, 0xa804, 0x9005, 0x0904, 0x3b5d, 0x2048, 0x1f04, 0x3b11,
+ 0x7068, 0x2040, 0xa290, 0xa394, 0xa498, 0xa59c, 0xa930, 0xa808,
+ 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, 0x0000, 0x0096, 0x7014,
+ 0x2048, 0xa868, 0x009e, 0x9086, 0x0103, 0x0170, 0x8906, 0x8006,
+ 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001c, 0x080c,
+ 0x4b56, 0x701f, 0x3b01, 0x00b0, 0x8906, 0x8006, 0x8007, 0x90bc,
+ 0x003f, 0x9084, 0xffc0, 0x9080, 0x001c, 0x21a8, 0x27e0, 0x2098,
+ 0x27e8, 0x20a0, 0x0006, 0x080c, 0x0f8a, 0x000e, 0x080c, 0x4b59,
+ 0x701f, 0x3b01, 0x015e, 0x00de, 0x009e, 0x008e, 0x007e, 0x005e,
+ 0x004e, 0x003e, 0x002e, 0x001e, 0x0005, 0x7014, 0x2048, 0xa868,
+ 0x9086, 0x0103, 0x1118, 0x701f, 0x3bc2, 0x0450, 0x7014, 0x2048,
+ 0xa86c, 0xc0fd, 0xa86e, 0x2009, 0x007f, 0x080c, 0x6497, 0x0110,
+ 0x9006, 0x0030, 0xb813, 0x00ff, 0xb817, 0xfffd, 0x080c, 0xc693,
+ 0x015e, 0x00de, 0x009e, 0x008e, 0x007e, 0x005e, 0x004e, 0x003e,
+ 0x002e, 0x001e, 0x0904, 0x3499, 0x0016, 0x0026, 0x0036, 0x0046,
+ 0x0056, 0x0076, 0x0086, 0x0096, 0x00d6, 0x0156, 0x701f, 0x3b94,
+ 0x7007, 0x0003, 0x0804, 0x3b52, 0xa830, 0x9086, 0x0100, 0x2021,
+ 0x400c, 0x0904, 0x3469, 0x0076, 0xad10, 0xac0c, 0xab24, 0xaa20,
0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000, 0x2021, 0x0000,
- 0x0096, 0x7014, 0x2048, 0xa868, 0x009e, 0x9086, 0x0103, 0x0170,
0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080,
- 0x001c, 0x080c, 0x4aa6, 0x701f, 0x3a63, 0x00b0, 0x8906, 0x8006,
- 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001c, 0x21a8,
- 0x27e0, 0x2098, 0x27e8, 0x20a0, 0x0006, 0x080c, 0x0f7e, 0x000e,
- 0x080c, 0x4aa9, 0x701f, 0x3a63, 0x015e, 0x00de, 0x009e, 0x008e,
- 0x007e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, 0x0005, 0x7014,
- 0x2048, 0xa868, 0x9086, 0x0103, 0x1118, 0x701f, 0x3b24, 0x0450,
- 0x7014, 0x2048, 0xa86c, 0xc0fd, 0xa86e, 0x2009, 0x007f, 0x080c,
- 0x63c1, 0x0110, 0x9006, 0x0030, 0xb813, 0x00ff, 0xb817, 0xfffd,
- 0x080c, 0xbcea, 0x015e, 0x00de, 0x009e, 0x008e, 0x007e, 0x005e,
- 0x004e, 0x003e, 0x002e, 0x001e, 0x0904, 0x33fd, 0x0016, 0x0026,
- 0x0036, 0x0046, 0x0056, 0x0076, 0x0086, 0x0096, 0x00d6, 0x0156,
- 0x701f, 0x3af6, 0x7007, 0x0003, 0x0804, 0x3ab4, 0xa830, 0x9086,
- 0x0100, 0x2021, 0x400c, 0x0904, 0x33cd, 0x0076, 0xad10, 0xac0c,
- 0xab24, 0xaa20, 0xa930, 0xa808, 0xd0b4, 0x1120, 0x2029, 0x0000,
- 0x2021, 0x0000, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084,
- 0xffc0, 0x9080, 0x001c, 0x21a8, 0x27e0, 0x2098, 0x27e8, 0x20a0,
- 0x0006, 0x080c, 0x0f7e, 0x000e, 0x080c, 0x4aa9, 0x007e, 0x701f,
- 0x3a63, 0x7023, 0x0001, 0x0005, 0x0804, 0x33cb, 0x0156, 0x00c6,
- 0xa814, 0x908a, 0x001e, 0x0218, 0xa833, 0x001e, 0x0010, 0xa832,
- 0x0078, 0x81ff, 0x0168, 0x0016, 0x080c, 0x4a61, 0x001e, 0x0130,
- 0xa800, 0x2040, 0xa008, 0xa80a, 0x2100, 0x0c58, 0x9006, 0x0010,
- 0x9085, 0x0001, 0x00ce, 0x015e, 0x0005, 0x0006, 0x00f6, 0x2079,
- 0x0000, 0x7880, 0x9086, 0x0044, 0x00fe, 0x000e, 0x0005, 0x2001,
- 0x197c, 0x2003, 0x0001, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x2061,
- 0x0200, 0x2001, 0x1987, 0x2004, 0x601a, 0x2061, 0x0100, 0x2001,
- 0x1986, 0x2004, 0x60ce, 0x6104, 0xc1ac, 0x6106, 0x080c, 0x4a61,
- 0xa813, 0x001a, 0xa817, 0x0001, 0x2900, 0xa85a, 0x2001, 0x002e,
- 0x2004, 0xa86a, 0x2001, 0x002f, 0x2004, 0xa86e, 0x2061, 0x0090,
- 0x2079, 0x0100, 0x2001, 0x1986, 0x2004, 0x6036, 0x2009, 0x0040,
- 0x080c, 0x22b2, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0xa872,
- 0x601a, 0xa877, 0x0000, 0x601f, 0x0000, 0x78ca, 0x9006, 0x600a,
- 0x600e, 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x00e6, 0x080c, 0x4a61,
- 0x2940, 0xa013, 0x001a, 0xa017, 0x0001, 0x2800, 0xa05a, 0x2001,
- 0x0030, 0x2004, 0xa86a, 0x2001, 0x0031, 0x2004, 0xa86e, 0x2001,
- 0x002a, 0x2004, 0x9084, 0xfff8, 0xa872, 0xa877, 0x0000, 0x2001,
- 0x032a, 0x2003, 0x0004, 0x2001, 0x0300, 0x2003, 0x0000, 0x2001,
- 0x020d, 0x2003, 0x0000, 0x2001, 0x0004, 0x200c, 0x918d, 0x0002,
- 0x2102, 0x00ee, 0x0005, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0148,
- 0x080c, 0x2a85, 0x1130, 0x9006, 0x080c, 0x29dd, 0x9006, 0x080c,
- 0x29c0, 0x2001, 0x197b, 0x2003, 0x0000, 0x7884, 0x9084, 0x0007,
- 0x0002, 0x3be4, 0x3bed, 0x3bf6, 0x3be1, 0x3be1, 0x3be1, 0x3be1,
- 0x3be1, 0x012e, 0x0804, 0x3400, 0x2009, 0x0114, 0x2104, 0x9085,
- 0x0800, 0x200a, 0x080c, 0x3db7, 0x00c0, 0x2009, 0x0114, 0x2104,
- 0x9085, 0x4000, 0x200a, 0x080c, 0x3db7, 0x0078, 0x080c, 0x72e5,
- 0x1128, 0x012e, 0x2009, 0x0016, 0x0804, 0x33fd, 0x81ff, 0x0128,
- 0x012e, 0x2021, 0x400b, 0x0804, 0x33cd, 0x2001, 0x0141, 0x2004,
- 0xd0dc, 0x0db0, 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6,
- 0x00e6, 0x00f6, 0x080c, 0x390b, 0x2009, 0x0101, 0x210c, 0x0016,
- 0x7ec8, 0x7dcc, 0x9006, 0x2068, 0x2060, 0x2058, 0x080c, 0x408b,
- 0x080c, 0x3fdb, 0x903e, 0x2720, 0x00f6, 0x00e6, 0x0086, 0x2940,
- 0x2071, 0x1a44, 0x2079, 0x0090, 0x00d6, 0x2069, 0x0000, 0x6884,
- 0xd0b4, 0x0120, 0x68d4, 0x780e, 0x68d0, 0x780a, 0x00de, 0x2011,
- 0x0001, 0x080c, 0x3f3c, 0x080c, 0x2a8d, 0x080c, 0x2a8d, 0x080c,
- 0x2a8d, 0x080c, 0x2a8d, 0x080c, 0x3f3c, 0x008e, 0x00ee, 0x00fe,
- 0x080c, 0x3e5e, 0x2009, 0x9c40, 0x8109, 0x11b0, 0x080c, 0x3d6d,
- 0x2001, 0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x001e, 0x00fe,
- 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, 0x2009,
- 0x0017, 0x080c, 0x33fd, 0x0cf8, 0x2001, 0x020b, 0x2004, 0x9084,
- 0x0140, 0x1d10, 0x00f6, 0x2079, 0x0000, 0x7884, 0x00fe, 0xd0bc,
- 0x0178, 0x2001, 0x0201, 0x200c, 0x81ff, 0x0150, 0x080c, 0x3e3c,
- 0x2d00, 0x9c05, 0x9b05, 0x0120, 0x080c, 0x3d6d, 0x0804, 0x3d1a,
- 0x080c, 0x3fb0, 0x080c, 0x3ed4, 0x080c, 0x3e1f, 0x080c, 0x3e54,
- 0x00f6, 0x2079, 0x0100, 0x7824, 0xd0ac, 0x0130, 0x8b58, 0x080c,
- 0x3d6d, 0x00fe, 0x0804, 0x3d1a, 0x00fe, 0x080c, 0x3d63, 0x1150,
- 0x8d68, 0x2001, 0x0032, 0x2602, 0x2001, 0x0033, 0x2502, 0x080c,
- 0x3d6d, 0x0080, 0x87ff, 0x0138, 0x2001, 0x0201, 0x2004, 0x9005,
- 0x1908, 0x8739, 0x0038, 0x2001, 0x1a41, 0x2004, 0x9086, 0x0000,
- 0x1904, 0x3c6a, 0x2001, 0x032f, 0x2003, 0x00f6, 0x8631, 0x1208,
- 0x8529, 0x2500, 0x9605, 0x0904, 0x3d1a, 0x7884, 0xd0bc, 0x0128,
- 0x2d00, 0x9c05, 0x9b05, 0x1904, 0x3d1a, 0xa013, 0x001a, 0x2001,
- 0x032a, 0x2003, 0x0004, 0x7884, 0xd0ac, 0x1148, 0x2001, 0x1a41,
- 0x2003, 0x0003, 0x2001, 0x032a, 0x2003, 0x0009, 0x0030, 0xa017,
- 0x0001, 0x78b4, 0x9005, 0x0108, 0xa016, 0x2800, 0xa05a, 0x2009,
- 0x0040, 0x080c, 0x22b2, 0x2900, 0xa85a, 0xa813, 0x001a, 0x7884,
- 0xd0a4, 0x1180, 0xa817, 0x0000, 0x00c6, 0x20a9, 0x0004, 0x2061,
- 0x0090, 0x602b, 0x0008, 0x2001, 0x0203, 0x2004, 0x1f04, 0x3cf1,
- 0x00ce, 0x0030, 0xa817, 0x0001, 0x78b0, 0x9005, 0x0108, 0xa816,
- 0x00f6, 0x00c6, 0x2079, 0x0100, 0x2061, 0x0090, 0x7827, 0x0002,
- 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0x601a, 0x0006, 0x2001,
- 0x002b, 0x2004, 0x601e, 0x78c6, 0x000e, 0x78ca, 0x00ce, 0x00fe,
- 0x0804, 0x3c24, 0x001e, 0x00c6, 0x2001, 0x032a, 0x2003, 0x0004,
- 0x2061, 0x0100, 0x6027, 0x0002, 0x6106, 0x2011, 0x020d, 0x2013,
- 0x0020, 0x2001, 0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x080c,
- 0x12b8, 0x7884, 0x9084, 0x0003, 0x9086, 0x0002, 0x01a0, 0x2009,
- 0x0028, 0x080c, 0x22b2, 0x2001, 0x0227, 0x200c, 0x2102, 0x6050,
- 0x9084, 0xb7ef, 0x6052, 0x602f, 0x0000, 0x604b, 0xf7f7, 0x6043,
- 0x0090, 0x6043, 0x0010, 0x00ce, 0x2d08, 0x2c10, 0x2b18, 0x2b00,
- 0x9c05, 0x9d05, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae,
- 0x009e, 0x008e, 0x1118, 0x012e, 0x0804, 0x33cb, 0x012e, 0x2021,
- 0x400c, 0x0804, 0x33cd, 0x9085, 0x0001, 0x1d04, 0x3d6c, 0x2091,
- 0x6000, 0x8420, 0x9486, 0x0064, 0x0005, 0x2001, 0x0105, 0x2003,
- 0x0010, 0x2001, 0x032a, 0x2003, 0x0004, 0x2001, 0x1a41, 0x2003,
- 0x0000, 0x0071, 0x2009, 0x0048, 0x080c, 0x22b2, 0x2001, 0x0227,
- 0x2024, 0x2402, 0x2001, 0x0109, 0x2003, 0x4000, 0x9026, 0x0005,
- 0x00f6, 0x00e6, 0x2071, 0x1a44, 0x7000, 0x9086, 0x0000, 0x0520,
- 0x2079, 0x0090, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c,
- 0x9106, 0x1120, 0x2009, 0x0040, 0x080c, 0x22b2, 0x782c, 0xd0fc,
- 0x0d88, 0x080c, 0x3fb0, 0x7000, 0x9086, 0x0000, 0x1d58, 0x782b,
- 0x0004, 0x782c, 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c, 0x22b2,
- 0x782b, 0x0002, 0x7003, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x00f6,
- 0x2079, 0x0100, 0x2001, 0x1817, 0x200c, 0x7932, 0x7936, 0x080c,
- 0x26e8, 0x7850, 0x9084, 0xfbff, 0x9085, 0x0030, 0x7852, 0x2019,
- 0x01f4, 0x8319, 0x1df0, 0x9084, 0xffcf, 0x9085, 0x2000, 0x7852,
- 0x20a9, 0x0046, 0x1d04, 0x3dd2, 0x2091, 0x6000, 0x1f04, 0x3dd2,
- 0x7850, 0x9085, 0x0400, 0x9084, 0xdfff, 0x7852, 0x2001, 0x0021,
- 0x2004, 0x9084, 0x0003, 0x9086, 0x0001, 0x1120, 0x7850, 0x9084,
- 0xdfff, 0x7852, 0x784b, 0xf7f7, 0x7843, 0x0090, 0x7843, 0x0010,
- 0x20a9, 0x0028, 0xa001, 0x1f04, 0x3df2, 0x7850, 0x9085, 0x1400,
- 0x7852, 0x2019, 0x61a8, 0x7854, 0xa001, 0xa001, 0xd08c, 0x1110,
- 0x8319, 0x1dc8, 0x7827, 0x0048, 0x7850, 0x9085, 0x0400, 0x7852,
- 0x7843, 0x0040, 0x2019, 0x01f4, 0xa001, 0xa001, 0x8319, 0x1de0,
- 0x2001, 0x0100, 0x080c, 0x2b65, 0x7827, 0x0020, 0x7843, 0x0000,
- 0x9006, 0x080c, 0x2b65, 0x7827, 0x0048, 0x00fe, 0x0005, 0x7884,
- 0xd0ac, 0x11c8, 0x00f6, 0x00e6, 0x2071, 0x1a41, 0x2079, 0x0320,
- 0x2001, 0x0201, 0x2004, 0x9005, 0x0160, 0x7000, 0x9086, 0x0000,
- 0x1140, 0x0051, 0xd0bc, 0x0108, 0x8738, 0x7003, 0x0003, 0x782b,
- 0x0019, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0300, 0x78bc,
- 0x00fe, 0x908c, 0x0070, 0x0178, 0x2009, 0x0032, 0x260a, 0x2009,
- 0x0033, 0x250a, 0xd0b4, 0x0108, 0x8c60, 0xd0ac, 0x0108, 0x8d68,
- 0xd0a4, 0x0108, 0x8b58, 0x0005, 0x00f6, 0x2079, 0x0200, 0x781c,
- 0xd084, 0x0110, 0x7837, 0x0050, 0x00fe, 0x0005, 0x00e6, 0x2071,
- 0x0100, 0x2001, 0x1987, 0x2004, 0x70e2, 0x080c, 0x3b45, 0x1188,
- 0x2001, 0x181f, 0x2004, 0x2009, 0x181e, 0x210c, 0x918c, 0x00ff,
- 0x706e, 0x716a, 0x7066, 0x918d, 0x3200, 0x7162, 0x7073, 0xe109,
- 0x0080, 0x702c, 0x9085, 0x0002, 0x702e, 0x2009, 0x1817, 0x210c,
- 0x716e, 0x7063, 0x0100, 0x7166, 0x719e, 0x706b, 0x0000, 0x7073,
- 0x0809, 0x7077, 0x0008, 0x7078, 0x9080, 0x0100, 0x707a, 0x7080,
- 0x8000, 0x7082, 0x7087, 0xaaaa, 0x9006, 0x708a, 0x708e, 0x707e,
- 0x70d6, 0x70ab, 0x0036, 0x70af, 0x95d5, 0x7014, 0x9084, 0x1984,
- 0x9085, 0x0092, 0x7016, 0x080c, 0x3fb0, 0x00f6, 0x2071, 0x1a41,
- 0x2079, 0x0320, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120,
- 0x689c, 0x780e, 0x6898, 0x780a, 0x00de, 0x080c, 0x3b45, 0x0140,
- 0x2001, 0x197b, 0x200c, 0x2003, 0x0001, 0x918e, 0x0001, 0x0120,
- 0x2009, 0x03e8, 0x8109, 0x1df0, 0x792c, 0xd1fc, 0x0110, 0x782b,
- 0x0004, 0x2011, 0x0011, 0x080c, 0x3f3c, 0x2011, 0x0001, 0x080c,
- 0x3f3c, 0x00fe, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a41,
- 0x2079, 0x0320, 0x792c, 0xd1fc, 0x0904, 0x3f39, 0x782b, 0x0002,
- 0x9026, 0xd19c, 0x1904, 0x3f35, 0x7000, 0x0002, 0x3f39, 0x3eea,
- 0x3f1a, 0x3f35, 0xd1bc, 0x1170, 0xd1dc, 0x1190, 0x8001, 0x7002,
- 0x2011, 0x0001, 0x080c, 0x3f3c, 0x0904, 0x3f39, 0x080c, 0x3f3c,
- 0x0804, 0x3f39, 0x00f6, 0x2079, 0x0300, 0x78bf, 0x0000, 0x00fe,
- 0x7810, 0x7914, 0x782b, 0x0004, 0x7812, 0x7916, 0x2001, 0x0201,
- 0x200c, 0x81ff, 0x0de8, 0x080c, 0x3e3c, 0x2009, 0x0001, 0x00f6,
- 0x2079, 0x0300, 0x78b8, 0x00fe, 0xd0ec, 0x0110, 0x2009, 0x0011,
- 0x792a, 0x00f8, 0x8001, 0x7002, 0x9184, 0x0880, 0x1140, 0x782c,
- 0xd0fc, 0x1904, 0x3ede, 0x2011, 0x0001, 0x00b1, 0x0090, 0xa010,
- 0x9092, 0x0004, 0x9086, 0x0016, 0x1120, 0xa000, 0xa05a, 0x2011,
- 0x0032, 0xa212, 0xd1dc, 0x1960, 0x0828, 0x782b, 0x0004, 0x7003,
- 0x0000, 0x00ee, 0x00fe, 0x0005, 0xa014, 0x9005, 0x0550, 0x8001,
- 0x0036, 0x0096, 0xa016, 0xa058, 0x2048, 0xa010, 0x2009, 0x0032,
- 0x911a, 0x831c, 0x831c, 0x938a, 0x0007, 0x1a0c, 0x0dc4, 0x9398,
- 0x3f6a, 0x231d, 0x083f, 0x9080, 0x0004, 0x7a2a, 0x7100, 0x8108,
- 0x7102, 0x009e, 0x003e, 0x908a, 0x0036, 0x1140, 0x0096, 0xa058,
- 0x2048, 0xa804, 0xa05a, 0x2001, 0x001a, 0x009e, 0xa012, 0x9085,
- 0x0001, 0x0005, 0x3fa7, 0x3f9e, 0x3f95, 0x3f8c, 0x3f83, 0x3f7a,
- 0x3f71, 0xa968, 0x7902, 0xa96c, 0x7906, 0xa970, 0x7912, 0xa974,
- 0x7916, 0x0005, 0xa978, 0x7902, 0xa97c, 0x7906, 0xa980, 0x7912,
- 0xa984, 0x7916, 0x0005, 0xa988, 0x7902, 0xa98c, 0x7906, 0xa990,
- 0x7912, 0xa994, 0x7916, 0x0005, 0xa998, 0x7902, 0xa99c, 0x7906,
- 0xa9a0, 0x7912, 0xa9a4, 0x7916, 0x0005, 0xa9a8, 0x7902, 0xa9ac,
- 0x7906, 0xa9b0, 0x7912, 0xa9b4, 0x7916, 0x0005, 0xa9b8, 0x7902,
- 0xa9bc, 0x7906, 0xa9c0, 0x7912, 0xa9c4, 0x7916, 0x0005, 0xa9c8,
- 0x7902, 0xa9cc, 0x7906, 0xa9d0, 0x7912, 0xa9d4, 0x7916, 0x0005,
- 0x00f6, 0x00e6, 0x0086, 0x2071, 0x1a44, 0x2079, 0x0090, 0x792c,
- 0xd1fc, 0x01e8, 0x782b, 0x0002, 0x2940, 0x9026, 0x7000, 0x0002,
- 0x3fd7, 0x3fc3, 0x3fce, 0x8001, 0x7002, 0xd19c, 0x1180, 0x2011,
- 0x0001, 0x080c, 0x3f3c, 0x190c, 0x3f3c, 0x0048, 0x8001, 0x7002,
- 0x782c, 0xd0fc, 0x1d38, 0x2011, 0x0001, 0x080c, 0x3f3c, 0x008e,
- 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x2061,
- 0x0200, 0x2001, 0x1987, 0x2004, 0x601a, 0x2061, 0x0100, 0x2001,
- 0x1986, 0x2004, 0x60ce, 0x6104, 0xc1ac, 0x6106, 0x2001, 0x002c,
- 0x2004, 0x9005, 0x0520, 0x2038, 0x2001, 0x002e, 0x2024, 0x2001,
- 0x002f, 0x201c, 0x080c, 0x4a61, 0xa813, 0x001a, 0xaf16, 0x2900,
- 0xa85a, 0x978a, 0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010,
- 0x2708, 0x903e, 0x0096, 0xa858, 0x2048, 0xa85c, 0x9080, 0x001a,
- 0x009e, 0x080c, 0x4053, 0x1d68, 0x2900, 0xa85a, 0x00d0, 0x080c,
- 0x4a61, 0xa813, 0x001a, 0xa817, 0x0001, 0x2900, 0xa85a, 0x2001,
- 0x002e, 0x2004, 0xa86a, 0x2001, 0x002f, 0x2004, 0xa86e, 0x2001,
- 0x002a, 0x2004, 0x9084, 0xfff8, 0xa872, 0x2001, 0x002b, 0x2004,
- 0xa876, 0x2061, 0x0090, 0x2079, 0x0100, 0x2001, 0x1986, 0x2004,
- 0x6036, 0x2009, 0x0040, 0x080c, 0x22b2, 0x2001, 0x002a, 0x2004,
- 0x9084, 0xfff8, 0x601a, 0x0006, 0x2001, 0x002b, 0x2004, 0x601e,
- 0x78c6, 0x000e, 0x78ca, 0x9006, 0x600a, 0x600e, 0x008e, 0x00ce,
- 0x00ee, 0x00fe, 0x0005, 0x00e6, 0x2071, 0x0080, 0xaa60, 0x22e8,
- 0x20a0, 0x20e1, 0x0000, 0x2099, 0x0088, 0x702b, 0x0026, 0x7402,
- 0x7306, 0x9006, 0x700a, 0x700e, 0x810b, 0x810b, 0x21a8, 0x810b,
- 0x7112, 0x702b, 0x0041, 0x702c, 0xd0fc, 0x0de8, 0x702b, 0x0002,
- 0x702b, 0x0040, 0x4005, 0x7400, 0x7304, 0x87ff, 0x0190, 0x0086,
- 0x0096, 0x2940, 0x0086, 0x080c, 0x4a61, 0x008e, 0xa058, 0x00a6,
- 0x2050, 0x2900, 0xb006, 0xa05a, 0x00ae, 0x009e, 0x008e, 0x9085,
- 0x0001, 0x00ee, 0x0005, 0x00e6, 0x2001, 0x002d, 0x2004, 0x9005,
- 0x0528, 0x2038, 0x2001, 0x0030, 0x2024, 0x2001, 0x0031, 0x201c,
- 0x080c, 0x4a61, 0x2940, 0xa813, 0x001a, 0xaf16, 0x2900, 0xa85a,
- 0x978a, 0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708,
- 0x903e, 0x0096, 0xa858, 0x2048, 0xa85c, 0x9080, 0x001a, 0x009e,
- 0x080c, 0x4053, 0x1d68, 0x2900, 0xa85a, 0x00d8, 0x080c, 0x4a61,
- 0x2940, 0xa013, 0x001a, 0xa017, 0x0001, 0x2800, 0xa05a, 0x2001,
- 0x0030, 0x2004, 0xa06a, 0x2001, 0x0031, 0x2004, 0xa06e, 0x2001,
- 0x002a, 0x2004, 0x9084, 0xfff8, 0xa072, 0x2001, 0x002b, 0x2004,
- 0xa076, 0x2001, 0x032a, 0x2003, 0x0004, 0x7884, 0xd0ac, 0x1180,
- 0x2001, 0x0101, 0x200c, 0x918d, 0x0200, 0x2102, 0xa017, 0x0000,
- 0x2001, 0x1a41, 0x2003, 0x0003, 0x2001, 0x032a, 0x2003, 0x0009,
- 0x2001, 0x0300, 0x2003, 0x0000, 0x2001, 0x020d, 0x2003, 0x0000,
- 0x2001, 0x0004, 0x200c, 0x918d, 0x0002, 0x2102, 0x00ee, 0x0005,
- 0x0126, 0x2091, 0x8000, 0x20a9, 0x001e, 0x20a1, 0x1840, 0x20e9,
- 0x0001, 0x9006, 0x4004, 0x2009, 0x013c, 0x200a, 0x012e, 0x7880,
- 0x9086, 0x0052, 0x0108, 0x0005, 0x0804, 0x33cb, 0x7d98, 0x7c9c,
- 0x0804, 0x34cf, 0x080c, 0x72e5, 0x190c, 0x5ebb, 0x2069, 0x185e,
+ 0x001c, 0x21a8, 0x27e0, 0x2098, 0x27e8, 0x20a0, 0x0006, 0x080c,
+ 0x0f8a, 0x000e, 0x080c, 0x4b59, 0x007e, 0x701f, 0x3b01, 0x7023,
+ 0x0001, 0x0005, 0x0804, 0x3467, 0x0156, 0x00c6, 0xa814, 0x908a,
+ 0x001e, 0x0218, 0xa833, 0x001e, 0x0010, 0xa832, 0x0078, 0x81ff,
+ 0x0168, 0x0016, 0x080c, 0x4b11, 0x001e, 0x0130, 0xa800, 0x2040,
+ 0xa008, 0xa80a, 0x2100, 0x0c58, 0x9006, 0x0010, 0x9085, 0x0001,
+ 0x00ce, 0x015e, 0x0005, 0x0006, 0x00f6, 0x2079, 0x0000, 0x7880,
+ 0x9086, 0x0044, 0x00fe, 0x000e, 0x0005, 0x2001, 0x197c, 0x2003,
+ 0x0001, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x2061, 0x0200, 0x2001,
+ 0x1987, 0x2004, 0x601a, 0x2061, 0x0100, 0x2001, 0x1986, 0x2004,
+ 0x60ce, 0x6104, 0xc1ac, 0x6106, 0x080c, 0x4b11, 0xa813, 0x001a,
+ 0xa817, 0x0001, 0x2900, 0xa85a, 0x2001, 0x002e, 0x2004, 0xa86a,
+ 0x2001, 0x002f, 0x2004, 0xa86e, 0x2061, 0x0090, 0x2079, 0x0100,
+ 0x2001, 0x1986, 0x2004, 0x6036, 0x2009, 0x0040, 0x080c, 0x22fa,
+ 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8, 0xa872, 0x601a, 0xa877,
+ 0x0000, 0x601f, 0x0000, 0x78ca, 0x9006, 0x600a, 0x600e, 0x00ce,
+ 0x00ee, 0x00fe, 0x0005, 0x00e6, 0x080c, 0x4b11, 0x2940, 0xa013,
+ 0x001a, 0xa017, 0x0001, 0x2800, 0xa05a, 0x2001, 0x0030, 0x2004,
+ 0xa86a, 0x2001, 0x0031, 0x2004, 0xa86e, 0x2001, 0x002a, 0x2004,
+ 0x9084, 0xfff8, 0xa872, 0xa877, 0x0000, 0x2001, 0x032a, 0x2003,
+ 0x0004, 0x2001, 0x0300, 0x2003, 0x0000, 0x2001, 0x020d, 0x2003,
+ 0x0000, 0x2001, 0x0004, 0x200c, 0x918d, 0x0002, 0x2102, 0x00ee,
+ 0x0005, 0x0126, 0x2091, 0x8000, 0x81ff, 0x0148, 0x080c, 0x2aee,
+ 0x1130, 0x9006, 0x080c, 0x2a46, 0x9006, 0x080c, 0x2a29, 0x2001,
+ 0x197b, 0x2003, 0x0000, 0x7884, 0x9084, 0x0007, 0x0002, 0x3c82,
+ 0x3c8b, 0x3c94, 0x3c7f, 0x3c7f, 0x3c7f, 0x3c7f, 0x3c7f, 0x012e,
+ 0x0804, 0x349c, 0x2009, 0x0114, 0x2104, 0x9085, 0x0800, 0x200a,
+ 0x080c, 0x3e55, 0x00c0, 0x2009, 0x0114, 0x2104, 0x9085, 0x4000,
+ 0x200a, 0x080c, 0x3e55, 0x0078, 0x080c, 0x7351, 0x1128, 0x012e,
+ 0x2009, 0x0016, 0x0804, 0x3499, 0x81ff, 0x0128, 0x012e, 0x2021,
+ 0x400b, 0x0804, 0x3469, 0x2001, 0x0141, 0x2004, 0xd0dc, 0x0db0,
+ 0x0086, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6,
+ 0x080c, 0x39a9, 0x2009, 0x0101, 0x210c, 0x0016, 0x7ec8, 0x7dcc,
+ 0x9006, 0x2068, 0x2060, 0x2058, 0x080c, 0x4129, 0x080c, 0x4079,
+ 0x903e, 0x2720, 0x00f6, 0x00e6, 0x0086, 0x2940, 0x2071, 0x1a44,
+ 0x2079, 0x0090, 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120,
+ 0x68d4, 0x780e, 0x68d0, 0x780a, 0x00de, 0x2011, 0x0001, 0x080c,
+ 0x3fda, 0x080c, 0x2af6, 0x080c, 0x2af6, 0x080c, 0x2af6, 0x080c,
+ 0x2af6, 0x080c, 0x3fda, 0x008e, 0x00ee, 0x00fe, 0x080c, 0x3efc,
+ 0x2009, 0x9c40, 0x8109, 0x11b0, 0x080c, 0x3e0b, 0x2001, 0x0004,
+ 0x200c, 0x918c, 0xfffd, 0x2102, 0x001e, 0x00fe, 0x00ee, 0x00de,
+ 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e, 0x2009, 0x0017, 0x080c,
+ 0x3499, 0x0cf8, 0x2001, 0x020b, 0x2004, 0x9084, 0x0140, 0x1d10,
+ 0x00f6, 0x2079, 0x0000, 0x7884, 0x00fe, 0xd0bc, 0x0178, 0x2001,
+ 0x0201, 0x200c, 0x81ff, 0x0150, 0x080c, 0x3eda, 0x2d00, 0x9c05,
+ 0x9b05, 0x0120, 0x080c, 0x3e0b, 0x0804, 0x3db8, 0x080c, 0x404e,
+ 0x080c, 0x3f72, 0x080c, 0x3ebd, 0x080c, 0x3ef2, 0x00f6, 0x2079,
+ 0x0100, 0x7824, 0xd0ac, 0x0130, 0x8b58, 0x080c, 0x3e0b, 0x00fe,
+ 0x0804, 0x3db8, 0x00fe, 0x080c, 0x3e01, 0x1150, 0x8d68, 0x2001,
+ 0x0032, 0x2602, 0x2001, 0x0033, 0x2502, 0x080c, 0x3e0b, 0x0080,
+ 0x87ff, 0x0138, 0x2001, 0x0201, 0x2004, 0x9005, 0x1908, 0x8739,
+ 0x0038, 0x2001, 0x1a41, 0x2004, 0x9086, 0x0000, 0x1904, 0x3d08,
+ 0x2001, 0x032f, 0x2003, 0x00f6, 0x8631, 0x1208, 0x8529, 0x2500,
+ 0x9605, 0x0904, 0x3db8, 0x7884, 0xd0bc, 0x0128, 0x2d00, 0x9c05,
+ 0x9b05, 0x1904, 0x3db8, 0xa013, 0x001a, 0x2001, 0x032a, 0x2003,
+ 0x0004, 0x7884, 0xd0ac, 0x1148, 0x2001, 0x1a41, 0x2003, 0x0003,
+ 0x2001, 0x032a, 0x2003, 0x0009, 0x0030, 0xa017, 0x0001, 0x78b4,
+ 0x9005, 0x0108, 0xa016, 0x2800, 0xa05a, 0x2009, 0x0040, 0x080c,
+ 0x22fa, 0x2900, 0xa85a, 0xa813, 0x001a, 0x7884, 0xd0a4, 0x1180,
+ 0xa817, 0x0000, 0x00c6, 0x20a9, 0x0004, 0x2061, 0x0090, 0x602b,
+ 0x0008, 0x2001, 0x0203, 0x2004, 0x1f04, 0x3d8f, 0x00ce, 0x0030,
+ 0xa817, 0x0001, 0x78b0, 0x9005, 0x0108, 0xa816, 0x00f6, 0x00c6,
+ 0x2079, 0x0100, 0x2061, 0x0090, 0x7827, 0x0002, 0x2001, 0x002a,
+ 0x2004, 0x9084, 0xfff8, 0x601a, 0x0006, 0x2001, 0x002b, 0x2004,
+ 0x601e, 0x78c6, 0x000e, 0x78ca, 0x00ce, 0x00fe, 0x0804, 0x3cc2,
+ 0x001e, 0x00c6, 0x2001, 0x032a, 0x2003, 0x0004, 0x2061, 0x0100,
+ 0x6027, 0x0002, 0x6106, 0x2011, 0x020d, 0x2013, 0x0020, 0x2001,
+ 0x0004, 0x200c, 0x918c, 0xfffd, 0x2102, 0x080c, 0x12c4, 0x7884,
+ 0x9084, 0x0003, 0x9086, 0x0002, 0x01a0, 0x2009, 0x0028, 0x080c,
+ 0x22fa, 0x2001, 0x0227, 0x200c, 0x2102, 0x6050, 0x9084, 0xb7ef,
+ 0x6052, 0x602f, 0x0000, 0x604b, 0xf7f7, 0x6043, 0x0090, 0x6043,
+ 0x0010, 0x00ce, 0x2d08, 0x2c10, 0x2b18, 0x2b00, 0x9c05, 0x9d05,
+ 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e, 0x008e,
+ 0x1118, 0x012e, 0x0804, 0x3467, 0x012e, 0x2021, 0x400c, 0x0804,
+ 0x3469, 0x9085, 0x0001, 0x1d04, 0x3e0a, 0x2091, 0x6000, 0x8420,
+ 0x9486, 0x0064, 0x0005, 0x2001, 0x0105, 0x2003, 0x0010, 0x2001,
+ 0x032a, 0x2003, 0x0004, 0x2001, 0x1a41, 0x2003, 0x0000, 0x0071,
+ 0x2009, 0x0048, 0x080c, 0x22fa, 0x2001, 0x0227, 0x2024, 0x2402,
+ 0x2001, 0x0109, 0x2003, 0x4000, 0x9026, 0x0005, 0x00f6, 0x00e6,
+ 0x2071, 0x1a44, 0x7000, 0x9086, 0x0000, 0x0520, 0x2079, 0x0090,
+ 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106, 0x1120,
+ 0x2009, 0x0040, 0x080c, 0x22fa, 0x782c, 0xd0fc, 0x0d88, 0x080c,
+ 0x404e, 0x7000, 0x9086, 0x0000, 0x1d58, 0x782b, 0x0004, 0x782c,
+ 0xd0ac, 0x1de8, 0x2009, 0x0040, 0x080c, 0x22fa, 0x782b, 0x0002,
+ 0x7003, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0100,
+ 0x2001, 0x1817, 0x200c, 0x7932, 0x7936, 0x080c, 0x2751, 0x7850,
+ 0x9084, 0xfbff, 0x9085, 0x0030, 0x7852, 0x2019, 0x01f4, 0x8319,
+ 0x1df0, 0x9084, 0xffcf, 0x9085, 0x2000, 0x7852, 0x20a9, 0x0046,
+ 0x1d04, 0x3e70, 0x2091, 0x6000, 0x1f04, 0x3e70, 0x7850, 0x9085,
+ 0x0400, 0x9084, 0xdfff, 0x7852, 0x2001, 0x0021, 0x2004, 0x9084,
+ 0x0003, 0x9086, 0x0001, 0x1120, 0x7850, 0x9084, 0xdfff, 0x7852,
+ 0x784b, 0xf7f7, 0x7843, 0x0090, 0x7843, 0x0010, 0x20a9, 0x0028,
+ 0xa001, 0x1f04, 0x3e90, 0x7850, 0x9085, 0x1400, 0x7852, 0x2019,
+ 0x61a8, 0x7854, 0xa001, 0xa001, 0xd08c, 0x1110, 0x8319, 0x1dc8,
+ 0x7827, 0x0048, 0x7850, 0x9085, 0x0400, 0x7852, 0x7843, 0x0040,
+ 0x2019, 0x01f4, 0xa001, 0xa001, 0x8319, 0x1de0, 0x2001, 0x0100,
+ 0x080c, 0x2bce, 0x7827, 0x0020, 0x7843, 0x0000, 0x9006, 0x080c,
+ 0x2bce, 0x7827, 0x0048, 0x00fe, 0x0005, 0x7884, 0xd0ac, 0x11c8,
+ 0x00f6, 0x00e6, 0x2071, 0x1a41, 0x2079, 0x0320, 0x2001, 0x0201,
+ 0x2004, 0x9005, 0x0160, 0x7000, 0x9086, 0x0000, 0x1140, 0x0051,
+ 0xd0bc, 0x0108, 0x8738, 0x7003, 0x0003, 0x782b, 0x0019, 0x00ee,
+ 0x00fe, 0x0005, 0x00f6, 0x2079, 0x0300, 0x78bc, 0x00fe, 0x908c,
+ 0x0070, 0x0178, 0x2009, 0x0032, 0x260a, 0x2009, 0x0033, 0x250a,
+ 0xd0b4, 0x0108, 0x8c60, 0xd0ac, 0x0108, 0x8d68, 0xd0a4, 0x0108,
+ 0x8b58, 0x0005, 0x00f6, 0x2079, 0x0200, 0x781c, 0xd084, 0x0110,
+ 0x7837, 0x0050, 0x00fe, 0x0005, 0x00e6, 0x2071, 0x0100, 0x2001,
+ 0x1987, 0x2004, 0x70e2, 0x080c, 0x3be3, 0x1188, 0x2001, 0x181f,
+ 0x2004, 0x2009, 0x181e, 0x210c, 0x918c, 0x00ff, 0x706e, 0x716a,
+ 0x7066, 0x918d, 0x3200, 0x7162, 0x7073, 0xe109, 0x0080, 0x702c,
+ 0x9085, 0x0002, 0x702e, 0x2009, 0x1817, 0x210c, 0x716e, 0x7063,
+ 0x0100, 0x7166, 0x719e, 0x706b, 0x0000, 0x7073, 0x0809, 0x7077,
+ 0x0008, 0x7078, 0x9080, 0x0100, 0x707a, 0x7080, 0x8000, 0x7082,
+ 0x7087, 0xaaaa, 0x9006, 0x708a, 0x708e, 0x707e, 0x70d6, 0x70ab,
+ 0x0036, 0x70af, 0x95d5, 0x7014, 0x9084, 0x1984, 0x9085, 0x0092,
+ 0x7016, 0x080c, 0x404e, 0x00f6, 0x2071, 0x1a41, 0x2079, 0x0320,
+ 0x00d6, 0x2069, 0x0000, 0x6884, 0xd0b4, 0x0120, 0x689c, 0x780e,
+ 0x6898, 0x780a, 0x00de, 0x080c, 0x3be3, 0x0140, 0x2001, 0x197b,
+ 0x200c, 0x2003, 0x0001, 0x918e, 0x0001, 0x0120, 0x2009, 0x03e8,
+ 0x8109, 0x1df0, 0x792c, 0xd1fc, 0x0110, 0x782b, 0x0004, 0x2011,
+ 0x0011, 0x080c, 0x3fda, 0x2011, 0x0001, 0x080c, 0x3fda, 0x00fe,
+ 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x2071, 0x1a41, 0x2079, 0x0320,
+ 0x792c, 0xd1fc, 0x0904, 0x3fd7, 0x782b, 0x0002, 0x9026, 0xd19c,
+ 0x1904, 0x3fd3, 0x7000, 0x0002, 0x3fd7, 0x3f88, 0x3fb8, 0x3fd3,
+ 0xd1bc, 0x1170, 0xd1dc, 0x1190, 0x8001, 0x7002, 0x2011, 0x0001,
+ 0x080c, 0x3fda, 0x0904, 0x3fd7, 0x080c, 0x3fda, 0x0804, 0x3fd7,
+ 0x00f6, 0x2079, 0x0300, 0x78bf, 0x0000, 0x00fe, 0x7810, 0x7914,
+ 0x782b, 0x0004, 0x7812, 0x7916, 0x2001, 0x0201, 0x200c, 0x81ff,
+ 0x0de8, 0x080c, 0x3eda, 0x2009, 0x0001, 0x00f6, 0x2079, 0x0300,
+ 0x78b8, 0x00fe, 0xd0ec, 0x0110, 0x2009, 0x0011, 0x792a, 0x00f8,
+ 0x8001, 0x7002, 0x9184, 0x0880, 0x1140, 0x782c, 0xd0fc, 0x1904,
+ 0x3f7c, 0x2011, 0x0001, 0x00b1, 0x0090, 0xa010, 0x9092, 0x0004,
+ 0x9086, 0x0016, 0x1120, 0xa000, 0xa05a, 0x2011, 0x0032, 0xa212,
+ 0xd1dc, 0x1960, 0x0828, 0x782b, 0x0004, 0x7003, 0x0000, 0x00ee,
+ 0x00fe, 0x0005, 0xa014, 0x9005, 0x0550, 0x8001, 0x0036, 0x0096,
+ 0xa016, 0xa058, 0x2048, 0xa010, 0x2009, 0x0032, 0x911a, 0x831c,
+ 0x831c, 0x938a, 0x0007, 0x1a0c, 0x0dc3, 0x9398, 0x4008, 0x231d,
+ 0x083f, 0x9080, 0x0004, 0x7a2a, 0x7100, 0x8108, 0x7102, 0x009e,
+ 0x003e, 0x908a, 0x0036, 0x1140, 0x0096, 0xa058, 0x2048, 0xa804,
+ 0xa05a, 0x2001, 0x001a, 0x009e, 0xa012, 0x9085, 0x0001, 0x0005,
+ 0x4045, 0x403c, 0x4033, 0x402a, 0x4021, 0x4018, 0x400f, 0xa968,
+ 0x7902, 0xa96c, 0x7906, 0xa970, 0x7912, 0xa974, 0x7916, 0x0005,
+ 0xa978, 0x7902, 0xa97c, 0x7906, 0xa980, 0x7912, 0xa984, 0x7916,
+ 0x0005, 0xa988, 0x7902, 0xa98c, 0x7906, 0xa990, 0x7912, 0xa994,
+ 0x7916, 0x0005, 0xa998, 0x7902, 0xa99c, 0x7906, 0xa9a0, 0x7912,
+ 0xa9a4, 0x7916, 0x0005, 0xa9a8, 0x7902, 0xa9ac, 0x7906, 0xa9b0,
+ 0x7912, 0xa9b4, 0x7916, 0x0005, 0xa9b8, 0x7902, 0xa9bc, 0x7906,
+ 0xa9c0, 0x7912, 0xa9c4, 0x7916, 0x0005, 0xa9c8, 0x7902, 0xa9cc,
+ 0x7906, 0xa9d0, 0x7912, 0xa9d4, 0x7916, 0x0005, 0x00f6, 0x00e6,
+ 0x0086, 0x2071, 0x1a44, 0x2079, 0x0090, 0x792c, 0xd1fc, 0x01e8,
+ 0x782b, 0x0002, 0x2940, 0x9026, 0x7000, 0x0002, 0x4075, 0x4061,
+ 0x406c, 0x8001, 0x7002, 0xd19c, 0x1180, 0x2011, 0x0001, 0x080c,
+ 0x3fda, 0x190c, 0x3fda, 0x0048, 0x8001, 0x7002, 0x782c, 0xd0fc,
+ 0x1d38, 0x2011, 0x0001, 0x080c, 0x3fda, 0x008e, 0x00ee, 0x00fe,
+ 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x2061, 0x0200, 0x2001,
+ 0x1987, 0x2004, 0x601a, 0x2061, 0x0100, 0x2001, 0x1986, 0x2004,
+ 0x60ce, 0x6104, 0xc1ac, 0x6106, 0x2001, 0x002c, 0x2004, 0x9005,
+ 0x0520, 0x2038, 0x2001, 0x002e, 0x2024, 0x2001, 0x002f, 0x201c,
+ 0x080c, 0x4b11, 0xa813, 0x001a, 0xaf16, 0x2900, 0xa85a, 0x978a,
+ 0x0007, 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e,
+ 0x0096, 0xa858, 0x2048, 0xa85c, 0x9080, 0x001a, 0x009e, 0x080c,
+ 0x40f1, 0x1d68, 0x2900, 0xa85a, 0x00d0, 0x080c, 0x4b11, 0xa813,
+ 0x001a, 0xa817, 0x0001, 0x2900, 0xa85a, 0x2001, 0x002e, 0x2004,
+ 0xa86a, 0x2001, 0x002f, 0x2004, 0xa86e, 0x2001, 0x002a, 0x2004,
+ 0x9084, 0xfff8, 0xa872, 0x2001, 0x002b, 0x2004, 0xa876, 0x2061,
+ 0x0090, 0x2079, 0x0100, 0x2001, 0x1986, 0x2004, 0x6036, 0x2009,
+ 0x0040, 0x080c, 0x22fa, 0x2001, 0x002a, 0x2004, 0x9084, 0xfff8,
+ 0x601a, 0x0006, 0x2001, 0x002b, 0x2004, 0x601e, 0x78c6, 0x000e,
+ 0x78ca, 0x9006, 0x600a, 0x600e, 0x008e, 0x00ce, 0x00ee, 0x00fe,
+ 0x0005, 0x00e6, 0x2071, 0x0080, 0xaa60, 0x22e8, 0x20a0, 0x20e1,
+ 0x0000, 0x2099, 0x0088, 0x702b, 0x0026, 0x7402, 0x7306, 0x9006,
+ 0x700a, 0x700e, 0x810b, 0x810b, 0x21a8, 0x810b, 0x7112, 0x702b,
+ 0x0041, 0x702c, 0xd0fc, 0x0de8, 0x702b, 0x0002, 0x702b, 0x0040,
+ 0x4005, 0x7400, 0x7304, 0x87ff, 0x0190, 0x0086, 0x0096, 0x2940,
+ 0x0086, 0x080c, 0x4b11, 0x008e, 0xa058, 0x00a6, 0x2050, 0x2900,
+ 0xb006, 0xa05a, 0x00ae, 0x009e, 0x008e, 0x9085, 0x0001, 0x00ee,
+ 0x0005, 0x00e6, 0x2001, 0x002d, 0x2004, 0x9005, 0x0528, 0x2038,
+ 0x2001, 0x0030, 0x2024, 0x2001, 0x0031, 0x201c, 0x080c, 0x4b11,
+ 0x2940, 0xa813, 0x001a, 0xaf16, 0x2900, 0xa85a, 0x978a, 0x0007,
+ 0x0220, 0x2138, 0x2009, 0x0007, 0x0010, 0x2708, 0x903e, 0x0096,
+ 0xa858, 0x2048, 0xa85c, 0x9080, 0x001a, 0x009e, 0x080c, 0x40f1,
+ 0x1d68, 0x2900, 0xa85a, 0x00d8, 0x080c, 0x4b11, 0x2940, 0xa013,
+ 0x001a, 0xa017, 0x0001, 0x2800, 0xa05a, 0x2001, 0x0030, 0x2004,
+ 0xa06a, 0x2001, 0x0031, 0x2004, 0xa06e, 0x2001, 0x002a, 0x2004,
+ 0x9084, 0xfff8, 0xa072, 0x2001, 0x002b, 0x2004, 0xa076, 0x2001,
+ 0x032a, 0x2003, 0x0004, 0x7884, 0xd0ac, 0x1180, 0x2001, 0x0101,
+ 0x200c, 0x918d, 0x0200, 0x2102, 0xa017, 0x0000, 0x2001, 0x1a41,
+ 0x2003, 0x0003, 0x2001, 0x032a, 0x2003, 0x0009, 0x2001, 0x0300,
+ 0x2003, 0x0000, 0x2001, 0x020d, 0x2003, 0x0000, 0x2001, 0x0004,
+ 0x200c, 0x918d, 0x0002, 0x2102, 0x00ee, 0x0005, 0x0126, 0x2091,
+ 0x8000, 0x20a9, 0x001e, 0x20a1, 0x1840, 0x20e9, 0x0001, 0x9006,
+ 0x4004, 0x2009, 0x013c, 0x200a, 0x012e, 0x7880, 0x9086, 0x0052,
+ 0x0108, 0x0005, 0x0804, 0x3467, 0x7d98, 0x7c9c, 0x0804, 0x356b,
+ 0x080c, 0x7351, 0x190c, 0x5f78, 0x2069, 0x185e, 0x2d00, 0x2009,
+ 0x0030, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x080c,
+ 0x4b56, 0x701f, 0x41c4, 0x0005, 0x080c, 0x5673, 0x1130, 0x3b00,
+ 0x3a08, 0xc194, 0xc095, 0x20d8, 0x21d0, 0x2069, 0x185e, 0x6800,
+ 0x9005, 0x0904, 0x349c, 0x2001, 0x180d, 0x2004, 0xd08c, 0x6804,
+ 0x0118, 0xc0a4, 0xc0ac, 0x6806, 0xd0ac, 0x0118, 0xd0a4, 0x0904,
+ 0x349c, 0xd094, 0x00c6, 0x2061, 0x0100, 0x6104, 0x0138, 0x6200,
+ 0x9292, 0x0005, 0x0218, 0x918c, 0xffdf, 0x0010, 0x918d, 0x0020,
+ 0x6106, 0x00ce, 0xd08c, 0x00c6, 0x2061, 0x0100, 0x6104, 0x0118,
+ 0x918d, 0x0010, 0x0010, 0x918c, 0xffef, 0x6106, 0x00ce, 0xd084,
+ 0x0158, 0x6a28, 0x928a, 0x007f, 0x1a04, 0x349c, 0x9288, 0x3268,
+ 0x210d, 0x918c, 0x00ff, 0x6162, 0xd0dc, 0x0130, 0x6828, 0x908a,
+ 0x007f, 0x1a04, 0x349c, 0x605a, 0x6888, 0x9084, 0x0030, 0x8004,
+ 0x8004, 0x8004, 0x8004, 0x0006, 0x2009, 0x198e, 0x9080, 0x284c,
+ 0x2005, 0x200a, 0x000e, 0x2009, 0x198f, 0x9080, 0x2850, 0x2005,
+ 0x200a, 0x6808, 0x908a, 0x0100, 0x0a04, 0x349c, 0x908a, 0x0841,
+ 0x1a04, 0x349c, 0x9084, 0x0007, 0x1904, 0x349c, 0x680c, 0x9005,
+ 0x0904, 0x349c, 0x6810, 0x9005, 0x0904, 0x349c, 0x6848, 0x6940,
+ 0x910a, 0x1a04, 0x349c, 0x8001, 0x0904, 0x349c, 0x684c, 0x6944,
+ 0x910a, 0x1a04, 0x349c, 0x8001, 0x0904, 0x349c, 0x2009, 0x195d,
+ 0x200b, 0x0000, 0x2001, 0x1880, 0x2004, 0xd0c4, 0x0140, 0x7884,
+ 0x200a, 0x2008, 0x080c, 0x0e51, 0x3b00, 0xc085, 0x20d8, 0x6814,
+ 0x908c, 0x00ff, 0x614a, 0x8007, 0x9084, 0x00ff, 0x604e, 0x080c,
+ 0x767d, 0x080c, 0x696f, 0x080c, 0x69d9, 0x6808, 0x602a, 0x080c,
+ 0x226c, 0x2009, 0x0170, 0x200b, 0x0080, 0xa001, 0xa001, 0x200b,
+ 0x0000, 0x0036, 0x6b08, 0x080c, 0x27ab, 0x003e, 0x6000, 0x9086,
+ 0x0000, 0x1904, 0x436d, 0x6818, 0x691c, 0x6a20, 0x6b24, 0x8007,
+ 0x810f, 0x8217, 0x831f, 0x6016, 0x611a, 0x621e, 0x6322, 0x6c04,
+ 0xd4f4, 0x0148, 0x6830, 0x6934, 0x6a38, 0x6b3c, 0x8007, 0x810f,
+ 0x8217, 0x831f, 0x0010, 0x9084, 0xf0ff, 0x6006, 0x610a, 0x620e,
+ 0x6312, 0x8007, 0x810f, 0x8217, 0x831f, 0x20a9, 0x0004, 0x20a1,
+ 0x1990, 0x20e9, 0x0001, 0x4001, 0x20a9, 0x0004, 0x20a1, 0x19aa,
+ 0x20e9, 0x0001, 0x4001, 0x080c, 0x8615, 0x00c6, 0x900e, 0x20a9,
+ 0x0001, 0x6b70, 0xd384, 0x0510, 0x0068, 0x2009, 0x0100, 0x210c,
+ 0x918e, 0x0008, 0x1110, 0x839d, 0x0010, 0x83f5, 0x3e18, 0x12b0,
+ 0x3508, 0x8109, 0x080c, 0x7c58, 0x6878, 0x6016, 0x6874, 0x2008,
+ 0x9084, 0xff00, 0x8007, 0x600a, 0x9184, 0x00ff, 0x6006, 0x8108,
+ 0x1118, 0x6003, 0x0003, 0x0010, 0x6003, 0x0001, 0x1f04, 0x42bd,
+ 0x00ce, 0x00c6, 0x2061, 0x1978, 0x2001, 0x180d, 0x2004, 0xd08c,
+ 0x11a8, 0x6a88, 0x9284, 0xc000, 0x2010, 0x9286, 0x0000, 0x1158,
+ 0x2063, 0x0000, 0x2001, 0x0001, 0x080c, 0x2a46, 0x2001, 0x0001,
+ 0x080c, 0x2a29, 0x0088, 0x9286, 0x4000, 0x1148, 0x2063, 0x0001,
+ 0x9006, 0x080c, 0x2a46, 0x9006, 0x080c, 0x2a29, 0x0028, 0x9286,
+ 0x8000, 0x1d30, 0x2063, 0x0002, 0x00ce, 0x00e6, 0x2c70, 0x080c,
+ 0x0ea2, 0x00ee, 0x6888, 0xd0ec, 0x0130, 0x2011, 0x0114, 0x2204,
+ 0x9085, 0x0100, 0x2012, 0x6a80, 0x9284, 0x0030, 0x9086, 0x0030,
+ 0x1128, 0x9294, 0xffcf, 0x9295, 0x0020, 0x6a82, 0x2001, 0x1958,
+ 0x6a80, 0x9294, 0x0030, 0x928e, 0x0000, 0x0170, 0x928e, 0x0010,
+ 0x0118, 0x928e, 0x0020, 0x0140, 0x2003, 0xaaaa, 0x080c, 0x2820,
+ 0x2001, 0x1949, 0x2102, 0x0008, 0x2102, 0x00c6, 0x2061, 0x0100,
+ 0x602f, 0x0040, 0x602f, 0x0000, 0x00ce, 0x080c, 0x7351, 0x0128,
+ 0x080c, 0x4f54, 0x0110, 0x080c, 0x2771, 0x60d0, 0x9005, 0x01c0,
+ 0x6003, 0x0001, 0x2009, 0x4355, 0x00d0, 0x080c, 0x7351, 0x1168,
+ 0x2011, 0x71cd, 0x080c, 0x84c2, 0x2011, 0x71c0, 0x080c, 0x85e0,
+ 0x080c, 0x7651, 0x080c, 0x727e, 0x0040, 0x080c, 0x5e72, 0x0028,
+ 0x6003, 0x0004, 0x2009, 0x436d, 0x0010, 0x0804, 0x3467, 0x2001,
+ 0x0170, 0x2004, 0x9084, 0x00ff, 0x9086, 0x004c, 0x1118, 0x2091,
+ 0x30bd, 0x0817, 0x2091, 0x303d, 0x0817, 0x6000, 0x9086, 0x0000,
+ 0x0904, 0x3499, 0x2069, 0x185e, 0x7890, 0x6842, 0x7894, 0x6846,
0x2d00, 0x2009, 0x0030, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039,
- 0x0001, 0x080c, 0x4aa6, 0x701f, 0x4126, 0x0005, 0x080c, 0x55b6,
- 0x1130, 0x3b00, 0x3a08, 0xc194, 0xc095, 0x20d8, 0x21d0, 0x2069,
- 0x185e, 0x6800, 0x9005, 0x0904, 0x3400, 0x2001, 0x180d, 0x2004,
- 0xd08c, 0x6804, 0x0118, 0xc0a4, 0xc0ac, 0x6806, 0xd0ac, 0x0118,
- 0xd0a4, 0x0904, 0x3400, 0xd094, 0x00c6, 0x2061, 0x0100, 0x6104,
- 0x0138, 0x6200, 0x9292, 0x0005, 0x0218, 0x918c, 0xffdf, 0x0010,
- 0x918d, 0x0020, 0x6106, 0x00ce, 0xd08c, 0x00c6, 0x2061, 0x0100,
- 0x6104, 0x0118, 0x918d, 0x0010, 0x0010, 0x918c, 0xffef, 0x6106,
- 0x00ce, 0xd084, 0x0158, 0x6a28, 0x928a, 0x007f, 0x1a04, 0x3400,
- 0x9288, 0x31cc, 0x210d, 0x918c, 0x00ff, 0x6162, 0xd0dc, 0x0130,
- 0x6828, 0x908a, 0x007f, 0x1a04, 0x3400, 0x605a, 0x6888, 0x9084,
- 0x0030, 0x8004, 0x8004, 0x8004, 0x8004, 0x0006, 0x2009, 0x198e,
- 0x9080, 0x27e3, 0x2005, 0x200a, 0x000e, 0x2009, 0x198f, 0x9080,
- 0x27e7, 0x2005, 0x200a, 0x6808, 0x908a, 0x0100, 0x0a04, 0x3400,
- 0x908a, 0x0841, 0x1a04, 0x3400, 0x9084, 0x0007, 0x1904, 0x3400,
- 0x680c, 0x9005, 0x0904, 0x3400, 0x6810, 0x9005, 0x0904, 0x3400,
- 0x6848, 0x6940, 0x910a, 0x1a04, 0x3400, 0x8001, 0x0904, 0x3400,
- 0x684c, 0x6944, 0x910a, 0x1a04, 0x3400, 0x8001, 0x0904, 0x3400,
- 0x2009, 0x195e, 0x200b, 0x0000, 0x2001, 0x1880, 0x2004, 0xd0c4,
- 0x0140, 0x7884, 0x200a, 0x2008, 0x080c, 0x0e53, 0x3b00, 0xc085,
- 0x20d8, 0x6814, 0x908c, 0x00ff, 0x614a, 0x8007, 0x9084, 0x00ff,
- 0x604e, 0x080c, 0x760d, 0x080c, 0x6862, 0x080c, 0x68f1, 0x6808,
- 0x602a, 0x080c, 0x2224, 0x2009, 0x0170, 0x200b, 0x0080, 0xa001,
- 0xa001, 0x200b, 0x0000, 0x0036, 0x6b08, 0x080c, 0x2742, 0x003e,
- 0x6000, 0x9086, 0x0000, 0x1904, 0x42ca, 0x6818, 0x691c, 0x6a20,
- 0x6b24, 0x8007, 0x810f, 0x8217, 0x831f, 0x6016, 0x611a, 0x621e,
- 0x6322, 0x6c04, 0xd4f4, 0x0148, 0x6830, 0x6934, 0x6a38, 0x6b3c,
- 0x8007, 0x810f, 0x8217, 0x831f, 0x0010, 0x9084, 0xf0ff, 0x6006,
- 0x610a, 0x620e, 0x6312, 0x8007, 0x810f, 0x8217, 0x831f, 0x20a9,
- 0x0004, 0x20a1, 0x1990, 0x20e9, 0x0001, 0x4001, 0x20a9, 0x0004,
- 0x20a1, 0x19aa, 0x20e9, 0x0001, 0x4001, 0x080c, 0x8480, 0x00c6,
- 0x900e, 0x20a9, 0x0001, 0x6b70, 0xd384, 0x0510, 0x0068, 0x2009,
- 0x0100, 0x210c, 0x918e, 0x0008, 0x1110, 0x839d, 0x0010, 0x83f5,
- 0x3e18, 0x12b0, 0x3508, 0x8109, 0x080c, 0x7bb8, 0x6878, 0x6016,
- 0x6874, 0x2008, 0x9084, 0xff00, 0x8007, 0x600a, 0x9184, 0x00ff,
- 0x6006, 0x8108, 0x1118, 0x6003, 0x0003, 0x0010, 0x6003, 0x0001,
- 0x1f04, 0x421f, 0x00ce, 0x00c6, 0x2061, 0x1978, 0x2001, 0x180d,
- 0x2004, 0xd08c, 0x11a8, 0x6a88, 0x9284, 0xc000, 0x2010, 0x9286,
- 0x0000, 0x1158, 0x2063, 0x0000, 0x2001, 0x0001, 0x080c, 0x29dd,
- 0x2001, 0x0001, 0x080c, 0x29c0, 0x0088, 0x9286, 0x4000, 0x1148,
- 0x2063, 0x0001, 0x9006, 0x080c, 0x29dd, 0x9006, 0x080c, 0x29c0,
- 0x0028, 0x9286, 0x8000, 0x1d30, 0x2063, 0x0002, 0x00ce, 0x6888,
- 0xd0ec, 0x0130, 0x2011, 0x0114, 0x2204, 0x9085, 0x0100, 0x2012,
- 0x6a80, 0x9284, 0x0030, 0x9086, 0x0030, 0x1128, 0x9294, 0xffcf,
- 0x9295, 0x0020, 0x6a82, 0x2001, 0x1959, 0x6a80, 0x9294, 0x0030,
- 0x928e, 0x0000, 0x0170, 0x928e, 0x0010, 0x0118, 0x928e, 0x0020,
- 0x0140, 0x2003, 0xaaaa, 0x080c, 0x27b7, 0x2001, 0x194a, 0x2102,
- 0x0008, 0x2102, 0x00c6, 0x2061, 0x0100, 0x602f, 0x0040, 0x602f,
- 0x0000, 0x00ce, 0x080c, 0x72e5, 0x0128, 0x080c, 0x4e97, 0x0110,
- 0x080c, 0x2708, 0x60d0, 0x9005, 0x01c0, 0x6003, 0x0001, 0x2009,
- 0x42b2, 0x00d0, 0x080c, 0x72e5, 0x1168, 0x2011, 0x7176, 0x080c,
- 0x835e, 0x2011, 0x7169, 0x080c, 0x8474, 0x080c, 0x75e1, 0x080c,
- 0x7212, 0x0040, 0x080c, 0x5db5, 0x0028, 0x6003, 0x0004, 0x2009,
- 0x42ca, 0x0010, 0x0804, 0x33cb, 0x2001, 0x0170, 0x2004, 0x9084,
- 0x00ff, 0x9086, 0x004c, 0x1118, 0x2091, 0x30bd, 0x0817, 0x2091,
- 0x303d, 0x0817, 0x6000, 0x9086, 0x0000, 0x0904, 0x33fd, 0x2069,
- 0x185e, 0x7890, 0x6842, 0x7894, 0x6846, 0x2d00, 0x2009, 0x0030,
- 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x0804, 0x4aa9,
- 0x9006, 0x080c, 0x2708, 0x81ff, 0x1904, 0x33fd, 0x080c, 0x72e5,
- 0x11b0, 0x080c, 0x75dc, 0x080c, 0x5ef6, 0x080c, 0x31c0, 0x0118,
- 0x6130, 0xc18d, 0x6132, 0x080c, 0xbef8, 0x0130, 0x080c, 0x7308,
- 0x1118, 0x080c, 0x72bd, 0x0038, 0x080c, 0x7212, 0x0020, 0x080c,
- 0x5ebb, 0x080c, 0x5db5, 0x0804, 0x33cb, 0x81ff, 0x1904, 0x33fd,
- 0x080c, 0x72e5, 0x1110, 0x0804, 0x33fd, 0x0126, 0x2091, 0x8000,
- 0x6190, 0x81ff, 0x0190, 0x704f, 0x0000, 0x2001, 0x1c80, 0x2009,
- 0x0040, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x080c,
- 0x4aa9, 0x701f, 0x33c9, 0x012e, 0x0005, 0x704f, 0x0001, 0x00d6,
- 0x2069, 0x1c80, 0x20a9, 0x0040, 0x20e9, 0x0001, 0x20a1, 0x1c80,
- 0x2019, 0xffff, 0x4304, 0x6558, 0x9588, 0x31cc, 0x210d, 0x918c,
- 0x00ff, 0x216a, 0x900e, 0x2011, 0x0002, 0x2100, 0x9506, 0x01a8,
- 0x080c, 0x6411, 0x1190, 0xb814, 0x821c, 0x0238, 0x9398, 0x1c80,
- 0x9085, 0xff00, 0x8007, 0x201a, 0x0038, 0x9398, 0x1c80, 0x2324,
- 0x94a4, 0xff00, 0x9405, 0x201a, 0x8210, 0x8108, 0x9182, 0x0080,
- 0x1208, 0x0c18, 0x8201, 0x8007, 0x2d0c, 0x9105, 0x206a, 0x00de,
- 0x20a9, 0x0040, 0x20a1, 0x1c80, 0x2099, 0x1c80, 0x080c, 0x5e46,
- 0x0804, 0x4325, 0x080c, 0x4a90, 0x0904, 0x3400, 0x080c, 0x4a61,
- 0x1120, 0x2009, 0x0002, 0x0804, 0x33fd, 0x080c, 0x55a7, 0xd0b4,
- 0x0558, 0x7884, 0x908e, 0x007e, 0x0538, 0x908e, 0x007f, 0x0520,
- 0x908e, 0x0080, 0x0508, 0x080c, 0x31bb, 0x1148, 0xb800, 0xd08c,
- 0x11d8, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x11a8, 0xa86b,
- 0x0000, 0xa86c, 0xc0fd, 0xa86e, 0x080c, 0xbb19, 0x1120, 0x2009,
- 0x0003, 0x0804, 0x33fd, 0x7007, 0x0003, 0x701f, 0x43b0, 0x0005,
- 0x080c, 0x4a90, 0x0904, 0x3400, 0x20a9, 0x002b, 0xb8b0, 0x20e0,
- 0xb8b4, 0x2098, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0,
- 0x4003, 0x20a9, 0x0008, 0x9080, 0x0006, 0x20a0, 0xb8b0, 0x20e0,
- 0xb8b4, 0x9080, 0x0006, 0x2098, 0x080c, 0x0f7e, 0x0070, 0x20a9,
- 0x0004, 0xa85c, 0x9080, 0x000a, 0x20a0, 0xb8b0, 0x20e0, 0xb8b4,
- 0x9080, 0x000a, 0x2098, 0x080c, 0x0f7e, 0x8906, 0x8006, 0x8007,
- 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2009, 0x002b,
- 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x4aa9, 0x81ff, 0x1904,
- 0x33fd, 0x080c, 0x4a78, 0x0904, 0x3400, 0x080c, 0x6588, 0x0904,
- 0x33fd, 0x0058, 0xa87c, 0x9005, 0x0120, 0x2009, 0x0004, 0x0804,
- 0x33fd, 0xa978, 0xaa98, 0x0804, 0x33cb, 0x080c, 0x55af, 0x0904,
- 0x33cb, 0x701f, 0x43fa, 0x7007, 0x0003, 0x0005, 0x81ff, 0x1904,
- 0x33fd, 0x7888, 0x908a, 0x1000, 0x1a04, 0x3400, 0x080c, 0x4a90,
- 0x0904, 0x3400, 0x080c, 0x6746, 0x0120, 0x080c, 0x674e, 0x1904,
- 0x3400, 0x080c, 0x660e, 0x0904, 0x33fd, 0x2019, 0x0004, 0x900e,
- 0x080c, 0x6592, 0x0904, 0x33fd, 0x7984, 0x7a88, 0x04c9, 0x08a8,
- 0xa8a0, 0x908a, 0x1000, 0x12f8, 0x080c, 0x4a8e, 0x01e0, 0x080c,
- 0x6746, 0x0118, 0x080c, 0x674e, 0x11b0, 0x080c, 0x660e, 0x2009,
- 0x0002, 0x0168, 0x2009, 0x0002, 0x2019, 0x0004, 0x080c, 0x6592,
- 0x2009, 0x0003, 0x0120, 0xa99c, 0xaaa0, 0x00d1, 0x0060, 0xa89b,
- 0x4005, 0xa99e, 0x0010, 0xa89b, 0x4006, 0x900e, 0x9085, 0x0001,
- 0x2001, 0x0030, 0x0005, 0xa89b, 0x4000, 0x080c, 0x55af, 0x0110,
+ 0x0001, 0x0804, 0x4b59, 0x9006, 0x080c, 0x2771, 0x81ff, 0x1904,
+ 0x3499, 0x080c, 0x7351, 0x11b0, 0x080c, 0x764c, 0x080c, 0x5fb3,
+ 0x080c, 0x325c, 0x0118, 0x6130, 0xc18d, 0x6132, 0x080c, 0xc8ce,
+ 0x0130, 0x080c, 0x7374, 0x1118, 0x080c, 0x7329, 0x0038, 0x080c,
+ 0x727e, 0x0020, 0x080c, 0x5f78, 0x080c, 0x5e72, 0x0804, 0x3467,
+ 0x81ff, 0x1904, 0x3499, 0x080c, 0x7351, 0x1110, 0x0804, 0x3499,
+ 0x0126, 0x2091, 0x8000, 0x6190, 0x81ff, 0x0190, 0x704f, 0x0000,
+ 0x2001, 0x1c80, 0x2009, 0x0040, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,
+ 0x2039, 0x0001, 0x080c, 0x4b59, 0x701f, 0x3465, 0x012e, 0x0005,
+ 0x704f, 0x0001, 0x00d6, 0x2069, 0x1c80, 0x20a9, 0x0040, 0x20e9,
+ 0x0001, 0x20a1, 0x1c80, 0x2019, 0xffff, 0x4304, 0x6558, 0x9588,
+ 0x3268, 0x210d, 0x918c, 0x00ff, 0x216a, 0x900e, 0x2011, 0x0002,
+ 0x2100, 0x9506, 0x01a8, 0x080c, 0x64fc, 0x1190, 0xb814, 0x821c,
+ 0x0238, 0x9398, 0x1c80, 0x9085, 0xff00, 0x8007, 0x201a, 0x0038,
+ 0x9398, 0x1c80, 0x2324, 0x94a4, 0xff00, 0x9405, 0x201a, 0x8210,
+ 0x8108, 0x9182, 0x0080, 0x1208, 0x0c18, 0x8201, 0x8007, 0x2d0c,
+ 0x9105, 0x206a, 0x00de, 0x20a9, 0x0040, 0x20a1, 0x1c80, 0x2099,
+ 0x1c80, 0x080c, 0x5f03, 0x0804, 0x43c8, 0x080c, 0x4b40, 0x0904,
+ 0x349c, 0x080c, 0x4b11, 0x1120, 0x2009, 0x0002, 0x0804, 0x3499,
+ 0x080c, 0x5664, 0xd0b4, 0x0558, 0x7884, 0x908e, 0x007e, 0x0538,
+ 0x908e, 0x007f, 0x0520, 0x908e, 0x0080, 0x0508, 0x080c, 0x3257,
+ 0x1148, 0xb800, 0xd08c, 0x11d8, 0xb804, 0x9084, 0x00ff, 0x9086,
+ 0x0006, 0x11a8, 0xa86b, 0x0000, 0xa86c, 0xc0fd, 0xa86e, 0x080c,
+ 0xc394, 0x1120, 0x2009, 0x0003, 0x0804, 0x3499, 0x7007, 0x0003,
+ 0x701f, 0x4453, 0x0005, 0x080c, 0x4b40, 0x0904, 0x349c, 0x20a9,
+ 0x002b, 0xb8b4, 0x20e0, 0xb8b8, 0x2098, 0xa860, 0x20e8, 0xa85c,
+ 0x9080, 0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008, 0x9080, 0x0006,
+ 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098, 0x080c,
+ 0x0f8a, 0x0070, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x000a, 0x20a0,
+ 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x000a, 0x2098, 0x080c, 0x0f8a,
+ 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080,
+ 0x0002, 0x2009, 0x002b, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804,
+ 0x4b59, 0x81ff, 0x1904, 0x3499, 0x080c, 0x4b28, 0x0904, 0x349c,
+ 0x080c, 0x6690, 0x0904, 0x3499, 0x0058, 0xa87c, 0x9005, 0x0120,
+ 0x2009, 0x0004, 0x0804, 0x3499, 0xa978, 0xaa98, 0x0804, 0x3467,
+ 0x080c, 0x566c, 0x0904, 0x3467, 0x701f, 0x449d, 0x7007, 0x0003,
+ 0x0005, 0x81ff, 0x1904, 0x3499, 0x7888, 0x908a, 0x1000, 0x1a04,
+ 0x349c, 0x080c, 0x4b40, 0x0904, 0x349c, 0x080c, 0x686d, 0x0120,
+ 0x080c, 0x6875, 0x1904, 0x349c, 0x080c, 0x6716, 0x0904, 0x3499,
+ 0x2019, 0x0004, 0x900e, 0x080c, 0x669a, 0x0904, 0x3499, 0x7984,
+ 0x7a88, 0x04c9, 0x08a8, 0xa8a0, 0x908a, 0x1000, 0x12f8, 0x080c,
+ 0x4b3e, 0x01e0, 0x080c, 0x686d, 0x0118, 0x080c, 0x6875, 0x11b0,
+ 0x080c, 0x6716, 0x2009, 0x0002, 0x0168, 0x2009, 0x0002, 0x2019,
+ 0x0004, 0x080c, 0x669a, 0x2009, 0x0003, 0x0120, 0xa99c, 0xaaa0,
+ 0x00d1, 0x0060, 0xa89b, 0x4005, 0xa99e, 0x0010, 0xa89b, 0x4006,
+ 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa89b, 0x4000,
+ 0x080c, 0x566c, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085, 0x0001,
+ 0x2001, 0x0000, 0x0005, 0x9186, 0x00ff, 0x0110, 0x0071, 0x0060,
+ 0x2029, 0x007e, 0x2061, 0x1800, 0x6458, 0x2400, 0x9506, 0x0110,
+ 0x2508, 0x0019, 0x8529, 0x1ec8, 0x0005, 0x080c, 0x64fc, 0x1138,
+ 0x2200, 0x8003, 0x800b, 0x810b, 0x9108, 0x080c, 0x84d0, 0x0005,
+ 0x81ff, 0x1904, 0x3499, 0x798c, 0x2001, 0x195c, 0x918c, 0x8000,
+ 0x2102, 0x080c, 0x4b28, 0x0904, 0x349c, 0x080c, 0x686d, 0x0120,
+ 0x080c, 0x6875, 0x1904, 0x349c, 0x080c, 0x65c3, 0x0904, 0x3499,
+ 0x080c, 0x6695, 0x0904, 0x3499, 0x2001, 0x195c, 0x2004, 0xd0fc,
+ 0x1904, 0x3467, 0x0804, 0x44a8, 0xa9a4, 0x2001, 0x195c, 0x918c,
+ 0x8000, 0xc18d, 0x2102, 0x080c, 0x4b33, 0x01a0, 0x080c, 0x686d,
+ 0x0118, 0x080c, 0x6875, 0x1170, 0x080c, 0x65c3, 0x2009, 0x0002,
+ 0x0128, 0x080c, 0x6695, 0x1170, 0x2009, 0x0003, 0xa89b, 0x4005,
+ 0xa99e, 0x0010, 0xa89b, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001,
+ 0x0030, 0x0005, 0xa89b, 0x4000, 0x2001, 0x195c, 0x2004, 0xd0fc,
+ 0x1128, 0x080c, 0x566c, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085,
+ 0x0001, 0x2001, 0x0000, 0x0005, 0x81ff, 0x1904, 0x3499, 0x798c,
+ 0x2001, 0x195b, 0x918c, 0x8000, 0x2102, 0x080c, 0x4b28, 0x0904,
+ 0x349c, 0x080c, 0x686d, 0x0120, 0x080c, 0x6875, 0x1904, 0x349c,
+ 0x080c, 0x65c3, 0x0904, 0x3499, 0x080c, 0x668b, 0x0904, 0x3499,
+ 0x2001, 0x195b, 0x2004, 0xd0fc, 0x1904, 0x3467, 0x0804, 0x44a8,
+ 0xa9a4, 0x2001, 0x195b, 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c,
+ 0x4b33, 0x01a0, 0x080c, 0x686d, 0x0118, 0x080c, 0x6875, 0x1170,
+ 0x080c, 0x65c3, 0x2009, 0x0002, 0x0128, 0x080c, 0x668b, 0x1170,
+ 0x2009, 0x0003, 0xa89b, 0x4005, 0xa99e, 0x0010, 0xa89b, 0x4006,
+ 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa89b, 0x4000,
+ 0x2001, 0x195b, 0x2004, 0xd0fc, 0x1128, 0x080c, 0x566c, 0x0110,
0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005,
- 0x9186, 0x00ff, 0x0110, 0x0071, 0x0060, 0x2029, 0x007e, 0x2061,
- 0x1800, 0x6458, 0x2400, 0x9506, 0x0110, 0x2508, 0x0019, 0x8529,
- 0x1ec8, 0x0005, 0x080c, 0x6411, 0x1138, 0x2200, 0x8003, 0x800b,
- 0x810b, 0x9108, 0x080c, 0x836c, 0x0005, 0x81ff, 0x1904, 0x33fd,
- 0x798c, 0x2001, 0x195d, 0x918c, 0x8000, 0x2102, 0x080c, 0x4a78,
- 0x0904, 0x3400, 0x080c, 0x6746, 0x0120, 0x080c, 0x674e, 0x1904,
- 0x3400, 0x080c, 0x64bb, 0x0904, 0x33fd, 0x080c, 0x658d, 0x0904,
- 0x33fd, 0x2001, 0x195d, 0x2004, 0xd0fc, 0x1904, 0x33cb, 0x0804,
- 0x4405, 0xa9a4, 0x2001, 0x195d, 0x918c, 0x8000, 0xc18d, 0x2102,
- 0x080c, 0x4a83, 0x01a0, 0x080c, 0x6746, 0x0118, 0x080c, 0x674e,
- 0x1170, 0x080c, 0x64bb, 0x2009, 0x0002, 0x0128, 0x080c, 0x658d,
- 0x1170, 0x2009, 0x0003, 0xa89b, 0x4005, 0xa99e, 0x0010, 0xa89b,
- 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa89b,
- 0x4000, 0x2001, 0x195d, 0x2004, 0xd0fc, 0x1128, 0x080c, 0x55af,
- 0x0110, 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001, 0x0000,
- 0x0005, 0x81ff, 0x1904, 0x33fd, 0x798c, 0x2001, 0x195c, 0x918c,
- 0x8000, 0x2102, 0x080c, 0x4a78, 0x0904, 0x3400, 0x080c, 0x6746,
- 0x0120, 0x080c, 0x674e, 0x1904, 0x3400, 0x080c, 0x64bb, 0x0904,
- 0x33fd, 0x080c, 0x6583, 0x0904, 0x33fd, 0x2001, 0x195c, 0x2004,
- 0xd0fc, 0x1904, 0x33cb, 0x0804, 0x4405, 0xa9a4, 0x2001, 0x195c,
- 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c, 0x4a83, 0x01a0, 0x080c,
- 0x6746, 0x0118, 0x080c, 0x674e, 0x1170, 0x080c, 0x64bb, 0x2009,
- 0x0002, 0x0128, 0x080c, 0x6583, 0x1170, 0x2009, 0x0003, 0xa89b,
- 0x4005, 0xa99e, 0x0010, 0xa89b, 0x4006, 0x900e, 0x9085, 0x0001,
- 0x2001, 0x0030, 0x0005, 0xa89b, 0x4000, 0x2001, 0x195c, 0x2004,
- 0xd0fc, 0x1128, 0x080c, 0x55af, 0x0110, 0x9006, 0x0018, 0x900e,
- 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x6100, 0x0804, 0x33cb,
- 0x080c, 0x4a90, 0x0904, 0x3400, 0x080c, 0x55bb, 0x1904, 0x33fd,
- 0x79a8, 0xd184, 0x1158, 0xb834, 0x8007, 0x789e, 0xb830, 0x8007,
- 0x789a, 0xbb2c, 0x831f, 0xba28, 0x8217, 0x0050, 0xb824, 0x8007,
- 0x789e, 0xb820, 0x8007, 0x789a, 0xbb1c, 0x831f, 0xba18, 0x8217,
- 0xb900, 0x918c, 0x0202, 0x0804, 0x33cb, 0x78a8, 0x909c, 0x0003,
- 0xd0ac, 0x1158, 0xd0b4, 0x1148, 0x939a, 0x0003, 0x1a04, 0x33fd,
- 0x6258, 0x7884, 0x9206, 0x1904, 0x45d5, 0x2031, 0x1848, 0x2009,
- 0x013c, 0x2136, 0x2001, 0x1840, 0x2009, 0x000c, 0x7a8c, 0x7b88,
- 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x0006, 0x78a8, 0x9084, 0x0080,
- 0x15b8, 0x0006, 0x0036, 0x2001, 0x1a5e, 0x201c, 0x7b9a, 0x2003,
- 0x0000, 0x2001, 0x1a5f, 0x201c, 0x7b9e, 0x2003, 0x0000, 0x2001,
- 0x1a60, 0x201c, 0x7ba2, 0x2003, 0x0000, 0x2001, 0x1a5a, 0x201c,
- 0x7baa, 0x2003, 0x0000, 0x2001, 0x1a61, 0x201c, 0x7bb2, 0x2003,
- 0x0000, 0x003e, 0x000e, 0x0126, 0x2091, 0x8000, 0x0036, 0x2001,
- 0x185b, 0x201c, 0x7bb6, 0x2003, 0x0000, 0x2001, 0x185c, 0x201c,
- 0x7bba, 0x2003, 0x0000, 0x003e, 0x012e, 0x000e, 0x0804, 0x4aa9,
- 0x000e, 0x2031, 0x0000, 0x2061, 0x18b9, 0x2c44, 0xa66e, 0xa17e,
- 0xa776, 0xa07a, 0xa292, 0xa396, 0xa49a, 0xa59e, 0x080c, 0x10eb,
- 0x7007, 0x0002, 0x701f, 0x45f5, 0x0005, 0x81ff, 0x1904, 0x33fd,
- 0x080c, 0x4a90, 0x0904, 0x3400, 0x080c, 0x6746, 0x1904, 0x33fd,
- 0x00c6, 0x080c, 0x4a61, 0x00ce, 0x0904, 0x33fd, 0xa86b, 0x0000,
- 0xa86c, 0xc0fd, 0xa86e, 0x7ea8, 0x080c, 0xbabf, 0x0904, 0x33fd,
- 0x7007, 0x0003, 0x701f, 0x462f, 0x0005, 0x0126, 0x2091, 0x8000,
- 0x0006, 0x0036, 0x2001, 0x185b, 0x201c, 0x7bb6, 0x2003, 0x0000,
- 0x2001, 0x185c, 0x201c, 0x7bba, 0x2003, 0x0000, 0x003e, 0x000e,
- 0x012e, 0x080c, 0x40f8, 0x0006, 0x0036, 0x2001, 0x1a5e, 0x201c,
- 0x7b9a, 0x2003, 0x0000, 0x2001, 0x1a5f, 0x201c, 0x7b9e, 0x2003,
- 0x0000, 0x2001, 0x1a60, 0x201c, 0x7ba2, 0x2003, 0x0000, 0x2001,
- 0x1a5a, 0x201c, 0x7baa, 0x2003, 0x0000, 0x2001, 0x1a61, 0x201c,
- 0x7bb2, 0x2003, 0x0000, 0x003e, 0x000e, 0x0804, 0x33cb, 0xa830,
- 0x9086, 0x0100, 0x0904, 0x33fd, 0x8906, 0x8006, 0x8007, 0x90bc,
- 0x003f, 0x9084, 0xffc0, 0x9080, 0x001c, 0x2009, 0x000c, 0x7a8c,
- 0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x4aa9, 0xa8b4, 0x909c, 0x0003,
- 0xd0ac, 0x1150, 0xd0b4, 0x1140, 0x939a, 0x0003, 0x1a04, 0x4695,
- 0x6258, 0xa89c, 0x9206, 0x11c8, 0x2031, 0x1848, 0x2009, 0x013c,
- 0x2136, 0x2001, 0x1840, 0x2009, 0x000c, 0xaaa4, 0xaba0, 0xacac,
- 0xada8, 0x2031, 0x0000, 0x2039, 0x0001, 0x2041, 0x1247, 0x080c,
- 0xa45b, 0x1528, 0x2009, 0x0002, 0x0420, 0xa99c, 0x080c, 0x6411,
- 0x0118, 0x2009, 0x000a, 0x0408, 0x080c, 0x6746, 0x2009, 0x0009,
- 0x11c0, 0x0096, 0x080c, 0x1001, 0x1120, 0x009e, 0x2009, 0x0002,
- 0x0080, 0x2900, 0x009e, 0xa806, 0xa86c, 0xc0fc, 0xa86e, 0xaeb4,
- 0x96b4, 0x000b, 0x080c, 0xbabf, 0x2009, 0x0003, 0x0110, 0x9006,
- 0x0005, 0xa89b, 0x4005, 0xa99e, 0x0010, 0xa89b, 0x4006, 0x900e,
- 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa87f, 0x0000, 0xa887,
- 0x0000, 0xa89b, 0x4000, 0x0126, 0x2091, 0x8000, 0x0006, 0x0036,
- 0x2001, 0x185b, 0x201c, 0xabc2, 0x2003, 0x0000, 0x2001, 0x185c,
- 0x201c, 0xabc6, 0x2003, 0x0000, 0x003e, 0x000e, 0x012e, 0xa8b4,
- 0xd0bc, 0x0178, 0x0126, 0x2091, 0x8000, 0x20a9, 0x001e, 0x20a1,
- 0x1840, 0x20e9, 0x0001, 0x9006, 0x4004, 0x2009, 0x013c, 0x200a,
- 0x012e, 0x0006, 0x0036, 0x2001, 0x1a5e, 0x201c, 0xabaa, 0x2003,
- 0x0000, 0x2001, 0x1a5f, 0x201c, 0xabae, 0x2003, 0x0000, 0x2001,
- 0x1a60, 0x201c, 0xabb2, 0x2003, 0x0000, 0x2001, 0x1a5a, 0x201c,
- 0xabb6, 0x2003, 0x0000, 0x2001, 0x1a61, 0x201c, 0xabbe, 0x2003,
- 0x0000, 0x003e, 0x000e, 0x0005, 0x9006, 0x080c, 0x2708, 0x78a8,
- 0x9084, 0x00ff, 0x9086, 0x00ff, 0x0118, 0x81ff, 0x1904, 0x33fd,
- 0x080c, 0x72e5, 0x190c, 0x5ebb, 0x7888, 0x908a, 0x1000, 0x1a04,
- 0x3400, 0x7984, 0x9186, 0x00ff, 0x0138, 0x9182, 0x007f, 0x1a04,
- 0x3400, 0x2100, 0x080c, 0x26d2, 0x0026, 0x00c6, 0x0126, 0x2091,
- 0x8000, 0x2061, 0x19d7, 0x601b, 0x0000, 0x601f, 0x0000, 0x607b,
- 0x0000, 0x607f, 0x0000, 0x080c, 0x72e5, 0x1158, 0x080c, 0x75dc,
- 0x080c, 0x5ef6, 0x9085, 0x0001, 0x080c, 0x732a, 0x080c, 0x7212,
- 0x00d0, 0x080c, 0x9e89, 0x2061, 0x0100, 0x2001, 0x1817, 0x2004,
- 0x9084, 0x00ff, 0x810f, 0x9105, 0x604a, 0x6043, 0x0090, 0x6043,
- 0x0010, 0x2009, 0x1975, 0x200b, 0x0000, 0x2009, 0x002d, 0x2011,
- 0x5de1, 0x080c, 0x8432, 0x7984, 0x080c, 0x72e5, 0x1110, 0x2009,
- 0x00ff, 0x7a88, 0x080c, 0x4468, 0x012e, 0x00ce, 0x002e, 0x0804,
- 0x33cb, 0x7984, 0x080c, 0x63c1, 0x2b08, 0x1904, 0x3400, 0x0804,
- 0x33cb, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x33fd, 0x60d8,
- 0xd0ac, 0x1130, 0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x33fd,
- 0x080c, 0x4a61, 0x1120, 0x2009, 0x0002, 0x0804, 0x33fd, 0x7984,
- 0x81ff, 0x0904, 0x3400, 0x9192, 0x0021, 0x1a04, 0x3400, 0x7a8c,
- 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x001a, 0x702a, 0xaf60,
- 0x7736, 0x080c, 0x4aa6, 0x701f, 0x478c, 0x7880, 0x9086, 0x006e,
- 0x0110, 0x701f, 0x5049, 0x0005, 0x2009, 0x0080, 0x080c, 0x6411,
- 0x1118, 0x080c, 0x6746, 0x0120, 0x2021, 0x400a, 0x0804, 0x33cd,
- 0x00d6, 0x0096, 0xa968, 0xaa70, 0xab74, 0xac78, 0xad7c, 0xae80,
- 0xa888, 0x90be, 0x0100, 0x0904, 0x4825, 0x90be, 0x0112, 0x0904,
- 0x4825, 0x90be, 0x0113, 0x0904, 0x4825, 0x90be, 0x0114, 0x0904,
- 0x4825, 0x90be, 0x0117, 0x0904, 0x4825, 0x90be, 0x011a, 0x0904,
- 0x4825, 0x90be, 0x011c, 0x0904, 0x4825, 0x90be, 0x0121, 0x0904,
- 0x480c, 0x90be, 0x0131, 0x0904, 0x480c, 0x90be, 0x0171, 0x0904,
- 0x4825, 0x90be, 0x0173, 0x0904, 0x4825, 0x90be, 0x01a1, 0x1128,
- 0xa898, 0x8007, 0xa89a, 0x0804, 0x4830, 0x90be, 0x0212, 0x0904,
- 0x4819, 0x90be, 0x0213, 0x05e8, 0x90be, 0x0214, 0x0500, 0x90be,
- 0x0217, 0x0188, 0x90be, 0x021a, 0x1120, 0xa8a0, 0x8007, 0xa8a2,
- 0x04e0, 0x90be, 0x021f, 0x05c8, 0x90be, 0x0300, 0x05b0, 0x009e,
- 0x00de, 0x0804, 0x3400, 0x7028, 0x9080, 0x0010, 0x2098, 0x20a0,
- 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0007, 0x080c, 0x486e, 0x7028,
- 0x9080, 0x000e, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9,
- 0x0001, 0x080c, 0x486e, 0x00c8, 0x7028, 0x9080, 0x000c, 0x2098,
- 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x487b,
- 0x00b8, 0x7028, 0x9080, 0x000e, 0x2098, 0x20a0, 0x7034, 0x20e0,
- 0x20e8, 0x20a9, 0x0001, 0x080c, 0x487b, 0x7028, 0x9080, 0x000c,
- 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x04f1,
- 0x00c6, 0x080c, 0x4a61, 0x0550, 0xa86c, 0xc0fd, 0xa86e, 0xa86b,
- 0x0119, 0x9006, 0xa886, 0xa883, 0x0020, 0xa88f, 0x0001, 0x810b,
- 0xa9b2, 0xa8b6, 0xaaba, 0xabbe, 0xacc2, 0xadc6, 0xa9ca, 0xa8ce,
- 0x00ce, 0x009e, 0x00de, 0xa86a, 0xa822, 0xa86c, 0xc0fd, 0xa86e,
- 0xa804, 0x2048, 0x080c, 0xbada, 0x1120, 0x2009, 0x0003, 0x0804,
- 0x33fd, 0x7007, 0x0003, 0x701f, 0x4865, 0x0005, 0x00ce, 0x009e,
- 0x00de, 0x2009, 0x0002, 0x0804, 0x33fd, 0xa820, 0x9086, 0x8001,
- 0x1904, 0x33cb, 0x2009, 0x0004, 0x0804, 0x33fd, 0x0016, 0x0026,
- 0x3510, 0x20a9, 0x0002, 0x4002, 0x4104, 0x4004, 0x8211, 0x1dc8,
- 0x002e, 0x001e, 0x0005, 0x0016, 0x0026, 0x0036, 0x0046, 0x3520,
- 0x20a9, 0x0004, 0x4002, 0x4304, 0x4204, 0x4104, 0x4004, 0x8421,
- 0x1db8, 0x004e, 0x003e, 0x002e, 0x001e, 0x0005, 0x81ff, 0x0120,
- 0x2009, 0x0001, 0x0804, 0x33fd, 0x60d8, 0xd0ac, 0x1188, 0x2009,
- 0x180d, 0x210c, 0xd18c, 0x0130, 0xd09c, 0x0120, 0x2009, 0x0016,
- 0x0804, 0x33fd, 0xd09c, 0x1120, 0x2009, 0x0005, 0x0804, 0x33fd,
- 0x7984, 0x78a8, 0x2040, 0x080c, 0x9e82, 0x1120, 0x9182, 0x007f,
- 0x0a04, 0x3400, 0x9186, 0x00ff, 0x0904, 0x3400, 0x9182, 0x0800,
- 0x1a04, 0x3400, 0x7a8c, 0x7b88, 0x6078, 0x9306, 0x1158, 0x607c,
- 0x924e, 0x0904, 0x3400, 0x080c, 0x9e82, 0x1120, 0x99cc, 0xff00,
- 0x0904, 0x3400, 0x0126, 0x2091, 0x8000, 0x2001, 0x180d, 0x2004,
- 0xd08c, 0x0190, 0x9386, 0x00ff, 0x0178, 0x0026, 0x2011, 0x8008,
- 0x080c, 0x6781, 0x002e, 0x0140, 0x918d, 0x8000, 0x080c, 0x67cb,
- 0x1118, 0x2001, 0x4009, 0x0420, 0x080c, 0x497d, 0x0528, 0x90c6,
- 0x4000, 0x1138, 0x00c6, 0x0006, 0x080c, 0x6643, 0x000e, 0x00ce,
- 0x00b8, 0x90c6, 0x4007, 0x1110, 0x2408, 0x0090, 0x90c6, 0x4008,
- 0x1118, 0x2708, 0x2610, 0x0060, 0x90c6, 0x4009, 0x1108, 0x0040,
- 0x90c6, 0x4006, 0x1108, 0x0020, 0x2001, 0x4005, 0x2009, 0x000a,
- 0x2020, 0x012e, 0x0804, 0x33cd, 0x2b00, 0x7026, 0x0016, 0x00b6,
- 0x00c6, 0x00e6, 0x2c70, 0x080c, 0x9f5b, 0x05a8, 0x2b00, 0x6012,
- 0x080c, 0xbc97, 0x2e58, 0x00ee, 0x00e6, 0x00c6, 0x080c, 0x4a61,
- 0x00ce, 0x2b70, 0x1158, 0x080c, 0x9f18, 0x00ee, 0x00ce, 0x00be,
- 0x001e, 0x012e, 0x2009, 0x0002, 0x0804, 0x33fd, 0x900e, 0xa96a,
- 0xa96e, 0x2900, 0x6016, 0xa932, 0xa86c, 0xc0fd, 0xd88c, 0x0108,
- 0xc0f5, 0xa86e, 0x080c, 0x3066, 0x6023, 0x0001, 0x9006, 0x080c,
- 0x635e, 0x2001, 0x0002, 0x080c, 0x6372, 0x2009, 0x0002, 0x080c,
- 0x9f88, 0x9085, 0x0001, 0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e,
- 0x1120, 0x2009, 0x0003, 0x0804, 0x33fd, 0x7007, 0x0003, 0x701f,
- 0x495a, 0x0005, 0xa830, 0x2009, 0x180d, 0x210c, 0xd18c, 0x0140,
- 0x2008, 0x918e, 0xdead, 0x1120, 0x2021, 0x4009, 0x0804, 0x33cd,
- 0x9086, 0x0100, 0x7024, 0x2058, 0x1138, 0x2009, 0x0004, 0xba04,
- 0x9294, 0x00ff, 0x0804, 0x54f7, 0x900e, 0xa86c, 0xd0f4, 0x1904,
- 0x33cb, 0x080c, 0x6643, 0x0804, 0x33cb, 0x00e6, 0x00d6, 0x0096,
- 0x83ff, 0x0904, 0x49c3, 0x902e, 0x080c, 0x9e82, 0x0130, 0x9026,
- 0x20a9, 0x0800, 0x2071, 0x1000, 0x0030, 0x2021, 0x007f, 0x20a9,
- 0x0781, 0x2071, 0x107f, 0x2e04, 0x9005, 0x11b0, 0x2100, 0x9406,
- 0x15d8, 0x2428, 0x94ce, 0x007f, 0x1120, 0x92ce, 0xfffd, 0x1518,
- 0x0030, 0x94ce, 0x0080, 0x1130, 0x92ce, 0xfffc, 0x11e0, 0x93ce,
- 0x00ff, 0x11c8, 0xc5fd, 0x0440, 0x2058, 0xbf10, 0x2700, 0x9306,
- 0x11a8, 0xbe14, 0x2600, 0x9206, 0x1188, 0x2400, 0x9106, 0x1140,
- 0xd884, 0x0558, 0x080c, 0x6746, 0x1540, 0x2001, 0x4000, 0x0430,
+ 0x6100, 0x0804, 0x3467, 0x080c, 0x4b40, 0x0904, 0x349c, 0x080c,
+ 0x5678, 0x1904, 0x3499, 0x79a8, 0xd184, 0x1158, 0xb834, 0x8007,
+ 0x789e, 0xb830, 0x8007, 0x789a, 0xbb2c, 0x831f, 0xba28, 0x8217,
+ 0x0050, 0xb824, 0x8007, 0x789e, 0xb820, 0x8007, 0x789a, 0xbb1c,
+ 0x831f, 0xba18, 0x8217, 0xb900, 0x918c, 0x0202, 0x0804, 0x3467,
+ 0x78a8, 0x909c, 0x0003, 0xd0ac, 0x1158, 0xd0b4, 0x1148, 0x939a,
+ 0x0003, 0x1a04, 0x3499, 0x6258, 0x7884, 0x9206, 0x1904, 0x4678,
+ 0x2031, 0x1848, 0x2009, 0x013c, 0x2136, 0x2001, 0x1840, 0x2009,
+ 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x2039, 0x0001, 0x0006,
+ 0x78a8, 0x9084, 0x0080, 0x15b8, 0x0006, 0x0036, 0x2001, 0x1a5e,
+ 0x201c, 0x7b9a, 0x2003, 0x0000, 0x2001, 0x1a5f, 0x201c, 0x7b9e,
+ 0x2003, 0x0000, 0x2001, 0x1a60, 0x201c, 0x7ba2, 0x2003, 0x0000,
+ 0x2001, 0x1a5a, 0x201c, 0x7baa, 0x2003, 0x0000, 0x2001, 0x1a61,
+ 0x201c, 0x7bb2, 0x2003, 0x0000, 0x003e, 0x000e, 0x0126, 0x2091,
+ 0x8000, 0x0036, 0x2001, 0x185b, 0x201c, 0x7bb6, 0x2003, 0x0000,
+ 0x2001, 0x185c, 0x201c, 0x7bba, 0x2003, 0x0000, 0x003e, 0x012e,
+ 0x000e, 0x0804, 0x4b59, 0x000e, 0x2031, 0x0000, 0x2061, 0x18b9,
+ 0x2c44, 0xa66e, 0xa17e, 0xa776, 0xa07a, 0xa292, 0xa396, 0xa49a,
+ 0xa59e, 0x080c, 0x10f7, 0x7007, 0x0002, 0x701f, 0x4698, 0x0005,
+ 0x81ff, 0x1904, 0x3499, 0x080c, 0x4b40, 0x0904, 0x349c, 0x080c,
+ 0x686d, 0x1904, 0x3499, 0x00c6, 0x080c, 0x4b11, 0x00ce, 0x0904,
+ 0x3499, 0xa86b, 0x0000, 0xa86c, 0xc0fd, 0xa86e, 0x7ea8, 0x080c,
+ 0xc33a, 0x0904, 0x3499, 0x7007, 0x0003, 0x701f, 0x46d2, 0x0005,
+ 0x0126, 0x2091, 0x8000, 0x0006, 0x0036, 0x2001, 0x185b, 0x201c,
+ 0x7bb6, 0x2003, 0x0000, 0x2001, 0x185c, 0x201c, 0x7bba, 0x2003,
+ 0x0000, 0x003e, 0x000e, 0x012e, 0x080c, 0x4196, 0x0006, 0x0036,
+ 0x2001, 0x1a5e, 0x201c, 0x7b9a, 0x2003, 0x0000, 0x2001, 0x1a5f,
+ 0x201c, 0x7b9e, 0x2003, 0x0000, 0x2001, 0x1a60, 0x201c, 0x7ba2,
+ 0x2003, 0x0000, 0x2001, 0x1a5a, 0x201c, 0x7baa, 0x2003, 0x0000,
+ 0x2001, 0x1a61, 0x201c, 0x7bb2, 0x2003, 0x0000, 0x003e, 0x000e,
+ 0x0804, 0x3467, 0xa830, 0x9086, 0x0100, 0x0904, 0x3499, 0x8906,
+ 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x001c,
+ 0x2009, 0x000c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x4b59,
+ 0xa8b4, 0x909c, 0x0003, 0xd0ac, 0x1150, 0xd0b4, 0x1140, 0x939a,
+ 0x0003, 0x1a04, 0x4738, 0x6258, 0xa89c, 0x9206, 0x11c8, 0x2031,
+ 0x1848, 0x2009, 0x013c, 0x2136, 0x2001, 0x1840, 0x2009, 0x000c,
+ 0xaaa4, 0xaba0, 0xacac, 0xada8, 0x2031, 0x0000, 0x2039, 0x0001,
+ 0x2041, 0x1253, 0x080c, 0xa8fb, 0x1528, 0x2009, 0x0002, 0x0420,
+ 0xa99c, 0x080c, 0x64fc, 0x0118, 0x2009, 0x000a, 0x0408, 0x080c,
+ 0x686d, 0x2009, 0x0009, 0x11c0, 0x0096, 0x080c, 0x100d, 0x1120,
+ 0x009e, 0x2009, 0x0002, 0x0080, 0x2900, 0x009e, 0xa806, 0xa86c,
+ 0xc0fc, 0xa86e, 0xaeb4, 0x96b4, 0x000b, 0x080c, 0xc33a, 0x2009,
+ 0x0003, 0x0110, 0x9006, 0x0005, 0xa89b, 0x4005, 0xa99e, 0x0010,
+ 0xa89b, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005,
+ 0xa87f, 0x0000, 0xa887, 0x0000, 0xa89b, 0x4000, 0x0126, 0x2091,
+ 0x8000, 0x0006, 0x0036, 0x2001, 0x185b, 0x201c, 0xabc2, 0x2003,
+ 0x0000, 0x2001, 0x185c, 0x201c, 0xabc6, 0x2003, 0x0000, 0x003e,
+ 0x000e, 0x012e, 0xa8b4, 0xd0bc, 0x0178, 0x0126, 0x2091, 0x8000,
+ 0x20a9, 0x001e, 0x20a1, 0x1840, 0x20e9, 0x0001, 0x9006, 0x4004,
+ 0x2009, 0x013c, 0x200a, 0x012e, 0x0006, 0x0036, 0x2001, 0x1a5e,
+ 0x201c, 0xabaa, 0x2003, 0x0000, 0x2001, 0x1a5f, 0x201c, 0xabae,
+ 0x2003, 0x0000, 0x2001, 0x1a60, 0x201c, 0xabb2, 0x2003, 0x0000,
+ 0x2001, 0x1a5a, 0x201c, 0xabb6, 0x2003, 0x0000, 0x2001, 0x1a61,
+ 0x201c, 0xabbe, 0x2003, 0x0000, 0x003e, 0x000e, 0x0005, 0x9006,
+ 0x080c, 0x2771, 0x78a8, 0x9084, 0x00ff, 0x9086, 0x00ff, 0x0118,
+ 0x81ff, 0x1904, 0x3499, 0x080c, 0x7351, 0x190c, 0x5f78, 0x7888,
+ 0x908a, 0x1000, 0x1a04, 0x349c, 0x7984, 0x9186, 0x00ff, 0x0138,
+ 0x9182, 0x007f, 0x1a04, 0x349c, 0x2100, 0x080c, 0x273b, 0x0026,
+ 0x00c6, 0x0126, 0x2091, 0x8000, 0x2061, 0x19d7, 0x601b, 0x0000,
+ 0x601f, 0x0000, 0x607b, 0x0000, 0x607f, 0x0000, 0x080c, 0x7351,
+ 0x1158, 0x080c, 0x764c, 0x080c, 0x5fb3, 0x9085, 0x0001, 0x080c,
+ 0x7395, 0x080c, 0x727e, 0x00d0, 0x080c, 0xa30e, 0x2061, 0x0100,
+ 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, 0x810f, 0x9105, 0x604a,
+ 0x6043, 0x0090, 0x6043, 0x0010, 0x2009, 0x1975, 0x200b, 0x0000,
+ 0x2009, 0x002d, 0x2011, 0x5e9e, 0x080c, 0x859e, 0x7984, 0x080c,
+ 0x7351, 0x1110, 0x2009, 0x00ff, 0x7a88, 0x080c, 0x450b, 0x012e,
+ 0x00ce, 0x002e, 0x0804, 0x3467, 0x7984, 0x080c, 0x6497, 0x2b08,
+ 0x1904, 0x349c, 0x0804, 0x3467, 0x81ff, 0x0120, 0x2009, 0x0001,
+ 0x0804, 0x3499, 0x60d8, 0xd0ac, 0x1130, 0xd09c, 0x1120, 0x2009,
+ 0x0005, 0x0804, 0x3499, 0x080c, 0x4b11, 0x1120, 0x2009, 0x0002,
+ 0x0804, 0x3499, 0x7984, 0x81ff, 0x0904, 0x349c, 0x9192, 0x0021,
+ 0x1a04, 0x349c, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080,
+ 0x001a, 0x702a, 0xaf60, 0x7736, 0x080c, 0x4b56, 0x701f, 0x482f,
+ 0x7880, 0x9086, 0x006e, 0x0110, 0x701f, 0x5106, 0x0005, 0x2009,
+ 0x0080, 0x080c, 0x64fc, 0x1118, 0x080c, 0x686d, 0x0120, 0x2021,
+ 0x400a, 0x0804, 0x3469, 0x00d6, 0x0096, 0xa968, 0xaa70, 0xab74,
+ 0xac78, 0xad7c, 0xae80, 0xa888, 0x90be, 0x0100, 0x0904, 0x48c8,
+ 0x90be, 0x0112, 0x0904, 0x48c8, 0x90be, 0x0113, 0x0904, 0x48c8,
+ 0x90be, 0x0114, 0x0904, 0x48c8, 0x90be, 0x0117, 0x0904, 0x48c8,
+ 0x90be, 0x011a, 0x0904, 0x48c8, 0x90be, 0x011c, 0x0904, 0x48c8,
+ 0x90be, 0x0121, 0x0904, 0x48af, 0x90be, 0x0131, 0x0904, 0x48af,
+ 0x90be, 0x0171, 0x0904, 0x48c8, 0x90be, 0x0173, 0x0904, 0x48c8,
+ 0x90be, 0x01a1, 0x1128, 0xa898, 0x8007, 0xa89a, 0x0804, 0x48d3,
+ 0x90be, 0x0212, 0x0904, 0x48bc, 0x90be, 0x0213, 0x05e8, 0x90be,
+ 0x0214, 0x0500, 0x90be, 0x0217, 0x0188, 0x90be, 0x021a, 0x1120,
+ 0xa8a0, 0x8007, 0xa8a2, 0x04e0, 0x90be, 0x021f, 0x05c8, 0x90be,
+ 0x0300, 0x05b0, 0x009e, 0x00de, 0x0804, 0x349c, 0x7028, 0x9080,
+ 0x0010, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0007,
+ 0x080c, 0x4911, 0x7028, 0x9080, 0x000e, 0x2098, 0x20a0, 0x7034,
+ 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x4911, 0x00c8, 0x7028,
+ 0x9080, 0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9,
+ 0x0001, 0x080c, 0x491e, 0x00b8, 0x7028, 0x9080, 0x000e, 0x2098,
+ 0x20a0, 0x7034, 0x20e0, 0x20e8, 0x20a9, 0x0001, 0x080c, 0x491e,
+ 0x7028, 0x9080, 0x000c, 0x2098, 0x20a0, 0x7034, 0x20e0, 0x20e8,
+ 0x20a9, 0x0001, 0x04f1, 0x00c6, 0x080c, 0x4b11, 0x0550, 0xa86c,
+ 0xc0fd, 0xa86e, 0xa86b, 0x0119, 0x9006, 0xa886, 0xa883, 0x0020,
+ 0xa88f, 0x0001, 0x810b, 0xa9b2, 0xa8b6, 0xaaba, 0xabbe, 0xacc2,
+ 0xadc6, 0xa9ca, 0xa8ce, 0x00ce, 0x009e, 0x00de, 0xa86a, 0xa822,
+ 0xa86c, 0xc0fd, 0xa86e, 0xa804, 0x2048, 0x080c, 0xc355, 0x1120,
+ 0x2009, 0x0003, 0x0804, 0x3499, 0x7007, 0x0003, 0x701f, 0x4908,
+ 0x0005, 0x00ce, 0x009e, 0x00de, 0x2009, 0x0002, 0x0804, 0x3499,
+ 0xa820, 0x9086, 0x8001, 0x1904, 0x3467, 0x2009, 0x0004, 0x0804,
+ 0x3499, 0x0016, 0x0026, 0x3510, 0x20a9, 0x0002, 0x4002, 0x4104,
+ 0x4004, 0x8211, 0x1dc8, 0x002e, 0x001e, 0x0005, 0x0016, 0x0026,
+ 0x0036, 0x0046, 0x3520, 0x20a9, 0x0004, 0x4002, 0x4304, 0x4204,
+ 0x4104, 0x4004, 0x8421, 0x1db8, 0x004e, 0x003e, 0x002e, 0x001e,
+ 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x3499, 0x60d8,
+ 0xd0ac, 0x1188, 0x2009, 0x180d, 0x210c, 0xd18c, 0x0130, 0xd09c,
+ 0x0120, 0x2009, 0x0016, 0x0804, 0x3499, 0xd09c, 0x1120, 0x2009,
+ 0x0005, 0x0804, 0x3499, 0x7984, 0x78a8, 0x2040, 0x080c, 0xa307,
+ 0x1120, 0x9182, 0x007f, 0x0a04, 0x349c, 0x9186, 0x00ff, 0x0904,
+ 0x349c, 0x9182, 0x0800, 0x1a04, 0x349c, 0x7a8c, 0x7b88, 0x6078,
+ 0x9306, 0x1158, 0x607c, 0x924e, 0x0904, 0x349c, 0x080c, 0xa307,
+ 0x1120, 0x99cc, 0xff00, 0x0904, 0x349c, 0x0126, 0x2091, 0x8000,
+ 0x2001, 0x180d, 0x2004, 0xd08c, 0x0190, 0x9386, 0x00ff, 0x0178,
+ 0x0026, 0x2011, 0x8008, 0x080c, 0x68a8, 0x002e, 0x0140, 0x918d,
+ 0x8000, 0x080c, 0x68f2, 0x1118, 0x2001, 0x4009, 0x0420, 0x080c,
+ 0x4a2b, 0x0528, 0x90c6, 0x4000, 0x1138, 0x00c6, 0x0006, 0x080c,
+ 0x674b, 0x000e, 0x00ce, 0x00b8, 0x90c6, 0x4007, 0x1110, 0x2408,
+ 0x0090, 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0060, 0x90c6,
+ 0x4009, 0x1108, 0x0040, 0x90c6, 0x4006, 0x1108, 0x0020, 0x2001,
+ 0x4005, 0x2009, 0x000a, 0x2020, 0x012e, 0x0804, 0x3469, 0x2b00,
+ 0x7026, 0x0016, 0x00b6, 0x00c6, 0x00e6, 0x2c70, 0x080c, 0xa3ec,
+ 0x0904, 0x49f9, 0x2b00, 0x6012, 0x080c, 0xc640, 0x2e58, 0x00ee,
+ 0x00e6, 0x00c6, 0x080c, 0x4b11, 0x00ce, 0x2b70, 0x1158, 0x080c,
+ 0xa39d, 0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e, 0x2009, 0x0002,
+ 0x0804, 0x3499, 0x900e, 0xa96a, 0xa96e, 0x2900, 0x6016, 0xa932,
+ 0xa86c, 0xc0fd, 0xd88c, 0x0108, 0xc0f5, 0xa86e, 0x080c, 0x3102,
+ 0x6023, 0x0001, 0x9006, 0x080c, 0x6434, 0x2001, 0x0002, 0x080c,
+ 0x6448, 0x2009, 0x0002, 0x080c, 0xa419, 0x78a8, 0xd094, 0x0138,
+ 0x00ee, 0x7024, 0x00e6, 0x2058, 0xb8bc, 0xc08d, 0xb8be, 0x9085,
+ 0x0001, 0x00ee, 0x00ce, 0x00be, 0x001e, 0x012e, 0x1120, 0x2009,
+ 0x0003, 0x0804, 0x3499, 0x7007, 0x0003, 0x701f, 0x4a08, 0x0005,
+ 0xa830, 0x2009, 0x180d, 0x210c, 0xd18c, 0x0140, 0x2008, 0x918e,
+ 0xdead, 0x1120, 0x2021, 0x4009, 0x0804, 0x3469, 0x9086, 0x0100,
+ 0x7024, 0x2058, 0x1138, 0x2009, 0x0004, 0xba04, 0x9294, 0x00ff,
+ 0x0804, 0x55b4, 0x900e, 0xa86c, 0xd0f4, 0x1904, 0x3467, 0x080c,
+ 0x674b, 0x0804, 0x3467, 0x00e6, 0x00d6, 0x0096, 0x83ff, 0x0904,
+ 0x4a73, 0x902e, 0x080c, 0xa307, 0x0130, 0x9026, 0x20a9, 0x0800,
+ 0x2071, 0x1000, 0x0030, 0x2021, 0x007f, 0x20a9, 0x0781, 0x2071,
+ 0x107f, 0x2e04, 0x9005, 0x11b0, 0x2100, 0x9406, 0x15e8, 0x2428,
+ 0x94ce, 0x007f, 0x1120, 0x92ce, 0xfffd, 0x1528, 0x0030, 0x94ce,
+ 0x0080, 0x1130, 0x92ce, 0xfffc, 0x11f0, 0x93ce, 0x00ff, 0x11d8,
+ 0xc5fd, 0x0450, 0x2058, 0xbf10, 0x2700, 0x9306, 0x11b8, 0xbe14,
+ 0x2600, 0x9206, 0x1198, 0x2400, 0x9106, 0x1150, 0xd884, 0x0568,
+ 0xd894, 0x1558, 0x080c, 0x686d, 0x1540, 0x2001, 0x4000, 0x0430,
0x2001, 0x4007, 0x0418, 0x2001, 0x4006, 0x0400, 0x2400, 0x9106,
- 0x1158, 0xbe14, 0x87ff, 0x1128, 0x86ff, 0x0958, 0x080c, 0x9e82,
- 0x1940, 0x2001, 0x4008, 0x0090, 0x8420, 0x8e70, 0x1f04, 0x4993,
+ 0x1158, 0xbe14, 0x87ff, 0x1128, 0x86ff, 0x0948, 0x080c, 0xa307,
+ 0x1930, 0x2001, 0x4008, 0x0090, 0x8420, 0x8e70, 0x1f04, 0x4a41,
0x85ff, 0x1130, 0x2001, 0x4009, 0x0048, 0x2001, 0x0001, 0x0030,
- 0x080c, 0x63c1, 0x1dd0, 0xbb12, 0xba16, 0x9006, 0x9005, 0x009e,
+ 0x080c, 0x6497, 0x1dd0, 0xbb12, 0xba16, 0x9006, 0x9005, 0x009e,
0x00de, 0x00ee, 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804,
- 0x33fd, 0x080c, 0x4a61, 0x1120, 0x2009, 0x0002, 0x0804, 0x33fd,
+ 0x3499, 0x080c, 0x4b11, 0x1120, 0x2009, 0x0002, 0x0804, 0x3499,
0xa86b, 0x0000, 0xa86c, 0xc0fd, 0xa86e, 0x7884, 0x9005, 0x0904,
- 0x3400, 0x9096, 0x00ff, 0x0120, 0x9092, 0x0004, 0x1a04, 0x3400,
- 0x2010, 0x2918, 0x080c, 0x3012, 0x1120, 0x2009, 0x0003, 0x0804,
- 0x33fd, 0x7007, 0x0003, 0x701f, 0x4a16, 0x0005, 0xa830, 0x9086,
- 0x0100, 0x1904, 0x33cb, 0x2009, 0x0004, 0x0804, 0x33fd, 0x7984,
- 0x080c, 0x9e82, 0x1120, 0x9182, 0x007f, 0x0a04, 0x3400, 0x9186,
- 0x00ff, 0x0904, 0x3400, 0x9182, 0x0800, 0x1a04, 0x3400, 0x2001,
- 0x9400, 0x080c, 0x5552, 0x1904, 0x33fd, 0x0804, 0x33cb, 0xa99c,
- 0x080c, 0x9e82, 0x1118, 0x9182, 0x007f, 0x0280, 0x9186, 0x00ff,
- 0x0168, 0x9182, 0x0800, 0x1250, 0x2001, 0x9400, 0x080c, 0x5552,
+ 0x349c, 0x9096, 0x00ff, 0x0120, 0x9092, 0x0004, 0x1a04, 0x349c,
+ 0x2010, 0x2918, 0x080c, 0x30a8, 0x1120, 0x2009, 0x0003, 0x0804,
+ 0x3499, 0x7007, 0x0003, 0x701f, 0x4ac6, 0x0005, 0xa830, 0x9086,
+ 0x0100, 0x1904, 0x3467, 0x2009, 0x0004, 0x0804, 0x3499, 0x7984,
+ 0x080c, 0xa307, 0x1120, 0x9182, 0x007f, 0x0a04, 0x349c, 0x9186,
+ 0x00ff, 0x0904, 0x349c, 0x9182, 0x0800, 0x1a04, 0x349c, 0x2001,
+ 0x9400, 0x080c, 0x560f, 0x1904, 0x3499, 0x0804, 0x3467, 0xa99c,
+ 0x080c, 0xa307, 0x1118, 0x9182, 0x007f, 0x0280, 0x9186, 0x00ff,
+ 0x0168, 0x9182, 0x0800, 0x1250, 0x2001, 0x9400, 0x080c, 0x560f,
0x11a8, 0x0060, 0xa89b, 0x4005, 0xa99e, 0x0010, 0xa89b, 0x4006,
0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa89b, 0x4000,
0x900e, 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x2009, 0x000a,
- 0x0c48, 0x080c, 0x1001, 0x0198, 0x9006, 0xa802, 0x7014, 0x9005,
+ 0x0c48, 0x080c, 0x100d, 0x0198, 0x9006, 0xa802, 0x7014, 0x9005,
0x1120, 0x2900, 0x7016, 0x701a, 0x0040, 0x7018, 0xa802, 0x0086,
0x2040, 0x2900, 0xa006, 0x701a, 0x008e, 0x9085, 0x0001, 0x0005,
- 0x7984, 0x080c, 0x6411, 0x1120, 0x7e88, 0x9682, 0x4000, 0x0208,
- 0x905e, 0x8bff, 0x0005, 0xa99c, 0x080c, 0x6411, 0x1120, 0xaea0,
+ 0x7984, 0x080c, 0x64fc, 0x1120, 0x7e88, 0x9682, 0x4000, 0x0208,
+ 0x905e, 0x8bff, 0x0005, 0xa99c, 0x080c, 0x64fc, 0x1120, 0xaea0,
0x9682, 0x4000, 0x0208, 0x905e, 0x8bff, 0x0005, 0xae9c, 0x0008,
- 0x7e84, 0x2608, 0x080c, 0x6411, 0x1108, 0x0008, 0x905e, 0x8bff,
+ 0x7e84, 0x2608, 0x080c, 0x64fc, 0x1108, 0x0008, 0x905e, 0x8bff,
0x0005, 0x0016, 0x7114, 0x81ff, 0x0128, 0x2148, 0xa904, 0x080c,
- 0x1033, 0x0cc8, 0x7116, 0x711a, 0x001e, 0x0005, 0x2031, 0x0001,
+ 0x103f, 0x0cc8, 0x7116, 0x711a, 0x001e, 0x0005, 0x2031, 0x0001,
0x0010, 0x2031, 0x0000, 0x2061, 0x18b9, 0x2c44, 0xa66e, 0xa17e,
- 0xa776, 0xa07a, 0xa292, 0xa396, 0xa49a, 0xa59e, 0x080c, 0x10eb,
- 0x7007, 0x0002, 0x701f, 0x33cb, 0x0005, 0x00f6, 0x0126, 0x2091,
+ 0xa776, 0xa07a, 0xa292, 0xa396, 0xa49a, 0xa59e, 0x080c, 0x10f7,
+ 0x7007, 0x0002, 0x701f, 0x3467, 0x0005, 0x00f6, 0x0126, 0x2091,
0x8000, 0x2079, 0x0000, 0x2001, 0x18b1, 0x2004, 0x9005, 0x1190,
- 0x0e04, 0x4ada, 0x7a36, 0x7833, 0x0012, 0x7a82, 0x7b86, 0x7c8a,
- 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119d,
- 0x0804, 0x4b40, 0x0016, 0x0086, 0x0096, 0x00c6, 0x00e6, 0x2071,
+ 0x0e04, 0x4b8a, 0x7a36, 0x7833, 0x0012, 0x7a82, 0x7b86, 0x7c8a,
+ 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11a9,
+ 0x0804, 0x4bf0, 0x0016, 0x0086, 0x0096, 0x00c6, 0x00e6, 0x2071,
0x189f, 0x7044, 0x9005, 0x1540, 0x7148, 0x9182, 0x0010, 0x0288,
- 0x7038, 0x2060, 0x080c, 0x1001, 0x0904, 0x4b38, 0xa84b, 0x0000,
- 0x2900, 0x7046, 0x2001, 0x0002, 0x9080, 0x1f70, 0x2005, 0xa846,
+ 0x7038, 0x2060, 0x080c, 0x100d, 0x0904, 0x4be8, 0xa84b, 0x0000,
+ 0x2900, 0x7046, 0x2001, 0x0002, 0x9080, 0x1fb8, 0x2005, 0xa846,
0x0098, 0x7038, 0x90e0, 0x0004, 0x2001, 0x18bb, 0x9c82, 0x18fb,
0x0210, 0x2061, 0x18bb, 0x2c00, 0x703a, 0x7148, 0x81ff, 0x1108,
0x703e, 0x8108, 0x714a, 0x0460, 0x7148, 0x8108, 0x714a, 0x7044,
- 0x2040, 0xa144, 0x2105, 0x0016, 0x908a, 0x0037, 0x1a0c, 0x0dc4,
+ 0x2040, 0xa144, 0x2105, 0x0016, 0x908a, 0x0037, 0x1a0c, 0x0dc3,
0x2060, 0x001e, 0x8108, 0x2105, 0x9005, 0xa146, 0x1520, 0x080c,
- 0x1001, 0x1130, 0x8109, 0xa946, 0x7148, 0x8109, 0x714a, 0x00d8,
+ 0x100d, 0x1130, 0x8109, 0xa946, 0x7148, 0x8109, 0x714a, 0x00d8,
0x9006, 0xa806, 0xa84a, 0xa046, 0x2800, 0xa802, 0x2900, 0xa006,
- 0x7046, 0x2001, 0x0002, 0x9080, 0x1f70, 0x2005, 0xa846, 0x0058,
+ 0x7046, 0x2001, 0x0002, 0x9080, 0x1fb8, 0x2005, 0xa846, 0x0058,
0x2262, 0x6306, 0x640a, 0x00ee, 0x00ce, 0x009e, 0x008e, 0x001e,
- 0x012e, 0x00fe, 0x0005, 0x2c00, 0x9082, 0x001c, 0x0002, 0x4b62,
- 0x4b62, 0x4b64, 0x4b62, 0x4b62, 0x4b62, 0x4b68, 0x4b62, 0x4b62,
- 0x4b62, 0x4b6c, 0x4b62, 0x4b62, 0x4b62, 0x4b70, 0x4b62, 0x4b62,
- 0x4b62, 0x4b74, 0x4b62, 0x4b62, 0x4b62, 0x4b78, 0x4b62, 0x4b62,
- 0x4b62, 0x4b7d, 0x080c, 0x0dc4, 0xa27a, 0xa37e, 0xa482, 0x0898,
+ 0x012e, 0x00fe, 0x0005, 0x2c00, 0x9082, 0x001c, 0x0002, 0x4c12,
+ 0x4c12, 0x4c14, 0x4c12, 0x4c12, 0x4c12, 0x4c18, 0x4c12, 0x4c12,
+ 0x4c12, 0x4c1c, 0x4c12, 0x4c12, 0x4c12, 0x4c20, 0x4c12, 0x4c12,
+ 0x4c12, 0x4c24, 0x4c12, 0x4c12, 0x4c12, 0x4c28, 0x4c12, 0x4c12,
+ 0x4c12, 0x4c2d, 0x080c, 0x0dc3, 0xa27a, 0xa37e, 0xa482, 0x0898,
0xa28a, 0xa38e, 0xa492, 0x0878, 0xa29a, 0xa39e, 0xa4a2, 0x0858,
0xa2aa, 0xa3ae, 0xa4b2, 0x0838, 0xa2ba, 0xa3be, 0xa4c2, 0x0818,
- 0xa2ca, 0xa3ce, 0xa4d2, 0x0804, 0x4b3b, 0xa2da, 0xa3de, 0xa4e2,
- 0x0804, 0x4b3b, 0x00e6, 0x2071, 0x189f, 0x7048, 0x9005, 0x0904,
- 0x4c14, 0x0126, 0x2091, 0x8000, 0x0e04, 0x4c13, 0x00f6, 0x2079,
+ 0xa2ca, 0xa3ce, 0xa4d2, 0x0804, 0x4beb, 0xa2da, 0xa3de, 0xa4e2,
+ 0x0804, 0x4beb, 0x00e6, 0x2071, 0x189f, 0x7048, 0x9005, 0x0904,
+ 0x4cc4, 0x0126, 0x2091, 0x8000, 0x0e04, 0x4cc3, 0x00f6, 0x2079,
0x0000, 0x00c6, 0x0096, 0x0086, 0x0076, 0x9006, 0x2038, 0x7040,
0x2048, 0x9005, 0x0500, 0xa948, 0x2105, 0x0016, 0x908a, 0x0037,
- 0x1a0c, 0x0dc4, 0x2060, 0x001e, 0x8108, 0x2105, 0x9005, 0xa94a,
- 0x1904, 0x4c16, 0xa804, 0x9005, 0x090c, 0x0dc4, 0x7042, 0x2938,
- 0x2040, 0xa003, 0x0000, 0x2001, 0x0002, 0x9080, 0x1f70, 0x2005,
- 0xa04a, 0x0804, 0x4c16, 0x703c, 0x2060, 0x2c14, 0x6304, 0x6408,
+ 0x1a0c, 0x0dc3, 0x2060, 0x001e, 0x8108, 0x2105, 0x9005, 0xa94a,
+ 0x1904, 0x4cc6, 0xa804, 0x9005, 0x090c, 0x0dc3, 0x7042, 0x2938,
+ 0x2040, 0xa003, 0x0000, 0x2001, 0x0002, 0x9080, 0x1fb8, 0x2005,
+ 0xa04a, 0x0804, 0x4cc6, 0x703c, 0x2060, 0x2c14, 0x6304, 0x6408,
0x650c, 0x2200, 0x7836, 0x7833, 0x0012, 0x7882, 0x2300, 0x7886,
0x2400, 0x788a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,
- 0x190c, 0x119d, 0x87ff, 0x0118, 0x2748, 0x080c, 0x1033, 0x7048,
+ 0x190c, 0x11a9, 0x87ff, 0x0118, 0x2748, 0x080c, 0x103f, 0x7048,
0x8001, 0x704a, 0x9005, 0x1170, 0x7040, 0x2048, 0x9005, 0x0128,
- 0x080c, 0x1033, 0x9006, 0x7042, 0x7046, 0x703b, 0x18bb, 0x703f,
+ 0x080c, 0x103f, 0x9006, 0x7042, 0x7046, 0x703b, 0x18bb, 0x703f,
0x18bb, 0x0420, 0x7040, 0x9005, 0x1508, 0x7238, 0x2c00, 0x9206,
0x0148, 0x9c80, 0x0004, 0x90fa, 0x18fb, 0x0210, 0x2001, 0x18bb,
0x703e, 0x00a0, 0x9006, 0x703e, 0x703a, 0x7044, 0x9005, 0x090c,
- 0x0dc4, 0x2048, 0xa800, 0x9005, 0x1de0, 0x2900, 0x7042, 0x2001,
- 0x0002, 0x9080, 0x1f70, 0x2005, 0xa84a, 0x0000, 0x007e, 0x008e,
+ 0x0dc3, 0x2048, 0xa800, 0x9005, 0x1de0, 0x2900, 0x7042, 0x2001,
+ 0x0002, 0x9080, 0x1fb8, 0x2005, 0xa84a, 0x0000, 0x007e, 0x008e,
0x009e, 0x00ce, 0x00fe, 0x012e, 0x00ee, 0x0005, 0x2c00, 0x9082,
- 0x001c, 0x0002, 0x4c35, 0x4c35, 0x4c37, 0x4c35, 0x4c35, 0x4c35,
- 0x4c3c, 0x4c35, 0x4c35, 0x4c35, 0x4c41, 0x4c35, 0x4c35, 0x4c35,
- 0x4c46, 0x4c35, 0x4c35, 0x4c35, 0x4c4b, 0x4c35, 0x4c35, 0x4c35,
- 0x4c50, 0x4c35, 0x4c35, 0x4c35, 0x4c55, 0x080c, 0x0dc4, 0xaa78,
- 0xab7c, 0xac80, 0x0804, 0x4bc1, 0xaa88, 0xab8c, 0xac90, 0x0804,
- 0x4bc1, 0xaa98, 0xab9c, 0xaca0, 0x0804, 0x4bc1, 0xaaa8, 0xabac,
- 0xacb0, 0x0804, 0x4bc1, 0xaab8, 0xabbc, 0xacc0, 0x0804, 0x4bc1,
- 0xaac8, 0xabcc, 0xacd0, 0x0804, 0x4bc1, 0xaad8, 0xabdc, 0xace0,
- 0x0804, 0x4bc1, 0x0016, 0x0026, 0x0036, 0x00b6, 0x00c6, 0x2009,
- 0x007e, 0x080c, 0x6411, 0x2019, 0x0001, 0xb85c, 0xd0ac, 0x0110,
- 0x2019, 0x0000, 0x2011, 0x801b, 0x080c, 0x4abd, 0x00ce, 0x00be,
- 0x003e, 0x002e, 0x001e, 0x0005, 0x0026, 0x080c, 0x55a7, 0xd0c4,
- 0x0120, 0x2011, 0x8014, 0x080c, 0x4abd, 0x002e, 0x0005, 0x81ff,
- 0x1904, 0x33fd, 0x0126, 0x2091, 0x8000, 0x6030, 0xc08d, 0xc0ac,
- 0x6032, 0x080c, 0x72e5, 0x1158, 0x080c, 0x75dc, 0x080c, 0x5ef6,
- 0x9085, 0x0001, 0x080c, 0x732a, 0x080c, 0x7212, 0x0010, 0x080c,
- 0x5db5, 0x012e, 0x0804, 0x33cb, 0x81ff, 0x0120, 0x2009, 0x0001,
- 0x0804, 0x33fd, 0x080c, 0x55bb, 0x0120, 0x2009, 0x0007, 0x0804,
- 0x33fd, 0x080c, 0x673e, 0x0120, 0x2009, 0x0008, 0x0804, 0x33fd,
- 0x2001, 0x180d, 0x2004, 0xd08c, 0x0178, 0x0026, 0x2011, 0x0010,
- 0x080c, 0x6781, 0x002e, 0x0140, 0x7984, 0x080c, 0x67cb, 0x1120,
- 0x2009, 0x4009, 0x0804, 0x33fd, 0x7984, 0x080c, 0x63c1, 0x1904,
- 0x3400, 0x080c, 0x4a90, 0x0904, 0x3400, 0x2b00, 0x7026, 0x080c,
- 0x6746, 0x7888, 0x1138, 0x9084, 0x0001, 0x1120, 0x080c, 0x6643,
- 0x0804, 0x33cb, 0x080c, 0x4a61, 0x0904, 0x33fd, 0x9006, 0xa86a,
- 0xa832, 0xa86c, 0xc0fd, 0xa86e, 0x080c, 0xbb78, 0x0904, 0x33fd,
- 0x7007, 0x0003, 0x701f, 0x4d47, 0x0005, 0x2061, 0x1800, 0x080c,
- 0x55bb, 0x2009, 0x0007, 0x11f8, 0x080c, 0x673e, 0x0118, 0x2009,
- 0x0008, 0x00c8, 0xa99c, 0x080c, 0x63c1, 0x11c8, 0x080c, 0x4a8e,
- 0x01b0, 0x080c, 0x6746, 0xa8a0, 0x1130, 0x9084, 0x0001, 0x1118,
- 0x080c, 0x6643, 0x00a0, 0xa86c, 0xc0fc, 0xa86e, 0x080c, 0xbb78,
- 0x11b8, 0x2009, 0x0003, 0xa89b, 0x4005, 0xa99e, 0x0010, 0xa89b,
- 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005, 0xa89b,
- 0x4000, 0xa99e, 0x0039, 0x9006, 0x918d, 0x0001, 0x2008, 0x0005,
- 0x9006, 0x0005, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080,
- 0x0032, 0x20a0, 0xb8b0, 0x20e0, 0xb8b4, 0x9080, 0x0006, 0x2098,
- 0x080c, 0x0f7e, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x0036, 0x20a0,
- 0xb8b4, 0x9080, 0x000a, 0x2098, 0x080c, 0x0f7e, 0x0005, 0xa830,
- 0x2009, 0x180d, 0x210c, 0xd18c, 0x0140, 0x2008, 0x918e, 0xdead,
- 0x1120, 0x2021, 0x4009, 0x0804, 0x33cd, 0x9086, 0x0100, 0x7024,
- 0x2058, 0x1110, 0x0804, 0x54f7, 0x080c, 0x6643, 0x0804, 0x33cb,
- 0x080c, 0x55bb, 0x0120, 0x2009, 0x0007, 0x0804, 0x33fd, 0x7f84,
- 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c, 0x4a61, 0x1120, 0x2009,
- 0x0002, 0x0804, 0x33fd, 0x900e, 0x2130, 0x7126, 0x7132, 0xa860,
- 0x20e8, 0x7036, 0xa85c, 0x9080, 0x0005, 0x702a, 0x20a0, 0x080c,
- 0x6411, 0x1904, 0x4dea, 0x080c, 0x6746, 0x0120, 0x080c, 0x674e,
- 0x1904, 0x4dea, 0x080c, 0x673e, 0x1130, 0x080c, 0x6640, 0x1118,
- 0xd79c, 0x0904, 0x4dea, 0xd794, 0x1110, 0xd784, 0x01a8, 0xb8b0,
- 0x20e0, 0xb8b4, 0x9080, 0x0006, 0x2098, 0x3400, 0xd794, 0x0198,
- 0x20a9, 0x0008, 0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x20a9,
- 0x0002, 0x080c, 0x487b, 0x0080, 0xb8b0, 0x20e0, 0xb8b4, 0x9080,
- 0x000a, 0x2098, 0x3400, 0x20a9, 0x0004, 0x4003, 0x2098, 0x20a0,
- 0x3d00, 0x20e0, 0x080c, 0x487b, 0x4104, 0xd794, 0x0528, 0xb8b0,
- 0x20e0, 0xb8b4, 0x2060, 0x9c80, 0x0000, 0x2098, 0x20a9, 0x0002,
- 0x4003, 0x9c80, 0x0003, 0x2098, 0x20a9, 0x0001, 0x4005, 0x9c80,
- 0x0004, 0x2098, 0x3400, 0x20a9, 0x0002, 0x4003, 0x2098, 0x20a0,
- 0x3d00, 0x20e0, 0x080c, 0x486e, 0x9c80, 0x0026, 0x2098, 0xb8b0,
- 0x20e0, 0x20a9, 0x0002, 0x4003, 0xd794, 0x0110, 0x96b0, 0x000b,
- 0x96b0, 0x0005, 0x8108, 0x080c, 0x9e82, 0x0118, 0x9186, 0x0800,
- 0x0040, 0xd78c, 0x0120, 0x9186, 0x0800, 0x0170, 0x0018, 0x9186,
- 0x007e, 0x0150, 0xd794, 0x0118, 0x9686, 0x0020, 0x0010, 0x9686,
- 0x0028, 0x0150, 0x0804, 0x4d7f, 0x86ff, 0x1120, 0x7124, 0x810b,
- 0x0804, 0x33cb, 0x7033, 0x0001, 0x7122, 0x7024, 0x9600, 0x7026,
- 0x772e, 0x2061, 0x18b9, 0x2c44, 0xa06f, 0x0000, 0xa67e, 0x7034,
- 0xa076, 0x7028, 0xa07a, 0xa292, 0xa396, 0xa49a, 0xa59e, 0x080c,
- 0x10eb, 0x7007, 0x0002, 0x701f, 0x4e26, 0x0005, 0x7030, 0x9005,
- 0x1180, 0x7120, 0x7028, 0x20a0, 0x772c, 0x9036, 0x7034, 0x20e8,
- 0x2061, 0x18b9, 0x2c44, 0xa290, 0xa394, 0xa498, 0xa59c, 0x0804,
- 0x4d7f, 0x7124, 0x810b, 0x0804, 0x33cb, 0x2029, 0x007e, 0x7984,
- 0x7a88, 0x7b8c, 0x7c98, 0x9184, 0xff00, 0x8007, 0x90e2, 0x0020,
- 0x0a04, 0x3400, 0x9502, 0x0a04, 0x3400, 0x9184, 0x00ff, 0x90e2,
- 0x0020, 0x0a04, 0x3400, 0x9502, 0x0a04, 0x3400, 0x9284, 0xff00,
- 0x8007, 0x90e2, 0x0020, 0x0a04, 0x3400, 0x9502, 0x0a04, 0x3400,
- 0x9284, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x3400, 0x9502, 0x0a04,
- 0x3400, 0x9384, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x3400,
- 0x9502, 0x0a04, 0x3400, 0x9384, 0x00ff, 0x90e2, 0x0020, 0x0a04,
- 0x3400, 0x9502, 0x0a04, 0x3400, 0x9484, 0xff00, 0x8007, 0x90e2,
- 0x0020, 0x0a04, 0x3400, 0x9502, 0x0a04, 0x3400, 0x9484, 0x00ff,
- 0x90e2, 0x0020, 0x0a04, 0x3400, 0x9502, 0x0a04, 0x3400, 0x2061,
- 0x1965, 0x6102, 0x6206, 0x630a, 0x640e, 0x0804, 0x33cb, 0x0006,
- 0x080c, 0x55a7, 0xd0cc, 0x000e, 0x0005, 0x0006, 0x080c, 0x55ab,
- 0xd0bc, 0x000e, 0x0005, 0x6170, 0x7a84, 0x6300, 0x82ff, 0x1118,
- 0x7986, 0x0804, 0x33cb, 0x83ff, 0x1904, 0x3400, 0x2001, 0xfff0,
- 0x9200, 0x1a04, 0x3400, 0x2019, 0xffff, 0x6074, 0x9302, 0x9200,
- 0x0a04, 0x3400, 0x7986, 0x6272, 0x0804, 0x33cb, 0x080c, 0x55bb,
- 0x1904, 0x33fd, 0x7c88, 0x7d84, 0x7e98, 0x7f8c, 0x080c, 0x4a61,
- 0x0904, 0x33fd, 0x900e, 0x901e, 0x7326, 0x7332, 0xa860, 0x20e8,
- 0x7036, 0xa85c, 0x9080, 0x0003, 0x702a, 0x20a0, 0x91d8, 0x1000,
- 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x6746, 0x0118, 0x080c, 0x674e,
- 0x1148, 0x20a9, 0x0001, 0xb814, 0x4004, 0xb810, 0x4004, 0x4104,
- 0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120, 0x9386, 0x003c,
- 0x0170, 0x0c20, 0x83ff, 0x1148, 0x7224, 0x900e, 0x2001, 0x0003,
- 0x080c, 0x854b, 0x2208, 0x0804, 0x33cb, 0x7033, 0x0001, 0x7122,
- 0x7024, 0x9300, 0x7026, 0x2061, 0x18b9, 0x2c44, 0xa06f, 0x0000,
- 0xa37e, 0x7028, 0xa07a, 0x7034, 0xa076, 0xa492, 0xa596, 0xa69a,
- 0xa79e, 0x080c, 0x10eb, 0x7007, 0x0002, 0x701f, 0x4f18, 0x0005,
- 0x7030, 0x9005, 0x1178, 0x7120, 0x7028, 0x20a0, 0x901e, 0x7034,
- 0x20e8, 0x2061, 0x18b9, 0x2c44, 0xa490, 0xa594, 0xa698, 0xa79c,
- 0x0804, 0x4ed6, 0x7224, 0x900e, 0x2001, 0x0003, 0x080c, 0x854b,
- 0x2208, 0x0804, 0x33cb, 0x00f6, 0x00e6, 0x080c, 0x55bb, 0x2009,
- 0x0007, 0x1904, 0x4fac, 0x2071, 0x189f, 0x745c, 0x84ff, 0x2009,
- 0x000e, 0x1904, 0x4fac, 0xaca0, 0xad9c, 0xaea8, 0xafa4, 0x0096,
- 0x080c, 0x101a, 0x2009, 0x0002, 0x0904, 0x4fab, 0x2900, 0x705e,
- 0x900e, 0x901e, 0x7356, 0x7362, 0xa860, 0x7066, 0xa85c, 0x9080,
- 0x0003, 0x705a, 0x20a0, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178,
- 0x080c, 0x6746, 0x0118, 0x080c, 0x674e, 0x1148, 0xb814, 0x20a9,
- 0x0001, 0x4004, 0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108,
- 0x9182, 0x0800, 0x0120, 0x9386, 0x003c, 0x01e8, 0x0c20, 0x83ff,
- 0x11c0, 0x7254, 0x900e, 0x2001, 0x0003, 0x080c, 0x854b, 0x2208,
- 0x009e, 0xa89b, 0x4000, 0xa99e, 0x715c, 0x81ff, 0x090c, 0x0dc4,
- 0x2148, 0x080c, 0x1033, 0x9006, 0x705e, 0x918d, 0x0001, 0x2008,
- 0x0418, 0x7063, 0x0001, 0x7152, 0x7054, 0x9300, 0x7056, 0x2061,
- 0x18ba, 0x2c44, 0xa37e, 0x7058, 0xa07a, 0x7064, 0xa076, 0xa492,
- 0xa596, 0xa69a, 0xa79e, 0xa0a3, 0x4fb7, 0x000e, 0xa0a6, 0x080c,
- 0x10eb, 0x9006, 0x0048, 0x009e, 0xa89b, 0x4005, 0xa99e, 0x900e,
- 0x9085, 0x0001, 0x2001, 0x0030, 0x00ee, 0x00fe, 0x0005, 0x00f6,
- 0xa0a4, 0x904d, 0x090c, 0x0dc4, 0x00e6, 0x2071, 0x189f, 0xa070,
- 0x908e, 0x0100, 0x0138, 0xa87f, 0x0030, 0xa887, 0x0000, 0xa89b,
- 0x4002, 0x00d8, 0x7060, 0x9005, 0x1158, 0x7150, 0x7058, 0x20a0,
- 0x901e, 0x7064, 0x20e8, 0xa490, 0xa594, 0xa698, 0xa79c, 0x0428,
- 0xa87f, 0x0000, 0xa887, 0x0000, 0xa89b, 0x4000, 0x7254, 0x900e,
- 0x2001, 0x0003, 0x080c, 0x854b, 0xaa9e, 0x715c, 0x81ff, 0x090c,
- 0x0dc4, 0x2148, 0x080c, 0x1033, 0x705f, 0x0000, 0xa0a4, 0x2048,
- 0x0126, 0x2091, 0x8000, 0x080c, 0x6b1d, 0x012e, 0xa0a3, 0x0000,
- 0xa0a7, 0x0000, 0x00ee, 0x00fe, 0x0005, 0x91d8, 0x1000, 0x2b5c,
- 0x8bff, 0x0178, 0x080c, 0x6746, 0x0118, 0x080c, 0x674e, 0x1148,
- 0xb814, 0x20a9, 0x0001, 0x4004, 0xb810, 0x4004, 0x4104, 0x9398,
- 0x0003, 0x8108, 0x9182, 0x0800, 0x0120, 0x9386, 0x003c, 0x0518,
- 0x0c20, 0x83ff, 0x11f0, 0x7154, 0x810c, 0xa99e, 0xa89b, 0x4000,
- 0x715c, 0x81ff, 0x090c, 0x0dc4, 0x2148, 0x080c, 0x1033, 0x9006,
- 0x705e, 0x918d, 0x0001, 0x2008, 0xa0a4, 0x2048, 0x0126, 0x2091,
- 0x8000, 0x080c, 0x6b1d, 0x012e, 0xa0a3, 0x0000, 0xa0a7, 0x0000,
- 0x0070, 0x7063, 0x0001, 0x7152, 0x7054, 0x9300, 0x7056, 0xa37e,
- 0xa492, 0xa596, 0xa69a, 0xa79e, 0x080c, 0x10eb, 0x9006, 0x00ee,
- 0x0005, 0x0096, 0xa890, 0x90be, 0x7000, 0x0148, 0x90be, 0x7100,
- 0x0130, 0x90be, 0x7200, 0x0118, 0x009e, 0x0804, 0x3400, 0xa888,
- 0xa98c, 0x080c, 0x269f, 0x1518, 0x080c, 0x63c1, 0x1500, 0x7126,
- 0xbe12, 0xbd16, 0xae80, 0x080c, 0x4a61, 0x01f0, 0x080c, 0x4a61,
- 0x01d8, 0x009e, 0xa86b, 0x0000, 0xa86c, 0xc0fd, 0xa86e, 0xa823,
- 0x0000, 0xa804, 0x2048, 0x080c, 0xbafa, 0x1120, 0x2009, 0x0003,
- 0x0804, 0x33fd, 0x7007, 0x0003, 0x701f, 0x5085, 0x0005, 0x009e,
- 0x2009, 0x0002, 0x0804, 0x33fd, 0x0cd0, 0x7124, 0x080c, 0x3162,
- 0xa820, 0x9086, 0x8001, 0x1120, 0x2009, 0x0004, 0x0804, 0x33fd,
- 0x2900, 0x7022, 0xa804, 0x0096, 0x2048, 0x8906, 0x8006, 0x8007,
- 0x90bc, 0x003f, 0x9084, 0xffc0, 0x009e, 0x9080, 0x0002, 0x0076,
- 0x0006, 0x2098, 0x20a0, 0x27e0, 0x27e8, 0x20a9, 0x002a, 0x080c,
- 0x0f7e, 0xaa70, 0xab74, 0xac78, 0xad7c, 0x2061, 0x18b9, 0x2c44,
- 0xa06f, 0x0000, 0xae68, 0xaf90, 0x97c6, 0x7000, 0x0118, 0x97c6,
- 0x7100, 0x1148, 0x96c2, 0x0004, 0x0600, 0x2009, 0x0004, 0x000e,
- 0x007e, 0x0804, 0x4aa9, 0x97c6, 0x7200, 0x11b8, 0x96c2, 0x0054,
- 0x02a0, 0x000e, 0x007e, 0x2061, 0x18b9, 0x2c44, 0xa07a, 0xa776,
- 0xa07f, 0x002a, 0xa292, 0xa396, 0xa49a, 0xa59e, 0x080c, 0x10eb,
- 0x7007, 0x0002, 0x701f, 0x50e1, 0x0005, 0x000e, 0x007e, 0x0804,
- 0x3400, 0x7020, 0x2048, 0xa804, 0x2048, 0xa804, 0x2048, 0x8906,
- 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002,
- 0x2098, 0x20a0, 0x27e0, 0x27e8, 0x20a9, 0x002a, 0x080c, 0x0f7e,
- 0x2100, 0x2238, 0x2061, 0x18b9, 0x2c44, 0xa290, 0xa394, 0xa498,
- 0xa59c, 0x2009, 0x002a, 0x0804, 0x4aa9, 0x81ff, 0x1904, 0x33fd,
- 0x798c, 0x2001, 0x195b, 0x918c, 0x8000, 0x2102, 0x080c, 0x4a78,
- 0x0904, 0x3400, 0x080c, 0x6746, 0x0120, 0x080c, 0x674e, 0x1904,
- 0x3400, 0x080c, 0x64bb, 0x0904, 0x33fd, 0x0126, 0x2091, 0x8000,
- 0x080c, 0x6597, 0x012e, 0x0904, 0x33fd, 0x2001, 0x195b, 0x2004,
- 0xd0fc, 0x1904, 0x33cb, 0x0804, 0x4405, 0xa9a4, 0x2001, 0x195b,
- 0x918c, 0x8000, 0xc18d, 0x2102, 0x080c, 0x4a83, 0x01a0, 0x080c,
- 0x6746, 0x0118, 0x080c, 0x674e, 0x1170, 0x080c, 0x64bb, 0x2009,
- 0x0002, 0x0128, 0x080c, 0x6597, 0x1170, 0x2009, 0x0003, 0xa89b,
- 0x4005, 0xa99e, 0x0010, 0xa89b, 0x4006, 0x900e, 0x9085, 0x0001,
- 0x2001, 0x0030, 0x0005, 0xa89b, 0x4000, 0x2001, 0x195b, 0x2004,
- 0xd0fc, 0x1128, 0x080c, 0x55af, 0x0110, 0x9006, 0x0018, 0x900e,
- 0x9085, 0x0001, 0x2001, 0x0000, 0x0005, 0x78a8, 0xd08c, 0x1118,
- 0xd084, 0x0904, 0x437a, 0x080c, 0x4a90, 0x0904, 0x3400, 0x080c,
- 0x4a61, 0x1120, 0x2009, 0x0002, 0x0804, 0x33fd, 0x080c, 0x6746,
- 0x0130, 0x908e, 0x0004, 0x0118, 0x908e, 0x0005, 0x15a0, 0x78a8,
- 0xd08c, 0x0120, 0xb800, 0xc08c, 0xb802, 0x0028, 0x080c, 0x55a7,
- 0xd0b4, 0x0904, 0x43b4, 0x7884, 0x908e, 0x007e, 0x0904, 0x43b4,
- 0x908e, 0x007f, 0x0904, 0x43b4, 0x908e, 0x0080, 0x0904, 0x43b4,
- 0xb800, 0xd08c, 0x1904, 0x43b4, 0xa86b, 0x0000, 0xa86c, 0xc0fd,
- 0xa86e, 0x080c, 0xbb19, 0x1120, 0x2009, 0x0003, 0x0804, 0x33fd,
- 0x7007, 0x0003, 0x701f, 0x51ad, 0x0005, 0x080c, 0x4a90, 0x0904,
- 0x3400, 0x0804, 0x43b4, 0x080c, 0x31bb, 0x0108, 0x0005, 0x2009,
- 0x1833, 0x210c, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x33fd,
- 0x080c, 0x55bb, 0x0120, 0x2009, 0x0007, 0x0804, 0x33fd, 0x080c,
- 0x673e, 0x0120, 0x2009, 0x0008, 0x0804, 0x33fd, 0xb89c, 0xd0a4,
- 0x1118, 0xd0ac, 0x1904, 0x43b4, 0x9006, 0xa86a, 0xa832, 0xa86c,
- 0xc0fd, 0xa86e, 0x080c, 0xbb78, 0x1120, 0x2009, 0x0003, 0x0804,
- 0x33fd, 0x7007, 0x0003, 0x701f, 0x51e6, 0x0005, 0xa830, 0x9086,
- 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x54f7, 0x080c, 0x4a90,
- 0x0904, 0x3400, 0x0804, 0x517f, 0x81ff, 0x2009, 0x0001, 0x1904,
- 0x33fd, 0x080c, 0x55bb, 0x2009, 0x0007, 0x1904, 0x33fd, 0x080c,
- 0x673e, 0x0120, 0x2009, 0x0008, 0x0804, 0x33fd, 0x080c, 0x4a90,
- 0x0904, 0x3400, 0x080c, 0x6746, 0x2009, 0x0009, 0x1904, 0x33fd,
- 0x080c, 0x4a61, 0x2009, 0x0002, 0x0904, 0x33fd, 0x9006, 0xa86a,
- 0xa832, 0xa86c, 0xc0fd, 0xa86e, 0x7988, 0xa95a, 0x9194, 0xfd00,
- 0x918c, 0x00ff, 0x9006, 0x82ff, 0x1128, 0xc0ed, 0xa952, 0x798c,
- 0xa956, 0x0038, 0x928e, 0x0100, 0x1904, 0x3400, 0xc0e5, 0xa952,
- 0xa956, 0xa83e, 0x080c, 0xbc98, 0x2009, 0x0003, 0x0904, 0x33fd,
- 0x7007, 0x0003, 0x701f, 0x523d, 0x0005, 0xa830, 0x9086, 0x0100,
- 0x2009, 0x0004, 0x0904, 0x33fd, 0x0804, 0x33cb, 0x7aa8, 0x9284,
- 0xc000, 0x0148, 0xd2ec, 0x01a0, 0x080c, 0x55bb, 0x1188, 0x2009,
- 0x0014, 0x0804, 0x33fd, 0xd2dc, 0x1578, 0x81ff, 0x2009, 0x0001,
- 0x1904, 0x33fd, 0x080c, 0x55bb, 0x2009, 0x0007, 0x1904, 0x33fd,
- 0xd2f4, 0x0138, 0x9284, 0x5000, 0xc0d5, 0x080c, 0x557d, 0x0804,
- 0x33cb, 0xd2fc, 0x0160, 0x080c, 0x4a90, 0x0904, 0x3400, 0x7984,
- 0x9284, 0x9000, 0xc0d5, 0x080c, 0x5552, 0x0804, 0x33cb, 0x080c,
- 0x4a90, 0x0904, 0x3400, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006,
- 0x2009, 0x0009, 0x1904, 0x532c, 0x080c, 0x4a61, 0x2009, 0x0002,
- 0x0904, 0x532c, 0xa85c, 0x9080, 0x001c, 0xaf60, 0x2009, 0x0008,
- 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x080c, 0x4aa6, 0x701f, 0x5299,
- 0x0005, 0xa870, 0x9086, 0x0500, 0x1138, 0xa874, 0x9005, 0x1120,
- 0xa878, 0x9084, 0xff00, 0x0110, 0x1904, 0x3400, 0xa86a, 0xa832,
- 0xa86c, 0xc0fd, 0xa86e, 0x080c, 0x4a90, 0x1110, 0x0804, 0x3400,
- 0x2009, 0x0043, 0x080c, 0xbd04, 0x2009, 0x0003, 0x0904, 0x532c,
- 0x7007, 0x0003, 0x701f, 0x52bd, 0x0005, 0xa830, 0x9086, 0x0100,
- 0x2009, 0x0004, 0x0904, 0x532c, 0x7984, 0x7aa8, 0x9284, 0x1000,
- 0xc0d5, 0x080c, 0x5552, 0x0804, 0x33cb, 0x00c6, 0xaab4, 0x9284,
- 0xc000, 0x0148, 0xd2ec, 0x0170, 0x080c, 0x55bb, 0x1158, 0x2009,
- 0x0014, 0x0804, 0x531b, 0x2061, 0x1800, 0x080c, 0x55bb, 0x2009,
- 0x0007, 0x15c8, 0xd2f4, 0x0130, 0x9284, 0x5000, 0xc0d5, 0x080c,
- 0x557d, 0x0058, 0xd2fc, 0x0180, 0x080c, 0x4a8e, 0x0590, 0xa99c,
- 0x9284, 0x9000, 0xc0d5, 0x080c, 0x5552, 0xa87f, 0x0000, 0xa887,
- 0x0000, 0xa89b, 0x4000, 0x0438, 0x080c, 0x4a8e, 0x0510, 0x080c,
- 0x6746, 0x2009, 0x0009, 0x11b8, 0xa8c8, 0x9086, 0x0500, 0x11c8,
- 0xa8cc, 0x9005, 0x11b0, 0xa8d0, 0x9084, 0xff00, 0x1190, 0x080c,
- 0x4a8e, 0x1108, 0x0070, 0x2009, 0x004b, 0x080c, 0xbd04, 0x2009,
- 0x0003, 0x0108, 0x0078, 0x0431, 0x19c0, 0xa89b, 0x4005, 0xa99e,
- 0x0010, 0xa89b, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030,
- 0x00ce, 0x0005, 0x9006, 0x0ce0, 0x7aa8, 0xd2dc, 0x0904, 0x33fd,
- 0x0016, 0x7984, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x5552, 0x001e,
- 0x1904, 0x33fd, 0x0804, 0x33cb, 0x00f6, 0x2d78, 0xaab4, 0x0021,
- 0x00fe, 0x0005, 0xaab4, 0xc2d5, 0xd2dc, 0x0150, 0x0016, 0xa99c,
- 0x9284, 0x1400, 0xc0fd, 0x080c, 0x5552, 0x001e, 0x9085, 0x0001,
- 0x0005, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x33fd, 0x080c,
- 0x55bb, 0x0120, 0x2009, 0x0007, 0x0804, 0x33fd, 0x7984, 0x7ea8,
- 0x96b4, 0x00ff, 0x080c, 0x6411, 0x1904, 0x3400, 0x9186, 0x007f,
- 0x0138, 0x080c, 0x6746, 0x0120, 0x2009, 0x0009, 0x0804, 0x33fd,
- 0x080c, 0x4a61, 0x1120, 0x2009, 0x0002, 0x0804, 0x33fd, 0xa86b,
- 0x0000, 0xa86c, 0xc0fd, 0xa86e, 0x2001, 0x0100, 0x8007, 0xa80a,
- 0x080c, 0xbb33, 0x1120, 0x2009, 0x0003, 0x0804, 0x33fd, 0x7007,
- 0x0003, 0x701f, 0x538c, 0x0005, 0xa808, 0x8007, 0x9086, 0x0100,
- 0x1120, 0x2009, 0x0004, 0x0804, 0x33fd, 0xa8e4, 0xa86a, 0xa810,
- 0x8007, 0x9084, 0x00ff, 0x800c, 0xa814, 0x8007, 0x9084, 0x00ff,
- 0x8004, 0x9080, 0x0002, 0x9108, 0x8906, 0x8006, 0x8007, 0x90bc,
- 0x003f, 0x9084, 0xffc0, 0x9080, 0x0004, 0x7a8c, 0x7b88, 0x7c9c,
- 0x7d98, 0x0804, 0x4aa9, 0x080c, 0x4a61, 0x1120, 0x2009, 0x0002,
- 0x0804, 0x33fd, 0x7984, 0x9194, 0xff00, 0x918c, 0x00ff, 0x8217,
- 0x82ff, 0x1118, 0x7023, 0x1990, 0x0040, 0x92c6, 0x0001, 0x1118,
- 0x7023, 0x19aa, 0x0010, 0x0804, 0x3400, 0x2009, 0x001a, 0x7a8c,
- 0x7b88, 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x001a, 0xaf60, 0x080c,
- 0x4aa6, 0x701f, 0x53dc, 0x0005, 0x2001, 0x182d, 0x2003, 0x0001,
- 0xa85c, 0x9080, 0x001a, 0x2098, 0xa860, 0x20e0, 0x20a9, 0x001a,
- 0x7020, 0x20a0, 0x20e9, 0x0001, 0x4003, 0x0804, 0x33cb, 0x080c,
- 0x4a61, 0x1120, 0x2009, 0x0002, 0x0804, 0x33fd, 0x7984, 0x9194,
- 0xff00, 0x918c, 0x00ff, 0x8217, 0x82ff, 0x1118, 0x2099, 0x1990,
- 0x0040, 0x92c6, 0x0001, 0x1118, 0x2099, 0x19aa, 0x0010, 0x0804,
- 0x3400, 0xa85c, 0x9080, 0x001a, 0x20a0, 0xa860, 0x20e8, 0x20a9,
- 0x001a, 0x20e1, 0x0001, 0x4003, 0x2009, 0x001a, 0x7a8c, 0x7b88,
- 0x7c9c, 0x7d98, 0xa85c, 0x9080, 0x001a, 0xaf60, 0x0804, 0x4aa9,
- 0x7884, 0x908a, 0x1000, 0x1a04, 0x3400, 0x0126, 0x2091, 0x8000,
- 0x8003, 0x800b, 0x810b, 0x9108, 0x00c6, 0x2061, 0x19d7, 0x614a,
- 0x00ce, 0x012e, 0x0804, 0x33cb, 0x00c6, 0x080c, 0x72e5, 0x1160,
- 0x080c, 0x75dc, 0x080c, 0x5ef6, 0x9085, 0x0001, 0x080c, 0x732a,
- 0x080c, 0x7212, 0x080c, 0x0dc4, 0x2061, 0x1800, 0x6030, 0xc09d,
- 0x6032, 0x080c, 0x5db5, 0x00ce, 0x0005, 0x2001, 0x1800, 0x2004,
- 0x908e, 0x0000, 0x0904, 0x33fd, 0x00c6, 0x7884, 0x9005, 0x0190,
- 0x7888, 0x2061, 0x1978, 0x2c0c, 0x2062, 0x080c, 0x2a75, 0x01a8,
- 0x080c, 0x2a7d, 0x0190, 0x080c, 0x2a85, 0x0178, 0x2162, 0x00ce,
- 0x0804, 0x3400, 0x2061, 0x0100, 0x6038, 0x9086, 0x0007, 0x1118,
- 0x2009, 0x0001, 0x0010, 0x2009, 0x0000, 0x7884, 0x9086, 0x0002,
- 0x1568, 0x2061, 0x0100, 0x6028, 0xc09c, 0x602a, 0x0026, 0x2011,
- 0x0003, 0x080c, 0x99d6, 0x2011, 0x0002, 0x080c, 0x99e0, 0x002e,
- 0x080c, 0x98ee, 0x0036, 0x901e, 0x080c, 0x9964, 0x003e, 0x60e3,
- 0x0000, 0x080c, 0xd33c, 0x080c, 0xd373, 0x9085, 0x0001, 0x080c,
- 0x732a, 0x9006, 0x080c, 0x2b65, 0x2001, 0x1800, 0x2003, 0x0004,
- 0x2001, 0x1984, 0x2003, 0x0000, 0x6027, 0x0008, 0x00ce, 0x0804,
- 0x33cb, 0x81ff, 0x0120, 0x2009, 0x0001, 0x0804, 0x33fd, 0x080c,
- 0x55bb, 0x0120, 0x2009, 0x0007, 0x0804, 0x33fd, 0x7984, 0x7ea8,
- 0x96b4, 0x00ff, 0x080c, 0x6411, 0x1904, 0x3400, 0x9186, 0x007f,
- 0x0138, 0x080c, 0x6746, 0x0120, 0x2009, 0x0009, 0x0804, 0x33fd,
- 0x080c, 0x4a61, 0x1120, 0x2009, 0x0002, 0x0804, 0x33fd, 0xa86b,
- 0x0000, 0xa86c, 0xc0fd, 0xa86e, 0x080c, 0xbb36, 0x1120, 0x2009,
- 0x0003, 0x0804, 0x33fd, 0x7007, 0x0003, 0x701f, 0x54e0, 0x0005,
- 0xa830, 0x9086, 0x0100, 0x1120, 0x2009, 0x0004, 0x0804, 0x33fd,
- 0xa8e4, 0xa86a, 0xa834, 0x8007, 0x800c, 0xa85c, 0x9080, 0x000c,
- 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xaf60, 0x0804, 0x4aa9, 0xa89c,
- 0x9086, 0x000d, 0x1904, 0x33fd, 0x2021, 0x4005, 0x0126, 0x2091,
- 0x8000, 0x0e04, 0x5504, 0x0010, 0x012e, 0x0cc0, 0x7c36, 0x9486,
- 0x4000, 0x0118, 0x7833, 0x0011, 0x0010, 0x7833, 0x0010, 0x7883,
- 0x4005, 0xa99c, 0x7986, 0xa9a8, 0x799a, 0xa9ac, 0x799e, 0x080c,
- 0x4a99, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
- 0x119d, 0x7007, 0x0001, 0x2091, 0x5000, 0x700f, 0x0000, 0x012e,
- 0x0005, 0x0126, 0x2091, 0x8000, 0x00c6, 0x2061, 0x19d7, 0x7984,
- 0x615a, 0x6156, 0x605f, 0x0000, 0x6053, 0x0009, 0x7898, 0x6072,
- 0x789c, 0x606e, 0x7888, 0x606a, 0x788c, 0x6066, 0x2001, 0x19e7,
- 0x2044, 0x2001, 0x19ee, 0xa07a, 0xa060, 0xa076, 0xa07f, 0x0001,
- 0xa083, 0x0002, 0xa06f, 0x0000, 0xa0a3, 0x0000, 0x00ce, 0x012e,
- 0x0804, 0x33cb, 0x0126, 0x2091, 0x8000, 0x00b6, 0x00c6, 0x90e4,
- 0xc000, 0x0168, 0x0006, 0xd0d4, 0x0130, 0x0036, 0x2019, 0x0029,
- 0x080c, 0x3180, 0x003e, 0x080c, 0xb99f, 0x000e, 0x1198, 0xd0e4,
- 0x0160, 0x9180, 0x1000, 0x2004, 0x905d, 0x0160, 0x080c, 0x5f10,
- 0x080c, 0x9e82, 0x0110, 0xb817, 0x0000, 0x9006, 0x00ce, 0x00be,
- 0x012e, 0x0005, 0x9085, 0x0001, 0x0cc8, 0x0126, 0x2091, 0x8000,
- 0x0156, 0x2010, 0x900e, 0x20a9, 0x0800, 0x0016, 0x9180, 0x1000,
- 0x2004, 0x9005, 0x0188, 0x9186, 0x007e, 0x0170, 0x9186, 0x007f,
- 0x0158, 0x9186, 0x0080, 0x0178, 0x9186, 0x00ff, 0x0128, 0x0026,
- 0x2200, 0x080c, 0x5552, 0x002e, 0x001e, 0x8108, 0x1f04, 0x5585,
- 0x015e, 0x012e, 0x0005, 0x080c, 0xbef8, 0x0db0, 0x0c80, 0x2001,
- 0x185f, 0x2004, 0x0005, 0x2001, 0x187e, 0x2004, 0x0005, 0x0006,
- 0x2001, 0x1810, 0x2004, 0xd0d4, 0x000e, 0x0005, 0x2001, 0x180e,
- 0x2004, 0xd0b4, 0x0005, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003,
- 0x0005, 0x79a4, 0x81ff, 0x0904, 0x3400, 0x9182, 0x0081, 0x1a04,
- 0x3400, 0x810c, 0x0016, 0x080c, 0x4a61, 0x0170, 0x080c, 0x0f09,
- 0x2100, 0x2238, 0x7d84, 0x7c88, 0x7b8c, 0x7a90, 0x001e, 0x080c,
- 0x4aa6, 0x701f, 0x55e1, 0x0005, 0x001e, 0x2009, 0x0002, 0x0804,
- 0x33fd, 0x2079, 0x0000, 0x7d94, 0x7c98, 0x7ba8, 0x7aac, 0x79a4,
- 0x810c, 0x2061, 0x18b9, 0x2c44, 0xa774, 0xa078, 0x2071, 0x189f,
- 0x080c, 0x4aa9, 0x701f, 0x55f5, 0x0005, 0x2061, 0x18b9, 0x2c44,
- 0x0016, 0x0026, 0xa274, 0xa178, 0x080c, 0x0f11, 0x002e, 0x001e,
- 0x080c, 0x0fbe, 0x9006, 0xa802, 0xa806, 0x0804, 0x33cb, 0x0126,
- 0x0156, 0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6,
- 0x00f6, 0x2061, 0x0100, 0x2069, 0x0200, 0x2071, 0x1800, 0x6044,
- 0xd0a4, 0x11e8, 0xd084, 0x0118, 0x080c, 0x57b5, 0x0068, 0xd08c,
- 0x0118, 0x080c, 0x56be, 0x0040, 0xd094, 0x0118, 0x080c, 0x568e,
- 0x0018, 0xd09c, 0x0108, 0x0099, 0x00fe, 0x00ee, 0x00de, 0x00ce,
- 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x012e, 0x0005, 0x0016,
- 0x6128, 0xd19c, 0x1110, 0xc19d, 0x612a, 0x001e, 0x0c68, 0x7030,
- 0xd09c, 0x1120, 0x6004, 0x9085, 0x0002, 0x6006, 0x7094, 0x9005,
- 0x0120, 0x7097, 0x0000, 0x708f, 0x0000, 0x624c, 0x9286, 0xf0f0,
- 0x1150, 0x6048, 0x9086, 0xf0f0, 0x0130, 0x624a, 0x6043, 0x0090,
- 0x6043, 0x0010, 0x0490, 0x9294, 0xff00, 0x9296, 0xf700, 0x0178,
- 0x7138, 0xd1a4, 0x1160, 0x6240, 0x9295, 0x0100, 0x6242, 0x9294,
- 0x0010, 0x0128, 0x2009, 0x00f7, 0x080c, 0x5e72, 0x00f0, 0x6040,
- 0x9084, 0x0010, 0x9085, 0x0140, 0x6042, 0x6043, 0x0000, 0x7083,
- 0x0000, 0x709f, 0x0001, 0x70c3, 0x0000, 0x70db, 0x0000, 0x2009,
- 0x1c80, 0x200b, 0x0000, 0x7093, 0x0000, 0x7087, 0x000f, 0x2009,
- 0x000f, 0x2011, 0x5d58, 0x080c, 0x8432, 0x0005, 0x2001, 0x1880,
- 0x2004, 0xd08c, 0x0110, 0x705b, 0xffff, 0x7084, 0x9005, 0x1528,
- 0x2011, 0x5d58, 0x080c, 0x835e, 0x6040, 0x9094, 0x0010, 0x9285,
- 0x0020, 0x6042, 0x20a9, 0x00c8, 0x6044, 0xd08c, 0x1168, 0x1f04,
- 0x56a4, 0x6242, 0x7097, 0x0000, 0x6040, 0x9094, 0x0010, 0x9285,
- 0x0080, 0x6042, 0x6242, 0x0048, 0x6242, 0x7097, 0x0000, 0x708b,
- 0x0000, 0x9006, 0x080c, 0x5efb, 0x0000, 0x0005, 0x7088, 0x908a,
- 0x0003, 0x1a0c, 0x0dc4, 0x000b, 0x0005, 0x56c8, 0x5719, 0x57b4,
- 0x00f6, 0x0016, 0x6900, 0x918c, 0x0800, 0x708b, 0x0001, 0x2001,
- 0x015d, 0x2003, 0x0000, 0x6803, 0x00fc, 0x20a9, 0x0004, 0x6800,
- 0x9084, 0x00fc, 0x0120, 0x1f04, 0x56d7, 0x080c, 0x0dc4, 0x68a0,
- 0x68a2, 0x689c, 0x689e, 0x6898, 0x689a, 0xa001, 0x918d, 0x1600,
- 0x6902, 0x001e, 0x6837, 0x0020, 0x080c, 0x5ed7, 0x2079, 0x1c00,
- 0x7833, 0x1101, 0x7837, 0x0000, 0x20e1, 0x0001, 0x2099, 0x1805,
- 0x20e9, 0x0001, 0x20a1, 0x1c0e, 0x20a9, 0x0004, 0x4003, 0x080c,
- 0x9d0b, 0x20e1, 0x0001, 0x2099, 0x1c00, 0x20e9, 0x0000, 0x20a1,
- 0x0240, 0x20a9, 0x0014, 0x4003, 0x60c3, 0x000c, 0x600f, 0x0000,
- 0x080c, 0x5d89, 0x00fe, 0x9006, 0x708e, 0x6043, 0x0008, 0x6042,
- 0x0005, 0x00f6, 0x708c, 0x708f, 0x0000, 0x9025, 0x0904, 0x5791,
- 0x6020, 0xd0b4, 0x1904, 0x578f, 0x719c, 0x81ff, 0x0904, 0x577d,
- 0x9486, 0x000c, 0x1904, 0x578a, 0x9480, 0x0018, 0x8004, 0x20a8,
- 0x080c, 0x5ed0, 0x2011, 0x0260, 0x2019, 0x1c00, 0x220c, 0x2304,
- 0x9106, 0x11e8, 0x8210, 0x8318, 0x1f04, 0x5736, 0x6043, 0x0004,
- 0x2061, 0x0140, 0x605b, 0xbc94, 0x605f, 0xf0f0, 0x2061, 0x0100,
- 0x6043, 0x0006, 0x708b, 0x0002, 0x7097, 0x0002, 0x2009, 0x07d0,
- 0x2011, 0x5d5f, 0x080c, 0x8432, 0x080c, 0x5ed7, 0x04c0, 0x080c,
- 0x5ed0, 0x2079, 0x0260, 0x7930, 0x918e, 0x1101, 0x1558, 0x7834,
- 0x9005, 0x1540, 0x7900, 0x918c, 0x00ff, 0x1118, 0x7804, 0x9005,
- 0x0190, 0x080c, 0x5ed0, 0x2011, 0x026e, 0x2019, 0x1805, 0x20a9,
- 0x0004, 0x220c, 0x2304, 0x9102, 0x0230, 0x11a0, 0x8210, 0x8318,
- 0x1f04, 0x5771, 0x0078, 0x709f, 0x0000, 0x080c, 0x5ed0, 0x20e1,
- 0x0000, 0x2099, 0x0260, 0x20e9, 0x0001, 0x20a1, 0x1c00, 0x20a9,
- 0x0014, 0x4003, 0x6043, 0x0008, 0x6043, 0x0000, 0x0010, 0x00fe,
- 0x0005, 0x6040, 0x9085, 0x0100, 0x6042, 0x6020, 0xd0b4, 0x1db8,
- 0x080c, 0x9d0b, 0x20e1, 0x0001, 0x2099, 0x1c00, 0x20e9, 0x0000,
- 0x20a1, 0x0240, 0x20a9, 0x0014, 0x4003, 0x60c3, 0x000c, 0x2011,
- 0x19ce, 0x2013, 0x0000, 0x708f, 0x0000, 0x60a3, 0x0056, 0x60a7,
- 0x9575, 0x080c, 0x961a, 0x08d8, 0x0005, 0x7094, 0x908a, 0x001d,
- 0x1a0c, 0x0dc4, 0x000b, 0x0005, 0x57e6, 0x57f9, 0x5822, 0x5842,
- 0x5868, 0x5897, 0x58bd, 0x58f5, 0x591b, 0x5949, 0x5984, 0x59bc,
- 0x59da, 0x5a05, 0x5a27, 0x5a42, 0x5a4c, 0x5a80, 0x5aa6, 0x5ad5,
- 0x5afb, 0x5b33, 0x5b77, 0x5bb4, 0x5bd5, 0x5c2e, 0x5c50, 0x5c7e,
- 0x5c7e, 0x00c6, 0x2061, 0x1800, 0x6003, 0x0007, 0x2061, 0x0100,
- 0x6004, 0x9084, 0xfff9, 0x6006, 0x00ce, 0x0005, 0x2061, 0x0140,
- 0x605b, 0xbc94, 0x605f, 0xf0f0, 0x2061, 0x0100, 0x6043, 0x0002,
- 0x7097, 0x0001, 0x2009, 0x07d0, 0x2011, 0x5d5f, 0x080c, 0x8432,
- 0x0005, 0x00f6, 0x708c, 0x9086, 0x0014, 0x1510, 0x6042, 0x6020,
- 0xd0b4, 0x11f0, 0x080c, 0x5ed0, 0x2079, 0x0260, 0x7a30, 0x9296,
- 0x1102, 0x11a0, 0x7834, 0x9005, 0x1188, 0x7a38, 0xd2fc, 0x0128,
- 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x2011, 0x5d5f, 0x080c,
- 0x835e, 0x7097, 0x0010, 0x080c, 0x5a4c, 0x0010, 0x708f, 0x0000,
- 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0003, 0x6043, 0x0004, 0x2011,
- 0x5d5f, 0x080c, 0x835e, 0x080c, 0x5e54, 0x2079, 0x0240, 0x7833,
- 0x1102, 0x7837, 0x0000, 0x20a9, 0x0008, 0x9f88, 0x000e, 0x200b,
- 0x0000, 0x8108, 0x1f04, 0x5837, 0x60c3, 0x0014, 0x080c, 0x5d89,
- 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5d5f,
- 0x080c, 0x835e, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5ed0, 0x2079,
- 0x0260, 0x7a30, 0x9296, 0x1102, 0x1178, 0x7834, 0x9005, 0x1160,
+ 0x001c, 0x0002, 0x4ce5, 0x4ce5, 0x4ce7, 0x4ce5, 0x4ce5, 0x4ce5,
+ 0x4cec, 0x4ce5, 0x4ce5, 0x4ce5, 0x4cf1, 0x4ce5, 0x4ce5, 0x4ce5,
+ 0x4cf6, 0x4ce5, 0x4ce5, 0x4ce5, 0x4cfb, 0x4ce5, 0x4ce5, 0x4ce5,
+ 0x4d00, 0x4ce5, 0x4ce5, 0x4ce5, 0x4d05, 0x080c, 0x0dc3, 0xaa78,
+ 0xab7c, 0xac80, 0x0804, 0x4c71, 0xaa88, 0xab8c, 0xac90, 0x0804,
+ 0x4c71, 0xaa98, 0xab9c, 0xaca0, 0x0804, 0x4c71, 0xaaa8, 0xabac,
+ 0xacb0, 0x0804, 0x4c71, 0xaab8, 0xabbc, 0xacc0, 0x0804, 0x4c71,
+ 0xaac8, 0xabcc, 0xacd0, 0x0804, 0x4c71, 0xaad8, 0xabdc, 0xace0,
+ 0x0804, 0x4c71, 0x0016, 0x0026, 0x0036, 0x00b6, 0x00c6, 0x2009,
+ 0x007e, 0x080c, 0x64fc, 0x2019, 0x0001, 0xb85c, 0xd0ac, 0x0110,
+ 0x2019, 0x0000, 0x2011, 0x801b, 0x080c, 0x4b6d, 0x00ce, 0x00be,
+ 0x003e, 0x002e, 0x001e, 0x0005, 0x0026, 0x080c, 0x5664, 0xd0c4,
+ 0x0120, 0x2011, 0x8014, 0x080c, 0x4b6d, 0x002e, 0x0005, 0x81ff,
+ 0x1904, 0x3499, 0x0126, 0x2091, 0x8000, 0x6030, 0xc08d, 0xc085,
+ 0xc0ac, 0x6032, 0x080c, 0x7351, 0x1158, 0x080c, 0x764c, 0x080c,
+ 0x5fb3, 0x9085, 0x0001, 0x080c, 0x7395, 0x080c, 0x727e, 0x0010,
+ 0x080c, 0x5e72, 0x012e, 0x0804, 0x3467, 0x81ff, 0x0120, 0x2009,
+ 0x0001, 0x0804, 0x3499, 0x080c, 0x5678, 0x0120, 0x2009, 0x0007,
+ 0x0804, 0x3499, 0x080c, 0x6865, 0x0120, 0x2009, 0x0008, 0x0804,
+ 0x3499, 0x2001, 0x180d, 0x2004, 0xd08c, 0x0178, 0x0026, 0x2011,
+ 0x0010, 0x080c, 0x68a8, 0x002e, 0x0140, 0x7984, 0x080c, 0x68f2,
+ 0x1120, 0x2009, 0x4009, 0x0804, 0x3499, 0x7984, 0x080c, 0x6497,
+ 0x1904, 0x349c, 0x080c, 0x4b40, 0x0904, 0x349c, 0x2b00, 0x7026,
+ 0x080c, 0x686d, 0x7888, 0x1138, 0x9084, 0x0005, 0x1120, 0x080c,
+ 0x674b, 0x0804, 0x3467, 0x080c, 0x4b11, 0x0904, 0x3499, 0x9006,
+ 0xa86a, 0xa832, 0xa86c, 0xc0fd, 0xa86e, 0x080c, 0xc3f3, 0x0904,
+ 0x3499, 0x7888, 0xd094, 0x0118, 0xb8bc, 0xc08d, 0xb8be, 0x7007,
+ 0x0003, 0x701f, 0x4e04, 0x0005, 0x2061, 0x1800, 0x080c, 0x5678,
+ 0x2009, 0x0007, 0x1528, 0x080c, 0x6865, 0x0118, 0x2009, 0x0008,
+ 0x00f8, 0xa99c, 0x080c, 0x6497, 0x11f8, 0x080c, 0x4b3e, 0x01e0,
+ 0x080c, 0x686d, 0xa8a0, 0x1130, 0x9084, 0x0005, 0x1118, 0x080c,
+ 0x674b, 0x00d0, 0xa86c, 0xc0fc, 0xa86e, 0x080c, 0xc3f3, 0x11e8,
+ 0xa8a0, 0xd094, 0x0118, 0xb8bc, 0xc08d, 0xb8be, 0x2009, 0x0003,
+ 0xa89b, 0x4005, 0xa99e, 0x0010, 0xa89b, 0x4006, 0x900e, 0x9085,
+ 0x0001, 0x2001, 0x0030, 0x0005, 0xa89b, 0x4000, 0xa99e, 0x0039,
+ 0x9006, 0x918d, 0x0001, 0x2008, 0x0005, 0x9006, 0x0005, 0x20a9,
+ 0x0004, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0032, 0x20a0, 0xb8b4,
+ 0x20e0, 0xb8b8, 0x9080, 0x0006, 0x2098, 0x080c, 0x0f8a, 0x20a9,
+ 0x0004, 0xa85c, 0x9080, 0x0036, 0x20a0, 0xb8b8, 0x9080, 0x000a,
+ 0x2098, 0x080c, 0x0f8a, 0x0005, 0xa830, 0x2009, 0x180d, 0x210c,
+ 0xd18c, 0x0140, 0x2008, 0x918e, 0xdead, 0x1120, 0x2021, 0x4009,
+ 0x0804, 0x3469, 0x9086, 0x0100, 0x7024, 0x2058, 0x1110, 0x0804,
+ 0x55b4, 0x080c, 0x674b, 0x0804, 0x3467, 0x080c, 0x5678, 0x0120,
+ 0x2009, 0x0007, 0x0804, 0x3499, 0x7f84, 0x7a8c, 0x7b88, 0x7c9c,
+ 0x7d98, 0x080c, 0x4b11, 0x1120, 0x2009, 0x0002, 0x0804, 0x3499,
+ 0x900e, 0x2130, 0x7126, 0x7132, 0xa860, 0x20e8, 0x7036, 0xa85c,
+ 0x9080, 0x0005, 0x702a, 0x20a0, 0x080c, 0x64fc, 0x1904, 0x4ea7,
+ 0x080c, 0x686d, 0x0120, 0x080c, 0x6875, 0x1904, 0x4ea7, 0x080c,
+ 0x6865, 0x1130, 0x080c, 0x6748, 0x1118, 0xd79c, 0x0904, 0x4ea7,
+ 0xd794, 0x1110, 0xd784, 0x01a8, 0xb8b4, 0x20e0, 0xb8b8, 0x9080,
+ 0x0006, 0x2098, 0x3400, 0xd794, 0x0198, 0x20a9, 0x0008, 0x4003,
+ 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x20a9, 0x0002, 0x080c, 0x491e,
+ 0x0080, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x000a, 0x2098, 0x3400,
+ 0x20a9, 0x0004, 0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c,
+ 0x491e, 0x4104, 0xd794, 0x0528, 0xb8b4, 0x20e0, 0xb8b8, 0x2060,
+ 0x9c80, 0x0000, 0x2098, 0x20a9, 0x0002, 0x4003, 0x9c80, 0x0003,
+ 0x2098, 0x20a9, 0x0001, 0x4005, 0x9c80, 0x0004, 0x2098, 0x3400,
+ 0x20a9, 0x0002, 0x4003, 0x2098, 0x20a0, 0x3d00, 0x20e0, 0x080c,
+ 0x4911, 0x9c80, 0x0026, 0x2098, 0xb8b4, 0x20e0, 0x20a9, 0x0002,
+ 0x4003, 0xd794, 0x0110, 0x96b0, 0x000b, 0x96b0, 0x0005, 0x8108,
+ 0x080c, 0xa307, 0x0118, 0x9186, 0x0800, 0x0040, 0xd78c, 0x0120,
+ 0x9186, 0x0800, 0x0170, 0x0018, 0x9186, 0x007e, 0x0150, 0xd794,
+ 0x0118, 0x9686, 0x0020, 0x0010, 0x9686, 0x0028, 0x0150, 0x0804,
+ 0x4e3c, 0x86ff, 0x1120, 0x7124, 0x810b, 0x0804, 0x3467, 0x7033,
+ 0x0001, 0x7122, 0x7024, 0x9600, 0x7026, 0x772e, 0x2061, 0x18b9,
+ 0x2c44, 0xa06f, 0x0000, 0xa67e, 0x7034, 0xa076, 0x7028, 0xa07a,
+ 0xa292, 0xa396, 0xa49a, 0xa59e, 0x080c, 0x10f7, 0x7007, 0x0002,
+ 0x701f, 0x4ee3, 0x0005, 0x7030, 0x9005, 0x1180, 0x7120, 0x7028,
+ 0x20a0, 0x772c, 0x9036, 0x7034, 0x20e8, 0x2061, 0x18b9, 0x2c44,
+ 0xa290, 0xa394, 0xa498, 0xa59c, 0x0804, 0x4e3c, 0x7124, 0x810b,
+ 0x0804, 0x3467, 0x2029, 0x007e, 0x7984, 0x7a88, 0x7b8c, 0x7c98,
+ 0x9184, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x349c, 0x9502,
+ 0x0a04, 0x349c, 0x9184, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x349c,
+ 0x9502, 0x0a04, 0x349c, 0x9284, 0xff00, 0x8007, 0x90e2, 0x0020,
+ 0x0a04, 0x349c, 0x9502, 0x0a04, 0x349c, 0x9284, 0x00ff, 0x90e2,
+ 0x0020, 0x0a04, 0x349c, 0x9502, 0x0a04, 0x349c, 0x9384, 0xff00,
+ 0x8007, 0x90e2, 0x0020, 0x0a04, 0x349c, 0x9502, 0x0a04, 0x349c,
+ 0x9384, 0x00ff, 0x90e2, 0x0020, 0x0a04, 0x349c, 0x9502, 0x0a04,
+ 0x349c, 0x9484, 0xff00, 0x8007, 0x90e2, 0x0020, 0x0a04, 0x349c,
+ 0x9502, 0x0a04, 0x349c, 0x9484, 0x00ff, 0x90e2, 0x0020, 0x0a04,
+ 0x349c, 0x9502, 0x0a04, 0x349c, 0x2061, 0x1965, 0x6102, 0x6206,
+ 0x630a, 0x640e, 0x0804, 0x3467, 0x0006, 0x080c, 0x5664, 0xd0cc,
+ 0x000e, 0x0005, 0x0006, 0x080c, 0x5668, 0xd0bc, 0x000e, 0x0005,
+ 0x6170, 0x7a84, 0x6300, 0x82ff, 0x1118, 0x7986, 0x0804, 0x3467,
+ 0x83ff, 0x1904, 0x349c, 0x2001, 0xfff0, 0x9200, 0x1a04, 0x349c,
+ 0x2019, 0xffff, 0x6074, 0x9302, 0x9200, 0x0a04, 0x349c, 0x7986,
+ 0x6272, 0x0804, 0x3467, 0x080c, 0x5678, 0x1904, 0x3499, 0x7c88,
+ 0x7d84, 0x7e98, 0x7f8c, 0x080c, 0x4b11, 0x0904, 0x3499, 0x900e,
+ 0x901e, 0x7326, 0x7332, 0xa860, 0x20e8, 0x7036, 0xa85c, 0x9080,
+ 0x0003, 0x702a, 0x20a0, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178,
+ 0x080c, 0x686d, 0x0118, 0x080c, 0x6875, 0x1148, 0x20a9, 0x0001,
+ 0xb814, 0x4004, 0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108,
+ 0x9182, 0x0800, 0x0120, 0x9386, 0x003c, 0x0170, 0x0c20, 0x83ff,
+ 0x1148, 0x7224, 0x900e, 0x2001, 0x0003, 0x080c, 0x871c, 0x2208,
+ 0x0804, 0x3467, 0x7033, 0x0001, 0x7122, 0x7024, 0x9300, 0x7026,
+ 0x2061, 0x18b9, 0x2c44, 0xa06f, 0x0000, 0xa37e, 0x7028, 0xa07a,
+ 0x7034, 0xa076, 0xa492, 0xa596, 0xa69a, 0xa79e, 0x080c, 0x10f7,
+ 0x7007, 0x0002, 0x701f, 0x4fd5, 0x0005, 0x7030, 0x9005, 0x1178,
+ 0x7120, 0x7028, 0x20a0, 0x901e, 0x7034, 0x20e8, 0x2061, 0x18b9,
+ 0x2c44, 0xa490, 0xa594, 0xa698, 0xa79c, 0x0804, 0x4f93, 0x7224,
+ 0x900e, 0x2001, 0x0003, 0x080c, 0x871c, 0x2208, 0x0804, 0x3467,
+ 0x00f6, 0x00e6, 0x080c, 0x5678, 0x2009, 0x0007, 0x1904, 0x5069,
+ 0x2071, 0x189f, 0x745c, 0x84ff, 0x2009, 0x000e, 0x1904, 0x5069,
+ 0xaca0, 0xad9c, 0xaea8, 0xafa4, 0x0096, 0x080c, 0x1026, 0x2009,
+ 0x0002, 0x0904, 0x5068, 0x2900, 0x705e, 0x900e, 0x901e, 0x7356,
+ 0x7362, 0xa860, 0x7066, 0xa85c, 0x9080, 0x0003, 0x705a, 0x20a0,
+ 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c, 0x686d, 0x0118,
+ 0x080c, 0x6875, 0x1148, 0xb814, 0x20a9, 0x0001, 0x4004, 0xb810,
+ 0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182, 0x0800, 0x0120,
+ 0x9386, 0x003c, 0x01e8, 0x0c20, 0x83ff, 0x11c0, 0x7254, 0x900e,
+ 0x2001, 0x0003, 0x080c, 0x871c, 0x2208, 0x009e, 0xa89b, 0x4000,
+ 0xa99e, 0x715c, 0x81ff, 0x090c, 0x0dc3, 0x2148, 0x080c, 0x103f,
+ 0x9006, 0x705e, 0x918d, 0x0001, 0x2008, 0x0418, 0x7063, 0x0001,
+ 0x7152, 0x7054, 0x9300, 0x7056, 0x2061, 0x18ba, 0x2c44, 0xa37e,
+ 0x7058, 0xa07a, 0x7064, 0xa076, 0xa492, 0xa596, 0xa69a, 0xa79e,
+ 0xa0a3, 0x5074, 0x000e, 0xa0a6, 0x080c, 0x10f7, 0x9006, 0x0048,
+ 0x009e, 0xa89b, 0x4005, 0xa99e, 0x900e, 0x9085, 0x0001, 0x2001,
+ 0x0030, 0x00ee, 0x00fe, 0x0005, 0x00f6, 0xa0a4, 0x904d, 0x090c,
+ 0x0dc3, 0x00e6, 0x2071, 0x189f, 0xa070, 0x908e, 0x0100, 0x0138,
+ 0xa87f, 0x0030, 0xa887, 0x0000, 0xa89b, 0x4002, 0x00d8, 0x7060,
+ 0x9005, 0x1158, 0x7150, 0x7058, 0x20a0, 0x901e, 0x7064, 0x20e8,
+ 0xa490, 0xa594, 0xa698, 0xa79c, 0x0428, 0xa87f, 0x0000, 0xa887,
+ 0x0000, 0xa89b, 0x4000, 0x7254, 0x900e, 0x2001, 0x0003, 0x080c,
+ 0x871c, 0xaa9e, 0x715c, 0x81ff, 0x090c, 0x0dc3, 0x2148, 0x080c,
+ 0x103f, 0x705f, 0x0000, 0xa0a4, 0x2048, 0x0126, 0x2091, 0x8000,
+ 0x080c, 0x6c02, 0x012e, 0xa0a3, 0x0000, 0xa0a7, 0x0000, 0x00ee,
+ 0x00fe, 0x0005, 0x91d8, 0x1000, 0x2b5c, 0x8bff, 0x0178, 0x080c,
+ 0x686d, 0x0118, 0x080c, 0x6875, 0x1148, 0xb814, 0x20a9, 0x0001,
+ 0x4004, 0xb810, 0x4004, 0x4104, 0x9398, 0x0003, 0x8108, 0x9182,
+ 0x0800, 0x0120, 0x9386, 0x003c, 0x0518, 0x0c20, 0x83ff, 0x11f0,
+ 0x7154, 0x810c, 0xa99e, 0xa89b, 0x4000, 0x715c, 0x81ff, 0x090c,
+ 0x0dc3, 0x2148, 0x080c, 0x103f, 0x9006, 0x705e, 0x918d, 0x0001,
+ 0x2008, 0xa0a4, 0x2048, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c02,
+ 0x012e, 0xa0a3, 0x0000, 0xa0a7, 0x0000, 0x0070, 0x7063, 0x0001,
+ 0x7152, 0x7054, 0x9300, 0x7056, 0xa37e, 0xa492, 0xa596, 0xa69a,
+ 0xa79e, 0x080c, 0x10f7, 0x9006, 0x00ee, 0x0005, 0x0096, 0xa890,
+ 0x90be, 0x7000, 0x0148, 0x90be, 0x7100, 0x0130, 0x90be, 0x7200,
+ 0x0118, 0x009e, 0x0804, 0x349c, 0xa888, 0xa98c, 0x080c, 0x2708,
+ 0x1518, 0x080c, 0x6497, 0x1500, 0x7126, 0xbe12, 0xbd16, 0xae80,
+ 0x080c, 0x4b11, 0x01f0, 0x080c, 0x4b11, 0x01d8, 0x009e, 0xa86b,
+ 0x0000, 0xa86c, 0xc0fd, 0xa86e, 0xa823, 0x0000, 0xa804, 0x2048,
+ 0x080c, 0xc375, 0x1120, 0x2009, 0x0003, 0x0804, 0x3499, 0x7007,
+ 0x0003, 0x701f, 0x5142, 0x0005, 0x009e, 0x2009, 0x0002, 0x0804,
+ 0x3499, 0x0cd0, 0x7124, 0x080c, 0x31fe, 0xa820, 0x9086, 0x8001,
+ 0x1120, 0x2009, 0x0004, 0x0804, 0x3499, 0x2900, 0x7022, 0xa804,
+ 0x0096, 0x2048, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084,
+ 0xffc0, 0x009e, 0x9080, 0x0002, 0x0076, 0x0006, 0x2098, 0x20a0,
+ 0x27e0, 0x27e8, 0x20a9, 0x002a, 0x080c, 0x0f8a, 0xaa70, 0xab74,
+ 0xac78, 0xad7c, 0x2061, 0x18b9, 0x2c44, 0xa06f, 0x0000, 0xae68,
+ 0xaf90, 0x97c6, 0x7000, 0x0118, 0x97c6, 0x7100, 0x1148, 0x96c2,
+ 0x0004, 0x0600, 0x2009, 0x0004, 0x000e, 0x007e, 0x0804, 0x4b59,
+ 0x97c6, 0x7200, 0x11b8, 0x96c2, 0x0054, 0x02a0, 0x000e, 0x007e,
+ 0x2061, 0x18b9, 0x2c44, 0xa07a, 0xa776, 0xa07f, 0x002a, 0xa292,
+ 0xa396, 0xa49a, 0xa59e, 0x080c, 0x10f7, 0x7007, 0x0002, 0x701f,
+ 0x519e, 0x0005, 0x000e, 0x007e, 0x0804, 0x349c, 0x7020, 0x2048,
+ 0xa804, 0x2048, 0xa804, 0x2048, 0x8906, 0x8006, 0x8007, 0x90bc,
+ 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2098, 0x20a0, 0x27e0,
+ 0x27e8, 0x20a9, 0x002a, 0x080c, 0x0f8a, 0x2100, 0x2238, 0x2061,
+ 0x18b9, 0x2c44, 0xa290, 0xa394, 0xa498, 0xa59c, 0x2009, 0x002a,
+ 0x0804, 0x4b59, 0x81ff, 0x1904, 0x3499, 0x798c, 0x2001, 0x195a,
+ 0x918c, 0x8000, 0x2102, 0x080c, 0x4b28, 0x0904, 0x349c, 0x080c,
+ 0x686d, 0x0120, 0x080c, 0x6875, 0x1904, 0x349c, 0x080c, 0x65c3,
+ 0x0904, 0x3499, 0x0126, 0x2091, 0x8000, 0x080c, 0x669f, 0x012e,
+ 0x0904, 0x3499, 0x2001, 0x195a, 0x2004, 0xd0fc, 0x1904, 0x3467,
+ 0x0804, 0x44a8, 0xa9a4, 0x2001, 0x195a, 0x918c, 0x8000, 0xc18d,
+ 0x2102, 0x080c, 0x4b33, 0x01a0, 0x080c, 0x686d, 0x0118, 0x080c,
+ 0x6875, 0x1170, 0x080c, 0x65c3, 0x2009, 0x0002, 0x0128, 0x080c,
+ 0x669f, 0x1170, 0x2009, 0x0003, 0xa89b, 0x4005, 0xa99e, 0x0010,
+ 0xa89b, 0x4006, 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x0005,
+ 0xa89b, 0x4000, 0x2001, 0x195a, 0x2004, 0xd0fc, 0x1128, 0x080c,
+ 0x566c, 0x0110, 0x9006, 0x0018, 0x900e, 0x9085, 0x0001, 0x2001,
+ 0x0000, 0x0005, 0x78a8, 0xd08c, 0x1118, 0xd084, 0x0904, 0x441d,
+ 0x080c, 0x4b40, 0x0904, 0x349c, 0x080c, 0x4b11, 0x1120, 0x2009,
+ 0x0002, 0x0804, 0x3499, 0x080c, 0x686d, 0x0130, 0x908e, 0x0004,
+ 0x0118, 0x908e, 0x0005, 0x15a0, 0x78a8, 0xd08c, 0x0120, 0xb800,
+ 0xc08c, 0xb802, 0x0028, 0x080c, 0x5664, 0xd0b4, 0x0904, 0x4457,
+ 0x7884, 0x908e, 0x007e, 0x0904, 0x4457, 0x908e, 0x007f, 0x0904,
+ 0x4457, 0x908e, 0x0080, 0x0904, 0x4457, 0xb800, 0xd08c, 0x1904,
+ 0x4457, 0xa86b, 0x0000, 0xa86c, 0xc0fd, 0xa86e, 0x080c, 0xc394,
+ 0x1120, 0x2009, 0x0003, 0x0804, 0x3499, 0x7007, 0x0003, 0x701f,
+ 0x526a, 0x0005, 0x080c, 0x4b40, 0x0904, 0x349c, 0x0804, 0x4457,
+ 0x080c, 0x3257, 0x0108, 0x0005, 0x2009, 0x1833, 0x210c, 0x81ff,
+ 0x0120, 0x2009, 0x0001, 0x0804, 0x3499, 0x080c, 0x5678, 0x0120,
+ 0x2009, 0x0007, 0x0804, 0x3499, 0x080c, 0x6865, 0x0120, 0x2009,
+ 0x0008, 0x0804, 0x3499, 0xb89c, 0xd0a4, 0x1118, 0xd0ac, 0x1904,
+ 0x4457, 0x9006, 0xa86a, 0xa832, 0xa86c, 0xc0fd, 0xa86e, 0x080c,
+ 0xc3f3, 0x1120, 0x2009, 0x0003, 0x0804, 0x3499, 0x7007, 0x0003,
+ 0x701f, 0x52a3, 0x0005, 0xa830, 0x9086, 0x0100, 0x1120, 0x2009,
+ 0x0004, 0x0804, 0x55b4, 0x080c, 0x4b40, 0x0904, 0x349c, 0x0804,
+ 0x523c, 0x81ff, 0x2009, 0x0001, 0x1904, 0x3499, 0x080c, 0x5678,
+ 0x2009, 0x0007, 0x1904, 0x3499, 0x080c, 0x6865, 0x0120, 0x2009,
+ 0x0008, 0x0804, 0x3499, 0x080c, 0x4b40, 0x0904, 0x349c, 0x080c,
+ 0x686d, 0x2009, 0x0009, 0x1904, 0x3499, 0x080c, 0x4b11, 0x2009,
+ 0x0002, 0x0904, 0x3499, 0x9006, 0xa86a, 0xa832, 0xa86c, 0xc0fd,
+ 0xa86e, 0x7988, 0xa95a, 0x9194, 0xfd00, 0x918c, 0x00ff, 0x9006,
+ 0x82ff, 0x1128, 0xc0ed, 0xa952, 0x798c, 0xa956, 0x0038, 0x928e,
+ 0x0100, 0x1904, 0x349c, 0xc0e5, 0xa952, 0xa956, 0xa83e, 0x080c,
+ 0xc641, 0x2009, 0x0003, 0x0904, 0x3499, 0x7007, 0x0003, 0x701f,
+ 0x52fa, 0x0005, 0xa830, 0x9086, 0x0100, 0x2009, 0x0004, 0x0904,
+ 0x3499, 0x0804, 0x3467, 0x7aa8, 0x9284, 0xc000, 0x0148, 0xd2ec,
+ 0x01a0, 0x080c, 0x5678, 0x1188, 0x2009, 0x0014, 0x0804, 0x3499,
+ 0xd2dc, 0x1578, 0x81ff, 0x2009, 0x0001, 0x1904, 0x3499, 0x080c,
+ 0x5678, 0x2009, 0x0007, 0x1904, 0x3499, 0xd2f4, 0x0138, 0x9284,
+ 0x5000, 0xc0d5, 0x080c, 0x563a, 0x0804, 0x3467, 0xd2fc, 0x0160,
+ 0x080c, 0x4b40, 0x0904, 0x349c, 0x7984, 0x9284, 0x9000, 0xc0d5,
+ 0x080c, 0x560f, 0x0804, 0x3467, 0x080c, 0x4b40, 0x0904, 0x349c,
+ 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x2009, 0x0009, 0x1904,
+ 0x53e9, 0x080c, 0x4b11, 0x2009, 0x0002, 0x0904, 0x53e9, 0xa85c,
+ 0x9080, 0x001c, 0xaf60, 0x2009, 0x0008, 0x7a8c, 0x7b88, 0x7c9c,
+ 0x7d98, 0x080c, 0x4b56, 0x701f, 0x5356, 0x0005, 0xa870, 0x9086,
+ 0x0500, 0x1138, 0xa874, 0x9005, 0x1120, 0xa878, 0x9084, 0xff00,
+ 0x0110, 0x1904, 0x349c, 0xa86a, 0xa832, 0xa86c, 0xc0fd, 0xa86e,
+ 0x080c, 0x4b40, 0x1110, 0x0804, 0x349c, 0x2009, 0x0043, 0x080c,
+ 0xc6ad, 0x2009, 0x0003, 0x0904, 0x53e9, 0x7007, 0x0003, 0x701f,
+ 0x537a, 0x0005, 0xa830, 0x9086, 0x0100, 0x2009, 0x0004, 0x0904,
+ 0x53e9, 0x7984, 0x7aa8, 0x9284, 0x1000, 0xc0d5, 0x080c, 0x560f,
+ 0x0804, 0x3467, 0x00c6, 0xaab4, 0x9284, 0xc000, 0x0148, 0xd2ec,
+ 0x0170, 0x080c, 0x5678, 0x1158, 0x2009, 0x0014, 0x0804, 0x53d8,
+ 0x2061, 0x1800, 0x080c, 0x5678, 0x2009, 0x0007, 0x15c8, 0xd2f4,
+ 0x0130, 0x9284, 0x5000, 0xc0d5, 0x080c, 0x563a, 0x0058, 0xd2fc,
+ 0x0180, 0x080c, 0x4b3e, 0x0590, 0xa99c, 0x9284, 0x9000, 0xc0d5,
+ 0x080c, 0x560f, 0xa87f, 0x0000, 0xa887, 0x0000, 0xa89b, 0x4000,
+ 0x0438, 0x080c, 0x4b3e, 0x0510, 0x080c, 0x686d, 0x2009, 0x0009,
+ 0x11b8, 0xa8c8, 0x9086, 0x0500, 0x11c8, 0xa8cc, 0x9005, 0x11b0,
+ 0xa8d0, 0x9084, 0xff00, 0x1190, 0x080c, 0x4b3e, 0x1108, 0x0070,
+ 0x2009, 0x004b, 0x080c, 0xc6ad, 0x2009, 0x0003, 0x0108, 0x0078,
+ 0x0431, 0x19c0, 0xa89b, 0x4005, 0xa99e, 0x0010, 0xa89b, 0x4006,
+ 0x900e, 0x9085, 0x0001, 0x2001, 0x0030, 0x00ce, 0x0005, 0x9006,
+ 0x0ce0, 0x7aa8, 0xd2dc, 0x0904, 0x3499, 0x0016, 0x7984, 0x9284,
+ 0x1000, 0xc0fd, 0x080c, 0x560f, 0x001e, 0x1904, 0x3499, 0x0804,
+ 0x3467, 0x00f6, 0x2d78, 0xaab4, 0x0021, 0x00fe, 0x0005, 0xaab4,
+ 0xc2d5, 0xd2dc, 0x0150, 0x0016, 0xa99c, 0x9284, 0x1400, 0xc0fd,
+ 0x080c, 0x560f, 0x001e, 0x9085, 0x0001, 0x0005, 0x81ff, 0x0120,
+ 0x2009, 0x0001, 0x0804, 0x3499, 0x080c, 0x5678, 0x0120, 0x2009,
+ 0x0007, 0x0804, 0x3499, 0x7984, 0x7ea8, 0x96b4, 0x00ff, 0x080c,
+ 0x64fc, 0x1904, 0x349c, 0x9186, 0x007f, 0x0138, 0x080c, 0x686d,
+ 0x0120, 0x2009, 0x0009, 0x0804, 0x3499, 0x080c, 0x4b11, 0x1120,
+ 0x2009, 0x0002, 0x0804, 0x3499, 0xa86b, 0x0000, 0xa86c, 0xc0fd,
+ 0xa86e, 0x2001, 0x0100, 0x8007, 0xa80a, 0x080c, 0xc3ae, 0x1120,
+ 0x2009, 0x0003, 0x0804, 0x3499, 0x7007, 0x0003, 0x701f, 0x5449,
+ 0x0005, 0xa808, 0x8007, 0x9086, 0x0100, 0x1120, 0x2009, 0x0004,
+ 0x0804, 0x3499, 0xa8e4, 0xa86a, 0xa810, 0x8007, 0x9084, 0x00ff,
+ 0x800c, 0xa814, 0x8007, 0x9084, 0x00ff, 0x8004, 0x9080, 0x0002,
+ 0x9108, 0x8906, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,
+ 0x9080, 0x0004, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0x0804, 0x4b59,
+ 0x080c, 0x4b11, 0x1120, 0x2009, 0x0002, 0x0804, 0x3499, 0x7984,
+ 0x9194, 0xff00, 0x918c, 0x00ff, 0x8217, 0x82ff, 0x1118, 0x7023,
+ 0x1990, 0x0040, 0x92c6, 0x0001, 0x1118, 0x7023, 0x19aa, 0x0010,
+ 0x0804, 0x349c, 0x2009, 0x001a, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98,
+ 0xa85c, 0x9080, 0x001a, 0xaf60, 0x080c, 0x4b56, 0x701f, 0x5499,
+ 0x0005, 0x2001, 0x182d, 0x2003, 0x0001, 0xa85c, 0x9080, 0x001a,
+ 0x2098, 0xa860, 0x20e0, 0x20a9, 0x001a, 0x7020, 0x20a0, 0x20e9,
+ 0x0001, 0x4003, 0x0804, 0x3467, 0x080c, 0x4b11, 0x1120, 0x2009,
+ 0x0002, 0x0804, 0x3499, 0x7984, 0x9194, 0xff00, 0x918c, 0x00ff,
+ 0x8217, 0x82ff, 0x1118, 0x2099, 0x1990, 0x0040, 0x92c6, 0x0001,
+ 0x1118, 0x2099, 0x19aa, 0x0010, 0x0804, 0x349c, 0xa85c, 0x9080,
+ 0x001a, 0x20a0, 0xa860, 0x20e8, 0x20a9, 0x001a, 0x20e1, 0x0001,
+ 0x4003, 0x2009, 0x001a, 0x7a8c, 0x7b88, 0x7c9c, 0x7d98, 0xa85c,
+ 0x9080, 0x001a, 0xaf60, 0x0804, 0x4b59, 0x7884, 0x908a, 0x1000,
+ 0x1a04, 0x349c, 0x0126, 0x2091, 0x8000, 0x8003, 0x800b, 0x810b,
+ 0x9108, 0x00c6, 0x2061, 0x19d7, 0x614a, 0x00ce, 0x012e, 0x0804,
+ 0x3467, 0x00c6, 0x080c, 0x7351, 0x1160, 0x080c, 0x764c, 0x080c,
+ 0x5fb3, 0x9085, 0x0001, 0x080c, 0x7395, 0x080c, 0x727e, 0x080c,
+ 0x0dc3, 0x2061, 0x1800, 0x6030, 0xc09d, 0x6032, 0x080c, 0x5e72,
+ 0x00ce, 0x0005, 0x2001, 0x1800, 0x2004, 0x908e, 0x0000, 0x0904,
+ 0x3499, 0x00c6, 0x7884, 0x9005, 0x0190, 0x7888, 0x2061, 0x1978,
+ 0x2c0c, 0x2062, 0x080c, 0x2ade, 0x01a8, 0x080c, 0x2ae6, 0x0190,
+ 0x080c, 0x2aee, 0x0178, 0x2162, 0x00ce, 0x0804, 0x349c, 0x2061,
+ 0x0100, 0x6038, 0x9086, 0x0007, 0x1118, 0x2009, 0x0001, 0x0010,
+ 0x2009, 0x0000, 0x7884, 0x9086, 0x0002, 0x1568, 0x2061, 0x0100,
+ 0x6028, 0xc09c, 0x602a, 0x0026, 0x2011, 0x0003, 0x080c, 0x9ca7,
+ 0x2011, 0x0002, 0x080c, 0x9cb1, 0x002e, 0x080c, 0x9bbf, 0x0036,
+ 0x901e, 0x080c, 0x9c35, 0x003e, 0x60e3, 0x0000, 0x080c, 0xe0c9,
+ 0x080c, 0xe100, 0x9085, 0x0001, 0x080c, 0x7395, 0x9006, 0x080c,
+ 0x2bce, 0x2001, 0x1800, 0x2003, 0x0004, 0x2001, 0x1984, 0x2003,
+ 0x0000, 0x6027, 0x0008, 0x00ce, 0x0804, 0x3467, 0x81ff, 0x0120,
+ 0x2009, 0x0001, 0x0804, 0x3499, 0x080c, 0x5678, 0x0120, 0x2009,
+ 0x0007, 0x0804, 0x3499, 0x7984, 0x7ea8, 0x96b4, 0x00ff, 0x080c,
+ 0x64fc, 0x1904, 0x349c, 0x9186, 0x007f, 0x0138, 0x080c, 0x686d,
+ 0x0120, 0x2009, 0x0009, 0x0804, 0x3499, 0x080c, 0x4b11, 0x1120,
+ 0x2009, 0x0002, 0x0804, 0x3499, 0xa86b, 0x0000, 0xa86c, 0xc0fd,
+ 0xa86e, 0x080c, 0xc3b1, 0x1120, 0x2009, 0x0003, 0x0804, 0x3499,
+ 0x7007, 0x0003, 0x701f, 0x559d, 0x0005, 0xa830, 0x9086, 0x0100,
+ 0x1120, 0x2009, 0x0004, 0x0804, 0x3499, 0xa8e4, 0xa86a, 0xa834,
+ 0x8007, 0x800c, 0xa85c, 0x9080, 0x000c, 0x7a8c, 0x7b88, 0x7c9c,
+ 0x7d98, 0xaf60, 0x0804, 0x4b59, 0xa89c, 0x9086, 0x000d, 0x1904,
+ 0x3499, 0x2021, 0x4005, 0x0126, 0x2091, 0x8000, 0x0e04, 0x55c1,
+ 0x0010, 0x012e, 0x0cc0, 0x7c36, 0x9486, 0x4000, 0x0118, 0x7833,
+ 0x0011, 0x0010, 0x7833, 0x0010, 0x7883, 0x4005, 0xa99c, 0x7986,
+ 0xa9a8, 0x799a, 0xa9ac, 0x799e, 0x080c, 0x4b49, 0x2091, 0x4080,
+ 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x11a9, 0x7007, 0x0001,
+ 0x2091, 0x5000, 0x700f, 0x0000, 0x012e, 0x0005, 0x0126, 0x2091,
+ 0x8000, 0x00c6, 0x2061, 0x19d7, 0x7984, 0x615a, 0x6156, 0x605f,
+ 0x0000, 0x6053, 0x0009, 0x7898, 0x6072, 0x789c, 0x606e, 0x7888,
+ 0x606a, 0x788c, 0x6066, 0x2001, 0x19e7, 0x2044, 0x2001, 0x19ee,
+ 0xa07a, 0xa060, 0xa076, 0xa07f, 0x0001, 0xa083, 0x0002, 0xa06f,
+ 0x0000, 0xa0a3, 0x0000, 0x00ce, 0x012e, 0x0804, 0x3467, 0x0126,
+ 0x2091, 0x8000, 0x00b6, 0x00c6, 0x90e4, 0xc000, 0x0168, 0x0006,
+ 0xd0d4, 0x0130, 0x0036, 0x2019, 0x0029, 0x080c, 0x321c, 0x003e,
+ 0x080c, 0xc21a, 0x000e, 0x1198, 0xd0e4, 0x0160, 0x9180, 0x1000,
+ 0x2004, 0x905d, 0x0160, 0x080c, 0x5fcd, 0x080c, 0xa307, 0x0110,
+ 0xb817, 0x0000, 0x9006, 0x00ce, 0x00be, 0x012e, 0x0005, 0x9085,
+ 0x0001, 0x0cc8, 0x0126, 0x2091, 0x8000, 0x0156, 0x2010, 0x900e,
+ 0x20a9, 0x0800, 0x0016, 0x9180, 0x1000, 0x2004, 0x9005, 0x0188,
+ 0x9186, 0x007e, 0x0170, 0x9186, 0x007f, 0x0158, 0x9186, 0x0080,
+ 0x0178, 0x9186, 0x00ff, 0x0128, 0x0026, 0x2200, 0x080c, 0x560f,
+ 0x002e, 0x001e, 0x8108, 0x1f04, 0x5642, 0x015e, 0x012e, 0x0005,
+ 0x080c, 0xc8ce, 0x0db0, 0x0c80, 0x2001, 0x185f, 0x2004, 0x0005,
+ 0x2001, 0x187e, 0x2004, 0x0005, 0x0006, 0x2001, 0x1810, 0x2004,
+ 0xd0d4, 0x000e, 0x0005, 0x2001, 0x180e, 0x2004, 0xd0b4, 0x0005,
+ 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x0005, 0x79a4, 0x81ff,
+ 0x0904, 0x349c, 0x9182, 0x0081, 0x1a04, 0x349c, 0x810c, 0x0016,
+ 0x080c, 0x4b11, 0x0170, 0x080c, 0x0f15, 0x2100, 0x2238, 0x7d84,
+ 0x7c88, 0x7b8c, 0x7a90, 0x001e, 0x080c, 0x4b56, 0x701f, 0x569e,
+ 0x0005, 0x001e, 0x2009, 0x0002, 0x0804, 0x3499, 0x2079, 0x0000,
+ 0x7d94, 0x7c98, 0x7ba8, 0x7aac, 0x79a4, 0x810c, 0x2061, 0x18b9,
+ 0x2c44, 0xa774, 0xa078, 0x2071, 0x189f, 0x080c, 0x4b59, 0x701f,
+ 0x56b2, 0x0005, 0x2061, 0x18b9, 0x2c44, 0x0016, 0x0026, 0xa274,
+ 0xa178, 0x080c, 0x0f1d, 0x002e, 0x001e, 0x080c, 0x0fca, 0x9006,
+ 0xa802, 0xa806, 0x0804, 0x3467, 0x0126, 0x0156, 0x0136, 0x0146,
+ 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2061, 0x0100,
+ 0x2069, 0x0200, 0x2071, 0x1800, 0x6044, 0xd0a4, 0x11e8, 0xd084,
+ 0x0118, 0x080c, 0x5872, 0x0068, 0xd08c, 0x0118, 0x080c, 0x577b,
+ 0x0040, 0xd094, 0x0118, 0x080c, 0x574b, 0x0018, 0xd09c, 0x0108,
+ 0x0099, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x01de, 0x01ce, 0x014e,
+ 0x013e, 0x015e, 0x012e, 0x0005, 0x0016, 0x6128, 0xd19c, 0x1110,
+ 0xc19d, 0x612a, 0x001e, 0x0c68, 0x7030, 0xd09c, 0x1120, 0x6004,
+ 0x9085, 0x0002, 0x6006, 0x7094, 0x9005, 0x0120, 0x7097, 0x0000,
+ 0x708f, 0x0000, 0x624c, 0x9286, 0xf0f0, 0x1150, 0x6048, 0x9086,
+ 0xf0f0, 0x0130, 0x624a, 0x6043, 0x0090, 0x6043, 0x0010, 0x0490,
+ 0x9294, 0xff00, 0x9296, 0xf700, 0x0178, 0x7138, 0xd1a4, 0x1160,
+ 0x6240, 0x9295, 0x0100, 0x6242, 0x9294, 0x0010, 0x0128, 0x2009,
+ 0x00f7, 0x080c, 0x5f2f, 0x00f0, 0x6040, 0x9084, 0x0010, 0x9085,
+ 0x0140, 0x6042, 0x6043, 0x0000, 0x7083, 0x0000, 0x709f, 0x0001,
+ 0x70c3, 0x0000, 0x70db, 0x0000, 0x2009, 0x1c80, 0x200b, 0x0000,
+ 0x7093, 0x0000, 0x7087, 0x000f, 0x2009, 0x000f, 0x2011, 0x5e15,
+ 0x080c, 0x859e, 0x0005, 0x2001, 0x1880, 0x2004, 0xd08c, 0x0110,
+ 0x705b, 0xffff, 0x7084, 0x9005, 0x1528, 0x2011, 0x5e15, 0x080c,
+ 0x84c2, 0x6040, 0x9094, 0x0010, 0x9285, 0x0020, 0x6042, 0x20a9,
+ 0x00c8, 0x6044, 0xd08c, 0x1168, 0x1f04, 0x5761, 0x6242, 0x7097,
+ 0x0000, 0x6040, 0x9094, 0x0010, 0x9285, 0x0080, 0x6042, 0x6242,
+ 0x0048, 0x6242, 0x7097, 0x0000, 0x708b, 0x0000, 0x9006, 0x080c,
+ 0x5fb8, 0x0000, 0x0005, 0x7088, 0x908a, 0x0003, 0x1a0c, 0x0dc3,
+ 0x000b, 0x0005, 0x5785, 0x57d6, 0x5871, 0x00f6, 0x0016, 0x6900,
+ 0x918c, 0x0800, 0x708b, 0x0001, 0x2001, 0x015d, 0x2003, 0x0000,
+ 0x6803, 0x00fc, 0x20a9, 0x0004, 0x6800, 0x9084, 0x00fc, 0x0120,
+ 0x1f04, 0x5794, 0x080c, 0x0dc3, 0x68a0, 0x68a2, 0x689c, 0x689e,
+ 0x6898, 0x689a, 0xa001, 0x918d, 0x1600, 0x6902, 0x001e, 0x6837,
+ 0x0020, 0x080c, 0x5f94, 0x2079, 0x1c00, 0x7833, 0x1101, 0x7837,
+ 0x0000, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0001, 0x20a1,
+ 0x1c0e, 0x20a9, 0x0004, 0x4003, 0x080c, 0xa190, 0x20e1, 0x0001,
+ 0x2099, 0x1c00, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x0014,
+ 0x4003, 0x60c3, 0x000c, 0x600f, 0x0000, 0x080c, 0x5e46, 0x00fe,
+ 0x9006, 0x708e, 0x6043, 0x0008, 0x6042, 0x0005, 0x00f6, 0x708c,
+ 0x708f, 0x0000, 0x9025, 0x0904, 0x584e, 0x6020, 0xd0b4, 0x1904,
+ 0x584c, 0x719c, 0x81ff, 0x0904, 0x583a, 0x9486, 0x000c, 0x1904,
+ 0x5847, 0x9480, 0x0018, 0x8004, 0x20a8, 0x080c, 0x5f8d, 0x2011,
+ 0x0260, 0x2019, 0x1c00, 0x220c, 0x2304, 0x9106, 0x11e8, 0x8210,
+ 0x8318, 0x1f04, 0x57f3, 0x6043, 0x0004, 0x2061, 0x0140, 0x605b,
+ 0xbc94, 0x605f, 0xf0f0, 0x2061, 0x0100, 0x6043, 0x0006, 0x708b,
+ 0x0002, 0x7097, 0x0002, 0x2009, 0x07d0, 0x2011, 0x5e1c, 0x080c,
+ 0x859e, 0x080c, 0x5f94, 0x04c0, 0x080c, 0x5f8d, 0x2079, 0x0260,
+ 0x7930, 0x918e, 0x1101, 0x1558, 0x7834, 0x9005, 0x1540, 0x7900,
+ 0x918c, 0x00ff, 0x1118, 0x7804, 0x9005, 0x0190, 0x080c, 0x5f8d,
+ 0x2011, 0x026e, 0x2019, 0x1805, 0x20a9, 0x0004, 0x220c, 0x2304,
+ 0x9102, 0x0230, 0x11a0, 0x8210, 0x8318, 0x1f04, 0x582e, 0x0078,
+ 0x709f, 0x0000, 0x080c, 0x5f8d, 0x20e1, 0x0000, 0x2099, 0x0260,
+ 0x20e9, 0x0001, 0x20a1, 0x1c00, 0x20a9, 0x0014, 0x4003, 0x6043,
+ 0x0008, 0x6043, 0x0000, 0x0010, 0x00fe, 0x0005, 0x6040, 0x9085,
+ 0x0100, 0x6042, 0x6020, 0xd0b4, 0x1db8, 0x080c, 0xa190, 0x20e1,
+ 0x0001, 0x2099, 0x1c00, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9,
+ 0x0014, 0x4003, 0x60c3, 0x000c, 0x2011, 0x19ce, 0x2013, 0x0000,
+ 0x708f, 0x0000, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0x98c8,
+ 0x08d8, 0x0005, 0x7094, 0x908a, 0x001d, 0x1a0c, 0x0dc3, 0x000b,
+ 0x0005, 0x58a3, 0x58b6, 0x58df, 0x58ff, 0x5925, 0x5954, 0x597a,
+ 0x59b2, 0x59d8, 0x5a06, 0x5a41, 0x5a79, 0x5a97, 0x5ac2, 0x5ae4,
+ 0x5aff, 0x5b09, 0x5b3d, 0x5b63, 0x5b92, 0x5bb8, 0x5bf0, 0x5c34,
+ 0x5c71, 0x5c92, 0x5ceb, 0x5d0d, 0x5d3b, 0x5d3b, 0x00c6, 0x2061,
+ 0x1800, 0x6003, 0x0007, 0x2061, 0x0100, 0x6004, 0x9084, 0xfff9,
+ 0x6006, 0x00ce, 0x0005, 0x2061, 0x0140, 0x605b, 0xbc94, 0x605f,
+ 0xf0f0, 0x2061, 0x0100, 0x6043, 0x0002, 0x7097, 0x0001, 0x2009,
+ 0x07d0, 0x2011, 0x5e1c, 0x080c, 0x859e, 0x0005, 0x00f6, 0x708c,
+ 0x9086, 0x0014, 0x1510, 0x6042, 0x6020, 0xd0b4, 0x11f0, 0x080c,
+ 0x5f8d, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1102, 0x11a0, 0x7834,
+ 0x9005, 0x1188, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110,
+ 0x70c3, 0x0001, 0x2011, 0x5e1c, 0x080c, 0x84c2, 0x7097, 0x0010,
+ 0x080c, 0x5b09, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x00f6,
+ 0x7097, 0x0003, 0x6043, 0x0004, 0x2011, 0x5e1c, 0x080c, 0x84c2,
+ 0x080c, 0x5f11, 0x2079, 0x0240, 0x7833, 0x1102, 0x7837, 0x0000,
+ 0x20a9, 0x0008, 0x9f88, 0x000e, 0x200b, 0x0000, 0x8108, 0x1f04,
+ 0x58f4, 0x60c3, 0x0014, 0x080c, 0x5e46, 0x00fe, 0x0005, 0x00f6,
+ 0x708c, 0x9005, 0x0500, 0x2011, 0x5e1c, 0x080c, 0x84c2, 0x9086,
+ 0x0014, 0x11b8, 0x080c, 0x5f8d, 0x2079, 0x0260, 0x7a30, 0x9296,
+ 0x1102, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128,
+ 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, 0x0004, 0x0029,
+ 0x0010, 0x080c, 0x5f69, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0005,
+ 0x080c, 0x5f11, 0x2079, 0x0240, 0x7833, 0x1103, 0x7837, 0x0000,
+ 0x080c, 0x5f8d, 0x080c, 0x5f70, 0x1170, 0x7080, 0x9005, 0x1158,
+ 0x7158, 0x9186, 0xffff, 0x0138, 0x2011, 0x0008, 0x080c, 0x5dc9,
+ 0x0168, 0x080c, 0x5f46, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099,
+ 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014,
+ 0x080c, 0x5e46, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500,
+ 0x2011, 0x5e1c, 0x080c, 0x84c2, 0x9086, 0x0014, 0x11b8, 0x080c,
+ 0x5f8d, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1103, 0x1178, 0x7834,
+ 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110,
+ 0x70c3, 0x0001, 0x7097, 0x0006, 0x0029, 0x0010, 0x080c, 0x5f69,
+ 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0007, 0x080c, 0x5f11, 0x2079,
+ 0x0240, 0x7833, 0x1104, 0x7837, 0x0000, 0x080c, 0x5f8d, 0x080c,
+ 0x5f70, 0x11b8, 0x7080, 0x9005, 0x11a0, 0x7160, 0x9186, 0xffff,
+ 0x0180, 0x9180, 0x3268, 0x200d, 0x918c, 0xff00, 0x810f, 0x2011,
+ 0x0008, 0x080c, 0x5dc9, 0x0180, 0x080c, 0x4f5a, 0x0110, 0x080c,
+ 0x2771, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9,
+ 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5e46,
+ 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5e1c,
+ 0x080c, 0x84c2, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5f8d, 0x2079,
+ 0x0260, 0x7a30, 0x9296, 0x1104, 0x1178, 0x7834, 0x9005, 0x1160,
0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001,
- 0x7097, 0x0004, 0x0029, 0x0010, 0x080c, 0x5eac, 0x00fe, 0x0005,
- 0x00f6, 0x7097, 0x0005, 0x080c, 0x5e54, 0x2079, 0x0240, 0x7833,
- 0x1103, 0x7837, 0x0000, 0x080c, 0x5ed0, 0x080c, 0x5eb3, 0x1170,
- 0x7080, 0x9005, 0x1158, 0x7158, 0x9186, 0xffff, 0x0138, 0x2011,
- 0x0008, 0x080c, 0x5d0c, 0x0168, 0x080c, 0x5e89, 0x20a9, 0x0008,
- 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e,
- 0x4003, 0x60c3, 0x0014, 0x080c, 0x5d89, 0x00fe, 0x0005, 0x00f6,
- 0x708c, 0x9005, 0x0500, 0x2011, 0x5d5f, 0x080c, 0x835e, 0x9086,
- 0x0014, 0x11b8, 0x080c, 0x5ed0, 0x2079, 0x0260, 0x7a30, 0x9296,
- 0x1103, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128,
- 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, 0x0006, 0x0029,
- 0x0010, 0x080c, 0x5eac, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0007,
- 0x080c, 0x5e54, 0x2079, 0x0240, 0x7833, 0x1104, 0x7837, 0x0000,
- 0x080c, 0x5ed0, 0x080c, 0x5eb3, 0x11b8, 0x7080, 0x9005, 0x11a0,
- 0x7160, 0x9186, 0xffff, 0x0180, 0x9180, 0x31cc, 0x200d, 0x918c,
- 0xff00, 0x810f, 0x2011, 0x0008, 0x080c, 0x5d0c, 0x0180, 0x080c,
- 0x4e9d, 0x0110, 0x080c, 0x2708, 0x20a9, 0x0008, 0x20e1, 0x0000,
- 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3,
- 0x0014, 0x080c, 0x5d89, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005,
- 0x0500, 0x2011, 0x5d5f, 0x080c, 0x835e, 0x9086, 0x0014, 0x11b8,
- 0x080c, 0x5ed0, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1104, 0x1178,
- 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005,
- 0x1110, 0x70c3, 0x0001, 0x7097, 0x0008, 0x0029, 0x0010, 0x080c,
- 0x5eac, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0009, 0x080c, 0x5e54,
- 0x2079, 0x0240, 0x7833, 0x1105, 0x7837, 0x0100, 0x080c, 0x5eb3,
- 0x1150, 0x7080, 0x9005, 0x1138, 0x080c, 0x5c7f, 0x1188, 0x9085,
- 0x0001, 0x080c, 0x2708, 0x20a9, 0x0008, 0x080c, 0x5ed0, 0x20e1,
- 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003,
- 0x60c3, 0x0014, 0x080c, 0x5d89, 0x0010, 0x080c, 0x57d9, 0x00fe,
- 0x0005, 0x00f6, 0x708c, 0x9005, 0x05a8, 0x2011, 0x5d5f, 0x080c,
- 0x835e, 0x9086, 0x0014, 0x1560, 0x080c, 0x5ed0, 0x2079, 0x0260,
- 0x7a30, 0x9296, 0x1105, 0x1520, 0x7834, 0x9084, 0x0100, 0x2011,
- 0x0100, 0x921e, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005,
- 0x1110, 0x70c3, 0x0001, 0x7097, 0x000a, 0x00b1, 0x0098, 0x9005,
- 0x1178, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3,
- 0x0001, 0x7093, 0x0000, 0x7097, 0x000e, 0x080c, 0x5a27, 0x0010,
- 0x080c, 0x5eac, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x000b, 0x2011,
- 0x1c0e, 0x20e9, 0x0001, 0x22a0, 0x20a9, 0x0040, 0x2019, 0xffff,
- 0x4304, 0x080c, 0x5e54, 0x2079, 0x0240, 0x7833, 0x1106, 0x7837,
- 0x0000, 0x080c, 0x5eb3, 0x0118, 0x2013, 0x0000, 0x0020, 0x705c,
- 0x9085, 0x0100, 0x2012, 0x20a9, 0x0040, 0x2009, 0x024e, 0x2011,
- 0x1c0e, 0x220e, 0x8210, 0x8108, 0x9186, 0x0260, 0x1128, 0x6810,
- 0x8000, 0x6812, 0x2009, 0x0240, 0x1f04, 0x59a9, 0x60c3, 0x0084,
- 0x080c, 0x5d89, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x01c0,
- 0x2011, 0x5d5f, 0x080c, 0x835e, 0x9086, 0x0084, 0x1178, 0x080c,
- 0x5ed0, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1106, 0x1138, 0x7834,
- 0x9005, 0x1120, 0x7097, 0x000c, 0x0029, 0x0010, 0x080c, 0x5eac,
- 0x00fe, 0x0005, 0x00f6, 0x7097, 0x000d, 0x080c, 0x5e54, 0x2079,
- 0x0240, 0x7833, 0x1107, 0x7837, 0x0000, 0x080c, 0x5ed0, 0x20a9,
- 0x0040, 0x2011, 0x026e, 0x2009, 0x024e, 0x220e, 0x8210, 0x8108,
- 0x9186, 0x0260, 0x1150, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240,
- 0x6814, 0x8000, 0x6816, 0x2011, 0x0260, 0x1f04, 0x59ed, 0x60c3,
- 0x0084, 0x080c, 0x5d89, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005,
- 0x01e0, 0x2011, 0x5d5f, 0x080c, 0x835e, 0x9086, 0x0084, 0x1198,
- 0x080c, 0x5ed0, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1107, 0x1158,
- 0x7834, 0x9005, 0x1140, 0x7093, 0x0001, 0x080c, 0x5e26, 0x7097,
- 0x000e, 0x0029, 0x0010, 0x080c, 0x5eac, 0x00fe, 0x0005, 0x918d,
- 0x0001, 0x080c, 0x5efb, 0x7097, 0x000f, 0x708f, 0x0000, 0x2061,
- 0x0140, 0x605b, 0xbc85, 0x605f, 0xb5b5, 0x2061, 0x0100, 0x6043,
- 0x0005, 0x6043, 0x0004, 0x2009, 0x07d0, 0x2011, 0x5d5f, 0x080c,
- 0x8352, 0x0005, 0x708c, 0x9005, 0x0130, 0x2011, 0x5d5f, 0x080c,
- 0x835e, 0x7097, 0x0000, 0x0005, 0x7097, 0x0011, 0x080c, 0x9d0b,
- 0x080c, 0x5ed0, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000,
- 0x20a1, 0x0240, 0x748c, 0x9480, 0x0018, 0x9080, 0x0007, 0x9084,
- 0x03f8, 0x8004, 0x20a8, 0x4003, 0x080c, 0x5eb3, 0x11a0, 0x7178,
- 0x81ff, 0x0188, 0x900e, 0x707c, 0x9084, 0x00ff, 0x0160, 0x080c,
- 0x269f, 0x9186, 0x007e, 0x0138, 0x9186, 0x0080, 0x0120, 0x2011,
- 0x0008, 0x080c, 0x5d0c, 0x60c3, 0x0014, 0x080c, 0x5d89, 0x0005,
- 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5d5f, 0x080c, 0x835e,
- 0x9086, 0x0014, 0x11b8, 0x080c, 0x5ed0, 0x2079, 0x0260, 0x7a30,
- 0x9296, 0x1103, 0x1178, 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc,
- 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7097, 0x0012,
- 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7097,
- 0x0013, 0x080c, 0x5e62, 0x2079, 0x0240, 0x7833, 0x1103, 0x7837,
- 0x0000, 0x080c, 0x5ed0, 0x080c, 0x5eb3, 0x1170, 0x7080, 0x9005,
- 0x1158, 0x7158, 0x9186, 0xffff, 0x0138, 0x2011, 0x0008, 0x080c,
- 0x5d0c, 0x0168, 0x080c, 0x5e89, 0x20a9, 0x0008, 0x20e1, 0x0000,
- 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3,
- 0x0014, 0x080c, 0x5d89, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005,
- 0x0500, 0x2011, 0x5d5f, 0x080c, 0x835e, 0x9086, 0x0014, 0x11b8,
- 0x080c, 0x5ed0, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1104, 0x1178,
- 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005,
- 0x1110, 0x70c3, 0x0001, 0x7097, 0x0014, 0x0029, 0x0010, 0x708f,
- 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0015, 0x080c, 0x5e62,
- 0x2079, 0x0240, 0x7833, 0x1104, 0x7837, 0x0000, 0x080c, 0x5ed0,
- 0x080c, 0x5eb3, 0x11b8, 0x7080, 0x9005, 0x11a0, 0x7160, 0x9186,
- 0xffff, 0x0180, 0x9180, 0x31cc, 0x200d, 0x918c, 0xff00, 0x810f,
- 0x2011, 0x0008, 0x080c, 0x5d0c, 0x0180, 0x080c, 0x4e9d, 0x0110,
- 0x080c, 0x2708, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e,
+ 0x7097, 0x0008, 0x0029, 0x0010, 0x080c, 0x5f69, 0x00fe, 0x0005,
+ 0x00f6, 0x7097, 0x0009, 0x080c, 0x5f11, 0x2079, 0x0240, 0x7833,
+ 0x1105, 0x7837, 0x0100, 0x080c, 0x5f70, 0x1150, 0x7080, 0x9005,
+ 0x1138, 0x080c, 0x5d3c, 0x1188, 0x9085, 0x0001, 0x080c, 0x2771,
+ 0x20a9, 0x0008, 0x080c, 0x5f8d, 0x20e1, 0x0000, 0x2099, 0x026e,
0x20e9, 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c,
- 0x5d89, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x05f0, 0x2011,
- 0x5d5f, 0x080c, 0x835e, 0x9086, 0x0014, 0x15a8, 0x080c, 0x5ed0,
- 0x2079, 0x0260, 0x7a30, 0x9296, 0x1105, 0x1568, 0x7834, 0x9084,
- 0x0100, 0x2011, 0x0100, 0x921e, 0x1168, 0x9085, 0x0001, 0x080c,
- 0x5efb, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3,
- 0x0001, 0x0080, 0x9005, 0x11b8, 0x7a38, 0xd2fc, 0x0128, 0x70c0,
- 0x9005, 0x1110, 0x70c3, 0x0001, 0x9085, 0x0001, 0x080c, 0x5efb,
- 0x7093, 0x0000, 0x7a38, 0xd2f4, 0x0110, 0x70db, 0x0008, 0x7097,
- 0x0016, 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x080c,
- 0x9d0b, 0x080c, 0x5ed0, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9,
- 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000e, 0x4003, 0x2011, 0x026d,
- 0x2204, 0x9084, 0x0100, 0x2011, 0x024d, 0x2012, 0x2011, 0x026e,
- 0x7097, 0x0017, 0x080c, 0x5eb3, 0x1150, 0x7080, 0x9005, 0x1138,
- 0x080c, 0x5c7f, 0x1188, 0x9085, 0x0001, 0x080c, 0x2708, 0x20a9,
- 0x0008, 0x080c, 0x5ed0, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9,
- 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5d89,
- 0x0010, 0x080c, 0x57d9, 0x0005, 0x00f6, 0x708c, 0x9005, 0x01d8,
- 0x2011, 0x5d5f, 0x080c, 0x835e, 0x9086, 0x0084, 0x1190, 0x080c,
- 0x5ed0, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1106, 0x1150, 0x7834,
- 0x9005, 0x1138, 0x9006, 0x080c, 0x5efb, 0x7097, 0x0018, 0x0029,
- 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0019,
- 0x080c, 0x5e62, 0x2079, 0x0240, 0x7833, 0x1106, 0x7837, 0x0000,
- 0x080c, 0x5ed0, 0x2009, 0x026e, 0x2039, 0x1c0e, 0x20a9, 0x0040,
- 0x213e, 0x8738, 0x8108, 0x9186, 0x0280, 0x1128, 0x6814, 0x8000,
- 0x6816, 0x2009, 0x0260, 0x1f04, 0x5be8, 0x2039, 0x1c0e, 0x080c,
- 0x5eb3, 0x11e8, 0x2728, 0x2514, 0x8207, 0x9084, 0x00ff, 0x8000,
- 0x2018, 0x9294, 0x00ff, 0x8007, 0x9205, 0x202a, 0x705c, 0x2310,
- 0x8214, 0x92a0, 0x1c0e, 0x2414, 0x938c, 0x0001, 0x0118, 0x9294,
- 0xff00, 0x0018, 0x9294, 0x00ff, 0x8007, 0x9215, 0x2222, 0x20a9,
- 0x0040, 0x2009, 0x024e, 0x270e, 0x8738, 0x8108, 0x9186, 0x0260,
- 0x1128, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x1f04, 0x5c1b,
- 0x60c3, 0x0084, 0x080c, 0x5d89, 0x00fe, 0x0005, 0x00f6, 0x708c,
- 0x9005, 0x01e0, 0x2011, 0x5d5f, 0x080c, 0x835e, 0x9086, 0x0084,
- 0x1198, 0x080c, 0x5ed0, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1107,
- 0x1158, 0x7834, 0x9005, 0x1140, 0x7093, 0x0001, 0x080c, 0x5e26,
- 0x7097, 0x001a, 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005,
- 0x9085, 0x0001, 0x080c, 0x5efb, 0x7097, 0x001b, 0x080c, 0x9d0b,
- 0x080c, 0x5ed0, 0x2011, 0x0260, 0x2009, 0x0240, 0x748c, 0x9480,
- 0x0018, 0x9080, 0x0007, 0x9084, 0x03f8, 0x8004, 0x20a8, 0x220e,
- 0x8210, 0x8108, 0x9186, 0x0260, 0x1150, 0x6810, 0x8000, 0x6812,
- 0x2009, 0x0240, 0x6814, 0x8000, 0x6816, 0x2011, 0x0260, 0x1f04,
- 0x5c67, 0x60c3, 0x0084, 0x080c, 0x5d89, 0x0005, 0x0005, 0x0086,
- 0x0096, 0x2029, 0x185f, 0x252c, 0x20a9, 0x0008, 0x2041, 0x1c0e,
- 0x20e9, 0x0001, 0x28a0, 0x080c, 0x5ed0, 0x20e1, 0x0000, 0x2099,
- 0x026e, 0x4003, 0x20a9, 0x0008, 0x2011, 0x0007, 0xd5d4, 0x0108,
- 0x9016, 0x2800, 0x9200, 0x200c, 0x91a6, 0xffff, 0x1148, 0xd5d4,
- 0x0110, 0x8210, 0x0008, 0x8211, 0x1f04, 0x5c99, 0x0804, 0x5d08,
- 0x82ff, 0x1160, 0xd5d4, 0x0120, 0x91a6, 0x3fff, 0x0d90, 0x0020,
- 0x91a6, 0x3fff, 0x0904, 0x5d08, 0x918d, 0xc000, 0x20a9, 0x0010,
- 0x2019, 0x0001, 0xd5d4, 0x0110, 0x2019, 0x0010, 0x2120, 0xd5d4,
- 0x0110, 0x8423, 0x0008, 0x8424, 0x1240, 0xd5d4, 0x0110, 0x8319,
- 0x0008, 0x8318, 0x1f04, 0x5cbf, 0x04d8, 0x23a8, 0x2021, 0x0001,
- 0x8426, 0x8425, 0x1f04, 0x5cd1, 0x2328, 0x8529, 0x92be, 0x0007,
- 0x0158, 0x0006, 0x2039, 0x0007, 0x2200, 0x973a, 0x000e, 0x27a8,
- 0x95a8, 0x0010, 0x1f04, 0x5ce0, 0x755a, 0x95c8, 0x31cc, 0x292d,
- 0x95ac, 0x00ff, 0x757e, 0x6532, 0x6536, 0x0016, 0x2508, 0x080c,
- 0x26e8, 0x001e, 0x60e7, 0x0000, 0x65ea, 0x2018, 0x2304, 0x9405,
- 0x201a, 0x7083, 0x0001, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x20e1,
- 0x0001, 0x2898, 0x20a9, 0x0008, 0x4003, 0x9085, 0x0001, 0x0008,
- 0x9006, 0x009e, 0x008e, 0x0005, 0x0156, 0x01c6, 0x01d6, 0x0136,
- 0x0146, 0x22a8, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000,
- 0x2011, 0x024e, 0x22a0, 0x4003, 0x014e, 0x013e, 0x01de, 0x01ce,
- 0x015e, 0x2118, 0x9026, 0x2001, 0x0007, 0x939a, 0x0010, 0x0218,
- 0x8420, 0x8001, 0x0cd0, 0x2118, 0x84ff, 0x0120, 0x939a, 0x0010,
- 0x8421, 0x1de0, 0x2021, 0x0001, 0x83ff, 0x0118, 0x8423, 0x8319,
- 0x1de8, 0x9238, 0x2029, 0x026e, 0x9528, 0x2504, 0x942c, 0x11b8,
- 0x9405, 0x203a, 0x715a, 0x91a0, 0x31cc, 0x242d, 0x95ac, 0x00ff,
- 0x757e, 0x6532, 0x6536, 0x0016, 0x2508, 0x080c, 0x26e8, 0x001e,
- 0x60e7, 0x0000, 0x65ea, 0x7083, 0x0001, 0x9084, 0x0000, 0x0005,
- 0x00e6, 0x2071, 0x1800, 0x7087, 0x0000, 0x00ee, 0x0005, 0x00e6,
- 0x00f6, 0x2079, 0x0100, 0x2071, 0x0140, 0x080c, 0x5e15, 0x080c,
- 0x9623, 0x7004, 0x9084, 0x4000, 0x0110, 0x080c, 0x2b75, 0x0126,
- 0x2091, 0x8000, 0x2071, 0x1825, 0x2073, 0x0000, 0x7840, 0x0026,
- 0x0016, 0x2009, 0x00f7, 0x080c, 0x5e72, 0x001e, 0x9094, 0x0010,
- 0x9285, 0x0080, 0x7842, 0x7a42, 0x002e, 0x012e, 0x00fe, 0x00ee,
- 0x0005, 0x0126, 0x2091, 0x8000, 0x080c, 0x29fa, 0x0228, 0x2011,
- 0x0101, 0x2204, 0xc0c5, 0x2012, 0x2011, 0x19ce, 0x2013, 0x0000,
- 0x708f, 0x0000, 0x012e, 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c,
- 0x961a, 0x6144, 0xd184, 0x0120, 0x7194, 0x918d, 0x2000, 0x0018,
- 0x7188, 0x918d, 0x1000, 0x2011, 0x1975, 0x2112, 0x2009, 0x07d0,
- 0x2011, 0x5d5f, 0x080c, 0x8432, 0x0005, 0x0016, 0x0026, 0x00c6,
- 0x0126, 0x2091, 0x8000, 0x080c, 0x9e89, 0x2009, 0x00f7, 0x080c,
- 0x5e72, 0x2061, 0x19d7, 0x900e, 0x611a, 0x611e, 0x617a, 0x617e,
- 0x2061, 0x1800, 0x6003, 0x0001, 0x2061, 0x0100, 0x6043, 0x0090,
- 0x6043, 0x0010, 0x2009, 0x1975, 0x200b, 0x0000, 0x2009, 0x002d,
- 0x2011, 0x5de1, 0x080c, 0x8352, 0x012e, 0x00ce, 0x002e, 0x001e,
- 0x0005, 0x00e6, 0x0006, 0x0126, 0x2091, 0x8000, 0x0471, 0x2071,
- 0x0100, 0x080c, 0x9623, 0x2071, 0x0140, 0x7004, 0x9084, 0x4000,
- 0x0110, 0x080c, 0x2b75, 0x080c, 0x72ed, 0x0188, 0x080c, 0x7308,
- 0x1170, 0x080c, 0x75e6, 0x0016, 0x080c, 0x27b7, 0x2001, 0x194a,
- 0x2102, 0x001e, 0x080c, 0x75e1, 0x080c, 0x7212, 0x0050, 0x2009,
- 0x0001, 0x080c, 0x2a93, 0x2001, 0x0001, 0x080c, 0x264c, 0x080c,
- 0x5db5, 0x012e, 0x000e, 0x00ee, 0x0005, 0x2001, 0x180e, 0x2004,
- 0xd0bc, 0x0158, 0x0026, 0x0036, 0x2011, 0x8017, 0x2001, 0x1975,
- 0x201c, 0x080c, 0x4abd, 0x003e, 0x002e, 0x0005, 0x20a9, 0x0012,
- 0x20e9, 0x0001, 0x20a1, 0x1c80, 0x080c, 0x5ed0, 0x20e9, 0x0000,
- 0x2099, 0x026e, 0x0099, 0x20a9, 0x0020, 0x080c, 0x5eca, 0x2099,
- 0x0260, 0x20a1, 0x1c92, 0x0051, 0x20a9, 0x000e, 0x080c, 0x5ecd,
- 0x2099, 0x0260, 0x20a1, 0x1cb2, 0x0009, 0x0005, 0x0016, 0x0026,
- 0x3410, 0x3308, 0x2104, 0x8007, 0x2012, 0x8108, 0x8210, 0x1f04,
- 0x5e4a, 0x002e, 0x001e, 0x0005, 0x080c, 0x9d0b, 0x20e1, 0x0001,
- 0x2099, 0x1c00, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000c,
- 0x4003, 0x0005, 0x080c, 0x9d0b, 0x080c, 0x5ed0, 0x20e1, 0x0000,
- 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000c,
- 0x4003, 0x0005, 0x00c6, 0x0006, 0x2061, 0x0100, 0x810f, 0x2001,
- 0x1833, 0x2004, 0x9005, 0x1138, 0x2001, 0x1817, 0x2004, 0x9084,
- 0x00ff, 0x9105, 0x0010, 0x9185, 0x00f7, 0x604a, 0x000e, 0x00ce,
- 0x0005, 0x0016, 0x0046, 0x080c, 0x6742, 0x0158, 0x9006, 0x2020,
- 0x2009, 0x002a, 0x080c, 0xd156, 0x2001, 0x180c, 0x200c, 0xc195,
- 0x2102, 0x2019, 0x002a, 0x900e, 0x080c, 0x3037, 0x080c, 0xbef8,
- 0x0140, 0x0036, 0x2019, 0xffff, 0x2021, 0x0007, 0x080c, 0x4c74,
- 0x003e, 0x004e, 0x001e, 0x0005, 0x080c, 0x5db5, 0x7097, 0x0000,
- 0x708f, 0x0000, 0x0005, 0x0006, 0x2001, 0x180c, 0x2004, 0xd09c,
- 0x0100, 0x000e, 0x0005, 0x0006, 0x0016, 0x0126, 0x2091, 0x8000,
- 0x2001, 0x0101, 0x200c, 0x918d, 0x0006, 0x2102, 0x012e, 0x001e,
- 0x000e, 0x0005, 0x2009, 0x0001, 0x0020, 0x2009, 0x0002, 0x0008,
- 0x900e, 0x6814, 0x9084, 0xffc0, 0x910d, 0x6916, 0x0005, 0x00f6,
- 0x0156, 0x0146, 0x01d6, 0x9006, 0x20a9, 0x0080, 0x20e9, 0x0001,
- 0x20a1, 0x1c00, 0x4004, 0x2079, 0x1c00, 0x7803, 0x2200, 0x7807,
- 0x00ef, 0x780f, 0x00ef, 0x7813, 0x0138, 0x7823, 0xffff, 0x7827,
- 0xffff, 0x01de, 0x014e, 0x015e, 0x00fe, 0x0005, 0x2001, 0x1800,
- 0x2003, 0x0001, 0x0005, 0x2001, 0x1983, 0x0118, 0x2003, 0x0001,
- 0x0010, 0x2003, 0x0000, 0x0005, 0x0156, 0x20a9, 0x0800, 0x2009,
- 0x1000, 0x9006, 0x200a, 0x8108, 0x1f04, 0x5f0a, 0x015e, 0x0005,
- 0x00d6, 0x0036, 0x0156, 0x0136, 0x0146, 0x2069, 0x185e, 0x9006,
- 0xb802, 0xb8ba, 0xb807, 0x0707, 0xb80a, 0xb80e, 0xb812, 0x9198,
- 0x31cc, 0x231d, 0x939c, 0x00ff, 0xbb16, 0x0016, 0x0026, 0xb8ae,
- 0x080c, 0x9e82, 0x1120, 0x9192, 0x007e, 0x1208, 0xbbae, 0x20a9,
- 0x0004, 0xb8b0, 0x20e8, 0xb9b4, 0x9198, 0x0006, 0x9006, 0x23a0,
- 0x4004, 0x20a9, 0x0004, 0x9198, 0x000a, 0x23a0, 0x4004, 0x002e,
- 0x001e, 0xb83e, 0xb842, 0xb84e, 0xb852, 0xb856, 0xb85a, 0xb85e,
- 0xb862, 0xb866, 0xb86a, 0xb86f, 0x0100, 0xb872, 0xb876, 0xb87a,
- 0xb88a, 0xb88e, 0xb893, 0x0008, 0xb896, 0xb89a, 0xb89e, 0xb9a2,
- 0x0096, 0xb8a4, 0x904d, 0x190c, 0x0fb3, 0xb8a7, 0x0000, 0x009e,
- 0x9006, 0xb84a, 0x6810, 0xb83a, 0x680c, 0xb846, 0x6814, 0x9084,
- 0x00ff, 0xb842, 0x014e, 0x013e, 0x015e, 0x003e, 0x00de, 0x0005,
- 0x0126, 0x2091, 0x8000, 0xa978, 0x9182, 0x0800, 0x1a04, 0x5fe6,
- 0x2001, 0x180c, 0x2004, 0x9084, 0x0003, 0x1904, 0x5fcb, 0x9188,
- 0x1000, 0x2104, 0x905d, 0x0570, 0xb804, 0x9084, 0x00ff, 0x908e,
- 0x0006, 0x1560, 0xb8a4, 0x900d, 0x1904, 0x5fec, 0xa888, 0x908a,
- 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x800b, 0x810b, 0x9108,
- 0xa966, 0xb850, 0x900d, 0x1148, 0xa802, 0x2900, 0xb852, 0xb84e,
- 0x080c, 0x86ed, 0x9006, 0x012e, 0x0005, 0x00a6, 0x2150, 0x2900,
- 0xb002, 0xa803, 0x0000, 0x00ae, 0xb852, 0x0c90, 0x2001, 0x0005,
- 0x900e, 0x04b8, 0x2001, 0x0028, 0x900e, 0x0498, 0x9082, 0x0006,
- 0x1290, 0x080c, 0x9e82, 0x1160, 0xb8a0, 0x9084, 0xff80, 0x1140,
- 0xb900, 0xd1fc, 0x0938, 0x2001, 0x0029, 0x2009, 0x1000, 0x0408,
- 0x2001, 0x0028, 0x00a8, 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118,
- 0x2001, 0x0004, 0x0068, 0xd184, 0x0118, 0x2001, 0x0004, 0x0040,
- 0x2001, 0x0029, 0xb900, 0xd1fc, 0x0118, 0x2009, 0x1000, 0x0048,
- 0x900e, 0x0038, 0x2001, 0x0029, 0x900e, 0x0018, 0x2001, 0x0029,
- 0x900e, 0x9005, 0x012e, 0x0005, 0xae7c, 0x96b4, 0x3fff, 0x080c,
- 0x65a2, 0x0904, 0x5fae, 0x0804, 0x5f8e, 0x00b6, 0x00e6, 0x0126,
- 0x2091, 0x8000, 0xa978, 0x9182, 0x0800, 0x1a04, 0x6073, 0x9188,
- 0x1000, 0x2104, 0x905d, 0x0904, 0x604b, 0xb8a0, 0x9086, 0x007f,
- 0x0190, 0xa880, 0xd0fc, 0x1178, 0x080c, 0x674e, 0x0160, 0xa998,
+ 0x5e46, 0x0010, 0x080c, 0x5896, 0x00fe, 0x0005, 0x00f6, 0x708c,
+ 0x9005, 0x05a8, 0x2011, 0x5e1c, 0x080c, 0x84c2, 0x9086, 0x0014,
+ 0x1560, 0x080c, 0x5f8d, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1105,
+ 0x1520, 0x7834, 0x9084, 0x0100, 0x2011, 0x0100, 0x921e, 0x1160,
+ 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001,
+ 0x7097, 0x000a, 0x00b1, 0x0098, 0x9005, 0x1178, 0x7a38, 0xd2fc,
+ 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x7093, 0x0000,
+ 0x7097, 0x000e, 0x080c, 0x5ae4, 0x0010, 0x080c, 0x5f69, 0x00fe,
+ 0x0005, 0x00f6, 0x7097, 0x000b, 0x2011, 0x1c0e, 0x20e9, 0x0001,
+ 0x22a0, 0x20a9, 0x0040, 0x2019, 0xffff, 0x4304, 0x080c, 0x5f11,
+ 0x2079, 0x0240, 0x7833, 0x1106, 0x7837, 0x0000, 0x080c, 0x5f70,
+ 0x0118, 0x2013, 0x0000, 0x0020, 0x705c, 0x9085, 0x0100, 0x2012,
+ 0x20a9, 0x0040, 0x2009, 0x024e, 0x2011, 0x1c0e, 0x220e, 0x8210,
+ 0x8108, 0x9186, 0x0260, 0x1128, 0x6810, 0x8000, 0x6812, 0x2009,
+ 0x0240, 0x1f04, 0x5a66, 0x60c3, 0x0084, 0x080c, 0x5e46, 0x00fe,
+ 0x0005, 0x00f6, 0x708c, 0x9005, 0x01c0, 0x2011, 0x5e1c, 0x080c,
+ 0x84c2, 0x9086, 0x0084, 0x1178, 0x080c, 0x5f8d, 0x2079, 0x0260,
+ 0x7a30, 0x9296, 0x1106, 0x1138, 0x7834, 0x9005, 0x1120, 0x7097,
+ 0x000c, 0x0029, 0x0010, 0x080c, 0x5f69, 0x00fe, 0x0005, 0x00f6,
+ 0x7097, 0x000d, 0x080c, 0x5f11, 0x2079, 0x0240, 0x7833, 0x1107,
+ 0x7837, 0x0000, 0x080c, 0x5f8d, 0x20a9, 0x0040, 0x2011, 0x026e,
+ 0x2009, 0x024e, 0x220e, 0x8210, 0x8108, 0x9186, 0x0260, 0x1150,
+ 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x6814, 0x8000, 0x6816,
+ 0x2011, 0x0260, 0x1f04, 0x5aaa, 0x60c3, 0x0084, 0x080c, 0x5e46,
+ 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x01e0, 0x2011, 0x5e1c,
+ 0x080c, 0x84c2, 0x9086, 0x0084, 0x1198, 0x080c, 0x5f8d, 0x2079,
+ 0x0260, 0x7a30, 0x9296, 0x1107, 0x1158, 0x7834, 0x9005, 0x1140,
+ 0x7093, 0x0001, 0x080c, 0x5ee3, 0x7097, 0x000e, 0x0029, 0x0010,
+ 0x080c, 0x5f69, 0x00fe, 0x0005, 0x918d, 0x0001, 0x080c, 0x5fb8,
+ 0x7097, 0x000f, 0x708f, 0x0000, 0x2061, 0x0140, 0x605b, 0xbc85,
+ 0x605f, 0xb5b5, 0x2061, 0x0100, 0x6043, 0x0005, 0x6043, 0x0004,
+ 0x2009, 0x07d0, 0x2011, 0x5e1c, 0x080c, 0x84b6, 0x0005, 0x708c,
+ 0x9005, 0x0130, 0x2011, 0x5e1c, 0x080c, 0x84c2, 0x7097, 0x0000,
+ 0x0005, 0x7097, 0x0011, 0x080c, 0xa190, 0x080c, 0x5f8d, 0x20e1,
+ 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240, 0x748c,
+ 0x9480, 0x0018, 0x9080, 0x0007, 0x9084, 0x03f8, 0x8004, 0x20a8,
+ 0x4003, 0x080c, 0x5f70, 0x11a0, 0x7178, 0x81ff, 0x0188, 0x900e,
+ 0x707c, 0x9084, 0x00ff, 0x0160, 0x080c, 0x2708, 0x9186, 0x007e,
+ 0x0138, 0x9186, 0x0080, 0x0120, 0x2011, 0x0008, 0x080c, 0x5dc9,
+ 0x60c3, 0x0014, 0x080c, 0x5e46, 0x0005, 0x00f6, 0x708c, 0x9005,
+ 0x0500, 0x2011, 0x5e1c, 0x080c, 0x84c2, 0x9086, 0x0014, 0x11b8,
+ 0x080c, 0x5f8d, 0x2079, 0x0260, 0x7a30, 0x9296, 0x1103, 0x1178,
+ 0x7834, 0x9005, 0x1160, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005,
+ 0x1110, 0x70c3, 0x0001, 0x7097, 0x0012, 0x0029, 0x0010, 0x708f,
+ 0x0000, 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0013, 0x080c, 0x5f1f,
+ 0x2079, 0x0240, 0x7833, 0x1103, 0x7837, 0x0000, 0x080c, 0x5f8d,
+ 0x080c, 0x5f70, 0x1170, 0x7080, 0x9005, 0x1158, 0x7158, 0x9186,
+ 0xffff, 0x0138, 0x2011, 0x0008, 0x080c, 0x5dc9, 0x0168, 0x080c,
+ 0x5f46, 0x20a9, 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9,
+ 0x0000, 0x20a1, 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5e46,
+ 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x0500, 0x2011, 0x5e1c,
+ 0x080c, 0x84c2, 0x9086, 0x0014, 0x11b8, 0x080c, 0x5f8d, 0x2079,
+ 0x0260, 0x7a30, 0x9296, 0x1104, 0x1178, 0x7834, 0x9005, 0x1160,
+ 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001,
+ 0x7097, 0x0014, 0x0029, 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005,
+ 0x00f6, 0x7097, 0x0015, 0x080c, 0x5f1f, 0x2079, 0x0240, 0x7833,
+ 0x1104, 0x7837, 0x0000, 0x080c, 0x5f8d, 0x080c, 0x5f70, 0x11b8,
+ 0x7080, 0x9005, 0x11a0, 0x7160, 0x9186, 0xffff, 0x0180, 0x9180,
+ 0x3268, 0x200d, 0x918c, 0xff00, 0x810f, 0x2011, 0x0008, 0x080c,
+ 0x5dc9, 0x0180, 0x080c, 0x4f5a, 0x0110, 0x080c, 0x2771, 0x20a9,
+ 0x0008, 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1,
+ 0x024e, 0x4003, 0x60c3, 0x0014, 0x080c, 0x5e46, 0x00fe, 0x0005,
+ 0x00f6, 0x708c, 0x9005, 0x05f0, 0x2011, 0x5e1c, 0x080c, 0x84c2,
+ 0x9086, 0x0014, 0x15a8, 0x080c, 0x5f8d, 0x2079, 0x0260, 0x7a30,
+ 0x9296, 0x1105, 0x1568, 0x7834, 0x9084, 0x0100, 0x2011, 0x0100,
+ 0x921e, 0x1168, 0x9085, 0x0001, 0x080c, 0x5fb8, 0x7a38, 0xd2fc,
+ 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3, 0x0001, 0x0080, 0x9005,
+ 0x11b8, 0x7a38, 0xd2fc, 0x0128, 0x70c0, 0x9005, 0x1110, 0x70c3,
+ 0x0001, 0x9085, 0x0001, 0x080c, 0x5fb8, 0x7093, 0x0000, 0x7a38,
+ 0xd2f4, 0x0110, 0x70db, 0x0008, 0x7097, 0x0016, 0x0029, 0x0010,
+ 0x708f, 0x0000, 0x00fe, 0x0005, 0x080c, 0xa190, 0x080c, 0x5f8d,
+ 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9, 0x0000, 0x20a1, 0x0240,
+ 0x20a9, 0x000e, 0x4003, 0x2011, 0x026d, 0x2204, 0x9084, 0x0100,
+ 0x2011, 0x024d, 0x2012, 0x2011, 0x026e, 0x7097, 0x0017, 0x080c,
+ 0x5f70, 0x1150, 0x7080, 0x9005, 0x1138, 0x080c, 0x5d3c, 0x1188,
+ 0x9085, 0x0001, 0x080c, 0x2771, 0x20a9, 0x0008, 0x080c, 0x5f8d,
+ 0x20e1, 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x20a1, 0x024e,
+ 0x4003, 0x60c3, 0x0014, 0x080c, 0x5e46, 0x0010, 0x080c, 0x5896,
+ 0x0005, 0x00f6, 0x708c, 0x9005, 0x01d8, 0x2011, 0x5e1c, 0x080c,
+ 0x84c2, 0x9086, 0x0084, 0x1190, 0x080c, 0x5f8d, 0x2079, 0x0260,
+ 0x7a30, 0x9296, 0x1106, 0x1150, 0x7834, 0x9005, 0x1138, 0x9006,
+ 0x080c, 0x5fb8, 0x7097, 0x0018, 0x0029, 0x0010, 0x708f, 0x0000,
+ 0x00fe, 0x0005, 0x00f6, 0x7097, 0x0019, 0x080c, 0x5f1f, 0x2079,
+ 0x0240, 0x7833, 0x1106, 0x7837, 0x0000, 0x080c, 0x5f8d, 0x2009,
+ 0x026e, 0x2039, 0x1c0e, 0x20a9, 0x0040, 0x213e, 0x8738, 0x8108,
+ 0x9186, 0x0280, 0x1128, 0x6814, 0x8000, 0x6816, 0x2009, 0x0260,
+ 0x1f04, 0x5ca5, 0x2039, 0x1c0e, 0x080c, 0x5f70, 0x11e8, 0x2728,
+ 0x2514, 0x8207, 0x9084, 0x00ff, 0x8000, 0x2018, 0x9294, 0x00ff,
+ 0x8007, 0x9205, 0x202a, 0x705c, 0x2310, 0x8214, 0x92a0, 0x1c0e,
+ 0x2414, 0x938c, 0x0001, 0x0118, 0x9294, 0xff00, 0x0018, 0x9294,
+ 0x00ff, 0x8007, 0x9215, 0x2222, 0x20a9, 0x0040, 0x2009, 0x024e,
+ 0x270e, 0x8738, 0x8108, 0x9186, 0x0260, 0x1128, 0x6810, 0x8000,
+ 0x6812, 0x2009, 0x0240, 0x1f04, 0x5cd8, 0x60c3, 0x0084, 0x080c,
+ 0x5e46, 0x00fe, 0x0005, 0x00f6, 0x708c, 0x9005, 0x01e0, 0x2011,
+ 0x5e1c, 0x080c, 0x84c2, 0x9086, 0x0084, 0x1198, 0x080c, 0x5f8d,
+ 0x2079, 0x0260, 0x7a30, 0x9296, 0x1107, 0x1158, 0x7834, 0x9005,
+ 0x1140, 0x7093, 0x0001, 0x080c, 0x5ee3, 0x7097, 0x001a, 0x0029,
+ 0x0010, 0x708f, 0x0000, 0x00fe, 0x0005, 0x9085, 0x0001, 0x080c,
+ 0x5fb8, 0x7097, 0x001b, 0x080c, 0xa190, 0x080c, 0x5f8d, 0x2011,
+ 0x0260, 0x2009, 0x0240, 0x748c, 0x9480, 0x0018, 0x9080, 0x0007,
+ 0x9084, 0x03f8, 0x8004, 0x20a8, 0x220e, 0x8210, 0x8108, 0x9186,
+ 0x0260, 0x1150, 0x6810, 0x8000, 0x6812, 0x2009, 0x0240, 0x6814,
+ 0x8000, 0x6816, 0x2011, 0x0260, 0x1f04, 0x5d24, 0x60c3, 0x0084,
+ 0x080c, 0x5e46, 0x0005, 0x0005, 0x0086, 0x0096, 0x2029, 0x185f,
+ 0x252c, 0x20a9, 0x0008, 0x2041, 0x1c0e, 0x20e9, 0x0001, 0x28a0,
+ 0x080c, 0x5f8d, 0x20e1, 0x0000, 0x2099, 0x026e, 0x4003, 0x20a9,
+ 0x0008, 0x2011, 0x0007, 0xd5d4, 0x0108, 0x9016, 0x2800, 0x9200,
+ 0x200c, 0x91a6, 0xffff, 0x1148, 0xd5d4, 0x0110, 0x8210, 0x0008,
+ 0x8211, 0x1f04, 0x5d56, 0x0804, 0x5dc5, 0x82ff, 0x1160, 0xd5d4,
+ 0x0120, 0x91a6, 0x3fff, 0x0d90, 0x0020, 0x91a6, 0x3fff, 0x0904,
+ 0x5dc5, 0x918d, 0xc000, 0x20a9, 0x0010, 0x2019, 0x0001, 0xd5d4,
+ 0x0110, 0x2019, 0x0010, 0x2120, 0xd5d4, 0x0110, 0x8423, 0x0008,
+ 0x8424, 0x1240, 0xd5d4, 0x0110, 0x8319, 0x0008, 0x8318, 0x1f04,
+ 0x5d7c, 0x04d8, 0x23a8, 0x2021, 0x0001, 0x8426, 0x8425, 0x1f04,
+ 0x5d8e, 0x2328, 0x8529, 0x92be, 0x0007, 0x0158, 0x0006, 0x2039,
+ 0x0007, 0x2200, 0x973a, 0x000e, 0x27a8, 0x95a8, 0x0010, 0x1f04,
+ 0x5d9d, 0x755a, 0x95c8, 0x3268, 0x292d, 0x95ac, 0x00ff, 0x757e,
+ 0x6532, 0x6536, 0x0016, 0x2508, 0x080c, 0x2751, 0x001e, 0x60e7,
+ 0x0000, 0x65ea, 0x2018, 0x2304, 0x9405, 0x201a, 0x7083, 0x0001,
+ 0x20e9, 0x0000, 0x20a1, 0x024e, 0x20e1, 0x0001, 0x2898, 0x20a9,
+ 0x0008, 0x4003, 0x9085, 0x0001, 0x0008, 0x9006, 0x009e, 0x008e,
+ 0x0005, 0x0156, 0x01c6, 0x01d6, 0x0136, 0x0146, 0x22a8, 0x20e1,
+ 0x0000, 0x2099, 0x026e, 0x20e9, 0x0000, 0x2011, 0x024e, 0x22a0,
+ 0x4003, 0x014e, 0x013e, 0x01de, 0x01ce, 0x015e, 0x2118, 0x9026,
+ 0x2001, 0x0007, 0x939a, 0x0010, 0x0218, 0x8420, 0x8001, 0x0cd0,
+ 0x2118, 0x84ff, 0x0120, 0x939a, 0x0010, 0x8421, 0x1de0, 0x2021,
+ 0x0001, 0x83ff, 0x0118, 0x8423, 0x8319, 0x1de8, 0x9238, 0x2029,
+ 0x026e, 0x9528, 0x2504, 0x942c, 0x11b8, 0x9405, 0x203a, 0x715a,
+ 0x91a0, 0x3268, 0x242d, 0x95ac, 0x00ff, 0x757e, 0x6532, 0x6536,
+ 0x0016, 0x2508, 0x080c, 0x2751, 0x001e, 0x60e7, 0x0000, 0x65ea,
+ 0x7083, 0x0001, 0x9084, 0x0000, 0x0005, 0x00e6, 0x2071, 0x1800,
+ 0x7087, 0x0000, 0x00ee, 0x0005, 0x00e6, 0x00f6, 0x2079, 0x0100,
+ 0x2071, 0x0140, 0x080c, 0x5ed2, 0x080c, 0x98d1, 0x7004, 0x9084,
+ 0x4000, 0x0110, 0x080c, 0x2bde, 0x0126, 0x2091, 0x8000, 0x2071,
+ 0x1825, 0x2073, 0x0000, 0x7840, 0x0026, 0x0016, 0x2009, 0x00f7,
+ 0x080c, 0x5f2f, 0x001e, 0x9094, 0x0010, 0x9285, 0x0080, 0x7842,
+ 0x7a42, 0x002e, 0x012e, 0x00fe, 0x00ee, 0x0005, 0x0126, 0x2091,
+ 0x8000, 0x080c, 0x2a63, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5,
+ 0x2012, 0x2011, 0x19ce, 0x2013, 0x0000, 0x708f, 0x0000, 0x012e,
+ 0x60a3, 0x0056, 0x60a7, 0x9575, 0x080c, 0x98c8, 0x6144, 0xd184,
+ 0x0120, 0x7194, 0x918d, 0x2000, 0x0018, 0x7188, 0x918d, 0x1000,
+ 0x2011, 0x1975, 0x2112, 0x2009, 0x07d0, 0x2011, 0x5e1c, 0x080c,
+ 0x859e, 0x0005, 0x0016, 0x0026, 0x00c6, 0x0126, 0x2091, 0x8000,
+ 0x080c, 0xa30e, 0x2009, 0x00f7, 0x080c, 0x5f2f, 0x2061, 0x19d7,
+ 0x900e, 0x611a, 0x611e, 0x617a, 0x617e, 0x2061, 0x1800, 0x6003,
+ 0x0001, 0x2061, 0x0100, 0x6043, 0x0090, 0x6043, 0x0010, 0x2009,
+ 0x1975, 0x200b, 0x0000, 0x2009, 0x002d, 0x2011, 0x5e9e, 0x080c,
+ 0x84b6, 0x012e, 0x00ce, 0x002e, 0x001e, 0x0005, 0x00e6, 0x0006,
+ 0x0126, 0x2091, 0x8000, 0x0471, 0x2071, 0x0100, 0x080c, 0x98d1,
+ 0x2071, 0x0140, 0x7004, 0x9084, 0x4000, 0x0110, 0x080c, 0x2bde,
+ 0x080c, 0x7359, 0x0188, 0x080c, 0x7374, 0x1170, 0x080c, 0x7656,
+ 0x0016, 0x080c, 0x2820, 0x2001, 0x1949, 0x2102, 0x001e, 0x080c,
+ 0x7651, 0x080c, 0x727e, 0x0050, 0x2009, 0x0001, 0x080c, 0x2afc,
+ 0x2001, 0x0001, 0x080c, 0x26b1, 0x080c, 0x5e72, 0x012e, 0x000e,
+ 0x00ee, 0x0005, 0x2001, 0x180e, 0x2004, 0xd0bc, 0x0158, 0x0026,
+ 0x0036, 0x2011, 0x8017, 0x2001, 0x1975, 0x201c, 0x080c, 0x4b6d,
+ 0x003e, 0x002e, 0x0005, 0x20a9, 0x0012, 0x20e9, 0x0001, 0x20a1,
+ 0x1c80, 0x080c, 0x5f8d, 0x20e9, 0x0000, 0x2099, 0x026e, 0x0099,
+ 0x20a9, 0x0020, 0x080c, 0x5f87, 0x2099, 0x0260, 0x20a1, 0x1c92,
+ 0x0051, 0x20a9, 0x000e, 0x080c, 0x5f8a, 0x2099, 0x0260, 0x20a1,
+ 0x1cb2, 0x0009, 0x0005, 0x0016, 0x0026, 0x3410, 0x3308, 0x2104,
+ 0x8007, 0x2012, 0x8108, 0x8210, 0x1f04, 0x5f07, 0x002e, 0x001e,
+ 0x0005, 0x080c, 0xa190, 0x20e1, 0x0001, 0x2099, 0x1c00, 0x20e9,
+ 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x080c,
+ 0xa190, 0x080c, 0x5f8d, 0x20e1, 0x0000, 0x2099, 0x0260, 0x20e9,
+ 0x0000, 0x20a1, 0x0240, 0x20a9, 0x000c, 0x4003, 0x0005, 0x00c6,
+ 0x0006, 0x2061, 0x0100, 0x810f, 0x2001, 0x1833, 0x2004, 0x9005,
+ 0x1138, 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, 0x9105, 0x0010,
+ 0x9185, 0x00f7, 0x604a, 0x000e, 0x00ce, 0x0005, 0x0016, 0x0046,
+ 0x080c, 0x6869, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a, 0x080c,
+ 0xdd18, 0x2001, 0x180c, 0x200c, 0xc195, 0x2102, 0x2019, 0x002a,
+ 0x900e, 0x080c, 0x30cd, 0x080c, 0xc8ce, 0x0140, 0x0036, 0x2019,
+ 0xffff, 0x2021, 0x0007, 0x080c, 0x4d24, 0x003e, 0x004e, 0x001e,
+ 0x0005, 0x080c, 0x5e72, 0x7097, 0x0000, 0x708f, 0x0000, 0x0005,
+ 0x0006, 0x2001, 0x180c, 0x2004, 0xd09c, 0x0100, 0x000e, 0x0005,
+ 0x0006, 0x0016, 0x0126, 0x2091, 0x8000, 0x2001, 0x0101, 0x200c,
+ 0x918d, 0x0006, 0x2102, 0x012e, 0x001e, 0x000e, 0x0005, 0x2009,
+ 0x0001, 0x0020, 0x2009, 0x0002, 0x0008, 0x900e, 0x6814, 0x9084,
+ 0xffc0, 0x910d, 0x6916, 0x0005, 0x00f6, 0x0156, 0x0146, 0x01d6,
+ 0x9006, 0x20a9, 0x0080, 0x20e9, 0x0001, 0x20a1, 0x1c00, 0x4004,
+ 0x2079, 0x1c00, 0x7803, 0x2200, 0x7807, 0x00ef, 0x780f, 0x00ef,
+ 0x7813, 0x0138, 0x7823, 0xffff, 0x7827, 0xffff, 0x01de, 0x014e,
+ 0x015e, 0x00fe, 0x0005, 0x2001, 0x1800, 0x2003, 0x0001, 0x0005,
+ 0x2001, 0x1983, 0x0118, 0x2003, 0x0001, 0x0010, 0x2003, 0x0000,
+ 0x0005, 0x0156, 0x20a9, 0x0800, 0x2009, 0x1000, 0x9006, 0x200a,
+ 0x8108, 0x1f04, 0x5fc7, 0x015e, 0x0005, 0x00d6, 0x0036, 0x0156,
+ 0x0136, 0x0146, 0x2069, 0x185e, 0x9006, 0xb802, 0xb8be, 0xb807,
+ 0x0707, 0xb80a, 0xb80e, 0xb812, 0x9198, 0x3268, 0x231d, 0x939c,
+ 0x00ff, 0xbb16, 0x0016, 0x0026, 0xb8b2, 0x080c, 0xa307, 0x1120,
+ 0x9192, 0x007e, 0x1208, 0xbbb2, 0x20a9, 0x0004, 0xb8b4, 0x20e8,
+ 0xb9b8, 0x9198, 0x0006, 0x9006, 0x23a0, 0x4004, 0x20a9, 0x0004,
+ 0x9198, 0x000a, 0x23a0, 0x4004, 0x002e, 0x001e, 0xb83e, 0xb842,
+ 0xb84e, 0xb852, 0xb856, 0xb85a, 0xb85e, 0xb862, 0xb866, 0xb86a,
+ 0xb86f, 0x0100, 0xb872, 0xb876, 0xb87a, 0xb88a, 0xb88e, 0xb893,
+ 0x0008, 0xb896, 0xb89a, 0xb89e, 0xb8ae, 0xb9a2, 0x0096, 0xb8a4,
+ 0x904d, 0x190c, 0x0fbf, 0xb8a7, 0x0000, 0x009e, 0x9006, 0xb84a,
+ 0x6810, 0xb83a, 0x680c, 0xb846, 0x6814, 0x9084, 0x00ff, 0xb842,
+ 0x014e, 0x013e, 0x015e, 0x003e, 0x00de, 0x0005, 0x0126, 0x2091,
+ 0x8000, 0xa978, 0x9182, 0x0800, 0x1a04, 0x60a4, 0x2001, 0x180c,
+ 0x2004, 0x9084, 0x0003, 0x1904, 0x60aa, 0x9188, 0x1000, 0x2104,
+ 0x905d, 0x0570, 0xb804, 0x9084, 0x00ff, 0x908e, 0x0006, 0x1560,
+ 0xb8a4, 0x900d, 0x1904, 0x60bc, 0xa888, 0x908a, 0x199a, 0x0210,
+ 0x2001, 0x1999, 0x8003, 0x800b, 0x810b, 0x9108, 0xa966, 0xb850,
+ 0x900d, 0x1148, 0xa802, 0x2900, 0xb852, 0xb84e, 0x080c, 0x88be,
+ 0x9006, 0x012e, 0x0005, 0x00a6, 0x2150, 0x2900, 0xb002, 0xa803,
+ 0x0000, 0x00ae, 0xb852, 0x0c90, 0x2001, 0x0005, 0x900e, 0x04b8,
+ 0x2001, 0x0028, 0x900e, 0x0498, 0x9082, 0x0006, 0x1290, 0x080c,
+ 0xa307, 0x1160, 0xb8a0, 0x9084, 0xff80, 0x1140, 0xb900, 0xd1fc,
+ 0x0938, 0x2001, 0x0029, 0x2009, 0x1000, 0x0408, 0x2001, 0x0028,
+ 0x00a8, 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004,
+ 0x0068, 0xd184, 0x0118, 0x2001, 0x0004, 0x0040, 0x2001, 0x0029,
+ 0xb900, 0xd1fc, 0x0118, 0x2009, 0x1000, 0x0048, 0x900e, 0x0038,
+ 0x2001, 0x0029, 0x900e, 0x0018, 0x2001, 0x0029, 0x900e, 0x9005,
+ 0x012e, 0x0005, 0x2001, 0x180c, 0x2004, 0xd084, 0x19d0, 0x9188,
+ 0x1000, 0x2104, 0x905d, 0x09a8, 0x080c, 0x686d, 0x1990, 0xb800,
+ 0xd0bc, 0x0978, 0x0804, 0x6048, 0xae7c, 0x96b4, 0x3fff, 0x080c,
+ 0x66aa, 0x0904, 0x606c, 0x0804, 0x604c, 0x00b6, 0x00e6, 0x0126,
+ 0x2091, 0x8000, 0xa978, 0x9182, 0x0800, 0x1a04, 0x6143, 0x9188,
+ 0x1000, 0x2104, 0x905d, 0x0904, 0x611b, 0xb8a0, 0x9086, 0x007f,
+ 0x0190, 0xa880, 0xd0fc, 0x1178, 0x080c, 0x6875, 0x0160, 0xa998,
0x81ff, 0x0130, 0x908e, 0x0004, 0x0130, 0x908e, 0x0005, 0x0118,
- 0x080c, 0x6746, 0x1598, 0xa880, 0xd0fc, 0x01e0, 0xa898, 0x9005,
- 0x01c8, 0x2060, 0x0026, 0x2010, 0x080c, 0xb943, 0x002e, 0x1120,
- 0x2001, 0x0008, 0x0804, 0x6075, 0x6020, 0x9086, 0x000a, 0x0120,
- 0x2001, 0x0008, 0x0804, 0x6075, 0x601a, 0x6003, 0x0008, 0x2900,
- 0x6016, 0x0058, 0x080c, 0x9ec2, 0x05e8, 0x2b00, 0x6012, 0x2900,
+ 0x080c, 0x686d, 0x1598, 0xa880, 0xd0fc, 0x01e0, 0xa898, 0x9005,
+ 0x01c8, 0x2060, 0x0026, 0x2010, 0x080c, 0xc1bb, 0x002e, 0x1120,
+ 0x2001, 0x0008, 0x0804, 0x6145, 0x6020, 0x9086, 0x000a, 0x0120,
+ 0x2001, 0x0008, 0x0804, 0x6145, 0x601a, 0x6003, 0x0008, 0x2900,
+ 0x6016, 0x0058, 0x080c, 0xa347, 0x05e8, 0x2b00, 0x6012, 0x2900,
0x6016, 0x600b, 0xffff, 0x6023, 0x000a, 0x2009, 0x0003, 0x080c,
- 0x9f88, 0x9006, 0x0458, 0x2001, 0x0028, 0x0438, 0x9082, 0x0006,
- 0x1290, 0x080c, 0x9e82, 0x1160, 0xb8a0, 0x9084, 0xff80, 0x1140,
+ 0xa419, 0x9006, 0x0458, 0x2001, 0x0028, 0x0438, 0x9082, 0x0006,
+ 0x1290, 0x080c, 0xa307, 0x1160, 0xb8a0, 0x9084, 0xff80, 0x1140,
0xb900, 0xd1fc, 0x0900, 0x2001, 0x0029, 0x2009, 0x1000, 0x00a8,
0x2001, 0x0028, 0x0090, 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118,
0x2001, 0x0004, 0x0050, 0xd184, 0x0118, 0x2001, 0x0004, 0x0028,
@@ -2875,163 +2901,170 @@ static const uint16_t isp_2300_risc_code[] = {
0x7930, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118,
0x2001, 0x0004, 0x0010, 0x2001, 0x0029, 0x900e, 0x0038, 0x2001,
0x002c, 0x900e, 0x0018, 0x2001, 0x0029, 0x900e, 0x9006, 0x0008,
- 0x9005, 0x012e, 0x00be, 0x00fe, 0x0005, 0x610a, 0x60c5, 0x60dc,
- 0x610a, 0x610a, 0x610a, 0x610a, 0x610a, 0x2100, 0x9082, 0x007e,
- 0x1278, 0x080c, 0x63c1, 0x0148, 0x9046, 0xb810, 0x9306, 0x1904,
- 0x6112, 0xb814, 0x9206, 0x15f0, 0x0028, 0xbb12, 0xba16, 0x0010,
- 0x080c, 0x497d, 0x0150, 0x04b0, 0x080c, 0x6411, 0x1598, 0xb810,
- 0x9306, 0x1580, 0xb814, 0x9206, 0x1568, 0x080c, 0x9ec2, 0x0530,
- 0x2b00, 0x6012, 0x080c, 0xbc97, 0x2900, 0x6016, 0x600b, 0xffff,
- 0x6023, 0x000a, 0xa87c, 0x9086, 0x0001, 0x1170, 0x080c, 0x3066,
- 0x9006, 0x080c, 0x635e, 0x2001, 0x0002, 0x080c, 0x6372, 0x2001,
- 0x0200, 0xb86e, 0xb893, 0x0002, 0x2009, 0x0003, 0x080c, 0x9f88,
+ 0x9005, 0x012e, 0x00be, 0x00fe, 0x0005, 0x61da, 0x6195, 0x61ac,
+ 0x61da, 0x61da, 0x61da, 0x61da, 0x61da, 0x2100, 0x9082, 0x007e,
+ 0x1278, 0x080c, 0x6497, 0x0148, 0x9046, 0xb810, 0x9306, 0x1904,
+ 0x61e2, 0xb814, 0x9206, 0x15f0, 0x0028, 0xbb12, 0xba16, 0x0010,
+ 0x080c, 0x4a2b, 0x0150, 0x04b0, 0x080c, 0x64fc, 0x1598, 0xb810,
+ 0x9306, 0x1580, 0xb814, 0x9206, 0x1568, 0x080c, 0xa347, 0x0530,
+ 0x2b00, 0x6012, 0x080c, 0xc640, 0x2900, 0x6016, 0x600b, 0xffff,
+ 0x6023, 0x000a, 0xa87c, 0x9086, 0x0001, 0x1170, 0x080c, 0x3102,
+ 0x9006, 0x080c, 0x6434, 0x2001, 0x0002, 0x080c, 0x6448, 0x2001,
+ 0x0200, 0xb86e, 0xb893, 0x0002, 0x2009, 0x0003, 0x080c, 0xa419,
0x9006, 0x0068, 0x2001, 0x0001, 0x900e, 0x0038, 0x2001, 0x002c,
0x900e, 0x0018, 0x2001, 0x0028, 0x900e, 0x9005, 0x0000, 0x012e,
0x00be, 0x00fe, 0x0005, 0x00b6, 0x00f6, 0x00e6, 0x0126, 0x2091,
- 0x8000, 0xa898, 0x90c6, 0x0015, 0x0904, 0x62e7, 0x90c6, 0x0056,
- 0x0904, 0x62eb, 0x90c6, 0x0066, 0x0904, 0x62ef, 0x90c6, 0x0067,
- 0x0904, 0x62f3, 0x90c6, 0x0068, 0x0904, 0x62f7, 0x90c6, 0x006b,
- 0x0904, 0x62fb, 0x90c6, 0x0071, 0x0904, 0x62ff, 0x90c6, 0x0074,
- 0x0904, 0x6303, 0x90c6, 0x007c, 0x0904, 0x6307, 0x90c6, 0x007e,
- 0x0904, 0x630b, 0x90c6, 0x0037, 0x0904, 0x630f, 0x9016, 0x2079,
- 0x1800, 0xa978, 0x9186, 0x00ff, 0x0904, 0x62e2, 0x9182, 0x0800,
- 0x1a04, 0x62e2, 0x080c, 0x6411, 0x11b8, 0xb804, 0x9084, 0x00ff,
- 0x9082, 0x0006, 0x1288, 0xa898, 0x90c6, 0x0064, 0x0904, 0x6254,
- 0x90c6, 0x006f, 0x0148, 0x080c, 0x9e82, 0x1904, 0x62cb, 0xb8a0,
- 0x9084, 0xff80, 0x1904, 0x62cb, 0xa898, 0x90c6, 0x006f, 0x0158,
- 0x90c6, 0x005e, 0x0904, 0x622b, 0x90c6, 0x0064, 0x0904, 0x6254,
- 0x2008, 0x0804, 0x61f4, 0xa99c, 0xa8b4, 0x2040, 0x080c, 0x9e82,
- 0x1120, 0x9182, 0x007f, 0x0a04, 0x61f4, 0x9186, 0x00ff, 0x0904,
- 0x61f4, 0x9182, 0x0800, 0x1a04, 0x61f4, 0xaaa4, 0xaba0, 0x7878,
+ 0x8000, 0xa898, 0x90c6, 0x0015, 0x0904, 0x63bd, 0x90c6, 0x0056,
+ 0x0904, 0x63c1, 0x90c6, 0x0066, 0x0904, 0x63c5, 0x90c6, 0x0067,
+ 0x0904, 0x63c9, 0x90c6, 0x0068, 0x0904, 0x63cd, 0x90c6, 0x006b,
+ 0x0904, 0x63d1, 0x90c6, 0x0071, 0x0904, 0x63d5, 0x90c6, 0x0074,
+ 0x0904, 0x63d9, 0x90c6, 0x007c, 0x0904, 0x63dd, 0x90c6, 0x007e,
+ 0x0904, 0x63e1, 0x90c6, 0x0037, 0x0904, 0x63e5, 0x9016, 0x2079,
+ 0x1800, 0xa978, 0x9186, 0x00ff, 0x0904, 0x63b8, 0x9182, 0x0800,
+ 0x1a04, 0x63b8, 0x080c, 0x64fc, 0x11b8, 0xb804, 0x9084, 0x00ff,
+ 0x9082, 0x0006, 0x1288, 0xa898, 0x90c6, 0x0064, 0x0904, 0x632a,
+ 0x90c6, 0x006f, 0x0148, 0x080c, 0xa307, 0x1904, 0x63a1, 0xb8a0,
+ 0x9084, 0xff80, 0x1904, 0x63a1, 0xa898, 0x90c6, 0x006f, 0x0158,
+ 0x90c6, 0x005e, 0x0904, 0x6301, 0x90c6, 0x0064, 0x0904, 0x632a,
+ 0x2008, 0x0804, 0x62c4, 0xa99c, 0xa8b4, 0x2040, 0x080c, 0xa307,
+ 0x1120, 0x9182, 0x007f, 0x0a04, 0x62c4, 0x9186, 0x00ff, 0x0904,
+ 0x62c4, 0x9182, 0x0800, 0x1a04, 0x62c4, 0xaaa4, 0xaba0, 0x7878,
0x9306, 0x11a8, 0x787c, 0x0096, 0x924e, 0x1128, 0x2208, 0x2310,
- 0x009e, 0x0804, 0x61f4, 0x080c, 0x9e82, 0x1140, 0x99cc, 0xff00,
- 0x009e, 0x1128, 0x2208, 0x2310, 0x0804, 0x61f4, 0x009e, 0x080c,
- 0x497d, 0x0904, 0x61fd, 0x900e, 0x9016, 0x90c6, 0x4000, 0x1528,
- 0x0006, 0x080c, 0x6643, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c,
- 0x9080, 0x0032, 0x20a0, 0xb8b0, 0x20e0, 0xb8b4, 0x9080, 0x0006,
- 0x2098, 0x080c, 0x0f7e, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c,
- 0x9080, 0x0036, 0x20a0, 0xb8b0, 0x20e0, 0xb8b4, 0x9080, 0x000a,
- 0x2098, 0x080c, 0x0f7e, 0x000e, 0x00c8, 0x90c6, 0x4007, 0x1110,
+ 0x009e, 0x0804, 0x62c4, 0x080c, 0xa307, 0x1140, 0x99cc, 0xff00,
+ 0x009e, 0x1128, 0x2208, 0x2310, 0x0804, 0x62c4, 0x009e, 0x080c,
+ 0x4a2b, 0x0904, 0x62cd, 0x900e, 0x9016, 0x90c6, 0x4000, 0x1528,
+ 0x0006, 0x080c, 0x674b, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c,
+ 0x9080, 0x0032, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x0006,
+ 0x2098, 0x080c, 0x0f8a, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c,
+ 0x9080, 0x0036, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080, 0x000a,
+ 0x2098, 0x080c, 0x0f8a, 0x000e, 0x00c8, 0x90c6, 0x4007, 0x1110,
0x2408, 0x00a0, 0x90c6, 0x4008, 0x1118, 0x2708, 0x2610, 0x0070,
0x90c6, 0x4009, 0x1108, 0x0050, 0x90c6, 0x4006, 0x0138, 0x2001,
0x4005, 0x2009, 0x000a, 0x0010, 0x2001, 0x4006, 0xa89a, 0xa99e,
- 0xaaa2, 0x2001, 0x0030, 0x900e, 0x0440, 0x080c, 0x9ec2, 0x1130,
+ 0xaaa2, 0x2001, 0x0030, 0x900e, 0x0470, 0x080c, 0xa347, 0x1130,
0x2001, 0x4005, 0x2009, 0x0003, 0x9016, 0x0c80, 0x2b00, 0x6012,
- 0x080c, 0xbc97, 0x2900, 0x6016, 0x6023, 0x0001, 0xa86c, 0xd88c,
- 0x0108, 0xc0f5, 0xa86e, 0x0126, 0x2091, 0x8000, 0x080c, 0x3066,
- 0x012e, 0x9006, 0x080c, 0x635e, 0x2001, 0x0002, 0x080c, 0x6372,
- 0x2009, 0x0002, 0x080c, 0x9f88, 0x9006, 0x9005, 0x012e, 0x00ee,
- 0x00fe, 0x00be, 0x0005, 0x080c, 0x55bb, 0x0118, 0x2009, 0x0007,
- 0x00f8, 0xa99c, 0xaeb4, 0x080c, 0x6411, 0x1904, 0x61ef, 0x9186,
- 0x007f, 0x0130, 0x080c, 0x6746, 0x0118, 0x2009, 0x0009, 0x0080,
- 0x0096, 0x080c, 0x1001, 0x1120, 0x009e, 0x2009, 0x0002, 0x0040,
- 0x2900, 0x009e, 0xa806, 0x080c, 0xbb36, 0x19b0, 0x2009, 0x0003,
- 0x2001, 0x4005, 0x0804, 0x61f6, 0xa99c, 0xaeb4, 0x080c, 0x6411,
- 0x1904, 0x61ef, 0x0096, 0x080c, 0x1001, 0x1128, 0x009e, 0x2009,
- 0x0002, 0x0804, 0x62a8, 0x2900, 0x009e, 0xa806, 0x0096, 0x2048,
- 0x20a9, 0x002b, 0xb8b0, 0x20e0, 0xb8b4, 0x2098, 0xa860, 0x20e8,
- 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008, 0x9080,
- 0x0006, 0x20a0, 0xbbb4, 0x9398, 0x0006, 0x2398, 0x080c, 0x0f7e,
- 0x009e, 0xa87f, 0x0000, 0xa887, 0x0000, 0xa89b, 0x4000, 0xd684,
- 0x1168, 0x080c, 0x55a7, 0xd0b4, 0x1118, 0xa89f, 0x000b, 0x00e0,
- 0xb800, 0xd08c, 0x0118, 0xa89f, 0x000c, 0x00b0, 0x080c, 0x6746,
- 0x0118, 0xa89f, 0x0009, 0x0080, 0x080c, 0x55bb, 0x0118, 0xa89f,
- 0x0007, 0x0050, 0x080c, 0xbb19, 0x1904, 0x6224, 0x2009, 0x0003,
- 0x2001, 0x4005, 0x0804, 0x61f6, 0xa87f, 0x0030, 0xa89b, 0x4005,
- 0xa804, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,
- 0x9080, 0x0002, 0x2009, 0x002b, 0xaaa4, 0xaba0, 0xacac, 0xada8,
- 0x2031, 0x0000, 0x2041, 0x1247, 0x080c, 0xa45b, 0x1904, 0x6224,
- 0x2009, 0x0002, 0x08e8, 0x2001, 0x0028, 0x900e, 0x0804, 0x6225,
- 0x2009, 0x180c, 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0038,
- 0xd184, 0x0118, 0x2001, 0x0004, 0x0010, 0x2001, 0x0029, 0x900e,
- 0x0804, 0x6225, 0x2001, 0x0029, 0x900e, 0x0804, 0x6225, 0x080c,
- 0x35fd, 0x0804, 0x6226, 0x080c, 0x52cd, 0x0804, 0x6226, 0x080c,
- 0x4430, 0x0804, 0x6226, 0x080c, 0x44a9, 0x0804, 0x6226, 0x080c,
- 0x4505, 0x0804, 0x6226, 0x080c, 0x4645, 0x0804, 0x6226, 0x080c,
- 0x4a37, 0x0804, 0x6226, 0x080c, 0x4ced, 0x0804, 0x6226, 0x080c,
- 0x4f33, 0x0804, 0x6226, 0x080c, 0x512d, 0x0804, 0x6226, 0x080c,
- 0x3831, 0x0804, 0x6226, 0x00b6, 0xa978, 0x9182, 0x0800, 0x1268,
- 0x9188, 0x1000, 0x2104, 0x905d, 0x0140, 0x080c, 0x6746, 0x1148,
- 0x00e9, 0x080c, 0x6541, 0x9006, 0x00b0, 0x2001, 0x0028, 0x900e,
- 0x0090, 0x9082, 0x0006, 0x1240, 0xb900, 0xd1fc, 0x0d88, 0x2001,
- 0x0029, 0x2009, 0x1000, 0x0038, 0x2001, 0x0029, 0x900e, 0x0018,
- 0x2001, 0x0029, 0x900e, 0x9005, 0x00be, 0x0005, 0x0126, 0x2091,
- 0x8000, 0xb850, 0x900d, 0x0150, 0x2900, 0x0096, 0x2148, 0xa802,
- 0x009e, 0xa803, 0x0000, 0xb852, 0x012e, 0x0005, 0x2900, 0xb852,
- 0xb84e, 0xa803, 0x0000, 0x0cc0, 0xb84c, 0x904d, 0x0130, 0xa800,
- 0x9005, 0x1108, 0xb852, 0xb84e, 0x9905, 0x0005, 0x00b6, 0x0126,
- 0x00c6, 0x0026, 0x2091, 0x8000, 0x6210, 0x2258, 0xba00, 0x9005,
- 0x0110, 0xc285, 0x0008, 0xc284, 0xba02, 0x002e, 0x00ce, 0x012e,
- 0x00be, 0x0005, 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x6210,
- 0x2258, 0xba04, 0x0006, 0x9086, 0x0006, 0x1170, 0xb89c, 0xd0ac,
- 0x0158, 0x080c, 0x6742, 0x0140, 0x9284, 0xff00, 0x8007, 0x9086,
- 0x0007, 0x1110, 0x2011, 0x0600, 0x000e, 0x9294, 0xff00, 0x9215,
- 0xba06, 0x0006, 0x9086, 0x0006, 0x1120, 0xba90, 0x82ff, 0x090c,
- 0x0dc4, 0x000e, 0x00ce, 0x012e, 0x00be, 0x0005, 0x00b6, 0x0126,
- 0x00c6, 0x2091, 0x8000, 0x6210, 0x2258, 0xba04, 0x0006, 0x9086,
- 0x0006, 0x1168, 0xb89c, 0xd0a4, 0x0150, 0x080c, 0x673e, 0x1138,
- 0x9284, 0x00ff, 0x9086, 0x0007, 0x1110, 0x2011, 0x0006, 0x000e,
- 0x9294, 0x00ff, 0x8007, 0x9215, 0xba06, 0x00ce, 0x012e, 0x00be,
- 0x0005, 0x9182, 0x0800, 0x0218, 0x9085, 0x0001, 0x0005, 0x00d6,
- 0x0026, 0x9190, 0x1000, 0x2204, 0x905d, 0x11b0, 0x2001, 0x182f,
- 0x2004, 0x9082, 0x0050, 0x0290, 0x0096, 0x080c, 0x1001, 0x2958,
- 0x009e, 0x0160, 0x2b00, 0x2012, 0xb85c, 0xb8b6, 0xb860, 0xb8b2,
- 0x9006, 0xb8a6, 0x080c, 0x5f10, 0x9006, 0x0010, 0x9085, 0x0001,
- 0x002e, 0x00de, 0x0005, 0x00b6, 0x0096, 0x0126, 0x2091, 0x8000,
- 0x0026, 0x9182, 0x0800, 0x0218, 0x9085, 0x0001, 0x00a8, 0x00d6,
- 0x9190, 0x1000, 0x2204, 0x905d, 0x0168, 0x2013, 0x0000, 0xb8a4,
- 0x904d, 0x190c, 0x0fb3, 0x2b48, 0xb8b4, 0xb85e, 0xb8b0, 0xb862,
- 0x080c, 0x1043, 0x00de, 0x9006, 0x002e, 0x012e, 0x009e, 0x00be,
- 0x0005, 0x0016, 0x9182, 0x0800, 0x0218, 0x9085, 0x0001, 0x0030,
- 0x9188, 0x1000, 0x2104, 0x905d, 0x0dc0, 0x9006, 0x001e, 0x0005,
- 0x00d6, 0x0156, 0x0136, 0x0146, 0x9006, 0xb80a, 0xb80e, 0xb800,
- 0xc08c, 0xb802, 0x080c, 0x72e5, 0x1510, 0xb8a0, 0x9086, 0x007e,
- 0x0120, 0x080c, 0x9e82, 0x11d8, 0x0078, 0x7040, 0xd0e4, 0x01b8,
- 0x00c6, 0x2061, 0x195f, 0x7048, 0x2062, 0x704c, 0x6006, 0x7050,
- 0x600a, 0x7054, 0x600e, 0x00ce, 0x703c, 0x2069, 0x0140, 0x9005,
- 0x1110, 0x2001, 0x0001, 0x6886, 0x2069, 0x1800, 0x68b2, 0x7040,
- 0xb85e, 0x7048, 0xb862, 0x704c, 0xb866, 0x20e1, 0x0000, 0x2099,
- 0x0276, 0xb8b0, 0x20e8, 0xb8b4, 0x9088, 0x000a, 0x21a0, 0x20a9,
- 0x0004, 0x4003, 0x2099, 0x027a, 0x9088, 0x0006, 0x21a0, 0x20a9,
- 0x0004, 0x4003, 0x2069, 0x0200, 0x6817, 0x0001, 0x7040, 0xb86a,
- 0x7144, 0xb96e, 0x7048, 0xb872, 0x7050, 0xb876, 0x2069, 0x0200,
- 0x6817, 0x0000, 0xb8a0, 0x9086, 0x007e, 0x1110, 0x7144, 0xb96e,
- 0x9182, 0x0211, 0x1218, 0x2009, 0x0008, 0x0400, 0x9182, 0x0259,
- 0x1218, 0x2009, 0x0007, 0x00d0, 0x9182, 0x02c1, 0x1218, 0x2009,
- 0x0006, 0x00a0, 0x9182, 0x0349, 0x1218, 0x2009, 0x0005, 0x0070,
- 0x9182, 0x0421, 0x1218, 0x2009, 0x0004, 0x0040, 0x9182, 0x0581,
- 0x1218, 0x2009, 0x0003, 0x0010, 0x2009, 0x0002, 0xb992, 0x014e,
- 0x013e, 0x015e, 0x00de, 0x0005, 0x0016, 0x0026, 0x00e6, 0x2071,
- 0x0260, 0x7034, 0xb896, 0x703c, 0xb89a, 0x7054, 0xb89e, 0x00ee,
+ 0x080c, 0xc640, 0x2900, 0x6016, 0x6023, 0x0001, 0xa86c, 0xd88c,
+ 0x0108, 0xc0f5, 0xa86e, 0x0126, 0x2091, 0x8000, 0x080c, 0x3102,
+ 0x012e, 0x9006, 0x080c, 0x6434, 0x2001, 0x0002, 0x080c, 0x6448,
+ 0x2009, 0x0002, 0x080c, 0xa419, 0xa8b4, 0xd094, 0x0118, 0xb8bc,
+ 0xc08d, 0xb8be, 0x9006, 0x9005, 0x012e, 0x00ee, 0x00fe, 0x00be,
+ 0x0005, 0x080c, 0x5678, 0x0118, 0x2009, 0x0007, 0x00f8, 0xa99c,
+ 0xaeb4, 0x080c, 0x64fc, 0x1904, 0x62bf, 0x9186, 0x007f, 0x0130,
+ 0x080c, 0x686d, 0x0118, 0x2009, 0x0009, 0x0080, 0x0096, 0x080c,
+ 0x100d, 0x1120, 0x009e, 0x2009, 0x0002, 0x0040, 0x2900, 0x009e,
+ 0xa806, 0x080c, 0xc3b1, 0x19b0, 0x2009, 0x0003, 0x2001, 0x4005,
+ 0x0804, 0x62c6, 0xa99c, 0xaeb4, 0x080c, 0x64fc, 0x1904, 0x62bf,
+ 0x0096, 0x080c, 0x100d, 0x1128, 0x009e, 0x2009, 0x0002, 0x0804,
+ 0x637e, 0x2900, 0x009e, 0xa806, 0x0096, 0x2048, 0x20a9, 0x002b,
+ 0xb8b4, 0x20e0, 0xb8b8, 0x2098, 0xa860, 0x20e8, 0xa85c, 0x9080,
+ 0x0002, 0x20a0, 0x4003, 0x20a9, 0x0008, 0x9080, 0x0006, 0x20a0,
+ 0xbbb8, 0x9398, 0x0006, 0x2398, 0x080c, 0x0f8a, 0x009e, 0xa87f,
+ 0x0000, 0xa887, 0x0000, 0xa89b, 0x4000, 0xd684, 0x1168, 0x080c,
+ 0x5664, 0xd0b4, 0x1118, 0xa89f, 0x000b, 0x00e0, 0xb800, 0xd08c,
+ 0x0118, 0xa89f, 0x000c, 0x00b0, 0x080c, 0x686d, 0x0118, 0xa89f,
+ 0x0009, 0x0080, 0x080c, 0x5678, 0x0118, 0xa89f, 0x0007, 0x0050,
+ 0x080c, 0xc394, 0x1904, 0x62fa, 0x2009, 0x0003, 0x2001, 0x4005,
+ 0x0804, 0x62c6, 0xa87f, 0x0030, 0xa89b, 0x4005, 0xa804, 0x8006,
+ 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002,
+ 0x2009, 0x002b, 0xaaa4, 0xaba0, 0xacac, 0xada8, 0x2031, 0x0000,
+ 0x2041, 0x1253, 0x080c, 0xa8fb, 0x1904, 0x62fa, 0x2009, 0x0002,
+ 0x08e8, 0x2001, 0x0028, 0x900e, 0x0804, 0x62fb, 0x2009, 0x180c,
+ 0x210c, 0xd18c, 0x0118, 0x2001, 0x0004, 0x0038, 0xd184, 0x0118,
+ 0x2001, 0x0004, 0x0010, 0x2001, 0x0029, 0x900e, 0x0804, 0x62fb,
+ 0x2001, 0x0029, 0x900e, 0x0804, 0x62fb, 0x080c, 0x3699, 0x0804,
+ 0x62fc, 0x080c, 0x538a, 0x0804, 0x62fc, 0x080c, 0x44d3, 0x0804,
+ 0x62fc, 0x080c, 0x454c, 0x0804, 0x62fc, 0x080c, 0x45a8, 0x0804,
+ 0x62fc, 0x080c, 0x46e8, 0x0804, 0x62fc, 0x080c, 0x4ae7, 0x0804,
+ 0x62fc, 0x080c, 0x4da4, 0x0804, 0x62fc, 0x080c, 0x4ff0, 0x0804,
+ 0x62fc, 0x080c, 0x51ea, 0x0804, 0x62fc, 0x080c, 0x38cf, 0x0804,
+ 0x62fc, 0x00b6, 0xa978, 0x9182, 0x0800, 0x1268, 0x9188, 0x1000,
+ 0x2104, 0x905d, 0x0140, 0x080c, 0x686d, 0x1148, 0x00e9, 0x080c,
+ 0x6649, 0x9006, 0x00b0, 0x2001, 0x0028, 0x900e, 0x0090, 0x9082,
+ 0x0006, 0x1240, 0xb900, 0xd1fc, 0x0d88, 0x2001, 0x0029, 0x2009,
+ 0x1000, 0x0038, 0x2001, 0x0029, 0x900e, 0x0018, 0x2001, 0x0029,
+ 0x900e, 0x9005, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000, 0xb850,
+ 0x900d, 0x0150, 0x2900, 0x0096, 0x2148, 0xa802, 0x009e, 0xa803,
+ 0x0000, 0xb852, 0x012e, 0x0005, 0x2900, 0xb852, 0xb84e, 0xa803,
+ 0x0000, 0x0cc0, 0xb84c, 0x904d, 0x0130, 0xa800, 0x9005, 0x1108,
+ 0xb852, 0xb84e, 0x9905, 0x0005, 0x00b6, 0x0126, 0x00c6, 0x0026,
+ 0x2091, 0x8000, 0x6210, 0x2258, 0xba00, 0x9005, 0x0110, 0xc285,
+ 0x0008, 0xc284, 0xba02, 0x002e, 0x00ce, 0x012e, 0x00be, 0x0005,
+ 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x6210, 0x2258, 0xba04,
+ 0x0006, 0x9086, 0x0006, 0x1170, 0xb89c, 0xd0ac, 0x0158, 0x080c,
+ 0x6869, 0x0140, 0x9284, 0xff00, 0x8007, 0x9086, 0x0007, 0x1110,
+ 0x2011, 0x0600, 0x000e, 0x9294, 0xff00, 0x9215, 0xba06, 0x0006,
+ 0x9086, 0x0006, 0x1120, 0xba90, 0x82ff, 0x090c, 0x0dc3, 0x000e,
+ 0x00ce, 0x012e, 0x00be, 0x0005, 0x00b6, 0x0126, 0x00c6, 0x2091,
+ 0x8000, 0x6210, 0x2258, 0xba04, 0x0006, 0x9086, 0x0006, 0x1168,
+ 0xb89c, 0xd0a4, 0x0150, 0x080c, 0x6865, 0x1138, 0x9284, 0x00ff,
+ 0x9086, 0x0007, 0x1110, 0x2011, 0x0006, 0x000e, 0x9294, 0x00ff,
+ 0x8007, 0x9215, 0xba06, 0x00ce, 0x012e, 0x00be, 0x0005, 0x9182,
+ 0x0800, 0x0218, 0x9085, 0x0001, 0x0005, 0x00d6, 0x0026, 0x9190,
+ 0x1000, 0x2204, 0x905d, 0x11b0, 0x2001, 0x182f, 0x2004, 0x9082,
+ 0x0050, 0x0290, 0x0096, 0x080c, 0x100d, 0x2958, 0x009e, 0x0160,
+ 0x2b00, 0x2012, 0xb85c, 0xb8ba, 0xb860, 0xb8b6, 0x9006, 0xb8a6,
+ 0x080c, 0x5fcd, 0x9006, 0x0010, 0x9085, 0x0001, 0x002e, 0x00de,
+ 0x0005, 0x00b6, 0x0096, 0x0126, 0x2091, 0x8000, 0x0026, 0x9182,
+ 0x0800, 0x0218, 0x9085, 0x0001, 0x0450, 0x00d6, 0x9190, 0x1000,
+ 0x2204, 0x905d, 0x0510, 0x2013, 0x0000, 0xb8a4, 0x904d, 0x190c,
+ 0x0fbf, 0x00d6, 0x00c6, 0xb8ac, 0x2060, 0x8cff, 0x0168, 0x600c,
+ 0x0006, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x0110, 0x080c, 0x0fbf,
+ 0x080c, 0xa39d, 0x00ce, 0x0c88, 0x00ce, 0x00de, 0x2b48, 0xb8b8,
+ 0xb85e, 0xb8b4, 0xb862, 0x080c, 0x104f, 0x00de, 0x9006, 0x002e,
+ 0x012e, 0x009e, 0x00be, 0x0005, 0x0016, 0x9182, 0x0800, 0x0218,
+ 0x9085, 0x0001, 0x0030, 0x9188, 0x1000, 0x2104, 0x905d, 0x0dc0,
+ 0x9006, 0x001e, 0x0005, 0x00d6, 0x0156, 0x0136, 0x0146, 0x9006,
+ 0xb80a, 0xb80e, 0xb800, 0xc08c, 0xb802, 0x080c, 0x7351, 0x1510,
+ 0xb8a0, 0x9086, 0x007e, 0x0120, 0x080c, 0xa307, 0x11d8, 0x0078,
+ 0x7040, 0xd0e4, 0x01b8, 0x00c6, 0x2061, 0x195e, 0x7048, 0x2062,
+ 0x704c, 0x6006, 0x7050, 0x600a, 0x7054, 0x600e, 0x00ce, 0x703c,
+ 0x2069, 0x0140, 0x9005, 0x1110, 0x2001, 0x0001, 0x6886, 0x2069,
+ 0x1800, 0x68b2, 0x7040, 0xb85e, 0x7048, 0xb862, 0x704c, 0xb866,
+ 0x20e1, 0x0000, 0x2099, 0x0276, 0xb8b4, 0x20e8, 0xb8b8, 0x9088,
+ 0x000a, 0x21a0, 0x20a9, 0x0004, 0x4003, 0x2099, 0x027a, 0x9088,
+ 0x0006, 0x21a0, 0x20a9, 0x0004, 0x4003, 0x2069, 0x0200, 0x6817,
+ 0x0001, 0x7040, 0xb86a, 0x7144, 0xb96e, 0x7048, 0xb872, 0x7050,
+ 0xb876, 0x2069, 0x0200, 0x6817, 0x0000, 0xb8a0, 0x9086, 0x007e,
+ 0x1110, 0x7144, 0xb96e, 0x9182, 0x0211, 0x1218, 0x2009, 0x0008,
+ 0x0400, 0x9182, 0x0259, 0x1218, 0x2009, 0x0007, 0x00d0, 0x9182,
+ 0x02c1, 0x1218, 0x2009, 0x0006, 0x00a0, 0x9182, 0x0349, 0x1218,
+ 0x2009, 0x0005, 0x0070, 0x9182, 0x0421, 0x1218, 0x2009, 0x0004,
+ 0x0040, 0x9182, 0x0581, 0x1218, 0x2009, 0x0003, 0x0010, 0x2009,
+ 0x0002, 0xb992, 0x014e, 0x013e, 0x015e, 0x00de, 0x0005, 0x0016,
+ 0x0026, 0x00e6, 0x2071, 0x0260, 0x7034, 0xb896, 0x703c, 0xb89a,
+ 0x7054, 0xb89e, 0x0036, 0xbbbc, 0xc384, 0xba00, 0x2009, 0x187e,
+ 0x210c, 0xd0bc, 0x0120, 0xd1ec, 0x0110, 0xc2ad, 0x0008, 0xc2ac,
+ 0xd0c4, 0x0148, 0xd1e4, 0x0138, 0xc2bd, 0xd0cc, 0x0128, 0xd38c,
+ 0x1108, 0xc385, 0x0008, 0xc2bc, 0xba02, 0xbbbe, 0x003e, 0x00ee,
0x002e, 0x001e, 0x0005, 0x0096, 0x00a6, 0x0126, 0x2091, 0x8000,
- 0xb8a4, 0x904d, 0x05d0, 0xa968, 0x81ff, 0x1904, 0x6509, 0xaa6c,
+ 0xb8a4, 0x904d, 0x05d0, 0xa968, 0x81ff, 0x1904, 0x6611, 0xaa6c,
0x9282, 0x001c, 0x0250, 0x2950, 0xa804, 0x904d, 0x1dc0, 0x080c,
- 0x1001, 0x05e8, 0x2900, 0xb006, 0x0468, 0x0136, 0x0146, 0x01c6,
+ 0x100d, 0x05e8, 0x2900, 0xb006, 0x0468, 0x0136, 0x0146, 0x01c6,
0x01d6, 0x8906, 0x8006, 0x8007, 0x908c, 0x003f, 0x21e0, 0x9084,
0xffc0, 0x9080, 0x001e, 0x2098, 0x2009, 0x001c, 0x20a9, 0x0001,
- 0x4002, 0x9086, 0xffff, 0x0120, 0x8109, 0x1dd0, 0x080c, 0x0dc4,
+ 0x4002, 0x9086, 0xffff, 0x0120, 0x8109, 0x1dd0, 0x080c, 0x0dc3,
0x3c00, 0x20e8, 0x3300, 0x8001, 0x20a0, 0x4604, 0x8210, 0xaa6e,
- 0x01de, 0x01ce, 0x014e, 0x013e, 0x0060, 0x080c, 0x1001, 0x0178,
- 0x2900, 0xb8a6, 0xa86b, 0x0000, 0x080c, 0x65ca, 0xa86f, 0x0001,
+ 0x01de, 0x01ce, 0x014e, 0x013e, 0x0060, 0x080c, 0x100d, 0x0178,
+ 0x2900, 0xb8a6, 0xa86b, 0x0000, 0x080c, 0x66d2, 0xa86f, 0x0001,
0xae7a, 0x9085, 0x0001, 0x012e, 0x00ae, 0x009e, 0x0005, 0x9006,
0x0cd0, 0x0126, 0x2091, 0x8000, 0x0096, 0x0036, 0x0046, 0x00a6,
- 0xb8a4, 0x904d, 0x0190, 0xa868, 0x9005, 0x1158, 0x080c, 0x65da,
+ 0xb8a4, 0x904d, 0x0190, 0xa868, 0x9005, 0x1158, 0x080c, 0x66e2,
0x1160, 0x2348, 0xa86c, 0x908a, 0x0002, 0x0268, 0x8001, 0xa86e,
- 0x0020, 0x080c, 0x1033, 0xb8a7, 0x0000, 0x00ae, 0x004e, 0x003e,
+ 0x0020, 0x080c, 0x103f, 0xb8a7, 0x0000, 0x00ae, 0x004e, 0x003e,
0x009e, 0x012e, 0x0005, 0xb8a4, 0x9306, 0x1120, 0x2348, 0xa804,
- 0xb8a6, 0x0020, 0x2348, 0x2450, 0xa804, 0xb006, 0x080c, 0x1033,
- 0x0c60, 0x0126, 0x2091, 0x8000, 0x080c, 0x86ed, 0x012e, 0x0005,
+ 0xb8a6, 0x0020, 0x2348, 0x2450, 0xa804, 0xb006, 0x080c, 0x103f,
+ 0x0c60, 0x0126, 0x2091, 0x8000, 0x080c, 0x88be, 0x012e, 0x0005,
0x901e, 0x0010, 0x2019, 0x0001, 0x900e, 0x0126, 0x2091, 0x8000,
0xb84c, 0x2048, 0xb800, 0xd0dc, 0x1170, 0x89ff, 0x0500, 0x83ff,
0x0120, 0xa87c, 0x9606, 0x0158, 0x0030, 0xa870, 0x9406, 0x1118,
0xa874, 0x9506, 0x0120, 0x2908, 0xa800, 0x2048, 0x0c70, 0x080c,
- 0x9a08, 0xaa00, 0xb84c, 0x9906, 0x1110, 0xba4e, 0x0020, 0x00a6,
+ 0x9cd9, 0xaa00, 0xb84c, 0x9906, 0x1110, 0xba4e, 0x0020, 0x00a6,
0x2150, 0xb202, 0x00ae, 0x82ff, 0x1110, 0xb952, 0x89ff, 0x012e,
0x0005, 0x9016, 0x0036, 0x0046, 0x00f9, 0x004e, 0x003e, 0x1110,
- 0x2011, 0x0001, 0x0005, 0x080c, 0x6640, 0x1904, 0xba0f, 0x0005,
- 0x080c, 0x6640, 0x1904, 0xb9b4, 0x0005, 0x080c, 0x6640, 0x1904,
- 0xba0c, 0x0005, 0x080c, 0x6640, 0x1904, 0xb9d3, 0x0005, 0x080c,
- 0x6640, 0x1904, 0xba52, 0x0005, 0xb8a4, 0x900d, 0x1118, 0x9085,
+ 0x2011, 0x0001, 0x0005, 0x080c, 0x6748, 0x1904, 0xc28a, 0x0005,
+ 0x080c, 0x6748, 0x1904, 0xc22f, 0x0005, 0x080c, 0x6748, 0x1904,
+ 0xc287, 0x0005, 0x080c, 0x6748, 0x1904, 0xc24e, 0x0005, 0x080c,
+ 0x6748, 0x1904, 0xc2cd, 0x0005, 0xb8a4, 0x900d, 0x1118, 0x9085,
0x0001, 0x0005, 0x2918, 0x2320, 0x0136, 0x01c6, 0xa868, 0x9005,
0x11e8, 0x890e, 0x810e, 0x810f, 0x9184, 0x003f, 0x20e0, 0x9184,
0xffc0, 0x9080, 0x001e, 0x2098, 0x20a9, 0x0001, 0x2009, 0x001c,
@@ -3046,93 +3079,89 @@ static const uint16_t isp_2300_risc_code[] = {
0x0110, 0x2348, 0x0c30, 0x9085, 0x0001, 0x0068, 0x0146, 0x01d6,
0x3300, 0x8001, 0x20a0, 0x3c00, 0x20e8, 0x2001, 0xffff, 0x4004,
0x01de, 0x014e, 0x9006, 0x01ce, 0x013e, 0x0005, 0x0096, 0x0126,
- 0x2091, 0x8000, 0xb8a4, 0x904d, 0x1190, 0x080c, 0x1001, 0x0168,
- 0x2900, 0xb8a6, 0x080c, 0x65ca, 0xa86b, 0x0001, 0xa86f, 0x0000,
+ 0x2091, 0x8000, 0xb8a4, 0x904d, 0x1190, 0x080c, 0x100d, 0x0168,
+ 0x2900, 0xb8a6, 0x080c, 0x66d2, 0xa86b, 0x0001, 0xa86f, 0x0000,
0x9085, 0x0001, 0x012e, 0x009e, 0x0005, 0x9006, 0x0cd8, 0x0096,
- 0xa804, 0xa807, 0x0000, 0x2048, 0x080c, 0x0fb3, 0x009e, 0x0c50,
+ 0xa804, 0xa807, 0x0000, 0x2048, 0x080c, 0x0fbf, 0x009e, 0x0c50,
0x0096, 0x0126, 0x2091, 0x8000, 0xb8a4, 0x904d, 0x0130, 0xb8a7,
- 0x0000, 0x080c, 0x0fb3, 0x9085, 0x0001, 0x012e, 0x009e, 0x0005,
+ 0x0000, 0x080c, 0x0fbf, 0x9085, 0x0001, 0x012e, 0x009e, 0x0005,
0xb89c, 0xd0a4, 0x0005, 0x900e, 0xb89c, 0xd0a4, 0x1108, 0xc185,
- 0xd0ac, 0x1108, 0xc195, 0x0005, 0x00b6, 0x00f6, 0x080c, 0x72e5,
- 0x01b0, 0x71c0, 0x81ff, 0x1198, 0x71d8, 0xd19c, 0x0180, 0x2001,
- 0x007e, 0x9080, 0x1000, 0x2004, 0x905d, 0x0148, 0xb804, 0x9084,
- 0x00ff, 0x9086, 0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802, 0x2079,
- 0x185e, 0x7804, 0xd0a4, 0x01e8, 0x0156, 0x20a9, 0x007f, 0x900e,
- 0x0016, 0x080c, 0x6411, 0x1180, 0x080c, 0x676a, 0x1168, 0xb804,
- 0x9084, 0xff00, 0x8007, 0x9096, 0x0004, 0x0118, 0x9086, 0x0006,
- 0x1118, 0xb800, 0xc0ed, 0xb802, 0x001e, 0x8108, 0x1f04, 0x6670,
- 0x015e, 0x080c, 0x6704, 0x0120, 0x2001, 0x1962, 0x200c, 0x0038,
- 0x2079, 0x185e, 0x7804, 0xd0a4, 0x0130, 0x2009, 0x07d0, 0x2011,
- 0x669e, 0x080c, 0x8432, 0x00fe, 0x00be, 0x0005, 0x00b6, 0x2011,
- 0x669e, 0x080c, 0x835e, 0x080c, 0x6704, 0x01d8, 0x2001, 0x107e,
- 0x2004, 0x2058, 0xb900, 0xc1ec, 0xb902, 0x080c, 0x6742, 0x0130,
- 0x2009, 0x07d0, 0x2011, 0x669e, 0x080c, 0x8432, 0x00e6, 0x2071,
- 0x1800, 0x9006, 0x707a, 0x705c, 0x707e, 0x080c, 0x2e5f, 0x00ee,
+ 0xd0ac, 0x1108, 0xc195, 0xb800, 0xd0bc, 0x0108, 0xc18d, 0x0005,
+ 0x00b6, 0x00f6, 0x080c, 0x7351, 0x01b0, 0x71c0, 0x81ff, 0x1198,
+ 0x71d8, 0xd19c, 0x0180, 0x2001, 0x007e, 0x9080, 0x1000, 0x2004,
+ 0x905d, 0x0148, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1118,
+ 0xb800, 0xc0ed, 0xb802, 0x2079, 0x185e, 0x7804, 0xd0a4, 0x01e8,
+ 0x0156, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c, 0x64fc, 0x1180,
+ 0x080c, 0x6891, 0x1168, 0xb804, 0x9084, 0xff00, 0x8007, 0x9096,
+ 0x0004, 0x0118, 0x9086, 0x0006, 0x1118, 0xb800, 0xc0ed, 0xb802,
+ 0x001e, 0x8108, 0x1f04, 0x677c, 0x015e, 0x080c, 0x682b, 0x0120,
+ 0x2001, 0x1961, 0x200c, 0x0098, 0x2079, 0x185e, 0x7804, 0xd0a4,
+ 0x0190, 0x2009, 0x07d0, 0x2001, 0x182b, 0x2004, 0x9005, 0x0138,
+ 0x2001, 0x187e, 0x2004, 0xd0e4, 0x0110, 0x2009, 0x5dc0, 0x2011,
+ 0x67b6, 0x080c, 0x859e, 0x00fe, 0x00be, 0x0005, 0x00b6, 0x2011,
+ 0x67b6, 0x080c, 0x84c2, 0x080c, 0x682b, 0x01d8, 0x2001, 0x107e,
+ 0x2004, 0x2058, 0xb900, 0xc1ec, 0xb902, 0x080c, 0x6869, 0x0130,
+ 0x2009, 0x07d0, 0x2011, 0x67b6, 0x080c, 0x859e, 0x00e6, 0x2071,
+ 0x1800, 0x9006, 0x707a, 0x705c, 0x707e, 0x080c, 0x2ed6, 0x00ee,
0x04c8, 0x0156, 0x00c6, 0x20a9, 0x007f, 0x900e, 0x0016, 0x080c,
- 0x6411, 0x1550, 0x080c, 0x676a, 0x1538, 0xb800, 0xd0ec, 0x0520,
- 0x0046, 0xbaa0, 0x2220, 0x9006, 0x2009, 0x0029, 0x080c, 0xd156,
- 0xb800, 0xc0e5, 0xc0ec, 0xb802, 0x080c, 0x673e, 0x2001, 0x0707,
+ 0x64fc, 0x1550, 0x080c, 0x6891, 0x1538, 0xb800, 0xd0ec, 0x0520,
+ 0x0046, 0xbaa0, 0x2220, 0x9006, 0x2009, 0x0029, 0x080c, 0xdd18,
+ 0xb800, 0xc0e5, 0xc0ec, 0xb802, 0x080c, 0x6865, 0x2001, 0x0707,
0x1128, 0xb804, 0x9084, 0x00ff, 0x9085, 0x0700, 0xb806, 0x2019,
- 0x0029, 0x080c, 0x8843, 0x0076, 0x903e, 0x080c, 0x8748, 0x900e,
- 0x080c, 0xce89, 0x007e, 0x004e, 0x001e, 0x8108, 0x1f04, 0x66c6,
+ 0x0029, 0x080c, 0x8a2b, 0x0076, 0x903e, 0x080c, 0x8919, 0x900e,
+ 0x080c, 0xda37, 0x007e, 0x004e, 0x001e, 0x8108, 0x1f04, 0x67de,
0x00ce, 0x015e, 0x00be, 0x0005, 0x00b6, 0x6010, 0x2058, 0xb800,
- 0xc0ec, 0xb802, 0x00be, 0x0005, 0x00b6, 0x00f6, 0x2001, 0x107e,
- 0x2004, 0x905d, 0x0110, 0xb800, 0xd0ec, 0x00fe, 0x00be, 0x0005,
- 0x0126, 0x0026, 0x2091, 0x8000, 0x0006, 0xbaa0, 0x9290, 0x1000,
- 0x2204, 0x9b06, 0x190c, 0x0dc4, 0x000e, 0xba00, 0x9005, 0x0110,
- 0xc2fd, 0x0008, 0xc2fc, 0xba02, 0x002e, 0x012e, 0x0005, 0x2011,
- 0x1836, 0x2204, 0xd0cc, 0x0138, 0x2001, 0x1960, 0x200c, 0x2011,
- 0x6734, 0x080c, 0x8432, 0x0005, 0x2011, 0x6734, 0x080c, 0x835e,
- 0x2011, 0x1836, 0x2204, 0xc0cc, 0x2012, 0x0005, 0x080c, 0x55a7,
- 0xd0ac, 0x0005, 0x080c, 0x55a7, 0xd0a4, 0x0005, 0x0016, 0xb904,
- 0x9184, 0x00ff, 0x908e, 0x0006, 0x001e, 0x0005, 0x0016, 0xb904,
- 0x9184, 0xff00, 0x8007, 0x908e, 0x0006, 0x001e, 0x0005, 0x00b6,
- 0x00f6, 0x080c, 0xbef8, 0x0158, 0x70d8, 0x9084, 0x0028, 0x0138,
- 0x2001, 0x107f, 0x2004, 0x905d, 0x0110, 0xb8b8, 0xd094, 0x00fe,
- 0x00be, 0x0005, 0x0006, 0x0016, 0x0026, 0xb810, 0x9005, 0x0168,
- 0x2009, 0x182b, 0x210c, 0x9194, 0x00ff, 0x9206, 0x1130, 0xb814,
- 0x9084, 0xff00, 0x918c, 0xff00, 0x9106, 0x002e, 0x001e, 0x000e,
- 0x0005, 0x0006, 0x0016, 0x0036, 0x0046, 0x0076, 0x00b6, 0x2001,
- 0x1817, 0x203c, 0x9780, 0x31cc, 0x203d, 0x97bc, 0xff00, 0x873f,
- 0x9006, 0x2018, 0x2008, 0x9284, 0x8000, 0x0110, 0x2019, 0x0001,
- 0x9294, 0x7fff, 0x2100, 0x9706, 0x0190, 0x91a0, 0x1000, 0x2404,
- 0x905d, 0x0168, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1138,
- 0x83ff, 0x0118, 0xb89c, 0xd0a4, 0x0110, 0x8211, 0x0158, 0x8108,
- 0x83ff, 0x0120, 0x9182, 0x0800, 0x0e28, 0x0068, 0x9182, 0x007e,
- 0x0e08, 0x0048, 0x00be, 0x007e, 0x004e, 0x003e, 0x001e, 0x9085,
- 0x0001, 0x000e, 0x0005, 0x00be, 0x007e, 0x004e, 0x003e, 0x001e,
- 0x9006, 0x000e, 0x0005, 0x0046, 0x0056, 0x0076, 0x00b6, 0x2100,
- 0x9084, 0x7fff, 0x9080, 0x1000, 0x2004, 0x905d, 0x0130, 0xb804,
- 0x9084, 0x00ff, 0x9086, 0x0006, 0x0550, 0x9184, 0x8000, 0x0580,
- 0x2001, 0x1817, 0x203c, 0x9780, 0x31cc, 0x203d, 0x97bc, 0xff00,
- 0x873f, 0x9006, 0x2020, 0x2400, 0x9706, 0x01a0, 0x94a8, 0x1000,
- 0x2504, 0x905d, 0x0178, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006,
- 0x1148, 0xb89c, 0xd0a4, 0x0130, 0xb814, 0x9206, 0x1118, 0xb810,
- 0x9306, 0x0128, 0x8420, 0x9482, 0x0800, 0x0e28, 0x0048, 0x918c,
- 0x7fff, 0x00be, 0x007e, 0x005e, 0x004e, 0x9085, 0x0001, 0x0005,
- 0x918c, 0x7fff, 0x00be, 0x007e, 0x005e, 0x004e, 0x9006, 0x0005,
- 0x0006, 0x2001, 0x00a0, 0x8001, 0xa001, 0xa001, 0xa001, 0x1dd8,
- 0x000e, 0x0005, 0x0006, 0x2001, 0x00f8, 0x8001, 0xa001, 0xa001,
- 0xa001, 0x1dd8, 0x000e, 0x0005, 0x0006, 0x2001, 0x00e8, 0x8001,
- 0xa001, 0xa001, 0xa001, 0x1dd8, 0x000e, 0x0005, 0x2071, 0x1911,
- 0x7003, 0x0001, 0x7007, 0x0000, 0x9006, 0x7012, 0x7016, 0x701a,
- 0x701e, 0x700a, 0x7046, 0x2071, 0x1925, 0x080c, 0x101a, 0x090c,
- 0x0dc4, 0xa8af, 0xdcb0, 0xa86b, 0x1911, 0xa86f, 0x0000, 0xa873,
- 0x0000, 0xa877, 0x0001, 0xa87b, 0x1928, 0xa87f, 0x0020, 0xa883,
- 0x0040, 0xa8a3, 0x0000, 0x2900, 0x708e, 0x2001, 0x1923, 0x2003,
- 0x0000, 0x0005, 0x0016, 0x00e6, 0x2071, 0x1925, 0x900e, 0x710a,
- 0x080c, 0x55a7, 0xd0fc, 0x1148, 0x080c, 0x55a7, 0x900e, 0xd09c,
- 0x0108, 0x8108, 0x7102, 0x0804, 0x68c7, 0x2001, 0x187e, 0x200c,
- 0x9184, 0x000f, 0x0006, 0x2001, 0x180d, 0x2004, 0xd08c, 0x000e,
- 0x0108, 0x9006, 0x0002, 0x686c, 0x686c, 0x686c, 0x686c, 0x686c,
- 0x6893, 0x68a8, 0x68d2, 0x68ab, 0x686c, 0x686c, 0x686c, 0x686c,
- 0x686c, 0x686c, 0x686c, 0x7003, 0x0003, 0x2009, 0x187f, 0x210c,
- 0x9184, 0xff00, 0x908e, 0xff00, 0x0140, 0x8007, 0x9005, 0x1110,
- 0x2001, 0x0002, 0x8003, 0x7006, 0x0410, 0x7007, 0x0001, 0x00f8,
- 0x7003, 0x0005, 0x0c50, 0x7003, 0x0004, 0x0136, 0x0146, 0x0156,
- 0x20e1, 0x0001, 0x2099, 0x1882, 0x2071, 0x1925, 0x0096, 0x708c,
- 0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x0024, 0x20a0, 0x009e,
- 0x20a9, 0x0004, 0x4003, 0x015e, 0x014e, 0x013e, 0x0000, 0x2071,
+ 0xc0ec, 0xb802, 0x00be, 0x0005, 0x7810, 0x00b6, 0x2058, 0xb800,
+ 0x00be, 0xd0ac, 0x0005, 0x6010, 0x00b6, 0x905d, 0x0108, 0xb800,
+ 0x00be, 0xd0bc, 0x0005, 0x00b6, 0x00f6, 0x2001, 0x107e, 0x2004,
+ 0x905d, 0x0110, 0xb800, 0xd0ec, 0x00fe, 0x00be, 0x0005, 0x0126,
+ 0x0026, 0x2091, 0x8000, 0x0006, 0xbaa0, 0x9290, 0x1000, 0x2204,
+ 0x9b06, 0x190c, 0x0dc3, 0x000e, 0xba00, 0x9005, 0x0110, 0xc2fd,
+ 0x0008, 0xc2fc, 0xba02, 0x002e, 0x012e, 0x0005, 0x2011, 0x1836,
+ 0x2204, 0xd0cc, 0x0138, 0x2001, 0x195f, 0x200c, 0x2011, 0x685b,
+ 0x080c, 0x859e, 0x0005, 0x2011, 0x685b, 0x080c, 0x84c2, 0x2011,
+ 0x1836, 0x2204, 0xc0cc, 0x2012, 0x0005, 0x080c, 0x5664, 0xd0ac,
+ 0x0005, 0x080c, 0x5664, 0xd0a4, 0x0005, 0x0016, 0xb904, 0x9184,
+ 0x00ff, 0x908e, 0x0006, 0x001e, 0x0005, 0x0016, 0xb904, 0x9184,
+ 0xff00, 0x8007, 0x908e, 0x0006, 0x001e, 0x0005, 0x00b6, 0x00f6,
+ 0x080c, 0xc8ce, 0x0158, 0x70d8, 0x9084, 0x0028, 0x0138, 0x2001,
+ 0x107f, 0x2004, 0x905d, 0x0110, 0xb8bc, 0xd094, 0x00fe, 0x00be,
+ 0x0005, 0x0006, 0x0016, 0x0026, 0xb810, 0x9005, 0x0168, 0x2009,
+ 0x182b, 0x210c, 0x9194, 0x00ff, 0x9206, 0x1130, 0xb814, 0x9084,
+ 0xff00, 0x918c, 0xff00, 0x9106, 0x002e, 0x001e, 0x000e, 0x0005,
+ 0x0006, 0x0016, 0x0036, 0x0046, 0x0076, 0x00b6, 0x2001, 0x1817,
+ 0x203c, 0x9780, 0x3268, 0x203d, 0x97bc, 0xff00, 0x873f, 0x9006,
+ 0x2018, 0x2008, 0x9284, 0x8000, 0x0110, 0x2019, 0x0001, 0x9294,
+ 0x7fff, 0x2100, 0x9706, 0x0190, 0x91a0, 0x1000, 0x2404, 0x905d,
+ 0x0168, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1138, 0x83ff,
+ 0x0118, 0xb89c, 0xd0a4, 0x0110, 0x8211, 0x0158, 0x8108, 0x83ff,
+ 0x0120, 0x9182, 0x0800, 0x0e28, 0x0068, 0x9182, 0x007e, 0x0e08,
+ 0x0048, 0x00be, 0x007e, 0x004e, 0x003e, 0x001e, 0x9085, 0x0001,
+ 0x000e, 0x0005, 0x00be, 0x007e, 0x004e, 0x003e, 0x001e, 0x9006,
+ 0x000e, 0x0005, 0x0046, 0x0056, 0x0076, 0x00b6, 0x2100, 0x9084,
+ 0x7fff, 0x9080, 0x1000, 0x2004, 0x905d, 0x0130, 0xb804, 0x9084,
+ 0x00ff, 0x9086, 0x0006, 0x0550, 0x9184, 0x8000, 0x0580, 0x2001,
+ 0x1817, 0x203c, 0x9780, 0x3268, 0x203d, 0x97bc, 0xff00, 0x873f,
+ 0x9006, 0x2020, 0x2400, 0x9706, 0x01a0, 0x94a8, 0x1000, 0x2504,
+ 0x905d, 0x0178, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x1148,
+ 0xb89c, 0xd0a4, 0x0130, 0xb814, 0x9206, 0x1118, 0xb810, 0x9306,
+ 0x0128, 0x8420, 0x9482, 0x0800, 0x0e28, 0x0048, 0x918c, 0x7fff,
+ 0x00be, 0x007e, 0x005e, 0x004e, 0x9085, 0x0001, 0x0005, 0x918c,
+ 0x7fff, 0x00be, 0x007e, 0x005e, 0x004e, 0x9006, 0x0005, 0x0006,
+ 0x2001, 0x00a0, 0x8001, 0xa001, 0xa001, 0xa001, 0x1dd8, 0x000e,
+ 0x0005, 0x0006, 0x2001, 0x00f8, 0x8001, 0xa001, 0xa001, 0xa001,
+ 0x1dd8, 0x000e, 0x0005, 0x0006, 0x2001, 0x00e8, 0x8001, 0xa001,
+ 0xa001, 0xa001, 0x1dd8, 0x000e, 0x0005, 0x2071, 0x1911, 0x7003,
+ 0x0001, 0x7007, 0x0000, 0x9006, 0x7012, 0x7016, 0x701a, 0x701e,
+ 0x700a, 0x7046, 0x2001, 0x1923, 0x2003, 0x0000, 0x0005, 0x0016,
+ 0x00e6, 0x2071, 0x1925, 0x900e, 0x710a, 0x080c, 0x5664, 0xd0fc,
+ 0x1140, 0x080c, 0x5664, 0x900e, 0xd09c, 0x0108, 0x8108, 0x7102,
+ 0x0470, 0x2001, 0x187e, 0x200c, 0x9184, 0x0007, 0x0006, 0x2001,
+ 0x180d, 0x2004, 0xd08c, 0x000e, 0x0108, 0x9006, 0x0002, 0x6979,
+ 0x6979, 0x6979, 0x6979, 0x6979, 0x6997, 0x69ac, 0x69ba, 0x7003,
+ 0x0003, 0x2009, 0x187f, 0x210c, 0x9184, 0xff00, 0x908e, 0xff00,
+ 0x0140, 0x8007, 0x9005, 0x1110, 0x2001, 0x0002, 0x8003, 0x7006,
+ 0x0030, 0x7007, 0x0001, 0x0018, 0x7003, 0x0005, 0x0c50, 0x2071,
0x1911, 0x704f, 0x0000, 0x2071, 0x1800, 0x70ef, 0x0001, 0x00ee,
0x001e, 0x0005, 0x7003, 0x0000, 0x2071, 0x1911, 0x2009, 0x187f,
0x210c, 0x9184, 0x7f00, 0x8007, 0x908c, 0x000f, 0x0160, 0x714e,
@@ -3140,423 +3169,408 @@ static const uint16_t isp_2300_risc_code[] = {
0x0128, 0x70ee, 0x0c20, 0x704f, 0x000f, 0x0c90, 0x70ef, 0x0005,
0x08f0, 0x00e6, 0x2071, 0x0050, 0x684c, 0x9005, 0x1150, 0x00e6,
0x2071, 0x1911, 0x7028, 0xc085, 0x702a, 0x00ee, 0x9085, 0x0001,
- 0x0488, 0x6844, 0x9005, 0x0158, 0x080c, 0x764e, 0x6a60, 0x9200,
+ 0x0488, 0x6844, 0x9005, 0x0158, 0x080c, 0x76be, 0x6a60, 0x9200,
0x7002, 0x6864, 0x9101, 0x7006, 0x9006, 0x7012, 0x7016, 0x6860,
0x7002, 0x6864, 0x7006, 0x6868, 0x700a, 0x686c, 0x700e, 0x6844,
0x9005, 0x1110, 0x7012, 0x7016, 0x684c, 0x701a, 0x701c, 0x9085,
0x0040, 0x701e, 0x7037, 0x001a, 0x702b, 0x0001, 0x00e6, 0x2071,
0x1911, 0x7028, 0xc084, 0x702a, 0x7007, 0x0001, 0x700b, 0x0000,
0x00ee, 0x9006, 0x00ee, 0x0005, 0xa86c, 0xd0fc, 0x1508, 0x00e6,
- 0x0026, 0x2001, 0x1925, 0x2004, 0x9015, 0x0904, 0x6b22, 0xa97c,
- 0xa878, 0x9105, 0x1904, 0x6b22, 0x9286, 0x0003, 0x0904, 0x69bd,
- 0x9286, 0x0005, 0x0904, 0x69bd, 0xa880, 0xd0bc, 0x1904, 0x6b22,
- 0x2200, 0x0002, 0x6b22, 0x6981, 0x69bd, 0x69bd, 0x6ead, 0x69bd,
- 0x0005, 0xa86c, 0xd0fc, 0x1520, 0x00e6, 0x0026, 0x2009, 0x1925,
- 0x210c, 0x81ff, 0x0904, 0x6b22, 0xa884, 0x9084, 0x00ff, 0x9086,
- 0x0001, 0x1904, 0x6b22, 0x9186, 0x0003, 0x0904, 0x69bd, 0x9186,
- 0x0005, 0x0904, 0x69bd, 0xa880, 0xd0cc, 0x0904, 0x6b22, 0x9186,
- 0x0004, 0x0904, 0x6ead, 0xa84f, 0x8021, 0xa853, 0x0017, 0x0028,
- 0x0005, 0xa84f, 0x8020, 0xa853, 0x0016, 0x2071, 0x1911, 0x701c,
- 0x9005, 0x1904, 0x6cd0, 0x0e04, 0x6d1b, 0x2071, 0x0000, 0xa84c,
- 0x7082, 0xa850, 0x7032, 0xa870, 0x7086, 0x7036, 0xa874, 0x708a,
- 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119d,
- 0x2071, 0x1800, 0x2011, 0x0001, 0xa804, 0x900d, 0x702c, 0x1158,
- 0xa802, 0x2900, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x8245,
- 0x002e, 0x00ee, 0x0005, 0x0096, 0x2148, 0xa904, 0xa802, 0x8210,
- 0x2900, 0x81ff, 0x1dc8, 0x009e, 0x0c58, 0xa84f, 0x0000, 0x00f6,
- 0x2079, 0x0050, 0x2071, 0x1911, 0xa803, 0x0000, 0x7010, 0x9005,
- 0x1904, 0x6aa8, 0x782c, 0x908c, 0x0780, 0x190c, 0x6eed, 0x8004,
- 0x8004, 0x8004, 0x9084, 0x0003, 0x0002, 0x69db, 0x6aa8, 0x69ff,
- 0x6a45, 0x080c, 0x0dc4, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804,
- 0x900d, 0x1168, 0x2071, 0x19d7, 0x7044, 0x9005, 0x1320, 0x2001,
- 0x1926, 0x2004, 0x7046, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016,
- 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8,
- 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x8245, 0x0c18, 0x2071,
- 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1578, 0x7824, 0x00e6,
- 0x2071, 0x0040, 0x712c, 0xd19c, 0x1148, 0x2009, 0x182f, 0x210c,
- 0x918a, 0x0040, 0x0218, 0x7022, 0x00ee, 0x0058, 0x00ee, 0x2048,
- 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c,
- 0x8245, 0x782c, 0x9094, 0x0780, 0x190c, 0x6eed, 0xd0a4, 0x19f0,
- 0x2071, 0x19d7, 0x7044, 0x9005, 0x1320, 0x2001, 0x1926, 0x2004,
- 0x7046, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148,
- 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc,
- 0x9200, 0x70be, 0x080c, 0x8245, 0x0808, 0x0096, 0x00e6, 0x7824,
- 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc,
- 0x8000, 0x70be, 0x080c, 0x8245, 0x782c, 0x9094, 0x0780, 0x190c,
- 0x6eed, 0xd0a4, 0x1d60, 0x00ee, 0x782c, 0x9094, 0x0780, 0x190c,
- 0x6eed, 0xd09c, 0x1198, 0x009e, 0x2900, 0x7822, 0xa804, 0x900d,
- 0x1550, 0x2071, 0x19d7, 0x7044, 0x9005, 0x1320, 0x2001, 0x1926,
- 0x2004, 0x7046, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x009e, 0x2908,
- 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902,
- 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1168, 0x2071, 0x19d7,
+ 0x0026, 0x2001, 0x1925, 0x2004, 0x9015, 0x0904, 0x6c08, 0xa97c,
+ 0xa878, 0x9105, 0x1904, 0x6c08, 0x9286, 0x0003, 0x0904, 0x6aa1,
+ 0x9286, 0x0005, 0x0904, 0x6aa1, 0xa880, 0xd0bc, 0x1904, 0x6c08,
+ 0x2200, 0x0002, 0x6c08, 0x6a65, 0x6aa1, 0x6aa1, 0x6c08, 0x6aa1,
+ 0x0005, 0xa86c, 0xd0fc, 0x1500, 0x00e6, 0x0026, 0x2009, 0x1925,
+ 0x210c, 0x81ff, 0x0904, 0x6c08, 0xa884, 0x9084, 0x00ff, 0x9086,
+ 0x0001, 0x1904, 0x6c08, 0x9186, 0x0003, 0x0904, 0x6aa1, 0x9186,
+ 0x0005, 0x0904, 0x6aa1, 0xa880, 0xd0cc, 0x0904, 0x6c08, 0xa84f,
+ 0x8021, 0xa853, 0x0017, 0x0028, 0x0005, 0xa84f, 0x8020, 0xa853,
+ 0x0016, 0x2071, 0x1911, 0x701c, 0x9005, 0x1904, 0x6dd6, 0x0e04,
+ 0x6e21, 0x2071, 0x0000, 0xa84c, 0x7082, 0xa850, 0x7032, 0xa870,
+ 0x7086, 0x7036, 0xa874, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089,
+ 0x2004, 0xd084, 0x190c, 0x11a9, 0x2071, 0x1800, 0x2011, 0x0001,
+ 0xa804, 0x900d, 0x702c, 0x1158, 0xa802, 0x2900, 0x702e, 0x70bc,
+ 0x9200, 0x70be, 0x080c, 0x83a7, 0x002e, 0x00ee, 0x0005, 0x0096,
+ 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x009e,
+ 0x0c58, 0xa84f, 0x0000, 0x00f6, 0x2079, 0x0050, 0x2071, 0x1911,
+ 0xa803, 0x0000, 0x7010, 0x9005, 0x1904, 0x6b8c, 0x782c, 0x908c,
+ 0x0780, 0x190c, 0x6f4a, 0x8004, 0x8004, 0x8004, 0x9084, 0x0003,
+ 0x0002, 0x6abf, 0x6b8c, 0x6ae3, 0x6b29, 0x080c, 0x0dc3, 0x2071,
+ 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1168, 0x2071, 0x19d7,
0x7044, 0x9005, 0x1320, 0x2001, 0x1926, 0x2004, 0x7046, 0x00fe,
- 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148,
- 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc,
- 0x9200, 0x70be, 0x080c, 0x8245, 0x00fe, 0x002e, 0x00ee, 0x0005,
- 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110,
- 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1904, 0x6afc,
- 0x782c, 0x9094, 0x0780, 0x190c, 0x6eed, 0xd09c, 0x1198, 0x701c,
- 0x904d, 0x0180, 0x7010, 0x8001, 0x7012, 0x1108, 0x701a, 0xa800,
- 0x701e, 0x2900, 0x7822, 0x782c, 0x9094, 0x0780, 0x190c, 0x6eed,
- 0xd09c, 0x0d68, 0x782c, 0x9094, 0x0780, 0x190c, 0x6eed, 0xd0a4,
- 0x01b0, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802,
- 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x8245, 0x782c,
- 0x9094, 0x0780, 0x190c, 0x6eed, 0xd0a4, 0x1d60, 0x00ee, 0x2071,
- 0x19d7, 0x7044, 0x9005, 0x1320, 0x2001, 0x1926, 0x2004, 0x7046,
- 0x00fe, 0x002e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800, 0x9016,
+ 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802,
+ 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be,
+ 0x080c, 0x83a7, 0x0c18, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804,
+ 0x900d, 0x1578, 0x7824, 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c,
+ 0x1148, 0x2009, 0x182f, 0x210c, 0x918a, 0x0040, 0x0218, 0x7022,
+ 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e,
+ 0x70bc, 0x8000, 0x70be, 0x080c, 0x83a7, 0x782c, 0x9094, 0x0780,
+ 0x190c, 0x6f4a, 0xd0a4, 0x19f0, 0x2071, 0x19d7, 0x7044, 0x9005,
+ 0x1320, 0x2001, 0x1926, 0x2004, 0x7046, 0x00fe, 0x002e, 0x00ee,
+ 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900,
+ 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x83a7,
+ 0x0808, 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c,
+ 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x83a7,
+ 0x782c, 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd0a4, 0x1d60, 0x00ee,
+ 0x782c, 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd09c, 0x1198, 0x009e,
+ 0x2900, 0x7822, 0xa804, 0x900d, 0x1550, 0x2071, 0x19d7, 0x7044,
+ 0x9005, 0x1320, 0x2001, 0x1926, 0x2004, 0x7046, 0x00fe, 0x002e,
+ 0x00ee, 0x0005, 0x009e, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018,
+ 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804,
+ 0x900d, 0x1168, 0x2071, 0x19d7, 0x7044, 0x9005, 0x1320, 0x2001,
+ 0x1926, 0x2004, 0x7046, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2071,
+ 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900,
+ 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x83a7,
+ 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2908, 0x7010, 0x8000, 0x7012,
+ 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148,
+ 0xa804, 0x900d, 0x1904, 0x6be0, 0x782c, 0x9094, 0x0780, 0x190c,
+ 0x6f4a, 0xd09c, 0x1198, 0x701c, 0x904d, 0x0180, 0x7010, 0x8001,
+ 0x7012, 0x1108, 0x701a, 0xa800, 0x701e, 0x2900, 0x7822, 0x782c,
+ 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd09c, 0x0d68, 0x782c, 0x9094,
+ 0x0780, 0x190c, 0x6f4a, 0xd0a4, 0x01b0, 0x00e6, 0x7824, 0x2048,
+ 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000,
+ 0x70be, 0x080c, 0x83a7, 0x782c, 0x9094, 0x0780, 0x190c, 0x6f4a,
+ 0xd0a4, 0x1d60, 0x00ee, 0x2071, 0x19d7, 0x7044, 0x9005, 0x1320,
+ 0x2001, 0x1926, 0x2004, 0x7046, 0x00fe, 0x002e, 0x00ee, 0x0005,
+ 0x00e6, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802,
+ 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be,
+ 0x080c, 0x83a7, 0x00ee, 0x0804, 0x6b9c, 0xa86c, 0xd0fc, 0x1904,
+ 0x6c56, 0x0096, 0xa804, 0xa807, 0x0000, 0x904d, 0x190c, 0x0fbf,
+ 0x009e, 0x0020, 0xa86c, 0xd0fc, 0x1904, 0x6c56, 0x00e6, 0x0026,
+ 0xa84f, 0x0000, 0x00f6, 0x2079, 0x0050, 0x2071, 0x1800, 0x70e8,
+ 0x8001, 0x0558, 0x1a04, 0x6c53, 0x2071, 0x1911, 0xa803, 0x0000,
+ 0xa868, 0x9084, 0x00ff, 0x908e, 0x0016, 0x01a8, 0x7010, 0x9005,
+ 0x1904, 0x6d52, 0x782c, 0x908c, 0x0780, 0x190c, 0x6f4a, 0x8004,
+ 0x8004, 0x8004, 0x9084, 0x0003, 0x0002, 0x6c57, 0x6d52, 0x6c72,
+ 0x6ce3, 0x080c, 0x0dc3, 0x2009, 0x1925, 0x2104, 0x0002, 0x6c1e,
+ 0x6c1e, 0x6c1e, 0x6aaa, 0x6c1e, 0x6aaa, 0x70eb, 0x0fa0, 0x71e4,
+ 0x8107, 0x9106, 0x9094, 0x00c0, 0x9184, 0xff3f, 0x9205, 0x70e6,
+ 0x3b08, 0x3a00, 0x9104, 0x918d, 0x00c0, 0x21d8, 0x9084, 0xff3f,
+ 0x9205, 0x20d0, 0x0808, 0x70ea, 0x0804, 0x6c14, 0x0005, 0x2071,
+ 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1120, 0x00fe, 0x002e,
+ 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210,
+ 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c,
+ 0x83a7, 0x0c60, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d,
+ 0x1904, 0x6cd2, 0x7830, 0x8007, 0x908c, 0x001f, 0x70ec, 0x9102,
+ 0x1220, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7824, 0x00e6, 0x2071,
+ 0x0040, 0x712c, 0xd19c, 0x1148, 0x2009, 0x182f, 0x210c, 0x918a,
+ 0x0040, 0x0218, 0x7022, 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c,
+ 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x83a7,
+ 0x782c, 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd0a4, 0x19f0, 0x0e04,
+ 0x6cc9, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000,
+ 0x6836, 0x6833, 0x0013, 0x00de, 0x2001, 0x1922, 0x200c, 0xc184,
+ 0x2102, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
+ 0x11a9, 0x2001, 0x1923, 0x2003, 0x0000, 0x00fe, 0x002e, 0x00ee,
+ 0x0005, 0x2001, 0x1922, 0x200c, 0xc185, 0x2102, 0x00fe, 0x002e,
+ 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210,
+ 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c,
+ 0x83a7, 0x0804, 0x6c85, 0x0096, 0x00e6, 0x7824, 0x2048, 0x2071,
+ 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be,
+ 0x080c, 0x83a7, 0x782c, 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd0a4,
+ 0x1d60, 0x00ee, 0x0e04, 0x6d25, 0x7838, 0x7938, 0x910e, 0x1de0,
+ 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x7044,
+ 0xc084, 0x7046, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,
+ 0x190c, 0x11a9, 0x704b, 0x0000, 0x782c, 0x9094, 0x0780, 0x190c,
+ 0x6f4a, 0xd09c, 0x1170, 0x009e, 0x2900, 0x7822, 0xa804, 0x900d,
+ 0x11e0, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7044, 0xc085, 0x7046,
+ 0x0c58, 0x009e, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d,
+ 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d,
+ 0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016,
0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8,
- 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x8245, 0x00ee, 0x0804,
- 0x6ab8, 0xa86c, 0xd0fc, 0x15e0, 0x0096, 0xa804, 0xa807, 0x0000,
- 0x904d, 0x190c, 0x0fb3, 0x009e, 0x0018, 0xa86c, 0xd0fc, 0x1580,
- 0x00e6, 0x0026, 0xa84f, 0x0000, 0x00f6, 0x2079, 0x0050, 0x2071,
- 0x1911, 0xa803, 0x0000, 0xa868, 0x9084, 0x00ff, 0x908e, 0x0016,
- 0x01a8, 0x7010, 0x9005, 0x1904, 0x6c4c, 0x782c, 0x908c, 0x0780,
- 0x190c, 0x6eed, 0x8004, 0x8004, 0x8004, 0x9084, 0x0003, 0x0002,
- 0x6b51, 0x6c4c, 0x6b6c, 0x6bdd, 0x080c, 0x0dc4, 0x2009, 0x1925,
- 0x2104, 0x0002, 0x6b31, 0x6b31, 0x6b31, 0x69c6, 0x6b31, 0x69c6,
- 0x0005, 0x2071, 0x1800, 0x2900, 0x7822, 0xa804, 0x900d, 0x1120,
- 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904,
- 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200,
- 0x70be, 0x080c, 0x8245, 0x0c60, 0x2071, 0x1800, 0x2900, 0x7822,
- 0xa804, 0x900d, 0x1904, 0x6bcc, 0x7830, 0x8007, 0x908c, 0x001f,
- 0x70ec, 0x9102, 0x1220, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7824,
- 0x00e6, 0x2071, 0x0040, 0x712c, 0xd19c, 0x1148, 0x2009, 0x182f,
- 0x210c, 0x918a, 0x0040, 0x0218, 0x7022, 0x00ee, 0x0058, 0x00ee,
- 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be,
- 0x080c, 0x8245, 0x782c, 0x9094, 0x0780, 0x190c, 0x6eed, 0xd0a4,
- 0x19f0, 0x0e04, 0x6bc3, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6,
- 0x2069, 0x0000, 0x6836, 0x6833, 0x0013, 0x00de, 0x2001, 0x1922,
- 0x200c, 0xc184, 0x2102, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
- 0xd084, 0x190c, 0x119d, 0x2001, 0x1923, 0x2003, 0x0000, 0x00fe,
- 0x002e, 0x00ee, 0x0005, 0x2001, 0x1922, 0x200c, 0xc185, 0x2102,
- 0x00fe, 0x002e, 0x00ee, 0x0005, 0x9016, 0x702c, 0x2148, 0xa904,
- 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200,
- 0x70be, 0x080c, 0x8245, 0x0804, 0x6b7f, 0x0096, 0x00e6, 0x7824,
+ 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x83a7, 0x00fe, 0x002e,
+ 0x00ee, 0x0005, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d,
+ 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d,
+ 0x1904, 0x6dc1, 0x782c, 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd09c,
+ 0x11b0, 0x701c, 0x904d, 0x0198, 0xa84c, 0x9005, 0x1180, 0x7010,
+ 0x8001, 0x7012, 0x1108, 0x701a, 0xa800, 0x701e, 0x2900, 0x7822,
+ 0x782c, 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd09c, 0x0d50, 0x782c,
+ 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd0a4, 0x05b8, 0x00e6, 0x7824,
0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc,
- 0x8000, 0x70be, 0x080c, 0x8245, 0x782c, 0x9094, 0x0780, 0x190c,
- 0x6eed, 0xd0a4, 0x1d60, 0x00ee, 0x0e04, 0x6c1f, 0x7838, 0x7938,
+ 0x8000, 0x70be, 0x080c, 0x83a7, 0x782c, 0x9094, 0x0780, 0x190c,
+ 0x6f4a, 0xd0a4, 0x1d60, 0x00ee, 0x0e04, 0x6dba, 0x7838, 0x7938,
0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013,
0x00de, 0x7044, 0xc084, 0x7046, 0x2091, 0x4080, 0x2001, 0x0089,
- 0x2004, 0xd084, 0x190c, 0x119d, 0x704b, 0x0000, 0x782c, 0x9094,
- 0x0780, 0x190c, 0x6eed, 0xd09c, 0x1170, 0x009e, 0x2900, 0x7822,
- 0xa804, 0x900d, 0x11e0, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7044,
- 0xc085, 0x7046, 0x0c58, 0x009e, 0x2908, 0x7010, 0x8000, 0x7012,
- 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148,
- 0xa804, 0x900d, 0x1120, 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2071,
+ 0x2004, 0xd084, 0x190c, 0x11a9, 0x704b, 0x0000, 0x00fe, 0x002e,
+ 0x00ee, 0x0005, 0x7044, 0xc085, 0x7046, 0x00fe, 0x002e, 0x00ee,
+ 0x0005, 0x00e6, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904,
+ 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200,
+ 0x70be, 0x080c, 0x83a7, 0x00ee, 0x0804, 0x6d62, 0x2071, 0x1911,
+ 0xa803, 0x0000, 0x2908, 0x7010, 0x8000, 0x7012, 0x7018, 0x904d,
+ 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804, 0x900d,
+ 0x1128, 0x1e04, 0x6e01, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800,
+ 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff,
+ 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x83a7, 0x0e04,
+ 0x6deb, 0x2071, 0x1911, 0x701c, 0x2048, 0xa84c, 0x900d, 0x0d18,
+ 0x2071, 0x0000, 0x7182, 0xa850, 0x7032, 0xa870, 0x7086, 0x7036,
+ 0xa874, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,
+ 0x190c, 0x11a9, 0x2071, 0x1911, 0x080c, 0x6f36, 0x002e, 0x00ee,
+ 0x0005, 0x2071, 0x1911, 0xa803, 0x0000, 0x2908, 0x7010, 0x8000,
+ 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e,
+ 0x2148, 0xa804, 0x900d, 0x1118, 0x002e, 0x00ee, 0x0005, 0x2071,
0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900,
- 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x8245,
- 0x00fe, 0x002e, 0x00ee, 0x0005, 0x2908, 0x7010, 0x8000, 0x7012,
- 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148,
- 0xa804, 0x900d, 0x1904, 0x6cbb, 0x782c, 0x9094, 0x0780, 0x190c,
- 0x6eed, 0xd09c, 0x11b0, 0x701c, 0x904d, 0x0198, 0xa84c, 0x9005,
- 0x1180, 0x7010, 0x8001, 0x7012, 0x1108, 0x701a, 0xa800, 0x701e,
- 0x2900, 0x7822, 0x782c, 0x9094, 0x0780, 0x190c, 0x6eed, 0xd09c,
- 0x0d50, 0x782c, 0x9094, 0x0780, 0x190c, 0x6eed, 0xd0a4, 0x05b8,
- 0x00e6, 0x7824, 0x2048, 0x2071, 0x1800, 0x702c, 0xa802, 0x2900,
- 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x8245, 0x782c, 0x9094,
- 0x0780, 0x190c, 0x6eed, 0xd0a4, 0x1d60, 0x00ee, 0x0e04, 0x6cb4,
- 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836,
- 0x6833, 0x0013, 0x00de, 0x7044, 0xc084, 0x7046, 0x2091, 0x4080,
- 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119d, 0x704b, 0x0000,
- 0x00fe, 0x002e, 0x00ee, 0x0005, 0x7044, 0xc085, 0x7046, 0x00fe,
- 0x002e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1800, 0x9016, 0x702c,
- 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e,
- 0x70bc, 0x9200, 0x70be, 0x080c, 0x8245, 0x00ee, 0x0804, 0x6c5c,
- 0x2071, 0x1911, 0xa803, 0x0000, 0x2908, 0x7010, 0x8000, 0x7012,
- 0x7018, 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148,
- 0xa804, 0x900d, 0x1128, 0x1e04, 0x6cfb, 0x002e, 0x00ee, 0x0005,
- 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802, 0x8210,
- 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c,
- 0x8245, 0x0e04, 0x6ce5, 0x2071, 0x1911, 0x701c, 0x2048, 0xa84c,
- 0x900d, 0x0d18, 0x2071, 0x0000, 0x7182, 0xa850, 0x7032, 0xa870,
- 0x7086, 0x7036, 0xa874, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089,
- 0x2004, 0xd084, 0x190c, 0x119d, 0x2071, 0x1911, 0x080c, 0x6ed9,
- 0x002e, 0x00ee, 0x0005, 0x2071, 0x1911, 0xa803, 0x0000, 0x2908,
- 0x7010, 0x8000, 0x7012, 0x7018, 0x904d, 0x711a, 0x0110, 0xa902,
- 0x0008, 0x711e, 0x2148, 0xa804, 0x900d, 0x1118, 0x002e, 0x00ee,
- 0x0005, 0x2071, 0x1800, 0x9016, 0x702c, 0x2148, 0xa904, 0xa802,
- 0x8210, 0x2900, 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be,
- 0x080c, 0x8245, 0x002e, 0x00ee, 0x0005, 0x0006, 0xa880, 0x0006,
- 0xa86b, 0x0103, 0x20a9, 0x001c, 0xa860, 0x20e8, 0xa85c, 0x9080,
- 0x001e, 0x20a0, 0x9006, 0x4004, 0x000e, 0x9084, 0x00ff, 0xa882,
- 0x000e, 0xa87e, 0xa986, 0x0005, 0x2071, 0x1911, 0x7004, 0x0002,
- 0x6d68, 0x6d69, 0x6eac, 0x6e96, 0x6d66, 0x6eac, 0x080c, 0x0dc4,
- 0x0005, 0x2001, 0x1925, 0x2004, 0x0002, 0x6d73, 0x6d73, 0x6dc8,
- 0x6dc9, 0x6e30, 0x6dc9, 0x0126, 0x2091, 0x8000, 0x1e0c, 0x6ef8,
- 0x701c, 0x904d, 0x01e0, 0xa84c, 0x9005, 0x01d8, 0x0e04, 0x6d97,
- 0xa94c, 0x2071, 0x0000, 0x7182, 0xa850, 0x7032, 0xa870, 0x7086,
- 0x7036, 0xa874, 0x708a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
- 0xd084, 0x190c, 0x119d, 0x2071, 0x1911, 0x080c, 0x6ed9, 0x012e,
- 0x0470, 0x2001, 0x005b, 0x2004, 0x9094, 0x0780, 0x190c, 0x6eed,
- 0xd09c, 0x2071, 0x1911, 0x1510, 0x2071, 0x1911, 0x700f, 0x0001,
- 0xa968, 0x9184, 0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, 0x918c,
- 0x00ff, 0x8101, 0x0108, 0x710e, 0x2900, 0x00d6, 0x2069, 0x0050,
- 0x6822, 0x00de, 0x2071, 0x1911, 0x701c, 0x2048, 0x7010, 0x8001,
- 0x7012, 0xa800, 0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x0005,
- 0x0005, 0x00d6, 0x2008, 0x2069, 0x19d7, 0x6844, 0x9005, 0x0760,
- 0x0158, 0x9186, 0x0003, 0x0540, 0x2001, 0x1814, 0x2004, 0x2009,
- 0x1aa0, 0x210c, 0x9102, 0x1500, 0x0126, 0x2091, 0x8000, 0x2069,
- 0x0050, 0x693c, 0x6838, 0x9106, 0x0190, 0x0e04, 0x6dfb, 0x2069,
- 0x0000, 0x6837, 0x8040, 0x6833, 0x0012, 0x6883, 0x8040, 0x2091,
- 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c, 0x119d, 0x2069,
- 0x19d7, 0x6847, 0xffff, 0x012e, 0x00de, 0x0126, 0x2091, 0x8000,
- 0x1e0c, 0x6f69, 0x701c, 0x904d, 0x0548, 0x2001, 0x005b, 0x2004,
- 0x9094, 0x0780, 0x190c, 0x6eed, 0xd09c, 0x1500, 0x2071, 0x1911,
- 0x700f, 0x0001, 0xa968, 0x9184, 0x00ff, 0x9086, 0x0003, 0x1130,
- 0x810f, 0x918c, 0x00ff, 0x8101, 0x0108, 0x710e, 0x2900, 0x00d6,
- 0x2069, 0x0050, 0x6822, 0x00de, 0x701c, 0x2048, 0x7010, 0x8001,
- 0x7012, 0xa800, 0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x0005,
- 0x0126, 0x2091, 0x8000, 0x1e0c, 0x6ef8, 0x701c, 0x904d, 0x0568,
- 0xa84c, 0x9086, 0x0004, 0x1558, 0x0136, 0x0146, 0x0156, 0x2099,
- 0x1882, 0x20e1, 0x0001, 0x2001, 0x1948, 0x2004, 0x2040, 0xa060,
- 0x20e8, 0xa05c, 0x9080, 0x0024, 0x20a0, 0x20a9, 0x0004, 0x4003,
- 0x015e, 0x014e, 0x013e, 0xa860, 0xa076, 0xa85c, 0x9080, 0x001c,
- 0xa07a, 0xa07f, 0x0002, 0xa06f, 0x0002, 0xa073, 0x0000, 0x080c,
- 0x10eb, 0x2071, 0x1911, 0x7007, 0x0003, 0x012e, 0x0005, 0x2001,
- 0x005b, 0x2004, 0x9094, 0x0780, 0x190c, 0x6eed, 0xd09c, 0x2071,
- 0x1911, 0x1d98, 0x2071, 0x1911, 0x700f, 0x0001, 0xa968, 0x9184,
+ 0x81ff, 0x1dc8, 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x83a7,
+ 0x002e, 0x00ee, 0x0005, 0x0006, 0xa880, 0x0006, 0xa86b, 0x0103,
+ 0x20a9, 0x001c, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001e, 0x20a0,
+ 0x9006, 0x4004, 0x000e, 0x9084, 0x00ff, 0xa882, 0x000e, 0xa87e,
+ 0xa986, 0x0005, 0x2071, 0x1911, 0x7004, 0x0002, 0x6e6e, 0x6e6f,
+ 0x6f35, 0x6e6f, 0x6e6c, 0x6f35, 0x080c, 0x0dc3, 0x0005, 0x2001,
+ 0x1925, 0x2004, 0x0002, 0x6e79, 0x6e79, 0x6ece, 0x6ecf, 0x6e79,
+ 0x6ecf, 0x0126, 0x2091, 0x8000, 0x1e0c, 0x6f55, 0x701c, 0x904d,
+ 0x01e0, 0xa84c, 0x9005, 0x01d8, 0x0e04, 0x6e9d, 0xa94c, 0x2071,
+ 0x0000, 0x7182, 0xa850, 0x7032, 0xa870, 0x7086, 0x7036, 0xa874,
+ 0x708a, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
+ 0x11a9, 0x2071, 0x1911, 0x080c, 0x6f36, 0x012e, 0x0470, 0x2001,
+ 0x005b, 0x2004, 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd09c, 0x2071,
+ 0x1911, 0x1510, 0x2071, 0x1911, 0x700f, 0x0001, 0xa968, 0x9184,
0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff, 0x8101,
0x0108, 0x710e, 0x2900, 0x00d6, 0x2069, 0x0050, 0x6822, 0x00de,
0x2071, 0x1911, 0x701c, 0x2048, 0x7010, 0x8001, 0x7012, 0xa800,
- 0x701e, 0x9005, 0x1990, 0x701a, 0x012e, 0x0005, 0x2071, 0x1925,
- 0x708c, 0x2040, 0xa070, 0x2071, 0x1911, 0x908e, 0x0100, 0x1120,
- 0x7007, 0x0001, 0x04b1, 0x0005, 0x908e, 0x0000, 0x0de0, 0x908e,
- 0x0200, 0x1dc8, 0x080c, 0x6eed, 0x0005, 0xa84f, 0x0004, 0xa803,
- 0x0000, 0x2908, 0x2071, 0x1911, 0x7010, 0x8000, 0x7012, 0x7018,
- 0x904d, 0x711a, 0x0110, 0xa902, 0x0008, 0x711e, 0x2148, 0xa804,
- 0x900d, 0x1118, 0x002e, 0x00ee, 0x0005, 0x2071, 0x1800, 0x9016,
- 0x702c, 0x2148, 0xa904, 0xa802, 0x8210, 0x2900, 0x81ff, 0x1dc8,
- 0x702e, 0x70bc, 0x9200, 0x70be, 0x080c, 0x8245, 0x002e, 0x00ee,
- 0x0005, 0x0126, 0x2091, 0x8000, 0x701c, 0x904d, 0x0160, 0x7010,
- 0x8001, 0x7012, 0xa800, 0x701e, 0x9005, 0x1108, 0x701a, 0x012e,
- 0x080c, 0x1033, 0x0005, 0x012e, 0x0005, 0x2091, 0x8000, 0x0e04,
- 0x6eef, 0x0006, 0x0016, 0x2001, 0x8004, 0x0006, 0x0804, 0x0dcd,
- 0x0096, 0x00f6, 0x2079, 0x0050, 0x7044, 0xd084, 0x01d0, 0xc084,
- 0x7046, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000,
- 0x6836, 0x6833, 0x0013, 0x00de, 0x2091, 0x4080, 0x2001, 0x0089,
- 0x2004, 0xd084, 0x190c, 0x119d, 0x704b, 0x0000, 0x00fe, 0x009e,
- 0x0005, 0x782c, 0x9094, 0x0780, 0x1981, 0xd0a4, 0x0db8, 0x2001,
- 0x1925, 0x2004, 0x9086, 0x0004, 0x0130, 0x7148, 0x704c, 0x8108,
- 0x714a, 0x9102, 0x0e58, 0x00e6, 0x2071, 0x1800, 0x7824, 0x00e6,
- 0x2071, 0x0040, 0x712c, 0xd19c, 0x1148, 0x2009, 0x182f, 0x210c,
- 0x918a, 0x0040, 0x0218, 0x7022, 0x00ee, 0x0058, 0x00ee, 0x2048,
- 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c,
- 0x8245, 0x782c, 0x9094, 0x0780, 0x190c, 0x6eed, 0xd0a4, 0x19f0,
+ 0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x0005, 0x0005, 0x00d6,
+ 0x2008, 0x2069, 0x19d7, 0x6844, 0x9005, 0x0760, 0x0158, 0x9186,
+ 0x0003, 0x0540, 0x2001, 0x1814, 0x2004, 0x2009, 0x1aac, 0x210c,
+ 0x9102, 0x1500, 0x0126, 0x2091, 0x8000, 0x2069, 0x0050, 0x693c,
+ 0x6838, 0x9106, 0x0190, 0x0e04, 0x6f01, 0x2069, 0x0000, 0x6837,
+ 0x8040, 0x6833, 0x0012, 0x6883, 0x8040, 0x2091, 0x4080, 0x2001,
+ 0x0089, 0x2004, 0xd084, 0x190c, 0x11a9, 0x2069, 0x19d7, 0x6847,
+ 0xffff, 0x012e, 0x00de, 0x0126, 0x2091, 0x8000, 0x1e0c, 0x6fc0,
+ 0x701c, 0x904d, 0x0540, 0x2001, 0x005b, 0x2004, 0x9094, 0x0780,
+ 0x15c9, 0xd09c, 0x1500, 0x2071, 0x1911, 0x700f, 0x0001, 0xa968,
+ 0x9184, 0x00ff, 0x9086, 0x0003, 0x1130, 0x810f, 0x918c, 0x00ff,
+ 0x8101, 0x0108, 0x710e, 0x2900, 0x00d6, 0x2069, 0x0050, 0x6822,
+ 0x00de, 0x701c, 0x2048, 0x7010, 0x8001, 0x7012, 0xa800, 0x701e,
+ 0x9005, 0x1108, 0x701a, 0x012e, 0x0005, 0x0005, 0x0126, 0x2091,
+ 0x8000, 0x701c, 0x904d, 0x0160, 0x7010, 0x8001, 0x7012, 0xa800,
+ 0x701e, 0x9005, 0x1108, 0x701a, 0x012e, 0x080c, 0x103f, 0x0005,
+ 0x012e, 0x0005, 0x2091, 0x8000, 0x0e04, 0x6f4c, 0x0006, 0x0016,
+ 0x2001, 0x8004, 0x0006, 0x0804, 0x0dcc, 0x0096, 0x00f6, 0x2079,
+ 0x0050, 0x7044, 0xd084, 0x01d0, 0xc084, 0x7046, 0x7838, 0x7938,
+ 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833, 0x0013,
+ 0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084, 0x190c,
+ 0x11a9, 0x704b, 0x0000, 0x00fe, 0x009e, 0x0005, 0x782c, 0x9094,
+ 0x0780, 0x1981, 0xd0a4, 0x0db8, 0x7148, 0x704c, 0x8108, 0x714a,
+ 0x9102, 0x0e88, 0x00e6, 0x2071, 0x1800, 0x7824, 0x00e6, 0x2071,
+ 0x0040, 0x712c, 0xd19c, 0x1148, 0x2009, 0x182f, 0x210c, 0x918a,
+ 0x0040, 0x0218, 0x7022, 0x00ee, 0x0058, 0x00ee, 0x2048, 0x702c,
+ 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be, 0x080c, 0x83a7,
+ 0x782c, 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd0a4, 0x19f0, 0x7838,
+ 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836, 0x6833,
+ 0x0013, 0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004, 0xd084,
+ 0x190c, 0x11a9, 0x00ee, 0x704b, 0x0000, 0x00fe, 0x009e, 0x0005,
+ 0x00f6, 0x2079, 0x0050, 0x7044, 0xd084, 0x01b8, 0xc084, 0x7046,
0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000, 0x6836,
0x6833, 0x0013, 0x00de, 0x2091, 0x4080, 0x2001, 0x0089, 0x2004,
- 0xd084, 0x190c, 0x119d, 0x00ee, 0x704b, 0x0000, 0x00fe, 0x009e,
- 0x0005, 0x00f6, 0x2079, 0x0050, 0x7044, 0xd084, 0x01b8, 0xc084,
- 0x7046, 0x7838, 0x7938, 0x910e, 0x1de0, 0x00d6, 0x2069, 0x0000,
- 0x6836, 0x6833, 0x0013, 0x00de, 0x2091, 0x4080, 0x2001, 0x0089,
- 0x2004, 0xd084, 0x190c, 0x119d, 0x00fe, 0x0005, 0x782c, 0x9094,
- 0x0780, 0x190c, 0x6eed, 0xd0a4, 0x0db8, 0x00e6, 0x2071, 0x1800,
- 0x7824, 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000,
- 0x70be, 0x080c, 0x8245, 0x782c, 0x9094, 0x0780, 0x190c, 0x6eed,
- 0xd0a4, 0x1d70, 0x00d6, 0x2069, 0x0050, 0x693c, 0x2069, 0x1925,
- 0x6808, 0x690a, 0x2069, 0x19d7, 0x9102, 0x1118, 0x6844, 0x9005,
- 0x1320, 0x2001, 0x1926, 0x200c, 0x6946, 0x00de, 0x00ee, 0x00fe,
- 0x0005, 0x7094, 0x908a, 0x002a, 0x1a0c, 0x0dc4, 0x9082, 0x001d,
- 0x001b, 0x6027, 0x1e00, 0x0005, 0x70aa, 0x7017, 0x7033, 0x705d,
- 0x7099, 0x70d9, 0x70eb, 0x7033, 0x70c1, 0x6fd2, 0x7000, 0x7083,
- 0x6fd1, 0x0005, 0x00d6, 0x2069, 0x0200, 0x6804, 0x9005, 0x1180,
- 0x6808, 0x9005, 0x1518, 0x7097, 0x0029, 0x2069, 0x196b, 0x2d04,
- 0x7002, 0x080c, 0x7423, 0x6028, 0x9085, 0x0600, 0x602a, 0x00b0,
- 0x7097, 0x0029, 0x2069, 0x196b, 0x2d04, 0x7002, 0x6028, 0x9085,
- 0x0600, 0x602a, 0x00e6, 0x0036, 0x0046, 0x0056, 0x2071, 0x1a41,
- 0x080c, 0x199b, 0x005e, 0x004e, 0x003e, 0x00ee, 0x00de, 0x0005,
- 0x00d6, 0x2069, 0x0200, 0x6804, 0x9005, 0x1178, 0x6808, 0x9005,
- 0x1160, 0x7097, 0x0029, 0x2069, 0x196b, 0x2d04, 0x7002, 0x080c,
- 0x74c7, 0x6028, 0x9085, 0x0600, 0x602a, 0x00de, 0x0005, 0x0006,
- 0x2001, 0x0090, 0x080c, 0x2b65, 0x000e, 0x6124, 0xd1e4, 0x1190,
- 0x080c, 0x7158, 0xd1d4, 0x1160, 0xd1dc, 0x1138, 0xd1cc, 0x0150,
- 0x7097, 0x0020, 0x080c, 0x7158, 0x0028, 0x7097, 0x001d, 0x0010,
- 0x7097, 0x001f, 0x0005, 0x2001, 0x0088, 0x080c, 0x2b65, 0x6124,
- 0xd1cc, 0x11e8, 0xd1dc, 0x11c0, 0xd1e4, 0x1198, 0x9184, 0x1e00,
- 0x11d8, 0x080c, 0x19c8, 0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e,
- 0x080c, 0x7311, 0x2001, 0x0080, 0x080c, 0x2b65, 0x7097, 0x0029,
- 0x0058, 0x7097, 0x001e, 0x0040, 0x7097, 0x001d, 0x0028, 0x7097,
- 0x0020, 0x0010, 0x7097, 0x001f, 0x0005, 0x080c, 0x19c8, 0x60e3,
- 0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c, 0x7311, 0x2001, 0x0080,
- 0x080c, 0x2b65, 0x6124, 0xd1d4, 0x1198, 0xd1dc, 0x1170, 0xd1e4,
- 0x1148, 0x9184, 0x1e00, 0x1118, 0x7097, 0x0029, 0x0058, 0x7097,
- 0x0028, 0x0040, 0x7097, 0x001e, 0x0028, 0x7097, 0x001d, 0x0010,
- 0x7097, 0x001f, 0x0005, 0x6124, 0xd1d4, 0x1180, 0xd1dc, 0x1158,
- 0xd1e4, 0x1130, 0x9184, 0x1e00, 0x1158, 0x7097, 0x0029, 0x0040,
- 0x7097, 0x001e, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097, 0x001f,
- 0x0005, 0x2001, 0x00a0, 0x080c, 0x2b65, 0x6124, 0xd1dc, 0x1138,
- 0xd1e4, 0x0138, 0x080c, 0x19c8, 0x7097, 0x001e, 0x0010, 0x7097,
- 0x001d, 0x0005, 0x080c, 0x71db, 0x6124, 0xd1dc, 0x1188, 0x080c,
- 0x7158, 0x0016, 0x080c, 0x19c8, 0x001e, 0xd1d4, 0x1128, 0xd1e4,
- 0x0138, 0x7097, 0x001e, 0x0020, 0x7097, 0x001f, 0x080c, 0x7158,
- 0x0005, 0x0006, 0x2001, 0x00a0, 0x080c, 0x2b65, 0x000e, 0x6124,
- 0xd1d4, 0x1160, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140,
- 0x7097, 0x001e, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097, 0x0021,
- 0x0005, 0x080c, 0x71db, 0x6124, 0xd1d4, 0x1150, 0xd1dc, 0x1128,
- 0xd1e4, 0x0140, 0x7097, 0x001e, 0x0028, 0x7097, 0x001d, 0x0010,
- 0x7097, 0x001f, 0x0005, 0x0006, 0x2001, 0x0090, 0x080c, 0x2b65,
- 0x000e, 0x6124, 0xd1d4, 0x1178, 0xd1cc, 0x1150, 0xd1dc, 0x1128,
- 0xd1e4, 0x0158, 0x7097, 0x001e, 0x0040, 0x7097, 0x001d, 0x0028,
- 0x7097, 0x0020, 0x0010, 0x7097, 0x001f, 0x0005, 0x0016, 0x00c6,
- 0x00d6, 0x00e6, 0x0126, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071,
- 0x1800, 0x2091, 0x8000, 0x080c, 0x72e5, 0x11d8, 0x2001, 0x180c,
- 0x200c, 0xd1b4, 0x01b0, 0xc1b4, 0x2102, 0x6027, 0x0200, 0x080c,
- 0x2a8d, 0x6024, 0xd0cc, 0x0148, 0x2001, 0x00a0, 0x080c, 0x2b65,
- 0x080c, 0x75dc, 0x080c, 0x5ef6, 0x0428, 0x6028, 0xc0cd, 0x602a,
- 0x0408, 0x080c, 0x72ff, 0x0150, 0x080c, 0x72f6, 0x1138, 0x2001,
- 0x0001, 0x080c, 0x264c, 0x080c, 0x72bd, 0x00a0, 0x080c, 0x71d8,
- 0x0178, 0x2001, 0x0001, 0x080c, 0x264c, 0x7094, 0x9086, 0x001e,
- 0x0120, 0x7094, 0x9086, 0x0022, 0x1118, 0x7097, 0x0025, 0x0010,
- 0x7097, 0x0021, 0x012e, 0x00ee, 0x00de, 0x00ce, 0x001e, 0x0005,
- 0x0026, 0x2011, 0x7169, 0x080c, 0x8474, 0x002e, 0x0016, 0x0026,
- 0x2009, 0x0064, 0x2011, 0x7169, 0x080c, 0x846b, 0x002e, 0x001e,
- 0x0005, 0x00e6, 0x00f6, 0x0016, 0x080c, 0x9623, 0x2071, 0x1800,
- 0x080c, 0x7106, 0x001e, 0x00fe, 0x00ee, 0x0005, 0x0016, 0x0026,
- 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0126, 0x2071, 0x1800,
- 0x080c, 0x9623, 0x2061, 0x0100, 0x2069, 0x0140, 0x2091, 0x8000,
- 0x6028, 0xc09c, 0x602a, 0x2011, 0x0003, 0x080c, 0x99d6, 0x2011,
- 0x0002, 0x080c, 0x99e0, 0x080c, 0x98ee, 0x080c, 0x8420, 0x0036,
- 0x901e, 0x080c, 0x9964, 0x003e, 0x60e3, 0x0000, 0x080c, 0xd33c,
- 0x080c, 0xd373, 0x2009, 0x0004, 0x080c, 0x2a93, 0x080c, 0x29ae,
- 0x2001, 0x1800, 0x2003, 0x0004, 0x6027, 0x0008, 0x2011, 0x7169,
- 0x080c, 0x8474, 0x080c, 0x72ff, 0x0118, 0x9006, 0x080c, 0x2b65,
- 0x080c, 0x0b9e, 0x2001, 0x0001, 0x080c, 0x264c, 0x012e, 0x00fe,
- 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x0005, 0x0026,
- 0x00e6, 0x2011, 0x7176, 0x2071, 0x19d7, 0x701c, 0x9206, 0x1118,
- 0x7018, 0x9005, 0x0110, 0x9085, 0x0001, 0x00ee, 0x002e, 0x0005,
- 0x6020, 0xd09c, 0x0005, 0x6800, 0x9084, 0xfffe, 0x9086, 0x00c0,
- 0x0170, 0x2001, 0x00c0, 0x080c, 0x2b65, 0x0156, 0x20a9, 0x002d,
- 0x1d04, 0x71e8, 0x2091, 0x6000, 0x1f04, 0x71e8, 0x015e, 0x0005,
- 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071,
- 0x1800, 0x080c, 0x75eb, 0x2001, 0x194a, 0x2003, 0x0000, 0x9006,
- 0x7096, 0x60e2, 0x6886, 0x080c, 0x2713, 0x9006, 0x080c, 0x2b65,
- 0x080c, 0x5db5, 0x6027, 0xffff, 0x602b, 0x182f, 0x00ee, 0x00de,
- 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069,
- 0x0140, 0x2071, 0x1800, 0x2001, 0x195a, 0x200c, 0x9186, 0x0000,
- 0x0158, 0x9186, 0x0001, 0x0158, 0x9186, 0x0002, 0x0158, 0x9186,
- 0x0003, 0x0158, 0x0804, 0x72ad, 0x7097, 0x0022, 0x0040, 0x7097,
- 0x0021, 0x0028, 0x7097, 0x0023, 0x0010, 0x7097, 0x0024, 0x60e3,
- 0x0000, 0x6887, 0x0000, 0x2001, 0x0001, 0x080c, 0x2713, 0x0026,
- 0x080c, 0x9e89, 0x002e, 0x7000, 0x908e, 0x0004, 0x0118, 0x602b,
- 0x0028, 0x0010, 0x602b, 0x0020, 0x0156, 0x0126, 0x2091, 0x8000,
- 0x20a9, 0x0005, 0x6024, 0xd0ac, 0x0150, 0x012e, 0x015e, 0x080c,
- 0xbef8, 0x0118, 0x9006, 0x080c, 0x2b8f, 0x0804, 0x72b9, 0x6800,
- 0x9084, 0x00a1, 0xc0bd, 0x6802, 0x080c, 0x2a8d, 0x6904, 0xd1d4,
- 0x1140, 0x2001, 0x0100, 0x080c, 0x2b65, 0x1f04, 0x7252, 0x080c,
- 0x733a, 0x012e, 0x015e, 0x080c, 0x72f6, 0x01d0, 0x6044, 0x9005,
- 0x0190, 0x2011, 0x0114, 0x2204, 0x9085, 0x0100, 0x2012, 0x6050,
- 0x2008, 0x9085, 0x0020, 0x6052, 0x080c, 0x733a, 0x9006, 0x8001,
- 0x1df0, 0x6152, 0x0028, 0x6804, 0xd0d4, 0x1110, 0x080c, 0x733a,
- 0x080c, 0xbef8, 0x0118, 0x9006, 0x080c, 0x2b8f, 0x0016, 0x0026,
- 0x7000, 0x908e, 0x0004, 0x0130, 0x2009, 0x00c8, 0x2011, 0x7176,
- 0x080c, 0x8432, 0x002e, 0x001e, 0x080c, 0x823c, 0x7034, 0xc085,
- 0x7036, 0x2001, 0x195a, 0x2003, 0x0004, 0x080c, 0x6fb9, 0x080c,
- 0x72f6, 0x0138, 0x6804, 0xd0d4, 0x1120, 0xd0dc, 0x1100, 0x080c,
- 0x75e1, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6, 0x00e6,
- 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x080c, 0x8253,
- 0x080c, 0x8245, 0x080c, 0x75eb, 0x2001, 0x194a, 0x2003, 0x0000,
- 0x9006, 0x7096, 0x60e2, 0x6886, 0x080c, 0x2713, 0x9006, 0x080c,
- 0x2b65, 0x6043, 0x0090, 0x6043, 0x0010, 0x6027, 0xffff, 0x602b,
- 0x182f, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x0006, 0x2001, 0x1959,
- 0x2004, 0x9086, 0xaaaa, 0x000e, 0x0005, 0x0006, 0x080c, 0x55ab,
- 0x9084, 0x0030, 0x9086, 0x0000, 0x000e, 0x0005, 0x0006, 0x080c,
- 0x55ab, 0x9084, 0x0030, 0x9086, 0x0030, 0x000e, 0x0005, 0x0006,
- 0x080c, 0x55ab, 0x9084, 0x0030, 0x9086, 0x0010, 0x000e, 0x0005,
- 0x0006, 0x080c, 0x55ab, 0x9084, 0x0030, 0x9086, 0x0020, 0x000e,
- 0x0005, 0x0036, 0x0016, 0x2001, 0x180c, 0x2004, 0x908c, 0x0013,
- 0x0170, 0x9084, 0x0011, 0x0120, 0x080c, 0x2733, 0x900e, 0x0008,
- 0x900e, 0x2019, 0x0028, 0x080c, 0x3037, 0x9006, 0x0019, 0x001e,
- 0x003e, 0x0005, 0x00e6, 0x2071, 0x180c, 0x2e04, 0x0130, 0x080c,
- 0xbef1, 0x1128, 0x9085, 0x0010, 0x0010, 0x9084, 0xffef, 0x2072,
- 0x00ee, 0x0005, 0x6050, 0x0006, 0x60ec, 0x0006, 0x600c, 0x0006,
- 0x6004, 0x0006, 0x6028, 0x0006, 0x0016, 0x6138, 0x6050, 0x9084,
- 0xfbff, 0x9085, 0x2000, 0x6052, 0x613a, 0x20a9, 0x0012, 0x1d04,
- 0x734f, 0x2091, 0x6000, 0x1f04, 0x734f, 0x602f, 0x0100, 0x602f,
- 0x0000, 0x6050, 0x9085, 0x0400, 0x9084, 0xdfff, 0x6052, 0x613a,
- 0x001e, 0x602f, 0x0040, 0x602f, 0x0000, 0x000e, 0x602a, 0x000e,
- 0x6006, 0x000e, 0x600e, 0x000e, 0x60ee, 0x60e3, 0x0000, 0x6887,
- 0x0001, 0x2001, 0x0001, 0x080c, 0x2713, 0x2001, 0x00a0, 0x0006,
- 0x080c, 0xbef8, 0x000e, 0x0130, 0x080c, 0x2b83, 0x9006, 0x080c,
- 0x2b8f, 0x0010, 0x080c, 0x2b65, 0x000e, 0x6052, 0x6050, 0x0006,
- 0xc0e5, 0x6052, 0x00f6, 0x2079, 0x0100, 0x080c, 0x2a02, 0x00fe,
- 0x000e, 0x6052, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6,
- 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800,
- 0x6020, 0x9084, 0x0080, 0x0138, 0x2001, 0x180c, 0x200c, 0xc1c5,
- 0x2102, 0x0804, 0x7415, 0x2001, 0x180c, 0x200c, 0xc1c4, 0x2102,
- 0x6028, 0x9084, 0xe1ff, 0x602a, 0x6027, 0x0200, 0x2001, 0x0090,
- 0x080c, 0x2b65, 0x20a9, 0x0366, 0x6024, 0xd0cc, 0x1518, 0x1d04,
- 0x73bc, 0x2091, 0x6000, 0x1f04, 0x73bc, 0x2011, 0x0003, 0x080c,
- 0x99d6, 0x2011, 0x0002, 0x080c, 0x99e0, 0x080c, 0x98ee, 0x901e,
- 0x080c, 0x9964, 0x2001, 0x00a0, 0x080c, 0x2b65, 0x080c, 0x75dc,
- 0x080c, 0x5ef6, 0x080c, 0xbef8, 0x0110, 0x080c, 0x0d34, 0x9085,
- 0x0001, 0x04c8, 0x080c, 0x19c8, 0x60e3, 0x0000, 0x2001, 0x180d,
- 0x2004, 0xd08c, 0x2001, 0x0002, 0x1118, 0x2001, 0x194a, 0x2004,
- 0x080c, 0x2713, 0x60e2, 0x2001, 0x0080, 0x080c, 0x2b65, 0x20a9,
- 0x0366, 0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c, 0x2a8d, 0x6024,
- 0x910c, 0x0140, 0x1d04, 0x73f9, 0x2091, 0x6000, 0x1f04, 0x73f9,
- 0x0804, 0x73c5, 0x6028, 0x9085, 0x1e00, 0x602a, 0x70b0, 0x9005,
- 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x080c, 0xbef8, 0x0110,
- 0x080c, 0x0d34, 0x9006, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e,
- 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6,
- 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x7000, 0x9086,
- 0x0003, 0x1168, 0x2001, 0x020b, 0x2004, 0x9084, 0x5540, 0x9086,
- 0x5540, 0x1128, 0x2069, 0x1a57, 0x2d04, 0x8000, 0x206a, 0x2069,
- 0x0140, 0x6020, 0x9084, 0x00c0, 0x0120, 0x6884, 0x9005, 0x1904,
- 0x7488, 0x2001, 0x0088, 0x080c, 0x2b65, 0x9006, 0x60e2, 0x6886,
- 0x080c, 0x2713, 0x2069, 0x0200, 0x6804, 0x9005, 0x1118, 0x6808,
- 0x9005, 0x01c0, 0x6028, 0x9084, 0xfbff, 0x602a, 0x6027, 0x0400,
- 0x2069, 0x196b, 0x7000, 0x206a, 0x7097, 0x0026, 0x7003, 0x0001,
- 0x20a9, 0x0002, 0x1d04, 0x746a, 0x2091, 0x6000, 0x1f04, 0x746a,
- 0x0804, 0x74bf, 0x2069, 0x0140, 0x20a9, 0x0384, 0x6027, 0x1e00,
- 0x2009, 0x1e00, 0x080c, 0x2a8d, 0x6024, 0x910c, 0x0508, 0x9084,
- 0x1a00, 0x11f0, 0x1d04, 0x7476, 0x2091, 0x6000, 0x1f04, 0x7476,
- 0x2011, 0x0003, 0x080c, 0x99d6, 0x2011, 0x0002, 0x080c, 0x99e0,
- 0x080c, 0x98ee, 0x901e, 0x080c, 0x9964, 0x2001, 0x00a0, 0x080c,
- 0x2b65, 0x080c, 0x75dc, 0x080c, 0x5ef6, 0x9085, 0x0001, 0x00f8,
- 0x080c, 0x19c8, 0x2001, 0x0080, 0x080c, 0x2b65, 0x2069, 0x0140,
- 0x60e3, 0x0000, 0x70b0, 0x9005, 0x1118, 0x6887, 0x0001, 0x0008,
- 0x6886, 0x2001, 0x180d, 0x2004, 0xd08c, 0x2001, 0x0002, 0x1118,
- 0x2001, 0x194a, 0x2004, 0x080c, 0x2713, 0x60e2, 0x9006, 0x00ee,
- 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156,
- 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100,
- 0x2071, 0x1800, 0x6020, 0x9084, 0x00c0, 0x01c8, 0x2011, 0x0003,
- 0x080c, 0x99d6, 0x2011, 0x0002, 0x080c, 0x99e0, 0x080c, 0x98ee,
- 0x901e, 0x080c, 0x9964, 0x2069, 0x0140, 0x2001, 0x00a0, 0x080c,
- 0x2b65, 0x080c, 0x75dc, 0x080c, 0x5ef6, 0x0804, 0x7561, 0x2001,
- 0x180c, 0x200c, 0xd1b4, 0x1160, 0xc1b5, 0x2102, 0x080c, 0x715e,
- 0x2069, 0x0140, 0x2001, 0x0080, 0x080c, 0x2b65, 0x60e3, 0x0000,
- 0x2069, 0x0200, 0x6804, 0x9005, 0x1118, 0x6808, 0x9005, 0x0180,
- 0x6028, 0x9084, 0xfdff, 0x602a, 0x6027, 0x0200, 0x2069, 0x196b,
- 0x7000, 0x206a, 0x7097, 0x0027, 0x7003, 0x0001, 0x0804, 0x7561,
- 0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c, 0x2a8d, 0x6024, 0x910c,
- 0x01c8, 0x9084, 0x1c00, 0x11b0, 0x1d04, 0x7518, 0x0006, 0x0016,
- 0x00c6, 0x00d6, 0x00e6, 0x080c, 0x829f, 0x00ee, 0x00de, 0x00ce,
- 0x001e, 0x000e, 0x00e6, 0x2071, 0x19d7, 0x7078, 0x00ee, 0x9005,
- 0x19f8, 0x0438, 0x0026, 0x2011, 0x7176, 0x080c, 0x835e, 0x2011,
- 0x7169, 0x080c, 0x8474, 0x002e, 0x2069, 0x0140, 0x60e3, 0x0000,
- 0x70b0, 0x9005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886, 0x2001,
- 0x180d, 0x2004, 0xd08c, 0x2001, 0x0002, 0x1118, 0x2001, 0x194a,
- 0x2004, 0x080c, 0x2713, 0x60e2, 0x2001, 0x180c, 0x200c, 0xc1b4,
- 0x2102, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e,
- 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x0046, 0x00c6, 0x00e6,
- 0x2061, 0x0100, 0x2071, 0x1800, 0x080c, 0xbef1, 0x1904, 0x75ca,
- 0x7130, 0xd18c, 0x1150, 0x080c, 0x31c0, 0x0118, 0xc18d, 0x7132,
- 0x0020, 0x7030, 0xd08c, 0x0904, 0x75ca, 0x2011, 0x185f, 0x220c,
- 0xd1a4, 0x0538, 0x0016, 0x2019, 0x000e, 0x080c, 0xd0d7, 0x0156,
- 0x00b6, 0x20a9, 0x007f, 0x900e, 0x9186, 0x007e, 0x01a0, 0x9186,
- 0x0080, 0x0188, 0x080c, 0x6411, 0x1170, 0x2120, 0x9006, 0x0016,
- 0x2009, 0x000e, 0x080c, 0xd156, 0x2009, 0x0001, 0x2011, 0x0100,
- 0x080c, 0x8532, 0x001e, 0x8108, 0x1f04, 0x7594, 0x00be, 0x015e,
- 0x001e, 0xd1ac, 0x1140, 0x0016, 0x900e, 0x2019, 0x0004, 0x080c,
- 0x3037, 0x001e, 0x0078, 0x0156, 0x00b6, 0x20a9, 0x007f, 0x900e,
- 0x080c, 0x6411, 0x1110, 0x080c, 0x5f10, 0x8108, 0x1f04, 0x75c0,
- 0x00be, 0x015e, 0x080c, 0x19c8, 0x080c, 0x9e89, 0x60e3, 0x0000,
- 0x080c, 0x5ef6, 0x080c, 0x7212, 0x00ee, 0x00ce, 0x004e, 0x003e,
- 0x002e, 0x001e, 0x015e, 0x0005, 0x2001, 0x195a, 0x2003, 0x0001,
- 0x0005, 0x2001, 0x195a, 0x2003, 0x0000, 0x0005, 0x2001, 0x1959,
- 0x2003, 0xaaaa, 0x0005, 0x2001, 0x1959, 0x2003, 0x0000, 0x0005,
- 0x2071, 0x18fb, 0x7003, 0x0000, 0x7007, 0x0000, 0x080c, 0x101a,
- 0x090c, 0x0dc4, 0xa8af, 0xdcb0, 0x2900, 0x704e, 0x080c, 0x101a,
- 0x090c, 0x0dc4, 0xa8af, 0xdcb0, 0x2900, 0x7052, 0xa86b, 0x0000,
+ 0xd084, 0x190c, 0x11a9, 0x00fe, 0x0005, 0x782c, 0x9094, 0x0780,
+ 0x190c, 0x6f4a, 0xd0a4, 0x0db8, 0x00e6, 0x2071, 0x1800, 0x7824,
+ 0x2048, 0x702c, 0xa802, 0x2900, 0x702e, 0x70bc, 0x8000, 0x70be,
+ 0x080c, 0x83a7, 0x782c, 0x9094, 0x0780, 0x190c, 0x6f4a, 0xd0a4,
+ 0x1d70, 0x00d6, 0x2069, 0x0050, 0x693c, 0x2069, 0x1925, 0x6808,
+ 0x690a, 0x2069, 0x19d7, 0x9102, 0x1118, 0x6844, 0x9005, 0x1320,
+ 0x2001, 0x1926, 0x200c, 0x6946, 0x00de, 0x00ee, 0x00fe, 0x0005,
+ 0x7094, 0x908a, 0x002a, 0x1a0c, 0x0dc3, 0x9082, 0x001d, 0x001b,
+ 0x6027, 0x1e00, 0x0005, 0x7101, 0x706e, 0x708a, 0x70b4, 0x70f0,
+ 0x7130, 0x7142, 0x708a, 0x7118, 0x7029, 0x7057, 0x70da, 0x7028,
+ 0x0005, 0x00d6, 0x2069, 0x0200, 0x6804, 0x9005, 0x1180, 0x6808,
+ 0x9005, 0x1518, 0x7097, 0x0029, 0x2069, 0x196b, 0x2d04, 0x7002,
+ 0x080c, 0x748e, 0x6028, 0x9085, 0x0600, 0x602a, 0x00b0, 0x7097,
+ 0x0029, 0x2069, 0x196b, 0x2d04, 0x7002, 0x6028, 0x9085, 0x0600,
+ 0x602a, 0x00e6, 0x0036, 0x0046, 0x0056, 0x2071, 0x1a41, 0x080c,
+ 0x19e3, 0x005e, 0x004e, 0x003e, 0x00ee, 0x00de, 0x0005, 0x00d6,
+ 0x2069, 0x0200, 0x6804, 0x9005, 0x1178, 0x6808, 0x9005, 0x1160,
+ 0x7097, 0x0029, 0x2069, 0x196b, 0x2d04, 0x7002, 0x080c, 0x7532,
+ 0x6028, 0x9085, 0x0600, 0x602a, 0x00de, 0x0005, 0x0006, 0x2001,
+ 0x0090, 0x080c, 0x2bce, 0x000e, 0x6124, 0xd1e4, 0x1190, 0x080c,
+ 0x71af, 0xd1d4, 0x1160, 0xd1dc, 0x1138, 0xd1cc, 0x0150, 0x7097,
+ 0x0020, 0x080c, 0x71af, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097,
+ 0x001f, 0x0005, 0x2001, 0x0088, 0x080c, 0x2bce, 0x6124, 0xd1cc,
+ 0x11e8, 0xd1dc, 0x11c0, 0xd1e4, 0x1198, 0x9184, 0x1e00, 0x11d8,
+ 0x080c, 0x1a10, 0x60e3, 0x0001, 0x600c, 0xc0b4, 0x600e, 0x080c,
+ 0x737d, 0x2001, 0x0080, 0x080c, 0x2bce, 0x7097, 0x0029, 0x0058,
+ 0x7097, 0x001e, 0x0040, 0x7097, 0x001d, 0x0028, 0x7097, 0x0020,
+ 0x0010, 0x7097, 0x001f, 0x0005, 0x080c, 0x1a10, 0x60e3, 0x0001,
+ 0x600c, 0xc0b4, 0x600e, 0x080c, 0x737d, 0x2001, 0x0080, 0x080c,
+ 0x2bce, 0x6124, 0xd1d4, 0x1198, 0xd1dc, 0x1170, 0xd1e4, 0x1148,
+ 0x9184, 0x1e00, 0x1118, 0x7097, 0x0029, 0x0058, 0x7097, 0x0028,
+ 0x0040, 0x7097, 0x001e, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097,
+ 0x001f, 0x0005, 0x6124, 0xd1d4, 0x1180, 0xd1dc, 0x1158, 0xd1e4,
+ 0x1130, 0x9184, 0x1e00, 0x1158, 0x7097, 0x0029, 0x0040, 0x7097,
+ 0x001e, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097, 0x001f, 0x0005,
+ 0x2001, 0x00a0, 0x080c, 0x2bce, 0x6124, 0xd1dc, 0x1138, 0xd1e4,
+ 0x0138, 0x080c, 0x1a10, 0x7097, 0x001e, 0x0010, 0x7097, 0x001d,
+ 0x0005, 0x080c, 0x7232, 0x6124, 0xd1dc, 0x1188, 0x080c, 0x71af,
+ 0x0016, 0x080c, 0x1a10, 0x001e, 0xd1d4, 0x1128, 0xd1e4, 0x0138,
+ 0x7097, 0x001e, 0x0020, 0x7097, 0x001f, 0x080c, 0x71af, 0x0005,
+ 0x0006, 0x2001, 0x00a0, 0x080c, 0x2bce, 0x000e, 0x6124, 0xd1d4,
+ 0x1160, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4, 0x0140, 0x7097,
+ 0x001e, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097, 0x0021, 0x0005,
+ 0x080c, 0x7232, 0x6124, 0xd1d4, 0x1150, 0xd1dc, 0x1128, 0xd1e4,
+ 0x0140, 0x7097, 0x001e, 0x0028, 0x7097, 0x001d, 0x0010, 0x7097,
+ 0x001f, 0x0005, 0x0006, 0x2001, 0x0090, 0x080c, 0x2bce, 0x000e,
+ 0x6124, 0xd1d4, 0x1178, 0xd1cc, 0x1150, 0xd1dc, 0x1128, 0xd1e4,
+ 0x0158, 0x7097, 0x001e, 0x0040, 0x7097, 0x001d, 0x0028, 0x7097,
+ 0x0020, 0x0010, 0x7097, 0x001f, 0x0005, 0x0016, 0x00c6, 0x00d6,
+ 0x00e6, 0x0126, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800,
+ 0x2091, 0x8000, 0x080c, 0x7351, 0x11d8, 0x2001, 0x180c, 0x200c,
+ 0xd1b4, 0x01b0, 0xc1b4, 0x2102, 0x6027, 0x0200, 0x080c, 0x2af6,
+ 0x6024, 0xd0cc, 0x0148, 0x2001, 0x00a0, 0x080c, 0x2bce, 0x080c,
+ 0x764c, 0x080c, 0x5fb3, 0x0428, 0x6028, 0xc0cd, 0x602a, 0x0408,
+ 0x080c, 0x736b, 0x0150, 0x080c, 0x7362, 0x1138, 0x2001, 0x0001,
+ 0x080c, 0x26b1, 0x080c, 0x7329, 0x00a0, 0x080c, 0x722f, 0x0178,
+ 0x2001, 0x0001, 0x080c, 0x26b1, 0x7094, 0x9086, 0x001e, 0x0120,
+ 0x7094, 0x9086, 0x0022, 0x1118, 0x7097, 0x0025, 0x0010, 0x7097,
+ 0x0021, 0x012e, 0x00ee, 0x00de, 0x00ce, 0x001e, 0x0005, 0x0026,
+ 0x2011, 0x71c0, 0x080c, 0x85e0, 0x002e, 0x0016, 0x0026, 0x2009,
+ 0x0064, 0x2011, 0x71c0, 0x080c, 0x85d7, 0x002e, 0x001e, 0x0005,
+ 0x00e6, 0x00f6, 0x0016, 0x080c, 0x98d1, 0x2071, 0x1800, 0x080c,
+ 0x715d, 0x001e, 0x00fe, 0x00ee, 0x0005, 0x0016, 0x0026, 0x0036,
+ 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0126, 0x2071, 0x1800, 0x080c,
+ 0x98d1, 0x2061, 0x0100, 0x2069, 0x0140, 0x2091, 0x8000, 0x6028,
+ 0xc09c, 0x602a, 0x2011, 0x0003, 0x080c, 0x9ca7, 0x2011, 0x0002,
+ 0x080c, 0x9cb1, 0x080c, 0x9bbf, 0x080c, 0x858c, 0x0036, 0x901e,
+ 0x080c, 0x9c35, 0x003e, 0x60e3, 0x0000, 0x080c, 0xe0c9, 0x080c,
+ 0xe100, 0x2009, 0x0004, 0x080c, 0x2afc, 0x080c, 0x2a17, 0x2001,
+ 0x1800, 0x2003, 0x0004, 0x6027, 0x0008, 0x2011, 0x71c0, 0x080c,
+ 0x85e0, 0x080c, 0x736b, 0x0118, 0x9006, 0x080c, 0x2bce, 0x080c,
+ 0x0b9e, 0x2001, 0x0001, 0x080c, 0x26b1, 0x012e, 0x00fe, 0x00ee,
+ 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e, 0x0005, 0x0026, 0x00e6,
+ 0x2011, 0x71cd, 0x2071, 0x19d7, 0x701c, 0x9206, 0x1118, 0x7018,
+ 0x9005, 0x0110, 0x9085, 0x0001, 0x00ee, 0x002e, 0x0005, 0x6020,
+ 0xd09c, 0x0005, 0x6800, 0x9084, 0xfffe, 0x9086, 0x00c0, 0x01b8,
+ 0x2001, 0x00c0, 0x080c, 0x2bce, 0x0156, 0x20a9, 0x002d, 0x1d04,
+ 0x723f, 0x2091, 0x6000, 0x1f04, 0x723f, 0x015e, 0x00d6, 0x2069,
+ 0x1800, 0x6898, 0x8001, 0x0220, 0x0118, 0x689a, 0x00de, 0x0005,
+ 0x689b, 0x0014, 0x68e4, 0xd0dc, 0x0dc8, 0x6800, 0x9086, 0x0001,
+ 0x1da8, 0x080c, 0x85ec, 0x0c90, 0x00c6, 0x00d6, 0x00e6, 0x2061,
+ 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x080c, 0x765b, 0x2001,
+ 0x1949, 0x2003, 0x0000, 0x9006, 0x7096, 0x60e2, 0x6886, 0x080c,
+ 0x277c, 0x9006, 0x080c, 0x2bce, 0x080c, 0x5e72, 0x6027, 0xffff,
+ 0x602b, 0x182f, 0x00ee, 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00d6,
+ 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140, 0x2071, 0x1800, 0x2001,
+ 0x1959, 0x200c, 0x9186, 0x0000, 0x0158, 0x9186, 0x0001, 0x0158,
+ 0x9186, 0x0002, 0x0158, 0x9186, 0x0003, 0x0158, 0x0804, 0x7319,
+ 0x7097, 0x0022, 0x0040, 0x7097, 0x0021, 0x0028, 0x7097, 0x0023,
+ 0x0010, 0x7097, 0x0024, 0x60e3, 0x0000, 0x6887, 0x0000, 0x2001,
+ 0x0001, 0x080c, 0x277c, 0x0026, 0x080c, 0xa30e, 0x002e, 0x7000,
+ 0x908e, 0x0004, 0x0118, 0x602b, 0x0028, 0x0010, 0x602b, 0x0020,
+ 0x0156, 0x0126, 0x2091, 0x8000, 0x20a9, 0x0005, 0x6024, 0xd0ac,
+ 0x0150, 0x012e, 0x015e, 0x080c, 0xc8ce, 0x0118, 0x9006, 0x080c,
+ 0x2bf8, 0x0804, 0x7325, 0x6800, 0x9084, 0x00a1, 0xc0bd, 0x6802,
+ 0x080c, 0x2af6, 0x6904, 0xd1d4, 0x1140, 0x2001, 0x0100, 0x080c,
+ 0x2bce, 0x1f04, 0x72be, 0x080c, 0x73a5, 0x012e, 0x015e, 0x080c,
+ 0x7362, 0x01d0, 0x6044, 0x9005, 0x0190, 0x2011, 0x0114, 0x2204,
+ 0x9085, 0x0100, 0x2012, 0x6050, 0x2008, 0x9085, 0x0020, 0x6052,
+ 0x080c, 0x73a5, 0x9006, 0x8001, 0x1df0, 0x6152, 0x0028, 0x6804,
+ 0xd0d4, 0x1110, 0x080c, 0x73a5, 0x080c, 0xc8ce, 0x0118, 0x9006,
+ 0x080c, 0x2bf8, 0x0016, 0x0026, 0x7000, 0x908e, 0x0004, 0x0130,
+ 0x2009, 0x00c8, 0x2011, 0x71cd, 0x080c, 0x859e, 0x002e, 0x001e,
+ 0x080c, 0x839e, 0x7034, 0xc085, 0x7036, 0x2001, 0x1959, 0x2003,
+ 0x0004, 0x080c, 0x7010, 0x080c, 0x7362, 0x0138, 0x6804, 0xd0d4,
+ 0x1120, 0xd0dc, 0x1100, 0x080c, 0x7651, 0x00ee, 0x00de, 0x00ce,
+ 0x0005, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069, 0x0140,
+ 0x2071, 0x1800, 0x080c, 0x83b5, 0x080c, 0x83a7, 0x080c, 0x765b,
+ 0x2001, 0x1949, 0x2003, 0x0000, 0x9006, 0x7096, 0x60e2, 0x6886,
+ 0x080c, 0x277c, 0x9006, 0x080c, 0x2bce, 0x6043, 0x0090, 0x6043,
+ 0x0010, 0x6027, 0xffff, 0x602b, 0x182f, 0x00ee, 0x00de, 0x00ce,
+ 0x0005, 0x0006, 0x2001, 0x1958, 0x2004, 0x9086, 0xaaaa, 0x000e,
+ 0x0005, 0x0006, 0x080c, 0x5668, 0x9084, 0x0030, 0x9086, 0x0000,
+ 0x000e, 0x0005, 0x0006, 0x080c, 0x5668, 0x9084, 0x0030, 0x9086,
+ 0x0030, 0x000e, 0x0005, 0x0006, 0x080c, 0x5668, 0x9084, 0x0030,
+ 0x9086, 0x0010, 0x000e, 0x0005, 0x0006, 0x080c, 0x5668, 0x9084,
+ 0x0030, 0x9086, 0x0020, 0x000e, 0x0005, 0x0036, 0x0016, 0x2001,
+ 0x180c, 0x2004, 0x908c, 0x0013, 0x0168, 0x0020, 0x080c, 0x279c,
+ 0x900e, 0x0010, 0x2009, 0x0002, 0x2019, 0x0028, 0x080c, 0x30cd,
+ 0x9006, 0x0019, 0x001e, 0x003e, 0x0005, 0x00e6, 0x2071, 0x180c,
+ 0x2e04, 0x0130, 0x080c, 0xc8c7, 0x1128, 0x9085, 0x0010, 0x0010,
+ 0x9084, 0xffef, 0x2072, 0x00ee, 0x0005, 0x6050, 0x0006, 0x60ec,
+ 0x0006, 0x600c, 0x0006, 0x6004, 0x0006, 0x6028, 0x0006, 0x0016,
+ 0x6138, 0x6050, 0x9084, 0xfbff, 0x9085, 0x2000, 0x6052, 0x613a,
+ 0x20a9, 0x0012, 0x1d04, 0x73ba, 0x2091, 0x6000, 0x1f04, 0x73ba,
+ 0x602f, 0x0100, 0x602f, 0x0000, 0x6050, 0x9085, 0x0400, 0x9084,
+ 0xdfff, 0x6052, 0x613a, 0x001e, 0x602f, 0x0040, 0x602f, 0x0000,
+ 0x000e, 0x602a, 0x000e, 0x6006, 0x000e, 0x600e, 0x000e, 0x60ee,
+ 0x60e3, 0x0000, 0x6887, 0x0001, 0x2001, 0x0001, 0x080c, 0x277c,
+ 0x2001, 0x00a0, 0x0006, 0x080c, 0xc8ce, 0x000e, 0x0130, 0x080c,
+ 0x2bec, 0x9006, 0x080c, 0x2bf8, 0x0010, 0x080c, 0x2bce, 0x000e,
+ 0x6052, 0x6050, 0x0006, 0xc0e5, 0x6052, 0x00f6, 0x2079, 0x0100,
+ 0x080c, 0x2a6b, 0x00fe, 0x000e, 0x6052, 0x0005, 0x0156, 0x0016,
+ 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2069,
+ 0x0140, 0x2071, 0x1800, 0x6020, 0x9084, 0x0080, 0x0138, 0x2001,
+ 0x180c, 0x200c, 0xc1c5, 0x2102, 0x0804, 0x7480, 0x2001, 0x180c,
+ 0x200c, 0xc1c4, 0x2102, 0x6028, 0x9084, 0xe1ff, 0x602a, 0x6027,
+ 0x0200, 0x2001, 0x0090, 0x080c, 0x2bce, 0x20a9, 0x0366, 0x6024,
+ 0xd0cc, 0x1518, 0x1d04, 0x7427, 0x2091, 0x6000, 0x1f04, 0x7427,
+ 0x2011, 0x0003, 0x080c, 0x9ca7, 0x2011, 0x0002, 0x080c, 0x9cb1,
+ 0x080c, 0x9bbf, 0x901e, 0x080c, 0x9c35, 0x2001, 0x00a0, 0x080c,
+ 0x2bce, 0x080c, 0x764c, 0x080c, 0x5fb3, 0x080c, 0xc8ce, 0x0110,
+ 0x080c, 0x0d31, 0x9085, 0x0001, 0x04c8, 0x080c, 0x1a10, 0x60e3,
+ 0x0000, 0x2001, 0x180d, 0x2004, 0xd08c, 0x2001, 0x0002, 0x1118,
+ 0x2001, 0x1949, 0x2004, 0x080c, 0x277c, 0x60e2, 0x2001, 0x0080,
+ 0x080c, 0x2bce, 0x20a9, 0x0366, 0x6027, 0x1e00, 0x2009, 0x1e00,
+ 0x080c, 0x2af6, 0x6024, 0x910c, 0x0140, 0x1d04, 0x7464, 0x2091,
+ 0x6000, 0x1f04, 0x7464, 0x0804, 0x7430, 0x6028, 0x9085, 0x1e00,
+ 0x602a, 0x70b0, 0x9005, 0x1118, 0x6887, 0x0001, 0x0008, 0x6886,
+ 0x080c, 0xc8ce, 0x0110, 0x080c, 0x0d31, 0x9006, 0x00ee, 0x00de,
+ 0x00ce, 0x003e, 0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016,
+ 0x0026, 0x0036, 0x00c6, 0x00d6, 0x00e6, 0x2061, 0x0100, 0x2071,
+ 0x1800, 0x7000, 0x9086, 0x0003, 0x1168, 0x2001, 0x020b, 0x2004,
+ 0x9084, 0x5540, 0x9086, 0x5540, 0x1128, 0x2069, 0x1a57, 0x2d04,
+ 0x8000, 0x206a, 0x2069, 0x0140, 0x6020, 0x9084, 0x00c0, 0x0120,
+ 0x6884, 0x9005, 0x1904, 0x74f3, 0x2001, 0x0088, 0x080c, 0x2bce,
+ 0x9006, 0x60e2, 0x6886, 0x080c, 0x277c, 0x2069, 0x0200, 0x6804,
+ 0x9005, 0x1118, 0x6808, 0x9005, 0x01c0, 0x6028, 0x9084, 0xfbff,
+ 0x602a, 0x6027, 0x0400, 0x2069, 0x196b, 0x7000, 0x206a, 0x7097,
+ 0x0026, 0x7003, 0x0001, 0x20a9, 0x0002, 0x1d04, 0x74d5, 0x2091,
+ 0x6000, 0x1f04, 0x74d5, 0x0804, 0x752a, 0x2069, 0x0140, 0x20a9,
+ 0x0384, 0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c, 0x2af6, 0x6024,
+ 0x910c, 0x0508, 0x9084, 0x1a00, 0x11f0, 0x1d04, 0x74e1, 0x2091,
+ 0x6000, 0x1f04, 0x74e1, 0x2011, 0x0003, 0x080c, 0x9ca7, 0x2011,
+ 0x0002, 0x080c, 0x9cb1, 0x080c, 0x9bbf, 0x901e, 0x080c, 0x9c35,
+ 0x2001, 0x00a0, 0x080c, 0x2bce, 0x080c, 0x764c, 0x080c, 0x5fb3,
+ 0x9085, 0x0001, 0x00f8, 0x080c, 0x1a10, 0x2001, 0x0080, 0x080c,
+ 0x2bce, 0x2069, 0x0140, 0x60e3, 0x0000, 0x70b0, 0x9005, 0x1118,
+ 0x6887, 0x0001, 0x0008, 0x6886, 0x2001, 0x180d, 0x2004, 0xd08c,
+ 0x2001, 0x0002, 0x1118, 0x2001, 0x1949, 0x2004, 0x080c, 0x277c,
+ 0x60e2, 0x9006, 0x00ee, 0x00de, 0x00ce, 0x003e, 0x002e, 0x001e,
+ 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036, 0x00c6, 0x00d6,
+ 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x6020, 0x9084, 0x00c0,
+ 0x01c8, 0x2011, 0x0003, 0x080c, 0x9ca7, 0x2011, 0x0002, 0x080c,
+ 0x9cb1, 0x080c, 0x9bbf, 0x901e, 0x080c, 0x9c35, 0x2069, 0x0140,
+ 0x2001, 0x00a0, 0x080c, 0x2bce, 0x080c, 0x764c, 0x080c, 0x5fb3,
+ 0x0804, 0x75cc, 0x2001, 0x180c, 0x200c, 0xd1b4, 0x1160, 0xc1b5,
+ 0x2102, 0x080c, 0x71b5, 0x2069, 0x0140, 0x2001, 0x0080, 0x080c,
+ 0x2bce, 0x60e3, 0x0000, 0x2069, 0x0200, 0x6804, 0x9005, 0x1118,
+ 0x6808, 0x9005, 0x0180, 0x6028, 0x9084, 0xfdff, 0x602a, 0x6027,
+ 0x0200, 0x2069, 0x196b, 0x7000, 0x206a, 0x7097, 0x0027, 0x7003,
+ 0x0001, 0x0804, 0x75cc, 0x6027, 0x1e00, 0x2009, 0x1e00, 0x080c,
+ 0x2af6, 0x6024, 0x910c, 0x01c8, 0x9084, 0x1c00, 0x11b0, 0x1d04,
+ 0x7583, 0x0006, 0x0016, 0x00c6, 0x00d6, 0x00e6, 0x080c, 0x8401,
+ 0x00ee, 0x00de, 0x00ce, 0x001e, 0x000e, 0x00e6, 0x2071, 0x19d7,
+ 0x7078, 0x00ee, 0x9005, 0x19f8, 0x0438, 0x0026, 0x2011, 0x71cd,
+ 0x080c, 0x84c2, 0x2011, 0x71c0, 0x080c, 0x85e0, 0x002e, 0x2069,
+ 0x0140, 0x60e3, 0x0000, 0x70b0, 0x9005, 0x1118, 0x6887, 0x0001,
+ 0x0008, 0x6886, 0x2001, 0x180d, 0x2004, 0xd08c, 0x2001, 0x0002,
+ 0x1118, 0x2001, 0x1949, 0x2004, 0x080c, 0x277c, 0x60e2, 0x2001,
+ 0x180c, 0x200c, 0xc1b4, 0x2102, 0x00ee, 0x00de, 0x00ce, 0x003e,
+ 0x002e, 0x001e, 0x015e, 0x0005, 0x0156, 0x0016, 0x0026, 0x0036,
+ 0x0046, 0x00c6, 0x00e6, 0x2061, 0x0100, 0x2071, 0x1800, 0x080c,
+ 0xc8c7, 0x1904, 0x763a, 0x7130, 0xd184, 0x1170, 0x080c, 0x325c,
+ 0x0138, 0xc18d, 0x7132, 0x2011, 0x185f, 0x2214, 0xd2ac, 0x1120,
+ 0x7030, 0xd08c, 0x0904, 0x763a, 0x2011, 0x185f, 0x220c, 0xd1a4,
+ 0x0538, 0x0016, 0x2019, 0x000e, 0x080c, 0xdc90, 0x0156, 0x00b6,
+ 0x20a9, 0x007f, 0x900e, 0x9186, 0x007e, 0x01a0, 0x9186, 0x0080,
+ 0x0188, 0x080c, 0x64fc, 0x1170, 0x2120, 0x9006, 0x0016, 0x2009,
+ 0x000e, 0x080c, 0xdd18, 0x2009, 0x0001, 0x2011, 0x0100, 0x080c,
+ 0x8703, 0x001e, 0x8108, 0x1f04, 0x7603, 0x00be, 0x015e, 0x001e,
+ 0xd1ac, 0x1148, 0x0016, 0x2009, 0x0002, 0x2019, 0x0004, 0x080c,
+ 0x30cd, 0x001e, 0x0078, 0x0156, 0x00b6, 0x20a9, 0x007f, 0x900e,
+ 0x080c, 0x64fc, 0x1110, 0x080c, 0x5fcd, 0x8108, 0x1f04, 0x7630,
+ 0x00be, 0x015e, 0x080c, 0x1a10, 0x080c, 0xa30e, 0x60e3, 0x0000,
+ 0x080c, 0x5fb3, 0x080c, 0x727e, 0x00ee, 0x00ce, 0x004e, 0x003e,
+ 0x002e, 0x001e, 0x015e, 0x0005, 0x2001, 0x1959, 0x2003, 0x0001,
+ 0x0005, 0x2001, 0x1959, 0x2003, 0x0000, 0x0005, 0x2001, 0x1958,
+ 0x2003, 0xaaaa, 0x0005, 0x2001, 0x1958, 0x2003, 0x0000, 0x0005,
+ 0x2071, 0x18fb, 0x7003, 0x0000, 0x7007, 0x0000, 0x080c, 0x1026,
+ 0x090c, 0x0dc3, 0xa8af, 0xdcb0, 0x2900, 0x704e, 0x080c, 0x1026,
+ 0x090c, 0x0dc3, 0xa8af, 0xdcb0, 0x2900, 0x7052, 0xa86b, 0x0000,
0xa86f, 0x0001, 0xa8a3, 0x0000, 0x0005, 0x00e6, 0x2071, 0x0040,
0x6848, 0x9005, 0x1118, 0x9085, 0x0001, 0x04b0, 0x6840, 0x9005,
0x0150, 0x04a1, 0x6a50, 0x9200, 0x7002, 0x6854, 0x9101, 0x7006,
@@ -3565,83 +3579,83 @@ static const uint16_t isp_2300_risc_code[] = {
0x6848, 0x701a, 0x701c, 0x9085, 0x0040, 0x701e, 0x2001, 0x001a,
0x7036, 0x702b, 0x0001, 0x2001, 0x0004, 0x200c, 0x918c, 0xfff7,
0x918d, 0x8000, 0x2102, 0x00d6, 0x2069, 0x18fb, 0x6807, 0x0001,
- 0x00de, 0x080c, 0x7bbd, 0x9006, 0x00ee, 0x0005, 0x900e, 0x0156,
+ 0x00de, 0x080c, 0x7c5d, 0x9006, 0x00ee, 0x0005, 0x900e, 0x0156,
0x20a9, 0x0006, 0x8003, 0x2011, 0x0100, 0x2214, 0x9296, 0x0008,
- 0x1110, 0x818d, 0x0010, 0x81f5, 0x3e08, 0x1f04, 0x7652, 0x015e,
- 0x0005, 0x2079, 0x0040, 0x2071, 0x18fb, 0x7004, 0x0002, 0x7671,
- 0x7672, 0x76aa, 0x7705, 0x7850, 0x766f, 0x766f, 0x787a, 0x080c,
- 0x0dc4, 0x0005, 0x2079, 0x0040, 0x782c, 0x908c, 0x0780, 0x190c,
- 0x7c49, 0xd0a4, 0x01f8, 0x7824, 0x2048, 0x9006, 0xa802, 0xa806,
+ 0x1110, 0x818d, 0x0010, 0x81f5, 0x3e08, 0x1f04, 0x76c2, 0x015e,
+ 0x0005, 0x2079, 0x0040, 0x2071, 0x18fb, 0x7004, 0x0002, 0x76e1,
+ 0x76e2, 0x771a, 0x7775, 0x78c0, 0x76df, 0x76df, 0x78ea, 0x080c,
+ 0x0dc3, 0x0005, 0x2079, 0x0040, 0x782c, 0x908c, 0x0780, 0x190c,
+ 0x7ce9, 0xd0a4, 0x01f8, 0x7824, 0x2048, 0x9006, 0xa802, 0xa806,
0xa868, 0x9084, 0x00ff, 0x908a, 0x0040, 0x0610, 0x00c0, 0x2001,
- 0x1800, 0x200c, 0x9186, 0x0003, 0x1168, 0x7004, 0x0002, 0x769a,
- 0x7674, 0x769a, 0x7698, 0x769a, 0x769a, 0x769a, 0x769a, 0x769a,
- 0x080c, 0x7705, 0x782c, 0xd09c, 0x090c, 0x7bbd, 0x0005, 0x9082,
- 0x005a, 0x1218, 0x2100, 0x003b, 0x0c10, 0x080c, 0x773b, 0x0c90,
- 0x00e3, 0x08e8, 0x0005, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b,
- 0x773b, 0x773b, 0x773b, 0x775d, 0x773b, 0x773b, 0x773b, 0x773b,
- 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b,
- 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x7747,
- 0x773b, 0x795d, 0x773b, 0x773b, 0x773b, 0x775d, 0x773b, 0x7747,
- 0x799e, 0x79df, 0x7a26, 0x7a3a, 0x773b, 0x773b, 0x775d, 0x7747,
- 0x773b, 0x773b, 0x7824, 0x7ab3, 0x7ace, 0x773b, 0x775d, 0x773b,
- 0x773b, 0x773b, 0x773b, 0x781a, 0x7ace, 0x773b, 0x773b, 0x773b,
- 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x7771, 0x773b,
- 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b,
- 0x7bed, 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x7785, 0x773b,
- 0x773b, 0x773b, 0x773b, 0x773b, 0x773b, 0x2079, 0x0040, 0x7004,
- 0x9086, 0x0003, 0x1198, 0x782c, 0x080c, 0x7be6, 0xd0a4, 0x0170,
+ 0x1800, 0x200c, 0x9186, 0x0003, 0x1168, 0x7004, 0x0002, 0x770a,
+ 0x76e4, 0x770a, 0x7708, 0x770a, 0x770a, 0x770a, 0x770a, 0x770a,
+ 0x080c, 0x7775, 0x782c, 0xd09c, 0x090c, 0x7c5d, 0x0005, 0x9082,
+ 0x005a, 0x1218, 0x2100, 0x003b, 0x0c10, 0x080c, 0x77ab, 0x0c90,
+ 0x00e3, 0x08e8, 0x0005, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab,
+ 0x77ab, 0x77ab, 0x77ab, 0x77cd, 0x77ab, 0x77ab, 0x77ab, 0x77ab,
+ 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab,
+ 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77b7,
+ 0x77ab, 0x79c4, 0x77ab, 0x77ab, 0x77ab, 0x77cd, 0x77ab, 0x77b7,
+ 0x7a05, 0x7a46, 0x7a8d, 0x7aa1, 0x77ab, 0x77ab, 0x77cd, 0x77b7,
+ 0x77ab, 0x77ab, 0x7894, 0x7b4c, 0x7b67, 0x77ab, 0x77cd, 0x77ab,
+ 0x77ab, 0x77ab, 0x77ab, 0x788a, 0x7b67, 0x77ab, 0x77ab, 0x77ab,
+ 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77e1, 0x77ab,
+ 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab,
+ 0x7c8d, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77f5, 0x77ab,
+ 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x77ab, 0x2079, 0x0040, 0x7004,
+ 0x9086, 0x0003, 0x1198, 0x782c, 0x080c, 0x7c86, 0xd0a4, 0x0170,
0x7824, 0x2048, 0x9006, 0xa802, 0xa806, 0xa868, 0x9084, 0x00ff,
- 0x908a, 0x001a, 0x1210, 0x002b, 0x0c50, 0x00e9, 0x080c, 0x7bbd,
- 0x0005, 0x773b, 0x7747, 0x7949, 0x773b, 0x7747, 0x773b, 0x7747,
- 0x7747, 0x773b, 0x7747, 0x7949, 0x7747, 0x7747, 0x7747, 0x7747,
- 0x7747, 0x773b, 0x7747, 0x7949, 0x773b, 0x773b, 0x7747, 0x773b,
- 0x773b, 0x773b, 0x7747, 0x00e6, 0x2071, 0x18fb, 0x2009, 0x0400,
+ 0x908a, 0x001a, 0x1210, 0x002b, 0x0c50, 0x00e9, 0x080c, 0x7c5d,
+ 0x0005, 0x77ab, 0x77b7, 0x79b0, 0x77ab, 0x77b7, 0x77ab, 0x77b7,
+ 0x77b7, 0x77ab, 0x77b7, 0x79b0, 0x77b7, 0x77b7, 0x77b7, 0x77b7,
+ 0x77b7, 0x77ab, 0x77b7, 0x79b0, 0x77ab, 0x77ab, 0x77b7, 0x77ab,
+ 0x77ab, 0x77ab, 0x77b7, 0x00e6, 0x2071, 0x18fb, 0x2009, 0x0400,
0x0071, 0x00ee, 0x0005, 0x2009, 0x1000, 0x0049, 0x0005, 0x2009,
0x2000, 0x0029, 0x0005, 0x2009, 0x0800, 0x0009, 0x0005, 0x7007,
0x0001, 0xa86c, 0x9084, 0x00ff, 0x9105, 0xa86e, 0x0126, 0x2091,
- 0x8000, 0x080c, 0x6b1d, 0x012e, 0x0005, 0xa868, 0x8007, 0x9084,
- 0x00ff, 0x0d08, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x78f9,
- 0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x78f9,
+ 0x8000, 0x080c, 0x6c02, 0x012e, 0x0005, 0xa868, 0x8007, 0x9084,
+ 0x00ff, 0x0d08, 0x8001, 0x1120, 0x7007, 0x0001, 0x0804, 0x7969,
+ 0x7007, 0x0003, 0x7012, 0x2900, 0x7016, 0x701a, 0x704b, 0x7969,
0x0005, 0xa868, 0x8007, 0x9084, 0x00ff, 0x0968, 0x8001, 0x1120,
- 0x7007, 0x0001, 0x0804, 0x791d, 0x7007, 0x0003, 0x7012, 0x2900,
- 0x7016, 0x701a, 0x704b, 0x791d, 0x0005, 0xa868, 0x8007, 0x9084,
- 0x00ff, 0x9086, 0x0001, 0x1904, 0x7743, 0x7007, 0x0001, 0x2009,
- 0x1833, 0x210c, 0x81ff, 0x1904, 0x77f1, 0x2001, 0x180d, 0x2004,
- 0xd08c, 0x0904, 0x77dc, 0xa9a0, 0x9186, 0x00ff, 0x05e8, 0xa998,
+ 0x7007, 0x0001, 0x0804, 0x7984, 0x7007, 0x0003, 0x7012, 0x2900,
+ 0x7016, 0x701a, 0x704b, 0x7984, 0x0005, 0xa868, 0x8007, 0x9084,
+ 0x00ff, 0x9086, 0x0001, 0x1904, 0x77b3, 0x7007, 0x0001, 0x2009,
+ 0x1833, 0x210c, 0x81ff, 0x1904, 0x7861, 0x2001, 0x180d, 0x2004,
+ 0xd08c, 0x0904, 0x784c, 0xa9a0, 0x9186, 0x00ff, 0x05e8, 0xa998,
0x9186, 0x006f, 0x0188, 0x9186, 0x0074, 0x15b0, 0x0026, 0x2011,
- 0x0010, 0x080c, 0x6781, 0x002e, 0x0578, 0x0016, 0xa99c, 0x080c,
- 0x67cb, 0x001e, 0x1548, 0x0400, 0x080c, 0x72e5, 0x0140, 0xa89b,
+ 0x0010, 0x080c, 0x68a8, 0x002e, 0x0578, 0x0016, 0xa99c, 0x080c,
+ 0x68f2, 0x001e, 0x1548, 0x0400, 0x080c, 0x7351, 0x0140, 0xa89b,
0x4005, 0xa89f, 0x0016, 0x2001, 0x0030, 0x900e, 0x0438, 0x0026,
- 0x2011, 0x8008, 0x080c, 0x6781, 0x002e, 0x01b0, 0x0016, 0x0026,
- 0x0036, 0xa99c, 0xaaa4, 0xaba0, 0x918d, 0x8000, 0x080c, 0x67cb,
+ 0x2011, 0x8008, 0x080c, 0x68a8, 0x002e, 0x01b0, 0x0016, 0x0026,
+ 0x0036, 0xa99c, 0xaaa4, 0xaba0, 0x918d, 0x8000, 0x080c, 0x68f2,
0x003e, 0x002e, 0x001e, 0x1140, 0xa89b, 0x4005, 0xa89f, 0x4009,
0x2001, 0x0030, 0x900e, 0x0050, 0xa86c, 0x9084, 0x00ff, 0xa86e,
- 0xa887, 0x0000, 0x080c, 0x611b, 0x1108, 0x0005, 0x0126, 0x2091,
- 0x8000, 0xa86b, 0x0139, 0xa87e, 0xa986, 0x080c, 0x6b1d, 0x012e,
- 0x0ca0, 0xa998, 0x9186, 0x0071, 0x0904, 0x7795, 0x9186, 0x0064,
- 0x0904, 0x7795, 0x9186, 0x007c, 0x0904, 0x7795, 0x9186, 0x0028,
- 0x0904, 0x7795, 0x9186, 0x0038, 0x0904, 0x7795, 0x9186, 0x0078,
- 0x0904, 0x7795, 0x9186, 0x005f, 0x0904, 0x7795, 0x9186, 0x0056,
- 0x0904, 0x7795, 0xa89b, 0x4005, 0xa89f, 0x0001, 0x2001, 0x0030,
+ 0xa887, 0x0000, 0x080c, 0x61eb, 0x1108, 0x0005, 0x0126, 0x2091,
+ 0x8000, 0xa86b, 0x0139, 0xa87e, 0xa986, 0x080c, 0x6c02, 0x012e,
+ 0x0ca0, 0xa998, 0x9186, 0x0071, 0x0904, 0x7805, 0x9186, 0x0064,
+ 0x0904, 0x7805, 0x9186, 0x007c, 0x0904, 0x7805, 0x9186, 0x0028,
+ 0x0904, 0x7805, 0x9186, 0x0038, 0x0904, 0x7805, 0x9186, 0x0078,
+ 0x0904, 0x7805, 0x9186, 0x005f, 0x0904, 0x7805, 0x9186, 0x0056,
+ 0x0904, 0x7805, 0xa89b, 0x4005, 0xa89f, 0x0001, 0x2001, 0x0030,
0x900e, 0x0860, 0xa880, 0x9084, 0x00c0, 0x9086, 0x00c0, 0x1120,
- 0x7007, 0x0001, 0x0804, 0x7ae5, 0x2900, 0x7016, 0x701a, 0x20a9,
+ 0x7007, 0x0001, 0x0804, 0x7b7e, 0x2900, 0x7016, 0x701a, 0x20a9,
0x0004, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0031, 0x2098, 0x7050,
0x2040, 0xa060, 0x20e8, 0xa05c, 0x9080, 0x0024, 0x20a0, 0x4003,
- 0xa88c, 0x7012, 0x9082, 0x0401, 0x1a04, 0x774b, 0xaab8, 0x928a,
- 0x0002, 0x1a04, 0x774b, 0x82ff, 0x1138, 0xa8bc, 0xa9c0, 0x9105,
- 0x0118, 0x2001, 0x78b7, 0x0018, 0x9280, 0x78ad, 0x2005, 0x7056,
- 0x7010, 0x9015, 0x0904, 0x7898, 0x080c, 0x101a, 0x1118, 0x7007,
+ 0xa88c, 0x7012, 0x9082, 0x0401, 0x1a04, 0x77bb, 0xaab8, 0x928a,
+ 0x0002, 0x1a04, 0x77bb, 0x82ff, 0x1138, 0xa8bc, 0xa9c0, 0x9105,
+ 0x0118, 0x2001, 0x7927, 0x0018, 0x9280, 0x791d, 0x2005, 0x7056,
+ 0x7010, 0x9015, 0x0904, 0x7908, 0x080c, 0x1026, 0x1118, 0x7007,
0x0004, 0x0005, 0x2900, 0x7022, 0x7054, 0x2060, 0xe000, 0xa86a,
0x7050, 0x2040, 0xa95c, 0xe004, 0x9100, 0xa07a, 0xa860, 0xa076,
0xe008, 0x920a, 0x1210, 0x900e, 0x2200, 0x7112, 0xe20c, 0x8003,
0x800b, 0x9296, 0x0004, 0x0108, 0x9108, 0xa17e, 0x810b, 0xa182,
- 0x080c, 0x10eb, 0xa070, 0x908e, 0x0100, 0x0170, 0x9086, 0x0200,
- 0x0118, 0x7007, 0x0007, 0x0005, 0x7020, 0x2048, 0x080c, 0x1033,
- 0x7014, 0x2048, 0x0804, 0x774b, 0x7020, 0x2048, 0x7018, 0xa802,
- 0xa807, 0x0000, 0x2908, 0x2048, 0xa906, 0x711a, 0x0804, 0x7850,
+ 0x080c, 0x10f7, 0xa070, 0x908e, 0x0100, 0x0170, 0x9086, 0x0200,
+ 0x0118, 0x7007, 0x0007, 0x0005, 0x7020, 0x2048, 0x080c, 0x103f,
+ 0x7014, 0x2048, 0x0804, 0x77bb, 0x7020, 0x2048, 0x7018, 0xa802,
+ 0xa807, 0x0000, 0x2908, 0x2048, 0xa906, 0x711a, 0x0804, 0x78c0,
0x7014, 0x2048, 0x7007, 0x0001, 0xa8b8, 0x9005, 0x1128, 0xa8bc,
0xa9c0, 0x9105, 0x0108, 0x00b9, 0xa868, 0x9084, 0x00ff, 0x9086,
- 0x001e, 0x0904, 0x7ae5, 0x0804, 0x78f9, 0x78af, 0x78b3, 0x0002,
+ 0x001e, 0x0904, 0x7b7e, 0x0804, 0x7969, 0x791f, 0x7923, 0x0002,
0x001e, 0x0007, 0x0004, 0x000a, 0x001c, 0x0005, 0x0006, 0x000a,
0x001e, 0x0005, 0x0004, 0x0076, 0x0066, 0xafbc, 0xaec0, 0xa804,
0x2050, 0xb0c4, 0xb0e6, 0xb0c0, 0xb0e2, 0xb0bc, 0xb0d6, 0xb0b8,
@@ -3651,1370 +3665,1504 @@ static const uint16_t isp_2300_risc_code[] = {
0xb09e, 0xb090, 0xb09a, 0xb08c, 0xb08e, 0xb088, 0xb08a, 0xb696,
0xb792, 0xb084, 0xb086, 0xb080, 0xb082, 0xb07c, 0xb076, 0xb078,
0xb072, 0xb67e, 0xb77a, 0xb004, 0x9055, 0x1958, 0x006e, 0x007e,
- 0x0005, 0x2009, 0x1833, 0x210c, 0x81ff, 0x11c0, 0xa887, 0x0000,
- 0x080c, 0x55a7, 0xd09c, 0x1118, 0xa880, 0xc0bd, 0xa882, 0x080c,
- 0x5f70, 0x1108, 0x0005, 0x080c, 0x6d45, 0x0126, 0x2091, 0x8000,
- 0x080c, 0xbc3f, 0x080c, 0x6b1d, 0x012e, 0x0ca0, 0x080c, 0xbef1,
- 0x1d28, 0x2001, 0x0028, 0x900e, 0x0c70, 0x0419, 0x11d8, 0xa88c,
- 0x9005, 0x01e0, 0xa887, 0x0000, 0xa880, 0xd0a4, 0x0120, 0x080c,
- 0x607d, 0x1138, 0x0005, 0x9006, 0xa87e, 0x080c, 0x5ff5, 0x1108,
- 0x0005, 0x0126, 0x2091, 0x8000, 0xa87e, 0xa986, 0x080c, 0x6b1d,
- 0x012e, 0x0cb0, 0x2001, 0x0028, 0x900e, 0x0c98, 0x2001, 0x0000,
- 0x0c80, 0x00c6, 0x2061, 0x1800, 0x60cc, 0x9005, 0x0100, 0x00ce,
- 0x0005, 0x7018, 0xa802, 0x2908, 0x2048, 0xa906, 0x711a, 0x7010,
- 0x8001, 0x7012, 0x0118, 0x7007, 0x0003, 0x0030, 0x7014, 0x2048,
- 0x7007, 0x0001, 0x7048, 0x080f, 0x0005, 0x00b6, 0x7007, 0x0001,
- 0xa978, 0xa87c, 0x9084, 0x00ff, 0x9096, 0x0004, 0x0540, 0x20a9,
- 0x0001, 0x9096, 0x0001, 0x0190, 0x900e, 0x20a9, 0x0800, 0x9096,
- 0x0002, 0x0160, 0x9005, 0x11d8, 0xa978, 0x080c, 0x6411, 0x11b8,
- 0x0066, 0xae84, 0x080c, 0x6511, 0x006e, 0x0088, 0x0046, 0x2011,
- 0x180c, 0x2224, 0xc484, 0x2412, 0x004e, 0x00c6, 0x080c, 0x6411,
- 0x1110, 0x080c, 0x6630, 0x8108, 0x1f04, 0x7986, 0x00ce, 0xa880,
- 0xd084, 0x1120, 0x080c, 0x1033, 0x00be, 0x0005, 0x0126, 0x2091,
- 0x8000, 0x080c, 0x6b1d, 0x012e, 0x00be, 0x0005, 0x0126, 0x2091,
- 0x8000, 0x7007, 0x0001, 0x080c, 0x6742, 0x0580, 0x2061, 0x1a4f,
- 0x6100, 0xd184, 0x0178, 0xa88c, 0x9084, 0x00ff, 0x1550, 0x6000,
- 0xd084, 0x0520, 0x6004, 0x9005, 0x1538, 0x6003, 0x0000, 0x600b,
- 0x0000, 0x00c8, 0x2011, 0x0001, 0xa894, 0x9005, 0x1110, 0x2001,
- 0x001e, 0x8000, 0x6016, 0xa88c, 0x9084, 0x00ff, 0x0178, 0x6006,
- 0xa88c, 0x8007, 0x9084, 0x00ff, 0x0148, 0x600a, 0xa88c, 0x8000,
- 0x1108, 0xc28d, 0x6202, 0x012e, 0x0804, 0x7ba7, 0x012e, 0x0804,
- 0x7ba1, 0x012e, 0x0804, 0x7b9b, 0x012e, 0x0804, 0x7b9e, 0x0126,
- 0x2091, 0x8000, 0x7007, 0x0001, 0x080c, 0x6742, 0x05e0, 0x2061,
- 0x1a4f, 0x6000, 0xd084, 0x05b8, 0x6204, 0x6308, 0xd08c, 0x1530,
- 0xac7c, 0x9484, 0x0003, 0x0170, 0xa98c, 0x918c, 0x00ff, 0x8001,
- 0x1120, 0x2100, 0x9210, 0x0620, 0x0028, 0x8001, 0x1508, 0x2100,
- 0x9212, 0x02f0, 0x9484, 0x000c, 0x0188, 0xa98c, 0x810f, 0x918c,
- 0x00ff, 0x9082, 0x0004, 0x1120, 0x2100, 0x9318, 0x0288, 0x0030,
- 0x9082, 0x0004, 0x1168, 0x2100, 0x931a, 0x0250, 0xa894, 0x9005,
- 0x0110, 0x8000, 0x6016, 0x6206, 0x630a, 0x012e, 0x0804, 0x7ba7,
- 0x012e, 0x0804, 0x7ba4, 0x012e, 0x0804, 0x7ba1, 0x0126, 0x2091,
- 0x8000, 0x7007, 0x0001, 0x2061, 0x1a4f, 0x6300, 0xd38c, 0x1120,
- 0x6308, 0x8318, 0x0220, 0x630a, 0x012e, 0x0804, 0x7bb5, 0x012e,
- 0x0804, 0x7ba4, 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x7007,
- 0x0001, 0xa880, 0xd0ac, 0x0148, 0x00c6, 0x2061, 0x1a4f, 0x6000,
- 0x9084, 0xfcff, 0x6002, 0x00ce, 0x0440, 0xa88c, 0x9005, 0x05d8,
- 0xa890, 0x9065, 0x0598, 0x2001, 0x1833, 0x2004, 0x9005, 0x0118,
- 0x080c, 0x9f42, 0x0068, 0x6017, 0xf400, 0x602b, 0x0000, 0xa980,
- 0xd1a4, 0x0110, 0xa984, 0x612a, 0x2009, 0x0041, 0x080c, 0x9f88,
- 0xa98c, 0x918c, 0xff00, 0x9186, 0x2000, 0x1138, 0x0026, 0x900e,
- 0x2011, 0xfdff, 0x080c, 0x8532, 0x002e, 0xa880, 0xd0c4, 0x0148,
- 0x2061, 0x1a4f, 0x6000, 0xd08c, 0x1120, 0x6008, 0x8000, 0x0208,
- 0x600a, 0x00ce, 0x012e, 0x00be, 0x0804, 0x7ba7, 0x00ce, 0x012e,
- 0x00be, 0x0804, 0x7ba1, 0xa988, 0x9186, 0x002e, 0x0d30, 0x9186,
- 0x002d, 0x0d18, 0x9186, 0x002a, 0x1130, 0x2001, 0x180c, 0x200c,
- 0xc194, 0x2102, 0x08d0, 0x9186, 0x0020, 0x0158, 0x9186, 0x0029,
- 0x1d28, 0xa978, 0x080c, 0x6411, 0x1980, 0xb800, 0xc0e4, 0xb802,
- 0x0860, 0xa890, 0x9065, 0x09d0, 0x6007, 0x0024, 0x2001, 0x1963,
- 0x2004, 0x601a, 0x0810, 0x2061, 0x1a4f, 0x6000, 0xd084, 0x0190,
- 0xd08c, 0x1904, 0x7bb5, 0x0126, 0x2091, 0x8000, 0x6204, 0x8210,
- 0x0220, 0x6206, 0x012e, 0x0804, 0x7bb5, 0x012e, 0xa887, 0x0016,
- 0x0804, 0x7bae, 0xa887, 0x0007, 0x0804, 0x7bae, 0xa868, 0x8007,
- 0x9084, 0x00ff, 0x0130, 0x8001, 0x1138, 0x7007, 0x0001, 0x0069,
- 0x0005, 0x080c, 0x7743, 0x0040, 0x7007, 0x0003, 0x7012, 0x2900,
- 0x7016, 0x701a, 0x704b, 0x7ae5, 0x0005, 0x00b6, 0x00e6, 0x0126,
- 0x2091, 0x8000, 0x903e, 0x2061, 0x1800, 0x61cc, 0x81ff, 0x1904,
- 0x7b63, 0x6130, 0xd194, 0x1904, 0x7b8d, 0xa87c, 0x2070, 0x9e82,
- 0x1cc8, 0x0a04, 0x7b57, 0x6064, 0x9e02, 0x1a04, 0x7b57, 0x7120,
- 0x9186, 0x0006, 0x1904, 0x7b49, 0x7010, 0x905d, 0x0904, 0x7b63,
- 0xb800, 0xd0e4, 0x1904, 0x7b87, 0x2061, 0x1a4f, 0x6100, 0x9184,
- 0x0301, 0x9086, 0x0001, 0x1580, 0xa887, 0x0000, 0xa803, 0x0000,
- 0x2908, 0x7014, 0x9005, 0x1198, 0x7116, 0xa880, 0xd0f4, 0x1904,
- 0x7b90, 0x080c, 0x55a7, 0xd09c, 0x1118, 0xa880, 0xc0cc, 0xa882,
- 0x2e60, 0x080c, 0x848e, 0x012e, 0x00ee, 0x00be, 0x0005, 0x2048,
- 0xa800, 0x9005, 0x1de0, 0xa902, 0x2148, 0xa880, 0xd0f4, 0x1904,
- 0x7b90, 0x012e, 0x00ee, 0x00be, 0x0005, 0x012e, 0x00ee, 0xa887,
- 0x0006, 0x00be, 0x0804, 0x7bae, 0xd184, 0x0db8, 0xd1c4, 0x1190,
- 0x00a0, 0xa978, 0x080c, 0x6411, 0x15d0, 0xb800, 0xd0e4, 0x15b8,
- 0x7120, 0x9186, 0x0007, 0x1118, 0xa887, 0x0002, 0x0490, 0xa887,
- 0x0008, 0x0478, 0xa887, 0x000e, 0x0460, 0xa887, 0x0017, 0x0448,
- 0xa887, 0x0035, 0x0430, 0x080c, 0x55ab, 0xd0fc, 0x01e8, 0xa87c,
- 0x2070, 0x9e82, 0x1cc8, 0x02c0, 0x6064, 0x9e02, 0x12a8, 0x7120,
- 0x9186, 0x0006, 0x1188, 0x7010, 0x905d, 0x0170, 0xb800, 0xd0bc,
- 0x0158, 0x2039, 0x0001, 0x7000, 0x9086, 0x0007, 0x1904, 0x7af1,
- 0x7003, 0x0002, 0x0804, 0x7af1, 0xa887, 0x0028, 0x0010, 0xa887,
- 0x0029, 0x012e, 0x00ee, 0x00be, 0x0408, 0xa887, 0x002a, 0x0cc8,
- 0x2e60, 0x2019, 0x0002, 0x601b, 0x0014, 0x080c, 0xccc8, 0x012e,
+ 0x0005, 0x2009, 0x1833, 0x210c, 0x81ff, 0x1178, 0x080c, 0x602e,
+ 0x1108, 0x0005, 0x080c, 0x6e4b, 0x0126, 0x2091, 0x8000, 0x080c,
+ 0xc4ba, 0x080c, 0x6c02, 0x012e, 0x0ca0, 0x080c, 0xc8c7, 0x1d70,
+ 0x2001, 0x0028, 0x900e, 0x0c70, 0x0419, 0x11d8, 0xa88c, 0x9005,
+ 0x01e0, 0xa887, 0x0000, 0xa880, 0xd0a4, 0x0120, 0x080c, 0x614d,
+ 0x1138, 0x0005, 0x9006, 0xa87e, 0x080c, 0x60c5, 0x1108, 0x0005,
+ 0x0126, 0x2091, 0x8000, 0xa87e, 0xa986, 0x080c, 0x6c02, 0x012e,
+ 0x0cb0, 0x2001, 0x0028, 0x900e, 0x0c98, 0x2001, 0x0000, 0x0c80,
+ 0x00c6, 0x2061, 0x1800, 0x60cc, 0x9005, 0x0100, 0x00ce, 0x0005,
+ 0x7018, 0xa802, 0x2908, 0x2048, 0xa906, 0x711a, 0x7010, 0x8001,
+ 0x7012, 0x0118, 0x7007, 0x0003, 0x0030, 0x7014, 0x2048, 0x7007,
+ 0x0001, 0x7048, 0x080f, 0x0005, 0x00b6, 0x7007, 0x0001, 0xa978,
+ 0xa87c, 0x9084, 0x00ff, 0x9096, 0x0004, 0x0540, 0x20a9, 0x0001,
+ 0x9096, 0x0001, 0x0190, 0x900e, 0x20a9, 0x0800, 0x9096, 0x0002,
+ 0x0160, 0x9005, 0x11d8, 0xa978, 0x080c, 0x64fc, 0x11b8, 0x0066,
+ 0xae84, 0x080c, 0x6619, 0x006e, 0x0088, 0x0046, 0x2011, 0x180c,
+ 0x2224, 0xc484, 0x2412, 0x004e, 0x00c6, 0x080c, 0x64fc, 0x1110,
+ 0x080c, 0x6738, 0x8108, 0x1f04, 0x79ed, 0x00ce, 0xa880, 0xd084,
+ 0x1120, 0x080c, 0x103f, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000,
+ 0x080c, 0x6c02, 0x012e, 0x00be, 0x0005, 0x0126, 0x2091, 0x8000,
+ 0x7007, 0x0001, 0x080c, 0x6869, 0x0580, 0x2061, 0x1a4f, 0x6100,
+ 0xd184, 0x0178, 0xa88c, 0x9084, 0x00ff, 0x1550, 0x6000, 0xd084,
+ 0x0520, 0x6004, 0x9005, 0x1538, 0x6003, 0x0000, 0x600b, 0x0000,
+ 0x00c8, 0x2011, 0x0001, 0xa894, 0x9005, 0x1110, 0x2001, 0x001e,
+ 0x8000, 0x6016, 0xa88c, 0x9084, 0x00ff, 0x0178, 0x6006, 0xa88c,
+ 0x8007, 0x9084, 0x00ff, 0x0148, 0x600a, 0xa88c, 0x8000, 0x1108,
+ 0xc28d, 0x6202, 0x012e, 0x0804, 0x7c47, 0x012e, 0x0804, 0x7c41,
+ 0x012e, 0x0804, 0x7c3b, 0x012e, 0x0804, 0x7c3e, 0x0126, 0x2091,
+ 0x8000, 0x7007, 0x0001, 0x080c, 0x6869, 0x05e0, 0x2061, 0x1a4f,
+ 0x6000, 0xd084, 0x05b8, 0x6204, 0x6308, 0xd08c, 0x1530, 0xac7c,
+ 0x9484, 0x0003, 0x0170, 0xa98c, 0x918c, 0x00ff, 0x8001, 0x1120,
+ 0x2100, 0x9210, 0x0620, 0x0028, 0x8001, 0x1508, 0x2100, 0x9212,
+ 0x02f0, 0x9484, 0x000c, 0x0188, 0xa98c, 0x810f, 0x918c, 0x00ff,
+ 0x9082, 0x0004, 0x1120, 0x2100, 0x9318, 0x0288, 0x0030, 0x9082,
+ 0x0004, 0x1168, 0x2100, 0x931a, 0x0250, 0xa894, 0x9005, 0x0110,
+ 0x8000, 0x6016, 0x6206, 0x630a, 0x012e, 0x0804, 0x7c47, 0x012e,
+ 0x0804, 0x7c44, 0x012e, 0x0804, 0x7c41, 0x0126, 0x2091, 0x8000,
+ 0x7007, 0x0001, 0x2061, 0x1a4f, 0x6300, 0xd38c, 0x1120, 0x6308,
+ 0x8318, 0x0220, 0x630a, 0x012e, 0x0804, 0x7c55, 0x012e, 0x0804,
+ 0x7c44, 0x00b6, 0x0126, 0x00c6, 0x2091, 0x8000, 0x7007, 0x0001,
+ 0xa880, 0xd0ac, 0x0148, 0x00c6, 0x2061, 0x1a4f, 0x6000, 0x9084,
+ 0xfcff, 0x6002, 0x00ce, 0x0440, 0xa88c, 0x9005, 0x05d8, 0xa890,
+ 0x9065, 0x0598, 0x2001, 0x1833, 0x2004, 0x9005, 0x0118, 0x080c,
+ 0xa3cf, 0x0068, 0x6017, 0xf400, 0x605b, 0x0000, 0xa980, 0xd1a4,
+ 0x0110, 0xa984, 0x615a, 0x2009, 0x0041, 0x080c, 0xa419, 0xa98c,
+ 0x918c, 0xff00, 0x9186, 0x2000, 0x1138, 0x0026, 0x900e, 0x2011,
+ 0xfdff, 0x080c, 0x8703, 0x002e, 0xa880, 0xd0c4, 0x0148, 0x2061,
+ 0x1a4f, 0x6000, 0xd08c, 0x1120, 0x6008, 0x8000, 0x0208, 0x600a,
+ 0x00ce, 0x012e, 0x00be, 0x0804, 0x7c47, 0x00ce, 0x012e, 0x00be,
+ 0x0804, 0x7c41, 0xa988, 0x9186, 0x002e, 0x0d30, 0x9186, 0x002d,
+ 0x0d18, 0x9186, 0x0045, 0x0510, 0x9186, 0x002a, 0x1130, 0x2001,
+ 0x180c, 0x200c, 0xc194, 0x2102, 0x08b8, 0x9186, 0x0020, 0x0158,
+ 0x9186, 0x0029, 0x1d10, 0xa978, 0x080c, 0x64fc, 0x1968, 0xb800,
+ 0xc0e4, 0xb802, 0x0848, 0xa890, 0x9065, 0x09b8, 0x6007, 0x0024,
+ 0x2001, 0x1962, 0x2004, 0x601a, 0x0804, 0x7adc, 0xa890, 0x9065,
+ 0x0960, 0x00e6, 0xa894, 0x9075, 0x2001, 0x1833, 0x2004, 0x9005,
+ 0x0150, 0x080c, 0xa3cf, 0x8eff, 0x0118, 0x2e60, 0x080c, 0xa3cf,
+ 0x00ee, 0x0804, 0x7adc, 0x6024, 0xc0dc, 0xc0d5, 0x6026, 0x2e60,
+ 0x6007, 0x003a, 0xa8a4, 0x9005, 0x0130, 0x6007, 0x003b, 0xa8a8,
+ 0x602e, 0xa8ac, 0x6016, 0x6003, 0x0001, 0x080c, 0x88a1, 0x080c,
+ 0x8e38, 0x00ee, 0x0804, 0x7adc, 0x2061, 0x1a4f, 0x6000, 0xd084,
+ 0x0190, 0xd08c, 0x1904, 0x7c55, 0x0126, 0x2091, 0x8000, 0x6204,
+ 0x8210, 0x0220, 0x6206, 0x012e, 0x0804, 0x7c55, 0x012e, 0xa887,
+ 0x0016, 0x0804, 0x7c4e, 0xa887, 0x0007, 0x0804, 0x7c4e, 0xa868,
+ 0x8007, 0x9084, 0x00ff, 0x0130, 0x8001, 0x1138, 0x7007, 0x0001,
+ 0x0069, 0x0005, 0x080c, 0x77b3, 0x0040, 0x7007, 0x0003, 0x7012,
+ 0x2900, 0x7016, 0x701a, 0x704b, 0x7b7e, 0x0005, 0x00b6, 0x00e6,
+ 0x0126, 0x2091, 0x8000, 0x903e, 0x2061, 0x1800, 0x61cc, 0x81ff,
+ 0x1904, 0x7c00, 0x6130, 0xd194, 0x1904, 0x7c2a, 0xa87c, 0x2070,
+ 0x9e82, 0x1cd0, 0x0a04, 0x7bf4, 0x6064, 0x9e02, 0x1a04, 0x7bf4,
+ 0x7120, 0x9186, 0x0006, 0x1904, 0x7be6, 0x7010, 0x905d, 0x0904,
+ 0x7c00, 0xb800, 0xd0e4, 0x1904, 0x7c24, 0x2061, 0x1a4f, 0x6100,
+ 0x9184, 0x0301, 0x9086, 0x0001, 0x15a0, 0x7024, 0xd0dc, 0x1904,
+ 0x7c2d, 0xa887, 0x0000, 0xa803, 0x0000, 0x2908, 0x7014, 0x9005,
+ 0x1198, 0x7116, 0xa880, 0xd0f4, 0x1904, 0x7c30, 0x080c, 0x5664,
+ 0xd09c, 0x1118, 0xa880, 0xc0cc, 0xa882, 0x2e60, 0x080c, 0x8623,
+ 0x012e, 0x00ee, 0x00be, 0x0005, 0x2048, 0xa800, 0x9005, 0x1de0,
+ 0xa902, 0x2148, 0xa880, 0xd0f4, 0x1904, 0x7c30, 0x012e, 0x00ee,
+ 0x00be, 0x0005, 0x012e, 0x00ee, 0xa887, 0x0006, 0x00be, 0x0804,
+ 0x7c4e, 0xd184, 0x0db8, 0xd1c4, 0x1190, 0x00a0, 0xa978, 0x080c,
+ 0x64fc, 0x15d0, 0xb800, 0xd0e4, 0x15b8, 0x7120, 0x9186, 0x0007,
+ 0x1118, 0xa887, 0x0002, 0x0490, 0xa887, 0x0008, 0x0478, 0xa887,
+ 0x000e, 0x0460, 0xa887, 0x0017, 0x0448, 0xa887, 0x0035, 0x0430,
+ 0x080c, 0x5668, 0xd0fc, 0x01e8, 0xa87c, 0x2070, 0x9e82, 0x1cd0,
+ 0x02c0, 0x6064, 0x9e02, 0x12a8, 0x7120, 0x9186, 0x0006, 0x1188,
+ 0x7010, 0x905d, 0x0170, 0xb800, 0xd0bc, 0x0158, 0x2039, 0x0001,
+ 0x7000, 0x9086, 0x0007, 0x1904, 0x7b8a, 0x7003, 0x0002, 0x0804,
+ 0x7b8a, 0xa887, 0x0028, 0x0010, 0xa887, 0x0029, 0x012e, 0x00ee,
+ 0x00be, 0x0420, 0xa887, 0x002a, 0x0cc8, 0xa887, 0x0045, 0x0cb0,
+ 0x2e60, 0x2019, 0x0002, 0x601b, 0x0014, 0x080c, 0xd86f, 0x012e,
0x00ee, 0x00be, 0x0005, 0x2009, 0x003e, 0x0058, 0x2009, 0x0004,
0x0040, 0x2009, 0x0006, 0x0028, 0x2009, 0x0016, 0x0010, 0x2009,
0x0001, 0xa888, 0x9084, 0xff00, 0x9105, 0xa88a, 0x0126, 0x2091,
- 0x8000, 0x080c, 0x6b1d, 0x012e, 0x0005, 0x080c, 0x1033, 0x0005,
- 0x00d6, 0x080c, 0x8485, 0x00de, 0x0005, 0x00d6, 0x00e6, 0x0126,
+ 0x8000, 0x080c, 0x6c02, 0x012e, 0x0005, 0x080c, 0x103f, 0x0005,
+ 0x00d6, 0x080c, 0x861a, 0x00de, 0x0005, 0x00d6, 0x00e6, 0x0126,
0x2091, 0x8000, 0x2071, 0x0040, 0x702c, 0xd084, 0x01d8, 0x908c,
- 0x0780, 0x190c, 0x7c49, 0xd09c, 0x11a8, 0x2071, 0x1800, 0x70bc,
+ 0x0780, 0x190c, 0x7ce9, 0xd09c, 0x11a8, 0x2071, 0x1800, 0x70bc,
0x90ea, 0x0040, 0x0278, 0x8001, 0x70be, 0x702c, 0x2048, 0xa800,
0x702e, 0x9006, 0xa802, 0xa806, 0x2071, 0x0040, 0x2900, 0x7022,
0x702c, 0x0c28, 0x012e, 0x00ee, 0x00de, 0x0005, 0x0006, 0x9084,
- 0x0780, 0x190c, 0x7c49, 0x000e, 0x0005, 0x00d6, 0x00c6, 0x0036,
+ 0x0780, 0x190c, 0x7ce9, 0x000e, 0x0005, 0x00d6, 0x00c6, 0x0036,
0x0026, 0x0016, 0x00b6, 0x7007, 0x0001, 0xaa78, 0x9282, 0x0004,
- 0x1a04, 0x7c3a, 0xa980, 0x9188, 0x1000, 0x2104, 0x905d, 0xb804,
+ 0x1a04, 0x7cda, 0xa980, 0x9188, 0x1000, 0x2104, 0x905d, 0xb804,
0xd284, 0x0140, 0x05e8, 0x8007, 0x9084, 0x00ff, 0x9084, 0x0006,
- 0x1108, 0x04b0, 0x2b10, 0x080c, 0x9ec2, 0x1118, 0x080c, 0x9f5b,
- 0x05a8, 0x6212, 0xa878, 0x0002, 0x7c18, 0x7c1d, 0x7c20, 0x7c26,
- 0x2019, 0x0002, 0x080c, 0xd0d7, 0x0060, 0x080c, 0xd077, 0x0048,
- 0x2019, 0x0002, 0xa984, 0x080c, 0xd08f, 0x0018, 0xa984, 0x080c,
- 0xd077, 0x080c, 0x9f18, 0xa88b, 0x0000, 0x0126, 0x2091, 0x8000,
- 0x080c, 0x6b1d, 0x012e, 0x00be, 0x001e, 0x002e, 0x003e, 0x00ce,
+ 0x1108, 0x04b0, 0x2b10, 0x080c, 0xa347, 0x1118, 0x080c, 0xa3ec,
+ 0x05a8, 0x6212, 0xa878, 0x0002, 0x7cb8, 0x7cbd, 0x7cc0, 0x7cc6,
+ 0x2019, 0x0002, 0x080c, 0xdc90, 0x0060, 0x080c, 0xdc27, 0x0048,
+ 0x2019, 0x0002, 0xa984, 0x080c, 0xdc42, 0x0018, 0xa984, 0x080c,
+ 0xdc27, 0x080c, 0xa39d, 0xa88b, 0x0000, 0x0126, 0x2091, 0x8000,
+ 0x080c, 0x6c02, 0x012e, 0x00be, 0x001e, 0x002e, 0x003e, 0x00ce,
0x00de, 0x0005, 0xa88b, 0x0006, 0x0c80, 0xa88b, 0x0002, 0x0c68,
0xa88b, 0x0005, 0x0c50, 0xa88b, 0x0004, 0x0c38, 0xa88b, 0x0007,
- 0x0c20, 0x2091, 0x8000, 0x0e04, 0x7c4b, 0x0006, 0x0016, 0x2001,
- 0x8003, 0x0006, 0x0804, 0x0dcd, 0x2001, 0x1833, 0x2004, 0x9005,
+ 0x0c20, 0x2091, 0x8000, 0x0e04, 0x7ceb, 0x0006, 0x0016, 0x2001,
+ 0x8003, 0x0006, 0x0804, 0x0dcc, 0x2001, 0x1833, 0x2004, 0x9005,
0x0005, 0x0005, 0x00f6, 0x2079, 0x0300, 0x2001, 0x0200, 0x200c,
0xc1e5, 0xc1dc, 0x2102, 0x2009, 0x0218, 0x210c, 0xd1ec, 0x1120,
- 0x080c, 0x14d2, 0x00fe, 0x0005, 0x2001, 0x020d, 0x2003, 0x0020,
- 0x781f, 0x0300, 0x00fe, 0x0005, 0x68bc, 0x90aa, 0x0005, 0x0a04,
- 0x823c, 0x7d44, 0x7c40, 0x9484, 0x0fff, 0x688e, 0x9584, 0x00f6,
- 0x1510, 0x9484, 0x7000, 0x0140, 0x908a, 0x2000, 0x1260, 0x9584,
- 0x0700, 0x8007, 0x0804, 0x7cd0, 0x7000, 0x9084, 0xff00, 0x9086,
- 0x8100, 0x0da8, 0x00b0, 0x9484, 0x0fff, 0x1130, 0x7000, 0x9084,
- 0xff00, 0x9086, 0x8100, 0x11c0, 0x080c, 0xd314, 0x080c, 0x8171,
- 0x7817, 0x0140, 0x00a8, 0x9584, 0x0076, 0x1118, 0x080c, 0x81cf,
- 0x19c0, 0xd5a4, 0x0148, 0x0046, 0x0056, 0x080c, 0x7d22, 0x080c,
- 0x2217, 0x005e, 0x004e, 0x0020, 0x080c, 0xd314, 0x7817, 0x0140,
- 0x080c, 0x72e5, 0x0168, 0x2001, 0x0111, 0x2004, 0xd08c, 0x0140,
- 0x688f, 0x0000, 0x2001, 0x0110, 0x2003, 0x0008, 0x2003, 0x0000,
- 0x04d1, 0x2001, 0x19cd, 0x2004, 0x9005, 0x090c, 0x8c37, 0x0005,
- 0x0002, 0x7ce2, 0x7f8f, 0x7cd9, 0x7cd9, 0x7cd9, 0x7cd9, 0x7cd9,
- 0x7cd9, 0x7817, 0x0140, 0x2001, 0x19cd, 0x2004, 0x9005, 0x090c,
- 0x8c37, 0x0005, 0x7000, 0x908c, 0xff00, 0x9194, 0xf000, 0x810f,
- 0x9286, 0x2000, 0x1150, 0x6800, 0x9086, 0x0001, 0x1118, 0x080c,
- 0x5607, 0x0040, 0x080c, 0x7d42, 0x0028, 0x9286, 0x8000, 0x1110,
- 0x080c, 0x80bc, 0x7817, 0x0140, 0x2001, 0x19cd, 0x2004, 0x9005,
- 0x090c, 0x8c37, 0x0005, 0x2001, 0x1810, 0x2004, 0xd08c, 0x0178,
- 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1148, 0x0026, 0x0036,
- 0x2011, 0x8048, 0x2518, 0x080c, 0x4abd, 0x003e, 0x002e, 0x0005,
- 0x0036, 0x0046, 0x0056, 0x00f6, 0x2079, 0x0200, 0x2019, 0xfffe,
- 0x7c30, 0x0050, 0x0036, 0x0046, 0x0056, 0x00f6, 0x2079, 0x0200,
- 0x7d44, 0x7c40, 0x2019, 0xffff, 0x2001, 0x1810, 0x2004, 0xd08c,
- 0x0160, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1130, 0x0026,
- 0x2011, 0x8048, 0x080c, 0x4abd, 0x002e, 0x00fe, 0x005e, 0x004e,
- 0x003e, 0x0005, 0x00b6, 0x00c6, 0x7010, 0x9084, 0xff00, 0x8007,
- 0x9096, 0x0001, 0x0120, 0x9096, 0x0023, 0x1904, 0x7ef7, 0x688c,
- 0x9082, 0x0004, 0x0a04, 0x7ef7, 0x9186, 0x0023, 0x15e8, 0x080c,
- 0x815f, 0x0904, 0x7ef7, 0x6120, 0x9186, 0x0001, 0x0150, 0x9186,
- 0x0004, 0x0138, 0x9186, 0x0008, 0x0120, 0x9186, 0x000a, 0x1904,
- 0x7ef7, 0x7124, 0x610a, 0x7030, 0x908e, 0x0200, 0x1130, 0x2009,
- 0x0015, 0x080c, 0x9f88, 0x0804, 0x7ef7, 0x908e, 0x0214, 0x0118,
- 0x908e, 0x0210, 0x1130, 0x2009, 0x0015, 0x080c, 0x9f88, 0x0804,
- 0x7ef7, 0x908e, 0x0100, 0x1904, 0x7ef7, 0x7034, 0x9005, 0x1904,
- 0x7ef7, 0x688c, 0x9082, 0x0008, 0x0a04, 0x7ef7, 0x2009, 0x0016,
- 0x080c, 0x9f88, 0x0804, 0x7ef7, 0x9186, 0x0022, 0x1904, 0x7ef7,
- 0x7030, 0x908e, 0x0300, 0x1580, 0x68d8, 0xd0a4, 0x0528, 0xc0b5,
- 0x68da, 0x7100, 0x918c, 0x00ff, 0x697a, 0x7004, 0x687e, 0x00f6,
- 0x2079, 0x0100, 0x79e6, 0x78ea, 0x0006, 0x9084, 0x00ff, 0x0016,
- 0x2008, 0x080c, 0x26e8, 0x7932, 0x7936, 0x001e, 0x000e, 0x00fe,
- 0x080c, 0x269f, 0x695a, 0x703c, 0x00e6, 0x2071, 0x0140, 0x7086,
- 0x2071, 0x1800, 0x70b2, 0x00ee, 0x7034, 0x9005, 0x1904, 0x7ef7,
- 0x2009, 0x0017, 0x0804, 0x7ea7, 0x908e, 0x0400, 0x1190, 0x7034,
- 0x9005, 0x1904, 0x7ef7, 0x080c, 0x72e5, 0x0120, 0x2009, 0x001d,
- 0x0804, 0x7ea7, 0x68d8, 0xc0a5, 0x68da, 0x2009, 0x0030, 0x0804,
- 0x7ea7, 0x908e, 0x0500, 0x1140, 0x7034, 0x9005, 0x1904, 0x7ef7,
- 0x2009, 0x0018, 0x0804, 0x7ea7, 0x908e, 0x2010, 0x1120, 0x2009,
- 0x0019, 0x0804, 0x7ea7, 0x908e, 0x2110, 0x1120, 0x2009, 0x001a,
- 0x0804, 0x7ea7, 0x908e, 0x5200, 0x1140, 0x7034, 0x9005, 0x1904,
- 0x7ef7, 0x2009, 0x001b, 0x0804, 0x7ea7, 0x908e, 0x5000, 0x1140,
- 0x7034, 0x9005, 0x1904, 0x7ef7, 0x2009, 0x001c, 0x0804, 0x7ea7,
- 0x908e, 0x1200, 0x1140, 0x7034, 0x9005, 0x1904, 0x7ef7, 0x2009,
- 0x0024, 0x0804, 0x7ea7, 0x908c, 0xff00, 0x918e, 0x2400, 0x1170,
- 0x2009, 0x002d, 0x2001, 0x1810, 0x2004, 0xd09c, 0x0904, 0x7ea7,
- 0x080c, 0xc52f, 0x1904, 0x7ef7, 0x0804, 0x7ea5, 0x908c, 0xff00,
- 0x918e, 0x5300, 0x1120, 0x2009, 0x002a, 0x0804, 0x7ea7, 0x908e,
- 0x0f00, 0x1120, 0x2009, 0x0020, 0x0804, 0x7ea7, 0x908e, 0x6104,
- 0x1588, 0x2029, 0x0205, 0x2011, 0x026d, 0x8208, 0x2204, 0x9092,
- 0x0401, 0x1a04, 0x7ef7, 0x9094, 0x0003, 0x1904, 0x7ef7, 0x6a8c,
- 0x9212, 0x0a04, 0x7ef7, 0x9082, 0x0004, 0x0904, 0x7ef7, 0x8004,
- 0x8004, 0x20a8, 0x2011, 0x8015, 0x211c, 0x8108, 0x2124, 0x080c,
- 0x4abd, 0x8108, 0x0f04, 0x7e6d, 0x9186, 0x0280, 0x1d98, 0x2504,
- 0x8000, 0x202a, 0x2009, 0x0260, 0x0c68, 0x202b, 0x0000, 0x2009,
- 0x0023, 0x04a8, 0x908e, 0x6000, 0x1118, 0x2009, 0x003f, 0x0478,
- 0x908e, 0x7800, 0x1118, 0x2009, 0x0045, 0x0448, 0x908e, 0x1000,
- 0x1118, 0x2009, 0x004e, 0x0418, 0x908e, 0x6300, 0x1118, 0x2009,
- 0x004a, 0x00e8, 0x908c, 0xff00, 0x918e, 0x5600, 0x1118, 0x2009,
- 0x004f, 0x00a8, 0x908c, 0xff00, 0x918e, 0x5700, 0x1118, 0x2009,
- 0x0050, 0x0068, 0x908e, 0x7d00, 0x1118, 0x2009, 0x0053, 0x0038,
- 0x2009, 0x001d, 0x6838, 0xd0d4, 0x0110, 0x2009, 0x004c, 0x0016,
- 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x269f, 0x1904,
- 0x7efa, 0x080c, 0x63c1, 0x1904, 0x7efa, 0xbe12, 0xbd16, 0x001e,
- 0x0016, 0x080c, 0x72e5, 0x01c0, 0x68d8, 0xd08c, 0x1148, 0x7000,
- 0x9084, 0x00ff, 0x1188, 0x7004, 0x9084, 0xff00, 0x1168, 0x0040,
- 0x6878, 0x9606, 0x1148, 0x687c, 0x9506, 0x9084, 0xff00, 0x1120,
- 0x9584, 0x00ff, 0xb8ae, 0x0080, 0xb8ac, 0x9005, 0x1168, 0x9186,
- 0x0046, 0x1150, 0x6878, 0x9606, 0x1138, 0x687c, 0x9506, 0x9084,
- 0xff00, 0x1110, 0x001e, 0x0098, 0x080c, 0x9ec2, 0x01c8, 0x2b08,
- 0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x9186, 0x004c,
- 0x1110, 0x6023, 0x000a, 0x0016, 0x001e, 0x080c, 0x9f88, 0x00ce,
- 0x00be, 0x0005, 0x001e, 0x0cd8, 0x9085, 0x0001, 0x001e, 0x0cb8,
- 0x2001, 0x180e, 0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c,
- 0x4abd, 0x080c, 0x9f5b, 0x0d70, 0x2b08, 0x6112, 0x6023, 0x0004,
- 0x7120, 0x610a, 0x001e, 0x0016, 0x9186, 0x0017, 0x0118, 0x9186,
- 0x0030, 0x1128, 0x6007, 0x0009, 0x6017, 0x2900, 0x0020, 0x6007,
- 0x0051, 0x6017, 0x0000, 0x602f, 0x0009, 0x6003, 0x0001, 0x080c,
- 0x8718, 0x0880, 0x00b6, 0x00e6, 0x00d6, 0x2028, 0x2130, 0x9696,
- 0x00ff, 0x11b8, 0x9592, 0xfffc, 0x02a0, 0x9596, 0xfffd, 0x1120,
- 0x2009, 0x007f, 0x0804, 0x7f87, 0x9596, 0xfffe, 0x1120, 0x2009,
- 0x007e, 0x0804, 0x7f87, 0x9596, 0xfffc, 0x1118, 0x2009, 0x0080,
- 0x04f0, 0x2011, 0x0000, 0x2019, 0x1836, 0x231c, 0xd3ac, 0x0130,
- 0x9026, 0x20a9, 0x0800, 0x2071, 0x1000, 0x0030, 0x2021, 0x0081,
- 0x20a9, 0x077f, 0x2071, 0x1081, 0x2e1c, 0x93dd, 0x0000, 0x1140,
- 0x82ff, 0x11d0, 0x9496, 0x00ff, 0x01b8, 0x2410, 0xc2fd, 0x00a0,
- 0xbf10, 0x2600, 0x9706, 0xb814, 0x1120, 0x9546, 0x1110, 0x2408,
- 0x00b0, 0x9745, 0x1148, 0x94c6, 0x007e, 0x0130, 0x94c6, 0x007f,
- 0x0118, 0x94c6, 0x0080, 0x1d20, 0x8420, 0x8e70, 0x1f04, 0x7f5c,
- 0x82ff, 0x1118, 0x9085, 0x0001, 0x0018, 0xc2fc, 0x2208, 0x9006,
- 0x00de, 0x00ee, 0x00be, 0x0005, 0x9085, 0x0001, 0x0cc8, 0x2001,
+ 0x080c, 0x14e7, 0x00fe, 0x0005, 0x2001, 0x020d, 0x2003, 0x0020,
+ 0x781f, 0x0300, 0x00fe, 0x0005, 0x781c, 0xd08c, 0x0904, 0x7d6e,
+ 0x68bc, 0x90aa, 0x0005, 0x0a04, 0x839e, 0x7d44, 0x7c40, 0x9484,
+ 0x0fff, 0x688e, 0x9584, 0x00f6, 0x1510, 0x9484, 0x7000, 0x0140,
+ 0x908a, 0x2000, 0x1260, 0x9584, 0x0700, 0x8007, 0x0804, 0x7d75,
+ 0x7000, 0x9084, 0xff00, 0x9086, 0x8100, 0x0da8, 0x00b0, 0x9484,
+ 0x0fff, 0x1130, 0x7000, 0x9084, 0xff00, 0x9086, 0x8100, 0x11c0,
+ 0x080c, 0xe0a1, 0x080c, 0x82d3, 0x7817, 0x0140, 0x00a8, 0x9584,
+ 0x0076, 0x1118, 0x080c, 0x8331, 0x19c0, 0xd5a4, 0x0148, 0x0046,
+ 0x0056, 0x080c, 0x7dcd, 0x080c, 0x225f, 0x005e, 0x004e, 0x0020,
+ 0x080c, 0xe0a1, 0x7817, 0x0140, 0x080c, 0x7351, 0x0168, 0x2001,
+ 0x0111, 0x2004, 0xd08c, 0x0140, 0x688f, 0x0000, 0x2001, 0x0110,
+ 0x2003, 0x0008, 0x2003, 0x0000, 0x080c, 0x7dae, 0x2001, 0x19cd,
+ 0x2004, 0x9005, 0x090c, 0x8e38, 0x0005, 0x0002, 0x7d87, 0x80b7,
+ 0x7d7e, 0x7d7e, 0x7d7e, 0x7d7e, 0x7d7e, 0x7d7e, 0x7817, 0x0140,
+ 0x2001, 0x19cd, 0x2004, 0x9005, 0x090c, 0x8e38, 0x0005, 0x7000,
+ 0x908c, 0xff00, 0x9194, 0xf000, 0x810f, 0x9286, 0x2000, 0x1150,
+ 0x6800, 0x9086, 0x0001, 0x1118, 0x080c, 0x56c4, 0x0070, 0x080c,
+ 0x7ded, 0x0058, 0x9286, 0x3000, 0x1118, 0x080c, 0x7fde, 0x0028,
+ 0x9286, 0x8000, 0x1110, 0x080c, 0x81ec, 0x7817, 0x0140, 0x2001,
+ 0x19cd, 0x2004, 0x9005, 0x090c, 0x8e38, 0x0005, 0x2001, 0x1810,
+ 0x2004, 0xd08c, 0x0178, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003,
+ 0x1148, 0x0026, 0x0036, 0x2011, 0x8048, 0x2518, 0x080c, 0x4b6d,
+ 0x003e, 0x002e, 0x0005, 0x0036, 0x0046, 0x0056, 0x00f6, 0x2079,
+ 0x0200, 0x2019, 0xfffe, 0x7c30, 0x0050, 0x0036, 0x0046, 0x0056,
+ 0x00f6, 0x2079, 0x0200, 0x7d44, 0x7c40, 0x2019, 0xffff, 0x2001,
+ 0x1810, 0x2004, 0xd08c, 0x0160, 0x2001, 0x1800, 0x2004, 0x9086,
+ 0x0003, 0x1130, 0x0026, 0x2011, 0x8048, 0x080c, 0x4b6d, 0x002e,
+ 0x00fe, 0x005e, 0x004e, 0x003e, 0x0005, 0x00b6, 0x00c6, 0x7010,
+ 0x9084, 0xff00, 0x8007, 0x9096, 0x0001, 0x0120, 0x9096, 0x0023,
+ 0x1904, 0x7fab, 0x688c, 0x9082, 0x0004, 0x0a04, 0x7fab, 0x9186,
+ 0x0023, 0x15e8, 0x080c, 0x8292, 0x0904, 0x7fab, 0x6120, 0x9186,
+ 0x0001, 0x0150, 0x9186, 0x0004, 0x0138, 0x9186, 0x0008, 0x0120,
+ 0x9186, 0x000a, 0x1904, 0x7fab, 0x7124, 0x610a, 0x7030, 0x908e,
+ 0x0200, 0x1130, 0x2009, 0x0015, 0x080c, 0xa419, 0x0804, 0x7fab,
+ 0x908e, 0x0214, 0x0118, 0x908e, 0x0210, 0x1130, 0x2009, 0x0015,
+ 0x080c, 0xa419, 0x0804, 0x7fab, 0x908e, 0x0100, 0x1904, 0x7fab,
+ 0x7034, 0x9005, 0x1904, 0x7fab, 0x688c, 0x9082, 0x0008, 0x0a04,
+ 0x7fab, 0x2009, 0x0016, 0x080c, 0xa419, 0x0804, 0x7fab, 0x9186,
+ 0x0022, 0x1904, 0x7fab, 0x7030, 0x908e, 0x0300, 0x1580, 0x68d8,
+ 0xd0a4, 0x0528, 0xc0b5, 0x68da, 0x7100, 0x918c, 0x00ff, 0x697a,
+ 0x7004, 0x687e, 0x00f6, 0x2079, 0x0100, 0x79e6, 0x78ea, 0x0006,
+ 0x9084, 0x00ff, 0x0016, 0x2008, 0x080c, 0x2751, 0x7932, 0x7936,
+ 0x001e, 0x000e, 0x00fe, 0x080c, 0x2708, 0x695a, 0x703c, 0x00e6,
+ 0x2071, 0x0140, 0x7086, 0x2071, 0x1800, 0x70b2, 0x00ee, 0x7034,
+ 0x9005, 0x1904, 0x7fab, 0x2009, 0x0017, 0x0804, 0x7f5b, 0x908e,
+ 0x0400, 0x1190, 0x7034, 0x9005, 0x1904, 0x7fab, 0x080c, 0x7351,
+ 0x0120, 0x2009, 0x001d, 0x0804, 0x7f5b, 0x68d8, 0xc0a5, 0x68da,
+ 0x2009, 0x0030, 0x0804, 0x7f5b, 0x908e, 0x0500, 0x1140, 0x7034,
+ 0x9005, 0x1904, 0x7fab, 0x2009, 0x0018, 0x0804, 0x7f5b, 0x908e,
+ 0x2010, 0x1120, 0x2009, 0x0019, 0x0804, 0x7f5b, 0x908e, 0x2110,
+ 0x1120, 0x2009, 0x001a, 0x0804, 0x7f5b, 0x908e, 0x5200, 0x1140,
+ 0x7034, 0x9005, 0x1904, 0x7fab, 0x2009, 0x001b, 0x0804, 0x7f5b,
+ 0x908e, 0x5000, 0x1140, 0x7034, 0x9005, 0x1904, 0x7fab, 0x2009,
+ 0x001c, 0x0804, 0x7f5b, 0x908e, 0x1300, 0x1120, 0x2009, 0x0034,
+ 0x0804, 0x7f5b, 0x908e, 0x1200, 0x1140, 0x7034, 0x9005, 0x1904,
+ 0x7fab, 0x2009, 0x0024, 0x0804, 0x7f5b, 0x908c, 0xff00, 0x918e,
+ 0x2400, 0x1170, 0x2009, 0x002d, 0x2001, 0x1810, 0x2004, 0xd09c,
+ 0x0904, 0x7f5b, 0x080c, 0xd02f, 0x1904, 0x7fab, 0x0804, 0x7f59,
+ 0x908c, 0xff00, 0x918e, 0x5300, 0x1120, 0x2009, 0x002a, 0x0804,
+ 0x7f5b, 0x908e, 0x0f00, 0x1120, 0x2009, 0x0020, 0x0804, 0x7f5b,
+ 0x908e, 0x6104, 0x1598, 0x2029, 0x0205, 0x2011, 0x026d, 0x8208,
+ 0x2204, 0x9092, 0x0401, 0x1a04, 0x7fab, 0x9094, 0x0003, 0x1904,
+ 0x7fab, 0x6a8c, 0x9212, 0x0a04, 0x7fab, 0x9082, 0x0004, 0x0904,
+ 0x7fab, 0x8004, 0x8004, 0x20a8, 0x2011, 0x8015, 0x211c, 0x8108,
+ 0x0046, 0x2124, 0x080c, 0x4b6d, 0x004e, 0x8108, 0x0f04, 0x7f21,
+ 0x9186, 0x0280, 0x1d88, 0x2504, 0x8000, 0x202a, 0x2009, 0x0260,
+ 0x0c58, 0x202b, 0x0000, 0x2009, 0x0023, 0x04a8, 0x908e, 0x6000,
+ 0x1118, 0x2009, 0x003f, 0x0478, 0x908e, 0x7800, 0x1118, 0x2009,
+ 0x0045, 0x0448, 0x908e, 0x1000, 0x1118, 0x2009, 0x004e, 0x0418,
+ 0x908e, 0x6300, 0x1118, 0x2009, 0x004a, 0x00e8, 0x908c, 0xff00,
+ 0x918e, 0x5600, 0x1118, 0x2009, 0x004f, 0x00a8, 0x908c, 0xff00,
+ 0x918e, 0x5700, 0x1118, 0x2009, 0x0050, 0x0068, 0x908e, 0x7d00,
+ 0x1118, 0x2009, 0x0053, 0x0038, 0x2009, 0x001d, 0x6838, 0xd0d4,
+ 0x0110, 0x2009, 0x004c, 0x0016, 0x2011, 0x0263, 0x2204, 0x8211,
+ 0x220c, 0x080c, 0x2708, 0x1904, 0x7fae, 0x080c, 0x6497, 0x1904,
+ 0x7fae, 0xbe12, 0xbd16, 0x001e, 0x0016, 0x080c, 0x7351, 0x01c0,
+ 0x68d8, 0xd08c, 0x1148, 0x7000, 0x9084, 0x00ff, 0x1188, 0x7004,
+ 0x9084, 0xff00, 0x1168, 0x0040, 0x6878, 0x9606, 0x1148, 0x687c,
+ 0x9506, 0x9084, 0xff00, 0x1120, 0x9584, 0x00ff, 0xb8b2, 0x0080,
+ 0xb8b0, 0x9005, 0x1168, 0x9186, 0x0046, 0x1150, 0x6878, 0x9606,
+ 0x1138, 0x687c, 0x9506, 0x9084, 0xff00, 0x1110, 0x001e, 0x0098,
+ 0x080c, 0xa347, 0x01c8, 0x2b08, 0x6112, 0x6023, 0x0004, 0x7120,
+ 0x610a, 0x001e, 0x9186, 0x004c, 0x1110, 0x6023, 0x000a, 0x0016,
+ 0x001e, 0x080c, 0xa419, 0x00ce, 0x00be, 0x0005, 0x001e, 0x0cd8,
+ 0x9085, 0x0001, 0x001e, 0x0cb8, 0x2001, 0x180e, 0x2004, 0xd0ec,
+ 0x0120, 0x2011, 0x8049, 0x080c, 0x4b6d, 0x080c, 0xa3ec, 0x0d70,
+ 0x2b08, 0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x0016,
+ 0x9186, 0x0017, 0x0118, 0x9186, 0x0030, 0x1128, 0x6007, 0x0009,
+ 0x6017, 0x2900, 0x0020, 0x6007, 0x0051, 0x6017, 0x0000, 0x602f,
+ 0x0009, 0x6003, 0x0001, 0x080c, 0x88e9, 0x0880, 0x080c, 0x83bd,
+ 0x1158, 0x080c, 0x3226, 0x1140, 0x7010, 0x9084, 0xff00, 0x8007,
+ 0x908e, 0x0008, 0x1108, 0x0009, 0x0005, 0x00b6, 0x00c6, 0x0046,
+ 0x7000, 0x908c, 0xff00, 0x810f, 0x9186, 0x0033, 0x1538, 0x080c,
+ 0x8292, 0x0904, 0x804c, 0x7124, 0x610a, 0x688c, 0x9082, 0x0004,
+ 0x0a04, 0x804c, 0x7030, 0x908e, 0x0200, 0x1148, 0x7034, 0x9005,
+ 0x1904, 0x804c, 0x2009, 0x0015, 0x080c, 0xa419, 0x04e8, 0x908e,
+ 0x0100, 0x15d0, 0x7034, 0x9005, 0x15b8, 0x688c, 0x9082, 0x0008,
+ 0x0698, 0x2009, 0x0016, 0x080c, 0xa419, 0x0470, 0x9186, 0x0032,
+ 0x1558, 0x7030, 0x908e, 0x1400, 0x1538, 0x688c, 0x9082, 0x0010,
+ 0x0618, 0x2009, 0x0038, 0x0016, 0x2011, 0x0263, 0x2204, 0x8211,
+ 0x220c, 0x080c, 0x2708, 0x11b8, 0x080c, 0x6497, 0x11a0, 0xbe12,
+ 0xbd16, 0x080c, 0xa347, 0x0178, 0x2b08, 0x6112, 0x080c, 0xc640,
+ 0x6023, 0x0004, 0x7120, 0x610a, 0x001e, 0x080c, 0xa419, 0x080c,
+ 0x8e38, 0x0010, 0x00ce, 0x001e, 0x004e, 0x00ce, 0x00be, 0x0005,
+ 0x00b6, 0x0046, 0x00e6, 0x00d6, 0x2028, 0x2130, 0x9696, 0x00ff,
+ 0x11b8, 0x9592, 0xfffc, 0x02a0, 0x9596, 0xfffd, 0x1120, 0x2009,
+ 0x007f, 0x0804, 0x80ae, 0x9596, 0xfffe, 0x1120, 0x2009, 0x007e,
+ 0x0804, 0x80ae, 0x9596, 0xfffc, 0x1118, 0x2009, 0x0080, 0x04f0,
+ 0x2011, 0x0000, 0x2019, 0x1836, 0x231c, 0xd3ac, 0x0130, 0x9026,
+ 0x20a9, 0x0800, 0x2071, 0x1000, 0x0030, 0x2021, 0x0081, 0x20a9,
+ 0x077f, 0x2071, 0x1081, 0x2e1c, 0x93dd, 0x0000, 0x1140, 0x82ff,
+ 0x11d0, 0x9496, 0x00ff, 0x01b8, 0x2410, 0xc2fd, 0x00a0, 0xbf10,
+ 0x2600, 0x9706, 0xb814, 0x1120, 0x9546, 0x1110, 0x2408, 0x00b0,
+ 0x9745, 0x1148, 0x94c6, 0x007e, 0x0130, 0x94c6, 0x007f, 0x0118,
+ 0x94c6, 0x0080, 0x1d20, 0x8420, 0x8e70, 0x1f04, 0x8083, 0x82ff,
+ 0x1118, 0x9085, 0x0001, 0x0018, 0xc2fc, 0x2208, 0x9006, 0x00de,
+ 0x00ee, 0x004e, 0x00be, 0x0005, 0x9085, 0x0001, 0x0cc0, 0x2001,
0x1836, 0x200c, 0x9184, 0x0080, 0x0110, 0xd18c, 0x0138, 0x7000,
0x908c, 0xff00, 0x810f, 0x9184, 0x000f, 0x004a, 0x7817, 0x0140,
- 0x2001, 0x19cd, 0x2004, 0x9005, 0x090c, 0x8c37, 0x0005, 0x7fb7,
- 0x7fb7, 0x7fb7, 0x7fb7, 0x7fb7, 0x7fc0, 0x7ff3, 0x8081, 0x7fb7,
- 0x7fb7, 0x7fb7, 0x7fb7, 0x7fb7, 0x7fb7, 0x7fb7, 0x7fb7, 0x7817,
- 0x0140, 0x2001, 0x19cd, 0x2004, 0x9005, 0x090c, 0x8c37, 0x0005,
- 0x00b6, 0x7110, 0xd1bc, 0x0510, 0x7120, 0x2160, 0x9c8c, 0x0003,
- 0x11e8, 0x9c8a, 0x1cc8, 0x02d0, 0x6864, 0x9c02, 0x12b8, 0x7008,
+ 0x2001, 0x19cd, 0x2004, 0x9005, 0x090c, 0x8e38, 0x0005, 0x80df,
+ 0x80df, 0x80df, 0x82a4, 0x80df, 0x80e8, 0x811b, 0x81af, 0x80df,
+ 0x80df, 0x80df, 0x80df, 0x80df, 0x80df, 0x80df, 0x80df, 0x7817,
+ 0x0140, 0x2001, 0x19cd, 0x2004, 0x9005, 0x090c, 0x8e38, 0x0005,
+ 0x00b6, 0x7110, 0xd1bc, 0x0510, 0x7120, 0x2160, 0x9c8c, 0x0007,
+ 0x11e8, 0x9c8a, 0x1cd0, 0x02d0, 0x6864, 0x9c02, 0x12b8, 0x7008,
0x9084, 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1178, 0x700c,
0xb914, 0x9106, 0x1158, 0x9484, 0x0fff, 0x9082, 0x000c, 0x0280,
- 0x7124, 0x610a, 0x2009, 0x0046, 0x080c, 0x9f88, 0x7817, 0x0140,
- 0x2001, 0x19cd, 0x2004, 0x9005, 0x090c, 0x8c37, 0x00be, 0x0005,
- 0x080c, 0x826a, 0x0c98, 0x00b6, 0x00c6, 0x7110, 0xd1bc, 0x1904,
- 0x8054, 0x7108, 0x700c, 0x2028, 0x918c, 0x00ff, 0x2130, 0x9094,
- 0xff00, 0x15b8, 0x81ff, 0x15a8, 0x9080, 0x31cc, 0x200d, 0x918c,
- 0xff00, 0x810f, 0x2001, 0x0080, 0x9106, 0x0904, 0x8054, 0x9484,
- 0x0fff, 0x9082, 0x0020, 0x0a04, 0x805f, 0x080c, 0x63c1, 0x15e0,
- 0xbe12, 0xbd16, 0xb800, 0xd0ec, 0x15b8, 0xba04, 0x9294, 0xff00,
- 0x9286, 0x0600, 0x1180, 0x080c, 0x9ec2, 0x05e0, 0x2b08, 0x6112,
- 0x6023, 0x0006, 0x7120, 0x610a, 0x7130, 0x6126, 0x2009, 0x0044,
- 0x080c, 0xc7a6, 0x0408, 0x080c, 0x6746, 0x1138, 0xb807, 0x0606,
- 0x0c50, 0x190c, 0x7f2a, 0x11c0, 0x08c0, 0x080c, 0x9ec2, 0x2b08,
- 0x0198, 0x6112, 0x6023, 0x0004, 0x7120, 0x610a, 0x9286, 0x0400,
- 0x1118, 0x6007, 0x0005, 0x0010, 0x6007, 0x0001, 0x6003, 0x0001,
- 0x080c, 0x8718, 0x080c, 0x8c37, 0x7817, 0x0140, 0x2001, 0x19cd,
- 0x2004, 0x9005, 0x090c, 0x8c37, 0x00ce, 0x00be, 0x0005, 0x080c,
- 0x826a, 0x0c90, 0x2001, 0x180e, 0x2004, 0xd0ec, 0x0120, 0x2011,
- 0x8049, 0x080c, 0x4abd, 0x080c, 0x9f5b, 0x0d30, 0x2b08, 0x6112,
- 0x6023, 0x0006, 0x7120, 0x610a, 0x7130, 0x6126, 0x6017, 0xf300,
- 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x86d0, 0x080c, 0x8c37,
- 0x0898, 0x00b6, 0x7110, 0xd1bc, 0x0500, 0x7020, 0x2060, 0x9c84,
- 0x0003, 0x11d8, 0x9c82, 0x1cc8, 0x02c0, 0x6864, 0x9c02, 0x12a8,
- 0x7008, 0x9084, 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1168,
- 0x700c, 0xb914, 0x9106, 0x1148, 0x9484, 0x0fff, 0x9082, 0x000c,
- 0x0270, 0x2009, 0x0045, 0x080c, 0x9f88, 0x7817, 0x0140, 0x2001,
- 0x19cd, 0x2004, 0x9005, 0x090c, 0x8c37, 0x00be, 0x0005, 0x080c,
- 0x826a, 0x0c98, 0x6120, 0x9186, 0x0002, 0x0128, 0x9186, 0x0005,
- 0x0110, 0x9085, 0x0001, 0x0005, 0x080c, 0x825b, 0x1180, 0x080c,
- 0x318a, 0x1168, 0x7010, 0x9084, 0xff00, 0x8007, 0x9086, 0x0000,
+ 0x7124, 0x610a, 0x2009, 0x0046, 0x080c, 0xa419, 0x7817, 0x0140,
+ 0x2001, 0x19cd, 0x2004, 0x9005, 0x090c, 0x8e38, 0x00be, 0x0005,
+ 0x080c, 0x83cc, 0x0c98, 0x00b6, 0x00c6, 0x7110, 0xd1bc, 0x1904,
+ 0x8182, 0x7108, 0x700c, 0x2028, 0x918c, 0x00ff, 0x2130, 0x9094,
+ 0xff00, 0x15e8, 0x81ff, 0x15d8, 0x9080, 0x3268, 0x200d, 0x918c,
+ 0xff00, 0x810f, 0x2001, 0x0080, 0x9106, 0x0904, 0x8182, 0x9484,
+ 0x0fff, 0x9082, 0x0020, 0x0a04, 0x818d, 0x080c, 0x6497, 0x1904,
+ 0x8182, 0xbe12, 0xbd16, 0xb800, 0xd0ec, 0x15e0, 0xba04, 0x9294,
+ 0xff00, 0x9286, 0x0600, 0x11a8, 0x080c, 0xa347, 0x0904, 0x8190,
+ 0x2b08, 0x7028, 0x6046, 0x702c, 0x604a, 0x6112, 0x6023, 0x0006,
+ 0x7120, 0x610a, 0x7130, 0x6156, 0x2009, 0x0044, 0x080c, 0xd2ad,
+ 0x0408, 0x080c, 0x686d, 0x1138, 0xb807, 0x0606, 0x0c28, 0x190c,
+ 0x8050, 0x11c0, 0x0890, 0x080c, 0xa347, 0x2b08, 0x0198, 0x6112,
+ 0x6023, 0x0004, 0x7120, 0x610a, 0x9286, 0x0400, 0x1118, 0x6007,
+ 0x0005, 0x0010, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x88e9,
+ 0x080c, 0x8e38, 0x7817, 0x0140, 0x2001, 0x19cd, 0x2004, 0x9005,
+ 0x090c, 0x8e38, 0x00ce, 0x00be, 0x0005, 0x080c, 0x83cc, 0x0c90,
+ 0x2001, 0x180e, 0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c,
+ 0x4b6d, 0x080c, 0xa3ec, 0x0d30, 0x2b08, 0x6112, 0x6023, 0x0006,
+ 0x7120, 0x610a, 0x7130, 0x6156, 0x6017, 0xf300, 0x6003, 0x0001,
+ 0x6007, 0x0041, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x0898, 0x00b6,
+ 0x7110, 0xd1bc, 0x0510, 0x7020, 0x2060, 0x9c84, 0x0007, 0x11e8,
+ 0x9c82, 0x1cd0, 0x02d0, 0x6864, 0x9c02, 0x12b8, 0x7008, 0x9084,
+ 0x00ff, 0x6110, 0x2158, 0xb910, 0x9106, 0x1178, 0x700c, 0xb914,
+ 0x9106, 0x1158, 0x9484, 0x0fff, 0x9082, 0x000c, 0x0280, 0x7124,
+ 0x610a, 0x2009, 0x0045, 0x080c, 0xa419, 0x7817, 0x0140, 0x2001,
+ 0x19cd, 0x2004, 0x9005, 0x090c, 0x8e38, 0x00be, 0x0005, 0x080c,
+ 0x83cc, 0x0c98, 0x6120, 0x9186, 0x0002, 0x0128, 0x9186, 0x0005,
+ 0x0110, 0x9085, 0x0001, 0x0005, 0x080c, 0x83bd, 0x1180, 0x080c,
+ 0x3226, 0x1168, 0x7010, 0x9084, 0xff00, 0x8007, 0x9086, 0x0000,
0x1130, 0x9184, 0x000f, 0x908a, 0x0006, 0x1208, 0x000b, 0x0005,
- 0x80d6, 0x80d7, 0x80d6, 0x80d6, 0x8139, 0x814c, 0x0005, 0x00b6,
- 0x700c, 0x7108, 0x080c, 0x269f, 0x1904, 0x8137, 0x080c, 0x63c1,
- 0x1904, 0x8137, 0xbe12, 0xbd16, 0x7110, 0xd1bc, 0x0528, 0x702c,
- 0xd084, 0x1904, 0x8137, 0x080c, 0x6746, 0x0148, 0x9086, 0x0004,
- 0x0130, 0x080c, 0x674e, 0x0118, 0x9086, 0x0004, 0x1588, 0x00c6,
- 0x080c, 0x815f, 0x00ce, 0x05d8, 0x080c, 0x9ec2, 0x2b08, 0x05b8,
- 0x6112, 0x080c, 0xbc97, 0x6023, 0x0002, 0x7120, 0x610a, 0x2009,
- 0x0088, 0x080c, 0x9f88, 0x0458, 0x080c, 0x6746, 0x0148, 0x9086,
- 0x0004, 0x0130, 0x080c, 0x674e, 0x0118, 0x9086, 0x0004, 0x1180,
- 0x080c, 0x9ec2, 0x2b08, 0x01d8, 0x6112, 0x080c, 0xbc97, 0x6023,
- 0x0005, 0x7120, 0x610a, 0x2009, 0x0088, 0x080c, 0x9f88, 0x0078,
- 0x080c, 0x9ec2, 0x2b08, 0x0158, 0x6112, 0x080c, 0xbc97, 0x6023,
- 0x0004, 0x7120, 0x610a, 0x2009, 0x0001, 0x080c, 0x9f88, 0x00be,
- 0x0005, 0x688c, 0x9082, 0x000c, 0x0270, 0x7110, 0xd1bc, 0x0158,
- 0x00f1, 0x0148, 0x080c, 0x80b2, 0x1130, 0x7124, 0x610a, 0x2009,
- 0x0089, 0x080c, 0x9f88, 0x0005, 0x688c, 0x9082, 0x0004, 0x0270,
- 0x7110, 0xd1bc, 0x0158, 0x0059, 0x0148, 0x080c, 0x80b2, 0x1130,
- 0x7124, 0x610a, 0x2009, 0x008a, 0x080c, 0x9f88, 0x0005, 0x7020,
- 0x2060, 0x9c84, 0x0003, 0x1158, 0x9c82, 0x1cc8, 0x0240, 0x2001,
- 0x1819, 0x2004, 0x9c02, 0x1218, 0x9085, 0x0001, 0x0005, 0x9006,
- 0x0ce8, 0x2031, 0x0105, 0x0069, 0x0005, 0x2031, 0x0206, 0x0049,
- 0x0005, 0x2031, 0x0207, 0x0029, 0x0005, 0x2031, 0x0213, 0x0009,
- 0x0005, 0x00c6, 0x0096, 0x00f6, 0x7000, 0x9084, 0xf000, 0x9086,
- 0xc000, 0x05d0, 0x080c, 0x9ec2, 0x05b8, 0x0066, 0x00c6, 0x0046,
- 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x269f, 0x15a0,
- 0x080c, 0x63c1, 0x1588, 0xbe12, 0xbd16, 0x2b00, 0x004e, 0x00ce,
- 0x6012, 0x080c, 0xbc97, 0x080c, 0x1001, 0x0510, 0x2900, 0x602a,
- 0x9006, 0xa802, 0xa86a, 0xac6e, 0xa85c, 0x90f8, 0x001c, 0x20a9,
- 0x000e, 0xa860, 0x20e8, 0x20e1, 0x0000, 0x2fa0, 0x2e98, 0x4003,
- 0x006e, 0x6616, 0x6007, 0x003e, 0x6023, 0x0001, 0x6003, 0x0001,
- 0x080c, 0x8718, 0x080c, 0x8c37, 0x00fe, 0x009e, 0x00ce, 0x0005,
- 0x080c, 0x9f18, 0x006e, 0x0cc0, 0x004e, 0x00ce, 0x0cc8, 0x00c6,
- 0x7000, 0x908c, 0xff00, 0x9184, 0xf000, 0x810f, 0x9086, 0x2000,
- 0x1904, 0x8226, 0x9186, 0x0022, 0x15f0, 0x2001, 0x0111, 0x2004,
- 0x9005, 0x1904, 0x8228, 0x7030, 0x908e, 0x0400, 0x0904, 0x8228,
- 0x908e, 0x6000, 0x05e8, 0x908e, 0x5400, 0x05d0, 0x908e, 0x0300,
- 0x11d8, 0x2009, 0x1836, 0x210c, 0xd18c, 0x1590, 0xd1a4, 0x1580,
- 0x080c, 0x6704, 0x0588, 0x68ac, 0x9084, 0x00ff, 0x7100, 0x918c,
- 0x00ff, 0x9106, 0x1518, 0x687c, 0x69ac, 0x918c, 0xff00, 0x9105,
- 0x7104, 0x9106, 0x11d8, 0x00e0, 0x2009, 0x0103, 0x210c, 0xd1b4,
- 0x11a8, 0x908e, 0x5200, 0x09e8, 0x908e, 0x0500, 0x09d0, 0x908e,
- 0x5000, 0x09b8, 0x0058, 0x9186, 0x0023, 0x1140, 0x080c, 0x815f,
- 0x0128, 0x6004, 0x9086, 0x0002, 0x0118, 0x0000, 0x9006, 0x0010,
- 0x9085, 0x0001, 0x00ce, 0x0005, 0x7030, 0x908e, 0x0300, 0x0118,
- 0x908e, 0x5200, 0x1d98, 0x2001, 0x1836, 0x2004, 0x9084, 0x0009,
- 0x9086, 0x0008, 0x0d68, 0x0c50, 0x00f6, 0x2079, 0x0200, 0x7800,
- 0xc0e5, 0xc0cc, 0x7802, 0x00fe, 0x0005, 0x00f6, 0x2079, 0x1800,
- 0x7834, 0xd084, 0x1130, 0x2079, 0x0200, 0x7800, 0x9085, 0x1200,
- 0x7802, 0x00fe, 0x0005, 0x00e6, 0x2071, 0x1800, 0x7034, 0xc084,
- 0x7036, 0x00ee, 0x0005, 0x0016, 0x2001, 0x1836, 0x200c, 0x9184,
- 0x0080, 0x0118, 0xd18c, 0x0118, 0x9006, 0x001e, 0x0005, 0x9085,
- 0x0001, 0x0cd8, 0x0016, 0x2009, 0x185d, 0x2104, 0x8000, 0x0208,
- 0x200a, 0x001e, 0x0005, 0x2071, 0x19d7, 0x7003, 0x0003, 0x700f,
- 0x0361, 0x9006, 0x701a, 0x707a, 0x7012, 0x7017, 0x1cc8, 0x7007,
- 0x0000, 0x7026, 0x702b, 0x9639, 0x7032, 0x703a, 0x703f, 0x0064,
- 0x7037, 0x96a1, 0x7047, 0xffff, 0x704a, 0x704f, 0x5434, 0x7052,
- 0x7063, 0x843b, 0x080c, 0x101a, 0x090c, 0x0dc4, 0x2900, 0x7042,
- 0xa86b, 0x0003, 0xa873, 0x0100, 0xa8af, 0xdcb0, 0x0005, 0x2071,
- 0x19d7, 0x1d04, 0x834d, 0x2091, 0x6000, 0x700c, 0x8001, 0x700e,
- 0x1500, 0x2001, 0x1880, 0x2004, 0xd0c4, 0x0158, 0x3a00, 0xd08c,
- 0x1140, 0x20d1, 0x0000, 0x20d1, 0x0001, 0x20d1, 0x0000, 0x080c,
- 0x0dc4, 0x700f, 0x0361, 0x7007, 0x0001, 0x0126, 0x2091, 0x8000,
- 0x7048, 0x900d, 0x0148, 0x8109, 0x714a, 0x1130, 0x704c, 0x080f,
- 0x0018, 0x0126, 0x2091, 0x8000, 0x7024, 0x900d, 0x0188, 0x7020,
- 0x8001, 0x7022, 0x1168, 0x7023, 0x0009, 0x8109, 0x7126, 0x9186,
- 0x03e8, 0x1110, 0x7028, 0x080f, 0x81ff, 0x1110, 0x7028, 0x080f,
- 0x7030, 0x900d, 0x05a8, 0x702c, 0x8001, 0x702e, 0x1588, 0x0016,
- 0x2009, 0x0306, 0x210c, 0x9184, 0x0030, 0x01e8, 0x9184, 0x0048,
- 0x9086, 0x0008, 0x11c0, 0x7038, 0x9005, 0x01a8, 0x8001, 0x703a,
- 0x1190, 0x080c, 0x72e5, 0x0178, 0x00e6, 0x2071, 0x19c4, 0x080c,
- 0x971d, 0x00ee, 0x1140, 0x2009, 0x1a61, 0x2104, 0x8000, 0x0208,
- 0x200a, 0x001e, 0x0068, 0x001e, 0x702f, 0x0009, 0x8109, 0x7132,
- 0x0128, 0x9184, 0x007f, 0x090c, 0x97ec, 0x0010, 0x7034, 0x080f,
- 0x7044, 0x9005, 0x0118, 0x0310, 0x8001, 0x7046, 0x7054, 0x900d,
- 0x0168, 0x7050, 0x8001, 0x7052, 0x1148, 0x7053, 0x0009, 0x8109,
- 0x7156, 0x1120, 0x7158, 0x7156, 0x7060, 0x080f, 0x7018, 0x900d,
- 0x01d8, 0x0016, 0x7078, 0x900d, 0x0158, 0x7074, 0x8001, 0x7076,
- 0x1138, 0x7077, 0x0009, 0x8109, 0x717a, 0x1110, 0x707c, 0x080f,
- 0x001e, 0x7008, 0x8001, 0x700a, 0x1138, 0x700b, 0x0009, 0x8109,
- 0x711a, 0x1110, 0x701c, 0x080f, 0x012e, 0x7004, 0x0002, 0x8375,
- 0x8376, 0x83dc, 0x00e6, 0x2071, 0x19d7, 0x7018, 0x9005, 0x1120,
- 0x711a, 0x721e, 0x700b, 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006,
- 0x2071, 0x19d7, 0x701c, 0x9206, 0x1120, 0x701a, 0x701e, 0x707a,
- 0x707e, 0x000e, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x19d7, 0xb888,
- 0x9102, 0x0208, 0xb98a, 0x00ee, 0x0005, 0x0005, 0x00b6, 0x7110,
- 0x0126, 0x2091, 0x8000, 0x080c, 0x6411, 0x1904, 0x83d1, 0xb888,
- 0x8001, 0x0230, 0xb88a, 0x1120, 0x0016, 0x080c, 0x8c37, 0x001e,
- 0x901e, 0xb84c, 0x904d, 0x0904, 0x83d1, 0xa864, 0x9005, 0x0118,
- 0x8001, 0xa866, 0x0128, 0x2918, 0xa800, 0x904d, 0x05d0, 0x0ca8,
- 0xa888, 0x90a2, 0x199a, 0x0270, 0x9082, 0x1999, 0xa88a, 0x90a2,
- 0x199a, 0x0210, 0x2001, 0x1999, 0x8003, 0x8023, 0x8423, 0x9420,
- 0xac66, 0x0c48, 0xac00, 0xa803, 0x0000, 0x83ff, 0x1150, 0xb850,
- 0x9906, 0x1128, 0xb84f, 0x0000, 0xb853, 0x0000, 0x0050, 0xbc4e,
- 0x0040, 0x0096, 0x2348, 0xac02, 0x009e, 0xb850, 0x9906, 0x1108,
- 0xbb52, 0xa86b, 0x0103, 0xa87f, 0x0006, 0xa87b, 0x0000, 0x0016,
- 0x0036, 0x0046, 0x080c, 0x6b1d, 0x004e, 0x003e, 0x001e, 0x2400,
- 0x0820, 0x012e, 0x8108, 0x9182, 0x0800, 0x0218, 0x900e, 0x7007,
- 0x0002, 0x7112, 0x00be, 0x0005, 0x7014, 0x2060, 0x0126, 0x2091,
- 0x8000, 0x6018, 0x9005, 0x0528, 0x8001, 0x601a, 0x1510, 0x6120,
- 0x9186, 0x0003, 0x0118, 0x9186, 0x0006, 0x11c8, 0x080c, 0xb955,
- 0x01b0, 0x6014, 0x2048, 0xa888, 0x908a, 0x199a, 0x0280, 0x9082,
- 0x1999, 0xa88a, 0x908a, 0x199a, 0x0210, 0x2001, 0x1999, 0x8003,
- 0x800b, 0x810b, 0x9108, 0x611a, 0xa880, 0xd0e4, 0x0110, 0x080c,
- 0xb68c, 0x012e, 0x9c88, 0x000c, 0x7116, 0x2001, 0x1819, 0x2004,
- 0x9102, 0x0220, 0x7017, 0x1cc8, 0x7007, 0x0000, 0x0005, 0x00e6,
- 0x2071, 0x19d7, 0x7027, 0x07d0, 0x7023, 0x0009, 0x00ee, 0x0005,
- 0x2001, 0x19e0, 0x2003, 0x0000, 0x0005, 0x00e6, 0x2071, 0x19d7,
- 0x7132, 0x702f, 0x0009, 0x00ee, 0x0005, 0x2011, 0x19e3, 0x2013,
- 0x0000, 0x0005, 0x00e6, 0x2071, 0x19d7, 0x711a, 0x721e, 0x700b,
- 0x0009, 0x00ee, 0x0005, 0x0086, 0x0026, 0x705c, 0x8000, 0x705e,
- 0x2001, 0x19e7, 0x2044, 0xa070, 0x9086, 0x0000, 0x0150, 0x7070,
- 0xa09e, 0x706c, 0xa09a, 0x7068, 0xa096, 0x7064, 0xa092, 0x080c,
- 0x10eb, 0x002e, 0x008e, 0x0005, 0x0006, 0x0016, 0x0096, 0x00a6,
- 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x0156, 0x080c, 0x829f,
- 0x015e, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x00ae, 0x009e,
- 0x001e, 0x000e, 0x0005, 0x00e6, 0x2071, 0x19d7, 0x717a, 0x727e,
- 0x7077, 0x0009, 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071, 0x19d7,
- 0x707c, 0x9206, 0x1110, 0x707a, 0x707e, 0x000e, 0x00ee, 0x0005,
- 0x00c6, 0x2061, 0x1a4f, 0x00ce, 0x0005, 0x9184, 0x000f, 0x8003,
- 0x8003, 0x8003, 0x9080, 0x1a4f, 0x2060, 0x0005, 0xa888, 0x908a,
- 0x199a, 0x1630, 0x9005, 0x1150, 0x00c6, 0x2061, 0x1a4f, 0x6014,
- 0x00ce, 0x9005, 0x1130, 0x2001, 0x001e, 0x0018, 0x908e, 0xffff,
- 0x01a8, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0xa880, 0x908c,
- 0x00c0, 0x918e, 0x00c0, 0x0904, 0x84ec, 0xd0b4, 0x1160, 0xd0bc,
- 0x1528, 0x2009, 0x0006, 0x080c, 0x8509, 0x0005, 0x900e, 0x0c68,
- 0x2001, 0x1999, 0x08b8, 0xd0fc, 0x0138, 0x908c, 0x0003, 0x0120,
- 0x918e, 0x0003, 0x1904, 0x8503, 0x2009, 0x1880, 0x2104, 0xd084,
- 0x1138, 0x87ff, 0x1120, 0x2009, 0x0043, 0x0804, 0x9f88, 0x0005,
- 0x87ff, 0x1de8, 0x2009, 0x0042, 0x0804, 0x9f88, 0xd0fc, 0x0130,
- 0x908c, 0x0003, 0x0118, 0x918e, 0x0003, 0x1528, 0x0076, 0x00f6,
- 0x2c78, 0x080c, 0x1679, 0x00fe, 0x007e, 0x87ff, 0x1120, 0x2009,
- 0x0042, 0x080c, 0x9f88, 0x0005, 0xd0fc, 0x0160, 0x9084, 0x0003,
- 0x908e, 0x0002, 0x0148, 0x87ff, 0x1120, 0x2009, 0x0041, 0x080c,
- 0x9f88, 0x0005, 0x0061, 0x0ce8, 0x87ff, 0x1dd8, 0x2009, 0x0043,
- 0x080c, 0x9f88, 0x0cb0, 0x2009, 0x0004, 0x0019, 0x0005, 0x2009,
- 0x0001, 0x0096, 0x080c, 0xb955, 0x0518, 0x6014, 0x2048, 0xa986,
- 0xa800, 0x6016, 0x9186, 0x0001, 0x1188, 0xa980, 0x918c, 0x8100,
- 0x918e, 0x8100, 0x1158, 0x00c6, 0x2061, 0x1a4f, 0x6200, 0xd28c,
- 0x1120, 0x6204, 0x8210, 0x0208, 0x6206, 0x00ce, 0x080c, 0x6959,
- 0x6014, 0x904d, 0x0076, 0x2039, 0x0000, 0x190c, 0x848e, 0x007e,
- 0x009e, 0x0005, 0x0156, 0x00c6, 0x2061, 0x1a4f, 0x6000, 0x81ff,
- 0x0110, 0x9205, 0x0008, 0x9204, 0x6002, 0x00ce, 0x015e, 0x0005,
- 0x6800, 0xd08c, 0x1138, 0x6808, 0x9005, 0x0120, 0x8001, 0x680a,
- 0x9085, 0x0001, 0x0005, 0x0126, 0x2091, 0x8000, 0x0076, 0x0156,
- 0x20a9, 0x0010, 0x9005, 0x0510, 0x911a, 0x1600, 0x8213, 0x2039,
- 0x0100, 0x273c, 0x97be, 0x0008, 0x1110, 0x818d, 0x0010, 0x81f5,
- 0x3e08, 0x0228, 0x911a, 0x1220, 0x1f04, 0x8556, 0x0028, 0x911a,
- 0x2308, 0x8210, 0x1f04, 0x8556, 0x0006, 0x3200, 0x9084, 0xefff,
- 0x2080, 0x000e, 0x015e, 0x007e, 0x012e, 0x0005, 0x0006, 0x3200,
- 0x9085, 0x1000, 0x0ca8, 0x0126, 0x2091, 0x2800, 0x2079, 0x19c4,
- 0x012e, 0x00d6, 0x2069, 0x19c4, 0x6803, 0x0005, 0x0156, 0x0146,
- 0x01d6, 0x20e9, 0x0000, 0x2069, 0x0200, 0x080c, 0x9d0b, 0x0401,
- 0x080c, 0x9cf6, 0x00e9, 0x080c, 0x9cf9, 0x00d1, 0x080c, 0x9cfc,
- 0x00b9, 0x080c, 0x9cff, 0x00a1, 0x080c, 0x9d02, 0x0089, 0x080c,
- 0x9d05, 0x0071, 0x080c, 0x9d08, 0x0059, 0x01de, 0x014e, 0x015e,
- 0x2069, 0x0004, 0x2d04, 0x9085, 0x8001, 0x206a, 0x00de, 0x0005,
- 0x20a9, 0x0020, 0x20a1, 0x0240, 0x2001, 0x0000, 0x4004, 0x0005,
- 0x00c6, 0x6027, 0x0001, 0x7804, 0x9084, 0x0007, 0x0002, 0x85cb,
- 0x85ef, 0x8630, 0x85d1, 0x85ef, 0x85cb, 0x85c9, 0x85c7, 0x080c,
- 0x0dc4, 0x00ce, 0x0005, 0x080c, 0x8420, 0x080c, 0x8c37, 0x00ce,
- 0x0005, 0x62c0, 0x82ff, 0x1110, 0x00ce, 0x0005, 0x2011, 0x5d5f,
- 0x080c, 0x835e, 0x7828, 0x9092, 0x00c8, 0x1228, 0x8000, 0x782a,
- 0x080c, 0x5d9f, 0x0c88, 0x62c0, 0x080c, 0x9d0f, 0x080c, 0x5d5f,
- 0x7807, 0x0003, 0x7827, 0x0000, 0x782b, 0x0000, 0x0c28, 0x080c,
- 0x8420, 0x6220, 0xd2a4, 0x0170, 0xd2cc, 0x0160, 0x782b, 0x0000,
- 0x7824, 0x9065, 0x090c, 0x0dc4, 0x2009, 0x0013, 0x080c, 0x9f88,
- 0x00ce, 0x0005, 0x00c6, 0x7824, 0x9065, 0x090c, 0x0dc4, 0x7828,
- 0x9092, 0xc350, 0x12c0, 0x8000, 0x782a, 0x00ce, 0x080c, 0x29fa,
- 0x0278, 0x00c6, 0x7924, 0x2160, 0x6010, 0x906d, 0x090c, 0x0dc4,
- 0x7807, 0x0000, 0x7827, 0x0000, 0x00ce, 0x080c, 0x8c37, 0x0c00,
- 0x080c, 0x95ff, 0x08e8, 0x2011, 0x0130, 0x2214, 0x080c, 0x9d0f,
- 0x080c, 0xd36d, 0x2009, 0x0014, 0x080c, 0x9f88, 0x00ce, 0x0880,
- 0x2001, 0x19e0, 0x2003, 0x0000, 0x62c0, 0x82ff, 0x1160, 0x782b,
- 0x0000, 0x7824, 0x9065, 0x090c, 0x0dc4, 0x2009, 0x0013, 0x080c,
- 0x9fda, 0x00ce, 0x0005, 0x00b6, 0x00c6, 0x00d6, 0x7824, 0x9005,
- 0x090c, 0x0dc4, 0x7828, 0x9092, 0xc350, 0x1648, 0x8000, 0x782a,
- 0x00de, 0x00ce, 0x00be, 0x080c, 0x29fa, 0x02f0, 0x00b6, 0x00c6,
- 0x00d6, 0x781c, 0x905d, 0x090c, 0x0dc4, 0xb800, 0xc0dc, 0xb802,
- 0x7924, 0x2160, 0x080c, 0x9f18, 0xb93c, 0x81ff, 0x090c, 0x0dc4,
- 0x8109, 0xb93e, 0x7807, 0x0000, 0x7827, 0x0000, 0x00de, 0x00ce,
- 0x00be, 0x080c, 0x8c37, 0x0868, 0x080c, 0x95ff, 0x0850, 0x2011,
- 0x0130, 0x2214, 0x080c, 0x9d0f, 0x080c, 0xd36d, 0x7824, 0x9065,
- 0x2009, 0x0014, 0x080c, 0x9f88, 0x00de, 0x00ce, 0x00be, 0x0804,
- 0x8641, 0x00c6, 0x2001, 0x009b, 0x2004, 0xd0fc, 0x190c, 0x1d94,
- 0x6024, 0x6027, 0x0002, 0xd0f4, 0x1580, 0x62c8, 0x60c4, 0x9205,
- 0x1170, 0x783c, 0x9065, 0x0130, 0x2009, 0x0049, 0x080c, 0x9f88,
- 0x00ce, 0x0005, 0x2011, 0x19e3, 0x2013, 0x0000, 0x0cc8, 0x793c,
- 0x81ff, 0x0dc0, 0x7944, 0x9192, 0x7530, 0x12f0, 0x8108, 0x7946,
- 0x793c, 0x9188, 0x0008, 0x210c, 0x918e, 0x0006, 0x1138, 0x6014,
- 0x9084, 0x1984, 0x9085, 0x0012, 0x6016, 0x0c10, 0x6014, 0x9084,
- 0x1984, 0x9085, 0x0016, 0x6016, 0x08d8, 0x793c, 0x2160, 0x2009,
- 0x004a, 0x080c, 0x9f88, 0x08a0, 0x7848, 0xc085, 0x784a, 0x0880,
- 0x0006, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, 0x0000,
- 0x2c08, 0x2061, 0x19c4, 0x6020, 0x8000, 0x6022, 0x6010, 0x9005,
- 0x0148, 0x9080, 0x0003, 0x2102, 0x6112, 0x012e, 0x00ce, 0x001e,
- 0x000e, 0x0005, 0x6116, 0x6112, 0x0cc0, 0x00d6, 0x2069, 0x19c4,
- 0xb800, 0xd0d4, 0x0168, 0x6820, 0x8000, 0x6822, 0x9086, 0x0001,
- 0x1110, 0x2b00, 0x681e, 0x00de, 0x0804, 0x8c37, 0x00de, 0x0005,
- 0xc0d5, 0xb802, 0x6818, 0x9005, 0x0168, 0xb856, 0xb85b, 0x0000,
- 0x0086, 0x0006, 0x2b00, 0x681a, 0x008e, 0xa05a, 0x008e, 0x2069,
- 0x19c4, 0x0c08, 0xb856, 0xb85a, 0x2b00, 0x681a, 0x681e, 0x08d8,
- 0x0006, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f, 0x0000,
- 0x2c08, 0x2061, 0x19c4, 0x6020, 0x8000, 0x6022, 0x6008, 0x9005,
- 0x0148, 0x9080, 0x0003, 0x2102, 0x610a, 0x012e, 0x00ce, 0x001e,
- 0x000e, 0x0005, 0x610e, 0x610a, 0x0cc0, 0x00c6, 0x600f, 0x0000,
- 0x2c08, 0x2061, 0x19c4, 0x6034, 0x9005, 0x0130, 0x9080, 0x0003,
- 0x2102, 0x6136, 0x00ce, 0x0005, 0x613a, 0x6136, 0x00ce, 0x0005,
- 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x00b6, 0x0096, 0x0076, 0x0066,
- 0x0056, 0x0036, 0x0026, 0x0016, 0x0006, 0x0126, 0x902e, 0x2071,
- 0x19c4, 0x7638, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff, 0x0904,
- 0x87c4, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904, 0x87bf, 0x87ff,
- 0x0120, 0x6024, 0x9106, 0x1904, 0x87bf, 0x703c, 0x9c06, 0x1178,
- 0x0036, 0x2019, 0x0001, 0x080c, 0x9964, 0x7033, 0x0000, 0x9006,
- 0x703e, 0x7042, 0x7046, 0x704a, 0x003e, 0x2029, 0x0001, 0x7038,
- 0x9c36, 0x1110, 0x660c, 0x763a, 0x7034, 0x9c36, 0x1140, 0x2c00,
- 0x9f36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000, 0x660c,
- 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f,
- 0x0000, 0x080c, 0xb955, 0x01f0, 0x6014, 0x2048, 0x6020, 0x9086,
- 0x0003, 0x15b8, 0x6004, 0x9086, 0x0040, 0x090c, 0x9b30, 0xa86b,
- 0x0103, 0xab7e, 0xa87b, 0x0000, 0x0016, 0x0036, 0x0076, 0x080c,
- 0xbc3f, 0x080c, 0xd242, 0x080c, 0x6b1d, 0x007e, 0x003e, 0x001e,
- 0x080c, 0xbb39, 0x080c, 0x9f42, 0x00ce, 0x0804, 0x875e, 0x2c78,
- 0x600c, 0x2060, 0x0804, 0x875e, 0x85ff, 0x0120, 0x0036, 0x080c,
- 0x8d06, 0x003e, 0x012e, 0x000e, 0x001e, 0x002e, 0x003e, 0x005e,
- 0x006e, 0x007e, 0x009e, 0x00be, 0x00ce, 0x00de, 0x00ee, 0x00fe,
- 0x0005, 0x6020, 0x9086, 0x0006, 0x1158, 0x0016, 0x0036, 0x0076,
- 0x080c, 0xd242, 0x080c, 0xd101, 0x007e, 0x003e, 0x001e, 0x0890,
- 0x6020, 0x9086, 0x000a, 0x0904, 0x87a9, 0x0804, 0x87a2, 0x0006,
- 0x0066, 0x0096, 0x00c6, 0x00d6, 0x00f6, 0x9036, 0x0126, 0x2091,
- 0x8000, 0x2079, 0x19c4, 0x7838, 0x9065, 0x0578, 0x600c, 0x0006,
- 0x600f, 0x0000, 0x783c, 0x9c06, 0x1168, 0x0036, 0x2019, 0x0001,
- 0x080c, 0x9964, 0x7833, 0x0000, 0x901e, 0x7b3e, 0x7b42, 0x7b46,
- 0x7b4a, 0x003e, 0x080c, 0xb955, 0x01a0, 0x6014, 0x2048, 0x6020,
- 0x9086, 0x0003, 0x11e0, 0x6004, 0x9086, 0x0040, 0x090c, 0x9b30,
- 0xa86b, 0x0103, 0xab7e, 0xa87b, 0x0000, 0x080c, 0x6b11, 0x080c,
- 0xbb39, 0x080c, 0x9f42, 0x000e, 0x0878, 0x7e3a, 0x7e36, 0x012e,
+ 0x8206, 0x8207, 0x8206, 0x8206, 0x826c, 0x827f, 0x0005, 0x00b6,
+ 0x700c, 0x7108, 0x080c, 0x2708, 0x1904, 0x826a, 0x080c, 0x6497,
+ 0x1904, 0x826a, 0xbe12, 0xbd16, 0x7110, 0xd1bc, 0x0540, 0x702c,
+ 0xd084, 0x1120, 0xb800, 0xd0bc, 0x1904, 0x826a, 0x080c, 0x686d,
+ 0x0148, 0x9086, 0x0004, 0x0130, 0x080c, 0x6875, 0x0118, 0x9086,
+ 0x0004, 0x1588, 0x00c6, 0x080c, 0x8292, 0x00ce, 0x05d8, 0x080c,
+ 0xa347, 0x2b08, 0x05b8, 0x6112, 0x080c, 0xc640, 0x6023, 0x0002,
+ 0x7120, 0x610a, 0x2009, 0x0088, 0x080c, 0xa419, 0x0458, 0x080c,
+ 0x686d, 0x0148, 0x9086, 0x0004, 0x0130, 0x080c, 0x6875, 0x0118,
+ 0x9086, 0x0004, 0x1180, 0x080c, 0xa347, 0x2b08, 0x01d8, 0x6112,
+ 0x080c, 0xc640, 0x6023, 0x0005, 0x7120, 0x610a, 0x2009, 0x0088,
+ 0x080c, 0xa419, 0x0078, 0x080c, 0xa347, 0x2b08, 0x0158, 0x6112,
+ 0x080c, 0xc640, 0x6023, 0x0004, 0x7120, 0x610a, 0x2009, 0x0001,
+ 0x080c, 0xa419, 0x00be, 0x0005, 0x688c, 0x9082, 0x000c, 0x0270,
+ 0x7110, 0xd1bc, 0x0158, 0x00f1, 0x0148, 0x080c, 0x81e2, 0x1130,
+ 0x7124, 0x610a, 0x2009, 0x0089, 0x080c, 0xa419, 0x0005, 0x688c,
+ 0x9082, 0x0004, 0x0270, 0x7110, 0xd1bc, 0x0158, 0x0059, 0x0148,
+ 0x080c, 0x81e2, 0x1130, 0x7124, 0x610a, 0x2009, 0x008a, 0x080c,
+ 0xa419, 0x0005, 0x7020, 0x2060, 0x9c84, 0x0007, 0x1158, 0x9c82,
+ 0x1cd0, 0x0240, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1218, 0x9085,
+ 0x0001, 0x0005, 0x9006, 0x0ce8, 0x00b6, 0x7110, 0xd1bc, 0x11f0,
+ 0x7024, 0x2060, 0x9c84, 0x0007, 0x11c8, 0x9c82, 0x1cd0, 0x02b0,
+ 0x6864, 0x9c02, 0x1298, 0x7008, 0x9084, 0x00ff, 0x6110, 0x2158,
+ 0xb910, 0x9106, 0x1158, 0x700c, 0xb914, 0x9106, 0x1138, 0x698c,
+ 0x81ff, 0x1170, 0x2009, 0x0051, 0x080c, 0xa419, 0x7817, 0x0140,
+ 0x2001, 0x19cd, 0x2004, 0x9005, 0x090c, 0x8e38, 0x00be, 0x0005,
+ 0x080c, 0x83cc, 0x0c98, 0x2031, 0x0105, 0x0069, 0x0005, 0x2031,
+ 0x0206, 0x0049, 0x0005, 0x2031, 0x0207, 0x0029, 0x0005, 0x2031,
+ 0x0213, 0x0009, 0x0005, 0x00c6, 0x0096, 0x00f6, 0x7000, 0x9084,
+ 0xf000, 0x9086, 0xc000, 0x05d0, 0x080c, 0xa347, 0x05b8, 0x0066,
+ 0x00c6, 0x0046, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c,
+ 0x2708, 0x15a0, 0x080c, 0x6497, 0x1588, 0xbe12, 0xbd16, 0x2b00,
+ 0x004e, 0x00ce, 0x6012, 0x080c, 0xc640, 0x080c, 0x100d, 0x0510,
+ 0x2900, 0x605a, 0x9006, 0xa802, 0xa86a, 0xac6e, 0xa85c, 0x90f8,
+ 0x001c, 0x20a9, 0x000e, 0xa860, 0x20e8, 0x20e1, 0x0000, 0x2fa0,
+ 0x2e98, 0x4003, 0x006e, 0x6616, 0x6007, 0x003e, 0x6023, 0x0001,
+ 0x6003, 0x0001, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x00fe, 0x009e,
+ 0x00ce, 0x0005, 0x080c, 0xa39d, 0x006e, 0x0cc0, 0x004e, 0x00ce,
+ 0x0cc8, 0x00c6, 0x7000, 0x908c, 0xff00, 0x9184, 0xf000, 0x810f,
+ 0x9086, 0x2000, 0x1904, 0x8388, 0x9186, 0x0022, 0x15f0, 0x2001,
+ 0x0111, 0x2004, 0x9005, 0x1904, 0x838a, 0x7030, 0x908e, 0x0400,
+ 0x0904, 0x838a, 0x908e, 0x6000, 0x05e8, 0x908e, 0x5400, 0x05d0,
+ 0x908e, 0x0300, 0x11d8, 0x2009, 0x1836, 0x210c, 0xd18c, 0x1590,
+ 0xd1a4, 0x1580, 0x080c, 0x682b, 0x0588, 0x68ac, 0x9084, 0x00ff,
+ 0x7100, 0x918c, 0x00ff, 0x9106, 0x1518, 0x687c, 0x69ac, 0x918c,
+ 0xff00, 0x9105, 0x7104, 0x9106, 0x11d8, 0x00e0, 0x2009, 0x0103,
+ 0x210c, 0xd1b4, 0x11a8, 0x908e, 0x5200, 0x09e8, 0x908e, 0x0500,
+ 0x09d0, 0x908e, 0x5000, 0x09b8, 0x0058, 0x9186, 0x0023, 0x1140,
+ 0x080c, 0x8292, 0x0128, 0x6004, 0x9086, 0x0002, 0x0118, 0x0000,
+ 0x9006, 0x0010, 0x9085, 0x0001, 0x00ce, 0x0005, 0x7030, 0x908e,
+ 0x0300, 0x0118, 0x908e, 0x5200, 0x1d98, 0x2001, 0x1836, 0x2004,
+ 0x9084, 0x0009, 0x9086, 0x0008, 0x0d68, 0x0c50, 0x00f6, 0x2079,
+ 0x0200, 0x7800, 0xc0e5, 0xc0cc, 0x7802, 0x00fe, 0x0005, 0x00f6,
+ 0x2079, 0x1800, 0x7834, 0xd084, 0x1130, 0x2079, 0x0200, 0x7800,
+ 0x9085, 0x1200, 0x7802, 0x00fe, 0x0005, 0x00e6, 0x2071, 0x1800,
+ 0x7034, 0xc084, 0x7036, 0x00ee, 0x0005, 0x0016, 0x2001, 0x1836,
+ 0x200c, 0x9184, 0x0080, 0x0118, 0xd18c, 0x0118, 0x9006, 0x001e,
+ 0x0005, 0x9085, 0x0001, 0x0cd8, 0x0016, 0x2009, 0x185d, 0x2104,
+ 0x8000, 0x0208, 0x200a, 0x001e, 0x0005, 0x2071, 0x19d7, 0x7003,
+ 0x0003, 0x700f, 0x0361, 0x9006, 0x701a, 0x707a, 0x7012, 0x7017,
+ 0x1cd0, 0x7007, 0x0000, 0x7026, 0x702b, 0x98e7, 0x7032, 0x703a,
+ 0x703f, 0x0064, 0x7037, 0x994f, 0x7047, 0xffff, 0x704a, 0x704f,
+ 0x54f1, 0x7052, 0x7063, 0x85a7, 0x080c, 0x1026, 0x090c, 0x0dc3,
+ 0x2900, 0x7042, 0xa86b, 0x0003, 0xa873, 0x0100, 0xa8af, 0xdcb0,
+ 0x0005, 0x2071, 0x19d7, 0x1d04, 0x84b1, 0x2091, 0x6000, 0x700c,
+ 0x8001, 0x700e, 0x1510, 0x2001, 0x1880, 0x2004, 0xd0c4, 0x0158,
+ 0x3a00, 0xd08c, 0x1140, 0x20d1, 0x0000, 0x20d1, 0x0001, 0x20d1,
+ 0x0000, 0x080c, 0x0dc3, 0x700f, 0x0361, 0x7007, 0x0001, 0x0126,
+ 0x2091, 0x8000, 0x080c, 0x85ec, 0x7048, 0x900d, 0x0148, 0x8109,
+ 0x714a, 0x1130, 0x704c, 0x080f, 0x0018, 0x0126, 0x2091, 0x8000,
+ 0x7024, 0x900d, 0x0188, 0x7020, 0x8001, 0x7022, 0x1168, 0x7023,
+ 0x0009, 0x8109, 0x7126, 0x9186, 0x03e8, 0x1110, 0x7028, 0x080f,
+ 0x81ff, 0x1110, 0x7028, 0x080f, 0x7030, 0x900d, 0x05a8, 0x702c,
+ 0x8001, 0x702e, 0x1588, 0x0016, 0x2009, 0x0306, 0x210c, 0x9184,
+ 0x0030, 0x01e8, 0x9184, 0x0048, 0x9086, 0x0008, 0x11c0, 0x7038,
+ 0x9005, 0x01a8, 0x8001, 0x703a, 0x1190, 0x080c, 0x7351, 0x0178,
+ 0x00e6, 0x2071, 0x19c4, 0x080c, 0x99cb, 0x00ee, 0x1140, 0x2009,
+ 0x1a61, 0x2104, 0x8000, 0x0208, 0x200a, 0x001e, 0x0068, 0x001e,
+ 0x702f, 0x0009, 0x8109, 0x7132, 0x0128, 0x9184, 0x007f, 0x090c,
+ 0x9a9a, 0x0010, 0x7034, 0x080f, 0x7044, 0x9005, 0x0118, 0x0310,
+ 0x8001, 0x7046, 0x7054, 0x900d, 0x0168, 0x7050, 0x8001, 0x7052,
+ 0x1148, 0x7053, 0x0009, 0x8109, 0x7156, 0x1120, 0x7158, 0x7156,
+ 0x7060, 0x080f, 0x7018, 0x900d, 0x01d8, 0x0016, 0x7078, 0x900d,
+ 0x0158, 0x7074, 0x8001, 0x7076, 0x1138, 0x7077, 0x0009, 0x8109,
+ 0x717a, 0x1110, 0x707c, 0x080f, 0x001e, 0x7008, 0x8001, 0x700a,
+ 0x1138, 0x700b, 0x0009, 0x8109, 0x711a, 0x1110, 0x701c, 0x080f,
+ 0x012e, 0x7004, 0x0002, 0x84d9, 0x84da, 0x8540, 0x00e6, 0x2071,
+ 0x19d7, 0x7018, 0x9005, 0x1120, 0x711a, 0x721e, 0x700b, 0x0009,
+ 0x00ee, 0x0005, 0x00e6, 0x0006, 0x2071, 0x19d7, 0x701c, 0x9206,
+ 0x1120, 0x701a, 0x701e, 0x707a, 0x707e, 0x000e, 0x00ee, 0x0005,
+ 0x00e6, 0x2071, 0x19d7, 0xb888, 0x9102, 0x0208, 0xb98a, 0x00ee,
+ 0x0005, 0x0005, 0x00b6, 0x7110, 0x0126, 0x2091, 0x8000, 0x080c,
+ 0x64fc, 0x1904, 0x8535, 0xb888, 0x8001, 0x0230, 0xb88a, 0x1120,
+ 0x0016, 0x080c, 0x8e38, 0x001e, 0x901e, 0xb84c, 0x904d, 0x0904,
+ 0x8535, 0xa864, 0x9005, 0x0118, 0x8001, 0xa866, 0x0128, 0x2918,
+ 0xa800, 0x904d, 0x05d0, 0x0ca8, 0xa888, 0x90a2, 0x199a, 0x0270,
+ 0x9082, 0x1999, 0xa88a, 0x90a2, 0x199a, 0x0210, 0x2001, 0x1999,
+ 0x8003, 0x8023, 0x8423, 0x9420, 0xac66, 0x0c48, 0xac00, 0xa803,
+ 0x0000, 0x83ff, 0x1150, 0xb850, 0x9906, 0x1128, 0xb84f, 0x0000,
+ 0xb853, 0x0000, 0x0050, 0xbc4e, 0x0040, 0x0096, 0x2348, 0xac02,
+ 0x009e, 0xb850, 0x9906, 0x1108, 0xbb52, 0xa86b, 0x0103, 0xa87f,
+ 0x0006, 0xa87b, 0x0000, 0x0016, 0x0036, 0x0046, 0x080c, 0x6c02,
+ 0x004e, 0x003e, 0x001e, 0x2400, 0x0820, 0x012e, 0x8108, 0x9182,
+ 0x0800, 0x0218, 0x900e, 0x7007, 0x0002, 0x7112, 0x00be, 0x0005,
+ 0x7014, 0x2060, 0x0126, 0x2091, 0x8000, 0x6040, 0x9005, 0x0128,
+ 0x8001, 0x6042, 0x1110, 0x080c, 0xc4d1, 0x6018, 0x9005, 0x0528,
+ 0x8001, 0x601a, 0x1510, 0x6120, 0x9186, 0x0003, 0x0118, 0x9186,
+ 0x0006, 0x11c8, 0x080c, 0xc1cd, 0x01b0, 0x6014, 0x2048, 0xa888,
+ 0x908a, 0x199a, 0x0280, 0x9082, 0x1999, 0xa88a, 0x908a, 0x199a,
+ 0x0210, 0x2001, 0x1999, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a,
+ 0xa880, 0xd0e4, 0x0110, 0x080c, 0xbeae, 0x012e, 0x9c88, 0x0018,
+ 0x7116, 0x2001, 0x1819, 0x2004, 0x9102, 0x0220, 0x7017, 0x1cd0,
+ 0x7007, 0x0000, 0x0005, 0x00e6, 0x2071, 0x19d7, 0x7027, 0x07d0,
+ 0x7023, 0x0009, 0x00ee, 0x0005, 0x2001, 0x19e0, 0x2003, 0x0000,
+ 0x0005, 0x00e6, 0x2071, 0x19d7, 0x7132, 0x702f, 0x0009, 0x00ee,
+ 0x0005, 0x2011, 0x19e3, 0x2013, 0x0000, 0x0005, 0x00e6, 0x2071,
+ 0x19d7, 0x711a, 0x721e, 0x700b, 0x0009, 0x00ee, 0x0005, 0x0086,
+ 0x0026, 0x705c, 0x8000, 0x705e, 0x2001, 0x19e7, 0x2044, 0xa070,
+ 0x9086, 0x0000, 0x0150, 0x7070, 0xa09e, 0x706c, 0xa09a, 0x7068,
+ 0xa096, 0x7064, 0xa092, 0x080c, 0x10f7, 0x002e, 0x008e, 0x0005,
+ 0x0006, 0x0016, 0x0096, 0x00a6, 0x00b6, 0x00c6, 0x00d6, 0x00e6,
+ 0x00f6, 0x0156, 0x080c, 0x8401, 0x015e, 0x00fe, 0x00ee, 0x00de,
+ 0x00ce, 0x00be, 0x00ae, 0x009e, 0x001e, 0x000e, 0x0005, 0x00e6,
+ 0x2071, 0x19d7, 0x717a, 0x727e, 0x7077, 0x0009, 0x00ee, 0x0005,
+ 0x00e6, 0x0006, 0x2071, 0x19d7, 0x707c, 0x9206, 0x1110, 0x707a,
+ 0x707e, 0x000e, 0x00ee, 0x0005, 0x2069, 0x1800, 0x69e4, 0xd1e4,
+ 0x1518, 0x0026, 0xd1ec, 0x0140, 0x6a50, 0x6870, 0x9202, 0x0288,
+ 0x8117, 0x9294, 0x00c0, 0x0088, 0x9184, 0x0007, 0x01a0, 0x8109,
+ 0x9184, 0x0007, 0x0110, 0x69e6, 0x0070, 0x8107, 0x9084, 0x0007,
+ 0x910d, 0x8107, 0x9106, 0x9094, 0x00c0, 0x9184, 0xff3f, 0x9205,
+ 0x68e6, 0x080c, 0x0eed, 0x002e, 0x0005, 0x00c6, 0x2061, 0x1a4f,
+ 0x00ce, 0x0005, 0x9184, 0x000f, 0x8003, 0x8003, 0x8003, 0x9080,
+ 0x1a4f, 0x2060, 0x0005, 0xa888, 0x908a, 0x199a, 0x1638, 0x9005,
+ 0x1150, 0x00c6, 0x2061, 0x1a4f, 0x6014, 0x00ce, 0x9005, 0x1130,
+ 0x2001, 0x001e, 0x0018, 0x908e, 0xffff, 0x01b0, 0x8003, 0x800b,
+ 0x810b, 0x9108, 0x611a, 0xa880, 0x908c, 0x00c0, 0x918e, 0x00c0,
+ 0x0904, 0x86ad, 0xd0b4, 0x1168, 0xd0bc, 0x1904, 0x8686, 0x2009,
+ 0x0006, 0x080c, 0x86da, 0x0005, 0x900e, 0x0c60, 0x2001, 0x1999,
+ 0x08b0, 0xd0fc, 0x0160, 0x908c, 0x0003, 0x0120, 0x918e, 0x0003,
+ 0x1904, 0x86d4, 0x908c, 0x2020, 0x918e, 0x2020, 0x01a8, 0x6024,
+ 0xd0d4, 0x11e8, 0x2009, 0x1880, 0x2104, 0xd084, 0x1138, 0x87ff,
+ 0x1120, 0x2009, 0x0043, 0x0804, 0xa419, 0x0005, 0x87ff, 0x1de8,
+ 0x2009, 0x0042, 0x0804, 0xa419, 0x6110, 0x00b6, 0x2158, 0xb900,
+ 0x00be, 0xd1ac, 0x0d20, 0x6024, 0xc0cd, 0x6026, 0x0c00, 0xc0d4,
+ 0x6026, 0xa894, 0x602e, 0xa890, 0x6032, 0x08e0, 0xd0fc, 0x0160,
+ 0x908c, 0x0003, 0x0120, 0x918e, 0x0003, 0x1904, 0x86d4, 0x908c,
+ 0x2020, 0x918e, 0x2020, 0x0170, 0x0076, 0x00f6, 0x2c78, 0x080c,
+ 0x16c1, 0x00fe, 0x007e, 0x87ff, 0x1120, 0x2009, 0x0042, 0x080c,
+ 0xa419, 0x0005, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1ac,
+ 0x0d58, 0x6124, 0xc1cd, 0x6126, 0x0c38, 0xd0fc, 0x0188, 0x908c,
+ 0x2020, 0x918e, 0x2020, 0x01a8, 0x9084, 0x0003, 0x908e, 0x0002,
+ 0x0148, 0x87ff, 0x1120, 0x2009, 0x0041, 0x080c, 0xa419, 0x0005,
+ 0x00b9, 0x0ce8, 0x87ff, 0x1dd8, 0x2009, 0x0043, 0x080c, 0xa419,
+ 0x0cb0, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1ac, 0x0d20,
+ 0x6124, 0xc1cd, 0x6126, 0x0c00, 0x2009, 0x0004, 0x0019, 0x0005,
+ 0x2009, 0x0001, 0x0096, 0x080c, 0xc1cd, 0x0518, 0x6014, 0x2048,
+ 0xa986, 0xa800, 0x6016, 0x9186, 0x0001, 0x1188, 0xa980, 0x918c,
+ 0x8100, 0x918e, 0x8100, 0x1158, 0x00c6, 0x2061, 0x1a4f, 0x6200,
+ 0xd28c, 0x1120, 0x6204, 0x8210, 0x0208, 0x6206, 0x00ce, 0x080c,
+ 0x6a41, 0x6014, 0x904d, 0x0076, 0x2039, 0x0000, 0x190c, 0x8623,
+ 0x007e, 0x009e, 0x0005, 0x0156, 0x00c6, 0x2061, 0x1a4f, 0x6000,
+ 0x81ff, 0x0110, 0x9205, 0x0008, 0x9204, 0x6002, 0x00ce, 0x015e,
+ 0x0005, 0x6800, 0xd08c, 0x1138, 0x6808, 0x9005, 0x0120, 0x8001,
+ 0x680a, 0x9085, 0x0001, 0x0005, 0x0126, 0x2091, 0x8000, 0x0076,
+ 0x0156, 0x20a9, 0x0010, 0x9005, 0x0510, 0x911a, 0x1600, 0x8213,
+ 0x2039, 0x0100, 0x273c, 0x97be, 0x0008, 0x1110, 0x818d, 0x0010,
+ 0x81f5, 0x3e08, 0x0228, 0x911a, 0x1220, 0x1f04, 0x8727, 0x0028,
+ 0x911a, 0x2308, 0x8210, 0x1f04, 0x8727, 0x0006, 0x3200, 0x9084,
+ 0xefff, 0x2080, 0x000e, 0x015e, 0x007e, 0x012e, 0x0005, 0x0006,
+ 0x3200, 0x9085, 0x1000, 0x0ca8, 0x0126, 0x2091, 0x2800, 0x2079,
+ 0x19c4, 0x012e, 0x00d6, 0x2069, 0x19c4, 0x6803, 0x0005, 0x0156,
+ 0x0146, 0x01d6, 0x20e9, 0x0000, 0x2069, 0x0200, 0x080c, 0xa190,
+ 0x0401, 0x080c, 0xa17b, 0x00e9, 0x080c, 0xa17e, 0x00d1, 0x080c,
+ 0xa181, 0x00b9, 0x080c, 0xa184, 0x00a1, 0x080c, 0xa187, 0x0089,
+ 0x080c, 0xa18a, 0x0071, 0x080c, 0xa18d, 0x0059, 0x01de, 0x014e,
+ 0x015e, 0x2069, 0x0004, 0x2d04, 0x9085, 0x8001, 0x206a, 0x00de,
+ 0x0005, 0x20a9, 0x0020, 0x20a1, 0x0240, 0x2001, 0x0000, 0x4004,
+ 0x0005, 0x00c6, 0x6027, 0x0001, 0x7804, 0x9084, 0x0007, 0x0002,
+ 0x879c, 0x87c0, 0x8801, 0x87a2, 0x87c0, 0x879c, 0x879a, 0x8798,
+ 0x080c, 0x0dc3, 0x00ce, 0x0005, 0x080c, 0x858c, 0x080c, 0x8e38,
+ 0x00ce, 0x0005, 0x62c0, 0x82ff, 0x1110, 0x00ce, 0x0005, 0x2011,
+ 0x5e1c, 0x080c, 0x84c2, 0x7828, 0x9092, 0x00c8, 0x1228, 0x8000,
+ 0x782a, 0x080c, 0x5e5c, 0x0c88, 0x62c0, 0x080c, 0xa194, 0x080c,
+ 0x5e1c, 0x7807, 0x0003, 0x7827, 0x0000, 0x782b, 0x0000, 0x0c28,
+ 0x080c, 0x858c, 0x6220, 0xd2a4, 0x0170, 0xd2cc, 0x0160, 0x782b,
+ 0x0000, 0x7824, 0x9065, 0x090c, 0x0dc3, 0x2009, 0x0013, 0x080c,
+ 0xa419, 0x00ce, 0x0005, 0x00c6, 0x7824, 0x9065, 0x090c, 0x0dc3,
+ 0x7828, 0x9092, 0xc350, 0x12c0, 0x8000, 0x782a, 0x00ce, 0x080c,
+ 0x2a63, 0x0278, 0x00c6, 0x7924, 0x2160, 0x6010, 0x906d, 0x090c,
+ 0x0dc3, 0x7807, 0x0000, 0x7827, 0x0000, 0x00ce, 0x080c, 0x8e38,
+ 0x0c00, 0x080c, 0x98ad, 0x08e8, 0x2011, 0x0130, 0x2214, 0x080c,
+ 0xa194, 0x080c, 0xe0fa, 0x2009, 0x0014, 0x080c, 0xa419, 0x00ce,
+ 0x0880, 0x2001, 0x19e0, 0x2003, 0x0000, 0x62c0, 0x82ff, 0x1160,
+ 0x782b, 0x0000, 0x7824, 0x9065, 0x090c, 0x0dc3, 0x2009, 0x0013,
+ 0x080c, 0xa46b, 0x00ce, 0x0005, 0x00b6, 0x00c6, 0x00d6, 0x7824,
+ 0x9005, 0x090c, 0x0dc3, 0x7828, 0x9092, 0xc350, 0x1648, 0x8000,
+ 0x782a, 0x00de, 0x00ce, 0x00be, 0x080c, 0x2a63, 0x02f0, 0x00b6,
+ 0x00c6, 0x00d6, 0x781c, 0x905d, 0x090c, 0x0dc3, 0xb800, 0xc0dc,
+ 0xb802, 0x7924, 0x2160, 0x080c, 0xa39d, 0xb93c, 0x81ff, 0x090c,
+ 0x0dc3, 0x8109, 0xb93e, 0x7807, 0x0000, 0x7827, 0x0000, 0x00de,
+ 0x00ce, 0x00be, 0x080c, 0x8e38, 0x0868, 0x080c, 0x98ad, 0x0850,
+ 0x2011, 0x0130, 0x2214, 0x080c, 0xa194, 0x080c, 0xe0fa, 0x7824,
+ 0x9065, 0x2009, 0x0014, 0x080c, 0xa419, 0x00de, 0x00ce, 0x00be,
+ 0x0804, 0x8812, 0x00c6, 0x2001, 0x009b, 0x2004, 0xd0fc, 0x190c,
+ 0x1ddc, 0x6024, 0x6027, 0x0002, 0xd0f4, 0x1580, 0x62c8, 0x60c4,
+ 0x9205, 0x1170, 0x783c, 0x9065, 0x0130, 0x2009, 0x0049, 0x080c,
+ 0xa419, 0x00ce, 0x0005, 0x2011, 0x19e3, 0x2013, 0x0000, 0x0cc8,
+ 0x793c, 0x81ff, 0x0dc0, 0x7944, 0x9192, 0x7530, 0x12f0, 0x8108,
+ 0x7946, 0x793c, 0x9188, 0x0008, 0x210c, 0x918e, 0x0006, 0x1138,
+ 0x6014, 0x9084, 0x1984, 0x9085, 0x0012, 0x6016, 0x0c10, 0x6014,
+ 0x9084, 0x1984, 0x9085, 0x0016, 0x6016, 0x08d8, 0x793c, 0x2160,
+ 0x2009, 0x004a, 0x080c, 0xa419, 0x08a0, 0x7848, 0xc085, 0x784a,
+ 0x0880, 0x0006, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f,
+ 0x0000, 0x2c08, 0x2061, 0x19c4, 0x6020, 0x8000, 0x6022, 0x6010,
+ 0x9005, 0x0148, 0x9080, 0x0003, 0x2102, 0x6112, 0x012e, 0x00ce,
+ 0x001e, 0x000e, 0x0005, 0x6116, 0x6112, 0x0cc0, 0x00d6, 0x2069,
+ 0x19c4, 0xb800, 0xd0d4, 0x0168, 0x6820, 0x8000, 0x6822, 0x9086,
+ 0x0001, 0x1110, 0x2b00, 0x681e, 0x00de, 0x0804, 0x8e38, 0x00de,
+ 0x0005, 0xc0d5, 0xb802, 0x6818, 0x9005, 0x0168, 0xb856, 0xb85b,
+ 0x0000, 0x0086, 0x0006, 0x2b00, 0x681a, 0x008e, 0xa05a, 0x008e,
+ 0x2069, 0x19c4, 0x0c08, 0xb856, 0xb85a, 0x2b00, 0x681a, 0x681e,
+ 0x08d8, 0x0006, 0x0016, 0x00c6, 0x0126, 0x2091, 0x8000, 0x600f,
+ 0x0000, 0x2c08, 0x2061, 0x19c4, 0x6020, 0x8000, 0x6022, 0x6008,
+ 0x9005, 0x0148, 0x9080, 0x0003, 0x2102, 0x610a, 0x012e, 0x00ce,
+ 0x001e, 0x000e, 0x0005, 0x610e, 0x610a, 0x0cc0, 0x00c6, 0x600f,
+ 0x0000, 0x2c08, 0x2061, 0x19c4, 0x6034, 0x9005, 0x0130, 0x9080,
+ 0x0003, 0x2102, 0x6136, 0x00ce, 0x0005, 0x613a, 0x6136, 0x00ce,
+ 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x00b6, 0x0096, 0x0076,
+ 0x0066, 0x0056, 0x0036, 0x0026, 0x0016, 0x0006, 0x0126, 0x902e,
+ 0x2071, 0x19c4, 0x7638, 0x2660, 0x2678, 0x2091, 0x8000, 0x8cff,
+ 0x0904, 0x8995, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1904, 0x8990,
+ 0x87ff, 0x0120, 0x6054, 0x9106, 0x1904, 0x8990, 0x703c, 0x9c06,
+ 0x1178, 0x0036, 0x2019, 0x0001, 0x080c, 0x9c35, 0x7033, 0x0000,
+ 0x9006, 0x703e, 0x7042, 0x7046, 0x704a, 0x003e, 0x2029, 0x0001,
+ 0x7038, 0x9c36, 0x1110, 0x660c, 0x763a, 0x7034, 0x9c36, 0x1140,
+ 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000,
+ 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678,
+ 0x600f, 0x0000, 0x080c, 0xc1cd, 0x01f0, 0x6014, 0x2048, 0x6020,
+ 0x9086, 0x0003, 0x15b8, 0x6004, 0x9086, 0x0040, 0x090c, 0x9e03,
+ 0xa86b, 0x0103, 0xab7e, 0xa87b, 0x0000, 0x0016, 0x0036, 0x0076,
+ 0x080c, 0xc4ba, 0x080c, 0xdfcf, 0x080c, 0x6c02, 0x007e, 0x003e,
+ 0x001e, 0x080c, 0xc3b4, 0x080c, 0xa3cf, 0x00ce, 0x0804, 0x892f,
+ 0x2c78, 0x600c, 0x2060, 0x0804, 0x892f, 0x85ff, 0x0120, 0x0036,
+ 0x080c, 0x8f0e, 0x003e, 0x012e, 0x000e, 0x001e, 0x002e, 0x003e,
+ 0x005e, 0x006e, 0x007e, 0x009e, 0x00be, 0x00ce, 0x00de, 0x00ee,
+ 0x00fe, 0x0005, 0x6020, 0x9086, 0x0006, 0x1158, 0x0016, 0x0036,
+ 0x0076, 0x080c, 0xdfcf, 0x080c, 0xdcc3, 0x007e, 0x003e, 0x001e,
+ 0x0890, 0x6020, 0x9086, 0x000a, 0x0904, 0x897a, 0x0804, 0x8973,
+ 0x0006, 0x0066, 0x0096, 0x00c6, 0x00d6, 0x00f6, 0x9036, 0x0126,
+ 0x2091, 0x8000, 0x2079, 0x19c4, 0x7838, 0x9065, 0x0904, 0x8a15,
+ 0x600c, 0x0006, 0x600f, 0x0000, 0x783c, 0x9c06, 0x1168, 0x0036,
+ 0x2019, 0x0001, 0x080c, 0x9c35, 0x7833, 0x0000, 0x901e, 0x7b3e,
+ 0x7b42, 0x7b46, 0x7b4a, 0x003e, 0x080c, 0xc1cd, 0x0548, 0x6014,
+ 0x2048, 0x6020, 0x9086, 0x0003, 0x1590, 0x3e08, 0x918e, 0x0002,
+ 0x1188, 0x6010, 0x9005, 0x0170, 0x00b6, 0x2058, 0xb800, 0x00be,
+ 0xd0bc, 0x0140, 0x6040, 0x9005, 0x11a8, 0x2001, 0x1964, 0x2004,
+ 0x6042, 0x0080, 0x6004, 0x9086, 0x0040, 0x090c, 0x9e03, 0xa86b,
+ 0x0103, 0xab7e, 0xa87b, 0x0000, 0x080c, 0x6bf5, 0x080c, 0xc3b4,
+ 0x080c, 0xa3cf, 0x000e, 0x0804, 0x89cd, 0x7e3a, 0x7e36, 0x012e,
0x00fe, 0x00de, 0x00ce, 0x009e, 0x006e, 0x000e, 0x0005, 0x6020,
- 0x9086, 0x0006, 0x1118, 0x080c, 0xd101, 0x0c58, 0x6020, 0x9086,
- 0x000a, 0x0d00, 0x08c0, 0x0016, 0x0026, 0x0086, 0x9046, 0x0099,
- 0x080c, 0x892e, 0x008e, 0x002e, 0x001e, 0x0005, 0x00f6, 0x0126,
- 0x2079, 0x19c4, 0x2091, 0x8000, 0x080c, 0x89c5, 0x080c, 0x8a4f,
+ 0x9086, 0x0006, 0x1118, 0x080c, 0xdcc3, 0x0c50, 0x6020, 0x9086,
+ 0x000a, 0x09f8, 0x08b8, 0x0016, 0x0026, 0x0086, 0x9046, 0x0099,
+ 0x080c, 0x8b16, 0x008e, 0x002e, 0x001e, 0x0005, 0x00f6, 0x0126,
+ 0x2079, 0x19c4, 0x2091, 0x8000, 0x080c, 0x8bad, 0x080c, 0x8c3d,
0x012e, 0x00fe, 0x0005, 0x00b6, 0x0096, 0x00f6, 0x00e6, 0x00d6,
0x00c6, 0x0066, 0x0016, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071,
- 0x19c4, 0x7614, 0x2660, 0x2678, 0x8cff, 0x0904, 0x88f3, 0x6010,
- 0x2058, 0xb8a0, 0x9206, 0x1904, 0x88ee, 0x88ff, 0x0120, 0x6024,
- 0x9106, 0x1904, 0x88ee, 0x7024, 0x9c06, 0x1568, 0x2069, 0x0100,
- 0x6820, 0xd0a4, 0x0110, 0xd0cc, 0x1508, 0x080c, 0x8420, 0x080c,
- 0x9623, 0x68c3, 0x0000, 0x080c, 0x9b30, 0x7027, 0x0000, 0x0036,
+ 0x19c4, 0x7614, 0x2660, 0x2678, 0x8cff, 0x0904, 0x8adb, 0x6010,
+ 0x2058, 0xb8a0, 0x9206, 0x1904, 0x8ad6, 0x88ff, 0x0120, 0x6054,
+ 0x9106, 0x1904, 0x8ad6, 0x7024, 0x9c06, 0x1568, 0x2069, 0x0100,
+ 0x6820, 0xd0a4, 0x0110, 0xd0cc, 0x1508, 0x080c, 0x858c, 0x080c,
+ 0x98d1, 0x68c3, 0x0000, 0x080c, 0x9e03, 0x7027, 0x0000, 0x0036,
0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100,
- 0x080c, 0x2b65, 0x9006, 0x080c, 0x2b65, 0x2069, 0x0100, 0x6824,
+ 0x080c, 0x2bce, 0x9006, 0x080c, 0x2bce, 0x2069, 0x0100, 0x6824,
0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0028, 0x6003, 0x0009,
- 0x630a, 0x0804, 0x88ee, 0x7014, 0x9c36, 0x1110, 0x660c, 0x7616,
+ 0x630a, 0x0804, 0x8ad6, 0x7014, 0x9c36, 0x1110, 0x660c, 0x7616,
0x7010, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7012,
0x0010, 0x7013, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110,
0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x6014, 0x2048, 0x080c,
- 0xb955, 0x01e8, 0x6020, 0x9086, 0x0003, 0x1580, 0x080c, 0xbb56,
- 0x1118, 0x080c, 0xa717, 0x0098, 0xa86b, 0x0103, 0xab7e, 0xa87b,
- 0x0000, 0x0016, 0x0036, 0x0086, 0x080c, 0xbc3f, 0x080c, 0xd242,
- 0x080c, 0x6b1d, 0x008e, 0x003e, 0x001e, 0x080c, 0xbb39, 0x080c,
- 0x9f42, 0x080c, 0x9a08, 0x00ce, 0x0804, 0x886c, 0x2c78, 0x600c,
- 0x2060, 0x0804, 0x886c, 0x012e, 0x000e, 0x001e, 0x006e, 0x00ce,
+ 0xc1cd, 0x01e8, 0x6020, 0x9086, 0x0003, 0x1580, 0x080c, 0xc3d1,
+ 0x1118, 0x080c, 0xadb3, 0x0098, 0xa86b, 0x0103, 0xab7e, 0xa87b,
+ 0x0000, 0x0016, 0x0036, 0x0086, 0x080c, 0xc4ba, 0x080c, 0xdfcf,
+ 0x080c, 0x6c02, 0x008e, 0x003e, 0x001e, 0x080c, 0xc3b4, 0x080c,
+ 0xa3cf, 0x080c, 0x9cd9, 0x00ce, 0x0804, 0x8a54, 0x2c78, 0x600c,
+ 0x2060, 0x0804, 0x8a54, 0x012e, 0x000e, 0x001e, 0x006e, 0x00ce,
0x00de, 0x00ee, 0x00fe, 0x009e, 0x00be, 0x0005, 0x6020, 0x9086,
- 0x0006, 0x1158, 0x0016, 0x0036, 0x0086, 0x080c, 0xd242, 0x080c,
- 0xd101, 0x008e, 0x003e, 0x001e, 0x08d0, 0x080c, 0xa717, 0x6020,
+ 0x0006, 0x1158, 0x0016, 0x0036, 0x0086, 0x080c, 0xdfcf, 0x080c,
+ 0xdcc3, 0x008e, 0x003e, 0x001e, 0x08d0, 0x080c, 0xadb3, 0x6020,
0x9086, 0x0002, 0x1160, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e,
- 0x0904, 0x88d4, 0x9086, 0x008b, 0x0904, 0x88d4, 0x0840, 0x6020,
+ 0x0904, 0x8abc, 0x9086, 0x008b, 0x0904, 0x8abc, 0x0840, 0x6020,
0x9086, 0x0005, 0x1920, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e,
- 0x09c8, 0x9086, 0x008b, 0x09b0, 0x0804, 0x88e7, 0x00b6, 0x00a6,
+ 0x09c8, 0x9086, 0x008b, 0x09b0, 0x0804, 0x8acf, 0x00b6, 0x00a6,
0x0096, 0x00c6, 0x0006, 0x0126, 0x2091, 0x8000, 0x9280, 0x1000,
- 0x2004, 0x905d, 0x0904, 0x89be, 0x00f6, 0x00e6, 0x00d6, 0x0066,
+ 0x2004, 0x905d, 0x0904, 0x8ba6, 0x00f6, 0x00e6, 0x00d6, 0x0066,
0x2071, 0x19c4, 0xbe54, 0x7018, 0x9b06, 0x1108, 0x761a, 0x701c,
0x9b06, 0x1130, 0x86ff, 0x1118, 0x7018, 0x701e, 0x0008, 0x761e,
0xb858, 0x904d, 0x0108, 0xae56, 0x96d5, 0x0000, 0x0110, 0x2900,
0xb05a, 0xb857, 0x0000, 0xb85b, 0x0000, 0xb800, 0xc0d4, 0xc0dc,
- 0xb802, 0x080c, 0x6354, 0x0904, 0x89ba, 0x7624, 0x86ff, 0x0904,
- 0x89a9, 0x9680, 0x0005, 0x2004, 0x9906, 0x15d8, 0x00d6, 0x2069,
- 0x0100, 0x68c0, 0x9005, 0x0560, 0x080c, 0x8420, 0x080c, 0x9623,
- 0x68c3, 0x0000, 0x080c, 0x9b30, 0x7027, 0x0000, 0x0036, 0x2069,
+ 0xb802, 0x080c, 0x642a, 0x0904, 0x8ba2, 0x7624, 0x86ff, 0x0904,
+ 0x8b91, 0x9680, 0x0005, 0x2004, 0x9906, 0x15d8, 0x00d6, 0x2069,
+ 0x0100, 0x68c0, 0x9005, 0x0560, 0x080c, 0x858c, 0x080c, 0x98d1,
+ 0x68c3, 0x0000, 0x080c, 0x9e03, 0x7027, 0x0000, 0x0036, 0x2069,
0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c,
- 0x2b65, 0x9006, 0x080c, 0x2b65, 0x2069, 0x0100, 0x6824, 0xd084,
+ 0x2bce, 0x9006, 0x080c, 0x2bce, 0x2069, 0x0100, 0x6824, 0xd084,
0x0110, 0x6827, 0x0001, 0x003e, 0x00de, 0x00c6, 0xb83c, 0x9005,
- 0x0110, 0x8001, 0xb83e, 0x2660, 0x080c, 0x9f42, 0x00ce, 0x0048,
+ 0x0110, 0x8001, 0xb83e, 0x2660, 0x080c, 0xa3cf, 0x00ce, 0x0048,
0x00de, 0x00c6, 0x2660, 0x6003, 0x0009, 0x630a, 0x00ce, 0x0804,
- 0x8961, 0x89ff, 0x0158, 0xa86b, 0x0103, 0xab7e, 0xa87b, 0x0000,
- 0x080c, 0xbc3f, 0x080c, 0xd242, 0x080c, 0x6b1d, 0x080c, 0x9a08,
- 0x0804, 0x8961, 0x006e, 0x00de, 0x00ee, 0x00fe, 0x012e, 0x000e,
+ 0x8b49, 0x89ff, 0x0158, 0xa86b, 0x0103, 0xab7e, 0xa87b, 0x0000,
+ 0x080c, 0xc4ba, 0x080c, 0xdfcf, 0x080c, 0x6c02, 0x080c, 0x9cd9,
+ 0x0804, 0x8b49, 0x006e, 0x00de, 0x00ee, 0x00fe, 0x012e, 0x000e,
0x00ce, 0x009e, 0x00ae, 0x00be, 0x0005, 0x0096, 0x0006, 0x0066,
- 0x00c6, 0x00d6, 0x9036, 0x7814, 0x9065, 0x0904, 0x8a22, 0x600c,
- 0x0006, 0x600f, 0x0000, 0x7824, 0x9c06, 0x1568, 0x2069, 0x0100,
- 0x6820, 0xd0a4, 0x0110, 0xd0cc, 0x1508, 0x080c, 0x8420, 0x080c,
- 0x9623, 0x68c3, 0x0000, 0x080c, 0x9b30, 0x7827, 0x0000, 0x0036,
+ 0x00c6, 0x00d6, 0x9036, 0x7814, 0x9065, 0x0904, 0x8c10, 0x600c,
+ 0x0006, 0x600f, 0x0000, 0x7824, 0x9c06, 0x1580, 0x2069, 0x0100,
+ 0x6820, 0xd0a4, 0x0110, 0xd0cc, 0x1508, 0x080c, 0x858c, 0x080c,
+ 0x98d1, 0x68c3, 0x0000, 0x080c, 0x9e03, 0x7827, 0x0000, 0x0036,
0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100,
- 0x080c, 0x2b65, 0x9006, 0x080c, 0x2b65, 0x2069, 0x0100, 0x6824,
- 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0028, 0x6003, 0x0009,
- 0x630a, 0x2c30, 0x00e0, 0x6014, 0x2048, 0x080c, 0xb953, 0x0198,
- 0x6020, 0x9086, 0x0003, 0x11f0, 0x080c, 0xbb56, 0x1118, 0x080c,
- 0xa717, 0x0048, 0xa86b, 0x0103, 0xab7e, 0xa87b, 0x0000, 0x080c,
- 0x6b1d, 0x080c, 0xbb39, 0x080c, 0x9f42, 0x080c, 0x9a08, 0x000e,
- 0x0804, 0x89cc, 0x7e16, 0x7e12, 0x00de, 0x00ce, 0x006e, 0x000e,
- 0x009e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1118, 0x080c, 0xd101,
- 0x0c50, 0x080c, 0xa717, 0x6020, 0x9086, 0x0002, 0x1150, 0x6004,
- 0x0006, 0x9086, 0x0085, 0x000e, 0x09a8, 0x9086, 0x008b, 0x0990,
- 0x08d0, 0x6020, 0x9086, 0x0005, 0x19b0, 0x6004, 0x0006, 0x9086,
- 0x0085, 0x000e, 0x0d18, 0x9086, 0x008b, 0x0d00, 0x0860, 0x0006,
- 0x0066, 0x0096, 0x00b6, 0x00c6, 0x00d6, 0x7818, 0x905d, 0x0904,
- 0x8abc, 0xb854, 0x0006, 0x9006, 0xb856, 0xb85a, 0xb800, 0xc0d4,
- 0xc0dc, 0xb802, 0x080c, 0x6354, 0x0904, 0x8ab9, 0x7e24, 0x86ff,
- 0x0904, 0x8aac, 0x9680, 0x0005, 0x2004, 0x9906, 0x15e8, 0x00d6,
- 0x2069, 0x0100, 0x68c0, 0x9005, 0x0570, 0x080c, 0x8420, 0x080c,
- 0x9623, 0x68c3, 0x0000, 0x080c, 0x9b30, 0x7827, 0x0000, 0x0036,
+ 0x080c, 0x2bce, 0x9006, 0x080c, 0x2bce, 0x2069, 0x0100, 0x6824,
+ 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x0040, 0x080c, 0x6823,
+ 0x1520, 0x6003, 0x0009, 0x630a, 0x2c30, 0x00f8, 0x6014, 0x2048,
+ 0x080c, 0xc1cb, 0x01b0, 0x6020, 0x9086, 0x0003, 0x1508, 0x080c,
+ 0xc3d1, 0x1118, 0x080c, 0xadb3, 0x0060, 0x080c, 0x6823, 0x1168,
+ 0xa86b, 0x0103, 0xab7e, 0xa87b, 0x0000, 0x080c, 0x6c02, 0x080c,
+ 0xc3b4, 0x080c, 0xa3cf, 0x080c, 0x9cd9, 0x000e, 0x0804, 0x8bb4,
+ 0x7e16, 0x7e12, 0x00de, 0x00ce, 0x006e, 0x000e, 0x009e, 0x0005,
+ 0x6020, 0x9086, 0x0006, 0x1118, 0x080c, 0xdcc3, 0x0c50, 0x080c,
+ 0xadb3, 0x6020, 0x9086, 0x0002, 0x1150, 0x6004, 0x0006, 0x9086,
+ 0x0085, 0x000e, 0x0990, 0x9086, 0x008b, 0x0978, 0x08d0, 0x6020,
+ 0x9086, 0x0005, 0x19b0, 0x6004, 0x0006, 0x9086, 0x0085, 0x000e,
+ 0x0d18, 0x9086, 0x008b, 0x0d00, 0x0860, 0x0006, 0x0066, 0x0096,
+ 0x00b6, 0x00c6, 0x00d6, 0x7818, 0x905d, 0x0904, 0x8cbd, 0xb854,
+ 0x0006, 0x9006, 0xb856, 0xb85a, 0xb800, 0xc0d4, 0xc0dc, 0xb802,
+ 0x080c, 0x642a, 0x0904, 0x8cba, 0x7e24, 0x86ff, 0x0904, 0x8cad,
+ 0x9680, 0x0005, 0x2004, 0x9906, 0x1904, 0x8cad, 0x00d6, 0x2069,
+ 0x0100, 0x68c0, 0x9005, 0x0904, 0x8ca4, 0x080c, 0x858c, 0x080c,
+ 0x98d1, 0x68c3, 0x0000, 0x080c, 0x9e03, 0x7827, 0x0000, 0x0036,
0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100,
- 0x080c, 0x2b65, 0x9006, 0x080c, 0x2b65, 0x2069, 0x0100, 0x6824,
- 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x00de, 0x00c6, 0xb83c,
- 0x9005, 0x0110, 0x8001, 0xb83e, 0x2660, 0x600f, 0x0000, 0x080c,
- 0x9f42, 0x00ce, 0x0048, 0x00de, 0x00c6, 0x2660, 0x6003, 0x0009,
- 0x630a, 0x00ce, 0x0804, 0x8a62, 0x89ff, 0x0138, 0xa86b, 0x0103,
- 0xab7e, 0xa87b, 0x0000, 0x080c, 0x6b1d, 0x080c, 0x9a08, 0x0804,
- 0x8a62, 0x000e, 0x0804, 0x8a56, 0x781e, 0x781a, 0x00de, 0x00ce,
- 0x00be, 0x009e, 0x006e, 0x000e, 0x0005, 0x00e6, 0x00d6, 0x0096,
- 0x0066, 0xb800, 0xd0dc, 0x01a0, 0xb84c, 0x904d, 0x0188, 0xa87c,
- 0x9606, 0x1170, 0x2071, 0x19c4, 0x7024, 0x9035, 0x0148, 0x9080,
- 0x0005, 0x2004, 0x9906, 0x1120, 0xb800, 0xc0dc, 0xb802, 0x0029,
- 0x006e, 0x009e, 0x00de, 0x00ee, 0x0005, 0x00f6, 0x2079, 0x0100,
- 0x78c0, 0x9005, 0x1138, 0x00c6, 0x2660, 0x6003, 0x0009, 0x630a,
- 0x00ce, 0x04b8, 0x080c, 0x9623, 0x78c3, 0x0000, 0x080c, 0x9b30,
- 0x7027, 0x0000, 0x0036, 0x2079, 0x0140, 0x7b04, 0x9384, 0x1000,
- 0x0138, 0x2001, 0x0100, 0x080c, 0x2b65, 0x9006, 0x080c, 0x2b65,
- 0x2079, 0x0100, 0x7824, 0xd084, 0x0110, 0x7827, 0x0001, 0x080c,
- 0x9b30, 0x003e, 0x080c, 0x6354, 0x00c6, 0xb83c, 0x9005, 0x0110,
- 0x8001, 0xb83e, 0x2660, 0x080c, 0x9f18, 0x00ce, 0xa86b, 0x0103,
- 0xab7e, 0xa87b, 0x0000, 0x080c, 0xbc3f, 0x080c, 0x6b1d, 0x080c,
- 0x9a08, 0x00fe, 0x0005, 0x00b6, 0x00e6, 0x00c6, 0x2011, 0x0101,
- 0x2204, 0xc0c4, 0x2012, 0x2001, 0x180c, 0x2014, 0xc2e4, 0x2202,
- 0x2071, 0x19c4, 0x7004, 0x9084, 0x0007, 0x0002, 0x8b48, 0x8b4c,
- 0x8b6a, 0x8b93, 0x8bd1, 0x8b48, 0x8b63, 0x8b46, 0x080c, 0x0dc4,
- 0x00ce, 0x00ee, 0x00be, 0x0005, 0x7024, 0x9065, 0x0148, 0x7020,
- 0x8001, 0x7022, 0x600c, 0x9015, 0x0158, 0x7216, 0x600f, 0x0000,
- 0x7007, 0x0000, 0x7027, 0x0000, 0x00ce, 0x00ee, 0x00be, 0x0005,
- 0x7216, 0x7212, 0x0ca8, 0x7007, 0x0000, 0x7027, 0x0000, 0x7020,
- 0x9005, 0x0070, 0x6010, 0x2058, 0x080c, 0x6354, 0xb800, 0xc0dc,
- 0xb802, 0x7007, 0x0000, 0x7027, 0x0000, 0x7020, 0x8001, 0x7022,
- 0x1148, 0x2001, 0x180c, 0x2014, 0xd2ec, 0x1180, 0x00ce, 0x00ee,
- 0x00be, 0x0005, 0xb854, 0x9015, 0x0120, 0x721e, 0x080c, 0x8c37,
- 0x0ca8, 0x7218, 0x721e, 0x080c, 0x8c37, 0x0c80, 0xc2ec, 0x2202,
- 0x080c, 0x8d06, 0x0c58, 0x7024, 0x9065, 0x05b8, 0x700c, 0x9c06,
- 0x1160, 0x080c, 0x9a08, 0x600c, 0x9015, 0x0120, 0x720e, 0x600f,
- 0x0000, 0x0448, 0x720e, 0x720a, 0x0430, 0x7014, 0x9c06, 0x1160,
- 0x080c, 0x9a08, 0x600c, 0x9015, 0x0120, 0x7216, 0x600f, 0x0000,
- 0x00d0, 0x7216, 0x7212, 0x00b8, 0x6020, 0x9086, 0x0003, 0x1198,
- 0x6010, 0x2058, 0x080c, 0x6354, 0xb800, 0xc0dc, 0xb802, 0x080c,
- 0x9a08, 0x701c, 0x9065, 0x0138, 0xb854, 0x9015, 0x0110, 0x721e,
- 0x0010, 0x7218, 0x721e, 0x7027, 0x0000, 0x00ce, 0x00ee, 0x00be,
- 0x0005, 0x7024, 0x9065, 0x0140, 0x080c, 0x9a08, 0x600c, 0x9015,
- 0x0158, 0x720e, 0x600f, 0x0000, 0x080c, 0x9b30, 0x7027, 0x0000,
- 0x00ce, 0x00ee, 0x00be, 0x0005, 0x720e, 0x720a, 0x0ca8, 0x00d6,
- 0x2069, 0x19c4, 0x6830, 0x9084, 0x0003, 0x0002, 0x8bf4, 0x8bf6,
- 0x8c1a, 0x8bf2, 0x080c, 0x0dc4, 0x00de, 0x0005, 0x00c6, 0x6840,
- 0x9086, 0x0001, 0x01b8, 0x683c, 0x9065, 0x0130, 0x600c, 0x9015,
- 0x0170, 0x6a3a, 0x600f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000,
- 0x2011, 0x19e3, 0x2013, 0x0000, 0x00ce, 0x00de, 0x0005, 0x683a,
- 0x6836, 0x0c90, 0x6843, 0x0000, 0x6838, 0x9065, 0x0d68, 0x6003,
- 0x0003, 0x0c50, 0x00c6, 0x9006, 0x6842, 0x6846, 0x684a, 0x683c,
- 0x9065, 0x0160, 0x600c, 0x9015, 0x0130, 0x6a3a, 0x600f, 0x0000,
- 0x683f, 0x0000, 0x0018, 0x683e, 0x683a, 0x6836, 0x00ce, 0x00de,
- 0x0005, 0x2001, 0x180c, 0x200c, 0xc1e5, 0x2102, 0x0005, 0x2001,
- 0x180c, 0x200c, 0xd1ec, 0x0120, 0xc1ec, 0x2102, 0x080c, 0x8d06,
- 0x2001, 0x19d0, 0x2004, 0x9086, 0x0001, 0x0d58, 0x00d6, 0x2069,
- 0x19c4, 0x6804, 0x9084, 0x0007, 0x0002, 0x8c57, 0x8cee, 0x8cee,
- 0x8cee, 0x8cee, 0x8cf0, 0x8cee, 0x8c55, 0x080c, 0x0dc4, 0x6820,
- 0x9005, 0x1110, 0x00de, 0x0005, 0x00c6, 0x680c, 0x9065, 0x0150,
- 0x6807, 0x0004, 0x6826, 0x682b, 0x0000, 0x080c, 0x8d5d, 0x00ce,
- 0x00de, 0x0005, 0x6814, 0x9065, 0x0150, 0x6807, 0x0001, 0x6826,
- 0x682b, 0x0000, 0x080c, 0x8d5d, 0x00ce, 0x00de, 0x0005, 0x00b6,
- 0x00e6, 0x6a1c, 0x92dd, 0x0000, 0x0904, 0x8cd8, 0xb84c, 0x900d,
- 0x0118, 0xb888, 0x9005, 0x01a0, 0xb854, 0x905d, 0x0120, 0x920e,
- 0x0904, 0x8cd8, 0x0028, 0x6818, 0x920e, 0x0904, 0x8cd8, 0x2058,
- 0xb84c, 0x900d, 0x0d88, 0xb888, 0x9005, 0x1d70, 0x2b00, 0x681e,
- 0xbb3c, 0xb838, 0x9302, 0x1e40, 0x080c, 0x9eef, 0x05c8, 0x8318,
- 0xbb3e, 0x6116, 0x2b10, 0x6212, 0x0096, 0x2148, 0xab64, 0xa867,
+ 0x080c, 0x2bce, 0x9006, 0x080c, 0x2bce, 0x2069, 0x0100, 0x6824,
+ 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x00de, 0x00c6, 0x3e08,
+ 0x918e, 0x0002, 0x1168, 0xb800, 0xd0bc, 0x0150, 0x9680, 0x0010,
+ 0x200c, 0x81ff, 0x1518, 0x2009, 0x1964, 0x210c, 0x2102, 0x00f0,
+ 0xb83c, 0x9005, 0x0110, 0x8001, 0xb83e, 0x2660, 0x600f, 0x0000,
+ 0x080c, 0xa3cf, 0x00ce, 0x0048, 0x00de, 0x00c6, 0x2660, 0x6003,
+ 0x0009, 0x630a, 0x00ce, 0x0804, 0x8c50, 0x89ff, 0x0138, 0xa86b,
+ 0x0103, 0xab7e, 0xa87b, 0x0000, 0x080c, 0x6c02, 0x080c, 0x9cd9,
+ 0x0804, 0x8c50, 0x000e, 0x0804, 0x8c44, 0x781e, 0x781a, 0x00de,
+ 0x00ce, 0x00be, 0x009e, 0x006e, 0x000e, 0x0005, 0x00e6, 0x00d6,
+ 0x0096, 0x0066, 0xb800, 0xd0dc, 0x01a0, 0xb84c, 0x904d, 0x0188,
+ 0xa87c, 0x9606, 0x1170, 0x2071, 0x19c4, 0x7024, 0x9035, 0x0148,
+ 0x9080, 0x0005, 0x2004, 0x9906, 0x1120, 0xb800, 0xc0dc, 0xb802,
+ 0x0029, 0x006e, 0x009e, 0x00de, 0x00ee, 0x0005, 0x00f6, 0x2079,
+ 0x0100, 0x78c0, 0x9005, 0x1138, 0x00c6, 0x2660, 0x6003, 0x0009,
+ 0x630a, 0x00ce, 0x04b8, 0x080c, 0x98d1, 0x78c3, 0x0000, 0x080c,
+ 0x9e03, 0x7027, 0x0000, 0x0036, 0x2079, 0x0140, 0x7b04, 0x9384,
+ 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2bce, 0x9006, 0x080c,
+ 0x2bce, 0x2079, 0x0100, 0x7824, 0xd084, 0x0110, 0x7827, 0x0001,
+ 0x080c, 0x9e03, 0x003e, 0x080c, 0x642a, 0x00c6, 0xb83c, 0x9005,
+ 0x0110, 0x8001, 0xb83e, 0x2660, 0x080c, 0xa39d, 0x00ce, 0xa86b,
+ 0x0103, 0xab7e, 0xa87b, 0x0000, 0x080c, 0xc4ba, 0x080c, 0x6c02,
+ 0x080c, 0x9cd9, 0x00fe, 0x0005, 0x00b6, 0x00e6, 0x00c6, 0x2011,
+ 0x0101, 0x2204, 0xc0c4, 0x2012, 0x2001, 0x180c, 0x2014, 0xc2e4,
+ 0x2202, 0x2071, 0x19c4, 0x7004, 0x9084, 0x0007, 0x0002, 0x8d49,
+ 0x8d4d, 0x8d6b, 0x8d94, 0x8dd2, 0x8d49, 0x8d64, 0x8d47, 0x080c,
+ 0x0dc3, 0x00ce, 0x00ee, 0x00be, 0x0005, 0x7024, 0x9065, 0x0148,
+ 0x7020, 0x8001, 0x7022, 0x600c, 0x9015, 0x0158, 0x7216, 0x600f,
+ 0x0000, 0x7007, 0x0000, 0x7027, 0x0000, 0x00ce, 0x00ee, 0x00be,
+ 0x0005, 0x7216, 0x7212, 0x0ca8, 0x7007, 0x0000, 0x7027, 0x0000,
+ 0x7020, 0x9005, 0x0070, 0x6010, 0x2058, 0x080c, 0x642a, 0xb800,
+ 0xc0dc, 0xb802, 0x7007, 0x0000, 0x7027, 0x0000, 0x7020, 0x8001,
+ 0x7022, 0x1148, 0x2001, 0x180c, 0x2014, 0xd2ec, 0x1180, 0x00ce,
+ 0x00ee, 0x00be, 0x0005, 0xb854, 0x9015, 0x0120, 0x721e, 0x080c,
+ 0x8e38, 0x0ca8, 0x7218, 0x721e, 0x080c, 0x8e38, 0x0c80, 0xc2ec,
+ 0x2202, 0x080c, 0x8f0e, 0x0c58, 0x7024, 0x9065, 0x05b8, 0x700c,
+ 0x9c06, 0x1160, 0x080c, 0x9cd9, 0x600c, 0x9015, 0x0120, 0x720e,
+ 0x600f, 0x0000, 0x0448, 0x720e, 0x720a, 0x0430, 0x7014, 0x9c06,
+ 0x1160, 0x080c, 0x9cd9, 0x600c, 0x9015, 0x0120, 0x7216, 0x600f,
+ 0x0000, 0x00d0, 0x7216, 0x7212, 0x00b8, 0x6020, 0x9086, 0x0003,
+ 0x1198, 0x6010, 0x2058, 0x080c, 0x642a, 0xb800, 0xc0dc, 0xb802,
+ 0x080c, 0x9cd9, 0x701c, 0x9065, 0x0138, 0xb854, 0x9015, 0x0110,
+ 0x721e, 0x0010, 0x7218, 0x721e, 0x7027, 0x0000, 0x00ce, 0x00ee,
+ 0x00be, 0x0005, 0x7024, 0x9065, 0x0140, 0x080c, 0x9cd9, 0x600c,
+ 0x9015, 0x0158, 0x720e, 0x600f, 0x0000, 0x080c, 0x9e03, 0x7027,
+ 0x0000, 0x00ce, 0x00ee, 0x00be, 0x0005, 0x720e, 0x720a, 0x0ca8,
+ 0x00d6, 0x2069, 0x19c4, 0x6830, 0x9084, 0x0003, 0x0002, 0x8df5,
+ 0x8df7, 0x8e1b, 0x8df3, 0x080c, 0x0dc3, 0x00de, 0x0005, 0x00c6,
+ 0x6840, 0x9086, 0x0001, 0x01b8, 0x683c, 0x9065, 0x0130, 0x600c,
+ 0x9015, 0x0170, 0x6a3a, 0x600f, 0x0000, 0x6833, 0x0000, 0x683f,
+ 0x0000, 0x2011, 0x19e3, 0x2013, 0x0000, 0x00ce, 0x00de, 0x0005,
+ 0x683a, 0x6836, 0x0c90, 0x6843, 0x0000, 0x6838, 0x9065, 0x0d68,
+ 0x6003, 0x0003, 0x0c50, 0x00c6, 0x9006, 0x6842, 0x6846, 0x684a,
+ 0x683c, 0x9065, 0x0160, 0x600c, 0x9015, 0x0130, 0x6a3a, 0x600f,
+ 0x0000, 0x683f, 0x0000, 0x0018, 0x683e, 0x683a, 0x6836, 0x00ce,
+ 0x00de, 0x0005, 0x2001, 0x180c, 0x200c, 0xc1e5, 0x2102, 0x0005,
+ 0x2001, 0x180c, 0x200c, 0xd1ec, 0x0120, 0xc1ec, 0x2102, 0x080c,
+ 0x8f0e, 0x2001, 0x19d0, 0x2004, 0x9086, 0x0001, 0x0d58, 0x00d6,
+ 0x2069, 0x19c4, 0x6804, 0x9084, 0x0007, 0x0002, 0x8e58, 0x8ef6,
+ 0x8ef6, 0x8ef6, 0x8ef6, 0x8ef8, 0x8ef6, 0x8e56, 0x080c, 0x0dc3,
+ 0x6820, 0x9005, 0x1110, 0x00de, 0x0005, 0x00c6, 0x680c, 0x9065,
+ 0x0150, 0x6807, 0x0004, 0x6826, 0x682b, 0x0000, 0x080c, 0x8f65,
+ 0x00ce, 0x00de, 0x0005, 0x6814, 0x9065, 0x0150, 0x6807, 0x0001,
+ 0x6826, 0x682b, 0x0000, 0x080c, 0x8f65, 0x00ce, 0x00de, 0x0005,
+ 0x00b6, 0x00e6, 0x6a1c, 0x92dd, 0x0000, 0x0904, 0x8ee0, 0xb84c,
+ 0x900d, 0x0118, 0xb888, 0x9005, 0x01a0, 0xb854, 0x905d, 0x0120,
+ 0x920e, 0x0904, 0x8ee0, 0x0028, 0x6818, 0x920e, 0x0904, 0x8ee0,
+ 0x2058, 0xb84c, 0x900d, 0x0d88, 0xb888, 0x9005, 0x1d70, 0x2b00,
+ 0x681e, 0xbb3c, 0xb838, 0x9302, 0x1e40, 0x080c, 0xa374, 0x0904,
+ 0x8ee0, 0x8318, 0xbb3e, 0x6116, 0x2b10, 0x6212, 0x0096, 0x2148,
+ 0xa884, 0x9084, 0x00ff, 0x605e, 0xa887, 0x0000, 0xab64, 0xa867,
0x0000, 0x009e, 0x631a, 0x6114, 0x0096, 0x2148, 0xa968, 0x009e,
0x918c, 0x00ff, 0x918e, 0x0048, 0x0538, 0x00f6, 0x2c78, 0x2061,
- 0x0100, 0xbaac, 0x629a, 0x2069, 0x0200, 0x2071, 0x0240, 0x080c,
- 0x92c9, 0x2069, 0x19c4, 0xbb00, 0xc3dd, 0xbb02, 0x6807, 0x0002,
+ 0x0100, 0xbab0, 0x629a, 0x2069, 0x0200, 0x2071, 0x0240, 0x080c,
+ 0x94f6, 0x2069, 0x19c4, 0xbb00, 0xc3dd, 0xbb02, 0x6807, 0x0002,
0x2f18, 0x6b26, 0x682b, 0x0000, 0x7823, 0x0003, 0x7803, 0x0001,
0x7807, 0x0040, 0x00fe, 0x00ee, 0x00be, 0x00ce, 0x00de, 0x0005,
0x00ee, 0x00be, 0x00ce, 0x0cd0, 0x6807, 0x0006, 0x2c18, 0x6b26,
- 0x6820, 0x8001, 0x6822, 0x682b, 0x0000, 0x080c, 0x6354, 0x080c,
- 0x9d2f, 0x00ee, 0x00be, 0x00ce, 0x00de, 0x0005, 0x00de, 0x0005,
+ 0x6820, 0x8001, 0x6822, 0x682b, 0x0000, 0x080c, 0x642a, 0x080c,
+ 0xa1b4, 0x00ee, 0x00be, 0x00ce, 0x00de, 0x0005, 0x00de, 0x0005,
0x00c6, 0x680c, 0x9065, 0x0138, 0x6807, 0x0004, 0x6826, 0x682b,
- 0x0000, 0x080c, 0x8d5d, 0x00ce, 0x00de, 0x0005, 0x2001, 0x180c,
+ 0x0000, 0x080c, 0x8f65, 0x00ce, 0x00de, 0x0005, 0x2001, 0x180c,
0x2014, 0xc2ed, 0x2202, 0x00de, 0x00fe, 0x0005, 0x00f6, 0x00d6,
0x2069, 0x19c4, 0x6830, 0x9086, 0x0000, 0x1548, 0x2001, 0x180c,
- 0x2014, 0xd2e4, 0x0130, 0xc2e4, 0x2202, 0x080c, 0x8c46, 0x2069,
+ 0x2014, 0xd2e4, 0x0130, 0xc2e4, 0x2202, 0x080c, 0x8e47, 0x2069,
0x19c4, 0x2001, 0x180c, 0x200c, 0xd1c4, 0x11e0, 0x6838, 0x907d,
0x01b0, 0x6a04, 0x9296, 0x0000, 0x1568, 0x6833, 0x0001, 0x683e,
0x6847, 0x0000, 0x684b, 0x0000, 0x0126, 0x00f6, 0x2091, 0x2400,
- 0x002e, 0x080c, 0x1b2e, 0x1158, 0x012e, 0x080c, 0x94a3, 0x00de,
- 0x00fe, 0x0005, 0xc1c4, 0x2102, 0x080c, 0x7393, 0x08f8, 0x012e,
+ 0x002e, 0x080c, 0x1b76, 0x1158, 0x012e, 0x080c, 0x972e, 0x00de,
+ 0x00fe, 0x0005, 0xc1c4, 0x2102, 0x080c, 0x73fe, 0x08f8, 0x012e,
0x6843, 0x0000, 0x7803, 0x0002, 0x780c, 0x9015, 0x0140, 0x6a3a,
0x780f, 0x0000, 0x6833, 0x0000, 0x683f, 0x0000, 0x0c40, 0x683a,
- 0x6836, 0x0cc0, 0x6a04, 0x9296, 0x0006, 0x1904, 0x8cfe, 0x6a30,
- 0x9296, 0x0000, 0x0950, 0x0804, 0x8cfe, 0x6020, 0x9084, 0x000f,
- 0x000b, 0x0005, 0x8d71, 0x8d76, 0x91f9, 0x9292, 0x8d76, 0x91f9,
- 0x9292, 0x8d71, 0x8d76, 0x8d71, 0x8d71, 0x8d71, 0x8d71, 0x8d71,
- 0x8d71, 0x080c, 0x8b2b, 0x080c, 0x8c37, 0x0005, 0x00b6, 0x0156,
+ 0x6836, 0x0cc0, 0x6a04, 0x9296, 0x0006, 0x1904, 0x8f06, 0x6a30,
+ 0x9296, 0x0000, 0x0950, 0x0804, 0x8f06, 0x6020, 0x9084, 0x000f,
+ 0x000b, 0x0005, 0x8f79, 0x8f7e, 0x9426, 0x94bf, 0x8f7e, 0x9426,
+ 0x94bf, 0x8f79, 0x8f7e, 0x8f79, 0x8f79, 0x8f79, 0x8f79, 0x8f79,
+ 0x8f79, 0x080c, 0x8d2c, 0x080c, 0x8e38, 0x0005, 0x00b6, 0x0156,
0x0136, 0x0146, 0x01c6, 0x01d6, 0x00c6, 0x00d6, 0x00e6, 0x00f6,
0x2069, 0x0200, 0x2071, 0x0240, 0x6004, 0x908a, 0x0054, 0x1a0c,
- 0x0dc4, 0x6110, 0x2158, 0xb9ac, 0x2c78, 0x2061, 0x0100, 0x619a,
- 0x908a, 0x0040, 0x1a04, 0x8de2, 0x005b, 0x00fe, 0x00ee, 0x00de,
+ 0x0dc3, 0x6110, 0x2158, 0xb9b0, 0x2c78, 0x2061, 0x0100, 0x619a,
+ 0x908a, 0x0040, 0x1a04, 0x8fea, 0x005b, 0x00fe, 0x00ee, 0x00de,
0x00ce, 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x00be, 0x0005,
- 0x8f7f, 0x8fba, 0x8fe3, 0x90a7, 0x90c6, 0x90cc, 0x90d6, 0x90de,
- 0x90ea, 0x90f0, 0x9101, 0x90f0, 0x9140, 0x90de, 0x914c, 0x9152,
- 0x90ea, 0x9152, 0x915e, 0x8de0, 0x8de0, 0x8de0, 0x8de0, 0x8de0,
- 0x8de0, 0x8de0, 0x8de0, 0x8de0, 0x8de0, 0x8de0, 0x8de0, 0x983e,
- 0x984f, 0x986f, 0x98a1, 0x90d6, 0x8de0, 0x90d6, 0x90f0, 0x8de0,
- 0x8fe3, 0x90a7, 0x8de0, 0x9c27, 0x90f0, 0x8de0, 0x9c43, 0x90f0,
- 0x8de0, 0x90ea, 0x8f79, 0x8e05, 0x8de0, 0x8de0, 0x8de0, 0x8de0,
- 0x8de0, 0x8de0, 0x8de0, 0x8de0, 0x8de0, 0x98ab, 0x9c79, 0x8de0,
- 0x080c, 0x0dc4, 0x2100, 0x005b, 0x00fe, 0x00ee, 0x00de, 0x00ce,
- 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x00be, 0x0005, 0x8e03,
- 0x8e03, 0x8e03, 0x8e3d, 0x8ee9, 0x8ef4, 0x8e03, 0x8e03, 0x8e03,
- 0x8f4e, 0x8f5a, 0x8e58, 0x8e03, 0x8e73, 0x8ea7, 0x9df6, 0x9e3b,
- 0x90f0, 0x8e03, 0x9c5f, 0x080c, 0x0dc4, 0x00d6, 0x0096, 0x080c,
- 0x9171, 0x0026, 0x0036, 0x7814, 0x2048, 0xa958, 0xd1cc, 0x1138,
+ 0x9187, 0x91c2, 0x91eb, 0x92b5, 0x92d7, 0x92dd, 0x92ea, 0x92f2,
+ 0x92fe, 0x9304, 0x9315, 0x9304, 0x936d, 0x92f2, 0x9379, 0x937f,
+ 0x92fe, 0x937f, 0x938b, 0x8fe8, 0x8fe8, 0x8fe8, 0x8fe8, 0x8fe8,
+ 0x8fe8, 0x8fe8, 0x8fe8, 0x8fe8, 0x8fe8, 0x8fe8, 0x9aec, 0x9b0f,
+ 0x9b20, 0x9b40, 0x9b72, 0x92ea, 0x8fe8, 0x92ea, 0x9304, 0x8fe8,
+ 0x91eb, 0x92b5, 0x8fe8, 0x9efa, 0x9304, 0x8fe8, 0x9f16, 0x9304,
+ 0x8fe8, 0x92fe, 0x9181, 0x900d, 0x8fe8, 0x9f32, 0x9f9f, 0xa07a,
+ 0x8fe8, 0xa087, 0x92e7, 0xa0b2, 0x8fe8, 0x9b7c, 0xa0f9, 0x8fe8,
+ 0x080c, 0x0dc3, 0x2100, 0x005b, 0x00fe, 0x00ee, 0x00de, 0x00ce,
+ 0x01de, 0x01ce, 0x014e, 0x013e, 0x015e, 0x00be, 0x0005, 0x900b,
+ 0x900b, 0x900b, 0x9045, 0x90f1, 0x90fc, 0x900b, 0x900b, 0x900b,
+ 0x9156, 0x9162, 0x9060, 0x900b, 0x907b, 0x90af, 0xa27b, 0xa2c0,
+ 0x9304, 0x900b, 0xa0df, 0x080c, 0x0dc3, 0x00d6, 0x0096, 0x080c,
+ 0x939e, 0x0026, 0x0036, 0x7814, 0x2048, 0xa958, 0xd1cc, 0x1138,
0x2009, 0x2414, 0x2011, 0x0018, 0x2019, 0x0018, 0x0030, 0x2009,
0x2410, 0x2011, 0x0014, 0x2019, 0x0014, 0x7102, 0x7206, 0x700b,
0x0800, 0xa83c, 0x700e, 0xa850, 0x7022, 0xa854, 0x7026, 0x63c2,
- 0x080c, 0x95f7, 0x003e, 0x002e, 0x009e, 0x00de, 0x0005, 0x7810,
- 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x080c, 0x9e82, 0x1118, 0x9084,
+ 0x080c, 0x98a5, 0x003e, 0x002e, 0x009e, 0x00de, 0x0005, 0x7810,
+ 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x080c, 0xa307, 0x1118, 0x9084,
0xff80, 0x0110, 0x9085, 0x0001, 0x0005, 0x00d6, 0x0096, 0x080c,
- 0x9171, 0x7003, 0x0500, 0x7814, 0x2048, 0xa878, 0x700a, 0xa87c,
+ 0x939e, 0x7003, 0x0500, 0x7814, 0x2048, 0xa878, 0x700a, 0xa87c,
0x700e, 0xa880, 0x7012, 0xa884, 0x7016, 0xa888, 0x701a, 0xa88c,
- 0x701e, 0x60c3, 0x0010, 0x080c, 0x95f7, 0x009e, 0x00de, 0x0005,
- 0x00d6, 0x0096, 0x080c, 0x9171, 0x7003, 0x0500, 0x7814, 0x2048,
+ 0x701e, 0x60c3, 0x0010, 0x080c, 0x98a5, 0x009e, 0x00de, 0x0005,
+ 0x00d6, 0x0096, 0x080c, 0x939e, 0x7003, 0x0500, 0x7814, 0x2048,
0xa8d0, 0x700a, 0xa8d4, 0x700e, 0xa8d8, 0x7012, 0xa8dc, 0x7016,
- 0xa8e0, 0x701a, 0xa8e4, 0x701e, 0x60c3, 0x0010, 0x080c, 0x95f7,
+ 0xa8e0, 0x701a, 0xa8e4, 0x701e, 0x60c3, 0x0010, 0x080c, 0x98a5,
0x009e, 0x00de, 0x0005, 0x00d6, 0x0096, 0x0126, 0x2091, 0x8000,
- 0x080c, 0x9171, 0x20e9, 0x0000, 0x2001, 0x1980, 0x2003, 0x0000,
+ 0x080c, 0x939e, 0x20e9, 0x0000, 0x2001, 0x1980, 0x2003, 0x0000,
0x7814, 0x2048, 0xa814, 0x8003, 0x60c2, 0xa830, 0x20a8, 0xa860,
0x20e0, 0xa85c, 0x9080, 0x001c, 0x2098, 0x2001, 0x1980, 0x0016,
- 0x200c, 0x2001, 0x0001, 0x080c, 0x2297, 0x080c, 0xc491, 0x9006,
- 0x080c, 0x2297, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c28,
- 0x04d9, 0x080c, 0x95f7, 0x012e, 0x009e, 0x00de, 0x0005, 0x00d6,
- 0x0096, 0x0126, 0x2091, 0x8000, 0x080c, 0x91bc, 0x20e9, 0x0000,
+ 0x200c, 0x2001, 0x0001, 0x080c, 0x22df, 0x080c, 0xcf91, 0x9006,
+ 0x080c, 0x22df, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c28,
+ 0x04d9, 0x080c, 0x98a5, 0x012e, 0x009e, 0x00de, 0x0005, 0x00d6,
+ 0x0096, 0x0126, 0x2091, 0x8000, 0x080c, 0x93e9, 0x20e9, 0x0000,
0x2001, 0x1980, 0x2003, 0x0000, 0x7814, 0x2048, 0xa873, 0x0200,
0xa877, 0x0000, 0xa814, 0x8003, 0x60c2, 0xa830, 0x20a8, 0xa860,
0x20e0, 0xa85c, 0x9080, 0x001c, 0x2098, 0x2001, 0x1980, 0x0016,
- 0x200c, 0x080c, 0xc491, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048,
- 0x0c60, 0x0051, 0x7814, 0x2048, 0x080c, 0x0fb3, 0x080c, 0x95f7,
+ 0x200c, 0x080c, 0xcf91, 0x001e, 0xa804, 0x9005, 0x0110, 0x2048,
+ 0x0c60, 0x0051, 0x7814, 0x2048, 0x080c, 0x0fbf, 0x080c, 0x98a5,
0x012e, 0x009e, 0x00de, 0x0005, 0x60c0, 0x8004, 0x9084, 0x0003,
0x9005, 0x0130, 0x9082, 0x0004, 0x20a3, 0x0000, 0x8000, 0x1de0,
- 0x0005, 0x080c, 0x9171, 0x7003, 0x7800, 0x7808, 0x8007, 0x700a,
- 0x60c3, 0x0008, 0x0804, 0x95f7, 0x00d6, 0x00e6, 0x080c, 0x91bc,
+ 0x0005, 0x080c, 0x939e, 0x7003, 0x7800, 0x7808, 0x8007, 0x700a,
+ 0x60c3, 0x0008, 0x0804, 0x98a5, 0x00d6, 0x00e6, 0x080c, 0x93e9,
0x7814, 0x9084, 0xff00, 0x2073, 0x0200, 0x8e70, 0x8e70, 0x9096,
0xdf00, 0x0138, 0x9096, 0xe000, 0x0120, 0x2073, 0x0010, 0x8e70,
0x0030, 0x9095, 0x0010, 0x2272, 0x8e70, 0x2073, 0x0034, 0x8e70,
0x2069, 0x1805, 0x20a9, 0x0004, 0x2d76, 0x8d68, 0x8e70, 0x1f04,
- 0x8f14, 0x2069, 0x1801, 0x20a9, 0x0004, 0x2d76, 0x8d68, 0x8e70,
- 0x1f04, 0x8f1d, 0x9096, 0xdf00, 0x0130, 0x9096, 0xe000, 0x0118,
+ 0x911c, 0x2069, 0x1801, 0x20a9, 0x0004, 0x2d76, 0x8d68, 0x8e70,
+ 0x1f04, 0x9125, 0x9096, 0xdf00, 0x0130, 0x9096, 0xe000, 0x0118,
0x60c3, 0x0018, 0x00f0, 0x2069, 0x1990, 0x9086, 0xdf00, 0x0110,
0x2069, 0x19aa, 0x20a9, 0x001a, 0x9e86, 0x0260, 0x1148, 0x00c6,
0x2061, 0x0200, 0x6010, 0x8000, 0x6012, 0x00ce, 0x2071, 0x0240,
- 0x2d04, 0x8007, 0x2072, 0x8d68, 0x8e70, 0x1f04, 0x8f34, 0x60c3,
- 0x004c, 0x080c, 0x95f7, 0x00ee, 0x00de, 0x0005, 0x080c, 0x9171,
+ 0x2d04, 0x8007, 0x2072, 0x8d68, 0x8e70, 0x1f04, 0x913c, 0x60c3,
+ 0x004c, 0x080c, 0x98a5, 0x00ee, 0x00de, 0x0005, 0x080c, 0x939e,
0x7003, 0x6300, 0x7007, 0x0028, 0x7808, 0x700e, 0x60c3, 0x0008,
- 0x0804, 0x95f7, 0x00d6, 0x0026, 0x0016, 0x080c, 0x91bc, 0x7003,
+ 0x0804, 0x98a5, 0x00d6, 0x0026, 0x0016, 0x080c, 0x93e9, 0x7003,
0x0200, 0x7814, 0x700e, 0x00e6, 0x9ef0, 0x0004, 0x2009, 0x0001,
0x2011, 0x000c, 0x2073, 0x0800, 0x8e70, 0x2073, 0x0000, 0x00ee,
- 0x7206, 0x710a, 0x62c2, 0x080c, 0x95f7, 0x001e, 0x002e, 0x00de,
- 0x0005, 0x2001, 0x1817, 0x2004, 0x609a, 0x0804, 0x95f7, 0x080c,
- 0x9171, 0x7003, 0x5200, 0x2069, 0x185e, 0x6804, 0xd084, 0x0130,
- 0x6828, 0x0016, 0x080c, 0x26d2, 0x710e, 0x001e, 0x20a9, 0x0004,
+ 0x7206, 0x710a, 0x62c2, 0x080c, 0x98a5, 0x001e, 0x002e, 0x00de,
+ 0x0005, 0x2001, 0x1817, 0x2004, 0x609a, 0x0804, 0x98a5, 0x080c,
+ 0x939e, 0x7003, 0x5200, 0x2069, 0x185e, 0x6804, 0xd084, 0x0130,
+ 0x6828, 0x0016, 0x080c, 0x273b, 0x710e, 0x001e, 0x20a9, 0x0004,
0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, 0x0250,
0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1, 0x0254, 0x4003,
- 0x080c, 0x9e82, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001,
+ 0x080c, 0xa307, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001,
0x181e, 0x2004, 0x7032, 0x2001, 0x181f, 0x2004, 0x7036, 0x0030,
0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, 0x7036, 0x60c3, 0x001c,
- 0x0804, 0x95f7, 0x080c, 0x9171, 0x7003, 0x0500, 0x080c, 0x9e82,
+ 0x0804, 0x98a5, 0x080c, 0x939e, 0x7003, 0x0500, 0x080c, 0xa307,
0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248, 0x2001, 0x181e, 0x2004,
0x700a, 0x2001, 0x181f, 0x2004, 0x700e, 0x0030, 0x2001, 0x1817,
0x2004, 0x9084, 0x00ff, 0x700e, 0x20a9, 0x0004, 0x20e1, 0x0001,
0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1, 0x0250, 0x4003, 0x60c3,
- 0x0010, 0x0804, 0x95f7, 0x080c, 0x9171, 0x9006, 0x080c, 0x6710,
+ 0x0010, 0x0804, 0x98a5, 0x080c, 0x939e, 0x9006, 0x080c, 0x6837,
0xb8a0, 0x9086, 0x007e, 0x1170, 0x2011, 0x0240, 0x2013, 0x22ff,
0x2011, 0x0241, 0x2013, 0xfffe, 0x7003, 0x0400, 0x620c, 0xc2b4,
0x620e, 0x0058, 0x7814, 0x0096, 0x904d, 0x0120, 0x9006, 0xa89e,
0xa8aa, 0xa8ae, 0x009e, 0x7003, 0x0300, 0xb8a0, 0x9086, 0x007e,
- 0x1904, 0x9067, 0x00d6, 0x2069, 0x1949, 0x2001, 0x1836, 0x2004,
+ 0x1904, 0x9275, 0x00d6, 0x2069, 0x1948, 0x2001, 0x1836, 0x2004,
0xd0a4, 0x0188, 0x6800, 0x700a, 0x6808, 0x9084, 0x2000, 0x7012,
- 0x080c, 0x9e99, 0x680c, 0x7016, 0x701f, 0x2710, 0x6818, 0x7022,
+ 0x080c, 0xa31e, 0x680c, 0x7016, 0x701f, 0x2710, 0x6818, 0x7022,
0x681c, 0x7026, 0x0428, 0x6800, 0x700a, 0x6804, 0x700e, 0x2009,
0x180d, 0x210c, 0xd18c, 0x0110, 0x2001, 0x0002, 0x00f6, 0x2079,
- 0x0100, 0x080c, 0x72e5, 0x1128, 0x78e3, 0x0000, 0x080c, 0x2713,
- 0x78e2, 0x00fe, 0x6808, 0x080c, 0x72e5, 0x1118, 0x9084, 0x37ff,
- 0x0010, 0x9084, 0x3fff, 0x7012, 0x080c, 0x9e99, 0x680c, 0x7016,
+ 0x0100, 0x080c, 0x7351, 0x1128, 0x78e3, 0x0000, 0x080c, 0x277c,
+ 0x78e2, 0x00fe, 0x6808, 0x080c, 0x7351, 0x1118, 0x9084, 0x37ff,
+ 0x0010, 0x9084, 0x3fff, 0x7012, 0x080c, 0xa31e, 0x680c, 0x7016,
0x00de, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9,
0x0000, 0x20a1, 0x0256, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801,
- 0x20a1, 0x025a, 0x4003, 0x00d6, 0x080c, 0x9cf6, 0x2069, 0x1951,
- 0x2071, 0x024e, 0x6800, 0xc0dd, 0x7002, 0x00de, 0x04e0, 0x2001,
- 0x1836, 0x2004, 0xd0a4, 0x01a8, 0x0016, 0x2001, 0x180d, 0x2004,
- 0xd08c, 0x2009, 0x0002, 0x1118, 0x2001, 0x194a, 0x200c, 0x60e0,
- 0x9106, 0x0130, 0x2100, 0x60e3, 0x0000, 0x080c, 0x2713, 0x61e2,
- 0x001e, 0x20e1, 0x0001, 0x2099, 0x1949, 0x20e9, 0x0000, 0x20a1,
- 0x024e, 0x20a9, 0x0008, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1805,
- 0x20a1, 0x0256, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1,
- 0x025a, 0x4003, 0x080c, 0x9cf6, 0x20a1, 0x024e, 0x20a9, 0x0008,
- 0x2099, 0x1951, 0x4003, 0x60c3, 0x0074, 0x0804, 0x95f7, 0x080c,
- 0x9171, 0x7003, 0x2010, 0x7007, 0x0014, 0x700b, 0x0800, 0x700f,
- 0x2000, 0x9006, 0x00f6, 0x2079, 0x185e, 0x7904, 0x00fe, 0xd1ac,
- 0x1110, 0x9085, 0x0020, 0xd1a4, 0x0110, 0x9085, 0x0010, 0x9085,
- 0x0002, 0x7026, 0x60c3, 0x0014, 0x0804, 0x95f7, 0x080c, 0x9171,
- 0x7003, 0x5000, 0x0804, 0x9005, 0x080c, 0x9171, 0x7003, 0x2110,
- 0x7007, 0x0014, 0x60c3, 0x0014, 0x0804, 0x95f7, 0x080c, 0x91bc,
- 0x7003, 0x0200, 0x60c3, 0x0004, 0x0804, 0x95f7, 0x080c, 0x91bc,
- 0x7003, 0x0100, 0x700b, 0x0003, 0x700f, 0x2a00, 0x60c3, 0x0008,
- 0x0804, 0x95f7, 0x080c, 0x91bc, 0x7003, 0x0200, 0x0804, 0x9005,
- 0x080c, 0x91bc, 0x7003, 0x0100, 0x782c, 0x9005, 0x0110, 0x700a,
- 0x0010, 0x700b, 0x0003, 0x7814, 0x700e, 0x60c3, 0x0008, 0x0804,
- 0x95f7, 0x00d6, 0x080c, 0x91bc, 0x7003, 0x0210, 0x7007, 0x0014,
- 0x700b, 0x0800, 0xb894, 0x9086, 0x0014, 0x1198, 0xb99c, 0x9184,
- 0x0030, 0x0190, 0xb998, 0x9184, 0xc000, 0x1140, 0xd1ec, 0x0118,
- 0x700f, 0x2100, 0x0058, 0x700f, 0x0100, 0x0040, 0x700f, 0x0400,
- 0x0028, 0x700f, 0x0700, 0x0010, 0x700f, 0x0800, 0x00f6, 0x2079,
- 0x185e, 0x7904, 0x00fe, 0xd1ac, 0x1110, 0x9085, 0x0020, 0xd1a4,
- 0x0110, 0x9085, 0x0010, 0x2009, 0x1880, 0x210c, 0xd184, 0x1110,
- 0x9085, 0x0002, 0x7026, 0x60c3, 0x0014, 0x00de, 0x0804, 0x95f7,
- 0x080c, 0x91bc, 0x7003, 0x0210, 0x7007, 0x0014, 0x700f, 0x0100,
- 0x60c3, 0x0014, 0x0804, 0x95f7, 0x080c, 0x91bc, 0x7003, 0x0200,
- 0x0804, 0x8f83, 0x080c, 0x91bc, 0x7003, 0x0100, 0x700b, 0x0003,
- 0x700f, 0x2a00, 0x60c3, 0x0008, 0x0804, 0x95f7, 0x080c, 0x91bc,
- 0x7003, 0x0100, 0x700b, 0x000b, 0x60c3, 0x0008, 0x0804, 0x95f7,
- 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x3200, 0x2021, 0x0800,
- 0x0040, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x2200, 0x2021,
- 0x0100, 0x080c, 0x9d0b, 0xb810, 0x9305, 0x7002, 0xb814, 0x7006,
- 0x2069, 0x1800, 0x6878, 0x700a, 0x687c, 0x700e, 0x9485, 0x0029,
- 0x7012, 0x004e, 0x003e, 0x00de, 0x080c, 0x95e5, 0x721a, 0x9f95,
- 0x0000, 0x7222, 0x7027, 0xffff, 0x2071, 0x024c, 0x002e, 0x0005,
- 0x0026, 0x080c, 0x9d0b, 0x7003, 0x02ff, 0x7007, 0xfffc, 0x00d6,
- 0x2069, 0x1800, 0x6878, 0x700a, 0x687c, 0x700e, 0x00de, 0x7013,
- 0x2029, 0x0c10, 0x7003, 0x0100, 0x7007, 0x0000, 0x700b, 0xfc02,
- 0x700f, 0x0000, 0x0005, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019,
- 0x3300, 0x2021, 0x0800, 0x0040, 0x0026, 0x00d6, 0x0036, 0x0046,
- 0x2019, 0x2300, 0x2021, 0x0100, 0x080c, 0x9d0b, 0xb810, 0x9305,
- 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0xb810, 0x9005, 0x1140,
- 0xb814, 0x9005, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffe, 0x0020,
- 0x6878, 0x700a, 0x687c, 0x700e, 0x0000, 0x9485, 0x0098, 0x7012,
- 0x004e, 0x003e, 0x00de, 0x080c, 0x95e5, 0x721a, 0x7a08, 0x7222,
- 0x2f10, 0x7226, 0x2071, 0x024c, 0x002e, 0x0005, 0x080c, 0x95e5,
- 0x721a, 0x7a08, 0x7222, 0x7814, 0x7026, 0x2071, 0x024c, 0x002e,
- 0x0005, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200,
- 0x2071, 0x0240, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0dc4, 0x908a,
- 0x0092, 0x1a0c, 0x0dc4, 0x6110, 0x2158, 0xb9ac, 0x2c78, 0x2061,
- 0x0100, 0x619a, 0x9082, 0x0085, 0x0033, 0x00fe, 0x00ee, 0x00de,
- 0x00ce, 0x00be, 0x0005, 0x922a, 0x9239, 0x9244, 0x9228, 0x9228,
- 0x9228, 0x922a, 0x9228, 0x9228, 0x9228, 0x9228, 0x9228, 0x9228,
- 0x080c, 0x0dc4, 0x0411, 0x60c3, 0x0000, 0x0026, 0x080c, 0x29fa,
- 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5, 0x2012, 0x002e, 0x0804,
- 0x95f7, 0x0431, 0x7808, 0x700a, 0x7814, 0x700e, 0x7017, 0xffff,
- 0x60c3, 0x000c, 0x0804, 0x95f7, 0x04a1, 0x7003, 0x0003, 0x7007,
- 0x0300, 0x60c3, 0x0004, 0x0804, 0x95f7, 0x0026, 0x080c, 0x9d0b,
- 0xb810, 0x9085, 0x8100, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800,
- 0x6878, 0x700a, 0x687c, 0x700e, 0x7013, 0x0009, 0x0804, 0x918c,
- 0x0026, 0x080c, 0x9d0b, 0xb810, 0x9085, 0x8400, 0x7002, 0xb814,
- 0x7006, 0x2069, 0x1800, 0x6878, 0x700a, 0x687c, 0x700e, 0x2001,
- 0x0099, 0x7a20, 0x9296, 0x0005, 0x0108, 0xc0bc, 0x7012, 0x0804,
- 0x91ee, 0x0026, 0x080c, 0x9d0b, 0xb810, 0x9085, 0x8500, 0x7002,
- 0xb814, 0x7006, 0x2069, 0x1800, 0x6878, 0x700a, 0x687c, 0x700e,
- 0x2001, 0x0099, 0x7a20, 0x9296, 0x0005, 0x0108, 0xc0bc, 0x7012,
- 0x0804, 0x91ee, 0x00b6, 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2c78,
- 0x2069, 0x0200, 0x2071, 0x0240, 0x7804, 0x908a, 0x0040, 0x0a0c,
- 0x0dc4, 0x908a, 0x0054, 0x1a0c, 0x0dc4, 0x7910, 0x2158, 0xb9ac,
- 0x2061, 0x0100, 0x619a, 0x9082, 0x0040, 0x0033, 0x00fe, 0x00ee,
- 0x00de, 0x00ce, 0x00be, 0x0005, 0x92c9, 0x9375, 0x9348, 0x9454,
- 0x92c7, 0x92c7, 0x92c7, 0x92c7, 0x92c7, 0x92c7, 0x92c7, 0x99ef,
- 0x99f4, 0x99f9, 0x99fe, 0x92c7, 0x92c7, 0x92c7, 0x99ea, 0x080c,
- 0x0dc4, 0x0096, 0x080c, 0x932c, 0x7914, 0x2148, 0xa97c, 0x7926,
- 0xae68, 0x96b4, 0x00ff, 0x9686, 0x0008, 0x1148, 0xa8b8, 0x7032,
- 0xa8bc, 0x7036, 0xa8c0, 0x703a, 0xa8c4, 0x703e, 0x0008, 0x7132,
- 0xa980, 0x9184, 0x000f, 0x1118, 0x2001, 0x0005, 0x0040, 0xd184,
- 0x0118, 0x2001, 0x0004, 0x0018, 0x9084, 0x0006, 0x8004, 0x7042,
- 0xd1ac, 0x0158, 0x7047, 0x0002, 0x9686, 0x0008, 0x1118, 0x080c,
- 0x17b7, 0x0010, 0x080c, 0x1679, 0x0050, 0xd1b4, 0x0118, 0x7047,
- 0x0001, 0x0028, 0x7047, 0x0000, 0x9016, 0x2230, 0x0010, 0xaab4,
- 0xaeb0, 0x726a, 0x766e, 0x20a9, 0x0008, 0x20e9, 0x0000, 0xa860,
- 0x20e0, 0xa85c, 0x9080, 0x0024, 0x2098, 0x20a1, 0x0252, 0x2069,
- 0x0200, 0x6813, 0x0018, 0x4003, 0x6813, 0x0008, 0x60c3, 0x0020,
- 0x6017, 0x0009, 0x2001, 0x19e0, 0x2003, 0x07d0, 0x2001, 0x19df,
- 0x2003, 0x0009, 0x009e, 0x0005, 0x6813, 0x0008, 0xba8c, 0x8210,
+ 0x20a1, 0x025a, 0x4003, 0x00d6, 0x080c, 0xa17b, 0x2069, 0x1950,
+ 0x2071, 0x024e, 0x6800, 0xc0dd, 0x7002, 0x080c, 0x5668, 0xd0e4,
+ 0x0110, 0x680c, 0x700e, 0x00de, 0x04e0, 0x2001, 0x1836, 0x2004,
+ 0xd0a4, 0x01a8, 0x0016, 0x2001, 0x180d, 0x2004, 0xd08c, 0x2009,
+ 0x0002, 0x1118, 0x2001, 0x1949, 0x200c, 0x60e0, 0x9106, 0x0130,
+ 0x2100, 0x60e3, 0x0000, 0x080c, 0x277c, 0x61e2, 0x001e, 0x20e1,
+ 0x0001, 0x2099, 0x1948, 0x20e9, 0x0000, 0x20a1, 0x024e, 0x20a9,
+ 0x0008, 0x4003, 0x20a9, 0x0004, 0x2099, 0x1805, 0x20a1, 0x0256,
+ 0x4003, 0x20a9, 0x0004, 0x2099, 0x1801, 0x20a1, 0x025a, 0x4003,
+ 0x080c, 0xa17b, 0x20a1, 0x024e, 0x20a9, 0x0008, 0x2099, 0x1950,
+ 0x4003, 0x60c3, 0x0074, 0x0804, 0x98a5, 0x080c, 0x939e, 0x7003,
+ 0x2010, 0x7007, 0x0014, 0x700b, 0x0800, 0x700f, 0x2000, 0x9006,
+ 0x00f6, 0x2079, 0x185e, 0x7904, 0x00fe, 0xd1ac, 0x1110, 0x9085,
+ 0x0020, 0xd1a4, 0x0110, 0x9085, 0x0010, 0x9085, 0x0002, 0x00d6,
+ 0x0804, 0x934e, 0x7026, 0x60c3, 0x0014, 0x0804, 0x98a5, 0x080c,
+ 0x939e, 0x7003, 0x5000, 0x0804, 0x920d, 0x080c, 0x939e, 0x7003,
+ 0x2110, 0x7007, 0x0014, 0x60c3, 0x0014, 0x0804, 0x98a5, 0x080c,
+ 0x93e0, 0x0010, 0x080c, 0x93e9, 0x7003, 0x0200, 0x60c3, 0x0004,
+ 0x0804, 0x98a5, 0x080c, 0x93e9, 0x7003, 0x0100, 0x700b, 0x0003,
+ 0x700f, 0x2a00, 0x60c3, 0x0008, 0x0804, 0x98a5, 0x080c, 0x93e9,
+ 0x7003, 0x0200, 0x0804, 0x920d, 0x080c, 0x93e9, 0x7003, 0x0100,
+ 0x782c, 0x9005, 0x0110, 0x700a, 0x0010, 0x700b, 0x0003, 0x7814,
+ 0x700e, 0x60c3, 0x0008, 0x0804, 0x98a5, 0x00d6, 0x080c, 0x93e9,
+ 0x7003, 0x0210, 0x7007, 0x0014, 0x700b, 0x0800, 0xb894, 0x9086,
+ 0x0014, 0x1198, 0xb99c, 0x9184, 0x0030, 0x0190, 0xb998, 0x9184,
+ 0xc000, 0x1140, 0xd1ec, 0x0118, 0x700f, 0x2100, 0x0058, 0x700f,
+ 0x0100, 0x0040, 0x700f, 0x0400, 0x0028, 0x700f, 0x0700, 0x0010,
+ 0x700f, 0x0800, 0x00f6, 0x2079, 0x185e, 0x7904, 0x00fe, 0xd1ac,
+ 0x1110, 0x9085, 0x0020, 0xd1a4, 0x0110, 0x9085, 0x0010, 0x2009,
+ 0x1880, 0x210c, 0xd184, 0x1110, 0x9085, 0x0002, 0x0026, 0x2009,
+ 0x187e, 0x210c, 0xd1e4, 0x0150, 0xc0c5, 0xbabc, 0xd28c, 0x1108,
+ 0xc0cd, 0x9094, 0x0030, 0x9296, 0x0010, 0x0140, 0xd1ec, 0x0130,
+ 0x9094, 0x0030, 0x9296, 0x0010, 0x0108, 0xc0bd, 0x002e, 0x7026,
+ 0x60c3, 0x0014, 0x00de, 0x0804, 0x98a5, 0x080c, 0x93e9, 0x7003,
+ 0x0210, 0x7007, 0x0014, 0x700f, 0x0100, 0x60c3, 0x0014, 0x0804,
+ 0x98a5, 0x080c, 0x93e9, 0x7003, 0x0200, 0x0804, 0x918b, 0x080c,
+ 0x93e9, 0x7003, 0x0100, 0x700b, 0x0003, 0x700f, 0x2a00, 0x60c3,
+ 0x0008, 0x0804, 0x98a5, 0x080c, 0x93e9, 0x7003, 0x0100, 0x700b,
+ 0x000b, 0x60c3, 0x0008, 0x0804, 0x98a5, 0x0026, 0x00d6, 0x0036,
+ 0x0046, 0x2019, 0x3200, 0x2021, 0x0800, 0x0040, 0x0026, 0x00d6,
+ 0x0036, 0x0046, 0x2019, 0x2200, 0x2021, 0x0100, 0x080c, 0xa190,
+ 0xb810, 0x9305, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6878,
+ 0x700a, 0x687c, 0x700e, 0x9485, 0x0029, 0x7012, 0x004e, 0x003e,
+ 0x00de, 0x080c, 0x9893, 0x721a, 0x9f95, 0x0000, 0x7222, 0x7027,
+ 0xffff, 0x2071, 0x024c, 0x002e, 0x0005, 0x0026, 0x080c, 0xa190,
+ 0x7003, 0x02ff, 0x7007, 0xfffc, 0x00d6, 0x2069, 0x1800, 0x6878,
+ 0x700a, 0x687c, 0x700e, 0x00de, 0x7013, 0x2029, 0x0c10, 0x7003,
+ 0x0100, 0x7007, 0x0000, 0x700b, 0xfc02, 0x700f, 0x0000, 0x0005,
+ 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x3300, 0x2021, 0x0800,
+ 0x0040, 0x0026, 0x00d6, 0x0036, 0x0046, 0x2019, 0x2300, 0x2021,
+ 0x0100, 0x080c, 0xa190, 0xb810, 0x9305, 0x7002, 0xb814, 0x7006,
+ 0x2069, 0x1800, 0xb810, 0x9005, 0x1140, 0xb814, 0x9005, 0x1128,
+ 0x700b, 0x00ff, 0x700f, 0xfffe, 0x0020, 0x6878, 0x700a, 0x687c,
+ 0x700e, 0x0000, 0x9485, 0x0098, 0x7012, 0x004e, 0x003e, 0x00de,
+ 0x080c, 0x9893, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x2071,
+ 0x024c, 0x002e, 0x0005, 0x080c, 0x9893, 0x721a, 0x7a08, 0x7222,
+ 0x7814, 0x7026, 0x2071, 0x024c, 0x002e, 0x0005, 0x00b6, 0x00c6,
+ 0x00d6, 0x00e6, 0x00f6, 0x2069, 0x0200, 0x2071, 0x0240, 0x6004,
+ 0x908a, 0x0085, 0x0a0c, 0x0dc3, 0x908a, 0x0092, 0x1a0c, 0x0dc3,
+ 0x6110, 0x2158, 0xb9b0, 0x2c78, 0x2061, 0x0100, 0x619a, 0x9082,
+ 0x0085, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be, 0x0005,
+ 0x9457, 0x9466, 0x9471, 0x9455, 0x9455, 0x9455, 0x9457, 0x9455,
+ 0x9455, 0x9455, 0x9455, 0x9455, 0x9455, 0x080c, 0x0dc3, 0x0411,
+ 0x60c3, 0x0000, 0x0026, 0x080c, 0x2a63, 0x0228, 0x2011, 0x0101,
+ 0x2204, 0xc0c5, 0x2012, 0x002e, 0x0804, 0x98a5, 0x0431, 0x7808,
+ 0x700a, 0x7814, 0x700e, 0x7017, 0xffff, 0x60c3, 0x000c, 0x0804,
+ 0x98a5, 0x04a1, 0x7003, 0x0003, 0x7007, 0x0300, 0x60c3, 0x0004,
+ 0x0804, 0x98a5, 0x0026, 0x080c, 0xa190, 0xb810, 0x9085, 0x8100,
+ 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6878, 0x700a, 0x687c,
+ 0x700e, 0x7013, 0x0009, 0x0804, 0x93b9, 0x0026, 0x080c, 0xa190,
+ 0xb810, 0x9085, 0x8400, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800,
+ 0x6878, 0x700a, 0x687c, 0x700e, 0x2001, 0x0099, 0x7a20, 0x9296,
+ 0x0005, 0x0108, 0xc0bc, 0x7012, 0x0804, 0x941b, 0x0026, 0x080c,
+ 0xa190, 0xb810, 0x9085, 0x8500, 0x7002, 0xb814, 0x7006, 0x2069,
+ 0x1800, 0x6878, 0x700a, 0x687c, 0x700e, 0x2001, 0x0099, 0x7a20,
+ 0x9296, 0x0005, 0x0108, 0xc0bc, 0x7012, 0x0804, 0x941b, 0x00b6,
+ 0x00c6, 0x00d6, 0x00e6, 0x00f6, 0x2c78, 0x2069, 0x0200, 0x2071,
+ 0x0240, 0x7804, 0x908a, 0x0040, 0x0a0c, 0x0dc3, 0x908a, 0x0054,
+ 0x1a0c, 0x0dc3, 0x7910, 0x2158, 0xb9b0, 0x2061, 0x0100, 0x619a,
+ 0x9082, 0x0040, 0x0033, 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x00be,
+ 0x0005, 0x94f6, 0x95bd, 0x9590, 0x96df, 0x94f4, 0x94f4, 0x94f4,
+ 0x94f4, 0x94f4, 0x94f4, 0x94f4, 0x9cc0, 0x9cc5, 0x9cca, 0x9ccf,
+ 0x94f4, 0xa0be, 0x94f4, 0x9cbb, 0x080c, 0x0dc3, 0x0096, 0x780b,
+ 0xffff, 0x080c, 0x9561, 0x7914, 0x2148, 0xa97c, 0x7956, 0xae68,
+ 0x96b4, 0x00ff, 0x9686, 0x0008, 0x1148, 0xa8b8, 0x7032, 0xa8bc,
+ 0x7036, 0xa8c0, 0x703a, 0xa8c4, 0x703e, 0x0008, 0x7132, 0xa980,
+ 0x9184, 0x000f, 0x1118, 0x2001, 0x0005, 0x0040, 0xd184, 0x0118,
+ 0x2001, 0x0004, 0x0018, 0x9084, 0x0006, 0x8004, 0x2010, 0x785c,
+ 0x9084, 0x00ff, 0x8007, 0x9205, 0x7042, 0xd1ac, 0x0158, 0x7047,
+ 0x0002, 0x9686, 0x0008, 0x1118, 0x080c, 0x17ff, 0x0010, 0x080c,
+ 0x16c1, 0x0050, 0xd1b4, 0x0118, 0x7047, 0x0001, 0x0028, 0x7047,
+ 0x0000, 0x9016, 0x2230, 0x0010, 0xaab4, 0xaeb0, 0x726a, 0x766e,
+ 0x20a9, 0x0008, 0x20e9, 0x0000, 0xa860, 0x20e0, 0xa85c, 0x9080,
+ 0x0024, 0x2098, 0x20a1, 0x0252, 0x2069, 0x0200, 0x6813, 0x0018,
+ 0x4003, 0x6813, 0x0008, 0x60c3, 0x0020, 0x6017, 0x0009, 0x2001,
+ 0x19e0, 0x2003, 0x07d0, 0x2001, 0x19df, 0x2003, 0x0009, 0x009e,
+ 0x0005, 0x6813, 0x0008, 0xba8c, 0x8210, 0xb8bc, 0xd084, 0x0180,
+ 0x2001, 0x1aab, 0x200c, 0x8108, 0x2102, 0x2001, 0x1aaa, 0x201c,
+ 0x1218, 0x8318, 0x2302, 0x0ea0, 0x794a, 0x712e, 0x7b46, 0x732a,
0x9294, 0x00ff, 0xba8e, 0x8217, 0x721a, 0xba10, 0x9295, 0x0600,
0x7202, 0xba14, 0x7206, 0x2069, 0x1800, 0x6a78, 0x720a, 0x6a7c,
0x720e, 0x7013, 0x0829, 0x2f10, 0x7222, 0x7027, 0xffff, 0x0005,
0x00d6, 0x0096, 0x0081, 0x7814, 0x2048, 0xa894, 0x7002, 0xa890,
0x7006, 0xa8b4, 0x700a, 0xa8b0, 0x700e, 0x60c3, 0x000c, 0x009e,
- 0x00de, 0x0804, 0x95f7, 0x6813, 0x0008, 0xb810, 0x9085, 0x0500,
+ 0x00de, 0x0804, 0x98a5, 0x6813, 0x0008, 0xb810, 0x9085, 0x0500,
0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6878, 0x700a, 0x687c,
- 0x700e, 0x7013, 0x0889, 0x080c, 0x95e5, 0x721a, 0x7a08, 0x7222,
+ 0x700e, 0x7013, 0x0889, 0x080c, 0x9893, 0x721a, 0x7a08, 0x7222,
0x2f10, 0x7226, 0x2071, 0x024c, 0x0005, 0x00d6, 0x0096, 0x080c,
- 0x9438, 0x7814, 0x2048, 0x080c, 0xb953, 0x1130, 0x7814, 0x9084,
+ 0x96bd, 0x7814, 0x2048, 0x080c, 0xc1cb, 0x1130, 0x7814, 0x9084,
0x0700, 0x8007, 0x0033, 0x0010, 0x9006, 0x001b, 0x009e, 0x00de,
- 0x0005, 0x9393, 0x93f0, 0x93fa, 0x9412, 0x9418, 0x9424, 0x9427,
- 0x9391, 0x080c, 0x0dc4, 0x0016, 0x0036, 0xa980, 0x918c, 0x0003,
- 0x0118, 0x9186, 0x0003, 0x1170, 0xabac, 0x7316, 0xa89c, 0x701a,
- 0xa898, 0x701e, 0x003e, 0x001e, 0x2001, 0x198e, 0x2004, 0x60c2,
- 0x0804, 0x95f7, 0x9186, 0x0001, 0x190c, 0x0dc4, 0xabac, 0x7316,
- 0xa89c, 0x701a, 0xa898, 0x701e, 0xa8a8, 0x7026, 0xa8b0, 0x702e,
- 0x2009, 0x0018, 0x9384, 0x0300, 0x0570, 0xd3c4, 0x0110, 0xa8b0,
- 0x9108, 0xd3cc, 0x0110, 0xa8a8, 0x9108, 0x6810, 0x9085, 0x0010,
- 0x6812, 0x2011, 0x0258, 0x20e9, 0x0000, 0x22a0, 0x0156, 0x20a9,
- 0x0008, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x002d, 0x2098, 0x4003,
- 0x6810, 0x8000, 0x6812, 0x2011, 0x0240, 0x22a0, 0x20a9, 0x0005,
- 0x4003, 0x6810, 0xc0a4, 0x6812, 0x015e, 0x9184, 0x0003, 0x0118,
- 0x2019, 0x0245, 0x201a, 0x61c2, 0x003e, 0x001e, 0x0804, 0x95f7,
- 0x7017, 0x0008, 0x2001, 0x180f, 0x2004, 0xd0a4, 0x0110, 0x7017,
- 0x0028, 0x00d0, 0x7017, 0x0302, 0x7027, 0x0012, 0x702f, 0x0008,
+ 0x0005, 0x95db, 0x9644, 0x9654, 0x967a, 0x9686, 0x9697, 0x969f,
+ 0x95d9, 0x080c, 0x0dc3, 0x0016, 0x0036, 0xa980, 0x918c, 0x0003,
+ 0x0118, 0x9186, 0x0003, 0x1198, 0xabac, 0x7824, 0xd0cc, 0x1168,
+ 0x7316, 0xa89c, 0x701a, 0xa898, 0x701e, 0x003e, 0x001e, 0x2001,
+ 0x198e, 0x2004, 0x60c2, 0x0804, 0x98a5, 0xc3e5, 0x0c88, 0x9186,
+ 0x0001, 0x190c, 0x0dc3, 0xabac, 0x7824, 0xd0cc, 0x1904, 0x9641,
+ 0x7316, 0xa89c, 0x701a, 0xa898, 0x701e, 0xa8a8, 0x7026, 0xa8b0,
+ 0x702e, 0x2009, 0x0018, 0x9384, 0x0300, 0x0570, 0xd3c4, 0x0110,
+ 0xa8b0, 0x9108, 0xd3cc, 0x0110, 0xa8a8, 0x9108, 0x6810, 0x9085,
+ 0x0010, 0x6812, 0x2011, 0x0258, 0x20e9, 0x0000, 0x22a0, 0x0156,
+ 0x20a9, 0x0008, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x002d, 0x2098,
+ 0x4003, 0x6810, 0x8000, 0x6812, 0x2011, 0x0240, 0x22a0, 0x20a9,
+ 0x0005, 0x4003, 0x6810, 0xc0a4, 0x6812, 0x015e, 0x9184, 0x0003,
+ 0x0118, 0x2019, 0x0245, 0x201a, 0x61c2, 0x003e, 0x001e, 0x0804,
+ 0x98a5, 0xc3e5, 0x0804, 0x9600, 0x2011, 0x0008, 0x2001, 0x180f,
+ 0x2004, 0xd0a4, 0x0110, 0x2011, 0x0028, 0x7824, 0xd0cc, 0x1110,
+ 0x7216, 0x0470, 0x0ce8, 0xc2e5, 0x2011, 0x0302, 0x0016, 0x782c,
+ 0x701a, 0x7930, 0x711e, 0x9105, 0x0108, 0xc2dd, 0x001e, 0x7824,
+ 0xd0cc, 0x0108, 0xc2e5, 0x7216, 0x7027, 0x0012, 0x702f, 0x0008,
0x7043, 0x7000, 0x7047, 0x0500, 0x704f, 0x000a, 0x2069, 0x0200,
0x6813, 0x0009, 0x2071, 0x0240, 0x700b, 0x2500, 0x60c3, 0x0032,
- 0x0804, 0x95f7, 0x7017, 0x0028, 0x60c3, 0x0018, 0x0804, 0x95f7,
- 0x7017, 0x0100, 0x702f, 0x0008, 0x7828, 0x9084, 0x00ff, 0x7036,
- 0x60c3, 0x0020, 0x0804, 0x95f7, 0x7017, 0x0008, 0x0c68, 0x0036,
- 0x7b14, 0x9384, 0xff00, 0x7816, 0x9384, 0x00ff, 0x8001, 0x1118,
- 0x7216, 0x003e, 0x0c08, 0x7017, 0x0800, 0x701e, 0x003e, 0x08e0,
- 0x00d6, 0x6813, 0x0008, 0xb810, 0x9085, 0x0700, 0x7002, 0xb814,
- 0x7006, 0x2069, 0x1800, 0x6878, 0x700a, 0x687c, 0x700e, 0x7013,
- 0x0898, 0x080c, 0x95e5, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226,
- 0x2071, 0x024c, 0x00de, 0x0005, 0x0016, 0x7814, 0x9084, 0x0700,
- 0x8007, 0x0013, 0x001e, 0x0005, 0x9464, 0x9464, 0x9466, 0x9464,
- 0x9464, 0x9464, 0x9480, 0x9464, 0x080c, 0x0dc4, 0x7914, 0x918c,
- 0x08ff, 0x918d, 0xf600, 0x7916, 0x2009, 0x0003, 0x00b9, 0x2069,
- 0x185e, 0x6804, 0xd0bc, 0x0130, 0x682c, 0x9084, 0x00ff, 0x8007,
- 0x7032, 0x0010, 0x7033, 0x3f00, 0x60c3, 0x0001, 0x0804, 0x95f7,
- 0x2009, 0x0003, 0x0019, 0x7033, 0x7f00, 0x0cb0, 0x0016, 0x080c,
- 0x9d0b, 0x001e, 0xb810, 0x9085, 0x0100, 0x7002, 0xb814, 0x7006,
- 0x2069, 0x1800, 0x6a78, 0x720a, 0x6a7c, 0x720e, 0x7013, 0x0888,
- 0x918d, 0x0008, 0x7116, 0x080c, 0x95e5, 0x721a, 0x7a08, 0x7222,
- 0x2f10, 0x7226, 0x0005, 0x00b6, 0x0096, 0x00e6, 0x00d6, 0x00c6,
- 0x0056, 0x0046, 0x0036, 0x2061, 0x0100, 0x2071, 0x1800, 0x7810,
- 0x2058, 0xb8a0, 0x2028, 0xb910, 0xba14, 0x7378, 0x747c, 0x7820,
- 0x90be, 0x0006, 0x0904, 0x9577, 0x90be, 0x000a, 0x1904, 0x9533,
- 0xb8ac, 0x609e, 0x7814, 0x2048, 0xa880, 0xd0fc, 0x0558, 0xaf94,
- 0x9784, 0xff00, 0x9105, 0x6062, 0x873f, 0x9784, 0xff00, 0x0006,
- 0x7814, 0x2048, 0xa87c, 0xc0fc, 0x9005, 0x000e, 0x1160, 0xaf98,
- 0x87ff, 0x0198, 0x2039, 0x0098, 0x9705, 0x6072, 0x7808, 0x6082,
- 0x2f00, 0x6086, 0x0038, 0x9185, 0x2200, 0x6062, 0x6073, 0x0129,
- 0x6077, 0x0000, 0xb8ac, 0x609e, 0x0050, 0x2039, 0x0029, 0x9705,
- 0x6072, 0x0cc0, 0x9185, 0x0200, 0x6062, 0x6073, 0x2029, 0xa880,
- 0xd0fc, 0x0118, 0xaf98, 0x87ff, 0x1120, 0x2f00, 0x6082, 0x7808,
- 0x6086, 0x6266, 0x636a, 0x646e, 0x6077, 0x0000, 0xb88c, 0x8000,
- 0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a, 0x607f, 0x0000, 0xa838,
- 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6, 0xa844, 0x60ca, 0xb86c,
- 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, 0x080c, 0x9cf0, 0x2009,
- 0x07d0, 0x60c4, 0x9084, 0xfff0, 0x9005, 0x0110, 0x2009, 0x1b58,
- 0x080c, 0x8425, 0x003e, 0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee,
- 0x009e, 0x00be, 0x0005, 0x7804, 0x9086, 0x0040, 0x0904, 0x95aa,
- 0x9185, 0x0100, 0x6062, 0x6266, 0x636a, 0x646e, 0x6073, 0x0809,
- 0x6077, 0x0008, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xb88c, 0x8000,
- 0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00,
- 0x6082, 0x7808, 0x6086, 0x7814, 0x2048, 0xa838, 0x608a, 0xa834,
- 0x608e, 0xa848, 0x60c6, 0xa844, 0x60ca, 0xb86c, 0x60ce, 0xbaac,
- 0x629e, 0x080c, 0x9cf0, 0x2009, 0x07d0, 0x60c4, 0x9084, 0xfff0,
- 0x9005, 0x0110, 0x2009, 0x1b58, 0x080c, 0x8425, 0x003e, 0x004e,
- 0x005e, 0x00ce, 0x00de, 0x00ee, 0x009e, 0x00be, 0x0005, 0x7814,
- 0x2048, 0xa880, 0x9084, 0x0003, 0x9086, 0x0002, 0x05d8, 0x9185,
- 0x0100, 0x6062, 0x6266, 0x636a, 0x646e, 0x6073, 0x0880, 0x6077,
- 0x0008, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a,
- 0x607f, 0x0000, 0x2f00, 0x6086, 0x7808, 0x6082, 0xa894, 0x608a,
- 0xa890, 0x608e, 0xa8b4, 0x60c6, 0xa8b0, 0x60ca, 0xb86c, 0x60ce,
- 0x60af, 0x95d5, 0x60d7, 0x0000, 0xbaac, 0x629e, 0x080c, 0x9cd2,
- 0x0804, 0x9563, 0x9185, 0x0600, 0x6062, 0x6266, 0x636a, 0x646e,
+ 0x0804, 0x98a5, 0x2011, 0x0028, 0x7824, 0xd0cc, 0x1128, 0x7216,
+ 0x60c3, 0x0018, 0x0804, 0x98a5, 0x0cd0, 0xc2e5, 0x2011, 0x0100,
+ 0x7824, 0xd0cc, 0x0108, 0xc2e5, 0x7216, 0x702f, 0x0008, 0x7858,
+ 0x9084, 0x00ff, 0x7036, 0x60c3, 0x0020, 0x0804, 0x98a5, 0x2011,
+ 0x0008, 0x7824, 0xd0cc, 0x0108, 0xc2e5, 0x7216, 0x0c08, 0x0036,
+ 0x7b14, 0x9384, 0xff00, 0x7816, 0x9384, 0x00ff, 0x8001, 0x1138,
+ 0x7824, 0xd0cc, 0x0108, 0xc2e5, 0x7216, 0x003e, 0x0888, 0x0046,
+ 0x2021, 0x0800, 0x0006, 0x7824, 0xd0cc, 0x000e, 0x0108, 0xc4e5,
+ 0x7416, 0x004e, 0x701e, 0x003e, 0x0818, 0x00d6, 0x6813, 0x0008,
+ 0xb810, 0x9085, 0x0700, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800,
+ 0x6878, 0x700a, 0x687c, 0x700e, 0x7824, 0xd0cc, 0x1168, 0x7013,
+ 0x0898, 0x080c, 0x9893, 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226,
+ 0x2071, 0x024c, 0x00de, 0x0005, 0x7013, 0x0889, 0x0c90, 0x0016,
+ 0x7814, 0x9084, 0x0700, 0x8007, 0x0013, 0x001e, 0x0005, 0x96ef,
+ 0x96ef, 0x96f1, 0x96ef, 0x96ef, 0x96ef, 0x970b, 0x96ef, 0x080c,
+ 0x0dc3, 0x7914, 0x918c, 0x08ff, 0x918d, 0xf600, 0x7916, 0x2009,
+ 0x0003, 0x00b9, 0x2069, 0x185e, 0x6804, 0xd0bc, 0x0130, 0x682c,
+ 0x9084, 0x00ff, 0x8007, 0x7032, 0x0010, 0x7033, 0x3f00, 0x60c3,
+ 0x0001, 0x0804, 0x98a5, 0x2009, 0x0003, 0x0019, 0x7033, 0x7f00,
+ 0x0cb0, 0x0016, 0x080c, 0xa190, 0x001e, 0xb810, 0x9085, 0x0100,
+ 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6a78, 0x720a, 0x6a7c,
+ 0x720e, 0x7013, 0x0888, 0x918d, 0x0008, 0x7116, 0x080c, 0x9893,
+ 0x721a, 0x7a08, 0x7222, 0x2f10, 0x7226, 0x0005, 0x00b6, 0x0096,
+ 0x00e6, 0x00d6, 0x00c6, 0x0056, 0x0046, 0x0036, 0x2061, 0x0100,
+ 0x2071, 0x1800, 0x7810, 0x2058, 0xb8a0, 0x2028, 0xb910, 0xba14,
+ 0x7378, 0x747c, 0x7820, 0x90be, 0x0006, 0x0904, 0x9802, 0x90be,
+ 0x000a, 0x1904, 0x97be, 0xb8b0, 0x609e, 0x7814, 0x2048, 0xa880,
+ 0xd0fc, 0x0558, 0xaf94, 0x9784, 0xff00, 0x9105, 0x6062, 0x873f,
+ 0x9784, 0xff00, 0x0006, 0x7814, 0x2048, 0xa87c, 0xc0fc, 0x9005,
+ 0x000e, 0x1160, 0xaf98, 0x87ff, 0x0198, 0x2039, 0x0098, 0x9705,
+ 0x6072, 0x7808, 0x6082, 0x2f00, 0x6086, 0x0038, 0x9185, 0x2200,
+ 0x6062, 0x6073, 0x0129, 0x6077, 0x0000, 0xb8b0, 0x609e, 0x0050,
+ 0x2039, 0x0029, 0x9705, 0x6072, 0x0cc0, 0x9185, 0x0200, 0x6062,
+ 0x6073, 0x2029, 0xa880, 0xd0fc, 0x0118, 0xaf98, 0x87ff, 0x1120,
+ 0x2f00, 0x6082, 0x7808, 0x6086, 0x6266, 0x636a, 0x646e, 0x6077,
+ 0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a,
+ 0x607f, 0x0000, 0xa838, 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6,
+ 0xa844, 0x60ca, 0xb86c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000,
+ 0x080c, 0xa175, 0x2009, 0x07d0, 0x60c4, 0x9084, 0xfff0, 0x9005,
+ 0x0110, 0x2009, 0x1b58, 0x080c, 0x8591, 0x003e, 0x004e, 0x005e,
+ 0x00ce, 0x00de, 0x00ee, 0x009e, 0x00be, 0x0005, 0x7804, 0x9086,
+ 0x0040, 0x0904, 0x983e, 0x9185, 0x0100, 0x6062, 0x6266, 0x636a,
+ 0x646e, 0x6073, 0x0809, 0x6077, 0x0008, 0x60af, 0x95d5, 0x60d7,
+ 0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e, 0x8007, 0x607a,
+ 0x607f, 0x0000, 0x2f00, 0x6082, 0x7808, 0x6086, 0x7814, 0x2048,
+ 0xa838, 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6, 0xa844, 0x60ca,
+ 0xb86c, 0x60ce, 0xbab0, 0x629e, 0x080c, 0xa175, 0x2009, 0x07d0,
+ 0x60c4, 0x9084, 0xfff0, 0x9005, 0x0110, 0x2009, 0x1b58, 0x080c,
+ 0x8591, 0x003e, 0x004e, 0x005e, 0x00ce, 0x00de, 0x00ee, 0x009e,
+ 0x00be, 0x0005, 0x7814, 0x2048, 0xa880, 0x9084, 0x0003, 0x9086,
+ 0x0002, 0x0904, 0x985a, 0x9185, 0x0100, 0x6062, 0x6266, 0x636a,
+ 0x646e, 0x6073, 0x0880, 0x6077, 0x0008, 0xb88c, 0x8000, 0x9084,
+ 0x00ff, 0xb88e, 0x8007, 0x607a, 0x7838, 0x607e, 0x2f00, 0x6086,
+ 0x7808, 0x6082, 0xa894, 0x608a, 0xa890, 0x608e, 0xa8b4, 0x60c6,
+ 0xa8b0, 0x60ca, 0xa8b0, 0x7930, 0x9108, 0x7932, 0xa8b4, 0x792c,
+ 0x9109, 0x792e, 0xb86c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000,
+ 0xbab0, 0x629e, 0x080c, 0xa152, 0x0804, 0x97ee, 0xb8bc, 0xd084,
+ 0x0148, 0xb88c, 0x7814, 0x2048, 0xb88c, 0x784a, 0xa836, 0x2900,
+ 0xa83a, 0xb046, 0x9185, 0x0600, 0x6062, 0x6266, 0x636a, 0x646e,
0x6073, 0x0829, 0x6077, 0x0000, 0x60af, 0x9575, 0x60d7, 0x0000,
- 0x0804, 0x9546, 0x9185, 0x0700, 0x6062, 0x6266, 0x636a, 0x646e,
- 0x6073, 0x0898, 0x6077, 0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff,
- 0xb88e, 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6086, 0x7808,
- 0x6082, 0xa838, 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6, 0xa844,
- 0x60ca, 0xb86c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xbaac,
- 0x629e, 0x080c, 0x9cd2, 0x0804, 0x9563, 0x7a10, 0x00b6, 0x2258,
- 0xba8c, 0x8210, 0x9294, 0x00ff, 0xba8e, 0x00be, 0x8217, 0x0005,
- 0x00d6, 0x2069, 0x19c4, 0x6843, 0x0001, 0x00de, 0x0005, 0x60a3,
- 0x0056, 0x60a7, 0x9575, 0x00f1, 0x080c, 0x8417, 0x0005, 0x0016,
- 0x2001, 0x180c, 0x200c, 0x9184, 0x0600, 0x9086, 0x0600, 0x0128,
- 0x0089, 0x080c, 0x8417, 0x001e, 0x0005, 0xc1e5, 0x2001, 0x180c,
- 0x2102, 0x2001, 0x19c5, 0x2003, 0x0000, 0x2001, 0x19cd, 0x2003,
- 0x0000, 0x0c88, 0x0006, 0x6014, 0x9084, 0x1804, 0x9085, 0x0009,
- 0x6016, 0x000e, 0x0005, 0x0016, 0x00c6, 0x0006, 0x2061, 0x0100,
- 0x61a4, 0x60a7, 0x95f5, 0x6014, 0x9084, 0x1804, 0x9085, 0x0008,
- 0x6016, 0x000e, 0xa001, 0xa001, 0xa001, 0x61a6, 0x00ce, 0x001e,
- 0x0005, 0x00c6, 0x00d6, 0x0016, 0x0026, 0x2061, 0x0100, 0x2069,
- 0x0140, 0x080c, 0x72e5, 0x11c0, 0x2001, 0x19e0, 0x2004, 0x9005,
- 0x15d0, 0x080c, 0x7393, 0x1160, 0x2061, 0x0100, 0x6020, 0xd0b4,
- 0x1120, 0x6024, 0xd084, 0x090c, 0x0dc4, 0x080c, 0x8417, 0x0458,
- 0x00c6, 0x2061, 0x19c4, 0x00c8, 0x6904, 0x9194, 0x4000, 0x0540,
- 0x0811, 0x080c, 0x2b75, 0x00c6, 0x2061, 0x19c4, 0x6128, 0x9192,
- 0x0008, 0x1258, 0x8108, 0x612a, 0x6124, 0x00ce, 0x81ff, 0x0198,
- 0x080c, 0x8417, 0x080c, 0x961a, 0x0070, 0x6124, 0x91e5, 0x0000,
- 0x0140, 0x080c, 0xd36d, 0x080c, 0x8420, 0x2009, 0x0014, 0x080c,
- 0x9f88, 0x00ce, 0x0000, 0x002e, 0x001e, 0x00de, 0x00ce, 0x0005,
- 0x2001, 0x19e0, 0x2004, 0x9005, 0x1db0, 0x00c6, 0x2061, 0x19c4,
- 0x6128, 0x9192, 0x0003, 0x1e08, 0x8108, 0x612a, 0x00ce, 0x080c,
- 0x8417, 0x080c, 0x5db5, 0x2009, 0x185a, 0x2114, 0x8210, 0x220a,
- 0x0c10, 0x0096, 0x00c6, 0x00d6, 0x00e6, 0x0016, 0x0026, 0x080c,
- 0x842d, 0x2071, 0x19c4, 0x713c, 0x81ff, 0x0904, 0x9711, 0x2061,
- 0x0100, 0x2069, 0x0140, 0x080c, 0x72e5, 0x1198, 0x0036, 0x2019,
- 0x0002, 0x080c, 0x9964, 0x003e, 0x080c, 0xd36d, 0x703c, 0x9065,
- 0x0120, 0x2009, 0x004a, 0x080c, 0x9f88, 0x080c, 0x7393, 0x0804,
- 0x9711, 0x080c, 0x971d, 0x0904, 0x9711, 0x6904, 0xd1f4, 0x0904,
- 0x9718, 0x080c, 0x2b75, 0x00c6, 0x703c, 0x9065, 0x090c, 0x0dc4,
- 0x6020, 0x00ce, 0x9086, 0x0006, 0x1528, 0x61c8, 0x60c4, 0x9105,
- 0x1508, 0x2009, 0x180c, 0x2104, 0xd0d4, 0x01e0, 0x6214, 0x9294,
- 0x1800, 0x1128, 0x6224, 0x9294, 0x0002, 0x1518, 0x0030, 0xc0d4,
- 0x200a, 0xd0cc, 0x0110, 0x080c, 0x2aa7, 0x6014, 0x9084, 0xe7fd,
- 0x9085, 0x0010, 0x6016, 0x703c, 0x2060, 0x2009, 0x0049, 0x080c,
- 0x9f88, 0x0078, 0x080c, 0xd36d, 0x0036, 0x2019, 0x0001, 0x080c,
- 0x9964, 0x003e, 0x703c, 0x9065, 0x0120, 0x2009, 0x004a, 0x080c,
- 0x9f88, 0x002e, 0x001e, 0x00ee, 0x00de, 0x00ce, 0x009e, 0x0005,
- 0xd1ec, 0x1904, 0x96d1, 0x0804, 0x96d3, 0x00d6, 0x00c6, 0x0096,
- 0x703c, 0x9065, 0x090c, 0x0dc4, 0x2001, 0x0306, 0x200c, 0x9184,
- 0x0030, 0x0904, 0x97e9, 0x9184, 0x0048, 0x9086, 0x0008, 0x1904,
- 0x97e9, 0x2009, 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106,
- 0x1904, 0x97e9, 0x2009, 0x022a, 0x2104, 0x2009, 0x022f, 0x210c,
- 0x9116, 0x9084, 0x03ff, 0x918c, 0x03ff, 0x9294, 0x0400, 0x0110,
- 0x9102, 0x0030, 0x2010, 0x2100, 0x9202, 0x2009, 0x0228, 0x9102,
- 0x9082, 0x0005, 0x0250, 0x2008, 0x2001, 0x013b, 0x2004, 0x8004,
- 0x8004, 0x8004, 0x9102, 0x1a04, 0x97e9, 0x2009, 0x1a5f, 0x2104,
- 0x8000, 0x0208, 0x200a, 0x2069, 0x0100, 0x6914, 0x918c, 0x1984,
- 0x918d, 0x0010, 0x6916, 0x69c8, 0x2011, 0x0020, 0x68c8, 0x9106,
- 0x1904, 0x97c2, 0x8211, 0x1dd0, 0x2001, 0x0306, 0x2003, 0x4800,
- 0x00c6, 0x2061, 0x0090, 0x602c, 0xd0b4, 0x1de8, 0x2001, 0x022e,
- 0x200c, 0x2001, 0x012c, 0x080c, 0x1a37, 0x602c, 0xd0b4, 0x1d98,
- 0x2001, 0x022e, 0x2004, 0x9106, 0x9084, 0x07ff, 0x1d60, 0x00ce,
- 0x2001, 0x009a, 0x2003, 0x0004, 0x2001, 0x1a44, 0x2003, 0x0000,
- 0x2001, 0x1a4d, 0x2003, 0x0000, 0x6a88, 0x698c, 0x2200, 0x9105,
- 0x1170, 0x0096, 0x6014, 0x2048, 0xa880, 0xc0dc, 0xa882, 0xa884,
- 0xc0fc, 0xa886, 0x009e, 0x2c10, 0x080c, 0x1aa2, 0x0040, 0x6014,
- 0x2048, 0xaa3a, 0xa936, 0x6ac4, 0x69c8, 0xa946, 0xaa4a, 0x0126,
- 0x00c6, 0x2091, 0x2400, 0x002e, 0x080c, 0x1b2e, 0x190c, 0x0dc4,
- 0x012e, 0x0090, 0x2009, 0x1a60, 0x2104, 0x8000, 0x0208, 0x200a,
- 0x69c8, 0x2011, 0x0020, 0x8211, 0x1df0, 0x68c8, 0x9106, 0x1dc0,
- 0x69c4, 0x68c8, 0x9105, 0x0160, 0x6824, 0xd08c, 0x0110, 0x6827,
- 0x0002, 0x7048, 0xc085, 0x704a, 0x0079, 0x7048, 0xc084, 0x704a,
- 0x2009, 0x07d0, 0x080c, 0x8425, 0x9006, 0x009e, 0x00ce, 0x00de,
- 0x0005, 0x9085, 0x0001, 0x0cc8, 0x0026, 0x00e6, 0x2071, 0x19c4,
- 0x7048, 0xd084, 0x01c0, 0x713c, 0x81ff, 0x01a8, 0x2071, 0x0100,
- 0x9188, 0x0008, 0x2114, 0x928e, 0x0006, 0x1138, 0x7014, 0x9084,
- 0x1984, 0x9085, 0x0012, 0x7016, 0x0030, 0x7014, 0x9084, 0x1984,
- 0x9085, 0x0016, 0x7016, 0x00ee, 0x002e, 0x0005, 0x00b6, 0x00e6,
- 0x00d6, 0x00c6, 0x0066, 0x0056, 0x0046, 0x0006, 0x0126, 0x2091,
- 0x8000, 0x6010, 0x2058, 0xbca0, 0x2071, 0x19c4, 0x7018, 0x2058,
- 0x8bff, 0x0190, 0xb8a0, 0x9406, 0x0118, 0xb854, 0x2058, 0x0cc0,
- 0x6014, 0x0096, 0x2048, 0xac70, 0xad74, 0xae7c, 0x009e, 0x080c,
- 0x6548, 0x0110, 0x9085, 0x0001, 0x012e, 0x000e, 0x004e, 0x005e,
- 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00be, 0x0005, 0x080c, 0x9171,
- 0x7003, 0x0f00, 0x7808, 0xd09c, 0x0128, 0xb810, 0x9084, 0x00ff,
- 0x700a, 0xb814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x95f7, 0x0156,
- 0x080c, 0x91bc, 0x7003, 0x0200, 0x2011, 0x1848, 0x63f0, 0x2312,
- 0x20a9, 0x0006, 0x2011, 0x1840, 0x2019, 0x1841, 0x9ef0, 0x0002,
- 0x2376, 0x8e70, 0x2276, 0x8e70, 0x9398, 0x0002, 0x9290, 0x0002,
- 0x1f04, 0x9860, 0x60c3, 0x001c, 0x015e, 0x0804, 0x95f7, 0x0016,
- 0x0026, 0x080c, 0x9198, 0x080c, 0x91aa, 0x9e80, 0x0004, 0x20e9,
- 0x0000, 0x20a0, 0x7814, 0x0096, 0x2048, 0xa800, 0x2048, 0xa860,
- 0x20e0, 0xa85c, 0x9080, 0x0022, 0x2098, 0x009e, 0x7808, 0x9088,
- 0x0002, 0x21a8, 0x9192, 0x0010, 0x1250, 0x4003, 0x9080, 0x0004,
- 0x8003, 0x60c2, 0x080c, 0x95f7, 0x002e, 0x001e, 0x0005, 0x20a9,
- 0x0010, 0x4003, 0x080c, 0x9cf6, 0x20a1, 0x0240, 0x22a8, 0x4003,
- 0x0c68, 0x080c, 0x9171, 0x7003, 0x6200, 0x7808, 0x700e, 0x60c3,
- 0x0008, 0x0804, 0x95f7, 0x0016, 0x0026, 0x080c, 0x9171, 0x20e9,
- 0x0000, 0x20a1, 0x024c, 0x7814, 0x0096, 0x2048, 0xa800, 0x2048,
- 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0024, 0x2098, 0x009e, 0x7808,
- 0x9088, 0x0002, 0x21a8, 0x4003, 0x8003, 0x60c2, 0x080c, 0x95f7,
- 0x002e, 0x001e, 0x0005, 0x00e6, 0x00c6, 0x0006, 0x0126, 0x2091,
- 0x8000, 0x2071, 0x19c4, 0x700c, 0x2060, 0x8cff, 0x0178, 0x080c,
- 0xbb56, 0x1110, 0x080c, 0xa717, 0x600c, 0x0006, 0x080c, 0xbc8f,
- 0x080c, 0x9f18, 0x080c, 0x9a08, 0x00ce, 0x0c78, 0x2c00, 0x700e,
- 0x700a, 0x012e, 0x000e, 0x00ce, 0x00ee, 0x0005, 0x0126, 0x0156,
- 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0016, 0x0006,
- 0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c, 0xe7ff, 0x2102,
- 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x19c4, 0x7024, 0x2060,
- 0x8cff, 0x01f8, 0x080c, 0x9623, 0x6ac0, 0x68c3, 0x0000, 0x080c,
- 0x8420, 0x00c6, 0x2061, 0x0100, 0x080c, 0x9d0f, 0x00ce, 0x20a9,
- 0x01f4, 0x0461, 0x2009, 0x0013, 0x080c, 0x9f88, 0x000e, 0x001e,
- 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e,
- 0x0005, 0x2001, 0x1800, 0x2004, 0x9096, 0x0001, 0x0d78, 0x9096,
- 0x0004, 0x0d60, 0x080c, 0x8420, 0x6814, 0x9084, 0x0001, 0x0110,
- 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000, 0x2011, 0x5d5f,
- 0x080c, 0x835e, 0x20a9, 0x01f4, 0x0009, 0x08c0, 0x6824, 0xd094,
- 0x0140, 0x6827, 0x0004, 0x7804, 0x9084, 0x4000, 0x190c, 0x2b75,
- 0x0090, 0xd084, 0x0118, 0x6827, 0x4001, 0x0010, 0x1f04, 0x9946,
- 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2b65,
- 0x9006, 0x080c, 0x2b65, 0x0005, 0x0126, 0x0156, 0x00f6, 0x00e6,
- 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0016, 0x0006, 0x2091, 0x8000,
- 0x2001, 0x180c, 0x200c, 0x918c, 0xdbff, 0x2102, 0x2069, 0x0100,
- 0x2079, 0x0140, 0x2071, 0x19c4, 0x703c, 0x2060, 0x8cff, 0x0904,
- 0x99cb, 0x9386, 0x0002, 0x1128, 0x6814, 0x9084, 0x0002, 0x0904,
- 0x99cb, 0x68af, 0x95f5, 0x6817, 0x0010, 0x2009, 0x00fa, 0x8109,
- 0x1df0, 0x69c6, 0x68cb, 0x0008, 0x080c, 0x842d, 0x080c, 0x1eda,
- 0x2001, 0x0032, 0x6920, 0xd1bc, 0x0130, 0x8001, 0x1dd8, 0x692c,
- 0x918d, 0x0008, 0x692e, 0x20a9, 0x03e8, 0x6824, 0xd094, 0x0140,
- 0x6827, 0x0004, 0x7804, 0x9084, 0x4000, 0x190c, 0x2b75, 0x0090,
- 0xd08c, 0x0118, 0x6827, 0x0002, 0x0010, 0x1f04, 0x99a5, 0x7804,
- 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2b65, 0x9006,
- 0x080c, 0x2b65, 0x6827, 0x4000, 0x6824, 0x83ff, 0x1120, 0x2009,
- 0x0049, 0x080c, 0x9f88, 0x000e, 0x001e, 0x002e, 0x006e, 0x00ce,
- 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x00d6, 0x0126,
- 0x2091, 0x8000, 0x2069, 0x19c4, 0x6a06, 0x012e, 0x00de, 0x0005,
- 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, 0x19c4, 0x6a32, 0x012e,
- 0x00de, 0x0005, 0x080c, 0x932c, 0x7047, 0x1000, 0x0098, 0x080c,
- 0x932c, 0x7047, 0x4000, 0x0070, 0x080c, 0x932c, 0x7047, 0x2000,
- 0x0048, 0x080c, 0x932c, 0x7047, 0x0400, 0x0020, 0x080c, 0x932c,
- 0x7047, 0x0200, 0x7824, 0x7032, 0x60c3, 0x0020, 0x0804, 0x95f7,
- 0x00e6, 0x2071, 0x19c4, 0x7020, 0x9005, 0x0110, 0x8001, 0x7022,
- 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066,
- 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19c4, 0x7614, 0x2660,
- 0x2678, 0x2039, 0x0001, 0x87ff, 0x0904, 0x9aab, 0x8cff, 0x0904,
- 0x9aab, 0x6020, 0x9086, 0x0006, 0x1904, 0x9aa6, 0x88ff, 0x0138,
- 0x2800, 0x9c06, 0x1904, 0x9aa6, 0x2039, 0x0000, 0x0050, 0x6010,
- 0x9b06, 0x1904, 0x9aa6, 0x85ff, 0x0120, 0x6024, 0x9106, 0x1904,
- 0x9aa6, 0x7024, 0x9c06, 0x15b0, 0x2069, 0x0100, 0x68c0, 0x9005,
- 0x1160, 0x6824, 0xd084, 0x0148, 0x6827, 0x0001, 0x080c, 0x8420,
- 0x080c, 0x9b30, 0x7027, 0x0000, 0x0428, 0x080c, 0x8420, 0x6820,
- 0xd0b4, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000,
- 0x080c, 0x9b30, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04,
- 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2b65, 0x9006,
- 0x080c, 0x2b65, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110, 0x6827,
- 0x0001, 0x003e, 0x7014, 0x9c36, 0x1110, 0x660c, 0x7616, 0x7010,
- 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7012, 0x0010,
- 0x7013, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e,
- 0x0008, 0x2678, 0x600f, 0x0000, 0x6014, 0x0096, 0x2048, 0x080c,
- 0xb953, 0x0110, 0x080c, 0xd101, 0x009e, 0x080c, 0x9f42, 0x080c,
- 0x9a08, 0x88ff, 0x1190, 0x00ce, 0x0804, 0x9a23, 0x2c78, 0x600c,
- 0x2060, 0x0804, 0x9a23, 0x9006, 0x012e, 0x000e, 0x006e, 0x007e,
- 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b, 0x0000, 0x00ce,
- 0x98c5, 0x0001, 0x0c88, 0x00f6, 0x00e6, 0x00d6, 0x0096, 0x00c6,
- 0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19c4,
- 0x7638, 0x2660, 0x2678, 0x8cff, 0x0904, 0x9b1f, 0x6020, 0x9086,
- 0x0006, 0x1904, 0x9b1a, 0x87ff, 0x0128, 0x2700, 0x9c06, 0x1904,
- 0x9b1a, 0x0040, 0x6010, 0x9b06, 0x15e8, 0x85ff, 0x0118, 0x6024,
- 0x9106, 0x15c0, 0x703c, 0x9c06, 0x1168, 0x0036, 0x2019, 0x0001,
- 0x080c, 0x9964, 0x7033, 0x0000, 0x9006, 0x703e, 0x7042, 0x7046,
- 0x704a, 0x003e, 0x7038, 0x9c36, 0x1110, 0x660c, 0x763a, 0x7034,
- 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7036, 0x0010,
- 0x7037, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e,
- 0x0008, 0x2678, 0x600f, 0x0000, 0x6014, 0x2048, 0x080c, 0xb953,
- 0x0110, 0x080c, 0xd101, 0x080c, 0x9f42, 0x87ff, 0x1198, 0x00ce,
- 0x0804, 0x9acb, 0x2c78, 0x600c, 0x2060, 0x0804, 0x9acb, 0x9006,
- 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x009e, 0x00de, 0x00ee,
- 0x00fe, 0x0005, 0x601b, 0x0000, 0x00ce, 0x97bd, 0x0001, 0x0c80,
- 0x00e6, 0x2071, 0x19c4, 0x2001, 0x1800, 0x2004, 0x9086, 0x0002,
- 0x1118, 0x7007, 0x0005, 0x0010, 0x7007, 0x0000, 0x00ee, 0x0005,
- 0x00f6, 0x00e6, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091,
- 0x8000, 0x2071, 0x19c4, 0x2c10, 0x7638, 0x2660, 0x2678, 0x8cff,
- 0x0540, 0x2200, 0x9c06, 0x1508, 0x7038, 0x9c36, 0x1110, 0x660c,
- 0x763a, 0x7034, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00,
- 0x7036, 0x0010, 0x7037, 0x0000, 0x660c, 0x2c00, 0x9f06, 0x0110,
- 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x6004, 0x9086, 0x0040,
- 0x090c, 0x8b2b, 0x9085, 0x0001, 0x0020, 0x2c78, 0x600c, 0x2060,
- 0x08b0, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x00ee, 0x00fe,
- 0x0005, 0x0096, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026,
- 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19c4, 0x760c, 0x2660,
- 0x2678, 0x8cff, 0x0904, 0x9c16, 0x6010, 0x00b6, 0x2058, 0xb8a0,
- 0x00be, 0x9206, 0x1904, 0x9c11, 0x7024, 0x9c06, 0x1520, 0x2069,
- 0x0100, 0x68c0, 0x9005, 0x0904, 0x9be8, 0x080c, 0x9623, 0x68c3,
- 0x0000, 0x080c, 0x9b30, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140,
- 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2b65,
- 0x9006, 0x080c, 0x2b65, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110,
- 0x6827, 0x0001, 0x003e, 0x700c, 0x9c36, 0x1110, 0x660c, 0x760e,
- 0x7008, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x700a,
- 0x0010, 0x700b, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110,
- 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0xbb45, 0x1180,
- 0x080c, 0x308f, 0x080c, 0xbb56, 0x1518, 0x080c, 0xa717, 0x0400,
- 0x080c, 0x9b30, 0x6824, 0xd084, 0x09b0, 0x6827, 0x0001, 0x0898,
- 0x080c, 0xbb56, 0x1118, 0x080c, 0xa717, 0x0090, 0x6014, 0x2048,
- 0x080c, 0xb953, 0x0168, 0x6020, 0x9086, 0x0003, 0x1508, 0xa86b,
- 0x0103, 0xab7e, 0xa87b, 0x0000, 0x080c, 0x6b11, 0x080c, 0xbb39,
- 0x080c, 0xbc8f, 0x080c, 0x9f42, 0x080c, 0x9a08, 0x00ce, 0x0804,
- 0x9b91, 0x2c78, 0x600c, 0x2060, 0x0804, 0x9b91, 0x012e, 0x000e,
- 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x009e, 0x0005,
- 0x6020, 0x9086, 0x0006, 0x1d20, 0x080c, 0xd101, 0x0c08, 0x00d6,
- 0x080c, 0x91bc, 0x7003, 0x0200, 0x7007, 0x0014, 0x60c3, 0x0014,
- 0x20e1, 0x0001, 0x2099, 0x1965, 0x20e9, 0x0000, 0x20a1, 0x0250,
- 0x20a9, 0x0004, 0x4003, 0x7023, 0x0004, 0x7027, 0x7878, 0x080c,
- 0x95f7, 0x00de, 0x0005, 0x080c, 0x91bc, 0x700b, 0x0800, 0x7814,
- 0x9084, 0xff00, 0x700e, 0x7814, 0x9084, 0x00ff, 0x7022, 0x782c,
- 0x7026, 0x7828, 0x9084, 0x00ff, 0x9085, 0x0200, 0x7002, 0x7828,
- 0x9084, 0xff00, 0x8007, 0x7006, 0x60c2, 0x0804, 0x95f7, 0x080c,
- 0x91bc, 0x7003, 0x0200, 0x7007, 0x0001, 0x700b, 0xc000, 0x6238,
+ 0x0804, 0x97d1, 0x9185, 0x0700, 0x6062, 0x6266, 0x636a, 0x646e,
+ 0x7824, 0xd0cc, 0x7826, 0x0118, 0x6073, 0x0889, 0x0010, 0x6073,
+ 0x0898, 0x6077, 0x0000, 0xb88c, 0x8000, 0x9084, 0x00ff, 0xb88e,
+ 0x8007, 0x607a, 0x607f, 0x0000, 0x2f00, 0x6086, 0x7808, 0x6082,
+ 0xa838, 0x608a, 0xa834, 0x608e, 0xa848, 0x60c6, 0xa844, 0x60ca,
+ 0xb86c, 0x60ce, 0x60af, 0x95d5, 0x60d7, 0x0000, 0xbab0, 0x629e,
+ 0x7824, 0xd0cc, 0x0120, 0x080c, 0xa175, 0x0804, 0x97ee, 0x080c,
+ 0xa152, 0x0804, 0x97ee, 0x7a10, 0x00b6, 0x2258, 0xba8c, 0x8210,
+ 0x9294, 0x00ff, 0xba8e, 0x00be, 0x8217, 0x0005, 0x00d6, 0x2069,
+ 0x19c4, 0x6843, 0x0001, 0x00de, 0x0005, 0x60a3, 0x0056, 0x60a7,
+ 0x9575, 0x00f1, 0x080c, 0x8583, 0x0005, 0x0016, 0x2001, 0x180c,
+ 0x200c, 0x9184, 0x0600, 0x9086, 0x0600, 0x0128, 0x0089, 0x080c,
+ 0x8583, 0x001e, 0x0005, 0xc1e5, 0x2001, 0x180c, 0x2102, 0x2001,
+ 0x19c5, 0x2003, 0x0000, 0x2001, 0x19cd, 0x2003, 0x0000, 0x0c88,
+ 0x0006, 0x6014, 0x9084, 0x1804, 0x9085, 0x0009, 0x6016, 0x000e,
+ 0x0005, 0x0016, 0x00c6, 0x0006, 0x2061, 0x0100, 0x61a4, 0x60a7,
+ 0x95f5, 0x6014, 0x9084, 0x1804, 0x9085, 0x0008, 0x6016, 0x000e,
+ 0xa001, 0xa001, 0xa001, 0x61a6, 0x00ce, 0x001e, 0x0005, 0x00c6,
+ 0x00d6, 0x0016, 0x0026, 0x2061, 0x0100, 0x2069, 0x0140, 0x080c,
+ 0x7351, 0x11c0, 0x2001, 0x19e0, 0x2004, 0x9005, 0x15d0, 0x080c,
+ 0x73fe, 0x1160, 0x2061, 0x0100, 0x6020, 0xd0b4, 0x1120, 0x6024,
+ 0xd084, 0x090c, 0x0dc3, 0x080c, 0x8583, 0x0458, 0x00c6, 0x2061,
+ 0x19c4, 0x00c8, 0x6904, 0x9194, 0x4000, 0x0540, 0x0811, 0x080c,
+ 0x2bde, 0x00c6, 0x2061, 0x19c4, 0x6128, 0x9192, 0x0008, 0x1258,
+ 0x8108, 0x612a, 0x6124, 0x00ce, 0x81ff, 0x0198, 0x080c, 0x8583,
+ 0x080c, 0x98c8, 0x0070, 0x6124, 0x91e5, 0x0000, 0x0140, 0x080c,
+ 0xe0fa, 0x080c, 0x858c, 0x2009, 0x0014, 0x080c, 0xa419, 0x00ce,
+ 0x0000, 0x002e, 0x001e, 0x00de, 0x00ce, 0x0005, 0x2001, 0x19e0,
+ 0x2004, 0x9005, 0x1db0, 0x00c6, 0x2061, 0x19c4, 0x6128, 0x9192,
+ 0x0003, 0x1e08, 0x8108, 0x612a, 0x00ce, 0x080c, 0x8583, 0x080c,
+ 0x5e72, 0x2009, 0x185a, 0x2114, 0x8210, 0x220a, 0x0c10, 0x0096,
+ 0x00c6, 0x00d6, 0x00e6, 0x0016, 0x0026, 0x080c, 0x8599, 0x2071,
+ 0x19c4, 0x713c, 0x81ff, 0x0904, 0x99bf, 0x2061, 0x0100, 0x2069,
+ 0x0140, 0x080c, 0x7351, 0x1198, 0x0036, 0x2019, 0x0002, 0x080c,
+ 0x9c35, 0x003e, 0x080c, 0xe0fa, 0x703c, 0x9065, 0x0120, 0x2009,
+ 0x004a, 0x080c, 0xa419, 0x080c, 0x73fe, 0x0804, 0x99bf, 0x080c,
+ 0x99cb, 0x0904, 0x99bf, 0x6904, 0xd1f4, 0x0904, 0x99c6, 0x080c,
+ 0x2bde, 0x00c6, 0x703c, 0x9065, 0x090c, 0x0dc3, 0x6020, 0x00ce,
+ 0x9086, 0x0006, 0x1528, 0x61c8, 0x60c4, 0x9105, 0x1508, 0x2009,
+ 0x180c, 0x2104, 0xd0d4, 0x01e0, 0x6214, 0x9294, 0x1800, 0x1128,
+ 0x6224, 0x9294, 0x0002, 0x1518, 0x0030, 0xc0d4, 0x200a, 0xd0cc,
+ 0x0110, 0x080c, 0x2b10, 0x6014, 0x9084, 0xe7fd, 0x9085, 0x0010,
+ 0x6016, 0x703c, 0x2060, 0x2009, 0x0049, 0x080c, 0xa419, 0x0078,
+ 0x080c, 0xe0fa, 0x0036, 0x2019, 0x0001, 0x080c, 0x9c35, 0x003e,
+ 0x703c, 0x9065, 0x0120, 0x2009, 0x004a, 0x080c, 0xa419, 0x002e,
+ 0x001e, 0x00ee, 0x00de, 0x00ce, 0x009e, 0x0005, 0xd1ec, 0x1904,
+ 0x997f, 0x0804, 0x9981, 0x00d6, 0x00c6, 0x0096, 0x703c, 0x9065,
+ 0x090c, 0x0dc3, 0x2001, 0x0306, 0x200c, 0x9184, 0x0030, 0x0904,
+ 0x9a97, 0x9184, 0x0048, 0x9086, 0x0008, 0x1904, 0x9a97, 0x2009,
+ 0x0206, 0x2104, 0x2009, 0x0203, 0x210c, 0x9106, 0x1904, 0x9a97,
+ 0x2009, 0x022a, 0x2104, 0x2009, 0x022f, 0x210c, 0x9116, 0x9084,
+ 0x03ff, 0x918c, 0x03ff, 0x9294, 0x0400, 0x0110, 0x9102, 0x0030,
+ 0x2010, 0x2100, 0x9202, 0x2009, 0x0228, 0x9102, 0x9082, 0x0005,
+ 0x0250, 0x2008, 0x2001, 0x013b, 0x2004, 0x8004, 0x8004, 0x8004,
+ 0x9102, 0x1a04, 0x9a97, 0x2009, 0x1a5f, 0x2104, 0x8000, 0x0208,
+ 0x200a, 0x2069, 0x0100, 0x6914, 0x918c, 0x1984, 0x918d, 0x0010,
+ 0x6916, 0x69c8, 0x2011, 0x0020, 0x68c8, 0x9106, 0x1904, 0x9a70,
+ 0x8211, 0x1dd0, 0x2001, 0x0306, 0x2003, 0x4800, 0x00c6, 0x2061,
+ 0x0090, 0x602c, 0xd0b4, 0x1de8, 0x2001, 0x022e, 0x200c, 0x2001,
+ 0x012c, 0x080c, 0x1a7f, 0x602c, 0xd0b4, 0x1d98, 0x2001, 0x022e,
+ 0x2004, 0x9106, 0x9084, 0x07ff, 0x1d60, 0x00ce, 0x2001, 0x009a,
+ 0x2003, 0x0004, 0x2001, 0x1a44, 0x2003, 0x0000, 0x2001, 0x1a4d,
+ 0x2003, 0x0000, 0x6a88, 0x698c, 0x2200, 0x9105, 0x1170, 0x0096,
+ 0x6014, 0x2048, 0xa880, 0xc0dc, 0xa882, 0xa884, 0xc0fc, 0xa886,
+ 0x009e, 0x2c10, 0x080c, 0x1aea, 0x0040, 0x6014, 0x2048, 0xaa3a,
+ 0xa936, 0x6ac4, 0x69c8, 0xa946, 0xaa4a, 0x0126, 0x00c6, 0x2091,
+ 0x2400, 0x002e, 0x080c, 0x1b76, 0x190c, 0x0dc3, 0x012e, 0x0090,
+ 0x2009, 0x1a60, 0x2104, 0x8000, 0x0208, 0x200a, 0x69c8, 0x2011,
+ 0x0020, 0x8211, 0x1df0, 0x68c8, 0x9106, 0x1dc0, 0x69c4, 0x68c8,
+ 0x9105, 0x0160, 0x6824, 0xd08c, 0x0110, 0x6827, 0x0002, 0x7048,
+ 0xc085, 0x704a, 0x0079, 0x7048, 0xc084, 0x704a, 0x2009, 0x07d0,
+ 0x080c, 0x8591, 0x9006, 0x009e, 0x00ce, 0x00de, 0x0005, 0x9085,
+ 0x0001, 0x0cc8, 0x0026, 0x00e6, 0x2071, 0x19c4, 0x7048, 0xd084,
+ 0x01c0, 0x713c, 0x81ff, 0x01a8, 0x2071, 0x0100, 0x9188, 0x0008,
+ 0x2114, 0x928e, 0x0006, 0x1138, 0x7014, 0x9084, 0x1984, 0x9085,
+ 0x0012, 0x7016, 0x0030, 0x7014, 0x9084, 0x1984, 0x9085, 0x0016,
+ 0x7016, 0x00ee, 0x002e, 0x0005, 0x00b6, 0x00e6, 0x00d6, 0x00c6,
+ 0x0066, 0x0056, 0x0046, 0x0006, 0x0126, 0x2091, 0x8000, 0x6010,
+ 0x2058, 0xbca0, 0x2071, 0x19c4, 0x7018, 0x2058, 0x8bff, 0x0190,
+ 0xb8a0, 0x9406, 0x0118, 0xb854, 0x2058, 0x0cc0, 0x6014, 0x0096,
+ 0x2048, 0xac70, 0xad74, 0xae7c, 0x009e, 0x080c, 0x6650, 0x0110,
+ 0x9085, 0x0001, 0x012e, 0x000e, 0x004e, 0x005e, 0x006e, 0x00ce,
+ 0x00de, 0x00ee, 0x00be, 0x0005, 0x080c, 0x939e, 0x7003, 0x1200,
+ 0x7838, 0x7012, 0x783c, 0x7016, 0x00c6, 0x7820, 0x9086, 0x0004,
+ 0x1148, 0x7810, 0x9005, 0x0130, 0x00b6, 0x2058, 0xb810, 0xb914,
+ 0x00be, 0x0020, 0x2061, 0x1800, 0x6078, 0x617c, 0x9084, 0x00ff,
+ 0x700a, 0x710e, 0x00ce, 0x60c3, 0x002c, 0x0804, 0x98a5, 0x080c,
+ 0x939e, 0x7003, 0x0f00, 0x7808, 0xd09c, 0x0128, 0xb810, 0x9084,
+ 0x00ff, 0x700a, 0xb814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x98a5,
+ 0x0156, 0x080c, 0x93e9, 0x7003, 0x0200, 0x2011, 0x1848, 0x63f0,
+ 0x2312, 0x20a9, 0x0006, 0x2011, 0x1840, 0x2019, 0x1841, 0x9ef0,
+ 0x0002, 0x2376, 0x8e70, 0x2276, 0x8e70, 0x9398, 0x0002, 0x9290,
+ 0x0002, 0x1f04, 0x9b31, 0x60c3, 0x001c, 0x015e, 0x0804, 0x98a5,
+ 0x0016, 0x0026, 0x080c, 0x93c5, 0x080c, 0x93d7, 0x9e80, 0x0004,
+ 0x20e9, 0x0000, 0x20a0, 0x7814, 0x0096, 0x2048, 0xa800, 0x2048,
+ 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0022, 0x2098, 0x009e, 0x7808,
+ 0x9088, 0x0002, 0x21a8, 0x9192, 0x0010, 0x1250, 0x4003, 0x9080,
+ 0x0004, 0x8003, 0x60c2, 0x080c, 0x98a5, 0x002e, 0x001e, 0x0005,
+ 0x20a9, 0x0010, 0x4003, 0x080c, 0xa17b, 0x20a1, 0x0240, 0x22a8,
+ 0x4003, 0x0c68, 0x080c, 0x939e, 0x7003, 0x6200, 0x7808, 0x700e,
+ 0x60c3, 0x0008, 0x0804, 0x98a5, 0x0016, 0x0026, 0x080c, 0x939e,
+ 0x20e9, 0x0000, 0x20a1, 0x024c, 0x7814, 0x0096, 0x2048, 0xa800,
+ 0x2048, 0xa860, 0x20e0, 0xa85c, 0x9080, 0x0024, 0x2098, 0x009e,
+ 0x7808, 0x9088, 0x0002, 0x21a8, 0x4003, 0x8003, 0x60c2, 0x080c,
+ 0x98a5, 0x002e, 0x001e, 0x0005, 0x00e6, 0x00c6, 0x0006, 0x0126,
+ 0x2091, 0x8000, 0x2071, 0x19c4, 0x700c, 0x2060, 0x8cff, 0x0178,
+ 0x080c, 0xc3d1, 0x1110, 0x080c, 0xadb3, 0x600c, 0x0006, 0x080c,
+ 0xc638, 0x080c, 0xa39d, 0x080c, 0x9cd9, 0x00ce, 0x0c78, 0x2c00,
+ 0x700e, 0x700a, 0x012e, 0x000e, 0x00ce, 0x00ee, 0x0005, 0x0126,
+ 0x0156, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0016,
+ 0x0006, 0x2091, 0x8000, 0x2001, 0x180c, 0x200c, 0x918c, 0xe7ff,
+ 0x2102, 0x2069, 0x0100, 0x2079, 0x0140, 0x2071, 0x19c4, 0x7024,
+ 0x2060, 0x8cff, 0x01f8, 0x080c, 0x98d1, 0x6ac0, 0x68c3, 0x0000,
+ 0x080c, 0x858c, 0x00c6, 0x2061, 0x0100, 0x080c, 0xa194, 0x00ce,
+ 0x20a9, 0x01f4, 0x0461, 0x2009, 0x0013, 0x080c, 0xa419, 0x000e,
+ 0x001e, 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e,
+ 0x012e, 0x0005, 0x2001, 0x1800, 0x2004, 0x9096, 0x0001, 0x0d78,
+ 0x9096, 0x0004, 0x0d60, 0x080c, 0x858c, 0x6814, 0x9084, 0x0001,
+ 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3, 0x0000, 0x2011,
+ 0x5e1c, 0x080c, 0x84c2, 0x20a9, 0x01f4, 0x0009, 0x08c0, 0x6824,
+ 0xd094, 0x0140, 0x6827, 0x0004, 0x7804, 0x9084, 0x4000, 0x190c,
+ 0x2bde, 0x0090, 0xd084, 0x0118, 0x6827, 0x4001, 0x0010, 0x1f04,
+ 0x9c17, 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c,
+ 0x2bce, 0x9006, 0x080c, 0x2bce, 0x0005, 0x0126, 0x0156, 0x00f6,
+ 0x00e6, 0x00d6, 0x00c6, 0x0066, 0x0026, 0x0016, 0x0006, 0x2091,
+ 0x8000, 0x2001, 0x180c, 0x200c, 0x918c, 0xdbff, 0x2102, 0x2069,
+ 0x0100, 0x2079, 0x0140, 0x2071, 0x19c4, 0x703c, 0x2060, 0x8cff,
+ 0x0904, 0x9c9c, 0x9386, 0x0002, 0x1128, 0x6814, 0x9084, 0x0002,
+ 0x0904, 0x9c9c, 0x68af, 0x95f5, 0x6817, 0x0010, 0x2009, 0x00fa,
+ 0x8109, 0x1df0, 0x69c6, 0x68cb, 0x0008, 0x080c, 0x8599, 0x080c,
+ 0x1f22, 0x2001, 0x0032, 0x6920, 0xd1bc, 0x0130, 0x8001, 0x1dd8,
+ 0x692c, 0x918d, 0x0008, 0x692e, 0x20a9, 0x03e8, 0x6824, 0xd094,
+ 0x0140, 0x6827, 0x0004, 0x7804, 0x9084, 0x4000, 0x190c, 0x2bde,
+ 0x0090, 0xd08c, 0x0118, 0x6827, 0x0002, 0x0010, 0x1f04, 0x9c76,
+ 0x7804, 0x9084, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2bce,
+ 0x9006, 0x080c, 0x2bce, 0x6827, 0x4000, 0x6824, 0x83ff, 0x1120,
+ 0x2009, 0x0049, 0x080c, 0xa419, 0x000e, 0x001e, 0x002e, 0x006e,
+ 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x015e, 0x012e, 0x0005, 0x00d6,
+ 0x0126, 0x2091, 0x8000, 0x2069, 0x19c4, 0x6a06, 0x012e, 0x00de,
+ 0x0005, 0x00d6, 0x0126, 0x2091, 0x8000, 0x2069, 0x19c4, 0x6a32,
+ 0x012e, 0x00de, 0x0005, 0x080c, 0x9561, 0x7047, 0x1000, 0x0098,
+ 0x080c, 0x9561, 0x7047, 0x4000, 0x0070, 0x080c, 0x9561, 0x7047,
+ 0x2000, 0x0048, 0x080c, 0x9561, 0x7047, 0x0400, 0x0020, 0x080c,
+ 0x9561, 0x7047, 0x0200, 0x7854, 0x7032, 0x60c3, 0x0020, 0x0804,
+ 0x98a5, 0x00e6, 0x2071, 0x19c4, 0x7020, 0x9005, 0x0110, 0x8001,
+ 0x7022, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x0076,
+ 0x0066, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19c4, 0x7614,
+ 0x2660, 0x2678, 0x2039, 0x0001, 0x87ff, 0x0904, 0x9d7e, 0x8cff,
+ 0x0904, 0x9d7e, 0x6020, 0x9086, 0x0006, 0x1904, 0x9d79, 0x88ff,
+ 0x0138, 0x2800, 0x9c06, 0x1904, 0x9d79, 0x2039, 0x0000, 0x0050,
+ 0x6010, 0x9b06, 0x1904, 0x9d79, 0x85ff, 0x0120, 0x6054, 0x9106,
+ 0x1904, 0x9d79, 0x7024, 0x9c06, 0x15b0, 0x2069, 0x0100, 0x68c0,
+ 0x9005, 0x1160, 0x6824, 0xd084, 0x0148, 0x6827, 0x0001, 0x080c,
+ 0x858c, 0x080c, 0x9e03, 0x7027, 0x0000, 0x0428, 0x080c, 0x858c,
+ 0x6820, 0xd0b4, 0x0110, 0x68a7, 0x95f5, 0x6817, 0x0008, 0x68c3,
+ 0x0000, 0x080c, 0x9e03, 0x7027, 0x0000, 0x0036, 0x2069, 0x0140,
+ 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c, 0x2bce,
+ 0x9006, 0x080c, 0x2bce, 0x2069, 0x0100, 0x6824, 0xd084, 0x0110,
+ 0x6827, 0x0001, 0x003e, 0x7014, 0x9c36, 0x1110, 0x660c, 0x7616,
+ 0x7010, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00, 0x7012,
+ 0x0010, 0x7013, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06, 0x0110,
+ 0x7e0e, 0x0008, 0x2678, 0x89ff, 0x1168, 0x600f, 0x0000, 0x6014,
+ 0x0096, 0x2048, 0x080c, 0xc1cb, 0x0110, 0x080c, 0xdcc3, 0x009e,
+ 0x080c, 0xa3cf, 0x080c, 0x9cd9, 0x88ff, 0x1190, 0x00ce, 0x0804,
+ 0x9cf4, 0x2c78, 0x600c, 0x2060, 0x0804, 0x9cf4, 0x9006, 0x012e,
+ 0x000e, 0x006e, 0x007e, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005,
+ 0x601b, 0x0000, 0x00ce, 0x98c5, 0x0001, 0x0c88, 0x00f6, 0x00e6,
+ 0x00d6, 0x0096, 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091,
+ 0x8000, 0x2071, 0x19c4, 0x7638, 0x2660, 0x2678, 0x8cff, 0x0904,
+ 0x9df2, 0x6020, 0x9086, 0x0006, 0x1904, 0x9ded, 0x87ff, 0x0128,
+ 0x2700, 0x9c06, 0x1904, 0x9ded, 0x0040, 0x6010, 0x9b06, 0x15e8,
+ 0x85ff, 0x0118, 0x6054, 0x9106, 0x15c0, 0x703c, 0x9c06, 0x1168,
+ 0x0036, 0x2019, 0x0001, 0x080c, 0x9c35, 0x7033, 0x0000, 0x9006,
+ 0x703e, 0x7042, 0x7046, 0x704a, 0x003e, 0x7038, 0x9c36, 0x1110,
+ 0x660c, 0x763a, 0x7034, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118,
+ 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000, 0x660c, 0x0066, 0x2c00,
+ 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x6014,
+ 0x2048, 0x080c, 0xc1cb, 0x0110, 0x080c, 0xdcc3, 0x080c, 0xa3cf,
+ 0x87ff, 0x1198, 0x00ce, 0x0804, 0x9d9e, 0x2c78, 0x600c, 0x2060,
+ 0x0804, 0x9d9e, 0x9006, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce,
+ 0x009e, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x601b, 0x0000, 0x00ce,
+ 0x97bd, 0x0001, 0x0c80, 0x00e6, 0x2071, 0x19c4, 0x2001, 0x1800,
+ 0x2004, 0x9086, 0x0002, 0x1118, 0x7007, 0x0005, 0x0010, 0x7007,
+ 0x0000, 0x00ee, 0x0005, 0x00f6, 0x00e6, 0x00c6, 0x0066, 0x0026,
+ 0x0006, 0x0126, 0x2091, 0x8000, 0x2071, 0x19c4, 0x2c10, 0x7638,
+ 0x2660, 0x2678, 0x8cff, 0x0540, 0x2200, 0x9c06, 0x1508, 0x7038,
+ 0x9c36, 0x1110, 0x660c, 0x763a, 0x7034, 0x9c36, 0x1140, 0x2c00,
+ 0x9f36, 0x0118, 0x2f00, 0x7036, 0x0010, 0x7037, 0x0000, 0x660c,
+ 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000,
+ 0x6004, 0x9086, 0x0040, 0x090c, 0x8d2c, 0x9085, 0x0001, 0x0020,
+ 0x2c78, 0x600c, 0x2060, 0x08b0, 0x012e, 0x000e, 0x002e, 0x006e,
+ 0x00ce, 0x00ee, 0x00fe, 0x0005, 0x0096, 0x00f6, 0x00e6, 0x00d6,
+ 0x00c6, 0x0066, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2071,
+ 0x19c4, 0x760c, 0x2660, 0x2678, 0x8cff, 0x0904, 0x9ee9, 0x6010,
+ 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x9206, 0x1904, 0x9ee4, 0x7024,
+ 0x9c06, 0x1520, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0x9ebb,
+ 0x080c, 0x98d1, 0x68c3, 0x0000, 0x080c, 0x9e03, 0x7027, 0x0000,
+ 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001,
+ 0x0100, 0x080c, 0x2bce, 0x9006, 0x080c, 0x2bce, 0x2069, 0x0100,
+ 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x700c, 0x9c36,
+ 0x1110, 0x660c, 0x760e, 0x7008, 0x9c36, 0x1140, 0x2c00, 0x9f36,
+ 0x0118, 0x2f00, 0x700a, 0x0010, 0x700b, 0x0000, 0x660c, 0x0066,
+ 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000,
+ 0x080c, 0xc3c0, 0x1180, 0x080c, 0x312b, 0x080c, 0xc3d1, 0x1518,
+ 0x080c, 0xadb3, 0x0400, 0x080c, 0x9e03, 0x6824, 0xd084, 0x09b0,
+ 0x6827, 0x0001, 0x0898, 0x080c, 0xc3d1, 0x1118, 0x080c, 0xadb3,
+ 0x0090, 0x6014, 0x2048, 0x080c, 0xc1cb, 0x0168, 0x6020, 0x9086,
+ 0x0003, 0x1508, 0xa86b, 0x0103, 0xab7e, 0xa87b, 0x0000, 0x080c,
+ 0x6bf5, 0x080c, 0xc3b4, 0x080c, 0xc638, 0x080c, 0xa3cf, 0x080c,
+ 0x9cd9, 0x00ce, 0x0804, 0x9e64, 0x2c78, 0x600c, 0x2060, 0x0804,
+ 0x9e64, 0x012e, 0x000e, 0x002e, 0x006e, 0x00ce, 0x00de, 0x00ee,
+ 0x00fe, 0x009e, 0x0005, 0x6020, 0x9086, 0x0006, 0x1d20, 0x080c,
+ 0xdcc3, 0x0c08, 0x00d6, 0x080c, 0x93e9, 0x7003, 0x0200, 0x7007,
+ 0x0014, 0x60c3, 0x0014, 0x20e1, 0x0001, 0x2099, 0x1965, 0x20e9,
+ 0x0000, 0x20a1, 0x0250, 0x20a9, 0x0004, 0x4003, 0x7023, 0x0004,
+ 0x7027, 0x7878, 0x080c, 0x98a5, 0x00de, 0x0005, 0x080c, 0x93e9,
+ 0x700b, 0x0800, 0x7814, 0x9084, 0xff00, 0x700e, 0x7814, 0x9084,
+ 0x00ff, 0x7022, 0x782c, 0x7026, 0x7858, 0x9084, 0x00ff, 0x9085,
+ 0x0200, 0x7002, 0x7858, 0x9084, 0xff00, 0x8007, 0x7006, 0x60c2,
+ 0x0804, 0x98a5, 0x00b6, 0x00d6, 0x0016, 0x00d6, 0x2f68, 0x2009,
+ 0x0035, 0x080c, 0xc83f, 0x00de, 0x1904, 0x9f97, 0x080c, 0x939e,
+ 0x7003, 0x1300, 0x782c, 0x080c, 0xa09d, 0x2068, 0x6820, 0x9086,
+ 0x0003, 0x0560, 0x7810, 0x2058, 0xbaa0, 0x080c, 0xa307, 0x11d8,
+ 0x9286, 0x007e, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffe, 0x0498,
+ 0x9286, 0x007f, 0x1128, 0x700b, 0x00ff, 0x700f, 0xfffd, 0x0458,
+ 0x9284, 0xff80, 0x0180, 0x9286, 0x0080, 0x1128, 0x700b, 0x00ff,
+ 0x700f, 0xfffc, 0x0400, 0x92d8, 0x1000, 0x2b5c, 0xb810, 0x700a,
+ 0xb814, 0x700e, 0x00c0, 0x6098, 0x700e, 0x00a8, 0x080c, 0xa307,
+ 0x1130, 0x7810, 0x2058, 0xb8a0, 0x9082, 0x007e, 0x0250, 0x00d6,
+ 0x2069, 0x181e, 0x2d04, 0x700a, 0x8d68, 0x2d04, 0x700e, 0x00de,
+ 0x0010, 0x6034, 0x700e, 0x7838, 0x7012, 0x783c, 0x7016, 0x60c3,
+ 0x000c, 0x001e, 0x00de, 0x080c, 0x98a5, 0x00be, 0x0005, 0x781b,
+ 0x0001, 0x7803, 0x0006, 0x001e, 0x00de, 0x00be, 0x0005, 0x792c,
+ 0x9180, 0x0008, 0x200c, 0x9186, 0x0006, 0x01c0, 0x9186, 0x0003,
+ 0x0904, 0xa012, 0x9186, 0x0005, 0x0904, 0x9ffa, 0x9186, 0x0004,
+ 0x05d8, 0x9186, 0x0008, 0x0904, 0xa003, 0x7807, 0x0037, 0x782f,
+ 0x0003, 0x7817, 0x1700, 0x080c, 0xa07a, 0x0005, 0x080c, 0xa03b,
+ 0x00d6, 0x0026, 0x792c, 0x2168, 0x2009, 0x4000, 0x6800, 0x0002,
+ 0x9fdb, 0x9fe6, 0x9fdd, 0x9fe6, 0x9fe2, 0x9fdb, 0x9fdb, 0x9fe6,
+ 0x9fe6, 0x9fe6, 0x9fe6, 0x9fdb, 0x9fdb, 0x9fdb, 0x9fdb, 0x9fdb,
+ 0x9fe6, 0x9fdb, 0x9fe6, 0x080c, 0x0dc3, 0x6824, 0xd0e4, 0x0110,
+ 0xd0cc, 0x0110, 0x900e, 0x0010, 0x2009, 0x2000, 0x682c, 0x7022,
+ 0x6830, 0x7026, 0x0804, 0xa034, 0x080c, 0xa03b, 0x00d6, 0x0026,
+ 0x792c, 0x2168, 0x2009, 0x4000, 0x6a00, 0x9286, 0x0002, 0x1108,
+ 0x900e, 0x04d0, 0x080c, 0xa03b, 0x00d6, 0x0026, 0x792c, 0x2168,
+ 0x2009, 0x4000, 0x0488, 0x04b9, 0x00d6, 0x0026, 0x792c, 0x2168,
+ 0x2009, 0x4000, 0x9286, 0x0005, 0x0118, 0x9286, 0x0002, 0x1108,
+ 0x900e, 0x0410, 0x0441, 0x00d6, 0x0026, 0x792c, 0x2168, 0x6814,
+ 0x6924, 0xc185, 0x6926, 0x0096, 0x2048, 0xa9b0, 0xa834, 0x9112,
+ 0xa9b4, 0xa838, 0x009e, 0x9103, 0x7022, 0x7226, 0x792c, 0x9180,
+ 0x0000, 0x2004, 0x908e, 0x0002, 0x0130, 0x908e, 0x0004, 0x0118,
+ 0x2009, 0x4000, 0x0008, 0x900e, 0x712a, 0x60c3, 0x0018, 0x002e,
+ 0x00de, 0x0804, 0x98a5, 0x00b6, 0x0036, 0x0046, 0x0056, 0x0066,
+ 0x080c, 0x93e9, 0x9006, 0x7003, 0x0200, 0x7938, 0x710a, 0x793c,
+ 0x710e, 0x7810, 0x2058, 0xb8a0, 0x080c, 0xa307, 0x1118, 0x9092,
+ 0x007e, 0x0268, 0x00d6, 0x2069, 0x181e, 0x2d2c, 0x8d68, 0x2d34,
+ 0x90d8, 0x1000, 0x2b5c, 0xbb10, 0xbc14, 0x00de, 0x0028, 0x901e,
+ 0x6498, 0x2029, 0x0000, 0x6634, 0x782c, 0x9080, 0x0008, 0x2004,
+ 0x9086, 0x0003, 0x1128, 0x7512, 0x7616, 0x731a, 0x741e, 0x0020,
+ 0x7312, 0x7416, 0x751a, 0x761e, 0x006e, 0x005e, 0x004e, 0x003e,
+ 0x00be, 0x0005, 0x080c, 0x93e9, 0x7003, 0x0100, 0x782c, 0x700a,
+ 0x7814, 0x700e, 0x700e, 0x60c3, 0x0008, 0x0804, 0x98a5, 0x080c,
+ 0x9395, 0x7003, 0x1400, 0x7838, 0x700a, 0x0079, 0x783c, 0x700e,
+ 0x782c, 0x7012, 0x7830, 0x7016, 0x7834, 0x9084, 0x00ff, 0x8007,
+ 0x701a, 0x60c3, 0x0010, 0x0804, 0x98a5, 0x00e6, 0x2071, 0x0240,
+ 0x0006, 0x00f6, 0x2078, 0x7810, 0x00b6, 0x2058, 0xb8bc, 0xd084,
+ 0x0120, 0x7844, 0x702a, 0x7848, 0x702e, 0x00be, 0x00fe, 0x000e,
+ 0x00ee, 0x0005, 0x080c, 0x93e0, 0x7003, 0x0100, 0x782c, 0x700a,
+ 0x7814, 0x700e, 0x60c3, 0x0008, 0x0804, 0x98a5, 0x0021, 0x60c3,
+ 0x0000, 0x0804, 0x98a5, 0x00d6, 0x080c, 0xa190, 0xb810, 0x9085,
+ 0x0300, 0x7002, 0xb814, 0x7006, 0x2069, 0x1800, 0x6878, 0x700a,
+ 0x687c, 0x700e, 0x7013, 0x0819, 0x080c, 0x9893, 0x721a, 0x2f10,
+ 0x7222, 0x7a08, 0x7226, 0x2071, 0x024c, 0x00de, 0x0005, 0x080c,
+ 0x93e9, 0x7003, 0x0200, 0x7007, 0x0001, 0x700b, 0xc000, 0x6238,
0x9286, 0x0004, 0x2001, 0x8000, 0x0138, 0x9286, 0x0007, 0x2001,
0x4000, 0x0110, 0x2001, 0x0002, 0x700e, 0x60c3, 0x0008, 0x0804,
- 0x95f7, 0x00a9, 0x7914, 0x712a, 0x60c3, 0x0000, 0x60a7, 0x9575,
- 0x0026, 0x080c, 0x29fa, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5,
- 0x2012, 0x002e, 0x080c, 0x961a, 0x080c, 0x8417, 0x0005, 0x0036,
- 0x0096, 0x00d6, 0x00e6, 0x7828, 0x2048, 0xaa80, 0x9296, 0x00c0,
+ 0x98a5, 0x00a9, 0x7914, 0x712a, 0x60c3, 0x0000, 0x60a7, 0x9575,
+ 0x0026, 0x080c, 0x2a63, 0x0228, 0x2011, 0x0101, 0x2204, 0xc0c5,
+ 0x2012, 0x002e, 0x080c, 0x98c8, 0x080c, 0x8583, 0x0005, 0x0036,
+ 0x0096, 0x00d6, 0x00e6, 0x7858, 0x2048, 0xaa80, 0x9296, 0x00c0,
0x9294, 0x00fd, 0xaa82, 0xaa84, 0x9294, 0x0300, 0xaa86, 0xa970,
0x9194, 0x00ff, 0xab78, 0x9384, 0x00ff, 0x908d, 0xc200, 0xa972,
0x9384, 0xff00, 0x9215, 0xaa7a, 0xa874, 0xaa7c, 0xa87e, 0xaa76,
- 0x00d6, 0x2069, 0x0200, 0x080c, 0x9d0b, 0x00de, 0x20e9, 0x0000,
+ 0x00d6, 0x2069, 0x0200, 0x080c, 0xa190, 0x00de, 0x20e9, 0x0000,
0x20a1, 0x0240, 0x20a9, 0x000a, 0xa860, 0x20e0, 0xa85c, 0x9080,
0x001c, 0x2098, 0x4003, 0x60a3, 0x0035, 0xaa6c, 0x9294, 0x7000,
0x9286, 0x3000, 0x0110, 0x60a3, 0x0037, 0x00ee, 0x00de, 0x009e,
0x003e, 0x0005, 0x900e, 0x7814, 0x0096, 0x2048, 0xa880, 0xd0fc,
- 0x0198, 0x9084, 0x0003, 0x1180, 0x2001, 0x180c, 0x2004, 0xd0bc,
- 0x0158, 0xa8ac, 0x9005, 0x1140, 0x2001, 0x180c, 0x200c, 0xc1d5,
- 0x2102, 0x2009, 0x198f, 0x210c, 0x009e, 0x918d, 0x0092, 0x0010,
- 0x2009, 0x0096, 0x60ab, 0x0036, 0x6116, 0x0005, 0x2009, 0x0009,
- 0x00a0, 0x2009, 0x000a, 0x0088, 0x2009, 0x000b, 0x0070, 0x2009,
- 0x000c, 0x0058, 0x2009, 0x000d, 0x0040, 0x2009, 0x000e, 0x0028,
- 0x2009, 0x000f, 0x0010, 0x2009, 0x0008, 0x6912, 0x0005, 0x00d6,
- 0x9290, 0x0018, 0x8214, 0x20e9, 0x0000, 0x2069, 0x0200, 0x6813,
- 0x0000, 0x22a8, 0x9284, 0x00e0, 0x0128, 0x20a9, 0x0020, 0x9292,
- 0x0020, 0x0008, 0x9016, 0x20a1, 0x0240, 0x9006, 0x4004, 0x82ff,
- 0x0120, 0x6810, 0x8000, 0x6812, 0x0c60, 0x00de, 0x0005, 0x00d6,
- 0x0096, 0x6014, 0x2048, 0xa87c, 0x6026, 0x9006, 0xa836, 0xa83a,
- 0xa9a0, 0xa946, 0xa84a, 0x6023, 0x0003, 0x6007, 0x0040, 0x6003,
- 0x0003, 0x600b, 0xffff, 0xa817, 0x0001, 0xa842, 0xa83e, 0x2900,
- 0xa85a, 0xa813, 0x1f6e, 0x080c, 0x8735, 0x0126, 0x2091, 0x8000,
- 0x080c, 0x8d06, 0x012e, 0x009e, 0x00de, 0x0005, 0x00f6, 0x00e6,
- 0x00d6, 0x00c6, 0x00a6, 0x0096, 0x0066, 0x0126, 0x2091, 0x8000,
- 0x2071, 0x19c4, 0x760c, 0x2660, 0x2678, 0x8cff, 0x0904, 0x9de2,
- 0x7024, 0x9c06, 0x1520, 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904,
- 0x9db4, 0x080c, 0x9623, 0x68c3, 0x0000, 0x080c, 0x9b30, 0x7027,
- 0x0000, 0x0036, 0x2069, 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138,
- 0x2001, 0x0100, 0x080c, 0x2b65, 0x9006, 0x080c, 0x2b65, 0x2069,
- 0x0100, 0x6824, 0xd084, 0x0110, 0x6827, 0x0001, 0x003e, 0x700c,
- 0x9c36, 0x1110, 0x660c, 0x760e, 0x7008, 0x9c36, 0x1140, 0x2c00,
- 0x9f36, 0x0118, 0x2f00, 0x700a, 0x0010, 0x700b, 0x0000, 0x660c,
- 0x0066, 0x2c00, 0x9f06, 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f,
- 0x0000, 0x080c, 0xbb45, 0x1180, 0x080c, 0x308f, 0x080c, 0xbb56,
- 0x1518, 0x080c, 0xa717, 0x0400, 0x080c, 0x9b30, 0x6824, 0xd084,
- 0x09b0, 0x6827, 0x0001, 0x0898, 0x080c, 0xbb56, 0x1118, 0x080c,
- 0xa717, 0x0090, 0x6014, 0x2048, 0x080c, 0xb953, 0x0168, 0x6020,
- 0x9086, 0x0003, 0x1520, 0xa86b, 0x0103, 0xab7e, 0xa87b, 0x0000,
- 0x080c, 0x6b1d, 0x080c, 0xbb39, 0x080c, 0xbc8f, 0x080c, 0x9f42,
- 0x080c, 0x9a08, 0x00ce, 0x0804, 0x9d65, 0x2c78, 0x600c, 0x2060,
- 0x0804, 0x9d65, 0x700f, 0x0000, 0x700b, 0x0000, 0x012e, 0x006e,
- 0x009e, 0x00ae, 0x00ce, 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020,
- 0x9086, 0x0006, 0x1d08, 0x080c, 0xd101, 0x08f0, 0x00d6, 0x0156,
- 0x080c, 0x91bc, 0x7a14, 0x82ff, 0x0138, 0x7003, 0x0100, 0x700b,
- 0x0003, 0x60c3, 0x0008, 0x0490, 0x7003, 0x0200, 0x7007, 0x0000,
- 0x2069, 0x1800, 0x901e, 0x6800, 0x9086, 0x0004, 0x1110, 0xc38d,
- 0x0060, 0x080c, 0x72e5, 0x1110, 0xc3ad, 0x0008, 0xc3a5, 0x6ad8,
- 0xd29c, 0x1110, 0xd2ac, 0x0108, 0xc39d, 0x730e, 0x2011, 0x1848,
- 0x63f0, 0x2312, 0x20a9, 0x0006, 0x2011, 0x1840, 0x2019, 0x1841,
- 0x2071, 0x0250, 0x2376, 0x8e70, 0x2276, 0x8e70, 0x9398, 0x0002,
- 0x9290, 0x0002, 0x1f04, 0x9e2a, 0x60c3, 0x0020, 0x080c, 0x95f7,
- 0x015e, 0x00de, 0x0005, 0x0156, 0x080c, 0x91bc, 0x7a14, 0x82ff,
- 0x0168, 0x9286, 0xffff, 0x0118, 0x9282, 0x000e, 0x1238, 0x7003,
- 0x0100, 0x700b, 0x0003, 0x60c3, 0x0008, 0x0488, 0x7003, 0x0200,
- 0x7007, 0x001c, 0x700f, 0x0001, 0x2011, 0x199a, 0x2204, 0x8007,
- 0x701a, 0x8210, 0x2204, 0x8007, 0x701e, 0x0421, 0x1120, 0xb8a0,
- 0x9082, 0x007f, 0x0248, 0x2001, 0x181e, 0x2004, 0x7022, 0x2001,
- 0x181f, 0x2004, 0x7026, 0x0030, 0x2001, 0x1817, 0x2004, 0x9084,
- 0x00ff, 0x7026, 0x20a9, 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805,
- 0x20e9, 0x0000, 0x20a1, 0x0256, 0x4003, 0x60c3, 0x001c, 0x015e,
- 0x0804, 0x95f7, 0x0006, 0x2001, 0x1836, 0x2004, 0xd0ac, 0x000e,
- 0x0005, 0x2011, 0x0003, 0x080c, 0x99d6, 0x2011, 0x0002, 0x080c,
- 0x99e0, 0x080c, 0x98ee, 0x0036, 0x901e, 0x080c, 0x9964, 0x003e,
- 0x0005, 0x080c, 0x31c5, 0x0188, 0x0016, 0x00b6, 0x00c6, 0x7010,
- 0x9085, 0x0020, 0x7012, 0x2009, 0x007e, 0x080c, 0x6411, 0xb85c,
- 0xc0ac, 0xb85e, 0x00ce, 0x00be, 0x001e, 0x0005, 0x2071, 0x188e,
- 0x7000, 0x9005, 0x0140, 0x2001, 0x12ee, 0x2071, 0x1800, 0x7072,
- 0x7076, 0x7067, 0xfff0, 0x2071, 0x1800, 0x7070, 0x7052, 0x7057,
- 0x1cc8, 0x0005, 0x00e6, 0x0126, 0x2071, 0x1800, 0x2091, 0x8000,
- 0x7550, 0x9582, 0x0010, 0x0608, 0x7054, 0x2060, 0x6000, 0x9086,
- 0x0000, 0x0148, 0x9ce0, 0x000c, 0x7064, 0x9c02, 0x1208, 0x0cb0,
- 0x2061, 0x1cc8, 0x0c98, 0x6003, 0x0008, 0x8529, 0x7552, 0x9ca8,
- 0x000c, 0x7064, 0x9502, 0x1230, 0x7556, 0x9085, 0x0001, 0x012e,
- 0x00ee, 0x0005, 0x7057, 0x1cc8, 0x0cc0, 0x9006, 0x0cc0, 0x00e6,
- 0x2071, 0x1800, 0x7550, 0x9582, 0x0010, 0x0600, 0x7054, 0x2060,
- 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, 0x000c, 0x7064, 0x9c02,
- 0x1208, 0x0cb0, 0x2061, 0x1cc8, 0x0c98, 0x6003, 0x0008, 0x8529,
- 0x7552, 0x9ca8, 0x000c, 0x7064, 0x9502, 0x1228, 0x7556, 0x9085,
- 0x0001, 0x00ee, 0x0005, 0x7057, 0x1cc8, 0x0cc8, 0x9006, 0x0cc8,
- 0x9c82, 0x1cc8, 0x0a0c, 0x0dc4, 0x2001, 0x1819, 0x2004, 0x9c02,
- 0x1a0c, 0x0dc4, 0x9006, 0x6006, 0x600a, 0x600e, 0x6016, 0x601a,
- 0x6012, 0x6023, 0x0000, 0x6003, 0x0000, 0x601e, 0x6026, 0x602a,
- 0x2061, 0x1800, 0x6050, 0x8000, 0x6052, 0x9086, 0x0001, 0x0108,
- 0x0005, 0x0126, 0x2091, 0x8000, 0x0016, 0x080c, 0x8c37, 0x001e,
- 0x012e, 0x0cb0, 0x0006, 0x6000, 0x9086, 0x0000, 0x0190, 0x601c,
- 0xd084, 0x190c, 0x1950, 0x6017, 0x0000, 0x6023, 0x0007, 0x2001,
- 0x1963, 0x2004, 0x0006, 0x9082, 0x0051, 0x000e, 0x0208, 0x8004,
- 0x601a, 0x000e, 0x0005, 0x00e6, 0x0126, 0x2071, 0x1800, 0x2091,
- 0x8000, 0x7550, 0x9582, 0x0001, 0x0608, 0x7054, 0x2060, 0x6000,
- 0x9086, 0x0000, 0x0148, 0x9ce0, 0x000c, 0x7064, 0x9c02, 0x1208,
- 0x0cb0, 0x2061, 0x1cc8, 0x0c98, 0x6003, 0x0008, 0x8529, 0x7552,
- 0x9ca8, 0x000c, 0x7064, 0x9502, 0x1230, 0x7556, 0x9085, 0x0001,
- 0x012e, 0x00ee, 0x0005, 0x7057, 0x1cc8, 0x0cc0, 0x9006, 0x0cc0,
- 0x6020, 0x9084, 0x000f, 0x0002, 0x9f9b, 0x9fa4, 0x9fbf, 0x9fda,
- 0xbf64, 0xbf81, 0xbf9c, 0x9f9b, 0x9fa4, 0x9f9b, 0x9ff3, 0x9f9b,
- 0x9f9b, 0x9f9b, 0x9f9b, 0x9186, 0x0013, 0x1128, 0x080c, 0x8b2b,
- 0x080c, 0x8c37, 0x0005, 0x0005, 0x0066, 0x6000, 0x90b2, 0x0010,
- 0x1a0c, 0x0dc4, 0x0013, 0x006e, 0x0005, 0x9fbd, 0xa57b, 0xa75e,
- 0x9fbd, 0xa7dd, 0x9fbd, 0x9fbd, 0x9fbd, 0xa505, 0xadb7, 0x9fbd,
- 0x9fbd, 0x9fbd, 0x9fbd, 0x9fbd, 0x9fbd, 0x080c, 0x0dc4, 0x0066,
- 0x6000, 0x90b2, 0x0010, 0x1a0c, 0x0dc4, 0x0013, 0x006e, 0x0005,
- 0x9fd8, 0xb3cf, 0x9fd8, 0x9fd8, 0x9fd8, 0x9fd8, 0x9fd8, 0x9fd8,
- 0xb37f, 0xb4c6, 0x9fd8, 0xb410, 0xb474, 0xb410, 0xb474, 0x9fd8,
- 0x080c, 0x0dc4, 0x6000, 0x9082, 0x0010, 0x1a0c, 0x0dc4, 0x6000,
- 0x0002, 0x9ff1, 0xadfc, 0xaeb8, 0xafac, 0xb14e, 0x9ff1, 0x9ff1,
- 0x9ff1, 0xadd2, 0xb304, 0xb307, 0x9ff1, 0x9ff1, 0x9ff1, 0x9ff1,
- 0xb336, 0x080c, 0x0dc4, 0x0066, 0x6000, 0x90b2, 0x0010, 0x1a0c,
- 0x0dc4, 0x0013, 0x006e, 0x0005, 0xa00c, 0xa00c, 0xa04f, 0xa0e7,
- 0xa17c, 0xa00c, 0xa00c, 0xa00c, 0xa00e, 0xa00c, 0xa00c, 0xa00c,
- 0xa00c, 0xa00c, 0xa00c, 0xa00c, 0x080c, 0x0dc4, 0x9186, 0x004c,
- 0x0588, 0x9186, 0x0003, 0x190c, 0x0dc4, 0x0096, 0x601c, 0xc0ed,
- 0x601e, 0x6003, 0x0003, 0x6106, 0x6014, 0x2048, 0xa880, 0x9084,
- 0xa010, 0xc0b5, 0xa882, 0xa8b0, 0xa846, 0xa8b4, 0xa84a, 0x9006,
- 0xa836, 0xa83a, 0xa888, 0x9092, 0x199a, 0x0210, 0x2001, 0x1999,
- 0x8003, 0x8013, 0x8213, 0x9210, 0x621a, 0x009e, 0x2c10, 0x080c,
- 0x1aa2, 0x080c, 0x8735, 0x0126, 0x2091, 0x8000, 0x080c, 0x8d06,
- 0x012e, 0x0005, 0x6010, 0x00b6, 0x2058, 0xbca0, 0x00be, 0x2c00,
- 0x080c, 0xa19e, 0x080c, 0xbf10, 0x6003, 0x0007, 0x0005, 0x00d6,
- 0x0096, 0x00f6, 0x2079, 0x1800, 0x7a8c, 0x6014, 0x2048, 0xa880,
- 0xd0ec, 0x1110, 0x9290, 0x0018, 0xac7c, 0xc4fc, 0x0046, 0xa8e4,
- 0x9005, 0x1140, 0xa8e0, 0x921a, 0x0140, 0x0220, 0xa87f, 0x0007,
- 0x2010, 0x0028, 0xa87f, 0x0015, 0x0010, 0xa87f, 0x0000, 0x8214,
- 0xa887, 0x0000, 0xaa02, 0x0006, 0x0016, 0x0026, 0x00c6, 0x00d6,
- 0x00e6, 0x00f6, 0x2400, 0x9005, 0x1108, 0x009a, 0x2100, 0x9086,
- 0x0015, 0x1118, 0x2001, 0x0001, 0x0038, 0x2100, 0x9086, 0x0016,
- 0x0118, 0x2001, 0x0001, 0x002a, 0x94a4, 0x0007, 0x8423, 0x9405,
- 0x0002, 0xa0af, 0xa0af, 0xa0a6, 0xa0a9, 0xa0af, 0xa0a3, 0xa0a1,
- 0xa0a1, 0xa0a1, 0xa0a1, 0xa0a1, 0xa0a1, 0xa0a1, 0xa0a1, 0xa0a1,
- 0xa0a1, 0x080c, 0x0dc4, 0x080c, 0xa9ce, 0x0048, 0x080c, 0xab05,
- 0x0030, 0x080c, 0xabf3, 0x2001, 0x0004, 0x080c, 0x6372, 0x00fe,
- 0x00ee, 0x00de, 0x00ce, 0x002e, 0x001e, 0x2c00, 0xa89a, 0x000e,
- 0x080c, 0xa25c, 0x0530, 0xa804, 0xa80e, 0x00a6, 0x2050, 0xb100,
- 0x00ae, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0,
- 0x9080, 0x0002, 0xaad0, 0xabd4, 0xacd8, 0xaddc, 0x2031, 0x0000,
- 0x2041, 0x1266, 0x080c, 0xa45b, 0x0160, 0x000e, 0x9005, 0x0120,
- 0x00fe, 0x009e, 0x00de, 0x0005, 0x00fe, 0x009e, 0x00de, 0x0804,
- 0x9f18, 0x2001, 0x002c, 0x900e, 0x080c, 0xa2c2, 0x0c70, 0x91b6,
- 0x0015, 0x0170, 0x91b6, 0x0016, 0x0158, 0x91b2, 0x0047, 0x0a0c,
- 0x0dc4, 0x91b2, 0x0050, 0x1a0c, 0x0dc4, 0x9182, 0x0047, 0x00ca,
- 0x2001, 0x0109, 0x2004, 0xd08c, 0x0198, 0x0126, 0x2091, 0x2800,
- 0x0006, 0x0016, 0x0026, 0x080c, 0x8689, 0x002e, 0x001e, 0x000e,
- 0x012e, 0xa001, 0x6000, 0x9086, 0x0002, 0x1110, 0x0804, 0xa04f,
- 0x0005, 0xa11a, 0xa11a, 0xa11c, 0xa152, 0xa11a, 0xa11a, 0xa11a,
- 0xa11a, 0xa165, 0x080c, 0x0dc4, 0x00d6, 0x0016, 0x0096, 0x080c,
- 0x8be7, 0x080c, 0x8d06, 0x6003, 0x0004, 0x6114, 0x2148, 0xa880,
- 0xd0fc, 0x01c0, 0xa87c, 0xc0fc, 0x9005, 0x1158, 0xa898, 0x9005,
- 0x0140, 0x2001, 0x0000, 0x900e, 0x080c, 0xa2c2, 0x080c, 0x9f18,
- 0x00a8, 0x6003, 0x0002, 0xa8a8, 0xa9ac, 0x9105, 0x1178, 0xa8b2,
- 0xa8b6, 0x0c78, 0xa883, 0x0020, 0xa890, 0xa88e, 0xa8a8, 0xa8b2,
- 0xa8ac, 0xa8b6, 0xa8cb, 0x0000, 0xa8cf, 0x0000, 0x009e, 0x001e,
- 0x00de, 0x0005, 0x080c, 0x8be7, 0x00d6, 0x0096, 0x6114, 0x2148,
- 0x080c, 0xb955, 0x0120, 0xa87f, 0x0006, 0x080c, 0x6b1d, 0x009e,
- 0x00de, 0x080c, 0x9f18, 0x0804, 0x8d06, 0x080c, 0x8be7, 0x080c,
- 0x3066, 0x080c, 0xbf0d, 0x00d6, 0x0096, 0x6114, 0x2148, 0x080c,
- 0xb955, 0x0120, 0xa87f, 0x0029, 0x080c, 0x6b1d, 0x009e, 0x00de,
- 0x080c, 0x9f18, 0x0804, 0x8d06, 0x9182, 0x0047, 0x0002, 0xa18c,
- 0xa18e, 0xa18c, 0xa18c, 0xa18c, 0xa18c, 0xa18c, 0xa18c, 0xa18c,
- 0xa18c, 0xa18c, 0xa18c, 0xa18e, 0x080c, 0x0dc4, 0x00d6, 0x0096,
- 0x080c, 0x154a, 0x6114, 0x2148, 0xa87f, 0x0000, 0xa887, 0x0000,
- 0x080c, 0x6b1d, 0x009e, 0x00de, 0x0804, 0x9f18, 0x0026, 0x0036,
- 0x0056, 0x0066, 0x0096, 0x00a6, 0x00f6, 0x0006, 0x080c, 0x1001,
- 0x000e, 0x090c, 0x0dc4, 0xa960, 0x21e8, 0xa95c, 0x9188, 0x001a,
- 0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104, 0xa87e, 0x2079, 0x1800,
- 0x798c, 0x9188, 0x0018, 0x918c, 0x0fff, 0xa976, 0xac7a, 0x2950,
- 0x00a6, 0x2001, 0x0205, 0x2003, 0x0000, 0x901e, 0x2029, 0x0001,
- 0x9182, 0x0035, 0x1228, 0x2011, 0x0020, 0x080c, 0xb54b, 0x04c0,
- 0x2130, 0x2009, 0x0034, 0x2011, 0x0020, 0x080c, 0xb54b, 0x96b2,
- 0x0034, 0xb004, 0x904d, 0x0110, 0x080c, 0x0fb3, 0x080c, 0x1001,
- 0x01d0, 0x8528, 0xa86b, 0x0110, 0xa86f, 0x0000, 0x2920, 0xb406,
- 0x968a, 0x003d, 0x1230, 0x2608, 0x2011, 0x001c, 0x080c, 0xb54b,
- 0x00b8, 0x96b2, 0x003c, 0x2009, 0x003c, 0x2950, 0x2011, 0x001c,
- 0x080c, 0xb54b, 0x0c18, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae,
- 0x852f, 0x95ad, 0x0050, 0xb56a, 0xb074, 0xc0fd, 0xb076, 0x0048,
- 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad, 0x0050,
- 0xb56a, 0x2a48, 0xa804, 0xa807, 0x0000, 0x0006, 0x080c, 0x6b1d,
- 0x000e, 0x2048, 0x9005, 0x1db0, 0x00fe, 0x00ae, 0x009e, 0x006e,
- 0x005e, 0x003e, 0x002e, 0x0005, 0x00d6, 0x00f6, 0x0096, 0x0006,
- 0x080c, 0x1001, 0x000e, 0x090c, 0x0dc4, 0xa960, 0x21e8, 0xa95c,
- 0x9188, 0x001a, 0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104, 0xaa6a,
- 0xa87e, 0x2079, 0x1800, 0x798c, 0x810c, 0x9188, 0x000c, 0x9182,
- 0x001a, 0x0210, 0x2009, 0x001a, 0x21a8, 0x810b, 0xa976, 0xac7a,
- 0x2e98, 0xa85c, 0x9080, 0x0020, 0x20a0, 0x2001, 0x0205, 0x200c,
- 0x918d, 0x0080, 0x2102, 0x4003, 0x2003, 0x0000, 0x080c, 0x6b1d,
- 0x009e, 0x00fe, 0x00de, 0x0005, 0x0016, 0x00d6, 0x00f6, 0x0096,
- 0x0016, 0x2001, 0x0205, 0x200c, 0x918d, 0x0080, 0x2102, 0x001e,
- 0x2079, 0x0200, 0x2e98, 0xa880, 0xd0ec, 0x0118, 0x9e80, 0x000c,
- 0x2098, 0x2021, 0x003e, 0x901e, 0x9282, 0x0020, 0x0218, 0x2011,
- 0x0020, 0x2018, 0x9486, 0x003e, 0x1170, 0x0096, 0x080c, 0x1001,
- 0x2900, 0x009e, 0x05c0, 0xa806, 0x2048, 0xa860, 0x20e8, 0xa85c,
- 0x9080, 0x0002, 0x20a0, 0x3300, 0x908e, 0x0260, 0x0140, 0x2009,
- 0x0280, 0x9102, 0x920a, 0x0218, 0x2010, 0x2100, 0x9318, 0x2200,
- 0x9402, 0x1228, 0x2400, 0x9202, 0x2410, 0x9318, 0x9006, 0x2020,
- 0x22a8, 0xa800, 0x9200, 0xa802, 0x20e1, 0x0000, 0x4003, 0x83ff,
- 0x0180, 0x3300, 0x9086, 0x0280, 0x1130, 0x7814, 0x8000, 0x9085,
- 0x0080, 0x7816, 0x2e98, 0x2310, 0x84ff, 0x0904, 0xa271, 0x0804,
- 0xa273, 0x9085, 0x0001, 0x7817, 0x0000, 0x009e, 0x00fe, 0x00de,
- 0x001e, 0x0005, 0x00d6, 0x0036, 0x0096, 0x6314, 0x2348, 0xa87e,
- 0xa986, 0x080c, 0x6b11, 0x009e, 0x003e, 0x00de, 0x0005, 0x20a9,
- 0x000e, 0x20e1, 0x0000, 0x2e98, 0x6014, 0x0096, 0x2048, 0xa804,
- 0x9005, 0x15c0, 0x2900, 0x009e, 0x0096, 0x2048, 0xa860, 0x20e8,
- 0xa85c, 0x20a0, 0x009e, 0x4003, 0x9196, 0x0016, 0x01f0, 0x0136,
- 0x9080, 0x001c, 0x20a0, 0x2011, 0x0006, 0x20a9, 0x0001, 0x3418,
- 0x8318, 0x23a0, 0x4003, 0x3318, 0x8318, 0x2398, 0x8211, 0x1db8,
- 0x2011, 0x0006, 0x013e, 0x20a0, 0x3318, 0x8318, 0x2398, 0x4003,
- 0x3418, 0x8318, 0x23a0, 0x8211, 0x1db8, 0x0096, 0x080c, 0xb955,
- 0x0130, 0x6014, 0x2048, 0xa807, 0x0000, 0xa86b, 0x0103, 0x009e,
- 0x0804, 0x9f18, 0x009e, 0x7130, 0x918e, 0x0100, 0x1120, 0x080c,
- 0xa717, 0x0804, 0x9f18, 0x20e1, 0x0000, 0x9e88, 0x000e, 0x2198,
- 0x0096, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x009e, 0x0136, 0x9080,
- 0x000e, 0x20a0, 0x2011, 0x0006, 0x20a9, 0x0001, 0x3418, 0x83a0,
- 0x4003, 0x3318, 0x8398, 0x8211, 0x1dc8, 0x2011, 0x0006, 0x013e,
- 0x20a0, 0x3318, 0x8398, 0x4003, 0x3418, 0x83a0, 0x8211, 0x1dc8,
- 0x6014, 0x0096, 0x2048, 0xa804, 0x0086, 0x2040, 0x2009, 0x000c,
- 0x8806, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080,
- 0x000e, 0xaaa4, 0xaba0, 0xacac, 0xada8, 0x2031, 0x0000, 0x2041,
- 0x1247, 0x080c, 0xa45b, 0x0120, 0x008e, 0x009e, 0x0804, 0x9f18,
- 0x080c, 0xa717, 0x0cc8, 0x0096, 0x00d6, 0x0036, 0x7330, 0x9386,
- 0x0200, 0x11a8, 0x6010, 0x00b6, 0x2058, 0xb8bb, 0x0000, 0x00be,
- 0x6014, 0x9005, 0x0130, 0x2048, 0xa807, 0x0000, 0xa86b, 0x0103,
- 0xab32, 0x080c, 0x9f18, 0x003e, 0x00de, 0x009e, 0x0005, 0x0011,
- 0x1d48, 0x0cc8, 0x0006, 0x0016, 0x080c, 0xbef8, 0x0178, 0x6014,
- 0x9005, 0x1160, 0x600b, 0x0003, 0x601b, 0x0000, 0x2009, 0x0022,
- 0x080c, 0xa551, 0x9006, 0x001e, 0x000e, 0x0005, 0x9085, 0x0001,
+ 0x01c0, 0x9084, 0x0003, 0x11a8, 0x2001, 0x180c, 0x2004, 0xd0bc,
+ 0x0180, 0x7824, 0xd0cc, 0x1168, 0xd0c4, 0x1158, 0xa8ac, 0x9005,
+ 0x1140, 0x2001, 0x180c, 0x200c, 0xc1d5, 0x2102, 0x2009, 0x198f,
+ 0x210c, 0x009e, 0x918d, 0x0092, 0x0010, 0x2009, 0x0096, 0x60ab,
+ 0x0036, 0x6116, 0x0005, 0x2009, 0x0009, 0x00a0, 0x2009, 0x000a,
+ 0x0088, 0x2009, 0x000b, 0x0070, 0x2009, 0x000c, 0x0058, 0x2009,
+ 0x000d, 0x0040, 0x2009, 0x000e, 0x0028, 0x2009, 0x000f, 0x0010,
+ 0x2009, 0x0008, 0x6912, 0x0005, 0x00d6, 0x9290, 0x0018, 0x8214,
+ 0x20e9, 0x0000, 0x2069, 0x0200, 0x6813, 0x0000, 0x22a8, 0x9284,
+ 0x00e0, 0x0128, 0x20a9, 0x0020, 0x9292, 0x0020, 0x0008, 0x9016,
+ 0x20a1, 0x0240, 0x9006, 0x4004, 0x82ff, 0x0120, 0x6810, 0x8000,
+ 0x6812, 0x0c60, 0x00de, 0x0005, 0x00d6, 0x0096, 0x6014, 0x2048,
+ 0xa87c, 0x6056, 0x9006, 0xa836, 0xa83a, 0xa9a0, 0xa946, 0xa84a,
+ 0x6023, 0x0003, 0x6007, 0x0040, 0x6003, 0x0003, 0x600b, 0xffff,
+ 0xa817, 0x0001, 0xa842, 0xa83e, 0x2900, 0xa85a, 0xa813, 0x1fb6,
+ 0x080c, 0x8906, 0x0126, 0x2091, 0x8000, 0x080c, 0x8f0e, 0x012e,
+ 0x009e, 0x00de, 0x0005, 0x00f6, 0x00e6, 0x00d6, 0x00c6, 0x00a6,
+ 0x0096, 0x0066, 0x0126, 0x2091, 0x8000, 0x2071, 0x19c4, 0x760c,
+ 0x2660, 0x2678, 0x8cff, 0x0904, 0xa267, 0x7024, 0x9c06, 0x1520,
+ 0x2069, 0x0100, 0x68c0, 0x9005, 0x0904, 0xa239, 0x080c, 0x98d1,
+ 0x68c3, 0x0000, 0x080c, 0x9e03, 0x7027, 0x0000, 0x0036, 0x2069,
+ 0x0140, 0x6b04, 0x9384, 0x1000, 0x0138, 0x2001, 0x0100, 0x080c,
+ 0x2bce, 0x9006, 0x080c, 0x2bce, 0x2069, 0x0100, 0x6824, 0xd084,
+ 0x0110, 0x6827, 0x0001, 0x003e, 0x700c, 0x9c36, 0x1110, 0x660c,
+ 0x760e, 0x7008, 0x9c36, 0x1140, 0x2c00, 0x9f36, 0x0118, 0x2f00,
+ 0x700a, 0x0010, 0x700b, 0x0000, 0x660c, 0x0066, 0x2c00, 0x9f06,
+ 0x0110, 0x7e0e, 0x0008, 0x2678, 0x600f, 0x0000, 0x080c, 0xc3c0,
+ 0x1180, 0x080c, 0x312b, 0x080c, 0xc3d1, 0x1518, 0x080c, 0xadb3,
+ 0x0400, 0x080c, 0x9e03, 0x6824, 0xd084, 0x09b0, 0x6827, 0x0001,
+ 0x0898, 0x080c, 0xc3d1, 0x1118, 0x080c, 0xadb3, 0x0090, 0x6014,
+ 0x2048, 0x080c, 0xc1cb, 0x0168, 0x6020, 0x9086, 0x0003, 0x1520,
+ 0xa86b, 0x0103, 0xab7e, 0xa87b, 0x0000, 0x080c, 0x6c02, 0x080c,
+ 0xc3b4, 0x080c, 0xc638, 0x080c, 0xa3cf, 0x080c, 0x9cd9, 0x00ce,
+ 0x0804, 0xa1ea, 0x2c78, 0x600c, 0x2060, 0x0804, 0xa1ea, 0x700f,
+ 0x0000, 0x700b, 0x0000, 0x012e, 0x006e, 0x009e, 0x00ae, 0x00ce,
+ 0x00de, 0x00ee, 0x00fe, 0x0005, 0x6020, 0x9086, 0x0006, 0x1d08,
+ 0x080c, 0xdcc3, 0x08f0, 0x00d6, 0x0156, 0x080c, 0x93e9, 0x7a14,
+ 0x82ff, 0x0138, 0x7003, 0x0100, 0x700b, 0x0003, 0x60c3, 0x0008,
+ 0x0490, 0x7003, 0x0200, 0x7007, 0x0000, 0x2069, 0x1800, 0x901e,
+ 0x6800, 0x9086, 0x0004, 0x1110, 0xc38d, 0x0060, 0x080c, 0x7351,
+ 0x1110, 0xc3ad, 0x0008, 0xc3a5, 0x6ad8, 0xd29c, 0x1110, 0xd2ac,
+ 0x0108, 0xc39d, 0x730e, 0x2011, 0x1848, 0x63f0, 0x2312, 0x20a9,
+ 0x0006, 0x2011, 0x1840, 0x2019, 0x1841, 0x2071, 0x0250, 0x2376,
+ 0x8e70, 0x2276, 0x8e70, 0x9398, 0x0002, 0x9290, 0x0002, 0x1f04,
+ 0xa2af, 0x60c3, 0x0020, 0x080c, 0x98a5, 0x015e, 0x00de, 0x0005,
+ 0x0156, 0x080c, 0x93e9, 0x7a14, 0x82ff, 0x0168, 0x9286, 0xffff,
+ 0x0118, 0x9282, 0x000e, 0x1238, 0x7003, 0x0100, 0x700b, 0x0003,
+ 0x60c3, 0x0008, 0x0488, 0x7003, 0x0200, 0x7007, 0x001c, 0x700f,
+ 0x0001, 0x2011, 0x199a, 0x2204, 0x8007, 0x701a, 0x8210, 0x2204,
+ 0x8007, 0x701e, 0x0421, 0x1120, 0xb8a0, 0x9082, 0x007f, 0x0248,
+ 0x2001, 0x181e, 0x2004, 0x7022, 0x2001, 0x181f, 0x2004, 0x7026,
+ 0x0030, 0x2001, 0x1817, 0x2004, 0x9084, 0x00ff, 0x7026, 0x20a9,
+ 0x0004, 0x20e1, 0x0001, 0x2099, 0x1805, 0x20e9, 0x0000, 0x20a1,
+ 0x0256, 0x4003, 0x60c3, 0x001c, 0x015e, 0x0804, 0x98a5, 0x0006,
+ 0x2001, 0x1836, 0x2004, 0xd0ac, 0x000e, 0x0005, 0x2011, 0x0003,
+ 0x080c, 0x9ca7, 0x2011, 0x0002, 0x080c, 0x9cb1, 0x080c, 0x9bbf,
+ 0x0036, 0x901e, 0x080c, 0x9c35, 0x003e, 0x0005, 0x080c, 0x3261,
+ 0x0188, 0x0016, 0x00b6, 0x00c6, 0x7010, 0x9085, 0x0020, 0x7012,
+ 0x2009, 0x007e, 0x080c, 0x64fc, 0xb85c, 0xc0ac, 0xb85e, 0x00ce,
+ 0x00be, 0x001e, 0x0005, 0x2071, 0x188e, 0x7000, 0x9005, 0x0140,
+ 0x2001, 0x0976, 0x2071, 0x1800, 0x7072, 0x7076, 0x7067, 0xffe0,
+ 0x2071, 0x1800, 0x7070, 0x7052, 0x7057, 0x1cd0, 0x0005, 0x00e6,
+ 0x0126, 0x2071, 0x1800, 0x2091, 0x8000, 0x7550, 0x9582, 0x0010,
+ 0x0608, 0x7054, 0x2060, 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0,
+ 0x0018, 0x7064, 0x9c02, 0x1208, 0x0cb0, 0x2061, 0x1cd0, 0x0c98,
+ 0x6003, 0x0008, 0x8529, 0x7552, 0x9ca8, 0x0018, 0x7064, 0x9502,
+ 0x1230, 0x7556, 0x9085, 0x0001, 0x012e, 0x00ee, 0x0005, 0x7057,
+ 0x1cd0, 0x0cc0, 0x9006, 0x0cc0, 0x00e6, 0x2071, 0x1800, 0x7550,
+ 0x9582, 0x0010, 0x0600, 0x7054, 0x2060, 0x6000, 0x9086, 0x0000,
+ 0x0148, 0x9ce0, 0x0018, 0x7064, 0x9c02, 0x1208, 0x0cb0, 0x2061,
+ 0x1cd0, 0x0c98, 0x6003, 0x0008, 0x8529, 0x7552, 0x9ca8, 0x0018,
+ 0x7064, 0x9502, 0x1228, 0x7556, 0x9085, 0x0001, 0x00ee, 0x0005,
+ 0x7057, 0x1cd0, 0x0cc8, 0x9006, 0x0cc8, 0x9c82, 0x1cd0, 0x0a0c,
+ 0x0dc3, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1a0c, 0x0dc3, 0x9006,
+ 0x6006, 0x600a, 0x600e, 0x6016, 0x601a, 0x6012, 0x6023, 0x0000,
+ 0x6003, 0x0000, 0x601e, 0x6056, 0x605a, 0x6026, 0x602a, 0x602e,
+ 0x6032, 0x6036, 0x603a, 0x603e, 0x6042, 0x2061, 0x1800, 0x6050,
+ 0x8000, 0x6052, 0x9086, 0x0001, 0x0108, 0x0005, 0x0126, 0x2091,
+ 0x8000, 0x0016, 0x080c, 0x8e38, 0x001e, 0x012e, 0x0cb0, 0x0006,
+ 0x6000, 0x9086, 0x0000, 0x01b0, 0x601c, 0xd084, 0x190c, 0x1998,
+ 0x6017, 0x0000, 0x6023, 0x0007, 0x2001, 0x1962, 0x2004, 0x0006,
+ 0x9082, 0x0051, 0x000e, 0x0208, 0x8004, 0x601a, 0x080c, 0xdf7c,
+ 0x6043, 0x0000, 0x000e, 0x0005, 0x00e6, 0x0126, 0x2071, 0x1800,
+ 0x2091, 0x8000, 0x7550, 0x9582, 0x0001, 0x0608, 0x7054, 0x2060,
+ 0x6000, 0x9086, 0x0000, 0x0148, 0x9ce0, 0x0018, 0x7064, 0x9c02,
+ 0x1208, 0x0cb0, 0x2061, 0x1cd0, 0x0c98, 0x6003, 0x0008, 0x8529,
+ 0x7552, 0x9ca8, 0x0018, 0x7064, 0x9502, 0x1230, 0x7556, 0x9085,
+ 0x0001, 0x012e, 0x00ee, 0x0005, 0x7057, 0x1cd0, 0x0cc0, 0x9006,
+ 0x0cc0, 0x6020, 0x9084, 0x000f, 0x0002, 0xa42c, 0xa435, 0xa450,
+ 0xa46b, 0xc93f, 0xc95c, 0xc977, 0xa42c, 0xa435, 0xa42c, 0xa484,
+ 0xa42c, 0xa42c, 0xa42c, 0xa42c, 0x9186, 0x0013, 0x1128, 0x080c,
+ 0x8d2c, 0x080c, 0x8e38, 0x0005, 0x0005, 0x0066, 0x6000, 0x90b2,
+ 0x0010, 0x1a0c, 0x0dc3, 0x0013, 0x006e, 0x0005, 0xa44e, 0xac0f,
+ 0xadfa, 0xa44e, 0xae89, 0xa760, 0xa44e, 0xa44e, 0xab8f, 0xb472,
+ 0xa44e, 0xa44e, 0xa44e, 0xa44e, 0xa44e, 0xa44e, 0x080c, 0x0dc3,
+ 0x0066, 0x6000, 0x90b2, 0x0010, 0x1a0c, 0x0dc3, 0x0013, 0x006e,
+ 0x0005, 0xa469, 0xbb61, 0xa469, 0xa469, 0xa469, 0xa469, 0xa469,
+ 0xa469, 0xbaf8, 0xbce3, 0xa469, 0xbba2, 0xbc21, 0xbba2, 0xbc21,
+ 0xa469, 0x080c, 0x0dc3, 0x6000, 0x9082, 0x0010, 0x1a0c, 0x0dc3,
+ 0x6000, 0x0002, 0xa482, 0xb4b9, 0xb581, 0xb6b7, 0xb866, 0xa482,
+ 0xa482, 0xa482, 0xb48d, 0xba7d, 0xba80, 0xa482, 0xa482, 0xa482,
+ 0xa482, 0xbaaf, 0x080c, 0x0dc3, 0x0066, 0x6000, 0x90b2, 0x0010,
+ 0x1a0c, 0x0dc3, 0x0013, 0x006e, 0x0005, 0xa49d, 0xa49d, 0xa4e0,
+ 0xa578, 0xa60d, 0xa49d, 0xa49d, 0xa49d, 0xa49f, 0xa49d, 0xa49d,
+ 0xa49d, 0xa49d, 0xa49d, 0xa49d, 0xa49d, 0x080c, 0x0dc3, 0x9186,
+ 0x004c, 0x0588, 0x9186, 0x0003, 0x190c, 0x0dc3, 0x0096, 0x601c,
+ 0xc0ed, 0x601e, 0x6003, 0x0003, 0x6106, 0x6014, 0x2048, 0xa880,
+ 0x9084, 0xa010, 0xc0b5, 0xa882, 0xa8b0, 0xa846, 0xa8b4, 0xa84a,
+ 0x9006, 0xa836, 0xa83a, 0xa888, 0x9092, 0x199a, 0x0210, 0x2001,
+ 0x1999, 0x8003, 0x8013, 0x8213, 0x9210, 0x621a, 0x009e, 0x2c10,
+ 0x080c, 0x1aea, 0x080c, 0x8906, 0x0126, 0x2091, 0x8000, 0x080c,
+ 0x8f0e, 0x012e, 0x0005, 0x6010, 0x00b6, 0x2058, 0xbca0, 0x00be,
+ 0x2c00, 0x080c, 0xa62f, 0x080c, 0xc8e6, 0x6003, 0x0007, 0x0005,
+ 0x00d6, 0x0096, 0x00f6, 0x2079, 0x1800, 0x7a8c, 0x6014, 0x2048,
+ 0xa880, 0xd0ec, 0x1110, 0x9290, 0x0018, 0xac7c, 0xc4fc, 0x0046,
+ 0xa8e4, 0x9005, 0x1140, 0xa8e0, 0x921a, 0x0140, 0x0220, 0xa87f,
+ 0x0007, 0x2010, 0x0028, 0xa87f, 0x0015, 0x0010, 0xa87f, 0x0000,
+ 0x8214, 0xa887, 0x0000, 0xaa02, 0x0006, 0x0016, 0x0026, 0x00c6,
+ 0x00d6, 0x00e6, 0x00f6, 0x2400, 0x9005, 0x1108, 0x009a, 0x2100,
+ 0x9086, 0x0015, 0x1118, 0x2001, 0x0001, 0x0038, 0x2100, 0x9086,
+ 0x0016, 0x0118, 0x2001, 0x0001, 0x002a, 0x94a4, 0x0007, 0x8423,
+ 0x9405, 0x0002, 0xa540, 0xa540, 0xa537, 0xa53a, 0xa540, 0xa534,
+ 0xa532, 0xa532, 0xa532, 0xa532, 0xa532, 0xa532, 0xa532, 0xa532,
+ 0xa532, 0xa532, 0x080c, 0x0dc3, 0x080c, 0xb082, 0x0048, 0x080c,
+ 0xb1b9, 0x0030, 0x080c, 0xb2a7, 0x2001, 0x0004, 0x080c, 0x6448,
+ 0x00fe, 0x00ee, 0x00de, 0x00ce, 0x002e, 0x001e, 0x2c00, 0xa89a,
+ 0x000e, 0x080c, 0xa6ed, 0x0530, 0xa804, 0xa80e, 0x00a6, 0x2050,
+ 0xb100, 0x00ae, 0x8006, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084,
+ 0xffc0, 0x9080, 0x0002, 0xaad0, 0xabd4, 0xacd8, 0xaddc, 0x2031,
+ 0x0000, 0x2041, 0x1272, 0x080c, 0xa8fb, 0x0160, 0x000e, 0x9005,
+ 0x0120, 0x00fe, 0x009e, 0x00de, 0x0005, 0x00fe, 0x009e, 0x00de,
+ 0x0804, 0xa39d, 0x2001, 0x002c, 0x900e, 0x080c, 0xa753, 0x0c70,
+ 0x91b6, 0x0015, 0x0170, 0x91b6, 0x0016, 0x0158, 0x91b2, 0x0047,
+ 0x0a0c, 0x0dc3, 0x91b2, 0x0050, 0x1a0c, 0x0dc3, 0x9182, 0x0047,
+ 0x00ca, 0x2001, 0x0109, 0x2004, 0xd08c, 0x0198, 0x0126, 0x2091,
+ 0x2800, 0x0006, 0x0016, 0x0026, 0x080c, 0x885a, 0x002e, 0x001e,
+ 0x000e, 0x012e, 0xa001, 0x6000, 0x9086, 0x0002, 0x1110, 0x0804,
+ 0xa4e0, 0x0005, 0xa5ab, 0xa5ab, 0xa5ad, 0xa5e3, 0xa5ab, 0xa5ab,
+ 0xa5ab, 0xa5ab, 0xa5f6, 0x080c, 0x0dc3, 0x00d6, 0x0016, 0x0096,
+ 0x080c, 0x8de8, 0x080c, 0x8f0e, 0x6003, 0x0004, 0x6114, 0x2148,
+ 0xa880, 0xd0fc, 0x01c0, 0xa87c, 0xc0fc, 0x9005, 0x1158, 0xa898,
+ 0x9005, 0x0140, 0x2001, 0x0000, 0x900e, 0x080c, 0xa753, 0x080c,
+ 0xa39d, 0x00a8, 0x6003, 0x0002, 0xa8a8, 0xa9ac, 0x9105, 0x1178,
+ 0xa8b2, 0xa8b6, 0x0c78, 0xa883, 0x0020, 0xa890, 0xa88e, 0xa8a8,
+ 0xa8b2, 0xa8ac, 0xa8b6, 0xa8cb, 0x0000, 0xa8cf, 0x0000, 0x009e,
+ 0x001e, 0x00de, 0x0005, 0x080c, 0x8de8, 0x00d6, 0x0096, 0x6114,
+ 0x2148, 0x080c, 0xc1cd, 0x0120, 0xa87f, 0x0006, 0x080c, 0x6c02,
+ 0x009e, 0x00de, 0x080c, 0xa39d, 0x0804, 0x8f0e, 0x080c, 0x8de8,
+ 0x080c, 0x3102, 0x080c, 0xc8e3, 0x00d6, 0x0096, 0x6114, 0x2148,
+ 0x080c, 0xc1cd, 0x0120, 0xa87f, 0x0029, 0x080c, 0x6c02, 0x009e,
+ 0x00de, 0x080c, 0xa39d, 0x0804, 0x8f0e, 0x9182, 0x0047, 0x0002,
+ 0xa61d, 0xa61f, 0xa61d, 0xa61d, 0xa61d, 0xa61d, 0xa61d, 0xa61d,
+ 0xa61d, 0xa61d, 0xa61d, 0xa61d, 0xa61f, 0x080c, 0x0dc3, 0x00d6,
+ 0x0096, 0x080c, 0x155f, 0x6114, 0x2148, 0xa87f, 0x0000, 0xa887,
+ 0x0000, 0x080c, 0x6c02, 0x009e, 0x00de, 0x0804, 0xa39d, 0x0026,
+ 0x0036, 0x0056, 0x0066, 0x0096, 0x00a6, 0x00f6, 0x0006, 0x080c,
+ 0x100d, 0x000e, 0x090c, 0x0dc3, 0xa960, 0x21e8, 0xa95c, 0x9188,
+ 0x001a, 0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104, 0xa87e, 0x2079,
+ 0x1800, 0x798c, 0x9188, 0x0018, 0x918c, 0x0fff, 0xa976, 0xac7a,
+ 0x2950, 0x00a6, 0x2001, 0x0205, 0x2003, 0x0000, 0x901e, 0x2029,
+ 0x0001, 0x9182, 0x0035, 0x1228, 0x2011, 0x0020, 0x080c, 0xbd68,
+ 0x04c0, 0x2130, 0x2009, 0x0034, 0x2011, 0x0020, 0x080c, 0xbd68,
+ 0x96b2, 0x0034, 0xb004, 0x904d, 0x0110, 0x080c, 0x0fbf, 0x080c,
+ 0x100d, 0x01d0, 0x8528, 0xa86b, 0x0110, 0xa86f, 0x0000, 0x2920,
+ 0xb406, 0x968a, 0x003d, 0x1230, 0x2608, 0x2011, 0x001c, 0x080c,
+ 0xbd68, 0x00b8, 0x96b2, 0x003c, 0x2009, 0x003c, 0x2950, 0x2011,
+ 0x001c, 0x080c, 0xbd68, 0x0c18, 0x2001, 0x0205, 0x2003, 0x0000,
+ 0x00ae, 0x852f, 0x95ad, 0x0050, 0xb56a, 0xb074, 0xc0fd, 0xb076,
+ 0x0048, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad,
+ 0x0050, 0xb56a, 0x2a48, 0xa804, 0xa807, 0x0000, 0x0006, 0x080c,
+ 0x6c02, 0x000e, 0x2048, 0x9005, 0x1db0, 0x00fe, 0x00ae, 0x009e,
+ 0x006e, 0x005e, 0x003e, 0x002e, 0x0005, 0x00d6, 0x00f6, 0x0096,
+ 0x0006, 0x080c, 0x100d, 0x000e, 0x090c, 0x0dc3, 0xa960, 0x21e8,
+ 0xa95c, 0x9188, 0x001a, 0x21a0, 0x900e, 0x20a9, 0x0020, 0x4104,
+ 0xaa6a, 0xa87e, 0x2079, 0x1800, 0x798c, 0x810c, 0x9188, 0x000c,
+ 0x9182, 0x001a, 0x0210, 0x2009, 0x001a, 0x21a8, 0x810b, 0xa976,
+ 0xac7a, 0x2e98, 0xa85c, 0x9080, 0x0020, 0x20a0, 0x2001, 0x0205,
+ 0x200c, 0x918d, 0x0080, 0x2102, 0x4003, 0x2003, 0x0000, 0x080c,
+ 0x6c02, 0x009e, 0x00fe, 0x00de, 0x0005, 0x0016, 0x00d6, 0x00f6,
+ 0x0096, 0x0016, 0x2001, 0x0205, 0x200c, 0x918d, 0x0080, 0x2102,
+ 0x001e, 0x2079, 0x0200, 0x2e98, 0xa880, 0xd0ec, 0x0118, 0x9e80,
+ 0x000c, 0x2098, 0x2021, 0x003e, 0x901e, 0x9282, 0x0020, 0x0218,
+ 0x2011, 0x0020, 0x2018, 0x9486, 0x003e, 0x1170, 0x0096, 0x080c,
+ 0x100d, 0x2900, 0x009e, 0x05c0, 0xa806, 0x2048, 0xa860, 0x20e8,
+ 0xa85c, 0x9080, 0x0002, 0x20a0, 0x3300, 0x908e, 0x0260, 0x0140,
+ 0x2009, 0x0280, 0x9102, 0x920a, 0x0218, 0x2010, 0x2100, 0x9318,
+ 0x2200, 0x9402, 0x1228, 0x2400, 0x9202, 0x2410, 0x9318, 0x9006,
+ 0x2020, 0x22a8, 0xa800, 0x9200, 0xa802, 0x20e1, 0x0000, 0x4003,
+ 0x83ff, 0x0180, 0x3300, 0x9086, 0x0280, 0x1130, 0x7814, 0x8000,
+ 0x9085, 0x0080, 0x7816, 0x2e98, 0x2310, 0x84ff, 0x0904, 0xa702,
+ 0x0804, 0xa704, 0x9085, 0x0001, 0x7817, 0x0000, 0x009e, 0x00fe,
+ 0x00de, 0x001e, 0x0005, 0x00d6, 0x0036, 0x0096, 0x6314, 0x2348,
+ 0xa87e, 0xa986, 0x080c, 0x6bf5, 0x009e, 0x003e, 0x00de, 0x0005,
+ 0x91b6, 0x0015, 0x1118, 0x080c, 0xa39d, 0x0030, 0x91b6, 0x0016,
+ 0x190c, 0x0dc3, 0x080c, 0xa39d, 0x0005, 0x20a9, 0x000e, 0x20e1,
+ 0x0000, 0x2e98, 0x6014, 0x0096, 0x2048, 0xa804, 0x9005, 0x15c0,
+ 0x2900, 0x009e, 0x0096, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x20a0,
+ 0x009e, 0x4003, 0x9196, 0x0016, 0x01f0, 0x0136, 0x9080, 0x001c,
+ 0x20a0, 0x2011, 0x0006, 0x20a9, 0x0001, 0x3418, 0x8318, 0x23a0,
+ 0x4003, 0x3318, 0x8318, 0x2398, 0x8211, 0x1db8, 0x2011, 0x0006,
+ 0x013e, 0x20a0, 0x3318, 0x8318, 0x2398, 0x4003, 0x3418, 0x8318,
+ 0x23a0, 0x8211, 0x1db8, 0x0096, 0x080c, 0xc1cd, 0x0130, 0x6014,
+ 0x2048, 0xa807, 0x0000, 0xa86b, 0x0103, 0x009e, 0x0804, 0xa39d,
+ 0x009e, 0x7130, 0x918e, 0x0100, 0x1120, 0x080c, 0xadb3, 0x0804,
+ 0xa39d, 0x20e1, 0x0000, 0x9e88, 0x000e, 0x2198, 0x0096, 0x2048,
+ 0xa860, 0x20e8, 0xa85c, 0x009e, 0x0136, 0x9080, 0x000e, 0x20a0,
+ 0x2011, 0x0006, 0x20a9, 0x0001, 0x3418, 0x83a0, 0x4003, 0x3318,
+ 0x8398, 0x8211, 0x1dc8, 0x2011, 0x0006, 0x013e, 0x20a0, 0x3318,
+ 0x8398, 0x4003, 0x3418, 0x83a0, 0x8211, 0x1dc8, 0x6014, 0x0096,
+ 0x2048, 0xa804, 0x0086, 0x2040, 0x2009, 0x000c, 0x8806, 0x8006,
+ 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x000e, 0xaaa4,
+ 0xaba0, 0xacac, 0xada8, 0x2031, 0x0000, 0x2041, 0x1253, 0x080c,
+ 0xa8fb, 0x0120, 0x008e, 0x009e, 0x0804, 0xa39d, 0x080c, 0xadb3,
+ 0x0cc8, 0x0096, 0x00d6, 0x0036, 0x7330, 0x9386, 0x0200, 0x11a8,
+ 0x6010, 0x00b6, 0x2058, 0xb8bf, 0x0000, 0x00be, 0x6014, 0x9005,
+ 0x0130, 0x2048, 0xa807, 0x0000, 0xa86b, 0x0103, 0xab32, 0x080c,
+ 0xa39d, 0x003e, 0x00de, 0x009e, 0x0005, 0x0011, 0x1d48, 0x0cc8,
+ 0x0006, 0x0016, 0x080c, 0xc8ce, 0x0188, 0x6014, 0x9005, 0x1170,
+ 0x600b, 0x0003, 0x601b, 0x0000, 0x6043, 0x0000, 0x2009, 0x0022,
+ 0x080c, 0xabe5, 0x9006, 0x001e, 0x000e, 0x0005, 0x9085, 0x0001,
0x0cd0, 0x0096, 0x0016, 0x20a9, 0x0014, 0x9e80, 0x000c, 0x20e1,
0x0000, 0x2098, 0x6014, 0x2048, 0xa860, 0x20e8, 0xa85c, 0x9080,
0x0002, 0x20a0, 0x4003, 0x2001, 0x0205, 0x2003, 0x0001, 0x2099,
@@ -5022,449 +5170,528 @@ static const uint16_t isp_2300_risc_code[] = {
0xa860, 0x20e8, 0xa85c, 0x9080, 0x0002, 0x20a0, 0x4003, 0x2001,
0x0205, 0x2003, 0x0002, 0x2099, 0x0260, 0x20a9, 0x0020, 0x4003,
0x2003, 0x0000, 0x6014, 0x2048, 0xa800, 0x2048, 0xa86b, 0x0103,
- 0x080c, 0x9f18, 0x001e, 0x009e, 0x0005, 0x0096, 0x0016, 0x900e,
+ 0x080c, 0xa39d, 0x001e, 0x009e, 0x0005, 0x0096, 0x0016, 0x900e,
0x7030, 0x9086, 0x0100, 0x0140, 0x7038, 0x9084, 0x00ff, 0x800c,
0x703c, 0x9084, 0x00ff, 0x8004, 0x9080, 0x0004, 0x9108, 0x810b,
- 0x2011, 0x0002, 0x2019, 0x000c, 0x6014, 0x2048, 0x080c, 0xb54b,
- 0x2011, 0x0205, 0x2013, 0x0000, 0x080c, 0xb955, 0x0140, 0x6014,
+ 0x2011, 0x0002, 0x2019, 0x000c, 0x6014, 0x2048, 0x080c, 0xbd68,
+ 0x2011, 0x0205, 0x2013, 0x0000, 0x080c, 0xc1cd, 0x0140, 0x6014,
0x2048, 0xa807, 0x0000, 0xa868, 0xa8e6, 0xa86b, 0x0103, 0x080c,
- 0x9f18, 0x001e, 0x009e, 0x0005, 0x0016, 0x0096, 0x7030, 0x9086,
+ 0xa39d, 0x001e, 0x009e, 0x0005, 0x0016, 0x0096, 0x7030, 0x9086,
0x0100, 0x1118, 0x2009, 0x0004, 0x0010, 0x7034, 0x800c, 0x810b,
0x2011, 0x000c, 0x2019, 0x000c, 0x6014, 0x2048, 0xa804, 0x0096,
- 0x9005, 0x0108, 0x2048, 0x080c, 0xb54b, 0x2011, 0x0205, 0x2013,
- 0x0000, 0x009e, 0x080c, 0xb955, 0x0148, 0xa804, 0x9005, 0x1158,
- 0xa807, 0x0000, 0xa868, 0xa8e6, 0xa86b, 0x0103, 0x080c, 0x9f18,
+ 0x9005, 0x0108, 0x2048, 0x080c, 0xbd68, 0x2011, 0x0205, 0x2013,
+ 0x0000, 0x009e, 0x080c, 0xc1cd, 0x0148, 0xa804, 0x9005, 0x1158,
+ 0xa807, 0x0000, 0xa868, 0xa8e6, 0xa86b, 0x0103, 0x080c, 0xa39d,
0x009e, 0x001e, 0x0005, 0x0086, 0x2040, 0xa030, 0x8007, 0x9086,
- 0x0100, 0x1118, 0x080c, 0xa717, 0x00e0, 0xa034, 0x8007, 0x800c,
+ 0x0100, 0x1118, 0x080c, 0xadb3, 0x00e0, 0xa034, 0x8007, 0x800c,
0x8806, 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080,
0x000c, 0xa87f, 0x0000, 0xa887, 0x0000, 0xa89b, 0x4000, 0xaaa4,
- 0xaba0, 0xacac, 0xada8, 0x2031, 0x0000, 0x2041, 0x1247, 0x0019,
- 0x0d08, 0x008e, 0x0898, 0x0096, 0x0006, 0x080c, 0x1001, 0x000e,
+ 0xaba0, 0xacac, 0xada8, 0x2031, 0x0000, 0x2041, 0x1253, 0x0019,
+ 0x0d08, 0x008e, 0x0898, 0x0096, 0x0006, 0x080c, 0x100d, 0x000e,
0x01b0, 0xa8af, 0x0dcb, 0xa87a, 0x000e, 0xa8a6, 0x0006, 0xae6e,
0x2800, 0xa8a2, 0xa97e, 0xaf76, 0xaa92, 0xab96, 0xac9a, 0xad9e,
- 0x0086, 0x2940, 0x080c, 0x10eb, 0x008e, 0x9085, 0x0001, 0x009e,
- 0x0005, 0x00b6, 0x0096, 0x00f6, 0x6014, 0x2048, 0x6010, 0x2058,
- 0x91b6, 0x0015, 0x0130, 0xba08, 0xbb0c, 0xbc00, 0xc48c, 0xbc02,
- 0x0470, 0x0096, 0x0156, 0x0036, 0x0026, 0x2b48, 0x9e90, 0x0010,
- 0x2019, 0x000a, 0x20a9, 0x0004, 0x080c, 0xad8d, 0x002e, 0x003e,
- 0x015e, 0x009e, 0x1904, 0xa4e4, 0x0096, 0x0156, 0x0036, 0x0026,
- 0x2b48, 0x9e90, 0x0014, 0x2019, 0x0006, 0x20a9, 0x0004, 0x080c,
- 0xad8d, 0x002e, 0x003e, 0x015e, 0x009e, 0x15b0, 0x7238, 0xba0a,
- 0x733c, 0xbb0e, 0x83ff, 0x0118, 0xbc00, 0xc48d, 0xbc02, 0xa804,
- 0x9005, 0x1128, 0x00fe, 0x009e, 0x00be, 0x0804, 0xa305, 0x0096,
- 0x2048, 0xaa12, 0xab16, 0xac0a, 0x009e, 0x8006, 0x8006, 0x8007,
- 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002, 0x2009, 0x002b,
- 0xaaa4, 0xaba0, 0xacac, 0xada8, 0x2031, 0x0000, 0x2041, 0x1247,
- 0x080c, 0xa45b, 0x0130, 0x00fe, 0x009e, 0x080c, 0x9f18, 0x00be,
- 0x0005, 0x080c, 0xa717, 0x0cb8, 0x2b78, 0x00f6, 0x080c, 0x3066,
- 0x080c, 0xbf0d, 0x00fe, 0x00c6, 0x080c, 0x9ec2, 0x2f00, 0x6012,
- 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001,
- 0x2001, 0x0007, 0x080c, 0x6372, 0x080c, 0x639e, 0x080c, 0x8718,
- 0x080c, 0x8c37, 0x00ce, 0x0804, 0xa4b7, 0x2100, 0x91b2, 0x0054,
- 0x1a0c, 0x0dc4, 0x91b2, 0x0040, 0x1a04, 0xa563, 0x0002, 0xa551,
- 0xa551, 0xa551, 0xa551, 0xa551, 0xa551, 0xa54f, 0xa54f, 0xa54f,
- 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f,
- 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f,
- 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa551, 0xa54f,
- 0xa551, 0xa551, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa551,
- 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f,
- 0xa54f, 0xa551, 0xa551, 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa54f,
- 0xa54f, 0xa54f, 0xa54f, 0xa54f, 0xa551, 0xa54f, 0xa54f, 0x080c,
- 0x0dc4, 0x6003, 0x0001, 0x6106, 0x9186, 0x0032, 0x0118, 0x080c,
- 0x8718, 0x0010, 0x080c, 0x86d0, 0x0126, 0x2091, 0x8000, 0x080c,
- 0x8c37, 0x012e, 0x0005, 0x2600, 0x0002, 0xa579, 0xa579, 0xa579,
- 0xa551, 0xa551, 0xa579, 0xa579, 0xa579, 0xa579, 0xa551, 0xa579,
- 0xa551, 0xa579, 0xa551, 0xa579, 0xa579, 0xa579, 0xa579, 0xa579,
- 0xa579, 0x080c, 0x0dc4, 0x6004, 0x90b2, 0x0054, 0x1a0c, 0x0dc4,
- 0x91b6, 0x0013, 0x0904, 0xa64e, 0x91b6, 0x0027, 0x1904, 0xa5f8,
- 0x080c, 0x8b2b, 0x6004, 0x080c, 0xbb45, 0x01b0, 0x080c, 0xbb56,
- 0x01a8, 0x908e, 0x0021, 0x0904, 0xa5f5, 0x908e, 0x0022, 0x1130,
- 0x080c, 0xa382, 0x0904, 0xa5f1, 0x0804, 0xa5f2, 0x908e, 0x003d,
- 0x0904, 0xa5f5, 0x0804, 0xa5eb, 0x080c, 0x308f, 0x2001, 0x0007,
- 0x080c, 0x6372, 0x6010, 0x00b6, 0x2058, 0xb9a0, 0x00be, 0x080c,
- 0xa717, 0x9186, 0x007e, 0x1148, 0x2001, 0x1836, 0x2014, 0xc285,
- 0x080c, 0x72e5, 0x1108, 0xc2ad, 0x2202, 0x0036, 0x0026, 0x2019,
- 0x0028, 0x2110, 0x080c, 0xd251, 0x002e, 0x003e, 0x0016, 0x0026,
- 0x0036, 0x2110, 0x2019, 0x0028, 0x080c, 0x8843, 0x0076, 0x903e,
- 0x080c, 0x8748, 0x6010, 0x00b6, 0x905d, 0x0100, 0x00be, 0x2c08,
- 0x080c, 0xce89, 0x007e, 0x003e, 0x002e, 0x001e, 0x080c, 0xbf0d,
- 0x0016, 0x080c, 0xbc8f, 0x080c, 0x9f18, 0x001e, 0x080c, 0x3162,
- 0x080c, 0x8c37, 0x0030, 0x080c, 0xbc8f, 0x080c, 0x9f18, 0x080c,
- 0x8c37, 0x0005, 0x080c, 0xa717, 0x0cb0, 0x080c, 0xa753, 0x0c98,
- 0x9186, 0x0015, 0x0118, 0x9186, 0x0016, 0x1148, 0x080c, 0xbf19,
- 0x0d80, 0x6000, 0x9086, 0x0002, 0x0904, 0xa75e, 0x0c50, 0x9186,
- 0x0014, 0x1d38, 0x080c, 0x8b2b, 0x6004, 0x908e, 0x0022, 0x1118,
- 0x080c, 0xa382, 0x09f0, 0x080c, 0x3066, 0x080c, 0xbf0d, 0x080c,
- 0xbb45, 0x1198, 0x080c, 0x308f, 0x6010, 0x00b6, 0x2058, 0xb9a0,
- 0x00be, 0x080c, 0xa717, 0x9186, 0x007e, 0x1128, 0x2001, 0x1836,
- 0x200c, 0xc185, 0x2102, 0x0804, 0xa5eb, 0x080c, 0xbb56, 0x1120,
- 0x080c, 0xa717, 0x0804, 0xa5eb, 0x6004, 0x908e, 0x0032, 0x1160,
- 0x00e6, 0x00f6, 0x2071, 0x189f, 0x2079, 0x0000, 0x080c, 0x33fd,
- 0x00fe, 0x00ee, 0x0804, 0xa5eb, 0x6004, 0x908e, 0x0021, 0x0d40,
- 0x908e, 0x0022, 0x090c, 0xa717, 0x0804, 0xa5eb, 0x90b2, 0x0040,
- 0x1a04, 0xa6fe, 0x2008, 0x0002, 0xa696, 0xa697, 0xa69a, 0xa69d,
- 0xa6a0, 0xa6ad, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694,
- 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694,
- 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694,
- 0xa694, 0xa694, 0xa6b0, 0xa6b3, 0xa694, 0xa6b5, 0xa6b3, 0xa694,
- 0xa694, 0xa694, 0xa694, 0xa694, 0xa6b3, 0xa6b3, 0xa694, 0xa694,
- 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa6e5, 0xa6b3,
- 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694, 0xa694,
- 0xa694, 0xa6b3, 0xa6dc, 0xa694, 0x080c, 0x0dc4, 0x00e0, 0x2001,
- 0x000b, 0x0420, 0x2001, 0x0003, 0x0408, 0x2001, 0x0005, 0x00f0,
- 0x6010, 0x00b6, 0x2058, 0xb804, 0x00be, 0x9084, 0x00ff, 0x9086,
- 0x0000, 0x11b0, 0x2001, 0x0001, 0x0088, 0x2001, 0x0009, 0x0070,
- 0x080c, 0x0dc4, 0x0050, 0x0804, 0xa6f6, 0x080c, 0x8b2b, 0x080c,
- 0xbf10, 0x6003, 0x0004, 0x080c, 0x8c37, 0x0005, 0x080c, 0x6372,
- 0x080c, 0x8b2b, 0x6003, 0x0002, 0x0036, 0x2019, 0x1869, 0x2304,
- 0x9084, 0xff00, 0x1120, 0x2001, 0x1963, 0x201c, 0x0040, 0x8007,
- 0x909a, 0x0004, 0x0ec0, 0x8003, 0x801b, 0x831b, 0x9318, 0x631a,
- 0x003e, 0x080c, 0x8c37, 0x0c08, 0x080c, 0x8b2b, 0x080c, 0xbc8f,
- 0x080c, 0x9f18, 0x080c, 0x8c37, 0x08c0, 0x00e6, 0x00f6, 0x2071,
- 0x189f, 0x2079, 0x0000, 0x080c, 0x33fd, 0x00fe, 0x00ee, 0x080c,
- 0x8b2b, 0x080c, 0x9f18, 0x080c, 0x8c37, 0x0838, 0x080c, 0x8b2b,
- 0x6003, 0x0002, 0x080c, 0xbf10, 0x0804, 0x8c37, 0x2600, 0x2008,
- 0x0002, 0xa715, 0xa715, 0xa715, 0xa6f6, 0xa6f6, 0xa715, 0xa715,
- 0xa715, 0xa715, 0xa6f6, 0xa715, 0xa6f6, 0xa715, 0xa6f6, 0xa715,
- 0xa715, 0xa715, 0xa715, 0xa715, 0xa715, 0x080c, 0x0dc4, 0x00e6,
- 0x0096, 0x0026, 0x0016, 0x080c, 0xb955, 0x0568, 0x6014, 0x2048,
- 0xa868, 0x9086, 0x0139, 0x11a8, 0xa898, 0x9086, 0x0056, 0x1148,
- 0x080c, 0x533c, 0x0130, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000,
- 0x0028, 0x2001, 0x0030, 0x900e, 0x2011, 0x4005, 0x080c, 0xbe00,
- 0x0090, 0xa86c, 0xd0fc, 0x0178, 0xa807, 0x0000, 0x0016, 0x6004,
- 0x908e, 0x0021, 0x0168, 0x908e, 0x003d, 0x0150, 0x001e, 0xa86b,
- 0x0103, 0xa833, 0x0100, 0x001e, 0x002e, 0x009e, 0x00ee, 0x0005,
- 0x001e, 0x0009, 0x0cc0, 0x0096, 0x6014, 0x2048, 0xa800, 0x2048,
- 0xa86b, 0x0103, 0xa823, 0x8001, 0x009e, 0x0005, 0x00b6, 0x6610,
- 0x2658, 0xb804, 0x9084, 0x00ff, 0x90b2, 0x000c, 0x1a0c, 0x0dc4,
- 0x6604, 0x96b6, 0x004d, 0x1120, 0x080c, 0xbd1f, 0x0804, 0xa7cb,
- 0x6604, 0x96b6, 0x0043, 0x1120, 0x080c, 0xbd68, 0x0804, 0xa7cb,
- 0x6604, 0x96b6, 0x004b, 0x1120, 0x080c, 0xbd94, 0x0804, 0xa7cb,
- 0x6604, 0x96b6, 0x0033, 0x1120, 0x080c, 0xbcb1, 0x0804, 0xa7cb,
- 0x6604, 0x96b6, 0x0028, 0x1118, 0x080c, 0xbb94, 0x04e0, 0x6604,
- 0x96b6, 0x0029, 0x1118, 0x080c, 0xbbd5, 0x04a8, 0x6604, 0x96b6,
- 0x001f, 0x1118, 0x080c, 0xa2cf, 0x0470, 0x6604, 0x96b6, 0x0000,
- 0x1118, 0x080c, 0xa479, 0x0438, 0x6604, 0x96b6, 0x0022, 0x1118,
- 0x080c, 0xa363, 0x0400, 0x6604, 0x96b6, 0x003d, 0x1118, 0x080c,
- 0xa399, 0x00c8, 0x6604, 0x96b6, 0x0044, 0x1118, 0x080c, 0xa3d5,
- 0x0090, 0x6604, 0x96b6, 0x0049, 0x1118, 0x080c, 0xa404, 0x0058,
- 0x91b6, 0x0015, 0x1110, 0x0063, 0x0030, 0x91b6, 0x0016, 0x1128,
- 0x00be, 0x0804, 0xaaac, 0x00be, 0x0005, 0x080c, 0x9fa3, 0x0cd8,
- 0xa7e9, 0xa7f7, 0xa7e9, 0xa834, 0xa7e9, 0xa9ce, 0xaab9, 0xa7e9,
- 0xa7e9, 0xa7e9, 0xaa86, 0xa7e9, 0xaa9a, 0x0096, 0x080c, 0x154a,
- 0x6014, 0x2048, 0xa800, 0x2048, 0xa86b, 0x0103, 0x009e, 0x0804,
- 0x9f18, 0xa001, 0xa001, 0x0005, 0x6604, 0x96b6, 0x0004, 0x1130,
- 0x2001, 0x0001, 0x080c, 0x635e, 0x0804, 0x9f18, 0x0005, 0x00e6,
- 0x2071, 0x1800, 0x708c, 0x9086, 0x0074, 0x1500, 0x080c, 0xce5a,
- 0x1170, 0x6010, 0x00b6, 0x2058, 0x00e9, 0x00be, 0x2001, 0x0006,
- 0x080c, 0x6372, 0x080c, 0x308f, 0x080c, 0x9f18, 0x0088, 0x2001,
- 0x000a, 0x080c, 0x6372, 0x080c, 0x308f, 0x6003, 0x0001, 0x6007,
- 0x0001, 0x080c, 0x8718, 0x080c, 0x8c37, 0x0010, 0x080c, 0xa9b9,
- 0x00ee, 0x0005, 0x00d6, 0xb800, 0xd084, 0x0160, 0x9006, 0x080c,
- 0x635e, 0x2069, 0x185e, 0x6804, 0xd0a4, 0x0120, 0x2001, 0x0006,
- 0x080c, 0x639e, 0x00de, 0x0005, 0x00b6, 0x0096, 0x00d6, 0x2011,
- 0x1823, 0x2204, 0x9086, 0x0074, 0x1904, 0xa990, 0x6010, 0x2058,
- 0xbaa0, 0x9286, 0x007e, 0x1120, 0x080c, 0xabfe, 0x0804, 0xa8fd,
- 0x2001, 0x180d, 0x2004, 0xd08c, 0x0904, 0xa89f, 0x00d6, 0x080c,
- 0x72e5, 0x01a0, 0x0026, 0x2011, 0x0010, 0x080c, 0x6781, 0x002e,
- 0x0904, 0xa89e, 0x080c, 0x55bb, 0x1598, 0x6014, 0x2048, 0xa807,
- 0x0000, 0xa86b, 0x0103, 0xa833, 0xdead, 0x0450, 0x6010, 0x00b6,
- 0x2058, 0xb910, 0x00be, 0x9186, 0x00ff, 0x0580, 0x0026, 0x2011,
- 0x8008, 0x080c, 0x6781, 0x002e, 0x0548, 0x6014, 0x9005, 0x090c,
- 0x0dc4, 0x2048, 0xa868, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140,
- 0x2001, 0x0030, 0x900e, 0x2011, 0x4009, 0x080c, 0xbe00, 0x0040,
- 0x6014, 0x2048, 0xa807, 0x0000, 0xa86b, 0x0103, 0xa833, 0xdead,
- 0x6010, 0x2058, 0xb9a0, 0x0016, 0x080c, 0x308f, 0x080c, 0x9f18,
- 0x001e, 0x080c, 0x3162, 0x00de, 0x0804, 0xa993, 0x00de, 0x080c,
- 0xabf3, 0x6010, 0x2058, 0xbaa0, 0x9286, 0x0080, 0x1510, 0x6014,
- 0x9005, 0x01a8, 0x2048, 0xa868, 0x9084, 0x00ff, 0x9086, 0x0039,
- 0x1140, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xbe00,
- 0x0030, 0xa807, 0x0000, 0xa86b, 0x0103, 0xa833, 0x0200, 0x2001,
- 0x0006, 0x080c, 0x6372, 0x080c, 0x308f, 0x080c, 0x9f18, 0x0804,
- 0xa993, 0x080c, 0xa9a1, 0x6014, 0x9005, 0x0190, 0x2048, 0xa86c,
- 0xd0f4, 0x01e8, 0xa868, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1d08,
- 0x2001, 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xbe00, 0x08f8,
- 0x080c, 0xa997, 0x0160, 0x9006, 0x080c, 0x635e, 0x2001, 0x0004,
- 0x080c, 0x639e, 0x2001, 0x0007, 0x080c, 0x6372, 0x08a0, 0x2001,
- 0x0004, 0x080c, 0x6372, 0x6003, 0x0001, 0x6007, 0x0003, 0x080c,
- 0x8718, 0x080c, 0x8c37, 0x0804, 0xa993, 0xb85c, 0xd0e4, 0x0178,
- 0x080c, 0xbc49, 0x080c, 0x72e5, 0x0118, 0xd0dc, 0x1904, 0xa8bf,
- 0x2011, 0x1836, 0x2204, 0xc0ad, 0x2012, 0x0804, 0xa8bf, 0x080c,
- 0xbc7a, 0x2011, 0x1836, 0x2204, 0xc0a5, 0x2012, 0x0006, 0x080c,
- 0xcffa, 0x000e, 0x1904, 0xa8bf, 0xc0b5, 0x2012, 0x2001, 0x0006,
- 0x080c, 0x6372, 0x9006, 0x080c, 0x635e, 0x00c6, 0x2001, 0x180f,
- 0x2004, 0xd09c, 0x0520, 0x00f6, 0x2079, 0x0100, 0x00e6, 0x2071,
- 0x1800, 0x700c, 0x9084, 0x00ff, 0x78e6, 0x707a, 0x7010, 0x78ea,
- 0x707e, 0x908c, 0x00ff, 0x00ee, 0x780c, 0xc0b5, 0x780e, 0x00fe,
- 0x080c, 0x26e8, 0x00f6, 0x2100, 0x900e, 0x080c, 0x269f, 0x795a,
- 0x00fe, 0x9186, 0x0081, 0x01f0, 0x2009, 0x0081, 0x00e0, 0x2009,
- 0x00ef, 0x00f6, 0x2079, 0x0100, 0x79ea, 0x78e7, 0x0000, 0x7932,
- 0x7936, 0x780c, 0xc0b5, 0x780e, 0x00fe, 0x080c, 0x26e8, 0x00f6,
- 0x2079, 0x1800, 0x797e, 0x2100, 0x900e, 0x797a, 0x080c, 0x269f,
- 0x795a, 0x00fe, 0x8108, 0x080c, 0x63c1, 0x2b00, 0x00ce, 0x1904,
- 0xa8bf, 0x6012, 0x2009, 0x180f, 0x210c, 0xd19c, 0x0150, 0x2009,
- 0x027c, 0x210c, 0x918c, 0x00ff, 0xb912, 0x2009, 0x027d, 0x210c,
- 0xb916, 0x2001, 0x0002, 0x080c, 0x6372, 0x6023, 0x0001, 0x6003,
- 0x0001, 0x6007, 0x0002, 0x080c, 0x8718, 0x080c, 0x8c37, 0x0018,
- 0x080c, 0xa717, 0x0431, 0x00de, 0x009e, 0x00be, 0x0005, 0x2001,
- 0x1810, 0x2004, 0xd0a4, 0x0120, 0x2001, 0x185f, 0x2004, 0xd0ac,
- 0x0005, 0x00e6, 0x080c, 0xd2aa, 0x0190, 0x2071, 0x0260, 0x7108,
- 0x720c, 0x918c, 0x00ff, 0x1118, 0x9284, 0xff00, 0x0140, 0x6010,
- 0x2058, 0xb8a0, 0x9084, 0xff80, 0x1110, 0xb912, 0xba16, 0x00ee,
- 0x0005, 0x2030, 0x2001, 0x0007, 0x080c, 0x6372, 0x080c, 0x55bb,
- 0x1120, 0x2001, 0x0007, 0x080c, 0x639e, 0x080c, 0x308f, 0x6020,
- 0x9086, 0x000a, 0x1108, 0x0005, 0x0804, 0x9f18, 0x00b6, 0x00e6,
- 0x0026, 0x0016, 0x2071, 0x1800, 0x708c, 0x9086, 0x0014, 0x1904,
- 0xaa7d, 0x2001, 0x180d, 0x2004, 0xd08c, 0x0904, 0xaa30, 0x00d6,
- 0x080c, 0x72e5, 0x01a0, 0x0026, 0x2011, 0x0010, 0x080c, 0x6781,
- 0x002e, 0x0904, 0xaa2f, 0x080c, 0x55bb, 0x1598, 0x6014, 0x2048,
- 0xa807, 0x0000, 0xa86b, 0x0103, 0xa833, 0xdead, 0x0450, 0x6010,
- 0x00b6, 0x2058, 0xb910, 0x00be, 0x9186, 0x00ff, 0x0580, 0x0026,
- 0x2011, 0x8008, 0x080c, 0x6781, 0x002e, 0x0548, 0x6014, 0x9005,
- 0x090c, 0x0dc4, 0x2048, 0xa868, 0x9084, 0x00ff, 0x9086, 0x0039,
- 0x1140, 0x2001, 0x0030, 0x900e, 0x2011, 0x4009, 0x080c, 0xbe00,
- 0x0040, 0x6014, 0x2048, 0xa807, 0x0000, 0xa86b, 0x0103, 0xa833,
- 0xdead, 0x6010, 0x2058, 0xb9a0, 0x0016, 0x080c, 0x308f, 0x080c,
- 0x9f18, 0x001e, 0x080c, 0x3162, 0x00de, 0x0804, 0xaa81, 0x00de,
- 0x080c, 0x55bb, 0x1170, 0x6014, 0x9005, 0x1158, 0x0036, 0x0046,
- 0x6010, 0x2058, 0xbba0, 0x2021, 0x0006, 0x080c, 0x4c74, 0x004e,
- 0x003e, 0x00d6, 0x6010, 0x2058, 0x080c, 0x64ac, 0x080c, 0xa822,
- 0x00de, 0x080c, 0xacce, 0x1588, 0x6010, 0x2058, 0xb890, 0x9005,
- 0x0560, 0x2001, 0x0006, 0x080c, 0x6372, 0x0096, 0x6014, 0x904d,
- 0x01d0, 0xa868, 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001,
- 0x0000, 0x900e, 0x2011, 0x4000, 0x080c, 0xbe00, 0x0060, 0xa868,
- 0x9084, 0x00ff, 0x9086, 0x0029, 0x0130, 0xa807, 0x0000, 0xa86b,
- 0x0103, 0xa833, 0x0200, 0x009e, 0x080c, 0x308f, 0x6020, 0x9086,
- 0x000a, 0x0138, 0x080c, 0x9f18, 0x0020, 0x080c, 0xa717, 0x080c,
- 0xa9b9, 0x001e, 0x002e, 0x00ee, 0x00be, 0x0005, 0x2011, 0x1823,
- 0x2204, 0x9086, 0x0014, 0x1160, 0x2001, 0x0002, 0x080c, 0x6372,
- 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x8718, 0x0804, 0x8c37,
- 0x0804, 0xa9b9, 0x2030, 0x2011, 0x1823, 0x2204, 0x9086, 0x0004,
- 0x1148, 0x96b6, 0x000b, 0x1120, 0x2001, 0x0007, 0x080c, 0x6372,
- 0x0804, 0x9f18, 0x0804, 0xa9b9, 0x0002, 0xa7e9, 0xaac4, 0xa7e9,
- 0xab05, 0xa7e9, 0xabb0, 0xaab9, 0xa7ec, 0xa7e9, 0xabc2, 0xa7e9,
- 0xabd2, 0x6604, 0x9686, 0x0003, 0x0904, 0xa9ce, 0x96b6, 0x001e,
- 0x1110, 0x080c, 0x9f18, 0x0005, 0x00b6, 0x00d6, 0x00c6, 0x080c,
- 0xabe2, 0x11a0, 0x9006, 0x080c, 0x635e, 0x080c, 0x3066, 0x080c,
- 0xbf0d, 0x2001, 0x0002, 0x080c, 0x6372, 0x6003, 0x0001, 0x6007,
- 0x0002, 0x080c, 0x8718, 0x080c, 0x8c37, 0x0418, 0x2009, 0x026e,
- 0x2104, 0x9086, 0x0009, 0x1160, 0x6010, 0x2058, 0xb840, 0x9084,
- 0x00ff, 0x9005, 0x0180, 0x8001, 0xb842, 0x601b, 0x000a, 0x0088,
- 0x2009, 0x026f, 0x2104, 0x9084, 0xff00, 0x908e, 0x1900, 0x0148,
- 0x908e, 0x1e00, 0x0990, 0x080c, 0x3066, 0x080c, 0xbf0d, 0x080c,
- 0xa9b9, 0x00ce, 0x00de, 0x00be, 0x0005, 0x0096, 0x00b6, 0x0026,
- 0x9016, 0x080c, 0xabf0, 0x00d6, 0x2069, 0x1959, 0x2d04, 0x9005,
- 0x0168, 0x6010, 0x2058, 0xb8a0, 0x9086, 0x007e, 0x1138, 0x2069,
- 0x181f, 0x2d04, 0x8000, 0x206a, 0x00de, 0x0010, 0x00de, 0x0088,
- 0x9006, 0x080c, 0x635e, 0x2001, 0x0002, 0x080c, 0x6372, 0x6003,
- 0x0001, 0x6007, 0x0002, 0x080c, 0x8718, 0x080c, 0x8c37, 0x0804,
- 0xab80, 0x080c, 0xb955, 0x01b0, 0x6014, 0x2048, 0xa868, 0x2010,
- 0x9086, 0x0139, 0x1138, 0x6007, 0x0016, 0x2001, 0x0002, 0x080c,
- 0xbe57, 0x00b0, 0x6014, 0x2048, 0xa868, 0xd0fc, 0x0118, 0x2001,
- 0x0001, 0x0ca8, 0x2001, 0x180e, 0x2004, 0xd0dc, 0x0148, 0x6010,
- 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x1110, 0x9006, 0x0c38,
- 0x080c, 0xa717, 0x2009, 0x026e, 0x2134, 0x96b4, 0x00ff, 0x9686,
- 0x0005, 0x0510, 0x9686, 0x000b, 0x01c8, 0x2009, 0x026f, 0x2104,
- 0x9084, 0xff00, 0x1118, 0x9686, 0x0009, 0x01b0, 0x9086, 0x1900,
- 0x1168, 0x9686, 0x0009, 0x0180, 0x2001, 0x0004, 0x080c, 0x6372,
- 0x2001, 0x0028, 0x601a, 0x6007, 0x0052, 0x0010, 0x080c, 0xa9b9,
- 0x002e, 0x00be, 0x009e, 0x0005, 0x9286, 0x0139, 0x0160, 0x6014,
- 0x2048, 0x080c, 0xb955, 0x0140, 0xa868, 0x9086, 0x0139, 0x0118,
- 0xa86c, 0xd0fc, 0x0108, 0x0c50, 0x6010, 0x2058, 0xb840, 0x9084,
- 0x00ff, 0x9005, 0x0138, 0x8001, 0xb842, 0x601b, 0x000a, 0x6007,
- 0x0016, 0x08f0, 0xb8a0, 0x9086, 0x007e, 0x1138, 0x00e6, 0x2071,
- 0x1800, 0x080c, 0x5e89, 0x00ee, 0x0010, 0x080c, 0x3066, 0x0870,
- 0x2001, 0x0004, 0x080c, 0x6372, 0x04d9, 0x1140, 0x6003, 0x0001,
- 0x6007, 0x0003, 0x080c, 0x8718, 0x0804, 0x8c37, 0x080c, 0xa717,
- 0x0804, 0xa9b9, 0x0469, 0x1160, 0x2001, 0x0008, 0x080c, 0x6372,
- 0x6003, 0x0001, 0x6007, 0x0005, 0x080c, 0x8718, 0x0804, 0x8c37,
- 0x0804, 0xa9b9, 0x00e9, 0x1160, 0x2001, 0x000a, 0x080c, 0x6372,
- 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x8718, 0x0804, 0x8c37,
- 0x0804, 0xa9b9, 0x2009, 0x026e, 0x2104, 0x9086, 0x0003, 0x1138,
- 0x2009, 0x026f, 0x2104, 0x9084, 0xff00, 0x9086, 0x2a00, 0x0005,
- 0x9085, 0x0001, 0x0005, 0x00b6, 0x00c6, 0x0016, 0x6110, 0x2158,
- 0x080c, 0x6420, 0x001e, 0x00ce, 0x00be, 0x0005, 0x00b6, 0x00f6,
- 0x00e6, 0x00d6, 0x0036, 0x0016, 0x6010, 0x2058, 0x2009, 0x1836,
- 0x2104, 0x9085, 0x0003, 0x200a, 0x080c, 0xaca0, 0x05d0, 0x2009,
- 0x1836, 0x2104, 0xc0cd, 0x200a, 0x080c, 0x6742, 0x0158, 0x9006,
- 0x2020, 0x2009, 0x002a, 0x080c, 0xd156, 0x2001, 0x180c, 0x200c,
- 0xc195, 0x2102, 0x6120, 0x0016, 0x6023, 0x0007, 0x2019, 0x002a,
- 0x2009, 0x0001, 0x00e6, 0x2071, 0x1800, 0x00c6, 0x2061, 0x0100,
- 0x080c, 0x3037, 0x00ce, 0x6010, 0x9005, 0x090c, 0x0dc4, 0x080c,
- 0x2e5f, 0x00ee, 0x001e, 0x6122, 0x00c6, 0x0156, 0x20a9, 0x0781,
- 0x2009, 0x007f, 0x080c, 0x3162, 0x8108, 0x1f04, 0xac42, 0x015e,
- 0x00ce, 0x080c, 0xabf3, 0x2071, 0x0260, 0x2079, 0x0200, 0x7817,
- 0x0001, 0x2001, 0x1836, 0x200c, 0xc1c5, 0x7018, 0xd0fc, 0x0110,
- 0xd0dc, 0x0118, 0x7038, 0xd0dc, 0x1108, 0xc1c4, 0x7817, 0x0000,
- 0x2001, 0x1836, 0x2102, 0x9184, 0x0050, 0x9086, 0x0050, 0x0588,
- 0x2079, 0x0100, 0x2e04, 0x9084, 0x00ff, 0x2069, 0x181e, 0x206a,
- 0x78e6, 0x0006, 0x8e70, 0x2e04, 0x2069, 0x181f, 0x206a, 0x78ea,
- 0x7832, 0x7836, 0x2010, 0x9084, 0xff00, 0x001e, 0x9105, 0x2009,
- 0x182b, 0x200a, 0x2200, 0x9084, 0x00ff, 0x2008, 0x080c, 0x26e8,
- 0x080c, 0x72e5, 0x0170, 0x2071, 0x0260, 0x2069, 0x195f, 0x7048,
- 0x206a, 0x704c, 0x6806, 0x7050, 0x680a, 0x7054, 0x680e, 0x080c,
- 0xbc49, 0x001e, 0x003e, 0x00de, 0x00ee, 0x00fe, 0x00be, 0x0005,
- 0x0096, 0x0026, 0x0036, 0x00e6, 0x0156, 0x2019, 0x182b, 0x231c,
- 0x83ff, 0x01f0, 0x2071, 0x0260, 0x7200, 0x9294, 0x00ff, 0x7004,
- 0x9084, 0xff00, 0x9205, 0x9306, 0x1198, 0x2011, 0x0276, 0x20a9,
- 0x0004, 0x2b48, 0x2019, 0x000a, 0x080c, 0xad8d, 0x1148, 0x2011,
- 0x027a, 0x20a9, 0x0004, 0x2019, 0x0006, 0x080c, 0xad8d, 0x1100,
- 0x015e, 0x00ee, 0x003e, 0x002e, 0x009e, 0x0005, 0x00e6, 0x2071,
- 0x0260, 0x7034, 0x9086, 0x0014, 0x11a8, 0x7038, 0x9086, 0x0800,
- 0x1188, 0x703c, 0xd0ec, 0x0160, 0x9084, 0x0f00, 0x9086, 0x0100,
- 0x1138, 0x7054, 0xd0a4, 0x1110, 0xd0ac, 0x0110, 0x9006, 0x0010,
- 0x9085, 0x0001, 0x00ee, 0x0005, 0x00e6, 0x0096, 0x00c6, 0x0076,
- 0x0056, 0x0046, 0x0026, 0x0006, 0x0126, 0x2091, 0x8000, 0x2029,
- 0x19cd, 0x252c, 0x2021, 0x19d3, 0x2424, 0x2061, 0x1cc8, 0x2071,
- 0x1800, 0x7250, 0x7070, 0x9202, 0x1a04, 0xad63, 0x080c, 0xd187,
- 0x0904, 0xad5c, 0x6720, 0x9786, 0x0007, 0x0904, 0xad5c, 0x2500,
- 0x9c06, 0x0904, 0xad5c, 0x2400, 0x9c06, 0x0904, 0xad5c, 0x3e08,
- 0x81ff, 0x0190, 0x6010, 0x9005, 0x0178, 0x00b6, 0x2058, 0x9186,
- 0x0001, 0x1148, 0xbaa0, 0x9286, 0x007e, 0x1128, 0x6004, 0x9086,
- 0x0002, 0x0904, 0xad77, 0x00be, 0x00c6, 0x6000, 0x9086, 0x0004,
- 0x1110, 0x080c, 0x1950, 0x9786, 0x000a, 0x0148, 0x080c, 0xbb56,
- 0x1130, 0x00ce, 0x080c, 0xa717, 0x080c, 0x9f42, 0x00e8, 0x6014,
- 0x2048, 0x080c, 0xb955, 0x01a8, 0x9786, 0x0003, 0x1530, 0xa86b,
- 0x0103, 0xa880, 0xd0cc, 0x0130, 0x0096, 0xa87c, 0x2048, 0x080c,
- 0x0fb3, 0x009e, 0xab7e, 0xa87b, 0x0000, 0x080c, 0x6b11, 0x080c,
- 0xbb39, 0x080c, 0x9f42, 0x00ce, 0x9ce0, 0x000c, 0x7064, 0x9c02,
- 0x1210, 0x0804, 0xad01, 0x012e, 0x000e, 0x002e, 0x004e, 0x005e,
- 0x007e, 0x00ce, 0x009e, 0x00ee, 0x0005, 0x9786, 0x0006, 0x1118,
- 0x080c, 0xd101, 0x0c30, 0x9786, 0x000a, 0x09e0, 0x0880, 0x00be,
- 0x0c18, 0x220c, 0x2304, 0x9106, 0x1130, 0x8210, 0x8318, 0x1f04,
- 0xad79, 0x9006, 0x0005, 0x2304, 0x9102, 0x0218, 0x2001, 0x0001,
- 0x0008, 0x9006, 0x918d, 0x0001, 0x0005, 0x0136, 0x01c6, 0x0016,
- 0x8906, 0x8006, 0x8007, 0x908c, 0x003f, 0x21e0, 0x9084, 0xffc0,
- 0x9300, 0x2098, 0x3518, 0x20a9, 0x0001, 0x220c, 0x4002, 0x910e,
- 0x1140, 0x8210, 0x8319, 0x1dc8, 0x9006, 0x001e, 0x01ce, 0x013e,
- 0x0005, 0x220c, 0x9102, 0x0218, 0x2001, 0x0001, 0x0010, 0x2001,
- 0x0000, 0x918d, 0x0001, 0x001e, 0x01ce, 0x013e, 0x0005, 0x6004,
- 0x908a, 0x0054, 0x1a0c, 0x0dc4, 0x080c, 0xbb45, 0x0120, 0x080c,
- 0xbb56, 0x0168, 0x0028, 0x080c, 0x308f, 0x080c, 0xbb56, 0x0138,
- 0x080c, 0x8b2b, 0x080c, 0x9f18, 0x080c, 0x8c37, 0x0005, 0x080c,
- 0xa717, 0x0cb0, 0x9182, 0x0054, 0x1220, 0x9182, 0x0040, 0x0208,
- 0x000a, 0x0005, 0xadee, 0xadee, 0xadee, 0xadee, 0xadee, 0xadee,
- 0xadee, 0xadee, 0xadee, 0xadee, 0xadee, 0xadf0, 0xadf0, 0xadf0,
- 0xadf0, 0xadee, 0xadee, 0xadee, 0xadf0, 0xadee, 0x080c, 0x0dc4,
- 0x6003, 0x0001, 0x6106, 0x080c, 0x86d0, 0x0126, 0x2091, 0x8000,
- 0x080c, 0x8c37, 0x012e, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004,
- 0x9082, 0x0040, 0x0804, 0xae86, 0x9186, 0x0027, 0x1520, 0x080c,
- 0x8b2b, 0x080c, 0x3066, 0x080c, 0xbf0d, 0x0096, 0x6114, 0x2148,
- 0x080c, 0xb955, 0x0198, 0x080c, 0xbb56, 0x1118, 0x080c, 0xa717,
- 0x0068, 0xa86b, 0x0103, 0xa87f, 0x0029, 0xa87b, 0x0000, 0xa980,
- 0xc1c5, 0xa982, 0x080c, 0x6b1d, 0x080c, 0xbb39, 0x009e, 0x080c,
- 0x9f18, 0x0804, 0x8c37, 0x9186, 0x0014, 0x1120, 0x6004, 0x9082,
- 0x0040, 0x00b8, 0x9186, 0x0046, 0x0150, 0x9186, 0x0045, 0x0138,
- 0x9186, 0x0053, 0x0120, 0x9186, 0x0048, 0x190c, 0x0dc4, 0x080c,
- 0xbf19, 0x0130, 0x6000, 0x9086, 0x0002, 0x1110, 0x0804, 0xaeb8,
- 0x0005, 0x0002, 0xae60, 0xae5e, 0xae5e, 0xae5e, 0xae5e, 0xae5e,
- 0xae5e, 0xae5e, 0xae5e, 0xae5e, 0xae5e, 0xae7b, 0xae7b, 0xae7b,
- 0xae7b, 0xae5e, 0xae5e, 0xae5e, 0xae7b, 0xae5e, 0x080c, 0x0dc4,
- 0x080c, 0x8b2b, 0x0096, 0x6114, 0x2148, 0x080c, 0xb955, 0x0168,
- 0xa86b, 0x0103, 0xa87f, 0x0006, 0xa87b, 0x0000, 0xa884, 0xc0ec,
- 0xa886, 0x080c, 0x6b1d, 0x080c, 0xbb39, 0x009e, 0x080c, 0x9f18,
- 0x080c, 0x8c37, 0x0005, 0x080c, 0x8b2b, 0x080c, 0xbb56, 0x090c,
- 0xa717, 0x080c, 0x9f18, 0x080c, 0x8c37, 0x0005, 0x0002, 0xae9d,
- 0xae9b, 0xae9b, 0xae9b, 0xae9b, 0xae9b, 0xae9b, 0xae9b, 0xae9b,
- 0xae9b, 0xae9b, 0xaeb0, 0xaeb0, 0xaeb0, 0xaeb0, 0xae9b, 0xae9b,
- 0xae9b, 0xaeb0, 0xae9b, 0x080c, 0x0dc4, 0x0096, 0x080c, 0x8b2b,
- 0x6014, 0x2048, 0xa980, 0xd1ac, 0x0140, 0x6003, 0x0004, 0xa880,
- 0x9085, 0x0400, 0xa882, 0x009e, 0x0005, 0x6003, 0x0002, 0x0cb8,
- 0x080c, 0x8b2b, 0x080c, 0xbf10, 0x6003, 0x000f, 0x0804, 0x8c37,
- 0x9182, 0x0054, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005,
- 0xaed4, 0xaed4, 0xaed4, 0xaed4, 0xaed4, 0xaed6, 0xaf79, 0xaed4,
- 0xafab, 0xaed4, 0xaed4, 0xaed4, 0xaed4, 0xaed4, 0xaed4, 0xaed4,
- 0xaed4, 0xaed4, 0xaed4, 0xafab, 0x080c, 0x0dc4, 0x00b6, 0x0096,
- 0x6114, 0x2148, 0x7644, 0x96b4, 0x0fff, 0x86ff, 0x11d8, 0xa87f,
- 0x0000, 0xa86b, 0x0103, 0xae7a, 0xa880, 0xd0ac, 0x0128, 0xa834,
- 0xa938, 0x9115, 0x190c, 0xb137, 0x080c, 0x6934, 0x6210, 0x2258,
- 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0x080c, 0x9f18, 0x009e,
- 0x00be, 0x0005, 0x080c, 0xbf3b, 0x1dd0, 0x968c, 0x0c00, 0x0120,
- 0x7348, 0xab96, 0x734c, 0xab92, 0x968c, 0x00ff, 0x9186, 0x0002,
- 0x0508, 0x9186, 0x0028, 0x1118, 0xa87f, 0x001c, 0x00e8, 0xd6dc,
- 0x01a0, 0xa87f, 0x0015, 0xa880, 0xd0ac, 0x0170, 0xa938, 0xaa34,
- 0x2100, 0x9205, 0x0148, 0x7048, 0x9106, 0x1118, 0x704c, 0x9206,
- 0x0118, 0xa996, 0xaa92, 0xc6dc, 0x0038, 0xd6d4, 0x0118, 0xa87f,
- 0x0007, 0x0010, 0xa87f, 0x0000, 0xa86b, 0x0103, 0xae7a, 0x901e,
- 0xd6c4, 0x01d8, 0x9686, 0x0100, 0x1130, 0x7064, 0x9005, 0x1118,
- 0xc6c4, 0x0804, 0xaedd, 0x735c, 0xab8a, 0x83ff, 0x0170, 0x938a,
- 0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308, 0x2019, 0x0018,
- 0x2011, 0x0026, 0x080c, 0xb54b, 0x003e, 0xd6cc, 0x0904, 0xaeec,
- 0x7154, 0xa98e, 0x81ff, 0x0904, 0xaeec, 0x9192, 0x0021, 0x1278,
- 0x8304, 0x9098, 0x0018, 0x2011, 0x002a, 0x080c, 0xb54b, 0x2011,
- 0x0205, 0x2013, 0x0000, 0x080c, 0xbe96, 0x0804, 0xaeec, 0xa86c,
- 0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98e, 0x0c50, 0x00a6, 0x2950,
- 0x080c, 0xb4ea, 0x00ae, 0x080c, 0xbe96, 0x080c, 0xb53b, 0x0804,
- 0xaeee, 0x0096, 0x00f6, 0x6003, 0x0003, 0x6007, 0x0043, 0x2079,
- 0x026c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6014, 0x2048, 0xa880,
- 0xd0ac, 0x0140, 0x6003, 0x0002, 0x00fe, 0x009e, 0x0005, 0x2130,
- 0x2228, 0x0058, 0x2400, 0xa9b0, 0x910a, 0x2300, 0xaab4, 0x9213,
- 0x2600, 0x9102, 0x2500, 0x9203, 0x0e90, 0xac36, 0xab3a, 0xae46,
- 0xad4a, 0x00fe, 0x2c10, 0x080c, 0x1aa2, 0x080c, 0x8735, 0x080c,
- 0x8d06, 0x009e, 0x0005, 0x0005, 0x9182, 0x0054, 0x1220, 0x9182,
- 0x0040, 0x0208, 0x000a, 0x0005, 0xafc8, 0xafc8, 0xafc8, 0xafc8,
- 0xafc8, 0xafca, 0xb060, 0xafc8, 0xafc8, 0xb077, 0xb0fc, 0xafc8,
- 0xafc8, 0xafc8, 0xafc8, 0xb10f, 0xafc8, 0xafc8, 0xafc8, 0xafc8,
- 0x080c, 0x0dc4, 0x0076, 0x00a6, 0x00e6, 0x0096, 0x2071, 0x0260,
- 0x6114, 0x2150, 0x7644, 0xb67a, 0x96b4, 0x0fff, 0xb780, 0xc7e5,
- 0xb782, 0x6210, 0x00b6, 0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211,
- 0xba3e, 0x00be, 0x86ff, 0x0904, 0xb05b, 0x9694, 0xff00, 0x9284,
- 0x0c00, 0x0120, 0x7048, 0xb096, 0x704c, 0xb092, 0x9284, 0x0300,
- 0x0904, 0xb05b, 0x080c, 0x1001, 0x090c, 0x0dc4, 0x2900, 0xb07e,
- 0xb780, 0xc7cd, 0xb782, 0xa86b, 0x0103, 0xb06c, 0xa86e, 0xb070,
- 0xa872, 0xb074, 0xa876, 0xae7a, 0x968c, 0x0c00, 0x0120, 0x7348,
- 0xab96, 0x734c, 0xab92, 0x968c, 0x00ff, 0x9186, 0x0002, 0x0180,
- 0x9186, 0x0028, 0x1118, 0xa87f, 0x001c, 0x0060, 0xd6dc, 0x0118,
- 0xa87f, 0x0015, 0x0038, 0xd6d4, 0x0118, 0xa87f, 0x0007, 0x0010,
- 0xa87f, 0x0000, 0xaf82, 0xb084, 0xa886, 0xb088, 0xa88a, 0x901e,
- 0xd6c4, 0x0190, 0x735c, 0xab8a, 0x83ff, 0x0170, 0x938a, 0x0009,
- 0x0210, 0x2019, 0x0008, 0x0036, 0x2308, 0x2019, 0x0018, 0x2011,
- 0x0026, 0x080c, 0xb54b, 0x003e, 0xd6cc, 0x01e8, 0x7154, 0xa98e,
- 0x81ff, 0x01c8, 0x9192, 0x0021, 0x1260, 0x8304, 0x9098, 0x0018,
- 0x2011, 0x002a, 0x080c, 0xb54b, 0x2011, 0x0205, 0x2013, 0x0000,
- 0x0050, 0xb06c, 0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98e, 0x0c68,
- 0x2950, 0x080c, 0xb4ea, 0x009e, 0x00ee, 0x00ae, 0x007e, 0x0005,
- 0x00f6, 0x00a6, 0x6003, 0x0003, 0x2079, 0x026c, 0x7c04, 0x7b00,
- 0x7e0c, 0x7d08, 0x6014, 0x2050, 0xb436, 0xb33a, 0xb646, 0xb54a,
- 0x00ae, 0x00fe, 0x2c10, 0x080c, 0x1aa2, 0x0804, 0x95f0, 0x6003,
- 0x0002, 0x6004, 0x9086, 0x0040, 0x11c8, 0x0096, 0x6014, 0x2048,
- 0xa880, 0xd0ac, 0x0160, 0x601c, 0xd084, 0x1130, 0x00f6, 0x2c00,
- 0x2078, 0x080c, 0x1679, 0x00fe, 0x6003, 0x0004, 0x0010, 0x6003,
- 0x0002, 0x009e, 0x080c, 0x8b2b, 0x080c, 0x8c37, 0x0096, 0x080c,
- 0x8be7, 0x080c, 0x8d06, 0x6114, 0x2148, 0xa980, 0xd1e4, 0x0904,
- 0xb0fa, 0xd1cc, 0x05c8, 0xa97c, 0xa86c, 0xd0fc, 0x0540, 0x0016,
- 0xa880, 0x0006, 0xa884, 0x0006, 0xa860, 0x20e8, 0xa85c, 0x9080,
- 0x001a, 0x20a0, 0x810e, 0x810e, 0x810f, 0x9184, 0x003f, 0x20e0,
- 0x9184, 0xffc0, 0x9080, 0x001a, 0x2098, 0x0156, 0x20a9, 0x0020,
- 0x4003, 0x015e, 0x000e, 0xa886, 0x000e, 0xc0cc, 0xa882, 0x001e,
- 0xa878, 0x0006, 0x2148, 0x080c, 0x0fb3, 0x001e, 0x0448, 0x0016,
- 0x080c, 0x0fb3, 0x009e, 0xa880, 0xc0cc, 0xa882, 0xa978, 0x0016,
- 0x080c, 0xb53b, 0x001e, 0x00e0, 0xa86b, 0x0103, 0xa978, 0x9184,
- 0x00ff, 0x90b6, 0x0002, 0x0180, 0x9086, 0x0028, 0x1118, 0xa87f,
- 0x001c, 0x0060, 0xd1dc, 0x0118, 0xa87f, 0x0015, 0x0038, 0xd1d4,
- 0x0118, 0xa87f, 0x0007, 0x0010, 0xa87f, 0x0000, 0x080c, 0x6934,
- 0x080c, 0x9f18, 0x009e, 0x0005, 0x6004, 0x9086, 0x0040, 0x1120,
- 0x080c, 0x8b2b, 0x080c, 0x8c37, 0x2019, 0x0001, 0x080c, 0x9964,
- 0x6003, 0x0002, 0x080c, 0x8be7, 0x080c, 0x8d06, 0x0005, 0x6004,
- 0x9086, 0x0040, 0x1120, 0x080c, 0x8b2b, 0x080c, 0x8c37, 0x2019,
- 0x0001, 0x080c, 0x9964, 0x080c, 0x8be7, 0x080c, 0x3066, 0x080c,
- 0xbf0d, 0x0096, 0x6114, 0x2148, 0x080c, 0xb955, 0x0150, 0xa86b,
- 0x0103, 0xa87f, 0x0029, 0xa87b, 0x0000, 0x080c, 0x6b1d, 0x080c,
- 0xbb39, 0x009e, 0x080c, 0x9f18, 0x080c, 0x8d06, 0x0005, 0xa87f,
+ 0x0086, 0x2940, 0x080c, 0x10f7, 0x008e, 0x9085, 0x0001, 0x009e,
+ 0x0005, 0x00e6, 0x00d6, 0x0026, 0x7008, 0x9084, 0x00ff, 0x6210,
+ 0x00b6, 0x2258, 0xba10, 0x00be, 0x9206, 0x1520, 0x700c, 0x6210,
+ 0x00b6, 0x2258, 0xba14, 0x00be, 0x9206, 0x11e0, 0x6043, 0x0000,
+ 0x2c68, 0x0016, 0x2009, 0x0035, 0x080c, 0xc83f, 0x001e, 0x1158,
+ 0x622c, 0x2268, 0x2071, 0x026c, 0x6b20, 0x9386, 0x0003, 0x0130,
+ 0x9386, 0x0006, 0x0128, 0x080c, 0xa39d, 0x0020, 0x0039, 0x0010,
+ 0x080c, 0xaa1c, 0x002e, 0x00de, 0x00ee, 0x0005, 0x0096, 0x6814,
+ 0x2048, 0x9186, 0x0015, 0x0904, 0xaa02, 0x918e, 0x0016, 0x1904,
+ 0xaa1a, 0x700c, 0x908c, 0xff00, 0x9186, 0x1700, 0x0120, 0x9186,
+ 0x0300, 0x1904, 0xa9dc, 0x89ff, 0x1138, 0x6800, 0x9086, 0x000f,
+ 0x0904, 0xa9bf, 0x0804, 0xaa18, 0x6808, 0x9086, 0xffff, 0x1904,
+ 0xaa04, 0xa880, 0x9084, 0x0060, 0x9086, 0x0020, 0x1128, 0xa83c,
+ 0xa940, 0x9105, 0x1904, 0xaa04, 0x6824, 0xd084, 0x1904, 0xaa04,
+ 0xd0b4, 0x0158, 0x0016, 0x2001, 0x1962, 0x200c, 0x6018, 0x9102,
+ 0x9082, 0x0005, 0x001e, 0x1a04, 0xaa04, 0x080c, 0xc3b4, 0x685c,
+ 0xa886, 0xa880, 0xc0dc, 0xc0f4, 0xc0d4, 0xa882, 0x0026, 0x900e,
+ 0x6a18, 0x2001, 0x000a, 0x080c, 0x871c, 0xa888, 0x920a, 0x0208,
+ 0x8011, 0xaa8a, 0x82ff, 0x002e, 0x1138, 0x00c6, 0x2d60, 0x080c,
+ 0xbed5, 0x00ce, 0x0804, 0xaa18, 0x00c6, 0xa86c, 0xd0fc, 0x1118,
+ 0x080c, 0x602e, 0x0010, 0x080c, 0x63e9, 0x00ce, 0x1904, 0xaa04,
+ 0x00c6, 0x2d60, 0x080c, 0xa39d, 0x00ce, 0x0804, 0xaa18, 0x00c6,
+ 0x080c, 0xa3ec, 0x0198, 0x6017, 0x0000, 0x6810, 0x6012, 0x080c,
+ 0xc640, 0x6023, 0x0003, 0x6904, 0x00c6, 0x2d60, 0x080c, 0xa39d,
+ 0x00ce, 0x080c, 0xa419, 0x00ce, 0x0804, 0xaa18, 0x2001, 0x1964,
+ 0x2004, 0x6842, 0x00ce, 0x04e0, 0x7008, 0x9086, 0x000b, 0x11c8,
+ 0x6010, 0x00b6, 0x2058, 0xb900, 0xc1bc, 0xb902, 0x00be, 0x00c6,
+ 0x2d60, 0xa87f, 0x0003, 0x080c, 0xc883, 0x6007, 0x0085, 0x6003,
+ 0x000b, 0x6023, 0x0002, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x00ce,
+ 0x00f8, 0x700c, 0x9086, 0x2a00, 0x1138, 0x2001, 0x1964, 0x2004,
+ 0x6842, 0x00b0, 0x0489, 0x00b0, 0x89ff, 0x090c, 0x0dc3, 0x00c6,
+ 0x00d6, 0x2d60, 0xa86b, 0x0103, 0xa87f, 0x0003, 0xa87b, 0x0000,
+ 0x080c, 0x6a1c, 0x080c, 0xc3b4, 0x080c, 0xa3cf, 0x00de, 0x00ce,
+ 0x080c, 0xa39d, 0x009e, 0x0005, 0x9186, 0x0015, 0x1128, 0x2001,
+ 0x1964, 0x2004, 0x6842, 0x0068, 0x918e, 0x0016, 0x1160, 0x00c6,
+ 0x2d00, 0x2060, 0x080c, 0xdf7c, 0x080c, 0x86d8, 0x080c, 0xa39d,
+ 0x00ce, 0x080c, 0xa39d, 0x0005, 0x0026, 0x0036, 0x0046, 0x7228,
+ 0xacb4, 0xabb0, 0xd2f4, 0x0130, 0x2001, 0x1964, 0x2004, 0x6842,
+ 0x0804, 0xaa96, 0x00c6, 0x2d60, 0x080c, 0xbdd8, 0x00ce, 0x6804,
+ 0x9086, 0x0050, 0x1168, 0x00c6, 0x2d00, 0x2060, 0x6003, 0x0001,
+ 0x6007, 0x0050, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x00ce, 0x04f0,
+ 0x6800, 0x9086, 0x000f, 0x01a8, 0x89ff, 0x090c, 0x0dc3, 0x6800,
+ 0x9086, 0x0004, 0x1190, 0xa880, 0xd0ac, 0x0178, 0xa843, 0x0fff,
+ 0xa83f, 0x0fff, 0xa884, 0xc0fc, 0xa886, 0x2001, 0x0001, 0x6832,
+ 0x0400, 0x2001, 0x0007, 0x6832, 0x00e0, 0xa880, 0xd0b4, 0x1150,
+ 0xd0ac, 0x0db8, 0x6824, 0xd0f4, 0x1d48, 0xa838, 0xa934, 0x9105,
+ 0x0d80, 0x0c20, 0xd2ec, 0x1d68, 0x7024, 0x9306, 0x1118, 0x7020,
+ 0x9406, 0x0d38, 0x7020, 0x683e, 0x7024, 0x683a, 0x2001, 0x0005,
+ 0x6832, 0x080c, 0xc537, 0x080c, 0x8e38, 0x0010, 0x080c, 0xa39d,
+ 0x004e, 0x003e, 0x002e, 0x0005, 0x00e6, 0x00d6, 0x0026, 0x7008,
+ 0x9084, 0x00ff, 0x6210, 0x00b6, 0x2258, 0xba10, 0x00be, 0x9206,
+ 0x1904, 0xaafd, 0x700c, 0x6210, 0x00b6, 0x2258, 0xba14, 0x00be,
+ 0x9206, 0x1904, 0xaafd, 0x6038, 0x2068, 0x6824, 0xc0dc, 0x6826,
+ 0x6a20, 0x9286, 0x0007, 0x0904, 0xaafd, 0x9286, 0x0002, 0x05e8,
+ 0x9286, 0x0000, 0x05d0, 0x6808, 0x633c, 0x9306, 0x15b0, 0x2071,
+ 0x026c, 0x9186, 0x0015, 0x0558, 0x00c6, 0x6038, 0x2060, 0x6104,
+ 0x9186, 0x004b, 0x01c0, 0x9186, 0x004c, 0x01a8, 0x9186, 0x004d,
+ 0x0190, 0x9186, 0x004e, 0x0178, 0x9186, 0x0052, 0x0160, 0x6014,
+ 0x0096, 0x2048, 0x080c, 0xc1cd, 0x090c, 0x0dc3, 0xa87f, 0x0003,
+ 0x009e, 0x080c, 0xc883, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023,
+ 0x0002, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x00ce, 0x0030, 0x6038,
+ 0x2070, 0x2001, 0x1964, 0x2004, 0x7042, 0x080c, 0xa39d, 0x002e,
+ 0x00de, 0x00ee, 0x0005, 0x00b6, 0x0096, 0x00f6, 0x6014, 0x2048,
+ 0x6010, 0x2058, 0x91b6, 0x0015, 0x0130, 0xba08, 0xbb0c, 0xbc00,
+ 0xc48c, 0xbc02, 0x0470, 0x0096, 0x0156, 0x0036, 0x0026, 0x2b48,
+ 0x9e90, 0x0010, 0x2019, 0x000a, 0x20a9, 0x0004, 0x080c, 0xb448,
+ 0x002e, 0x003e, 0x015e, 0x009e, 0x1904, 0xab6e, 0x0096, 0x0156,
+ 0x0036, 0x0026, 0x2b48, 0x9e90, 0x0014, 0x2019, 0x0006, 0x20a9,
+ 0x0004, 0x080c, 0xb448, 0x002e, 0x003e, 0x015e, 0x009e, 0x15b0,
+ 0x7238, 0xba0a, 0x733c, 0xbb0e, 0x83ff, 0x0118, 0xbc00, 0xc48d,
+ 0xbc02, 0xa804, 0x9005, 0x1128, 0x00fe, 0x009e, 0x00be, 0x0804,
+ 0xa7a3, 0x0096, 0x2048, 0xaa12, 0xab16, 0xac0a, 0x009e, 0x8006,
+ 0x8006, 0x8007, 0x90bc, 0x003f, 0x9084, 0xffc0, 0x9080, 0x0002,
+ 0x2009, 0x002b, 0xaaa4, 0xaba0, 0xacac, 0xada8, 0x2031, 0x0000,
+ 0x2041, 0x1253, 0x080c, 0xa8fb, 0x0130, 0x00fe, 0x009e, 0x080c,
+ 0xa39d, 0x00be, 0x0005, 0x080c, 0xadb3, 0x0cb8, 0x2b78, 0x00f6,
+ 0x080c, 0x3102, 0x080c, 0xc8e3, 0x00fe, 0x00c6, 0x080c, 0xa347,
+ 0x2f00, 0x6012, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001,
+ 0x6003, 0x0001, 0x2001, 0x0007, 0x080c, 0x6448, 0x080c, 0x6474,
+ 0x080c, 0x88e9, 0x080c, 0x8e38, 0x00ce, 0x0804, 0xab41, 0x2100,
+ 0x91b2, 0x0054, 0x1a0c, 0x0dc3, 0x91b2, 0x0040, 0x1a04, 0xabf7,
+ 0x0002, 0xabe5, 0xabe5, 0xabdb, 0xabe5, 0xabe5, 0xabe5, 0xabd9,
+ 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9,
+ 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9,
+ 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9,
+ 0xabe5, 0xabd9, 0xabe5, 0xabe5, 0xabd9, 0xabd9, 0xabd9, 0xabd9,
+ 0xabd9, 0xabdb, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9,
+ 0xabd9, 0xabd9, 0xabd9, 0xabe5, 0xabe5, 0xabd9, 0xabd9, 0xabd9,
+ 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabd9, 0xabe5, 0xabd9,
+ 0xabd9, 0x080c, 0x0dc3, 0x0066, 0x00b6, 0x6610, 0x2658, 0xb8bc,
+ 0xc08c, 0xb8be, 0x00be, 0x006e, 0x0000, 0x6003, 0x0001, 0x6106,
+ 0x9186, 0x0032, 0x0118, 0x080c, 0x88e9, 0x0010, 0x080c, 0x88a1,
+ 0x0126, 0x2091, 0x8000, 0x080c, 0x8e38, 0x012e, 0x0005, 0x2600,
+ 0x0002, 0xac0d, 0xac0d, 0xac0d, 0xabe5, 0xabe5, 0xac0d, 0xac0d,
+ 0xac0d, 0xac0d, 0xabe5, 0xac0d, 0xabe5, 0xac0d, 0xabe5, 0xac0d,
+ 0xac0d, 0xac0d, 0xac0d, 0xac0d, 0xac0d, 0x080c, 0x0dc3, 0x6004,
+ 0x90b2, 0x0054, 0x1a0c, 0x0dc3, 0x91b6, 0x0013, 0x0904, 0xace2,
+ 0x91b6, 0x0027, 0x1904, 0xac8c, 0x080c, 0x8d2c, 0x6004, 0x080c,
+ 0xc3c0, 0x01b0, 0x080c, 0xc3d1, 0x01a8, 0x908e, 0x0021, 0x0904,
+ 0xac89, 0x908e, 0x0022, 0x1130, 0x080c, 0xa820, 0x0904, 0xac85,
+ 0x0804, 0xac86, 0x908e, 0x003d, 0x0904, 0xac89, 0x0804, 0xac7f,
+ 0x080c, 0x312b, 0x2001, 0x0007, 0x080c, 0x6448, 0x6010, 0x00b6,
+ 0x2058, 0xb9a0, 0x00be, 0x080c, 0xadb3, 0x9186, 0x007e, 0x1148,
+ 0x2001, 0x1836, 0x2014, 0xc285, 0x080c, 0x7351, 0x1108, 0xc2ad,
+ 0x2202, 0x0036, 0x0026, 0x2019, 0x0028, 0x2110, 0x080c, 0xdfde,
+ 0x002e, 0x003e, 0x0016, 0x0026, 0x0036, 0x2110, 0x2019, 0x0028,
+ 0x080c, 0x8a2b, 0x0076, 0x903e, 0x080c, 0x8919, 0x6010, 0x00b6,
+ 0x905d, 0x0100, 0x00be, 0x2c08, 0x080c, 0xda37, 0x007e, 0x003e,
+ 0x002e, 0x001e, 0x080c, 0xc8e3, 0x0016, 0x080c, 0xc638, 0x080c,
+ 0xa39d, 0x001e, 0x080c, 0x31fe, 0x080c, 0x8e38, 0x0030, 0x080c,
+ 0xc638, 0x080c, 0xa39d, 0x080c, 0x8e38, 0x0005, 0x080c, 0xadb3,
+ 0x0cb0, 0x080c, 0xadef, 0x0c98, 0x9186, 0x0015, 0x0118, 0x9186,
+ 0x0016, 0x1148, 0x080c, 0xc8f4, 0x0d80, 0x6000, 0x9086, 0x0002,
+ 0x0904, 0xadfa, 0x0c50, 0x9186, 0x0014, 0x1d38, 0x080c, 0x8d2c,
+ 0x6004, 0x908e, 0x0022, 0x1118, 0x080c, 0xa820, 0x09f0, 0x080c,
+ 0x3102, 0x080c, 0xc8e3, 0x080c, 0xc3c0, 0x1198, 0x080c, 0x312b,
+ 0x6010, 0x00b6, 0x2058, 0xb9a0, 0x00be, 0x080c, 0xadb3, 0x9186,
+ 0x007e, 0x1128, 0x2001, 0x1836, 0x200c, 0xc185, 0x2102, 0x0804,
+ 0xac7f, 0x080c, 0xc3d1, 0x1120, 0x080c, 0xadb3, 0x0804, 0xac7f,
+ 0x6004, 0x908e, 0x0032, 0x1160, 0x00e6, 0x00f6, 0x2071, 0x189f,
+ 0x2079, 0x0000, 0x080c, 0x3499, 0x00fe, 0x00ee, 0x0804, 0xac7f,
+ 0x6004, 0x908e, 0x0021, 0x0d40, 0x908e, 0x0022, 0x090c, 0xadb3,
+ 0x0804, 0xac7f, 0x90b2, 0x0040, 0x1a04, 0xad9a, 0x2008, 0x0002,
+ 0xad2a, 0xad2b, 0xad2e, 0xad31, 0xad34, 0xad41, 0xad28, 0xad28,
+ 0xad28, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28,
+ 0xad28, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28,
+ 0xad28, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28, 0xad44, 0xad4f,
+ 0xad28, 0xad51, 0xad4f, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28,
+ 0xad4f, 0xad4f, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28, 0xad28,
+ 0xad28, 0xad28, 0xad81, 0xad4f, 0xad28, 0xad4d, 0xad28, 0xad28,
+ 0xad28, 0xad4e, 0xad28, 0xad28, 0xad28, 0xad4f, 0xad78, 0xad28,
+ 0x080c, 0x0dc3, 0x0420, 0x2001, 0x000b, 0x0460, 0x2001, 0x0003,
+ 0x0448, 0x2001, 0x0005, 0x0430, 0x6010, 0x00b6, 0x2058, 0xb804,
+ 0x00be, 0x9084, 0x00ff, 0x9086, 0x0000, 0x11f0, 0x2001, 0x0001,
+ 0x00c8, 0x2001, 0x0009, 0x00b0, 0x080c, 0x8d2c, 0x6003, 0x0005,
+ 0x080c, 0xc8e6, 0x080c, 0x8e38, 0x0060, 0x0008, 0x0000, 0x0804,
+ 0xad92, 0x080c, 0x8d2c, 0x080c, 0xc8e6, 0x6003, 0x0004, 0x080c,
+ 0x8e38, 0x0005, 0x080c, 0x6448, 0x080c, 0x8d2c, 0x6003, 0x0002,
+ 0x0036, 0x2019, 0x1869, 0x2304, 0x9084, 0xff00, 0x1120, 0x2001,
+ 0x1962, 0x201c, 0x0040, 0x8007, 0x909a, 0x0004, 0x0ec0, 0x8003,
+ 0x801b, 0x831b, 0x9318, 0x631a, 0x003e, 0x080c, 0x8e38, 0x0c08,
+ 0x080c, 0x8d2c, 0x080c, 0xc638, 0x080c, 0xa39d, 0x080c, 0x8e38,
+ 0x08c0, 0x00e6, 0x00f6, 0x2071, 0x189f, 0x2079, 0x0000, 0x080c,
+ 0x3499, 0x00fe, 0x00ee, 0x080c, 0x8d2c, 0x080c, 0xa39d, 0x080c,
+ 0x8e38, 0x0838, 0x080c, 0x8d2c, 0x6003, 0x0002, 0x080c, 0xc8e6,
+ 0x0804, 0x8e38, 0x2600, 0x2008, 0x0002, 0xadb1, 0xadb1, 0xadb1,
+ 0xad92, 0xad92, 0xadb1, 0xadb1, 0xadb1, 0xadb1, 0xad92, 0xadb1,
+ 0xad92, 0xadb1, 0xad92, 0xadb1, 0xadb1, 0xadb1, 0xadb1, 0xadb1,
+ 0xadb1, 0x080c, 0x0dc3, 0x00e6, 0x0096, 0x0026, 0x0016, 0x080c,
+ 0xc1cd, 0x0568, 0x6014, 0x2048, 0xa868, 0x9086, 0x0139, 0x11a8,
+ 0xa898, 0x9086, 0x0056, 0x1148, 0x080c, 0x53f9, 0x0130, 0x2001,
+ 0x0000, 0x900e, 0x2011, 0x4000, 0x0028, 0x2001, 0x0030, 0x900e,
+ 0x2011, 0x4005, 0x080c, 0xc7a9, 0x0090, 0xa86c, 0xd0fc, 0x0178,
+ 0xa807, 0x0000, 0x0016, 0x6004, 0x908e, 0x0021, 0x0168, 0x908e,
+ 0x003d, 0x0150, 0x001e, 0xa86b, 0x0103, 0xa833, 0x0100, 0x001e,
+ 0x002e, 0x009e, 0x00ee, 0x0005, 0x001e, 0x0009, 0x0cc0, 0x0096,
+ 0x6014, 0x2048, 0xa800, 0x2048, 0xa86b, 0x0103, 0xa823, 0x8001,
+ 0x009e, 0x0005, 0x00b6, 0x6610, 0x2658, 0xb804, 0x9084, 0x00ff,
+ 0x90b2, 0x000c, 0x1a0c, 0x0dc3, 0x6604, 0x96b6, 0x004d, 0x1120,
+ 0x080c, 0xc6c8, 0x0804, 0xae77, 0x6604, 0x96b6, 0x0043, 0x1120,
+ 0x080c, 0xc711, 0x0804, 0xae77, 0x6604, 0x96b6, 0x004b, 0x1120,
+ 0x080c, 0xc73d, 0x0804, 0xae77, 0x6604, 0x96b6, 0x0033, 0x1120,
+ 0x080c, 0xc65a, 0x0804, 0xae77, 0x6604, 0x96b6, 0x0028, 0x1120,
+ 0x080c, 0xc40f, 0x0804, 0xae77, 0x6604, 0x96b6, 0x0029, 0x1120,
+ 0x080c, 0xc450, 0x0804, 0xae77, 0x6604, 0x96b6, 0x001f, 0x1118,
+ 0x080c, 0xa76d, 0x04e0, 0x6604, 0x96b6, 0x0000, 0x1118, 0x080c,
+ 0xab03, 0x04a8, 0x6604, 0x96b6, 0x0022, 0x1118, 0x080c, 0xa801,
+ 0x0470, 0x6604, 0x96b6, 0x0035, 0x1118, 0x080c, 0xa919, 0x0438,
+ 0x6604, 0x96b6, 0x0039, 0x1118, 0x080c, 0xaa9c, 0x0400, 0x6604,
+ 0x96b6, 0x003d, 0x1118, 0x080c, 0xa839, 0x00c8, 0x6604, 0x96b6,
+ 0x0044, 0x1118, 0x080c, 0xa875, 0x0090, 0x6604, 0x96b6, 0x0049,
+ 0x1118, 0x080c, 0xa8a4, 0x0058, 0x91b6, 0x0015, 0x1110, 0x0063,
+ 0x0030, 0x91b6, 0x0016, 0x1128, 0x00be, 0x0804, 0xb160, 0x00be,
+ 0x0005, 0x080c, 0xa434, 0x0cd8, 0xae95, 0xaea3, 0xae95, 0xaee8,
+ 0xae95, 0xb082, 0xb16d, 0xae95, 0xae95, 0xae95, 0xb13a, 0xae95,
+ 0xb14e, 0x0096, 0x080c, 0x155f, 0x6014, 0x2048, 0xa800, 0x2048,
+ 0xa86b, 0x0103, 0x009e, 0x0804, 0xa39d, 0xa001, 0xa001, 0x0005,
+ 0x6604, 0x96b6, 0x0004, 0x1130, 0x2001, 0x0001, 0x080c, 0x6434,
+ 0x0804, 0xa39d, 0x0005, 0x00e6, 0x2071, 0x1800, 0x708c, 0x9086,
+ 0x0074, 0x1540, 0x080c, 0xda08, 0x11b0, 0x6010, 0x00b6, 0x2058,
+ 0x7030, 0xd08c, 0x0128, 0xb800, 0xd0bc, 0x0110, 0xc0c5, 0xb802,
+ 0x00e9, 0x00be, 0x2001, 0x0006, 0x080c, 0x6448, 0x080c, 0x312b,
+ 0x080c, 0xa39d, 0x0088, 0x2001, 0x000a, 0x080c, 0x6448, 0x080c,
+ 0x312b, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c, 0x88e9, 0x080c,
+ 0x8e38, 0x0010, 0x080c, 0xb06d, 0x00ee, 0x0005, 0x00d6, 0xb800,
+ 0xd084, 0x0160, 0x9006, 0x080c, 0x6434, 0x2069, 0x185e, 0x6804,
+ 0xd0a4, 0x0120, 0x2001, 0x0006, 0x080c, 0x6474, 0x00de, 0x0005,
+ 0x00b6, 0x0096, 0x00d6, 0x2011, 0x1823, 0x2204, 0x9086, 0x0074,
+ 0x1904, 0xb044, 0x6010, 0x2058, 0xbaa0, 0x9286, 0x007e, 0x1120,
+ 0x080c, 0xb2b2, 0x0804, 0xafb1, 0x2001, 0x180d, 0x2004, 0xd08c,
+ 0x0904, 0xaf53, 0x00d6, 0x080c, 0x7351, 0x01a0, 0x0026, 0x2011,
+ 0x0010, 0x080c, 0x68a8, 0x002e, 0x0904, 0xaf52, 0x080c, 0x5678,
+ 0x1598, 0x6014, 0x2048, 0xa807, 0x0000, 0xa86b, 0x0103, 0xa833,
+ 0xdead, 0x0450, 0x6010, 0x00b6, 0x2058, 0xb910, 0x00be, 0x9186,
+ 0x00ff, 0x0580, 0x0026, 0x2011, 0x8008, 0x080c, 0x68a8, 0x002e,
+ 0x0548, 0x6014, 0x9005, 0x090c, 0x0dc3, 0x2048, 0xa868, 0x9084,
+ 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0030, 0x900e, 0x2011,
+ 0x4009, 0x080c, 0xc7a9, 0x0040, 0x6014, 0x2048, 0xa807, 0x0000,
+ 0xa86b, 0x0103, 0xa833, 0xdead, 0x6010, 0x2058, 0xb9a0, 0x0016,
+ 0x080c, 0x312b, 0x080c, 0xa39d, 0x001e, 0x080c, 0x31fe, 0x00de,
+ 0x0804, 0xb047, 0x00de, 0x080c, 0xb2a7, 0x6010, 0x2058, 0xbaa0,
+ 0x9286, 0x0080, 0x1510, 0x6014, 0x9005, 0x01a8, 0x2048, 0xa868,
+ 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0000, 0x900e,
+ 0x2011, 0x4000, 0x080c, 0xc7a9, 0x0030, 0xa807, 0x0000, 0xa86b,
+ 0x0103, 0xa833, 0x0200, 0x2001, 0x0006, 0x080c, 0x6448, 0x080c,
+ 0x312b, 0x080c, 0xa39d, 0x0804, 0xb047, 0x080c, 0xb055, 0x6014,
+ 0x9005, 0x0190, 0x2048, 0xa86c, 0xd0f4, 0x01e8, 0xa868, 0x9084,
+ 0x00ff, 0x9086, 0x0039, 0x1d08, 0x2001, 0x0000, 0x900e, 0x2011,
+ 0x4000, 0x080c, 0xc7a9, 0x08f8, 0x080c, 0xb04b, 0x0160, 0x9006,
+ 0x080c, 0x6434, 0x2001, 0x0004, 0x080c, 0x6474, 0x2001, 0x0007,
+ 0x080c, 0x6448, 0x08a0, 0x2001, 0x0004, 0x080c, 0x6448, 0x6003,
+ 0x0001, 0x6007, 0x0003, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x0804,
+ 0xb047, 0xb85c, 0xd0e4, 0x0178, 0x080c, 0xc5da, 0x080c, 0x7351,
+ 0x0118, 0xd0dc, 0x1904, 0xaf73, 0x2011, 0x1836, 0x2204, 0xc0ad,
+ 0x2012, 0x0804, 0xaf73, 0x080c, 0xc617, 0x2011, 0x1836, 0x2204,
+ 0xc0a5, 0x2012, 0x0006, 0x080c, 0xdba8, 0x000e, 0x1904, 0xaf73,
+ 0xc0b5, 0x2012, 0x2001, 0x0006, 0x080c, 0x6448, 0x9006, 0x080c,
+ 0x6434, 0x00c6, 0x2001, 0x180f, 0x2004, 0xd09c, 0x0520, 0x00f6,
+ 0x2079, 0x0100, 0x00e6, 0x2071, 0x1800, 0x700c, 0x9084, 0x00ff,
+ 0x78e6, 0x707a, 0x7010, 0x78ea, 0x707e, 0x908c, 0x00ff, 0x00ee,
+ 0x780c, 0xc0b5, 0x780e, 0x00fe, 0x080c, 0x2751, 0x00f6, 0x2100,
+ 0x900e, 0x080c, 0x2708, 0x795a, 0x00fe, 0x9186, 0x0081, 0x01f0,
+ 0x2009, 0x0081, 0x00e0, 0x2009, 0x00ef, 0x00f6, 0x2079, 0x0100,
+ 0x79ea, 0x78e7, 0x0000, 0x7932, 0x7936, 0x780c, 0xc0b5, 0x780e,
+ 0x00fe, 0x080c, 0x2751, 0x00f6, 0x2079, 0x1800, 0x797e, 0x2100,
+ 0x900e, 0x797a, 0x080c, 0x2708, 0x795a, 0x00fe, 0x8108, 0x080c,
+ 0x6497, 0x2b00, 0x00ce, 0x1904, 0xaf73, 0x6012, 0x2009, 0x180f,
+ 0x210c, 0xd19c, 0x0150, 0x2009, 0x027c, 0x210c, 0x918c, 0x00ff,
+ 0xb912, 0x2009, 0x027d, 0x210c, 0xb916, 0x2001, 0x0002, 0x080c,
+ 0x6448, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c,
+ 0x88e9, 0x080c, 0x8e38, 0x0018, 0x080c, 0xadb3, 0x0431, 0x00de,
+ 0x009e, 0x00be, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0a4, 0x0120,
+ 0x2001, 0x185f, 0x2004, 0xd0ac, 0x0005, 0x00e6, 0x080c, 0xe037,
+ 0x0190, 0x2071, 0x0260, 0x7108, 0x720c, 0x918c, 0x00ff, 0x1118,
+ 0x9284, 0xff00, 0x0140, 0x6010, 0x2058, 0xb8a0, 0x9084, 0xff80,
+ 0x1110, 0xb912, 0xba16, 0x00ee, 0x0005, 0x2030, 0x2001, 0x0007,
+ 0x080c, 0x6448, 0x080c, 0x5678, 0x1120, 0x2001, 0x0007, 0x080c,
+ 0x6474, 0x080c, 0x312b, 0x6020, 0x9086, 0x000a, 0x1108, 0x0005,
+ 0x0804, 0xa39d, 0x00b6, 0x00e6, 0x0026, 0x0016, 0x2071, 0x1800,
+ 0x708c, 0x9086, 0x0014, 0x1904, 0xb131, 0x2001, 0x180d, 0x2004,
+ 0xd08c, 0x0904, 0xb0e4, 0x00d6, 0x080c, 0x7351, 0x01a0, 0x0026,
+ 0x2011, 0x0010, 0x080c, 0x68a8, 0x002e, 0x0904, 0xb0e3, 0x080c,
+ 0x5678, 0x1598, 0x6014, 0x2048, 0xa807, 0x0000, 0xa86b, 0x0103,
+ 0xa833, 0xdead, 0x0450, 0x6010, 0x00b6, 0x2058, 0xb910, 0x00be,
+ 0x9186, 0x00ff, 0x0580, 0x0026, 0x2011, 0x8008, 0x080c, 0x68a8,
+ 0x002e, 0x0548, 0x6014, 0x9005, 0x090c, 0x0dc3, 0x2048, 0xa868,
+ 0x9084, 0x00ff, 0x9086, 0x0039, 0x1140, 0x2001, 0x0030, 0x900e,
+ 0x2011, 0x4009, 0x080c, 0xc7a9, 0x0040, 0x6014, 0x2048, 0xa807,
+ 0x0000, 0xa86b, 0x0103, 0xa833, 0xdead, 0x6010, 0x2058, 0xb9a0,
+ 0x0016, 0x080c, 0x312b, 0x080c, 0xa39d, 0x001e, 0x080c, 0x31fe,
+ 0x00de, 0x0804, 0xb135, 0x00de, 0x080c, 0x5678, 0x1170, 0x6014,
+ 0x9005, 0x1158, 0x0036, 0x0046, 0x6010, 0x2058, 0xbba0, 0x2021,
+ 0x0006, 0x080c, 0x4d24, 0x004e, 0x003e, 0x00d6, 0x6010, 0x2058,
+ 0x080c, 0x6597, 0x080c, 0xaed6, 0x00de, 0x080c, 0xb382, 0x1588,
+ 0x6010, 0x2058, 0xb890, 0x9005, 0x0560, 0x2001, 0x0006, 0x080c,
+ 0x6448, 0x0096, 0x6014, 0x904d, 0x01d0, 0xa868, 0x9084, 0x00ff,
+ 0x9086, 0x0039, 0x1140, 0x2001, 0x0000, 0x900e, 0x2011, 0x4000,
+ 0x080c, 0xc7a9, 0x0060, 0xa868, 0x9084, 0x00ff, 0x9086, 0x0029,
+ 0x0130, 0xa807, 0x0000, 0xa86b, 0x0103, 0xa833, 0x0200, 0x009e,
+ 0x080c, 0x312b, 0x6020, 0x9086, 0x000a, 0x0138, 0x080c, 0xa39d,
+ 0x0020, 0x080c, 0xadb3, 0x080c, 0xb06d, 0x001e, 0x002e, 0x00ee,
+ 0x00be, 0x0005, 0x2011, 0x1823, 0x2204, 0x9086, 0x0014, 0x1160,
+ 0x2001, 0x0002, 0x080c, 0x6448, 0x6003, 0x0001, 0x6007, 0x0001,
+ 0x080c, 0x88e9, 0x0804, 0x8e38, 0x0804, 0xb06d, 0x2030, 0x2011,
+ 0x1823, 0x2204, 0x9086, 0x0004, 0x1148, 0x96b6, 0x000b, 0x1120,
+ 0x2001, 0x0007, 0x080c, 0x6448, 0x0804, 0xa39d, 0x0804, 0xb06d,
+ 0x0002, 0xae95, 0xb178, 0xae95, 0xb1b9, 0xae95, 0xb264, 0xb16d,
+ 0xae98, 0xae95, 0xb276, 0xae95, 0xb286, 0x6604, 0x9686, 0x0003,
+ 0x0904, 0xb082, 0x96b6, 0x001e, 0x1110, 0x080c, 0xa39d, 0x0005,
+ 0x00b6, 0x00d6, 0x00c6, 0x080c, 0xb296, 0x11a0, 0x9006, 0x080c,
+ 0x6434, 0x080c, 0x3102, 0x080c, 0xc8e3, 0x2001, 0x0002, 0x080c,
+ 0x6448, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x88e9, 0x080c,
+ 0x8e38, 0x0418, 0x2009, 0x026e, 0x2104, 0x9086, 0x0009, 0x1160,
+ 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0180, 0x8001,
+ 0xb842, 0x601b, 0x000a, 0x0088, 0x2009, 0x026f, 0x2104, 0x9084,
+ 0xff00, 0x908e, 0x1900, 0x0148, 0x908e, 0x1e00, 0x0990, 0x080c,
+ 0x3102, 0x080c, 0xc8e3, 0x080c, 0xb06d, 0x00ce, 0x00de, 0x00be,
+ 0x0005, 0x0096, 0x00b6, 0x0026, 0x9016, 0x080c, 0xb2a4, 0x00d6,
+ 0x2069, 0x1958, 0x2d04, 0x9005, 0x0168, 0x6010, 0x2058, 0xb8a0,
+ 0x9086, 0x007e, 0x1138, 0x2069, 0x181f, 0x2d04, 0x8000, 0x206a,
+ 0x00de, 0x0010, 0x00de, 0x0088, 0x9006, 0x080c, 0x6434, 0x2001,
+ 0x0002, 0x080c, 0x6448, 0x6003, 0x0001, 0x6007, 0x0002, 0x080c,
+ 0x88e9, 0x080c, 0x8e38, 0x0804, 0xb234, 0x080c, 0xc1cd, 0x01b0,
+ 0x6014, 0x2048, 0xa868, 0x2010, 0x9086, 0x0139, 0x1138, 0x6007,
+ 0x0016, 0x2001, 0x0002, 0x080c, 0xc800, 0x00b0, 0x6014, 0x2048,
+ 0xa868, 0xd0fc, 0x0118, 0x2001, 0x0001, 0x0ca8, 0x2001, 0x180e,
+ 0x2004, 0xd0dc, 0x0148, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff,
+ 0x9005, 0x1110, 0x9006, 0x0c38, 0x080c, 0xadb3, 0x2009, 0x026e,
+ 0x2134, 0x96b4, 0x00ff, 0x9686, 0x0005, 0x0510, 0x9686, 0x000b,
+ 0x01c8, 0x2009, 0x026f, 0x2104, 0x9084, 0xff00, 0x1118, 0x9686,
+ 0x0009, 0x01b0, 0x9086, 0x1900, 0x1168, 0x9686, 0x0009, 0x0180,
+ 0x2001, 0x0004, 0x080c, 0x6448, 0x2001, 0x0028, 0x601a, 0x6007,
+ 0x0052, 0x0010, 0x080c, 0xb06d, 0x002e, 0x00be, 0x009e, 0x0005,
+ 0x9286, 0x0139, 0x0160, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x0140,
+ 0xa868, 0x9086, 0x0139, 0x0118, 0xa86c, 0xd0fc, 0x0108, 0x0c50,
+ 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0138, 0x8001,
+ 0xb842, 0x601b, 0x000a, 0x6007, 0x0016, 0x08f0, 0xb8a0, 0x9086,
+ 0x007e, 0x1138, 0x00e6, 0x2071, 0x1800, 0x080c, 0x5f46, 0x00ee,
+ 0x0010, 0x080c, 0x3102, 0x0870, 0x2001, 0x0004, 0x080c, 0x6448,
+ 0x04d9, 0x1140, 0x6003, 0x0001, 0x6007, 0x0003, 0x080c, 0x88e9,
+ 0x0804, 0x8e38, 0x080c, 0xadb3, 0x0804, 0xb06d, 0x0469, 0x1160,
+ 0x2001, 0x0008, 0x080c, 0x6448, 0x6003, 0x0001, 0x6007, 0x0005,
+ 0x080c, 0x88e9, 0x0804, 0x8e38, 0x0804, 0xb06d, 0x00e9, 0x1160,
+ 0x2001, 0x000a, 0x080c, 0x6448, 0x6003, 0x0001, 0x6007, 0x0001,
+ 0x080c, 0x88e9, 0x0804, 0x8e38, 0x0804, 0xb06d, 0x2009, 0x026e,
+ 0x2104, 0x9086, 0x0003, 0x1138, 0x2009, 0x026f, 0x2104, 0x9084,
+ 0xff00, 0x9086, 0x2a00, 0x0005, 0x9085, 0x0001, 0x0005, 0x00b6,
+ 0x00c6, 0x0016, 0x6110, 0x2158, 0x080c, 0x650b, 0x001e, 0x00ce,
+ 0x00be, 0x0005, 0x00b6, 0x00f6, 0x00e6, 0x00d6, 0x0036, 0x0016,
+ 0x6010, 0x2058, 0x2009, 0x1836, 0x2104, 0x9085, 0x0003, 0x200a,
+ 0x080c, 0xb354, 0x05d0, 0x2009, 0x1836, 0x2104, 0xc0cd, 0x200a,
+ 0x080c, 0x6869, 0x0158, 0x9006, 0x2020, 0x2009, 0x002a, 0x080c,
+ 0xdd18, 0x2001, 0x180c, 0x200c, 0xc195, 0x2102, 0x6120, 0x0016,
+ 0x6023, 0x0007, 0x2019, 0x002a, 0x2009, 0x0001, 0x00e6, 0x2071,
+ 0x1800, 0x00c6, 0x2061, 0x0100, 0x080c, 0x30cd, 0x00ce, 0x6010,
+ 0x9005, 0x090c, 0x0dc3, 0x080c, 0x2ed6, 0x00ee, 0x001e, 0x6122,
+ 0x00c6, 0x0156, 0x20a9, 0x0781, 0x2009, 0x007f, 0x080c, 0x31fe,
+ 0x8108, 0x1f04, 0xb2f6, 0x015e, 0x00ce, 0x080c, 0xb2a7, 0x2071,
+ 0x0260, 0x2079, 0x0200, 0x7817, 0x0001, 0x2001, 0x1836, 0x200c,
+ 0xc1c5, 0x7018, 0xd0fc, 0x0110, 0xd0dc, 0x0118, 0x7038, 0xd0dc,
+ 0x1108, 0xc1c4, 0x7817, 0x0000, 0x2001, 0x1836, 0x2102, 0x9184,
+ 0x0050, 0x9086, 0x0050, 0x0588, 0x2079, 0x0100, 0x2e04, 0x9084,
+ 0x00ff, 0x2069, 0x181e, 0x206a, 0x78e6, 0x0006, 0x8e70, 0x2e04,
+ 0x2069, 0x181f, 0x206a, 0x78ea, 0x7832, 0x7836, 0x2010, 0x9084,
+ 0xff00, 0x001e, 0x9105, 0x2009, 0x182b, 0x200a, 0x2200, 0x9084,
+ 0x00ff, 0x2008, 0x080c, 0x2751, 0x080c, 0x7351, 0x0170, 0x2071,
+ 0x0260, 0x2069, 0x195e, 0x7048, 0x206a, 0x704c, 0x6806, 0x7050,
+ 0x680a, 0x7054, 0x680e, 0x080c, 0xc5da, 0x001e, 0x003e, 0x00de,
+ 0x00ee, 0x00fe, 0x00be, 0x0005, 0x0096, 0x0026, 0x0036, 0x00e6,
+ 0x0156, 0x2019, 0x182b, 0x231c, 0x83ff, 0x01f0, 0x2071, 0x0260,
+ 0x7200, 0x9294, 0x00ff, 0x7004, 0x9084, 0xff00, 0x9205, 0x9306,
+ 0x1198, 0x2011, 0x0276, 0x20a9, 0x0004, 0x2b48, 0x2019, 0x000a,
+ 0x080c, 0xb448, 0x1148, 0x2011, 0x027a, 0x20a9, 0x0004, 0x2019,
+ 0x0006, 0x080c, 0xb448, 0x1100, 0x015e, 0x00ee, 0x003e, 0x002e,
+ 0x009e, 0x0005, 0x00e6, 0x2071, 0x0260, 0x7034, 0x9086, 0x0014,
+ 0x11a8, 0x7038, 0x9086, 0x0800, 0x1188, 0x703c, 0xd0ec, 0x0160,
+ 0x9084, 0x0f00, 0x9086, 0x0100, 0x1138, 0x7054, 0xd0a4, 0x1110,
+ 0xd0ac, 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ee, 0x0005,
+ 0x00e6, 0x0096, 0x00c6, 0x0076, 0x0056, 0x0046, 0x0026, 0x0006,
+ 0x0126, 0x2091, 0x8000, 0x2029, 0x19cd, 0x252c, 0x2021, 0x19d3,
+ 0x2424, 0x2061, 0x1cd0, 0x2071, 0x1800, 0x7250, 0x7070, 0x9202,
+ 0x1a04, 0xb41e, 0x080c, 0xdd49, 0x0904, 0xb417, 0x6720, 0x9786,
+ 0x0007, 0x0904, 0xb417, 0x2500, 0x9c06, 0x0904, 0xb417, 0x2400,
+ 0x9c06, 0x0904, 0xb417, 0x3e08, 0x81ff, 0x01c8, 0x6010, 0x9005,
+ 0x01b0, 0x00b6, 0x2058, 0x9186, 0x0002, 0x1120, 0xb800, 0xd0bc,
+ 0x1904, 0xb432, 0x9186, 0x0001, 0x1148, 0xbaa0, 0x9286, 0x007e,
+ 0x1128, 0x6004, 0x9086, 0x0002, 0x0904, 0xb432, 0x00be, 0x00c6,
+ 0x6000, 0x9086, 0x0004, 0x1110, 0x080c, 0x1998, 0x9786, 0x000a,
+ 0x0148, 0x080c, 0xc3d1, 0x1130, 0x00ce, 0x080c, 0xadb3, 0x080c,
+ 0xa3cf, 0x00e8, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x01a8, 0x9786,
+ 0x0003, 0x1530, 0xa86b, 0x0103, 0xa880, 0xd0cc, 0x0130, 0x0096,
+ 0xa87c, 0x2048, 0x080c, 0x0fbf, 0x009e, 0xab7e, 0xa87b, 0x0000,
+ 0x080c, 0x6bf5, 0x080c, 0xc3b4, 0x080c, 0xa3cf, 0x00ce, 0x9ce0,
+ 0x0018, 0x7064, 0x9c02, 0x1210, 0x0804, 0xb3b5, 0x012e, 0x000e,
+ 0x002e, 0x004e, 0x005e, 0x007e, 0x00ce, 0x009e, 0x00ee, 0x0005,
+ 0x9786, 0x0006, 0x1118, 0x080c, 0xdcc3, 0x0c30, 0x9786, 0x000a,
+ 0x09e0, 0x0880, 0x00be, 0x0c18, 0x220c, 0x2304, 0x9106, 0x1130,
+ 0x8210, 0x8318, 0x1f04, 0xb434, 0x9006, 0x0005, 0x2304, 0x9102,
+ 0x0218, 0x2001, 0x0001, 0x0008, 0x9006, 0x918d, 0x0001, 0x0005,
+ 0x0136, 0x01c6, 0x0016, 0x8906, 0x8006, 0x8007, 0x908c, 0x003f,
+ 0x21e0, 0x9084, 0xffc0, 0x9300, 0x2098, 0x3518, 0x20a9, 0x0001,
+ 0x220c, 0x4002, 0x910e, 0x1140, 0x8210, 0x8319, 0x1dc8, 0x9006,
+ 0x001e, 0x01ce, 0x013e, 0x0005, 0x220c, 0x9102, 0x0218, 0x2001,
+ 0x0001, 0x0010, 0x2001, 0x0000, 0x918d, 0x0001, 0x001e, 0x01ce,
+ 0x013e, 0x0005, 0x6004, 0x908a, 0x0054, 0x1a0c, 0x0dc3, 0x080c,
+ 0xc3c0, 0x0120, 0x080c, 0xc3d1, 0x0168, 0x0028, 0x080c, 0x312b,
+ 0x080c, 0xc3d1, 0x0138, 0x080c, 0x8d2c, 0x080c, 0xa39d, 0x080c,
+ 0x8e38, 0x0005, 0x080c, 0xadb3, 0x0cb0, 0x9182, 0x0054, 0x1220,
+ 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xb4a9, 0xb4a9, 0xb4a9,
+ 0xb4a9, 0xb4a9, 0xb4a9, 0xb4a9, 0xb4a9, 0xb4a9, 0xb4a9, 0xb4a9,
+ 0xb4ab, 0xb4ab, 0xb4ab, 0xb4ab, 0xb4a9, 0xb4a9, 0xb4a9, 0xb4ab,
+ 0xb4a9, 0x080c, 0x0dc3, 0x600b, 0xffff, 0x6003, 0x0001, 0x6106,
+ 0x080c, 0x88a1, 0x0126, 0x2091, 0x8000, 0x080c, 0x8e38, 0x012e,
+ 0x0005, 0x9186, 0x0013, 0x1128, 0x6004, 0x9082, 0x0040, 0x0804,
+ 0xb543, 0x9186, 0x0027, 0x1520, 0x080c, 0x8d2c, 0x080c, 0x3102,
+ 0x080c, 0xc8e3, 0x0096, 0x6114, 0x2148, 0x080c, 0xc1cd, 0x0198,
+ 0x080c, 0xc3d1, 0x1118, 0x080c, 0xadb3, 0x0068, 0xa86b, 0x0103,
+ 0xa87f, 0x0029, 0xa87b, 0x0000, 0xa980, 0xc1c5, 0xa982, 0x080c,
+ 0x6c02, 0x080c, 0xc3b4, 0x009e, 0x080c, 0xa39d, 0x0804, 0x8e38,
+ 0x9186, 0x0014, 0x1120, 0x6004, 0x9082, 0x0040, 0x00b8, 0x9186,
+ 0x0046, 0x0150, 0x9186, 0x0045, 0x0138, 0x9186, 0x0053, 0x0120,
+ 0x9186, 0x0048, 0x190c, 0x0dc3, 0x080c, 0xc8f4, 0x0130, 0x6000,
+ 0x9086, 0x0002, 0x1110, 0x0804, 0xb581, 0x0005, 0x0002, 0xb51d,
+ 0xb51b, 0xb51b, 0xb51b, 0xb51b, 0xb51b, 0xb51b, 0xb51b, 0xb51b,
+ 0xb51b, 0xb51b, 0xb538, 0xb538, 0xb538, 0xb538, 0xb51b, 0xb538,
+ 0xb51b, 0xb538, 0xb51b, 0x080c, 0x0dc3, 0x080c, 0x8d2c, 0x0096,
+ 0x6114, 0x2148, 0x080c, 0xc1cd, 0x0168, 0xa86b, 0x0103, 0xa87f,
+ 0x0006, 0xa87b, 0x0000, 0xa884, 0xc0ec, 0xa886, 0x080c, 0x6c02,
+ 0x080c, 0xc3b4, 0x009e, 0x080c, 0xa39d, 0x080c, 0x8e38, 0x0005,
+ 0x080c, 0x8d2c, 0x080c, 0xc3d1, 0x090c, 0xadb3, 0x080c, 0xa39d,
+ 0x080c, 0x8e38, 0x0005, 0x0002, 0xb55a, 0xb558, 0xb558, 0xb558,
+ 0xb558, 0xb558, 0xb558, 0xb558, 0xb558, 0xb558, 0xb558, 0xb571,
+ 0xb571, 0xb571, 0xb571, 0xb558, 0xb57b, 0xb558, 0xb571, 0xb558,
+ 0x080c, 0x0dc3, 0x0096, 0x080c, 0x8d2c, 0x6014, 0x2048, 0x2001,
+ 0x1964, 0x2004, 0x6042, 0xa980, 0xd1ac, 0x0140, 0x6003, 0x0004,
+ 0xa880, 0x9085, 0x0400, 0xa882, 0x009e, 0x0005, 0x6003, 0x0002,
+ 0x0cb8, 0x080c, 0x8d2c, 0x080c, 0xc8e6, 0x080c, 0xc8eb, 0x6003,
+ 0x000f, 0x0804, 0x8e38, 0x080c, 0x8d2c, 0x080c, 0xa39d, 0x0804,
+ 0x8e38, 0x9182, 0x0054, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a,
+ 0x0005, 0xb59d, 0xb59d, 0xb59d, 0xb59d, 0xb59d, 0xb59f, 0xb682,
+ 0xb59d, 0xb6b6, 0xb59d, 0xb59d, 0xb59d, 0xb59d, 0xb59d, 0xb59d,
+ 0xb59d, 0xb59d, 0xb59d, 0xb59d, 0xb6b6, 0x080c, 0x0dc3, 0x00b6,
+ 0x0096, 0x6114, 0x2148, 0x7644, 0x96b4, 0x0fff, 0x86ff, 0x1528,
+ 0x6010, 0x2058, 0xb800, 0xd0bc, 0x1904, 0xb671, 0xa87f, 0x0000,
+ 0xa86b, 0x0103, 0xae7a, 0xa880, 0xd0ac, 0x0128, 0xa834, 0xa938,
+ 0x9115, 0x190c, 0xb84f, 0x080c, 0x6a1c, 0x6210, 0x2258, 0xba3c,
+ 0x82ff, 0x0110, 0x8211, 0xba3e, 0x7044, 0xd0e4, 0x1904, 0xb652,
+ 0x080c, 0xa39d, 0x009e, 0x00be, 0x0005, 0x080c, 0xc916, 0x1dd0,
+ 0x968c, 0x0c00, 0x0150, 0x6010, 0x2058, 0xb800, 0xd0bc, 0x1904,
+ 0xb656, 0x7348, 0xab96, 0x734c, 0xab92, 0x968c, 0x00ff, 0x9186,
+ 0x0002, 0x0508, 0x9186, 0x0028, 0x1118, 0xa87f, 0x001c, 0x00e8,
+ 0xd6dc, 0x01a0, 0xa87f, 0x0015, 0xa880, 0xd0ac, 0x0170, 0xa938,
+ 0xaa34, 0x2100, 0x9205, 0x0148, 0x7048, 0x9106, 0x1118, 0x704c,
+ 0x9206, 0x0118, 0xa996, 0xaa92, 0xc6dc, 0x0038, 0xd6d4, 0x0118,
+ 0xa87f, 0x0007, 0x0010, 0xa87f, 0x0000, 0xa86b, 0x0103, 0xae7a,
+ 0x901e, 0xd6c4, 0x01d8, 0x9686, 0x0100, 0x1130, 0x7064, 0x9005,
+ 0x1118, 0xc6c4, 0x0804, 0xb5a6, 0x735c, 0xab8a, 0x83ff, 0x0170,
+ 0x938a, 0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308, 0x2019,
+ 0x0018, 0x2011, 0x0026, 0x080c, 0xbd68, 0x003e, 0xd6cc, 0x0904,
+ 0xb5bb, 0x7154, 0xa98e, 0x81ff, 0x0904, 0xb5bb, 0x9192, 0x0021,
+ 0x1278, 0x8304, 0x9098, 0x0018, 0x2011, 0x002a, 0x080c, 0xbd68,
+ 0x2011, 0x0205, 0x2013, 0x0000, 0x080c, 0xc86c, 0x0804, 0xb5bb,
+ 0xa86c, 0xd0fc, 0x0120, 0x2009, 0x0020, 0xa98e, 0x0c50, 0x00a6,
+ 0x2950, 0x080c, 0xbd07, 0x00ae, 0x080c, 0xc86c, 0x080c, 0xbd58,
+ 0x0804, 0xb5bd, 0x080c, 0xc4c4, 0x0804, 0xb5ca, 0xa880, 0xd0ac,
+ 0x0904, 0xb5d9, 0xa884, 0xd0bc, 0x1904, 0xb5d9, 0x9684, 0x0400,
+ 0x0130, 0xa838, 0xab34, 0x9305, 0x0904, 0xb5d9, 0x00b8, 0x7348,
+ 0xa838, 0x9306, 0x1198, 0x734c, 0xa834, 0x931e, 0x0904, 0xb5d9,
+ 0x0068, 0xa880, 0xd0ac, 0x0904, 0xb5ae, 0xa838, 0xa934, 0x9105,
+ 0x0904, 0xb5ae, 0xa884, 0xd0bc, 0x1904, 0xb5ae, 0x080c, 0xc4fe,
+ 0x0804, 0xb5ca, 0x0096, 0x00f6, 0x6003, 0x0003, 0x6007, 0x0043,
+ 0x2079, 0x026c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6014, 0x2048,
+ 0xa880, 0xd0ac, 0x0140, 0x6003, 0x0002, 0x00fe, 0x009e, 0x0005,
+ 0x2130, 0x2228, 0x0058, 0x2400, 0xa9b0, 0x910a, 0x2300, 0xaab4,
+ 0x9213, 0x2600, 0x9102, 0x2500, 0x9203, 0x0e90, 0xac36, 0xab3a,
+ 0xae46, 0xad4a, 0x00fe, 0x6043, 0x0000, 0x2c10, 0x080c, 0x1aea,
+ 0x080c, 0x8906, 0x080c, 0x8f0e, 0x009e, 0x0005, 0x0005, 0x9182,
+ 0x0054, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xb6d3,
+ 0xb6d3, 0xb6d3, 0xb6d3, 0xb6d3, 0xb6d5, 0xb76b, 0xb6d3, 0xb6d3,
+ 0xb782, 0xb812, 0xb6d3, 0xb6d3, 0xb6d3, 0xb6d3, 0xb827, 0xb6d3,
+ 0xb6d3, 0xb6d3, 0xb6d3, 0x080c, 0x0dc3, 0x0076, 0x00a6, 0x00e6,
+ 0x0096, 0x2071, 0x0260, 0x6114, 0x2150, 0x7644, 0xb67a, 0x96b4,
+ 0x0fff, 0xb780, 0xc7e5, 0xb782, 0x6210, 0x00b6, 0x2258, 0xba3c,
+ 0x82ff, 0x0110, 0x8211, 0xba3e, 0x00be, 0x86ff, 0x0904, 0xb766,
+ 0x9694, 0xff00, 0x9284, 0x0c00, 0x0120, 0x7048, 0xb096, 0x704c,
+ 0xb092, 0x9284, 0x0300, 0x0904, 0xb766, 0x080c, 0x100d, 0x090c,
+ 0x0dc3, 0x2900, 0xb07e, 0xb780, 0xc7cd, 0xb782, 0xa86b, 0x0103,
+ 0xb06c, 0xa86e, 0xb070, 0xa872, 0xb074, 0xa876, 0xae7a, 0x968c,
+ 0x0c00, 0x0120, 0x7348, 0xab96, 0x734c, 0xab92, 0x968c, 0x00ff,
+ 0x9186, 0x0002, 0x0180, 0x9186, 0x0028, 0x1118, 0xa87f, 0x001c,
+ 0x0060, 0xd6dc, 0x0118, 0xa87f, 0x0015, 0x0038, 0xd6d4, 0x0118,
+ 0xa87f, 0x0007, 0x0010, 0xa87f, 0x0000, 0xaf82, 0xb084, 0xa886,
+ 0xb088, 0xa88a, 0x901e, 0xd6c4, 0x0190, 0x735c, 0xab8a, 0x83ff,
+ 0x0170, 0x938a, 0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308,
+ 0x2019, 0x0018, 0x2011, 0x0026, 0x080c, 0xbd68, 0x003e, 0xd6cc,
+ 0x01e8, 0x7154, 0xa98e, 0x81ff, 0x01c8, 0x9192, 0x0021, 0x1260,
+ 0x8304, 0x9098, 0x0018, 0x2011, 0x002a, 0x080c, 0xbd68, 0x2011,
+ 0x0205, 0x2013, 0x0000, 0x0050, 0xb06c, 0xd0fc, 0x0120, 0x2009,
+ 0x0020, 0xa98e, 0x0c68, 0x2950, 0x080c, 0xbd07, 0x009e, 0x00ee,
+ 0x00ae, 0x007e, 0x0005, 0x00f6, 0x00a6, 0x6003, 0x0003, 0x2079,
+ 0x026c, 0x7c04, 0x7b00, 0x7e0c, 0x7d08, 0x6014, 0x2050, 0xb436,
+ 0xb33a, 0xb646, 0xb54a, 0x00ae, 0x00fe, 0x2c10, 0x080c, 0x1aea,
+ 0x0804, 0x989e, 0x6003, 0x0002, 0x6004, 0x9086, 0x0040, 0x11c8,
+ 0x0096, 0x6014, 0x2048, 0xa880, 0xd0ac, 0x0160, 0x601c, 0xd084,
+ 0x1130, 0x00f6, 0x2c00, 0x2078, 0x080c, 0x16c1, 0x00fe, 0x6003,
+ 0x0004, 0x0010, 0x6003, 0x0002, 0x009e, 0x080c, 0x8d2c, 0x080c,
+ 0x8e38, 0x0096, 0x2001, 0x1964, 0x2004, 0x6042, 0x080c, 0x8de8,
+ 0x080c, 0x8f0e, 0x6114, 0x2148, 0xa980, 0xd1e4, 0x0904, 0xb80d,
+ 0xd1cc, 0x05c8, 0xa97c, 0xa86c, 0xd0fc, 0x0540, 0x0016, 0xa880,
+ 0x0006, 0xa884, 0x0006, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001a,
+ 0x20a0, 0x810e, 0x810e, 0x810f, 0x9184, 0x003f, 0x20e0, 0x9184,
+ 0xffc0, 0x9080, 0x001a, 0x2098, 0x0156, 0x20a9, 0x0020, 0x4003,
+ 0x015e, 0x000e, 0xa886, 0x000e, 0xc0cc, 0xa882, 0x001e, 0xa878,
+ 0x0006, 0x2148, 0x080c, 0x0fbf, 0x001e, 0x0458, 0x0016, 0x080c,
+ 0x0fbf, 0x009e, 0xa880, 0xc0cc, 0xa882, 0xa978, 0x0016, 0x080c,
+ 0xbd58, 0x001e, 0x00f0, 0xa86b, 0x0103, 0xa978, 0x9184, 0x00ff,
+ 0x90b6, 0x0002, 0x0180, 0x9086, 0x0028, 0x1118, 0xa87f, 0x001c,
+ 0x0060, 0xd1dc, 0x0118, 0xa87f, 0x0015, 0x0038, 0xd1d4, 0x0118,
+ 0xa87f, 0x0007, 0x0010, 0xa87f, 0x0000, 0x0016, 0x080c, 0x6a1c,
+ 0x001e, 0xd1e4, 0x1120, 0x080c, 0xa39d, 0x009e, 0x0005, 0x080c,
+ 0xc4c4, 0x0cd8, 0x6004, 0x9086, 0x0040, 0x1120, 0x080c, 0x8d2c,
+ 0x080c, 0x8e38, 0x2019, 0x0001, 0x080c, 0x9c35, 0x6003, 0x0002,
+ 0x080c, 0xc8eb, 0x080c, 0x8de8, 0x080c, 0x8f0e, 0x0005, 0x6004,
+ 0x9086, 0x0040, 0x1120, 0x080c, 0x8d2c, 0x080c, 0x8e38, 0x2019,
+ 0x0001, 0x080c, 0x9c35, 0x080c, 0x8de8, 0x080c, 0x3102, 0x080c,
+ 0xc8e3, 0x0096, 0x6114, 0x2148, 0x080c, 0xc1cd, 0x0150, 0xa86b,
+ 0x0103, 0xa87f, 0x0029, 0xa87b, 0x0000, 0x080c, 0x6c02, 0x080c,
+ 0xc3b4, 0x009e, 0x080c, 0xa39d, 0x080c, 0x8f0e, 0x0005, 0xa87f,
0x0015, 0xd1fc, 0x0180, 0xa87f, 0x0007, 0x8002, 0x8000, 0x810a,
0x9189, 0x0000, 0x0006, 0x0016, 0x2009, 0x1a58, 0x2104, 0x8000,
0x200a, 0x001e, 0x000e, 0xa996, 0xa892, 0x0005, 0x9182, 0x0054,
- 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xb16a, 0xb16a,
- 0xb16a, 0xb16a, 0xb16a, 0xb16c, 0xb16a, 0xb16a, 0xb21a, 0xb16a,
- 0xb16a, 0xb16a, 0xb16a, 0xb16a, 0xb16a, 0xb16a, 0xb16a, 0xb16a,
- 0xb16a, 0xb2fb, 0x080c, 0x0dc4, 0x0076, 0x00a6, 0x00e6, 0x0096,
- 0x2071, 0x0260, 0x6114, 0x2150, 0x7644, 0x86ff, 0x1904, 0xb215,
+ 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xb882, 0xb882,
+ 0xb882, 0xb882, 0xb882, 0xb884, 0xb882, 0xb882, 0xb932, 0xb882,
+ 0xb882, 0xb882, 0xb882, 0xb882, 0xb882, 0xb882, 0xb882, 0xb882,
+ 0xb882, 0xba74, 0x080c, 0x0dc3, 0x0076, 0x00a6, 0x00e6, 0x0096,
+ 0x2071, 0x0260, 0x6114, 0x2150, 0x7644, 0x86ff, 0x1904, 0xb92d,
0xb67a, 0x96b4, 0x0fff, 0xb780, 0xc7e5, 0xb782, 0x6210, 0x00b6,
0x2258, 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0x00be, 0x86ff,
- 0x0904, 0xb20e, 0x9694, 0xff00, 0x9284, 0x0c00, 0x0120, 0x7048,
- 0xb096, 0x704c, 0xb092, 0x9284, 0x0300, 0x0904, 0xb20e, 0x9686,
+ 0x0904, 0xb926, 0x9694, 0xff00, 0x9284, 0x0c00, 0x0120, 0x7048,
+ 0xb096, 0x704c, 0xb092, 0x9284, 0x0300, 0x0904, 0xb926, 0x9686,
0x0100, 0x1130, 0x7064, 0x9005, 0x1118, 0xc6c4, 0xb67a, 0x0c38,
- 0x080c, 0x1001, 0x090c, 0x0dc4, 0x2900, 0xb07e, 0xb780, 0x97bd,
+ 0x080c, 0x100d, 0x090c, 0x0dc3, 0x2900, 0xb07e, 0xb780, 0x97bd,
0x0200, 0xb782, 0xa86b, 0x0103, 0xb06c, 0xa86e, 0xb070, 0xa872,
0xb074, 0xa876, 0x7044, 0x9084, 0xf000, 0x9635, 0xae7a, 0x968c,
0x0c00, 0x0120, 0x7348, 0xab96, 0x734c, 0xab92, 0x968c, 0x00ff,
@@ -5473,1234 +5700,1444 @@ static const uint16_t isp_2300_risc_code[] = {
0xa87f, 0x0007, 0x0010, 0xa87f, 0x0000, 0xaf82, 0xb084, 0xa886,
0xb088, 0xa88a, 0x901e, 0xd6c4, 0x0190, 0x735c, 0xab8a, 0x83ff,
0x0170, 0x938a, 0x0009, 0x0210, 0x2019, 0x0008, 0x0036, 0x2308,
- 0x2019, 0x0018, 0x2011, 0x0026, 0x080c, 0xb54b, 0x003e, 0xd6cc,
+ 0x2019, 0x0018, 0x2011, 0x0026, 0x080c, 0xbd68, 0x003e, 0xd6cc,
0x01e8, 0x7154, 0xa98e, 0x81ff, 0x01c8, 0x9192, 0x0021, 0x1260,
- 0x8304, 0x9098, 0x0018, 0x2011, 0x002a, 0x080c, 0xb54b, 0x2011,
+ 0x8304, 0x9098, 0x0018, 0x2011, 0x002a, 0x080c, 0xbd68, 0x2011,
0x0205, 0x2013, 0x0000, 0x0050, 0xb06c, 0xd0fc, 0x0120, 0x2009,
- 0x0020, 0xa98e, 0x0c68, 0x2950, 0x080c, 0xb4ea, 0x080c, 0x191a,
- 0x009e, 0x00ee, 0x00ae, 0x007e, 0x0005, 0x080c, 0xbf3b, 0x0904,
- 0xb178, 0x0cb0, 0x0096, 0x6114, 0x2148, 0xa83c, 0xa940, 0x9105,
- 0x1118, 0xa880, 0xc0dc, 0xa882, 0x6003, 0x0002, 0xa980, 0xd1e4,
- 0x0904, 0xb2f9, 0xd1cc, 0x0904, 0xb2cd, 0xa97c, 0xa86c, 0xd0fc,
- 0x0904, 0xb28e, 0x0016, 0xa880, 0x0006, 0xa884, 0x0006, 0x00a6,
- 0x2150, 0xb178, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01e0, 0x9086,
- 0x0028, 0x1128, 0xa87f, 0x001c, 0xb07f, 0x001c, 0x00e0, 0xd1dc,
- 0x0158, 0xa87f, 0x0015, 0xb07f, 0x0015, 0x080c, 0xbde9, 0x0118,
- 0xb178, 0xc1dc, 0xb17a, 0x0078, 0xd1d4, 0x0128, 0xa87f, 0x0007,
- 0xb07f, 0x0007, 0x0040, 0xa880, 0xd0ac, 0x0128, 0xa834, 0xa938,
- 0x9115, 0x190c, 0xb137, 0xa880, 0xb082, 0xa894, 0xb096, 0xa890,
- 0xb092, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001a, 0x20a0, 0x20a9,
- 0x0020, 0x8a06, 0x8006, 0x8007, 0x9094, 0x003f, 0x22e0, 0x9084,
- 0xffc0, 0x9080, 0x001a, 0x2098, 0x4003, 0x00ae, 0x000e, 0xa886,
- 0x000e, 0xc0cc, 0xa882, 0x080c, 0xbe96, 0x001e, 0xa878, 0x0006,
- 0x2148, 0x080c, 0x0fb3, 0x001e, 0x0804, 0xb2f7, 0x0016, 0x00a6,
- 0x2150, 0xb178, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01e0, 0x9086,
- 0x0028, 0x1128, 0xa87f, 0x001c, 0xb07f, 0x001c, 0x00e0, 0xd1dc,
- 0x0158, 0xa87f, 0x0015, 0xb07f, 0x0015, 0x080c, 0xbde9, 0x0118,
- 0xb178, 0xc1dc, 0xb17a, 0x0078, 0xd1d4, 0x0128, 0xa87f, 0x0007,
- 0xb07f, 0x0007, 0x0040, 0xa880, 0xd0ac, 0x0128, 0xa834, 0xa938,
- 0x9115, 0x190c, 0xb137, 0xa894, 0xb096, 0xa890, 0xb092, 0xa880,
- 0xb082, 0x00ae, 0x080c, 0x0fb3, 0x009e, 0x080c, 0xbe96, 0xa978,
- 0x0016, 0x080c, 0xb53b, 0x001e, 0x0450, 0xa86b, 0x0103, 0xa978,
- 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01b0, 0x9086, 0x0028, 0x1118,
- 0xa87f, 0x001c, 0x00d0, 0xd1dc, 0x0148, 0xa87f, 0x0015, 0x080c,
- 0xbde9, 0x0118, 0xa978, 0xc1dc, 0xa97a, 0x0078, 0xd1d4, 0x0118,
- 0xa87f, 0x0007, 0x0050, 0xa87f, 0x0000, 0xa880, 0xd0ac, 0x0128,
- 0xa834, 0xa938, 0x9115, 0x190c, 0xb137, 0x080c, 0x6934, 0x080c,
- 0x9f18, 0x009e, 0x0005, 0x6114, 0x0096, 0x2148, 0xa980, 0xd1e4,
- 0x190c, 0x193c, 0x009e, 0x0005, 0x080c, 0x8b2b, 0x0010, 0x080c,
- 0x8be7, 0x080c, 0xb955, 0x01f0, 0x0096, 0x6114, 0x2148, 0x080c,
- 0xbb56, 0x1118, 0x080c, 0xa717, 0x00a0, 0xa86b, 0x0103, 0x2009,
- 0x180c, 0x210c, 0xd18c, 0x11b8, 0xd184, 0x1190, 0x6108, 0xa97e,
- 0x918e, 0x0029, 0x1110, 0x080c, 0xd242, 0xa87b, 0x0000, 0x080c,
- 0x6b1d, 0x009e, 0x080c, 0x9f18, 0x080c, 0x8c37, 0x0804, 0x8d06,
- 0xa87f, 0x0004, 0x0c90, 0xa87f, 0x0004, 0x0c78, 0x9182, 0x0054,
- 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xb352, 0xb352,
- 0xb352, 0xb352, 0xb352, 0xb354, 0xb352, 0xb352, 0xb352, 0xb352,
- 0xb352, 0xb352, 0xb352, 0xb352, 0xb352, 0xb352, 0xb352, 0xb352,
- 0xb352, 0xb352, 0x080c, 0x0dc4, 0x080c, 0x55af, 0x0528, 0x7144,
- 0x918c, 0x0fff, 0x0066, 0x2130, 0x080c, 0xbf3b, 0x006e, 0x11f0,
- 0x6014, 0x9016, 0xd1c4, 0x0118, 0x7264, 0x9294, 0x00ff, 0x0096,
- 0x904d, 0x0188, 0xa87f, 0x0000, 0xa868, 0x9086, 0x0139, 0x0128,
- 0xa86b, 0x0103, 0xa97a, 0xaa9a, 0x0030, 0xa89b, 0x4000, 0xa99e,
- 0xaaa2, 0x080c, 0x6b1d, 0x009e, 0x0804, 0x9f18, 0x0005, 0x9182,
- 0x0085, 0x0002, 0xb391, 0xb38f, 0xb38f, 0xb39d, 0xb38f, 0xb38f,
- 0xb38f, 0xb38f, 0xb38f, 0xb38f, 0xb38f, 0xb38f, 0xb38f, 0x080c,
- 0x0dc4, 0x6003, 0x000b, 0x6106, 0x080c, 0x86d0, 0x0126, 0x2091,
- 0x8000, 0x080c, 0x8c37, 0x012e, 0x0005, 0x0026, 0x0056, 0x00d6,
- 0x00e6, 0x2071, 0x0260, 0x7224, 0x6216, 0x7220, 0x080c, 0xb943,
- 0x01c8, 0x2268, 0x6800, 0x9086, 0x0000, 0x01a0, 0x6010, 0x6d10,
- 0x952e, 0x1180, 0x00c6, 0x2d60, 0x00d6, 0x080c, 0xb5b8, 0x00de,
- 0x00ce, 0x0128, 0x080c, 0xb578, 0x6007, 0x0086, 0x0028, 0x080c,
- 0xb5a7, 0x0dc0, 0x6007, 0x0087, 0x6003, 0x0001, 0x080c, 0x86d0,
- 0x080c, 0x8c37, 0x00ee, 0x00de, 0x005e, 0x002e, 0x0005, 0x9186,
- 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0dc4, 0x908a,
- 0x0092, 0x1a0c, 0x0dc4, 0x9082, 0x0085, 0x00e2, 0x9186, 0x0027,
- 0x0120, 0x9186, 0x0014, 0x0108, 0x0005, 0x080c, 0x8b2b, 0x0096,
- 0x6014, 0x2048, 0x080c, 0xb955, 0x0140, 0xa86b, 0x0103, 0xa87b,
- 0x0000, 0xa87f, 0x0029, 0x080c, 0x6b1d, 0x009e, 0x080c, 0x9f42,
- 0x0804, 0x8c37, 0xb407, 0xb409, 0xb409, 0xb407, 0xb407, 0xb407,
- 0xb407, 0xb407, 0xb407, 0xb407, 0xb407, 0xb407, 0xb407, 0x080c,
- 0x0dc4, 0x080c, 0x8b2b, 0x080c, 0x9f42, 0x080c, 0x8c37, 0x0005,
- 0x9186, 0x0013, 0x1128, 0x6004, 0x9082, 0x0085, 0x2008, 0x04ba,
- 0x9186, 0x0027, 0x11f8, 0x080c, 0x8b2b, 0x080c, 0x3066, 0x080c,
- 0xbf0d, 0x0096, 0x6014, 0x2048, 0x080c, 0xb955, 0x0150, 0xa86b,
- 0x0103, 0xa87b, 0x0000, 0xa87f, 0x0029, 0x080c, 0x6b1d, 0x080c,
- 0xbb39, 0x009e, 0x080c, 0x9f18, 0x080c, 0x8c37, 0x0005, 0x080c,
- 0x9fa3, 0x0ce0, 0x9186, 0x0014, 0x1dd0, 0x080c, 0x8b2b, 0x0096,
- 0x6014, 0x2048, 0x080c, 0xb955, 0x0d60, 0xa86b, 0x0103, 0xa87b,
- 0x0000, 0xa87f, 0x0006, 0xa884, 0xc0ec, 0xa886, 0x08f0, 0xb45e,
- 0xb45c, 0xb45c, 0xb45c, 0xb45c, 0xb45c, 0xb469, 0xb45c, 0xb45c,
- 0xb45c, 0xb45c, 0xb45c, 0xb45c, 0x080c, 0x0dc4, 0x080c, 0x8b2b,
- 0x2001, 0x1964, 0x2004, 0x601a, 0x6003, 0x000c, 0x080c, 0x8c37,
- 0x0005, 0x080c, 0x8b2b, 0x2001, 0x1964, 0x2004, 0x601a, 0x6003,
- 0x000e, 0x080c, 0x8c37, 0x0005, 0x9182, 0x0092, 0x1220, 0x9182,
- 0x0085, 0x0208, 0x0012, 0x0804, 0x9fa3, 0xb48a, 0xb48a, 0xb48a,
- 0xb48a, 0xb48c, 0xb4a4, 0xb48a, 0xb48a, 0xb48a, 0xb48a, 0xb48a,
- 0xb48a, 0xb48a, 0x080c, 0x0dc4, 0x0096, 0x080c, 0xb955, 0x1118,
- 0x080c, 0xbb39, 0x0068, 0x6014, 0x2048, 0xa880, 0xd0e4, 0x1110,
- 0x080c, 0xbb39, 0xa86b, 0x0103, 0x080c, 0xbed3, 0x080c, 0x6b1d,
- 0x080c, 0x9f18, 0x009e, 0x0005, 0x0096, 0x6014, 0x2048, 0x080c,
- 0xb955, 0x01c8, 0xa86b, 0x0103, 0xa884, 0xd0b4, 0x0128, 0xc0ec,
- 0xa886, 0xa87f, 0x0006, 0x0048, 0xd0bc, 0x0118, 0xa87f, 0x0002,
- 0x0020, 0xa87f, 0x0005, 0x080c, 0xbc45, 0xa87b, 0x0000, 0x080c,
- 0x6b1d, 0x080c, 0xbb39, 0x009e, 0x0804, 0x9f18, 0x0016, 0x0096,
- 0x6014, 0x2048, 0x080c, 0xb955, 0x0140, 0xa86b, 0x0103, 0xa87f,
- 0x0028, 0xa87b, 0x0000, 0x080c, 0x6b1d, 0x009e, 0x001e, 0x9186,
- 0x0013, 0x0148, 0x9186, 0x0014, 0x0130, 0x9186, 0x0027, 0x0118,
- 0x080c, 0x9fa3, 0x0030, 0x080c, 0x8b2b, 0x080c, 0x9f42, 0x080c,
- 0x8c37, 0x0005, 0x0056, 0x0066, 0x0096, 0x00a6, 0x2029, 0x0001,
- 0x9182, 0x0101, 0x1208, 0x0010, 0x2009, 0x0100, 0x2130, 0x8304,
- 0x9098, 0x0018, 0x2009, 0x0020, 0x2011, 0x002a, 0x080c, 0xb54b,
- 0x96b2, 0x0020, 0xb004, 0x904d, 0x0110, 0x080c, 0x0fb3, 0x080c,
- 0x1001, 0x0520, 0x8528, 0xa86b, 0x0110, 0xa86f, 0x0000, 0x2920,
- 0xb406, 0x968a, 0x003d, 0x1228, 0x2608, 0x2011, 0x001c, 0x0499,
- 0x00a8, 0x96b2, 0x003c, 0x2009, 0x003c, 0x2950, 0x2011, 0x001c,
- 0x0451, 0x0c28, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f,
- 0x95ad, 0x0003, 0xb56a, 0x95ac, 0x0000, 0x0048, 0x2001, 0x0205,
- 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad, 0x0003, 0xb56a, 0x009e,
- 0x006e, 0x005e, 0x0005, 0x00a6, 0x89ff, 0x0158, 0xa804, 0x9055,
- 0x0130, 0xa807, 0x0000, 0x080c, 0x6b1d, 0x2a48, 0x0cb8, 0x080c,
- 0x6b1d, 0x00ae, 0x0005, 0x00f6, 0x2079, 0x0200, 0x7814, 0x9085,
- 0x0080, 0x7816, 0xd184, 0x0108, 0x8108, 0x810c, 0x20a9, 0x0001,
- 0xa860, 0x20e8, 0xa85c, 0x9200, 0x20a0, 0x20e1, 0x0000, 0x2300,
- 0x9e00, 0x2098, 0x4003, 0x8318, 0x9386, 0x0020, 0x1148, 0x2018,
- 0x2300, 0x9e00, 0x2098, 0x7814, 0x8000, 0x9085, 0x0080, 0x7816,
- 0x8109, 0x1d80, 0x7814, 0x9084, 0xff7f, 0x7816, 0x00fe, 0x0005,
- 0x6920, 0x9186, 0x0003, 0x0118, 0x9186, 0x0002, 0x11d8, 0x00c6,
- 0x00d6, 0x00e6, 0x2d60, 0x0096, 0x6014, 0x2048, 0x080c, 0xb955,
- 0x0158, 0x0089, 0x2001, 0x0006, 0xa984, 0xc1d5, 0x080c, 0x6d45,
- 0x080c, 0x6b11, 0x080c, 0xbb39, 0x009e, 0x080c, 0x9f42, 0x00ee,
- 0x00de, 0x00ce, 0x0005, 0xa880, 0xd0cc, 0x0140, 0x0096, 0xa87c,
- 0x2048, 0x080c, 0x0fb3, 0x009e, 0xa87f, 0x0000, 0x0005, 0x00c6,
+ 0x0020, 0xa98e, 0x0c68, 0x2950, 0x080c, 0xbd07, 0x080c, 0x1962,
+ 0x009e, 0x00ee, 0x00ae, 0x007e, 0x0005, 0x080c, 0xc916, 0x0904,
+ 0xb890, 0x0cb0, 0x2001, 0x1964, 0x2004, 0x6042, 0x0096, 0x6114,
+ 0x2148, 0xa83c, 0xa940, 0x9105, 0x1118, 0xa880, 0xc0dc, 0xa882,
+ 0x6003, 0x0002, 0xa980, 0xd1e4, 0x0904, 0xba6f, 0x6043, 0x0000,
+ 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc, 0x1500, 0xd1cc,
+ 0x0904, 0xba3e, 0xa97c, 0xa86c, 0xd0fc, 0x0904, 0xb9ff, 0x0016,
+ 0xa880, 0x0006, 0xa884, 0x0006, 0x00a6, 0x2150, 0xb178, 0x9184,
+ 0x00ff, 0x90b6, 0x0002, 0x0904, 0xb9cc, 0x9086, 0x0028, 0x1904,
+ 0xb9b8, 0xa87f, 0x001c, 0xb07f, 0x001c, 0x0804, 0xb9d4, 0x6024,
+ 0xd0f4, 0x11d0, 0xa838, 0xaa34, 0x9205, 0x09c8, 0xa838, 0xaa94,
+ 0x9206, 0x1120, 0xa890, 0xaa34, 0x9206, 0x0988, 0x6024, 0xd0d4,
+ 0x1148, 0xa9b0, 0xa834, 0x9102, 0x603a, 0xa9b4, 0xa838, 0x9103,
+ 0x603e, 0x6024, 0xc0f5, 0x6026, 0x6010, 0x00b6, 0x2058, 0xb83c,
+ 0x8000, 0xb83e, 0x00be, 0x9006, 0xa87a, 0xa896, 0xa892, 0xa880,
+ 0xc0e4, 0xa882, 0xd0cc, 0x0140, 0xc0cc, 0xa882, 0x0096, 0xa87c,
+ 0x2048, 0x080c, 0x0fbf, 0x009e, 0x6218, 0x82ff, 0x0168, 0x2001,
+ 0x1964, 0x2004, 0x9202, 0x1240, 0xa86b, 0x0103, 0xa87f, 0x0006,
+ 0xa87b, 0x0000, 0x0804, 0xba66, 0x080c, 0xc4fe, 0x0804, 0xba6f,
+ 0xd1dc, 0x0158, 0xa87f, 0x0015, 0xb07f, 0x0015, 0x080c, 0xc792,
+ 0x0118, 0xb178, 0xc1dc, 0xb17a, 0x0078, 0xd1d4, 0x0128, 0xa87f,
+ 0x0007, 0xb07f, 0x0007, 0x0040, 0xa880, 0xd0ac, 0x0128, 0xa834,
+ 0xa938, 0x9115, 0x190c, 0xb84f, 0xa880, 0xb082, 0xa894, 0xb096,
+ 0xa890, 0xb092, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001a, 0x20a0,
+ 0x20a9, 0x0020, 0x8a06, 0x8006, 0x8007, 0x9094, 0x003f, 0x22e0,
+ 0x9084, 0xffc0, 0x9080, 0x001a, 0x2098, 0x4003, 0x00ae, 0x000e,
+ 0xa886, 0x000e, 0xc0cc, 0xa882, 0x080c, 0xc86c, 0x001e, 0xa878,
+ 0x0006, 0x2148, 0x080c, 0x0fbf, 0x001e, 0x0804, 0xba6b, 0x0016,
+ 0x00a6, 0x2150, 0xb178, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01e0,
+ 0x9086, 0x0028, 0x1128, 0xa87f, 0x001c, 0xb07f, 0x001c, 0x00e0,
+ 0xd1dc, 0x0158, 0xa87f, 0x0015, 0xb07f, 0x0015, 0x080c, 0xc792,
+ 0x0118, 0xb178, 0xc1dc, 0xb17a, 0x0078, 0xd1d4, 0x0128, 0xa87f,
+ 0x0007, 0xb07f, 0x0007, 0x0040, 0xa880, 0xd0ac, 0x0128, 0xa834,
+ 0xa938, 0x9115, 0x190c, 0xb84f, 0xa894, 0xb096, 0xa890, 0xb092,
+ 0xa880, 0xb082, 0x00ae, 0x080c, 0x0fbf, 0x009e, 0x080c, 0xc86c,
+ 0xa978, 0x0016, 0x080c, 0xbd58, 0x001e, 0x0468, 0xa86b, 0x0103,
+ 0xa978, 0x9184, 0x00ff, 0x90b6, 0x0002, 0x01b0, 0x9086, 0x0028,
+ 0x1118, 0xa87f, 0x001c, 0x00d0, 0xd1dc, 0x0148, 0xa87f, 0x0015,
+ 0x080c, 0xc792, 0x0118, 0xa978, 0xc1dc, 0xa97a, 0x0078, 0xd1d4,
+ 0x0118, 0xa87f, 0x0007, 0x0050, 0xa87f, 0x0000, 0xa880, 0xd0ac,
+ 0x0128, 0xa834, 0xa938, 0x9115, 0x190c, 0xb84f, 0xa978, 0x0016,
+ 0x080c, 0x6a1c, 0x001e, 0xd1e4, 0x1120, 0x080c, 0xa39d, 0x009e,
+ 0x0005, 0x080c, 0xc4c4, 0x0cd8, 0x6114, 0x0096, 0x2148, 0xa980,
+ 0xd1e4, 0x190c, 0x1984, 0x009e, 0x0005, 0x080c, 0x8d2c, 0x0010,
+ 0x080c, 0x8de8, 0x080c, 0xc1cd, 0x01f0, 0x0096, 0x6114, 0x2148,
+ 0x080c, 0xc3d1, 0x1118, 0x080c, 0xadb3, 0x00a0, 0xa86b, 0x0103,
+ 0x2009, 0x180c, 0x210c, 0xd18c, 0x11b8, 0xd184, 0x1190, 0x6108,
+ 0xa97e, 0x918e, 0x0029, 0x1110, 0x080c, 0xdfcf, 0xa87b, 0x0000,
+ 0x080c, 0x6c02, 0x009e, 0x080c, 0xa39d, 0x080c, 0x8e38, 0x0804,
+ 0x8f0e, 0xa87f, 0x0004, 0x0c90, 0xa87f, 0x0004, 0x0c78, 0x9182,
+ 0x0054, 0x1220, 0x9182, 0x0040, 0x0208, 0x000a, 0x0005, 0xbacb,
+ 0xbacb, 0xbacb, 0xbacb, 0xbacb, 0xbacd, 0xbacb, 0xbacb, 0xbacb,
+ 0xbacb, 0xbacb, 0xbacb, 0xbacb, 0xbacb, 0xbacb, 0xbacb, 0xbacb,
+ 0xbacb, 0xbacb, 0xbacb, 0x080c, 0x0dc3, 0x080c, 0x566c, 0x0528,
+ 0x7144, 0x918c, 0x0fff, 0x0066, 0x2130, 0x080c, 0xc916, 0x006e,
+ 0x11f0, 0x6014, 0x9016, 0xd1c4, 0x0118, 0x7264, 0x9294, 0x00ff,
+ 0x0096, 0x904d, 0x0188, 0xa87f, 0x0000, 0xa868, 0x9086, 0x0139,
+ 0x0128, 0xa86b, 0x0103, 0xa97a, 0xaa9a, 0x0030, 0xa89b, 0x4000,
+ 0xa99e, 0xaaa2, 0x080c, 0x6c02, 0x009e, 0x0804, 0xa39d, 0x0005,
+ 0x9182, 0x0085, 0x0002, 0xbb0a, 0xbb08, 0xbb08, 0xbb16, 0xbb08,
+ 0xbb08, 0xbb08, 0xbb08, 0xbb08, 0xbb08, 0xbb08, 0xbb08, 0xbb08,
+ 0x080c, 0x0dc3, 0x6003, 0x0001, 0x6106, 0x080c, 0x88a1, 0x0126,
+ 0x2091, 0x8000, 0x080c, 0x8e38, 0x012e, 0x0005, 0x0026, 0x0056,
+ 0x00d6, 0x00e6, 0x2071, 0x0260, 0x7224, 0x6216, 0x7220, 0x080c,
+ 0xc1bb, 0x01f8, 0x2268, 0x6800, 0x9086, 0x0000, 0x01d0, 0x6010,
+ 0x6d10, 0x952e, 0x11b0, 0x00c6, 0x2d60, 0x00d6, 0x080c, 0xbdd8,
+ 0x00de, 0x00ce, 0x0158, 0x702c, 0xd084, 0x1118, 0x080c, 0xbd95,
+ 0x0010, 0x6803, 0x0002, 0x6007, 0x0086, 0x0028, 0x080c, 0xbdc4,
+ 0x0d90, 0x6007, 0x0087, 0x6003, 0x0001, 0x080c, 0x88a1, 0x080c,
+ 0x8e38, 0x7220, 0x080c, 0xc1bb, 0x0178, 0x6810, 0x00b6, 0x2058,
+ 0xb800, 0x00be, 0xd0bc, 0x0140, 0x6824, 0xd0ec, 0x0128, 0x00c6,
+ 0x2d60, 0x080c, 0xc4fe, 0x00ce, 0x00ee, 0x00de, 0x005e, 0x002e,
+ 0x0005, 0x9186, 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c,
+ 0x0dc3, 0x908a, 0x0092, 0x1a0c, 0x0dc3, 0x9082, 0x0085, 0x00e2,
+ 0x9186, 0x0027, 0x0120, 0x9186, 0x0014, 0x0108, 0x0005, 0x080c,
+ 0x8d2c, 0x0096, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x0140, 0xa86b,
+ 0x0103, 0xa87b, 0x0000, 0xa87f, 0x0029, 0x080c, 0x6c02, 0x009e,
+ 0x080c, 0xa3cf, 0x0804, 0x8e38, 0xbb99, 0xbb9b, 0xbb9b, 0xbb99,
+ 0xbb99, 0xbb99, 0xbb99, 0xbb99, 0xbb99, 0xbb99, 0xbb99, 0xbb99,
+ 0xbb99, 0x080c, 0x0dc3, 0x080c, 0x8d2c, 0x080c, 0xa3cf, 0x080c,
+ 0x8e38, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004, 0x9082, 0x0085,
+ 0x2008, 0x04b8, 0x9186, 0x0027, 0x11f8, 0x080c, 0x8d2c, 0x080c,
+ 0x3102, 0x080c, 0xc8e3, 0x0096, 0x6014, 0x2048, 0x080c, 0xc1cd,
+ 0x0150, 0xa86b, 0x0103, 0xa87b, 0x0000, 0xa87f, 0x0029, 0x080c,
+ 0x6c02, 0x080c, 0xc3b4, 0x009e, 0x080c, 0xa39d, 0x080c, 0x8e38,
+ 0x0005, 0x080c, 0xa434, 0x0ce0, 0x9186, 0x0014, 0x1dd0, 0x080c,
+ 0x8d2c, 0x0096, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x0d60, 0xa86b,
+ 0x0103, 0xa87b, 0x0000, 0xa87f, 0x0006, 0xa884, 0xc0ec, 0xa886,
+ 0x08f0, 0x0002, 0xbbf1, 0xbbef, 0xbbef, 0xbbef, 0xbbef, 0xbbef,
+ 0xbc09, 0xbbef, 0xbbef, 0xbbef, 0xbbef, 0xbbef, 0xbbef, 0x080c,
+ 0x0dc3, 0x080c, 0x8d2c, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186,
+ 0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x2001, 0x1962, 0x0010,
+ 0x2001, 0x1963, 0x2004, 0x601a, 0x6003, 0x000c, 0x080c, 0x8e38,
+ 0x0005, 0x080c, 0x8d2c, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186,
+ 0x0039, 0x0118, 0x9186, 0x0035, 0x1118, 0x2001, 0x1962, 0x0010,
+ 0x2001, 0x1963, 0x2004, 0x601a, 0x6003, 0x000e, 0x080c, 0x8e38,
+ 0x0005, 0x9182, 0x0092, 0x1220, 0x9182, 0x0085, 0x0208, 0x0012,
+ 0x0804, 0xa434, 0xbc37, 0xbc37, 0xbc37, 0xbc37, 0xbc39, 0xbc86,
+ 0xbc37, 0xbc37, 0xbc37, 0xbc37, 0xbc37, 0xbc37, 0xbc37, 0x080c,
+ 0x0dc3, 0x0096, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc,
+ 0x0168, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039, 0x0118,
+ 0x9186, 0x0035, 0x1118, 0x009e, 0x0804, 0xbc9a, 0x080c, 0xc1cd,
+ 0x1118, 0x080c, 0xc3b4, 0x0068, 0x6014, 0x2048, 0xa880, 0xd0e4,
+ 0x1110, 0x080c, 0xc3b4, 0xa86b, 0x0103, 0x080c, 0xc8a9, 0x080c,
+ 0x6c02, 0x00d6, 0x2c68, 0x080c, 0xa347, 0x01d0, 0x6003, 0x0001,
+ 0x6007, 0x001e, 0x600b, 0xffff, 0x2009, 0x026e, 0x210c, 0x613a,
+ 0x2009, 0x026f, 0x210c, 0x613e, 0x6910, 0x6112, 0x080c, 0xc640,
+ 0x6954, 0x6156, 0x6023, 0x0001, 0x080c, 0x88a1, 0x080c, 0x8e38,
+ 0x2d60, 0x00de, 0x080c, 0xa39d, 0x009e, 0x0005, 0x6010, 0x00b6,
+ 0x2058, 0xb800, 0x00be, 0xd0bc, 0x05a0, 0x6034, 0x908c, 0xff00,
+ 0x810f, 0x9186, 0x0035, 0x0130, 0x9186, 0x001e, 0x0118, 0x9186,
+ 0x0039, 0x1538, 0x00d6, 0x2c68, 0x080c, 0xc83f, 0x11f0, 0x080c,
+ 0xa347, 0x01d8, 0x6106, 0x6003, 0x0001, 0x6023, 0x0001, 0x6910,
+ 0x6112, 0x692c, 0x612e, 0x6930, 0x6132, 0x6934, 0x918c, 0x00ff,
+ 0x6136, 0x6938, 0x613a, 0x693c, 0x613e, 0x6954, 0x6156, 0x080c,
+ 0xc640, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x2d60, 0x00de, 0x0804,
+ 0xa39d, 0x0096, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x01c8, 0xa86b,
+ 0x0103, 0xa884, 0xd0b4, 0x0128, 0xc0ec, 0xa886, 0xa87f, 0x0006,
+ 0x0048, 0xd0bc, 0x0118, 0xa87f, 0x0002, 0x0020, 0xa87f, 0x0005,
+ 0x080c, 0xc4c0, 0xa87b, 0x0000, 0x080c, 0x6c02, 0x080c, 0xc3b4,
+ 0x009e, 0x0804, 0xa39d, 0x0016, 0x0096, 0x6014, 0x2048, 0x080c,
+ 0xc1cd, 0x0140, 0xa86b, 0x0103, 0xa87f, 0x0028, 0xa87b, 0x0000,
+ 0x080c, 0x6c02, 0x009e, 0x001e, 0x9186, 0x0013, 0x0148, 0x9186,
+ 0x0014, 0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0xa434, 0x0030,
+ 0x080c, 0x8d2c, 0x080c, 0xa3cf, 0x080c, 0x8e38, 0x0005, 0x0056,
+ 0x0066, 0x0096, 0x00a6, 0x2029, 0x0001, 0x9182, 0x0101, 0x1208,
+ 0x0010, 0x2009, 0x0100, 0x2130, 0x8304, 0x9098, 0x0018, 0x2009,
+ 0x0020, 0x2011, 0x002a, 0x080c, 0xbd68, 0x96b2, 0x0020, 0xb004,
+ 0x904d, 0x0110, 0x080c, 0x0fbf, 0x080c, 0x100d, 0x0520, 0x8528,
+ 0xa86b, 0x0110, 0xa86f, 0x0000, 0x2920, 0xb406, 0x968a, 0x003d,
+ 0x1228, 0x2608, 0x2011, 0x001c, 0x0499, 0x00a8, 0x96b2, 0x003c,
+ 0x2009, 0x003c, 0x2950, 0x2011, 0x001c, 0x0451, 0x0c28, 0x2001,
+ 0x0205, 0x2003, 0x0000, 0x00ae, 0x852f, 0x95ad, 0x0003, 0xb56a,
+ 0x95ac, 0x0000, 0x0048, 0x2001, 0x0205, 0x2003, 0x0000, 0x00ae,
+ 0x852f, 0x95ad, 0x0003, 0xb56a, 0x009e, 0x006e, 0x005e, 0x0005,
+ 0x00a6, 0x89ff, 0x0158, 0xa804, 0x9055, 0x0130, 0xa807, 0x0000,
+ 0x080c, 0x6c02, 0x2a48, 0x0cb8, 0x080c, 0x6c02, 0x00ae, 0x0005,
+ 0x00f6, 0x2079, 0x0200, 0x7814, 0x9085, 0x0080, 0x7816, 0xd184,
+ 0x0108, 0x8108, 0x810c, 0x20a9, 0x0001, 0xa860, 0x20e8, 0xa85c,
+ 0x9200, 0x20a0, 0x20e1, 0x0000, 0x2300, 0x9e00, 0x2098, 0x4003,
+ 0x8318, 0x9386, 0x0020, 0x1148, 0x2018, 0x2300, 0x9e00, 0x2098,
+ 0x7814, 0x8000, 0x9085, 0x0080, 0x7816, 0x8109, 0x1d80, 0x7814,
+ 0x9084, 0xff7f, 0x7816, 0x00fe, 0x0005, 0x6920, 0x9186, 0x0003,
+ 0x0118, 0x9186, 0x0002, 0x11d8, 0x00c6, 0x00d6, 0x00e6, 0x2d60,
+ 0x0096, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x0158, 0x0089, 0x2001,
+ 0x0006, 0xa984, 0xc1d5, 0x080c, 0x6e4b, 0x080c, 0x6bf5, 0x080c,
+ 0xc3b4, 0x009e, 0x080c, 0xa3cf, 0x00ee, 0x00de, 0x00ce, 0x0005,
+ 0xa880, 0xd0cc, 0x0140, 0x0096, 0xa87c, 0x2048, 0x080c, 0x0fbf,
+ 0x009e, 0xa87f, 0x0000, 0x0005, 0x00c6, 0x702c, 0xd084, 0x1170,
0x6008, 0x2060, 0x6020, 0x9086, 0x0002, 0x1140, 0x6104, 0x9186,
0x0085, 0x0118, 0x9186, 0x008b, 0x1108, 0x9006, 0x00ce, 0x0005,
0x0066, 0x0126, 0x2091, 0x8000, 0x2031, 0x0001, 0x6020, 0x9084,
0x000f, 0x0083, 0x012e, 0x006e, 0x0005, 0x0126, 0x2091, 0x8000,
0x0066, 0x2031, 0x0000, 0x6020, 0x9084, 0x000f, 0x001b, 0x006e,
- 0x012e, 0x0005, 0xb5ef, 0xb5ef, 0xb5ea, 0xb60f, 0xb5e1, 0xb5ea,
- 0xb5e3, 0xb5ea, 0xb5ea, 0xb5e1, 0xb5ea, 0xb5ea, 0xb5ea, 0xb5e1,
- 0xb5e1, 0x080c, 0x0dc4, 0x0036, 0x2019, 0x0010, 0x080c, 0xccbc,
+ 0x012e, 0x0005, 0xbe0f, 0xbe0f, 0xbe0a, 0xbe31, 0xbe01, 0xbe0a,
+ 0xbe31, 0xbe0a, 0xbe0a, 0xbe01, 0xbe0a, 0xbe0a, 0xbe0a, 0xbe01,
+ 0xbe01, 0x080c, 0x0dc3, 0x0036, 0x2019, 0x0010, 0x080c, 0xd861,
0x003e, 0x0005, 0x9006, 0x0005, 0x9085, 0x0001, 0x0005, 0x0096,
- 0x6014, 0x2048, 0x080c, 0xb955, 0x01c0, 0xa868, 0x9086, 0x0139,
- 0x1128, 0xa87f, 0x0005, 0xa887, 0x0000, 0x0028, 0x900e, 0x2001,
- 0x0005, 0x080c, 0x6d45, 0x080c, 0xbc45, 0x080c, 0x6b11, 0x080c,
- 0x9f42, 0x9085, 0x0001, 0x009e, 0x0005, 0x9006, 0x0ce0, 0x6000,
- 0x908a, 0x0010, 0x1a0c, 0x0dc4, 0x0002, 0xb625, 0xb655, 0xb627,
- 0xb676, 0xb650, 0xb625, 0xb5ea, 0xb5ef, 0xb5ef, 0xb5ea, 0xb5ea,
- 0xb5ea, 0xb5ea, 0xb5ea, 0xb5ea, 0xb5ea, 0x080c, 0x0dc4, 0x86ff,
- 0x1520, 0x6020, 0x9086, 0x0006, 0x0500, 0x0096, 0x6014, 0x2048,
- 0x080c, 0xb955, 0x0168, 0xa880, 0xd0cc, 0x0140, 0x0096, 0xc0cc,
- 0xa882, 0xa87c, 0x2048, 0x080c, 0x0fb3, 0x009e, 0x080c, 0xbc45,
- 0x009e, 0x080c, 0xbead, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023,
- 0x0002, 0x080c, 0x86d0, 0x080c, 0x8c37, 0x9085, 0x0001, 0x0005,
- 0x0066, 0x080c, 0x1950, 0x006e, 0x0890, 0x00e6, 0x2071, 0x19c4,
- 0x7024, 0x9c06, 0x1120, 0x080c, 0x98ee, 0x00ee, 0x0840, 0x6020,
- 0x9084, 0x000f, 0x9086, 0x0006, 0x1150, 0x0086, 0x0096, 0x2049,
- 0x0001, 0x2c40, 0x080c, 0x9a12, 0x009e, 0x008e, 0x0010, 0x080c,
- 0x980e, 0x00ee, 0x1904, 0xb627, 0x0804, 0xb5ea, 0x0036, 0x00e6,
- 0x2071, 0x19c4, 0x703c, 0x9c06, 0x1138, 0x901e, 0x080c, 0x9964,
- 0x00ee, 0x003e, 0x0804, 0xb627, 0x080c, 0x9b40, 0x00ee, 0x003e,
- 0x1904, 0xb627, 0x0804, 0xb5ea, 0x00c6, 0x6020, 0x9084, 0x000f,
- 0x0013, 0x00ce, 0x0005, 0xb6a9, 0xb776, 0xb8a8, 0xb6b3, 0x9f42,
- 0xb6a9, 0xccb6, 0xbf15, 0xb776, 0xb6a2, 0xb91a, 0xb6a2, 0xb6a2,
- 0xb6a2, 0xb6a2, 0x080c, 0x0dc4, 0x080c, 0xbb56, 0x1110, 0x080c,
- 0xa717, 0x0005, 0x080c, 0x8b2b, 0x080c, 0x8c37, 0x0804, 0x9f18,
- 0x601b, 0x0001, 0x0005, 0x080c, 0xb955, 0x0130, 0x6014, 0x0096,
- 0x2048, 0x2c00, 0xa89a, 0x009e, 0x6000, 0x908a, 0x0010, 0x1a0c,
- 0x0dc4, 0x0002, 0xb6d2, 0xb6d4, 0xb6f8, 0xb70c, 0xb732, 0xb6d2,
- 0xb6a9, 0xb6a9, 0xb6a9, 0xb70c, 0xb70c, 0xb6d2, 0xb6d2, 0xb6d2,
- 0xb6d2, 0xb716, 0x080c, 0x0dc4, 0x00e6, 0x6014, 0x0096, 0x2048,
- 0xa884, 0xc0b5, 0xa886, 0x009e, 0x2071, 0x19c4, 0x7024, 0x9c06,
- 0x01a0, 0x080c, 0x980e, 0x080c, 0xbead, 0x6007, 0x0085, 0x6003,
- 0x000b, 0x6023, 0x0002, 0x2001, 0x1964, 0x2004, 0x601a, 0x080c,
- 0x86d0, 0x080c, 0x8c37, 0x00ee, 0x0005, 0x601b, 0x0001, 0x0cd8,
- 0x0096, 0x6014, 0x2048, 0xa884, 0xc0b5, 0xa886, 0x009e, 0x080c,
- 0xbead, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x080c,
- 0x86d0, 0x080c, 0x8c37, 0x0005, 0x0096, 0x601b, 0x0001, 0x6014,
- 0x2048, 0xa884, 0xc0b5, 0xa886, 0x009e, 0x0005, 0x080c, 0x55af,
- 0x01b8, 0x6014, 0x0096, 0x904d, 0x0190, 0xa868, 0xa86b, 0x0103,
- 0xa87f, 0x0006, 0x9086, 0x0139, 0x1150, 0xa86b, 0x0139, 0xa87f,
- 0x0030, 0xa89b, 0x4005, 0xa89f, 0x0004, 0x080c, 0x6b1d, 0x009e,
- 0x0804, 0x9f18, 0x6014, 0x0096, 0x904d, 0x05d8, 0xa980, 0xd1e4,
- 0x05c0, 0x2001, 0x180f, 0x2004, 0xd0c4, 0x0110, 0x009e, 0x0005,
- 0xa888, 0x009e, 0x8003, 0x800b, 0x810b, 0x9108, 0x611a, 0x2001,
- 0x0030, 0x2c08, 0x0026, 0x621c, 0x080c, 0x1553, 0x2001, 0x030c,
- 0x2004, 0x002e, 0x9086, 0x0041, 0x1198, 0x6014, 0x0096, 0x904d,
- 0x090c, 0x0dc4, 0xa884, 0xd0f4, 0x1130, 0xc0f5, 0xa886, 0x009e,
- 0x601b, 0x0002, 0x0068, 0x009e, 0x00c6, 0x080c, 0x2217, 0x00ce,
- 0x6000, 0x9086, 0x0004, 0x1120, 0x2009, 0x0048, 0x080c, 0x9f88,
- 0x0005, 0x009e, 0x080c, 0x1950, 0x0804, 0xb6f8, 0x6000, 0x908a,
- 0x0010, 0x1a0c, 0x0dc4, 0x000b, 0x0005, 0xb78d, 0xb6b0, 0xb78f,
- 0xb78d, 0xb78f, 0xb78d, 0xb6aa, 0xb78d, 0xb6a4, 0xb6a4, 0xb78d,
- 0xb78d, 0xb78d, 0xb78d, 0xb78d, 0xb78d, 0x080c, 0x0dc4, 0x6010,
- 0x00b6, 0x2058, 0xb804, 0x9084, 0x00ff, 0x00be, 0x908a, 0x000c,
- 0x1a0c, 0x0dc4, 0x00b6, 0x0013, 0x00be, 0x0005, 0xb7aa, 0xb86e,
- 0xb7ac, 0xb7e1, 0xb7ac, 0xb7e1, 0xb7ac, 0xb7ba, 0xb7aa, 0xb7e1,
- 0xb7aa, 0xb7d0, 0x080c, 0x0dc4, 0x6004, 0x908e, 0x0016, 0x0568,
- 0x908e, 0x0004, 0x0550, 0x908e, 0x0002, 0x0538, 0x908e, 0x0052,
- 0x0904, 0xb86a, 0x6004, 0x080c, 0xbb56, 0x0904, 0xb887, 0x908e,
- 0x0004, 0x1110, 0x080c, 0x308f, 0x908e, 0x0021, 0x0904, 0xb88b,
- 0x908e, 0x0022, 0x0904, 0xb8a4, 0x908e, 0x003d, 0x0904, 0xb88b,
- 0x908e, 0x0001, 0x1140, 0x6010, 0x2058, 0xb804, 0x9084, 0x00ff,
- 0x9086, 0x0006, 0x0110, 0x080c, 0x3066, 0x080c, 0xa717, 0x0804,
- 0x9f42, 0x00c6, 0x00d6, 0x6104, 0x9186, 0x0016, 0x0904, 0xb85b,
- 0x9186, 0x0002, 0x1904, 0xb830, 0x2001, 0x1836, 0x2004, 0xd08c,
- 0x11c8, 0x080c, 0x72e5, 0x11b0, 0x080c, 0xbef8, 0x0138, 0x080c,
- 0x7308, 0x1120, 0x080c, 0x71f0, 0x0804, 0xb88f, 0x2001, 0x195a,
- 0x2003, 0x0001, 0x2001, 0x1800, 0x2003, 0x0001, 0x080c, 0x7212,
- 0x0804, 0xb88f, 0x6010, 0x2058, 0xb8a0, 0x9086, 0x0080, 0x0130,
- 0x2001, 0x1836, 0x2004, 0xd0ac, 0x1904, 0xb88f, 0xb8a0, 0x9082,
- 0x0081, 0x1a04, 0xb88f, 0xb840, 0x9084, 0x00ff, 0x9005, 0x0180,
- 0x8001, 0xb842, 0x6017, 0x0000, 0x6023, 0x0007, 0x601b, 0x0398,
- 0x080c, 0x9ec2, 0x0128, 0x2b00, 0x6012, 0x6023, 0x0001, 0x0458,
- 0x00de, 0x00ce, 0x6004, 0x908e, 0x0002, 0x11a0, 0x6010, 0x2058,
- 0xb8a0, 0x9086, 0x007e, 0x1170, 0x2009, 0x1836, 0x2104, 0xc085,
- 0x200a, 0x00e6, 0x2071, 0x1800, 0x080c, 0x5e89, 0x00ee, 0x080c,
- 0xa717, 0x0030, 0x080c, 0xa717, 0x080c, 0x3066, 0x080c, 0xbf0d,
- 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x308f, 0x012e, 0x00ee,
- 0x080c, 0x9f42, 0x0005, 0x2001, 0x0002, 0x080c, 0x6372, 0x6003,
- 0x0001, 0x6007, 0x0002, 0x080c, 0x8718, 0x080c, 0x8c37, 0x00de,
- 0x00ce, 0x0c80, 0x080c, 0x308f, 0x0804, 0xb7dd, 0x00c6, 0x00d6,
- 0x6104, 0x9186, 0x0016, 0x0d38, 0x6010, 0x2058, 0xb840, 0x9084,
- 0x00ff, 0x9005, 0x0904, 0xb830, 0x8001, 0xb842, 0x6003, 0x0001,
- 0x080c, 0x8718, 0x080c, 0x8c37, 0x00de, 0x00ce, 0x0898, 0x080c,
- 0xa717, 0x0804, 0xb7df, 0x080c, 0xa753, 0x0804, 0xb7df, 0x00de,
- 0x00ce, 0x080c, 0xa717, 0x080c, 0x3066, 0x00e6, 0x0126, 0x2091,
- 0x8000, 0x080c, 0x308f, 0x6017, 0x0000, 0x6023, 0x0007, 0x601b,
- 0x0398, 0x012e, 0x00ee, 0x0005, 0x080c, 0xa382, 0x1d00, 0x0005,
- 0x6000, 0x908a, 0x0010, 0x1a0c, 0x0dc4, 0x0096, 0x00d6, 0x001b,
- 0x00de, 0x009e, 0x0005, 0xb8c3, 0xb8c3, 0xb8c3, 0xb8c3, 0xb8c3,
- 0xb8c3, 0xb8c3, 0xb8c3, 0xb8c3, 0xb6a9, 0xb8c3, 0xb6b0, 0xb8c5,
- 0xb6b0, 0xb8d2, 0xb8c3, 0x080c, 0x0dc4, 0x6004, 0x9086, 0x008b,
- 0x0148, 0x6007, 0x008b, 0x6003, 0x000d, 0x080c, 0x86d0, 0x080c,
- 0x8c37, 0x0005, 0x080c, 0xbeec, 0x0118, 0x080c, 0xbeff, 0x0010,
- 0x080c, 0xbf0d, 0x080c, 0xbb39, 0x080c, 0xb955, 0x0570, 0x080c,
- 0x3066, 0x080c, 0xb955, 0x0168, 0x6014, 0x2048, 0xa86b, 0x0103,
- 0xa87f, 0x0006, 0xa87b, 0x0000, 0xa884, 0xc0ed, 0xa886, 0x080c,
- 0x6b1d, 0x2c68, 0x080c, 0x9ec2, 0x0150, 0x6810, 0x6012, 0x080c,
- 0xbc97, 0x00c6, 0x2d60, 0x080c, 0x9f42, 0x00ce, 0x0008, 0x2d60,
- 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001, 0x6003, 0x0001,
- 0x080c, 0x8718, 0x080c, 0x8c37, 0x0060, 0x080c, 0xbeec, 0x0138,
- 0x602c, 0x9086, 0x4000, 0x1118, 0x080c, 0x3066, 0x08d0, 0x080c,
- 0x9f42, 0x0005, 0x6000, 0x908a, 0x0010, 0x1a0c, 0x0dc4, 0x0002,
- 0xb930, 0xb930, 0xb934, 0xb932, 0xb93e, 0xb930, 0xb930, 0x9f42,
- 0xb930, 0xb930, 0xb930, 0xb930, 0xb930, 0xb930, 0xb930, 0xb930,
- 0x080c, 0x0dc4, 0x080c, 0x9b40, 0x6114, 0x0096, 0x2148, 0xa87f,
- 0x0006, 0x080c, 0x6b1d, 0x009e, 0x0804, 0x9f18, 0x601c, 0xd084,
- 0x190c, 0x1950, 0x0c88, 0x9284, 0x0003, 0x1158, 0x9282, 0x1cc8,
+ 0x86ff, 0x11d8, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x01c0, 0xa868,
+ 0x9086, 0x0139, 0x1128, 0xa87f, 0x0005, 0xa887, 0x0000, 0x0028,
+ 0x900e, 0x2001, 0x0005, 0x080c, 0x6e4b, 0x080c, 0xc4c0, 0x080c,
+ 0x6bf5, 0x080c, 0xa3cf, 0x9085, 0x0001, 0x009e, 0x0005, 0x9006,
+ 0x0ce0, 0x6000, 0x908a, 0x0010, 0x1a0c, 0x0dc3, 0x0002, 0xbe47,
+ 0xbe77, 0xbe49, 0xbe98, 0xbe72, 0xbe47, 0xbe0a, 0xbe0f, 0xbe0f,
+ 0xbe0a, 0xbe0a, 0xbe0a, 0xbe0a, 0xbe0a, 0xbe0a, 0xbe0a, 0x080c,
+ 0x0dc3, 0x86ff, 0x1520, 0x6020, 0x9086, 0x0006, 0x0500, 0x0096,
+ 0x6014, 0x2048, 0x080c, 0xc1cd, 0x0168, 0xa880, 0xd0cc, 0x0140,
+ 0x0096, 0xc0cc, 0xa882, 0xa87c, 0x2048, 0x080c, 0x0fbf, 0x009e,
+ 0x080c, 0xc4c0, 0x009e, 0x080c, 0xc883, 0x6007, 0x0085, 0x6003,
+ 0x000b, 0x6023, 0x0002, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x9085,
+ 0x0001, 0x0005, 0x0066, 0x080c, 0x1998, 0x006e, 0x0890, 0x00e6,
+ 0x2071, 0x19c4, 0x7024, 0x9c06, 0x1120, 0x080c, 0x9bbf, 0x00ee,
+ 0x0840, 0x6020, 0x9084, 0x000f, 0x9086, 0x0006, 0x1150, 0x0086,
+ 0x0096, 0x2049, 0x0001, 0x2c40, 0x080c, 0x9ce3, 0x009e, 0x008e,
+ 0x0010, 0x080c, 0x9abc, 0x00ee, 0x1904, 0xbe49, 0x0804, 0xbe0a,
+ 0x0036, 0x00e6, 0x2071, 0x19c4, 0x703c, 0x9c06, 0x1138, 0x901e,
+ 0x080c, 0x9c35, 0x00ee, 0x003e, 0x0804, 0xbe49, 0x080c, 0x9e13,
+ 0x00ee, 0x003e, 0x1904, 0xbe49, 0x0804, 0xbe0a, 0x00c6, 0x6020,
+ 0x9084, 0x000f, 0x0013, 0x00ce, 0x0005, 0xbecb, 0xbf98, 0xc106,
+ 0xbed5, 0xa3cf, 0xbecb, 0xd857, 0xc8f0, 0xbf98, 0xbec4, 0xc192,
+ 0xbec4, 0xbec4, 0xbec4, 0xbec4, 0x080c, 0x0dc3, 0x080c, 0xc3d1,
+ 0x1110, 0x080c, 0xadb3, 0x0005, 0x080c, 0x8d2c, 0x080c, 0x8e38,
+ 0x0804, 0xa39d, 0x601b, 0x0001, 0x0005, 0x080c, 0xc1cd, 0x0130,
+ 0x6014, 0x0096, 0x2048, 0x2c00, 0xa89a, 0x009e, 0x6000, 0x908a,
+ 0x0010, 0x1a0c, 0x0dc3, 0x0002, 0xbef4, 0xbef6, 0xbf1a, 0xbf2e,
+ 0xbf54, 0xbef4, 0xbecb, 0xbecb, 0xbecb, 0xbf2e, 0xbf2e, 0xbef4,
+ 0xbef4, 0xbef4, 0xbef4, 0xbf38, 0x080c, 0x0dc3, 0x00e6, 0x6014,
+ 0x0096, 0x2048, 0xa884, 0xc0b5, 0xa886, 0x009e, 0x2071, 0x19c4,
+ 0x7024, 0x9c06, 0x01a0, 0x080c, 0x9abc, 0x080c, 0xc883, 0x6007,
+ 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x2001, 0x1963, 0x2004,
+ 0x601a, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x00ee, 0x0005, 0x601b,
+ 0x0001, 0x0cd8, 0x0096, 0x6014, 0x2048, 0xa884, 0xc0b5, 0xa886,
+ 0x009e, 0x080c, 0xc883, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023,
+ 0x0002, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x0005, 0x0096, 0x601b,
+ 0x0001, 0x6014, 0x2048, 0xa884, 0xc0b5, 0xa886, 0x009e, 0x0005,
+ 0x080c, 0x566c, 0x01b8, 0x6014, 0x0096, 0x904d, 0x0190, 0xa868,
+ 0xa86b, 0x0103, 0xa87f, 0x0006, 0x9086, 0x0139, 0x1150, 0xa86b,
+ 0x0139, 0xa87f, 0x0030, 0xa89b, 0x4005, 0xa89f, 0x0004, 0x080c,
+ 0x6c02, 0x009e, 0x0804, 0xa39d, 0x6014, 0x0096, 0x904d, 0x05d8,
+ 0xa980, 0xd1e4, 0x05c0, 0x2001, 0x180f, 0x2004, 0xd0c4, 0x0110,
+ 0x009e, 0x0005, 0xa888, 0x009e, 0x8003, 0x800b, 0x810b, 0x9108,
+ 0x611a, 0x2001, 0x0030, 0x2c08, 0x0026, 0x621c, 0x080c, 0x1568,
+ 0x2001, 0x030c, 0x2004, 0x002e, 0x9086, 0x0041, 0x1198, 0x6014,
+ 0x0096, 0x904d, 0x090c, 0x0dc3, 0xa884, 0xd0f4, 0x1130, 0xc0f5,
+ 0xa886, 0x009e, 0x601b, 0x0002, 0x0068, 0x009e, 0x00c6, 0x080c,
+ 0x225f, 0x00ce, 0x6000, 0x9086, 0x0004, 0x1120, 0x2009, 0x0048,
+ 0x080c, 0xa419, 0x0005, 0x009e, 0x080c, 0x1998, 0x0804, 0xbf1a,
+ 0x6000, 0x908a, 0x0010, 0x1a0c, 0x0dc3, 0x000b, 0x0005, 0xbfaf,
+ 0xbed2, 0xbfb1, 0xbfaf, 0xbfb1, 0xbfb1, 0xbecc, 0xbfaf, 0xbec6,
+ 0xbec6, 0xbfaf, 0xbfaf, 0xbfaf, 0xbfaf, 0xbfaf, 0xbfaf, 0x080c,
+ 0x0dc3, 0x6010, 0x00b6, 0x2058, 0xb804, 0x9084, 0x00ff, 0x00be,
+ 0x908a, 0x000c, 0x1a0c, 0x0dc3, 0x00b6, 0x0013, 0x00be, 0x0005,
+ 0xbfcc, 0xc09d, 0xbfce, 0xc00e, 0xbfce, 0xc00e, 0xbfce, 0xbfdc,
+ 0xbfcc, 0xc00e, 0xbfcc, 0xbffd, 0x080c, 0x0dc3, 0x6004, 0x908e,
+ 0x0016, 0x05c0, 0x908e, 0x0004, 0x05a8, 0x908e, 0x0002, 0x0590,
+ 0x908e, 0x0052, 0x0904, 0xc099, 0x6004, 0x080c, 0xc3d1, 0x0904,
+ 0xc0b6, 0x908e, 0x0004, 0x1110, 0x080c, 0x312b, 0x908e, 0x0021,
+ 0x0904, 0xc0ba, 0x908e, 0x0022, 0x0904, 0xc101, 0x908e, 0x003d,
+ 0x0904, 0xc0ba, 0x908e, 0x0039, 0x0904, 0xc0be, 0x908e, 0x0035,
+ 0x0904, 0xc0be, 0x908e, 0x001e, 0x0178, 0x908e, 0x0001, 0x1140,
+ 0x6010, 0x2058, 0xb804, 0x9084, 0x00ff, 0x9086, 0x0006, 0x0110,
+ 0x080c, 0x3102, 0x080c, 0xadb3, 0x0804, 0xa3cf, 0x00c6, 0x00d6,
+ 0x6104, 0x9186, 0x0016, 0x0904, 0xc08a, 0x9186, 0x0002, 0x1904,
+ 0xc05f, 0x2001, 0x1836, 0x2004, 0xd08c, 0x11c8, 0x080c, 0x7351,
+ 0x11b0, 0x080c, 0xc8ce, 0x0138, 0x080c, 0x7374, 0x1120, 0x080c,
+ 0x725c, 0x0804, 0xc0ea, 0x2001, 0x1959, 0x2003, 0x0001, 0x2001,
+ 0x1800, 0x2003, 0x0001, 0x080c, 0x727e, 0x0804, 0xc0ea, 0x6010,
+ 0x2058, 0xb8a0, 0x9086, 0x0080, 0x0130, 0x2001, 0x1836, 0x2004,
+ 0xd0ac, 0x1904, 0xc0ea, 0xb8a0, 0x9082, 0x0081, 0x1a04, 0xc0ea,
+ 0xb840, 0x9084, 0x00ff, 0x9005, 0x0190, 0x8001, 0xb842, 0x6017,
+ 0x0000, 0x6023, 0x0007, 0x601b, 0x0398, 0x6043, 0x0000, 0x080c,
+ 0xa347, 0x0128, 0x2b00, 0x6012, 0x6023, 0x0001, 0x0458, 0x00de,
+ 0x00ce, 0x6004, 0x908e, 0x0002, 0x11a0, 0x6010, 0x2058, 0xb8a0,
+ 0x9086, 0x007e, 0x1170, 0x2009, 0x1836, 0x2104, 0xc085, 0x200a,
+ 0x00e6, 0x2071, 0x1800, 0x080c, 0x5f46, 0x00ee, 0x080c, 0xadb3,
+ 0x0030, 0x080c, 0xadb3, 0x080c, 0x3102, 0x080c, 0xc8e3, 0x00e6,
+ 0x0126, 0x2091, 0x8000, 0x080c, 0x312b, 0x012e, 0x00ee, 0x080c,
+ 0xa3cf, 0x0005, 0x2001, 0x0002, 0x080c, 0x6448, 0x6003, 0x0001,
+ 0x6007, 0x0002, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x00de, 0x00ce,
+ 0x0c80, 0x080c, 0x312b, 0x0804, 0xc00a, 0x00c6, 0x00d6, 0x6104,
+ 0x9186, 0x0016, 0x0d38, 0x6010, 0x2058, 0xb840, 0x9084, 0x00ff,
+ 0x9005, 0x0904, 0xc05f, 0x8001, 0xb842, 0x6003, 0x0001, 0x080c,
+ 0x88e9, 0x080c, 0x8e38, 0x00de, 0x00ce, 0x0898, 0x080c, 0xadb3,
+ 0x0804, 0xc00c, 0x080c, 0xadef, 0x0804, 0xc00c, 0x00d6, 0x2c68,
+ 0x6104, 0x080c, 0xc83f, 0x00de, 0x0118, 0x080c, 0xa39d, 0x0408,
+ 0x6004, 0x8007, 0x6134, 0x918c, 0x00ff, 0x9105, 0x6036, 0x6007,
+ 0x0085, 0x6003, 0x000b, 0x6023, 0x0002, 0x603c, 0x600a, 0x2001,
+ 0x1963, 0x2004, 0x601a, 0x602c, 0x2c08, 0x2060, 0x6024, 0xd0b4,
+ 0x0108, 0xc085, 0xc0b5, 0x6026, 0x2160, 0x080c, 0x88a1, 0x080c,
+ 0x8e38, 0x0005, 0x00de, 0x00ce, 0x080c, 0xadb3, 0x080c, 0x3102,
+ 0x00e6, 0x0126, 0x2091, 0x8000, 0x080c, 0x312b, 0x6017, 0x0000,
+ 0x6023, 0x0007, 0x601b, 0x0398, 0x6043, 0x0000, 0x012e, 0x00ee,
+ 0x0005, 0x080c, 0xa820, 0x1904, 0xc0b6, 0x0005, 0x6000, 0x908a,
+ 0x0010, 0x1a0c, 0x0dc3, 0x0096, 0x00d6, 0x001b, 0x00de, 0x009e,
+ 0x0005, 0xc121, 0xc121, 0xc121, 0xc121, 0xc121, 0xc121, 0xc121,
+ 0xc121, 0xc121, 0xbecb, 0xc121, 0xbed2, 0xc123, 0xbed2, 0xc13d,
+ 0xc121, 0x080c, 0x0dc3, 0x6004, 0x9086, 0x008b, 0x01b0, 0x6034,
+ 0x908c, 0xff00, 0x810f, 0x9186, 0x0035, 0x1130, 0x602c, 0x9080,
+ 0x0009, 0x200c, 0xc185, 0x2102, 0x6007, 0x008b, 0x6003, 0x000d,
+ 0x080c, 0x88a1, 0x080c, 0x8e38, 0x0005, 0x080c, 0xc8c2, 0x0118,
+ 0x080c, 0xc8d5, 0x0010, 0x080c, 0xc8e3, 0x080c, 0xc3b4, 0x080c,
+ 0xc1cd, 0x0570, 0x080c, 0x3102, 0x080c, 0xc1cd, 0x0168, 0x6014,
+ 0x2048, 0xa86b, 0x0103, 0xa87f, 0x0006, 0xa87b, 0x0000, 0xa884,
+ 0xc0ed, 0xa886, 0x080c, 0x6c02, 0x2c68, 0x080c, 0xa347, 0x0150,
+ 0x6810, 0x6012, 0x080c, 0xc640, 0x00c6, 0x2d60, 0x080c, 0xa3cf,
+ 0x00ce, 0x0008, 0x2d60, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007,
+ 0x0001, 0x6003, 0x0001, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x00c8,
+ 0x080c, 0xc8c2, 0x0138, 0x6034, 0x9086, 0x4000, 0x1118, 0x080c,
+ 0x3102, 0x08d0, 0x6034, 0x908c, 0xff00, 0x810f, 0x9186, 0x0039,
+ 0x0118, 0x9186, 0x0035, 0x1118, 0x080c, 0x3102, 0x0868, 0x080c,
+ 0xa3cf, 0x0005, 0x6000, 0x908a, 0x0010, 0x1a0c, 0x0dc3, 0x0002,
+ 0xc1a8, 0xc1a8, 0xc1ac, 0xc1aa, 0xc1b6, 0xc1a8, 0xc1a8, 0xa3cf,
+ 0xc1a8, 0xc1a8, 0xc1a8, 0xc1a8, 0xc1a8, 0xc1a8, 0xc1a8, 0xc1a8,
+ 0x080c, 0x0dc3, 0x080c, 0x9e13, 0x6114, 0x0096, 0x2148, 0xa87f,
+ 0x0006, 0x080c, 0x6c02, 0x009e, 0x0804, 0xa39d, 0x601c, 0xd084,
+ 0x190c, 0x1998, 0x0c88, 0x9284, 0x0007, 0x1158, 0x9282, 0x1cd0,
0x0240, 0x2001, 0x1819, 0x2004, 0x9202, 0x1218, 0x9085, 0x0001,
0x0005, 0x9006, 0x0ce8, 0x0096, 0x0028, 0x0096, 0x0006, 0x6014,
0x2048, 0x000e, 0x0006, 0x9984, 0xf000, 0x9086, 0xf000, 0x0110,
- 0x080c, 0x10ac, 0x000e, 0x009e, 0x0005, 0x00e6, 0x00c6, 0x0036,
- 0x0006, 0x0126, 0x2091, 0x8000, 0x2061, 0x1cc8, 0x2071, 0x1800,
- 0x7350, 0x7070, 0x9302, 0x1628, 0x6020, 0x9206, 0x11e0, 0x080c,
- 0xbef8, 0x0180, 0x9286, 0x0001, 0x1168, 0x6004, 0x9086, 0x0004,
- 0x1148, 0x080c, 0x3066, 0x080c, 0xbf0d, 0x00c6, 0x080c, 0x9f42,
- 0x00ce, 0x0048, 0x080c, 0xbb56, 0x1110, 0x080c, 0xa717, 0x00c6,
- 0x080c, 0x9f18, 0x00ce, 0x9ce0, 0x000c, 0x7064, 0x9c02, 0x1208,
- 0x08b8, 0x012e, 0x000e, 0x003e, 0x00ce, 0x00ee, 0x0005, 0x00e6,
- 0x00c6, 0x0016, 0x9188, 0x1000, 0x210c, 0x81ff, 0x0128, 0x2061,
- 0x1a92, 0x6112, 0x080c, 0x3066, 0x9006, 0x0010, 0x9085, 0x0001,
- 0x001e, 0x00ce, 0x00ee, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000,
- 0x080c, 0x9ec2, 0x01b0, 0x6626, 0x2b00, 0x6012, 0x080c, 0x55af,
- 0x0118, 0x080c, 0xba81, 0x0168, 0x080c, 0xbc97, 0x6023, 0x0003,
- 0x2009, 0x004b, 0x080c, 0x9f88, 0x9085, 0x0001, 0x012e, 0x00ce,
- 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0xbaa0,
- 0x080c, 0x9f5b, 0x0560, 0x6027, 0x0000, 0x2b00, 0x6012, 0x080c,
- 0xbc97, 0x6023, 0x0003, 0x0016, 0x080c, 0x8843, 0x0076, 0x903e,
- 0x080c, 0x8748, 0x2c08, 0x080c, 0xce89, 0x007e, 0x001e, 0xd184,
- 0x0128, 0x080c, 0x9f18, 0x9085, 0x0001, 0x0070, 0x080c, 0x55af,
- 0x0128, 0xd18c, 0x1170, 0x080c, 0xba81, 0x0148, 0x2009, 0x004c,
- 0x080c, 0x9f88, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006,
- 0x0cd8, 0x2900, 0x6016, 0x0c90, 0x2009, 0x004d, 0x0010, 0x2009,
- 0x004e, 0x00f6, 0x00c6, 0x0046, 0x0016, 0x080c, 0x9ec2, 0x2c78,
- 0x05a0, 0x7e26, 0x2b00, 0x7812, 0x7823, 0x0003, 0x0016, 0x2021,
- 0x0005, 0x080c, 0xba93, 0x001e, 0x9186, 0x004d, 0x0118, 0x9186,
- 0x004e, 0x0148, 0x2001, 0x195d, 0x200c, 0xd1fc, 0x0168, 0x2f60,
- 0x080c, 0x9f18, 0x00d0, 0x2001, 0x195c, 0x200c, 0xd1fc, 0x0120,
- 0x2f60, 0x080c, 0x9f18, 0x0088, 0x2f60, 0x080c, 0x55af, 0x0138,
- 0xd18c, 0x1118, 0x04f1, 0x0148, 0x0010, 0x2900, 0x7816, 0x001e,
- 0x0016, 0x080c, 0x9f88, 0x9085, 0x0001, 0x001e, 0x004e, 0x00ce,
- 0x00fe, 0x0005, 0x00f6, 0x00c6, 0x0046, 0x080c, 0x9ec2, 0x2c78,
- 0x0508, 0x7e26, 0x2b00, 0x7812, 0x7823, 0x0003, 0x0096, 0x2021,
- 0x0004, 0x0489, 0x009e, 0x2001, 0x195b, 0x200c, 0xd1fc, 0x0120,
- 0x2f60, 0x080c, 0x9f18, 0x0060, 0x2f60, 0x080c, 0x55af, 0x0120,
- 0xd18c, 0x1160, 0x0071, 0x0130, 0x2009, 0x0052, 0x080c, 0x9f88,
- 0x9085, 0x0001, 0x004e, 0x00ce, 0x00fe, 0x0005, 0x2900, 0x7816,
- 0x0c98, 0x00c6, 0x080c, 0x4a61, 0x00ce, 0x1120, 0x080c, 0x9f18,
- 0x9006, 0x0005, 0xa86b, 0x0000, 0xa86f, 0x8000, 0x2900, 0x6016,
- 0x9085, 0x0001, 0x0005, 0x0096, 0x0076, 0x0126, 0x2091, 0x8000,
- 0x080c, 0x654a, 0x0138, 0x900e, 0x2400, 0x080c, 0x6d45, 0x080c,
- 0x6b1d, 0x0cb0, 0x2418, 0x080c, 0x8ac5, 0xbaa0, 0x0086, 0x2041,
- 0x0001, 0x2039, 0x0001, 0x2608, 0x080c, 0x885b, 0x008e, 0x080c,
- 0x8748, 0x2f08, 0x2648, 0x080c, 0xce89, 0xb93c, 0x81ff, 0x090c,
- 0x892e, 0x080c, 0x8c37, 0x012e, 0x007e, 0x009e, 0x0005, 0x00c6,
- 0x0126, 0x2091, 0x8000, 0x080c, 0x9ec2, 0x0190, 0x660a, 0x2b08,
- 0x6112, 0x080c, 0xbc97, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009,
- 0x001f, 0x080c, 0x9f88, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005,
- 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9f5b,
- 0x01b8, 0x660a, 0x2b08, 0x6112, 0x080c, 0xbc97, 0x6023, 0x0008,
- 0x2900, 0x6016, 0x00f6, 0x2c78, 0x080c, 0x1679, 0x00fe, 0x2009,
- 0x0021, 0x080c, 0x9f88, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005,
- 0x9006, 0x0cd8, 0x2009, 0x003d, 0x00c6, 0x0126, 0x0016, 0x2091,
- 0x8000, 0x080c, 0x9ec2, 0x0198, 0x660a, 0x2b08, 0x6112, 0x080c,
- 0xbc97, 0x6023, 0x0001, 0x2900, 0x6016, 0x001e, 0x0016, 0x080c,
- 0x9f88, 0x9085, 0x0001, 0x001e, 0x012e, 0x00ce, 0x0005, 0x9006,
- 0x0cd0, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9f5b, 0x0188,
- 0x2b08, 0x6112, 0x080c, 0xbc97, 0x6023, 0x0001, 0x2900, 0x6016,
- 0x2009, 0x0000, 0x080c, 0x9f88, 0x9085, 0x0001, 0x012e, 0x00ce,
- 0x0005, 0x9006, 0x0cd8, 0x2009, 0x0044, 0x0830, 0x2009, 0x0049,
- 0x0818, 0x0026, 0x00b6, 0x6210, 0x2258, 0xba3c, 0x82ff, 0x0110,
- 0x8211, 0xba3e, 0x00be, 0x002e, 0x0005, 0x0006, 0x0016, 0x6004,
- 0x908e, 0x0002, 0x0140, 0x908e, 0x0003, 0x0128, 0x908e, 0x0004,
- 0x0110, 0x9085, 0x0001, 0x001e, 0x000e, 0x0005, 0x0006, 0x0086,
- 0x0096, 0x6020, 0x9086, 0x0004, 0x01a8, 0x6014, 0x904d, 0x080c,
- 0xb955, 0x0180, 0xa868, 0x9086, 0x0139, 0x0170, 0x6020, 0x90c6,
- 0x0003, 0x0140, 0x90c6, 0x0002, 0x0128, 0xa86c, 0xd0fc, 0x0110,
- 0x9006, 0x0010, 0x9085, 0x0001, 0x009e, 0x008e, 0x000e, 0x0005,
- 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9f5b, 0x0198, 0x2b08,
- 0x6112, 0x080c, 0xbc97, 0x6023, 0x0001, 0x2900, 0x6016, 0x080c,
- 0x3066, 0x2009, 0x0028, 0x080c, 0x9f88, 0x9085, 0x0001, 0x012e,
- 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x9186, 0x0015, 0x11a8, 0x2011,
- 0x1823, 0x2204, 0x9086, 0x0074, 0x1178, 0x00b6, 0x080c, 0xa9a1,
- 0x00be, 0x080c, 0xabf3, 0x6003, 0x0001, 0x6007, 0x0029, 0x080c,
- 0x8718, 0x080c, 0x8c37, 0x0078, 0x6014, 0x0096, 0x2048, 0xa86c,
- 0x009e, 0xd0fc, 0x0148, 0x2001, 0x0001, 0x080c, 0xbe57, 0x080c,
- 0xa717, 0x080c, 0x9f18, 0x0005, 0x0096, 0x6014, 0x904d, 0x090c,
- 0x0dc4, 0xa87f, 0x0030, 0xa887, 0x0000, 0xa89b, 0x4005, 0xa89f,
- 0x0004, 0xa86b, 0x0139, 0x0126, 0x2091, 0x8000, 0x080c, 0x6b1d,
- 0x012e, 0x009e, 0x080c, 0x9f18, 0x0c30, 0x0096, 0x9186, 0x0016,
- 0x1128, 0x2001, 0x0004, 0x080c, 0x6372, 0x00e8, 0x9186, 0x0015,
- 0x1510, 0x2011, 0x1823, 0x2204, 0x9086, 0x0014, 0x11e0, 0x6010,
- 0x00b6, 0x2058, 0x080c, 0x64ac, 0x00be, 0x080c, 0xacce, 0x1198,
- 0x6010, 0x00b6, 0x2058, 0xb890, 0x00be, 0x9005, 0x0160, 0x2001,
- 0x0006, 0x080c, 0x6372, 0x6014, 0x2048, 0xa86c, 0xd0fc, 0x0170,
- 0x080c, 0xa305, 0x0048, 0x6014, 0x2048, 0xa86c, 0xd0fc, 0x0500,
- 0x080c, 0xa717, 0x080c, 0x9f18, 0x009e, 0x0005, 0x6014, 0x6310,
- 0x2358, 0x904d, 0x090c, 0x0dc4, 0xa87f, 0x0000, 0xa887, 0x0000,
- 0xa89b, 0x4000, 0x080c, 0x6643, 0xa99e, 0x080c, 0x4d2a, 0x0126,
- 0x2091, 0x8000, 0x080c, 0x6b1d, 0x012e, 0x080c, 0x9f18, 0x0c20,
- 0x6014, 0x904d, 0x090c, 0x0dc4, 0xa87f, 0x0030, 0xa887, 0x0000,
+ 0x080c, 0x10b8, 0x000e, 0x009e, 0x0005, 0x00e6, 0x00c6, 0x0036,
+ 0x0006, 0x0126, 0x2091, 0x8000, 0x2061, 0x1cd0, 0x2071, 0x1800,
+ 0x7350, 0x7070, 0x9302, 0x1640, 0x6020, 0x9206, 0x11f8, 0x080c,
+ 0xc8ce, 0x0180, 0x9286, 0x0001, 0x1168, 0x6004, 0x9086, 0x0004,
+ 0x1148, 0x080c, 0x3102, 0x080c, 0xc8e3, 0x00c6, 0x080c, 0xa3cf,
+ 0x00ce, 0x0060, 0x080c, 0xc5ba, 0x0148, 0x080c, 0xc3d1, 0x1110,
+ 0x080c, 0xadb3, 0x00c6, 0x080c, 0xa39d, 0x00ce, 0x9ce0, 0x0018,
+ 0x7064, 0x9c02, 0x1208, 0x08a0, 0x012e, 0x000e, 0x003e, 0x00ce,
+ 0x00ee, 0x0005, 0x00e6, 0x00c6, 0x0016, 0x9188, 0x1000, 0x210c,
+ 0x81ff, 0x0128, 0x2061, 0x1a92, 0x6112, 0x080c, 0x3102, 0x9006,
+ 0x0010, 0x9085, 0x0001, 0x001e, 0x00ce, 0x00ee, 0x0005, 0x00c6,
+ 0x0126, 0x2091, 0x8000, 0x080c, 0xa347, 0x01b0, 0x6656, 0x2b00,
+ 0x6012, 0x080c, 0x566c, 0x0118, 0x080c, 0xc2fc, 0x0168, 0x080c,
+ 0xc640, 0x6023, 0x0003, 0x2009, 0x004b, 0x080c, 0xa419, 0x9085,
+ 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126,
+ 0x2091, 0x8000, 0xbaa0, 0x080c, 0xa3ec, 0x0560, 0x6057, 0x0000,
+ 0x2b00, 0x6012, 0x080c, 0xc640, 0x6023, 0x0003, 0x0016, 0x080c,
+ 0x8a2b, 0x0076, 0x903e, 0x080c, 0x8919, 0x2c08, 0x080c, 0xda37,
+ 0x007e, 0x001e, 0xd184, 0x0128, 0x080c, 0xa39d, 0x9085, 0x0001,
+ 0x0070, 0x080c, 0x566c, 0x0128, 0xd18c, 0x1170, 0x080c, 0xc2fc,
+ 0x0148, 0x2009, 0x004c, 0x080c, 0xa419, 0x9085, 0x0001, 0x012e,
+ 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2900, 0x6016, 0x0c90, 0x2009,
+ 0x004d, 0x0010, 0x2009, 0x004e, 0x00f6, 0x00c6, 0x0046, 0x0016,
+ 0x080c, 0xa347, 0x2c78, 0x05a0, 0x7e56, 0x2b00, 0x7812, 0x7823,
+ 0x0003, 0x0016, 0x2021, 0x0005, 0x080c, 0xc30e, 0x001e, 0x9186,
+ 0x004d, 0x0118, 0x9186, 0x004e, 0x0148, 0x2001, 0x195c, 0x200c,
+ 0xd1fc, 0x0168, 0x2f60, 0x080c, 0xa39d, 0x00d0, 0x2001, 0x195b,
+ 0x200c, 0xd1fc, 0x0120, 0x2f60, 0x080c, 0xa39d, 0x0088, 0x2f60,
+ 0x080c, 0x566c, 0x0138, 0xd18c, 0x1118, 0x04f1, 0x0148, 0x0010,
+ 0x2900, 0x7816, 0x001e, 0x0016, 0x080c, 0xa419, 0x9085, 0x0001,
+ 0x001e, 0x004e, 0x00ce, 0x00fe, 0x0005, 0x00f6, 0x00c6, 0x0046,
+ 0x080c, 0xa347, 0x2c78, 0x0508, 0x7e56, 0x2b00, 0x7812, 0x7823,
+ 0x0003, 0x0096, 0x2021, 0x0004, 0x0489, 0x009e, 0x2001, 0x195a,
+ 0x200c, 0xd1fc, 0x0120, 0x2f60, 0x080c, 0xa39d, 0x0060, 0x2f60,
+ 0x080c, 0x566c, 0x0120, 0xd18c, 0x1160, 0x0071, 0x0130, 0x2009,
+ 0x0052, 0x080c, 0xa419, 0x9085, 0x0001, 0x004e, 0x00ce, 0x00fe,
+ 0x0005, 0x2900, 0x7816, 0x0c98, 0x00c6, 0x080c, 0x4b11, 0x00ce,
+ 0x1120, 0x080c, 0xa39d, 0x9006, 0x0005, 0xa86b, 0x0000, 0xa86f,
+ 0x8000, 0x2900, 0x6016, 0x9085, 0x0001, 0x0005, 0x0096, 0x0076,
+ 0x0126, 0x2091, 0x8000, 0x080c, 0x6652, 0x0138, 0x900e, 0x2400,
+ 0x080c, 0x6e4b, 0x080c, 0x6c02, 0x0cb0, 0x2418, 0x080c, 0x8cc6,
+ 0xbaa0, 0x0086, 0x2041, 0x0001, 0x2039, 0x0001, 0x2608, 0x080c,
+ 0x8a43, 0x008e, 0x080c, 0x8919, 0x2f08, 0x2648, 0x080c, 0xda37,
+ 0xb93c, 0x81ff, 0x090c, 0x8b16, 0x080c, 0x8e38, 0x012e, 0x007e,
+ 0x009e, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0xa347,
+ 0x0190, 0x660a, 0x2b08, 0x6112, 0x080c, 0xc640, 0x6023, 0x0001,
+ 0x2900, 0x6016, 0x2009, 0x001f, 0x080c, 0xa419, 0x9085, 0x0001,
+ 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091,
+ 0x8000, 0x080c, 0xa3ec, 0x01b8, 0x660a, 0x2b08, 0x6112, 0x080c,
+ 0xc640, 0x6023, 0x0008, 0x2900, 0x6016, 0x00f6, 0x2c78, 0x080c,
+ 0x16c1, 0x00fe, 0x2009, 0x0021, 0x080c, 0xa419, 0x9085, 0x0001,
+ 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2009, 0x003d, 0x00c6,
+ 0x0126, 0x0016, 0x2091, 0x8000, 0x080c, 0xa347, 0x0198, 0x660a,
+ 0x2b08, 0x6112, 0x080c, 0xc640, 0x6023, 0x0001, 0x2900, 0x6016,
+ 0x001e, 0x0016, 0x080c, 0xa419, 0x9085, 0x0001, 0x001e, 0x012e,
+ 0x00ce, 0x0005, 0x9006, 0x0cd0, 0x00c6, 0x0126, 0x2091, 0x8000,
+ 0x080c, 0xa3ec, 0x0188, 0x2b08, 0x6112, 0x080c, 0xc640, 0x6023,
+ 0x0001, 0x2900, 0x6016, 0x2009, 0x0000, 0x080c, 0xa419, 0x9085,
+ 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x2009, 0x0044,
+ 0x0830, 0x2009, 0x0049, 0x0818, 0x0026, 0x00b6, 0x6210, 0x2258,
+ 0xba3c, 0x82ff, 0x0110, 0x8211, 0xba3e, 0x00be, 0x002e, 0x0005,
+ 0x0006, 0x0016, 0x6004, 0x908e, 0x0002, 0x0140, 0x908e, 0x0003,
+ 0x0128, 0x908e, 0x0004, 0x0110, 0x9085, 0x0001, 0x001e, 0x000e,
+ 0x0005, 0x0006, 0x0086, 0x0096, 0x6020, 0x9086, 0x0004, 0x01a8,
+ 0x6014, 0x904d, 0x080c, 0xc1cd, 0x0180, 0xa868, 0x9086, 0x0139,
+ 0x0170, 0x6020, 0x90c6, 0x0003, 0x0140, 0x90c6, 0x0002, 0x0128,
+ 0xa86c, 0xd0fc, 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x009e,
+ 0x008e, 0x000e, 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c,
+ 0xa3ec, 0x0198, 0x2b08, 0x6112, 0x080c, 0xc640, 0x6023, 0x0001,
+ 0x2900, 0x6016, 0x080c, 0x3102, 0x2009, 0x0028, 0x080c, 0xa419,
+ 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x9186,
+ 0x0015, 0x11a8, 0x2011, 0x1823, 0x2204, 0x9086, 0x0074, 0x1178,
+ 0x00b6, 0x080c, 0xb055, 0x00be, 0x080c, 0xb2a7, 0x6003, 0x0001,
+ 0x6007, 0x0029, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x0078, 0x6014,
+ 0x0096, 0x2048, 0xa86c, 0x009e, 0xd0fc, 0x0148, 0x2001, 0x0001,
+ 0x080c, 0xc800, 0x080c, 0xadb3, 0x080c, 0xa39d, 0x0005, 0x0096,
+ 0x6014, 0x904d, 0x090c, 0x0dc3, 0xa87f, 0x0030, 0xa887, 0x0000,
0xa89b, 0x4005, 0xa89f, 0x0004, 0xa86b, 0x0139, 0x0126, 0x2091,
- 0x8000, 0x080c, 0x6b1d, 0x012e, 0x080c, 0x9f18, 0x0868, 0xa87c,
- 0x9086, 0x0005, 0x1108, 0x0009, 0x0005, 0xa884, 0xc0ad, 0xa886,
- 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00e6, 0x2001, 0x195f,
- 0x200c, 0x8000, 0x2014, 0x2001, 0x0032, 0x080c, 0x854b, 0x2001,
- 0x1963, 0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2001, 0x1961,
- 0x200c, 0x8000, 0x2014, 0x2071, 0x1949, 0x711a, 0x721e, 0x2001,
- 0x0064, 0x080c, 0x854b, 0x2001, 0x1964, 0x82ff, 0x1110, 0x2011,
- 0x0014, 0x2202, 0x080c, 0x6727, 0x00ee, 0x003e, 0x002e, 0x001e,
- 0x000e, 0x0005, 0x0006, 0x0016, 0x00e6, 0x2001, 0x1963, 0x2003,
- 0x0028, 0x2001, 0x1964, 0x2003, 0x0014, 0x2071, 0x1949, 0x701b,
- 0x0000, 0x701f, 0x07d0, 0x00ee, 0x001e, 0x000e, 0x0005, 0x0096,
- 0x6028, 0x904d, 0x0110, 0x080c, 0x1033, 0x009e, 0x0005, 0x0005,
- 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9ec2, 0x0180, 0x2b08,
- 0x6112, 0x0ca9, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009, 0x0033,
- 0x080c, 0x9f88, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x9006,
- 0x0cd8, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015,
- 0x1520, 0x708c, 0x9086, 0x0018, 0x0120, 0x708c, 0x9086, 0x0014,
- 0x11e0, 0x6014, 0x2048, 0xaa3c, 0xd2e4, 0x1160, 0x2c78, 0x080c,
- 0x8e2f, 0x01d8, 0x7078, 0xaa50, 0x9206, 0x1160, 0x707c, 0xaa54,
- 0x9206, 0x1140, 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be, 0x900e,
- 0x080c, 0x30af, 0x080c, 0xa305, 0x0020, 0x080c, 0xa717, 0x080c,
- 0x9f18, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c, 0xaa54, 0x9206,
- 0x0d48, 0x0c80, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0x9ec2,
- 0x0188, 0x2b08, 0x6112, 0x080c, 0xbc97, 0x6023, 0x0001, 0x2900,
- 0x6016, 0x2009, 0x004d, 0x080c, 0x9f88, 0x9085, 0x0001, 0x012e,
- 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091, 0x8000,
- 0x0016, 0x080c, 0x9ec2, 0x0180, 0x2b08, 0x6112, 0x080c, 0xbc97,
- 0x6023, 0x0001, 0x2900, 0x6016, 0x001e, 0x080c, 0x9f88, 0x9085,
- 0x0001, 0x012e, 0x00ce, 0x0005, 0x001e, 0x9006, 0x0cd0, 0x0016,
- 0x0026, 0x0036, 0x0046, 0x0056, 0x0066, 0x0096, 0x00e6, 0x00f6,
- 0x2071, 0x1800, 0x9186, 0x0015, 0x1568, 0x718c, 0x6014, 0x2048,
- 0xa814, 0x8003, 0x9106, 0x1530, 0x20e1, 0x0000, 0x2001, 0x197d,
- 0x2003, 0x0000, 0x6014, 0x2048, 0xa830, 0x20a8, 0x8906, 0x8006,
- 0x8007, 0x9094, 0x003f, 0x22e8, 0x9084, 0xffc0, 0x9080, 0x001c,
- 0x20a0, 0x2001, 0x197d, 0x0016, 0x200c, 0x080c, 0xc443, 0x001e,
- 0xa804, 0x9005, 0x0110, 0x2048, 0x0c38, 0x6014, 0x2048, 0xa86b,
- 0x0103, 0x0010, 0x080c, 0xa717, 0x080c, 0x9f18, 0x00fe, 0x00ee,
- 0x009e, 0x006e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e, 0x0005,
- 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, 0x11b8,
- 0x708c, 0x9086, 0x0004, 0x1198, 0x6014, 0x2048, 0x2c78, 0x080c,
- 0x8e2f, 0x01a8, 0x7078, 0xaa78, 0x9206, 0x1130, 0x707c, 0xaa7c,
- 0x9206, 0x1110, 0x080c, 0x3066, 0x080c, 0xa305, 0x0020, 0x080c,
- 0xa717, 0x080c, 0x9f18, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c,
- 0xaa7c, 0x9206, 0x0d78, 0x0c80, 0x0096, 0x00e6, 0x00f6, 0x2071,
- 0x1800, 0x9186, 0x0015, 0x1550, 0x708c, 0x9086, 0x0004, 0x1530,
- 0x6014, 0x2048, 0x2c78, 0x080c, 0x8e2f, 0x05f0, 0x7078, 0xaad0,
- 0x9206, 0x1180, 0x707c, 0xaad4, 0x9206, 0x1160, 0x080c, 0x3066,
- 0x0016, 0xa99c, 0xaab4, 0x9284, 0x1000, 0xc0fd, 0x080c, 0x5552,
- 0x001e, 0x0010, 0x080c, 0x533c, 0x080c, 0xb955, 0x0508, 0xa87f,
- 0x0000, 0xa887, 0x0000, 0xa89b, 0x4000, 0x0080, 0x080c, 0xb955,
- 0x01b8, 0x6014, 0x2048, 0x080c, 0x533c, 0x1d70, 0xa87f, 0x0030,
- 0xa887, 0x0000, 0xa89b, 0x4005, 0xa89f, 0x0004, 0x0126, 0x2091,
- 0x8000, 0xa86b, 0x0139, 0x080c, 0x6b1d, 0x012e, 0x080c, 0x9f18,
- 0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c, 0xaad4, 0x9206, 0x0930,
- 0x0888, 0x0016, 0x0026, 0xa880, 0xd0ac, 0x0178, 0xa938, 0xaa34,
- 0x2100, 0x9205, 0x0150, 0xa894, 0x9106, 0x1118, 0xa890, 0x9206,
- 0x0120, 0xa996, 0xaa92, 0x9085, 0x0001, 0x002e, 0x001e, 0x0005,
- 0x00b6, 0x00d6, 0x0036, 0x080c, 0xb955, 0x0904, 0xbe53, 0x0096,
- 0x6314, 0x2348, 0xa87e, 0xa986, 0x929e, 0x4000, 0x1550, 0x6310,
- 0x00c6, 0x2358, 0x2009, 0x0000, 0xa86c, 0xd0f4, 0x1110, 0x080c,
- 0x6643, 0xaa9a, 0xa99e, 0x20a9, 0x0004, 0xa860, 0x20e8, 0xa85c,
- 0x9080, 0x0032, 0x20a0, 0xb8b0, 0x20e0, 0xb8b4, 0x9080, 0x0006,
- 0x2098, 0x080c, 0x0f7e, 0x20a9, 0x0004, 0xa85c, 0x9080, 0x0036,
- 0x20a0, 0xb8b4, 0x9080, 0x000a, 0x2098, 0x080c, 0x0f7e, 0x00ce,
- 0x0090, 0xaa9a, 0x3918, 0x9398, 0x0007, 0x231c, 0x6004, 0x9086,
- 0x0016, 0x0110, 0xa89f, 0x0004, 0xaba6, 0x6310, 0x2358, 0xb804,
- 0x9084, 0x00ff, 0xa8a2, 0xa86c, 0xc0f4, 0xa86e, 0x080c, 0x6b11,
- 0x6017, 0x0000, 0x009e, 0x003e, 0x00de, 0x00be, 0x0005, 0x0026,
- 0x0036, 0x0046, 0x00b6, 0x0096, 0x00f6, 0x6214, 0x2248, 0x6210,
- 0x2258, 0x2079, 0x0260, 0x9096, 0x0000, 0x11a0, 0xb814, 0x9084,
- 0x00ff, 0x900e, 0x080c, 0x269f, 0x2118, 0x831f, 0x939c, 0xff00,
- 0x7838, 0x9084, 0x00ff, 0x931d, 0x7c3c, 0x2011, 0x8018, 0x080c,
- 0x4abd, 0x00a8, 0x9096, 0x0001, 0x1148, 0x89ff, 0x0180, 0xa89f,
- 0x000d, 0x7838, 0xa8aa, 0x783c, 0xa8ae, 0x0048, 0x9096, 0x0002,
- 0x1130, 0xa89f, 0x000d, 0x7838, 0xa8aa, 0x783c, 0xa8ae, 0x00fe,
- 0x009e, 0x00be, 0x004e, 0x003e, 0x002e, 0x0005, 0xa978, 0xd1cc,
- 0x0198, 0x918c, 0x00ff, 0x918e, 0x0002, 0x1170, 0xa9ac, 0x918c,
- 0x000f, 0x918e, 0x0001, 0x1140, 0xa880, 0xd0ac, 0x0128, 0xa834,
- 0xa938, 0x9115, 0x190c, 0xb137, 0x0005, 0x0036, 0x2019, 0x0001,
- 0x0010, 0x0036, 0x901e, 0x04c1, 0x01e0, 0x080c, 0xb955, 0x01c8,
- 0x080c, 0xbb39, 0x602f, 0x4000, 0x6014, 0x6017, 0x0000, 0x0096,
- 0x2048, 0xa880, 0x080c, 0xbb56, 0x1118, 0x080c, 0xa717, 0x0040,
- 0xa86b, 0x0103, 0xa87b, 0x0000, 0x83ff, 0x1129, 0x080c, 0x6b1d,
- 0x009e, 0x003e, 0x0005, 0xa884, 0xd0b4, 0x0128, 0xa87f, 0x0006,
- 0xc0ec, 0xa886, 0x0070, 0xd0bc, 0x0118, 0xa87f, 0x0002, 0x0048,
- 0xd0dc, 0x0118, 0xa87f, 0x0003, 0x0020, 0xa87f, 0x0005, 0x080c,
- 0xbc45, 0xa87b, 0x0000, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0ec,
- 0x0005, 0x0006, 0x2001, 0x1810, 0x2004, 0xd0f4, 0x000e, 0x0005,
- 0x0006, 0x2001, 0x1810, 0x2004, 0xd0e4, 0x000e, 0x0005, 0x0036,
- 0x0046, 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0007,
- 0x080c, 0x4c74, 0x004e, 0x003e, 0x0005, 0x0c51, 0x1d81, 0x0005,
- 0x2001, 0x1963, 0x2004, 0x601a, 0x0005, 0x080c, 0x9f18, 0x0804,
- 0x8c37, 0x2001, 0x0109, 0x2004, 0xd084, 0x01e0, 0x0126, 0x2091,
- 0x2800, 0x0006, 0x0016, 0x0026, 0x0036, 0x00f6, 0x00e6, 0x00c6,
- 0x2079, 0x19c4, 0x2071, 0x1800, 0x2061, 0x0100, 0x080c, 0x85b8,
- 0x00ce, 0x00ee, 0x00fe, 0x003e, 0x002e, 0x001e, 0x000e, 0x012e,
- 0x9085, 0x0001, 0x0005, 0x0016, 0x0026, 0x2009, 0x1823, 0x210c,
- 0x9694, 0x0c00, 0x0118, 0x9182, 0x0010, 0x02c8, 0x9016, 0xd6cc,
- 0x0120, 0x9182, 0x0014, 0x0298, 0x7254, 0x9006, 0xd6c4, 0x0120,
- 0x9182, 0x0018, 0x0260, 0x705c, 0x9200, 0x0248, 0x0128, 0x9080,
- 0x0018, 0x9102, 0x0220, 0x9006, 0x002e, 0x001e, 0x0005, 0x080c,
- 0x826a, 0x9085, 0x0001, 0x0cc0, 0x00b6, 0x0066, 0x6000, 0x90b2,
- 0x0010, 0x1a0c, 0x0dc4, 0x001b, 0x006e, 0x00be, 0x0005, 0xbf7f,
- 0xc5a8, 0xc71d, 0xbf7f, 0xbf7f, 0xbf7f, 0xbf7f, 0xbf7f, 0xbfb6,
- 0xc79a, 0xbf7f, 0xbf7f, 0xbf7f, 0xbf7f, 0xbf7f, 0xbf7f, 0x080c,
- 0x0dc4, 0x0066, 0x6000, 0x90b2, 0x0010, 0x1a0c, 0x0dc4, 0x0013,
- 0x006e, 0x0005, 0xbf9a, 0xcc4f, 0xbf9a, 0xbf9a, 0xbf9a, 0xbf9a,
- 0xbf9a, 0xbf9a, 0xcbfc, 0xcca3, 0xbf9a, 0xd1a5, 0xd1db, 0xd1a5,
- 0xd1db, 0xbf9a, 0x080c, 0x0dc4, 0x6000, 0x9082, 0x0010, 0x1a0c,
- 0x0dc4, 0x6000, 0x000a, 0x0005, 0xbfb4, 0xc96b, 0xca29, 0xca43,
- 0xcace, 0xbfb4, 0xcb6f, 0xcb27, 0xc7a6, 0xcbd2, 0xcbe7, 0xbfb4,
- 0xbfb4, 0xbfb4, 0xbfb4, 0xbfb4, 0x080c, 0x0dc4, 0x91b2, 0x0054,
- 0x1a0c, 0x0dc4, 0x2100, 0x91b2, 0x0040, 0x1a04, 0xc34c, 0x0002,
- 0xc000, 0xc214, 0xc000, 0xc000, 0xc000, 0xc21d, 0xc000, 0xc000,
- 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000,
- 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc002,
- 0xc065, 0xc074, 0xc0dd, 0xc113, 0xc18c, 0xc1ff, 0xc000, 0xc000,
- 0xc220, 0xc000, 0xc000, 0xc235, 0xc242, 0xc000, 0xc000, 0xc000,
- 0xc000, 0xc000, 0xc2e8, 0xc000, 0xc000, 0xc2fc, 0xc000, 0xc000,
- 0xc2b7, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000,
- 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc000, 0xc314,
- 0x080c, 0x0dc4, 0x080c, 0x6704, 0x1150, 0x2001, 0x1836, 0x2004,
- 0xd0cc, 0x1128, 0x9084, 0x0009, 0x9086, 0x0008, 0x1140, 0x6007,
- 0x0009, 0x602f, 0x0009, 0x6017, 0x0000, 0x0804, 0xc20d, 0x080c,
- 0x66fc, 0x00e6, 0x00c6, 0x0036, 0x0026, 0x0016, 0x6210, 0x2258,
- 0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c, 0x8843, 0x0076, 0x903e,
- 0x080c, 0x8748, 0x2c08, 0x080c, 0xce89, 0x007e, 0x001e, 0x001e,
- 0x002e, 0x003e, 0x00ce, 0x00ee, 0x6610, 0x2658, 0x080c, 0x6420,
- 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x1268, 0x0016, 0x0026,
- 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be, 0x2c08, 0x080c, 0xd2d2,
- 0x002e, 0x001e, 0x1178, 0x080c, 0xcdbb, 0x1904, 0xc0d5, 0x080c,
- 0xcd57, 0x1120, 0x6007, 0x0008, 0x0804, 0xc20d, 0x6007, 0x0009,
- 0x0804, 0xc20d, 0x080c, 0xcffa, 0x0128, 0x080c, 0xcdbb, 0x0d78,
- 0x0804, 0xc0d5, 0x6017, 0x1900, 0x0c88, 0x080c, 0x318a, 0x1904,
- 0xc349, 0x6106, 0x080c, 0xccfb, 0x6007, 0x0006, 0x0804, 0xc20d,
- 0x6007, 0x0007, 0x0804, 0xc20d, 0x080c, 0xd1fc, 0x1904, 0xc349,
- 0x080c, 0x318a, 0x1904, 0xc349, 0x00d6, 0x6610, 0x2658, 0xbe04,
- 0x9684, 0x00ff, 0x9082, 0x0006, 0x1220, 0x2001, 0x0001, 0x080c,
- 0x635e, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0188, 0x9686,
- 0x0004, 0x0170, 0xbe04, 0x96b4, 0x00ff, 0x9686, 0x0006, 0x0140,
- 0x9686, 0x0004, 0x0128, 0x9686, 0x0005, 0x0110, 0x00de, 0x04a8,
- 0x00e6, 0x2071, 0x0260, 0x7034, 0x9084, 0x0003, 0x1168, 0x7034,
- 0x908a, 0x0014, 0x0248, 0x2009, 0x1823, 0x210c, 0x9102, 0x0220,
- 0x7030, 0x9084, 0x0003, 0x0130, 0x00ee, 0x6017, 0x0000, 0x602f,
- 0x0007, 0x00b0, 0x00ee, 0x080c, 0xce1f, 0x1190, 0x9686, 0x0006,
- 0x1140, 0x0026, 0x6210, 0x2258, 0xbaa0, 0x900e, 0x080c, 0x30af,
- 0x002e, 0x080c, 0x64ac, 0x6007, 0x000a, 0x00de, 0x0804, 0xc20d,
- 0x6007, 0x000b, 0x00de, 0x0804, 0xc20d, 0x080c, 0x3066, 0x080c,
- 0xbf0d, 0x6007, 0x0001, 0x0804, 0xc20d, 0x080c, 0xd1fc, 0x1904,
- 0xc349, 0x080c, 0x318a, 0x1904, 0xc349, 0x00d6, 0x00e6, 0x2071,
- 0x0260, 0x7034, 0x90b4, 0x0003, 0x1938, 0x2031, 0x1823, 0x2634,
- 0x9632, 0x0a10, 0x90b2, 0x0014, 0x0a04, 0xc0b4, 0x7030, 0x9084,
- 0x0003, 0x1904, 0xc0b4, 0x00ee, 0x00de, 0x6610, 0x2658, 0xbe04,
- 0x9686, 0x0707, 0x0990, 0x0026, 0x6210, 0x2258, 0xbaa0, 0x900e,
- 0x080c, 0x30af, 0x002e, 0x6007, 0x000c, 0x2001, 0x0001, 0x080c,
- 0xd2b1, 0x0804, 0xc20d, 0x080c, 0x6704, 0x1140, 0x2001, 0x1836,
- 0x2004, 0x9084, 0x0009, 0x9086, 0x0008, 0x1110, 0x0804, 0xc00f,
- 0x080c, 0x66fc, 0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082,
- 0x0006, 0x06c8, 0x1138, 0x0026, 0x2001, 0x0006, 0x080c, 0x639e,
- 0x002e, 0x0050, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0004, 0x0120,
- 0x9686, 0x0006, 0x1904, 0xc0d5, 0x080c, 0xce2c, 0x1120, 0x6007,
- 0x000e, 0x0804, 0xc20d, 0x0046, 0x6410, 0x2458, 0xbca0, 0x0046,
- 0x080c, 0x3066, 0x080c, 0xbf0d, 0x004e, 0x0016, 0x9006, 0x2009,
- 0x185f, 0x210c, 0xd1a4, 0x0148, 0x2009, 0x0029, 0x080c, 0xd156,
- 0x6010, 0x2058, 0xb800, 0xc0e5, 0xb802, 0x001e, 0x004e, 0x6007,
- 0x0001, 0x0804, 0xc20d, 0x2001, 0x0001, 0x080c, 0x635e, 0x0156,
- 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011,
- 0x0270, 0x080c, 0xad79, 0x003e, 0x002e, 0x001e, 0x015e, 0x9005,
- 0x0168, 0x96b4, 0xff00, 0x8637, 0x9682, 0x0004, 0x0a04, 0xc0d5,
- 0x9682, 0x0007, 0x0a04, 0xc13c, 0x0804, 0xc0d5, 0x6017, 0x1900,
- 0x6007, 0x0009, 0x0804, 0xc20d, 0x080c, 0x6704, 0x1140, 0x2001,
- 0x1836, 0x2004, 0x9084, 0x0009, 0x9086, 0x0008, 0x1110, 0x0804,
- 0xc00f, 0x080c, 0x66fc, 0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff,
- 0x0006, 0x0016, 0x908e, 0x0001, 0x0118, 0x908e, 0x0000, 0x1118,
- 0x001e, 0x000e, 0x0080, 0x001e, 0x000e, 0x9082, 0x0006, 0x06a0,
- 0x0150, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0004, 0x0120, 0x9686,
- 0x0006, 0x1904, 0xc0d5, 0x080c, 0xce5a, 0x1138, 0x080c, 0xcd57,
- 0x1120, 0x6007, 0x0010, 0x0804, 0xc20d, 0x0046, 0x6410, 0x2458,
- 0xbca0, 0x0046, 0x080c, 0x3066, 0x080c, 0xbf0d, 0x004e, 0x0016,
- 0x9006, 0x2009, 0x185f, 0x210c, 0xd1a4, 0x0148, 0x2009, 0x0029,
- 0x080c, 0xd156, 0x6010, 0x2058, 0xb800, 0xc0e5, 0xb802, 0x001e,
- 0x004e, 0x6007, 0x0001, 0x0448, 0x080c, 0xcffa, 0x0198, 0x0016,
- 0x968c, 0x00ff, 0x9186, 0x0002, 0x0160, 0x9186, 0x0003, 0x0148,
- 0x001e, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006, 0x0920, 0x0804,
- 0xc0d5, 0x001e, 0x6017, 0x1900, 0x6007, 0x0009, 0x0070, 0x080c,
- 0x318a, 0x1904, 0xc349, 0x080c, 0xd1fc, 0x1904, 0xc349, 0x080c,
- 0xc4e0, 0x1904, 0xc0d5, 0x6007, 0x0012, 0x6003, 0x0001, 0x080c,
- 0x8718, 0x080c, 0x8c37, 0x0005, 0x6007, 0x0001, 0x6003, 0x0001,
- 0x080c, 0x8718, 0x080c, 0x8c37, 0x0cb0, 0x6007, 0x0005, 0x0c68,
- 0x080c, 0xd1fc, 0x1904, 0xc349, 0x080c, 0x318a, 0x1904, 0xc349,
- 0x080c, 0xc4e0, 0x1904, 0xc0d5, 0x6007, 0x0020, 0x6003, 0x0001,
- 0x080c, 0x8718, 0x080c, 0x8c37, 0x0005, 0x080c, 0x318a, 0x1904,
- 0xc349, 0x6007, 0x0023, 0x6003, 0x0001, 0x080c, 0x8718, 0x080c,
- 0x8c37, 0x0005, 0x080c, 0xd1fc, 0x1904, 0xc349, 0x080c, 0x318a,
- 0x1904, 0xc349, 0x080c, 0xc4e0, 0x1904, 0xc0d5, 0x0016, 0x0026,
- 0x00e6, 0x2071, 0x0260, 0x2c08, 0x2011, 0x181f, 0x2214, 0x703c,
- 0x9206, 0x11e0, 0x2011, 0x181e, 0x2214, 0x7038, 0x9084, 0x00ff,
- 0x9206, 0x11a0, 0x7240, 0x080c, 0xb943, 0x0570, 0x2260, 0x6008,
- 0x9086, 0xffff, 0x0120, 0x7244, 0x6008, 0x9206, 0x1528, 0x6020,
- 0x9086, 0x0007, 0x1508, 0x080c, 0x9f18, 0x04a0, 0x7244, 0x9286,
- 0xffff, 0x0180, 0x2c08, 0x080c, 0xb943, 0x01b0, 0x2260, 0x7240,
- 0x6008, 0x9206, 0x1188, 0x6010, 0x9190, 0x0004, 0x2214, 0x9206,
- 0x01b8, 0x0050, 0x7240, 0x2c08, 0x9006, 0x080c, 0xd128, 0x1180,
- 0x7244, 0x9286, 0xffff, 0x01b0, 0x2160, 0x6007, 0x0026, 0x6017,
- 0x1700, 0x7214, 0x9296, 0xffff, 0x1180, 0x6007, 0x0025, 0x0068,
- 0x6020, 0x9086, 0x0007, 0x1d80, 0x6004, 0x9086, 0x0024, 0x1110,
- 0x080c, 0x9f18, 0x2160, 0x6007, 0x0025, 0x6003, 0x0001, 0x080c,
- 0x8718, 0x080c, 0x8c37, 0x00ee, 0x002e, 0x001e, 0x0005, 0x2001,
- 0x0001, 0x080c, 0x635e, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9,
- 0x0004, 0x2019, 0x1805, 0x2011, 0x0276, 0x080c, 0xad79, 0x003e,
- 0x002e, 0x001e, 0x015e, 0x0120, 0x6007, 0x0031, 0x0804, 0xc20d,
- 0x080c, 0xa9b9, 0x080c, 0x72e5, 0x1190, 0x0006, 0x0026, 0x0036,
- 0x080c, 0x72ff, 0x1138, 0x080c, 0x75dc, 0x080c, 0x5ef6, 0x080c,
- 0x7212, 0x0010, 0x080c, 0x72bd, 0x003e, 0x002e, 0x000e, 0x0005,
- 0x080c, 0x318a, 0x1904, 0xc349, 0x080c, 0xc4e0, 0x1904, 0xc0d5,
- 0x6106, 0x080c, 0xc4fc, 0x1120, 0x6007, 0x002b, 0x0804, 0xc20d,
- 0x6007, 0x002c, 0x0804, 0xc20d, 0x080c, 0xd1fc, 0x1904, 0xc349,
- 0x080c, 0x318a, 0x1904, 0xc349, 0x080c, 0xc4e0, 0x1904, 0xc0d5,
- 0x6106, 0x080c, 0xc501, 0x1120, 0x6007, 0x002e, 0x0804, 0xc20d,
- 0x6007, 0x002f, 0x0804, 0xc20d, 0x00e6, 0x0026, 0x080c, 0x6704,
- 0x0550, 0x080c, 0x66fc, 0x080c, 0xd205, 0x1518, 0x2071, 0x1800,
- 0x70d8, 0x9085, 0x0003, 0x70da, 0x00f6, 0x2079, 0x0100, 0x72ac,
- 0x9284, 0x00ff, 0x707a, 0x78e6, 0x9284, 0xff00, 0x727c, 0x9205,
- 0x707e, 0x78ea, 0x00fe, 0x70e3, 0x0000, 0x080c, 0x6742, 0x0120,
- 0x2011, 0x19dd, 0x2013, 0x07d0, 0xd0ac, 0x1128, 0x080c, 0x2e5f,
- 0x0010, 0x080c, 0xd239, 0x002e, 0x00ee, 0x080c, 0x9f18, 0x0804,
- 0xc213, 0x080c, 0x9f18, 0x0005, 0x2600, 0x0002, 0xc362, 0xc362,
- 0xc362, 0xc362, 0xc362, 0xc364, 0xc362, 0xc362, 0xc362, 0xc362,
- 0xc37e, 0xc362, 0xc362, 0xc362, 0xc390, 0xc3a6, 0xc3d7, 0xc362,
- 0xc362, 0xc3dc, 0x080c, 0x0dc4, 0x080c, 0xd1fc, 0x1d10, 0x080c,
- 0x318a, 0x19f8, 0x7038, 0x6016, 0x6007, 0x0045, 0x6003, 0x0001,
- 0x080c, 0x8718, 0x0005, 0x080c, 0x3066, 0x080c, 0xbf0d, 0x6007,
- 0x0001, 0x6003, 0x0001, 0x080c, 0x8718, 0x0005, 0x080c, 0xd1fc,
- 0x1940, 0x080c, 0x318a, 0x1928, 0x080c, 0xc4e0, 0x1d60, 0x703c,
- 0x6016, 0x6007, 0x004a, 0x6003, 0x0001, 0x080c, 0x8718, 0x0005,
- 0x2001, 0x1823, 0x2004, 0x9082, 0x00e1, 0x1268, 0x080c, 0xc3ea,
- 0x0904, 0xc349, 0x6007, 0x004e, 0x6003, 0x0001, 0x080c, 0x8718,
- 0x080c, 0x8c37, 0x0005, 0x6007, 0x0012, 0x0cb0, 0x6007, 0x004f,
- 0x6017, 0x0000, 0x7134, 0x918c, 0x00ff, 0x81ff, 0x0508, 0x9186,
- 0x0001, 0x1160, 0x7140, 0x2001, 0x199a, 0x2004, 0x9106, 0x11b0,
- 0x7144, 0x2001, 0x199b, 0x2004, 0x9106, 0x0190, 0x9186, 0x0002,
- 0x1168, 0x2011, 0x0276, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048,
- 0x2019, 0x000a, 0x080c, 0xad8d, 0x009e, 0x0110, 0x6017, 0x0001,
- 0x6003, 0x0001, 0x080c, 0x8718, 0x080c, 0x8c37, 0x0005, 0x6007,
- 0x0050, 0x703c, 0x6016, 0x0ca0, 0x080c, 0xd1fc, 0x1904, 0xc349,
- 0x080c, 0x318a, 0x1904, 0xc349, 0x6007, 0x0053, 0x6003, 0x0001,
- 0x0804, 0x8718, 0x0016, 0x0096, 0x0086, 0x00e6, 0x01c6, 0x01d6,
+ 0x8000, 0x080c, 0x6c02, 0x012e, 0x009e, 0x080c, 0xa39d, 0x0c30,
+ 0x0096, 0x9186, 0x0016, 0x1128, 0x2001, 0x0004, 0x080c, 0x6448,
+ 0x00e8, 0x9186, 0x0015, 0x1510, 0x2011, 0x1823, 0x2204, 0x9086,
+ 0x0014, 0x11e0, 0x6010, 0x00b6, 0x2058, 0x080c, 0x6597, 0x00be,
+ 0x080c, 0xb382, 0x1198, 0x6010, 0x00b6, 0x2058, 0xb890, 0x00be,
+ 0x9005, 0x0160, 0x2001, 0x0006, 0x080c, 0x6448, 0x6014, 0x2048,
+ 0xa86c, 0xd0fc, 0x0170, 0x080c, 0xa7a3, 0x0048, 0x6014, 0x2048,
+ 0xa86c, 0xd0fc, 0x0500, 0x080c, 0xadb3, 0x080c, 0xa39d, 0x009e,
+ 0x0005, 0x6014, 0x6310, 0x2358, 0x904d, 0x090c, 0x0dc3, 0xa87f,
+ 0x0000, 0xa887, 0x0000, 0xa89b, 0x4000, 0x080c, 0x674b, 0xa99e,
+ 0x080c, 0x4de7, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c02, 0x012e,
+ 0x080c, 0xa39d, 0x0c20, 0x6014, 0x904d, 0x090c, 0x0dc3, 0xa87f,
+ 0x0030, 0xa887, 0x0000, 0xa89b, 0x4005, 0xa89f, 0x0004, 0xa86b,
+ 0x0139, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c02, 0x012e, 0x080c,
+ 0xa39d, 0x0868, 0xa87c, 0x9086, 0x0005, 0x1108, 0x0009, 0x0005,
+ 0xa884, 0xc0ad, 0xa886, 0x0005, 0x6043, 0x0000, 0x6017, 0x0000,
+ 0x6003, 0x0001, 0x6007, 0x0050, 0x080c, 0x88a1, 0x080c, 0x8e38,
+ 0x0005, 0x00c6, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0bc,
+ 0x0120, 0x6020, 0x9084, 0x000f, 0x0013, 0x00ce, 0x0005, 0xbecb,
+ 0xc4f0, 0xc4f0, 0xc4f3, 0xdd67, 0xdd82, 0xdd85, 0xbecb, 0xbecb,
+ 0xbecb, 0xbecb, 0xbecb, 0xbecb, 0xbecb, 0xbecb, 0x080c, 0x0dc3,
+ 0xa001, 0xa001, 0x0005, 0x0096, 0x6014, 0x904d, 0x0118, 0xa880,
+ 0xd0e4, 0x1110, 0x009e, 0x0010, 0x009e, 0x0005, 0x6010, 0x00b6,
+ 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0550, 0x2001, 0x1833, 0x2004,
+ 0x9005, 0x1540, 0x00f6, 0x2c78, 0x080c, 0xa347, 0x0508, 0x7810,
+ 0x6012, 0x080c, 0xc640, 0x7820, 0x9086, 0x0003, 0x0128, 0x7808,
+ 0x603a, 0x2f00, 0x603e, 0x0020, 0x7808, 0x603e, 0x2f00, 0x603a,
+ 0x602e, 0x6023, 0x0001, 0x6007, 0x0035, 0x6003, 0x0001, 0x7954,
+ 0x6156, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x2f60, 0x00fe, 0x0005,
+ 0x2f60, 0x00fe, 0x2001, 0x1964, 0x2004, 0x6042, 0x0005, 0x0016,
+ 0x0096, 0x6814, 0x2048, 0xa880, 0xd0e4, 0x0180, 0xc0e4, 0xa882,
+ 0xa87b, 0x0000, 0xa897, 0x0000, 0xa893, 0x0000, 0xd0cc, 0x0130,
+ 0xc0cc, 0xa882, 0xa87c, 0x2048, 0x080c, 0x0fbf, 0x6830, 0x6036,
+ 0x908e, 0x0001, 0x0148, 0x6803, 0x0002, 0x9086, 0x0005, 0x0170,
+ 0x9006, 0x602e, 0x6032, 0x00d0, 0x681c, 0xc085, 0x681e, 0x6803,
+ 0x0004, 0x6824, 0xc0f4, 0x9085, 0x0c00, 0x6826, 0x6814, 0x2048,
+ 0xa8b0, 0x6938, 0x9102, 0xa8b4, 0x693c, 0x9103, 0x1e48, 0x683c,
+ 0x602e, 0x6838, 0x9084, 0xfffc, 0x683a, 0x6032, 0x2d00, 0x603a,
+ 0x6808, 0x603e, 0x6910, 0x6112, 0x6954, 0x6156, 0x6023, 0x0001,
+ 0x6007, 0x0039, 0x6003, 0x0001, 0x080c, 0x88a1, 0x080c, 0x8e38,
+ 0x009e, 0x001e, 0x0005, 0x6024, 0xd0d4, 0x0510, 0xd0f4, 0x11f8,
+ 0x6038, 0x940a, 0x603c, 0x9303, 0x0230, 0x9105, 0x0120, 0x6024,
+ 0xc0d4, 0xc0f5, 0x0098, 0x643a, 0x633e, 0xac3e, 0xab42, 0x0046,
+ 0x0036, 0x2400, 0xacb0, 0x9402, 0xa836, 0x2300, 0xabb4, 0x9303,
+ 0xa83a, 0x003e, 0x004e, 0x6024, 0xc0d4, 0x0000, 0x6026, 0x0005,
+ 0xd0f4, 0x1138, 0xa83c, 0x603a, 0xa840, 0x603e, 0x6024, 0xc0f5,
+ 0x6026, 0x0005, 0x0006, 0x0016, 0x6004, 0x908e, 0x0034, 0x01b8,
+ 0x908e, 0x0035, 0x01a0, 0x908e, 0x0036, 0x0188, 0x908e, 0x0037,
+ 0x0170, 0x908e, 0x0038, 0x0158, 0x908e, 0x0039, 0x0140, 0x908e,
+ 0x003a, 0x0128, 0x908e, 0x003b, 0x0110, 0x9085, 0x0001, 0x001e,
+ 0x000e, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00e6, 0x2001,
+ 0x195e, 0x200c, 0x8000, 0x2014, 0x2001, 0x0032, 0x080c, 0x871c,
+ 0x2001, 0x1962, 0x82ff, 0x1110, 0x2011, 0x0014, 0x2202, 0x2001,
+ 0x1960, 0x200c, 0x8000, 0x2014, 0x2071, 0x1948, 0x711a, 0x721e,
+ 0x2001, 0x0064, 0x080c, 0x871c, 0x2001, 0x1963, 0x82ff, 0x1110,
+ 0x2011, 0x0014, 0x2202, 0x2001, 0x1964, 0x9288, 0x000a, 0x2102,
+ 0x2001, 0x1a73, 0x2102, 0x2001, 0x0032, 0x080c, 0x1568, 0x080c,
+ 0x684e, 0x00ee, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005, 0x0006,
+ 0x0016, 0x00e6, 0x2001, 0x1962, 0x2003, 0x0028, 0x2001, 0x1963,
+ 0x2003, 0x0014, 0x2071, 0x1948, 0x701b, 0x0000, 0x701f, 0x07d0,
+ 0x2001, 0x1964, 0x2009, 0x001e, 0x2102, 0x2001, 0x1a73, 0x2102,
+ 0x2001, 0x0032, 0x080c, 0x1568, 0x00ee, 0x001e, 0x000e, 0x0005,
+ 0x0096, 0x6058, 0x904d, 0x0110, 0x080c, 0x103f, 0x009e, 0x0005,
+ 0x0005, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c, 0xa347, 0x0180,
+ 0x2b08, 0x6112, 0x0ca9, 0x6023, 0x0001, 0x2900, 0x6016, 0x2009,
+ 0x0033, 0x080c, 0xa419, 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005,
+ 0x9006, 0x0cd8, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186,
+ 0x0015, 0x1520, 0x708c, 0x9086, 0x0018, 0x0120, 0x708c, 0x9086,
+ 0x0014, 0x11e0, 0x6014, 0x2048, 0xaa3c, 0xd2e4, 0x1160, 0x2c78,
+ 0x080c, 0x9037, 0x01d8, 0x7078, 0xaa50, 0x9206, 0x1160, 0x707c,
+ 0xaa54, 0x9206, 0x1140, 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be,
+ 0x900e, 0x080c, 0x314b, 0x080c, 0xa7a3, 0x0020, 0x080c, 0xadb3,
+ 0x080c, 0xa39d, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c, 0xaa54,
+ 0x9206, 0x0d48, 0x0c80, 0x00c6, 0x0126, 0x2091, 0x8000, 0x080c,
+ 0xa347, 0x0188, 0x2b08, 0x6112, 0x080c, 0xc640, 0x6023, 0x0001,
+ 0x2900, 0x6016, 0x2009, 0x004d, 0x080c, 0xa419, 0x9085, 0x0001,
+ 0x012e, 0x00ce, 0x0005, 0x9006, 0x0cd8, 0x00c6, 0x0126, 0x2091,
+ 0x8000, 0x0016, 0x080c, 0xa347, 0x0180, 0x2b08, 0x6112, 0x080c,
+ 0xc640, 0x6023, 0x0001, 0x2900, 0x6016, 0x001e, 0x080c, 0xa419,
+ 0x9085, 0x0001, 0x012e, 0x00ce, 0x0005, 0x001e, 0x9006, 0x0cd0,
+ 0x0016, 0x0026, 0x0036, 0x0046, 0x0056, 0x0066, 0x0096, 0x00e6,
+ 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015, 0x1568, 0x718c, 0x6014,
+ 0x2048, 0xa814, 0x8003, 0x9106, 0x1530, 0x20e1, 0x0000, 0x2001,
+ 0x197d, 0x2003, 0x0000, 0x6014, 0x2048, 0xa830, 0x20a8, 0x8906,
+ 0x8006, 0x8007, 0x9094, 0x003f, 0x22e8, 0x9084, 0xffc0, 0x9080,
+ 0x001c, 0x20a0, 0x2001, 0x197d, 0x0016, 0x200c, 0x080c, 0xcf43,
+ 0x001e, 0xa804, 0x9005, 0x0110, 0x2048, 0x0c38, 0x6014, 0x2048,
+ 0xa86b, 0x0103, 0x0010, 0x080c, 0xadb3, 0x080c, 0xa39d, 0x00fe,
+ 0x00ee, 0x009e, 0x006e, 0x005e, 0x004e, 0x003e, 0x002e, 0x001e,
+ 0x0005, 0x0096, 0x00e6, 0x00f6, 0x2071, 0x1800, 0x9186, 0x0015,
+ 0x11b8, 0x708c, 0x9086, 0x0004, 0x1198, 0x6014, 0x2048, 0x2c78,
+ 0x080c, 0x9037, 0x01a8, 0x7078, 0xaa78, 0x9206, 0x1130, 0x707c,
+ 0xaa7c, 0x9206, 0x1110, 0x080c, 0x3102, 0x080c, 0xa7a3, 0x0020,
+ 0x080c, 0xadb3, 0x080c, 0xa39d, 0x00fe, 0x00ee, 0x009e, 0x0005,
+ 0x705c, 0xaa7c, 0x9206, 0x0d78, 0x0c80, 0x0096, 0x00e6, 0x00f6,
+ 0x2071, 0x1800, 0x9186, 0x0015, 0x1550, 0x708c, 0x9086, 0x0004,
+ 0x1530, 0x6014, 0x2048, 0x2c78, 0x080c, 0x9037, 0x05f0, 0x7078,
+ 0xaad0, 0x9206, 0x1180, 0x707c, 0xaad4, 0x9206, 0x1160, 0x080c,
+ 0x3102, 0x0016, 0xa99c, 0xaab4, 0x9284, 0x1000, 0xc0fd, 0x080c,
+ 0x560f, 0x001e, 0x0010, 0x080c, 0x53f9, 0x080c, 0xc1cd, 0x0508,
+ 0xa87f, 0x0000, 0xa887, 0x0000, 0xa89b, 0x4000, 0x0080, 0x080c,
+ 0xc1cd, 0x01b8, 0x6014, 0x2048, 0x080c, 0x53f9, 0x1d70, 0xa87f,
+ 0x0030, 0xa887, 0x0000, 0xa89b, 0x4005, 0xa89f, 0x0004, 0x0126,
+ 0x2091, 0x8000, 0xa86b, 0x0139, 0x080c, 0x6c02, 0x012e, 0x080c,
+ 0xa39d, 0x00fe, 0x00ee, 0x009e, 0x0005, 0x705c, 0xaad4, 0x9206,
+ 0x0930, 0x0888, 0x0016, 0x0026, 0xa880, 0xd0ac, 0x0178, 0xa938,
+ 0xaa34, 0x2100, 0x9205, 0x0150, 0xa894, 0x9106, 0x1118, 0xa890,
+ 0x9206, 0x0120, 0xa996, 0xaa92, 0x9085, 0x0001, 0x002e, 0x001e,
+ 0x0005, 0x00b6, 0x00d6, 0x0036, 0x080c, 0xc1cd, 0x0904, 0xc7fc,
+ 0x0096, 0x6314, 0x2348, 0xa87e, 0xa986, 0x929e, 0x4000, 0x1550,
+ 0x6310, 0x00c6, 0x2358, 0x2009, 0x0000, 0xa86c, 0xd0f4, 0x1110,
+ 0x080c, 0x674b, 0xaa9a, 0xa99e, 0x20a9, 0x0004, 0xa860, 0x20e8,
+ 0xa85c, 0x9080, 0x0032, 0x20a0, 0xb8b4, 0x20e0, 0xb8b8, 0x9080,
+ 0x0006, 0x2098, 0x080c, 0x0f8a, 0x20a9, 0x0004, 0xa85c, 0x9080,
+ 0x0036, 0x20a0, 0xb8b8, 0x9080, 0x000a, 0x2098, 0x080c, 0x0f8a,
+ 0x00ce, 0x0090, 0xaa9a, 0x3918, 0x9398, 0x0007, 0x231c, 0x6004,
+ 0x9086, 0x0016, 0x0110, 0xa89f, 0x0004, 0xaba6, 0x6310, 0x2358,
+ 0xb804, 0x9084, 0x00ff, 0xa8a2, 0xa86c, 0xc0f4, 0xa86e, 0x080c,
+ 0x6bf5, 0x6017, 0x0000, 0x009e, 0x003e, 0x00de, 0x00be, 0x0005,
+ 0x0026, 0x0036, 0x0046, 0x00b6, 0x0096, 0x00f6, 0x6214, 0x2248,
+ 0x6210, 0x2258, 0x2079, 0x0260, 0x9096, 0x0000, 0x11a0, 0xb814,
+ 0x9084, 0x00ff, 0x900e, 0x080c, 0x2708, 0x2118, 0x831f, 0x939c,
+ 0xff00, 0x7838, 0x9084, 0x00ff, 0x931d, 0x7c3c, 0x2011, 0x8018,
+ 0x080c, 0x4b6d, 0x00a8, 0x9096, 0x0001, 0x1148, 0x89ff, 0x0180,
+ 0xa89f, 0x000d, 0x7838, 0xa8aa, 0x783c, 0xa8ae, 0x0048, 0x9096,
+ 0x0002, 0x1130, 0xa89f, 0x000d, 0x7838, 0xa8aa, 0x783c, 0xa8ae,
+ 0x00fe, 0x009e, 0x00be, 0x004e, 0x003e, 0x002e, 0x0005, 0x00c6,
+ 0x0026, 0x0016, 0x9186, 0x0035, 0x0110, 0x6a38, 0x0008, 0x6a2c,
+ 0x080c, 0xc1bb, 0x01f0, 0x2260, 0x6120, 0x9186, 0x0003, 0x0118,
+ 0x9186, 0x0006, 0x1190, 0x6838, 0x9206, 0x0140, 0x683c, 0x9206,
+ 0x1160, 0x6108, 0x6838, 0x9106, 0x1140, 0x0020, 0x6008, 0x693c,
+ 0x9106, 0x1118, 0x6010, 0x6910, 0x9106, 0x001e, 0x002e, 0x00ce,
+ 0x0005, 0x9085, 0x0001, 0x0cc8, 0xa978, 0xd1cc, 0x0198, 0x918c,
+ 0x00ff, 0x918e, 0x0002, 0x1170, 0xa9ac, 0x918c, 0x000f, 0x918e,
+ 0x0001, 0x1140, 0xa880, 0xd0ac, 0x0128, 0xa834, 0xa938, 0x9115,
+ 0x190c, 0xb84f, 0x0005, 0x0036, 0x2019, 0x0001, 0x0010, 0x0036,
+ 0x901e, 0x04c1, 0x01e0, 0x080c, 0xc1cd, 0x01c8, 0x080c, 0xc3b4,
+ 0x6037, 0x4000, 0x6014, 0x6017, 0x0000, 0x0096, 0x2048, 0xa880,
+ 0x080c, 0xc3d1, 0x1118, 0x080c, 0xadb3, 0x0040, 0xa86b, 0x0103,
+ 0xa87b, 0x0000, 0x83ff, 0x1129, 0x080c, 0x6c02, 0x009e, 0x003e,
+ 0x0005, 0xa884, 0xd0b4, 0x0128, 0xa87f, 0x0006, 0xc0ec, 0xa886,
+ 0x0070, 0xd0bc, 0x0118, 0xa87f, 0x0002, 0x0048, 0xd0dc, 0x0118,
+ 0xa87f, 0x0003, 0x0020, 0xa87f, 0x0005, 0x080c, 0xc4c0, 0xa87b,
+ 0x0000, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0ec, 0x0005, 0x0006,
+ 0x2001, 0x1810, 0x2004, 0xd0f4, 0x000e, 0x0005, 0x0006, 0x2001,
+ 0x1810, 0x2004, 0xd0e4, 0x000e, 0x0005, 0x0036, 0x0046, 0x6010,
+ 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0007, 0x080c, 0x4d24,
+ 0x004e, 0x003e, 0x0005, 0x0c51, 0x1d81, 0x0005, 0x2001, 0x1962,
+ 0x2004, 0x601a, 0x0005, 0x2001, 0x1964, 0x2004, 0x6042, 0x0005,
+ 0x080c, 0xa39d, 0x0804, 0x8e38, 0x2001, 0x0109, 0x2004, 0xd084,
+ 0x01e0, 0x0126, 0x2091, 0x2800, 0x0006, 0x0016, 0x0026, 0x0036,
+ 0x00f6, 0x00e6, 0x00c6, 0x2079, 0x19c4, 0x2071, 0x1800, 0x2061,
+ 0x0100, 0x080c, 0x8789, 0x00ce, 0x00ee, 0x00fe, 0x003e, 0x002e,
+ 0x001e, 0x000e, 0x012e, 0x9085, 0x0001, 0x0005, 0x0016, 0x0026,
+ 0x2009, 0x1823, 0x210c, 0x9694, 0x0c00, 0x0118, 0x9182, 0x0010,
+ 0x02c8, 0x9016, 0xd6cc, 0x0120, 0x9182, 0x0014, 0x0298, 0x7254,
+ 0x9006, 0xd6c4, 0x0120, 0x9182, 0x0018, 0x0260, 0x705c, 0x9200,
+ 0x0248, 0x0128, 0x9080, 0x0018, 0x9102, 0x0220, 0x9006, 0x002e,
+ 0x001e, 0x0005, 0x080c, 0x83cc, 0x9085, 0x0001, 0x0cc0, 0x00b6,
+ 0x0066, 0x6000, 0x90b2, 0x0010, 0x1a0c, 0x0dc3, 0x001b, 0x006e,
+ 0x00be, 0x0005, 0xc95a, 0xd0a8, 0xd21d, 0xc95a, 0xc95a, 0xc95a,
+ 0xc95a, 0xc95a, 0xc991, 0xd2a1, 0xc95a, 0xc95a, 0xc95a, 0xc95a,
+ 0xc95a, 0xc95a, 0x080c, 0x0dc3, 0x0066, 0x6000, 0x90b2, 0x0010,
+ 0x1a0c, 0x0dc3, 0x0013, 0x006e, 0x0005, 0xc975, 0xd7f0, 0xc975,
+ 0xc975, 0xc975, 0xc975, 0xc975, 0xc975, 0xd79d, 0xd844, 0xc975,
+ 0xde9a, 0xded0, 0xde9a, 0xded0, 0xc975, 0x080c, 0x0dc3, 0x6000,
+ 0x9082, 0x0010, 0x1a0c, 0x0dc3, 0x6000, 0x000a, 0x0005, 0xc98f,
+ 0xd47f, 0xd54e, 0xd571, 0xd631, 0xc98f, 0xd710, 0xd6b9, 0xd2ad,
+ 0xd773, 0xd788, 0xc98f, 0xc98f, 0xc98f, 0xc98f, 0xc98f, 0x080c,
+ 0x0dc3, 0x91b2, 0x0054, 0x1a0c, 0x0dc3, 0x2100, 0x91b2, 0x0040,
+ 0x1a04, 0xce2f, 0x0002, 0xc9db, 0xcbef, 0xc9db, 0xc9db, 0xc9db,
+ 0xcbf8, 0xc9db, 0xc9db, 0xc9db, 0xc9db, 0xc9db, 0xc9db, 0xc9db,
+ 0xc9db, 0xc9db, 0xc9db, 0xc9db, 0xc9db, 0xc9db, 0xc9db, 0xc9db,
+ 0xc9db, 0xc9db, 0xc9dd, 0xca40, 0xca4f, 0xcab8, 0xcaee, 0xcb67,
+ 0xcbda, 0xc9db, 0xc9db, 0xcbfb, 0xc9db, 0xc9db, 0xcc10, 0xcc1d,
+ 0xc9db, 0xc9db, 0xc9db, 0xc9db, 0xc9db, 0xccc3, 0xc9db, 0xc9db,
+ 0xccd7, 0xc9db, 0xc9db, 0xcc92, 0xc9db, 0xc9db, 0xc9db, 0xccef,
+ 0xc9db, 0xc9db, 0xc9db, 0xcd6c, 0xc9db, 0xc9db, 0xc9db, 0xc9db,
+ 0xc9db, 0xc9db, 0xcdf7, 0x080c, 0x0dc3, 0x080c, 0x682b, 0x1150,
+ 0x2001, 0x1836, 0x2004, 0xd0cc, 0x1128, 0x9084, 0x0009, 0x9086,
+ 0x0008, 0x1140, 0x6007, 0x0009, 0x602f, 0x0009, 0x6017, 0x0000,
+ 0x0804, 0xcbe8, 0x080c, 0x6814, 0x00e6, 0x00c6, 0x0036, 0x0026,
+ 0x0016, 0x6210, 0x2258, 0xbaa0, 0x0026, 0x2019, 0x0029, 0x080c,
+ 0x8a2b, 0x0076, 0x903e, 0x080c, 0x8919, 0x2c08, 0x080c, 0xda37,
+ 0x007e, 0x001e, 0x001e, 0x002e, 0x003e, 0x00ce, 0x00ee, 0x6610,
+ 0x2658, 0x080c, 0x650b, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006,
+ 0x1268, 0x0016, 0x0026, 0x6210, 0x00b6, 0x2258, 0xbaa0, 0x00be,
+ 0x2c08, 0x080c, 0xe05f, 0x002e, 0x001e, 0x1178, 0x080c, 0xd969,
+ 0x1904, 0xcab0, 0x080c, 0xd905, 0x1120, 0x6007, 0x0008, 0x0804,
+ 0xcbe8, 0x6007, 0x0009, 0x0804, 0xcbe8, 0x080c, 0xdba8, 0x0128,
+ 0x080c, 0xd969, 0x0d78, 0x0804, 0xcab0, 0x6017, 0x1900, 0x0c88,
+ 0x080c, 0x3226, 0x1904, 0xce2c, 0x6106, 0x080c, 0xd8a9, 0x6007,
+ 0x0006, 0x0804, 0xcbe8, 0x6007, 0x0007, 0x0804, 0xcbe8, 0x080c,
+ 0xdf0c, 0x1904, 0xce2c, 0x080c, 0x3226, 0x1904, 0xce2c, 0x00d6,
+ 0x6610, 0x2658, 0xbe04, 0x9684, 0x00ff, 0x9082, 0x0006, 0x1220,
+ 0x2001, 0x0001, 0x080c, 0x6434, 0x96b4, 0xff00, 0x8637, 0x9686,
+ 0x0006, 0x0188, 0x9686, 0x0004, 0x0170, 0xbe04, 0x96b4, 0x00ff,
+ 0x9686, 0x0006, 0x0140, 0x9686, 0x0004, 0x0128, 0x9686, 0x0005,
+ 0x0110, 0x00de, 0x04a8, 0x00e6, 0x2071, 0x0260, 0x7034, 0x9084,
+ 0x0003, 0x1168, 0x7034, 0x908a, 0x0014, 0x0248, 0x2009, 0x1823,
+ 0x210c, 0x9102, 0x0220, 0x7030, 0x9084, 0x0003, 0x0130, 0x00ee,
+ 0x6017, 0x0000, 0x602f, 0x0007, 0x00b0, 0x00ee, 0x080c, 0xd9cd,
+ 0x1190, 0x9686, 0x0006, 0x1140, 0x0026, 0x6210, 0x2258, 0xbaa0,
+ 0x900e, 0x080c, 0x314b, 0x002e, 0x080c, 0x6597, 0x6007, 0x000a,
+ 0x00de, 0x0804, 0xcbe8, 0x6007, 0x000b, 0x00de, 0x0804, 0xcbe8,
+ 0x080c, 0x3102, 0x080c, 0xc8e3, 0x6007, 0x0001, 0x0804, 0xcbe8,
+ 0x080c, 0xdf0c, 0x1904, 0xce2c, 0x080c, 0x3226, 0x1904, 0xce2c,
+ 0x00d6, 0x00e6, 0x2071, 0x0260, 0x7034, 0x90b4, 0x0003, 0x1938,
+ 0x2031, 0x1823, 0x2634, 0x9632, 0x0a10, 0x90b2, 0x0014, 0x0a04,
+ 0xca8f, 0x7030, 0x9084, 0x0003, 0x1904, 0xca8f, 0x00ee, 0x00de,
+ 0x6610, 0x2658, 0xbe04, 0x9686, 0x0707, 0x0990, 0x0026, 0x6210,
+ 0x2258, 0xbaa0, 0x900e, 0x080c, 0x314b, 0x002e, 0x6007, 0x000c,
+ 0x2001, 0x0001, 0x080c, 0xe03e, 0x0804, 0xcbe8, 0x080c, 0x682b,
+ 0x1140, 0x2001, 0x1836, 0x2004, 0x9084, 0x0009, 0x9086, 0x0008,
+ 0x1110, 0x0804, 0xc9ea, 0x080c, 0x6814, 0x6610, 0x2658, 0xbe04,
+ 0x9684, 0x00ff, 0x9082, 0x0006, 0x06c8, 0x1138, 0x0026, 0x2001,
+ 0x0006, 0x080c, 0x6474, 0x002e, 0x0050, 0x96b4, 0xff00, 0x8637,
+ 0x9686, 0x0004, 0x0120, 0x9686, 0x0006, 0x1904, 0xcab0, 0x080c,
+ 0xd9da, 0x1120, 0x6007, 0x000e, 0x0804, 0xcbe8, 0x0046, 0x6410,
+ 0x2458, 0xbca0, 0x0046, 0x080c, 0x3102, 0x080c, 0xc8e3, 0x004e,
+ 0x0016, 0x9006, 0x2009, 0x185f, 0x210c, 0xd1a4, 0x0148, 0x2009,
+ 0x0029, 0x080c, 0xdd18, 0x6010, 0x2058, 0xb800, 0xc0e5, 0xb802,
+ 0x001e, 0x004e, 0x6007, 0x0001, 0x0804, 0xcbe8, 0x2001, 0x0001,
+ 0x080c, 0x6434, 0x0156, 0x0016, 0x0026, 0x0036, 0x20a9, 0x0004,
+ 0x2019, 0x1805, 0x2011, 0x0270, 0x080c, 0xb434, 0x003e, 0x002e,
+ 0x001e, 0x015e, 0x9005, 0x0168, 0x96b4, 0xff00, 0x8637, 0x9682,
+ 0x0004, 0x0a04, 0xcab0, 0x9682, 0x0007, 0x0a04, 0xcb17, 0x0804,
+ 0xcab0, 0x6017, 0x1900, 0x6007, 0x0009, 0x0804, 0xcbe8, 0x080c,
+ 0x682b, 0x1140, 0x2001, 0x1836, 0x2004, 0x9084, 0x0009, 0x9086,
+ 0x0008, 0x1110, 0x0804, 0xc9ea, 0x080c, 0x6814, 0x6610, 0x2658,
+ 0xbe04, 0x9684, 0x00ff, 0x0006, 0x0016, 0x908e, 0x0001, 0x0118,
+ 0x908e, 0x0000, 0x1118, 0x001e, 0x000e, 0x0080, 0x001e, 0x000e,
+ 0x9082, 0x0006, 0x06a0, 0x0150, 0x96b4, 0xff00, 0x8637, 0x9686,
+ 0x0004, 0x0120, 0x9686, 0x0006, 0x1904, 0xcab0, 0x080c, 0xda08,
+ 0x1138, 0x080c, 0xd905, 0x1120, 0x6007, 0x0010, 0x0804, 0xcbe8,
+ 0x0046, 0x6410, 0x2458, 0xbca0, 0x0046, 0x080c, 0x3102, 0x080c,
+ 0xc8e3, 0x004e, 0x0016, 0x9006, 0x2009, 0x185f, 0x210c, 0xd1a4,
+ 0x0148, 0x2009, 0x0029, 0x080c, 0xdd18, 0x6010, 0x2058, 0xb800,
+ 0xc0e5, 0xb802, 0x001e, 0x004e, 0x6007, 0x0001, 0x0448, 0x080c,
+ 0xdba8, 0x0198, 0x0016, 0x968c, 0x00ff, 0x9186, 0x0002, 0x0160,
+ 0x9186, 0x0003, 0x0148, 0x001e, 0x96b4, 0xff00, 0x8637, 0x9686,
+ 0x0006, 0x0920, 0x0804, 0xcab0, 0x001e, 0x6017, 0x1900, 0x6007,
+ 0x0009, 0x0070, 0x080c, 0x3226, 0x1904, 0xce2c, 0x080c, 0xdf0c,
+ 0x1904, 0xce2c, 0x080c, 0xcfe0, 0x1904, 0xcab0, 0x6007, 0x0012,
+ 0x6003, 0x0001, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x0005, 0x6007,
+ 0x0001, 0x6003, 0x0001, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x0cb0,
+ 0x6007, 0x0005, 0x0c68, 0x080c, 0xdf0c, 0x1904, 0xce2c, 0x080c,
+ 0x3226, 0x1904, 0xce2c, 0x080c, 0xcfe0, 0x1904, 0xcab0, 0x6007,
+ 0x0020, 0x6003, 0x0001, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x0005,
+ 0x080c, 0x3226, 0x1904, 0xce2c, 0x6007, 0x0023, 0x6003, 0x0001,
+ 0x080c, 0x88e9, 0x080c, 0x8e38, 0x0005, 0x080c, 0xdf0c, 0x1904,
+ 0xce2c, 0x080c, 0x3226, 0x1904, 0xce2c, 0x080c, 0xcfe0, 0x1904,
+ 0xcab0, 0x0016, 0x0026, 0x00e6, 0x2071, 0x0260, 0x2c08, 0x2011,
+ 0x181f, 0x2214, 0x703c, 0x9206, 0x11e0, 0x2011, 0x181e, 0x2214,
+ 0x7038, 0x9084, 0x00ff, 0x9206, 0x11a0, 0x7240, 0x080c, 0xc1bb,
+ 0x0570, 0x2260, 0x6008, 0x9086, 0xffff, 0x0120, 0x7244, 0x6008,
+ 0x9206, 0x1528, 0x6020, 0x9086, 0x0007, 0x1508, 0x080c, 0xa39d,
+ 0x04a0, 0x7244, 0x9286, 0xffff, 0x0180, 0x2c08, 0x080c, 0xc1bb,
+ 0x01b0, 0x2260, 0x7240, 0x6008, 0x9206, 0x1188, 0x6010, 0x9190,
+ 0x0004, 0x2214, 0x9206, 0x01b8, 0x0050, 0x7240, 0x2c08, 0x9006,
+ 0x080c, 0xdcea, 0x1180, 0x7244, 0x9286, 0xffff, 0x01b0, 0x2160,
+ 0x6007, 0x0026, 0x6017, 0x1700, 0x7214, 0x9296, 0xffff, 0x1180,
+ 0x6007, 0x0025, 0x0068, 0x6020, 0x9086, 0x0007, 0x1d80, 0x6004,
+ 0x9086, 0x0024, 0x1110, 0x080c, 0xa39d, 0x2160, 0x6007, 0x0025,
+ 0x6003, 0x0001, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x00ee, 0x002e,
+ 0x001e, 0x0005, 0x2001, 0x0001, 0x080c, 0x6434, 0x0156, 0x0016,
+ 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011, 0x0276,
+ 0x080c, 0xb434, 0x003e, 0x002e, 0x001e, 0x015e, 0x0120, 0x6007,
+ 0x0031, 0x0804, 0xcbe8, 0x080c, 0xb06d, 0x080c, 0x7351, 0x1190,
+ 0x0006, 0x0026, 0x0036, 0x080c, 0x736b, 0x1138, 0x080c, 0x764c,
+ 0x080c, 0x5fb3, 0x080c, 0x727e, 0x0010, 0x080c, 0x7329, 0x003e,
+ 0x002e, 0x000e, 0x0005, 0x080c, 0x3226, 0x1904, 0xce2c, 0x080c,
+ 0xcfe0, 0x1904, 0xcab0, 0x6106, 0x080c, 0xcffc, 0x1120, 0x6007,
+ 0x002b, 0x0804, 0xcbe8, 0x6007, 0x002c, 0x0804, 0xcbe8, 0x080c,
+ 0xdf0c, 0x1904, 0xce2c, 0x080c, 0x3226, 0x1904, 0xce2c, 0x080c,
+ 0xcfe0, 0x1904, 0xcab0, 0x6106, 0x080c, 0xd001, 0x1120, 0x6007,
+ 0x002e, 0x0804, 0xcbe8, 0x6007, 0x002f, 0x0804, 0xcbe8, 0x080c,
+ 0x3226, 0x1904, 0xce2c, 0x00e6, 0x00d6, 0x00c6, 0x6010, 0x2058,
+ 0xb904, 0x9184, 0x00ff, 0x9086, 0x0006, 0x0158, 0x9184, 0xff00,
+ 0x8007, 0x9086, 0x0006, 0x0128, 0x00ce, 0x00de, 0x00ee, 0x0804,
+ 0xcbef, 0x080c, 0x5668, 0xd0e4, 0x0904, 0xcd69, 0x2071, 0x026c,
+ 0x7010, 0x603a, 0x7014, 0x603e, 0x7108, 0x720c, 0x080c, 0x6869,
+ 0x0140, 0x6010, 0x2058, 0xb810, 0x9106, 0x1118, 0xb814, 0x9206,
+ 0x0510, 0x080c, 0x6865, 0x15b8, 0x2069, 0x1800, 0x687c, 0x9206,
+ 0x1590, 0x6878, 0x9106, 0x1578, 0x7210, 0x080c, 0xc1bb, 0x0590,
+ 0x080c, 0xcecd, 0x0578, 0x080c, 0xdd94, 0x0560, 0x622e, 0x6007,
+ 0x0036, 0x6003, 0x0001, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x00ce,
+ 0x00de, 0x00ee, 0x0005, 0x7214, 0x9286, 0xffff, 0x0150, 0x080c,
+ 0xc1bb, 0x01c0, 0x9280, 0x0002, 0x2004, 0x7110, 0x9106, 0x1190,
+ 0x08e0, 0x7210, 0x2c08, 0x9085, 0x0001, 0x080c, 0xdcea, 0x2c10,
+ 0x2160, 0x0140, 0x0890, 0x6007, 0x0037, 0x602f, 0x0009, 0x6017,
+ 0x1500, 0x08b8, 0x6007, 0x0037, 0x602f, 0x0003, 0x6017, 0x1700,
+ 0x0880, 0x6007, 0x0012, 0x0868, 0x080c, 0x3226, 0x1904, 0xce2c,
+ 0x6010, 0x2058, 0xb804, 0x9084, 0xff00, 0x8007, 0x9086, 0x0006,
+ 0x1904, 0xcbef, 0x00e6, 0x00d6, 0x00c6, 0x080c, 0x5668, 0xd0e4,
+ 0x0904, 0xcdef, 0x2069, 0x1800, 0x2071, 0x026c, 0x7008, 0x603a,
+ 0x720c, 0x623e, 0x9286, 0xffff, 0x1158, 0x7208, 0x00c6, 0x2c08,
+ 0x9085, 0x0001, 0x080c, 0xdcea, 0x2c10, 0x00ce, 0x0904, 0xcde2,
+ 0x080c, 0xc1bb, 0x0904, 0xcde2, 0x7108, 0x9280, 0x0002, 0x2004,
+ 0x9106, 0x1904, 0xcde2, 0x00c6, 0x0026, 0x2260, 0x0066, 0x2031,
+ 0x0001, 0x6020, 0x9084, 0x000f, 0x9086, 0x0006, 0x190c, 0x0dc3,
+ 0x080c, 0xbe31, 0x006e, 0x002e, 0x00ce, 0x7118, 0x918c, 0xff00,
+ 0x810f, 0x9186, 0x0001, 0x0178, 0x9186, 0x0005, 0x0118, 0x9186,
+ 0x0007, 0x1198, 0x9280, 0x0005, 0x2004, 0x9005, 0x0170, 0x080c,
+ 0xcecd, 0x0904, 0xcd62, 0x0056, 0x7510, 0x7614, 0x080c, 0xddad,
+ 0x005e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x6007, 0x003b, 0x602f,
+ 0x0009, 0x6017, 0x2a00, 0x6003, 0x0001, 0x080c, 0x88a1, 0x080c,
+ 0x8e38, 0x0c78, 0x6007, 0x003b, 0x602f, 0x0003, 0x6017, 0x0300,
+ 0x6003, 0x0001, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x0c10, 0x6007,
+ 0x003b, 0x602f, 0x000b, 0x6017, 0x0000, 0x0804, 0xcd39, 0x00e6,
+ 0x0026, 0x080c, 0x682b, 0x0550, 0x080c, 0x6814, 0x080c, 0xdf92,
+ 0x1518, 0x2071, 0x1800, 0x70d8, 0x9085, 0x0003, 0x70da, 0x00f6,
+ 0x2079, 0x0100, 0x72ac, 0x9284, 0x00ff, 0x707a, 0x78e6, 0x9284,
+ 0xff00, 0x727c, 0x9205, 0x707e, 0x78ea, 0x00fe, 0x70e3, 0x0000,
+ 0x080c, 0x6869, 0x0120, 0x2011, 0x19dd, 0x2013, 0x07d0, 0xd0ac,
+ 0x1128, 0x080c, 0x2ed6, 0x0010, 0x080c, 0xdfc6, 0x002e, 0x00ee,
+ 0x080c, 0xa39d, 0x0804, 0xcbee, 0x080c, 0xa39d, 0x0005, 0x2600,
+ 0x0002, 0xce45, 0xce45, 0xce45, 0xce45, 0xce45, 0xce47, 0xce45,
+ 0xce45, 0xce45, 0xce45, 0xce61, 0xce45, 0xce45, 0xce45, 0xce73,
+ 0xce89, 0xceba, 0xce45, 0xce45, 0xcebf, 0x080c, 0x0dc3, 0x080c,
+ 0xdf0c, 0x1d10, 0x080c, 0x3226, 0x19f8, 0x7038, 0x6016, 0x6007,
+ 0x0045, 0x6003, 0x0001, 0x080c, 0x88e9, 0x0005, 0x080c, 0x3102,
+ 0x080c, 0xc8e3, 0x6007, 0x0001, 0x6003, 0x0001, 0x080c, 0x88e9,
+ 0x0005, 0x080c, 0xdf0c, 0x1940, 0x080c, 0x3226, 0x1928, 0x080c,
+ 0xcfe0, 0x1d60, 0x703c, 0x6016, 0x6007, 0x004a, 0x6003, 0x0001,
+ 0x080c, 0x88e9, 0x0005, 0x2001, 0x1823, 0x2004, 0x9082, 0x00e1,
+ 0x1268, 0x080c, 0xceea, 0x0904, 0xce2c, 0x6007, 0x004e, 0x6003,
+ 0x0001, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x0005, 0x6007, 0x0012,
+ 0x0cb0, 0x6007, 0x004f, 0x6017, 0x0000, 0x7134, 0x918c, 0x00ff,
+ 0x81ff, 0x0508, 0x9186, 0x0001, 0x1160, 0x7140, 0x2001, 0x199a,
+ 0x2004, 0x9106, 0x11b0, 0x7144, 0x2001, 0x199b, 0x2004, 0x9106,
+ 0x0190, 0x9186, 0x0002, 0x1168, 0x2011, 0x0276, 0x20a9, 0x0004,
+ 0x6010, 0x0096, 0x2048, 0x2019, 0x000a, 0x080c, 0xb448, 0x009e,
+ 0x0110, 0x6017, 0x0001, 0x6003, 0x0001, 0x080c, 0x88e9, 0x080c,
+ 0x8e38, 0x0005, 0x6007, 0x0050, 0x703c, 0x6016, 0x0ca0, 0x080c,
+ 0xdf0c, 0x1904, 0xce2c, 0x080c, 0x3226, 0x1904, 0xce2c, 0x6007,
+ 0x0053, 0x6003, 0x0001, 0x0804, 0x88e9, 0x0016, 0x00e6, 0x2071,
+ 0x0260, 0x00b6, 0x00c6, 0x2260, 0x6010, 0x2058, 0xb8bc, 0xd084,
+ 0x0150, 0x7128, 0x6044, 0x9106, 0x1120, 0x712c, 0x6048, 0x9106,
+ 0x0110, 0x9006, 0x0010, 0x9085, 0x0001, 0x00ce, 0x00be, 0x00ee,
+ 0x001e, 0x0005, 0x0016, 0x0096, 0x0086, 0x00e6, 0x01c6, 0x01d6,
0x0126, 0x2091, 0x8000, 0x2071, 0x1800, 0x20e1, 0x0000, 0x2001,
- 0x197d, 0x2003, 0x0000, 0x080c, 0x101a, 0x05a0, 0x2900, 0x6016,
+ 0x197d, 0x2003, 0x0000, 0x080c, 0x1026, 0x05a0, 0x2900, 0x6016,
0x708c, 0x8004, 0xa816, 0x908a, 0x001e, 0x02d0, 0xa833, 0x001e,
0x20a9, 0x001e, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001c, 0x20a0,
0x2001, 0x197d, 0x0016, 0x200c, 0x0471, 0x001e, 0x81ff, 0x01b8,
- 0x2940, 0x080c, 0x101a, 0x01b0, 0x2900, 0xa006, 0x2100, 0x0c18,
+ 0x2940, 0x080c, 0x1026, 0x01b0, 0x2900, 0xa006, 0x2100, 0x0c18,
0xa832, 0x20a8, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001c, 0x20a0,
0x2001, 0x197d, 0x0016, 0x200c, 0x00b1, 0x001e, 0x0000, 0x9085,
0x0001, 0x0048, 0x2071, 0x1800, 0x708f, 0x0000, 0x6014, 0x2048,
- 0x080c, 0x0fb3, 0x9006, 0x012e, 0x01de, 0x01ce, 0x00ee, 0x008e,
+ 0x080c, 0x0fbf, 0x9006, 0x012e, 0x01de, 0x01ce, 0x00ee, 0x008e,
0x009e, 0x001e, 0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00c6,
- 0x918c, 0xffff, 0x11b0, 0x080c, 0x228b, 0x2099, 0x026c, 0x2001,
+ 0x918c, 0xffff, 0x11b0, 0x080c, 0x22d3, 0x2099, 0x026c, 0x2001,
0x0014, 0x3518, 0x9312, 0x0108, 0x1218, 0x23a8, 0x4003, 0x0400,
- 0x20a8, 0x4003, 0x22a8, 0x8108, 0x080c, 0x228b, 0x2099, 0x0260,
- 0x0ca8, 0x080c, 0x228b, 0x2061, 0x197d, 0x6004, 0x2098, 0x6008,
+ 0x20a8, 0x4003, 0x22a8, 0x8108, 0x080c, 0x22d3, 0x2099, 0x0260,
+ 0x0ca8, 0x080c, 0x22d3, 0x2061, 0x197d, 0x6004, 0x2098, 0x6008,
0x3518, 0x9312, 0x0108, 0x1218, 0x23a8, 0x4003, 0x0048, 0x20a8,
- 0x4003, 0x22a8, 0x8108, 0x080c, 0x228b, 0x2099, 0x0260, 0x0ca8,
+ 0x4003, 0x22a8, 0x8108, 0x080c, 0x22d3, 0x2099, 0x0260, 0x0ca8,
0x2061, 0x197d, 0x2019, 0x0280, 0x3300, 0x931e, 0x0110, 0x6006,
0x0020, 0x2001, 0x0260, 0x6006, 0x8108, 0x2162, 0x9292, 0x0021,
0x9296, 0xffff, 0x620a, 0x00ce, 0x003e, 0x002e, 0x001e, 0x000e,
0x0005, 0x0006, 0x0016, 0x0026, 0x0036, 0x00c6, 0x81ff, 0x11b8,
- 0x080c, 0x22a3, 0x20a1, 0x024c, 0x2001, 0x0014, 0x3518, 0x9312,
+ 0x080c, 0x22eb, 0x20a1, 0x024c, 0x2001, 0x0014, 0x3518, 0x9312,
0x1218, 0x23a8, 0x4003, 0x0418, 0x20a8, 0x4003, 0x82ff, 0x01f8,
- 0x22a8, 0x8108, 0x080c, 0x22a3, 0x20a1, 0x0240, 0x0c98, 0x080c,
- 0x22a3, 0x2061, 0x1980, 0x6004, 0x20a0, 0x6008, 0x3518, 0x9312,
+ 0x22a8, 0x8108, 0x080c, 0x22eb, 0x20a1, 0x0240, 0x0c98, 0x080c,
+ 0x22eb, 0x2061, 0x1980, 0x6004, 0x20a0, 0x6008, 0x3518, 0x9312,
0x1218, 0x23a8, 0x4003, 0x0058, 0x20a8, 0x4003, 0x82ff, 0x0138,
- 0x22a8, 0x8108, 0x080c, 0x22a3, 0x20a1, 0x0240, 0x0c98, 0x2061,
+ 0x22a8, 0x8108, 0x080c, 0x22eb, 0x20a1, 0x0240, 0x0c98, 0x2061,
0x1980, 0x2019, 0x0260, 0x3400, 0x931e, 0x0110, 0x6006, 0x0020,
0x2001, 0x0240, 0x6006, 0x8108, 0x2162, 0x9292, 0x0021, 0x9296,
0xffff, 0x620a, 0x00ce, 0x003e, 0x002e, 0x001e, 0x000e, 0x0005,
0x00b6, 0x0066, 0x6610, 0x2658, 0xbe04, 0x96b4, 0xff00, 0x8637,
0x9686, 0x0006, 0x0170, 0x9686, 0x0004, 0x0158, 0xbe04, 0x96b4,
0x00ff, 0x9686, 0x0006, 0x0128, 0x9686, 0x0004, 0x0110, 0x9085,
- 0x0001, 0x006e, 0x00be, 0x0005, 0x00d6, 0x080c, 0xc578, 0x00de,
- 0x0005, 0x00d6, 0x080c, 0xc585, 0x1520, 0x680c, 0x908c, 0xff00,
+ 0x0001, 0x006e, 0x00be, 0x0005, 0x00d6, 0x080c, 0xd078, 0x00de,
+ 0x0005, 0x00d6, 0x080c, 0xd085, 0x1520, 0x680c, 0x908c, 0xff00,
0x6820, 0x9084, 0x00ff, 0x9115, 0x6216, 0x6824, 0x602e, 0xd1e4,
- 0x0130, 0x9006, 0x080c, 0xd2b1, 0x2009, 0x0001, 0x0078, 0xd1ec,
- 0x0180, 0x6920, 0x918c, 0x00ff, 0x6824, 0x080c, 0x269f, 0x1148,
- 0x2001, 0x0001, 0x080c, 0xd2b1, 0x2110, 0x900e, 0x080c, 0x30af,
+ 0x0130, 0x9006, 0x080c, 0xe03e, 0x2009, 0x0001, 0x0078, 0xd1ec,
+ 0x0180, 0x6920, 0x918c, 0x00ff, 0x6824, 0x080c, 0x2708, 0x1148,
+ 0x2001, 0x0001, 0x080c, 0xe03e, 0x2110, 0x900e, 0x080c, 0x314b,
0x0018, 0x9085, 0x0001, 0x0008, 0x9006, 0x00de, 0x0005, 0x00b6,
- 0x00c6, 0x080c, 0x9f5b, 0x05a8, 0x0016, 0x0026, 0x00c6, 0x2011,
- 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x269f, 0x1578, 0x080c,
- 0x63c1, 0x1560, 0xbe12, 0xbd16, 0x00ce, 0x002e, 0x001e, 0x2b00,
- 0x6012, 0x080c, 0xd1fc, 0x11d8, 0x080c, 0x318a, 0x11c0, 0x080c,
- 0xc4e0, 0x0510, 0x2001, 0x0007, 0x080c, 0x6372, 0x2001, 0x0007,
- 0x080c, 0x639e, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001,
- 0x6003, 0x0001, 0x080c, 0x8718, 0x080c, 0x8c37, 0x0010, 0x080c,
- 0x9f18, 0x9085, 0x0001, 0x00ce, 0x00be, 0x0005, 0x080c, 0x9f18,
- 0x00ce, 0x002e, 0x001e, 0x0ca8, 0x080c, 0x9f18, 0x9006, 0x0c98,
+ 0x00c6, 0x080c, 0xa3ec, 0x05a8, 0x0016, 0x0026, 0x00c6, 0x2011,
+ 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x2708, 0x1578, 0x080c,
+ 0x6497, 0x1560, 0xbe12, 0xbd16, 0x00ce, 0x002e, 0x001e, 0x2b00,
+ 0x6012, 0x080c, 0xdf0c, 0x11d8, 0x080c, 0x3226, 0x11c0, 0x080c,
+ 0xcfe0, 0x0510, 0x2001, 0x0007, 0x080c, 0x6448, 0x2001, 0x0007,
+ 0x080c, 0x6474, 0x6017, 0x0000, 0x6023, 0x0001, 0x6007, 0x0001,
+ 0x6003, 0x0001, 0x080c, 0x88e9, 0x080c, 0x8e38, 0x0010, 0x080c,
+ 0xa39d, 0x9085, 0x0001, 0x00ce, 0x00be, 0x0005, 0x080c, 0xa39d,
+ 0x00ce, 0x002e, 0x001e, 0x0ca8, 0x080c, 0xa39d, 0x9006, 0x0c98,
0x2069, 0x026d, 0x6800, 0x9082, 0x0010, 0x1228, 0x6017, 0x0000,
0x9085, 0x0001, 0x0008, 0x9006, 0x0005, 0x6017, 0x0000, 0x2069,
0x026c, 0x6808, 0x9084, 0xff00, 0x9086, 0x0800, 0x11c0, 0x6804,
0x2009, 0x1823, 0x210c, 0x9102, 0x0290, 0x6904, 0x9186, 0x0018,
0x0118, 0x9186, 0x0014, 0x1158, 0x810f, 0x6800, 0x9084, 0x00ff,
- 0x910d, 0x612a, 0x908e, 0x0014, 0x0110, 0x908e, 0x0010, 0x0005,
- 0x6004, 0x90b2, 0x0054, 0x1a0c, 0x0dc4, 0x91b6, 0x0013, 0x1130,
- 0x2008, 0x91b2, 0x0040, 0x1a04, 0xc6eb, 0x040a, 0x91b6, 0x0027,
+ 0x910d, 0x615a, 0x908e, 0x0014, 0x0110, 0x908e, 0x0010, 0x0005,
+ 0x6004, 0x90b2, 0x0054, 0x1a0c, 0x0dc3, 0x91b6, 0x0013, 0x1130,
+ 0x2008, 0x91b2, 0x0040, 0x1a04, 0xd1eb, 0x040a, 0x91b6, 0x0027,
0x0198, 0x9186, 0x0015, 0x0118, 0x9186, 0x0016, 0x1148, 0x080c,
- 0xbf19, 0x0128, 0x6000, 0x9086, 0x0002, 0x0904, 0xa75e, 0x0005,
- 0x91b6, 0x0014, 0x190c, 0x0dc4, 0x2001, 0x0007, 0x080c, 0x639e,
- 0x080c, 0x8b2b, 0x080c, 0x9f42, 0x080c, 0x8c37, 0x0005, 0xc617,
- 0xc619, 0xc617, 0xc617, 0xc617, 0xc619, 0xc628, 0xc6e4, 0xc66c,
- 0xc6e4, 0xc692, 0xc6e4, 0xc628, 0xc6e4, 0xc6dc, 0xc6e4, 0xc6dc,
- 0xc6e4, 0xc6e4, 0xc617, 0xc617, 0xc617, 0xc617, 0xc617, 0xc617,
- 0xc617, 0xc617, 0xc617, 0xc617, 0xc617, 0xc617, 0xc617, 0xc6e4,
- 0xc617, 0xc617, 0xc6e4, 0xc617, 0xc6e4, 0xc6e4, 0xc617, 0xc617,
- 0xc617, 0xc617, 0xc6e4, 0xc6e4, 0xc617, 0xc6e4, 0xc6e4, 0xc617,
- 0xc623, 0xc617, 0xc617, 0xc617, 0xc617, 0xc617, 0xc617, 0xc617,
- 0xc617, 0xc617, 0xc617, 0xc617, 0xc617, 0xc617, 0xc617, 0x080c,
- 0x0dc4, 0x080c, 0x8b2b, 0x080c, 0xbf10, 0x6003, 0x0002, 0x080c,
- 0x8c37, 0x0804, 0xc6ea, 0x9006, 0x080c, 0x635e, 0x0804, 0xc6e4,
- 0x080c, 0x673e, 0x1904, 0xc6e4, 0x9006, 0x080c, 0x635e, 0x6010,
+ 0xc8f4, 0x0128, 0x6000, 0x9086, 0x0002, 0x0904, 0xadfa, 0x0005,
+ 0x91b6, 0x0014, 0x190c, 0x0dc3, 0x2001, 0x0007, 0x080c, 0x6474,
+ 0x080c, 0x8d2c, 0x080c, 0xa3cf, 0x080c, 0x8e38, 0x0005, 0xd117,
+ 0xd119, 0xd117, 0xd117, 0xd117, 0xd119, 0xd128, 0xd1e4, 0xd16c,
+ 0xd1e4, 0xd192, 0xd1e4, 0xd128, 0xd1e4, 0xd1dc, 0xd1e4, 0xd1dc,
+ 0xd1e4, 0xd1e4, 0xd117, 0xd117, 0xd117, 0xd117, 0xd117, 0xd117,
+ 0xd117, 0xd117, 0xd117, 0xd117, 0xd117, 0xd119, 0xd117, 0xd1e4,
+ 0xd117, 0xd117, 0xd1e4, 0xd117, 0xd1e1, 0xd1e4, 0xd117, 0xd117,
+ 0xd117, 0xd117, 0xd1e4, 0xd1e4, 0xd117, 0xd1e4, 0xd1e4, 0xd117,
+ 0xd123, 0xd117, 0xd117, 0xd117, 0xd117, 0xd1e0, 0xd1e4, 0xd117,
+ 0xd117, 0xd1e4, 0xd1e4, 0xd117, 0xd117, 0xd117, 0xd117, 0x080c,
+ 0x0dc3, 0x080c, 0x8d2c, 0x080c, 0xc8e6, 0x6003, 0x0002, 0x080c,
+ 0x8e38, 0x0804, 0xd1ea, 0x9006, 0x080c, 0x6434, 0x0804, 0xd1e4,
+ 0x080c, 0x6865, 0x1904, 0xd1e4, 0x9006, 0x080c, 0x6434, 0x6010,
0x2058, 0xb810, 0x9086, 0x00ff, 0x1140, 0x00f6, 0x2079, 0x1800,
- 0x78a4, 0x8000, 0x78a6, 0x00fe, 0x00b8, 0x6010, 0x2058, 0xb8ac,
- 0x9005, 0x0904, 0xc6e4, 0x080c, 0x31bb, 0x1904, 0xc6e4, 0x2001,
+ 0x78a4, 0x8000, 0x78a6, 0x00fe, 0x00b8, 0x6010, 0x2058, 0xb8b0,
+ 0x9005, 0x0904, 0xd1e4, 0x080c, 0x3257, 0x1904, 0xd1e4, 0x2001,
0x1800, 0x2004, 0x9086, 0x0002, 0x1138, 0x00f6, 0x2079, 0x1800,
- 0x78a4, 0x8000, 0x78a6, 0x00fe, 0x2001, 0x0002, 0x080c, 0x6372,
- 0x080c, 0x8b2b, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002,
- 0x080c, 0x8718, 0x080c, 0x8c37, 0x6110, 0x2158, 0x2009, 0x0001,
- 0x080c, 0x836c, 0x0804, 0xc6ea, 0x6610, 0x2658, 0xbe04, 0x96b4,
+ 0x78a4, 0x8000, 0x78a6, 0x00fe, 0x2001, 0x0002, 0x080c, 0x6448,
+ 0x080c, 0x8d2c, 0x6023, 0x0001, 0x6003, 0x0001, 0x6007, 0x0002,
+ 0x080c, 0x88e9, 0x080c, 0x8e38, 0x6110, 0x2158, 0x2009, 0x0001,
+ 0x080c, 0x84d0, 0x0804, 0xd1ea, 0x6610, 0x2658, 0xbe04, 0x96b4,
0xff00, 0x8637, 0x9686, 0x0006, 0x0138, 0x9686, 0x0004, 0x0120,
- 0x2001, 0x0004, 0x080c, 0x639e, 0x080c, 0xd300, 0x0904, 0xc6e4,
- 0x080c, 0x8b2b, 0x2001, 0x0004, 0x080c, 0x6372, 0x6023, 0x0001,
- 0x6003, 0x0001, 0x6007, 0x0003, 0x080c, 0x8718, 0x080c, 0x8c37,
- 0x0804, 0xc6ea, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1158,
+ 0x2001, 0x0004, 0x080c, 0x6474, 0x080c, 0xe08d, 0x0904, 0xd1e4,
+ 0x080c, 0x8d2c, 0x2001, 0x0004, 0x080c, 0x6448, 0x6023, 0x0001,
+ 0x6003, 0x0001, 0x6007, 0x0003, 0x080c, 0x88e9, 0x080c, 0x8e38,
+ 0x0804, 0xd1ea, 0x2001, 0x1800, 0x2004, 0x9086, 0x0003, 0x1158,
0x0036, 0x0046, 0x6010, 0x2058, 0xbba0, 0x2021, 0x0006, 0x080c,
- 0x4c74, 0x004e, 0x003e, 0x2001, 0x0006, 0x080c, 0xc70a, 0x6610,
+ 0x4d24, 0x004e, 0x003e, 0x2001, 0x0006, 0x080c, 0xd20a, 0x6610,
0x2658, 0xbe04, 0x0066, 0x96b4, 0xff00, 0x8637, 0x9686, 0x0006,
- 0x006e, 0x0180, 0x2001, 0x0006, 0x080c, 0x639e, 0x9284, 0x00ff,
+ 0x006e, 0x0180, 0x2001, 0x0006, 0x080c, 0x6474, 0x9284, 0x00ff,
0x908e, 0x0007, 0x0118, 0x908e, 0x0004, 0x1120, 0x2001, 0x0006,
- 0x080c, 0x6372, 0x080c, 0x673e, 0x11f8, 0x2001, 0x1836, 0x2004,
+ 0x080c, 0x6448, 0x080c, 0x6865, 0x11f8, 0x2001, 0x1836, 0x2004,
0xd0a4, 0x01d0, 0xbe04, 0x96b4, 0x00ff, 0x9686, 0x0006, 0x01a0,
0x00f6, 0x2079, 0x1800, 0x78a4, 0x8000, 0x78a6, 0x00fe, 0x0804,
- 0xc654, 0x2001, 0x0004, 0x0030, 0x2001, 0x0006, 0x0459, 0x0020,
- 0x0018, 0x0010, 0x080c, 0x639e, 0x080c, 0x8b2b, 0x080c, 0x9f18,
- 0x080c, 0x8c37, 0x0005, 0x2600, 0x0002, 0xc701, 0xc701, 0xc701,
- 0xc701, 0xc701, 0xc703, 0xc701, 0xc701, 0xc701, 0xc701, 0xc703,
- 0xc701, 0xc701, 0xc701, 0xc703, 0xc703, 0xc703, 0xc703, 0xc701,
- 0xc703, 0x080c, 0x0dc4, 0x080c, 0x8b2b, 0x080c, 0x9f18, 0x080c,
- 0x8c37, 0x0005, 0x0016, 0x00b6, 0x00d6, 0x6110, 0x2158, 0xb900,
- 0xd184, 0x0138, 0x080c, 0x6372, 0x9006, 0x080c, 0x635e, 0x080c,
- 0x308f, 0x00de, 0x00be, 0x001e, 0x0005, 0x6610, 0x2658, 0xb804,
- 0x9084, 0xff00, 0x8007, 0x90b2, 0x000c, 0x1a0c, 0x0dc4, 0x91b6,
- 0x0015, 0x1110, 0x003b, 0x0028, 0x91b6, 0x0016, 0x190c, 0x0dc4,
- 0x006b, 0x0005, 0xa7e9, 0xa7e9, 0xa7e9, 0xa7e9, 0xc798, 0xa7e9,
- 0xa7e9, 0xc74a, 0xa7e9, 0xa7e9, 0xa7e9, 0xa7e9, 0xa7e9, 0xa7e9,
- 0xa7e9, 0xa7e9, 0xc798, 0xa7e9, 0xa7e9, 0xc789, 0xa7e9, 0xa7e9,
- 0xa7e9, 0xa7e9, 0x00f6, 0x080c, 0x673e, 0x11d8, 0x080c, 0xbef8,
- 0x11c0, 0x6010, 0x905d, 0x01a8, 0xb8ac, 0x9005, 0x0190, 0x9006,
- 0x080c, 0x635e, 0x2001, 0x0002, 0x080c, 0x6372, 0x6023, 0x0001,
- 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x8718, 0x080c, 0x8c37,
- 0x00f0, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x269f,
- 0x11b0, 0x080c, 0x6411, 0x0118, 0x080c, 0x9f18, 0x0080, 0xb810,
- 0x0006, 0xb814, 0x0006, 0xb8ac, 0x0006, 0x080c, 0x5f10, 0x000e,
- 0xb8ae, 0x000e, 0xb816, 0x000e, 0xb812, 0x080c, 0x9f18, 0x00fe,
- 0x0005, 0x080c, 0xabf0, 0x1148, 0x6003, 0x0001, 0x6007, 0x0001,
- 0x080c, 0x8718, 0x080c, 0x8c37, 0x0010, 0x080c, 0x9f18, 0x0005,
- 0x0804, 0x9f18, 0x6004, 0x908a, 0x0054, 0x1a0c, 0x0dc4, 0x080c,
- 0x8b2b, 0x080c, 0x9f42, 0x080c, 0x8c37, 0x0005, 0x9182, 0x0040,
- 0x0002, 0xc7bd, 0xc7bd, 0xc7bd, 0xc7bd, 0xc7bf, 0xc7bd, 0xc7bd,
- 0xc7bd, 0xc7bd, 0xc7bd, 0xc7bd, 0xc7bd, 0xc7bd, 0xc7bd, 0xc7bd,
- 0xc7bd, 0xc7bd, 0xc7bd, 0xc7bd, 0xc7bd, 0x080c, 0x0dc4, 0x0096,
- 0x00b6, 0x00d6, 0x00e6, 0x00f6, 0x0046, 0x0026, 0x6106, 0x2071,
- 0x0260, 0x7444, 0x94a4, 0xff00, 0x0904, 0xc81c, 0x080c, 0xd2a5,
- 0x1150, 0x9486, 0x2000, 0x1138, 0x2009, 0x0001, 0x2011, 0x0200,
- 0x080c, 0x8532, 0x0000, 0x080c, 0x1001, 0x090c, 0x0dc4, 0x6003,
+ 0xd154, 0x2001, 0x0004, 0x0030, 0x2001, 0x0006, 0x0459, 0x0020,
+ 0x0018, 0x0010, 0x080c, 0x6474, 0x080c, 0x8d2c, 0x080c, 0xa39d,
+ 0x080c, 0x8e38, 0x0005, 0x2600, 0x0002, 0xd201, 0xd201, 0xd201,
+ 0xd201, 0xd201, 0xd203, 0xd201, 0xd201, 0xd201, 0xd201, 0xd203,
+ 0xd201, 0xd201, 0xd201, 0xd203, 0xd203, 0xd203, 0xd203, 0xd201,
+ 0xd203, 0x080c, 0x0dc3, 0x080c, 0x8d2c, 0x080c, 0xa39d, 0x080c,
+ 0x8e38, 0x0005, 0x0016, 0x00b6, 0x00d6, 0x6110, 0x2158, 0xb900,
+ 0xd184, 0x0138, 0x080c, 0x6448, 0x9006, 0x080c, 0x6434, 0x080c,
+ 0x312b, 0x00de, 0x00be, 0x001e, 0x0005, 0x6610, 0x2658, 0xb804,
+ 0x9084, 0xff00, 0x8007, 0x90b2, 0x000c, 0x1a0c, 0x0dc3, 0x91b6,
+ 0x0015, 0x1110, 0x003b, 0x0028, 0x91b6, 0x0016, 0x190c, 0x0dc3,
+ 0x006b, 0x0005, 0xae95, 0xae95, 0xae95, 0xae95, 0xd29f, 0xae95,
+ 0xd289, 0xd24a, 0xae95, 0xae95, 0xae95, 0xae95, 0xae95, 0xae95,
+ 0xae95, 0xae95, 0xd29f, 0xae95, 0xd289, 0xd290, 0xae95, 0xae95,
+ 0xae95, 0xae95, 0x00f6, 0x080c, 0x6865, 0x11d8, 0x080c, 0xc8ce,
+ 0x11c0, 0x6010, 0x905d, 0x01a8, 0xb8b0, 0x9005, 0x0190, 0x9006,
+ 0x080c, 0x6434, 0x2001, 0x0002, 0x080c, 0x6448, 0x6023, 0x0001,
+ 0x6003, 0x0001, 0x6007, 0x0002, 0x080c, 0x88e9, 0x080c, 0x8e38,
+ 0x00f0, 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x2708,
+ 0x11b0, 0x080c, 0x64fc, 0x0118, 0x080c, 0xa39d, 0x0080, 0xb810,
+ 0x0006, 0xb814, 0x0006, 0xb8b0, 0x0006, 0x080c, 0x5fcd, 0x000e,
+ 0xb8b2, 0x000e, 0xb816, 0x000e, 0xb812, 0x080c, 0xa39d, 0x00fe,
+ 0x0005, 0x6604, 0x96b6, 0x001e, 0x1110, 0x080c, 0xa39d, 0x0005,
+ 0x080c, 0xb2a4, 0x1148, 0x6003, 0x0001, 0x6007, 0x0001, 0x080c,
+ 0x88e9, 0x080c, 0x8e38, 0x0010, 0x080c, 0xa39d, 0x0005, 0x0804,
+ 0xa39d, 0x6004, 0x908a, 0x0054, 0x1a0c, 0x0dc3, 0x080c, 0x8d2c,
+ 0x080c, 0xa3cf, 0x080c, 0x8e38, 0x0005, 0x9182, 0x0040, 0x0002,
+ 0xd2c4, 0xd2c4, 0xd2c4, 0xd2c4, 0xd2c6, 0xd2c4, 0xd2c4, 0xd2c4,
+ 0xd2c4, 0xd2c4, 0xd2c4, 0xd2c4, 0xd2c4, 0xd2c4, 0xd2c4, 0xd2c4,
+ 0xd2c4, 0xd2c4, 0xd2c4, 0xd2c4, 0x080c, 0x0dc3, 0x0096, 0x00b6,
+ 0x00d6, 0x00e6, 0x00f6, 0x0046, 0x0026, 0x6210, 0x2258, 0xb8ac,
+ 0x9005, 0x11a8, 0x6106, 0x2071, 0x0260, 0x7444, 0x94a4, 0xff00,
+ 0x0904, 0xd32c, 0x080c, 0xe032, 0x1170, 0x9486, 0x2000, 0x1158,
+ 0x2009, 0x0001, 0x2011, 0x0200, 0x080c, 0x8703, 0x0020, 0x9026,
+ 0x080c, 0xdf55, 0x0c38, 0x080c, 0x100d, 0x090c, 0x0dc3, 0x6003,
0x0007, 0xa86b, 0x010d, 0x9006, 0xa802, 0xa86e, 0xac8e, 0x2c00,
0xa892, 0x6008, 0xa8e6, 0x6010, 0x2058, 0xb8a0, 0x7130, 0xa97e,
0x0016, 0xa87a, 0xa883, 0x0000, 0xa887, 0x0000, 0xa88b, 0x0036,
- 0x080c, 0x6b1d, 0x001e, 0x080c, 0xd2a5, 0x1904, 0xc87c, 0x9486,
- 0x2000, 0x1130, 0x2019, 0x0017, 0x080c, 0xd0d7, 0x0804, 0xc87c,
- 0x9486, 0x0200, 0x1120, 0x080c, 0xd077, 0x0804, 0xc87c, 0x9486,
- 0x0400, 0x0120, 0x9486, 0x1000, 0x1904, 0xc87c, 0x2019, 0x0002,
- 0x080c, 0xd08f, 0x0804, 0xc87c, 0x2069, 0x1a4f, 0x6a00, 0xd284,
- 0x0904, 0xc8e2, 0x9284, 0x0300, 0x1904, 0xc8db, 0x6804, 0x9005,
- 0x0904, 0xc8c3, 0x2d78, 0x6003, 0x0007, 0x080c, 0x101a, 0x0904,
- 0xc888, 0x7800, 0xd08c, 0x1118, 0x7804, 0x8001, 0x7806, 0x6017,
- 0x0000, 0x2001, 0x180f, 0x2004, 0xd084, 0x1904, 0xc8e6, 0x9006,
+ 0x080c, 0x6c02, 0x001e, 0x080c, 0xe032, 0x1904, 0xd38c, 0x9486,
+ 0x2000, 0x1130, 0x2019, 0x0017, 0x080c, 0xdc90, 0x0804, 0xd38c,
+ 0x9486, 0x0200, 0x1120, 0x080c, 0xdc27, 0x0804, 0xd38c, 0x9486,
+ 0x0400, 0x0120, 0x9486, 0x1000, 0x1904, 0xd38c, 0x2019, 0x0002,
+ 0x080c, 0xdc42, 0x0804, 0xd38c, 0x2069, 0x1a4f, 0x6a00, 0xd284,
+ 0x0904, 0xd3f6, 0x9284, 0x0300, 0x1904, 0xd3ef, 0x6804, 0x9005,
+ 0x0904, 0xd3d7, 0x2d78, 0x6003, 0x0007, 0x080c, 0x1026, 0x0904,
+ 0xd398, 0x7800, 0xd08c, 0x1118, 0x7804, 0x8001, 0x7806, 0x6017,
+ 0x0000, 0x2001, 0x180f, 0x2004, 0xd084, 0x1904, 0xd3fa, 0x9006,
0xa802, 0xa86b, 0x0116, 0xa86e, 0x6008, 0xa8e6, 0x2c00, 0xa87e,
0x6010, 0x2058, 0xb8a0, 0x7130, 0xa9ba, 0xa87a, 0xb928, 0xa9be,
0xb92c, 0xa9c2, 0xb930, 0xa9c6, 0xb934, 0xa9ca, 0xa887, 0x003d,
- 0x7044, 0x9084, 0x0003, 0x9080, 0xc884, 0x2005, 0xa882, 0x20a9,
+ 0x7044, 0x9084, 0x0003, 0x9080, 0xd394, 0x2005, 0xa882, 0x20a9,
0x000a, 0x2001, 0x0270, 0xaa5c, 0x9290, 0x0022, 0x2009, 0x0205,
0x200b, 0x0080, 0x20e1, 0x0000, 0xab60, 0x23e8, 0x2098, 0x22a0,
0x4003, 0x200b, 0x0000, 0x2001, 0x027a, 0x200c, 0xa9b6, 0x8000,
- 0x200c, 0xa9b2, 0x080c, 0x6b1d, 0x002e, 0x004e, 0x00fe, 0x00ee,
+ 0x200c, 0xa9b2, 0x080c, 0x6c02, 0x002e, 0x004e, 0x00fe, 0x00ee,
0x00de, 0x00be, 0x009e, 0x0005, 0x0000, 0x0080, 0x0040, 0x0000,
- 0x2001, 0x1810, 0x2004, 0xd084, 0x0120, 0x080c, 0x1001, 0x1904,
- 0xc831, 0x6017, 0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c,
- 0x86d0, 0x080c, 0x8c37, 0x0c00, 0x2069, 0x0260, 0x6848, 0x9084,
+ 0x2001, 0x1810, 0x2004, 0xd084, 0x0120, 0x080c, 0x100d, 0x1904,
+ 0xd341, 0x6017, 0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c,
+ 0x88a1, 0x080c, 0x8e38, 0x0c00, 0x2069, 0x0260, 0x6848, 0x9084,
0xff00, 0x9086, 0x1200, 0x1198, 0x686c, 0x9084, 0x00ff, 0x0016,
0x6114, 0x918c, 0xf700, 0x910d, 0x6116, 0x001e, 0x6003, 0x0001,
- 0x6007, 0x0043, 0x080c, 0x86d0, 0x080c, 0x8c37, 0x0828, 0x6017,
- 0xf200, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x86d0, 0x080c,
- 0x8c37, 0x0804, 0xc87c, 0x2001, 0x180e, 0x2004, 0xd0ec, 0x0120,
- 0x2011, 0x8049, 0x080c, 0x4abd, 0x6017, 0xf300, 0x0010, 0x6017,
- 0xf100, 0x6003, 0x0001, 0x6007, 0x0041, 0x080c, 0x86d0, 0x080c,
- 0x8c37, 0x0804, 0xc87c, 0x6017, 0xf500, 0x0c98, 0x6017, 0xf600,
- 0x0804, 0xc89c, 0x6017, 0xf200, 0x0804, 0xc89c, 0xa86b, 0x0146,
- 0xa86f, 0x0000, 0x6008, 0xa88a, 0x2c00, 0xa87e, 0x7044, 0x9084,
- 0x0003, 0x9080, 0xc884, 0x2005, 0xa882, 0x2928, 0x6010, 0x2058,
- 0xb8a0, 0xa87a, 0xb828, 0xa88e, 0xb82c, 0xa892, 0xb830, 0xa896,
- 0xb834, 0xa89a, 0xa887, 0x003d, 0x2009, 0x0205, 0x2104, 0x9085,
- 0x0080, 0x200a, 0x20e1, 0x0000, 0x2011, 0x0210, 0x2214, 0x9294,
- 0x0fff, 0xaaa6, 0x9282, 0x0111, 0x1a0c, 0x0dc4, 0x8210, 0x821c,
- 0x2001, 0x026c, 0x2098, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x002a,
- 0x20a0, 0x2011, 0xc962, 0x2041, 0x0001, 0x223d, 0x9784, 0x00ff,
- 0x9322, 0x1208, 0x2300, 0x20a8, 0x4003, 0x931a, 0x0530, 0x8210,
- 0xd7fc, 0x1130, 0x8d68, 0x2d0a, 0x2001, 0x0260, 0x2098, 0x0c68,
- 0x2950, 0x080c, 0x101a, 0x0170, 0x2900, 0xb002, 0xa86b, 0x0147,
- 0xa86f, 0x0000, 0xa860, 0x20e8, 0xa85c, 0x9080, 0x001c, 0x20a0,
- 0x8840, 0x08d8, 0x2548, 0xa800, 0x902d, 0x0118, 0x080c, 0x1033,
- 0x0cc8, 0x080c, 0x1033, 0x0804, 0xc888, 0x2548, 0x8847, 0x9885,
- 0x0046, 0xa86a, 0x2009, 0x0205, 0x200b, 0x0000, 0x080c, 0xd101,
- 0x0804, 0xc87c, 0x8010, 0x0004, 0x801a, 0x0006, 0x8018, 0x0008,
- 0x8016, 0x000a, 0x8014, 0x9186, 0x0013, 0x1160, 0x6004, 0x908a,
- 0x0054, 0x1a0c, 0x0dc4, 0x9082, 0x0040, 0x0a0c, 0x0dc4, 0x2008,
- 0x0804, 0xc9ee, 0x0048, 0x080c, 0xbf19, 0x0500, 0x6000, 0x9086,
- 0x0002, 0x11e0, 0x0804, 0xca29, 0x9186, 0x0027, 0x0190, 0x9186,
- 0x0048, 0x0128, 0x9186, 0x0014, 0x0160, 0x190c, 0x0dc4, 0x080c,
- 0xbf19, 0x0160, 0x6000, 0x9086, 0x0004, 0x190c, 0x0dc4, 0x0804,
- 0xcace, 0x6004, 0x9082, 0x0040, 0x2008, 0x001a, 0x080c, 0x9fa3,
- 0x0005, 0xc9b5, 0xc9b7, 0xc9b7, 0xc9de, 0xc9b5, 0xc9b5, 0xc9b5,
- 0xc9b5, 0xc9b5, 0xc9b5, 0xc9b5, 0xc9b5, 0xc9b5, 0xc9b5, 0xc9b5,
- 0xc9b5, 0xc9b5, 0xc9b5, 0xc9b5, 0xc9b5, 0x080c, 0x0dc4, 0x080c,
- 0x8b2b, 0x080c, 0x8c37, 0x0036, 0x0096, 0x6014, 0x904d, 0x01d8,
- 0x080c, 0xb955, 0x01c0, 0x6003, 0x0002, 0x6010, 0x00b6, 0x2058,
- 0xb800, 0x00be, 0xd0bc, 0x1178, 0x2019, 0x0004, 0x080c, 0xd101,
- 0x6017, 0x0000, 0x6018, 0x9005, 0x1120, 0x2001, 0x1964, 0x2004,
- 0x601a, 0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x0096, 0x080c,
- 0x8b2b, 0x080c, 0x8c37, 0x080c, 0xb955, 0x0120, 0x6014, 0x2048,
- 0x080c, 0x1033, 0x080c, 0x9f42, 0x009e, 0x0005, 0x0002, 0xca03,
- 0xca1a, 0xca05, 0xca23, 0xca03, 0xca03, 0xca03, 0xca03, 0xca03,
- 0xca03, 0xca03, 0xca03, 0xca03, 0xca03, 0xca03, 0xca03, 0xca03,
- 0xca03, 0xca03, 0xca03, 0x080c, 0x0dc4, 0x0096, 0x080c, 0x8b2b,
- 0x6014, 0x2048, 0xa880, 0xd0b4, 0x0138, 0x6003, 0x0007, 0x2009,
- 0x0043, 0x080c, 0x9f88, 0x0010, 0x6003, 0x0004, 0x080c, 0x8c37,
- 0x009e, 0x0005, 0x080c, 0x8b2b, 0x080c, 0x8507, 0x080c, 0x9f18,
- 0x080c, 0x8c37, 0x0005, 0x080c, 0x8b2b, 0x2009, 0x0041, 0x0804,
- 0xcb27, 0x9182, 0x0040, 0x0002, 0xca40, 0xca42, 0xca40, 0xca40,
- 0xca40, 0xca40, 0xca40, 0xca40, 0xca40, 0xca40, 0xca40, 0xca40,
- 0xca40, 0xca40, 0xca40, 0xca40, 0xca40, 0xca40, 0xca40, 0xca40,
- 0x080c, 0x0dc4, 0x0005, 0x9182, 0x0040, 0x0002, 0xca5a, 0xca5a,
- 0xca5a, 0xca5a, 0xca5a, 0xca5a, 0xca5a, 0xca5a, 0xca5a, 0xca5c,
- 0xcaae, 0xca5a, 0xca5a, 0xca5a, 0xca5a, 0xcaae, 0xca5a, 0xca5a,
- 0xca5a, 0xca5a, 0x080c, 0x0dc4, 0x2001, 0x0105, 0x2004, 0x9084,
- 0x1800, 0x01c0, 0x2001, 0x0132, 0x200c, 0x2001, 0x0131, 0x2004,
- 0x9105, 0x1904, 0xcaae, 0x2009, 0x180c, 0x2104, 0xd0d4, 0x05f0,
- 0xc0d4, 0x200a, 0x2009, 0x0105, 0x2104, 0x9084, 0xe7fd, 0x9085,
- 0x0010, 0x200a, 0x080c, 0x8be7, 0x6014, 0x0096, 0x2048, 0xa880,
- 0xd0fc, 0x0188, 0x908c, 0x0003, 0x918e, 0x0002, 0x01b0, 0x2001,
- 0x180c, 0x2004, 0xd0d4, 0x1188, 0x080c, 0x8d06, 0x2009, 0x0041,
- 0x009e, 0x0804, 0xcb27, 0x080c, 0x8d06, 0x6003, 0x0007, 0x601b,
- 0x0000, 0x080c, 0x8507, 0x009e, 0x0005, 0x2001, 0x180c, 0x200c,
- 0xc1d4, 0x2102, 0xd1cc, 0x0110, 0x080c, 0x2aa7, 0x080c, 0x8d06,
- 0x080c, 0x8507, 0x080c, 0x9f18, 0x009e, 0x0005, 0x2001, 0x180c,
- 0x200c, 0xc1d4, 0x2102, 0x0036, 0x080c, 0x8be7, 0x080c, 0x8d06,
- 0x6014, 0x0096, 0x2048, 0x2019, 0x0004, 0x080c, 0xd101, 0x6018,
- 0x9005, 0x1128, 0x2001, 0x1964, 0x2004, 0x8003, 0x601a, 0x6017,
- 0x0000, 0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x9182, 0x0040,
- 0x0002, 0xcae5, 0xcae5, 0xcae5, 0xcae5, 0xcae5, 0xcae5, 0xcae5,
- 0xcae5, 0xcae7, 0xcae5, 0xcae5, 0xcae5, 0xcae5, 0xcae5, 0xcae5,
- 0xcae5, 0xcae5, 0xcae5, 0xcae5, 0xcb0c, 0x080c, 0x0dc4, 0x6014,
- 0x0096, 0x2048, 0xa834, 0xaa38, 0x920d, 0x1178, 0xa880, 0xd0fc,
- 0x0120, 0x2009, 0x0041, 0x009e, 0x0490, 0x6003, 0x0007, 0x601b,
- 0x0000, 0x080c, 0x8507, 0x009e, 0x0005, 0x2009, 0x180e, 0x210c,
- 0xd19c, 0x0118, 0x6003, 0x0007, 0x0010, 0x6003, 0x0006, 0x0081,
- 0x080c, 0x8509, 0x009e, 0x0005, 0x6014, 0x0096, 0x2048, 0xa834,
- 0xa938, 0x009e, 0x9105, 0x1118, 0x080c, 0x154a, 0x1980, 0x0005,
- 0xd2fc, 0x0140, 0x8002, 0x8000, 0x8212, 0x9291, 0x0000, 0x2009,
- 0x0009, 0x0010, 0x2009, 0x0015, 0xaa9e, 0xa89a, 0x0005, 0x9182,
- 0x0040, 0x0208, 0x0012, 0x080c, 0x0dc4, 0xcb41, 0xcb48, 0xcb54,
- 0xcb60, 0xcb41, 0xcb41, 0xcb41, 0xcb41, 0xcb43, 0xcb41, 0xcb41,
- 0xcb41, 0xcb41, 0xcb41, 0xcb41, 0xcb41, 0xcb41, 0xcb41, 0xcb41,
- 0xcb43, 0x080c, 0x0dc4, 0x6014, 0x9005, 0x190c, 0x0dc4, 0x0005,
- 0x6003, 0x0001, 0x6106, 0x080c, 0x86d0, 0x0126, 0x2091, 0x8000,
- 0x080c, 0x8c37, 0x012e, 0x0005, 0x6003, 0x0001, 0x6106, 0x080c,
- 0x86d0, 0x0126, 0x2091, 0x8000, 0x080c, 0x8c37, 0x012e, 0x0005,
- 0x6003, 0x0003, 0x6106, 0x2c10, 0x080c, 0x1aa2, 0x0126, 0x2091,
- 0x8000, 0x080c, 0x8735, 0x080c, 0x8d06, 0x012e, 0x0005, 0x0126,
- 0x2091, 0x8000, 0x0036, 0x0096, 0x9182, 0x0040, 0x0023, 0x009e,
- 0x003e, 0x012e, 0x0005, 0xcb8f, 0xcb91, 0xcba3, 0xcbbd, 0xcb8f,
- 0xcb8f, 0xcb8f, 0xcb8f, 0xcb8f, 0xcb8f, 0xcb8f, 0xcb8f, 0xcb8f,
- 0xcb8f, 0xcb8f, 0xcb8f, 0xcb8f, 0xcb8f, 0xcb8f, 0xcb8f, 0x080c,
- 0x0dc4, 0x6014, 0x2048, 0xa880, 0xd0fc, 0x01f8, 0x909c, 0x0003,
- 0x939e, 0x0003, 0x01d0, 0x6003, 0x0001, 0x6106, 0x080c, 0x86d0,
- 0x080c, 0x8c37, 0x0470, 0x6014, 0x2048, 0xa880, 0xd0fc, 0x0168,
- 0x909c, 0x0003, 0x939e, 0x0003, 0x0140, 0x6003, 0x0001, 0x6106,
- 0x080c, 0x86d0, 0x080c, 0x8c37, 0x00e0, 0x901e, 0x6316, 0x631a,
- 0x2019, 0x0004, 0x080c, 0xd101, 0x00a0, 0x6014, 0x2048, 0xa880,
- 0xd0fc, 0x0d98, 0x909c, 0x0003, 0x939e, 0x0003, 0x0d70, 0x6003,
- 0x0003, 0x6106, 0x2c10, 0x080c, 0x1aa2, 0x080c, 0x8735, 0x080c,
- 0x8d06, 0x0005, 0x080c, 0x8b2b, 0x6114, 0x81ff, 0x0158, 0x0096,
- 0x2148, 0x080c, 0xd242, 0x0036, 0x2019, 0x0029, 0x080c, 0xd101,
- 0x003e, 0x009e, 0x080c, 0x9f42, 0x080c, 0x8c37, 0x0005, 0x080c,
- 0x8be7, 0x6114, 0x81ff, 0x0158, 0x0096, 0x2148, 0x080c, 0xd242,
- 0x0036, 0x2019, 0x0029, 0x080c, 0xd101, 0x003e, 0x009e, 0x080c,
- 0x9f42, 0x080c, 0x8d06, 0x0005, 0x9182, 0x0085, 0x0002, 0xcc0e,
- 0xcc0c, 0xcc0c, 0xcc1a, 0xcc0c, 0xcc0c, 0xcc0c, 0xcc0c, 0xcc0c,
- 0xcc0c, 0xcc0c, 0xcc0c, 0xcc0c, 0x080c, 0x0dc4, 0x6003, 0x000b,
- 0x6106, 0x080c, 0x86d0, 0x0126, 0x2091, 0x8000, 0x080c, 0x8c37,
- 0x012e, 0x0005, 0x0026, 0x00e6, 0x080c, 0xd1fc, 0x0118, 0x080c,
- 0x9f18, 0x0450, 0x2071, 0x0260, 0x7224, 0x6216, 0x2001, 0x180e,
- 0x2004, 0xd0e4, 0x0150, 0x6010, 0x00b6, 0x2058, 0xbca0, 0x00be,
- 0x2c00, 0x2011, 0x014e, 0x080c, 0xa224, 0x7220, 0x080c, 0xcf6a,
- 0x0118, 0x6007, 0x0086, 0x0040, 0x6007, 0x0087, 0x7224, 0x9296,
- 0xffff, 0x1110, 0x6007, 0x0086, 0x6003, 0x0001, 0x080c, 0x86d0,
- 0x080c, 0x8c37, 0x080c, 0x8d06, 0x00ee, 0x002e, 0x0005, 0x9186,
- 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0dc4, 0x908a,
- 0x0092, 0x1a0c, 0x0dc4, 0x9082, 0x0085, 0x00a2, 0x9186, 0x0027,
- 0x0130, 0x9186, 0x0014, 0x0118, 0x080c, 0x9fa3, 0x0050, 0x2001,
- 0x0007, 0x080c, 0x639e, 0x080c, 0x8b2b, 0x080c, 0x9f42, 0x080c,
- 0x8c37, 0x0005, 0xcc7f, 0xcc81, 0xcc81, 0xcc7f, 0xcc7f, 0xcc7f,
- 0xcc7f, 0xcc7f, 0xcc7f, 0xcc7f, 0xcc7f, 0xcc7f, 0xcc7f, 0x080c,
- 0x0dc4, 0x080c, 0x8b2b, 0x080c, 0x9f18, 0x080c, 0x8c37, 0x0005,
- 0x9182, 0x0085, 0x0a0c, 0x0dc4, 0x9182, 0x0092, 0x1a0c, 0x0dc4,
- 0x9182, 0x0085, 0x0002, 0xcca0, 0xcca0, 0xcca0, 0xcca2, 0xcca0,
- 0xcca0, 0xcca0, 0xcca0, 0xcca0, 0xcca0, 0xcca0, 0xcca0, 0xcca0,
- 0x080c, 0x0dc4, 0x0005, 0x9186, 0x0013, 0x0148, 0x9186, 0x0014,
- 0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0x9fa3, 0x0030, 0x080c,
- 0x8b2b, 0x080c, 0x9f42, 0x080c, 0x8c37, 0x0005, 0x0036, 0x2019,
- 0x000b, 0x0011, 0x003e, 0x0005, 0x6010, 0x0006, 0x0049, 0x000e,
- 0x6012, 0x6023, 0x0006, 0x6003, 0x0007, 0x601b, 0x0000, 0x0005,
- 0x0126, 0x0036, 0x2091, 0x8000, 0x0086, 0x2c40, 0x080c, 0x9a12,
- 0x008e, 0x1530, 0x0076, 0x2c38, 0x080c, 0x9abb, 0x007e, 0x1500,
- 0x6000, 0x9086, 0x0000, 0x01e0, 0x6020, 0x9086, 0x0007, 0x01c0,
- 0x0096, 0x601c, 0xd084, 0x0130, 0x080c, 0xbf10, 0x080c, 0x1950,
- 0x6023, 0x0007, 0x6014, 0x2048, 0x080c, 0xb955, 0x0110, 0x080c,
- 0xd101, 0x009e, 0x6017, 0x0000, 0x6023, 0x0007, 0x080c, 0xbf10,
- 0x003e, 0x012e, 0x0005, 0x00f6, 0x00c6, 0x00b6, 0x0036, 0x0156,
- 0x2079, 0x0260, 0x7938, 0x783c, 0x080c, 0x269f, 0x1904, 0xcd51,
- 0x0016, 0x00c6, 0x080c, 0x6411, 0x1904, 0xcd4f, 0x001e, 0x00c6,
- 0x080c, 0xbef8, 0x1130, 0xb8ac, 0x9005, 0x0118, 0x080c, 0x31bb,
- 0x0148, 0x2b10, 0x2160, 0x6010, 0x0006, 0x6212, 0x080c, 0xbeff,
- 0x000e, 0x6012, 0x00ce, 0x002e, 0x0026, 0x0016, 0x2019, 0x0029,
- 0x080c, 0x9b81, 0x080c, 0x8843, 0x0076, 0x903e, 0x080c, 0x8748,
- 0x007e, 0x001e, 0x0076, 0x903e, 0x080c, 0xce89, 0x007e, 0x0026,
- 0xba04, 0x9294, 0xff00, 0x8217, 0x9286, 0x0006, 0x0118, 0x9286,
- 0x0004, 0x1118, 0xbaa0, 0x080c, 0x3124, 0x002e, 0xbcac, 0x001e,
- 0x080c, 0x5f10, 0xbe12, 0xbd16, 0xbcae, 0x9006, 0x0010, 0x00ce,
- 0x001e, 0x015e, 0x003e, 0x00be, 0x00ce, 0x00fe, 0x0005, 0x00c6,
- 0x00d6, 0x00b6, 0x0016, 0x2009, 0x1823, 0x2104, 0x9086, 0x0074,
- 0x1904, 0xcdb0, 0x2069, 0x0260, 0x6944, 0x9182, 0x0100, 0x06e0,
- 0x6940, 0x9184, 0x8000, 0x0904, 0xcdad, 0x2001, 0x1959, 0x2004,
- 0x9005, 0x1140, 0x6010, 0x2058, 0xb8ac, 0x9005, 0x0118, 0x9184,
- 0x0800, 0x0598, 0x6948, 0x918a, 0x0001, 0x0648, 0x080c, 0xd2aa,
- 0x0118, 0x6978, 0xd1fc, 0x11b8, 0x2009, 0x0205, 0x200b, 0x0001,
- 0x693c, 0x81ff, 0x1198, 0x6944, 0x9182, 0x0100, 0x02a8, 0x6940,
- 0x81ff, 0x1178, 0x6948, 0x918a, 0x0001, 0x0288, 0x6950, 0x918a,
- 0x0001, 0x0298, 0x00d0, 0x6017, 0x0100, 0x00a0, 0x6017, 0x0300,
- 0x0088, 0x6017, 0x0500, 0x0070, 0x6017, 0x0700, 0x0058, 0x6017,
- 0x0900, 0x0040, 0x6017, 0x0b00, 0x0028, 0x6017, 0x0f00, 0x0010,
- 0x6017, 0x2d00, 0x9085, 0x0001, 0x0008, 0x9006, 0x001e, 0x00be,
- 0x00de, 0x00ce, 0x0005, 0x00c6, 0x00b6, 0x0026, 0x0036, 0x0156,
- 0x6210, 0x2258, 0xbb04, 0x9394, 0x00ff, 0x9286, 0x0006, 0x0180,
- 0x9286, 0x0004, 0x0168, 0x9394, 0xff00, 0x8217, 0x9286, 0x0006,
- 0x0138, 0x9286, 0x0004, 0x0120, 0x080c, 0x6420, 0x0804, 0xce18,
- 0x2011, 0x0276, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x000a,
- 0x080c, 0xad8d, 0x009e, 0x15a8, 0x2011, 0x027a, 0x20a9, 0x0004,
- 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, 0xad8d, 0x009e, 0x1548,
- 0x0046, 0x0016, 0xbaa0, 0x2220, 0x9006, 0x2009, 0x185f, 0x210c,
- 0xd1a4, 0x0138, 0x2009, 0x0029, 0x080c, 0xd156, 0xb800, 0xc0e5,
- 0xb802, 0x2019, 0x0029, 0x080c, 0x8843, 0x0076, 0x2039, 0x0000,
- 0x080c, 0x8748, 0x2c08, 0x080c, 0xce89, 0x007e, 0x2001, 0x0007,
- 0x080c, 0x639e, 0x2001, 0x0007, 0x080c, 0x6372, 0x001e, 0x004e,
- 0x9006, 0x015e, 0x003e, 0x002e, 0x00be, 0x00ce, 0x0005, 0x00d6,
- 0x2069, 0x026e, 0x6800, 0x9086, 0x0800, 0x0118, 0x6017, 0x0000,
- 0x0008, 0x9006, 0x00de, 0x0005, 0x00b6, 0x00f6, 0x0016, 0x0026,
- 0x0036, 0x0156, 0x2079, 0x026c, 0x7930, 0x7834, 0x080c, 0x269f,
- 0x11d0, 0x080c, 0x6411, 0x11b8, 0x2011, 0x0270, 0x20a9, 0x0004,
- 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xad8d, 0x009e, 0x1158,
- 0x2011, 0x0274, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006,
- 0x080c, 0xad8d, 0x009e, 0x015e, 0x003e, 0x002e, 0x001e, 0x00fe,
- 0x00be, 0x0005, 0x00b6, 0x0006, 0x0016, 0x0026, 0x0036, 0x0156,
- 0x2011, 0x0263, 0x2204, 0x8211, 0x220c, 0x080c, 0x269f, 0x11d0,
- 0x080c, 0x6411, 0x11b8, 0x2011, 0x0276, 0x20a9, 0x0004, 0x0096,
- 0x2b48, 0x2019, 0x000a, 0x080c, 0xad8d, 0x009e, 0x1158, 0x2011,
- 0x027a, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c,
- 0xad8d, 0x009e, 0x015e, 0x003e, 0x002e, 0x001e, 0x000e, 0x00be,
- 0x0005, 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066, 0x0056, 0x0046,
- 0x0026, 0x0126, 0x2091, 0x8000, 0x2740, 0x2029, 0x19cd, 0x252c,
- 0x2021, 0x19d3, 0x2424, 0x2061, 0x1cc8, 0x2071, 0x1800, 0x7650,
- 0x7070, 0x81ff, 0x0150, 0x0006, 0x9186, 0x1a92, 0x000e, 0x0128,
- 0x8001, 0x9602, 0x1a04, 0xcf23, 0x0018, 0x9606, 0x0904, 0xcf23,
- 0x2100, 0x9c06, 0x0904, 0xcf1a, 0x6720, 0x9786, 0x0007, 0x0904,
- 0xcf1a, 0x080c, 0xd197, 0x1904, 0xcf1a, 0x080c, 0xd2c8, 0x0904,
- 0xcf1a, 0x080c, 0xd187, 0x0904, 0xcf1a, 0x6720, 0x9786, 0x0001,
- 0x1148, 0x080c, 0x31bb, 0x0904, 0xcf3e, 0x6004, 0x9086, 0x0000,
- 0x1904, 0xcf3e, 0x9786, 0x0004, 0x0904, 0xcf3e, 0x2500, 0x9c06,
- 0x0904, 0xcf1a, 0x2400, 0x9c06, 0x05e8, 0x88ff, 0x0118, 0x6024,
- 0x9906, 0x15c0, 0x0096, 0x6000, 0x9086, 0x0004, 0x1120, 0x0016,
- 0x080c, 0x1950, 0x001e, 0x9786, 0x000a, 0x0148, 0x080c, 0xbb56,
- 0x1130, 0x080c, 0xa717, 0x009e, 0x080c, 0x9f42, 0x0418, 0x6014,
- 0x2048, 0x080c, 0xb955, 0x01d8, 0x9786, 0x0003, 0x1570, 0xa86b,
- 0x0103, 0xa880, 0xd0cc, 0x0130, 0x0096, 0xa87c, 0x2048, 0x080c,
- 0x0fb3, 0x009e, 0xab7e, 0xa87b, 0x0000, 0x080c, 0xd242, 0x0016,
- 0x080c, 0xbc3f, 0x080c, 0x6b11, 0x001e, 0x080c, 0xbb39, 0x009e,
- 0x080c, 0x9f42, 0x9ce0, 0x000c, 0x2001, 0x1819, 0x2004, 0x9c02,
- 0x1210, 0x0804, 0xce9d, 0x012e, 0x002e, 0x004e, 0x005e, 0x006e,
- 0x007e, 0x008e, 0x00ce, 0x00ee, 0x0005, 0x9786, 0x0006, 0x1150,
- 0x9386, 0x0005, 0x0128, 0x080c, 0xd242, 0x080c, 0xd101, 0x08f8,
- 0x009e, 0x0c00, 0x9786, 0x000a, 0x0968, 0x0808, 0x81ff, 0x09d0,
- 0x9180, 0x0001, 0x2004, 0x9086, 0x0018, 0x0130, 0x9180, 0x0001,
- 0x2004, 0x9086, 0x002d, 0x1970, 0x6000, 0x9086, 0x0002, 0x1950,
- 0x080c, 0xbb45, 0x0130, 0x080c, 0xbb56, 0x1920, 0x080c, 0xa717,
- 0x0038, 0x080c, 0x308f, 0x080c, 0xbb56, 0x1110, 0x080c, 0xa717,
- 0x080c, 0x9f42, 0x0804, 0xcf1a, 0xa868, 0x9084, 0x00ff, 0x9086,
- 0x0039, 0x0005, 0x00c6, 0x00e6, 0x0016, 0x2c08, 0x2170, 0x9006,
- 0x080c, 0xd128, 0x001e, 0x0120, 0x6020, 0x9084, 0x000f, 0x001b,
- 0x00ee, 0x00ce, 0x0005, 0xcf89, 0xcf89, 0xcf89, 0xcf89, 0xcf89,
- 0xcf89, 0xcf8b, 0xcf89, 0xcf89, 0xcf89, 0xcfb4, 0x9f42, 0x9f42,
- 0xcf89, 0x9006, 0x0005, 0x0036, 0x0046, 0x0016, 0x7010, 0x00b6,
- 0x2058, 0xbca0, 0x00be, 0x2c00, 0x2009, 0x0020, 0x080c, 0xd156,
- 0x001e, 0x004e, 0x2019, 0x0002, 0x080c, 0xccc8, 0x003e, 0x9085,
- 0x0001, 0x0005, 0x0096, 0x080c, 0xb955, 0x0140, 0x6014, 0x904d,
- 0x080c, 0xb5c5, 0x687f, 0x0005, 0x080c, 0x6b1d, 0x009e, 0x080c,
- 0x9f42, 0x9085, 0x0001, 0x0005, 0x0019, 0x9085, 0x0001, 0x0005,
- 0x6000, 0x908a, 0x0010, 0x1a0c, 0x0dc4, 0x000b, 0x0005, 0xcfcf,
- 0xcfcf, 0xcfe6, 0xcfd6, 0xcff5, 0xcfcf, 0xcfcf, 0xcfd1, 0xcfcf,
- 0xcfcf, 0xcfcf, 0xcfcf, 0xcfcf, 0xcfcf, 0xcfcf, 0xcfcf, 0x080c,
- 0x0dc4, 0x080c, 0x9f42, 0x9085, 0x0001, 0x0005, 0x0036, 0x00e6,
- 0x2071, 0x19c4, 0x703c, 0x9c06, 0x1128, 0x2019, 0x0001, 0x080c,
- 0x9964, 0x0010, 0x080c, 0x9b40, 0x00ee, 0x003e, 0x0096, 0x00d6,
- 0x6014, 0x2048, 0xa87f, 0x0005, 0x080c, 0x6b1d, 0x080c, 0x9f42,
- 0x00de, 0x009e, 0x9085, 0x0001, 0x0005, 0x601c, 0xd084, 0x190c,
- 0x1950, 0x0c60, 0x2001, 0x0001, 0x080c, 0x635e, 0x0156, 0x0016,
- 0x0026, 0x0036, 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011, 0x0276,
- 0x080c, 0xad79, 0x003e, 0x002e, 0x001e, 0x015e, 0x9005, 0x0005,
- 0x00f6, 0x00e6, 0x00c6, 0x0086, 0x0076, 0x0066, 0x00b6, 0x0126,
- 0x2091, 0x8000, 0x2740, 0x2061, 0x1cc8, 0x2079, 0x0001, 0x8fff,
- 0x0904, 0xd06a, 0x2071, 0x1800, 0x7650, 0x7070, 0x8001, 0x9602,
- 0x1a04, 0xd06a, 0x88ff, 0x0120, 0x2800, 0x9c06, 0x1590, 0x2078,
- 0x080c, 0xd187, 0x0570, 0x2400, 0x9c06, 0x0558, 0x6720, 0x9786,
- 0x0006, 0x1538, 0x9786, 0x0007, 0x0520, 0x88ff, 0x1150, 0xd58c,
- 0x1118, 0x6010, 0x9b06, 0x11e8, 0xd584, 0x0118, 0x6024, 0x9106,
- 0x11c0, 0x0096, 0x601c, 0xd084, 0x0130, 0x080c, 0xbf10, 0x080c,
- 0x1950, 0x6023, 0x0007, 0x6014, 0x2048, 0x080c, 0xb955, 0x0120,
- 0x0046, 0x080c, 0xd101, 0x004e, 0x009e, 0x080c, 0x9f42, 0x88ff,
- 0x1198, 0x9ce0, 0x000c, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1210,
- 0x0804, 0xd01f, 0x9006, 0x012e, 0x00be, 0x006e, 0x007e, 0x008e,
+ 0x6007, 0x0043, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x0828, 0x6868,
+ 0x602e, 0x686c, 0x6032, 0x6017, 0xf200, 0x6003, 0x0001, 0x6007,
+ 0x0041, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x0804, 0xd38c, 0x2001,
+ 0x180e, 0x2004, 0xd0ec, 0x0120, 0x2011, 0x8049, 0x080c, 0x4b6d,
+ 0x6017, 0xf300, 0x0010, 0x6017, 0xf100, 0x6003, 0x0001, 0x6007,
+ 0x0041, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x0804, 0xd38c, 0x6017,
+ 0xf500, 0x0c98, 0x6017, 0xf600, 0x0804, 0xd3ac, 0x6017, 0xf200,
+ 0x0804, 0xd3ac, 0xa86b, 0x0146, 0xa86f, 0x0000, 0x6008, 0xa88a,
+ 0x2c00, 0xa87e, 0x7044, 0x9084, 0x0003, 0x9080, 0xd394, 0x2005,
+ 0xa882, 0x2928, 0x6010, 0x2058, 0xb8a0, 0xa87a, 0xb828, 0xa88e,
+ 0xb82c, 0xa892, 0xb830, 0xa896, 0xb834, 0xa89a, 0xa887, 0x003d,
+ 0x2009, 0x0205, 0x2104, 0x9085, 0x0080, 0x200a, 0x20e1, 0x0000,
+ 0x2011, 0x0210, 0x2214, 0x9294, 0x0fff, 0xaaa6, 0x9282, 0x0111,
+ 0x1a0c, 0x0dc3, 0x8210, 0x821c, 0x2001, 0x026c, 0x2098, 0xa860,
+ 0x20e8, 0xa85c, 0x9080, 0x002a, 0x20a0, 0x2011, 0xd476, 0x2041,
+ 0x0001, 0x223d, 0x9784, 0x00ff, 0x9322, 0x1208, 0x2300, 0x20a8,
+ 0x4003, 0x931a, 0x0530, 0x8210, 0xd7fc, 0x1130, 0x8d68, 0x2d0a,
+ 0x2001, 0x0260, 0x2098, 0x0c68, 0x2950, 0x080c, 0x1026, 0x0170,
+ 0x2900, 0xb002, 0xa86b, 0x0147, 0xa86f, 0x0000, 0xa860, 0x20e8,
+ 0xa85c, 0x9080, 0x001c, 0x20a0, 0x8840, 0x08d8, 0x2548, 0xa800,
+ 0x902d, 0x0118, 0x080c, 0x103f, 0x0cc8, 0x080c, 0x103f, 0x0804,
+ 0xd398, 0x2548, 0x8847, 0x9885, 0x0046, 0xa86a, 0x2009, 0x0205,
+ 0x200b, 0x0000, 0x080c, 0xdcc3, 0x0804, 0xd38c, 0x8010, 0x0004,
+ 0x801a, 0x0006, 0x8018, 0x0008, 0x8016, 0x000a, 0x8014, 0x9186,
+ 0x0013, 0x1160, 0x6004, 0x908a, 0x0054, 0x1a0c, 0x0dc3, 0x9082,
+ 0x0040, 0x0a0c, 0x0dc3, 0x2008, 0x0804, 0xd505, 0x9186, 0x0051,
+ 0x0108, 0x0048, 0x080c, 0xc8f4, 0x0500, 0x6000, 0x9086, 0x0002,
+ 0x11e0, 0x0804, 0xd54e, 0x9186, 0x0027, 0x0190, 0x9186, 0x0048,
+ 0x0128, 0x9186, 0x0014, 0x0160, 0x190c, 0x0dc3, 0x080c, 0xc8f4,
+ 0x0160, 0x6000, 0x9086, 0x0004, 0x190c, 0x0dc3, 0x0804, 0xd631,
+ 0x6004, 0x9082, 0x0040, 0x2008, 0x001a, 0x080c, 0xa434, 0x0005,
+ 0xd4cc, 0xd4ce, 0xd4ce, 0xd4f5, 0xd4cc, 0xd4cc, 0xd4cc, 0xd4cc,
+ 0xd4cc, 0xd4cc, 0xd4cc, 0xd4cc, 0xd4cc, 0xd4cc, 0xd4cc, 0xd4cc,
+ 0xd4cc, 0xd4cc, 0xd4cc, 0xd4cc, 0x080c, 0x0dc3, 0x080c, 0x8d2c,
+ 0x080c, 0x8e38, 0x0036, 0x0096, 0x6014, 0x904d, 0x01d8, 0x080c,
+ 0xc1cd, 0x01c0, 0x6003, 0x0002, 0x6010, 0x00b6, 0x2058, 0xb800,
+ 0x00be, 0xd0bc, 0x1178, 0x2019, 0x0004, 0x080c, 0xdcc3, 0x6017,
+ 0x0000, 0x6018, 0x9005, 0x1120, 0x2001, 0x1963, 0x2004, 0x601a,
+ 0x6003, 0x0007, 0x009e, 0x003e, 0x0005, 0x0096, 0x080c, 0x8d2c,
+ 0x080c, 0x8e38, 0x080c, 0xc1cd, 0x0120, 0x6014, 0x2048, 0x080c,
+ 0x103f, 0x080c, 0xa3cf, 0x009e, 0x0005, 0x0002, 0xd51a, 0xd531,
+ 0xd51c, 0xd548, 0xd51a, 0xd51a, 0xd51a, 0xd51a, 0xd51a, 0xd51a,
+ 0xd51a, 0xd51a, 0xd51a, 0xd51a, 0xd51a, 0xd51a, 0xd51a, 0xd51a,
+ 0xd51a, 0xd51a, 0x080c, 0x0dc3, 0x0096, 0x080c, 0x8d2c, 0x6014,
+ 0x2048, 0xa880, 0xd0b4, 0x0138, 0x6003, 0x0007, 0x2009, 0x0043,
+ 0x080c, 0xa419, 0x0010, 0x6003, 0x0004, 0x080c, 0x8e38, 0x009e,
+ 0x0005, 0x080c, 0x8d2c, 0x080c, 0xc1cd, 0x0138, 0x6114, 0x0096,
+ 0x2148, 0xa980, 0x009e, 0xd1ec, 0x1138, 0x080c, 0x86d8, 0x080c,
+ 0xa39d, 0x080c, 0x8e38, 0x0005, 0x080c, 0xdf15, 0x0db0, 0x0cc8,
+ 0x080c, 0x8d2c, 0x2009, 0x0041, 0x0804, 0xd6b9, 0x9182, 0x0040,
+ 0x0002, 0xd565, 0xd567, 0xd565, 0xd565, 0xd565, 0xd565, 0xd565,
+ 0xd565, 0xd565, 0xd565, 0xd565, 0xd565, 0xd565, 0xd565, 0xd565,
+ 0xd565, 0xd565, 0xd568, 0xd565, 0xd565, 0x080c, 0x0dc3, 0x0005,
+ 0x00d6, 0x080c, 0x86d8, 0x00de, 0x080c, 0xdf7c, 0x080c, 0xa39d,
+ 0x0005, 0x9182, 0x0040, 0x0002, 0xd588, 0xd588, 0xd588, 0xd588,
+ 0xd588, 0xd588, 0xd588, 0xd588, 0xd588, 0xd58a, 0xd5f9, 0xd588,
+ 0xd588, 0xd588, 0xd588, 0xd5f9, 0xd588, 0xd588, 0xd588, 0xd588,
+ 0x080c, 0x0dc3, 0x2001, 0x0105, 0x2004, 0x9084, 0x1800, 0x01c8,
+ 0x2001, 0x0132, 0x200c, 0x2001, 0x0131, 0x2004, 0x9105, 0x1904,
+ 0xd5f9, 0x2009, 0x180c, 0x2104, 0xd0d4, 0x0904, 0xd5f9, 0xc0d4,
+ 0x200a, 0x2009, 0x0105, 0x2104, 0x9084, 0xe7fd, 0x9085, 0x0010,
+ 0x200a, 0x2001, 0x187e, 0x2004, 0xd0e4, 0x1528, 0x603b, 0x0000,
+ 0x080c, 0x8de8, 0x6014, 0x0096, 0x2048, 0xa880, 0xd0fc, 0x0188,
+ 0x908c, 0x0003, 0x918e, 0x0002, 0x0508, 0x2001, 0x180c, 0x2004,
+ 0xd0d4, 0x11e0, 0x080c, 0x8f0e, 0x2009, 0x0041, 0x009e, 0x0804,
+ 0xd6b9, 0x080c, 0x8f0e, 0x6003, 0x0007, 0x601b, 0x0000, 0x080c,
+ 0x86d8, 0x009e, 0x0005, 0x2001, 0x0100, 0x2004, 0x9082, 0x0005,
+ 0x0aa8, 0x2001, 0x011f, 0x2004, 0x603a, 0x0890, 0x2001, 0x180c,
+ 0x200c, 0xc1d4, 0x2102, 0xd1cc, 0x0110, 0x080c, 0x2b10, 0x080c,
+ 0x8f0e, 0x6014, 0x2048, 0xa980, 0xd1ec, 0x1130, 0x080c, 0x86d8,
+ 0x080c, 0xa39d, 0x009e, 0x0005, 0x080c, 0xdf15, 0x0db8, 0x009e,
+ 0x0005, 0x2001, 0x180c, 0x200c, 0xc1d4, 0x2102, 0x0036, 0x080c,
+ 0x8de8, 0x080c, 0x8f0e, 0x6014, 0x0096, 0x2048, 0x6010, 0x00b6,
+ 0x2058, 0xb800, 0x00be, 0xd0bc, 0x0188, 0xa880, 0x9084, 0x0003,
+ 0x9086, 0x0002, 0x0140, 0xa8b0, 0x6330, 0x931a, 0x6332, 0xa8b4,
+ 0x632c, 0x931b, 0x632e, 0x6003, 0x0002, 0x0080, 0x2019, 0x0004,
+ 0x080c, 0xdcc3, 0x6018, 0x9005, 0x1128, 0x2001, 0x1963, 0x2004,
+ 0x8003, 0x601a, 0x6017, 0x0000, 0x6003, 0x0007, 0x009e, 0x003e,
+ 0x0005, 0x9182, 0x0040, 0x0002, 0xd648, 0xd648, 0xd648, 0xd648,
+ 0xd648, 0xd648, 0xd648, 0xd648, 0xd64a, 0xd648, 0xd648, 0xd648,
+ 0xd648, 0xd648, 0xd648, 0xd648, 0xd648, 0xd648, 0xd648, 0xd695,
+ 0x080c, 0x0dc3, 0x6014, 0x0096, 0x2048, 0xa834, 0xaa38, 0x6110,
+ 0x00b6, 0x2158, 0xb900, 0x00be, 0xd1bc, 0x1190, 0x920d, 0x1518,
+ 0xa880, 0xd0fc, 0x0128, 0x2009, 0x0041, 0x009e, 0x0804, 0xd6b9,
+ 0x6003, 0x0007, 0x601b, 0x0000, 0x080c, 0x86d8, 0x009e, 0x0005,
+ 0x6124, 0xd1f4, 0x1d58, 0x0006, 0x0046, 0xacb0, 0x9422, 0xa9b4,
+ 0x2200, 0x910b, 0x6030, 0x9420, 0x6432, 0x602c, 0x9109, 0x612e,
+ 0x004e, 0x000e, 0x08d8, 0x6110, 0x00b6, 0x2158, 0xb900, 0x00be,
+ 0xd1bc, 0x1178, 0x2009, 0x180e, 0x210c, 0xd19c, 0x0118, 0x6003,
+ 0x0007, 0x0010, 0x6003, 0x0006, 0x00e9, 0x080c, 0x86da, 0x009e,
+ 0x0005, 0x6003, 0x0002, 0x009e, 0x0005, 0x6024, 0xd0f4, 0x0128,
+ 0x080c, 0x155f, 0x1904, 0xd64a, 0x0005, 0x6014, 0x0096, 0x2048,
+ 0xa834, 0xa938, 0x009e, 0x9105, 0x1120, 0x080c, 0x155f, 0x1904,
+ 0xd64a, 0x0005, 0xd2fc, 0x0140, 0x8002, 0x8000, 0x8212, 0x9291,
+ 0x0000, 0x2009, 0x0009, 0x0010, 0x2009, 0x0015, 0xaa9e, 0xa89a,
+ 0x0005, 0x9182, 0x0040, 0x0208, 0x0062, 0x9186, 0x0013, 0x0120,
+ 0x9186, 0x0014, 0x190c, 0x0dc3, 0x6024, 0xd0dc, 0x090c, 0x0dc3,
+ 0x0005, 0xd6dd, 0xd6e9, 0xd6f5, 0xd701, 0xd6dd, 0xd6dd, 0xd6dd,
+ 0xd6dd, 0xd6e4, 0xd6df, 0xd6df, 0xd6dd, 0xd6dd, 0xd6dd, 0xd6dd,
+ 0xd6df, 0xd6dd, 0xd6df, 0xd6dd, 0xd6e4, 0x080c, 0x0dc3, 0x6024,
+ 0xd0dc, 0x090c, 0x0dc3, 0x0005, 0x6014, 0x9005, 0x190c, 0x0dc3,
+ 0x0005, 0x6003, 0x0001, 0x6106, 0x080c, 0x88a1, 0x0126, 0x2091,
+ 0x8000, 0x080c, 0x8e38, 0x012e, 0x0005, 0x6003, 0x0001, 0x6106,
+ 0x080c, 0x88a1, 0x0126, 0x2091, 0x8000, 0x080c, 0x8e38, 0x012e,
+ 0x0005, 0x6003, 0x0003, 0x6106, 0x2c10, 0x080c, 0x1aea, 0x0126,
+ 0x2091, 0x8000, 0x080c, 0x8906, 0x080c, 0x8f0e, 0x012e, 0x0005,
+ 0x0126, 0x2091, 0x8000, 0x0036, 0x0096, 0x9182, 0x0040, 0x0023,
+ 0x009e, 0x003e, 0x012e, 0x0005, 0xd730, 0xd732, 0xd744, 0xd75e,
+ 0xd730, 0xd730, 0xd730, 0xd730, 0xd730, 0xd730, 0xd730, 0xd730,
+ 0xd730, 0xd730, 0xd730, 0xd730, 0xd730, 0xd730, 0xd730, 0xd730,
+ 0x080c, 0x0dc3, 0x6014, 0x2048, 0xa880, 0xd0fc, 0x01f8, 0x909c,
+ 0x0003, 0x939e, 0x0003, 0x01d0, 0x6003, 0x0001, 0x6106, 0x080c,
+ 0x88a1, 0x080c, 0x8e38, 0x0470, 0x6014, 0x2048, 0xa880, 0xd0fc,
+ 0x0168, 0x909c, 0x0003, 0x939e, 0x0003, 0x0140, 0x6003, 0x0001,
+ 0x6106, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x00e0, 0x901e, 0x6316,
+ 0x631a, 0x2019, 0x0004, 0x080c, 0xdcc3, 0x00a0, 0x6014, 0x2048,
+ 0xa880, 0xd0fc, 0x0d98, 0x909c, 0x0003, 0x939e, 0x0003, 0x0d70,
+ 0x6003, 0x0003, 0x6106, 0x2c10, 0x080c, 0x1aea, 0x080c, 0x8906,
+ 0x080c, 0x8f0e, 0x0005, 0x080c, 0x8d2c, 0x6114, 0x81ff, 0x0158,
+ 0x0096, 0x2148, 0x080c, 0xdfcf, 0x0036, 0x2019, 0x0029, 0x080c,
+ 0xdcc3, 0x003e, 0x009e, 0x080c, 0xa3cf, 0x080c, 0x8e38, 0x0005,
+ 0x080c, 0x8de8, 0x6114, 0x81ff, 0x0158, 0x0096, 0x2148, 0x080c,
+ 0xdfcf, 0x0036, 0x2019, 0x0029, 0x080c, 0xdcc3, 0x003e, 0x009e,
+ 0x080c, 0xa3cf, 0x080c, 0x8f0e, 0x0005, 0x9182, 0x0085, 0x0002,
+ 0xd7af, 0xd7ad, 0xd7ad, 0xd7bb, 0xd7ad, 0xd7ad, 0xd7ad, 0xd7ad,
+ 0xd7ad, 0xd7ad, 0xd7ad, 0xd7ad, 0xd7ad, 0x080c, 0x0dc3, 0x6003,
+ 0x000b, 0x6106, 0x080c, 0x88a1, 0x0126, 0x2091, 0x8000, 0x080c,
+ 0x8e38, 0x012e, 0x0005, 0x0026, 0x00e6, 0x080c, 0xdf0c, 0x0118,
+ 0x080c, 0xa39d, 0x0450, 0x2071, 0x0260, 0x7224, 0x6216, 0x2001,
+ 0x180e, 0x2004, 0xd0e4, 0x0150, 0x6010, 0x00b6, 0x2058, 0xbca0,
+ 0x00be, 0x2c00, 0x2011, 0x014e, 0x080c, 0xa6b5, 0x7220, 0x080c,
+ 0xdb18, 0x0118, 0x6007, 0x0086, 0x0040, 0x6007, 0x0087, 0x7224,
+ 0x9296, 0xffff, 0x1110, 0x6007, 0x0086, 0x6003, 0x0001, 0x080c,
+ 0x88a1, 0x080c, 0x8e38, 0x080c, 0x8f0e, 0x00ee, 0x002e, 0x0005,
+ 0x9186, 0x0013, 0x1160, 0x6004, 0x908a, 0x0085, 0x0a0c, 0x0dc3,
+ 0x908a, 0x0092, 0x1a0c, 0x0dc3, 0x9082, 0x0085, 0x00a2, 0x9186,
+ 0x0027, 0x0130, 0x9186, 0x0014, 0x0118, 0x080c, 0xa434, 0x0050,
+ 0x2001, 0x0007, 0x080c, 0x6474, 0x080c, 0x8d2c, 0x080c, 0xa3cf,
+ 0x080c, 0x8e38, 0x0005, 0xd820, 0xd822, 0xd822, 0xd820, 0xd820,
+ 0xd820, 0xd820, 0xd820, 0xd820, 0xd820, 0xd820, 0xd820, 0xd820,
+ 0x080c, 0x0dc3, 0x080c, 0x8d2c, 0x080c, 0xa3cf, 0x080c, 0x8e38,
+ 0x0005, 0x9182, 0x0085, 0x0a0c, 0x0dc3, 0x9182, 0x0092, 0x1a0c,
+ 0x0dc3, 0x9182, 0x0085, 0x0002, 0xd841, 0xd841, 0xd841, 0xd843,
+ 0xd841, 0xd841, 0xd841, 0xd841, 0xd841, 0xd841, 0xd841, 0xd841,
+ 0xd841, 0x080c, 0x0dc3, 0x0005, 0x9186, 0x0013, 0x0148, 0x9186,
+ 0x0014, 0x0130, 0x9186, 0x0027, 0x0118, 0x080c, 0xa434, 0x0030,
+ 0x080c, 0x8d2c, 0x080c, 0xa3cf, 0x080c, 0x8e38, 0x0005, 0x0036,
+ 0x080c, 0xdf7c, 0x6043, 0x0000, 0x2019, 0x000b, 0x0011, 0x003e,
+ 0x0005, 0x6010, 0x0006, 0x0059, 0x000e, 0x6012, 0x6023, 0x0006,
+ 0x6003, 0x0007, 0x601b, 0x0000, 0x6043, 0x0000, 0x0005, 0x0126,
+ 0x0036, 0x2091, 0x8000, 0x0086, 0x2c40, 0x0096, 0x904e, 0x080c,
+ 0x9ce3, 0x009e, 0x008e, 0x1550, 0x0076, 0x2c38, 0x080c, 0x9d8e,
+ 0x007e, 0x1520, 0x6000, 0x9086, 0x0000, 0x0500, 0x6020, 0x9086,
+ 0x0007, 0x01e0, 0x0096, 0x601c, 0xd084, 0x0140, 0x080c, 0xdf7c,
+ 0x080c, 0xc8e6, 0x080c, 0x1998, 0x6023, 0x0007, 0x6014, 0x2048,
+ 0x080c, 0xc1cd, 0x0110, 0x080c, 0xdcc3, 0x009e, 0x6017, 0x0000,
+ 0x080c, 0xdf7c, 0x6023, 0x0007, 0x080c, 0xc8e6, 0x003e, 0x012e,
+ 0x0005, 0x00f6, 0x00c6, 0x00b6, 0x0036, 0x0156, 0x2079, 0x0260,
+ 0x7938, 0x783c, 0x080c, 0x2708, 0x1904, 0xd8ff, 0x0016, 0x00c6,
+ 0x080c, 0x64fc, 0x1904, 0xd8fd, 0x001e, 0x00c6, 0x080c, 0xc8ce,
+ 0x1130, 0xb8b0, 0x9005, 0x0118, 0x080c, 0x3257, 0x0148, 0x2b10,
+ 0x2160, 0x6010, 0x0006, 0x6212, 0x080c, 0xc8d5, 0x000e, 0x6012,
+ 0x00ce, 0x002e, 0x0026, 0x0016, 0x2019, 0x0029, 0x080c, 0x9e54,
+ 0x080c, 0x8a2b, 0x0076, 0x903e, 0x080c, 0x8919, 0x007e, 0x001e,
+ 0x0076, 0x903e, 0x080c, 0xda37, 0x007e, 0x0026, 0xba04, 0x9294,
+ 0xff00, 0x8217, 0x9286, 0x0006, 0x0118, 0x9286, 0x0004, 0x1118,
+ 0xbaa0, 0x080c, 0x31c0, 0x002e, 0xbcb0, 0x001e, 0x080c, 0x5fcd,
+ 0xbe12, 0xbd16, 0xbcb2, 0x9006, 0x0010, 0x00ce, 0x001e, 0x015e,
+ 0x003e, 0x00be, 0x00ce, 0x00fe, 0x0005, 0x00c6, 0x00d6, 0x00b6,
+ 0x0016, 0x2009, 0x1823, 0x2104, 0x9086, 0x0074, 0x1904, 0xd95e,
+ 0x2069, 0x0260, 0x6944, 0x9182, 0x0100, 0x06e0, 0x6940, 0x9184,
+ 0x8000, 0x0904, 0xd95b, 0x2001, 0x1958, 0x2004, 0x9005, 0x1140,
+ 0x6010, 0x2058, 0xb8b0, 0x9005, 0x0118, 0x9184, 0x0800, 0x0598,
+ 0x6948, 0x918a, 0x0001, 0x0648, 0x080c, 0xe037, 0x0118, 0x6978,
+ 0xd1fc, 0x11b8, 0x2009, 0x0205, 0x200b, 0x0001, 0x693c, 0x81ff,
+ 0x1198, 0x6944, 0x9182, 0x0100, 0x02a8, 0x6940, 0x81ff, 0x1178,
+ 0x6948, 0x918a, 0x0001, 0x0288, 0x6950, 0x918a, 0x0001, 0x0298,
+ 0x00d0, 0x6017, 0x0100, 0x00a0, 0x6017, 0x0300, 0x0088, 0x6017,
+ 0x0500, 0x0070, 0x6017, 0x0700, 0x0058, 0x6017, 0x0900, 0x0040,
+ 0x6017, 0x0b00, 0x0028, 0x6017, 0x0f00, 0x0010, 0x6017, 0x2d00,
+ 0x9085, 0x0001, 0x0008, 0x9006, 0x001e, 0x00be, 0x00de, 0x00ce,
+ 0x0005, 0x00c6, 0x00b6, 0x0026, 0x0036, 0x0156, 0x6210, 0x2258,
+ 0xbb04, 0x9394, 0x00ff, 0x9286, 0x0006, 0x0180, 0x9286, 0x0004,
+ 0x0168, 0x9394, 0xff00, 0x8217, 0x9286, 0x0006, 0x0138, 0x9286,
+ 0x0004, 0x0120, 0x080c, 0x650b, 0x0804, 0xd9c6, 0x2011, 0x0276,
+ 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x000a, 0x080c, 0xb448,
+ 0x009e, 0x15a8, 0x2011, 0x027a, 0x20a9, 0x0004, 0x0096, 0x2b48,
+ 0x2019, 0x0006, 0x080c, 0xb448, 0x009e, 0x1548, 0x0046, 0x0016,
+ 0xbaa0, 0x2220, 0x9006, 0x2009, 0x185f, 0x210c, 0xd1a4, 0x0138,
+ 0x2009, 0x0029, 0x080c, 0xdd18, 0xb800, 0xc0e5, 0xb802, 0x2019,
+ 0x0029, 0x080c, 0x8a2b, 0x0076, 0x2039, 0x0000, 0x080c, 0x8919,
+ 0x2c08, 0x080c, 0xda37, 0x007e, 0x2001, 0x0007, 0x080c, 0x6474,
+ 0x2001, 0x0007, 0x080c, 0x6448, 0x001e, 0x004e, 0x9006, 0x015e,
+ 0x003e, 0x002e, 0x00be, 0x00ce, 0x0005, 0x00d6, 0x2069, 0x026e,
+ 0x6800, 0x9086, 0x0800, 0x0118, 0x6017, 0x0000, 0x0008, 0x9006,
+ 0x00de, 0x0005, 0x00b6, 0x00f6, 0x0016, 0x0026, 0x0036, 0x0156,
+ 0x2079, 0x026c, 0x7930, 0x7834, 0x080c, 0x2708, 0x11d0, 0x080c,
+ 0x64fc, 0x11b8, 0x2011, 0x0270, 0x20a9, 0x0004, 0x0096, 0x2b48,
+ 0x2019, 0x000a, 0x080c, 0xb448, 0x009e, 0x1158, 0x2011, 0x0274,
+ 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, 0xb448,
+ 0x009e, 0x015e, 0x003e, 0x002e, 0x001e, 0x00fe, 0x00be, 0x0005,
+ 0x00b6, 0x0006, 0x0016, 0x0026, 0x0036, 0x0156, 0x2011, 0x0263,
+ 0x2204, 0x8211, 0x220c, 0x080c, 0x2708, 0x11d0, 0x080c, 0x64fc,
+ 0x11b8, 0x2011, 0x0276, 0x20a9, 0x0004, 0x0096, 0x2b48, 0x2019,
+ 0x000a, 0x080c, 0xb448, 0x009e, 0x1158, 0x2011, 0x027a, 0x20a9,
+ 0x0004, 0x0096, 0x2b48, 0x2019, 0x0006, 0x080c, 0xb448, 0x009e,
+ 0x015e, 0x003e, 0x002e, 0x001e, 0x000e, 0x00be, 0x0005, 0x00e6,
+ 0x00c6, 0x0086, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026, 0x0126,
+ 0x2091, 0x8000, 0x2740, 0x2029, 0x19cd, 0x252c, 0x2021, 0x19d3,
+ 0x2424, 0x2061, 0x1cd0, 0x2071, 0x1800, 0x7650, 0x7070, 0x81ff,
+ 0x0150, 0x0006, 0x9186, 0x1a92, 0x000e, 0x0128, 0x8001, 0x9602,
+ 0x1a04, 0xdad1, 0x0018, 0x9606, 0x0904, 0xdad1, 0x2100, 0x9c06,
+ 0x0904, 0xdac8, 0x6720, 0x9786, 0x0007, 0x0904, 0xdac8, 0x080c,
+ 0xdd59, 0x1904, 0xdac8, 0x080c, 0xe055, 0x0904, 0xdac8, 0x080c,
+ 0xdd49, 0x0904, 0xdac8, 0x6720, 0x9786, 0x0001, 0x1148, 0x080c,
+ 0x3257, 0x0904, 0xdaec, 0x6004, 0x9086, 0x0000, 0x1904, 0xdaec,
+ 0x9786, 0x0004, 0x0904, 0xdaec, 0x2500, 0x9c06, 0x0904, 0xdac8,
+ 0x2400, 0x9c06, 0x05e8, 0x88ff, 0x0118, 0x6054, 0x9906, 0x15c0,
+ 0x0096, 0x6000, 0x9086, 0x0004, 0x1120, 0x0016, 0x080c, 0x1998,
+ 0x001e, 0x9786, 0x000a, 0x0148, 0x080c, 0xc3d1, 0x1130, 0x080c,
+ 0xadb3, 0x009e, 0x080c, 0xa3cf, 0x0418, 0x6014, 0x2048, 0x080c,
+ 0xc1cd, 0x01d8, 0x9786, 0x0003, 0x1570, 0xa86b, 0x0103, 0xa880,
+ 0xd0cc, 0x0130, 0x0096, 0xa87c, 0x2048, 0x080c, 0x0fbf, 0x009e,
+ 0xab7e, 0xa87b, 0x0000, 0x080c, 0xdfcf, 0x0016, 0x080c, 0xc4ba,
+ 0x080c, 0x6bf5, 0x001e, 0x080c, 0xc3b4, 0x009e, 0x080c, 0xa3cf,
+ 0x9ce0, 0x0018, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1210, 0x0804,
+ 0xda4b, 0x012e, 0x002e, 0x004e, 0x005e, 0x006e, 0x007e, 0x008e,
+ 0x00ce, 0x00ee, 0x0005, 0x9786, 0x0006, 0x1150, 0x9386, 0x0005,
+ 0x0128, 0x080c, 0xdfcf, 0x080c, 0xdcc3, 0x08f8, 0x009e, 0x0c00,
+ 0x9786, 0x000a, 0x0968, 0x0808, 0x81ff, 0x09d0, 0x9180, 0x0001,
+ 0x2004, 0x9086, 0x0018, 0x0130, 0x9180, 0x0001, 0x2004, 0x9086,
+ 0x002d, 0x1970, 0x6000, 0x9086, 0x0002, 0x1950, 0x080c, 0xc3c0,
+ 0x0130, 0x080c, 0xc3d1, 0x1920, 0x080c, 0xadb3, 0x0038, 0x080c,
+ 0x312b, 0x080c, 0xc3d1, 0x1110, 0x080c, 0xadb3, 0x080c, 0xa3cf,
+ 0x0804, 0xdac8, 0xa868, 0x9084, 0x00ff, 0x9086, 0x0039, 0x0005,
+ 0x00c6, 0x00e6, 0x0016, 0x2c08, 0x2170, 0x9006, 0x080c, 0xdcea,
+ 0x001e, 0x0120, 0x6020, 0x9084, 0x000f, 0x001b, 0x00ee, 0x00ce,
+ 0x0005, 0xdb37, 0xdb37, 0xdb37, 0xdb37, 0xdb37, 0xdb37, 0xdb39,
+ 0xdb37, 0xdb37, 0xdb37, 0xdb62, 0xa3cf, 0xa3cf, 0xdb37, 0x9006,
+ 0x0005, 0x0036, 0x0046, 0x0016, 0x7010, 0x00b6, 0x2058, 0xbca0,
+ 0x00be, 0x2c00, 0x2009, 0x0020, 0x080c, 0xdd18, 0x001e, 0x004e,
+ 0x2019, 0x0002, 0x080c, 0xd86f, 0x003e, 0x9085, 0x0001, 0x0005,
+ 0x0096, 0x080c, 0xc1cd, 0x0140, 0x6014, 0x904d, 0x080c, 0xbde5,
+ 0x687f, 0x0005, 0x080c, 0x6c02, 0x009e, 0x080c, 0xa3cf, 0x9085,
+ 0x0001, 0x0005, 0x0019, 0x9085, 0x0001, 0x0005, 0x6000, 0x908a,
+ 0x0010, 0x1a0c, 0x0dc3, 0x000b, 0x0005, 0xdb7d, 0xdb7d, 0xdb94,
+ 0xdb84, 0xdba3, 0xdb7d, 0xdb7d, 0xdb7f, 0xdb7d, 0xdb7d, 0xdb7d,
+ 0xdb7d, 0xdb7d, 0xdb7d, 0xdb7d, 0xdb7d, 0x080c, 0x0dc3, 0x080c,
+ 0xa3cf, 0x9085, 0x0001, 0x0005, 0x0036, 0x00e6, 0x2071, 0x19c4,
+ 0x703c, 0x9c06, 0x1128, 0x2019, 0x0001, 0x080c, 0x9c35, 0x0010,
+ 0x080c, 0x9e13, 0x00ee, 0x003e, 0x0096, 0x00d6, 0x6014, 0x2048,
+ 0xa87f, 0x0005, 0x080c, 0x6c02, 0x080c, 0xa3cf, 0x00de, 0x009e,
+ 0x9085, 0x0001, 0x0005, 0x601c, 0xd084, 0x190c, 0x1998, 0x0c60,
+ 0x2001, 0x0001, 0x080c, 0x6434, 0x0156, 0x0016, 0x0026, 0x0036,
+ 0x20a9, 0x0004, 0x2019, 0x1805, 0x2011, 0x0276, 0x080c, 0xb434,
+ 0x003e, 0x002e, 0x001e, 0x015e, 0x9005, 0x0005, 0x00f6, 0x00e6,
+ 0x00c6, 0x0086, 0x0076, 0x0066, 0x00b6, 0x0126, 0x2091, 0x8000,
+ 0x2740, 0x2061, 0x1cd0, 0x2079, 0x0001, 0x8fff, 0x0904, 0xdc1a,
+ 0x2071, 0x1800, 0x7650, 0x7070, 0x8001, 0x9602, 0x1a04, 0xdc1a,
+ 0x88ff, 0x0120, 0x2800, 0x9c06, 0x15a0, 0x2078, 0x080c, 0xdd49,
+ 0x0580, 0x2400, 0x9c06, 0x0568, 0x6720, 0x9786, 0x0006, 0x1548,
+ 0x9786, 0x0007, 0x0530, 0x88ff, 0x1150, 0xd58c, 0x1118, 0x6010,
+ 0x9b06, 0x11f8, 0xd584, 0x0118, 0x6054, 0x9106, 0x11d0, 0x0096,
+ 0x601c, 0xd084, 0x0140, 0x080c, 0xdf7c, 0x080c, 0xc8e6, 0x080c,
+ 0x1998, 0x6023, 0x0007, 0x6014, 0x2048, 0x080c, 0xc1cd, 0x0120,
+ 0x0046, 0x080c, 0xdcc3, 0x004e, 0x009e, 0x080c, 0xa3cf, 0x88ff,
+ 0x1198, 0x9ce0, 0x0018, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1210,
+ 0x0804, 0xdbcd, 0x9006, 0x012e, 0x00be, 0x006e, 0x007e, 0x008e,
0x00ce, 0x00ee, 0x00fe, 0x0005, 0x98c5, 0x0001, 0x0ca0, 0x00b6,
0x0076, 0x0056, 0x0086, 0x9046, 0x2029, 0x0001, 0x2c20, 0x2019,
- 0x0002, 0x6210, 0x2258, 0x080c, 0x9a12, 0x008e, 0x903e, 0x080c,
- 0x9abb, 0x080c, 0xd010, 0x005e, 0x007e, 0x00be, 0x0005, 0x00b6,
- 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20, 0x2128, 0x20a9,
- 0x007f, 0x900e, 0x0016, 0x0036, 0x080c, 0x6411, 0x1168, 0x0056,
- 0x0086, 0x9046, 0x2508, 0x2029, 0x0001, 0x080c, 0x9a12, 0x008e,
- 0x903e, 0x080c, 0x9abb, 0x005e, 0x003e, 0x001e, 0x8108, 0x1f04,
- 0xd09a, 0x0036, 0x2508, 0x2029, 0x0003, 0x080c, 0xd010, 0x003e,
- 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e, 0x00be, 0x0005, 0x00b6,
- 0x0076, 0x0056, 0x6210, 0x2258, 0x0086, 0x9046, 0x2029, 0x0001,
- 0x2019, 0x0048, 0x080c, 0x9a12, 0x008e, 0x903e, 0x080c, 0x9abb,
- 0x2c20, 0x080c, 0xd010, 0x005e, 0x007e, 0x00be, 0x0005, 0x00b6,
- 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20, 0x20a9, 0x0800,
- 0x900e, 0x0016, 0x0036, 0x080c, 0x6411, 0x1148, 0x0086, 0x9046,
- 0x2828, 0x080c, 0x9a12, 0x008e, 0x903e, 0x080c, 0x9abb, 0x003e,
- 0x001e, 0x8108, 0x1f04, 0xd0e1, 0x0036, 0x2029, 0x0002, 0x080c,
- 0xd010, 0x003e, 0x015e, 0x00ce, 0x007e, 0x005e, 0x004e, 0x00be,
- 0x0005, 0x0016, 0x00f6, 0x080c, 0xb953, 0x0198, 0xa868, 0x9084,
- 0x00ff, 0x9086, 0x0046, 0x0180, 0xa800, 0x907d, 0x0138, 0xa803,
- 0x0000, 0xab86, 0x080c, 0x6b1d, 0x2f48, 0x0cb0, 0xab86, 0x080c,
- 0x6b1d, 0x00fe, 0x001e, 0x0005, 0xa800, 0x907d, 0x0130, 0xa803,
- 0x0000, 0x080c, 0x6b1d, 0x2f48, 0x0cb8, 0x080c, 0x6b1d, 0x0c88,
- 0x00e6, 0x0046, 0x0036, 0x2061, 0x1cc8, 0x9005, 0x1138, 0x2071,
- 0x1800, 0x7450, 0x7070, 0x8001, 0x9402, 0x12d8, 0x2100, 0x9c06,
- 0x0168, 0x6000, 0x9086, 0x0000, 0x0148, 0x6008, 0x9206, 0x1130,
- 0x6010, 0x91a0, 0x0004, 0x2424, 0x9406, 0x0140, 0x9ce0, 0x000c,
- 0x2001, 0x1819, 0x2004, 0x9c02, 0x1220, 0x0c40, 0x9085, 0x0001,
- 0x0008, 0x9006, 0x003e, 0x004e, 0x00ee, 0x0005, 0x0096, 0x0006,
- 0x080c, 0x1001, 0x000e, 0x090c, 0x0dc4, 0xaae6, 0xa86b, 0x010d,
- 0xa892, 0x0026, 0x2010, 0x080c, 0xb943, 0x2001, 0x0000, 0x0120,
- 0x2200, 0x9080, 0x0009, 0x2004, 0x002e, 0xa87e, 0x9186, 0x0020,
- 0x0110, 0xa8e7, 0xffff, 0xa98a, 0xac7a, 0xa883, 0x0000, 0x2001,
- 0x196a, 0x2004, 0xa886, 0x9006, 0xa802, 0xa86e, 0xa88e, 0x0126,
- 0x2091, 0x8000, 0x080c, 0x6b1d, 0x012e, 0x009e, 0x0005, 0x6700,
- 0x9786, 0x0000, 0x0158, 0x9786, 0x0001, 0x0140, 0x9786, 0x000a,
- 0x0128, 0x9786, 0x0009, 0x0110, 0x9085, 0x0001, 0x0005, 0x00e6,
- 0x6010, 0x9075, 0x0138, 0x00b6, 0x2058, 0xb8a0, 0x00be, 0x9206,
- 0x00ee, 0x0005, 0x9085, 0x0001, 0x0cd8, 0x9186, 0x0013, 0x1128,
- 0x6004, 0x9082, 0x0085, 0x2008, 0x00c2, 0x9186, 0x0027, 0x1178,
- 0x080c, 0x8b2b, 0x0036, 0x0096, 0x6014, 0x2048, 0x2019, 0x0004,
- 0x080c, 0xd101, 0x009e, 0x003e, 0x080c, 0x8c37, 0x0005, 0x9186,
- 0x0014, 0x0d70, 0x080c, 0x9fa3, 0x0005, 0xd1d4, 0xd1d2, 0xd1d2,
- 0xd1d2, 0xd1d2, 0xd1d2, 0xd1d4, 0xd1d2, 0xd1d2, 0xd1d2, 0xd1d2,
- 0xd1d2, 0xd1d2, 0x080c, 0x0dc4, 0x080c, 0x8b2b, 0x6003, 0x000c,
- 0x080c, 0x8c37, 0x0005, 0x9182, 0x0092, 0x1220, 0x9182, 0x0085,
- 0x0208, 0x001a, 0x080c, 0x9fa3, 0x0005, 0xd1f2, 0xd1f2, 0xd1f2,
- 0xd1f2, 0xd1f4, 0xd1f9, 0xd1f2, 0xd1f2, 0xd1f2, 0xd1f2, 0xd1f2,
- 0xd1f2, 0xd1f2, 0x080c, 0x0dc4, 0x00d6, 0x080c, 0x9f18, 0x00de,
- 0x0005, 0x080c, 0x9f18, 0x0005, 0x00e6, 0x6010, 0x00b6, 0x2058,
- 0xb800, 0x00be, 0xd0ec, 0x00ee, 0x0005, 0x0026, 0x0036, 0x0156,
- 0x2011, 0x182b, 0x2204, 0x9084, 0x00ff, 0x2019, 0x026e, 0x2334,
- 0x96b4, 0x00ff, 0x9636, 0x1508, 0x8318, 0x2334, 0x2204, 0x9084,
- 0xff00, 0x9636, 0x11d0, 0x2011, 0x0270, 0x20a9, 0x0004, 0x6010,
- 0x0096, 0x2048, 0x2019, 0x000a, 0x080c, 0xad8d, 0x009e, 0x1168,
- 0x2011, 0x0274, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048, 0x2019,
- 0x0006, 0x080c, 0xad8d, 0x009e, 0x1100, 0x015e, 0x003e, 0x002e,
- 0x0005, 0x00e6, 0x2071, 0x1800, 0x080c, 0x5e89, 0x080c, 0x2e5f,
- 0x00ee, 0x0005, 0x00e6, 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be,
- 0xd0fc, 0x0108, 0x0011, 0x00ee, 0x0005, 0xa884, 0xc0e5, 0xa886,
- 0x0005, 0x00e6, 0x00d6, 0x00c6, 0x0076, 0x0066, 0x0056, 0x0046,
- 0x0026, 0x0016, 0x0126, 0x2091, 0x8000, 0x2029, 0x19cd, 0x252c,
- 0x2021, 0x19d3, 0x2424, 0x2061, 0x1cc8, 0x2071, 0x1800, 0x7650,
- 0x7070, 0x9606, 0x0578, 0x6720, 0x9786, 0x0001, 0x0118, 0x9786,
- 0x0008, 0x1500, 0x2500, 0x9c06, 0x01e8, 0x2400, 0x9c06, 0x01d0,
- 0x080c, 0xd187, 0x01b8, 0x080c, 0xd197, 0x11a0, 0x6000, 0x9086,
- 0x0004, 0x1120, 0x0016, 0x080c, 0x1950, 0x001e, 0x080c, 0xbb45,
- 0x1110, 0x080c, 0x308f, 0x080c, 0xbb56, 0x1110, 0x080c, 0xa717,
- 0x080c, 0x9f42, 0x9ce0, 0x000c, 0x2001, 0x1819, 0x2004, 0x9c02,
- 0x1208, 0x0858, 0x012e, 0x001e, 0x002e, 0x004e, 0x005e, 0x006e,
- 0x007e, 0x00ce, 0x00de, 0x00ee, 0x0005, 0x2001, 0x1810, 0x2004,
- 0xd0dc, 0x0005, 0x0006, 0x2001, 0x1836, 0x2004, 0xd09c, 0x000e,
- 0x0005, 0x0006, 0x0036, 0x0046, 0x080c, 0xbef8, 0x0168, 0x2019,
- 0xffff, 0x9005, 0x0128, 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be,
- 0x2021, 0x0004, 0x080c, 0x4c74, 0x004e, 0x003e, 0x000e, 0x0005,
- 0x6004, 0x9086, 0x0001, 0x1128, 0x080c, 0x9b81, 0x080c, 0x9f42,
- 0x9006, 0x0005, 0x00e6, 0x00c6, 0x00b6, 0x0046, 0x2061, 0x1cc8,
- 0x2071, 0x1800, 0x7450, 0x7070, 0x8001, 0x9402, 0x12d8, 0x2100,
- 0x9c06, 0x0168, 0x6000, 0x9086, 0x0000, 0x0148, 0x6010, 0x2058,
- 0xb8a0, 0x9206, 0x1120, 0x6004, 0x9086, 0x0002, 0x0140, 0x9ce0,
- 0x000c, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1220, 0x0c40, 0x9085,
- 0x0001, 0x0008, 0x9006, 0x004e, 0x00be, 0x00ce, 0x00ee, 0x0005,
- 0x2001, 0x1810, 0x2004, 0xd0a4, 0x0160, 0x2001, 0x1836, 0x2004,
- 0xd0a4, 0x0138, 0x2001, 0x185f, 0x2004, 0xd0a4, 0x1118, 0x9085,
- 0x0001, 0x0005, 0x9006, 0x0ce8, 0x0126, 0x0006, 0x00e6, 0x0016,
- 0x2091, 0x8000, 0x2071, 0x1840, 0xd5a4, 0x0118, 0x7054, 0x8000,
- 0x7056, 0xd5b4, 0x0118, 0x7050, 0x8000, 0x7052, 0xd5ac, 0x0178,
- 0x2500, 0x9084, 0x0007, 0x908e, 0x0003, 0x0148, 0x908e, 0x0004,
- 0x0130, 0x908e, 0x0005, 0x0118, 0x2071, 0x184a, 0x0469, 0x001e,
- 0x00ee, 0x000e, 0x012e, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091,
- 0x8000, 0x2071, 0x1842, 0x0401, 0x00ee, 0x000e, 0x012e, 0x0005,
- 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, 0x1840, 0x706c,
- 0x8000, 0x706e, 0x00ee, 0x000e, 0x012e, 0x0005, 0x0126, 0x0006,
- 0x00e6, 0x2091, 0x8000, 0x2071, 0x1840, 0x7070, 0x8000, 0x7072,
- 0x00ee, 0x000e, 0x012e, 0x0005, 0x2e04, 0x8000, 0x2072, 0x1220,
- 0x8e70, 0x2e04, 0x8000, 0x2072, 0x0005, 0x00e6, 0x2071, 0x1840,
- 0x0c99, 0x00ee, 0x0005, 0x00e6, 0x2071, 0x1844, 0x0c69, 0x00ee,
- 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, 0x1840,
- 0x7064, 0x8000, 0x7066, 0x00ee, 0x000e, 0x012e, 0x0005, 0x0003,
- 0x000b, 0x04b0, 0x0000, 0xc000, 0x0001, 0x8064, 0x0008, 0x0010,
- 0x0000, 0x8066, 0x0000, 0x0101, 0x0008, 0x4407, 0x0003, 0x8060,
- 0x0000, 0x0400, 0x0000, 0x580d, 0x000b, 0x799e, 0x000b, 0x50eb,
- 0x000b, 0x4c0a, 0x0003, 0xbac0, 0x0009, 0x008a, 0x0000, 0x0c0a,
- 0x000b, 0x15fe, 0x0008, 0x340a, 0x0003, 0xc4c0, 0x0009, 0x7000,
- 0x0000, 0xffa0, 0x0001, 0x2000, 0x0000, 0x162c, 0x000b, 0x808c,
- 0x0008, 0x0001, 0x0000, 0x0000, 0x0007, 0x4047, 0x000a, 0x808c,
- 0x0008, 0x0002, 0x0000, 0x0821, 0x0003, 0x4022, 0x0000, 0x0022,
- 0x000b, 0x4122, 0x0008, 0x4447, 0x0002, 0x0e54, 0x000b, 0x0bfe,
- 0x0008, 0x11a0, 0x0001, 0x1232, 0x0003, 0x0ca0, 0x0001, 0x1232,
- 0x0003, 0x9180, 0x0001, 0x0004, 0x0000, 0x8060, 0x0000, 0x0400,
- 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0009, 0x0008, 0x4430,
- 0x000b, 0x808c, 0x0008, 0x0000, 0x0008, 0x0060, 0x0008, 0x8062,
- 0x0008, 0x0004, 0x0000, 0x8066, 0x0000, 0x0411, 0x0000, 0x4438,
- 0x0003, 0x03fe, 0x0000, 0x43e0, 0x0001, 0x0e2f, 0x000b, 0xc2c0,
- 0x0009, 0x00ff, 0x0008, 0x02e0, 0x0001, 0x0e2f, 0x000b, 0x9180,
- 0x0001, 0x0005, 0x0008, 0x8060, 0x0000, 0x0400, 0x0000, 0x7f62,
- 0x0008, 0x8066, 0x0000, 0x0019, 0x0000, 0x4447, 0x000b, 0x0240,
- 0x0002, 0x0a2c, 0x0003, 0x00fe, 0x0000, 0x322f, 0x000b, 0x112a,
- 0x0000, 0x002e, 0x0008, 0x022c, 0x0008, 0x3a44, 0x0002, 0x0c0a,
- 0x000b, 0x808c, 0x0008, 0x0002, 0x0000, 0x1760, 0x0008, 0x8062,
- 0x0008, 0x000f, 0x0008, 0x8066, 0x0000, 0x0011, 0x0008, 0x4458,
- 0x0003, 0x01fe, 0x0008, 0x42e0, 0x0009, 0x0e22, 0x0003, 0x00fe,
- 0x0000, 0x43e0, 0x0001, 0x0e22, 0x0003, 0x1734, 0x0000, 0x1530,
- 0x0000, 0x1632, 0x0008, 0x0d2a, 0x0008, 0x808a, 0x0008, 0x0003,
- 0x0008, 0x1a60, 0x0000, 0x8062, 0x0008, 0x0002, 0x0000, 0x5868,
- 0x000b, 0x8066, 0x0000, 0x3679, 0x0000, 0x446b, 0x0003, 0x586c,
- 0x0003, 0x3efe, 0x0008, 0x7f4f, 0x0002, 0x0872, 0x0003, 0x0d00,
- 0x0000, 0x007a, 0x000c, 0x8054, 0x0008, 0x0011, 0x0008, 0x8074,
- 0x0000, 0x1010, 0x0008, 0x1efe, 0x0000, 0x300a, 0x000b, 0x00c8,
- 0x000c, 0x000a, 0x000b, 0x00fe, 0x0000, 0x3482, 0x0003, 0x1a60,
- 0x0000, 0x8062, 0x0008, 0x0007, 0x0000, 0x8066, 0x0000, 0x0231,
- 0x0008, 0x4481, 0x000b, 0x03fe, 0x0000, 0x04d0, 0x0001, 0x0cbc,
- 0x0003, 0x82c0, 0x0001, 0x1f00, 0x0000, 0xffa0, 0x0001, 0x0400,
- 0x0000, 0x089a, 0x0003, 0x14c4, 0x0003, 0x01fe, 0x0008, 0x0580,
- 0x0009, 0x7f06, 0x0000, 0x8690, 0x0009, 0x0000, 0x0008, 0x7f0c,
- 0x0000, 0x02fe, 0x0008, 0xffc0, 0x0001, 0x00ff, 0x0008, 0x0680,
- 0x0009, 0x109a, 0x0003, 0x7f08, 0x0008, 0x84c0, 0x0001, 0xff00,
- 0x0008, 0x08bc, 0x000b, 0xb9c0, 0x0009, 0x0030, 0x0008, 0x0cab,
- 0x0003, 0x8060, 0x0000, 0x0400, 0x0000, 0x80fe, 0x0008, 0x19e6,
- 0x0001, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0409, 0x0000, 0x44a4,
- 0x0003, 0x80fe, 0x0008, 0x19e5, 0x0001, 0x7f62, 0x0008, 0x8066,
- 0x0000, 0x040a, 0x0000, 0x44aa, 0x000b, 0x00fe, 0x0000, 0x34b2,
- 0x0003, 0x8072, 0x0000, 0x1010, 0x0008, 0x3944, 0x0002, 0x08ad,
- 0x000b, 0x00b6, 0x0003, 0x8072, 0x0000, 0x2020, 0x0008, 0x3945,
- 0x000a, 0x08b2, 0x0003, 0x3946, 0x000a, 0x0cc3, 0x000b, 0x0000,
- 0x0007, 0x3943, 0x000a, 0x08c3, 0x0003, 0x00b6, 0x0003, 0x00fe,
- 0x0000, 0x34c1, 0x000b, 0x8072, 0x0000, 0x1000, 0x0000, 0x00c3,
- 0x000b, 0x8072, 0x0000, 0x2000, 0x0000, 0x4000, 0x000f, 0x86c0,
- 0x0009, 0xfc00, 0x0008, 0x08bc, 0x000b, 0x009a, 0x000b, 0x1c60,
- 0x0000, 0x1b62, 0x0000, 0x8066, 0x0000, 0x0231, 0x0008, 0x44cc,
- 0x000b, 0x58cd, 0x000b, 0x0140, 0x0008, 0x0242, 0x0000, 0x1f43,
- 0x0002, 0x0cdb, 0x000b, 0x0d44, 0x0000, 0x0d46, 0x0008, 0x0348,
- 0x0008, 0x044a, 0x0008, 0x030a, 0x0008, 0x040c, 0x0000, 0x0d06,
- 0x0000, 0x0d08, 0x0008, 0x00df, 0x0003, 0x0344, 0x0008, 0x0446,
- 0x0008, 0x0548, 0x0008, 0x064a, 0x0000, 0x58df, 0x000b, 0x3efe,
- 0x0008, 0x7f4f, 0x0002, 0x08e6, 0x000b, 0x8000, 0x0000, 0x0001,
- 0x0000, 0x007a, 0x000c, 0x8054, 0x0008, 0x0001, 0x0000, 0x8074,
- 0x0000, 0x2020, 0x0008, 0x4000, 0x000f, 0x3a40, 0x000a, 0x0c0d,
- 0x0003, 0x2b24, 0x0008, 0x2b24, 0x0008, 0x58ef, 0x000b, 0x8054,
- 0x0008, 0x0002, 0x0000, 0x1242, 0x0002, 0x093d, 0x0003, 0x3a45,
- 0x000a, 0x092c, 0x0003, 0x8072, 0x0000, 0x1000, 0x0000, 0x3945,
- 0x000a, 0x08fc, 0x0003, 0x8072, 0x0000, 0x3010, 0x0000, 0x1e10,
- 0x000a, 0x7f3c, 0x0000, 0x0927, 0x000b, 0x1d00, 0x0002, 0x7f3a,
- 0x0000, 0x0d60, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0009,
- 0x0008, 0x4505, 0x0003, 0x00fe, 0x0000, 0x3524, 0x000b, 0x1c60,
- 0x0000, 0x8062, 0x0008, 0x0001, 0x0000, 0x8066, 0x0000, 0x0009,
- 0x0008, 0x450d, 0x000b, 0x00fe, 0x0000, 0x320c, 0x0003, 0x0038,
- 0x0000, 0x0060, 0x0008, 0x8062, 0x0008, 0x001a, 0x0000, 0x8066,
- 0x0000, 0x0009, 0x0008, 0x4516, 0x000b, 0x80c0, 0x0009, 0x00ff,
- 0x0008, 0x7f3e, 0x0008, 0x0d60, 0x0000, 0x0efe, 0x0008, 0x1f80,
- 0x0001, 0x7f62, 0x0008, 0x8066, 0x0000, 0x0009, 0x0008, 0x4520,
- 0x000b, 0x003a, 0x0008, 0x1dfe, 0x0000, 0x0101, 0x000b, 0x0036,
- 0x0008, 0x00c8, 0x000c, 0x013d, 0x000b, 0x8074, 0x0000, 0x2000,
- 0x0000, 0x8072, 0x0000, 0x2000, 0x0000, 0x013d, 0x000b, 0x3a44,
- 0x0002, 0x0a35, 0x000b, 0x8074, 0x0000, 0x1000, 0x0000, 0x8072,
- 0x0000, 0x1000, 0x0000, 0x2d0e, 0x0000, 0x2d0e, 0x0000, 0x3609,
- 0x000b, 0x26fe, 0x0008, 0x26fe, 0x0008, 0x2700, 0x0008, 0x2700,
- 0x0008, 0x00d0, 0x0009, 0x0d4f, 0x000b, 0x8074, 0x0000, 0x4040,
- 0x0008, 0x593d, 0x0003, 0x50eb, 0x000b, 0x3a46, 0x000a, 0x0d4f,
- 0x000b, 0x3a47, 0x0002, 0x094a, 0x0003, 0x8054, 0x0008, 0x0004,
- 0x0000, 0x8074, 0x0000, 0x8000, 0x0000, 0x8072, 0x0000, 0x3000,
- 0x0008, 0x0192, 0x000b, 0x92c0, 0x0009, 0x0fc8, 0x0000, 0x080a,
- 0x0003, 0x1246, 0x000a, 0x0e06, 0x0003, 0x1a60, 0x0000, 0x8062,
- 0x0008, 0x0002, 0x0000, 0x8066, 0x0000, 0x362a, 0x0000, 0x4554,
- 0x000b, 0x2000, 0x0000, 0x2000, 0x0000, 0x2102, 0x0000, 0x2102,
- 0x0000, 0x2204, 0x0000, 0x2204, 0x0000, 0x2306, 0x0000, 0x2306,
- 0x0000, 0x2408, 0x0000, 0x2408, 0x0000, 0x250a, 0x0000, 0x250a,
- 0x0000, 0x260c, 0x0000, 0x260c, 0x0000, 0x270e, 0x0000, 0x270e,
- 0x0000, 0x2810, 0x0000, 0x2810, 0x0000, 0x2912, 0x0000, 0x2912,
- 0x0000, 0x1a60, 0x0000, 0x8062, 0x0008, 0x0007, 0x0000, 0x8066,
- 0x0000, 0x0052, 0x0000, 0x456e, 0x000b, 0x92c0, 0x0009, 0x0780,
- 0x0008, 0x0e1f, 0x000b, 0x124b, 0x0002, 0x0977, 0x000b, 0x2e4d,
- 0x0002, 0x2e4d, 0x0002, 0x0a09, 0x000b, 0x3a46, 0x000a, 0x0d84,
- 0x0003, 0x5979, 0x0003, 0x8054, 0x0008, 0x0004, 0x0000, 0x1243,
- 0x000a, 0x098e, 0x000b, 0x8010, 0x0008, 0x000d, 0x0000, 0x01fa,
- 0x000c, 0x1810, 0x0000, 0x01fa, 0x000c, 0x018e, 0x0003, 0x194d,
- 0x000a, 0x0988, 0x000b, 0x1243, 0x000a, 0x0a13, 0x0003, 0x5988,
- 0x000b, 0x8054, 0x0008, 0x0004, 0x0000, 0x01ef, 0x0004, 0x1810,
- 0x0000, 0x01fa, 0x000c, 0x8074, 0x0000, 0xf000, 0x0008, 0x8072,
- 0x0000, 0x3000, 0x0008, 0x0d30, 0x0000, 0x3a42, 0x0002, 0x0d98,
- 0x000b, 0x15fe, 0x0008, 0x3451, 0x000b, 0x000a, 0x000b, 0x8074,
- 0x0000, 0x0501, 0x0000, 0x8010, 0x0008, 0x000c, 0x0008, 0x01fa,
- 0x000c, 0x000a, 0x000b, 0xbbe0, 0x0009, 0x0030, 0x0008, 0x0dae,
- 0x000b, 0x18fe, 0x0000, 0x3ce0, 0x0009, 0x09ab, 0x0003, 0x15fe,
- 0x0008, 0x3ce0, 0x0009, 0x09ab, 0x0003, 0x01ea, 0x0004, 0x8076,
- 0x0008, 0x0040, 0x0000, 0x01e7, 0x0003, 0x8076, 0x0008, 0x0041,
- 0x0008, 0x01e7, 0x0003, 0xbbe0, 0x0009, 0x0037, 0x0000, 0x0dcc,
- 0x0003, 0x18fe, 0x0000, 0x3ce0, 0x0009, 0x0dab, 0x000b, 0x8076,
- 0x0008, 0x0040, 0x0000, 0x1a60, 0x0000, 0x8062, 0x0008, 0x000d,
- 0x0000, 0x2604, 0x0008, 0x2604, 0x0008, 0x2706, 0x0008, 0x2706,
- 0x0008, 0x2808, 0x0000, 0x2808, 0x0000, 0x290a, 0x0000, 0x290a,
- 0x0000, 0x8066, 0x0000, 0x0422, 0x0000, 0x45c3, 0x0003, 0x01ef,
- 0x0004, 0x8054, 0x0008, 0x0004, 0x0000, 0x8074, 0x0000, 0xf000,
- 0x0008, 0x8072, 0x0000, 0xb000, 0x0000, 0x0192, 0x000b, 0xbbe0,
- 0x0009, 0x0038, 0x0000, 0x0dde, 0x0003, 0x18fe, 0x0000, 0x3ce0,
- 0x0009, 0x09db, 0x000b, 0x15fe, 0x0008, 0x3ce0, 0x0009, 0x0da7,
- 0x000b, 0x01ea, 0x0004, 0x8076, 0x0008, 0x0040, 0x0000, 0x8072,
- 0x0000, 0x8000, 0x0000, 0x022c, 0x000b, 0x8076, 0x0008, 0x0042,
- 0x0008, 0x01e7, 0x0003, 0xbbe0, 0x0009, 0x0016, 0x0000, 0x0de7,
- 0x0003, 0x3a44, 0x0002, 0x0c0c, 0x000b, 0x8072, 0x0000, 0x8000,
- 0x0000, 0x8000, 0x000f, 0x000a, 0x000b, 0x8072, 0x0000, 0x8000,
- 0x0000, 0x000a, 0x000b, 0x3d30, 0x000a, 0x7f00, 0x0000, 0xbc80,
- 0x0001, 0x0007, 0x0000, 0x01f3, 0x0003, 0x1930, 0x000a, 0x7f00,
- 0x0000, 0x9880, 0x0001, 0x0007, 0x0000, 0x8060, 0x0000, 0x0400,
- 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x000a, 0x0008, 0x45f8,
- 0x000b, 0x4000, 0x000f, 0x21fa, 0x000b, 0x0870, 0x0008, 0x4000,
- 0x000f, 0xbac0, 0x0009, 0x0090, 0x0008, 0x0a03, 0x000b, 0x8074,
- 0x0000, 0x0706, 0x0000, 0x0205, 0x0003, 0x8074, 0x0000, 0x0703,
- 0x0000, 0x4000, 0x000f, 0x8010, 0x0008, 0x0023, 0x0000, 0x023a,
- 0x0003, 0x8010, 0x0008, 0x0022, 0x0008, 0x023a, 0x0003, 0x01ef,
- 0x0004, 0x8010, 0x0008, 0x0007, 0x0000, 0x01fa, 0x000c, 0x1810,
- 0x0000, 0x01fa, 0x000c, 0x0246, 0x000b, 0x01ef, 0x0004, 0x8010,
- 0x0008, 0x001b, 0x0008, 0x01fa, 0x000c, 0x1810, 0x0000, 0x01fa,
- 0x000c, 0x8074, 0x0000, 0xf080, 0x0000, 0x8072, 0x0000, 0x3000,
- 0x0008, 0x0d30, 0x0000, 0x000a, 0x000b, 0x8010, 0x0008, 0x0009,
- 0x0008, 0x023a, 0x0003, 0x808c, 0x0008, 0x0001, 0x0000, 0x8010,
- 0x0008, 0x0004, 0x0000, 0x4143, 0x000a, 0x085f, 0x0003, 0x3a44,
- 0x0002, 0x0c0a, 0x000b, 0x0d2a, 0x0008, 0x023a, 0x0003, 0x8010,
- 0x0008, 0x0003, 0x0008, 0x023e, 0x000b, 0x8010, 0x0008, 0x000b,
- 0x0000, 0x023e, 0x000b, 0x8010, 0x0008, 0x0002, 0x0000, 0x023e,
- 0x000b, 0x3a47, 0x0002, 0x0d3d, 0x000b, 0x8010, 0x0008, 0x0006,
- 0x0008, 0x023e, 0x000b, 0x8074, 0x0000, 0xf000, 0x0008, 0x8072,
- 0x0000, 0x3000, 0x0008, 0x01fa, 0x000c, 0x01fd, 0x0004, 0x3a40,
- 0x000a, 0x080a, 0x0003, 0x8010, 0x0008, 0x000c, 0x0008, 0x01fa,
- 0x000c, 0x000a, 0x000b, 0x8074, 0x0000, 0xf080, 0x0000, 0x8072,
- 0x0000, 0x3000, 0x0008, 0x0d30, 0x0000, 0x2e4d, 0x0002, 0x2e4d,
- 0x0002, 0x0a51, 0x0003, 0x8054, 0x0008, 0x0019, 0x0000, 0x000a,
- 0x000b, 0x8054, 0x0008, 0x0009, 0x0008, 0x000a, 0x000b, 0x3a44,
- 0x0002, 0x0c0a, 0x000b, 0x022f, 0x000b, 0xf8aa, 0xf3d5, 0x0001,
- 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100,
- 0x0200, 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000, 0x5d31
+ 0x0002, 0x6210, 0x2258, 0x0096, 0x904e, 0x080c, 0x9ce3, 0x009e,
+ 0x008e, 0x903e, 0x080c, 0x9d8e, 0x080c, 0xdbbe, 0x005e, 0x007e,
+ 0x00be, 0x0005, 0x00b6, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156,
+ 0x2c20, 0x2128, 0x20a9, 0x007f, 0x900e, 0x0016, 0x0036, 0x080c,
+ 0x64fc, 0x1180, 0x0056, 0x0086, 0x9046, 0x2508, 0x2029, 0x0001,
+ 0x0096, 0x904e, 0x080c, 0x9ce3, 0x009e, 0x008e, 0x903e, 0x080c,
+ 0x9d8e, 0x005e, 0x003e, 0x001e, 0x8108, 0x1f04, 0xdc4d, 0x0036,
+ 0x2508, 0x2029, 0x0003, 0x080c, 0xdbbe, 0x003e, 0x015e, 0x00ce,
+ 0x007e, 0x005e, 0x004e, 0x00be, 0x0005, 0x00b6, 0x0076, 0x0056,
+ 0x6210, 0x2258, 0x0086, 0x9046, 0x2029, 0x0001, 0x2019, 0x0048,
+ 0x0096, 0x904e, 0x080c, 0x9ce3, 0x009e, 0x008e, 0x903e, 0x080c,
+ 0x9d8e, 0x2c20, 0x080c, 0xdbbe, 0x005e, 0x007e, 0x00be, 0x0005,
+ 0x00b6, 0x0046, 0x0056, 0x0076, 0x00c6, 0x0156, 0x2c20, 0x20a9,
+ 0x0800, 0x900e, 0x0016, 0x0036, 0x080c, 0x64fc, 0x1190, 0x0086,
+ 0x9046, 0x2828, 0x0046, 0x2021, 0x0001, 0x080c, 0xdf55, 0x004e,
+ 0x0096, 0x904e, 0x080c, 0x9ce3, 0x009e, 0x008e, 0x903e, 0x080c,
+ 0x9d8e, 0x003e, 0x001e, 0x8108, 0x1f04, 0xdc9a, 0x0036, 0x2029,
+ 0x0002, 0x080c, 0xdbbe, 0x003e, 0x015e, 0x00ce, 0x007e, 0x005e,
+ 0x004e, 0x00be, 0x0005, 0x0016, 0x00f6, 0x080c, 0xc1cb, 0x0198,
+ 0xa868, 0x9084, 0x00ff, 0x9086, 0x0046, 0x0180, 0xa800, 0x907d,
+ 0x0138, 0xa803, 0x0000, 0xab86, 0x080c, 0x6c02, 0x2f48, 0x0cb0,
+ 0xab86, 0x080c, 0x6c02, 0x00fe, 0x001e, 0x0005, 0xa800, 0x907d,
+ 0x0130, 0xa803, 0x0000, 0x080c, 0x6c02, 0x2f48, 0x0cb8, 0x080c,
+ 0x6c02, 0x0c88, 0x00e6, 0x0046, 0x0036, 0x2061, 0x1cd0, 0x9005,
+ 0x1138, 0x2071, 0x1800, 0x7450, 0x7070, 0x8001, 0x9402, 0x12d8,
+ 0x2100, 0x9c06, 0x0168, 0x6000, 0x9086, 0x0000, 0x0148, 0x6008,
+ 0x9206, 0x1130, 0x6010, 0x91a0, 0x0004, 0x2424, 0x9406, 0x0140,
+ 0x9ce0, 0x0018, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1220, 0x0c40,
+ 0x9085, 0x0001, 0x0008, 0x9006, 0x003e, 0x004e, 0x00ee, 0x0005,
+ 0x0096, 0x0006, 0x080c, 0x100d, 0x000e, 0x090c, 0x0dc3, 0xaae6,
+ 0xa86b, 0x010d, 0xa892, 0x0026, 0x2010, 0x080c, 0xc1bb, 0x2001,
+ 0x0000, 0x0120, 0x2200, 0x9080, 0x0015, 0x2004, 0x002e, 0xa87e,
+ 0x9186, 0x0020, 0x0110, 0xa8e7, 0xffff, 0xa98a, 0xac7a, 0xa883,
+ 0x0000, 0x2001, 0x196a, 0x2004, 0xa886, 0x9006, 0xa802, 0xa86e,
+ 0xa88e, 0x0126, 0x2091, 0x8000, 0x080c, 0x6c02, 0x012e, 0x009e,
+ 0x0005, 0x6700, 0x9786, 0x0000, 0x0158, 0x9786, 0x0001, 0x0140,
+ 0x9786, 0x000a, 0x0128, 0x9786, 0x0009, 0x0110, 0x9085, 0x0001,
+ 0x0005, 0x00e6, 0x6010, 0x9075, 0x0138, 0x00b6, 0x2058, 0xb8a0,
+ 0x00be, 0x9206, 0x00ee, 0x0005, 0x9085, 0x0001, 0x0cd8, 0x0016,
+ 0x6004, 0x908e, 0x001e, 0x11a0, 0x8007, 0x6134, 0x918c, 0x00ff,
+ 0x9105, 0x6036, 0x6007, 0x0085, 0x6003, 0x000b, 0x6023, 0x0005,
+ 0x2001, 0x1963, 0x2004, 0x601a, 0x080c, 0x88a1, 0x080c, 0x8e38,
+ 0x001e, 0x0005, 0xa001, 0xa001, 0x0005, 0x6024, 0xd0e4, 0x0158,
+ 0xd0cc, 0x0118, 0x080c, 0xc4fe, 0x0030, 0x080c, 0xdf7c, 0x080c,
+ 0x86d8, 0x080c, 0xa39d, 0x0005, 0x9280, 0x0008, 0x2004, 0x9084,
+ 0x000f, 0x0002, 0xdda8, 0xdda8, 0xdda8, 0xddaa, 0xdda8, 0xddaa,
+ 0xddaa, 0xdda8, 0xddaa, 0xdda8, 0xdda8, 0xdda8, 0xdda8, 0xdda8,
+ 0x9006, 0x0005, 0x9085, 0x0001, 0x0005, 0x9280, 0x0008, 0x2004,
+ 0x9084, 0x000f, 0x0002, 0xddc1, 0xddc1, 0xddc1, 0xddc1, 0xddc1,
+ 0xddc1, 0xddce, 0xddc1, 0xddc1, 0xddc1, 0xddc1, 0xddc1, 0xddc1,
+ 0xddc1, 0x6007, 0x003b, 0x602f, 0x0009, 0x6017, 0x2a00, 0x6003,
+ 0x0001, 0x080c, 0x88a1, 0x080c, 0x8e38, 0x0005, 0x0096, 0x00c6,
+ 0x2260, 0x080c, 0xdf7c, 0x6043, 0x0000, 0x6024, 0xc0f4, 0xc0e4,
+ 0x6026, 0x603b, 0x0000, 0x00ce, 0x00d6, 0x2268, 0x9186, 0x0007,
+ 0x1904, 0xde27, 0x6814, 0x9005, 0x0138, 0x2048, 0xa880, 0xd0fc,
+ 0x1118, 0x00de, 0x009e, 0x08a8, 0x6007, 0x003a, 0x6003, 0x0001,
+ 0x080c, 0x88a1, 0x080c, 0x8e38, 0x00c6, 0x2d60, 0x6100, 0x9186,
+ 0x0002, 0x1904, 0xde96, 0x6014, 0x9005, 0x1138, 0x6000, 0x9086,
+ 0x0007, 0x190c, 0x0dc3, 0x0804, 0xde96, 0x2048, 0x080c, 0xc1cd,
+ 0x1130, 0x0028, 0x2048, 0xa800, 0x9005, 0x1de0, 0x2900, 0x2048,
+ 0xa880, 0x9084, 0x0003, 0x9086, 0x0002, 0x1168, 0xa880, 0xc0dc,
+ 0xc0f4, 0xa882, 0xa884, 0xc0fc, 0xa886, 0x2009, 0x0043, 0x080c,
+ 0xd6b9, 0x0804, 0xde96, 0x2009, 0x0041, 0x0804, 0xde90, 0x9186,
+ 0x0005, 0x15a0, 0x6814, 0x2048, 0xa880, 0xd0bc, 0x1120, 0x00de,
+ 0x009e, 0x0804, 0xddc1, 0xd0b4, 0x0128, 0xd0fc, 0x090c, 0x0dc3,
+ 0x0804, 0xdde2, 0x6007, 0x003a, 0x6003, 0x0001, 0x080c, 0x88a1,
+ 0x080c, 0x8e38, 0x00c6, 0x2d60, 0x6100, 0x9186, 0x0002, 0x0120,
+ 0x9186, 0x0004, 0x1904, 0xde96, 0x6814, 0x2048, 0xa980, 0xc1f4,
+ 0xc1dc, 0xa982, 0xa984, 0xc1fc, 0xc1bc, 0xa986, 0x00f6, 0x2c78,
+ 0x080c, 0x16c1, 0x00fe, 0x2009, 0x0042, 0x0490, 0x0036, 0x080c,
+ 0x100d, 0x090c, 0x0dc3, 0xa86b, 0x010d, 0x9006, 0xa802, 0xa86e,
+ 0xa88e, 0x2d18, 0xab92, 0xa88b, 0x0045, 0x2c00, 0xa896, 0x6038,
+ 0xa8a6, 0x2360, 0x6024, 0xc0dd, 0x6026, 0x6010, 0x00b6, 0x2058,
+ 0xb8a0, 0x00be, 0x6354, 0xab7e, 0xa87a, 0x9006, 0xa882, 0xa886,
+ 0xad9e, 0xae9a, 0xa8a3, 0x0001, 0x080c, 0x6c02, 0x2019, 0x0045,
+ 0x6008, 0x2068, 0x080c, 0xd861, 0x2d00, 0x600a, 0x003e, 0x0038,
+ 0x6043, 0x0000, 0x6003, 0x0007, 0x080c, 0xd6b9, 0x00ce, 0x00de,
+ 0x009e, 0x0005, 0x9186, 0x0013, 0x1128, 0x6004, 0x9082, 0x0085,
+ 0x2008, 0x00c2, 0x9186, 0x0027, 0x1178, 0x080c, 0x8d2c, 0x0036,
+ 0x0096, 0x6014, 0x2048, 0x2019, 0x0004, 0x080c, 0xdcc3, 0x009e,
+ 0x003e, 0x080c, 0x8e38, 0x0005, 0x9186, 0x0014, 0x0d70, 0x080c,
+ 0xa434, 0x0005, 0xdec9, 0xdec7, 0xdec7, 0xdec7, 0xdec7, 0xdec7,
+ 0xdec9, 0xdec7, 0xdec7, 0xdec7, 0xdec7, 0xdec7, 0xdec7, 0x080c,
+ 0x0dc3, 0x080c, 0x8d2c, 0x6003, 0x000c, 0x080c, 0x8e38, 0x0005,
+ 0x9182, 0x0092, 0x1220, 0x9182, 0x0085, 0x0208, 0x001a, 0x080c,
+ 0xa434, 0x0005, 0xdee7, 0xdee7, 0xdee7, 0xdee7, 0xdee9, 0xdf09,
+ 0xdee7, 0xdee7, 0xdee7, 0xdee7, 0xdee7, 0xdee7, 0xdee7, 0x080c,
+ 0x0dc3, 0x00d6, 0x2c68, 0x080c, 0xa347, 0x01b0, 0x6003, 0x0001,
+ 0x6007, 0x001e, 0x2009, 0x026e, 0x210c, 0x613a, 0x2009, 0x026f,
+ 0x210c, 0x613e, 0x600b, 0xffff, 0x6910, 0x6112, 0x6023, 0x0004,
+ 0x080c, 0x88a1, 0x080c, 0x8e38, 0x2d60, 0x080c, 0xa39d, 0x00de,
+ 0x0005, 0x080c, 0xa39d, 0x0005, 0x00e6, 0x6010, 0x00b6, 0x2058,
+ 0xb800, 0x00be, 0xd0ec, 0x00ee, 0x0005, 0x2009, 0x187e, 0x210c,
+ 0xd1ec, 0x05d0, 0x6003, 0x0002, 0x6024, 0xc0e5, 0x6026, 0xd0cc,
+ 0x0150, 0x2001, 0x1964, 0x2004, 0x6042, 0x2009, 0x187e, 0x210c,
+ 0xd1f4, 0x1540, 0x00a0, 0x2009, 0x187e, 0x210c, 0xd1f4, 0x0128,
+ 0x6024, 0xc0e4, 0x6026, 0x9006, 0x00f8, 0x2001, 0x1964, 0x200c,
+ 0x2001, 0x1962, 0x2004, 0x9100, 0x9080, 0x000a, 0x6042, 0x6010,
+ 0x00b6, 0x2058, 0xb8ac, 0x9005, 0x1130, 0x2c00, 0xb8ae, 0x0038,
+ 0x2104, 0x9005, 0x0118, 0x9088, 0x0003, 0x0cd0, 0x2c0a, 0x00be,
+ 0x600f, 0x0000, 0x9085, 0x0001, 0x0005, 0x0016, 0x00c6, 0x00e6,
+ 0x6154, 0xb8ac, 0x9005, 0x01e0, 0x2060, 0x9006, 0x2070, 0xb8ae,
+ 0x8cff, 0x01b0, 0x84ff, 0x1118, 0x6054, 0x9106, 0x1148, 0x600c,
+ 0x8eff, 0x0108, 0x2072, 0x080c, 0x86d8, 0x080c, 0xa39d, 0x0030,
+ 0x8eff, 0x1110, 0x2c00, 0xb8ae, 0x9cf0, 0x0003, 0x2e64, 0x0c40,
+ 0x00ee, 0x00ce, 0x001e, 0x0005, 0x00d6, 0x00b6, 0x6010, 0x2058,
+ 0xb8ac, 0x9c06, 0x1118, 0x600c, 0xb8ae, 0x0048, 0xb8ac, 0x906d,
+ 0x0130, 0x9c06, 0x0110, 0x680c, 0x0cd0, 0x600c, 0x680e, 0x00be,
+ 0x00de, 0x0005, 0x0026, 0x0036, 0x0156, 0x2011, 0x182b, 0x2204,
+ 0x9084, 0x00ff, 0x2019, 0x026e, 0x2334, 0x96b4, 0x00ff, 0x9636,
+ 0x1508, 0x8318, 0x2334, 0x2204, 0x9084, 0xff00, 0x9636, 0x11d0,
+ 0x2011, 0x0270, 0x20a9, 0x0004, 0x6010, 0x0096, 0x2048, 0x2019,
+ 0x000a, 0x080c, 0xb448, 0x009e, 0x1168, 0x2011, 0x0274, 0x20a9,
+ 0x0004, 0x6010, 0x0096, 0x2048, 0x2019, 0x0006, 0x080c, 0xb448,
+ 0x009e, 0x1100, 0x015e, 0x003e, 0x002e, 0x0005, 0x00e6, 0x2071,
+ 0x1800, 0x080c, 0x5f46, 0x080c, 0x2ed6, 0x00ee, 0x0005, 0x00e6,
+ 0x6010, 0x00b6, 0x2058, 0xb800, 0x00be, 0xd0fc, 0x0108, 0x0011,
+ 0x00ee, 0x0005, 0xa884, 0xc0e5, 0xa886, 0x0005, 0x00e6, 0x00d6,
+ 0x00c6, 0x0076, 0x0066, 0x0056, 0x0046, 0x0026, 0x0016, 0x0126,
+ 0x2091, 0x8000, 0x2029, 0x19cd, 0x252c, 0x2021, 0x19d3, 0x2424,
+ 0x2061, 0x1cd0, 0x2071, 0x1800, 0x7650, 0x7070, 0x9606, 0x0578,
+ 0x6720, 0x9786, 0x0001, 0x0118, 0x9786, 0x0008, 0x1500, 0x2500,
+ 0x9c06, 0x01e8, 0x2400, 0x9c06, 0x01d0, 0x080c, 0xdd49, 0x01b8,
+ 0x080c, 0xdd59, 0x11a0, 0x6000, 0x9086, 0x0004, 0x1120, 0x0016,
+ 0x080c, 0x1998, 0x001e, 0x080c, 0xc3c0, 0x1110, 0x080c, 0x312b,
+ 0x080c, 0xc3d1, 0x1110, 0x080c, 0xadb3, 0x080c, 0xa3cf, 0x9ce0,
+ 0x0018, 0x2001, 0x1819, 0x2004, 0x9c02, 0x1208, 0x0858, 0x012e,
+ 0x001e, 0x002e, 0x004e, 0x005e, 0x006e, 0x007e, 0x00ce, 0x00de,
+ 0x00ee, 0x0005, 0x2001, 0x1810, 0x2004, 0xd0dc, 0x0005, 0x0006,
+ 0x2001, 0x1836, 0x2004, 0xd09c, 0x000e, 0x0005, 0x0006, 0x0036,
+ 0x0046, 0x080c, 0xc8ce, 0x0168, 0x2019, 0xffff, 0x9005, 0x0128,
+ 0x6010, 0x00b6, 0x2058, 0xbba0, 0x00be, 0x2021, 0x0004, 0x080c,
+ 0x4d24, 0x004e, 0x003e, 0x000e, 0x0005, 0x6004, 0x9086, 0x0001,
+ 0x1128, 0x080c, 0x9e54, 0x080c, 0xa3cf, 0x9006, 0x0005, 0x00e6,
+ 0x00c6, 0x00b6, 0x0046, 0x2061, 0x1cd0, 0x2071, 0x1800, 0x7450,
+ 0x7070, 0x8001, 0x9402, 0x12d8, 0x2100, 0x9c06, 0x0168, 0x6000,
+ 0x9086, 0x0000, 0x0148, 0x6010, 0x2058, 0xb8a0, 0x9206, 0x1120,
+ 0x6004, 0x9086, 0x0002, 0x0140, 0x9ce0, 0x0018, 0x2001, 0x1819,
+ 0x2004, 0x9c02, 0x1220, 0x0c40, 0x9085, 0x0001, 0x0008, 0x9006,
+ 0x004e, 0x00be, 0x00ce, 0x00ee, 0x0005, 0x2001, 0x1810, 0x2004,
+ 0xd0a4, 0x0160, 0x2001, 0x1836, 0x2004, 0xd0a4, 0x0138, 0x2001,
+ 0x185f, 0x2004, 0xd0a4, 0x1118, 0x9085, 0x0001, 0x0005, 0x9006,
+ 0x0ce8, 0x0126, 0x0006, 0x00e6, 0x0016, 0x2091, 0x8000, 0x2071,
+ 0x1840, 0xd5a4, 0x0118, 0x7054, 0x8000, 0x7056, 0xd5b4, 0x0118,
+ 0x7050, 0x8000, 0x7052, 0xd5ac, 0x0178, 0x2500, 0x9084, 0x0007,
+ 0x908e, 0x0003, 0x0148, 0x908e, 0x0004, 0x0130, 0x908e, 0x0005,
+ 0x0118, 0x2071, 0x184a, 0x0469, 0x001e, 0x00ee, 0x000e, 0x012e,
+ 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000, 0x2071, 0x1842,
+ 0x0401, 0x00ee, 0x000e, 0x012e, 0x0005, 0x0126, 0x0006, 0x00e6,
+ 0x2091, 0x8000, 0x2071, 0x1840, 0x706c, 0x8000, 0x706e, 0x00ee,
+ 0x000e, 0x012e, 0x0005, 0x0126, 0x0006, 0x00e6, 0x2091, 0x8000,
+ 0x2071, 0x1840, 0x7070, 0x8000, 0x7072, 0x00ee, 0x000e, 0x012e,
+ 0x0005, 0x2e04, 0x8000, 0x2072, 0x1220, 0x8e70, 0x2e04, 0x8000,
+ 0x2072, 0x0005, 0x00e6, 0x2071, 0x1840, 0x0c99, 0x00ee, 0x0005,
+ 0x00e6, 0x2071, 0x1844, 0x0c69, 0x00ee, 0x0005, 0x0126, 0x0006,
+ 0x00e6, 0x2091, 0x8000, 0x2071, 0x1840, 0x7064, 0x8000, 0x7066,
+ 0x00ee, 0x000e, 0x012e, 0x0005, 0x0003, 0x000b, 0x04ca, 0x0000,
+ 0xc000, 0x0001, 0x8064, 0x0008, 0x0010, 0x0000, 0x8066, 0x0000,
+ 0x0101, 0x0008, 0x4407, 0x0003, 0x8060, 0x0000, 0x0400, 0x0000,
+ 0x580d, 0x000b, 0x79a6, 0x0003, 0x50f3, 0x000b, 0x4c0a, 0x0003,
+ 0xbac0, 0x0009, 0x008a, 0x0000, 0x0c0a, 0x000b, 0x15fe, 0x0008,
+ 0x340a, 0x0003, 0xc4c0, 0x0009, 0x7000, 0x0000, 0xffa0, 0x0001,
+ 0x2000, 0x0000, 0x1639, 0x0003, 0x808c, 0x0008, 0x0001, 0x0000,
+ 0x0000, 0x0007, 0x4047, 0x000a, 0x808c, 0x0008, 0x0002, 0x0000,
+ 0x0821, 0x0003, 0x4022, 0x0000, 0x0022, 0x000b, 0x4122, 0x0008,
+ 0x4447, 0x0002, 0x0e61, 0x000b, 0x0bfe, 0x0008, 0x11a0, 0x0001,
+ 0x123f, 0x000b, 0x0ca0, 0x0001, 0x123f, 0x000b, 0x9180, 0x0001,
+ 0x0004, 0x0000, 0x8060, 0x0000, 0x0400, 0x0000, 0x7f62, 0x0008,
+ 0x8066, 0x0000, 0x0009, 0x0008, 0x4430, 0x000b, 0x808c, 0x0008,
+ 0x0000, 0x0008, 0x0060, 0x0008, 0x8062, 0x0008, 0x0004, 0x0000,
+ 0x8066, 0x0000, 0x0411, 0x0000, 0x4438, 0x0003, 0x03fe, 0x0000,
+ 0x43e0, 0x0001, 0x0e3c, 0x0003, 0xc2c0, 0x0009, 0x00ff, 0x0008,
+ 0x02e0, 0x0001, 0x0e3c, 0x0003, 0x9180, 0x0001, 0x0005, 0x0008,
+ 0x8060, 0x0000, 0x0400, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000,
+ 0x0019, 0x0000, 0x4447, 0x000b, 0x0240, 0x0002, 0x0a39, 0x000b,
+ 0x00fe, 0x0000, 0x323c, 0x0003, 0x112a, 0x0000, 0x002e, 0x0008,
+ 0x022c, 0x0008, 0x3a44, 0x0002, 0x0c0a, 0x000b, 0x808c, 0x0008,
+ 0x0002, 0x0000, 0x1760, 0x0008, 0x8062, 0x0008, 0x000f, 0x0008,
+ 0x8066, 0x0000, 0x0011, 0x0008, 0x4458, 0x0003, 0x01fe, 0x0008,
+ 0x42e0, 0x0009, 0x0e2f, 0x000b, 0x00fe, 0x0000, 0x43e0, 0x0001,
+ 0x0e2f, 0x000b, 0x1734, 0x0000, 0x1530, 0x0000, 0x1632, 0x0008,
+ 0x0d2a, 0x0008, 0x9880, 0x0001, 0x0010, 0x0000, 0x8060, 0x0000,
+ 0x0400, 0x0000, 0x7f62, 0x0008, 0x8066, 0x0000, 0x1e0a, 0x0008,
+ 0x446a, 0x000b, 0x808a, 0x0008, 0x0003, 0x0008, 0x1a60, 0x0000,
+ 0x8062, 0x0008, 0x0002, 0x0000, 0x5870, 0x000b, 0x8066, 0x0000,
+ 0x3679, 0x0000, 0x4473, 0x0003, 0x5874, 0x0003, 0x3efe, 0x0008,
+ 0x7f4f, 0x0002, 0x087a, 0x000b, 0x0d00, 0x0000, 0x0082, 0x0004,
+ 0x8054, 0x0008, 0x0011, 0x0008, 0x8074, 0x0000, 0x1010, 0x0008,
+ 0x1efe, 0x0000, 0x300a, 0x000b, 0x00d0, 0x000c, 0x000a, 0x000b,
+ 0x00fe, 0x0000, 0x348a, 0x000b, 0x1a60, 0x0000, 0x8062, 0x0008,
+ 0x0007, 0x0000, 0x8066, 0x0000, 0x0231, 0x0008, 0x4489, 0x0003,
+ 0x03fe, 0x0000, 0x04d0, 0x0001, 0x0cc4, 0x0003, 0x82c0, 0x0001,
+ 0x1f00, 0x0000, 0xffa0, 0x0001, 0x0400, 0x0000, 0x08a2, 0x000b,
+ 0x14cc, 0x000b, 0x01fe, 0x0008, 0x0580, 0x0009, 0x7f06, 0x0000,
+ 0x8690, 0x0009, 0x0000, 0x0008, 0x7f0c, 0x0000, 0x02fe, 0x0008,
+ 0xffc0, 0x0001, 0x00ff, 0x0008, 0x0680, 0x0009, 0x10a2, 0x000b,
+ 0x7f08, 0x0008, 0x84c0, 0x0001, 0xff00, 0x0008, 0x08c4, 0x000b,
+ 0xb9c0, 0x0009, 0x0030, 0x0008, 0x0cb3, 0x0003, 0x8060, 0x0000,
+ 0x0400, 0x0000, 0x80fe, 0x0008, 0x19e6, 0x0001, 0x7f62, 0x0008,
+ 0x8066, 0x0000, 0x0409, 0x0000, 0x44ac, 0x000b, 0x80fe, 0x0008,
+ 0x19e5, 0x0001, 0x7f62, 0x0008, 0x8066, 0x0000, 0x040a, 0x0000,
+ 0x44b2, 0x000b, 0x00fe, 0x0000, 0x34ba, 0x000b, 0x8072, 0x0000,
+ 0x1010, 0x0008, 0x3944, 0x0002, 0x08b5, 0x000b, 0x00be, 0x000b,
+ 0x8072, 0x0000, 0x2020, 0x0008, 0x3945, 0x000a, 0x08ba, 0x000b,
+ 0x3946, 0x000a, 0x0ccb, 0x0003, 0x0000, 0x0007, 0x3943, 0x000a,
+ 0x08cb, 0x000b, 0x00be, 0x000b, 0x00fe, 0x0000, 0x34c9, 0x0003,
+ 0x8072, 0x0000, 0x1000, 0x0000, 0x00cb, 0x0003, 0x8072, 0x0000,
+ 0x2000, 0x0000, 0x4000, 0x000f, 0x86c0, 0x0009, 0xfc00, 0x0008,
+ 0x08c4, 0x000b, 0x00a2, 0x0003, 0x1c60, 0x0000, 0x1b62, 0x0000,
+ 0x8066, 0x0000, 0x0231, 0x0008, 0x44d4, 0x000b, 0x58d5, 0x000b,
+ 0x0140, 0x0008, 0x0242, 0x0000, 0x1f43, 0x0002, 0x0ce3, 0x0003,
+ 0x0d44, 0x0000, 0x0d46, 0x0008, 0x0348, 0x0008, 0x044a, 0x0008,
+ 0x030a, 0x0008, 0x040c, 0x0000, 0x0d06, 0x0000, 0x0d08, 0x0008,
+ 0x00e7, 0x000b, 0x0344, 0x0008, 0x0446, 0x0008, 0x0548, 0x0008,
+ 0x064a, 0x0000, 0x58e7, 0x0003, 0x3efe, 0x0008, 0x7f4f, 0x0002,
+ 0x08ee, 0x0003, 0x8000, 0x0000, 0x0001, 0x0000, 0x0082, 0x0004,
+ 0x8054, 0x0008, 0x0001, 0x0000, 0x8074, 0x0000, 0x2020, 0x0008,
+ 0x4000, 0x000f, 0x3a40, 0x000a, 0x0c0d, 0x0003, 0x2b24, 0x0008,
+ 0x2b24, 0x0008, 0x58f7, 0x000b, 0x8054, 0x0008, 0x0002, 0x0000,
+ 0x1242, 0x0002, 0x0945, 0x0003, 0x3a45, 0x000a, 0x0934, 0x0003,
+ 0x8072, 0x0000, 0x1000, 0x0000, 0x3945, 0x000a, 0x0904, 0x0003,
+ 0x8072, 0x0000, 0x3010, 0x0000, 0x1e10, 0x000a, 0x7f3c, 0x0000,
+ 0x092f, 0x0003, 0x1d00, 0x0002, 0x7f3a, 0x0000, 0x0d60, 0x0000,
+ 0x7f62, 0x0008, 0x8066, 0x0000, 0x0009, 0x0008, 0x450d, 0x000b,
+ 0x00fe, 0x0000, 0x352c, 0x0003, 0x1c60, 0x0000, 0x8062, 0x0008,
+ 0x0001, 0x0000, 0x8066, 0x0000, 0x0009, 0x0008, 0x4515, 0x000b,
+ 0x00fe, 0x0000, 0x3219, 0x000b, 0x0038, 0x0000, 0x0060, 0x0008,
+ 0x8062, 0x0008, 0x001a, 0x0000, 0x8066, 0x0000, 0x0009, 0x0008,
+ 0x451e, 0x0003, 0x80c0, 0x0009, 0x00ff, 0x0008, 0x7f3e, 0x0008,
+ 0x0d60, 0x0000, 0x0efe, 0x0008, 0x1f80, 0x0001, 0x7f62, 0x0008,
+ 0x8066, 0x0000, 0x0009, 0x0008, 0x4528, 0x0003, 0x003a, 0x0008,
+ 0x1dfe, 0x0000, 0x0109, 0x0003, 0x0036, 0x0008, 0x00d0, 0x000c,
+ 0x0145, 0x000b, 0x8074, 0x0000, 0x2000, 0x0000, 0x8072, 0x0000,
+ 0x2000, 0x0000, 0x0145, 0x000b, 0x3a44, 0x0002, 0x0a42, 0x000b,
+ 0x8074, 0x0000, 0x1000, 0x0000, 0x8072, 0x0000, 0x1000, 0x0000,
+ 0x2d0e, 0x0000, 0x2d0e, 0x0000, 0x3616, 0x0003, 0x26fe, 0x0008,
+ 0x26fe, 0x0008, 0x2700, 0x0008, 0x2700, 0x0008, 0x00d0, 0x0009,
+ 0x0d57, 0x000b, 0x8074, 0x0000, 0x4040, 0x0008, 0x5945, 0x0003,
+ 0x50f3, 0x000b, 0x3a46, 0x000a, 0x0d57, 0x000b, 0x3a47, 0x0002,
+ 0x0952, 0x0003, 0x8054, 0x0008, 0x0004, 0x0000, 0x8074, 0x0000,
+ 0x8000, 0x0000, 0x8072, 0x0000, 0x3000, 0x0008, 0x019a, 0x0003,
+ 0x92c0, 0x0009, 0x0fc8, 0x0000, 0x080a, 0x0003, 0x1246, 0x000a,
+ 0x0e13, 0x000b, 0x1a60, 0x0000, 0x8062, 0x0008, 0x0002, 0x0000,
+ 0x8066, 0x0000, 0x362a, 0x0000, 0x455c, 0x0003, 0x2000, 0x0000,
+ 0x2000, 0x0000, 0x2102, 0x0000, 0x2102, 0x0000, 0x2204, 0x0000,
+ 0x2204, 0x0000, 0x2306, 0x0000, 0x2306, 0x0000, 0x2408, 0x0000,
+ 0x2408, 0x0000, 0x250a, 0x0000, 0x250a, 0x0000, 0x260c, 0x0000,
+ 0x260c, 0x0000, 0x270e, 0x0000, 0x270e, 0x0000, 0x2810, 0x0000,
+ 0x2810, 0x0000, 0x2912, 0x0000, 0x2912, 0x0000, 0x1a60, 0x0000,
+ 0x8062, 0x0008, 0x0007, 0x0000, 0x8066, 0x0000, 0x0052, 0x0000,
+ 0x4576, 0x000b, 0x92c0, 0x0009, 0x0780, 0x0008, 0x0e2c, 0x000b,
+ 0x124b, 0x0002, 0x097f, 0x0003, 0x2e4d, 0x0002, 0x2e4d, 0x0002,
+ 0x0a16, 0x0003, 0x3a46, 0x000a, 0x0d8c, 0x000b, 0x5981, 0x000b,
+ 0x8054, 0x0008, 0x0004, 0x0000, 0x1243, 0x000a, 0x0996, 0x000b,
+ 0x8010, 0x0008, 0x000d, 0x0000, 0x0207, 0x0004, 0x1810, 0x0000,
+ 0x0207, 0x0004, 0x0196, 0x0003, 0x194d, 0x000a, 0x0990, 0x000b,
+ 0x1243, 0x000a, 0x0a20, 0x0003, 0x5990, 0x000b, 0x8054, 0x0008,
+ 0x0004, 0x0000, 0x01fc, 0x000c, 0x1810, 0x0000, 0x0207, 0x0004,
+ 0x8074, 0x0000, 0xf000, 0x0008, 0x8072, 0x0000, 0x3000, 0x0008,
+ 0x0d30, 0x0000, 0x3a42, 0x0002, 0x0da0, 0x0003, 0x15fe, 0x0008,
+ 0x3451, 0x000b, 0x000a, 0x000b, 0x8074, 0x0000, 0x0501, 0x0000,
+ 0x8010, 0x0008, 0x000c, 0x0008, 0x0207, 0x0004, 0x000a, 0x000b,
+ 0xbbe0, 0x0009, 0x0030, 0x0008, 0x0db6, 0x000b, 0x18fe, 0x0000,
+ 0x3ce0, 0x0009, 0x09b3, 0x0003, 0x15fe, 0x0008, 0x3ce0, 0x0009,
+ 0x09b3, 0x0003, 0x01f7, 0x0004, 0x8076, 0x0008, 0x0040, 0x0000,
+ 0x01f4, 0x000b, 0x8076, 0x0008, 0x0041, 0x0008, 0x01f4, 0x000b,
+ 0xbbe0, 0x0009, 0x0032, 0x0000, 0x0dbb, 0x0003, 0x3c1e, 0x0008,
+ 0x01f4, 0x000b, 0xbbe0, 0x0009, 0x0037, 0x0000, 0x0dd9, 0x000b,
+ 0x18fe, 0x0000, 0x3ce0, 0x0009, 0x0db3, 0x000b, 0x8076, 0x0008,
+ 0x0040, 0x0000, 0x1a60, 0x0000, 0x8062, 0x0008, 0x000d, 0x0000,
+ 0x2604, 0x0008, 0x2604, 0x0008, 0x2706, 0x0008, 0x2706, 0x0008,
+ 0x2808, 0x0000, 0x2808, 0x0000, 0x290a, 0x0000, 0x290a, 0x0000,
+ 0x8066, 0x0000, 0x0422, 0x0000, 0x45d0, 0x000b, 0x01fc, 0x000c,
+ 0x8054, 0x0008, 0x0004, 0x0000, 0x8074, 0x0000, 0xf000, 0x0008,
+ 0x8072, 0x0000, 0xb000, 0x0000, 0x019a, 0x0003, 0xbbe0, 0x0009,
+ 0x0038, 0x0000, 0x0deb, 0x0003, 0x18fe, 0x0000, 0x3ce0, 0x0009,
+ 0x09e8, 0x000b, 0x15fe, 0x0008, 0x3ce0, 0x0009, 0x0daf, 0x0003,
+ 0x01f7, 0x0004, 0x8076, 0x0008, 0x0040, 0x0000, 0x8072, 0x0000,
+ 0x8000, 0x0000, 0x0239, 0x0003, 0x8076, 0x0008, 0x0042, 0x0008,
+ 0x01f4, 0x000b, 0xbbe0, 0x0009, 0x0016, 0x0000, 0x0df4, 0x000b,
+ 0x3a44, 0x0002, 0x0c0c, 0x000b, 0x8072, 0x0000, 0x8000, 0x0000,
+ 0x8000, 0x000f, 0x000a, 0x000b, 0x8072, 0x0000, 0x8000, 0x0000,
+ 0x000a, 0x000b, 0x3d30, 0x000a, 0x7f00, 0x0000, 0xbc80, 0x0001,
+ 0x0007, 0x0000, 0x0200, 0x0003, 0x1930, 0x000a, 0x7f00, 0x0000,
+ 0x9880, 0x0001, 0x0007, 0x0000, 0x8060, 0x0000, 0x0400, 0x0000,
+ 0x7f62, 0x0008, 0x8066, 0x0000, 0x000a, 0x0008, 0x4605, 0x0003,
+ 0x4000, 0x000f, 0x2207, 0x0003, 0x0870, 0x0008, 0x4000, 0x000f,
+ 0xbac0, 0x0009, 0x0090, 0x0008, 0x0a10, 0x0003, 0x8074, 0x0000,
+ 0x0706, 0x0000, 0x0212, 0x0003, 0x8074, 0x0000, 0x0703, 0x0000,
+ 0x4000, 0x000f, 0x8010, 0x0008, 0x0023, 0x0000, 0x0247, 0x0003,
+ 0x8010, 0x0008, 0x0022, 0x0008, 0x0247, 0x0003, 0x01fc, 0x000c,
+ 0x8010, 0x0008, 0x0007, 0x0000, 0x0207, 0x0004, 0x1810, 0x0000,
+ 0x0207, 0x0004, 0x0253, 0x0003, 0x01fc, 0x000c, 0x8010, 0x0008,
+ 0x001b, 0x0008, 0x0207, 0x0004, 0x1810, 0x0000, 0x0207, 0x0004,
+ 0x8074, 0x0000, 0xf080, 0x0000, 0x8072, 0x0000, 0x3000, 0x0008,
+ 0x0d30, 0x0000, 0x000a, 0x000b, 0x8010, 0x0008, 0x0009, 0x0008,
+ 0x0247, 0x0003, 0x808c, 0x0008, 0x0001, 0x0000, 0x8010, 0x0008,
+ 0x0004, 0x0000, 0x4143, 0x000a, 0x085f, 0x0003, 0x3a44, 0x0002,
+ 0x0c0a, 0x000b, 0x0d2a, 0x0008, 0x0247, 0x0003, 0x8010, 0x0008,
+ 0x0003, 0x0008, 0x024b, 0x0003, 0x8010, 0x0008, 0x000b, 0x0000,
+ 0x024b, 0x0003, 0x8010, 0x0008, 0x0002, 0x0000, 0x024b, 0x0003,
+ 0x3a47, 0x0002, 0x0d45, 0x000b, 0x8010, 0x0008, 0x0006, 0x0008,
+ 0x024b, 0x0003, 0x8074, 0x0000, 0xf000, 0x0008, 0x8072, 0x0000,
+ 0x3000, 0x0008, 0x0207, 0x0004, 0x020a, 0x000c, 0x3a40, 0x000a,
+ 0x080a, 0x0003, 0x8010, 0x0008, 0x000c, 0x0008, 0x0207, 0x0004,
+ 0x000a, 0x000b, 0x8074, 0x0000, 0xf080, 0x0000, 0x8072, 0x0000,
+ 0x3000, 0x0008, 0x0d30, 0x0000, 0x2e4d, 0x0002, 0x2e4d, 0x0002,
+ 0x0a5e, 0x0003, 0x8054, 0x0008, 0x0019, 0x0000, 0x000a, 0x000b,
+ 0x8054, 0x0008, 0x0009, 0x0008, 0x000a, 0x000b, 0x3a44, 0x0002,
+ 0x0c0a, 0x000b, 0x023c, 0x0003, 0x6c3e, 0xf40f, 0x0001, 0x0002,
+ 0x0004, 0x0008, 0x0010, 0x0020, 0x0040, 0x0080, 0x0100, 0x0200,
+ 0x0400, 0x0800, 0x1000, 0x2000, 0x4000, 0x8000, 0x0e6c
};
#ifdef ISP_2300_RISC_CODE
#undef ISP_2300_RISC_CODE
diff --git a/sys/dev/md/md.c b/sys/dev/md/md.c
index 4d4c22c..f1fd93f 100644
--- a/sys/dev/md/md.c
+++ b/sys/dev/md/md.c
@@ -1090,7 +1090,7 @@ mdresize(struct md_s *sc, struct md_ioctl *mdio)
case MD_VNODE:
break;
case MD_SWAP:
- if (mdio->md_mediasize == 0 ||
+ if (mdio->md_mediasize <= 0 ||
(mdio->md_mediasize % PAGE_SIZE) != 0)
return (EDOM);
oldpages = OFF_TO_IDX(round_page(sc->mediasize));
@@ -1148,7 +1148,7 @@ mdcreate_swap(struct md_s *sc, struct md_ioctl *mdio, struct thread *td)
* Range check. Disallow negative sizes or any size less then the
* size of a page. Then round to a page.
*/
- if (sc->mediasize == 0 || (sc->mediasize % PAGE_SIZE) != 0)
+ if (sc->mediasize <= 0 || (sc->mediasize % PAGE_SIZE) != 0)
return (EDOM);
/*
@@ -1189,6 +1189,7 @@ xmdctlioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags, struct thread
struct md_ioctl *mdio;
struct md_s *sc;
int error, i;
+ unsigned sectsize;
if (md_debug)
printf("mdctlioctl(%s %lx %p %x %p)\n",
@@ -1217,6 +1218,12 @@ xmdctlioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags, struct thread
default:
return (EINVAL);
}
+ if (mdio->md_sectorsize == 0)
+ sectsize = DEV_BSIZE;
+ else
+ sectsize = mdio->md_sectorsize;
+ if (sectsize > MAXPHYS || mdio->md_mediasize < sectsize)
+ return (EINVAL);
if (mdio->md_options & MD_AUTOUNIT)
sc = mdnew(-1, &error, mdio->md_type);
else {
@@ -1229,10 +1236,7 @@ xmdctlioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags, struct thread
if (mdio->md_options & MD_AUTOUNIT)
mdio->md_unit = sc->unit;
sc->mediasize = mdio->md_mediasize;
- if (mdio->md_sectorsize == 0)
- sc->sectorsize = DEV_BSIZE;
- else
- sc->sectorsize = mdio->md_sectorsize;
+ sc->sectorsize = sectsize;
error = EDOOFUS;
switch (sc->type) {
case MD_MALLOC:
@@ -1282,6 +1286,8 @@ xmdctlioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flags, struct thread
sc = mdfind(mdio->md_unit);
if (sc == NULL)
return (ENOENT);
+ if (mdio->md_mediasize < sc->sectorsize)
+ return (EINVAL);
if (mdio->md_mediasize < sc->mediasize &&
!(sc->flags & MD_FORCE) &&
!(mdio->md_options & MD_FORCE))
diff --git a/sys/dev/mge/if_mge.c b/sys/dev/mge/if_mge.c
index 5b0ede3..9437793 100644
--- a/sys/dev/mge/if_mge.c
+++ b/sys/dev/mge/if_mge.c
@@ -258,7 +258,9 @@ mge_ver_params(struct mge_softc *sc)
uint32_t d, r;
soc_id(&d, &r);
- if (d == MV_DEV_88F6281 || d == MV_DEV_MV78100 ||
+ if (d == MV_DEV_88F6281 ||
+ d == MV_DEV_88F6282 ||
+ d == MV_DEV_MV78100 ||
d == MV_DEV_MV78100_Z0) {
sc->mge_ver = 2;
sc->mge_mtu = 0x4e8;
diff --git a/sys/dev/mii/e1000phy.c b/sys/dev/mii/e1000phy.c
index 91ae44d..b7fe730 100644
--- a/sys/dev/mii/e1000phy.c
+++ b/sys/dev/mii/e1000phy.c
@@ -106,6 +106,7 @@ static const struct mii_phydesc e1000phys[] = {
MII_PHY_DESC(xxMARVELL, E1111),
MII_PHY_DESC(xxMARVELL, E1116),
MII_PHY_DESC(xxMARVELL, E1116R),
+ MII_PHY_DESC(xxMARVELL, E1116R_29),
MII_PHY_DESC(xxMARVELL, E1118),
MII_PHY_DESC(xxMARVELL, E1149R),
MII_PHY_DESC(xxMARVELL, E3016),
@@ -208,6 +209,7 @@ e1000phy_reset(struct mii_softc *sc)
case MII_MODEL_xxMARVELL_E1111:
case MII_MODEL_xxMARVELL_E1112:
case MII_MODEL_xxMARVELL_E1116:
+ case MII_MODEL_xxMARVELL_E1116R_29:
case MII_MODEL_xxMARVELL_E1118:
case MII_MODEL_xxMARVELL_E1149:
case MII_MODEL_xxMARVELL_E1149R:
@@ -215,7 +217,8 @@ e1000phy_reset(struct mii_softc *sc)
/* Disable energy detect mode. */
reg &= ~E1000_SCR_EN_DETECT_MASK;
reg |= E1000_SCR_AUTO_X_MODE;
- if (sc->mii_mpd_model == MII_MODEL_xxMARVELL_E1116)
+ if (sc->mii_mpd_model == MII_MODEL_xxMARVELL_E1116 ||
+ sc->mii_mpd_model == MII_MODEL_xxMARVELL_E1116R_29)
reg &= ~E1000_SCR_POWER_DOWN;
reg |= E1000_SCR_ASSERT_CRS_ON_TX;
break;
@@ -243,6 +246,7 @@ e1000phy_reset(struct mii_softc *sc)
PHY_WRITE(sc, E1000_SCR, reg);
if (sc->mii_mpd_model == MII_MODEL_xxMARVELL_E1116 ||
+ sc->mii_mpd_model == MII_MODEL_xxMARVELL_E1116R_29 ||
sc->mii_mpd_model == MII_MODEL_xxMARVELL_E1149 ||
sc->mii_mpd_model == MII_MODEL_xxMARVELL_E1149R) {
PHY_WRITE(sc, E1000_EADR, 2);
@@ -259,6 +263,7 @@ e1000phy_reset(struct mii_softc *sc)
case MII_MODEL_xxMARVELL_E1118:
break;
case MII_MODEL_xxMARVELL_E1116:
+ case MII_MODEL_xxMARVELL_E1116R_29:
page = PHY_READ(sc, E1000_EADR);
/* Select page 3, LED control register. */
PHY_WRITE(sc, E1000_EADR, 3);
diff --git a/sys/dev/mlx/mlxvar.h b/sys/dev/mlx/mlxvar.h
index a09f907..dbb7666 100644
--- a/sys/dev/mlx/mlxvar.h
+++ b/sys/dev/mlx/mlxvar.h
@@ -47,7 +47,7 @@
* making that fit cleanly without crossing page boundaries requires rounding up
* to the next power of two.
*/
-#define MLX_MAXPHYS (128 * 124)
+#define MLX_MAXPHYS (128 * 1024)
#define MLX_NSEG 64
#define MLX_NSLOTS 256 /* max number of command slots */
diff --git a/sys/dev/mps/mps.c b/sys/dev/mps/mps.c
index 1d935be..ce94a06 100644
--- a/sys/dev/mps/mps.c
+++ b/sys/dev/mps/mps.c
@@ -924,7 +924,7 @@ mps_alloc_requests(struct mps_softc *sc)
NULL, NULL, /* filter, filterarg */
BUS_SPACE_MAXSIZE_32BIT,/* maxsize */
nsegs, /* nsegments */
- BUS_SPACE_MAXSIZE_32BIT,/* maxsegsize */
+ BUS_SPACE_MAXSIZE_24BIT,/* maxsegsize */
BUS_DMA_ALLOCNOW, /* flags */
busdma_lock_mutex, /* lockfunc */
&sc->mps_mtx, /* lockarg */
@@ -2014,7 +2014,6 @@ mps_push_sge(struct mps_command *cm, void *sgep, size_t len, int segsleft)
MPI2_SGE_SIMPLE64 *sge = sgep;
int error, type;
uint32_t saved_buf_len, saved_address_low, saved_address_high;
- u32 sge_flags;
type = (tc->Flags & MPI2_SGE_FLAGS_ELEMENT_MASK);
@@ -2034,14 +2033,12 @@ mps_push_sge(struct mps_command *cm, void *sgep, size_t len, int segsleft)
break;
case MPI2_SGE_FLAGS_SIMPLE_ELEMENT:
/* Driver only uses 64-bit SGE simple elements */
- sge = sgep;
if (len != MPS_SGE64_SIZE)
panic("SGE simple %p length %u or %zu?", sge,
MPS_SGE64_SIZE, len);
- if (((sge->FlagsLength >> MPI2_SGE_FLAGS_SHIFT) &
+ if (((le32toh(sge->FlagsLength) >> MPI2_SGE_FLAGS_SHIFT) &
MPI2_SGE_FLAGS_ADDRESS_SIZE) == 0)
- panic("SGE simple %p flags %02x not marked 64-bit?",
- sge, sge->FlagsLength >> MPI2_SGE_FLAGS_SHIFT);
+ panic("SGE simple %p not marked 64-bit?", sge);
break;
default:
@@ -2073,8 +2070,8 @@ mps_push_sge(struct mps_command *cm, void *sgep, size_t len, int segsleft)
* Mark as last element in this chain if necessary.
*/
if (type == MPI2_SGE_FLAGS_SIMPLE_ELEMENT) {
- sge->FlagsLength |=
- (MPI2_SGE_FLAGS_LAST_ELEMENT << MPI2_SGE_FLAGS_SHIFT);
+ sge->FlagsLength |= htole32(
+ MPI2_SGE_FLAGS_LAST_ELEMENT << MPI2_SGE_FLAGS_SHIFT);
}
/*
@@ -2083,11 +2080,6 @@ mps_push_sge(struct mps_command *cm, void *sgep, size_t len, int segsleft)
* understanding the code.
*/
cm->cm_sglsize -= len;
- /* Endian Safe code */
- sge_flags = sge->FlagsLength;
- sge->FlagsLength = htole32(sge_flags);
- sge->Address.High = htole32(sge->Address.High);
- sge->Address.Low = htole32(sge->Address.Low);
bcopy(sgep, cm->cm_sge, len);
cm->cm_sge = (MPI2_SGE_IO_UNION *)((uintptr_t)cm->cm_sge + len);
return (mps_add_chain(cm));
@@ -2127,27 +2119,22 @@ mps_push_sge(struct mps_command *cm, void *sgep, size_t len, int segsleft)
* 2 SGL's for a bi-directional request, they both use the same
* DMA buffer (same cm command).
*/
- saved_buf_len = sge->FlagsLength & 0x00FFFFFF;
+ saved_buf_len = le32toh(sge->FlagsLength) & 0x00FFFFFF;
saved_address_low = sge->Address.Low;
saved_address_high = sge->Address.High;
if (cm->cm_out_len) {
- sge->FlagsLength = cm->cm_out_len |
+ sge->FlagsLength = htole32(cm->cm_out_len |
((uint32_t)(MPI2_SGE_FLAGS_SIMPLE_ELEMENT |
MPI2_SGE_FLAGS_END_OF_BUFFER |
MPI2_SGE_FLAGS_HOST_TO_IOC |
MPI2_SGE_FLAGS_64_BIT_ADDRESSING) <<
- MPI2_SGE_FLAGS_SHIFT);
+ MPI2_SGE_FLAGS_SHIFT));
cm->cm_sglsize -= len;
- /* Endian Safe code */
- sge_flags = sge->FlagsLength;
- sge->FlagsLength = htole32(sge_flags);
- sge->Address.High = htole32(sge->Address.High);
- sge->Address.Low = htole32(sge->Address.Low);
bcopy(sgep, cm->cm_sge, len);
cm->cm_sge = (MPI2_SGE_IO_UNION *)((uintptr_t)cm->cm_sge
+ len);
}
- sge->FlagsLength = saved_buf_len |
+ saved_buf_len |=
((uint32_t)(MPI2_SGE_FLAGS_SIMPLE_ELEMENT |
MPI2_SGE_FLAGS_END_OF_BUFFER |
MPI2_SGE_FLAGS_LAST_ELEMENT |
@@ -2155,24 +2142,20 @@ mps_push_sge(struct mps_command *cm, void *sgep, size_t len, int segsleft)
MPI2_SGE_FLAGS_64_BIT_ADDRESSING) <<
MPI2_SGE_FLAGS_SHIFT);
if (cm->cm_flags & MPS_CM_FLAGS_DATAIN) {
- sge->FlagsLength |=
+ saved_buf_len |=
((uint32_t)(MPI2_SGE_FLAGS_IOC_TO_HOST) <<
MPI2_SGE_FLAGS_SHIFT);
} else {
- sge->FlagsLength |=
+ saved_buf_len |=
((uint32_t)(MPI2_SGE_FLAGS_HOST_TO_IOC) <<
MPI2_SGE_FLAGS_SHIFT);
}
+ sge->FlagsLength = htole32(saved_buf_len);
sge->Address.Low = saved_address_low;
sge->Address.High = saved_address_high;
}
cm->cm_sglsize -= len;
- /* Endian Safe code */
- sge_flags = sge->FlagsLength;
- sge->FlagsLength = htole32(sge_flags);
- sge->Address.High = htole32(sge->Address.High);
- sge->Address.Low = htole32(sge->Address.Low);
bcopy(sgep, cm->cm_sge, len);
cm->cm_sge = (MPI2_SGE_IO_UNION *)((uintptr_t)cm->cm_sge + len);
return (0);
@@ -2190,10 +2173,10 @@ mps_add_dmaseg(struct mps_command *cm, vm_paddr_t pa, size_t len, u_int flags,
/*
* This driver always uses 64-bit address elements for simplicity.
*/
+ bzero(&sge, sizeof(sge));
flags |= MPI2_SGE_FLAGS_SIMPLE_ELEMENT |
MPI2_SGE_FLAGS_64_BIT_ADDRESSING;
- /* Set Endian safe macro in mps_push_sge */
- sge.FlagsLength = len | (flags << MPI2_SGE_FLAGS_SHIFT);
+ sge.FlagsLength = htole32(len | (flags << MPI2_SGE_FLAGS_SHIFT));
mps_from_u64(pa, &sge.Address);
return (mps_push_sge(cm, &sge, sizeof sge, segsleft));
@@ -2290,7 +2273,6 @@ mps_data_cb2(void *arg, bus_dma_segment_t *segs, int nsegs, bus_size_t mapsize,
int
mps_map_command(struct mps_softc *sc, struct mps_command *cm)
{
- MPI2_SGE_SIMPLE32 *sge;
int error = 0;
if (cm->cm_flags & MPS_CM_FLAGS_USE_UIO) {
@@ -2301,15 +2283,8 @@ mps_map_command(struct mps_softc *sc, struct mps_command *cm)
cm->cm_data, cm->cm_length, mps_data_cb, cm, 0);
} else {
/* Add a zero-length element as needed */
- if (cm->cm_sge != NULL) {
- sge = (MPI2_SGE_SIMPLE32 *)cm->cm_sge;
- sge->FlagsLength = htole32((MPI2_SGE_FLAGS_LAST_ELEMENT |
- MPI2_SGE_FLAGS_END_OF_BUFFER |
- MPI2_SGE_FLAGS_END_OF_LIST |
- MPI2_SGE_FLAGS_SIMPLE_ELEMENT) <<
- MPI2_SGE_FLAGS_SHIFT);
- sge->Address = 0;
- }
+ if (cm->cm_sge != NULL)
+ mps_add_dmaseg(cm, 0, 0, 0, 1);
mps_enqueue_request(sc, cm);
}
diff --git a/sys/dev/mps/mps_sas.c b/sys/dev/mps/mps_sas.c
index ecdc10e..dba981e 100644
--- a/sys/dev/mps/mps_sas.c
+++ b/sys/dev/mps/mps_sas.c
@@ -3003,6 +3003,7 @@ mpssas_action_resetdev(struct mpssas_softc *sassc, union ccb *ccb)
tm->cm_desc.HighPriority.RequestFlags = MPI2_REQ_DESCRIPT_FLAGS_HIGH_PRIORITY;
tm->cm_complete = mpssas_resetdev_complete;
tm->cm_complete_data = ccb;
+ tm->cm_targ = targ;
mps_map_command(sc, tm);
}
diff --git a/sys/dev/mps/mps_sas_lsi.c b/sys/dev/mps/mps_sas_lsi.c
index 9cedcd3..4763192 100644
--- a/sys/dev/mps/mps_sas_lsi.c
+++ b/sys/dev/mps/mps_sas_lsi.c
@@ -796,8 +796,10 @@ mpssas_get_sata_identify(struct mps_softc *sc, u16 handle,
if (!buffer)
return ENOMEM;
- if ((cm = mps_alloc_command(sc)) == NULL)
+ if ((cm = mps_alloc_command(sc)) == NULL) {
+ free(buffer, M_MPT2);
return (EBUSY);
+ }
mpi_request = (MPI2_SATA_PASSTHROUGH_REQUEST *)cm->cm_req;
bzero(mpi_request,sizeof(MPI2_SATA_PASSTHROUGH_REQUEST));
mpi_request->Function = MPI2_FUNCTION_SATA_PASSTHROUGH;
diff --git a/sys/dev/mps/mps_table.c b/sys/dev/mps/mps_table.c
index c9acefe..e004f8d 100644
--- a/sys/dev/mps/mps_table.c
+++ b/sys/dev/mps/mps_table.c
@@ -463,10 +463,12 @@ mps_print_sgl(struct mps_softc *sc, struct mps_command *cm, int offset)
sge = (MPI2_SGE_SIMPLE64 *)&frame[offset * 4];
printf("SGL for command %p\n", cm);
+ hexdump(frame, 128, NULL, 0);
while (frame != NULL) {
- flags = sge->FlagsLength >> MPI2_SGE_FLAGS_SHIFT;
- printf("seg%d flags=0x%x len=0x%x addr=0x%jx\n", i, flags,
- sge->FlagsLength & 0xffffff, mps_to_u64(&sge->Address));
+ flags = le32toh(sge->FlagsLength) >> MPI2_SGE_FLAGS_SHIFT;
+ printf("seg%d flags=0x%02x len=0x%06x addr=0x%016jx\n",
+ i, flags, le32toh(sge->FlagsLength) & 0xffffff,
+ mps_to_u64(&sge->Address));
if (flags & (MPI2_SGE_FLAGS_END_OF_LIST |
MPI2_SGE_FLAGS_END_OF_BUFFER))
break;
@@ -475,8 +477,8 @@ mps_print_sgl(struct mps_softc *sc, struct mps_command *cm, int offset)
if (flags & MPI2_SGE_FLAGS_LAST_ELEMENT) {
sgc = (MPI2_SGE_CHAIN32 *)sge;
printf("chain flags=0x%x len=0x%x Offset=0x%x "
- "Address=0x%x\n", sgc->Flags, sgc->Length,
- sgc->NextChainOffset, sgc->Address);
+ "Address=0x%x\n", sgc->Flags, le16toh(sgc->Length),
+ sgc->NextChainOffset, le32toh(sgc->Address));
if (chain == NULL)
chain = TAILQ_FIRST(&cm->cm_chain_list);
else
diff --git a/sys/dev/mps/mps_user.c b/sys/dev/mps/mps_user.c
index 98dc511..ee03573 100644
--- a/sys/dev/mps/mps_user.c
+++ b/sys/dev/mps/mps_user.c
@@ -534,11 +534,6 @@ mpi_pre_fw_upload(struct mps_command *cm, struct mps_usr_command *cmd)
return (EINVAL);
mpi_init_sge(cm, req, &req->SGL);
- if (cmd->len == 0) {
- /* Perhaps just asking what the size of the fw is? */
- return (0);
- }
-
bzero(&tc, sizeof tc);
/*
@@ -554,6 +549,8 @@ mpi_pre_fw_upload(struct mps_command *cm, struct mps_usr_command *cmd)
tc.ImageOffset = 0;
tc.ImageSize = cmd->len;
+ cm->cm_flags |= MPS_CM_FLAGS_DATAIN;
+
return (mps_push_sge(cm, &tc, sizeof tc, 0));
}
@@ -692,13 +689,6 @@ mps_user_command(struct mps_softc *sc, struct mps_usr_command *cmd)
mps_dprint(sc, MPS_INFO, "mps_user_command: Function %02X "
"MsgFlags %02X\n", hdr->Function, hdr->MsgFlags );
- err = mps_user_setup_request(cm, cmd);
- if (err != 0) {
- mps_printf(sc, "mps_user_command: unsupported function 0x%X\n",
- hdr->Function );
- goto RetFreeUnlocked;
- }
-
if (cmd->len > 0) {
buf = malloc(cmd->len, M_MPSUSER, M_WAITOK|M_ZERO);
if(!buf) {
@@ -716,8 +706,15 @@ mps_user_command(struct mps_softc *sc, struct mps_usr_command *cmd)
cm->cm_flags = MPS_CM_FLAGS_SGE_SIMPLE;
cm->cm_desc.Default.RequestFlags = MPI2_REQ_DESCRIPT_FLAGS_DEFAULT_TYPE;
+ err = mps_user_setup_request(cm, cmd);
+ if (err != 0) {
+ mps_printf(sc, "mps_user_command: unsupported function 0x%X\n",
+ hdr->Function );
+ goto RetFreeUnlocked;
+ }
+
mps_lock(sc);
- err = mps_wait_command(sc, cm, 30);
+ err = mps_wait_command(sc, cm, 60);
if (err) {
mps_printf(sc, "%s: invalid request: error %d\n",
@@ -726,7 +723,10 @@ mps_user_command(struct mps_softc *sc, struct mps_usr_command *cmd)
}
rpl = (MPI2_DEFAULT_REPLY *)cm->cm_reply;
- sz = rpl->MsgLength * 4;
+ if (rpl != NULL)
+ sz = rpl->MsgLength * 4;
+ else
+ sz = 0;
if (sz > cmd->rpl_len) {
mps_printf(sc,
diff --git a/sys/dev/mps/mpsvar.h b/sys/dev/mps/mpsvar.h
index 2acb75b..ac0f0da 100644
--- a/sys/dev/mps/mpsvar.h
+++ b/sys/dev/mps/mpsvar.h
@@ -32,7 +32,7 @@
#ifndef _MPSVAR_H
#define _MPSVAR_H
-#define MPS_DRIVER_VERSION "14.00.00.01-fbsd"
+#define MPS_DRIVER_VERSION "14.00.00.02-fbsd"
#define MPS_DB_MAX_WAIT 2500
@@ -627,15 +627,15 @@ do { \
static __inline void
mps_from_u64(uint64_t data, U64 *mps)
{
- (mps)->High = (uint32_t)((data) >> 32);
- (mps)->Low = (uint32_t)((data) & 0xffffffff);
+ (mps)->High = htole32((uint32_t)((data) >> 32));
+ (mps)->Low = htole32((uint32_t)((data) & 0xffffffff));
}
static __inline uint64_t
mps_to_u64(U64 *data)
{
- return (((uint64_t)data->High << 32) | data->Low);
+ return (((uint64_t)le32toh(data->High) << 32) | le32toh(data->Low));
}
static __inline void
diff --git a/sys/dev/mvs/mvs_soc.c b/sys/dev/mvs/mvs_soc.c
index 9e9f93e..9f48fdd 100644
--- a/sys/dev/mvs/mvs_soc.c
+++ b/sys/dev/mvs/mvs_soc.c
@@ -63,6 +63,7 @@ static struct {
} mvs_ids[] = {
{MV_DEV_88F5182, 0x00, "Marvell 88F5182", 2, MVS_Q_GENIIE|MVS_Q_SOC},
{MV_DEV_88F6281, 0x00, "Marvell 88F6281", 2, MVS_Q_GENIIE|MVS_Q_SOC},
+ {MV_DEV_88F6282, 0x00, "Marvell 88F6282", 2, MVS_Q_GENIIE|MVS_Q_SOC},
{MV_DEV_MV78100, 0x00, "Marvell MV78100", 2, MVS_Q_GENIIE|MVS_Q_SOC},
{MV_DEV_MV78100_Z0, 0x00,"Marvell MV78100", 2, MVS_Q_GENIIE|MVS_Q_SOC},
{0, 0x00, NULL, 0, 0}
diff --git a/sys/dev/netmap/if_em_netmap.h b/sys/dev/netmap/if_em_netmap.h
index 8a3893e..b4b268a 100644
--- a/sys/dev/netmap/if_em_netmap.h
+++ b/sys/dev/netmap/if_em_netmap.h
@@ -171,7 +171,7 @@ em_netmap_txsync(struct ifnet *ifp, u_int ring_nr, int do_lock)
u_int j, k, l, n = 0, lim = kring->nkr_num_slots - 1;
/* generate an interrupt approximately every half ring */
- int report_frequency = kring->nkr_num_slots >> 1;
+ u_int report_frequency = kring->nkr_num_slots >> 1;
k = ring->cur;
if (k > lim)
diff --git a/sys/dev/netmap/if_igb_netmap.h b/sys/dev/netmap/if_igb_netmap.h
index 8ba13ee..bd83563 100644
--- a/sys/dev/netmap/if_igb_netmap.h
+++ b/sys/dev/netmap/if_igb_netmap.h
@@ -125,7 +125,7 @@ igb_netmap_txsync(struct ifnet *ifp, u_int ring_nr, int do_lock)
u_int j, k, l, n = 0, lim = kring->nkr_num_slots - 1;
/* generate an interrupt approximately every half ring */
- int report_frequency = kring->nkr_num_slots >> 1;
+ u_int report_frequency = kring->nkr_num_slots >> 1;
k = ring->cur;
if (k > lim)
diff --git a/sys/dev/netmap/ixgbe_netmap.h b/sys/dev/netmap/ixgbe_netmap.h
index fb53963..eefb4df 100644
--- a/sys/dev/netmap/ixgbe_netmap.h
+++ b/sys/dev/netmap/ixgbe_netmap.h
@@ -233,7 +233,7 @@ ixgbe_netmap_txsync(struct ifnet *ifp, u_int ring_nr, int do_lock)
* seems very expensive, so we interrupt once every half ring,
* or when requested with NS_REPORT
*/
- int report_frequency = kring->nkr_num_slots >> 1;
+ u_int report_frequency = kring->nkr_num_slots >> 1;
if (k > lim)
return netmap_ring_reinit(kring);
diff --git a/sys/dev/netmap/netmap.c b/sys/dev/netmap/netmap.c
index 1cd0a92..cbf6852 100644
--- a/sys/dev/netmap/netmap.c
+++ b/sys/dev/netmap/netmap.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2011 Matteo Landi, Luigi Rizzo. All rights reserved.
+ * Copyright (C) 2011-2012 Matteo Landi, Luigi Rizzo. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -23,6 +23,8 @@
* SUCH DAMAGE.
*/
+#define NM_BRIDGE
+
/*
* This module supports memory mapped access to network devices,
* see netmap(4).
@@ -52,6 +54,16 @@
* transmit or receive queues (or all queues for a given interface).
*/
+#ifdef linux
+#include "bsd_glue.h"
+static netdev_tx_t linux_netmap_start(struct sk_buff *skb, struct net_device *dev);
+#endif /* linux */
+
+#ifdef __APPLE__
+#include "osx_glue.h"
+#endif /* __APPLE__ */
+
+#ifdef __FreeBSD__
#include <sys/cdefs.h> /* prerequisite */
__FBSDID("$FreeBSD$");
@@ -78,11 +90,13 @@ __FBSDID("$FreeBSD$");
#include <net/if.h>
#include <net/bpf.h> /* BIOCIMMEDIATE */
#include <net/vnet.h>
-#include <net/netmap.h>
-#include <dev/netmap/netmap_kern.h>
#include <machine/bus.h> /* bus_dmamap_* */
MALLOC_DEFINE(M_NETMAP, "netmap", "Network memory map");
+#endif /* __FreeBSD__ */
+
+#include <net/netmap.h>
+#include <dev/netmap/netmap_kern.h>
/*
* lock and unlock for the netmap memory allocator
@@ -105,8 +119,8 @@ SYSCTL_INT(_dev_netmap, OID_AUTO, verbose,
CTLFLAG_RW, &netmap_verbose, 0, "Verbose mode");
SYSCTL_INT(_dev_netmap, OID_AUTO, no_timestamp,
CTLFLAG_RW, &netmap_no_timestamp, 0, "no_timestamp");
-int netmap_buf_size = 2048;
-TUNABLE_INT("hw.netmap.buf_size", &netmap_buf_size);
+u_int netmap_buf_size = 2048;
+TUNABLE_INT("hw.netmap.buf_size", (u_int *)&netmap_buf_size);
SYSCTL_INT(_dev_netmap, OID_AUTO, buf_size,
CTLFLAG_RD, &netmap_buf_size, 0, "Size of packet buffers");
int netmap_mitigate = 1;
@@ -115,6 +129,162 @@ int netmap_no_pendintr = 1;
SYSCTL_INT(_dev_netmap, OID_AUTO, no_pendintr,
CTLFLAG_RW, &netmap_no_pendintr, 0, "Always look for new received packets.");
+int netmap_drop = 0; /* debugging */
+int netmap_flags = 0; /* debug flags */
+int netmap_copy = 0; /* debugging, copy content */
+
+SYSCTL_INT(_dev_netmap, OID_AUTO, drop, CTLFLAG_RW, &netmap_drop, 0 , "");
+SYSCTL_INT(_dev_netmap, OID_AUTO, flags, CTLFLAG_RW, &netmap_flags, 0 , "");
+SYSCTL_INT(_dev_netmap, OID_AUTO, copy, CTLFLAG_RW, &netmap_copy, 0 , "");
+
+#ifdef NM_BRIDGE /* support for netmap bridge */
+
+/*
+ * system parameters.
+ *
+ * All switched ports have prefix NM_NAME.
+ * The switch has a max of NM_BDG_MAXPORTS ports (often stored in a bitmap,
+ * so a practical upper bound is 64).
+ * Each tx ring is read-write, whereas rx rings are readonly (XXX not done yet).
+ * The virtual interfaces use per-queue lock instead of core lock.
+ * In the tx loop, we aggregate traffic in batches to make all operations
+ * faster. The batch size is NM_BDG_BATCH
+ */
+#define NM_NAME "vale" /* prefix for the interface */
+#define NM_BDG_MAXPORTS 16 /* up to 64 ? */
+#define NM_BRIDGE_RINGSIZE 1024 /* in the device */
+#define NM_BDG_HASH 1024 /* forwarding table entries */
+#define NM_BDG_BATCH 1024 /* entries in the forwarding buffer */
+#define NM_BRIDGES 4 /* number of bridges */
+int netmap_bridge = NM_BDG_BATCH; /* bridge batch size */
+SYSCTL_INT(_dev_netmap, OID_AUTO, bridge, CTLFLAG_RW, &netmap_bridge, 0 , "");
+
+#ifdef linux
+#define ADD_BDG_REF(ifp) (NA(ifp)->if_refcount++)
+#define DROP_BDG_REF(ifp) (NA(ifp)->if_refcount-- <= 1)
+#else /* !linux */
+#define ADD_BDG_REF(ifp) (ifp)->if_refcount++
+#define DROP_BDG_REF(ifp) refcount_release(&(ifp)->if_refcount)
+#ifdef __FreeBSD__
+#include <sys/endian.h>
+#include <sys/refcount.h>
+#endif /* __FreeBSD__ */
+#define prefetch(x) __builtin_prefetch(x)
+#endif /* !linux */
+
+static void bdg_netmap_attach(struct ifnet *ifp);
+static int bdg_netmap_reg(struct ifnet *ifp, int onoff);
+/* per-tx-queue entry */
+struct nm_bdg_fwd { /* forwarding entry for a bridge */
+ void *buf;
+ uint64_t dst; /* dst mask */
+ uint32_t src; /* src index ? */
+ uint16_t len; /* src len */
+};
+
+struct nm_hash_ent {
+ uint64_t mac; /* the top 2 bytes are the epoch */
+ uint64_t ports;
+};
+
+/*
+ * Interfaces for a bridge are all in ports[].
+ * The array has fixed size, an empty entry does not terminate
+ * the search.
+ */
+struct nm_bridge {
+ struct ifnet *bdg_ports[NM_BDG_MAXPORTS];
+ int n_ports;
+ uint64_t act_ports;
+ int freelist; /* first buffer index */
+ NM_SELINFO_T si; /* poll/select wait queue */
+ NM_LOCK_T bdg_lock; /* protect the selinfo ? */
+
+ /* the forwarding table, MAC+ports */
+ struct nm_hash_ent ht[NM_BDG_HASH];
+
+ int namelen; /* 0 means free */
+ char basename[IFNAMSIZ];
+};
+
+struct nm_bridge nm_bridges[NM_BRIDGES];
+
+#define BDG_LOCK(b) mtx_lock(&(b)->bdg_lock)
+#define BDG_UNLOCK(b) mtx_unlock(&(b)->bdg_lock)
+
+/*
+ * NA(ifp)->bdg_port port index
+ */
+
+// XXX only for multiples of 64 bytes, non overlapped.
+static inline void
+pkt_copy(void *_src, void *_dst, int l)
+{
+ uint64_t *src = _src;
+ uint64_t *dst = _dst;
+ if (unlikely(l >= 1024)) {
+ bcopy(src, dst, l);
+ return;
+ }
+ for (; likely(l > 0); l-=64) {
+ *dst++ = *src++;
+ *dst++ = *src++;
+ *dst++ = *src++;
+ *dst++ = *src++;
+ *dst++ = *src++;
+ *dst++ = *src++;
+ *dst++ = *src++;
+ *dst++ = *src++;
+ }
+}
+
+/*
+ * locate a bridge among the existing ones.
+ * a ':' in the name terminates the bridge name. Otherwise, just NM_NAME.
+ * We assume that this is called with a name of at least NM_NAME chars.
+ */
+static struct nm_bridge *
+nm_find_bridge(const char *name)
+{
+ int i, l, namelen, e;
+ struct nm_bridge *b = NULL;
+
+ namelen = strlen(NM_NAME); /* base length */
+ l = strlen(name); /* actual length */
+ for (i = namelen + 1; i < l; i++) {
+ if (name[i] == ':') {
+ namelen = i;
+ break;
+ }
+ }
+ if (namelen >= IFNAMSIZ)
+ namelen = IFNAMSIZ;
+ ND("--- prefix is '%.*s' ---", namelen, name);
+
+ /* use the first entry for locking */
+ BDG_LOCK(nm_bridges); // XXX do better
+ for (e = -1, i = 1; i < NM_BRIDGES; i++) {
+ b = nm_bridges + i;
+ if (b->namelen == 0)
+ e = i; /* record empty slot */
+ else if (strncmp(name, b->basename, namelen) == 0) {
+ ND("found '%.*s' at %d", namelen, name, i);
+ break;
+ }
+ }
+ if (i == NM_BRIDGES) { /* all full */
+ if (e == -1) { /* no empty slot */
+ b = NULL;
+ } else {
+ b = nm_bridges + e;
+ strncpy(b->basename, name, namelen);
+ b->namelen = namelen;
+ }
+ }
+ BDG_UNLOCK(nm_bridges);
+ return b;
+}
+#endif /* NM_BRIDGE */
/*------------- memory allocator -----------------*/
#ifdef NETMAP_MEM2
@@ -200,6 +370,46 @@ netmap_dtor_locked(void *data)
netmap_if_free(nifp);
}
+static void
+nm_if_rele(struct ifnet *ifp)
+{
+#ifndef NM_BRIDGE
+ if_rele(ifp);
+#else /* NM_BRIDGE */
+ int i, full;
+ struct nm_bridge *b;
+
+ if (strncmp(ifp->if_xname, NM_NAME, sizeof(NM_NAME) - 1)) {
+ if_rele(ifp);
+ return;
+ }
+ if (!DROP_BDG_REF(ifp))
+ return;
+ b = ifp->if_bridge;
+ BDG_LOCK(nm_bridges);
+ BDG_LOCK(b);
+ ND("want to disconnect %s from the bridge", ifp->if_xname);
+ full = 0;
+ for (i = 0; i < NM_BDG_MAXPORTS; i++) {
+ if (b->bdg_ports[i] == ifp) {
+ b->bdg_ports[i] = NULL;
+ bzero(ifp, sizeof(*ifp));
+ free(ifp, M_DEVBUF);
+ break;
+ }
+ else if (b->bdg_ports[i] != NULL)
+ full = 1;
+ }
+ BDG_UNLOCK(b);
+ if (full == 0) {
+ ND("freeing bridge %d", b - nm_bridges);
+ b->namelen = 0;
+ }
+ BDG_UNLOCK(nm_bridges);
+ if (i == NM_BDG_MAXPORTS)
+ D("ouch, cannot find ifp to remove");
+#endif /* NM_BRIDGE */
+}
static void
netmap_dtor(void *data)
@@ -212,7 +422,7 @@ netmap_dtor(void *data)
netmap_dtor_locked(data);
na->nm_lock(ifp, NETMAP_REG_UNLOCK, 0);
- if_rele(ifp);
+ nm_if_rele(ifp);
bzero(priv, sizeof(*priv)); /* XXX for safety */
free(priv, M_DEVBUF);
}
@@ -228,6 +438,7 @@ netmap_dtor(void *data)
* Return 0 on success, -1 otherwise.
*/
+#ifdef __FreeBSD__
static int
netmap_mmap(__unused struct cdev *dev,
#if __FreeBSD_version < 900000
@@ -246,6 +457,7 @@ netmap_mmap(__unused struct cdev *dev,
return (0);
}
+#endif /* __FreeBSD__ */
/*
@@ -316,15 +528,19 @@ netmap_sync_to_host(struct netmap_adapter *na)
*
* This routine also does the selrecord if called from the poll handler
* (we know because td != NULL).
+ *
+ * NOTE: on linux, selrecord() is defined as a macro and uses pwait
+ * as an additional hidden argument.
*/
static void
-netmap_sync_from_host(struct netmap_adapter *na, struct thread *td)
+netmap_sync_from_host(struct netmap_adapter *na, struct thread *td, void *pwait)
{
struct netmap_kring *kring = &na->rx_rings[na->num_rx_rings];
struct netmap_ring *ring = kring->ring;
u_int j, n, lim = kring->nkr_num_slots;
u_int k = ring->cur, resvd = ring->reserved;
+ (void)pwait; /* disable unused warnings */
na->nm_lock(na->ifp, NETMAP_CORE_LOCK, 0);
if (k >= lim) {
netmap_ring_reinit(kring);
@@ -363,6 +579,64 @@ netmap_sync_from_host(struct netmap_adapter *na, struct thread *td)
static int
get_ifp(const char *name, struct ifnet **ifp)
{
+#ifdef NM_BRIDGE
+ struct ifnet *iter = NULL;
+
+ do {
+ struct nm_bridge *b;
+ int i, l, cand = -1;
+
+ if (strncmp(name, NM_NAME, sizeof(NM_NAME) - 1))
+ break;
+ b = nm_find_bridge(name);
+ if (b == NULL) {
+ D("no bridges available for '%s'", name);
+ return (ENXIO);
+ }
+ /* XXX locking */
+ BDG_LOCK(b);
+ /* lookup in the local list of ports */
+ for (i = 0; i < NM_BDG_MAXPORTS; i++) {
+ iter = b->bdg_ports[i];
+ if (iter == NULL) {
+ if (cand == -1)
+ cand = i; /* potential insert point */
+ continue;
+ }
+ if (!strcmp(iter->if_xname, name)) {
+ ADD_BDG_REF(iter);
+ ND("found existing interface");
+ BDG_UNLOCK(b);
+ break;
+ }
+ }
+ if (i < NM_BDG_MAXPORTS) /* already unlocked */
+ break;
+ if (cand == -1) {
+ D("bridge full, cannot create new port");
+no_port:
+ BDG_UNLOCK(b);
+ *ifp = NULL;
+ return EINVAL;
+ }
+ ND("create new bridge port %s", name);
+ /* space for forwarding list after the ifnet */
+ l = sizeof(*iter) +
+ sizeof(struct nm_bdg_fwd)*NM_BDG_BATCH ;
+ iter = malloc(l, M_DEVBUF, M_NOWAIT | M_ZERO);
+ if (!iter)
+ goto no_port;
+ strcpy(iter->if_xname, name);
+ bdg_netmap_attach(iter);
+ b->bdg_ports[cand] = iter;
+ iter->if_bridge = b;
+ ADD_BDG_REF(iter);
+ BDG_UNLOCK(b);
+ ND("attaching virtual bridge %p", b);
+ } while (0);
+ *ifp = iter;
+ if (! *ifp)
+#endif /* NM_BRIDGE */
*ifp = ifunit_ref(name);
if (*ifp == NULL)
return (ENXIO);
@@ -371,7 +645,7 @@ get_ifp(const char *name, struct ifnet **ifp)
*/
if ((*ifp)->if_capabilities & IFCAP_NETMAP && NA(*ifp))
return 0; /* valid pointer, we hold the refcount */
- if_rele(*ifp);
+ nm_if_rele(*ifp);
return EINVAL; // not NETMAP capable
}
@@ -491,8 +765,8 @@ netmap_set_ringid(struct netmap_priv_d *priv, u_int ringid)
* Return 0 on success, errno otherwise.
*/
static int
-netmap_ioctl(__unused struct cdev *dev, u_long cmd, caddr_t data,
- __unused int fflag, struct thread *td)
+netmap_ioctl(struct cdev *dev, u_long cmd, caddr_t data,
+ int fflag, struct thread *td)
{
struct netmap_priv_d *priv = NULL;
struct ifnet *ifp;
@@ -502,6 +776,23 @@ netmap_ioctl(__unused struct cdev *dev, u_long cmd, caddr_t data,
u_int i, lim;
struct netmap_if *nifp;
+ (void)dev; /* UNUSED */
+ (void)fflag; /* UNUSED */
+#ifdef linux
+#define devfs_get_cdevpriv(pp) \
+ ({ *(struct netmap_priv_d **)pp = ((struct file *)td)->private_data; \
+ (*pp ? 0 : ENOENT); })
+
+/* devfs_set_cdevpriv cannot fail on linux */
+#define devfs_set_cdevpriv(p, fn) \
+ ({ ((struct file *)td)->private_data = p; (p ? 0 : EINVAL); })
+
+
+#define devfs_clear_cdevpriv() do { \
+ netmap_dtor(priv); ((struct file *)td)->private_data = 0; \
+ } while (0)
+#endif /* linux */
+
CURVNET_SET(TD_TO_VNET(td));
error = devfs_get_cdevpriv((void **)&priv);
@@ -511,6 +802,7 @@ netmap_ioctl(__unused struct cdev *dev, u_long cmd, caddr_t data,
}
error = 0; /* Could be ENOENT */
+ nmr->nr_name[sizeof(nmr->nr_name) - 1] = '\0'; /* truncate name */
switch (cmd) {
case NIOCGINFO: /* return capabilities etc */
/* memsize is always valid */
@@ -535,7 +827,7 @@ netmap_ioctl(__unused struct cdev *dev, u_long cmd, caddr_t data,
nmr->nr_tx_rings = na->num_tx_rings;
nmr->nr_rx_slots = na->num_rx_desc;
nmr->nr_tx_slots = na->num_tx_desc;
- if_rele(ifp); /* return the refcount */
+ nm_if_rele(ifp); /* return the refcount */
break;
case NIOCREGIF:
@@ -561,7 +853,7 @@ netmap_ioctl(__unused struct cdev *dev, u_long cmd, caddr_t data,
M_NOWAIT | M_ZERO);
if (priv == NULL) {
error = ENOMEM;
- if_rele(ifp); /* return the refcount */
+ nm_if_rele(ifp); /* return the refcount */
break;
}
@@ -576,7 +868,7 @@ netmap_ioctl(__unused struct cdev *dev, u_long cmd, caddr_t data,
D("too many NIOCREGIF attempts, give up");
error = EINVAL;
free(priv, M_DEVBUF);
- if_rele(ifp); /* return the refcount */
+ nm_if_rele(ifp); /* return the refcount */
break;
}
@@ -593,6 +885,11 @@ netmap_ioctl(__unused struct cdev *dev, u_long cmd, caddr_t data,
/* Otherwise set the card in netmap mode
* and make it use the shared buffers.
*/
+ for (i = 0 ; i < na->num_tx_rings + 1; i++)
+ mtx_init(&na->tx_rings[i].q_lock, "nm_txq_lock", MTX_NETWORK_LOCK, MTX_DEF);
+ for (i = 0 ; i < na->num_rx_rings + 1; i++) {
+ mtx_init(&na->rx_rings[i].q_lock, "nm_rxq_lock", MTX_NETWORK_LOCK, MTX_DEF);
+ }
error = na->nm_register(ifp, 1); /* mode on */
if (error)
netmap_dtor_locked(priv);
@@ -601,7 +898,7 @@ netmap_ioctl(__unused struct cdev *dev, u_long cmd, caddr_t data,
if (error) { /* reg. failed, release priv and ref */
error:
na->nm_lock(ifp, NETMAP_REG_UNLOCK, 0);
- if_rele(ifp); /* return the refcount */
+ nm_if_rele(ifp); /* return the refcount */
bzero(priv, sizeof(*priv));
free(priv, M_DEVBUF);
break;
@@ -650,7 +947,7 @@ error:
if (cmd == NIOCTXSYNC)
netmap_sync_to_host(na);
else
- netmap_sync_from_host(na, NULL);
+ netmap_sync_from_host(na, NULL, NULL);
break;
}
/* find the last ring to scan */
@@ -679,6 +976,7 @@ error:
break;
+#ifdef __FreeBSD__
case BIOCIMMEDIATE:
case BIOCGHDRCMPLT:
case BIOCSHDRCMPLT:
@@ -696,9 +994,14 @@ error:
so.so_vnet = ifp->if_vnet;
// so->so_proto not null.
error = ifioctl(&so, cmd, data, td);
- if_rele(ifp);
+ nm_if_rele(ifp);
break;
}
+
+#else /* linux */
+ default:
+ error = EOPNOTSUPP;
+#endif /* linux */
}
CURVNET_RESTORE();
@@ -715,9 +1018,13 @@ error:
* selfd or on the global one.
* Device-dependent parts (locking and sync of tx/rx rings)
* are done through callbacks.
+ *
+ * On linux, arguments are really pwait, the poll table, and 'td' is struct file *
+ * The first one is remapped to pwait as selrecord() uses the name as an
+ * hidden argument.
*/
static int
-netmap_poll(__unused struct cdev *dev, int events, struct thread *td)
+netmap_poll(struct cdev *dev, int events, struct thread *td)
{
struct netmap_priv_d *priv = NULL;
struct netmap_adapter *na;
@@ -726,6 +1033,9 @@ netmap_poll(__unused struct cdev *dev, int events, struct thread *td)
u_int core_lock, i, check_all, want_tx, want_rx, revents = 0;
u_int lim_tx, lim_rx;
enum {NO_CL, NEED_CL, LOCKED_CL }; /* see below */
+ void *pwait = dev; /* linux compatibility */
+
+ (void)pwait;
if (devfs_get_cdevpriv((void **)&priv) != 0 || priv == NULL)
return POLLERR;
@@ -755,7 +1065,7 @@ netmap_poll(__unused struct cdev *dev, int events, struct thread *td)
if (want_rx) {
kring = &na->rx_rings[lim_rx];
if (kring->ring->avail == 0)
- netmap_sync_from_host(na, td);
+ netmap_sync_from_host(na, td, dev);
if (kring->ring->avail > 0) {
revents |= want_rx;
}
@@ -801,6 +1111,13 @@ netmap_poll(__unused struct cdev *dev, int events, struct thread *td)
* LOCKED_CL core lock is set, so we need to release it.
*/
core_lock = (check_all || !na->separate_locks) ? NEED_CL : NO_CL;
+#ifdef NM_BRIDGE
+ /* the bridge uses separate locks */
+ if (na->nm_register == bdg_netmap_reg) {
+ ND("not using core lock for %s", ifp->if_xname);
+ core_lock = NO_CL;
+ }
+#endif /* NM_BRIDGE */
if (priv->np_qlast != NETMAP_HW_RING) {
lim_tx = lim_rx = priv->np_qlast;
}
@@ -970,7 +1287,7 @@ netmap_lock_wrapper(struct ifnet *dev, int what, u_int queueid)
int
netmap_attach(struct netmap_adapter *na, int num_queues)
{
- int i, n, size;
+ int n, size;
void *buf;
struct ifnet *ifp = na->ifp;
@@ -999,19 +1316,22 @@ netmap_attach(struct netmap_adapter *na, int num_queues)
ifp->if_capabilities |= IFCAP_NETMAP;
na = buf;
- if (na->nm_lock == NULL)
+ if (na->nm_lock == NULL) {
+ ND("using default locks for %s", ifp->if_xname);
na->nm_lock = netmap_lock_wrapper;
- mtx_init(&na->core_lock, "netmap core lock", NULL, MTX_DEF);
- for (i = 0 ; i < na->num_tx_rings + 1; i++)
- mtx_init(&na->tx_rings[i].q_lock, "netmap txq lock", NULL, MTX_DEF);
- for (i = 0 ; i < na->num_rx_rings + 1; i++)
- mtx_init(&na->rx_rings[i].q_lock, "netmap rxq lock", NULL, MTX_DEF);
+ /* core lock initialized here.
+ * others initialized after netmap_if_new
+ */
+ mtx_init(&na->core_lock, "netmap core lock", MTX_NETWORK_LOCK, MTX_DEF);
+ }
}
#ifdef linux
- D("netdev_ops %p", ifp->netdev_ops);
- /* prepare a clone of the netdev ops */
- na->nm_ndo = *ifp->netdev_ops;
- na->nm_ndo.ndo_start_xmit = netmap_start_linux;
+ if (ifp->netdev_ops) {
+ D("netdev_ops %p", ifp->netdev_ops);
+ /* prepare a clone of the netdev ops */
+ na->nm_ndo = *ifp->netdev_ops;
+ }
+ na->nm_ndo.ndo_start_xmit = linux_netmap_start;
#endif
D("%s for %s", buf ? "ok" : "failed", ifp->if_xname);
@@ -1059,7 +1379,7 @@ netmap_start(struct ifnet *ifp, struct mbuf *m)
struct netmap_adapter *na = NA(ifp);
struct netmap_kring *kring = &na->rx_rings[na->num_rx_rings];
u_int i, len = MBUF_LEN(m);
- int error = EBUSY, lim = kring->nkr_num_slots - 1;
+ u_int error = EBUSY, lim = kring->nkr_num_slots - 1;
struct netmap_slot *slot;
if (netmap_verbose & NM_VERB_HOST)
@@ -1137,6 +1457,16 @@ netmap_reset(struct netmap_adapter *na, enum txrx tx, int n,
kring->nkr_hwofs, na->ifp->if_xname,
tx == NR_TX ? "TX" : "RX", n);
+#if 0 // def linux
+ /* XXX check that the mappings are correct */
+ /* need ring_nr, adapter->pdev, direction */
+ buffer_info->dma = dma_map_single(&pdev->dev, addr, adapter->rx_buffer_len, DMA_FROM_DEVICE);
+ if (dma_mapping_error(&adapter->pdev->dev, buffer_info->dma)) {
+ D("error mapping rx netmap buffer %d", i);
+ // XXX fix error handling
+ }
+
+#endif /* linux */
/*
* Wakeup on the individual and global lock
* We do the wakeup here, but the ring is not yet reconfigured.
@@ -1201,6 +1531,154 @@ netmap_rx_irq(struct ifnet *ifp, int q, int *work_done)
}
+#ifdef linux /* linux-specific routines */
+
+/*
+ * Remap linux arguments into the FreeBSD call.
+ * - pwait is the poll table, passed as 'dev';
+ * If pwait == NULL someone else already woke up before. We can report
+ * events but they are filtered upstream.
+ * If pwait != NULL, then pwait->key contains the list of events.
+ * - events is computed from pwait as above.
+ * - file is passed as 'td';
+ */
+static u_int
+linux_netmap_poll(struct file * file, struct poll_table_struct *pwait)
+{
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0)
+ int events = pwait ? pwait->key : POLLIN | POLLOUT;
+#else /* in 3.4.0 field 'key' was renamed to '_key' */
+ int events = pwait ? pwait->_key : POLLIN | POLLOUT;
+#endif
+ return netmap_poll((void *)pwait, events, (void *)file);
+}
+
+static int
+linux_netmap_mmap(struct file *f, struct vm_area_struct *vma)
+{
+ int lut_skip, i, j;
+ int user_skip = 0;
+ struct lut_entry *l_entry;
+ const struct netmap_obj_pool *p[] = {
+ nm_mem->nm_if_pool,
+ nm_mem->nm_ring_pool,
+ nm_mem->nm_buf_pool };
+ /*
+ * vma->vm_start: start of mapping user address space
+ * vma->vm_end: end of the mapping user address space
+ */
+
+ (void)f; /* UNUSED */
+ // XXX security checks
+
+ for (i = 0; i < 3; i++) { /* loop through obj_pools */
+ /*
+ * In each pool memory is allocated in clusters
+ * of size _clustsize , each containing clustentries
+ * entries. For each object k we already store the
+ * vtophys malling in lut[k] so we use that, scanning
+ * the lut[] array in steps of clustentries,
+ * and we map each cluster (not individual pages,
+ * it would be overkill).
+ */
+ for (lut_skip = 0, j = 0; j < p[i]->_numclusters; j++) {
+ l_entry = &p[i]->lut[lut_skip];
+ if (remap_pfn_range(vma, vma->vm_start + user_skip,
+ l_entry->paddr >> PAGE_SHIFT, p[i]->_clustsize,
+ vma->vm_page_prot))
+ return -EAGAIN; // XXX check return value
+ lut_skip += p[i]->clustentries;
+ user_skip += p[i]->_clustsize;
+ }
+ }
+
+ return 0;
+}
+
+static netdev_tx_t
+linux_netmap_start(struct sk_buff *skb, struct net_device *dev)
+{
+ netmap_start(dev, skb);
+ return (NETDEV_TX_OK);
+}
+
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37) // XXX was 38
+#define LIN_IOCTL_NAME .ioctl
+int
+linux_netmap_ioctl(struct inode *inode, struct file *file, u_int cmd, u_long data /* arg */)
+#else
+#define LIN_IOCTL_NAME .unlocked_ioctl
+long
+linux_netmap_ioctl(struct file *file, u_int cmd, u_long data /* arg */)
+#endif
+{
+ int ret;
+ struct nmreq nmr;
+ bzero(&nmr, sizeof(nmr));
+
+ if (data && copy_from_user(&nmr, (void *)data, sizeof(nmr) ) != 0)
+ return -EFAULT;
+ ret = netmap_ioctl(NULL, cmd, (caddr_t)&nmr, 0, (void *)file);
+ if (data && copy_to_user((void*)data, &nmr, sizeof(nmr) ) != 0)
+ return -EFAULT;
+ return -ret;
+}
+
+
+static int
+netmap_release(struct inode *inode, struct file *file)
+{
+ (void)inode; /* UNUSED */
+ if (file->private_data)
+ netmap_dtor(file->private_data);
+ return (0);
+}
+
+
+static struct file_operations netmap_fops = {
+ .mmap = linux_netmap_mmap,
+ LIN_IOCTL_NAME = linux_netmap_ioctl,
+ .poll = linux_netmap_poll,
+ .release = netmap_release,
+};
+
+static struct miscdevice netmap_cdevsw = { /* same name as FreeBSD */
+ MISC_DYNAMIC_MINOR,
+ "netmap",
+ &netmap_fops,
+};
+
+static int netmap_init(void);
+static void netmap_fini(void);
+
+/* Errors have negative values on linux */
+static int linux_netmap_init(void)
+{
+ return -netmap_init();
+}
+
+module_init(linux_netmap_init);
+module_exit(netmap_fini);
+/* export certain symbols to other modules */
+EXPORT_SYMBOL(netmap_attach); // driver attach routines
+EXPORT_SYMBOL(netmap_detach); // driver detach routines
+EXPORT_SYMBOL(netmap_ring_reinit); // ring init on error
+EXPORT_SYMBOL(netmap_buffer_lut);
+EXPORT_SYMBOL(netmap_total_buffers); // index check
+EXPORT_SYMBOL(netmap_buffer_base);
+EXPORT_SYMBOL(netmap_reset); // ring init routines
+EXPORT_SYMBOL(netmap_buf_size);
+EXPORT_SYMBOL(netmap_rx_irq); // default irq handler
+EXPORT_SYMBOL(netmap_no_pendintr); // XXX mitigation - should go away
+
+
+MODULE_AUTHOR("http://info.iet.unipi.it/~luigi/netmap/");
+MODULE_DESCRIPTION("The netmap packet I/O framework");
+MODULE_LICENSE("Dual BSD/GPL"); /* the code here is all BSD. */
+
+#else /* __FreeBSD__ */
+
static struct cdevsw netmap_cdevsw = {
.d_version = D_VERSION,
.d_name = "netmap",
@@ -1208,7 +1686,345 @@ static struct cdevsw netmap_cdevsw = {
.d_ioctl = netmap_ioctl,
.d_poll = netmap_poll,
};
+#endif /* __FreeBSD__ */
+
+#ifdef NM_BRIDGE
+/*
+ *---- support for virtual bridge -----
+ */
+
+/* ----- FreeBSD if_bridge hash function ------- */
+
+/*
+ * The following hash function is adapted from "Hash Functions" by Bob Jenkins
+ * ("Algorithm Alley", Dr. Dobbs Journal, September 1997).
+ *
+ * http://www.burtleburtle.net/bob/hash/spooky.html
+ */
+#define mix(a, b, c) \
+do { \
+ a -= b; a -= c; a ^= (c >> 13); \
+ b -= c; b -= a; b ^= (a << 8); \
+ c -= a; c -= b; c ^= (b >> 13); \
+ a -= b; a -= c; a ^= (c >> 12); \
+ b -= c; b -= a; b ^= (a << 16); \
+ c -= a; c -= b; c ^= (b >> 5); \
+ a -= b; a -= c; a ^= (c >> 3); \
+ b -= c; b -= a; b ^= (a << 10); \
+ c -= a; c -= b; c ^= (b >> 15); \
+} while (/*CONSTCOND*/0)
+
+static __inline uint32_t
+nm_bridge_rthash(const uint8_t *addr)
+{
+ uint32_t a = 0x9e3779b9, b = 0x9e3779b9, c = 0; // hask key
+
+ b += addr[5] << 8;
+ b += addr[4];
+ a += addr[3] << 24;
+ a += addr[2] << 16;
+ a += addr[1] << 8;
+ a += addr[0];
+
+ mix(a, b, c);
+#define BRIDGE_RTHASH_MASK (NM_BDG_HASH-1)
+ return (c & BRIDGE_RTHASH_MASK);
+}
+
+#undef mix
+
+
+static int
+bdg_netmap_reg(struct ifnet *ifp, int onoff)
+{
+ int i, err = 0;
+ struct nm_bridge *b = ifp->if_bridge;
+
+ BDG_LOCK(b);
+ if (onoff) {
+ /* the interface must be already in the list.
+ * only need to mark the port as active
+ */
+ ND("should attach %s to the bridge", ifp->if_xname);
+ for (i=0; i < NM_BDG_MAXPORTS; i++)
+ if (b->bdg_ports[i] == ifp)
+ break;
+ if (i == NM_BDG_MAXPORTS) {
+ D("no more ports available");
+ err = EINVAL;
+ goto done;
+ }
+ ND("setting %s in netmap mode", ifp->if_xname);
+ ifp->if_capenable |= IFCAP_NETMAP;
+ NA(ifp)->bdg_port = i;
+ b->act_ports |= (1<<i);
+ b->bdg_ports[i] = ifp;
+ } else {
+ /* should be in the list, too -- remove from the mask */
+ ND("removing %s from netmap mode", ifp->if_xname);
+ ifp->if_capenable &= ~IFCAP_NETMAP;
+ i = NA(ifp)->bdg_port;
+ b->act_ports &= ~(1<<i);
+ }
+done:
+ BDG_UNLOCK(b);
+ return err;
+}
+
+
+static int
+nm_bdg_flush(struct nm_bdg_fwd *ft, int n, struct ifnet *ifp)
+{
+ int i, ifn;
+ uint64_t all_dst, dst;
+ uint32_t sh, dh;
+ uint64_t mysrc = 1 << NA(ifp)->bdg_port;
+ uint64_t smac, dmac;
+ struct netmap_slot *slot;
+ struct nm_bridge *b = ifp->if_bridge;
+
+ ND("prepare to send %d packets, act_ports 0x%x", n, b->act_ports);
+ /* only consider valid destinations */
+ all_dst = (b->act_ports & ~mysrc);
+ /* first pass: hash and find destinations */
+ for (i = 0; likely(i < n); i++) {
+ uint8_t *buf = ft[i].buf;
+ dmac = le64toh(*(uint64_t *)(buf)) & 0xffffffffffff;
+ smac = le64toh(*(uint64_t *)(buf + 4));
+ smac >>= 16;
+ if (unlikely(netmap_verbose)) {
+ uint8_t *s = buf+6, *d = buf;
+ D("%d len %4d %02x:%02x:%02x:%02x:%02x:%02x -> %02x:%02x:%02x:%02x:%02x:%02x",
+ i,
+ ft[i].len,
+ s[0], s[1], s[2], s[3], s[4], s[5],
+ d[0], d[1], d[2], d[3], d[4], d[5]);
+ }
+ /*
+ * The hash is somewhat expensive, there might be some
+ * worthwhile optimizations here.
+ */
+ if ((buf[6] & 1) == 0) { /* valid src */
+ uint8_t *s = buf+6;
+ sh = nm_bridge_rthash(buf+6); // XXX hash of source
+ /* update source port forwarding entry */
+ b->ht[sh].mac = smac; /* XXX expire ? */
+ b->ht[sh].ports = mysrc;
+ if (netmap_verbose)
+ D("src %02x:%02x:%02x:%02x:%02x:%02x on port %d",
+ s[0], s[1], s[2], s[3], s[4], s[5], NA(ifp)->bdg_port);
+ }
+ dst = 0;
+ if ( (buf[0] & 1) == 0) { /* unicast */
+ uint8_t *d = buf;
+ dh = nm_bridge_rthash(buf); // XXX hash of dst
+ if (b->ht[dh].mac == dmac) { /* found dst */
+ dst = b->ht[dh].ports;
+ if (netmap_verbose)
+ D("dst %02x:%02x:%02x:%02x:%02x:%02x to port %x",
+ d[0], d[1], d[2], d[3], d[4], d[5], (uint32_t)(dst >> 16));
+ }
+ }
+ if (dst == 0)
+ dst = all_dst;
+ dst &= all_dst; /* only consider valid ports */
+ if (unlikely(netmap_verbose))
+ D("pkt goes to ports 0x%x", (uint32_t)dst);
+ ft[i].dst = dst;
+ }
+
+ /* second pass, scan interfaces and forward */
+ all_dst = (b->act_ports & ~mysrc);
+ for (ifn = 0; all_dst; ifn++) {
+ struct ifnet *dst_ifp = b->bdg_ports[ifn];
+ struct netmap_adapter *na;
+ struct netmap_kring *kring;
+ struct netmap_ring *ring;
+ int j, lim, sent, locked;
+
+ if (!dst_ifp)
+ continue;
+ ND("scan port %d %s", ifn, dst_ifp->if_xname);
+ dst = 1 << ifn;
+ if ((dst & all_dst) == 0) /* skip if not set */
+ continue;
+ all_dst &= ~dst; /* clear current node */
+ na = NA(dst_ifp);
+
+ ring = NULL;
+ kring = NULL;
+ lim = sent = locked = 0;
+ /* inside, scan slots */
+ for (i = 0; likely(i < n); i++) {
+ if ((ft[i].dst & dst) == 0)
+ continue; /* not here */
+ if (!locked) {
+ kring = &na->rx_rings[0];
+ ring = kring->ring;
+ lim = kring->nkr_num_slots - 1;
+ na->nm_lock(dst_ifp, NETMAP_RX_LOCK, 0);
+ locked = 1;
+ }
+ if (unlikely(kring->nr_hwavail >= lim)) {
+ if (netmap_verbose)
+ D("rx ring full on %s", ifp->if_xname);
+ break;
+ }
+ j = kring->nr_hwcur + kring->nr_hwavail;
+ if (j > lim)
+ j -= kring->nkr_num_slots;
+ slot = &ring->slot[j];
+ ND("send %d %d bytes at %s:%d", i, ft[i].len, dst_ifp->if_xname, j);
+ pkt_copy(ft[i].buf, NMB(slot), ft[i].len);
+ slot->len = ft[i].len;
+ kring->nr_hwavail++;
+ sent++;
+ }
+ if (locked) {
+ ND("sent %d on %s", sent, dst_ifp->if_xname);
+ if (sent)
+ selwakeuppri(&kring->si, PI_NET);
+ na->nm_lock(dst_ifp, NETMAP_RX_UNLOCK, 0);
+ }
+ }
+ return 0;
+}
+
+/*
+ * main dispatch routine
+ */
+static int
+bdg_netmap_txsync(struct ifnet *ifp, u_int ring_nr, int do_lock)
+{
+ struct netmap_adapter *na = NA(ifp);
+ struct netmap_kring *kring = &na->tx_rings[ring_nr];
+ struct netmap_ring *ring = kring->ring;
+ int i, j, k, lim = kring->nkr_num_slots - 1;
+ struct nm_bdg_fwd *ft = (struct nm_bdg_fwd *)(ifp + 1);
+ int ft_i; /* position in the forwarding table */
+
+ k = ring->cur;
+ if (k > lim)
+ return netmap_ring_reinit(kring);
+ if (do_lock)
+ na->nm_lock(ifp, NETMAP_TX_LOCK, ring_nr);
+
+ if (netmap_bridge <= 0) { /* testing only */
+ j = k; // used all
+ goto done;
+ }
+ if (netmap_bridge > NM_BDG_BATCH)
+ netmap_bridge = NM_BDG_BATCH;
+
+ ft_i = 0; /* start from 0 */
+ for (j = kring->nr_hwcur; likely(j != k); j = unlikely(j == lim) ? 0 : j+1) {
+ struct netmap_slot *slot = &ring->slot[j];
+ int len = ft[ft_i].len = slot->len;
+ char *buf = ft[ft_i].buf = NMB(slot);
+
+ prefetch(buf);
+ if (unlikely(len < 14))
+ continue;
+ if (unlikely(++ft_i == netmap_bridge))
+ ft_i = nm_bdg_flush(ft, ft_i, ifp);
+ }
+ if (ft_i)
+ ft_i = nm_bdg_flush(ft, ft_i, ifp);
+ /* count how many packets we sent */
+ i = k - j;
+ if (i < 0)
+ i += kring->nkr_num_slots;
+ kring->nr_hwavail = kring->nkr_num_slots - 1 - i;
+ if (j != k)
+ D("early break at %d/ %d, avail %d", j, k, kring->nr_hwavail);
+
+done:
+ kring->nr_hwcur = j;
+ ring->avail = kring->nr_hwavail;
+ if (do_lock)
+ na->nm_lock(ifp, NETMAP_TX_UNLOCK, ring_nr);
+
+ if (netmap_verbose)
+ D("%s ring %d lock %d", ifp->if_xname, ring_nr, do_lock);
+ return 0;
+}
+
+static int
+bdg_netmap_rxsync(struct ifnet *ifp, u_int ring_nr, int do_lock)
+{
+ struct netmap_adapter *na = NA(ifp);
+ struct netmap_kring *kring = &na->rx_rings[ring_nr];
+ struct netmap_ring *ring = kring->ring;
+ u_int j, n, lim = kring->nkr_num_slots - 1;
+ u_int k = ring->cur, resvd = ring->reserved;
+
+ ND("%s ring %d lock %d avail %d",
+ ifp->if_xname, ring_nr, do_lock, kring->nr_hwavail);
+
+ if (k > lim)
+ return netmap_ring_reinit(kring);
+ if (do_lock)
+ na->nm_lock(ifp, NETMAP_RX_LOCK, ring_nr);
+
+ /* skip past packets that userspace has released */
+ j = kring->nr_hwcur; /* netmap ring index */
+ if (resvd > 0) {
+ if (resvd + ring->avail >= lim + 1) {
+ D("XXX invalid reserve/avail %d %d", resvd, ring->avail);
+ ring->reserved = resvd = 0; // XXX panic...
+ }
+ k = (k >= resvd) ? k - resvd : k + lim + 1 - resvd;
+ }
+
+ if (j != k) { /* userspace has released some packets. */
+ n = k - j;
+ if (n < 0)
+ n += kring->nkr_num_slots;
+ ND("userspace releases %d packets", n);
+ for (n = 0; likely(j != k); n++) {
+ struct netmap_slot *slot = &ring->slot[j];
+ void *addr = NMB(slot);
+
+ if (addr == netmap_buffer_base) { /* bad buf */
+ if (do_lock)
+ na->nm_lock(ifp, NETMAP_RX_UNLOCK, ring_nr);
+ return netmap_ring_reinit(kring);
+ }
+ /* decrease refcount for buffer */
+
+ slot->flags &= ~NS_BUF_CHANGED;
+ j = unlikely(j == lim) ? 0 : j + 1;
+ }
+ kring->nr_hwavail -= n;
+ kring->nr_hwcur = k;
+ }
+ /* tell userspace that there are new packets */
+ ring->avail = kring->nr_hwavail - resvd;
+ if (do_lock)
+ na->nm_lock(ifp, NETMAP_RX_UNLOCK, ring_nr);
+ return 0;
+}
+
+static void
+bdg_netmap_attach(struct ifnet *ifp)
+{
+ struct netmap_adapter na;
+
+ ND("attaching virtual bridge");
+ bzero(&na, sizeof(na));
+
+ na.ifp = ifp;
+ na.separate_locks = 1;
+ na.num_tx_desc = NM_BRIDGE_RINGSIZE;
+ na.num_rx_desc = NM_BRIDGE_RINGSIZE;
+ na.nm_txsync = bdg_netmap_txsync;
+ na.nm_rxsync = bdg_netmap_rxsync;
+ na.nm_register = bdg_netmap_reg;
+ netmap_attach(&na, 1);
+}
+
+#endif /* NM_BRIDGE */
static struct cdev *netmap_dev; /* /dev/netmap character device. */
@@ -1228,13 +2044,21 @@ netmap_init(void)
error = netmap_memory_init();
if (error != 0) {
- printf("netmap: unable to initialize the memory allocator.");
+ printf("netmap: unable to initialize the memory allocator.\n");
return (error);
}
printf("netmap: loaded module with %d Mbytes\n",
(int)(nm_mem->nm_totalsize >> 20));
netmap_dev = make_dev(&netmap_cdevsw, 0, UID_ROOT, GID_WHEEL, 0660,
"netmap");
+
+#ifdef NM_BRIDGE
+ {
+ int i;
+ for (i = 0; i < NM_BRIDGES; i++)
+ mtx_init(&nm_bridges[i].bdg_lock, "bdg lock", "bdg_lock", MTX_DEF);
+ }
+#endif
return (error);
}
@@ -1253,6 +2077,7 @@ netmap_fini(void)
}
+#ifdef __FreeBSD__
/*
* Kernel entry point.
*
@@ -1284,3 +2109,4 @@ netmap_loader(__unused struct module *module, int event, __unused void *arg)
DEV_MODULE(netmap, netmap_loader, NULL);
+#endif /* __FreeBSD__ */
diff --git a/sys/dev/netmap/netmap_kern.h b/sys/dev/netmap/netmap_kern.h
index a1ac925..ebd4f71 100644
--- a/sys/dev/netmap/netmap_kern.h
+++ b/sys/dev/netmap/netmap_kern.h
@@ -25,7 +25,7 @@
/*
* $FreeBSD$
- * $Id: netmap_kern.h 10602 2012-02-21 16:47:55Z luigi $
+ * $Id: netmap_kern.h 11343 2012-07-03 09:08:38Z luigi $
*
* The header contains the definitions of constants and function
* prototypes used only in kernelspace.
@@ -37,6 +37,9 @@
#define NETMAP_MEM2 // use the new memory allocator
#if defined(__FreeBSD__)
+#define likely(x) __builtin_expect(!!(x), 1)
+#define unlikely(x) __builtin_expect(!!(x), 0)
+
#define NM_LOCK_T struct mtx
#define NM_SELINFO_T struct selinfo
#define MBUF_LEN(m) ((m)->m_pkthdr.len)
@@ -46,12 +49,35 @@
#define NM_SELINFO_T wait_queue_head_t
#define MBUF_LEN(m) ((m)->len)
#define NM_SEND_UP(ifp, m) netif_rx(m)
+
+#ifndef DEV_NETMAP
+#define DEV_NETMAP
+#endif
+
+/*
+ * IFCAP_NETMAP goes into net_device's flags (if_capabilities)
+ * and priv_flags (if_capenable). The latter used to be 16 bits
+ * up to linux 2.6.36, so we need to use a 16 bit value on older
+ * platforms and tolerate the clash with IFF_DYNAMIC and IFF_BRIDGE_PORT.
+ * For the 32-bit value, 0x100000 (bit 20) has no clashes up to 3.3.1
+ */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37)
+#define IFCAP_NETMAP 0x8000
#else
-#error unsupported platform
+#define IFCAP_NETMAP 0x100000
#endif
-#ifdef MALLOC_DECLARE
-MALLOC_DECLARE(M_NETMAP);
+#elif defined (__APPLE__)
+#warning apple support is experimental
+#define likely(x) __builtin_expect(!!(x), 1)
+#define unlikely(x) __builtin_expect(!!(x), 0)
+#define NM_LOCK_T IOLock *
+#define NM_SELINFO_T struct selinfo
+#define MBUF_LEN(m) ((m)->m_pkthdr.len)
+#define NM_SEND_UP(ifp, m) ((ifp)->if_input)(ifp, m)
+
+#else
+#error unsupported platform
#endif
#define ND(format, ...)
@@ -150,8 +176,11 @@ struct netmap_adapter {
void (*nm_lock)(struct ifnet *, int what, u_int ringid);
int (*nm_txsync)(struct ifnet *, u_int ring, int lock);
int (*nm_rxsync)(struct ifnet *, u_int ring, int lock);
+
+ int bdg_port;
#ifdef linux
struct net_device_ops nm_ndo;
+ int if_refcount; // XXX additions for bridge
#endif /* linux */
};
@@ -212,7 +241,7 @@ struct netmap_slot *netmap_reset(struct netmap_adapter *na,
enum txrx tx, int n, u_int new_cur);
int netmap_ring_reinit(struct netmap_kring *);
-extern int netmap_buf_size;
+extern u_int netmap_buf_size;
#define NETMAP_BUF_SIZE netmap_buf_size
extern int netmap_mitigate;
extern int netmap_no_pendintr;
@@ -240,6 +269,7 @@ enum { /* verbose flags */
#define NA(_ifp) ((struct netmap_adapter *)WNA(_ifp))
+#ifdef __FreeBSD__
/* Callback invoked by the dma machinery after a successfull dmamap_load */
static void netmap_dmamap_cb(__unused void *arg,
__unused bus_dma_segment_t * segs, __unused int nseg, __unused int error)
@@ -267,6 +297,48 @@ netmap_reload_map(bus_dma_tag_t tag, bus_dmamap_t map, void *buf)
netmap_dmamap_cb, NULL, BUS_DMA_NOWAIT);
}
}
+#else /* linux */
+
+/*
+ * XXX How do we redefine these functions:
+ *
+ * on linux we need
+ * dma_map_single(&pdev->dev, virt_addr, len, direction)
+ * dma_unmap_single(&adapter->pdev->dev, phys_addr, len, direction
+ * The len can be implicit (on netmap it is NETMAP_BUF_SIZE)
+ * unfortunately the direction is not, so we need to change
+ * something to have a cross API
+ */
+#define netmap_load_map(_t, _m, _b)
+#define netmap_reload_map(_t, _m, _b)
+#if 0
+ struct e1000_buffer *buffer_info = &tx_ring->buffer_info[l];
+ /* set time_stamp *before* dma to help avoid a possible race */
+ buffer_info->time_stamp = jiffies;
+ buffer_info->mapped_as_page = false;
+ buffer_info->length = len;
+ //buffer_info->next_to_watch = l;
+ /* reload dma map */
+ dma_unmap_single(&adapter->pdev->dev, buffer_info->dma,
+ NETMAP_BUF_SIZE, DMA_TO_DEVICE);
+ buffer_info->dma = dma_map_single(&adapter->pdev->dev,
+ addr, NETMAP_BUF_SIZE, DMA_TO_DEVICE);
+
+ if (dma_mapping_error(&adapter->pdev->dev, buffer_info->dma)) {
+ D("dma mapping error");
+ /* goto dma_error; See e1000_put_txbuf() */
+ /* XXX reset */
+ }
+ tx_desc->buffer_addr = htole64(buffer_info->dma); //XXX
+
+#endif
+
+/*
+ * The bus_dmamap_sync() can be one of wmb() or rmb() depending on direction.
+ */
+#define bus_dmamap_sync(_a, _b, _c)
+
+#endif /* linux */
/*
* functions to map NIC to KRING indexes (n2k) and vice versa (k2n)
@@ -322,7 +394,7 @@ static inline void *
NMB(struct netmap_slot *slot)
{
uint32_t i = slot->buf_idx;
- return (i >= netmap_total_buffers) ? NMB_VA(0) : NMB_VA(i);
+ return (unlikely(i >= netmap_total_buffers)) ? NMB_VA(0) : NMB_VA(i);
}
static inline void *
@@ -341,4 +413,6 @@ PNMB(struct netmap_slot *slot, uint64_t *pp)
/* default functions to handle rx/tx interrupts */
int netmap_rx_irq(struct ifnet *, int, int *);
#define netmap_tx_irq(_n, _q) netmap_rx_irq(_n, _q, NULL)
+
+extern int netmap_copy;
#endif /* _NET_NETMAP_KERN_H_ */
diff --git a/sys/dev/netmap/netmap_mem2.c b/sys/dev/netmap/netmap_mem2.c
index 76ef62e..03a665a 100644
--- a/sys/dev/netmap/netmap_mem2.c
+++ b/sys/dev/netmap/netmap_mem2.c
@@ -25,7 +25,7 @@
/*
* $FreeBSD$
- * $Id: netmap_mem2.c 10830 2012-03-22 18:06:01Z luigi $
+ * $Id: netmap_mem2.c 11445 2012-07-30 10:49:07Z luigi $
*
* New memory allocator for netmap
*/
@@ -300,12 +300,13 @@ netmap_obj_free_va(struct netmap_obj_pool *p, void *vaddr)
static void
-netmap_new_bufs(struct netmap_if *nifp __unused,
+netmap_new_bufs(struct netmap_if *nifp,
struct netmap_slot *slot, u_int n)
{
struct netmap_obj_pool *p = nm_mem->nm_buf_pool;
uint32_t i = 0; /* slot counter */
+ (void)nifp; /* UNUSED */
for (i = 0; i < n; i++) {
void *vaddr = netmap_buf_malloc();
if (vaddr == NULL) {
@@ -679,11 +680,11 @@ netmap_if_new(const char *ifname, struct netmap_adapter *na)
#ifdef linux
// XXX initialize the selrecord structs.
for (i = 0; i < ntx; i++)
- init_waitqueue_head(&na->rx_rings[i].si);
- for (i = 0; i < nrx; i++)
init_waitqueue_head(&na->tx_rings[i].si);
- init_waitqueue_head(&na->rx_si);
+ for (i = 0; i < nrx; i++)
+ init_waitqueue_head(&na->rx_rings[i].si);
init_waitqueue_head(&na->tx_si);
+ init_waitqueue_head(&na->rx_si);
#endif
final:
/*
diff --git a/sys/dev/pccbb/pccbb_pci.c b/sys/dev/pccbb/pccbb_pci.c
index eca5ed7..542dea6 100644
--- a/sys/dev/pccbb/pccbb_pci.c
+++ b/sys/dev/pccbb/pccbb_pci.c
@@ -465,6 +465,11 @@ cbb_chipinit(struct cbb_softc *sc)
if (pci_read_config(sc->dev, PCIR_LATTIMER, 1) < 0x20)
pci_write_config(sc->dev, PCIR_LATTIMER, 0x20, 1);
+ /* Restore bus configuration */
+ pci_write_config(sc->dev, PCIR_PRIBUS_2, sc->pribus, 1);
+ pci_write_config(sc->dev, PCIR_SECBUS_2, sc->secbus, 1);
+ pci_write_config(sc->dev, PCIR_SUBBUS_2, sc->subbus, 1);
+
/* Enable memory access */
PCI_MASK_CONFIG(sc->dev, PCIR_COMMAND,
| PCIM_CMD_MEMEN
diff --git a/sys/dev/puc/puc_cfg.h b/sys/dev/puc/puc_cfg.h
index f4969f64..4c2c65e 100644
--- a/sys/dev/puc/puc_cfg.h
+++ b/sys/dev/puc/puc_cfg.h
@@ -79,7 +79,7 @@ struct puc_cfg {
int8_t ports;
int8_t rid; /* Rid of first port */
int8_t d_rid; /* Delta rid of next ports */
- int16_t d_ofs; /* Delta offset of next ports */
+ int8_t d_ofs; /* Delta offset of next ports */
puc_config_f *config_function;
};
diff --git a/sys/dev/puc/pucdata.c b/sys/dev/puc/pucdata.c
index 4040a2f..54577ab 100644
--- a/sys/dev/puc/pucdata.c
+++ b/sys/dev/puc/pucdata.c
@@ -510,13 +510,15 @@ const struct puc_cfg puc_pci_devices[] = {
{ 0x1393, 0x1024, 0xffff, 0,
"Moxa Technologies, Smartio CP-102E/PCIe",
DEFAULT_RCLK * 8,
- PUC_PORT_2S, 0x14, 0, 0x200
+ PUC_PORT_2S, 0x14, 0, -1,
+ .config_function = puc_config_moxa
},
{ 0x1393, 0x1025, 0xffff, 0,
"Moxa Technologies, Smartio CP-102EL/PCIe",
DEFAULT_RCLK * 8,
- PUC_PORT_2S, 0x14, 0, 0x200,
+ PUC_PORT_2S, 0x14, 0, -1,
+ .config_function = puc_config_moxa
},
{ 0x1393, 0x1040, 0xffff, 0,
@@ -572,7 +574,8 @@ const struct puc_cfg puc_pci_devices[] = {
{ 0x1393, 0x1182, 0xffff, 0,
"Moxa Technologies, Smartio CP-118EL-A/PCIe",
DEFAULT_RCLK * 8,
- PUC_PORT_8S, 0x14, 0, 0x200,
+ PUC_PORT_8S, 0x14, 0, -1,
+ .config_function = puc_config_moxa
},
{ 0x1393, 0x1680, 0xffff, 0,
@@ -596,7 +599,8 @@ const struct puc_cfg puc_pci_devices[] = {
{ 0x1393, 0x1683, 0xffff, 0,
"Moxa Technologies, Smartio CP-168EL-A/PCIe",
DEFAULT_RCLK * 8,
- PUC_PORT_8S, 0x14, 0, 0x200,
+ PUC_PORT_8S, 0x14, 0, -1,
+ .config_function = puc_config_moxa
},
{ 0x13a8, 0x0152, 0xffff, 0,
@@ -1159,7 +1163,12 @@ puc_config_moxa(struct puc_softc *sc, enum puc_cfg_cmd cmd, int port,
intptr_t *res)
{
if (cmd == PUC_CFG_GET_OFS) {
- *res = ((port == 3) ? 7 : port) * 0x200;
+ const struct puc_cfg *cfg = sc->sc_cfg;
+
+ if (port == 3 && (cfg->device == 0x1045 || cfg->device == 0x1144))
+ port = 7;
+ *res = port * 0x200;
+
return 0;
}
return (ENXIO);
diff --git a/sys/dev/sdhci/sdhci.c b/sys/dev/sdhci/sdhci.c
index 0bbf608..0c78dba 100644
--- a/sys/dev/sdhci/sdhci.c
+++ b/sys/dev/sdhci/sdhci.c
@@ -364,7 +364,7 @@ sdhci_lower_frequency(device_t dev)
/*
* Some SD/MMC cards don't work with the default base
- * clock frequency of 200MHz. Lower it to 50Hz.
+ * clock frequency of 200MHz. Lower it to 50MHz.
*/
pci_write_config(dev, SDHC_PCI_BASE_FREQ_KEY, 0x01, 1);
pci_write_config(dev, SDHC_PCI_BASE_FREQ, 50, 1);
diff --git a/sys/dev/spibus/spi.h b/sys/dev/spibus/spi.h
index 663f5ff..4f89e94 100644
--- a/sys/dev/spibus/spi.h
+++ b/sys/dev/spibus/spi.h
@@ -1,6 +1,7 @@
/* $FreeBSD$ */
struct spi_command {
+ int cs;
void *tx_cmd;
uint32_t tx_cmd_sz;
void *rx_cmd;
@@ -10,3 +11,5 @@ struct spi_command {
void *rx_data;
uint32_t rx_data_sz;
};
+
+#define SPI_CHIP_SELECT_HIGH 0x1 /* Chip select high (else low) */
diff --git a/sys/dev/spibus/spibus.c b/sys/dev/spibus/spibus.c
index 43b4e7e..0f8e359 100644
--- a/sys/dev/spibus/spibus.c
+++ b/sys/dev/spibus/spibus.c
@@ -158,6 +158,9 @@ spibus_hinted_child(device_t bus, const char *dname, int dunit)
static int
spibus_transfer_impl(device_t dev, device_t child, struct spi_command *cmd)
{
+ /* Maybe set flags too? spi mode? */
+ spibus_get_cs(dev, &cmd->cs);
+
return (SPIBUS_TRANSFER(device_get_parent(dev), child, cmd));
}
diff --git a/sys/dev/sym/sym_hipd.c b/sys/dev/sym/sym_hipd.c
index 8ac59b9..3c8be40 100644
--- a/sys/dev/sym/sym_hipd.c
+++ b/sys/dev/sym/sym_hipd.c
@@ -8537,8 +8537,8 @@ sym_pci_attach(device_t dev)
*/
if (bus_dma_tag_create(np->bus_dmat, 1, SYM_CONF_DMA_BOUNDARY,
BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL,
- BUS_SPACE_MAXSIZE, SYM_CONF_MAX_SG, SYM_CONF_DMA_BOUNDARY,
- BUS_DMA_ALLOCNOW, busdma_lock_mutex, &np->mtx, &np->data_dmat)) {
+ BUS_SPACE_MAXSIZE_32BIT, SYM_CONF_MAX_SG, SYM_CONF_DMA_BOUNDARY,
+ 0, busdma_lock_mutex, &np->mtx, &np->data_dmat)) {
device_printf(dev, "failed to create DMA tag.\n");
goto attach_failed;
}
diff --git a/sys/dev/usb/controller/at91dci_atmelarm.c b/sys/dev/usb/controller/at91dci_atmelarm.c
index da9ba36..468644c 100644
--- a/sys/dev/usb/controller/at91dci_atmelarm.c
+++ b/sys/dev/usb/controller/at91dci_atmelarm.c
@@ -61,12 +61,12 @@ __FBSDID("$FreeBSD$");
#include <arm/at91/at91_pmcvar.h>
#include <arm/at91/at91rm92reg.h>
-#include <arm/at91/at91_pio_rm9200.h>
+#include <arm/at91/at91_pioreg.h>
#include <arm/at91/at91_piovar.h>
#define MEM_RID 0
-/* Pin Definitions - do they belong here or somewhere else ? */
+/* Pin Definitions - do they belong here or somewhere else ? -- YES! */
#define VBUS_MASK AT91C_PIO_PB24
#define VBUS_BASE AT91RM92_PIOB_BASE
diff --git a/sys/dev/usb/controller/ohci_atmelarm.c b/sys/dev/usb/controller/ohci_atmelarm.c
index 643b4d1..4b271c3 100644
--- a/sys/dev/usb/controller/ohci_atmelarm.c
+++ b/sys/dev/usb/controller/ohci_atmelarm.c
@@ -76,6 +76,7 @@ struct at91_ohci_softc {
static int
ohci_atmelarm_probe(device_t dev)
{
+
device_set_desc(dev, "AT91 integrated OHCI controller");
return (BUS_PROBE_DEFAULT);
}
diff --git a/sys/dev/usb/controller/xhci_pci.c b/sys/dev/usb/controller/xhci_pci.c
index c9e067e..db74b1c 100644
--- a/sys/dev/usb/controller/xhci_pci.c
+++ b/sys/dev/usb/controller/xhci_pci.c
@@ -101,6 +101,8 @@ xhci_pci_match(device_t self)
case 0x1e318086:
return ("Intel Panther Point USB 3.0 controller");
+ case 0x8c318086:
+ return ("Intel Lynx Point USB 3.0 controller");
default:
break;
@@ -245,6 +247,7 @@ static int
xhci_pci_take_controller(device_t self)
{
struct xhci_softc *sc = device_get_softc(self);
+ uint32_t device_id = pci_get_devid(self);
uint32_t cparams;
uint32_t eecp;
uint32_t eec;
@@ -285,5 +288,13 @@ xhci_pci_take_controller(device_t self)
usb_pause_mtx(NULL, hz / 100); /* wait 10ms */
}
}
+
+ /* On Intel chipsets reroute ports from EHCI to XHCI controller. */
+ if (device_id == 0x1e318086 /* Panther Point */ ||
+ device_id == 0x8c318086 /* Lynx Point */) {
+ pci_write_config(self, PCI_XHCI_INTEL_USB3_PSSEN, 0xffffffff, 4);
+ pci_write_config(self, PCI_XHCI_INTEL_XUSB2PR, 0xffffffff, 4);
+ }
+
return (0);
}
diff --git a/sys/dev/usb/controller/xhcireg.h b/sys/dev/usb/controller/xhcireg.h
index b14dabc..a130f65 100644
--- a/sys/dev/usb/controller/xhcireg.h
+++ b/sys/dev/usb/controller/xhcireg.h
@@ -34,6 +34,9 @@
#define PCI_USB_REV_3_0 0x30 /* USB 3.0 */
#define PCI_XHCI_FLADJ 0x61 /* RW frame length adjust */
+#define PCI_XHCI_INTEL_XUSB2PR 0xD0 /* Intel USB2 Port Routing */
+#define PCI_XHCI_INTEL_USB3_PSSEN 0xD8 /* Intel USB3 Port SuperSpeed Enable */
+
/* XHCI capability registers */
#define XHCI_CAPLENGTH 0x00 /* RO capability */
#define XHCI_RESERVED 0x01 /* Reserved */
diff --git a/sys/dev/usb/net/if_udav.c b/sys/dev/usb/net/if_udav.c
index 2507846..c6f0811 100644
--- a/sys/dev/usb/net/if_udav.c
+++ b/sys/dev/usb/net/if_udav.c
@@ -169,7 +169,7 @@ MODULE_DEPEND(udav, ether, 1, 1, 1);
MODULE_DEPEND(udav, miibus, 1, 1, 1);
MODULE_VERSION(udav, 1);
-static const struct usb_ether_methods udav_ue_methods = {
+static struct usb_ether_methods udav_ue_methods = {
.ue_attach_post = udav_attach_post,
.ue_start = udav_start,
.ue_init = udav_init,
@@ -206,7 +206,8 @@ static const STRUCT_USB_HOST_ID udav_devs[] = {
{USB_VPI(USB_VENDOR_SHANTOU, USB_PRODUCT_SHANTOU_ADM8515, 0)},
/* Kontron AG USB Ethernet */
{USB_VPI(USB_VENDOR_KONTRON, USB_PRODUCT_KONTRON_DM9601, 0)},
- {USB_VPI(USB_VENDOR_KONTRON, USB_PRODUCT_KONTRON_JP1082, 0)},
+ {USB_VPI(USB_VENDOR_KONTRON, USB_PRODUCT_KONTRON_JP1082,
+ UDAV_FLAG_NO_PHY)},
};
static void
@@ -259,6 +260,16 @@ udav_attach(device_t dev)
goto detach;
}
+ /*
+ * The JP1082 has an unusable PHY and provides no link information.
+ */
+ if (sc->sc_flags & UDAV_FLAG_NO_PHY) {
+ udav_ue_methods.ue_tick = NULL;
+ udav_ue_methods.ue_mii_upd = NULL;
+ udav_ue_methods.ue_mii_sts = NULL;
+ sc->sc_flags |= UDAV_FLAG_LINK;
+ }
+
ue->ue_sc = sc;
ue->ue_dev = dev;
ue->ue_udev = uaa->device;
@@ -712,7 +723,8 @@ udav_stop(struct usb_ether *ue)
UDAV_LOCK_ASSERT(sc, MA_OWNED);
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
- sc->sc_flags &= ~UDAV_FLAG_LINK;
+ if (!(sc->sc_flags & UDAV_FLAG_NO_PHY))
+ sc->sc_flags &= ~UDAV_FLAG_LINK;
/*
* stop all the transfers, if not already stopped:
diff --git a/sys/dev/usb/net/if_udavreg.h b/sys/dev/usb/net/if_udavreg.h
index 82715e8..7c35829 100644
--- a/sys/dev/usb/net/if_udavreg.h
+++ b/sys/dev/usb/net/if_udavreg.h
@@ -159,6 +159,7 @@ struct udav_softc {
int sc_flags;
#define UDAV_FLAG_LINK 0x0001
#define UDAV_FLAG_EXT_PHY 0x0040
+#define UDAV_FLAG_NO_PHY 0x0080
};
#define UDAV_LOCK(_sc) mtx_lock(&(_sc)->sc_mtx)
diff --git a/sys/dev/usb/quirk/usb_quirk.c b/sys/dev/usb/quirk/usb_quirk.c
index 41f5002..b269f60 100644
--- a/sys/dev/usb/quirk/usb_quirk.c
+++ b/sys/dev/usb/quirk/usb_quirk.c
@@ -123,6 +123,7 @@ static struct usb_quirk_entry usb_quirks[USB_DEV_QUIRKS_MAX] = {
USB_QUIRK(METAGEEK2, WISPYDBX, 0x0000, 0xffff, UQ_KBD_IGNORE, UQ_HID_IGNORE),
USB_QUIRK(TENX, UAUDIO0, 0x0101, 0x0101, UQ_AUDIO_SWAP_LR),
/* MS keyboards do weird things */
+ USB_QUIRK(MICROSOFT, NATURAL4000, 0x0000, 0xFFFF, UQ_KBD_BOOTPROTO),
USB_QUIRK(MICROSOFT, WLINTELLIMOUSE, 0x0000, 0xffff, UQ_MS_LEADING_BYTE),
/* umodem(4) device quirks */
USB_QUIRK(METRICOM, RICOCHET_GS, 0x100, 0x100, UQ_ASSUME_CM_OVER_DATA),
diff --git a/sys/dev/usb/serial/u3g.c b/sys/dev/usb/serial/u3g.c
index cb39ba0..c524531 100644
--- a/sys/dev/usb/serial/u3g.c
+++ b/sys/dev/usb/serial/u3g.c
@@ -282,9 +282,12 @@ static const STRUCT_USB_HOST_ID u3g_devs[] = {
U3G_DEV(HUAWEI, E143F, U3GINIT_HUAWEI),
U3G_DEV(HUAWEI, E173, 0),
U3G_DEV(HUAWEI, E173_INIT, U3GINIT_HUAWEISCSI),
+ U3G_DEV(HUAWEI, E3131, 0),
+ U3G_DEV(HUAWEI, E3131_INIT, U3GINIT_HUAWEISCSI),
U3G_DEV(HUAWEI, E180V, U3GINIT_HUAWEI),
U3G_DEV(HUAWEI, E220, U3GINIT_HUAWEI),
U3G_DEV(HUAWEI, E220BIS, U3GINIT_HUAWEI),
+ U3G_DEV(HUAWEI, E392, U3GINIT_HUAWEISCSI),
U3G_DEV(HUAWEI, MOBILE, U3GINIT_HUAWEI),
U3G_DEV(HUAWEI, E1752, U3GINIT_HUAWEISCSI),
U3G_DEV(HUAWEI, E1820, U3GINIT_HUAWEISCSI),
@@ -357,6 +360,8 @@ static const STRUCT_USB_HOST_ID u3g_devs[] = {
U3G_DEV(QUALCOMM2, MF330, 0),
U3G_DEV(QUALCOMM2, SIM5218, 0),
U3G_DEV(QUALCOMM2, VW110L, U3GINIT_SCSIEJECT),
+ U3G_DEV(QUALCOMM2, GOBI2000_QDL, 0),
+ U3G_DEV(QUALCOMM2, GOBI2000, 0),
U3G_DEV(QUALCOMMINC, AC2726, 0),
U3G_DEV(QUALCOMMINC, AC8700, 0),
U3G_DEV(QUALCOMMINC, AC8710, 0),
diff --git a/sys/dev/usb/serial/uplcom.c b/sys/dev/usb/serial/uplcom.c
index 37a91ae..c08a18e 100644
--- a/sys/dev/usb/serial/uplcom.c
+++ b/sys/dev/usb/serial/uplcom.c
@@ -279,6 +279,7 @@ static const STRUCT_USB_HOST_ID uplcom_devs[] = {
UPLCOM_DEV(PROLIFIC, DCU11), /* DCU-11 Phone Cable */
UPLCOM_DEV(PROLIFIC, HCR331), /* HCR331 Card Reader */
UPLCOM_DEV(PROLIFIC, MICROMAX_610U), /* Micromax 610U modem */
+ UPLCOM_DEV(PROLIFIC, MOTOROLA), /* Motorola cable */
UPLCOM_DEV(PROLIFIC, PHAROS), /* Prolific Pharos */
UPLCOM_DEV(PROLIFIC, PL2303), /* Generic adapter */
UPLCOM_DEV(PROLIFIC, RSAQ2), /* I/O DATA USB-RSAQ2 */
diff --git a/sys/dev/usb/serial/uslcom.c b/sys/dev/usb/serial/uslcom.c
index 848f2d5..9a67b79 100644
--- a/sys/dev/usb/serial/uslcom.c
+++ b/sys/dev/usb/serial/uslcom.c
@@ -70,12 +70,13 @@ SYSCTL_INT(_hw_usb_uslcom, OID_AUTO, debug, CTLFLAG_RW,
/* Request codes */
#define USLCOM_UART 0x00
-#define USLCOM_BAUD_RATE 0x01
+#define USLCOM_SET_BAUD_DIV 0x01
#define USLCOM_DATA 0x03
#define USLCOM_BREAK 0x05
#define USLCOM_CTRL 0x07
#define USLCOM_RCTRL 0x08
#define USLCOM_SET_FLOWCTRL 0x13
+#define USLCOM_SET_BAUD_RATE 0x1e
#define USLCOM_VENDOR_SPECIFIC 0xff
/* USLCOM_UART values */
@@ -92,8 +93,8 @@ SYSCTL_INT(_hw_usb_uslcom, OID_AUTO, debug, CTLFLAG_RW,
#define USLCOM_CTRL_RI 0x0040
#define USLCOM_CTRL_DCD 0x0080
-/* USLCOM_BAUD_RATE values */
-#define USLCOM_BAUD_REF 0x384000
+/* USLCOM_SET_BAUD_DIV values */
+#define USLCOM_BAUD_REF 3686400 /* 3.6864 MHz */
/* USLCOM_DATA values */
#define USLCOM_STOP_BITS_1 0x00
@@ -213,7 +214,13 @@ static struct ucom_callback uslcom_callback = {
static const STRUCT_USB_HOST_ID uslcom_devs[] = {
#define USLCOM_DEV(v,p) { USB_VP(USB_VENDOR_##v, USB_PRODUCT_##v##_##p) }
USLCOM_DEV(BALTECH, CARDREADER),
+ USLCOM_DEV(CLIPSAL, 5000CT2),
+ USLCOM_DEV(CLIPSAL, 5500PACA),
USLCOM_DEV(CLIPSAL, 5500PCU),
+ USLCOM_DEV(CLIPSAL, 560884),
+ USLCOM_DEV(CLIPSAL, 5800PC),
+ USLCOM_DEV(CLIPSAL, C5000CT2),
+ USLCOM_DEV(CLIPSAL, L51xx),
USLCOM_DEV(DATAAPEX, MULTICOM),
USLCOM_DEV(DELL, DW700),
USLCOM_DEV(DIGIANSWER, ZIGBEE802154),
@@ -221,17 +228,27 @@ static const STRUCT_USB_HOST_ID uslcom_devs[] = {
USLCOM_DEV(DYNASTREAM, ANTDEVBOARD2),
USLCOM_DEV(DYNASTREAM, ANT2USB),
USLCOM_DEV(ELV, USBI2C),
+ USLCOM_DEV(FESTO, CMSP),
+ USLCOM_DEV(FESTO, CPX_USB),
USLCOM_DEV(FOXCONN, PIRELLI_DP_L10),
USLCOM_DEV(FOXCONN, TCOM_TC_300),
USLCOM_DEV(GEMALTO, PROXPU),
USLCOM_DEV(JABLOTRON, PC60B),
+ USLCOM_DEV(KAMSTRUP, OPTICALEYE),
+ USLCOM_DEV(KAMSTRUP, MBUS_250D),
+ USLCOM_DEV(LINKINSTRUMENTS, MSO19),
+ USLCOM_DEV(LINKINSTRUMENTS, MSO28),
+ USLCOM_DEV(LINKINSTRUMENTS, MSO28_2),
USLCOM_DEV(MEI, CASHFLOW_SC),
USLCOM_DEV(MEI, S2000),
- USLCOM_DEV(JABLOTRON, PC60B),
USLCOM_DEV(OWEN, AC4),
USLCOM_DEV(PHILIPS, ACE1001),
USLCOM_DEV(PLX, CA42),
USLCOM_DEV(RENESAS, RX610),
+ USLCOM_DEV(SILABS, AC_SERV_CAN),
+ USLCOM_DEV(SILABS, AC_SERV_CIS),
+ USLCOM_DEV(SILABS, AC_SERV_IBUS),
+ USLCOM_DEV(SILABS, AC_SERV_OBD),
USLCOM_DEV(SILABS, AEROCOMM),
USLCOM_DEV(SILABS, AMBER_AMB2560),
USLCOM_DEV(SILABS, ARGUSISP),
@@ -247,16 +264,21 @@ static const STRUCT_USB_HOST_ID uslcom_devs[] = {
USLCOM_DEV(SILABS, C2_EDGE_MODEM),
USLCOM_DEV(SILABS, CP2102),
USLCOM_DEV(SILABS, CP210X_2),
+ USLCOM_DEV(SILABS, CP210X_3),
+ USLCOM_DEV(SILABS, CP210X_4),
USLCOM_DEV(SILABS, CRUMB128),
USLCOM_DEV(SILABS, CYGNAL),
USLCOM_DEV(SILABS, CYGNAL_DEBUG),
USLCOM_DEV(SILABS, CYGNAL_GPS),
USLCOM_DEV(SILABS, DEGREE),
+ USLCOM_DEV(SILABS, DEKTEK_DTAPLUS),
USLCOM_DEV(SILABS, EMS_C1007),
+ USLCOM_DEV(SILABS, HAMLINKUSB),
USLCOM_DEV(SILABS, HELICOM),
USLCOM_DEV(SILABS, IMS_USB_RS422),
USLCOM_DEV(SILABS, INFINITY_MIC),
USLCOM_DEV(SILABS, INSYS_MODEM),
+ USLCOM_DEV(SILABS, IRZ_SG10),
USLCOM_DEV(SILABS, KYOCERA_GPS),
USLCOM_DEV(SILABS, LIPOWSKY_HARP),
USLCOM_DEV(SILABS, LIPOWSKY_JTAG),
@@ -264,12 +286,14 @@ static const STRUCT_USB_HOST_ID uslcom_devs[] = {
USLCOM_DEV(SILABS, MC35PU),
USLCOM_DEV(SILABS, MJS_TOSLINK),
USLCOM_DEV(SILABS, MSD_DASHHAWK),
+ USLCOM_DEV(SILABS, MULTIPLEX_RC),
+ USLCOM_DEV(SILABS, OPTRIS_MSPRO),
USLCOM_DEV(SILABS, POLOLU),
USLCOM_DEV(SILABS, PROCYON_AVS),
USLCOM_DEV(SILABS, SB_PARAMOUNT_ME),
USLCOM_DEV(SILABS, SUUNTO),
USLCOM_DEV(SILABS, TAMSMASTER),
- USLCOM_DEV(SILABS, TELEGESYS_ETRX2),
+ USLCOM_DEV(SILABS, TELEGESIS_ETRX2),
USLCOM_DEV(SILABS, TRACIENT),
USLCOM_DEV(SILABS, TRAQMATE),
USLCOM_DEV(SILABS, USBCOUNT50),
@@ -511,19 +535,20 @@ uslcom_param(struct ucom_softc *ucom, struct termios *t)
{
struct uslcom_softc *sc = ucom->sc_parent;
struct usb_device_request req;
- uint32_t flowctrl[4];
+ uint32_t baudrate, flowctrl[4];
uint16_t data;
DPRINTF("\n");
+ baudrate = t->c_ospeed;
req.bmRequestType = USLCOM_WRITE;
- req.bRequest = USLCOM_BAUD_RATE;
- USETW(req.wValue, USLCOM_BAUD_REF / t->c_ospeed);
+ req.bRequest = USLCOM_SET_BAUD_RATE;
+ USETW(req.wValue, 0);
USETW(req.wIndex, USLCOM_PORT_NO);
- USETW(req.wLength, 0);
+ USETW(req.wLength, sizeof(baudrate));
- if (ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom,
- &req, NULL, 0, 1000)) {
+ if (ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom,
+ &req, &baudrate, 0, 1000)) {
DPRINTF("Set baudrate failed (ignored)\n");
}
diff --git a/sys/dev/usb/usbdevs b/sys/dev/usb/usbdevs
index aedea58..56a47b9 100644
--- a/sys/dev/usb/usbdevs
+++ b/sys/dev/usb/usbdevs
@@ -659,6 +659,7 @@ vendor SENAO 0x1740 Senao
vendor ASUS2 0x1761 ASUS
vendor SWEEX2 0x177f Sweex
vendor METAGEEK 0x1781 MetaGeek
+vendor KAMSTRUP 0x17a8 Kamstrup A/S
vendor WAVESENSE 0x17f4 WaveSense
vendor VAISALA 0x1843 Vaisala
vendor AMIT 0x18c5 AMIT
@@ -672,6 +673,7 @@ vendor STELERA 0x1a8d Stelera Wireless
vendor MATRIXORBITAL 0x1b3d Matrix Orbital
vendor OVISLINK 0x1b75 OvisLink
vendor TCTMOBILE 0x1bbb TCT Mobile
+vendor SUNPLUS 0x1bcf Sunplus Innovation Technology Inc.
vendor WAGO 0x1be3 WAGO Kontakttechnik GmbH.
vendor TELIT 0x1bc7 Telit
vendor LONGCHEER 0x1c9e Longcheer Holdings, Ltd.
@@ -683,6 +685,7 @@ vendor QISDA 0x1da5 Qisda
vendor METAGEEK2 0x1dd5 MetaGeek
vendor ALINK 0x1e0e Alink
vendor AIRTIES 0x1eda AirTies
+vendor FESTO 0x1e29 Festo
vendor VERTEX 0x1fe7 Vertex Wireless Co., Ltd.
vendor DLINK 0x2001 D-Link
vendor PLANEX2 0x2019 Planex Communications
@@ -699,6 +702,7 @@ vendor HIROSE 0x2631 Hirose Electric
vendor NHJ 0x2770 NHJ
vendor PLANEX 0x2c02 Planex Communications
vendor VIDZMEDIA 0x3275 VidzMedia Pte Ltd
+vendor LINKINSTRUMENTS 0x3195 Link Instruments Inc.
vendor AEI 0x3334 AEI
vendor HANK 0x3353 Hank Connection
vendor PQI 0x3538 PQI
@@ -1245,7 +1249,13 @@ product CISCOLINKSYS2 RT3070 0x4001 RT3070
product CISCOLINKSYS3 RT3070 0x0101 RT3070
/* Clipsal products */
-product CLIPSAL 5500PCU 0x0303 5500PCU C-Bus
+product CLIPSAL 560884 0x0101 560884 C-Bus Audio Matrix Switch
+product CLIPSAL 5500PACA 0x0201 5500PACA C-Bus Pascal Automation Controller
+product CLIPSAL 5800PC 0x0301 5800PC C-Bus Wireless Interface
+product CLIPSAL 5500PCU 0x0303 5500PCU C-Bus Interface
+product CLIPSAL 5000CT2 0x0304 5000CT2 C-Bus Touch Screen
+product CLIPSAL C5000CT2 0x0305 C5000CT2 C-Bus Touch Screen
+product CLIPSAL L51xx 0x0401 L51xx C-Bus Dimmer
/* CMOTECH products */
product CMOTECH CNU510 0x5141 CDMA Technologies USB modem
@@ -1591,6 +1601,10 @@ product FEIYA DUMMY 0x0000 Dummy product
product FEIYA 5IN1 0x1132 5-in-1 Card Reader
product FEIYA AC110 0x6300 AC-110 Card Reader
+/* Festo */
+product FESTO CPX_USB 0x0102 CPX-USB
+product FESTO CMSP 0x0501 CMSP
+
/* Fiberline */
product FIBERLINE WL430U 0x6003 WL-430U
@@ -1658,7 +1672,7 @@ product FUJITSUSIEMENS SCR 0x0009 Fujitsu-Siemens SCR USB Reader
product GARMIN IQUE_3600 0x0004 iQue 3600
/* Gemalto products */
-product GEMALTO PROXPU 0x5501 Prox-PU/CU
+product GEMALTO PROXPU 0x5501 Prox-PU/CU RFID Card Reader
/* General Instruments (Motorola) products */
product GENERALINSTMNTS SB5100 0x5100 SURFboard SB5100 Cable modem
@@ -1894,6 +1908,9 @@ product HUAWEI E143F 0x143f 3G modem
product HUAWEI E1752 0x1446 3G modem
product HUAWEI K3765 0x1465 3G modem
product HUAWEI E1820 0x14ac E1820 HSPA+ USB Slider
+product HUAWEI E3131_INIT 0x14fe 3G modem initial
+product HUAWEI E392 0x1505 LTE modem
+product HUAWEI E3131 0x1506 3G modem
product HUAWEI K3765_INIT 0x1520 K3765 Initial
product HUAWEI ETS2055 0x1803 CDMA modem
product HUAWEI E173 0x1c05 3G modem
@@ -1988,6 +2005,10 @@ product JVC MP_PRX1 0x3008 MP-PRX1 Ethernet
/* JRC products */
product JRC AH_J3001V_J3002V 0x0001 AirH PHONE AH-J3001V/J3002V
+/* Kamstrrup products */
+product KAMSTRUP OPTICALEYE 0x0001 Optical Eye/3-wire
+product KAMSTRUP MBUS_250D 0x0005 M-Bus Master MultiPort 250D
+
/* Kawatsu products */
product KAWATSU MH4000P 0x0003 MiniHub 4000P
@@ -2083,6 +2104,11 @@ product LEXMARK S2450 0x0009 Optra S 2450
/* Liebert products */
product LIEBERT POWERSURE_PXT 0xffff PowerSure Personal XT
+/* Link Instruments Inc. products */
+product LINKINSTRUMENTS MSO19 0xf190 Link Instruments MSO-19
+product LINKINSTRUMENTS MSO28 0xf280 Link Instruments MSO-28
+product LINKINSTRUMENTS MSO28_2 0xf281 Link Instruments MSO-28
+
/* Linksys products */
product LINKSYS MAUSB2 0x0105 Camedia MAUSB-2
product LINKSYS USB10TX1 0x200c USB10TX
@@ -2225,7 +2251,7 @@ product MGE UPS2 0xffff MGE UPS SYSTEMS PROTECTIONCENTER 2
/* MEI products */
product MEI CASHFLOW_SC 0x1100 Cashflow-SC Cash Acceptor
-product MEI S2000 0x1101 Seies 2000 Combo Acceptor
+product MEI S2000 0x1101 Series 2000 Combo Acceptor
/* Micro Star International products */
product MSI BT_DONGLE 0x1967 Bluetooth USB dongle
@@ -2338,6 +2364,10 @@ product MOTOROLA2 USBLAN2 0x6027 USBLAN
product MOTOROLA4 RT2770 0x9031 RT2770
product MOTOROLA4 RT3070 0x9032 RT3070
+/* MpMan products */
+product MPMAN MPF400_2 0x25a8 MPF400 Music Player 2Go
+product MPMAN MPF400_1 0x36d0 MPF400 Music Player 1Go
+
/* MultiTech products */
product MULTITECH ATLAS 0xf101 MT5634ZBA-USB modem
@@ -2664,6 +2694,7 @@ product PRIMAX HP_RH304AA 0x4d17 HP RH304AA mouse
/* Prolific products */
product PROLIFIC PL2301 0x0000 PL2301 Host-Host interface
product PROLIFIC PL2302 0x0001 PL2302 Host-Host interface
+product PROLIFIC MOTOROLA 0x0307 Motorola Cable
product PROLIFIC RSAQ2 0x04bb PL2303 Serial (IODATA USB-RSAQ2)
product PROLIFIC ALLTRONIX_GPRS 0x0609 Alltronix ACM003U00 modem
product PROLIFIC ALDIGA_AL11U 0x0611 AlDiga AL-11U modem
@@ -2703,6 +2734,8 @@ product QUALCOMM2 CDMA_MSM 0x3196 CDMA Technologies MSM modem
product QUALCOMM2 AC8700 0x6000 AC8700
product QUALCOMM2 VW110L 0x1000 Vertex Wireless 110L modem
product QUALCOMM2 SIM5218 0x9000 SIM5218
+product QUALCOMM2 GOBI2000_QDL 0x9204 Qualcomm Gobi 2000 QDL
+product QUALCOMM2 GOBI2000 0x9205 Qualcomm Gobi 2000 modem
product QUALCOMMINC CDMA_MSM 0x0001 CDMA Technologies MSM modem
product QUALCOMMINC E0002 0x0002 3G modem
product QUALCOMMINC E0003 0x0003 3G modem
@@ -3050,10 +3083,10 @@ product SILICOM U2E 0x0001 U2E
product SILICOM GPE 0x0002 Psion Gold Port Ethernet
/* SI Labs */
-product SILABS VSTABI 0x0f91 Vstabi
+product SILABS VSTABI 0x0f91 VStabi Controller
product SILABS ARKHAM_DS101_M 0x1101 Arkham DS101 Monitor
product SILABS ARKHAM_DS101_A 0x1601 Arkham DS101 Adapter
-product SILABS BSM7DUSB 0x800a BSM7-D-USB
+product SILABS BSM7DUSB 0x800a SPORTident BSM7-D USB
product SILABS POLOLU 0x803b Pololu Serial
product SILABS CYGNAL_DEBUG 0x8044 Cygnal Debug Adapter
product SILABS SB_PARAMOUNT_ME 0x8043 Software Bisque Paramount ME
@@ -3062,6 +3095,7 @@ product SILABS GSM2228 0x8054 Enfora GSM2228 USB
product SILABS ARGUSISP 0x8066 Argussoft ISP
product SILABS IMS_USB_RS422 0x806f IMS USB-RS422
product SILABS CRUMB128 0x807a Crumb128 board
+product SILABS OPTRIS_MSPRO 0x80c4 Optris MSpro LT Thermometer
product SILABS DEGREE 0x80ca Degree Controls Inc
product SILABS TRACIENT 0x80dd Tracient RFID
product SILABS TRAQMATE 0x80ed Track Systems Traqmate
@@ -3074,9 +3108,11 @@ product SILABS WMRRIGBLASTER 0x814a WMR RIGblaster Plug&Play
product SILABS WMRRIGTALK 0x814b WMR RIGtalk RT1
product SILABS B_G_H3000 0x8156 B&G H3000 Data Cable
product SILABS HELICOM 0x815e Helicomm IP-Link 1220-DVM
+product SILABS HAMLINKUSB 0x815f Timewave HamLinkUSB
product SILABS AVIT_USB_TTL 0x818b AVIT Research USB-TTL
-product SILABS MJS_TOSLINK 0x819f MJS USB-TOSLINk
+product SILABS MJS_TOSLINK 0x819f MJS USB-TOSLINK
product SILABS WAVIT 0x81a6 ThinkOptics WavIt
+product SILABS MULTIPLEX_RC 0x81a9 Multiplex RC adapter
product SILABS MSD_DASHHAWK 0x81ac MSD DashHawk
product SILABS INSYS_MODEM 0x81ad INSYS Modem
product SILABS LIPOWSKY_JTAG 0x81c8 Lipowsky Baby-JTAG
@@ -3087,16 +3123,24 @@ product SILABS EMS_C1007 0x81f2 EMS C1007 HF RFID controller
product SILABS LIPOWSKY_HARP 0x8218 Lipowsky HARP-1
product SILABS C2_EDGE_MODEM 0x822b Commander 2 EDGE(GSM) Modem
product SILABS CYGNAL_GPS 0x826b Cygnal Fasttrax GPS
-product SILABS TELEGESYS_ETRX2 0x8293 Telegesys ETRX2USB
+product SILABS TELEGESIS_ETRX2 0x8293 Telegesis ETRX2USB
product SILABS PROCYON_AVS 0x82f9 Procyon AVS
product SILABS MC35PU 0x8341 MC35pu
product SILABS CYGNAL 0x8382 Cygnal
product SILABS AMBER_AMB2560 0x83a8 Amber Wireless AMB2560
+product SILABS DEKTEK_DTAPLUS 0x83d8 DekTec DTA Plus VHF/UHF Booster
product SILABS KYOCERA_GPS 0x8411 Kyocera GPS
+product SILABS IRZ_SG10 0x8418 IRZ SG-10 GSM/GPRS Modem
product SILABS BEI_VCP 0x846e BEI USB Sensor (VCP)
product SILABS BALLUFF_RFID 0x8477 Balluff RFID reader
+product SILABS AC_SERV_IBUS 0x85ea AC-Services IBUS Interface
+product SILABS AC_SERV_CIS 0x85eb AC-Services CIS-IBUS
+product SILABS AC_SERV_CAN 0x8664 AC-Services CAN Interface
+product SILABS AC_SERV_OBD 0x8665 AC-Services OBD Interface
product SILABS CP2102 0xea60 SILABS USB UART
product SILABS CP210X_2 0xea61 CP210x Serial
+product SILABS CP210X_3 0xea70 CP210x Serial
+product SILABS CP210X_4 0xea80 CP210x Serial
product SILABS INFINITY_MIC 0xea71 Infinity GPS-MIC-1 Radio Monophone
product SILABS USBSCOPE50 0xf001 USBscope50
product SILABS USBWAVE12 0xf002 USBwave12
@@ -3236,10 +3280,6 @@ product STELERA E1010 0x1010 3G modem
product STELERA E1011 0x1011 3G modem
product STELERA E1012 0x1012 3G modem
-/* MpMan products */
-product MPMAN MPF400_1 0x36d0 MPF400 Music Player 1Go
-product MPMAN MPF400_2 0x25a8 MPF400 Music Player 2Go
-
/* STMicroelectronics products */
product STMICRO BIOCPU 0x2016 Biometric Coprocessor
product STMICRO COMMUNICATOR 0x7554 USB Communicator
@@ -3262,6 +3302,9 @@ product SUN KEYBOARD_TYPE_7 0x00a2 Type 7 USB keyboard
product SUN MOUSE 0x0100 Type 6 USB mouse
product SUN KBD_HUB 0x100e Kbd Hub
+/* Sunplus Innovation Technology Inc. products */
+product SUNPLUS USBMOUSE 0x0007 USB Optical Mouse
+
/* Super Top products */
product SUPERTOP IDE 0x6600 USB-IDE
diff --git a/sys/dev/wtap/if_wtap.c b/sys/dev/wtap/if_wtap.c
index 5b5d355..9439930 100644
--- a/sys/dev/wtap/if_wtap.c
+++ b/sys/dev/wtap/if_wtap.c
@@ -230,8 +230,10 @@ wtap_beacon_intrp(void *arg)
struct ieee80211vap *vap = arg;
struct mbuf *m;
- KASSERT(vap->iv_state >= IEEE80211_S_RUN,
- ("not running, state %d", vap->iv_state));
+ if (vap->iv_state < IEEE80211_S_RUN) {
+ DWTAP_PRINTF("Skip beacon, not running, state %d", vap->iv_state);
+ return ;
+ }
DWTAP_PRINTF("[%d] beacon intrp\n", avp->id); //burst mode
/*
* Update dynamic beacon contents. If this returns
@@ -289,6 +291,8 @@ wtap_newstate(struct ieee80211vap *vap, enum ieee80211_state nstate, int arg)
default:
goto bad;
}
+ } else if (nstate == IEEE80211_S_INIT) {
+ callout_stop(&avp->av_swba);
}
return 0;
bad:
diff --git a/sys/fs/cd9660/cd9660_vfsops.c b/sys/fs/cd9660/cd9660_vfsops.c
index 737bf26..7780b04 100644
--- a/sys/fs/cd9660/cd9660_vfsops.c
+++ b/sys/fs/cd9660/cd9660_vfsops.c
@@ -133,7 +133,7 @@ cd9660_mount(struct mount *mp)
int error;
accmode_t accmode;
struct nameidata ndp;
- struct iso_mnt *imp = 0;
+ struct iso_mnt *imp = NULL;
td = curthread;
@@ -214,7 +214,7 @@ iso_mountfs(devvp, mp)
int iso_bsize;
int iso_blknum;
int joliet_level;
- struct iso_volume_descriptor *vdp = 0;
+ struct iso_volume_descriptor *vdp = NULL;
struct iso_primary_descriptor *pri = NULL;
struct iso_sierra_primary_descriptor *pri_sierra = NULL;
struct iso_supplementary_descriptor *sup = NULL;
diff --git a/sys/fs/ext2fs/ext2_vfsops.c b/sys/fs/ext2fs/ext2_vfsops.c
index 17ffb62..576a1f59 100644
--- a/sys/fs/ext2fs/ext2_vfsops.c
+++ b/sys/fs/ext2fs/ext2_vfsops.c
@@ -112,7 +112,7 @@ ext2_mount(struct mount *mp)
struct vfsoptlist *opts;
struct vnode *devvp;
struct thread *td;
- struct ext2mount *ump = 0;
+ struct ext2mount *ump = NULL;
struct m_ext2fs *fs;
struct nameidata nd, *ndp = &nd;
accmode_t accmode;
diff --git a/sys/fs/fifofs/fifo_vnops.c b/sys/fs/fifofs/fifo_vnops.c
index 0b065a6..bdb1367 100644
--- a/sys/fs/fifofs/fifo_vnops.c
+++ b/sys/fs/fifofs/fifo_vnops.c
@@ -59,23 +59,13 @@
* Notes about locking:
* - fi_pipe is invariant since init time.
* - fi_readers and fi_writers are protected by the vnode lock.
- * - fi_wgen and fi_seqcount are protected by the pipe mutex.
*/
struct fifoinfo {
struct pipe *fi_pipe;
long fi_readers;
long fi_writers;
- int fi_wgen;
- int fi_seqcount;
};
-#define FIFO_UPDWGEN(fip, pip) do { \
- if ((fip)->fi_wgen == (fip)->fi_seqcount) \
- (pip)->pipe_state |= PIPE_SAMEWGEN; \
- else \
- (pip)->pipe_state &= ~PIPE_SAMEWGEN; \
-} while (0)
-
static vop_print_t fifo_print;
static vop_open_t fifo_open;
static vop_close_t fifo_close;
@@ -161,7 +151,7 @@ fifo_open(ap)
return (error);
fip = malloc(sizeof(*fip), M_VNODE, M_WAITOK);
fip->fi_pipe = fpipe;
- fip->fi_wgen = fip->fi_readers = fip->fi_writers = 0;
+ fpipe->pipe_wgen = fip->fi_readers = fip->fi_writers = 0;
KASSERT(vp->v_fifoinfo == NULL, ("fifo_open: v_fifoinfo race"));
vp->v_fifoinfo = fip;
}
@@ -181,8 +171,7 @@ fifo_open(ap)
if (fip->fi_writers > 0)
wakeup(&fip->fi_writers);
}
- fip->fi_seqcount = fip->fi_wgen - fip->fi_writers;
- FIFO_UPDWGEN(fip, fpipe);
+ fp->f_seqcount = fpipe->pipe_wgen - fip->fi_writers;
}
if (ap->a_mode & FWRITE) {
if ((ap->a_mode & O_NONBLOCK) && fip->fi_readers == 0) {
@@ -235,8 +224,7 @@ fifo_open(ap)
fpipe->pipe_state |= PIPE_EOF;
if (fpipe->pipe_state & PIPE_WANTR)
wakeup(fpipe);
- fip->fi_wgen++;
- FIFO_UPDWGEN(fip, fpipe);
+ fpipe->pipe_wgen++;
PIPE_UNLOCK(fpipe);
fifo_cleanup(vp);
}
@@ -283,8 +271,11 @@ fifo_close(ap)
if (fip->fi_readers == 0) {
PIPE_LOCK(cpipe);
cpipe->pipe_state |= PIPE_EOF;
- if (cpipe->pipe_state & PIPE_WANTW)
+ if ((cpipe->pipe_state & PIPE_WANTW)) {
+ cpipe->pipe_state &= ~PIPE_WANTW;
wakeup(cpipe);
+ }
+ pipeselwakeup(cpipe);
PIPE_UNLOCK(cpipe);
}
}
@@ -293,10 +284,12 @@ fifo_close(ap)
if (fip->fi_writers == 0) {
PIPE_LOCK(cpipe);
cpipe->pipe_state |= PIPE_EOF;
- if (cpipe->pipe_state & PIPE_WANTR)
+ if ((cpipe->pipe_state & PIPE_WANTR)) {
+ cpipe->pipe_state &= ~PIPE_WANTR;
wakeup(cpipe);
- fip->fi_wgen++;
- FIFO_UPDWGEN(fip, cpipe);
+ }
+ cpipe->pipe_wgen++;
+ pipeselwakeup(cpipe);
PIPE_UNLOCK(cpipe);
}
}
diff --git a/sys/fs/msdosfs/msdosfs_lookup.c b/sys/fs/msdosfs/msdosfs_lookup.c
index d923c89..27c76e1 100644
--- a/sys/fs/msdosfs/msdosfs_lookup.c
+++ b/sys/fs/msdosfs/msdosfs_lookup.c
@@ -108,7 +108,7 @@ msdosfs_lookup_(struct vnode *vdp, struct vnode **vpp,
struct denode *dp;
struct denode *tdp;
struct msdosfsmount *pmp;
- struct buf *bp = 0;
+ struct buf *bp = NULL;
struct direntry *dep = NULL;
u_char dosfilename[12];
int flags = cnp->cn_flags;
diff --git a/sys/fs/portalfs/portal_vnops.c b/sys/fs/portalfs/portal_vnops.c
index f9ef08a..6b70dae 100644
--- a/sys/fs/portalfs/portal_vnops.c
+++ b/sys/fs/portalfs/portal_vnops.c
@@ -110,7 +110,7 @@ portal_lookup(ap)
char *pname = cnp->cn_nameptr;
struct portalnode *pt;
int error;
- struct vnode *fvp = 0;
+ struct vnode *fvp = NULL;
char *path;
int size;
@@ -217,14 +217,14 @@ portal_open(ap)
struct thread *a_td;
} */ *ap;
{
- struct socket *so = 0;
+ struct socket *so = NULL;
struct portalnode *pt;
struct thread *td = ap->a_td;
struct vnode *vp = ap->a_vp;
struct uio auio;
struct iovec aiov[2];
int res;
- struct mbuf *cm = 0;
+ struct mbuf *cm = NULL;
struct cmsghdr *cmsg;
int newfds;
int *ip;
@@ -356,7 +356,7 @@ portal_open(ap)
len = auio.uio_resid = sizeof(int);
do {
- struct mbuf *m = 0;
+ struct mbuf *m = NULL;
int flags = MSG_WAITALL;
error = soreceive(so, (struct sockaddr **) 0, &auio,
&m, &cm, &flags);
diff --git a/sys/fs/smbfs/smbfs_node.c b/sys/fs/smbfs/smbfs_node.c
index bf1776a..1b727a5 100644
--- a/sys/fs/smbfs/smbfs_node.c
+++ b/sys/fs/smbfs/smbfs_node.c
@@ -223,19 +223,16 @@ loop:
if (fap == NULL)
return ENOENT;
- np = malloc(sizeof *np, M_SMBNODE, M_WAITOK);
error = getnewvnode("smbfs", mp, &smbfs_vnodeops, &vp);
- if (error) {
- free(np, M_SMBNODE);
- return error;
- }
+ if (error != 0)
+ return (error);
error = insmntque(vp, mp); /* XXX: Too early for mpsafe fs */
- if (error != 0) {
- free(np, M_SMBNODE);
+ if (error != 0)
return (error);
- }
+
+ np = malloc(sizeof *np, M_SMBNODE, M_WAITOK | M_ZERO);
+
vp->v_type = fap->fa_attr & SMB_FA_DIR ? VDIR : VREG;
- bzero(np, sizeof(*np));
vp->v_data = np;
np->n_vnode = vp;
np->n_mount = VFSTOSMBFS(mp);
diff --git a/sys/fs/udf/udf_vfsops.c b/sys/fs/udf/udf_vfsops.c
index bb2c09d..ddf3b99 100644
--- a/sys/fs/udf/udf_vfsops.c
+++ b/sys/fs/udf/udf_vfsops.c
@@ -190,7 +190,7 @@ udf_mount(struct mount *mp)
{
struct vnode *devvp; /* vnode of the mount device */
struct thread *td;
- struct udf_mnt *imp = 0;
+ struct udf_mnt *imp = NULL;
struct vfsoptlist *opts;
char *fspec, *cs_disk, *cs_local;
int error, len, *udf_flags;
diff --git a/sys/geom/gate/g_gate.c b/sys/geom/gate/g_gate.c
index b3c09df..7282ac9 100644
--- a/sys/geom/gate/g_gate.c
+++ b/sys/geom/gate/g_gate.c
@@ -470,6 +470,44 @@ g_gate_create(struct g_gate_ctl_create *ggio)
return (EINVAL);
}
+ sc = malloc(sizeof(*sc), M_GATE, M_WAITOK | M_ZERO);
+ sc->sc_flags = (ggio->gctl_flags & G_GATE_USERFLAGS);
+ strlcpy(sc->sc_info, ggio->gctl_info, sizeof(sc->sc_info));
+ sc->sc_seq = 1;
+ bioq_init(&sc->sc_inqueue);
+ bioq_init(&sc->sc_outqueue);
+ mtx_init(&sc->sc_queue_mtx, "gg:queue", NULL, MTX_DEF);
+ sc->sc_queue_count = 0;
+ sc->sc_queue_size = ggio->gctl_maxcount;
+ if (sc->sc_queue_size > G_GATE_MAX_QUEUE_SIZE)
+ sc->sc_queue_size = G_GATE_MAX_QUEUE_SIZE;
+ sc->sc_timeout = ggio->gctl_timeout;
+ callout_init(&sc->sc_callout, CALLOUT_MPSAFE);
+
+ mtx_lock(&g_gate_units_lock);
+ sc->sc_unit = g_gate_getunit(ggio->gctl_unit, &error);
+ if (sc->sc_unit < 0)
+ goto fail1;
+ if (ggio->gctl_unit == G_GATE_NAME_GIVEN)
+ snprintf(name, sizeof(name), "%s", ggio->gctl_name);
+ else {
+ snprintf(name, sizeof(name), "%s%d", G_GATE_PROVIDER_NAME,
+ sc->sc_unit);
+ }
+ /* Check for name collision. */
+ for (unit = 0; unit < g_gate_maxunits; unit++) {
+ if (g_gate_units[unit] == NULL)
+ continue;
+ if (strcmp(name, g_gate_units[unit]->sc_name) != 0)
+ continue;
+ error = EEXIST;
+ goto fail1;
+ }
+ sc->sc_name = name;
+ g_gate_units[sc->sc_unit] = sc;
+ g_gate_nunits++;
+ mtx_unlock(&g_gate_units_lock);
+
g_topology_lock();
if (ggio->gctl_readprov[0] == '\0') {
@@ -477,38 +515,24 @@ g_gate_create(struct g_gate_ctl_create *ggio)
} else {
ropp = g_provider_by_name(ggio->gctl_readprov);
if (ropp == NULL) {
- g_topology_unlock();
G_GATE_DEBUG(1, "Provider %s doesn't exist.",
ggio->gctl_readprov);
- return (EINVAL);
+ error = EINVAL;
+ goto fail2;
}
if ((ggio->gctl_readoffset % ggio->gctl_sectorsize) != 0) {
- g_topology_unlock();
G_GATE_DEBUG(1, "Invalid read offset.");
- return (EINVAL);
+ error = EINVAL;
+ goto fail2;
}
if (ggio->gctl_mediasize + ggio->gctl_readoffset >
ropp->mediasize) {
- g_topology_unlock();
G_GATE_DEBUG(1, "Invalid read offset or media size.");
- return (EINVAL);
+ error = EINVAL;
+ goto fail2;
}
}
- sc = malloc(sizeof(*sc), M_GATE, M_WAITOK | M_ZERO);
- sc->sc_flags = (ggio->gctl_flags & G_GATE_USERFLAGS);
- strlcpy(sc->sc_info, ggio->gctl_info, sizeof(sc->sc_info));
- sc->sc_seq = 1;
- bioq_init(&sc->sc_inqueue);
- bioq_init(&sc->sc_outqueue);
- mtx_init(&sc->sc_queue_mtx, "gg:queue", NULL, MTX_DEF);
- sc->sc_queue_count = 0;
- sc->sc_queue_size = ggio->gctl_maxcount;
- if (sc->sc_queue_size > G_GATE_MAX_QUEUE_SIZE)
- sc->sc_queue_size = G_GATE_MAX_QUEUE_SIZE;
- sc->sc_timeout = ggio->gctl_timeout;
- callout_init(&sc->sc_callout, CALLOUT_MPSAFE);
-
gp = g_new_geomf(&g_gate_class, "%s", name);
gp->start = g_gate_start;
gp->access = g_gate_access;
@@ -521,70 +545,18 @@ g_gate_create(struct g_gate_ctl_create *ggio)
error = g_attach(cp, ropp);
if (error != 0) {
G_GATE_DEBUG(1, "Unable to attach to %s.", ropp->name);
- } else {
- error = g_access(cp, 1, 0, 0);
- if (error != 0) {
- G_GATE_DEBUG(1, "Unable to access %s.",
- ropp->name);
- g_detach(cp);
- }
+ goto fail3;
}
+ error = g_access(cp, 1, 0, 0);
if (error != 0) {
- g_destroy_consumer(cp);
- g_destroy_geom(gp);
- g_topology_unlock();
- mtx_destroy(&sc->sc_queue_mtx);
- free(sc, M_GATE);
- return (error);
+ G_GATE_DEBUG(1, "Unable to access %s.", ropp->name);
+ g_detach(cp);
+ goto fail3;
}
sc->sc_readcons = cp;
sc->sc_readoffset = ggio->gctl_readoffset;
}
- mtx_lock(&g_gate_units_lock);
- sc->sc_unit = g_gate_getunit(ggio->gctl_unit, &error);
- if (sc->sc_unit < 0) {
- mtx_unlock(&g_gate_units_lock);
- if (sc->sc_readcons != NULL) {
- (void)g_access(sc->sc_readcons, -1, 0, 0);
- g_detach(sc->sc_readcons);
- g_destroy_consumer(sc->sc_readcons);
- }
- g_destroy_geom(gp);
- g_topology_unlock();
- mtx_destroy(&sc->sc_queue_mtx);
- free(sc, M_GATE);
- return (error);
- }
- if (ggio->gctl_unit == G_GATE_NAME_GIVEN)
- snprintf(name, sizeof(name), "%s", ggio->gctl_name);
- else {
- snprintf(name, sizeof(name), "%s%d", G_GATE_PROVIDER_NAME,
- sc->sc_unit);
- }
- /* Check for name collision. */
- for (unit = 0; unit < g_gate_maxunits; unit++) {
- if (g_gate_units[unit] == NULL)
- continue;
- if (strcmp(name, g_gate_units[unit]->sc_name) != 0)
- continue;
- mtx_unlock(&g_gate_units_lock);
- if (sc->sc_readcons != NULL) {
- (void)g_access(sc->sc_readcons, -1, 0, 0);
- g_detach(sc->sc_readcons);
- g_destroy_consumer(sc->sc_readcons);
- }
- g_destroy_geom(gp);
- g_topology_unlock();
- mtx_destroy(&sc->sc_queue_mtx);
- free(sc, M_GATE);
- return (EEXIST);
- }
- sc->sc_name = name;
- g_gate_units[sc->sc_unit] = sc;
- g_gate_nunits++;
- mtx_unlock(&g_gate_units_lock);
-
ggio->gctl_unit = sc->sc_unit;
pp = g_new_providerf(gp, "%s", name);
@@ -604,6 +576,20 @@ g_gate_create(struct g_gate_ctl_create *ggio)
g_gate_guard, sc);
}
return (0);
+fail3:
+ g_destroy_consumer(cp);
+ g_destroy_geom(gp);
+fail2:
+ g_topology_unlock();
+ mtx_lock(&g_gate_units_lock);
+ g_gate_units[sc->sc_unit] = NULL;
+ KASSERT(g_gate_nunits > 0, ("negative g_gate_nunits?"));
+ g_gate_nunits--;
+fail1:
+ mtx_unlock(&g_gate_units_lock);
+ mtx_destroy(&sc->sc_queue_mtx);
+ free(sc, M_GATE);
+ return (error);
}
static int
diff --git a/sys/geom/geom.h b/sys/geom/geom.h
index 5d97f50..6a447ae 100644
--- a/sys/geom/geom.h
+++ b/sys/geom/geom.h
@@ -110,6 +110,8 @@ struct g_class {
g_ioctl_t *ioctl;
g_provgone_t *providergone;
g_resize_t *resize;
+ void *spare1;
+ void *spare2;
/*
* The remaining elements are private
*/
@@ -141,6 +143,8 @@ struct g_geom {
g_ioctl_t *ioctl;
g_provgone_t *providergone;
g_resize_t *resize;
+ void *spare0;
+ void *spare1;
void *softc;
unsigned flags;
#define G_GEOM_WITHER 1
@@ -170,7 +174,9 @@ struct g_consumer {
struct g_provider *provider;
LIST_ENTRY(g_consumer) consumers; /* XXX: better name */
int acr, acw, ace;
- int spoiled;
+ int flags;
+#define G_CF_SPOILED 0x1
+#define G_CF_ORPHAN 0x4
struct devstat *stat;
u_int nstart, nend;
@@ -243,6 +249,8 @@ int g_post_event(g_event_t *func, void *arg, int flag, ...);
int g_waitfor_event(g_event_t *func, void *arg, int flag, ...);
void g_cancel_event(void *ref);
int g_attr_changed(struct g_provider *pp, const char *attr, int flag);
+int g_media_changed(struct g_provider *pp, int flag);
+int g_media_gone(struct g_provider *pp, int flag);
void g_orphan_provider(struct g_provider *pp, int error);
void g_waitidlelock(void);
diff --git a/sys/geom/geom_dev.c b/sys/geom/geom_dev.c
index f3165a0..7936740 100644
--- a/sys/geom/geom_dev.c
+++ b/sys/geom/geom_dev.c
@@ -43,6 +43,7 @@ __FBSDID("$FreeBSD$");
#include <sys/conf.h>
#include <sys/ctype.h>
#include <sys/bio.h>
+#include <sys/bus.h>
#include <sys/lock.h>
#include <sys/mutex.h>
#include <sys/proc.h>
@@ -105,6 +106,21 @@ g_dev_print(void)
static void
g_dev_attrchanged(struct g_consumer *cp, const char *attr)
{
+ struct cdev *dev;
+ char buf[SPECNAMELEN + 6];
+
+ if (strcmp(attr, "GEOM::media") == 0) {
+ dev = cp->geom->softc;
+ snprintf(buf, sizeof(buf), "cdev=%s", dev->si_name);
+ devctl_notify_f("DEVFS", "CDEV", "MEDIACHANGE", buf, M_WAITOK);
+ dev = cp->cp_alias_dev;
+ if (dev != NULL) {
+ snprintf(buf, sizeof(buf), "cdev=%s", dev->si_name);
+ devctl_notify_f("DEVFS", "CDEV", "MEDIACHANGE", buf,
+ M_WAITOK);
+ }
+ return;
+ }
if (strcmp(attr, "GEOM::physpath") != 0)
return;
@@ -119,7 +135,6 @@ g_dev_attrchanged(struct g_consumer *cp, const char *attr)
g_io_getattr("GEOM::physpath", cp, &physpath_len, physpath);
g_access(cp, -1, 0, 0);
if (error == 0 && strlen(physpath) != 0) {
- struct cdev *dev;
struct cdev *old_alias_dev;
struct cdev **alias_devp;
@@ -161,9 +176,6 @@ g_dev_taste(struct g_class *mp, struct g_provider *pp, int insist __unused)
g_trace(G_T_TOPOLOGY, "dev_taste(%s,%s)", mp->name, pp->name);
g_topology_assert();
- LIST_FOREACH(cp, &pp->consumers, consumers)
- if (cp->geom->class == mp)
- return (NULL);
gp = g_new_geomf(mp, pp->name);
cp = g_new_consumer(gp);
error = g_attach(cp, pp);
diff --git a/sys/geom/geom_disk.c b/sys/geom/geom_disk.c
index 1d6f867..f863b2c 100644
--- a/sys/geom/geom_disk.c
+++ b/sys/geom/geom_disk.c
@@ -660,6 +660,32 @@ disk_attr_changed(struct disk *dp, const char *attr, int flag)
}
void
+disk_media_changed(struct disk *dp, int flag)
+{
+ struct g_geom *gp;
+ struct g_provider *pp;
+
+ gp = dp->d_geom;
+ if (gp != NULL) {
+ LIST_FOREACH(pp, &gp->provider, provider)
+ g_media_changed(pp, flag);
+ }
+}
+
+void
+disk_media_gone(struct disk *dp, int flag)
+{
+ struct g_geom *gp;
+ struct g_provider *pp;
+
+ gp = dp->d_geom;
+ if (gp != NULL) {
+ LIST_FOREACH(pp, &gp->provider, provider)
+ g_media_gone(pp, flag);
+ }
+}
+
+void
disk_resize(struct disk *dp)
{
struct g_geom *gp;
diff --git a/sys/geom/geom_disk.h b/sys/geom/geom_disk.h
index 4862fc5..cf53839 100644
--- a/sys/geom/geom_disk.h
+++ b/sys/geom/geom_disk.h
@@ -109,6 +109,8 @@ void disk_create(struct disk *disk, int version);
void disk_destroy(struct disk *disk);
void disk_gone(struct disk *disk);
void disk_attr_changed(struct disk *dp, const char *attr, int flag);
+void disk_media_changed(struct disk *dp, int flag);
+void disk_media_gone(struct disk *dp, int flag);
void disk_resize(struct disk *dp);
#define DISK_VERSION_00 0x58561059
diff --git a/sys/geom/geom_event.c b/sys/geom/geom_event.c
index 1c92ccb..b02d088 100644
--- a/sys/geom/geom_event.c
+++ b/sys/geom/geom_event.c
@@ -202,14 +202,12 @@ g_orphan_register(struct g_provider *pp)
* Tell all consumers the bad news.
* Don't be surprised if they self-destruct.
*/
- cp = LIST_FIRST(&pp->consumers);
- while (cp != NULL) {
- cp2 = LIST_NEXT(cp, consumers);
+ LIST_FOREACH_SAFE(cp, &pp->consumers, consumers, cp2) {
KASSERT(cp->geom->orphan != NULL,
("geom %s has no orphan, class %s",
cp->geom->name, cp->geom->class->name));
+ cp->flags |= G_CF_ORPHAN;
cp->geom->orphan(cp);
- cp = cp2;
}
if (LIST_EMPTY(&pp->consumers) && wf)
g_destroy_provider(pp);
diff --git a/sys/geom/geom_io.c b/sys/geom/geom_io.c
index b4044a7..1e0f28e 100644
--- a/sys/geom/geom_io.c
+++ b/sys/geom/geom_io.c
@@ -305,6 +305,8 @@ g_io_check(struct bio *bp)
/* if provider is marked for error, don't disturb. */
if (pp->error)
return (pp->error);
+ if (cp->flags & G_CF_ORPHAN)
+ return (ENXIO);
switch(bp->bio_cmd) {
case BIO_READ:
diff --git a/sys/geom/geom_slice.c b/sys/geom/geom_slice.c
index 407afdc..1100854 100644
--- a/sys/geom/geom_slice.c
+++ b/sys/geom/geom_slice.c
@@ -465,6 +465,7 @@ g_slice_spoiled(struct g_consumer *cp)
g_topology_assert();
gp = cp->geom;
g_trace(G_T_TOPOLOGY, "g_slice_spoiled(%p/%s)", cp, gp->name);
+ cp->flags |= G_CF_ORPHAN;
gsp = gp->softc;
gp->softc = NULL;
g_slice_free(gsp);
diff --git a/sys/geom/geom_subr.c b/sys/geom/geom_subr.c
index 37a9ce0..4d8623f 100644
--- a/sys/geom/geom_subr.c
+++ b/sys/geom/geom_subr.c
@@ -262,10 +262,11 @@ g_modevent(module_t mod, int type, void *data)
static void
g_retaste_event(void *arg, int flag)
{
- struct g_class *cp, *mp;
- struct g_geom *gp, *gp2;
+ struct g_class *mp, *mp2;
+ struct g_geom *gp;
struct g_hh00 *hh;
struct g_provider *pp;
+ struct g_consumer *cp;
g_topology_assert();
if (flag == EV_CANCEL) /* XXX: can't happen ? */
@@ -282,17 +283,20 @@ g_retaste_event(void *arg, int flag)
}
g_trace(G_T_TOPOLOGY, "g_retaste(%s)", mp->name);
- LIST_FOREACH(cp, &g_classes, class) {
- LIST_FOREACH(gp, &cp->geom, geom) {
+ LIST_FOREACH(mp2, &g_classes, class) {
+ LIST_FOREACH(gp, &mp2->geom, geom) {
LIST_FOREACH(pp, &gp->provider, provider) {
if (pp->acr || pp->acw || pp->ace)
continue;
- LIST_FOREACH(gp2, &mp->geom, geom) {
- if (!strcmp(pp->name, gp2->name))
+ LIST_FOREACH(cp, &pp->consumers, consumers) {
+ if (cp->geom->class == mp &&
+ (cp->flags & G_CF_ORPHAN) == 0)
break;
}
- if (gp2 != NULL)
- g_wither_geom(gp2, ENXIO);
+ if (cp != NULL) {
+ cp->flags |= G_CF_ORPHAN;
+ g_wither_geom(cp->geom, ENXIO);
+ }
mp->taste(mp, pp, 0);
g_topology_assert();
}
@@ -534,7 +538,7 @@ g_new_provider_event(void *arg, int flag)
{
struct g_class *mp;
struct g_provider *pp;
- struct g_consumer *cp;
+ struct g_consumer *cp, *next_cp;
g_topology_assert();
if (flag == EV_CANCEL)
@@ -545,11 +549,17 @@ g_new_provider_event(void *arg, int flag)
G_VALID_PROVIDER(pp);
KASSERT(!(pp->flags & G_PF_WITHER),
("g_new_provider_event but withered"));
+ LIST_FOREACH_SAFE(cp, &pp->consumers, consumers, next_cp) {
+ if ((cp->flags & G_CF_ORPHAN) == 0 &&
+ cp->geom->attrchanged != NULL)
+ cp->geom->attrchanged(cp, "GEOM::media");
+ }
LIST_FOREACH(mp, &g_classes, class) {
if (mp->taste == NULL)
continue;
LIST_FOREACH(cp, &pp->consumers, consumers)
- if (cp->geom->class == mp)
+ if (cp->geom->class == mp &&
+ (cp->flags & G_CF_ORPHAN) == 0)
break;
if (cp != NULL)
continue;
@@ -615,22 +625,23 @@ g_resize_provider_event(void *arg, int flag)
off_t size;
g_topology_assert();
- if (flag == EV_CANCEL)
- return;
if (g_shutdown)
return;
hh = arg;
pp = hh->pp;
size = hh->size;
+ g_free(hh);
G_VALID_PROVIDER(pp);
g_trace(G_T_TOPOLOGY, "g_resize_provider_event(%p)", pp);
LIST_FOREACH_SAFE(cp, &pp->consumers, consumers, cp2) {
gp = cp->geom;
- if (gp->resize == NULL && size < pp->mediasize)
+ if (gp->resize == NULL && size < pp->mediasize) {
+ cp->flags |= G_CF_ORPHAN;
cp->geom->orphan(cp);
+ }
}
pp->mediasize = size;
@@ -649,7 +660,8 @@ g_resize_provider_event(void *arg, int flag)
if (mp->taste == NULL)
continue;
LIST_FOREACH(cp, &pp->consumers, consumers)
- if (cp->geom->class == mp)
+ if (cp->geom->class == mp &&
+ (cp->flags & G_CF_ORPHAN) == 0)
break;
if (cp != NULL)
continue;
@@ -868,7 +880,7 @@ g_access(struct g_consumer *cp, int dcr, int dcw, int dce)
* are probably just ahead of the event telling us that. Fail
* now rather than having to unravel this later.
*/
- if (cp->geom->spoiled != NULL && cp->spoiled &&
+ if (cp->geom->spoiled != NULL && (cp->flags & G_CF_SPOILED) &&
(dcr > 0 || dcw > 0 || dce > 0))
return (ENXIO);
@@ -1018,6 +1030,7 @@ g_std_spoiled(struct g_consumer *cp)
g_topology_assert();
G_VALID_CONSUMER(cp);
g_trace(G_T_TOPOLOGY, "g_std_spoiled(%p)", cp);
+ cp->flags |= G_CF_ORPHAN;
g_detach(cp);
gp = cp->geom;
LIST_FOREACH(pp, &gp->provider, provider)
@@ -1053,9 +1066,9 @@ g_spoil_event(void *arg, int flag)
G_VALID_PROVIDER(pp);
for (cp = LIST_FIRST(&pp->consumers); cp != NULL; cp = cp2) {
cp2 = LIST_NEXT(cp, consumers);
- if (!cp->spoiled)
+ if ((cp->flags & G_CF_SPOILED) == 0)
continue;
- cp->spoiled = 0;
+ cp->flags &= ~G_CF_SPOILED;
if (cp->geom->spoiled == NULL)
continue;
cp->geom->spoiled(cp);
@@ -1080,11 +1093,54 @@ g_spoil(struct g_provider *pp, struct g_consumer *cp)
KASSERT(cp2->acw == 0, ("spoiling cp->acw = %d", cp2->acw));
*/
KASSERT(cp2->ace == 0, ("spoiling cp->ace = %d", cp2->ace));
- cp2->spoiled++;
+ cp2->flags |= G_CF_SPOILED;
}
g_post_event(g_spoil_event, pp, M_WAITOK, pp, NULL);
}
+static void
+g_media_changed_event(void *arg, int flag)
+{
+ struct g_provider *pp;
+ int retaste;
+
+ g_topology_assert();
+ if (flag == EV_CANCEL)
+ return;
+ pp = arg;
+ G_VALID_PROVIDER(pp);
+
+ /*
+ * If provider was not open for writing, queue retaste after spoiling.
+ * If it was, retaste will happen automatically on close.
+ */
+ retaste = (pp->acw == 0 && pp->error == 0 &&
+ !(pp->geom->flags & G_GEOM_WITHER));
+ g_spoil_event(arg, flag);
+ if (retaste)
+ g_post_event(g_new_provider_event, pp, M_WAITOK, pp, NULL);
+}
+
+int
+g_media_changed(struct g_provider *pp, int flag)
+{
+ struct g_consumer *cp;
+
+ LIST_FOREACH(cp, &pp->consumers, consumers)
+ cp->flags |= G_CF_SPOILED;
+ return (g_post_event(g_media_changed_event, pp, flag, pp, NULL));
+}
+
+int
+g_media_gone(struct g_provider *pp, int flag)
+{
+ struct g_consumer *cp;
+
+ LIST_FOREACH(cp, &pp->consumers, consumers)
+ cp->flags |= G_CF_SPOILED;
+ return (g_post_event(g_spoil_event, pp, flag, pp, NULL));
+}
+
int
g_getattr__(const char *attr, struct g_consumer *cp, void *var, int len)
{
@@ -1240,15 +1296,15 @@ db_show_geom_consumer(int indent, struct g_consumer *cp)
cp->provider);
}
gprintln(" access: r%dw%de%d", cp->acr, cp->acw, cp->ace);
- gprintln(" spoiled: %d", cp->spoiled);
+ gprintln(" flags: 0x%04x", cp->flags);
gprintln(" nstart: %u", cp->nstart);
gprintln(" nend: %u", cp->nend);
} else {
gprintf("consumer: %p (%s), access=r%dw%de%d", cp,
cp->provider != NULL ? cp->provider->name : "none",
cp->acr, cp->acw, cp->ace);
- if (cp->spoiled)
- db_printf(", spoiled=%d", cp->spoiled);
+ if (cp->flags)
+ db_printf(", flags=0x%04x", cp->flags);
db_printf("\n");
}
}
diff --git a/sys/geom/multipath/g_multipath.c b/sys/geom/multipath/g_multipath.c
index 913dad7..b50367e 100644
--- a/sys/geom/multipath/g_multipath.c
+++ b/sys/geom/multipath/g_multipath.c
@@ -849,6 +849,78 @@ g_multipath_ctl_add_name(struct gctl_req *req, struct g_class *mp,
}
static void
+g_multipath_ctl_prefer(struct gctl_req *req, struct g_class *mp)
+{
+ struct g_geom *gp;
+ struct g_multipath_softc *sc;
+ struct g_consumer *cp;
+ const char *name, *mpname;
+ static const char devpf[6] = "/dev/";
+ int *nargs;
+
+ g_topology_assert();
+
+ mpname = gctl_get_asciiparam(req, "arg0");
+ if (mpname == NULL) {
+ gctl_error(req, "No 'arg0' argument");
+ return;
+ }
+ gp = g_multipath_find_geom(mp, mpname);
+ if (gp == NULL) {
+ gctl_error(req, "Device %s is invalid", mpname);
+ return;
+ }
+ sc = gp->softc;
+
+ nargs = gctl_get_paraml(req, "nargs", sizeof(*nargs));
+ if (nargs == NULL) {
+ gctl_error(req, "No 'nargs' argument");
+ return;
+ }
+ if (*nargs != 2) {
+ gctl_error(req, "missing device");
+ return;
+ }
+
+ name = gctl_get_asciiparam(req, "arg1");
+ if (name == NULL) {
+ gctl_error(req, "No 'arg1' argument");
+ return;
+ }
+ if (strncmp(name, devpf, 5) == 0) {
+ name += 5;
+ }
+
+ LIST_FOREACH(cp, &gp->consumer, consumer) {
+ if (cp->provider != NULL
+ && strcmp(cp->provider->name, name) == 0)
+ break;
+ }
+
+ if (cp == NULL) {
+ gctl_error(req, "Provider %s not found", name);
+ return;
+ }
+
+ mtx_lock(&sc->sc_mtx);
+
+ if (cp->index & MP_BAD) {
+ gctl_error(req, "Consumer %s is invalid", name);
+ mtx_unlock(&sc->sc_mtx);
+ return;
+ }
+
+ /* Here when the consumer is present and in good shape */
+
+ sc->sc_active = cp;
+ if (!sc->sc_active_active)
+ printf("GEOM_MULTIPATH: %s now active path in %s\n",
+ sc->sc_active->provider->name, sc->sc_name);
+
+ mtx_unlock(&sc->sc_mtx);
+}
+
+static void
g_multipath_ctl_add(struct gctl_req *req, struct g_class *mp)
{
struct g_multipath_softc *sc;
@@ -1278,6 +1350,8 @@ g_multipath_config(struct gctl_req *req, struct g_class *mp, const char *verb)
gctl_error(req, "Userland and kernel parts are out of sync");
} else if (strcmp(verb, "add") == 0) {
g_multipath_ctl_add(req, mp);
+ } else if (strcmp(verb, "prefer") == 0) {
+ g_multipath_ctl_prefer(req, mp);
} else if (strcmp(verb, "create") == 0) {
g_multipath_ctl_create(req, mp);
} else if (strcmp(verb, "configure") == 0) {
diff --git a/sys/geom/part/g_part.c b/sys/geom/part/g_part.c
index 8d86c4a..48ae931 100644
--- a/sys/geom/part/g_part.c
+++ b/sys/geom/part/g_part.c
@@ -1257,6 +1257,7 @@ g_part_ctl_resize(struct gctl_req *req, struct g_part_parms *gpp)
struct sbuf *sb;
quad_t end;
int error;
+ off_t mediasize;
gp = gpp->gpp_geom;
G_PART_TRACE((G_T_TOPOLOGY, "%s(%s)", __func__, gp->name));
@@ -1301,8 +1302,11 @@ g_part_ctl_resize(struct gctl_req *req, struct g_part_parms *gpp)
pp = entry->gpe_pp;
if ((g_debugflags & 16) == 0 &&
(pp->acr > 0 || pp->acw > 0 || pp->ace > 0)) {
- gctl_error(req, "%d", EBUSY);
- return (EBUSY);
+ if (entry->gpe_end - entry->gpe_start + 1 > gpp->gpp_size) {
+ /* Deny shrinking of an opened partition. */
+ gctl_error(req, "%d", EBUSY);
+ return (EBUSY);
+ }
}
error = G_PART_RESIZE(table, entry, gpp);
@@ -1315,8 +1319,9 @@ g_part_ctl_resize(struct gctl_req *req, struct g_part_parms *gpp)
entry->gpe_modified = 1;
/* update mediasize of changed provider */
- pp->mediasize = (entry->gpe_end - entry->gpe_start + 1) *
+ mediasize = (entry->gpe_end - entry->gpe_start + 1) *
pp->sectorsize;
+ g_resize_provider(pp, mediasize);
/* Provide feedback if so requested. */
if (gpp->gpp_parms & G_PART_PARM_OUTPUT) {
@@ -2050,6 +2055,7 @@ g_part_spoiled(struct g_consumer *cp)
G_PART_TRACE((G_T_TOPOLOGY, "%s(%s)", __func__, cp->provider->name));
g_topology_assert();
+ cp->flags |= G_CF_ORPHAN;
g_part_wither(cp->geom, ENXIO);
}
diff --git a/sys/gnu/fs/reiserfs/reiserfs_vfsops.c b/sys/gnu/fs/reiserfs/reiserfs_vfsops.c
index e98ed48..825111e 100644
--- a/sys/gnu/fs/reiserfs/reiserfs_vfsops.c
+++ b/sys/gnu/fs/reiserfs/reiserfs_vfsops.c
@@ -227,7 +227,7 @@ reiserfs_unmount(struct mount *mp, int mntflags)
DROP_GIANT();
g_topology_lock();
- g_wither_geom_close(rmp->rm_cp->geom, ENXIO);
+ g_vfs_close(rmp->rm_cp);
g_topology_unlock();
PICKUP_GIANT();
vrele(rmp->rm_devvp);
@@ -611,7 +611,7 @@ out:
if (cp != NULL) {
DROP_GIANT();
g_topology_lock();
- g_wither_geom_close(cp->geom, ENXIO);
+ g_vfs_close(cp);
g_topology_unlock();
PICKUP_GIANT();
}
diff --git a/sys/i386/i386/machdep.c b/sys/i386/i386/machdep.c
index 40c8c46..c194567 100644
--- a/sys/i386/i386/machdep.c
+++ b/sys/i386/i386/machdep.c
@@ -1606,7 +1606,7 @@ exec_setregs(struct thread *td, struct image_params *imgp, u_long stack)
pcb->pcb_dr3 = 0;
pcb->pcb_dr6 = 0;
pcb->pcb_dr7 = 0;
- if (pcb == PCPU_GET(curpcb)) {
+ if (pcb == curpcb) {
/*
* Clear the debug registers on the running
* CPU, otherwise they will end up affecting
diff --git a/sys/i386/i386/pmap.c b/sys/i386/i386/pmap.c
index af69431..0743ea9 100644
--- a/sys/i386/i386/pmap.c
+++ b/sys/i386/i386/pmap.c
@@ -2025,7 +2025,7 @@ pmap_lazyfix_action(void)
(*ipi_lazypmap_counts[PCPU_GET(cpuid)])++;
#endif
if (rcr3() == lazyptd)
- load_cr3(PCPU_GET(curpcb)->pcb_cr3);
+ load_cr3(curpcb->pcb_cr3);
CPU_CLR_ATOMIC(PCPU_GET(cpuid), lazymask);
atomic_store_rel_int(&lazywait, 1);
}
@@ -2035,7 +2035,7 @@ pmap_lazyfix_self(u_int cpuid)
{
if (rcr3() == lazyptd)
- load_cr3(PCPU_GET(curpcb)->pcb_cr3);
+ load_cr3(curpcb->pcb_cr3);
CPU_CLR_ATOMIC(cpuid, lazymask);
}
@@ -2102,7 +2102,7 @@ pmap_lazyfix(pmap_t pmap)
cr3 = vtophys(pmap->pm_pdir);
if (cr3 == rcr3()) {
- load_cr3(PCPU_GET(curpcb)->pcb_cr3);
+ load_cr3(curpcb->pcb_cr3);
CPU_CLR(PCPU_GET(cpuid), &pmap->pm_active);
}
}
diff --git a/sys/i386/i386/ptrace_machdep.c b/sys/i386/i386/ptrace_machdep.c
index 4608c9b..5965a69 100644
--- a/sys/i386/i386/ptrace_machdep.c
+++ b/sys/i386/i386/ptrace_machdep.c
@@ -54,10 +54,12 @@ cpu_ptrace(struct thread *td, int req, void *addr, int data)
fpstate = &td->td_pcb->pcb_user_save.sv_xmm;
switch (req) {
case PT_GETXMMREGS:
+ npxgetregs(td);
error = copyout(fpstate, addr, sizeof(*fpstate));
break;
case PT_SETXMMREGS:
+ npxgetregs(td);
error = copyin(addr, fpstate, sizeof(*fpstate));
fpstate->sv_env.en_mxcsr &= cpu_mxcsr_mask;
break;
diff --git a/sys/i386/i386/trap.c b/sys/i386/i386/trap.c
index 41495b4..c0c5678 100644
--- a/sys/i386/i386/trap.c
+++ b/sys/i386/i386/trap.c
@@ -344,7 +344,7 @@ trap(struct trapframe *frame)
if ((ISPL(frame->tf_cs) == SEL_UPL) ||
((frame->tf_eflags & PSL_VM) &&
- !(PCPU_GET(curpcb)->pcb_flags & PCB_VM86CALL))) {
+ !(curpcb->pcb_flags & PCB_VM86CALL))) {
/* user trap */
td->td_pticks = 0;
@@ -369,7 +369,7 @@ trap(struct trapframe *frame)
case T_ARITHTRAP: /* arithmetic trap */
#ifdef DEV_NPX
- ucode = npxtrap();
+ ucode = npxtrap_x87();
if (ucode == -1)
goto userout;
#else
@@ -532,7 +532,13 @@ trap(struct trapframe *frame)
break;
case T_XMMFLT: /* SIMD floating-point exception */
- ucode = 0; /* XXX */
+#if defined(DEV_NPX) && !defined(CPU_DISABLE_SSE) && defined(I686_CPU)
+ ucode = npxtrap_sse();
+ if (ucode == -1)
+ goto userout;
+#else
+ ucode = 0;
+#endif
i = SIGFPE;
break;
}
@@ -587,7 +593,7 @@ trap(struct trapframe *frame)
/* FALL THROUGH */
case T_SEGNPFLT: /* segment not present fault */
- if (PCPU_GET(curpcb)->pcb_flags & PCB_VM86CALL)
+ if (curpcb->pcb_flags & PCB_VM86CALL)
break;
/*
@@ -600,7 +606,7 @@ trap(struct trapframe *frame)
* a signal.
*/
if (frame->tf_eip == (int)cpu_switch_load_gs) {
- PCPU_GET(curpcb)->pcb_gs = 0;
+ curpcb->pcb_gs = 0;
#if 0
PROC_LOCK(p);
kern_psignal(p, SIGBUS);
@@ -638,9 +644,9 @@ trap(struct trapframe *frame)
frame->tf_eip = (int)doreti_popl_fs_fault;
goto out;
}
- if (PCPU_GET(curpcb)->pcb_onfault != NULL) {
+ if (curpcb->pcb_onfault != NULL) {
frame->tf_eip =
- (int)PCPU_GET(curpcb)->pcb_onfault;
+ (int)curpcb->pcb_onfault;
goto out;
}
break;
@@ -690,7 +696,7 @@ trap(struct trapframe *frame)
* debugging the kernel.
*/
if (user_dbreg_trap() &&
- !(PCPU_GET(curpcb)->pcb_flags & PCB_VM86CALL)) {
+ !(curpcb->pcb_flags & PCB_VM86CALL)) {
/*
* Reset breakpoint bits because the
* processor doesn't
@@ -871,7 +877,7 @@ trap_pfault(frame, usermode, eva)
* it normally, and panic immediately.
*/
if (!usermode && (td->td_intr_nesting_level != 0 ||
- PCPU_GET(curpcb)->pcb_onfault == NULL)) {
+ curpcb->pcb_onfault == NULL)) {
trap_fatal(frame, eva);
return (-1);
}
@@ -929,8 +935,8 @@ trap_pfault(frame, usermode, eva)
nogo:
if (!usermode) {
if (td->td_intr_nesting_level == 0 &&
- PCPU_GET(curpcb)->pcb_onfault != NULL) {
- frame->tf_eip = (int)PCPU_GET(curpcb)->pcb_onfault;
+ curpcb->pcb_onfault != NULL) {
+ frame->tf_eip = (int)curpcb->pcb_onfault;
return (0);
}
trap_fatal(frame, eva);
diff --git a/sys/i386/i386/vm86.c b/sys/i386/i386/vm86.c
index 1aaf31a..93ff855 100644
--- a/sys/i386/i386/vm86.c
+++ b/sys/i386/i386/vm86.c
@@ -143,9 +143,9 @@ vm86_emulate(vmf)
* the extension is not present. (This check should not be needed,
* as we can't enter vm86 mode until we set up an extension area)
*/
- if (PCPU_GET(curpcb)->pcb_ext == 0)
+ if (curpcb->pcb_ext == 0)
return (SIGBUS);
- vm86 = &PCPU_GET(curpcb)->pcb_ext->ext_vm86;
+ vm86 = &curpcb->pcb_ext->ext_vm86;
if (vmf->vmf_eflags & PSL_T)
retcode = SIGTRAP;
@@ -535,7 +535,7 @@ vm86_prepcall(struct vm86frame *vmf)
vmf->kernel_fs = vmf->kernel_es = vmf->kernel_ds = 0;
vmf->vmf_eflags = PSL_VIF | PSL_VM | PSL_USER;
- vm86 = &PCPU_GET(curpcb)->pcb_ext->ext_vm86;
+ vm86 = &curpcb->pcb_ext->ext_vm86;
if (!vm86->vm86_has_vme)
vm86->vm86_eflags = vmf->vmf_eflags; /* save VIF, VIP */
}
diff --git a/sys/i386/i386/vm_machdep.c b/sys/i386/i386/vm_machdep.c
index 0a7bc21..dfaaa8b 100644
--- a/sys/i386/i386/vm_machdep.c
+++ b/sys/i386/i386/vm_machdep.c
@@ -106,6 +106,10 @@ __FBSDID("$FreeBSD$");
#define NSFBUFS (512 + maxusers * 16)
#endif
+CTASSERT((struct thread **)OFFSETOF_CURTHREAD ==
+ &((struct pcpu *)NULL)->pc_curthread);
+CTASSERT((struct pcb **)OFFSETOF_CURPCB == &((struct pcpu *)NULL)->pc_curpcb);
+
static void cpu_reset_real(void);
#ifdef SMP
static void cpu_reset_proxy(void);
diff --git a/sys/i386/include/cpufunc.h b/sys/i386/include/cpufunc.h
index 62d268d..7cd3663 100644
--- a/sys/i386/include/cpufunc.h
+++ b/sys/i386/include/cpufunc.h
@@ -155,6 +155,13 @@ cpu_mwait(u_long extensions, u_int hints)
}
static __inline void
+lfence(void)
+{
+
+ __asm __volatile("lfence" : : : "memory");
+}
+
+static __inline void
mfence(void)
{
diff --git a/sys/i386/include/npx.h b/sys/i386/include/npx.h
index 86ac477..33a47b3 100644
--- a/sys/i386/include/npx.h
+++ b/sys/i386/include/npx.h
@@ -55,7 +55,8 @@ int npxgetregs(struct thread *td);
void npxinit(void);
void npxsave(union savefpu *addr);
void npxsetregs(struct thread *td, union savefpu *addr);
-int npxtrap(void);
+int npxtrap_x87(void);
+int npxtrap_sse(void);
void npxuserinited(struct thread *);
struct fpu_kern_ctx *fpu_kern_alloc_ctx(u_int flags);
void fpu_kern_free_ctx(struct fpu_kern_ctx *ctx);
diff --git a/sys/i386/include/pcpu.h b/sys/i386/include/pcpu.h
index aaba413..aa1066d 100644
--- a/sys/i386/include/pcpu.h
+++ b/sys/i386/include/pcpu.h
@@ -236,16 +236,36 @@ extern struct pcpu *pcpup;
#define PCPU_PTR(member) __PCPU_PTR(pc_ ## member)
#define PCPU_SET(member, val) __PCPU_SET(pc_ ## member, val)
+#define OFFSETOF_CURTHREAD 0
+#ifdef __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wnull-dereference"
+#endif
static __inline __pure2 struct thread *
__curthread(void)
{
struct thread *td;
- __asm("movl %%fs:0,%0" : "=r" (td));
+ __asm("movl %%fs:%1,%0" : "=r" (td)
+ : "m" (*(char *)OFFSETOF_CURTHREAD));
return (td);
}
+#ifdef __clang__
+#pragma clang diagnostic pop
+#endif
#define curthread (__curthread())
+#define OFFSETOF_CURPCB 16
+static __inline __pure2 struct pcb *
+__curpcb(void)
+{
+ struct pcb *pcb;
+
+ __asm("movl %%fs:%1,%0" : "=r" (pcb) : "m" (*(char *)OFFSETOF_CURPCB));
+ return (pcb);
+}
+#define curpcb (__curpcb())
+
#else /* !lint || defined(__GNUCLIKE_ASM) && defined(__GNUCLIKE___TYPEOF) */
#error "this file needs to be ported to your compiler"
diff --git a/sys/i386/isa/npx.c b/sys/i386/isa/npx.c
index 50c812c..3b86d84 100644
--- a/sys/i386/isa/npx.c
+++ b/sys/i386/isa/npx.c
@@ -99,6 +99,7 @@ __FBSDID("$FreeBSD$");
#ifdef CPU_ENABLE_SSE
#define fxrstor(addr) __asm __volatile("fxrstor %0" : : "m" (*(addr)))
#define fxsave(addr) __asm __volatile("fxsave %0" : "=m" (*(addr)))
+#define stmxcsr(addr) __asm __volatile("stmxcsr %0" : : "m" (*(addr)))
#endif
#else /* !(__GNUCLIKE_ASM && !lint) */
@@ -113,6 +114,7 @@ void frstor(caddr_t addr);
#ifdef CPU_ENABLE_SSE
void fxsave(caddr_t addr);
void fxrstor(caddr_t addr);
+void stmxcsr(u_int *csr);
#endif
#endif /* __GNUCLIKE_ASM && !lint */
@@ -376,7 +378,7 @@ npxexit(td)
critical_enter();
if (curthread == PCPU_GET(fpcurthread))
- npxsave(PCPU_GET(curpcb)->pcb_save);
+ npxsave(curpcb->pcb_save);
critical_exit();
#ifdef NPX_DEBUG
if (hw_float) {
@@ -581,29 +583,30 @@ static char fpetable[128] = {
};
/*
- * Preserve the FP status word, clear FP exceptions, then generate a SIGFPE.
+ * Read the FP status and control words, then generate si_code value
+ * for SIGFPE. The error code chosen will be one of the
+ * FPE_... macros. It will be sent as the second argument to old
+ * BSD-style signal handlers and as "siginfo_t->si_code" (second
+ * argument) to SA_SIGINFO signal handlers.
*
- * Clearing exceptions is necessary mainly to avoid IRQ13 bugs. We now
- * depend on longjmp() restoring a usable state. Restoring the state
- * or examining it might fail if we didn't clear exceptions.
+ * Some time ago, we cleared the x87 exceptions with FNCLEX there.
+ * Clearing exceptions was necessary mainly to avoid IRQ13 bugs. The
+ * usermode code which understands the FPU hardware enough to enable
+ * the exceptions, can also handle clearing the exception state in the
+ * handler. The only consequence of not clearing the exception is the
+ * rethrow of the SIGFPE on return from the signal handler and
+ * reexecution of the corresponding instruction.
*
- * The error code chosen will be one of the FPE_... macros. It will be
- * sent as the second argument to old BSD-style signal handlers and as
- * "siginfo_t->si_code" (second argument) to SA_SIGINFO signal handlers.
- *
- * XXX the FP state is not preserved across signal handlers. So signal
- * handlers cannot afford to do FP unless they preserve the state or
- * longjmp() out. Both preserving the state and longjmp()ing may be
- * destroyed by IRQ13 bugs. Clearing FP exceptions is not an acceptable
- * solution for signals other than SIGFPE.
+ * For XMM traps, the exceptions were never cleared.
*/
int
-npxtrap()
+npxtrap_x87(void)
{
u_short control, status;
if (!hw_float) {
- printf("npxtrap: fpcurthread = %p, curthread = %p, hw_float = %d\n",
+ printf(
+ "npxtrap_x87: fpcurthread = %p, curthread = %p, hw_float = %d\n",
PCPU_GET(fpcurthread), curthread, hw_float);
panic("npxtrap from nowhere");
}
@@ -621,13 +624,32 @@ npxtrap()
fnstcw(&control);
fnstsw(&status);
}
-
- if (PCPU_GET(fpcurthread) == curthread)
- fnclex();
critical_exit();
return (fpetable[status & ((~control & 0x3f) | 0x40)]);
}
+#ifdef CPU_ENABLE_SSE
+int
+npxtrap_sse(void)
+{
+ u_int mxcsr;
+
+ if (!hw_float) {
+ printf(
+ "npxtrap_sse: fpcurthread = %p, curthread = %p, hw_float = %d\n",
+ PCPU_GET(fpcurthread), curthread, hw_float);
+ panic("npxtrap from nowhere");
+ }
+ critical_enter();
+ if (PCPU_GET(fpcurthread) != curthread)
+ mxcsr = curthread->td_pcb->pcb_save->sv_xmm.sv_env.en_mxcsr;
+ else
+ stmxcsr(&mxcsr);
+ critical_exit();
+ return (fpetable[(mxcsr & (~mxcsr >> 7)) & 0x3f]);
+}
+#endif
+
/*
* Implement device not available (DNA) exception
*
@@ -641,7 +663,6 @@ static int err_count = 0;
int
npxdna(void)
{
- struct pcb *pcb;
if (!hw_float)
return (0);
@@ -665,25 +686,24 @@ npxdna(void)
* Record new context early in case frstor causes an IRQ13.
*/
PCPU_SET(fpcurthread, curthread);
- pcb = PCPU_GET(curpcb);
#ifdef CPU_ENABLE_SSE
if (cpu_fxsr)
fpu_clean_state();
#endif
- if ((pcb->pcb_flags & PCB_NPXINITDONE) == 0) {
+ if ((curpcb->pcb_flags & PCB_NPXINITDONE) == 0) {
/*
* This is the first time this thread has used the FPU or
* the PCB doesn't contain a clean FPU state. Explicitly
* load an initial state.
*/
fpurstor(&npx_initialstate);
- if (pcb->pcb_initial_npxcw != __INITIAL_NPXCW__)
- fldcw(pcb->pcb_initial_npxcw);
- pcb->pcb_flags |= PCB_NPXINITDONE;
- if (PCB_USER_FPU(pcb))
- pcb->pcb_flags |= PCB_NPXUSERINITDONE;
+ if (curpcb->pcb_initial_npxcw != __INITIAL_NPXCW__)
+ fldcw(curpcb->pcb_initial_npxcw);
+ curpcb->pcb_flags |= PCB_NPXINITDONE;
+ if (PCB_USER_FPU(curpcb))
+ curpcb->pcb_flags |= PCB_NPXUSERINITDONE;
} else {
/*
* The following fpurstor() may cause an IRQ13 when the
@@ -699,7 +719,7 @@ npxdna(void)
* fnclex if it is the first FPU instruction after a context
* switch.
*/
- fpurstor(pcb->pcb_save);
+ fpurstor(curpcb->pcb_save);
}
critical_exit();
@@ -1077,13 +1097,14 @@ fpu_kern_thread(u_int flags)
{
struct pcb *pcb;
- pcb = PCPU_GET(curpcb);
+ pcb = curpcb;
KASSERT((curthread->td_pflags & TDP_KTHREAD) != 0,
("Only kthread may use fpu_kern_thread"));
- KASSERT(pcb->pcb_save == &pcb->pcb_user_save, ("mangled pcb_save"));
- KASSERT(PCB_USER_FPU(pcb), ("recursive call"));
+ KASSERT(curpcb->pcb_save == &curpcb->pcb_user_save,
+ ("mangled pcb_save"));
+ KASSERT(PCB_USER_FPU(curpcb), ("recursive call"));
- pcb->pcb_flags |= PCB_KERNNPX;
+ curpcb->pcb_flags |= PCB_KERNNPX;
return (0);
}
@@ -1093,5 +1114,5 @@ is_fpu_kern_thread(u_int flags)
if ((curthread->td_pflags & TDP_KTHREAD) == 0)
return (0);
- return ((PCPU_GET(curpcb)->pcb_flags & PCB_KERNNPX) != 0);
+ return ((curpcb->pcb_flags & PCB_KERNNPX) != 0);
}
diff --git a/sys/i386/linux/linux_proto.h b/sys/i386/linux/linux_proto.h
index b99dd96..9373d3e 100644
--- a/sys/i386/linux/linux_proto.h
+++ b/sys/i386/linux/linux_proto.h
@@ -3,7 +3,7 @@
*
* DO NOT EDIT-- this file is automatically generated.
* $FreeBSD$
- * created from FreeBSD: head/sys/i386/linux/syscalls.master 234359 2012-04-16 23:16:18Z jkim
+ * created from FreeBSD: head/sys/i386/linux/syscalls.master 238917 2012-07-30 20:44:45Z jhb
*/
#ifndef _LINUX_SYSPROTO_H_
@@ -261,7 +261,7 @@ struct linux_symlink_args {
};
struct linux_lstat_args {
char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
- char up_l_[PADL_(struct ostat *)]; struct ostat * up; char up_r_[PADR_(struct ostat *)];
+ char up_l_[PADL_(struct l_stat *)]; struct l_stat * up; char up_r_[PADR_(struct l_stat *)];
};
struct linux_readlink_args {
char name_l_[PADL_(char *)]; char * name; char name_r_[PADR_(char *)];
diff --git a/sys/i386/linux/linux_syscall.h b/sys/i386/linux/linux_syscall.h
index 3e33c17..c02e40b 100644
--- a/sys/i386/linux/linux_syscall.h
+++ b/sys/i386/linux/linux_syscall.h
@@ -3,7 +3,7 @@
*
* DO NOT EDIT-- this file is automatically generated.
* $FreeBSD$
- * created from FreeBSD: head/sys/i386/linux/syscalls.master 234359 2012-04-16 23:16:18Z jkim
+ * created from FreeBSD: head/sys/i386/linux/syscalls.master 238917 2012-07-30 20:44:45Z jhb
*/
#define LINUX_SYS_exit 1
diff --git a/sys/i386/linux/linux_syscalls.c b/sys/i386/linux/linux_syscalls.c
index e54ba67..4e7646a 100644
--- a/sys/i386/linux/linux_syscalls.c
+++ b/sys/i386/linux/linux_syscalls.c
@@ -3,7 +3,7 @@
*
* DO NOT EDIT-- this file is automatically generated.
* $FreeBSD$
- * created from FreeBSD: head/sys/i386/linux/syscalls.master 234359 2012-04-16 23:16:18Z jkim
+ * created from FreeBSD: head/sys/i386/linux/syscalls.master 238917 2012-07-30 20:44:45Z jhb
*/
const char *linux_syscallnames[] = {
diff --git a/sys/i386/linux/linux_sysent.c b/sys/i386/linux/linux_sysent.c
index 692c91e..fc64fdd 100644
--- a/sys/i386/linux/linux_sysent.c
+++ b/sys/i386/linux/linux_sysent.c
@@ -3,7 +3,7 @@
*
* DO NOT EDIT-- this file is automatically generated.
* $FreeBSD$
- * created from FreeBSD: head/sys/i386/linux/syscalls.master 234359 2012-04-16 23:16:18Z jkim
+ * created from FreeBSD: head/sys/i386/linux/syscalls.master 238917 2012-07-30 20:44:45Z jhb
*/
#include <sys/param.h>
diff --git a/sys/i386/linux/linux_systrace_args.c b/sys/i386/linux/linux_systrace_args.c
index 063b2f7..dfdd430 100644
--- a/sys/i386/linux/linux_systrace_args.c
+++ b/sys/i386/linux/linux_systrace_args.c
@@ -570,7 +570,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
case 84: {
struct linux_lstat_args *p = params;
uarg[0] = (intptr_t) p->path; /* char * */
- uarg[1] = (intptr_t) p->up; /* struct ostat * */
+ uarg[1] = (intptr_t) p->up; /* struct l_stat * */
*n_args = 2;
break;
}
@@ -3192,7 +3192,7 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
p = "char *";
break;
case 1:
- p = "struct ostat *";
+ p = "struct l_stat *";
break;
default:
break;
diff --git a/sys/i386/linux/syscalls.master b/sys/i386/linux/syscalls.master
index 0f2139c..bb17166 100644
--- a/sys/i386/linux/syscalls.master
+++ b/sys/i386/linux/syscalls.master
@@ -158,7 +158,7 @@
struct l_old_select_argv *ptr); }
83 AUE_SYMLINK STD { int linux_symlink(char *path, char *to); }
; 84: oldlstat
-84 AUE_LSTAT STD { int linux_lstat(char *path, struct ostat *up); }
+84 AUE_LSTAT STD { int linux_lstat(char *path, struct l_stat *up); }
85 AUE_READLINK STD { int linux_readlink(char *name, char *buf, \
l_int count); }
86 AUE_USELIB STD { int linux_uselib(char *library); }
diff --git a/sys/kern/imgact_aout.c b/sys/kern/imgact_aout.c
index 3ade6a2..3ae78de 100644
--- a/sys/kern/imgact_aout.c
+++ b/sys/kern/imgact_aout.c
@@ -106,6 +106,7 @@ struct sysentvec aout_sysvec = {
#define AOUT32_USRSTACK 0xbfc00000
#define AOUT32_PS_STRINGS \
(AOUT32_USRSTACK - sizeof(struct freebsd32_ps_strings))
+#define AOUT32_MINUSER FREEBSD32_MINUSER
extern const char *freebsd32_syscallnames[];
extern u_long ia32_maxssiz;
@@ -129,7 +130,7 @@ struct sysentvec aout_sysvec = {
.sv_imgact_try = NULL,
.sv_minsigstksz = MINSIGSTKSZ,
.sv_pagesize = IA32_PAGE_SIZE,
- .sv_minuser = 0,
+ .sv_minuser = AOUT32_MINUSER,
.sv_maxuser = AOUT32_USRSTACK,
.sv_usrstack = AOUT32_USRSTACK,
.sv_psstrings = AOUT32_PS_STRINGS,
diff --git a/sys/kern/imgact_elf.c b/sys/kern/imgact_elf.c
index 5d0f494..b626610 100644
--- a/sys/kern/imgact_elf.c
+++ b/sys/kern/imgact_elf.c
@@ -83,7 +83,7 @@ __FBSDID("$FreeBSD$");
static int __elfN(check_header)(const Elf_Ehdr *hdr);
static Elf_Brandinfo *__elfN(get_brandinfo)(struct image_params *imgp,
- const char *interp, int32_t *osrel);
+ const char *interp, int interp_name_len, int32_t *osrel);
static int __elfN(load_file)(struct proc *p, const char *file, u_long *addr,
u_long *entry, size_t pagesize);
static int __elfN(load_section)(struct image_params *imgp, vm_offset_t offset,
@@ -254,7 +254,7 @@ __elfN(brand_inuse)(Elf_Brandinfo *entry)
static Elf_Brandinfo *
__elfN(get_brandinfo)(struct image_params *imgp, const char *interp,
- int32_t *osrel)
+ int interp_name_len, int32_t *osrel)
{
const Elf_Ehdr *hdr = (const Elf_Ehdr *)imgp->image_header;
Elf_Brandinfo *bi;
@@ -300,7 +300,10 @@ __elfN(get_brandinfo)(struct image_params *imgp, const char *interp,
if (bi == NULL || bi->flags & BI_BRAND_NOTE_MANDATORY)
continue;
if (hdr->e_machine == bi->machine &&
- strcmp(interp, bi->interp_path) == 0)
+ /* ELF image p_filesz includes terminating zero */
+ strlen(bi->interp_path) + 1 == interp_name_len &&
+ strncmp(interp, bi->interp_path, interp_name_len)
+ == 0)
return (bi);
}
}
@@ -722,7 +725,7 @@ __CONCAT(exec_, __elfN(imgact))(struct image_params *imgp)
u_long seg_size, seg_addr;
u_long addr, baddr, et_dyn_addr, entry = 0, proghdr = 0;
int32_t osrel = 0;
- int error = 0, i, n;
+ int error = 0, i, n, interp_name_len = 0;
const char *interp = NULL, *newinterp = NULL;
Elf_Brandinfo *brand_info;
char *path;
@@ -763,9 +766,11 @@ __CONCAT(exec_, __elfN(imgact))(struct image_params *imgp)
case PT_INTERP:
/* Path to interpreter */
if (phdr[i].p_filesz > MAXPATHLEN ||
- phdr[i].p_offset + phdr[i].p_filesz > PAGE_SIZE)
+ phdr[i].p_offset >= PAGE_SIZE ||
+ phdr[i].p_offset + phdr[i].p_filesz >= PAGE_SIZE)
return (ENOEXEC);
interp = imgp->image_header + phdr[i].p_offset;
+ interp_name_len = phdr[i].p_filesz;
break;
case PT_GNU_STACK:
if (__elfN(nxstack))
@@ -775,7 +780,8 @@ __CONCAT(exec_, __elfN(imgact))(struct image_params *imgp)
}
}
- brand_info = __elfN(get_brandinfo)(imgp, interp, &osrel);
+ brand_info = __elfN(get_brandinfo)(imgp, interp, interp_name_len,
+ &osrel);
if (brand_info == NULL) {
uprintf("ELF binary type \"%u\" not known.\n",
hdr->e_ident[EI_OSABI]);
@@ -1562,6 +1568,7 @@ __elfN(parse_notes)(struct image_params *imgp, Elf_Brandnote *checknote,
int i;
if (pnote == NULL || pnote->p_offset >= PAGE_SIZE ||
+ pnote->p_filesz > PAGE_SIZE ||
pnote->p_offset + pnote->p_filesz >= PAGE_SIZE)
return (FALSE);
@@ -1569,15 +1576,17 @@ __elfN(parse_notes)(struct image_params *imgp, Elf_Brandnote *checknote,
note_end = (const Elf_Note *)(imgp->image_header +
pnote->p_offset + pnote->p_filesz);
for (i = 0; i < 100 && note >= note0 && note < note_end; i++) {
- if (!aligned(note, Elf32_Addr))
+ if (!aligned(note, Elf32_Addr) || (const char *)note_end -
+ (const char *)note < sizeof(Elf_Note))
return (FALSE);
if (note->n_namesz != checknote->hdr.n_namesz ||
note->n_descsz != checknote->hdr.n_descsz ||
note->n_type != checknote->hdr.n_type)
goto nextnote;
note_name = (const char *)(note + 1);
- if (strncmp(checknote->vendor, note_name,
- checknote->hdr.n_namesz) != 0)
+ if (note_name + checknote->hdr.n_namesz >=
+ (const char *)note_end || strncmp(checknote->vendor,
+ note_name, checknote->hdr.n_namesz) != 0)
goto nextnote;
/*
diff --git a/sys/kern/kern_clocksource.c b/sys/kern/kern_clocksource.c
index 26279a4..a7a0da4 100644
--- a/sys/kern/kern_clocksource.c
+++ b/sys/kern/kern_clocksource.c
@@ -205,19 +205,21 @@ handleevents(struct bintime *now, int fake)
runs = 0;
while (bintime_cmp(now, &state->nexthard, >=)) {
- bintime_add(&state->nexthard, &hardperiod);
+ bintime_addx(&state->nexthard, hardperiod.frac);
runs++;
}
- if ((timer->et_flags & ET_FLAGS_PERCPU) == 0 &&
- bintime_cmp(&state->nexthard, &nexthard, >))
- nexthard = state->nexthard;
- if (runs && fake < 2) {
- hardclock_cnt(runs, usermode);
- done = 1;
+ if (runs) {
+ if ((timer->et_flags & ET_FLAGS_PERCPU) == 0 &&
+ bintime_cmp(&state->nexthard, &nexthard, >))
+ nexthard = state->nexthard;
+ if (fake < 2) {
+ hardclock_cnt(runs, usermode);
+ done = 1;
+ }
}
runs = 0;
while (bintime_cmp(now, &state->nextstat, >=)) {
- bintime_add(&state->nextstat, &statperiod);
+ bintime_addx(&state->nextstat, statperiod.frac);
runs++;
}
if (runs && fake < 2) {
@@ -227,7 +229,7 @@ handleevents(struct bintime *now, int fake)
if (profiling) {
runs = 0;
while (bintime_cmp(now, &state->nextprof, >=)) {
- bintime_add(&state->nextprof, &profperiod);
+ bintime_addx(&state->nextprof, profperiod.frac);
runs++;
}
if (runs && !fake) {
@@ -356,7 +358,7 @@ timercb(struct eventtimer *et, void *arg)
next = &nexttick;
if (periodic) {
now = *next; /* Ex-next tick time becomes present time. */
- bintime_add(next, &timerperiod); /* Next tick in 1 period. */
+ bintime_addx(next, timerperiod.frac); /* Next tick in 1 period. */
} else {
binuptime(&now); /* Get present time from hardware. */
next->sec = -1; /* Next tick is not scheduled yet. */
@@ -433,7 +435,7 @@ loadtimer(struct bintime *now, int start)
new.sec = 0;
new.frac = timerperiod.frac - tmp;
if (new.frac < tmp) /* Left less then passed. */
- bintime_add(&new, &timerperiod);
+ bintime_addx(&new, timerperiod.frac);
CTR5(KTR_SPARE2, "load p at %d: now %d.%08x first in %d.%08x",
curcpu, now->sec, (unsigned int)(now->frac >> 32),
new.sec, (unsigned int)(new.frac >> 32));
@@ -531,7 +533,7 @@ configtimer(int start)
if (start) {
/* Initialize time machine parameters. */
next = now;
- bintime_add(&next, &timerperiod);
+ bintime_addx(&next, timerperiod.frac);
if (periodic)
nexttick = next;
else
diff --git a/sys/kern/kern_descrip.c b/sys/kern/kern_descrip.c
index f8e3f3d..9ed6369 100644
--- a/sys/kern/kern_descrip.c
+++ b/sys/kern/kern_descrip.c
@@ -113,6 +113,7 @@ static uma_zone_t file_zone;
/* Flags for do_dup() */
#define DUP_FIXED 0x1 /* Force fixed allocation */
#define DUP_FCNTL 0x2 /* fcntl()-style errors */
+#define DUP_CLOEXEC 0x4 /* Atomically set FD_CLOEXEC. */
static int closefp(struct filedesc *fdp, int fd, struct file *fp,
struct thread *td, int holdleaders);
@@ -366,7 +367,7 @@ int
sys_fcntl(struct thread *td, struct fcntl_args *uap)
{
struct flock fl;
- struct oflock ofl;
+ struct __oflock ofl;
intptr_t arg;
int error;
int cmd;
@@ -479,11 +480,23 @@ kern_fcntl(struct thread *td, int fd, int cmd, intptr_t arg)
error = do_dup(td, DUP_FCNTL, fd, tmp, td->td_retval);
break;
+ case F_DUPFD_CLOEXEC:
+ tmp = arg;
+ error = do_dup(td, DUP_FCNTL | DUP_CLOEXEC, fd, tmp,
+ td->td_retval);
+ break;
+
case F_DUP2FD:
tmp = arg;
error = do_dup(td, DUP_FIXED, fd, tmp, td->td_retval);
break;
+ case F_DUP2FD_CLOEXEC:
+ tmp = arg;
+ error = do_dup(td, DUP_FIXED | DUP_CLOEXEC, fd, tmp,
+ td->td_retval);
+ break;
+
case F_GETFD:
FILEDESC_SLOCK(fdp);
if ((fp = fget_locked(fdp, fd)) == NULL) {
@@ -842,6 +855,8 @@ do_dup(struct thread *td, int flags, int old, int new,
}
if (flags & DUP_FIXED && old == new) {
*retval = new;
+ if (flags & DUP_CLOEXEC)
+ fdp->fd_ofileflags[new] |= UF_EXCLOSE;
FILEDESC_XUNLOCK(fdp);
return (0);
}
@@ -895,7 +910,10 @@ do_dup(struct thread *td, int flags, int old, int new,
* Duplicate the source descriptor.
*/
fdp->fd_ofiles[new] = fp;
- fdp->fd_ofileflags[new] = fdp->fd_ofileflags[old] &~ UF_EXCLOSE;
+ if ((flags & DUP_CLOEXEC) != 0)
+ fdp->fd_ofileflags[new] = fdp->fd_ofileflags[old] | UF_EXCLOSE;
+ else
+ fdp->fd_ofileflags[new] = fdp->fd_ofileflags[old] & ~UF_EXCLOSE;
if (new > fdp->fd_lastfile)
fdp->fd_lastfile = new;
*retval = new;
diff --git a/sys/kern/kern_event.c b/sys/kern/kern_event.c
index b25c678..6a920ca 100644
--- a/sys/kern/kern_event.c
+++ b/sys/kern/kern_event.c
@@ -513,6 +513,10 @@ knote_fork(struct knlist *list, int pid)
list->kl_unlock(list->kl_lockarg);
}
+/*
+ * XXX: EVFILT_TIMER should perhaps live in kern_time.c beside the
+ * interval timer support code.
+ */
static int
timertoticks(intptr_t data)
{
@@ -526,7 +530,6 @@ timertoticks(intptr_t data)
return tticks;
}
-/* XXX - move to kern_timeout.c? */
static void
filt_timerexpire(void *knx)
{
@@ -536,9 +539,16 @@ filt_timerexpire(void *knx)
kn->kn_data++;
KNOTE_ACTIVATE(kn, 0); /* XXX - handle locking */
+ /*
+ * timertoticks() uses tvtohz() which always adds 1 to allow
+ * for the time until the next clock interrupt being strictly
+ * less than 1 clock tick. We don't want that here since we
+ * want to appear to be in sync with the clock interrupt even
+ * when we're delayed.
+ */
if ((kn->kn_flags & EV_ONESHOT) != EV_ONESHOT) {
calloutp = (struct callout *)kn->kn_hook;
- callout_reset_curcpu(calloutp, timertoticks(kn->kn_sdata),
+ callout_reset_curcpu(calloutp, timertoticks(kn->kn_sdata) - 1,
filt_timerexpire, kn);
}
}
@@ -546,7 +556,6 @@ filt_timerexpire(void *knx)
/*
* data contains amount of time to sleep, in milliseconds
*/
-/* XXX - move to kern_timeout.c? */
static int
filt_timerattach(struct knote *kn)
{
@@ -570,7 +579,6 @@ filt_timerattach(struct knote *kn)
return (0);
}
-/* XXX - move to kern_timeout.c? */
static void
filt_timerdetach(struct knote *kn)
{
@@ -583,7 +591,6 @@ filt_timerdetach(struct knote *kn)
kn->kn_status |= KN_DETACHED; /* knlist_remove usually clears it */
}
-/* XXX - move to kern_timeout.c? */
static int
filt_timer(struct knote *kn, long hint)
{
diff --git a/sys/kern/kern_ktr.c b/sys/kern/kern_ktr.c
index 60bc9c8..6adca69 100644
--- a/sys/kern/kern_ktr.c
+++ b/sys/kern/kern_ktr.c
@@ -283,7 +283,7 @@ ktr_tracepoint(u_int mask, const char *file, int line, const char *format,
{
do {
saveindex = ktr_idx;
- newindex = (saveindex + 1) & (KTR_ENTRIES - 1);
+ newindex = (saveindex + 1) % KTR_ENTRIES;
} while (atomic_cmpset_rel_int(&ktr_idx, saveindex, newindex) == 0);
entry = &ktr_buf[saveindex];
}
@@ -338,7 +338,7 @@ static int db_mach_vtrace(void);
DB_SHOW_COMMAND(ktr, db_ktr_all)
{
- tstate.cur = (ktr_idx - 1) & (KTR_ENTRIES - 1);
+ tstate.cur = (ktr_idx - 1) % KTR_ENTRIES;
tstate.first = -1;
db_ktr_verbose = 0;
db_ktr_verbose |= (strchr(modif, 'v') != NULL) ? 2 : 0;
diff --git a/sys/kern/kern_malloc.c b/sys/kern/kern_malloc.c
index 18428c0..e06fa59 100644
--- a/sys/kern/kern_malloc.c
+++ b/sys/kern/kern_malloc.c
@@ -744,7 +744,7 @@ kmeminit(void *dummy)
vm_kmem_size = 2 * mem_size * PAGE_SIZE;
#ifdef DEBUG_MEMGUARD
- tmp = memguard_fudge(vm_kmem_size, vm_kmem_size_max);
+ tmp = memguard_fudge(vm_kmem_size, kernel_map);
#else
tmp = vm_kmem_size;
#endif
diff --git a/sys/kern/kern_proc.c b/sys/kern/kern_proc.c
index 153b310..9d419c7 100644
--- a/sys/kern/kern_proc.c
+++ b/sys/kern/kern_proc.c
@@ -2189,6 +2189,10 @@ sysctl_kern_proc_vmmap(SYSCTL_HANDLER_ARGS)
kve->kve_flags |= KVME_FLAG_NEEDS_COPY;
if (entry->eflags & MAP_ENTRY_NOCOREDUMP)
kve->kve_flags |= KVME_FLAG_NOCOREDUMP;
+ if (entry->eflags & MAP_ENTRY_GROWS_UP)
+ kve->kve_flags |= KVME_FLAG_GROWS_UP;
+ if (entry->eflags & MAP_ENTRY_GROWS_DOWN)
+ kve->kve_flags |= KVME_FLAG_GROWS_DOWN;
last_timestamp = map->timestamp;
vm_map_unlock_read(map);
diff --git a/sys/kern/kern_tc.c b/sys/kern/kern_tc.c
index 4a75af5..a08b218 100644
--- a/sys/kern/kern_tc.c
+++ b/sys/kern/kern_tc.c
@@ -122,6 +122,8 @@ SYSCTL_INT(_kern_timecounter, OID_AUTO, stepwarnings, CTLFLAG_RW,
static void tc_windup(void);
static void cpu_tick_calibrate(int);
+void dtrace_getnanotime(struct timespec *tsp);
+
static int
sysctl_kern_boottime(SYSCTL_HANDLER_ARGS)
{
@@ -960,6 +962,24 @@ getmicrotime(struct timeval *tvp)
#endif /* FFCLOCK */
/*
+ * This is a clone of getnanotime and used for walltimestamps.
+ * The dtrace_ prefix prevents fbt from creating probes for
+ * it so walltimestamp can be safely used in all fbt probes.
+ */
+void
+dtrace_getnanotime(struct timespec *tsp)
+{
+ struct timehands *th;
+ u_int gen;
+
+ do {
+ th = timehands;
+ gen = th->th_generation;
+ *tsp = th->th_nanotime;
+ } while (gen == 0 || gen != th->th_generation);
+}
+
+/*
* System clock currently providing time to the system. Modifiable via sysctl
* when the FFCLOCK option is defined.
*/
diff --git a/sys/kern/sys_pipe.c b/sys/kern/sys_pipe.c
index 43c39fc..338256c 100644
--- a/sys/kern/sys_pipe.c
+++ b/sys/kern/sys_pipe.c
@@ -227,7 +227,6 @@ static int pipe_create(struct pipe *pipe, int backing);
static int pipe_paircreate(struct thread *td, struct pipepair **p_pp);
static __inline int pipelock(struct pipe *cpipe, int catch);
static __inline void pipeunlock(struct pipe *cpipe);
-static __inline void pipeselwakeup(struct pipe *cpipe);
#ifndef PIPE_NODIRECT
static int pipe_build_write_buffer(struct pipe *wpipe, struct uio *uio);
static void pipe_destroy_write_buffer(struct pipe *wpipe);
@@ -607,7 +606,7 @@ pipeunlock(cpipe)
}
}
-static __inline void
+void
pipeselwakeup(cpipe)
struct pipe *cpipe;
{
@@ -738,7 +737,7 @@ pipe_read(fp, uio, active_cred, flags, td)
rpipe->pipe_map.pos += size;
rpipe->pipe_map.cnt -= size;
if (rpipe->pipe_map.cnt == 0) {
- rpipe->pipe_state &= ~PIPE_DIRECTW;
+ rpipe->pipe_state &= ~(PIPE_DIRECTW|PIPE_WANTW);
wakeup(rpipe);
}
#endif
@@ -1001,6 +1000,7 @@ retry:
wakeup(wpipe);
}
pipeselwakeup(wpipe);
+ wpipe->pipe_state |= PIPE_WANTW;
pipeunlock(wpipe);
error = msleep(wpipe, PIPE_MTX(wpipe), PRIBIO | PCATCH,
"pipdwt", 0);
@@ -1442,7 +1442,7 @@ pipe_poll(fp, events, active_cred, td)
levents = events &
(POLLIN | POLLINIGNEOF | POLLPRI | POLLRDNORM | POLLRDBAND);
if (rpipe->pipe_state & PIPE_NAMED && fp->f_flag & FREAD && levents &&
- rpipe->pipe_state & PIPE_SAMEWGEN)
+ fp->f_seqcount == rpipe->pipe_wgen)
events |= POLLINIGNEOF;
if ((events & POLLINIGNEOF) == 0) {
diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c
index 66ab5a3..cc6d93c 100644
--- a/sys/kern/vfs_syscalls.c
+++ b/sys/kern/vfs_syscalls.c
@@ -1093,8 +1093,7 @@ kern_openat(struct thread *td, int fd, char *path, enum uio_seg pathseg,
struct file *fp;
struct vnode *vp;
int cmode;
- int type, indx = -1, error;
- struct flock lf;
+ int indx = -1, error;
struct nameidata nd;
int vfslocked;
cap_rights_t rights_needed = CAP_LOOKUP;
@@ -1180,26 +1179,11 @@ kern_openat(struct thread *td, int fd, char *path, enum uio_seg pathseg,
if (fp->f_ops == &badfileops) {
KASSERT(vp->v_type != VFIFO, ("Unexpected fifo."));
fp->f_seqcount = 1;
- finit(fp, flags & FMASK, DTYPE_VNODE, vp, &vnops);
+ finit(fp, (flags & FMASK) | (fp->f_flag & FHASLOCK), DTYPE_VNODE,
+ vp, &vnops);
}
VOP_UNLOCK(vp, 0);
- if (fp->f_type == DTYPE_VNODE && (flags & (O_EXLOCK | O_SHLOCK)) != 0) {
- lf.l_whence = SEEK_SET;
- lf.l_start = 0;
- lf.l_len = 0;
- if (flags & O_EXLOCK)
- lf.l_type = F_WRLCK;
- else
- lf.l_type = F_RDLCK;
- type = F_FLOCK;
- if ((flags & FNONBLOCK) == 0)
- type |= F_WAIT;
- if ((error = VOP_ADVLOCK(vp, (caddr_t)fp, F_SETLK, &lf,
- type)) != 0)
- goto bad;
- atomic_set_int(&fp->f_flag, FHASLOCK);
- }
if (flags & O_TRUNC) {
error = fo_truncate(fp, 0, td->td_ucred, td);
if (error)
@@ -4483,9 +4467,8 @@ sys_fhopen(td, uap)
struct mount *mp;
struct vnode *vp;
struct fhandle fhp;
- struct flock lf;
struct file *fp;
- int fmode, error, type;
+ int fmode, error;
int vfslocked;
int indx;
@@ -4542,24 +4525,9 @@ sys_fhopen(td, uap)
#endif
fp->f_vnode = vp;
fp->f_seqcount = 1;
- finit(fp, fmode & FMASK, DTYPE_VNODE, vp, &vnops);
+ finit(fp, (fmode & FMASK) | (fp->f_flag & FHASLOCK), DTYPE_VNODE, vp,
+ &vnops);
VOP_UNLOCK(vp, 0);
- if (fmode & (O_EXLOCK | O_SHLOCK)) {
- lf.l_whence = SEEK_SET;
- lf.l_start = 0;
- lf.l_len = 0;
- if (fmode & O_EXLOCK)
- lf.l_type = F_WRLCK;
- else
- lf.l_type = F_RDLCK;
- type = F_FLOCK;
- if ((fmode & FNONBLOCK) == 0)
- type |= F_WAIT;
- if ((error = VOP_ADVLOCK(vp, (caddr_t)fp, F_SETLK, &lf,
- type)) != 0)
- goto bad;
- atomic_set_int(&fp->f_flag, FHASLOCK);
- }
if (fmode & O_TRUNC) {
error = fo_truncate(fp, 0, td->td_ucred, td);
if (error)
diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c
index b5dcadf..0ad2db8 100644
--- a/sys/kern/vfs_vnops.c
+++ b/sys/kern/vfs_vnops.c
@@ -229,8 +229,10 @@ int
vn_open_vnode(struct vnode *vp, int fmode, struct ucred *cred,
struct thread *td, struct file *fp)
{
+ struct mount *mp;
accmode_t accmode;
- int error;
+ struct flock lf;
+ int error, have_flock, lock_flags, type;
VFS_ASSERT_GIANT(vp->v_mount);
if (vp->v_type == VLNK)
@@ -271,6 +273,51 @@ vn_open_vnode(struct vnode *vp, int fmode, struct ucred *cred,
if ((error = VOP_OPEN(vp, fmode, cred, td, fp)) != 0)
return (error);
+ if (fmode & (O_EXLOCK | O_SHLOCK)) {
+ KASSERT(fp != NULL, ("open with flock requires fp"));
+ lock_flags = VOP_ISLOCKED(vp);
+ VOP_UNLOCK(vp, 0);
+ lf.l_whence = SEEK_SET;
+ lf.l_start = 0;
+ lf.l_len = 0;
+ if (fmode & O_EXLOCK)
+ lf.l_type = F_WRLCK;
+ else
+ lf.l_type = F_RDLCK;
+ type = F_FLOCK;
+ if ((fmode & FNONBLOCK) == 0)
+ type |= F_WAIT;
+ error = VOP_ADVLOCK(vp, (caddr_t)fp, F_SETLK, &lf, type);
+ have_flock = (error == 0);
+ vn_lock(vp, lock_flags | LK_RETRY);
+ if (error == 0 && vp->v_iflag & VI_DOOMED)
+ error = ENOENT;
+ /*
+ * Another thread might have used this vnode as an
+ * executable while the vnode lock was dropped.
+ * Ensure the vnode is still able to be opened for
+ * writing after the lock has been obtained.
+ */
+ if (error == 0 && accmode & VWRITE)
+ error = vn_writechk(vp);
+ if (error) {
+ VOP_UNLOCK(vp, 0);
+ if (have_flock) {
+ lf.l_whence = SEEK_SET;
+ lf.l_start = 0;
+ lf.l_len = 0;
+ lf.l_type = F_UNLCK;
+ (void) VOP_ADVLOCK(vp, fp, F_UNLCK, &lf,
+ F_FLOCK);
+ }
+ vn_start_write(vp, &mp, V_WAIT);
+ vn_lock(vp, lock_flags | LK_RETRY);
+ (void)VOP_CLOSE(vp, fmode, cred, td);
+ vn_finished_write(mp);
+ return (error);
+ }
+ fp->f_flag |= FHASLOCK;
+ }
if (fmode & FWRITE) {
vp->v_writecount++;
CTR3(KTR_VFS, "%s: vp %p v_writecount increased to %d",
@@ -1400,19 +1447,22 @@ vn_closefile(fp, td)
int error;
vp = fp->f_vnode;
+ fp->f_ops = &badfileops;
vfslocked = VFS_LOCK_GIANT(vp->v_mount);
+ if (fp->f_type == DTYPE_VNODE && fp->f_flag & FHASLOCK)
+ vref(vp);
+
+ error = vn_close(vp, fp->f_flag, fp->f_cred, td);
+
if (fp->f_type == DTYPE_VNODE && fp->f_flag & FHASLOCK) {
lf.l_whence = SEEK_SET;
lf.l_start = 0;
lf.l_len = 0;
lf.l_type = F_UNLCK;
(void) VOP_ADVLOCK(vp, fp, F_UNLCK, &lf, F_FLOCK);
+ vrele(vp);
}
-
- fp->f_ops = &badfileops;
-
- error = vn_close(vp, fp->f_flag, fp->f_cred, td);
VFS_UNLOCK_GIANT(vfslocked);
return (error);
}
diff --git a/sys/mips/mips/pmap.c b/sys/mips/mips/pmap.c
index d00f1a3..d4b364b 100644
--- a/sys/mips/mips/pmap.c
+++ b/sys/mips/mips/pmap.c
@@ -1034,9 +1034,9 @@ pmap_grow_direct_page_cache()
{
#ifdef __mips_n64
- vm_contig_grow_cache(3, 0, MIPS_XKPHYS_LARGEST_PHYS);
+ vm_pageout_grow_cache(3, 0, MIPS_XKPHYS_LARGEST_PHYS);
#else
- vm_contig_grow_cache(3, 0, MIPS_KSEG0_LARGEST_PHYS);
+ vm_pageout_grow_cache(3, 0, MIPS_KSEG0_LARGEST_PHYS);
#endif
}
@@ -3146,16 +3146,16 @@ init_pte_prot(vm_offset_t va, vm_page_t m, vm_prot_t prot)
pt_entry_t rw;
if (!(prot & VM_PROT_WRITE))
- rw = PTE_V | PTE_RO | PTE_C_CACHE;
+ rw = PTE_V | PTE_RO;
else if ((m->oflags & VPO_UNMANAGED) == 0) {
if ((m->md.pv_flags & PV_TABLE_MOD) != 0)
- rw = PTE_V | PTE_D | PTE_C_CACHE;
+ rw = PTE_V | PTE_D;
else
- rw = PTE_V | PTE_C_CACHE;
+ rw = PTE_V;
vm_page_aflag_set(m, PGA_WRITEABLE);
} else
/* Needn't emulate a modified bit for unmanaged pages. */
- rw = PTE_V | PTE_D | PTE_C_CACHE;
+ rw = PTE_V | PTE_D;
return (rw);
}
diff --git a/sys/modules/ahci/Makefile b/sys/modules/ahci/Makefile
index d682839..ab2a0ed 100644
--- a/sys/modules/ahci/Makefile
+++ b/sys/modules/ahci/Makefile
@@ -3,6 +3,6 @@
.PATH: ${.CURDIR}/../../dev/ahci
KMOD= ahci
-SRCS= ahci.c ahci.h device_if.h bus_if.h pci_if.h opt_cam.h
+SRCS= ahci.c ahciem.c ahci.h device_if.h bus_if.h pci_if.h opt_cam.h
.include <bsd.kmod.mk>
diff --git a/sys/modules/ath/Makefile b/sys/modules/ath/Makefile
index 44be449..e3e62c4 100644
--- a/sys/modules/ath/Makefile
+++ b/sys/modules/ath/Makefile
@@ -37,7 +37,7 @@ ATH_RATE?= sample # tx rate control algorithm
KMOD= if_ath
SRCS= if_ath.c if_ath_debug.c if_ath_keycache.c if_ath_sysctl.c
SRCS+= if_ath_tx.c if_ath_tx_ht.c if_ath_led.c if_ath_rx.c if_ath_tdma.c
-SRCS+= if_ath_beacon.c if_ath_rx_edma.c
+SRCS+= if_ath_beacon.c if_ath_rx_edma.c if_ath_tx_edma.c
# NB: v3 eeprom support used by both AR5211 and AR5212; just include it
SRCS+= ah_osdep.c ah.c ah_regdomain.c ah_eeprom_v3.c
SRCS+= device_if.h bus_if.h pci_if.h opt_inet.h opt_ath.h opt_ah.h opt_wlan.h
diff --git a/sys/modules/cam/Makefile b/sys/modules/cam/Makefile
index 30c03ff..00a531a 100644
--- a/sys/modules/cam/Makefile
+++ b/sys/modules/cam/Makefile
@@ -14,7 +14,6 @@ SRCS+= opt_scsi.h
SRCS+= opt_cd.h
SRCS+= opt_pt.h
SRCS+= opt_sa.h
-SRCS+= opt_enc.h
SRCS+= device_if.h bus_if.h vnode_if.h
SRCS+= cam.c
.if exists($S/${MACHINE}/${MACHINE}/cam_machdep.c)
diff --git a/sys/net/flowtable.c b/sys/net/flowtable.c
index 0e50377..2e209ef 100644
--- a/sys/net/flowtable.c
+++ b/sys/net/flowtable.c
@@ -1258,7 +1258,7 @@ uncached:
else
l3addr = (struct sockaddr_storage *)&ro->ro_dst;
- llentry_update(&lle, LLTABLE6(ifp), l3addr, ifp);
+ lle = llentry_alloc(ifp, LLTABLE6(ifp), l3addr);
}
#endif
#ifdef INET
@@ -1267,7 +1267,7 @@ uncached:
l3addr = (struct sockaddr_storage *)rt->rt_gateway;
else
l3addr = (struct sockaddr_storage *)&ro->ro_dst;
- llentry_update(&lle, LLTABLE(ifp), l3addr, ifp);
+ lle = llentry_alloc(ifp, LLTABLE(ifp), l3addr);
}
#endif
diff --git a/sys/net/if_llatbl.c b/sys/net/if_llatbl.c
index 8092f0f..bb49fdd 100644
--- a/sys/net/if_llatbl.c
+++ b/sys/net/if_llatbl.c
@@ -106,10 +106,19 @@ llentry_free(struct llentry *lle)
size_t pkts_dropped;
struct mbuf *next;
- pkts_dropped = 0;
+ IF_AFDATA_WLOCK_ASSERT(lle->lle_tbl->llt_ifp);
LLE_WLOCK_ASSERT(lle);
+
+ /* XXX: guard against race with other llentry_free(). */
+ if (!(lle->la_flags & LLE_LINKED)) {
+ LLE_FREE_LOCKED(lle);
+ return (0);
+ }
+
LIST_REMOVE(lle, lle_next);
+ lle->la_flags &= ~(LLE_VALID | LLE_LINKED);
+ pkts_dropped = 0;
while ((lle->la_numheld > 0) && (lle->la_hold != NULL)) {
next = lle->la_hold->m_nextpkt;
m_freem(lle->la_hold);
@@ -118,53 +127,43 @@ llentry_free(struct llentry *lle)
pkts_dropped++;
}
- KASSERT(lle->la_numheld == 0,
- ("%s: la_numheld %d > 0, pkts_droped %zd", __func__,
+ KASSERT(lle->la_numheld == 0,
+ ("%s: la_numheld %d > 0, pkts_droped %zd", __func__,
lle->la_numheld, pkts_dropped));
- lle->la_flags &= ~LLE_VALID;
LLE_FREE_LOCKED(lle);
return (pkts_dropped);
}
/*
- * Update an llentry for address dst (equivalent to rtalloc for new-arp)
- * Caller must pass in a valid struct llentry * (or NULL)
+ * (al)locate an llentry for address dst (equivalent to rtalloc for new-arp).
*
- * if found the llentry * is returned referenced and unlocked
+ * If found the llentry * is returned referenced and unlocked.
*/
-int
-llentry_update(struct llentry **llep, struct lltable *lt,
- struct sockaddr_storage *dst, struct ifnet *ifp)
+struct llentry *
+llentry_alloc(struct ifnet *ifp, struct lltable *lt,
+ struct sockaddr_storage *dst)
{
struct llentry *la;
- IF_AFDATA_RLOCK(ifp);
- la = lla_lookup(lt, LLE_EXCLUSIVE,
- (struct sockaddr *)dst);
+ IF_AFDATA_RLOCK(ifp);
+ la = lla_lookup(lt, LLE_EXCLUSIVE, (struct sockaddr *)dst);
IF_AFDATA_RUNLOCK(ifp);
- if ((la == NULL) &&
+ if ((la == NULL) &&
(ifp->if_flags & (IFF_NOARP | IFF_STATICARP)) == 0) {
IF_AFDATA_WLOCK(ifp);
- la = lla_lookup(lt,
- (LLE_CREATE | LLE_EXCLUSIVE),
+ la = lla_lookup(lt, (LLE_CREATE | LLE_EXCLUSIVE),
(struct sockaddr *)dst);
- IF_AFDATA_WUNLOCK(ifp);
+ IF_AFDATA_WUNLOCK(ifp);
}
- if (la != NULL && (*llep != la)) {
- if (*llep != NULL)
- LLE_FREE(*llep);
+
+ if (la != NULL) {
LLE_ADDREF(la);
LLE_WUNLOCK(la);
- *llep = la;
- } else if (la != NULL)
- LLE_WUNLOCK(la);
-
- if (la == NULL)
- return (ENOENT);
+ }
- return (0);
+ return (la);
}
/*
@@ -182,17 +181,16 @@ lltable_free(struct lltable *llt)
SLIST_REMOVE(&V_lltables, llt, lltable, llt_link);
LLTABLE_WUNLOCK();
- for (i=0; i < LLTBL_HASHTBL_SIZE; i++) {
+ IF_AFDATA_WLOCK(llt->llt_ifp);
+ for (i = 0; i < LLTBL_HASHTBL_SIZE; i++) {
LIST_FOREACH_SAFE(lle, &llt->lle_head[i], lle_next, next) {
- int canceled;
-
- canceled = callout_drain(&lle->la_timer);
LLE_WLOCK(lle);
- if (canceled)
+ if (callout_stop(&lle->la_timer))
LLE_REMREF(lle);
llentry_free(lle);
}
}
+ IF_AFDATA_WUNLOCK(llt->llt_ifp);
free(llt, M_LLTABLE);
}
@@ -227,7 +225,7 @@ lltable_drain(int af)
void
lltable_prefix_free(int af, struct sockaddr *prefix, struct sockaddr *mask,
- u_int flags)
+ u_int flags)
{
struct lltable *llt;
@@ -297,7 +295,7 @@ lla_rt_output(struct rt_msghdr *rtm, struct rt_addrinfo *info)
if (rtm->rtm_flags & RTF_ANNOUNCE) {
flags |= LLE_PUB;
#ifdef INET
- if (dst->sa_family == AF_INET &&
+ if (dst->sa_family == AF_INET &&
((struct sockaddr_inarp *)dst)->sin_other != 0) {
struct rtentry *rt;
((struct sockaddr_inarp *)dst)->sin_other = 0;
@@ -342,7 +340,7 @@ lla_rt_output(struct rt_msghdr *rtm, struct rt_addrinfo *info)
if (flags & LLE_CREATE)
flags |= LLE_EXCLUSIVE;
-
+
IF_AFDATA_LOCK(ifp);
lle = lla_lookup(llt, flags, dst);
IF_AFDATA_UNLOCK(ifp);
@@ -378,7 +376,7 @@ lla_rt_output(struct rt_msghdr *rtm, struct rt_addrinfo *info)
#ifdef INET
/* gratuitous ARP */
if ((laflags & LLE_PUB) && dst->sa_family == AF_INET) {
- arprequest(ifp,
+ arprequest(ifp,
&((struct sockaddr_in *)dst)->sin_addr,
&((struct sockaddr_in *)dst)->sin_addr,
((laflags & LLE_PROXY) ?
@@ -451,7 +449,7 @@ llatbl_lle_show(struct llentry_sa *la)
sin = (struct sockaddr_in *)&la->l3_addr;
inet_ntoa_r(sin->sin_addr, l3s);
- db_printf(" l3_addr=%s\n", l3s);
+ db_printf(" l3_addr=%s\n", l3s);
break;
}
#endif
@@ -463,7 +461,7 @@ llatbl_lle_show(struct llentry_sa *la)
sin6 = (struct sockaddr_in6 *)&la->l3_addr;
ip6_sprintf(l3s, &sin6->sin6_addr);
- db_printf(" l3_addr=%s\n", l3s);
+ db_printf(" l3_addr=%s\n", l3s);
break;
}
#endif
diff --git a/sys/net/if_llatbl.h b/sys/net/if_llatbl.h
index e90b29c..8da08ba 100644
--- a/sys/net/if_llatbl.h
+++ b/sys/net/if_llatbl.h
@@ -61,17 +61,17 @@ struct llentry {
struct llentries *lle_head;
void (*lle_free)(struct lltable *, struct llentry *);
struct mbuf *la_hold;
- int la_numheld; /* # of packets currently held */
+ int la_numheld; /* # of packets currently held */
time_t la_expire;
- uint16_t la_flags;
+ uint16_t la_flags;
uint16_t la_asked;
uint16_t la_preempt;
uint16_t ln_byhint;
int16_t ln_state; /* IPv6 has ND6_LLINFO_NOSTATE == -2 */
- uint16_t ln_router;
+ uint16_t ln_router;
time_t ln_ntick;
int lle_refcnt;
-
+
union {
uint64_t mac_aligned;
uint16_t mac16[3];
@@ -103,25 +103,28 @@ struct llentry {
#define LLE_ADDREF(lle) do { \
LLE_WLOCK_ASSERT(lle); \
KASSERT((lle)->lle_refcnt >= 0, \
- ("negative refcnt %d", (lle)->lle_refcnt)); \
+ ("negative refcnt %d on lle %p", \
+ (lle)->lle_refcnt, (lle))); \
(lle)->lle_refcnt++; \
} while (0)
+
#define LLE_REMREF(lle) do { \
LLE_WLOCK_ASSERT(lle); \
- KASSERT((lle)->lle_refcnt > 1, \
- ("bogus refcnt %d", (lle)->lle_refcnt)); \
+ KASSERT((lle)->lle_refcnt > 0, \
+ ("bogus refcnt %d on lle %p", \
+ (lle)->lle_refcnt, (lle))); \
(lle)->lle_refcnt--; \
} while (0)
#define LLE_FREE_LOCKED(lle) do { \
- if ((lle)->lle_refcnt <= 1) \
- (lle)->lle_free((lle)->lle_tbl, (lle));\
+ if ((lle)->lle_refcnt == 1) \
+ (lle)->lle_free((lle)->lle_tbl, (lle)); \
else { \
- (lle)->lle_refcnt--; \
+ LLE_REMREF(lle); \
LLE_WUNLOCK(lle); \
} \
/* guard against invalid refs */ \
- lle = NULL; \
+ (lle) = NULL; \
} while (0)
#define LLE_FREE(lle) do { \
@@ -158,7 +161,7 @@ struct lltable {
struct llentry * (*llt_lookup)(struct lltable *, u_int flags,
const struct sockaddr *l3addr);
int (*llt_dump)(struct lltable *,
- struct sysctl_req *);
+ struct sysctl_req *);
};
MALLOC_DECLARE(M_LLTABLE);
@@ -171,25 +174,26 @@ MALLOC_DECLARE(M_LLTABLE);
#define LLE_VALID 0x0008 /* ll_addr is valid */
#define LLE_PROXY 0x0010 /* proxy entry ??? */
#define LLE_PUB 0x0020 /* publish entry ??? */
+#define LLE_LINKED 0x0040 /* linked to lookup structure */
+#define LLE_EXCLUSIVE 0x2000 /* return lle xlocked */
#define LLE_DELETE 0x4000 /* delete on a lookup - match LLE_IFADDR */
#define LLE_CREATE 0x8000 /* create on a lookup miss */
-#define LLE_EXCLUSIVE 0x2000 /* return lle xlocked */
#define LLATBL_HASH(key, mask) \
(((((((key >> 8) ^ key) >> 8) ^ key) >> 8) ^ key) & mask)
struct lltable *lltable_init(struct ifnet *, int);
void lltable_free(struct lltable *);
-void lltable_prefix_free(int, struct sockaddr *,
- struct sockaddr *, u_int);
+void lltable_prefix_free(int, struct sockaddr *,
+ struct sockaddr *, u_int);
#if 0
void lltable_drain(int);
#endif
int lltable_sysctl_dumparp(int, struct sysctl_req *);
size_t llentry_free(struct llentry *);
-int llentry_update(struct llentry **, struct lltable *,
- struct sockaddr_storage *, struct ifnet *);
+struct llentry *llentry_alloc(struct ifnet *, struct lltable *,
+ struct sockaddr_storage *);
/*
* Generic link layer address lookup function.
diff --git a/sys/net/if_loop.c b/sys/net/if_loop.c
index 8d371eb..2850b38 100644
--- a/sys/net/if_loop.c
+++ b/sys/net/if_loop.c
@@ -257,10 +257,20 @@ looutput(struct ifnet *ifp, struct mbuf *m, struct sockaddr *dst,
m->m_pkthdr.csum_flags &= ~LO_CSUM_FEATURES;
break;
case AF_INET6:
+#if 0
+ /*
+ * XXX-BZ for now always claim the checksum is good despite
+ * any interface flags. This is a workaround for 9.1-R and
+ * a proper solution ought to be sought later.
+ */
if (ifp->if_capenable & IFCAP_RXCSUM_IPV6) {
m->m_pkthdr.csum_data = 0xffff;
m->m_pkthdr.csum_flags = LO_CSUM_SET;
}
+#else
+ m->m_pkthdr.csum_data = 0xffff;
+ m->m_pkthdr.csum_flags = LO_CSUM_SET;
+#endif
m->m_pkthdr.csum_flags &= ~LO_CSUM_FEATURES6;
break;
case AF_IPX:
@@ -446,15 +456,29 @@ loioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
ifp->if_capenable ^= IFCAP_RXCSUM;
if ((mask & IFCAP_TXCSUM) != 0)
ifp->if_capenable ^= IFCAP_TXCSUM;
- if ((mask & IFCAP_RXCSUM_IPV6) != 0)
+ if ((mask & IFCAP_RXCSUM_IPV6) != 0) {
+#if 0
ifp->if_capenable ^= IFCAP_RXCSUM_IPV6;
- if ((mask & IFCAP_TXCSUM_IPV6) != 0)
+#else
+ error = EOPNOTSUPP;
+ break;
+#endif
+ }
+ if ((mask & IFCAP_TXCSUM_IPV6) != 0) {
+#if 0
ifp->if_capenable ^= IFCAP_TXCSUM_IPV6;
+#else
+ error = EOPNOTSUPP;
+ break;
+#endif
+ }
ifp->if_hwassist = 0;
if (ifp->if_capenable & IFCAP_TXCSUM)
ifp->if_hwassist = LO_CSUM_FEATURES;
+#if 0
if (ifp->if_capenable & IFCAP_TXCSUM_IPV6)
ifp->if_hwassist |= LO_CSUM_FEATURES6;
+#endif
break;
default:
diff --git a/sys/net/if_stf.c b/sys/net/if_stf.c
index fa8ee64..fc8c6fa 100644
--- a/sys/net/if_stf.c
+++ b/sys/net/if_stf.c
@@ -793,7 +793,7 @@ stf_rtrequest(cmd, rt, info)
struct rt_addrinfo *info;
{
RT_LOCK_ASSERT(rt);
- rt->rt_rmx.rmx_mtu = IPV6_MMTU;
+ rt->rt_rmx.rmx_mtu = rt->rt_ifp->if_mtu;
}
static int
@@ -806,7 +806,7 @@ stf_ioctl(ifp, cmd, data)
struct ifreq *ifr;
struct sockaddr_in6 *sin6;
struct in_addr addr;
- int error;
+ int error, mtu;
error = 0;
switch (cmd) {
@@ -840,6 +840,18 @@ stf_ioctl(ifp, cmd, data)
error = EAFNOSUPPORT;
break;
+ case SIOCGIFMTU:
+ break;
+
+ case SIOCSIFMTU:
+ ifr = (struct ifreq *)data;
+ mtu = ifr->ifr_mtu;
+ /* RFC 4213 3.2 ideal world MTU */
+ if (mtu < IPV6_MINMTU || mtu > IF_MAXMTU - 20)
+ return (EINVAL);
+ ifp->if_mtu = mtu;
+ break;
+
default:
error = EINVAL;
break;
diff --git a/sys/net/if_var.h b/sys/net/if_var.h
index 3d57953..a244359 100644
--- a/sys/net/if_var.h
+++ b/sys/net/if_var.h
@@ -415,6 +415,8 @@ EVENTHANDLER_DECLARE(group_change_event, group_change_event_handler_t);
#define IF_AFDATA_DESTROY(ifp) rw_destroy(&(ifp)->if_afdata_lock)
#define IF_AFDATA_LOCK_ASSERT(ifp) rw_assert(&(ifp)->if_afdata_lock, RA_LOCKED)
+#define IF_AFDATA_RLOCK_ASSERT(ifp) rw_assert(&(ifp)->if_afdata_lock, RA_RLOCKED)
+#define IF_AFDATA_WLOCK_ASSERT(ifp) rw_assert(&(ifp)->if_afdata_lock, RA_WLOCKED)
#define IF_AFDATA_UNLOCK_ASSERT(ifp) rw_assert(&(ifp)->if_afdata_lock, RA_UNLOCKED)
int if_handoff(struct ifqueue *ifq, struct mbuf *m, struct ifnet *ifp,
diff --git a/sys/net80211/ieee80211_hwmp.c b/sys/net80211/ieee80211_hwmp.c
index 3a7b94f..4e2508e 100644
--- a/sys/net80211/ieee80211_hwmp.c
+++ b/sys/net80211/ieee80211_hwmp.c
@@ -840,7 +840,7 @@ hwmp_rootmode_cb(void *arg)
IEEE80211_NOTE(vap, IEEE80211_MSG_HWMP, vap->iv_bss,
"%s", "send broadcast PREQ");
- preq.preq_flags = IEEE80211_MESHPREQ_FLAGS_AM;
+ preq.preq_flags = 0;
if (ms->ms_flags & IEEE80211_MESHFLAGS_GATE)
preq.preq_flags |= IEEE80211_MESHPREQ_FLAGS_GATE;
if (hs->hs_rootmode == IEEE80211_HWMP_ROOTMODE_PROACTIVE)
@@ -912,6 +912,7 @@ hwmp_recv_preq(struct ieee80211vap *vap, struct ieee80211_node *ni,
struct ieee80211_hwmp_state *hs = vap->iv_hwmp;
struct ieee80211_meshprep_ie prep;
ieee80211_hwmp_seq preqid; /* last seen preqid for orig */
+ uint32_t metric = 0;
if (ni == vap->iv_bss ||
ni->ni_mlstate != IEEE80211_NODE_MESH_ESTABLISHED)
@@ -951,7 +952,7 @@ hwmp_recv_preq(struct ieee80211vap *vap, struct ieee80211_node *ni,
hrtarg = IEEE80211_MESH_ROUTE_PRIV(rttarg,
struct ieee80211_hwmp_route);
/* Address mode: ucast */
- if((preq->preq_flags & IEEE80211_MESHPREQ_FLAGS_AM) == 0 &&
+ if(preq->preq_flags & IEEE80211_MESHPREQ_FLAGS_AM &&
rttarg == NULL &&
!IEEE80211_ADDR_EQ(vap->iv_myaddr, PREQ_TADDR(0))) {
IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_HWMP,
@@ -985,13 +986,13 @@ hwmp_recv_preq(struct ieee80211vap *vap, struct ieee80211_node *ni,
/* Data creation and update of forwarding information
* according to Table 11C-8 for originator mesh STA.
*/
+ metric = preq->preq_metric + ms->ms_pmetric->mpm_metric(ni);
if (HWMP_SEQ_GT(preq->preq_origseq, hrorig->hr_seq) ||
(HWMP_SEQ_EQ(preq->preq_origseq, hrorig->hr_seq) &&
- preq->preq_metric < rtorig->rt_metric)) {
+ metric < rtorig->rt_metric)) {
hrorig->hr_seq = preq->preq_origseq;
IEEE80211_ADDR_COPY(rtorig->rt_nexthop, wh->i_addr2);
- rtorig->rt_metric = preq->preq_metric +
- ms->ms_pmetric->mpm_metric(ni);
+ rtorig->rt_metric = metric;
rtorig->rt_nhops = preq->preq_hopcount + 1;
ieee80211_mesh_rt_update(rtorig, preq->preq_lifetime);
/* path to orig is valid now */
@@ -1029,6 +1030,8 @@ hwmp_recv_preq(struct ieee80211vap *vap, struct ieee80211_node *ni,
hs->hs_seq = HWMP_SEQ_MAX(hs->hs_seq, PREQ_TSEQ(0)) + 1;
prep.prep_flags = 0;
+ prep.prep_hopcount = 0;
+ IEEE80211_ADDR_COPY(prep.prep_targetaddr, vap->iv_myaddr);
if (rttarg != NULL && /* if NULL it means we are the target */
rttarg->rt_flags & IEEE80211_MESHRT_FLAGS_PROXY) {
IEEE80211_NOTE(vap, IEEE80211_MSG_HWMP, ni,
@@ -1038,13 +1041,13 @@ hwmp_recv_preq(struct ieee80211vap *vap, struct ieee80211_node *ni,
rttarg->rt_dest);
/* update proxy seqno to HWMP seqno */
rttarg->rt_ext_seq = hs->hs_seq;
+ prep.prep_hopcount = rttarg->rt_nhops;
+ IEEE80211_ADDR_COPY(prep.prep_targetaddr, rttarg->rt_mesh_gate);
}
/*
* Build and send a PREP frame.
*/
- prep.prep_hopcount = 0;
prep.prep_ttl = ms->ms_ttl;
- IEEE80211_ADDR_COPY(prep.prep_targetaddr, vap->iv_myaddr);
prep.prep_targetseq = hs->hs_seq;
prep.prep_lifetime = preq->preq_lifetime;
prep.prep_metric = IEEE80211_MESHLMETRIC_INITIALVAL;
@@ -1286,7 +1289,7 @@ hwmp_recv_prep(struct ieee80211vap *vap, struct ieee80211_node *ni,
IEEE80211_NOTE(vap, IEEE80211_MSG_HWMP, ni,
"discard PREP from %6D, new metric %u > %u",
prep->prep_targetaddr, ":",
- prep->prep_metric, rt->rt_metric);
+ metric, rt->rt_metric);
return;
}
}
@@ -1296,7 +1299,7 @@ hwmp_recv_prep(struct ieee80211vap *vap, struct ieee80211_node *ni,
rt->rt_flags & IEEE80211_MESHRT_FLAGS_VALID ?
"prefer" : "update",
prep->prep_targetaddr, ":",
- rt->rt_nhops, prep->prep_hopcount,
+ rt->rt_nhops, prep->prep_hopcount + 1,
rt->rt_metric, metric);
hr->hr_seq = prep->prep_targetseq;
@@ -1368,7 +1371,7 @@ hwmp_recv_prep(struct ieee80211vap *vap, struct ieee80211_node *ni,
rtext->rt_flags & IEEE80211_MESHRT_FLAGS_VALID ?
"prefer" : "update",
prep->prep_target_ext_addr, ":",
- rtext->rt_nhops, prep->prep_hopcount,
+ rtext->rt_nhops, prep->prep_hopcount + 1,
rtext->rt_metric, metric);
rtext->rt_flags = IEEE80211_MESHRT_FLAGS_PROXY |
diff --git a/sys/netgraph/ng_ether.c b/sys/netgraph/ng_ether.c
index 15e8b2d..ed928fe 100644
--- a/sys/netgraph/ng_ether.c
+++ b/sys/netgraph/ng_ether.c
@@ -71,6 +71,8 @@
#include <netgraph/ng_parse.h>
#include <netgraph/ng_ether.h>
+MODULE_VERSION(ng_ether, 1);
+
#define IFP2NG(ifp) (IFP2AC((ifp))->ac_netgraph)
/* Per-node private data */
diff --git a/sys/netgraph/ng_pptpgre.c b/sys/netgraph/ng_pptpgre.c
index a640b6e..f48b80c 100644
--- a/sys/netgraph/ng_pptpgre.c
+++ b/sys/netgraph/ng_pptpgre.c
@@ -562,7 +562,7 @@ ng_pptpgre_xmit(hpriv_p hpriv, item_p item)
}
/* Sanity check frame length */
- if (m != NULL && m->m_pkthdr.len > PPTP_MAX_PAYLOAD) {
+ if (m->m_pkthdr.len > PPTP_MAX_PAYLOAD) {
priv->stats.xmitTooBig++;
ERROUT(EMSGSIZE);
}
diff --git a/sys/netinet/if_ether.c b/sys/netinet/if_ether.c
index d6a7fd1..8e2daeb 100644
--- a/sys/netinet/if_ether.c
+++ b/sys/netinet/if_ether.c
@@ -87,8 +87,8 @@ static VNET_DEFINE(int, arp_maxtries) = 5;
VNET_DEFINE(int, useloopback) = 1; /* use loopback interface for
* local traffic */
static VNET_DEFINE(int, arp_proxyall) = 0;
-static VNET_DEFINE(int, arpt_down) = 20; /* keep incomplete entries for
- * 20 seconds */
+static VNET_DEFINE(int, arpt_down) = 20; /* keep incomplete entries for
+ * 20 seconds */
VNET_DEFINE(struct arpstat, arpstat); /* ARP statistics, see if_arp.h */
static VNET_DEFINE(int, arp_maxhold) = 1;
@@ -119,7 +119,7 @@ SYSCTL_VNET_STRUCT(_net_link_ether_arp, OID_AUTO, stats, CTLFLAG_RW,
&VNET_NAME(arpstat), arpstat,
"ARP statistics (struct arpstat, net/if_arp.h)");
SYSCTL_VNET_INT(_net_link_ether_inet, OID_AUTO, maxhold, CTLFLAG_RW,
- &VNET_NAME(arp_maxhold), 0,
+ &VNET_NAME(arp_maxhold), 0,
"Number of packets to hold per ARP entry");
static void arp_init(void);
@@ -163,49 +163,40 @@ arp_ifscrub(struct ifnet *ifp, uint32_t addr)
static void
arptimer(void *arg)
{
+ struct llentry *lle = (struct llentry *)arg;
struct ifnet *ifp;
- struct llentry *lle;
- int pkts_dropped;
+ size_t pkts_dropped;
+
+ if (lle->la_flags & LLE_STATIC) {
+ LLE_WUNLOCK(lle);
+ return;
+ }
- KASSERT(arg != NULL, ("%s: arg NULL", __func__));
- lle = (struct llentry *)arg;
ifp = lle->lle_tbl->llt_ifp;
CURVNET_SET(ifp->if_vnet);
+
+ if (lle->la_flags != LLE_DELETED) {
+ int evt;
+
+ if (lle->la_flags & LLE_VALID)
+ evt = LLENTRY_EXPIRED;
+ else
+ evt = LLENTRY_TIMEDOUT;
+ EVENTHANDLER_INVOKE(lle_event, lle, evt);
+ }
+
+ callout_stop(&lle->la_timer);
+
+ /* XXX: LOR avoidance. We still have ref on lle. */
+ LLE_WUNLOCK(lle);
IF_AFDATA_LOCK(ifp);
LLE_WLOCK(lle);
- if (lle->la_flags & LLE_STATIC)
- LLE_WUNLOCK(lle);
- else {
- if (!callout_pending(&lle->la_timer) &&
- callout_active(&lle->la_timer)) {
- callout_stop(&lle->la_timer);
- LLE_REMREF(lle);
-
- if (lle->la_flags != LLE_DELETED) {
- int evt;
-
- if (lle->la_flags & LLE_VALID)
- evt = LLENTRY_EXPIRED;
- else
- evt = LLENTRY_TIMEDOUT;
- EVENTHANDLER_INVOKE(lle_event, lle, evt);
- }
- pkts_dropped = llentry_free(lle);
- ARPSTAT_ADD(dropped, pkts_dropped);
- ARPSTAT_INC(timeouts);
- } else {
-#ifdef DIAGNOSTIC
- struct sockaddr *l3addr = L3_ADDR(lle);
- log(LOG_INFO,
- "arptimer issue: %p, IPv4 address: \"%s\"\n", lle,
- inet_ntoa(
- ((const struct sockaddr_in *)l3addr)->sin_addr));
-#endif
- LLE_WUNLOCK(lle);
- }
- }
+ LLE_REMREF(lle);
+ pkts_dropped = llentry_free(lle);
IF_AFDATA_UNLOCK(ifp);
+ ARPSTAT_ADD(dropped, pkts_dropped);
+ ARPSTAT_INC(timeouts);
CURVNET_RESTORE();
}
@@ -250,7 +241,7 @@ arprequest(struct ifnet *ifp, struct in_addr *sip, struct in_addr *tip,
break; /* found it. */
}
IF_ADDR_RUNLOCK(ifp);
- if (sip == NULL) {
+ if (sip == NULL) {
printf("%s: cannot find matching address\n", __func__);
return;
}
@@ -322,15 +313,15 @@ arpresolve(struct ifnet *ifp, struct rtentry *rt0, struct mbuf *m,
}
}
retry:
- IF_AFDATA_RLOCK(ifp);
+ IF_AFDATA_RLOCK(ifp);
la = lla_lookup(LLTABLE(ifp), flags, dst);
- IF_AFDATA_RUNLOCK(ifp);
+ IF_AFDATA_RUNLOCK(ifp);
if ((la == NULL) && ((flags & LLE_EXCLUSIVE) == 0)
- && ((ifp->if_flags & (IFF_NOARP | IFF_STATICARP)) == 0)) {
+ && ((ifp->if_flags & (IFF_NOARP | IFF_STATICARP)) == 0)) {
flags |= (LLE_CREATE | LLE_EXCLUSIVE);
- IF_AFDATA_WLOCK(ifp);
+ IF_AFDATA_WLOCK(ifp);
la = lla_lookup(LLTABLE(ifp), flags, dst);
- IF_AFDATA_WUNLOCK(ifp);
+ IF_AFDATA_WUNLOCK(ifp);
}
if (la == NULL) {
if (flags & LLE_CREATE)
@@ -339,7 +330,7 @@ retry:
inet_ntoa(SIN(dst)->sin_addr));
m_freem(m);
return (EINVAL);
- }
+ }
if ((la->la_flags & LLE_VALID) &&
((la->la_flags & LLE_STATIC) || la->la_expire > time_uptime)) {
@@ -354,12 +345,12 @@ retry:
arprequest(ifp, NULL, &SIN(dst)->sin_addr, NULL);
la->la_preempt--;
}
-
+
*lle = la;
error = 0;
goto done;
- }
-
+ }
+
if (la->la_flags & LLE_STATIC) { /* should not happen! */
log(LOG_DEBUG, "arpresolve: ouch, empty static llinfo for %s\n",
inet_ntoa(SIN(dst)->sin_addr));
@@ -389,20 +380,20 @@ retry:
la->la_numheld--;
ARPSTAT_INC(dropped);
}
- }
+ }
if (la->la_hold != NULL) {
curr = la->la_hold;
while (curr->m_nextpkt != NULL)
curr = curr->m_nextpkt;
curr->m_nextpkt = m;
- } else
+ } else
la->la_hold = m;
la->la_numheld++;
if (renew == 0 && (flags & LLE_EXCLUSIVE)) {
flags &= ~LLE_EXCLUSIVE;
LLE_DOWNGRADE(la);
}
-
+
}
/*
* Return EWOULDBLOCK if we have tried less than arp_maxtries. It
@@ -510,11 +501,11 @@ SYSCTL_INT(_net_link_ether_inet, OID_AUTO, log_arp_wrong_iface, CTLFLAG_RW,
&log_arp_wrong_iface, 0,
"log arp packets arriving on the wrong interface");
SYSCTL_INT(_net_link_ether_inet, OID_AUTO, log_arp_movements, CTLFLAG_RW,
- &log_arp_movements, 0,
- "log arp replies from MACs different than the one in the cache");
+ &log_arp_movements, 0,
+ "log arp replies from MACs different than the one in the cache");
SYSCTL_INT(_net_link_ether_inet, OID_AUTO, log_arp_permanent_modify, CTLFLAG_RW,
- &log_arp_permanent_modify, 0,
- "log arp replies from MACs different than the one in the permanent arp entry");
+ &log_arp_permanent_modify, 0,
+ "log arp replies from MACs different than the one in the permanent arp entry");
static void
@@ -550,7 +541,7 @@ in_arpinput(struct mbuf *m)
}
ah = mtod(m, struct arphdr *);
- /*
+ /*
* ARP is only for IPv4 so we can reject packets with
* a protocol length not equal to an IPv4 address.
*/
@@ -686,7 +677,7 @@ match:
sin.sin_addr = isaddr;
flags = (itaddr.s_addr == myaddr.s_addr) ? LLE_CREATE : 0;
flags |= LLE_EXCLUSIVE;
- IF_AFDATA_LOCK(ifp);
+ IF_AFDATA_LOCK(ifp);
la = lla_lookup(LLTABLE(ifp), flags, (struct sockaddr *)&sin);
IF_AFDATA_UNLOCK(ifp);
if (la != NULL) {
@@ -716,7 +707,7 @@ match:
goto reply;
}
if (log_arp_movements) {
- log(LOG_INFO, "arp: %s moved from %*D "
+ log(LOG_INFO, "arp: %s moved from %*D "
"to %*D on %s\n",
inet_ntoa(isaddr),
ifp->if_addrlen,
@@ -725,7 +716,7 @@ match:
ifp->if_xname);
}
}
-
+
if (ifp->if_addrlen != ah->ar_hln) {
LLE_WUNLOCK(la);
log(LOG_WARNING, "arp from %*D: addr len: new %d, "
@@ -751,7 +742,7 @@ match:
}
la->la_asked = 0;
la->la_preempt = V_arp_maxtries;
- /*
+ /*
* The packets are all freed within the call to the output
* routine.
*
@@ -787,7 +778,7 @@ reply:
struct llentry *lle = NULL;
sin.sin_addr = itaddr;
- IF_AFDATA_LOCK(ifp);
+ IF_AFDATA_LOCK(ifp);
lle = lla_lookup(LLTABLE(ifp), 0, (struct sockaddr *)&sin);
IF_AFDATA_UNLOCK(ifp);
@@ -802,7 +793,7 @@ reply:
if (!V_arp_proxyall)
goto drop;
-
+
sin.sin_addr = itaddr;
/* XXX MRT use table 0 for arp reply */
rt = in_rtalloc1((struct sockaddr *)&sin, 0, 0UL, 0);
@@ -830,7 +821,7 @@ reply:
* wrong network.
*/
sin.sin_addr = isaddr;
-
+
/* XXX MRT use table 0 for arp checks */
rt = in_rtalloc1((struct sockaddr *)&sin, 0, 0UL, 0);
if (!rt)
@@ -846,8 +837,7 @@ reply:
RTFREE_LOCKED(rt);
#ifdef DEBUG_PROXY
- printf("arp: proxying for %s\n",
- inet_ntoa(itaddr));
+ printf("arp: proxying for %s\n", inet_ntoa(itaddr));
#endif
}
}
@@ -869,8 +859,8 @@ reply:
(void)memcpy(ar_spa(ah), &itaddr, ah->ar_pln);
ah->ar_op = htons(ARPOP_REPLY);
ah->ar_pro = htons(ETHERTYPE_IP); /* let's be sure! */
- m->m_len = sizeof(*ah) + (2 * ah->ar_pln) + (2 * ah->ar_hln);
- m->m_pkthdr.len = m->m_len;
+ m->m_len = sizeof(*ah) + (2 * ah->ar_pln) + (2 * ah->ar_hln);
+ m->m_pkthdr.len = m->m_len;
m->m_pkthdr.rcvif = NULL;
sa.sa_family = AF_ARP;
sa.sa_len = 2;
@@ -894,7 +884,7 @@ arp_ifinit(struct ifnet *ifp, struct ifaddr *ifa)
if (ntohl(IA_SIN(ifa)->sin_addr.s_addr) != INADDR_ANY) {
arprequest(ifp, &IA_SIN(ifa)->sin_addr,
&IA_SIN(ifa)->sin_addr, IF_LLADDR(ifp));
- /*
+ /*
* interface address is considered static entry
* because the output of the arp utility shows
* that L2 entry as permanent
diff --git a/sys/netinet/in.c b/sys/netinet/in.c
index 1beddd6..69f40b9 100644
--- a/sys/netinet/in.c
+++ b/sys/netinet/in.c
@@ -489,20 +489,20 @@ in_control(struct socket *so, u_long cmd, caddr_t data, struct ifnet *ifp,
ia->ia_addr.sin_addr.s_addr)
hostIsNew = 0;
if (ifra->ifra_mask.sin_len) {
- /*
+ /*
* QL: XXX
* Need to scrub the prefix here in case
* the issued command is SIOCAIFADDR with
* the same address, but with a different
* prefix length. And if the prefix length
- * is the same as before, then the call is
+ * is the same as before, then the call is
* un-necessarily executed here.
*/
in_ifscrub(ifp, ia, LLE_STATIC);
ia->ia_sockmask = ifra->ifra_mask;
ia->ia_sockmask.sin_family = AF_INET;
ia->ia_subnetmask =
- ntohl(ia->ia_sockmask.sin_addr.s_addr);
+ ntohl(ia->ia_sockmask.sin_addr.s_addr);
maskIsNew = 1;
}
if ((ifp->if_flags & IFF_POINTOPOINT) &&
@@ -886,8 +886,8 @@ in_ifinit(struct ifnet *ifp, struct in_ifaddr *ia, struct sockaddr_in *sin,
RT_ADDREF(ia_ro.ro_rt);
RTFREE_LOCKED(ia_ro.ro_rt);
} else
- error = ifa_add_loopback_route((struct ifaddr *)ia,
- (struct sockaddr *)&ia->ia_addr);
+ error = ifa_add_loopback_route((struct ifaddr *)ia,
+ (struct sockaddr *)&ia->ia_addr);
if (error == 0)
ia->ia_flags |= IFA_RTSELF;
if (ia_ro.ro_rt != NULL)
@@ -902,10 +902,10 @@ in_ifinit(struct ifnet *ifp, struct in_ifaddr *ia, struct sockaddr_in *sin,
? RTF_HOST : 0)
/*
- * Generate a routing message when inserting or deleting
+ * Generate a routing message when inserting or deleting
* an interface address alias.
*/
-static void in_addralias_rtmsg(int cmd, struct in_addr *prefix,
+static void in_addralias_rtmsg(int cmd, struct in_addr *prefix,
struct in_ifaddr *target)
{
struct route pfx_ro;
@@ -928,16 +928,13 @@ static void in_addralias_rtmsg(int cmd, struct in_addr *prefix,
/* QL: XXX
* Point the gateway to the new interface
- * address as if a new prefix route entry has
- * been added through the new address alias.
- * All other parts of the rtentry is accurate,
+ * address as if a new prefix route entry has
+ * been added through the new address alias.
+ * All other parts of the rtentry is accurate,
* e.g., rt_key, rt_mask, rt_ifp etc.
*/
- msg_rt.rt_gateway =
- (struct sockaddr *)&target->ia_addr;
- rt_newaddrmsg(cmd,
- (struct ifaddr *)target,
- 0, &msg_rt);
+ msg_rt.rt_gateway = (struct sockaddr *)&target->ia_addr;
+ rt_newaddrmsg(cmd, (struct ifaddr *)target, 0, &msg_rt);
RTFREE(pfx_ro.ro_rt);
}
return;
@@ -985,7 +982,7 @@ in_addprefix(struct in_ifaddr *target, int flags)
*/
if (ia->ia_flags & IFA_ROUTE) {
#ifdef RADIX_MPATH
- if (ia->ia_addr.sin_addr.s_addr ==
+ if (ia->ia_addr.sin_addr.s_addr ==
target->ia_addr.sin_addr.s_addr) {
IN_IFADDR_RUNLOCK();
return (EEXIST);
@@ -1058,7 +1055,7 @@ in_scrubprefix(struct in_ifaddr *target, u_int flags)
}
if (freeit && (flags & LLE_STATIC)) {
error = ifa_del_loopback_route((struct ifaddr *)target,
- (struct sockaddr *)&target->ia_addr);
+ (struct sockaddr *)&target->ia_addr);
if (error == 0)
target->ia_flags &= ~IFA_RTSELF;
}
@@ -1141,8 +1138,8 @@ in_scrubprefix(struct in_ifaddr *target, u_int flags)
mask0.sin_len = sizeof(mask0);
mask0.sin_family = AF_INET;
mask0.sin_addr.s_addr = target->ia_subnetmask;
- lltable_prefix_free(AF_INET, (struct sockaddr *)&prefix0,
- (struct sockaddr *)&mask0, flags);
+ lltable_prefix_free(AF_INET, (struct sockaddr *)&prefix0,
+ (struct sockaddr *)&mask0, flags);
/*
* As no-one seem to have this prefix, we can remove the route.
@@ -1184,14 +1181,14 @@ in_broadcast(struct in_addr in, struct ifnet *ifp)
* Check for old-style (host 0) broadcast, but
* taking into account that RFC 3021 obsoletes it.
*/
- (ia->ia_subnetmask != IN_RFC3021_MASK &&
- t == ia->ia_subnet)) &&
+ (ia->ia_subnetmask != IN_RFC3021_MASK &&
+ t == ia->ia_subnet)) &&
/*
* Check for an all one subnetmask. These
* only exist when an interface gets a secondary
* address.
*/
- ia->ia_subnetmask != (u_long)0xffffffff)
+ ia->ia_subnetmask != (u_long)0xffffffff)
return (1);
return (0);
#undef ia
@@ -1283,7 +1280,6 @@ in_lltable_new(const struct sockaddr *l3addr, u_int flags)
if (lle == NULL) /* NB: caller generates msg */
return NULL;
- callout_init(&lle->base.la_timer, CALLOUT_MPSAFE);
/*
* For IPv4 this will trigger "arpresolve" to generate
* an ARP request.
@@ -1293,45 +1289,44 @@ in_lltable_new(const struct sockaddr *l3addr, u_int flags)
lle->base.lle_refcnt = 1;
lle->base.lle_free = in_lltable_free;
LLE_LOCK_INIT(&lle->base);
- return &lle->base;
+ callout_init_rw(&lle->base.la_timer, &lle->base.lle_lock,
+ CALLOUT_RETURNUNLOCKED);
+
+ return (&lle->base);
}
#define IN_ARE_MASKED_ADDR_EQUAL(d, a, m) ( \
(((ntohl((d)->sin_addr.s_addr) ^ (a)->sin_addr.s_addr) & (m)->sin_addr.s_addr)) == 0 )
static void
-in_lltable_prefix_free(struct lltable *llt,
- const struct sockaddr *prefix,
- const struct sockaddr *mask,
- u_int flags)
+in_lltable_prefix_free(struct lltable *llt, const struct sockaddr *prefix,
+ const struct sockaddr *mask, u_int flags)
{
const struct sockaddr_in *pfx = (const struct sockaddr_in *)prefix;
const struct sockaddr_in *msk = (const struct sockaddr_in *)mask;
struct llentry *lle, *next;
- register int i;
+ int i;
size_t pkts_dropped;
- for (i=0; i < LLTBL_HASHTBL_SIZE; i++) {
+ IF_AFDATA_WLOCK(llt->llt_ifp);
+ for (i = 0; i < LLTBL_HASHTBL_SIZE; i++) {
LIST_FOREACH_SAFE(lle, &llt->lle_head[i], lle_next, next) {
-
- /*
+ /*
* (flags & LLE_STATIC) means deleting all entries
- * including static ARP entries
+ * including static ARP entries.
*/
- if (IN_ARE_MASKED_ADDR_EQUAL((struct sockaddr_in *)L3_ADDR(lle),
- pfx, msk) &&
- ((flags & LLE_STATIC) || !(lle->la_flags & LLE_STATIC))) {
- int canceled;
-
- canceled = callout_drain(&lle->la_timer);
+ if (IN_ARE_MASKED_ADDR_EQUAL(satosin(L3_ADDR(lle)),
+ pfx, msk) && ((flags & LLE_STATIC) ||
+ !(lle->la_flags & LLE_STATIC))) {
LLE_WLOCK(lle);
- if (canceled)
+ if (callout_stop(&lle->la_timer))
LLE_REMREF(lle);
pkts_dropped = llentry_free(lle);
ARPSTAT_ADD(dropped, pkts_dropped);
}
}
}
+ IF_AFDATA_WUNLOCK(llt->llt_ifp);
}
@@ -1357,19 +1352,18 @@ in_lltable_rtcheck(struct ifnet *ifp, u_int flags, const struct sockaddr *l3addr
*/
if (rt->rt_flags & RTF_GATEWAY) {
if (!(rt->rt_flags & RTF_HOST) || !rt->rt_ifp ||
- rt->rt_ifp->if_type != IFT_ETHER ||
- (rt->rt_ifp->if_flags &
- (IFF_NOARP | IFF_STATICARP)) != 0 ||
- memcmp(rt->rt_gateway->sa_data, l3addr->sa_data,
- sizeof(in_addr_t)) != 0) {
+ rt->rt_ifp->if_type != IFT_ETHER ||
+ (rt->rt_ifp->if_flags & (IFF_NOARP | IFF_STATICARP)) != 0 ||
+ memcmp(rt->rt_gateway->sa_data, l3addr->sa_data,
+ sizeof(in_addr_t)) != 0) {
RTFREE_LOCKED(rt);
return (EINVAL);
}
}
/*
- * Make sure that at least the destination address is covered
- * by the route. This is for handling the case where 2 or more
+ * Make sure that at least the destination address is covered
+ * by the route. This is for handling the case where 2 or more
* interfaces have the same prefix. An incoming packet arrives
* on one interface and the corresponding outgoing packet leaves
* another interface.
@@ -1429,7 +1423,7 @@ in_lltable_lookup(struct lltable *llt, u_int flags, const struct sockaddr *l3add
hashkey = sin->sin_addr.s_addr;
lleh = &llt->lle_head[LLATBL_HASH(hashkey, LLTBL_HASHMASK)];
LIST_FOREACH(lle, lleh, lle_next) {
- struct sockaddr_in *sa2 = (struct sockaddr_in *)L3_ADDR(lle);
+ struct sockaddr_in *sa2 = satosin(L3_ADDR(lle));
if (lle->la_flags & LLE_DELETED)
continue;
if (sa2->sin_addr.s_addr == sin->sin_addr.s_addr)
@@ -1438,7 +1432,7 @@ in_lltable_lookup(struct lltable *llt, u_int flags, const struct sockaddr *l3add
if (lle == NULL) {
#ifdef DIAGNOSTIC
if (flags & LLE_DELETE)
- log(LOG_INFO, "interface address is missing from cache = %p in delete\n", lle);
+ log(LOG_INFO, "interface address is missing from cache = %p in delete\n", lle);
#endif
if (!(flags & LLE_CREATE))
return (NULL);
@@ -1464,19 +1458,20 @@ in_lltable_lookup(struct lltable *llt, u_int flags, const struct sockaddr *l3add
lle->lle_tbl = llt;
lle->lle_head = lleh;
+ lle->la_flags |= LLE_LINKED;
LIST_INSERT_HEAD(lleh, lle, lle_next);
} else if (flags & LLE_DELETE) {
if (!(lle->la_flags & LLE_IFADDR) || (flags & LLE_IFADDR)) {
LLE_WLOCK(lle);
- lle->la_flags = LLE_DELETED;
+ lle->la_flags |= LLE_DELETED;
EVENTHANDLER_INVOKE(lle_event, lle, LLENTRY_DELETED);
LLE_WUNLOCK(lle);
#ifdef DIAGNOSTIC
- log(LOG_INFO, "ifaddr cache = %p is deleted\n", lle);
+ log(LOG_INFO, "ifaddr cache = %p is deleted\n", lle);
#endif
}
lle = (void *)-1;
-
+
}
if (LLE_IS_VALID(lle)) {
if (flags & LLE_EXCLUSIVE)
@@ -1508,7 +1503,7 @@ in_lltable_dump(struct lltable *llt, struct sysctl_req *wr)
for (i = 0; i < LLTBL_HASHTBL_SIZE; i++) {
LIST_FOREACH(lle, &llt->lle_head[i], lle_next) {
struct sockaddr_dl *sdl;
-
+
/* skip deleted entries */
if ((lle->la_flags & LLE_DELETED) == LLE_DELETED)
continue;
diff --git a/sys/netinet/in_cksum.c b/sys/netinet/in_cksum.c
index 8fe05d9..2ae3573 100644
--- a/sys/netinet/in_cksum.c
+++ b/sys/netinet/in_cksum.c
@@ -88,7 +88,7 @@ in_cksum(struct mbuf *m, int len)
/*
* Force to even boundary.
*/
- if ((1 & (int) w) && (mlen > 0)) {
+ if ((1 & (uintptr_t) w) && (mlen > 0)) {
REDUCE;
sum <<= 8;
s_util.c[0] = *(u_char *)w;
diff --git a/sys/netinet/in_var.h b/sys/netinet/in_var.h
index 26803d9..976b3f7 100644
--- a/sys/netinet/in_var.h
+++ b/sys/netinet/in_var.h
@@ -161,14 +161,16 @@ do { \
#define IFP_TO_IA(ifp, ia) \
/* struct ifnet *ifp; */ \
/* struct in_ifaddr *ia; */ \
-{ \
+do { \
+ IN_IFADDR_RLOCK(); \
for ((ia) = TAILQ_FIRST(&V_in_ifaddrhead); \
(ia) != NULL && (ia)->ia_ifp != (ifp); \
(ia) = TAILQ_NEXT((ia), ia_link)) \
continue; \
if ((ia) != NULL) \
ifa_ref(&(ia)->ia_ifa); \
-}
+ IN_IFADDR_RUNLOCK(); \
+} while (0)
#endif
/*
diff --git a/sys/netinet/ip_carp.c b/sys/netinet/ip_carp.c
index c5e2758..bc1cc30 100644
--- a/sys/netinet/ip_carp.c
+++ b/sys/netinet/ip_carp.c
@@ -1027,23 +1027,31 @@ carp_send_na(struct carp_softc *sc)
}
}
+/*
+ * Returns ifa in case it's a carp address and it is MASTER, or if the address
+ * matches and is not a carp address. Returns NULL otherwise.
+ */
struct ifaddr *
carp_iamatch6(struct ifnet *ifp, struct in6_addr *taddr)
{
struct ifaddr *ifa;
+ ifa = NULL;
IF_ADDR_RLOCK(ifp);
- IFNET_FOREACH_IFA(ifp, ifa)
- if (ifa->ifa_addr->sa_family == AF_INET6 &&
- ifa->ifa_carp->sc_state == MASTER &&
- IN6_ARE_ADDR_EQUAL(taddr, IFA_IN6(ifa))) {
+ TAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) {
+ if (ifa->ifa_addr->sa_family != AF_INET6)
+ continue;
+ if (!IN6_ARE_ADDR_EQUAL(taddr, IFA_IN6(ifa)))
+ continue;
+ if (ifa->ifa_carp && ifa->ifa_carp->sc_state != MASTER)
+ ifa = NULL;
+ else
ifa_ref(ifa);
- IF_ADDR_RUNLOCK(ifp);
- return (ifa);
- }
+ break;
+ }
IF_ADDR_RUNLOCK(ifp);
- return (NULL);
+ return (ifa);
}
caddr_t
diff --git a/sys/netinet/ip_output.c b/sys/netinet/ip_output.c
index cc38dcf..eeea58c 100644
--- a/sys/netinet/ip_output.c
+++ b/sys/netinet/ip_output.c
@@ -124,7 +124,7 @@ ip_output(struct mbuf *m, struct mbuf *opt, struct route *ro, int flags,
int n; /* scratchpad */
int error = 0;
struct sockaddr_in *dst;
- struct in_ifaddr *ia = NULL;
+ struct in_ifaddr *ia;
int isbroadcast, sw_csum;
struct route iproute;
struct rtentry *rte; /* cache for ro->ro_rt */
@@ -198,6 +198,7 @@ ip_output(struct mbuf *m, struct mbuf *opt, struct route *ro, int flags,
dst = (struct sockaddr_in *)&ro->ro_dst;
again:
+ ia = NULL;
/*
* If there is a cached route,
* check that it is to the same destination
@@ -533,8 +534,11 @@ sendit:
#endif
error = netisr_queue(NETISR_IP, m);
goto done;
- } else
+ } else {
+ if (ia != NULL)
+ ifa_free(&ia->ia_ifa);
goto again; /* Redo the routing table lookup. */
+ }
}
#ifdef IPFIREWALL_FORWARD
@@ -564,6 +568,8 @@ sendit:
bcopy((fwd_tag+1), dst, sizeof(struct sockaddr_in));
m->m_flags |= M_SKIP_FIREWALL;
m_tag_delete(m, fwd_tag);
+ if (ia != NULL)
+ ifa_free(&ia->ia_ifa);
goto again;
}
#endif /* IPFIREWALL_FORWARD */
diff --git a/sys/netinet/ipfw/ip_dummynet.c b/sys/netinet/ipfw/ip_dummynet.c
index 928176e..e1c7a08 100644
--- a/sys/netinet/ipfw/ip_dummynet.c
+++ b/sys/netinet/ipfw/ip_dummynet.c
@@ -77,9 +77,10 @@ static struct task dn_task;
static struct taskqueue *dn_tq = NULL;
static void
-dummynet(void * __unused unused)
+dummynet(void *arg)
{
+ (void)arg; /* UNUSED */
taskqueue_enqueue(dn_tq, &dn_task);
}
@@ -1286,7 +1287,7 @@ config_fs(struct dn_fs *nfs, struct dn_id *arg, int locked)
}
if (nfs->flags & DN_HAVE_MASK) {
/* make sure we have some buckets */
- ipdn_bound_var(&nfs->buckets, dn_cfg.hash_size,
+ ipdn_bound_var((int *)&nfs->buckets, dn_cfg.hash_size,
1, dn_cfg.max_hash_size, "flowset buckets");
} else {
nfs->buckets = 1; /* we only need 1 */
@@ -1371,7 +1372,7 @@ config_sched(struct dn_sch *_nsch, struct dn_id *arg)
return EINVAL;
/* make sure we have some buckets */
if (a.sch->flags & DN_HAVE_MASK)
- ipdn_bound_var(&a.sch->buckets, dn_cfg.hash_size,
+ ipdn_bound_var((int *)&a.sch->buckets, dn_cfg.hash_size,
1, dn_cfg.max_hash_size, "sched buckets");
/* XXX other sanity checks */
bzero(&p, sizeof(p));
diff --git a/sys/netinet/ipfw/ip_fw2.c b/sys/netinet/ipfw/ip_fw2.c
index 21a00bb..7559a50 100644
--- a/sys/netinet/ipfw/ip_fw2.c
+++ b/sys/netinet/ipfw/ip_fw2.c
@@ -176,7 +176,7 @@ SYSCTL_INT(_net_inet_ip_fw, OID_AUTO, default_to_accept, CTLFLAG_RDTUN,
&default_to_accept, 0,
"Make the default rule accept all packets.");
TUNABLE_INT("net.inet.ip.fw.default_to_accept", &default_to_accept);
-TUNABLE_INT("net.inet.ip.fw.tables_max", &default_fw_tables);
+TUNABLE_INT("net.inet.ip.fw.tables_max", (int *)&default_fw_tables);
SYSCTL_VNET_INT(_net_inet_ip_fw, OID_AUTO, static_count,
CTLFLAG_RD, &VNET_NAME(layer3_chain.n_rules), 0,
"Number of static rules");
diff --git a/sys/netinet/ipfw/ip_fw_dynamic.c b/sys/netinet/ipfw/ip_fw_dynamic.c
index 7cff94f..edf7639 100644
--- a/sys/netinet/ipfw/ip_fw_dynamic.c
+++ b/sys/netinet/ipfw/ip_fw_dynamic.c
@@ -275,9 +275,9 @@ unlink_dyn_rule_print(struct ipfw_flow_id *id)
#endif
{
da.s_addr = htonl(id->src_ip);
- inet_ntoa_r(da, src);
+ inet_ntop(AF_INET, &da, src, sizeof(src));
da.s_addr = htonl(id->dst_ip);
- inet_ntoa_r(da, dst);
+ inet_ntop(AF_INET, &da, dst, sizeof(dst));
}
printf("ipfw: unlink entry %s %d -> %s %d, %d left\n",
src, id->src_port, dst, id->dst_port, V_dyn_count - 1);
@@ -656,9 +656,9 @@ add_dyn_rule(struct ipfw_flow_id *id, u_int8_t dyn_type, struct ip_fw *rule)
#endif
{
da.s_addr = htonl(r->id.src_ip);
- inet_ntoa_r(da, src);
+ inet_ntop(AF_INET, &da, src, sizeof(src));
da.s_addr = htonl(r->id.dst_ip);
- inet_ntoa_r(da, dst);
+ inet_ntop(AF_INET, &da, dst, sizeof(dst));
}
printf("ipfw: add dyn entry ty %d %s %d -> %s %d, total %d\n",
dyn_type, src, r->id.src_port, dst, r->id.dst_port,
@@ -740,9 +740,9 @@ ipfw_install_state(struct ip_fw *rule, ipfw_insn_limit *cmd,
#endif
{
da.s_addr = htonl(args->f_id.src_ip);
- inet_ntoa_r(da, src);
+ inet_ntop(AF_INET, &da, src, sizeof(src));
da.s_addr = htonl(args->f_id.dst_ip);
- inet_ntoa_r(da, dst);
+ inet_ntop(AF_INET, &da, dst, sizeof(dst));
}
printf("ipfw: %s: type %d %s %u -> %s %u\n",
__func__, cmd->o.opcode, src, args->f_id.src_port,
@@ -850,10 +850,12 @@ ipfw_install_state(struct ip_fw *rule, ipfw_insn_limit *cmd,
{
da.s_addr =
htonl(args->f_id.src_ip);
- inet_ntoa_r(da, src);
+ inet_ntop(AF_INET, &da, src,
+ sizeof(src));
da.s_addr =
htonl(args->f_id.dst_ip);
- inet_ntoa_r(da, dst);
+ inet_ntop(AF_INET, &da, dst,
+ sizeof(dst));
}
log(LOG_SECURITY | LOG_DEBUG,
"ipfw: %d %s %s:%u -> %s:%u, %s\n",
diff --git a/sys/netinet/ipfw/ip_fw_log.c b/sys/netinet/ipfw/ip_fw_log.c
index 14eb2a2..95b8a25 100644
--- a/sys/netinet/ipfw/ip_fw_log.c
+++ b/sys/netinet/ipfw/ip_fw_log.c
@@ -450,8 +450,8 @@ ipfw_log(struct ip_fw *f, u_int hlen, struct ip_fw_args *args,
tcp = L3HDR(struct tcphdr, ip);
udp = L3HDR(struct udphdr, ip);
- inet_ntoa_r(ip->ip_src, src);
- inet_ntoa_r(ip->ip_dst, dst);
+ inet_ntop(AF_INET, &ip->ip_src, src, sizeof(src));
+ inet_ntop(AF_INET, &ip->ip_dst, dst, sizeof(dst));
}
switch (args->f_id.proto) {
diff --git a/sys/netinet/sctp_asconf.c b/sys/netinet/sctp_asconf.c
index 1a1aa96..daec8f9 100644
--- a/sys/netinet/sctp_asconf.c
+++ b/sys/netinet/sctp_asconf.c
@@ -2747,13 +2747,14 @@ sctp_process_initack_addresses(struct sctp_tcb *stcb, struct mbuf *m,
struct sctp_paramhdr tmp_param, *ph;
uint16_t plen, ptype;
struct sctp_ifa *sctp_ifa;
- struct sctp_ipv6addr_param addr_store;
#ifdef INET6
+ struct sctp_ipv6addr_param addr6_store;
struct sockaddr_in6 sin6;
#endif
#ifdef INET
+ struct sctp_ipv4addr_param addr4_store;
struct sockaddr_in sin;
#endif
@@ -2802,7 +2803,7 @@ sctp_process_initack_addresses(struct sctp_tcb *stcb, struct mbuf *m,
a6p = (struct sctp_ipv6addr_param *)
sctp_m_getptr(m, offset,
sizeof(struct sctp_ipv6addr_param),
- (uint8_t *) & addr_store);
+ (uint8_t *) & addr6_store);
if (plen != sizeof(struct sctp_ipv6addr_param) ||
a6p == NULL) {
return;
@@ -2821,7 +2822,7 @@ sctp_process_initack_addresses(struct sctp_tcb *stcb, struct mbuf *m,
/* get the entire IPv4 address param */
a4p = (struct sctp_ipv4addr_param *)sctp_m_getptr(m, offset,
sizeof(struct sctp_ipv4addr_param),
- (uint8_t *) & addr_store);
+ (uint8_t *) & addr4_store);
if (plen != sizeof(struct sctp_ipv4addr_param) ||
a4p == NULL) {
return;
@@ -2899,16 +2900,17 @@ sctp_addr_in_initack(struct mbuf *m, uint32_t offset, uint32_t length, struct so
{
struct sctp_paramhdr tmp_param, *ph;
uint16_t plen, ptype;
- struct sctp_ipv6addr_param addr_store;
#ifdef INET
struct sockaddr_in *sin;
struct sctp_ipv4addr_param *a4p;
+ struct sctp_ipv6addr_param addr4_store;
#endif
#ifdef INET6
struct sockaddr_in6 *sin6;
struct sctp_ipv6addr_param *a6p;
+ struct sctp_ipv6addr_param addr6_store;
struct sockaddr_in6 sin6_tmp;
#endif
@@ -2954,7 +2956,7 @@ sctp_addr_in_initack(struct mbuf *m, uint32_t offset, uint32_t length, struct so
a6p = (struct sctp_ipv6addr_param *)
sctp_m_getptr(m, offset,
sizeof(struct sctp_ipv6addr_param),
- (uint8_t *) & addr_store);
+ (uint8_t *) & addr6_store);
if (a6p == NULL) {
return (0);
}
@@ -2984,7 +2986,7 @@ sctp_addr_in_initack(struct mbuf *m, uint32_t offset, uint32_t length, struct so
a4p = (struct sctp_ipv4addr_param *)
sctp_m_getptr(m, offset,
sizeof(struct sctp_ipv4addr_param),
- (uint8_t *) & addr_store);
+ (uint8_t *) & addr4_store);
if (a4p == NULL) {
return (0);
}
diff --git a/sys/netinet/sctp_input.c b/sys/netinet/sctp_input.c
index 6d2ec6d..3263efb 100644
--- a/sys/netinet/sctp_input.c
+++ b/sys/netinet/sctp_input.c
@@ -2874,14 +2874,12 @@ sctp_handle_cookie_echo(struct mbuf *m, int iphlen, int offset,
return (m);
}
}
- if ((*inp_p)->sctp_flags & SCTP_PCB_FLAGS_UDPTYPE) {
- if (notification) {
- sctp_ulp_notify(notification, *stcb, 0, NULL, SCTP_SO_NOT_LOCKED);
- }
- if (send_int_conf) {
- sctp_ulp_notify(SCTP_NOTIFY_INTERFACE_CONFIRMED,
- (*stcb), 0, (void *)netl, SCTP_SO_NOT_LOCKED);
- }
+ if (notification) {
+ sctp_ulp_notify(notification, *stcb, 0, NULL, SCTP_SO_NOT_LOCKED);
+ }
+ if (send_int_conf) {
+ sctp_ulp_notify(SCTP_NOTIFY_INTERFACE_CONFIRMED,
+ (*stcb), 0, (void *)netl, SCTP_SO_NOT_LOCKED);
}
return (m);
}
diff --git a/sys/netinet/sctp_output.c b/sys/netinet/sctp_output.c
index 10e3959..7e09b6e 100644
--- a/sys/netinet/sctp_output.c
+++ b/sys/netinet/sctp_output.c
@@ -3799,6 +3799,7 @@ sctp_get_ect(struct sctp_tcb *stcb)
}
}
+#if defined(INET) || defined(INET6)
static void
sctp_handle_no_route(struct sctp_tcb *stcb,
struct sctp_nets *net,
@@ -3843,6 +3844,8 @@ sctp_handle_no_route(struct sctp_tcb *stcb,
}
}
+#endif
+
static int
sctp_lowlevel_chunk_output(struct sctp_inpcb *inp,
struct sctp_tcb *stcb, /* may be NULL */
@@ -3882,14 +3885,18 @@ sctp_lowlevel_chunk_output(struct sctp_inpcb *inp,
* interface and smallest_mtu size as well.
*/
/* Will need ifdefs around this */
- struct mbuf *o_pak;
struct mbuf *newm;
struct sctphdr *sctphdr;
int packet_length;
int ret;
uint32_t vrf_id;
+
+#if defined(INET) || defined(INET6)
+ struct mbuf *o_pak;
sctp_route_t *ro = NULL;
struct udphdr *udp = NULL;
+
+#endif
uint8_t tos_value;
#if defined(__APPLE__) || defined(SCTP_SO_LOCK_TESTING)
@@ -8432,12 +8439,14 @@ again_one_more_time:
}
/* now lets add any data within the MTU constraints */
switch (((struct sockaddr *)&net->ro._l_addr)->sa_family) {
+#ifdef INET
case AF_INET:
if (net->mtu > (sizeof(struct ip) + sizeof(struct sctphdr)))
omtu = net->mtu - (sizeof(struct ip) + sizeof(struct sctphdr));
else
omtu = 0;
break;
+#endif
#ifdef INET6
case AF_INET6:
if (net->mtu > (sizeof(struct ip6_hdr) + sizeof(struct sctphdr)))
@@ -12165,7 +12174,7 @@ sctp_lower_sosend(struct socket *so,
union sctp_sockstore *raddr = (union sctp_sockstore *)addr;
switch (raddr->sa.sa_family) {
-#if defined(INET)
+#ifdef INET
case AF_INET:
if (raddr->sin.sin_len != sizeof(struct sockaddr_in)) {
SCTP_LTRACE_ERR_RET(inp, stcb, net, SCTP_FROM_SCTP_OUTPUT, EINVAL);
@@ -12175,7 +12184,7 @@ sctp_lower_sosend(struct socket *so,
port = raddr->sin.sin_port;
break;
#endif
-#if defined(INET6)
+#ifdef INET6
case AF_INET6:
if (raddr->sin6.sin6_len != sizeof(struct sockaddr_in6)) {
SCTP_LTRACE_ERR_RET(inp, stcb, net, SCTP_FROM_SCTP_OUTPUT, EINVAL);
diff --git a/sys/netinet/sctp_pcb.c b/sys/netinet/sctp_pcb.c
index e9d99ed..2630d89 100644
--- a/sys/netinet/sctp_pcb.c
+++ b/sys/netinet/sctp_pcb.c
@@ -1203,11 +1203,18 @@ sctp_findassociation_ep_addr(struct sctp_inpcb **inp_p, struct sockaddr *remote,
uint16_t rport;
inp = *inp_p;
- if (remote->sa_family == AF_INET) {
+ switch (remote->sa_family) {
+#ifdef INET
+ case AF_INET:
rport = (((struct sockaddr_in *)remote)->sin_port);
- } else if (remote->sa_family == AF_INET6) {
+ break;
+#endif
+#ifdef INET6
+ case AF_INET6:
rport = (((struct sockaddr_in6 *)remote)->sin6_port);
- } else {
+ break;
+#endif
+ default:
return (NULL);
}
if (locked_tcb) {
@@ -3009,6 +3016,7 @@ continue_anyway:
memset(&store_sa, 0, sizeof(store_sa));
switch (addr->sa_family) {
+#ifdef INET
case AF_INET:
{
struct sockaddr_in *sin;
@@ -3018,6 +3026,8 @@ continue_anyway:
sin->sin_port = 0;
break;
}
+#endif
+#ifdef INET6
case AF_INET6:
{
struct sockaddr_in6 *sin6;
@@ -3027,6 +3037,7 @@ continue_anyway:
sin6->sin6_port = 0;
break;
}
+#endif
default:
break;
}
@@ -4864,6 +4875,7 @@ sctp_free_assoc(struct sctp_inpcb *inp, struct sctp_tcb *stcb, int from_inpcbfre
/* now clean up any chunks here */
TAILQ_FOREACH_SAFE(sp, &outs->outqueue, next, nsp) {
TAILQ_REMOVE(&outs->outqueue, sp, next);
+ sctp_free_spbufspace(stcb, asoc, sp);
if (sp->data) {
if (so) {
/* Still an open socket - report */
@@ -4874,19 +4886,14 @@ sctp_free_assoc(struct sctp_inpcb *inp, struct sctp_tcb *stcb, int from_inpcbfre
sctp_m_freem(sp->data);
sp->data = NULL;
sp->tail_mbuf = NULL;
+ sp->length = 0;
}
}
if (sp->net) {
sctp_free_remote_addr(sp->net);
sp->net = NULL;
}
- sctp_free_spbufspace(stcb, asoc, sp);
- if (sp->holds_key_ref)
- sctp_auth_key_release(stcb, sp->auth_keyid, SCTP_SO_LOCKED);
- /* Free the zone stuff */
- SCTP_ZONE_FREE(SCTP_BASE_INFO(ipi_zone_strmoq), sp);
- SCTP_DECR_STRMOQ_COUNT();
- /* sa_ignore FREED_MEMORY */
+ sctp_free_a_strmoq(stcb, sp, SCTP_SO_LOCKED);
}
}
/* sa_ignore FREED_MEMORY */
@@ -5188,12 +5195,16 @@ sctp_destination_is_reachable(struct sctp_tcb *stcb, struct sockaddr *destaddr)
}
/* NOTE: all "scope" checks are done when local addresses are added */
switch (destaddr->sa_family) {
+#ifdef INET6
case AF_INET6:
answer = inp->ip_inp.inp.inp_vflag & INP_IPV6;
break;
+#endif
+#ifdef INET
case AF_INET:
answer = inp->ip_inp.inp.inp_vflag & INP_IPV4;
break;
+#endif
default:
/* invalid family, so it's unreachable */
answer = 0;
@@ -5284,7 +5295,7 @@ sctp_add_local_addr_ep(struct sctp_inpcb *inp, struct sctp_ifa *ifa, uint32_t ac
inp->ip_inp.inp.inp_vflag |= INP_IPV6;
break;
#endif
-#ifdef INET6
+#ifdef INET
case AF_INET:
inp->ip_inp.inp.inp_vflag |= INP_IPV4;
break;
diff --git a/sys/netinet/sctp_uio.h b/sys/netinet/sctp_uio.h
index 95b8978..80b5e60 100644
--- a/sys/netinet/sctp_uio.h
+++ b/sys/netinet/sctp_uio.h
@@ -1124,12 +1124,8 @@ struct sctpstat {
#define SCTP_STAT_DECR_GAUGE32(_x) SCTP_STAT_DECR(_x)
union sctp_sockstore {
-#if defined(INET) || !defined(_KERNEL)
struct sockaddr_in sin;
-#endif
-#if defined(INET6) || !defined(_KERNEL)
struct sockaddr_in6 sin6;
-#endif
struct sockaddr sa;
};
diff --git a/sys/netinet/sctp_usrreq.c b/sys/netinet/sctp_usrreq.c
index dc01f2d..94e99c0 100644
--- a/sys/netinet/sctp_usrreq.c
+++ b/sys/netinet/sctp_usrreq.c
@@ -38,7 +38,7 @@ __FBSDID("$FreeBSD$");
#include <netinet/sctp_pcb.h>
#include <netinet/sctp_header.h>
#include <netinet/sctp_var.h>
-#if defined(INET6)
+#ifdef INET6
#endif
#include <netinet/sctp_sysctl.h>
#include <netinet/sctp_output.h>
@@ -5258,7 +5258,6 @@ sctp_setopt(struct socket *so, int optname, void *optval, size_t optsize,
case SCTP_BINDX_ADD_ADDR:
{
struct sctp_getaddresses *addrs;
- size_t sz;
struct thread *td;
td = (struct thread *)p;
@@ -5266,8 +5265,7 @@ sctp_setopt(struct socket *so, int optname, void *optval, size_t optsize,
optsize);
#ifdef INET
if (addrs->addr->sa_family == AF_INET) {
- sz = sizeof(struct sctp_getaddresses) - sizeof(struct sockaddr) + sizeof(struct sockaddr_in);
- if (optsize < sz) {
+ if (optsize < sizeof(struct sctp_getaddresses) - sizeof(struct sockaddr) + sizeof(struct sockaddr_in)) {
SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTP_USRREQ, EINVAL);
error = EINVAL;
break;
@@ -5280,8 +5278,7 @@ sctp_setopt(struct socket *so, int optname, void *optval, size_t optsize,
#endif
#ifdef INET6
if (addrs->addr->sa_family == AF_INET6) {
- sz = sizeof(struct sctp_getaddresses) - sizeof(struct sockaddr) + sizeof(struct sockaddr_in6);
- if (optsize < sz) {
+ if (optsize < sizeof(struct sctp_getaddresses) - sizeof(struct sockaddr) + sizeof(struct sockaddr_in6)) {
SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTP_USRREQ, EINVAL);
error = EINVAL;
break;
@@ -5305,7 +5302,6 @@ sctp_setopt(struct socket *so, int optname, void *optval, size_t optsize,
case SCTP_BINDX_REM_ADDR:
{
struct sctp_getaddresses *addrs;
- size_t sz;
struct thread *td;
td = (struct thread *)p;
@@ -5313,8 +5309,7 @@ sctp_setopt(struct socket *so, int optname, void *optval, size_t optsize,
SCTP_CHECK_AND_CAST(addrs, optval, struct sctp_getaddresses, optsize);
#ifdef INET
if (addrs->addr->sa_family == AF_INET) {
- sz = sizeof(struct sctp_getaddresses) - sizeof(struct sockaddr) + sizeof(struct sockaddr_in);
- if (optsize < sz) {
+ if (optsize < sizeof(struct sctp_getaddresses) - sizeof(struct sockaddr) + sizeof(struct sockaddr_in)) {
SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTP_USRREQ, EINVAL);
error = EINVAL;
break;
@@ -5327,8 +5322,7 @@ sctp_setopt(struct socket *so, int optname, void *optval, size_t optsize,
#endif
#ifdef INET6
if (addrs->addr->sa_family == AF_INET6) {
- sz = sizeof(struct sctp_getaddresses) - sizeof(struct sockaddr) + sizeof(struct sockaddr_in6);
- if (optsize < sz) {
+ if (optsize < sizeof(struct sctp_getaddresses) - sizeof(struct sockaddr) + sizeof(struct sockaddr_in6)) {
SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTP_USRREQ, EINVAL);
error = EINVAL;
break;
diff --git a/sys/netinet/sctputil.c b/sys/netinet/sctputil.c
index c89eb82..d8ce16e 100644
--- a/sys/netinet/sctputil.c
+++ b/sys/netinet/sctputil.c
@@ -2951,7 +2951,7 @@ sctp_notify_send_failed2(struct sctp_tcb *stcb, uint32_t error,
SCTP_BUF_LEN(m_notify) = 0;
if (sctp_stcb_is_feature_on(stcb->sctp_ep, stcb, SCTP_PCB_FLAGS_RECVNSENDFAILEVNT)) {
ssfe = mtod(m_notify, struct sctp_send_failed_event *);
- ssfe->ssfe_type = SCTP_SEND_FAILED;
+ ssfe->ssfe_type = SCTP_SEND_FAILED_EVENT;
ssfe->ssfe_flags = SCTP_DATA_UNSENT;
ssfe->ssfe_length = length;
ssfe->ssfe_error = error;
@@ -3774,6 +3774,8 @@ sctp_report_all_outbound(struct sctp_tcb *stcb, uint16_t error, int holds_lock,
if (sp->data) {
sctp_m_freem(sp->data);
sp->data = NULL;
+ sp->tail_mbuf = NULL;
+ sp->length = 0;
}
}
if (sp->net) {
@@ -4833,7 +4835,7 @@ sctp_release_pr_sctp_chunk(struct sctp_tcb *stcb, struct sctp_tmit_chunk *tp1,
/*
* Pull any data to free up the SB
* and allow sender to "add more"
- * whilc we will throw away :-)
+ * while we will throw away :-)
*/
sctp_free_spbufspace(stcb, &stcb->asoc,
sp);
@@ -4841,9 +4843,9 @@ sctp_release_pr_sctp_chunk(struct sctp_tcb *stcb, struct sctp_tmit_chunk *tp1,
do_wakeup_routine = 1;
sp->some_taken = 1;
sctp_m_freem(sp->data);
- sp->length = 0;
sp->data = NULL;
sp->tail_mbuf = NULL;
+ sp->length = 0;
}
break;
}
@@ -5637,7 +5639,7 @@ found_one:
memcpy(from, &sin6, sizeof(struct sockaddr_in6));
}
#endif
-#if defined(INET6)
+#ifdef INET6
{
struct sockaddr_in6 lsa6, *from6;
@@ -6534,7 +6536,7 @@ sctp_bindx_delete_address(struct sctp_inpcb *inp,
return;
}
addr_touse = sa;
-#if defined(INET6)
+#ifdef INET6
if (sa->sa_family == AF_INET6) {
struct sockaddr_in6 *sin6;
diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c
index 6d8ebee..1840b08 100644
--- a/sys/netinet/tcp_input.c
+++ b/sys/netinet/tcp_input.c
@@ -909,7 +909,7 @@ findpcb:
/*
* A previous connection in TIMEWAIT state is supposed to catch stray
* or duplicate segments arriving late. If this segment was a
- * legitimate new connection attempt the old INPCB gets removed and
+ * legitimate new connection attempt, the old INPCB gets removed and
* we can try again to find a listening socket.
*
* At this point, due to earlier optimism, we may hold only an inpcb
@@ -1438,15 +1438,8 @@ tcp_do_segment(struct mbuf *m, struct tcphdr *th, struct socket *so,
/*
* If this is either a state-changing packet or current state isn't
* established, we require a write lock on tcbinfo. Otherwise, we
- * allow either a read lock or a write lock, as we may have acquired
- * a write lock due to a race.
- *
- * Require a global write lock for SYN/FIN/RST segments or
- * non-established connections; otherwise accept either a read or
- * write lock, as we may have conservatively acquired a write lock in
- * certain cases in tcp_input() (is this still true?). Currently we
- * will never enter with no lock, so we try to drop it quickly in the
- * common pure ack/pure data cases.
+ * allow the tcbinfo to be in either alocked or unlocked, as the
+ * caller may have unnecessarily acquired a write lock due to a race.
*/
if ((thflags & (TH_SYN | TH_FIN | TH_RST)) != 0 ||
tp->t_state != TCPS_ESTABLISHED) {
diff --git a/sys/netinet/tcp_output.c b/sys/netinet/tcp_output.c
index 1881c54..9876ef8 100644
--- a/sys/netinet/tcp_output.c
+++ b/sys/netinet/tcp_output.c
@@ -180,7 +180,7 @@ tcp_output(struct tcpcb *tp)
int idle, sendalot;
int sack_rxmit, sack_bytes_rxmt;
struct sackhole *p;
- int tso;
+ int tso, mtu;
struct tcpopt to;
#if 0
int maxburst = TCP_MAXBURST;
@@ -226,6 +226,7 @@ again:
tcp_sack_adjust(tp);
sendalot = 0;
tso = 0;
+ mtu = 0;
off = tp->snd_nxt - tp->snd_una;
sendwin = min(tp->snd_wnd, tp->snd_cwnd);
@@ -1209,6 +1210,9 @@ timer:
*/
#ifdef INET6
if (isipv6) {
+ struct route_in6 ro;
+
+ bzero(&ro, sizeof(ro));
/*
* we separately set hoplimit for every segment, since the
* user might want to change the value via setsockopt.
@@ -1218,10 +1222,13 @@ timer:
ip6->ip6_hlim = in6_selecthlim(tp->t_inpcb, NULL);
/* TODO: IPv6 IP6TOS_ECT bit on */
- error = ip6_output(m,
- tp->t_inpcb->in6p_outputopts, NULL,
- ((so->so_options & SO_DONTROUTE) ?
- IP_ROUTETOIF : 0), NULL, NULL, tp->t_inpcb);
+ error = ip6_output(m, tp->t_inpcb->in6p_outputopts, &ro,
+ ((so->so_options & SO_DONTROUTE) ? IP_ROUTETOIF : 0),
+ NULL, NULL, tp->t_inpcb);
+
+ if (error == EMSGSIZE && ro.ro_rt != NULL)
+ mtu = ro.ro_rt->rt_rmx.rmx_mtu;
+ RO_RTFREE(&ro);
}
#endif /* INET6 */
#if defined(INET) && defined(INET6)
@@ -1229,6 +1236,9 @@ timer:
#endif
#ifdef INET
{
+ struct route ro;
+
+ bzero(&ro, sizeof(ro));
ip->ip_len = m->m_pkthdr.len;
#ifdef INET6
if (tp->t_inpcb->inp_vflag & INP_IPV6PROTO)
@@ -1245,9 +1255,13 @@ timer:
if (V_path_mtu_discovery && tp->t_maxopd > V_tcp_minmss)
ip->ip_off |= IP_DF;
- error = ip_output(m, tp->t_inpcb->inp_options, NULL,
+ error = ip_output(m, tp->t_inpcb->inp_options, &ro,
((so->so_options & SO_DONTROUTE) ? IP_ROUTETOIF : 0), 0,
tp->t_inpcb);
+
+ if (error == EMSGSIZE && ro.ro_rt != NULL)
+ mtu = ro.ro_rt->rt_rmx.rmx_mtu;
+ RO_RTFREE(&ro);
}
#endif /* INET */
if (error) {
@@ -1294,21 +1308,18 @@ out:
* For some reason the interface we used initially
* to send segments changed to another or lowered
* its MTU.
- *
- * tcp_mtudisc() will find out the new MTU and as
- * its last action, initiate retransmission, so it
- * is important to not do so here.
- *
* If TSO was active we either got an interface
* without TSO capabilits or TSO was turned off.
- * Disable it for this connection as too and
- * immediatly retry with MSS sized segments generated
- * by this function.
+ * If we obtained mtu from ip_output() then update
+ * it and try again.
*/
if (tso)
tp->t_flags &= ~TF_TSO;
- tcp_mtudisc(tp->t_inpcb, -1);
- return (0);
+ if (mtu != 0) {
+ tcp_mss_update(tp, -1, mtu, NULL, NULL);
+ goto again;
+ }
+ return (error);
case EHOSTDOWN:
case EHOSTUNREACH:
case ENETDOWN:
diff --git a/sys/netinet6/in6.c b/sys/netinet6/in6.c
index 960b887..a7df9f8 100644
--- a/sys/netinet6/in6.c
+++ b/sys/netinet6/in6.c
@@ -257,10 +257,10 @@ in6_mask2len(struct in6_addr *mask, u_char *lim0)
#ifdef COMPAT_FREEBSD32
struct in6_ndifreq32 {
- char ifname[IFNAMSIZ];
- uint32_t ifindex;
+ char ifname[IFNAMSIZ];
+ uint32_t ifindex;
};
-#define SIOCGDEFIFACE32_IN6 _IOWR('i', 86, struct in6_ndifreq32)
+#define SIOCGDEFIFACE32_IN6 _IOWR('i', 86, struct in6_ndifreq32)
#endif
int
@@ -284,7 +284,7 @@ in6_control(struct socket *so, u_long cmd, caddr_t data,
switch (cmd) {
case SIOCGETSGCNT_IN6:
case SIOCGETMIFCNT_IN6:
- /*
+ /*
* XXX mrt_ioctl has a 3rd, unused, FIB argument in route.c.
* We cannot see how that would be needed, so do not adjust the
* KPI blindly; more likely should clean up the IPv4 variant.
@@ -485,7 +485,7 @@ in6_control(struct socket *so, u_long cmd, caddr_t data,
}
if (td != NULL) {
- error = priv_check(td, (cmd == SIOCDIFADDR_IN6) ?
+ error = priv_check(td, (cmd == SIOCDIFADDR_IN6) ?
PRIV_NET_DELIFADDR : PRIV_NET_ADDIFADDR);
if (error)
goto out;
@@ -1365,7 +1365,7 @@ in6_purgeaddr_mc(struct ifnet *ifp, struct in6_ifaddr *ia, struct ifaddr *ifa0)
bzero(&sin6, sizeof(sin6));
sin6.sin6_len = sizeof(sin6);
sin6.sin6_family = AF_INET6;
- memcpy(&sin6.sin6_addr, &satosin6(ifa0->ifa_addr)->sin6_addr,
+ memcpy(&sin6.sin6_addr, &satosin6(ifa0->ifa_addr)->sin6_addr,
sizeof(sin6.sin6_addr));
error = in6_setscope(&sin6.sin6_addr, ifa0->ifa_ifp, NULL);
if (error != 0)
@@ -1374,16 +1374,17 @@ in6_purgeaddr_mc(struct ifnet *ifp, struct in6_ifaddr *ia, struct ifaddr *ifa0)
rt = in6_rtalloc1((struct sockaddr *)&mltaddr, 0, 0UL, RT_DEFAULT_FIB);
if (rt != NULL && rt->rt_gateway != NULL &&
- (memcmp(&satosin6(rt->rt_gateway)->sin6_addr,
+ (memcmp(&satosin6(rt->rt_gateway)->sin6_addr,
&ia->ia_addr.sin6_addr,
sizeof(ia->ia_addr.sin6_addr)) == 0)) {
- /*
+ /*
* If no more IPv6 address exists on this interface then
* remove the multicast address route.
*/
if (ifa0 == NULL) {
- memcpy(&mltaddr.sin6_addr, &satosin6(rt_key(rt))->sin6_addr,
- sizeof(mltaddr.sin6_addr));
+ memcpy(&mltaddr.sin6_addr,
+ &satosin6(rt_key(rt))->sin6_addr,
+ sizeof(mltaddr.sin6_addr));
RTFREE_LOCKED(rt);
error = in6_rtrequest(RTM_DELETE,
(struct sockaddr *)&mltaddr,
@@ -1415,16 +1416,17 @@ in6_purgeaddr_mc(struct ifnet *ifp, struct in6_ifaddr *ia, struct ifaddr *ifa0)
rt = in6_rtalloc1((struct sockaddr *)&mltaddr, 0, 0UL, RT_DEFAULT_FIB);
if (rt != NULL && rt->rt_gateway != NULL &&
- (memcmp(&satosin6(rt->rt_gateway)->sin6_addr,
+ (memcmp(&satosin6(rt->rt_gateway)->sin6_addr,
&ia->ia_addr.sin6_addr,
sizeof(ia->ia_addr.sin6_addr)) == 0)) {
- /*
+ /*
* If no more IPv6 address exists on this interface then
* remove the multicast address route.
*/
if (ifa0 == NULL) {
- memcpy(&mltaddr.sin6_addr, &satosin6(rt_key(rt))->sin6_addr,
- sizeof(mltaddr.sin6_addr));
+ memcpy(&mltaddr.sin6_addr,
+ &satosin6(rt_key(rt))->sin6_addr,
+ sizeof(mltaddr.sin6_addr));
RTFREE_LOCKED(rt);
error = in6_rtrequest(RTM_DELETE,
@@ -1471,8 +1473,7 @@ in6_purgeaddr(struct ifaddr *ifa)
TAILQ_FOREACH(ifa0, &ifp->if_addrhead, ifa_link) {
if ((ifa0->ifa_addr->sa_family != AF_INET6) ||
memcmp(&satosin6(ifa0->ifa_addr)->sin6_addr,
- &ia->ia_addr.sin6_addr,
- sizeof(struct in6_addr)) == 0)
+ &ia->ia_addr.sin6_addr, sizeof(struct in6_addr)) == 0)
continue;
else
break;
@@ -1483,12 +1484,12 @@ in6_purgeaddr(struct ifaddr *ifa)
/*
* Remove the loopback route to the interface address.
- * The check for the current setting of "nd6_useloopback"
+ * The check for the current setting of "nd6_useloopback"
* is not needed.
*/
if (ia->ia_flags & IFA_RTSELF) {
error = ifa_del_loopback_route((struct ifaddr *)ia,
- (struct sockaddr *)&ia->ia_addr);
+ (struct sockaddr *)&ia->ia_addr);
if (error == 0)
ia->ia_flags &= ~IFA_RTSELF;
}
@@ -1890,7 +1891,7 @@ in6_ifinit(struct ifnet *ifp, struct in6_ifaddr *ia,
* Special case:
* If a new destination address is specified for a point-to-point
* interface, install a route to the destination as an interface
- * direct route.
+ * direct route.
* XXX: the logic below rejects assigning multiple addresses on a p2p
* interface that share the same destination.
*/
@@ -1914,7 +1915,7 @@ in6_ifinit(struct ifnet *ifp, struct in6_ifaddr *ia,
*/
if (!(ia->ia_flags & IFA_RTSELF) && V_nd6_useloopback) {
error = ifa_add_loopback_route((struct ifaddr *)ia,
- (struct sockaddr *)&ia->ia_addr);
+ (struct sockaddr *)&ia->ia_addr);
if (error == 0)
ia->ia_flags |= IFA_RTSELF;
}
@@ -1941,7 +1942,7 @@ in6ifa_ifpforlinklocal(struct ifnet *ifp, int ignoreflags)
continue;
if (IN6_IS_ADDR_LINKLOCAL(IFA_IN6(ifa))) {
if ((((struct in6_ifaddr *)ifa)->ia6_flags &
- ignoreflags) != 0)
+ ignoreflags) != 0)
continue;
ifa_ref(ifa);
break;
@@ -2108,7 +2109,7 @@ in6_is_addr_deprecated(struct sockaddr_in6 *sa6)
IN6_IFADDR_RLOCK();
TAILQ_FOREACH(ia, &V_in6_ifaddrhead, ia_link) {
if (IN6_ARE_ADDR_EQUAL(&ia->ia_addr.sin6_addr,
- &sa6->sin6_addr) &&
+ &sa6->sin6_addr) &&
(ia->ia6_flags & IN6_IFF_DEPRECATED) != 0) {
IN6_IFADDR_RUNLOCK();
return (1); /* true */
@@ -2379,7 +2380,7 @@ in6_setmaxmtu(void)
maxmtu = IN6_LINKMTU(ifp);
}
IFNET_RUNLOCK_NOSLEEP();
- if (maxmtu) /* update only when maxmtu is positive */
+ if (maxmtu) /* update only when maxmtu is positive */
V_in6_maxmtu = maxmtu;
}
@@ -2469,8 +2470,7 @@ in6_lltable_new(const struct sockaddr *l3addr, u_int flags)
{
struct in6_llentry *lle;
- lle = malloc(sizeof(struct in6_llentry), M_LLTABLE,
- M_DONTWAIT | M_ZERO);
+ lle = malloc(sizeof(struct in6_llentry), M_LLTABLE, M_NOWAIT | M_ZERO);
if (lle == NULL) /* NB: caller generates msg */
return NULL;
@@ -2481,46 +2481,43 @@ in6_lltable_new(const struct sockaddr *l3addr, u_int flags)
callout_init_rw(&lle->base.ln_timer_ch, &lle->base.lle_lock,
CALLOUT_RETURNUNLOCKED);
- return &lle->base;
+ return (&lle->base);
}
static void
-in6_lltable_prefix_free(struct lltable *llt,
- const struct sockaddr *prefix,
- const struct sockaddr *mask,
- u_int flags)
+in6_lltable_prefix_free(struct lltable *llt, const struct sockaddr *prefix,
+ const struct sockaddr *mask, u_int flags)
{
const struct sockaddr_in6 *pfx = (const struct sockaddr_in6 *)prefix;
const struct sockaddr_in6 *msk = (const struct sockaddr_in6 *)mask;
struct llentry *lle, *next;
- register int i;
+ int i;
/*
- * (flags & LLE_STATIC) means deleting all entries
- * including static ND6 entries
+ * (flags & LLE_STATIC) means deleting all entries
+ * including static ND6 entries.
*/
- for (i=0; i < LLTBL_HASHTBL_SIZE; i++) {
+ IF_AFDATA_WLOCK(llt->llt_ifp);
+ for (i = 0; i < LLTBL_HASHTBL_SIZE; i++) {
LIST_FOREACH_SAFE(lle, &llt->lle_head[i], lle_next, next) {
if (IN6_ARE_MASKED_ADDR_EQUAL(
- &((struct sockaddr_in6 *)L3_ADDR(lle))->sin6_addr,
- &pfx->sin6_addr,
- &msk->sin6_addr) &&
- ((flags & LLE_STATIC) || !(lle->la_flags & LLE_STATIC))) {
- int canceled;
-
- canceled = callout_drain(&lle->la_timer);
+ &satosin6(L3_ADDR(lle))->sin6_addr,
+ &pfx->sin6_addr, &msk->sin6_addr) &&
+ ((flags & LLE_STATIC) ||
+ !(lle->la_flags & LLE_STATIC))) {
LLE_WLOCK(lle);
- if (canceled)
+ if (callout_stop(&lle->la_timer))
LLE_REMREF(lle);
llentry_free(lle);
}
}
}
+ IF_AFDATA_WUNLOCK(llt->llt_ifp);
}
static int
-in6_lltable_rtcheck(struct ifnet *ifp,
- u_int flags,
+in6_lltable_rtcheck(struct ifnet *ifp,
+ u_int flags,
const struct sockaddr *l3addr)
{
struct rtentry *rt;
@@ -2535,8 +2532,8 @@ in6_lltable_rtcheck(struct ifnet *ifp,
RT_DEFAULT_FIB);
if (rt == NULL || (rt->rt_flags & RTF_GATEWAY) || rt->rt_ifp != ifp) {
struct ifaddr *ifa;
- /*
- * Create an ND6 cache for an IPv6 neighbor
+ /*
+ * Create an ND6 cache for an IPv6 neighbor
* that is not covered by our own prefix.
*/
/* XXX ifaof_ifpforaddr should take a const param */
@@ -2577,8 +2574,8 @@ in6_lltable_lookup(struct lltable *llt, u_int flags,
struct sockaddr_in6 *sa6 = (struct sockaddr_in6 *)L3_ADDR(lle);
if (lle->la_flags & LLE_DELETED)
continue;
- if (bcmp(&sa6->sin6_addr, &sin6->sin6_addr,
- sizeof(struct in6_addr)) == 0)
+ if (bcmp(&sa6->sin6_addr, &sin6->sin6_addr,
+ sizeof(struct in6_addr)) == 0)
break;
}
@@ -2607,15 +2604,16 @@ in6_lltable_lookup(struct lltable *llt, u_int flags,
lle->lle_tbl = llt;
lle->lle_head = lleh;
+ lle->la_flags |= LLE_LINKED;
LIST_INSERT_HEAD(lleh, lle, lle_next);
} else if (flags & LLE_DELETE) {
if (!(lle->la_flags & LLE_IFADDR) || (flags & LLE_IFADDR)) {
LLE_WLOCK(lle);
- lle->la_flags = LLE_DELETED;
+ lle->la_flags |= LLE_DELETED;
LLE_WUNLOCK(lle);
#ifdef DIAGNOSTIC
- log(LOG_INFO, "ifaddr cache = %p is deleted\n", lle);
-#endif
+ log(LOG_INFO, "ifaddr cache = %p is deleted\n", lle);
+#endif
}
lle = (void *)-1;
}
@@ -2801,8 +2799,7 @@ in6_sin_2_v4mapsin6_in_sock(struct sockaddr **nam)
struct sockaddr_in *sin_p;
struct sockaddr_in6 *sin6_p;
- sin6_p = malloc(sizeof *sin6_p, M_SONAME,
- M_WAITOK);
+ sin6_p = malloc(sizeof *sin6_p, M_SONAME, M_WAITOK);
sin_p = (struct sockaddr_in *)*nam;
in6_sin_2_v4mapsin6(sin_p, sin6_p);
free(*nam, M_SONAME);
diff --git a/sys/netinet6/ip6_ipsec.c b/sys/netinet6/ip6_ipsec.c
index 757f1cc..911ea8d 100644
--- a/sys/netinet6/ip6_ipsec.c
+++ b/sys/netinet6/ip6_ipsec.c
@@ -263,7 +263,7 @@ ip6_ipsec_output(struct mbuf **m, struct inpcb *inp, int *flags, int *error,
mtag->m_tag_id != PACKET_TAG_IPSEC_OUT_CRYPTO_NEEDED)
continue;
/*
- * Check if policy has an SA associated with it.
+ * Check if policy has no SA associated with it.
* This can happen when an SP has yet to acquire
* an SA; e.g. on first reference. If it occurs,
* then we let ipsec4_process_packet do its thing.
@@ -291,16 +291,16 @@ ip6_ipsec_output(struct mbuf **m, struct inpcb *inp, int *flags, int *error,
/*
* Do delayed checksums now because we send before
* this is done in the normal processing path.
- * XXX-BZ CSUM_DELAY_DATA_IPV6?
+ * For IPv6 we do delayed checksums in ip6_output.c.
*/
+#ifdef INET
if ((*m)->m_pkthdr.csum_flags & CSUM_DELAY_DATA) {
ipseclog((LOG_DEBUG,
"%s: we do not support IPv4 over IPv6", __func__));
-#ifdef INET
in_delayed_cksum(*m);
-#endif
(*m)->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA;
}
+#endif
/*
* Preserve KAME behaviour: ENOENT can be returned
diff --git a/sys/netinet6/ip6_output.c b/sys/netinet6/ip6_output.c
index e1569b0..1fdedf1 100644
--- a/sys/netinet6/ip6_output.c
+++ b/sys/netinet6/ip6_output.c
@@ -195,8 +195,9 @@ in6_delayed_cksum(struct mbuf *m, uint32_t plen, u_short offset)
offset += m->m_pkthdr.csum_data; /* checksum offset */
if (offset + sizeof(u_short) > m->m_len) {
- printf("%s: delayed m_pullup, m->len: %d off: %d\n",
- __func__, m->m_len, offset);
+ printf("%s: delayed m_pullup, m->len: %d plen %u off %u "
+ "csum_flags=0x%04x\n", __func__, m->m_len, plen, offset,
+ m->m_pkthdr.csum_flags);
/*
* XXX this should not happen, but if it does, the correct
* behavior may be to insert the checksum in the appropriate
@@ -294,17 +295,31 @@ ip6_output(struct mbuf *m0, struct ip6_pktopts *opt,
MAKE_EXTHDR(opt->ip6po_dest2, &exthdrs.ip6e_dest2);
}
+#ifdef IPSEC
/*
* IPSec checking which handles several cases.
* FAST IPSEC: We re-injected the packet.
*/
-#ifdef IPSEC
switch(ip6_ipsec_output(&m, inp, &flags, &error, &ifp, &sp))
{
case 1: /* Bad packet */
goto freehdrs;
case -1: /* Do IPSec */
needipsec = 1;
+ /*
+ * Do delayed checksums now, as we may send before returning.
+ */
+ if (m->m_pkthdr.csum_flags & CSUM_DELAY_DATA_IPV6) {
+ plen = m->m_pkthdr.len - sizeof(*ip6);
+ in6_delayed_cksum(m, plen, sizeof(struct ip6_hdr));
+ m->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA_IPV6;
+ }
+#ifdef SCTP
+ if (m->m_pkthdr.csum_flags & CSUM_SCTP_IPV6) {
+ sctp_delayed_cksum(m, sizeof(struct ip6_hdr));
+ m->m_pkthdr.csum_flags &= ~CSUM_SCTP_IPV6;
+ }
+#endif
case 0: /* No IPSec */
default:
break;
diff --git a/sys/netinet6/sctp6_usrreq.c b/sys/netinet6/sctp6_usrreq.c
index 28e0746..58fe3a3 100644
--- a/sys/netinet6/sctp6_usrreq.c
+++ b/sys/netinet6/sctp6_usrreq.c
@@ -34,11 +34,12 @@
__FBSDID("$FreeBSD$");
#include <netinet/sctp_os.h>
+#ifdef INET6
#include <sys/proc.h>
#include <netinet/sctp_pcb.h>
#include <netinet/sctp_header.h>
#include <netinet/sctp_var.h>
-#if defined(INET6)
+#ifdef INET6
#include <netinet6/sctp6_var.h>
#endif
#include <netinet/sctp_sysctl.h>
@@ -57,7 +58,7 @@ __FBSDID("$FreeBSD$");
#ifdef IPSEC
#include <netipsec/ipsec.h>
-#if defined(INET6)
+#ifdef INET6
#include <netipsec/ipsec6.h>
#endif /* INET6 */
#endif /* IPSEC */
@@ -1240,3 +1241,5 @@ struct pr_usrreqs sctp6_usrreqs = {
.pru_sosend = sctp_sosend,
.pru_soreceive = sctp_soreceive
};
+
+#endif
diff --git a/sys/netipsec/ipsec_output.c b/sys/netipsec/ipsec_output.c
index 38268f7..1a1b646 100644
--- a/sys/netipsec/ipsec_output.c
+++ b/sys/netipsec/ipsec_output.c
@@ -165,8 +165,7 @@ ipsec_process_done(struct mbuf *m, struct ipsecrequest *isr)
*/
if (isr->next) {
V_ipsec4stat.ips_out_bundlesa++;
- sav = isr->next->sav;
- saidx = &sav->sah->saidx;
+ /* XXX-BZ currently only support same AF bundles. */
switch (saidx->dst.sa.sa_family) {
#ifdef INET
case AF_INET:
diff --git a/sys/powerpc/powerpc/busdma_machdep.c b/sys/powerpc/powerpc/busdma_machdep.c
index 2063b1d..7953f91 100644
--- a/sys/powerpc/powerpc/busdma_machdep.c
+++ b/sys/powerpc/powerpc/busdma_machdep.c
@@ -46,6 +46,8 @@ __FBSDID("$FreeBSD$");
#include <sys/sysctl.h>
#include <vm/vm.h>
+#include <vm/vm_extern.h>
+#include <vm/vm_kern.h>
#include <vm/vm_page.h>
#include <vm/vm_map.h>
@@ -130,6 +132,7 @@ struct bus_dmamap {
bus_dmamap_callback_t *callback;
void *callback_arg;
STAILQ_ENTRY(bus_dmamap) links;
+ int contigalloc;
};
static STAILQ_HEAD(, bus_dmamap) bounce_map_waitinglist;
@@ -489,6 +492,7 @@ int
bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags,
bus_dmamap_t *mapp)
{
+ vm_memattr_t attr;
int mflags;
if (flags & BUS_DMA_NOWAIT)
@@ -500,6 +504,12 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags,
if (flags & BUS_DMA_ZERO)
mflags |= M_ZERO;
+#ifdef NOTYET
+ if (flags & BUS_DMA_NOCACHE)
+ attr = VM_MEMATTR_UNCACHEABLE;
+ else
+#endif
+ attr = VM_MEMATTR_DEFAULT;
/*
* XXX:
@@ -511,7 +521,8 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags,
*/
if ((dmat->maxsize <= PAGE_SIZE) &&
(dmat->alignment < dmat->maxsize) &&
- dmat->lowaddr >= ptoa((vm_paddr_t)Maxmem)) {
+ dmat->lowaddr >= ptoa((vm_paddr_t)Maxmem) &&
+ attr == VM_MEMATTR_DEFAULT) {
*vaddr = malloc(dmat->maxsize, M_DEVBUF, mflags);
} else {
/*
@@ -520,9 +531,10 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags,
* multi-seg allocations yet though.
* XXX Certain AGP hardware does.
*/
- *vaddr = contigmalloc(dmat->maxsize, M_DEVBUF, mflags,
- 0ul, dmat->lowaddr, dmat->alignment? dmat->alignment : 1ul,
- dmat->boundary);
+ *vaddr = (void *)kmem_alloc_contig(kernel_map, dmat->maxsize,
+ mflags, 0ul, dmat->lowaddr, dmat->alignment ?
+ dmat->alignment : 1ul, dmat->boundary, attr);
+ (*mapp)->contigalloc = 1;
}
if (*vaddr == NULL) {
CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d",
@@ -531,11 +543,6 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags,
} else if (vtophys(*vaddr) & (dmat->alignment - 1)) {
printf("bus_dmamem_alloc failed to align memory properly.\n");
}
-#ifdef NOTYET
- if (flags & BUS_DMA_NOCACHE)
- pmap_change_attr((vm_offset_t)*vaddr, dmat->maxsize,
- VM_MEMATTR_UNCACHEABLE);
-#endif
CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d",
__func__, dmat, dmat->flags, 0);
return (0);
@@ -548,18 +555,12 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags,
void
bus_dmamem_free(bus_dma_tag_t dmat, void *vaddr, bus_dmamap_t map)
{
- bus_dmamap_destroy(dmat, map);
-#ifdef NOTYET
- pmap_change_attr((vm_offset_t)vaddr, dmat->maxsize, VM_MEMATTR_DEFAULT);
-#endif
- if ((dmat->maxsize <= PAGE_SIZE) &&
- (dmat->alignment < dmat->maxsize) &&
- dmat->lowaddr >= ptoa((vm_paddr_t)Maxmem))
+ if (!map->contigalloc)
free(vaddr, M_DEVBUF);
- else {
- contigfree(vaddr, dmat->maxsize, M_DEVBUF);
- }
+ else
+ kmem_free(kernel_map, (vm_offset_t)vaddr, dmat->maxsize);
+ bus_dmamap_destroy(dmat, map);
CTR3(KTR_BUSDMA, "%s: tag %p flags 0x%x", __func__, dmat, dmat->flags);
}
diff --git a/sys/sys/ata.h b/sys/sys/ata.h
index 9b2d867..23781ef 100644
--- a/sys/sys/ata.h
+++ b/sys/sys/ata.h
@@ -261,6 +261,20 @@ struct ata_params {
/*255*/ u_int16_t integrity;
} __packed;
+/*
+ * ATA Device Register
+ *
+ * bit 7 Obsolete (was 1 in early ATA specs)
+ * bit 6 Sets LBA/CHS mode. 1=LBA, 0=CHS
+ * bit 5 Obsolete (was 1 in early ATA specs)
+ * bit 4 1 = Slave Drive, 0 = Master Drive
+ * bit 3-0 In LBA mode, 27-24 of address. In CHS mode, head number
+*/
+
+#define ATA_DEV_MASTER 0x00
+#define ATA_DEV_SLAVE 0x10
+#define ATA_DEV_LBA 0x40
+
/* ATA transfer modes */
#define ATA_MODE_MASK 0x0f
diff --git a/sys/sys/fcntl.h b/sys/sys/fcntl.h
index 29b2a0c..8ecb3c9 100644
--- a/sys/sys/fcntl.h
+++ b/sys/sys/fcntl.h
@@ -111,7 +111,7 @@ typedef __pid_t pid_t;
#if __BSD_VISIBLE
/* Attempt to bypass buffer cache */
-#define O_DIRECT 0x00010000
+#define O_DIRECT 0x00010000
#endif
/* Defined by POSIX Extended API Set Part 2 */
@@ -213,18 +213,28 @@ typedef __pid_t pid_t;
#define F_SETFL 4 /* set file status flags */
#if __BSD_VISIBLE || __XSI_VISIBLE || __POSIX_VISIBLE >= 200112
#define F_GETOWN 5 /* get SIGIO/SIGURG proc/pgrp */
-#define F_SETOWN 6 /* set SIGIO/SIGURG proc/pgrp */
+#define F_SETOWN 6 /* set SIGIO/SIGURG proc/pgrp */
#endif
+#if __BSD_VISIBLE
#define F_OGETLK 7 /* get record locking information */
#define F_OSETLK 8 /* set record locking information */
#define F_OSETLKW 9 /* F_SETLK; wait if blocked */
#define F_DUP2FD 10 /* duplicate file descriptor to arg */
+#endif
#define F_GETLK 11 /* get record locking information */
#define F_SETLK 12 /* set record locking information */
#define F_SETLKW 13 /* F_SETLK; wait if blocked */
+#if __BSD_VISIBLE
#define F_SETLK_REMOTE 14 /* debugging support for remote locks */
#define F_READAHEAD 15 /* read ahead */
#define F_RDAHEAD 16 /* Darwin compatible read ahead */
+#endif
+#if __BSD_VISIBLE || __POSIX_VISIBLE >= 200809
+#define F_DUPFD_CLOEXEC 17 /* Like F_DUPFD, but FD_CLOEXEC is set */
+#endif
+#if __BSD_VISIBLE
+#define F_DUP2FD_CLOEXEC 18 /* Like F_DUP2FD, but FD_CLOEXEC is set */
+#endif
/* file descriptor flags (F_GETFD, F_SETFD) */
#define FD_CLOEXEC 1 /* close-on-exec flag */
@@ -233,14 +243,16 @@ typedef __pid_t pid_t;
#define F_RDLCK 1 /* shared or read lock */
#define F_UNLCK 2 /* unlock */
#define F_WRLCK 3 /* exclusive or write lock */
+#if __BSD_VISIBLE
#define F_UNLCKSYS 4 /* purge locks for a given system ID */
#define F_CANCEL 5 /* cancel an async lock request */
+#endif
#ifdef _KERNEL
#define F_WAIT 0x010 /* Wait until lock is granted */
#define F_FLOCK 0x020 /* Use flock(2) semantics for lock */
#define F_POSIX 0x040 /* Use POSIX semantics for lock */
#define F_REMOTE 0x080 /* Lock owner is remote NFS client */
-#define F_NOINTR 0x100 /* Ignore signals when waiting */
+#define F_NOINTR 0x100 /* Ignore signals when waiting */
#endif
/*
@@ -256,18 +268,19 @@ struct flock {
int l_sysid; /* remote system id or zero for local */
};
+#if __BSD_VISIBLE
/*
* Old advisory file segment locking data type,
* before adding l_sysid.
*/
-struct oflock {
+struct __oflock {
off_t l_start; /* starting offset */
off_t l_len; /* len = 0 means until end of file */
pid_t l_pid; /* lock owner */
short l_type; /* lock type: read/write, etc. */
short l_whence; /* type of l_start */
};
-
+#endif
#if __BSD_VISIBLE
/* lock operations for flock(2) */
diff --git a/sys/sys/param.h b/sys/sys/param.h
index ff0a7d2..c620814 100644
--- a/sys/sys/param.h
+++ b/sys/sys/param.h
@@ -58,7 +58,7 @@
* in the range 5 to 9.
*/
#undef __FreeBSD_version
-#define __FreeBSD_version 1000014 /* Master, propagated to newvers */
+#define __FreeBSD_version 1000015 /* Master, propagated to newvers */
/*
* __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,
diff --git a/sys/sys/pipe.h b/sys/sys/pipe.h
index d60185a..dfe7f2f 100644
--- a/sys/sys/pipe.h
+++ b/sys/sys/pipe.h
@@ -96,7 +96,6 @@ struct pipemapping {
#define PIPE_DIRECTW 0x400 /* Pipe direct write active. */
#define PIPE_DIRECTOK 0x800 /* Direct mode ok. */
#define PIPE_NAMED 0x1000 /* Is a named pipe. */
-#define PIPE_SAMEWGEN 0x2000 /* same write generation for named pipes. */
/*
* Per-pipe data structure.
@@ -115,6 +114,7 @@ struct pipe {
u_int pipe_state; /* pipe status info */
int pipe_busy; /* busy flag, mostly to handle rundown sanely */
int pipe_present; /* still present? */
+ int pipe_wgen; /* writer generation for named pipe */
ino_t pipe_ino; /* fake inode for stat(2) */
};
@@ -143,5 +143,5 @@ struct pipepair {
void pipe_dtor(struct pipe *dpipe);
int pipe_named_ctor(struct pipe **ppipe, struct thread *td);
-
+void pipeselwakeup(struct pipe *cpipe);
#endif /* !_SYS_PIPE_H_ */
diff --git a/sys/sys/refcount.h b/sys/sys/refcount.h
index c6b2a8e..68f62a0 100644
--- a/sys/sys/refcount.h
+++ b/sys/sys/refcount.h
@@ -32,6 +32,7 @@
#ifndef __SYS_REFCOUNT_H__
#define __SYS_REFCOUNT_H__
+#include <sys/limits.h>
#include <machine/atomic.h>
#ifdef _KERNEL
@@ -51,6 +52,7 @@ static __inline void
refcount_acquire(volatile u_int *count)
{
+ KASSERT(*count < UINT_MAX, ("refcount %p overflowed", count));
atomic_add_acq_int(count, 1);
}
diff --git a/sys/sys/stat.h b/sys/sys/stat.h
index 1b03bd2..ba4f4d4 100644
--- a/sys/sys/stat.h
+++ b/sys/sys/stat.h
@@ -99,7 +99,7 @@ typedef __uid_t uid_t;
#include <sys/time.h>
#endif
-#if __BSD_VISIBLE
+#ifdef _KERNEL
struct ostat {
__uint16_t st_dev; /* inode's device */
ino_t st_ino; /* inode's number */
@@ -117,7 +117,7 @@ struct ostat {
fflags_t st_flags; /* user defined flags for file */
__uint32_t st_gen; /* file generation number */
};
-#endif /* __BSD_VISIBLE */
+#endif
struct stat {
__dev_t st_dev; /* inode's device */
@@ -149,7 +149,7 @@ struct stat {
unsigned int :(8 / 2) * (16 - (int)sizeof(struct timespec));
};
-#if __BSD_VISIBLE
+#ifdef _KERNEL
struct nstat {
__dev_t st_dev; /* inode's device */
ino_t st_ino; /* inode's number */
diff --git a/sys/sys/user.h b/sys/sys/user.h
index 42733a6..accb7c3 100644
--- a/sys/sys/user.h
+++ b/sys/sys/user.h
@@ -413,6 +413,8 @@ struct kinfo_file {
#define KVME_FLAG_NEEDS_COPY 0x00000002
#define KVME_FLAG_NOCOREDUMP 0x00000004
#define KVME_FLAG_SUPER 0x00000008
+#define KVME_FLAG_GROWS_UP 0x00000010
+#define KVME_FLAG_GROWS_DOWN 0x00000020
#if defined(__amd64__)
#define KINFO_OVMENTRY_SIZE 1168
diff --git a/sys/ufs/ffs/ffs_snapshot.c b/sys/ufs/ffs/ffs_snapshot.c
index 9d03f03..56648af 100644
--- a/sys/ufs/ffs/ffs_snapshot.c
+++ b/sys/ufs/ffs/ffs_snapshot.c
@@ -1742,7 +1742,7 @@ ffs_snapblkfree(fs, devvp, bno, size, inum, vtype, wkhd)
enum vtype vtype;
struct workhead *wkhd;
{
- struct buf *ibp, *cbp, *savedcbp = 0;
+ struct buf *ibp, *cbp, *savedcbp = NULL;
struct thread *td = curthread;
struct inode *ip;
struct vnode *vp = NULL;
@@ -2236,11 +2236,11 @@ ffs_copyonwrite(devvp, bp)
struct buf *bp;
{
struct snapdata *sn;
- struct buf *ibp, *cbp, *savedcbp = 0;
+ struct buf *ibp, *cbp, *savedcbp = NULL;
struct thread *td = curthread;
struct fs *fs;
struct inode *ip;
- struct vnode *vp = 0;
+ struct vnode *vp = NULL;
ufs2_daddr_t lbn, blkno, *snapblklist;
int lower, upper, mid, indiroff, error = 0;
int launched_async_io, prev_norunningbuf;
diff --git a/sys/ufs/ffs/ffs_vfsops.c b/sys/ufs/ffs/ffs_vfsops.c
index fee8012..cc8d826 100644
--- a/sys/ufs/ffs/ffs_vfsops.c
+++ b/sys/ufs/ffs/ffs_vfsops.c
@@ -142,7 +142,7 @@ ffs_mount(struct mount *mp)
{
struct vnode *devvp;
struct thread *td;
- struct ufsmount *ump = 0;
+ struct ufsmount *ump = NULL;
struct fs *fs;
pid_t fsckpid = 0;
int error, flags;
diff --git a/sys/vm/memguard.c b/sys/vm/memguard.c
index 5a690e7..b1740c3 100644
--- a/sys/vm/memguard.c
+++ b/sys/vm/memguard.c
@@ -159,16 +159,18 @@ SYSCTL_ULONG(_vm_memguard, OID_AUTO, frequency_hits, CTLFLAG_RD,
* the kmem_map. The memguard memory will be a submap.
*/
unsigned long
-memguard_fudge(unsigned long km_size, unsigned long km_max)
+memguard_fudge(unsigned long km_size, const struct vm_map *parent_map)
{
- u_long mem_pgs = cnt.v_page_count;
+ u_long mem_pgs, parent_size;
vm_memguard_divisor = 10;
TUNABLE_INT_FETCH("vm.memguard.divisor", &vm_memguard_divisor);
+ parent_size = vm_map_max(parent_map) - vm_map_min(parent_map) +
+ PAGE_SIZE;
/* Pick a conservative value if provided value sucks. */
if ((vm_memguard_divisor <= 0) ||
- ((km_size / vm_memguard_divisor) == 0))
+ ((parent_size / vm_memguard_divisor) == 0))
vm_memguard_divisor = 10;
/*
* Limit consumption of physical pages to
@@ -177,21 +179,19 @@ memguard_fudge(unsigned long km_size, unsigned long km_max)
* This prevents memguard's page promotions from completely
* using up memory, since most malloc(9) calls are sub-page.
*/
+ mem_pgs = cnt.v_page_count;
memguard_physlimit = (mem_pgs / vm_memguard_divisor) * PAGE_SIZE;
/*
* We want as much KVA as we can take safely. Use at most our
- * allotted fraction of kmem_max. Limit this to twice the
- * physical memory to avoid using too much memory as pagetable
- * pages.
+ * allotted fraction of the parent map's size. Limit this to
+ * twice the physical memory to avoid using too much memory as
+ * pagetable pages (size must be multiple of PAGE_SIZE).
*/
- memguard_mapsize = km_max / vm_memguard_divisor;
- /* size must be multiple of PAGE_SIZE */
- memguard_mapsize = round_page(memguard_mapsize);
- if (memguard_mapsize == 0 ||
- memguard_mapsize / (2 * PAGE_SIZE) > mem_pgs)
+ memguard_mapsize = round_page(parent_size / vm_memguard_divisor);
+ if (memguard_mapsize / (2 * PAGE_SIZE) > mem_pgs)
memguard_mapsize = mem_pgs * 2 * PAGE_SIZE;
- if (km_max > 0 && km_size + memguard_mapsize > km_max)
- return (km_max);
+ if (km_size + memguard_mapsize > parent_size)
+ memguard_mapsize = 0;
return (km_size + memguard_mapsize);
}
diff --git a/sys/vm/memguard.h b/sys/vm/memguard.h
index 335e237..9ec4ffd 100644
--- a/sys/vm/memguard.h
+++ b/sys/vm/memguard.h
@@ -35,7 +35,7 @@ struct malloc_type;
struct vm_map;
#ifdef DEBUG_MEMGUARD
-unsigned long memguard_fudge(unsigned long, unsigned long);
+unsigned long memguard_fudge(unsigned long, const struct vm_map *);
void memguard_init(struct vm_map *);
void *memguard_alloc(unsigned long, int);
void *memguard_realloc(void *, unsigned long, struct malloc_type *, int);
diff --git a/sys/vm/vm_contig.c b/sys/vm/vm_contig.c
deleted file mode 100644
index e29aaf7..0000000
--- a/sys/vm/vm_contig.c
+++ /dev/null
@@ -1,351 +0,0 @@
-/*-
- * Copyright (c) 1991 Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * The Mach Operating System project at Carnegie-Mellon University.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * from: @(#)vm_page.c 7.4 (Berkeley) 5/7/91
- */
-
-/*-
- * Copyright (c) 1987, 1990 Carnegie-Mellon University.
- * All rights reserved.
- *
- * Authors: Avadis Tevanian, Jr., Michael Wayne Young
- *
- * Permission to use, copy, modify and distribute this software and
- * its documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- *
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
- * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
- * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- *
- * Carnegie Mellon requests users of this software to return to
- *
- * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
- * School of Computer Science
- * Carnegie Mellon University
- * Pittsburgh PA 15213-3890
- *
- * any improvements or extensions that they make and grant Carnegie the
- * rights to redistribute these changes.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/lock.h>
-#include <sys/mount.h>
-#include <sys/mutex.h>
-#include <sys/proc.h>
-#include <sys/kernel.h>
-#include <sys/sysctl.h>
-#include <sys/vmmeter.h>
-#include <sys/vnode.h>
-
-#include <vm/vm.h>
-#include <vm/vm_param.h>
-#include <vm/vm_kern.h>
-#include <vm/pmap.h>
-#include <vm/vm_map.h>
-#include <vm/vm_object.h>
-#include <vm/vm_page.h>
-#include <vm/vm_pageout.h>
-#include <vm/vm_pager.h>
-#include <vm/vm_extern.h>
-
-static int
-vm_contig_launder_page(vm_page_t m, vm_page_t *next)
-{
- vm_object_t object;
- vm_page_t m_tmp;
- struct vnode *vp;
- struct mount *mp;
- int vfslocked;
-
- mtx_assert(&vm_page_queue_mtx, MA_OWNED);
- vm_page_lock_assert(m, MA_OWNED);
- object = m->object;
- if (!VM_OBJECT_TRYLOCK(object) &&
- (!vm_pageout_fallback_object_lock(m, next) || m->hold_count != 0)) {
- vm_page_unlock(m);
- VM_OBJECT_UNLOCK(object);
- return (EAGAIN);
- }
- if (vm_page_sleep_if_busy(m, TRUE, "vpctw0")) {
- VM_OBJECT_UNLOCK(object);
- vm_page_lock_queues();
- return (EBUSY);
- }
- vm_page_test_dirty(m);
- if (m->dirty == 0)
- pmap_remove_all(m);
- if (m->dirty != 0) {
- vm_page_unlock(m);
- if ((object->flags & OBJ_DEAD) != 0) {
- VM_OBJECT_UNLOCK(object);
- return (EAGAIN);
- }
- if (object->type == OBJT_VNODE) {
- vm_page_unlock_queues();
- vp = object->handle;
- vm_object_reference_locked(object);
- VM_OBJECT_UNLOCK(object);
- (void) vn_start_write(vp, &mp, V_WAIT);
- vfslocked = VFS_LOCK_GIANT(vp->v_mount);
- vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
- VM_OBJECT_LOCK(object);
- vm_object_page_clean(object, 0, 0, OBJPC_SYNC);
- VM_OBJECT_UNLOCK(object);
- VOP_UNLOCK(vp, 0);
- VFS_UNLOCK_GIANT(vfslocked);
- vm_object_deallocate(object);
- vn_finished_write(mp);
- vm_page_lock_queues();
- return (0);
- } else if (object->type == OBJT_SWAP ||
- object->type == OBJT_DEFAULT) {
- vm_page_unlock_queues();
- m_tmp = m;
- vm_pageout_flush(&m_tmp, 1, VM_PAGER_PUT_SYNC, 0,
- NULL, NULL);
- VM_OBJECT_UNLOCK(object);
- vm_page_lock_queues();
- return (0);
- }
- } else {
- vm_page_cache(m);
- vm_page_unlock(m);
- }
- VM_OBJECT_UNLOCK(object);
- return (0);
-}
-
-static int
-vm_contig_launder(int queue, vm_paddr_t low, vm_paddr_t high)
-{
- vm_page_t m, next;
- vm_paddr_t pa;
- int error;
-
- TAILQ_FOREACH_SAFE(m, &vm_page_queues[queue].pl, pageq, next) {
-
- /* Skip marker pages */
- if ((m->flags & PG_MARKER) != 0)
- continue;
-
- pa = VM_PAGE_TO_PHYS(m);
- if (pa < low || pa + PAGE_SIZE > high)
- continue;
-
- if (!vm_pageout_page_lock(m, &next) || m->hold_count != 0) {
- vm_page_unlock(m);
- continue;
- }
- KASSERT(m->queue == queue,
- ("vm_contig_launder: page %p's queue is not %d", m, queue));
- error = vm_contig_launder_page(m, &next);
- vm_page_lock_assert(m, MA_NOTOWNED);
- if (error == 0)
- return (TRUE);
- if (error == EBUSY)
- return (FALSE);
- }
- return (FALSE);
-}
-
-/*
- * Increase the number of cached pages.
- */
-void
-vm_contig_grow_cache(int tries, vm_paddr_t low, vm_paddr_t high)
-{
- int actl, actmax, inactl, inactmax;
-
- vm_page_lock_queues();
- inactl = 0;
- inactmax = tries < 1 ? 0 : cnt.v_inactive_count;
- actl = 0;
- actmax = tries < 2 ? 0 : cnt.v_active_count;
-again:
- if (inactl < inactmax && vm_contig_launder(PQ_INACTIVE, low, high)) {
- inactl++;
- goto again;
- }
- if (actl < actmax && vm_contig_launder(PQ_ACTIVE, low, high)) {
- actl++;
- goto again;
- }
- vm_page_unlock_queues();
-}
-
-/*
- * Allocates a region from the kernel address map and pages within the
- * specified physical address range to the kernel object, creates a wired
- * mapping from the region to these pages, and returns the region's starting
- * virtual address. The allocated pages are not necessarily physically
- * contiguous. If M_ZERO is specified through the given flags, then the pages
- * are zeroed before they are mapped.
- */
-vm_offset_t
-kmem_alloc_attr(vm_map_t map, vm_size_t size, int flags, vm_paddr_t low,
- vm_paddr_t high, vm_memattr_t memattr)
-{
- vm_object_t object = kernel_object;
- vm_offset_t addr;
- vm_ooffset_t end_offset, offset;
- vm_page_t m;
- int pflags, tries;
-
- size = round_page(size);
- vm_map_lock(map);
- if (vm_map_findspace(map, vm_map_min(map), size, &addr)) {
- vm_map_unlock(map);
- return (0);
- }
- offset = addr - VM_MIN_KERNEL_ADDRESS;
- vm_object_reference(object);
- vm_map_insert(map, object, offset, addr, addr + size, VM_PROT_ALL,
- VM_PROT_ALL, 0);
- if ((flags & (M_NOWAIT | M_USE_RESERVE)) == M_NOWAIT)
- pflags = VM_ALLOC_INTERRUPT | VM_ALLOC_NOBUSY;
- else
- pflags = VM_ALLOC_SYSTEM | VM_ALLOC_NOBUSY;
- if (flags & M_ZERO)
- pflags |= VM_ALLOC_ZERO;
- VM_OBJECT_LOCK(object);
- end_offset = offset + size;
- for (; offset < end_offset; offset += PAGE_SIZE) {
- tries = 0;
-retry:
- m = vm_page_alloc_contig(object, OFF_TO_IDX(offset), pflags, 1,
- low, high, PAGE_SIZE, 0, memattr);
- if (m == NULL) {
- VM_OBJECT_UNLOCK(object);
- if (tries < ((flags & M_NOWAIT) != 0 ? 1 : 3)) {
- vm_map_unlock(map);
- vm_contig_grow_cache(tries, low, high);
- vm_map_lock(map);
- VM_OBJECT_LOCK(object);
- tries++;
- goto retry;
- }
- /*
- * Since the pages that were allocated by any previous
- * iterations of this loop are not busy, they can be
- * freed by vm_object_page_remove(), which is called
- * by vm_map_delete().
- */
- vm_map_delete(map, addr, addr + size);
- vm_map_unlock(map);
- return (0);
- }
- if ((flags & M_ZERO) && (m->flags & PG_ZERO) == 0)
- pmap_zero_page(m);
- m->valid = VM_PAGE_BITS_ALL;
- }
- VM_OBJECT_UNLOCK(object);
- vm_map_unlock(map);
- vm_map_wire(map, addr, addr + size, VM_MAP_WIRE_SYSTEM |
- VM_MAP_WIRE_NOHOLES);
- return (addr);
-}
-
-/*
- * Allocates a region from the kernel address map, inserts the
- * given physically contiguous pages into the kernel object,
- * creates a wired mapping from the region to the pages, and
- * returns the region's starting virtual address. If M_ZERO is
- * specified through the given flags, then the pages are zeroed
- * before they are mapped.
- */
-vm_offset_t
-kmem_alloc_contig(vm_map_t map, vm_size_t size, int flags, vm_paddr_t low,
- vm_paddr_t high, u_long alignment, vm_paddr_t boundary,
- vm_memattr_t memattr)
-{
- vm_object_t object = kernel_object;
- vm_offset_t addr;
- vm_ooffset_t offset;
- vm_page_t end_m, m;
- int pflags, tries;
-
- size = round_page(size);
- vm_map_lock(map);
- if (vm_map_findspace(map, vm_map_min(map), size, &addr)) {
- vm_map_unlock(map);
- return (0);
- }
- offset = addr - VM_MIN_KERNEL_ADDRESS;
- vm_object_reference(object);
- vm_map_insert(map, object, offset, addr, addr + size, VM_PROT_ALL,
- VM_PROT_ALL, 0);
- if ((flags & (M_NOWAIT | M_USE_RESERVE)) == M_NOWAIT)
- pflags = VM_ALLOC_INTERRUPT | VM_ALLOC_NOBUSY;
- else
- pflags = VM_ALLOC_SYSTEM | VM_ALLOC_NOBUSY;
- if (flags & M_ZERO)
- pflags |= VM_ALLOC_ZERO;
- if (flags & M_NODUMP)
- pflags |= VM_ALLOC_NODUMP;
- VM_OBJECT_LOCK(object);
- tries = 0;
-retry:
- m = vm_page_alloc_contig(object, OFF_TO_IDX(offset), pflags,
- atop(size), low, high, alignment, boundary, memattr);
- if (m == NULL) {
- VM_OBJECT_UNLOCK(object);
- if (tries < ((flags & M_NOWAIT) != 0 ? 1 : 3)) {
- vm_map_unlock(map);
- vm_contig_grow_cache(tries, low, high);
- vm_map_lock(map);
- VM_OBJECT_LOCK(object);
- tries++;
- goto retry;
- }
- vm_map_delete(map, addr, addr + size);
- vm_map_unlock(map);
- return (0);
- }
- end_m = m + atop(size);
- for (; m < end_m; m++) {
- if ((flags & M_ZERO) && (m->flags & PG_ZERO) == 0)
- pmap_zero_page(m);
- m->valid = VM_PAGE_BITS_ALL;
- }
- VM_OBJECT_UNLOCK(object);
- vm_map_unlock(map);
- vm_map_wire(map, addr, addr + size, VM_MAP_WIRE_SYSTEM |
- VM_MAP_WIRE_NOHOLES);
- return (addr);
-}
diff --git a/sys/vm/vm_kern.c b/sys/vm/vm_kern.c
index 5e157a6..46e7f1c 100644
--- a/sys/vm/vm_kern.c
+++ b/sys/vm/vm_kern.c
@@ -195,6 +195,148 @@ kmem_alloc(map, size)
}
/*
+ * Allocates a region from the kernel address map and physical pages
+ * within the specified address range to the kernel object. Creates a
+ * wired mapping from this region to these pages, and returns the
+ * region's starting virtual address. The allocated pages are not
+ * necessarily physically contiguous. If M_ZERO is specified through the
+ * given flags, then the pages are zeroed before they are mapped.
+ */
+vm_offset_t
+kmem_alloc_attr(vm_map_t map, vm_size_t size, int flags, vm_paddr_t low,
+ vm_paddr_t high, vm_memattr_t memattr)
+{
+ vm_object_t object = kernel_object;
+ vm_offset_t addr;
+ vm_ooffset_t end_offset, offset;
+ vm_page_t m;
+ int pflags, tries;
+
+ size = round_page(size);
+ vm_map_lock(map);
+ if (vm_map_findspace(map, vm_map_min(map), size, &addr)) {
+ vm_map_unlock(map);
+ return (0);
+ }
+ offset = addr - VM_MIN_KERNEL_ADDRESS;
+ vm_object_reference(object);
+ vm_map_insert(map, object, offset, addr, addr + size, VM_PROT_ALL,
+ VM_PROT_ALL, 0);
+ if ((flags & (M_NOWAIT | M_USE_RESERVE)) == M_NOWAIT)
+ pflags = VM_ALLOC_INTERRUPT | VM_ALLOC_NOBUSY;
+ else
+ pflags = VM_ALLOC_SYSTEM | VM_ALLOC_NOBUSY;
+ if (flags & M_ZERO)
+ pflags |= VM_ALLOC_ZERO;
+ VM_OBJECT_LOCK(object);
+ end_offset = offset + size;
+ for (; offset < end_offset; offset += PAGE_SIZE) {
+ tries = 0;
+retry:
+ m = vm_page_alloc_contig(object, OFF_TO_IDX(offset), pflags, 1,
+ low, high, PAGE_SIZE, 0, memattr);
+ if (m == NULL) {
+ VM_OBJECT_UNLOCK(object);
+ if (tries < ((flags & M_NOWAIT) != 0 ? 1 : 3)) {
+ vm_map_unlock(map);
+ vm_pageout_grow_cache(tries, low, high);
+ vm_map_lock(map);
+ VM_OBJECT_LOCK(object);
+ tries++;
+ goto retry;
+ }
+
+ /*
+ * Since the pages that were allocated by any previous
+ * iterations of this loop are not busy, they can be
+ * freed by vm_object_page_remove(), which is called
+ * by vm_map_delete().
+ */
+ vm_map_delete(map, addr, addr + size);
+ vm_map_unlock(map);
+ return (0);
+ }
+ if ((flags & M_ZERO) && (m->flags & PG_ZERO) == 0)
+ pmap_zero_page(m);
+ m->valid = VM_PAGE_BITS_ALL;
+ }
+ VM_OBJECT_UNLOCK(object);
+ vm_map_unlock(map);
+ vm_map_wire(map, addr, addr + size, VM_MAP_WIRE_SYSTEM |
+ VM_MAP_WIRE_NOHOLES);
+ return (addr);
+}
+
+/*
+ * Allocates a region from the kernel address map and physically
+ * contiguous pages within the specified address range to the kernel
+ * object. Creates a wired mapping from this region to these pages, and
+ * returns the region's starting virtual address. If M_ZERO is specified
+ * through the given flags, then the pages are zeroed before they are
+ * mapped.
+ */
+vm_offset_t
+kmem_alloc_contig(vm_map_t map, vm_size_t size, int flags, vm_paddr_t low,
+ vm_paddr_t high, u_long alignment, vm_paddr_t boundary,
+ vm_memattr_t memattr)
+{
+ vm_object_t object = kernel_object;
+ vm_offset_t addr;
+ vm_ooffset_t offset;
+ vm_page_t end_m, m;
+ int pflags, tries;
+
+ size = round_page(size);
+ vm_map_lock(map);
+ if (vm_map_findspace(map, vm_map_min(map), size, &addr)) {
+ vm_map_unlock(map);
+ return (0);
+ }
+ offset = addr - VM_MIN_KERNEL_ADDRESS;
+ vm_object_reference(object);
+ vm_map_insert(map, object, offset, addr, addr + size, VM_PROT_ALL,
+ VM_PROT_ALL, 0);
+ if ((flags & (M_NOWAIT | M_USE_RESERVE)) == M_NOWAIT)
+ pflags = VM_ALLOC_INTERRUPT | VM_ALLOC_NOBUSY;
+ else
+ pflags = VM_ALLOC_SYSTEM | VM_ALLOC_NOBUSY;
+ if (flags & M_ZERO)
+ pflags |= VM_ALLOC_ZERO;
+ if (flags & M_NODUMP)
+ pflags |= VM_ALLOC_NODUMP;
+ VM_OBJECT_LOCK(object);
+ tries = 0;
+retry:
+ m = vm_page_alloc_contig(object, OFF_TO_IDX(offset), pflags,
+ atop(size), low, high, alignment, boundary, memattr);
+ if (m == NULL) {
+ VM_OBJECT_UNLOCK(object);
+ if (tries < ((flags & M_NOWAIT) != 0 ? 1 : 3)) {
+ vm_map_unlock(map);
+ vm_pageout_grow_cache(tries, low, high);
+ vm_map_lock(map);
+ VM_OBJECT_LOCK(object);
+ tries++;
+ goto retry;
+ }
+ vm_map_delete(map, addr, addr + size);
+ vm_map_unlock(map);
+ return (0);
+ }
+ end_m = m + atop(size);
+ for (; m < end_m; m++) {
+ if ((flags & M_ZERO) && (m->flags & PG_ZERO) == 0)
+ pmap_zero_page(m);
+ m->valid = VM_PAGE_BITS_ALL;
+ }
+ VM_OBJECT_UNLOCK(object);
+ vm_map_unlock(map);
+ vm_map_wire(map, addr, addr + size, VM_MAP_WIRE_SYSTEM |
+ VM_MAP_WIRE_NOHOLES);
+ return (addr);
+}
+
+/*
* kmem_free:
*
* Release a region of kernel virtual memory allocated
diff --git a/sys/vm/vm_map.h b/sys/vm/vm_map.h
index 056eac5..b3b1ad4 100644
--- a/sys/vm/vm_map.h
+++ b/sys/vm/vm_map.h
@@ -200,13 +200,13 @@ struct vm_map {
#ifdef _KERNEL
static __inline vm_offset_t
-vm_map_max(vm_map_t map)
+vm_map_max(const struct vm_map *map)
{
return (map->max_offset);
}
static __inline vm_offset_t
-vm_map_min(vm_map_t map)
+vm_map_min(const struct vm_map *map)
{
return (map->min_offset);
}
diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c
index ec96135..ccadd8d 100644
--- a/sys/vm/vm_page.c
+++ b/sys/vm/vm_page.c
@@ -451,63 +451,6 @@ vm_page_startup(vm_offset_t vaddr)
return (vaddr);
}
-
-CTASSERT(offsetof(struct vm_page, aflags) % sizeof(uint32_t) == 0);
-
-void
-vm_page_aflag_set(vm_page_t m, uint8_t bits)
-{
- uint32_t *addr, val;
-
- /*
- * The PGA_WRITEABLE flag can only be set if the page is managed and
- * VPO_BUSY. Currently, this flag is only set by pmap_enter().
- */
- KASSERT((bits & PGA_WRITEABLE) == 0 ||
- (m->oflags & (VPO_UNMANAGED | VPO_BUSY)) == VPO_BUSY,
- ("PGA_WRITEABLE and !VPO_BUSY"));
-
- /*
- * We want to use atomic updates for m->aflags, which is a
- * byte wide. Not all architectures provide atomic operations
- * on the single-byte destination. Punt and access the whole
- * 4-byte word with an atomic update. Parallel non-atomic
- * updates to the fields included in the update by proximity
- * are handled properly by atomics.
- */
- addr = (void *)&m->aflags;
- MPASS(((uintptr_t)addr & (sizeof(uint32_t) - 1)) == 0);
- val = bits;
-#if BYTE_ORDER == BIG_ENDIAN
- val <<= 24;
-#endif
- atomic_set_32(addr, val);
-}
-
-void
-vm_page_aflag_clear(vm_page_t m, uint8_t bits)
-{
- uint32_t *addr, val;
-
- /*
- * The PGA_REFERENCED flag can only be cleared if the object
- * containing the page is locked.
- */
- KASSERT((bits & PGA_REFERENCED) == 0 || VM_OBJECT_LOCKED(m->object),
- ("PGA_REFERENCED and !VM_OBJECT_LOCKED"));
-
- /*
- * See the comment in vm_page_aflag_set().
- */
- addr = (void *)&m->aflags;
- MPASS(((uintptr_t)addr & (sizeof(uint32_t) - 1)) == 0);
- val = bits;
-#if BYTE_ORDER == BIG_ENDIAN
- val <<= 24;
-#endif
- atomic_clear_32(addr, val);
-}
-
void
vm_page_reference(vm_page_t m)
{
@@ -1480,7 +1423,7 @@ retry:
cpindex = pindex;
for (m = m_ret; m < &m_ret[npages]; m++) {
m->aflags = 0;
- m->flags &= flags;
+ m->flags = (m->flags | PG_NODUMP) & flags;
if ((req & VM_ALLOC_WIRED) != 0)
m->wire_count = 1;
/* Unmanaged pages don't use "act_count". */
diff --git a/sys/vm/vm_page.h b/sys/vm/vm_page.h
index da7fd89..e95f173 100644
--- a/sys/vm/vm_page.h
+++ b/sys/vm/vm_page.h
@@ -237,13 +237,14 @@ extern struct vpglocks pa_lock[];
#define vm_page_queue_free_mtx vm_page_queue_free_lock.data
/*
- * These are the flags defined for vm_page.
- *
- * aflags are updated by atomic accesses. Use the vm_page_aflag_set()
- * and vm_page_aflag_clear() functions to set and clear the flags.
+ * The vm_page's aflags are updated using atomic operations. To set or clear
+ * these flags, the functions vm_page_aflag_set() and vm_page_aflag_clear()
+ * must be used. Neither these flags nor these functions are part of the KBI.
*
* PGA_REFERENCED may be cleared only if the object containing the page is
- * locked. It is set by both the MI and MD VM layers.
+ * locked. It is set by both the MI and MD VM layers. However, kernel
+ * loadable modules should not directly set this flag. They should call
+ * vm_page_reference() instead.
*
* PGA_WRITEABLE is set exclusively on managed pages by pmap_enter(). When it
* does so, the page must be VPO_BUSY. The MI VM layer must never access this
@@ -279,8 +280,12 @@ extern struct vpglocks pa_lock[];
#ifdef _KERNEL
+#include <sys/systm.h>
+
#include <vm/vm_param.h>
+#include <machine/atomic.h>
+
/*
* Each pageable resident page falls into one of five lists:
*
@@ -308,7 +313,6 @@ extern struct vpglocks pa_lock[];
*
*/
-struct vnode;
extern int vm_page_zero_count;
extern vm_page_t vm_page_array; /* First resident page in table */
@@ -348,8 +352,6 @@ extern struct vpglocks vm_page_queue_lock;
#define VM_ALLOC_COUNT_SHIFT 16
#define VM_ALLOC_COUNT(count) ((count) << VM_ALLOC_COUNT_SHIFT)
-void vm_page_aflag_set(vm_page_t m, uint8_t bits);
-void vm_page_aflag_clear(vm_page_t m, uint8_t bits);
void vm_page_busy(vm_page_t m);
void vm_page_flash(vm_page_t m);
void vm_page_io_start(vm_page_t m);
@@ -425,6 +427,75 @@ void vm_page_object_lock_assert(vm_page_t m);
#endif
/*
+ * We want to use atomic updates for the aflags field, which is 8 bits wide.
+ * However, not all architectures support atomic operations on 8-bit
+ * destinations. In order that we can easily use a 32-bit operation, we
+ * require that the aflags field be 32-bit aligned.
+ */
+CTASSERT(offsetof(struct vm_page, aflags) % sizeof(uint32_t) == 0);
+
+/*
+ * Clear the given bits in the specified page.
+ */
+static inline void
+vm_page_aflag_clear(vm_page_t m, uint8_t bits)
+{
+ uint32_t *addr, val;
+
+ /*
+ * The PGA_REFERENCED flag can only be cleared if the object
+ * containing the page is locked.
+ */
+ if ((bits & PGA_REFERENCED) != 0)
+ VM_PAGE_OBJECT_LOCK_ASSERT(m);
+
+ /*
+ * Access the whole 32-bit word containing the aflags field with an
+ * atomic update. Parallel non-atomic updates to the other fields
+ * within this word are handled properly by the atomic update.
+ */
+ addr = (void *)&m->aflags;
+ KASSERT(((uintptr_t)addr & (sizeof(uint32_t) - 1)) == 0,
+ ("vm_page_aflag_clear: aflags is misaligned"));
+ val = bits;
+#if BYTE_ORDER == BIG_ENDIAN
+ val <<= 24;
+#endif
+ atomic_clear_32(addr, val);
+}
+
+/*
+ * Set the given bits in the specified page.
+ */
+static inline void
+vm_page_aflag_set(vm_page_t m, uint8_t bits)
+{
+ uint32_t *addr, val;
+
+ /*
+ * The PGA_WRITEABLE flag can only be set if the page is managed and
+ * VPO_BUSY. Currently, this flag is only set by pmap_enter().
+ */
+ KASSERT((bits & PGA_WRITEABLE) == 0 ||
+ (m->oflags & (VPO_UNMANAGED | VPO_BUSY)) == VPO_BUSY,
+ ("vm_page_aflag_set: PGA_WRITEABLE and !VPO_BUSY"));
+
+ /*
+ * Access the whole 32-bit word containing the aflags field with an
+ * atomic update. Parallel non-atomic updates to the other fields
+ * within this word are handled properly by the atomic update.
+ */
+ addr = (void *)&m->aflags;
+ KASSERT(((uintptr_t)addr & (sizeof(uint32_t) - 1)) == 0,
+ ("vm_page_aflag_set: aflags is misaligned"));
+ val = bits;
+#if BYTE_ORDER == BIG_ENDIAN
+ val <<= 24;
+#endif
+ atomic_set_32(addr, val);
+}
+
+/*
* vm_page_dirty:
*
* Set all bits in the page's dirty field.
diff --git a/sys/vm/vm_pageout.c b/sys/vm/vm_pageout.c
index 11d040d..3994ce1 100644
--- a/sys/vm/vm_pageout.c
+++ b/sys/vm/vm_pageout.c
@@ -209,11 +209,14 @@ int vm_page_max_wired; /* XXX max # of wired pages system-wide */
SYSCTL_INT(_vm, OID_AUTO, max_wired,
CTLFLAG_RW, &vm_page_max_wired, 0, "System-wide limit to wired page count");
+static boolean_t vm_pageout_fallback_object_lock(vm_page_t, vm_page_t *);
+static boolean_t vm_pageout_launder(int, int, vm_paddr_t, vm_paddr_t);
#if !defined(NO_SWAPPING)
static void vm_pageout_map_deactivate_pages(vm_map_t, long);
static void vm_pageout_object_deactivate_pages(pmap_t, vm_object_t, long);
static void vm_req_vmdaemon(int req);
#endif
+static boolean_t vm_pageout_page_lock(vm_page_t, vm_page_t *);
static void vm_pageout_page_stats(void);
/*
@@ -247,7 +250,7 @@ vm_pageout_init_marker(vm_page_t marker, u_short queue)
* This function depends on both the lock portion of struct vm_object
* and normal struct vm_page being type stable.
*/
-boolean_t
+static boolean_t
vm_pageout_fallback_object_lock(vm_page_t m, vm_page_t *next)
{
struct vm_page marker;
@@ -286,7 +289,7 @@ vm_pageout_fallback_object_lock(vm_page_t m, vm_page_t *next)
*
* This function depends on normal struct vm_page being type stable.
*/
-boolean_t
+static boolean_t
vm_pageout_page_lock(vm_page_t m, vm_page_t *next)
{
struct vm_page marker;
@@ -558,6 +561,138 @@ vm_pageout_flush(vm_page_t *mc, int count, int flags, int mreq, int *prunlen,
return (numpagedout);
}
+static boolean_t
+vm_pageout_launder(int queue, int tries, vm_paddr_t low, vm_paddr_t high)
+{
+ struct mount *mp;
+ struct vnode *vp;
+ vm_object_t object;
+ vm_paddr_t pa;
+ vm_page_t m, m_tmp, next;
+ int vfslocked;
+
+ vm_page_lock_queues();
+ TAILQ_FOREACH_SAFE(m, &vm_page_queues[queue].pl, pageq, next) {
+ KASSERT(m->queue == queue,
+ ("vm_pageout_launder: page %p's queue is not %d", m,
+ queue));
+ if ((m->flags & PG_MARKER) != 0)
+ continue;
+ pa = VM_PAGE_TO_PHYS(m);
+ if (pa < low || pa + PAGE_SIZE > high)
+ continue;
+ if (!vm_pageout_page_lock(m, &next) || m->hold_count != 0) {
+ vm_page_unlock(m);
+ continue;
+ }
+ object = m->object;
+ if (!VM_OBJECT_TRYLOCK(object) &&
+ (!vm_pageout_fallback_object_lock(m, &next) ||
+ m->hold_count != 0)) {
+ vm_page_unlock(m);
+ VM_OBJECT_UNLOCK(object);
+ continue;
+ }
+ if ((m->oflags & VPO_BUSY) != 0 || m->busy != 0) {
+ if (tries == 0) {
+ vm_page_unlock(m);
+ VM_OBJECT_UNLOCK(object);
+ continue;
+ }
+ vm_page_sleep(m, "vpctw0");
+ VM_OBJECT_UNLOCK(object);
+ return (FALSE);
+ }
+ vm_page_test_dirty(m);
+ if (m->dirty == 0)
+ pmap_remove_all(m);
+ if (m->dirty != 0) {
+ vm_page_unlock(m);
+ if (tries == 0 || (object->flags & OBJ_DEAD) != 0) {
+ VM_OBJECT_UNLOCK(object);
+ continue;
+ }
+ if (object->type == OBJT_VNODE) {
+ vm_page_unlock_queues();
+ vp = object->handle;
+ vm_object_reference_locked(object);
+ VM_OBJECT_UNLOCK(object);
+ (void)vn_start_write(vp, &mp, V_WAIT);
+ vfslocked = VFS_LOCK_GIANT(vp->v_mount);
+ vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
+ VM_OBJECT_LOCK(object);
+ vm_object_page_clean(object, 0, 0, OBJPC_SYNC);
+ VM_OBJECT_UNLOCK(object);
+ VOP_UNLOCK(vp, 0);
+ VFS_UNLOCK_GIANT(vfslocked);
+ vm_object_deallocate(object);
+ vn_finished_write(mp);
+ return (TRUE);
+ } else if (object->type == OBJT_SWAP ||
+ object->type == OBJT_DEFAULT) {
+ vm_page_unlock_queues();
+ m_tmp = m;
+ vm_pageout_flush(&m_tmp, 1, VM_PAGER_PUT_SYNC,
+ 0, NULL, NULL);
+ VM_OBJECT_UNLOCK(object);
+ return (TRUE);
+ }
+ } else {
+ vm_page_cache(m);
+ vm_page_unlock(m);
+ }
+ VM_OBJECT_UNLOCK(object);
+ }
+ vm_page_unlock_queues();
+ return (FALSE);
+}
+
+/*
+ * Increase the number of cached pages. The specified value, "tries",
+ * determines which categories of pages are cached:
+ *
+ * 0: All clean, inactive pages within the specified physical address range
+ * are cached. Will not sleep.
+ * 1: The vm_lowmem handlers are called. All inactive pages within
+ * the specified physical address range are cached. May sleep.
+ * 2: The vm_lowmem handlers are called. All inactive and active pages
+ * within the specified physical address range are cached. May sleep.
+ */
+void
+vm_pageout_grow_cache(int tries, vm_paddr_t low, vm_paddr_t high)
+{
+ int actl, actmax, inactl, inactmax;
+
+ if (tries > 0) {
+ /*
+ * Decrease registered cache sizes. The vm_lowmem handlers
+ * may acquire locks and/or sleep, so they can only be invoked
+ * when "tries" is greater than zero.
+ */
+ EVENTHANDLER_INVOKE(vm_lowmem, 0);
+
+ /*
+ * We do this explicitly after the caches have been drained
+ * above.
+ */
+ uma_reclaim();
+ }
+ inactl = 0;
+ inactmax = cnt.v_inactive_count;
+ actl = 0;
+ actmax = tries < 2 ? 0 : cnt.v_active_count;
+again:
+ if (inactl < inactmax && vm_pageout_launder(PQ_INACTIVE, tries, low,
+ high)) {
+ inactl++;
+ goto again;
+ }
+ if (actl < actmax && vm_pageout_launder(PQ_ACTIVE, tries, low, high)) {
+ actl++;
+ goto again;
+ }
+}
+
#if !defined(NO_SWAPPING)
/*
* vm_pageout_object_deactivate_pages
@@ -738,7 +873,7 @@ vm_pageout_scan(int pass)
vm_page_t m, next;
struct vm_page marker;
int page_shortage, maxscan, pcount;
- int addl_page_shortage, addl_page_shortage_init;
+ int addl_page_shortage;
vm_object_t object;
int actcount;
int vnodes_skipped = 0;
@@ -754,13 +889,19 @@ vm_pageout_scan(int pass)
*/
uma_reclaim();
- addl_page_shortage_init = atomic_readandclear_int(&vm_pageout_deficit);
+ /*
+ * The addl_page_shortage is the the number of temporarily
+ * stuck pages in the inactive queue. In other words, the
+ * number of pages from cnt.v_inactive_count that should be
+ * discounted in setting the target for the active queue scan.
+ */
+ addl_page_shortage = atomic_readandclear_int(&vm_pageout_deficit);
/*
* Calculate the number of pages we want to either free or move
* to the cache.
*/
- page_shortage = vm_paging_target() + addl_page_shortage_init;
+ page_shortage = vm_paging_target() + addl_page_shortage;
vm_pageout_init_marker(&marker, PQ_INACTIVE);
@@ -786,8 +927,6 @@ vm_pageout_scan(int pass)
maxlaunder = 10000;
vm_page_lock_queues();
queues_locked = TRUE;
-rescan0:
- addl_page_shortage = addl_page_shortage_init;
maxscan = cnt.v_inactive_count;
for (m = TAILQ_FIRST(&vm_page_queues[PQ_INACTIVE].pl);
@@ -795,12 +934,9 @@ rescan0:
m = next) {
KASSERT(queues_locked, ("unlocked queues"));
mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ KASSERT(m->queue == PQ_INACTIVE, ("Inactive queue %p", m));
cnt.v_pdpages++;
-
- if (m->queue != PQ_INACTIVE)
- goto rescan0;
-
next = TAILQ_NEXT(m, pageq);
/*
@@ -815,38 +951,31 @@ rescan0:
("Unmanaged page %p cannot be in inactive queue", m));
/*
- * Lock the page.
+ * The page or object lock acquisitions fail if the
+ * page was removed from the queue or moved to a
+ * different position within the queue. In either
+ * case, addl_page_shortage should not be incremented.
*/
if (!vm_pageout_page_lock(m, &next)) {
vm_page_unlock(m);
- addl_page_shortage++;
continue;
}
-
- /*
- * A held page may be undergoing I/O, so skip it.
- */
- if (m->hold_count) {
+ object = m->object;
+ if (!VM_OBJECT_TRYLOCK(object) &&
+ !vm_pageout_fallback_object_lock(m, &next)) {
vm_page_unlock(m);
- vm_page_requeue(m);
- addl_page_shortage++;
+ VM_OBJECT_UNLOCK(object);
continue;
}
/*
- * Don't mess with busy pages, keep in the front of the
- * queue, most likely are being paged out.
+ * Don't mess with busy pages, keep them at at the
+ * front of the queue, most likely they are being
+ * paged out. Increment addl_page_shortage for busy
+ * pages, because they may leave the inactive queue
+ * shortly after page scan is finished.
*/
- object = m->object;
- if (!VM_OBJECT_TRYLOCK(object) &&
- (!vm_pageout_fallback_object_lock(m, &next) ||
- m->hold_count != 0)) {
- VM_OBJECT_UNLOCK(object);
- vm_page_unlock(m);
- addl_page_shortage++;
- continue;
- }
- if (m->busy || (m->oflags & VPO_BUSY)) {
+ if (m->busy != 0 || (m->oflags & VPO_BUSY) != 0) {
vm_page_unlock(m);
VM_OBJECT_UNLOCK(object);
addl_page_shortage++;
@@ -906,6 +1035,21 @@ rescan0:
goto relock_queues;
}
+ if (m->hold_count != 0) {
+ vm_page_unlock(m);
+ VM_OBJECT_UNLOCK(object);
+
+ /*
+ * Held pages are essentially stuck in the
+ * queue. So, they ought to be discounted
+ * from cnt.v_inactive_count. See the
+ * calculation of the page_shortage for the
+ * loop over the active queue below.
+ */
+ addl_page_shortage++;
+ goto relock_queues;
+ }
+
/*
* If the upper level VM system does not believe that the page
* is fully dirty, but it is mapped for write access, then we
diff --git a/sys/vm/vm_pageout.h b/sys/vm/vm_pageout.h
index 6897bbb..c7b4e90 100644
--- a/sys/vm/vm_pageout.h
+++ b/sys/vm/vm_pageout.h
@@ -101,10 +101,8 @@ extern void vm_wait(void);
extern void vm_waitpfault(void);
#ifdef _KERNEL
-boolean_t vm_pageout_fallback_object_lock(vm_page_t, vm_page_t *);
int vm_pageout_flush(vm_page_t *, int, int, int, int *, boolean_t *);
+void vm_pageout_grow_cache(int, vm_paddr_t, vm_paddr_t);
void vm_pageout_oom(int shortage);
-boolean_t vm_pageout_page_lock(vm_page_t, vm_page_t *);
-void vm_contig_grow_cache(int, vm_paddr_t, vm_paddr_t);
#endif
#endif /* _VM_VM_PAGEOUT_H_ */
diff --git a/sys/vm/vm_reserv.c b/sys/vm/vm_reserv.c
index 10db93c..549e710 100644
--- a/sys/vm/vm_reserv.c
+++ b/sys/vm/vm_reserv.c
@@ -445,7 +445,7 @@ vm_reserv_alloc_contig(vm_object_t object, vm_pindex_t pindex, u_long npages,
m += VM_LEVEL_0_NPAGES;
first += VM_LEVEL_0_NPAGES;
allocpages -= VM_LEVEL_0_NPAGES;
- } while (allocpages > VM_LEVEL_0_NPAGES);
+ } while (allocpages > 0);
return (m_ret);
/*
diff --git a/sys/x86/include/specialreg.h b/sys/x86/include/specialreg.h
index ff6a777..7084e30 100644
--- a/sys/x86/include/specialreg.h
+++ b/sys/x86/include/specialreg.h
@@ -247,6 +247,11 @@
#define CPUID_TYPE_CORE 2
/*
+ * CPUID instruction 0xd Processor Extended State Enumeration Sub-leaf 1
+ */
+#define CPUID_EXTSTATE_XSAVEOPT 0x00000001
+
+/*
* AMD extended function 8000_0007h edx info
*/
#define AMDPM_TS 0x00000001
diff --git a/sys/x86/x86/busdma_machdep.c b/sys/x86/x86/busdma_machdep.c
index 76d4926..8735b15 100644
--- a/sys/x86/x86/busdma_machdep.c
+++ b/sys/x86/x86/busdma_machdep.c
@@ -42,6 +42,8 @@ __FBSDID("$FreeBSD$");
#include <sys/sysctl.h>
#include <vm/vm.h>
+#include <vm/vm_extern.h>
+#include <vm/vm_kern.h>
#include <vm/vm_page.h>
#include <vm/vm_map.h>
@@ -131,7 +133,7 @@ struct bus_dmamap {
static STAILQ_HEAD(, bus_dmamap) bounce_map_waitinglist;
static STAILQ_HEAD(, bus_dmamap) bounce_map_callbacklist;
-static struct bus_dmamap nobounce_dmamap;
+static struct bus_dmamap nobounce_dmamap, contig_dmamap;
static void init_bounce_pages(void *dummy);
static int alloc_bounce_zone(bus_dma_tag_t dmat);
@@ -465,7 +467,7 @@ bus_dmamap_create(bus_dma_tag_t dmat, int flags, bus_dmamap_t *mapp)
int
bus_dmamap_destroy(bus_dma_tag_t dmat, bus_dmamap_t map)
{
- if (map != NULL && map != &nobounce_dmamap) {
+ if (map != NULL && map != &nobounce_dmamap && map != &contig_dmamap) {
if (STAILQ_FIRST(&map->bpages) != NULL) {
CTR3(KTR_BUSDMA, "%s: tag %p error %d",
__func__, dmat, EBUSY);
@@ -490,6 +492,7 @@ int
bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags,
bus_dmamap_t *mapp)
{
+ vm_memattr_t attr;
int mflags;
if (flags & BUS_DMA_NOWAIT)
@@ -512,6 +515,10 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags,
}
if (flags & BUS_DMA_ZERO)
mflags |= M_ZERO;
+ if (flags & BUS_DMA_NOCACHE)
+ attr = VM_MEMATTR_UNCACHEABLE;
+ else
+ attr = VM_MEMATTR_DEFAULT;
/*
* XXX:
@@ -523,7 +530,8 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags,
*/
if ((dmat->maxsize <= PAGE_SIZE) &&
(dmat->alignment < dmat->maxsize) &&
- dmat->lowaddr >= ptoa((vm_paddr_t)Maxmem)) {
+ dmat->lowaddr >= ptoa((vm_paddr_t)Maxmem) &&
+ attr == VM_MEMATTR_DEFAULT) {
*vaddr = malloc(dmat->maxsize, M_DEVBUF, mflags);
} else {
/*
@@ -532,9 +540,10 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags,
* multi-seg allocations yet though.
* XXX Certain AGP hardware does.
*/
- *vaddr = contigmalloc(dmat->maxsize, M_DEVBUF, mflags,
- 0ul, dmat->lowaddr, dmat->alignment? dmat->alignment : 1ul,
- dmat->boundary);
+ *vaddr = (void *)kmem_alloc_contig(kernel_map, dmat->maxsize,
+ mflags, 0ul, dmat->lowaddr, dmat->alignment ?
+ dmat->alignment : 1ul, dmat->boundary, attr);
+ *mapp = &contig_dmamap;
}
if (*vaddr == NULL) {
CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d",
@@ -543,9 +552,6 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags,
} else if (vtophys(*vaddr) & (dmat->alignment - 1)) {
printf("bus_dmamem_alloc failed to align memory properly.\n");
}
- if (flags & BUS_DMA_NOCACHE)
- pmap_change_attr((vm_offset_t)*vaddr, dmat->maxsize,
- PAT_UNCACHEABLE);
CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d",
__func__, dmat, dmat->flags, 0);
return (0);
@@ -560,18 +566,15 @@ bus_dmamem_free(bus_dma_tag_t dmat, void *vaddr, bus_dmamap_t map)
{
/*
* dmamem does not need to be bounced, so the map should be
- * NULL
+ * NULL if malloc() was used and contig_dmamap if
+ * contigmalloc() was used.
*/
- if (map != NULL)
+ if (!(map == NULL || map == &contig_dmamap))
panic("bus_dmamem_free: Invalid map freed\n");
- pmap_change_attr((vm_offset_t)vaddr, dmat->maxsize, PAT_WRITE_BACK);
- if ((dmat->maxsize <= PAGE_SIZE) &&
- (dmat->alignment < dmat->maxsize) &&
- dmat->lowaddr >= ptoa((vm_paddr_t)Maxmem))
+ if (map == NULL)
free(vaddr, M_DEVBUF);
- else {
- contigfree(vaddr, dmat->maxsize, M_DEVBUF);
- }
+ else
+ kmem_free(kernel_map, (vm_offset_t)vaddr, dmat->maxsize);
CTR3(KTR_BUSDMA, "%s: tag %p flags 0x%x", __func__, dmat, dmat->flags);
}
@@ -662,7 +665,7 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dmat,
vm_offset_t vaddr;
int seg, error;
- if (map == NULL)
+ if (map == NULL || map == &contig_dmamap)
map = &nobounce_dmamap;
if ((dmat->flags & BUS_DMA_COULD_BOUNCE) != 0) {
@@ -1139,7 +1142,7 @@ add_bounce_page(bus_dma_tag_t dmat, bus_dmamap_t map, vm_offset_t vaddr,
struct bounce_page *bpage;
KASSERT(dmat->bounce_zone != NULL, ("no bounce zone in dma tag"));
- KASSERT(map != NULL && map != &nobounce_dmamap,
+ KASSERT(map != NULL && map != &nobounce_dmamap && map != &contig_dmamap,
("add_bounce_page: bad map %p", map));
bz = dmat->bounce_zone;
diff --git a/sys/x86/x86/local_apic.c b/sys/x86/x86/local_apic.c
index 99a681b..e994172 100644
--- a/sys/x86/x86/local_apic.c
+++ b/sys/x86/x86/local_apic.c
@@ -119,6 +119,7 @@ struct lapic {
u_long *la_timer_count;
u_long la_timer_period;
u_int la_timer_mode;
+ uint32_t lvt_timer_cache;
/* Include IDT_SYSCALL to make indexing easier. */
int la_ioint_irqs[APIC_NUM_IOINTS + 1];
} static lapics[MAX_APIC_ID + 1];
@@ -160,9 +161,11 @@ static struct eventtimer lapic_et;
static void lapic_enable(void);
static void lapic_resume(struct pic *pic);
-static void lapic_timer_oneshot(u_int count, int enable_int);
-static void lapic_timer_periodic(u_int count, int enable_int);
-static void lapic_timer_stop(void);
+static void lapic_timer_oneshot(struct lapic *,
+ u_int count, int enable_int);
+static void lapic_timer_periodic(struct lapic *,
+ u_int count, int enable_int);
+static void lapic_timer_stop(struct lapic *);
static void lapic_timer_set_divisor(u_int divisor);
static uint32_t lvt_mode(struct lapic *la, u_int pin, uint32_t value);
static int lapic_et_start(struct eventtimer *et,
@@ -370,7 +373,8 @@ lapic_setup(int boot)
lapic->lvt_pcint = lvt_mode(la, LVT_PMC, lapic->lvt_pcint);
/* Program timer LVT and setup handler. */
- lapic->lvt_timer = lvt_mode(la, LVT_TIMER, lapic->lvt_timer);
+ la->lvt_timer_cache = lapic->lvt_timer =
+ lvt_mode(la, LVT_TIMER, lapic->lvt_timer);
if (boot) {
snprintf(buf, sizeof(buf), "cpu%d:timer", PCPU_GET(cpuid));
intrcnt_add(buf, &la->la_timer_count);
@@ -382,9 +386,9 @@ lapic_setup(int boot)
lapic_id()));
lapic_timer_set_divisor(lapic_timer_divisor);
if (la->la_timer_mode == 1)
- lapic_timer_periodic(la->la_timer_period, 1);
+ lapic_timer_periodic(la, la->la_timer_period, 1);
else
- lapic_timer_oneshot(la->la_timer_period, 1);
+ lapic_timer_oneshot(la, la->la_timer_period, 1);
}
/* Program error LVT and clear any existing errors. */
@@ -489,13 +493,14 @@ lapic_et_start(struct eventtimer *et,
struct lapic *la;
u_long value;
+ la = &lapics[PCPU_GET(apic_id)];
if (et->et_frequency == 0) {
/* Start off with a divisor of 2 (power on reset default). */
lapic_timer_divisor = 2;
/* Try to calibrate the local APIC timer. */
do {
lapic_timer_set_divisor(lapic_timer_divisor);
- lapic_timer_oneshot(APIC_TIMER_MAX_COUNT, 0);
+ lapic_timer_oneshot(la, APIC_TIMER_MAX_COUNT, 0);
DELAY(1000000);
value = APIC_TIMER_MAX_COUNT - lapic->ccr_timer;
if (value != APIC_TIMER_MAX_COUNT)
@@ -515,22 +520,22 @@ lapic_et_start(struct eventtimer *et,
et->et_max_period.frac =
((0xfffffffeLLU << 32) / et->et_frequency) << 32;
}
- lapic_timer_set_divisor(lapic_timer_divisor);
- la = &lapics[lapic_id()];
+ if (la->la_timer_mode == 0)
+ lapic_timer_set_divisor(lapic_timer_divisor);
if (period != NULL) {
la->la_timer_mode = 1;
la->la_timer_period =
(et->et_frequency * (period->frac >> 32)) >> 32;
if (period->sec != 0)
la->la_timer_period += et->et_frequency * period->sec;
- lapic_timer_periodic(la->la_timer_period, 1);
+ lapic_timer_periodic(la, la->la_timer_period, 1);
} else {
la->la_timer_mode = 2;
la->la_timer_period =
(et->et_frequency * (first->frac >> 32)) >> 32;
if (first->sec != 0)
la->la_timer_period += et->et_frequency * first->sec;
- lapic_timer_oneshot(la->la_timer_period, 1);
+ lapic_timer_oneshot(la, la->la_timer_period, 1);
}
return (0);
}
@@ -538,10 +543,10 @@ lapic_et_start(struct eventtimer *et,
static int
lapic_et_stop(struct eventtimer *et)
{
- struct lapic *la = &lapics[lapic_id()];
+ struct lapic *la = &lapics[PCPU_GET(apic_id)];
la->la_timer_mode = 0;
- lapic_timer_stop();
+ lapic_timer_stop(la);
return (0);
}
@@ -835,11 +840,11 @@ lapic_timer_set_divisor(u_int divisor)
}
static void
-lapic_timer_oneshot(u_int count, int enable_int)
+lapic_timer_oneshot(struct lapic *la, u_int count, int enable_int)
{
u_int32_t value;
- value = lapic->lvt_timer;
+ value = la->lvt_timer_cache;
value &= ~APIC_LVTT_TM;
value |= APIC_LVTT_TM_ONE_SHOT;
if (enable_int)
@@ -849,11 +854,11 @@ lapic_timer_oneshot(u_int count, int enable_int)
}
static void
-lapic_timer_periodic(u_int count, int enable_int)
+lapic_timer_periodic(struct lapic *la, u_int count, int enable_int)
{
u_int32_t value;
- value = lapic->lvt_timer;
+ value = la->lvt_timer_cache;
value &= ~APIC_LVTT_TM;
value |= APIC_LVTT_TM_PERIODIC;
if (enable_int)
@@ -863,11 +868,11 @@ lapic_timer_periodic(u_int count, int enable_int)
}
static void
-lapic_timer_stop(void)
+lapic_timer_stop(struct lapic *la)
{
u_int32_t value;
- value = lapic->lvt_timer;
+ value = la->lvt_timer_cache;
value &= ~APIC_LVTT_TM;
value |= APIC_LVT_M;
lapic->lvt_timer = value;
diff --git a/sys/x86/x86/tsc.c b/sys/x86/x86/tsc.c
index 085c339..94bd520 100644
--- a/sys/x86/x86/tsc.c
+++ b/sys/x86/x86/tsc.c
@@ -82,7 +82,11 @@ static void tsc_freq_changed(void *arg, const struct cf_level *level,
static void tsc_freq_changing(void *arg, const struct cf_level *level,
int *status);
static unsigned tsc_get_timecount(struct timecounter *tc);
-static unsigned tsc_get_timecount_low(struct timecounter *tc);
+static inline unsigned tsc_get_timecount_low(struct timecounter *tc);
+static unsigned tsc_get_timecount_lfence(struct timecounter *tc);
+static unsigned tsc_get_timecount_low_lfence(struct timecounter *tc);
+static unsigned tsc_get_timecount_mfence(struct timecounter *tc);
+static unsigned tsc_get_timecount_low_mfence(struct timecounter *tc);
static void tsc_levels_changed(void *arg, int unit);
static struct timecounter tsc_timecounter = {
@@ -262,6 +266,10 @@ probe_tsc_freq(void)
(vm_guest == VM_GUEST_NO &&
CPUID_TO_FAMILY(cpu_id) >= 0x10))
tsc_is_invariant = 1;
+ if (cpu_feature & CPUID_SSE2) {
+ tsc_timecounter.tc_get_timecount =
+ tsc_get_timecount_mfence;
+ }
break;
case CPU_VENDOR_INTEL:
if ((amd_pminfo & AMDPM_TSC_INVARIANT) != 0 ||
@@ -271,6 +279,10 @@ probe_tsc_freq(void)
(CPUID_TO_FAMILY(cpu_id) == 0xf &&
CPUID_TO_MODEL(cpu_id) >= 0x3))))
tsc_is_invariant = 1;
+ if (cpu_feature & CPUID_SSE2) {
+ tsc_timecounter.tc_get_timecount =
+ tsc_get_timecount_lfence;
+ }
break;
case CPU_VENDOR_CENTAUR:
if (vm_guest == VM_GUEST_NO &&
@@ -278,6 +290,10 @@ probe_tsc_freq(void)
CPUID_TO_MODEL(cpu_id) >= 0xf &&
(rdmsr(0x1203) & 0x100000000ULL) == 0)
tsc_is_invariant = 1;
+ if (cpu_feature & CPUID_SSE2) {
+ tsc_timecounter.tc_get_timecount =
+ tsc_get_timecount_lfence;
+ }
break;
}
@@ -328,14 +344,30 @@ init_TSC(void)
#ifdef SMP
-#define TSC_READ(x) \
-static void \
-tsc_read_##x(void *arg) \
-{ \
- uint32_t *tsc = arg; \
- u_int cpu = PCPU_GET(cpuid); \
- \
- tsc[cpu * 3 + x] = rdtsc32(); \
+/*
+ * RDTSC is not a serializing instruction, and does not drain
+ * instruction stream, so we need to drain the stream before executing
+ * it. It could be fixed by use of RDTSCP, except the instruction is
+ * not available everywhere.
+ *
+ * Use CPUID for draining in the boot-time SMP constistency test. The
+ * timecounters use MFENCE for AMD CPUs, and LFENCE for others (Intel
+ * and VIA) when SSE2 is present, and nothing on older machines which
+ * also do not issue RDTSC prematurely. There, testing for SSE2 and
+ * vendor is too cumbersome, and we learn about TSC presence from CPUID.
+ *
+ * Do not use do_cpuid(), since we do not need CPUID results, which
+ * have to be written into memory with do_cpuid().
+ */
+#define TSC_READ(x) \
+static void \
+tsc_read_##x(void *arg) \
+{ \
+ uint32_t *tsc = arg; \
+ u_int cpu = PCPU_GET(cpuid); \
+ \
+ __asm __volatile("cpuid" : : : "eax", "ebx", "ecx", "edx"); \
+ tsc[cpu * 3 + x] = rdtsc32(); \
}
TSC_READ(0)
TSC_READ(1)
@@ -485,7 +517,16 @@ init:
for (shift = 0; shift < 31 && (tsc_freq >> shift) > max_freq; shift++)
;
if (shift > 0) {
- tsc_timecounter.tc_get_timecount = tsc_get_timecount_low;
+ if (cpu_feature & CPUID_SSE2) {
+ if (cpu_vendor_id == CPU_VENDOR_AMD) {
+ tsc_timecounter.tc_get_timecount =
+ tsc_get_timecount_low_mfence;
+ } else {
+ tsc_timecounter.tc_get_timecount =
+ tsc_get_timecount_low_lfence;
+ }
+ } else
+ tsc_timecounter.tc_get_timecount = tsc_get_timecount_low;
tsc_timecounter.tc_name = "TSC-low";
if (bootverbose)
printf("TSC timecounter discards lower %d bit(s)\n",
@@ -597,16 +638,48 @@ tsc_get_timecount(struct timecounter *tc __unused)
return (rdtsc32());
}
-static u_int
+static inline u_int
tsc_get_timecount_low(struct timecounter *tc)
{
uint32_t rv;
__asm __volatile("rdtsc; shrd %%cl, %%edx, %0"
- : "=a" (rv) : "c" ((int)(intptr_t)tc->tc_priv) : "edx");
+ : "=a" (rv) : "c" ((int)(intptr_t)tc->tc_priv) : "edx");
return (rv);
}
+static u_int
+tsc_get_timecount_lfence(struct timecounter *tc __unused)
+{
+
+ lfence();
+ return (rdtsc32());
+}
+
+static u_int
+tsc_get_timecount_low_lfence(struct timecounter *tc)
+{
+
+ lfence();
+ return (tsc_get_timecount_low(tc));
+}
+
+static u_int
+tsc_get_timecount_mfence(struct timecounter *tc __unused)
+{
+
+ mfence();
+ return (rdtsc32());
+}
+
+static u_int
+tsc_get_timecount_low_mfence(struct timecounter *tc)
+{
+
+ mfence();
+ return (tsc_get_timecount_low(tc));
+}
+
uint32_t
cpu_fill_vdso_timehands(struct vdso_timehands *vdso_th)
{
OpenPOWER on IntegriCloud