[Midnightbsd-cvs] src [10041] trunk/sys/dev/vt: sync
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Sun May 27 18:31:44 EDT 2018
Revision: 10041
http://svnweb.midnightbsd.org/src/?rev=10041
Author: laffer1
Date: 2018-05-27 18:31:43 -0400 (Sun, 27 May 2018)
Log Message:
-----------
sync
Added Paths:
-----------
trunk/sys/dev/vt/
trunk/sys/dev/vt/colors/
trunk/sys/dev/vt/colors/vt_termcolors.c
trunk/sys/dev/vt/colors/vt_termcolors.h
trunk/sys/dev/vt/font/
trunk/sys/dev/vt/font/vt_font_default.c
trunk/sys/dev/vt/font/vt_mouse_cursor.c
trunk/sys/dev/vt/hw/
trunk/sys/dev/vt/hw/efifb/
trunk/sys/dev/vt/hw/efifb/efifb.c
trunk/sys/dev/vt/hw/fb/
trunk/sys/dev/vt/hw/fb/vt_early_fb.c
trunk/sys/dev/vt/hw/fb/vt_fb.c
trunk/sys/dev/vt/hw/fb/vt_fb.h
trunk/sys/dev/vt/hw/ofwfb/
trunk/sys/dev/vt/hw/ofwfb/ofwfb.c
trunk/sys/dev/vt/hw/vga/
trunk/sys/dev/vt/hw/vga/vt_vga.c
trunk/sys/dev/vt/hw/vga/vt_vga_reg.h
trunk/sys/dev/vt/logo/
trunk/sys/dev/vt/logo/logo_freebsd.c
trunk/sys/dev/vt/vt.h
trunk/sys/dev/vt/vt_buf.c
trunk/sys/dev/vt/vt_consolectl.c
trunk/sys/dev/vt/vt_core.c
trunk/sys/dev/vt/vt_font.c
trunk/sys/dev/vt/vt_sysmouse.c
Added: trunk/sys/dev/vt/colors/vt_termcolors.c
===================================================================
--- trunk/sys/dev/vt/colors/vt_termcolors.c (rev 0)
+++ trunk/sys/dev/vt/colors/vt_termcolors.c 2018-05-27 22:31:43 UTC (rev 10041)
@@ -0,0 +1,93 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 2013 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by Aleksandr Rybalko under sponsorship from the
+ * FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: stable/10/sys/dev/vt/colors/vt_termcolors.c 292790 2015-12-27 19:47:56Z marius $");
+
+#include <sys/param.h>
+
+#include <dev/vt/colors/vt_termcolors.h>
+
+static const struct {
+ unsigned char r; /* Red percentage value. */
+ unsigned char g; /* Green percentage value. */
+ unsigned char b; /* Blue percentage value. */
+} color_def[16] = {
+ {0, 0, 0}, /* black */
+ {50, 0, 0}, /* dark red */
+ {0, 50, 0}, /* dark green */
+ {77, 63, 0}, /* dark yellow */
+ {20, 40, 64}, /* dark blue */
+ {50, 0, 50}, /* dark magenta */
+ {0, 50, 50}, /* dark cyan */
+ {75, 75, 75}, /* light gray */
+
+ {18, 20, 21}, /* dark gray */
+ {100, 0, 0}, /* light red */
+ {0, 100, 0}, /* light green */
+ {100, 100, 0}, /* light yellow */
+ {45, 62, 81}, /* light blue */
+ {100, 0, 100}, /* light magenta */
+ {0, 100, 100}, /* light cyan */
+ {100, 100, 100}, /* white */
+};
+
+/*
+ * Between console's palette and VGA's one:
+ * - blue and red are swapped (1 <-> 4)
+ * - yellow ad cyan are swapped (3 <-> 6)
+ */
+static const int cons_to_vga_colors[16] = {
+ 0, 4, 2, 6, 1, 5, 3, 7,
+ 0, 4, 2, 6, 1, 5, 3, 7
+};
+
+int
+vt_generate_cons_palette(uint32_t *palette, int format, uint32_t rmax,
+ int roffset, uint32_t gmax, int goffset, uint32_t bmax, int boffset)
+{
+ int i;
+
+#define CF(_f, _i) ((_f ## max * color_def[(_i)]._f / 100) << _f ## offset)
+ for (i = 0; i < 16; i++) {
+ switch (format) {
+ case COLOR_FORMAT_VGA:
+ palette[i] = cons_to_vga_colors[i];
+ break;
+ case COLOR_FORMAT_RGB:
+ palette[i] = CF(r, i) | CF(g, i) | CF(b, i);
+ break;
+ default:
+ return (ENODEV);
+ }
+ }
+#undef CF
+ return (0);
+}
Property changes on: trunk/sys/dev/vt/colors/vt_termcolors.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/dev/vt/colors/vt_termcolors.h
===================================================================
--- trunk/sys/dev/vt/colors/vt_termcolors.h (rev 0)
+++ trunk/sys/dev/vt/colors/vt_termcolors.h 2018-05-27 22:31:43 UTC (rev 10041)
@@ -0,0 +1,51 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 2013 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by Aleksandr Rybalko under sponsorship from the
+ * FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD: stable/10/sys/dev/vt/colors/vt_termcolors.h 270262 2014-08-21 10:18:42Z dumbbell $
+ */
+
+enum vt_color_format {
+ COLOR_FORMAT_BW = 0,
+ COLOR_FORMAT_GRAY,
+ COLOR_FORMAT_VGA, /* Color Index. */
+ COLOR_FORMAT_RGB,
+ COLOR_FORMAT_ARGB,
+ COLOR_FORMAT_CMYK,
+ COLOR_FORMAT_HSL,
+ COLOR_FORMAT_YUV,
+ COLOR_FORMAT_YCbCr,
+ COLOR_FORMAT_YPbPr,
+
+ COLOR_FORMAT_MAX = 15,
+};
+
+/* Helper to fill color map used by driver */
+int vt_generate_cons_palette(uint32_t *palette, int format, uint32_t rmax,
+ int roffset, uint32_t gmax, int goffset, uint32_t bmax, int boffset);
+
Property changes on: trunk/sys/dev/vt/colors/vt_termcolors.h
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/dev/vt/font/vt_font_default.c
===================================================================
--- trunk/sys/dev/vt/font/vt_font_default.c (rev 0)
+++ trunk/sys/dev/vt/font/vt_font_default.c 2018-05-27 22:31:43 UTC (rev 10041)
@@ -0,0 +1,3340 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (C) 2014 Dimitar Toshkov Zhekov. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+/*
+ * This is the "Terminus BSD Console" font. It is identical to the standard
+ * variant of Terminus Font 8x16, but provided under the 2-clause BSD License
+ * (FreeBSD License). Please contribute any changes back to Mr. Zhekov at
+ * <dimitar.zhekov at gmail.com>.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: stable/10/sys/dev/vt/font/vt_font_default.c 332745 2018-04-19 00:50:51Z emaste $");
+
+#include <dev/vt/vt.h>
+
+static uint8_t font_bytes[2224 * 16] = {
+ 0x00, 0x00, 0x7e, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x7e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x24, 0x24, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x24, 0x7e, 0x24, 0x24,
+ 0x7e, 0x24, 0x24, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x7c,
+ 0x92, 0x90, 0x90, 0x7c, 0x12, 0x12, 0x92, 0x7c, 0x10, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x64, 0x94, 0x68, 0x08, 0x10, 0x10, 0x20, 0x2c, 0x52, 0x4c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x24, 0x24, 0x18, 0x30, 0x4a,
+ 0x44, 0x44, 0x44, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x08, 0x10, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x10, 0x08,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08, 0x08, 0x08, 0x08,
+ 0x08, 0x08, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x24, 0x18, 0x7e, 0x18, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x7c, 0x10, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10,
+ 0x20, 0x20, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42,
+ 0x42, 0x46, 0x4a, 0x52, 0x62, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x08, 0x18, 0x28, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x42, 0x02, 0x04, 0x08,
+ 0x10, 0x20, 0x40, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42,
+ 0x42, 0x02, 0x1c, 0x02, 0x02, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x06, 0x0a, 0x12, 0x22, 0x42, 0x7e, 0x02, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x40, 0x40, 0x40, 0x7c, 0x02,
+ 0x02, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x20,
+ 0x40, 0x40, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7e, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x42, 0x42, 0x3c, 0x42,
+ 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42,
+ 0x42, 0x42, 0x42, 0x3e, 0x02, 0x02, 0x04, 0x38, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00,
+ 0x00, 0x00, 0x10, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
+ 0x08, 0x10, 0x20, 0x40, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x10, 0x08, 0x04,
+ 0x08, 0x10, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42,
+ 0x42, 0x42, 0x04, 0x08, 0x08, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0x82, 0x9e, 0xa2, 0xa2, 0xa2, 0xa6, 0x9a, 0x80, 0x7e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x7e,
+ 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x42,
+ 0x42, 0x42, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x42, 0x42, 0x40, 0x40, 0x40, 0x40, 0x42, 0x42, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x44, 0x42, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x44, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x40,
+ 0x40, 0x40, 0x78, 0x40, 0x40, 0x40, 0x40, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7e, 0x40, 0x40, 0x40, 0x78, 0x40, 0x40, 0x40, 0x40, 0x40,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x42, 0x40, 0x40, 0x4e,
+ 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42,
+ 0x42, 0x42, 0x7e, 0x42, 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x04, 0x04, 0x04, 0x04, 0x04,
+ 0x04, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x44,
+ 0x48, 0x50, 0x60, 0x60, 0x50, 0x48, 0x44, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0xc6, 0xaa, 0x92, 0x92, 0x82,
+ 0x82, 0x82, 0x82, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42,
+ 0x42, 0x62, 0x52, 0x4a, 0x46, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x7c,
+ 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x4a, 0x3c, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x7c, 0x50, 0x48, 0x44, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x40, 0x40, 0x3c, 0x02,
+ 0x02, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x24,
+ 0x24, 0x24, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x82,
+ 0x82, 0x82, 0x82, 0x92, 0x92, 0xaa, 0xc6, 0x82, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x42, 0x42, 0x24, 0x24, 0x18, 0x18, 0x24, 0x24, 0x42, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x82, 0x44, 0x44, 0x28, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x02,
+ 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x40, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x38,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x20, 0x20, 0x10, 0x10,
+ 0x08, 0x08, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x08,
+ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x38, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x28, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x10, 0x08, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x02, 0x3e, 0x42, 0x42, 0x42, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0x7c, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x3c, 0x42, 0x40, 0x40, 0x40, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x02, 0x02, 0x3e, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x42,
+ 0x7e, 0x40, 0x40, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x10,
+ 0x10, 0x7c, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3e,
+ 0x02, 0x02, 0x3c, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0x7c, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10,
+ 0x00, 0x30, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x04, 0x00, 0x0c, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
+ 0x44, 0x44, 0x38, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0x42, 0x44, 0x48,
+ 0x70, 0x48, 0x44, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x7c,
+ 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x3e, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x5e, 0x60, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x40, 0x40, 0x3c, 0x02, 0x02, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x7c, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x24, 0x24, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x82, 0x92,
+ 0x92, 0x92, 0x92, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x42, 0x42, 0x24, 0x18, 0x24, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3e,
+ 0x02, 0x02, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x04, 0x08,
+ 0x10, 0x20, 0x40, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x10,
+ 0x10, 0x10, 0x20, 0x10, 0x10, 0x10, 0x10, 0x0c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x08, 0x08, 0x08, 0x04, 0x08,
+ 0x08, 0x08, 0x08, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x92, 0x8c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x7c, 0x92, 0x90,
+ 0x90, 0x90, 0x92, 0x7c, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x18, 0x24,
+ 0x20, 0x20, 0x78, 0x20, 0x20, 0x20, 0x22, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x44, 0x38, 0x44, 0x44, 0x44, 0x38, 0x44, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x82, 0x44, 0x28, 0x10, 0x7c,
+ 0x10, 0x7c, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10,
+ 0x10, 0x10, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x44, 0x40, 0x30, 0x48, 0x44, 0x44, 0x24, 0x18, 0x04, 0x44,
+ 0x38, 0x00, 0x00, 0x00, 0x24, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e,
+ 0x81, 0x99, 0xa5, 0xa1, 0xa5, 0x99, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x04, 0x3c, 0x44, 0x3c, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x24, 0x48,
+ 0x90, 0x48, 0x24, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7e, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x81, 0xb9, 0xa5, 0xb9,
+ 0xa9, 0xa5, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x24, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x7c,
+ 0x10, 0x10, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x24, 0x04,
+ 0x08, 0x10, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x04, 0x18, 0x04, 0x04, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x46, 0x7a, 0x40, 0x40, 0x40, 0x00,
+ 0x00, 0x00, 0x7e, 0x92, 0x92, 0x92, 0x92, 0x72, 0x12, 0x12, 0x12, 0x12,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x20, 0x00,
+ 0x00, 0x10, 0x30, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x44, 0x44, 0x44, 0x38, 0x00, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x90, 0x48, 0x24, 0x12, 0x24, 0x48, 0x90, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x20, 0x60, 0x20, 0x22, 0x24, 0x08, 0x10, 0x22, 0x46, 0x8a, 0x1e,
+ 0x02, 0x02, 0x00, 0x00, 0x00, 0x20, 0x60, 0x20, 0x22, 0x24, 0x08, 0x10,
+ 0x20, 0x4c, 0x92, 0x04, 0x08, 0x1e, 0x00, 0x00, 0x00, 0xe0, 0x10, 0x60,
+ 0x12, 0xe4, 0x08, 0x10, 0x22, 0x46, 0x8a, 0x1e, 0x02, 0x02, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x10, 0x00, 0x10, 0x10, 0x20, 0x42, 0x42, 0x42, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0x3c, 0x42, 0x42, 0x42, 0x7e,
+ 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x3c,
+ 0x42, 0x42, 0x42, 0x7e, 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x24, 0x00, 0x3c, 0x42, 0x42, 0x42, 0x7e, 0x42, 0x42, 0x42, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x32, 0x4c, 0x00, 0x3c, 0x42, 0x42, 0x42, 0x7e,
+ 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x00, 0x3c,
+ 0x42, 0x42, 0x42, 0x7e, 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x24, 0x18, 0x3c, 0x42, 0x42, 0x42, 0x7e, 0x42, 0x42, 0x42, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x90, 0x90, 0x90, 0xfc, 0x90,
+ 0x90, 0x90, 0x90, 0x9e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42,
+ 0x42, 0x40, 0x40, 0x40, 0x40, 0x42, 0x42, 0x3c, 0x10, 0x10, 0x20, 0x00,
+ 0x10, 0x08, 0x00, 0x7e, 0x40, 0x40, 0x40, 0x78, 0x40, 0x40, 0x40, 0x7e,
+ 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x7e, 0x40, 0x40, 0x40, 0x78,
+ 0x40, 0x40, 0x40, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x18, 0x24, 0x00, 0x7e,
+ 0x40, 0x40, 0x40, 0x78, 0x40, 0x40, 0x40, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x24, 0x24, 0x00, 0x7e, 0x40, 0x40, 0x40, 0x78, 0x40, 0x40, 0x40, 0x7e,
+ 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x00, 0x38, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x38,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x24, 0x00, 0x38, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38,
+ 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00, 0x38, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x44,
+ 0x42, 0x42, 0xf2, 0x42, 0x42, 0x42, 0x44, 0x78, 0x00, 0x00, 0x00, 0x00,
+ 0x32, 0x4c, 0x00, 0x42, 0x42, 0x62, 0x52, 0x4a, 0x46, 0x42, 0x42, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0x3c, 0x42, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x3c,
+ 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x24, 0x00, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x32, 0x4c, 0x00, 0x3c, 0x42, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x00, 0x3c,
+ 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x43, 0x42, 0x46, 0x4a, 0x52,
+ 0x62, 0x42, 0xc2, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x08, 0x10, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x24, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x00, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x08, 0x10, 0x82, 0x82, 0x44, 0x44, 0x28, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x7c, 0x42, 0x42, 0x42,
+ 0x42, 0x7c, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x44,
+ 0x44, 0x48, 0x7c, 0x42, 0x42, 0x42, 0x62, 0x5c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x08, 0x00, 0x3c, 0x02, 0x3e, 0x42, 0x42, 0x42, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x3c, 0x02, 0x3e,
+ 0x42, 0x42, 0x42, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x24,
+ 0x00, 0x3c, 0x02, 0x3e, 0x42, 0x42, 0x42, 0x3e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x32, 0x4c, 0x00, 0x3c, 0x02, 0x3e, 0x42, 0x42, 0x42, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x00, 0x3c, 0x02, 0x3e,
+ 0x42, 0x42, 0x42, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x24,
+ 0x18, 0x3c, 0x02, 0x3e, 0x42, 0x42, 0x42, 0x3e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x12, 0x72, 0x9e, 0x90, 0x90, 0x6c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x40,
+ 0x40, 0x40, 0x42, 0x3c, 0x10, 0x10, 0x20, 0x00, 0x00, 0x00, 0x10, 0x08,
+ 0x00, 0x3c, 0x42, 0x42, 0x7e, 0x40, 0x40, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x08, 0x10, 0x00, 0x3c, 0x42, 0x42, 0x7e, 0x40, 0x40, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x24, 0x00, 0x3c, 0x42, 0x42,
+ 0x7e, 0x40, 0x40, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x24,
+ 0x00, 0x3c, 0x42, 0x42, 0x7e, 0x40, 0x40, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x20, 0x10, 0x00, 0x30, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x30, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x48,
+ 0x00, 0x30, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x48, 0x48, 0x00, 0x30, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x10, 0x28, 0x3c, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x4c,
+ 0x00, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x08, 0x00, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x3c, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x24,
+ 0x00, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x32, 0x4c, 0x00, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x00, 0x3c, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x10, 0x00, 0x7c, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x3c, 0x46, 0x4a, 0x52, 0x62, 0x42, 0xbc,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10,
+ 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x24, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x00, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10,
+ 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3e, 0x02, 0x02, 0x3c, 0x00,
+ 0x00, 0x00, 0x40, 0x40, 0x40, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x7c,
+ 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x24, 0x24, 0x00, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x3e, 0x02, 0x02, 0x3c, 0x00, 0x3c, 0x00, 0x3c, 0x42,
+ 0x42, 0x42, 0x42, 0x7e, 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x02, 0x3e, 0x42, 0x42, 0x42, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x24, 0x18, 0x00, 0x3c, 0x42, 0x42, 0x42, 0x7e,
+ 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x18,
+ 0x00, 0x3c, 0x02, 0x3e, 0x42, 0x42, 0x42, 0x3e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x7e, 0x42, 0x42, 0x42, 0x42,
+ 0x02, 0x04, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x02, 0x3e,
+ 0x42, 0x42, 0x42, 0x3e, 0x02, 0x04, 0x03, 0x00, 0x08, 0x10, 0x00, 0x3c,
+ 0x42, 0x42, 0x40, 0x40, 0x40, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x08, 0x10, 0x00, 0x3c, 0x42, 0x40, 0x40, 0x40, 0x42, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x24, 0x00, 0x3c, 0x42, 0x42, 0x40, 0x40,
+ 0x40, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x24,
+ 0x00, 0x3c, 0x42, 0x40, 0x40, 0x40, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x10, 0x00, 0x3c, 0x42, 0x42, 0x40, 0x40, 0x40, 0x42, 0x42, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x3c, 0x42, 0x40,
+ 0x40, 0x40, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x24, 0x18, 0x00, 0x3c,
+ 0x42, 0x42, 0x40, 0x40, 0x40, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x24, 0x18, 0x00, 0x3c, 0x42, 0x40, 0x40, 0x40, 0x42, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x24, 0x18, 0x00, 0x78, 0x44, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x44, 0x78, 0x00, 0x00, 0x00, 0x00, 0x24, 0x18, 0x02, 0x02,
+ 0x02, 0x3e, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x0f, 0x02, 0x3e, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x7e, 0x40, 0x40, 0x40, 0x78, 0x40,
+ 0x40, 0x40, 0x40, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c,
+ 0x00, 0x3c, 0x42, 0x42, 0x7e, 0x40, 0x40, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x24, 0x18, 0x00, 0x7e, 0x40, 0x40, 0x40, 0x78, 0x40, 0x40, 0x40, 0x7e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x18, 0x00, 0x3c, 0x42, 0x42,
+ 0x7e, 0x40, 0x40, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x7e,
+ 0x40, 0x40, 0x40, 0x78, 0x40, 0x40, 0x40, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x10, 0x00, 0x3c, 0x42, 0x42, 0x7e, 0x40, 0x40, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x40, 0x40, 0x40, 0x78, 0x40,
+ 0x40, 0x40, 0x40, 0x7e, 0x02, 0x04, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x3c, 0x42, 0x42, 0x7e, 0x40, 0x40, 0x3c, 0x08, 0x10, 0x0c, 0x00,
+ 0x18, 0x24, 0x00, 0x3c, 0x42, 0x42, 0x40, 0x4e, 0x42, 0x42, 0x42, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x24, 0x00, 0x3e, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x3e, 0x02, 0x02, 0x3c, 0x00, 0x24, 0x18, 0x00, 0x3c,
+ 0x42, 0x42, 0x40, 0x4e, 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x24, 0x18, 0x00, 0x3e, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3e,
+ 0x02, 0x02, 0x3c, 0x00, 0x10, 0x10, 0x00, 0x3c, 0x42, 0x42, 0x40, 0x4e,
+ 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08,
+ 0x00, 0x3e, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3e, 0x02, 0x02, 0x3c, 0x00,
+ 0x00, 0x00, 0x3c, 0x42, 0x42, 0x40, 0x40, 0x4e, 0x42, 0x42, 0x42, 0x3c,
+ 0x00, 0x10, 0x10, 0x20, 0x00, 0x04, 0x08, 0x08, 0x00, 0x3e, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x3e, 0x02, 0x02, 0x3c, 0x00, 0x18, 0x24, 0x00, 0x42,
+ 0x42, 0x42, 0x42, 0x7e, 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x0c, 0x12, 0x40, 0x40, 0x40, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0xff, 0x42, 0x42, 0x7e, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xf0,
+ 0x40, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x32, 0x4c, 0x00, 0x38, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x58, 0x00, 0x30, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x38, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x78, 0x00, 0x30, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38,
+ 0x00, 0x00, 0x00, 0x00, 0x24, 0x18, 0x00, 0x38, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x30,
+ 0x00, 0x30, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38,
+ 0x10, 0x20, 0x18, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x30, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x38, 0x10, 0x20, 0x18, 0x00, 0x10, 0x10, 0x00, 0x38,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x42, 0x52, 0x52, 0xec, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42,
+ 0x00, 0xc6, 0x42, 0x42, 0x42, 0x42, 0x42, 0xe2, 0x12, 0x12, 0x0c, 0x00,
+ 0x0c, 0x12, 0x00, 0x0e, 0x04, 0x04, 0x04, 0x04, 0x04, 0x44, 0x44, 0x38,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x12, 0x00, 0x0c, 0x04, 0x04,
+ 0x04, 0x04, 0x04, 0x04, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00, 0x42, 0x44,
+ 0x48, 0x50, 0x60, 0x60, 0x50, 0x48, 0x44, 0x42, 0x00, 0x10, 0x10, 0x20,
+ 0x00, 0x00, 0x40, 0x40, 0x40, 0x42, 0x44, 0x48, 0x70, 0x48, 0x44, 0x42,
+ 0x00, 0x10, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x44, 0x48,
+ 0x70, 0x48, 0x44, 0x42, 0x00, 0x00, 0x00, 0x00, 0x20, 0x40, 0x00, 0x40,
+ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x08, 0x10, 0x00, 0x30, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
+ 0x40, 0x40, 0x40, 0x7e, 0x00, 0x10, 0x10, 0x20, 0x00, 0x00, 0x30, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x10, 0x10, 0x20,
+ 0x24, 0x18, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7e,
+ 0x00, 0x00, 0x00, 0x00, 0x48, 0x30, 0x00, 0x30, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40,
+ 0x40, 0x40, 0x44, 0x44, 0x40, 0x40, 0x40, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x30, 0x10, 0x10, 0x10, 0x11, 0x11, 0x10, 0x10, 0x10, 0x38,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0x40, 0x60, 0xc0,
+ 0x40, 0x40, 0x40, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x10,
+ 0x10, 0x10, 0x18, 0x30, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00,
+ 0x08, 0x10, 0x42, 0x42, 0x42, 0x62, 0x52, 0x4a, 0x46, 0x42, 0x42, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x7c, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42,
+ 0x42, 0x62, 0x52, 0x4a, 0x46, 0x42, 0x42, 0x42, 0x00, 0x10, 0x10, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x00, 0x10, 0x10, 0x20, 0x24, 0x18, 0x42, 0x42, 0x42, 0x62, 0x52, 0x4a,
+ 0x46, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x18,
+ 0x00, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x40, 0x80, 0x00, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x62, 0x52, 0x4a,
+ 0x46, 0x42, 0x42, 0x42, 0x02, 0x02, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x02, 0x02, 0x0c, 0x00,
+ 0x3c, 0x00, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x3c, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x24, 0x18, 0x00, 0x3c,
+ 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x24, 0x18, 0x00, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x12, 0x24, 0x00, 0x3c, 0x42, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x24,
+ 0x00, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7e, 0x90, 0x90, 0x90, 0x9c, 0x90, 0x90, 0x90, 0x90, 0x7e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x92, 0x92,
+ 0x9e, 0x90, 0x90, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x7c,
+ 0x42, 0x42, 0x42, 0x7c, 0x50, 0x48, 0x44, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x08, 0x10, 0x00, 0x5e, 0x60, 0x40, 0x40, 0x40, 0x40, 0x40,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x7c,
+ 0x50, 0x48, 0x44, 0x42, 0x00, 0x10, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x5e, 0x60, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x40, 0x40, 0x80,
+ 0x24, 0x18, 0x00, 0x7c, 0x42, 0x42, 0x42, 0x7c, 0x50, 0x48, 0x44, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x18, 0x00, 0x5e, 0x60, 0x40,
+ 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x3c,
+ 0x42, 0x40, 0x40, 0x3c, 0x02, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x08, 0x00, 0x3e, 0x40, 0x40, 0x3c, 0x02, 0x02, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x24, 0x00, 0x3c, 0x42, 0x40, 0x40, 0x3c,
+ 0x02, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x24,
+ 0x00, 0x3e, 0x40, 0x40, 0x3c, 0x02, 0x02, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x42, 0x40, 0x40, 0x3c, 0x02, 0x02, 0x42, 0x42, 0x3c,
+ 0x10, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x40, 0x40,
+ 0x3c, 0x02, 0x02, 0x7c, 0x10, 0x10, 0x20, 0x00, 0x24, 0x18, 0x00, 0x3c,
+ 0x42, 0x40, 0x40, 0x3c, 0x02, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x24, 0x18, 0x00, 0x3e, 0x40, 0x40, 0x3c, 0x02, 0x02, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x10, 0x00, 0x00, 0x00, 0x10, 0x10,
+ 0x10, 0x7c, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0e, 0x04, 0x04, 0x08, 0x00,
+ 0x24, 0x18, 0x00, 0xfe, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x24, 0x18, 0x00, 0x10, 0x10, 0x7c, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x10,
+ 0x10, 0x10, 0x7c, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x10, 0x10, 0x7c, 0x10, 0x38, 0x10, 0x10, 0x10, 0x0e,
+ 0x00, 0x00, 0x00, 0x00, 0x32, 0x4c, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x4c,
+ 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3e, 0x00, 0x00, 0x00, 0x00,
+ 0x3c, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x24, 0x18, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x24, 0x18, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x24, 0x18, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x24,
+ 0x18, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3e, 0x00, 0x00, 0x00, 0x00,
+ 0x12, 0x24, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x24, 0x00, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x08, 0x10, 0x0c, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3e,
+ 0x02, 0x04, 0x03, 0x00, 0x18, 0x24, 0x00, 0x82, 0x82, 0x82, 0x82, 0x92,
+ 0x92, 0xaa, 0xc6, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x24,
+ 0x00, 0x82, 0x82, 0x92, 0x92, 0x92, 0x92, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x44, 0x44, 0x00, 0x82, 0x82, 0x44, 0x44, 0x28, 0x10, 0x10, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x7e, 0x02, 0x04, 0x08, 0x10,
+ 0x20, 0x40, 0x40, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10,
+ 0x00, 0x7e, 0x04, 0x08, 0x10, 0x20, 0x40, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x10, 0x00, 0x7e, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x40, 0x7e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x7e, 0x04, 0x08,
+ 0x10, 0x20, 0x40, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x24, 0x18, 0x00, 0x7e,
+ 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x40, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x24, 0x18, 0x00, 0x7e, 0x04, 0x08, 0x10, 0x20, 0x40, 0x7e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42,
+ 0x42, 0x02, 0x02, 0x02, 0x02, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7e, 0x02, 0x02, 0x02, 0x1e, 0x02, 0x02, 0x02, 0x02, 0x7e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x02, 0x02, 0x7e, 0x42,
+ 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42,
+ 0x42, 0x40, 0x38, 0x40, 0x40, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0c, 0x12, 0x10, 0x10, 0x7c, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x90, 0x60, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x62, 0x52, 0x4a,
+ 0x46, 0x42, 0x42, 0x42, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x02, 0x02, 0x02, 0x00,
+ 0x00, 0x00, 0x7e, 0x02, 0x04, 0x08, 0x1c, 0x02, 0x02, 0x42, 0x42, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x40, 0x40, 0x3c, 0x02,
+ 0x02, 0x42, 0x42, 0x3c, 0x00, 0x10, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x3e, 0x40, 0x40, 0x3c, 0x02, 0x02, 0x7c, 0x00, 0x10, 0x10, 0x20,
+ 0x00, 0x00, 0xfe, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x00, 0x10, 0x10, 0x20, 0x00, 0x00, 0x10, 0x10, 0x10, 0x7c, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x0e, 0x00, 0x04, 0x04, 0x08, 0x7c, 0x00, 0x82, 0x82,
+ 0x44, 0x44, 0x28, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x3c, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3e,
+ 0x02, 0x02, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x04, 0x04,
+ 0x04, 0x04, 0x04, 0x04, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x3c, 0x42, 0x02, 0x02, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x42, 0x7e, 0x02, 0x02, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x02, 0x02,
+ 0x7e, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x3c, 0x42, 0x40, 0x38, 0x40, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x02, 0x04,
+ 0x08, 0x1c, 0x02, 0x02, 0x42, 0x42, 0x3c, 0x00, 0x08, 0x10, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x08, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x24, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x04, 0x03, 0x00,
+ 0x32, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x12, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x40, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x08, 0x10, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x7e,
+ 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x40, 0x80, 0x7e, 0x40, 0x40, 0x40, 0x78, 0x40, 0x40, 0x40, 0x40, 0x7e,
+ 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x42, 0x42, 0x42, 0x42, 0x7e, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x38, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00,
+ 0x40, 0x80, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x00, 0x82, 0x82, 0x44, 0x44, 0x28,
+ 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x3c, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x42, 0x24, 0x24, 0x66, 0x00, 0x00, 0x00, 0x00,
+ 0x08, 0x10, 0x48, 0x48, 0x00, 0x30, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x40, 0x40, 0x40, 0x40, 0x40,
+ 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10,
+ 0x28, 0x28, 0x44, 0x44, 0x44, 0x82, 0x82, 0xfe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x42, 0x42, 0x42, 0x5a, 0x42, 0x42, 0x42, 0x42, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x28, 0x28, 0x44, 0x44,
+ 0x44, 0x82, 0x82, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00,
+ 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7e, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x40, 0x20, 0x10, 0x08, 0x08,
+ 0x10, 0x20, 0x40, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x7c,
+ 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x7c, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x7c, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x42, 0x24, 0x24, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10,
+ 0x00, 0x3a, 0x46, 0x44, 0x44, 0x44, 0x46, 0x3a, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x08, 0x10, 0x00, 0x3c, 0x42, 0x40, 0x38, 0x40, 0x42, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x7c, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x08, 0x10,
+ 0x00, 0x30, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0c, 0x00, 0x00, 0x00, 0x00,
+ 0x08, 0x10, 0x00, 0x24, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x46, 0x44,
+ 0x44, 0x44, 0x46, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x44,
+ 0x44, 0x48, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x7c, 0x40, 0x40, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x82, 0x44, 0x44, 0x28, 0x28, 0x10,
+ 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x3e, 0x10, 0x08, 0x3c, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x04,
+ 0x08, 0x10, 0x20, 0x40, 0x40, 0x40, 0x40, 0x3c, 0x02, 0x02, 0x04, 0x00,
+ 0x00, 0x00, 0x38, 0x44, 0x44, 0x44, 0x7c, 0x44, 0x44, 0x44, 0x44, 0x38,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20,
+ 0x10, 0x10, 0x28, 0x28, 0x44, 0x44, 0x82, 0x82, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3e, 0x40, 0x40, 0x40, 0x3c, 0x40, 0x40, 0x40, 0x40, 0x3c,
+ 0x02, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x7c, 0x40, 0x40, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x40, 0x40, 0x40, 0x40, 0x3c,
+ 0x02, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x44, 0x44,
+ 0x44, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xfe, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x92, 0x92,
+ 0x92, 0x92, 0x92, 0x7c, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x42, 0x42, 0x24, 0x24, 0x18, 0x18, 0x24, 0x24, 0x42, 0x42, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x7c,
+ 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x82, 0x92,
+ 0x92, 0x92, 0x92, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x48,
+ 0x00, 0x30, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x24, 0x24, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10,
+ 0x00, 0x44, 0x82, 0x92, 0x92, 0x92, 0x92, 0x6c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x44, 0x44, 0x44, 0x3e, 0x04, 0xc4, 0x44, 0x44, 0x38,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x7c, 0x92, 0x92,
+ 0x92, 0x92, 0x92, 0x7c, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xc2, 0x24, 0x18, 0x10, 0x30, 0x48, 0x86, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x7c,
+ 0x40, 0x40, 0x3c, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x42, 0x42, 0x7e, 0x42,
+ 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1e, 0x20, 0x40, 0x7c, 0x40, 0x20, 0x1e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x04, 0x02, 0x3e, 0x02, 0x04, 0x78,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x20, 0x20, 0x3c, 0x22, 0x22,
+ 0x22, 0x22, 0x22, 0x24, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x7e,
+ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x42, 0x40, 0x40, 0x78, 0x40, 0x40, 0x40, 0x42, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x50, 0x90, 0x9c, 0x92, 0x92,
+ 0x92, 0x92, 0x92, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x90,
+ 0x90, 0x9c, 0xf2, 0x92, 0x92, 0x92, 0x92, 0x9c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xf8, 0x20, 0x20, 0x3c, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
+ 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x42, 0x44, 0x48, 0x50, 0x60, 0x60,
+ 0x50, 0x48, 0x44, 0x42, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x42, 0x42,
+ 0x42, 0x46, 0x4a, 0x52, 0x62, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x24, 0x18, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3e, 0x02, 0x02, 0x02, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x40,
+ 0x40, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0xfe,
+ 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x92, 0x92, 0x54, 0x38, 0x54,
+ 0x92, 0x92, 0x92, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42,
+ 0x42, 0x46, 0x4a, 0x52, 0x62, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x24, 0x18, 0x42, 0x42, 0x42, 0x46, 0x4a, 0x52, 0x62, 0x42, 0x42, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x12, 0x22, 0x22, 0x22, 0x22,
+ 0x22, 0x22, 0x22, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x3e, 0x02, 0x02, 0x02, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x7c, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x7c,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x3f, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x3e, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x7e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
+ 0x92, 0x92, 0x92, 0x7f, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40,
+ 0x40, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x82, 0x82, 0x82, 0xf2, 0x8a, 0x8a, 0x8a, 0x8a, 0x8a, 0xf2,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x02, 0x02, 0x1e, 0x02,
+ 0x02, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x92,
+ 0x92, 0x92, 0x92, 0xf2, 0x92, 0x92, 0x92, 0x8c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3e, 0x42, 0x42, 0x42, 0x42, 0x3e, 0x0a, 0x12, 0x22, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x40, 0x40, 0x7c, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x44,
+ 0x44, 0x48, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x92, 0x54,
+ 0x38, 0x54, 0x92, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x3c, 0x42, 0x02, 0x1c, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x22, 0x22, 0x22, 0x22, 0x22, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0xc6, 0xaa,
+ 0x92, 0x82, 0x82, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x42, 0x42, 0x42, 0x7e, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x3f, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x42, 0x42, 0x42, 0x3e, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x7e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x92, 0x92,
+ 0x92, 0x92, 0x92, 0x7f, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x20, 0x3c, 0x22, 0x22, 0x22, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x82, 0xf2, 0x8a, 0x8a, 0x8a, 0xf2,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x78,
+ 0x44, 0x44, 0x44, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x3c, 0x42, 0x02, 0x1e, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x92, 0x92, 0xf2, 0x92, 0x92, 0x8c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x42, 0x42,
+ 0x3e, 0x12, 0x22, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xf0,
+ 0x40, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x02, 0x02, 0x0c, 0x00,
+ 0x00, 0x00, 0x08, 0x10, 0x00, 0x7e, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x40,
+ 0x78, 0x40, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x70, 0x90, 0x9c, 0x92, 0x92, 0x92, 0x9c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x90, 0x9c, 0xf2, 0x92, 0x92, 0x9c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x42, 0x44, 0x48,
+ 0x70, 0x48, 0x44, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x18,
+ 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3e, 0x02, 0x02, 0x3c, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x7e,
+ 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x40, 0xf0, 0x40, 0x7c, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20,
+ 0x78, 0x20, 0x20, 0x3c, 0x22, 0x22, 0x22, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfe, 0x82, 0x44, 0x28, 0x38, 0x54, 0x92, 0x92, 0x92, 0x92,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x44, 0x28,
+ 0x38, 0x54, 0x92, 0x92, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x7e, 0x40,
+ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x02, 0x7e, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x40, 0x40, 0x40, 0xf8, 0x40,
+ 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7e, 0x40, 0x40, 0xf8, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7e, 0x40, 0x40, 0x40, 0x40, 0x7c, 0x42, 0x42, 0x42, 0x42,
+ 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x40, 0x40,
+ 0x78, 0x44, 0x44, 0x44, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00, 0x92, 0x92,
+ 0x92, 0x54, 0x38, 0x54, 0x92, 0x92, 0x92, 0x93, 0x01, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x92, 0x54, 0x38, 0x54, 0x92, 0x93,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x42, 0x02, 0x1c, 0x02,
+ 0x02, 0x42, 0x42, 0x3c, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x3c, 0x42, 0x02, 0x1c, 0x02, 0x42, 0x3c, 0x10, 0x10, 0x10, 0x00,
+ 0x00, 0x00, 0x42, 0x44, 0x48, 0x50, 0x60, 0x60, 0x50, 0x48, 0x44, 0x43,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x44, 0x48,
+ 0x70, 0x48, 0x44, 0x43, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42,
+ 0x54, 0x58, 0x70, 0x70, 0x58, 0x54, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x54, 0x58, 0x70, 0x58, 0x54, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x44, 0x48, 0x50, 0x60, 0x60,
+ 0x50, 0x48, 0x44, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xc2, 0x44, 0x48, 0x70, 0x48, 0x44, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x7e, 0x42, 0x42, 0x42, 0x42, 0x43,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42,
+ 0x7e, 0x42, 0x42, 0x43, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x47, 0x44,
+ 0x44, 0x44, 0x7c, 0x44, 0x44, 0x44, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x44, 0x44, 0x7c, 0x44, 0x44, 0x44,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x42, 0x40, 0x40, 0x40,
+ 0x40, 0x42, 0x42, 0x3c, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x3c, 0x42, 0x40, 0x40, 0x40, 0x42, 0x3c, 0x10, 0x10, 0x10, 0x00,
+ 0x00, 0x00, 0x82, 0x82, 0x44, 0x44, 0x28, 0x10, 0x7c, 0x10, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x82, 0x44,
+ 0x44, 0x28, 0x28, 0x10, 0x7c, 0x10, 0x10, 0x00, 0x00, 0x00, 0x42, 0x42,
+ 0x24, 0x24, 0x18, 0x18, 0x24, 0x24, 0x42, 0x43, 0x01, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x24, 0x18, 0x24, 0x42, 0x43,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3e,
+ 0x02, 0x02, 0x02, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x42, 0x42, 0x42, 0x3e, 0x02, 0x02, 0x03, 0x01, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x42, 0x42, 0x42, 0x4a, 0x4a, 0x3e, 0x0a, 0x0a, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x4a, 0x4a,
+ 0x3e, 0x0a, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40,
+ 0x40, 0x40, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x7c, 0x42, 0x42, 0x42, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x24, 0x18, 0x00, 0x92, 0x92, 0x92, 0x54, 0x38,
+ 0x54, 0x92, 0x92, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x18,
+ 0x00, 0x92, 0x92, 0x54, 0x38, 0x54, 0x92, 0x92, 0x00, 0x00, 0x00, 0x00,
+ 0x24, 0x24, 0x00, 0x3c, 0x42, 0x02, 0x02, 0x7e, 0x42, 0x42, 0x42, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x00, 0x3c, 0x02, 0x02,
+ 0x7e, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00, 0x92,
+ 0x92, 0x92, 0x54, 0x38, 0x54, 0x92, 0x92, 0x92, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x44, 0x44, 0x00, 0x92, 0x92, 0x54, 0x38, 0x54, 0x92, 0x92,
+ 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x00, 0x3c, 0x42, 0x42, 0x02, 0x1c,
+ 0x02, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x24,
+ 0x00, 0x3c, 0x42, 0x02, 0x1c, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x3c, 0x00, 0x42, 0x42, 0x42, 0x46, 0x4a, 0x52, 0x62, 0x42, 0x42, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x00, 0x42, 0x42, 0x42, 0x46, 0x4a,
+ 0x52, 0x62, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x3c, 0x42, 0x42, 0x7e, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x24, 0x24, 0x00, 0x3c, 0x42, 0x42, 0x42, 0x7e, 0x42, 0x42, 0x42, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x00, 0x3c, 0x42, 0x42,
+ 0x7e, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x00, 0x3c,
+ 0x42, 0x02, 0x02, 0x1e, 0x02, 0x02, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x24, 0x24, 0x00, 0x3c, 0x42, 0x02, 0x1e, 0x02, 0x42, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3e,
+ 0x02, 0x02, 0x02, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x00, 0x42,
+ 0x42, 0x42, 0x42, 0x3e, 0x02, 0x02, 0x02, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x12, 0x24, 0x00, 0x42, 0x42, 0x42, 0x42, 0x3e, 0x02, 0x02, 0x02, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x24, 0x00, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x3e, 0x02, 0x02, 0x3c, 0x00, 0x24, 0x24, 0x00, 0x42,
+ 0x42, 0x42, 0x42, 0x3e, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x24, 0x24, 0x00, 0x42, 0x42, 0x42, 0x3e, 0x02, 0x02, 0x02,
+ 0x00, 0x00, 0x00, 0x00, 0x48, 0x48, 0x00, 0x82, 0x82, 0x82, 0xf2, 0x8a,
+ 0x8a, 0x8a, 0x8a, 0xf2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x48,
+ 0x00, 0x82, 0x82, 0xf2, 0x8a, 0x8a, 0x8a, 0xf2, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x78, 0x44, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x44, 0x78,
+ 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x3e, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x3e, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x42, 0x44,
+ 0x48, 0x50, 0x60, 0x60, 0x50, 0x48, 0x44, 0x42, 0x00, 0x3c, 0x00, 0x00,
+ 0x00, 0x00, 0x40, 0x40, 0x40, 0x42, 0x44, 0x48, 0x70, 0x48, 0x44, 0x42,
+ 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
+ 0x40, 0x40, 0x40, 0x7e, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x30, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x10, 0x10, 0x00,
+ 0x10, 0x10, 0x82, 0xc6, 0xaa, 0x92, 0x92, 0x82, 0x82, 0x82, 0x82, 0x82,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0xfc, 0x92, 0x92,
+ 0x92, 0x92, 0x92, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0xc6,
+ 0xaa, 0x92, 0x92, 0x82, 0x82, 0x82, 0x82, 0x82, 0x00, 0x10, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92,
+ 0x00, 0x10, 0x10, 0x00, 0x10, 0x10, 0x42, 0x42, 0x42, 0x62, 0x52, 0x4a,
+ 0x46, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10,
+ 0x00, 0x7c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x42, 0x42, 0x42, 0x62, 0x52, 0x4a, 0x46, 0x42, 0x42, 0x42,
+ 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0xfe, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x00,
+ 0x00, 0x00, 0x10, 0x10, 0x10, 0x7c, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0e,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x7e, 0x40, 0x40, 0x40, 0x78, 0x40,
+ 0x40, 0x40, 0x40, 0x7e, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x3c, 0x42, 0x42, 0x7e, 0x40, 0x40, 0x3c, 0x00, 0x10, 0x10, 0x00,
+ 0x32, 0x4c, 0x00, 0x7e, 0x40, 0x40, 0x40, 0x78, 0x40, 0x40, 0x40, 0x7e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x4c, 0x00, 0x3c, 0x42, 0x42,
+ 0x7e, 0x40, 0x40, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x10, 0x10, 0x00,
+ 0x00, 0x00, 0x10, 0x10, 0x00, 0x30, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38,
+ 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x3c, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x00, 0x10, 0x10, 0x00,
+ 0x00, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c,
+ 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x3e, 0x00, 0x08, 0x08, 0x00, 0x64, 0x98, 0x00, 0x82,
+ 0x82, 0x44, 0x44, 0x28, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x32, 0x4c, 0x00, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3e,
+ 0x02, 0x02, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7e, 0x00, 0x7e, 0x00, 0x08, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x24, 0x24,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x12, 0x12, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x24, 0x24, 0x48, 0x00, 0x00, 0x00, 0x00, 0x48, 0x48, 0x24,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x10, 0x7c, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x7c, 0x10, 0x10, 0x10,
+ 0x10, 0x7c, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x92,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0xa8, 0x50, 0x10, 0x20, 0x20,
+ 0x40, 0x54, 0xaa, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x08, 0x10,
+ 0x20, 0x10, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x20, 0x10, 0x08, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x00, 0x24, 0x24,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x24, 0x24, 0x24, 0x24, 0x18, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x30, 0x10,
+ 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x0c, 0x14, 0x3e, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x20, 0x38, 0x04, 0x04, 0x38, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x20, 0x38,
+ 0x24, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x3c, 0x04, 0x08, 0x08, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x24, 0x18, 0x24, 0x24, 0x18, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x24, 0x24,
+ 0x1c, 0x04, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x10, 0x7c, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c,
+ 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x08, 0x10, 0x10, 0x10, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x08, 0x08, 0x08, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x24,
+ 0x24, 0x24, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x24, 0x24, 0x24, 0x24,
+ 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x30, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0x24, 0x04, 0x08, 0x10, 0x3c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x04, 0x18, 0x04, 0x04,
+ 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
+ 0x0c, 0x14, 0x3e, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x38, 0x20, 0x38, 0x04, 0x04, 0x38, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x20, 0x38, 0x24, 0x24,
+ 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c,
+ 0x04, 0x08, 0x08, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0x24, 0x18, 0x24, 0x24, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x24, 0x24, 0x1c, 0x04,
+ 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x10, 0x7c, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
+ 0x10, 0x10, 0x10, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x08, 0x08, 0x08, 0x08, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x04, 0x1c, 0x24,
+ 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x24, 0x3c, 0x20, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x24, 0x24, 0x24, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x28, 0x10, 0x28,
+ 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x38, 0x04, 0x3c, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x20, 0x20, 0x38, 0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x24, 0x28, 0x30, 0x28,
+ 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x78, 0x54, 0x54, 0x54, 0x54, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x24, 0x24, 0x24,
+ 0x38, 0x20, 0x20, 0x00, 0x00, 0x00, 0xf0, 0x88, 0x88, 0x88, 0xf4, 0x84,
+ 0x8e, 0x84, 0x84, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c,
+ 0x22, 0x40, 0xf8, 0x40, 0xf8, 0x40, 0x22, 0x1c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfe, 0x10, 0x10, 0x1c, 0x70, 0x1c, 0x70, 0x10, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x52, 0x52, 0x50, 0x50, 0x50,
+ 0x50, 0x52, 0x52, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42,
+ 0x62, 0x52, 0x6a, 0x56, 0x4a, 0x46, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x96, 0x96, 0x96, 0xd0, 0xf0, 0xf0, 0xb0, 0x96, 0x90, 0x96,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x52, 0x52, 0x52, 0x52, 0x52,
+ 0x52, 0x52, 0x5a, 0x3c, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xa4,
+ 0xa4, 0xa4, 0xa4, 0xb8, 0xa8, 0xb4, 0xaa, 0xe6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfb, 0x55, 0x55, 0x51, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x02, 0x06, 0x0a, 0x14, 0x28,
+ 0x50, 0x60, 0x40, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44,
+ 0x22, 0x22, 0x34, 0x58, 0x88, 0x88, 0x84, 0x44, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x40, 0xfe, 0x40, 0x20, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x54, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x08, 0x04, 0xfe, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x54, 0x38, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x42, 0xff,
+ 0x42, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38,
+ 0x54, 0x10, 0x10, 0x10, 0x10, 0x54, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x42, 0xfe, 0x42, 0x22, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x84, 0xfe,
+ 0x84, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38,
+ 0x54, 0x10, 0x10, 0x10, 0x54, 0x38, 0x10, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x22, 0x42, 0xfe, 0x40, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x30, 0x50, 0x92, 0x82,
+ 0x82, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x40, 0xfe, 0x00, 0xfe, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0xfe, 0x00, 0xfe, 0x40, 0x20, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x7e, 0xc0,
+ 0x7e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38,
+ 0x6c, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xfc, 0x06, 0xfc, 0x08, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x6c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x24, 0x7e, 0xc3, 0x7e, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x38, 0x6c, 0x28, 0x28, 0x28, 0x28, 0x6c, 0x38, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x82, 0x82, 0x7c, 0x44, 0x44,
+ 0x28, 0x28, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e,
+ 0x02, 0x02, 0x02, 0x7e, 0x02, 0x02, 0x02, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x7e, 0x0a, 0x0a, 0x12, 0x7e, 0x12, 0x22, 0x22, 0x7e,
+ 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x04, 0x7c, 0x8a, 0x92, 0x92,
+ 0xa2, 0x7c, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x82,
+ 0x82, 0x44, 0x44, 0x44, 0x28, 0x28, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1e, 0x20, 0x40, 0x40, 0x7e, 0x40, 0x40, 0x20, 0x1e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x1e, 0x24, 0x44, 0x48, 0x7e,
+ 0x48, 0x50, 0x30, 0x3e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1e, 0x20, 0x40, 0x7e, 0x40, 0x20, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x78, 0x04, 0x02, 0x02, 0x7e, 0x02, 0x02, 0x04, 0x78,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x78, 0x24, 0x22, 0x12, 0x7e,
+ 0x12, 0x0a, 0x0c, 0x7c, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x78, 0x04, 0x02, 0x7e, 0x02, 0x04, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x10, 0x10, 0x7c, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x10,
+ 0x10, 0x7c, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
+ 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x04,
+ 0x04, 0x04, 0x44, 0x44, 0x44, 0x24, 0x14, 0x0c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x92, 0x92, 0x92, 0x7c, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0x40,
+ 0x40, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x10, 0x28, 0x28, 0x44, 0x44, 0x82, 0x82, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x82, 0x82, 0x44, 0x44, 0x28, 0x28, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x42, 0x42,
+ 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x4c, 0x00, 0x32, 0x4c, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x7e, 0x08, 0x10,
+ 0x7e, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x08, 0x10, 0x20, 0x10, 0x08, 0x04, 0x00, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08, 0x04, 0x08,
+ 0x10, 0x20, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09,
+ 0x12, 0x24, 0x48, 0x90, 0x48, 0x24, 0x12, 0x09, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x90, 0x48, 0x24, 0x12, 0x09, 0x12, 0x24, 0x48, 0x90,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x40, 0x40, 0x40,
+ 0x40, 0x40, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x7c, 0x02, 0x02, 0x02, 0x02, 0x02, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x3e, 0x40, 0x40, 0x40, 0x40, 0x40, 0x3e, 0x00, 0x7e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x7c, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xfe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x28, 0x44, 0x82,
+ 0x82, 0x82, 0x82, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08,
+ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x38, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40,
+ 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x12,
+ 0x12, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x90, 0x90, 0x60,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x20, 0x40,
+ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
+ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
+ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20,
+ 0x10, 0x10, 0x08, 0x04, 0x40, 0x20, 0x10, 0x10, 0x08, 0x08, 0x08, 0x04,
+ 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
+ 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
+ 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x08, 0x08,
+ 0x10, 0x10, 0x20, 0x40, 0x7c, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
+ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
+ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7c,
+ 0x7c, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
+ 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
+ 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x7c, 0x0e, 0x10, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xc0, 0xc0, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x10, 0x0e, 0xe0, 0x10, 0x08, 0x08,
+ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
+ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x06, 0x06, 0x08, 0x08, 0x08,
+ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
+ 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x10, 0xe0, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x88, 0x88, 0xf8,
+ 0x88, 0x88, 0x88, 0x00, 0x1f, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00,
+ 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0xf8, 0x00, 0x1f, 0x10, 0x1c, 0x10,
+ 0x10, 0x10, 0x00, 0x00, 0x00, 0x88, 0x88, 0x50, 0x50, 0x20, 0x20, 0x00,
+ 0x1f, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0xf8, 0x80, 0xe0,
+ 0x80, 0x80, 0x80, 0x00, 0x1f, 0x10, 0x1c, 0x10, 0x10, 0x10, 0x00, 0x00,
+ 0x00, 0x70, 0x88, 0x80, 0x80, 0x88, 0x70, 0x00, 0x1e, 0x11, 0x11, 0x1e,
+ 0x12, 0x11, 0x00, 0x00, 0x00, 0x88, 0xc8, 0xa8, 0x98, 0x88, 0x88, 0x00,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x00, 0x10, 0x10, 0x10, 0x00,
+ 0x10, 0x10, 0x10, 0x00, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00,
+ 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
+ 0xf0, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf8, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1f,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f,
+ 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xf0, 0xf0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1f, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1f,
+ 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1f, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1f, 0x1f, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f,
+ 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0xf0, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xf0, 0xf0, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8,
+ 0xf8, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0xf8, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xff, 0xf0, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x1f, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
+ 0xff, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xf8, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
+ 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xff, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xff,
+ 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x1f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff,
+ 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0xff, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xff, 0xf0, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xff,
+ 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0xff, 0xff, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xff,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0xf0, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff,
+ 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0xff, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0xff, 0x1f, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff,
+ 0xff, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0xff, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0xf8, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff,
+ 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0xff, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1f, 0x10, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x20,
+ 0x2f, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xf0, 0x10, 0xf0, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x08,
+ 0xe8, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x1f, 0x10, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x3f, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x2f, 0x20,
+ 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0xf0, 0x10, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0xf8, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0xe8, 0x08,
+ 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x1f, 0x10, 0x1f, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x2f, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x2f, 0x20,
+ 0x2f, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0xf0, 0x10, 0xf0, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0xe8, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0xe8, 0x08,
+ 0xe8, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xff, 0x00, 0xff, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00,
+ 0xef, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0xef, 0x00,
+ 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0xff, 0x10, 0xff, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0xff, 0x28, 0x28, 0x28, 0x28,
+ 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0xef, 0x00,
+ 0xef, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x07, 0x08, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x20, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x20, 0xc0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x08, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20,
+ 0x40, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x10,
+ 0x08, 0x08, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x81, 0x81, 0x42, 0x42,
+ 0x24, 0x24, 0x18, 0x18, 0x18, 0x18, 0x24, 0x24, 0x42, 0x42, 0x81, 0x81,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0,
+ 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
+ 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 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,
+ 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
+ 0xfe, 0xfe, 0xfe, 0xfe, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc,
+ 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xf8, 0xf8, 0xf8, 0xf8,
+ 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8,
+ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
+ 0xf0, 0xf0, 0xf0, 0xf0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,
+ 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0xc0, 0xc0, 0xc0,
+ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
+ 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x88, 0x22, 0x88, 0x22,
+ 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22,
+ 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55,
+ 0xaa, 0x55, 0xaa, 0x55, 0xee, 0xbb, 0xee, 0xbb, 0xee, 0xbb, 0xee, 0xbb,
+ 0xee, 0xbb, 0xee, 0xbb, 0xee, 0xbb, 0xee, 0xbb, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f,
+ 0x0f, 0x0f, 0x0f, 0x0f, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xf0,
+ 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0x0f, 0x0f, 0x0f, 0x0f,
+ 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
+ 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
+ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0x0f, 0x0f, 0x0f, 0x0f,
+ 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x7e, 0x7e, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e,
+ 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x38, 0x38, 0x7c, 0x7c, 0xfe, 0xfe,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf0, 0xfc, 0xff,
+ 0xfc, 0xf0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xfe, 0xfe, 0x7c, 0x7c, 0x38, 0x38, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x0f, 0x3f, 0xff, 0x3f, 0x0f, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7c, 0xfe,
+ 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x28, 0x44, 0x82, 0x44, 0x28, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x24, 0x24, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xc3,
+ 0xc3, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xe7, 0xdb, 0xdb, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0x7c, 0x82, 0xaa, 0x82, 0x82, 0xba, 0x92, 0x82, 0x82, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xfe, 0xd6, 0xfe, 0xfe, 0xc6,
+ 0xee, 0xfe, 0xfe, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
+ 0x92, 0x54, 0x38, 0xee, 0x38, 0x54, 0x92, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x44, 0x44, 0x44, 0x44, 0x38, 0x10, 0x7c, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x06, 0x0a, 0x12, 0x38, 0x44,
+ 0x44, 0x44, 0x44, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10,
+ 0x38, 0x7c, 0xfe, 0xfe, 0x7c, 0x10, 0x10, 0x38, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x38, 0x38, 0x10, 0x54, 0xfe, 0xfe, 0x54, 0x10, 0x38,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0xfe, 0xfe, 0xfe,
+ 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x22,
+ 0x3e, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7e, 0x42, 0x7e, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x44,
+ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x04, 0x04, 0x88, 0x88,
+ 0x50, 0x50, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03,
+ 0x06, 0x06, 0xcc, 0xcc, 0x78, 0x78, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x44, 0x28, 0x18, 0x18, 0x14, 0x22, 0x20, 0x40, 0x40,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xcc, 0x78, 0x38, 0x38, 0x3c,
+ 0x66, 0x60, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08,
+ 0x10, 0x10, 0x20, 0x20, 0x10, 0x10, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x20, 0x20, 0x10, 0x10, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x12, 0x24, 0x24, 0x48, 0x48,
+ 0x24, 0x24, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x48,
+ 0x24, 0x24, 0x12, 0x12, 0x24, 0x24, 0x48, 0x48, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x40, 0x40, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00,
+ 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00, 0x00, 0x44, 0x44, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x00, 0x00, 0x00, 0x42, 0x42,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x88, 0x9c, 0xaa, 0x88, 0x88, 0x88,
+ 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0xf8, 0x00, 0x11, 0x19, 0x15, 0x13, 0x11, 0x11, 0x00, 0x00,
+ 0x00, 0x38, 0x44, 0x44, 0x44, 0x44, 0xfe, 0xfe, 0xee, 0xc6, 0xee, 0xfe,
+ 0xfe, 0xfe, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, 0xff,
+ 0xff, 0xfe, 0xfc, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x80, 0x40, 0x20, 0x10,
+ 0x08, 0x04, 0x02, 0x01, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
+ 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff, 0xff, 0x7f, 0x3f, 0x1f,
+ 0x0f, 0x07, 0x03, 0x01, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
+ 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c,
+ 0xfe, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x7c,
+ 0xd6, 0xd0, 0xd0, 0x7c, 0x16, 0x16, 0xd6, 0x7c, 0x10, 0x10, 0x00, 0x00,
+ 0x00, 0x00, 0x66, 0xd6, 0x6c, 0x0c, 0x18, 0x18, 0x30, 0x36, 0x6b, 0x66,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x76, 0xdc,
+ 0xcc, 0xcc, 0xdc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x0c,
+ 0x0c, 0x0c, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x6c, 0x38, 0xfe, 0x38, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x60, 0x60,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xce, 0xde, 0xf6,
+ 0xe6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x38,
+ 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0xfe,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x06, 0x3c, 0x06,
+ 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0e,
+ 0x1e, 0x36, 0x66, 0xc6, 0xfe, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xfc, 0x06, 0x06, 0x06, 0xc6, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x60, 0xc0, 0xc0, 0xfc, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06,
+ 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e,
+ 0x06, 0x06, 0x0c, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18,
+ 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60,
+ 0x30, 0x18, 0x0c, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x60,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x0c, 0x18,
+ 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6,
+ 0xce, 0xd6, 0xd6, 0xd6, 0xd6, 0xce, 0xc0, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xc6, 0xc6, 0xc6, 0xfc, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6,
+ 0xc6, 0xc0, 0xc0, 0xc0, 0xc0, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xf8, 0xcc, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xcc, 0xf8,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xf8, 0xc0,
+ 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0,
+ 0xc0, 0xc0, 0xf8, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc0, 0xc0, 0xde, 0xc6, 0xc6, 0xc6, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0x78,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xcc, 0xd8, 0xf0, 0xf0,
+ 0xd8, 0xcc, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0,
+ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x82, 0xc6, 0xee, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xe6, 0xf6, 0xde,
+ 0xce, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0xfc, 0xc0, 0xc0, 0xc0, 0xc0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
+ 0xc6, 0xc6, 0xde, 0x7c, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0xfc, 0xf0, 0xd8, 0xcc, 0xc6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0x7c, 0x06, 0x06, 0xc6, 0xc6, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x6c, 0x6c, 0x38, 0x38,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6,
+ 0xfe, 0xee, 0xc6, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6,
+ 0x6c, 0x6c, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x0c, 0x18, 0x30,
+ 0x60, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x30,
+ 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x60, 0x60, 0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c, 0x06, 0x06,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
+ 0x0c, 0x0c, 0x0c, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x66,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xfe, 0x00, 0x00, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7c, 0x06, 0x7e, 0xc6, 0xc6, 0xc6, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xfc,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0,
+ 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06,
+ 0x06, 0x7e, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xfe, 0xc0, 0xc0, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x30, 0x30, 0xfc, 0x30, 0x30,
+ 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7e, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x7c, 0x00,
+ 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06,
+ 0x00, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00,
+ 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc6, 0xcc, 0xd8, 0xf0, 0xd8, 0xcc, 0xc6,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xfc, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xfc, 0xc0, 0xc0, 0xc0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e,
+ 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xf0, 0xe0,
+ 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7e, 0xc0, 0xc0, 0x7c, 0x06, 0x06, 0xfc, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x30, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x30, 0x1e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xc6, 0xc6, 0xc6, 0x6c, 0x6c, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xd6, 0xd6, 0xd6, 0xd6, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0x6c,
+ 0x38, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x7c, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0xfe,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x30, 0x30, 0x30, 0x60, 0x30,
+ 0x30, 0x30, 0x30, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x70,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0xdb, 0xce, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18,
+ 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x10, 0x10, 0x7c, 0xd6, 0xd0, 0xd0, 0xd0, 0xd6, 0x7c,
+ 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x60, 0x60, 0xf8, 0x60,
+ 0x60, 0x60, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x66, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x7e, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x60,
+ 0x38, 0x6c, 0x66, 0x66, 0x36, 0x1c, 0x06, 0x66, 0x3c, 0x00, 0x00, 0x00,
+ 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x06, 0x3e, 0x66, 0x3e, 0x00, 0x7e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1b, 0x36, 0x6c, 0xd8, 0x6c, 0x36, 0x1b, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e,
+ 0x18, 0x18, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x0c,
+ 0x18, 0x30, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x78, 0x0c, 0x38, 0x0c, 0x0c, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xce, 0xf6, 0xc0, 0xc0, 0xc0, 0x00,
+ 0x00, 0x00, 0x7e, 0xd6, 0xd6, 0xd6, 0xd6, 0x76, 0x16, 0x16, 0x16, 0x16,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x60, 0x00, 0x00, 0x18, 0x38, 0x18,
+ 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x6c, 0x36,
+ 0x1b, 0x36, 0x6c, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xe0, 0x62,
+ 0x66, 0x6c, 0x18, 0x30, 0x66, 0xce, 0x9a, 0x3e, 0x06, 0x06, 0x00, 0x00,
+ 0x00, 0x60, 0xe0, 0x62, 0x66, 0x6c, 0x18, 0x30, 0x60, 0xdc, 0xb6, 0x0c,
+ 0x18, 0x3e, 0x00, 0x00, 0x00, 0xe0, 0x30, 0x62, 0x36, 0xec, 0x18, 0x30,
+ 0x66, 0xce, 0x9a, 0x3e, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30,
+ 0x00, 0x30, 0x30, 0x60, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xfe,
+ 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x00, 0x7c,
+ 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
+ 0x76, 0xdc, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6,
+ 0x00, 0x00, 0x00, 0x00, 0x6c, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xfe,
+ 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x38, 0x7c,
+ 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7e, 0xd8, 0xd8, 0xd8, 0xfe, 0xd8, 0xd8, 0xd8, 0xd8, 0xde,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc0, 0xc0, 0xc0,
+ 0xc0, 0xc6, 0xc6, 0x7c, 0x30, 0x30, 0x60, 0x00, 0x30, 0x18, 0x00, 0xfe,
+ 0xc0, 0xc0, 0xc0, 0xf8, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x30, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xf8, 0xc0, 0xc0, 0xc0, 0xfe,
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xf8,
+ 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x6c, 0x00, 0xfe,
+ 0xc0, 0xc0, 0xc0, 0xf8, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00,
+ 0x30, 0x18, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x0c, 0x18, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x00, 0x3c,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x66, 0x66, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x6c, 0x66, 0x66, 0xf6, 0x66,
+ 0x66, 0x66, 0x6c, 0x78, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, 0xc6,
+ 0xc6, 0xe6, 0xf6, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
+ 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x00, 0x7c,
+ 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x76, 0xdc, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x6c, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xc6, 0x6c, 0x38, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc7, 0xc6, 0xce, 0xde, 0xf6, 0xe6, 0xc6, 0xc6, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x30, 0x18, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0xc6, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x38, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x6c, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x18, 0xc3, 0xc3,
+ 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0xfc, 0xc0, 0xc0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0xcc, 0xcc, 0xc8, 0xfc, 0xc6,
+ 0xc6, 0xc6, 0xe6, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x18,
+ 0x00, 0x7c, 0x06, 0x7e, 0xc6, 0xc6, 0xc6, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x30, 0x00, 0x7c, 0x06, 0x7e, 0xc6, 0xc6, 0xc6, 0x7e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x00, 0x7c, 0x06, 0x7e,
+ 0xc6, 0xc6, 0xc6, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc,
+ 0x00, 0x7c, 0x06, 0x7e, 0xc6, 0xc6, 0xc6, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x6c, 0x6c, 0x00, 0x7c, 0x06, 0x7e, 0xc6, 0xc6, 0xc6, 0x7e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x38, 0x7c, 0x06, 0x7e,
+ 0xc6, 0xc6, 0xc6, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x6c, 0x16, 0x16, 0x7e, 0xd0, 0xd0, 0x6c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c,
+ 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xc6,
+ 0xfe, 0xc0, 0xc0, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30,
+ 0x00, 0x7c, 0xc6, 0xc6, 0xfe, 0xc0, 0xc0, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xfe, 0xc0, 0xc0, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x6c, 0x00, 0x7c, 0xc6, 0xc6,
+ 0xfe, 0xc0, 0xc0, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x18,
+ 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0c, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x00, 0x38, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x6c,
+ 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x68, 0x30, 0x58, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, 0xfc, 0xc6, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x18,
+ 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x30, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc,
+ 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x6c, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x7e,
+ 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x3d, 0x67, 0x6e, 0x7e, 0x76, 0xe6, 0xbc, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x30, 0x18, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x00, 0xc6, 0xc6, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c,
+ 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x6c, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x00, 0xc6, 0xc6, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x7c, 0x00, 0x00, 0x00, 0xc0, 0xc0,
+ 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xfc, 0xc0, 0xc0, 0xc0, 0x00,
+ 0x00, 0x00, 0x6c, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e,
+ 0x06, 0x06, 0x7c, 0x00, 0x7c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe,
+ 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c,
+ 0x00, 0x7c, 0x06, 0x7e, 0xc6, 0xc6, 0xc6, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x6c, 0x38, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x38, 0x00, 0x7c, 0x06, 0x7e,
+ 0xc6, 0xc6, 0xc6, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x06, 0x0c, 0x07, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x06, 0x7e, 0xc6, 0xc6, 0xc6, 0x7e,
+ 0x06, 0x0c, 0x07, 0x00, 0x18, 0x30, 0x00, 0x7c, 0xc6, 0xc6, 0xc0, 0xc0,
+ 0xc0, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30,
+ 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0xc6, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc0,
+ 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x7c,
+ 0xc6, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x18, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x6c, 0x38, 0x00, 0x7c, 0xc6, 0xc6, 0xc0, 0xc0,
+ 0xc0, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x38,
+ 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x6c, 0x38, 0x00, 0xf8, 0xcc, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xcc, 0xf8,
+ 0x00, 0x00, 0x00, 0x00, 0x6c, 0x38, 0x06, 0x06, 0x06, 0x7e, 0xc6, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x1f,
+ 0x06, 0x7e, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x7c, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xf8, 0xc0, 0xc0, 0xc0, 0xc0, 0xfe,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x7c, 0xc6, 0xc6,
+ 0xfe, 0xc0, 0xc0, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x38, 0x00, 0xfe,
+ 0xc0, 0xc0, 0xc0, 0xf8, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x6c, 0x38, 0x00, 0x7c, 0xc6, 0xc6, 0xfe, 0xc0, 0xc0, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xf8,
+ 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18,
+ 0x00, 0x7c, 0xc6, 0xc6, 0xfe, 0xc0, 0xc0, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xf8, 0xc0, 0xc0, 0xc0, 0xc0, 0xfe,
+ 0x06, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6,
+ 0xfe, 0xc0, 0xc0, 0x7c, 0x18, 0x30, 0x1c, 0x00, 0x38, 0x6c, 0x00, 0x7c,
+ 0xc6, 0xc6, 0xc0, 0xde, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x6c, 0x00, 0x7e, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e,
+ 0x06, 0x06, 0x7c, 0x00, 0x6c, 0x38, 0x00, 0x7c, 0xc6, 0xc6, 0xc0, 0xde,
+ 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x38,
+ 0x00, 0x7e, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x7c, 0x00,
+ 0x18, 0x18, 0x00, 0x7c, 0xc6, 0xc6, 0xc0, 0xde, 0xc6, 0xc6, 0xc6, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x7e, 0xc6, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x7c, 0x00, 0x00, 0x00, 0x7c, 0xc6,
+ 0xc6, 0xc0, 0xc0, 0xde, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x30, 0x30, 0x60,
+ 0x00, 0x0c, 0x18, 0x18, 0x00, 0x7e, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e,
+ 0x06, 0x06, 0x7c, 0x00, 0x38, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe,
+ 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x36, 0xc0, 0xc0,
+ 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x66, 0xff, 0x66, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x66,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xf8, 0x60, 0x7c, 0x66, 0x66,
+ 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, 0x3c,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x76, 0xdc, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c,
+ 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x6c, 0x38, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x38, 0x00, 0x38, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x18, 0x30, 0x1c, 0x00,
+ 0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c,
+ 0x18, 0x30, 0x1c, 0x00, 0x18, 0x18, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xcf, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xf6, 0xf6, 0xdc,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0x00, 0xc6, 0xc6, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0xc6, 0x36, 0x36, 0x1c, 0x00, 0x1c, 0x36, 0x00, 0x1e,
+ 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0e, 0x1b, 0x00, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xcc, 0xd8, 0xf0, 0xf0,
+ 0xd8, 0xcc, 0xc6, 0xc6, 0x00, 0x30, 0x30, 0x60, 0x00, 0x00, 0xc0, 0xc0,
+ 0xc0, 0xc6, 0xcc, 0xd8, 0xf0, 0xd8, 0xcc, 0xc6, 0x00, 0x30, 0x30, 0x60,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xcc, 0xd8, 0xf0, 0xd8, 0xcc, 0xc6,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0xc0, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
+ 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x18, 0x00, 0x38,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xfe,
+ 0x00, 0x30, 0x30, 0x60, 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x3c, 0x00, 0x18, 0x18, 0x30, 0x6c, 0x38, 0xc0, 0xc0,
+ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00,
+ 0x6c, 0x38, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xcc, 0xcc,
+ 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x18,
+ 0x18, 0x18, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x60, 0x60, 0x60, 0x60, 0x70, 0xe0, 0x60, 0x60, 0x60, 0x7f,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x1c, 0x38,
+ 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0xc6, 0xc6,
+ 0xc6, 0xe6, 0xf6, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x30, 0x00, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xe6, 0xf6, 0xde,
+ 0xce, 0xc6, 0xc6, 0xc6, 0x00, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x30, 0x30, 0x60,
+ 0x6c, 0x38, 0xc6, 0xc6, 0xc6, 0xe6, 0xf6, 0xde, 0xce, 0xc6, 0xc6, 0xc6,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x38, 0x00, 0xfc, 0xc6, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0xc0,
+ 0x00, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xe6, 0xf6, 0xde, 0xce, 0xc6, 0xc6, 0xc6,
+ 0x06, 0x06, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xc6, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0xc6, 0x06, 0x06, 0x1c, 0x00, 0x7c, 0x00, 0x7c, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x7c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x6c, 0x38, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x38,
+ 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x36, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0x00, 0x7c, 0xc6, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xd8,
+ 0xd8, 0xd8, 0xde, 0xd8, 0xd8, 0xd8, 0xd8, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xd6, 0xd6, 0xde, 0xd0, 0xd0, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x00, 0xfc, 0xc6, 0xc6, 0xc6, 0xfc,
+ 0xf0, 0xd8, 0xcc, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30,
+ 0x00, 0xde, 0xf0, 0xe0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0xfc, 0xf0, 0xd8, 0xcc, 0xc6,
+ 0x00, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0x78, 0x70,
+ 0x60, 0x60, 0x60, 0x60, 0x00, 0x60, 0x60, 0xc0, 0x6c, 0x38, 0x00, 0xfc,
+ 0xc6, 0xc6, 0xc6, 0xfc, 0xf0, 0xd8, 0xcc, 0xc6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x6c, 0x38, 0x00, 0xde, 0xf0, 0xe0, 0xc0, 0xc0, 0xc0, 0xc0,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0x7c,
+ 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x18,
+ 0x00, 0x7e, 0xc0, 0xc0, 0x7c, 0x06, 0x06, 0xfc, 0x00, 0x00, 0x00, 0x00,
+ 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0x7c, 0x06, 0x06, 0xc6, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x00, 0x7e, 0xc0, 0xc0,
+ 0x7c, 0x06, 0x06, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6,
+ 0xc0, 0xc0, 0x7c, 0x06, 0x06, 0xc6, 0xc6, 0x7c, 0x30, 0x30, 0x60, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xc0, 0xc0, 0x7c, 0x06, 0x06, 0xfc,
+ 0x30, 0x30, 0x60, 0x00, 0x6c, 0x38, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0x7c,
+ 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x38,
+ 0x00, 0x7e, 0xc0, 0xc0, 0x7c, 0x06, 0x06, 0xfc, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x0c, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0xfc, 0x30, 0x30,
+ 0x30, 0x30, 0x30, 0x1e, 0x0c, 0x0c, 0x18, 0x00, 0x6c, 0x38, 0x00, 0xff,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x6c, 0x38, 0x00, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x30, 0x1e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x7e, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30,
+ 0x30, 0xfc, 0x30, 0x78, 0x30, 0x30, 0x30, 0x1e, 0x00, 0x00, 0x00, 0x00,
+ 0x76, 0xdc, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, 0xc6, 0xc6, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0xc6, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x7c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e,
+ 0x00, 0x00, 0x00, 0x00, 0x6c, 0x38, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x38,
+ 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x38, 0x6c, 0x38, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x38, 0xc6, 0xc6, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0x00, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x36, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0x7c, 0x18, 0x30, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x07, 0x00,
+ 0x38, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xfe, 0xee, 0xc6, 0x82,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x00, 0xc6, 0xc6, 0xd6,
+ 0xd6, 0xd6, 0xd6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0xc3,
+ 0xc3, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x30, 0x00, 0xfe, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0xc0, 0xfe,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x00, 0xfe, 0x0c, 0x18,
+ 0x30, 0x60, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0xfe,
+ 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x18, 0x00, 0xfe, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0xfe,
+ 0x00, 0x00, 0x00, 0x00, 0x6c, 0x38, 0x00, 0xfe, 0x06, 0x0c, 0x18, 0x30,
+ 0x60, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x38,
+ 0x00, 0xfe, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1e, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x06, 0x06, 0x06,
+ 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06,
+ 0x06, 0x06, 0x3e, 0x06, 0x06, 0x06, 0x06, 0xfe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc0, 0x78, 0xc0,
+ 0xc0, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x1b,
+ 0x18, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0x70, 0x00,
+ 0x00, 0x00, 0x66, 0x66, 0x66, 0x76, 0x7e, 0x6e, 0x66, 0x66, 0x66, 0x66,
+ 0x60, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xc6, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0xc6, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0xfe, 0x06,
+ 0x0c, 0x18, 0x3c, 0x06, 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0x7c, 0x06, 0x06, 0xc6, 0xc6, 0x7c,
+ 0x00, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xc0, 0xc0,
+ 0x7c, 0x06, 0x06, 0xfc, 0x00, 0x30, 0x30, 0x60, 0x00, 0x00, 0xff, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x30,
+ 0x00, 0x00, 0x30, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x30, 0x1e,
+ 0x00, 0x0c, 0x0c, 0x18, 0x7e, 0x00, 0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c,
+ 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x7c, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x06,
+ 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7c, 0xc6, 0xc6, 0xfe, 0x06, 0x06, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x06, 0x06, 0xfe, 0xc6, 0xc6, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0,
+ 0x78, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x60, 0x60, 0xc0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0x0c, 0x18, 0x3c, 0x06, 0x06,
+ 0xc6, 0xc6, 0x7c, 0x00, 0x18, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x38, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x06, 0x0c, 0x07, 0x00, 0x76, 0xdc, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x36, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x38, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0x18, 0x00, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x00, 0x6c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0xc0, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xc0, 0x00, 0xfe,
+ 0xc0, 0xc0, 0xc0, 0xf8, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0xc0, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0xc0, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x60, 0xc0, 0x7c, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0xc0, 0x00, 0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0xc0, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
+ 0xc6, 0x6c, 0x6c, 0xee, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0xd8, 0xd8,
+ 0x00, 0x70, 0x30, 0x30, 0x30, 0x30, 0x30, 0x1c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x38, 0x38, 0x6c, 0x6c,
+ 0x6c, 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6,
+ 0xc6, 0xc6, 0xd6, 0xd6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x10, 0x38, 0x38, 0x6c, 0x6c, 0x6c, 0xc6, 0xc6, 0xc6,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x7c, 0x00,
+ 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfe, 0xc0, 0x60, 0x30, 0x18, 0x18, 0x30, 0x60, 0xc0, 0xfe,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x7c, 0xd6, 0xd6, 0xd6, 0xd6,
+ 0xd6, 0xd6, 0x7c, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0xd6,
+ 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x7c, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x6c, 0xee,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x00, 0x7a, 0xce, 0xcc,
+ 0xcc, 0xcc, 0xce, 0x7a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30,
+ 0x00, 0x7c, 0xc6, 0xc0, 0x78, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x30, 0x00, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
+ 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x18, 0x30, 0x00, 0x70, 0x30, 0x30,
+ 0x30, 0x30, 0x30, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x00, 0x6c,
+ 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0xce, 0xcc, 0xcc, 0xcc, 0xce, 0x7a,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0xcc, 0xcc, 0xc8, 0xfc, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0xfc, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x00,
+ 0x00, 0x00, 0x7e, 0x30, 0x18, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x0c, 0x18, 0x30, 0x60, 0xc0,
+ 0xc0, 0xc0, 0xc0, 0x7c, 0x06, 0x06, 0x0c, 0x00, 0x00, 0x00, 0x3c, 0x66,
+ 0x66, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x30, 0x30, 0x30, 0x30, 0x30, 0x1c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x18, 0x18, 0x3c, 0x3c,
+ 0x66, 0x66, 0xc3, 0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xc0,
+ 0xc0, 0xc0, 0x7c, 0xc0, 0xc0, 0xc0, 0xc0, 0x7c, 0x06, 0x06, 0x0c, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0xfc, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0, 0x7c, 0x06, 0x06, 0x0c, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x7c,
+ 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0x6c,
+ 0x6c, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x7c, 0x10, 0x10, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0xc6, 0xd6, 0xd6, 0xd6, 0xfe, 0x6c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0xd8, 0x00, 0x70, 0x30, 0x30,
+ 0x30, 0x30, 0x30, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x6c,
+ 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x30, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x00, 0x44, 0xc6, 0xd6,
+ 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66,
+ 0x66, 0x66, 0x3f, 0x06, 0xe6, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x7c, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x7c,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe3, 0x36, 0x1c,
+ 0x18, 0x38, 0x6c, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xfc, 0xc0, 0xc0, 0x7c, 0x00,
+ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x60, 0xc0,
+ 0xfc, 0xc0, 0x60, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xf8, 0x0c, 0x06, 0x7e, 0x06, 0x0c, 0xf8, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xf0, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0,
+ 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6,
+ 0xc0, 0xc0, 0xf8, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x30, 0x70, 0xd0, 0xdc, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x9c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xd0, 0xd0, 0xdc, 0xf6, 0xd6,
+ 0xd6, 0xd6, 0xd6, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x60,
+ 0x60, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x30, 0xc6, 0xc6, 0xcc, 0xd8, 0xf0, 0xf0, 0xd8, 0xcc, 0xc6, 0xc6,
+ 0x00, 0x00, 0x00, 0x00, 0x30, 0x18, 0xc6, 0xc6, 0xc6, 0xce, 0xde, 0xf6,
+ 0xe6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x38, 0xc6, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe,
+ 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x66,
+ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0xff, 0xc3, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xd6, 0xd6, 0xd6, 0x7c, 0x38, 0x7c, 0xd6, 0xd6, 0xd6, 0xd6,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xce, 0xde, 0xf6,
+ 0xe6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x38, 0xc6, 0xc6,
+ 0xc6, 0xce, 0xde, 0xf6, 0xe6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1e, 0x36, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0xc6,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e,
+ 0x06, 0x06, 0x06, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x7c, 0xd6,
+ 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x7c, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7f,
+ 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e,
+ 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0xd6,
+ 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x7f,
+ 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x60, 0x60, 0x7c, 0x66, 0x66,
+ 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6,
+ 0xc6, 0xe6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xe6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x60, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0x3e, 0x06,
+ 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xd6,
+ 0xd6, 0xd6, 0xd6, 0xf6, 0xd6, 0xd6, 0xd6, 0xcc, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7e, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x1e, 0x36, 0x66, 0xc6,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0xcc,
+ 0xcc, 0xc8, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0xfc, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0xd6, 0x7c,
+ 0x38, 0x7c, 0xd6, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7c, 0xc6, 0x06, 0x3c, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x66, 0xc6,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xee, 0xfe,
+ 0xd6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0x7f, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0x7e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0xd6, 0xd6,
+ 0xd6, 0xd6, 0xd6, 0x7f, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xe0, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xe6, 0xd6, 0xd6, 0xd6, 0xe6,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x7c,
+ 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7c, 0xc6, 0x06, 0x3e, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xd6, 0xd6, 0xf6, 0xd6, 0xd6, 0xcc,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xc6, 0xc6,
+ 0x7e, 0x36, 0x66, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xf8,
+ 0x60, 0x7c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x06, 0x06, 0x1c, 0x00,
+ 0x00, 0x00, 0x18, 0x30, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0,
+ 0xf8, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x70, 0xd0, 0xdc, 0xd6, 0xd6, 0xd6, 0x9c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xd0, 0xdc, 0xf6, 0xd6, 0xd6, 0xdc,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x00, 0xc6, 0xcc, 0xd8,
+ 0xf0, 0xd8, 0xcc, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x38,
+ 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x7c, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe,
+ 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x60, 0xf8, 0x60, 0x7c, 0x66, 0x66,
+ 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60,
+ 0xf8, 0x60, 0x60, 0x7c, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfe, 0xc6, 0x6c, 0x6c, 0x38, 0x7c, 0xd6, 0xd6, 0xd6, 0xd6,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x6c, 0x28,
+ 0x38, 0x7c, 0xd6, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0xfe, 0xc0,
+ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x06, 0x06, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x60, 0x60, 0x60, 0xfc, 0x60,
+ 0x60, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7f, 0x60, 0x60, 0xfc, 0x60, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6,
+ 0x06, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0,
+ 0xf8, 0xcc, 0xcc, 0xcc, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0xd6, 0xd6,
+ 0xd6, 0x7c, 0x38, 0x7c, 0xd6, 0xd6, 0xd6, 0xd7, 0x03, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0xd6, 0x7c, 0x38, 0x7c, 0xd6, 0xd7,
+ 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x06, 0x3c, 0x06,
+ 0x06, 0xc6, 0xc6, 0x7c, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7c, 0xc6, 0x06, 0x3c, 0x06, 0xc6, 0x7c, 0x30, 0x30, 0x30, 0x00,
+ 0x00, 0x00, 0xc6, 0xc6, 0xcc, 0xd8, 0xf0, 0xf0, 0xd8, 0xcc, 0xc6, 0xc7,
+ 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xcc, 0xd8,
+ 0xf0, 0xd8, 0xcc, 0xc7, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6,
+ 0xd6, 0xdc, 0xf8, 0xf8, 0xdc, 0xd6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xd6, 0xdc, 0xf8, 0xdc, 0xd6, 0xc6,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe3, 0xe3, 0x66, 0x6c, 0x78, 0x78,
+ 0x6c, 0x66, 0x63, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xe3, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0x63, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc7,
+ 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6,
+ 0xfe, 0xc6, 0xc6, 0xc7, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0xcf, 0xcc,
+ 0xcc, 0xcc, 0xfc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xcf, 0xcc, 0xcc, 0xfc, 0xcc, 0xcc, 0xcc,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc0, 0xc0, 0xc0,
+ 0xc0, 0xc6, 0xc6, 0x7c, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x30, 0x30, 0x30, 0x00,
+ 0x00, 0x00, 0xc3, 0xc3, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3, 0x66,
+ 0x66, 0x3c, 0x3c, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0xc6, 0xc6,
+ 0x6c, 0x6c, 0x38, 0x38, 0x6c, 0x6c, 0xc6, 0xc7, 0x03, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0xc7,
+ 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e,
+ 0x06, 0x06, 0x06, 0x07, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x07, 0x03, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0x7e, 0x16, 0x16, 0x06, 0x06,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xd6, 0xd6,
+ 0x7e, 0x16, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0,
+ 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6,
+ 0x00, 0x00, 0x00, 0x00, 0x6c, 0x38, 0x00, 0xd6, 0xd6, 0xd6, 0x7c, 0x38,
+ 0x7c, 0xd6, 0xd6, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x38,
+ 0x00, 0xd6, 0xd6, 0x7c, 0x38, 0x7c, 0xd6, 0xd6, 0x00, 0x00, 0x00, 0x00,
+ 0x6c, 0x6c, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0xfe, 0xc6, 0xc6, 0xc6, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x6c, 0x00, 0x7c, 0x06, 0x06,
+ 0xfe, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x6c, 0x00, 0xd6,
+ 0xd6, 0xd6, 0x7c, 0x38, 0x7c, 0xd6, 0xd6, 0xd6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x6c, 0x6c, 0x00, 0xd6, 0xd6, 0x7c, 0x38, 0x7c, 0xd6, 0xd6,
+ 0x00, 0x00, 0x00, 0x00, 0x6c, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0x06, 0x3c,
+ 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x6c,
+ 0x00, 0x7c, 0xc6, 0x06, 0x3c, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x7c, 0x00, 0xc6, 0xc6, 0xc6, 0xce, 0xde, 0xf6, 0xe6, 0xc6, 0xc6, 0xc6,
+ 0x00, 0x00, 0x00, 0x00, 0x6c, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0xce, 0xde,
+ 0xf6, 0xe6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x6c, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x6c, 0x00, 0x7c, 0xc6, 0xc6,
+ 0xfe, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x6c, 0x00, 0x7c,
+ 0xc6, 0x06, 0x06, 0x3e, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x6c, 0x6c, 0x00, 0x7c, 0xc6, 0x06, 0x3e, 0x06, 0xc6, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e,
+ 0x06, 0x06, 0x06, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x6c, 0x00, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x7c, 0x00, 0x00, 0x00, 0x00,
+ 0x36, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0x00, 0xc6, 0xc6, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x7c, 0x00, 0x6c, 0x6c, 0x00, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x6c, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06,
+ 0x00, 0x00, 0x00, 0x00, 0x6c, 0x6c, 0x00, 0xc6, 0xc6, 0xc6, 0xe6, 0xd6,
+ 0xd6, 0xd6, 0xd6, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x6c,
+ 0x00, 0xc6, 0xc6, 0xe6, 0xd6, 0xd6, 0xd6, 0xe6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xf8, 0xcc, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xcc, 0xf8,
+ 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x7e, 0xc6, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0x7e, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0xc6, 0xc6,
+ 0xcc, 0xd8, 0xf0, 0xf0, 0xd8, 0xcc, 0xc6, 0xc6, 0x00, 0x7c, 0x00, 0x00,
+ 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc6, 0xcc, 0xd8, 0xf0, 0xd8, 0xcc, 0xc6,
+ 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
+ 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x38, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x18, 0x18, 0x00,
+ 0x18, 0x18, 0x82, 0xc6, 0xee, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0xfc, 0xd6, 0xd6,
+ 0xd6, 0xd6, 0xd6, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0xc6,
+ 0xee, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x18, 0x18, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6,
+ 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0xc6, 0xc6, 0xc6, 0xe6, 0xf6, 0xde,
+ 0xce, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30,
+ 0x00, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xe6, 0xf6, 0xde, 0xce, 0xc6, 0xc6, 0xc6,
+ 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xc6, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0xff, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00,
+ 0x00, 0x00, 0x30, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x30, 0x1e,
+ 0x00, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xf8, 0xc0,
+ 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7c, 0xc6, 0xc6, 0xfe, 0xc0, 0xc0, 0x7c, 0x00, 0x18, 0x18, 0x00,
+ 0x76, 0xdc, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xf8, 0xc0, 0xc0, 0xc0, 0xfe,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, 0x7c, 0xc6, 0xc6,
+ 0xfe, 0xc0, 0xc0, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x18, 0x18, 0x00,
+ 0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c,
+ 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x18, 0x18, 0x00,
+ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c,
+ 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0x7e, 0x00, 0x18, 0x18, 0x00, 0x76, 0xdc, 0x00, 0xc3,
+ 0xc3, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x76, 0xdc, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e,
+ 0x06, 0x06, 0x7c, 0x00, 0x00, 0x00, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c,
+ 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0xfe,
+ 0x00, 0x18, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x66, 0xcc, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x33, 0x66, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0xcc, 0x00, 0x00, 0x00,
+ 0x00, 0xcc, 0xcc, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18,
+ 0x7e, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0xdb,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0xac, 0xf8, 0x18, 0x30, 0x30,
+ 0x60, 0x7f, 0xd5, 0xdf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18,
+ 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30,
+ 0x60, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x30, 0x18, 0x0c, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x66,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x6c, 0x6c, 0x6c, 0x38, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x38, 0x18,
+ 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0c, 0x1c, 0x34, 0x7e, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x60, 0x78, 0x0c, 0x0c, 0x78, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x60, 0x78,
+ 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x38, 0x6c, 0x6c, 0x38, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x6c,
+ 0x3c, 0x0c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x30, 0x30, 0x30, 0x18, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x18, 0x18,
+ 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x78, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38,
+ 0x6c, 0x6c, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x0c, 0x18, 0x30,
+ 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78,
+ 0x0c, 0x38, 0x0c, 0x0c, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x0c, 0x1c, 0x34, 0x7e, 0x0c, 0x0c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x60, 0x78, 0x0c, 0x0c,
+ 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38,
+ 0x60, 0x78, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x7c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x38, 0x6c, 0x6c,
+ 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38,
+ 0x6c, 0x6c, 0x3c, 0x0c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x30, 0x30, 0x30,
+ 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30,
+ 0x18, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x0c, 0x3c, 0x6c, 0x3c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x7c, 0x60,
+ 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x38, 0x6c, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0x6c,
+ 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60,
+ 0x78, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x60, 0x60, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xfc, 0xd6, 0xd6, 0xd6, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x78, 0x6c, 0x6c, 0x6c, 0x78, 0x60, 0x60, 0x00,
+ 0x00, 0x00, 0xf8, 0xcc, 0xcc, 0xcc, 0xfa, 0xc6, 0xcf, 0xc6, 0xc6, 0xc3,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x33, 0x60, 0xfc, 0x60,
+ 0xfc, 0x60, 0x33, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x18,
+ 0x18, 0x1e, 0x78, 0x1e, 0x78, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x66, 0x66, 0x33, 0x33, 0x3e, 0x7c, 0xcc, 0xcc, 0xc6, 0x66,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x60, 0xfe,
+ 0xfe, 0x60, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c,
+ 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0c, 0xfe, 0xfe, 0x0c, 0x08, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x24, 0x66, 0xff, 0xff, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x62, 0xfe,
+ 0xfe, 0x62, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x88, 0x8c, 0xfe, 0xfe, 0x8c, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x7e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x26, 0x66,
+ 0xfe, 0xfe, 0x60, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
+ 0x38, 0x68, 0xcb, 0xc3, 0xc3, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x20, 0x60, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0x0c, 0x08,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0c, 0xfe, 0xfe, 0x00,
+ 0xfe, 0xfe, 0x60, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x3e, 0x7e, 0xe0, 0x7e, 0x3e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x10, 0x38, 0x7c, 0xee, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xf8, 0xfc, 0x0e,
+ 0xfc, 0xf8, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x6c,
+ 0x6c, 0x6c, 0x6c, 0x6c, 0xee, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x24, 0x7e, 0xff, 0xc3, 0xff, 0x7e, 0x24, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7c, 0xee, 0x6c, 0x6c,
+ 0xee, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6,
+ 0xc6, 0xfe, 0x6c, 0x6c, 0x6c, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x06, 0xfe, 0x06, 0x06, 0x06, 0xfe,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xfe, 0x1e, 0x16, 0x36, 0xfe,
+ 0x36, 0x66, 0x66, 0xfe, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0c,
+ 0x7c, 0xce, 0xde, 0xf6, 0xe6, 0x7c, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xfe, 0xc6, 0xc6, 0x6c, 0x6c, 0x6c, 0x38, 0x38, 0x10, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x60, 0xc0, 0xc0, 0xfe,
+ 0xc0, 0xc0, 0x60, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x3e,
+ 0x6c, 0xcc, 0xd8, 0xfe, 0xd8, 0xf0, 0x70, 0x7e, 0x60, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x3e, 0x60, 0xc0, 0xfe, 0xc0, 0x60, 0x3e, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0c, 0x06, 0x06, 0xfe,
+ 0x06, 0x06, 0x0c, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf8,
+ 0x6c, 0x66, 0x36, 0xfe, 0x36, 0x1e, 0x1c, 0xfc, 0x0c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0c, 0x06, 0xfe, 0x06, 0x0c, 0xf8, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x18,
+ 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0x60, 0x30,
+ 0x18, 0x0c, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0e, 0x0c, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0xcc, 0x6c, 0x3c, 0x1c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xd6, 0xd6,
+ 0xd6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x3c, 0x3c, 0x66, 0x66, 0xc3, 0xc3,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3, 0x66, 0x66,
+ 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00,
+ 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x06, 0xfe, 0x18, 0x30, 0xfe, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x60, 0x30,
+ 0x18, 0x0c, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30,
+ 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x09, 0x1b, 0x36, 0x6c, 0xd8, 0x6c, 0x36, 0x1b, 0x09,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xd8, 0x6c, 0x36, 0x1b,
+ 0x36, 0x6c, 0xd8, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x7e, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x06, 0x06, 0x06, 0x06, 0x06, 0xfc, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xc0, 0xc0, 0xc0, 0xc0,
+ 0xc0, 0x7e, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0xfc, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
+ 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
+ 0x0c, 0x0c, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30,
+ 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0,
+ 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x18,
+ 0x30, 0x30, 0x30, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60,
+ 0x60, 0x30, 0x30, 0x30, 0x18, 0x18, 0x0c, 0x06, 0x60, 0x30, 0x18, 0x18,
+ 0x0c, 0x0c, 0x0c, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x0c, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x60, 0x7e, 0x60, 0x60, 0x60,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60,
+ 0x60, 0x60, 0x60, 0x7e, 0x7e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x7e,
+ 0x0f, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+ 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xe0,
+ 0xe0, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+ 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0f,
+ 0xf0, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
+ 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x07,
+ 0x07, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
+ 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0xf0,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xcc, 0xcc, 0xfc, 0xcc, 0xcc, 0xcc, 0x00, 0x3f, 0x0c, 0x0c, 0x0c,
+ 0x0c, 0x0c, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf8, 0x00,
+ 0x3f, 0x30, 0x3c, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc,
+ 0xcc, 0x78, 0x30, 0x00, 0x3f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x00, 0x00,
+ 0x00, 0xfc, 0xc0, 0xf0, 0xc0, 0xc0, 0xc0, 0x00, 0x3f, 0x30, 0x3c, 0x30,
+ 0x30, 0x30, 0x00, 0x00, 0x00, 0x78, 0xcc, 0xc0, 0xc0, 0xcc, 0x78, 0x00,
+ 0x3e, 0x33, 0x33, 0x3e, 0x36, 0x33, 0x00, 0x00, 0x00, 0xcc, 0xec, 0xfc,
+ 0xdc, 0xcc, 0xcc, 0x00, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3f, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x38, 0x38, 0x38, 0x00, 0x38, 0x38, 0x38, 0x00, 0x38, 0x38, 0x38, 0x00,
+ 0x38, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f,
+ 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf8,
+ 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xf8, 0xf8, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf8, 0xf8, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x1f,
+ 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0x38, 0x3f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x3f, 0x3f, 0x3f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0xf8,
+ 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0x38, 0xf8, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0xf8, 0xf8, 0xf8, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x1f,
+ 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x38, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0x38, 0x3f, 0x3f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3f, 0x3f, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x3f,
+ 0x3f, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0x3f, 0x3f, 0x3f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3f, 0x3f, 0x3f, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x3f, 0x3f,
+ 0x3f, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0xf8, 0xf8, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0xf8, 0xf8, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8,
+ 0xf8, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0x38, 0xf8, 0xf8, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0xf8, 0xf8, 0xf8, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0xf8,
+ 0xf8, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0xf8, 0xf8, 0xf8, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff,
+ 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xff, 0xff, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff,
+ 0xff, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3f, 0xff, 0xff, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0xff,
+ 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x1f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0xff,
+ 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x3f, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0xff, 0xff,
+ 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0xf8, 0xff, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0xff, 0xff, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0xff,
+ 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x38, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0x38, 0xff, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0xff, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0xff,
+ 0xff, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0xf8, 0xff, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x3f, 0xff, 0xff, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0xff,
+ 0xff, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x1f, 0xff, 0xff, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0xff, 0xff, 0xff, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0xff,
+ 0xff, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0xf8, 0xff, 0xff, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x3f, 0xff, 0xff, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0xff, 0xff,
+ 0xff, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c,
+ 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x18,
+ 0x1f, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x7f, 0x7f, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x7f, 0x60, 0x6f, 0x6f, 0x6c, 0x6c,
+ 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf8, 0x18,
+ 0xf8, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xfc, 0xfc, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, 0x0c, 0xec, 0xec, 0x6c, 0x6c,
+ 0x6c, 0x6c, 0x6c, 0x6c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x18,
+ 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x6c, 0x6c, 0x6c,
+ 0x6c, 0x6c, 0x6c, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6f, 0x6f, 0x60, 0x7f, 0x7f, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x18,
+ 0xf8, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x6c, 0x6c, 0x6c,
+ 0x6c, 0x6c, 0x6c, 0xfc, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0xec, 0xec, 0x0c, 0xfc, 0xfc, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x18,
+ 0x1f, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x6c, 0x6c, 0x6c, 0x6c,
+ 0x6c, 0x6c, 0x6c, 0x6f, 0x6f, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c,
+ 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6f, 0x6f, 0x60, 0x6f, 0x6f, 0x6c, 0x6c,
+ 0x6c, 0x6c, 0x6c, 0x6c, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x18,
+ 0xf8, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x6c, 0x6c, 0x6c, 0x6c,
+ 0x6c, 0x6c, 0x6c, 0xec, 0xec, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c,
+ 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0xec, 0xec, 0x0c, 0xec, 0xec, 0x6c, 0x6c,
+ 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00,
+ 0xff, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xff, 0xff, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xef, 0xef, 0x6c, 0x6c,
+ 0x6c, 0x6c, 0x6c, 0x6c, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0xff, 0x00,
+ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x6c, 0x6c, 0x6c,
+ 0x6c, 0x6c, 0x6c, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0xef, 0xef, 0x00, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0xff, 0x18,
+ 0xff, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x6c, 0x6c, 0x6c, 0x6c,
+ 0x6c, 0x6c, 0x6c, 0xff, 0xff, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c,
+ 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0xef, 0xef, 0x00, 0xef, 0xef, 0x6c, 0x6c,
+ 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
+ 0x0f, 0x1c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xe0, 0xf0, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x38, 0xf0, 0xe0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1c, 0x0f,
+ 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x02,
+ 0x06, 0x04, 0x0c, 0x08, 0x18, 0x10, 0x30, 0x20, 0x60, 0x40, 0xc0, 0x80,
+ 0x80, 0xc0, 0x40, 0x60, 0x20, 0x30, 0x10, 0x18, 0x08, 0x0c, 0x04, 0x06,
+ 0x02, 0x03, 0x01, 0x01, 0x81, 0xc1, 0x43, 0x62, 0x26, 0x34, 0x1c, 0x18,
+ 0x18, 0x1c, 0x34, 0x26, 0x62, 0x43, 0xc1, 0x81, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xf8, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf8,
+ 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x1f, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x1f, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x38, 0x38, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff,
+ 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x38, 0x38,
+ 0x38, 0x38, 0x38, 0x38, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe,
+ 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x3c, 0x3c, 0x7e, 0x7e, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xf0, 0xfc, 0xff,
+ 0xff, 0xfc, 0xf0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0x7e, 0x7e, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0x0f, 0x3f, 0xff, 0xff, 0x3f, 0x0f, 0x03,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x7e, 0xff,
+ 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x18, 0x3c, 0x66, 0xc3, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x7e, 0x7e,
+ 0x7e, 0x7e, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x18, 0xdb, 0x7e, 0x3c, 0xe7, 0x3c, 0x7e, 0xdb, 0x18,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c,
+ 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x0e,
+ 0x1a, 0x32, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x18, 0x18, 0x3c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x5a, 0xff,
+ 0xff, 0x5a, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x66,
+ 0x7e, 0x60, 0x60, 0x60, 0x60, 0x60, 0xe0, 0xc0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7e, 0x66, 0x7e, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6e, 0xec,
+ 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x0e, 0x0e, 0xdc, 0xfc,
+ 0x78, 0x78, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0xee,
+ 0x7c, 0x3c, 0x3c, 0x3e, 0x77, 0x73, 0xe0, 0xe0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x18, 0x18, 0x0c, 0x0c,
+ 0x18, 0x18, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x36,
+ 0x6c, 0x6c, 0xd8, 0xd8, 0x6c, 0x6c, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xd8, 0xd8, 0x6c, 0x6c, 0x36, 0x36, 0x6c, 0x6c, 0xd8, 0xd8,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x06, 0x06, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x06, 0x06, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00,
+ 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0x00,
+ 0x00, 0x00, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xcc, 0xde,
+ 0xff, 0xcc, 0xcc, 0xcc, 0x98, 0x30, 0x60, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
+ 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xfc, 0x00, 0x33, 0x3b, 0x3f, 0x37,
+ 0x33, 0x33, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0xff, 0xff,
+ 0xe7, 0xc3, 0xe7, 0xff, 0xff, 0xff, 0x00, 0x00, 0x80, 0xc0, 0x60, 0x30,
+ 0x18, 0x0c, 0x06, 0x03, 0x03, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80,
+ 0x01, 0x03, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0xc0, 0x60, 0x30, 0x18,
+ 0x0c, 0x06, 0x03, 0x01,
+};
+
+static struct vt_font_map font_mapping_normal[308] = {
+ { 0x0020, 0x0001, 0x5e }, { 0x00a0, 0x0001, 0x00 },
+ { 0x00a1, 0x0060, 0x6e }, { 0x0110, 0x008f, 0x00 },
+ { 0x0111, 0x00cf, 0x08 }, { 0x011a, 0x00d2, 0x01 },
+ { 0x011c, 0x00d8, 0x59 }, { 0x0178, 0x0132, 0x07 },
+ { 0x0186, 0x013a, 0x00 }, { 0x018e, 0x013b, 0x02 },
+ { 0x0192, 0x013e, 0x00 }, { 0x019d, 0x013f, 0x01 },
+ { 0x01b7, 0x0141, 0x00 }, { 0x0218, 0x0142, 0x03 },
+ { 0x0232, 0x0146, 0x01 }, { 0x0237, 0x0148, 0x00 },
+ { 0x0254, 0x0149, 0x00 }, { 0x0258, 0x014a, 0x01 },
+ { 0x025b, 0x014c, 0x00 }, { 0x0272, 0x014d, 0x00 },
+ { 0x0292, 0x014e, 0x00 }, { 0x02bb, 0x014f, 0x02 },
+ { 0x02c6, 0x0152, 0x01 }, { 0x02d8, 0x0153, 0x01 },
+ { 0x02db, 0x0155, 0x02 }, { 0x0300, 0x0041, 0x00 },
+ { 0x0301, 0x0073, 0x00 }, { 0x0302, 0x0152, 0x00 },
+ { 0x0303, 0x0156, 0x00 }, { 0x0304, 0x006e, 0x00 },
+ { 0x0305, 0x0158, 0x00 }, { 0x0306, 0x0153, 0x01 },
+ { 0x0308, 0x0067, 0x00 }, { 0x030a, 0x0159, 0x00 },
+ { 0x030b, 0x0157, 0x00 }, { 0x030c, 0x0153, 0x00 },
+ { 0x0329, 0x015a, 0x00 }, { 0x0384, 0x015b, 0x06 },
+ { 0x038c, 0x0162, 0x00 }, { 0x038e, 0x0163, 0x02 },
+ { 0x0391, 0x0022, 0x01 }, { 0x0393, 0x0166, 0x01 },
+ { 0x0395, 0x0026, 0x00 }, { 0x0396, 0x003b, 0x00 },
+ { 0x0397, 0x0029, 0x00 }, { 0x0398, 0x0168, 0x00 },
+ { 0x0399, 0x002a, 0x00 }, { 0x039a, 0x002c, 0x00 },
+ { 0x039b, 0x0169, 0x00 }, { 0x039c, 0x002e, 0x01 },
+ { 0x039e, 0x016a, 0x00 }, { 0x039f, 0x0030, 0x00 },
+ { 0x03a0, 0x016b, 0x00 }, { 0x03a1, 0x0031, 0x00 },
+ { 0x03a3, 0x016c, 0x00 }, { 0x03a4, 0x0035, 0x00 },
+ { 0x03a5, 0x003a, 0x00 }, { 0x03a6, 0x016d, 0x00 },
+ { 0x03a7, 0x0039, 0x00 }, { 0x03a8, 0x016e, 0x01 },
+ { 0x03aa, 0x008e, 0x00 }, { 0x03ab, 0x0132, 0x00 },
+ { 0x03ac, 0x0170, 0x08 }, { 0x03b5, 0x014c, 0x00 },
+ { 0x03b6, 0x0179, 0x00 }, { 0x03b7, 0x0140, 0x00 },
+ { 0x03b8, 0x017a, 0x01 }, { 0x03ba, 0x00f4, 0x00 },
+ { 0x03bb, 0x017c, 0x00 }, { 0x03bc, 0x0074, 0x00 },
+ { 0x03bd, 0x0057, 0x00 }, { 0x03be, 0x017d, 0x00 },
+ { 0x03bf, 0x0050, 0x00 }, { 0x03c0, 0x017e, 0x0b },
+ { 0x03cc, 0x00b2, 0x00 }, { 0x03cd, 0x018a, 0x01 },
+ { 0x03d1, 0x018c, 0x00 }, { 0x03d5, 0x018d, 0x00 },
+ { 0x03f0, 0x018e, 0x01 }, { 0x03f2, 0x0044, 0x00 },
+ { 0x03f3, 0x004b, 0x00 }, { 0x03f4, 0x0190, 0x02 },
+ { 0x0400, 0x0087, 0x00 }, { 0x0401, 0x008a, 0x00 },
+ { 0x0402, 0x0193, 0x02 }, { 0x0405, 0x0034, 0x00 },
+ { 0x0406, 0x002a, 0x00 }, { 0x0407, 0x008e, 0x00 },
+ { 0x0408, 0x002b, 0x00 }, { 0x0409, 0x0196, 0x06 },
+ { 0x0410, 0x0022, 0x00 }, { 0x0411, 0x019d, 0x00 },
+ { 0x0412, 0x0023, 0x00 }, { 0x0413, 0x0166, 0x00 },
+ { 0x0414, 0x019e, 0x00 }, { 0x0415, 0x0026, 0x00 },
+ { 0x0416, 0x019f, 0x00 }, { 0x0417, 0x0014, 0x00 },
+ { 0x0418, 0x01a0, 0x01 }, { 0x041a, 0x002c, 0x00 },
+ { 0x041b, 0x01a2, 0x00 }, { 0x041c, 0x002e, 0x00 },
+ { 0x041d, 0x0029, 0x00 }, { 0x041e, 0x0030, 0x00 },
+ { 0x041f, 0x016b, 0x00 }, { 0x0420, 0x0031, 0x00 },
+ { 0x0421, 0x0024, 0x00 }, { 0x0422, 0x0035, 0x00 },
+ { 0x0423, 0x01a3, 0x01 }, { 0x0425, 0x0039, 0x00 },
+ { 0x0426, 0x01a5, 0x05 }, { 0x042c, 0x0043, 0x00 },
+ { 0x042d, 0x01ab, 0x02 }, { 0x0430, 0x0042, 0x00 },
+ { 0x0431, 0x01ae, 0x02 }, { 0x0434, 0x0048, 0x00 },
+ { 0x0435, 0x0046, 0x00 }, { 0x0436, 0x01b1, 0x01 },
+ { 0x0438, 0x0056, 0x00 }, { 0x0439, 0x0129, 0x00 },
+ { 0x043a, 0x00f4, 0x00 }, { 0x043b, 0x01b3, 0x02 },
+ { 0x043e, 0x0050, 0x00 }, { 0x043f, 0x017e, 0x00 },
+ { 0x0440, 0x0051, 0x00 }, { 0x0441, 0x0044, 0x00 },
+ { 0x0442, 0x01b6, 0x00 }, { 0x0443, 0x005a, 0x00 },
+ { 0x0444, 0x018d, 0x00 }, { 0x0445, 0x0059, 0x00 },
+ { 0x0446, 0x01b7, 0x09 }, { 0x0450, 0x00a7, 0x00 },
+ { 0x0451, 0x00aa, 0x00 }, { 0x0452, 0x01c1, 0x02 },
+ { 0x0455, 0x0054, 0x00 }, { 0x0456, 0x004a, 0x00 },
+ { 0x0457, 0x00ae, 0x00 }, { 0x0458, 0x004b, 0x00 },
+ { 0x0459, 0x01c4, 0x01 }, { 0x045b, 0x00e3, 0x00 },
+ { 0x045c, 0x01c6, 0x00 }, { 0x045d, 0x00b8, 0x00 },
+ { 0x045e, 0x01c7, 0x01 }, { 0x0462, 0x01c9, 0x01 },
+ { 0x046a, 0x01cb, 0x01 }, { 0x0490, 0x01cd, 0x0d },
+ { 0x04a0, 0x01db, 0x05 }, { 0x04aa, 0x01e1, 0x01 },
+ { 0x04ae, 0x003a, 0x00 }, { 0x04af, 0x0177, 0x00 },
+ { 0x04b0, 0x01e3, 0x03 }, { 0x04b6, 0x01e7, 0x05 },
+ { 0x04c0, 0x002a, 0x00 }, { 0x04c1, 0x01ed, 0x01 },
+ { 0x04cf, 0x004d, 0x00 }, { 0x04d0, 0x00c1, 0x01 },
+ { 0x04d2, 0x0083, 0x00 }, { 0x04d3, 0x00a3, 0x00 },
+ { 0x04d4, 0x0085, 0x00 }, { 0x04d5, 0x00a5, 0x00 },
+ { 0x04d6, 0x00d2, 0x01 }, { 0x04d8, 0x013c, 0x00 },
+ { 0x04d9, 0x014b, 0x00 }, { 0x04da, 0x01ef, 0x05 },
+ { 0x04e2, 0x01f5, 0x00 }, { 0x04e3, 0x0127, 0x00 },
+ { 0x04e4, 0x01f6, 0x00 }, { 0x04e5, 0x00bb, 0x00 },
+ { 0x04e6, 0x0095, 0x00 }, { 0x04e7, 0x00b5, 0x00 },
+ { 0x04e8, 0x0190, 0x00 }, { 0x04e9, 0x01f7, 0x05 },
+ { 0x04ef, 0x0147, 0x00 }, { 0x04f0, 0x01fd, 0x00 },
+ { 0x04f1, 0x00be, 0x00 }, { 0x04f2, 0x01fe, 0x03 },
+ { 0x04f8, 0x0202, 0x01 }, { 0x1e0c, 0x0204, 0x01 },
+ { 0x1e34, 0x0206, 0x03 }, { 0x1e40, 0x020a, 0x07 },
+ { 0x1e6c, 0x0212, 0x01 }, { 0x1eb8, 0x0214, 0x01 },
+ { 0x1ebc, 0x0216, 0x01 }, { 0x1eca, 0x0218, 0x03 },
+ { 0x1ee4, 0x021c, 0x01 }, { 0x1ef8, 0x021e, 0x01 },
+ { 0x2000, 0x0001, 0x00 }, { 0x2001, 0x0001, 0x00 },
+ { 0x2002, 0x0001, 0x00 }, { 0x2003, 0x0001, 0x00 },
+ { 0x2004, 0x0001, 0x00 }, { 0x2005, 0x0001, 0x00 },
+ { 0x2006, 0x0001, 0x00 }, { 0x2007, 0x0001, 0x00 },
+ { 0x2008, 0x0001, 0x00 }, { 0x2009, 0x0001, 0x00 },
+ { 0x200a, 0x0001, 0x00 }, { 0x200b, 0x0001, 0x00 },
+ { 0x200c, 0x0001, 0x00 }, { 0x200d, 0x0001, 0x00 },
+ { 0x200e, 0x0001, 0x00 }, { 0x200f, 0x0001, 0x00 },
+ { 0x2010, 0x006c, 0x00 }, { 0x2011, 0x006c, 0x00 },
+ { 0x2012, 0x000e, 0x00 }, { 0x2013, 0x000e, 0x00 },
+ { 0x2014, 0x0220, 0x00 }, { 0x2015, 0x0220, 0x0d },
+ { 0x2026, 0x022e, 0x00 }, { 0x2030, 0x022f, 0x00 },
+ { 0x2032, 0x0230, 0x01 }, { 0x2039, 0x0232, 0x01 },
+ { 0x203c, 0x0234, 0x00 }, { 0x203e, 0x0158, 0x00 },
+ { 0x2070, 0x0235, 0x01 }, { 0x2074, 0x0237, 0x1a },
+ { 0x2090, 0x0252, 0x08 }, { 0x209a, 0x025b, 0x00 },
+ { 0x20a7, 0x025c, 0x00 }, { 0x20ac, 0x025d, 0x00 },
+ { 0x20ae, 0x025e, 0x00 }, { 0x2102, 0x025f, 0x00 },
+ { 0x210e, 0x0049, 0x00 }, { 0x210f, 0x00e3, 0x00 },
+ { 0x2115, 0x0260, 0x01 }, { 0x211a, 0x0262, 0x00 },
+ { 0x211d, 0x0263, 0x00 }, { 0x2122, 0x0264, 0x00 },
+ { 0x2124, 0x0265, 0x00 }, { 0x2126, 0x016f, 0x00 },
+ { 0x2135, 0x0266, 0x00 }, { 0x2190, 0x0267, 0x05 },
+ { 0x21a4, 0x026d, 0x00 }, { 0x21a6, 0x026e, 0x00 },
+ { 0x21a8, 0x026f, 0x00 }, { 0x21b5, 0x0270, 0x00 },
+ { 0x21bb, 0x0271, 0x00 }, { 0x21cb, 0x0272, 0x01 },
+ { 0x21d0, 0x0274, 0x05 }, { 0x2200, 0x027a, 0x00 },
+ { 0x2203, 0x027b, 0x02 }, { 0x2206, 0x0167, 0x00 },
+ { 0x2207, 0x027e, 0x06 }, { 0x2212, 0x000e, 0x00 },
+ { 0x2213, 0x0285, 0x03 }, { 0x2219, 0x0289, 0x01 },
+ { 0x221e, 0x028b, 0x01 }, { 0x2225, 0x0221, 0x00 },
+ { 0x2227, 0x028d, 0x03 }, { 0x2248, 0x0291, 0x00 },
+ { 0x2260, 0x0292, 0x01 }, { 0x2264, 0x0294, 0x01 },
+ { 0x226a, 0x0296, 0x01 }, { 0x2282, 0x0298, 0x01 },
+ { 0x2286, 0x029a, 0x01 }, { 0x22a5, 0x029c, 0x00 },
+ { 0x22c2, 0x029d, 0x00 }, { 0x22c3, 0x0036, 0x00 },
+ { 0x2300, 0x027d, 0x00 }, { 0x2302, 0x029e, 0x00 },
+ { 0x2308, 0x029f, 0x03 }, { 0x2310, 0x02a3, 0x00 },
+ { 0x2319, 0x02a4, 0x00 }, { 0x2320, 0x02a5, 0x01 },
+ { 0x239b, 0x02a7, 0x06 }, { 0x23a2, 0x02a8, 0x00 },
+ { 0x23a3, 0x02ae, 0x01 }, { 0x23a5, 0x02ab, 0x00 },
+ { 0x23a6, 0x02b0, 0x03 }, { 0x23ab, 0x02b4, 0x04 },
+ { 0x23ba, 0x02b9, 0x03 }, { 0x23d0, 0x02b7, 0x00 },
+ { 0x2409, 0x02bd, 0x04 }, { 0x2424, 0x02c2, 0x00 },
+ { 0x2500, 0x02b8, 0x00 }, { 0x2501, 0x02c3, 0x00 },
+ { 0x2502, 0x02b7, 0x00 }, { 0x2503, 0x02c4, 0x00 },
+ { 0x2508, 0x02c5, 0x43 }, { 0x2550, 0x0309, 0x43 },
+ { 0x2596, 0x034d, 0x0a }, { 0x25ac, 0x0358, 0x00 },
+ { 0x25ae, 0x0359, 0x00 }, { 0x25b2, 0x035a, 0x00 },
+ { 0x25b6, 0x035b, 0x00 }, { 0x25bc, 0x035c, 0x00 },
+ { 0x25c0, 0x035d, 0x00 }, { 0x25c6, 0x035e, 0x00 },
+ { 0x25ca, 0x035f, 0x01 }, { 0x25cf, 0x022d, 0x00 },
+ { 0x25d8, 0x0361, 0x01 }, { 0x263a, 0x0363, 0x02 },
+ { 0x2640, 0x0366, 0x00 }, { 0x2642, 0x0367, 0x00 },
+ { 0x2660, 0x0368, 0x00 }, { 0x2663, 0x0369, 0x00 },
+ { 0x2665, 0x036a, 0x00 }, { 0x2666, 0x035e, 0x00 },
+ { 0x266a, 0x036b, 0x01 }, { 0x2713, 0x036d, 0x01 },
+ { 0x2717, 0x036f, 0x01 }, { 0x27e8, 0x0371, 0x03 },
+ { 0x2800, 0x0001, 0x00 }, { 0x2801, 0x0375, 0xfe },
+ { 0x2e2c, 0x0474, 0x00 }, { 0xe0a0, 0x0475, 0x02 },
+ { 0xe0b0, 0x0478, 0x03 }, { 0xf6be, 0x0148, 0x00 },
+};
+
+static struct vt_font_map font_mapping_bold[319] = {
+ { 0x0021, 0x047c, 0x0b }, { 0x002d, 0x0220, 0x00 },
+ { 0x002e, 0x0488, 0x50 }, { 0x00a1, 0x04d9, 0x07 },
+ { 0x00aa, 0x04e1, 0x03 }, { 0x00af, 0x04e5, 0x07 },
+ { 0x00b7, 0x0289, 0x00 }, { 0x00b8, 0x04ed, 0x57 },
+ { 0x0110, 0x0505, 0x00 }, { 0x0111, 0x0545, 0x08 },
+ { 0x011a, 0x0548, 0x01 }, { 0x011c, 0x054e, 0x59 },
+ { 0x0178, 0x05a8, 0x07 }, { 0x0186, 0x05b0, 0x00 },
+ { 0x018e, 0x05b1, 0x02 }, { 0x0192, 0x05b4, 0x00 },
+ { 0x019d, 0x05b5, 0x01 }, { 0x01b7, 0x05b7, 0x00 },
+ { 0x0218, 0x05b8, 0x03 }, { 0x0232, 0x05bc, 0x01 },
+ { 0x0237, 0x05be, 0x00 }, { 0x0254, 0x05bf, 0x00 },
+ { 0x0258, 0x05c0, 0x01 }, { 0x025b, 0x05c2, 0x00 },
+ { 0x0272, 0x05c3, 0x00 }, { 0x0292, 0x05c4, 0x00 },
+ { 0x02bb, 0x05c5, 0x02 }, { 0x02c6, 0x05c8, 0x01 },
+ { 0x02d8, 0x05c9, 0x01 }, { 0x02db, 0x05cb, 0x02 },
+ { 0x0300, 0x04ba, 0x00 }, { 0x0301, 0x04ea, 0x00 },
+ { 0x0302, 0x05c8, 0x00 }, { 0x0303, 0x05cc, 0x00 },
+ { 0x0304, 0x04e5, 0x00 }, { 0x0305, 0x05ce, 0x00 },
+ { 0x0306, 0x05c9, 0x01 }, { 0x0308, 0x04e0, 0x00 },
+ { 0x030a, 0x05cf, 0x00 }, { 0x030b, 0x05cd, 0x00 },
+ { 0x030c, 0x05c9, 0x00 }, { 0x0329, 0x05d0, 0x00 },
+ { 0x0384, 0x05d1, 0x06 }, { 0x038c, 0x05d8, 0x00 },
+ { 0x038e, 0x05d9, 0x02 }, { 0x0391, 0x049b, 0x01 },
+ { 0x0393, 0x05dc, 0x01 }, { 0x0395, 0x049f, 0x00 },
+ { 0x0396, 0x04b4, 0x00 }, { 0x0397, 0x04a2, 0x00 },
+ { 0x0398, 0x05de, 0x00 }, { 0x0399, 0x04a3, 0x00 },
+ { 0x039a, 0x04a5, 0x00 }, { 0x039b, 0x05df, 0x00 },
+ { 0x039c, 0x04a7, 0x01 }, { 0x039e, 0x05e0, 0x00 },
+ { 0x039f, 0x04a9, 0x00 }, { 0x03a0, 0x05e1, 0x00 },
+ { 0x03a1, 0x04aa, 0x00 }, { 0x03a3, 0x05e2, 0x00 },
+ { 0x03a4, 0x04ae, 0x00 }, { 0x03a5, 0x04b3, 0x00 },
+ { 0x03a6, 0x05e3, 0x00 }, { 0x03a7, 0x04b2, 0x00 },
+ { 0x03a8, 0x05e4, 0x01 }, { 0x03aa, 0x0504, 0x00 },
+ { 0x03ab, 0x05a8, 0x00 }, { 0x03ac, 0x05e6, 0x08 },
+ { 0x03b5, 0x05c2, 0x00 }, { 0x03b6, 0x05ef, 0x00 },
+ { 0x03b7, 0x05b6, 0x00 }, { 0x03b8, 0x05f0, 0x01 },
+ { 0x03ba, 0x056a, 0x00 }, { 0x03bb, 0x05f2, 0x00 },
+ { 0x03bc, 0x04eb, 0x00 }, { 0x03bd, 0x04d0, 0x00 },
+ { 0x03be, 0x05f3, 0x00 }, { 0x03bf, 0x04c9, 0x00 },
+ { 0x03c0, 0x05f4, 0x0b }, { 0x03cc, 0x0528, 0x00 },
+ { 0x03cd, 0x0600, 0x01 }, { 0x03d1, 0x0602, 0x00 },
+ { 0x03d5, 0x0603, 0x00 }, { 0x03f0, 0x0604, 0x01 },
+ { 0x03f2, 0x04bd, 0x00 }, { 0x03f3, 0x04c4, 0x00 },
+ { 0x03f4, 0x0606, 0x02 }, { 0x0400, 0x04fd, 0x00 },
+ { 0x0401, 0x0500, 0x00 }, { 0x0402, 0x0609, 0x02 },
+ { 0x0405, 0x04ad, 0x00 }, { 0x0406, 0x04a3, 0x00 },
+ { 0x0407, 0x0504, 0x00 }, { 0x0408, 0x04a4, 0x00 },
+ { 0x0409, 0x060c, 0x06 }, { 0x0410, 0x049b, 0x00 },
+ { 0x0411, 0x0613, 0x00 }, { 0x0412, 0x049c, 0x00 },
+ { 0x0413, 0x05dc, 0x00 }, { 0x0414, 0x0614, 0x00 },
+ { 0x0415, 0x049f, 0x00 }, { 0x0416, 0x0615, 0x00 },
+ { 0x0417, 0x048d, 0x00 }, { 0x0418, 0x0616, 0x01 },
+ { 0x041a, 0x04a5, 0x00 }, { 0x041b, 0x0618, 0x00 },
+ { 0x041c, 0x04a7, 0x00 }, { 0x041d, 0x04a2, 0x00 },
+ { 0x041e, 0x04a9, 0x00 }, { 0x041f, 0x05e1, 0x00 },
+ { 0x0420, 0x04aa, 0x00 }, { 0x0421, 0x049d, 0x00 },
+ { 0x0422, 0x04ae, 0x00 }, { 0x0423, 0x0619, 0x01 },
+ { 0x0425, 0x04b2, 0x00 }, { 0x0426, 0x061b, 0x09 },
+ { 0x0430, 0x04bb, 0x00 }, { 0x0431, 0x0625, 0x02 },
+ { 0x0434, 0x04c1, 0x00 }, { 0x0435, 0x04bf, 0x00 },
+ { 0x0436, 0x0628, 0x01 }, { 0x0438, 0x04cf, 0x00 },
+ { 0x0439, 0x059f, 0x00 }, { 0x043a, 0x056a, 0x00 },
+ { 0x043b, 0x062a, 0x02 }, { 0x043e, 0x04c9, 0x00 },
+ { 0x043f, 0x05f4, 0x00 }, { 0x0440, 0x04ca, 0x00 },
+ { 0x0441, 0x04bd, 0x00 }, { 0x0442, 0x062d, 0x00 },
+ { 0x0443, 0x04d3, 0x00 }, { 0x0444, 0x0603, 0x00 },
+ { 0x0445, 0x04d2, 0x00 }, { 0x0446, 0x062e, 0x09 },
+ { 0x0450, 0x051d, 0x00 }, { 0x0451, 0x0520, 0x00 },
+ { 0x0452, 0x0638, 0x02 }, { 0x0455, 0x04cd, 0x00 },
+ { 0x0456, 0x04c3, 0x00 }, { 0x0457, 0x0524, 0x00 },
+ { 0x0458, 0x04c4, 0x00 }, { 0x0459, 0x063b, 0x01 },
+ { 0x045b, 0x0559, 0x00 }, { 0x045c, 0x063d, 0x00 },
+ { 0x045d, 0x052e, 0x00 }, { 0x045e, 0x063e, 0x01 },
+ { 0x0462, 0x0640, 0x01 }, { 0x046a, 0x0642, 0x01 },
+ { 0x0490, 0x0644, 0x0d }, { 0x04a0, 0x0652, 0x05 },
+ { 0x04aa, 0x0658, 0x01 }, { 0x04ae, 0x04b3, 0x00 },
+ { 0x04af, 0x05ed, 0x00 }, { 0x04b0, 0x065a, 0x03 },
+ { 0x04b6, 0x065e, 0x05 }, { 0x04c0, 0x04a3, 0x00 },
+ { 0x04c1, 0x0664, 0x01 }, { 0x04cf, 0x04c6, 0x00 },
+ { 0x04d0, 0x0537, 0x01 }, { 0x04d2, 0x04f9, 0x00 },
+ { 0x04d3, 0x0519, 0x00 }, { 0x04d4, 0x04fb, 0x00 },
+ { 0x04d5, 0x051b, 0x00 }, { 0x04d6, 0x0548, 0x01 },
+ { 0x04d8, 0x05b2, 0x00 }, { 0x04d9, 0x05c1, 0x00 },
+ { 0x04da, 0x0666, 0x05 }, { 0x04e2, 0x066c, 0x00 },
+ { 0x04e3, 0x059d, 0x00 }, { 0x04e4, 0x066d, 0x00 },
+ { 0x04e5, 0x0531, 0x00 }, { 0x04e6, 0x050b, 0x00 },
+ { 0x04e7, 0x052b, 0x00 }, { 0x04e8, 0x0606, 0x00 },
+ { 0x04e9, 0x066e, 0x05 }, { 0x04ef, 0x05bd, 0x00 },
+ { 0x04f0, 0x0674, 0x00 }, { 0x04f1, 0x0534, 0x00 },
+ { 0x04f2, 0x0675, 0x03 }, { 0x04f8, 0x0679, 0x01 },
+ { 0x1e0c, 0x067b, 0x01 }, { 0x1e34, 0x067d, 0x03 },
+ { 0x1e40, 0x0681, 0x07 }, { 0x1e6c, 0x0689, 0x01 },
+ { 0x1eb8, 0x068b, 0x01 }, { 0x1ebc, 0x068d, 0x01 },
+ { 0x1eca, 0x068f, 0x03 }, { 0x1ee4, 0x0693, 0x01 },
+ { 0x1ef8, 0x0695, 0x01 }, { 0x2010, 0x04e4, 0x00 },
+ { 0x2011, 0x04e4, 0x00 }, { 0x2012, 0x0220, 0x00 },
+ { 0x2013, 0x0220, 0x00 }, { 0x2016, 0x0697, 0x03 },
+ { 0x201a, 0x0487, 0x00 }, { 0x201b, 0x069b, 0x06 },
+ { 0x2026, 0x06a2, 0x00 }, { 0x2030, 0x06a3, 0x00 },
+ { 0x2032, 0x06a4, 0x01 }, { 0x2039, 0x06a6, 0x01 },
+ { 0x203c, 0x06a8, 0x00 }, { 0x203e, 0x05ce, 0x00 },
+ { 0x2070, 0x06a9, 0x01 }, { 0x2074, 0x06ab, 0x06 },
+ { 0x207d, 0x06b2, 0x0d }, { 0x208d, 0x06c0, 0x01 },
+ { 0x2090, 0x06c2, 0x08 }, { 0x209a, 0x06cb, 0x00 },
+ { 0x20a7, 0x06cc, 0x00 }, { 0x20ac, 0x06cd, 0x00 },
+ { 0x20ae, 0x06ce, 0x00 }, { 0x210e, 0x04c2, 0x00 },
+ { 0x210f, 0x0559, 0x00 }, { 0x2126, 0x05e5, 0x00 },
+ { 0x2135, 0x06cf, 0x00 }, { 0x2190, 0x06d0, 0x05 },
+ { 0x21a4, 0x06d6, 0x00 }, { 0x21a6, 0x06d7, 0x00 },
+ { 0x21a8, 0x06d8, 0x00 }, { 0x21b5, 0x06d9, 0x00 },
+ { 0x21bb, 0x06da, 0x00 }, { 0x21cb, 0x06db, 0x01 },
+ { 0x21d0, 0x06dd, 0x05 }, { 0x2200, 0x06e3, 0x00 },
+ { 0x2203, 0x06e4, 0x02 }, { 0x2206, 0x05dd, 0x00 },
+ { 0x2207, 0x06e7, 0x06 }, { 0x2212, 0x0220, 0x00 },
+ { 0x2213, 0x06ee, 0x03 }, { 0x2219, 0x06f2, 0x01 },
+ { 0x221e, 0x06f4, 0x01 }, { 0x2225, 0x0697, 0x00 },
+ { 0x2227, 0x06f6, 0x03 }, { 0x2248, 0x06fa, 0x00 },
+ { 0x2260, 0x06fb, 0x01 }, { 0x2264, 0x06fd, 0x01 },
+ { 0x226a, 0x06ff, 0x01 }, { 0x2282, 0x0701, 0x01 },
+ { 0x2286, 0x0703, 0x01 }, { 0x22a5, 0x0705, 0x00 },
+ { 0x22c2, 0x0706, 0x00 }, { 0x22c3, 0x04af, 0x00 },
+ { 0x2300, 0x06e6, 0x00 }, { 0x2302, 0x0707, 0x00 },
+ { 0x2308, 0x0708, 0x03 }, { 0x2310, 0x070c, 0x00 },
+ { 0x2319, 0x070d, 0x00 }, { 0x2320, 0x070e, 0x01 },
+ { 0x239b, 0x0710, 0x06 }, { 0x23a2, 0x0711, 0x00 },
+ { 0x23a3, 0x0717, 0x01 }, { 0x23a5, 0x0714, 0x00 },
+ { 0x23a6, 0x0719, 0x03 }, { 0x23ab, 0x071d, 0x02 },
+ { 0x23ae, 0x02c4, 0x00 }, { 0x23af, 0x02c3, 0x00 },
+ { 0x23ba, 0x0720, 0x02 }, { 0x23bd, 0x033a, 0x00 },
+ { 0x23d0, 0x02c4, 0x00 }, { 0x2409, 0x0723, 0x04 },
+ { 0x2424, 0x0728, 0x00 }, { 0x2500, 0x02c3, 0x00 },
+ { 0x2501, 0x0729, 0x00 }, { 0x2502, 0x02c4, 0x00 },
+ { 0x2503, 0x072a, 0x00 }, { 0x2508, 0x02c6, 0x00 },
+ { 0x2509, 0x072b, 0x00 }, { 0x250a, 0x02c8, 0x00 },
+ { 0x250b, 0x072c, 0x00 }, { 0x250c, 0x02cc, 0x00 },
+ { 0x250d, 0x072d, 0x02 }, { 0x2510, 0x02d0, 0x00 },
+ { 0x2511, 0x0730, 0x02 }, { 0x2514, 0x02d4, 0x00 },
+ { 0x2515, 0x0733, 0x02 }, { 0x2518, 0x02d8, 0x00 },
+ { 0x2519, 0x0736, 0x02 }, { 0x251c, 0x02e0, 0x00 },
+ { 0x251d, 0x0739, 0x06 }, { 0x2524, 0x02e8, 0x00 },
+ { 0x2525, 0x0740, 0x06 }, { 0x252c, 0x02f0, 0x00 },
+ { 0x252d, 0x0747, 0x06 }, { 0x2534, 0x02f8, 0x00 },
+ { 0x2535, 0x074e, 0x06 }, { 0x253c, 0x0308, 0x00 },
+ { 0x253d, 0x0755, 0x0e }, { 0x2550, 0x0764, 0x25 },
+ { 0x2576, 0x0333, 0x01 }, { 0x2578, 0x078a, 0x07 },
+ { 0x25a0, 0x0792, 0x00 }, { 0x25ac, 0x0793, 0x00 },
+ { 0x25ae, 0x0794, 0x00 }, { 0x25b2, 0x0795, 0x00 },
+ { 0x25b6, 0x0796, 0x00 }, { 0x25bc, 0x0797, 0x00 },
+ { 0x25c0, 0x0798, 0x00 }, { 0x25c6, 0x0799, 0x00 },
+ { 0x25ca, 0x079a, 0x01 }, { 0x25cf, 0x079c, 0x00 },
+ { 0x25d9, 0x079d, 0x00 }, { 0x263c, 0x079e, 0x00 },
+ { 0x2640, 0x079f, 0x00 }, { 0x2642, 0x07a0, 0x00 },
+ { 0x2660, 0x07a1, 0x00 }, { 0x2663, 0x07a2, 0x00 },
+ { 0x2666, 0x0799, 0x00 }, { 0x266a, 0x07a3, 0x01 },
+ { 0x2713, 0x036e, 0x00 }, { 0x2714, 0x07a5, 0x00 },
+ { 0x2717, 0x0370, 0x00 }, { 0x2718, 0x07a6, 0x00 },
+ { 0x27e8, 0x07a7, 0x03 }, { 0x2801, 0x07ab, 0xfe },
+ { 0x2e2c, 0x08aa, 0x00 }, { 0xe0a0, 0x08ab, 0x02 },
+ { 0xe0b1, 0x08ae, 0x00 }, { 0xe0b3, 0x08af, 0x00 },
+ { 0xf6be, 0x05be, 0x00 },
+};
+
+struct vt_font vt_font_default = {
+ .vf_width = 8,
+ .vf_height = 16,
+ .vf_bytes = font_bytes,
+ .vf_map = {
+ font_mapping_normal,
+ NULL,
+ font_mapping_bold,
+ NULL,
+ },
+ .vf_map_count = { 308, 0, 319, 0 },
+ .vf_refcount = 1,
+};
Property changes on: trunk/sys/dev/vt/font/vt_font_default.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/dev/vt/font/vt_mouse_cursor.c
===================================================================
--- trunk/sys/dev/vt/font/vt_mouse_cursor.c (rev 0)
+++ trunk/sys/dev/vt/font/vt_mouse_cursor.c 2018-05-27 22:31:43 UTC (rev 10041)
@@ -0,0 +1,71 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 2013 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by Aleksandr Rybalko under sponsorship from the
+ * FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: stable/10/sys/dev/vt/font/vt_mouse_cursor.c 271128 2014-09-04 20:18:08Z emaste $");
+
+#include <dev/vt/vt.h>
+
+#ifndef SC_NO_CUTPASTE
+struct vt_mouse_cursor vt_default_mouse_pointer = {
+ .map = {
+ 0x00, /* "__ " */
+ 0x40, /* "_*_ " */
+ 0x60, /* "_**_ " */
+ 0x70, /* "_***_ " */
+ 0x78, /* "_****_ " */
+ 0x7c, /* "_*****_ " */
+ 0x7e, /* "_******_" */
+ 0x68, /* "_**_****" */
+ 0x4c, /* "_*__**_ " */
+ 0x0c, /* " _ _**_ " */
+ 0x06, /* " _**_" */
+ 0x06, /* " _**_" */
+ 0x00, /* " ____" */
+ },
+ .mask = {
+ 0xc0, /* "__ " */
+ 0xe0, /* "___ " */
+ 0xf0, /* "____ " */
+ 0xf8, /* "_____ " */
+ 0xfc, /* "______ " */
+ 0xfe, /* "_______ " */
+ 0xff, /* "________" */
+ 0xff, /* "________" */
+ 0xfe, /* "_______ " */
+ 0x5e, /* " _ ____ " */
+ 0x0f, /* " ____" */
+ 0x0f, /* " ____" */
+ 0x0f, /* " ____" */
+ },
+ .width = 8,
+ .height = 13,
+};
+#endif
Property changes on: trunk/sys/dev/vt/font/vt_mouse_cursor.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/dev/vt/hw/efifb/efifb.c
===================================================================
--- trunk/sys/dev/vt/hw/efifb/efifb.c (rev 0)
+++ trunk/sys/dev/vt/hw/efifb/efifb.c 2018-05-27 22:31:43 UTC (rev 10041)
@@ -0,0 +1,142 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 2014 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by Aleksandr Rybalko under sponsorship from the
+ * FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD: stable/10/sys/dev/vt/hw/efifb/efifb.c 287128 2015-08-25 15:14:50Z marcel $
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: stable/10/sys/dev/vt/hw/efifb/efifb.c 287128 2015-08-25 15:14:50Z marcel $");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/kernel.h>
+#include <sys/fbio.h>
+#include <sys/linker.h>
+
+#include "opt_platform.h"
+
+#include <machine/metadata.h>
+#include <machine/vm.h>
+#include <machine/vmparam.h>
+#include <vm/vm.h>
+#include <vm/pmap.h>
+#include <machine/pmap.h>
+
+#include <dev/vt/vt.h>
+#include <dev/vt/hw/fb/vt_fb.h>
+#include <dev/vt/colors/vt_termcolors.h>
+
+static vd_init_t vt_efifb_init;
+static vd_probe_t vt_efifb_probe;
+
+static struct vt_driver vt_efifb_driver = {
+ .vd_name = "efifb",
+ .vd_probe = vt_efifb_probe,
+ .vd_init = vt_efifb_init,
+ .vd_blank = vt_fb_blank,
+ .vd_bitblt_text = vt_fb_bitblt_text,
+ .vd_bitblt_bmp = vt_fb_bitblt_bitmap,
+ .vd_drawrect = vt_fb_drawrect,
+ .vd_setpixel = vt_fb_setpixel,
+ .vd_fb_ioctl = vt_fb_ioctl,
+ .vd_fb_mmap = vt_fb_mmap,
+ /* Better than VGA, but still generic driver. */
+ .vd_priority = VD_PRIORITY_GENERIC + 1,
+};
+
+static struct fb_info local_info;
+VT_DRIVER_DECLARE(vt_efifb, vt_efifb_driver);
+
+static int
+vt_efifb_probe(struct vt_device *vd)
+{
+ int disabled;
+ struct efi_fb *efifb;
+ caddr_t kmdp;
+
+ disabled = 0;
+ TUNABLE_INT_FETCH("hw.syscons.disable", &disabled);
+ if (disabled != 0)
+ return (CN_DEAD);
+
+ kmdp = preload_search_by_type("elf kernel");
+ if (kmdp == NULL)
+ kmdp = preload_search_by_type("elf64 kernel");
+ efifb = (struct efi_fb *)preload_search_info(kmdp,
+ MODINFO_METADATA | MODINFOMD_EFI_FB);
+ if (efifb == NULL)
+ return (CN_DEAD);
+
+ return (CN_INTERNAL);
+}
+
+static int
+vt_efifb_init(struct vt_device *vd)
+{
+ struct fb_info *info;
+ struct efi_fb *efifb;
+ caddr_t kmdp;
+
+ info = vd->vd_softc;
+ if (info == NULL)
+ info = vd->vd_softc = (void *)&local_info;
+
+ kmdp = preload_search_by_type("elf kernel");
+ if (kmdp == NULL)
+ kmdp = preload_search_by_type("elf64 kernel");
+ efifb = (struct efi_fb *)preload_search_info(kmdp,
+ MODINFO_METADATA | MODINFOMD_EFI_FB);
+ if (efifb == NULL)
+ return (CN_DEAD);
+
+ info->fb_height = efifb->fb_height;
+ info->fb_width = efifb->fb_width;
+
+ info->fb_depth = fls(efifb->fb_mask_red | efifb->fb_mask_green |
+ efifb->fb_mask_blue | efifb->fb_mask_reserved);
+ /* Round to a multiple of the bits in a byte. */
+ info->fb_bpp = (info->fb_depth + NBBY - 1) & ~(NBBY - 1);
+
+ /* Stride in bytes, not pixels */
+ info->fb_stride = efifb->fb_stride * (info->fb_bpp / NBBY);
+
+ vt_generate_cons_palette(info->fb_cmap, COLOR_FORMAT_RGB,
+ efifb->fb_mask_red, ffs(efifb->fb_mask_red) - 1,
+ efifb->fb_mask_green, ffs(efifb->fb_mask_green) - 1,
+ efifb->fb_mask_blue, ffs(efifb->fb_mask_blue) - 1);
+
+ info->fb_size = info->fb_height * info->fb_stride;
+ info->fb_pbase = efifb->fb_addr;
+ info->fb_vbase = (intptr_t)pmap_mapdev_attr(info->fb_pbase,
+ info->fb_size, VM_MEMATTR_WRITE_COMBINING);
+
+ vt_fb_init(vd);
+
+ return (CN_INTERNAL);
+}
Property changes on: trunk/sys/dev/vt/hw/efifb/efifb.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/dev/vt/hw/fb/vt_early_fb.c
===================================================================
--- trunk/sys/dev/vt/hw/fb/vt_early_fb.c (rev 0)
+++ trunk/sys/dev/vt/hw/fb/vt_early_fb.c 2018-05-27 22:31:43 UTC (rev 10041)
@@ -0,0 +1,306 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 2013 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by Aleksandr Rybalko under sponsorship from the
+ * FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD: stable/10/sys/dev/vt/hw/fb/vt_early_fb.c 271769 2014-09-18 14:38:18Z dumbbell $
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: stable/10/sys/dev/vt/hw/fb/vt_early_fb.c 271769 2014-09-18 14:38:18Z dumbbell $");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/kernel.h>
+#include <sys/fbio.h>
+
+#include "opt_platform.h"
+
+#ifdef FDT
+#include <dev/fdt/fdt_common.h>
+#include <dev/ofw/ofw_bus.h>
+#include <dev/ofw/ofw_bus_subr.h>
+#include <dev/ofw/ofw_pci.h>
+#include <machine/fdt.h>
+#endif
+
+#include <dev/vt/vt.h>
+#include <dev/vt/hw/fb/vt_fb.h>
+#include <dev/vt/colors/vt_termcolors.h>
+
+static vd_init_t vt_efb_init;
+static vd_probe_t vt_efb_probe;
+
+static struct vt_driver vt_fb_early_driver = {
+ .vd_name = "efb",
+ .vd_probe = vt_efb_probe,
+ .vd_init = vt_efb_init,
+ .vd_blank = vt_fb_blank,
+ .vd_bitblt_text = vt_fb_bitblt_text,
+ .vd_bitblt_bmp = vt_fb_bitblt_bitmap,
+ .vd_drawrect = vt_fb_drawrect,
+ .vd_setpixel = vt_fb_setpixel,
+ .vd_priority = VD_PRIORITY_GENERIC,
+};
+
+static struct fb_info local_info;
+VT_DRIVER_DECLARE(vt_efb, vt_fb_early_driver);
+
+static void
+#ifdef FDT
+vt_efb_initialize(struct fb_info *info, phandle_t node)
+#else
+vt_efb_initialize(struct fb_info *info)
+#endif
+{
+#ifdef FDT
+ char name[64];
+ cell_t retval;
+ ihandle_t ih;
+ int i;
+
+ /* Open display device, thereby initializing it */
+ memset(name, 0, sizeof(name));
+ OF_package_to_path(node, name, sizeof(name));
+ ih = OF_open(name);
+#endif
+
+ /*
+ * Set up the color map
+ */
+ switch (info->fb_depth) {
+ case 8:
+ vt_generate_cons_palette(info->fb_cmap, COLOR_FORMAT_RGB,
+ 0x7, 5, 0x7, 2, 0x3, 0);
+ break;
+ case 15:
+ vt_generate_cons_palette(info->fb_cmap, COLOR_FORMAT_RGB,
+ 0x1f, 10, 0x1f, 5, 0x1f, 0);
+ break;
+ case 16:
+ vt_generate_cons_palette(info->fb_cmap, COLOR_FORMAT_RGB,
+ 0x1f, 11, 0x3f, 5, 0x1f, 0);
+ break;
+ case 24:
+ case 32:
+#if BYTE_ORDER == BIG_ENDIAN
+ vt_generate_cons_palette(info->fb_cmap,
+ COLOR_FORMAT_RGB, 255, 0, 255, 8, 255, 16);
+#else
+ vt_generate_cons_palette(info->fb_cmap,
+ COLOR_FORMAT_RGB, 255, 16, 255, 8, 255, 0);
+#endif
+#ifdef FDT
+ for (i = 0; i < 16; i++) {
+ OF_call_method("color!", ih, 4, 1,
+ (cell_t)((info->fb_cmap[i] >> 16) & 0xff),
+ (cell_t)((info->fb_cmap[i] >> 8) & 0xff),
+ (cell_t)((info->fb_cmap[i] >> 0) & 0xff),
+ (cell_t)i, &retval);
+ }
+#endif
+ break;
+
+ default:
+ panic("Unknown color space fb_depth %d", info->fb_depth);
+ break;
+ }
+}
+
+static phandle_t
+vt_efb_get_fbnode()
+{
+ phandle_t chosen, node;
+ ihandle_t stdout;
+ char type[64];
+
+ chosen = OF_finddevice("/chosen");
+ OF_getprop(chosen, "stdout", &stdout, sizeof(stdout));
+ node = OF_instance_to_package(stdout);
+ if (node != -1) {
+ /* The "/chosen/stdout" present. */
+ OF_getprop(node, "device_type", type, sizeof(type));
+ /* Check if it has "display" type. */
+ if (strcmp(type, "display") == 0)
+ return (node);
+ }
+ /* Try device with name "screen". */
+ node = OF_finddevice("screen");
+
+ return (node);
+}
+
+static int
+vt_efb_probe(struct vt_device *vd)
+{
+ phandle_t node;
+
+ node = vt_efb_get_fbnode();
+ if (node == -1)
+ return (CN_DEAD);
+
+ if ((OF_getproplen(node, "height") <= 0) ||
+ (OF_getproplen(node, "width") <= 0) ||
+ (OF_getproplen(node, "depth") <= 0) ||
+ (OF_getproplen(node, "linebytes") <= 0))
+ return (CN_DEAD);
+
+ return (CN_INTERNAL);
+}
+
+static int
+vt_efb_init(struct vt_device *vd)
+{
+ struct ofw_pci_register pciaddrs[8];
+ struct fb_info *info;
+ int i, len, n_pciaddrs;
+ phandle_t node;
+
+ if (vd->vd_softc == NULL)
+ vd->vd_softc = (void *)&local_info;
+
+ info = vd->vd_softc;
+
+ node = vt_efb_get_fbnode();
+ if (node == -1)
+ return (CN_DEAD);
+
+#define GET(name, var) \
+ if (OF_getproplen(node, (name)) != sizeof(info->fb_##var)) \
+ return (CN_DEAD); \
+ OF_getencprop(node, (name), &info->fb_##var, sizeof(info->fb_##var)); \
+ if (info->fb_##var == 0) \
+ return (CN_DEAD);
+
+ GET("height", height)
+ GET("width", width)
+ GET("depth", depth)
+ GET("linebytes", stride)
+#undef GET
+
+ info->fb_size = info->fb_height * info->fb_stride;
+
+ /*
+ * Get the PCI addresses of the adapter, if present. The node may be the
+ * child of the PCI device: in that case, try the parent for
+ * the assigned-addresses property.
+ */
+ len = OF_getprop(node, "assigned-addresses", pciaddrs,
+ sizeof(pciaddrs));
+ if (len == -1) {
+ len = OF_getprop(OF_parent(node), "assigned-addresses",
+ pciaddrs, sizeof(pciaddrs));
+ }
+ if (len == -1)
+ len = 0;
+ n_pciaddrs = len / sizeof(struct ofw_pci_register);
+
+ /*
+ * Grab the physical address of the framebuffer, and then map it
+ * into our memory space. If the MMU is not yet up, it will be
+ * remapped for us when relocation turns on.
+ */
+ if (OF_getproplen(node, "address") == sizeof(info->fb_pbase)) {
+ /* XXX We assume #address-cells is 1 at this point. */
+ OF_getencprop(node, "address", &info->fb_pbase,
+ sizeof(info->fb_pbase));
+
+ #if defined(__powerpc__)
+ sc->sc_memt = &bs_be_tag;
+ bus_space_map(sc->sc_memt, info->fb_pbase, info->fb_size,
+ BUS_SPACE_MAP_PREFETCHABLE, &info->fb_vbase);
+ #elif defined(__sparc64__)
+ OF_decode_addr(node, 0, &space, &phys);
+ sc->sc_memt = &vt_efb_memt[0];
+ info->addr = sparc64_fake_bustag(space, fb_phys, sc->sc_memt);
+ #else
+ bus_space_map(fdtbus_bs_tag, info->fb_pbase, info->fb_size,
+ BUS_SPACE_MAP_PREFETCHABLE,
+ (bus_space_handle_t *)&info->fb_vbase);
+ #endif
+ } else {
+ /*
+ * Some IBM systems don't have an address property. Try to
+ * guess the framebuffer region from the assigned addresses.
+ * This is ugly, but there doesn't seem to be an alternative.
+ * Linux does the same thing.
+ */
+
+ info->fb_pbase = n_pciaddrs;
+ for (i = 0; i < n_pciaddrs; i++) {
+ /* If it is too small, not the framebuffer */
+ if (pciaddrs[i].size_lo < info->fb_size)
+ continue;
+ /* If it is not memory, it isn't either */
+ if (!(pciaddrs[i].phys_hi &
+ OFW_PCI_PHYS_HI_SPACE_MEM32))
+ continue;
+
+ /* This could be the framebuffer */
+ info->fb_pbase = i;
+
+ /* If it is prefetchable, it certainly is */
+ if (pciaddrs[i].phys_hi & OFW_PCI_PHYS_HI_PREFETCHABLE)
+ break;
+ }
+
+ if (info->fb_pbase == n_pciaddrs) /* No candidates found */
+ return (CN_DEAD);
+
+ #if defined(__powerpc__)
+ OF_decode_addr(node, info->fb_pbase, &sc->sc_memt,
+ &info->fb_vbase);
+ #elif defined(__sparc64__)
+ OF_decode_addr(node, info->fb_pbase, &space, &info->fb_pbase);
+ sc->sc_memt = &vt_efb_memt[0];
+ info->fb_vbase = sparc64_fake_bustag(space, info->fb_pbase,
+ sc->sc_memt);
+ #else
+ bus_space_map(fdtbus_bs_tag, info->fb_pbase, info->fb_size,
+ BUS_SPACE_MAP_PREFETCHABLE,
+ (bus_space_handle_t *)&info->fb_vbase);
+ #endif
+ }
+
+ /* blank full size */
+ len = info->fb_size / 4;
+ for (i = 0; i < len; i++) {
+ ((uint32_t *)info->fb_vbase)[i] = 0;
+ }
+
+ /* Get pixel storage size. */
+ info->fb_bpp = info->fb_stride / info->fb_width * 8;
+
+#ifdef FDT
+ vt_efb_initialize(info, node);
+#else
+ vt_efb_initialize(info);
+#endif
+ vt_fb_init(vd);
+
+ return (CN_INTERNAL);
+}
Property changes on: trunk/sys/dev/vt/hw/fb/vt_early_fb.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/dev/vt/hw/fb/vt_fb.c
===================================================================
--- trunk/sys/dev/vt/hw/fb/vt_fb.c (rev 0)
+++ trunk/sys/dev/vt/hw/fb/vt_fb.c 2018-05-27 22:31:43 UTC (rev 10041)
@@ -0,0 +1,456 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 2013 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by Aleksandr Rybalko under sponsorship from the
+ * FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD: stable/10/sys/dev/vt/hw/fb/vt_fb.c 321198 2017-07-19 13:11:35Z emaste $
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: stable/10/sys/dev/vt/hw/fb/vt_fb.c 321198 2017-07-19 13:11:35Z emaste $");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/malloc.h>
+#include <sys/queue.h>
+#include <sys/fbio.h>
+#include <dev/vt/vt.h>
+#include <dev/vt/hw/fb/vt_fb.h>
+#include <dev/vt/colors/vt_termcolors.h>
+
+static struct vt_driver vt_fb_driver = {
+ .vd_name = "fb",
+ .vd_init = vt_fb_init,
+ .vd_blank = vt_fb_blank,
+ .vd_bitblt_text = vt_fb_bitblt_text,
+ .vd_bitblt_bmp = vt_fb_bitblt_bitmap,
+ .vd_drawrect = vt_fb_drawrect,
+ .vd_setpixel = vt_fb_setpixel,
+ .vd_postswitch = vt_fb_postswitch,
+ .vd_priority = VD_PRIORITY_GENERIC+10,
+ .vd_fb_ioctl = vt_fb_ioctl,
+ .vd_fb_mmap = vt_fb_mmap,
+ .vd_suspend = vt_fb_suspend,
+ .vd_resume = vt_fb_resume,
+};
+
+VT_DRIVER_DECLARE(vt_fb, vt_fb_driver);
+
+static void
+vt_fb_mem_wr1(struct fb_info *sc, uint32_t o, uint8_t v)
+{
+
+ KASSERT((o < sc->fb_size), ("Offset %#08x out of fb size", o));
+ *(uint8_t *)(sc->fb_vbase + o) = v;
+}
+
+static void
+vt_fb_mem_wr2(struct fb_info *sc, uint32_t o, uint16_t v)
+{
+
+ KASSERT((o < sc->fb_size), ("Offset %#08x out of fb size", o));
+ *(uint16_t *)(sc->fb_vbase + o) = v;
+}
+
+static void
+vt_fb_mem_wr4(struct fb_info *sc, uint32_t o, uint32_t v)
+{
+
+ KASSERT((o < sc->fb_size), ("Offset %#08x out of fb size", o));
+ *(uint32_t *)(sc->fb_vbase + o) = v;
+}
+
+int
+vt_fb_ioctl(struct vt_device *vd, u_long cmd, caddr_t data, struct thread *td)
+{
+ struct fb_info *info;
+ int error = 0;
+
+ info = vd->vd_softc;
+
+ switch (cmd) {
+ case FBIOGTYPE:
+ bcopy(info, (struct fbtype *)data, sizeof(struct fbtype));
+ break;
+
+ case FBIO_GETWINORG: /* get frame buffer window origin */
+ *(u_int *)data = 0;
+ break;
+
+ case FBIO_GETDISPSTART: /* get display start address */
+ ((video_display_start_t *)data)->x = 0;
+ ((video_display_start_t *)data)->y = 0;
+ break;
+
+ case FBIO_GETLINEWIDTH: /* get scan line width in bytes */
+ *(u_int *)data = info->fb_stride;
+ break;
+
+ case FBIO_BLANK: /* blank display */
+ if (vd->vd_driver->vd_blank == NULL)
+ return (ENODEV);
+ vd->vd_driver->vd_blank(vd, TC_BLACK);
+ break;
+
+ default:
+ error = ENOIOCTL;
+ break;
+ }
+
+ return (error);
+}
+
+int
+vt_fb_mmap(struct vt_device *vd, vm_ooffset_t offset, vm_paddr_t *paddr,
+ int prot, vm_memattr_t *memattr)
+{
+ struct fb_info *info;
+
+ info = vd->vd_softc;
+
+ if (info->fb_flags & FB_FLAG_NOMMAP)
+ return (ENODEV);
+
+ if (offset >= 0 && offset < info->fb_size) {
+ *paddr = info->fb_pbase + offset;
+ #ifdef VM_MEMATTR_WRITE_COMBINING
+ *memattr = VM_MEMATTR_WRITE_COMBINING;
+ #endif
+ return (0);
+ }
+
+ return (EINVAL);
+}
+
+void
+vt_fb_setpixel(struct vt_device *vd, int x, int y, term_color_t color)
+{
+ struct fb_info *info;
+ uint32_t c;
+ u_int o;
+
+ info = vd->vd_softc;
+ c = info->fb_cmap[color];
+ o = info->fb_stride * y + x * FBTYPE_GET_BYTESPP(info);
+
+ KASSERT((info->fb_vbase != 0), ("Unmapped framebuffer"));
+
+ switch (FBTYPE_GET_BYTESPP(info)) {
+ case 1:
+ vt_fb_mem_wr1(info, o, c);
+ break;
+ case 2:
+ vt_fb_mem_wr2(info, o, c);
+ break;
+ case 3:
+ vt_fb_mem_wr1(info, o, (c >> 16) & 0xff);
+ vt_fb_mem_wr1(info, o + 1, (c >> 8) & 0xff);
+ vt_fb_mem_wr1(info, o + 2, c & 0xff);
+ break;
+ case 4:
+ vt_fb_mem_wr4(info, o, c);
+ break;
+ default:
+ /* panic? */
+ return;
+ }
+
+}
+
+void
+vt_fb_drawrect(struct vt_device *vd, int x1, int y1, int x2, int y2, int fill,
+ term_color_t color)
+{
+ int x, y;
+
+ for (y = y1; y <= y2; y++) {
+ if (fill || (y == y1) || (y == y2)) {
+ for (x = x1; x <= x2; x++)
+ vt_fb_setpixel(vd, x, y, color);
+ } else {
+ vt_fb_setpixel(vd, x1, y, color);
+ vt_fb_setpixel(vd, x2, y, color);
+ }
+ }
+}
+
+void
+vt_fb_blank(struct vt_device *vd, term_color_t color)
+{
+ struct fb_info *info;
+ uint32_t c;
+ u_int o, h;
+
+ info = vd->vd_softc;
+ c = info->fb_cmap[color];
+
+ KASSERT((info->fb_vbase != 0), ("Unmapped framebuffer"));
+
+ switch (FBTYPE_GET_BYTESPP(info)) {
+ case 1:
+ for (h = 0; h < info->fb_height; h++)
+ for (o = 0; o < info->fb_stride; o++)
+ vt_fb_mem_wr1(info, h*info->fb_stride + o, c);
+ break;
+ case 2:
+ for (h = 0; h < info->fb_height; h++)
+ for (o = 0; o < info->fb_stride; o += 2)
+ vt_fb_mem_wr2(info, h*info->fb_stride + o, c);
+ break;
+ case 3:
+ for (h = 0; h < info->fb_height; h++)
+ for (o = 0; o < info->fb_stride; o += 3) {
+ vt_fb_mem_wr1(info, h*info->fb_stride + o,
+ (c >> 16) & 0xff);
+ vt_fb_mem_wr1(info, h*info->fb_stride + o + 1,
+ (c >> 8) & 0xff);
+ vt_fb_mem_wr1(info, h*info->fb_stride + o + 2,
+ c & 0xff);
+ }
+ break;
+ case 4:
+ for (h = 0; h < info->fb_height; h++)
+ for (o = 0; o < info->fb_stride; o += 4)
+ vt_fb_mem_wr4(info, h*info->fb_stride + o, c);
+ break;
+ default:
+ /* panic? */
+ return;
+ }
+}
+
+void
+vt_fb_bitblt_bitmap(struct vt_device *vd, const struct vt_window *vw,
+ const uint8_t *pattern, const uint8_t *mask,
+ unsigned int width, unsigned int height,
+ unsigned int x, unsigned int y, term_color_t fg, term_color_t bg)
+{
+ struct fb_info *info;
+ uint32_t fgc, bgc, cc, o;
+ int bpp, bpl, xi, yi;
+ int bit, byte;
+
+ info = vd->vd_softc;
+ bpp = FBTYPE_GET_BYTESPP(info);
+ fgc = info->fb_cmap[fg];
+ bgc = info->fb_cmap[bg];
+ bpl = (width + 7) / 8; /* Bytes per source line. */
+
+ KASSERT((info->fb_vbase != 0), ("Unmapped framebuffer"));
+
+ /* Bound by right and bottom edges. */
+ if (y + height > vw->vw_draw_area.tr_end.tp_row) {
+ if (y >= vw->vw_draw_area.tr_end.tp_row)
+ return;
+ height = vw->vw_draw_area.tr_end.tp_row - y;
+ }
+ if (x + width > vw->vw_draw_area.tr_end.tp_col) {
+ if (x >= vw->vw_draw_area.tr_end.tp_col)
+ return;
+ width = vw->vw_draw_area.tr_end.tp_col - x;
+ }
+ for (yi = 0; yi < height; yi++) {
+ for (xi = 0; xi < width; xi++) {
+ byte = yi * bpl + xi / 8;
+ bit = 0x80 >> (xi % 8);
+ /* Skip pixel write, if mask bit not set. */
+ if (mask != NULL && (mask[byte] & bit) == 0)
+ continue;
+ o = (y + yi) * info->fb_stride + (x + xi) * bpp;
+ o += vd->vd_transpose;
+ cc = pattern[byte] & bit ? fgc : bgc;
+
+ switch(bpp) {
+ case 1:
+ vt_fb_mem_wr1(info, o, cc);
+ break;
+ case 2:
+ vt_fb_mem_wr2(info, o, cc);
+ break;
+ case 3:
+ /* Packed mode, so unaligned. Byte access. */
+ vt_fb_mem_wr1(info, o, (cc >> 16) & 0xff);
+ vt_fb_mem_wr1(info, o + 1, (cc >> 8) & 0xff);
+ vt_fb_mem_wr1(info, o + 2, cc & 0xff);
+ break;
+ case 4:
+ vt_fb_mem_wr4(info, o, cc);
+ break;
+ default:
+ /* panic? */
+ break;
+ }
+ }
+ }
+}
+
+void
+vt_fb_bitblt_text(struct vt_device *vd, const struct vt_window *vw,
+ const term_rect_t *area)
+{
+ unsigned int col, row, x, y;
+ struct vt_font *vf;
+ term_char_t c;
+ term_color_t fg, bg;
+ const uint8_t *pattern;
+
+ vf = vw->vw_font;
+
+ for (row = area->tr_begin.tp_row; row < area->tr_end.tp_row; ++row) {
+ for (col = area->tr_begin.tp_col; col < area->tr_end.tp_col;
+ ++col) {
+ x = col * vf->vf_width +
+ vw->vw_draw_area.tr_begin.tp_col;
+ y = row * vf->vf_height +
+ vw->vw_draw_area.tr_begin.tp_row;
+
+ c = VTBUF_GET_FIELD(&vw->vw_buf, row, col);
+ pattern = vtfont_lookup(vf, c);
+ vt_determine_colors(c,
+ VTBUF_ISCURSOR(&vw->vw_buf, row, col), &fg, &bg);
+
+ vt_fb_bitblt_bitmap(vd, vw,
+ pattern, NULL, vf->vf_width, vf->vf_height,
+ x, y, fg, bg);
+ }
+ }
+
+#ifndef SC_NO_CUTPASTE
+ if (!vd->vd_mshown)
+ return;
+
+ term_rect_t drawn_area;
+
+ drawn_area.tr_begin.tp_col = area->tr_begin.tp_col * vf->vf_width;
+ drawn_area.tr_begin.tp_row = area->tr_begin.tp_row * vf->vf_height;
+ drawn_area.tr_end.tp_col = area->tr_end.tp_col * vf->vf_width;
+ drawn_area.tr_end.tp_row = area->tr_end.tp_row * vf->vf_height;
+
+ if (vt_is_cursor_in_area(vd, &drawn_area)) {
+ vt_fb_bitblt_bitmap(vd, vw,
+ vd->vd_mcursor->map, vd->vd_mcursor->mask,
+ vd->vd_mcursor->width, vd->vd_mcursor->height,
+ vd->vd_mx_drawn + vw->vw_draw_area.tr_begin.tp_col,
+ vd->vd_my_drawn + vw->vw_draw_area.tr_begin.tp_row,
+ vd->vd_mcursor_fg, vd->vd_mcursor_bg);
+ }
+#endif
+}
+
+void
+vt_fb_postswitch(struct vt_device *vd)
+{
+ struct fb_info *info;
+
+ info = vd->vd_softc;
+
+ if (info->enter != NULL)
+ info->enter(info->fb_priv);
+}
+
+static int
+vt_fb_init_cmap(uint32_t *cmap, int depth)
+{
+
+ switch (depth) {
+ case 8:
+ return (vt_generate_cons_palette(cmap, COLOR_FORMAT_RGB,
+ 0x7, 5, 0x7, 2, 0x3, 0));
+ case 15:
+ return (vt_generate_cons_palette(cmap, COLOR_FORMAT_RGB,
+ 0x1f, 10, 0x1f, 5, 0x1f, 0));
+ case 16:
+ return (vt_generate_cons_palette(cmap, COLOR_FORMAT_RGB,
+ 0x1f, 11, 0x3f, 5, 0x1f, 0));
+ case 24:
+ case 32: /* Ignore alpha. */
+ return (vt_generate_cons_palette(cmap, COLOR_FORMAT_RGB,
+ 0xff, 16, 0xff, 8, 0xff, 0));
+ default:
+ return (1);
+ }
+}
+
+int
+vt_fb_init(struct vt_device *vd)
+{
+ struct fb_info *info;
+ u_int margin;
+ int err;
+
+ info = vd->vd_softc;
+ vd->vd_height = MIN(VT_FB_MAX_HEIGHT, info->fb_height);
+ margin = (info->fb_height - vd->vd_height) >> 1;
+ vd->vd_transpose = margin * info->fb_stride;
+ vd->vd_width = MIN(VT_FB_MAX_WIDTH, info->fb_width);
+ margin = (info->fb_width - vd->vd_width) >> 1;
+ vd->vd_transpose += margin * (info->fb_bpp / NBBY);
+
+ if (info->fb_size == 0)
+ return (CN_DEAD);
+
+ if (info->fb_pbase == 0)
+ info->fb_flags |= FB_FLAG_NOMMAP;
+
+ if (info->fb_cmsize <= 0) {
+ err = vt_fb_init_cmap(info->fb_cmap, FBTYPE_GET_BPP(info));
+ if (err)
+ return (CN_DEAD);
+ info->fb_cmsize = 16;
+ }
+
+ /* Clear the screen. */
+ vd->vd_driver->vd_blank(vd, TC_BLACK);
+
+ /* Wakeup screen. KMS need this. */
+ vt_fb_postswitch(vd);
+
+ return (CN_INTERNAL);
+}
+
+int
+vt_fb_attach(struct fb_info *info)
+{
+
+ vt_allocate(&vt_fb_driver, info);
+
+ return (0);
+}
+
+void
+vt_fb_suspend(struct vt_device *vd)
+{
+
+ vt_suspend(vd);
+}
+
+void
+vt_fb_resume(struct vt_device *vd)
+{
+
+ vt_resume(vd);
+}
Property changes on: trunk/sys/dev/vt/hw/fb/vt_fb.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/dev/vt/hw/fb/vt_fb.h
===================================================================
--- trunk/sys/dev/vt/hw/fb/vt_fb.h (rev 0)
+++ trunk/sys/dev/vt/hw/fb/vt_fb.h 2018-05-27 22:31:43 UTC (rev 10041)
@@ -0,0 +1,50 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 2013 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by Aleksandr Rybalko under sponsorship from the
+ * FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD: stable/10/sys/dev/vt/hw/fb/vt_fb.h 282749 2015-05-11 08:00:16Z avg $
+ */
+
+#ifndef _DEV_VT_HW_FB_VT_FB_H_
+#define _DEV_VT_HW_FB_VT_FB_H_
+/* Generic framebuffer interface call vt_fb_attach to init VT(9) */
+int vt_fb_attach(struct fb_info *info);
+void vt_fb_resume(struct vt_device *vd);
+void vt_fb_suspend(struct vt_device *vd);
+
+vd_init_t vt_fb_init;
+vd_blank_t vt_fb_blank;
+vd_bitblt_text_t vt_fb_bitblt_text;
+vd_bitblt_bmp_t vt_fb_bitblt_bitmap;
+vd_drawrect_t vt_fb_drawrect;
+vd_setpixel_t vt_fb_setpixel;
+vd_postswitch_t vt_fb_postswitch;
+vd_fb_ioctl_t vt_fb_ioctl;
+vd_fb_mmap_t vt_fb_mmap;
+
+#endif /* _DEV_VT_HW_FB_VT_FB_H_ */
Property changes on: trunk/sys/dev/vt/hw/fb/vt_fb.h
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/dev/vt/hw/ofwfb/ofwfb.c
===================================================================
--- trunk/sys/dev/vt/hw/ofwfb/ofwfb.c (rev 0)
+++ trunk/sys/dev/vt/hw/ofwfb/ofwfb.c 2018-05-27 22:31:43 UTC (rev 10041)
@@ -0,0 +1,464 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 2011 Nathan Whitehorn
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: stable/10/sys/dev/vt/hw/ofwfb/ofwfb.c 271952 2014-09-22 10:21:08Z ray $");
+
+#include <sys/param.h>
+#include <sys/kernel.h>
+#include <sys/systm.h>
+#include <sys/fbio.h>
+
+#include <dev/vt/vt.h>
+#include <dev/vt/hw/fb/vt_fb.h>
+#include <dev/vt/colors/vt_termcolors.h>
+
+#include <vm/vm.h>
+#include <vm/pmap.h>
+
+#include <machine/bus.h>
+#ifdef __sparc64__
+#include <machine/bus_private.h>
+#endif
+
+#include <dev/ofw/openfirm.h>
+#include <dev/ofw/ofw_bus.h>
+#include <dev/ofw/ofw_pci.h>
+
+struct ofwfb_softc {
+ struct fb_info fb;
+
+ phandle_t sc_node;
+ ihandle_t sc_handle;
+ bus_space_tag_t sc_memt;
+};
+
+static vd_probe_t ofwfb_probe;
+static vd_init_t ofwfb_init;
+static vd_bitblt_text_t ofwfb_bitblt_text;
+static vd_bitblt_bmp_t ofwfb_bitblt_bitmap;
+
+static const struct vt_driver vt_ofwfb_driver = {
+ .vd_name = "ofwfb",
+ .vd_probe = ofwfb_probe,
+ .vd_init = ofwfb_init,
+ .vd_blank = vt_fb_blank,
+ .vd_bitblt_text = ofwfb_bitblt_text,
+ .vd_bitblt_bmp = ofwfb_bitblt_bitmap,
+ .vd_fb_ioctl = vt_fb_ioctl,
+ .vd_fb_mmap = vt_fb_mmap,
+ .vd_priority = VD_PRIORITY_GENERIC+1,
+};
+
+static struct ofwfb_softc ofwfb_conssoftc;
+VT_DRIVER_DECLARE(vt_ofwfb, vt_ofwfb_driver);
+
+static int
+ofwfb_probe(struct vt_device *vd)
+{
+ phandle_t chosen, node;
+ ihandle_t stdout;
+ char type[64];
+
+ chosen = OF_finddevice("/chosen");
+ OF_getprop(chosen, "stdout", &stdout, sizeof(stdout));
+ node = OF_instance_to_package(stdout);
+ if (node == -1) {
+ /*
+ * The "/chosen/stdout" does not exist try
+ * using "screen" directly.
+ */
+ node = OF_finddevice("screen");
+ }
+ OF_getprop(node, "device_type", type, sizeof(type));
+ if (strcmp(type, "display") != 0)
+ return (CN_DEAD);
+
+ /* Looks OK... */
+ return (CN_INTERNAL);
+}
+
+static void
+ofwfb_bitblt_bitmap(struct vt_device *vd, const struct vt_window *vw,
+ const uint8_t *pattern, const uint8_t *mask,
+ unsigned int width, unsigned int height,
+ unsigned int x, unsigned int y, term_color_t fg, term_color_t bg)
+{
+ struct fb_info *sc = vd->vd_softc;
+ u_long line;
+ uint32_t fgc, bgc;
+ int c, l;
+ uint8_t b, m;
+ union {
+ uint32_t l;
+ uint8_t c[4];
+ } ch1, ch2;
+
+ fgc = sc->fb_cmap[fg];
+ bgc = sc->fb_cmap[bg];
+ b = m = 0;
+
+ line = (sc->fb_stride * y) + x * sc->fb_bpp/8;
+ if (mask == NULL && sc->fb_bpp == 8 && (width % 8 == 0)) {
+ /* Don't try to put off screen pixels */
+ if (((x + width) > vd->vd_width) || ((y + height) >
+ vd->vd_height))
+ return;
+
+ for (; height > 0; height--) {
+ for (c = 0; c < width; c += 8) {
+ b = *pattern++;
+
+ /*
+ * Assume that there is more background than
+ * foreground in characters and init accordingly
+ */
+ ch1.l = ch2.l = (bg << 24) | (bg << 16) |
+ (bg << 8) | bg;
+
+ /*
+ * Calculate 2 x 4-chars at a time, and then
+ * write these out.
+ */
+ if (b & 0x80) ch1.c[0] = fg;
+ if (b & 0x40) ch1.c[1] = fg;
+ if (b & 0x20) ch1.c[2] = fg;
+ if (b & 0x10) ch1.c[3] = fg;
+
+ if (b & 0x08) ch2.c[0] = fg;
+ if (b & 0x04) ch2.c[1] = fg;
+ if (b & 0x02) ch2.c[2] = fg;
+ if (b & 0x01) ch2.c[3] = fg;
+
+ *(uint32_t *)(sc->fb_vbase + line + c) = ch1.l;
+ *(uint32_t *)(sc->fb_vbase + line + c + 4) =
+ ch2.l;
+ }
+ line += sc->fb_stride;
+ }
+ } else {
+ for (l = 0;
+ l < height && y + l < vw->vw_draw_area.tr_end.tp_row;
+ l++) {
+ for (c = 0;
+ c < width && x + c < vw->vw_draw_area.tr_end.tp_col;
+ c++) {
+ if (c % 8 == 0)
+ b = *pattern++;
+ else
+ b <<= 1;
+ if (mask != NULL) {
+ if (c % 8 == 0)
+ m = *mask++;
+ else
+ m <<= 1;
+ /* Skip pixel write, if mask not set. */
+ if ((m & 0x80) == 0)
+ continue;
+ }
+ switch(sc->fb_bpp) {
+ case 8:
+ *(uint8_t *)(sc->fb_vbase + line + c) =
+ b & 0x80 ? fg : bg;
+ break;
+ case 32:
+ *(uint32_t *)(sc->fb_vbase + line + 4*c)
+ = (b & 0x80) ? fgc : bgc;
+ break;
+ default:
+ /* panic? */
+ break;
+ }
+ }
+ line += sc->fb_stride;
+ }
+ }
+}
+
+void
+ofwfb_bitblt_text(struct vt_device *vd, const struct vt_window *vw,
+ const term_rect_t *area)
+{
+ unsigned int col, row, x, y;
+ struct vt_font *vf;
+ term_char_t c;
+ term_color_t fg, bg;
+ const uint8_t *pattern;
+
+ vf = vw->vw_font;
+
+ for (row = area->tr_begin.tp_row; row < area->tr_end.tp_row; ++row) {
+ for (col = area->tr_begin.tp_col; col < area->tr_end.tp_col;
+ ++col) {
+ x = col * vf->vf_width +
+ vw->vw_draw_area.tr_begin.tp_col;
+ y = row * vf->vf_height +
+ vw->vw_draw_area.tr_begin.tp_row;
+
+ c = VTBUF_GET_FIELD(&vw->vw_buf, row, col);
+ pattern = vtfont_lookup(vf, c);
+ vt_determine_colors(c,
+ VTBUF_ISCURSOR(&vw->vw_buf, row, col), &fg, &bg);
+
+ ofwfb_bitblt_bitmap(vd, vw,
+ pattern, NULL, vf->vf_width, vf->vf_height,
+ x, y, fg, bg);
+ }
+ }
+
+#ifndef SC_NO_CUTPASTE
+ if (!vd->vd_mshown)
+ return;
+
+ term_rect_t drawn_area;
+
+ drawn_area.tr_begin.tp_col = area->tr_begin.tp_col * vf->vf_width;
+ drawn_area.tr_begin.tp_row = area->tr_begin.tp_row * vf->vf_height;
+ drawn_area.tr_end.tp_col = area->tr_end.tp_col * vf->vf_width;
+ drawn_area.tr_end.tp_row = area->tr_end.tp_row * vf->vf_height;
+
+ if (vt_is_cursor_in_area(vd, &drawn_area)) {
+ ofwfb_bitblt_bitmap(vd, vw,
+ vd->vd_mcursor->map, vd->vd_mcursor->mask,
+ vd->vd_mcursor->width, vd->vd_mcursor->height,
+ vd->vd_mx_drawn + vw->vw_draw_area.tr_begin.tp_col,
+ vd->vd_my_drawn + vw->vw_draw_area.tr_begin.tp_row,
+ vd->vd_mcursor_fg, vd->vd_mcursor_bg);
+ }
+#endif
+}
+
+static void
+ofwfb_initialize(struct vt_device *vd)
+{
+ struct ofwfb_softc *sc = vd->vd_softc;
+ int i;
+ cell_t retval;
+ uint32_t oldpix;
+
+ /*
+ * Set up the color map
+ */
+
+ switch (sc->fb.fb_bpp) {
+ case 8:
+ vt_generate_cons_palette(sc->fb.fb_cmap, COLOR_FORMAT_RGB, 255,
+ 16, 255, 8, 255, 0);
+
+ for (i = 0; i < 16; i++) {
+ OF_call_method("color!", sc->sc_handle, 4, 1,
+ (cell_t)((sc->fb.fb_cmap[i] >> 16) & 0xff),
+ (cell_t)((sc->fb.fb_cmap[i] >> 8) & 0xff),
+ (cell_t)((sc->fb.fb_cmap[i] >> 0) & 0xff),
+ (cell_t)i, &retval);
+ }
+ break;
+
+ case 32:
+ /*
+ * We bypass the usual bus_space_() accessors here, mostly
+ * for performance reasons. In particular, we don't want
+ * any barrier operations that may be performed and handle
+ * endianness slightly different. Figure out the host-view
+ * endianness of the frame buffer.
+ */
+ oldpix = bus_space_read_4(sc->sc_memt, sc->fb.fb_vbase, 0);
+ bus_space_write_4(sc->sc_memt, sc->fb.fb_vbase, 0, 0xff000000);
+ if (*(uint8_t *)(sc->fb.fb_vbase) == 0xff)
+ vt_generate_cons_palette(sc->fb.fb_cmap,
+ COLOR_FORMAT_RGB, 255, 0, 255, 8, 255, 16);
+ else
+ vt_generate_cons_palette(sc->fb.fb_cmap,
+ COLOR_FORMAT_RGB, 255, 16, 255, 8, 255, 0);
+ bus_space_write_4(sc->sc_memt, sc->fb.fb_vbase, 0, oldpix);
+ break;
+
+ default:
+ panic("Unknown color space depth %d", sc->fb.fb_bpp);
+ break;
+ }
+
+ sc->fb.fb_cmsize = 16;
+}
+
+static int
+ofwfb_init(struct vt_device *vd)
+{
+ struct ofwfb_softc *sc;
+ char type[64];
+ phandle_t chosen;
+ phandle_t node;
+ uint32_t depth, height, width, stride;
+ uint32_t fb_phys;
+ int i, len;
+#ifdef __sparc64__
+ static struct bus_space_tag ofwfb_memt[1];
+ bus_addr_t phys;
+ int space;
+#endif
+
+ /* Initialize softc */
+ vd->vd_softc = sc = &ofwfb_conssoftc;
+
+ chosen = OF_finddevice("/chosen");
+ OF_getprop(chosen, "stdout", &sc->sc_handle, sizeof(ihandle_t));
+ node = OF_instance_to_package(sc->sc_handle);
+ if (node == -1) {
+ /*
+ * The "/chosen/stdout" does not exist try
+ * using "screen" directly.
+ */
+ node = OF_finddevice("screen");
+ sc->sc_handle = OF_open("screen");
+ }
+ OF_getprop(node, "device_type", type, sizeof(type));
+ if (strcmp(type, "display") != 0)
+ return (CN_DEAD);
+
+ /* Keep track of the OF node */
+ sc->sc_node = node;
+
+ /*
+ * Try to use a 32-bit framebuffer if possible. This may be
+ * unimplemented and fail. That's fine -- it just means we are
+ * stuck with the defaults.
+ */
+ OF_call_method("set-depth", sc->sc_handle, 1, 1, (cell_t)32, &i);
+
+ /* Make sure we have needed properties */
+ if (OF_getproplen(node, "height") != sizeof(height) ||
+ OF_getproplen(node, "width") != sizeof(width) ||
+ OF_getproplen(node, "depth") != sizeof(depth) ||
+ OF_getproplen(node, "linebytes") != sizeof(sc->fb.fb_stride))
+ return (CN_DEAD);
+
+ /* Only support 8 and 32-bit framebuffers */
+ OF_getprop(node, "depth", &depth, sizeof(depth));
+ if (depth != 8 && depth != 32)
+ return (CN_DEAD);
+ sc->fb.fb_bpp = sc->fb.fb_depth = depth;
+
+ OF_getprop(node, "height", &height, sizeof(height));
+ OF_getprop(node, "width", &width, sizeof(width));
+ OF_getprop(node, "linebytes", &stride, sizeof(stride));
+
+ sc->fb.fb_height = height;
+ sc->fb.fb_width = width;
+ sc->fb.fb_stride = stride;
+ sc->fb.fb_size = sc->fb.fb_height * sc->fb.fb_stride;
+
+ /*
+ * Grab the physical address of the framebuffer, and then map it
+ * into our memory space. If the MMU is not yet up, it will be
+ * remapped for us when relocation turns on.
+ */
+ if (OF_getproplen(node, "address") == sizeof(fb_phys)) {
+ /* XXX We assume #address-cells is 1 at this point. */
+ OF_getprop(node, "address", &fb_phys, sizeof(fb_phys));
+
+ #if defined(__powerpc__)
+ sc->sc_memt = &bs_be_tag;
+ bus_space_map(sc->sc_memt, fb_phys, sc->fb.fb_size,
+ BUS_SPACE_MAP_PREFETCHABLE, &sc->fb.fb_vbase);
+ #elif defined(__sparc64__)
+ OF_decode_addr(node, 0, &space, &phys);
+ sc->sc_memt = &ofwfb_memt[0];
+ sc->fb.fb_vbase =
+ sparc64_fake_bustag(space, fb_phys, sc->sc_memt);
+ #elif defined(__arm__)
+ sc->sc_memt = fdtbus_bs_tag;
+ bus_space_map(sc->sc_memt, sc->fb.fb_pbase, sc->fb.fb_size,
+ BUS_SPACE_MAP_PREFETCHABLE,
+ (bus_space_handle_t *)&sc->fb.fb_vbase);
+ #else
+ #error Unsupported platform!
+ #endif
+
+ sc->fb.fb_pbase = fb_phys;
+ } else {
+ /*
+ * Some IBM systems don't have an address property. Try to
+ * guess the framebuffer region from the assigned addresses.
+ * This is ugly, but there doesn't seem to be an alternative.
+ * Linux does the same thing.
+ */
+
+ struct ofw_pci_register pciaddrs[8];
+ int num_pciaddrs = 0;
+
+ /*
+ * Get the PCI addresses of the adapter, if present. The node
+ * may be the child of the PCI device: in that case, try the
+ * parent for the assigned-addresses property.
+ */
+ len = OF_getprop(node, "assigned-addresses", pciaddrs,
+ sizeof(pciaddrs));
+ if (len == -1) {
+ len = OF_getprop(OF_parent(node), "assigned-addresses",
+ pciaddrs, sizeof(pciaddrs));
+ }
+ if (len == -1)
+ len = 0;
+ num_pciaddrs = len / sizeof(struct ofw_pci_register);
+
+ fb_phys = num_pciaddrs;
+ for (i = 0; i < num_pciaddrs; i++) {
+ /* If it is too small, not the framebuffer */
+ if (pciaddrs[i].size_lo < sc->fb.fb_stride * height)
+ continue;
+ /* If it is not memory, it isn't either */
+ if (!(pciaddrs[i].phys_hi &
+ OFW_PCI_PHYS_HI_SPACE_MEM32))
+ continue;
+
+ /* This could be the framebuffer */
+ fb_phys = i;
+
+ /* If it is prefetchable, it certainly is */
+ if (pciaddrs[i].phys_hi & OFW_PCI_PHYS_HI_PREFETCHABLE)
+ break;
+ }
+
+ if (fb_phys == num_pciaddrs) /* No candidates found */
+ return (CN_DEAD);
+
+ #if defined(__powerpc__)
+ OF_decode_addr(node, fb_phys, &sc->sc_memt, &sc->fb.fb_vbase);
+ sc->fb.fb_pbase = sc->fb.fb_vbase; /* 1:1 mapped */
+ #else
+ /* No ability to interpret assigned-addresses otherwise */
+ return (CN_DEAD);
+ #endif
+ }
+
+
+ ofwfb_initialize(vd);
+ vt_fb_init(vd);
+
+ return (CN_INTERNAL);
+}
+
Property changes on: trunk/sys/dev/vt/hw/ofwfb/ofwfb.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/dev/vt/hw/vga/vt_vga.c
===================================================================
--- trunk/sys/dev/vt/hw/vga/vt_vga.c (rev 0)
+++ trunk/sys/dev/vt/hw/vga/vt_vga.c 2018-05-27 22:31:43 UTC (rev 10041)
@@ -0,0 +1,1255 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 2005 Marcel Moolenaar
+ * All rights reserved.
+ *
+ * Copyright (c) 2009 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * Portions of this software were developed by Ed Schouten
+ * under sponsorship from the FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: stable/10/sys/dev/vt/hw/vga/vt_vga.c 332644 2018-04-17 12:52:30Z emaste $");
+
+#include <sys/param.h>
+#include <sys/kernel.h>
+#include <sys/systm.h>
+
+#include <dev/vt/vt.h>
+#include <dev/vt/hw/vga/vt_vga_reg.h>
+
+#include <machine/bus.h>
+
+struct vga_softc {
+ bus_space_tag_t vga_fb_tag;
+ bus_space_handle_t vga_fb_handle;
+ bus_space_tag_t vga_reg_tag;
+ bus_space_handle_t vga_reg_handle;
+ int vga_wmode;
+ term_color_t vga_curfg, vga_curbg;
+};
+
+/* Convenience macros. */
+#define MEM_READ1(sc, ofs) \
+ bus_space_read_1(sc->vga_fb_tag, sc->vga_fb_handle, ofs)
+#define MEM_WRITE1(sc, ofs, val) \
+ bus_space_write_1(sc->vga_fb_tag, sc->vga_fb_handle, ofs, val)
+#define REG_READ1(sc, reg) \
+ bus_space_read_1(sc->vga_reg_tag, sc->vga_reg_handle, reg)
+#define REG_WRITE1(sc, reg, val) \
+ bus_space_write_1(sc->vga_reg_tag, sc->vga_reg_handle, reg, val)
+
+#define VT_VGA_WIDTH 640
+#define VT_VGA_HEIGHT 480
+#define VT_VGA_MEMSIZE (VT_VGA_WIDTH * VT_VGA_HEIGHT / 8)
+
+/*
+ * VGA is designed to handle 8 pixels at a time (8 pixels in one byte of
+ * memory).
+ */
+#define VT_VGA_PIXELS_BLOCK 8
+
+/*
+ * We use an off-screen addresses to:
+ * o store the background color;
+ * o store pixels pattern.
+ * Those addresses are then loaded in the latches once.
+ */
+#define VT_VGA_BGCOLOR_OFFSET VT_VGA_MEMSIZE
+
+static vd_probe_t vga_probe;
+static vd_init_t vga_init;
+static vd_blank_t vga_blank;
+static vd_bitblt_text_t vga_bitblt_text;
+static vd_bitblt_bmp_t vga_bitblt_bitmap;
+static vd_drawrect_t vga_drawrect;
+static vd_setpixel_t vga_setpixel;
+static vd_postswitch_t vga_postswitch;
+
+static const struct vt_driver vt_vga_driver = {
+ .vd_name = "vga",
+ .vd_probe = vga_probe,
+ .vd_init = vga_init,
+ .vd_blank = vga_blank,
+ .vd_bitblt_text = vga_bitblt_text,
+ .vd_bitblt_bmp = vga_bitblt_bitmap,
+ .vd_drawrect = vga_drawrect,
+ .vd_setpixel = vga_setpixel,
+ .vd_postswitch = vga_postswitch,
+ .vd_priority = VD_PRIORITY_GENERIC,
+};
+
+/*
+ * Driver supports both text mode and graphics mode. Make sure the
+ * buffer is always big enough to support both.
+ */
+static struct vga_softc vga_conssoftc;
+VT_DRIVER_DECLARE(vt_vga, vt_vga_driver);
+
+static inline void
+vga_setwmode(struct vt_device *vd, int wmode)
+{
+ struct vga_softc *sc = vd->vd_softc;
+
+ if (sc->vga_wmode == wmode)
+ return;
+
+ REG_WRITE1(sc, VGA_GC_ADDRESS, VGA_GC_MODE);
+ REG_WRITE1(sc, VGA_GC_DATA, wmode);
+ sc->vga_wmode = wmode;
+
+ switch (wmode) {
+ case 3:
+ /* Re-enable all plans. */
+ REG_WRITE1(sc, VGA_SEQ_ADDRESS, VGA_SEQ_MAP_MASK);
+ REG_WRITE1(sc, VGA_SEQ_DATA, VGA_SEQ_MM_EM3 | VGA_SEQ_MM_EM2 |
+ VGA_SEQ_MM_EM1 | VGA_SEQ_MM_EM0);
+ break;
+ }
+}
+
+static inline void
+vga_setfg(struct vt_device *vd, term_color_t color)
+{
+ struct vga_softc *sc = vd->vd_softc;
+
+ vga_setwmode(vd, 3);
+
+ if (sc->vga_curfg == color)
+ return;
+
+ REG_WRITE1(sc, VGA_GC_ADDRESS, VGA_GC_SET_RESET);
+ REG_WRITE1(sc, VGA_GC_DATA, color);
+ sc->vga_curfg = color;
+}
+
+static inline void
+vga_setbg(struct vt_device *vd, term_color_t color)
+{
+ struct vga_softc *sc = vd->vd_softc;
+
+ vga_setwmode(vd, 3);
+
+ if (sc->vga_curbg == color)
+ return;
+
+ REG_WRITE1(sc, VGA_GC_ADDRESS, VGA_GC_SET_RESET);
+ REG_WRITE1(sc, VGA_GC_DATA, color);
+
+ /*
+ * Write 8 pixels using the background color to an off-screen
+ * byte in the video memory.
+ */
+ MEM_WRITE1(sc, VT_VGA_BGCOLOR_OFFSET, 0xff);
+
+ /*
+ * Read those 8 pixels back to load the background color in the
+ * latches register.
+ */
+ MEM_READ1(sc, VT_VGA_BGCOLOR_OFFSET);
+
+ sc->vga_curbg = color;
+
+ /*
+ * The Set/Reset register doesn't contain the fg color anymore,
+ * store an invalid color.
+ */
+ sc->vga_curfg = 0xff;
+}
+
+/*
+ * Binary searchable table for Unicode to CP437 conversion.
+ */
+
+struct unicp437 {
+ uint16_t unicode_base;
+ uint8_t cp437_base;
+ uint8_t length;
+};
+
+static const struct unicp437 cp437table[] = {
+ { 0x0020, 0x20, 0x5e }, { 0x00a0, 0x20, 0x00 },
+ { 0x00a1, 0xad, 0x00 }, { 0x00a2, 0x9b, 0x00 },
+ { 0x00a3, 0x9c, 0x00 }, { 0x00a5, 0x9d, 0x00 },
+ { 0x00a7, 0x15, 0x00 }, { 0x00aa, 0xa6, 0x00 },
+ { 0x00ab, 0xae, 0x00 }, { 0x00ac, 0xaa, 0x00 },
+ { 0x00b0, 0xf8, 0x00 }, { 0x00b1, 0xf1, 0x00 },
+ { 0x00b2, 0xfd, 0x00 }, { 0x00b5, 0xe6, 0x00 },
+ { 0x00b6, 0x14, 0x00 }, { 0x00b7, 0xfa, 0x00 },
+ { 0x00ba, 0xa7, 0x00 }, { 0x00bb, 0xaf, 0x00 },
+ { 0x00bc, 0xac, 0x00 }, { 0x00bd, 0xab, 0x00 },
+ { 0x00bf, 0xa8, 0x00 }, { 0x00c4, 0x8e, 0x01 },
+ { 0x00c6, 0x92, 0x00 }, { 0x00c7, 0x80, 0x00 },
+ { 0x00c9, 0x90, 0x00 }, { 0x00d1, 0xa5, 0x00 },
+ { 0x00d6, 0x99, 0x00 }, { 0x00dc, 0x9a, 0x00 },
+ { 0x00df, 0xe1, 0x00 }, { 0x00e0, 0x85, 0x00 },
+ { 0x00e1, 0xa0, 0x00 }, { 0x00e2, 0x83, 0x00 },
+ { 0x00e4, 0x84, 0x00 }, { 0x00e5, 0x86, 0x00 },
+ { 0x00e6, 0x91, 0x00 }, { 0x00e7, 0x87, 0x00 },
+ { 0x00e8, 0x8a, 0x00 }, { 0x00e9, 0x82, 0x00 },
+ { 0x00ea, 0x88, 0x01 }, { 0x00ec, 0x8d, 0x00 },
+ { 0x00ed, 0xa1, 0x00 }, { 0x00ee, 0x8c, 0x00 },
+ { 0x00ef, 0x8b, 0x00 }, { 0x00f0, 0xeb, 0x00 },
+ { 0x00f1, 0xa4, 0x00 }, { 0x00f2, 0x95, 0x00 },
+ { 0x00f3, 0xa2, 0x00 }, { 0x00f4, 0x93, 0x00 },
+ { 0x00f6, 0x94, 0x00 }, { 0x00f7, 0xf6, 0x00 },
+ { 0x00f8, 0xed, 0x00 }, { 0x00f9, 0x97, 0x00 },
+ { 0x00fa, 0xa3, 0x00 }, { 0x00fb, 0x96, 0x00 },
+ { 0x00fc, 0x81, 0x00 }, { 0x00ff, 0x98, 0x00 },
+ { 0x0192, 0x9f, 0x00 }, { 0x0393, 0xe2, 0x00 },
+ { 0x0398, 0xe9, 0x00 }, { 0x03a3, 0xe4, 0x00 },
+ { 0x03a6, 0xe8, 0x00 }, { 0x03a9, 0xea, 0x00 },
+ { 0x03b1, 0xe0, 0x01 }, { 0x03b4, 0xeb, 0x00 },
+ { 0x03b5, 0xee, 0x00 }, { 0x03bc, 0xe6, 0x00 },
+ { 0x03c0, 0xe3, 0x00 }, { 0x03c3, 0xe5, 0x00 },
+ { 0x03c4, 0xe7, 0x00 }, { 0x03c6, 0xed, 0x00 },
+ { 0x03d5, 0xed, 0x00 }, { 0x2010, 0x2d, 0x00 },
+ { 0x2013, 0x2d, 0x00 },
+ { 0x2014, 0x2d, 0x00 }, { 0x2018, 0x60, 0x00 },
+ { 0x2019, 0x27, 0x00 }, { 0x201c, 0x22, 0x00 },
+ { 0x201d, 0x22, 0x00 }, { 0x2022, 0x07, 0x00 },
+ { 0x203c, 0x13, 0x00 }, { 0x207f, 0xfc, 0x00 },
+ { 0x20a7, 0x9e, 0x00 }, { 0x20ac, 0xee, 0x00 },
+ { 0x2126, 0xea, 0x00 }, { 0x2190, 0x1b, 0x00 },
+ { 0x2191, 0x18, 0x00 }, { 0x2192, 0x1a, 0x00 },
+ { 0x2193, 0x19, 0x00 }, { 0x2194, 0x1d, 0x00 },
+ { 0x2195, 0x12, 0x00 }, { 0x21a8, 0x17, 0x00 },
+ { 0x2202, 0xeb, 0x00 }, { 0x2208, 0xee, 0x00 },
+ { 0x2211, 0xe4, 0x00 }, { 0x2212, 0x2d, 0x00 },
+ { 0x2219, 0xf9, 0x00 }, { 0x221a, 0xfb, 0x00 },
+ { 0x221e, 0xec, 0x00 }, { 0x221f, 0x1c, 0x00 },
+ { 0x2229, 0xef, 0x00 }, { 0x2248, 0xf7, 0x00 },
+ { 0x2261, 0xf0, 0x00 }, { 0x2264, 0xf3, 0x00 },
+ { 0x2265, 0xf2, 0x00 }, { 0x2302, 0x7f, 0x00 },
+ { 0x2310, 0xa9, 0x00 }, { 0x2320, 0xf4, 0x00 },
+ { 0x2321, 0xf5, 0x00 }, { 0x2500, 0xc4, 0x00 },
+ { 0x2502, 0xb3, 0x00 }, { 0x250c, 0xda, 0x00 },
+ { 0x2510, 0xbf, 0x00 }, { 0x2514, 0xc0, 0x00 },
+ { 0x2518, 0xd9, 0x00 }, { 0x251c, 0xc3, 0x00 },
+ { 0x2524, 0xb4, 0x00 }, { 0x252c, 0xc2, 0x00 },
+ { 0x2534, 0xc1, 0x00 }, { 0x253c, 0xc5, 0x00 },
+ { 0x2550, 0xcd, 0x00 }, { 0x2551, 0xba, 0x00 },
+ { 0x2552, 0xd5, 0x00 }, { 0x2553, 0xd6, 0x00 },
+ { 0x2554, 0xc9, 0x00 }, { 0x2555, 0xb8, 0x00 },
+ { 0x2556, 0xb7, 0x00 }, { 0x2557, 0xbb, 0x00 },
+ { 0x2558, 0xd4, 0x00 }, { 0x2559, 0xd3, 0x00 },
+ { 0x255a, 0xc8, 0x00 }, { 0x255b, 0xbe, 0x00 },
+ { 0x255c, 0xbd, 0x00 }, { 0x255d, 0xbc, 0x00 },
+ { 0x255e, 0xc6, 0x01 }, { 0x2560, 0xcc, 0x00 },
+ { 0x2561, 0xb5, 0x00 }, { 0x2562, 0xb6, 0x00 },
+ { 0x2563, 0xb9, 0x00 }, { 0x2564, 0xd1, 0x01 },
+ { 0x2566, 0xcb, 0x00 }, { 0x2567, 0xcf, 0x00 },
+ { 0x2568, 0xd0, 0x00 }, { 0x2569, 0xca, 0x00 },
+ { 0x256a, 0xd8, 0x00 }, { 0x256b, 0xd7, 0x00 },
+ { 0x256c, 0xce, 0x00 }, { 0x2580, 0xdf, 0x00 },
+ { 0x2584, 0xdc, 0x00 }, { 0x2588, 0xdb, 0x00 },
+ { 0x258c, 0xdd, 0x00 }, { 0x2590, 0xde, 0x00 },
+ { 0x2591, 0xb0, 0x02 }, { 0x25a0, 0xfe, 0x00 },
+ { 0x25ac, 0x16, 0x00 }, { 0x25b2, 0x1e, 0x00 },
+ { 0x25ba, 0x10, 0x00 }, { 0x25bc, 0x1f, 0x00 },
+ { 0x25c4, 0x11, 0x00 }, { 0x25cb, 0x09, 0x00 },
+ { 0x25d8, 0x08, 0x00 }, { 0x25d9, 0x0a, 0x00 },
+ { 0x263a, 0x01, 0x01 }, { 0x263c, 0x0f, 0x00 },
+ { 0x2640, 0x0c, 0x00 }, { 0x2642, 0x0b, 0x00 },
+ { 0x2660, 0x06, 0x00 }, { 0x2663, 0x05, 0x00 },
+ { 0x2665, 0x03, 0x01 }, { 0x266a, 0x0d, 0x00 },
+ { 0x266c, 0x0e, 0x00 }, { 0x27e8, 0x3c, 0x00 },
+ { 0x27e9, 0x3e, 0x00 },
+};
+
+static uint8_t
+vga_get_cp437(term_char_t c)
+{
+ int min, mid, max;
+
+ min = 0;
+ max = nitems(cp437table) - 1;
+
+ if (c < cp437table[0].unicode_base ||
+ c > cp437table[max].unicode_base + cp437table[max].length)
+ return '?';
+
+ while (max >= min) {
+ mid = (min + max) / 2;
+ if (c < cp437table[mid].unicode_base)
+ max = mid - 1;
+ else if (c > cp437table[mid].unicode_base +
+ cp437table[mid].length)
+ min = mid + 1;
+ else
+ return (c - cp437table[mid].unicode_base +
+ cp437table[mid].cp437_base);
+ }
+
+ return '?';
+}
+
+static void
+vga_blank(struct vt_device *vd, term_color_t color)
+{
+ struct vga_softc *sc = vd->vd_softc;
+ u_int ofs;
+
+ vga_setfg(vd, color);
+ for (ofs = 0; ofs < VT_VGA_MEMSIZE; ofs++)
+ MEM_WRITE1(sc, ofs, 0xff);
+}
+
+static inline void
+vga_bitblt_put(struct vt_device *vd, u_long dst, term_color_t color,
+ uint8_t v)
+{
+ struct vga_softc *sc = vd->vd_softc;
+
+ /* Skip empty writes, in order to avoid palette changes. */
+ if (v != 0x00) {
+ vga_setfg(vd, color);
+ /*
+ * When this MEM_READ1() gets disabled, all sorts of
+ * artifacts occur. This is because this read loads the
+ * set of 8 pixels that are about to be changed. There
+ * is one scenario where we can avoid the read, namely
+ * if all pixels are about to be overwritten anyway.
+ */
+ if (v != 0xff) {
+ MEM_READ1(sc, dst);
+
+ /* The bg color was trashed by the reads. */
+ sc->vga_curbg = 0xff;
+ }
+ MEM_WRITE1(sc, dst, v);
+ }
+}
+
+static void
+vga_setpixel(struct vt_device *vd, int x, int y, term_color_t color)
+{
+
+ if (vd->vd_flags & VDF_TEXTMODE)
+ return;
+
+ vga_bitblt_put(vd, (y * VT_VGA_WIDTH / 8) + (x / 8), color,
+ 0x80 >> (x % 8));
+}
+
+static void
+vga_drawrect(struct vt_device *vd, int x1, int y1, int x2, int y2, int fill,
+ term_color_t color)
+{
+ int x, y;
+
+ if (vd->vd_flags & VDF_TEXTMODE)
+ return;
+
+ for (y = y1; y <= y2; y++) {
+ if (fill || (y == y1) || (y == y2)) {
+ for (x = x1; x <= x2; x++)
+ vga_setpixel(vd, x, y, color);
+ } else {
+ vga_setpixel(vd, x1, y, color);
+ vga_setpixel(vd, x2, y, color);
+ }
+ }
+}
+
+static void
+vga_compute_shifted_pattern(const uint8_t *src, unsigned int bytes,
+ unsigned int src_x, unsigned int x_count, unsigned int dst_x,
+ uint8_t *pattern, uint8_t *mask)
+{
+ unsigned int n;
+
+ n = src_x / 8;
+
+ /*
+ * This mask has bits set, where a pixel (ether 0 or 1)
+ * comes from the source bitmap.
+ */
+ if (mask != NULL) {
+ *mask = (0xff
+ >> (8 - x_count))
+ << (8 - x_count - dst_x);
+ }
+
+ if (n == (src_x + x_count - 1) / 8) {
+ /* All the pixels we want are in the same byte. */
+ *pattern = src[n];
+ if (dst_x >= src_x)
+ *pattern >>= (dst_x - src_x % 8);
+ else
+ *pattern <<= (src_x % 8 - dst_x);
+ } else {
+ /* The pixels we want are split into two bytes. */
+ if (dst_x >= src_x % 8) {
+ *pattern =
+ src[n] << (8 - dst_x - src_x % 8) |
+ src[n + 1] >> (dst_x - src_x % 8);
+ } else {
+ *pattern =
+ src[n] << (src_x % 8 - dst_x) |
+ src[n + 1] >> (8 - src_x % 8 - dst_x);
+ }
+ }
+}
+
+static void
+vga_copy_bitmap_portion(uint8_t *pattern_2colors, uint8_t *pattern_ncolors,
+ const uint8_t *src, const uint8_t *src_mask, unsigned int src_width,
+ unsigned int src_x, unsigned int dst_x, unsigned int x_count,
+ unsigned int src_y, unsigned int dst_y, unsigned int y_count,
+ term_color_t fg, term_color_t bg, int overwrite)
+{
+ unsigned int i, bytes;
+ uint8_t pattern, relevant_bits, mask;
+
+ bytes = (src_width + 7) / 8;
+
+ for (i = 0; i < y_count; ++i) {
+ vga_compute_shifted_pattern(src + (src_y + i) * bytes,
+ bytes, src_x, x_count, dst_x, &pattern, &relevant_bits);
+
+ if (src_mask == NULL) {
+ /*
+ * No src mask. Consider that all wanted bits
+ * from the source are "authoritative".
+ */
+ mask = relevant_bits;
+ } else {
+ /*
+ * There's an src mask. We shift it the same way
+ * we shifted the source pattern.
+ */
+ vga_compute_shifted_pattern(
+ src_mask + (src_y + i) * bytes,
+ bytes, src_x, x_count, dst_x,
+ &mask, NULL);
+
+ /* Now, only keep the wanted bits among them. */
+ mask &= relevant_bits;
+ }
+
+ /*
+ * Clear bits from the pattern which must be
+ * transparent, according to the source mask.
+ */
+ pattern &= mask;
+
+ /* Set the bits in the 2-colors array. */
+ if (overwrite)
+ pattern_2colors[dst_y + i] &= ~mask;
+ pattern_2colors[dst_y + i] |= pattern;
+
+ if (pattern_ncolors == NULL)
+ continue;
+
+ /*
+ * Set the same bits in the n-colors array. This one
+ * supports transparency, when a given bit is cleared in
+ * all colors.
+ */
+ if (overwrite) {
+ /*
+ * Ensure that the pixels used by this bitmap are
+ * cleared in other colors.
+ */
+ for (int j = 0; j < 16; ++j)
+ pattern_ncolors[(dst_y + i) * 16 + j] &=
+ ~mask;
+ }
+ pattern_ncolors[(dst_y + i) * 16 + fg] |= pattern;
+ pattern_ncolors[(dst_y + i) * 16 + bg] |= (~pattern & mask);
+ }
+}
+
+static void
+vga_bitblt_pixels_block_2colors(struct vt_device *vd, const uint8_t *masks,
+ term_color_t fg, term_color_t bg,
+ unsigned int x, unsigned int y, unsigned int height)
+{
+ unsigned int i, offset;
+ struct vga_softc *sc;
+
+ /*
+ * The great advantage of Write Mode 3 is that we just need
+ * to load the foreground in the Set/Reset register, load the
+ * background color in the latches register (this is done
+ * through a write in offscreen memory followed by a read of
+ * that data), then write the pattern to video memory. This
+ * pattern indicates if the pixel should use the foreground
+ * color (bit set) or the background color (bit cleared).
+ */
+
+ vga_setbg(vd, bg);
+ vga_setfg(vd, fg);
+
+ sc = vd->vd_softc;
+ offset = (VT_VGA_WIDTH * y + x) / 8;
+
+ for (i = 0; i < height; ++i, offset += VT_VGA_WIDTH / 8) {
+ MEM_WRITE1(sc, offset, masks[i]);
+ }
+}
+
+static void
+vga_bitblt_pixels_block_ncolors(struct vt_device *vd, const uint8_t *masks,
+ unsigned int x, unsigned int y, unsigned int height)
+{
+ unsigned int i, j, plan, color, offset;
+ struct vga_softc *sc;
+ uint8_t mask, plans[height * 4];
+
+ sc = vd->vd_softc;
+
+ memset(plans, 0, sizeof(plans));
+
+ /*
+ * To write a group of pixels using 3 or more colors, we select
+ * Write Mode 0 and write one byte to each plan separately.
+ */
+
+ /*
+ * We first compute each byte: each plan contains one bit of the
+ * color code for each of the 8 pixels.
+ *
+ * For example, if the 8 pixels are like this:
+ * GBBBBBBY
+ * where:
+ * G (gray) = 0b0111
+ * B (black) = 0b0000
+ * Y (yellow) = 0b0011
+ *
+ * The corresponding for bytes are:
+ * GBBBBBBY
+ * Plan 0: 10000001 = 0x81
+ * Plan 1: 10000001 = 0x81
+ * Plan 2: 10000000 = 0x80
+ * Plan 3: 00000000 = 0x00
+ * | | |
+ * | | +-> 0b0011 (Y)
+ * | +-----> 0b0000 (B)
+ * +--------> 0b0111 (G)
+ */
+
+ for (i = 0; i < height; ++i) {
+ for (color = 0; color < 16; ++color) {
+ mask = masks[i * 16 + color];
+ if (mask == 0x00)
+ continue;
+
+ for (j = 0; j < 8; ++j) {
+ if (!((mask >> (7 - j)) & 0x1))
+ continue;
+
+ /* The pixel "j" uses color "color". */
+ for (plan = 0; plan < 4; ++plan)
+ plans[i * 4 + plan] |=
+ ((color >> plan) & 0x1) << (7 - j);
+ }
+ }
+ }
+
+ /*
+ * The bytes are ready: we now switch to Write Mode 0 and write
+ * all bytes, one plan at a time.
+ */
+ vga_setwmode(vd, 0);
+
+ REG_WRITE1(sc, VGA_SEQ_ADDRESS, VGA_SEQ_MAP_MASK);
+ for (plan = 0; plan < 4; ++plan) {
+ /* Select plan. */
+ REG_WRITE1(sc, VGA_SEQ_DATA, 1 << plan);
+
+ /* Write all bytes for this plan, from Y to Y+height. */
+ for (i = 0; i < height; ++i) {
+ offset = (VT_VGA_WIDTH * (y + i) + x) / 8;
+ MEM_WRITE1(sc, offset, plans[i * 4 + plan]);
+ }
+ }
+}
+
+static void
+vga_bitblt_one_text_pixels_block(struct vt_device *vd,
+ const struct vt_window *vw, unsigned int x, unsigned int y)
+{
+ const struct vt_buf *vb;
+ const struct vt_font *vf;
+ unsigned int i, col, row, src_x, x_count;
+ unsigned int used_colors_list[16], used_colors;
+ uint8_t pattern_2colors[vw->vw_font->vf_height];
+ uint8_t pattern_ncolors[vw->vw_font->vf_height * 16];
+ term_char_t c;
+ term_color_t fg, bg;
+ const uint8_t *src;
+
+ vb = &vw->vw_buf;
+ vf = vw->vw_font;
+
+ /*
+ * The current pixels block.
+ *
+ * We fill it with portions of characters, because both "grids"
+ * may not match.
+ *
+ * i is the index in this pixels block.
+ */
+
+ i = x;
+ used_colors = 0;
+ memset(used_colors_list, 0, sizeof(used_colors_list));
+ memset(pattern_2colors, 0, sizeof(pattern_2colors));
+ memset(pattern_ncolors, 0, sizeof(pattern_ncolors));
+
+ if (i < vw->vw_draw_area.tr_begin.tp_col) {
+ /*
+ * i is in the margin used to center the text area on
+ * the screen.
+ */
+
+ i = vw->vw_draw_area.tr_begin.tp_col;
+ }
+
+ while (i < x + VT_VGA_PIXELS_BLOCK &&
+ i < vw->vw_draw_area.tr_end.tp_col) {
+ /*
+ * Find which character is drawn on this pixel in the
+ * pixels block.
+ *
+ * While here, record what colors it uses.
+ */
+
+ col = (i - vw->vw_draw_area.tr_begin.tp_col) / vf->vf_width;
+ row = (y - vw->vw_draw_area.tr_begin.tp_row) / vf->vf_height;
+
+ c = VTBUF_GET_FIELD(vb, row, col);
+ src = vtfont_lookup(vf, c);
+
+ vt_determine_colors(c, VTBUF_ISCURSOR(vb, row, col), &fg, &bg);
+ if ((used_colors_list[fg] & 0x1) != 0x1)
+ used_colors++;
+ if ((used_colors_list[bg] & 0x2) != 0x2)
+ used_colors++;
+ used_colors_list[fg] |= 0x1;
+ used_colors_list[bg] |= 0x2;
+
+ /*
+ * Compute the portion of the character we want to draw,
+ * because the pixels block may start in the middle of a
+ * character.
+ *
+ * The first pixel to draw in the character is
+ * the current position -
+ * the start position of the character
+ *
+ * The last pixel to draw is either
+ * - the last pixel of the character, or
+ * - the pixel of the character matching the end of
+ * the pixels block
+ * whichever comes first. This position is then
+ * changed to be relative to the start position of the
+ * character.
+ */
+
+ src_x = i -
+ (col * vf->vf_width + vw->vw_draw_area.tr_begin.tp_col);
+ x_count = min(min(
+ (col + 1) * vf->vf_width +
+ vw->vw_draw_area.tr_begin.tp_col,
+ x + VT_VGA_PIXELS_BLOCK),
+ vw->vw_draw_area.tr_end.tp_col);
+ x_count -= col * vf->vf_width +
+ vw->vw_draw_area.tr_begin.tp_col;
+ x_count -= src_x;
+
+ /* Copy a portion of the character. */
+ vga_copy_bitmap_portion(pattern_2colors, pattern_ncolors,
+ src, NULL, vf->vf_width,
+ src_x, i % VT_VGA_PIXELS_BLOCK, x_count,
+ 0, 0, vf->vf_height, fg, bg, 0);
+
+ /* We move to the next portion. */
+ i += x_count;
+ }
+
+#ifndef SC_NO_CUTPASTE
+ /*
+ * Copy the mouse pointer bitmap if it's over the current pixels
+ * block.
+ *
+ * We use the saved cursor position (saved in vt_flush()), because
+ * the current position could be different than the one used
+ * to mark the area dirty.
+ */
+ term_rect_t drawn_area;
+
+ drawn_area.tr_begin.tp_col = x;
+ drawn_area.tr_begin.tp_row = y;
+ drawn_area.tr_end.tp_col = x + VT_VGA_PIXELS_BLOCK;
+ drawn_area.tr_end.tp_row = y + vf->vf_height;
+ if (vd->vd_mshown && vt_is_cursor_in_area(vd, &drawn_area)) {
+ struct vt_mouse_cursor *cursor;
+ unsigned int mx, my;
+ unsigned int dst_x, src_y, dst_y, y_count;
+
+ cursor = vd->vd_mcursor;
+ mx = vd->vd_mx_drawn + vw->vw_draw_area.tr_begin.tp_col;
+ my = vd->vd_my_drawn + vw->vw_draw_area.tr_begin.tp_row;
+
+ /* Compute the portion of the cursor we want to copy. */
+ src_x = x > mx ? x - mx : 0;
+ dst_x = mx > x ? mx - x : 0;
+ x_count = min(min(min(
+ cursor->width - src_x,
+ x + VT_VGA_PIXELS_BLOCK - mx),
+ vw->vw_draw_area.tr_end.tp_col - mx),
+ VT_VGA_PIXELS_BLOCK);
+
+ /*
+ * The cursor isn't aligned on the Y-axis with
+ * characters, so we need to compute the vertical
+ * start/count.
+ */
+ src_y = y > my ? y - my : 0;
+ dst_y = my > y ? my - y : 0;
+ y_count = min(
+ min(cursor->height - src_y, y + vf->vf_height - my),
+ vf->vf_height);
+
+ /* Copy the cursor portion. */
+ vga_copy_bitmap_portion(pattern_2colors, pattern_ncolors,
+ cursor->map, cursor->mask, cursor->width,
+ src_x, dst_x, x_count, src_y, dst_y, y_count,
+ vd->vd_mcursor_fg, vd->vd_mcursor_bg, 1);
+
+ if ((used_colors_list[vd->vd_mcursor_fg] & 0x1) != 0x1)
+ used_colors++;
+ if ((used_colors_list[vd->vd_mcursor_bg] & 0x2) != 0x2)
+ used_colors++;
+ }
+#endif
+
+ /*
+ * The pixels block is completed, we can now draw it on the
+ * screen.
+ */
+ if (used_colors == 2)
+ vga_bitblt_pixels_block_2colors(vd, pattern_2colors, fg, bg,
+ x, y, vf->vf_height);
+ else
+ vga_bitblt_pixels_block_ncolors(vd, pattern_ncolors,
+ x, y, vf->vf_height);
+}
+
+static void
+vga_bitblt_text_gfxmode(struct vt_device *vd, const struct vt_window *vw,
+ const term_rect_t *area)
+{
+ const struct vt_font *vf;
+ unsigned int col, row;
+ unsigned int x1, y1, x2, y2, x, y;
+
+ vf = vw->vw_font;
+
+ /*
+ * Compute the top-left pixel position aligned with the video
+ * adapter pixels block size.
+ *
+ * This is calculated from the top-left column of te dirty area:
+ *
+ * 1. Compute the top-left pixel of the character:
+ * col * font width + x offset
+ *
+ * NOTE: x offset is used to center the text area on the
+ * screen. It's expressed in pixels, not in characters
+ * col/row!
+ *
+ * 2. Find the pixel further on the left marking the start of
+ * an aligned pixels block (eg. chunk of 8 pixels):
+ * character's x / blocksize * blocksize
+ *
+ * The division, being made on integers, achieves the
+ * alignment.
+ *
+ * For the Y-axis, we need to compute the character's y
+ * coordinate, but we don't need to align it.
+ */
+
+ col = area->tr_begin.tp_col;
+ row = area->tr_begin.tp_row;
+ x1 = (int)((col * vf->vf_width + vw->vw_draw_area.tr_begin.tp_col)
+ / VT_VGA_PIXELS_BLOCK)
+ * VT_VGA_PIXELS_BLOCK;
+ y1 = row * vf->vf_height + vw->vw_draw_area.tr_begin.tp_row;
+
+ /*
+ * Compute the bottom right pixel position, again, aligned with
+ * the pixels block size.
+ *
+ * The same rules apply, we just add 1 to base the computation
+ * on the "right border" of the dirty area.
+ */
+
+ col = area->tr_end.tp_col;
+ row = area->tr_end.tp_row;
+ x2 = (int)((col * vf->vf_width + vw->vw_draw_area.tr_begin.tp_col
+ + VT_VGA_PIXELS_BLOCK - 1)
+ / VT_VGA_PIXELS_BLOCK)
+ * VT_VGA_PIXELS_BLOCK;
+ y2 = row * vf->vf_height + vw->vw_draw_area.tr_begin.tp_row;
+
+ /* Clip the area to the screen size. */
+ x2 = min(x2, vw->vw_draw_area.tr_end.tp_col);
+ y2 = min(y2, vw->vw_draw_area.tr_end.tp_row);
+
+ /*
+ * Now, we take care of N pixels line at a time (the first for
+ * loop, N = font height), and for these lines, draw one pixels
+ * block at a time (the second for loop), not a character at a
+ * time.
+ *
+ * Therefore, on the X-axis, characters my be drawn partially if
+ * they are not aligned on 8-pixels boundary.
+ *
+ * However, the operation is repeated for the full height of the
+ * font before moving to the next character, because it allows
+ * to keep the color settings and write mode, before perhaps
+ * changing them with the next one.
+ */
+
+ for (y = y1; y < y2; y += vf->vf_height) {
+ for (x = x1; x < x2; x += VT_VGA_PIXELS_BLOCK) {
+ vga_bitblt_one_text_pixels_block(vd, vw, x, y);
+ }
+ }
+}
+
+static void
+vga_bitblt_text_txtmode(struct vt_device *vd, const struct vt_window *vw,
+ const term_rect_t *area)
+{
+ struct vga_softc *sc;
+ const struct vt_buf *vb;
+ unsigned int col, row;
+ term_char_t c;
+ term_color_t fg, bg;
+ uint8_t ch, attr;
+
+ sc = vd->vd_softc;
+ vb = &vw->vw_buf;
+
+ for (row = area->tr_begin.tp_row; row < area->tr_end.tp_row; ++row) {
+ for (col = area->tr_begin.tp_col;
+ col < area->tr_end.tp_col;
+ ++col) {
+ /*
+ * Get next character and its associated fg/bg
+ * colors.
+ */
+ c = VTBUF_GET_FIELD(vb, row, col);
+ vt_determine_colors(c, VTBUF_ISCURSOR(vb, row, col),
+ &fg, &bg);
+
+ /*
+ * Convert character to CP437, which is the
+ * character set used by the VGA hardware by
+ * default.
+ */
+ ch = vga_get_cp437(TCHAR_CHARACTER(c));
+
+ /* Convert colors to VGA attributes. */
+ attr = bg << 4 | fg;
+
+ MEM_WRITE1(sc, (row * 80 + col) * 2 + 0,
+ ch);
+ MEM_WRITE1(sc, (row * 80 + col) * 2 + 1,
+ attr);
+ }
+ }
+}
+
+static void
+vga_bitblt_text(struct vt_device *vd, const struct vt_window *vw,
+ const term_rect_t *area)
+{
+
+ if (!(vd->vd_flags & VDF_TEXTMODE)) {
+ vga_bitblt_text_gfxmode(vd, vw, area);
+ } else {
+ vga_bitblt_text_txtmode(vd, vw, area);
+ }
+}
+
+static void
+vga_bitblt_bitmap(struct vt_device *vd, const struct vt_window *vw,
+ const uint8_t *pattern, const uint8_t *mask,
+ unsigned int width, unsigned int height,
+ unsigned int x, unsigned int y, term_color_t fg, term_color_t bg)
+{
+ unsigned int x1, y1, x2, y2, i, j, src_x, dst_x, x_count;
+ uint8_t pattern_2colors;
+
+ /* Align coordinates with the 8-pxels grid. */
+ x1 = x / VT_VGA_PIXELS_BLOCK * VT_VGA_PIXELS_BLOCK;
+ y1 = y;
+
+ x2 = (x + width + VT_VGA_PIXELS_BLOCK - 1) /
+ VT_VGA_PIXELS_BLOCK * VT_VGA_PIXELS_BLOCK;
+ y2 = y + height;
+ x2 = min(x2, vd->vd_width - 1);
+ y2 = min(y2, vd->vd_height - 1);
+
+ for (j = y1; j < y2; ++j) {
+ src_x = 0;
+ dst_x = x - x1;
+ x_count = VT_VGA_PIXELS_BLOCK - dst_x;
+
+ for (i = x1; i < x2; i += VT_VGA_PIXELS_BLOCK) {
+ pattern_2colors = 0;
+
+ vga_copy_bitmap_portion(
+ &pattern_2colors, NULL,
+ pattern, mask, width,
+ src_x, dst_x, x_count,
+ j - y1, 0, 1, fg, bg, 0);
+
+ vga_bitblt_pixels_block_2colors(vd,
+ &pattern_2colors, fg, bg,
+ i, j, 1);
+
+ src_x += x_count;
+ dst_x = (dst_x + x_count) % VT_VGA_PIXELS_BLOCK;
+ x_count = min(width - src_x, VT_VGA_PIXELS_BLOCK);
+ }
+ }
+}
+
+static void
+vga_initialize_graphics(struct vt_device *vd)
+{
+ struct vga_softc *sc = vd->vd_softc;
+
+ /* Clock select. */
+ REG_WRITE1(sc, VGA_GEN_MISC_OUTPUT_W, VGA_GEN_MO_VSP | VGA_GEN_MO_HSP |
+ VGA_GEN_MO_PB | VGA_GEN_MO_ER | VGA_GEN_MO_IOA);
+ /* Set sequencer clocking and memory mode. */
+ REG_WRITE1(sc, VGA_SEQ_ADDRESS, VGA_SEQ_CLOCKING_MODE);
+ REG_WRITE1(sc, VGA_SEQ_DATA, VGA_SEQ_CM_89);
+ REG_WRITE1(sc, VGA_SEQ_ADDRESS, VGA_SEQ_MEMORY_MODE);
+ REG_WRITE1(sc, VGA_SEQ_DATA, VGA_SEQ_MM_OE | VGA_SEQ_MM_EM);
+
+ /* Set the graphics controller in graphics mode. */
+ REG_WRITE1(sc, VGA_GC_ADDRESS, VGA_GC_MISCELLANEOUS);
+ REG_WRITE1(sc, VGA_GC_DATA, 0x04 + VGA_GC_MISC_GA);
+ /* Program the CRT controller. */
+ REG_WRITE1(sc, VGA_CRTC_ADDRESS, VGA_CRTC_HORIZ_TOTAL);
+ REG_WRITE1(sc, VGA_CRTC_DATA, 0x5f); /* 760 */
+ REG_WRITE1(sc, VGA_CRTC_ADDRESS, VGA_CRTC_HORIZ_DISP_END);
+ REG_WRITE1(sc, VGA_CRTC_DATA, 0x4f); /* 640 - 8 */
+ REG_WRITE1(sc, VGA_CRTC_ADDRESS, VGA_CRTC_START_HORIZ_BLANK);
+ REG_WRITE1(sc, VGA_CRTC_DATA, 0x50); /* 640 */
+ REG_WRITE1(sc, VGA_CRTC_ADDRESS, VGA_CRTC_END_HORIZ_BLANK);
+ REG_WRITE1(sc, VGA_CRTC_DATA, VGA_CRTC_EHB_CR + 2);
+ REG_WRITE1(sc, VGA_CRTC_ADDRESS, VGA_CRTC_START_HORIZ_RETRACE);
+ REG_WRITE1(sc, VGA_CRTC_DATA, 0x54); /* 672 */
+ REG_WRITE1(sc, VGA_CRTC_ADDRESS, VGA_CRTC_END_HORIZ_RETRACE);
+ REG_WRITE1(sc, VGA_CRTC_DATA, VGA_CRTC_EHR_EHB + 0);
+ REG_WRITE1(sc, VGA_CRTC_ADDRESS, VGA_CRTC_VERT_TOTAL);
+ REG_WRITE1(sc, VGA_CRTC_DATA, 0x0b); /* 523 */
+ REG_WRITE1(sc, VGA_CRTC_ADDRESS, VGA_CRTC_OVERFLOW);
+ REG_WRITE1(sc, VGA_CRTC_DATA, VGA_CRTC_OF_VT9 | VGA_CRTC_OF_LC8 |
+ VGA_CRTC_OF_VBS8 | VGA_CRTC_OF_VRS8 | VGA_CRTC_OF_VDE8);
+ REG_WRITE1(sc, VGA_CRTC_ADDRESS, VGA_CRTC_MAX_SCAN_LINE);
+ REG_WRITE1(sc, VGA_CRTC_DATA, VGA_CRTC_MSL_LC9);
+ REG_WRITE1(sc, VGA_CRTC_ADDRESS, VGA_CRTC_VERT_RETRACE_START);
+ REG_WRITE1(sc, VGA_CRTC_DATA, 0xea); /* 480 + 10 */
+ REG_WRITE1(sc, VGA_CRTC_ADDRESS, VGA_CRTC_VERT_RETRACE_END);
+ REG_WRITE1(sc, VGA_CRTC_DATA, 0x0c);
+ REG_WRITE1(sc, VGA_CRTC_ADDRESS, VGA_CRTC_VERT_DISPLAY_END);
+ REG_WRITE1(sc, VGA_CRTC_DATA, 0xdf); /* 480 - 1*/
+ REG_WRITE1(sc, VGA_CRTC_ADDRESS, VGA_CRTC_OFFSET);
+ REG_WRITE1(sc, VGA_CRTC_DATA, 0x28);
+ REG_WRITE1(sc, VGA_CRTC_ADDRESS, VGA_CRTC_START_VERT_BLANK);
+ REG_WRITE1(sc, VGA_CRTC_DATA, 0xe7); /* 480 + 7 */
+ REG_WRITE1(sc, VGA_CRTC_ADDRESS, VGA_CRTC_END_VERT_BLANK);
+ REG_WRITE1(sc, VGA_CRTC_DATA, 0x04);
+ REG_WRITE1(sc, VGA_CRTC_ADDRESS, VGA_CRTC_MODE_CONTROL);
+ REG_WRITE1(sc, VGA_CRTC_DATA, VGA_CRTC_MC_WB | VGA_CRTC_MC_AW |
+ VGA_CRTC_MC_SRS | VGA_CRTC_MC_CMS);
+ REG_WRITE1(sc, VGA_CRTC_ADDRESS, VGA_CRTC_LINE_COMPARE);
+ REG_WRITE1(sc, VGA_CRTC_DATA, 0xff); /* 480 + 31 */
+
+ REG_WRITE1(sc, VGA_GEN_FEATURE_CTRL_W, 0);
+
+ REG_WRITE1(sc, VGA_SEQ_ADDRESS, VGA_SEQ_MAP_MASK);
+ REG_WRITE1(sc, VGA_SEQ_DATA, VGA_SEQ_MM_EM3 | VGA_SEQ_MM_EM2 |
+ VGA_SEQ_MM_EM1 | VGA_SEQ_MM_EM0);
+ REG_WRITE1(sc, VGA_SEQ_ADDRESS, VGA_SEQ_CHAR_MAP_SELECT);
+ REG_WRITE1(sc, VGA_SEQ_DATA, 0);
+
+ REG_WRITE1(sc, VGA_GC_ADDRESS, VGA_GC_SET_RESET);
+ REG_WRITE1(sc, VGA_GC_DATA, 0);
+ REG_WRITE1(sc, VGA_GC_ADDRESS, VGA_GC_ENABLE_SET_RESET);
+ REG_WRITE1(sc, VGA_GC_DATA, 0x0f);
+ REG_WRITE1(sc, VGA_GC_ADDRESS, VGA_GC_COLOR_COMPARE);
+ REG_WRITE1(sc, VGA_GC_DATA, 0);
+ REG_WRITE1(sc, VGA_GC_ADDRESS, VGA_GC_DATA_ROTATE);
+ REG_WRITE1(sc, VGA_GC_DATA, 0);
+ REG_WRITE1(sc, VGA_GC_ADDRESS, VGA_GC_READ_MAP_SELECT);
+ REG_WRITE1(sc, VGA_GC_DATA, 0);
+ REG_WRITE1(sc, VGA_GC_ADDRESS, VGA_GC_MODE);
+ REG_WRITE1(sc, VGA_GC_DATA, 0);
+ REG_WRITE1(sc, VGA_GC_ADDRESS, VGA_GC_COLOR_DONT_CARE);
+ REG_WRITE1(sc, VGA_GC_DATA, 0x0f);
+ REG_WRITE1(sc, VGA_GC_ADDRESS, VGA_GC_BIT_MASK);
+ REG_WRITE1(sc, VGA_GC_DATA, 0xff);
+}
+
+static void
+vga_initialize(struct vt_device *vd, int textmode)
+{
+ struct vga_softc *sc = vd->vd_softc;
+ uint8_t x;
+
+ /* Make sure the VGA adapter is not in monochrome emulation mode. */
+ x = REG_READ1(sc, VGA_GEN_MISC_OUTPUT_R);
+ REG_WRITE1(sc, VGA_GEN_MISC_OUTPUT_W, x | VGA_GEN_MO_IOA);
+
+ /* Unprotect CRTC registers 0-7. */
+ REG_WRITE1(sc, VGA_CRTC_ADDRESS, VGA_CRTC_VERT_RETRACE_END);
+ x = REG_READ1(sc, VGA_CRTC_DATA);
+ REG_WRITE1(sc, VGA_CRTC_DATA, x & ~VGA_CRTC_VRE_PR);
+
+ /*
+ * Wait for the vertical retrace.
+ * NOTE: this code reads the VGA_GEN_INPUT_STAT_1 register, which has
+ * the side-effect of clearing the internal flip-flip of the attribute
+ * controller's write register. This means that because this code is
+ * here, we know for sure that the first write to the attribute
+ * controller will be a write to the address register. Removing this
+ * code therefore also removes that guarantee and appropriate measures
+ * need to be taken.
+ */
+ do {
+ x = REG_READ1(sc, VGA_GEN_INPUT_STAT_1);
+ x &= VGA_GEN_IS1_VR | VGA_GEN_IS1_DE;
+ } while (x != (VGA_GEN_IS1_VR | VGA_GEN_IS1_DE));
+
+ /* Now, disable the sync. signals. */
+ REG_WRITE1(sc, VGA_CRTC_ADDRESS, VGA_CRTC_MODE_CONTROL);
+ x = REG_READ1(sc, VGA_CRTC_DATA);
+ REG_WRITE1(sc, VGA_CRTC_DATA, x & ~VGA_CRTC_MC_HR);
+
+ /* Asynchronous sequencer reset. */
+ REG_WRITE1(sc, VGA_SEQ_ADDRESS, VGA_SEQ_RESET);
+ REG_WRITE1(sc, VGA_SEQ_DATA, VGA_SEQ_RST_SR);
+
+ if (!textmode)
+ vga_initialize_graphics(vd);
+
+ REG_WRITE1(sc, VGA_CRTC_ADDRESS, VGA_CRTC_PRESET_ROW_SCAN);
+ REG_WRITE1(sc, VGA_CRTC_DATA, 0);
+ REG_WRITE1(sc, VGA_CRTC_ADDRESS, VGA_CRTC_CURSOR_START);
+ REG_WRITE1(sc, VGA_CRTC_DATA, VGA_CRTC_CS_COO);
+ REG_WRITE1(sc, VGA_CRTC_ADDRESS, VGA_CRTC_CURSOR_END);
+ REG_WRITE1(sc, VGA_CRTC_DATA, 0);
+ REG_WRITE1(sc, VGA_CRTC_ADDRESS, VGA_CRTC_START_ADDR_HIGH);
+ REG_WRITE1(sc, VGA_CRTC_DATA, 0);
+ REG_WRITE1(sc, VGA_CRTC_ADDRESS, VGA_CRTC_START_ADDR_LOW);
+ REG_WRITE1(sc, VGA_CRTC_DATA, 0);
+ REG_WRITE1(sc, VGA_CRTC_ADDRESS, VGA_CRTC_CURSOR_LOC_HIGH);
+ REG_WRITE1(sc, VGA_CRTC_DATA, 0);
+ REG_WRITE1(sc, VGA_CRTC_ADDRESS, VGA_CRTC_CURSOR_LOC_LOW);
+ REG_WRITE1(sc, VGA_CRTC_DATA, 0x59);
+ REG_WRITE1(sc, VGA_CRTC_ADDRESS, VGA_CRTC_UNDERLINE_LOC);
+ REG_WRITE1(sc, VGA_CRTC_DATA, VGA_CRTC_UL_UL);
+
+ if (textmode) {
+ /* Set the attribute controller to blink disable. */
+ REG_WRITE1(sc, VGA_AC_WRITE, VGA_AC_MODE_CONTROL);
+ REG_WRITE1(sc, VGA_AC_WRITE, 0);
+ } else {
+ /* Set the attribute controller in graphics mode. */
+ REG_WRITE1(sc, VGA_AC_WRITE, VGA_AC_MODE_CONTROL);
+ REG_WRITE1(sc, VGA_AC_WRITE, VGA_AC_MC_GA);
+ REG_WRITE1(sc, VGA_AC_WRITE, VGA_AC_HORIZ_PIXEL_PANNING);
+ REG_WRITE1(sc, VGA_AC_WRITE, 0);
+ }
+ REG_WRITE1(sc, VGA_AC_WRITE, VGA_AC_PALETTE(0));
+ REG_WRITE1(sc, VGA_AC_WRITE, 0);
+ REG_WRITE1(sc, VGA_AC_WRITE, VGA_AC_PALETTE(1));
+ REG_WRITE1(sc, VGA_AC_WRITE, VGA_AC_PAL_R);
+ REG_WRITE1(sc, VGA_AC_WRITE, VGA_AC_PALETTE(2));
+ REG_WRITE1(sc, VGA_AC_WRITE, VGA_AC_PAL_G);
+ REG_WRITE1(sc, VGA_AC_WRITE, VGA_AC_PALETTE(3));
+ REG_WRITE1(sc, VGA_AC_WRITE, VGA_AC_PAL_SG | VGA_AC_PAL_R);
+ REG_WRITE1(sc, VGA_AC_WRITE, VGA_AC_PALETTE(4));
+ REG_WRITE1(sc, VGA_AC_WRITE, VGA_AC_PAL_B);
+ REG_WRITE1(sc, VGA_AC_WRITE, VGA_AC_PALETTE(5));
+ REG_WRITE1(sc, VGA_AC_WRITE, VGA_AC_PAL_R | VGA_AC_PAL_B);
+ REG_WRITE1(sc, VGA_AC_WRITE, VGA_AC_PALETTE(6));
+ REG_WRITE1(sc, VGA_AC_WRITE, VGA_AC_PAL_G | VGA_AC_PAL_B);
+ REG_WRITE1(sc, VGA_AC_WRITE, VGA_AC_PALETTE(7));
+ REG_WRITE1(sc, VGA_AC_WRITE, VGA_AC_PAL_R | VGA_AC_PAL_G | VGA_AC_PAL_B);
+ REG_WRITE1(sc, VGA_AC_WRITE, VGA_AC_PALETTE(8));
+ REG_WRITE1(sc, VGA_AC_WRITE, VGA_AC_PAL_SR | VGA_AC_PAL_SG |
+ VGA_AC_PAL_SB);
+ REG_WRITE1(sc, VGA_AC_WRITE, VGA_AC_PALETTE(9));
+ REG_WRITE1(sc, VGA_AC_WRITE, VGA_AC_PAL_SR | VGA_AC_PAL_SG |
+ VGA_AC_PAL_SB | VGA_AC_PAL_R);
+ REG_WRITE1(sc, VGA_AC_WRITE, VGA_AC_PALETTE(10));
+ REG_WRITE1(sc, VGA_AC_WRITE, VGA_AC_PAL_SR | VGA_AC_PAL_SG |
+ VGA_AC_PAL_SB | VGA_AC_PAL_G);
+ REG_WRITE1(sc, VGA_AC_WRITE, VGA_AC_PALETTE(11));
+ REG_WRITE1(sc, VGA_AC_WRITE, VGA_AC_PAL_SR | VGA_AC_PAL_SG |
+ VGA_AC_PAL_SB | VGA_AC_PAL_R | VGA_AC_PAL_G);
+ REG_WRITE1(sc, VGA_AC_WRITE, VGA_AC_PALETTE(12));
+ REG_WRITE1(sc, VGA_AC_WRITE, VGA_AC_PAL_SR | VGA_AC_PAL_SG |
+ VGA_AC_PAL_SB | VGA_AC_PAL_B);
+ REG_WRITE1(sc, VGA_AC_WRITE, VGA_AC_PALETTE(13));
+ REG_WRITE1(sc, VGA_AC_WRITE, VGA_AC_PAL_SR | VGA_AC_PAL_SG |
+ VGA_AC_PAL_SB | VGA_AC_PAL_R | VGA_AC_PAL_B);
+ REG_WRITE1(sc, VGA_AC_WRITE, VGA_AC_PALETTE(14));
+ REG_WRITE1(sc, VGA_AC_WRITE, VGA_AC_PAL_SR | VGA_AC_PAL_SG |
+ VGA_AC_PAL_SB | VGA_AC_PAL_G | VGA_AC_PAL_B);
+ REG_WRITE1(sc, VGA_AC_WRITE, VGA_AC_PALETTE(15));
+ REG_WRITE1(sc, VGA_AC_WRITE, VGA_AC_PAL_SR | VGA_AC_PAL_SG |
+ VGA_AC_PAL_SB | VGA_AC_PAL_R | VGA_AC_PAL_G | VGA_AC_PAL_B);
+ REG_WRITE1(sc, VGA_AC_WRITE, VGA_AC_OVERSCAN_COLOR);
+ REG_WRITE1(sc, VGA_AC_WRITE, 0);
+ REG_WRITE1(sc, VGA_AC_WRITE, VGA_AC_COLOR_PLANE_ENABLE);
+ REG_WRITE1(sc, VGA_AC_WRITE, 0x0f);
+ REG_WRITE1(sc, VGA_AC_WRITE, VGA_AC_COLOR_SELECT);
+ REG_WRITE1(sc, VGA_AC_WRITE, 0);
+
+ if (!textmode) {
+ u_int ofs;
+
+ /*
+ * Done. Clear the frame buffer. All bit planes are
+ * enabled, so a single-paged loop should clear all
+ * planes.
+ */
+ for (ofs = 0; ofs < VT_VGA_MEMSIZE; ofs++) {
+ MEM_WRITE1(sc, ofs, 0);
+ }
+ }
+
+ /* Re-enable the sequencer. */
+ REG_WRITE1(sc, VGA_SEQ_ADDRESS, VGA_SEQ_RESET);
+ REG_WRITE1(sc, VGA_SEQ_DATA, VGA_SEQ_RST_SR | VGA_SEQ_RST_NAR);
+ /* Re-enable the sync signals. */
+ REG_WRITE1(sc, VGA_CRTC_ADDRESS, VGA_CRTC_MODE_CONTROL);
+ x = REG_READ1(sc, VGA_CRTC_DATA);
+ REG_WRITE1(sc, VGA_CRTC_DATA, x | VGA_CRTC_MC_HR);
+
+ if (!textmode) {
+ /* Switch to write mode 3, because we'll mainly do bitblt. */
+ REG_WRITE1(sc, VGA_GC_ADDRESS, VGA_GC_MODE);
+ REG_WRITE1(sc, VGA_GC_DATA, 3);
+ sc->vga_wmode = 3;
+
+ /*
+ * In Write Mode 3, Enable Set/Reset is ignored, but we
+ * use Write Mode 0 to write a group of 8 pixels using
+ * 3 or more colors. In this case, we want to disable
+ * Set/Reset: set Enable Set/Reset to 0.
+ */
+ REG_WRITE1(sc, VGA_GC_ADDRESS, VGA_GC_ENABLE_SET_RESET);
+ REG_WRITE1(sc, VGA_GC_DATA, 0x00);
+
+ /*
+ * Clear the colors we think are loaded into Set/Reset or
+ * the latches.
+ */
+ sc->vga_curfg = sc->vga_curbg = 0xff;
+ }
+}
+
+static int
+vga_probe(struct vt_device *vd)
+{
+
+ return (CN_INTERNAL);
+}
+
+static int
+vga_init(struct vt_device *vd)
+{
+ struct vga_softc *sc;
+ int textmode;
+
+ if (vd->vd_softc == NULL)
+ vd->vd_softc = (void *)&vga_conssoftc;
+ sc = vd->vd_softc;
+
+#if defined(__amd64__) || defined(__i386__)
+ sc->vga_fb_tag = X86_BUS_SPACE_MEM;
+ sc->vga_reg_tag = X86_BUS_SPACE_IO;
+#elif defined(__ia64__)
+ sc->vga_fb_tag = IA64_BUS_SPACE_MEM;
+ sc->vga_fb_handle = IA64_PHYS_TO_RR6(VGA_MEM_BASE);
+ sc->vga_reg_tag = IA64_BUS_SPACE_IO;
+ sc->vga_reg_handle = VGA_REG_BASE;
+#else
+# error "Architecture not yet supported!"
+#endif
+
+ bus_space_map(sc->vga_reg_tag, VGA_REG_BASE, VGA_REG_SIZE, 0,
+ &sc->vga_reg_handle);
+
+ /*
+ * If "hw.vga.textmode" is not set and we're running on hypervisor,
+ * we use text mode by default, this is because when we're on
+ * hypervisor, vt(4) is usually much slower in graphics mode than
+ * in text mode, especially when we're on Hyper-V.
+ */
+ textmode = vm_guest != VM_GUEST_NO;
+ TUNABLE_INT_FETCH("hw.vga.textmode", &textmode);
+ if (textmode) {
+ vd->vd_flags |= VDF_TEXTMODE;
+ vd->vd_width = 80;
+ vd->vd_height = 25;
+ bus_space_map(sc->vga_fb_tag, VGA_TXT_BASE, VGA_TXT_SIZE, 0,
+ &sc->vga_fb_handle);
+ } else {
+ vd->vd_width = VT_VGA_WIDTH;
+ vd->vd_height = VT_VGA_HEIGHT;
+ bus_space_map(sc->vga_fb_tag, VGA_MEM_BASE, VGA_MEM_SIZE, 0,
+ &sc->vga_fb_handle);
+ }
+ vga_initialize(vd, textmode);
+
+ return (CN_INTERNAL);
+}
+
+static void
+vga_postswitch(struct vt_device *vd)
+{
+
+ /* Reinit VGA mode, to restore view after app which change mode. */
+ vga_initialize(vd, (vd->vd_flags & VDF_TEXTMODE));
+ /* Ask vt(9) to update chars on visible area. */
+ vd->vd_flags |= VDF_INVALID;
+}
Property changes on: trunk/sys/dev/vt/hw/vga/vt_vga.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/dev/vt/hw/vga/vt_vga_reg.h
===================================================================
--- trunk/sys/dev/vt/hw/vga/vt_vga_reg.h (rev 0)
+++ trunk/sys/dev/vt/hw/vga/vt_vga_reg.h 2018-05-27 22:31:43 UTC (rev 10041)
@@ -0,0 +1,223 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 2005 Marcel Moolenaar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD: stable/10/sys/dev/vt/hw/vga/vt_vga_reg.h 287126 2015-08-25 14:39:40Z marcel $
+ */
+
+#ifndef _DEV_VT_HW_VGA_VGA_REG_H_
+#define _DEV_VT_HW_VGA_VGA_REG_H_
+
+/*
+ * The VGA adapter uses two I/O port blocks. One of these blocks, the CRT
+ * controller registers, can be located either at 0x3B0 or at 0x3D0 in I/O
+ * port space. This allows compatibility with the monochrome adapter, which
+ * has the CRT controller registers at 0x3B0.
+ *
+ * It is assumed that compatibility with the monochrome adapter is not of
+ * interest anymore. As such, the CRT controller can be located at 0x3D0 in
+ * I/O port space unconditionally. This means that the 2 I/O blocks are
+ * always adjacent and can therefore be treated as a single logical I/O port
+ * range. In practical terms: there only has to be a single tag and handle
+ * to access all registers.
+ *
+ * The following definitions are taken from or inspired by:
+ * Programmer's Guide to the EGA, VGA, and Super VGA Cards -- 3rd ed.,
+ * Richard F. Ferraro, Addison-Wesley, ISBN 0-201-62490-7
+ */
+
+#define VGA_MEM_BASE 0xA0000
+#define VGA_MEM_SIZE 0x10000
+#define VGA_TXT_BASE 0xB8000
+#define VGA_TXT_SIZE 0x08000
+#define VGA_REG_BASE 0x3c0
+#define VGA_REG_SIZE 0x10+0x0c
+
+/* Attribute controller registers. */
+#define VGA_AC_WRITE 0x00
+#define VGA_AC_READ 0x01
+#define VGA_AC_PALETTE(x) (x) /* 0 <= x <= 15 */
+#define VGA_AC_PAL_SR 0x20 /* Secondary red */
+#define VGA_AC_PAL_SG 0x10 /* Secondary green */
+#define VGA_AC_PAL_SB 0x08 /* Secondary blue */
+#define VGA_AC_PAL_R 0x04 /* Red */
+#define VGA_AC_PAL_G 0x02 /* Green */
+#define VGA_AC_PAL_B 0x01 /* Blue */
+#define VGA_AC_MODE_CONTROL (32+16)
+#define VGA_AC_MC_IPS 0x80 /* Internal palette size */
+#define VGA_AC_MC_PCS 0x40 /* Pixel clock select */
+#define VGA_AC_MC_PPC 0x20 /* Pixel panning compat. */
+#define VGA_AC_MC_BI 0x08 /* Blink/intensity */
+#define VGA_AC_MC_ELG 0x04 /* Enable line graphics cc. */
+#define VGA_AC_MC_DT 0x02 /* Display type */
+#define VGA_AC_MC_GA 0x01 /* Graphics/alphanumeric */
+#define VGA_AC_OVERSCAN_COLOR (32+17)
+#define VGA_AC_COLOR_PLANE_ENABLE (32+18)
+#define VGA_AC_HORIZ_PIXEL_PANNING (32+19)
+#define VGA_AC_COLOR_SELECT (32+20)
+#define VGA_AC_CS_C67 0x0C /* Color reg. addr. bits 6+7 */
+#define VGA_AC_CS_C45 0x03 /* Color reg. addr. bits 4+5 */
+
+/* General registers. */
+#define VGA_GEN_MISC_OUTPUT_W 0x02 /* Write only. */
+#define VGA_GEN_MISC_OUTPUT_R 0x0c /* Read only. */
+#define VGA_GEN_MO_VSP 0x80 /* Vertical sync. polarity */
+#define VGA_GEN_MO_HSP 0x40 /* Horiz. sync. polarity */
+#define VGA_GEN_MO_PB 0x20 /* Page bit for odd/even */
+#define VGA_GEN_MO_CS 0x0C /* Clock select */
+#define VGA_GEN_MO_ER 0x02 /* Enable RAM */
+#define VGA_GEN_MO_IOA 0x01 /* Input/output address */
+#define VGA_GEN_INPUT_STAT_0 0x02 /* Read only. */
+#define VGA_GEN_FEATURE_CTRL_W 0x1a /* Write only. */
+#define VGA_GEN_FEATURE_CTRL_R 0x0a /* Read only. */
+#define VGA_GEN_INPUT_STAT_1 0x1a /* Read only. */
+#define VGA_GEN_IS1_VR 0x08 /* Vertical retrace */
+#define VGA_GEN_IS1_DE 0x01 /* Display enable not */
+
+/* Sequencer registers. */
+#define VGA_SEQ_ADDRESS 0x04
+#define VGA_SEQ_RESET 0
+#define VGA_SEQ_RST_SR 0x02 /* Synchronous reset */
+#define VGA_SEQ_RST_NAR 0x01 /* No async. reset */
+#define VGA_SEQ_CLOCKING_MODE 1
+#define VGA_SEQ_CM_SO 0x20 /* Screen off */
+#define VGA_SEQ_CM_S4 0x10 /* Shift four */
+#define VGA_SEQ_CM_DC 0x08 /* Dot clock */
+#define VGA_SEQ_CM_SL 0x04 /* Shift load */
+#define VGA_SEQ_CM_89 0x01 /* 8/9 Dot clocks */
+#define VGA_SEQ_MAP_MASK 2
+#define VGA_SEQ_MM_EM3 0x08 /* Enable memory plane 3 */
+#define VGA_SEQ_MM_EM2 0x04 /* Enable memory plane 2 */
+#define VGA_SEQ_MM_EM1 0x02 /* Enable memory plane 1 */
+#define VGA_SEQ_MM_EM0 0x01 /* Enable memory plane 0 */
+#define VGA_SEQ_CHAR_MAP_SELECT 3
+#define VGA_SEQ_CMS_SAH 0x20 /* Char. A (bit 2) */
+#define VGA_SEQ_CMS_SBH 0x10 /* Char. B (bit 2) */
+#define VGA_SEQ_CMS_SA 0x0C /* Char. A (bit 0+1) */
+#define VGA_SEQ_CMS_SB 0x03 /* Char. B (bit 0+1) */
+#define VGA_SEQ_MEMORY_MODE 4
+#define VGA_SEQ_MM_C4 0x08 /* Chain four */
+#define VGA_SEQ_MM_OE 0x04 /* Odd/even */
+#define VGA_SEQ_MM_EM 0x02 /* Extended memory */
+#define VGA_SEQ_DATA 0x05
+
+/* Color registers. */
+#define VGA_PEL_MASK 0x06
+#define VGA_PEL_ADDR_RD_MODE 0x07 /* Write only. */
+#define VGA_DAC_STATE 0x07 /* Read only. */
+#define VGA_PEL_ADDR_WR_MODE 0x08
+#define VGA_PEL_DATA 0x09
+
+/* Graphics controller registers. */
+#define VGA_GC_ADDRESS 0x0e
+#define VGA_GC_SET_RESET 0
+#define VGA_GC_ENABLE_SET_RESET 1
+#define VGA_GC_COLOR_COMPARE 2
+#define VGA_GC_DATA_ROTATE 3
+#define VGA_GC_DR_FS_XOR 0x18 /* Function select - XOR */
+#define VGA_GC_DR_FS_OR 0x10 /* Function select - OR */
+#define VGA_GC_DR_FS_AND 0x08 /* Function select - AND */
+#define VGA_GC_DR_RC 0x07 /* Rotate count */
+#define VGA_GC_READ_MAP_SELECT 4
+#define VGA_GC_MODE 5
+#define VGA_GC_MODE_SR 0x60 /* Shift register */
+#define VGA_GC_MODE_OE 0x10 /* Odd/even */
+#define VGA_GC_MODE_RM 0x08 /* Read mode */
+#define VGA_GC_MODE_WM 0x03 /* Write mode */
+#define VGA_GC_MISCELLANEOUS 6
+#define VGA_GC_MISC_MM 0x0C /* memory map */
+#define VGA_GC_MISC_COE 0x02 /* Chain odd/even */
+#define VGA_GC_MISC_GA 0x01 /* Graphics/text mode */
+#define VGA_GC_COLOR_DONT_CARE 7
+#define VGA_GC_BIT_MASK 8
+#define VGA_GC_DATA 0x0f
+
+/* CRT controller registers. */
+#define VGA_CRTC_ADDRESS 0x14
+#define VGA_CRTC_HORIZ_TOTAL 0
+#define VGA_CRTC_HORIZ_DISP_END 1
+#define VGA_CRTC_START_HORIZ_BLANK 2
+#define VGA_CRTC_END_HORIZ_BLANK 3
+#define VGA_CRTC_EHB_CR 0x80 /* Compatible read */
+#define VGA_CRTC_EHB_DES 0x60 /* Display enable skew */
+#define VGA_CRTC_EHB_EHB 0x1F /* End horizontal blank */
+#define VGA_CRTC_START_HORIZ_RETRACE 4
+#define VGA_CRTC_END_HORIZ_RETRACE 5
+#define VGA_CRTC_EHR_EHB 0x80 /* End horizontal blanking */
+#define VGA_CRTC_EHR_HRD 0x60 /* Horizontal retrace delay */
+#define VGA_CRTC_EHR_EHR 0x1F /* End horizontal retrace */
+#define VGA_CRTC_VERT_TOTAL 6
+#define VGA_CRTC_OVERFLOW 7
+#define VGA_CRTC_OF_VRS9 0x80 /* Vertical retrace start */
+#define VGA_CRTC_OF_VDE9 0x40 /* Vertical disp. enable end */
+#define VGA_CRTC_OF_VT9 0x20 /* Vertical total (bit 9) */
+#define VGA_CRTC_OF_LC8 0x10 /* Line compare */
+#define VGA_CRTC_OF_VBS8 0x08 /* Start vertical blanking */
+#define VGA_CRTC_OF_VRS8 0x04 /* Vertical retrace start */
+#define VGA_CRTC_OF_VDE8 0x02 /* Vertical disp. enable end */
+#define VGA_CRTC_OF_VT8 0x01 /* Vertical total (bit 8) */
+#define VGA_CRTC_PRESET_ROW_SCAN 8
+#define VGA_CRTC_PRS_BP 0x60 /* Byte panning */
+#define VGA_CRTC_PRS_PRS 0x1F /* Preset row scan */
+#define VGA_CRTC_MAX_SCAN_LINE 9
+#define VGA_CRTC_MSL_2T4 0x80 /* 200-to-400 line conversion */
+#define VGA_CRTC_MSL_LC9 0x40 /* Line compare (bit 9) */
+#define VGA_CRTC_MSL_VBS9 0x20 /* Start vertical blanking */
+#define VGA_CRTC_MSL_MSL 0x1F /* Maximum scan line */
+#define VGA_CRTC_CURSOR_START 10
+#define VGA_CRTC_CS_COO 0x20 /* Cursor on/off */
+#define VGA_CRTC_CS_CS 0x1F /* Cursor start */
+#define VGA_CRTC_CURSOR_END 11
+#define VGA_CRTC_CE_CSK 0x60 /* Cursor skew */
+#define VGA_CRTC_CE_CE 0x1F /* Cursor end */
+#define VGA_CRTC_START_ADDR_HIGH 12
+#define VGA_CRTC_START_ADDR_LOW 13
+#define VGA_CRTC_CURSOR_LOC_HIGH 14
+#define VGA_CRTC_CURSOR_LOC_LOW 15
+#define VGA_CRTC_VERT_RETRACE_START 16
+#define VGA_CRTC_VERT_RETRACE_END 17
+#define VGA_CRTC_VRE_PR 0x80 /* Protect register 0-7 */
+#define VGA_CRTC_VRE_BW 0x40 /* Bandwidth */
+#define VGA_CRTC_VRE_VRE 0x1F /* Vertical retrace end */
+#define VGA_CRTC_VERT_DISPLAY_END 18
+#define VGA_CRTC_OFFSET 19
+#define VGA_CRTC_UNDERLINE_LOC 20
+#define VGA_CRTC_UL_DW 0x40 /* Double word mode */
+#define VGA_CRTC_UL_CB4 0x20 /* Count by four */
+#define VGA_CRTC_UL_UL 0x1F /* Underline location */
+#define VGA_CRTC_START_VERT_BLANK 21
+#define VGA_CRTC_END_VERT_BLANK 22
+#define VGA_CRTC_MODE_CONTROL 23
+#define VGA_CRTC_MC_HR 0x80 /* hardware reset */
+#define VGA_CRTC_MC_WB 0x40 /* Word/byte mode */
+#define VGA_CRTC_MC_AW 0x20 /* Address wrap */
+#define VGA_CRTC_MC_CBT 0x08 /* Count by two */
+#define VGA_CRTC_MC_HRS 0x04 /* Horizontal retrace select */
+#define VGA_CRTC_MC_SRS 0x02 /* Select row scan counter */
+#define VGA_CRTC_MC_CMS 0x01 /* Compatibility mode support */
+#define VGA_CRTC_LINE_COMPARE 24
+#define VGA_CRTC_DATA 0x15
+
+#endif /* !_DEV_VT_HW_VGA_VGA_REG_H_ */
Property changes on: trunk/sys/dev/vt/hw/vga/vt_vga_reg.h
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/dev/vt/logo/logo_freebsd.c
===================================================================
--- trunk/sys/dev/vt/logo/logo_freebsd.c (rev 0)
+++ trunk/sys/dev/vt/logo/logo_freebsd.c 2018-05-27 22:31:43 UTC (rev 10041)
@@ -0,0 +1,642 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 2009 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by Ed Schouten under sponsorship from the
+ * FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: stable/10/sys/dev/vt/logo/logo_freebsd.c 271952 2014-09-22 10:21:08Z ray $");
+
+unsigned int vt_logo_width = 257;
+unsigned int vt_logo_height = 219;
+unsigned int vt_logo_depth = 1;
+
+unsigned char vt_logo_image[] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x07, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0f, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xfe,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7f, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xc0, 0x00, 0x00,
+ 0x00, 0x00, 0x07, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff,
+ 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0xff,
+ 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xc0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x3f, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff,
+ 0xf0, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff,
+ 0xff, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00,
+ 0x01, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xc0, 0x00,
+ 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x07, 0xff, 0xff,
+ 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x0f, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xe0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xfe, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff,
+ 0xff, 0xfe, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,
+ 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xfc, 0x07,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0xff, 0xff, 0xff,
+ 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1f, 0xff, 0xff, 0xff, 0xe0, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xfc, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff,
+ 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x7f,
+ 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0x81, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x01, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xfe, 0x07, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf8, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0f, 0xff, 0xff, 0xfc, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xf0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff,
+ 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x1f, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xf0, 0x7f, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x3f, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xe0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x03, 0xff, 0xff, 0xc1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff,
+ 0x83, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0x07, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0xff, 0xfe, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0xff, 0xfc, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xf8,
+ 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xf8, 0x7f, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7f, 0xe1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xf8, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x7f, 0xff,
+ 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x83, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x7f, 0xff, 0xff, 0xff, 0xff,
+ 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x1f, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfe, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x0f,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff,
+ 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x1f, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xc7, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xff,
+ 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0xfc,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xfc, 0x7f, 0xff, 0xff, 0xf1, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x3f,
+ 0xff, 0xff, 0xf3, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x1f, 0xff, 0xff, 0xe3,
+ 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xc7, 0xc0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xc7, 0xff, 0xff, 0xc7, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe1,
+ 0xff, 0xff, 0x8f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xff, 0x0f,
+ 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x3f, 0xff, 0x07, 0xf0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfc, 0x0f, 0xfe, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x01, 0xf8, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x07,
+ 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x07, 0xfc, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf0, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfc, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x1f,
+ 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x7f, 0xfe, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f,
+ 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xc0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff,
+ 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x7f, 0x80, 0x00, 0x00, 0x00,
+ 0x01, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xc0, 0x00, 0x07,
+ 0xff, 0xf0, 0x00, 0x01, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff,
+ 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xe0, 0x00, 0x0f, 0xff, 0xfe, 0x00,
+ 0x07, 0xff, 0xff, 0x80, 0x00, 0x00, 0x07, 0xff, 0xff, 0xf0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x07, 0xff, 0xff, 0xf8, 0x00, 0x3f, 0xff, 0xff, 0x80, 0x0f, 0xff, 0xff,
+ 0xe0, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf8, 0x1f,
+ 0xf8, 0x00, 0x7f, 0xff, 0xff, 0xc0, 0x1f, 0xff, 0xff, 0xf8, 0x00, 0x00,
+ 0x1f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xc0, 0x03, 0xfc, 0x00, 0xff,
+ 0xe0, 0xff, 0xc0, 0x1f, 0x80, 0x0f, 0xfc, 0x00, 0x00, 0x3f, 0x80, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x3f, 0x80, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x1f, 0xc0,
+ 0x1f, 0x00, 0x01, 0xff, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x3f, 0x00, 0x00, 0x7e, 0x01, 0xfc, 0x00, 0x07, 0x80, 0x3e, 0x00, 0x00,
+ 0x7f, 0x80, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00,
+ 0x3f, 0x01, 0xf8, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x1f, 0xc0, 0x00,
+ 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x3f, 0x03, 0xf0,
+ 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x7c, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x1f, 0x03, 0xe0, 0x00, 0x00, 0x00,
+ 0x3e, 0x00, 0x00, 0x07, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xfc, 0x00, 0x00, 0x1f, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00,
+ 0x03, 0xf0, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00,
+ 0x1f, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0xf8, 0x00,
+ 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x1f, 0x03, 0xe0,
+ 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0x00,
+ 0x00, 0x07, 0xfc, 0x00, 0x00, 0x03, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x7f,
+ 0xc0, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x1f, 0x03, 0xe0, 0x00, 0x00, 0x00,
+ 0x3e, 0x00, 0x00, 0x00, 0x7c, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x1f, 0xff,
+ 0x00, 0x00, 0x1f, 0xff, 0xc0, 0x00, 0x00, 0x03, 0xff, 0xf8, 0x00, 0x00,
+ 0xf8, 0x00, 0x00, 0x1f, 0x03, 0xf0, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00,
+ 0x00, 0x7e, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x00, 0x7f,
+ 0xff, 0xf0, 0x00, 0x00, 0x0f, 0xff, 0xfe, 0x00, 0x00, 0xf8, 0x00, 0x00,
+ 0x3f, 0x03, 0xf0, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x3e, 0x00,
+ 0xfc, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe0, 0x01, 0xff, 0xff, 0xfc, 0x00,
+ 0x00, 0x1f, 0xff, 0xff, 0x80, 0x00, 0xf8, 0x00, 0x00, 0x3f, 0x03, 0xf8,
+ 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xfc, 0x00, 0x00,
+ 0x01, 0xff, 0xff, 0xf0, 0x03, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x7f, 0xff,
+ 0xff, 0xc0, 0x00, 0xf8, 0x00, 0x00, 0x7e, 0x01, 0xfc, 0x00, 0x00, 0x00,
+ 0x3e, 0x00, 0x00, 0x00, 0x1f, 0x00, 0xfc, 0x00, 0x00, 0x03, 0xfc, 0x07,
+ 0xf8, 0x07, 0xfe, 0x03, 0xff, 0x00, 0x00, 0xff, 0xc0, 0x3f, 0xe0, 0x00,
+ 0xfc, 0x00, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00,
+ 0x00, 0x1f, 0x00, 0xfc, 0x00, 0x00, 0x07, 0xf0, 0x01, 0xf8, 0x0f, 0xf0,
+ 0x00, 0x7f, 0x80, 0x01, 0xfe, 0x00, 0x0f, 0xf0, 0x00, 0xfc, 0x00, 0x01,
+ 0xfc, 0x00, 0xff, 0x80, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x1f, 0x00,
+ 0xfc, 0x00, 0x00, 0x07, 0xe0, 0x00, 0xf8, 0x1f, 0xc0, 0x00, 0x3f, 0xc0,
+ 0x03, 0xfc, 0x00, 0x03, 0xf8, 0x00, 0xfe, 0x00, 0x0f, 0xfc, 0x00, 0x7f,
+ 0xe0, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x0f, 0x00, 0xfe, 0x00, 0x00,
+ 0x0f, 0xc0, 0x00, 0x78, 0x1f, 0x80, 0x00, 0x0f, 0xc0, 0x03, 0xf0, 0x00,
+ 0x01, 0xfc, 0x00, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x3f, 0xf0, 0x00, 0x00,
+ 0x3e, 0x00, 0x00, 0x00, 0x0f, 0x80, 0xff, 0x00, 0x00, 0x0f, 0x80, 0x00,
+ 0x00, 0x3f, 0x00, 0x00, 0x07, 0xe0, 0x07, 0xe0, 0x00, 0x00, 0xfc, 0x00,
+ 0xff, 0xff, 0xff, 0xfc, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x3e, 0x00, 0x00,
+ 0x00, 0x0f, 0x80, 0xff, 0xff, 0xfc, 0x0f, 0x80, 0x00, 0x00, 0x7e, 0x00,
+ 0x00, 0x03, 0xf0, 0x07, 0xe0, 0x00, 0x00, 0x7e, 0x00, 0xff, 0xff, 0xff,
+ 0xff, 0x00, 0x07, 0xff, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x0f, 0x80,
+ 0xff, 0xff, 0xfc, 0x1f, 0x80, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x03, 0xf0,
+ 0x0f, 0xc0, 0x00, 0x00, 0x7e, 0x00, 0xff, 0xff, 0xff, 0xff, 0x80, 0x01,
+ 0xff, 0xc0, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x0f, 0x80, 0xff, 0xff, 0xfe,
+ 0x1f, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x01, 0xf0, 0x0f, 0x80, 0x00,
+ 0x00, 0x3e, 0x00, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x7f, 0xf0, 0x00,
+ 0x3e, 0x00, 0x00, 0x00, 0x0f, 0x80, 0xff, 0xff, 0xfc, 0x1f, 0x00, 0x00,
+ 0x00, 0xfc, 0x00, 0x00, 0x01, 0xf8, 0x1f, 0x80, 0x00, 0x00, 0x1f, 0x00,
+ 0xfc, 0x00, 0x00, 0x1f, 0xe0, 0x00, 0x1f, 0xfc, 0x00, 0x3e, 0x00, 0x00,
+ 0x00, 0x0f, 0x80, 0xff, 0xff, 0xf8, 0x1f, 0x00, 0x00, 0x00, 0xf8, 0x00,
+ 0x00, 0x00, 0xf8, 0x1f, 0x80, 0x00, 0x00, 0x1f, 0x00, 0xfc, 0x00, 0x00,
+ 0x07, 0xf0, 0x00, 0x07, 0xff, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x0f, 0x80,
+ 0xfe, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x01, 0xf8,
+ 0x1f, 0x80, 0x00, 0x00, 0x1f, 0x00, 0xf8, 0x00, 0x00, 0x03, 0xf8, 0x00,
+ 0x01, 0xff, 0x80, 0x3e, 0x00, 0x00, 0x00, 0x0f, 0x80, 0xfc, 0x00, 0x00,
+ 0x1f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff,
+ 0xff, 0xff, 0x80, 0xf8, 0x00, 0x00, 0x01, 0xf8, 0x00, 0x00, 0x7f, 0xc0,
+ 0x3e, 0x00, 0x00, 0x00, 0x0f, 0x00, 0xfc, 0x00, 0x00, 0x1f, 0x00, 0x00,
+ 0x01, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff, 0xff, 0xff, 0x80,
+ 0xf8, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x1f, 0xe0, 0x3e, 0x00, 0x00,
+ 0x00, 0x1f, 0x00, 0xfc, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x01, 0xff, 0xff,
+ 0xff, 0xff, 0xfc, 0x1f, 0xff, 0xff, 0xff, 0xff, 0x80, 0xf8, 0x00, 0x00,
+ 0x00, 0xfc, 0x00, 0x00, 0x0f, 0xf0, 0x3e, 0x00, 0x00, 0x00, 0x1f, 0x00,
+ 0xfc, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xf8,
+ 0x1f, 0xff, 0xff, 0xff, 0xff, 0x80, 0xf8, 0x00, 0x00, 0x00, 0x7c, 0x00,
+ 0x00, 0x03, 0xf8, 0x3e, 0x00, 0x00, 0x00, 0x1f, 0x00, 0xfc, 0x00, 0x00,
+ 0x1f, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x1f, 0xff, 0xff,
+ 0xff, 0xff, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x01, 0xf8,
+ 0x3e, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xfc, 0x00, 0x00, 0x1f, 0x00, 0x00,
+ 0x00, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x1f, 0xff, 0xff, 0xff, 0xfc, 0x00,
+ 0xf8, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0xfc, 0x3e, 0x00, 0x00,
+ 0x00, 0x3e, 0x00, 0xfc, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xfc, 0x00,
+ 0x00, 0x00, 0x00, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00,
+ 0x00, 0x7e, 0x00, 0x00, 0x00, 0xfc, 0x3e, 0x00, 0x00, 0x00, 0x7c, 0x00,
+ 0xfc, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00,
+ 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x7e, 0x00,
+ 0x00, 0x00, 0xfc, 0x3e, 0x00, 0x00, 0x00, 0x7c, 0x00, 0xfc, 0x00, 0x00,
+ 0x1f, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x80, 0x00,
+ 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0xfc,
+ 0x3e, 0x00, 0x00, 0x00, 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x1f, 0x00, 0x00,
+ 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0xf8, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0xfc, 0x3e, 0x00, 0x00,
+ 0x01, 0xf8, 0x00, 0xfc, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x7e, 0x00,
+ 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00,
+ 0x00, 0x7c, 0x00, 0x00, 0x00, 0xfc, 0x3e, 0x00, 0x00, 0x03, 0xf0, 0x00,
+ 0xfc, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00,
+ 0x07, 0xe0, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0xfc, 0x00,
+ 0x00, 0x00, 0xfc, 0x3e, 0x00, 0x00, 0x07, 0xe0, 0x00, 0xfc, 0x00, 0x00,
+ 0x1f, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x07, 0xe0, 0x00,
+ 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x01, 0xfc,
+ 0x3e, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0xfc, 0x00, 0x00, 0x1f, 0x00, 0x00,
+ 0x00, 0x1f, 0x80, 0x00, 0x0c, 0x00, 0x03, 0xf0, 0x00, 0x01, 0x80, 0x00,
+ 0xf8, 0x00, 0x00, 0x01, 0xf8, 0x70, 0x00, 0x03, 0xf8, 0x3e, 0x00, 0x00,
+ 0x1f, 0xc0, 0x00, 0xfc, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x1f, 0xc0,
+ 0x00, 0x3e, 0x00, 0x03, 0xfc, 0x00, 0x03, 0xc0, 0x00, 0xf8, 0x00, 0x00,
+ 0x03, 0xf8, 0xfc, 0x00, 0x07, 0xf8, 0x3f, 0x00, 0x00, 0x7f, 0x80, 0x00,
+ 0xfc, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x7e, 0x00,
+ 0x01, 0xfe, 0x00, 0x0f, 0xe0, 0x00, 0xf8, 0x00, 0x00, 0x07, 0xf0, 0xff,
+ 0x80, 0x0f, 0xf0, 0x3f, 0x00, 0x01, 0xff, 0x00, 0x00, 0xfc, 0x00, 0x00,
+ 0x1f, 0x00, 0x00, 0x00, 0x07, 0xfe, 0x03, 0xfe, 0x00, 0x00, 0xff, 0xc0,
+ 0x3f, 0xc0, 0x00, 0xf8, 0x00, 0x00, 0x3f, 0xe0, 0xff, 0xf8, 0x7f, 0xe0,
+ 0x3f, 0x80, 0x1f, 0xfc, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x1f, 0x00, 0x00,
+ 0x00, 0x03, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xc0, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xc0, 0x3f, 0xff, 0xff,
+ 0xf8, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x01, 0xff,
+ 0xff, 0xfc, 0x00, 0x00, 0x1f, 0xff, 0xff, 0x80, 0x00, 0xff, 0xff, 0xff,
+ 0xff, 0x80, 0x7f, 0xff, 0xff, 0x80, 0x3f, 0xff, 0xff, 0xe0, 0x00, 0x00,
+ 0xfc, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xf0, 0x00,
+ 0x00, 0x0f, 0xff, 0xfe, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x0f,
+ 0xff, 0xff, 0x00, 0x1f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x78, 0x00, 0x00,
+ 0x1f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xc0, 0x00, 0x00, 0x03, 0xff,
+ 0xf8, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xfc, 0x00, 0x03, 0xff, 0xfc, 0x00,
+ 0x1f, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x0e, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc0, 0x00, 0x00,
+ 0x3f, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x3f, 0xe0, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00,
+};
Property changes on: trunk/sys/dev/vt/logo/logo_freebsd.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/dev/vt/vt.h
===================================================================
--- trunk/sys/dev/vt/vt.h (rev 0)
+++ trunk/sys/dev/vt/vt.h 2018-05-27 22:31:43 UTC (rev 10041)
@@ -0,0 +1,433 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 2009, 2013 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by Ed Schouten under sponsorship from the
+ * FreeBSD Foundation.
+ *
+ * Portions of this software were developed by Oleksandr Rybalko
+ * under sponsorship from the FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD: stable/10/sys/dev/vt/vt.h 321198 2017-07-19 13:11:35Z emaste $
+ */
+
+#ifndef _DEV_VT_VT_H_
+#define _DEV_VT_VT_H_
+
+#include <sys/param.h>
+#include <sys/_lock.h>
+#include <sys/_mutex.h>
+#include <sys/callout.h>
+#include <sys/condvar.h>
+#include <sys/conf.h>
+#include <sys/consio.h>
+#include <sys/kbio.h>
+#include <sys/mouse.h>
+#include <sys/terminal.h>
+#include <sys/sysctl.h>
+
+#include "opt_syscons.h"
+#include "opt_splash.h"
+
+#ifndef VT_MAXWINDOWS
+#ifdef MAXCONS
+#define VT_MAXWINDOWS MAXCONS
+#else
+#define VT_MAXWINDOWS 12
+#endif
+#endif
+
+#ifndef VT_ALT_TO_ESC_HACK
+#define VT_ALT_TO_ESC_HACK 1
+#endif
+
+#define VT_CONSWINDOW 0
+
+#if defined(SC_TWOBUTTON_MOUSE) || defined(VT_TWOBUTTON_MOUSE)
+#define VT_MOUSE_PASTEBUTTON MOUSE_BUTTON3DOWN /* right button */
+#define VT_MOUSE_EXTENDBUTTON MOUSE_BUTTON2DOWN /* not really used */
+#else
+#define VT_MOUSE_PASTEBUTTON MOUSE_BUTTON2DOWN /* middle button */
+#define VT_MOUSE_EXTENDBUTTON MOUSE_BUTTON3DOWN /* right button */
+#endif /* defined(SC_TWOBUTTON_MOUSE) || defined(VT_TWOBUTTON_MOUSE) */
+
+#define SC_DRIVER_NAME "vt"
+#ifdef VT_DEBUG
+#define DPRINTF(_l, ...) if (vt_debug > (_l)) printf( __VA_ARGS__ )
+#define VT_CONSOLECTL_DEBUG
+#define VT_SYSMOUSE_DEBUG
+#else
+#define DPRINTF(_l, ...) do {} while (0)
+#endif
+#define ISSIGVALID(sig) ((sig) > 0 && (sig) < NSIG)
+
+#define VT_SYSCTL_INT(_name, _default, _descr) \
+static int vt_##_name = (_default); \
+SYSCTL_INT(_kern_vt, OID_AUTO, _name, CTLFLAG_RWTUN, &vt_##_name, 0, \
+ _descr); \
+TUNABLE_INT("kern.vt." #_name, &vt_##_name)
+
+struct vt_driver;
+
+void vt_allocate(struct vt_driver *, void *);
+
+typedef unsigned int vt_axis_t;
+
+/*
+ * List of locks
+ * (d) locked by vd_lock
+ * (b) locked by vb_lock
+ * (G) locked by Giant
+ * (u) unlocked, locked by higher levels
+ * (c) const until freeing
+ * (?) yet to be determined
+ */
+
+/*
+ * Per-device datastructure.
+ */
+
+#ifndef SC_NO_CUTPASTE
+struct vt_mouse_cursor;
+#endif
+
+struct vt_pastebuf {
+ term_char_t *vpb_buf; /* Copy-paste buffer. */
+ unsigned int vpb_bufsz; /* Buffer size. */
+ unsigned int vpb_len; /* Length of a last selection. */
+};
+
+struct vt_device {
+ struct vt_window *vd_windows[VT_MAXWINDOWS]; /* (c) Windows. */
+ struct vt_window *vd_curwindow; /* (d) Current window. */
+ struct vt_window *vd_savedwindow;/* (?) Saved for suspend. */
+ struct vt_pastebuf vd_pastebuf; /* (?) Copy/paste buf. */
+ const struct vt_driver *vd_driver; /* (c) Graphics driver. */
+ void *vd_softc; /* (u) Driver data. */
+#ifndef SC_NO_CUTPASTE
+ struct vt_mouse_cursor *vd_mcursor; /* (?) Cursor bitmap. */
+ term_color_t vd_mcursor_fg; /* (?) Cursor fg color. */
+ term_color_t vd_mcursor_bg; /* (?) Cursor bg color. */
+ vt_axis_t vd_mx_drawn; /* (?) Mouse X and Y */
+ vt_axis_t vd_my_drawn; /* as of last redraw. */
+ int vd_mshown; /* (?) Mouse shown during */
+#endif /* last redrawn. */
+ uint16_t vd_mx; /* (?) Current mouse X. */
+ uint16_t vd_my; /* (?) current mouse Y. */
+ uint32_t vd_mstate; /* (?) Mouse state. */
+ vt_axis_t vd_width; /* (?) Screen width. */
+ vt_axis_t vd_height; /* (?) Screen height. */
+ size_t vd_transpose; /* (?) Screen offset in FB */
+ struct mtx vd_lock; /* Per-device lock. */
+ struct cv vd_winswitch; /* (d) Window switch notify. */
+ struct callout vd_timer; /* (d) Display timer. */
+ volatile unsigned int vd_timer_armed;/* (?) Display timer started.*/
+ int vd_flags; /* (d) Device flags. */
+#define VDF_TEXTMODE 0x01 /* Do text mode rendering. */
+#define VDF_SPLASH 0x02 /* Splash screen active. */
+#define VDF_ASYNC 0x04 /* vt_timer() running. */
+#define VDF_INVALID 0x08 /* Entire screen should be re-rendered. */
+#define VDF_DEAD 0x10 /* Early probing found nothing. */
+#define VDF_INITIALIZED 0x20 /* vtterm_cnprobe already done. */
+#define VDF_MOUSECURSOR 0x40 /* Mouse cursor visible. */
+#define VDF_QUIET_BELL 0x80 /* Disable bell. */
+ int vd_keyboard; /* (G) Keyboard index. */
+ unsigned int vd_kbstate; /* (?) Device unit. */
+ unsigned int vd_unit; /* (c) Device unit. */
+ int vd_altbrk; /* (?) Alt break seq. state */
+};
+
+#define VD_PASTEBUF(vd) ((vd)->vd_pastebuf.vpb_buf)
+#define VD_PASTEBUFSZ(vd) ((vd)->vd_pastebuf.vpb_bufsz)
+#define VD_PASTEBUFLEN(vd) ((vd)->vd_pastebuf.vpb_len)
+
+void vt_resume(struct vt_device *vd);
+void vt_suspend(struct vt_device *vd);
+
+/*
+ * Per-window terminal screen buffer.
+ *
+ * Because redrawing is performed asynchronously, the buffer keeps track
+ * of a rectangle that needs to be redrawn (vb_dirtyrect). Because this
+ * approach seemed to cause suboptimal performance (when the top left
+ * and the bottom right of the screen are modified), it also uses a set
+ * of bitmasks to keep track of the rows and columns (mod 64) that have
+ * been modified.
+ */
+
+struct vt_buf {
+ struct mtx vb_lock; /* Buffer lock. */
+ term_pos_t vb_scr_size; /* (b) Screen dimensions. */
+ int vb_flags; /* (b) Flags. */
+#define VBF_CURSOR 0x1 /* Cursor visible. */
+#define VBF_STATIC 0x2 /* Buffer is statically allocated. */
+#define VBF_MTX_INIT 0x4 /* Mutex initialized. */
+#define VBF_SCROLL 0x8 /* scroll locked mode. */
+#define VBF_HISTORY_FULL 0x10 /* All rows filled. */
+ unsigned int vb_history_size;
+ int vb_roffset; /* (b) History rows offset. */
+ int vb_curroffset; /* (b) Saved rows offset. */
+ term_pos_t vb_cursor; /* (u) Cursor position. */
+ term_pos_t vb_mark_start; /* (b) Copy region start. */
+ term_pos_t vb_mark_end; /* (b) Copy region end. */
+ int vb_mark_last; /* Last mouse event. */
+ term_rect_t vb_dirtyrect; /* (b) Dirty rectangle. */
+ term_char_t *vb_buffer; /* (u) Data buffer. */
+ term_char_t **vb_rows; /* (u) Array of rows */
+};
+
+#ifdef SC_HISTORY_SIZE
+#define VBF_DEFAULT_HISTORY_SIZE SC_HISTORY_SIZE
+#else
+#define VBF_DEFAULT_HISTORY_SIZE 500
+#endif
+
+void vtbuf_copy(struct vt_buf *, const term_rect_t *, const term_pos_t *);
+void vtbuf_fill_locked(struct vt_buf *, const term_rect_t *, term_char_t);
+void vtbuf_init_early(struct vt_buf *);
+void vtbuf_init(struct vt_buf *, const term_pos_t *);
+void vtbuf_grow(struct vt_buf *, const term_pos_t *, unsigned int);
+void vtbuf_putchar(struct vt_buf *, const term_pos_t *, term_char_t);
+void vtbuf_cursor_position(struct vt_buf *, const term_pos_t *);
+void vtbuf_scroll_mode(struct vt_buf *vb, int yes);
+void vtbuf_dirty(struct vt_buf *vb, const term_rect_t *area);
+void vtbuf_undirty(struct vt_buf *, term_rect_t *);
+void vtbuf_sethistory_size(struct vt_buf *, int);
+int vtbuf_iscursor(const struct vt_buf *vb, int row, int col);
+void vtbuf_cursor_visibility(struct vt_buf *, int);
+#ifndef SC_NO_CUTPASTE
+int vtbuf_set_mark(struct vt_buf *vb, int type, int col, int row);
+int vtbuf_get_marked_len(struct vt_buf *vb);
+void vtbuf_extract_marked(struct vt_buf *vb, term_char_t *buf, int sz);
+#endif
+
+#define VTB_MARK_NONE 0
+#define VTB_MARK_END 1
+#define VTB_MARK_START 2
+#define VTB_MARK_WORD 3
+#define VTB_MARK_ROW 4
+#define VTB_MARK_EXTEND 5
+#define VTB_MARK_MOVE 6
+
+#define VTBUF_SLCK_ENABLE(vb) vtbuf_scroll_mode((vb), 1)
+#define VTBUF_SLCK_DISABLE(vb) vtbuf_scroll_mode((vb), 0)
+
+#define VTBUF_MAX_HEIGHT(vb) \
+ ((vb)->vb_history_size)
+#define VTBUF_GET_ROW(vb, r) \
+ ((vb)->vb_rows[((vb)->vb_roffset + (r)) % VTBUF_MAX_HEIGHT(vb)])
+#define VTBUF_GET_FIELD(vb, r, c) \
+ ((vb)->vb_rows[((vb)->vb_roffset + (r)) % VTBUF_MAX_HEIGHT(vb)][(c)])
+#define VTBUF_FIELD(vb, r, c) \
+ ((vb)->vb_rows[((vb)->vb_curroffset + (r)) % VTBUF_MAX_HEIGHT(vb)][(c)])
+#define VTBUF_ISCURSOR(vb, r, c) \
+ vtbuf_iscursor((vb), (r), (c))
+#define VTBUF_DIRTYROW(mask, row) \
+ ((mask)->vbm_row & ((uint64_t)1 << ((row) % 64)))
+#define VTBUF_DIRTYCOL(mask, col) \
+ ((mask)->vbm_col & ((uint64_t)1 << ((col) % 64)))
+#define VTBUF_SPACE_CHAR(attr) (' ' | (attr))
+
+#define VHS_SET 0
+#define VHS_CUR 1
+#define VHS_END 2
+int vthistory_seek(struct vt_buf *, int offset, int whence);
+void vthistory_addlines(struct vt_buf *vb, int offset);
+void vthistory_getpos(const struct vt_buf *, unsigned int *offset);
+
+/*
+ * Per-window datastructure.
+ */
+
+struct vt_window {
+ struct vt_device *vw_device; /* (c) Device. */
+ struct terminal *vw_terminal; /* (c) Terminal. */
+ struct vt_buf vw_buf; /* (u) Screen buffer. */
+ struct vt_font *vw_font; /* (d) Graphical font. */
+ term_rect_t vw_draw_area; /* (?) Drawable area. */
+ unsigned int vw_number; /* (c) Window number. */
+ int vw_kbdmode; /* (?) Keyboard mode. */
+ int vw_prev_kbdmode;/* (?) Previous mode. */
+ int vw_kbdstate; /* (?) Keyboard state. */
+ int vw_grabbed; /* (?) Grab count. */
+ char *vw_kbdsq; /* Escape sequence queue*/
+ unsigned int vw_flags; /* (d) Per-window flags. */
+ int vw_mouse_level;/* Mouse op mode. */
+#define VWF_BUSY 0x1 /* Busy reconfiguring device. */
+#define VWF_OPENED 0x2 /* TTY in use. */
+#define VWF_SCROLL 0x4 /* Keys influence scrollback. */
+#define VWF_CONSOLE 0x8 /* Kernel message console window. */
+#define VWF_VTYLOCK 0x10 /* Prevent window switch. */
+#define VWF_MOUSE_HIDE 0x20 /* Disable mouse events processing. */
+#define VWF_READY 0x40 /* Window fully initialized. */
+#define VWF_GRAPHICS 0x80 /* Window in graphics mode (KDSETMODE). */
+#define VWF_SWWAIT_REL 0x10000 /* Program wait for VT acquire is done. */
+#define VWF_SWWAIT_ACQ 0x20000 /* Program wait for VT release is done. */
+ pid_t vw_pid; /* Terminal holding process */
+ struct proc *vw_proc;
+ struct vt_mode vw_smode; /* switch mode */
+ struct callout vw_proc_dead_timer;
+ struct vt_window *vw_switch_to;
+};
+
+#define VT_AUTO 0 /* switching is automatic */
+#define VT_PROCESS 1 /* switching controlled by prog */
+#define VT_KERNEL 255 /* switching controlled in kernel */
+
+#define IS_VT_PROC_MODE(vw) ((vw)->vw_smode.mode == VT_PROCESS)
+
+/*
+ * Per-device driver routines.
+ */
+
+typedef int vd_init_t(struct vt_device *vd);
+typedef int vd_probe_t(struct vt_device *vd);
+typedef void vd_postswitch_t(struct vt_device *vd);
+typedef void vd_blank_t(struct vt_device *vd, term_color_t color);
+typedef void vd_bitblt_text_t(struct vt_device *vd, const struct vt_window *vw,
+ const term_rect_t *area);
+typedef void vd_bitblt_bmp_t(struct vt_device *vd, const struct vt_window *vw,
+ const uint8_t *pattern, const uint8_t *mask,
+ unsigned int width, unsigned int height,
+ unsigned int x, unsigned int y, term_color_t fg, term_color_t bg);
+typedef int vd_fb_ioctl_t(struct vt_device *, u_long, caddr_t, struct thread *);
+typedef int vd_fb_mmap_t(struct vt_device *, vm_ooffset_t, vm_paddr_t *, int,
+ vm_memattr_t *);
+typedef void vd_drawrect_t(struct vt_device *, int, int, int, int, int,
+ term_color_t);
+typedef void vd_setpixel_t(struct vt_device *, int, int, term_color_t);
+typedef void vd_suspend_t(struct vt_device *);
+typedef void vd_resume_t(struct vt_device *);
+
+struct vt_driver {
+ char vd_name[16];
+ /* Console attachment. */
+ vd_probe_t *vd_probe;
+ vd_init_t *vd_init;
+
+ /* Drawing. */
+ vd_blank_t *vd_blank;
+ vd_drawrect_t *vd_drawrect;
+ vd_setpixel_t *vd_setpixel;
+ vd_bitblt_text_t *vd_bitblt_text;
+ vd_bitblt_bmp_t *vd_bitblt_bmp;
+
+ /* Framebuffer ioctls, if present. */
+ vd_fb_ioctl_t *vd_fb_ioctl;
+
+ /* Framebuffer mmap, if present. */
+ vd_fb_mmap_t *vd_fb_mmap;
+
+ /* Update display setting on vt switch. */
+ vd_postswitch_t *vd_postswitch;
+
+ /* Suspend/resume handlers. */
+ vd_suspend_t *vd_suspend;
+ vd_resume_t *vd_resume;
+
+ /* Priority to know which one can override */
+ int vd_priority;
+#define VD_PRIORITY_DUMB 10
+#define VD_PRIORITY_GENERIC 100
+#define VD_PRIORITY_SPECIFIC 1000
+};
+
+/*
+ * Console device madness.
+ *
+ * Utility macro to make early vt(4) instances work.
+ */
+
+extern const struct terminal_class vt_termclass;
+void vt_upgrade(struct vt_device *vd);
+
+#define PIXEL_WIDTH(w) ((w) / 8)
+#define PIXEL_HEIGHT(h) ((h) / 16)
+
+#ifndef VT_FB_MAX_WIDTH
+#define VT_FB_MAX_WIDTH 4096
+#endif
+#ifndef VT_FB_MAX_HEIGHT
+#define VT_FB_MAX_HEIGHT 2400
+#endif
+
+/* name argument is not used yet. */
+#define VT_DRIVER_DECLARE(name, drv) DATA_SET(vt_drv_set, drv)
+
+/*
+ * Fonts.
+ *
+ * Remapping tables are used to map Unicode points to glyphs. They need
+ * to be sorted, because vtfont_lookup() performs a binary search. Each
+ * font has two remapping tables, for normal and bold. When a character
+ * is not present in bold, it uses a normal glyph. When no glyph is
+ * available, it uses glyph 0, which is normally equal to U+FFFD.
+ */
+
+struct vt_font_map {
+ uint32_t vfm_src;
+ uint16_t vfm_dst;
+ uint16_t vfm_len;
+};
+
+struct vt_font {
+ struct vt_font_map *vf_map[VFNT_MAPS];
+ uint8_t *vf_bytes;
+ unsigned int vf_height, vf_width;
+ unsigned int vf_map_count[VFNT_MAPS];
+ unsigned int vf_refcount;
+};
+
+#ifndef SC_NO_CUTPASTE
+struct vt_mouse_cursor {
+ uint8_t map[64 * 64 / 8];
+ uint8_t mask[64 * 64 / 8];
+ uint8_t width;
+ uint8_t height;
+};
+#endif
+
+const uint8_t *vtfont_lookup(const struct vt_font *vf, term_char_t c);
+struct vt_font *vtfont_ref(struct vt_font *vf);
+void vtfont_unref(struct vt_font *vf);
+int vtfont_load(vfnt_t *f, struct vt_font **ret);
+
+/* Sysmouse. */
+void sysmouse_process_event(mouse_info_t *mi);
+#ifndef SC_NO_CUTPASTE
+void vt_mouse_event(int type, int x, int y, int event, int cnt, int mlevel);
+void vt_mouse_state(int show);
+#endif
+#define VT_MOUSE_SHOW 1
+#define VT_MOUSE_HIDE 0
+
+/* Utilities. */
+void vt_determine_colors(term_char_t c, int cursor,
+ term_color_t *fg, term_color_t *bg);
+int vt_is_cursor_in_area(const struct vt_device *vd,
+ const term_rect_t *area);
+
+#endif /* !_DEV_VT_VT_H_ */
+
Property changes on: trunk/sys/dev/vt/vt.h
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/dev/vt/vt_buf.c
===================================================================
--- trunk/sys/dev/vt/vt_buf.c (rev 0)
+++ trunk/sys/dev/vt/vt_buf.c 2018-05-27 22:31:43 UTC (rev 10041)
@@ -0,0 +1,861 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 2009, 2013 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by Ed Schouten under sponsorship from the
+ * FreeBSD Foundation.
+ *
+ * Portions of this software were developed by Oleksandr Rybalko
+ * under sponsorship from the FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: stable/10/sys/dev/vt/vt_buf.c 321200 2017-07-19 13:32:08Z emaste $");
+
+#include <sys/param.h>
+#include <sys/kernel.h>
+#include <sys/lock.h>
+#include <sys/malloc.h>
+#include <sys/mutex.h>
+#include <sys/reboot.h>
+#include <sys/systm.h>
+
+#include <dev/vt/vt.h>
+
+static MALLOC_DEFINE(M_VTBUF, "vtbuf", "vt buffer");
+
+#define VTBUF_LOCK(vb) mtx_lock_spin(&(vb)->vb_lock)
+#define VTBUF_UNLOCK(vb) mtx_unlock_spin(&(vb)->vb_lock)
+
+#define POS_INDEX(c, r) (((r) << 12) + (c))
+#define POS_COPY(d, s) do { \
+ (d).tp_col = (s).tp_col; \
+ (d).tp_row = (s).tp_row; \
+} while (0)
+
+#ifndef SC_NO_CUTPASTE
+static int vtbuf_htw(const struct vt_buf *vb, int row);
+static int vtbuf_wth(const struct vt_buf *vb, int row);
+static int vtbuf_in_this_range(int begin, int test, int end, int sz);
+#endif
+
+/*
+ * line4
+ * line5 <--- curroffset (terminal output to that line)
+ * line0
+ * line1 <--- roffset (history display from that point)
+ * line2
+ * line3
+ */
+int
+vthistory_seek(struct vt_buf *vb, int offset, int whence)
+{
+ int diff, top, bottom, roffset;
+
+ /* No scrolling if not enabled. */
+ if ((vb->vb_flags & VBF_SCROLL) == 0) {
+ if (vb->vb_roffset != vb->vb_curroffset) {
+ vb->vb_roffset = vb->vb_curroffset;
+ return (0xffff);
+ }
+ return (0); /* No changes */
+ }
+
+ /* "top" may be a negative integer. */
+ bottom = vb->vb_curroffset;
+ top = (vb->vb_flags & VBF_HISTORY_FULL) ?
+ bottom + vb->vb_scr_size.tp_row - vb->vb_history_size :
+ 0;
+
+ roffset = 0; /* Make gcc happy. */
+ switch (whence) {
+ case VHS_SET:
+ if (offset < 0)
+ offset = 0;
+ roffset = top + offset;
+ break;
+ case VHS_CUR:
+ /*
+ * Operate on copy of offset value, since it temporary
+ * can be bigger than amount of rows in buffer.
+ */
+ roffset = vb->vb_roffset;
+ if (roffset >= bottom + vb->vb_scr_size.tp_row)
+ roffset -= vb->vb_history_size;
+
+ roffset += offset;
+ roffset = MAX(roffset, top);
+ roffset = MIN(roffset, bottom);
+
+ if (roffset < 0)
+ roffset = vb->vb_history_size + roffset;
+
+ break;
+ case VHS_END:
+ /* Go to current offset. */
+ roffset = vb->vb_curroffset;
+ break;
+ }
+
+ diff = vb->vb_roffset != roffset;
+ vb->vb_roffset = roffset;
+
+ return (diff);
+}
+
+void
+vthistory_addlines(struct vt_buf *vb, int offset)
+{
+#ifndef SC_NO_CUTPASTE
+ int cur, sz;
+#endif
+
+ vb->vb_curroffset += offset;
+ if (vb->vb_curroffset < 0)
+ vb->vb_curroffset = 0;
+ if (vb->vb_curroffset + vb->vb_scr_size.tp_row >= vb->vb_history_size)
+ vb->vb_flags |= VBF_HISTORY_FULL;
+ vb->vb_curroffset %= vb->vb_history_size;
+ if ((vb->vb_flags & VBF_SCROLL) == 0) {
+ vb->vb_roffset = vb->vb_curroffset;
+ }
+
+#ifndef SC_NO_CUTPASTE
+ sz = vb->vb_history_size;
+ cur = vb->vb_roffset + vb->vb_scr_size.tp_row + sz - 1;
+ if (vtbuf_in_this_range(cur, vb->vb_mark_start.tp_row, cur + offset, sz) ||
+ vtbuf_in_this_range(cur, vb->vb_mark_end.tp_row, cur + offset, sz)) {
+ /* clear screen selection */
+ vb->vb_mark_start.tp_row = vb->vb_mark_end.tp_row;
+ vb->vb_mark_start.tp_col = vb->vb_mark_end.tp_col;
+ }
+#endif
+}
+
+void
+vthistory_getpos(const struct vt_buf *vb, unsigned int *offset)
+{
+
+ *offset = vb->vb_roffset;
+}
+
+#ifndef SC_NO_CUTPASTE /* Only mouse support use it now. */
+/* Translate history row to current view row number. */
+static int
+vtbuf_htw(const struct vt_buf *vb, int row)
+{
+
+ /*
+ * total 1000 rows.
+ * History offset roffset winrow
+ * 205 200 ((205 - 200 + 1000) % 1000) = 5
+ * 90 990 ((90 - 990 + 1000) % 1000) = 100
+ */
+ return ((row - vb->vb_roffset + vb->vb_history_size) %
+ vb->vb_history_size);
+}
+
+/* Translate current view row number to history row. */
+static int
+vtbuf_wth(const struct vt_buf *vb, int row)
+{
+
+ return ((vb->vb_roffset + row) % vb->vb_history_size);
+}
+
+/*
+ * Test if an index in a circular buffer is within a range.
+ *
+ * begin - start index
+ * end - end index
+ * test - test index
+ * sz - size of circular buffer when it turns over
+ */
+static int
+vtbuf_in_this_range(int begin, int test, int end, int sz)
+{
+
+ begin %= sz;
+ end %= sz;
+
+ /* check for inversion */
+ if (begin > end)
+ return (test >= begin || test < end);
+ else
+ return (test >= begin && test < end);
+}
+#endif
+
+int
+vtbuf_iscursor(const struct vt_buf *vb, int row, int col)
+{
+#ifndef SC_NO_CUTPASTE
+ int sc, sr, sz, ec, er, tmp;
+#endif
+
+ if ((vb->vb_flags & (VBF_CURSOR|VBF_SCROLL)) == VBF_CURSOR &&
+ (vb->vb_cursor.tp_row == row) && (vb->vb_cursor.tp_col == col))
+ return (1);
+
+#ifndef SC_NO_CUTPASTE
+ /* Mark cut/paste region. */
+ if (vb->vb_mark_start.tp_col == vb->vb_mark_end.tp_col &&
+ vb->vb_mark_start.tp_row == vb->vb_mark_end.tp_row)
+ return (0);
+
+ sc = vb->vb_mark_start.tp_col;
+ sr = vb->vb_mark_start.tp_row;
+ ec = vb->vb_mark_end.tp_col;
+ er = vb->vb_mark_end.tp_row;
+
+ /*
+ * Information about if the selection was made bottom-top or
+ * top-bottom is lost due to modulo arithmetics and needs to
+ * be recovered:
+ */
+ sz = vb->vb_history_size;
+ tmp = (sz + er - sr) % sz;
+ row = vtbuf_wth(vb, row);
+
+ /* Swap start and end if start > end */
+ if ((2 * tmp) > sz || (tmp == 0 && sc > ec)) {
+ tmp = sc; sc = ec; ec = tmp;
+ tmp = sr; sr = er; er = tmp;
+ }
+
+ if (vtbuf_in_this_range(POS_INDEX(sc, sr), POS_INDEX(col, row),
+ POS_INDEX(ec, er), POS_INDEX(0, sz)))
+ return (1);
+#endif
+
+ return (0);
+}
+
+static inline void
+vtbuf_dirty_locked(struct vt_buf *vb, const term_rect_t *area)
+{
+
+ if (vb->vb_dirtyrect.tr_begin.tp_row > area->tr_begin.tp_row)
+ vb->vb_dirtyrect.tr_begin.tp_row = area->tr_begin.tp_row;
+ if (vb->vb_dirtyrect.tr_begin.tp_col > area->tr_begin.tp_col)
+ vb->vb_dirtyrect.tr_begin.tp_col = area->tr_begin.tp_col;
+ if (vb->vb_dirtyrect.tr_end.tp_row < area->tr_end.tp_row)
+ vb->vb_dirtyrect.tr_end.tp_row = area->tr_end.tp_row;
+ if (vb->vb_dirtyrect.tr_end.tp_col < area->tr_end.tp_col)
+ vb->vb_dirtyrect.tr_end.tp_col = area->tr_end.tp_col;
+}
+
+void
+vtbuf_dirty(struct vt_buf *vb, const term_rect_t *area)
+{
+
+ VTBUF_LOCK(vb);
+ vtbuf_dirty_locked(vb, area);
+ VTBUF_UNLOCK(vb);
+}
+
+static inline void
+vtbuf_dirty_cell_locked(struct vt_buf *vb, const term_pos_t *p)
+{
+ term_rect_t area;
+
+ area.tr_begin = *p;
+ area.tr_end.tp_row = p->tp_row + 1;
+ area.tr_end.tp_col = p->tp_col + 1;
+ vtbuf_dirty_locked(vb, &area);
+}
+
+static void
+vtbuf_make_undirty(struct vt_buf *vb)
+{
+
+ vb->vb_dirtyrect.tr_begin = vb->vb_scr_size;
+ vb->vb_dirtyrect.tr_end.tp_row = vb->vb_dirtyrect.tr_end.tp_col = 0;
+}
+
+void
+vtbuf_undirty(struct vt_buf *vb, term_rect_t *r)
+{
+
+ VTBUF_LOCK(vb);
+ *r = vb->vb_dirtyrect;
+ vtbuf_make_undirty(vb);
+ VTBUF_UNLOCK(vb);
+}
+
+void
+vtbuf_copy(struct vt_buf *vb, const term_rect_t *r, const term_pos_t *p2)
+{
+ const term_pos_t *p1 = &r->tr_begin;
+ term_rect_t area;
+ unsigned int rows, cols;
+ int pr, rdiff;
+
+ KASSERT(r->tr_begin.tp_row < vb->vb_scr_size.tp_row,
+ ("vtbuf_copy begin.tp_row %d must be less than screen width %d",
+ r->tr_begin.tp_row, vb->vb_scr_size.tp_row));
+ KASSERT(r->tr_begin.tp_col < vb->vb_scr_size.tp_col,
+ ("vtbuf_copy begin.tp_col %d must be less than screen height %d",
+ r->tr_begin.tp_col, vb->vb_scr_size.tp_col));
+
+ KASSERT(r->tr_end.tp_row <= vb->vb_scr_size.tp_row,
+ ("vtbuf_copy end.tp_row %d must be less than screen width %d",
+ r->tr_end.tp_row, vb->vb_scr_size.tp_row));
+ KASSERT(r->tr_end.tp_col <= vb->vb_scr_size.tp_col,
+ ("vtbuf_copy end.tp_col %d must be less than screen height %d",
+ r->tr_end.tp_col, vb->vb_scr_size.tp_col));
+
+ KASSERT(p2->tp_row < vb->vb_scr_size.tp_row,
+ ("vtbuf_copy tp_row %d must be less than screen width %d",
+ p2->tp_row, vb->vb_scr_size.tp_row));
+ KASSERT(p2->tp_col < vb->vb_scr_size.tp_col,
+ ("vtbuf_copy tp_col %d must be less than screen height %d",
+ p2->tp_col, vb->vb_scr_size.tp_col));
+
+ rows = r->tr_end.tp_row - r->tr_begin.tp_row;
+ rdiff = r->tr_begin.tp_row - p2->tp_row;
+ cols = r->tr_end.tp_col - r->tr_begin.tp_col;
+ if (r->tr_begin.tp_row > p2->tp_row && r->tr_begin.tp_col == 0 &&
+ r->tr_end.tp_col == vb->vb_scr_size.tp_col && /* Full row. */
+ (rows + rdiff) == vb->vb_scr_size.tp_row && /* Whole screen. */
+ rdiff > 0) { /* Only forward direction. Do not eat history. */
+ vthistory_addlines(vb, rdiff);
+ } else if (p2->tp_row < p1->tp_row) {
+ /* Handle overlapping copies of line segments. */
+ /* Move data up. */
+ for (pr = 0; pr < rows; pr++)
+ memmove(
+ &VTBUF_FIELD(vb, p2->tp_row + pr, p2->tp_col),
+ &VTBUF_FIELD(vb, p1->tp_row + pr, p1->tp_col),
+ cols * sizeof(term_char_t));
+ } else {
+ /* Move data down. */
+ for (pr = rows - 1; pr >= 0; pr--)
+ memmove(
+ &VTBUF_FIELD(vb, p2->tp_row + pr, p2->tp_col),
+ &VTBUF_FIELD(vb, p1->tp_row + pr, p1->tp_col),
+ cols * sizeof(term_char_t));
+ }
+
+ area.tr_begin = *p2;
+ area.tr_end.tp_row = MIN(p2->tp_row + rows, vb->vb_scr_size.tp_row);
+ area.tr_end.tp_col = MIN(p2->tp_col + cols, vb->vb_scr_size.tp_col);
+ vtbuf_dirty(vb, &area);
+}
+
+static void
+vtbuf_fill(struct vt_buf *vb, const term_rect_t *r, term_char_t c)
+{
+ unsigned int pr, pc;
+ term_char_t *row;
+
+ for (pr = r->tr_begin.tp_row; pr < r->tr_end.tp_row; pr++) {
+ row = vb->vb_rows[(vb->vb_curroffset + pr) %
+ VTBUF_MAX_HEIGHT(vb)];
+ for (pc = r->tr_begin.tp_col; pc < r->tr_end.tp_col; pc++) {
+ row[pc] = c;
+ }
+ }
+}
+
+void
+vtbuf_fill_locked(struct vt_buf *vb, const term_rect_t *r, term_char_t c)
+{
+ KASSERT(r->tr_begin.tp_row < vb->vb_scr_size.tp_row,
+ ("vtbuf_fill_locked begin.tp_row %d must be < screen height %d",
+ r->tr_begin.tp_row, vb->vb_scr_size.tp_row));
+ KASSERT(r->tr_begin.tp_col < vb->vb_scr_size.tp_col,
+ ("vtbuf_fill_locked begin.tp_col %d must be < screen width %d",
+ r->tr_begin.tp_col, vb->vb_scr_size.tp_col));
+
+ KASSERT(r->tr_end.tp_row <= vb->vb_scr_size.tp_row,
+ ("vtbuf_fill_locked end.tp_row %d must be <= screen height %d",
+ r->tr_end.tp_row, vb->vb_scr_size.tp_row));
+ KASSERT(r->tr_end.tp_col <= vb->vb_scr_size.tp_col,
+ ("vtbuf_fill_locked end.tp_col %d must be <= screen width %d",
+ r->tr_end.tp_col, vb->vb_scr_size.tp_col));
+
+ VTBUF_LOCK(vb);
+ vtbuf_fill(vb, r, c);
+ vtbuf_dirty_locked(vb, r);
+ VTBUF_UNLOCK(vb);
+}
+
+static void
+vtbuf_init_rows(struct vt_buf *vb)
+{
+ int r;
+
+ vb->vb_history_size = MAX(vb->vb_history_size, vb->vb_scr_size.tp_row);
+
+ for (r = 0; r < vb->vb_history_size; r++)
+ vb->vb_rows[r] = &vb->vb_buffer[r * vb->vb_scr_size.tp_col];
+}
+
+void
+vtbuf_init_early(struct vt_buf *vb)
+{
+ term_rect_t rect;
+
+ vb->vb_flags |= VBF_CURSOR;
+ vb->vb_roffset = 0;
+ vb->vb_curroffset = 0;
+ vb->vb_mark_start.tp_row = 0;
+ vb->vb_mark_start.tp_col = 0;
+ vb->vb_mark_end.tp_row = 0;
+ vb->vb_mark_end.tp_col = 0;
+
+ vtbuf_init_rows(vb);
+ rect.tr_begin.tp_row = rect.tr_begin.tp_col = 0;
+ rect.tr_end.tp_col = vb->vb_scr_size.tp_col;
+ rect.tr_end.tp_row = vb->vb_history_size;
+ vtbuf_fill(vb, &rect, VTBUF_SPACE_CHAR(TERMINAL_NORM_ATTR));
+ vtbuf_make_undirty(vb);
+ if ((vb->vb_flags & VBF_MTX_INIT) == 0) {
+ mtx_init(&vb->vb_lock, "vtbuf", NULL, MTX_SPIN);
+ vb->vb_flags |= VBF_MTX_INIT;
+ }
+}
+
+void
+vtbuf_init(struct vt_buf *vb, const term_pos_t *p)
+{
+ int sz;
+
+ vb->vb_scr_size = *p;
+ vb->vb_history_size = VBF_DEFAULT_HISTORY_SIZE;
+
+ if ((vb->vb_flags & VBF_STATIC) == 0) {
+ sz = vb->vb_history_size * p->tp_col * sizeof(term_char_t);
+ vb->vb_buffer = malloc(sz, M_VTBUF, M_WAITOK | M_ZERO);
+
+ sz = vb->vb_history_size * sizeof(term_char_t *);
+ vb->vb_rows = malloc(sz, M_VTBUF, M_WAITOK | M_ZERO);
+ }
+
+ vtbuf_init_early(vb);
+}
+
+void
+vtbuf_sethistory_size(struct vt_buf *vb, int size)
+{
+ term_pos_t p;
+
+ /* With same size */
+ p.tp_row = vb->vb_scr_size.tp_row;
+ p.tp_col = vb->vb_scr_size.tp_col;
+ vtbuf_grow(vb, &p, size);
+}
+
+void
+vtbuf_grow(struct vt_buf *vb, const term_pos_t *p, unsigned int history_size)
+{
+ term_char_t *old, *new, **rows, **oldrows, **copyrows, *row, *oldrow;
+ int bufsize, rowssize, w, h, c, r, history_was_full;
+ unsigned int old_history_size;
+ term_rect_t rect;
+
+ history_size = MAX(history_size, p->tp_row);
+
+ /* Allocate new buffer. */
+ bufsize = history_size * p->tp_col * sizeof(term_char_t);
+ new = malloc(bufsize, M_VTBUF, M_WAITOK | M_ZERO);
+ rowssize = history_size * sizeof(term_pos_t *);
+ rows = malloc(rowssize, M_VTBUF, M_WAITOK | M_ZERO);
+
+ /* Toggle it. */
+ VTBUF_LOCK(vb);
+ old = vb->vb_flags & VBF_STATIC ? NULL : vb->vb_buffer;
+ oldrows = vb->vb_flags & VBF_STATIC ? NULL : vb->vb_rows;
+ copyrows = vb->vb_rows;
+
+ w = vb->vb_scr_size.tp_col;
+ h = vb->vb_scr_size.tp_row;
+ old_history_size = vb->vb_history_size;
+ history_was_full = vb->vb_flags & VBF_HISTORY_FULL;
+
+ vb->vb_history_size = history_size;
+ vb->vb_buffer = new;
+ vb->vb_rows = rows;
+ vb->vb_flags &= ~VBF_STATIC;
+ vb->vb_scr_size = *p;
+ vtbuf_init_rows(vb);
+
+ /* Copy history and fill extra space if needed. */
+ if (history_size > old_history_size) {
+ /*
+ * Copy rows to the new buffer. The first row in the history
+ * is back to index 0, ie. the new buffer doesn't cycle.
+ *
+ * The rest of the new buffer is initialized with blank
+ * content.
+ */
+ for (r = 0; r < old_history_size; r ++) {
+ row = rows[r];
+
+ /* Compute the corresponding row in the old buffer. */
+ if (history_was_full)
+ /*
+ * The buffer is full, the "top" row is
+ * the one just after the viewable area
+ * (curroffset + viewable height) in the
+ * cycling buffer. The corresponding row
+ * is computed from this top row.
+ */
+ oldrow = copyrows[
+ (vb->vb_curroffset + h + r) %
+ old_history_size];
+ else
+ /*
+ * The buffer is not full, therefore,
+ * we didn't cycle already. The
+ * corresponding rows are the same in
+ * both buffers.
+ */
+ oldrow = copyrows[r];
+
+ memmove(row, oldrow,
+ MIN(p->tp_col, w) * sizeof(term_char_t));
+
+ /*
+ * XXX VTBUF_SPACE_CHAR(TERMINAL_NORM_ATTR) will
+ * extended lines of kernel text using the wrong
+ * background color.
+ */
+ for (c = MIN(p->tp_col, w); c < p->tp_col; c++) {
+ row[c] = VTBUF_SPACE_CHAR(TERMINAL_NORM_ATTR);
+ }
+ }
+
+ /* Fill remaining rows. */
+ rect.tr_begin.tp_col = 0;
+ rect.tr_begin.tp_row = old_history_size;
+ rect.tr_end.tp_col = p->tp_col;
+ rect.tr_end.tp_row = p->tp_row;
+ vtbuf_fill(vb, &rect, VTBUF_SPACE_CHAR(TERMINAL_NORM_ATTR));
+
+ vb->vb_flags &= ~VBF_HISTORY_FULL;
+ } else {
+ /*
+ * Copy rows to the new buffer. The first row in the history
+ * is back to index 0, ie. the new buffer doesn't cycle.
+ *
+ * (old_history_size - history_size) lines of history are
+ * dropped.
+ */
+ for (r = 0; r < history_size; r ++) {
+ row = rows[r];
+
+ /*
+ * Compute the corresponding row in the old buffer.
+ *
+ * See the equivalent if{} block above for an
+ * explanation.
+ */
+ if (history_was_full)
+ oldrow = copyrows[
+ (vb->vb_curroffset + h + r +
+ (old_history_size - history_size)) %
+ old_history_size];
+ else
+ oldrow = copyrows[
+ (r + (old_history_size - history_size)) %
+ old_history_size];
+
+ memmove(row, oldrow,
+ MIN(p->tp_col, w) * sizeof(term_char_t));
+
+ /*
+ * XXX VTBUF_SPACE_CHAR(TERMINAL_NORM_ATTR) will
+ * extended lines of kernel text using the wrong
+ * background color.
+ */
+ for (c = MIN(p->tp_col, w); c < p->tp_col; c++) {
+ row[c] = VTBUF_SPACE_CHAR(TERMINAL_NORM_ATTR);
+ }
+ }
+
+ if (!history_was_full &&
+ (vb->vb_curroffset + h) >= history_size)
+ vb->vb_flags |= VBF_HISTORY_FULL;
+ }
+
+ /*
+ * If the screen is already filled (there are non-visible lines
+ * above the current viewable area), adjust curroffset to the
+ * new viewable area.
+ */
+ if (!history_was_full && vb->vb_curroffset > 0) {
+ vb->vb_curroffset = vb->vb_curroffset + h - p->tp_row;
+ if (vb->vb_curroffset < 0)
+ vb->vb_curroffset += vb->vb_history_size;
+ vb->vb_curroffset %= vb->vb_history_size;
+ vb->vb_roffset = vb->vb_curroffset;
+ }
+
+ /* Adjust cursor position. */
+ if (vb->vb_cursor.tp_col > p->tp_col - 1)
+ /*
+ * Move cursor to the last column, in case its previous
+ * position is outside of the new screen area.
+ */
+ vb->vb_cursor.tp_col = p->tp_col - 1;
+
+ if (vb->vb_curroffset > 0 || vb->vb_cursor.tp_row > p->tp_row - 1)
+ /* Move cursor to the last line on the screen. */
+ vb->vb_cursor.tp_row = p->tp_row - 1;
+
+ vtbuf_make_undirty(vb);
+ VTBUF_UNLOCK(vb);
+
+ /* Deallocate old buffer. */
+ free(old, M_VTBUF);
+ free(oldrows, M_VTBUF);
+}
+
+void
+vtbuf_putchar(struct vt_buf *vb, const term_pos_t *p, term_char_t c)
+{
+ term_char_t *row;
+
+ KASSERT(p->tp_row < vb->vb_scr_size.tp_row,
+ ("vtbuf_putchar tp_row %d must be less than screen width %d",
+ p->tp_row, vb->vb_scr_size.tp_row));
+ KASSERT(p->tp_col < vb->vb_scr_size.tp_col,
+ ("vtbuf_putchar tp_col %d must be less than screen height %d",
+ p->tp_col, vb->vb_scr_size.tp_col));
+
+ row = vb->vb_rows[(vb->vb_curroffset + p->tp_row) %
+ VTBUF_MAX_HEIGHT(vb)];
+ if (row[p->tp_col] != c) {
+ VTBUF_LOCK(vb);
+ row[p->tp_col] = c;
+ vtbuf_dirty_cell_locked(vb, p);
+ VTBUF_UNLOCK(vb);
+ }
+}
+
+void
+vtbuf_cursor_position(struct vt_buf *vb, const term_pos_t *p)
+{
+
+ if (vb->vb_flags & VBF_CURSOR) {
+ VTBUF_LOCK(vb);
+ vtbuf_dirty_cell_locked(vb, &vb->vb_cursor);
+ vb->vb_cursor = *p;
+ vtbuf_dirty_cell_locked(vb, &vb->vb_cursor);
+ VTBUF_UNLOCK(vb);
+ } else {
+ vb->vb_cursor = *p;
+ }
+}
+
+#ifndef SC_NO_CUTPASTE
+static void
+vtbuf_flush_mark(struct vt_buf *vb)
+{
+ term_rect_t area;
+ int s, e;
+
+ /* Notify renderer to update marked region. */
+ if ((vb->vb_mark_start.tp_col != vb->vb_mark_end.tp_col) ||
+ (vb->vb_mark_start.tp_row != vb->vb_mark_end.tp_row)) {
+
+ s = vtbuf_htw(vb, vb->vb_mark_start.tp_row);
+ e = vtbuf_htw(vb, vb->vb_mark_end.tp_row);
+
+ area.tr_begin.tp_col = 0;
+ area.tr_begin.tp_row = MIN(s, e);
+
+ area.tr_end.tp_col = vb->vb_scr_size.tp_col;
+ area.tr_end.tp_row = MAX(s, e) + 1;
+
+ vtbuf_dirty(vb, &area);
+ }
+}
+
+int
+vtbuf_get_marked_len(struct vt_buf *vb)
+{
+ int ei, si, sz;
+ term_pos_t s, e;
+
+ /* Swap according to window coordinates. */
+ if (POS_INDEX(vtbuf_htw(vb, vb->vb_mark_start.tp_row),
+ vb->vb_mark_start.tp_col) >
+ POS_INDEX(vtbuf_htw(vb, vb->vb_mark_end.tp_row),
+ vb->vb_mark_end.tp_col)) {
+ POS_COPY(e, vb->vb_mark_start);
+ POS_COPY(s, vb->vb_mark_end);
+ } else {
+ POS_COPY(s, vb->vb_mark_start);
+ POS_COPY(e, vb->vb_mark_end);
+ }
+
+ si = s.tp_row * vb->vb_scr_size.tp_col + s.tp_col;
+ ei = e.tp_row * vb->vb_scr_size.tp_col + e.tp_col;
+
+ /* Number symbols and number of rows to inject \n */
+ sz = ei - si + ((e.tp_row - s.tp_row) * 2);
+
+ return (sz * sizeof(term_char_t));
+}
+
+void
+vtbuf_extract_marked(struct vt_buf *vb, term_char_t *buf, int sz)
+{
+ int i, r, c, cs, ce;
+ term_pos_t s, e;
+
+ /* Swap according to window coordinates. */
+ if (POS_INDEX(vtbuf_htw(vb, vb->vb_mark_start.tp_row),
+ vb->vb_mark_start.tp_col) >
+ POS_INDEX(vtbuf_htw(vb, vb->vb_mark_end.tp_row),
+ vb->vb_mark_end.tp_col)) {
+ POS_COPY(e, vb->vb_mark_start);
+ POS_COPY(s, vb->vb_mark_end);
+ } else {
+ POS_COPY(s, vb->vb_mark_start);
+ POS_COPY(e, vb->vb_mark_end);
+ }
+
+ i = 0;
+ for (r = s.tp_row; r <= e.tp_row; r ++) {
+ cs = (r == s.tp_row)?s.tp_col:0;
+ ce = (r == e.tp_row)?e.tp_col:vb->vb_scr_size.tp_col;
+ for (c = cs; c < ce; c ++) {
+ buf[i++] = vb->vb_rows[r][c];
+ }
+ /* Add new line for all rows, but not for last one. */
+ if (r != e.tp_row) {
+ buf[i++] = '\r';
+ buf[i++] = '\n';
+ }
+ }
+}
+
+int
+vtbuf_set_mark(struct vt_buf *vb, int type, int col, int row)
+{
+ term_char_t *r;
+ int i;
+
+ switch (type) {
+ case VTB_MARK_END: /* B1 UP */
+ if (vb->vb_mark_last != VTB_MARK_MOVE)
+ return (0);
+ /* FALLTHROUGH */
+ case VTB_MARK_MOVE:
+ case VTB_MARK_EXTEND:
+ vtbuf_flush_mark(vb); /* Clean old mark. */
+ vb->vb_mark_end.tp_col = col;
+ vb->vb_mark_end.tp_row = vtbuf_wth(vb, row);
+ break;
+ case VTB_MARK_START:
+ vtbuf_flush_mark(vb); /* Clean old mark. */
+ vb->vb_mark_start.tp_col = col;
+ vb->vb_mark_start.tp_row = vtbuf_wth(vb, row);
+ /* Start again, so clear end point. */
+ vb->vb_mark_end.tp_col = col;
+ vb->vb_mark_end.tp_row = vtbuf_wth(vb, row);
+ break;
+ case VTB_MARK_WORD:
+ vtbuf_flush_mark(vb); /* Clean old mark. */
+ vb->vb_mark_start.tp_row = vb->vb_mark_end.tp_row =
+ vtbuf_wth(vb, row);
+ r = vb->vb_rows[vb->vb_mark_start.tp_row];
+ for (i = col; i >= 0; i --) {
+ if (TCHAR_CHARACTER(r[i]) == ' ') {
+ vb->vb_mark_start.tp_col = i + 1;
+ break;
+ }
+ }
+ for (i = col; i < vb->vb_scr_size.tp_col; i ++) {
+ if (TCHAR_CHARACTER(r[i]) == ' ') {
+ vb->vb_mark_end.tp_col = i;
+ break;
+ }
+ }
+ if (vb->vb_mark_start.tp_col > vb->vb_mark_end.tp_col)
+ vb->vb_mark_start.tp_col = vb->vb_mark_end.tp_col;
+ break;
+ case VTB_MARK_ROW:
+ vtbuf_flush_mark(vb); /* Clean old mark. */
+ vb->vb_mark_start.tp_col = 0;
+ vb->vb_mark_end.tp_col = vb->vb_scr_size.tp_col;
+ vb->vb_mark_start.tp_row = vb->vb_mark_end.tp_row =
+ vtbuf_wth(vb, row);
+ break;
+ case VTB_MARK_NONE:
+ vb->vb_mark_last = type;
+ /* FALLTHROUGH */
+ default:
+ /* panic? */
+ return (0);
+ }
+
+ vb->vb_mark_last = type;
+ /* Draw new marked region. */
+ vtbuf_flush_mark(vb);
+ return (1);
+}
+#endif
+
+void
+vtbuf_cursor_visibility(struct vt_buf *vb, int yes)
+{
+ int oflags, nflags;
+
+ VTBUF_LOCK(vb);
+ oflags = vb->vb_flags;
+ if (yes)
+ vb->vb_flags |= VBF_CURSOR;
+ else
+ vb->vb_flags &= ~VBF_CURSOR;
+ nflags = vb->vb_flags;
+
+ if (oflags != nflags)
+ vtbuf_dirty_cell_locked(vb, &vb->vb_cursor);
+ VTBUF_UNLOCK(vb);
+}
+
+void
+vtbuf_scroll_mode(struct vt_buf *vb, int yes)
+{
+ int oflags, nflags;
+
+ VTBUF_LOCK(vb);
+ oflags = vb->vb_flags;
+ if (yes)
+ vb->vb_flags |= VBF_SCROLL;
+ else
+ vb->vb_flags &= ~VBF_SCROLL;
+ nflags = vb->vb_flags;
+
+ if (oflags != nflags)
+ vtbuf_dirty_cell_locked(vb, &vb->vb_cursor);
+ VTBUF_UNLOCK(vb);
+}
+
Property changes on: trunk/sys/dev/vt/vt_buf.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/dev/vt/vt_consolectl.c
===================================================================
--- trunk/sys/dev/vt/vt_consolectl.c (rev 0)
+++ trunk/sys/dev/vt/vt_consolectl.c 2018-05-27 22:31:43 UTC (rev 10041)
@@ -0,0 +1,83 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 2009 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by Ed Schouten under sponsorship from the
+ * FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: stable/10/sys/dev/vt/vt_consolectl.c 271952 2014-09-22 10:21:08Z ray $");
+
+#include <sys/param.h>
+#include <sys/consio.h>
+#include <sys/kernel.h>
+#include <sys/systm.h>
+
+#include <dev/vt/vt.h>
+
+static d_ioctl_t consolectl_ioctl;
+
+static struct cdevsw consolectl_cdevsw = {
+ .d_version = D_VERSION,
+ .d_ioctl = consolectl_ioctl,
+ .d_name = "consolectl",
+};
+
+static int
+consolectl_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag,
+ struct thread *td)
+{
+
+ switch (cmd) {
+ case CONS_GETVERS:
+ *(int*)data = 0x200;
+ return 0;
+ case CONS_MOUSECTL: {
+ mouse_info_t *mi = (mouse_info_t*)data;
+
+ sysmouse_process_event(mi);
+ return (0);
+ }
+ default:
+#ifdef VT_CONSOLECTL_DEBUG
+ printf("consolectl: unknown ioctl: %c:%lx\n",
+ (char)IOCGROUP(cmd), IOCBASECMD(cmd));
+#endif
+ return (ENOIOCTL);
+ }
+}
+
+static void
+consolectl_drvinit(void *unused)
+{
+
+ if (!vty_enabled(VTY_VT))
+ return;
+ make_dev(&consolectl_cdevsw, 0, UID_ROOT, GID_WHEEL, 0600,
+ "consolectl");
+}
+
+SYSINIT(consolectl, SI_SUB_DRIVERS, SI_ORDER_MIDDLE, consolectl_drvinit, NULL);
Property changes on: trunk/sys/dev/vt/vt_consolectl.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/dev/vt/vt_core.c
===================================================================
--- trunk/sys/dev/vt/vt_core.c (rev 0)
+++ trunk/sys/dev/vt/vt_core.c 2018-05-27 22:31:43 UTC (rev 10041)
@@ -0,0 +1,2740 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 2009, 2013 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by Ed Schouten under sponsorship from the
+ * FreeBSD Foundation.
+ *
+ * Portions of this software were developed by Oleksandr Rybalko
+ * under sponsorship from the FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: stable/10/sys/dev/vt/vt_core.c 321198 2017-07-19 13:11:35Z emaste $");
+
+#include "opt_compat.h"
+
+#include <sys/param.h>
+#include <sys/consio.h>
+#include <sys/eventhandler.h>
+#include <sys/fbio.h>
+#include <sys/kbio.h>
+#include <sys/kdb.h>
+#include <sys/kernel.h>
+#include <sys/lock.h>
+#include <sys/malloc.h>
+#include <sys/mutex.h>
+#include <sys/power.h>
+#include <sys/priv.h>
+#include <sys/proc.h>
+#include <sys/reboot.h>
+#include <sys/systm.h>
+#include <sys/terminal.h>
+
+#include <dev/kbd/kbdreg.h>
+#include <dev/vt/vt.h>
+
+#if defined(__i386__) || defined(__amd64__)
+#include <machine/psl.h>
+#include <machine/frame.h>
+#endif
+
+static tc_bell_t vtterm_bell;
+static tc_cursor_t vtterm_cursor;
+static tc_putchar_t vtterm_putchar;
+static tc_fill_t vtterm_fill;
+static tc_copy_t vtterm_copy;
+static tc_param_t vtterm_param;
+static tc_done_t vtterm_done;
+
+static tc_cnprobe_t vtterm_cnprobe;
+static tc_cngetc_t vtterm_cngetc;
+
+static tc_cngrab_t vtterm_cngrab;
+static tc_cnungrab_t vtterm_cnungrab;
+
+static tc_opened_t vtterm_opened;
+static tc_ioctl_t vtterm_ioctl;
+static tc_mmap_t vtterm_mmap;
+
+const struct terminal_class vt_termclass = {
+ .tc_bell = vtterm_bell,
+ .tc_cursor = vtterm_cursor,
+ .tc_putchar = vtterm_putchar,
+ .tc_fill = vtterm_fill,
+ .tc_copy = vtterm_copy,
+ .tc_param = vtterm_param,
+ .tc_done = vtterm_done,
+
+ .tc_cnprobe = vtterm_cnprobe,
+ .tc_cngetc = vtterm_cngetc,
+
+ .tc_cngrab = vtterm_cngrab,
+ .tc_cnungrab = vtterm_cnungrab,
+
+ .tc_opened = vtterm_opened,
+ .tc_ioctl = vtterm_ioctl,
+ .tc_mmap = vtterm_mmap,
+};
+
+/*
+ * Use a constant timer of 25 Hz to redraw the screen.
+ *
+ * XXX: In theory we should only fire up the timer when there is really
+ * activity. Unfortunately we cannot always start timers. We really
+ * don't want to process kernel messages synchronously, because it
+ * really slows down the system.
+ */
+#define VT_TIMERFREQ 25
+
+/* Bell pitch/duration. */
+#define VT_BELLDURATION ((5 * hz + 99) / 100)
+#define VT_BELLPITCH 800
+
+#define VT_LOCK(vd) mtx_lock(&(vd)->vd_lock)
+#define VT_UNLOCK(vd) mtx_unlock(&(vd)->vd_lock)
+#define VT_LOCK_ASSERT(vd, what) mtx_assert(&(vd)->vd_lock, what)
+
+#define VT_UNIT(vw) ((vw)->vw_device->vd_unit * VT_MAXWINDOWS + \
+ (vw)->vw_number)
+
+static SYSCTL_NODE(_kern, OID_AUTO, vt, CTLFLAG_RD, 0, "vt(9) parameters");
+VT_SYSCTL_INT(enable_altgr, 1, "Enable AltGr key (Do not assume R.Alt as Alt)");
+VT_SYSCTL_INT(enable_bell, 1, "Enable bell");
+VT_SYSCTL_INT(debug, 0, "vt(9) debug level");
+VT_SYSCTL_INT(deadtimer, 15, "Time to wait busy process in VT_PROCESS mode");
+VT_SYSCTL_INT(suspendswitch, 1, "Switch to VT0 before suspend");
+
+/* Allow to disable some keyboard combinations. */
+VT_SYSCTL_INT(kbd_halt, 1, "Enable halt keyboard combination. "
+ "See kbdmap(5) to configure.");
+VT_SYSCTL_INT(kbd_poweroff, 1, "Enable Power Off keyboard combination. "
+ "See kbdmap(5) to configure.");
+VT_SYSCTL_INT(kbd_reboot, 1, "Enable reboot keyboard combination. "
+ "See kbdmap(5) to configure (typically Ctrl-Alt-Delete).");
+VT_SYSCTL_INT(kbd_debug, 1, "Enable key combination to enter debugger. "
+ "See kbdmap(5) to configure (typically Ctrl-Alt-Esc).");
+VT_SYSCTL_INT(kbd_panic, 0, "Enable request to panic. "
+ "See kbdmap(5) to configure.");
+
+static struct vt_device vt_consdev;
+static unsigned int vt_unit = 0;
+static MALLOC_DEFINE(M_VT, "vt", "vt device");
+struct vt_device *main_vd = &vt_consdev;
+
+/* Boot logo. */
+extern unsigned int vt_logo_width;
+extern unsigned int vt_logo_height;
+extern unsigned int vt_logo_depth;
+extern unsigned char vt_logo_image[];
+
+/* Font. */
+extern struct vt_font vt_font_default;
+#ifndef SC_NO_CUTPASTE
+extern struct vt_mouse_cursor vt_default_mouse_pointer;
+#endif
+
+static int signal_vt_rel(struct vt_window *);
+static int signal_vt_acq(struct vt_window *);
+static int finish_vt_rel(struct vt_window *, int, int *);
+static int finish_vt_acq(struct vt_window *);
+static int vt_window_switch(struct vt_window *);
+static int vt_late_window_switch(struct vt_window *);
+static int vt_proc_alive(struct vt_window *);
+static void vt_resize(struct vt_device *);
+static void vt_update_static(void *);
+#ifndef SC_NO_CUTPASTE
+static void vt_mouse_paste(void);
+#endif
+static void vt_suspend_handler(void *priv);
+static void vt_resume_handler(void *priv);
+
+SET_DECLARE(vt_drv_set, struct vt_driver);
+
+#define _VTDEFH MAX(100, PIXEL_HEIGHT(VT_FB_MAX_HEIGHT))
+#define _VTDEFW MAX(200, PIXEL_WIDTH(VT_FB_MAX_WIDTH))
+
+static struct terminal vt_consterm;
+static struct vt_window vt_conswindow;
+static struct vt_device vt_consdev = {
+ .vd_driver = NULL,
+ .vd_softc = NULL,
+ .vd_flags = VDF_INVALID,
+ .vd_windows = { [VT_CONSWINDOW] = &vt_conswindow, },
+ .vd_curwindow = &vt_conswindow,
+ .vd_kbstate = 0,
+
+#ifndef SC_NO_CUTPASTE
+ .vd_pastebuf = {
+ .vpb_buf = NULL,
+ .vpb_bufsz = 0,
+ .vpb_len = 0
+ },
+ .vd_mcursor = &vt_default_mouse_pointer,
+ .vd_mcursor_fg = TC_WHITE,
+ .vd_mcursor_bg = TC_BLACK,
+#endif
+};
+static term_char_t vt_constextbuf[(_VTDEFW) * (VBF_DEFAULT_HISTORY_SIZE)];
+static term_char_t *vt_constextbufrows[VBF_DEFAULT_HISTORY_SIZE];
+static struct vt_window vt_conswindow = {
+ .vw_number = VT_CONSWINDOW,
+ .vw_flags = VWF_CONSOLE,
+ .vw_buf = {
+ .vb_buffer = &vt_constextbuf[0],
+ .vb_rows = &vt_constextbufrows[0],
+ .vb_history_size = VBF_DEFAULT_HISTORY_SIZE,
+ .vb_curroffset = 0,
+ .vb_roffset = 0,
+ .vb_flags = VBF_STATIC,
+ .vb_mark_start = {.tp_row = 0, .tp_col = 0,},
+ .vb_mark_end = {.tp_row = 0, .tp_col = 0,},
+ .vb_scr_size = {
+ .tp_row = _VTDEFH,
+ .tp_col = _VTDEFW,
+ },
+ },
+ .vw_device = &vt_consdev,
+ .vw_terminal = &vt_consterm,
+ .vw_kbdmode = K_XLATE,
+ .vw_grabbed = 0,
+};
+static struct terminal vt_consterm = {
+ .tm_class = &vt_termclass,
+ .tm_softc = &vt_conswindow,
+ .tm_flags = TF_CONS,
+};
+static struct consdev vt_consterm_consdev = {
+ .cn_ops = &termcn_cnops,
+ .cn_arg = &vt_consterm,
+ .cn_name = "ttyv0",
+};
+
+/* Add to set of consoles. */
+DATA_SET(cons_set, vt_consterm_consdev);
+
+/*
+ * Right after kmem is done to allow early drivers to use locking and allocate
+ * memory.
+ */
+SYSINIT(vt_update_static, SI_SUB_KMEM, SI_ORDER_ANY, vt_update_static,
+ &vt_consdev);
+/* Delay until all devices attached, to not waste time. */
+SYSINIT(vt_early_cons, SI_SUB_INT_CONFIG_HOOKS, SI_ORDER_ANY, vt_upgrade,
+ &vt_consdev);
+
+/* Initialize locks/mem depended members. */
+static void
+vt_update_static(void *dummy)
+{
+
+ if (!vty_enabled(VTY_VT))
+ return;
+ if (main_vd->vd_driver != NULL)
+ printf("VT(%s): %s %ux%u\n", main_vd->vd_driver->vd_name,
+ (main_vd->vd_flags & VDF_TEXTMODE) ? "text" : "resolution",
+ main_vd->vd_width, main_vd->vd_height);
+ else
+ printf("VT: init without driver.\n");
+
+ mtx_init(&main_vd->vd_lock, "vtdev", NULL, MTX_DEF);
+ cv_init(&main_vd->vd_winswitch, "vtwswt");
+}
+
+static void
+vt_schedule_flush(struct vt_device *vd, int ms)
+{
+
+ if (ms <= 0)
+ /* Default to initial value. */
+ ms = 1000 / VT_TIMERFREQ;
+
+ callout_schedule(&vd->vd_timer, hz / (1000 / ms));
+}
+
+static void
+vt_resume_flush_timer(struct vt_device *vd, int ms)
+{
+
+ if (!(vd->vd_flags & VDF_ASYNC) ||
+ !atomic_cmpset_int(&vd->vd_timer_armed, 0, 1))
+ return;
+
+ vt_schedule_flush(vd, ms);
+}
+
+static void
+vt_suspend_flush_timer(struct vt_device *vd)
+{
+ /*
+ * As long as this function is called locked, callout_stop()
+ * has the same effect like callout_drain() with regard to
+ * preventing the callback function from executing.
+ */
+ VT_LOCK_ASSERT(vd, MA_OWNED);
+
+ if (!(vd->vd_flags & VDF_ASYNC) ||
+ !atomic_cmpset_int(&vd->vd_timer_armed, 1, 0))
+ return;
+
+ callout_stop(&vd->vd_timer);
+}
+
+static void
+vt_switch_timer(void *arg)
+{
+
+ vt_late_window_switch((struct vt_window *)arg);
+}
+
+static int
+vt_save_kbd_mode(struct vt_window *vw, keyboard_t *kbd)
+{
+ int mode, ret;
+
+ mode = 0;
+ ret = kbdd_ioctl(kbd, KDGKBMODE, (caddr_t)&mode);
+ if (ret == ENOIOCTL)
+ ret = ENODEV;
+ if (ret != 0)
+ return (ret);
+
+ vw->vw_kbdmode = mode;
+
+ return (0);
+}
+
+static int
+vt_update_kbd_mode(struct vt_window *vw, keyboard_t *kbd)
+{
+ int ret;
+
+ ret = kbdd_ioctl(kbd, KDSKBMODE, (caddr_t)&vw->vw_kbdmode);
+ if (ret == ENOIOCTL)
+ ret = ENODEV;
+
+ return (ret);
+}
+
+static int
+vt_save_kbd_state(struct vt_window *vw, keyboard_t *kbd)
+{
+ int state, ret;
+
+ state = 0;
+ ret = kbdd_ioctl(kbd, KDGKBSTATE, (caddr_t)&state);
+ if (ret == ENOIOCTL)
+ ret = ENODEV;
+ if (ret != 0)
+ return (ret);
+
+ vw->vw_kbdstate &= ~LOCK_MASK;
+ vw->vw_kbdstate |= state & LOCK_MASK;
+
+ return (0);
+}
+
+static int
+vt_update_kbd_state(struct vt_window *vw, keyboard_t *kbd)
+{
+ int state, ret;
+
+ state = vw->vw_kbdstate & LOCK_MASK;
+ ret = kbdd_ioctl(kbd, KDSKBSTATE, (caddr_t)&state);
+ if (ret == ENOIOCTL)
+ ret = ENODEV;
+
+ return (ret);
+}
+
+static int
+vt_save_kbd_leds(struct vt_window *vw, keyboard_t *kbd)
+{
+ int leds, ret;
+
+ leds = 0;
+ ret = kbdd_ioctl(kbd, KDGETLED, (caddr_t)&leds);
+ if (ret == ENOIOCTL)
+ ret = ENODEV;
+ if (ret != 0)
+ return (ret);
+
+ vw->vw_kbdstate &= ~LED_MASK;
+ vw->vw_kbdstate |= leds & LED_MASK;
+
+ return (0);
+}
+
+static int
+vt_update_kbd_leds(struct vt_window *vw, keyboard_t *kbd)
+{
+ int leds, ret;
+
+ leds = vw->vw_kbdstate & LED_MASK;
+ ret = kbdd_ioctl(kbd, KDSETLED, (caddr_t)&leds);
+ if (ret == ENOIOCTL)
+ ret = ENODEV;
+
+ return (ret);
+}
+
+static int
+vt_window_preswitch(struct vt_window *vw, struct vt_window *curvw)
+{
+
+ DPRINTF(40, "%s\n", __func__);
+ curvw->vw_switch_to = vw;
+ /* Set timer to allow switch in case when process hang. */
+ callout_reset(&vw->vw_proc_dead_timer, hz * vt_deadtimer,
+ vt_switch_timer, (void *)vw);
+ /* Notify process about vt switch attempt. */
+ DPRINTF(30, "%s: Notify process.\n", __func__);
+ signal_vt_rel(curvw);
+
+ return (0);
+}
+
+static int
+vt_window_postswitch(struct vt_window *vw)
+{
+
+ signal_vt_acq(vw);
+ return (0);
+}
+
+/* vt_late_window_switch will done VT switching for regular case. */
+static int
+vt_late_window_switch(struct vt_window *vw)
+{
+ int ret;
+
+ callout_stop(&vw->vw_proc_dead_timer);
+
+ ret = vt_window_switch(vw);
+ if (ret)
+ return (ret);
+
+ /* Notify owner process about terminal availability. */
+ if (vw->vw_smode.mode == VT_PROCESS) {
+ ret = vt_window_postswitch(vw);
+ }
+ return (ret);
+}
+
+/* Switch window. */
+static int
+vt_proc_window_switch(struct vt_window *vw)
+{
+ struct vt_window *curvw;
+ struct vt_device *vd;
+ int ret;
+
+ /* Prevent switching to NULL */
+ if (vw == NULL) {
+ DPRINTF(30, "%s: Cannot switch: vw is NULL.", __func__);
+ return (EINVAL);
+ }
+ vd = vw->vw_device;
+ curvw = vd->vd_curwindow;
+
+ /* Check if virtual terminal is locked */
+ if (curvw->vw_flags & VWF_VTYLOCK)
+ return (EBUSY);
+
+ /* Check if switch already in progress */
+ if (curvw->vw_flags & VWF_SWWAIT_REL) {
+ /* Check if switching to same window */
+ if (curvw->vw_switch_to == vw) {
+ DPRINTF(30, "%s: Switch in progress to same vw.", __func__);
+ return (0); /* success */
+ }
+ DPRINTF(30, "%s: Switch in progress to different vw.", __func__);
+ return (EBUSY);
+ }
+
+ /* Avoid switching to already selected window */
+ if (vw == curvw) {
+ DPRINTF(30, "%s: Cannot switch: vw == curvw.", __func__);
+ return (0); /* success */
+ }
+
+ /* Ask current process permission to switch away. */
+ if (curvw->vw_smode.mode == VT_PROCESS) {
+ DPRINTF(30, "%s: VT_PROCESS ", __func__);
+ if (vt_proc_alive(curvw) == FALSE) {
+ DPRINTF(30, "Dead. Cleaning.");
+ /* Dead */
+ } else {
+ DPRINTF(30, "%s: Signaling process.\n", __func__);
+ /* Alive, try to ask him. */
+ ret = vt_window_preswitch(vw, curvw);
+ /* Wait for process answer or timeout. */
+ return (ret);
+ }
+ DPRINTF(30, "\n");
+ }
+
+ ret = vt_late_window_switch(vw);
+ return (ret);
+}
+
+/* Switch window ignoring process locking. */
+static int
+vt_window_switch(struct vt_window *vw)
+{
+ struct vt_device *vd = vw->vw_device;
+ struct vt_window *curvw = vd->vd_curwindow;
+ keyboard_t *kbd;
+
+ VT_LOCK(vd);
+ if (curvw == vw) {
+ /* Nothing to do. */
+ VT_UNLOCK(vd);
+ return (0);
+ }
+ if (!(vw->vw_flags & (VWF_OPENED|VWF_CONSOLE))) {
+ VT_UNLOCK(vd);
+ return (EINVAL);
+ }
+
+ vt_suspend_flush_timer(vd);
+
+ vd->vd_curwindow = vw;
+ vd->vd_flags |= VDF_INVALID;
+ cv_broadcast(&vd->vd_winswitch);
+ VT_UNLOCK(vd);
+
+ if (vd->vd_driver->vd_postswitch)
+ vd->vd_driver->vd_postswitch(vd);
+
+ vt_resume_flush_timer(vd, 0);
+
+ /* Restore per-window keyboard mode. */
+ mtx_lock(&Giant);
+ kbd = kbd_get_keyboard(vd->vd_keyboard);
+ if (kbd != NULL) {
+ if (curvw->vw_kbdmode == K_XLATE)
+ vt_save_kbd_state(curvw, kbd);
+
+ vt_update_kbd_mode(vw, kbd);
+ vt_update_kbd_state(vw, kbd);
+ }
+ mtx_unlock(&Giant);
+ DPRINTF(10, "%s(ttyv%d) done\n", __func__, vw->vw_number);
+
+ return (0);
+}
+
+static inline void
+vt_termsize(struct vt_device *vd, struct vt_font *vf, term_pos_t *size)
+{
+
+ size->tp_row = vd->vd_height;
+ size->tp_col = vd->vd_width;
+ if (vf != NULL) {
+ size->tp_row /= vf->vf_height;
+ size->tp_col /= vf->vf_width;
+ }
+}
+
+static inline void
+vt_winsize(struct vt_device *vd, struct vt_font *vf, struct winsize *size)
+{
+
+ size->ws_row = size->ws_ypixel = vd->vd_height;
+ size->ws_col = size->ws_xpixel = vd->vd_width;
+ if (vf != NULL) {
+ size->ws_row /= vf->vf_height;
+ size->ws_col /= vf->vf_width;
+ }
+}
+
+static inline void
+vt_compute_drawable_area(struct vt_window *vw)
+{
+ struct vt_device *vd;
+ struct vt_font *vf;
+
+ vd = vw->vw_device;
+
+ if (vw->vw_font == NULL) {
+ vw->vw_draw_area.tr_begin.tp_col = 0;
+ vw->vw_draw_area.tr_begin.tp_row = 0;
+ vw->vw_draw_area.tr_end.tp_col = vd->vd_width;
+ vw->vw_draw_area.tr_end.tp_row = vd->vd_height;
+ return;
+ }
+
+ vf = vw->vw_font;
+
+ /*
+ * Compute the drawable area, so that the text is centered on
+ * the screen.
+ */
+
+ vw->vw_draw_area.tr_begin.tp_col = (vd->vd_width % vf->vf_width) / 2;
+ vw->vw_draw_area.tr_begin.tp_row = (vd->vd_height % vf->vf_height) / 2;
+ vw->vw_draw_area.tr_end.tp_col = vw->vw_draw_area.tr_begin.tp_col +
+ vd->vd_width / vf->vf_width * vf->vf_width;
+ vw->vw_draw_area.tr_end.tp_row = vw->vw_draw_area.tr_begin.tp_row +
+ vd->vd_height / vf->vf_height * vf->vf_height;
+}
+
+static void
+vt_scroll(struct vt_window *vw, int offset, int whence)
+{
+ int diff;
+ term_pos_t size;
+
+ if ((vw->vw_flags & VWF_SCROLL) == 0)
+ return;
+
+ vt_termsize(vw->vw_device, vw->vw_font, &size);
+
+ diff = vthistory_seek(&vw->vw_buf, offset, whence);
+ if (diff)
+ vw->vw_device->vd_flags |= VDF_INVALID;
+ vt_resume_flush_timer(vw->vw_device, 0);
+}
+
+static int
+vt_machine_kbdevent(int c)
+{
+
+ switch (c) {
+ case SPCLKEY | DBG: /* kbdmap(5) keyword `debug`. */
+ if (vt_kbd_debug)
+ kdb_enter(KDB_WHY_BREAK, "manual escape to debugger");
+ return (1);
+ case SPCLKEY | HALT: /* kbdmap(5) keyword `halt`. */
+ if (vt_kbd_halt)
+ shutdown_nice(RB_HALT);
+ return (1);
+ case SPCLKEY | PASTE: /* kbdmap(5) keyword `paste`. */
+#ifndef SC_NO_CUTPASTE
+ /* Insert text from cut-paste buffer. */
+ vt_mouse_paste();
+#endif
+ break;
+ case SPCLKEY | PDWN: /* kbdmap(5) keyword `pdwn`. */
+ if (vt_kbd_poweroff)
+ shutdown_nice(RB_HALT|RB_POWEROFF);
+ return (1);
+ case SPCLKEY | PNC: /* kbdmap(5) keyword `panic`. */
+ /*
+ * Request to immediate panic if sysctl
+ * kern.vt.enable_panic_key allow it.
+ */
+ if (vt_kbd_panic)
+ panic("Forced by the panic key");
+ return (1);
+ case SPCLKEY | RBT: /* kbdmap(5) keyword `boot`. */
+ if (vt_kbd_reboot)
+ shutdown_nice(RB_AUTOBOOT);
+ return (1);
+ case SPCLKEY | SPSC: /* kbdmap(5) keyword `spsc`. */
+ /* Force activatation/deactivation of the screen saver. */
+ /* TODO */
+ return (1);
+ case SPCLKEY | STBY: /* XXX Not present in kbdcontrol parser. */
+ /* Put machine into Stand-By mode. */
+ power_pm_suspend(POWER_SLEEP_STATE_STANDBY);
+ return (1);
+ case SPCLKEY | SUSP: /* kbdmap(5) keyword `susp`. */
+ /* Suspend machine. */
+ power_pm_suspend(POWER_SLEEP_STATE_SUSPEND);
+ return (1);
+ };
+
+ return (0);
+}
+
+static void
+vt_scrollmode_kbdevent(struct vt_window *vw, int c, int console)
+{
+ struct vt_device *vd;
+ term_pos_t size;
+
+ vd = vw->vw_device;
+ /* Only special keys handled in ScrollLock mode */
+ if ((c & SPCLKEY) == 0)
+ return;
+
+ c &= ~SPCLKEY;
+
+ if (console == 0) {
+ if (c >= F_SCR && c <= MIN(L_SCR, F_SCR + VT_MAXWINDOWS - 1)) {
+ vw = vd->vd_windows[c - F_SCR];
+ vt_proc_window_switch(vw);
+ return;
+ }
+ VT_LOCK(vd);
+ }
+
+ switch (c) {
+ case SLK: {
+ /* Turn scrolling off. */
+ vt_scroll(vw, 0, VHS_END);
+ VTBUF_SLCK_DISABLE(&vw->vw_buf);
+ vw->vw_flags &= ~VWF_SCROLL;
+ break;
+ }
+ case FKEY | F(49): /* Home key. */
+ vt_scroll(vw, 0, VHS_SET);
+ break;
+ case FKEY | F(50): /* Arrow up. */
+ vt_scroll(vw, -1, VHS_CUR);
+ break;
+ case FKEY | F(51): /* Page up. */
+ vt_termsize(vd, vw->vw_font, &size);
+ vt_scroll(vw, -size.tp_row, VHS_CUR);
+ break;
+ case FKEY | F(57): /* End key. */
+ vt_scroll(vw, 0, VHS_END);
+ break;
+ case FKEY | F(58): /* Arrow down. */
+ vt_scroll(vw, 1, VHS_CUR);
+ break;
+ case FKEY | F(59): /* Page down. */
+ vt_termsize(vd, vw->vw_font, &size);
+ vt_scroll(vw, size.tp_row, VHS_CUR);
+ break;
+ }
+
+ if (console == 0)
+ VT_UNLOCK(vd);
+}
+
+static int
+vt_processkey(keyboard_t *kbd, struct vt_device *vd, int c)
+{
+ struct vt_window *vw = vd->vd_curwindow;
+
+#if VT_ALT_TO_ESC_HACK
+ if (c & RELKEY) {
+ switch (c & ~RELKEY) {
+ case (SPCLKEY | RALT):
+ if (vt_enable_altgr != 0)
+ break;
+ case (SPCLKEY | LALT):
+ vd->vd_kbstate &= ~ALKED;
+ }
+ /* Other keys ignored for RELKEY event. */
+ return (0);
+ } else {
+ switch (c & ~RELKEY) {
+ case (SPCLKEY | RALT):
+ if (vt_enable_altgr != 0)
+ break;
+ case (SPCLKEY | LALT):
+ vd->vd_kbstate |= ALKED;
+ }
+ }
+#else
+ if (c & RELKEY)
+ /* Other keys ignored for RELKEY event. */
+ return (0);
+#endif
+
+ if (vt_machine_kbdevent(c))
+ return (0);
+
+ if (vw->vw_flags & VWF_SCROLL) {
+ vt_scrollmode_kbdevent(vw, c, 0/* Not a console */);
+ /* Scroll mode keys handled, nothing to do more. */
+ return (0);
+ }
+
+ if (c & SPCLKEY) {
+ c &= ~SPCLKEY;
+
+ if (c >= F_SCR && c <= MIN(L_SCR, F_SCR + VT_MAXWINDOWS - 1)) {
+ vw = vd->vd_windows[c - F_SCR];
+ vt_proc_window_switch(vw);
+ return (0);
+ }
+
+ switch (c) {
+ case NEXT:
+ /* Switch to next VT. */
+ c = (vw->vw_number + 1) % VT_MAXWINDOWS;
+ vw = vd->vd_windows[c];
+ vt_proc_window_switch(vw);
+ return (0);
+ case PREV:
+ /* Switch to previous VT. */
+ c = (vw->vw_number + VT_MAXWINDOWS - 1) % VT_MAXWINDOWS;
+ vw = vd->vd_windows[c];
+ vt_proc_window_switch(vw);
+ return (0);
+ case SLK: {
+ vt_save_kbd_state(vw, kbd);
+ VT_LOCK(vd);
+ if (vw->vw_kbdstate & SLKED) {
+ /* Turn scrolling on. */
+ vw->vw_flags |= VWF_SCROLL;
+ VTBUF_SLCK_ENABLE(&vw->vw_buf);
+ } else {
+ /* Turn scrolling off. */
+ vw->vw_flags &= ~VWF_SCROLL;
+ VTBUF_SLCK_DISABLE(&vw->vw_buf);
+ vt_scroll(vw, 0, VHS_END);
+ }
+ VT_UNLOCK(vd);
+ break;
+ }
+ case FKEY | F(1): case FKEY | F(2): case FKEY | F(3):
+ case FKEY | F(4): case FKEY | F(5): case FKEY | F(6):
+ case FKEY | F(7): case FKEY | F(8): case FKEY | F(9):
+ case FKEY | F(10): case FKEY | F(11): case FKEY | F(12):
+ /* F1 through F12 keys. */
+ terminal_input_special(vw->vw_terminal,
+ TKEY_F1 + c - (FKEY | F(1)));
+ break;
+ case FKEY | F(49): /* Home key. */
+ terminal_input_special(vw->vw_terminal, TKEY_HOME);
+ break;
+ case FKEY | F(50): /* Arrow up. */
+ terminal_input_special(vw->vw_terminal, TKEY_UP);
+ break;
+ case FKEY | F(51): /* Page up. */
+ terminal_input_special(vw->vw_terminal, TKEY_PAGE_UP);
+ break;
+ case FKEY | F(53): /* Arrow left. */
+ terminal_input_special(vw->vw_terminal, TKEY_LEFT);
+ break;
+ case FKEY | F(55): /* Arrow right. */
+ terminal_input_special(vw->vw_terminal, TKEY_RIGHT);
+ break;
+ case FKEY | F(57): /* End key. */
+ terminal_input_special(vw->vw_terminal, TKEY_END);
+ break;
+ case FKEY | F(58): /* Arrow down. */
+ terminal_input_special(vw->vw_terminal, TKEY_DOWN);
+ break;
+ case FKEY | F(59): /* Page down. */
+ terminal_input_special(vw->vw_terminal, TKEY_PAGE_DOWN);
+ break;
+ case FKEY | F(60): /* Insert key. */
+ terminal_input_special(vw->vw_terminal, TKEY_INSERT);
+ break;
+ case FKEY | F(61): /* Delete key. */
+ terminal_input_special(vw->vw_terminal, TKEY_DELETE);
+ break;
+ }
+ } else if (KEYFLAGS(c) == 0) {
+ /* Don't do UTF-8 conversion when doing raw mode. */
+ if (vw->vw_kbdmode == K_XLATE) {
+#if VT_ALT_TO_ESC_HACK
+ if (vd->vd_kbstate & ALKED) {
+ /*
+ * Prepend ESC sequence if one of ALT keys down.
+ */
+ terminal_input_char(vw->vw_terminal, 0x1b);
+ }
+#endif
+#if defined(KDB)
+ kdb_alt_break(c, &vd->vd_altbrk);
+#endif
+ terminal_input_char(vw->vw_terminal, KEYCHAR(c));
+ } else
+ terminal_input_raw(vw->vw_terminal, c);
+ }
+ return (0);
+}
+
+static int
+vt_kbdevent(keyboard_t *kbd, int event, void *arg)
+{
+ struct vt_device *vd = arg;
+ int c;
+
+ switch (event) {
+ case KBDIO_KEYINPUT:
+ break;
+ case KBDIO_UNLOADING:
+ mtx_lock(&Giant);
+ vd->vd_keyboard = -1;
+ kbd_release(kbd, (void *)vd);
+ mtx_unlock(&Giant);
+ return (0);
+ default:
+ return (EINVAL);
+ }
+
+ while ((c = kbdd_read_char(kbd, 0)) != NOKEY)
+ vt_processkey(kbd, vd, c);
+
+ return (0);
+}
+
+static int
+vt_allocate_keyboard(struct vt_device *vd)
+{
+ int idx0, idx;
+ keyboard_t *k0, *k;
+ keyboard_info_t ki;
+
+ idx0 = kbd_allocate("kbdmux", -1, vd, vt_kbdevent, vd);
+ if (idx0 >= 0) {
+ DPRINTF(20, "%s: kbdmux allocated, idx = %d\n", __func__, idx0);
+ k0 = kbd_get_keyboard(idx0);
+
+ for (idx = kbd_find_keyboard2("*", -1, 0);
+ idx != -1;
+ idx = kbd_find_keyboard2("*", -1, idx + 1)) {
+ k = kbd_get_keyboard(idx);
+
+ if (idx == idx0 || KBD_IS_BUSY(k))
+ continue;
+
+ bzero(&ki, sizeof(ki));
+ strncpy(ki.kb_name, k->kb_name, sizeof(ki.kb_name));
+ ki.kb_name[sizeof(ki.kb_name) - 1] = '\0';
+ ki.kb_unit = k->kb_unit;
+
+ kbdd_ioctl(k0, KBADDKBD, (caddr_t) &ki);
+ }
+ } else {
+ DPRINTF(20, "%s: no kbdmux allocated\n", __func__);
+ idx0 = kbd_allocate("*", -1, vd, vt_kbdevent, vd);
+ if (idx0 < 0) {
+ DPRINTF(10, "%s: No keyboard found.\n", __func__);
+ return (-1);
+ }
+ }
+ vd->vd_keyboard = idx0;
+ DPRINTF(20, "%s: vd_keyboard = %d\n", __func__, vd->vd_keyboard);
+
+ return (idx0);
+}
+
+static void
+vtterm_bell(struct terminal *tm)
+{
+ struct vt_window *vw = tm->tm_softc;
+ struct vt_device *vd = vw->vw_device;
+
+ if (!vt_enable_bell)
+ return;
+
+ if (vd->vd_flags & VDF_QUIET_BELL)
+ return;
+
+ sysbeep(1193182 / VT_BELLPITCH, VT_BELLDURATION);
+}
+
+static void
+vtterm_beep(struct terminal *tm, u_int param)
+{
+ u_int freq, period;
+
+ if (!vt_enable_bell)
+ return;
+
+ if ((param == 0) || ((param & 0xffff) == 0)) {
+ vtterm_bell(tm);
+ return;
+ }
+
+ period = ((param >> 16) & 0xffff) * hz / 1000;
+ freq = 1193182 / (param & 0xffff);
+
+ sysbeep(freq, period);
+}
+
+static void
+vtterm_cursor(struct terminal *tm, const term_pos_t *p)
+{
+ struct vt_window *vw = tm->tm_softc;
+
+ vtbuf_cursor_position(&vw->vw_buf, p);
+ vt_resume_flush_timer(vw->vw_device, 0);
+}
+
+static void
+vtterm_putchar(struct terminal *tm, const term_pos_t *p, term_char_t c)
+{
+ struct vt_window *vw = tm->tm_softc;
+
+ vtbuf_putchar(&vw->vw_buf, p, c);
+ vt_resume_flush_timer(vw->vw_device, 0);
+}
+
+static void
+vtterm_fill(struct terminal *tm, const term_rect_t *r, term_char_t c)
+{
+ struct vt_window *vw = tm->tm_softc;
+
+ vtbuf_fill_locked(&vw->vw_buf, r, c);
+ vt_resume_flush_timer(vw->vw_device, 0);
+}
+
+static void
+vtterm_copy(struct terminal *tm, const term_rect_t *r,
+ const term_pos_t *p)
+{
+ struct vt_window *vw = tm->tm_softc;
+
+ vtbuf_copy(&vw->vw_buf, r, p);
+ vt_resume_flush_timer(vw->vw_device, 0);
+}
+
+static void
+vtterm_param(struct terminal *tm, int cmd, unsigned int arg)
+{
+ struct vt_window *vw = tm->tm_softc;
+
+ switch (cmd) {
+ case TP_SHOWCURSOR:
+ vtbuf_cursor_visibility(&vw->vw_buf, arg);
+ vt_resume_flush_timer(vw->vw_device, 0);
+ break;
+ case TP_MOUSE:
+ vw->vw_mouse_level = arg;
+ break;
+ }
+}
+
+void
+vt_determine_colors(term_char_t c, int cursor,
+ term_color_t *fg, term_color_t *bg)
+{
+ term_color_t tmp;
+ int invert;
+
+ invert = 0;
+
+ *fg = TCHAR_FGCOLOR(c);
+ if (TCHAR_FORMAT(c) & TF_BOLD)
+ *fg = TCOLOR_LIGHT(*fg);
+ *bg = TCHAR_BGCOLOR(c);
+
+ if (TCHAR_FORMAT(c) & TF_REVERSE)
+ invert ^= 1;
+ if (cursor)
+ invert ^= 1;
+
+ if (invert) {
+ tmp = *fg;
+ *fg = *bg;
+ *bg = tmp;
+ }
+}
+
+#ifndef SC_NO_CUTPASTE
+int
+vt_is_cursor_in_area(const struct vt_device *vd, const term_rect_t *area)
+{
+ unsigned int mx, my;
+
+ /*
+ * We use the cursor position saved during the current refresh,
+ * in case the cursor moved since.
+ */
+ mx = vd->vd_mx_drawn + vd->vd_curwindow->vw_draw_area.tr_begin.tp_col;
+ my = vd->vd_my_drawn + vd->vd_curwindow->vw_draw_area.tr_begin.tp_row;
+
+ if (mx >= area->tr_end.tp_col ||
+ mx + vd->vd_mcursor->width <= area->tr_begin.tp_col ||
+ my >= area->tr_end.tp_row ||
+ my + vd->vd_mcursor->height <= area->tr_begin.tp_row)
+ return (0);
+ return (1);
+}
+
+static void
+vt_mark_mouse_position_as_dirty(struct vt_device *vd)
+{
+ term_rect_t area;
+ struct vt_window *vw;
+ struct vt_font *vf;
+ int x, y;
+
+ vw = vd->vd_curwindow;
+ vf = vw->vw_font;
+
+ x = vd->vd_mx_drawn;
+ y = vd->vd_my_drawn;
+
+ if (vf != NULL) {
+ area.tr_begin.tp_col = x / vf->vf_width;
+ area.tr_begin.tp_row = y / vf->vf_height;
+ area.tr_end.tp_col =
+ ((x + vd->vd_mcursor->width) / vf->vf_width) + 1;
+ area.tr_end.tp_row =
+ ((y + vd->vd_mcursor->height) / vf->vf_height) + 1;
+ } else {
+ /*
+ * No font loaded (ie. vt_vga operating in textmode).
+ *
+ * FIXME: This fake area needs to be revisited once the
+ * mouse cursor is supported in vt_vga's textmode.
+ */
+ area.tr_begin.tp_col = x;
+ area.tr_begin.tp_row = y;
+ area.tr_end.tp_col = x + 2;
+ area.tr_end.tp_row = y + 2;
+ }
+
+ vtbuf_dirty(&vw->vw_buf, &area);
+}
+#endif
+
+static int
+vt_flush(struct vt_device *vd)
+{
+ struct vt_window *vw;
+ struct vt_font *vf;
+ term_rect_t tarea;
+ term_pos_t size;
+#ifndef SC_NO_CUTPASTE
+ int cursor_was_shown, cursor_moved;
+#endif
+
+ vw = vd->vd_curwindow;
+ if (vw == NULL)
+ return (0);
+
+ if (vd->vd_flags & VDF_SPLASH || vw->vw_flags & VWF_BUSY)
+ return (0);
+
+ vf = vw->vw_font;
+ if (((vd->vd_flags & VDF_TEXTMODE) == 0) && (vf == NULL))
+ return (0);
+
+#ifndef SC_NO_CUTPASTE
+ cursor_was_shown = vd->vd_mshown;
+ cursor_moved = (vd->vd_mx != vd->vd_mx_drawn ||
+ vd->vd_my != vd->vd_my_drawn);
+
+ /* Check if the cursor should be displayed or not. */
+ if ((vd->vd_flags & VDF_MOUSECURSOR) && /* Mouse support enabled. */
+ !(vw->vw_flags & VWF_MOUSE_HIDE) && /* Cursor displayed. */
+ !kdb_active && panicstr == NULL) { /* DDB inactive. */
+ vd->vd_mshown = 1;
+ } else {
+ vd->vd_mshown = 0;
+ }
+
+ /*
+ * If the cursor changed display state or moved, we must mark
+ * the old position as dirty, so that it's erased.
+ */
+ if (cursor_was_shown != vd->vd_mshown ||
+ (vd->vd_mshown && cursor_moved))
+ vt_mark_mouse_position_as_dirty(vd);
+
+ /*
+ * Save position of the mouse cursor. It's used by backends to
+ * know where to draw the cursor and during the next refresh to
+ * erase the previous position.
+ */
+ vd->vd_mx_drawn = vd->vd_mx;
+ vd->vd_my_drawn = vd->vd_my;
+
+ /*
+ * If the cursor is displayed and has moved since last refresh,
+ * mark the new position as dirty.
+ */
+ if (vd->vd_mshown && cursor_moved)
+ vt_mark_mouse_position_as_dirty(vd);
+#endif
+
+ vtbuf_undirty(&vw->vw_buf, &tarea);
+ vt_termsize(vd, vf, &size);
+
+ /* Force a full redraw when the screen contents are invalid. */
+ if (vd->vd_flags & VDF_INVALID) {
+ tarea.tr_begin.tp_row = tarea.tr_begin.tp_col = 0;
+ tarea.tr_end = size;
+
+ vd->vd_flags &= ~VDF_INVALID;
+ }
+
+ if (tarea.tr_begin.tp_col < tarea.tr_end.tp_col) {
+ vd->vd_driver->vd_bitblt_text(vd, vw, &tarea);
+ return (1);
+ }
+
+ return (0);
+}
+
+static void
+vt_timer(void *arg)
+{
+ struct vt_device *vd;
+ int changed;
+
+ vd = arg;
+ /* Update screen if required. */
+ changed = vt_flush(vd);
+
+ /* Schedule for next update. */
+ if (changed)
+ vt_schedule_flush(vd, 0);
+ else
+ vd->vd_timer_armed = 0;
+}
+
+static void
+vtterm_done(struct terminal *tm)
+{
+ struct vt_window *vw = tm->tm_softc;
+ struct vt_device *vd = vw->vw_device;
+
+ if (kdb_active || panicstr != NULL) {
+ /* Switch to the debugger. */
+ if (vd->vd_curwindow != vw) {
+ vd->vd_curwindow = vw;
+ vd->vd_flags |= VDF_INVALID;
+ if (vd->vd_driver->vd_postswitch)
+ vd->vd_driver->vd_postswitch(vd);
+ }
+ vd->vd_flags &= ~VDF_SPLASH;
+ vt_flush(vd);
+ } else if (!(vd->vd_flags & VDF_ASYNC)) {
+ vt_flush(vd);
+ }
+}
+
+#ifdef DEV_SPLASH
+static void
+vtterm_splash(struct vt_device *vd)
+{
+ vt_axis_t top, left;
+
+ /* Display a nice boot splash. */
+ if (!(vd->vd_flags & VDF_TEXTMODE) && (boothowto & RB_MUTE)) {
+
+ top = (vd->vd_height - vt_logo_height) / 2;
+ left = (vd->vd_width - vt_logo_width) / 2;
+ switch (vt_logo_depth) {
+ case 1:
+ /* XXX: Unhardcode colors! */
+ vd->vd_driver->vd_bitblt_bmp(vd, vd->vd_curwindow,
+ vt_logo_image, NULL, vt_logo_width, vt_logo_height,
+ left, top, TC_WHITE, TC_BLACK);
+ }
+ vd->vd_flags |= VDF_SPLASH;
+ }
+}
+#endif
+
+
+static void
+vtterm_cnprobe(struct terminal *tm, struct consdev *cp)
+{
+ struct vt_driver *vtd, **vtdlist, *vtdbest = NULL;
+ struct vt_window *vw = tm->tm_softc;
+ struct vt_device *vd = vw->vw_device;
+ struct winsize wsz;
+ term_attr_t attr;
+ term_char_t c;
+
+ if (!vty_enabled(VTY_VT))
+ return;
+
+ if (vd->vd_flags & VDF_INITIALIZED)
+ /* Initialization already done. */
+ return;
+
+ SET_FOREACH(vtdlist, vt_drv_set) {
+ vtd = *vtdlist;
+ if (vtd->vd_probe == NULL)
+ continue;
+ if (vtd->vd_probe(vd) == CN_DEAD)
+ continue;
+ if ((vtdbest == NULL) ||
+ (vtd->vd_priority > vtdbest->vd_priority))
+ vtdbest = vtd;
+ }
+ if (vtdbest == NULL) {
+ cp->cn_pri = CN_DEAD;
+ vd->vd_flags |= VDF_DEAD;
+ } else {
+ vd->vd_driver = vtdbest;
+ cp->cn_pri = vd->vd_driver->vd_init(vd);
+ }
+
+ /* Check if driver's vt_init return CN_DEAD. */
+ if (cp->cn_pri == CN_DEAD) {
+ vd->vd_flags |= VDF_DEAD;
+ }
+
+ /* Initialize any early-boot keyboard drivers */
+ kbd_configure(KB_CONF_PROBE_ONLY);
+
+ vd->vd_unit = atomic_fetchadd_int(&vt_unit, 1);
+ vd->vd_windows[VT_CONSWINDOW] = vw;
+ sprintf(cp->cn_name, "ttyv%r", VT_UNIT(vw));
+
+ /* Attach default font if not in TEXTMODE. */
+ if ((vd->vd_flags & VDF_TEXTMODE) == 0) {
+ vw->vw_font = vtfont_ref(&vt_font_default);
+ vt_compute_drawable_area(vw);
+ }
+
+ /*
+ * The original screen size was faked (_VTDEFW x _VTDEFH). Now
+ * that we have the real viewable size, fix it in the static
+ * buffer.
+ */
+ if (vd->vd_width != 0 && vd->vd_height != 0)
+ vt_termsize(vd, vw->vw_font, &vw->vw_buf.vb_scr_size);
+
+ vtbuf_init_early(&vw->vw_buf);
+ vt_winsize(vd, vw->vw_font, &wsz);
+ c = (boothowto & RB_MUTE) == 0 ? TERMINAL_KERN_ATTR :
+ TERMINAL_NORM_ATTR;
+ attr.ta_format = TCHAR_FORMAT(c);
+ attr.ta_fgcolor = TCHAR_FGCOLOR(c);
+ attr.ta_bgcolor = TCHAR_BGCOLOR(c);
+ terminal_set_winsize_blank(tm, &wsz, 1, &attr);
+
+ if (vtdbest != NULL) {
+#ifdef DEV_SPLASH
+ vtterm_splash(vd);
+#endif
+ vd->vd_flags |= VDF_INITIALIZED;
+ }
+}
+
+static int
+vtterm_cngetc(struct terminal *tm)
+{
+ struct vt_window *vw = tm->tm_softc;
+ struct vt_device *vd = vw->vw_device;
+ keyboard_t *kbd;
+ u_int c;
+
+ if (vw->vw_kbdsq && *vw->vw_kbdsq)
+ return (*vw->vw_kbdsq++);
+
+ /* Make sure the splash screen is not there. */
+ if (vd->vd_flags & VDF_SPLASH) {
+ /* Remove splash */
+ vd->vd_flags &= ~VDF_SPLASH;
+ /* Mark screen as invalid to force update */
+ vd->vd_flags |= VDF_INVALID;
+ vt_flush(vd);
+ }
+
+ /* Stripped down keyboard handler. */
+ kbd = kbd_get_keyboard(vd->vd_keyboard);
+ if (kbd == NULL)
+ return (-1);
+
+ /* Force keyboard input mode to K_XLATE */
+ vw->vw_kbdmode = K_XLATE;
+ vt_update_kbd_mode(vw, kbd);
+
+ /* Switch the keyboard to polling to make it work here. */
+ kbdd_poll(kbd, TRUE);
+ c = kbdd_read_char(kbd, 0);
+ kbdd_poll(kbd, FALSE);
+ if (c & RELKEY)
+ return (-1);
+
+ if (vw->vw_flags & VWF_SCROLL) {
+ vt_scrollmode_kbdevent(vw, c, 1/* Console mode */);
+ vt_flush(vd);
+ return (-1);
+ }
+
+ /* Stripped down handling of vt_kbdevent(), without locking, etc. */
+ if (c & SPCLKEY) {
+ switch (c) {
+ case SPCLKEY | SLK:
+ vt_save_kbd_state(vw, kbd);
+ if (vw->vw_kbdstate & SLKED) {
+ /* Turn scrolling on. */
+ vw->vw_flags |= VWF_SCROLL;
+ VTBUF_SLCK_ENABLE(&vw->vw_buf);
+ } else {
+ /* Turn scrolling off. */
+ vt_scroll(vw, 0, VHS_END);
+ vw->vw_flags &= ~VWF_SCROLL;
+ VTBUF_SLCK_DISABLE(&vw->vw_buf);
+ }
+ break;
+ /* XXX: KDB can handle history. */
+ case SPCLKEY | FKEY | F(50): /* Arrow up. */
+ vw->vw_kbdsq = "\x1b[A";
+ break;
+ case SPCLKEY | FKEY | F(58): /* Arrow down. */
+ vw->vw_kbdsq = "\x1b[B";
+ break;
+ case SPCLKEY | FKEY | F(55): /* Arrow right. */
+ vw->vw_kbdsq = "\x1b[C";
+ break;
+ case SPCLKEY | FKEY | F(53): /* Arrow left. */
+ vw->vw_kbdsq = "\x1b[D";
+ break;
+ }
+
+ /* Force refresh to make scrollback work. */
+ vt_flush(vd);
+ } else if (KEYFLAGS(c) == 0) {
+ return (KEYCHAR(c));
+ }
+
+ if (vw->vw_kbdsq && *vw->vw_kbdsq)
+ return (*vw->vw_kbdsq++);
+
+ return (-1);
+}
+
+static void
+vtterm_cngrab(struct terminal *tm)
+{
+ struct vt_device *vd;
+ struct vt_window *vw;
+ keyboard_t *kbd;
+
+ vw = tm->tm_softc;
+ vd = vw->vw_device;
+
+ if (!cold)
+ vt_window_switch(vw);
+
+ kbd = kbd_get_keyboard(vd->vd_keyboard);
+ if (kbd == NULL)
+ return;
+
+ if (vw->vw_grabbed++ > 0)
+ return;
+
+ /*
+ * Make sure the keyboard is accessible even when the kbd device
+ * driver is disabled.
+ */
+ kbdd_enable(kbd);
+
+ /* We shall always use the keyboard in the XLATE mode here. */
+ vw->vw_prev_kbdmode = vw->vw_kbdmode;
+ vw->vw_kbdmode = K_XLATE;
+ vt_update_kbd_mode(vw, kbd);
+
+ kbdd_poll(kbd, TRUE);
+}
+
+static void
+vtterm_cnungrab(struct terminal *tm)
+{
+ struct vt_device *vd;
+ struct vt_window *vw;
+ keyboard_t *kbd;
+
+ vw = tm->tm_softc;
+ vd = vw->vw_device;
+
+ kbd = kbd_get_keyboard(vd->vd_keyboard);
+ if (kbd == NULL)
+ return;
+
+ if (--vw->vw_grabbed > 0)
+ return;
+
+ kbdd_poll(kbd, FALSE);
+
+ vw->vw_kbdmode = vw->vw_prev_kbdmode;
+ vt_update_kbd_mode(vw, kbd);
+ kbdd_disable(kbd);
+}
+
+static void
+vtterm_opened(struct terminal *tm, int opened)
+{
+ struct vt_window *vw = tm->tm_softc;
+ struct vt_device *vd = vw->vw_device;
+
+ VT_LOCK(vd);
+ vd->vd_flags &= ~VDF_SPLASH;
+ if (opened)
+ vw->vw_flags |= VWF_OPENED;
+ else {
+ vw->vw_flags &= ~VWF_OPENED;
+ /* TODO: finish ACQ/REL */
+ }
+ VT_UNLOCK(vd);
+}
+
+static int
+vt_set_border(struct vt_window *vw, term_color_t c)
+{
+ struct vt_device *vd = vw->vw_device;
+
+ if (vd->vd_driver->vd_drawrect == NULL)
+ return (ENOTSUP);
+
+ /* Top bar. */
+ if (vw->vw_draw_area.tr_begin.tp_row > 0)
+ vd->vd_driver->vd_drawrect(vd,
+ 0, 0,
+ vd->vd_width - 1, vw->vw_draw_area.tr_begin.tp_row - 1,
+ 1, c);
+
+ /* Left bar. */
+ if (vw->vw_draw_area.tr_begin.tp_col > 0)
+ vd->vd_driver->vd_drawrect(vd,
+ 0, 0,
+ vw->vw_draw_area.tr_begin.tp_col - 1, vd->vd_height - 1,
+ 1, c);
+
+ /* Right bar. */
+ if (vw->vw_draw_area.tr_end.tp_col < vd->vd_width)
+ vd->vd_driver->vd_drawrect(vd,
+ vw->vw_draw_area.tr_end.tp_col - 1, 0,
+ vd->vd_width - 1, vd->vd_height - 1,
+ 1, c);
+
+ /* Bottom bar. */
+ if (vw->vw_draw_area.tr_end.tp_row < vd->vd_height)
+ vd->vd_driver->vd_drawrect(vd,
+ 0, vw->vw_draw_area.tr_end.tp_row - 1,
+ vd->vd_width - 1, vd->vd_height - 1,
+ 1, c);
+
+ return (0);
+}
+
+static int
+vt_change_font(struct vt_window *vw, struct vt_font *vf)
+{
+ struct vt_device *vd = vw->vw_device;
+ struct terminal *tm = vw->vw_terminal;
+ term_pos_t size;
+ struct winsize wsz;
+
+ /*
+ * Changing fonts.
+ *
+ * Changing fonts is a little tricky. We must prevent
+ * simultaneous access to the device, so we must stop
+ * the display timer and the terminal from accessing.
+ * We need to switch fonts and grow our screen buffer.
+ *
+ * XXX: Right now the code uses terminal_mute() to
+ * prevent data from reaching the console driver while
+ * resizing the screen buffer. This isn't elegant...
+ */
+
+ VT_LOCK(vd);
+ if (vw->vw_flags & VWF_BUSY) {
+ /* Another process is changing the font. */
+ VT_UNLOCK(vd);
+ return (EBUSY);
+ }
+ vw->vw_flags |= VWF_BUSY;
+ VT_UNLOCK(vd);
+
+ vt_termsize(vd, vf, &size);
+ vt_winsize(vd, vf, &wsz);
+
+ /* Grow the screen buffer and terminal. */
+ terminal_mute(tm, 1);
+ vtbuf_grow(&vw->vw_buf, &size, vw->vw_buf.vb_history_size);
+ terminal_set_winsize_blank(tm, &wsz, 0, NULL);
+ terminal_set_cursor(tm, &vw->vw_buf.vb_cursor);
+ terminal_mute(tm, 0);
+
+ /* Actually apply the font to the current window. */
+ VT_LOCK(vd);
+ if (vw->vw_font != vf && vw->vw_font != NULL && vf != NULL) {
+ /*
+ * In case vt_change_font called to update size we don't need
+ * to update font link.
+ */
+ vtfont_unref(vw->vw_font);
+ vw->vw_font = vtfont_ref(vf);
+ }
+
+ /*
+ * Compute the drawable area and move the mouse cursor inside
+ * it, in case the new area is smaller than the previous one.
+ */
+ vt_compute_drawable_area(vw);
+ vd->vd_mx = min(vd->vd_mx,
+ vw->vw_draw_area.tr_end.tp_col -
+ vw->vw_draw_area.tr_begin.tp_col - 1);
+ vd->vd_my = min(vd->vd_my,
+ vw->vw_draw_area.tr_end.tp_row -
+ vw->vw_draw_area.tr_begin.tp_row - 1);
+
+ /* Force a full redraw the next timer tick. */
+ if (vd->vd_curwindow == vw) {
+ vt_set_border(vw, TC_BLACK);
+ vd->vd_flags |= VDF_INVALID;
+ vt_resume_flush_timer(vw->vw_device, 0);
+ }
+ vw->vw_flags &= ~VWF_BUSY;
+ VT_UNLOCK(vd);
+ return (0);
+}
+
+static int
+vt_proc_alive(struct vt_window *vw)
+{
+ struct proc *p;
+
+ if (vw->vw_smode.mode != VT_PROCESS)
+ return (FALSE);
+
+ if (vw->vw_proc) {
+ if ((p = pfind(vw->vw_pid)) != NULL)
+ PROC_UNLOCK(p);
+ if (vw->vw_proc == p)
+ return (TRUE);
+ vw->vw_proc = NULL;
+ vw->vw_smode.mode = VT_AUTO;
+ DPRINTF(1, "vt controlling process %d died\n", vw->vw_pid);
+ vw->vw_pid = 0;
+ }
+ return (FALSE);
+}
+
+static int
+signal_vt_rel(struct vt_window *vw)
+{
+
+ if (vw->vw_smode.mode != VT_PROCESS)
+ return (FALSE);
+ if (vw->vw_proc == NULL || vt_proc_alive(vw) == FALSE) {
+ vw->vw_proc = NULL;
+ vw->vw_pid = 0;
+ return (TRUE);
+ }
+ vw->vw_flags |= VWF_SWWAIT_REL;
+ PROC_LOCK(vw->vw_proc);
+ kern_psignal(vw->vw_proc, vw->vw_smode.relsig);
+ PROC_UNLOCK(vw->vw_proc);
+ DPRINTF(1, "sending relsig to %d\n", vw->vw_pid);
+ return (TRUE);
+}
+
+static int
+signal_vt_acq(struct vt_window *vw)
+{
+
+ if (vw->vw_smode.mode != VT_PROCESS)
+ return (FALSE);
+ if (vw == vw->vw_device->vd_windows[VT_CONSWINDOW])
+ cnavailable(vw->vw_terminal->consdev, FALSE);
+ if (vw->vw_proc == NULL || vt_proc_alive(vw) == FALSE) {
+ vw->vw_proc = NULL;
+ vw->vw_pid = 0;
+ return (TRUE);
+ }
+ vw->vw_flags |= VWF_SWWAIT_ACQ;
+ PROC_LOCK(vw->vw_proc);
+ kern_psignal(vw->vw_proc, vw->vw_smode.acqsig);
+ PROC_UNLOCK(vw->vw_proc);
+ DPRINTF(1, "sending acqsig to %d\n", vw->vw_pid);
+ return (TRUE);
+}
+
+static int
+finish_vt_rel(struct vt_window *vw, int release, int *s)
+{
+
+ if (vw->vw_flags & VWF_SWWAIT_REL) {
+ vw->vw_flags &= ~VWF_SWWAIT_REL;
+ if (release) {
+ callout_drain(&vw->vw_proc_dead_timer);
+ vt_late_window_switch(vw->vw_switch_to);
+ }
+ return (0);
+ }
+ return (EINVAL);
+}
+
+static int
+finish_vt_acq(struct vt_window *vw)
+{
+
+ if (vw->vw_flags & VWF_SWWAIT_ACQ) {
+ vw->vw_flags &= ~VWF_SWWAIT_ACQ;
+ return (0);
+ }
+ return (EINVAL);
+}
+
+#ifndef SC_NO_CUTPASTE
+static void
+vt_mouse_terminput_button(struct vt_device *vd, int button)
+{
+ struct vt_window *vw;
+ struct vt_font *vf;
+ char mouseb[6] = "\x1B[M";
+ int i, x, y;
+
+ vw = vd->vd_curwindow;
+ vf = vw->vw_font;
+
+ /* Translate to char position. */
+ x = vd->vd_mx / vf->vf_width;
+ y = vd->vd_my / vf->vf_height;
+ /* Avoid overflow. */
+ x = MIN(x, 255 - '!');
+ y = MIN(y, 255 - '!');
+
+ mouseb[3] = ' ' + button;
+ mouseb[4] = '!' + x;
+ mouseb[5] = '!' + y;
+
+ for (i = 0; i < sizeof(mouseb); i++)
+ terminal_input_char(vw->vw_terminal, mouseb[i]);
+}
+
+static void
+vt_mouse_terminput(struct vt_device *vd, int type, int x, int y, int event,
+ int cnt)
+{
+
+ switch (type) {
+ case MOUSE_BUTTON_EVENT:
+ if (cnt > 0) {
+ /* Mouse button pressed. */
+ if (event & MOUSE_BUTTON1DOWN)
+ vt_mouse_terminput_button(vd, 0);
+ if (event & MOUSE_BUTTON2DOWN)
+ vt_mouse_terminput_button(vd, 1);
+ if (event & MOUSE_BUTTON3DOWN)
+ vt_mouse_terminput_button(vd, 2);
+ } else {
+ /* Mouse button released. */
+ vt_mouse_terminput_button(vd, 3);
+ }
+ break;
+#ifdef notyet
+ case MOUSE_MOTION_EVENT:
+ if (mouse->u.data.z < 0) {
+ /* Scroll up. */
+ sc_mouse_input_button(vd, 64);
+ } else if (mouse->u.data.z > 0) {
+ /* Scroll down. */
+ sc_mouse_input_button(vd, 65);
+ }
+ break;
+#endif
+ }
+}
+
+static void
+vt_mouse_paste()
+{
+ term_char_t *buf;
+ int i, len;
+
+ len = VD_PASTEBUFLEN(main_vd);
+ buf = VD_PASTEBUF(main_vd);
+ len /= sizeof(term_char_t);
+ for (i = 0; i < len; i++) {
+ if (buf[i] == '\0')
+ continue;
+ terminal_input_char(main_vd->vd_curwindow->vw_terminal,
+ buf[i]);
+ }
+}
+
+void
+vt_mouse_event(int type, int x, int y, int event, int cnt, int mlevel)
+{
+ struct vt_device *vd;
+ struct vt_window *vw;
+ struct vt_font *vf;
+ term_pos_t size;
+ int len, mark;
+
+ vd = main_vd;
+ vw = vd->vd_curwindow;
+ vf = vw->vw_font;
+ mark = 0;
+
+ if (vw->vw_flags & (VWF_MOUSE_HIDE | VWF_GRAPHICS))
+ /*
+ * Either the mouse is disabled, or the window is in
+ * "graphics mode". The graphics mode is usually set by
+ * an X server, using the KDSETMODE ioctl.
+ */
+ return;
+
+ if (vf == NULL) /* Text mode. */
+ return;
+
+ /*
+ * TODO: add flag about pointer position changed, to not redraw chars
+ * under mouse pointer when nothing changed.
+ */
+
+ if (vw->vw_mouse_level > 0)
+ vt_mouse_terminput(vd, type, x, y, event, cnt);
+
+ switch (type) {
+ case MOUSE_ACTION:
+ case MOUSE_MOTION_EVENT:
+ /* Movement */
+ x += vd->vd_mx;
+ y += vd->vd_my;
+
+ vt_termsize(vd, vf, &size);
+
+ /* Apply limits. */
+ x = MAX(x, 0);
+ y = MAX(y, 0);
+ x = MIN(x, (size.tp_col * vf->vf_width) - 1);
+ y = MIN(y, (size.tp_row * vf->vf_height) - 1);
+
+ vd->vd_mx = x;
+ vd->vd_my = y;
+ if (vd->vd_mstate & MOUSE_BUTTON1DOWN)
+ vtbuf_set_mark(&vw->vw_buf, VTB_MARK_MOVE,
+ vd->vd_mx / vf->vf_width,
+ vd->vd_my / vf->vf_height);
+
+ vt_resume_flush_timer(vw->vw_device, 0);
+ return; /* Done */
+ case MOUSE_BUTTON_EVENT:
+ /* Buttons */
+ break;
+ default:
+ return; /* Done */
+ }
+
+ switch (event) {
+ case MOUSE_BUTTON1DOWN:
+ switch (cnt % 4) {
+ case 0: /* up */
+ mark = VTB_MARK_END;
+ break;
+ case 1: /* single click: start cut operation */
+ mark = VTB_MARK_START;
+ break;
+ case 2: /* double click: cut a word */
+ mark = VTB_MARK_WORD;
+ break;
+ case 3: /* triple click: cut a line */
+ mark = VTB_MARK_ROW;
+ break;
+ }
+ break;
+ case VT_MOUSE_PASTEBUTTON:
+ switch (cnt) {
+ case 0: /* up */
+ break;
+ default:
+ vt_mouse_paste();
+ break;
+ }
+ return; /* Done */
+ case VT_MOUSE_EXTENDBUTTON:
+ switch (cnt) {
+ case 0: /* up */
+ if (!(vd->vd_mstate & MOUSE_BUTTON1DOWN))
+ mark = VTB_MARK_EXTEND;
+ else
+ mark = 0;
+ break;
+ default:
+ mark = VTB_MARK_EXTEND;
+ break;
+ }
+ break;
+ default:
+ return; /* Done */
+ }
+
+ /* Save buttons state. */
+ if (cnt > 0)
+ vd->vd_mstate |= event;
+ else
+ vd->vd_mstate &= ~event;
+
+ if (vtbuf_set_mark(&vw->vw_buf, mark, vd->vd_mx / vf->vf_width,
+ vd->vd_my / vf->vf_height) == 1) {
+ /*
+ * We have something marked to copy, so update pointer to
+ * window with selection.
+ */
+ vt_resume_flush_timer(vw->vw_device, 0);
+
+ switch (mark) {
+ case VTB_MARK_END:
+ case VTB_MARK_WORD:
+ case VTB_MARK_ROW:
+ case VTB_MARK_EXTEND:
+ break;
+ default:
+ /* Other types of mark do not require to copy data. */
+ return;
+ }
+
+ /* Get current selection size in bytes. */
+ len = vtbuf_get_marked_len(&vw->vw_buf);
+ if (len <= 0)
+ return;
+
+ /* Reallocate buffer only if old one is too small. */
+ if (len > VD_PASTEBUFSZ(vd)) {
+ VD_PASTEBUF(vd) = realloc(VD_PASTEBUF(vd), len, M_VT,
+ M_WAITOK | M_ZERO);
+ /* Update buffer size. */
+ VD_PASTEBUFSZ(vd) = len;
+ }
+ /* Request copy/paste buffer data, no more than `len' */
+ vtbuf_extract_marked(&vw->vw_buf, VD_PASTEBUF(vd),
+ VD_PASTEBUFSZ(vd));
+
+ VD_PASTEBUFLEN(vd) = len;
+
+ /* XXX VD_PASTEBUF(vd) have to be freed on shutdown/unload. */
+ }
+}
+
+void
+vt_mouse_state(int show)
+{
+ struct vt_device *vd;
+ struct vt_window *vw;
+
+ vd = main_vd;
+ vw = vd->vd_curwindow;
+
+ switch (show) {
+ case VT_MOUSE_HIDE:
+ vw->vw_flags |= VWF_MOUSE_HIDE;
+ break;
+ case VT_MOUSE_SHOW:
+ vw->vw_flags &= ~VWF_MOUSE_HIDE;
+ break;
+ }
+
+ /* Mark mouse position as dirty. */
+ vt_mark_mouse_position_as_dirty(vd);
+ vt_resume_flush_timer(vw->vw_device, 0);
+}
+#endif
+
+static int
+vtterm_mmap(struct terminal *tm, vm_ooffset_t offset, vm_paddr_t * paddr,
+ int nprot, vm_memattr_t *memattr)
+{
+ struct vt_window *vw = tm->tm_softc;
+ struct vt_device *vd = vw->vw_device;
+
+ if (vd->vd_driver->vd_fb_mmap)
+ return (vd->vd_driver->vd_fb_mmap(vd, offset, paddr, nprot,
+ memattr));
+
+ return (ENXIO);
+}
+
+static int
+vtterm_ioctl(struct terminal *tm, u_long cmd, caddr_t data,
+ struct thread *td)
+{
+ struct vt_window *vw = tm->tm_softc;
+ struct vt_device *vd = vw->vw_device;
+ keyboard_t *kbd;
+ int error, i, s;
+#if defined(COMPAT_FREEBSD6) || defined(COMPAT_FREEBSD5) || \
+ defined(COMPAT_FREEBSD4) || defined(COMPAT_43)
+ int ival;
+
+ switch (cmd) {
+ case _IO('v', 4):
+ cmd = VT_RELDISP;
+ break;
+ case _IO('v', 5):
+ cmd = VT_ACTIVATE;
+ break;
+ case _IO('v', 6):
+ cmd = VT_WAITACTIVE;
+ break;
+ case _IO('K', 20):
+ cmd = KDSKBSTATE;
+ break;
+ case _IO('K', 67):
+ cmd = KDSETRAD;
+ break;
+ case _IO('K', 7):
+ cmd = KDSKBMODE;
+ break;
+ case _IO('K', 8):
+ cmd = KDMKTONE;
+ break;
+ case _IO('K', 63):
+ cmd = KIOCSOUND;
+ break;
+ case _IO('K', 66):
+ cmd = KDSETLED;
+ break;
+ case _IO('c', 110):
+ cmd = CONS_SETKBD;
+ break;
+ default:
+ goto skip_thunk;
+ }
+ ival = IOCPARM_IVAL(data);
+ data = (caddr_t)&ival;
+skip_thunk:
+#endif
+
+ switch (cmd) {
+ case KDSETRAD: /* set keyboard repeat & delay rates (old) */
+ if (*(int *)data & ~0x7f)
+ return (EINVAL);
+ /* FALLTHROUGH */
+ case GIO_KEYMAP:
+ case PIO_KEYMAP:
+ case GIO_DEADKEYMAP:
+ case PIO_DEADKEYMAP:
+ case GETFKEY:
+ case SETFKEY:
+ case KDGKBINFO:
+ case KDGKBTYPE:
+ case KDGETREPEAT: /* get keyboard repeat & delay rates */
+ case KDSETREPEAT: /* set keyboard repeat & delay rates (new) */
+ case KBADDKBD: /* add/remove keyboard to/from mux */
+ case KBRELKBD: {
+ error = 0;
+
+ mtx_lock(&Giant);
+ kbd = kbd_get_keyboard(vd->vd_keyboard);
+ if (kbd != NULL)
+ error = kbdd_ioctl(kbd, cmd, data);
+ mtx_unlock(&Giant);
+ if (error == ENOIOCTL) {
+ if (cmd == KDGKBTYPE) {
+ /* always return something? XXX */
+ *(int *)data = 0;
+ } else {
+ return (ENODEV);
+ }
+ }
+ return (error);
+ }
+ case KDGKBSTATE: { /* get keyboard state (locks) */
+ error = 0;
+
+ if (vw == vd->vd_curwindow) {
+ mtx_lock(&Giant);
+ kbd = kbd_get_keyboard(vd->vd_keyboard);
+ if (kbd != NULL)
+ error = vt_save_kbd_state(vw, kbd);
+ mtx_unlock(&Giant);
+
+ if (error != 0)
+ return (error);
+ }
+
+ *(int *)data = vw->vw_kbdstate & LOCK_MASK;
+
+ return (error);
+ }
+ case KDSKBSTATE: { /* set keyboard state (locks) */
+ int state;
+
+ state = *(int *)data;
+ if (state & ~LOCK_MASK)
+ return (EINVAL);
+
+ vw->vw_kbdstate &= ~LOCK_MASK;
+ vw->vw_kbdstate |= state;
+
+ error = 0;
+ if (vw == vd->vd_curwindow) {
+ mtx_lock(&Giant);
+ kbd = kbd_get_keyboard(vd->vd_keyboard);
+ if (kbd != NULL)
+ error = vt_update_kbd_state(vw, kbd);
+ mtx_unlock(&Giant);
+ }
+
+ return (error);
+ }
+ case KDGETLED: { /* get keyboard LED status */
+ error = 0;
+
+ if (vw == vd->vd_curwindow) {
+ mtx_lock(&Giant);
+ kbd = kbd_get_keyboard(vd->vd_keyboard);
+ if (kbd != NULL)
+ error = vt_save_kbd_leds(vw, kbd);
+ mtx_unlock(&Giant);
+
+ if (error != 0)
+ return (error);
+ }
+
+ *(int *)data = vw->vw_kbdstate & LED_MASK;
+
+ return (error);
+ }
+ case KDSETLED: { /* set keyboard LED status */
+ int leds;
+
+ leds = *(int *)data;
+ if (leds & ~LED_MASK)
+ return (EINVAL);
+
+ vw->vw_kbdstate &= ~LED_MASK;
+ vw->vw_kbdstate |= leds;
+
+ error = 0;
+ if (vw == vd->vd_curwindow) {
+ mtx_lock(&Giant);
+ kbd = kbd_get_keyboard(vd->vd_keyboard);
+ if (kbd != NULL)
+ error = vt_update_kbd_leds(vw, kbd);
+ mtx_unlock(&Giant);
+ }
+
+ return (error);
+ }
+ case KDGKBMODE: {
+ error = 0;
+
+ if (vw == vd->vd_curwindow) {
+ mtx_lock(&Giant);
+ kbd = kbd_get_keyboard(vd->vd_keyboard);
+ if (kbd != NULL)
+ error = vt_save_kbd_mode(vw, kbd);
+ mtx_unlock(&Giant);
+
+ if (error != 0)
+ return (error);
+ }
+
+ *(int *)data = vw->vw_kbdmode;
+
+ return (error);
+ }
+ case KDSKBMODE: {
+ int mode;
+
+ mode = *(int *)data;
+ switch (mode) {
+ case K_XLATE:
+ case K_RAW:
+ case K_CODE:
+ vw->vw_kbdmode = mode;
+
+ error = 0;
+ if (vw == vd->vd_curwindow) {
+ mtx_lock(&Giant);
+ kbd = kbd_get_keyboard(vd->vd_keyboard);
+ if (kbd != NULL)
+ error = vt_update_kbd_mode(vw, kbd);
+ mtx_unlock(&Giant);
+ }
+
+ return (error);
+ default:
+ return (EINVAL);
+ }
+ }
+ case FBIOGTYPE:
+ case FBIO_GETWINORG: /* get frame buffer window origin */
+ case FBIO_GETDISPSTART: /* get display start address */
+ case FBIO_GETLINEWIDTH: /* get scan line width in bytes */
+ case FBIO_BLANK: /* blank display */
+ if (vd->vd_driver->vd_fb_ioctl)
+ return (vd->vd_driver->vd_fb_ioctl(vd, cmd, data, td));
+ break;
+ case CONS_BLANKTIME:
+ /* XXX */
+ return (0);
+ case CONS_GET:
+ /* XXX */
+ *(int *)data = M_CG640x480;
+ return (0);
+ case CONS_BELLTYPE: /* set bell type sound */
+ if ((*(int *)data) & CONS_QUIET_BELL)
+ vd->vd_flags |= VDF_QUIET_BELL;
+ else
+ vd->vd_flags &= ~VDF_QUIET_BELL;
+ return (0);
+ case CONS_GETINFO: {
+ vid_info_t *vi = (vid_info_t *)data;
+ if (vi->size != sizeof(struct vid_info))
+ return (EINVAL);
+
+ if (vw == vd->vd_curwindow) {
+ mtx_lock(&Giant);
+ kbd = kbd_get_keyboard(vd->vd_keyboard);
+ if (kbd != NULL)
+ vt_save_kbd_state(vw, kbd);
+ mtx_unlock(&Giant);
+ }
+
+ vi->m_num = vd->vd_curwindow->vw_number + 1;
+ vi->mk_keylock = vw->vw_kbdstate & LOCK_MASK;
+ /* XXX: other fields! */
+ return (0);
+ }
+ case CONS_GETVERS:
+ *(int *)data = 0x200;
+ return (0);
+ case CONS_MODEINFO:
+ /* XXX */
+ return (0);
+ case CONS_MOUSECTL: {
+ mouse_info_t *mouse = (mouse_info_t*)data;
+
+ /*
+ * All the commands except MOUSE_SHOW nd MOUSE_HIDE
+ * should not be applied to individual TTYs, but only to
+ * consolectl.
+ */
+ switch (mouse->operation) {
+ case MOUSE_HIDE:
+ if (vd->vd_flags & VDF_MOUSECURSOR) {
+ vd->vd_flags &= ~VDF_MOUSECURSOR;
+#ifndef SC_NO_CUTPASTE
+ vt_mouse_state(VT_MOUSE_HIDE);
+#endif
+ }
+ return (0);
+ case MOUSE_SHOW:
+ if (!(vd->vd_flags & VDF_MOUSECURSOR)) {
+ vd->vd_flags |= VDF_MOUSECURSOR;
+ vd->vd_mx = vd->vd_width / 2;
+ vd->vd_my = vd->vd_height / 2;
+#ifndef SC_NO_CUTPASTE
+ vt_mouse_state(VT_MOUSE_SHOW);
+#endif
+ }
+ return (0);
+ default:
+ return (EINVAL);
+ }
+ }
+ case PIO_VFONT: {
+ struct vt_font *vf;
+
+ if (vd->vd_flags & VDF_TEXTMODE)
+ return (ENOTSUP);
+
+ error = vtfont_load((void *)data, &vf);
+ if (error != 0)
+ return (error);
+
+ error = vt_change_font(vw, vf);
+ vtfont_unref(vf);
+ return (error);
+ }
+ case PIO_VFONT_DEFAULT: {
+ /* Reset to default font. */
+ error = vt_change_font(vw, &vt_font_default);
+ return (error);
+ }
+ case GIO_SCRNMAP: {
+ scrmap_t *sm = (scrmap_t *)data;
+
+ /* We don't have screen maps, so return a handcrafted one. */
+ for (i = 0; i < 256; i++)
+ sm->scrmap[i] = i;
+ return (0);
+ }
+ case KDSETMODE:
+ /*
+ * FIXME: This implementation is incomplete compared to
+ * syscons.
+ */
+ switch (*(int *)data) {
+ case KD_TEXT:
+ case KD_TEXT1:
+ case KD_PIXEL:
+ vw->vw_flags &= ~VWF_GRAPHICS;
+ break;
+ case KD_GRAPHICS:
+ vw->vw_flags |= VWF_GRAPHICS;
+ break;
+ }
+ return (0);
+ case KDENABIO: /* allow io operations */
+ error = priv_check(td, PRIV_IO);
+ if (error != 0)
+ return (error);
+ error = securelevel_gt(td->td_ucred, 0);
+ if (error != 0)
+ return (error);
+#if defined(__i386__)
+ td->td_frame->tf_eflags |= PSL_IOPL;
+#elif defined(__amd64__)
+ td->td_frame->tf_rflags |= PSL_IOPL;
+#endif
+ return (0);
+ case KDDISABIO: /* disallow io operations (default) */
+#if defined(__i386__)
+ td->td_frame->tf_eflags &= ~PSL_IOPL;
+#elif defined(__amd64__)
+ td->td_frame->tf_rflags &= ~PSL_IOPL;
+#endif
+ return (0);
+ case KDMKTONE: /* sound the bell */
+ vtterm_beep(tm, *(u_int *)data);
+ return (0);
+ case KIOCSOUND: /* make tone (*data) hz */
+ /* TODO */
+ return (0);
+ case CONS_SETKBD: /* set the new keyboard */
+ mtx_lock(&Giant);
+ error = 0;
+ if (vd->vd_keyboard != *(int *)data) {
+ kbd = kbd_get_keyboard(*(int *)data);
+ if (kbd == NULL) {
+ mtx_unlock(&Giant);
+ return (EINVAL);
+ }
+ i = kbd_allocate(kbd->kb_name, kbd->kb_unit,
+ (void *)vd, vt_kbdevent, vd);
+ if (i >= 0) {
+ if (vd->vd_keyboard != -1) {
+ vt_save_kbd_state(vd->vd_curwindow, kbd);
+ kbd_release(kbd, (void *)vd);
+ }
+ kbd = kbd_get_keyboard(i);
+ vd->vd_keyboard = i;
+
+ vt_update_kbd_mode(vd->vd_curwindow, kbd);
+ vt_update_kbd_state(vd->vd_curwindow, kbd);
+ } else {
+ error = EPERM; /* XXX */
+ }
+ }
+ mtx_unlock(&Giant);
+ return (error);
+ case CONS_RELKBD: /* release the current keyboard */
+ mtx_lock(&Giant);
+ error = 0;
+ if (vd->vd_keyboard != -1) {
+ kbd = kbd_get_keyboard(vd->vd_keyboard);
+ if (kbd == NULL) {
+ mtx_unlock(&Giant);
+ return (EINVAL);
+ }
+ vt_save_kbd_state(vd->vd_curwindow, kbd);
+ error = kbd_release(kbd, (void *)vd);
+ if (error == 0) {
+ vd->vd_keyboard = -1;
+ }
+ }
+ mtx_unlock(&Giant);
+ return (error);
+ case VT_ACTIVATE: {
+ int win;
+ win = *(int *)data - 1;
+ DPRINTF(5, "%s%d: VT_ACTIVATE ttyv%d ", SC_DRIVER_NAME,
+ VT_UNIT(vw), win);
+ if ((win >= VT_MAXWINDOWS) || (win < 0))
+ return (EINVAL);
+ return (vt_proc_window_switch(vd->vd_windows[win]));
+ }
+ case VT_GETACTIVE:
+ *(int *)data = vd->vd_curwindow->vw_number + 1;
+ return (0);
+ case VT_GETINDEX:
+ *(int *)data = vw->vw_number + 1;
+ return (0);
+ case VT_LOCKSWITCH:
+ /* TODO: Check current state, switching can be in progress. */
+ if ((*(int *)data) == 0x01)
+ vw->vw_flags |= VWF_VTYLOCK;
+ else if ((*(int *)data) == 0x02)
+ vw->vw_flags &= ~VWF_VTYLOCK;
+ else
+ return (EINVAL);
+ return (0);
+ case VT_OPENQRY:
+ VT_LOCK(vd);
+ for (i = 0; i < VT_MAXWINDOWS; i++) {
+ vw = vd->vd_windows[i];
+ if (vw == NULL)
+ continue;
+ if (!(vw->vw_flags & VWF_OPENED)) {
+ *(int *)data = vw->vw_number + 1;
+ VT_UNLOCK(vd);
+ return (0);
+ }
+ }
+ VT_UNLOCK(vd);
+ return (EINVAL);
+ case VT_WAITACTIVE: {
+ unsigned int idx;
+
+ error = 0;
+
+ idx = *(unsigned int *)data;
+ if (idx > VT_MAXWINDOWS)
+ return (EINVAL);
+ if (idx > 0)
+ vw = vd->vd_windows[idx - 1];
+
+ VT_LOCK(vd);
+ while (vd->vd_curwindow != vw && error == 0)
+ error = cv_wait_sig(&vd->vd_winswitch, &vd->vd_lock);
+ VT_UNLOCK(vd);
+ return (error);
+ }
+ case VT_SETMODE: { /* set screen switcher mode */
+ struct vt_mode *mode;
+ struct proc *p1;
+
+ mode = (struct vt_mode *)data;
+ DPRINTF(5, "%s%d: VT_SETMODE ", SC_DRIVER_NAME, VT_UNIT(vw));
+ if (vw->vw_smode.mode == VT_PROCESS) {
+ p1 = pfind(vw->vw_pid);
+ if (vw->vw_proc == p1 && vw->vw_proc != td->td_proc) {
+ if (p1)
+ PROC_UNLOCK(p1);
+ DPRINTF(5, "error EPERM\n");
+ return (EPERM);
+ }
+ if (p1)
+ PROC_UNLOCK(p1);
+ }
+ if (mode->mode == VT_AUTO) {
+ vw->vw_smode.mode = VT_AUTO;
+ vw->vw_proc = NULL;
+ vw->vw_pid = 0;
+ DPRINTF(5, "VT_AUTO, ");
+ if (vw == vw->vw_device->vd_windows[VT_CONSWINDOW])
+ cnavailable(vw->vw_terminal->consdev, TRUE);
+ /* were we in the middle of the vty switching process? */
+ if (finish_vt_rel(vw, TRUE, &s) == 0)
+ DPRINTF(5, "reset WAIT_REL, ");
+ if (finish_vt_acq(vw) == 0)
+ DPRINTF(5, "reset WAIT_ACQ, ");
+ return (0);
+ } else if (mode->mode == VT_PROCESS) {
+ if (!ISSIGVALID(mode->relsig) ||
+ !ISSIGVALID(mode->acqsig) ||
+ !ISSIGVALID(mode->frsig)) {
+ DPRINTF(5, "error EINVAL\n");
+ return (EINVAL);
+ }
+ DPRINTF(5, "VT_PROCESS %d, ", td->td_proc->p_pid);
+ bcopy(data, &vw->vw_smode, sizeof(struct vt_mode));
+ vw->vw_proc = td->td_proc;
+ vw->vw_pid = vw->vw_proc->p_pid;
+ if (vw == vw->vw_device->vd_windows[VT_CONSWINDOW])
+ cnavailable(vw->vw_terminal->consdev, FALSE);
+ } else {
+ DPRINTF(5, "VT_SETMODE failed, unknown mode %d\n",
+ mode->mode);
+ return (EINVAL);
+ }
+ DPRINTF(5, "\n");
+ return (0);
+ }
+ case VT_GETMODE: /* get screen switcher mode */
+ bcopy(&vw->vw_smode, data, sizeof(struct vt_mode));
+ return (0);
+
+ case VT_RELDISP: /* screen switcher ioctl */
+ /*
+ * This must be the current vty which is in the VT_PROCESS
+ * switching mode...
+ */
+ if ((vw != vd->vd_curwindow) || (vw->vw_smode.mode !=
+ VT_PROCESS)) {
+ return (EINVAL);
+ }
+ /* ...and this process is controlling it. */
+ if (vw->vw_proc != td->td_proc) {
+ return (EPERM);
+ }
+ error = EINVAL;
+ switch(*(int *)data) {
+ case VT_FALSE: /* user refuses to release screen, abort */
+ if ((error = finish_vt_rel(vw, FALSE, &s)) == 0)
+ DPRINTF(5, "%s%d: VT_RELDISP: VT_FALSE\n",
+ SC_DRIVER_NAME, VT_UNIT(vw));
+ break;
+ case VT_TRUE: /* user has released screen, go on */
+ /* finish_vt_rel(..., TRUE, ...) should not be locked */
+ if (vw->vw_flags & VWF_SWWAIT_REL) {
+ if ((error = finish_vt_rel(vw, TRUE, &s)) == 0)
+ DPRINTF(5, "%s%d: VT_RELDISP: VT_TRUE\n",
+ SC_DRIVER_NAME, VT_UNIT(vw));
+ } else {
+ error = EINVAL;
+ }
+ return (error);
+ case VT_ACKACQ: /* acquire acknowledged, switch completed */
+ if ((error = finish_vt_acq(vw)) == 0)
+ DPRINTF(5, "%s%d: VT_RELDISP: VT_ACKACQ\n",
+ SC_DRIVER_NAME, VT_UNIT(vw));
+ break;
+ default:
+ break;
+ }
+ return (error);
+ }
+
+ return (ENOIOCTL);
+}
+
+static struct vt_window *
+vt_allocate_window(struct vt_device *vd, unsigned int window)
+{
+ struct vt_window *vw;
+ struct terminal *tm;
+ term_pos_t size;
+ struct winsize wsz;
+
+ vw = malloc(sizeof *vw, M_VT, M_WAITOK|M_ZERO);
+ vw->vw_device = vd;
+ vw->vw_number = window;
+ vw->vw_kbdmode = K_XLATE;
+
+ if ((vd->vd_flags & VDF_TEXTMODE) == 0) {
+ vw->vw_font = vtfont_ref(&vt_font_default);
+ vt_compute_drawable_area(vw);
+ }
+
+ vt_termsize(vd, vw->vw_font, &size);
+ vt_winsize(vd, vw->vw_font, &wsz);
+ vtbuf_init(&vw->vw_buf, &size);
+
+ tm = vw->vw_terminal = terminal_alloc(&vt_termclass, vw);
+ terminal_set_winsize(tm, &wsz);
+ vd->vd_windows[window] = vw;
+ callout_init(&vw->vw_proc_dead_timer, 0);
+
+ return (vw);
+}
+
+void
+vt_upgrade(struct vt_device *vd)
+{
+ struct vt_window *vw;
+ unsigned int i;
+ int register_handlers;
+
+ if (!vty_enabled(VTY_VT))
+ return;
+ if (main_vd->vd_driver == NULL)
+ return;
+
+ for (i = 0; i < VT_MAXWINDOWS; i++) {
+ vw = vd->vd_windows[i];
+ if (vw == NULL) {
+ /* New window. */
+ vw = vt_allocate_window(vd, i);
+ }
+ if (!(vw->vw_flags & VWF_READY)) {
+ callout_init(&vw->vw_proc_dead_timer, 0);
+ terminal_maketty(vw->vw_terminal, "v%r", VT_UNIT(vw));
+ vw->vw_flags |= VWF_READY;
+ if (vw->vw_flags & VWF_CONSOLE) {
+ /* For existing console window. */
+ EVENTHANDLER_REGISTER(shutdown_pre_sync,
+ vt_window_switch, vw, SHUTDOWN_PRI_DEFAULT);
+ }
+ }
+
+ }
+ VT_LOCK(vd);
+ if (vd->vd_curwindow == NULL)
+ vd->vd_curwindow = vd->vd_windows[VT_CONSWINDOW];
+
+ register_handlers = 0;
+ if (!(vd->vd_flags & VDF_ASYNC)) {
+ /* Attach keyboard. */
+ vt_allocate_keyboard(vd);
+
+ /* Init 25 Hz timer. */
+ callout_init_mtx(&vd->vd_timer, &vd->vd_lock, 0);
+
+ /* Start timer when everything ready. */
+ vd->vd_flags |= VDF_ASYNC;
+ callout_reset(&vd->vd_timer, hz / VT_TIMERFREQ, vt_timer, vd);
+ vd->vd_timer_armed = 1;
+ register_handlers = 1;
+ }
+
+ VT_UNLOCK(vd);
+
+ /* Refill settings with new sizes. */
+ vt_resize(vd);
+
+ if (register_handlers) {
+ /* Register suspend/resume handlers. */
+ EVENTHANDLER_REGISTER(power_suspend_early, vt_suspend_handler,
+ vd, EVENTHANDLER_PRI_ANY);
+ EVENTHANDLER_REGISTER(power_resume, vt_resume_handler, vd,
+ EVENTHANDLER_PRI_ANY);
+ }
+}
+
+static void
+vt_resize(struct vt_device *vd)
+{
+ struct vt_window *vw;
+ int i;
+
+ for (i = 0; i < VT_MAXWINDOWS; i++) {
+ vw = vd->vd_windows[i];
+ VT_LOCK(vd);
+ /* Assign default font to window, if not textmode. */
+ if (!(vd->vd_flags & VDF_TEXTMODE) && vw->vw_font == NULL)
+ vw->vw_font = vtfont_ref(&vt_font_default);
+ VT_UNLOCK(vd);
+
+ /* Resize terminal windows */
+ while (vt_change_font(vw, vw->vw_font) == EBUSY) {
+ DPRINTF(100, "%s: vt_change_font() is busy, "
+ "window %d\n", __func__, i);
+ }
+ }
+}
+
+void
+vt_allocate(struct vt_driver *drv, void *softc)
+{
+ struct vt_device *vd;
+
+ if (!vty_enabled(VTY_VT))
+ return;
+
+ if (main_vd->vd_driver == NULL) {
+ main_vd->vd_driver = drv;
+ printf("VT: initialize with new VT driver \"%s\".\n",
+ drv->vd_name);
+ } else {
+ /*
+ * Check if have rights to replace current driver. For example:
+ * it is bad idea to replace KMS driver with generic VGA one.
+ */
+ if (drv->vd_priority <= main_vd->vd_driver->vd_priority) {
+ printf("VT: Driver priority %d too low. Current %d\n ",
+ drv->vd_priority, main_vd->vd_driver->vd_priority);
+ return;
+ }
+ printf("VT: Replacing driver \"%s\" with new \"%s\".\n",
+ main_vd->vd_driver->vd_name, drv->vd_name);
+ }
+ vd = main_vd;
+
+ if (vd->vd_flags & VDF_ASYNC) {
+ /* Stop vt_flush periodic task. */
+ VT_LOCK(vd);
+ vt_suspend_flush_timer(vd);
+ VT_UNLOCK(vd);
+ /*
+ * Mute current terminal until we done. vt_change_font (called
+ * from vt_resize) will unmute it.
+ */
+ terminal_mute(vd->vd_curwindow->vw_terminal, 1);
+ }
+
+ /*
+ * Reset VDF_TEXTMODE flag, driver who require that flag (vt_vga) will
+ * set it.
+ */
+ VT_LOCK(vd);
+ vd->vd_flags &= ~VDF_TEXTMODE;
+
+ vd->vd_driver = drv;
+ vd->vd_softc = softc;
+ vd->vd_driver->vd_init(vd);
+ VT_UNLOCK(vd);
+
+ /* Update windows sizes and initialize last items. */
+ vt_upgrade(vd);
+
+#ifdef DEV_SPLASH
+ if (vd->vd_flags & VDF_SPLASH)
+ vtterm_splash(vd);
+#endif
+
+ if (vd->vd_flags & VDF_ASYNC) {
+ /* Allow to put chars now. */
+ terminal_mute(vd->vd_curwindow->vw_terminal, 0);
+ /* Rerun timer for screen updates. */
+ vt_resume_flush_timer(vd, 0);
+ }
+
+ /*
+ * Register as console. If it already registered, cnadd() will ignore
+ * it.
+ */
+ termcn_cnregister(vd->vd_windows[VT_CONSWINDOW]->vw_terminal);
+}
+
+static void
+vt_suspend_handler(void *priv)
+{
+ struct vt_device *vd;
+
+ vd = priv;
+ if (vd->vd_driver != NULL && vd->vd_driver->vd_suspend != NULL)
+ vd->vd_driver->vd_suspend(vd);
+}
+
+static void
+vt_resume_handler(void *priv)
+{
+ struct vt_device *vd;
+
+ vd = priv;
+ if (vd->vd_driver != NULL && vd->vd_driver->vd_resume != NULL)
+ vd->vd_driver->vd_resume(vd);
+}
+
+void
+vt_suspend(struct vt_device *vd)
+{
+ int error;
+
+ if (vt_suspendswitch == 0)
+ return;
+ /* Save current window. */
+ vd->vd_savedwindow = vd->vd_curwindow;
+ /* Ask holding process to free window and switch to console window */
+ vt_proc_window_switch(vd->vd_windows[VT_CONSWINDOW]);
+
+ /* Wait for the window switch to complete. */
+ error = 0;
+ VT_LOCK(vd);
+ while (vd->vd_curwindow != vd->vd_windows[VT_CONSWINDOW] && error == 0)
+ error = cv_wait_sig(&vd->vd_winswitch, &vd->vd_lock);
+ VT_UNLOCK(vd);
+}
+
+void
+vt_resume(struct vt_device *vd)
+{
+
+ if (vt_suspendswitch == 0)
+ return;
+ /* Switch back to saved window, if any */
+ vt_proc_window_switch(vd->vd_savedwindow);
+ vd->vd_savedwindow = NULL;
+}
Property changes on: trunk/sys/dev/vt/vt_core.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/dev/vt/vt_font.c
===================================================================
--- trunk/sys/dev/vt/vt_font.c (rev 0)
+++ trunk/sys/dev/vt/vt_font.c 2018-05-27 22:31:43 UTC (rev 10041)
@@ -0,0 +1,227 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 2009 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by Ed Schouten under sponsorship from the
+ * FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: stable/10/sys/dev/vt/vt_font.c 331983 2018-04-04 05:26:33Z gordon $");
+
+#include <sys/param.h>
+#include <sys/kernel.h>
+#include <sys/malloc.h>
+#include <sys/refcount.h>
+#include <sys/systm.h>
+
+#include <dev/vt/vt.h>
+
+static MALLOC_DEFINE(M_VTFONT, "vtfont", "vt font");
+
+/* Some limits to prevent abnormal fonts from being loaded. */
+#define VTFONT_MAXMAPPINGS 65536
+#define VTFONT_MAXGLYPHS 131072
+#define VTFONT_MAXGLYPHSIZE 2097152
+#define VTFONT_MAXDIMENSION 128
+
+static uint16_t
+vtfont_bisearch(const struct vt_font_map *map, unsigned int len, uint32_t src)
+{
+ int min, mid, max;
+
+ min = 0;
+ max = len - 1;
+
+ /* Empty font map. */
+ if (len == 0)
+ return (0);
+ /* Character below minimal entry. */
+ if (src < map[0].vfm_src)
+ return (0);
+ /* Optimization: ASCII characters occur very often. */
+ if (src <= map[0].vfm_src + map[0].vfm_len)
+ return (src - map[0].vfm_src + map[0].vfm_dst);
+ /* Character above maximum entry. */
+ if (src > map[max].vfm_src + map[max].vfm_len)
+ return (0);
+
+ /* Binary search. */
+ while (max >= min) {
+ mid = (min + max) / 2;
+ if (src < map[mid].vfm_src)
+ max = mid - 1;
+ else if (src > map[mid].vfm_src + map[mid].vfm_len)
+ min = mid + 1;
+ else
+ return (src - map[mid].vfm_src + map[mid].vfm_dst);
+ }
+
+ return (0);
+}
+
+const uint8_t *
+vtfont_lookup(const struct vt_font *vf, term_char_t c)
+{
+ uint32_t src;
+ uint16_t dst;
+ size_t stride;
+ unsigned int normal_map;
+ unsigned int bold_map;
+
+ /*
+ * No support for printing right hand sides for CJK fullwidth
+ * characters. Simply print a space and assume that the left
+ * hand side describes the entire character.
+ */
+ src = TCHAR_CHARACTER(c);
+ if (TCHAR_FORMAT(c) & TF_CJK_RIGHT) {
+ normal_map = VFNT_MAP_NORMAL_RIGHT;
+ bold_map = VFNT_MAP_BOLD_RIGHT;
+ } else {
+ normal_map = VFNT_MAP_NORMAL;
+ bold_map = VFNT_MAP_BOLD;
+ }
+
+ if (TCHAR_FORMAT(c) & TF_BOLD) {
+ dst = vtfont_bisearch(vf->vf_map[bold_map],
+ vf->vf_map_count[bold_map], src);
+ if (dst != 0)
+ goto found;
+ }
+ dst = vtfont_bisearch(vf->vf_map[normal_map],
+ vf->vf_map_count[normal_map], src);
+
+found:
+ stride = howmany(vf->vf_width, 8) * vf->vf_height;
+ return (&vf->vf_bytes[dst * stride]);
+}
+
+struct vt_font *
+vtfont_ref(struct vt_font *vf)
+{
+
+ refcount_acquire(&vf->vf_refcount);
+ return (vf);
+}
+
+void
+vtfont_unref(struct vt_font *vf)
+{
+ unsigned int i;
+
+ if (refcount_release(&vf->vf_refcount)) {
+ for (i = 0; i < VFNT_MAPS; i++)
+ free(vf->vf_map[i], M_VTFONT);
+ free(vf->vf_bytes, M_VTFONT);
+ free(vf, M_VTFONT);
+ }
+}
+
+static int
+vtfont_validate_map(struct vt_font_map *vfm, unsigned int length,
+ unsigned int glyph_count)
+{
+ unsigned int i, last = 0;
+
+ for (i = 0; i < length; i++) {
+ /* Not ordered. */
+ if (i > 0 && vfm[i].vfm_src <= last)
+ return (EINVAL);
+ /*
+ * Destination extends amount of glyphs.
+ */
+ if (vfm[i].vfm_dst >= glyph_count ||
+ vfm[i].vfm_dst + vfm[i].vfm_len >= glyph_count)
+ return (EINVAL);
+ last = vfm[i].vfm_src + vfm[i].vfm_len;
+ }
+
+ return (0);
+}
+
+int
+vtfont_load(vfnt_t *f, struct vt_font **ret)
+{
+ size_t glyphsize, mapsize;
+ struct vt_font *vf;
+ int error;
+ unsigned int i;
+
+ /* Make sure the dimensions are valid. */
+ if (f->width < 1 || f->height < 1)
+ return (EINVAL);
+ if (f->width > VTFONT_MAXDIMENSION || f->height > VTFONT_MAXDIMENSION ||
+ f->glyph_count > VTFONT_MAXGLYPHS)
+ return (E2BIG);
+
+ /* Not too many mappings. */
+ for (i = 0; i < VFNT_MAPS; i++)
+ if (f->map_count[i] > VTFONT_MAXMAPPINGS)
+ return (E2BIG);
+
+ /* Character 0 must always be present. */
+ if (f->glyph_count < 1)
+ return (EINVAL);
+
+ glyphsize = howmany(f->width, 8) * f->height * f->glyph_count;
+ if (glyphsize > VTFONT_MAXGLYPHSIZE)
+ return (E2BIG);
+
+ /* Allocate new font structure. */
+ vf = malloc(sizeof *vf, M_VTFONT, M_WAITOK | M_ZERO);
+ vf->vf_bytes = malloc(glyphsize, M_VTFONT, M_WAITOK);
+ vf->vf_height = f->height;
+ vf->vf_width = f->width;
+ vf->vf_refcount = 1;
+
+ /* Allocate, copy in, and validate mappings. */
+ for (i = 0; i < VFNT_MAPS; i++) {
+ vf->vf_map_count[i] = f->map_count[i];
+ if (f->map_count[i] == 0)
+ continue;
+ mapsize = f->map_count[i] * sizeof(struct vt_font_map);
+ vf->vf_map[i] = malloc(mapsize, M_VTFONT, M_WAITOK);
+ error = copyin(f->map[i], vf->vf_map[i], mapsize);
+ if (error)
+ goto bad;
+ error = vtfont_validate_map(vf->vf_map[i], vf->vf_map_count[i],
+ f->glyph_count);
+ if (error)
+ goto bad;
+ }
+
+ /* Copy in glyph data. */
+ error = copyin(f->glyphs, vf->vf_bytes, glyphsize);
+ if (error)
+ goto bad;
+
+ /* Success. */
+ *ret = vf;
+ return (0);
+
+bad: vtfont_unref(vf);
+ return (error);
+}
Property changes on: trunk/sys/dev/vt/vt_font.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/dev/vt/vt_sysmouse.c
===================================================================
--- trunk/sys/dev/vt/vt_sysmouse.c (rev 0)
+++ trunk/sys/dev/vt/vt_sysmouse.c 2018-05-27 22:31:43 UTC (rev 10041)
@@ -0,0 +1,410 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 1999 Kazutaka YOKOTA <yokota at zodiac.mech.utsunomiya-u.ac.jp>
+ * All rights reserved.
+ *
+ * Copyright (c) 2009 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by Ed Schouten under sponsorship from the
+ * FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: stable/10/sys/dev/vt/vt_sysmouse.c 271022 2014-09-03 13:40:02Z emaste $");
+
+#include <sys/param.h>
+#include <sys/condvar.h>
+#include <sys/consio.h>
+#include <sys/fcntl.h>
+#include <sys/filio.h>
+#include <sys/kernel.h>
+#include <sys/malloc.h>
+#include <sys/poll.h>
+#include <sys/random.h>
+#include <sys/selinfo.h>
+#include <sys/sigio.h>
+#include <sys/signalvar.h>
+#include <sys/systm.h>
+#include <sys/uio.h>
+
+#include <dev/vt/vt.h>
+
+static d_open_t sysmouse_open;
+static d_close_t sysmouse_close;
+static d_read_t sysmouse_read;
+static d_ioctl_t sysmouse_ioctl;
+static d_poll_t sysmouse_poll;
+
+static struct cdevsw sysmouse_cdevsw = {
+ .d_version = D_VERSION,
+ .d_open = sysmouse_open,
+ .d_close = sysmouse_close,
+ .d_read = sysmouse_read,
+ .d_ioctl = sysmouse_ioctl,
+ .d_poll = sysmouse_poll,
+ .d_name = "sysmouse",
+};
+
+static struct mtx sysmouse_lock;
+static struct cv sysmouse_sleep;
+static struct selinfo sysmouse_bufpoll;
+
+static int sysmouse_level;
+static mousestatus_t sysmouse_status;
+static int sysmouse_flags;
+#define SM_ASYNC 0x1
+static struct sigio *sysmouse_sigio;
+
+#define SYSMOUSE_MAXFRAMES 250 /* 2 KB */
+static MALLOC_DEFINE(M_SYSMOUSE, "sysmouse", "sysmouse device");
+static unsigned char *sysmouse_buffer;
+static unsigned int sysmouse_start, sysmouse_length;
+
+static int
+sysmouse_buf_read(struct uio *uio, unsigned int length)
+{
+ unsigned char buf[MOUSE_SYS_PACKETSIZE];
+ int error;
+
+ if (sysmouse_buffer == NULL)
+ return (ENXIO);
+ else if (sysmouse_length == 0)
+ return (EWOULDBLOCK);
+
+ memcpy(buf, sysmouse_buffer +
+ sysmouse_start * MOUSE_SYS_PACKETSIZE, MOUSE_SYS_PACKETSIZE);
+ sysmouse_start = (sysmouse_start + 1) % SYSMOUSE_MAXFRAMES;
+ sysmouse_length--;
+
+ mtx_unlock(&sysmouse_lock);
+ error = uiomove(buf, length, uio);
+ mtx_lock(&sysmouse_lock);
+
+ return (error);
+}
+
+static void
+sysmouse_buf_store(const unsigned char buf[MOUSE_SYS_PACKETSIZE])
+{
+ unsigned int idx;
+
+ if (sysmouse_buffer == NULL || sysmouse_length == SYSMOUSE_MAXFRAMES)
+ return;
+
+ idx = (sysmouse_start + sysmouse_length) % SYSMOUSE_MAXFRAMES;
+ memcpy(sysmouse_buffer + idx * MOUSE_SYS_PACKETSIZE, buf,
+ MOUSE_SYS_PACKETSIZE);
+ sysmouse_length++;
+ cv_broadcast(&sysmouse_sleep);
+ selwakeup(&sysmouse_bufpoll);
+ if (sysmouse_flags & SM_ASYNC && sysmouse_sigio != NULL)
+ pgsigio(&sysmouse_sigio, SIGIO, 0);
+}
+
+void
+sysmouse_process_event(mouse_info_t *mi)
+{
+ /* MOUSE_BUTTON?DOWN -> MOUSE_MSC_BUTTON?UP */
+ static const int buttonmap[8] = {
+ MOUSE_MSC_BUTTON1UP | MOUSE_MSC_BUTTON2UP | MOUSE_MSC_BUTTON3UP,
+ MOUSE_MSC_BUTTON2UP | MOUSE_MSC_BUTTON3UP,
+ MOUSE_MSC_BUTTON1UP | MOUSE_MSC_BUTTON3UP,
+ MOUSE_MSC_BUTTON3UP,
+ MOUSE_MSC_BUTTON1UP | MOUSE_MSC_BUTTON2UP,
+ MOUSE_MSC_BUTTON2UP,
+ MOUSE_MSC_BUTTON1UP,
+ 0,
+ };
+ unsigned char buf[MOUSE_SYS_PACKETSIZE];
+ int x, y, iy, z;
+
+ random_harvest(mi, sizeof *mi, 2, RANDOM_MOUSE);
+
+ mtx_lock(&sysmouse_lock);
+ switch (mi->operation) {
+ case MOUSE_ACTION:
+ sysmouse_status.button = mi->u.data.buttons;
+ /* FALLTHROUGH */
+ case MOUSE_MOTION_EVENT:
+ x = mi->u.data.x;
+ y = mi->u.data.y;
+ z = mi->u.data.z;
+ break;
+ case MOUSE_BUTTON_EVENT:
+ x = y = z = 0;
+ if (mi->u.event.value > 0)
+ sysmouse_status.button |= mi->u.event.id;
+ else
+ sysmouse_status.button &= ~mi->u.event.id;
+ break;
+ default:
+ goto done;
+ }
+
+ sysmouse_status.dx += x;
+ sysmouse_status.dy += y;
+ sysmouse_status.dz += z;
+ sysmouse_status.flags |= ((x || y || z) ? MOUSE_POSCHANGED : 0) |
+ (sysmouse_status.obutton ^ sysmouse_status.button);
+ if (sysmouse_status.flags == 0)
+ goto done;
+
+
+ /* The first five bytes are compatible with MouseSystems. */
+ buf[0] = MOUSE_MSC_SYNC |
+ buttonmap[sysmouse_status.button & MOUSE_STDBUTTONS];
+ x = imax(imin(x, 255), -256);
+ buf[1] = x >> 1;
+ buf[3] = x - buf[1];
+ iy = -imax(imin(y, 255), -256);
+ buf[2] = iy >> 1;
+ buf[4] = iy - buf[2];
+ /* Extended part. */
+ z = imax(imin(z, 127), -128);
+ buf[5] = (z >> 1) & 0x7f;
+ buf[6] = (z - (z >> 1)) & 0x7f;
+ /* Buttons 4-10. */
+ buf[7] = (~sysmouse_status.button >> 3) & 0x7f;
+
+ sysmouse_buf_store(buf);
+
+#ifndef SC_NO_CUTPASTE
+ mtx_unlock(&sysmouse_lock);
+ vt_mouse_event(mi->operation, x, y, mi->u.event.id, mi->u.event.value,
+ sysmouse_level);
+ return;
+#endif
+
+done: mtx_unlock(&sysmouse_lock);
+}
+
+static int
+sysmouse_open(struct cdev *dev, int oflags, int devtype, struct thread *td)
+{
+ void *buf;
+
+ buf = malloc(MOUSE_SYS_PACKETSIZE * SYSMOUSE_MAXFRAMES,
+ M_SYSMOUSE, M_WAITOK);
+ mtx_lock(&sysmouse_lock);
+ if (sysmouse_buffer == NULL) {
+ sysmouse_buffer = buf;
+ sysmouse_start = sysmouse_length = 0;
+ sysmouse_level = 0;
+ } else {
+ free(buf, M_SYSMOUSE);
+ }
+ mtx_unlock(&sysmouse_lock);
+
+ return (0);
+}
+
+static int
+sysmouse_close(struct cdev *dev, int fflag, int devtype, struct thread *td)
+{
+
+ mtx_lock(&sysmouse_lock);
+ free(sysmouse_buffer, M_SYSMOUSE);
+ sysmouse_buffer = NULL;
+ sysmouse_level = 0;
+ mtx_unlock(&sysmouse_lock);
+
+ return (0);
+}
+
+static int
+sysmouse_read(struct cdev *dev, struct uio *uio, int ioflag)
+{
+ unsigned int length;
+ ssize_t oresid;
+ int error = 0;
+
+ oresid = uio->uio_resid;
+
+ mtx_lock(&sysmouse_lock);
+ length = sysmouse_level >= 1 ? MOUSE_SYS_PACKETSIZE :
+ MOUSE_MSC_PACKETSIZE;
+
+ while (uio->uio_resid >= length) {
+ error = sysmouse_buf_read(uio, length);
+ if (error == 0) {
+ /* Process the next frame. */
+ continue;
+ } else if (error != EWOULDBLOCK) {
+ /* Error (e.g. EFAULT). */
+ break;
+ } else {
+ /* Block. */
+ if (oresid != uio->uio_resid || ioflag & O_NONBLOCK)
+ break;
+ error = cv_wait_sig(&sysmouse_sleep, &sysmouse_lock);
+ if (error != 0)
+ break;
+ }
+ }
+ mtx_unlock(&sysmouse_lock);
+
+ return (error);
+}
+
+static int
+sysmouse_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int flag,
+ struct thread *td)
+{
+
+ switch (cmd) {
+ case FIOASYNC:
+ mtx_lock(&sysmouse_lock);
+ if (*(int *)data)
+ sysmouse_flags |= SM_ASYNC;
+ else
+ sysmouse_flags &= ~SM_ASYNC;
+ mtx_unlock(&sysmouse_lock);
+ return (0);
+ case FIONBIO:
+ return (0);
+ case FIOGETOWN:
+ *(int *)data = fgetown(&sysmouse_sigio);
+ return (0);
+ case FIOSETOWN:
+ return (fsetown(*(int *)data, &sysmouse_sigio));
+ case MOUSE_GETHWINFO: {
+ mousehw_t *hw = (mousehw_t *)data;
+
+ hw->buttons = 10;
+ hw->iftype = MOUSE_IF_SYSMOUSE;
+ hw->type = MOUSE_MOUSE;
+ hw->model = MOUSE_MODEL_GENERIC;
+ hw->hwid = 0;
+
+ return (0);
+ }
+ case MOUSE_GETLEVEL:
+ *(int *)data = sysmouse_level;
+ return (0);
+ case MOUSE_GETMODE: {
+ mousemode_t *mode = (mousemode_t *)data;
+
+ mode->rate = -1;
+ mode->resolution = -1;
+ mode->accelfactor = 0;
+ mode->level = sysmouse_level;
+
+ switch (mode->level) {
+ case 0:
+ mode->protocol = MOUSE_PROTO_MSC;
+ mode->packetsize = MOUSE_MSC_PACKETSIZE;
+ mode->syncmask[0] = MOUSE_MSC_SYNCMASK;
+ mode->syncmask[1] = MOUSE_MSC_SYNC;
+ break;
+ case 1:
+ mode->protocol = MOUSE_PROTO_SYSMOUSE;
+ mode->packetsize = MOUSE_SYS_PACKETSIZE;
+ mode->syncmask[0] = MOUSE_SYS_SYNCMASK;
+ mode->syncmask[1] = MOUSE_SYS_SYNC;
+ break;
+ }
+
+ return (0);
+ }
+ case MOUSE_GETSTATUS:
+ mtx_lock(&sysmouse_lock);
+ *(mousestatus_t *)data = sysmouse_status;
+
+ sysmouse_status.flags = 0;
+ sysmouse_status.obutton = sysmouse_status.button;
+ sysmouse_status.dx = 0;
+ sysmouse_status.dy = 0;
+ sysmouse_status.dz = 0;
+ mtx_unlock(&sysmouse_lock);
+
+ return (0);
+ case MOUSE_SETLEVEL: {
+ int level;
+
+ level = *(int *)data;
+ if (level != 0 && level != 1)
+ return (EINVAL);
+
+ sysmouse_level = level;
+ return (0);
+ }
+ case MOUSE_SETMODE: {
+ mousemode_t *mode = (mousemode_t *)data;
+
+ switch (mode->level) {
+ case -1:
+ /* Do nothing. */
+ break;
+ case 0:
+ case 1:
+ sysmouse_level = mode->level;
+ break;
+ default:
+ return (EINVAL);
+ }
+
+ return (0);
+ }
+ case MOUSE_MOUSECHAR:
+ return (0);
+ default:
+#ifdef VT_SYSMOUSE_DEBUG
+ printf("sysmouse: unknown ioctl: %c:%lx\n",
+ (char)IOCGROUP(cmd), IOCBASECMD(cmd));
+#endif
+ return (ENOIOCTL);
+ }
+}
+
+static int
+sysmouse_poll(struct cdev *dev, int events, struct thread *td)
+{
+ int revents = 0;
+
+ mtx_lock(&sysmouse_lock);
+ if (events & (POLLIN|POLLRDNORM)) {
+ if (sysmouse_length > 0)
+ revents = events & (POLLIN|POLLRDNORM);
+ else
+ selrecord(td, &sysmouse_bufpoll);
+ }
+ mtx_unlock(&sysmouse_lock);
+
+ return (revents);
+}
+
+static void
+sysmouse_drvinit(void *unused)
+{
+
+ if (!vty_enabled(VTY_VT))
+ return;
+ mtx_init(&sysmouse_lock, "sysmouse", NULL, MTX_DEF);
+ cv_init(&sysmouse_sleep, "sysmrd");
+ make_dev(&sysmouse_cdevsw, 0, UID_ROOT, GID_WHEEL, 0600,
+ "sysmouse");
+}
+
+SYSINIT(sysmouse, SI_SUB_DRIVERS, SI_ORDER_MIDDLE, sysmouse_drvinit, NULL);
Property changes on: trunk/sys/dev/vt/vt_sysmouse.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
More information about the Midnightbsd-cvs
mailing list