summaryrefslogtreecommitdiff
path: root/package/etrax-tools/src/e100boot/sbl
diff options
context:
space:
mode:
Diffstat (limited to 'package/etrax-tools/src/e100boot/sbl')
-rw-r--r--package/etrax-tools/src/e100boot/sbl/Makefile77
-rw-r--r--package/etrax-tools/src/e100boot/sbl/Makefile.in76
-rw-r--r--package/etrax-tools/src/e100boot/sbl/boot_images.c35
-rw-r--r--package/etrax-tools/src/e100boot/sbl/boot_images.h20
-rwxr-xr-xpackage/etrax-tools/src/e100boot/sbl/cconv158
-rw-r--r--package/etrax-tools/src/e100boot/sbl/common.c1677
-rw-r--r--package/etrax-tools/src/e100boot/sbl/common.h57
-rw-r--r--package/etrax-tools/src/e100boot/sbl/conf.h139
-rw-r--r--package/etrax-tools/src/e100boot/sbl/conf.h.in138
-rw-r--r--package/etrax-tools/src/e100boot/sbl/config.cache48
-rw-r--r--package/etrax-tools/src/e100boot/sbl/config.log90
-rwxr-xr-xpackage/etrax-tools/src/e100boot/sbl/config.status330
-rwxr-xr-xpackage/etrax-tools/src/e100boot/sbl/configure1405
-rw-r--r--package/etrax-tools/src/e100boot/sbl/configure.in19
-rwxr-xr-xpackage/etrax-tools/src/e100boot/sbl/create_regs.pl14
-rw-r--r--package/etrax-tools/src/e100boot/sbl/net_ima.c891
-rw-r--r--package/etrax-tools/src/e100boot/sbl/net_noleds_ima.c873
-rw-r--r--package/etrax-tools/src/e100boot/sbl/network.c706
-rw-r--r--package/etrax-tools/src/e100boot/sbl/network.h42
-rw-r--r--package/etrax-tools/src/e100boot/sbl/reg_des.h141
-rw-r--r--package/etrax-tools/src/e100boot/sbl/ser_ima.c825
-rw-r--r--package/etrax-tools/src/e100boot/sbl/ser_noleds_ima.c807
-rw-r--r--package/etrax-tools/src/e100boot/sbl/serial.c637
-rw-r--r--package/etrax-tools/src/e100boot/sbl/serial.h26
-rw-r--r--package/etrax-tools/src/e100boot/sbl/win32/Makefile8
-rwxr-xr-xpackage/etrax-tools/src/e100boot/sbl/win32/boot_images.c35
-rw-r--r--package/etrax-tools/src/e100boot/sbl/win32/common.c1651
-rwxr-xr-xpackage/etrax-tools/src/e100boot/sbl/win32/network.c681
28 files changed, 11606 insertions, 0 deletions
diff --git a/package/etrax-tools/src/e100boot/sbl/Makefile b/package/etrax-tools/src/e100boot/sbl/Makefile
new file mode 100644
index 000000000..ffb6e9fb1
--- /dev/null
+++ b/package/etrax-tools/src/e100boot/sbl/Makefile
@@ -0,0 +1,77 @@
+# Generated automatically from Makefile.in by configure.
+#
+# Makefile for e100boot, sbl side.
+#
+# $Id: Makefile.in,v 1.21 2003/11/21 11:38:30 pkj Exp $
+#
+
+VPATH := .:../cbl
+
+CC = gcc
+
+AXIS_USABLE_LIBS = UCLIBC GLIBC
+-include $(AXIS_TOP_DIR)/tools/build/Rules.axis
+
+CFLAGS += -I. -I../cbl/src -g -O2 -I../libpcap-0.4/ -I../libpcap-0.4/bpf/ -Wall -Wmissing-prototypes -Wno-unused
+LDFLAGS =
+LDLIBS = -L../libpcap-0.4/
+LDLIBS =
+LIBPCAP = ../libpcap-0.4/libpcap.a
+
+IMAGES := ../cbl/net/net.ima ../cbl/net_noleds/net_noleds.ima \
+ ../cbl/ser/ser.ima ../cbl/ser_noleds/ser_noleds.ima
+
+AUTOSRCS := $(addsuffix .c, $(subst .ima,_ima,$(notdir $(IMAGES))))
+
+OBJS := common.o network.o serial.o
+DEPS := $(addprefix deps/, $(subst .o,.d,$(OBJS)))
+
+STRIP ?= strip
+
+all: conf.h e100boot e100boot.stripped
+
+depend: $(DEPS)
+
+Makefile: Makefile.in
+ @echo -e "\n### New Makefile.in detected, regenerating Makefile..."
+ ./configure
+
+e100boot: common.o boot_images.o serial.o network.o $(LIBPCAP)
+ @echo -e '\n### Finally... Compiling e100boot.'
+ $(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@
+
+e100boot.stripped: e100boot
+ cp $< $@
+ $(STRIP) --strip-unneeded $@
+
+boot_images.o: boot_images.c boot_images.h $(AUTOSRCS)
+ $(CC) -c $(CFLAGS) $< -o $@
+
+conf.h:
+ ./configure
+
+reconf:
+ ./configure --cache=/dev/null
+
+clean:
+ rm -rf e100boot Makefile conf.h config.log config.cache config.status deps *.ima *.o *_ima.c* *~
+
+$(IMAGES):
+ @echo -e '\n### Making cbl boot images (*.ima)...'
+ $(MAKE) -C ../cbl
+
+ifneq ($(MAKECMDGOALS),clean)
+-include $(DEPS)
+endif
+
+deps/%.d: %.c
+ @[ -d deps ] || mkdir deps
+ $(CC) -M $(CFLAGS) $< > $@
+
+deps/%.d: %.S
+ @[ -d deps ] || mkdir deps
+ $(CC) -M $(CFLAGS) $< > $@
+
+%_ima.c: %.ima
+ @echo -e "### Creating $@ from image $<"
+ @./cconv $*_ima < $< > $@
diff --git a/package/etrax-tools/src/e100boot/sbl/Makefile.in b/package/etrax-tools/src/e100boot/sbl/Makefile.in
new file mode 100644
index 000000000..bdefd7151
--- /dev/null
+++ b/package/etrax-tools/src/e100boot/sbl/Makefile.in
@@ -0,0 +1,76 @@
+#
+# Makefile for e100boot, sbl side.
+#
+# $Id: Makefile.in,v 1.21 2003/11/21 11:38:30 pkj Exp $
+#
+
+VPATH := .:../cbl
+
+CC = @CC@
+
+AXIS_USABLE_LIBS = UCLIBC GLIBC
+-include $(AXIS_TOP_DIR)/tools/build/Rules.axis
+
+CFLAGS += -I. -I../cbl/src @CFLAGS@ -I../libpcap-0.4/ -I../libpcap-0.4/bpf/ -Wall -Wmissing-prototypes -Wno-unused
+LDFLAGS =
+LDLIBS = -L../libpcap-0.4/ @LIBS@
+LDLIBS =
+LIBPCAP = ../libpcap-0.4/libpcap.a
+
+IMAGES := ../cbl/net/net.ima ../cbl/net_noleds/net_noleds.ima \
+ ../cbl/ser/ser.ima ../cbl/ser_noleds/ser_noleds.ima
+
+AUTOSRCS := $(addsuffix .c, $(subst .ima,_ima,$(notdir $(IMAGES))))
+
+OBJS := common.o network.o serial.o
+DEPS := $(addprefix deps/, $(subst .o,.d,$(OBJS)))
+
+STRIP ?= strip
+
+all: conf.h e100boot e100boot.stripped
+
+depend: $(DEPS)
+
+Makefile: Makefile.in
+ @echo -e "\n### New Makefile.in detected, regenerating Makefile..."
+ ./configure
+
+e100boot: common.o boot_images.o serial.o network.o $(LIBPCAP)
+ @echo -e '\n### Finally... Compiling e100boot.'
+ $(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@
+
+e100boot.stripped: e100boot
+ cp $< $@
+ $(STRIP) --strip-unneeded $@
+
+boot_images.o: boot_images.c boot_images.h $(AUTOSRCS)
+ $(CC) -c $(CFLAGS) $< -o $@
+
+conf.h:
+ ./configure
+
+reconf:
+ ./configure --cache=/dev/null
+
+clean:
+ rm -rf e100boot Makefile conf.h config.log config.cache config.status deps *.ima *.o *_ima.c* *~
+
+$(IMAGES):
+ @echo -e '\n### Making cbl boot images (*.ima)...'
+ $(MAKE) -C ../cbl
+
+ifneq ($(MAKECMDGOALS),clean)
+-include $(DEPS)
+endif
+
+deps/%.d: %.c
+ @[ -d deps ] || mkdir deps
+ $(CC) -M $(CFLAGS) $< > $@
+
+deps/%.d: %.S
+ @[ -d deps ] || mkdir deps
+ $(CC) -M $(CFLAGS) $< > $@
+
+%_ima.c: %.ima
+ @echo -e "### Creating $@ from image $<"
+ @./cconv $*_ima < $< > $@
diff --git a/package/etrax-tools/src/e100boot/sbl/boot_images.c b/package/etrax-tools/src/e100boot/sbl/boot_images.c
new file mode 100644
index 000000000..3aabdf06d
--- /dev/null
+++ b/package/etrax-tools/src/e100boot/sbl/boot_images.c
@@ -0,0 +1,35 @@
+/* boot_images.c - Collection of the different boot images
+ * Johan Adolfsson Axis Communications AB
+ * $Id: boot_images.c,v 1.2 2002/07/01 14:37:51 pkj Exp $
+ */
+
+#include <stdio.h>
+#include "boot_images.h"
+
+/* We include the C files here to the size etc. easy */
+#include "net_ima.c"
+#include "ser_ima.c"
+#include "net_noleds_ima.c"
+#include "ser_noleds_ima.c"
+
+struct boot_image_info_type boot_image_info[] =
+{
+ { INTERNAL_NW, net_ima, sizeof net_ima, "Network boot (default)"},
+ { INTERNAL_SER, ser_ima, sizeof ser_ima, "Serial boot"},
+ { INTERNAL_SER_NOLEDS, ser_noleds_ima, sizeof ser_noleds_ima, "Serial boot, no leds"},
+ { INTERNAL_NW_NOLEDS, net_noleds_ima, sizeof net_noleds_ima, "Network boot, no leds"},
+
+ { "DBGNONE", net_ima, sizeof net_ima, "Obsolete (use INTERNAL_NW instead)" },
+ { "DBG0", net_ima, sizeof net_ima, "Obsolete (use INTERNAL_NW instead)" },
+ { "DBG1", net_ima, sizeof net_ima, "Obsolete (use INTERNAL_NW instead)" },
+ { "DBG2", net_ima, sizeof net_ima, "Obsolete (use INTERNAL_NW instead)" },
+ { "DBG3", net_ima, sizeof net_ima, "Obsolete (use INTERNAL_NW instead)" },
+
+ { "DBGNONE_NOLEDS", net_noleds_ima, sizeof net_noleds_ima, "Obsolete (use INTERNAL_NW_NOLEDS instead)" },
+ { "DBG0_NOLEDS", net_noleds_ima, sizeof net_noleds_ima, "Obsolete (use INTERNAL_NW_NOLEDS instead)" },
+ { "DBG1_NOLEDS", net_noleds_ima, sizeof net_noleds_ima, "Obsolete (use INTERNAL_NW_NOLEDS instead)" },
+ { "DBG2_NOLEDS", net_noleds_ima, sizeof net_noleds_ima, "Obsolete (use INTERNAL_NW_NOLEDS instead)" },
+ { "DBG3_NOLEDS", net_noleds_ima, sizeof net_noleds_ima, "Obsolete (use INTERNAL_NW_NOLEDS instead)" },
+
+ { NULL, NULL, 0, NULL } /* End of array */
+};
diff --git a/package/etrax-tools/src/e100boot/sbl/boot_images.h b/package/etrax-tools/src/e100boot/sbl/boot_images.h
new file mode 100644
index 000000000..cd7a1ae48
--- /dev/null
+++ b/package/etrax-tools/src/e100boot/sbl/boot_images.h
@@ -0,0 +1,20 @@
+/* boot_images.h - Collection of the different boot images
+ * Johan Adolfsson Axis Communications AB
+ * $Id: boot_images.h,v 1.2 2002/07/01 14:37:51 pkj Exp $
+ */
+
+#define INTERNAL_SER "INTERNAL_SER"
+#define INTERNAL_NW "INTERNAL_NW"
+#define INTERNAL_NW_NOLEDS "INTERNAL_NW_NOLEDS"
+#define INTERNAL_SER_NOLEDS "INTERNAL_SER_NOLEDS"
+
+typedef struct boot_image_info_type
+{
+ const char *name;
+ const char *ptr;
+ unsigned long len;
+ const char *info;
+} boot_image_info_type;
+
+extern struct boot_image_info_type boot_image_info[];
+
diff --git a/package/etrax-tools/src/e100boot/sbl/cconv b/package/etrax-tools/src/e100boot/sbl/cconv
new file mode 100755
index 000000000..ce5ab3d70
--- /dev/null
+++ b/package/etrax-tools/src/e100boot/sbl/cconv
@@ -0,0 +1,158 @@
+#!/usr/bin/perl
+#!
+#! FILE NAME : cconv
+#!
+#! PARAMETERS : Name of C program array variable.
+#!
+#! DESCRIPTION: Converts bytes of a binary file to C source code containing
+#! char array initialized with the binary file data.
+#!
+#! SUBROUTINES:
+#!
+#!---------------------------------------------------------------------------
+#! HISTORY
+#!
+#! DATE NAME CHANGES
+#! ---- ---- -------
+#! Dec 15 1997 Sven Ekstrom Initial version. Rewritten to Perl from C.
+#! Dec 16 1997 Sven Ekstrom Fixed bug that generated truncated result.
+#!
+#!---------------------------------------------------------------------------
+#!
+#! (C) Copyright 1997, Axis Communications AB, LUND, SWEDEN
+#!
+#!***************************************************************************
+# @(#) cconv 1.2 12/16/97
+
+#********************** CONSTANT SECTION ************************************
+
+$MyName = 'cconv';
+
+#
+# Number of bytes per line in the result.
+#
+$LineLength = 8;
+
+#********************** MAIN PROGRAM SECTION ********************************
+
+#
+# Make sure the command line contains the name of a C array.
+#
+if (scalar @ARGV != 1 || $ARGV[0] =~ /^-/)
+{
+ die "$MyName: Usage:\n",
+ "\n",
+ " Syntax\n",
+ " $MyName <name of C char array>\n",
+ "\n",
+ " <name of C char array> : This is the name of the char array where\n",
+ " the result is placed.\n",
+ "\n",
+ " Description\n",
+ "\n",
+ " Reads input from STDIN as binary data. Each byte of input data is\n",
+ " converted to C char data in hexadecimal form. The whole file read\n",
+ " from STDIN is converted and the result, C source code definition of\n",
+ " a char array, is printed on STDOUT.\n",
+ "\n";
+}
+
+#
+# Start with the name and version of this program and the name of the array.
+#
+print "\n",
+ "/* $MyName 1.2 12/16/97, Copyright (C) 1997, Axis Communications AB */\n",
+ "\n",
+ "const char $ARGV[0]\[\] =\n",
+ "{";
+
+#
+# Read all bytes from STDIN, convert them to char data and print them on
+# STDOUT.
+#
+$CurrentOffset = 0;
+while (!eof(STDIN))
+{
+ $Byte = ord(getc);
+
+ if ($CurrentOffset % $LineLength == 0)
+ {
+ #
+ # Start of a new line.
+ #
+ if ($CurrentOffset != 0)
+ {
+ #
+ # This is not the first byte.
+ #
+ print ",";
+ }
+ #
+ # The new line is indented by 2 spaces.
+ #
+ print "\n",
+ " ";
+ }
+ else
+ {
+ #
+ # Continuing an old line.
+ #
+ print ", ";
+ }
+
+ #
+ # Print the value of the byte as hex char data.
+ #
+ printf("'\\x%02x'", $Byte);
+
+ $CurrentOffset++;
+}
+
+if ($CurrentOffset == 0)
+{
+ #
+ # Initialize the array with a single byte of zero.
+ #
+ print "\n '\\x00'";
+}
+
+#
+# End with the closing bracket and semicolon.
+#
+print "\n",
+ "};\n";
+
+exit 0;
+
+
+#********************** SUBROUTINE DEFINITION SECTION ***********************
+
+#****************************************************************************
+#*
+#* SUBROUTINE :
+#*
+#* PARAMETERS :
+#*
+#* RETURNS :
+#*
+#* SIDE EFFECTS:
+#*
+#* DESCRIPTION :
+#*
+#*---------------------------------------------------------------------------
+#* HISTORY
+#*
+#* DATE NAME CHANGES
+#* ---- ---- -------
+#* May 05, 1995 Sven Ekstrom Initial version
+#*
+#****************************************************************************
+
+#sub NN
+#{
+# local() = @_;
+#
+#}
+
+#************************ END OF FILE cconv *********************************
diff --git a/package/etrax-tools/src/e100boot/sbl/common.c b/package/etrax-tools/src/e100boot/sbl/common.c
new file mode 100644
index 000000000..e0fe6ce29
--- /dev/null
+++ b/package/etrax-tools/src/e100boot/sbl/common.c
@@ -0,0 +1,1677 @@
+/*!***************************************************************************
+*!
+*! FILE NAME : common.c
+*!
+*! DESCRIPTION: Common functions for e100boot.
+*!
+*! ---------------------------------------------------------------------------
+*! HISTORY
+*!
+*! DATE NAME CHANGES
+*! ---- ---- -------
+*! ??? ? ???? Ronny Ranerup Initial version
+*! ---------------------------------------------------------------------------
+*! (C) Copyright 1999-2006 Axis Communications AB, LUND, SWEDEN
+*!***************************************************************************/
+/* $Id: common.c,v 1.13 2006/02/08 14:00:25 pkj Exp $ */
+
+/************************** Version **************************************/
+
+char version[] = "Time-stamp: $Id: common.c,v 1.13 2006/02/08 14:00:25 pkj Exp $";
+
+/************************** Include files ********************************/
+
+#include <byteswap.h>
+
+#include <conf.h>
+#include <e100boot.h>
+#include <pcap.h>
+#include "boot_images.h"
+#include <reg_des.h>
+#include <sv_addr_ag.h>
+#include <common.h>
+
+#include <serial.h>
+#include <network.h>
+
+/************************** Constants and macros *************************/
+
+#define BOOT_CMDS_FILE "BOOT_CMDS"
+
+/************************** Type definitions *****************************/
+
+struct label_t {
+ struct label_t *prev;
+ udword addr;
+ char *name;
+};
+
+/************************** Global variables *****************************/
+
+char needle[MAX_STRING_LEN] = "END"; /* search needle for --find */
+int needle_len = 3;
+
+int exitonfind = FALSE;
+
+int doing_flash = FALSE; /* Just a flag to see if we should
+ warn that it might take some
+ time. */
+
+int toFiles = FALSE; /* Dump all packets to files. */
+int cmdsOnly = FALSE; /* Just dump boot cmds to file. */
+int netBoot = TRUE; /* Do network boot? */
+int serBoot = FALSE; /* Do serial boot? */
+
+struct label_t *loop_label = NULL;
+struct label_t *label = NULL;
+
+struct packet_buf *first_packet = NULL;
+struct packet_buf *last_packet = NULL;
+
+struct packet_buf *boot_cmds_packet;
+
+int create_boot_loader = TRUE;
+
+/* We use the INTERNAL boot image as default */
+char boot_loader_file[MAX_STRING_LEN] = INTERNAL_NW;
+
+int noleds = FALSE; /* Use boot images that doesn't toggle leds? */
+
+struct boot_files_T *first_boot_file = NULL;
+struct boot_files_T *last_boot_file = NULL;
+
+unsigned int boot_cmds[SIZE_OF_BOOT_CMDS / sizeof(unsigned int)];
+int boot_cmds_cnt = 0;
+
+int svboot = FALSE;
+
+int quiet = 0;
+
+struct packet_header_T send_packet;
+struct packet_header_T *receive_packet;
+
+int seq_nr = 0;
+
+/* debug flags */
+int db1 = FALSE;
+int db2 = FALSE;
+int db3 = FALSE;
+int db4 = FALSE;
+
+char device[MAX_STRING_LEN] = "eth0";
+
+/************************** Function prototypes **************************/
+
+FILE *Fopen (const char *name, const char *mode);
+int main (int argc, const char *argv[]);
+int GetNumberOption (int *argNr, int argCount, const char *argVect[], unsigned int *ret, const char *option, int base);
+int GetStringOption (int *argNr, int argCount, const char *argVect[], char *ret, const char *option);
+int GetRegisterOption (int *argNr, int argCount, const char *argVect[], unsigned int *ret, const char *option, int base);
+struct boot_files_T* allocate_boot_file (struct boot_files_T *bf);
+struct packet_buf* CreateNewBootPacket (void);
+struct packet_buf* allocate_packet (struct packet_buf *p);
+void SigHandler (int sig);
+void CreateBootLoader (void);
+void FinishBootCmds (void);
+void ParseArgs (int argc, const char *argv[]);
+void PrintHelp (void);
+void CreateBootCmds (void);
+void handle_labels (void);
+void new_label (struct label_t **label, udword addr, const char *name);
+unsigned int swap_endian (unsigned int);
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: main
+*#
+*# PARAMETERS: Command line arguments.
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 961022 ronny Initial version
+*#
+*#***************************************************************************/
+
+int
+main(int argc, const char *argv[])
+{
+ ParseArgs(argc, argv);
+
+ if (cmdsOnly) {
+ /* We make this a special case to avoid messing up other code. */
+ CreateBootCmds();
+ FinishBootCmds();
+ SendToDevice(&boot_cmds_packet->data[SIZE_OF_HEADER],SIZE_OF_BOOT_CMDS);
+ exit(EXIT_SUCCESS);
+ }
+
+ if (netBoot && !toFiles) {
+ /* Do not bother with this if we just want to write the packets to
+ files. Means you do not have to be root to run --tofiles. */
+ net_init();
+ }
+ else if (serBoot) {
+ if (!SetupSerial()) {
+ exit(0);
+ }
+ }
+
+ CreateBootLoader();
+ CreateBootCmds();
+ FinishBootCmds();
+
+ printf("Starting boot...\n");
+ if (doing_flash) {
+ printf("We're doing a flash write, this may take up to a few minutes...\n");
+ }
+
+ if (toFiles) {
+ udword seq = 0;
+ struct packet_buf *p;
+
+ while((p = create_packet(seq++))) {
+ SendToDevice(p->data, p->size);
+ }
+
+ exit(EXIT_SUCCESS);
+ }
+
+ if (netBoot) {
+ NetBoot();
+ }
+ else if (serBoot) {
+ SerBoot();
+ }
+
+ printf("Done.\n");
+ return EXIT_SUCCESS;
+} /* main */
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: free_packet
+*#
+*# PARAMETERS: struct to free
+*#
+*# DESCRIPTION: Frees struct and data in struct.
+*#
+*# RETURNS: Pointer to next struct.
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 2000 02 07 ronny Initial version
+*#
+*#***************************************************************************/
+
+struct packet_buf*
+free_packet(struct packet_buf *p)
+{
+ struct packet_buf *next_p;
+
+ next_p = p->next;
+ free(p->data);
+ free(p);
+ return(next_p);
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: create_packet
+*#
+*# PARAMETERS: Sequence number of desired packet.
+*#
+*# DESCRIPTION:
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 2000 06 28 ronny Initial version
+*#
+*#***************************************************************************/
+
+struct packet_buf*
+create_packet(udword seq)
+{
+ struct packet_buf *p = first_packet;
+ /* Should check last first? */
+
+ if (db4) printf("> create_packet seq %d\n", seq);
+
+ while (p) {
+ if (p->seq == seq) {
+ return(p);
+ }
+ p = p->next;
+ }
+
+ return(CreateNewBootPacket());
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: find_string
+*#
+*# PARAMETERS: New string to search.
+*#
+*# DESCRIPTION: Searches a number of strings for needle[], including strings
+*# overlapping between different calls.
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 020502 ronny Initial version
+*#
+*#***************************************************************************/
+
+void
+find_string(char *str)
+{
+ static int matched = 0;
+ int hs[MAX_STRING_LEN];
+ static int cur_hs = 0;
+ static int hs_len = 0;
+ static int last_hs = 0;
+
+ static int cur_needle = 0;
+
+ if (!needle[0]) {
+ return;
+ }
+ // printf("# adding >%s<\n", str);
+
+ {
+ int c = 0;
+ int s = 0;
+
+ while((c = str[s])) {
+ // printf("\n# cur_hs %d, hs_len %d\n", cur_hs, hs_len);
+ {
+ int i;
+
+ for(i = 0; i != hs_len; i++) {
+ // printf("hs[%d] = %d(%c)\n", i, (int)hs[i], hs[i] < 32 ? 'X' : hs[i]);
+ }
+ }
+
+ if (cur_hs == hs_len) {
+ // printf("adding char %d(%c) at hs[%d]\n", (int)c, c < 32 ? 'X' : c, hs_len);
+ hs[hs_len] = c;
+ hs_len++;
+ s++;
+ }
+
+ // printf("testing %d at cur_hs %d against %d at cur_needle %d\n",
+ // (int)hs[cur_hs], cur_hs, (int)needle[cur_needle], cur_needle);
+
+ if (hs[cur_hs] == needle[cur_needle]) {
+ if (cur_needle+1 == needle_len) {
+ int exitcode = EXIT_SUCCESS;
+
+ // printf("\nFound needle from --find option.\n");
+ if (exitonfind) {
+ int ret;
+ // printf("scanf (s=%d)'%s'\n", s, &str[s+1]);
+ ret = sscanf(&str[s+1], "%i", &exitcode);
+ // printf("ret %d, '%s'\n", ret, &str[s+1]);
+ }
+ printf("Exiting with code %d\n", exitcode);
+ exit(exitcode);
+ }
+ cur_needle++;
+ cur_hs++;
+ }
+ else {
+ // printf("no match, shifting hs.\n");
+ {
+ int i;
+ for(i=0; i!= hs_len-1; i++) {
+ hs[i] = hs[i+1];
+ }
+ }
+ hs_len--;
+ cur_needle = 0;
+ cur_hs = 0;
+ }
+ }
+ }
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: Fopen
+*#
+*# PARAMETERS: Name and mode, both strings.
+*#
+*# DESCRIPTION: Opens a file and returns its fd, or NULL.
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 961022 ronny Initial version
+*#
+*#***************************************************************************/
+
+FILE *
+Fopen(const char *name, const char *mode)
+{
+ FILE *fd;
+
+ if (db2) printf(">>> Fopen '%s', mode '%s'\n", name, mode);
+
+#if defined(_WIN32)
+ fd = _fsopen(name, mode, _SH_DENYNO);
+#else
+ fd = fopen(name, mode);
+#endif
+
+ if (fd == NULL) {
+ printf("<<< Fopen failed on '%s', mode '%s'\n", name, mode);
+ return ((FILE*) NULL);
+ }
+
+ if (strncmp(mode, "a", 1) == 0) {
+ if (db3) printf("* Append mode, seeking to end.\n");
+ fseek(fd, 0L, SEEK_SET);
+ }
+
+ if (db2) printf("<<< Fopen: '%s'\n", name);
+
+ return(fd);
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: ParseArgs
+*#
+*# PARAMETERS: Standard command line args.
+*#
+*# DESCRIPTION: Parses command line arguments.
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 960909 ronny Initial version
+*#***************************************************************************/
+
+void
+ParseArgs (int argc, const char *argv[])
+{
+ int argi;
+ int i;
+ int printHelp = FALSE;
+ int exitCode = EXIT_SUCCESS;
+ char dbStr[MAX_STRING_LEN]; /* Debug option string. */
+ int number;
+ int argCount;
+ const char **argVect;
+ struct stat st;
+
+ if (db4) printf(">>> ParseArgs\n");
+ argCount = argc;
+ argVect = argv;
+
+ for (argi = 1; argi < argCount; argi++) {
+ if (db4) printf("argv[%d] = '%s'\n", argi, argVect[argi]);
+ if (strncmp(argVect[argi], "--from", 6) == 0) {
+ if (GetStringOption(&argi, argCount, argVect, host1, "--from") == 0) {
+ printHelp = TRUE;
+ exitCode = EXIT_FAILURE;
+ }
+ else {
+ printf("Host: %s %s\n", host1, host2);
+ if (sscanf(host1, "%x-%x-%x-%x-%x-%x", &i, &i, &i, &i, &i, &i) == 6) {
+ printf("Ethernet address\n");
+ }
+ }
+ }
+
+ else if (strncmp(argVect[argi], "--device", 8) == 0) {
+ if (GetStringOption(&argi, argCount, argVect, device, "--device") == 0) {
+ printHelp = TRUE;
+ exitCode = EXIT_FAILURE;
+ }
+ }
+
+ else if (strncmp(argVect[argi], "--network", 9) == 0) {
+ netBoot = TRUE;
+ serBoot = FALSE;
+ strcpy(device, "eth0");
+ strcpy(boot_loader_file, INTERNAL_NW);
+ }
+
+ else if (strncmp(argVect[argi], "--serial", 8) == 0) {
+ serBoot = TRUE;
+ netBoot = FALSE;
+ strcpy(device, "/dev/ttyS0");
+ strcpy(boot_loader_file, INTERNAL_SER);
+ }
+
+ else if (strncmp(argVect[argi], "--noleds", 8) == 0) {
+ noleds = TRUE;
+ }
+
+ else if (strncmp(argVect[argi], "--images", 8) == 0) {
+ int i = 0;
+
+ printf("Internal images:\n");
+
+ while(boot_image_info[i].name) {
+ printf("'%s', %s, size %lu bytes.\n",
+ boot_image_info[i].name,
+ boot_image_info[i].info,
+ boot_image_info[i].len
+ );
+ i++;
+ }
+ exit(EXIT_SUCCESS);
+ }
+
+ else if (strncmp(argv[argi], "--baudrate", 10) == 0) {
+ if (GetNumberOption (&argi, argCount, argVect, &set_baudrate, "--baudrate", 10) == 0) {
+ printHelp = TRUE;
+ exitCode = EXIT_FAILURE;
+ }
+ }
+
+ else if (strncmp(argVect[argi], "--tofiles", 9) == 0) {
+ toFiles = TRUE;
+ }
+
+ else if (strncmp(argVect[argi], "--cmdsonly", 10) == 0) {
+ cmdsOnly = TRUE;
+ }
+
+ else if (strncmp(argVect[argi], "--to", 4) == 0) {
+ if ((GetStringOption(&argi, argCount, argVect, host2, "--to") == 0)) {
+ printHelp = TRUE;
+ exitCode = EXIT_FAILURE;
+ }
+ else {
+ printf("Host: %s %s\n", host1, host2);
+ both_addresses = TRUE;
+ if (sscanf(host2, "%x-%x-%x-%x-%x-%x", &i, &i, &i, &i, &i, &i) == 6) {
+ printf("Ethernet address\n");
+ }
+ }
+ }
+
+ else if (strncmp(argVect[argi], "--printp", 8) == 0) {
+ pPacket = 1;
+ }
+
+ else if (strncmp(argVect[argi], "--printascii", 11) == 0) {
+ pPacket = 1;
+ printPacketType = ASCII;
+ }
+
+ else if (strncmp(argVect[argi], "--printudec", 11) == 0) {
+ pPacket = 1;
+ printPacketType = UDEC;
+ }
+
+ else if (strncmp(argVect[argi], "--printhex", 10) == 0) {
+ pPacket = 1;
+ printPacketType = HEX;
+ }
+
+ else if (strncmp(argVect[argi], "--bpl", 5) == 0) {
+ if (GetNumberOption(&argi, argCount, argVect, &p_packet_bpl, "--bpl", 10) == 0) {
+ printHelp = TRUE;
+ exitCode = EXIT_FAILURE;
+ }
+ }
+
+ else if (strncmp(argVect[argi], "--promisc", 11) == 0) {
+ promisc = 1;
+ }
+
+ else if (strncmp(argVect[argi], "--5400", 6) == 0) {
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ boot_cmds[boot_cmds_cnt++] = 0xb0000000;
+ boot_cmds[boot_cmds_cnt++] = 0x000095b6;
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ boot_cmds[boot_cmds_cnt++] = 0xb0000008;
+ boot_cmds[boot_cmds_cnt++] = 0x0000e751;
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ boot_cmds[boot_cmds_cnt++] = 0xb000000c;
+ boot_cmds[boot_cmds_cnt++] = 0x12604040;
+ }
+
+ else if (strncmp(argVect[argi], "--5600", 6) == 0) {
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ boot_cmds[boot_cmds_cnt++] = 0xb0000000;
+ boot_cmds[boot_cmds_cnt++] = 0x000095b6;
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ boot_cmds[boot_cmds_cnt++] = 0xb0000008;
+ boot_cmds[boot_cmds_cnt++] = 0x00006751;
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ boot_cmds[boot_cmds_cnt++] = 0xb000000c;
+ boot_cmds[boot_cmds_cnt++] = 0x12204040;
+ }
+
+ else if (strncmp(argVect[argi], "--testcardlx", 12) == 0) {
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ boot_cmds[boot_cmds_cnt++] = (unsigned int)R_DRAM_CONFIG;
+ boot_cmds[boot_cmds_cnt++] = 0x12604040;
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ boot_cmds[boot_cmds_cnt++] = (unsigned int)R_DRAM_TIMING;
+ boot_cmds[boot_cmds_cnt++] = 0x0000e751;
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ boot_cmds[boot_cmds_cnt++] = (unsigned int)R_WAITSTATES;
+ boot_cmds[boot_cmds_cnt++] = 0x00b395b5;
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ boot_cmds[boot_cmds_cnt++] = (unsigned int)R_BUS_CONFIG;
+ boot_cmds[boot_cmds_cnt++] = 0x00000207;
+ }
+
+ else if (strncmp(argVect[argi], "--testcard", 10) == 0) {
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ boot_cmds[boot_cmds_cnt++] = (unsigned int)R_WAITSTATES;
+ boot_cmds[boot_cmds_cnt++] = 0x000010b3;
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ boot_cmds[boot_cmds_cnt++] = (unsigned int)R_DRAM_TIMING;
+ boot_cmds[boot_cmds_cnt++] = 0x00006543;
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ boot_cmds[boot_cmds_cnt++] = (unsigned int)R_DRAM_CONFIG;
+ boot_cmds[boot_cmds_cnt++] = 0x12966060;
+ }
+
+ else if (strncmp(argVect[argi], "--devboard", 10) == 0) {
+ /* Printing on serial port will not work until PORT_PB is set... */
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ boot_cmds[boot_cmds_cnt++] = (unsigned int)R_PORT_PB_SET;
+ boot_cmds[boot_cmds_cnt++] = 0x01001ef3;
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ boot_cmds[boot_cmds_cnt++] = (unsigned int)R_PORT_PA_SET;
+ boot_cmds[boot_cmds_cnt++] = 0x00001df0;
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ boot_cmds[boot_cmds_cnt++] = (unsigned int)R_WAITSTATES;
+ boot_cmds[boot_cmds_cnt++] = 0x000095a6;
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ boot_cmds[boot_cmds_cnt++] = (unsigned int)R_DRAM_CONFIG;
+ boot_cmds[boot_cmds_cnt++] = 0x1a200040;
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ boot_cmds[boot_cmds_cnt++] = (unsigned int)R_DRAM_TIMING;
+ boot_cmds[boot_cmds_cnt++] = 0x00005611;
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ boot_cmds[boot_cmds_cnt++] = (unsigned int)R_BUS_CONFIG;
+ boot_cmds[boot_cmds_cnt++] = 0x00000104;
+ }
+
+ else if (strncmp(argVect[argi], "--verify", 8) == 0) {
+ boot_cmds[boot_cmds_cnt++] = MEM_VERIFY;
+ GetNumberOption(&argi, argCount, argVect, &boot_cmds[boot_cmds_cnt++], "--verify", 16);
+ GetNumberOption(&argi, argCount, argVect, &boot_cmds[boot_cmds_cnt++], "--verify", 16);
+ }
+
+ else if (strncmp(argVect[argi], "--setreg", 8) == 0) {
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ if ((argVect[argi+1][0] >= 'A') && (argVect[argi+1][0] <= 'Z')) {
+ GetRegisterOption(&argi, argCount, argVect, &boot_cmds[boot_cmds_cnt++], "--setreg", 16);
+ }
+ else {
+ GetNumberOption(&argi, argCount, argVect, &boot_cmds[boot_cmds_cnt++], "--setreg", 16);
+ }
+ GetNumberOption(&argi, argCount, argVect, &boot_cmds[boot_cmds_cnt++], "--setreg", 16);
+ }
+
+ else if (strncmp(argVect[argi], "--getreg", 8) == 0) {
+ boot_cmds[boot_cmds_cnt++] = GET_REGISTER;
+ if ((argVect[argi+1][0] >= 'A') && (argVect[argi+1][0] <= 'Z')) {
+ GetRegisterOption(&argi, argCount, argVect, &boot_cmds[boot_cmds_cnt++], "--getreg", 16);
+ }
+ else {
+ GetNumberOption(&argi, argCount, argVect, &boot_cmds[boot_cmds_cnt++], "--getreg", 16);
+ }
+ }
+
+ else if (strncmp(argVect[argi], "--pause", 7) == 0) {
+ boot_cmds[boot_cmds_cnt++] = PAUSE_LOOP;
+ GetNumberOption(&argi, argCount, argVect, &boot_cmds[boot_cmds_cnt++], "--pause", 16);
+ }
+
+ else if (strncmp(argVect[argi], "--memtest", 9) == 0) {
+ boot_cmds[boot_cmds_cnt++] = MEM_TEST;
+ GetNumberOption(&argi, argCount, argVect, &boot_cmds[boot_cmds_cnt++], "--memtest", 16);
+ GetNumberOption(&argi, argCount, argVect, &boot_cmds[boot_cmds_cnt++], "--memtest", 16);
+ }
+
+ else if (strncmp(argVect[argi], "--loop", 6) == 0) {
+ char str[MAX_STRING_LEN];
+ boot_cmds[boot_cmds_cnt++] = LOOP;
+ GetNumberOption(&argi, argCount, argVect, &boot_cmds[boot_cmds_cnt++], "--loop", 16);
+ GetStringOption(&argi, argCount, argVect, str, argVect[argi]);
+ new_label(&loop_label, boot_cmds_cnt+1, str);
+ boot_cmds_cnt++;
+ }
+
+ else if (strncmp(argVect[argi], "--label", 7) == 0) {
+ char str[MAX_STRING_LEN];
+ GetStringOption(&argi, argCount, argVect, str, "--label");
+ new_label(&label, boot_cmds_cnt, str);
+ }
+
+ else if (strncmp(argVect[argi], "--memdump", 9) == 0) {
+ boot_cmds[boot_cmds_cnt++] = MEM_DUMP;
+ GetNumberOption(&argi, argCount, argVect, &boot_cmds[boot_cmds_cnt++], "--memdump", 16);
+ GetNumberOption(&argi, argCount, argVect, &boot_cmds[boot_cmds_cnt++], "--memdump", 16);
+ }
+
+ else if (strncmp(argVect[argi], "--memclear", 10) == 0) {
+ boot_cmds[boot_cmds_cnt++] = MEM_CLEAR;
+ GetNumberOption(&argi, argCount, argVect, &boot_cmds[boot_cmds_cnt++], "--memclear", 16);
+ GetNumberOption(&argi, argCount, argVect, &boot_cmds[boot_cmds_cnt++], "--memclear", 16);
+ }
+
+ else if (strncmp(argVect[argi], "--flash", 7) == 0) {
+ boot_cmds[boot_cmds_cnt++] = FLASH;
+ GetNumberOption(&argi, argCount, argVect, &boot_cmds[boot_cmds_cnt++], "--flash", 16);
+ GetNumberOption(&argi, argCount, argVect, &boot_cmds[boot_cmds_cnt++], "--flash", 16);
+ GetNumberOption(&argi, argCount, argVect, &boot_cmds[boot_cmds_cnt++], "--flash", 16);
+ doing_flash = TRUE;
+ }
+
+ else if (strncmp(argVect[argi], "--jump", 6) == 0) {
+ boot_cmds[boot_cmds_cnt++] = JUMP;
+ GetNumberOption(&argi, argCount, argVect, &boot_cmds[boot_cmds_cnt++], "--jump", 16);
+ }
+
+ else if (strncmp(argVect[argi], "--file", 6) == 0) {
+ char str[MAX_STRING_LEN];
+ boot_cmds[boot_cmds_cnt++] = PACKET_INFO;
+ GetStringOption(&argi, argCount, argVect,
+ str, "--file"); /* file name */
+ GetNumberOption(&argi, argCount, argVect,
+ &boot_cmds[boot_cmds_cnt++], str, 16); /* address */
+ last_boot_file = allocate_boot_file(last_boot_file);
+ first_boot_file = first_boot_file ? first_boot_file : last_boot_file;
+ last_boot_file->fileName = malloc(strlen(str) + 1);
+ strcpy(last_boot_file->fileName, str);
+ last_boot_file->size_p = &boot_cmds[boot_cmds_cnt];
+ last_boot_file->size_sent = 0;
+ if (strncmp(str, "-", 1) != 0) {
+ if (stat(last_boot_file->fileName, &st) == -1) {
+ printf("Cannot get size of file '%s'. %s.\n",
+ last_boot_file->fileName, strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+ if (db2) printf("* size is %d 0x%8.8x\n",
+ (int)st.st_size, (unsigned int)st.st_size);
+ last_boot_file->size = st.st_size;
+ boot_cmds[boot_cmds_cnt++] = st.st_size;
+ }
+ else {
+ GetNumberOption(&argi, argCount, argVect,
+ &last_boot_file->size , str, 16); /* size */
+
+ boot_cmds[boot_cmds_cnt++] = last_boot_file->size;
+ printf("* size is %d 0x%8.8x\n", last_boot_file->size,
+ last_boot_file->size);
+ }
+ }
+
+ else if (strncmp(argVect[argi], "--bootfile", 10) == 0) {
+ GetStringOption(&argi, argCount, argVect,
+ boot_loader_file, "--bootfile");
+ }
+
+ else if (strncmp(argVect[argi], "-d", 2) == 0) {
+ if (GetNumberOption (&argi, argCount, argVect, &number, "-d", 10) == 0) {
+ printHelp = TRUE;
+ exitCode = EXIT_FAILURE;
+ }
+ else {
+ sprintf(dbStr, "%d", number);
+ for (i = 0; i != (int) strlen(dbStr); i++) {
+ switch (dbStr[i] - '0') {
+ case 1:
+ db1 = TRUE;
+ break;
+ case 2:
+ db2 = TRUE;
+ break;
+ case 3:
+ db3 = TRUE;
+ break;
+ case 4:
+ db4 = TRUE;
+ break;
+ default:
+ printf("ERROR! Debug level %d is not defined.\n", dbStr[i] - '0');
+ printHelp = TRUE;
+ exitCode = EXIT_FAILURE;
+ break;
+ }
+ }
+ }
+ }
+
+ else if (strncmp(argVect[argi], "--find", 6) == 0) {
+ GetStringOption(&argi, argCount, argVect, needle, "--find");
+ /* convert control characters like /n to the real ascii valure */
+ {
+ int i;
+ int j = 0;
+ char c;
+ int esc = 0;
+
+ for (i = 0; (c = needle[i]); i++,j++) {
+// printf("c = %d, i %d, j %d\n", (int)c, i, j);
+ if (c == '\\') {
+// printf("esc\n");
+ esc = 1;
+ continue;
+ }
+ else if (esc) {
+ esc = 0;
+ switch(c) {
+ case 'r':
+ c = '\r';
+ break;
+
+ case 'n':
+ c = '\n';
+ break;
+
+ case '\\':
+ c = '\\';
+ break;
+
+ default:
+ printf("Uknown escape sequence '\\%c'\n", c);
+ exit(EXIT_FAILURE);
+ }
+ j--;
+ }
+ // printf("setting j %d to %d\n", j, (int)c);
+ needle[j] = c;
+ }
+ needle_len = j;
+ }
+
+ for (i = 0; needle[i]; i++) {
+ //printf("i = %d, c %d\n", i,(int)needle[i]);
+ }
+ }
+
+ else if (strncmp(argVect[argi], "--exitonfind", 12) == 0) {
+ exitonfind = TRUE;
+ }
+
+ else if (strncmp(argVect[argi], "--help", 6) == 0) {
+ printHelp = TRUE;
+ }
+
+ else {
+ printf("ERROR! Don't understand option '%s'\n", argVect[argi]);
+ printHelp = TRUE;
+ exitCode = EXIT_FAILURE;
+ }
+ }
+
+ if (printHelp == TRUE) {
+ PrintHelp();
+ exit(exitCode);
+ }
+
+ if (noleds) {
+ strcpy(&boot_loader_file[strlen(boot_loader_file)], "_NOLEDS");
+ }
+
+ handle_labels();
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: handle_labels
+*#
+*# PARAMETERS: global loop_label, label
+*#
+*# DESCRIPTION: Checks and matches labels from --loop and --label commands
+*# and inserts the resolved addresses into boot commands.
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 20020204 ronny Initial version
+*#
+*#***************************************************************************/
+
+void
+handle_labels(void)
+{
+ struct label_t *ll = loop_label;
+ struct label_t *l = label;
+ struct label_t *last_l = l;
+
+ while(ll) {
+ int match = 0;
+
+ l = last_l;
+ while(l) {
+ match = 0;
+
+ if (l->name && ll->name && (strcmp(l->name, ll->name) == 0)) {
+ match = 1;
+ boot_cmds[ll->addr] = IO_BUF_START+(l->addr*4);
+ break;
+ }
+ l = l->prev;
+ }
+ if (!match) {
+ printf("Error. No label '%s' defined as needed by --loop command.\n", ll->name);
+ exit(EXIT_FAILURE);
+ }
+ ll = ll->prev;
+ }
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: new_label
+*#
+*# PARAMETERS:
+*#
+*# DESCRIPTION:
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 20020201 ronny Initial version
+*#
+*#***************************************************************************/
+
+void
+new_label(struct label_t **label, udword addr, const char *name)
+{
+ struct label_t *new_p;
+
+ new_p = malloc(sizeof(struct label_t));
+
+ if (*label == NULL) { /* first one? */
+ *label = new_p;
+ new_p->prev = NULL;
+ }
+ else {
+ new_p->prev = *label;
+ }
+ *label = new_p;
+ new_p->addr = boot_cmds_cnt;
+ new_p->name = malloc(strlen(name));
+ strcpy(new_p->name, name);
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: GetStringOption
+*#
+*# PARAMETERS: int *argNr : Returns next argc here.
+*# int argCount : Index of last argument.
+*# char *argVect[] : argv.
+*# char *ret : Copy string here.
+*# char *option : Name of the option.
+*#
+*# DESCRIPTION: Extracts a string option from argv, and updates argnr.
+*# Returns TRUE/FALSE and string in *ret.
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 960930 ronny Initial version
+*# 961203 ronny Handles filenames with spaces within 'file name'.
+*#
+*#***************************************************************************/
+
+int
+GetStringOption(int *argNr, int argCount, const char *argVect[], char *ret,
+ const char *option)
+{
+ int startChar = strlen(option);
+
+ *ret = '\0';
+
+ /* Are there any more chars after option? If not skip to next argv. */
+ if (strlen(argVect[*argNr]) <= (unsigned int)startChar) {
+ (*argNr)++;
+ startChar = 0;
+ }
+
+ /* Any args left? */
+ if (*argNr >= argCount) {
+ printf("ERROR! The option '%s' needs a string argument.\n", option);
+ PrintHelp();
+ exit(EXIT_FAILURE);
+ }
+
+ /* avoid stack overflow hacks */
+ if (strlen(&argVect[*argNr][startChar]) > MAX_STRING_LEN) {
+ printf("Argument '%s' longer than maximum allowable %d characters.\n",
+ &argVect[*argNr][startChar], MAX_STRING_LEN);
+ exit(EXIT_FAILURE);
+ }
+
+ strcpy(ret, &argVect[*argNr][startChar]);
+ if (db4) printf("<<< GetStringOption '%s'\n", ret);
+
+ return TRUE;
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: GetNumberOption
+*#
+*# PARAMETERS:
+*#
+*# DESCRIPTION:
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 960930 ronny Initial version
+*#
+*#***************************************************************************/
+
+int
+GetNumberOption(int *argNr, int argCount, const char *argVect[],
+ unsigned int *ret, const char *option, int base)
+{
+ int startChar = 0;
+ int add_io_base = 0;
+
+ (*argNr)++;
+
+ if (*argNr >= argCount) {
+ printf("ERROR! The option '%s' needs a number argument.\n", option);
+ PrintHelp();
+ exit(EXIT_FAILURE);
+ }
+
+ if (argVect[*argNr][startChar] == '+') {
+ add_io_base = 1;
+ startChar++;
+ }
+
+ *ret = strtoul(&argVect[*argNr][startChar], NULL, base);
+
+ if (add_io_base) {
+ *ret += IO_BUF_START;
+ if (*ret < IO_BUF_START || *ret >= IO_BUF_END) {
+ printf("ERROR! '%s' is outside the IO buffer (option '%s').\n",
+ argVect[*argNr], option);
+ exit(EXIT_FAILURE);
+ }
+ }
+
+ if (db4) printf("<<< GetNumberOption %08x\r\n", *ret);
+
+ return TRUE;
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: GetRegisterOption
+*#
+*# PARAMETERS:
+*#
+*# DESCRIPTION:
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 960930 ronny Initial version
+*#
+*#***************************************************************************/
+
+int
+GetRegisterOption(int *argNr, int argCount, const char *argVect[],
+ unsigned int *ret, const char *option, int base)
+{
+ int startChar = 0;
+
+ (*argNr)++;
+
+ if (*argNr >= argCount) {
+ printf("Error! The option '%s' needs a register name.\n", option);
+ PrintHelp();
+ exit(EXIT_FAILURE);
+ }
+
+ {
+ int r = 0;
+
+ while (reg_des[r].name) {
+ if (strcmp(reg_des[r].name, argVect[*argNr]) == 0) {
+ *ret = reg_des[r].addr;
+ return TRUE;
+ break;
+ }
+ r++;
+ }
+ }
+
+ printf("Error! Didn't find a register name matching '%s'.\n",
+ argVect[*argNr]);
+
+ exit(EXIT_FAILURE);
+
+ return FALSE;
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: PrintHelp
+*#
+*# PARAMETERS: None.
+*#
+*# DESCRIPTION: Prints help info.
+*#
+*#---------------------------------------------------------------------------
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 960909 ronny Initial version
+*#
+*#***************************************************************************/
+
+void
+PrintHelp(void)
+{
+ printf("e100boot version %s.\n", version);
+
+ printf("\ne100boot [--device devicename] [--file filename|- addr [size]]\n"
+ " [--flash ram-source flash-offset size]\n"
+ " [--pause iter]\n"
+ " [--memtest addr addr]\n"
+ " [--memclear addr addr] [--memdump addr addr]\n"
+ " [--setreg addr|regname val] [--getreg addr|regname]\n"
+ " [--verify addr val] [--label label] [--loop addr label]\n"
+ " [--5400] [--5600] [--testcard] [--devboard]\n"
+ " [--testcardlx] [--network] [--serial]\n"
+ " [--baudrate baudrate] [--bootfile file] [--jump addr]\n"
+ " [--tofiles] [--cmdsonly] [--images] [--noleds]\n"
+ " [--help]\n\n");
+
+ printf(" The commands sent to the cbl, and which are parsed by the cbl,\n"
+ " are stored at 0x%8.8x-0x%8.8x.\n\n", IO_BUF_START, IO_BUF_END);
+
+ printf(" See the man page for more details about e100boot.\n\n");
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: CreateBootLoader
+*#
+*# PARAMETERS: None.
+*#
+*# DESCRIPTION: Creates boot packets from boot file or internal loader.
+*#
+*#---------------------------------------------------------------------------
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 960909 ronny Initial version
+*#***************************************************************************/
+
+void
+CreateBootLoader(void)
+{
+ struct stat st;
+ char *buf = NULL;
+ // int size_pos = 0x18;
+ // int addr_pos = 0x28;
+ struct packet_header_T *ph;
+ int packet_size;
+ int header_size;
+ int buf_cnt = 0;
+ int i;
+ udword sum = 0;
+
+ if (create_boot_loader) {
+ int image_nbr = 0;
+ int found = 0;
+ const struct boot_image_info_type *info;
+
+ if (db4) printf("> CreateBootLoader\n");
+
+ info = &boot_image_info[image_nbr];
+
+ /* Use internal boot loader? */
+ while (!found && info->name != NULL) {
+ if (strcmp(boot_loader_file, info->name) == 0) {
+ st.st_size = info->len;
+ buf = (char*) malloc(st.st_size);
+ memcpy(buf, info->ptr, st.st_size); /* unnecessary? */
+ found = TRUE;
+ printf("Using internal boot loader: %s - %s.\n",
+ info->name, info->info);
+ }
+ else {
+ image_nbr++;
+ info = &boot_image_info[image_nbr];
+ }
+ }
+
+ /* No internal? Load it from file instead. */
+ if (!found) {
+ FILE *fd;
+
+ /* We didn't find an internal match, load the boot file from disk. */
+ if ((fd = Fopen(boot_loader_file, "r")) == NULL) {
+ printf("Cannot open bootloader '%s'. %s.\n",
+ boot_loader_file, strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+
+ if (fstat(fileno(fd), &st) == -1) {
+ printf("Cannot get filestatus of bootloader '%s'. %s.\n",
+ boot_loader_file, strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+
+ buf = (char*) malloc(st.st_size);
+ // printf("CreateBootLoader: buf = (char*) malloc(st.st_size); 2\n");
+ if (read(fileno(fd), buf, st.st_size) != st.st_size) {
+ printf("Read fewer bytes than there should be in %s.\n",
+ boot_loader_file);
+ exit(EXIT_FAILURE);
+ }
+
+ fclose(fd);
+ }
+
+ /* Alright, got loader in buf[] and size in st. */
+ if (netBoot) {
+ /* The etrax code for all boot methods are linked to adress
+ 380000f0 but since network boot starts execution at 380000f4
+ we have two nops in the beginning of the code which we do not
+ transmit to etrax in the network case. The link adress
+ doesn't change though. */
+ buf += 4;
+ st.st_size -= 4;
+ packet_size = DATA_SIZE;
+ }
+ else {
+ packet_size = st.st_size;
+ }
+
+ /* Hack binary, insert size and address. */
+
+ /* Giovanni Varasano (24/06/2005) : bug
+ * It is not a good habit to make code endian dependent on the host
+ * processor where cross compilation happens. Intel is little endian and
+ * PowerPC is big endian, but the target (ETRAX) is always little endian.
+ * The use of swap_endian() solves the problem.
+ */
+
+#define SIZE_PATTERN 0x12345678
+#define ADDR_PATTERN 0x87654321
+#define SIZE_POS (netBoot ? 0x0c : 0x10)
+#define ADDR_POS (netBoot ? 0x10 : 0x14)
+
+ if (swap_endian(*(udword*)&buf[SIZE_POS]) != SIZE_PATTERN) {
+ printf("Bootloader corrupt. Should contain ret/nop (0x%8.8x) at 0x%x, but contains %x\n",
+ SIZE_PATTERN, SIZE_POS, *(udword*)&buf[SIZE_POS]);
+ exit(EXIT_FAILURE);
+ }
+
+ /* How much data to load except data in first packet. */
+
+ if (netBoot) {
+ *(udword*)(&buf[SIZE_POS]) = swap_endian(st.st_size - DATA_SIZE);
+ }
+ else {
+ *(udword*)(&buf[SIZE_POS]) = swap_endian(st.st_size - 784);
+ }
+
+ if (db3) printf("Inserting boot size 0x%x at 0x%x.\n",
+ (unsigned int) *(udword*)(&buf[SIZE_POS]),
+ (unsigned int)&buf[SIZE_POS]);
+
+ if (swap_endian(*(udword*)&buf[ADDR_POS]) != ADDR_PATTERN) {
+ printf("Bootloader corrupt. Should contain ret/nop (0x%8.8x) at 0x%x, but contains %x\n",
+ ADDR_PATTERN, ADDR_POS, *(udword*)&buf[ADDR_POS]);
+ exit(EXIT_FAILURE);
+ }
+
+ if (netBoot) {
+ *(udword*)(&buf[ADDR_POS]) = swap_endian(BOOT_ADDRESS + DATA_SIZE);
+ }
+ else {
+ *(udword*)(&buf[ADDR_POS]) = swap_endian(BOOT_ADDRESS-4 + 784);
+ }
+
+ if (db3) printf("Inserting boot address 0x%x at 0x%x.\n",
+ (unsigned int)*(udword*)(&buf[ADDR_POS]),
+ (unsigned int)&buf[ADDR_POS]);
+
+
+ for (i = 0; i != st.st_size; i++) {
+ sum += ((byte*)buf)[i];
+ }
+ if (db1) printf("Checksum 0x%x, bytes %d\n", sum, i);
+
+ if (db4) {
+ int i;
+
+ for(i=0; i<st.st_size; i+=8) {
+ int j;
+
+ printf("0x%8.8x[%4.4x]: ", BOOT_ADDRESS+i, i);
+ for(j=0; i+j<st.st_size && j<8; j++) {
+ printf("%2.2x ", (unsigned char) buf[i+j]);
+ }
+ printf("\n");
+ }
+ }
+ /* Now create list of packets. */
+ while (buf_cnt <= st.st_size) {
+
+ header_size = seq_nr == 0 ?
+ SIZE_OF_FIRST_HEADER : sizeof(struct packet_header_T);
+
+ if (netBoot) {
+ packet_size = ((st.st_size - buf_cnt) < DATA_SIZE ?
+ st.st_size - buf_cnt : DATA_SIZE) + header_size;
+ }
+ else {
+ packet_size = st.st_size;
+ header_size = 0;
+ }
+
+ if (db4) printf("seq_nr %d, header_size %d, packet_size %d\n",
+ seq_nr, header_size, packet_size);
+
+ last_packet = allocate_packet(last_packet);
+
+ first_packet = first_packet ? first_packet : last_packet;
+
+ last_packet->size = packet_size;
+ last_packet->data = (char*)malloc(packet_size);
+ last_packet->seq = seq_nr;
+ last_packet->baud_rate = 9600;
+
+ last_packet->boot_file = allocate_boot_file(NULL);
+ last_packet->boot_file->fileName = boot_loader_file;
+
+ // printf("last_packet->size %8.8x\n", last_packet->size);
+ // printf("last_packet->data %8.8x\n",last_packet->data);
+
+ if (netBoot) {
+ ph = (struct packet_header_T*) last_packet->data;
+ memcpy(ph->dest, dst_addr_of_device, 6);
+ memcpy(ph->src, eth_addr_local, 6);
+ ph->length = htons(packet_size);
+ ph->snap1 = htonl(SNAP1);
+ ph->snap2 = htonl(SNAP2);
+ ph->tag = htonl(SERVER_TAG);
+ ph->seq = htonl(seq_nr);
+ if (seq_nr != 0) {
+ ph->type = htonl(BOOT_PACKET);
+ ph->id = htonl(0);
+ }
+ }
+
+ memcpy(&last_packet->data[header_size], &buf[buf_cnt],
+ packet_size - header_size);
+ if (db3) DecodeSvintoBoot(last_packet->data);
+
+ if (netBoot) {
+ buf_cnt += DATA_SIZE;
+ }
+ else {
+ buf_cnt += packet_size +1;
+ }
+
+ seq_nr++;
+ }
+ }
+
+ if (db4) printf("< CreateBootLoader\n");
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: allocate_packet
+*#
+*# PARAMETERS: None.
+*#
+*# DESCRIPTION:
+*#
+*#---------------------------------------------------------------------------
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 960909 ronny Initial version
+*#***************************************************************************/
+
+struct packet_buf*
+allocate_packet(struct packet_buf *p)
+{
+ if (db4) printf("> allocate_packet\n");
+
+ if (p) {
+ p->next = (struct packet_buf*) malloc(sizeof(struct packet_buf));
+ p = p->next;
+ }
+ else {
+ p = (struct packet_buf*) malloc(sizeof(struct packet_buf));
+ }
+ p->next = NULL;
+
+ return(p);
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: allocate_boot_file
+*#
+*# PARAMETERS: None.
+*#
+*# DESCRIPTION:
+*#
+*#---------------------------------------------------------------------------
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 960909 ronny Initial version
+*#***************************************************************************/
+
+struct boot_files_T*
+allocate_boot_file(struct boot_files_T *bf)
+{
+ if (bf) {
+ bf->next = (struct boot_files_T*) malloc(sizeof(struct boot_files_T));
+ bf = bf->next;
+ }
+ else {
+ bf = (struct boot_files_T*) malloc(sizeof(struct boot_files_T));
+ }
+ bf->next = NULL;
+
+ return(bf);
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: CreateBootCmds
+*#
+*# PARAMETERS: None.
+*#
+*# DESCRIPTION: Creates a boot packet from the boot commands. The data is
+*# filled in later by FinishBootCmds().
+*#
+*#---------------------------------------------------------------------------
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 980818 ronny Initial version
+*#***************************************************************************/
+
+void
+CreateBootCmds(void)
+{
+ struct packet_header_T *ph;
+
+ if (db4) printf("***> CreateBootCmds\n");
+
+ last_packet = allocate_packet(last_packet);
+
+ boot_cmds_packet = last_packet;
+
+ last_packet->boot_file = allocate_boot_file(NULL);
+ last_packet->boot_file->fileName = BOOT_CMDS_FILE;
+ last_packet->baud_rate = 9600;
+
+ last_packet->size = netBoot ? SIZE_OF_BOOT_CMDS + sizeof(struct packet_header_T)
+ : SIZE_OF_BOOT_CMDS;
+
+ last_packet->data = (char *) malloc(last_packet->size);
+ last_packet->seq = seq_nr;
+
+ if (netBoot) {
+ /* Create packet header. */
+ ph = (struct packet_header_T *) last_packet->data;
+ memcpy(ph->dest, dst_addr_of_device, 6);
+ memcpy(ph->src, eth_addr_local, 6);
+ ph->length = htons(last_packet->size);
+ ph->snap1 = htonl(SNAP1);
+ ph->snap2 = htonl(SNAP2);
+ ph->tag = htonl(SERVER_TAG);
+ ph->seq = htonl(seq_nr);
+ seq_nr++;
+ ph->type = htonl(BOOT_CMDS);
+ ph->id = htonl(0);
+ }
+
+ if (db3) DecodeSvintoBoot(last_packet->data);
+ if (db4) printf("<*** CreateBootCmds\n");
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: FinishBootCmds
+*#
+*# PARAMETERS: None.
+*#
+*# DESCRIPTION: Copies the boot commands into the correct packet and changes
+*# the dwords to network order.
+*#
+*#---------------------------------------------------------------------------
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 960909 ronny Initial version
+*#***************************************************************************/
+
+void
+FinishBootCmds(void)
+{
+ int i;
+ unsigned int offset = 0;
+
+ for (i = 0; i != boot_cmds_cnt; i++) {
+ boot_cmds[i] = htonl(boot_cmds[i]);
+ if (db3) printf("%8.8x\n", boot_cmds[i]);
+ }
+
+ /* Copy boot commands into packet. */
+ if (netBoot) {
+ offset = sizeof(struct packet_header_T);
+ }
+
+ memcpy(&boot_cmds_packet->data[offset], boot_cmds,
+ boot_cmds_cnt * sizeof(udword));
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: CreateNewBootPacket
+*#
+*# PARAMETERS: None.
+*#
+*# DESCRIPTION: Creates next packet for the files specified by '--file'.
+*#
+*# RETURNS: Next packet, or NULL.
+*#
+*#---------------------------------------------------------------------------
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 960909 ronny Initial version
+*#***************************************************************************/
+
+struct packet_buf*
+CreateNewBootPacket(void)
+{
+ static char buf[DATA_SIZE];
+ struct packet_header_T *ph;
+ int packet_size;
+ int header_size;
+ int i;
+ udword sum;
+ int size = 0;
+ int padding = 0;
+
+ static struct boot_files_T *bf = NULL;
+
+ if (db3) printf("> CreateNewBootPacket\n");
+
+ bf = bf ? bf : first_boot_file;
+
+ while (bf) {
+ if (!bf->fd) {
+ if (strcmp(bf->fileName, "-") == 0) {
+ bf->fd = stdin;
+ }
+ else {
+ bf->fd = fopen(bf->fileName, "r");
+ }
+
+ if (bf->fd == NULL) {
+ printf("Cannot open boot file %s. Exiting\n", bf->fileName);
+ exit(EXIT_FAILURE);
+ }
+ if (db3) printf("Opening boot file %s\n", bf->fileName);
+ }
+
+ if (!padding) {
+ size = fread(buf, 1, DATA_SIZE, bf->fd);
+ if (size == 0) {
+ if (db3) printf("Nothing more to read. Read: %d/%d\n",
+ bf->size_sent, bf->size);
+ padding = 1;
+ }
+ }
+
+ if (padding) {
+ if (bf->size_sent < bf->size) {
+ if (db3) printf("padding...\n");
+ size = (bf->size - bf->size_sent > DATA_SIZE) ?
+ DATA_SIZE : bf->size - bf->size_sent;
+ memset(buf, 0, size);
+ }
+ else {
+ if (db3) printf("All written\n");
+ padding = 0;
+ size = 0;
+ }
+ }
+
+ if (size != 0) {
+ if (db3) printf("size: %d %d/%d\n", size, bf->size_sent, bf->size);
+ bf->size_sent += size;
+ last_packet = allocate_packet(last_packet);
+
+ /* Calculate checksum. */
+ sum = 0;
+ for (i = 0; i != size; i++) {
+ sum += ((byte*)buf)[i];
+ }
+ if (db2) printf("Checksum 0x%x, bytes %d\n", sum, i);
+
+ /* Figure out size of packet. */
+ if (netBoot) {
+ header_size = seq_nr == 0 ?
+ SIZE_OF_FIRST_HEADER : sizeof(struct packet_header_T);
+
+ packet_size = ((size) < DATA_SIZE ? size : DATA_SIZE) + header_size;
+ }
+ else {
+ header_size = 0;
+ packet_size = size;
+ }
+
+ if (packet_size < 60) { /* CRC adds 4 bytes to 64 */
+ printf(
+ "Last packet from file '%s', is smaller than 64 bytes. \n"
+ "This is not allowed in the Ethernet standard. Will pad with %d "
+ "bytes.\n", bf->fileName, 60-packet_size);
+
+ *(bf->size_p) += 60-packet_size;
+ packet_size = 60;
+ }
+
+ last_packet->size = packet_size;
+ last_packet->data = (char*)malloc(packet_size);
+ last_packet->boot_file = bf;
+ last_packet->baud_rate = set_baudrate;
+
+ /* printf("size %8.8x\n", last_packet->size);*/
+ /* printf("data %8.8x\n",last_packet->data);*/
+
+ if (netBoot) {
+ /* Initialize ethernet header. */
+ ph = (struct packet_header_T*) last_packet->data;
+ memcpy(ph->dest, dst_addr_of_device, 6);
+ memcpy(ph->src, eth_addr_local, 6);
+ /* printf("packet_size %d\n", packet_size);*/
+ ph->length = htons(packet_size);
+ ph->snap1 = htonl(SNAP1);
+ ph->snap2 = htonl(SNAP2);
+ ph->tag = htonl(SERVER_TAG);
+ ph->seq = htonl(seq_nr);
+ last_packet->seq = seq_nr;
+ if (seq_nr != 0) {
+ ph->type = htonl(BOOT_PACKET);
+ ph->id = htonl(0); /* id doesn't matter, we send to a unicast address */
+ }
+ }
+
+ /* Copy data in place. */
+ memcpy(&last_packet->data[header_size], buf, packet_size - header_size);
+ if (db2) DecodeSvintoBoot(last_packet->data);
+ /* PrintPacket(last_packet->data, last_packet->size, HEX);*/
+ seq_nr++;
+
+ if (db3) printf("< CreateNewBootPacket\n");
+ return(last_packet);
+ }
+ else { /* Nothing read from fd. */
+ fclose(bf->fd);
+ bf = bf->next;
+ }
+ }
+
+ if (db3) printf("< CreateNewBootPacket\n");
+ return(NULL);
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: swap_endian
+*#
+*# PARAMETERS: u - An unsigned value.
+*#
+*# DESCRIPTION: Convert the unsigned value from host order to little endian.
+*#
+*# RETURNS: The unsigned value as little endian.
+*#
+*#***************************************************************************/
+
+unsigned int
+swap_endian(unsigned int u)
+{
+ /* If the host order is the same as the network order (which is big endian),
+ * we need to swap the bytes in the supplied value.
+ */
+ return ntohl(0x12345678) == 0x12345678 ? bswap_32(u) : u;
+}
+
+/****************** END OF FILE common.c ************************************/
diff --git a/package/etrax-tools/src/e100boot/sbl/common.h b/package/etrax-tools/src/e100boot/sbl/common.h
new file mode 100644
index 000000000..8f854e447
--- /dev/null
+++ b/package/etrax-tools/src/e100boot/sbl/common.h
@@ -0,0 +1,57 @@
+/*!***************************************************************************
+*!
+*! FILE NAME : common.h
+*!
+*! DESCRIPTION: Common stuff for e100boot.
+*!
+*! ---------------------------------------------------------------------------
+*! HISTORY
+*!
+*! DATE NAME CHANGES
+*! ---- ---- -------
+*! 2002 05 02 Ronny Ranerup Initial version
+*! ---------------------------------------------------------------------------
+*! (C) Copyright 1999, 2000, 2001, 2002 Axis Communications AB, LUND, SWEDEN
+*!***************************************************************************/
+/************************** Include files ********************************/
+/************************** Constants and macros *************************/
+/* max length of argument strings */
+#define MAX_STRING_LEN 256
+/************************** Type definitions *****************************/
+struct packet_buf {
+ unsigned int size;
+ struct packet_buf *next;
+ unsigned int seq;
+ char *data;
+ struct boot_files_T *boot_file;
+ unsigned int baud_rate;
+};
+
+struct boot_files_T {
+ char *fileName;
+ unsigned int *size_p; /* Pointer to size in boot_cmds. */
+ unsigned int size; /* Size of file. */
+ unsigned int size_sent; /* Number of bytes sent so far. */
+ struct boot_files_T *next;
+ FILE *fd;
+};
+
+/************************** Global variables *****************************/
+extern int db1;
+extern int db2;
+extern int db3;
+extern int db4;
+
+extern char device[MAX_STRING_LEN];
+extern struct packet_buf *first_packet;
+extern int cmdsOnly; /* Just dump boot cmds to file. */
+extern int toFiles; /* Dump all packets to files. */
+
+/************************** Function prototypes **************************/
+
+struct packet_buf* create_packet (unsigned int seq);
+struct packet_buf* free_packet (struct packet_buf *p);
+void find_string (char *str);
+
+
+
diff --git a/package/etrax-tools/src/e100boot/sbl/conf.h b/package/etrax-tools/src/e100boot/sbl/conf.h
new file mode 100644
index 000000000..4105bbffb
--- /dev/null
+++ b/package/etrax-tools/src/e100boot/sbl/conf.h
@@ -0,0 +1,139 @@
+/* conf.h. Generated automatically by configure. */
+#define HAVE_NET_IF_H 1
+#define HAVE_NETINET_IN_H 1 /* Socket data structure */
+#define HAVE_NETINET_IN_SYSTM_H 1
+#define HAVE_NETINET_IP_H 1
+#define HAVE_NETINET_UDP_H 1
+#define HAVE_NETINET_TCP_H 1
+#define HAVE_NETDB_H 1
+#define HAVE_ARPA_INET_H 1
+#define HAVE_SYS_SOCKET_H 1
+#define HAVE_FCNTL_H 1 /* O_RDONLY */
+#define HAVE_LINUX_IF_ETHER_H 1
+#define HAVE_SIGNAL_H 1
+#define HAVE_STRING_H 1
+#define HAVE_STDLIB_H 1
+#define HAVE_STDIO_H 1
+#define HAVE_SYS_TIME_H 1
+#define HAVE_UNISTD_H 1
+#define HAVE_SYS_STAT_H 1
+#define HAVE_SYS_TYPES_H 1
+#define HAVE_ERRNO_H 1
+#define HAVE_LINUX_SOCKIOS_H 1 /* SIOCGIFHWADDR */
+#define HAVE_CTYPE_H 1
+#define HAVE_PCAP_H 0
+#define TIME_WITH_SYS_TIME 1
+#define HAVE_SYS_SOCKET_H 1
+#define HAVE_SYS_IOCTL_H 1
+#define HAVE_TERMIOS_H 1
+
+#if HAVE_TERMIOS_H
+#include <termios.h>
+#endif
+
+#if HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
+
+#if HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+#if HAVE_CTYPE_H
+#include <ctype.h>
+#endif
+
+#if HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+
+#if HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+
+#if HAVE_NET_IF_H
+#include <net/if.h>
+#endif
+
+#if HAVE_NETINET_IN_SYSTM_H
+#include <netinet/in_systm.h>
+#endif
+
+#if HAVE_NETINET_IP_H
+#include <netinet/ip.h>
+#endif
+
+#if HAVE_NETINET_UDP_H
+#include <netinet/udp.h>
+#endif
+
+#if HAVE_NETINET_TCP_H
+#include <netinet/tcp.h>
+#endif
+
+#if HAVE_NETDB_H
+#include <netdb.h>
+#endif
+
+#if HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+
+#if HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+
+#if HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+
+#if HAVE_LINUX_IF_ETHER_H
+#include <linux/if_ether.h>
+#endif
+
+#if HAVE_SIGNAL_H
+#include <signal.h>
+#endif
+
+#if HAVE_STRING_H
+#include <string.h>
+#endif
+
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#if HAVE_STDIO_H
+#include <stdio.h>
+#endif
+
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#if HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+
+#if HAVE_ERRNO_H
+#include <errno.h>
+#endif
+
+#if HAVE_LINUX_SOCKIOS_H
+#include <linux/sockios.h>
+#endif
+
+#if HAVE_PCAP_H
+#include <pcap.h>
+#endif
+
+#if TIME_WITH_SYS_TIME
+#include <sys/time.h>
+#include <time.h>
+#else
+#if HAVE_SYS_TIME_H
+#include <sys/time.h>
+#else
+#include <time.h>
+#endif
+#endif
diff --git a/package/etrax-tools/src/e100boot/sbl/conf.h.in b/package/etrax-tools/src/e100boot/sbl/conf.h.in
new file mode 100644
index 000000000..779c47314
--- /dev/null
+++ b/package/etrax-tools/src/e100boot/sbl/conf.h.in
@@ -0,0 +1,138 @@
+#define HAVE_NET_IF_H 0
+#define HAVE_NETINET_IN_H 0 /* Socket data structure */
+#define HAVE_NETINET_IN_SYSTM_H 0
+#define HAVE_NETINET_IP_H 0
+#define HAVE_NETINET_UDP_H 0
+#define HAVE_NETINET_TCP_H 0
+#define HAVE_NETDB_H 0
+#define HAVE_ARPA_INET_H 0
+#define HAVE_SYS_SOCKET_H 0
+#define HAVE_FCNTL_H 0 /* O_RDONLY */
+#define HAVE_LINUX_IF_ETHER_H 0
+#define HAVE_SIGNAL_H 0
+#define HAVE_STRING_H 0
+#define HAVE_STDLIB_H 0
+#define HAVE_STDIO_H 0
+#define HAVE_SYS_TIME_H 0
+#define HAVE_UNISTD_H 0
+#define HAVE_SYS_STAT_H 0
+#define HAVE_SYS_TYPES_H 0
+#define HAVE_ERRNO_H 0
+#define HAVE_LINUX_SOCKIOS_H 0 /* SIOCGIFHWADDR */
+#define HAVE_CTYPE_H 0
+#define HAVE_PCAP_H 0
+#define TIME_WITH_SYS_TIME 0
+#define HAVE_SYS_SOCKET_H 0
+#define HAVE_SYS_IOCTL_H 0
+#define HAVE_TERMIOS_H 0
+
+#if HAVE_TERMIOS_H
+#include <termios.h>
+#endif
+
+#if HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
+
+#if HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+#if HAVE_CTYPE_H
+#include <ctype.h>
+#endif
+
+#if HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+
+#if HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+
+#if HAVE_NET_IF_H
+#include <net/if.h>
+#endif
+
+#if HAVE_NETINET_IN_SYSTM_H
+#include <netinet/in_systm.h>
+#endif
+
+#if HAVE_NETINET_IP_H
+#include <netinet/ip.h>
+#endif
+
+#if HAVE_NETINET_UDP_H
+#include <netinet/udp.h>
+#endif
+
+#if HAVE_NETINET_TCP_H
+#include <netinet/tcp.h>
+#endif
+
+#if HAVE_NETDB_H
+#include <netdb.h>
+#endif
+
+#if HAVE_ARPA_INET_H
+#include <arpa/inet.h>
+#endif
+
+#if HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+
+#if HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+
+#if HAVE_LINUX_IF_ETHER_H
+#include <linux/if_ether.h>
+#endif
+
+#if HAVE_SIGNAL_H
+#include <signal.h>
+#endif
+
+#if HAVE_STRING_H
+#include <string.h>
+#endif
+
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#if HAVE_STDIO_H
+#include <stdio.h>
+#endif
+
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#if HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+
+#if HAVE_ERRNO_H
+#include <errno.h>
+#endif
+
+#if HAVE_LINUX_SOCKIOS_H
+#include <linux/sockios.h>
+#endif
+
+#if HAVE_PCAP_H
+#include <pcap.h>
+#endif
+
+#if TIME_WITH_SYS_TIME
+#include <sys/time.h>
+#include <time.h>
+#else
+#if HAVE_SYS_TIME_H
+#include <sys/time.h>
+#else
+#include <time.h>
+#endif
+#endif
diff --git a/package/etrax-tools/src/e100boot/sbl/config.cache b/package/etrax-tools/src/e100boot/sbl/config.cache
new file mode 100644
index 000000000..a5c0e9cf7
--- /dev/null
+++ b/package/etrax-tools/src/e100boot/sbl/config.cache
@@ -0,0 +1,48 @@
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs. It is not useful on other systems.
+# If it contains results you don't want to keep, you may remove or edit it.
+#
+# By default, configure uses ./config.cache as the cache file,
+# creating it if it does not exist already. You can give configure
+# the --cache-file=FILE option to use a different cache file; that is
+# what configure does when it calls configure scripts in
+# subdirectories, so they share the cache.
+# Giving --cache-file=/dev/null disables caching, for debugging configure.
+# config.status only pays attention to the cache file if you give it the
+# --recheck option to rerun configure.
+#
+ac_cv_header_arpa_inet_h=${ac_cv_header_arpa_inet_h=yes}
+ac_cv_header_ctype_h=${ac_cv_header_ctype_h=yes}
+ac_cv_header_errno_h=${ac_cv_header_errno_h=yes}
+ac_cv_header_fcntl_h=${ac_cv_header_fcntl_h=yes}
+ac_cv_header_linux_if_ether_h=${ac_cv_header_linux_if_ether_h=yes}
+ac_cv_header_linux_sockios_h=${ac_cv_header_linux_sockios_h=yes}
+ac_cv_header_net_if_h=${ac_cv_header_net_if_h=yes}
+ac_cv_header_netdb_h=${ac_cv_header_netdb_h=yes}
+ac_cv_header_netinet_in_h=${ac_cv_header_netinet_in_h=yes}
+ac_cv_header_netinet_in_systm_h=${ac_cv_header_netinet_in_systm_h=yes}
+ac_cv_header_netinet_ip_h=${ac_cv_header_netinet_ip_h=yes}
+ac_cv_header_netinet_tcp_h=${ac_cv_header_netinet_tcp_h=yes}
+ac_cv_header_netinet_udp_h=${ac_cv_header_netinet_udp_h=yes}
+ac_cv_header_pcap_pcap_h=${ac_cv_header_pcap_pcap_h=no}
+ac_cv_header_signal_h=${ac_cv_header_signal_h=yes}
+ac_cv_header_stdc=${ac_cv_header_stdc=yes}
+ac_cv_header_stdio_h=${ac_cv_header_stdio_h=yes}
+ac_cv_header_stdlib_h=${ac_cv_header_stdlib_h=yes}
+ac_cv_header_string_h=${ac_cv_header_string_h=yes}
+ac_cv_header_sys_ioctl_h=${ac_cv_header_sys_ioctl_h=yes}
+ac_cv_header_sys_socket_h=${ac_cv_header_sys_socket_h=yes}
+ac_cv_header_sys_stat_h=${ac_cv_header_sys_stat_h=yes}
+ac_cv_header_sys_time_h=${ac_cv_header_sys_time_h=yes}
+ac_cv_header_sys_types_h=${ac_cv_header_sys_types_h=yes}
+ac_cv_header_termios_h=${ac_cv_header_termios_h=yes}
+ac_cv_header_time=${ac_cv_header_time=yes}
+ac_cv_header_unistd_h=${ac_cv_header_unistd_h=yes}
+ac_cv_lib_pcap_pcap_open_live=${ac_cv_lib_pcap_pcap_open_live=no}
+ac_cv_prog_CC=${ac_cv_prog_CC=gcc}
+ac_cv_prog_CPP=${ac_cv_prog_CPP='gcc -E'}
+ac_cv_prog_cc_cross=${ac_cv_prog_cc_cross=no}
+ac_cv_prog_cc_g=${ac_cv_prog_cc_g=yes}
+ac_cv_prog_cc_works=${ac_cv_prog_cc_works=yes}
+ac_cv_prog_gcc=${ac_cv_prog_gcc=yes}
diff --git a/package/etrax-tools/src/e100boot/sbl/config.log b/package/etrax-tools/src/e100boot/sbl/config.log
new file mode 100644
index 000000000..43de9c5da
--- /dev/null
+++ b/package/etrax-tools/src/e100boot/sbl/config.log
@@ -0,0 +1,90 @@
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+configure:530: checking for gcc
+configure:643: checking whether the C compiler (gcc ) works
+configure:659: gcc -o conftest conftest.c 1>&5
+configure:685: checking whether the C compiler (gcc ) is a cross-compiler
+configure:690: checking whether we are using GNU C
+configure:699: gcc -E conftest.c
+configure:718: checking whether gcc accepts -g
+configure:751: checking for pcap_open_live in -lpcap
+configure:770: gcc -o conftest -g -O2 conftest.c -lpcap 1>&5
+/usr/bin/ld: cannot find -lpcap
+collect2: ld returned 1 exit status
+configure: failed program was:
+#line 759 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char pcap_open_live();
+
+int main() {
+pcap_open_live()
+; return 0; }
+configure:799: checking how to run the C preprocessor
+configure:820: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:879: checking for ANSI C header files
+configure:892: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:959: gcc -o conftest -g -O2 conftest.c 1>&5
+configure: In function 'main':
+configure:954: warning: incompatible implicit declaration of built-in function 'exit'
+configure:986: checking for termios.h
+configure:996: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:986: checking for sys/ioctl.h
+configure:996: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:986: checking for net/if.h
+configure:996: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:986: checking for netinet/in.h
+configure:996: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:986: checking for netinet/in_systm.h
+configure:996: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:986: checking for netinet/ip.h
+configure:996: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:986: checking for netinet/udp.h
+configure:996: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:986: checking for netinet/tcp.h
+configure:996: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:986: checking for netdb.h
+configure:996: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:986: checking for arpa/inet.h
+configure:996: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:986: checking for sys/socket.h
+configure:996: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:986: checking for fcntl.h
+configure:996: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:986: checking for linux/if_ether.h
+configure:996: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:986: checking for signal.h
+configure:996: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:986: checking for string.h
+configure:996: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:986: checking for stdlib.h
+configure:996: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:986: checking for stdio.h
+configure:996: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:986: checking for sys/time.h
+configure:996: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:986: checking for unistd.h
+configure:996: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:986: checking for sys/stat.h
+configure:996: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:986: checking for sys/types.h
+configure:996: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:986: checking for errno.h
+configure:996: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:986: checking for linux/sockios.h
+configure:996: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:986: checking for ctype.h
+configure:996: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:986: checking for sys/socket.h
+configure:986: checking for pcap/pcap.h
+configure:996: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:992:23: error: pcap/pcap.h: No such file or directory
+configure: failed program was:
+#line 991 "configure"
+#include "confdefs.h"
+#include <pcap/pcap.h>
+configure:1024: checking whether time.h and sys/time.h may both be included
+configure:1038: gcc -c -g -O2 conftest.c 1>&5
diff --git a/package/etrax-tools/src/e100boot/sbl/config.status b/package/etrax-tools/src/e100boot/sbl/config.status
new file mode 100755
index 000000000..3580ac717
--- /dev/null
+++ b/package/etrax-tools/src/e100boot/sbl/config.status
@@ -0,0 +1,330 @@
+#! /bin/sh
+# Generated automatically by configure.
+# Run this file to recreate the current configuration.
+# This directory was configured as follows,
+# on host bertha:
+#
+# ./configure
+#
+# Compiler output produced by configure, useful for debugging
+# configure, is in ./config.log if it exists.
+
+ac_cs_usage="Usage: ./config.status [--recheck] [--version] [--help]"
+for ac_option
+do
+ case "$ac_option" in
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ echo "running ${CONFIG_SHELL-/bin/sh} ./configure --no-create --no-recursion"
+ exec ${CONFIG_SHELL-/bin/sh} ./configure --no-create --no-recursion ;;
+ -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
+ echo "./config.status generated by autoconf version 2.13"
+ exit 0 ;;
+ -help | --help | --hel | --he | --h)
+ echo "$ac_cs_usage"; exit 0 ;;
+ *) echo "$ac_cs_usage"; exit 1 ;;
+ esac
+done
+
+ac_given_srcdir=.
+
+trap 'rm -fr Makefile conf.h conftest*; exit 1' 1 2 15
+
+# Protect against being on the right side of a sed subst in config.status.
+sed 's/%@/@@/; s/@%/@@/; s/%g$/@g/; /@g$/s/[\\&%]/\\&/g;
+ s/@@/%@/; s/@@/@%/; s/@g$/%g/' > conftest.subs <<\CEOF
+/^[ ]*VPATH[ ]*=[^:]*$/d
+
+s%@SHELL@%/bin/sh%g
+s%@CFLAGS@%-g -O2%g
+s%@CPPFLAGS@%%g
+s%@CXXFLAGS@%%g
+s%@FFLAGS@%%g
+s%@DEFS@%-DHAVE_CONFIG_H%g
+s%@LDFLAGS@%%g
+s%@LIBS@%%g
+s%@exec_prefix@%${prefix}%g
+s%@prefix@%/usr/local%g
+s%@program_transform_name@%s,x,x,%g
+s%@bindir@%${exec_prefix}/bin%g
+s%@sbindir@%${exec_prefix}/sbin%g
+s%@libexecdir@%${exec_prefix}/libexec%g
+s%@datadir@%${prefix}/share%g
+s%@sysconfdir@%${prefix}/etc%g
+s%@sharedstatedir@%${prefix}/com%g
+s%@localstatedir@%${prefix}/var%g
+s%@libdir@%${exec_prefix}/lib%g
+s%@includedir@%${prefix}/include%g
+s%@oldincludedir@%/usr/include%g
+s%@infodir@%${prefix}/info%g
+s%@mandir@%${prefix}/man%g
+s%@CC@%gcc%g
+s%@CPP@%gcc -E%g
+
+CEOF
+
+# Split the substitutions into bite-sized pieces for seds with
+# small command number limits, like on Digital OSF/1 and HP-UX.
+ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
+ac_file=1 # Number of current file.
+ac_beg=1 # First line for current file.
+ac_end=$ac_max_sed_cmds # Line after last line for current file.
+ac_more_lines=:
+ac_sed_cmds=""
+while $ac_more_lines; do
+ if test $ac_beg -gt 1; then
+ sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
+ else
+ sed "${ac_end}q" conftest.subs > conftest.s$ac_file
+ fi
+ if test ! -s conftest.s$ac_file; then
+ ac_more_lines=false
+ rm -f conftest.s$ac_file
+ else
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds="sed -f conftest.s$ac_file"
+ else
+ ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
+ fi
+ ac_file=`expr $ac_file + 1`
+ ac_beg=$ac_end
+ ac_end=`expr $ac_end + $ac_max_sed_cmds`
+ fi
+done
+if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds=cat
+fi
+
+CONFIG_FILES=${CONFIG_FILES-"Makefile"}
+for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case "$ac_file" in
+ *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+ ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ *) ac_file_in="${ac_file}.in" ;;
+ esac
+
+ # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
+
+ # Remove last slash and all that follows it. Not all systems have dirname.
+ ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+ # The file is in a subdirectory.
+ test ! -d "$ac_dir" && mkdir "$ac_dir"
+ ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
+ else
+ ac_dir_suffix= ac_dots=
+ fi
+
+ case "$ac_given_srcdir" in
+ .) srcdir=.
+ if test -z "$ac_dots"; then top_srcdir=.
+ else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
+ /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
+ *) # Relative path.
+ srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
+ top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+
+
+ echo creating "$ac_file"
+ rm -f "$ac_file"
+ configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
+ case "$ac_file" in
+ *Makefile*) ac_comsub="1i\\
+# $configure_input" ;;
+ *) ac_comsub= ;;
+ esac
+
+ ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+ sed -e "$ac_comsub
+s%@configure_input@%$configure_input%g
+s%@srcdir@%$srcdir%g
+s%@top_srcdir@%$top_srcdir%g
+" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
+fi; done
+rm -f conftest.s*
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)'
+ac_dB='\([ ][ ]*\)[^ ]*%\1#\2'
+ac_dC='\3'
+ac_dD='%g'
+# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
+ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_uB='\([ ]\)%\1#\2define\3'
+ac_uC=' '
+ac_uD='\4%g'
+# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_eB='$%\1#\2define\3'
+ac_eC=' '
+ac_eD='%g'
+
+if test "${CONFIG_HEADERS+set}" != set; then
+ CONFIG_HEADERS="conf.h"
+fi
+for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case "$ac_file" in
+ *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+ ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ *) ac_file_in="${ac_file}.in" ;;
+ esac
+
+ echo creating $ac_file
+
+ rm -f conftest.frag conftest.in conftest.out
+ ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+ cat $ac_file_inputs > conftest.in
+
+ cat > conftest.frag <<CEOF
+${ac_dA}STDC_HEADERS${ac_dB}STDC_HEADERS${ac_dC}1${ac_dD}
+${ac_uA}STDC_HEADERS${ac_uB}STDC_HEADERS${ac_uC}1${ac_uD}
+${ac_eA}STDC_HEADERS${ac_eB}STDC_HEADERS${ac_eC}1${ac_eD}
+${ac_dA}HAVE_TERMIOS_H${ac_dB}HAVE_TERMIOS_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_TERMIOS_H${ac_uB}HAVE_TERMIOS_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_TERMIOS_H${ac_eB}HAVE_TERMIOS_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_SYS_IOCTL_H${ac_dB}HAVE_SYS_IOCTL_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_SYS_IOCTL_H${ac_uB}HAVE_SYS_IOCTL_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_SYS_IOCTL_H${ac_eB}HAVE_SYS_IOCTL_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_NET_IF_H${ac_dB}HAVE_NET_IF_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_NET_IF_H${ac_uB}HAVE_NET_IF_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_NET_IF_H${ac_eB}HAVE_NET_IF_H${ac_eC}1${ac_eD}
+CEOF
+ sed -f conftest.frag conftest.in > conftest.out
+ rm -f conftest.in
+ mv conftest.out conftest.in
+
+ cat > conftest.frag <<CEOF
+${ac_dA}HAVE_NETINET_IN_H${ac_dB}HAVE_NETINET_IN_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_NETINET_IN_H${ac_uB}HAVE_NETINET_IN_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_NETINET_IN_H${ac_eB}HAVE_NETINET_IN_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_NETINET_IN_SYSTM_H${ac_dB}HAVE_NETINET_IN_SYSTM_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_NETINET_IN_SYSTM_H${ac_uB}HAVE_NETINET_IN_SYSTM_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_NETINET_IN_SYSTM_H${ac_eB}HAVE_NETINET_IN_SYSTM_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_NETINET_IP_H${ac_dB}HAVE_NETINET_IP_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_NETINET_IP_H${ac_uB}HAVE_NETINET_IP_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_NETINET_IP_H${ac_eB}HAVE_NETINET_IP_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_NETINET_UDP_H${ac_dB}HAVE_NETINET_UDP_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_NETINET_UDP_H${ac_uB}HAVE_NETINET_UDP_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_NETINET_UDP_H${ac_eB}HAVE_NETINET_UDP_H${ac_eC}1${ac_eD}
+CEOF
+ sed -f conftest.frag conftest.in > conftest.out
+ rm -f conftest.in
+ mv conftest.out conftest.in
+
+ cat > conftest.frag <<CEOF
+${ac_dA}HAVE_NETINET_TCP_H${ac_dB}HAVE_NETINET_TCP_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_NETINET_TCP_H${ac_uB}HAVE_NETINET_TCP_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_NETINET_TCP_H${ac_eB}HAVE_NETINET_TCP_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_NETDB_H${ac_dB}HAVE_NETDB_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_NETDB_H${ac_uB}HAVE_NETDB_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_NETDB_H${ac_eB}HAVE_NETDB_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_ARPA_INET_H${ac_dB}HAVE_ARPA_INET_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_ARPA_INET_H${ac_uB}HAVE_ARPA_INET_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_ARPA_INET_H${ac_eB}HAVE_ARPA_INET_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_SYS_SOCKET_H${ac_dB}HAVE_SYS_SOCKET_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_SYS_SOCKET_H${ac_uB}HAVE_SYS_SOCKET_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_SYS_SOCKET_H${ac_eB}HAVE_SYS_SOCKET_H${ac_eC}1${ac_eD}
+CEOF
+ sed -f conftest.frag conftest.in > conftest.out
+ rm -f conftest.in
+ mv conftest.out conftest.in
+
+ cat > conftest.frag <<CEOF
+${ac_dA}HAVE_FCNTL_H${ac_dB}HAVE_FCNTL_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_FCNTL_H${ac_uB}HAVE_FCNTL_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_FCNTL_H${ac_eB}HAVE_FCNTL_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_LINUX_IF_ETHER_H${ac_dB}HAVE_LINUX_IF_ETHER_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_LINUX_IF_ETHER_H${ac_uB}HAVE_LINUX_IF_ETHER_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_LINUX_IF_ETHER_H${ac_eB}HAVE_LINUX_IF_ETHER_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_SIGNAL_H${ac_dB}HAVE_SIGNAL_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_SIGNAL_H${ac_uB}HAVE_SIGNAL_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_SIGNAL_H${ac_eB}HAVE_SIGNAL_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_STRING_H${ac_dB}HAVE_STRING_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_STRING_H${ac_uB}HAVE_STRING_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_STRING_H${ac_eB}HAVE_STRING_H${ac_eC}1${ac_eD}
+CEOF
+ sed -f conftest.frag conftest.in > conftest.out
+ rm -f conftest.in
+ mv conftest.out conftest.in
+
+ cat > conftest.frag <<CEOF
+${ac_dA}HAVE_STDLIB_H${ac_dB}HAVE_STDLIB_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_STDLIB_H${ac_uB}HAVE_STDLIB_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_STDLIB_H${ac_eB}HAVE_STDLIB_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_STDIO_H${ac_dB}HAVE_STDIO_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_STDIO_H${ac_uB}HAVE_STDIO_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_STDIO_H${ac_eB}HAVE_STDIO_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_SYS_TIME_H${ac_dB}HAVE_SYS_TIME_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_SYS_TIME_H${ac_uB}HAVE_SYS_TIME_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_SYS_TIME_H${ac_eB}HAVE_SYS_TIME_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_UNISTD_H${ac_dB}HAVE_UNISTD_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_UNISTD_H${ac_uB}HAVE_UNISTD_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_UNISTD_H${ac_eB}HAVE_UNISTD_H${ac_eC}1${ac_eD}
+CEOF
+ sed -f conftest.frag conftest.in > conftest.out
+ rm -f conftest.in
+ mv conftest.out conftest.in
+
+ cat > conftest.frag <<CEOF
+${ac_dA}HAVE_SYS_STAT_H${ac_dB}HAVE_SYS_STAT_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_SYS_STAT_H${ac_uB}HAVE_SYS_STAT_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_SYS_STAT_H${ac_eB}HAVE_SYS_STAT_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_SYS_TYPES_H${ac_dB}HAVE_SYS_TYPES_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_SYS_TYPES_H${ac_uB}HAVE_SYS_TYPES_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_SYS_TYPES_H${ac_eB}HAVE_SYS_TYPES_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_ERRNO_H${ac_dB}HAVE_ERRNO_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_ERRNO_H${ac_uB}HAVE_ERRNO_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_ERRNO_H${ac_eB}HAVE_ERRNO_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_LINUX_SOCKIOS_H${ac_dB}HAVE_LINUX_SOCKIOS_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_LINUX_SOCKIOS_H${ac_uB}HAVE_LINUX_SOCKIOS_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_LINUX_SOCKIOS_H${ac_eB}HAVE_LINUX_SOCKIOS_H${ac_eC}1${ac_eD}
+CEOF
+ sed -f conftest.frag conftest.in > conftest.out
+ rm -f conftest.in
+ mv conftest.out conftest.in
+
+ cat > conftest.frag <<CEOF
+${ac_dA}HAVE_CTYPE_H${ac_dB}HAVE_CTYPE_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_CTYPE_H${ac_uB}HAVE_CTYPE_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_CTYPE_H${ac_eB}HAVE_CTYPE_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_SYS_SOCKET_H${ac_dB}HAVE_SYS_SOCKET_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_SYS_SOCKET_H${ac_uB}HAVE_SYS_SOCKET_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_SYS_SOCKET_H${ac_eB}HAVE_SYS_SOCKET_H${ac_eC}1${ac_eD}
+${ac_dA}TIME_WITH_SYS_TIME${ac_dB}TIME_WITH_SYS_TIME${ac_dC}1${ac_dD}
+${ac_uA}TIME_WITH_SYS_TIME${ac_uB}TIME_WITH_SYS_TIME${ac_uC}1${ac_uD}
+${ac_eA}TIME_WITH_SYS_TIME${ac_eB}TIME_WITH_SYS_TIME${ac_eC}1${ac_eD}
+s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
+CEOF
+ sed -f conftest.frag conftest.in > conftest.out
+ rm -f conftest.in
+ mv conftest.out conftest.in
+
+ rm -f conftest.frag conftest.h
+ echo "/* $ac_file. Generated automatically by configure. */" > conftest.h
+ cat conftest.in >> conftest.h
+ rm -f conftest.in
+ if cmp -s $ac_file conftest.h 2>/dev/null; then
+ echo "$ac_file is unchanged"
+ rm -f conftest.h
+ else
+ # Remove last slash and all that follows it. Not all systems have dirname.
+ ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+ # The file is in a subdirectory.
+ test ! -d "$ac_dir" && mkdir "$ac_dir"
+ fi
+ rm -f $ac_file
+ mv conftest.h $ac_file
+ fi
+fi; done
+
+
+
+exit 0
diff --git a/package/etrax-tools/src/e100boot/sbl/configure b/package/etrax-tools/src/e100boot/sbl/configure
new file mode 100755
index 000000000..16b8bf52f
--- /dev/null
+++ b/package/etrax-tools/src/e100boot/sbl/configure
@@ -0,0 +1,1405 @@
+#! /bin/sh
+
+# Guess values for system-dependent variables and create Makefiles.
+# Generated automatically using autoconf version 2.13
+# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+
+# Defaults:
+ac_help=
+ac_default_prefix=/usr/local
+# Any additions from configure.in:
+
+# Initialize some variables set by options.
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+build=NONE
+cache_file=./config.cache
+exec_prefix=NONE
+host=NONE
+no_create=
+nonopt=NONE
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+target=NONE
+verbose=
+x_includes=NONE
+x_libraries=NONE
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+# Initialize some other variables.
+subdirs=
+MFLAGS= MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+# Maximum number of lines to put in a shell here document.
+ac_max_here_lines=12
+
+ac_prev=
+for ac_option
+do
+
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval "$ac_prev=\$ac_option"
+ ac_prev=
+ continue
+ fi
+
+ case "$ac_option" in
+ -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+ *) ac_optarg= ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case "$ac_option" in
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir="$ac_optarg" ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build="$ac_optarg" ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file="$ac_optarg" ;;
+
+ -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+ | --da=*)
+ datadir="$ac_optarg" ;;
+
+ -disable-* | --disable-*)
+ ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
+ { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+ fi
+ ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+ eval "enable_${ac_feature}=no" ;;
+
+ -enable-* | --enable-*)
+ ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
+ { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+ fi
+ ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+ case "$ac_option" in
+ *=*) ;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "enable_${ac_feature}='$ac_optarg'" ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix="$ac_optarg" ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he)
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat << EOF
+Usage: configure [options] [host]
+Options: [defaults in brackets after descriptions]
+Configuration:
+ --cache-file=FILE cache test results in FILE
+ --help print this message
+ --no-create do not create output files
+ --quiet, --silent do not print \`checking...' messages
+ --version print the version of autoconf that created configure
+Directory and file names:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [same as prefix]
+ --bindir=DIR user executables in DIR [EPREFIX/bin]
+ --sbindir=DIR system admin executables in DIR [EPREFIX/sbin]
+ --libexecdir=DIR program executables in DIR [EPREFIX/libexec]
+ --datadir=DIR read-only architecture-independent data in DIR
+ [PREFIX/share]
+ --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data in DIR
+ [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var]
+ --libdir=DIR object code libraries in DIR [EPREFIX/lib]
+ --includedir=DIR C header files in DIR [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include]
+ --infodir=DIR info documentation in DIR [PREFIX/info]
+ --mandir=DIR man documentation in DIR [PREFIX/man]
+ --srcdir=DIR find the sources in DIR [configure dir or ..]
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM
+ run sed PROGRAM on installed program names
+EOF
+ cat << EOF
+Host type:
+ --build=BUILD configure for building on BUILD [BUILD=HOST]
+ --host=HOST configure for HOST [guessed]
+ --target=TARGET configure for TARGET [TARGET=HOST]
+Features and packages:
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --x-includes=DIR X include files are in DIR
+ --x-libraries=DIR X library files are in DIR
+EOF
+ if test -n "$ac_help"; then
+ echo "--enable and --with options recognized:$ac_help"
+ fi
+ exit 0 ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host="$ac_optarg" ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir="$ac_optarg" ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir="$ac_optarg" ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir="$ac_optarg" ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir="$ac_optarg" ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst \
+ | --locals | --local | --loca | --loc | --lo)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+ localstatedir="$ac_optarg" ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir="$ac_optarg" ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir="$ac_optarg" ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix="$ac_optarg" ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix="$ac_optarg" ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix="$ac_optarg" ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name="$ac_optarg" ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir="$ac_optarg" ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir="$ac_optarg" ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site="$ac_optarg" ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir="$ac_optarg" ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir="$ac_optarg" ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target="$ac_optarg" ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers)
+ echo "configure generated by autoconf version 2.13"
+ exit 0 ;;
+
+ -with-* | --with-*)
+ ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
+ { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+ fi
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ case "$ac_option" in
+ *=*) ;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "with_${ac_package}='$ac_optarg'" ;;
+
+ -without-* | --without-*)
+ ac_package=`echo $ac_option|sed -e 's/-*without-//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
+ { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+ fi
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ eval "with_${ac_package}=no" ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes="$ac_optarg" ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries="$ac_optarg" ;;
+
+ -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
+ ;;
+
+ *)
+ if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
+ echo "configure: warning: $ac_option: invalid host type" 1>&2
+ fi
+ if test "x$nonopt" != xNONE; then
+ { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
+ fi
+ nonopt="$ac_option"
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
+fi
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+# File descriptor usage:
+# 0 standard input
+# 1 file creation
+# 2 errors and warnings
+# 3 some systems may open it to /dev/tty
+# 4 used on the Kubota Titan
+# 6 checking for... messages and results
+# 5 compiler messages saved in config.log
+if test "$silent" = yes; then
+ exec 6>/dev/null
+else
+ exec 6>&1
+fi
+exec 5>./config.log
+
+echo "\
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+" 1>&5
+
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Also quote any args containing shell metacharacters.
+ac_configure_args=
+for ac_arg
+do
+ case "$ac_arg" in
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c) ;;
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
+ ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+ *) ac_configure_args="$ac_configure_args $ac_arg" ;;
+ esac
+done
+
+# NLS nuisances.
+# Only set these to C if already set. These must not be set unconditionally
+# because not all systems understand e.g. LANG=C (notably SCO).
+# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
+# Non-C LC_CTYPE values break the ctype check.
+if test "${LANG+set}" = set; then LANG=C; export LANG; fi
+if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
+if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
+if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo > confdefs.h
+
+# A filename unique to this package, relative to the directory that
+# configure is in, which we can look for to find out if srcdir is correct.
+ac_unique_file=common.c
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then its parent.
+ ac_prog=$0
+ ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
+ test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
+ srcdir=$ac_confdir
+ if test ! -r $srcdir/$ac_unique_file; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+ if test "$ac_srcdir_defaulted" = yes; then
+ { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
+ else
+ { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
+ fi
+fi
+srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
+
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+ if test "x$prefix" != xNONE; then
+ CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+ else
+ CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+ fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+ if test -r "$ac_site_file"; then
+ echo "loading site script $ac_site_file"
+ . "$ac_site_file"
+ fi
+done
+
+if test -r "$cache_file"; then
+ echo "loading cache $cache_file"
+ . $cache_file
+else
+ echo "creating cache $cache_file"
+ > $cache_file
+fi
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+ac_exeext=
+ac_objext=o
+if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+ # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
+ if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
+ ac_n= ac_c='
+' ac_t=' '
+ else
+ ac_n=-n ac_c= ac_t=
+ fi
+else
+ ac_n= ac_c='\c' ac_t=
+fi
+
+
+
+
+# Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:530: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_CC="gcc"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+ echo "$ac_t""$CC" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:560: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_prog_rejected=no
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# -gt 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ set dummy "$ac_dir/$ac_word" "$@"
+ shift
+ ac_cv_prog_CC="$@"
+ fi
+fi
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+ echo "$ac_t""$CC" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ if test -z "$CC"; then
+ case "`uname -s`" in
+ *win32* | *WIN32*)
+ # Extract the first word of "cl", so it can be a program name with args.
+set dummy cl; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:611: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_CC="cl"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+ echo "$ac_t""$CC" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+ ;;
+ esac
+ fi
+ test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
+fi
+
+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
+echo "configure:643: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+cat > conftest.$ac_ext << EOF
+
+#line 654 "configure"
+#include "confdefs.h"
+
+main(){return(0);}
+EOF
+if { (eval echo configure:659: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ ac_cv_prog_cc_works=yes
+ # If we can't run a trivial program, we are probably using a cross compiler.
+ if (./conftest; exit) 2>/dev/null; then
+ ac_cv_prog_cc_cross=no
+ else
+ ac_cv_prog_cc_cross=yes
+ fi
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ ac_cv_prog_cc_works=no
+fi
+rm -fr conftest*
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
+if test $ac_cv_prog_cc_works = no; then
+ { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
+fi
+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
+echo "configure:685: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
+cross_compiling=$ac_cv_prog_cc_cross
+
+echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
+echo "configure:690: checking whether we are using GNU C" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.c <<EOF
+#ifdef __GNUC__
+ yes;
+#endif
+EOF
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:699: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+ ac_cv_prog_gcc=yes
+else
+ ac_cv_prog_gcc=no
+fi
+fi
+
+echo "$ac_t""$ac_cv_prog_gcc" 1>&6
+
+if test $ac_cv_prog_gcc = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+
+ac_test_CFLAGS="${CFLAGS+set}"
+ac_save_CFLAGS="$CFLAGS"
+CFLAGS=
+echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
+echo "configure:718: checking whether ${CC-cc} accepts -g" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ echo 'void f(){}' > conftest.c
+if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
+ ac_cv_prog_cc_g=yes
+else
+ ac_cv_prog_cc_g=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS="$ac_save_CFLAGS"
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+
+
+echo $ac_n "checking for pcap_open_live in -lpcap""... $ac_c" 1>&6
+echo "configure:751: checking for pcap_open_live in -lpcap" >&5
+ac_lib_var=`echo pcap'_'pcap_open_live | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lpcap $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 759 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char pcap_open_live();
+
+int main() {
+pcap_open_live()
+; return 0; }
+EOF
+if { (eval echo configure:770: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_lib=HAVE_LIB`echo pcap | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+ LIBS="-lpcap $LIBS"
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+
+echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
+echo "configure:799: checking how to run the C preprocessor" >&5
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ # This must be in double quotes, not single quotes, because CPP may get
+ # substituted into the Makefile and "${CC-cc}" will confuse make.
+ CPP="${CC-cc} -E"
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp.
+ cat > conftest.$ac_ext <<EOF
+#line 814 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:820: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ :
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ CPP="${CC-cc} -E -traditional-cpp"
+ cat > conftest.$ac_ext <<EOF
+#line 831 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:837: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ :
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ CPP="${CC-cc} -nologo -E"
+ cat > conftest.$ac_ext <<EOF
+#line 848 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:854: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ :
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ CPP=/lib/cpp
+fi
+rm -f conftest*
+fi
+rm -f conftest*
+fi
+rm -f conftest*
+ ac_cv_prog_CPP="$CPP"
+fi
+ CPP="$ac_cv_prog_CPP"
+else
+ ac_cv_prog_CPP="$CPP"
+fi
+echo "$ac_t""$CPP" 1>&6
+
+echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
+echo "configure:879: checking for ANSI C header files" >&5
+if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 884 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:892: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ ac_cv_header_stdc=yes
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+cat > conftest.$ac_ext <<EOF
+#line 909 "configure"
+#include "confdefs.h"
+#include <string.h>
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ egrep "memchr" >/dev/null 2>&1; then
+ :
+else
+ rm -rf conftest*
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+cat > conftest.$ac_ext <<EOF
+#line 927 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ egrep "free" >/dev/null 2>&1; then
+ :
+else
+ rm -rf conftest*
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+if test "$cross_compiling" = yes; then
+ :
+else
+ cat > conftest.$ac_ext <<EOF
+#line 948 "configure"
+#include "confdefs.h"
+#include <ctype.h>
+#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int main () { int i; for (i = 0; i < 256; i++)
+if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
+exit (0); }
+
+EOF
+if { (eval echo configure:959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+ :
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+ ac_cv_header_stdc=no
+fi
+rm -fr conftest*
+fi
+
+fi
+fi
+
+echo "$ac_t""$ac_cv_header_stdc" 1>&6
+if test $ac_cv_header_stdc = yes; then
+ cat >> confdefs.h <<\EOF
+#define STDC_HEADERS 1
+EOF
+
+fi
+
+for ac_hdr in termios.h sys/ioctl.h net/if.h netinet/in.h netinet/in_systm.h netinet/ip.h netinet/udp.h netinet/tcp.h netdb.h arpa/inet.h sys/socket.h fcntl.h linux/if_ether.h signal.h string.h stdlib.h stdio.h sys/time.h unistd.h sys/stat.h sys/types.h errno.h linux/sockios.h ctype.h sys/socket.h pcap/pcap.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:986: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 991 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:996: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+done
+
+
+echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
+echo "configure:1024: checking whether time.h and sys/time.h may both be included" >&5
+if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1029 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <sys/time.h>
+#include <time.h>
+int main() {
+struct tm *tp;
+; return 0; }
+EOF
+if { (eval echo configure:1038: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_header_time=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ ac_cv_header_time=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_header_time" 1>&6
+if test $ac_cv_header_time = yes; then
+ cat >> confdefs.h <<\EOF
+#define TIME_WITH_SYS_TIME 1
+EOF
+
+fi
+
+
+trap '' 1 2 15
+cat > confcache <<\EOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs. It is not useful on other systems.
+# If it contains results you don't want to keep, you may remove or edit it.
+#
+# By default, configure uses ./config.cache as the cache file,
+# creating it if it does not exist already. You can give configure
+# the --cache-file=FILE option to use a different cache file; that is
+# what configure does when it calls configure scripts in
+# subdirectories, so they share the cache.
+# Giving --cache-file=/dev/null disables caching, for debugging configure.
+# config.status only pays attention to the cache file if you give it the
+# --recheck option to rerun configure.
+#
+EOF
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(set) 2>&1 |
+ case `(ac_space=' '; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ # `set' does not quote correctly, so add quotes (double-quote substitution
+ # turns \\\\ into \\, and sed turns \\ into \).
+ sed -n \
+ -e "s/'/'\\\\''/g" \
+ -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
+ ;;
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
+ ;;
+ esac >> confcache
+if cmp -s $cache_file confcache; then
+ :
+else
+ if test -w $cache_file; then
+ echo "updating cache $cache_file"
+ cat confcache > $cache_file
+ else
+ echo "not updating unwritable cache $cache_file"
+ fi
+fi
+rm -f confcache
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Any assignment to VPATH causes Sun make to only execute
+# the first set of double-colon rules, so remove it if not needed.
+# If there is a colon in the path, we need to keep it.
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d'
+fi
+
+trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
+
+DEFS=-DHAVE_CONFIG_H
+
+# Without the "./", some shells look in PATH for config.status.
+: ${CONFIG_STATUS=./config.status}
+
+echo creating $CONFIG_STATUS
+rm -f $CONFIG_STATUS
+cat > $CONFIG_STATUS <<EOF
+#! /bin/sh
+# Generated automatically by configure.
+# Run this file to recreate the current configuration.
+# This directory was configured as follows,
+# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+#
+# $0 $ac_configure_args
+#
+# Compiler output produced by configure, useful for debugging
+# configure, is in ./config.log if it exists.
+
+ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
+for ac_option
+do
+ case "\$ac_option" in
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
+ exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
+ -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
+ echo "$CONFIG_STATUS generated by autoconf version 2.13"
+ exit 0 ;;
+ -help | --help | --hel | --he | --h)
+ echo "\$ac_cs_usage"; exit 0 ;;
+ *) echo "\$ac_cs_usage"; exit 1 ;;
+ esac
+done
+
+ac_given_srcdir=$srcdir
+
+trap 'rm -fr `echo "Makefile conf.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+# Protect against being on the right side of a sed subst in config.status.
+sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
+ s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
+$ac_vpsub
+$extrasub
+s%@SHELL@%$SHELL%g
+s%@CFLAGS@%$CFLAGS%g
+s%@CPPFLAGS@%$CPPFLAGS%g
+s%@CXXFLAGS@%$CXXFLAGS%g
+s%@FFLAGS@%$FFLAGS%g
+s%@DEFS@%$DEFS%g
+s%@LDFLAGS@%$LDFLAGS%g
+s%@LIBS@%$LIBS%g
+s%@exec_prefix@%$exec_prefix%g
+s%@prefix@%$prefix%g
+s%@program_transform_name@%$program_transform_name%g
+s%@bindir@%$bindir%g
+s%@sbindir@%$sbindir%g
+s%@libexecdir@%$libexecdir%g
+s%@datadir@%$datadir%g
+s%@sysconfdir@%$sysconfdir%g
+s%@sharedstatedir@%$sharedstatedir%g
+s%@localstatedir@%$localstatedir%g
+s%@libdir@%$libdir%g
+s%@includedir@%$includedir%g
+s%@oldincludedir@%$oldincludedir%g
+s%@infodir@%$infodir%g
+s%@mandir@%$mandir%g
+s%@CC@%$CC%g
+s%@CPP@%$CPP%g
+
+CEOF
+EOF
+
+cat >> $CONFIG_STATUS <<\EOF
+
+# Split the substitutions into bite-sized pieces for seds with
+# small command number limits, like on Digital OSF/1 and HP-UX.
+ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
+ac_file=1 # Number of current file.
+ac_beg=1 # First line for current file.
+ac_end=$ac_max_sed_cmds # Line after last line for current file.
+ac_more_lines=:
+ac_sed_cmds=""
+while $ac_more_lines; do
+ if test $ac_beg -gt 1; then
+ sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
+ else
+ sed "${ac_end}q" conftest.subs > conftest.s$ac_file
+ fi
+ if test ! -s conftest.s$ac_file; then
+ ac_more_lines=false
+ rm -f conftest.s$ac_file
+ else
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds="sed -f conftest.s$ac_file"
+ else
+ ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
+ fi
+ ac_file=`expr $ac_file + 1`
+ ac_beg=$ac_end
+ ac_end=`expr $ac_end + $ac_max_sed_cmds`
+ fi
+done
+if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds=cat
+fi
+EOF
+
+cat >> $CONFIG_STATUS <<EOF
+
+CONFIG_FILES=\${CONFIG_FILES-"Makefile"}
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case "$ac_file" in
+ *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+ ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ *) ac_file_in="${ac_file}.in" ;;
+ esac
+
+ # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
+
+ # Remove last slash and all that follows it. Not all systems have dirname.
+ ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+ # The file is in a subdirectory.
+ test ! -d "$ac_dir" && mkdir "$ac_dir"
+ ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
+ else
+ ac_dir_suffix= ac_dots=
+ fi
+
+ case "$ac_given_srcdir" in
+ .) srcdir=.
+ if test -z "$ac_dots"; then top_srcdir=.
+ else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
+ /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
+ *) # Relative path.
+ srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
+ top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+
+
+ echo creating "$ac_file"
+ rm -f "$ac_file"
+ configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
+ case "$ac_file" in
+ *Makefile*) ac_comsub="1i\\
+# $configure_input" ;;
+ *) ac_comsub= ;;
+ esac
+
+ ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+ sed -e "$ac_comsub
+s%@configure_input@%$configure_input%g
+s%@srcdir@%$srcdir%g
+s%@top_srcdir@%$top_srcdir%g
+" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
+fi; done
+rm -f conftest.s*
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)'
+ac_dB='\([ ][ ]*\)[^ ]*%\1#\2'
+ac_dC='\3'
+ac_dD='%g'
+# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
+ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_uB='\([ ]\)%\1#\2define\3'
+ac_uC=' '
+ac_uD='\4%g'
+# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_eB='$%\1#\2define\3'
+ac_eC=' '
+ac_eD='%g'
+
+if test "${CONFIG_HEADERS+set}" != set; then
+EOF
+cat >> $CONFIG_STATUS <<EOF
+ CONFIG_HEADERS="conf.h"
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+fi
+for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case "$ac_file" in
+ *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+ ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ *) ac_file_in="${ac_file}.in" ;;
+ esac
+
+ echo creating $ac_file
+
+ rm -f conftest.frag conftest.in conftest.out
+ ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+ cat $ac_file_inputs > conftest.in
+
+EOF
+
+# Transform confdefs.h into a sed script conftest.vals that substitutes
+# the proper values into config.h.in to produce config.h. And first:
+# Protect against being on the right side of a sed subst in config.status.
+# Protect against being in an unquoted here document in config.status.
+rm -f conftest.vals
+cat > conftest.hdr <<\EOF
+s/[\\&%]/\\&/g
+s%[\\$`]%\\&%g
+s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
+s%ac_d%ac_u%gp
+s%ac_u%ac_e%gp
+EOF
+sed -n -f conftest.hdr confdefs.h > conftest.vals
+rm -f conftest.hdr
+
+# This sed command replaces #undef with comments. This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+cat >> conftest.vals <<\EOF
+s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
+EOF
+
+# Break up conftest.vals because some shells have a limit on
+# the size of here documents, and old seds have small limits too.
+
+rm -f conftest.tail
+while :
+do
+ ac_lines=`grep -c . conftest.vals`
+ # grep -c gives empty output for an empty file on some AIX systems.
+ if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
+ # Write a limited-size here document to conftest.frag.
+ echo ' cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
+ sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
+ echo 'CEOF
+ sed -f conftest.frag conftest.in > conftest.out
+ rm -f conftest.in
+ mv conftest.out conftest.in
+' >> $CONFIG_STATUS
+ sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
+ rm -f conftest.vals
+ mv conftest.tail conftest.vals
+done
+rm -f conftest.vals
+
+cat >> $CONFIG_STATUS <<\EOF
+ rm -f conftest.frag conftest.h
+ echo "/* $ac_file. Generated automatically by configure. */" > conftest.h
+ cat conftest.in >> conftest.h
+ rm -f conftest.in
+ if cmp -s $ac_file conftest.h 2>/dev/null; then
+ echo "$ac_file is unchanged"
+ rm -f conftest.h
+ else
+ # Remove last slash and all that follows it. Not all systems have dirname.
+ ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+ # The file is in a subdirectory.
+ test ! -d "$ac_dir" && mkdir "$ac_dir"
+ fi
+ rm -f $ac_file
+ mv conftest.h $ac_file
+ fi
+fi; done
+
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+
+exit 0
+EOF
+chmod +x $CONFIG_STATUS
+rm -fr confdefs* $ac_clean_files
+test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+
diff --git a/package/etrax-tools/src/e100boot/sbl/configure.in b/package/etrax-tools/src/e100boot/sbl/configure.in
new file mode 100644
index 000000000..24e161c50
--- /dev/null
+++ b/package/etrax-tools/src/e100boot/sbl/configure.in
@@ -0,0 +1,19 @@
+dnl Process this file with autoconf to produce a configure script.
+AC_INIT(common.c)
+AC_CONFIG_HEADER(conf.h)
+
+dnl Checks for programs.
+AC_PROG_CC
+
+dnl Checks for libraries.
+AC_CHECK_LIB(pcap, pcap_open_live)
+
+dnl Checks for header files.
+AC_HEADER_STDC
+AC_CHECK_HEADERS(termios.h sys/ioctl.h net/if.h netinet/in.h netinet/in_systm.h netinet/ip.h netinet/udp.h netinet/tcp.h netdb.h arpa/inet.h sys/socket.h fcntl.h linux/if_ether.h signal.h string.h stdlib.h stdio.h sys/time.h unistd.h sys/stat.h sys/types.h errno.h linux/sockios.h ctype.h sys/socket.h pcap/pcap.h)
+
+dnl Check for typedefs, structures, and compiler characteristics.
+AC_HEADER_TIME
+
+dnl Checks for library functions.
+AC_OUTPUT(Makefile)
diff --git a/package/etrax-tools/src/e100boot/sbl/create_regs.pl b/package/etrax-tools/src/e100boot/sbl/create_regs.pl
new file mode 100755
index 000000000..5127538b7
--- /dev/null
+++ b/package/etrax-tools/src/e100boot/sbl/create_regs.pl
@@ -0,0 +1,14 @@
+#!/usr/bin/perl
+
+print "struct reg_des {
+ char *name;
+ unsigned int addr;
+} reg_des[] = {\n";
+while(<>) {
+ if (/define+ (\w+) .*IO_TYPECAST+.*DWORD.*\s+(\w+)/) {
+ print " \"$1\", $2,\n";
+ }
+}
+ print " NULL, 0
+};
+";
diff --git a/package/etrax-tools/src/e100boot/sbl/net_ima.c b/package/etrax-tools/src/e100boot/sbl/net_ima.c
new file mode 100644
index 000000000..749fe1ef8
--- /dev/null
+++ b/package/etrax-tools/src/e100boot/sbl/net_ima.c
@@ -0,0 +1,891 @@
+
+/* cconv 1.2 12/16/97, Copyright (C) 1997, Axis Communications AB */
+
+const char net_ima[] =
+{
+ '\x0f', '\x05', '\x0f', '\x05', '\x6f', '\xee', '\x00', '\x1f',
+ '\x00', '\x38', '\x3f', '\x0d', '\x08', '\x01', '\x00', '\x38',
+ '\x78', '\x56', '\x34', '\x12', '\x21', '\x43', '\x65', '\x87',
+ '\x6f', '\xde', '\x20', '\x00', '\x00', '\xb0', '\x5f', '\x9c',
+ '\x65', '\x6f', '\xed', '\x9b', '\x5f', '\x9c', '\x25', '\x2f',
+ '\x7f', '\x0d', '\x80', '\x18', '\x00', '\x38', '\xe9', '\x9b',
+ '\xed', '\x9b', '\x3f', '\x0d', '\x28', '\x01', '\x00', '\x38',
+ '\xfc', '\xe1', '\x7e', '\xbe', '\x7e', '\x92', '\x7f', '\x0d',
+ '\x31', '\x00', '\x00', '\xb0', '\xc9', '\x9b', '\x7f', '\x0d',
+ '\x30', '\x00', '\x00', '\xb0', '\x70', '\x0a', '\x7f', '\x92',
+ '\x7f', '\x0d', '\x80', '\x18', '\x00', '\x38', '\xc9', '\x9b',
+ '\x7f', '\x0d', '\x39', '\x00', '\x00', '\xb0', '\xc9', '\x9b',
+ '\x7f', '\x0d', '\x38', '\x00', '\x00', '\xb0', '\xc9', '\x9b',
+ '\x7f', '\x0d', '\x22', '\x1d', '\x00', '\x38', '\x70', '\x8a',
+ '\x6f', '\x9e', '\x20', '\x00', '\x00', '\xb0', '\x69', '\x9a',
+ '\x79', '\x67', '\x7f', '\x0d', '\xd6', '\x1c', '\x00', '\x38',
+ '\xe9', '\x9b', '\x6f', '\x9e', '\x22', '\x00', '\x00', '\xb0',
+ '\x59', '\x9a', '\x59', '\x94', '\x7f', '\x0d', '\x3e', '\x1d',
+ '\x00', '\x38', '\xe9', '\x9b', '\x6f', '\x9e', '\x04', '\x00',
+ '\x00', '\xb0', '\x69', '\x9a', '\x06', '\x93', '\xe1', '\x93',
+ '\x81', '\x92', '\x7f', '\x0d', '\x26', '\x1d', '\x00', '\x38',
+ '\xc9', '\x9b', '\x7f', '\x0d', '\xe8', '\x1c', '\x00', '\x38',
+ '\x70', '\x4a', '\x3f', '\xbd', '\x68', '\x02', '\x00', '\x38',
+ '\x3f', '\xbd', '\x70', '\x04', '\x00', '\x38', '\x3f', '\xbd',
+ '\x0c', '\x02', '\x00', '\x38', '\x6a', '\xa6', '\xf7', '\x30',
+ '\x0f', '\x05', '\x6f', '\x9e', '\x00', '\x01', '\x00', '\x38',
+ '\x69', '\x9a', '\x7f', '\x0d', '\x22', '\x1d', '\x00', '\x38',
+ '\xe9', '\x9a', '\x24', '\x80', '\x0f', '\x05', '\x6f', '\x9e',
+ '\x26', '\x1d', '\x00', '\x38', '\x49', '\x9a', '\xcf', '\x9e',
+ '\x01', '\x00', '\xd3', '\x20', '\x0f', '\x05', '\x6f', '\xde',
+ '\xd4', '\x01', '\x00', '\xb0', '\x4d', '\x9a', '\x38', '\x93',
+ '\x41', '\x93', '\xcd', '\x9b', '\xc1', '\xe0', '\x0f', '\x05',
+ '\x4f', '\x9e', '\x55', '\x00', '\x7f', '\x0d', '\x80', '\x18',
+ '\x00', '\x38', '\xc9', '\x9b', '\x7f', '\x0d', '\x30', '\x00',
+ '\x00', '\xb0', '\xc9', '\x9b', '\x3e', '\xbe', '\x3f', '\x0d',
+ '\xc0', '\x05', '\x00', '\x38', '\xfc', '\xe1', '\x7e', '\xbe',
+ '\x3f', '\xbd', '\xa2', '\x03', '\x00', '\x38', '\x6a', '\xa6',
+ '\x16', '\x20', '\x41', '\x92', '\x3f', '\xbd', '\x34', '\x02',
+ '\x00', '\x38', '\x6a', '\xa6', '\x0a', '\x30', '\x79', '\x86',
+ '\x3f', '\xbd', '\x70', '\x04', '\x00', '\x38', '\x79', '\x86',
+ '\x69', '\xa6', '\x3e', '\x0d', '\x84', '\xe2', '\x6f', '\x9e',
+ '\x22', '\x00', '\x00', '\xb0', '\x59', '\x9a', '\x59', '\x94',
+ '\xee', '\x9b', '\x6f', '\xce', '\x3e', '\x1d', '\x00', '\x38',
+ '\x6c', '\x9a', '\x6e', '\xda', '\xad', '\x96', '\xb9', '\x96',
+ '\xdf', '\x9c', '\x80', '\x25', '\x0a', '\xd0', '\x0f', '\x05',
+ '\x6e', '\x9a', '\xec', '\x9b', '\x04', '\xe0', '\x41', '\xa2',
+ '\x7a', '\x86', '\x7f', '\xb6', '\x04', '\xe2', '\x00', '\x00',
+ '\x88', '\xe2', '\xfe', '\x1b', '\x6f', '\x9e', '\x8c', '\x00',
+ '\x00', '\xb0', '\x79', '\x8a', '\x69', '\x9a', '\x7f', '\x0d',
+ '\x90', '\x00', '\x00', '\xb0', '\xe9', '\x9b', '\x6f', '\x9e',
+ '\x01', '\x40', '\x8c', '\x00', '\x7f', '\x0d', '\x80', '\x00',
+ '\x00', '\xb0', '\xe9', '\x9b', '\x6f', '\xce', '\x01', '\x00',
+ '\x01', '\x40', '\x7f', '\x0d', '\x84', '\x00', '\x00', '\xb0',
+ '\xec', '\xcb', '\x6f', '\xde', '\x8c', '\x00', '\x01', '\x00',
+ '\x7f', '\x0d', '\x88', '\x00', '\x00', '\xb0', '\xed', '\xdb',
+ '\x41', '\x12', '\x7f', '\x0d', '\x94', '\x00', '\x00', '\xb0',
+ '\xe1', '\x1b', '\x7f', '\x0d', '\xa0', '\x00', '\x00', '\xb0',
+ '\x70', '\x8a', '\x5f', '\x9c', '\x02', '\x01', '\x7f', '\x0d',
+ '\x9c', '\x00', '\x00', '\xb0', '\xe9', '\x9b', '\x43', '\xc2',
+ '\x7f', '\x0d', '\x98', '\x00', '\x00', '\xb0', '\xec', '\xcb',
+ '\x44', '\xd2', '\x7f', '\x0d', '\xd0', '\x01', '\x00', '\xb0',
+ '\xcd', '\xdb', '\x6f', '\x0e', '\xd4', '\x01', '\x00', '\xb0',
+ '\xc0', '\xdb', '\x6f', '\xbe', '\xa4', '\x1c', '\x00', '\x38',
+ '\x6b', '\x96', '\x4f', '\xcc', '\x26', '\x00', '\xd9', '\xcf',
+ '\x79', '\x4a', '\x6f', '\xde', '\xda', '\x1c', '\x00', '\x38',
+ '\x04', '\xb1', '\xed', '\xdb', '\x6f', '\x9e', '\xfc', '\x1c',
+ '\x00', '\x38', '\x08', '\xb1', '\xe9', '\x9b', '\x6d', '\x96',
+ '\x5f', '\xce', '\xdc', '\x05', '\xd9', '\xcf', '\x47', '\xc2',
+ '\xd9', '\xcb', '\x6f', '\x9e', '\x04', '\x01', '\x00', '\x38',
+ '\x69', '\x9a', '\x08', '\xd1', '\xe9', '\x9b', '\x6f', '\xce',
+ '\xba', '\x1c', '\x00', '\x38', '\x6f', '\x9e', '\x00', '\x8c',
+ '\x40', '\x02', '\x79', '\x67', '\x6c', '\xd6', '\xed', '\x9f',
+ '\x5f', '\x9e', '\x00', '\x01', '\x79', '\x27', '\xdd', '\x9b',
+ '\x6c', '\xa6', '\x86', '\xa2', '\x4f', '\x9c', '\x40', '\x00',
+ '\x79', '\x27', '\x06', '\xc1', '\xd9', '\x9b', '\x6f', '\x9e',
+ '\x00', '\x03', '\xaa', '\xaa', '\x79', '\x67', '\x08', '\xc1',
+ '\xe9', '\x9b', '\x6f', '\x9e', '\x56', '\x88', '\x8c', '\x40',
+ '\x79', '\x67', '\x0c', '\xc1', '\xe9', '\x9b', '\x7e', '\x92',
+ '\x79', '\x67', '\x10', '\xc1', '\xe9', '\x9b', '\x14', '\xc1',
+ '\x70', '\x8a', '\x18', '\xc1', '\x70', '\x8a', '\x6f', '\xde',
+ '\x2e', '\x1d', '\x00', '\x38', '\x6d', '\x96', '\x4f', '\xcc',
+ '\x26', '\x00', '\xd9', '\xcf', '\x47', '\xc2', '\xd9', '\xcb',
+ '\x08', '\xd1', '\xea', '\xab', '\x7f', '\x0d', '\xea', '\x1c',
+ '\x00', '\x38', '\x70', '\x0a', '\x7f', '\x0d', '\x2a', '\x1d',
+ '\x00', '\x38', '\x70', '\x8a', '\x7f', '\x0d', '\xa4', '\x01',
+ '\x00', '\xb0', '\xeb', '\xbb', '\xc0', '\x1b', '\x7f', '\xb6',
+ '\xbe', '\x1f', '\xfc', '\xe1', '\x7e', '\xbe', '\x84', '\xe2',
+ '\xfe', '\x0b', '\x6f', '\x0e', '\xda', '\x1c', '\x00', '\x38',
+ '\x0e', '\x01', '\x5d', '\x9e', '\x81', '\x93', '\xb4', '\xa0',
+ '\x7a', '\x86', '\x7d', '\x4a', '\x6f', '\x9e', '\xa4', '\x1c',
+ '\x00', '\x38', '\x7f', '\x0d', '\xa4', '\x01', '\x00', '\xb0',
+ '\xe9', '\x9b', '\x6f', '\xde', '\x16', '\x1d', '\x00', '\x38',
+ '\x6d', '\xda', '\x7d', '\x67', '\x6f', '\x9e', '\x2a', '\x1d',
+ '\x00', '\x38', '\x69', '\x9a', '\x01', '\x92', '\xe9', '\xd6',
+ '\x8a', '\x20', '\x41', '\xa2', '\x41', '\x92', '\x7f', '\x0d',
+ '\x26', '\x1d', '\x00', '\x38', '\xc9', '\x9b', '\x6f', '\x9e',
+ '\x20', '\x00', '\x00', '\xb0', '\x69', '\x9a', '\xf0', '\x93',
+ '\x7f', '\x0d', '\x3e', '\x1d', '\x00', '\x38', '\xe9', '\x9b',
+ '\x6f', '\xae', '\x22', '\x1d', '\x00', '\x38', '\x0c', '\x01',
+ '\x5b', '\xb8', '\x6a', '\xda', '\x2b', '\xd6', '\x84', '\xd2',
+ '\xea', '\xdb', '\x08', '\x01', '\x6c', '\x9e', '\x2b', '\x96',
+ '\x84', '\x92', '\xec', '\x9b', '\x60', '\xc6', '\x6f', '\xbe',
+ '\x00', '\x01', '\x00', '\x38', '\x6b', '\x9a', '\xad', '\x96',
+ '\x84', '\x92', '\xdf', '\x9c', '\xdb', '\x05', '\x0a', '\x90',
+ '\x0f', '\x05', '\x6b', '\x9a', '\x9a', '\x9a', '\x06', '\xe0',
+ '\x04', '\x92', '\x5f', '\x9e', '\xdc', '\x05', '\xdc', '\x9b',
+ '\x6f', '\xce', '\xda', '\x1c', '\x00', '\x38', '\x5c', '\xda',
+ '\x5d', '\x94', '\x26', '\x92', '\xcf', '\x9c', '\x3f', '\x00',
+ '\x04', '\x90', '\x0f', '\x05', '\x5a', '\xd2', '\xdc', '\xdb',
+ '\x6f', '\xde', '\x2a', '\x1d', '\x00', '\x38', '\x6d', '\x9a',
+ '\x01', '\x92', '\xed', '\x9b', '\x3f', '\xbd', '\x70', '\x04',
+ '\x00', '\x38', '\x41', '\xa2', '\xbe', '\x0f', '\x3e', '\x0d',
+ '\x6f', '\x9e', '\xea', '\x1c', '\x00', '\x38', '\x89', '\x0b',
+ '\x44', '\x20', '\x41', '\xc2', '\xc9', '\xcb', '\x6f', '\x9e',
+ '\x04', '\x00', '\x00', '\xb0', '\x69', '\x9a', '\x06', '\x93',
+ '\xc4', '\x92', '\x1e', '\x20', '\x0f', '\x05', '\x6f', '\x9e',
+ '\xb4', '\x1c', '\x00', '\x38', '\x6f', '\xde', '\xdc', '\x00',
+ '\x00', '\x38', '\x6d', '\xda', '\xe9', '\xdf', '\x6f', '\xce',
+ '\xe0', '\x00', '\x00', '\x38', '\x5c', '\xca', '\x16', '\xe0',
+ '\xd9', '\xcb', '\x6f', '\xde', '\xb4', '\x1c', '\x00', '\x38',
+ '\x6f', '\x9e', '\x02', '\x1d', '\x00', '\x38', '\x69', '\xce',
+ '\xed', '\xcf', '\x59', '\x9a', '\xdd', '\x9b', '\x6f', '\xde',
+ '\xb4', '\x1c', '\x00', '\x38', '\x6f', '\x9e', '\x2a', '\x1d',
+ '\x00', '\x38', '\x69', '\x9a', '\x79', '\x67', '\x1a', '\xd1',
+ '\xe9', '\x9b', '\x42', '\x92', '\x79', '\x67', '\x1e', '\xd1',
+ '\xe9', '\x9b', '\x6f', '\x9e', '\x2e', '\x1d', '\x00', '\x38',
+ '\x47', '\xd2', '\x02', '\x91', '\xdd', '\xdb', '\x4f', '\xcc',
+ '\x26', '\x00', '\xd9', '\xcb', '\x3f', '\x0d', '\xf2', '\x04',
+ '\x00', '\x38', '\x6f', '\x9e', '\x2e', '\x1d', '\x00', '\x38',
+ '\x7f', '\x0d', '\xa0', '\x01', '\x00', '\xb0', '\xe9', '\x9b',
+ '\x41', '\x92', '\x7f', '\x0d', '\xd0', '\x01', '\x00', '\xb0',
+ '\xc9', '\x9b', '\x6f', '\x9e', '\xa0', '\x01', '\x00', '\xb0',
+ '\x69', '\x9a', '\xf7', '\x20', '\x0f', '\x05', '\x7f', '\xb6',
+ '\x0f', '\x05', '\x6f', '\x9e', '\x2e', '\x1d', '\x00', '\x38',
+ '\x6f', '\xce', '\xec', '\x1c', '\x00', '\x38', '\x04', '\x91',
+ '\xec', '\xcb', '\x02', '\x91', '\x70', '\x4a', '\x8a', '\x0b',
+ '\x0c', '\x30', '\x7d', '\x86', '\x01', '\xd2', '\x4a', '\xd5',
+ '\x80', '\x0b', '\xf9', '\x20', '\x0f', '\x05', '\x7f', '\x0d',
+ '\xd2', '\x1c', '\x00', '\x38', '\x70', '\x8a', '\x6f', '\x9e',
+ '\xec', '\x1c', '\x00', '\x38', '\x47', '\xc2', '\x02', '\x91',
+ '\xdc', '\xcb', '\x08', '\x91', '\xea', '\xab', '\x01', '\xd2',
+ '\xd9', '\xdb', '\x3f', '\x0d', '\xf2', '\x04', '\x00', '\x38',
+ '\xfc', '\xe1', '\x7e', '\xbe', '\x84', '\xe2', '\xee', '\xab',
+ '\x6f', '\x9e', '\x2e', '\x1d', '\x00', '\x38', '\x6f', '\xde',
+ '\xec', '\x1c', '\x00', '\x38', '\x04', '\x91', '\xed', '\xdb',
+ '\x02', '\x91', '\x70', '\x4a', '\x4b', '\xb6', '\x04', '\x20',
+ '\x46', '\x92', '\x45', '\x92', '\x79', '\x67', '\x7f', '\x0d',
+ '\xd2', '\x1c', '\x00', '\x38', '\xe9', '\x9b', '\x79', '\x86',
+ '\x01', '\x92', '\xdf', '\x9c', '\x00', '\x40', '\xf9', '\x20',
+ '\x0f', '\x05', '\x6e', '\x9a', '\x79', '\x67', '\xee', '\x9b',
+ '\x6f', '\x9e', '\xec', '\x1c', '\x00', '\x38', '\x47', '\xd2',
+ '\x02', '\x91', '\xdd', '\xdb', '\x08', '\x91', '\xee', '\xeb',
+ '\x44', '\xd2', '\xd9', '\xdb', '\x3f', '\xbd', '\xf2', '\x04',
+ '\x00', '\x38', '\x04', '\xe2', '\x3e', '\x0d', '\x00', '\x00',
+ '\xfc', '\xe1', '\x7e', '\xbe', '\x84', '\xe2', '\xfe', '\x0b',
+ '\x4f', '\x9e', '\xaa', '\xff', '\x7f', '\x0d', '\x80', '\x18',
+ '\x00', '\x38', '\xc9', '\x9b', '\x7f', '\x0d', '\x30', '\x00',
+ '\x00', '\xb0', '\xc9', '\x9b', '\x6f', '\x0e', '\x1a', '\x05',
+ '\x00', '\x38', '\x6f', '\xae', '\x84', '\x18', '\x00', '\x38',
+ '\xb0', '\xb9', '\x6f', '\xae', '\xd6', '\x1c', '\x00', '\x38',
+ '\x6a', '\xaa', '\x7a', '\x67', '\x41', '\xb2', '\x3f', '\xbd',
+ '\x60', '\x05', '\x00', '\x38', '\x6f', '\xae', '\x50', '\x1c',
+ '\x00', '\x38', '\xb0', '\xb9', '\x6f', '\x9e', '\xf0', '\x00',
+ '\x00', '\x38', '\xef', '\x9e', '\x96', '\x1c', '\x00', '\x38',
+ '\x0e', '\x30', '\x70', '\x86', '\x09', '\x0c', '\xef', '\x9e',
+ '\x96', '\x1c', '\x00', '\x38', '\xf7', '\x20', '\x0f', '\x05',
+ '\x6f', '\xae', '\x96', '\x18', '\x00', '\x38', '\x3f', '\xbd',
+ '\x1a', '\x05', '\x00', '\x38', '\x60', '\xa6', '\x41', '\xb2',
+ '\x3f', '\xbd', '\x60', '\x05', '\x00', '\x38', '\x3f', '\xbd',
+ '\x88', '\x06', '\x00', '\x38', '\x3f', '\x0d', '\x28', '\x01',
+ '\x00', '\x38', '\xbe', '\x0f', '\x3e', '\x0d', '\x84', '\xe2',
+ '\x4f', '\x9e', '\x55', '\x00', '\x7f', '\x0d', '\x80', '\x18',
+ '\x00', '\x38', '\xc9', '\x9b', '\x7f', '\x0d', '\x30', '\x00',
+ '\x00', '\xb0', '\xc9', '\x9b', '\x6f', '\x9e', '\x30', '\x00',
+ '\x00', '\xb0', '\x69', '\xda', '\x7d', '\x87', '\x7f', '\x0d',
+ '\x80', '\x18', '\x00', '\x38', '\xcd', '\xdb', '\xc9', '\xdb',
+ '\x7e', '\x8a', '\x6e', '\x9a', '\xef', '\x9e', '\x80', '\x84',
+ '\x1e', '\x00', '\xe1', '\x30', '\x0f', '\x05', '\x6e', '\x9a',
+ '\x01', '\x92', '\xee', '\x9b', '\xed', '\xe0', '\x0f', '\x05',
+ '\xfc', '\xe1', '\x7e', '\xbe', '\x84', '\xe2', '\xfe', '\x0b',
+ '\x6f', '\x0e', '\x1a', '\x05', '\x00', '\x38', '\x6f', '\xae',
+ '\xb2', '\x18', '\x00', '\x38', '\xb0', '\xb9', '\x3f', '\xbd',
+ '\x70', '\x04', '\x00', '\x38', '\x6f', '\xae', '\x00', '\x1f',
+ '\x00', '\x38', '\x5f', '\xbc', '\xec', '\x01', '\x3f', '\xbd',
+ '\x06', '\x0a', '\x00', '\x38', '\x6f', '\xae', '\xcc', '\x18',
+ '\x00', '\x38', '\xb0', '\xb9', '\x3f', '\xbd', '\xcc', '\x06',
+ '\x00', '\x38', '\xbe', '\x0f', '\x3e', '\xbe', '\x3f', '\x0d',
+ '\x46', '\x06', '\x00', '\x38', '\xfc', '\xe1', '\x7e', '\xbe',
+ '\x98', '\xe2', '\xfe', '\x4b', '\x6f', '\xde', '\x00', '\x1f',
+ '\x00', '\x38', '\x6d', '\x9a', '\x79', '\x67', '\xed', '\x9f',
+ '\xef', '\xde', '\xec', '\x20', '\x00', '\x38', '\xf3', '\x20',
+ '\x0f', '\x05', '\x6f', '\x3e', '\x00', '\x1f', '\x00', '\x38',
+ '\xa3', '\x0b', '\xff', '\x3d', '\xfe', '\x02', '\x0f', '\x05',
+ '\x63', '\x9a', '\x81', '\x92', '\xcf', '\x9d', '\x0b', '\x00',
+ '\x5f', '\x95', '\x3f', '\xf8', '\x54', '\x02', '\x22', '\x01',
+ '\x18', '\x00', '\x62', '\x00', '\x90', '\x00', '\x96', '\x01',
+ '\xc8', '\x01', '\xe4', '\x00', '\x00', '\x02', '\xb8', '\x00',
+ '\x9a', '\x02', '\xce', '\x02', '\x6f', '\xae', '\xde', '\x18',
+ '\x00', '\x38', '\x3f', '\xbd', '\x1a', '\x05', '\x00', '\x38',
+ '\x6f', '\x0e', '\x60', '\x05', '\x00', '\x38', '\x04', '\x31',
+ '\x62', '\xae', '\x41', '\xb2', '\xb0', '\xb9', '\x08', '\x31',
+ '\x61', '\xae', '\x41', '\xb2', '\xb0', '\xb9', '\x6f', '\x0e',
+ '\x2a', '\x1d', '\x00', '\x38', '\x60', '\x9a', '\x81', '\x92',
+ '\xe0', '\x9b', '\x3f', '\xbd', '\x70', '\x04', '\x00', '\x38',
+ '\x60', '\x9a', '\x01', '\x92', '\xe0', '\x9b', '\x62', '\xaa',
+ '\x61', '\xba', '\x3f', '\xbd', '\x06', '\x0a', '\x00', '\x38',
+ '\xff', '\xed', '\x88', '\x02', '\x0c', '\x32', '\x6f', '\xae',
+ '\xec', '\x18', '\x00', '\x38', '\x3f', '\xbd', '\x1a', '\x05',
+ '\x00', '\x38', '\x6f', '\x0e', '\x60', '\x05', '\x00', '\x38',
+ '\x04', '\x31', '\x62', '\xae', '\x41', '\xb2', '\xb0', '\xb9',
+ '\x08', '\x31', '\x61', '\xae', '\x41', '\xb2', '\xb0', '\xb9',
+ '\x61', '\x1a', '\x72', '\x09', '\xe1', '\x1b', '\xff', '\xed',
+ '\x5a', '\x02', '\x0c', '\x32', '\x6f', '\xae', '\xfc', '\x18',
+ '\x00', '\x38', '\x3f', '\xbd', '\x1a', '\x05', '\x00', '\x38',
+ '\x6f', '\x1e', '\x60', '\x05', '\x00', '\x38', '\x04', '\x31',
+ '\x60', '\xae', '\x41', '\xb2', '\xb1', '\xb9', '\x60', '\xaa',
+ '\x6a', '\xaa', '\x41', '\xb2', '\xb1', '\xb9', '\xff', '\xed',
+ '\x32', '\x02', '\x08', '\x32', '\x6f', '\xae', '\x0c', '\x19',
+ '\x00', '\x38', '\x3f', '\xbd', '\x1a', '\x05', '\x00', '\x38',
+ '\x04', '\x31', '\x60', '\xae', '\x41', '\xb2', '\x3f', '\xbd',
+ '\x60', '\x05', '\x00', '\x38', '\x60', '\xaa', '\xff', '\x3d',
+ '\xc0', '\x01', '\x0f', '\x05', '\x81', '\xa2', '\xfd', '\x20',
+ '\x0f', '\x05', '\xff', '\xed', '\x06', '\x02', '\x08', '\x32',
+ '\x6f', '\x4e', '\x1a', '\x05', '\x00', '\x38', '\x6f', '\xae',
+ '\x1a', '\x19', '\x00', '\x38', '\xb4', '\xb9', '\x6f', '\x0e',
+ '\x60', '\x05', '\x00', '\x38', '\x04', '\x31', '\x62', '\xae',
+ '\x41', '\xb2', '\xb0', '\xb9', '\x08', '\x31', '\x61', '\xae',
+ '\x41', '\xb2', '\xb0', '\xb9', '\x62', '\x2a', '\x62', '\x2a',
+ '\xe1', '\x2a', '\xff', '\x3d', '\xb8', '\x01', '\x0f', '\x05',
+ '\x6f', '\xae', '\x28', '\x19', '\x00', '\x38', '\xb4', '\xb9',
+ '\xff', '\xed', '\xd0', '\x01', '\x0f', '\x05', '\x6f', '\x4e',
+ '\x1a', '\x05', '\x00', '\x38', '\x6f', '\xae', '\x38', '\x19',
+ '\x00', '\x38', '\xb4', '\xb9', '\x6f', '\x2e', '\x60', '\x05',
+ '\x00', '\x38', '\x04', '\x31', '\x61', '\xae', '\x41', '\xb2',
+ '\xb2', '\xb9', '\x08', '\x31', '\x60', '\xae', '\x41', '\xb2',
+ '\xb2', '\xb9', '\x61', '\xaa', '\x60', '\xba', '\x6e', '\xc6',
+ '\x14', '\xc2', '\x3f', '\xbd', '\x04', '\x0b', '\x00', '\x38',
+ '\x6a', '\xa6', '\x30', '\x20', '\x0f', '\x05', '\x6f', '\xae',
+ '\x44', '\x19', '\x00', '\x38', '\xb4', '\xb9', '\x14', '\xe1',
+ '\x6a', '\xaa', '\x41', '\xb2', '\xb2', '\xb9', '\x14', '\xe1',
+ '\x6a', '\xaa', '\x6a', '\xb6', '\x0f', '\xbc', '\x40', '\x00',
+ '\x8f', '\xac', '\x40', '\x00', '\x3c', '\xa3', '\x3c', '\xb3',
+ '\x3f', '\xbd', '\xac', '\x0b', '\x00', '\x38', '\xff', '\xed',
+ '\x6a', '\x01', '\x0f', '\x05', '\x6f', '\xae', '\x60', '\x19',
+ '\x00', '\x38', '\xb4', '\xb9', '\xff', '\xed', '\x54', '\x01',
+ '\x0c', '\x32', '\x6f', '\xae', '\x76', '\x19', '\x00', '\x38',
+ '\x3f', '\xbd', '\x1a', '\x05', '\x00', '\x38', '\x6f', '\x0e',
+ '\x60', '\x05', '\x00', '\x38', '\x04', '\x31', '\x62', '\xae',
+ '\x41', '\xb2', '\xb0', '\xb9', '\x08', '\x31', '\x61', '\xae',
+ '\x41', '\xb2', '\xb0', '\xb9', '\x62', '\xaa', '\x61', '\xba',
+ '\x3f', '\xbd', '\xac', '\x0b', '\x00', '\x38', '\xff', '\xed',
+ '\x22', '\x01', '\x0c', '\x32', '\x6f', '\xae', '\x82', '\x19',
+ '\x00', '\x38', '\x3f', '\xbd', '\x1a', '\x05', '\x00', '\x38',
+ '\x6f', '\x0e', '\x60', '\x05', '\x00', '\x38', '\x04', '\x31',
+ '\x62', '\xae', '\x41', '\xb2', '\xb0', '\xb9', '\x08', '\x31',
+ '\x61', '\xae', '\x41', '\xb2', '\xb0', '\xb9', '\x62', '\xaa',
+ '\xe1', '\xaa', '\xda', '\x90', '\x0f', '\x05', '\x7a', '\x0e',
+ '\x08', '\x31', '\xea', '\xaa', '\xf9', '\x80', '\x0f', '\x05',
+ '\xea', '\xe0', '\x0c', '\x32', '\x6f', '\xae', '\x8e', '\x19',
+ '\x00', '\x38', '\x3f', '\xbd', '\x1a', '\x05', '\x00', '\x38',
+ '\x6f', '\x0e', '\x60', '\x05', '\x00', '\x38', '\x04', '\x31',
+ '\x61', '\xae', '\x41', '\xb2', '\xb0', '\xb9', '\x08', '\x31',
+ '\x64', '\xae', '\x41', '\xb2', '\xb0', '\xb9', '\x0c', '\x31',
+ '\x62', '\xae', '\x41', '\xb2', '\xb0', '\xb9', '\x6f', '\x0e',
+ '\x4a', '\x15', '\x00', '\x38', '\x61', '\xaa', '\x64', '\xba',
+ '\x62', '\xca', '\xb0', '\xb9', '\x6a', '\xa6', '\xac', '\x30',
+ '\x10', '\x32', '\xc3', '\xa2', '\xae', '\x20', '\x7a', '\x86',
+ '\x62', '\xca', '\xef', '\xcd', '\x00', '\x00', '\x01', '\x00',
+ '\x64', '\xba', '\xb0', '\xb9', '\x9e', '\xe0', '\x0f', '\x05',
+ '\x6f', '\xde', '\xb4', '\x1c', '\x00', '\x38', '\x6d', '\x9a',
+ '\x7f', '\x0d', '\xc0', '\x01', '\x00', '\xb0', '\xe9', '\x9b',
+ '\x04', '\xd1', '\x59', '\x98', '\x7f', '\x0d', '\xc4', '\x01',
+ '\x00', '\xb0', '\xe9', '\x9b', '\x6f', '\x1e', '\x1a', '\x05',
+ '\x00', '\x38', '\x6f', '\xae', '\x96', '\x19', '\x00', '\x38',
+ '\xb1', '\xb9', '\x04', '\x31', '\x60', '\xae', '\x41', '\xb2',
+ '\x3f', '\xbd', '\x60', '\x05', '\x00', '\x38', '\x6f', '\xae',
+ '\x9e', '\x19', '\x00', '\x38', '\xb1', '\xb9', '\x60', '\x9a',
+ '\xb9', '\x09', '\x50', '\xe0', '\x08', '\x32', '\x6f', '\xae',
+ '\x12', '\x19', '\x00', '\x38', '\x3f', '\xbd', '\x1a', '\x05',
+ '\x00', '\x38', '\x6f', '\x0e', '\x60', '\x05', '\x00', '\x38',
+ '\x04', '\x31', '\x61', '\xae', '\x41', '\xb2', '\xb0', '\xb9',
+ '\x08', '\x31', '\x62', '\xae', '\x41', '\xb2', '\xb0', '\xb9',
+ '\x61', '\x1a', '\x61', '\x9a', '\x08', '\x30', '\x81', '\x92',
+ '\xe1', '\x9b', '\x20', '\xe0', '\x62', '\x3a', '\x1c', '\xe0',
+ '\x0c', '\x32', '\x6f', '\xae', '\xa4', '\x19', '\x00', '\x38',
+ '\x3f', '\xbd', '\x1a', '\x05', '\x00', '\x38', '\x63', '\xaa',
+ '\x41', '\xb2', '\x3f', '\xbd', '\x60', '\x05', '\x00', '\x38',
+ '\x0a', '\xe0', '\x0f', '\x05', '\xa3', '\x0b', '\xff', '\x2d',
+ '\x06', '\xfd', '\x0f', '\x05', '\x6f', '\xae', '\x9e', '\x19',
+ '\x00', '\x38', '\x3f', '\xbd', '\x1a', '\x05', '\x00', '\x38',
+ '\xbe', '\x4f', '\x04', '\xe2', '\x3e', '\x0d', '\xfc', '\xe1',
+ '\x7e', '\xbe', '\x8c', '\xe2', '\xfe', '\x2b', '\x6a', '\x26',
+ '\x6b', '\x06', '\x7f', '\x0d', '\x22', '\x1d', '\x00', '\x38',
+ '\x70', '\x8a', '\x7f', '\x0d', '\x04', '\x01', '\x00', '\x38',
+ '\xea', '\xab', '\x6f', '\x9e', '\x26', '\x1d', '\x00', '\x38',
+ '\x49', '\x9a', '\xcf', '\x9e', '\x01', '\x00', '\x86', '\x20',
+ '\x0f', '\x05', '\x6f', '\xde', '\xda', '\x1c', '\x00', '\x38',
+ '\x08', '\xd1', '\xea', '\xab', '\x7f', '\x0d', '\x00', '\x01',
+ '\x00', '\x38', '\xeb', '\xbb', '\x6b', '\x96', '\x04', '\x92',
+ '\xdf', '\x9d', '\xdc', '\x05', '\xdd', '\x9b', '\x6f', '\x9e',
+ '\xa4', '\x01', '\x00', '\xb0', '\x69', '\xda', '\x6f', '\xde',
+ '\xa4', '\x1c', '\x00', '\x38', '\xe9', '\xdb', '\x6f', '\xde',
+ '\xd4', '\x01', '\x00', '\xb0', '\x4d', '\x9a', '\x38', '\x93',
+ '\x44', '\x93', '\xcd', '\x9b', '\x6f', '\xde', '\xd4', '\x01',
+ '\x00', '\xb0', '\x4d', '\x9a', '\x07', '\x93', '\xcf', '\x9e',
+ '\x04', '\x00', '\xf7', '\x30', '\x0f', '\x05', '\x4d', '\x9a',
+ '\x38', '\x93', '\x41', '\x93', '\xcd', '\x9b', '\x3f', '\xbd',
+ '\x0c', '\x02', '\x00', '\x38', '\x6a', '\xa6', '\xf7', '\x30',
+ '\x0f', '\x05', '\x6f', '\xce', '\x22', '\x1d', '\x00', '\x38',
+ '\xec', '\x0a', '\x10', '\x80', '\x0f', '\x05', '\x6f', '\xde',
+ '\xd4', '\x01', '\x00', '\xb0', '\x4d', '\x9a', '\x38', '\x93',
+ '\x41', '\x93', '\xcd', '\x9b', '\xec', '\x0a', '\xd7', '\x90',
+ '\x71', '\x86', '\x22', '\xe0', '\x62', '\x96', '\x7f', '\x0d',
+ '\x22', '\x1d', '\x00', '\x38', '\xeb', '\xba', '\x14', '\x80',
+ '\x71', '\x86', '\x3f', '\xbd', '\x0c', '\x02', '\x00', '\x38',
+ '\x7f', '\x0d', '\x22', '\x1d', '\x00', '\x38', '\xe0', '\x0a',
+ '\xf1', '\x90', '\x71', '\x86', '\x62', '\x96', '\x20', '\x96',
+ '\xe9', '\x26', '\x0e', '\x30', '\x62', '\xd6', '\x0d', '\x1c',
+ '\x62', '\x96', '\x20', '\x96', '\xe9', '\xd6', '\xf7', '\x20',
+ '\x0f', '\x05', '\x6f', '\xae', '\xb8', '\x19', '\x00', '\x38',
+ '\x3f', '\xbd', '\x1a', '\x05', '\x00', '\x38', '\x61', '\xa6',
+ '\x41', '\xb2', '\xbe', '\x2f', '\x3e', '\xbe', '\x3f', '\x0d',
+ '\x60', '\x05', '\x00', '\x38', '\xfc', '\xe1', '\x7e', '\xbe',
+ '\x8c', '\xe2', '\xfe', '\x2b', '\x6b', '\x06', '\x6c', '\x26',
+ '\xeb', '\xa6', '\x40', '\x00', '\x6a', '\xc6', '\xe0', '\xc6',
+ '\x32', '\x00', '\x71', '\x86', '\x6c', '\xb6', '\x6c', '\x96',
+ '\x79', '\x87', '\x61', '\xd6', '\xc3', '\xd3', '\xed', '\x97',
+ '\x49', '\xd6', '\xcb', '\x9b', '\x4b', '\x9a', '\xcd', '\x96',
+ '\x0c', '\x30', '\x7d', '\x87', '\x6f', '\xae', '\xce', '\x19',
+ '\x00', '\x38', '\x40', '\xe0', '\xe2', '\xbb', '\xcb', '\xdf',
+ '\x01', '\x12', '\xc4', '\x12', '\x06', '\x30', '\xe0', '\xb6',
+ '\xd7', '\x10', '\x6c', '\x96', '\x04', '\xc2', '\xe0', '\xc6',
+ '\xc5', '\x10', '\x0f', '\x05', '\xe0', '\xa6', '\x4e', '\x00',
+ '\x6a', '\xc6', '\xe0', '\xc6', '\x40', '\x00', '\x71', '\x86',
+ '\x6c', '\xa6', '\x61', '\x96', '\xc3', '\x93', '\x6c', '\xd6',
+ '\xe9', '\xd7', '\x4a', '\x9a', '\xcd', '\x96', '\x22', '\x30',
+ '\x01', '\x12', '\x81', '\x12', '\xe2', '\xab', '\x6f', '\xae',
+ '\xec', '\x19', '\x00', '\x38', '\x3f', '\xbd', '\x1a', '\x05',
+ '\x00', '\x38', '\x62', '\xaa', '\x41', '\xb2', '\x3f', '\xbd',
+ '\x60', '\x05', '\x00', '\x38', '\x7a', '\x86', '\xbe', '\x2f',
+ '\x3e', '\x0d', '\xc4', '\x12', '\x08', '\x30', '\x01', '\xa2',
+ '\xe0', '\xa6', '\xc9', '\x10', '\x61', '\x96', '\x04', '\xc2',
+ '\xe0', '\xc6', '\xb7', '\x10', '\x0f', '\x05', '\x41', '\xa2',
+ '\xbe', '\x2f', '\x3e', '\x0d', '\xfc', '\xe1', '\x7e', '\xbe',
+ '\x94', '\xe2', '\xfe', '\x4b', '\x6b', '\x26', '\xeb', '\xa6',
+ '\x5a', '\x90', '\x6a', '\x06', '\x60', '\xa6', '\x7b', '\x86',
+ '\x3f', '\xbd', '\x60', '\x05', '\x00', '\x38', '\x6f', '\xae',
+ '\x0a', '\x1a', '\x00', '\x38', '\x3f', '\xbd', '\x1a', '\x05',
+ '\x00', '\x38', '\xe2', '\x06', '\x2a', '\x90', '\x74', '\x86',
+ '\x60', '\x16', '\x60', '\x36', '\x6f', '\xae', '\x60', '\x1a',
+ '\x00', '\x38', '\x3f', '\xbd', '\x1a', '\x05', '\x00', '\x38',
+ '\x63', '\xae', '\x7b', '\x86', '\x3f', '\xbd', '\x60', '\x05',
+ '\x00', '\x38', '\x01', '\x42', '\xc4', '\x42', '\x08', '\x30',
+ '\x04', '\x12', '\xe2', '\x16', '\xdf', '\x80', '\x0f', '\x05',
+ '\x6f', '\xae', '\xc8', '\x18', '\x00', '\x38', '\x3f', '\xbd',
+ '\x1a', '\x05', '\x00', '\x38', '\x10', '\x02', '\xe2', '\x06',
+ '\xad', '\x80', '\x60', '\xa6', '\xbe', '\x4f', '\x3e', '\x0d',
+ '\x05', '\xa1', '\x49', '\x98', '\xc2', '\x92', '\x0a', '\x30',
+ '\xc4', '\x92', '\x0e', '\x30', '\x0f', '\x05', '\x7f', '\xb6',
+ '\x7a', '\x86', '\x6a', '\xb9', '\x5a', '\xa8', '\x7f', '\xb6',
+ '\x0f', '\x05', '\x6a', '\xb9', '\x6a', '\xaa', '\x7f', '\xb6',
+ '\x0f', '\x05', '\x6a', '\xd6', '\x05', '\xa1', '\x4a', '\xaa',
+ '\x4a', '\x94', '\xc2', '\x92', '\x0a', '\x30', '\xc4', '\x92',
+ '\x10', '\x30', '\x0f', '\x05', '\x7f', '\xb6', '\x7a', '\x86',
+ '\x5c', '\xca', '\x6d', '\xb9', '\xdc', '\xcb', '\x7f', '\xb6',
+ '\x4a', '\xa4', '\x6c', '\xca', '\x6d', '\xb9', '\xec', '\xcb',
+ '\x4a', '\xa4', '\x7f', '\xb6', '\x0f', '\x05', '\xfc', '\xe1',
+ '\x7e', '\xbe', '\x84', '\xe2', '\xee', '\xbb', '\x04', '\xa1',
+ '\x49', '\x9a', '\xcf', '\x9e', '\x01', '\x00', '\x06', '\x20',
+ '\x0f', '\x05', '\x24', '\xe0', '\xc1', '\xc3', '\xcf', '\x9e',
+ '\x02', '\x00', '\x0c', '\x20', '\x6b', '\x96', '\xd0', '\x93',
+ '\x69', '\xb7', '\xee', '\xbb', '\x12', '\xe0', '\xc2', '\xc3',
+ '\x6f', '\xae', '\x36', '\x1a', '\x00', '\x38', '\x3f', '\xbd',
+ '\x1a', '\x05', '\x00', '\x38', '\x0c', '\xe0', '\x0f', '\x05',
+ '\x6c', '\xb6', '\x6e', '\xc6', '\x3f', '\xbd', '\x3a', '\x0c',
+ '\x00', '\x38', '\x04', '\xe2', '\x3e', '\x0d', '\xfc', '\xe1',
+ '\x7e', '\xbe', '\x84', '\xe2', '\xfe', '\x0b', '\x6a', '\x06',
+ '\x4f', '\xbc', '\xaa', '\x00', '\x5f', '\xcc', '\x55', '\x05',
+ '\x3f', '\xbd', '\x66', '\x0c', '\x00', '\x38', '\x60', '\xa6',
+ '\x4f', '\xbc', '\x55', '\x00', '\x5f', '\xcc', '\xaa', '\x02',
+ '\xbe', '\x0f', '\x3e', '\xbe', '\x3f', '\x0d', '\x66', '\x0c',
+ '\x00', '\x38', '\xfc', '\xe1', '\x7e', '\xbe', '\x90', '\xe2',
+ '\xfe', '\x3b', '\x6a', '\x26', '\x04', '\xa1', '\x49', '\x9a',
+ '\xcf', '\x9e', '\x02', '\x00', '\x42', '\x20', '\x6b', '\x36',
+ '\x6f', '\x0e', '\x18', '\x0c', '\x00', '\x38', '\xb0', '\xb9',
+ '\x6a', '\x16', '\x62', '\xa6', '\x63', '\xb6', '\xb0', '\xb9',
+ '\x61', '\xd6', '\xf0', '\xd3', '\x1f', '\xdf', '\x40', '\x00',
+ '\x6a', '\x96', '\xf0', '\x93', '\x1f', '\x9f', '\x40', '\x00',
+ '\xe9', '\xd6', '\x14', '\x20', '\x7c', '\x86', '\x2f', '\x1f',
+ '\x40', '\x00', '\x00', '\x00', '\x2f', '\xaf', '\x40', '\x00',
+ '\x00', '\x00', '\xea', '\x16', '\x04', '\x30', '\x0f', '\x05',
+ '\x41', '\xc2', '\x6c', '\xa6', '\xbe', '\x3f', '\x3e', '\x0d',
+ '\x6f', '\x1e', '\x18', '\x0c', '\x00', '\x38', '\xb1', '\xb9',
+ '\x4a', '\x04', '\x0f', '\x0f', '\x40', '\x00', '\x62', '\xa6',
+ '\x63', '\xb6', '\xb1', '\xb9', '\x2f', '\xaf', '\x40', '\x00',
+ '\x00', '\x00', '\xea', '\x06', '\x3a', '\x25', '\xbe', '\x3f',
+ '\x3e', '\x0d', '\xfc', '\xe1', '\x7e', '\xbe', '\xa8', '\xe2',
+ '\xfe', '\x8b', '\x6a', '\x36', '\x04', '\xa1', '\x44', '\x9e',
+ '\xcf', '\x9e', '\x02', '\x00', '\x04', '\x20', '\x41', '\x72',
+ '\x42', '\x72', '\x6f', '\x2e', '\x66', '\x0c', '\x00', '\x38',
+ '\x4f', '\xbc', '\x98', '\x00', '\x4f', '\xcc', '\x55', '\x00',
+ '\xb2', '\xb9', '\x50', '\xb2', '\xe7', '\xb4', '\x6f', '\x1e',
+ '\x18', '\x0c', '\x00', '\x38', '\x63', '\xa6', '\xb1', '\xb9',
+ '\xcf', '\xae', '\x51', '\x00', '\xff', '\x2d', '\x9c', '\x01',
+ '\x63', '\xa6', '\x51', '\xb2', '\xe7', '\xb4', '\xb1', '\xb9',
+ '\xcf', '\xae', '\x52', '\x00', '\xff', '\x2d', '\x8c', '\x01',
+ '\x63', '\xa6', '\x52', '\xb2', '\xe7', '\xb4', '\xb1', '\xb9',
+ '\xcf', '\xae', '\x59', '\x00', '\xff', '\x2d', '\x7c', '\x01',
+ '\x63', '\xa6', '\x24', '\xe1', '\x70', '\x8a', '\x6f', '\xae',
+ '\x50', '\x1a', '\x00', '\x38', '\x3f', '\xbd', '\x1a', '\x05',
+ '\x00', '\x38', '\x63', '\xaa', '\x41', '\xb2', '\x3f', '\xbd',
+ '\x60', '\x05', '\x00', '\x38', '\x4f', '\xbc', '\x27', '\x00',
+ '\xe7', '\xb4', '\x63', '\xa6', '\xb1', '\xb9', '\x41', '\x92',
+ '\xea', '\x94', '\x06', '\x32', '\xe3', '\x9b', '\x86', '\x32',
+ '\x4f', '\xbc', '\x2c', '\x00', '\xe7', '\xb4', '\x63', '\xa6',
+ '\xb1', '\xb9', '\x6a', '\x86', '\x55', '\xb2', '\xe7', '\xb4',
+ '\x63', '\xa6', '\xb1', '\xb9', '\x6a', '\x06', '\x6a', '\xb6',
+ '\x04', '\xb2', '\xe7', '\xb4', '\x63', '\xa6', '\xb1', '\xb9',
+ '\xcf', '\xae', '\x30', '\x00', '\x3e', '\x20', '\x63', '\xa6',
+ '\x4f', '\xbc', '\xf0', '\x00', '\x5f', '\xcc', '\x55', '\x05',
+ '\xb2', '\xb9', '\x63', '\xa6', '\x3f', '\xbd', '\xae', '\x0c',
+ '\x00', '\x38', '\x63', '\xa6', '\x4f', '\xbc', '\x90', '\x00',
+ '\x5f', '\xcc', '\x55', '\x05', '\xb2', '\xb9', '\x44', '\xb8',
+ '\x2b', '\xb6', '\x63', '\xa6', '\xb1', '\xb9', '\x4a', '\x54',
+ '\x0f', '\x5f', '\x80', '\xff', '\x63', '\xa6', '\x4f', '\xbc',
+ '\x98', '\x00', '\x4f', '\xcc', '\x55', '\x00', '\xb2', '\xb9',
+ '\x10', '\xe0', '\x0f', '\x05', '\x0f', '\x02', '\xe7', '\x04',
+ '\x60', '\xb6', '\xb1', '\xb9', '\xcf', '\xae', '\x03', '\x00',
+ '\x35', '\x35', '\x0a', '\x31', '\xd8', '\x8b', '\xc8', '\x82',
+ '\x12', '\xd0', '\x68', '\x46', '\x6f', '\xae', '\x62', '\x1a',
+ '\x00', '\x38', '\x3f', '\xbd', '\x1a', '\x05', '\x00', '\x38',
+ '\xd2', '\xe0', '\x7a', '\x86', '\x65', '\x56', '\x94', '\x20',
+ '\x81', '\x42', '\x90', '\xe0', '\x74', '\x86', '\xc2', '\x03',
+ '\x60', '\xb6', '\x2f', '\xb2', '\xe7', '\xb4', '\x6f', '\x1e',
+ '\x18', '\x0c', '\x00', '\x38', '\x63', '\xa6', '\xb1', '\xb9',
+ '\x6a', '\x66', '\x60', '\xb6', '\x30', '\xb2', '\xe7', '\xb4',
+ '\x63', '\xa6', '\xb1', '\xb9', '\xc8', '\xa3', '\x6a', '\x67',
+ '\xc8', '\x63', '\x60', '\xb6', '\x2d', '\xb2', '\xe7', '\xb4',
+ '\x63', '\xa6', '\xb1', '\xb9', '\x6a', '\x26', '\x2e', '\x02',
+ '\xe7', '\x04', '\x63', '\xa6', '\x60', '\xb6', '\xb1', '\xb9',
+ '\xc8', '\xa3', '\x6a', '\x27', '\x65', '\x56', '\x0a', '\x30',
+ '\x01', '\x22', '\x68', '\x96', '\xa4', '\x96', '\x04', '\xe0',
+ '\x81', '\x92', '\x64', '\x96', '\x19', '\x95', '\x63', '\xd6',
+ '\x2d', '\x95', '\x6d', '\x96', '\x24', '\xe1', '\x6d', '\xda',
+ '\x0c', '\x91', '\xed', '\xdb', '\x10', '\x91', '\xe6', '\x6b',
+ '\x14', '\x91', '\xe2', '\x2b', '\x62', '\x26', '\x10', '\xd0',
+ '\x0f', '\x05', '\x24', '\xe1', '\x29', '\x6a', '\x24', '\xe1',
+ '\xe9', '\x9b', '\x81', '\x22', '\xf5', '\x20', '\x0f', '\x05',
+ '\x24', '\xe1', '\x6d', '\xda', '\x06', '\x31', '\xed', '\xda',
+ '\x1e', '\x30', '\x65', '\x56', '\x06', '\x30', '\x01', '\x42',
+ '\x81', '\x42', '\x81', '\x42', '\x65', '\x56', '\x0c', '\x30',
+ '\xe8', '\x46', '\x64', '\x46', '\x69', '\xa0', '\x64', '\x06',
+ '\x08', '\xe0', '\x63', '\xa6', '\x61', '\xb0', '\x64', '\x06',
+ '\x63', '\xa6', '\x4f', '\xbc', '\xf0', '\x00', '\x5f', '\xcc',
+ '\x55', '\x05', '\x3f', '\xbd', '\x66', '\x0c', '\x00', '\x38',
+ '\x12', '\xe0', '\x41', '\xa2', '\x4f', '\xbc', '\xf0', '\x00',
+ '\x5f', '\xcc', '\x55', '\x05', '\x3f', '\xbd', '\x66', '\x0c',
+ '\x00', '\x38', '\x7a', '\x86', '\xbe', '\x8f', '\x04', '\xe2',
+ '\x3e', '\x0d', '\xfc', '\xe1', '\x7e', '\xbe', '\x90', '\xe2',
+ '\xfe', '\x3b', '\x06', '\xa1', '\xa0', '\x0b', '\xff', '\x2d',
+ '\x16', '\x04', '\x6a', '\x26', '\x3f', '\xbd', '\x52', '\x0d',
+ '\x00', '\x38', '\x6a', '\xa6', '\xff', '\x2d', '\x86', '\x03',
+ '\x41', '\xa2', '\x62', '\xa6', '\x3f', '\xbd', '\xae', '\x0c',
+ '\x00', '\x38', '\x62', '\xa6', '\x4f', '\xbc', '\x90', '\x00',
+ '\x5f', '\xcc', '\x55', '\x05', '\x3f', '\xbd', '\x66', '\x0c',
+ '\x00', '\x38', '\x6f', '\x1e', '\x18', '\x0c', '\x00', '\x38',
+ '\x62', '\xa6', '\x7b', '\x86', '\xb1', '\xb9', '\x6a', '\x36',
+ '\x04', '\x21', '\x40', '\xbe', '\x4b', '\xb4', '\x2b', '\xb6',
+ '\x62', '\xa6', '\xb1', '\xb9', '\x42', '\x92', '\xc0', '\x9a',
+ '\x1c', '\x20', '\x63', '\xc6', '\xf0', '\xc3', '\x53', '\x94',
+ '\xe9', '\xc6', '\x14', '\x20', '\x63', '\x06', '\x6a', '\xd6',
+ '\xf0', '\xd3', '\x5a', '\x94', '\xe9', '\xd6', '\x0a', '\x20',
+ '\xd0', '\x03', '\x6c', '\x36', '\x6d', '\xa6', '\x63', '\x06',
+ '\xd0', '\x03', '\x6a', '\x07', '\x62', '\xa6', '\x4f', '\xbc',
+ '\xf0', '\x00', '\x5f', '\xcc', '\x55', '\x05', '\x3f', '\xbd',
+ '\x66', '\x0c', '\x00', '\x38', '\xef', '\x0e', '\xc0', '\x00',
+ '\x1f', '\x00', '\xff', '\x3d', '\x48', '\x02', '\x0f', '\x05',
+ '\x60', '\x90', '\x0f', '\x05', '\xef', '\x0e', '\xc4', '\x22',
+ '\x01', '\x00', '\xb0', '\x30', '\x0f', '\x05', '\x20', '\x90',
+ '\x0f', '\x05', '\xef', '\x0e', '\x58', '\x22', '\x01', '\x00',
+ '\xff', '\x3d', '\x5a', '\x01', '\x0f', '\x05', '\xef', '\x0e',
+ '\x5b', '\x22', '\x01', '\x00', '\xff', '\x3d', '\x4e', '\x01',
+ '\x0f', '\x05', '\xff', '\xed', '\xb6', '\x02', '\x0f', '\x05',
+ '\xef', '\x0e', '\xda', '\x22', '\x01', '\x00', '\xff', '\x3d',
+ '\x9c', '\x01', '\x0f', '\x05', '\x14', '\x90', '\x0f', '\x05',
+ '\xef', '\x0e', '\xd6', '\x22', '\x01', '\x00', '\xff', '\x3d',
+ '\x8c', '\x01', '\x0f', '\x05', '\xff', '\xed', '\x94', '\x02',
+ '\x0f', '\x05', '\xef', '\x0e', '\x49', '\x22', '\x04', '\x00',
+ '\xc4', '\x30', '\x0f', '\x05', '\xff', '\xed', '\x84', '\x02',
+ '\x0f', '\x05', '\xef', '\x0e', '\xd7', '\x00', '\x20', '\x00',
+ '\xff', '\x3d', '\x6a', '\x01', '\x0f', '\x05', '\x20', '\x90',
+ '\x0f', '\x05', '\xef', '\x0e', '\xc2', '\x00', '\x1f', '\x00',
+ '\xff', '\x3d', '\x00', '\x02', '\x0f', '\x05', '\xef', '\x0e',
+ '\xc9', '\x00', '\x1f', '\x00', '\xff', '\x3d', '\x18', '\x02',
+ '\x0f', '\x05', '\xff', '\xed', '\x56', '\x02', '\x0f', '\x05',
+ '\xef', '\x0e', '\x4f', '\x00', '\x98', '\x00', '\xff', '\x3d',
+ '\x3c', '\x01', '\x0f', '\x05', '\x12', '\x90', '\x0f', '\x05',
+ '\xef', '\x0e', '\x43', '\x00', '\x98', '\x00', '\x76', '\x30',
+ '\x0f', '\x05', '\xff', '\xed', '\x36', '\x02', '\x0f', '\x05',
+ '\xef', '\x0e', '\xc2', '\x00', '\x98', '\x00', '\xff', '\x2d',
+ '\x2a', '\x02', '\x0f', '\x05', '\x6f', '\x1e', '\x46', '\x1b',
+ '\x00', '\x38', '\x61', '\x1a', '\x6f', '\xde', '\x00', '\x00',
+ '\x20', '\x00', '\x06', '\x21', '\xed', '\xdb', '\x0c', '\x21',
+ '\x70', '\x8a', '\x6f', '\x9e', '\x00', '\x00', '\x01', '\x00',
+ '\x10', '\x21', '\xe9', '\x9b', '\x5f', '\xd2', '\x14', '\x21',
+ '\xed', '\xdb', '\x6f', '\x9e', '\x00', '\x00', '\x1f', '\x00',
+ '\x18', '\x21', '\xe9', '\x9b', '\x1f', '\xdc', '\xe1', '\x7f',
+ '\x1c', '\x21', '\xed', '\xdb', '\x41', '\x92', '\x20', '\x21',
+ '\xe9', '\x9b', '\x6f', '\xde', '\x00', '\x80', '\x1f', '\x00',
+ '\x24', '\x21', '\xed', '\xdb', '\x5f', '\xdc', '\x00', '\x20',
+ '\x28', '\x21', '\xed', '\xdb', '\x42', '\xd2', '\x2c', '\x21',
+ '\xed', '\xdb', '\x6f', '\xde', '\x00', '\xc0', '\x1f', '\x00',
+ '\xff', '\xed', '\x16', '\x01', '\x0f', '\x05', '\x6f', '\x1e',
+ '\x42', '\x1b', '\x00', '\x38', '\x61', '\x1a', '\x6f', '\x9e',
+ '\x00', '\x00', '\x20', '\x00', '\x06', '\x21', '\xe9', '\x9b',
+ '\x0c', '\x21', '\x70', '\x8a', '\x5f', '\x9c', '\x00', '\x40',
+ '\x10', '\x21', '\xe9', '\x9b', '\x41', '\xd2', '\x14', '\x21',
+ '\xed', '\xdb', '\x18', '\x21', '\xe9', '\x9b', '\x5f', '\x9c',
+ '\x00', '\x20', '\x1c', '\x21', '\xe9', '\x9b', '\x42', '\x92',
+ '\x20', '\x21', '\xe9', '\x9b', '\x1f', '\x9c', '\xfe', '\x7f',
+ '\x24', '\x21', '\xe9', '\x9b', '\x28', '\x21', '\xe9', '\x9b',
+ '\x2c', '\x21', '\xed', '\xdb', '\x6f', '\x9e', '\x00', '\x00',
+ '\x01', '\x00', '\x30', '\x21', '\xe9', '\x9b', '\x34', '\x21',
+ '\xe9', '\x9b', '\x58', '\xe0', '\x5f', '\xd2', '\x6f', '\x1e',
+ '\x3a', '\x1b', '\x00', '\x38', '\x61', '\x1a', '\x6f', '\x9e',
+ '\x00', '\x00', '\x10', '\x00', '\x06', '\x21', '\xe9', '\x9b',
+ '\x0c', '\x21', '\x70', '\x8a', '\x5f', '\x9c', '\x00', '\x40',
+ '\x10', '\x21', '\xe9', '\x9b', '\x41', '\xd2', '\x14', '\x21',
+ '\xed', '\xdb', '\x18', '\x21', '\xe9', '\x9b', '\x5f', '\x9c',
+ '\x00', '\x20', '\x1c', '\x21', '\xe9', '\x9b', '\x42', '\x92',
+ '\x20', '\x21', '\xe9', '\x9b', '\x1f', '\x9c', '\xfe', '\x7f',
+ '\x24', '\x21', '\xe9', '\x9b', '\x28', '\x21', '\xe9', '\x9b',
+ '\x2c', '\x21', '\xed', '\xdb', '\x6f', '\x9e', '\x00', '\x00',
+ '\x01', '\x00', '\x30', '\x21', '\xe9', '\x9b', '\x34', '\x21',
+ '\xe9', '\x9b', '\x4f', '\xd2', '\x38', '\x21', '\xed', '\xdb',
+ '\xff', '\xed', '\x3e', '\x01', '\x0f', '\x05', '\x6f', '\x1e',
+ '\x3e', '\x1b', '\x00', '\x38', '\x61', '\x1a', '\x6f', '\x9e',
+ '\x00', '\x00', '\x10', '\x00', '\x06', '\x21', '\xe9', '\x9b',
+ '\x0c', '\x21', '\x70', '\x8a', '\x6f', '\xde', '\x00', '\x00',
+ '\x01', '\x00', '\x10', '\x21', '\xed', '\xdb', '\x4f', '\x92',
+ '\x14', '\x21', '\xe9', '\x9b', '\x6f', '\xde', '\x00', '\x00',
+ '\x0f', '\x00', '\x18', '\x21', '\xed', '\xdb', '\x1f', '\x9c',
+ '\xf1', '\x7f', '\x1c', '\x21', '\xe9', '\x9b', '\x41', '\x92',
+ '\x20', '\x21', '\xe9', '\x9b', '\x6f', '\xde', '\x00', '\x80',
+ '\x0f', '\x00', '\x24', '\x21', '\xed', '\xdb', '\x5f', '\xdc',
+ '\x00', '\x20', '\x28', '\x21', '\xed', '\xdb', '\x42', '\xd2',
+ '\x2c', '\x21', '\xed', '\xdb', '\x6f', '\xde', '\x00', '\xc0',
+ '\x0f', '\x00', '\x30', '\x21', '\xed', '\xdb', '\x5f', '\xdc',
+ '\x00', '\x40', '\x34', '\x21', '\xed', '\xdb', '\x38', '\x21',
+ '\xe9', '\x9b', '\xce', '\xe0', '\x0f', '\x05', '\x6f', '\x1e',
+ '\x42', '\x1b', '\x00', '\x38', '\x61', '\x1a', '\x6f', '\x9e',
+ '\x00', '\x00', '\x20', '\x00', '\x06', '\x21', '\xe9', '\x9b',
+ '\x0c', '\x21', '\x70', '\x8a', '\x5f', '\xdc', '\x00', '\x20',
+ '\x10', '\x21', '\xed', '\xdb', '\x48', '\x92', '\x14', '\x21',
+ '\xe9', '\x9b', '\x6f', '\x9e', '\x00', '\x00', '\x01', '\x00',
+ '\x18', '\x21', '\xe9', '\x9b', '\x1c', '\x21', '\xe9', '\x9b',
+ '\x62', '\xe0', '\x5f', '\xd2', '\x6f', '\x1e', '\x46', '\x1b',
+ '\x00', '\x38', '\x61', '\x1a', '\x6f', '\x9e', '\x00', '\x00',
+ '\x20', '\x00', '\x06', '\x21', '\xe9', '\x9b', '\x0c', '\x21',
+ '\x70', '\x8a', '\x6f', '\xde', '\x00', '\x00', '\x01', '\x00',
+ '\x10', '\x21', '\xed', '\xdb', '\x26', '\xe0', '\x5f', '\x92',
+ '\x6f', '\x1e', '\x4a', '\x1b', '\x00', '\x38', '\x61', '\x1a',
+ '\x6f', '\x9e', '\x00', '\x00', '\x40', '\x00', '\x06', '\x21',
+ '\xe9', '\x9b', '\x0c', '\x21', '\x70', '\x8a', '\x6f', '\xde',
+ '\x00', '\x00', '\x01', '\x00', '\x10', '\x21', '\xed', '\xdb',
+ '\x4f', '\x9c', '\x3f', '\x00', '\x14', '\x21', '\xe9', '\x9b',
+ '\x6f', '\xde', '\x00', '\x00', '\x1f', '\x00', '\x18', '\x21',
+ '\xed', '\xdb', '\x5f', '\x9c', '\x00', '\x20', '\x1c', '\x21',
+ '\xe9', '\x9b', '\x48', '\xd2', '\x20', '\x21', '\xed', '\xdb',
+ '\x30', '\xe0', '\x0f', '\x05', '\x04', '\x21', '\x49', '\x9a',
+ '\x6f', '\xae', '\x7e', '\x1a', '\x00', '\x38', '\xcf', '\x9e',
+ '\x01', '\x00', '\x08', '\x30', '\x0f', '\x05', '\x6f', '\xae',
+ '\x90', '\x1a', '\x00', '\x38', '\x3f', '\xbd', '\x1a', '\x05',
+ '\x00', '\x38', '\x62', '\xaa', '\x41', '\xb2', '\x3f', '\xbd',
+ '\x60', '\x05', '\x00', '\x38', '\x7a', '\x86', '\xbe', '\x3f',
+ '\x3e', '\x0d', '\x6f', '\x3e', '\x1a', '\x05', '\x00', '\x38',
+ '\x6f', '\xae', '\xa8', '\x1a', '\x00', '\x38', '\xb3', '\xb9',
+ '\x04', '\x21', '\x40', '\x9e', '\xcf', '\x9e', '\x01', '\x00',
+ '\x0c', '\x20', '\x42', '\xd2', '\x6f', '\xae', '\xb0', '\x1a',
+ '\x00', '\x38', '\xb3', '\xb9', '\x42', '\xd2', '\xc0', '\xda',
+ '\x32', '\x20', '\x47', '\xc2', '\x06', '\x21', '\x6d', '\x9e',
+ '\xc1', '\x93', '\xed', '\x9b', '\x62', '\xd6', '\x0c', '\xd1',
+ '\x69', '\x9a', '\xc1', '\x93', '\x0c', '\xd1', '\xe9', '\x9b',
+ '\x10', '\xd1', '\x69', '\x9a', '\xc1', '\x93', '\x10', '\xd1',
+ '\xe9', '\x9b', '\x81', '\xc2', '\xe9', '\x60', '\x0c', '\xd2',
+ '\x6f', '\xae', '\xb2', '\x1a', '\x00', '\x38', '\x3f', '\xbd',
+ '\x1a', '\x05', '\x00', '\x38', '\x6f', '\x0e', '\x1a', '\x05',
+ '\x00', '\x38', '\x6f', '\xae', '\xb4', '\x1a', '\x00', '\x38',
+ '\xb0', '\xb9', '\x61', '\xa6', '\xb0', '\xb9', '\x6f', '\xae',
+ '\xe6', '\x19', '\x00', '\x38', '\xb0', '\xb9', '\x62', '\xaa',
+ '\x41', '\xb2', '\x3f', '\xbd', '\x60', '\x05', '\x00', '\x38',
+ '\x41', '\xa2', '\xbe', '\x3f', '\x3e', '\x0d', '\xfc', '\xe1',
+ '\x7e', '\xbe', '\x8c', '\xe2', '\xfe', '\x2b', '\x6a', '\x16',
+ '\x6b', '\x26', '\x6f', '\x0e', '\xae', '\x0c', '\x00', '\x38',
+ '\xb0', '\xb9', '\x61', '\xa6', '\x4f', '\xbc', '\x80', '\x00',
+ '\x5f', '\xcc', '\x55', '\x05', '\x3f', '\xbd', '\x66', '\x0c',
+ '\x00', '\x38', '\x61', '\xa6', '\xb0', '\xb9', '\x04', '\x11',
+ '\x49', '\x9a', '\xcf', '\x9e', '\x02', '\x00', '\x10', '\x20',
+ '\x0f', '\x05', '\x6f', '\x9e', '\x30', '\x00', '\x30', '\x00',
+ '\x61', '\x29', '\xe9', '\x9b', '\xbe', '\x2f', '\x3e', '\x0d',
+ '\x4f', '\x9c', '\x30', '\x00', '\x61', '\x29', '\xd9', '\x9b',
+ '\xbe', '\x2f', '\x3e', '\x0d', '\x84', '\xe2', '\xfe', '\x0b',
+ '\x06', '\xa1', '\xeb', '\xba', '\x10', '\x10', '\x0f', '\x05',
+ '\x7a', '\x86', '\x7f', '\xb6', '\xbe', '\x0f', '\x10', '\xa1',
+ '\x6a', '\xaa', '\x7f', '\xb6', '\xbe', '\x0f', '\x70', '\x86',
+ '\x0c', '\xa1', '\xeb', '\xba', '\x22', '\x10', '\x7d', '\x86',
+ '\x14', '\xa1', '\xed', '\xda', '\x10', '\x00', '\x79', '\x86',
+ '\x10', '\xa1', '\x6c', '\xca', '\x01', '\x92', '\x14', '\xa1',
+ '\xe9', '\x9a', '\xf9', '\x10', '\x2c', '\xd6', '\x0c', '\xa1',
+ '\x29', '\xda', '\xe9', '\xb6', '\xd1', '\x10', '\x0f', '\x05',
+ '\x01', '\x02', '\xc7', '\x02', '\xd3', '\x80', '\x0c', '\xa2',
+ '\x7a', '\x86', '\x7f', '\xb6', '\xbe', '\x0f', '\x84', '\xe2',
+ '\xfe', '\x0b', '\x6a', '\x06', '\x6b', '\xa6', '\x6d', '\xb6',
+ '\x7d', '\x86', '\xeb', '\xd6', '\x48', '\xa0', '\x0f', '\x05',
+ '\x60', '\x9a', '\x2d', '\x96', '\x49', '\xa5', '\x59', '\x9a',
+ '\x4c', '\xd5', '\xd9', '\x9a', '\x32', '\x30', '\x02', '\xd2',
+ '\x82', '\xd2', '\x6b', '\x96', '\x2a', '\x96', '\xe9', '\xa6',
+ '\x20', '\x00', '\x6a', '\xc6', '\x60', '\xc9', '\x59', '\x9a',
+ '\xdf', '\x9e', '\xff', '\xff', '\x0a', '\x30', '\x02', '\xc2',
+ '\x82', '\xc2', '\x42', '\xa2', '\x7f', '\xb6', '\xbe', '\x0f',
+ '\x6b', '\x96', '\x2a', '\x96', '\xe9', '\xc6', '\xe5', '\x10',
+ '\x0f', '\x05', '\x41', '\xa2', '\x7f', '\xb6', '\xbe', '\x0f',
+ '\xeb', '\xd6', '\xbd', '\xb0', '\x0f', '\x05', '\x7a', '\x86',
+ '\x7f', '\xb6', '\xbe', '\x0f', '\xfc', '\xe1', '\x7e', '\xbe',
+ '\x90', '\xe2', '\xfe', '\x3b', '\x73', '\x86', '\x72', '\x86',
+ '\x6f', '\x0e', '\x4e', '\x1b', '\x00', '\x38', '\x41', '\x12',
+ '\x04', '\x01', '\xc1', '\x1b', '\xcf', '\x1e', '\x01', '\x00',
+ '\x04', '\x30', '\x42', '\x92', '\x44', '\x92', '\x05', '\x01',
+ '\xc9', '\x9b', '\x60', '\xa6', '\x3f', '\xbd', '\x42', '\x0f',
+ '\x00', '\x38', '\x6a', '\xa6', '\x0c', '\x20', '\x0f', '\x05',
+ '\xc1', '\x13', '\xcf', '\x1e', '\x03', '\x00', '\xd9', '\x80',
+ '\x0f', '\x05', '\x06', '\x01', '\x23', '\x3a', '\x0f', '\x0c',
+ '\x6c', '\x00', '\x01', '\x22', '\xc1', '\x22', '\xc7', '\x80',
+ '\x63', '\xa6', '\xbe', '\x3f', '\x3e', '\x0d', '\xfc', '\xe1',
+ '\x7e', '\xbe', '\x98', '\xe2', '\xfe', '\x5b', '\x6a', '\x16',
+ '\x6b', '\x56', '\x6c', '\x36', '\x70', '\x86', '\xed', '\x06',
+ '\x74', '\xa0', '\x6d', '\x46', '\x05', '\x11', '\x49', '\x9a',
+ '\xcf', '\x9e', '\x02', '\x00', '\x12', '\x20', '\x0f', '\x05',
+ '\x43', '\x05', '\x59', '\x9a', '\xdf', '\x9e', '\xff', '\xff',
+ '\x54', '\x30', '\x42', '\x22', '\x05', '\x11', '\x49', '\x9a',
+ '\xcf', '\x9e', '\x04', '\x00', '\x0e', '\x20', '\x61', '\xa6',
+ '\x43', '\x05', '\x69', '\x9a', '\xff', '\x92', '\x3e', '\x30',
+ '\x44', '\x22', '\x61', '\xa6', '\x3f', '\xbd', '\xae', '\x0c',
+ '\x00', '\x38', '\x61', '\xa6', '\x4f', '\xbc', '\xa0', '\x00',
+ '\x5f', '\xcc', '\x55', '\x05', '\x3f', '\xbd', '\x66', '\x0c',
+ '\x00', '\x38', '\x65', '\xb6', '\x20', '\xb6', '\x63', '\xc6',
+ '\x20', '\xc6', '\x61', '\xa6', '\x3f', '\xbd', '\x3a', '\x0c',
+ '\x00', '\x38', '\x6a', '\x26', '\x61', '\xa6', '\x65', '\xb6',
+ '\x20', '\xb6', '\x3f', '\xbd', '\xda', '\x0c', '\x00', '\x38',
+ '\x6a', '\xa6', '\xf3', '\x20', '\x61', '\xa6', '\x22', '\x06',
+ '\xe4', '\x06', '\x91', '\xb0', '\x0f', '\x05', '\xbe', '\x5f',
+ '\x3e', '\x0d', '\xfc', '\xe1', '\x7e', '\xbe', '\xa4', '\xe2',
+ '\xfe', '\x8b', '\x6a', '\x16', '\x6b', '\x06', '\x6c', '\x86',
+ '\x3f', '\xbd', '\x6c', '\x14', '\x00', '\x38', '\x6a', '\x96',
+ '\x1a', '\x30', '\x41', '\xa2', '\x60', '\xd6', '\x28', '\xd6',
+ '\xe9', '\xd6', '\x14', '\x80', '\x0f', '\x05', '\x6f', '\xae',
+ '\xb8', '\x1a', '\x00', '\x38', '\x3f', '\xbd', '\x1a', '\x05',
+ '\x00', '\x38', '\x42', '\xa2', '\xbe', '\x8f', '\x3e', '\x0d',
+ '\x6f', '\xce', '\x54', '\x1b', '\x00', '\x38', '\x6c', '\xca',
+ '\xec', '\x06', '\x1e', '\x10', '\xec', '\xd6', '\x6f', '\x9e',
+ '\x26', '\x1c', '\x00', '\x38', '\x09', '\x91', '\x70', '\x8a',
+ '\x16', '\x91', '\xe1', '\x1b', '\xac', '\x06', '\x1a', '\x91',
+ '\xe0', '\x0b', '\x1e', '\x91', '\xe8', '\x8b', '\x74', '\xe0',
+ '\x0f', '\x05', '\x5a', '\x80', '\x6c', '\x96', '\x6f', '\xde',
+ '\x26', '\x1c', '\x00', '\x38', '\x01', '\xd1', '\xe1', '\x1b',
+ '\x05', '\xd1', '\xe0', '\x0b', '\xa0', '\x96', '\x09', '\xd1',
+ '\xe9', '\x9b', '\x29', '\x16', '\x16', '\xd1', '\xe1', '\x1b',
+ '\x1a', '\xd1', '\x70', '\x8a', '\x68', '\xc6', '\xa9', '\xc6',
+ '\x1e', '\xd1', '\xec', '\xcb', '\x46', '\xe0', '\x0f', '\x05',
+ '\x6f', '\xae', '\xd4', '\x1a', '\x00', '\x38', '\x3f', '\xbd',
+ '\x1a', '\x05', '\x00', '\x38', '\x44', '\xa2', '\xbe', '\x8f',
+ '\x3e', '\x0d', '\x6f', '\xae', '\xe8', '\x1a', '\x00', '\x38',
+ '\x3f', '\xbd', '\x1a', '\x05', '\x00', '\x38', '\x60', '\xa6',
+ '\x41', '\xb2', '\x3f', '\xbd', '\x60', '\x05', '\x00', '\x38',
+ '\x43', '\xa2', '\xbe', '\x8f', '\x3e', '\x0d', '\x6f', '\x9e',
+ '\x26', '\x1c', '\x00', '\x38', '\x01', '\x91', '\xe1', '\x1b',
+ '\x05', '\x91', '\xe0', '\x0b', '\x09', '\x91', '\xe8', '\x8b',
+ '\x1e', '\x91', '\x70', '\x8a', '\x6f', '\xce', '\x26', '\x1c',
+ '\x00', '\x38', '\x7c', '\x0a', '\x0d', '\xc1', '\x70', '\x8a',
+ '\x11', '\xc1', '\x70', '\x8a', '\x15', '\xc1', '\x79', '\x0e',
+ '\x7f', '\x0d', '\x48', '\x1c', '\x00', '\x38', '\x70', '\x8a',
+ '\x7f', '\x0d', '\x4c', '\x1c', '\x00', '\x38', '\x70', '\x8a',
+ '\x0d', '\x91', '\xe8', '\x8a', '\xff', '\x8d', '\xc0', '\x01',
+ '\x75', '\x86', '\x65', '\x56', '\x04', '\x20', '\x6c', '\xd6',
+ '\x15', '\xd2', '\x65', '\x96', '\x29', '\x55', '\x65', '\x36',
+ '\x23', '\x95', '\x09', '\xd1', '\x69', '\x9a', '\x24', '\x30',
+ '\x2c', '\x36', '\x0d', '\xd1', '\xe9', '\x9a', '\x1c', '\x80',
+ '\x0f', '\x05', '\x09', '\x31', '\x69', '\x9a', '\x10', '\x30',
+ '\x0f', '\x05', '\x83', '\x0b', '\x0a', '\x20', '\x0f', '\x05',
+ '\x0d', '\x31', '\xe9', '\x9a', '\x06', '\x20', '\x0f', '\x05',
+ '\x65', '\x56', '\x35', '\x35', '\x11', '\x31', '\x63', '\x3a',
+ '\xca', '\x32', '\x4d', '\x90', '\x65', '\x96', '\x29', '\x55',
+ '\x65', '\x36', '\x23', '\x95', '\x2f', '\x3e', '\x26', '\x1c',
+ '\x00', '\x38', '\x05', '\x31', '\x64', '\x4a', '\x0d', '\x31',
+ '\x69', '\x9a', '\x29', '\x46', '\x01', '\x31', '\x27', '\x9a',
+ '\x65', '\xa6', '\xc3', '\xa3', '\xa5', '\xa6', '\xc2', '\xa3',
+ '\xa5', '\xa6', '\xc2', '\xa3', '\x2f', '\xae', '\x4e', '\x1b',
+ '\x00', '\x38', '\x64', '\xb6', '\x3f', '\xbd', '\xbc', '\x13',
+ '\x00', '\x38', '\x83', '\x0b', '\x24', '\x30', '\x6a', '\x66',
+ '\x65', '\xa6', '\xc3', '\xa3', '\xa5', '\xa6', '\xc2', '\xa3',
+ '\xa5', '\xa6', '\xc2', '\xa3', '\x2f', '\xae', '\x4e', '\x1b',
+ '\x00', '\x38', '\x64', '\xb6', '\x3f', '\xbd', '\xda', '\x0c',
+ '\x00', '\x38', '\x6a', '\xa6', '\xe5', '\x20', '\x65', '\xa6',
+ '\x73', '\x0a', '\x65', '\x26', '\xc3', '\x23', '\xa5', '\x26',
+ '\xc2', '\x23', '\xa5', '\x26', '\xc2', '\x23', '\x2f', '\x2e',
+ '\x4e', '\x1b', '\x00', '\x38', '\x62', '\xa6', '\x4f', '\xbc',
+ '\xf0', '\x00', '\x5f', '\xcc', '\x55', '\x05', '\x3f', '\xbd',
+ '\x66', '\x0c', '\x00', '\x38', '\x62', '\xa6', '\x64', '\xb6',
+ '\x67', '\xc6', '\x66', '\xd6', '\x3f', '\xbd', '\x0e', '\x14',
+ '\x00', '\x38', '\x4a', '\xa6', '\x28', '\x20', '\x7b', '\x86',
+ '\x0d', '\x31', '\x69', '\xde', '\x26', '\xd6', '\xe9', '\xdb',
+ '\x11', '\x31', '\x70', '\x8a', '\x62', '\xaa', '\x24', '\xa6',
+ '\x3f', '\xbd', '\x60', '\x05', '\x00', '\x38', '\x6f', '\xae',
+ '\xf2', '\x1a', '\x00', '\x38', '\x3f', '\xbd', '\x1a', '\x05',
+ '\x00', '\x38', '\xaa', '\xe0', '\x0f', '\x05', '\xcf', '\xae',
+ '\x01', '\x00', '\x4c', '\x30', '\x0f', '\x05', '\xcf', '\xae',
+ '\x02', '\x00', '\x46', '\x20', '\x65', '\xa6', '\x62', '\xaa',
+ '\x24', '\xa6', '\x6f', '\x1e', '\x60', '\x05', '\x00', '\x38',
+ '\x7b', '\x86', '\xb1', '\xb9', '\x6f', '\x0e', '\x1a', '\x05',
+ '\x00', '\x38', '\x6f', '\xae', '\x06', '\x1b', '\x00', '\x38',
+ '\xb0', '\xb9', '\x66', '\xa6', '\x7b', '\x86', '\xb1', '\xb9',
+ '\x6f', '\xae', '\x12', '\x1b', '\x00', '\x38', '\xb0', '\xb9',
+ '\x62', '\xa6', '\x64', '\xb6', '\x3f', '\xbd', '\x6e', '\x13',
+ '\x00', '\x38', '\x41', '\x92', '\xc3', '\x9b', '\x11', '\x31',
+ '\x6d', '\x9e', '\x01', '\x92', '\x58', '\xe0', '\xed', '\x9b',
+ '\x65', '\xa6', '\xc3', '\xa3', '\xa5', '\xa6', '\xc2', '\xa3',
+ '\xa5', '\xa6', '\xc2', '\xa3', '\x6f', '\xad', '\x4e', '\x1b',
+ '\x00', '\x38', '\x62', '\xae', '\x24', '\xa6', '\x6f', '\x1e',
+ '\x60', '\x05', '\x00', '\x38', '\x7b', '\x86', '\xb1', '\xb9',
+ '\x6f', '\x0e', '\x1a', '\x05', '\x00', '\x38', '\x6f', '\xae',
+ '\x1a', '\x1b', '\x00', '\x38', '\xb0', '\xb9', '\x66', '\xa6',
+ '\x7b', '\x86', '\xb1', '\xb9', '\x6f', '\xae', '\x12', '\x1b',
+ '\x00', '\x38', '\xb0', '\xb9', '\x62', '\xa6', '\x64', '\xb6',
+ '\x67', '\xc6', '\x66', '\xd6', '\x3f', '\xbd', '\xbe', '\x14',
+ '\x00', '\x38', '\x0d', '\x31', '\x6d', '\x9e', '\x26', '\x96',
+ '\xed', '\x9b', '\x11', '\x31', '\x70', '\x8a', '\x6f', '\xce',
+ '\x26', '\x1c', '\x00', '\x38', '\x0d', '\xc1', '\x69', '\x9a',
+ '\x7f', '\x0d', '\x48', '\x1c', '\x00', '\x38', '\x29', '\x9a',
+ '\xe8', '\x96', '\xff', '\x1d', '\x44', '\xfe', '\x0f', '\x05',
+ '\x75', '\x86', '\x6f', '\x2e', '\x4e', '\x1b', '\x00', '\x38',
+ '\x6f', '\x1e', '\x26', '\x1c', '\x00', '\x38', '\x09', '\x11',
+ '\xa0', '\x0b', '\x4c', '\x30', '\x7b', '\x86', '\x62', '\xaa',
+ '\x3f', '\xbd', '\x60', '\x05', '\x00', '\x38', '\x6f', '\xae',
+ '\x26', '\x1b', '\x00', '\x38', '\x3f', '\xbd', '\x1a', '\x05',
+ '\x00', '\x38', '\x70', '\x86', '\x09', '\x11', '\xe0', '\x0a',
+ '\x22', '\x00', '\x0f', '\x05', '\x05', '\x11', '\x29', '\x0a',
+ '\x01', '\x11', '\x6d', '\xda', '\x62', '\x99', '\x59', '\x9a',
+ '\x4d', '\x05', '\xd9', '\x9a', '\xff', '\x2d', '\x9a', '\xfd',
+ '\x0f', '\x05', '\x02', '\x02', '\x09', '\x11', '\xe0', '\x0a',
+ '\xe3', '\x10', '\x0f', '\x05', '\x6f', '\xae', '\x36', '\x1b',
+ '\x00', '\x38', '\x3f', '\xbd', '\x1a', '\x05', '\x00', '\x38',
+ '\x0f', '\x2c', '\x6c', '\x00', '\x01', '\x52', '\xc1', '\x52',
+ '\xa5', '\x80', '\x15', '\x12', '\x7a', '\x86', '\xbe', '\x8f',
+ '\x3e', '\x0d', '\x00', '\x00', '\x7f', '\xb6', '\x0f', '\x05',
+ '\x00', '\x00', '\x00', '\x00', '\x0d', '\x0a', '\x0d', '\x0a',
+ '\x44', '\x65', '\x76', '\x69', '\x63', '\x65', '\x20', '\x49',
+ '\x44', '\x20', '\x3d', '\x20', '\x00', '\x00', '\x43', '\x68',
+ '\x65', '\x63', '\x6b', '\x73', '\x75', '\x6d', '\x20', '\x6f',
+ '\x66', '\x20', '\x62', '\x6f', '\x6f', '\x74', '\x6c', '\x6f',
+ '\x61', '\x64', '\x65', '\x72', '\x20', '\x69', '\x73', '\x20',
+ '\x00', '\x00', '\x57', '\x61', '\x69', '\x74', '\x69', '\x6e',
+ '\x67', '\x20', '\x66', '\x6f', '\x72', '\x20', '\x6c', '\x6f',
+ '\x61', '\x64', '\x20', '\x69', '\x6e', '\x66', '\x6f', '\x2e',
+ '\x0d', '\x0a', '\x00', '\x00', '\x47', '\x6f', '\x74', '\x20',
+ '\x6c', '\x6f', '\x61', '\x64', '\x20', '\x69', '\x6e', '\x66',
+ '\x6f', '\x2e', '\x0d', '\x0a', '\x00', '\x00', '\x50', '\x41',
+ '\x43', '\x4b', '\x45', '\x54', '\x5f', '\x49', '\x4e', '\x46',
+ '\x4f', '\x0d', '\x0a', '\x00', '\x53', '\x45', '\x54', '\x5f',
+ '\x52', '\x45', '\x47', '\x49', '\x53', '\x54', '\x45', '\x52',
+ '\x0d', '\x0a', '\x00', '\x00', '\x47', '\x45', '\x54', '\x5f',
+ '\x52', '\x45', '\x47', '\x49', '\x53', '\x54', '\x45', '\x52',
+ '\x0d', '\x0a', '\x00', '\x00', '\x50', '\x41', '\x55', '\x53',
+ '\x45', '\x5f', '\x4c', '\x4f', '\x4f', '\x50', '\x0d', '\x0a',
+ '\x00', '\x00', '\x4d', '\x45', '\x4d', '\x5f', '\x56', '\x45',
+ '\x52', '\x49', '\x46', '\x59', '\x0d', '\x0a', '\x00', '\x00',
+ '\x76', '\x65', '\x72', '\x69', '\x66', '\x79', '\x20', '\x66',
+ '\x61', '\x69', '\x6c', '\x65', '\x64', '\x0d', '\x0a', '\x00',
+ '\x4d', '\x45', '\x4d', '\x5f', '\x54', '\x45', '\x53', '\x54',
+ '\x0d', '\x0a', '\x00', '\x00', '\x23', '\x23', '\x23', '\x20',
+ '\x4d', '\x65', '\x6d', '\x6f', '\x72', '\x79', '\x20', '\x74',
+ '\x65', '\x73', '\x74', '\x20', '\x66', '\x61', '\x69', '\x6c',
+ '\x65', '\x64', '\x20', '\x61', '\x74', '\x20', '\x00', '\x00',
+ '\x50', '\x61', '\x73', '\x73', '\x65', '\x64', '\x20', '\x6d',
+ '\x65', '\x6d', '\x6f', '\x72', '\x79', '\x20', '\x74', '\x65',
+ '\x73', '\x74', '\x2e', '\x0d', '\x0a', '\x00', '\x4d', '\x45',
+ '\x4d', '\x5f', '\x44', '\x55', '\x4d', '\x50', '\x0d', '\x0a',
+ '\x00', '\x00', '\x4d', '\x45', '\x4d', '\x5f', '\x43', '\x4c',
+ '\x45', '\x41', '\x52', '\x0d', '\x0a', '\x00', '\x46', '\x4c',
+ '\x41', '\x53', '\x48', '\x0d', '\x0a', '\x00', '\x4a', '\x55',
+ '\x4d', '\x50', '\x0d', '\x0a', '\x00', '\x00', '\x45', '\x4e',
+ '\x44', '\x0d', '\x0a', '\x00', '\x23', '\x23', '\x23', '\x20',
+ '\x55', '\x6e', '\x6b', '\x6e', '\x6f', '\x77', '\x6e', '\x20',
+ '\x74', '\x79', '\x70', '\x65', '\x3a', '\x20', '\x00', '\x00',
+ '\x43', '\x68', '\x65', '\x63', '\x6b', '\x73', '\x75', '\x6d',
+ '\x20', '\x6f', '\x66', '\x20', '\x66', '\x69', '\x6c', '\x65',
+ '\x20', '\x69', '\x73', '\x20', '\x00', '\x00', '\x23', '\x23',
+ '\x23', '\x20', '\x4d', '\x65', '\x6d', '\x6f', '\x72', '\x79',
+ '\x20', '\x74', '\x65', '\x73', '\x74', '\x20', '\x31', '\x20',
+ '\x66', '\x61', '\x69', '\x6c', '\x65', '\x64', '\x20', '\x61',
+ '\x74', '\x20', '\x00', '\x00', '\x23', '\x23', '\x23', '\x20',
+ '\x4d', '\x65', '\x6d', '\x6f', '\x72', '\x79', '\x20', '\x74',
+ '\x65', '\x73', '\x74', '\x20', '\x32', '\x20', '\x66', '\x61',
+ '\x69', '\x6c', '\x65', '\x64', '\x20', '\x61', '\x74', '\x20',
+ '\x00', '\x00', '\x20', '\x3a', '\x00', '\x00', '\x38', '\x4d',
+ '\x62', '\x20', '\x42', '\x42', '\x00', '\x00', '\x38', '\x4d',
+ '\x62', '\x20', '\x54', '\x42', '\x00', '\x00', '\x31', '\x36',
+ '\x4d', '\x62', '\x20', '\x42', '\x42', '\x00', '\x31', '\x36',
+ '\x4d', '\x62', '\x20', '\x54', '\x42', '\x00', '\x33', '\x32',
+ '\x4d', '\x62', '\x20', '\x54', '\x42', '\x00', '\x55', '\x6e',
+ '\x73', '\x75', '\x70', '\x70', '\x6f', '\x72', '\x74', '\x65',
+ '\x64', '\x20', '\x69', '\x6e', '\x74', '\x65', '\x72', '\x6c',
+ '\x65', '\x61', '\x76', '\x65', '\x21', '\x0a', '\x00', '\x00',
+ '\x46', '\x6f', '\x75', '\x6e', '\x64', '\x20', '\x31', '\x20',
+ '\x78', '\x20', '\x43', '\x46', '\x49', '\x20', '\x61', '\x74',
+ '\x20', '\x00', '\x54', '\x6f', '\x6f', '\x20', '\x6d', '\x61',
+ '\x6e', '\x79', '\x20', '\x72', '\x65', '\x67', '\x69', '\x6f',
+ '\x6e', '\x73', '\x20', '\x6f', '\x6e', '\x20', '\x63', '\x68',
+ '\x69', '\x70', '\x21', '\x0a', '\x00', '\x00', '\x4e', '\x6f',
+ '\x20', '\x73', '\x69', '\x6e', '\x67', '\x6c', '\x65', '\x20',
+ '\x78', '\x31', '\x36', '\x20', '\x61', '\x74', '\x20', '\x00',
+ '\x4e', '\x6f', '\x20', '\x69', '\x6e', '\x74', '\x65', '\x72',
+ '\x6c', '\x65', '\x61', '\x76', '\x65', '\x64', '\x20', '\x78',
+ '\x31', '\x36', '\x20', '\x61', '\x74', '\x20', '\x00', '\x00',
+ '\x46', '\x6f', '\x75', '\x6e', '\x64', '\x20', '\x00', '\x00',
+ '\x31', '\x00', '\x32', '\x00', '\x20', '\x78', '\x20', '\x00',
+ '\x46', '\x61', '\x74', '\x61', '\x6c', '\x3a', '\x20', '\x66',
+ '\x6c', '\x61', '\x73', '\x68', '\x20', '\x69', '\x73', '\x20',
+ '\x74', '\x6f', '\x6f', '\x20', '\x73', '\x6d', '\x61', '\x6c',
+ '\x6c', '\x2e', '\x0a', '\x00', '\x53', '\x65', '\x63', '\x74',
+ '\x6f', '\x72', '\x20', '\x65', '\x72', '\x61', '\x73', '\x65',
+ '\x20', '\x65', '\x72', '\x72', '\x6f', '\x72', '\x0a', '\x00',
+ '\x45', '\x72', '\x72', '\x6f', '\x72', '\x20', '\x61', '\x74',
+ '\x20', '\x00', '\x3a', '\x20', '\x4e', '\x6f', '\x20', '\x6e',
+ '\x65', '\x65', '\x64', '\x20', '\x74', '\x6f', '\x20', '\x77',
+ '\x72', '\x69', '\x74', '\x65', '\x0a', '\x00', '\x3a', '\x20',
+ '\x45', '\x72', '\x61', '\x73', '\x69', '\x6e', '\x67', '\x20',
+ '\x00', '\x00', '\x20', '\x62', '\x79', '\x74', '\x65', '\x73',
+ '\x0a', '\x00', '\x3a', '\x20', '\x57', '\x72', '\x69', '\x74',
+ '\x69', '\x6e', '\x67', '\x20', '\x00', '\x00', '\x3a', '\x20',
+ '\x56', '\x65', '\x72', '\x69', '\x66', '\x79', '\x69', '\x6e',
+ '\x67', '\x2e', '\x2e', '\x2e', '\x00', '\x00', '\x4f', '\x4b',
+ '\x0a', '\x00', '\x0e', '\x1a', '\x00', '\x38', '\x16', '\x1a',
+ '\x00', '\x38', '\x1e', '\x1a', '\x00', '\x38', '\x26', '\x1a',
+ '\x00', '\x38', '\x2e', '\x1a', '\x00', '\x38', '\x00', '\x00',
+ '\x00', '\x80', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x84', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x54', '\x68', '\x69', '\x73', '\x20', '\x62', '\x6f', '\x6f',
+ '\x74', '\x6c', '\x6f', '\x61', '\x64', '\x65', '\x72', '\x20',
+ '\x77', '\x61', '\x73', '\x20', '\x62', '\x75', '\x69', '\x6c',
+ '\x74', '\x20', '\x62', '\x79', '\x20', '\x72', '\x6f', '\x6f',
+ '\x74', '\x20', '\x6f', '\x6e', '\x20', '\x57', '\x65', '\x64',
+ '\x20', '\x4d', '\x61', '\x79', '\x20', '\x31', '\x36', '\x20',
+ '\x32', '\x31', '\x3a', '\x33', '\x31', '\x3a', '\x34', '\x31',
+ '\x20', '\x43', '\x45', '\x53', '\x54', '\x20', '\x32', '\x30',
+ '\x30', '\x37', '\x2e', '\x0d', '\x0a', '\x00'
+};
diff --git a/package/etrax-tools/src/e100boot/sbl/net_noleds_ima.c b/package/etrax-tools/src/e100boot/sbl/net_noleds_ima.c
new file mode 100644
index 000000000..d5e03d1f2
--- /dev/null
+++ b/package/etrax-tools/src/e100boot/sbl/net_noleds_ima.c
@@ -0,0 +1,873 @@
+
+/* cconv 1.2 12/16/97, Copyright (C) 1997, Axis Communications AB */
+
+const char net_noleds_ima[] =
+{
+ '\x0f', '\x05', '\x0f', '\x05', '\x6f', '\xee', '\x00', '\x1f',
+ '\x00', '\x38', '\x3f', '\x0d', '\x08', '\x01', '\x00', '\x38',
+ '\x78', '\x56', '\x34', '\x12', '\x21', '\x43', '\x65', '\x87',
+ '\x6f', '\xde', '\x20', '\x00', '\x00', '\xb0', '\x5f', '\x9c',
+ '\x65', '\x6f', '\xed', '\x9b', '\x5f', '\x9c', '\x25', '\x2f',
+ '\x7f', '\x0d', '\xf0', '\x17', '\x00', '\x38', '\xe9', '\x9b',
+ '\xed', '\x9b', '\x3f', '\x0d', '\x28', '\x01', '\x00', '\x38',
+ '\xfc', '\xe1', '\x7e', '\xbe', '\x7f', '\x0d', '\x92', '\x1c',
+ '\x00', '\x38', '\x70', '\x8a', '\x6f', '\x9e', '\x20', '\x00',
+ '\x00', '\xb0', '\x69', '\x9a', '\x79', '\x67', '\x7f', '\x0d',
+ '\x46', '\x1c', '\x00', '\x38', '\xe9', '\x9b', '\x6f', '\x9e',
+ '\x22', '\x00', '\x00', '\xb0', '\x59', '\x9a', '\x59', '\x94',
+ '\x7f', '\x0d', '\xae', '\x1c', '\x00', '\x38', '\xe9', '\x9b',
+ '\x6f', '\x9e', '\x04', '\x00', '\x00', '\xb0', '\x69', '\x9a',
+ '\x06', '\x93', '\xe1', '\x93', '\x81', '\x92', '\x7f', '\x0d',
+ '\x96', '\x1c', '\x00', '\x38', '\xc9', '\x9b', '\x7f', '\x0d',
+ '\x58', '\x1c', '\x00', '\x38', '\x70', '\x4a', '\x3f', '\xbd',
+ '\x28', '\x02', '\x00', '\x38', '\x3f', '\xbd', '\x30', '\x04',
+ '\x00', '\x38', '\x3f', '\xbd', '\xcc', '\x01', '\x00', '\x38',
+ '\x6a', '\xa6', '\xf7', '\x30', '\x0f', '\x05', '\x6f', '\x9e',
+ '\x00', '\x01', '\x00', '\x38', '\x69', '\x9a', '\x7f', '\x0d',
+ '\x92', '\x1c', '\x00', '\x38', '\xe9', '\x9a', '\x24', '\x80',
+ '\x0f', '\x05', '\x6f', '\x9e', '\x96', '\x1c', '\x00', '\x38',
+ '\x49', '\x9a', '\xcf', '\x9e', '\x01', '\x00', '\xd3', '\x20',
+ '\x0f', '\x05', '\x6f', '\xde', '\xd4', '\x01', '\x00', '\xb0',
+ '\x4d', '\x9a', '\x38', '\x93', '\x41', '\x93', '\xcd', '\x9b',
+ '\xc1', '\xe0', '\x0f', '\x05', '\x3e', '\xbe', '\x3f', '\x0d',
+ '\x80', '\x05', '\x00', '\x38', '\xfc', '\xe1', '\x7e', '\xbe',
+ '\x3f', '\xbd', '\x62', '\x03', '\x00', '\x38', '\x6a', '\xa6',
+ '\x16', '\x20', '\x41', '\x92', '\x3f', '\xbd', '\xf4', '\x01',
+ '\x00', '\x38', '\x6a', '\xa6', '\x0a', '\x30', '\x79', '\x86',
+ '\x3f', '\xbd', '\x30', '\x04', '\x00', '\x38', '\x79', '\x86',
+ '\x69', '\xa6', '\x3e', '\x0d', '\x84', '\xe2', '\x6f', '\x9e',
+ '\x22', '\x00', '\x00', '\xb0', '\x59', '\x9a', '\x59', '\x94',
+ '\xee', '\x9b', '\x6f', '\xce', '\xae', '\x1c', '\x00', '\x38',
+ '\x6c', '\x9a', '\x6e', '\xda', '\xad', '\x96', '\xb9', '\x96',
+ '\xdf', '\x9c', '\x80', '\x25', '\x0a', '\xd0', '\x0f', '\x05',
+ '\x6e', '\x9a', '\xec', '\x9b', '\x04', '\xe0', '\x41', '\xa2',
+ '\x7a', '\x86', '\x7f', '\xb6', '\x04', '\xe2', '\x00', '\x00',
+ '\x88', '\xe2', '\xfe', '\x1b', '\x6f', '\x9e', '\x8c', '\x00',
+ '\x00', '\xb0', '\x79', '\x8a', '\x69', '\x9a', '\x7f', '\x0d',
+ '\x90', '\x00', '\x00', '\xb0', '\xe9', '\x9b', '\x6f', '\x9e',
+ '\x01', '\x40', '\x8c', '\x00', '\x7f', '\x0d', '\x80', '\x00',
+ '\x00', '\xb0', '\xe9', '\x9b', '\x6f', '\xce', '\x01', '\x00',
+ '\x01', '\x40', '\x7f', '\x0d', '\x84', '\x00', '\x00', '\xb0',
+ '\xec', '\xcb', '\x6f', '\xde', '\x8c', '\x00', '\x01', '\x00',
+ '\x7f', '\x0d', '\x88', '\x00', '\x00', '\xb0', '\xed', '\xdb',
+ '\x41', '\x12', '\x7f', '\x0d', '\x94', '\x00', '\x00', '\xb0',
+ '\xe1', '\x1b', '\x7f', '\x0d', '\xa0', '\x00', '\x00', '\xb0',
+ '\x70', '\x8a', '\x5f', '\x9c', '\x02', '\x01', '\x7f', '\x0d',
+ '\x9c', '\x00', '\x00', '\xb0', '\xe9', '\x9b', '\x43', '\xc2',
+ '\x7f', '\x0d', '\x98', '\x00', '\x00', '\xb0', '\xec', '\xcb',
+ '\x44', '\xd2', '\x7f', '\x0d', '\xd0', '\x01', '\x00', '\xb0',
+ '\xcd', '\xdb', '\x6f', '\x0e', '\xd4', '\x01', '\x00', '\xb0',
+ '\xc0', '\xdb', '\x6f', '\xbe', '\x14', '\x1c', '\x00', '\x38',
+ '\x6b', '\x96', '\x4f', '\xcc', '\x26', '\x00', '\xd9', '\xcf',
+ '\x79', '\x4a', '\x6f', '\xde', '\x4a', '\x1c', '\x00', '\x38',
+ '\x04', '\xb1', '\xed', '\xdb', '\x6f', '\x9e', '\x6c', '\x1c',
+ '\x00', '\x38', '\x08', '\xb1', '\xe9', '\x9b', '\x6d', '\x96',
+ '\x5f', '\xce', '\xdc', '\x05', '\xd9', '\xcf', '\x47', '\xc2',
+ '\xd9', '\xcb', '\x6f', '\x9e', '\x04', '\x01', '\x00', '\x38',
+ '\x69', '\x9a', '\x08', '\xd1', '\xe9', '\x9b', '\x6f', '\xce',
+ '\x2a', '\x1c', '\x00', '\x38', '\x6f', '\x9e', '\x00', '\x8c',
+ '\x40', '\x02', '\x79', '\x67', '\x6c', '\xd6', '\xed', '\x9f',
+ '\x5f', '\x9e', '\x00', '\x01', '\x79', '\x27', '\xdd', '\x9b',
+ '\x6c', '\xa6', '\x86', '\xa2', '\x4f', '\x9c', '\x40', '\x00',
+ '\x79', '\x27', '\x06', '\xc1', '\xd9', '\x9b', '\x6f', '\x9e',
+ '\x00', '\x03', '\xaa', '\xaa', '\x79', '\x67', '\x08', '\xc1',
+ '\xe9', '\x9b', '\x6f', '\x9e', '\x56', '\x88', '\x8c', '\x40',
+ '\x79', '\x67', '\x0c', '\xc1', '\xe9', '\x9b', '\x7e', '\x92',
+ '\x79', '\x67', '\x10', '\xc1', '\xe9', '\x9b', '\x14', '\xc1',
+ '\x70', '\x8a', '\x18', '\xc1', '\x70', '\x8a', '\x6f', '\xde',
+ '\x9e', '\x1c', '\x00', '\x38', '\x6d', '\x96', '\x4f', '\xcc',
+ '\x26', '\x00', '\xd9', '\xcf', '\x47', '\xc2', '\xd9', '\xcb',
+ '\x08', '\xd1', '\xea', '\xab', '\x7f', '\x0d', '\x5a', '\x1c',
+ '\x00', '\x38', '\x70', '\x0a', '\x7f', '\x0d', '\x9a', '\x1c',
+ '\x00', '\x38', '\x70', '\x8a', '\x7f', '\x0d', '\xa4', '\x01',
+ '\x00', '\xb0', '\xeb', '\xbb', '\xc0', '\x1b', '\x7f', '\xb6',
+ '\xbe', '\x1f', '\xfc', '\xe1', '\x7e', '\xbe', '\x84', '\xe2',
+ '\xfe', '\x0b', '\x6f', '\x0e', '\x4a', '\x1c', '\x00', '\x38',
+ '\x0e', '\x01', '\x5d', '\x9e', '\x81', '\x93', '\xb4', '\xa0',
+ '\x7a', '\x86', '\x7d', '\x4a', '\x6f', '\x9e', '\x14', '\x1c',
+ '\x00', '\x38', '\x7f', '\x0d', '\xa4', '\x01', '\x00', '\xb0',
+ '\xe9', '\x9b', '\x6f', '\xde', '\x86', '\x1c', '\x00', '\x38',
+ '\x6d', '\xda', '\x7d', '\x67', '\x6f', '\x9e', '\x9a', '\x1c',
+ '\x00', '\x38', '\x69', '\x9a', '\x01', '\x92', '\xe9', '\xd6',
+ '\x8a', '\x20', '\x41', '\xa2', '\x41', '\x92', '\x7f', '\x0d',
+ '\x96', '\x1c', '\x00', '\x38', '\xc9', '\x9b', '\x6f', '\x9e',
+ '\x20', '\x00', '\x00', '\xb0', '\x69', '\x9a', '\xf0', '\x93',
+ '\x7f', '\x0d', '\xae', '\x1c', '\x00', '\x38', '\xe9', '\x9b',
+ '\x6f', '\xae', '\x92', '\x1c', '\x00', '\x38', '\x0c', '\x01',
+ '\x5b', '\xb8', '\x6a', '\xda', '\x2b', '\xd6', '\x84', '\xd2',
+ '\xea', '\xdb', '\x08', '\x01', '\x6c', '\x9e', '\x2b', '\x96',
+ '\x84', '\x92', '\xec', '\x9b', '\x60', '\xc6', '\x6f', '\xbe',
+ '\x00', '\x01', '\x00', '\x38', '\x6b', '\x9a', '\xad', '\x96',
+ '\x84', '\x92', '\xdf', '\x9c', '\xdb', '\x05', '\x0a', '\x90',
+ '\x0f', '\x05', '\x6b', '\x9a', '\x9a', '\x9a', '\x06', '\xe0',
+ '\x04', '\x92', '\x5f', '\x9e', '\xdc', '\x05', '\xdc', '\x9b',
+ '\x6f', '\xce', '\x4a', '\x1c', '\x00', '\x38', '\x5c', '\xda',
+ '\x5d', '\x94', '\x26', '\x92', '\xcf', '\x9c', '\x3f', '\x00',
+ '\x04', '\x90', '\x0f', '\x05', '\x5a', '\xd2', '\xdc', '\xdb',
+ '\x6f', '\xde', '\x9a', '\x1c', '\x00', '\x38', '\x6d', '\x9a',
+ '\x01', '\x92', '\xed', '\x9b', '\x3f', '\xbd', '\x30', '\x04',
+ '\x00', '\x38', '\x41', '\xa2', '\xbe', '\x0f', '\x3e', '\x0d',
+ '\x6f', '\x9e', '\x5a', '\x1c', '\x00', '\x38', '\x89', '\x0b',
+ '\x44', '\x20', '\x41', '\xc2', '\xc9', '\xcb', '\x6f', '\x9e',
+ '\x04', '\x00', '\x00', '\xb0', '\x69', '\x9a', '\x06', '\x93',
+ '\xc4', '\x92', '\x1e', '\x20', '\x0f', '\x05', '\x6f', '\x9e',
+ '\x24', '\x1c', '\x00', '\x38', '\x6f', '\xde', '\xdc', '\x00',
+ '\x00', '\x38', '\x6d', '\xda', '\xe9', '\xdf', '\x6f', '\xce',
+ '\xe0', '\x00', '\x00', '\x38', '\x5c', '\xca', '\x16', '\xe0',
+ '\xd9', '\xcb', '\x6f', '\xde', '\x24', '\x1c', '\x00', '\x38',
+ '\x6f', '\x9e', '\x72', '\x1c', '\x00', '\x38', '\x69', '\xce',
+ '\xed', '\xcf', '\x59', '\x9a', '\xdd', '\x9b', '\x6f', '\xde',
+ '\x24', '\x1c', '\x00', '\x38', '\x6f', '\x9e', '\x9a', '\x1c',
+ '\x00', '\x38', '\x69', '\x9a', '\x79', '\x67', '\x1a', '\xd1',
+ '\xe9', '\x9b', '\x42', '\x92', '\x79', '\x67', '\x1e', '\xd1',
+ '\xe9', '\x9b', '\x6f', '\x9e', '\x9e', '\x1c', '\x00', '\x38',
+ '\x47', '\xd2', '\x02', '\x91', '\xdd', '\xdb', '\x4f', '\xcc',
+ '\x26', '\x00', '\xd9', '\xcb', '\x3f', '\x0d', '\xb2', '\x04',
+ '\x00', '\x38', '\x6f', '\x9e', '\x9e', '\x1c', '\x00', '\x38',
+ '\x7f', '\x0d', '\xa0', '\x01', '\x00', '\xb0', '\xe9', '\x9b',
+ '\x41', '\x92', '\x7f', '\x0d', '\xd0', '\x01', '\x00', '\xb0',
+ '\xc9', '\x9b', '\x6f', '\x9e', '\xa0', '\x01', '\x00', '\xb0',
+ '\x69', '\x9a', '\xf7', '\x20', '\x0f', '\x05', '\x7f', '\xb6',
+ '\x0f', '\x05', '\x6f', '\x9e', '\x9e', '\x1c', '\x00', '\x38',
+ '\x6f', '\xce', '\x5c', '\x1c', '\x00', '\x38', '\x04', '\x91',
+ '\xec', '\xcb', '\x02', '\x91', '\x70', '\x4a', '\x8a', '\x0b',
+ '\x0c', '\x30', '\x7d', '\x86', '\x01', '\xd2', '\x4a', '\xd5',
+ '\x80', '\x0b', '\xf9', '\x20', '\x0f', '\x05', '\x7f', '\x0d',
+ '\x42', '\x1c', '\x00', '\x38', '\x70', '\x8a', '\x6f', '\x9e',
+ '\x5c', '\x1c', '\x00', '\x38', '\x47', '\xc2', '\x02', '\x91',
+ '\xdc', '\xcb', '\x08', '\x91', '\xea', '\xab', '\x01', '\xd2',
+ '\xd9', '\xdb', '\x3f', '\x0d', '\xb2', '\x04', '\x00', '\x38',
+ '\xfc', '\xe1', '\x7e', '\xbe', '\x84', '\xe2', '\xee', '\xab',
+ '\x6f', '\x9e', '\x9e', '\x1c', '\x00', '\x38', '\x6f', '\xde',
+ '\x5c', '\x1c', '\x00', '\x38', '\x04', '\x91', '\xed', '\xdb',
+ '\x02', '\x91', '\x70', '\x4a', '\x4b', '\xb6', '\x04', '\x20',
+ '\x46', '\x92', '\x45', '\x92', '\x79', '\x67', '\x7f', '\x0d',
+ '\x42', '\x1c', '\x00', '\x38', '\xe9', '\x9b', '\x79', '\x86',
+ '\x01', '\x92', '\xdf', '\x9c', '\x00', '\x40', '\xf9', '\x20',
+ '\x0f', '\x05', '\x6e', '\x9a', '\x79', '\x67', '\xee', '\x9b',
+ '\x6f', '\x9e', '\x5c', '\x1c', '\x00', '\x38', '\x47', '\xd2',
+ '\x02', '\x91', '\xdd', '\xdb', '\x08', '\x91', '\xee', '\xeb',
+ '\x44', '\xd2', '\xd9', '\xdb', '\x3f', '\xbd', '\xb2', '\x04',
+ '\x00', '\x38', '\x04', '\xe2', '\x3e', '\x0d', '\x00', '\x00',
+ '\xfc', '\xe1', '\x7e', '\xbe', '\x84', '\xe2', '\xfe', '\x0b',
+ '\x6f', '\x0e', '\xda', '\x04', '\x00', '\x38', '\x6f', '\xae',
+ '\xf4', '\x17', '\x00', '\x38', '\xb0', '\xb9', '\x6f', '\xae',
+ '\x46', '\x1c', '\x00', '\x38', '\x6a', '\xaa', '\x7a', '\x67',
+ '\x41', '\xb2', '\x3f', '\xbd', '\x20', '\x05', '\x00', '\x38',
+ '\x6f', '\xae', '\xc0', '\x1b', '\x00', '\x38', '\xb0', '\xb9',
+ '\x6f', '\x9e', '\xf0', '\x00', '\x00', '\x38', '\xef', '\x9e',
+ '\x06', '\x1c', '\x00', '\x38', '\x0e', '\x30', '\x70', '\x86',
+ '\x09', '\x0c', '\xef', '\x9e', '\x06', '\x1c', '\x00', '\x38',
+ '\xf7', '\x20', '\x0f', '\x05', '\x6f', '\xae', '\x06', '\x18',
+ '\x00', '\x38', '\x3f', '\xbd', '\xda', '\x04', '\x00', '\x38',
+ '\x60', '\xa6', '\x41', '\xb2', '\x3f', '\xbd', '\x20', '\x05',
+ '\x00', '\x38', '\x3f', '\xbd', '\xf6', '\x05', '\x00', '\x38',
+ '\x3f', '\x0d', '\x28', '\x01', '\x00', '\x38', '\xbe', '\x0f',
+ '\x3e', '\x0d', '\xff', '\xe0', '\x0f', '\x05', '\xfc', '\xe1',
+ '\x7e', '\xbe', '\x84', '\xe2', '\xfe', '\x0b', '\x6f', '\x0e',
+ '\xda', '\x04', '\x00', '\x38', '\x6f', '\xae', '\x22', '\x18',
+ '\x00', '\x38', '\xb0', '\xb9', '\x3f', '\xbd', '\x30', '\x04',
+ '\x00', '\x38', '\x6f', '\xae', '\x00', '\x1f', '\x00', '\x38',
+ '\x5f', '\xbc', '\xec', '\x01', '\x3f', '\xbd', '\x74', '\x09',
+ '\x00', '\x38', '\x6f', '\xae', '\x3c', '\x18', '\x00', '\x38',
+ '\xb0', '\xb9', '\x3f', '\xbd', '\x3a', '\x06', '\x00', '\x38',
+ '\xbe', '\x0f', '\x3e', '\xbe', '\x3f', '\x0d', '\xf2', '\x05',
+ '\x00', '\x38', '\xfc', '\xe1', '\x7e', '\xbe', '\x98', '\xe2',
+ '\xfe', '\x4b', '\x6f', '\xde', '\x00', '\x1f', '\x00', '\x38',
+ '\x6d', '\x9a', '\x79', '\x67', '\xed', '\x9f', '\xef', '\xde',
+ '\xec', '\x20', '\x00', '\x38', '\xf3', '\x20', '\x0f', '\x05',
+ '\x6f', '\x3e', '\x00', '\x1f', '\x00', '\x38', '\xa3', '\x0b',
+ '\xff', '\x3d', '\xfe', '\x02', '\x0f', '\x05', '\x63', '\x9a',
+ '\x81', '\x92', '\xcf', '\x9d', '\x0b', '\x00', '\x5f', '\x95',
+ '\x3f', '\xf8', '\x54', '\x02', '\x22', '\x01', '\x18', '\x00',
+ '\x62', '\x00', '\x90', '\x00', '\x96', '\x01', '\xc8', '\x01',
+ '\xe4', '\x00', '\x00', '\x02', '\xb8', '\x00', '\x9a', '\x02',
+ '\xce', '\x02', '\x6f', '\xae', '\x4e', '\x18', '\x00', '\x38',
+ '\x3f', '\xbd', '\xda', '\x04', '\x00', '\x38', '\x6f', '\x0e',
+ '\x20', '\x05', '\x00', '\x38', '\x04', '\x31', '\x62', '\xae',
+ '\x41', '\xb2', '\xb0', '\xb9', '\x08', '\x31', '\x61', '\xae',
+ '\x41', '\xb2', '\xb0', '\xb9', '\x6f', '\x0e', '\x9a', '\x1c',
+ '\x00', '\x38', '\x60', '\x9a', '\x81', '\x92', '\xe0', '\x9b',
+ '\x3f', '\xbd', '\x30', '\x04', '\x00', '\x38', '\x60', '\x9a',
+ '\x01', '\x92', '\xe0', '\x9b', '\x62', '\xaa', '\x61', '\xba',
+ '\x3f', '\xbd', '\x74', '\x09', '\x00', '\x38', '\xff', '\xed',
+ '\x88', '\x02', '\x0c', '\x32', '\x6f', '\xae', '\x5c', '\x18',
+ '\x00', '\x38', '\x3f', '\xbd', '\xda', '\x04', '\x00', '\x38',
+ '\x6f', '\x0e', '\x20', '\x05', '\x00', '\x38', '\x04', '\x31',
+ '\x62', '\xae', '\x41', '\xb2', '\xb0', '\xb9', '\x08', '\x31',
+ '\x61', '\xae', '\x41', '\xb2', '\xb0', '\xb9', '\x61', '\x1a',
+ '\x72', '\x09', '\xe1', '\x1b', '\xff', '\xed', '\x5a', '\x02',
+ '\x0c', '\x32', '\x6f', '\xae', '\x6c', '\x18', '\x00', '\x38',
+ '\x3f', '\xbd', '\xda', '\x04', '\x00', '\x38', '\x6f', '\x1e',
+ '\x20', '\x05', '\x00', '\x38', '\x04', '\x31', '\x60', '\xae',
+ '\x41', '\xb2', '\xb1', '\xb9', '\x60', '\xaa', '\x6a', '\xaa',
+ '\x41', '\xb2', '\xb1', '\xb9', '\xff', '\xed', '\x32', '\x02',
+ '\x08', '\x32', '\x6f', '\xae', '\x7c', '\x18', '\x00', '\x38',
+ '\x3f', '\xbd', '\xda', '\x04', '\x00', '\x38', '\x04', '\x31',
+ '\x60', '\xae', '\x41', '\xb2', '\x3f', '\xbd', '\x20', '\x05',
+ '\x00', '\x38', '\x60', '\xaa', '\xff', '\x3d', '\xc0', '\x01',
+ '\x0f', '\x05', '\x81', '\xa2', '\xfd', '\x20', '\x0f', '\x05',
+ '\xff', '\xed', '\x06', '\x02', '\x08', '\x32', '\x6f', '\x4e',
+ '\xda', '\x04', '\x00', '\x38', '\x6f', '\xae', '\x8a', '\x18',
+ '\x00', '\x38', '\xb4', '\xb9', '\x6f', '\x0e', '\x20', '\x05',
+ '\x00', '\x38', '\x04', '\x31', '\x62', '\xae', '\x41', '\xb2',
+ '\xb0', '\xb9', '\x08', '\x31', '\x61', '\xae', '\x41', '\xb2',
+ '\xb0', '\xb9', '\x62', '\x2a', '\x62', '\x2a', '\xe1', '\x2a',
+ '\xff', '\x3d', '\xb8', '\x01', '\x0f', '\x05', '\x6f', '\xae',
+ '\x98', '\x18', '\x00', '\x38', '\xb4', '\xb9', '\xff', '\xed',
+ '\xd0', '\x01', '\x0f', '\x05', '\x6f', '\x4e', '\xda', '\x04',
+ '\x00', '\x38', '\x6f', '\xae', '\xa8', '\x18', '\x00', '\x38',
+ '\xb4', '\xb9', '\x6f', '\x2e', '\x20', '\x05', '\x00', '\x38',
+ '\x04', '\x31', '\x61', '\xae', '\x41', '\xb2', '\xb2', '\xb9',
+ '\x08', '\x31', '\x60', '\xae', '\x41', '\xb2', '\xb2', '\xb9',
+ '\x61', '\xaa', '\x60', '\xba', '\x6e', '\xc6', '\x14', '\xc2',
+ '\x3f', '\xbd', '\x72', '\x0a', '\x00', '\x38', '\x6a', '\xa6',
+ '\x30', '\x20', '\x0f', '\x05', '\x6f', '\xae', '\xb4', '\x18',
+ '\x00', '\x38', '\xb4', '\xb9', '\x14', '\xe1', '\x6a', '\xaa',
+ '\x41', '\xb2', '\xb2', '\xb9', '\x14', '\xe1', '\x6a', '\xaa',
+ '\x6a', '\xb6', '\x0f', '\xbc', '\x40', '\x00', '\x8f', '\xac',
+ '\x40', '\x00', '\x3c', '\xa3', '\x3c', '\xb3', '\x3f', '\xbd',
+ '\x1a', '\x0b', '\x00', '\x38', '\xff', '\xed', '\x6a', '\x01',
+ '\x0f', '\x05', '\x6f', '\xae', '\xd0', '\x18', '\x00', '\x38',
+ '\xb4', '\xb9', '\xff', '\xed', '\x54', '\x01', '\x0c', '\x32',
+ '\x6f', '\xae', '\xe6', '\x18', '\x00', '\x38', '\x3f', '\xbd',
+ '\xda', '\x04', '\x00', '\x38', '\x6f', '\x0e', '\x20', '\x05',
+ '\x00', '\x38', '\x04', '\x31', '\x62', '\xae', '\x41', '\xb2',
+ '\xb0', '\xb9', '\x08', '\x31', '\x61', '\xae', '\x41', '\xb2',
+ '\xb0', '\xb9', '\x62', '\xaa', '\x61', '\xba', '\x3f', '\xbd',
+ '\x1a', '\x0b', '\x00', '\x38', '\xff', '\xed', '\x22', '\x01',
+ '\x0c', '\x32', '\x6f', '\xae', '\xf2', '\x18', '\x00', '\x38',
+ '\x3f', '\xbd', '\xda', '\x04', '\x00', '\x38', '\x6f', '\x0e',
+ '\x20', '\x05', '\x00', '\x38', '\x04', '\x31', '\x62', '\xae',
+ '\x41', '\xb2', '\xb0', '\xb9', '\x08', '\x31', '\x61', '\xae',
+ '\x41', '\xb2', '\xb0', '\xb9', '\x62', '\xaa', '\xe1', '\xaa',
+ '\xda', '\x90', '\x0f', '\x05', '\x7a', '\x0e', '\x08', '\x31',
+ '\xea', '\xaa', '\xf9', '\x80', '\x0f', '\x05', '\xea', '\xe0',
+ '\x0c', '\x32', '\x6f', '\xae', '\xfe', '\x18', '\x00', '\x38',
+ '\x3f', '\xbd', '\xda', '\x04', '\x00', '\x38', '\x6f', '\x0e',
+ '\x20', '\x05', '\x00', '\x38', '\x04', '\x31', '\x61', '\xae',
+ '\x41', '\xb2', '\xb0', '\xb9', '\x08', '\x31', '\x64', '\xae',
+ '\x41', '\xb2', '\xb0', '\xb9', '\x0c', '\x31', '\x62', '\xae',
+ '\x41', '\xb2', '\xb0', '\xb9', '\x6f', '\x0e', '\xba', '\x14',
+ '\x00', '\x38', '\x61', '\xaa', '\x64', '\xba', '\x62', '\xca',
+ '\xb0', '\xb9', '\x6a', '\xa6', '\xac', '\x30', '\x10', '\x32',
+ '\xc3', '\xa2', '\xae', '\x20', '\x7a', '\x86', '\x62', '\xca',
+ '\xef', '\xcd', '\x00', '\x00', '\x01', '\x00', '\x64', '\xba',
+ '\xb0', '\xb9', '\x9e', '\xe0', '\x0f', '\x05', '\x6f', '\xde',
+ '\x24', '\x1c', '\x00', '\x38', '\x6d', '\x9a', '\x7f', '\x0d',
+ '\xc0', '\x01', '\x00', '\xb0', '\xe9', '\x9b', '\x04', '\xd1',
+ '\x59', '\x98', '\x7f', '\x0d', '\xc4', '\x01', '\x00', '\xb0',
+ '\xe9', '\x9b', '\x6f', '\x1e', '\xda', '\x04', '\x00', '\x38',
+ '\x6f', '\xae', '\x06', '\x19', '\x00', '\x38', '\xb1', '\xb9',
+ '\x04', '\x31', '\x60', '\xae', '\x41', '\xb2', '\x3f', '\xbd',
+ '\x20', '\x05', '\x00', '\x38', '\x6f', '\xae', '\x0e', '\x19',
+ '\x00', '\x38', '\xb1', '\xb9', '\x60', '\x9a', '\xb9', '\x09',
+ '\x50', '\xe0', '\x08', '\x32', '\x6f', '\xae', '\x82', '\x18',
+ '\x00', '\x38', '\x3f', '\xbd', '\xda', '\x04', '\x00', '\x38',
+ '\x6f', '\x0e', '\x20', '\x05', '\x00', '\x38', '\x04', '\x31',
+ '\x61', '\xae', '\x41', '\xb2', '\xb0', '\xb9', '\x08', '\x31',
+ '\x62', '\xae', '\x41', '\xb2', '\xb0', '\xb9', '\x61', '\x1a',
+ '\x61', '\x9a', '\x08', '\x30', '\x81', '\x92', '\xe1', '\x9b',
+ '\x20', '\xe0', '\x62', '\x3a', '\x1c', '\xe0', '\x0c', '\x32',
+ '\x6f', '\xae', '\x14', '\x19', '\x00', '\x38', '\x3f', '\xbd',
+ '\xda', '\x04', '\x00', '\x38', '\x63', '\xaa', '\x41', '\xb2',
+ '\x3f', '\xbd', '\x20', '\x05', '\x00', '\x38', '\x0a', '\xe0',
+ '\x0f', '\x05', '\xa3', '\x0b', '\xff', '\x2d', '\x06', '\xfd',
+ '\x0f', '\x05', '\x6f', '\xae', '\x0e', '\x19', '\x00', '\x38',
+ '\x3f', '\xbd', '\xda', '\x04', '\x00', '\x38', '\xbe', '\x4f',
+ '\x04', '\xe2', '\x3e', '\x0d', '\xfc', '\xe1', '\x7e', '\xbe',
+ '\x8c', '\xe2', '\xfe', '\x2b', '\x6a', '\x26', '\x6b', '\x06',
+ '\x7f', '\x0d', '\x92', '\x1c', '\x00', '\x38', '\x70', '\x8a',
+ '\x7f', '\x0d', '\x04', '\x01', '\x00', '\x38', '\xea', '\xab',
+ '\x6f', '\x9e', '\x96', '\x1c', '\x00', '\x38', '\x49', '\x9a',
+ '\xcf', '\x9e', '\x01', '\x00', '\x86', '\x20', '\x0f', '\x05',
+ '\x6f', '\xde', '\x4a', '\x1c', '\x00', '\x38', '\x08', '\xd1',
+ '\xea', '\xab', '\x7f', '\x0d', '\x00', '\x01', '\x00', '\x38',
+ '\xeb', '\xbb', '\x6b', '\x96', '\x04', '\x92', '\xdf', '\x9d',
+ '\xdc', '\x05', '\xdd', '\x9b', '\x6f', '\x9e', '\xa4', '\x01',
+ '\x00', '\xb0', '\x69', '\xda', '\x6f', '\xde', '\x14', '\x1c',
+ '\x00', '\x38', '\xe9', '\xdb', '\x6f', '\xde', '\xd4', '\x01',
+ '\x00', '\xb0', '\x4d', '\x9a', '\x38', '\x93', '\x44', '\x93',
+ '\xcd', '\x9b', '\x6f', '\xde', '\xd4', '\x01', '\x00', '\xb0',
+ '\x4d', '\x9a', '\x07', '\x93', '\xcf', '\x9e', '\x04', '\x00',
+ '\xf7', '\x30', '\x0f', '\x05', '\x4d', '\x9a', '\x38', '\x93',
+ '\x41', '\x93', '\xcd', '\x9b', '\x3f', '\xbd', '\xcc', '\x01',
+ '\x00', '\x38', '\x6a', '\xa6', '\xf7', '\x30', '\x0f', '\x05',
+ '\x6f', '\xce', '\x92', '\x1c', '\x00', '\x38', '\xec', '\x0a',
+ '\x10', '\x80', '\x0f', '\x05', '\x6f', '\xde', '\xd4', '\x01',
+ '\x00', '\xb0', '\x4d', '\x9a', '\x38', '\x93', '\x41', '\x93',
+ '\xcd', '\x9b', '\xec', '\x0a', '\xd7', '\x90', '\x71', '\x86',
+ '\x22', '\xe0', '\x62', '\x96', '\x7f', '\x0d', '\x92', '\x1c',
+ '\x00', '\x38', '\xeb', '\xba', '\x14', '\x80', '\x71', '\x86',
+ '\x3f', '\xbd', '\xcc', '\x01', '\x00', '\x38', '\x7f', '\x0d',
+ '\x92', '\x1c', '\x00', '\x38', '\xe0', '\x0a', '\xf1', '\x90',
+ '\x71', '\x86', '\x62', '\x96', '\x20', '\x96', '\xe9', '\x26',
+ '\x0e', '\x30', '\x62', '\xd6', '\x0d', '\x1c', '\x62', '\x96',
+ '\x20', '\x96', '\xe9', '\xd6', '\xf7', '\x20', '\x0f', '\x05',
+ '\x6f', '\xae', '\x28', '\x19', '\x00', '\x38', '\x3f', '\xbd',
+ '\xda', '\x04', '\x00', '\x38', '\x61', '\xa6', '\x41', '\xb2',
+ '\xbe', '\x2f', '\x3e', '\xbe', '\x3f', '\x0d', '\x20', '\x05',
+ '\x00', '\x38', '\xfc', '\xe1', '\x7e', '\xbe', '\x8c', '\xe2',
+ '\xfe', '\x2b', '\x6b', '\x06', '\x6c', '\x26', '\xeb', '\xa6',
+ '\x40', '\x00', '\x6a', '\xc6', '\xe0', '\xc6', '\x32', '\x00',
+ '\x71', '\x86', '\x6c', '\xb6', '\x6c', '\x96', '\x79', '\x87',
+ '\x61', '\xd6', '\xc3', '\xd3', '\xed', '\x97', '\x49', '\xd6',
+ '\xcb', '\x9b', '\x4b', '\x9a', '\xcd', '\x96', '\x0c', '\x30',
+ '\x7d', '\x87', '\x6f', '\xae', '\x3e', '\x19', '\x00', '\x38',
+ '\x40', '\xe0', '\xe2', '\xbb', '\xcb', '\xdf', '\x01', '\x12',
+ '\xc4', '\x12', '\x06', '\x30', '\xe0', '\xb6', '\xd7', '\x10',
+ '\x6c', '\x96', '\x04', '\xc2', '\xe0', '\xc6', '\xc5', '\x10',
+ '\x0f', '\x05', '\xe0', '\xa6', '\x4e', '\x00', '\x6a', '\xc6',
+ '\xe0', '\xc6', '\x40', '\x00', '\x71', '\x86', '\x6c', '\xa6',
+ '\x61', '\x96', '\xc3', '\x93', '\x6c', '\xd6', '\xe9', '\xd7',
+ '\x4a', '\x9a', '\xcd', '\x96', '\x22', '\x30', '\x01', '\x12',
+ '\x81', '\x12', '\xe2', '\xab', '\x6f', '\xae', '\x5c', '\x19',
+ '\x00', '\x38', '\x3f', '\xbd', '\xda', '\x04', '\x00', '\x38',
+ '\x62', '\xaa', '\x41', '\xb2', '\x3f', '\xbd', '\x20', '\x05',
+ '\x00', '\x38', '\x7a', '\x86', '\xbe', '\x2f', '\x3e', '\x0d',
+ '\xc4', '\x12', '\x08', '\x30', '\x01', '\xa2', '\xe0', '\xa6',
+ '\xc9', '\x10', '\x61', '\x96', '\x04', '\xc2', '\xe0', '\xc6',
+ '\xb7', '\x10', '\x0f', '\x05', '\x41', '\xa2', '\xbe', '\x2f',
+ '\x3e', '\x0d', '\xfc', '\xe1', '\x7e', '\xbe', '\x94', '\xe2',
+ '\xfe', '\x4b', '\x6b', '\x26', '\xeb', '\xa6', '\x5a', '\x90',
+ '\x6a', '\x06', '\x60', '\xa6', '\x7b', '\x86', '\x3f', '\xbd',
+ '\x20', '\x05', '\x00', '\x38', '\x6f', '\xae', '\x7a', '\x19',
+ '\x00', '\x38', '\x3f', '\xbd', '\xda', '\x04', '\x00', '\x38',
+ '\xe2', '\x06', '\x2a', '\x90', '\x74', '\x86', '\x60', '\x16',
+ '\x60', '\x36', '\x6f', '\xae', '\xd0', '\x19', '\x00', '\x38',
+ '\x3f', '\xbd', '\xda', '\x04', '\x00', '\x38', '\x63', '\xae',
+ '\x7b', '\x86', '\x3f', '\xbd', '\x20', '\x05', '\x00', '\x38',
+ '\x01', '\x42', '\xc4', '\x42', '\x08', '\x30', '\x04', '\x12',
+ '\xe2', '\x16', '\xdf', '\x80', '\x0f', '\x05', '\x6f', '\xae',
+ '\x38', '\x18', '\x00', '\x38', '\x3f', '\xbd', '\xda', '\x04',
+ '\x00', '\x38', '\x10', '\x02', '\xe2', '\x06', '\xad', '\x80',
+ '\x60', '\xa6', '\xbe', '\x4f', '\x3e', '\x0d', '\x00', '\x00',
+ '\x05', '\xa1', '\x49', '\x98', '\xc2', '\x92', '\x0a', '\x30',
+ '\xc4', '\x92', '\x0e', '\x30', '\x0f', '\x05', '\x7f', '\xb6',
+ '\x7a', '\x86', '\x6a', '\xb9', '\x5a', '\xa8', '\x7f', '\xb6',
+ '\x0f', '\x05', '\x6a', '\xb9', '\x6a', '\xaa', '\x7f', '\xb6',
+ '\x0f', '\x05', '\x6a', '\xd6', '\x05', '\xa1', '\x4a', '\xaa',
+ '\x4a', '\x94', '\xc2', '\x92', '\x0a', '\x30', '\xc4', '\x92',
+ '\x10', '\x30', '\x0f', '\x05', '\x7f', '\xb6', '\x7a', '\x86',
+ '\x5c', '\xca', '\x6d', '\xb9', '\xdc', '\xcb', '\x7f', '\xb6',
+ '\x4a', '\xa4', '\x6c', '\xca', '\x6d', '\xb9', '\xec', '\xcb',
+ '\x4a', '\xa4', '\x7f', '\xb6', '\x0f', '\x05', '\xfc', '\xe1',
+ '\x7e', '\xbe', '\x84', '\xe2', '\xee', '\xbb', '\x04', '\xa1',
+ '\x49', '\x9a', '\xcf', '\x9e', '\x01', '\x00', '\x06', '\x20',
+ '\x0f', '\x05', '\x24', '\xe0', '\xc1', '\xc3', '\xcf', '\x9e',
+ '\x02', '\x00', '\x0c', '\x20', '\x6b', '\x96', '\xd0', '\x93',
+ '\x69', '\xb7', '\xee', '\xbb', '\x12', '\xe0', '\xc2', '\xc3',
+ '\x6f', '\xae', '\xa6', '\x19', '\x00', '\x38', '\x3f', '\xbd',
+ '\xda', '\x04', '\x00', '\x38', '\x0c', '\xe0', '\x0f', '\x05',
+ '\x6c', '\xb6', '\x6e', '\xc6', '\x3f', '\xbd', '\xaa', '\x0b',
+ '\x00', '\x38', '\x04', '\xe2', '\x3e', '\x0d', '\xfc', '\xe1',
+ '\x7e', '\xbe', '\x84', '\xe2', '\xfe', '\x0b', '\x6a', '\x06',
+ '\x4f', '\xbc', '\xaa', '\x00', '\x5f', '\xcc', '\x55', '\x05',
+ '\x3f', '\xbd', '\xd6', '\x0b', '\x00', '\x38', '\x60', '\xa6',
+ '\x4f', '\xbc', '\x55', '\x00', '\x5f', '\xcc', '\xaa', '\x02',
+ '\xbe', '\x0f', '\x3e', '\xbe', '\x3f', '\x0d', '\xd6', '\x0b',
+ '\x00', '\x38', '\xfc', '\xe1', '\x7e', '\xbe', '\x90', '\xe2',
+ '\xfe', '\x3b', '\x6a', '\x26', '\x04', '\xa1', '\x49', '\x9a',
+ '\xcf', '\x9e', '\x02', '\x00', '\x42', '\x20', '\x6b', '\x36',
+ '\x6f', '\x0e', '\x88', '\x0b', '\x00', '\x38', '\xb0', '\xb9',
+ '\x6a', '\x16', '\x62', '\xa6', '\x63', '\xb6', '\xb0', '\xb9',
+ '\x61', '\xd6', '\xf0', '\xd3', '\x1f', '\xdf', '\x40', '\x00',
+ '\x6a', '\x96', '\xf0', '\x93', '\x1f', '\x9f', '\x40', '\x00',
+ '\xe9', '\xd6', '\x14', '\x20', '\x7c', '\x86', '\x2f', '\x1f',
+ '\x40', '\x00', '\x00', '\x00', '\x2f', '\xaf', '\x40', '\x00',
+ '\x00', '\x00', '\xea', '\x16', '\x04', '\x30', '\x0f', '\x05',
+ '\x41', '\xc2', '\x6c', '\xa6', '\xbe', '\x3f', '\x3e', '\x0d',
+ '\x6f', '\x1e', '\x88', '\x0b', '\x00', '\x38', '\xb1', '\xb9',
+ '\x4a', '\x04', '\x0f', '\x0f', '\x40', '\x00', '\x62', '\xa6',
+ '\x63', '\xb6', '\xb1', '\xb9', '\x2f', '\xaf', '\x40', '\x00',
+ '\x00', '\x00', '\xea', '\x06', '\x3a', '\x25', '\xbe', '\x3f',
+ '\x3e', '\x0d', '\xfc', '\xe1', '\x7e', '\xbe', '\xa8', '\xe2',
+ '\xfe', '\x8b', '\x6a', '\x36', '\x04', '\xa1', '\x44', '\x9e',
+ '\xcf', '\x9e', '\x02', '\x00', '\x04', '\x20', '\x41', '\x72',
+ '\x42', '\x72', '\x6f', '\x2e', '\xd6', '\x0b', '\x00', '\x38',
+ '\x4f', '\xbc', '\x98', '\x00', '\x4f', '\xcc', '\x55', '\x00',
+ '\xb2', '\xb9', '\x50', '\xb2', '\xe7', '\xb4', '\x6f', '\x1e',
+ '\x88', '\x0b', '\x00', '\x38', '\x63', '\xa6', '\xb1', '\xb9',
+ '\xcf', '\xae', '\x51', '\x00', '\xff', '\x2d', '\x9c', '\x01',
+ '\x63', '\xa6', '\x51', '\xb2', '\xe7', '\xb4', '\xb1', '\xb9',
+ '\xcf', '\xae', '\x52', '\x00', '\xff', '\x2d', '\x8c', '\x01',
+ '\x63', '\xa6', '\x52', '\xb2', '\xe7', '\xb4', '\xb1', '\xb9',
+ '\xcf', '\xae', '\x59', '\x00', '\xff', '\x2d', '\x7c', '\x01',
+ '\x63', '\xa6', '\x24', '\xe1', '\x70', '\x8a', '\x6f', '\xae',
+ '\xc0', '\x19', '\x00', '\x38', '\x3f', '\xbd', '\xda', '\x04',
+ '\x00', '\x38', '\x63', '\xaa', '\x41', '\xb2', '\x3f', '\xbd',
+ '\x20', '\x05', '\x00', '\x38', '\x4f', '\xbc', '\x27', '\x00',
+ '\xe7', '\xb4', '\x63', '\xa6', '\xb1', '\xb9', '\x41', '\x92',
+ '\xea', '\x94', '\x06', '\x32', '\xe3', '\x9b', '\x86', '\x32',
+ '\x4f', '\xbc', '\x2c', '\x00', '\xe7', '\xb4', '\x63', '\xa6',
+ '\xb1', '\xb9', '\x6a', '\x86', '\x55', '\xb2', '\xe7', '\xb4',
+ '\x63', '\xa6', '\xb1', '\xb9', '\x6a', '\x06', '\x6a', '\xb6',
+ '\x04', '\xb2', '\xe7', '\xb4', '\x63', '\xa6', '\xb1', '\xb9',
+ '\xcf', '\xae', '\x30', '\x00', '\x3e', '\x20', '\x63', '\xa6',
+ '\x4f', '\xbc', '\xf0', '\x00', '\x5f', '\xcc', '\x55', '\x05',
+ '\xb2', '\xb9', '\x63', '\xa6', '\x3f', '\xbd', '\x1e', '\x0c',
+ '\x00', '\x38', '\x63', '\xa6', '\x4f', '\xbc', '\x90', '\x00',
+ '\x5f', '\xcc', '\x55', '\x05', '\xb2', '\xb9', '\x44', '\xb8',
+ '\x2b', '\xb6', '\x63', '\xa6', '\xb1', '\xb9', '\x4a', '\x54',
+ '\x0f', '\x5f', '\x80', '\xff', '\x63', '\xa6', '\x4f', '\xbc',
+ '\x98', '\x00', '\x4f', '\xcc', '\x55', '\x00', '\xb2', '\xb9',
+ '\x10', '\xe0', '\x0f', '\x05', '\x0f', '\x02', '\xe7', '\x04',
+ '\x60', '\xb6', '\xb1', '\xb9', '\xcf', '\xae', '\x03', '\x00',
+ '\x35', '\x35', '\x0a', '\x31', '\xd8', '\x8b', '\xc8', '\x82',
+ '\x12', '\xd0', '\x68', '\x46', '\x6f', '\xae', '\xd2', '\x19',
+ '\x00', '\x38', '\x3f', '\xbd', '\xda', '\x04', '\x00', '\x38',
+ '\xd2', '\xe0', '\x7a', '\x86', '\x65', '\x56', '\x94', '\x20',
+ '\x81', '\x42', '\x90', '\xe0', '\x74', '\x86', '\xc2', '\x03',
+ '\x60', '\xb6', '\x2f', '\xb2', '\xe7', '\xb4', '\x6f', '\x1e',
+ '\x88', '\x0b', '\x00', '\x38', '\x63', '\xa6', '\xb1', '\xb9',
+ '\x6a', '\x66', '\x60', '\xb6', '\x30', '\xb2', '\xe7', '\xb4',
+ '\x63', '\xa6', '\xb1', '\xb9', '\xc8', '\xa3', '\x6a', '\x67',
+ '\xc8', '\x63', '\x60', '\xb6', '\x2d', '\xb2', '\xe7', '\xb4',
+ '\x63', '\xa6', '\xb1', '\xb9', '\x6a', '\x26', '\x2e', '\x02',
+ '\xe7', '\x04', '\x63', '\xa6', '\x60', '\xb6', '\xb1', '\xb9',
+ '\xc8', '\xa3', '\x6a', '\x27', '\x65', '\x56', '\x0a', '\x30',
+ '\x01', '\x22', '\x68', '\x96', '\xa4', '\x96', '\x04', '\xe0',
+ '\x81', '\x92', '\x64', '\x96', '\x19', '\x95', '\x63', '\xd6',
+ '\x2d', '\x95', '\x6d', '\x96', '\x24', '\xe1', '\x6d', '\xda',
+ '\x0c', '\x91', '\xed', '\xdb', '\x10', '\x91', '\xe6', '\x6b',
+ '\x14', '\x91', '\xe2', '\x2b', '\x62', '\x26', '\x10', '\xd0',
+ '\x0f', '\x05', '\x24', '\xe1', '\x29', '\x6a', '\x24', '\xe1',
+ '\xe9', '\x9b', '\x81', '\x22', '\xf5', '\x20', '\x0f', '\x05',
+ '\x24', '\xe1', '\x6d', '\xda', '\x06', '\x31', '\xed', '\xda',
+ '\x1e', '\x30', '\x65', '\x56', '\x06', '\x30', '\x01', '\x42',
+ '\x81', '\x42', '\x81', '\x42', '\x65', '\x56', '\x0c', '\x30',
+ '\xe8', '\x46', '\x64', '\x46', '\x69', '\xa0', '\x64', '\x06',
+ '\x08', '\xe0', '\x63', '\xa6', '\x61', '\xb0', '\x64', '\x06',
+ '\x63', '\xa6', '\x4f', '\xbc', '\xf0', '\x00', '\x5f', '\xcc',
+ '\x55', '\x05', '\x3f', '\xbd', '\xd6', '\x0b', '\x00', '\x38',
+ '\x12', '\xe0', '\x41', '\xa2', '\x4f', '\xbc', '\xf0', '\x00',
+ '\x5f', '\xcc', '\x55', '\x05', '\x3f', '\xbd', '\xd6', '\x0b',
+ '\x00', '\x38', '\x7a', '\x86', '\xbe', '\x8f', '\x04', '\xe2',
+ '\x3e', '\x0d', '\xfc', '\xe1', '\x7e', '\xbe', '\x90', '\xe2',
+ '\xfe', '\x3b', '\x06', '\xa1', '\xa0', '\x0b', '\xff', '\x2d',
+ '\x16', '\x04', '\x6a', '\x26', '\x3f', '\xbd', '\xc2', '\x0c',
+ '\x00', '\x38', '\x6a', '\xa6', '\xff', '\x2d', '\x86', '\x03',
+ '\x41', '\xa2', '\x62', '\xa6', '\x3f', '\xbd', '\x1e', '\x0c',
+ '\x00', '\x38', '\x62', '\xa6', '\x4f', '\xbc', '\x90', '\x00',
+ '\x5f', '\xcc', '\x55', '\x05', '\x3f', '\xbd', '\xd6', '\x0b',
+ '\x00', '\x38', '\x6f', '\x1e', '\x88', '\x0b', '\x00', '\x38',
+ '\x62', '\xa6', '\x7b', '\x86', '\xb1', '\xb9', '\x6a', '\x36',
+ '\x04', '\x21', '\x40', '\xbe', '\x4b', '\xb4', '\x2b', '\xb6',
+ '\x62', '\xa6', '\xb1', '\xb9', '\x42', '\x92', '\xc0', '\x9a',
+ '\x1c', '\x20', '\x63', '\xc6', '\xf0', '\xc3', '\x53', '\x94',
+ '\xe9', '\xc6', '\x14', '\x20', '\x63', '\x06', '\x6a', '\xd6',
+ '\xf0', '\xd3', '\x5a', '\x94', '\xe9', '\xd6', '\x0a', '\x20',
+ '\xd0', '\x03', '\x6c', '\x36', '\x6d', '\xa6', '\x63', '\x06',
+ '\xd0', '\x03', '\x6a', '\x07', '\x62', '\xa6', '\x4f', '\xbc',
+ '\xf0', '\x00', '\x5f', '\xcc', '\x55', '\x05', '\x3f', '\xbd',
+ '\xd6', '\x0b', '\x00', '\x38', '\xef', '\x0e', '\xc0', '\x00',
+ '\x1f', '\x00', '\xff', '\x3d', '\x48', '\x02', '\x0f', '\x05',
+ '\x60', '\x90', '\x0f', '\x05', '\xef', '\x0e', '\xc4', '\x22',
+ '\x01', '\x00', '\xb0', '\x30', '\x0f', '\x05', '\x20', '\x90',
+ '\x0f', '\x05', '\xef', '\x0e', '\x58', '\x22', '\x01', '\x00',
+ '\xff', '\x3d', '\x5a', '\x01', '\x0f', '\x05', '\xef', '\x0e',
+ '\x5b', '\x22', '\x01', '\x00', '\xff', '\x3d', '\x4e', '\x01',
+ '\x0f', '\x05', '\xff', '\xed', '\xb6', '\x02', '\x0f', '\x05',
+ '\xef', '\x0e', '\xda', '\x22', '\x01', '\x00', '\xff', '\x3d',
+ '\x9c', '\x01', '\x0f', '\x05', '\x14', '\x90', '\x0f', '\x05',
+ '\xef', '\x0e', '\xd6', '\x22', '\x01', '\x00', '\xff', '\x3d',
+ '\x8c', '\x01', '\x0f', '\x05', '\xff', '\xed', '\x94', '\x02',
+ '\x0f', '\x05', '\xef', '\x0e', '\x49', '\x22', '\x04', '\x00',
+ '\xc4', '\x30', '\x0f', '\x05', '\xff', '\xed', '\x84', '\x02',
+ '\x0f', '\x05', '\xef', '\x0e', '\xd7', '\x00', '\x20', '\x00',
+ '\xff', '\x3d', '\x6a', '\x01', '\x0f', '\x05', '\x20', '\x90',
+ '\x0f', '\x05', '\xef', '\x0e', '\xc2', '\x00', '\x1f', '\x00',
+ '\xff', '\x3d', '\x00', '\x02', '\x0f', '\x05', '\xef', '\x0e',
+ '\xc9', '\x00', '\x1f', '\x00', '\xff', '\x3d', '\x18', '\x02',
+ '\x0f', '\x05', '\xff', '\xed', '\x56', '\x02', '\x0f', '\x05',
+ '\xef', '\x0e', '\x4f', '\x00', '\x98', '\x00', '\xff', '\x3d',
+ '\x3c', '\x01', '\x0f', '\x05', '\x12', '\x90', '\x0f', '\x05',
+ '\xef', '\x0e', '\x43', '\x00', '\x98', '\x00', '\x76', '\x30',
+ '\x0f', '\x05', '\xff', '\xed', '\x36', '\x02', '\x0f', '\x05',
+ '\xef', '\x0e', '\xc2', '\x00', '\x98', '\x00', '\xff', '\x2d',
+ '\x2a', '\x02', '\x0f', '\x05', '\x6f', '\x1e', '\xb6', '\x1a',
+ '\x00', '\x38', '\x61', '\x1a', '\x6f', '\xde', '\x00', '\x00',
+ '\x20', '\x00', '\x06', '\x21', '\xed', '\xdb', '\x0c', '\x21',
+ '\x70', '\x8a', '\x6f', '\x9e', '\x00', '\x00', '\x01', '\x00',
+ '\x10', '\x21', '\xe9', '\x9b', '\x5f', '\xd2', '\x14', '\x21',
+ '\xed', '\xdb', '\x6f', '\x9e', '\x00', '\x00', '\x1f', '\x00',
+ '\x18', '\x21', '\xe9', '\x9b', '\x1f', '\xdc', '\xe1', '\x7f',
+ '\x1c', '\x21', '\xed', '\xdb', '\x41', '\x92', '\x20', '\x21',
+ '\xe9', '\x9b', '\x6f', '\xde', '\x00', '\x80', '\x1f', '\x00',
+ '\x24', '\x21', '\xed', '\xdb', '\x5f', '\xdc', '\x00', '\x20',
+ '\x28', '\x21', '\xed', '\xdb', '\x42', '\xd2', '\x2c', '\x21',
+ '\xed', '\xdb', '\x6f', '\xde', '\x00', '\xc0', '\x1f', '\x00',
+ '\xff', '\xed', '\x16', '\x01', '\x0f', '\x05', '\x6f', '\x1e',
+ '\xb2', '\x1a', '\x00', '\x38', '\x61', '\x1a', '\x6f', '\x9e',
+ '\x00', '\x00', '\x20', '\x00', '\x06', '\x21', '\xe9', '\x9b',
+ '\x0c', '\x21', '\x70', '\x8a', '\x5f', '\x9c', '\x00', '\x40',
+ '\x10', '\x21', '\xe9', '\x9b', '\x41', '\xd2', '\x14', '\x21',
+ '\xed', '\xdb', '\x18', '\x21', '\xe9', '\x9b', '\x5f', '\x9c',
+ '\x00', '\x20', '\x1c', '\x21', '\xe9', '\x9b', '\x42', '\x92',
+ '\x20', '\x21', '\xe9', '\x9b', '\x1f', '\x9c', '\xfe', '\x7f',
+ '\x24', '\x21', '\xe9', '\x9b', '\x28', '\x21', '\xe9', '\x9b',
+ '\x2c', '\x21', '\xed', '\xdb', '\x6f', '\x9e', '\x00', '\x00',
+ '\x01', '\x00', '\x30', '\x21', '\xe9', '\x9b', '\x34', '\x21',
+ '\xe9', '\x9b', '\x58', '\xe0', '\x5f', '\xd2', '\x6f', '\x1e',
+ '\xaa', '\x1a', '\x00', '\x38', '\x61', '\x1a', '\x6f', '\x9e',
+ '\x00', '\x00', '\x10', '\x00', '\x06', '\x21', '\xe9', '\x9b',
+ '\x0c', '\x21', '\x70', '\x8a', '\x5f', '\x9c', '\x00', '\x40',
+ '\x10', '\x21', '\xe9', '\x9b', '\x41', '\xd2', '\x14', '\x21',
+ '\xed', '\xdb', '\x18', '\x21', '\xe9', '\x9b', '\x5f', '\x9c',
+ '\x00', '\x20', '\x1c', '\x21', '\xe9', '\x9b', '\x42', '\x92',
+ '\x20', '\x21', '\xe9', '\x9b', '\x1f', '\x9c', '\xfe', '\x7f',
+ '\x24', '\x21', '\xe9', '\x9b', '\x28', '\x21', '\xe9', '\x9b',
+ '\x2c', '\x21', '\xed', '\xdb', '\x6f', '\x9e', '\x00', '\x00',
+ '\x01', '\x00', '\x30', '\x21', '\xe9', '\x9b', '\x34', '\x21',
+ '\xe9', '\x9b', '\x4f', '\xd2', '\x38', '\x21', '\xed', '\xdb',
+ '\xff', '\xed', '\x3e', '\x01', '\x0f', '\x05', '\x6f', '\x1e',
+ '\xae', '\x1a', '\x00', '\x38', '\x61', '\x1a', '\x6f', '\x9e',
+ '\x00', '\x00', '\x10', '\x00', '\x06', '\x21', '\xe9', '\x9b',
+ '\x0c', '\x21', '\x70', '\x8a', '\x6f', '\xde', '\x00', '\x00',
+ '\x01', '\x00', '\x10', '\x21', '\xed', '\xdb', '\x4f', '\x92',
+ '\x14', '\x21', '\xe9', '\x9b', '\x6f', '\xde', '\x00', '\x00',
+ '\x0f', '\x00', '\x18', '\x21', '\xed', '\xdb', '\x1f', '\x9c',
+ '\xf1', '\x7f', '\x1c', '\x21', '\xe9', '\x9b', '\x41', '\x92',
+ '\x20', '\x21', '\xe9', '\x9b', '\x6f', '\xde', '\x00', '\x80',
+ '\x0f', '\x00', '\x24', '\x21', '\xed', '\xdb', '\x5f', '\xdc',
+ '\x00', '\x20', '\x28', '\x21', '\xed', '\xdb', '\x42', '\xd2',
+ '\x2c', '\x21', '\xed', '\xdb', '\x6f', '\xde', '\x00', '\xc0',
+ '\x0f', '\x00', '\x30', '\x21', '\xed', '\xdb', '\x5f', '\xdc',
+ '\x00', '\x40', '\x34', '\x21', '\xed', '\xdb', '\x38', '\x21',
+ '\xe9', '\x9b', '\xce', '\xe0', '\x0f', '\x05', '\x6f', '\x1e',
+ '\xb2', '\x1a', '\x00', '\x38', '\x61', '\x1a', '\x6f', '\x9e',
+ '\x00', '\x00', '\x20', '\x00', '\x06', '\x21', '\xe9', '\x9b',
+ '\x0c', '\x21', '\x70', '\x8a', '\x5f', '\xdc', '\x00', '\x20',
+ '\x10', '\x21', '\xed', '\xdb', '\x48', '\x92', '\x14', '\x21',
+ '\xe9', '\x9b', '\x6f', '\x9e', '\x00', '\x00', '\x01', '\x00',
+ '\x18', '\x21', '\xe9', '\x9b', '\x1c', '\x21', '\xe9', '\x9b',
+ '\x62', '\xe0', '\x5f', '\xd2', '\x6f', '\x1e', '\xb6', '\x1a',
+ '\x00', '\x38', '\x61', '\x1a', '\x6f', '\x9e', '\x00', '\x00',
+ '\x20', '\x00', '\x06', '\x21', '\xe9', '\x9b', '\x0c', '\x21',
+ '\x70', '\x8a', '\x6f', '\xde', '\x00', '\x00', '\x01', '\x00',
+ '\x10', '\x21', '\xed', '\xdb', '\x26', '\xe0', '\x5f', '\x92',
+ '\x6f', '\x1e', '\xba', '\x1a', '\x00', '\x38', '\x61', '\x1a',
+ '\x6f', '\x9e', '\x00', '\x00', '\x40', '\x00', '\x06', '\x21',
+ '\xe9', '\x9b', '\x0c', '\x21', '\x70', '\x8a', '\x6f', '\xde',
+ '\x00', '\x00', '\x01', '\x00', '\x10', '\x21', '\xed', '\xdb',
+ '\x4f', '\x9c', '\x3f', '\x00', '\x14', '\x21', '\xe9', '\x9b',
+ '\x6f', '\xde', '\x00', '\x00', '\x1f', '\x00', '\x18', '\x21',
+ '\xed', '\xdb', '\x5f', '\x9c', '\x00', '\x20', '\x1c', '\x21',
+ '\xe9', '\x9b', '\x48', '\xd2', '\x20', '\x21', '\xed', '\xdb',
+ '\x30', '\xe0', '\x0f', '\x05', '\x04', '\x21', '\x49', '\x9a',
+ '\x6f', '\xae', '\xee', '\x19', '\x00', '\x38', '\xcf', '\x9e',
+ '\x01', '\x00', '\x08', '\x30', '\x0f', '\x05', '\x6f', '\xae',
+ '\x00', '\x1a', '\x00', '\x38', '\x3f', '\xbd', '\xda', '\x04',
+ '\x00', '\x38', '\x62', '\xaa', '\x41', '\xb2', '\x3f', '\xbd',
+ '\x20', '\x05', '\x00', '\x38', '\x7a', '\x86', '\xbe', '\x3f',
+ '\x3e', '\x0d', '\x6f', '\x3e', '\xda', '\x04', '\x00', '\x38',
+ '\x6f', '\xae', '\x18', '\x1a', '\x00', '\x38', '\xb3', '\xb9',
+ '\x04', '\x21', '\x40', '\x9e', '\xcf', '\x9e', '\x01', '\x00',
+ '\x0c', '\x20', '\x42', '\xd2', '\x6f', '\xae', '\x20', '\x1a',
+ '\x00', '\x38', '\xb3', '\xb9', '\x42', '\xd2', '\xc0', '\xda',
+ '\x32', '\x20', '\x47', '\xc2', '\x06', '\x21', '\x6d', '\x9e',
+ '\xc1', '\x93', '\xed', '\x9b', '\x62', '\xd6', '\x0c', '\xd1',
+ '\x69', '\x9a', '\xc1', '\x93', '\x0c', '\xd1', '\xe9', '\x9b',
+ '\x10', '\xd1', '\x69', '\x9a', '\xc1', '\x93', '\x10', '\xd1',
+ '\xe9', '\x9b', '\x81', '\xc2', '\xe9', '\x60', '\x0c', '\xd2',
+ '\x6f', '\xae', '\x22', '\x1a', '\x00', '\x38', '\x3f', '\xbd',
+ '\xda', '\x04', '\x00', '\x38', '\x6f', '\x0e', '\xda', '\x04',
+ '\x00', '\x38', '\x6f', '\xae', '\x24', '\x1a', '\x00', '\x38',
+ '\xb0', '\xb9', '\x61', '\xa6', '\xb0', '\xb9', '\x6f', '\xae',
+ '\x56', '\x19', '\x00', '\x38', '\xb0', '\xb9', '\x62', '\xaa',
+ '\x41', '\xb2', '\x3f', '\xbd', '\x20', '\x05', '\x00', '\x38',
+ '\x41', '\xa2', '\xbe', '\x3f', '\x3e', '\x0d', '\xfc', '\xe1',
+ '\x7e', '\xbe', '\x8c', '\xe2', '\xfe', '\x2b', '\x6a', '\x16',
+ '\x6b', '\x26', '\x6f', '\x0e', '\x1e', '\x0c', '\x00', '\x38',
+ '\xb0', '\xb9', '\x61', '\xa6', '\x4f', '\xbc', '\x80', '\x00',
+ '\x5f', '\xcc', '\x55', '\x05', '\x3f', '\xbd', '\xd6', '\x0b',
+ '\x00', '\x38', '\x61', '\xa6', '\xb0', '\xb9', '\x04', '\x11',
+ '\x49', '\x9a', '\xcf', '\x9e', '\x02', '\x00', '\x10', '\x20',
+ '\x0f', '\x05', '\x6f', '\x9e', '\x30', '\x00', '\x30', '\x00',
+ '\x61', '\x29', '\xe9', '\x9b', '\xbe', '\x2f', '\x3e', '\x0d',
+ '\x4f', '\x9c', '\x30', '\x00', '\x61', '\x29', '\xd9', '\x9b',
+ '\xbe', '\x2f', '\x3e', '\x0d', '\x84', '\xe2', '\xfe', '\x0b',
+ '\x06', '\xa1', '\xeb', '\xba', '\x10', '\x10', '\x0f', '\x05',
+ '\x7a', '\x86', '\x7f', '\xb6', '\xbe', '\x0f', '\x10', '\xa1',
+ '\x6a', '\xaa', '\x7f', '\xb6', '\xbe', '\x0f', '\x70', '\x86',
+ '\x0c', '\xa1', '\xeb', '\xba', '\x22', '\x10', '\x7d', '\x86',
+ '\x14', '\xa1', '\xed', '\xda', '\x10', '\x00', '\x79', '\x86',
+ '\x10', '\xa1', '\x6c', '\xca', '\x01', '\x92', '\x14', '\xa1',
+ '\xe9', '\x9a', '\xf9', '\x10', '\x2c', '\xd6', '\x0c', '\xa1',
+ '\x29', '\xda', '\xe9', '\xb6', '\xd1', '\x10', '\x0f', '\x05',
+ '\x01', '\x02', '\xc7', '\x02', '\xd3', '\x80', '\x0c', '\xa2',
+ '\x7a', '\x86', '\x7f', '\xb6', '\xbe', '\x0f', '\x84', '\xe2',
+ '\xfe', '\x0b', '\x6a', '\x06', '\x6b', '\xa6', '\x6d', '\xb6',
+ '\x7d', '\x86', '\xeb', '\xd6', '\x48', '\xa0', '\x0f', '\x05',
+ '\x60', '\x9a', '\x2d', '\x96', '\x49', '\xa5', '\x59', '\x9a',
+ '\x4c', '\xd5', '\xd9', '\x9a', '\x32', '\x30', '\x02', '\xd2',
+ '\x82', '\xd2', '\x6b', '\x96', '\x2a', '\x96', '\xe9', '\xa6',
+ '\x20', '\x00', '\x6a', '\xc6', '\x60', '\xc9', '\x59', '\x9a',
+ '\xdf', '\x9e', '\xff', '\xff', '\x0a', '\x30', '\x02', '\xc2',
+ '\x82', '\xc2', '\x42', '\xa2', '\x7f', '\xb6', '\xbe', '\x0f',
+ '\x6b', '\x96', '\x2a', '\x96', '\xe9', '\xc6', '\xe5', '\x10',
+ '\x0f', '\x05', '\x41', '\xa2', '\x7f', '\xb6', '\xbe', '\x0f',
+ '\xeb', '\xd6', '\xbd', '\xb0', '\x0f', '\x05', '\x7a', '\x86',
+ '\x7f', '\xb6', '\xbe', '\x0f', '\xfc', '\xe1', '\x7e', '\xbe',
+ '\x90', '\xe2', '\xfe', '\x3b', '\x73', '\x86', '\x72', '\x86',
+ '\x6f', '\x0e', '\xbe', '\x1a', '\x00', '\x38', '\x41', '\x12',
+ '\x04', '\x01', '\xc1', '\x1b', '\xcf', '\x1e', '\x01', '\x00',
+ '\x04', '\x30', '\x42', '\x92', '\x44', '\x92', '\x05', '\x01',
+ '\xc9', '\x9b', '\x60', '\xa6', '\x3f', '\xbd', '\xb2', '\x0e',
+ '\x00', '\x38', '\x6a', '\xa6', '\x0c', '\x20', '\x0f', '\x05',
+ '\xc1', '\x13', '\xcf', '\x1e', '\x03', '\x00', '\xd9', '\x80',
+ '\x0f', '\x05', '\x06', '\x01', '\x23', '\x3a', '\x0f', '\x0c',
+ '\x6c', '\x00', '\x01', '\x22', '\xc1', '\x22', '\xc7', '\x80',
+ '\x63', '\xa6', '\xbe', '\x3f', '\x3e', '\x0d', '\xfc', '\xe1',
+ '\x7e', '\xbe', '\x98', '\xe2', '\xfe', '\x5b', '\x6a', '\x16',
+ '\x6b', '\x56', '\x6c', '\x36', '\x70', '\x86', '\xed', '\x06',
+ '\x74', '\xa0', '\x6d', '\x46', '\x05', '\x11', '\x49', '\x9a',
+ '\xcf', '\x9e', '\x02', '\x00', '\x12', '\x20', '\x0f', '\x05',
+ '\x43', '\x05', '\x59', '\x9a', '\xdf', '\x9e', '\xff', '\xff',
+ '\x54', '\x30', '\x42', '\x22', '\x05', '\x11', '\x49', '\x9a',
+ '\xcf', '\x9e', '\x04', '\x00', '\x0e', '\x20', '\x61', '\xa6',
+ '\x43', '\x05', '\x69', '\x9a', '\xff', '\x92', '\x3e', '\x30',
+ '\x44', '\x22', '\x61', '\xa6', '\x3f', '\xbd', '\x1e', '\x0c',
+ '\x00', '\x38', '\x61', '\xa6', '\x4f', '\xbc', '\xa0', '\x00',
+ '\x5f', '\xcc', '\x55', '\x05', '\x3f', '\xbd', '\xd6', '\x0b',
+ '\x00', '\x38', '\x65', '\xb6', '\x20', '\xb6', '\x63', '\xc6',
+ '\x20', '\xc6', '\x61', '\xa6', '\x3f', '\xbd', '\xaa', '\x0b',
+ '\x00', '\x38', '\x6a', '\x26', '\x61', '\xa6', '\x65', '\xb6',
+ '\x20', '\xb6', '\x3f', '\xbd', '\x4a', '\x0c', '\x00', '\x38',
+ '\x6a', '\xa6', '\xf3', '\x20', '\x61', '\xa6', '\x22', '\x06',
+ '\xe4', '\x06', '\x91', '\xb0', '\x0f', '\x05', '\xbe', '\x5f',
+ '\x3e', '\x0d', '\xfc', '\xe1', '\x7e', '\xbe', '\xa4', '\xe2',
+ '\xfe', '\x8b', '\x6a', '\x16', '\x6b', '\x06', '\x6c', '\x86',
+ '\x3f', '\xbd', '\xdc', '\x13', '\x00', '\x38', '\x6a', '\x96',
+ '\x1a', '\x30', '\x41', '\xa2', '\x60', '\xd6', '\x28', '\xd6',
+ '\xe9', '\xd6', '\x14', '\x80', '\x0f', '\x05', '\x6f', '\xae',
+ '\x28', '\x1a', '\x00', '\x38', '\x3f', '\xbd', '\xda', '\x04',
+ '\x00', '\x38', '\x42', '\xa2', '\xbe', '\x8f', '\x3e', '\x0d',
+ '\x6f', '\xce', '\xc4', '\x1a', '\x00', '\x38', '\x6c', '\xca',
+ '\xec', '\x06', '\x1e', '\x10', '\xec', '\xd6', '\x6f', '\x9e',
+ '\x96', '\x1b', '\x00', '\x38', '\x09', '\x91', '\x70', '\x8a',
+ '\x16', '\x91', '\xe1', '\x1b', '\xac', '\x06', '\x1a', '\x91',
+ '\xe0', '\x0b', '\x1e', '\x91', '\xe8', '\x8b', '\x74', '\xe0',
+ '\x0f', '\x05', '\x5a', '\x80', '\x6c', '\x96', '\x6f', '\xde',
+ '\x96', '\x1b', '\x00', '\x38', '\x01', '\xd1', '\xe1', '\x1b',
+ '\x05', '\xd1', '\xe0', '\x0b', '\xa0', '\x96', '\x09', '\xd1',
+ '\xe9', '\x9b', '\x29', '\x16', '\x16', '\xd1', '\xe1', '\x1b',
+ '\x1a', '\xd1', '\x70', '\x8a', '\x68', '\xc6', '\xa9', '\xc6',
+ '\x1e', '\xd1', '\xec', '\xcb', '\x46', '\xe0', '\x0f', '\x05',
+ '\x6f', '\xae', '\x44', '\x1a', '\x00', '\x38', '\x3f', '\xbd',
+ '\xda', '\x04', '\x00', '\x38', '\x44', '\xa2', '\xbe', '\x8f',
+ '\x3e', '\x0d', '\x6f', '\xae', '\x58', '\x1a', '\x00', '\x38',
+ '\x3f', '\xbd', '\xda', '\x04', '\x00', '\x38', '\x60', '\xa6',
+ '\x41', '\xb2', '\x3f', '\xbd', '\x20', '\x05', '\x00', '\x38',
+ '\x43', '\xa2', '\xbe', '\x8f', '\x3e', '\x0d', '\x6f', '\x9e',
+ '\x96', '\x1b', '\x00', '\x38', '\x01', '\x91', '\xe1', '\x1b',
+ '\x05', '\x91', '\xe0', '\x0b', '\x09', '\x91', '\xe8', '\x8b',
+ '\x1e', '\x91', '\x70', '\x8a', '\x6f', '\xce', '\x96', '\x1b',
+ '\x00', '\x38', '\x7c', '\x0a', '\x0d', '\xc1', '\x70', '\x8a',
+ '\x11', '\xc1', '\x70', '\x8a', '\x15', '\xc1', '\x79', '\x0e',
+ '\x7f', '\x0d', '\xb8', '\x1b', '\x00', '\x38', '\x70', '\x8a',
+ '\x7f', '\x0d', '\xbc', '\x1b', '\x00', '\x38', '\x70', '\x8a',
+ '\x0d', '\x91', '\xe8', '\x8a', '\xff', '\x8d', '\xc0', '\x01',
+ '\x75', '\x86', '\x65', '\x56', '\x04', '\x20', '\x6c', '\xd6',
+ '\x15', '\xd2', '\x65', '\x96', '\x29', '\x55', '\x65', '\x36',
+ '\x23', '\x95', '\x09', '\xd1', '\x69', '\x9a', '\x24', '\x30',
+ '\x2c', '\x36', '\x0d', '\xd1', '\xe9', '\x9a', '\x1c', '\x80',
+ '\x0f', '\x05', '\x09', '\x31', '\x69', '\x9a', '\x10', '\x30',
+ '\x0f', '\x05', '\x83', '\x0b', '\x0a', '\x20', '\x0f', '\x05',
+ '\x0d', '\x31', '\xe9', '\x9a', '\x06', '\x20', '\x0f', '\x05',
+ '\x65', '\x56', '\x35', '\x35', '\x11', '\x31', '\x63', '\x3a',
+ '\xca', '\x32', '\x4d', '\x90', '\x65', '\x96', '\x29', '\x55',
+ '\x65', '\x36', '\x23', '\x95', '\x2f', '\x3e', '\x96', '\x1b',
+ '\x00', '\x38', '\x05', '\x31', '\x64', '\x4a', '\x0d', '\x31',
+ '\x69', '\x9a', '\x29', '\x46', '\x01', '\x31', '\x27', '\x9a',
+ '\x65', '\xa6', '\xc3', '\xa3', '\xa5', '\xa6', '\xc2', '\xa3',
+ '\xa5', '\xa6', '\xc2', '\xa3', '\x2f', '\xae', '\xbe', '\x1a',
+ '\x00', '\x38', '\x64', '\xb6', '\x3f', '\xbd', '\x2c', '\x13',
+ '\x00', '\x38', '\x83', '\x0b', '\x24', '\x30', '\x6a', '\x66',
+ '\x65', '\xa6', '\xc3', '\xa3', '\xa5', '\xa6', '\xc2', '\xa3',
+ '\xa5', '\xa6', '\xc2', '\xa3', '\x2f', '\xae', '\xbe', '\x1a',
+ '\x00', '\x38', '\x64', '\xb6', '\x3f', '\xbd', '\x4a', '\x0c',
+ '\x00', '\x38', '\x6a', '\xa6', '\xe5', '\x20', '\x65', '\xa6',
+ '\x73', '\x0a', '\x65', '\x26', '\xc3', '\x23', '\xa5', '\x26',
+ '\xc2', '\x23', '\xa5', '\x26', '\xc2', '\x23', '\x2f', '\x2e',
+ '\xbe', '\x1a', '\x00', '\x38', '\x62', '\xa6', '\x4f', '\xbc',
+ '\xf0', '\x00', '\x5f', '\xcc', '\x55', '\x05', '\x3f', '\xbd',
+ '\xd6', '\x0b', '\x00', '\x38', '\x62', '\xa6', '\x64', '\xb6',
+ '\x67', '\xc6', '\x66', '\xd6', '\x3f', '\xbd', '\x7e', '\x13',
+ '\x00', '\x38', '\x4a', '\xa6', '\x28', '\x20', '\x7b', '\x86',
+ '\x0d', '\x31', '\x69', '\xde', '\x26', '\xd6', '\xe9', '\xdb',
+ '\x11', '\x31', '\x70', '\x8a', '\x62', '\xaa', '\x24', '\xa6',
+ '\x3f', '\xbd', '\x20', '\x05', '\x00', '\x38', '\x6f', '\xae',
+ '\x62', '\x1a', '\x00', '\x38', '\x3f', '\xbd', '\xda', '\x04',
+ '\x00', '\x38', '\xaa', '\xe0', '\x0f', '\x05', '\xcf', '\xae',
+ '\x01', '\x00', '\x4c', '\x30', '\x0f', '\x05', '\xcf', '\xae',
+ '\x02', '\x00', '\x46', '\x20', '\x65', '\xa6', '\x62', '\xaa',
+ '\x24', '\xa6', '\x6f', '\x1e', '\x20', '\x05', '\x00', '\x38',
+ '\x7b', '\x86', '\xb1', '\xb9', '\x6f', '\x0e', '\xda', '\x04',
+ '\x00', '\x38', '\x6f', '\xae', '\x76', '\x1a', '\x00', '\x38',
+ '\xb0', '\xb9', '\x66', '\xa6', '\x7b', '\x86', '\xb1', '\xb9',
+ '\x6f', '\xae', '\x82', '\x1a', '\x00', '\x38', '\xb0', '\xb9',
+ '\x62', '\xa6', '\x64', '\xb6', '\x3f', '\xbd', '\xde', '\x12',
+ '\x00', '\x38', '\x41', '\x92', '\xc3', '\x9b', '\x11', '\x31',
+ '\x6d', '\x9e', '\x01', '\x92', '\x58', '\xe0', '\xed', '\x9b',
+ '\x65', '\xa6', '\xc3', '\xa3', '\xa5', '\xa6', '\xc2', '\xa3',
+ '\xa5', '\xa6', '\xc2', '\xa3', '\x6f', '\xad', '\xbe', '\x1a',
+ '\x00', '\x38', '\x62', '\xae', '\x24', '\xa6', '\x6f', '\x1e',
+ '\x20', '\x05', '\x00', '\x38', '\x7b', '\x86', '\xb1', '\xb9',
+ '\x6f', '\x0e', '\xda', '\x04', '\x00', '\x38', '\x6f', '\xae',
+ '\x8a', '\x1a', '\x00', '\x38', '\xb0', '\xb9', '\x66', '\xa6',
+ '\x7b', '\x86', '\xb1', '\xb9', '\x6f', '\xae', '\x82', '\x1a',
+ '\x00', '\x38', '\xb0', '\xb9', '\x62', '\xa6', '\x64', '\xb6',
+ '\x67', '\xc6', '\x66', '\xd6', '\x3f', '\xbd', '\x2e', '\x14',
+ '\x00', '\x38', '\x0d', '\x31', '\x6d', '\x9e', '\x26', '\x96',
+ '\xed', '\x9b', '\x11', '\x31', '\x70', '\x8a', '\x6f', '\xce',
+ '\x96', '\x1b', '\x00', '\x38', '\x0d', '\xc1', '\x69', '\x9a',
+ '\x7f', '\x0d', '\xb8', '\x1b', '\x00', '\x38', '\x29', '\x9a',
+ '\xe8', '\x96', '\xff', '\x1d', '\x44', '\xfe', '\x0f', '\x05',
+ '\x75', '\x86', '\x6f', '\x2e', '\xbe', '\x1a', '\x00', '\x38',
+ '\x6f', '\x1e', '\x96', '\x1b', '\x00', '\x38', '\x09', '\x11',
+ '\xa0', '\x0b', '\x4c', '\x30', '\x7b', '\x86', '\x62', '\xaa',
+ '\x3f', '\xbd', '\x20', '\x05', '\x00', '\x38', '\x6f', '\xae',
+ '\x96', '\x1a', '\x00', '\x38', '\x3f', '\xbd', '\xda', '\x04',
+ '\x00', '\x38', '\x70', '\x86', '\x09', '\x11', '\xe0', '\x0a',
+ '\x22', '\x00', '\x0f', '\x05', '\x05', '\x11', '\x29', '\x0a',
+ '\x01', '\x11', '\x6d', '\xda', '\x62', '\x99', '\x59', '\x9a',
+ '\x4d', '\x05', '\xd9', '\x9a', '\xff', '\x2d', '\x9a', '\xfd',
+ '\x0f', '\x05', '\x02', '\x02', '\x09', '\x11', '\xe0', '\x0a',
+ '\xe3', '\x10', '\x0f', '\x05', '\x6f', '\xae', '\xa6', '\x1a',
+ '\x00', '\x38', '\x3f', '\xbd', '\xda', '\x04', '\x00', '\x38',
+ '\x0f', '\x2c', '\x6c', '\x00', '\x01', '\x52', '\xc1', '\x52',
+ '\xa5', '\x80', '\x15', '\x12', '\x7a', '\x86', '\xbe', '\x8f',
+ '\x3e', '\x0d', '\x00', '\x00', '\x7f', '\xb6', '\x0f', '\x05',
+ '\x00', '\x00', '\x00', '\x00', '\x0d', '\x0a', '\x0d', '\x0a',
+ '\x44', '\x65', '\x76', '\x69', '\x63', '\x65', '\x20', '\x49',
+ '\x44', '\x20', '\x3d', '\x20', '\x00', '\x00', '\x43', '\x68',
+ '\x65', '\x63', '\x6b', '\x73', '\x75', '\x6d', '\x20', '\x6f',
+ '\x66', '\x20', '\x62', '\x6f', '\x6f', '\x74', '\x6c', '\x6f',
+ '\x61', '\x64', '\x65', '\x72', '\x20', '\x69', '\x73', '\x20',
+ '\x00', '\x00', '\x57', '\x61', '\x69', '\x74', '\x69', '\x6e',
+ '\x67', '\x20', '\x66', '\x6f', '\x72', '\x20', '\x6c', '\x6f',
+ '\x61', '\x64', '\x20', '\x69', '\x6e', '\x66', '\x6f', '\x2e',
+ '\x0d', '\x0a', '\x00', '\x00', '\x47', '\x6f', '\x74', '\x20',
+ '\x6c', '\x6f', '\x61', '\x64', '\x20', '\x69', '\x6e', '\x66',
+ '\x6f', '\x2e', '\x0d', '\x0a', '\x00', '\x00', '\x50', '\x41',
+ '\x43', '\x4b', '\x45', '\x54', '\x5f', '\x49', '\x4e', '\x46',
+ '\x4f', '\x0d', '\x0a', '\x00', '\x53', '\x45', '\x54', '\x5f',
+ '\x52', '\x45', '\x47', '\x49', '\x53', '\x54', '\x45', '\x52',
+ '\x0d', '\x0a', '\x00', '\x00', '\x47', '\x45', '\x54', '\x5f',
+ '\x52', '\x45', '\x47', '\x49', '\x53', '\x54', '\x45', '\x52',
+ '\x0d', '\x0a', '\x00', '\x00', '\x50', '\x41', '\x55', '\x53',
+ '\x45', '\x5f', '\x4c', '\x4f', '\x4f', '\x50', '\x0d', '\x0a',
+ '\x00', '\x00', '\x4d', '\x45', '\x4d', '\x5f', '\x56', '\x45',
+ '\x52', '\x49', '\x46', '\x59', '\x0d', '\x0a', '\x00', '\x00',
+ '\x76', '\x65', '\x72', '\x69', '\x66', '\x79', '\x20', '\x66',
+ '\x61', '\x69', '\x6c', '\x65', '\x64', '\x0d', '\x0a', '\x00',
+ '\x4d', '\x45', '\x4d', '\x5f', '\x54', '\x45', '\x53', '\x54',
+ '\x0d', '\x0a', '\x00', '\x00', '\x23', '\x23', '\x23', '\x20',
+ '\x4d', '\x65', '\x6d', '\x6f', '\x72', '\x79', '\x20', '\x74',
+ '\x65', '\x73', '\x74', '\x20', '\x66', '\x61', '\x69', '\x6c',
+ '\x65', '\x64', '\x20', '\x61', '\x74', '\x20', '\x00', '\x00',
+ '\x50', '\x61', '\x73', '\x73', '\x65', '\x64', '\x20', '\x6d',
+ '\x65', '\x6d', '\x6f', '\x72', '\x79', '\x20', '\x74', '\x65',
+ '\x73', '\x74', '\x2e', '\x0d', '\x0a', '\x00', '\x4d', '\x45',
+ '\x4d', '\x5f', '\x44', '\x55', '\x4d', '\x50', '\x0d', '\x0a',
+ '\x00', '\x00', '\x4d', '\x45', '\x4d', '\x5f', '\x43', '\x4c',
+ '\x45', '\x41', '\x52', '\x0d', '\x0a', '\x00', '\x46', '\x4c',
+ '\x41', '\x53', '\x48', '\x0d', '\x0a', '\x00', '\x4a', '\x55',
+ '\x4d', '\x50', '\x0d', '\x0a', '\x00', '\x00', '\x45', '\x4e',
+ '\x44', '\x0d', '\x0a', '\x00', '\x23', '\x23', '\x23', '\x20',
+ '\x55', '\x6e', '\x6b', '\x6e', '\x6f', '\x77', '\x6e', '\x20',
+ '\x74', '\x79', '\x70', '\x65', '\x3a', '\x20', '\x00', '\x00',
+ '\x43', '\x68', '\x65', '\x63', '\x6b', '\x73', '\x75', '\x6d',
+ '\x20', '\x6f', '\x66', '\x20', '\x66', '\x69', '\x6c', '\x65',
+ '\x20', '\x69', '\x73', '\x20', '\x00', '\x00', '\x23', '\x23',
+ '\x23', '\x20', '\x4d', '\x65', '\x6d', '\x6f', '\x72', '\x79',
+ '\x20', '\x74', '\x65', '\x73', '\x74', '\x20', '\x31', '\x20',
+ '\x66', '\x61', '\x69', '\x6c', '\x65', '\x64', '\x20', '\x61',
+ '\x74', '\x20', '\x00', '\x00', '\x23', '\x23', '\x23', '\x20',
+ '\x4d', '\x65', '\x6d', '\x6f', '\x72', '\x79', '\x20', '\x74',
+ '\x65', '\x73', '\x74', '\x20', '\x32', '\x20', '\x66', '\x61',
+ '\x69', '\x6c', '\x65', '\x64', '\x20', '\x61', '\x74', '\x20',
+ '\x00', '\x00', '\x20', '\x3a', '\x00', '\x00', '\x38', '\x4d',
+ '\x62', '\x20', '\x42', '\x42', '\x00', '\x00', '\x38', '\x4d',
+ '\x62', '\x20', '\x54', '\x42', '\x00', '\x00', '\x31', '\x36',
+ '\x4d', '\x62', '\x20', '\x42', '\x42', '\x00', '\x31', '\x36',
+ '\x4d', '\x62', '\x20', '\x54', '\x42', '\x00', '\x33', '\x32',
+ '\x4d', '\x62', '\x20', '\x54', '\x42', '\x00', '\x55', '\x6e',
+ '\x73', '\x75', '\x70', '\x70', '\x6f', '\x72', '\x74', '\x65',
+ '\x64', '\x20', '\x69', '\x6e', '\x74', '\x65', '\x72', '\x6c',
+ '\x65', '\x61', '\x76', '\x65', '\x21', '\x0a', '\x00', '\x00',
+ '\x46', '\x6f', '\x75', '\x6e', '\x64', '\x20', '\x31', '\x20',
+ '\x78', '\x20', '\x43', '\x46', '\x49', '\x20', '\x61', '\x74',
+ '\x20', '\x00', '\x54', '\x6f', '\x6f', '\x20', '\x6d', '\x61',
+ '\x6e', '\x79', '\x20', '\x72', '\x65', '\x67', '\x69', '\x6f',
+ '\x6e', '\x73', '\x20', '\x6f', '\x6e', '\x20', '\x63', '\x68',
+ '\x69', '\x70', '\x21', '\x0a', '\x00', '\x00', '\x4e', '\x6f',
+ '\x20', '\x73', '\x69', '\x6e', '\x67', '\x6c', '\x65', '\x20',
+ '\x78', '\x31', '\x36', '\x20', '\x61', '\x74', '\x20', '\x00',
+ '\x4e', '\x6f', '\x20', '\x69', '\x6e', '\x74', '\x65', '\x72',
+ '\x6c', '\x65', '\x61', '\x76', '\x65', '\x64', '\x20', '\x78',
+ '\x31', '\x36', '\x20', '\x61', '\x74', '\x20', '\x00', '\x00',
+ '\x46', '\x6f', '\x75', '\x6e', '\x64', '\x20', '\x00', '\x00',
+ '\x31', '\x00', '\x32', '\x00', '\x20', '\x78', '\x20', '\x00',
+ '\x46', '\x61', '\x74', '\x61', '\x6c', '\x3a', '\x20', '\x66',
+ '\x6c', '\x61', '\x73', '\x68', '\x20', '\x69', '\x73', '\x20',
+ '\x74', '\x6f', '\x6f', '\x20', '\x73', '\x6d', '\x61', '\x6c',
+ '\x6c', '\x2e', '\x0a', '\x00', '\x53', '\x65', '\x63', '\x74',
+ '\x6f', '\x72', '\x20', '\x65', '\x72', '\x61', '\x73', '\x65',
+ '\x20', '\x65', '\x72', '\x72', '\x6f', '\x72', '\x0a', '\x00',
+ '\x45', '\x72', '\x72', '\x6f', '\x72', '\x20', '\x61', '\x74',
+ '\x20', '\x00', '\x3a', '\x20', '\x4e', '\x6f', '\x20', '\x6e',
+ '\x65', '\x65', '\x64', '\x20', '\x74', '\x6f', '\x20', '\x77',
+ '\x72', '\x69', '\x74', '\x65', '\x0a', '\x00', '\x3a', '\x20',
+ '\x45', '\x72', '\x61', '\x73', '\x69', '\x6e', '\x67', '\x20',
+ '\x00', '\x00', '\x20', '\x62', '\x79', '\x74', '\x65', '\x73',
+ '\x0a', '\x00', '\x3a', '\x20', '\x57', '\x72', '\x69', '\x74',
+ '\x69', '\x6e', '\x67', '\x20', '\x00', '\x00', '\x3a', '\x20',
+ '\x56', '\x65', '\x72', '\x69', '\x66', '\x79', '\x69', '\x6e',
+ '\x67', '\x2e', '\x2e', '\x2e', '\x00', '\x00', '\x4f', '\x4b',
+ '\x0a', '\x00', '\x7e', '\x19', '\x00', '\x38', '\x86', '\x19',
+ '\x00', '\x38', '\x8e', '\x19', '\x00', '\x38', '\x96', '\x19',
+ '\x00', '\x38', '\x9e', '\x19', '\x00', '\x38', '\x00', '\x00',
+ '\x00', '\x80', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x84', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x54', '\x68', '\x69', '\x73', '\x20', '\x62', '\x6f', '\x6f',
+ '\x74', '\x6c', '\x6f', '\x61', '\x64', '\x65', '\x72', '\x20',
+ '\x77', '\x61', '\x73', '\x20', '\x62', '\x75', '\x69', '\x6c',
+ '\x74', '\x20', '\x62', '\x79', '\x20', '\x72', '\x6f', '\x6f',
+ '\x74', '\x20', '\x6f', '\x6e', '\x20', '\x57', '\x65', '\x64',
+ '\x20', '\x4d', '\x61', '\x79', '\x20', '\x31', '\x36', '\x20',
+ '\x32', '\x31', '\x3a', '\x33', '\x31', '\x3a', '\x34', '\x33',
+ '\x20', '\x43', '\x45', '\x53', '\x54', '\x20', '\x32', '\x30',
+ '\x30', '\x37', '\x2e', '\x0d', '\x0a', '\x00'
+};
diff --git a/package/etrax-tools/src/e100boot/sbl/network.c b/package/etrax-tools/src/e100boot/sbl/network.c
new file mode 100644
index 000000000..7c77d5e52
--- /dev/null
+++ b/package/etrax-tools/src/e100boot/sbl/network.c
@@ -0,0 +1,706 @@
+/*!***************************************************************************
+*!
+*! FILE NAME : network.c
+*!
+*! DESCRIPTION: Network boot stuff for e100boot.
+*!
+*! ---------------------------------------------------------------------------
+*! HISTORY
+*!
+*! DATE NAME CHANGES
+*! ---- ---- -------
+*! 1996 Ronny Raneup Initial version
+*! 2002 05 02 Ronny Ranerup Moved it into this file
+*! ---------------------------------------------------------------------------
+*! (C) Copyright 1999, 2000, 2001, 2002 Axis Communications AB, LUND, SWEDEN
+*!***************************************************************************/
+
+/************************** Include files ********************************/
+
+#include <stdio.h>
+#include <pcap.h>
+#include <conf.h> /* from configure */
+
+#include <e100boot.h>
+#include <common.h>
+#include <network.h>
+
+/************************** Constants and macros *************************/
+
+#define CRC_LEN 4
+
+/************************** Type definitions *****************************/
+
+/************************** Global variables *****************************/
+
+udword highest_ack_received;
+udword last_ack_received = -1;
+int new_ack = FALSE;
+int got_new_packet = FALSE;
+
+unsigned char dst_addr_of_device[] = { 0x01, 0x40, 0x8c, 0x00, 0x01, 0x00 };
+unsigned char src_addr_of_device[] = { 0x02, 0x40, 0x8c, 0x00, 0x01, 0x00 };
+unsigned char eth_addr_local[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+
+struct sockaddr sock_addr;
+int sock_fd;
+int pPacket = 0;
+pcap_t *pd;
+
+pcap_handler handler;
+
+struct packet_buf first_rec_packet;
+struct packet_buf *last_rec_packet = &first_rec_packet;
+
+int promisc = 1; /* promiscuous mode */
+int all_ids = TRUE;
+
+int both_addresses = FALSE;
+int p_packet_bpl = 8;
+int printPacketType = CHAR;
+
+unsigned int id;
+int one_id_only = TRUE;
+
+unsigned char buf[10000]; /* pcap buffer */
+
+const struct pcap_pkthdr *hdrG;
+
+char host1[MAX_STRING_LEN]; /* name of ethernet host */
+char host2[MAX_STRING_LEN]; /* name of ethernet host */
+
+/************************** Function prototypes **************************/
+
+int timeout (struct timeval *tvThen, int ms);
+int InitSendSocket (char *device_name);
+int highest_seq_received (void);
+struct packet_buf* ack_on_seq (int seq);
+struct packet_buf* packet_with_seq (int seq);
+struct timeval timeval_subtract (struct timeval *x, struct timeval *y);
+void GetNextPacket (void);
+void PrintPacket (const unsigned char *p, int size, int type);
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: net_init
+*#
+*# DESCRIPTION:
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 2002 05 02 ronny Initial version
+*#
+*#***************************************************************************/
+void
+net_init(void)
+{
+ static char *dev;
+ static char errBuf[1000];
+
+ GetLocalEthAddr();
+ first_rec_packet.data = malloc(PACKET_SIZE);
+
+ if ((dev = pcap_lookupdev(errBuf)) == NULL) {
+ printf("Error %s\n", errBuf);
+ if (errno == EPERM)
+ {
+ printf("Make sure this program is executed with root privileges.\n");
+ }
+
+ exit(EXIT_FAILURE);
+ }
+
+ if ((pd = pcap_open_live(device, 200, promisc, 10, errBuf)) == NULL) {
+ printf("Error %s\n", errBuf);
+ if (errno == EPERM)
+ {
+ printf("Make sure this program is executed with root privileges.\n");
+ }
+
+ exit(EXIT_FAILURE);
+ }
+
+ handler = (pcap_handler) Handler;
+
+ InitSendSocket(device);
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: NetBoot
+*#
+*# DESCRIPTION: The main network boot routine.
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 2000 01 07 ronny Initial version
+*# 2002 05 02 ronny Fixed segv bug
+*#
+*#***************************************************************************/
+
+void
+NetBoot(void)
+{
+ struct packet_buf *p;
+ struct timeval tv;
+
+ gettimeofday(&tv, NULL);
+
+ p = create_packet(0);
+ SendToDevice(p->data, p->size);
+
+ while(1) {
+ static int all_trans = FALSE;
+
+ if (got_new_packet) {
+ got_new_packet = FALSE;
+
+ if (new_ack && first_packet) {
+ if (db4) {
+ printf("* got ACK %d.\n", last_ack_received);
+ printf("* ACK wanted %d.\n", first_packet->seq);
+ }
+ if (last_ack_received == first_packet->seq) {
+ if (!(p = create_packet(first_packet->seq+1))) {
+ //break;
+ }
+ first_packet = free_packet(first_packet);
+ }
+ }
+ }
+
+ if (new_ack || timeout(&tv, 500)) {
+ if (p) {
+ SendToDevice(p->data, p->size);
+ }
+ new_ack = FALSE;
+ gettimeofday(&tv, NULL);
+ }
+
+ GetNextPacket();
+ }
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: GetNextPacket
+*#
+*# DESCRIPTION:
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 961022 ronny Initial version
+*#
+*#***************************************************************************/
+
+void
+GetNextPacket(void)
+{
+ int ret;
+
+ if (db2) printf("> GetNextPacket\n");
+
+ /* got_new_packet = FALSE;*/
+ if ((ret = pcap_dispatch(pd, 1, handler, buf)) == -1) {
+ pcap_perror(pd, "Error in pcap_dispatch");
+ exit(EXIT_FAILURE);
+ }
+
+ if (db2) printf("< GetNextPacket\n");
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: Handler
+*#
+*# PARAMETERS:
+*#
+*# DESCRIPTION:
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 961022 ronny Initial version
+*#
+*#***************************************************************************/
+
+void
+Handler(unsigned char *buf, const struct pcap_pkthdr *hdr,
+ const unsigned char *p)
+{
+ const unsigned char *src = &p[6];
+ const unsigned char *dst = &p[0];
+ struct packet_header_T *h = (struct packet_header_T*)p;
+
+ if (db2) printf("> Handler\n");
+ got_new_packet = TRUE;
+ if ((!memcmp(src, eth_addr_local, 6) && !memcmp(dst, dst_addr_of_device, 6))
+ || (!memcmp(src, src_addr_of_device, 6) && !memcmp(dst, eth_addr_local, 6))) {
+ if (db1) printf("#RX######################################################\n");
+ if (db1) printf("Length: %u(0x%x)\n", (udword)hdr->len, (udword)hdr->len);
+ if (pPacket) PrintPacket(p, hdr->caplen, printPacketType);
+ DecodeSvintoBoot(p);
+ /* should clean up this... */
+ if ((ntohl(h->type) == ACK)) {
+ if (all_ids || (ntohl(h->id) == id)) {
+ if (all_ids && one_id_only) {
+ if (ntohl(h->id) == 0) {
+ all_ids = FALSE;
+ id = ntohl(h->id);
+ printf("Booting device with random id %8.8x.\n", id);
+ }
+ }
+ }
+ else {
+ printf("Got ACK from a new id, %8.8lx. Ignoring.\n",
+ (unsigned long)ntohl(h->id));
+ return;
+ }
+ new_ack = TRUE;
+ last_ack_received = ntohl(h->seq);
+ if (last_ack_received > highest_ack_received) {
+ highest_ack_received = last_ack_received;
+ }
+ }
+
+ if (db1) printf("#########################################################\n");
+
+ }
+ if (db2) printf("< Handler\n");
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: ack_on_seq
+*#
+*# PARAMETERS:
+*#
+*# DESCRIPTION:
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 980817 ronny Initial version
+*#
+*#***************************************************************************/
+
+struct packet_buf *
+packet_with_seq(int seq)
+{
+ static int last_seq = 0;
+ struct packet_buf *p = first_packet;
+ struct packet_header_T *h;
+
+ if (seq < last_seq) {
+ p = first_packet;
+ }
+
+ while(p) {
+ h = (struct packet_header_T*)p->data;
+ if (ntohl(h->seq) == seq) {
+ return(p);
+ }
+ p = p->next;
+ }
+ return(NULL);
+}
+
+struct packet_buf *
+ack_on_seq(int seq)
+{
+ struct packet_buf *p = &first_rec_packet;
+ struct packet_header_T *h;
+
+ if (db1) printf("***> ack_on_seq: %d.\n", seq);
+
+ while (p) {
+ /* printf("\nPacket at %x.\n", p);*/
+ /* DecodeSvintoBoot(p->data);*/
+ h = (struct packet_header_T*)p->data;
+ if ( (ntohl(h->type) == ACK) && (ntohl(h->seq) == seq) ) {
+ if (all_ids || ntohl(h->id) == id) {
+ printf("***< ack_on_seq %d, ok.\n", seq);
+ return(p);
+ }
+ }
+ p = p->next;
+ }
+ if (db1) printf("***< ack_on_seq, no.\n");
+ return(NULL);
+}
+
+int
+highest_seq_received(void)
+{
+ struct packet_buf *p = &first_rec_packet;
+ struct packet_header_T *h;
+ int highest_seq = -1;
+
+ if (db1) printf("***> highest_seq_received\n");
+
+ while (p) {
+ /* printf("\nPacket at %x.\n", p);*/
+ /* DecodeSvintoBoot(p->data);*/
+ h = (struct packet_header_T*)p->data;
+ if ((ntohl(h->type) == ACK) && (all_ids || (ntohl(h->id) == id))) {
+ if ((int)ntohl(h->seq) > highest_seq) {
+ highest_seq = ntohl(h->seq);
+ if (db4) printf("Highest seq: %d\n", highest_seq);
+ }
+ }
+ p = p->next;
+ }
+
+ if (db1) printf("***< highest_seq_received: %d\n", highest_seq);
+ return(highest_seq);
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: PrintPacket
+*#
+*# PARAMETERS:
+*#
+*# DESCRIPTION:
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 961022 ronny Initial version
+*#
+*#***************************************************************************/
+
+void
+PrintPacket(const unsigned char *p, int size, int type)
+{
+ int i;
+
+ /* printf("size %d\n", size);*/
+ for (i = 0; i != size; i++) {
+ if (i % p_packet_bpl == 0)
+ printf("\n%-4.4d: ", i);
+ if (type == UDEC)
+ printf("%-3d ", p[i]);
+ else if (type == HEX)
+ printf("%-2.2x ", p[i]);
+ else if (type == CHAR) {
+ if (isprint(p[i]))
+ printf("%-3c ", p[i]);
+ else
+ printf("%-3d ", p[i]);
+ }
+ else if (type == ASCII) {
+ if (isprint(p[i]))
+ printf("%c", p[i]);
+ else
+ printf(".");
+ }
+ }
+ printf("\n");
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: DecodeSvintoBoot
+*#
+*# PARAMETERS:
+*#
+*# DESCRIPTION: Decodes packets that follow the e100boot protocol.
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 961022 ronny Initial version
+*#
+*#***************************************************************************/
+
+void
+DecodeSvintoBoot(const unsigned char *p)
+{
+ char *str;
+ volatile struct packet_header_T *ph = (struct packet_header_T*)p;
+
+ /* printf("size %d \n", sizeof(struct packet_header_T));*/
+
+ if (db4) printf("\n>DecodeSvintoBoot. Packet at 0x%x\n", (unsigned int)p);
+ if (db1) {
+ printf("%2.2x-%2.2x-%2.2x-%2.2x-%2.2x-%2.2x -> ", p[6],p[7],p[8],p[9],p[10], p[11]);
+ printf("%2.2x-%2.2x-%2.2x-%2.2x-%2.2x-%2.2x\n", p[0],p[1],p[2],p[3],p[4], p[5]);
+
+ printf("length : %4.4lx\n", (long)ntohs(ph->length));
+ printf("snap1 : %8.8lx\n", (long)ntohl(ph->snap1));
+ printf("snap2 : %8.8lx\n", (long)ntohl(ph->snap2));
+
+ switch (ntohl(ph->tag)) {
+ case 0xffffffff:
+ str = "(host > ETRAX)";
+ break;
+ case 0xfffffffe:
+ str = "(host < ETRAX)";
+ break;
+ default:
+ str = "(unknown)";
+ break;
+ }
+ printf("tag : %8.8lx %s\n", (unsigned long)ntohl(ph->tag), str);
+ printf("seq : %8.8lx\n", (unsigned long)ntohl(ph->seq));
+ }
+
+ switch (ntohl(ph->type)) {
+
+ case STRING:
+ str = "(STRING)";
+ fprintf(stderr, "%s", &p[sizeof(struct packet_header_T)]);
+ find_string((char*)&p[sizeof(struct packet_header_T)]);
+ break;
+
+ case NET_INT: {
+ char search_str[20];
+
+ str = "(NET_INT)";
+ sprintf(search_str, "0x%8.8x", ntohl(*(udword*)&p[sizeof(struct packet_header_T)]));
+ fprintf(stderr, search_str);
+ find_string(search_str);
+ break;
+ }
+
+ case NET_INT_NL: {
+ char search_str[20];
+
+ str = "(NET_INT_NL)";
+ sprintf(search_str, "0x%8.8x\n", ntohl(*(udword*)&p[sizeof(struct packet_header_T)]));
+ fprintf(stderr, search_str);
+ find_string(search_str);
+ break;
+ }
+
+ case ACK:
+ str = "(ACK)";
+ break;
+
+ case BOOT_PACKET:
+ str = "(bootpacket)";
+ break;
+
+ case BOOT_CMDS:
+ str = "(bootcmds)";
+ break;
+
+ default:
+ str = "(unknown)";
+ break;
+ }
+
+ if (db1) {
+ printf("(type : %8.8lx %s)\n", (unsigned long)ntohl(ph->type), str);
+ printf("(id : %8.8lx)\n", (unsigned long)ntohl(ph->id));
+ id = ntohl(ph->id);
+ }
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: GetLocalEthAddr
+*#
+*# PARAMETERS: None.
+*#
+*# DESCRIPTION:
+*#
+*#---------------------------------------------------------------------------
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 980818 ronny Initial version
+*#
+*#***************************************************************************/
+
+void
+GetLocalEthAddr(void)
+{
+ int fd;
+ struct ifreq ifr;
+
+ if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
+ perror("socket (GetLocalEthAddr)");
+ exit(EXIT_FAILURE);
+ }
+
+ strcpy(ifr.ifr_name, device);
+ if (ioctl(fd, SIOCGIFHWADDR, &ifr) < 0) {
+ perror("ioctl");
+ exit(EXIT_FAILURE);
+ }
+
+ memcpy(eth_addr_local, ifr.ifr_hwaddr.sa_data, 6);
+ if (db1) printf("Ethernet adress for device %s is %2.2x-%2.2x-%2.2x-%2.2x-%2.2x-%2.2x\n",
+ device,
+ eth_addr_local[0],
+ eth_addr_local[1],
+ eth_addr_local[2],
+ eth_addr_local[3],
+ eth_addr_local[4],
+ eth_addr_local[5]);
+ shutdown(fd, 2);
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: SendToDevice
+*#
+*# PARAMETERS:
+*#
+*# DESCRIPTION:
+*#
+*#---------------------------------------------------------------------------
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 980818 ronny Initial version
+*#
+*#***************************************************************************/
+
+void
+SendToDevice(unsigned char *data, int data_len)
+{
+ char fName[MAX_STRING_LEN];
+ FILE *fd;
+ struct packet_header_T *h = (struct packet_header_T*) data;
+
+ if (db1) printf("***> SendToDevice\n");
+
+ if (db2) printf("Sending %d bytes at 0x%x to %s.\n", data_len, (unsigned int)data, device);
+ if (db1) printf("#TX######################################################\n");
+ if (db1) DecodeSvintoBoot(data);
+
+ if (db1) printf("#########################################################\n");
+ if (toFiles || cmdsOnly) {
+ if (cmdsOnly) { /* use a simpler name */
+ sprintf(fName, "e100boot.cmds");
+ }
+ else {
+ sprintf(fName, "e100boot.seq%lu", (unsigned long)ntohl(h->seq));
+ }
+ if (db2) printf("Writing packet to file '%s'.\n", fName);
+ if ((fd = fopen(fName, "w+")) == NULL) {
+ printf("Cannot open/create '%s'. %s.\n", fName, strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+ fwrite(data, data_len, 1, fd);
+ fclose(fd);
+ }
+ else if (sendto(sock_fd, data, data_len, 0, &sock_addr, sizeof(sock_addr)) < 0) {
+ perror("Sendto failed:");
+ exit(EXIT_FAILURE);
+ }
+
+ if (db1) printf("<*** SendToDevice\n");
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: InitSendSocket
+*#
+*# PARAMETERS:
+*#
+*# DESCRIPTION:
+*#
+*#---------------------------------------------------------------------------
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 980818 ronny Initial version
+*#***************************************************************************/
+
+int
+InitSendSocket(char *device_name)
+{
+ if ((sock_fd = socket(AF_INET, SOCK_PACKET, htons(ETH_P_ALL))) < 0) {
+ perror("Socket call failed:");
+ exit(EXIT_FAILURE);
+ }
+
+ fcntl(sock_fd, F_SETFL, O_NDELAY);
+
+ sock_addr.sa_family = AF_INET;
+ strcpy(sock_addr.sa_data, device_name);
+
+ return sock_fd;
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: timeout
+*#
+*# PARAMETERS:
+*#
+*# DESCRIPTION:
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 980817 ronny Initial version
+*#
+*#***************************************************************************/
+
+int
+timeout(struct timeval *tvThen, int ms)
+{
+ struct timeval tvNow;
+ struct timeval tvDiff;
+
+ (void) gettimeofday(&tvNow, NULL);
+ tvDiff = timeval_subtract(&tvNow, tvThen);
+ if (db4) printf("sec %d.%d\n", (int)tvDiff.tv_sec, (int)tvDiff.tv_usec);
+ if (ms * 1000 < (tvDiff.tv_sec * 1000000 + tvDiff.tv_usec)) {
+ if (db4) printf("TIMEOUT\n");
+ return(TRUE);
+ }
+
+ return(FALSE);
+}
+
+/****************************************************************************
+ *#
+ *# FUNCTION NAME: timeval_subtract
+ *#
+ *# PARAMETERS:
+ *#
+ *# DESCRIPTION: Subtract x-y, and return result.
+ *#
+ *# DATE NAME CHANGES
+ *# ---- ---- -------
+ *# 970128 ronny Initial version
+ *#
+ *#***************************************************************************/
+
+struct timeval
+timeval_subtract(struct timeval *x, struct timeval *y)
+{
+ struct timeval diff;
+
+ diff.tv_sec = x->tv_sec - y->tv_sec;
+ diff.tv_usec = x->tv_usec - y->tv_usec;
+
+ if (diff.tv_usec < 0) {
+ diff.tv_sec--;
+ diff.tv_usec = 1000000 + diff.tv_usec;
+ }
+
+ return diff;
+}
diff --git a/package/etrax-tools/src/e100boot/sbl/network.h b/package/etrax-tools/src/e100boot/sbl/network.h
new file mode 100644
index 000000000..c01a9869b
--- /dev/null
+++ b/package/etrax-tools/src/e100boot/sbl/network.h
@@ -0,0 +1,42 @@
+
+extern unsigned char dst_addr_of_device[];
+extern unsigned char src_addr_of_device[];
+extern unsigned char eth_addr_local[];
+
+extern int pPacket;
+
+extern int promisc;
+
+extern char host1[MAX_STRING_LEN];
+extern char host2[MAX_STRING_LEN];
+
+extern int both_addresses;
+extern int printPacketType;
+extern int p_packet_bpl;
+
+
+#define UDEC 0
+#define CHAR 1
+#define ASCII 2
+#define HEX 3
+
+#define SIZE_OF_HEADER (sizeof(struct packet_header_T))
+#define DATA_SIZE 1460
+#define SNAP1 0xaaaa0300
+#define SNAP2 0x408c8856
+#define SERVER_TAG 0xffffffff
+#define CLIENT_TAG 0xfffffffe
+
+#define SIZE_OF_FIRST_HEADER (SIZE_OF_HEADER-8)
+#define PACKET_SIZE (DATA_SIZE + SIZE_OF_HEADER)
+#define SIZE_OF_BOOT_CMDS ((IO_BUF_END-IO_BUF_START)-CRC_LEN)
+
+#define BOOT_ADDRESS 0x380000f4
+
+
+void NetBoot (void);
+void SendToDevice (unsigned char *data, int data_len);
+void Handler (unsigned char *buf, const struct pcap_pkthdr *hdr, const unsigned char *p);
+void GetLocalEthAddr (void);
+void net_init (void);
+void DecodeSvintoBoot (const unsigned char *p);
diff --git a/package/etrax-tools/src/e100boot/sbl/reg_des.h b/package/etrax-tools/src/e100boot/sbl/reg_des.h
new file mode 100644
index 000000000..dcc0133bc
--- /dev/null
+++ b/package/etrax-tools/src/e100boot/sbl/reg_des.h
@@ -0,0 +1,141 @@
+struct reg_des {
+ char *name;
+ unsigned int addr;
+} reg_des[] = {
+ { "R_WAITSTATES", 0xb0000000 },
+ { "R_BUS_CONFIG", 0xb0000004 },
+ { "R_BUS_STATUS", 0xb0000004 },
+ { "R_DRAM_TIMING", 0xb0000008 },
+ { "R_SDRAM_TIMING", 0xb0000008 },
+ { "R_DRAM_CONFIG", 0xb000000c },
+ { "R_SDRAM_CONFIG", 0xb000000c },
+ { "R_EXT_DMA_0_CMD", 0xb0000010 },
+ { "R_EXT_DMA_0_STAT", 0xb0000010 },
+ { "R_EXT_DMA_0_ADDR", 0xb0000014 },
+ { "R_EXT_DMA_1_CMD", 0xb0000018 },
+ { "R_EXT_DMA_1_STAT", 0xb0000018 },
+ { "R_EXT_DMA_1_ADDR", 0xb000001c },
+ { "R_TIMER_CTRL", 0xb0000020 },
+ { "R_TIMER_DATA", 0xb0000020 },
+ { "R_WATCHDOG", 0xb0000024 },
+ { "R_SHARED_RAM_CONFIG", 0xb0000040 },
+ { "R_SHARED_RAM_ADDR", 0xb0000044 },
+ { "R_GEN_CONFIG", 0xb000002c },
+ { "R_PORT_G_DATA", 0xb0000028 },
+ { "R_PORT_PA_SET", 0xb0000030 },
+ { "R_PORT_PA_READ", 0xb0000030 },
+ { "R_PORT_PB_SET", 0xb0000038 },
+ { "R_PORT_PB_READ", 0xb0000038 },
+ { "R_SERIAL0_CTRL", 0xb0000060 },
+ { "R_SERIAL0_READ", 0xb0000060 },
+ { "R_SERIAL0_XOFF", 0xb0000064 },
+ { "R_SERIAL1_CTRL", 0xb0000068 },
+ { "R_SERIAL1_READ", 0xb0000068 },
+ { "R_SERIAL1_XOFF", 0xb000006c },
+ { "R_SERIAL2_CTRL", 0xb0000070 },
+ { "R_SERIAL2_READ", 0xb0000070 },
+ { "R_SERIAL2_XOFF", 0xb0000074 },
+ { "R_SERIAL3_CTRL", 0xb0000078 },
+ { "R_SERIAL3_READ", 0xb0000078 },
+ { "R_SERIAL3_XOFF", 0xb000007c },
+ { "R_NETWORK_SA_0", 0xb0000080 },
+ { "R_NETWORK_SA_1", 0xb0000084 },
+ { "R_NETWORK_SA_2", 0xb0000088 },
+ { "R_NETWORK_GA_0", 0xb000008c },
+ { "R_NETWORK_GA_1", 0xb0000090 },
+ { "R_NETWORK_REC_CONFIG", 0xb0000094 },
+ { "R_NETWORK_GEN_CONFIG", 0xb0000098 },
+ { "R_NETWORK_TR_CTRL", 0xb000009c },
+ { "R_NETWORK_MGM_CTRL", 0xb00000a0 },
+ { "R_NETWORK_STAT", 0xb00000a0 },
+ { "R_REC_COUNTERS", 0xb00000a4 },
+ { "R_TR_COUNTERS", 0xb00000a8 },
+ { "R_PHY_COUNTERS", 0xb00000ac },
+ { "R_PAR0_CTRL_DATA", 0xb0000040 },
+ { "R_PAR0_STATUS_DATA", 0xb0000040 },
+ { "R_PAR0_CONFIG", 0xb0000044 },
+ { "R_PAR0_DELAY", 0xb0000048 },
+ { "R_PAR1_CTRL_DATA", 0xb0000050 },
+ { "R_PAR1_STATUS_DATA", 0xb0000050 },
+ { "R_PAR1_CONFIG", 0xb0000054 },
+ { "R_PAR1_DELAY", 0xb0000058 },
+ { "R_ATA_CTRL_DATA", 0xb0000040 },
+ { "R_ATA_STATUS_DATA", 0xb0000040 },
+ { "R_ATA_CONFIG", 0xb0000044 },
+ { "R_ATA_TRANSFER_CNT", 0xb0000048 },
+ { "R_SCSI0_CTRL", 0xb0000044 },
+ { "R_SCSI0_CMD_DATA", 0xb0000040 },
+ { "R_SCSI0_STATUS", 0xb0000048 },
+ { "R_SCSI1_CTRL", 0xb0000054 },
+ { "R_SCSI1_CMD_DATA", 0xb0000050 },
+ { "R_SCSI1_STATUS", 0xb0000058 },
+ { "R_IRQ_MASK0_RD", 0xb00000c0 },
+ { "R_IRQ_MASK0_CLR", 0xb00000c0 },
+ { "R_IRQ_READ0", 0xb00000c4 },
+ { "R_IRQ_MASK0_SET", 0xb00000c4 },
+ { "R_IRQ_MASK1_RD", 0xb00000c8 },
+ { "R_IRQ_MASK1_CLR", 0xb00000c8 },
+ { "R_IRQ_READ1", 0xb00000cc },
+ { "R_IRQ_MASK1_SET", 0xb00000cc },
+ { "R_IRQ_MASK2_RD", 0xb00000d0 },
+ { "R_IRQ_MASK2_CLR", 0xb00000d0 },
+ { "R_IRQ_READ2", 0xb00000d4 },
+ { "R_IRQ_MASK2_SET", 0xb00000d4 },
+ { "R_VECT_MASK_RD", 0xb00000d8 },
+ { "R_VECT_MASK_CLR", 0xb00000d8 },
+ { "R_VECT_READ", 0xb00000dc },
+ { "R_VECT_MASK_SET", 0xb00000dc },
+ { "R_SET_EOP", 0xb000003c },
+ { "R_DMA_CH0_HWSW", 0xb0000100 },
+ { "R_DMA_CH0_DESCR", 0xb000010c },
+ { "R_DMA_CH0_NEXT", 0xb0000104 },
+ { "R_DMA_CH0_BUF", 0xb0000108 },
+ { "R_DMA_CH0_FIRST", 0xb00001a0 },
+ { "R_DMA_CH1_HWSW", 0xb0000110 },
+ { "R_DMA_CH1_DESCR", 0xb000011c },
+ { "R_DMA_CH1_NEXT", 0xb0000114 },
+ { "R_DMA_CH1_BUF", 0xb0000118 },
+ { "R_DMA_CH1_FIRST", 0xb00001a4 },
+ { "R_DMA_CH2_HWSW", 0xb0000120 },
+ { "R_DMA_CH2_DESCR", 0xb000012c },
+ { "R_DMA_CH2_NEXT", 0xb0000124 },
+ { "R_DMA_CH2_BUF", 0xb0000128 },
+ { "R_DMA_CH2_FIRST", 0xb00001a8 },
+ { "R_DMA_CH3_HWSW", 0xb0000130 },
+ { "R_DMA_CH3_DESCR", 0xb000013c },
+ { "R_DMA_CH3_NEXT", 0xb0000134 },
+ { "R_DMA_CH3_BUF", 0xb0000138 },
+ { "R_DMA_CH3_FIRST", 0xb00001ac },
+ { "R_DMA_CH4_HWSW", 0xb0000140 },
+ { "R_DMA_CH4_DESCR", 0xb000014c },
+ { "R_DMA_CH4_NEXT", 0xb0000144 },
+ { "R_DMA_CH4_BUF", 0xb0000148 },
+ { "R_DMA_CH4_FIRST", 0xb00001b0 },
+ { "R_DMA_CH5_HWSW", 0xb0000150 },
+ { "R_DMA_CH5_DESCR", 0xb000015c },
+ { "R_DMA_CH5_NEXT", 0xb0000154 },
+ { "R_DMA_CH5_BUF", 0xb0000158 },
+ { "R_DMA_CH5_FIRST", 0xb00001b4 },
+ { "R_DMA_CH6_HWSW", 0xb0000160 },
+ { "R_DMA_CH6_DESCR", 0xb000016c },
+ { "R_DMA_CH6_NEXT", 0xb0000164 },
+ { "R_DMA_CH6_BUF", 0xb0000168 },
+ { "R_DMA_CH6_FIRST", 0xb00001b8 },
+ { "R_DMA_CH7_HWSW", 0xb0000170 },
+ { "R_DMA_CH7_DESCR", 0xb000017c },
+ { "R_DMA_CH7_NEXT", 0xb0000174 },
+ { "R_DMA_CH7_BUF", 0xb0000178 },
+ { "R_DMA_CH7_FIRST", 0xb00001bc },
+ { "R_DMA_CH8_HWSW", 0xb0000180 },
+ { "R_DMA_CH8_DESCR", 0xb000018c },
+ { "R_DMA_CH8_NEXT", 0xb0000184 },
+ { "R_DMA_CH8_BUF", 0xb0000188 },
+ { "R_DMA_CH8_FIRST", 0xb00001c0 },
+ { "R_DMA_CH9_HWSW", 0xb0000190 },
+ { "R_DMA_CH9_DESCR", 0xb000019c },
+ { "R_DMA_CH9_NEXT", 0xb0000194 },
+ { "R_DMA_CH9_BUF", 0xb0000198 },
+ { "R_DMA_CH9_FIRST", 0xb00001c4 },
+ { "R_TEST_MODE", 0xb00000fc },
+ { NULL, 0 }
+};
diff --git a/package/etrax-tools/src/e100boot/sbl/ser_ima.c b/package/etrax-tools/src/e100boot/sbl/ser_ima.c
new file mode 100644
index 000000000..2aa50d242
--- /dev/null
+++ b/package/etrax-tools/src/e100boot/sbl/ser_ima.c
@@ -0,0 +1,825 @@
+
+/* cconv 1.2 12/16/97, Copyright (C) 1997, Axis Communications AB */
+
+const char ser_ima[] =
+{
+ '\x0f', '\x05', '\x0f', '\x05', '\x6f', '\xee', '\x00', '\x1f',
+ '\x00', '\x38', '\x3f', '\x0d', '\x08', '\x01', '\x00', '\x38',
+ '\x78', '\x56', '\x34', '\x12', '\x21', '\x43', '\x65', '\x87',
+ '\x6f', '\xde', '\x20', '\x00', '\x00', '\xb0', '\x5f', '\x9c',
+ '\x65', '\x6f', '\xed', '\x9b', '\x5f', '\x9c', '\x25', '\x2f',
+ '\x7f', '\x0d', '\x6c', '\x16', '\x00', '\x38', '\xe9', '\x9b',
+ '\xed', '\x9b', '\x3f', '\x0d', '\x28', '\x01', '\x00', '\x38',
+ '\xfc', '\xe1', '\x7e', '\xbe', '\x7e', '\x92', '\x7f', '\x0d',
+ '\x31', '\x00', '\x00', '\xb0', '\xc9', '\x9b', '\x7f', '\x0d',
+ '\x30', '\x00', '\x00', '\xb0', '\x70', '\x0a', '\x7f', '\x92',
+ '\x7f', '\x0d', '\x6c', '\x16', '\x00', '\x38', '\xc9', '\x9b',
+ '\x7f', '\x0d', '\x39', '\x00', '\x00', '\xb0', '\xc9', '\x9b',
+ '\x7f', '\x0d', '\x38', '\x00', '\x00', '\xb0', '\xc9', '\x9b',
+ '\x7f', '\x0d', '\x0e', '\x1b', '\x00', '\x38', '\x70', '\x8a',
+ '\x6f', '\x9e', '\x20', '\x00', '\x00', '\xb0', '\x69', '\x9a',
+ '\x79', '\x67', '\x7f', '\x0d', '\xc2', '\x1a', '\x00', '\x38',
+ '\xe9', '\x9b', '\x6f', '\x9e', '\x22', '\x00', '\x00', '\xb0',
+ '\x59', '\x9a', '\x59', '\x94', '\x7f', '\x0d', '\x2a', '\x1b',
+ '\x00', '\x38', '\xe9', '\x9b', '\x6f', '\x9e', '\x04', '\x00',
+ '\x00', '\xb0', '\x69', '\x9a', '\x06', '\x93', '\xe1', '\x93',
+ '\x81', '\x92', '\x7f', '\x0d', '\x12', '\x1b', '\x00', '\x38',
+ '\xc9', '\x9b', '\x7f', '\x0d', '\xd4', '\x1a', '\x00', '\x38',
+ '\x70', '\x4a', '\x3f', '\xbd', '\x68', '\x02', '\x00', '\x38',
+ '\x3f', '\xbd', '\xec', '\x02', '\x00', '\x38', '\x3f', '\xbd',
+ '\x0c', '\x02', '\x00', '\x38', '\x6a', '\xa6', '\xf7', '\x30',
+ '\x0f', '\x05', '\x6f', '\x9e', '\x00', '\x01', '\x00', '\x38',
+ '\x69', '\x9a', '\x7f', '\x0d', '\x0e', '\x1b', '\x00', '\x38',
+ '\xe9', '\x9a', '\x24', '\x80', '\x0f', '\x05', '\x6f', '\x9e',
+ '\x12', '\x1b', '\x00', '\x38', '\x49', '\x9a', '\xcf', '\x9e',
+ '\x01', '\x00', '\xd3', '\x20', '\x0f', '\x05', '\x6f', '\xde',
+ '\xd4', '\x01', '\x00', '\xb0', '\x4d', '\x9a', '\x38', '\x93',
+ '\x41', '\x93', '\xcd', '\x9b', '\xc1', '\xe0', '\x0f', '\x05',
+ '\x4f', '\x9e', '\x55', '\x00', '\x7f', '\x0d', '\x6c', '\x16',
+ '\x00', '\x38', '\xc9', '\x9b', '\x7f', '\x0d', '\x30', '\x00',
+ '\x00', '\xb0', '\xc9', '\x9b', '\x3e', '\xbe', '\x3f', '\x0d',
+ '\xac', '\x03', '\x00', '\x38', '\xfc', '\xe1', '\x7e', '\xbe',
+ '\x3f', '\xbd', '\xa8', '\x02', '\x00', '\x38', '\x6a', '\xa6',
+ '\x16', '\x20', '\x41', '\x92', '\x3f', '\xbd', '\x34', '\x02',
+ '\x00', '\x38', '\x6a', '\xa6', '\x0a', '\x30', '\x79', '\x86',
+ '\x3f', '\xbd', '\xec', '\x02', '\x00', '\x38', '\x79', '\x86',
+ '\x69', '\xa6', '\x3e', '\x0d', '\x84', '\xe2', '\x6f', '\x9e',
+ '\x22', '\x00', '\x00', '\xb0', '\x59', '\x9a', '\x59', '\x94',
+ '\xee', '\x9b', '\x6f', '\xce', '\x2a', '\x1b', '\x00', '\x38',
+ '\x6c', '\x9a', '\x6e', '\xda', '\xad', '\x96', '\xb9', '\x96',
+ '\xdf', '\x9c', '\x80', '\x25', '\x0a', '\xd0', '\x0f', '\x05',
+ '\x6e', '\x9a', '\xec', '\x9b', '\x04', '\xe0', '\x41', '\xa2',
+ '\x7a', '\x86', '\x7f', '\xb6', '\x04', '\xe2', '\x00', '\x00',
+ '\x6f', '\x9e', '\x6c', '\x16', '\x00', '\x38', '\x79', '\x8a',
+ '\x7f', '\x0d', '\x64', '\x00', '\x00', '\xb0', '\x70', '\x8a',
+ '\x4f', '\xde', '\x55', '\x00', '\x7f', '\x0d', '\x63', '\x00',
+ '\x00', '\xb0', '\xcd', '\xdb', '\x0b', '\xd2', '\x7f', '\x0d',
+ '\x62', '\x00', '\x00', '\xb0', '\xcd', '\xdb', '\xa0', '\xd2',
+ '\xc9', '\xdb', '\x7f', '\x0d', '\x61', '\x00', '\x00', '\xb0',
+ '\xcd', '\xdb', '\x41', '\x92', '\x7f', '\x0d', '\x14', '\x1b',
+ '\x00', '\x38', '\xc9', '\x9b', '\x7f', '\xb6', '\x0f', '\x05',
+ '\x6f', '\x9e', '\x60', '\x00', '\x00', '\xb0', '\x69', '\x9a',
+ '\x59', '\xb4', '\x1f', '\xbf', '\xff', '\x01', '\x88', '\x93',
+ '\x2e', '\xa0', '\x0f', '\x05', '\x6f', '\xce', '\x0e', '\x1b',
+ '\x00', '\x38', '\x6c', '\x9a', '\x6f', '\xde', '\x04', '\x01',
+ '\x00', '\x38', '\x6d', '\x99', '\xcb', '\xbb', '\x01', '\x92',
+ '\xec', '\x9b', '\x6f', '\x9e', '\x22', '\x00', '\x00', '\xb0',
+ '\x49', '\x9a', '\x49', '\x94', '\x7f', '\x0d', '\x2a', '\x1b',
+ '\x00', '\x38', '\xe9', '\x9b', '\x7f', '\xb6', '\x41', '\xa2',
+ '\x7f', '\xb6', '\x7a', '\x86', '\x6f', '\x9e', '\x61', '\x00',
+ '\x00', '\xb0', '\x49', '\x9a', '\x85', '\x93', '\xf5', '\xa0',
+ '\x0f', '\x05', '\x4f', '\x9e', '\x2b', '\x00', '\x7f', '\x0d',
+ '\x6c', '\x16', '\x00', '\x38', '\xc9', '\x9b', '\x7f', '\x0d',
+ '\x60', '\x00', '\x00', '\xb0', '\xc9', '\x9b', '\x7f', '\xb6',
+ '\x0f', '\x05', '\x8a', '\x0b', '\x28', '\x30', '\x0f', '\x05',
+ '\x6f', '\x9e', '\x61', '\x00', '\x00', '\xb0', '\x49', '\x9a',
+ '\x85', '\x93', '\x14', '\xa0', '\x0f', '\x05', '\x6f', '\x9e',
+ '\x6c', '\x16', '\x00', '\x38', '\x4a', '\xde', '\xc9', '\xdb',
+ '\x7f', '\x0d', '\x60', '\x00', '\x00', '\xb0', '\xcd', '\xdb',
+ '\x8a', '\x0b', '\xdd', '\x20', '\x0f', '\x05', '\x7f', '\xb6',
+ '\x0f', '\x05', '\xfc', '\xe1', '\x7e', '\xbe', '\x8e', '\xe2',
+ '\x4f', '\x9e', '\x30', '\x00', '\x01', '\xe1', '\xc9', '\x9b',
+ '\x4f', '\xde', '\x78', '\x00', '\x02', '\xe1', '\xcd', '\xdb',
+ '\x4d', '\x92', '\x0b', '\xe1', '\xc9', '\x9b', '\x4a', '\xd2',
+ '\x0c', '\xe1', '\xcd', '\xdb', '\x0d', '\xe1', '\x70', '\x0a',
+ '\x4b', '\xb6', '\x06', '\x20', '\x7c', '\x86', '\x0b', '\xe1',
+ '\x70', '\x0a', '\x6c', '\x96', '\xc2', '\x93', '\x6a', '\xb6',
+ '\xe9', '\xb7', '\x4b', '\xd6', '\x0f', '\xd3', '\xcf', '\xde',
+ '\x09', '\x00', '\x04', '\x80', '\x49', '\x92', '\x07', '\xd2',
+ '\xac', '\x96', '\x4e', '\xb2', '\x2e', '\xb6', '\x2b', '\x96',
+ '\x30', '\xd2', '\xf3', '\x91', '\xcd', '\xdb', '\x01', '\xc2',
+ '\xc8', '\xc2', '\xd9', '\x20', '\x6c', '\x96', '\x6e', '\xa6',
+ '\x01', '\xa2', '\x3f', '\xbd', '\x12', '\x03', '\x00', '\x38',
+ '\x0e', '\xe2', '\x3e', '\x0d', '\xfc', '\xe1', '\x7e', '\xbe',
+ '\x84', '\xe2', '\xfe', '\x0b', '\x4f', '\x9e', '\xaa', '\xff',
+ '\x7f', '\x0d', '\x6c', '\x16', '\x00', '\x38', '\xc9', '\x9b',
+ '\x7f', '\x0d', '\x30', '\x00', '\x00', '\xb0', '\xc9', '\x9b',
+ '\x6f', '\x0e', '\x12', '\x03', '\x00', '\x38', '\x6f', '\xae',
+ '\x70', '\x16', '\x00', '\x38', '\xb0', '\xb9', '\x6f', '\xae',
+ '\xc2', '\x1a', '\x00', '\x38', '\x6a', '\xaa', '\x7a', '\x67',
+ '\x41', '\xb2', '\x3f', '\xbd', '\x42', '\x03', '\x00', '\x38',
+ '\x6f', '\xae', '\x3c', '\x1a', '\x00', '\x38', '\xb0', '\xb9',
+ '\x6f', '\x9e', '\xf0', '\x00', '\x00', '\x38', '\xef', '\x9e',
+ '\x82', '\x1a', '\x00', '\x38', '\x0e', '\x30', '\x70', '\x86',
+ '\x09', '\x0c', '\xef', '\x9e', '\x82', '\x1a', '\x00', '\x38',
+ '\xf7', '\x20', '\x0f', '\x05', '\x6f', '\xae', '\x82', '\x16',
+ '\x00', '\x38', '\x3f', '\xbd', '\x12', '\x03', '\x00', '\x38',
+ '\x60', '\xa6', '\x41', '\xb2', '\x3f', '\xbd', '\x42', '\x03',
+ '\x00', '\x38', '\x3f', '\xbd', '\x74', '\x04', '\x00', '\x38',
+ '\x3f', '\x0d', '\x28', '\x01', '\x00', '\x38', '\xbe', '\x0f',
+ '\x3e', '\x0d', '\x84', '\xe2', '\x4f', '\x9e', '\x55', '\x00',
+ '\x7f', '\x0d', '\x6c', '\x16', '\x00', '\x38', '\xc9', '\x9b',
+ '\x7f', '\x0d', '\x30', '\x00', '\x00', '\xb0', '\xc9', '\x9b',
+ '\x6f', '\x9e', '\x30', '\x00', '\x00', '\xb0', '\x69', '\xda',
+ '\x7d', '\x87', '\x7f', '\x0d', '\x6c', '\x16', '\x00', '\x38',
+ '\xcd', '\xdb', '\xc9', '\xdb', '\x7e', '\x8a', '\x6e', '\x9a',
+ '\xef', '\x9e', '\x80', '\x84', '\x1e', '\x00', '\xe1', '\x30',
+ '\x0f', '\x05', '\x6e', '\x9a', '\x01', '\x92', '\xee', '\x9b',
+ '\xed', '\xe0', '\x0f', '\x05', '\xfc', '\xe1', '\x7e', '\xbe',
+ '\x84', '\xe2', '\xfe', '\x0b', '\x6f', '\x0e', '\x12', '\x03',
+ '\x00', '\x38', '\x6f', '\xae', '\x9e', '\x16', '\x00', '\x38',
+ '\xb0', '\xb9', '\x3f', '\xbd', '\xec', '\x02', '\x00', '\x38',
+ '\x6f', '\xae', '\x00', '\x1f', '\x00', '\x38', '\x5f', '\xbc',
+ '\xec', '\x01', '\x3f', '\xbd', '\xf2', '\x07', '\x00', '\x38',
+ '\x6f', '\xae', '\xb8', '\x16', '\x00', '\x38', '\xb0', '\xb9',
+ '\x3f', '\xbd', '\xb8', '\x04', '\x00', '\x38', '\xbe', '\x0f',
+ '\x3e', '\xbe', '\x3f', '\x0d', '\x32', '\x04', '\x00', '\x38',
+ '\xfc', '\xe1', '\x7e', '\xbe', '\x98', '\xe2', '\xfe', '\x4b',
+ '\x6f', '\xde', '\x00', '\x1f', '\x00', '\x38', '\x6d', '\x9a',
+ '\x79', '\x67', '\xed', '\x9f', '\xef', '\xde', '\xec', '\x20',
+ '\x00', '\x38', '\xf3', '\x20', '\x0f', '\x05', '\x6f', '\x3e',
+ '\x00', '\x1f', '\x00', '\x38', '\xa3', '\x0b', '\xff', '\x3d',
+ '\xfe', '\x02', '\x0f', '\x05', '\x63', '\x9a', '\x81', '\x92',
+ '\xcf', '\x9d', '\x0b', '\x00', '\x5f', '\x95', '\x3f', '\xf8',
+ '\x54', '\x02', '\x22', '\x01', '\x18', '\x00', '\x62', '\x00',
+ '\x90', '\x00', '\x96', '\x01', '\xc8', '\x01', '\xe4', '\x00',
+ '\x00', '\x02', '\xb8', '\x00', '\x9a', '\x02', '\xce', '\x02',
+ '\x6f', '\xae', '\xca', '\x16', '\x00', '\x38', '\x3f', '\xbd',
+ '\x12', '\x03', '\x00', '\x38', '\x6f', '\x0e', '\x42', '\x03',
+ '\x00', '\x38', '\x04', '\x31', '\x62', '\xae', '\x41', '\xb2',
+ '\xb0', '\xb9', '\x08', '\x31', '\x61', '\xae', '\x41', '\xb2',
+ '\xb0', '\xb9', '\x6f', '\x0e', '\x16', '\x1b', '\x00', '\x38',
+ '\x60', '\x9a', '\x81', '\x92', '\xe0', '\x9b', '\x3f', '\xbd',
+ '\xec', '\x02', '\x00', '\x38', '\x60', '\x9a', '\x01', '\x92',
+ '\xe0', '\x9b', '\x62', '\xaa', '\x61', '\xba', '\x3f', '\xbd',
+ '\xf2', '\x07', '\x00', '\x38', '\xff', '\xed', '\x88', '\x02',
+ '\x0c', '\x32', '\x6f', '\xae', '\xd8', '\x16', '\x00', '\x38',
+ '\x3f', '\xbd', '\x12', '\x03', '\x00', '\x38', '\x6f', '\x0e',
+ '\x42', '\x03', '\x00', '\x38', '\x04', '\x31', '\x62', '\xae',
+ '\x41', '\xb2', '\xb0', '\xb9', '\x08', '\x31', '\x61', '\xae',
+ '\x41', '\xb2', '\xb0', '\xb9', '\x61', '\x1a', '\x72', '\x09',
+ '\xe1', '\x1b', '\xff', '\xed', '\x5a', '\x02', '\x0c', '\x32',
+ '\x6f', '\xae', '\xe8', '\x16', '\x00', '\x38', '\x3f', '\xbd',
+ '\x12', '\x03', '\x00', '\x38', '\x6f', '\x1e', '\x42', '\x03',
+ '\x00', '\x38', '\x04', '\x31', '\x60', '\xae', '\x41', '\xb2',
+ '\xb1', '\xb9', '\x60', '\xaa', '\x6a', '\xaa', '\x41', '\xb2',
+ '\xb1', '\xb9', '\xff', '\xed', '\x32', '\x02', '\x08', '\x32',
+ '\x6f', '\xae', '\xf8', '\x16', '\x00', '\x38', '\x3f', '\xbd',
+ '\x12', '\x03', '\x00', '\x38', '\x04', '\x31', '\x60', '\xae',
+ '\x41', '\xb2', '\x3f', '\xbd', '\x42', '\x03', '\x00', '\x38',
+ '\x60', '\xaa', '\xff', '\x3d', '\xc0', '\x01', '\x0f', '\x05',
+ '\x81', '\xa2', '\xfd', '\x20', '\x0f', '\x05', '\xff', '\xed',
+ '\x06', '\x02', '\x08', '\x32', '\x6f', '\x4e', '\x12', '\x03',
+ '\x00', '\x38', '\x6f', '\xae', '\x06', '\x17', '\x00', '\x38',
+ '\xb4', '\xb9', '\x6f', '\x0e', '\x42', '\x03', '\x00', '\x38',
+ '\x04', '\x31', '\x62', '\xae', '\x41', '\xb2', '\xb0', '\xb9',
+ '\x08', '\x31', '\x61', '\xae', '\x41', '\xb2', '\xb0', '\xb9',
+ '\x62', '\x2a', '\x62', '\x2a', '\xe1', '\x2a', '\xff', '\x3d',
+ '\xb8', '\x01', '\x0f', '\x05', '\x6f', '\xae', '\x14', '\x17',
+ '\x00', '\x38', '\xb4', '\xb9', '\xff', '\xed', '\xd0', '\x01',
+ '\x0f', '\x05', '\x6f', '\x4e', '\x12', '\x03', '\x00', '\x38',
+ '\x6f', '\xae', '\x24', '\x17', '\x00', '\x38', '\xb4', '\xb9',
+ '\x6f', '\x2e', '\x42', '\x03', '\x00', '\x38', '\x04', '\x31',
+ '\x61', '\xae', '\x41', '\xb2', '\xb2', '\xb9', '\x08', '\x31',
+ '\x60', '\xae', '\x41', '\xb2', '\xb2', '\xb9', '\x61', '\xaa',
+ '\x60', '\xba', '\x6e', '\xc6', '\x14', '\xc2', '\x3f', '\xbd',
+ '\xf0', '\x08', '\x00', '\x38', '\x6a', '\xa6', '\x30', '\x20',
+ '\x0f', '\x05', '\x6f', '\xae', '\x30', '\x17', '\x00', '\x38',
+ '\xb4', '\xb9', '\x14', '\xe1', '\x6a', '\xaa', '\x41', '\xb2',
+ '\xb2', '\xb9', '\x14', '\xe1', '\x6a', '\xaa', '\x6a', '\xb6',
+ '\x0f', '\xbc', '\x40', '\x00', '\x8f', '\xac', '\x40', '\x00',
+ '\x3c', '\xa3', '\x3c', '\xb3', '\x3f', '\xbd', '\x98', '\x09',
+ '\x00', '\x38', '\xff', '\xed', '\x6a', '\x01', '\x0f', '\x05',
+ '\x6f', '\xae', '\x4c', '\x17', '\x00', '\x38', '\xb4', '\xb9',
+ '\xff', '\xed', '\x54', '\x01', '\x0c', '\x32', '\x6f', '\xae',
+ '\x62', '\x17', '\x00', '\x38', '\x3f', '\xbd', '\x12', '\x03',
+ '\x00', '\x38', '\x6f', '\x0e', '\x42', '\x03', '\x00', '\x38',
+ '\x04', '\x31', '\x62', '\xae', '\x41', '\xb2', '\xb0', '\xb9',
+ '\x08', '\x31', '\x61', '\xae', '\x41', '\xb2', '\xb0', '\xb9',
+ '\x62', '\xaa', '\x61', '\xba', '\x3f', '\xbd', '\x98', '\x09',
+ '\x00', '\x38', '\xff', '\xed', '\x22', '\x01', '\x0c', '\x32',
+ '\x6f', '\xae', '\x6e', '\x17', '\x00', '\x38', '\x3f', '\xbd',
+ '\x12', '\x03', '\x00', '\x38', '\x6f', '\x0e', '\x42', '\x03',
+ '\x00', '\x38', '\x04', '\x31', '\x62', '\xae', '\x41', '\xb2',
+ '\xb0', '\xb9', '\x08', '\x31', '\x61', '\xae', '\x41', '\xb2',
+ '\xb0', '\xb9', '\x62', '\xaa', '\xe1', '\xaa', '\xda', '\x90',
+ '\x0f', '\x05', '\x7a', '\x0e', '\x08', '\x31', '\xea', '\xaa',
+ '\xf9', '\x80', '\x0f', '\x05', '\xea', '\xe0', '\x0c', '\x32',
+ '\x6f', '\xae', '\x7a', '\x17', '\x00', '\x38', '\x3f', '\xbd',
+ '\x12', '\x03', '\x00', '\x38', '\x6f', '\x0e', '\x42', '\x03',
+ '\x00', '\x38', '\x04', '\x31', '\x61', '\xae', '\x41', '\xb2',
+ '\xb0', '\xb9', '\x08', '\x31', '\x64', '\xae', '\x41', '\xb2',
+ '\xb0', '\xb9', '\x0c', '\x31', '\x62', '\xae', '\x41', '\xb2',
+ '\xb0', '\xb9', '\x6f', '\x0e', '\x36', '\x13', '\x00', '\x38',
+ '\x61', '\xaa', '\x64', '\xba', '\x62', '\xca', '\xb0', '\xb9',
+ '\x6a', '\xa6', '\xac', '\x30', '\x10', '\x32', '\xc3', '\xa2',
+ '\xae', '\x20', '\x7a', '\x86', '\x62', '\xca', '\xef', '\xcd',
+ '\x00', '\x00', '\x01', '\x00', '\x64', '\xba', '\xb0', '\xb9',
+ '\x9e', '\xe0', '\x0f', '\x05', '\x6f', '\xde', '\xa0', '\x1a',
+ '\x00', '\x38', '\x6d', '\x9a', '\x7f', '\x0d', '\xc0', '\x01',
+ '\x00', '\xb0', '\xe9', '\x9b', '\x04', '\xd1', '\x59', '\x98',
+ '\x7f', '\x0d', '\xc4', '\x01', '\x00', '\xb0', '\xe9', '\x9b',
+ '\x6f', '\x1e', '\x12', '\x03', '\x00', '\x38', '\x6f', '\xae',
+ '\x82', '\x17', '\x00', '\x38', '\xb1', '\xb9', '\x04', '\x31',
+ '\x60', '\xae', '\x41', '\xb2', '\x3f', '\xbd', '\x42', '\x03',
+ '\x00', '\x38', '\x6f', '\xae', '\x8a', '\x17', '\x00', '\x38',
+ '\xb1', '\xb9', '\x60', '\x9a', '\xb9', '\x09', '\x50', '\xe0',
+ '\x08', '\x32', '\x6f', '\xae', '\xfe', '\x16', '\x00', '\x38',
+ '\x3f', '\xbd', '\x12', '\x03', '\x00', '\x38', '\x6f', '\x0e',
+ '\x42', '\x03', '\x00', '\x38', '\x04', '\x31', '\x61', '\xae',
+ '\x41', '\xb2', '\xb0', '\xb9', '\x08', '\x31', '\x62', '\xae',
+ '\x41', '\xb2', '\xb0', '\xb9', '\x61', '\x1a', '\x61', '\x9a',
+ '\x08', '\x30', '\x81', '\x92', '\xe1', '\x9b', '\x20', '\xe0',
+ '\x62', '\x3a', '\x1c', '\xe0', '\x0c', '\x32', '\x6f', '\xae',
+ '\x90', '\x17', '\x00', '\x38', '\x3f', '\xbd', '\x12', '\x03',
+ '\x00', '\x38', '\x63', '\xaa', '\x41', '\xb2', '\x3f', '\xbd',
+ '\x42', '\x03', '\x00', '\x38', '\x0a', '\xe0', '\x0f', '\x05',
+ '\xa3', '\x0b', '\xff', '\x2d', '\x06', '\xfd', '\x0f', '\x05',
+ '\x6f', '\xae', '\x8a', '\x17', '\x00', '\x38', '\x3f', '\xbd',
+ '\x12', '\x03', '\x00', '\x38', '\xbe', '\x4f', '\x04', '\xe2',
+ '\x3e', '\x0d', '\xfc', '\xe1', '\x7e', '\xbe', '\x8c', '\xe2',
+ '\xfe', '\x2b', '\x6a', '\x26', '\x6b', '\x06', '\x7f', '\x0d',
+ '\x0e', '\x1b', '\x00', '\x38', '\x70', '\x8a', '\x7f', '\x0d',
+ '\x04', '\x01', '\x00', '\x38', '\xea', '\xab', '\x6f', '\x9e',
+ '\x12', '\x1b', '\x00', '\x38', '\x49', '\x9a', '\xcf', '\x9e',
+ '\x01', '\x00', '\x86', '\x20', '\x0f', '\x05', '\x6f', '\xde',
+ '\xc6', '\x1a', '\x00', '\x38', '\x08', '\xd1', '\xea', '\xab',
+ '\x7f', '\x0d', '\x00', '\x01', '\x00', '\x38', '\xeb', '\xbb',
+ '\x6b', '\x96', '\x04', '\x92', '\xdf', '\x9d', '\xdc', '\x05',
+ '\xdd', '\x9b', '\x6f', '\x9e', '\xa4', '\x01', '\x00', '\xb0',
+ '\x69', '\xda', '\x6f', '\xde', '\x90', '\x1a', '\x00', '\x38',
+ '\xe9', '\xdb', '\x6f', '\xde', '\xd4', '\x01', '\x00', '\xb0',
+ '\x4d', '\x9a', '\x38', '\x93', '\x44', '\x93', '\xcd', '\x9b',
+ '\x6f', '\xde', '\xd4', '\x01', '\x00', '\xb0', '\x4d', '\x9a',
+ '\x07', '\x93', '\xcf', '\x9e', '\x04', '\x00', '\xf7', '\x30',
+ '\x0f', '\x05', '\x4d', '\x9a', '\x38', '\x93', '\x41', '\x93',
+ '\xcd', '\x9b', '\x3f', '\xbd', '\x0c', '\x02', '\x00', '\x38',
+ '\x6a', '\xa6', '\xf7', '\x30', '\x0f', '\x05', '\x6f', '\xce',
+ '\x0e', '\x1b', '\x00', '\x38', '\xec', '\x0a', '\x10', '\x80',
+ '\x0f', '\x05', '\x6f', '\xde', '\xd4', '\x01', '\x00', '\xb0',
+ '\x4d', '\x9a', '\x38', '\x93', '\x41', '\x93', '\xcd', '\x9b',
+ '\xec', '\x0a', '\xd7', '\x90', '\x71', '\x86', '\x22', '\xe0',
+ '\x62', '\x96', '\x7f', '\x0d', '\x0e', '\x1b', '\x00', '\x38',
+ '\xeb', '\xba', '\x14', '\x80', '\x71', '\x86', '\x3f', '\xbd',
+ '\x0c', '\x02', '\x00', '\x38', '\x7f', '\x0d', '\x0e', '\x1b',
+ '\x00', '\x38', '\xe0', '\x0a', '\xf1', '\x90', '\x71', '\x86',
+ '\x62', '\x96', '\x20', '\x96', '\xe9', '\x26', '\x0e', '\x30',
+ '\x62', '\xd6', '\x0d', '\x1c', '\x62', '\x96', '\x20', '\x96',
+ '\xe9', '\xd6', '\xf7', '\x20', '\x0f', '\x05', '\x6f', '\xae',
+ '\xa4', '\x17', '\x00', '\x38', '\x3f', '\xbd', '\x12', '\x03',
+ '\x00', '\x38', '\x61', '\xa6', '\x41', '\xb2', '\xbe', '\x2f',
+ '\x3e', '\xbe', '\x3f', '\x0d', '\x42', '\x03', '\x00', '\x38',
+ '\xfc', '\xe1', '\x7e', '\xbe', '\x8c', '\xe2', '\xfe', '\x2b',
+ '\x6b', '\x06', '\x6c', '\x26', '\xeb', '\xa6', '\x40', '\x00',
+ '\x6a', '\xc6', '\xe0', '\xc6', '\x32', '\x00', '\x71', '\x86',
+ '\x6c', '\xb6', '\x6c', '\x96', '\x79', '\x87', '\x61', '\xd6',
+ '\xc3', '\xd3', '\xed', '\x97', '\x49', '\xd6', '\xcb', '\x9b',
+ '\x4b', '\x9a', '\xcd', '\x96', '\x0c', '\x30', '\x7d', '\x87',
+ '\x6f', '\xae', '\xba', '\x17', '\x00', '\x38', '\x40', '\xe0',
+ '\xe2', '\xbb', '\xcb', '\xdf', '\x01', '\x12', '\xc4', '\x12',
+ '\x06', '\x30', '\xe0', '\xb6', '\xd7', '\x10', '\x6c', '\x96',
+ '\x04', '\xc2', '\xe0', '\xc6', '\xc5', '\x10', '\x0f', '\x05',
+ '\xe0', '\xa6', '\x4e', '\x00', '\x6a', '\xc6', '\xe0', '\xc6',
+ '\x40', '\x00', '\x71', '\x86', '\x6c', '\xa6', '\x61', '\x96',
+ '\xc3', '\x93', '\x6c', '\xd6', '\xe9', '\xd7', '\x4a', '\x9a',
+ '\xcd', '\x96', '\x22', '\x30', '\x01', '\x12', '\x81', '\x12',
+ '\xe2', '\xab', '\x6f', '\xae', '\xd8', '\x17', '\x00', '\x38',
+ '\x3f', '\xbd', '\x12', '\x03', '\x00', '\x38', '\x62', '\xaa',
+ '\x41', '\xb2', '\x3f', '\xbd', '\x42', '\x03', '\x00', '\x38',
+ '\x7a', '\x86', '\xbe', '\x2f', '\x3e', '\x0d', '\xc4', '\x12',
+ '\x08', '\x30', '\x01', '\xa2', '\xe0', '\xa6', '\xc9', '\x10',
+ '\x61', '\x96', '\x04', '\xc2', '\xe0', '\xc6', '\xb7', '\x10',
+ '\x0f', '\x05', '\x41', '\xa2', '\xbe', '\x2f', '\x3e', '\x0d',
+ '\xfc', '\xe1', '\x7e', '\xbe', '\x94', '\xe2', '\xfe', '\x4b',
+ '\x6b', '\x26', '\xeb', '\xa6', '\x5a', '\x90', '\x6a', '\x06',
+ '\x60', '\xa6', '\x7b', '\x86', '\x3f', '\xbd', '\x42', '\x03',
+ '\x00', '\x38', '\x6f', '\xae', '\xf6', '\x17', '\x00', '\x38',
+ '\x3f', '\xbd', '\x12', '\x03', '\x00', '\x38', '\xe2', '\x06',
+ '\x2a', '\x90', '\x74', '\x86', '\x60', '\x16', '\x60', '\x36',
+ '\x6f', '\xae', '\x4c', '\x18', '\x00', '\x38', '\x3f', '\xbd',
+ '\x12', '\x03', '\x00', '\x38', '\x63', '\xae', '\x7b', '\x86',
+ '\x3f', '\xbd', '\x42', '\x03', '\x00', '\x38', '\x01', '\x42',
+ '\xc4', '\x42', '\x08', '\x30', '\x04', '\x12', '\xe2', '\x16',
+ '\xdf', '\x80', '\x0f', '\x05', '\x6f', '\xae', '\xb4', '\x16',
+ '\x00', '\x38', '\x3f', '\xbd', '\x12', '\x03', '\x00', '\x38',
+ '\x10', '\x02', '\xe2', '\x06', '\xad', '\x80', '\x60', '\xa6',
+ '\xbe', '\x4f', '\x3e', '\x0d', '\x05', '\xa1', '\x49', '\x98',
+ '\xc2', '\x92', '\x0a', '\x30', '\xc4', '\x92', '\x0e', '\x30',
+ '\x0f', '\x05', '\x7f', '\xb6', '\x7a', '\x86', '\x6a', '\xb9',
+ '\x5a', '\xa8', '\x7f', '\xb6', '\x0f', '\x05', '\x6a', '\xb9',
+ '\x6a', '\xaa', '\x7f', '\xb6', '\x0f', '\x05', '\x6a', '\xd6',
+ '\x05', '\xa1', '\x4a', '\xaa', '\x4a', '\x94', '\xc2', '\x92',
+ '\x0a', '\x30', '\xc4', '\x92', '\x10', '\x30', '\x0f', '\x05',
+ '\x7f', '\xb6', '\x7a', '\x86', '\x5c', '\xca', '\x6d', '\xb9',
+ '\xdc', '\xcb', '\x7f', '\xb6', '\x4a', '\xa4', '\x6c', '\xca',
+ '\x6d', '\xb9', '\xec', '\xcb', '\x4a', '\xa4', '\x7f', '\xb6',
+ '\x0f', '\x05', '\xfc', '\xe1', '\x7e', '\xbe', '\x84', '\xe2',
+ '\xee', '\xbb', '\x04', '\xa1', '\x49', '\x9a', '\xcf', '\x9e',
+ '\x01', '\x00', '\x06', '\x20', '\x0f', '\x05', '\x24', '\xe0',
+ '\xc1', '\xc3', '\xcf', '\x9e', '\x02', '\x00', '\x0c', '\x20',
+ '\x6b', '\x96', '\xd0', '\x93', '\x69', '\xb7', '\xee', '\xbb',
+ '\x12', '\xe0', '\xc2', '\xc3', '\x6f', '\xae', '\x22', '\x18',
+ '\x00', '\x38', '\x3f', '\xbd', '\x12', '\x03', '\x00', '\x38',
+ '\x0c', '\xe0', '\x0f', '\x05', '\x6c', '\xb6', '\x6e', '\xc6',
+ '\x3f', '\xbd', '\x26', '\x0a', '\x00', '\x38', '\x04', '\xe2',
+ '\x3e', '\x0d', '\xfc', '\xe1', '\x7e', '\xbe', '\x84', '\xe2',
+ '\xfe', '\x0b', '\x6a', '\x06', '\x4f', '\xbc', '\xaa', '\x00',
+ '\x5f', '\xcc', '\x55', '\x05', '\x3f', '\xbd', '\x52', '\x0a',
+ '\x00', '\x38', '\x60', '\xa6', '\x4f', '\xbc', '\x55', '\x00',
+ '\x5f', '\xcc', '\xaa', '\x02', '\xbe', '\x0f', '\x3e', '\xbe',
+ '\x3f', '\x0d', '\x52', '\x0a', '\x00', '\x38', '\xfc', '\xe1',
+ '\x7e', '\xbe', '\x90', '\xe2', '\xfe', '\x3b', '\x6a', '\x26',
+ '\x04', '\xa1', '\x49', '\x9a', '\xcf', '\x9e', '\x02', '\x00',
+ '\x42', '\x20', '\x6b', '\x36', '\x6f', '\x0e', '\x04', '\x0a',
+ '\x00', '\x38', '\xb0', '\xb9', '\x6a', '\x16', '\x62', '\xa6',
+ '\x63', '\xb6', '\xb0', '\xb9', '\x61', '\xd6', '\xf0', '\xd3',
+ '\x1f', '\xdf', '\x40', '\x00', '\x6a', '\x96', '\xf0', '\x93',
+ '\x1f', '\x9f', '\x40', '\x00', '\xe9', '\xd6', '\x14', '\x20',
+ '\x7c', '\x86', '\x2f', '\x1f', '\x40', '\x00', '\x00', '\x00',
+ '\x2f', '\xaf', '\x40', '\x00', '\x00', '\x00', '\xea', '\x16',
+ '\x04', '\x30', '\x0f', '\x05', '\x41', '\xc2', '\x6c', '\xa6',
+ '\xbe', '\x3f', '\x3e', '\x0d', '\x6f', '\x1e', '\x04', '\x0a',
+ '\x00', '\x38', '\xb1', '\xb9', '\x4a', '\x04', '\x0f', '\x0f',
+ '\x40', '\x00', '\x62', '\xa6', '\x63', '\xb6', '\xb1', '\xb9',
+ '\x2f', '\xaf', '\x40', '\x00', '\x00', '\x00', '\xea', '\x06',
+ '\x3a', '\x25', '\xbe', '\x3f', '\x3e', '\x0d', '\xfc', '\xe1',
+ '\x7e', '\xbe', '\xa8', '\xe2', '\xfe', '\x8b', '\x6a', '\x36',
+ '\x04', '\xa1', '\x44', '\x9e', '\xcf', '\x9e', '\x02', '\x00',
+ '\x04', '\x20', '\x41', '\x72', '\x42', '\x72', '\x6f', '\x2e',
+ '\x52', '\x0a', '\x00', '\x38', '\x4f', '\xbc', '\x98', '\x00',
+ '\x4f', '\xcc', '\x55', '\x00', '\xb2', '\xb9', '\x50', '\xb2',
+ '\xe7', '\xb4', '\x6f', '\x1e', '\x04', '\x0a', '\x00', '\x38',
+ '\x63', '\xa6', '\xb1', '\xb9', '\xcf', '\xae', '\x51', '\x00',
+ '\xff', '\x2d', '\x9c', '\x01', '\x63', '\xa6', '\x51', '\xb2',
+ '\xe7', '\xb4', '\xb1', '\xb9', '\xcf', '\xae', '\x52', '\x00',
+ '\xff', '\x2d', '\x8c', '\x01', '\x63', '\xa6', '\x52', '\xb2',
+ '\xe7', '\xb4', '\xb1', '\xb9', '\xcf', '\xae', '\x59', '\x00',
+ '\xff', '\x2d', '\x7c', '\x01', '\x63', '\xa6', '\x24', '\xe1',
+ '\x70', '\x8a', '\x6f', '\xae', '\x3c', '\x18', '\x00', '\x38',
+ '\x3f', '\xbd', '\x12', '\x03', '\x00', '\x38', '\x63', '\xaa',
+ '\x41', '\xb2', '\x3f', '\xbd', '\x42', '\x03', '\x00', '\x38',
+ '\x4f', '\xbc', '\x27', '\x00', '\xe7', '\xb4', '\x63', '\xa6',
+ '\xb1', '\xb9', '\x41', '\x92', '\xea', '\x94', '\x06', '\x32',
+ '\xe3', '\x9b', '\x86', '\x32', '\x4f', '\xbc', '\x2c', '\x00',
+ '\xe7', '\xb4', '\x63', '\xa6', '\xb1', '\xb9', '\x6a', '\x86',
+ '\x55', '\xb2', '\xe7', '\xb4', '\x63', '\xa6', '\xb1', '\xb9',
+ '\x6a', '\x06', '\x6a', '\xb6', '\x04', '\xb2', '\xe7', '\xb4',
+ '\x63', '\xa6', '\xb1', '\xb9', '\xcf', '\xae', '\x30', '\x00',
+ '\x3e', '\x20', '\x63', '\xa6', '\x4f', '\xbc', '\xf0', '\x00',
+ '\x5f', '\xcc', '\x55', '\x05', '\xb2', '\xb9', '\x63', '\xa6',
+ '\x3f', '\xbd', '\x9a', '\x0a', '\x00', '\x38', '\x63', '\xa6',
+ '\x4f', '\xbc', '\x90', '\x00', '\x5f', '\xcc', '\x55', '\x05',
+ '\xb2', '\xb9', '\x44', '\xb8', '\x2b', '\xb6', '\x63', '\xa6',
+ '\xb1', '\xb9', '\x4a', '\x54', '\x0f', '\x5f', '\x80', '\xff',
+ '\x63', '\xa6', '\x4f', '\xbc', '\x98', '\x00', '\x4f', '\xcc',
+ '\x55', '\x00', '\xb2', '\xb9', '\x10', '\xe0', '\x0f', '\x05',
+ '\x0f', '\x02', '\xe7', '\x04', '\x60', '\xb6', '\xb1', '\xb9',
+ '\xcf', '\xae', '\x03', '\x00', '\x35', '\x35', '\x0a', '\x31',
+ '\xd8', '\x8b', '\xc8', '\x82', '\x12', '\xd0', '\x68', '\x46',
+ '\x6f', '\xae', '\x4e', '\x18', '\x00', '\x38', '\x3f', '\xbd',
+ '\x12', '\x03', '\x00', '\x38', '\xd2', '\xe0', '\x7a', '\x86',
+ '\x65', '\x56', '\x94', '\x20', '\x81', '\x42', '\x90', '\xe0',
+ '\x74', '\x86', '\xc2', '\x03', '\x60', '\xb6', '\x2f', '\xb2',
+ '\xe7', '\xb4', '\x6f', '\x1e', '\x04', '\x0a', '\x00', '\x38',
+ '\x63', '\xa6', '\xb1', '\xb9', '\x6a', '\x66', '\x60', '\xb6',
+ '\x30', '\xb2', '\xe7', '\xb4', '\x63', '\xa6', '\xb1', '\xb9',
+ '\xc8', '\xa3', '\x6a', '\x67', '\xc8', '\x63', '\x60', '\xb6',
+ '\x2d', '\xb2', '\xe7', '\xb4', '\x63', '\xa6', '\xb1', '\xb9',
+ '\x6a', '\x26', '\x2e', '\x02', '\xe7', '\x04', '\x63', '\xa6',
+ '\x60', '\xb6', '\xb1', '\xb9', '\xc8', '\xa3', '\x6a', '\x27',
+ '\x65', '\x56', '\x0a', '\x30', '\x01', '\x22', '\x68', '\x96',
+ '\xa4', '\x96', '\x04', '\xe0', '\x81', '\x92', '\x64', '\x96',
+ '\x19', '\x95', '\x63', '\xd6', '\x2d', '\x95', '\x6d', '\x96',
+ '\x24', '\xe1', '\x6d', '\xda', '\x0c', '\x91', '\xed', '\xdb',
+ '\x10', '\x91', '\xe6', '\x6b', '\x14', '\x91', '\xe2', '\x2b',
+ '\x62', '\x26', '\x10', '\xd0', '\x0f', '\x05', '\x24', '\xe1',
+ '\x29', '\x6a', '\x24', '\xe1', '\xe9', '\x9b', '\x81', '\x22',
+ '\xf5', '\x20', '\x0f', '\x05', '\x24', '\xe1', '\x6d', '\xda',
+ '\x06', '\x31', '\xed', '\xda', '\x1e', '\x30', '\x65', '\x56',
+ '\x06', '\x30', '\x01', '\x42', '\x81', '\x42', '\x81', '\x42',
+ '\x65', '\x56', '\x0c', '\x30', '\xe8', '\x46', '\x64', '\x46',
+ '\x69', '\xa0', '\x64', '\x06', '\x08', '\xe0', '\x63', '\xa6',
+ '\x61', '\xb0', '\x64', '\x06', '\x63', '\xa6', '\x4f', '\xbc',
+ '\xf0', '\x00', '\x5f', '\xcc', '\x55', '\x05', '\x3f', '\xbd',
+ '\x52', '\x0a', '\x00', '\x38', '\x12', '\xe0', '\x41', '\xa2',
+ '\x4f', '\xbc', '\xf0', '\x00', '\x5f', '\xcc', '\x55', '\x05',
+ '\x3f', '\xbd', '\x52', '\x0a', '\x00', '\x38', '\x7a', '\x86',
+ '\xbe', '\x8f', '\x04', '\xe2', '\x3e', '\x0d', '\xfc', '\xe1',
+ '\x7e', '\xbe', '\x90', '\xe2', '\xfe', '\x3b', '\x06', '\xa1',
+ '\xa0', '\x0b', '\xff', '\x2d', '\x16', '\x04', '\x6a', '\x26',
+ '\x3f', '\xbd', '\x3e', '\x0b', '\x00', '\x38', '\x6a', '\xa6',
+ '\xff', '\x2d', '\x86', '\x03', '\x41', '\xa2', '\x62', '\xa6',
+ '\x3f', '\xbd', '\x9a', '\x0a', '\x00', '\x38', '\x62', '\xa6',
+ '\x4f', '\xbc', '\x90', '\x00', '\x5f', '\xcc', '\x55', '\x05',
+ '\x3f', '\xbd', '\x52', '\x0a', '\x00', '\x38', '\x6f', '\x1e',
+ '\x04', '\x0a', '\x00', '\x38', '\x62', '\xa6', '\x7b', '\x86',
+ '\xb1', '\xb9', '\x6a', '\x36', '\x04', '\x21', '\x40', '\xbe',
+ '\x4b', '\xb4', '\x2b', '\xb6', '\x62', '\xa6', '\xb1', '\xb9',
+ '\x42', '\x92', '\xc0', '\x9a', '\x1c', '\x20', '\x63', '\xc6',
+ '\xf0', '\xc3', '\x53', '\x94', '\xe9', '\xc6', '\x14', '\x20',
+ '\x63', '\x06', '\x6a', '\xd6', '\xf0', '\xd3', '\x5a', '\x94',
+ '\xe9', '\xd6', '\x0a', '\x20', '\xd0', '\x03', '\x6c', '\x36',
+ '\x6d', '\xa6', '\x63', '\x06', '\xd0', '\x03', '\x6a', '\x07',
+ '\x62', '\xa6', '\x4f', '\xbc', '\xf0', '\x00', '\x5f', '\xcc',
+ '\x55', '\x05', '\x3f', '\xbd', '\x52', '\x0a', '\x00', '\x38',
+ '\xef', '\x0e', '\xc0', '\x00', '\x1f', '\x00', '\xff', '\x3d',
+ '\x48', '\x02', '\x0f', '\x05', '\x60', '\x90', '\x0f', '\x05',
+ '\xef', '\x0e', '\xc4', '\x22', '\x01', '\x00', '\xb0', '\x30',
+ '\x0f', '\x05', '\x20', '\x90', '\x0f', '\x05', '\xef', '\x0e',
+ '\x58', '\x22', '\x01', '\x00', '\xff', '\x3d', '\x5a', '\x01',
+ '\x0f', '\x05', '\xef', '\x0e', '\x5b', '\x22', '\x01', '\x00',
+ '\xff', '\x3d', '\x4e', '\x01', '\x0f', '\x05', '\xff', '\xed',
+ '\xb6', '\x02', '\x0f', '\x05', '\xef', '\x0e', '\xda', '\x22',
+ '\x01', '\x00', '\xff', '\x3d', '\x9c', '\x01', '\x0f', '\x05',
+ '\x14', '\x90', '\x0f', '\x05', '\xef', '\x0e', '\xd6', '\x22',
+ '\x01', '\x00', '\xff', '\x3d', '\x8c', '\x01', '\x0f', '\x05',
+ '\xff', '\xed', '\x94', '\x02', '\x0f', '\x05', '\xef', '\x0e',
+ '\x49', '\x22', '\x04', '\x00', '\xc4', '\x30', '\x0f', '\x05',
+ '\xff', '\xed', '\x84', '\x02', '\x0f', '\x05', '\xef', '\x0e',
+ '\xd7', '\x00', '\x20', '\x00', '\xff', '\x3d', '\x6a', '\x01',
+ '\x0f', '\x05', '\x20', '\x90', '\x0f', '\x05', '\xef', '\x0e',
+ '\xc2', '\x00', '\x1f', '\x00', '\xff', '\x3d', '\x00', '\x02',
+ '\x0f', '\x05', '\xef', '\x0e', '\xc9', '\x00', '\x1f', '\x00',
+ '\xff', '\x3d', '\x18', '\x02', '\x0f', '\x05', '\xff', '\xed',
+ '\x56', '\x02', '\x0f', '\x05', '\xef', '\x0e', '\x4f', '\x00',
+ '\x98', '\x00', '\xff', '\x3d', '\x3c', '\x01', '\x0f', '\x05',
+ '\x12', '\x90', '\x0f', '\x05', '\xef', '\x0e', '\x43', '\x00',
+ '\x98', '\x00', '\x76', '\x30', '\x0f', '\x05', '\xff', '\xed',
+ '\x36', '\x02', '\x0f', '\x05', '\xef', '\x0e', '\xc2', '\x00',
+ '\x98', '\x00', '\xff', '\x2d', '\x2a', '\x02', '\x0f', '\x05',
+ '\x6f', '\x1e', '\x32', '\x19', '\x00', '\x38', '\x61', '\x1a',
+ '\x6f', '\xde', '\x00', '\x00', '\x20', '\x00', '\x06', '\x21',
+ '\xed', '\xdb', '\x0c', '\x21', '\x70', '\x8a', '\x6f', '\x9e',
+ '\x00', '\x00', '\x01', '\x00', '\x10', '\x21', '\xe9', '\x9b',
+ '\x5f', '\xd2', '\x14', '\x21', '\xed', '\xdb', '\x6f', '\x9e',
+ '\x00', '\x00', '\x1f', '\x00', '\x18', '\x21', '\xe9', '\x9b',
+ '\x1f', '\xdc', '\xe1', '\x7f', '\x1c', '\x21', '\xed', '\xdb',
+ '\x41', '\x92', '\x20', '\x21', '\xe9', '\x9b', '\x6f', '\xde',
+ '\x00', '\x80', '\x1f', '\x00', '\x24', '\x21', '\xed', '\xdb',
+ '\x5f', '\xdc', '\x00', '\x20', '\x28', '\x21', '\xed', '\xdb',
+ '\x42', '\xd2', '\x2c', '\x21', '\xed', '\xdb', '\x6f', '\xde',
+ '\x00', '\xc0', '\x1f', '\x00', '\xff', '\xed', '\x16', '\x01',
+ '\x0f', '\x05', '\x6f', '\x1e', '\x2e', '\x19', '\x00', '\x38',
+ '\x61', '\x1a', '\x6f', '\x9e', '\x00', '\x00', '\x20', '\x00',
+ '\x06', '\x21', '\xe9', '\x9b', '\x0c', '\x21', '\x70', '\x8a',
+ '\x5f', '\x9c', '\x00', '\x40', '\x10', '\x21', '\xe9', '\x9b',
+ '\x41', '\xd2', '\x14', '\x21', '\xed', '\xdb', '\x18', '\x21',
+ '\xe9', '\x9b', '\x5f', '\x9c', '\x00', '\x20', '\x1c', '\x21',
+ '\xe9', '\x9b', '\x42', '\x92', '\x20', '\x21', '\xe9', '\x9b',
+ '\x1f', '\x9c', '\xfe', '\x7f', '\x24', '\x21', '\xe9', '\x9b',
+ '\x28', '\x21', '\xe9', '\x9b', '\x2c', '\x21', '\xed', '\xdb',
+ '\x6f', '\x9e', '\x00', '\x00', '\x01', '\x00', '\x30', '\x21',
+ '\xe9', '\x9b', '\x34', '\x21', '\xe9', '\x9b', '\x58', '\xe0',
+ '\x5f', '\xd2', '\x6f', '\x1e', '\x26', '\x19', '\x00', '\x38',
+ '\x61', '\x1a', '\x6f', '\x9e', '\x00', '\x00', '\x10', '\x00',
+ '\x06', '\x21', '\xe9', '\x9b', '\x0c', '\x21', '\x70', '\x8a',
+ '\x5f', '\x9c', '\x00', '\x40', '\x10', '\x21', '\xe9', '\x9b',
+ '\x41', '\xd2', '\x14', '\x21', '\xed', '\xdb', '\x18', '\x21',
+ '\xe9', '\x9b', '\x5f', '\x9c', '\x00', '\x20', '\x1c', '\x21',
+ '\xe9', '\x9b', '\x42', '\x92', '\x20', '\x21', '\xe9', '\x9b',
+ '\x1f', '\x9c', '\xfe', '\x7f', '\x24', '\x21', '\xe9', '\x9b',
+ '\x28', '\x21', '\xe9', '\x9b', '\x2c', '\x21', '\xed', '\xdb',
+ '\x6f', '\x9e', '\x00', '\x00', '\x01', '\x00', '\x30', '\x21',
+ '\xe9', '\x9b', '\x34', '\x21', '\xe9', '\x9b', '\x4f', '\xd2',
+ '\x38', '\x21', '\xed', '\xdb', '\xff', '\xed', '\x3e', '\x01',
+ '\x0f', '\x05', '\x6f', '\x1e', '\x2a', '\x19', '\x00', '\x38',
+ '\x61', '\x1a', '\x6f', '\x9e', '\x00', '\x00', '\x10', '\x00',
+ '\x06', '\x21', '\xe9', '\x9b', '\x0c', '\x21', '\x70', '\x8a',
+ '\x6f', '\xde', '\x00', '\x00', '\x01', '\x00', '\x10', '\x21',
+ '\xed', '\xdb', '\x4f', '\x92', '\x14', '\x21', '\xe9', '\x9b',
+ '\x6f', '\xde', '\x00', '\x00', '\x0f', '\x00', '\x18', '\x21',
+ '\xed', '\xdb', '\x1f', '\x9c', '\xf1', '\x7f', '\x1c', '\x21',
+ '\xe9', '\x9b', '\x41', '\x92', '\x20', '\x21', '\xe9', '\x9b',
+ '\x6f', '\xde', '\x00', '\x80', '\x0f', '\x00', '\x24', '\x21',
+ '\xed', '\xdb', '\x5f', '\xdc', '\x00', '\x20', '\x28', '\x21',
+ '\xed', '\xdb', '\x42', '\xd2', '\x2c', '\x21', '\xed', '\xdb',
+ '\x6f', '\xde', '\x00', '\xc0', '\x0f', '\x00', '\x30', '\x21',
+ '\xed', '\xdb', '\x5f', '\xdc', '\x00', '\x40', '\x34', '\x21',
+ '\xed', '\xdb', '\x38', '\x21', '\xe9', '\x9b', '\xce', '\xe0',
+ '\x0f', '\x05', '\x6f', '\x1e', '\x2e', '\x19', '\x00', '\x38',
+ '\x61', '\x1a', '\x6f', '\x9e', '\x00', '\x00', '\x20', '\x00',
+ '\x06', '\x21', '\xe9', '\x9b', '\x0c', '\x21', '\x70', '\x8a',
+ '\x5f', '\xdc', '\x00', '\x20', '\x10', '\x21', '\xed', '\xdb',
+ '\x48', '\x92', '\x14', '\x21', '\xe9', '\x9b', '\x6f', '\x9e',
+ '\x00', '\x00', '\x01', '\x00', '\x18', '\x21', '\xe9', '\x9b',
+ '\x1c', '\x21', '\xe9', '\x9b', '\x62', '\xe0', '\x5f', '\xd2',
+ '\x6f', '\x1e', '\x32', '\x19', '\x00', '\x38', '\x61', '\x1a',
+ '\x6f', '\x9e', '\x00', '\x00', '\x20', '\x00', '\x06', '\x21',
+ '\xe9', '\x9b', '\x0c', '\x21', '\x70', '\x8a', '\x6f', '\xde',
+ '\x00', '\x00', '\x01', '\x00', '\x10', '\x21', '\xed', '\xdb',
+ '\x26', '\xe0', '\x5f', '\x92', '\x6f', '\x1e', '\x36', '\x19',
+ '\x00', '\x38', '\x61', '\x1a', '\x6f', '\x9e', '\x00', '\x00',
+ '\x40', '\x00', '\x06', '\x21', '\xe9', '\x9b', '\x0c', '\x21',
+ '\x70', '\x8a', '\x6f', '\xde', '\x00', '\x00', '\x01', '\x00',
+ '\x10', '\x21', '\xed', '\xdb', '\x4f', '\x9c', '\x3f', '\x00',
+ '\x14', '\x21', '\xe9', '\x9b', '\x6f', '\xde', '\x00', '\x00',
+ '\x1f', '\x00', '\x18', '\x21', '\xed', '\xdb', '\x5f', '\x9c',
+ '\x00', '\x20', '\x1c', '\x21', '\xe9', '\x9b', '\x48', '\xd2',
+ '\x20', '\x21', '\xed', '\xdb', '\x30', '\xe0', '\x0f', '\x05',
+ '\x04', '\x21', '\x49', '\x9a', '\x6f', '\xae', '\x6a', '\x18',
+ '\x00', '\x38', '\xcf', '\x9e', '\x01', '\x00', '\x08', '\x30',
+ '\x0f', '\x05', '\x6f', '\xae', '\x7c', '\x18', '\x00', '\x38',
+ '\x3f', '\xbd', '\x12', '\x03', '\x00', '\x38', '\x62', '\xaa',
+ '\x41', '\xb2', '\x3f', '\xbd', '\x42', '\x03', '\x00', '\x38',
+ '\x7a', '\x86', '\xbe', '\x3f', '\x3e', '\x0d', '\x6f', '\x3e',
+ '\x12', '\x03', '\x00', '\x38', '\x6f', '\xae', '\x94', '\x18',
+ '\x00', '\x38', '\xb3', '\xb9', '\x04', '\x21', '\x40', '\x9e',
+ '\xcf', '\x9e', '\x01', '\x00', '\x0c', '\x20', '\x42', '\xd2',
+ '\x6f', '\xae', '\x9c', '\x18', '\x00', '\x38', '\xb3', '\xb9',
+ '\x42', '\xd2', '\xc0', '\xda', '\x32', '\x20', '\x47', '\xc2',
+ '\x06', '\x21', '\x6d', '\x9e', '\xc1', '\x93', '\xed', '\x9b',
+ '\x62', '\xd6', '\x0c', '\xd1', '\x69', '\x9a', '\xc1', '\x93',
+ '\x0c', '\xd1', '\xe9', '\x9b', '\x10', '\xd1', '\x69', '\x9a',
+ '\xc1', '\x93', '\x10', '\xd1', '\xe9', '\x9b', '\x81', '\xc2',
+ '\xe9', '\x60', '\x0c', '\xd2', '\x6f', '\xae', '\x9e', '\x18',
+ '\x00', '\x38', '\x3f', '\xbd', '\x12', '\x03', '\x00', '\x38',
+ '\x6f', '\x0e', '\x12', '\x03', '\x00', '\x38', '\x6f', '\xae',
+ '\xa0', '\x18', '\x00', '\x38', '\xb0', '\xb9', '\x61', '\xa6',
+ '\xb0', '\xb9', '\x6f', '\xae', '\xd2', '\x17', '\x00', '\x38',
+ '\xb0', '\xb9', '\x62', '\xaa', '\x41', '\xb2', '\x3f', '\xbd',
+ '\x42', '\x03', '\x00', '\x38', '\x41', '\xa2', '\xbe', '\x3f',
+ '\x3e', '\x0d', '\xfc', '\xe1', '\x7e', '\xbe', '\x8c', '\xe2',
+ '\xfe', '\x2b', '\x6a', '\x16', '\x6b', '\x26', '\x6f', '\x0e',
+ '\x9a', '\x0a', '\x00', '\x38', '\xb0', '\xb9', '\x61', '\xa6',
+ '\x4f', '\xbc', '\x80', '\x00', '\x5f', '\xcc', '\x55', '\x05',
+ '\x3f', '\xbd', '\x52', '\x0a', '\x00', '\x38', '\x61', '\xa6',
+ '\xb0', '\xb9', '\x04', '\x11', '\x49', '\x9a', '\xcf', '\x9e',
+ '\x02', '\x00', '\x10', '\x20', '\x0f', '\x05', '\x6f', '\x9e',
+ '\x30', '\x00', '\x30', '\x00', '\x61', '\x29', '\xe9', '\x9b',
+ '\xbe', '\x2f', '\x3e', '\x0d', '\x4f', '\x9c', '\x30', '\x00',
+ '\x61', '\x29', '\xd9', '\x9b', '\xbe', '\x2f', '\x3e', '\x0d',
+ '\x84', '\xe2', '\xfe', '\x0b', '\x06', '\xa1', '\xeb', '\xba',
+ '\x10', '\x10', '\x0f', '\x05', '\x7a', '\x86', '\x7f', '\xb6',
+ '\xbe', '\x0f', '\x10', '\xa1', '\x6a', '\xaa', '\x7f', '\xb6',
+ '\xbe', '\x0f', '\x70', '\x86', '\x0c', '\xa1', '\xeb', '\xba',
+ '\x22', '\x10', '\x7d', '\x86', '\x14', '\xa1', '\xed', '\xda',
+ '\x10', '\x00', '\x79', '\x86', '\x10', '\xa1', '\x6c', '\xca',
+ '\x01', '\x92', '\x14', '\xa1', '\xe9', '\x9a', '\xf9', '\x10',
+ '\x2c', '\xd6', '\x0c', '\xa1', '\x29', '\xda', '\xe9', '\xb6',
+ '\xd1', '\x10', '\x0f', '\x05', '\x01', '\x02', '\xc7', '\x02',
+ '\xd3', '\x80', '\x0c', '\xa2', '\x7a', '\x86', '\x7f', '\xb6',
+ '\xbe', '\x0f', '\x84', '\xe2', '\xfe', '\x0b', '\x6a', '\x06',
+ '\x6b', '\xa6', '\x6d', '\xb6', '\x7d', '\x86', '\xeb', '\xd6',
+ '\x48', '\xa0', '\x0f', '\x05', '\x60', '\x9a', '\x2d', '\x96',
+ '\x49', '\xa5', '\x59', '\x9a', '\x4c', '\xd5', '\xd9', '\x9a',
+ '\x32', '\x30', '\x02', '\xd2', '\x82', '\xd2', '\x6b', '\x96',
+ '\x2a', '\x96', '\xe9', '\xa6', '\x20', '\x00', '\x6a', '\xc6',
+ '\x60', '\xc9', '\x59', '\x9a', '\xdf', '\x9e', '\xff', '\xff',
+ '\x0a', '\x30', '\x02', '\xc2', '\x82', '\xc2', '\x42', '\xa2',
+ '\x7f', '\xb6', '\xbe', '\x0f', '\x6b', '\x96', '\x2a', '\x96',
+ '\xe9', '\xc6', '\xe5', '\x10', '\x0f', '\x05', '\x41', '\xa2',
+ '\x7f', '\xb6', '\xbe', '\x0f', '\xeb', '\xd6', '\xbd', '\xb0',
+ '\x0f', '\x05', '\x7a', '\x86', '\x7f', '\xb6', '\xbe', '\x0f',
+ '\xfc', '\xe1', '\x7e', '\xbe', '\x90', '\xe2', '\xfe', '\x3b',
+ '\x73', '\x86', '\x72', '\x86', '\x6f', '\x0e', '\x3a', '\x19',
+ '\x00', '\x38', '\x41', '\x12', '\x04', '\x01', '\xc1', '\x1b',
+ '\xcf', '\x1e', '\x01', '\x00', '\x04', '\x30', '\x42', '\x92',
+ '\x44', '\x92', '\x05', '\x01', '\xc9', '\x9b', '\x60', '\xa6',
+ '\x3f', '\xbd', '\x2e', '\x0d', '\x00', '\x38', '\x6a', '\xa6',
+ '\x0c', '\x20', '\x0f', '\x05', '\xc1', '\x13', '\xcf', '\x1e',
+ '\x03', '\x00', '\xd9', '\x80', '\x0f', '\x05', '\x06', '\x01',
+ '\x23', '\x3a', '\x0f', '\x0c', '\x6c', '\x00', '\x01', '\x22',
+ '\xc1', '\x22', '\xc7', '\x80', '\x63', '\xa6', '\xbe', '\x3f',
+ '\x3e', '\x0d', '\xfc', '\xe1', '\x7e', '\xbe', '\x98', '\xe2',
+ '\xfe', '\x5b', '\x6a', '\x16', '\x6b', '\x56', '\x6c', '\x36',
+ '\x70', '\x86', '\xed', '\x06', '\x74', '\xa0', '\x6d', '\x46',
+ '\x05', '\x11', '\x49', '\x9a', '\xcf', '\x9e', '\x02', '\x00',
+ '\x12', '\x20', '\x0f', '\x05', '\x43', '\x05', '\x59', '\x9a',
+ '\xdf', '\x9e', '\xff', '\xff', '\x54', '\x30', '\x42', '\x22',
+ '\x05', '\x11', '\x49', '\x9a', '\xcf', '\x9e', '\x04', '\x00',
+ '\x0e', '\x20', '\x61', '\xa6', '\x43', '\x05', '\x69', '\x9a',
+ '\xff', '\x92', '\x3e', '\x30', '\x44', '\x22', '\x61', '\xa6',
+ '\x3f', '\xbd', '\x9a', '\x0a', '\x00', '\x38', '\x61', '\xa6',
+ '\x4f', '\xbc', '\xa0', '\x00', '\x5f', '\xcc', '\x55', '\x05',
+ '\x3f', '\xbd', '\x52', '\x0a', '\x00', '\x38', '\x65', '\xb6',
+ '\x20', '\xb6', '\x63', '\xc6', '\x20', '\xc6', '\x61', '\xa6',
+ '\x3f', '\xbd', '\x26', '\x0a', '\x00', '\x38', '\x6a', '\x26',
+ '\x61', '\xa6', '\x65', '\xb6', '\x20', '\xb6', '\x3f', '\xbd',
+ '\xc6', '\x0a', '\x00', '\x38', '\x6a', '\xa6', '\xf3', '\x20',
+ '\x61', '\xa6', '\x22', '\x06', '\xe4', '\x06', '\x91', '\xb0',
+ '\x0f', '\x05', '\xbe', '\x5f', '\x3e', '\x0d', '\xfc', '\xe1',
+ '\x7e', '\xbe', '\xa4', '\xe2', '\xfe', '\x8b', '\x6a', '\x16',
+ '\x6b', '\x06', '\x6c', '\x86', '\x3f', '\xbd', '\x58', '\x12',
+ '\x00', '\x38', '\x6a', '\x96', '\x1a', '\x30', '\x41', '\xa2',
+ '\x60', '\xd6', '\x28', '\xd6', '\xe9', '\xd6', '\x14', '\x80',
+ '\x0f', '\x05', '\x6f', '\xae', '\xa4', '\x18', '\x00', '\x38',
+ '\x3f', '\xbd', '\x12', '\x03', '\x00', '\x38', '\x42', '\xa2',
+ '\xbe', '\x8f', '\x3e', '\x0d', '\x6f', '\xce', '\x40', '\x19',
+ '\x00', '\x38', '\x6c', '\xca', '\xec', '\x06', '\x1e', '\x10',
+ '\xec', '\xd6', '\x6f', '\x9e', '\x12', '\x1a', '\x00', '\x38',
+ '\x09', '\x91', '\x70', '\x8a', '\x16', '\x91', '\xe1', '\x1b',
+ '\xac', '\x06', '\x1a', '\x91', '\xe0', '\x0b', '\x1e', '\x91',
+ '\xe8', '\x8b', '\x74', '\xe0', '\x0f', '\x05', '\x5a', '\x80',
+ '\x6c', '\x96', '\x6f', '\xde', '\x12', '\x1a', '\x00', '\x38',
+ '\x01', '\xd1', '\xe1', '\x1b', '\x05', '\xd1', '\xe0', '\x0b',
+ '\xa0', '\x96', '\x09', '\xd1', '\xe9', '\x9b', '\x29', '\x16',
+ '\x16', '\xd1', '\xe1', '\x1b', '\x1a', '\xd1', '\x70', '\x8a',
+ '\x68', '\xc6', '\xa9', '\xc6', '\x1e', '\xd1', '\xec', '\xcb',
+ '\x46', '\xe0', '\x0f', '\x05', '\x6f', '\xae', '\xc0', '\x18',
+ '\x00', '\x38', '\x3f', '\xbd', '\x12', '\x03', '\x00', '\x38',
+ '\x44', '\xa2', '\xbe', '\x8f', '\x3e', '\x0d', '\x6f', '\xae',
+ '\xd4', '\x18', '\x00', '\x38', '\x3f', '\xbd', '\x12', '\x03',
+ '\x00', '\x38', '\x60', '\xa6', '\x41', '\xb2', '\x3f', '\xbd',
+ '\x42', '\x03', '\x00', '\x38', '\x43', '\xa2', '\xbe', '\x8f',
+ '\x3e', '\x0d', '\x6f', '\x9e', '\x12', '\x1a', '\x00', '\x38',
+ '\x01', '\x91', '\xe1', '\x1b', '\x05', '\x91', '\xe0', '\x0b',
+ '\x09', '\x91', '\xe8', '\x8b', '\x1e', '\x91', '\x70', '\x8a',
+ '\x6f', '\xce', '\x12', '\x1a', '\x00', '\x38', '\x7c', '\x0a',
+ '\x0d', '\xc1', '\x70', '\x8a', '\x11', '\xc1', '\x70', '\x8a',
+ '\x15', '\xc1', '\x79', '\x0e', '\x7f', '\x0d', '\x34', '\x1a',
+ '\x00', '\x38', '\x70', '\x8a', '\x7f', '\x0d', '\x38', '\x1a',
+ '\x00', '\x38', '\x70', '\x8a', '\x0d', '\x91', '\xe8', '\x8a',
+ '\xff', '\x8d', '\xc0', '\x01', '\x75', '\x86', '\x65', '\x56',
+ '\x04', '\x20', '\x6c', '\xd6', '\x15', '\xd2', '\x65', '\x96',
+ '\x29', '\x55', '\x65', '\x36', '\x23', '\x95', '\x09', '\xd1',
+ '\x69', '\x9a', '\x24', '\x30', '\x2c', '\x36', '\x0d', '\xd1',
+ '\xe9', '\x9a', '\x1c', '\x80', '\x0f', '\x05', '\x09', '\x31',
+ '\x69', '\x9a', '\x10', '\x30', '\x0f', '\x05', '\x83', '\x0b',
+ '\x0a', '\x20', '\x0f', '\x05', '\x0d', '\x31', '\xe9', '\x9a',
+ '\x06', '\x20', '\x0f', '\x05', '\x65', '\x56', '\x35', '\x35',
+ '\x11', '\x31', '\x63', '\x3a', '\xca', '\x32', '\x4d', '\x90',
+ '\x65', '\x96', '\x29', '\x55', '\x65', '\x36', '\x23', '\x95',
+ '\x2f', '\x3e', '\x12', '\x1a', '\x00', '\x38', '\x05', '\x31',
+ '\x64', '\x4a', '\x0d', '\x31', '\x69', '\x9a', '\x29', '\x46',
+ '\x01', '\x31', '\x27', '\x9a', '\x65', '\xa6', '\xc3', '\xa3',
+ '\xa5', '\xa6', '\xc2', '\xa3', '\xa5', '\xa6', '\xc2', '\xa3',
+ '\x2f', '\xae', '\x3a', '\x19', '\x00', '\x38', '\x64', '\xb6',
+ '\x3f', '\xbd', '\xa8', '\x11', '\x00', '\x38', '\x83', '\x0b',
+ '\x24', '\x30', '\x6a', '\x66', '\x65', '\xa6', '\xc3', '\xa3',
+ '\xa5', '\xa6', '\xc2', '\xa3', '\xa5', '\xa6', '\xc2', '\xa3',
+ '\x2f', '\xae', '\x3a', '\x19', '\x00', '\x38', '\x64', '\xb6',
+ '\x3f', '\xbd', '\xc6', '\x0a', '\x00', '\x38', '\x6a', '\xa6',
+ '\xe5', '\x20', '\x65', '\xa6', '\x73', '\x0a', '\x65', '\x26',
+ '\xc3', '\x23', '\xa5', '\x26', '\xc2', '\x23', '\xa5', '\x26',
+ '\xc2', '\x23', '\x2f', '\x2e', '\x3a', '\x19', '\x00', '\x38',
+ '\x62', '\xa6', '\x4f', '\xbc', '\xf0', '\x00', '\x5f', '\xcc',
+ '\x55', '\x05', '\x3f', '\xbd', '\x52', '\x0a', '\x00', '\x38',
+ '\x62', '\xa6', '\x64', '\xb6', '\x67', '\xc6', '\x66', '\xd6',
+ '\x3f', '\xbd', '\xfa', '\x11', '\x00', '\x38', '\x4a', '\xa6',
+ '\x28', '\x20', '\x7b', '\x86', '\x0d', '\x31', '\x69', '\xde',
+ '\x26', '\xd6', '\xe9', '\xdb', '\x11', '\x31', '\x70', '\x8a',
+ '\x62', '\xaa', '\x24', '\xa6', '\x3f', '\xbd', '\x42', '\x03',
+ '\x00', '\x38', '\x6f', '\xae', '\xde', '\x18', '\x00', '\x38',
+ '\x3f', '\xbd', '\x12', '\x03', '\x00', '\x38', '\xaa', '\xe0',
+ '\x0f', '\x05', '\xcf', '\xae', '\x01', '\x00', '\x4c', '\x30',
+ '\x0f', '\x05', '\xcf', '\xae', '\x02', '\x00', '\x46', '\x20',
+ '\x65', '\xa6', '\x62', '\xaa', '\x24', '\xa6', '\x6f', '\x1e',
+ '\x42', '\x03', '\x00', '\x38', '\x7b', '\x86', '\xb1', '\xb9',
+ '\x6f', '\x0e', '\x12', '\x03', '\x00', '\x38', '\x6f', '\xae',
+ '\xf2', '\x18', '\x00', '\x38', '\xb0', '\xb9', '\x66', '\xa6',
+ '\x7b', '\x86', '\xb1', '\xb9', '\x6f', '\xae', '\xfe', '\x18',
+ '\x00', '\x38', '\xb0', '\xb9', '\x62', '\xa6', '\x64', '\xb6',
+ '\x3f', '\xbd', '\x5a', '\x11', '\x00', '\x38', '\x41', '\x92',
+ '\xc3', '\x9b', '\x11', '\x31', '\x6d', '\x9e', '\x01', '\x92',
+ '\x58', '\xe0', '\xed', '\x9b', '\x65', '\xa6', '\xc3', '\xa3',
+ '\xa5', '\xa6', '\xc2', '\xa3', '\xa5', '\xa6', '\xc2', '\xa3',
+ '\x6f', '\xad', '\x3a', '\x19', '\x00', '\x38', '\x62', '\xae',
+ '\x24', '\xa6', '\x6f', '\x1e', '\x42', '\x03', '\x00', '\x38',
+ '\x7b', '\x86', '\xb1', '\xb9', '\x6f', '\x0e', '\x12', '\x03',
+ '\x00', '\x38', '\x6f', '\xae', '\x06', '\x19', '\x00', '\x38',
+ '\xb0', '\xb9', '\x66', '\xa6', '\x7b', '\x86', '\xb1', '\xb9',
+ '\x6f', '\xae', '\xfe', '\x18', '\x00', '\x38', '\xb0', '\xb9',
+ '\x62', '\xa6', '\x64', '\xb6', '\x67', '\xc6', '\x66', '\xd6',
+ '\x3f', '\xbd', '\xaa', '\x12', '\x00', '\x38', '\x0d', '\x31',
+ '\x6d', '\x9e', '\x26', '\x96', '\xed', '\x9b', '\x11', '\x31',
+ '\x70', '\x8a', '\x6f', '\xce', '\x12', '\x1a', '\x00', '\x38',
+ '\x0d', '\xc1', '\x69', '\x9a', '\x7f', '\x0d', '\x34', '\x1a',
+ '\x00', '\x38', '\x29', '\x9a', '\xe8', '\x96', '\xff', '\x1d',
+ '\x44', '\xfe', '\x0f', '\x05', '\x75', '\x86', '\x6f', '\x2e',
+ '\x3a', '\x19', '\x00', '\x38', '\x6f', '\x1e', '\x12', '\x1a',
+ '\x00', '\x38', '\x09', '\x11', '\xa0', '\x0b', '\x4c', '\x30',
+ '\x7b', '\x86', '\x62', '\xaa', '\x3f', '\xbd', '\x42', '\x03',
+ '\x00', '\x38', '\x6f', '\xae', '\x12', '\x19', '\x00', '\x38',
+ '\x3f', '\xbd', '\x12', '\x03', '\x00', '\x38', '\x70', '\x86',
+ '\x09', '\x11', '\xe0', '\x0a', '\x22', '\x00', '\x0f', '\x05',
+ '\x05', '\x11', '\x29', '\x0a', '\x01', '\x11', '\x6d', '\xda',
+ '\x62', '\x99', '\x59', '\x9a', '\x4d', '\x05', '\xd9', '\x9a',
+ '\xff', '\x2d', '\x9a', '\xfd', '\x0f', '\x05', '\x02', '\x02',
+ '\x09', '\x11', '\xe0', '\x0a', '\xe3', '\x10', '\x0f', '\x05',
+ '\x6f', '\xae', '\x22', '\x19', '\x00', '\x38', '\x3f', '\xbd',
+ '\x12', '\x03', '\x00', '\x38', '\x0f', '\x2c', '\x6c', '\x00',
+ '\x01', '\x52', '\xc1', '\x52', '\xa5', '\x80', '\x15', '\x12',
+ '\x7a', '\x86', '\xbe', '\x8f', '\x3e', '\x0d', '\x00', '\x00',
+ '\x7f', '\xb6', '\x0f', '\x05', '\x00', '\x00', '\x00', '\x00',
+ '\x0d', '\x0a', '\x0d', '\x0a', '\x44', '\x65', '\x76', '\x69',
+ '\x63', '\x65', '\x20', '\x49', '\x44', '\x20', '\x3d', '\x20',
+ '\x00', '\x00', '\x43', '\x68', '\x65', '\x63', '\x6b', '\x73',
+ '\x75', '\x6d', '\x20', '\x6f', '\x66', '\x20', '\x62', '\x6f',
+ '\x6f', '\x74', '\x6c', '\x6f', '\x61', '\x64', '\x65', '\x72',
+ '\x20', '\x69', '\x73', '\x20', '\x00', '\x00', '\x57', '\x61',
+ '\x69', '\x74', '\x69', '\x6e', '\x67', '\x20', '\x66', '\x6f',
+ '\x72', '\x20', '\x6c', '\x6f', '\x61', '\x64', '\x20', '\x69',
+ '\x6e', '\x66', '\x6f', '\x2e', '\x0d', '\x0a', '\x00', '\x00',
+ '\x47', '\x6f', '\x74', '\x20', '\x6c', '\x6f', '\x61', '\x64',
+ '\x20', '\x69', '\x6e', '\x66', '\x6f', '\x2e', '\x0d', '\x0a',
+ '\x00', '\x00', '\x50', '\x41', '\x43', '\x4b', '\x45', '\x54',
+ '\x5f', '\x49', '\x4e', '\x46', '\x4f', '\x0d', '\x0a', '\x00',
+ '\x53', '\x45', '\x54', '\x5f', '\x52', '\x45', '\x47', '\x49',
+ '\x53', '\x54', '\x45', '\x52', '\x0d', '\x0a', '\x00', '\x00',
+ '\x47', '\x45', '\x54', '\x5f', '\x52', '\x45', '\x47', '\x49',
+ '\x53', '\x54', '\x45', '\x52', '\x0d', '\x0a', '\x00', '\x00',
+ '\x50', '\x41', '\x55', '\x53', '\x45', '\x5f', '\x4c', '\x4f',
+ '\x4f', '\x50', '\x0d', '\x0a', '\x00', '\x00', '\x4d', '\x45',
+ '\x4d', '\x5f', '\x56', '\x45', '\x52', '\x49', '\x46', '\x59',
+ '\x0d', '\x0a', '\x00', '\x00', '\x76', '\x65', '\x72', '\x69',
+ '\x66', '\x79', '\x20', '\x66', '\x61', '\x69', '\x6c', '\x65',
+ '\x64', '\x0d', '\x0a', '\x00', '\x4d', '\x45', '\x4d', '\x5f',
+ '\x54', '\x45', '\x53', '\x54', '\x0d', '\x0a', '\x00', '\x00',
+ '\x23', '\x23', '\x23', '\x20', '\x4d', '\x65', '\x6d', '\x6f',
+ '\x72', '\x79', '\x20', '\x74', '\x65', '\x73', '\x74', '\x20',
+ '\x66', '\x61', '\x69', '\x6c', '\x65', '\x64', '\x20', '\x61',
+ '\x74', '\x20', '\x00', '\x00', '\x50', '\x61', '\x73', '\x73',
+ '\x65', '\x64', '\x20', '\x6d', '\x65', '\x6d', '\x6f', '\x72',
+ '\x79', '\x20', '\x74', '\x65', '\x73', '\x74', '\x2e', '\x0d',
+ '\x0a', '\x00', '\x4d', '\x45', '\x4d', '\x5f', '\x44', '\x55',
+ '\x4d', '\x50', '\x0d', '\x0a', '\x00', '\x00', '\x4d', '\x45',
+ '\x4d', '\x5f', '\x43', '\x4c', '\x45', '\x41', '\x52', '\x0d',
+ '\x0a', '\x00', '\x46', '\x4c', '\x41', '\x53', '\x48', '\x0d',
+ '\x0a', '\x00', '\x4a', '\x55', '\x4d', '\x50', '\x0d', '\x0a',
+ '\x00', '\x00', '\x45', '\x4e', '\x44', '\x0d', '\x0a', '\x00',
+ '\x23', '\x23', '\x23', '\x20', '\x55', '\x6e', '\x6b', '\x6e',
+ '\x6f', '\x77', '\x6e', '\x20', '\x74', '\x79', '\x70', '\x65',
+ '\x3a', '\x20', '\x00', '\x00', '\x43', '\x68', '\x65', '\x63',
+ '\x6b', '\x73', '\x75', '\x6d', '\x20', '\x6f', '\x66', '\x20',
+ '\x66', '\x69', '\x6c', '\x65', '\x20', '\x69', '\x73', '\x20',
+ '\x00', '\x00', '\x23', '\x23', '\x23', '\x20', '\x4d', '\x65',
+ '\x6d', '\x6f', '\x72', '\x79', '\x20', '\x74', '\x65', '\x73',
+ '\x74', '\x20', '\x31', '\x20', '\x66', '\x61', '\x69', '\x6c',
+ '\x65', '\x64', '\x20', '\x61', '\x74', '\x20', '\x00', '\x00',
+ '\x23', '\x23', '\x23', '\x20', '\x4d', '\x65', '\x6d', '\x6f',
+ '\x72', '\x79', '\x20', '\x74', '\x65', '\x73', '\x74', '\x20',
+ '\x32', '\x20', '\x66', '\x61', '\x69', '\x6c', '\x65', '\x64',
+ '\x20', '\x61', '\x74', '\x20', '\x00', '\x00', '\x20', '\x3a',
+ '\x00', '\x00', '\x38', '\x4d', '\x62', '\x20', '\x42', '\x42',
+ '\x00', '\x00', '\x38', '\x4d', '\x62', '\x20', '\x54', '\x42',
+ '\x00', '\x00', '\x31', '\x36', '\x4d', '\x62', '\x20', '\x42',
+ '\x42', '\x00', '\x31', '\x36', '\x4d', '\x62', '\x20', '\x54',
+ '\x42', '\x00', '\x33', '\x32', '\x4d', '\x62', '\x20', '\x54',
+ '\x42', '\x00', '\x55', '\x6e', '\x73', '\x75', '\x70', '\x70',
+ '\x6f', '\x72', '\x74', '\x65', '\x64', '\x20', '\x69', '\x6e',
+ '\x74', '\x65', '\x72', '\x6c', '\x65', '\x61', '\x76', '\x65',
+ '\x21', '\x0a', '\x00', '\x00', '\x46', '\x6f', '\x75', '\x6e',
+ '\x64', '\x20', '\x31', '\x20', '\x78', '\x20', '\x43', '\x46',
+ '\x49', '\x20', '\x61', '\x74', '\x20', '\x00', '\x54', '\x6f',
+ '\x6f', '\x20', '\x6d', '\x61', '\x6e', '\x79', '\x20', '\x72',
+ '\x65', '\x67', '\x69', '\x6f', '\x6e', '\x73', '\x20', '\x6f',
+ '\x6e', '\x20', '\x63', '\x68', '\x69', '\x70', '\x21', '\x0a',
+ '\x00', '\x00', '\x4e', '\x6f', '\x20', '\x73', '\x69', '\x6e',
+ '\x67', '\x6c', '\x65', '\x20', '\x78', '\x31', '\x36', '\x20',
+ '\x61', '\x74', '\x20', '\x00', '\x4e', '\x6f', '\x20', '\x69',
+ '\x6e', '\x74', '\x65', '\x72', '\x6c', '\x65', '\x61', '\x76',
+ '\x65', '\x64', '\x20', '\x78', '\x31', '\x36', '\x20', '\x61',
+ '\x74', '\x20', '\x00', '\x00', '\x46', '\x6f', '\x75', '\x6e',
+ '\x64', '\x20', '\x00', '\x00', '\x31', '\x00', '\x32', '\x00',
+ '\x20', '\x78', '\x20', '\x00', '\x46', '\x61', '\x74', '\x61',
+ '\x6c', '\x3a', '\x20', '\x66', '\x6c', '\x61', '\x73', '\x68',
+ '\x20', '\x69', '\x73', '\x20', '\x74', '\x6f', '\x6f', '\x20',
+ '\x73', '\x6d', '\x61', '\x6c', '\x6c', '\x2e', '\x0a', '\x00',
+ '\x53', '\x65', '\x63', '\x74', '\x6f', '\x72', '\x20', '\x65',
+ '\x72', '\x61', '\x73', '\x65', '\x20', '\x65', '\x72', '\x72',
+ '\x6f', '\x72', '\x0a', '\x00', '\x45', '\x72', '\x72', '\x6f',
+ '\x72', '\x20', '\x61', '\x74', '\x20', '\x00', '\x3a', '\x20',
+ '\x4e', '\x6f', '\x20', '\x6e', '\x65', '\x65', '\x64', '\x20',
+ '\x74', '\x6f', '\x20', '\x77', '\x72', '\x69', '\x74', '\x65',
+ '\x0a', '\x00', '\x3a', '\x20', '\x45', '\x72', '\x61', '\x73',
+ '\x69', '\x6e', '\x67', '\x20', '\x00', '\x00', '\x20', '\x62',
+ '\x79', '\x74', '\x65', '\x73', '\x0a', '\x00', '\x3a', '\x20',
+ '\x57', '\x72', '\x69', '\x74', '\x69', '\x6e', '\x67', '\x20',
+ '\x00', '\x00', '\x3a', '\x20', '\x56', '\x65', '\x72', '\x69',
+ '\x66', '\x79', '\x69', '\x6e', '\x67', '\x2e', '\x2e', '\x2e',
+ '\x00', '\x00', '\x4f', '\x4b', '\x0a', '\x00', '\xfa', '\x17',
+ '\x00', '\x38', '\x02', '\x18', '\x00', '\x38', '\x0a', '\x18',
+ '\x00', '\x38', '\x12', '\x18', '\x00', '\x38', '\x1a', '\x18',
+ '\x00', '\x38', '\x00', '\x00', '\x00', '\x80', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x84', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x54', '\x68', '\x69', '\x73',
+ '\x20', '\x62', '\x6f', '\x6f', '\x74', '\x6c', '\x6f', '\x61',
+ '\x64', '\x65', '\x72', '\x20', '\x77', '\x61', '\x73', '\x20',
+ '\x62', '\x75', '\x69', '\x6c', '\x74', '\x20', '\x62', '\x79',
+ '\x20', '\x72', '\x6f', '\x6f', '\x74', '\x20', '\x6f', '\x6e',
+ '\x20', '\x57', '\x65', '\x64', '\x20', '\x4d', '\x61', '\x79',
+ '\x20', '\x31', '\x36', '\x20', '\x32', '\x31', '\x3a', '\x33',
+ '\x31', '\x3a', '\x34', '\x34', '\x20', '\x43', '\x45', '\x53',
+ '\x54', '\x20', '\x32', '\x30', '\x30', '\x37', '\x2e', '\x0d',
+ '\x0a', '\x00'
+};
diff --git a/package/etrax-tools/src/e100boot/sbl/ser_noleds_ima.c b/package/etrax-tools/src/e100boot/sbl/ser_noleds_ima.c
new file mode 100644
index 000000000..70c599308
--- /dev/null
+++ b/package/etrax-tools/src/e100boot/sbl/ser_noleds_ima.c
@@ -0,0 +1,807 @@
+
+/* cconv 1.2 12/16/97, Copyright (C) 1997, Axis Communications AB */
+
+const char ser_noleds_ima[] =
+{
+ '\x0f', '\x05', '\x0f', '\x05', '\x6f', '\xee', '\x00', '\x1f',
+ '\x00', '\x38', '\x3f', '\x0d', '\x08', '\x01', '\x00', '\x38',
+ '\x78', '\x56', '\x34', '\x12', '\x21', '\x43', '\x65', '\x87',
+ '\x6f', '\xde', '\x20', '\x00', '\x00', '\xb0', '\x5f', '\x9c',
+ '\x65', '\x6f', '\xed', '\x9b', '\x5f', '\x9c', '\x25', '\x2f',
+ '\x7f', '\x0d', '\xdc', '\x15', '\x00', '\x38', '\xe9', '\x9b',
+ '\xed', '\x9b', '\x3f', '\x0d', '\x28', '\x01', '\x00', '\x38',
+ '\xfc', '\xe1', '\x7e', '\xbe', '\x7f', '\x0d', '\x7e', '\x1a',
+ '\x00', '\x38', '\x70', '\x8a', '\x6f', '\x9e', '\x20', '\x00',
+ '\x00', '\xb0', '\x69', '\x9a', '\x79', '\x67', '\x7f', '\x0d',
+ '\x32', '\x1a', '\x00', '\x38', '\xe9', '\x9b', '\x6f', '\x9e',
+ '\x22', '\x00', '\x00', '\xb0', '\x59', '\x9a', '\x59', '\x94',
+ '\x7f', '\x0d', '\x9a', '\x1a', '\x00', '\x38', '\xe9', '\x9b',
+ '\x6f', '\x9e', '\x04', '\x00', '\x00', '\xb0', '\x69', '\x9a',
+ '\x06', '\x93', '\xe1', '\x93', '\x81', '\x92', '\x7f', '\x0d',
+ '\x82', '\x1a', '\x00', '\x38', '\xc9', '\x9b', '\x7f', '\x0d',
+ '\x44', '\x1a', '\x00', '\x38', '\x70', '\x4a', '\x3f', '\xbd',
+ '\x28', '\x02', '\x00', '\x38', '\x3f', '\xbd', '\xac', '\x02',
+ '\x00', '\x38', '\x3f', '\xbd', '\xcc', '\x01', '\x00', '\x38',
+ '\x6a', '\xa6', '\xf7', '\x30', '\x0f', '\x05', '\x6f', '\x9e',
+ '\x00', '\x01', '\x00', '\x38', '\x69', '\x9a', '\x7f', '\x0d',
+ '\x7e', '\x1a', '\x00', '\x38', '\xe9', '\x9a', '\x24', '\x80',
+ '\x0f', '\x05', '\x6f', '\x9e', '\x82', '\x1a', '\x00', '\x38',
+ '\x49', '\x9a', '\xcf', '\x9e', '\x01', '\x00', '\xd3', '\x20',
+ '\x0f', '\x05', '\x6f', '\xde', '\xd4', '\x01', '\x00', '\xb0',
+ '\x4d', '\x9a', '\x38', '\x93', '\x41', '\x93', '\xcd', '\x9b',
+ '\xc1', '\xe0', '\x0f', '\x05', '\x3e', '\xbe', '\x3f', '\x0d',
+ '\x6c', '\x03', '\x00', '\x38', '\xfc', '\xe1', '\x7e', '\xbe',
+ '\x3f', '\xbd', '\x68', '\x02', '\x00', '\x38', '\x6a', '\xa6',
+ '\x16', '\x20', '\x41', '\x92', '\x3f', '\xbd', '\xf4', '\x01',
+ '\x00', '\x38', '\x6a', '\xa6', '\x0a', '\x30', '\x79', '\x86',
+ '\x3f', '\xbd', '\xac', '\x02', '\x00', '\x38', '\x79', '\x86',
+ '\x69', '\xa6', '\x3e', '\x0d', '\x84', '\xe2', '\x6f', '\x9e',
+ '\x22', '\x00', '\x00', '\xb0', '\x59', '\x9a', '\x59', '\x94',
+ '\xee', '\x9b', '\x6f', '\xce', '\x9a', '\x1a', '\x00', '\x38',
+ '\x6c', '\x9a', '\x6e', '\xda', '\xad', '\x96', '\xb9', '\x96',
+ '\xdf', '\x9c', '\x80', '\x25', '\x0a', '\xd0', '\x0f', '\x05',
+ '\x6e', '\x9a', '\xec', '\x9b', '\x04', '\xe0', '\x41', '\xa2',
+ '\x7a', '\x86', '\x7f', '\xb6', '\x04', '\xe2', '\x00', '\x00',
+ '\x6f', '\x9e', '\xdc', '\x15', '\x00', '\x38', '\x79', '\x8a',
+ '\x7f', '\x0d', '\x64', '\x00', '\x00', '\xb0', '\x70', '\x8a',
+ '\x4f', '\xde', '\x55', '\x00', '\x7f', '\x0d', '\x63', '\x00',
+ '\x00', '\xb0', '\xcd', '\xdb', '\x0b', '\xd2', '\x7f', '\x0d',
+ '\x62', '\x00', '\x00', '\xb0', '\xcd', '\xdb', '\xa0', '\xd2',
+ '\xc9', '\xdb', '\x7f', '\x0d', '\x61', '\x00', '\x00', '\xb0',
+ '\xcd', '\xdb', '\x41', '\x92', '\x7f', '\x0d', '\x84', '\x1a',
+ '\x00', '\x38', '\xc9', '\x9b', '\x7f', '\xb6', '\x0f', '\x05',
+ '\x6f', '\x9e', '\x60', '\x00', '\x00', '\xb0', '\x69', '\x9a',
+ '\x59', '\xb4', '\x1f', '\xbf', '\xff', '\x01', '\x88', '\x93',
+ '\x2e', '\xa0', '\x0f', '\x05', '\x6f', '\xce', '\x7e', '\x1a',
+ '\x00', '\x38', '\x6c', '\x9a', '\x6f', '\xde', '\x04', '\x01',
+ '\x00', '\x38', '\x6d', '\x99', '\xcb', '\xbb', '\x01', '\x92',
+ '\xec', '\x9b', '\x6f', '\x9e', '\x22', '\x00', '\x00', '\xb0',
+ '\x49', '\x9a', '\x49', '\x94', '\x7f', '\x0d', '\x9a', '\x1a',
+ '\x00', '\x38', '\xe9', '\x9b', '\x7f', '\xb6', '\x41', '\xa2',
+ '\x7f', '\xb6', '\x7a', '\x86', '\x6f', '\x9e', '\x61', '\x00',
+ '\x00', '\xb0', '\x49', '\x9a', '\x85', '\x93', '\xf5', '\xa0',
+ '\x0f', '\x05', '\x4f', '\x9e', '\x2b', '\x00', '\x7f', '\x0d',
+ '\xdc', '\x15', '\x00', '\x38', '\xc9', '\x9b', '\x7f', '\x0d',
+ '\x60', '\x00', '\x00', '\xb0', '\xc9', '\x9b', '\x7f', '\xb6',
+ '\x0f', '\x05', '\x8a', '\x0b', '\x28', '\x30', '\x0f', '\x05',
+ '\x6f', '\x9e', '\x61', '\x00', '\x00', '\xb0', '\x49', '\x9a',
+ '\x85', '\x93', '\x14', '\xa0', '\x0f', '\x05', '\x6f', '\x9e',
+ '\xdc', '\x15', '\x00', '\x38', '\x4a', '\xde', '\xc9', '\xdb',
+ '\x7f', '\x0d', '\x60', '\x00', '\x00', '\xb0', '\xcd', '\xdb',
+ '\x8a', '\x0b', '\xdd', '\x20', '\x0f', '\x05', '\x7f', '\xb6',
+ '\x0f', '\x05', '\xfc', '\xe1', '\x7e', '\xbe', '\x8e', '\xe2',
+ '\x4f', '\x9e', '\x30', '\x00', '\x01', '\xe1', '\xc9', '\x9b',
+ '\x4f', '\xde', '\x78', '\x00', '\x02', '\xe1', '\xcd', '\xdb',
+ '\x4d', '\x92', '\x0b', '\xe1', '\xc9', '\x9b', '\x4a', '\xd2',
+ '\x0c', '\xe1', '\xcd', '\xdb', '\x0d', '\xe1', '\x70', '\x0a',
+ '\x4b', '\xb6', '\x06', '\x20', '\x7c', '\x86', '\x0b', '\xe1',
+ '\x70', '\x0a', '\x6c', '\x96', '\xc2', '\x93', '\x6a', '\xb6',
+ '\xe9', '\xb7', '\x4b', '\xd6', '\x0f', '\xd3', '\xcf', '\xde',
+ '\x09', '\x00', '\x04', '\x80', '\x49', '\x92', '\x07', '\xd2',
+ '\xac', '\x96', '\x4e', '\xb2', '\x2e', '\xb6', '\x2b', '\x96',
+ '\x30', '\xd2', '\xf3', '\x91', '\xcd', '\xdb', '\x01', '\xc2',
+ '\xc8', '\xc2', '\xd9', '\x20', '\x6c', '\x96', '\x6e', '\xa6',
+ '\x01', '\xa2', '\x3f', '\xbd', '\xd2', '\x02', '\x00', '\x38',
+ '\x0e', '\xe2', '\x3e', '\x0d', '\xfc', '\xe1', '\x7e', '\xbe',
+ '\x84', '\xe2', '\xfe', '\x0b', '\x6f', '\x0e', '\xd2', '\x02',
+ '\x00', '\x38', '\x6f', '\xae', '\xe0', '\x15', '\x00', '\x38',
+ '\xb0', '\xb9', '\x6f', '\xae', '\x32', '\x1a', '\x00', '\x38',
+ '\x6a', '\xaa', '\x7a', '\x67', '\x41', '\xb2', '\x3f', '\xbd',
+ '\x02', '\x03', '\x00', '\x38', '\x6f', '\xae', '\xac', '\x19',
+ '\x00', '\x38', '\xb0', '\xb9', '\x6f', '\x9e', '\xf0', '\x00',
+ '\x00', '\x38', '\xef', '\x9e', '\xf2', '\x19', '\x00', '\x38',
+ '\x0e', '\x30', '\x70', '\x86', '\x09', '\x0c', '\xef', '\x9e',
+ '\xf2', '\x19', '\x00', '\x38', '\xf7', '\x20', '\x0f', '\x05',
+ '\x6f', '\xae', '\xf2', '\x15', '\x00', '\x38', '\x3f', '\xbd',
+ '\xd2', '\x02', '\x00', '\x38', '\x60', '\xa6', '\x41', '\xb2',
+ '\x3f', '\xbd', '\x02', '\x03', '\x00', '\x38', '\x3f', '\xbd',
+ '\xe2', '\x03', '\x00', '\x38', '\x3f', '\x0d', '\x28', '\x01',
+ '\x00', '\x38', '\xbe', '\x0f', '\x3e', '\x0d', '\xff', '\xe0',
+ '\x0f', '\x05', '\xfc', '\xe1', '\x7e', '\xbe', '\x84', '\xe2',
+ '\xfe', '\x0b', '\x6f', '\x0e', '\xd2', '\x02', '\x00', '\x38',
+ '\x6f', '\xae', '\x0e', '\x16', '\x00', '\x38', '\xb0', '\xb9',
+ '\x3f', '\xbd', '\xac', '\x02', '\x00', '\x38', '\x6f', '\xae',
+ '\x00', '\x1f', '\x00', '\x38', '\x5f', '\xbc', '\xec', '\x01',
+ '\x3f', '\xbd', '\x60', '\x07', '\x00', '\x38', '\x6f', '\xae',
+ '\x28', '\x16', '\x00', '\x38', '\xb0', '\xb9', '\x3f', '\xbd',
+ '\x26', '\x04', '\x00', '\x38', '\xbe', '\x0f', '\x3e', '\xbe',
+ '\x3f', '\x0d', '\xde', '\x03', '\x00', '\x38', '\xfc', '\xe1',
+ '\x7e', '\xbe', '\x98', '\xe2', '\xfe', '\x4b', '\x6f', '\xde',
+ '\x00', '\x1f', '\x00', '\x38', '\x6d', '\x9a', '\x79', '\x67',
+ '\xed', '\x9f', '\xef', '\xde', '\xec', '\x20', '\x00', '\x38',
+ '\xf3', '\x20', '\x0f', '\x05', '\x6f', '\x3e', '\x00', '\x1f',
+ '\x00', '\x38', '\xa3', '\x0b', '\xff', '\x3d', '\xfe', '\x02',
+ '\x0f', '\x05', '\x63', '\x9a', '\x81', '\x92', '\xcf', '\x9d',
+ '\x0b', '\x00', '\x5f', '\x95', '\x3f', '\xf8', '\x54', '\x02',
+ '\x22', '\x01', '\x18', '\x00', '\x62', '\x00', '\x90', '\x00',
+ '\x96', '\x01', '\xc8', '\x01', '\xe4', '\x00', '\x00', '\x02',
+ '\xb8', '\x00', '\x9a', '\x02', '\xce', '\x02', '\x6f', '\xae',
+ '\x3a', '\x16', '\x00', '\x38', '\x3f', '\xbd', '\xd2', '\x02',
+ '\x00', '\x38', '\x6f', '\x0e', '\x02', '\x03', '\x00', '\x38',
+ '\x04', '\x31', '\x62', '\xae', '\x41', '\xb2', '\xb0', '\xb9',
+ '\x08', '\x31', '\x61', '\xae', '\x41', '\xb2', '\xb0', '\xb9',
+ '\x6f', '\x0e', '\x86', '\x1a', '\x00', '\x38', '\x60', '\x9a',
+ '\x81', '\x92', '\xe0', '\x9b', '\x3f', '\xbd', '\xac', '\x02',
+ '\x00', '\x38', '\x60', '\x9a', '\x01', '\x92', '\xe0', '\x9b',
+ '\x62', '\xaa', '\x61', '\xba', '\x3f', '\xbd', '\x60', '\x07',
+ '\x00', '\x38', '\xff', '\xed', '\x88', '\x02', '\x0c', '\x32',
+ '\x6f', '\xae', '\x48', '\x16', '\x00', '\x38', '\x3f', '\xbd',
+ '\xd2', '\x02', '\x00', '\x38', '\x6f', '\x0e', '\x02', '\x03',
+ '\x00', '\x38', '\x04', '\x31', '\x62', '\xae', '\x41', '\xb2',
+ '\xb0', '\xb9', '\x08', '\x31', '\x61', '\xae', '\x41', '\xb2',
+ '\xb0', '\xb9', '\x61', '\x1a', '\x72', '\x09', '\xe1', '\x1b',
+ '\xff', '\xed', '\x5a', '\x02', '\x0c', '\x32', '\x6f', '\xae',
+ '\x58', '\x16', '\x00', '\x38', '\x3f', '\xbd', '\xd2', '\x02',
+ '\x00', '\x38', '\x6f', '\x1e', '\x02', '\x03', '\x00', '\x38',
+ '\x04', '\x31', '\x60', '\xae', '\x41', '\xb2', '\xb1', '\xb9',
+ '\x60', '\xaa', '\x6a', '\xaa', '\x41', '\xb2', '\xb1', '\xb9',
+ '\xff', '\xed', '\x32', '\x02', '\x08', '\x32', '\x6f', '\xae',
+ '\x68', '\x16', '\x00', '\x38', '\x3f', '\xbd', '\xd2', '\x02',
+ '\x00', '\x38', '\x04', '\x31', '\x60', '\xae', '\x41', '\xb2',
+ '\x3f', '\xbd', '\x02', '\x03', '\x00', '\x38', '\x60', '\xaa',
+ '\xff', '\x3d', '\xc0', '\x01', '\x0f', '\x05', '\x81', '\xa2',
+ '\xfd', '\x20', '\x0f', '\x05', '\xff', '\xed', '\x06', '\x02',
+ '\x08', '\x32', '\x6f', '\x4e', '\xd2', '\x02', '\x00', '\x38',
+ '\x6f', '\xae', '\x76', '\x16', '\x00', '\x38', '\xb4', '\xb9',
+ '\x6f', '\x0e', '\x02', '\x03', '\x00', '\x38', '\x04', '\x31',
+ '\x62', '\xae', '\x41', '\xb2', '\xb0', '\xb9', '\x08', '\x31',
+ '\x61', '\xae', '\x41', '\xb2', '\xb0', '\xb9', '\x62', '\x2a',
+ '\x62', '\x2a', '\xe1', '\x2a', '\xff', '\x3d', '\xb8', '\x01',
+ '\x0f', '\x05', '\x6f', '\xae', '\x84', '\x16', '\x00', '\x38',
+ '\xb4', '\xb9', '\xff', '\xed', '\xd0', '\x01', '\x0f', '\x05',
+ '\x6f', '\x4e', '\xd2', '\x02', '\x00', '\x38', '\x6f', '\xae',
+ '\x94', '\x16', '\x00', '\x38', '\xb4', '\xb9', '\x6f', '\x2e',
+ '\x02', '\x03', '\x00', '\x38', '\x04', '\x31', '\x61', '\xae',
+ '\x41', '\xb2', '\xb2', '\xb9', '\x08', '\x31', '\x60', '\xae',
+ '\x41', '\xb2', '\xb2', '\xb9', '\x61', '\xaa', '\x60', '\xba',
+ '\x6e', '\xc6', '\x14', '\xc2', '\x3f', '\xbd', '\x5e', '\x08',
+ '\x00', '\x38', '\x6a', '\xa6', '\x30', '\x20', '\x0f', '\x05',
+ '\x6f', '\xae', '\xa0', '\x16', '\x00', '\x38', '\xb4', '\xb9',
+ '\x14', '\xe1', '\x6a', '\xaa', '\x41', '\xb2', '\xb2', '\xb9',
+ '\x14', '\xe1', '\x6a', '\xaa', '\x6a', '\xb6', '\x0f', '\xbc',
+ '\x40', '\x00', '\x8f', '\xac', '\x40', '\x00', '\x3c', '\xa3',
+ '\x3c', '\xb3', '\x3f', '\xbd', '\x06', '\x09', '\x00', '\x38',
+ '\xff', '\xed', '\x6a', '\x01', '\x0f', '\x05', '\x6f', '\xae',
+ '\xbc', '\x16', '\x00', '\x38', '\xb4', '\xb9', '\xff', '\xed',
+ '\x54', '\x01', '\x0c', '\x32', '\x6f', '\xae', '\xd2', '\x16',
+ '\x00', '\x38', '\x3f', '\xbd', '\xd2', '\x02', '\x00', '\x38',
+ '\x6f', '\x0e', '\x02', '\x03', '\x00', '\x38', '\x04', '\x31',
+ '\x62', '\xae', '\x41', '\xb2', '\xb0', '\xb9', '\x08', '\x31',
+ '\x61', '\xae', '\x41', '\xb2', '\xb0', '\xb9', '\x62', '\xaa',
+ '\x61', '\xba', '\x3f', '\xbd', '\x06', '\x09', '\x00', '\x38',
+ '\xff', '\xed', '\x22', '\x01', '\x0c', '\x32', '\x6f', '\xae',
+ '\xde', '\x16', '\x00', '\x38', '\x3f', '\xbd', '\xd2', '\x02',
+ '\x00', '\x38', '\x6f', '\x0e', '\x02', '\x03', '\x00', '\x38',
+ '\x04', '\x31', '\x62', '\xae', '\x41', '\xb2', '\xb0', '\xb9',
+ '\x08', '\x31', '\x61', '\xae', '\x41', '\xb2', '\xb0', '\xb9',
+ '\x62', '\xaa', '\xe1', '\xaa', '\xda', '\x90', '\x0f', '\x05',
+ '\x7a', '\x0e', '\x08', '\x31', '\xea', '\xaa', '\xf9', '\x80',
+ '\x0f', '\x05', '\xea', '\xe0', '\x0c', '\x32', '\x6f', '\xae',
+ '\xea', '\x16', '\x00', '\x38', '\x3f', '\xbd', '\xd2', '\x02',
+ '\x00', '\x38', '\x6f', '\x0e', '\x02', '\x03', '\x00', '\x38',
+ '\x04', '\x31', '\x61', '\xae', '\x41', '\xb2', '\xb0', '\xb9',
+ '\x08', '\x31', '\x64', '\xae', '\x41', '\xb2', '\xb0', '\xb9',
+ '\x0c', '\x31', '\x62', '\xae', '\x41', '\xb2', '\xb0', '\xb9',
+ '\x6f', '\x0e', '\xa6', '\x12', '\x00', '\x38', '\x61', '\xaa',
+ '\x64', '\xba', '\x62', '\xca', '\xb0', '\xb9', '\x6a', '\xa6',
+ '\xac', '\x30', '\x10', '\x32', '\xc3', '\xa2', '\xae', '\x20',
+ '\x7a', '\x86', '\x62', '\xca', '\xef', '\xcd', '\x00', '\x00',
+ '\x01', '\x00', '\x64', '\xba', '\xb0', '\xb9', '\x9e', '\xe0',
+ '\x0f', '\x05', '\x6f', '\xde', '\x10', '\x1a', '\x00', '\x38',
+ '\x6d', '\x9a', '\x7f', '\x0d', '\xc0', '\x01', '\x00', '\xb0',
+ '\xe9', '\x9b', '\x04', '\xd1', '\x59', '\x98', '\x7f', '\x0d',
+ '\xc4', '\x01', '\x00', '\xb0', '\xe9', '\x9b', '\x6f', '\x1e',
+ '\xd2', '\x02', '\x00', '\x38', '\x6f', '\xae', '\xf2', '\x16',
+ '\x00', '\x38', '\xb1', '\xb9', '\x04', '\x31', '\x60', '\xae',
+ '\x41', '\xb2', '\x3f', '\xbd', '\x02', '\x03', '\x00', '\x38',
+ '\x6f', '\xae', '\xfa', '\x16', '\x00', '\x38', '\xb1', '\xb9',
+ '\x60', '\x9a', '\xb9', '\x09', '\x50', '\xe0', '\x08', '\x32',
+ '\x6f', '\xae', '\x6e', '\x16', '\x00', '\x38', '\x3f', '\xbd',
+ '\xd2', '\x02', '\x00', '\x38', '\x6f', '\x0e', '\x02', '\x03',
+ '\x00', '\x38', '\x04', '\x31', '\x61', '\xae', '\x41', '\xb2',
+ '\xb0', '\xb9', '\x08', '\x31', '\x62', '\xae', '\x41', '\xb2',
+ '\xb0', '\xb9', '\x61', '\x1a', '\x61', '\x9a', '\x08', '\x30',
+ '\x81', '\x92', '\xe1', '\x9b', '\x20', '\xe0', '\x62', '\x3a',
+ '\x1c', '\xe0', '\x0c', '\x32', '\x6f', '\xae', '\x00', '\x17',
+ '\x00', '\x38', '\x3f', '\xbd', '\xd2', '\x02', '\x00', '\x38',
+ '\x63', '\xaa', '\x41', '\xb2', '\x3f', '\xbd', '\x02', '\x03',
+ '\x00', '\x38', '\x0a', '\xe0', '\x0f', '\x05', '\xa3', '\x0b',
+ '\xff', '\x2d', '\x06', '\xfd', '\x0f', '\x05', '\x6f', '\xae',
+ '\xfa', '\x16', '\x00', '\x38', '\x3f', '\xbd', '\xd2', '\x02',
+ '\x00', '\x38', '\xbe', '\x4f', '\x04', '\xe2', '\x3e', '\x0d',
+ '\xfc', '\xe1', '\x7e', '\xbe', '\x8c', '\xe2', '\xfe', '\x2b',
+ '\x6a', '\x26', '\x6b', '\x06', '\x7f', '\x0d', '\x7e', '\x1a',
+ '\x00', '\x38', '\x70', '\x8a', '\x7f', '\x0d', '\x04', '\x01',
+ '\x00', '\x38', '\xea', '\xab', '\x6f', '\x9e', '\x82', '\x1a',
+ '\x00', '\x38', '\x49', '\x9a', '\xcf', '\x9e', '\x01', '\x00',
+ '\x86', '\x20', '\x0f', '\x05', '\x6f', '\xde', '\x36', '\x1a',
+ '\x00', '\x38', '\x08', '\xd1', '\xea', '\xab', '\x7f', '\x0d',
+ '\x00', '\x01', '\x00', '\x38', '\xeb', '\xbb', '\x6b', '\x96',
+ '\x04', '\x92', '\xdf', '\x9d', '\xdc', '\x05', '\xdd', '\x9b',
+ '\x6f', '\x9e', '\xa4', '\x01', '\x00', '\xb0', '\x69', '\xda',
+ '\x6f', '\xde', '\x00', '\x1a', '\x00', '\x38', '\xe9', '\xdb',
+ '\x6f', '\xde', '\xd4', '\x01', '\x00', '\xb0', '\x4d', '\x9a',
+ '\x38', '\x93', '\x44', '\x93', '\xcd', '\x9b', '\x6f', '\xde',
+ '\xd4', '\x01', '\x00', '\xb0', '\x4d', '\x9a', '\x07', '\x93',
+ '\xcf', '\x9e', '\x04', '\x00', '\xf7', '\x30', '\x0f', '\x05',
+ '\x4d', '\x9a', '\x38', '\x93', '\x41', '\x93', '\xcd', '\x9b',
+ '\x3f', '\xbd', '\xcc', '\x01', '\x00', '\x38', '\x6a', '\xa6',
+ '\xf7', '\x30', '\x0f', '\x05', '\x6f', '\xce', '\x7e', '\x1a',
+ '\x00', '\x38', '\xec', '\x0a', '\x10', '\x80', '\x0f', '\x05',
+ '\x6f', '\xde', '\xd4', '\x01', '\x00', '\xb0', '\x4d', '\x9a',
+ '\x38', '\x93', '\x41', '\x93', '\xcd', '\x9b', '\xec', '\x0a',
+ '\xd7', '\x90', '\x71', '\x86', '\x22', '\xe0', '\x62', '\x96',
+ '\x7f', '\x0d', '\x7e', '\x1a', '\x00', '\x38', '\xeb', '\xba',
+ '\x14', '\x80', '\x71', '\x86', '\x3f', '\xbd', '\xcc', '\x01',
+ '\x00', '\x38', '\x7f', '\x0d', '\x7e', '\x1a', '\x00', '\x38',
+ '\xe0', '\x0a', '\xf1', '\x90', '\x71', '\x86', '\x62', '\x96',
+ '\x20', '\x96', '\xe9', '\x26', '\x0e', '\x30', '\x62', '\xd6',
+ '\x0d', '\x1c', '\x62', '\x96', '\x20', '\x96', '\xe9', '\xd6',
+ '\xf7', '\x20', '\x0f', '\x05', '\x6f', '\xae', '\x14', '\x17',
+ '\x00', '\x38', '\x3f', '\xbd', '\xd2', '\x02', '\x00', '\x38',
+ '\x61', '\xa6', '\x41', '\xb2', '\xbe', '\x2f', '\x3e', '\xbe',
+ '\x3f', '\x0d', '\x02', '\x03', '\x00', '\x38', '\xfc', '\xe1',
+ '\x7e', '\xbe', '\x8c', '\xe2', '\xfe', '\x2b', '\x6b', '\x06',
+ '\x6c', '\x26', '\xeb', '\xa6', '\x40', '\x00', '\x6a', '\xc6',
+ '\xe0', '\xc6', '\x32', '\x00', '\x71', '\x86', '\x6c', '\xb6',
+ '\x6c', '\x96', '\x79', '\x87', '\x61', '\xd6', '\xc3', '\xd3',
+ '\xed', '\x97', '\x49', '\xd6', '\xcb', '\x9b', '\x4b', '\x9a',
+ '\xcd', '\x96', '\x0c', '\x30', '\x7d', '\x87', '\x6f', '\xae',
+ '\x2a', '\x17', '\x00', '\x38', '\x40', '\xe0', '\xe2', '\xbb',
+ '\xcb', '\xdf', '\x01', '\x12', '\xc4', '\x12', '\x06', '\x30',
+ '\xe0', '\xb6', '\xd7', '\x10', '\x6c', '\x96', '\x04', '\xc2',
+ '\xe0', '\xc6', '\xc5', '\x10', '\x0f', '\x05', '\xe0', '\xa6',
+ '\x4e', '\x00', '\x6a', '\xc6', '\xe0', '\xc6', '\x40', '\x00',
+ '\x71', '\x86', '\x6c', '\xa6', '\x61', '\x96', '\xc3', '\x93',
+ '\x6c', '\xd6', '\xe9', '\xd7', '\x4a', '\x9a', '\xcd', '\x96',
+ '\x22', '\x30', '\x01', '\x12', '\x81', '\x12', '\xe2', '\xab',
+ '\x6f', '\xae', '\x48', '\x17', '\x00', '\x38', '\x3f', '\xbd',
+ '\xd2', '\x02', '\x00', '\x38', '\x62', '\xaa', '\x41', '\xb2',
+ '\x3f', '\xbd', '\x02', '\x03', '\x00', '\x38', '\x7a', '\x86',
+ '\xbe', '\x2f', '\x3e', '\x0d', '\xc4', '\x12', '\x08', '\x30',
+ '\x01', '\xa2', '\xe0', '\xa6', '\xc9', '\x10', '\x61', '\x96',
+ '\x04', '\xc2', '\xe0', '\xc6', '\xb7', '\x10', '\x0f', '\x05',
+ '\x41', '\xa2', '\xbe', '\x2f', '\x3e', '\x0d', '\xfc', '\xe1',
+ '\x7e', '\xbe', '\x94', '\xe2', '\xfe', '\x4b', '\x6b', '\x26',
+ '\xeb', '\xa6', '\x5a', '\x90', '\x6a', '\x06', '\x60', '\xa6',
+ '\x7b', '\x86', '\x3f', '\xbd', '\x02', '\x03', '\x00', '\x38',
+ '\x6f', '\xae', '\x66', '\x17', '\x00', '\x38', '\x3f', '\xbd',
+ '\xd2', '\x02', '\x00', '\x38', '\xe2', '\x06', '\x2a', '\x90',
+ '\x74', '\x86', '\x60', '\x16', '\x60', '\x36', '\x6f', '\xae',
+ '\xbc', '\x17', '\x00', '\x38', '\x3f', '\xbd', '\xd2', '\x02',
+ '\x00', '\x38', '\x63', '\xae', '\x7b', '\x86', '\x3f', '\xbd',
+ '\x02', '\x03', '\x00', '\x38', '\x01', '\x42', '\xc4', '\x42',
+ '\x08', '\x30', '\x04', '\x12', '\xe2', '\x16', '\xdf', '\x80',
+ '\x0f', '\x05', '\x6f', '\xae', '\x24', '\x16', '\x00', '\x38',
+ '\x3f', '\xbd', '\xd2', '\x02', '\x00', '\x38', '\x10', '\x02',
+ '\xe2', '\x06', '\xad', '\x80', '\x60', '\xa6', '\xbe', '\x4f',
+ '\x3e', '\x0d', '\x00', '\x00', '\x05', '\xa1', '\x49', '\x98',
+ '\xc2', '\x92', '\x0a', '\x30', '\xc4', '\x92', '\x0e', '\x30',
+ '\x0f', '\x05', '\x7f', '\xb6', '\x7a', '\x86', '\x6a', '\xb9',
+ '\x5a', '\xa8', '\x7f', '\xb6', '\x0f', '\x05', '\x6a', '\xb9',
+ '\x6a', '\xaa', '\x7f', '\xb6', '\x0f', '\x05', '\x6a', '\xd6',
+ '\x05', '\xa1', '\x4a', '\xaa', '\x4a', '\x94', '\xc2', '\x92',
+ '\x0a', '\x30', '\xc4', '\x92', '\x10', '\x30', '\x0f', '\x05',
+ '\x7f', '\xb6', '\x7a', '\x86', '\x5c', '\xca', '\x6d', '\xb9',
+ '\xdc', '\xcb', '\x7f', '\xb6', '\x4a', '\xa4', '\x6c', '\xca',
+ '\x6d', '\xb9', '\xec', '\xcb', '\x4a', '\xa4', '\x7f', '\xb6',
+ '\x0f', '\x05', '\xfc', '\xe1', '\x7e', '\xbe', '\x84', '\xe2',
+ '\xee', '\xbb', '\x04', '\xa1', '\x49', '\x9a', '\xcf', '\x9e',
+ '\x01', '\x00', '\x06', '\x20', '\x0f', '\x05', '\x24', '\xe0',
+ '\xc1', '\xc3', '\xcf', '\x9e', '\x02', '\x00', '\x0c', '\x20',
+ '\x6b', '\x96', '\xd0', '\x93', '\x69', '\xb7', '\xee', '\xbb',
+ '\x12', '\xe0', '\xc2', '\xc3', '\x6f', '\xae', '\x92', '\x17',
+ '\x00', '\x38', '\x3f', '\xbd', '\xd2', '\x02', '\x00', '\x38',
+ '\x0c', '\xe0', '\x0f', '\x05', '\x6c', '\xb6', '\x6e', '\xc6',
+ '\x3f', '\xbd', '\x96', '\x09', '\x00', '\x38', '\x04', '\xe2',
+ '\x3e', '\x0d', '\xfc', '\xe1', '\x7e', '\xbe', '\x84', '\xe2',
+ '\xfe', '\x0b', '\x6a', '\x06', '\x4f', '\xbc', '\xaa', '\x00',
+ '\x5f', '\xcc', '\x55', '\x05', '\x3f', '\xbd', '\xc2', '\x09',
+ '\x00', '\x38', '\x60', '\xa6', '\x4f', '\xbc', '\x55', '\x00',
+ '\x5f', '\xcc', '\xaa', '\x02', '\xbe', '\x0f', '\x3e', '\xbe',
+ '\x3f', '\x0d', '\xc2', '\x09', '\x00', '\x38', '\xfc', '\xe1',
+ '\x7e', '\xbe', '\x90', '\xe2', '\xfe', '\x3b', '\x6a', '\x26',
+ '\x04', '\xa1', '\x49', '\x9a', '\xcf', '\x9e', '\x02', '\x00',
+ '\x42', '\x20', '\x6b', '\x36', '\x6f', '\x0e', '\x74', '\x09',
+ '\x00', '\x38', '\xb0', '\xb9', '\x6a', '\x16', '\x62', '\xa6',
+ '\x63', '\xb6', '\xb0', '\xb9', '\x61', '\xd6', '\xf0', '\xd3',
+ '\x1f', '\xdf', '\x40', '\x00', '\x6a', '\x96', '\xf0', '\x93',
+ '\x1f', '\x9f', '\x40', '\x00', '\xe9', '\xd6', '\x14', '\x20',
+ '\x7c', '\x86', '\x2f', '\x1f', '\x40', '\x00', '\x00', '\x00',
+ '\x2f', '\xaf', '\x40', '\x00', '\x00', '\x00', '\xea', '\x16',
+ '\x04', '\x30', '\x0f', '\x05', '\x41', '\xc2', '\x6c', '\xa6',
+ '\xbe', '\x3f', '\x3e', '\x0d', '\x6f', '\x1e', '\x74', '\x09',
+ '\x00', '\x38', '\xb1', '\xb9', '\x4a', '\x04', '\x0f', '\x0f',
+ '\x40', '\x00', '\x62', '\xa6', '\x63', '\xb6', '\xb1', '\xb9',
+ '\x2f', '\xaf', '\x40', '\x00', '\x00', '\x00', '\xea', '\x06',
+ '\x3a', '\x25', '\xbe', '\x3f', '\x3e', '\x0d', '\xfc', '\xe1',
+ '\x7e', '\xbe', '\xa8', '\xe2', '\xfe', '\x8b', '\x6a', '\x36',
+ '\x04', '\xa1', '\x44', '\x9e', '\xcf', '\x9e', '\x02', '\x00',
+ '\x04', '\x20', '\x41', '\x72', '\x42', '\x72', '\x6f', '\x2e',
+ '\xc2', '\x09', '\x00', '\x38', '\x4f', '\xbc', '\x98', '\x00',
+ '\x4f', '\xcc', '\x55', '\x00', '\xb2', '\xb9', '\x50', '\xb2',
+ '\xe7', '\xb4', '\x6f', '\x1e', '\x74', '\x09', '\x00', '\x38',
+ '\x63', '\xa6', '\xb1', '\xb9', '\xcf', '\xae', '\x51', '\x00',
+ '\xff', '\x2d', '\x9c', '\x01', '\x63', '\xa6', '\x51', '\xb2',
+ '\xe7', '\xb4', '\xb1', '\xb9', '\xcf', '\xae', '\x52', '\x00',
+ '\xff', '\x2d', '\x8c', '\x01', '\x63', '\xa6', '\x52', '\xb2',
+ '\xe7', '\xb4', '\xb1', '\xb9', '\xcf', '\xae', '\x59', '\x00',
+ '\xff', '\x2d', '\x7c', '\x01', '\x63', '\xa6', '\x24', '\xe1',
+ '\x70', '\x8a', '\x6f', '\xae', '\xac', '\x17', '\x00', '\x38',
+ '\x3f', '\xbd', '\xd2', '\x02', '\x00', '\x38', '\x63', '\xaa',
+ '\x41', '\xb2', '\x3f', '\xbd', '\x02', '\x03', '\x00', '\x38',
+ '\x4f', '\xbc', '\x27', '\x00', '\xe7', '\xb4', '\x63', '\xa6',
+ '\xb1', '\xb9', '\x41', '\x92', '\xea', '\x94', '\x06', '\x32',
+ '\xe3', '\x9b', '\x86', '\x32', '\x4f', '\xbc', '\x2c', '\x00',
+ '\xe7', '\xb4', '\x63', '\xa6', '\xb1', '\xb9', '\x6a', '\x86',
+ '\x55', '\xb2', '\xe7', '\xb4', '\x63', '\xa6', '\xb1', '\xb9',
+ '\x6a', '\x06', '\x6a', '\xb6', '\x04', '\xb2', '\xe7', '\xb4',
+ '\x63', '\xa6', '\xb1', '\xb9', '\xcf', '\xae', '\x30', '\x00',
+ '\x3e', '\x20', '\x63', '\xa6', '\x4f', '\xbc', '\xf0', '\x00',
+ '\x5f', '\xcc', '\x55', '\x05', '\xb2', '\xb9', '\x63', '\xa6',
+ '\x3f', '\xbd', '\x0a', '\x0a', '\x00', '\x38', '\x63', '\xa6',
+ '\x4f', '\xbc', '\x90', '\x00', '\x5f', '\xcc', '\x55', '\x05',
+ '\xb2', '\xb9', '\x44', '\xb8', '\x2b', '\xb6', '\x63', '\xa6',
+ '\xb1', '\xb9', '\x4a', '\x54', '\x0f', '\x5f', '\x80', '\xff',
+ '\x63', '\xa6', '\x4f', '\xbc', '\x98', '\x00', '\x4f', '\xcc',
+ '\x55', '\x00', '\xb2', '\xb9', '\x10', '\xe0', '\x0f', '\x05',
+ '\x0f', '\x02', '\xe7', '\x04', '\x60', '\xb6', '\xb1', '\xb9',
+ '\xcf', '\xae', '\x03', '\x00', '\x35', '\x35', '\x0a', '\x31',
+ '\xd8', '\x8b', '\xc8', '\x82', '\x12', '\xd0', '\x68', '\x46',
+ '\x6f', '\xae', '\xbe', '\x17', '\x00', '\x38', '\x3f', '\xbd',
+ '\xd2', '\x02', '\x00', '\x38', '\xd2', '\xe0', '\x7a', '\x86',
+ '\x65', '\x56', '\x94', '\x20', '\x81', '\x42', '\x90', '\xe0',
+ '\x74', '\x86', '\xc2', '\x03', '\x60', '\xb6', '\x2f', '\xb2',
+ '\xe7', '\xb4', '\x6f', '\x1e', '\x74', '\x09', '\x00', '\x38',
+ '\x63', '\xa6', '\xb1', '\xb9', '\x6a', '\x66', '\x60', '\xb6',
+ '\x30', '\xb2', '\xe7', '\xb4', '\x63', '\xa6', '\xb1', '\xb9',
+ '\xc8', '\xa3', '\x6a', '\x67', '\xc8', '\x63', '\x60', '\xb6',
+ '\x2d', '\xb2', '\xe7', '\xb4', '\x63', '\xa6', '\xb1', '\xb9',
+ '\x6a', '\x26', '\x2e', '\x02', '\xe7', '\x04', '\x63', '\xa6',
+ '\x60', '\xb6', '\xb1', '\xb9', '\xc8', '\xa3', '\x6a', '\x27',
+ '\x65', '\x56', '\x0a', '\x30', '\x01', '\x22', '\x68', '\x96',
+ '\xa4', '\x96', '\x04', '\xe0', '\x81', '\x92', '\x64', '\x96',
+ '\x19', '\x95', '\x63', '\xd6', '\x2d', '\x95', '\x6d', '\x96',
+ '\x24', '\xe1', '\x6d', '\xda', '\x0c', '\x91', '\xed', '\xdb',
+ '\x10', '\x91', '\xe6', '\x6b', '\x14', '\x91', '\xe2', '\x2b',
+ '\x62', '\x26', '\x10', '\xd0', '\x0f', '\x05', '\x24', '\xe1',
+ '\x29', '\x6a', '\x24', '\xe1', '\xe9', '\x9b', '\x81', '\x22',
+ '\xf5', '\x20', '\x0f', '\x05', '\x24', '\xe1', '\x6d', '\xda',
+ '\x06', '\x31', '\xed', '\xda', '\x1e', '\x30', '\x65', '\x56',
+ '\x06', '\x30', '\x01', '\x42', '\x81', '\x42', '\x81', '\x42',
+ '\x65', '\x56', '\x0c', '\x30', '\xe8', '\x46', '\x64', '\x46',
+ '\x69', '\xa0', '\x64', '\x06', '\x08', '\xe0', '\x63', '\xa6',
+ '\x61', '\xb0', '\x64', '\x06', '\x63', '\xa6', '\x4f', '\xbc',
+ '\xf0', '\x00', '\x5f', '\xcc', '\x55', '\x05', '\x3f', '\xbd',
+ '\xc2', '\x09', '\x00', '\x38', '\x12', '\xe0', '\x41', '\xa2',
+ '\x4f', '\xbc', '\xf0', '\x00', '\x5f', '\xcc', '\x55', '\x05',
+ '\x3f', '\xbd', '\xc2', '\x09', '\x00', '\x38', '\x7a', '\x86',
+ '\xbe', '\x8f', '\x04', '\xe2', '\x3e', '\x0d', '\xfc', '\xe1',
+ '\x7e', '\xbe', '\x90', '\xe2', '\xfe', '\x3b', '\x06', '\xa1',
+ '\xa0', '\x0b', '\xff', '\x2d', '\x16', '\x04', '\x6a', '\x26',
+ '\x3f', '\xbd', '\xae', '\x0a', '\x00', '\x38', '\x6a', '\xa6',
+ '\xff', '\x2d', '\x86', '\x03', '\x41', '\xa2', '\x62', '\xa6',
+ '\x3f', '\xbd', '\x0a', '\x0a', '\x00', '\x38', '\x62', '\xa6',
+ '\x4f', '\xbc', '\x90', '\x00', '\x5f', '\xcc', '\x55', '\x05',
+ '\x3f', '\xbd', '\xc2', '\x09', '\x00', '\x38', '\x6f', '\x1e',
+ '\x74', '\x09', '\x00', '\x38', '\x62', '\xa6', '\x7b', '\x86',
+ '\xb1', '\xb9', '\x6a', '\x36', '\x04', '\x21', '\x40', '\xbe',
+ '\x4b', '\xb4', '\x2b', '\xb6', '\x62', '\xa6', '\xb1', '\xb9',
+ '\x42', '\x92', '\xc0', '\x9a', '\x1c', '\x20', '\x63', '\xc6',
+ '\xf0', '\xc3', '\x53', '\x94', '\xe9', '\xc6', '\x14', '\x20',
+ '\x63', '\x06', '\x6a', '\xd6', '\xf0', '\xd3', '\x5a', '\x94',
+ '\xe9', '\xd6', '\x0a', '\x20', '\xd0', '\x03', '\x6c', '\x36',
+ '\x6d', '\xa6', '\x63', '\x06', '\xd0', '\x03', '\x6a', '\x07',
+ '\x62', '\xa6', '\x4f', '\xbc', '\xf0', '\x00', '\x5f', '\xcc',
+ '\x55', '\x05', '\x3f', '\xbd', '\xc2', '\x09', '\x00', '\x38',
+ '\xef', '\x0e', '\xc0', '\x00', '\x1f', '\x00', '\xff', '\x3d',
+ '\x48', '\x02', '\x0f', '\x05', '\x60', '\x90', '\x0f', '\x05',
+ '\xef', '\x0e', '\xc4', '\x22', '\x01', '\x00', '\xb0', '\x30',
+ '\x0f', '\x05', '\x20', '\x90', '\x0f', '\x05', '\xef', '\x0e',
+ '\x58', '\x22', '\x01', '\x00', '\xff', '\x3d', '\x5a', '\x01',
+ '\x0f', '\x05', '\xef', '\x0e', '\x5b', '\x22', '\x01', '\x00',
+ '\xff', '\x3d', '\x4e', '\x01', '\x0f', '\x05', '\xff', '\xed',
+ '\xb6', '\x02', '\x0f', '\x05', '\xef', '\x0e', '\xda', '\x22',
+ '\x01', '\x00', '\xff', '\x3d', '\x9c', '\x01', '\x0f', '\x05',
+ '\x14', '\x90', '\x0f', '\x05', '\xef', '\x0e', '\xd6', '\x22',
+ '\x01', '\x00', '\xff', '\x3d', '\x8c', '\x01', '\x0f', '\x05',
+ '\xff', '\xed', '\x94', '\x02', '\x0f', '\x05', '\xef', '\x0e',
+ '\x49', '\x22', '\x04', '\x00', '\xc4', '\x30', '\x0f', '\x05',
+ '\xff', '\xed', '\x84', '\x02', '\x0f', '\x05', '\xef', '\x0e',
+ '\xd7', '\x00', '\x20', '\x00', '\xff', '\x3d', '\x6a', '\x01',
+ '\x0f', '\x05', '\x20', '\x90', '\x0f', '\x05', '\xef', '\x0e',
+ '\xc2', '\x00', '\x1f', '\x00', '\xff', '\x3d', '\x00', '\x02',
+ '\x0f', '\x05', '\xef', '\x0e', '\xc9', '\x00', '\x1f', '\x00',
+ '\xff', '\x3d', '\x18', '\x02', '\x0f', '\x05', '\xff', '\xed',
+ '\x56', '\x02', '\x0f', '\x05', '\xef', '\x0e', '\x4f', '\x00',
+ '\x98', '\x00', '\xff', '\x3d', '\x3c', '\x01', '\x0f', '\x05',
+ '\x12', '\x90', '\x0f', '\x05', '\xef', '\x0e', '\x43', '\x00',
+ '\x98', '\x00', '\x76', '\x30', '\x0f', '\x05', '\xff', '\xed',
+ '\x36', '\x02', '\x0f', '\x05', '\xef', '\x0e', '\xc2', '\x00',
+ '\x98', '\x00', '\xff', '\x2d', '\x2a', '\x02', '\x0f', '\x05',
+ '\x6f', '\x1e', '\xa2', '\x18', '\x00', '\x38', '\x61', '\x1a',
+ '\x6f', '\xde', '\x00', '\x00', '\x20', '\x00', '\x06', '\x21',
+ '\xed', '\xdb', '\x0c', '\x21', '\x70', '\x8a', '\x6f', '\x9e',
+ '\x00', '\x00', '\x01', '\x00', '\x10', '\x21', '\xe9', '\x9b',
+ '\x5f', '\xd2', '\x14', '\x21', '\xed', '\xdb', '\x6f', '\x9e',
+ '\x00', '\x00', '\x1f', '\x00', '\x18', '\x21', '\xe9', '\x9b',
+ '\x1f', '\xdc', '\xe1', '\x7f', '\x1c', '\x21', '\xed', '\xdb',
+ '\x41', '\x92', '\x20', '\x21', '\xe9', '\x9b', '\x6f', '\xde',
+ '\x00', '\x80', '\x1f', '\x00', '\x24', '\x21', '\xed', '\xdb',
+ '\x5f', '\xdc', '\x00', '\x20', '\x28', '\x21', '\xed', '\xdb',
+ '\x42', '\xd2', '\x2c', '\x21', '\xed', '\xdb', '\x6f', '\xde',
+ '\x00', '\xc0', '\x1f', '\x00', '\xff', '\xed', '\x16', '\x01',
+ '\x0f', '\x05', '\x6f', '\x1e', '\x9e', '\x18', '\x00', '\x38',
+ '\x61', '\x1a', '\x6f', '\x9e', '\x00', '\x00', '\x20', '\x00',
+ '\x06', '\x21', '\xe9', '\x9b', '\x0c', '\x21', '\x70', '\x8a',
+ '\x5f', '\x9c', '\x00', '\x40', '\x10', '\x21', '\xe9', '\x9b',
+ '\x41', '\xd2', '\x14', '\x21', '\xed', '\xdb', '\x18', '\x21',
+ '\xe9', '\x9b', '\x5f', '\x9c', '\x00', '\x20', '\x1c', '\x21',
+ '\xe9', '\x9b', '\x42', '\x92', '\x20', '\x21', '\xe9', '\x9b',
+ '\x1f', '\x9c', '\xfe', '\x7f', '\x24', '\x21', '\xe9', '\x9b',
+ '\x28', '\x21', '\xe9', '\x9b', '\x2c', '\x21', '\xed', '\xdb',
+ '\x6f', '\x9e', '\x00', '\x00', '\x01', '\x00', '\x30', '\x21',
+ '\xe9', '\x9b', '\x34', '\x21', '\xe9', '\x9b', '\x58', '\xe0',
+ '\x5f', '\xd2', '\x6f', '\x1e', '\x96', '\x18', '\x00', '\x38',
+ '\x61', '\x1a', '\x6f', '\x9e', '\x00', '\x00', '\x10', '\x00',
+ '\x06', '\x21', '\xe9', '\x9b', '\x0c', '\x21', '\x70', '\x8a',
+ '\x5f', '\x9c', '\x00', '\x40', '\x10', '\x21', '\xe9', '\x9b',
+ '\x41', '\xd2', '\x14', '\x21', '\xed', '\xdb', '\x18', '\x21',
+ '\xe9', '\x9b', '\x5f', '\x9c', '\x00', '\x20', '\x1c', '\x21',
+ '\xe9', '\x9b', '\x42', '\x92', '\x20', '\x21', '\xe9', '\x9b',
+ '\x1f', '\x9c', '\xfe', '\x7f', '\x24', '\x21', '\xe9', '\x9b',
+ '\x28', '\x21', '\xe9', '\x9b', '\x2c', '\x21', '\xed', '\xdb',
+ '\x6f', '\x9e', '\x00', '\x00', '\x01', '\x00', '\x30', '\x21',
+ '\xe9', '\x9b', '\x34', '\x21', '\xe9', '\x9b', '\x4f', '\xd2',
+ '\x38', '\x21', '\xed', '\xdb', '\xff', '\xed', '\x3e', '\x01',
+ '\x0f', '\x05', '\x6f', '\x1e', '\x9a', '\x18', '\x00', '\x38',
+ '\x61', '\x1a', '\x6f', '\x9e', '\x00', '\x00', '\x10', '\x00',
+ '\x06', '\x21', '\xe9', '\x9b', '\x0c', '\x21', '\x70', '\x8a',
+ '\x6f', '\xde', '\x00', '\x00', '\x01', '\x00', '\x10', '\x21',
+ '\xed', '\xdb', '\x4f', '\x92', '\x14', '\x21', '\xe9', '\x9b',
+ '\x6f', '\xde', '\x00', '\x00', '\x0f', '\x00', '\x18', '\x21',
+ '\xed', '\xdb', '\x1f', '\x9c', '\xf1', '\x7f', '\x1c', '\x21',
+ '\xe9', '\x9b', '\x41', '\x92', '\x20', '\x21', '\xe9', '\x9b',
+ '\x6f', '\xde', '\x00', '\x80', '\x0f', '\x00', '\x24', '\x21',
+ '\xed', '\xdb', '\x5f', '\xdc', '\x00', '\x20', '\x28', '\x21',
+ '\xed', '\xdb', '\x42', '\xd2', '\x2c', '\x21', '\xed', '\xdb',
+ '\x6f', '\xde', '\x00', '\xc0', '\x0f', '\x00', '\x30', '\x21',
+ '\xed', '\xdb', '\x5f', '\xdc', '\x00', '\x40', '\x34', '\x21',
+ '\xed', '\xdb', '\x38', '\x21', '\xe9', '\x9b', '\xce', '\xe0',
+ '\x0f', '\x05', '\x6f', '\x1e', '\x9e', '\x18', '\x00', '\x38',
+ '\x61', '\x1a', '\x6f', '\x9e', '\x00', '\x00', '\x20', '\x00',
+ '\x06', '\x21', '\xe9', '\x9b', '\x0c', '\x21', '\x70', '\x8a',
+ '\x5f', '\xdc', '\x00', '\x20', '\x10', '\x21', '\xed', '\xdb',
+ '\x48', '\x92', '\x14', '\x21', '\xe9', '\x9b', '\x6f', '\x9e',
+ '\x00', '\x00', '\x01', '\x00', '\x18', '\x21', '\xe9', '\x9b',
+ '\x1c', '\x21', '\xe9', '\x9b', '\x62', '\xe0', '\x5f', '\xd2',
+ '\x6f', '\x1e', '\xa2', '\x18', '\x00', '\x38', '\x61', '\x1a',
+ '\x6f', '\x9e', '\x00', '\x00', '\x20', '\x00', '\x06', '\x21',
+ '\xe9', '\x9b', '\x0c', '\x21', '\x70', '\x8a', '\x6f', '\xde',
+ '\x00', '\x00', '\x01', '\x00', '\x10', '\x21', '\xed', '\xdb',
+ '\x26', '\xe0', '\x5f', '\x92', '\x6f', '\x1e', '\xa6', '\x18',
+ '\x00', '\x38', '\x61', '\x1a', '\x6f', '\x9e', '\x00', '\x00',
+ '\x40', '\x00', '\x06', '\x21', '\xe9', '\x9b', '\x0c', '\x21',
+ '\x70', '\x8a', '\x6f', '\xde', '\x00', '\x00', '\x01', '\x00',
+ '\x10', '\x21', '\xed', '\xdb', '\x4f', '\x9c', '\x3f', '\x00',
+ '\x14', '\x21', '\xe9', '\x9b', '\x6f', '\xde', '\x00', '\x00',
+ '\x1f', '\x00', '\x18', '\x21', '\xed', '\xdb', '\x5f', '\x9c',
+ '\x00', '\x20', '\x1c', '\x21', '\xe9', '\x9b', '\x48', '\xd2',
+ '\x20', '\x21', '\xed', '\xdb', '\x30', '\xe0', '\x0f', '\x05',
+ '\x04', '\x21', '\x49', '\x9a', '\x6f', '\xae', '\xda', '\x17',
+ '\x00', '\x38', '\xcf', '\x9e', '\x01', '\x00', '\x08', '\x30',
+ '\x0f', '\x05', '\x6f', '\xae', '\xec', '\x17', '\x00', '\x38',
+ '\x3f', '\xbd', '\xd2', '\x02', '\x00', '\x38', '\x62', '\xaa',
+ '\x41', '\xb2', '\x3f', '\xbd', '\x02', '\x03', '\x00', '\x38',
+ '\x7a', '\x86', '\xbe', '\x3f', '\x3e', '\x0d', '\x6f', '\x3e',
+ '\xd2', '\x02', '\x00', '\x38', '\x6f', '\xae', '\x04', '\x18',
+ '\x00', '\x38', '\xb3', '\xb9', '\x04', '\x21', '\x40', '\x9e',
+ '\xcf', '\x9e', '\x01', '\x00', '\x0c', '\x20', '\x42', '\xd2',
+ '\x6f', '\xae', '\x0c', '\x18', '\x00', '\x38', '\xb3', '\xb9',
+ '\x42', '\xd2', '\xc0', '\xda', '\x32', '\x20', '\x47', '\xc2',
+ '\x06', '\x21', '\x6d', '\x9e', '\xc1', '\x93', '\xed', '\x9b',
+ '\x62', '\xd6', '\x0c', '\xd1', '\x69', '\x9a', '\xc1', '\x93',
+ '\x0c', '\xd1', '\xe9', '\x9b', '\x10', '\xd1', '\x69', '\x9a',
+ '\xc1', '\x93', '\x10', '\xd1', '\xe9', '\x9b', '\x81', '\xc2',
+ '\xe9', '\x60', '\x0c', '\xd2', '\x6f', '\xae', '\x0e', '\x18',
+ '\x00', '\x38', '\x3f', '\xbd', '\xd2', '\x02', '\x00', '\x38',
+ '\x6f', '\x0e', '\xd2', '\x02', '\x00', '\x38', '\x6f', '\xae',
+ '\x10', '\x18', '\x00', '\x38', '\xb0', '\xb9', '\x61', '\xa6',
+ '\xb0', '\xb9', '\x6f', '\xae', '\x42', '\x17', '\x00', '\x38',
+ '\xb0', '\xb9', '\x62', '\xaa', '\x41', '\xb2', '\x3f', '\xbd',
+ '\x02', '\x03', '\x00', '\x38', '\x41', '\xa2', '\xbe', '\x3f',
+ '\x3e', '\x0d', '\xfc', '\xe1', '\x7e', '\xbe', '\x8c', '\xe2',
+ '\xfe', '\x2b', '\x6a', '\x16', '\x6b', '\x26', '\x6f', '\x0e',
+ '\x0a', '\x0a', '\x00', '\x38', '\xb0', '\xb9', '\x61', '\xa6',
+ '\x4f', '\xbc', '\x80', '\x00', '\x5f', '\xcc', '\x55', '\x05',
+ '\x3f', '\xbd', '\xc2', '\x09', '\x00', '\x38', '\x61', '\xa6',
+ '\xb0', '\xb9', '\x04', '\x11', '\x49', '\x9a', '\xcf', '\x9e',
+ '\x02', '\x00', '\x10', '\x20', '\x0f', '\x05', '\x6f', '\x9e',
+ '\x30', '\x00', '\x30', '\x00', '\x61', '\x29', '\xe9', '\x9b',
+ '\xbe', '\x2f', '\x3e', '\x0d', '\x4f', '\x9c', '\x30', '\x00',
+ '\x61', '\x29', '\xd9', '\x9b', '\xbe', '\x2f', '\x3e', '\x0d',
+ '\x84', '\xe2', '\xfe', '\x0b', '\x06', '\xa1', '\xeb', '\xba',
+ '\x10', '\x10', '\x0f', '\x05', '\x7a', '\x86', '\x7f', '\xb6',
+ '\xbe', '\x0f', '\x10', '\xa1', '\x6a', '\xaa', '\x7f', '\xb6',
+ '\xbe', '\x0f', '\x70', '\x86', '\x0c', '\xa1', '\xeb', '\xba',
+ '\x22', '\x10', '\x7d', '\x86', '\x14', '\xa1', '\xed', '\xda',
+ '\x10', '\x00', '\x79', '\x86', '\x10', '\xa1', '\x6c', '\xca',
+ '\x01', '\x92', '\x14', '\xa1', '\xe9', '\x9a', '\xf9', '\x10',
+ '\x2c', '\xd6', '\x0c', '\xa1', '\x29', '\xda', '\xe9', '\xb6',
+ '\xd1', '\x10', '\x0f', '\x05', '\x01', '\x02', '\xc7', '\x02',
+ '\xd3', '\x80', '\x0c', '\xa2', '\x7a', '\x86', '\x7f', '\xb6',
+ '\xbe', '\x0f', '\x84', '\xe2', '\xfe', '\x0b', '\x6a', '\x06',
+ '\x6b', '\xa6', '\x6d', '\xb6', '\x7d', '\x86', '\xeb', '\xd6',
+ '\x48', '\xa0', '\x0f', '\x05', '\x60', '\x9a', '\x2d', '\x96',
+ '\x49', '\xa5', '\x59', '\x9a', '\x4c', '\xd5', '\xd9', '\x9a',
+ '\x32', '\x30', '\x02', '\xd2', '\x82', '\xd2', '\x6b', '\x96',
+ '\x2a', '\x96', '\xe9', '\xa6', '\x20', '\x00', '\x6a', '\xc6',
+ '\x60', '\xc9', '\x59', '\x9a', '\xdf', '\x9e', '\xff', '\xff',
+ '\x0a', '\x30', '\x02', '\xc2', '\x82', '\xc2', '\x42', '\xa2',
+ '\x7f', '\xb6', '\xbe', '\x0f', '\x6b', '\x96', '\x2a', '\x96',
+ '\xe9', '\xc6', '\xe5', '\x10', '\x0f', '\x05', '\x41', '\xa2',
+ '\x7f', '\xb6', '\xbe', '\x0f', '\xeb', '\xd6', '\xbd', '\xb0',
+ '\x0f', '\x05', '\x7a', '\x86', '\x7f', '\xb6', '\xbe', '\x0f',
+ '\xfc', '\xe1', '\x7e', '\xbe', '\x90', '\xe2', '\xfe', '\x3b',
+ '\x73', '\x86', '\x72', '\x86', '\x6f', '\x0e', '\xaa', '\x18',
+ '\x00', '\x38', '\x41', '\x12', '\x04', '\x01', '\xc1', '\x1b',
+ '\xcf', '\x1e', '\x01', '\x00', '\x04', '\x30', '\x42', '\x92',
+ '\x44', '\x92', '\x05', '\x01', '\xc9', '\x9b', '\x60', '\xa6',
+ '\x3f', '\xbd', '\x9e', '\x0c', '\x00', '\x38', '\x6a', '\xa6',
+ '\x0c', '\x20', '\x0f', '\x05', '\xc1', '\x13', '\xcf', '\x1e',
+ '\x03', '\x00', '\xd9', '\x80', '\x0f', '\x05', '\x06', '\x01',
+ '\x23', '\x3a', '\x0f', '\x0c', '\x6c', '\x00', '\x01', '\x22',
+ '\xc1', '\x22', '\xc7', '\x80', '\x63', '\xa6', '\xbe', '\x3f',
+ '\x3e', '\x0d', '\xfc', '\xe1', '\x7e', '\xbe', '\x98', '\xe2',
+ '\xfe', '\x5b', '\x6a', '\x16', '\x6b', '\x56', '\x6c', '\x36',
+ '\x70', '\x86', '\xed', '\x06', '\x74', '\xa0', '\x6d', '\x46',
+ '\x05', '\x11', '\x49', '\x9a', '\xcf', '\x9e', '\x02', '\x00',
+ '\x12', '\x20', '\x0f', '\x05', '\x43', '\x05', '\x59', '\x9a',
+ '\xdf', '\x9e', '\xff', '\xff', '\x54', '\x30', '\x42', '\x22',
+ '\x05', '\x11', '\x49', '\x9a', '\xcf', '\x9e', '\x04', '\x00',
+ '\x0e', '\x20', '\x61', '\xa6', '\x43', '\x05', '\x69', '\x9a',
+ '\xff', '\x92', '\x3e', '\x30', '\x44', '\x22', '\x61', '\xa6',
+ '\x3f', '\xbd', '\x0a', '\x0a', '\x00', '\x38', '\x61', '\xa6',
+ '\x4f', '\xbc', '\xa0', '\x00', '\x5f', '\xcc', '\x55', '\x05',
+ '\x3f', '\xbd', '\xc2', '\x09', '\x00', '\x38', '\x65', '\xb6',
+ '\x20', '\xb6', '\x63', '\xc6', '\x20', '\xc6', '\x61', '\xa6',
+ '\x3f', '\xbd', '\x96', '\x09', '\x00', '\x38', '\x6a', '\x26',
+ '\x61', '\xa6', '\x65', '\xb6', '\x20', '\xb6', '\x3f', '\xbd',
+ '\x36', '\x0a', '\x00', '\x38', '\x6a', '\xa6', '\xf3', '\x20',
+ '\x61', '\xa6', '\x22', '\x06', '\xe4', '\x06', '\x91', '\xb0',
+ '\x0f', '\x05', '\xbe', '\x5f', '\x3e', '\x0d', '\xfc', '\xe1',
+ '\x7e', '\xbe', '\xa4', '\xe2', '\xfe', '\x8b', '\x6a', '\x16',
+ '\x6b', '\x06', '\x6c', '\x86', '\x3f', '\xbd', '\xc8', '\x11',
+ '\x00', '\x38', '\x6a', '\x96', '\x1a', '\x30', '\x41', '\xa2',
+ '\x60', '\xd6', '\x28', '\xd6', '\xe9', '\xd6', '\x14', '\x80',
+ '\x0f', '\x05', '\x6f', '\xae', '\x14', '\x18', '\x00', '\x38',
+ '\x3f', '\xbd', '\xd2', '\x02', '\x00', '\x38', '\x42', '\xa2',
+ '\xbe', '\x8f', '\x3e', '\x0d', '\x6f', '\xce', '\xb0', '\x18',
+ '\x00', '\x38', '\x6c', '\xca', '\xec', '\x06', '\x1e', '\x10',
+ '\xec', '\xd6', '\x6f', '\x9e', '\x82', '\x19', '\x00', '\x38',
+ '\x09', '\x91', '\x70', '\x8a', '\x16', '\x91', '\xe1', '\x1b',
+ '\xac', '\x06', '\x1a', '\x91', '\xe0', '\x0b', '\x1e', '\x91',
+ '\xe8', '\x8b', '\x74', '\xe0', '\x0f', '\x05', '\x5a', '\x80',
+ '\x6c', '\x96', '\x6f', '\xde', '\x82', '\x19', '\x00', '\x38',
+ '\x01', '\xd1', '\xe1', '\x1b', '\x05', '\xd1', '\xe0', '\x0b',
+ '\xa0', '\x96', '\x09', '\xd1', '\xe9', '\x9b', '\x29', '\x16',
+ '\x16', '\xd1', '\xe1', '\x1b', '\x1a', '\xd1', '\x70', '\x8a',
+ '\x68', '\xc6', '\xa9', '\xc6', '\x1e', '\xd1', '\xec', '\xcb',
+ '\x46', '\xe0', '\x0f', '\x05', '\x6f', '\xae', '\x30', '\x18',
+ '\x00', '\x38', '\x3f', '\xbd', '\xd2', '\x02', '\x00', '\x38',
+ '\x44', '\xa2', '\xbe', '\x8f', '\x3e', '\x0d', '\x6f', '\xae',
+ '\x44', '\x18', '\x00', '\x38', '\x3f', '\xbd', '\xd2', '\x02',
+ '\x00', '\x38', '\x60', '\xa6', '\x41', '\xb2', '\x3f', '\xbd',
+ '\x02', '\x03', '\x00', '\x38', '\x43', '\xa2', '\xbe', '\x8f',
+ '\x3e', '\x0d', '\x6f', '\x9e', '\x82', '\x19', '\x00', '\x38',
+ '\x01', '\x91', '\xe1', '\x1b', '\x05', '\x91', '\xe0', '\x0b',
+ '\x09', '\x91', '\xe8', '\x8b', '\x1e', '\x91', '\x70', '\x8a',
+ '\x6f', '\xce', '\x82', '\x19', '\x00', '\x38', '\x7c', '\x0a',
+ '\x0d', '\xc1', '\x70', '\x8a', '\x11', '\xc1', '\x70', '\x8a',
+ '\x15', '\xc1', '\x79', '\x0e', '\x7f', '\x0d', '\xa4', '\x19',
+ '\x00', '\x38', '\x70', '\x8a', '\x7f', '\x0d', '\xa8', '\x19',
+ '\x00', '\x38', '\x70', '\x8a', '\x0d', '\x91', '\xe8', '\x8a',
+ '\xff', '\x8d', '\xc0', '\x01', '\x75', '\x86', '\x65', '\x56',
+ '\x04', '\x20', '\x6c', '\xd6', '\x15', '\xd2', '\x65', '\x96',
+ '\x29', '\x55', '\x65', '\x36', '\x23', '\x95', '\x09', '\xd1',
+ '\x69', '\x9a', '\x24', '\x30', '\x2c', '\x36', '\x0d', '\xd1',
+ '\xe9', '\x9a', '\x1c', '\x80', '\x0f', '\x05', '\x09', '\x31',
+ '\x69', '\x9a', '\x10', '\x30', '\x0f', '\x05', '\x83', '\x0b',
+ '\x0a', '\x20', '\x0f', '\x05', '\x0d', '\x31', '\xe9', '\x9a',
+ '\x06', '\x20', '\x0f', '\x05', '\x65', '\x56', '\x35', '\x35',
+ '\x11', '\x31', '\x63', '\x3a', '\xca', '\x32', '\x4d', '\x90',
+ '\x65', '\x96', '\x29', '\x55', '\x65', '\x36', '\x23', '\x95',
+ '\x2f', '\x3e', '\x82', '\x19', '\x00', '\x38', '\x05', '\x31',
+ '\x64', '\x4a', '\x0d', '\x31', '\x69', '\x9a', '\x29', '\x46',
+ '\x01', '\x31', '\x27', '\x9a', '\x65', '\xa6', '\xc3', '\xa3',
+ '\xa5', '\xa6', '\xc2', '\xa3', '\xa5', '\xa6', '\xc2', '\xa3',
+ '\x2f', '\xae', '\xaa', '\x18', '\x00', '\x38', '\x64', '\xb6',
+ '\x3f', '\xbd', '\x18', '\x11', '\x00', '\x38', '\x83', '\x0b',
+ '\x24', '\x30', '\x6a', '\x66', '\x65', '\xa6', '\xc3', '\xa3',
+ '\xa5', '\xa6', '\xc2', '\xa3', '\xa5', '\xa6', '\xc2', '\xa3',
+ '\x2f', '\xae', '\xaa', '\x18', '\x00', '\x38', '\x64', '\xb6',
+ '\x3f', '\xbd', '\x36', '\x0a', '\x00', '\x38', '\x6a', '\xa6',
+ '\xe5', '\x20', '\x65', '\xa6', '\x73', '\x0a', '\x65', '\x26',
+ '\xc3', '\x23', '\xa5', '\x26', '\xc2', '\x23', '\xa5', '\x26',
+ '\xc2', '\x23', '\x2f', '\x2e', '\xaa', '\x18', '\x00', '\x38',
+ '\x62', '\xa6', '\x4f', '\xbc', '\xf0', '\x00', '\x5f', '\xcc',
+ '\x55', '\x05', '\x3f', '\xbd', '\xc2', '\x09', '\x00', '\x38',
+ '\x62', '\xa6', '\x64', '\xb6', '\x67', '\xc6', '\x66', '\xd6',
+ '\x3f', '\xbd', '\x6a', '\x11', '\x00', '\x38', '\x4a', '\xa6',
+ '\x28', '\x20', '\x7b', '\x86', '\x0d', '\x31', '\x69', '\xde',
+ '\x26', '\xd6', '\xe9', '\xdb', '\x11', '\x31', '\x70', '\x8a',
+ '\x62', '\xaa', '\x24', '\xa6', '\x3f', '\xbd', '\x02', '\x03',
+ '\x00', '\x38', '\x6f', '\xae', '\x4e', '\x18', '\x00', '\x38',
+ '\x3f', '\xbd', '\xd2', '\x02', '\x00', '\x38', '\xaa', '\xe0',
+ '\x0f', '\x05', '\xcf', '\xae', '\x01', '\x00', '\x4c', '\x30',
+ '\x0f', '\x05', '\xcf', '\xae', '\x02', '\x00', '\x46', '\x20',
+ '\x65', '\xa6', '\x62', '\xaa', '\x24', '\xa6', '\x6f', '\x1e',
+ '\x02', '\x03', '\x00', '\x38', '\x7b', '\x86', '\xb1', '\xb9',
+ '\x6f', '\x0e', '\xd2', '\x02', '\x00', '\x38', '\x6f', '\xae',
+ '\x62', '\x18', '\x00', '\x38', '\xb0', '\xb9', '\x66', '\xa6',
+ '\x7b', '\x86', '\xb1', '\xb9', '\x6f', '\xae', '\x6e', '\x18',
+ '\x00', '\x38', '\xb0', '\xb9', '\x62', '\xa6', '\x64', '\xb6',
+ '\x3f', '\xbd', '\xca', '\x10', '\x00', '\x38', '\x41', '\x92',
+ '\xc3', '\x9b', '\x11', '\x31', '\x6d', '\x9e', '\x01', '\x92',
+ '\x58', '\xe0', '\xed', '\x9b', '\x65', '\xa6', '\xc3', '\xa3',
+ '\xa5', '\xa6', '\xc2', '\xa3', '\xa5', '\xa6', '\xc2', '\xa3',
+ '\x6f', '\xad', '\xaa', '\x18', '\x00', '\x38', '\x62', '\xae',
+ '\x24', '\xa6', '\x6f', '\x1e', '\x02', '\x03', '\x00', '\x38',
+ '\x7b', '\x86', '\xb1', '\xb9', '\x6f', '\x0e', '\xd2', '\x02',
+ '\x00', '\x38', '\x6f', '\xae', '\x76', '\x18', '\x00', '\x38',
+ '\xb0', '\xb9', '\x66', '\xa6', '\x7b', '\x86', '\xb1', '\xb9',
+ '\x6f', '\xae', '\x6e', '\x18', '\x00', '\x38', '\xb0', '\xb9',
+ '\x62', '\xa6', '\x64', '\xb6', '\x67', '\xc6', '\x66', '\xd6',
+ '\x3f', '\xbd', '\x1a', '\x12', '\x00', '\x38', '\x0d', '\x31',
+ '\x6d', '\x9e', '\x26', '\x96', '\xed', '\x9b', '\x11', '\x31',
+ '\x70', '\x8a', '\x6f', '\xce', '\x82', '\x19', '\x00', '\x38',
+ '\x0d', '\xc1', '\x69', '\x9a', '\x7f', '\x0d', '\xa4', '\x19',
+ '\x00', '\x38', '\x29', '\x9a', '\xe8', '\x96', '\xff', '\x1d',
+ '\x44', '\xfe', '\x0f', '\x05', '\x75', '\x86', '\x6f', '\x2e',
+ '\xaa', '\x18', '\x00', '\x38', '\x6f', '\x1e', '\x82', '\x19',
+ '\x00', '\x38', '\x09', '\x11', '\xa0', '\x0b', '\x4c', '\x30',
+ '\x7b', '\x86', '\x62', '\xaa', '\x3f', '\xbd', '\x02', '\x03',
+ '\x00', '\x38', '\x6f', '\xae', '\x82', '\x18', '\x00', '\x38',
+ '\x3f', '\xbd', '\xd2', '\x02', '\x00', '\x38', '\x70', '\x86',
+ '\x09', '\x11', '\xe0', '\x0a', '\x22', '\x00', '\x0f', '\x05',
+ '\x05', '\x11', '\x29', '\x0a', '\x01', '\x11', '\x6d', '\xda',
+ '\x62', '\x99', '\x59', '\x9a', '\x4d', '\x05', '\xd9', '\x9a',
+ '\xff', '\x2d', '\x9a', '\xfd', '\x0f', '\x05', '\x02', '\x02',
+ '\x09', '\x11', '\xe0', '\x0a', '\xe3', '\x10', '\x0f', '\x05',
+ '\x6f', '\xae', '\x92', '\x18', '\x00', '\x38', '\x3f', '\xbd',
+ '\xd2', '\x02', '\x00', '\x38', '\x0f', '\x2c', '\x6c', '\x00',
+ '\x01', '\x52', '\xc1', '\x52', '\xa5', '\x80', '\x15', '\x12',
+ '\x7a', '\x86', '\xbe', '\x8f', '\x3e', '\x0d', '\x00', '\x00',
+ '\x7f', '\xb6', '\x0f', '\x05', '\x00', '\x00', '\x00', '\x00',
+ '\x0d', '\x0a', '\x0d', '\x0a', '\x44', '\x65', '\x76', '\x69',
+ '\x63', '\x65', '\x20', '\x49', '\x44', '\x20', '\x3d', '\x20',
+ '\x00', '\x00', '\x43', '\x68', '\x65', '\x63', '\x6b', '\x73',
+ '\x75', '\x6d', '\x20', '\x6f', '\x66', '\x20', '\x62', '\x6f',
+ '\x6f', '\x74', '\x6c', '\x6f', '\x61', '\x64', '\x65', '\x72',
+ '\x20', '\x69', '\x73', '\x20', '\x00', '\x00', '\x57', '\x61',
+ '\x69', '\x74', '\x69', '\x6e', '\x67', '\x20', '\x66', '\x6f',
+ '\x72', '\x20', '\x6c', '\x6f', '\x61', '\x64', '\x20', '\x69',
+ '\x6e', '\x66', '\x6f', '\x2e', '\x0d', '\x0a', '\x00', '\x00',
+ '\x47', '\x6f', '\x74', '\x20', '\x6c', '\x6f', '\x61', '\x64',
+ '\x20', '\x69', '\x6e', '\x66', '\x6f', '\x2e', '\x0d', '\x0a',
+ '\x00', '\x00', '\x50', '\x41', '\x43', '\x4b', '\x45', '\x54',
+ '\x5f', '\x49', '\x4e', '\x46', '\x4f', '\x0d', '\x0a', '\x00',
+ '\x53', '\x45', '\x54', '\x5f', '\x52', '\x45', '\x47', '\x49',
+ '\x53', '\x54', '\x45', '\x52', '\x0d', '\x0a', '\x00', '\x00',
+ '\x47', '\x45', '\x54', '\x5f', '\x52', '\x45', '\x47', '\x49',
+ '\x53', '\x54', '\x45', '\x52', '\x0d', '\x0a', '\x00', '\x00',
+ '\x50', '\x41', '\x55', '\x53', '\x45', '\x5f', '\x4c', '\x4f',
+ '\x4f', '\x50', '\x0d', '\x0a', '\x00', '\x00', '\x4d', '\x45',
+ '\x4d', '\x5f', '\x56', '\x45', '\x52', '\x49', '\x46', '\x59',
+ '\x0d', '\x0a', '\x00', '\x00', '\x76', '\x65', '\x72', '\x69',
+ '\x66', '\x79', '\x20', '\x66', '\x61', '\x69', '\x6c', '\x65',
+ '\x64', '\x0d', '\x0a', '\x00', '\x4d', '\x45', '\x4d', '\x5f',
+ '\x54', '\x45', '\x53', '\x54', '\x0d', '\x0a', '\x00', '\x00',
+ '\x23', '\x23', '\x23', '\x20', '\x4d', '\x65', '\x6d', '\x6f',
+ '\x72', '\x79', '\x20', '\x74', '\x65', '\x73', '\x74', '\x20',
+ '\x66', '\x61', '\x69', '\x6c', '\x65', '\x64', '\x20', '\x61',
+ '\x74', '\x20', '\x00', '\x00', '\x50', '\x61', '\x73', '\x73',
+ '\x65', '\x64', '\x20', '\x6d', '\x65', '\x6d', '\x6f', '\x72',
+ '\x79', '\x20', '\x74', '\x65', '\x73', '\x74', '\x2e', '\x0d',
+ '\x0a', '\x00', '\x4d', '\x45', '\x4d', '\x5f', '\x44', '\x55',
+ '\x4d', '\x50', '\x0d', '\x0a', '\x00', '\x00', '\x4d', '\x45',
+ '\x4d', '\x5f', '\x43', '\x4c', '\x45', '\x41', '\x52', '\x0d',
+ '\x0a', '\x00', '\x46', '\x4c', '\x41', '\x53', '\x48', '\x0d',
+ '\x0a', '\x00', '\x4a', '\x55', '\x4d', '\x50', '\x0d', '\x0a',
+ '\x00', '\x00', '\x45', '\x4e', '\x44', '\x0d', '\x0a', '\x00',
+ '\x23', '\x23', '\x23', '\x20', '\x55', '\x6e', '\x6b', '\x6e',
+ '\x6f', '\x77', '\x6e', '\x20', '\x74', '\x79', '\x70', '\x65',
+ '\x3a', '\x20', '\x00', '\x00', '\x43', '\x68', '\x65', '\x63',
+ '\x6b', '\x73', '\x75', '\x6d', '\x20', '\x6f', '\x66', '\x20',
+ '\x66', '\x69', '\x6c', '\x65', '\x20', '\x69', '\x73', '\x20',
+ '\x00', '\x00', '\x23', '\x23', '\x23', '\x20', '\x4d', '\x65',
+ '\x6d', '\x6f', '\x72', '\x79', '\x20', '\x74', '\x65', '\x73',
+ '\x74', '\x20', '\x31', '\x20', '\x66', '\x61', '\x69', '\x6c',
+ '\x65', '\x64', '\x20', '\x61', '\x74', '\x20', '\x00', '\x00',
+ '\x23', '\x23', '\x23', '\x20', '\x4d', '\x65', '\x6d', '\x6f',
+ '\x72', '\x79', '\x20', '\x74', '\x65', '\x73', '\x74', '\x20',
+ '\x32', '\x20', '\x66', '\x61', '\x69', '\x6c', '\x65', '\x64',
+ '\x20', '\x61', '\x74', '\x20', '\x00', '\x00', '\x20', '\x3a',
+ '\x00', '\x00', '\x38', '\x4d', '\x62', '\x20', '\x42', '\x42',
+ '\x00', '\x00', '\x38', '\x4d', '\x62', '\x20', '\x54', '\x42',
+ '\x00', '\x00', '\x31', '\x36', '\x4d', '\x62', '\x20', '\x42',
+ '\x42', '\x00', '\x31', '\x36', '\x4d', '\x62', '\x20', '\x54',
+ '\x42', '\x00', '\x33', '\x32', '\x4d', '\x62', '\x20', '\x54',
+ '\x42', '\x00', '\x55', '\x6e', '\x73', '\x75', '\x70', '\x70',
+ '\x6f', '\x72', '\x74', '\x65', '\x64', '\x20', '\x69', '\x6e',
+ '\x74', '\x65', '\x72', '\x6c', '\x65', '\x61', '\x76', '\x65',
+ '\x21', '\x0a', '\x00', '\x00', '\x46', '\x6f', '\x75', '\x6e',
+ '\x64', '\x20', '\x31', '\x20', '\x78', '\x20', '\x43', '\x46',
+ '\x49', '\x20', '\x61', '\x74', '\x20', '\x00', '\x54', '\x6f',
+ '\x6f', '\x20', '\x6d', '\x61', '\x6e', '\x79', '\x20', '\x72',
+ '\x65', '\x67', '\x69', '\x6f', '\x6e', '\x73', '\x20', '\x6f',
+ '\x6e', '\x20', '\x63', '\x68', '\x69', '\x70', '\x21', '\x0a',
+ '\x00', '\x00', '\x4e', '\x6f', '\x20', '\x73', '\x69', '\x6e',
+ '\x67', '\x6c', '\x65', '\x20', '\x78', '\x31', '\x36', '\x20',
+ '\x61', '\x74', '\x20', '\x00', '\x4e', '\x6f', '\x20', '\x69',
+ '\x6e', '\x74', '\x65', '\x72', '\x6c', '\x65', '\x61', '\x76',
+ '\x65', '\x64', '\x20', '\x78', '\x31', '\x36', '\x20', '\x61',
+ '\x74', '\x20', '\x00', '\x00', '\x46', '\x6f', '\x75', '\x6e',
+ '\x64', '\x20', '\x00', '\x00', '\x31', '\x00', '\x32', '\x00',
+ '\x20', '\x78', '\x20', '\x00', '\x46', '\x61', '\x74', '\x61',
+ '\x6c', '\x3a', '\x20', '\x66', '\x6c', '\x61', '\x73', '\x68',
+ '\x20', '\x69', '\x73', '\x20', '\x74', '\x6f', '\x6f', '\x20',
+ '\x73', '\x6d', '\x61', '\x6c', '\x6c', '\x2e', '\x0a', '\x00',
+ '\x53', '\x65', '\x63', '\x74', '\x6f', '\x72', '\x20', '\x65',
+ '\x72', '\x61', '\x73', '\x65', '\x20', '\x65', '\x72', '\x72',
+ '\x6f', '\x72', '\x0a', '\x00', '\x45', '\x72', '\x72', '\x6f',
+ '\x72', '\x20', '\x61', '\x74', '\x20', '\x00', '\x3a', '\x20',
+ '\x4e', '\x6f', '\x20', '\x6e', '\x65', '\x65', '\x64', '\x20',
+ '\x74', '\x6f', '\x20', '\x77', '\x72', '\x69', '\x74', '\x65',
+ '\x0a', '\x00', '\x3a', '\x20', '\x45', '\x72', '\x61', '\x73',
+ '\x69', '\x6e', '\x67', '\x20', '\x00', '\x00', '\x20', '\x62',
+ '\x79', '\x74', '\x65', '\x73', '\x0a', '\x00', '\x3a', '\x20',
+ '\x57', '\x72', '\x69', '\x74', '\x69', '\x6e', '\x67', '\x20',
+ '\x00', '\x00', '\x3a', '\x20', '\x56', '\x65', '\x72', '\x69',
+ '\x66', '\x79', '\x69', '\x6e', '\x67', '\x2e', '\x2e', '\x2e',
+ '\x00', '\x00', '\x4f', '\x4b', '\x0a', '\x00', '\x6a', '\x17',
+ '\x00', '\x38', '\x72', '\x17', '\x00', '\x38', '\x7a', '\x17',
+ '\x00', '\x38', '\x82', '\x17', '\x00', '\x38', '\x8a', '\x17',
+ '\x00', '\x38', '\x00', '\x00', '\x00', '\x80', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x84', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00',
+ '\x00', '\x00', '\x00', '\x00', '\x54', '\x68', '\x69', '\x73',
+ '\x20', '\x62', '\x6f', '\x6f', '\x74', '\x6c', '\x6f', '\x61',
+ '\x64', '\x65', '\x72', '\x20', '\x77', '\x61', '\x73', '\x20',
+ '\x62', '\x75', '\x69', '\x6c', '\x74', '\x20', '\x62', '\x79',
+ '\x20', '\x72', '\x6f', '\x6f', '\x74', '\x20', '\x6f', '\x6e',
+ '\x20', '\x57', '\x65', '\x64', '\x20', '\x4d', '\x61', '\x79',
+ '\x20', '\x31', '\x36', '\x20', '\x32', '\x31', '\x3a', '\x33',
+ '\x31', '\x3a', '\x34', '\x36', '\x20', '\x43', '\x45', '\x53',
+ '\x54', '\x20', '\x32', '\x30', '\x30', '\x37', '\x2e', '\x0d',
+ '\x0a', '\x00'
+};
diff --git a/package/etrax-tools/src/e100boot/sbl/serial.c b/package/etrax-tools/src/e100boot/sbl/serial.c
new file mode 100644
index 000000000..95a02299e
--- /dev/null
+++ b/package/etrax-tools/src/e100boot/sbl/serial.c
@@ -0,0 +1,637 @@
+/*!***************************************************************************
+*!
+*! FILE NAME : serial.c
+*!
+*! DESCRIPTION: Serial boot stuff for e100boot.
+*!
+*! ---------------------------------------------------------------------------
+*! HISTORY
+*!
+*! DATE NAME CHANGES
+*! ---- ---- -------
+*! 1996 Ronny Raneup Initial version
+*! 2002 05 02 Ronny Ranerup Moved it into this file
+*! ---------------------------------------------------------------------------
+*! (C) Copyright 1999-2003 Axis Communications AB, LUND, SWEDEN
+*!***************************************************************************/
+
+/************************** Include files ********************************/
+
+#include <conf.h>
+#include <e100boot.h>
+#include <serial.h>
+#include <common.h>
+
+/************************** Type definitions *****************************/
+
+/************************** Global variables *****************************/
+
+FILE *serialFd;
+int set_baudrate = 9600; /* Baudrate for serial boot (after bootloader). */
+
+/************************** Constants and macros *************************/
+
+/************************** Function prototypes **************************/
+
+int SetControlMode(FILE *fd, int value, int onoff);
+int SetInputMode(FILE *fd, int value, int onoff);
+int SetLocalMode(FILE *fd, int value, int onoff);
+int SetOutputMode(FILE *fd, int value, int onoff);
+int WaitForRead(int s, int usecs);
+int WaitForWrite(int s, int usecs);
+void setBaudRate(unsigned int b);
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: SerBoot
+*#
+*# DESCRIPTION: The main serial boot routine.
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 2000 01 07 ronny Initial version
+*#
+*#***************************************************************************/
+
+void
+SerBoot(void)
+{
+ int seq = 0;
+ struct packet_buf *p;
+ int got_new_ack = 0;
+ int connected = 0;
+ char rec_buf;
+
+ while ((p = create_packet(seq))) {
+ int offset = 0;
+ int tr_len = 0;
+ static char fName[MAX_STRING_LEN] = {0,};
+
+ if (strcmp(fName, p->boot_file->fileName) != 0) {
+ while (connected && got_new_ack == 0) {
+ WaitForRead(fileno(serialFd), 1000000); /* Did we get data? */
+
+ if(fread(&rec_buf, 1, 1, serialFd) > 0) {
+ fwrite(&rec_buf, 1, 1, stderr);
+ if (rec_buf == '+') {
+ printf("# Got ack.\n");
+ got_new_ack = 1;
+ }
+ }
+ }
+
+ strcpy(fName, p->boot_file->fileName);
+ printf("# transmitting file '%s'\n", fName);
+ got_new_ack = 0;
+ }
+
+ printf("# transmitting %d bytes at baudrate %d.\n", (int)p->size, p->baud_rate);
+
+ // setBaudRate(p->baud_rate);
+
+ while (tr_len != p->size) {
+
+ if (WaitForRead(fileno(serialFd), 0)) { /* Did we get data? */
+ // static int connected = 0;
+ char rec_buf = 0;
+ int rec_len = 0;
+
+ if((rec_len = fread(&rec_buf, 1, 1, serialFd)) > 0) {
+ if (rec_buf == '+') {
+ if (!connected++) {
+ printf("# Got ack.\n");
+ }
+ else {
+ got_new_ack = 1;
+ printf("# Got ack.\n");
+ }
+ fwrite(&rec_buf, rec_len, 1, stderr);
+ }
+ }
+ }
+
+ if (tr_len < p->size) { /* send one byte */
+ while (!(WaitForWrite(fileno(serialFd), 1000000))) { }
+ fwrite(&p->data[offset+tr_len], 1, 1, serialFd);
+ tr_len++;
+ }
+ }
+
+ seq++; /* We have transmitted entire packet. */
+ }
+
+ printf("# Transmission done. Just listening now.\n");
+
+ while(1) {
+ if (WaitForRead(fileno(serialFd), 10000000)) { /* Did we get data? */
+ char rec_buf;
+ int rec_len = 0;
+
+ if((rec_len = fread(&rec_buf, 1, 1, serialFd)) > 0) {
+ fwrite(&rec_buf, rec_len, 1, stderr);
+ }
+ }
+ }
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: SetupSerial
+*#
+*# PARAMETERS:
+*#
+*# DESCRIPTION:
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 970325 ronny Initial version
+*#
+*#***************************************************************************/
+
+int
+SetupSerial(void)
+{
+ int baudRates[] = {0, 50, 75, 110, 134, 150, 200, 300, 600,
+ 1200, 1800, 2400, 4800, 9600, 19200, 38400, 57600, 115200};
+ struct termios ti;
+ int baudrate;
+
+ if ((serialFd = fopen(device, "r+")) == NULL) {
+ perror("Can't open modem");
+ return FALSE;
+ }
+
+ /* Important. Remember this!!!!!!! */
+ /* setvbuf(serialFd, NULL, _IONBF, 0); */
+
+ setvbuf(serialFd, NULL, _IONBF, 0);
+ setvbuf(stdout, NULL, _IONBF, 0);
+
+ if (fcntl(fileno(serialFd), F_SETFL, O_NONBLOCK) == -1) {
+ perror("fcntl");
+ return FALSE;
+ }
+
+ tcflush(fileno(serialFd), TCIOFLUSH);
+
+ if (tcgetattr(fileno(serialFd), &ti)) {
+ perror("tcgetattr");
+ return FALSE;
+ }
+
+ ti.c_cc[VMIN] = 1;
+ ti.c_cc[VTIME] = 0;
+ ti.c_cc[VSTART] = 0x11;
+ ti.c_cc[VSTOP] = 0x13;
+
+ if (tcsetattr(fileno(serialFd), TCSANOW, &ti)) {
+ perror("tcsetattr");
+ return FALSE;
+ }
+
+ //if (db3) printf("outspeed: %d, inspeed: %d\n", baudRates[cfgetospeed(&ti)], baudRates[cfgetispeed(&ti)]);
+ {
+ int new_baudrate = 0;
+
+ if (set_baudrate <= 50) {
+ baudrate = B50;
+ new_baudrate = 50;
+ }
+ else if (set_baudrate <= 75) {
+ baudrate = B75;
+ new_baudrate = 75;
+ }
+ else if (set_baudrate <= 110) {
+ baudrate = B110;
+ new_baudrate = 110;
+ }
+ else if (set_baudrate <= 134) {
+ baudrate = B134;
+ new_baudrate = 134;
+ }
+ else if (set_baudrate <= 150) {
+ baudrate = B150;
+ new_baudrate = 150;
+ }
+ else if (set_baudrate <= 200) {
+ baudrate = B200;
+ new_baudrate = 200;
+ }
+ else if (set_baudrate <= 300) {
+ baudrate = B300;
+ new_baudrate = 300;
+ }
+ else if (set_baudrate <= 600) {
+ baudrate = B600;
+ new_baudrate = 600;
+ }
+ else if (set_baudrate <= 1200) {
+ baudrate = B1200;
+ new_baudrate = 1200;
+ }
+ else if (set_baudrate <= 1800) {
+ baudrate = B1800;
+ new_baudrate = 1800;
+ }
+ else if (set_baudrate <= 2400) {
+ baudrate = B2400;
+ new_baudrate = 2400;
+ }
+ else if (set_baudrate <= 4800) {
+ baudrate = B4800;
+ new_baudrate = 4800;
+ }
+ else if (set_baudrate <= 9600) {
+ baudrate = B9600;
+ new_baudrate = 9600;
+ }
+ else if (set_baudrate <= 19200) {
+ baudrate = B19200;
+ new_baudrate = 19200;
+ }
+ else if (set_baudrate <= 38400)
+ baudrate = B38400;
+#if defined(B57600) /* POSIX only defines <= 38400 */
+ else if (set_baudrate <= 57600) {
+ baudrate = B57600;
+ new_baudrate = 57600;
+ }
+#endif
+#if defined(B115200)
+ else if (set_baudrate <= 115200) {
+ baudrate = B115200;
+ new_baudrate = 115200;
+ }
+#endif
+#if defined(B230400)
+ else if (set_baudrate <= 230400) {
+ baudrate = B230400;
+ new_baudrate = 230400;
+ }
+#endif
+ else {
+ baudrate = B38400;
+ }
+
+ cfsetispeed(&ti, B9600);
+ cfsetospeed(&ti, baudrate);
+ tcsetattr(fileno(serialFd), TCSANOW, &ti);
+
+ // printf("* baudrate set to %d\n", new_baudrate);
+ set_baudrate = new_baudrate;
+
+ if (db3) printf("outspeed: %d, inspeed: %d\n", baudRates[cfgetospeed(&ti)], baudRates[cfgetispeed(&ti)]);
+ }
+
+ cfmakeraw(&ti);
+
+ SetInputMode(serialFd, IXON, FALSE);
+ SetInputMode(serialFd, IXOFF, FALSE);
+ SetInputMode(serialFd, IXANY, FALSE);
+ SetInputMode(serialFd, ICRNL, FALSE);
+ SetInputMode(serialFd, IGNPAR, TRUE);
+ SetInputMode(serialFd, IGNBRK, TRUE);
+ SetInputMode(serialFd, IGNPAR, TRUE);
+ SetInputMode(serialFd, INPCK, FALSE);
+
+ SetOutputMode(serialFd, OPOST, FALSE);
+ SetOutputMode(serialFd, ONLCR, FALSE);
+#ifdef OXTABS
+ SetOutputMode(serialFd, OXTABS, FALSE);
+#endif
+
+#ifdef ENOEOT
+ SetOutputMode(serialFd, ENOEOT, FALSE);
+#endif
+
+ SetLocalMode(serialFd, ECHO, FALSE);
+ SetLocalMode(serialFd, ISIG, FALSE);
+
+ SetLocalMode(serialFd, ICANON, FALSE);
+
+ SetControlMode(serialFd, PARENB, FALSE);
+ SetControlMode(serialFd, CLOCAL, TRUE);
+ SetControlMode(serialFd, CREAD, TRUE);
+
+ /* Disable hardware flow control. */
+#if defined(CRTSCTS)
+
+ SetControlMode(serialFd, CRTSCTS, FALSE);
+#if defined(CRTSXOFF)
+ SetControlMode(serialFd, CRTSXOFF, FALSE);
+#endif
+
+#elif defined(CCTS_OFLOW)
+
+ SetControlMode(serialFd, CCTS_OFLOW, FALSE);
+ SetControlMode(serialFd, CRTS_IFLOW, FALSE);
+
+#elif defined(CNEW_RTSCTS)
+
+ SetControlMode(serialFd, CNEW_RTSCTS, FALSE);
+
+#else
+ printf("Cannot set hardware flow control. Set it manually with a terminal program.\n");
+#endif
+
+ return TRUE;
+}
+
+void
+setBaudRate(unsigned int b)
+{
+ int baudRates[] = {0, 50, 75, 110, 134, 150, 200, 300, 600,
+ 1200, 1800, 2400, 4800, 9600, 19200, 38400, 57600, 115200};
+ struct termios ti;
+
+ if (tcgetattr(fileno(serialFd), &ti)) {
+ perror("tcgetattr");
+ exit(EXIT_FAILURE);
+ }
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: SetInputMode
+*#
+*# PARAMETERS:
+*#
+*# DESCRIPTION:
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 970325 ronny Initial version
+*#
+*#***************************************************************************/
+
+int
+SetInputMode(FILE *fd, int value, int onoff)
+{
+ struct termios settings;
+ int result;
+
+ result = tcgetattr(fileno(fd), &settings);
+ if (result < 0)
+ {
+ perror("error in tcgetattr");
+ return FALSE;
+ }
+
+ if (onoff)
+ settings.c_iflag |= value;
+ else
+ settings.c_iflag &= ~value;
+
+ result = tcsetattr(fileno(fd), TCSANOW, &settings);
+ if (result < 0)
+ {
+ perror("error in tcgetattr");
+ return FALSE;
+ }
+
+ return 1;
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: SetOutputMode
+*#
+*# PARAMETERS:
+*#
+*# DESCRIPTION:
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 2001 May 16 ronny Initial version
+*#
+*#***************************************************************************/
+
+int
+SetOutputMode(FILE *fd, int value, int onoff)
+{
+ struct termios settings;
+ int result;
+
+ result = tcgetattr(fileno(fd), &settings);
+ if (result < 0)
+ {
+ perror("error in tcgetattr");
+ return FALSE;
+ }
+
+ if (onoff)
+ settings.c_oflag |= value;
+ else
+ settings.c_oflag &= ~value;
+
+ result = tcsetattr(fileno(fd), TCSANOW, &settings);
+ if (result < 0)
+ {
+ perror("error in tcgetattr");
+ return FALSE;
+ }
+
+ return 1;
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: SetControlMode
+*#
+*# PARAMETERS:
+*#
+*# DESCRIPTION:
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 970325 ronny Initial version
+*#
+*#***************************************************************************/
+
+int
+SetControlMode(FILE *fd, int value, int onoff)
+{
+#if !defined(_WIN32)
+ struct termios settings;
+ int result;
+
+ result = tcgetattr(fileno(fd), &settings);
+ if (result < 0)
+ {
+ perror("error in tcgetattr");
+ return FALSE;
+ }
+
+ if (onoff)
+ settings.c_cflag |= value;
+ else
+ settings.c_cflag &= ~value;
+
+ result = tcsetattr(fileno(fd), TCSANOW, &settings);
+ if (result < 0)
+ {
+ perror("error in tcgetattr");
+ return FALSE;
+ }
+#endif
+
+ return TRUE;
+}
+/****************************************************************************
+*#
+*# FUNCTION NAME: SetLocalMode
+*#
+*# PARAMETERS:
+*#
+*# DESCRIPTION:
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 970325 ronny Initial version
+*#
+*#***************************************************************************/
+
+int
+SetLocalMode(FILE *fd, int value, int onoff)
+{
+#if !defined(_WIN32)
+ struct termios settings;
+ int result;
+
+ result = tcgetattr(fileno(fd), &settings);
+ if (result < 0)
+ {
+ perror("error in tcgetattr");
+ return FALSE;
+ }
+
+ if (onoff)
+ settings.c_lflag |= value;
+ else
+ settings.c_lflag &= ~value;
+
+ result = tcsetattr(fileno(fd), TCSANOW, &settings);
+ if (result < 0)
+ {
+ perror("error in tcgetattr");
+ return FALSE;
+ }
+#endif
+
+ return TRUE;
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: WaitForRead
+*#
+*# PARAMETERS: Timeout in usecs.
+*#
+*# DESCRIPTION:
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 961001 ronny Initial version
+*# 971204 ronny usecs was a only one tenth of what it should be.
+*#
+*#***************************************************************************/
+
+int
+WaitForRead(int s, int usecs)
+{
+ fd_set mask;
+ int ret;
+ struct timeval tm;
+
+ tm.tv_sec = usecs/1000000;
+ tm.tv_usec = usecs%1000000;
+
+ FD_ZERO(&mask);
+ FD_SET(s, &mask);
+
+ if ((ret = select(FD_SETSIZE, &mask, NULL, NULL, &tm)) == -1) {
+ printf("<<< select failed with return: %d.\n", ret);
+ return FALSE;
+ }
+ else {
+ if (db3) printf("* select returned OK:%d\n", ret);
+ }
+
+ if (FD_ISSET(s, &mask) == 0) {
+ if (db2) printf("<<< WaitForRead. No data to read.\n");
+ return FALSE;
+ }
+
+ if (db3) printf("<<< WaitForRead OK. Returned:%d.\n", ret);
+
+ return TRUE;
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: WaitForWrite
+*#
+*# PARAMETERS:
+*#
+*# DESCRIPTION:
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 2000-11-20 ronny Initial version
+*#
+*#***************************************************************************/
+
+int
+WaitForWrite(int s, int usecs)
+{
+ fd_set mask;
+ int ret;
+ struct timeval tm;
+
+ tm.tv_sec = usecs/1000000;
+ tm.tv_usec = usecs%1000000;
+
+ FD_ZERO(&mask);
+ FD_SET(s, &mask);
+
+ if ((ret = select(FD_SETSIZE, NULL, &mask, NULL, &tm)) == -1) {
+ printf("<<< select failed with return: %d.\n", ret);
+ return FALSE;
+ }
+ else {
+ if (db3) printf("* select returned OK:%d\n", ret);
+ }
+
+ if (FD_ISSET(s, &mask) == 0) {
+ if (db2) printf("<<< WaitForWrite. No data to read.\n");
+ return FALSE;
+ }
+
+ if (db3) printf("<<< WaitForWrite OK. Returned:%d.\n", ret);
+
+ return TRUE;
+}
diff --git a/package/etrax-tools/src/e100boot/sbl/serial.h b/package/etrax-tools/src/e100boot/sbl/serial.h
new file mode 100644
index 000000000..98e68200c
--- /dev/null
+++ b/package/etrax-tools/src/e100boot/sbl/serial.h
@@ -0,0 +1,26 @@
+/*!***************************************************************************
+*!
+*! FILE NAME : serial.h
+*!
+*! DESCRIPTION: Serial boot stuff for e100boot.
+*!
+*! ---------------------------------------------------------------------------
+*! HISTORY
+*!
+*! DATE NAME CHANGES
+*! ---- ---- -------
+*! 1996 Ronny Raneup Initial version
+*! 2002 05 02 Ronny Ranerup Moved it into this file
+*! ---------------------------------------------------------------------------
+*! (C) Copyright 1999, 2000, 2001, 2002 Axis Communications AB, LUND, SWEDEN
+*!***************************************************************************/
+/************************** Include files ********************************/
+/************************** Type definitions *****************************/
+/************************** Global variables *****************************/
+
+extern int set_baudrate; /* Baudrate for serial boot (after bootloader). */
+
+/************************** Constants and macros *************************/
+/************************** Function prototypes **************************/
+int SetupSerial (void);
+void SerBoot (void);
diff --git a/package/etrax-tools/src/e100boot/sbl/win32/Makefile b/package/etrax-tools/src/e100boot/sbl/win32/Makefile
new file mode 100644
index 000000000..cb8911a0a
--- /dev/null
+++ b/package/etrax-tools/src/e100boot/sbl/win32/Makefile
@@ -0,0 +1,8 @@
+%.o : %.c
+ gcc -mno-cygwin -c -g -Wall -I ../ -I ../../cbl/src/ -I ../../wpdpack/Include -o $@ $<
+
+etrax100boot : common.o network.o boot_images.o
+ gcc -mno-cygwin -g -Wall -L ../../wpdpack/Lib -o $@ $^ -lwpcap -lpacket -lws2_32
+
+clean :
+ rm -f *.o etrax100boot
diff --git a/package/etrax-tools/src/e100boot/sbl/win32/boot_images.c b/package/etrax-tools/src/e100boot/sbl/win32/boot_images.c
new file mode 100755
index 000000000..a09dc9ddb
--- /dev/null
+++ b/package/etrax-tools/src/e100boot/sbl/win32/boot_images.c
@@ -0,0 +1,35 @@
+/* boot_images.c - Collection of the different boot images
+ * Johan Adolfsson Axis Communications AB
+ * $Id: boot_images.c,v 1.1 2004/01/26 10:52:40 mikaelp Exp $
+ */
+
+#include <stdio.h>
+#include "boot_images.h"
+
+/* We include the C files here to the size etc. easy */
+#include "net_ima.c"
+#include "ser_ima.c"
+#include "net_noleds_ima.c"
+#include "ser_noleds_ima.c"
+
+struct boot_image_info_type boot_image_info[] =
+{
+ { INTERNAL_NW, net_ima, sizeof net_ima, "Network boot (default)"},
+ { INTERNAL_SER, ser_ima, sizeof ser_ima, "Serial boot"},
+ { INTERNAL_SER_NOLEDS, ser_noleds_ima, sizeof ser_noleds_ima, "Serial boot, no leds"},
+ { INTERNAL_NW_NOLEDS, net_noleds_ima, sizeof net_noleds_ima, "Network boot, no leds"},
+
+ { "DBGNONE", net_ima, sizeof net_ima, "Obsolete (use INTERNAL_NW instead)" },
+ { "DBG0", net_ima, sizeof net_ima, "Obsolete (use INTERNAL_NW instead)" },
+ { "DBG1", net_ima, sizeof net_ima, "Obsolete (use INTERNAL_NW instead)" },
+ { "DBG2", net_ima, sizeof net_ima, "Obsolete (use INTERNAL_NW instead)" },
+ { "DBG3", net_ima, sizeof net_ima, "Obsolete (use INTERNAL_NW instead)" },
+
+ { "DBGNONE_NOLEDS", net_noleds_ima, sizeof net_noleds_ima, "Obsolete (use INTERNAL_NW_NOLEDS instead)" },
+ { "DBG0_NOLEDS", net_noleds_ima, sizeof net_noleds_ima, "Obsolete (use INTERNAL_NW_NOLEDS instead)" },
+ { "DBG1_NOLEDS", net_noleds_ima, sizeof net_noleds_ima, "Obsolete (use INTERNAL_NW_NOLEDS instead)" },
+ { "DBG2_NOLEDS", net_noleds_ima, sizeof net_noleds_ima, "Obsolete (use INTERNAL_NW_NOLEDS instead)" },
+ { "DBG3_NOLEDS", net_noleds_ima, sizeof net_noleds_ima, "Obsolete (use INTERNAL_NW_NOLEDS instead)" },
+
+ { NULL, NULL, 0, NULL } /* End of array */
+};
diff --git a/package/etrax-tools/src/e100boot/sbl/win32/common.c b/package/etrax-tools/src/e100boot/sbl/win32/common.c
new file mode 100644
index 000000000..fd47a5310
--- /dev/null
+++ b/package/etrax-tools/src/e100boot/sbl/win32/common.c
@@ -0,0 +1,1651 @@
+/*!***************************************************************************
+*!
+*! FILE NAME : common.c
+*!
+*! DESCRIPTION: Common functions for e100boot.
+*!
+*! ---------------------------------------------------------------------------
+*! HISTORY
+*!
+*! DATE NAME CHANGES
+*! ---- ---- -------
+*! ??? ? ???? Ronny Ranerup Initial version
+*! ---------------------------------------------------------------------------
+*! (C) Copyright 1999-2003 Axis Communications AB, LUND, SWEDEN
+*!***************************************************************************/
+/* $Id: common.c,v 1.1 2004/01/26 10:52:40 mikaelp Exp $ */
+
+/************************** Version **************************************/
+
+char version[] = "Time-stamp: $Id: common.c,v 1.1 2004/01/26 10:52:40 mikaelp Exp $";
+
+/************************** Include files ********************************/
+
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <io.h>
+#include <winsock2.h>
+
+#include <e100boot.h>
+#include <pcap.h>
+#include "boot_images.h"
+#include <reg_des.h>
+#include <sv_addr_ag.h>
+#include <common.h>
+
+#include <serial.h>
+#include <network.h>
+
+/************************** Constants and macros *************************/
+
+#define BOOT_CMDS_FILE "BOOT_CMDS"
+
+/************************** Type definitions *****************************/
+
+struct label_t {
+ struct label_t *prev;
+ udword addr;
+ char *name;
+};
+
+/************************** Global variables *****************************/
+
+char needle[MAX_STRING_LEN] = "END"; /* search needle for --find */
+int needle_len = 3;
+
+int exitonfind = FALSE;
+
+int doing_flash = FALSE; /* Just a flag to see if we should
+ warn that it might take some
+ time. */
+
+int toFiles = FALSE; /* Dump all packets to files. */
+int cmdsOnly = FALSE; /* Just dump boot cmds to file. */
+int netBoot = TRUE; /* Do network boot? */
+int serBoot = FALSE; /* Do serial boot? */
+
+struct label_t *loop_label = NULL;
+struct label_t *label = NULL;
+
+struct packet_buf *first_packet = NULL;
+struct packet_buf *last_packet = NULL;
+
+struct packet_buf *boot_cmds_packet;
+
+int create_boot_loader = TRUE;
+
+/* We use the INTERNAL boot image as default */
+char boot_loader_file[MAX_STRING_LEN] = INTERNAL_NW;
+
+int noleds = FALSE; /* Use boot images that doesn't toggle leds? */
+
+struct boot_files_T *first_boot_file = NULL;
+struct boot_files_T *last_boot_file = NULL;
+
+unsigned int boot_cmds[SIZE_OF_BOOT_CMDS / sizeof(unsigned int)];
+int boot_cmds_cnt = 0;
+
+int svboot = FALSE;
+
+int quiet = 0;
+
+struct packet_header_T send_packet;
+struct packet_header_T *receive_packet;
+
+int seq_nr = 0;
+
+/* debug flags */
+int db1 = FALSE;
+int db2 = FALSE;
+int db3 = FALSE;
+int db4 = FALSE;
+
+char device[MAX_STRING_LEN] = "";
+
+
+/************************** Function prototypes **************************/
+
+FILE *Fopen (const char *name, const char *mode);
+int main (int argc, const char *argv[]);
+int GetNumberOption (int *argNr, int argCount, const char *argVect[], unsigned int *ret, const char *option, int base);
+int GetStringOption (int *argNr, int argCount, const char *argVect[], char *ret, const char *option);
+int GetRegisterOption (int *argNr, int argCount, const char *argVect[], unsigned int *ret, const char *option, int base);
+struct boot_files_T* allocate_boot_file (struct boot_files_T *bf);
+struct packet_buf* CreateNewBootPacket (void);
+struct packet_buf* allocate_packet (struct packet_buf *p);
+void SigHandler (int sig);
+void CreateBootLoader (void);
+void FinishBootCmds (void);
+void ParseArgs (int argc, const char *argv[]);
+void PrintHelp (void);
+void CreateBootCmds (void);
+void handle_labels (void);
+void new_label (struct label_t **label, udword addr, const char *name);
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: main
+*#
+*# PARAMETERS: Command line arguments.
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 961022 ronny Initial version
+*#
+*#***************************************************************************/
+
+int
+main(int argc, const char *argv[])
+{
+ ParseArgs(argc, argv);
+
+ if (cmdsOnly) {
+ /* We make this a special case to avoid messing up other code. */
+ CreateBootCmds();
+ FinishBootCmds();
+ SendToDevice(&boot_cmds_packet->data[SIZE_OF_HEADER],SIZE_OF_BOOT_CMDS);
+ exit(EXIT_SUCCESS);
+ }
+
+ if (netBoot && !toFiles) {
+ /* Do not bother with this if we just want to write the packets to
+ files. Means you do not have to be root to run --tofiles. */
+ net_init();
+ }
+ else if (serBoot) {
+ /*if (!SetupSerial())*/ {
+ exit(0);
+ }
+ }
+
+ CreateBootLoader();
+ CreateBootCmds();
+ FinishBootCmds();
+
+ printf("Starting boot...\n");
+ if (doing_flash) {
+ printf("We're doing a flash write, this may take up to a few minutes...\n");
+ }
+
+ if (toFiles) {
+ udword seq = 0;
+ struct packet_buf *p;
+
+ while((p = create_packet(seq++))) {
+ SendToDevice(p->data, p->size);
+ }
+
+ exit(EXIT_SUCCESS);
+ }
+
+ if (netBoot) {
+ NetBoot();
+ }
+ else if (serBoot) {
+ /*SerBoot();*/
+ }
+
+ printf("Done.\n");
+ return EXIT_SUCCESS;
+} /* main */
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: free_packet
+*#
+*# PARAMETERS: struct to free
+*#
+*# DESCRIPTION: Frees struct and data in struct.
+*#
+*# RETURNS: Pointer to next struct.
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 2000 02 07 ronny Initial version
+*#
+*#***************************************************************************/
+
+struct packet_buf*
+free_packet(struct packet_buf *p)
+{
+ struct packet_buf *next_p;
+
+ next_p = p->next;
+ free(p->data);
+ free(p);
+ return(next_p);
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: create_packet
+*#
+*# PARAMETERS: Sequence number of desired packet.
+*#
+*# DESCRIPTION:
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 2000 06 28 ronny Initial version
+*#
+*#***************************************************************************/
+
+struct packet_buf*
+create_packet(udword seq)
+{
+ struct packet_buf *p = first_packet;
+ /* Should check last first? */
+
+ if (db4) printf("> create_packet seq %d\n", seq);
+
+ while (p) {
+ if (p->seq == seq) {
+ return(p);
+ }
+ p = p->next;
+ }
+
+ return(CreateNewBootPacket());
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: find_string
+*#
+*# PARAMETERS: New string to search.
+*#
+*# DESCRIPTION: Searches a number of strings for needle[], including strings
+*# overlapping between different calls.
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 020502 ronny Initial version
+*#
+*#***************************************************************************/
+
+void
+find_string(char *str)
+{
+ static int matched = 0;
+ int hs[MAX_STRING_LEN];
+ static int cur_hs = 0;
+ static int hs_len = 0;
+ static int last_hs = 0;
+
+ static int cur_needle = 0;
+
+ if (!needle[0]) {
+ return;
+ }
+ // printf("# adding >%s<\n", str);
+
+ {
+ int c = 0;
+ int s = 0;
+
+ while((c = str[s])) {
+ // printf("\n# cur_hs %d, hs_len %d\n", cur_hs, hs_len);
+ {
+ int i;
+
+ for(i = 0; i != hs_len; i++) {
+ // printf("hs[%d] = %d(%c)\n", i, (int)hs[i], hs[i] < 32 ? 'X' : hs[i]);
+ }
+ }
+
+ if (cur_hs == hs_len) {
+ // printf("adding char %d(%c) at hs[%d]\n", (int)c, c < 32 ? 'X' : c, hs_len);
+ hs[hs_len] = c;
+ hs_len++;
+ s++;
+ }
+
+ // printf("testing %d at cur_hs %d against %d at cur_needle %d\n",
+ // (int)hs[cur_hs], cur_hs, (int)needle[cur_needle], cur_needle);
+
+ if (hs[cur_hs] == needle[cur_needle]) {
+ if (cur_needle+1 == needle_len) {
+ int exitcode = EXIT_SUCCESS;
+
+ // printf("\nFound needle from --find option.\n");
+ if (exitonfind) {
+ int ret;
+ // printf("scanf (s=%d)'%s'\n", s, &str[s+1]);
+ ret = sscanf(&str[s+1], "%i", &exitcode);
+ // printf("ret %d, '%s'\n", ret, &str[s+1]);
+ }
+ printf("Exiting with code %d\n", exitcode);
+ exit(exitcode);
+ }
+ cur_needle++;
+ cur_hs++;
+ }
+ else {
+ // printf("no match, shifting hs.\n");
+ {
+ int i;
+ for(i=0; i!= hs_len-1; i++) {
+ hs[i] = hs[i+1];
+ }
+ }
+ hs_len--;
+ cur_needle = 0;
+ cur_hs = 0;
+ }
+ }
+ }
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: Fopen
+*#
+*# PARAMETERS: Name and mode, both strings.
+*#
+*# DESCRIPTION: Opens a file and returns its fd, or NULL.
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 961022 ronny Initial version
+*#
+*#***************************************************************************/
+
+FILE *
+Fopen(const char *name, const char *mode)
+{
+ FILE *fd;
+
+ if (db2) printf(">>> Fopen '%s', mode '%s'\n", name, mode);
+
+ fd = fopen(name, mode);
+
+ if (fd == NULL) {
+ printf("<<< Fopen failed on '%s', mode '%s'\n", name, mode);
+ return ((FILE*) NULL);
+ }
+
+ if (strncmp(mode, "a", 1) == 0) {
+ if (db3) printf("* Append mode, seeking to end.\n");
+ fseek(fd, 0L, SEEK_SET);
+ }
+
+ if (db2) printf("<<< Fopen: '%s'\n", name);
+
+ return(fd);
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: ParseArgs
+*#
+*# PARAMETERS: Standard command line args.
+*#
+*# DESCRIPTION: Parses command line arguments.
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 960909 ronny Initial version
+*#***************************************************************************/
+
+void
+ParseArgs (int argc, const char *argv[])
+{
+ int argi;
+ int i;
+ int printHelp = FALSE;
+ int exitCode = EXIT_SUCCESS;
+ char dbStr[MAX_STRING_LEN]; /* Debug option string. */
+ int number;
+ int argCount;
+ const char **argVect;
+ struct stat st;
+
+ if (db4) printf(">>> ParseArgs\n");
+ argCount = argc;
+ argVect = argv;
+
+ for (argi = 1; argi < argCount; argi++) {
+ if (db4) printf("argv[%d] = '%s'\n", argi, argVect[argi]);
+ if (strncmp(argVect[argi], "--from", 6) == 0) {
+ if (GetStringOption(&argi, argCount, argVect, host1, "--from") == 0) {
+ printHelp = TRUE;
+ exitCode = EXIT_FAILURE;
+ }
+ else {
+ printf("Host: %s %s\n", host1, host2);
+ if (sscanf(host1, "%x-%x-%x-%x-%x-%x", &i, &i, &i, &i, &i, &i) == 6) {
+ printf("Ethernet address\n");
+ }
+ }
+ }
+
+ else if (strncmp(argVect[argi], "--device", 8) == 0) {
+ if (GetStringOption(&argi, argCount, argVect, device, "--device") == 0) {
+ printHelp = TRUE;
+ exitCode = EXIT_FAILURE;
+ }
+ }
+
+ else if (strncmp(argVect[argi], "--network", 9) == 0) {
+ netBoot = TRUE;
+ serBoot = FALSE;
+ strcpy(boot_loader_file, INTERNAL_NW);
+ }
+
+ else if (strncmp(argVect[argi], "--serial", 8) == 0) {
+ serBoot = TRUE;
+ netBoot = FALSE;
+ strcpy(device, "/dev/ttyS0");
+ strcpy(boot_loader_file, INTERNAL_SER);
+ }
+
+ else if (strncmp(argVect[argi], "--noleds", 8) == 0) {
+ noleds = TRUE;
+ }
+
+ else if (strncmp(argVect[argi], "--images", 8) == 0) {
+ int i = 0;
+
+ printf("Internal images:\n");
+
+ while(boot_image_info[i].name) {
+ printf("'%s', %s, size %lu bytes.\n",
+ boot_image_info[i].name,
+ boot_image_info[i].info,
+ boot_image_info[i].len
+ );
+ i++;
+ }
+ exit(EXIT_SUCCESS);
+ }
+
+ else if (strncmp(argv[argi], "--baudrate", 10) == 0) {
+ /* if (GetNumberOption (&argi, argCount, argVect, &set_baudrate, "--baudrate", 10) == 0)*/ {
+ printHelp = TRUE;
+ exitCode = EXIT_FAILURE;
+ }
+ }
+
+ else if (strncmp(argVect[argi], "--tofiles", 9) == 0) {
+ toFiles = TRUE;
+ }
+
+ else if (strncmp(argVect[argi], "--cmdsonly", 10) == 0) {
+ cmdsOnly = TRUE;
+ }
+
+ else if (strncmp(argVect[argi], "--to", 4) == 0) {
+ if ((GetStringOption(&argi, argCount, argVect, host2, "--to") == 0)) {
+ printHelp = TRUE;
+ exitCode = EXIT_FAILURE;
+ }
+ else {
+ printf("Host: %s %s\n", host1, host2);
+ both_addresses = TRUE;
+ if (sscanf(host2, "%x-%x-%x-%x-%x-%x", &i, &i, &i, &i, &i, &i) == 6) {
+ printf("Ethernet address\n");
+ }
+ }
+ }
+
+ else if (strncmp(argVect[argi], "--printp", 8) == 0) {
+ pPacket = 1;
+ }
+
+ else if (strncmp(argVect[argi], "--printascii", 11) == 0) {
+ pPacket = 1;
+ printPacketType = ASCII;
+ }
+
+ else if (strncmp(argVect[argi], "--printudec", 11) == 0) {
+ pPacket = 1;
+ printPacketType = UDEC;
+ }
+
+ else if (strncmp(argVect[argi], "--printhex", 10) == 0) {
+ pPacket = 1;
+ printPacketType = HEX;
+ }
+
+ else if (strncmp(argVect[argi], "--bpl", 5) == 0) {
+ if (GetNumberOption(&argi, argCount, argVect, &p_packet_bpl, "--bpl", 10) == 0) {
+ printHelp = TRUE;
+ exitCode = EXIT_FAILURE;
+ }
+ }
+
+ else if (strncmp(argVect[argi], "--promisc", 11) == 0) {
+ promisc = 1;
+ }
+
+ else if (strncmp(argVect[argi], "--5400", 6) == 0) {
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ boot_cmds[boot_cmds_cnt++] = 0xb0000000;
+ boot_cmds[boot_cmds_cnt++] = 0x000095b6;
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ boot_cmds[boot_cmds_cnt++] = 0xb0000008;
+ boot_cmds[boot_cmds_cnt++] = 0x0000e751;
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ boot_cmds[boot_cmds_cnt++] = 0xb000000c;
+ boot_cmds[boot_cmds_cnt++] = 0x12604040;
+ }
+
+ else if (strncmp(argVect[argi], "--5600", 6) == 0) {
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ boot_cmds[boot_cmds_cnt++] = 0xb0000000;
+ boot_cmds[boot_cmds_cnt++] = 0x000095b6;
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ boot_cmds[boot_cmds_cnt++] = 0xb0000008;
+ boot_cmds[boot_cmds_cnt++] = 0x00006751;
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ boot_cmds[boot_cmds_cnt++] = 0xb000000c;
+ boot_cmds[boot_cmds_cnt++] = 0x12204040;
+ }
+
+ else if (strncmp(argVect[argi], "--testcardlx", 12) == 0) {
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ boot_cmds[boot_cmds_cnt++] = (unsigned int)R_DRAM_CONFIG;
+ boot_cmds[boot_cmds_cnt++] = 0x12604040;
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ boot_cmds[boot_cmds_cnt++] = (unsigned int)R_DRAM_TIMING;
+ boot_cmds[boot_cmds_cnt++] = 0x0000e751;
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ boot_cmds[boot_cmds_cnt++] = (unsigned int)R_WAITSTATES;
+ boot_cmds[boot_cmds_cnt++] = 0x00b395b5;
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ boot_cmds[boot_cmds_cnt++] = (unsigned int)R_BUS_CONFIG;
+ boot_cmds[boot_cmds_cnt++] = 0x00000207;
+ }
+
+ else if (strncmp(argVect[argi], "--testcard", 10) == 0) {
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ boot_cmds[boot_cmds_cnt++] = (unsigned int)R_WAITSTATES;
+ boot_cmds[boot_cmds_cnt++] = 0x000010b3;
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ boot_cmds[boot_cmds_cnt++] = (unsigned int)R_DRAM_TIMING;
+ boot_cmds[boot_cmds_cnt++] = 0x00006543;
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ boot_cmds[boot_cmds_cnt++] = (unsigned int)R_DRAM_CONFIG;
+ boot_cmds[boot_cmds_cnt++] = 0x12966060;
+ }
+
+ else if (strncmp(argVect[argi], "--devboard", 10) == 0) {
+ /* Printing on serial port will not work until PORT_PB is set... */
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ boot_cmds[boot_cmds_cnt++] = (unsigned int)R_PORT_PB_SET;
+ boot_cmds[boot_cmds_cnt++] = 0x01001ef3;
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ boot_cmds[boot_cmds_cnt++] = (unsigned int)R_PORT_PA_SET;
+ boot_cmds[boot_cmds_cnt++] = 0x00001df0;
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ boot_cmds[boot_cmds_cnt++] = (unsigned int)R_WAITSTATES;
+ boot_cmds[boot_cmds_cnt++] = 0x000095a6;
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ boot_cmds[boot_cmds_cnt++] = (unsigned int)R_DRAM_CONFIG;
+ boot_cmds[boot_cmds_cnt++] = 0x1a200040;
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ boot_cmds[boot_cmds_cnt++] = (unsigned int)R_DRAM_TIMING;
+ boot_cmds[boot_cmds_cnt++] = 0x00005611;
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ boot_cmds[boot_cmds_cnt++] = (unsigned int)R_BUS_CONFIG;
+ boot_cmds[boot_cmds_cnt++] = 0x00000104;
+ }
+
+ else if (strncmp(argVect[argi], "--verify", 8) == 0) {
+ boot_cmds[boot_cmds_cnt++] = MEM_VERIFY;
+ GetNumberOption(&argi, argCount, argVect, &boot_cmds[boot_cmds_cnt++], "--verify", 16);
+ GetNumberOption(&argi, argCount, argVect, &boot_cmds[boot_cmds_cnt++], "--verify", 16);
+ }
+
+ else if (strncmp(argVect[argi], "--setreg", 8) == 0) {
+ boot_cmds[boot_cmds_cnt++] = SET_REGISTER;
+ if ((argVect[argi+1][0] >= 'A') && (argVect[argi+1][0] <= 'Z')) {
+ GetRegisterOption(&argi, argCount, argVect, &boot_cmds[boot_cmds_cnt++], "--setreg", 16);
+ }
+ else {
+ GetNumberOption(&argi, argCount, argVect, &boot_cmds[boot_cmds_cnt++], "--setreg", 16);
+ }
+ GetNumberOption(&argi, argCount, argVect, &boot_cmds[boot_cmds_cnt++], "--setreg", 16);
+ }
+
+ else if (strncmp(argVect[argi], "--getreg", 8) == 0) {
+ boot_cmds[boot_cmds_cnt++] = GET_REGISTER;
+ if ((argVect[argi+1][0] >= 'A') && (argVect[argi+1][0] <= 'Z')) {
+ GetRegisterOption(&argi, argCount, argVect, &boot_cmds[boot_cmds_cnt++], "--getreg", 16);
+ }
+ else {
+ GetNumberOption(&argi, argCount, argVect, &boot_cmds[boot_cmds_cnt++], "--getreg", 16);
+ }
+ }
+
+ else if (strncmp(argVect[argi], "--pause", 7) == 0) {
+ boot_cmds[boot_cmds_cnt++] = PAUSE_LOOP;
+ GetNumberOption(&argi, argCount, argVect, &boot_cmds[boot_cmds_cnt++], "--pause", 16);
+ }
+
+ else if (strncmp(argVect[argi], "--memtest", 9) == 0) {
+ boot_cmds[boot_cmds_cnt++] = MEM_TEST;
+ GetNumberOption(&argi, argCount, argVect, &boot_cmds[boot_cmds_cnt++], "--memtest", 16);
+ GetNumberOption(&argi, argCount, argVect, &boot_cmds[boot_cmds_cnt++], "--memtest", 16);
+ }
+
+ else if (strncmp(argVect[argi], "--loop", 6) == 0) {
+ char str[MAX_STRING_LEN];
+ boot_cmds[boot_cmds_cnt++] = LOOP;
+ GetNumberOption(&argi, argCount, argVect, &boot_cmds[boot_cmds_cnt++], "--loop", 16);
+ GetStringOption(&argi, argCount, argVect, str, argVect[argi]);
+ new_label(&loop_label, boot_cmds_cnt+1, str);
+ boot_cmds_cnt++;
+ }
+
+ else if (strncmp(argVect[argi], "--label", 7) == 0) {
+ char str[MAX_STRING_LEN];
+ GetStringOption(&argi, argCount, argVect, str, "--label");
+ new_label(&label, boot_cmds_cnt, str);
+ }
+
+ else if (strncmp(argVect[argi], "--memdump", 9) == 0) {
+ boot_cmds[boot_cmds_cnt++] = MEM_DUMP;
+ GetNumberOption(&argi, argCount, argVect, &boot_cmds[boot_cmds_cnt++], "--memdump", 16);
+ GetNumberOption(&argi, argCount, argVect, &boot_cmds[boot_cmds_cnt++], "--memdump", 16);
+ }
+
+ else if (strncmp(argVect[argi], "--memclear", 10) == 0) {
+ boot_cmds[boot_cmds_cnt++] = MEM_CLEAR;
+ GetNumberOption(&argi, argCount, argVect, &boot_cmds[boot_cmds_cnt++], "--memclear", 16);
+ GetNumberOption(&argi, argCount, argVect, &boot_cmds[boot_cmds_cnt++], "--memclear", 16);
+ }
+
+ else if (strncmp(argVect[argi], "--flash", 7) == 0) {
+ boot_cmds[boot_cmds_cnt++] = FLASH;
+ GetNumberOption(&argi, argCount, argVect, &boot_cmds[boot_cmds_cnt++], "--flash", 16);
+ GetNumberOption(&argi, argCount, argVect, &boot_cmds[boot_cmds_cnt++], "--flash", 16);
+ GetNumberOption(&argi, argCount, argVect, &boot_cmds[boot_cmds_cnt++], "--flash", 16);
+ doing_flash = TRUE;
+ }
+
+ else if (strncmp(argVect[argi], "--jump", 6) == 0) {
+ boot_cmds[boot_cmds_cnt++] = JUMP;
+ GetNumberOption(&argi, argCount, argVect, &boot_cmds[boot_cmds_cnt++], "--jump", 16);
+ }
+
+ else if (strncmp(argVect[argi], "--file", 6) == 0) {
+ char str[MAX_STRING_LEN];
+ boot_cmds[boot_cmds_cnt++] = PACKET_INFO;
+ GetStringOption(&argi, argCount, argVect,
+ str, "--file"); /* file name */
+ GetNumberOption(&argi, argCount, argVect,
+ &boot_cmds[boot_cmds_cnt++], str, 16); /* address */
+ last_boot_file = allocate_boot_file(last_boot_file);
+ first_boot_file = first_boot_file ? first_boot_file : last_boot_file;
+ last_boot_file->fileName = malloc(strlen(str) + 1);
+ strcpy(last_boot_file->fileName, str);
+ last_boot_file->size_p = &boot_cmds[boot_cmds_cnt];
+ last_boot_file->fd = NULL;
+ last_boot_file->size_sent = 0;
+ if (strncmp(str, "-", 1) != 0) {
+ if (stat(last_boot_file->fileName, &st) == -1) {
+ printf("Cannot get size of file '%s'. %s.\n",
+ last_boot_file->fileName, strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+ if (db2) printf("* size is %d 0x%8.8x\n",
+ (int)st.st_size, (unsigned int)st.st_size);
+ last_boot_file->size = st.st_size;
+ boot_cmds[boot_cmds_cnt++] = st.st_size;
+ }
+ else {
+ GetNumberOption(&argi, argCount, argVect,
+ &last_boot_file->size , str, 16); /* size */
+
+ boot_cmds[boot_cmds_cnt++] = last_boot_file->size;
+ printf("* size is %d 0x%8.8x\n", last_boot_file->size,
+ last_boot_file->size);
+ }
+ }
+
+ else if (strncmp(argVect[argi], "--bootfile", 10) == 0) {
+ GetStringOption(&argi, argCount, argVect,
+ boot_loader_file, "--bootfile");
+ }
+
+ else if (strncmp(argVect[argi], "-d", 2) == 0) {
+ if (GetNumberOption (&argi, argCount, argVect, &number, "-d", 10) == 0) {
+ printHelp = TRUE;
+ exitCode = EXIT_FAILURE;
+ }
+ else {
+ sprintf(dbStr, "%d", number);
+ for (i = 0; i != (int) strlen(dbStr); i++) {
+ switch (dbStr[i] - '0') {
+ case 1:
+ db1 = TRUE;
+ break;
+ case 2:
+ db2 = TRUE;
+ break;
+ case 3:
+ db3 = TRUE;
+ break;
+ case 4:
+ db4 = TRUE;
+ break;
+ default:
+ printf("ERROR! Debug level %d is not defined.\n", dbStr[i] - '0');
+ printHelp = TRUE;
+ exitCode = EXIT_FAILURE;
+ break;
+ }
+ }
+ }
+ }
+
+ else if (strncmp(argVect[argi], "--find", 6) == 0) {
+ GetStringOption(&argi, argCount, argVect, needle, "--find");
+ /* convert control characters like /n to the real ascii valure */
+ {
+ int i;
+ int j = 0;
+ char c;
+ int esc = 0;
+
+ for (i = 0; (c = needle[i]); i++,j++) {
+// printf("c = %d, i %d, j %d\n", (int)c, i, j);
+ if (c == '\\') {
+// printf("esc\n");
+ esc = 1;
+ continue;
+ }
+ else if (esc) {
+ esc = 0;
+ switch(c) {
+ case 'r':
+ c = '\r';
+ break;
+
+ case 'n':
+ c = '\n';
+ break;
+
+ case '\\':
+ c = '\\';
+ break;
+
+ default:
+ printf("Uknown escape sequence '\\%c'\n", c);
+ exit(EXIT_FAILURE);
+ }
+ j--;
+ }
+ // printf("setting j %d to %d\n", j, (int)c);
+ needle[j] = c;
+ }
+ needle_len = j;
+ }
+
+ for (i = 0; needle[i]; i++) {
+ //printf("i = %d, c %d\n", i,(int)needle[i]);
+ }
+ }
+
+ else if (strncmp(argVect[argi], "--exitonfind", 12) == 0) {
+ exitonfind = TRUE;
+ }
+
+ else if (strncmp(argVect[argi], "--help", 6) == 0) {
+ printHelp = TRUE;
+ }
+
+ else {
+ printf("ERROR! Don't understand option '%s'\n", argVect[argi]);
+ printHelp = TRUE;
+ exitCode = EXIT_FAILURE;
+ }
+ }
+
+ if (printHelp == TRUE) {
+ PrintHelp();
+ exit(exitCode);
+ }
+
+ if (noleds) {
+ strcpy(&boot_loader_file[strlen(boot_loader_file)], "_NOLEDS");
+ }
+
+ handle_labels();
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: handle_labels
+*#
+*# PARAMETERS: global loop_label, label
+*#
+*# DESCRIPTION: Checks and matches labels from --loop and --label commands
+*# and inserts the resolved addresses into boot commands.
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 20020204 ronny Initial version
+*#
+*#***************************************************************************/
+
+void
+handle_labels(void)
+{
+ struct label_t *ll = loop_label;
+ struct label_t *l = label;
+ struct label_t *last_l = l;
+
+ while(ll) {
+ int match = 0;
+
+ l = last_l;
+ while(l) {
+ match = 0;
+
+ if (l->name && ll->name && (strcmp(l->name, ll->name) == 0)) {
+ match = 1;
+ boot_cmds[ll->addr] = IO_BUF_START+(l->addr*4);
+ break;
+ }
+ l = l->prev;
+ }
+ if (!match) {
+ printf("Error. No label '%s' defined as needed by --loop command.\n", ll->name);
+ exit(EXIT_FAILURE);
+ }
+ ll = ll->prev;
+ }
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: new_label
+*#
+*# PARAMETERS:
+*#
+*# DESCRIPTION:
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 20020201 ronny Initial version
+*#
+*#***************************************************************************/
+
+void
+new_label(struct label_t **label, udword addr, const char *name)
+{
+ struct label_t *new_p;
+
+ new_p = malloc(sizeof(struct label_t));
+
+ if (*label == NULL) { /* first one? */
+ *label = new_p;
+ new_p->prev = NULL;
+ }
+ else {
+ new_p->prev = *label;
+ }
+ *label = new_p;
+ new_p->addr = boot_cmds_cnt;
+ new_p->name = malloc(strlen(name));
+ strcpy(new_p->name, name);
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: GetStringOption
+*#
+*# PARAMETERS: int *argNr : Returns next argc here.
+*# int argCount : Index of last argument.
+*# char *argVect[] : argv.
+*# char *ret : Copy string here.
+*# char *option : Name of the option.
+*#
+*# DESCRIPTION: Extracts a string option from argv, and updates argnr.
+*# Returns TRUE/FALSE and string in *ret.
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 960930 ronny Initial version
+*# 961203 ronny Handles filenames with spaces within 'file name'.
+*#
+*#***************************************************************************/
+
+int
+GetStringOption(int *argNr, int argCount, const char *argVect[], char *ret,
+ const char *option)
+{
+ int startChar = strlen(option);
+
+ *ret = '\0';
+
+ /* Are there any more chars after option? If not skip to next argv. */
+ if (strlen(argVect[*argNr]) <= (unsigned int)startChar) {
+ (*argNr)++;
+ startChar = 0;
+ }
+
+ /* Any args left? */
+ if (*argNr >= argCount) {
+ printf("ERROR! The option '%s' needs a string argument.\n", option);
+ PrintHelp();
+ exit(EXIT_FAILURE);
+ }
+
+ /* avoid stack overflow hacks */
+ if (strlen(&argVect[*argNr][startChar]) > MAX_STRING_LEN) {
+ printf("Argument '%s' longer than maximum allowable %d characters.\n",
+ &argVect[*argNr][startChar], MAX_STRING_LEN);
+ exit(EXIT_FAILURE);
+ }
+
+ strcpy(ret, &argVect[*argNr][startChar]);
+ if (db4) printf("<<< GetStringOption '%s'\n", ret);
+
+ return TRUE;
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: GetNumberOption
+*#
+*# PARAMETERS:
+*#
+*# DESCRIPTION:
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 960930 ronny Initial version
+*#
+*#***************************************************************************/
+
+int
+GetNumberOption(int *argNr, int argCount, const char *argVect[],
+ unsigned int *ret, const char *option, int base)
+{
+ int startChar = 0;
+ int add_io_base = 0;
+
+ (*argNr)++;
+
+ if (*argNr >= argCount) {
+ printf("ERROR! The option '%s' needs a number argument.\n", option);
+ PrintHelp();
+ exit(EXIT_FAILURE);
+ }
+
+ if (argVect[*argNr][startChar] == '+') {
+ add_io_base = 1;
+ startChar++;
+ }
+
+ *ret = strtoul(&argVect[*argNr][startChar], NULL, base);
+
+ if (add_io_base) {
+ *ret += IO_BUF_START;
+ if (*ret < IO_BUF_START || *ret >= IO_BUF_END) {
+ printf("ERROR! '%s' is outside the IO buffer (option '%s').\n",
+ argVect[*argNr], option);
+ exit(EXIT_FAILURE);
+ }
+ }
+
+ if (db4) printf("<<< GetNumberOption %08x\r\n", *ret);
+
+ return TRUE;
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: GetRegisterOption
+*#
+*# PARAMETERS:
+*#
+*# DESCRIPTION:
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 960930 ronny Initial version
+*#
+*#***************************************************************************/
+
+int
+GetRegisterOption(int *argNr, int argCount, const char *argVect[],
+ unsigned int *ret, const char *option, int base)
+{
+ int startChar = 0;
+
+ (*argNr)++;
+
+ if (*argNr >= argCount) {
+ printf("Error! The option '%s' needs a register name.\n", option);
+ PrintHelp();
+ exit(EXIT_FAILURE);
+ }
+
+ {
+ int r = 0;
+
+ while (reg_des[r].name) {
+ if (strcmp(reg_des[r].name, argVect[*argNr]) == 0) {
+ *ret = reg_des[r].addr;
+ return TRUE;
+ break;
+ }
+ r++;
+ }
+ }
+
+ printf("Error! Didn't find a register name matching '%s'.\n",
+ argVect[*argNr]);
+
+ exit(EXIT_FAILURE);
+
+ return FALSE;
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: PrintHelp
+*#
+*# PARAMETERS: None.
+*#
+*# DESCRIPTION: Prints help info.
+*#
+*#---------------------------------------------------------------------------
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 960909 ronny Initial version
+*#
+*#***************************************************************************/
+
+void
+PrintHelp(void)
+{
+ printf("e100boot version %s.\n", version);
+
+ printf("\ne100boot [--device devicename] [--file filename|- addr [size]]\n"
+ " [--flash ram-source flash-offset size]\n"
+ " [--pause iter]\n"
+ " [--memtest addr addr]\n"
+ " [--memclear addr addr] [--memdump addr addr]\n"
+ " [--setreg addr|regname val] [--getreg addr|regname]\n"
+ " [--verify addr val] [--label label] [--loop addr label]\n"
+ " [--5400] [--5600] [--testcard] [--devboard]\n"
+ " [--testcardlx] [--network] [--serial]\n"
+ " [--baudrate baudrate] [--bootfile file] [--jump addr]\n"
+ " [--tofiles] [--cmdsonly] [--images] [--noleds]\n"
+ " [--help]\n\n");
+
+ printf(" The commands sent to the cbl, and which are parsed by the cbl,\n"
+ " are stored at 0x%8.8x-0x%8.8x.\n\n", IO_BUF_START, IO_BUF_END);
+
+ printf(" See the man page for more details about e100boot.\n\n");
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: CreateBootLoader
+*#
+*# PARAMETERS: None.
+*#
+*# DESCRIPTION: Creates boot packets from boot file or internal loader.
+*#
+*#---------------------------------------------------------------------------
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 960909 ronny Initial version
+*#***************************************************************************/
+
+void
+CreateBootLoader(void)
+{
+ struct stat st;
+ char *buf = NULL;
+ // int size_pos = 0x18;
+ // int addr_pos = 0x28;
+ struct packet_header_T *ph;
+ int packet_size;
+ int header_size;
+ int buf_cnt = 0;
+ int i;
+ udword sum = 0;
+
+ if (create_boot_loader) {
+ int image_nbr = 0;
+ int found = 0;
+ const struct boot_image_info_type *info;
+
+ if (db4) printf("> CreateBootLoader\n");
+
+ info = &boot_image_info[image_nbr];
+
+ /* Use internal boot loader? */
+ while (!found && info->name != NULL) {
+ if (strcmp(boot_loader_file, info->name) == 0) {
+ st.st_size = info->len;
+ buf = (char*) malloc(st.st_size);
+ memcpy(buf, info->ptr, st.st_size); /* unnecessary? */
+ found = TRUE;
+ printf("Using internal boot loader: %s - %s.\n",
+ info->name, info->info);
+ }
+ else {
+ image_nbr++;
+ info = &boot_image_info[image_nbr];
+ }
+ }
+
+ /* No internal? Load it from file instead. */
+ if (!found) {
+ FILE *fd;
+
+ /* We didn't find an internal match, load the boot file from disk. */
+ if ((fd = Fopen(boot_loader_file, "r")) == NULL) {
+ printf("Cannot open bootloader '%s'. %s.\n",
+ boot_loader_file, strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+
+ if (fstat(fileno(fd), &st) == -1) {
+ printf("Cannot get filestatus of bootloader '%s'. %s.\n",
+ boot_loader_file, strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+
+ buf = (char*) malloc(st.st_size);
+ // printf("CreateBootLoader: buf = (char*) malloc(st.st_size); 2\n");
+ if (read(fileno(fd), buf, st.st_size) != st.st_size) {
+ printf("Read fewer bytes than there should be in %s.\n",
+ boot_loader_file);
+ exit(EXIT_FAILURE);
+ }
+
+ fclose(fd);
+ }
+
+ /* Alright, got loader in buf[] and size in st. */
+ if (netBoot) {
+ /* The etrax code for all boot methods are linked to adress
+ 380000f0 but since network boot starts execution at 380000f4
+ we have two nops in the beginning of the code which we do not
+ transmit to etrax in the network case. The link adress
+ doesn't change though. */
+ buf += 4;
+ st.st_size -= 4;
+ packet_size = DATA_SIZE;
+ }
+ else {
+ packet_size = st.st_size;
+ }
+
+ /* Hack binary, insert size and address. */
+
+#define SIZE_PATTERN 0x12345678
+#define ADDR_PATTERN 0x87654321
+#define SIZE_POS (netBoot ? 0x0c : 0x10)
+#define ADDR_POS (netBoot ? 0x10 : 0x14)
+
+ if (*(udword*)&buf[SIZE_POS] != SIZE_PATTERN) {
+ printf("Bootloader corrupt. Should contain ret/nop (0x%8.8x) at 0x%x, but contains %x\n",
+ SIZE_PATTERN, SIZE_POS, *(udword*)&buf[SIZE_POS]);
+ exit(EXIT_FAILURE);
+ }
+
+ /* How much data to load except data in first packet. */
+
+ if (netBoot) {
+ *(udword*)(&buf[SIZE_POS]) = st.st_size - DATA_SIZE;
+ }
+ else {
+ *(udword*)(&buf[SIZE_POS]) = st.st_size - 784;
+ }
+
+ if (db3) printf("Inserting boot size 0x%x at 0x%x.\n",
+ (unsigned int) *(udword*)(&buf[SIZE_POS]),
+ (unsigned int)&buf[SIZE_POS]);
+
+ if (*(udword*)&buf[ADDR_POS] != ADDR_PATTERN) {
+ printf("Bootloader corrupt. Should contain ret/nop (0x%8.8x) at 0x%x, but contains %x\n",
+ ADDR_PATTERN, ADDR_POS, *(udword*)&buf[ADDR_POS]);
+ exit(EXIT_FAILURE);
+ }
+
+ if (netBoot) {
+ *(udword*)(&buf[ADDR_POS]) = BOOT_ADDRESS + DATA_SIZE;
+ }
+ else {
+ *(udword*)(&buf[ADDR_POS]) = BOOT_ADDRESS-4 + 784;
+ }
+
+ if (db3) printf("Inserting boot address 0x%x at 0x%x.\n",
+ (unsigned int)*(udword*)(&buf[ADDR_POS]),
+ (unsigned int)&buf[ADDR_POS]);
+
+
+ for (i = 0; i != st.st_size; i++) {
+ sum += ((byte*)buf)[i];
+ }
+ if (db1) printf("Checksum 0x%x, bytes %d\n", sum, i);
+
+ if (db4) {
+ int i;
+
+ for(i=0; i<st.st_size; i+=8) {
+ int j;
+
+ printf("0x%8.8x[%4.4x]: ", BOOT_ADDRESS+i, i);
+ for(j=0; i+j<st.st_size && j<8; j++) {
+ printf("%2.2x ", (unsigned char) buf[i+j]);
+ }
+ printf("\n");
+ }
+ }
+ /* Now create list of packets. */
+ while (buf_cnt <= st.st_size) {
+
+ header_size = seq_nr == 0 ?
+ SIZE_OF_FIRST_HEADER : sizeof(struct packet_header_T);
+
+ if (netBoot) {
+ packet_size = ((st.st_size - buf_cnt) < DATA_SIZE ?
+ st.st_size - buf_cnt : DATA_SIZE) + header_size;
+ }
+ else {
+ packet_size = st.st_size;
+ header_size = 0;
+ }
+
+ if (db4) printf("seq_nr %d, header_size %d, packet_size %d\n",
+ seq_nr, header_size, packet_size);
+
+ last_packet = allocate_packet(last_packet);
+
+ first_packet = first_packet ? first_packet : last_packet;
+
+ last_packet->size = packet_size;
+ last_packet->data = (char*)malloc(packet_size);
+ last_packet->seq = seq_nr;
+ last_packet->baud_rate = 9600;
+
+ last_packet->boot_file = allocate_boot_file(NULL);
+ last_packet->boot_file->fileName = boot_loader_file;
+
+ // printf("last_packet->size %8.8x\n", last_packet->size);
+ // printf("last_packet->data %8.8x\n",last_packet->data);
+
+ if (netBoot) {
+ ph = (struct packet_header_T*) last_packet->data;
+ memcpy(ph->dest, dst_addr_of_device, 6);
+ memcpy(ph->src, eth_addr_local, 6);
+ ph->length = htons(packet_size);
+ ph->snap1 = htonl(SNAP1);
+ ph->snap2 = htonl(SNAP2);
+ ph->tag = htonl(SERVER_TAG);
+ ph->seq = htonl(seq_nr);
+ if (seq_nr != 0) {
+ ph->type = htonl(BOOT_PACKET);
+ ph->id = htonl(0);
+ }
+ }
+
+ memcpy(&last_packet->data[header_size], &buf[buf_cnt],
+ packet_size - header_size);
+ if (db3) DecodeSvintoBoot(last_packet->data);
+
+ if (netBoot) {
+ buf_cnt += DATA_SIZE;
+ }
+ else {
+ buf_cnt += packet_size +1;
+ }
+
+ seq_nr++;
+ }
+ }
+
+ if (db4) printf("< CreateBootLoader\n");
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: allocate_packet
+*#
+*# PARAMETERS: None.
+*#
+*# DESCRIPTION:
+*#
+*#---------------------------------------------------------------------------
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 960909 ronny Initial version
+*#***************************************************************************/
+
+struct packet_buf*
+allocate_packet(struct packet_buf *p)
+{
+ if (db4) printf("> allocate_packet\n");
+
+ if (p) {
+ p->next = (struct packet_buf*) malloc(sizeof(struct packet_buf));
+ p = p->next;
+ }
+ else {
+ p = (struct packet_buf*) malloc(sizeof(struct packet_buf));
+ }
+ p->next = NULL;
+
+ return(p);
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: allocate_boot_file
+*#
+*# PARAMETERS: None.
+*#
+*# DESCRIPTION:
+*#
+*#---------------------------------------------------------------------------
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 960909 ronny Initial version
+*#***************************************************************************/
+
+struct boot_files_T*
+allocate_boot_file(struct boot_files_T *bf)
+{
+ if (bf) {
+ bf->next = (struct boot_files_T*) malloc(sizeof(struct boot_files_T));
+ bf = bf->next;
+ }
+ else {
+ bf = (struct boot_files_T*) malloc(sizeof(struct boot_files_T));
+ }
+ bf->next = NULL;
+
+ return(bf);
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: CreateBootCmds
+*#
+*# PARAMETERS: None.
+*#
+*# DESCRIPTION: Creates a boot packet from the boot commands. The data is
+*# filled in later by FinishBootCmds().
+*#
+*#---------------------------------------------------------------------------
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 980818 ronny Initial version
+*#***************************************************************************/
+
+void
+CreateBootCmds(void)
+{
+ struct packet_header_T *ph;
+
+ if (db4) printf("***> CreateBootCmds\n");
+
+ last_packet = allocate_packet(last_packet);
+
+ boot_cmds_packet = last_packet;
+
+ last_packet->boot_file = allocate_boot_file(NULL);
+ last_packet->boot_file->fileName = BOOT_CMDS_FILE;
+ last_packet->baud_rate = 9600;
+
+ last_packet->size = netBoot ? SIZE_OF_BOOT_CMDS + sizeof(struct packet_header_T)
+ : SIZE_OF_BOOT_CMDS;
+
+ last_packet->data = (char *) malloc(last_packet->size);
+ last_packet->seq = seq_nr;
+
+ if (netBoot) {
+ /* Create packet header. */
+ ph = (struct packet_header_T *) last_packet->data;
+ memcpy(ph->dest, dst_addr_of_device, 6);
+ memcpy(ph->src, eth_addr_local, 6);
+ ph->length = htons(last_packet->size);
+ ph->snap1 = htonl(SNAP1);
+ ph->snap2 = htonl(SNAP2);
+ ph->tag = htonl(SERVER_TAG);
+ ph->seq = htonl(seq_nr);
+ seq_nr++;
+ ph->type = htonl(BOOT_CMDS);
+ ph->id = htonl(0);
+ }
+
+ if (db3) DecodeSvintoBoot(last_packet->data);
+ if (db4) printf("<*** CreateBootCmds\n");
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: FinishBootCmds
+*#
+*# PARAMETERS: None.
+*#
+*# DESCRIPTION: Copies the boot commands into the correct packet and changes
+*# the dwords to network order.
+*#
+*#---------------------------------------------------------------------------
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 960909 ronny Initial version
+*#***************************************************************************/
+
+void
+FinishBootCmds(void)
+{
+ int i;
+ unsigned int offset = 0;
+
+ for (i = 0; i != boot_cmds_cnt; i++) {
+ boot_cmds[i] = htonl(boot_cmds[i]);
+ if (db3) printf("%8.8x\n", boot_cmds[i]);
+ }
+
+ /* Copy boot commands into packet. */
+ if (netBoot) {
+ offset = sizeof(struct packet_header_T);
+ }
+
+ memcpy(&boot_cmds_packet->data[offset], boot_cmds,
+ boot_cmds_cnt * sizeof(udword));
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: CreateNewBootPacket
+*#
+*# PARAMETERS: None.
+*#
+*# DESCRIPTION: Creates next packet for the files specified by '--file'.
+*#
+*# RETURNS: Next packet, or NULL.
+*#
+*#---------------------------------------------------------------------------
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 960909 ronny Initial version
+*#***************************************************************************/
+
+struct packet_buf*
+CreateNewBootPacket(void)
+{
+ static char buf[DATA_SIZE];
+ struct packet_header_T *ph;
+ int packet_size;
+ int header_size;
+ int i;
+ udword sum;
+ int size = 0;
+ int padding = 0;
+
+ static struct boot_files_T *bf = NULL;
+
+ if (db3) printf("> CreateNewBootPacket\n");
+
+ bf = bf ? bf : first_boot_file;
+
+ while (bf) {
+ if (!bf->fd) {
+ if (strcmp(bf->fileName, "-") == 0) {
+ bf->fd = stdin;
+ }
+ else {
+ bf->fd = fopen(bf->fileName, "rb");
+ }
+
+ if (bf->fd == NULL) {
+ printf("Cannot open boot file %s. Exiting\n", bf->fileName);
+ exit(EXIT_FAILURE);
+ }
+ if (db3) printf("Opening boot file %s\n", bf->fileName);
+ }
+
+ if (!padding) {
+ size = fread(buf, 1, DATA_SIZE, bf->fd);
+ if (size == 0) {
+ if (db3) printf("Nothing more to read. Read: %d/%d\n",
+ bf->size_sent, bf->size);
+ padding = 1;
+ }
+ }
+
+ if (padding) {
+ if (bf->size_sent < bf->size) {
+ if (db3) printf("padding...\n");
+ size = (bf->size - bf->size_sent > DATA_SIZE) ?
+ DATA_SIZE : bf->size - bf->size_sent;
+ memset(buf, 0, size);
+ }
+ else {
+ if (db3) printf("All written\n");
+ padding = 0;
+ size = 0;
+ }
+ }
+
+ if (size != 0) {
+ if (db3) printf("size: %d %d/%d\n", size, bf->size_sent, bf->size);
+ bf->size_sent += size;
+ last_packet = allocate_packet(last_packet);
+
+ /* Calculate checksum. */
+ sum = 0;
+ for (i = 0; i != size; i++) {
+ sum += ((byte*)buf)[i];
+ }
+ if (db2) printf("Checksum 0x%x, bytes %d\n", sum, i);
+
+ /* Figure out size of packet. */
+ if (netBoot) {
+ header_size = seq_nr == 0 ?
+ SIZE_OF_FIRST_HEADER : sizeof(struct packet_header_T);
+
+ packet_size = ((size) < DATA_SIZE ? size : DATA_SIZE) + header_size;
+ }
+ else {
+ header_size = 0;
+ packet_size = size;
+ }
+
+ if (packet_size < 60) { /* CRC adds 4 bytes to 64 */
+ printf(
+ "Last packet from file '%s', is smaller than 64 bytes. \n"
+ "This is not allowed in the Ethernet standard. Will pad with %d "
+ "bytes.\n", bf->fileName, 60-packet_size);
+
+ *(bf->size_p) += 60-packet_size;
+ packet_size = 60;
+ }
+
+ last_packet->size = packet_size;
+ last_packet->data = (char*)malloc(packet_size);
+ last_packet->boot_file = bf;
+ last_packet->baud_rate = 0;/*set_baudrate;*/
+
+ /* printf("size %8.8x\n", last_packet->size);*/
+ /* printf("data %8.8x\n",last_packet->data);*/
+
+ if (netBoot) {
+ /* Initialize ethernet header. */
+ ph = (struct packet_header_T*) last_packet->data;
+ memcpy(ph->dest, dst_addr_of_device, 6);
+ memcpy(ph->src, eth_addr_local, 6);
+ /* printf("packet_size %d\n", packet_size);*/
+ ph->length = htons(packet_size);
+ ph->snap1 = htonl(SNAP1);
+ ph->snap2 = htonl(SNAP2);
+ ph->tag = htonl(SERVER_TAG);
+ ph->seq = htonl(seq_nr);
+ last_packet->seq = seq_nr;
+ if (seq_nr != 0) {
+ ph->type = htonl(BOOT_PACKET);
+ ph->id = htonl(0); /* id doesn't matter, we send to a unicast address */
+ }
+ }
+
+ /* Copy data in place. */
+ memcpy(&last_packet->data[header_size], buf, packet_size - header_size);
+ if (db2) DecodeSvintoBoot(last_packet->data);
+ /* PrintPacket(last_packet->data, last_packet->size, HEX);*/
+ seq_nr++;
+
+ if (db3) printf("< CreateNewBootPacket\n");
+ return(last_packet);
+ }
+ else { /* Nothing read from fd. */
+ fclose(bf->fd);
+ bf = bf->next;
+ }
+ }
+
+ if (db3) printf("< CreateNewBootPacket\n");
+ return(NULL);
+}
+
+/****************** END OF FILE common.c ************************************/
diff --git a/package/etrax-tools/src/e100boot/sbl/win32/network.c b/package/etrax-tools/src/e100boot/sbl/win32/network.c
new file mode 100755
index 000000000..7ea557627
--- /dev/null
+++ b/package/etrax-tools/src/e100boot/sbl/win32/network.c
@@ -0,0 +1,681 @@
+/*!***************************************************************************
+*!
+*! FILE NAME : network.c
+*!
+*! DESCRIPTION: Network boot stuff for e100boot.
+*!
+*! ---------------------------------------------------------------------------
+*! HISTORY
+*!
+*! DATE NAME CHANGES
+*! ---- ---- -------
+*! 1996 Ronny Raneup Initial version
+*! 2002 05 02 Ronny Ranerup Moved it into this file
+*! ---------------------------------------------------------------------------
+*! (C) Copyright 1999, 2000, 2001, 2002 Axis Communications AB, LUND, SWEDEN
+*!***************************************************************************/
+
+/************************** Include files ********************************/
+
+#include <stdio.h>
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <ctype.h>
+#include <sys/timeb.h>
+#include <winsock2.h>
+
+#include <pcap.h>
+#include <Packet32.h>
+#include <Ntddndis.h>
+
+#include <e100boot.h>
+#include <common.h>
+#include <network.h>
+
+/************************** Constants and macros *************************/
+
+#define CRC_LEN 4
+
+/************************** Type definitions *****************************/
+
+/************************** Global variables *****************************/
+
+udword highest_ack_received;
+udword last_ack_received = -1;
+int new_ack = FALSE;
+int got_new_packet = FALSE;
+
+unsigned char dst_addr_of_device[] = { 0x01, 0x40, 0x8c, 0x00, 0x01, 0x00 };
+unsigned char src_addr_of_device[] = { 0x02, 0x40, 0x8c, 0x00, 0x01, 0x00 };
+unsigned char eth_addr_local[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+
+struct sockaddr sock_addr;
+int pPacket = 0;
+pcap_t *pd;
+
+pcap_handler handler;
+
+struct packet_buf first_rec_packet;
+struct packet_buf *last_rec_packet = &first_rec_packet;
+
+int promisc = 1; /* promiscuous mode */
+int all_ids = TRUE;
+
+int both_addresses = FALSE;
+int p_packet_bpl = 8;
+int printPacketType = CHAR;
+
+unsigned int id;
+int one_id_only = TRUE;
+
+unsigned char buf[16000]; /* pcap buffer */
+
+const struct pcap_pkthdr *hdrG;
+
+char host1[MAX_STRING_LEN]; /* name of ethernet host */
+char host2[MAX_STRING_LEN]; /* name of ethernet host */
+
+/************************** Function prototypes **************************/
+
+int gettimeofday (struct timeval *tv, void*);
+int timeout (struct timeval *tvThen, int ms);
+int highest_seq_received (void);
+struct packet_buf* ack_on_seq (int seq);
+struct packet_buf* packet_with_seq (int seq);
+struct timeval timeval_subtract (struct timeval *x, struct timeval *y);
+void GetNextPacket (void);
+void PrintPacket (const unsigned char *p, int size, int type);
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: net_init
+*#
+*# DESCRIPTION:
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 2002 05 02 ronny Initial version
+*#
+*#***************************************************************************/
+void
+net_init(void)
+{
+ pcap_if_t* alldevs;
+ pcap_if_t* d;
+ char errbuf[PCAP_ERRBUF_SIZE];
+ LPADAPTER pAdapter;
+ char pOidDataBuf[sizeof(PACKET_OID_DATA)-1+sizeof(eth_addr_local)];
+ PPACKET_OID_DATA pOidData;
+
+ if (strlen(device) == 0) {
+ /* Retrieve the device list */
+ if (pcap_findalldevs(&alldevs, errbuf) == -1) {
+ fprintf(stderr,"Error finding devices: %s\n", errbuf);
+ exit(EXIT_FAILURE);
+ }
+
+ if (alldevs == NULL) {
+ printf("\nNo network adapters found!\n");
+ exit(EXIT_FAILURE);
+ }
+
+ /* Use first device/interface */
+ d = alldevs;
+ if (db1) printf("Using device %s (%s)\n", d->name,
+ (d->description ? d->description :
+ "No description available"));
+ strcpy(device, d->name);
+ pcap_freealldevs(alldevs);
+ }
+
+ if ((pd = pcap_open_live(device, 200, promisc, -1, errbuf)) == NULL) {
+ printf("Error opening device %s\n", errbuf);
+ exit(EXIT_FAILURE);
+ }
+
+ /* Determine Ethernet address */
+ if ((pAdapter = PacketOpenAdapter(device)) == NULL) {
+ printf("Error opening packet adapter!\n");
+ exit(EXIT_FAILURE);
+ }
+
+ pOidData = &pOidDataBuf[0];
+ pOidData->Oid = OID_802_3_CURRENT_ADDRESS;
+ pOidData->Length = sizeof(eth_addr_local);
+ if (!PacketRequest(pAdapter, FALSE, pOidData)) {
+ printf("Error obtaining adapter Ethernet address!\n");
+ exit(EXIT_FAILURE);
+ }
+
+ PacketCloseAdapter(pAdapter);
+ pAdapter = NULL;
+
+ memcpy(eth_addr_local, pOidData->Data, sizeof(eth_addr_local));
+ if (db1) printf("Ethernet adress for device is %2.2x-%2.2x-%2.2x-%2.2x-%2.2x-%2.2x\n",
+ eth_addr_local[0],
+ eth_addr_local[1],
+ eth_addr_local[2],
+ eth_addr_local[3],
+ eth_addr_local[4],
+ eth_addr_local[5]);
+
+ handler = (pcap_handler) Handler;
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: NetBoot
+*#
+*# DESCRIPTION: The main network boot routine.
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 2000 01 07 ronny Initial version
+*# 2002 05 02 ronny Fixed segv bug
+*#
+*#***************************************************************************/
+
+void
+NetBoot(void)
+{
+ struct packet_buf *p;
+ struct timeval tv;
+
+ gettimeofday(&tv, NULL);
+
+ p = create_packet(0);
+ SendToDevice(p->data, p->size);
+
+ while(1) {
+ static int all_trans = FALSE;
+
+ if (got_new_packet) {
+ got_new_packet = FALSE;
+
+ if (new_ack && first_packet) {
+ if (db4) {
+ printf("* got ACK %d.\n", last_ack_received);
+ printf("* ACK wanted %d.\n", first_packet->seq);
+ }
+ if (last_ack_received == first_packet->seq) {
+ if (!(p = create_packet(first_packet->seq+1))) {
+ //break;
+ }
+ first_packet = free_packet(first_packet);
+ }
+ }
+ }
+
+ if (new_ack || timeout(&tv, 500)) {
+ if (p) {
+ SendToDevice(p->data, p->size);
+ }
+ new_ack = FALSE;
+ gettimeofday(&tv, NULL);
+ }
+
+ GetNextPacket();
+ }
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: GetNextPacket
+*#
+*# DESCRIPTION:
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 961022 ronny Initial version
+*#
+*#***************************************************************************/
+
+void
+GetNextPacket(void)
+{
+ int ret;
+
+ if (db2) printf("> GetNextPacket\n");
+
+ /* got_new_packet = FALSE;*/
+ if ((ret = pcap_dispatch(pd, 1, handler, buf)) == -1) {
+ pcap_perror(pd, "Error in pcap_dispatch");
+ exit(EXIT_FAILURE);
+ }
+
+ if (db2) printf("< GetNextPacket\n");
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: Handler
+*#
+*# PARAMETERS:
+*#
+*# DESCRIPTION:
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 961022 ronny Initial version
+*#
+*#***************************************************************************/
+
+void
+Handler(unsigned char *buf, const struct pcap_pkthdr *hdr,
+ const unsigned char *p)
+{
+ const unsigned char *src = &p[6];
+ const unsigned char *dst = &p[0];
+ struct packet_header_T *h = (struct packet_header_T*)p;
+
+ if (db2) printf("> Handler\n");
+ got_new_packet = TRUE;
+ if ((!memcmp(src, eth_addr_local, 6) && !memcmp(dst, dst_addr_of_device, 6))
+ || (!memcmp(src, src_addr_of_device, 6) && !memcmp(dst, eth_addr_local, 6))) {
+ if (db1) printf("#RX######################################################\n");
+ if (db1) printf("Length: %u(0x%x)\n", (udword)hdr->len, (udword)hdr->len);
+ if (pPacket) PrintPacket(p, hdr->caplen, printPacketType);
+ DecodeSvintoBoot(p);
+ /* should clean up this... */
+ if ((ntohl(h->type) == ACK)) {
+ if (all_ids || (ntohl(h->id) == id)) {
+ if (all_ids && one_id_only) {
+ if (ntohl(h->id) == 0) {
+ all_ids = FALSE;
+ id = ntohl(h->id);
+ printf("Booting device with random id %8.8x.\n", id);
+ }
+ }
+ }
+ else {
+ printf("Got ACK from a new id, %8.8lx. Ignoring.\n",
+ (unsigned long)ntohl(h->id));
+ return;
+ }
+ new_ack = TRUE;
+ last_ack_received = ntohl(h->seq);
+ if (last_ack_received > highest_ack_received) {
+ highest_ack_received = last_ack_received;
+ }
+ }
+
+ if (db1) printf("#########################################################\n");
+
+ }
+ if (db2) printf("< Handler\n");
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: ack_on_seq
+*#
+*# PARAMETERS:
+*#
+*# DESCRIPTION:
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 980817 ronny Initial version
+*#
+*#***************************************************************************/
+
+struct packet_buf *
+packet_with_seq(int seq)
+{
+ static int last_seq = 0;
+ struct packet_buf *p = first_packet;
+ struct packet_header_T *h;
+
+ if (seq < last_seq) {
+ p = first_packet;
+ }
+
+ while(p) {
+ h = (struct packet_header_T*)p->data;
+ if (ntohl(h->seq) == seq) {
+ return(p);
+ }
+ p = p->next;
+ }
+ return(NULL);
+}
+
+struct packet_buf *
+ack_on_seq(int seq)
+{
+ struct packet_buf *p = &first_rec_packet;
+ struct packet_header_T *h;
+
+ if (db1) printf("***> ack_on_seq: %d.\n", seq);
+
+ while (p) {
+ /* printf("\nPacket at %x.\n", p);*/
+ /* DecodeSvintoBoot(p->data);*/
+ h = (struct packet_header_T*)p->data;
+ if ( (ntohl(h->type) == ACK) && (ntohl(h->seq) == seq) ) {
+ if (all_ids || ntohl(h->id) == id) {
+ printf("***< ack_on_seq %d, ok.\n", seq);
+ return(p);
+ }
+ }
+ p = p->next;
+ }
+ if (db1) printf("***< ack_on_seq, no.\n");
+ return(NULL);
+}
+
+int
+highest_seq_received(void)
+{
+ struct packet_buf *p = &first_rec_packet;
+ struct packet_header_T *h;
+ int highest_seq = -1;
+
+ if (db1) printf("***> highest_seq_received\n");
+
+ while (p) {
+ /* printf("\nPacket at %x.\n", p);*/
+ /* DecodeSvintoBoot(p->data);*/
+ h = (struct packet_header_T*)p->data;
+ if ((ntohl(h->type) == ACK) && (all_ids || (ntohl(h->id) == id))) {
+ if ((int)ntohl(h->seq) > highest_seq) {
+ highest_seq = ntohl(h->seq);
+ if (db4) printf("Highest seq: %d\n", highest_seq);
+ }
+ }
+ p = p->next;
+ }
+
+ if (db1) printf("***< highest_seq_received: %d\n", highest_seq);
+ return(highest_seq);
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: PrintPacket
+*#
+*# PARAMETERS:
+*#
+*# DESCRIPTION:
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 961022 ronny Initial version
+*#
+*#***************************************************************************/
+
+void
+PrintPacket(const unsigned char *p, int size, int type)
+{
+ int i;
+
+ /* printf("size %d\n", size);*/
+ for (i = 0; i != size; i++) {
+ if (i % p_packet_bpl == 0)
+ printf("\n%-4.4d: ", i);
+ if (type == UDEC)
+ printf("%-3d ", p[i]);
+ else if (type == HEX)
+ printf("%-2.2x ", p[i]);
+ else if (type == CHAR) {
+ if (isprint(p[i]))
+ printf("%-3c ", p[i]);
+ else
+ printf("%-3d ", p[i]);
+ }
+ else if (type == ASCII) {
+ if (isprint(p[i]))
+ printf("%c", p[i]);
+ else
+ printf(".");
+ }
+ }
+ printf("\n");
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: DecodeSvintoBoot
+*#
+*# PARAMETERS:
+*#
+*# DESCRIPTION: Decodes packets that follow the e100boot protocol.
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 961022 ronny Initial version
+*#
+*#***************************************************************************/
+
+void
+DecodeSvintoBoot(const unsigned char *p)
+{
+ char *str;
+ volatile struct packet_header_T *ph = (struct packet_header_T*)p;
+
+ /* printf("size %d \n", sizeof(struct packet_header_T));*/
+
+ if (db4) printf("\n>DecodeSvintoBoot. Packet at 0x%x\n", (unsigned int)p);
+ if (db1) {
+ printf("%2.2x-%2.2x-%2.2x-%2.2x-%2.2x-%2.2x -> ", p[6],p[7],p[8],p[9],p[10], p[11]);
+ printf("%2.2x-%2.2x-%2.2x-%2.2x-%2.2x-%2.2x\n", p[0],p[1],p[2],p[3],p[4], p[5]);
+
+ printf("length : %4.4lx\n", (long)ntohs(ph->length));
+ printf("snap1 : %8.8lx\n", (long)ntohl(ph->snap1));
+ printf("snap2 : %8.8lx\n", (long)ntohl(ph->snap2));
+
+ switch (ntohl(ph->tag)) {
+ case 0xffffffff:
+ str = "(host > ETRAX)";
+ break;
+ case 0xfffffffe:
+ str = "(host < ETRAX)";
+ break;
+ default:
+ str = "(unknown)";
+ break;
+ }
+ printf("tag : %8.8lx %s\n", (unsigned long)ntohl(ph->tag), str);
+ printf("seq : %8.8lx\n", (unsigned long)ntohl(ph->seq));
+ }
+
+ switch (ntohl(ph->type)) {
+
+ case STRING:
+ str = "(STRING)";
+ fprintf(stderr, "%s", &p[sizeof(struct packet_header_T)]);
+ find_string((char*)&p[sizeof(struct packet_header_T)]);
+ break;
+
+ case NET_INT: {
+ char search_str[20];
+
+ str = "(NET_INT)";
+ sprintf(search_str, "0x%8.8lx", ntohl(*(udword*)&p[sizeof(struct packet_header_T)]));
+ fprintf(stderr, search_str);
+ find_string(search_str);
+ break;
+ }
+
+ case NET_INT_NL: {
+ char search_str[20];
+
+ str = "(NET_INT_NL)";
+ sprintf(search_str, "0x%8.8lx\n", ntohl(*(udword*)&p[sizeof(struct packet_header_T)]));
+ fprintf(stderr, search_str);
+ find_string(search_str);
+ break;
+ }
+
+ case ACK:
+ str = "(ACK)";
+ break;
+
+ case BOOT_PACKET:
+ str = "(bootpacket)";
+ break;
+
+ case BOOT_CMDS:
+ str = "(bootcmds)";
+ break;
+
+ default:
+ str = "(unknown)";
+ break;
+ }
+
+ if (db1) {
+ printf("(type : %8.8lx %s)\n", (unsigned long)ntohl(ph->type), str);
+ printf("(id : %8.8lx)\n", (unsigned long)ntohl(ph->id));
+ id = ntohl(ph->id);
+ }
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: SendToDevice
+*#
+*# PARAMETERS:
+*#
+*# DESCRIPTION:
+*#
+*#---------------------------------------------------------------------------
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 980818 ronny Initial version
+*#
+*#***************************************************************************/
+
+void
+SendToDevice(unsigned char *data, int data_len)
+{
+ char fName[MAX_STRING_LEN];
+ FILE *fd;
+ struct packet_header_T *h = (struct packet_header_T*) data;
+
+ if (db1) printf("***> SendToDevice\n");
+
+ if (db2) printf("Sending %d bytes at 0x%x to %s.\n", data_len, (unsigned int)data, device);
+ if (db1) printf("#TX######################################################\n");
+ if (db1) DecodeSvintoBoot(data);
+
+ if (db1) printf("#########################################################\n");
+ if (toFiles || cmdsOnly) {
+ if (cmdsOnly) { /* use a simpler name */
+ sprintf(fName, "e100boot.cmds");
+ }
+ else {
+ sprintf(fName, "e100boot.seq%lu", (unsigned long)ntohl(h->seq));
+ }
+ if (db2) printf("Writing packet to file '%s'.\n", fName);
+ if ((fd = fopen(fName, "w+")) == NULL) {
+ printf("Cannot open/create '%s'. %s.\n", fName, strerror(errno));
+ exit(EXIT_FAILURE);
+ }
+ fwrite(data, data_len, 1, fd);
+ fclose(fd);
+ }
+ else if (pcap_sendpacket(pd, data, data_len) < 0) {
+ perror("pcap_sendpacket failed!\n");
+ exit(EXIT_FAILURE);
+ }
+
+ if (db1) printf("<*** SendToDevice\n");
+}
+
+/****************************************************************************
+*#
+*# FUNCTION NAME: timeout
+*#
+*# PARAMETERS:
+*#
+*# DESCRIPTION:
+*#
+*#---------------------------------------------------------------------------
+*# HISTORY
+*#
+*# DATE NAME CHANGES
+*# ---- ---- -------
+*# 980817 ronny Initial version
+*#
+*#***************************************************************************/
+
+int
+timeout(struct timeval *tvThen, int ms)
+{
+ struct timeval tvNow;
+ struct timeval tvDiff;
+
+ (void) gettimeofday(&tvNow, NULL);
+ tvDiff = timeval_subtract(&tvNow, tvThen);
+ if (db4) printf("sec %d.%d\n", (int)tvDiff.tv_sec, (int)tvDiff.tv_usec);
+ if (ms * 1000 < (tvDiff.tv_sec * 1000000 + tvDiff.tv_usec)) {
+ if (db4) printf("TIMEOUT\n");
+ return(TRUE);
+ }
+
+ return(FALSE);
+}
+
+/****************************************************************************
+ *#
+ *# FUNCTION NAME: timeval_subtract
+ *#
+ *# PARAMETERS:
+ *#
+ *# DESCRIPTION: Subtract x-y, and return result.
+ *#
+ *# DATE NAME CHANGES
+ *# ---- ---- -------
+ *# 970128 ronny Initial version
+ *#
+ *#***************************************************************************/
+
+struct timeval
+timeval_subtract(struct timeval *x, struct timeval *y)
+{
+ struct timeval diff;
+
+ diff.tv_sec = x->tv_sec - y->tv_sec;
+ diff.tv_usec = x->tv_usec - y->tv_usec;
+
+ if (diff.tv_usec < 0) {
+ diff.tv_sec--;
+ diff.tv_usec = 1000000 + diff.tv_usec;
+ }
+
+ return diff;
+}
+
+int
+gettimeofday(struct timeval *tv, void* tz_void)
+{
+ struct _timeb tb;
+ _ftime(&tb);
+ tv->tv_sec = tb.time;
+ tv->tv_usec = tb.millitm * 1000;
+ return 0;
+}