This is the mail archive of the
ecos-patches@sources.redhat.com
mailing list for the eCos project.
CSB281 - Add LCD/CRT support
- From: Gary Thomas <gary at mlbassoc dot com>
- To: eCos patches <ecos-patches at sources dot redhat dot com>
- Date: 01 Feb 2003 11:32:12 -0700
- Subject: CSB281 - Add LCD/CRT support
Not the generalized support I had hoped for, but it will do for now.
Index: hal/powerpc/csb281/current/ChangeLog
===================================================================
RCS file: /misc/cvsfiles/ecos/packages/hal/powerpc/csb281/current/ChangeLog,v
retrieving revision 1.4
diff -u -5 -p -r1.4 ChangeLog
--- hal/powerpc/csb281/current/ChangeLog 22 Jan 2003 05:31:16 -0000 1.4
+++ hal/powerpc/csb281/current/ChangeLog 1 Feb 2003 17:55:52 -0000
@@ -1,5 +1,19 @@
+2003-02-01 Gary Thomas <gary@mlbassoc.com>
+
+ * src/sed135x_16bit.c:
+ * src/sed1356_16bit.h:
+ * src/lcd_support.c
+ * src/font.h:
+ * src/banner.xpm:
+ * include/lcd_support.h: New file(s).
+
+ * src/hal_aux.c:
+ * cdl/hal_powerpc_csb281.cdl: Add support for LCD/CRT+PS/2 keyboard
+ as console device. Hardware support contributed by Mike Kelly of
+ Cogent.
+
2003-01-22 Jonathan Larmour <jifl@eCosCentric.com>
* include/pkgconf/mlt_powerpc_csb281_ram.h (CYGMEM_SECTION_heap1_SIZE):
Make this match the .mlt and .ldi definition.
Index: hal/powerpc/csb281/current/cdl/hal_powerpc_csb281.cdl
===================================================================
RCS file: /misc/cvsfiles/ecos/packages/hal/powerpc/csb281/current/cdl/hal_powerpc_csb281.cdl,v
retrieving revision 1.2
diff -u -5 -p -r1.2 hal_powerpc_csb281.cdl
--- hal/powerpc/csb281/current/cdl/hal_powerpc_csb281.cdl 20 Jan 2003 11:11:57 -0000 1.2
+++ hal/powerpc/csb281/current/cdl/hal_powerpc_csb281.cdl 1 Feb 2003 18:14:38 -0000
@@ -114,14 +114,45 @@ cdl_package CYGPKG_HAL_POWERPC_CSB281 {
depending on the processor fitted. Select the clock speed
appropriate for your board so that the system can set the serial
baud rate correctly, amongst other things."
}
+ cdl_component CYGSEM_CSB281_LCD_SUPPORT {
+ display "Support LCD"
+ flavor bool
+ default_value 1
+ compile lcd_support.c sed135x_16bit.c
+ description "
+ Enabling this option will enable the use the LCD/CRT as a
+ simple framebuffer, suitable for use with a windowing
+ package."
+
+ cdl_component CYGSEM_CSB281_LCD_COMM {
+ display "Support LCD/keyboard for comminication channel"
+ active_if CYGPKG_REDBOOT
+ flavor bool
+ default_value 1
+ description "
+ Enabling this option will use the LCD/CRT and keyboard for a
+ communications channel, suitable for RedBoot, etc."
+
+ cdl_option CYGOPT_CSB281_LCD_COMM_LOGO {
+ display "Logo location"
+ flavor booldata
+ legal_values { "TOP" "BOTTOM" }
+ default_value { "TOP" }
+ description "
+ Use this option to control where the logo is placed
+ on the LCD/CRT screen."
+ }
+ }
+ }
+
cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS {
display "Number of communication channels on the board"
flavor data
- calculated 1
+ calculated 2+CYGSEM_CSB281_LCD_COMM
}
cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL {
display "Debug serial port"
active_if CYGPRI_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_CONFIGURABLE
@@ -295,18 +326,18 @@ cdl_package CYGPKG_HAL_POWERPC_CSB281 {
This option modifies the set of compiler flags for
building the CSB281 HAL. These flags are removed from
the set of global flags if present."
}
-## cdl_option CYGPKG_HAL_POWERPC_CSB281_TESTS {
-## display "CSB281 tests"
-## flavor data
-## no_define
-## calculated { "tests/csb281time" }
-## description "
-## This option specifies the set of tests for the CSB281 HAL."
-## }
+ cdl_option CYGPKG_HAL_POWERPC_CSB281_TESTS {
+ display "CSB281 tests"
+ flavor data
+ no_define
+ default_value { "" }
+ description "
+ This option specifies the set of tests for the CSB281 HAL."
+ }
}
cdl_component CYGHWR_MEMORY_LAYOUT {
display "Memory layout"
flavor data
Index: hal/powerpc/csb281/current/include/lcd_support.h
===================================================================
RCS file: hal/powerpc/csb281/current/include/lcd_support.h
diff -N hal/powerpc/csb281/current/include/lcd_support.h
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ hal/powerpc/csb281/current/include/lcd_support.h 1 Feb 2003 17:53:01 -0000
@@ -0,0 +1,83 @@
+#ifndef _LCD_SUPPORT_H_
+#define _LCD_SUPPORT_H_
+//==========================================================================
+//
+// lcd_support.h
+//
+// LCD support routines
+//
+//==========================================================================
+//####ECOSGPLCOPYRIGHTBEGIN####
+// -------------------------------------------
+// This file is part of eCos, the Embedded Configurable Operating System.
+// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
+// Copyright (C) 2003 Gary Thomas
+//
+// eCos is free software; you can redistribute it and/or modify it under
+// the terms of the GNU General Public License as published by the Free
+// Software Foundation; either version 2 or (at your option) any later version.
+//
+// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
+// WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+// for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with eCos; if not, write to the Free Software Foundation, Inc.,
+// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+//
+// As a special exception, if other files instantiate templates or use macros
+// or inline functions from this file, or you compile this file and link it
+// with other works to produce a work based on this file, this file does not
+// by itself cause the resulting work to be covered by the GNU General Public
+// License. However the source code for this file must still be made available
+// in accordance with section (3) of the GNU General Public License.
+//
+// This exception does not invalidate any other reasons why a work based on
+// this file might be covered by the GNU General Public License.
+//
+// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
+// at http://sources.redhat.com/ecos/ecos-license/
+// -------------------------------------------
+//####ECOSGPLCOPYRIGHTEND####
+//==========================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s): gthomas
+// Contributors: gthomas
+// Date: 2001-09-29
+// Description: Simple LCD support
+//####DESCRIPTIONEND####
+
+struct lcd_info {
+ short height, width; // Pixels
+ short bpp; // Depth (bits/pixel)
+ short type;
+ short rlen; // Length of one raster line in bytes
+ short access_size; // Data path width to frame buffer
+ short stride; // Offset (in bytes) between elements
+ void *fb; // Frame buffer
+ void (*off)(void); // Turn screen off
+ void (*on)(void); // Turn screen on
+};
+
+// Frame buffer types - used by MicroWindows
+#define FB_TRUE_RGB565 0x01
+#define FB_TRUE_RGB555 0x02
+
+// Exported functions
+void lcd_init(int depth);
+void lcd_clear(void);
+int lcd_getinfo(struct lcd_info *info);
+void lcd_on(bool enable);
+#ifdef CYGSEM_CSB281_LCD_COMM
+void lcd_screen_clear(void);
+void lcd_moveto(int X, int Y);
+void lcd_putc(cyg_int8 c);
+int _lcd_printf(char const *fmt, ...);
+void lcd_setbg(int red, int green, int blue);
+void lcd_setfg(int red, int green, int blue);
+void lcd_comm_init(void);
+#endif
+
+#endif // _LCD_SUPPORT_H_
Index: hal/powerpc/csb281/current/src/banner.xpm
===================================================================
RCS file: hal/powerpc/csb281/current/src/banner.xpm
diff -N hal/powerpc/csb281/current/src/banner.xpm
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ hal/powerpc/csb281/current/src/banner.xpm 1 Feb 2003 17:54:13 -0000
@@ -0,0 +1,488 @@
+//
+// LCD/CRT screen banner/logo
+//
+// Copyright (C) 2003 Gary Thomas
+//
+
+#if 0 // 256 colors
+/* XPM */
+static char * banner_xpm[] = {
+"640 64 256 2",
+" c None",
+". c #020202",
+"+ c #0A3626",
+"@ c #045A84",
+"# c #48788D",
+"$ c #6795A0",
+"% c #86B1C5",
+"& c #9EC4D2",
+"* c #BCD5DB",
+"= c #156082",
+"- c #CDE0E1",
+"; c #082D1F",
+"> c #3C393F",
+", c #EAEAED",
+"' c #042619",
+") c #475D5A",
+"! c #042216",
+"~ c #363736",
+"{ c #6D7A78",
+"] c #EFEEF0",
+"^ c #031E13",
+"/ c #0B4355",
+"( c #859695",
+"_ c #5B5C5B",
+": c #021A12",
+"< c #F3F2F4",
+"[ c #3D5144",
+"} c #0F2F25",
+"| c #2E365D",
+"1 c #A2AFB1",
+"2 c #8E808E",
+"3 c #04160D",
+"4 c #EDFDFD",
+"5 c #03120D",
+"6 c #A4949A",
+"7 c #124562",
+"8 c #73636D",
+"9 c #163129",
+"0 c #6D8C98",
+"a c #BCC5C4",
+"b c #53686D",
+"c c #34565B",
+"d c #484A49",
+"e c #B6AFB2",
+"f c #020E0A",
+"g c #26403C",
+"h c #20607B",
+"i c #33525A",
+"j c #817887",
+"k c #225162",
+"l c #FAFAFA",
+"m c #0A261D",
+"n c #0B4E6A",
+"o c #3C3852",
+"p c #D0D4D7",
+"q c #616261",
+"r c #292B42",
+"s c #959497",
+"t c #0D081D",
+"u c #FAFEFD",
+"v c #485350",
+"w c #496868",
+"x c #D6C2C0",
+"y c #577882",
+"z c #0D221A",
+"A c #46465F",
+"B c #0B0A0C",
+"C c #93A4A9",
+"D c #E0E0E0",
+"E c #344E50",
+"F c #71868D",
+"G c #B5B9BA",
+"H c #19392E",
+"I c #101E17",
+"J c #5C6E71",
+"K c #628C9B",
+"L c #327088",
+"M c #789497",
+"N c #14261F",
+"O c #1E5365",
+"P c #061A14",
+"Q c #A8BBBF",
+"R c #E5D8D5",
+"S c #286075",
+"T c #BCCCCD",
+"U c #04527E",
+"V c #413F52",
+"W c #0F060F",
+"X c #353854",
+"Y c #2F2A3F",
+"Z c #757C93",
+"` c #154153",
+" . c #4B506A",
+".. c #A79AA2",
+"+. c #608696",
+"@. c #EBE1DB",
+"#. c #848689",
+"$. c #848C97",
+"%. c #8D8A90",
+"&. c #222222",
+"*. c #133841",
+"=. c #41403F",
+"-. c #09668F",
+";. c #6A6C6D",
+">. c #1E312A",
+",. c #090513",
+"'. c #272626",
+"). c #90ADB7",
+"!. c #D9D5D3",
+"~. c #C8BCBD",
+"{. c #637977",
+"]. c #336A81",
+"^. c #294956",
+"/. c #86A4AE",
+"(. c #8E9D9E",
+"_. c #A38D98",
+":. c #1A160E",
+"<. c #406A7A",
+"[. c #1C1A12",
+"}. c #718280",
+"|. c #232237",
+"1. c #CBCCCE",
+"2. c #10414A",
+"3. c #070607",
+"4. c #063244",
+"5. c #054974",
+"6. c #7196A8",
+"7. c #046289",
+"8. c #334A49",
+"9. c #27263C",
+"0. c #1C5259",
+"a. c #78787B",
+"b. c #1A5462",
+"c. c #585C71",
+"d. c #80809A",
+"e. c #1E1E1E",
+"f. c #4A4A62",
+"g. c #355C67",
+"h. c #141216",
+"i. c #B7A4A4",
+"j. c #313055",
+"k. c #9BBCCB",
+"l. c #5D525A",
+"m. c #666666",
+"n. c #7A8B86",
+"o. c #6C6D84",
+"p. c #A6B6B7",
+"q. c #3D3F5F",
+"r. c #A69EA6",
+"s. c #637C89",
+"t. c #1A1A1A",
+"u. c #487283",
+"v. c #110E25",
+"w. c #DAD9E0",
+"x. c #E7E5E9",
+"y. c #141229",
+"z. c #174A56",
+"A. c #F7F6F7",
+"B. c #7BA3B7",
+"C. c #828086",
+"D. c #294844",
+"E. c #9A8C97",
+"F. c #C6C4C5",
+"G. c #FEFEF6",
+"H. c #2A525D",
+"I. c #366676",
+"J. c #0E5D80",
+"K. c #44606A",
+"L. c #2E2E44",
+"M. c #292F57",
+"N. c #2C1E16",
+"O. c #06434A",
+"P. c #064E72",
+"Q. c #737172",
+"R. c #180E13",
+"S. c #908DA1",
+"T. c #171617",
+"U. c #135679",
+"V. c #2F221A",
+"W. c #547077",
+"X. c #BDBBBD",
+"Y. c #3C555A",
+"Z. c #06303B",
+"`. c #324640",
+" + c #4B6B79",
+".+ c #9BB6BE",
+"++ c #334A36",
+"@+ c #55536B",
+"#+ c #666478",
+"$+ c #1D1A2D",
+"%+ c #869BA5",
+"&+ c #9A9C9F",
+"*+ c #201E32",
+"=+ c #C4B0AF",
+"-+ c #0A0205",
+";+ c #2D2C2C",
+">+ c #B2A2A3",
+",+ c #D5CCCC",
+"'+ c #045682",
+")+ c #0A362A",
+"!+ c #9AAEB0",
+"~+ c #1A1629",
+"{+ c #778C97",
+"]+ c #1A4048",
+"^+ c #ACCCDE",
+"/+ c #3C3A5D",
+"(+ c #343147",
+"_+ c #464646",
+":+ c #F3EAE3",
+"<+ c #567D92",
+"[+ c #074A81",
+"}+ c #83869E",
+"|+ c #045E87",
+"1+ c #0C4C57",
+"2+ c #346076",
+"3+ c #677271",
+"4+ c #777082",
+"5+ c #4F4E54",
+"6+ c #504655",
+"7+ c #44415D",
+"8+ c #CEC5C6",
+"9+ c #7B98A8",
+"0+ c #968B93",
+"a+ c #04020E",
+"b+ c #323232",
+"c+ c #615D6F",
+"d+ c #9495A8",
+"e+ c #FEFEFE",
+"f+ c #A7A4A8",
+"g+ c #6C7B88",
+"h+ c #4B424F",
+"i+ c #1E2247",
+"j+ c #272D52",
+"k+ c #5A4A53",
+"l+ c #073A47",
+"m+ c #3A2616",
+"n+ c #E0E6E7",
+"o+ c #6C6B7E",
+"p+ c #FEFAFC",
+"q+ c #1E1219",
+"r+ c #B1C5C8",
+"s+ c #ABADAD",
+"t+ c #044E7C",
+"u+ c #545455",
+"v+ c #9E959E",
+"w+ c #060205",
+"x+ c #092F36",
+"y+ c #CDCDDE",
+"z+ c #78778A",
+"A+ c #63828C",
+"B+ c #204A56",
+"C+ c #0F0E11",
+"D+ c #E1E0E9",
+"E+ c #9EA5A5",
+"F+ c #9C9DAF",
+"G+ c #F5FDFD",
+"u u e+G.G.G.G.G.G.G.G.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+G.G.G.G.G.G.G.G.e+G.e+G.e+G.e+G.e+G.e+G.e+G.e+G.G.G.G.G.G.G.G.G.e+e+e+e+e+e+e+e+u G+G+u G.e+u u e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+D+D+D+D+D+D+D+D+D+D+n+D+n+D+n+D+D+D+D+D D+D+D+D+n+D+n+x.x.x.n+x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.D+x.D+D+D+D+D+D+D+D+D+D+D+w.w.w.w.w.w.w.w.w.w.!.p w.p p y+y+y+y+y+1.1.1.T F.F.a ",
+"e+e+G.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+u u u u u u u u u u u u u u u G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+u u u u u u u u u u u u u u u u e+G.G.G.e+e+u u e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+x.n+n+x.x.x.x., , , , , x., x., , , , x.x., , , x., , , , , x.x.x., , , , , , , , , , , , , , , , , , , , , , x., x., , , x.x.x.x.x.x.D+D+x.x.D+D+D+D+D+D+w.w.w.w.w.w.p p !.p y+y+y+y+y+y+y+y+F.",
+"e+p+e+G.e+u u u u u e+e+e+e+e+e+e+e+e+e+u u u u u u u e+e+e+e+e+e+e+u u u u u u u u G.G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+u u u u u u u u e+e+e+e+e+e+e+e+G.G.G.G.G.e+G.G.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+x.x., , , , x.x., , ] ] , ] , , , , , , , , , ] , , , ] , ] ] ] ] ] ] , ] ] ] ] , ] ] ] ] ] ] ] , , ] ] ] , ] ] ] ] , , ] , , , x.x.x.x.x.x.x.x.D+D+D+D+n+D+D+w.w.w.w.w.w.w.p w.p y+y+y+y+y+y+y+",
+"u e+G.e+u e+e+e+e+e+u e+G.e+G.e+G.e+G.G.e+e+e+e+e+e+u e+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+G.G.G.G.e+e+e+G.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+, x.x., , , ] ] , , , , ] , ] , , ] ] ] ] ] ] ] ] ] < ] < ] < < < < ] < ] < ] ] < ] ] < < < < ] ] ] ] ] ] < ] ] ] ] ] ] ] , , , , , , x.x.x.x.x.x.D+D+D+D+D+D+D+D+w.w.w.w.w.w.y+!.p !.p y+y+p y+",
+"u e+u l G+G+G+G+G+G+G+u u u u u u u u G+G+G+G+G+G+G+G+G+G+G+G+G+G+u u u u u u u G+G+u u l l l l l l l l l l l l l l l u G+G+G+u u u G+G+G+G+G+G+u u G+G+G+u G+4 4 G+p+G.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+, , , , ] , , ] ] < < ] ] ] < < ] ] ] ] < < < < < < < < A.A.< < < A.< < < < < < < A.< < < < < A.< < < < < < ] < ] < < ] ] ] ] ] ] , ] , x.x.x.x.x.x.n+x.n+D+D+D+D+D+D+w.w.w.w.w.!.!.!.w.y+p y+p ",
+"A.G+A.!+F F F F F F F F F F F F 0 {+0 0 0 0 0 6.0 M 0 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 6.M 0 $ K C G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+, ] , ] ] ] ] ] < ] < < < < < < ] < ] < A.< < A.A.< A.A.< A.A.< A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.< < A.< A.< < < < < ] < ] ] ] ] ] ] ] x., x.x.x.x.x.x.D+x.D+D+D+w.w.w.w.w.!.p w.w.!.p p ",
+"l 4 4 F / / / / 7 / 7 / 7 / / 7 7 7 7 7 5.5.7 5./ 5.7 5.5.5.5.5.5.5.5.5.5.5.5.P.P.5.5.n P.n P.n P.n P.n P.n P.n P.P.P.P.P.P.5.5.5.n 5.5.5.5.5.5.5.5.5.P.5.7 [+n n +A.u e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+, ] ] ] < < < ] A.< A.A.A.< < A.A.G+, < A.G+A.A.l A.A.G+A.G+l A.l l l p+p+l l l A.A.A.l A.l A.l A.A.A.A.A.A.A.A.A.A.A.A.< < < < A.] ] ] ] ] ] ] , , x.x.x.x.x.x.x.D+x.D+D+D+w.w.w.w.w.w.w.w.!.w.",
+"u G+< K / 5.[+/ [+/ 5.5.[+5.5.5.5.[+[+5.5.5.[+[+[+[+5.[+5.5.5.[+[+[+[+[+[+[+t+[+[+[+[+[+t+t+t+t+t+t+t+t+t+t+t+t+[+t+[+[+[+[+[+[+[+[+t+n P.P.[+[+[+[+t+t+[+[+[+t+P.# 4 u e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+< ] ] < < < < A.< A.A.A.A.l l l l A.A.A.l A.A.l l u l l l l l l l l p+l l p+l l l l l l l l l p+A.A.p+p+p+A.p+A.A.A.A.A.l A.< A.< A.< < ] ] x.x.x.x., , , , x.x.x.x.D+x.@.D+D+D+D+w.w.w.w.w.w.!.",
+"u u 4 K 5.5.5.5.5.5.5.5./ [+5.5.5.5.5.5.5.5.[+t+t+t+5.[+[+5.t+P.P.P.t+t+t+[+[+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+U t+U t+t+t+U U U t+t+t+t+t+t+t+t+t+t+t+t+[+n t+U P.# G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+< < < < A.< < A.A.A.l G+A.l l l l l G+l l u u l l u l u l l u l u u p+e+e+e+u u u u l u l e+p+e+p+p+p+p+p+p+p+l l l l A.A.A.A.A.< A.< < y+..2 2 ......>+e ~.x ,+D+D+x.D+@.@.D+R x.D+w.w.w.w.w.w.",
+"p+u G+A+5.5.5.5.5.5.[+5.[+5.5.[+5.5.[+5.5.t+P.t+t+P.U t+t+U t+t+t+t+t+t+P.U U t+U U U U U U U U U U U U U U U t+U t+U U U U U U U U U t+t+U U U U U U U U.n U U 5.u.4 e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+< < < A.< A.A.A.l l l l l l l l u u e+l u l l u e+e+e+p+e+u p+e+p+p+u e+u e+p+p+p+e+e+e+e+l u p+e+p+l l l l l p+l l p+p+p+p+A.A.A.A.A., 2 d.S.%.E.6 _.E._._.2 2 2 2 ..X.y+w.w.w.R D+D+w.p w.w.w.",
+"G.u G+0 5.5.5.5.5.5.5.5.[+[+t+5.5.5.5.t+5.t+P.t+U t+U P.t+t+t+U U U U U t+t+U U U U U U U U U U U U t+U U U '+U '+U U U U U U U U U '+U U U U U U U U U U t+U '+n u.G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+< < < A.A.A.p+l l l l e+u e+u p+e+p+e+p+e+e+p+l p+e+e+u e+u e+e+e+e+e+e+l u u e+e+e+p+u e+e+e+p+p+p+p+p+p+e+p+p+p+l l l p+A.A.A.A.< ,+S.j j 4+o.#+o+j E.d.2 2 j E._._._._...i.=+i..._.z+#+S.e G ",
+"l u G++.5.[+[+[+5.[+5.[+5.t+5.t+t+t+t+t+U t+t+t+t+U t+U U U U U U U U U '+'+U U U U U U U U U U U U '+U '+'+U '+U '+'+'+'+'+'+'+'+'+U '+'+'+'+'+U '+U '+U '+U '+n u.4 e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+A.A.A.A.A.l l l l e+e+l p+u e+e+e+e+e+e+e+e+u e+e+e+u e+e+e+l p+u e+u p+e+e+e+e+p+e+e+e+e+e+e+e+e+e+e+e+e+p+u l p+p+A.A.A.A.A.A.< f+z+z+4+z+4+#+4+o+8 2 2 j j j >+_.2 2 2 _._._.2 j j _.2 4+c+7+",
+"G.u G+0 [+[+5.[+[+[+[+t+[+t+t+t+t+t+t+t+U U U U t+U U U U U U U U U '+U U '+'+'+'+'+'+'+'+'+'+'+'+U '+'+'+@ '+@ '+'+'+'+'+'+'+'+'+@ '+U U U U '+U '+'+@ '+'+U '+U # G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+A.A.p+p+p+p+p+u l G.e+e+G.e+e+G.e+G.e+G.e+G.e+e+G.l w.p w.!.y+x.p !., A.A.p+e+e+e+e+e+e+G.e+e+G.e+e+e+G.e+G.e+u p+G.p+p+p+p+p+:+e 0+4+4+j z+#+j o.#+c+4+4+8 c+4+4+c+6+8 j =+~.=+>+6 _.2 c+l.o R.",
+"G.u 4 $ [+[+[+[+[+[+t+t+U t+t+t+t+U U U U '+'+U '+'+'+'+'+'+'+'+'+'+'+'+@ '+@ @ @ @ @ '+'+'+'+'+'+@ '+@ @ @ @ @ @ @ @ @ @ @ @ @ @ '+@ @ @ @ @ '+@ '+'+@ @ '+'+@ U.# 4 e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+A.A.A.p+l l l p+e+e+e+G.e+e+e+e+e+e+G.e+e+e+e+G.p+w.F+d+f+f+..F+S.d+d+F+F+1.n+D A.u e+e+e+e+G.e+e+e+G.e+e+e+e+G.G.p+G.p+l l , f+E.d.j 2 E.j #+2 4+c+@+@+f.7+f.6+f.7+/+f.c+6 j _.E.2 _.4+q+R.-+w+",
+"G.G.G+0 t+U U U U t+t+t+U U U U U U U U U U '+'+U '+'+'+'+'+'+'+'+'+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ '+'+'+@ '+@ @ @ '+U.U.@ '+U.# 4 e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+p+p+p+p+e+e+e+e+e+e+e+e+G.G.e+G.e+e+e+G.e+u u G.e+1.v+F+f+e f+d+S.}+$.S.S.d+&+F+e < e+e+G.e+e+G.e+e+e+G.e+e+e+e+G.p+A.] x.X.d.S.2 j z+j j d._.4+8 4+8 6+7+q.7+/+/+A 7+f.c+8 #+c+4+_.6 k+w+w+w+. ",
+"G.u 4 $ U t+t+t+t+U U U U U U U U U '+'+'+'+'+'+@ @ @ @ |+@ @ @ @ @ '+@ |+@ @ |+|+@ |+@ @ @ @ @ @ |+@ |+@ |+@ |+|+|+|+@ @ @ @ @ |+@ @ @ @ @ @ |+@ @ '+J.U.J.= J.'+<+4 e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+A.p+l e+e+e+e+e+e+G.e+e+e+e+e+e+e+e+e+e+e+G.e+e+@.8+F+i.X.>+F+S.}+d.d.d.}+$.d.S.}+8+G.G.e+e+e+e+G.e+e+e+e+e+p+l G+l F.S.Z o.o+S.E.2 d.o.4+2 S.2 4+4+4+ .A /+7+q./+/+/+7+#+k+@+f.k+V :.B . . . . ",
+"G.G.G+0 U U U U U U U '+'+'+'+U U '+U '+'+@ |+@ |+@ @ @ 7.7.|+|+@ @ @ @ |+|+|+|+|+'+= J.-.J.|+J.@ @ @ J.'+7.@ 7.|+|+7.|+|+|+7.|+|+@ @ |+@ |+|+|+|+-.h ].# $ % K U.<+4 G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+A.p+p+p+e+e+e+e+e+e+e+e+e+G.e+G.e+G.e+G.e+e+u G.,+x s+~.8+=+f+S.}+d.Z d.d.}+d.d.}+F+l u G.G.G.e+e+e+e+G.G.e+e+< f+F+v+}+#+o.4+>+E.E.z+c+4+j j 8 o.@+c+@+7+/+/+| /+/+/+7+@+ .@+7+Y ~+. . . . . . ",
+"G.u G+6.U '+'+'+'+'+'+'+@ @ '+@ @ '+@ '+'+@ @ |+7.@ J.U.U.U.J.@ |+7.|+|+|+7.7.7.|+= = L ].S h h S h h L L U.J.@ |+7.7.|+|+7.|+7.|+|+|+|+7.7.@ J.L % % % & ^+^+& <+y 4 e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+G.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+G.e+e+e+e+e+e+A.!.=+e x ,+x e F+S.d.d.d.d.}+d.d.Z }+p !.p D+w.D+A.G.G.G.G.G.] !.i.>+..d.o+4+E...2 2 c+#+d.4+j 8 c+#+c+f.A q./+/+/+A 7+A f.6+/+q+,.. . . . . . . ",
+"G.u 4 6.U '+'+'+'+'+'+'+@ |+@ @ @ @ |+|+|+|+|+@ J.b.L $ 6.u.O h J.|+7.7.|+|+7.|+J.h $ * ^+% % & & % % % k.K S h = J.|+7.|+7.7.7.|+@ |+7.7.|+h L <.B.k.).).r+.+9+9+( G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+p+G.G.G.G.G.G.G.e+e+e+e+e+G.e+e+e+G.e+G.e+e+e+:+x ~.x ,+@.x =+F+}+d.Z Z Z d.d.Z Z d.S.S.S.F+d+d+F+y+l G.l !.f+E.0+r._.4+4+2 2 j _.2 #+j 4+j j 8 c+@+A /+/+| /+/+/+q.7+/+Y ~+t . . . . . . . . . ",
+"G.u G+6.'+@ @ @ @ @ @ |+|+|+|+|+|+|+|+|+7.|+|+J.U.<+k.^+r+r+B.+.L I.= = = = J.h h L $ * T - Q p.^+* ^+k.% % B.+.$ L h J.7.7.7.7.7.7.|+J.J.= = 2+<.W.C a G !+p.p.).Q l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+G.p+e+e+e+e+e+e+G.e+e+e+e+e+e+e+e+e+G.e+G.G.p+R x x R x R ~.>+>+}+d.z+Z Z d.Z d.Z j d.d.}+$.d+S.S.S.F.F.}+c.@+c.f.c+4+S.}+S.2 4+4+8 8 E.8 #+8 #+#+#+/+/+/+q./+j.j.i+$+v.B -+. . . . . . . . . . ",
+"G.u 4 6.'+@ @ |+|+|+@ @ |+|+|+|+|+@ |+|+|+|+J.S $ * * * T ^+^+^+^+).$ <+# ].# # <.<+Q 1 G y+1 C E+Q ^+k.% ).6.B.% B.L h ].-.= J.h = = b.1+l+/ 7 <.u.y 1 y+Q $..+Q T G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+l G.G.G.G.e+e+e+e+e+e+e+e+G.e+G.e+e+G.G.G.e+A.R x x R @.@.x i.v+S.S.d.z+z+Z z+Z Z z+z+4+o.o+b #+#+#+#+@+f.7+q.A .7+@+@+c+8 4+j j 4+4+E.4+c+4+4+j @+/+j+i+i+i+q+t W W a+3.. . . . . . . . . . . ",
+"G.l G+6.@ |+|+@ |+|+|+|+|+7.7.|+|+|+J.J.= U.h u.K Q - r+^+1 M M )./.6.B.B.6.+. +K.F+F+f+p.a y+1 C r+1 ).9+9+s.0 % u.# L L U.b.U.L h / l+4.l+` S g.6.<+6..+r+/.F k.r+l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+G.G.G.e+e+e+G.e+G.e+G.e+G.e+G.e+e+G.G.u !.@.@.R x R @.@.R ,+e }+F+f+d.z+o.4+#+c+c+ .f.f.f.A 7+q./+/+7+@+7+/+/+/+7+7+7+7+/+7+/+/+/+4+4+4+c+@+7+6+/+$+v.t t t t W ,.-+w+. . . . . . . . . . . . . ",
+"G.u 4 6.|+|+|+|+|+|+7.7.|+|+7.7.J.J.J.h ].+.+.$ 6.}.Q n+* T C 9+J A+9+6.+.+.2+<. +$.$.$.C T T r+%+k.r+).s.W.W.K.9+K.I.# 2+/ l+l+O.l+4.4.l+n <.# g.g.g.W.9+C ).W.B.1 G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+p+G.G.G.G.e+e+e+e+e+e+e+e+e+e+e+e+e+x.1.f+f+,+x R x x R x i.E.S.v+..z+#+@+f.A 7+/+q.q./+q.q./+o /+o j.j.j.j.j.7+7+f.k+7+j./+/+/+/+/+8 8 @+/+*+$+q+v.t t W ,.,.,.a+w+w+. . . . . . . . . . . . . ",
+"p+G.G+6.@ |+7.|+7.7.|+7.7.-.|+J.J.I.L K % % 9+0 M Z b G n+- X.d+9+{+6.u.k k K. +s.s.0 $.z+%+p..+9+.+^+9+^.Y.g+y {+# 2+<.2+/ l+4.4.4.2.l+/ h h O k g.]+` W.9+ +^.K.9+l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+D !.p l e+e+G.e+G.e+G.e+e+e+e+G.l w.e f+f+~.,+x x ~.e 6 S.d+r.2 z+c+c.f./+/+/+/+/+o (+X /+/+q.X j.j.j.j.j.Y Y j.7+8 E.c+7+/+7+/+/+/+j.j.Y $+R.R.t W ,.,.-+-+w+w+w+w+. . . . . . . . . . . . . . ",
+"A.G.4 6.|+7.7.7.-.7.7.-.7.-.-.= L B.k.).B.).9+Z F W.K.{+- w.- y+Q ).+.2+^. .u.9+ +s.y J J J d.{+F %+% # H.u.9+9+B.<+ +u.2+k 2.B+)+g.2.Z.l+/ h S ` g.c 2+<.F W.^.y F G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+c.S.G w.u u p+G.G.u G.G.l l G.A.p G s+e e =+~.i.i.>+%.S.E.F+d.c+c.f.7+/+j./+/+/+7+/+/+7+/+/+o (+(+j./+/+j./+j.j./+/+k+7+/+/+/+/+j.$+N.q+N.q+t W W ,.a+a+. a+w+. . . . . . . . . . . . . . . . . ",
+"p+u 4 B.-.7.-.7.7.-.7.7.-.-.= L B.+./.!+/./.9+y F y b g.%+r+D+X.1 1 s.k <.6.}+9+A+A+g+3+J J $.{+s.C 0 2+c <+y 0 /.{+<+g.` g.*.z.I.2+2.l+1+S L b.7 4.B+2+ + +F Z ).d+G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+q. .#+{ d.F+w.p+l A.n+p F.D A.X.f+S.F+y+f+S.d.d.2 }+2 }+z+c+f.A f.f.7+7+/+/+/+7+7+h+7+7+f.h+o o V /+o j.o o /+/+/+/+/+7+7+h+j.q+N.q+q+q+q+W ,.,.w+-+3.. . . w+-+w+. . . . . . . . . . . . . . . ",
+"p+u 4 6.-.7.-.-.-.-.-.-.-.h L $ 0 0 %+).T 1 ).<+B.g.Y.g.y .+- - * ^+B.<+# s.@+s.y g+b z+b g+( .+A+0 <.` 7 2+ +0 /.9+s.B+7 2+k l+# B+)+b.L b.O.l+z.Z.` c i b /.F %+Q l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+| q.f.@+c+#+o+F+s+X.F.X.X.s+s+F+F+S.F+e %.d.d.z+o.o.c+@+ .f.f./+/+/+/+7+/+o o o 7+o o h+h+/+/+7+h+7+A h+7+7+h+7+o V V Y N.v.$+N.q+~+R.t W W ,.w+w+W W . . . w+. . . . . . . . . . . . . . . . . ",
+"p+u G+B.= h -.L L ].h = ].].# s.Z 9+/./..+& %+u.<+2+O B+B+ +%+* y+^+6.2+<.<.o.( d.F g+$.g+b .b K.<+<.B+B+<.y 6.{+{+s.H.]+H.<.H.<.g.0.S 0.1+l+/ z.l+` B+y K.0 B.s.1 G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+l e+l e+e+e+e+e+l e+l l e+e+l e+l l e+l e+e+l l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+l e+l l e+l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+l e+e+e+e+e+e+e+e+e+e+l e+e+A.e+l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+| | | A . .c.#+o+4+F+G s+F+d+F+F+d+s S.z+d.Z o.c. .q.A /+7+/+o /+7+/+/+o j.o (+o o o 7+7+7+h+h+V 6+7+h+7+V o o (+o Y v.q+R.q+t R.t t W ,.-+w+w+w+w+. . w+. . w+. . . . . . . . . . . . . . . . ",
+"u G+4 %+S L u.].# # L S ].K 0 g+z+%+E+F d+k.+.<.2+2+k k u.y i 6.* .+<.` H. +g+/.F 9+0 ).Q 0 %+K.b +.<.` ` y ).9+Z Z J /.K.k k # k k 0.l+2./ O O +.<.z.l+7 B+k S g..+G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+l l e+A.D x.D l e+e+e+e+< ] x.D x.A.< D x.< l l l A., D D x.D ] A.l l e+e+e+e+e+e+e+e+A.< D x.l l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+l l < D x.A.l l e+e+e+e+e+e+e+e+e+A.D n+] l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+M.| | | q.f. . .c.c.#+z+$.}+}+}+#.d.S.}+d.z+c.f.A 7+V 7+/+/+o j.(+V o o /+o j.7+o /+/+/+o o q.7+o V /+o o o o m+N.q+q+t t v.W W W ,.W W W W w+. . . . 3.w+. . . . . . . . . . . . . . . . . . . ",
+"u G.G+B.u.$ k ^. +K.y <.# <+s.g+d.d+E+ +s.).6.O n O 7 L # <+g ^.%+^+6.g.H.g+$.9+F A+s.9+r+).9+ +K.F 6.H.2+<+)./.o.s.%+- .+E E A+z.2.l+4.2.S +.2+<+% ` 7 <.2+O B+k W.4 e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+l G C+3.B D e+e+e+e+A.u+3.3._+l w.3.h.F.l A.e+G._+3.3.. h.=.e A.e+e+e+e+e+e+e+e+e+l &+3.&.A.l l l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+l !.3.C+F.l l e+e+e+e+e+e+e+e+l A.;+w+%.e+l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+j.M.| | | q.A f. . .c.c.#+4+Z d.d.}+}+z+c.f.7+7+V o /+q.(+(+(+j.j.j.j.(+(+j.(+7+V o > o o (+/+o /+o (+(+V.9.*+~+q+R.W t W ,.,.,.,.-+W B w+. . . . . . . 3.w+w+. . . . . . . . . . . . . . . . . ",
+"u G+G+0 2+c i x+Z # +^. .<+g+s.J F d+ . .+.K U.O n 7 # <.B+^.g+%+9+6.H.2+C - - ^+/.2+` ^.Y.K.K.K.W. +c 2+b F+B.Z %+^+T * k.K. +]+k Z.7 7 B+<.g.u.0 c 2.k g.b.` I.W.G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+G.p+G B 3.3.#.G.e+e+e+D C+3.3._+u w.. h.F.u l u l d . B T.B f &.p G.e+e+e+e+e+e+e+e+l b+3.3.&+l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+u D t.&.F.e+l e+e+e+e+e+e+e+e+G.l ;+. %.G.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+M.M.| | | | /+f. . . .@+@+@+c.#+o.d.#+5+q.q.X o X V o o (+j.(+j.o o j.(+o o o o (+o Y o (+(+o (+Y $+N.$+*+q+R.W W W W W ,.a+,.a+w+. w+w+. . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+"G.G.G+F +.9+F E ^.g.W.+.q.F F 6.F {+}+ +K.y g.h b.l+0.<+# B+K.A+B.9+s.^.W.Q r+9+6.2+l+7 7 *.^.W. +s.Y.]+i 2+k.Q F g+%+- p * k. +H.u.7 ` k 2+<.<.g.K.H.7 g.y I.S A+F G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+G.G C+3.. b+l l A.l &+. 3.. =.u D . C+F.p+e+e+e+_+. q !.f+T.3.s l e+e+e+e+e+l e+l X.3.3.B _+l l e+e+l A.!.e F.< e+e+A.D X.G D l l e+l A.D G e p < e+l l l e+] 1.s+X.D A.l l < X.X.n+A.A.A.D G G 1.A.x.w.< D &.. C.D+l l e+, F.s+X., l e+e+G.A.1.e F.< l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+j+j+j+| /+q.q.q.A A . . . .@+ .5+f.V X X (+o X L.L.j.(+j.(+o o o (+(+o (+(+Y (+(+Y Y 9.V.$+*+q+q+$+q+N.$+q+W t W ,.,.a+a+-+w+w+. . . . . . . . . . . w+w+. . . . . . . . . . . . . . . . . . . ",
+"p+p+l F Y. +F+K.` H.4.y K.Y.Y. +K.Y.}+ + .s.i O 1+O.O.z.^.]+i K.$ <+W.s..+* ^+g.l+l+7 / z.7 g.0 6.M y <. +s.$.o.0 y Y.s.- - - {+W.g.4./ h 2+7 2.<. + +i K.E <.# +.y 4 e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+X.B . b+. 1.u G.l 5+3.;+3.=.G.D . 5 F.e+e+e+G._+. ;.u < ;+. C.G.e+e+e+e+e+l u l _ 3._+B B 1.l l A.< C.h.f 3.d w.l F.;+3.3.&.e A.A.x.;.h.B 3.C+5+!.A.l A.p =.C+3.B e.Q.x.l D B h.a A.] C.:.3.3.B m.d 3.f+;+3.. B d ] l E+;+C+3.3.;+s+A.l ] ;.C+3.B _ ] e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+9.j+j+j+M.| /+q.q.7+A A A f.f.q.X X o (+X L.L.L.j.(+(+(+(+j.Y (+(+Y (+Y (+Y Y V.$+q+q+~+v.t R.t R.q+q+q+q+R.W W W ,.,.a+a+a+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+"l l l ( g.b s.s. +W.i .+.Y.g +K.F 9+#+ +Z W.S 1+O.1+H.H.).C 0 y *.2+6.6.B.<.l+7 z./ S 0.` H.w ( {+K. +9++.u.K.9+J +H W..+* * y k ` k O 2.7 B+B+F y +.A+<+ +2+g.w G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+G.G B . %.3.Q.p+u D C+'.m.. _+u D . C+F.e+e+e+e+_+. 5+f+Q.h.h.X.A.e+e+e+e+l G.l D h.. X.v . m.l l G+X.C+B =.T.B C.] =.3.~ ;+B b+n+< _ B h.d v &.. ;+D A.p &.B e.u+=.C+B _ A.w.3.C+F.A.C.3.B ~ u+;+B B 3.E+v C+3.t.q < f+h.B =.u+> B B X.l s+B T.d h.B &+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+i+i+j+M.| | | q.A A A A f./+X X X X (+X X o (+(+(+j.j.(+j.(+j.9.Y Y |.9.V.$+~+q+q+t R.t q+v.y.t R.t t R.W t ,.,.a+a+w+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+"e+A.l %+b %+J b y +.2+W.K.g.g K.) g+Z (.G Q o.S b.O.l+O.B+b }+Y. +B+I./ O z.l+/ / n S l+g.c i Y.( C %+s.c c u.u.# +y c Y.^.s.).).A+^.u.2+z.<.7 g.2+u.y +^.H.7 *.K.4 e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+G C+. p t.'.< l %.B C.;.3.=.e+w.. h.F.e+e+e+l _+. . 3.B 3.u+x.l e+e+e+e+e+e+G.C.3.e.A.f+. t.D A.u #.3.'., G #.s+D t.. s+w.$.0+] E+B C+s+< p+p &.. Q.A._ 3.;+D l A.C.'.;+F.w.3.C+X.p t.B a.] u ] ;.3.B f+l ;+3.%.l ] '.3.q A.l A.C.3.=.A.;.3.~ < E+#.~.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+j+9.j+| /+/+q.| q.q.q.q.| X (+(+(+j.L.(+(+X j.(+Y Y 9.9.~+~+*+~+*+~+*+q+~+y.t v.v.t t t t W t v.t t W t t ,.a+a+a+a+a+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+"p+p+G+C b J o.b s.Y.^.K.^.y ^.K.J b ).r+a T W.H.O.1+b./ 2+B.d+( s.k z.z.l+O.O.1+b.z.K A+F 0 /.}.g+( a 9+i B+k k 2+K.Y.w g.*.B+^.%+/.K.y <.S H.l+*.H.y +.6.+. +B+B+ +4 e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+p+G B 3.] d . G l ~ f F.Q.. _+G.D . C+F.e+e+l e+=.. 3 '.&.C+B m.< e+e+e+e+e+l ] '.3.v F.G B 3.%.G.A.X.C+B d &+D l , =.3.;+a.F.] l u+. _ A.p+u p+#.3.'., B B f+u l l G+D D ] w.. h.F.&+3.&.D l A.u w.&.. f+G.'.. #.l G B . s &+E+E+&+3.B !.f+3.T.u+f+D u e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+$+i+*+i+i+i+i+j+i+j+j+Y L.9.j.L.(+(+(+L.L.Y L.j.~+$+y.v.v.t v.v.~+v.v.t t t t t t t ,.,.a+W t W ,.,.t a+a+a+a+3.w+. . . . . . . . . . . . . . -+W . . . . . . . . . . . . . . . . . . . . . . . ",
+"G.A.l p. +) d.$.W.E E + +i ^.W.{+g+( T 1 y+!+g.0.O.O.<.c Y.Z %+K./ l+1+O.l+5.n O z.% 6.E b Z ).d+F $.}+}+g.g 2+g.g.y y 2+H.*.]+K.9+9+K. +g.B+l+l+g.g.K.s.+.y k ]+b G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+p+X.f w+, f+3.q p 3.b+< ;.. =.e+D . 5 8+u e+e+e+_+w+q D w.C.5 h.1.e+e+e+e+l u s+3.. 3.w+B 3.. b+< G+< #.&.3.3.&.s+A.F.=.C+3.h.;.] b+3.C.A.p+u l e f 3.1.B f ,+l l G.l u G+G.w.. C+a a.. ~ l G.p+G.A.~ . f+G.;+. $.l &+. 3.B 3.3.. B 3.f e ] ;.[.3.3.;+a e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+i+9.~+~+~+i+~+i+$+~+$+Y o (+(+(+V V =.h+h+> 6+f.V.*+v.,.,.a+a+,.y.v.t t v.t t t ,.,.a+a+a+t q+t t -+R.W ,.w+-+B B W 3.W w+w+. . . w+w+w+w+-+-+R.b+-+. . . . . . . . . . . . . . . . . 3.. . . . ",
+"p+e+l Q n.) C.$.}.w K.0 +<.Y.{+A+) g A+Q 1 T .+y B+]+6.c g+9+2+` O.l+l+/ O.7 7 2.*.c y b g+g+}.$.$.{+J 3+r+n.Y.) W.W.y <.*.*.]++.3+).%+u. +H.B+k 7 z.u.y 6./.u.*. +4 e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+G.G B . < n+h.h.a.w+#.l Q.. _+u D . C+F.e+e+l e+=.. ;.l l D e.3.e e+e+e+e+e+A._+3.:.;+;+;+;+B 3.s+A.l l !.s ;+3.=.] G+x.s+u+C+C+X.d . _ A.l l u s B [.D C+. s+l u A.l x.x.< - 3.h.F.%.3.;+, A.A.l D '.. s+u '.. #.p+s+B 3.u+;.m.m.q m.q p < A.1.%.&.3.5+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+*+i+~+i+$+*+i+9.$+i+9.L.L.L.;+L.(+(+(+o o Y o 7+~+*+v.,.,.,.,.t y.v.t t v.v.t t a+,.a+a+a+t $+R.v.t ~+h.C+t B C+q+R.R.[.:.h.B C+B 3.B C+R.'.:.m+h+:.N.N.m+N.R.N.R.q+:.R.N.[.3.q+R.N.W R.-+R.[.:.",
+"p+p+u r+!+Q a.&+Q 0 Y.y K.i Y.{.A+{+c H W.%+p.Q y 0.w A+s.9+C k l+O./ / l+/ / 4.l+*.>.K.}.$.$.C %+!+9+g+o+a w.1 {.W.H.]+<+w *.*.i A+{+F F y <.].H.I.z.E 0 +.K k *.K.G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+X.B . , l _ 3.h.C+p l Q.. =.p+w.w+h.e , , , e+=.w+m.x.D s B f ,+e+e+e+e+l 1.h.. &+x.D n+D _+. u+A.a._+a.l s 3.;+E+_+u+w.p &.B s+s 3.T.X.l A.!.;+. q A.d 3.=.D l l f+b+~ ~.D . C+F.F.C+B C.< l < C.3.. f+l ;+. %.l D e.3.#.] A.A.&+;.a.] q _+s A.a.3.b+G.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+i+i+i+i+Y Y j.j.Y j.j.(+L.L.L.Y L.L.Y Y L.Y (+L.~+$+v.v.v.t t v.y.v.t t t t ,.,.a+a+a+a+a+a+t t a+a+a+a+3.a+a+a+. w+w+w+. . . . . w+w+. . . w+W N.-+w+. . w+3.-+-+-+w+-+N.V.w+w+-+W -+B -+-+W B ",
+"l l l X.).E+!+( C .+( [ k ]+Y.F n.y [ H W.Y.y y A+/.{+%+).g.I.7 1+5./ / 4.` ` 4.*.B+*.x+W.( { Z b ( p.C $.p w.n+T {.H.*. +s. +^.*.^.g.H.H.H.<.H.z.g.$ g.c g.c ` Z.K.4 e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+G.G.p+G B 3.:+l s+. 3.=.G.l ;.. d u w.3.3.'.;+;+d x._+3.:.;+'.3.3._ A.e+e+e+e+G.m.. t.] e+G.e+G.f+3.C+1.#.3.h.u+;+3._ p e.C+_+v B '.p ] 5+3.[._ q '.. ;+1.A.F.&.C+;+;._ T.3.u+< w.3.h.a < ;.3.h.d m.d C+C+3.s+l ;+3.#.l l #.C+B _+;.u+C+3.C.l ;.3.I m.&.3.a.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+i+i+9.j+M.j.X X /+q.X V o (+(+(+L.Y L.L.(+L.j.Y j+Y i+i+~+~+*+~+*+$+~+y.y.y.t t t t ,.a+t ,.t W -+a+,.a+a+a+. . a+. . . . . . . . . . . . . . w+-+. . . . . . . . . . . . w+. . . w+. . . . . . ",
+"u l u X.g+( !+%+1 C T !+E H E {+}.c J c [ A+g g.y s.{.F ^.` k / O.l+l+l+l+4.` H. + +g.H.) W.w 3+) 4+$.( !+p w.a C %+w K.B.A+F .i *.x+*.*.7 g.L g.l+k ` ]+x+4.` 4.K.G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+u G.l G B B n+G.] h.B s l l ;.B =.l w.. 3.. 3.. '.D d 3.3.. C+&.m.D A.u e+e+e+x.t.3.C.u G.e+u u , t.3.Q.D _ C+3.C+=.!.A.s :.3.B e.&+< G.D _ h.3.. B =.1.A.l l X.=.3.3.3.3 q D l D 3.h.X.A., m.h.3.3.f u+d 3.f+l ;+3.#.A.l , 0+'.3.3.3.t.a.< l w._+3.3.B 5+D e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+i+i+i+9.j+j+j.X X q.q.q.q.X X L.L.L.L.L.(+L.L.Y Y 9.Y j+j+Y 9.i+9.*+*+i+$+~+v.v.t t t t t W t ,.t B W ,.,.a+w+. . . . . . . . . . . . . . . . . . . . . . w+. . . . . . . . . . . . . . . . . . ",
+"p+e+u D $.{ n.F (.p.T - ).K.`.M {.) i Y.D.K.c D.^.x+i i ]+` l+n O.l+l+` 4.z.i +. +K.g D.J s.b { b b F ).!+T p.{ .+- %+<+2+]+E s.s.K.]+*.k *.7 2.z.Z.2.g.^.]+4.` ]+W.G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+p+G.p+, F.F.l l l p F.] l A.w.F.,+u < F.F.F.F.F.1.A.p F.F.1.F.w.A.A.A.p+e+e+e+< F.F.x.e+e+e+G.l A.p F.1.l , G &+s+x.A.A.A.1.E+E+,+A.l A.G+] F.f+E+F., l A.l l u n+X.&+&+8+A.A.l < F.F.] l < < 1.f+&+X., w.F., l 1.F.D l A.l l D s+&+E+p < A.A.A.:+e &+G ] l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+i+i+i+i+j+j.| X X | q.q.q.q.q.X | (+L.Y Y 9.9.9.i+Y 9.Y 9.Y |.Y Y 9.9.Y 9.9.i+*+*+y.y.v.t ,.,.,.W R.t q+B ,.3.a+w+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+"e+l l , p $.b 3+( C p.- - /.b {.K.Y.g.H D.[ ]+W.i x+*.N *.7 / l+l+l+/ ` ^.K.0 .+s.Y.K.) w b ( ( g+{+F <+M +Y.`.{.B.y c ]+c. +{+* r+J H.B+]+2.k <.2.)+<.).+.]+4.]+W.G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+u G.l A.l A.u A.l u A.A.l u u l u l u l u u G.l l u l l u u l l l l e+e+e+e+u u l l G.e+p+e+l A.A.G.l A.A.l A.l l l < l A.A.G.l l l l l l < A.l u G.l l A.A.p+G.l l u l l l l l G.l G+l A.G+l G.p+l l l G+l l u l u A.l A.l G.A.p+l l A.G+l l G+A.l A.l l G.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+i+i+i+j+j+j+M.X q.`.q.`.q.8.A f.5+f.X L.L.Y r j+i+9.i+Y i+i+Y Y j.Y 9.j+9.9.9.9.9.i+*+$+$+~+y.R.t R.v.R.v.B a+a+3.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+"e+l l D D a 3+n.!+E+a p - r+#.}.W.c ) D.g.u.)+<+{+Y.x+x+l+` l+l+l+4.k K.g.n.Q G M F ( %+( (.r+r+!+).0 H.} *.g 9+{+b ) g.K.W.{+G - * * /.g.]+B+z.z.]+0.c I.{.^.]+*.Y.G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+l e+A.u l l l G.l A.l l l l l A.l l u l u G.l l l A.l l A.l l A.l l l l l G.l G.l l l A.l l l l l l l l l A.l l l l l l < l l l l G.l l l l u l l p+l l l u G.l l G.l p+l u G.G+l l G.A.l A.G.l l G.l l l p+l l l l A.G.l u A.l p+l l l l l l l A.l l l l e+e+l l e+l l e+l e+l e+l e+l e+e+l l l l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+i+i+j+i+j+Y M.| q.q.A A A .c.c.#+o.c.V (+j+9.Y j+Y Y 9.i+9.|.i+9.Y |.9.9.j+L.r r 9.9.9.9.*+9.*+~+h.v.h.h.v.3.. w+w+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+"l u u G 1.p a E+E+}.( T p p {.q J ) +c l+O.+ H.+.J j+x+l+)+4.)+2.k g.W.M r+* }.u+3+}.3+b 3+}.(.!+n.c g c +{.M y W.J %+A+!+^+r+T G r+r+).<.)+*.)+)+H.D.H A+%+^.*.) 4 e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+G.l p+u x.&+u+Q.p A.A.u A.A.A.l u l < l l G.l l < l A.l A.e G F.E+D s , A.u A.l l l e+l A.A.l l A.X.E+l A.A.A.A.A.l l G.p+!.f+n+s , < l l l l G.l l l l G.l l u p+l l u l l l A.A.] &+D l l A.l l l l A.l l l l p &+< A.A.l &+1.l l l l A.A.A.l A.E+1.l l l l A.l l l l l l e+l e+l l A.s+F.l A.l x.#.< l l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+i+i+i+i+M.X X X q.q.8.@+c.#+J o+o.4+Q.#+ .o L.j.9.r Y 9.|.9.i+*+*+9.i+9.|.9.9.L.Y r r r r Y Y Y 9.|.*+$+q+q+t B B 3.a+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+"G.l p+1.8+D !.p p.n.m.{ Q - ( v 8.[ M w O.2.]+u.{+u.*.` / l+l+Z.]+g c F !+p.r+3+{.3+_ }.1 r+G C }.) {./.!+.+/.F }.M C C 1 * T r+T Q 1 !+!+/.K.4.; Z.x+; *.) Q /.W.{.G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+p+G.l w._+d f+_+&., A.] D l A.A.p+x., A.A.x.] A.u l A.G+A._ %.C.m.D &+< A., x.G.l l , ] l A.l G.1.'.s+l ] D l l G+l ] < l %._ F.~ 1.n+A.l l , n+l A.u l l l , ] A.l l :+D l , n+A.D ;+1.D A.u l A.D ] G.A.A.n+@.s u+A.A.D < ;+X.l ] D A.l l < D x.> e l l A.A.< A.A.l A.A.< x.A.l l l ] ~ f+A.] D F.'.< l G.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+i+i+i+j+j.X q.q.A .#+Z Z o.o.z+o.o+Z o+#+c+A (+j.Y 9.Y |.|.|.*+i+r 9.|.9.i+9.Y 9.Y 9.r 9.|.9.Y |.Y 9.9.|.|.*+~+t 3.3.w+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+"l l l D !.!.- p p C }.}.3+C p F g `.) ).M w H D.H.B+z./ l+l+)+*.]+c %+)./.!+( 3+(.E+p.p.T G !+(._ 3+p.1 1 !+n.( C p.(.n.(.G T p.r+!+(.E+!+C M w H.H.} x+D.Y.s.%+).!+G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+u l l ;.q , l < G x.&+;+;+_ < Q.=.b+> n+s+;+> 1.u+1.x.d a ~ a.:.e.#.Q.&+b+> ;+1.] _ ;+b+=.G A.A.=.C+s+%.~ ;+Q.] _ ~ s+l 1.[.e.a.:.> '.X., C.b+;+#.A.l l w._ ~ '.X.D '._+'._ ~ ;+&+F.h.=.;+u+] 1._ ~ b+a ] a.b+;+;+#.!.d ~ > h.D E+b+;+u+A.p =.~ =.e.!.l x.d a f+_ n+5+X.s+~ ;+_ x.#.~ a.e.1.E+;+b+~ u+A.e+l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+i+i+j+| q.A .c.#+Z d+(.S.d.z+Z z+z+z+4+c.b c. .q.| r L.r 9.r 9.|.9.9.9.|.|.|.9.&.|.|.9.r 9.Y L.9.Y Y r 9.9.|.&.*+~+h.a+w+w+w+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+"e+u G.n+!.p !.T G 1 a.s+{ v !+p (.v [ n.T p.w i B+/ O.O.l+l+4.*.8.J p.M ( n.++v (.a 1.T s+&+s+s (.s+p.(.(.p.Q (.M ( E+(.$.s+!+s+p.C %+1 E+(.%+{+F {.D.]+g 0 A+I.g b G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+p+G.x.e.1.A.A.l l X.'.1.p [.G > a.1.&.G _+m.s X.=.D 1.b+G ;+X.'.G q a._ u+D b+s a._ D E+B ,+u l _ a.E+~ 1.a '.G ~ %.] l , ~ E+a._+w.d a.s =.X.s+&.D A.A.u+q F.#.> G &.D C.'.w.;.5+s b+1.F.;+s+d Q.F.Q.u+s =.p 1.&.s+=.#.D #.;+X.&.e F.&.s+~ C.D %.e.l u < =.v+> =.v+v X.b+X.p ;+s+_+;.X.;+s+;+X.n+=.a.e+l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+i+j+q.A 5+@+v+~.F.X.f+..F+e f+j z+o.C.s o.#+c.@+u+ .7+o X L.9.|.9.9.|.&.i+e.|.i+|.9.*+;+9.|.|.|.9.'.9.|.9.|.|.|.|.|.*+C+,.a+3.w+w+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+"e+u u n+p p 1.p s+C.( G p.a.b s+p E+{ !+T T Q W.D.2.O.1+b.z.8.+.F n.(.{ m.J [ { r+a a E+E+C.Q.G 1.G E+s ( E+W.g ) { ( &+(.s ( (.E+}.n.!+1 ( A+F W.g.H H 9 g w y D.K.l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+u D [.1.A.A.x.D ;.C.A.] '.s+e.D D ;+D s+b+_+e ~ l e =.G ~ F.;+!.=.s+~ G A.~ G '.F.l F.5 A.l < > f+u+%.p+D '.f+;+n+G.l w.b+1.d &+G.d f+b+&.~ ~ ~ , l p C+b+~ b+_ C._ < a.Q.A.m.Q.m.C.G.n+~ %.C+b+~ b+;.=.s G., '.E+;+D A.&+_ q I ~ > ;+E+:.] l s+d l l G.q =.q ~ ~ F.a.m.A.< ~ f+;+F.s+=.C.q l A.v f+u e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+V @+o.v+~.,+x.:+:+:+R ,+~.@.@.e %.4+#.e C.Z o.#+o+;.#+c.u+7+L.Y Y Y 9.i+*+i+&.9.9.r |.9.L.9.&.*+*+*+|.*+*+*+*+*+|.|.9.|.&.$+h.B 3.w+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+"p+G.G.G s+T 1.a p.}.q Q.#.p.n.3+a p T a T p.r+/.) c c w 0. +).1 %+Q (.(.n.J }.p.a r+n.;.&+{ ( E+}.n.E+( ( {.g H H ) }.{ n.}.m.J }.{ C C s.b b w ++9 H + ; ; } + H b G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+A.p+G.d u+1.s+'.&+a.b+p a.=.1.e.A.1.;+X.u+s '.&+;+F._+_ v+v e =.w.'.X.'.w., &.x.'.C.1.=.> l l < [.1.q d 1.m.u+G ;+A.A.l F.;+!.~ F., ~ 1.=._ X.a.f+l A.D :.s s+m.p _ #.A.5+s < =.s d =.1.a.=.F.&.s s+;.!.u+u+1.Q.b+X.[.&+F.b+a.Q.=.F.#.#.w.C+&+1.;+a.G.l u s e.1.~ m.A.%.b+X.#.=.X.~ D #.m.$.b+~.f+C+p p+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+&+v+e D+:+:+:+:+:+] ] :+< :+] @.X.v+C.d.%.s s S.%.C.o.o+o+;.@+V ~ r |.I y.$+*+e.i+*+$+N &.i+$+y.I y.$+t.y.$+~+y.$+*+;+r *+*+*+T.h.3.-+-+-+. . . . . . . . . . . . . . . . . . . . . . . . . . . ",
+"G.l G+n._ }.(.s+(.n.m.[ _ J n.}.p.T a 1.a G a 1 p.!+w W.9+)..+!+Q !+) g ) !+(.( !+n.[ 3+1 &+q [ J { J b }.g + 9 H g W.b { {.[ J {.{.{.D.} + H } z ^ ! ! ^ ; } ' ! v G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+u l l w._ ~ d s+< < _ ~ m.x.G a.A.X.C.D d _+G w.=.=._ s+s &+p.#.p ;.X.;., w.;.A.G ~ _+=.a.G.u n+_ < D u+~ Q.x.s+#.G.A.G.G a.D ;.D D ;.D 1.d ~ Q., G.l l f+=.=.s < ;.a < ;.1., m.X.m.m.~ _ w.< s ~ =.s+< F._+> _ a.< %.;+_ u+X.] _ ~ q w.l %.~ v _ G l G.l F.C.< C.p l , ;.> ;.w.F.a.:+#.f+D _ ~ q u+] l l l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+,+F.,+:+:+:+:+:+:+:+:+:+< :+:+:+@.8+f+%.j s >+..>+6 0+j j j o+_ u+_+X r *+I i+i+e.*+~+$+*+*+z ~+$+P y.P y.y.5 y.9.o 5+r |.e.i+$+I y.h.R.B 3.. . . . . . . . . . . . . . . . . . . . . . . . . . ",
+"l G.G.a.++[ ) J J q [ [ [ [ ) ( T a r+G a a n.}.r+n.W.y w M .+p.p.( H H n.n.w w w ) ) w {.[ [ J w ) g w +++ + + + H ++c [ [ H g g 9 ' } } } ; m ' ! : ^ ^ } 9 ; ; Y.u e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+G.G.G.l < l G.G.G.A.< G.G.l l u G.l G.A.A.l G.A.A.< l p+A.p+l p+l G.p+l l l 1.e.a.;.~ !.A.G.p+A.G.l l < l G.l p+l G.l p+l l l l l l G.G.A.] l G.u l u G.< ] l G.< p+G.A.G.l l G+l A.< G.l l l A.A.l G.l A.A.A.l l G+A.A.< G.l A.< A.G.l G.< A.l p+e+e+u G.l l l l G.l A.< A.l l A.u l l G.l A.A.A.u e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+R R @.@.@.@.@.@.@.:+:+:+:+:+:+:+:+@.8+>+C...=+i.i.>+i.=+6 C.o+#+m.c+7+X j+9.r i+i+$+$+I $+i+$+y.y.y.y.y.y.y.y.I *+(+~ |.~+~+$+$+~+*+> ;+*+v.w+. . . . . . . . . . . . . . . . . . . . . . . . . ",
+"G.G.G.3+`.++++v [ ++[ [ [ [ J !+r+1 ( C E+}.) 3+}.++++H [ 0 ( M 0 w H ++w D.++++H ) [ g H H H H >.+ } H + ; ; ; + + + + ; } ; m m z ! ' ; ; ; ^ ^ P : ^ P N z m N ) G.G.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+G.G.G.G.l u G.l l u l G.G.G.l u u A.l G.u l G.l G.G.G.p+G.u l G.G.G.G.G.G.X.a.C.n+l l l G.A.G.l G.G.G.G.G.u G.G.G.G.G.G.G.G.G.u G.G.u u u G.G.G.e+l G.l l G.u l G.l G.G.l G.l G.G.u G.u l l G.G.u G.l l G.l G.G.G.l G.l G.G.l G.G.u G.G.p+G.G.e+e+G.u G.G.G.G.u G.u G.u u u G.G.G.G.u l G.G.p+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+@.R @.@.@.@.@.@.@.@.:+:+:+:+:+x.:+:+@.R X.x ~.i.i.i.=+x =+E.4+c+z+;. .f.A q.~ j.j+r j+9.9.i+r i+i+i+M.j.i+y.~+i+|.9.r |.i+9.9.i+9.L.6+6+b+9.*+$+:.,.. . . . . . . . . . . . . . . . . . . . . . ",
+"u G.G.;.>.++g ++[ ++++++++[ ++{.M }.{.{.{.) ++++++D.+++ 2.D.++++H + H + H + + + } g H 9 9 } H 9 ; ; ' ; ; ; ' ; + + + ; ' ; ; ' ; ! ! ' ' ; ; ! ^ : : : P 5 f f 5 _+u e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+G.e+G.G.G.G.G.p+G.l p+e+G.G.G.G.l G.l l u l l G.u G.G.p+G.u e+e+e+G.l < l l p+G.l l l G.G.G.G.u G.l u G.u e+e+u G.l G.e+G.e+p+u G.p+e+p+e+A.u G.l G.G.G.G.G.u l l G.G.l u l l l l G.G.G.l G.G.G.u G.l l l l G.l l l G.G.G.l G.e+G.p+e+u e+e+e+e+e+u l G.e+G.u G.l G.G.e+p+e+p+e+p+G.e+e+u e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+R R R R R R @.@.@.@.@.@.@.@.@.@.@.@.@.!.,+,+x i...6 i.=+i.0+4+#+q c.f.A A q./+`.q.X X X q.q.X q.7+ .o+c+6+o L.9.Y (+L.(+r (+o (+~ o 7+6+> (+9.'.|.T.,.w+a+a+. . . . . . . . . . . . . . . . . . ",
+"G.G.G.;.I >.++g ++++++g ++D.H D.2.D.H D.g 9 } H + + + + + ; ; ' ! ' ; ; ; } ; m ; m m m ! ^ ' ' ! ! ! ' ; ; ; ; ; ; ; ; ' ' } ' ; ^ ! ' m N } ^ : : : P f 3.B f f =.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+p+p+e+e+G.e+G.p+G.l e+p+e+G.e+e+p+u e+e+l e+u p+l l l l G.G.l e+e+l e+e+e+e+e+e+l e+e+e+e+e+e+p+e+e+e+e+e+G.e+e+e+e+e+e+e+e+e+p+e+G.u G.G.e+e+G.e+e+G.e+e+e+e+e+e+e+e+G.u G.G.G.G.G.u G.G.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+G.e+e+e+e+l u e+u e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+!.!.w.R R R R R R R R @.R @.@.R @.@.D R R R ,+i..._.>+>+i.%.a.#+c. .E f. .E A .A .v .5+@+u+@+#+j ..s j l.l.o 6+d h+7+=.f.d h+A _+6+5+> > o (+(+'.y.t B t ,.,.w+w+. . . . . . . . . . . . . . ",
+"G+G+l { I I g H H g `.++H } ; ; + ; 2.H ' } ; ; ; ; + ; ; ; ' ' m ! ! m z 3 : 3 3 : P P P : ^ ! ! ' ' ; ; + ; ' ^ 3 3 ! ! ' + } } ' ; ' ' } } ' ! z ^ P 5 f f B 3.=.l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+G.G.G.e+G.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+!.,+,+,+!.!.!.R !.R w.R D !.!.D w.R R D R D R i.6 2 E.6 >+2 a.c. . .f.f.f. .f.A .@+z+4+4+j Q.z+2 6 e r.E.j 8 c+k+c+@+d 7+6+5+5+l.6+V 6+h+h+6+> (+Y *+~+y.v.v.t ,.B ,.3.3.w+. . . . . . . . . . ",
+"G+G+l 3+N f N H } N b+>.3 5 z 3 ^ ! ; m P I f : ! ; } ' ' m ! ^ z ! : : 3 5 f 5 5 5 3 P 3 3 3 : ! ' ' ; ' ; } m P f 3 ^ 5 3 >.H ' ; ' } ' } } ^ I z I 3 5 5 C+f B =.A.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+,+,+,+,+,+,+,+!.!.!.!.!.!.R !.!.!.!.!.!.!.!.!.=+..C.2 0+6 Q.Q.@+ .f.f.A . . .f. .z+r.f+F+f+f+r.f+e x ~.e f+6 %.o+Q.#+u+5+6+6+l.5+6+=.7+=.h+h+(+(+Y |.y.y.v.t v.,.t ,.B h.B 3.. . . . . . . . . ",
+"G+l G+E+a.3+3+}.{ { { Q.m.;.;.;.;.;.3+Q.;.;.m.;.3+3+{.{ Q.{ Q.3+{ Q.{ 3+;.;.J J ;.J J ;.;.3+3+{.{.{ {.{ {.}.}.{ { 3+a.}.a.3+}.n.{ }.{ }.{ }.{ 3+3+{ Q.3+3+;.;.;.;.#.l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+,+y+,+,+,+,+,+,+,+!.!.!.!.!.,+!.!.p !.!.!.!.!.~.i.C.Q.2 0+j Q.q @+ .@+ . .@+@+@+c.%.e e X.X.X.X.~.8+,+,+x ~.e >+0+0+4+c+u+@+@+c+l.5+=.o h+6+k+> (+b+L.*+$+y.~+y.y.y.y.y.e.$+:.B B B . . . . . . ",
+"u G.G+G+G+G.G+4 4 G.G.G.p+p+G.G.G.G.G.l p+G.G.G.G.G.G.G+p+G.G.p+G.G.G.u G.G.G.G.G.G.G.G+G.u G.G.G+G+G+G.G.G.G.G.G.G+G.G.G.G.G.l G+G+G.4 G+G.G+G.G.u p+G.u u G.l p+p+A.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+F.F.F.8+y+1.1.1.1.8+,+,+1.,+,+1.,+,+8+,+,+,+,+F.i.%.a.0+0+j j ;.#+q #+#+#+3+z+o.C.s+X.~.=+~.~.8+8+8+,+,+8+8+~.e ..f+s C.z+Q.#+8 l.f.V h+h+6+l.h+(+> L.|.$+y.~+$+~+~+T.~+9.V.V.N.[.:.R.w+. . . . ",
+"G.G+G.G.G.G+G.G+G.G+u u G.G.G.u u G.u G.G.u u u u G+G.G.u u G.u G.G.u G.G.G.u u G.G.G.G.G.G.G.G.G.G.G.G.p+G.G.G.G.G.u G.G.G.l G.G.G.G.G.G.G.G.G.G.G.e+G.e+e+e+p+G.p+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+~.~.~.F.F.F.8+8+8+1.8+8+,+1.1.,+8+1.,+1.1.1.,+F.G 0+C.2 2 j j 4+o+o.Q.z+Q.C.C.2 s =+F.F.8+,+8+8+8+,+8+8+8+8+F.~.e e v+%.C.4+8 ;.8 l.V > h+6+k+> > (+(+9.|.*+*+*+|.*+~+|.(+6+> h+(+m+[.C+w+. . . ",
+"G.G.u u G.G.G.G.G.G.G.G.u u u G.u G.u u u u u u u G+G+u u u u u u e+u u e+e+e+e+e+e+e+e+e+e+e+G.G.G.G.G.G.G.e+e+e+e+G.G.p+G.G.G.G.G.G.G.G.e+e+p+e+e+e+e+e+e+e+p+e+p+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+~.X.X.~.~.~.~.F.F.8+F.F.F.8+F.8+8+F.8+8+8+8+8+~.G 6 %.0+E.%.%.j j z+a.C.d.%.s %.r.X.~.F.~.F.F.F.F.F.F.F.F.~.F.F.X.e f+r.v+0+2 j Q.l.5+h+6+6+h+> > > (+b+'.|.*+|.Y |.N.9.> k+k+l.l.l.l.N.w+3.. . ",
+"e+u u G.G.u u u u u u u e+G.e+e+e+e+e+G.e+G.G.G.G.G.G.u G.u e+e+e+u e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+u e+e+e+e+e+u u e+G.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+G X.e e G G G X.X.X.X.~.~.~.F.a ~.F.F.F.F.F.F.X.e &+6 ....v+E.%.2 C.0+E.s r.r.r.e ~.F.~.~.F.~.F.~.~.~.~.~.~.X.X.e e e s+f+E+v+%.C.o+c+c+_ l.l.k+6+> > h+(+Y (+m+o o (+> k+8 8 8 k+k+h+m+q+h.C+C+",
+"e+e+u u u u G.G.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+u u e+e+e+u u u u u u e+e+e+G.u u u u G.e+e+e+e+e+u u u u e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+",
+"e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+u e+e+e+e+e+e+G.e+G.G.e+e+G.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+
e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+"};
+#else
+/* XPM */
+static char * banner_xpm[] = {
+"640 64 89 1",
+" c None",
+". c #030304",
+"+ c #0E3833",
+"@ c #075A83",
+"# c #32728A",
+"$ c #628E9A",
+"% c #8AA9B4",
+"& c #A4BCC4",
+"* c #AECEDE",
+"= c #CEE2E2",
+"- c #3A565A",
+"; c #063243",
+"> c #1A3A2E",
+", c #E5E6E9",
+"' c #062418",
+") c #ECEAEB",
+"! c #69787A",
+"~ c #48656C",
+"{ c #EEEEF2",
+"] c #021E12",
+"^ c #363636",
+"/ c #86959C",
+"( c #021A12",
+"_ c #F2F2F6",
+": c #083D48",
+"< c #345057",
+"[ c #0A2E22",
+"} c #A4AAAC",
+"| c #F6F6F6",
+"1 c #0E2E26",
+"2 c #74727B",
+"3 c #104555",
+"4 c #5B5C62",
+"5 c #16121C",
+"6 c #EEFEFE",
+"7 c #BABABC",
+"8 c #324A36",
+"9 c #0E251D",
+"0 c #084976",
+"a c #797A86",
+"b c #100E16",
+"c c #526A6E",
+"d c #BED1D3",
+"e c #958C98",
+"f c #2A2F2D",
+"g c #B9ADAE",
+"h c #CAC4C4",
+"i c #9B9AA0",
+"j c #204244",
+"k c #FBFAFB",
+"l c #40423E",
+"m c #0E0A1E",
+"n c #48515B",
+"o c #85828F",
+"p c #312E41",
+"q c #222222",
+"r c #F6FEFE",
+"s c #D2D2D3",
+"t c #3B3A56",
+"u c #527783",
+"v c #44405A",
+"w c #67646E",
+"x c #0A6389",
+"y c #22627A",
+"z c #A1B6B9",
+"A c #211E26",
+"B c #DDDADF",
+"C c #181820",
+"D c #23243B",
+"E c #6696A2",
+"F c #254E5A",
+"G c #376373",
+"H c #554755",
+"I c #0E060E",
+"J c #FEFEF6",
+"K c #2D3055",
+"L c #748D93",
+"M c #06507C",
+"N c #62828F",
+"O c #0A0A0E",
+"P c #585266",
+"Q c #FEFEFE",
+"R c #728489",
+"S c #332418",
+"T c #474855",
+"U c #B8C6C8",
+"V c #7798A6",
+"W c #686D76",
+"X c #E4E2E3",
+"rrQJJJJJJJJQQQQQQQQQQQQQQQQQQQQQQQQJJJJJJJJQJQJQJQJQJQJQJQJJJJJJJJJQQQQQQQQrrrrJQrrQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQXXXXXXXXXX,X,X,XXXXXXXXX,X,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,X,XXXXXXXXXXXBBBBBBBBBBBsBssshsshshsUhhU",
+"QQJQQQQQQQQQQQQQQQQQQQQQQQQQQrrQrrQrrQrrQrrrrrrrrrrrrrrrrrrrrQrrQrrQrrQrrQrQJJJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQX,,XXXX))),),),))))XX),),))))),,,)))))))))))))))))))))),),)))XXXXX,BB,,XBXBXBBBsBBBssBssssdssdsh",
+"QkQJQrrQrrQQQQQQQQQQrrQrrQrQQQQQQQQQrQQrQQJrrrrrrrrrrrrrrrrQrQQrQQrQQQQQQQQJJJJJQJJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQXX))))XX){{{){),),))){){),){){{{{{{){{{{){{{{{{{)){{{){{{{),{))),,,),X,,XXXX,B,BsB=BsBdBshshshsh",
+"QQJQrQQQQQrQJQJQJQJJQQQQQQQQkkkkkkkkkkkkkkkQQQQQQQQQQQQQQQQkkkkkkkkkkkkkkkkJJJJQQQJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ),),)){_,)),{){{)_{{{{{{{__{_{____{_{_{{_{{____{{{{{{_{{{{{_{))))))XX,X,XX=XXXBXXBBBBBBsssssdsss",
+"rQrkrrrrrrrrrQrrQrQrrrrrr6rrrrrrrQQQQQQQrrrrkkkkkkkkkkkkkkkJrrrQQQrrrrrrQQrrrrr66rkJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ)){{{,)_{_|{{{__{{{{________||___|_______|_____|______{_{__{{{{{{){),,,,XXXX,=XBXBBBsBBBBBsBssds",
+"|r|}RRRRRRRRRRRRLL$LL$LELLLEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEVLLE$%rQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ,{,{__{{_{______{_{_|__||_||_||_||||||||||||||||||||__|_|_____{_{{{{{{{,),,,,,,X,XXXBBsBBsssBsss",
+"k66L:3333333333333330030303000000000000M0000000000000000MMM0M0000M000000000M03000c|rQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ)_{{___{|_|||__||6)_|r||k||r|kk|kkkkkkkk|||k|k|k||||||||||||____|{{{{{{{)),,,X,X,X,XBXBBBBBBBBBB",
+"J6_$00030300M000000000000000000000000000M000MMMMMMMMMMMM00000M00000M0M00000M000MMu6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ_{{____|_||||kkkk|||k||kkJkkkkkkkkkkkkkkkkkkkkkk||kkk|k|||||k|_|_k__{{X,,,)))),,,,B,XXBBBBBBBBBs",
+"Qr6$0000000030000000000MMM0000MMMMMMM00M0MMMMMMMMMMMMMMMMMMM0MMMMMMMM0MMMMMM0MMMMu6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ____|__|||kk|kkkkkkkkrrkkJkrkkJkJJkJQJQJJQkJkQkQkkkkkkkkkkk|||||_|__sieoiiigg7hsXX,XXXXBXBBsBsBB",
+"kk6N00000000000000000MMM0MMMMM0M0M0M0@MMMMMMMMMMMMMMMMMMMMMM@M@MMMM00@MMMMMM@MMM0u6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ___|_|||kkkkkkkkrrrkrkkrQQJkJrkQkkQQrQkkkQQQQkQkQkkkkkkkkkkkkkk||k|)ooeeeeeeeeooooi7sBBBBXBBsBBB",
+"Jrk$0000000000M0000M0M0MMMM0MMMMMMMMM0M@MMMMMMMMMMMMMM@M@MMMMMMMMM@MMMMMMMMMMM@M0#kQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ___|||kkkkkrrrrkQkQkQQkkkQQQQQQQQQQQkrQQQQkrQQQkkkkkkQkkkkkkk||||_seaa22w2aeooe2eeeeeigggieaweg&",
+"kJ6N000000000M00MM0MMMMMMM0@MMM@M@M@M@MMMM@M@M@M@M@M@@M@M@@@@@@@@@M@@@@@M@M@M@M@Mu6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ|||||kkkkrQkkQQQQQQQQQJQQQrQQQkkrQQkQQQQkQQQQQQQQQQQQkQkkk|k||||_ia2222w22woo2o2geooeeeeoaoeo24v",
+"JJ6L0M0M000M0MMM0MM0MMMMM@MMMMMMMMM@M@@@@M@M@M@M@M@M@@M@@MMM@M@M@@@MMMM@M@@@M@MMMu6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ||kkkkkrkJQQJQQJQJQJQJQQJkBsBBh,ss)||kQQQQQQJQQJQQQJQJQQkJkkkkk)ge22o2wawwP22ww22wHwaghggeee4Pt5",
+"Jr6E000000MMMM0MMMMMM@@MM@M@@@@@@@@M@M@@@@@@@@M@@@M@@@@@@@@@@@@@@M@@@@@@@MM@@M@@@u6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ|||kkkkkQQQJQQQQQQJQQQQJkBie}}iieiiiih,X|rQQQQJQQQJQQQQJJkJkkkXgeoaoeawe2wPPHvHHHHtHweoeeee25mI.",
+"JJ6$MMM@MM0MMMMMMM@MMM@@M@M@MMMM@M@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@M@@@@@@@@M@M@u6rQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQkkkkQQQQQQQQJJQJQQQJQrrJQsiiig}ieo/eeiiig_QQJQQJQQQJQQQQJk|{X7oeo2a2ooe2w2wHHvvttvvHP2wP2eeHIII.",
+"Jk6EMMM0MM@MM@MM@MM@@@M@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@x@@@@@@@@@@@@@@@@@@F@y@@u6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ|kkQQQQQQJQQQQQQQQQQQJQkXhig7gieoaoooLoeohJJQQQQJQQQQQkkrkhea2weeeow2oeo222HvtvttttHwHPHHHAI....",
+"JJk$MM@MMMM@M@@MM@MMM@@@@@@@xx@@@@@@@@xx@@@@x@@@@@@@@x@x@xx@@xxx@@@@@@x@@xy#uE%$@u6rQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ|kkkQQQQQQQQQJQJQJQJQQQJshghhg}eLoaRoooooikrJJJQQQQJJQQ_}iiow22gee2w22owwPwPvttttttvPHPHS5II....",
+"Jk6VMM@M@M@@@@@@@@@@@@@@x@x@@@x@xx@xxxxx@xy##yyyyyy##@@@x@xx@x@xx@@@xx@x#%%%***&Nu6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJQQQQQQQQQQQQQQQJQQQQQQ_BgghhhgieoooooRoResBsXBX|JJJJJ)Bigiow2eeoePwo2owPwwHHvtttHvHHHt5I.......",
+"JQ6E@M@M@@M@@@@@@@@@@x@@@F#EVc@y@x@x@@xx@yEd*%%*&%%%&$yyx@@x@xx@x@xxx@y##%&%%*zVV/rQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQkJJJJJJJQQQQQJQQQJQJQQQ)hhhsXhgiooaNaooaaReeei/eis|JkB}eeie22oooeow2222wwPvttKtttvvtKCmII.......",
+"JrkEMx@@@@@@@@@@@@xxx@@x@uz*UU%N#Gxxxx@yy#Ed*=&&***&%%%NE#y@xxxxxx@@@xxyGu%U7%zz%&kQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJkQQQQQQJQQQQQQQQQJQJk|BhhBhB7g}LaaaRaNoaaaooLieeehho4PPHw2eeeo22w2ewwwwwwtttvtKKDAmIII.........",
+"Jr6V@@@@x@x@x@xx@@@x@xxyEddd*****%EuuGuuGN&z7d}%}&*&%%E%%%#y#xx@yxxFM+33~#u}s&e&&UrQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQkJJJJQQQQQQQQJQJQQJJJJ|BhhBBXhgeeeoaaaaaaaa2WWcwwwwPTvvHPvPPPw22o22e2w22oPtKDDDmmmmmI...........",
+"JkkE@x@@x@x@xxx@x@xxxMyu$&=U*}LV%%E%%E$~~ii}zUd}%*zzVVuE%#u##@F@#y3:;;jyGVNEz&%R&UkQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJJJQQQJQJQJQJQJQQJJkBXBBhBXBBsgoiio2W2w44PTTHTvvttvPvtttvvvHtHvtt222wHvHtDmmmmmmmII.............",
+"Jr6E@@@x@@xxx@xxx@@yGNNEER&X*d%VWNVENNG#~eLoiddU/&*%Nuc~VGGuy3;:3;;;:M~u--GuV%%c%}6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQkJJJJQQQQQQQQQQQQQ,h}ghhBhhBhgeeiiawPvvvtvvtvtttttKKKKKvvHHvKttpvtwwHHA5mmmmmmmmI...............",
+"kQkV@xxxxx@xxx@@@G#$z%VLVa~7,=7eVLV#FF~~N!L/a/zzV%*VF-RuLuy~G3:;;;::3yxF@-jjcVcFGVkQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQXsskQQJQJQJQQQQJkBggihhhhhgeeiioaPwvtvvtttKKttttKKKKKKKKvwePHpHvpHpKSDm5mmmmmII.................",
+"|J6E@xxxxxxxxxxx#%z%%%VaRu~L=B=sz}NGFnuVcNucWcoLLV%uF#/V%uc#GF:F+G:;;3yyj--y~LcFuRrQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ4e7BrQkJJrJJkkJ|s7}ggghggeeeeiowPPvtKtttvvtvvttKKKvtKtKKvtHHtvttp5S5S5mmmmmm..I.................",
+"k6_%xxxxxxxxxxy#VN%%%%VuRu~-/UX7z}NF~EoVNN!WuWLL!%$G-NuN%LN-3->3GG::0y#F0;FGccRa%irQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQvnw!oiBkk|,shX|7}eihgeo2eeoooPHvvPvvtttvvvvvTvttvvtKtttttttvvHK5S5555mmmmII....I................",
+"kr6Exxxxxxxxxx#EE$/%*}%N%--Guz==d*%uuNPNuacac!/&NL~30Gc$%VNF0GF:uF1F#F0;3;:-Fc%R/&kQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQKtnP4wWig7h77}giieigeao22wwHPHPttttvttttvttvvttvvvvHvvvvtvvK55AS55555mmmIII.....................",
+"kr6%xxx###yx##uNaV%%z*/#uGF3F~Vdd*EG#Gw/oRaLacPcGu~jF~uLLR!FjF#FGGFyFM:0F;3Fu~$%N}rQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQkQkQQQQQkQkkQQkQkkQkQQkkQQQQQQQQQQQQQQQkQkkQkQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQkQQQQQQQQQQkQQ|QkQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQttKTnP4wW2i7}iiiiiie2oa2PPvvtvtttvttKKtKtttvvvHvvHvvvvttKtp5555555mmmII.........................",
+"Qk6/y#uyu##yG$RN2/}R/&N#GGFFuu<VdzG3<u!%NVL%&$/~c$#j3u%Voac%~FFuFF@+::FF$G0:3jFyGz6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQkkQ|X,XkQQQQ_{,X,|_X,_kkk|)XX,X{|kkQQQQQQQQ|_X,kkQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQkk_X,|kkQQQQQQQQQ|X,{kQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQKKKKvTnn44wa/ooLooeoo2PHHvvvtttKKvtvttKvtttvttvvtvtttttSSm5m55555mmmmII.........................",
+"rQ6VuEFFu~uGuuNao/}~N%VFMF0#uujFV*VGFNoVLN!VU%VcGRVFGN%%WN/=z<<N33:;3y$GN%j0~GFjFc6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQk7b.OXQQQJ|P..TkB.5hk|JJT...5lg|QQQQQQQQQki.q|kkkQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJkB.bhkkQQQQQQQQk|f.eQkQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQKKttKvTTnn44w2aooooaPPvvvttvKKKKKKKKKKKvvttttKttttppSSA555mmmmmmmmmII.......I...................",
+"rrr$G<<;auuFPuN!uRiTPN$@FM0u#FFa/VVFG%B=*%G3FnG4Gc~-GciVaV**d&GcjF;33FG-u$-3Fy@j#crQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJk7O..oJQQQXbI.TJB.5hrkrkT.OCI(AsJQQQQQQQQr^..ikQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQrXCqhrkQQQQQQQQJkf.erJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQKKKKKttTPnnPPP4wWowPvvKttvttKKtKttKKvtttKtDtKptppCS5Dmmmm5mmmmmmmIIII...........................",
+"JJrRNVR<F<uNvRRVRLouGu-y@:FuujGN%V!FW&UVLG;33;FccN-3<G&&Ra/=dd&cFu3:FGG#-~F3GuGyNRrQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJrJ7bI.^kk|ki...lrB.bhkQJJT.4s}CI/kQQQQQkJk7.IbTkkQQk|Bgh_QQ|X77XkkQk|X7gs_QkkkQ{s}7X|kk_77,|||X77s|,B_BA.oXkkQ)hg7)kQQJ|sgh_kQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQKKK0tttvvvnnnnPnPTvKtKvKKKKKKKtttKKtKKKpKppDSCA5mA5AS5mmmmmmmmIIII..............................",
+"kkkL-ciG3F;uG--~~-o~PN<F0330Fj<G$uu!z**y;:03F0-LVLuGcNL2$unN===Lc-;3yG03Gcc<~<~u$u6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJr7O.f.srJJnOf.lJB.(hrQQJl.Wk{f.oJQQQQQkrk4.TOOskk|_obOOTBkhf..qg||,W5OObnB|k|slbIOAWXkXO5U|{o5..OwTI}f..IT{k}fb..f}|k{Wb.O4{QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQDKKKKttvvvvvnvnttttKtKKKKKKtKKKKKKKpppSSC55C5mmm555555m5mmmmIII.................................",
+"kk|V-cN!cu<PNnjcGRVw~auyM:0FF}%RN;GEE%~:033yF3F~VeGcVNu~/uc>c&dduF0FF:3jFLuNNN~G-~kQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJ7O.e.2krBbqw.TJX.bhQQJJT.H}2557|QQQQkJkXC.7n.wkkr7bOlCba{lI^fO^,_4Obnnq.fB|sqOAPlbb4|B.bh|o.O^PfOO.}nb.Cw{}bOlPtOb7k}ICn5OiQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQDCKKKKKvTvnvPtttKtKKttKptKKKKtKDSpDDSAA55mmm555mmmm5mmmIIIII....................................",
+"Q|k/c/W~uNGuG-j~GaR%7zWGF3:33co-cFG0F0:330G;--<-/%/N<-#cu~u--FN%zNFuGFG0-G#ucFF0>G6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJ7b.sCq_JeOoW.lrB.bhQQQkT...I.P,kJQQQQQJo.A|}.CX|JoOq)7L}XC.}BLe{}Ib}_ksq.2k4.fXk|afShB.b7sCOa_J{WIO}|fOek{q.w|J|oIl|W.^_}ohkQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQKDKKtv0tvtvvKKKKKKKKptKppSDp55A5D5A55mmmmmmmmmmmmmmmmIIIII......................................",
+"kQk%~WWcN-tGFutGW~%UUdcF3MF0GVi/NF33:3:0F3$NLL%Ra/UV<FMFGG-~-;FF/%GuGy-;:<uNVNcjFc6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQrk7O._T.7k^Oh2.TJB.bhQQkJl.(SqbOw_QQQQJk{q.nh7O.eJ|7bOTiXk,lIfah)kP.4|kJko.q)OO}rkkrBX{B.5hiOqXk|rBA.}Jq.ok7b.ei}ii.IB}ICn}XrQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQCDCKDDDKDKKKKKKKtppKpppK5A5mmm5m5mmmmmmmmmmIImmmImmIIIII................I.......................",
+"J|kzunoou<<~c<FcLa/d}s%GF3:~--aV~3:0::0MF0%VFca%/LeooGjGGGuuGF;jG/V~c-F::-GG!$uF3~rQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQk7O.{}.wsOf_W.lJB.(hrQJQT.wBBo(bsJQQQkJ}O....O.f_6_LqI.qg|hlOI5W{f.o|kJJg(.hOOhkkJJr6JB.bU2.^kJkJ|^.}kf.Lki.OO.O.b.Og{WCI.fUJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQDDC55D5DC5CKKKKpvvvHvtHHSDmmmmmm55mmmmmmmIIIIm5mmI5III.mmI.m..........Im^.......................",
+"kQk&LGoeR~GLc#nLNnjN&}dzuF3E-NVG33;:3:333:-u~NaReoLuWUo<4cuu#>:jN2%/#c<3F03uuE%u+c6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJrJ7O.{,5ba.o|2.TrX.OhQJkkl.WrJBA.gQQQQJ|TICpfffO.g|k|Bef.l{rXgnbb7n.4|kkkiOCXb.gkr|k,,_=.5he.f)||kXq.}rS.ok}O.PWwW4Wws{|heAInQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQDD5DCDDDCDDKKppppppttptv5Dmmmmmm5mmmmmmmIIIIImA5mm55mmIm5m5CC5ObOIObmS5Sv5ASSAbAb5CbAC.5bAI5.bCC",
+"kkkU}&2i&L-u~<-!NL<>u/z&uF~NN/iF;033:30;:>K~aeL%VzVaWUB}uc<juc;><NLLRu##<GFFLN$F+~krQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJr7O.)k4.5bsk2.lkB.5g)))Jl.wXXebOhQQQQksb.iXXXBT.P|alaki.fiTPBsqO}iIC7k|sf.w|n.lBJk}p^7X.bhhb.o_k_oI.}kf.eJXqOL)||iW!{wTek2I^JQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQDDDDKKKKKKKKppKppppSpDKK5Ammmmmm55mmmmmmI.I.IImmIIII...I..I............ISI...IIIII.ISS.IIIIIIIIO",
+"kkk7%}z/%z/nFj-RLu->c-uuN%L/%-#3M0:3;3j;+3+;c/aac/z%LsB)du-+cNcF+FGF<<~<0-$G--<3;G6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJJk7O.)J}..lJkW.TQsI.DffTXT.Cff.O4|QQQJJw.C{JJJJ}.OsoO5PfI4sqbTnOSs)n.C4wS.fh|hqbfW4COP_B.5U|WO5TwTbOIg|f.okkoIOlWnb.okWO]wq.2QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQDDDDKKtKKvtvtppppDKpKpKDKKDD55D5DA555mmmmmmImImIIII.....................I.......................",
+"Qkr7a/%/}%U%<><LR-W--Nj-uN!LF3F::::;:;3<ccGF~c~2-2e/}sBU%i~GVNRP<+;::0-#G:F33;;j;-rQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQrJk7bO,J_COi|kWOlJB.I...SBTI..bqWX|rQQJ,CIoJJJrJ)A.2B4b.bls|/COOAi_JX45..Ols|kJ7l...bwXkXOb7|)w5..OPT.}|fOo|r{eSIOOCa_ksTOOOPBJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQDDDDKKKttvttvttpKppppKpppDKKKKDDDDADA5mmmm.mmImIm.III...........................................",
+"kQQXL!LRizd=%GlV!-<-j~-8F;<<j3:M3:;3;3<Nc~>FcNcaccR%%dz!z=/NGj<N!~jKF+3:3;:-<:;3jurQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQkJJ,hhkk|sh{k_Bhsr_hhhhhdkshhhhB|||kQrJ_hhXJQJJk|shsJ)7i},k|kh}iskk|k{h}}h,k|kkJ,7iih||k{hh{k__s}i7{Bh)JhhXk|kkX}i}s_||k)gi7{JQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQDDDDKKKttKvvvtvKtppppDDDDDDDDKDDKDDKDDDCDm5mmIIImmm5m.I.........................................",
+"Qkk)BecW/%z==%c!~-G>8<jc<;+9;3::;:3:F~$zu-~4~~//aLLNV~-8u%u<3P~LdUcFFj3F~3;G%Nj;>crQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQrJk|k|r|kr||kkk|Jk6krrJkJrrrrrkkkkJQQQrrkkJQkJk||J|||Jkkkk_J|kJkkkkkk__|rJkk||kJJJrrkkrkJk6k||kJJkk|rkJrk6|k|kJ|kkk|Jkkr|k|kkJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQDDDDKKKKvFtFvvTTHPtppppKDDDKDDDpKpDKDDDKDDD5C55mmmmm5m..........................................",
+"QkkBBUWL}}hs=UoRc<~j-c;NL-1;:j:::;F~-L&7VR//ViU&z%LF1:tVLc-G~uL7=dd%yjFMFjF-G!Fj>-rQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQkJ|rkkkJk|kkkkk|kkJkrJkkk|kk|kk|kkkkkJkJkkk|kkkkkkkkk|kkkkkk_|kkkJkkkkJkkkkkkrJkkJkkkrJ6kkJ|k|JkkJkkJkkkkk|JkJ|kkkkkkkkk|kkkkQQkkQkkQkQkQkQkQQkkkkQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQCDKDKKKKvvvTTn44wWPvpKDDKpDDDDDDDDAKDKKDKDDKDDDDC5555mI.........................................",
+"krr7ssU}iR/Uss!4W~c-:3+FNWK;;;;+3F-uLUdaPWR2cWR/}L-j-cu/uuW/N}*&d7UU%~;+;+FF>N/F+~6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJkkJXiP2s||J|||krk_kkJkk_k|k|g7h}Bi,|r|kkkrk||kk|7}||||||kkJJs}X/)_kkkkJkkkkJkkrkkkJkkk||{iBkk|kk|k|kkkksi_||kihkkkk|||k|}hkkkk|kkkkkkQkQkk|}hk|k,o_kkQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQDDDCKKtKvvFP4wuwW22wHKKKDppDDDDADDDDDDDKDKKDKDpDDDDC55mIO.......................................",
+"JkkdhXBszLw!&=/n<8L#::j#Lc;33:;;jj-R}zU!!!4N}*7%N4u%}z%RaVi%zdUU*&}%}%~;[;;1;4z%c!kQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQkJkBln}lq)|{Bk||k,)||,{|Jk|k|4oawXi_|),Jkk){k|krsq}J{Bkkkk{_|e4h^h,|kk),k|rkkk){|kk)Bk),kBfdX|rk|X{J||,X/P||X|f7k_B|kk|B,^gkk||_||k||_,|kkk{^}|_Bhf_kJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQDDDKKtvvvPwaaW2aWWa2wwHKKSDpDDDADKDDDDDpDpDpDDSpDDpDDDACII......................................",
+"kkkXss=ss%RRW%sRj84%V~>8FFF:::++:-Vz%%/!/}z&U7}i4Wz}z%L/%ziL/7dzUzi}%iL~<F1;j-!/%z6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQrkkW4)J|7,iff4_2l^^,}f^hPh)nU^aCAo2i^^fs)4f^l7||lb}e^f2{4^}khCAaC^f7)offo|kkB4^q7XSTq4^fih5lfn{s4^fU)2fffosT^^CX}ffn|sl^lqsr,TU}4,n7g^f4,o^aAh}f^^P|JkQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQDD;Ktv-~wa/%eaaaa2a2PwPPvKKKDDKDADDDDDDDAADDpDppDpDpDDDDAC5.....................................",
+"QrkXBssU7}a}!nzsin-LU&~<F0:::;;+luzL/L8n/UsUzi}/i}&/iz&iL/%i/}}}z%V}}%/LL!8jjLNGj~kQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQkJXAs||kk7qssC7^ahq7Twi7lXhf7f7q7wa4PXfea4XiOhJk42}fsUq7^e_J)^}alBT!el7}qB||P4ho^7qXoqBWne^hhf}TWh2nilBhqgloXof7qghq}^oXeAJJ_li^lin7f7sf}TW7f}f7XlaQkQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQDKtvPPi7h7}iig}aawoiWwwPPHvttpDDDDDADADDDDApDADDDSDDDADADDAmI...................................",
+"QQr,sBss}o/7z2c}s}!zUd&cj33M@j<NRLi!wc-aUUU}io27s7}i/iuj~!/i/i/iiRL}}/NRu-+>1jcu8~kQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJJXCh||XXWo|{S}AXXfX}fTg^rgl7^hfsl}^7|^7qhJh(_k_^}Pe|Xq}fXJrBfhniJT}fq^^^)ksb^^^4o4_aW|w2woJ,^eb^^^WleJ{f}fB|i4w]^^f}5{|}TkkJwl4^^haw|_^}Shglo4k|n}kJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQtPWi7sX)))BhhXXge2ogoaWwW2wPPvKpppDDADADDKDDKDDAADDADADADADDAAbO................................",
+"kJJ7}*hUzRw2ozLWUsUUdzU%~<-~Fc%z/z%iLWRzUULWi!/%RLi//!j>>-R!LNwuRa%%Ncc~81>+[[1++c6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ|kJTPs}qiafsalsAkhf7Pefifhl4inglBq7fs)qXfohl^kk|Ahwlswn7f||khfs^h)^hl47a}k|XC/}ws4o|ni_liTlhalhqe}WsPPsWf7Cih^22lheosbisfaJkkeAs^w|e^7ol7^XowL^hibskQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQiigB))))){{){))X7eooeeeeoo2w2wHvpKDCmAAADACADDA5C5CC5CCmAAppAAAC5I..............................",
+"Jk6L4RiziLw-4WLRzdhhU7U}z}~uV%zz&}~>~}//}L82ziw8W!ucRj11>luca!8W!!!8[+>19]''][1']nrQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQrkJB4^ng__4^wX72|7oXnl7Bll4}iizosW7W)BW|7^TlaJJ,4|Xn^2X}oJ|J7aXWXXWXsT^2)Jkk}ll/_WU_wh)w7ww^4B|/^lg_hl^4a|ef4P7{4^wBJe^n47|JJha_osk)W^2Bh!{o}B4^wn_kkkQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQshs)))))))))_))))hieaigigeeaao2PPHtKACDDCD5AAACCCC5Cm555DtTpAADAC555I...........................",
+"kJJa8--Wc4-8-84/dUU7UULRULuucVzzz/>>RLc~~4~~!n<W~~>c8++++>8<-->jj1'11[[[''(]]11[1-rQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJJJJ|_kJJJk_JJkrJJkJ|kkJ||_kk|kJJkJkkkrhAaW^s|Jk|JkJ|kJkJkJ|kk|J|kJJJk_kJrkJJ_{JJ_JJkJJk6J||JkkJk||JJkk|kk6|||Jk|_|r|J_|kkJJJJJkkrJk|_|kJ|kkkJk||krJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQBBXXXXXXX))))))))Xhioegggiggeo2wwPvKKDKDDCAC5DD55555C559Ap^DCCCCCA^fAb..........................",
+"JJJW888n-88n--c}U}/i}!~WR88>8L/LL~>8c888>--j>>>>f[1>+[['++++[[[9[]''[[[](((](1C[94JJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJJJJJJJkJJkkrkJJJkrJ|kJJkJkJJJkJJkJJJJJJ72o,kkkJ|JkJJJJJJJJJJJJJJJJJJJrrJJJJkJkkJJkJkJJkJJJJJJJkkJJJJkkJkJJJkJkJJkJJJJJkJJJrJJJJJJJJJJJrJJJJJJkJJkJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQXBXXXXXXXX)))))X){)B7hhgigghge2wawPTvvKKKKKDDDDDDDKKDmCDDDKADDDDDpHHpDACC.......................",
+"JJJWf8j8n888888!LRu!u4888j8+3F88>+>++[++1j>11[>[[['['['[[[+''[[][''''[['](((((OO(lrQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQrJJJJJJJJJJJkJkkJJJJJkJkkJkkJJJJkJJJJJJk_JkJJk|kJJJJJJkrJJJJJJkJJJJkrJkJkJ|JJkJJJJJJkkJJ|J|kk|JJJkJJJJJkkkkJkkkJJJkJJJkJJQJJJJrkJJJJJkJJJkJkJkJJJJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQBBBBBBBXXXXXXXXXXXBBshgggeggge2ww4TTTvtttKttvvKtvnW4HtKDDpKpKKtK^tvHt^DDAC......................",
+"JJJW]f8j888888>838>8j1[>++[+[[[']'[[[[['[999']'''']'[[[[[[[[''['[('''9[](((CO.OOOlJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQrJJJJJJJJJJJJJJJkkJJJJJkJkJkJJJJkrJJkJJkkkkkJJkJJ|JJJJJJkJJJJJJkJJJJJJJJJJJJJJJkJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJrQQQJJJJJrJrJJJJJkJJJJJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQBsBBBBBBBBBXBXXBXXXBBBhgeegggo2w4PFPT<TnTnnnnPPPwaiiaPPtHTvvvTTHvvHn^tt^pS5mII..................",
+"krk!A]8>>j88>[[[+[:>'1[[[[+[[['''''''(](((]](]]''''[[+[']((]''+[['[''119]9](((OO.lkQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJJJrJrJJJJQQJJJJJJJJJJJJJJJJJJJQQJrJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJrJJQQQQQQQQQQJQQJQQQQQJQJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQsshhsssBsBBBBsBBBBBBBBsgeoeegoa4nPTTTPTvPPa22a2aoegieawwHwPTvHnnPHtHHvHtpKAC5m5mIO..............",
+"krkW9O9>1qff((](]'[']]O(][['''']']]((OO(O(b](((('''['[['(O(]((f>'['['11]C'C(O(O(Il|QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJQQQQQQQQQQQQrQrJQJJJQQQQQQQQQQJJJJJJJJJJJJJJQJQQQQQQQQQQQQQQQQQQQQQQJJJJJJJJJJJJJrJrJJQQJJrJJJJJJJJJJJJJJJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQshssshsBsssBBBsBssBBBBsgg2eee22PPvPvnnnPTai}i}iigghhggeew2wPnHHPnHlvlvv^pDD5CmmmImIO5O..........",
+"6kJ}a!2R!!!WwWWWWWW2WWwW!W!!2!2!!2!WWWWcWcWWWWWu!!!!uRR!!!2R2WRL!R!R!R!!W!2WWWWWWokQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJQJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJJrJrQJQQQQQQQQQQQQQJrJJJJJJJJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQshshshhhhBsssBhBBssssBsgg22oeaWwPnPPnPPP4egg77h7hhshhhggee24PPPwPHl^HHHt^KKAC5C55555ACCOOI......",
+"JJ6|6J|66JJJkkJJJJJkkJJkJJJ6JJJJJJJJJJJJJJJkJJJJ66rJJJJJJrJJJJJJ6rJ6rJ6JJJJJrkJkJk|QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQrQQrQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQhhhhssshshhshshshhhhshhhge2ee2aWwwcwWuaWo}7hgh7hhhhshh7gigeo22wwPHvvvHPHptpDC5CCCCC5DSSACCI.....",
+"J6JJJ6JJJrJJJJJJJJJJJrJJr6JJrJJJJJrJJJrJJJJJJJJJJJJJkJJJJJJJJJkJJJJJJJJJJJJJJJJkJkQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQhhhhhhhhhshhhshBhhsshshhgeooeaa2WW222oaoighhhshhhshhhhh7ggioo2wWwPv^vHH^tpKDDADADACD^H^v^SAb....",
+"JJJJJJJJJJJJJJrJrJJJJrrJJ6rJrrrJJJJrJJJJJJJJJJJJJJJJJJJJJJJJkJJJJJJJJJJkJJJJJJJkJkQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQgghghhhhhhhhhhhhhhhhhhhhgeeeeee2aaaooeeei7hh7hhhhhhhhhhh7g}iieoa2PHHHHH^tt^pDDADKAADtHHPPPPS....",
+"JJrJJJrJrJrJJJJJJJJJJJJJJJJJJJJJJrJJJJJJJJJJJJJJJJJJJJJJJJJrJJJJJJJJQJJJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ7hgggghghghhhhhhhhhhhhhhgieiieeeoaeeiiiig7hh7hhhhghh7777ggggigeeoW444PPHHttHKDKSttp^Hw2wHHvS55bb",
+"JJJrJrJJJJJJJJJJJJJJJJJJJJJJJJQrJQQQQQQQQQQQJrJJJJJrJJrrJJJJJrJJJJQQQQrrrrQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ",
+"rJJJJJJJJJrQQQQQQQQJJJJJJQJQQQQQQQQQQQQQQQQQQQQQJJrJrrJQQQQJJJJJQQJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ"};
+#endif
\ No newline at end of file
Index: hal/powerpc/csb281/current/src/font.h
===================================================================
RCS file: hal/powerpc/csb281/current/src/font.h
diff -N hal/powerpc/csb281/current/src/font.h
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ hal/powerpc/csb281/current/src/font.h 1 Feb 2003 17:54:26 -0000
@@ -0,0 +1,161 @@
+//==========================================================================
+//
+// font.h
+//
+// LCD display font
+//
+//==========================================================================
+//####ECOSGPLCOPYRIGHTBEGIN####
+// -------------------------------------------
+// This file is part of eCos, the Embedded Configurable Operating System.
+// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
+// Copyright (C) 2003 Gary Thomas
+//
+// eCos is free software; you can redistribute it and/or modify it under
+// the terms of the GNU General Public License as published by the Free
+// Software Foundation; either version 2 or (at your option) any later version.
+//
+// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
+// WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+// for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with eCos; if not, write to the Free Software Foundation, Inc.,
+// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+//
+// As a special exception, if other files instantiate templates or use macros
+// or inline functions from this file, or you compile this file and link it
+// with other works to produce a work based on this file, this file does not
+// by itself cause the resulting work to be covered by the GNU General Public
+// License. However the source code for this file must still be made available
+// in accordance with section (3) of the GNU General Public License.
+//
+// This exception does not invalidate any other reasons why a work based on
+// this file might be covered by the GNU General Public License.
+//
+// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
+// at http://sources.redhat.com/ecos/ecos-license/
+// -------------------------------------------
+//####ECOSGPLCOPYRIGHTEND####
+//==========================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s): gthomas
+// Contributors: gthomas
+// Date: 2001-02-25
+// Description: Simple LCD font
+//####DESCRIPTIONEND####
+
+#ifndef _LCD_FONT_H_
+#define _LCD_FONT_H_
+
+// 8x8 Font - from Helios
+
+#define FIRST_CHAR 0x20
+#define LAST_CHAR 0x7F
+#define FONT_HEIGHT 8
+#define FONT_WIDTH 8
+#define CURSOR_ON 0x7F
+#define CURSOR_OFF 0x20
+static char font_table[LAST_CHAR-FIRST_CHAR+1][8] =
+{
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* */
+ { 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x00 }, /* ! */
+ { 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* " */
+ { 0x6C, 0x6C, 0xFE, 0x6C, 0xFE, 0x6C, 0x6C, 0x00 }, /* # */
+ { 0x30, 0xFC, 0x16, 0x7C, 0xD0, 0x7E, 0x18, 0x00 }, /* $ */
+ { 0x06, 0x66, 0x30, 0x18, 0x0C, 0x66, 0x60, 0x00 }, /* % */
+ { 0x1C, 0x36, 0x36, 0x1C, 0xB6, 0x66, 0xDC, 0x00 }, /* & */
+ { 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* ' */
+ { 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x18, 0x30, 0x00 }, /* ( */
+ { 0x0C, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0C, 0x00 }, /* ) */
+ { 0x00, 0x18, 0x7E, 0x3C, 0x7E, 0x18, 0x00, 0x00 }, /* * */
+ { 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00 }, /* + */
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x0C }, /* , */
+ { 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00 }, /* - */
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00 }, /* . */
+ { 0x00, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x00, 0x00 }, /* / */
+ { 0x3C, 0x66, 0x76, 0x7E, 0x6E, 0x66, 0x3C, 0x00 }, /* 0 */
+ { 0x18, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00 }, /* 1 */
+ { 0x3C, 0x66, 0x60, 0x30, 0x18, 0x0C, 0x7E, 0x00 }, /* 2 */
+ { 0x3C, 0x66, 0x60, 0x38, 0x60, 0x66, 0x3C, 0x00 }, /* 3 */
+ { 0x30, 0x38, 0x3C, 0x36, 0x7E, 0x30, 0x30, 0x00 }, /* 4 */
+ { 0x7E, 0x06, 0x3E, 0x60, 0x60, 0x66, 0x3C, 0x00 }, /* 5 */
+ { 0x38, 0x0C, 0x06, 0x3E, 0x66, 0x66, 0x3C, 0x00 }, /* 6 */
+ { 0x7E, 0x60, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x00 }, /* 7 */
+ { 0x3C, 0x66, 0x66, 0x3C, 0x66, 0x66, 0x3C, 0x00 }, /* 8 */
+ { 0x3C, 0x66, 0x66, 0x7C, 0x60, 0x30, 0x1C, 0x00 }, /* 9 */
+ { 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00 }, /* : */
+ { 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x0C }, /* ; */
+ { 0x30, 0x18, 0x0C, 0x06, 0x0C, 0x18, 0x30, 0x00 }, /* < */
+ { 0x00, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x00, 0x00 }, /* = */
+ { 0x0C, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0C, 0x00 }, /* > */
+ { 0x3C, 0x66, 0x30, 0x18, 0x18, 0x00, 0x18, 0x00 }, /* ? */
+ { 0x3C, 0x66, 0x76, 0x56, 0x76, 0x06, 0x3C, 0x00 }, /* @ */
+ { 0x3C, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00 }, /* A */
+ { 0x3E, 0x66, 0x66, 0x3E, 0x66, 0x66, 0x3E, 0x00 }, /* B */
+ { 0x3C, 0x66, 0x06, 0x06, 0x06, 0x66, 0x3C, 0x00 }, /* C */
+ { 0x1E, 0x36, 0x66, 0x66, 0x66, 0x36, 0x1E, 0x00 }, /* D */
+ { 0x7E, 0x06, 0x06, 0x3E, 0x06, 0x06, 0x7E, 0x00 }, /* E */
+ { 0x7E, 0x06, 0x06, 0x3E, 0x06, 0x06, 0x06, 0x00 }, /* F */
+ { 0x3C, 0x66, 0x06, 0x76, 0x66, 0x66, 0x3C, 0x00 }, /* G */
+ { 0x66, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00 }, /* H */
+ { 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00 }, /* I */
+ { 0x7C, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1C, 0x00 }, /* J */
+ { 0x66, 0x36, 0x1E, 0x0E, 0x1E, 0x36, 0x66, 0x00 }, /* K */
+ { 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x7E, 0x00 }, /* L */
+ { 0xC6, 0xEE, 0xFE, 0xD6, 0xD6, 0xC6, 0xC6, 0x00 }, /* M */
+ { 0x66, 0x66, 0x6E, 0x7E, 0x76, 0x66, 0x66, 0x00 }, /* N */
+ { 0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00 }, /* O */
+ { 0x3E, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x06, 0x00 }, /* P */
+ { 0x3C, 0x66, 0x66, 0x66, 0x56, 0x36, 0x6C, 0x00 }, /* Q */
+ { 0x3E, 0x66, 0x66, 0x3E, 0x36, 0x66, 0x66, 0x00 }, /* R */
+ { 0x3C, 0x66, 0x06, 0x3C, 0x60, 0x66, 0x3C, 0x00 }, /* S */
+ { 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00 }, /* T */
+ { 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00 }, /* U */
+ { 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00 }, /* V */
+ { 0xC6, 0xC6, 0xD6, 0xD6, 0xFE, 0xEE, 0xC6, 0x00 }, /* W */
+ { 0x66, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x66, 0x00 }, /* X */
+ { 0x66, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18, 0x00 }, /* Y */
+ { 0x7E, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x7E, 0x00 }, /* Z */
+ { 0x3E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x3E, 0x00 }, /* [ */
+ { 0x00, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x00, 0x00 }, /* \ */
+ { 0x7C, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7C, 0x00 }, /* ] */
+ { 0x3C, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* ^ */
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF }, /* _ */
+ { 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* ` */
+ { 0x00, 0x00, 0x3C, 0x60, 0x7C, 0x66, 0x7C, 0x00 }, /* a */
+ { 0x06, 0x06, 0x3E, 0x66, 0x66, 0x66, 0x3E, 0x00 }, /* b */
+ { 0x00, 0x00, 0x3C, 0x66, 0x06, 0x66, 0x3C, 0x00 }, /* c */
+ { 0x60, 0x60, 0x7C, 0x66, 0x66, 0x66, 0x7C, 0x00 }, /* d */
+ { 0x00, 0x00, 0x3C, 0x66, 0x7E, 0x06, 0x3C, 0x00 }, /* e */
+ { 0x38, 0x0C, 0x0C, 0x3E, 0x0C, 0x0C, 0x0C, 0x00 }, /* f */
+ { 0x00, 0x00, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x3C }, /* g */
+ { 0x06, 0x06, 0x3E, 0x66, 0x66, 0x66, 0x66, 0x00 }, /* h */
+ { 0x18, 0x00, 0x1C, 0x18, 0x18, 0x18, 0x3C, 0x00 }, /* i */
+ { 0x18, 0x00, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x0E }, /* j */
+ { 0x06, 0x06, 0x66, 0x36, 0x1E, 0x36, 0x66, 0x00 }, /* k */
+ { 0x1C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00 }, /* l */
+ { 0x00, 0x00, 0x6C, 0xFE, 0xD6, 0xD6, 0xC6, 0x00 }, /* m */
+ { 0x00, 0x00, 0x3E, 0x66, 0x66, 0x66, 0x66, 0x00 }, /* n */
+ { 0x00, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00 }, /* o */
+ { 0x00, 0x00, 0x3E, 0x66, 0x66, 0x3E, 0x06, 0x06 }, /* p */
+ { 0x00, 0x00, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0xE0 }, /* q */
+ { 0x00, 0x00, 0x36, 0x6E, 0x06, 0x06, 0x06, 0x00 }, /* r */
+ { 0x00, 0x00, 0x7C, 0x06, 0x3C, 0x60, 0x3E, 0x00 }, /* s */
+ { 0x0C, 0x0C, 0x3E, 0x0C, 0x0C, 0x0C, 0x38, 0x00 }, /* t */
+ { 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x00 }, /* u */
+ { 0x00, 0x00, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00 }, /* v */
+ { 0x00, 0x00, 0xC6, 0xD6, 0xD6, 0xFE, 0x6C, 0x00 }, /* w */
+ { 0x00, 0x00, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x00 }, /* x */
+ { 0x00, 0x00, 0x66, 0x66, 0x66, 0x7C, 0x60, 0x3C }, /* y */
+ { 0x00, 0x00, 0x7E, 0x30, 0x18, 0x0C, 0x7E, 0x00 }, /* z */
+ { 0x30, 0x18, 0x18, 0x0E, 0x18, 0x18, 0x30, 0x00 }, /* { */
+ { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00 }, /* | */
+ { 0x0C, 0x18, 0x18, 0x70, 0x18, 0x18, 0x0C, 0x00 }, /* } */
+ { 0x8C, 0xD6, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* ~ */
+ { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF } /* Block cursor */
+};
+
+#endif // _LCD_FONT_H_
Index: hal/powerpc/csb281/current/src/hal_aux.c
===================================================================
RCS file: /misc/cvsfiles/ecos/packages/hal/powerpc/csb281/current/src/hal_aux.c,v
retrieving revision 1.2
diff -u -5 -p -r1.2 hal_aux.c
--- hal/powerpc/csb281/current/src/hal_aux.c 4 Jan 2003 03:38:40 -0000 1.2
+++ hal/powerpc/csb281/current/src/hal_aux.c 31 Jan 2003 23:15:56 -0000
@@ -53,20 +53,25 @@
#include <pkgconf/hal.h>
#include <pkgconf/io_pci.h>
#include <cyg/infra/cyg_type.h>
+#include <cyg/infra/diag.h>
#include <cyg/hal/hal_mem.h> // HAL memory definitions
#include <cyg/hal/ppc_regs.h> // Platform registers
#include <cyg/hal/hal_if.h> // hal_if_init
#include <cyg/hal/hal_intr.h> // interrupt definitions
#include <cyg/hal/hal_cache.h>
#include <cyg/infra/cyg_ass.h> // assertion macros
#include <cyg/io/pci.h>
#include <cyg/hal/hal_io.h> // I/O macros
#include CYGHWR_MEMORY_LAYOUT_H
+// Functions defined in this module
+void _csb281_fs6377_init(int mode);
+static void _csb281_i2c_init(void);
+
// The memory map is weakly defined, allowing the application to redefine
// it if necessary. The regions defined below are the minimum requirements.
CYGARC_MEMDESC_TABLE CYGBLD_ATTRIB_WEAK = {
// Mapping for the Cogent CSB281 development boards
CYGARC_MEMDESC_NOCACHE( 0x70000000, 0x10000000 ), // FLASH region, LCD, PS/2
@@ -115,11 +120,14 @@ hal_platform_init(void)
// Reset peripherals
HAL_READ_UINT32(_CSB281_BCSR, bcsr);
HAL_WRITE_UINT32(_CSB281_BCSR, _zero_bit(bcsr, _CSB281_BCSR_PRESET));
HAL_WRITE_UINT32(_CSB281_BCSR, _one_bit(bcsr, _CSB281_BCSR_PRESET));
_csb281_i2c_init();
- _csb281_fs6377_init();
+ _csb281_fs6377_init(0);
+#endif
+#ifdef CYGSEM_CSB281_LCD_COMM
+ lcd_comm_init();
#endif
_csb281_pci_init();
}
//--------------------------------------------------------------------------
@@ -605,17 +613,29 @@ _csb281_i2c_read_reg(int addr, int reg)
static unsigned char _fs6377_init_data[] = {
0x28, 0xEF, 0x53, 0x03, 0x4B, 0x80, 0x32, 0x80,
0x94, 0x32, 0x80, 0xD4, 0x56, 0xF6, 0xF6, 0xE0
};
-static void
-_csb281_fs6377_init(void)
+// Setup for CRT mode 640x480 @75Hz
+static unsigned char _fs6377_init_data_CRT[] = {
+ 0x10, 0x3b, 0x49, 0x03, 0x4B, 0x80, 0x32, 0x80,
+ 0x94, 0x32, 0x80, 0xD4, 0x66, 0xF6, 0xF6, 0xE0
+};
+
+void
+_csb281_fs6377_init(int mode)
{
int reg;
+ unsigned char *data;
+ if (mode) {
+ data = _fs6377_init_data_CRT;
+ } else {
+ data = _fs6377_init_data;
+ }
for (reg = 0; reg < 16; reg++) {
- if (_csb281_i2c_write_reg(_CSB281_FS6377_DEV, reg, _fs6377_init_data[reg]) < 0) {
+ if (_csb281_i2c_write_reg(_CSB281_FS6377_DEV, reg, *data++) < 0) {
diag_printf("** Can't write FS6377 register %d\n", reg);
return;
}
}
}
@@ -635,10 +655,11 @@ _set_leds(int led0, int led1)
if (led0) bcsr = _zero_bit(bcsr, _CSB281_BCSR_LED0);
if (led1) bcsr = _zero_bit(bcsr, _CSB281_BCSR_LED1);
HAL_WRITE_UINT32(_CSB281_BCSR, bcsr);
}
+static void
_led_delay(int len)
{
int ctr, limit;
int cache_state;
@@ -647,10 +668,11 @@ _led_delay(int len)
while (len--) {
for (ctr = 0; ctr < limit; ctr++);
}
}
+void
_csb281_led(int val)
{
int bit, ctr;
for (ctr = 0; ctr < 8; ctr++) {
Index: hal/powerpc/csb281/current/src/lcd_support.c
===================================================================
RCS file: hal/powerpc/csb281/current/src/lcd_support.c
diff -N hal/powerpc/csb281/current/src/lcd_support.c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ hal/powerpc/csb281/current/src/lcd_support.c 1 Feb 2003 18:00:41 -0000
@@ -0,0 +1,1396 @@
+//==========================================================================
+//
+// Lcd_support.c
+//
+// Cogent CSB281 - LCD/CRT support routines
+//
+//==========================================================================
+//####ECOSGPLCOPYRIGHTBEGIN####
+// -------------------------------------------
+// This file is part of eCos, the Embedded Configurable Operating System.
+// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
+// Copyright (C) 2003 Gary Thomas
+//
+// eCos is free software; you can redistribute it and/or modify it under
+// the terms of the GNU General Public License as published by the Free
+// Software Foundation; either version 2 or (at your option) any later version.
+//
+// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
+// WARRANTY; without even the implied warranty of MERCHANTABILITY or
+// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+// for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with eCos; if not, write to the Free Software Foundation, Inc.,
+// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+//
+// As a special exception, if other files instantiate templates or use macros
+// or inline functions from this file, or you compile this file and link it
+// with other works to produce a work based on this file, this file does not
+// by itself cause the resulting work to be covered by the GNU General Public
+// License. However the source code for this file must still be made available
+// in accordance with section (3) of the GNU General Public License.
+//
+// This exception does not invalidate any other reasons why a work based on
+// this file might be covered by the GNU General Public License.
+//
+// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
+// at http://sources.redhat.com/ecos/ecos-license/
+// -------------------------------------------
+//####ECOSGPLCOPYRIGHTEND####
+//==========================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s): gthomas
+// Contributors: gthomas
+// Date: 2001-11-03
+// Description: Simple LCD support
+//####DESCRIPTIONEND####
+
+#include <pkgconf/hal.h>
+
+#include <cyg/infra/diag.h>
+#include <cyg/hal/hal_io.h> // IO macros
+#include <cyg/hal/hal_if.h> // Virtual vector support
+#include <cyg/hal/hal_arch.h> // Register state info
+#include <cyg/hal/hal_intr.h> // HAL interrupt macros
+
+#include <cyg/hal/lcd_support.h>
+#include <cyg/hal/hal_cache.h>
+
+#include <string.h>
+
+#ifdef CYGPKG_ISOINFRA
+# include <pkgconf/isoinfra.h>
+# ifdef CYGINT_ISO_STDIO_FORMATTED_IO
+# include <stdio.h> // sscanf
+# endif
+#endif
+
+#ifndef FALSE
+#define FALSE 0
+#define TRUE 1
+#endif
+
+// Logical layout
+#define LCD_WIDTH 640
+#define LCD_HEIGHT 480
+#define LCD_DEPTH 16
+
+#define RGB_RED(x) (((x)&0x1F)<<11)
+#define RGB_GREEN(x) (((x)&0x3F)<<5)
+#define RGB_BLUE(x) (((x)&0x1F)<<0)
+
+// Black on light blue
+static int bg = RGB_RED(0x1F) | RGB_GREEN(0x3F) | RGB_BLUE(0x1F);
+static int fg = RGB_RED(0) | RGB_GREEN(0) | RGB_BLUE(0);
+
+static struct lcd_info lcd;
+
+int sed135x_init(int depth, struct lcd_info *info);
+
+// Compute the location for a pixel within the framebuffer
+static cyg_uint16 *
+lcd_fb(int row, int col)
+{
+ cyg_uint16 *res = (cyg_uint16 *)((char *)lcd.fb+(row*lcd.rlen)+(col*lcd.stride));
+ return res;
+}
+
+void
+lcd_on(bool enable)
+{
+ static bool on = false;
+
+ if (enable) {
+ if (!on) {
+ (*lcd.on)();
+ }
+ on = true;
+ } else {
+// (*lcd.off)();
+ }
+}
+
+// Initialize LCD hardware
+
+void
+lcd_init(int depth)
+{
+ sed135x_init(depth, &lcd);
+}
+
+// Get information about the frame buffer
+int
+lcd_getinfo(struct lcd_info *info)
+{
+ if (lcd.bpp == 0) {
+ return 0; // LCD not initialized
+ }
+ *info = lcd;
+ return 1; // Information valid
+}
+
+// Clear screen
+void
+lcd_clear(void)
+{
+#if 0
+ cyg_uint32 *fb_row0, *fb_rown;
+ cyg_uint32 _bg = (bg<<16)|bg;
+
+ fb_row0 = lcd_fb(0, 0);
+ fb_rown = lcd_fb(lcd_height, 0);
+ while (fb_row0 != fb_rown) {
+ *fb_row0++ = _bg;
+ }
+#endif
+}
+
+#ifdef CYGSEM_CSB281_LCD_COMM
+
+//
+// Additional support for LCD/Keyboard as 'console' device
+//
+
+#ifdef CYGOPT_CSB281_LCD_COMM_LOGO
+#include "banner.xpm"
+#endif
+#include "font.h"
+
+// Virtual screen info
+static int curX = 0; // Last used position
+static int curY = 0;
+//static int width = LCD_WIDTH / (FONT_WIDTH*NIBBLES_PER_PIXEL);
+//static int height = LCD_HEIGHT / (FONT_HEIGHT*SCREEN_SCALE);
+
+#define SCREEN_PAN 20
+#define SCREEN_WIDTH 80
+#define SCREEN_HEIGHT (LCD_HEIGHT/FONT_HEIGHT)
+#define VISIBLE_SCREEN_WIDTH (LCD_WIDTH/FONT_WIDTH)
+#define VISIBLE_SCREEN_HEIGHT (LCD_HEIGHT/FONT_HEIGHT)
+static char screen[SCREEN_HEIGHT][SCREEN_WIDTH];
+static int screen_height = SCREEN_HEIGHT;
+static int screen_width = SCREEN_WIDTH;
+static int screen_pan = 0;
+
+// Usable area on screen [logical pixel rows]
+static int screen_start = 0;
+static int screen_end = LCD_HEIGHT/FONT_HEIGHT;
+
+static bool cursor_enable = true;
+
+// Functions
+static void lcd_drawc(cyg_int8 c, int x, int y);
+
+// Note: val is a 16 bit, RGB555 value which must be mapped
+// onto a 12 bit value.
+#define RED(v) ((v>>12) & 0x0F)
+#define GREEN(v) ((v>>7) & 0x0F)
+#define BLUE(v) ((v>>1) & 0x0F)
+
+static void
+set_pixel(int row, int col, unsigned short val)
+{
+ unsigned short *pix = (unsigned short *)lcd_fb(row, col);
+ *pix = _le16(val);
+}
+
+static int
+_hexdigit(char c)
+{
+ if ((c >= '0') && (c <= '9')) {
+ return c - '0';
+ } else {
+ if ((c >= 'A') && (c <= 'F')) {
+ return (c - 'A') + 0x0A;
+ } else {
+ if ((c >= 'a') && (c <= 'f')) {
+ return (c - 'a') + 0x0a;
+ }
+ }
+ }
+
+ return 0;
+}
+
+static int
+_hex(char *cp)
+{
+ return (_hexdigit(*cp)<<4) | _hexdigit(*(cp+1));
+}
+
+static unsigned short
+parse_color(char *cp)
+{
+ int red, green, blue;
+
+ while (*cp && (*cp != 'c')) cp++;
+ if (cp) {
+ cp += 2;
+ if (*cp == '#') {
+ red = _hex(cp+1);
+ green = _hex(cp+3);
+ blue = _hex(cp+5);
+#define USE_RGB565
+#ifdef USE_RGB565
+ return RGB_RED(red>>3) | RGB_GREEN(green>>2) | RGB_BLUE(blue>>3);
+#else
+ return RGB_RED(red>>3) | RGB_GREEN(green>>3) | RGB_BLUE(blue>>3);
+#endif
+ } else {
+ // Should be "None"
+ return 0xFFFF;
+ }
+ } else {
+ return 0xFFFF;
+ }
+}
+
+#ifndef CYGINT_ISO_STDIO_FORMATTED_IO
+static int
+get_int(unsigned char **_cp)
+{
+ char *cp = *_cp;
+ char c;
+ int val = 0;
+
+ while ((c = *cp++) && (c != ' ')) {
+ if ((c >= '0') && (c <= '9')) {
+ val = val * 10 + (c - '0');
+ } else {
+ return -1;
+ }
+ }
+ *_cp = cp;
+ return val;
+}
+#endif
+
+#ifdef CYGOPT_CSB281_LCD_COMM_LOGO
+static int
+show_xpm(char *xpm[], int screen_pos)
+{
+ int i, row, col, offset;
+ unsigned char *cp;
+ int nrows, ncols, nclrs, cwid;
+ unsigned short colors[256]; // Mapped by character index
+ short color_value, color_index;
+//#define HORRIBLY_SLOW_COLOR_MAPPING
+#ifdef HORRIBLY_SLOW_COLOR_MAPPING
+ bool color_match;
+ short cmap[256][2];
+ int j;
+#else
+ // Caution - this is very GIMP specific
+ short cmap[256][3]; // Enough room for 256 colors
+ short cmap_col, cmap_row;
+ unsigned char std_cmap[] = " .+";
+#endif
+
+ cp = xpm[0];
+#ifdef CYGINT_ISO_STDIO_FORMATTED_IO
+ if (sscanf(cp, "%d %d %d %d", &ncols, &nrows, &nclrs, &cwid) != 4) {
+#else
+ if (((ncols = get_int(&cp)) < 0) ||
+ ((nrows = get_int(&cp)) < 0) ||
+ ((nclrs = get_int(&cp)) < 0) ||
+ ((cwid = get_int(&cp)) < 0)) {
+
+#endif
+ diag_printf("Can't parse XPM data, sorry\n");
+ return 0;
+ }
+// diag_printf("%d rows, %d cols, %d colors %d chars/pixel\n", nrows, ncols, nclrs, cwid);
+ if (cwid > 2) {
+ diag_printf("Color map is too wide - %d\n", cwid);
+ return 0;
+ }
+
+ for (i = 0; i < 256; i++) {
+ colors[i] = 0x0000;
+#ifdef HORRIBLY_SLOW_COLOR_MAPPING
+ cmap[i][0] = 0; cmap[i][1] = 0;
+#else
+ cmap[i][0] = 0; cmap[i][1] = 0; cmap[i][2] = 0;
+#endif
+ }
+ color_index = 0;
+ for (i = 0; i < nclrs; i++) {
+ cp = xpm[i+1];
+#ifdef HORRIBLY_SLOW_COLOR_MAPPING
+ for (j = 0; j < cwid; j++) {
+ cmap[color_index][j] = cp[j];
+ }
+#else
+ if (cwid == 1) {
+ cmap_col = 0;
+ } else {
+ for (cmap_col = 0; cmap_col < 3; cmap_col++) {
+ if (cp[1] == std_cmap[cmap_col]) {
+ break;
+ }
+ }
+ }
+ cmap_row = *cp;
+ cmap[cmap_row][cmap_col] = color_index;
+#endif
+ color_value = parse_color(cp+cwid);
+ colors[color_index++] = color_value;
+// diag_printf("Color[%d] = %04x\n", color_index-1, colors[color_index-1]);
+ }
+
+#ifdef CYGOPT_CSB281_LCD_COMM_LOGO_TOP
+ offset = screen_pos;
+#else
+ offset = screen_pos-nrows;
+#endif
+ for (row = 0; row < nrows; row++) {
+ cp = xpm[nclrs+1+row];
+ for (col = 0; col < ncols; col++) {
+#ifdef HORRIBLY_SLOW_COLOR_MAPPING
+ // Horrible, but portable, way to map colors
+ for (color_index = 0; color_index < nclrs; color_index++) {
+ color_match = true;
+ for (j = 0; j < cwid; j++) {
+ if (cmap[color_index][j] != cp[j]) {
+ color_match = false;
+ }
+ }
+ if (color_match) {
+ break;
+ }
+ }
+#else
+ if (cwid == 1) {
+ cmap_col = 0;
+ } else {
+ for (cmap_col = 0; cmap_col < 3; cmap_col++) {
+ if (cp[1] == std_cmap[cmap_col]) {
+ break;
+ }
+ }
+ }
+ cmap_row = *cp;
+ color_index = cmap[cmap_row][cmap_col];
+#endif
+ set_pixel(row+offset, col, colors[color_index]);
+ cp += cwid;
+ }
+ }
+#ifdef CYGOPT_CSB281_LCD_COMM_LOGO_TOP
+ screen_start = (nrows + (FONT_HEIGHT-1))/FONT_HEIGHT;
+ screen_end = LCD_HEIGHT/FONT_HEIGHT;
+ return offset+nrows;
+#else
+ screen_start = 0;
+ screen_height = offset / FONT_HEIGHT;
+ screen_end = screen_height;
+ return offset;
+#endif
+}
+#endif
+
+void
+lcd_screen_clear(void)
+{
+ int row, col, pos;
+
+ for (row = 0; row < screen_height; row++) {
+ for (col = 0; col < screen_width; col++) {
+ screen[row][col] = ' ';
+ lcd_drawc(' ', col, row);
+ }
+ }
+#ifdef CYGOPT_CSB281_LCD_COMM_LOGO
+ // Note: Row 0 seems to wrap incorrectly
+#ifdef CYGOPT_CSB281_LCD_COMM_LOGO_TOP
+ pos = 0;
+#else
+ pos = (LCD_HEIGHT-1);
+#endif
+ show_xpm(banner_xpm, pos);
+#endif // CYGOPT_CSB281_LCD_COMM_LOGO
+ curX = 0; curY = screen_start;
+ if (cursor_enable) {
+ lcd_drawc(CURSOR_ON, curX-screen_pan, curY);
+ }
+}
+
+// Position cursor
+void
+lcd_moveto(int X, int Y)
+{
+ if (cursor_enable) {
+ lcd_drawc(screen[curY][curX], curX-screen_pan, curY);
+ }
+ if (X < 0) X = 0;
+ if (X >= screen_width) X = screen_width-1;
+ curX = X;
+ if (Y < screen_start) Y = screen_start;
+ if (Y >= screen_height) Y = screen_height-1;
+ curY = Y;
+ if (cursor_enable) {
+ lcd_drawc(CURSOR_ON, curX-screen_pan, curY);
+ }
+}
+
+// Render a character at position (X,Y) with current background/foreground
+static void
+lcd_drawc(cyg_int8 c, int x, int y)
+{
+ cyg_uint8 bits;
+ int l, p;
+ int xoff, yoff;
+
+ if ((x < 0) || (x >= VISIBLE_SCREEN_WIDTH) ||
+ (y < 0) || (y >= screen_height)) return;
+ for (l = 0; l < FONT_HEIGHT; l++) {
+ bits = font_table[c-FIRST_CHAR][l];
+ yoff = y*FONT_HEIGHT + l;
+ xoff = x*FONT_HEIGHT;
+ for (p = 0; p < FONT_WIDTH; p++) {
+ set_pixel(yoff, xoff + p, (bits & 0x01) ? fg : bg);
+ bits >>= 1;
+ }
+ }
+}
+
+static void
+lcd_refresh(void)
+{
+ int row, col;
+
+ for (row = screen_start; row < screen_height; row++) {
+ for (col = 0; col < VISIBLE_SCREEN_WIDTH; col++) {
+ if ((col+screen_pan) < screen_width) {
+ lcd_drawc(screen[row][col+screen_pan], col, row);
+ } else {
+ lcd_drawc(' ', col, row);
+ }
+ }
+ }
+ if (cursor_enable) {
+ lcd_drawc(CURSOR_ON, curX-screen_pan, curY);
+ }
+}
+
+static void
+lcd_scroll(void)
+{
+ int col;
+ cyg_uint8 *c1;
+ cyg_uint32 *lc0, *lc1, *lcn;
+ cyg_uint16 *fb_row0, *fb_row1, *fb_rown;
+
+ // First scroll up the virtual screen
+#if ((SCREEN_WIDTH%4) != 0)
+#error Scroll code optimized for screen with multiple of 4 columns
+#endif
+ lc0 = (cyg_uint32 *)&screen[0][0];
+ lc1 = (cyg_uint32 *)&screen[1][0];
+ lcn = (cyg_uint32 *)&screen[screen_height][0];
+ while (lc1 != lcn) {
+ *lc0++ = *lc1++;
+ }
+ c1 = &screen[screen_height-1][0];
+ for (col = 0; col < screen_width; col++) {
+ *c1++ = 0x20;
+ }
+ fb_row0 = lcd_fb(screen_start*FONT_HEIGHT, 0);
+ fb_row1 = lcd_fb((screen_start+1)*FONT_HEIGHT, 0);
+ fb_rown = lcd_fb(screen_end*FONT_HEIGHT, 0);
+ while (fb_row1 != fb_rown) {
+ *fb_row0 = *fb_row1;
+ fb_row0 = (cyg_uint16 *)((char *)fb_row0 + lcd.stride);
+ fb_row1 = (cyg_uint16 *)((char *)fb_row1 + lcd.stride);
+ }
+ // Erase bottom line
+ for (col = 0; col < screen_width; col++) {
+ lcd_drawc(' ', col, screen_end-1);
+ }
+}
+
+// Draw one character at the current position
+void
+lcd_putc(cyg_int8 c)
+{
+// TEMP
+ int cache_on;
+ HAL_DCACHE_IS_ENABLED(cache_on);
+ if (cache_on) {
+ HAL_DCACHE_SYNC();
+ HAL_DCACHE_DISABLE();
+ }
+// TEMP
+ if (cursor_enable) {
+ lcd_drawc(screen[curY][curX], curX-screen_pan, curY);
+ }
+ switch (c) {
+ case '\r':
+ curX = 0;
+ break;
+ case '\n':
+ curY++;
+ break;
+ case '\b':
+ curX--;
+ if (curX < 0) {
+ curY--;
+ if (curY < 0) curY = 0;
+ curX = screen_width-1;
+ }
+ break;
+ default:
+ if (((cyg_uint8)c < FIRST_CHAR) || ((cyg_uint8)c > LAST_CHAR)) c = '.';
+ screen[curY][curX] = c;
+ lcd_drawc(c, curX-screen_pan, curY);
+ curX++;
+ if (curX == screen_width) {
+ curY++;
+ curX = 0;
+ }
+ }
+ if (curY >= screen_height) {
+ lcd_scroll();
+ curY = (screen_height-1);
+ }
+ if (cursor_enable) {
+ lcd_drawc(CURSOR_ON, curX-screen_pan, curY);
+ }
+// TEMP
+ if (cache_on) {
+ HAL_DCACHE_ENABLE();
+ }
+// TEMP
+}
+
+// Basic LCD 'printf()' support
+
+#include <stdarg.h>
+
+#define is_digit(c) ((c >= '0') && (c <= '9'))
+
+static int
+_cvt(unsigned long val, char *buf, long radix, char *digits)
+{
+ char temp[80];
+ char *cp = temp;
+ int length = 0;
+
+ if (val == 0) {
+ /* Special case */
+ *cp++ = '0';
+ } else {
+ while (val) {
+ *cp++ = digits[val % radix];
+ val /= radix;
+ }
+ }
+ while (cp != temp) {
+ *buf++ = *--cp;
+ length++;
+ }
+ *buf = '\0';
+ return (length);
+}
+
+static int
+lcd_vprintf(void (*putc)(cyg_int8), const char *fmt0, va_list ap)
+{
+ char c, sign, *cp;
+ int left_prec, right_prec, zero_fill, length, pad, pad_on_right;
+ char buf[32];
+ long val;
+
+ while ((c = *fmt0++)) {
+ cp = buf;
+ length = 0;
+ if (c == '%') {
+ c = *fmt0++;
+ left_prec = right_prec = pad_on_right = 0;
+ if (c == '-') {
+ c = *fmt0++;
+ pad_on_right++;
+ }
+ if (c == '0') {
+ zero_fill = TRUE;
+ c = *fmt0++;
+ } else {
+ zero_fill = FALSE;
+ }
+ while (is_digit(c)) {
+ left_prec = (left_prec * 10) + (c - '0');
+ c = *fmt0++;
+ }
+ if (c == '.') {
+ c = *fmt0++;
+ zero_fill++;
+ while (is_digit(c)) {
+ right_prec = (right_prec * 10) + (c - '0');
+ c = *fmt0++;
+ }
+ } else {
+ right_prec = left_prec;
+ }
+ sign = '\0';
+ switch (c) {
+ case 'd':
+ case 'x':
+ case 'X':
+ val = va_arg(ap, long);
+ switch (c) {
+ case 'd':
+ if (val < 0) {
+ sign = '-';
+ val = -val;
+ }
+ length = _cvt(val, buf, 10, "0123456789");
+ break;
+ case 'x':
+ length = _cvt(val, buf, 16, "0123456789abcdef");
+ break;
+ case 'X':
+ length = _cvt(val, buf, 16, "0123456789ABCDEF");
+ break;
+ }
+ break;
+ case 's':
+ cp = va_arg(ap, char *);
+ length = strlen(cp);
+ break;
+ case 'c':
+ c = va_arg(ap, long /*char*/);
+ (*putc)(c);
+ continue;
+ default:
+ (*putc)('?');
+ }
+ pad = left_prec - length;
+ if (sign != '\0') {
+ pad--;
+ }
+ if (zero_fill) {
+ c = '0';
+ if (sign != '\0') {
+ (*putc)(sign);
+ sign = '\0';
+ }
+ } else {
+ c = ' ';
+ }
+ if (!pad_on_right) {
+ while (pad-- > 0) {
+ (*putc)(c);
+ }
+ }
+ if (sign != '\0') {
+ (*putc)(sign);
+ }
+ while (length-- > 0) {
+ (*putc)(c = *cp++);
+ if (c == '\n') {
+ (*putc)('\r');
+ }
+ }
+ if (pad_on_right) {
+ while (pad-- > 0) {
+ (*putc)(' ');
+ }
+ }
+ } else {
+ (*putc)(c);
+ if (c == '\n') {
+ (*putc)('\r');
+ }
+ }
+ }
+
+ // FIXME
+ return 0;
+}
+
+int
+_lcd_printf(char const *fmt, ...)
+{
+ int ret;
+ va_list ap;
+
+ va_start(ap, fmt);
+ ret = lcd_vprintf(lcd_putc, fmt, ap);
+ va_end(ap);
+ return (ret);
+}
+
+void
+lcd_setbg(int red, int green, int blue)
+{
+ bg = RGB_RED(red) | RGB_GREEN(green) | RGB_BLUE(blue);
+}
+
+void
+lcd_setfg(int red, int green, int blue)
+{
+ fg = RGB_RED(red) | RGB_GREEN(green) | RGB_BLUE(blue);
+}
+
+//
+// Support LCD/keyboard (PS2) as a virtual I/O channel
+// Adapted from i386/pcmb_screen.c
+//
+
+
+//-----------------------------------------------------------------------------
+// Keyboard definitions
+
+#define KBDATAPORT 0x79000003 // data I/O port
+#define KBCMDPORT 0x79000007 // command port (write)
+#define KBSTATPORT 0x79000007 // status port (read)
+#define KBINRDY 0x01
+#define KBOUTRDY 0x02
+#define KBTXTO 0x40 // Transmit timeout - nothing there
+#define KBTEST 0xAB
+
+// Scan codes
+
+#define LSHIFT 0x2a
+#define RSHIFT 0x36
+#define CTRL 0x1d
+#define ALT 0x38
+#define CAPS 0x3a
+#define NUMS 0x45
+
+#define BREAK 0x80
+
+// Bits for KBFlags
+
+#define KBNormal 0x0000
+#define KBShift 0x0001
+#define KBCtrl 0x0002
+#define KBAlt 0x0004
+#define KBIndex 0x0007 // mask for the above
+
+#define KBExtend 0x0010
+#define KBAck 0x0020
+#define KBResend 0x0040
+#define KBShiftL (0x0080 | KBShift)
+#define KBShiftR (0x0100 | KBShift)
+#define KBCtrlL (0x0200 | KBCtrl)
+#define KBCtrlR (0x0400 | KBCtrl)
+#define KBAltL (0x0800 | KBAlt)
+#define KBAltR (0x1000 | KBAlt)
+#define KBCapsLock 0x2000
+#define KBNumLock 0x4000
+
+#define KBArrowUp 0x48
+#define KBArrowRight 0x4D
+#define KBArrowLeft 0x4B
+#define KBArrowDown 0x50
+
+//-----------------------------------------------------------------------------
+// Keyboard Variables
+
+static int KBFlags = 0;
+
+static CYG_BYTE KBPending = 0xFF;
+
+static CYG_BYTE KBScanTable[128][4] = {
+// Normal Shift Control Alt
+// 0x00
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0x1b, 0x1b, 0x1b, 0xFF, },
+ { '1', '!', 0xFF, 0xFF, },
+ { '2', '"', 0xFF, 0xFF, },
+ { '3', '#', 0xFF, 0xFF, },
+ { '4', '$', 0xFF, 0xFF, },
+ { '5', '%', 0xFF, 0xFF, },
+ { '6', '^', 0xFF, 0xFF, },
+ { '7', '&', 0xFF, 0xFF, },
+ { '8', '*', 0xFF, 0xFF, },
+ { '9', '(', 0xFF, 0xFF, },
+ { '0', ')', 0xFF, 0xFF, },
+ { '-', '_', 0xFF, 0xFF, },
+ { '=', '+', 0xFF, 0xFF, },
+ { '\b', '\b', 0xFF, 0xFF, },
+ { '\t', '\t', 0xFF, 0xFF, },
+// 0x10
+ { 'q', 'Q', 0x11, 0xFF, },
+ { 'w', 'W', 0x17, 0xFF, },
+ { 'e', 'E', 0x05, 0xFF, },
+ { 'r', 'R', 0x12, 0xFF, },
+ { 't', 'T', 0x14, 0xFF, },
+ { 'y', 'Y', 0x19, 0xFF, },
+ { 'u', 'U', 0x15, 0xFF, },
+ { 'i', 'I', 0x09, 0xFF, },
+ { 'o', 'O', 0x0F, 0xFF, },
+ { 'p', 'P', 0x10, 0xFF, },
+ { '[', '{', 0x1b, 0xFF, },
+ { ']', '}', 0x1d, 0xFF, },
+ { '\r', '\r', '\n', 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 'a', 'A', 0x01, 0xFF, },
+ { 's', 'S', 0x13, 0xFF, },
+// 0x20
+ { 'd', 'D', 0x04, 0xFF, },
+ { 'f', 'F', 0x06, 0xFF, },
+ { 'g', 'G', 0x07, 0xFF, },
+ { 'h', 'H', 0x08, 0xFF, },
+ { 'j', 'J', 0x0a, 0xFF, },
+ { 'k', 'K', 0x0b, 0xFF, },
+ { 'l', 'L', 0x0c, 0xFF, },
+ { ';', ':', 0xFF, 0xFF, },
+ { 0x27, '@', 0xFF, 0xFF, },
+ { '#', '~', 0xFF, 0xFF, },
+ { '`', '~', 0xFF, 0xFF, },
+ { '\\', '|', 0x1C, 0xFF, },
+ { 'z', 'Z', 0x1A, 0xFF, },
+ { 'x', 'X', 0x18, 0xFF, },
+ { 'c', 'C', 0x03, 0xFF, },
+ { 'v', 'V', 0x16, 0xFF, },
+// 0x30
+ { 'b', 'B', 0x02, 0xFF, },
+ { 'n', 'N', 0x0E, 0xFF, },
+ { 'm', 'M', 0x0D, 0xFF, },
+ { ',', '<', 0xFF, 0xFF, },
+ { '.', '>', 0xFF, 0xFF, },
+ { '/', '?', 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { ' ', ' ', ' ', ' ', },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xF1, 0xE1, 0xFF, 0xFF, },
+ { 0xF2, 0xE2, 0xFF, 0xFF, },
+ { 0xF3, 0xE3, 0xFF, 0xFF, },
+ { 0xF4, 0xE4, 0xFF, 0xFF, },
+ { 0xF5, 0xE5, 0xFF, 0xFF, },
+// 0x40
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+
+ { 0x15, 0x15, 0x15, 0x15, },
+ { 0x10, 0x10, 0x10, 0x10, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+// 0x50
+ { 0x04, 0x04, 0x04, 0x04, },
+ { 0x0e, 0x0e, 0x0e, 0x0e, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+// 0x60
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+// 0x70
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+ { 0xFF, 0xFF, 0xFF, 0xFF, },
+};
+
+static int KBIndexTab[8] = { 0, 1, 2, 2, 3, 3, 3, 3 };
+
+//-----------------------------------------------------------------------------
+
+static __inline__ cyg_uint8
+inb(cyg_uint32 port)
+{
+ cyg_uint8 val;
+ HAL_READ_UINT8(port, val);
+ return val;
+}
+
+static __inline__ void
+outb(cyg_uint32 port, cyg_uint8 val)
+{
+ HAL_WRITE_UINT8(port, val);
+}
+
+static cyg_bool
+KeyboardInit(void)
+{
+ unsigned char c, s;
+
+ /* flush input queue */
+ while ((inb(KBSTATPORT) & KBINRDY)) {
+ (void)inb(KBDATAPORT);
+ }
+
+ /* Send self-test - controller local */
+ while (inb(KBSTATPORT) & KBOUTRDY) ;
+ outb(KBCMDPORT,0xAA);
+ while ((inb(KBSTATPORT) & KBINRDY) == 0) ; /* wait input ready */
+ if ((c = inb(KBDATAPORT)) != 0x55) {
+#ifdef DEBUG_KBD_INIT
+ diag_printf("Keyboard self test failed - result: %x\n", c);
+#endif
+ return false;
+ }
+
+ /* Enable interrupts and keyboard controller */
+ while (inb(KBSTATPORT) & KBOUTRDY) ;
+ outb(KBCMDPORT,0x60);
+ while (inb(KBSTATPORT) & KBOUTRDY) ;
+ outb(KBCMDPORT,0x45);
+ CYGACC_CALL_IF_DELAY_US(10000); // 10ms
+
+ while (inb(KBSTATPORT) & KBOUTRDY) ;
+ outb(KBCMDPORT,0xAE); // Enable keyboard
+
+ /* See if a keyboard is connected */
+ while (inb(KBSTATPORT) & KBOUTRDY) ;
+ outb(KBDATAPORT,0xFF);
+ while (((s = inb(KBSTATPORT)) & (KBINRDY|KBTXTO)) == 0) ; /* wait input ready */
+ if ((s & KBTXTO) || ((c = inb(KBDATAPORT)) != 0xFA)) {
+#ifdef DEBUG_KBD_INIT
+ diag_printf("Keyboard reset failed - no ACK: %x, stat: %x\n", c, s);
+#endif
+ return false;
+ }
+ while (((s = inb(KBSTATPORT)) & KBINRDY) == 0) ; /* wait input ready */
+ if ((s & KBTXTO) || ((c = inb(KBDATAPORT)) != 0xAA)) {
+#ifdef DEBUG_KBD_INIT
+ diag_printf("Keyboard reset failed - bad code: %x, stat: %x\n", c, s);
+#endif
+ return false;
+ }
+
+ // Set scan mode
+ while (inb(KBSTATPORT) & KBOUTRDY) ;
+ outb(KBCMDPORT,0x20);
+ while ((inb(KBSTATPORT) & KBINRDY) == 0) ; /* wait input ready */
+ if (! (inb(KBDATAPORT) & 0x40)) {
+ /*
+ * Quote from PS/2 System Reference Manual:
+ *
+ * "Address hex 0060 and address hex 0064 should be
+ * written only when the input-buffer-full bit and
+ * output-buffer-full bit in the Controller Status
+ * register are set 0." (KBINRDY and KBOUTRDY)
+ */
+
+ while (inb(KBSTATPORT) & (KBINRDY | KBOUTRDY)) ;
+ outb(KBDATAPORT,0xF0);
+ while (inb(KBSTATPORT) & (KBINRDY | KBOUTRDY)) ;
+ outb(KBDATAPORT,0x01);
+ }
+
+ KBFlags = 0;
+ return true;
+} /* KeyboardInit */
+
+//-----------------------------------------------------------------------------
+
+static CYG_BYTE
+KeyboardAscii(CYG_BYTE scancode)
+{
+ CYG_BYTE ascii = 0xFF;
+
+ // Start by handling all shift/ctl keys:
+
+ switch( scancode ) {
+ case 0xe0:
+ KBFlags |= KBExtend;
+ return 0xFF;
+
+ case 0xfa:
+ KBFlags |= KBAck;
+ return 0xFF;
+
+ case 0xfe:
+ KBFlags |= KBResend;
+ return 0xFF;
+
+ case LSHIFT:
+ KBFlags |= KBShiftL;
+ return 0xFF;
+
+ case LSHIFT | BREAK:
+ KBFlags &= ~KBShiftL;
+ return 0xFF;
+
+ case RSHIFT:
+ KBFlags |= KBShiftR;
+ return 0xFF;
+
+ case RSHIFT | BREAK:
+ KBFlags &= ~KBShiftR;
+ return 0xFF;
+
+ case CTRL:
+ if( KBFlags & KBExtend )
+ {
+ KBFlags |= KBCtrlR;
+ KBFlags &= ~KBExtend;
+ }
+ else KBFlags |= KBCtrlL;
+ return 0xFF;
+
+ case CTRL | BREAK:
+ if( KBFlags & KBExtend )
+ {
+ KBFlags &= ~KBCtrlR;
+ KBFlags &= ~KBExtend;
+ }
+ else KBFlags &= ~KBCtrlL;
+ return 0xFF;
+
+
+ case ALT:
+ if( KBFlags & KBExtend )
+ {
+ KBFlags |= KBAltR;
+ KBFlags &= ~KBExtend;
+ }
+ else KBFlags |= KBAltL;
+ return 0xFF;
+
+ case ALT | BREAK:
+ if( KBFlags & KBExtend )
+ {
+ KBFlags &= ~KBAltR;
+ KBFlags &= ~KBExtend;
+ }
+ else KBFlags &= ~KBAltL;
+ return 0xFF;
+
+ case CAPS:
+ KBFlags ^= KBCapsLock;
+ case CAPS | BREAK:
+ return 0xFF;
+
+ case NUMS:
+ KBFlags ^= KBNumLock;
+ case NUMS | BREAK:
+ return 0xFF;
+
+ case KBArrowUp:
+ case KBArrowDown:
+ screen_pan = 0;
+ lcd_refresh();
+ break;
+ case KBArrowLeft:
+ screen_pan -= SCREEN_PAN;
+ if (screen_pan < 0) screen_pan = 0;
+ lcd_refresh();
+ break;
+ case KBArrowRight:
+ screen_pan += SCREEN_PAN;
+ if (screen_pan > (SCREEN_WIDTH-SCREEN_PAN))
+ screen_pan = SCREEN_WIDTH-SCREEN_PAN;
+ lcd_refresh();
+ break;
+
+ }
+
+ // Clear Extend flag if set
+ KBFlags &= ~KBExtend;
+
+ // Ignore all other BREAK codes
+ if( scancode & 0x80 ) return 0xFF;
+
+ // Here the scancode is for something we can turn
+ // into an ASCII value
+
+ ascii = KBScanTable[scancode & 0x7F][KBIndexTab[KBFlags & KBIndex]];
+
+ return ascii;
+
+} /* KeyboardAscii */
+
+//-----------------------------------------------------------------------------
+
+static int
+KeyboardTest(void)
+{
+ // If there is a pending character, return True
+ if( KBPending != 0xFF ) return true;
+
+ // If there is something waiting at the port, get it
+ for(;;) {
+ CYG_BYTE stat, code;
+ CYG_BYTE c;
+
+ HAL_READ_UINT8( KBSTATPORT, stat );
+
+ if( (stat & KBINRDY) == 0 )
+ break;
+
+ HAL_READ_UINT8( KBDATAPORT, code );
+
+ // Translate to ASCII
+ c = KeyboardAscii(code);
+
+ // if it is a real ASCII char, save it and
+ // return True.
+ if( c != 0xFF ) {
+ KBPending = c;
+ return true;
+ }
+ }
+
+ // Otherwise return False
+ return false;
+
+} /* KeyboardTest */
+
+char
+KeyboardChar(void)
+{
+ char c = KBPending;
+ KBPending = 0xFF;
+ return c;
+}
+
+static int _timeout = 500;
+
+static cyg_bool
+lcd_comm_getc_nonblock(void* __ch_data, cyg_uint8* ch)
+{
+ if( !KeyboardTest() )
+ return false;
+ *ch = KBPending;
+ KBPending = 0xFF;
+ return true;
+}
+
+static cyg_uint8
+lcd_comm_getc(void* __ch_data)
+{
+ cyg_uint8 ch;
+
+ while (!lcd_comm_getc_nonblock(__ch_data, &ch)) ;
+ return ch;
+}
+
+static void
+lcd_comm_putc(void* __ch_data, cyg_uint8 c)
+{
+ lcd_putc(c);
+}
+
+static void
+lcd_comm_write(void* __ch_data, const cyg_uint8* __buf, cyg_uint32 __len)
+{
+#if 0
+ CYGARC_HAL_SAVE_GP();
+
+ while(__len-- > 0)
+ lcd_comm_putc(__ch_data, *__buf++);
+
+ CYGARC_HAL_RESTORE_GP();
+#endif
+}
+
+static void
+lcd_comm_read(void* __ch_data, cyg_uint8* __buf, cyg_uint32 __len)
+{
+#if 0
+ CYGARC_HAL_SAVE_GP();
+
+ while(__len-- > 0)
+ *__buf++ = lcd_comm_getc(__ch_data);
+
+ CYGARC_HAL_RESTORE_GP();
+#endif
+}
+
+static cyg_bool
+lcd_comm_getc_timeout(void* __ch_data, cyg_uint8* ch)
+{
+ int delay_count;
+ cyg_bool res;
+
+ delay_count = _timeout * 2; // delay in .5 ms steps
+ for(;;) {
+ res = lcd_comm_getc_nonblock(__ch_data, ch);
+ if (res || 0 == delay_count--)
+ break;
+ CYGACC_CALL_IF_DELAY_US(500);
+ }
+ return res;
+}
+
+static int
+lcd_comm_control(void *__ch_data, __comm_control_cmd_t __func, ...)
+{
+ static int vector = 0;
+ int ret = -1;
+ static int irq_state = 0;
+
+ CYGARC_HAL_SAVE_GP();
+
+ switch (__func) {
+ case __COMMCTL_IRQ_ENABLE:
+ ret = irq_state;
+ irq_state = 1;
+ break;
+ case __COMMCTL_IRQ_DISABLE:
+ ret = irq_state;
+ irq_state = 0;
+ break;
+ case __COMMCTL_DBG_ISR_VECTOR:
+ ret = vector;
+ break;
+ case __COMMCTL_SET_TIMEOUT:
+ {
+ va_list ap;
+
+ va_start(ap, __func);
+
+ ret = _timeout;
+ _timeout = va_arg(ap, cyg_uint32);
+
+ va_end(ap);
+ break;
+ }
+ case __COMMCTL_FLUSH_OUTPUT:
+ ret = 0;
+ break;
+ default:
+ break;
+ }
+ CYGARC_HAL_RESTORE_GP();
+ return ret;
+}
+
+static int
+lcd_comm_isr(void *__ch_data, int* __ctrlc,
+ CYG_ADDRWORD __vector, CYG_ADDRWORD __data)
+{
+#if 0
+ char ch;
+
+ cyg_drv_interrupt_acknowledge(__vector);
+ *__ctrlc = 0;
+ if (lcd_comm_getc_nonblock(__ch_data, &ch)) {
+ if (ch == 0x03) {
+ *__ctrlc = 1;
+ }
+ }
+ return CYG_ISR_HANDLED;
+#else
+ return 0;
+#endif
+}
+
+void
+lcd_comm_init(void)
+{
+ static int init = 0;
+
+ if (!init) {
+ hal_virtual_comm_table_t* comm;
+ int cur = CYGACC_CALL_IF_SET_CONSOLE_COMM(CYGNUM_CALL_IF_SET_COMM_ID_QUERY_CURRENT);
+
+ init = 1;
+ if (!KeyboardInit()) {
+ // No keyboard - no LCD/CRT display
+ return;
+ }
+
+ // Initialize screen
+ cursor_enable = true;
+ lcd_init(16);
+ lcd_on(true);
+ lcd_screen_clear();
+
+ // Setup procs in the vector table
+ CYGACC_CALL_IF_SET_CONSOLE_COMM(2); // FIXME - should be controlled by CDL
+ comm = CYGACC_CALL_IF_CONSOLE_PROCS();
+ //CYGACC_COMM_IF_CH_DATA_SET(*comm, chan);
+ CYGACC_COMM_IF_WRITE_SET(*comm, lcd_comm_write);
+ CYGACC_COMM_IF_READ_SET(*comm, lcd_comm_read);
+ CYGACC_COMM_IF_PUTC_SET(*comm, lcd_comm_putc);
+ CYGACC_COMM_IF_GETC_SET(*comm, lcd_comm_getc);
+ CYGACC_COMM_IF_CONTROL_SET(*comm, lcd_comm_control);
+ CYGACC_COMM_IF_DBG_ISR_SET(*comm, lcd_comm_isr);
+ CYGACC_COMM_IF_GETC_TIMEOUT_SET(*comm, lcd_comm_getc_timeout);
+
+ // Restore original console
+ CYGACC_CALL_IF_SET_CONSOLE_COMM(cur);
+ }
+}
+
+#ifdef CYGPKG_REDBOOT
+#include <redboot.h>
+
+// Get here when RedBoot is idle. If it's been long enough, then
+// dim the LCD. The problem is - how to determine other activities
+// so at this doesn't get in the way. In the default case, this will
+// be called from RedBoot every 10ms (CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT)
+
+#define MAX_IDLE_TIME (30*100)
+
+static void
+idle(bool is_idle)
+{
+ static int idle_time = 0;
+ static bool was_idled = false;
+
+ if (is_idle) {
+ if (!was_idled) {
+ if (++idle_time == MAX_IDLE_TIME) {
+ was_idled = true;
+ lcd_on(false);
+ }
+ }
+ } else {
+ idle_time = 0;
+ if (was_idled) {
+ was_idled = false;
+ lcd_on(true);
+ }
+ }
+}
+
+RedBoot_idle(idle, RedBoot_AFTER_NETIO);
+#endif
+#endif
Index: hal/powerpc/csb281/current/src/sed1356_16bit.h
===================================================================
RCS file: hal/powerpc/csb281/current/src/sed1356_16bit.h
diff -N hal/powerpc/csb281/current/src/sed1356_16bit.h
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ hal/powerpc/csb281/current/src/sed1356_16bit.h 1 Feb 2003 18:08:56 -0000
@@ -0,0 +1,651 @@
+//------------------------------------------------------------------------
+// sed1356.h: SED1356 LCD/CRT Controllers - 16-Bit access mode
+//
+// Copyright (C) 2003 Gary Thomas
+
+//------------------------------------------------
+// Bit position defines
+#define BIT0 0x00000001
+#define BIT1 0x00000002
+#define BIT2 0x00000004
+#define BIT3 0x00000008
+#define BIT4 0x00000010
+#define BIT5 0x00000020
+#define BIT6 0x00000040
+#define BIT7 0x00000080
+#define BIT8 0x00000100
+#define BIT9 0x00000200
+#define BIT10 0x00000400
+#define BIT11 0x00000800
+#define BIT12 0x00001000
+#define BIT13 0x00002000
+#define BIT14 0x00004000
+#define BIT15 0x00008000
+#define BIT16 0x00010000
+#define BIT17 0x00020000
+#define BIT18 0x00040000
+#define BIT19 0x00080000
+#define BIT20 0x00100000
+#define BIT21 0x00200000
+#define BIT22 0x00400000
+#define BIT23 0x00800000
+#define BIT24 0x01000000
+#define BIT25 0x02000000
+#define BIT26 0x04000000
+#define BIT27 0x08000000
+#define BIT28 0x10000000
+#define BIT29 0x20000000
+#define BIT30 0x40000000
+#define BIT31 0x80000000
+
+
+//------------------------------------------------------------------------
+// cpu specific code must define the following board specific macros.
+// in cpuio.h. These examples assume the SED135x has been placed in
+// the correct endian mode via hardware.
+// #define SED_MEM_BASE 0xf0600000 <-- just example addresses,
+// #define SED_REG_BASE 0xf0400000 <-- define for each board
+// #define SED_STEP 1 <-- 1 = device is on 16-bit boundry, 2 = 32-bit boundry, 4 = 64-bit boundry
+// #define SED_REG16(_x_) *(vushortr *)(SED_REG_BASE + (_x_ * SED_STEP)) // Control/Status Registers
+// #define RD_FB16(_reg_,_val_) ((_val_) = *((vushort *)((SED_MEM_BASE + (_reg_ * SED_STEP)))))
+// #define WR_FB16(_reg_,_val_) (*((vushort *)((SED_MEM_BASE + (_reg_ * 2)))) = (_val_))
+// Big endian processors
+// #define H2SED(_x_) ((((x) & 0xff00U) >> 8) | (((x) & 0x00ffU) << 8))
+// Little endian
+// #define H2SED(_x_) (_x_)
+
+
+// ----------------------------------------------------------
+// SED1356 registers - 16-Bit Access Mode. The first register
+// referenced is the even addressed register. The byte offsets
+// of the odd registers are shown in the comments
+#define SED1356_REG_REV_and_MISC SED_REG16(0x00)
+// #define SED1356_REG_MISC SED_REG(0x01)
+#define SED1356_REG_GPIO_CFG SED_REG16(0x04)
+#define SED1356_REG_GPIO_CTL SED_REG16(0x08)
+#define SED1356_REG_MD_CFG_RD_LO_and_HI SED_REG16(0x0c)
+// #define SED1356_REG_MD_CFG_RD_HI SED_REG(0x0d)
+#define SED1356_REG_MCLK_CFG SED_REG16(0x10)
+#define SED1356_REG_LCD_PCLK_CFG SED_REG16(0x14)
+#define SED1356_REG_CRT_PCLK_CFG SED_REG16(0x18)
+#define SED1356_REG_MEDIA_PCLK_CFG SED_REG16(0x1c)
+#define SED1356_REG_WAIT_STATE SED_REG16(0x1e)
+#define SED1356_REG_MEM_CFG_and_REF_RATE SED_REG16(0x20)
+// #define SED1356_REG_REF_RATE SED_REG(0x21)
+#define SED1356_REG_MEM_TMG0_and_1 SED_REG16(0x2a)
+// #define SED1356_REG_MEM_TMG1 SED_REG(0x2b)
+#define SED1356_REG_PANEL_TYPE_and_MOD_RATE SED_REG16(0x30)
+// #define SED1356_REG_MOD_RATE SED_REG(0x31)
+// LCD Control registers
+#define SED1356_REG_LCD_HOR_DISP SED_REG16(0x32)
+#define SED1356_REG_LCD_HOR_NONDISP_and_START SED_REG16(0x34)
+// #define SED1356_REG_LCD_HOR_START SED_REG(0x35)
+#define SED1356_REG_LCD_HOR_PULSE SED_REG16(0x36)
+#define SED1356_REG_LCD_VER_DISP_HT_LO_and_HI SED_REG16(0x38)
+// #define SED1356_REG_LCD_VER_DISP_HT_HI SED_REG(0x39)
+#define SED1356_REG_LCD_VER_NONDISP_and_START SED_REG16(0x3a)
+// #define SED1356_REG_LCD_VER_START SED_REG(0x3b)
+#define SED1356_REG_LCD_VER_PULSE SED_REG16(0x3c)
+#define SED1356_REG_LCD_DISP_MODE_and_MISC SED_REG16(0x40)
+// #define SED1356_REG_LCD_MISC SED_REG(0x41)
+#define SED1356_REG_LCD_DISP_START_LO_and_MID SED_REG16(0x42)
+// #define SED1356_REG_LCD_DISP_START_MID SED_REG(0x43)
+#define SED1356_REG_LCD_DISP_START_HI SED_REG16(0x44)
+#define SED1356_REG_LCD_ADD_OFFSET_LO_and_HI SED_REG16(0x46)
+// #define SED1356_REG_LCD_ADD_OFFSET_HI SED_REG(0x47)
+#define SED1356_REG_LCD_PIXEL_PAN SED_REG16(0x48)
+#define SED1356_REG_LCD_FIFO_THRESH_LO_and_HI SED_REG16(0x4a)
+// #define SED1356_REG_LCD_FIFO_LO_THRES SED_REG(0x4b)
+// CRT/TV Control registers
+#define SED1356_REG_CRT_HOR_DISP SED_REG16(0x50)
+#define SED1356_REG_CRT_HOR_NONDISP_and_START SED_REG16(0x52)
+// #define SED1356_REG_CRT_HOR_START SED_REG(0x53)
+#define SED1356_REG_CRT_HOR_PULSE SED_REG16(0x54)
+#define SED1356_REG_CRT_VER_DISP_HT_LO_and_HI SED_REG16(0x56)
+// #define SED1356_REG_CRT_VER_DISP_HT_HI SED_REG(0x57)
+#define SED1356_REG_CRT_VER_NONDISP_and_START SED_REG16(0x58)
+
+// #define SED1356_REG_CRT_VER_START SED_REG(0x59)
+#define SED1356_REG_CRT_VER_PULSE_and_OUT_CTL SED_REG16(0x5a)
+// #define SED1356_REG_CRT_OUT_CTL SED_REG(0x5b)
+#define SED1356_REG_CRT_DISP_MODE SED_REG16(0x60)
+#define SED1356_REG_CRT_DISP_START_LO_and_MID SED_REG16(0x62)
+// #define SED1356_REG_CRT_DISP_START_MID SED_REG(0x63)
+#define SED1356_REG_CRT_DISP_START_HI SED_REG16(0x64)
+#define SED1356_REG_CRT_ADD_OFFSET_LO_and_HI SED_REG16(0x66)
+// #define SED1356_REG_CRT_ADD_OFFSET_HI SED_REG(0x67)
+#define SED1356_REG_CRT_PIXEL_PAN SED_REG16(0x68)
+#define SED1356_REG_CRT_FIFO_THRESH_LO_and_HI SED_REG16(0x6a)
+// #define SED1356_REG_CRT_FIFO_LO_THRES SED_REG(0x6b)
+
+// LCD Cursor Control Registers
+#define SED1356_REG_LCD_CURSOR_CTL_and_START_ADD SED_REG16(0x70)
+// #define SED1356_REG_LCD_CURSOR_START_ADD SED_REG(0x71)
+#define SED1356_REG_LCD_CURSOR_X_POS_LO_and_HI SED_REG16(0x72)
+// #define SED1356_REG_LCD_CURSOR_X_POS_HI SED_REG(0x73)
+#define SED1356_REG_LCD_CURSOR_Y_POS_LO_and_HI SED_REG16(0x74)
+// #define SED1356_REG_LCD_CURSOR_Y_POS_HI SED_REG(0x75)
+#define SED1356_REG_LCD_CURSOR_BLUE_and_GREEN_CLR_0 SED_REG16(0x76)
+// #define SED1356_REG_LCD_CURSOR_GREEN_CLR_0 SED_REG(0x77)
+#define SED1356_REG_LCD_CURSOR_RED_CLR_0 SED_REG16(0x78)
+#define SED1356_REG_LCD_CURSOR_BLUE_and_GREEN_CLR_1 SED_REG16(0x7a)
+// #define SED1356_REG_LCD_CURSOR_GREEN_CLR_1 SED_REG(0x7b)
+#define SED1356_REG_LCD_CURSOR_RED_CLR_1 SED_REG16(0x7c)
+#define SED1356_REG_LCD_CURSOR_FIFO_THRESH SED_REG16(0x7e)
+
+// CRT Cursor Control Registers
+#define SED1356_REG_CRT_CURSOR_CTL_and_START_ADD SED_REG16(0x80)
+// #define SED1356_REG_CRT_CURSOR_START_ADD SED_REG(0x81)
+#define SED1356_REG_CRT_CURSOR_X_POS_LO_and_HI SED_REG16(0x82)
+// #define SED1356_REG_CRT_CURSOR_X_POS_HI SED_REG(0x83)
+#define SED1356_REG_CRT_CURSOR_Y_POS_LO_and_HI SED_REG16(0x84)
+// #define SED1356_REG_CRT_CURSOR_Y_POS_HI SED_REG(0x85)
+#define SED1356_REG_CRT_CURSOR_BLUE_and_GREEN_CLR_0 SED_REG16(0x86)
+// #define SED1356_REG_CRT_CURSOR_GREEN_CLR_0 SED_REG(0x87)
+#define SED1356_REG_CRT_CURSOR_RED_CLR_0 SED_REG16(0x88)
+#define SED1356_REG_CRT_CURSOR_BLUE_and_GREEN_CLR_1 SED_REG16(0x8a)
+// #define SED1356_REG_CRT_CURSOR_GREEN_CLR_1 SED_REG(0x8b)
+#define SED1356_REG_CRT_CURSOR_RED_CLR_1 SED_REG16(0x8c)
+#define SED1356_REG_CRT_CURSOR_FIFO_THRESH SED_REG16(0x8e)
+
+// BitBlt Control Registers
+#define SED1356_REG_BLT_CTL_0_and_1 SED_REG16(0x100)
+// #define SED1356_REG_BLT_CTL_1 SED_REG(0x101)
+#define SED1356_REG_BLT_ROP_CODE_and_BLT_OP SED_REG16(0x102)
+// #define SED1356_REG_BLT_OP SED_REG(0x103)
+#define SED1356_REG_BLT_SRC_START_LO_and_MID SED_REG16(0x104)
+// #define SED1356_REG_BLT_SRC_START_MID SED_REG(0x105)
+#define SED1356_REG_BLT_SRC_START_HI SED_REG16(0x106)
+#define SED1356_REG_BLT_DEST_START_LO_and_MID SED_REG16(0x108)
+// #define SED1356_REG_BLT_DEST_START_MID SED_REG(0x109)
+#define SED1356_REG_BLT_DEST_START_HI SED_REG16(0x10a)
+#define SED1356_REG_BLT_ADD_OFFSET_LO_and_HI SED_REG16(0x10c)
+// #define SED1356_REG_BLT_ADD_OFFSET_HI SED_REG(0x10d)
+#define SED1356_REG_BLT_WID_LO_and_HI SED_REG16(0x110)
+// #define SED1356_REG_BLT_WID_HI SED_REG(0x111)
+#define SED1356_REG_BLT_HGT_LO_and_HI SED_REG16(0x112)
+// #define SED1356_REG_BLT_HGT_HI SED_REG(0x113)
+#define SED1356_REG_BLT_BG_CLR_LO_and_HI SED_REG16(0x114)
+// #define SED1356_REG_BLT_BG_CLR_HI SED_REG(0x115)
+#define SED1356_REG_BLT_FG_CLR_LO_and_HI SED_REG16(0x118)
+// #define SED1356_REG_BLT_FG_CLR_HI SED_REG(0x119)
+
+// Look-Up Table Control Registers
+#define SED1356_REG_LUT_MODE SED_REG16(0x1e0)
+#define SED1356_REG_LUT_ADD SED_REG16(0x1e2)
+#define SED1356_REG_LUT_DATA SED_REG16(0x1e4)
+
+// Power and Miscellaneous Control Registers
+#define SED1356_REG_PWR_CFG_and_STAT SED_REG16(0x1f0)
+// #define SED1356_REG_PWR_STAT SED_REG(0x1f1)
+#define SED1356_REG_WATCHDOG_CTL SED_REG16(0x1f4)
+#define SED1356_REG_DISP_MODE SED_REG16(0x1fc)
+
+
+//------------------------------------------------------------------------------------------------------------
+
+// Bit Assignments - Little Endian, Use H2SED() macro to access
+
+//
+
+// SED1356_REG_REV_and_MISC - even
+#define SED1356_REV_ID_MASK 0xfc
+// ID bits - masks off the rev bits
+#define SED1356_REV_ID_1356 BIT4
+#define SED1356_REV_ID_1355 BIT3
+
+
+// SED1356_REG_REV_and_MISC - odd
+#define SED1356_MISC_HOST_DIS BIT7 << 8
+// 0 = enable host access, 1 = disable
+
+
+// SED1356_REG_GPIO_CFG and SED1356_REG_GPIO_STAT
+#define SED1356_GPIO_GPIO3 BIT3
+// 0 = input, 1 = output, if configured as GPIO
+#define SED1356_GPIO_GPIO2 BIT2
+#define SED1356_GPIO_GPIO1 BIT1
+
+
+// SED1356_REG_MCLK_CFG
+#define SED1356_MCLK_DIV2 BIT4
+#define SED1356_MCLK_SRC_BCLK BIT0
+#define SED1356_MCLK_SRC_CLKI 0x00
+
+
+// SED1356_REG_LCD_PCLK_CFG, SED1356_REG_CRT_PCLK_CFG
+
+// and SED1356_REG_MEDIA_PCLK_CFG
+#define SED1356_PCLK_X2 BIT7
+// SED1356_REG_CRT_PCLK_CFG only
+#define SED1356_PCLK_DIV1 0x00 << 4
+#define SED1356_PCLK_DIV2 0x01 << 4
+#define SED1356_PCLK_DIV3 0x02 << 4
+#define SED1356_PCLK_DIV4 0x03 << 4
+#define SED1356_PCLK_SRC_CLKI 0x00
+#define SED1356_PCLK_SRC_BCLK 0x01
+#define SED1356_PCLK_SRC_CLKI2 0x02
+#define SED1356_PCLK_SRC_MCLK 0x03
+
+
+// SED1356_REG_MEM_CFG_and_REF_RATE - even
+#define SED1356_MEM_CFG_2CAS_EDO 0x00
+#define SED1356_MEM_CFG_2CAS_FPM 0x01
+#define SED1356_MEM_CFG_2WE_EDO 0x02
+#define SED1356_MEM_CFG_2WE_FPM 0x03
+#define SED1356_MEM_CFG_MASK 0x03
+
+
+// SED1356_REG_MEM_CFG_and_REF_RATE - odd
+#define SED1356_REF_TYPE_CBR 0x00 << 6 << 8
+#define SED1356_REF_TYPE_SELF 0x01 << 6 << 8
+#define SED1356_REF_TYPE_NONE 0x02 << 6 << 8
+#define SED1356_REF_TYPE_MASK 0x03 << 6 << 8
+#define SED1356_REF_RATE_64 0x00 << 0 << 8
+// MCLK / 64
+#define SED1356_REF_RATE_128 0x01 << 0 << 8
+// MCLK / 128
+#define SED1356_REF_RATE_256 0x02 << 0 << 8
+// MCLK / 256
+#define SED1356_REF_RATE_512 0x03 << 0 << 8
+// MCLK / 512
+#define SED1356_REF_RATE_1024 0x04 << 0 << 8
+// MCLK / 1024
+#define SED1356_REF_RATE_2048 0x05 << 0 << 8
+// MCLK / 2048
+#define SED1356_REF_RATE_4096 0x06 << 0 << 8
+// MCLK / 4096
+#define SED1356_REF_RATE_8192 0x07 << 0 << 8
+// MCLK / 8192
+#define SED1356_REF_RATE_MASK 0x07 << 0 << 8
+// MCLK / 8192
+
+
+// SED1356_REG_MEM_TMG0_and_1 - even
+#define SED1356_MEM_TMG0_EDO50_MCLK40 0x01
+#define SED1356_MEM_TMG0_EDO50_MCLK33 0x01
+#define SED1356_MEM_TMG0_EDO60_MCLK33 0x01
+#define SED1356_MEM_TMG0_EDO50_MCLK30 0x12
+#define SED1356_MEM_TMG0_EDO60_MCLK30 0x01
+#define SED1356_MEM_TMG0_EDO70_MCLK30 0x00
+#define SED1356_MEM_TMG0_EDO50_MCLK25 0x12
+#define SED1356_MEM_TMG0_EDO60_MCLK25 0x12
+#define SED1356_MEM_TMG0_EDO70_MCLK25 0x01
+#define SED1356_MEM_TMG0_EDO80_MCLK25 0x00
+#define SED1356_MEM_TMG0_EDO50_MCLK20 0x12
+#define SED1356_MEM_TMG0_EDO60_MCLK20 0x12
+#define SED1356_MEM_TMG0_EDO70_MCLK20 0x12
+#define SED1356_MEM_TMG0_EDO80_MCLK20 0x01
+#define SED1356_MEM_TMG0_FPM50_MCLK25 0x12
+#define SED1356_MEM_TMG0_FPM60_MCLK25 0x01
+#define SED1356_MEM_TMG0_FPM50_MCLK20 0x12
+#define SED1356_MEM_TMG0_FPM60_MCLK20 0x12
+#define SED1356_MEM_TMG0_FPM70_MCLK20 0x11
+#define SED1356_MEM_TMG0_FPM80_MCLK20 0x01
+
+
+// SED1356_REG_MEM_TMG0_and_1 - odd
+#define SED1356_MEM_TMG1_EDO50_MCLK40 0x01 << 8
+#define SED1356_MEM_TMG1_EDO50_MCLK33 0x01 << 8
+#define SED1356_MEM_TMG1_EDO60_MCLK33 0x01 << 8
+#define SED1356_MEM_TMG1_EDO50_MCLK30 0x02 << 8
+#define SED1356_MEM_TMG1_EDO60_MCLK30 0x01 << 8
+#define SED1356_MEM_TMG1_EDO70_MCLK30 0x00 << 8
+#define SED1356_MEM_TMG1_EDO50_MCLK25 0x02 << 8
+#define SED1356_MEM_TMG1_EDO60_MCLK25 0x02 << 8
+#define SED1356_MEM_TMG1_EDO70_MCLK25 0x01 << 8
+#define SED1356_MEM_TMG1_EDO80_MCLK25 0x01 << 8
+#define SED1356_MEM_TMG1_EDO50_MCLK20 0x02 << 8
+#define SED1356_MEM_TMG1_EDO60_MCLK20 0x02 << 8
+#define SED1356_MEM_TMG1_EDO70_MCLK20 0x02 << 8
+#define SED1356_MEM_TMG1_EDO80_MCLK20 0x01 << 8
+#define SED1356_MEM_TMG1_FPM50_MCLK25 0x02 << 8
+#define SED1356_MEM_TMG1_FPM60_MCLK25 0x01 << 8
+#define SED1356_MEM_TMG1_FPM50_MCLK20 0x02 << 8
+#define SED1356_MEM_TMG1_FPM60_MCLK20 0x02 << 8
+#define SED1356_MEM_TMG1_FPM70_MCLK20 0x02 << 8
+#define SED1356_MEM_TMG1_FPM80_MCLK20 0x01 << 8
+
+
+
+// Bit definitions
+
+//
+
+// SED1356_REG_PANEL_TYPE_AND_MOD_RATE - even
+#define SED1356_PANEL_TYPE_EL BIT7
+#define SED1356_PANEL_TYPE_4_9 (0x00 << 4)
+// Passive 4-Bit, TFT 9-Bit
+#define SED1356_PANEL_TYPE_8_12 (0x01 << 4)
+// Passive 8-Bit, TFT 12-Bit
+#define SED1356_PANEL_TYPE_16 (0x02 << 4)
+// Passive 16-Bit, or TFT 18-Bit
+#define SED1356_PANEL_TYPE_MASK (0x03 << 4)
+#define SED1356_PANEL_TYPE_FMT BIT3
+// 0 = Passive Format 1, 1 = Passive Format 2
+#define SED1356_PANEL_TYPE_CLR BIT2
+// 0 = Passive Mono, 1 = Passive Color
+#define SED1356_PANEL_TYPE_DUAL BIT1
+// 0 = Passive Single, 1 = Passive Dual
+#define SED1356_PANEL_TYPE_TFT BIT0
+// 0 = Passive, 1 = TFT (DUAL, FMT & CLR are don't cares)
+
+
+// SED1356_REG_CRT_HOR_PULSE, SED1356_REG_CRT_VER_PULSE,
+
+// SED1356_REG_LCD_HOR_PULSE and SED1356_REG_LCD_VER_PULSE
+#define SED1356_PULSE_POL_HIGH BIT7
+// 0 = CRT/TFT Pulse is Low, Passive is High, 1 = CRT/TFT Pulse is High, Passive is Low
+#define SED1356_PULSE_POL_LOW 0x00
+// 0 = CRT/TFT Pulse is Low, Passive is High, 1 = CRT/TFT Pulse is High, Passive is Low
+#define SED1356_PULSE_WID(_x_) (_x_ & 0x0f)
+// Pulse Width in Pixels
+
+
+// SED1356_LCD_DISP_MODE_and_MISC - even
+#define SED1356_LCD_DISP_BLANK BIT7
+// 1 = Blank LCD Display
+#define SED1356_LCD_DISP_SWIV_NORM (0x00 << 4)
+// Used with SED1356_REG_DISP_MODE Bit 6
+#define SED1356_LCD_DISP_SWIV_90 (0x00 << 4)
+#define SED1356_LCD_DISP_SWIV_180 (0x01 << 4)
+#define SED1356_LCD_DISP_SWIV_270 (0x01 << 4)
+#define SED1356_LCD_DISP_SWIV_MASK (0x01 << 4)
+#define SED1356_LCD_DISP_16BPP 0x05
+// Bit Per Pixel Selection
+#define SED1356_LCD_DISP_15BPP 0x04
+#define SED1356_LCD_DISP_8BPP 0x03
+#define SED1356_LCD_DISP_4BPP 0x02
+#define SED1356_LCD_DISP_BPP_MASK 0x07
+
+
+// SED1356_LCD_DISP_MODE_and_MISC - odd
+#define SED1356_LCD_MISC_DITH BIT1 << 8
+// 1 = Dither Disable, Passive Panel Only
+#define SED1356_LCD_MISC_DUAL BIT0 << 8
+// 1 = Dual Panel Disable, Passive Panel Only
+
+
+// SED1356_REG_CRT_VER_PULSE_and_OUT_CTL - odd
+#define SED1356_CRT_OUT_CHROM BIT5 << 8
+// 1 = TV Chrominance Filter Enable
+#define SED1356_CRT_OUT_LUM BIT4 << 8
+// 1 = TV Luminance Filter Enable
+#define SED1356_CRT_OUT_DAC_LVL BIT3 << 8
+// 1 = 4.6ma IREF, 0 = 9.2 IREF
+#define SED1356_CRT_OUT_SVIDEO BIT1 << 8
+// 1 = S-Video Output, 0 = Composite Video Output
+#define SED1356_CRT_OUT_PAL BIT0 << 8
+// 1 = PAL Format Output, 0 = NTSC Format Output
+
+
+// SED1356_REG_CRT_DISP_MODE
+#define SED1356_CRT_DISP_BLANK BIT7
+// 1 = Blank CRT Display
+#define SED1356_CRT_DISP_16BPP 0x05
+// Bit Per Pixel Selection
+#define SED1356_CRT_DISP_15BPP 0x04
+#define SED1356_CRT_DISP_8BPP 0x03
+#define SED1356_CRT_DISP_4BPP 0x02
+#define SED1356_CRT_DISP_BPP_MASK 0x07
+
+
+// SED1356_DISP_MODE
+#define SED1356_DISP_SWIV_NORM (0x00 << 6)
+// Used with SED1356_LCD_DISP_MODE Bit 4
+#define SED1356_DISP_SWIV_90 (0x01 << 6)
+#define SED1356_DISP_SWIV_180 (0x00 << 6)
+#define SED1356_DISP_SWIV_270 (0x01 << 6)
+#define SED1356_DISP_MODE_OFF 0x00
+// All Displays Off
+#define SED1356_DISP_MODE_LCD 0x01
+// LCD Only
+#define SED1356_DISP_MODE_CRT 0x02
+// CRT Only
+#define SED1356_DISP_MODE_LCD_CRT 0x03
+// Simultaneous LCD and CRT
+#define SED1356_DISP_MODE_TV 0x04
+// TV Only, Flicker Filter Off
+#define SED1356_DISP_MODE_TV_LCD 0x05
+// Simultaneous LCD and TV, Flicker Filter Off
+#define SED1356_DISP_MODE_TV_FLICK 0x06
+// TV Only, Flicker Filter On
+#define SED1356_DISP_MODE_TV_LCD_FLICK 0x07
+// Simultaneous LCD and TV, Flicker Filter On
+
+
+// SED1356_REG_PWR_CFG and SED1356_REG_PWR_STAT
+#define SED1356_PWR_PCLK BIT1
+// SED1356_REG_PWR_STAT only
+#define SED1356_PWR_MCLK BIT0
+
+
+// SED1356_REG_VER_NONDISP
+#define SED1356_VER_NONDISP BIT7
+// vertical retrace status 1 = in retrace
+
+
+// Display size defines
+#define PIXELS_PER_ROW 640
+#define PIXELS_PER_COL 480
+#define BYTES_PER_PIXEL 2
+#define COLS_PER_SCREEN 80
+#define ROWS_PER_SCREEN 30
+
+
+// 16-bit pixels are RGB 565 - LSB of RED and BLUE are tied low at the
+
+// LCD Interface, while the LSB of GREEN is loaded as 0
+#define RED_SUBPIXEL(n) ((n & 0x1f) << 11)
+#define GREEN_SUBPIXEL(n) ((n & 0x1f) << 5)
+#define BLUE_SUBPIXEL(n) ((n & 0x1f) << 0)
+
+
+// define a simple VGA style 16-color pallette
+#define LU_BLACK (RED_SUBPIXEL(0x00) | GREEN_SUBPIXEL(0x00) | BLUE_SUBPIXEL(0x00))
+#define LU_BLUE (RED_SUBPIXEL(0x00) | GREEN_SUBPIXEL(0x00) | BLUE_SUBPIXEL(0x0f))
+#define LU_GREEN (RED_SUBPIXEL(0x00) | GREEN_SUBPIXEL(0x0f) | BLUE_SUBPIXEL(0x00))
+#define LU_CYAN (RED_SUBPIXEL(0x00) | GREEN_SUBPIXEL(0x0f) | BLUE_SUBPIXEL(0x0f))
+#define LU_RED (RED_SUBPIXEL(0x0f) | GREEN_SUBPIXEL(0x00) | BLUE_SUBPIXEL(0x00))
+#define LU_VIOLET (RED_SUBPIXEL(0x0f) | GREEN_SUBPIXEL(0x00) | BLUE_SUBPIXEL(0x0f))
+#define LU_YELLOW (RED_SUBPIXEL(0x0f) | GREEN_SUBPIXEL(0x0f) | BLUE_SUBPIXEL(0x00))
+#define LU_GREY (RED_SUBPIXEL(0x0f) | GREEN_SUBPIXEL(0x0f) | BLUE_SUBPIXEL(0x0f))
+#define LU_WHITE (RED_SUBPIXEL(0x17) | GREEN_SUBPIXEL(0x17) | BLUE_SUBPIXEL(0x17))
+#define LU_BRT_BLUE (RED_SUBPIXEL(0x00) | GREEN_SUBPIXEL(0x00) | BLUE_SUBPIXEL(0x1f))
+#define LU_BRT_GREEN (RED_SUBPIXEL(0x00) | GREEN_SUBPIXEL(0x1f) | BLUE_SUBPIXEL(0x00))
+#define LU_BRT_CYAN (RED_SUBPIXEL(0x00) | GREEN_SUBPIXEL(0x1f) | BLUE_SUBPIXEL(0x1f))
+#define LU_BRT_RED (RED_SUBPIXEL(0x1f) | GREEN_SUBPIXEL(0x00) | BLUE_SUBPIXEL(0x00))
+#define LU_BRT_VIOLET (RED_SUBPIXEL(0x1f) | GREEN_SUBPIXEL(0x00) | BLUE_SUBPIXEL(0x1f))
+#define LU_BRT_YELLOW (RED_SUBPIXEL(0x1f) | GREEN_SUBPIXEL(0x1f) | BLUE_SUBPIXEL(0x00))
+#define LU_BRT_WHITE (RED_SUBPIXEL(0x1f) | GREEN_SUBPIXEL(0x1f) | BLUE_SUBPIXEL(0x1f))
+
+static const ushort vga_lookup[] = {
+LU_BLACK,
+// 0
+LU_BLUE,
+// 1
+LU_GREEN,
+// 2
+LU_CYAN,
+// 3
+LU_RED,
+// 4
+LU_GREY,
+// 5
+LU_VIOLET,
+// 6
+LU_YELLOW,
+// 7
+LU_WHITE,
+// 8
+LU_BRT_BLUE,
+// 9
+LU_BRT_GREEN,
+// 10
+LU_BRT_CYAN,
+// 11
+LU_BRT_RED,
+// 12
+LU_BRT_VIOLET,
+// 13
+LU_BRT_YELLOW,
+// 14
+LU_BRT_WHITE
+// 15
+};
+
+
+// default foreground and background colors
+#define SED_BG_DEF 1
+#define SED_FG_DEF 14
+
+
+// Vertical and Horizontal Pulse, Start and Non-Display values vary depending
+
+// upon the mode. The following section gives some insight into how the
+
+// values are arrived at.
+
+// ms = milliseconds, us = microseconds, ns = nanoseconds
+
+// Mhz = Megaherz, Khz = Kiloherz, Hz = Herz
+
+//
+
+// ***************************************************************************************************
+
+// CRT Mode is 640x480 @ 72Hz VESA compatible timing. PCLK = 31.5Mhz (31.75ns)
+
+// ***************************************************************************************************
+
+//
+
+// CRT MODE HORIZONTAL TIMING PARAMETERS
+
+//
+
+// |<-------Tha------->|
+
+// |___________________| ______
+
+// Display Enable _____________________| |____________________|
+
+// | |
+
+// Horizontal Pulse __ ________|___________________|________ __________
+
+// |_________| | | |________|
+
+// |<- Thp ->| | | |
+
+// | |<-Thbp->| | |
+
+// | |<-Thfp->|
+
+// |<----------------------Tht-------------------->|
+
+//
+
+// Tha - Active Display Time = 640 pixels
+
+// Thp - Horizontal Pulse = 1.27us/31.75ns = 40 pixels
+
+// Thbp - Horizontal Front Porch = 1.016us/31.75ns = 32 pixels
+
+// Thfp - Horizontal Back Porch = 3.8us/31.75ns = 120 pixels
+
+// Tht - Total Horizontal Time = 832 pixels x 32.75ns/pixel = 26.416us or 38.785Khz
+
+//
+
+// Correlation between horizontal timing parameters and SED registers
+#define SED_HOR_PULSE_WIDTH_CRT 0x07
+// Horizontal Pulse Width Register = (Thp/8) - 1
+#define SED_HOR_PULSE_START_CRT 0x02
+// Horizontal Pulse Start Position Register = ((Thfp + 2)/8) - 1
+#define SED_HOR_NONDISP_CRT 0x17
+// Horizontal Non-Display Period Register = ((Thp + Thfp + Thbp)/8) - 1
+//
+// CRT MODE VERTICAL TIMING PARAMTERS
+//
+// |<-------Tva------->|
+// |___________________| ______
+// Display Enable _____________________| |_____________________|
+// | |
+// Vertical Pulse __ ________|___________________|________ __________
+// |_________| | | |________|
+// |<- Tvp ->| | | |
+// | |<-Tvbp->| | |
+// | |<-Tvfp->|
+// |<----------------------Tvt-------------------->|
+//
+// Tva - Active Display Time = 480 lines
+// Tvp - Vertical Pulse = 3 lines
+// Tvfp - Vertical Front Porch = 9 lines
+// Tvbp - Vertical Back Porch = 28 lines
+// Tvt - Total Horizontal Time = 520 lines x 26.416us/line = 13.73632ms or 72.8Hz
+
+//
+
+// Correlation between vertical timing parameters and SED registers
+#define SED_VER_PULSE_WIDTH_CRT 0x02 // VRTC/FPFRAME Pulse Width Register = Tvp - 1
+#define SED_VER_PULSE_START_CRT 0x08 // VRTC/FPFRAME Start Position Register = Tvfp - 1
+#define SED_VER_NONDISP_CRT 0x27 // Vertical Non-Display Period Register = (Tvp + Tvfp + Tvbp) - 1
+
+//
+
+// ***************************************************************************************************
+// DUAL LCD Mode is 640x480 @ 60Hz VGA compatible timing. PCLK = 25.175Mhz (39.722ns)
+// ***************************************************************************************************
+//
+// LCD MODE HORIZONTAL TIMING PARAMTERS
+//
+// |<-------Tha------->|
+// |___________________| ______
+// Display Enable _____________________| |____________________|
+// | |
+// Horizontal Pulse __ ________|___________________|________ __________
+// |_________| | | |________|
+// |<- Thp ->| | | |
+// | |<-Thbp->| | |
+// | |<-Thfp->|
+// |<----------------------Tht-------------------->|
+//
+// Tha - Active Display Time = 640 pixels
+// Thp - Horizontal Pulse = 3.8us/39.72ns = 96 pixels
+// Thfp - Horizontal Front Porch = .595us/39.72ns = 16 pixels
+// Thbp - Horizontal Backporch = 1.9us/39.72ns = 48 pixels
+// Tht - Total Horizontal Time = = 800 pixels @ 39.72ns/pixel = 31.776us or 31.47Khz
+
+//
+
+// Correlation between horizontal timing parameters and SED registers
+#define SED_HOR_PULSE_WIDTH_LCD 0x0b // HRTC/FPLINE Pulse Width Register = (Thp/8) - 1
+#define SED_HOR_PULSE_START_LCD 0x02 // HRTC/FPLINE Start Position Register = (Thfp/8) - 2
+#define SED_HOR_NONDISP_LCD 0x13 // Horizontal Non-Display Period Register = ((Thp + Thfp + Thbp)/8) - 1
+
+//
+// LCD MODE VERTICAL TIMING PARAMTERS
+//
+// |<-------Tva------->|
+// |___________________| ______
+// Display Enable _____________________| |_____________________|
+// | |
+// Vertical Pulse __ ________|___________________|________ __________
+// |_________| | | |________|
+// |<- Tvp ->| | | |
+// | |<-Tvbp->| | |
+// | |<-Tvfp->|
+// |<----------------------Tvt-------------------->|
+//
+// Tva - Active Display Time = 480 lines
+// Tvp - Vertical Pulse = 2 lines
+// Tvfp - Vertical Front Porch = 10 lines
+// Tvbp - Vertical Backporch = 33 lines
+// Tvt - Total Horizontal Time = 525 lines @ 31.776us/line = 16.682ms or 60Hz
+
+//
+// Correlation between vertical timing parameters and SED registers
+#define SED_VER_PULSE_WIDTH_LCD 0x01 // VRTC/FPFRAME Pulse Width Register = Tvp - 1
+#define SED_VER_PULSE_START_LCD 0x09 // VRTC/FPFRAME Start Position Register = Tvfp - 1
+#define SED_VER_NONDISP_LCD 0x2c // Vertical Non-Display Period Register = (Tvp + Tvfp + Tvbp) - 1
Index: hal/powerpc/csb281/current/src/sed135x_16bit.c
===================================================================
RCS file: hal/powerpc/csb281/current/src/sed135x_16bit.c
diff -N hal/powerpc/csb281/current/src/sed135x_16bit.c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ hal/powerpc/csb281/current/src/sed135x_16bit.c 1 Feb 2003 18:11:34 -0000
@@ -0,0 +1,618 @@
+//==========================================================================
+//
+// sed135x_16bit.c
+//
+// Author(s): Michael Kelly - Cogent Computer Systems, Inc.
+// Date: 05-24-2002
+// Description: Init Code for SED135x Display Controller
+//
+//==========================================================================
+// Copyright (C) 2003 Gary Thomas
+
+#include <pkgconf/hal.h>
+#include <cyg/infra/cyg_type.h>
+#include <cyg/hal/lcd_support.h>
+#include <cyg/hal/hal_io.h>
+
+typedef unsigned char uchar;
+typedef unsigned short ushort;
+typedef volatile unsigned short vushort;
+typedef unsigned long ulong;
+typedef volatile unsigned long vulong;
+
+// board specific defines needed by sed135x
+#define SED_REG_BASE 0x78000000 // *RCE3
+#define SED_MEM_BASE 0x78400000
+#define SED_STEP 2 // 16-bit port on 32-bit boundary
+
+// Control/Status Registers, 16-bit mode
+#define SED_REG16(_x_) *(vushort *)((ulong)SED_REG_BASE + (((ulong)_x_ * SED_STEP) ^ 2))
+#define H2SED(_x_) _le16(_x_)
+#define SED_GET_PHYS_ADD(_reg_) (SED_MEM_BASE + ((_reg_ * SED_STEP) ^ 2))
+#define RD_FB16(_reg_,_val_) ((_val_) = *(vushort *)SED_GET_PHYS_ADD(_reg_))
+#define WR_FB16(_reg_,_val_) (*(vushort *)SED_GET_PHYS_ADD(_reg_) = (_val_))
+
+#define SED_DISP_MODE_CRT 1
+#define SED_DISP_MODE_LCD 0
+
+#include "sed1356_16bit.h"
+
+//------------------------------------------------------------------------
+// Color Lookup Table Values
+//
+
+static ushort sed_lut_16bit[256][3] = {
+// RED, GREEN, BLUE // Entry
+ { 0x0000, 0x0000, 0x0000, }, // 00
+ { 0x0000, 0x0000, 0x00A0, }, // 01
+ { 0x0000, 0x00A0, 0x0000, }, // 02
+ { 0x0000, 0x00A0, 0x00A0, }, // 03
+ { 0x00A0, 0x0000, 0x0000, }, // 04
+ { 0x00A0, 0x0000, 0x00A0, }, // 05
+ { 0x00A0, 0x00A0, 0x0000, }, // 06
+ { 0x00A0, 0x00A0, 0x00A0, }, // 07
+ { 0x0050, 0x0050, 0x0050, }, // 08
+ { 0x0050, 0x0050, 0x00F0, }, // 09
+ { 0x0050, 0x00F0, 0x0050, }, // 0A
+ { 0x0050, 0x00F0, 0x00F0, }, // 0B
+ { 0x00F0, 0x0050, 0x0050, }, // 0C
+ { 0x00F0, 0x0050, 0x00F0, }, // 0D
+ { 0x00F0, 0x00F0, 0x0050, }, // 0E
+ { 0x00F0, 0x00F0, 0x00F0, }, // 0F
+ { 0x0000, 0x0000, 0x0000, }, // 10
+ { 0x0010, 0x0010, 0x0010, }, // 11
+ { 0x0020, 0x0020, 0x0020, }, // 12
+ { 0x0020, 0x0020, 0x0020, }, // 13
+ { 0x0030, 0x0030, 0x0030, }, // 14
+ { 0x0040, 0x0040, 0x0040, }, // 15
+ { 0x0050, 0x0050, 0x0050, }, // 16
+ { 0x0060, 0x0060, 0x0060, }, // 17
+ { 0x0070, 0x0070, 0x0070, }, // 18
+ { 0x0080, 0x0080, 0x0080, }, // 19
+ { 0x0090, 0x0090, 0x0090, }, // 1A
+ { 0x00A0, 0x00A0, 0x00A0, }, // 1B
+ { 0x00B0, 0x00B0, 0x00B0, }, // 1C
+ { 0x00C0, 0x00C0, 0x00C0, }, // 1D
+ { 0x00E0, 0x00E0, 0x00E0, }, // 1E
+ { 0x00F0, 0x00F0, 0x00F0, }, // 1F
+ { 0x0000, 0x0000, 0x00F0, }, // 20
+ { 0x0040, 0x0000, 0x00F0, }, // 21
+ { 0x0070, 0x0000, 0x00F0, }, // 22
+ { 0x00B0, 0x0000, 0x00F0, }, // 23
+ { 0x00F0, 0x0000, 0x00F0, }, // 24
+ { 0x00F0, 0x0000, 0x00B0, }, // 25
+ { 0x00F0, 0x0000, 0x0070, }, // 26
+ { 0x00F0, 0x0000, 0x0040, }, // 27
+ { 0x00F0, 0x0000, 0x0000, }, // 28
+ { 0x00F0, 0x0040, 0x0000, }, // 29
+ { 0x00F0, 0x0070, 0x0000, }, // 2A
+ { 0x00F0, 0x00B0, 0x0000, }, // 2B
+ { 0x00F0, 0x00F0, 0x0000, }, // 2C
+ { 0x00B0, 0x00F0, 0x0000, }, // 2D
+ { 0x0070, 0x00F0, 0x0000, }, // 2E
+ { 0x0040, 0x00F0, 0x0000, }, // 2F
+ { 0x0000, 0x00F0, 0x0000, }, // 30
+ { 0x0000, 0x00F0, 0x0040, }, // 31
+ { 0x0000, 0x00F0, 0x0070, }, // 32
+ { 0x0000, 0x00F0, 0x00B0, }, // 33
+ { 0x0000, 0x00F0, 0x00F0, }, // 34
+ { 0x0000, 0x00B0, 0x00F0, }, // 35
+ { 0x0000, 0x0070, 0x00F0, }, // 36
+ { 0x0000, 0x0040, 0x00F0, }, // 37
+ { 0x0070, 0x0070, 0x00F0, }, // 38
+ { 0x0090, 0x0070, 0x00F0, }, // 39
+ { 0x00B0, 0x0070, 0x00F0, }, // 3A
+ { 0x00D0, 0x0070, 0x00F0, }, // 3B
+ { 0x00F0, 0x0070, 0x00F0, }, // 3C
+ { 0x00F0, 0x0070, 0x00D0, }, // 3D
+ { 0x00F0, 0x0070, 0x00B0, }, // 3E
+ { 0x00F0, 0x0070, 0x0090, }, // 3F
+ { 0x00F0, 0x0070, 0x0070, }, // 40
+ { 0x00F0, 0x0090, 0x0070, }, // 41
+ { 0x00F0, 0x00B0, 0x0070, }, // 42
+ { 0x00F0, 0x00D0, 0x0070, }, // 43
+ { 0x00F0, 0x00F0, 0x0070, }, // 44
+ { 0x00D0, 0x00F0, 0x0070, }, // 45
+ { 0x00B0, 0x00F0, 0x0070, }, // 46
+ { 0x0090, 0x00F0, 0x0070, }, // 47
+ { 0x0070, 0x00F0, 0x0070, }, // 48
+ { 0x0070, 0x00F0, 0x0090, }, // 49
+ { 0x0070, 0x00F0, 0x00B0, }, // 4A
+ { 0x0070, 0x00F0, 0x00D0, }, // 4B
+ { 0x0070, 0x00F0, 0x00F0, }, // 4C
+ { 0x0070, 0x00D0, 0x00F0, }, // 4D
+ { 0x0070, 0x00B0, 0x00F0, }, // 4E
+ { 0x0070, 0x0090, 0x00F0, }, // 4F
+ { 0x00B0, 0x00B0, 0x00F0, }, // 50
+ { 0x00C0, 0x00B0, 0x00F0, }, // 51
+ { 0x00D0, 0x00B0, 0x00F0, }, // 52
+ { 0x00E0, 0x00B0, 0x00F0, }, // 53
+ { 0x00F0, 0x00B0, 0x00F0, }, // 54
+ { 0x00F0, 0x00B0, 0x00E0, }, // 55
+ { 0x00F0, 0x00B0, 0x00D0, }, // 56
+ { 0x00F0, 0x00B0, 0x00C0, }, // 57
+ { 0x00F0, 0x00B0, 0x00B0, }, // 58
+ { 0x00F0, 0x00C0, 0x00B0, }, // 59
+ { 0x00F0, 0x00D0, 0x00B0, }, // 5A
+ { 0x00F0, 0x00E0, 0x00B0, }, // 5B
+ { 0x00F0, 0x00F0, 0x00B0, }, // 5C
+ { 0x00E0, 0x00F0, 0x00B0, }, // 5D
+ { 0x00D0, 0x00F0, 0x00B0, }, // 5E
+ { 0x00C0, 0x00F0, 0x00B0, }, // 5F
+ { 0x00B0, 0x00F0, 0x00B0, }, // 60
+ { 0x00B0, 0x00F0, 0x00C0, }, // 61
+ { 0x00B0, 0x00F0, 0x00D0, }, // 62
+ { 0x00B0, 0x00F0, 0x00E0, }, // 63
+ { 0x00B0, 0x00F0, 0x00F0, }, // 64
+ { 0x00B0, 0x00E0, 0x00F0, }, // 65
+ { 0x00B0, 0x00D0, 0x00F0, }, // 66
+ { 0x00B0, 0x00C0, 0x00F0, }, // 67
+ { 0x0000, 0x0000, 0x0070, }, // 68
+ { 0x0010, 0x0000, 0x0070, }, // 69
+ { 0x0030, 0x0000, 0x0070, }, // 6A
+ { 0x0050, 0x0000, 0x0070, }, // 6B
+ { 0x0070, 0x0000, 0x0070, }, // 6C
+ { 0x0070, 0x0000, 0x0050, }, // 6D
+ { 0x0070, 0x0000, 0x0030, }, // 6E
+ { 0x0070, 0x0000, 0x0010, }, // 6F
+ { 0x0070, 0x0000, 0x0000, }, // 70
+ { 0x0070, 0x0010, 0x0000, }, // 71
+ { 0x0070, 0x0030, 0x0000, }, // 72
+ { 0x0070, 0x0050, 0x0000, }, // 73
+ { 0x0070, 0x0070, 0x0000, }, // 74
+ { 0x0050, 0x0070, 0x0000, }, // 75
+ { 0x0030, 0x0070, 0x0000, }, // 76
+ { 0x0010, 0x0070, 0x0000, }, // 77
+ { 0x0000, 0x0070, 0x0000, }, // 78
+ { 0x0000, 0x0070, 0x0010, }, // 79
+ { 0x0000, 0x0070, 0x0030, }, // 7A
+ { 0x0000, 0x0070, 0x0050, }, // 7B
+ { 0x0000, 0x0070, 0x0070, }, // 7C
+ { 0x0000, 0x0050, 0x0070, }, // 7D
+ { 0x0000, 0x0030, 0x0070, }, // 7E
+ { 0x0000, 0x0010, 0x0070, }, // 7F
+ { 0x0030, 0x0030, 0x0070, }, // 80
+ { 0x0040, 0x0030, 0x0070, }, // 81
+ { 0x0050, 0x0030, 0x0070, }, // 82
+ { 0x0060, 0x0030, 0x0070, }, // 83
+ { 0x0070, 0x0030, 0x0070, }, // 84
+ { 0x0070, 0x0030, 0x0060, }, // 85
+ { 0x0070, 0x0030, 0x0050, }, // 86
+ { 0x0070, 0x0030, 0x0040, }, // 87
+ { 0x0070, 0x0030, 0x0030, }, // 88
+ { 0x0070, 0x0040, 0x0030, }, // 89
+ { 0x0070, 0x0050, 0x0030, }, // 8A
+ { 0x0070, 0x0060, 0x0030, }, // 8B
+ { 0x0070, 0x0070, 0x0030, }, // 8C
+ { 0x0060, 0x0070, 0x0030, }, // 8D
+ { 0x0050, 0x0070, 0x0030, }, // 8E
+ { 0x0040, 0x0070, 0x0030, }, // 8F
+ { 0x0030, 0x0070, 0x0030, }, // 90
+ { 0x0030, 0x0070, 0x0040, }, // 91
+ { 0x0030, 0x0070, 0x0050, }, // 92
+ { 0x0030, 0x0070, 0x0060, }, // 93
+ { 0x0030, 0x0070, 0x0070, }, // 94
+ { 0x0030, 0x0060, 0x0070, }, // 95
+ { 0x0030, 0x0050, 0x0070, }, // 96
+ { 0x0030, 0x0040, 0x0070, }, // 97
+ { 0x0050, 0x0050, 0x0070, }, // 98
+ { 0x0050, 0x0050, 0x0070, }, // 99
+ { 0x0060, 0x0050, 0x0070, }, // 9A
+ { 0x0060, 0x0050, 0x0070, }, // 9B
+ { 0x0070, 0x0050, 0x0070, }, // 9C
+ { 0x0070, 0x0050, 0x0060, }, // 9D
+ { 0x0070, 0x0050, 0x0060, }, // 9E
+ { 0x0070, 0x0050, 0x0050, }, // 9F
+ { 0x0070, 0x0050, 0x0050, }, // A0
+ { 0x0070, 0x0050, 0x0050, }, // A1
+ { 0x0070, 0x0060, 0x0050, }, // A2
+ { 0x0070, 0x0060, 0x0050, }, // A3
+ { 0x0070, 0x0070, 0x0050, }, // A4
+ { 0x0060, 0x0070, 0x0050, }, // A5
+ { 0x0060, 0x0070, 0x0050, }, // A6
+ { 0x0050, 0x0070, 0x0050, }, // A7
+ { 0x0050, 0x0070, 0x0050, }, // A8
+ { 0x0050, 0x0070, 0x0050, }, // A9
+ { 0x0050, 0x0070, 0x0060, }, // AA
+ { 0x0050, 0x0070, 0x0060, }, // AB
+ { 0x0050, 0x0070, 0x0070, }, // AC
+ { 0x0050, 0x0060, 0x0070, }, // AD
+ { 0x0050, 0x0060, 0x0070, }, // AE
+ { 0x0050, 0x0050, 0x0070, }, // AF
+ { 0x0000, 0x0000, 0x0040, }, // B0
+ { 0x0010, 0x0000, 0x0040, }, // B1
+ { 0x0020, 0x0000, 0x0040, }, // B2
+ { 0x0030, 0x0000, 0x0040, }, // B3
+ { 0x0040, 0x0000, 0x0040, }, // B4
+ { 0x0040, 0x0000, 0x0030, }, // B5
+ { 0x0040, 0x0000, 0x0020, }, // B6
+ { 0x0040, 0x0000, 0x0010, }, // B7
+ { 0x0040, 0x0000, 0x0000, }, // B8
+ { 0x0040, 0x0010, 0x0000, }, // B9
+ { 0x0040, 0x0020, 0x0000, }, // BA
+ { 0x0040, 0x0030, 0x0000, }, // BB
+ { 0x0040, 0x0040, 0x0000, }, // BC
+ { 0x0030, 0x0040, 0x0000, }, // BD
+ { 0x0020, 0x0040, 0x0000, }, // BE
+ { 0x0010, 0x0040, 0x0000, }, // BF
+ { 0x0000, 0x0040, 0x0000, }, // C0
+ { 0x0000, 0x0040, 0x0010, }, // C1
+ { 0x0000, 0x0040, 0x0020, }, // C2
+ { 0x0000, 0x0040, 0x0030, }, // C3
+ { 0x0000, 0x0040, 0x0040, }, // C4
+ { 0x0000, 0x0030, 0x0040, }, // C5
+ { 0x0000, 0x0020, 0x0040, }, // C6
+ { 0x0000, 0x0010, 0x0040, }, // C7
+ { 0x0020, 0x0020, 0x0040, }, // C8
+ { 0x0020, 0x0020, 0x0040, }, // C9
+ { 0x0030, 0x0020, 0x0040, }, // CA
+ { 0x0030, 0x0020, 0x0040, }, // CB
+ { 0x0040, 0x0020, 0x0040, }, // CC
+ { 0x0040, 0x0020, 0x0030, }, // CD
+ { 0x0040, 0x0020, 0x0030, }, // CE
+ { 0x0040, 0x0020, 0x0020, }, // CF
+ { 0x0040, 0x0020, 0x0020, }, // D0
+ { 0x0040, 0x0020, 0x0020, }, // D1
+ { 0x0040, 0x0030, 0x0020, }, // D2
+ { 0x0040, 0x0030, 0x0020, }, // D3
+ { 0x0040, 0x0040, 0x0020, }, // D4
+ { 0x0030, 0x0040, 0x0020, }, // D5
+ { 0x0030, 0x0040, 0x0020, }, // D6
+ { 0x0020, 0x0040, 0x0020, }, // D7
+ { 0x0020, 0x0040, 0x0020, }, // D8
+ { 0x0020, 0x0040, 0x0020, }, // D9
+ { 0x0020, 0x0040, 0x0030, }, // DA
+ { 0x0020, 0x0040, 0x0030, }, // DB
+ { 0x0020, 0x0040, 0x0040, }, // DC
+ { 0x0020, 0x0030, 0x0040, }, // DD
+ { 0x0020, 0x0030, 0x0040, }, // DE
+ { 0x0020, 0x0020, 0x0040, }, // DF
+ { 0x0020, 0x0020, 0x0040, }, // E0
+ { 0x0030, 0x0020, 0x0040, }, // E1
+ { 0x0030, 0x0020, 0x0040, }, // E2
+ { 0x0030, 0x0020, 0x0040, }, // E3
+ { 0x0040, 0x0020, 0x0040, }, // E4
+ { 0x0040, 0x0020, 0x0030, }, // E5
+ { 0x0040, 0x0020, 0x0030, }, // E6
+ { 0x0040, 0x0020, 0x0030, }, // E7
+ { 0x0040, 0x0020, 0x0020, }, // E8
+ { 0x0040, 0x0030, 0x0020, }, // E9
+ { 0x0040, 0x0030, 0x0020, }, // EA
+ { 0x0040, 0x0030, 0x0020, }, // EB
+ { 0x0040, 0x0040, 0x0020, }, // EC
+ { 0x0030, 0x0040, 0x0020, }, // ED
+ { 0x0030, 0x0040, 0x0020, }, // EE
+ { 0x0030, 0x0040, 0x0020, }, // EF
+ { 0x0020, 0x0040, 0x0020, }, // F0
+ { 0x0020, 0x0040, 0x0030, }, // F1
+ { 0x0020, 0x0040, 0x0030, }, // F2
+ { 0x0020, 0x0040, 0x0030, }, // F3
+ { 0x0020, 0x0040, 0x0040, }, // F4
+ { 0x0020, 0x0030, 0x0040, }, // F5
+ { 0x0020, 0x0030, 0x0040, }, // F6
+ { 0x0020, 0x0030, 0x0040, }, // F7
+ { 0x0000, 0x0000, 0x0000, }, // F8
+ { 0x0000, 0x0000, 0x0000, }, // F9
+ { 0x0000, 0x0000, 0x0000, }, // FA
+ { 0x0000, 0x0000, 0x0000, }, // FB
+ { 0x0000, 0x0000, 0x0000, }, // FC
+ { 0x0000, 0x0000, 0x0000, }, // FD
+ { 0x0000, 0x0000, 0x0000, }, // FE
+ { 0x0000, 0x0000, 0x0000, }, // FF
+};
+
+//--------------------------------------------------------------------------
+// function prototypes
+//
+int sed135x_init(int depth, struct lcd_info *lcd);
+static void sed135x_on(void);
+static void sed135x_off(void);
+static void sed_lcd_bkl(uchar bright);
+
+extern void fs6377_init(int);
+// Why doesn't the real mode work?
+#define fs6377_init(mode) _csb281_fs6377_init(0)
+
+// global flags to determine what, if anything, was found
+static int sed135x_ok;
+static int sed_disp_mode_crt;
+
+// GPIO1 is used to control the LCD backlight on many CSB's
+#define SED1356_BKL_ON SED1356_REG_GPIO_CTL |= H2SED(SED1356_GPIO_GPIO1) // GPIO1 = 1
+#define SED1356_BKL_OFF SED1356_REG_GPIO_CTL &= H2SED(~SED1356_GPIO_GPIO1) // GPIO1 = 0
+
+// GPIO2 is used to sense the presence of a monitor. 0 = monitor connected, 1 = no monitor
+// we invert the sense to make it easier to test and more logical.
+#define SED1356_CRT SED1356_REG_GPIO_CTL & H2SED(SED1356_GPIO_GPIO2)
+
+#define SED_ROW_SIZE(_depth_) ((PIXELS_PER_ROW * _depth_) / 8)
+
+//--------------------------------------------------------------------------
+// sed135x_on
+//
+// This function turns on the SED1355 or SED1356 LCD and/or CRT
+//
+static void
+sed135x_on(void)
+{
+ uchar temp8;
+ int i;
+
+ sed135x_off();
+
+ // Turn on the LCD and/or CRT
+ // The SED1356 supports seperate LCD and CRT timing registers
+ // that have already been setup. We just blank the side we
+ // aren't using and enable the other.
+ if (sed_disp_mode_crt) { // 1 = CRT Mode
+ // Blank the LCD and CRT
+ SED1356_REG_LCD_DISP_MODE_and_MISC |= H2SED(SED1356_LCD_DISP_BLANK);
+ SED1356_REG_CRT_DISP_MODE |= H2SED(SED1356_CRT_DISP_BLANK);
+
+ // turn the LCD backlight off
+ sed_lcd_bkl(0);
+
+ // Set the SED1356 to CRT Mode
+ SED1356_REG_DISP_MODE = H2SED(SED1356_DISP_SWIV_NORM |
+ SED1356_DISP_MODE_CRT);
+
+ // Turn on the CRT
+ SED1356_REG_CRT_DISP_MODE &= ~H2SED(SED1356_CRT_DISP_BLANK);
+ } // if CRT mode
+ else { // 0 = LCD Mode
+ // Blank the LCD and CRT
+ SED1356_REG_LCD_DISP_MODE_and_MISC |= H2SED(SED1356_LCD_DISP_BLANK);
+ SED1356_REG_CRT_DISP_MODE |= H2SED(SED1356_CRT_DISP_BLANK);
+
+ // Set the SED1356 to LCD Mode
+ SED1356_REG_DISP_MODE = H2SED(SED1356_DISP_SWIV_NORM |
+ SED1356_DISP_MODE_LCD);
+
+ // Turn on the LCD
+ SED1356_REG_LCD_DISP_MODE_and_MISC &= ~H2SED(SED1356_LCD_DISP_BLANK);
+ sed_lcd_bkl(0xff); // turn the LCD backlight on/full brightness
+ } // else LCD Mode
+}
+
+//--------------------------------------------------------------------------
+// sed_lcd_bkl()
+//
+// This function turns on the LCD backlight connected to GPIO1. This is
+// not used if the board has a different method of controlling the
+// backlight. Since the Sed has only a single GPIO bit and no way
+// to modulate it, we use any non-zero value of bright to turn it on.
+//
+static void
+sed_lcd_bkl(uchar bright)
+{
+ // Any non-zero value for bright means on
+ if (bright)
+ SED1356_BKL_ON;
+ else
+ SED1356_BKL_OFF;
+
+}
+
+//--------------------------------------------------------------------------
+// sed135x_off
+//
+// This function turns off the SED1356 LCD and/or CRT and the display
+// fifo. It can also turn off the clocks if mode is true, thus allowing
+// the programmable clock generator to be changed.
+//
+static void
+sed135x_off(void)
+{
+ SED1356_REG_DISP_MODE = H2SED(SED1356_DISP_SWIV_NORM |
+ SED1356_DISP_MODE_OFF);
+ sed_lcd_bkl(0); // turn the LCD backlight off
+}
+
+//--------------------------------------------------------------------------
+// sed135x_init
+//
+// This function sets up the sed1355 or sed1356 whichever is found
+//
+int
+sed135x_init(int depth, struct lcd_info *lcd)
+{
+ vushort temp16;
+ int i;
+
+ sed135x_ok = 0;
+ sed_disp_mode_crt = 0; // assume LCD
+
+ if ((depth != 4) && (depth != 8) && (depth != 16)) {
+ diag_printf("Invalid depth: %d\n", depth);
+ return -1;
+ }
+
+ // enable host access
+ SED1356_REG_REV_and_MISC = 0x0000;
+
+ // Check the ID to make sure we even have a SED1356 installed
+ temp16 = SED1356_REG_REV_and_MISC & H2SED(SED1356_REV_ID_MASK);
+
+ if (temp16 != H2SED(SED1356_REV_ID_1356)){
+ diag_printf("SED1356 Not Found! SED_REG_REV = %04x.\n", temp16);
+ return -1;
+ }
+
+ // Disable the display
+ SED1356_REG_DISP_MODE = H2SED(SED1356_DISP_SWIV_NORM |
+ SED1356_DISP_MODE_OFF);
+
+ // Test for the presence of a CRT
+ SED1356_REG_GPIO_CTL = 0x0000; // Disable Backlight
+ SED1356_REG_GPIO_CFG = H2SED(SED1356_GPIO_GPIO1); // GPIO1 Out, GPIO2 In
+ if (SED1356_CRT) sed_disp_mode_crt = 0;
+ else sed_disp_mode_crt = 1;
+
+ // Enable Power Save Mode before we mess with the clocks
+ SED1356_REG_MEM_CFG_and_REF_RATE = H2SED(SED1356_REF_TYPE_SELF); // set dram to self refresh first
+ // shut off MCLK
+ SED1356_REG_PWR_CFG_and_STAT = H2SED(SED1356_PWR_MCLK);
+
+ // Wait until power is down - when MCLK bit goes true
+ while ((SED1356_REG_PWR_CFG_and_STAT & H2SED(SED1356_PWR_MCLK)) == 0){}
+
+ // Change the programmable clock generator to the desired timing
+ if (sed_disp_mode_crt) fs6377_init(SED_DISP_MODE_CRT);
+ else fs6377_init(SED_DISP_MODE_LCD);
+
+ // Re-enable Power
+ SED1356_REG_PWR_CFG_and_STAT = 0x0000;
+
+ // Common Control Registers
+ SED1356_REG_MCLK_CFG = H2SED(SED1356_MCLK_SRC_BCLK);
+ SED1356_REG_LCD_PCLK_CFG = H2SED(SED1356_PCLK_SRC_CLKI);
+ SED1356_REG_CRT_PCLK_CFG = H2SED(SED1356_PCLK_SRC_CLKI);
+ SED1356_REG_MEDIA_PCLK_CFG = 0x0000;
+ SED1356_REG_WAIT_STATE = H2SED(0x0001);
+ SED1356_REG_MEM_CFG_and_REF_RATE = H2SED(SED1356_MEM_CFG_2CAS_EDO |
+ SED1356_REF_RATE_2048);
+ SED1356_REG_MEM_TMG0_and_1 = H2SED(SED1356_MEM_TMG0_EDO50_MCLK33 |
+ SED1356_MEM_TMG1_EDO50_MCLK33);
+ SED1356_REG_PANEL_TYPE_and_MOD_RATE = H2SED(SED1356_PANEL_TYPE_16 |
+ SED1356_PANEL_TYPE_CLR |
+ SED1356_PANEL_TYPE_TFT);
+
+ // LCD Specific Registers
+ SED1356_REG_LCD_HOR_DISP = H2SED((PIXELS_PER_ROW/8) - 1);
+ SED1356_REG_LCD_HOR_NONDISP_and_START = H2SED(SED_HOR_NONDISP_LCD |
+ (SED_HOR_PULSE_START_LCD << 8));
+ SED1356_REG_LCD_HOR_PULSE = H2SED(SED1356_PULSE_WID(SED_HOR_PULSE_WIDTH_LCD) |
+ SED1356_PULSE_POL_LOW);
+ SED1356_REG_LCD_VER_DISP_HT_LO_and_HI = H2SED((PIXELS_PER_COL - 1) & 0x3ff);
+ SED1356_REG_LCD_VER_NONDISP_and_START = H2SED(SED_VER_NONDISP_LCD |
+ (SED_VER_PULSE_START_LCD << 8));
+ SED1356_REG_LCD_VER_PULSE = H2SED(SED1356_PULSE_WID(SED_VER_PULSE_WIDTH_LCD) |
+ SED1356_PULSE_POL_LOW);
+ switch (depth) {
+ case 4: SED1356_REG_LCD_DISP_MODE_and_MISC = H2SED(SED1356_LCD_DISP_BLANK |
+ SED1356_LCD_DISP_SWIV_NORM |
+ SED1356_LCD_DISP_4BPP);
+ break;
+ case 8: SED1356_REG_LCD_DISP_MODE_and_MISC = H2SED(SED1356_LCD_DISP_BLANK |
+ SED1356_LCD_DISP_SWIV_NORM |
+ SED1356_LCD_DISP_8BPP);
+ break;
+ default: SED1356_REG_LCD_DISP_MODE_and_MISC = H2SED(SED1356_LCD_DISP_BLANK |
+ SED1356_LCD_DISP_SWIV_NORM |
+ SED1356_LCD_DISP_16BPP); break;
+ }
+
+ SED1356_REG_LCD_DISP_START_LO_and_MID = 0x0000;
+ SED1356_REG_LCD_DISP_START_HI = 0x0000;
+ SED1356_REG_LCD_ADD_OFFSET_LO_and_HI = H2SED((SED_ROW_SIZE(depth) / 2) & 0x7ff);
+ SED1356_REG_LCD_PIXEL_PAN = 0x0000;
+ SED1356_REG_LCD_FIFO_THRESH_LO_and_HI = 0x0000; // auto mode
+
+ // LCD Specific Registers
+ SED1356_REG_CRT_HOR_DISP = H2SED((PIXELS_PER_ROW/8) - 1);
+ SED1356_REG_CRT_HOR_NONDISP_and_START = H2SED(SED_HOR_NONDISP_CRT |
+ (SED_HOR_PULSE_START_CRT << 8));
+ SED1356_REG_CRT_HOR_PULSE = H2SED(SED1356_PULSE_WID(SED_HOR_PULSE_WIDTH_CRT) |
+ SED1356_PULSE_POL_LOW);
+ SED1356_REG_CRT_VER_DISP_HT_LO_and_HI = H2SED((PIXELS_PER_COL - 1) & 0x3ff);
+ SED1356_REG_CRT_VER_NONDISP_and_START = H2SED(SED_VER_NONDISP_CRT |
+ (SED_VER_PULSE_START_CRT << 8));
+ SED1356_REG_CRT_VER_PULSE_and_OUT_CTL = H2SED(SED1356_PULSE_WID(SED_VER_PULSE_WIDTH_CRT) |
+ SED1356_PULSE_POL_LOW | SED1356_CRT_OUT_DAC_LVL);
+ switch (depth) {
+ case 4: SED1356_REG_CRT_DISP_MODE = H2SED(SED1356_CRT_DISP_BLANK |
+ SED1356_CRT_DISP_4BPP);
+ break;
+ case 8: SED1356_REG_CRT_DISP_MODE = H2SED(SED1356_CRT_DISP_BLANK |
+ SED1356_CRT_DISP_8BPP);
+ break;
+ default: SED1356_REG_CRT_DISP_MODE = H2SED(SED1356_CRT_DISP_BLANK |
+ SED1356_CRT_DISP_16BPP);
+ break;
+ }
+
+
+ SED1356_REG_CRT_DISP_START_LO_and_MID = 0x0000;
+ SED1356_REG_CRT_DISP_START_HI = 0x0000;
+ SED1356_REG_CRT_ADD_OFFSET_LO_and_HI = H2SED((SED_ROW_SIZE(depth) / 2) & 0x7ff);
+ SED1356_REG_CRT_PIXEL_PAN = 0x0000;
+ SED1356_REG_CRT_FIFO_THRESH_LO_and_HI = 0x0000; // auto mode
+
+ // Disable Cursor
+ SED1356_REG_LCD_CURSOR_CTL_and_START_ADD = 0x0000;
+ SED1356_REG_CRT_CURSOR_CTL_and_START_ADD = 0x0000;
+
+ // Disable BitBlt
+ SED1356_REG_BLT_CTL_0_and_1 = 0x0000;
+ SED1356_REG_BLT_ROP_CODE_and_BLT_OP = 0x0000;
+ SED1356_REG_BLT_SRC_START_LO_and_MID = 0x0000;
+ SED1356_REG_BLT_SRC_START_HI = 0x0000;
+ SED1356_REG_BLT_DEST_START_LO_and_MID = 0x0000;
+ SED1356_REG_BLT_DEST_START_HI = 0x0000;
+ SED1356_REG_BLT_ADD_OFFSET_LO_and_HI = 0x0000;
+ SED1356_REG_BLT_WID_LO_and_HI = 0x0000;
+ SED1356_REG_BLT_HGT_LO_and_HI = 0x0000;
+ SED1356_REG_BLT_BG_CLR_LO_and_HI = 0x0000;
+ SED1356_REG_BLT_FG_CLR_LO_and_HI = 0x0000;
+
+ // Fill the LUT, write to both LCD and CRT luts simultaneously
+ SED1356_REG_LUT_MODE = 0x0000;
+ for (i = 0; i < 256; i++){
+
+ SED1356_REG_LUT_ADD = H2SED(i);
+ SED1356_REG_LUT_DATA = H2SED(sed_lut_16bit[i][0]); // red
+ SED1356_REG_LUT_DATA = H2SED(sed_lut_16bit[i][1]); // green
+ SED1356_REG_LUT_DATA = H2SED(sed_lut_16bit[i][2]); // blue
+ }
+
+ // Disable Power Save Mode
+ SED1356_REG_PWR_CFG_and_STAT = 0x0000;
+
+ // Set Watchdog
+// SED1356_REG_WATCHDOG_CTL = 0x0000;
+
+ // Device found & initialized
+ sed135x_ok = 1;
+
+ // turn on the display
+ sed135x_on();
+
+ // Fill in the info structure
+ lcd->height = 480; // FIXME
+ lcd->width = 640; // FIXME
+ lcd->bpp = depth;
+ lcd->type = FB_TRUE_RGB565;
+ lcd->rlen = (640*2*2); // FIXME
+ lcd->access_size = 2; // Framebuffer fixed at 16 bit access
+ lcd->stride = 4; // Only on "odd" 16 byte chunks
+ lcd->fb = SED_GET_PHYS_ADD(0);
+ lcd->on = sed135x_on;
+ lcd->off = sed135x_off;
+
+ return 0;
+}
+
+//--------------------------------------------------------------------------
+// sed_pwr_dn()
+static void
+sed_pwr_dn(void)
+{
+
+ // Enable Host Access
+ SED1356_REG_REV_and_MISC = 0x0000;
+
+ // Disable the display
+ SED1356_REG_DISP_MODE = H2SED(SED1356_DISP_MODE_OFF);
+
+ // Enable Power Save Mode
+ // set dram to self refresh first
+ SED1356_REG_MEM_CFG_and_REF_RATE = H2SED(SED1356_REF_TYPE_SELF);
+
+ // shut off MCLK
+ SED1356_REG_PWR_CFG_and_STAT = H2SED(SED1356_PWR_MCLK);
+
+ // Wait until power is down - when MCLK bit goes true
+ while ((SED1356_REG_PWR_CFG_and_STAT & H2SED(SED1356_PWR_MCLK)) == 0){}
+}
+
+
--
------------------------------------------------------------
Gary Thomas |
MLB Associates | Consulting for the
+1 (970) 229-1963 | Embedded world
http://www.mlbassoc.com/ |
email: <gary@mlbassoc.com> |
gpg: http://www.chez-thomas.org/gary/gpg_key.asc
------------------------------------------------------------