2 * $Id: prom.c,v 1.70 1999/08/25 21:26:08 cort Exp $
4 * Procedures for interfacing to the Open Firmware PROM on
5 * Power Macintosh computers.
7 * In particular, we are interested in the device tree
8 * and in using some of its services (exit, write to stdout).
10 * Paul Mackerras August 1996.
11 * Copyright (C) 1996 Paul Mackerras.
14 #include <linux/config.h>
15 #include <linux/kernel.h>
16 #include <linux/string.h>
17 #include <linux/init.h>
18 #include <linux/version.h>
21 #include <asm/spinlock.h>
24 #include <asm/processor.h>
28 #include <asm/bootx.h>
29 #include <asm/system.h>
32 * Properties whose value is longer than this get excluded from our
33 * copy of the device tree. This way we don't waste space storing
34 * things like "driver,AAPL,MacOS,PowerPC" properties.
36 #define MAX_PROPERTY_LENGTH 1024
51 struct pci_reg_property
{
52 struct pci_address addr
;
58 struct pci_address addr
;
64 struct isa_reg_property
{
71 struct pci_address addr
;
77 typedef unsigned long interpret_func(struct device_node
*, unsigned long);
78 static interpret_func interpret_pci_props
;
79 static interpret_func interpret_dbdma_props
;
80 static interpret_func interpret_isa_props
;
81 static interpret_func interpret_macio_props
;
82 static interpret_func interpret_root_props
;
84 #ifndef FB_MAX /* avoid pulling in all of the fb stuff */
87 char *prom_display_paths
[FB_MAX
] __initdata
= { 0, };
88 unsigned int prom_num_displays
= 0;
89 char *of_stdout_device
= 0;
92 ihandle prom_chosen
= 0, prom_stdout
= 0;
98 unsigned int rtas_data
= 0; /* virtual pointer */
99 unsigned int rtas_entry
= 0; /* physical pointer */
100 unsigned int rtas_size
= 0;
101 unsigned int old_rtas
= 0;
103 static struct device_node
*allnodes
= 0;
105 static void clearscreen(void);
106 static void flushscreen(void);
108 #ifdef CONFIG_BOOTX_TEXT
110 static void drawchar(char c
);
111 static void drawhex(unsigned long v
);
112 static void drawstring(const char *c
);
113 static void scrollscreen(void);
115 static void draw_byte(unsigned char c
, long locX
, long locY
);
116 static void draw_byte_32(unsigned char *bits
, unsigned long *base
);
117 static void draw_byte_16(unsigned char *bits
, unsigned long *base
);
118 static void draw_byte_8(unsigned char *bits
, unsigned long *base
);
122 static long g_max_loc_X
;
123 static long g_max_loc_Y
;
125 #define cmapsz (16*256)
127 static unsigned char vga_font
[cmapsz
];
132 static void *call_prom(const char *service
, int nargs
, int nret
, ...);
133 static void prom_exit(void);
134 static unsigned long copy_device_tree(unsigned long, unsigned long);
135 static unsigned long inspect_node(phandle
, struct device_node
*, unsigned long,
136 unsigned long, struct device_node
***);
137 static unsigned long finish_node(struct device_node
*, unsigned long,
139 static void relocate_nodes(void);
140 static unsigned long check_display(unsigned long);
141 static int prom_next_node(phandle
*);
142 static void *early_get_property(unsigned long, unsigned long, char *);
144 extern void enter_rtas(void *);
145 extern unsigned long reloc_offset(void);
147 extern char cmd_line
[512]; /* XXX */
148 boot_infos_t
*boot_infos
= 0; /* init it so it's in data segment not bss */
151 * prom_init() is called very early on, before the kernel text
152 * and data have been mapped to KERNELBASE. At this point the code
153 * is running at whatever address it has been loaded at, so
154 * references to extern and static variables must be relocated
155 * explicitly. The procedure reloc_offset() returns the address
156 * we're currently running at minus the address we were linked at.
157 * (Note that strings count as static variables.)
159 * Because OF may have mapped I/O devices into the area starting at
160 * KERNELBASE, particularly on CHRP machines, we can't safely call
161 * OF once the kernel has been mapped to KERNELBASE. Therefore all
162 * OF calls should be done within prom_init(), and prom_init()
163 * and all routines called within it must be careful to relocate
164 * references as necessary.
166 * Note that the bss is cleared *after* prom_init runs, so we have
167 * to make sure that any static or extern variables it accesses
168 * are put in the data segment.
170 #define PTRRELOC(x) ((typeof(x))((unsigned long)(x) + offset))
171 #define PTRUNRELOC(x) ((typeof(x))((unsigned long)(x) - offset))
172 #define RELOC(x) (*PTRRELOC(&(x)))
174 #define ALIGN(x) (((x) + sizeof(unsigned long)-1) & -sizeof(unsigned long))
176 /* Is boot-info compatible ? */
177 #define BOOT_INFO_IS_COMPATIBLE(bi) ((bi)->compatible_version <= BOOT_INFO_VERSION)
178 #define BOOT_INFO_IS_V2_COMPATIBLE(bi) ((bi)->version >= 2)
179 #define BOOT_INFO_IS_V4_COMPATIBLE(bi) ((bi)->version >= 4)
185 struct prom_args args
;
186 unsigned long offset
= reloc_offset();
188 args
.service
= "exit";
192 for (;;) /* should never get here */
200 struct prom_args args
;
201 unsigned long offset
= reloc_offset();
203 args
.service
= RELOC("enter");
211 call_prom(const char *service
, int nargs
, int nret
, ...)
215 unsigned long offset
= reloc_offset();
216 struct prom_args prom_args
;
218 prom_args
.service
= service
;
219 prom_args
.nargs
= nargs
;
220 prom_args
.nret
= nret
;
221 va_start(list
, nret
);
222 for (i
= 0; i
< nargs
; ++i
)
223 prom_args
.args
[i
] = va_arg(list
, void *);
225 for (i
= 0; i
< nret
; ++i
)
226 prom_args
.args
[i
+ nargs
] = 0;
227 RELOC(prom
)(&prom_args
);
228 return prom_args
.args
[nargs
];
233 prom_print(const char *msg
)
236 unsigned long offset
= reloc_offset();
238 if (RELOC(prom_stdout
) == 0)
240 #ifdef CONFIG_BOOTX_TEXT
241 if (RELOC(boot_infos
) != 0)
248 for (p
= msg
; *p
!= 0; p
= q
) {
249 for (q
= p
; *q
!= 0 && *q
!= '\n'; ++q
)
252 call_prom(RELOC("write"), 3, 1, RELOC(prom_stdout
),
256 call_prom(RELOC("write"), 3, 1, RELOC(prom_stdout
),
262 unsigned long smp_ibm_chrp_hack __initdata
= 0;
263 unsigned long smp_chrp_cpu_nr __initdata
= 1;
266 * We enter here early on, when the Open Firmware prom is still
267 * handling exceptions and the MMU hash table for us.
271 prom_init(int r3
, int r4
, prom_entry pp
)
276 char type
[16], *path
;
280 unsigned long offset
= reloc_offset();
284 /* check if we're apus, return if we are */
285 if ( r3
== 0x61707573 )
288 /* If we came here from BootX, clear the screen,
289 * set up some pointers and return. */
290 if (r3
== 0x426f6f58 && pp
== NULL
) {
291 boot_infos_t
*bi
= (boot_infos_t
*) r4
;
293 unsigned long ptr
, x
;
295 #ifdef CONFIG_BOOTX_TEXT
299 RELOC(boot_infos
) = PTRUNRELOC(bi
);
303 #ifdef CONFIG_BOOTX_TEXT
306 RELOC(g_max_loc_X
) = (bi
->dispDeviceRect
[2] - bi
->dispDeviceRect
[0]) / 8;
307 RELOC(g_max_loc_Y
) = (bi
->dispDeviceRect
[3] - bi
->dispDeviceRect
[1]) / 16;
309 /* Test if boot-info is compatible. Done only in config CONFIG_BOOTX_TEXT since
310 there is nothing much we can do with an incompatible version, except display
311 a message and eventually hang the processor...
313 I'll try to keep enough of boot-info compatible in the future to always allow
314 display of this message;
316 if (!BOOT_INFO_IS_COMPATIBLE(bi
))
317 prom_print(RELOC(" !!! WARNING - Incompatible version of BootX !!!\n\n\n"));
319 prom_print(RELOC("Welcome to Linux, kernel " UTS_RELEASE
"\n"));
320 prom_print(RELOC("\nstarted at : 0x"));
321 drawhex(reloc_offset() + KERNELBASE
);
322 prom_print(RELOC("\nlinked at : 0x"));
324 prom_print(RELOC("\nframe buffer at : 0x"));
325 drawhex((unsigned long)bi
->dispDeviceBase
);
326 prom_print(RELOC(" (phys), 0x"));
327 drawhex((unsigned long)bi
->logicalDisplayBase
);
328 prom_print(RELOC(" (log)"));
329 prom_print(RELOC("\nMSR : 0x"));
330 __asm__
__volatile__ ("mfmsr %0" : "=r" ((flags
)) : : "memory");
332 prom_print(RELOC("\n\n"));
334 /* Out of the #if/#endif since it flushes the clearscreen too */
337 /* New BootX enters kernel with MMU off, i/os are not allowed
338 here. This hack will have been done by the boostrap anyway.
340 if (bi
->version
< 4) {
342 * XXX If this is an iMac, turn off the USB controller.
344 model
= (char *) early_get_property
345 (r4
+ bi
->deviceTreeOffset
, 4, RELOC("model"));
347 && (strcmp(model
, RELOC("iMac,1")) == 0
348 || strcmp(model
, RELOC("PowerMac1,1")) == 0)) {
349 out_le32((unsigned *)0x80880008, 1); /* XXX */
353 space
= bi
->deviceTreeOffset
+ bi
->deviceTreeSize
;
355 space
= bi
->ramDisk
+ bi
->ramDiskSize
;
356 RELOC(klimit
) = PTRUNRELOC((char *) bi
+ space
);
358 /* New BootX will have flushed all TLBs and enters kernel with
359 MMU switched OFF, so this should not be useful anymore.
361 if (bi
->version
< 4) {
363 * Touch each page to make sure the PTEs for them
364 * are in the hash table - the aim is to try to avoid
365 * getting DSI exceptions while copying the kernel image.
367 for (ptr
= (KERNELBASE
+ offset
) & PAGE_MASK
;
368 ptr
< (unsigned long)bi
+ space
; ptr
+= PAGE_SIZE
)
369 x
= *(volatile unsigned long *)ptr
;
372 #ifdef CONFIG_BOOTX_TEXT
373 prom_print(RELOC("booting...\n"));
379 /* check if we're prep, return if we are */
380 if ( *(unsigned long *)(0) == 0xdeadc0de )
383 /* First get a handle for the stdout device */
385 RELOC(prom_chosen
) = call_prom(RELOC("finddevice"), 1, 1,
387 if (RELOC(prom_chosen
) == (void *)-1)
389 if ((int) call_prom(RELOC("getprop"), 4, 1, RELOC(prom_chosen
),
390 RELOC("stdout"), &RELOC(prom_stdout
),
391 sizeof(prom_stdout
)) <= 0)
394 /* Get the full OF pathname of the stdout device */
395 mem
= (unsigned long) RELOC(klimit
) + offset
;
398 call_prom(RELOC("instance-to-path"), 3, 1, RELOC(prom_stdout
), p
, 255);
399 RELOC(of_stdout_device
) = PTRUNRELOC(p
);
400 mem
+= strlen(p
) + 1;
402 /* Get the boot device and translate it to a full OF pathname. */
404 l
= (int) call_prom(RELOC("getprop"), 4, 1, RELOC(prom_chosen
),
405 RELOC("bootpath"), p
, 1<<20);
407 p
[l
] = 0; /* should already be null-terminated */
408 RELOC(bootpath
) = PTRUNRELOC(p
);
412 call_prom(RELOC("canon"), 3, 1, p
, d
, 1<<20);
413 RELOC(bootdevice
) = PTRUNRELOC(d
);
414 mem
= ALIGN(mem
+ strlen(d
) + 1);
417 mem
= check_display(mem
);
419 prom_print(RELOC("copying OF device tree..."));
420 mem
= copy_device_tree(mem
, mem
+ (1<<20));
421 prom_print(RELOC("done\n"));
424 RELOC(klimit
) = (char *) (mem
- offset
);
426 prom_rtas
= call_prom(RELOC("finddevice"), 1, 1, RELOC("/rtas"));
427 if (prom_rtas
!= (void *) -1) {
428 RELOC(rtas_size
) = 0;
429 call_prom(RELOC("getprop"), 4, 1, prom_rtas
,
430 RELOC("rtas-size"), &RELOC(rtas_size
), sizeof(rtas_size
));
431 prom_print(RELOC("instantiating rtas..."));
432 if (RELOC(rtas_size
) == 0) {
433 RELOC(rtas_data
) = 0;
436 * We do _not_ want the rtas_data inside the klimit
437 * boundry since it'll be squashed when we do the
438 * relocate of the kernel on chrp right after prom_init()
439 * in head.S. So, we just pick a spot in memory.
443 mem
= (mem
+ 4095) & -4096;
444 RELOC(rtas_data
) = mem
+ KERNELBASE
;
445 mem
+= RELOC(rtas_size
);
447 RELOC(rtas_data
) = (6<<20) + KERNELBASE
;
449 prom_rtas
= call_prom(RELOC("open"), 1, 1, RELOC("/rtas"));
452 struct prom_args prom_args
;
454 prom_args
.service
= RELOC("call-method");
455 prom_args
.nargs
= nargs
;
457 prom_args
.args
[0] = RELOC("instantiate-rtas");
458 prom_args
.args
[1] = prom_rtas
;
459 prom_args
.args
[2] = ((void *)(RELOC(rtas_data
)-KERNELBASE
));
460 RELOC(prom
)(&prom_args
);
461 if (prom_args
.args
[nargs
] != 0)
464 i
= (int)prom_args
.args
[nargs
+1];
465 RELOC(rtas_entry
) = i
;
467 if ((RELOC(rtas_entry
) == -1) || (RELOC(rtas_entry
) == 0))
468 prom_print(RELOC(" failed\n"));
470 prom_print(RELOC(" done\n"));
475 * With CHRP SMP we need to use the OF to start the other
476 * processors so we can't wait until smp_boot_cpus (the OF is
477 * trashed by then) so we have to put the processors into
478 * a holding pattern controlled by the kernel (not OF) before
481 * This uses a chunk of high memory, puts some holding pattern
482 * code there and sends the other processors off to there until
483 * smp_boot_cpus tells them to do something. We do that by using
484 * physical address 0x0. The holding pattern checks that address
485 * until its cpu # is there, when it is that cpu jumps to
486 * __secondary_start(). smp_boot_cpus() takes care of setting those
489 * We also use physical address 0x4 here to tell when a cpu
490 * is in its holding pattern code.
495 extern void __secondary_hold(void);
501 * XXX: hack to make sure we're chrp, assume that if we're
502 * chrp we have a device_type property -- Cort
504 node
= call_prom(RELOC("finddevice"), 1, 1, RELOC("/"));
505 if ( (int)call_prom(RELOC("getprop"), 4, 1, node
,
506 RELOC("device_type"),type
, sizeof(type
)) <= 0)
509 /* copy the holding pattern code to someplace safe (8M) */
510 memcpy( (void *)(8<<20), RELOC(__secondary_hold
), 0x100 );
511 for (i
= 8<<20; i
< ((8<<20)+0x100); i
+= 32)
513 asm volatile("dcbf 0,%0" : : "r" (i
) : "memory");
514 asm volatile("icbi 0,%0" : : "r" (i
) : "memory");
519 for (node
= 0; prom_next_node(&node
);)
522 call_prom(RELOC("getprop"), 4, 1, node
, RELOC("device_type"),
524 if (strcmp(type
, RELOC("cpu")) != 0)
527 memset(path
, 0, 256);
528 if ((int) call_prom(RELOC("package-to-path"), 3, 1,
529 node
, path
, 255) < 0)
531 /* XXX: hack - don't start cpu 0, this cpu -- Cort */
532 if ( smp_chrp_cpu_nr
++ == 0 )
534 RELOC(smp_ibm_chrp_hack
) = 1;
535 prom_print(RELOC("starting cpu "));
537 *(unsigned long *)(0x4) = 0;
538 asm volatile("dcbf 0,%0": : "r" (0x4) : "memory");
539 call_prom(RELOC("start-cpu"), 3, 0, node
, 8<<20, smp_chrp_cpu_nr
-1);
540 for ( i
= 0 ; (i
< 10000) &&
541 (*(ulong
*)(0x4) == (ulong
)0); i
++ )
543 if (*(ulong
*)(0x4) == (ulong
)smp_chrp_cpu_nr
-1 )
544 prom_print(RELOC("...ok\n"));
546 prom_print(RELOC("...failed\n"));
552 * If we have a display that we don't know how to drive,
553 * we will want to try to execute OF's open method for it
554 * later. However, OF will probably fall over if we do that
555 * we've taken over the MMU.
556 * So we check whether we will need to open the display,
557 * and if so, open it now.
561 check_display(unsigned long mem
)
566 unsigned long offset
= reloc_offset();
567 char type
[16], *path
;
569 for (node
= 0; prom_next_node(&node
); ) {
571 call_prom(RELOC("getprop"), 4, 1, node
, RELOC("device_type"),
573 if (strcmp(type
, RELOC("display")) != 0)
575 /* It seems OF doesn't null-terminate the path :-( */
577 memset(path
, 0, 256);
578 if ((int) call_prom(RELOC("package-to-path"), 3, 1,
579 node
, path
, 255) < 0)
581 prom_print(RELOC("opening display "));
583 ih
= call_prom(RELOC("open"), 1, 1, path
);
584 if (ih
== 0 || ih
== (ihandle
) -1) {
585 prom_print(RELOC("... failed\n"));
588 prom_print(RELOC("... ok\n"));
591 * If this display is the device that OF is using for stdout,
592 * move it to the front of the list.
594 mem
+= strlen(path
) + 1;
595 i
= RELOC(prom_num_displays
)++;
596 if (RELOC(of_stdout_device
) != 0 && i
> 0
597 && strcmp(PTRRELOC(RELOC(of_stdout_device
)), path
) == 0) {
599 RELOC(prom_display_paths
[i
])
600 = RELOC(prom_display_paths
[i
-1]);
602 RELOC(prom_display_paths
[i
]) = PTRUNRELOC(path
);
603 if (RELOC(prom_num_displays
) >= FB_MAX
)
611 prom_next_node(phandle
*nodep
)
614 unsigned long offset
= reloc_offset();
616 if ((node
= *nodep
) != 0
617 && (*nodep
= call_prom(RELOC("child"), 1, 1, node
)) != 0)
619 if ((*nodep
= call_prom(RELOC("peer"), 1, 1, node
)) != 0)
622 if ((node
= call_prom(RELOC("parent"), 1, 1, node
)) == 0)
624 if ((*nodep
= call_prom(RELOC("peer"), 1, 1, node
)) != 0)
630 * Make a copy of the device tree from the PROM.
634 copy_device_tree(unsigned long mem_start
, unsigned long mem_end
)
637 unsigned long new_start
;
638 struct device_node
**allnextp
;
639 unsigned long offset
= reloc_offset();
641 root
= call_prom(RELOC("peer"), 1, 1, (phandle
)0);
642 if (root
== (phandle
)0) {
643 prom_print(RELOC("couldn't get device tree root\n"));
646 allnextp
= &RELOC(allnodes
);
647 mem_start
= ALIGN(mem_start
);
648 new_start
= inspect_node(root
, 0, mem_start
, mem_end
, &allnextp
);
655 inspect_node(phandle node
, struct device_node
*dad
,
656 unsigned long mem_start
, unsigned long mem_end
,
657 struct device_node
***allnextpp
)
661 struct device_node
*np
;
662 struct property
*pp
, **prev_propp
;
663 char *prev_name
, *namep
;
665 unsigned long offset
= reloc_offset();
667 np
= (struct device_node
*) mem_start
;
668 mem_start
+= sizeof(struct device_node
);
669 memset(np
, 0, sizeof(*np
));
671 **allnextpp
= PTRUNRELOC(np
);
672 *allnextpp
= &np
->allnext
;
674 np
->parent
= PTRUNRELOC(dad
);
675 /* we temporarily use the `next' field as `last_child'. */
677 dad
->child
= PTRUNRELOC(np
);
679 dad
->next
->sibling
= PTRUNRELOC(np
);
683 /* get and store all properties */
684 prev_propp
= &np
->properties
;
685 prev_name
= RELOC("");
687 pp
= (struct property
*) mem_start
;
688 namep
= (char *) (pp
+ 1);
689 pp
->name
= PTRUNRELOC(namep
);
690 if ((int) call_prom(RELOC("nextprop"), 3, 1, node
, prev_name
,
693 mem_start
= ALIGN((unsigned long)namep
+ strlen(namep
) + 1);
695 valp
= (unsigned char *) mem_start
;
696 pp
->value
= PTRUNRELOC(valp
);
698 call_prom(RELOC("getprop"), 4, 1, node
, namep
,
699 valp
, mem_end
- mem_start
);
702 #ifdef MAX_PROPERTY_LENGTH
703 if (pp
->length
> MAX_PROPERTY_LENGTH
)
704 continue; /* ignore this property */
706 mem_start
= ALIGN(mem_start
+ pp
->length
);
707 *prev_propp
= PTRUNRELOC(pp
);
708 prev_propp
= &pp
->next
;
712 /* get the node's full name */
713 l
= (int) call_prom(RELOC("package-to-path"), 3, 1, node
,
714 (char *) mem_start
, mem_end
- mem_start
);
716 np
->full_name
= PTRUNRELOC((char *) mem_start
);
717 *(char *)(mem_start
+ l
) = 0;
718 mem_start
= ALIGN(mem_start
+ l
+ 1);
721 /* do all our children */
722 child
= call_prom(RELOC("child"), 1, 1, node
);
723 while (child
!= (void *)0) {
724 mem_start
= inspect_node(child
, np
, mem_start
, mem_end
,
726 child
= call_prom(RELOC("peer"), 1, 1, child
);
733 * finish_device_tree is called once things are running normally
734 * (i.e. with text and data mapped to the address they were linked at).
735 * It traverses the device tree and fills in the name, type,
736 * {n_}addrs and {n_}intrs fields of each node.
740 finish_device_tree(void)
742 unsigned long mem
= (unsigned long) klimit
;
746 mem
= finish_node(allnodes
, mem
, NULL
);
747 printk(KERN_INFO
"device tree used %lu bytes\n",
748 mem
- (unsigned long) allnodes
);
749 klimit
= (char *) mem
;
753 * early_get_property is used to access the device tree image prepared
754 * by BootX very early on, before the pointers in it have been relocated.
757 early_get_property(unsigned long base
, unsigned long node
, char *prop
)
759 struct device_node
*np
= (struct device_node
*)(base
+ node
);
762 for (pp
= np
->properties
; pp
!= 0; pp
= pp
->next
) {
763 pp
= (struct property
*) (base
+ (unsigned long)pp
);
764 if (strcmp((char *)((unsigned long)pp
->name
+ base
),
766 return (void *)((unsigned long)pp
->value
+ base
);
774 finish_node(struct device_node
*np
, unsigned long mem_start
,
775 interpret_func
*ifunc
)
777 struct device_node
*child
;
779 np
->name
= get_property(np
, "name", 0);
780 np
->type
= get_property(np
, "device_type", 0);
782 /* get the device addresses and interrupts */
784 mem_start
= ifunc(np
, mem_start
);
787 /* the f50 sets the name to 'display' and 'compatible' to what we
788 * expect for the name -- Cort
790 if (!strcmp(np
->name
, "display"))
791 np
->name
= get_property(np
, "compatible", 0);
793 if (!strcmp(np
->name
, "device-tree"))
794 ifunc
= interpret_root_props
;
795 else if (np
->type
== 0)
797 else if (!strcmp(np
->type
, "pci") || !strcmp(np
->type
, "vci"))
798 ifunc
= interpret_pci_props
;
799 else if (!strcmp(np
->type
, "dbdma"))
800 ifunc
= interpret_dbdma_props
;
801 else if (!strcmp(np
->type
, "mac-io")
802 || ifunc
== interpret_macio_props
)
803 ifunc
= interpret_macio_props
;
804 else if (!strcmp(np
->type
, "isa"))
805 ifunc
= interpret_isa_props
;
806 else if (!((ifunc
== interpret_dbdma_props
807 || ifunc
== interpret_macio_props
)
808 && (!strcmp(np
->type
, "escc")
809 || !strcmp(np
->type
, "media-bay"))))
812 /* if we were booted from BootX, convert the full name */
814 && strncmp(np
->full_name
, "Devices:device-tree", 19) == 0) {
815 if (np
->full_name
[19] == 0) {
816 strcpy(np
->full_name
, "/");
817 } else if (np
->full_name
[19] == ':') {
818 char *p
= np
->full_name
+ 19;
826 for (child
= np
->child
; child
!= NULL
; child
= child
->sibling
)
827 mem_start
= finish_node(child
, mem_start
, ifunc
);
833 * When BootX makes a copy of the device tree from the MacOS
834 * Name Registry, it is in the format we use but all of the pointers
835 * are offsets from the start of the tree.
836 * This procedure updates the pointers.
839 static void relocate_nodes(void)
842 struct device_node
*np
;
845 #define ADDBASE(x) (x = (x)? ((typeof (x))((unsigned long)(x) + base)): 0)
847 base
= (unsigned long) boot_infos
+ boot_infos
->deviceTreeOffset
;
848 allnodes
= (struct device_node
*)(base
+ 4);
849 for (np
= allnodes
; np
!= 0; np
= np
->allnext
) {
850 ADDBASE(np
->full_name
);
851 ADDBASE(np
->properties
);
854 ADDBASE(np
->sibling
);
855 ADDBASE(np
->allnext
);
856 for (pp
= np
->properties
; pp
!= 0; pp
= pp
->next
) {
866 interpret_pci_props(struct device_node
*np
, unsigned long mem_start
)
868 struct address_range
*adr
;
869 struct pci_reg_property
*pci_addrs
;
871 struct pci_intr_map
*imp
;
873 pci_addrs
= (struct pci_reg_property
*)
874 get_property(np
, "assigned-addresses", &l
);
875 if (pci_addrs
!= 0 && l
>= sizeof(struct pci_reg_property
)) {
877 adr
= (struct address_range
*) mem_start
;
878 while ((l
-= sizeof(struct pci_reg_property
)) >= 0) {
879 /* XXX assumes PCI addresses mapped 1-1 to physical */
880 adr
[i
].space
= pci_addrs
[i
].addr
.a_hi
;
881 adr
[i
].address
= pci_addrs
[i
].addr
.a_lo
;
882 adr
[i
].size
= pci_addrs
[i
].size_lo
;
887 mem_start
+= i
* sizeof(struct address_range
);
891 * If the pci host bridge has an interrupt-map property,
892 * look for our node in it.
894 if (np
->parent
!= 0 && pci_addrs
!= 0
895 && (imp
= (struct pci_intr_map
*)
896 get_property(np
->parent
, "interrupt-map", &ml
)) != 0
897 && (ip
= (int *) get_property(np
, "interrupts", &l
)) != 0) {
898 unsigned int devfn
= pci_addrs
[0].addr
.a_hi
& 0xff00;
900 np
->intrs
= (struct interrupt_info
*) mem_start
;
901 for (i
= 0; (ml
-= sizeof(struct pci_intr_map
)) >= 0; ++i
) {
902 if (imp
[i
].addr
.a_hi
== devfn
) {
903 np
->intrs
[np
->n_intrs
].line
= imp
[i
].intr
;
904 np
->intrs
[np
->n_intrs
].sense
= 0;
908 if (np
->n_intrs
== 0)
910 mem_start
+= np
->n_intrs
* sizeof(struct interrupt_info
);
914 ip
= (int *) get_property(np
, "AAPL,interrupts", &l
);
916 ip
= (int *) get_property(np
, "interrupts", &l
);
918 np
->intrs
= (struct interrupt_info
*) mem_start
;
919 np
->n_intrs
= l
/ sizeof(int);
920 mem_start
+= np
->n_intrs
* sizeof(struct interrupt_info
);
921 for (i
= 0; i
< np
->n_intrs
; ++i
) {
922 np
->intrs
[i
].line
= *ip
++;
923 np
->intrs
[i
].sense
= 0;
932 interpret_dbdma_props(struct device_node
*np
, unsigned long mem_start
)
934 struct reg_property
*rp
;
935 struct address_range
*adr
;
936 unsigned long base_address
;
938 struct device_node
*db
;
941 for (db
= np
->parent
; db
!= NULL
; db
= db
->parent
) {
942 if (!strcmp(db
->type
, "dbdma") && db
->n_addrs
!= 0) {
943 base_address
= db
->addrs
[0].address
;
948 rp
= (struct reg_property
*) get_property(np
, "reg", &l
);
949 if (rp
!= 0 && l
>= sizeof(struct reg_property
)) {
951 adr
= (struct address_range
*) mem_start
;
952 while ((l
-= sizeof(struct reg_property
)) >= 0) {
954 adr
[i
].address
= rp
[i
].address
+ base_address
;
955 adr
[i
].size
= rp
[i
].size
;
960 mem_start
+= i
* sizeof(struct address_range
);
963 ip
= (int *) get_property(np
, "AAPL,interrupts", &l
);
965 ip
= (int *) get_property(np
, "interrupts", &l
);
967 np
->intrs
= (struct interrupt_info
*) mem_start
;
968 np
->n_intrs
= l
/ sizeof(int);
969 mem_start
+= np
->n_intrs
* sizeof(struct interrupt_info
);
970 for (i
= 0; i
< np
->n_intrs
; ++i
) {
971 np
->intrs
[i
].line
= *ip
++;
972 np
->intrs
[i
].sense
= 0;
981 interpret_macio_props(struct device_node
*np
, unsigned long mem_start
)
983 struct reg_property
*rp
;
984 struct address_range
*adr
;
985 unsigned long base_address
;
987 struct device_node
*db
;
990 for (db
= np
->parent
; db
!= NULL
; db
= db
->parent
) {
991 if (!strcmp(db
->type
, "mac-io") && db
->n_addrs
!= 0) {
992 base_address
= db
->addrs
[0].address
;
997 rp
= (struct reg_property
*) get_property(np
, "reg", &l
);
998 if (rp
!= 0 && l
>= sizeof(struct reg_property
)) {
1000 adr
= (struct address_range
*) mem_start
;
1001 while ((l
-= sizeof(struct reg_property
)) >= 0) {
1003 adr
[i
].address
= rp
[i
].address
+ base_address
;
1004 adr
[i
].size
= rp
[i
].size
;
1009 mem_start
+= i
* sizeof(struct address_range
);
1012 ip
= (int *) get_property(np
, "interrupts", &l
);
1014 ip
= (int *) get_property(np
, "AAPL,interrupts", &l
);
1016 np
->intrs
= (struct interrupt_info
*) mem_start
;
1017 if (_machine
== _MACH_Pmac
) {
1019 np
->n_intrs
= l
/ sizeof(int);
1020 for (i
= 0; i
< np
->n_intrs
; ++i
) {
1021 np
->intrs
[i
].line
= *ip
++;
1022 np
->intrs
[i
].sense
= 0;
1026 np
->n_intrs
= l
/ (2 * sizeof(int));
1027 for (i
= 0; i
< np
->n_intrs
; ++i
) {
1028 np
->intrs
[i
].line
= openpic_to_irq(*ip
++);
1029 np
->intrs
[i
].sense
= *ip
++;
1032 mem_start
+= np
->n_intrs
* sizeof(struct interrupt_info
);
1039 static unsigned long
1040 interpret_isa_props(struct device_node
*np
, unsigned long mem_start
)
1042 struct isa_reg_property
*rp
;
1043 struct address_range
*adr
;
1046 rp
= (struct isa_reg_property
*) get_property(np
, "reg", &l
);
1047 if (rp
!= 0 && l
>= sizeof(struct isa_reg_property
)) {
1049 adr
= (struct address_range
*) mem_start
;
1050 while ((l
-= sizeof(struct reg_property
)) >= 0) {
1051 adr
[i
].space
= rp
[i
].space
;
1052 adr
[i
].address
= rp
[i
].address
1053 + (adr
[i
].space
? 0: _ISA_MEM_BASE
);
1054 adr
[i
].size
= rp
[i
].size
;
1059 mem_start
+= i
* sizeof(struct address_range
);
1062 ip
= (int *) get_property(np
, "interrupts", &l
);
1064 np
->intrs
= (struct interrupt_info
*) mem_start
;
1065 np
->n_intrs
= l
/ (2 * sizeof(int));
1066 mem_start
+= np
->n_intrs
* sizeof(struct interrupt_info
);
1067 for (i
= 0; i
< np
->n_intrs
; ++i
) {
1068 np
->intrs
[i
].line
= *ip
++;
1069 np
->intrs
[i
].sense
= *ip
++;
1077 static unsigned long
1078 interpret_root_props(struct device_node
*np
, unsigned long mem_start
)
1080 struct reg_property
*rp
;
1081 struct address_range
*adr
;
1084 rp
= (struct reg_property
*) get_property(np
, "reg", &l
);
1085 if (rp
!= 0 && l
>= sizeof(struct reg_property
)) {
1087 adr
= (struct address_range
*) mem_start
;
1088 while ((l
-= sizeof(struct reg_property
)) >= 0) {
1090 adr
[i
].address
= rp
[i
].address
;
1091 adr
[i
].size
= rp
[i
].size
;
1096 mem_start
+= i
* sizeof(struct address_range
);
1099 ip
= (int *) get_property(np
, "AAPL,interrupts", &l
);
1101 ip
= (int *) get_property(np
, "interrupts", &l
);
1103 np
->intrs
= (struct interrupt_info
*) mem_start
;
1104 np
->n_intrs
= l
/ sizeof(int);
1105 mem_start
+= np
->n_intrs
* sizeof(struct interrupt_info
);
1106 for (i
= 0; i
< np
->n_intrs
; ++i
) {
1107 np
->intrs
[i
].line
= *ip
++;
1108 np
->intrs
[i
].sense
= 0;
1116 * Construct and return a list of the device_nodes with a given name.
1119 struct device_node
*
1120 find_devices(const char *name
)
1122 struct device_node
*head
, **prevp
, *np
;
1125 for (np
= allnodes
; np
!= 0; np
= np
->allnext
) {
1126 if (np
->name
!= 0 && strcasecmp(np
->name
, name
) == 0) {
1136 * Construct and return a list of the device_nodes with a given type.
1139 struct device_node
*
1140 find_type_devices(const char *type
)
1142 struct device_node
*head
, **prevp
, *np
;
1145 for (np
= allnodes
; np
!= 0; np
= np
->allnext
) {
1146 if (np
->type
!= 0 && strcasecmp(np
->type
, type
) == 0) {
1155 /* Checks if the given "compat" string matches one of the strings in
1156 * the device's "compatible" property
1160 device_is_compatible(struct device_node
*device
, const char *compat
)
1165 cp
= (char *) get_property(device
, "compatible", &cplen
);
1169 if (strncasecmp(cp
, compat
, strlen(compat
)) == 0)
1180 * Construct and return a list of the device_nodes with a given type
1181 * and compatible property.
1184 struct device_node
*
1185 find_compatible_devices(const char *type
, const char *compat
)
1187 struct device_node
*head
, **prevp
, *np
;
1190 for (np
= allnodes
; np
!= 0; np
= np
->allnext
) {
1192 && !(np
->type
!= 0 && strcasecmp(np
->type
, type
) == 0))
1194 if (device_is_compatible(np
, compat
)) {
1204 * Find the device_node with a given full_name.
1207 struct device_node
*
1208 find_path_device(const char *path
)
1210 struct device_node
*np
;
1212 for (np
= allnodes
; np
!= 0; np
= np
->allnext
)
1213 if (np
->full_name
!= 0 && strcasecmp(np
->full_name
, path
) == 0)
1219 * Find the device_node with a given phandle.
1222 struct device_node
*
1223 find_phandle(phandle ph
)
1225 struct device_node
*np
;
1227 for (np
= allnodes
; np
!= 0; np
= np
->allnext
)
1234 * Find a property with a given name for a given node
1235 * and return the value.
1239 get_property(struct device_node
*np
, const char *name
, int *lenp
)
1241 struct property
*pp
;
1243 for (pp
= np
->properties
; pp
!= 0; pp
= pp
->next
)
1244 if (strcmp(pp
->name
, name
) == 0) {
1255 print_properties(struct device_node
*np
)
1257 struct property
*pp
;
1261 for (pp
= np
->properties
; pp
!= 0; pp
= pp
->next
) {
1262 printk(KERN_INFO
"%s", pp
->name
);
1263 for (i
= strlen(pp
->name
); i
< 16; ++i
)
1265 cp
= (char *) pp
->value
;
1266 for (i
= pp
->length
; i
> 0; --i
, ++cp
)
1267 if ((i
> 1 && (*cp
< 0x20 || *cp
> 0x7e))
1268 || (i
== 1 && *cp
!= 0))
1270 if (i
== 0 && pp
->length
> 1) {
1271 /* looks like a string */
1272 printk(" %s\n", (char *) pp
->value
);
1274 /* dump it in hex */
1278 if (pp
->length
% 4 == 0) {
1279 unsigned int *p
= (unsigned int *) pp
->value
;
1282 for (i
= 0; i
< n
; ++i
) {
1283 if (i
!= 0 && (i
% 4) == 0)
1285 printk(" %08x", *p
++);
1288 unsigned char *bp
= pp
->value
;
1290 for (i
= 0; i
< n
; ++i
) {
1291 if (i
!= 0 && (i
% 16) == 0)
1293 printk(" %02x", *bp
++);
1297 if (pp
->length
> 64)
1298 printk(" ... (length = %d)\n",
1305 /* this can be called after setup -- Cort */
1308 call_rtas(const char *service
, int nargs
, int nret
,
1309 unsigned long *outputs
, ...)
1313 struct device_node
*rtas
;
1316 unsigned long words
[16];
1320 rtas
= find_devices("rtas");
1323 tokp
= (int *) get_property(rtas
, service
, NULL
);
1325 printk(KERN_ERR
"No RTAS service called %s\n", service
);
1331 va_start(list
, outputs
);
1332 for (i
= 0; i
< nargs
; ++i
)
1333 u
.words
[i
+3] = va_arg(list
, unsigned long);
1339 enter_rtas((void *)__pa(&u
));
1341 if (nret
> 1 && outputs
!= NULL
)
1342 for (i
= 0; i
< nret
-1; ++i
)
1343 outputs
[i
] = u
.words
[i
+nargs
+4];
1344 return u
.words
[nargs
+3];
1357 /* Calc the base address of a given point (x,y) */
1358 #define CALC_BASE(x,y) ((BOOT_INFO_IS_V2_COMPATIBLE(bi) ? bi->logicalDisplayBase : \
1359 bi->dispDeviceBase) + (bi->dispDeviceRect[0] + (x)) * \
1360 (bi->dispDeviceDepth >> 3) + bi->dispDeviceRowBytes * \
1361 ((y) + bi->dispDeviceRect[1]))
1367 unsigned long offset
= reloc_offset();
1368 boot_infos_t
* bi
= PTRRELOC(RELOC(boot_infos
));
1369 unsigned long *base
= (unsigned long *)CALC_BASE(0,0);
1370 unsigned long width
= ((bi
->dispDeviceRect
[2] - bi
->dispDeviceRect
[0]) *
1371 (bi
->dispDeviceDepth
>> 3)) >> 2;
1374 for (i
=0; i
<(bi
->dispDeviceRect
[3] - bi
->dispDeviceRect
[1]); i
++)
1376 unsigned long *ptr
= base
;
1377 for(j
=width
; j
; --j
)
1379 base
+= (bi
->dispDeviceRowBytes
>> 2);
1383 __inline__
void dcbst(const void* addr
)
1385 __asm__
__volatile__ ("dcbst 0,%0" :: "r" (addr
));
1392 unsigned long offset
= reloc_offset();
1393 boot_infos_t
* bi
= PTRRELOC(RELOC(boot_infos
));
1394 unsigned long *base
= (unsigned long *)CALC_BASE(0,0);
1395 unsigned long width
= ((bi
->dispDeviceRect
[2] - bi
->dispDeviceRect
[0]) *
1396 (bi
->dispDeviceDepth
>> 3)) >> 2;
1399 for (i
=0; i
<(bi
->dispDeviceRect
[3] - bi
->dispDeviceRect
[1]); i
++)
1401 unsigned long *ptr
= base
;
1402 for(j
=width
; j
>0; j
-=8) {
1406 base
+= (bi
->dispDeviceRowBytes
>> 2);
1410 #ifdef CONFIG_BOOTX_TEXT
1416 unsigned long offset
= reloc_offset();
1417 boot_infos_t
* bi
= PTRRELOC(RELOC(boot_infos
));
1418 unsigned long *src
= (unsigned long *)CALC_BASE(0,16);
1419 unsigned long *dst
= (unsigned long *)CALC_BASE(0,0);
1420 unsigned long width
= ((bi
->dispDeviceRect
[2] - bi
->dispDeviceRect
[0]) *
1421 (bi
->dispDeviceDepth
>> 3)) >> 2;
1424 for (i
=0; i
<(bi
->dispDeviceRect
[3] - bi
->dispDeviceRect
[1] - 16); i
++)
1426 unsigned long *src_ptr
= src
;
1427 unsigned long *dst_ptr
= dst
;
1428 for(j
=width
; j
; --j
)
1429 *(dst_ptr
++) = *(src_ptr
++);
1430 src
+= (bi
->dispDeviceRowBytes
>> 2);
1431 dst
+= (bi
->dispDeviceRowBytes
>> 2);
1433 for (i
=0; i
<16; i
++)
1435 unsigned long *dst_ptr
= dst
;
1436 for(j
=width
; j
; --j
)
1438 dst
+= (bi
->dispDeviceRowBytes
>> 2);
1446 unsigned long offset
= reloc_offset();
1449 case '\r': RELOC(g_loc_X
) = 0; break;
1450 case '\n': RELOC(g_loc_X
) = 0; RELOC(g_loc_Y
)++; break;
1452 draw_byte(c
, RELOC(g_loc_X
)++, RELOC(g_loc_Y
));
1453 if (RELOC(g_loc_X
) >= RELOC(g_max_loc_X
)) {
1458 while (RELOC(g_loc_Y
) >= RELOC(g_max_loc_Y
)) {
1466 drawstring(const char *c
)
1474 drawhex(unsigned long v
)
1476 static char hex_table
[] = "0123456789abcdef";
1477 unsigned long offset
= reloc_offset();
1479 drawchar(RELOC(hex_table
)[(v
>> 28) & 0x0000000FUL
]);
1480 drawchar(RELOC(hex_table
)[(v
>> 24) & 0x0000000FUL
]);
1481 drawchar(RELOC(hex_table
)[(v
>> 20) & 0x0000000FUL
]);
1482 drawchar(RELOC(hex_table
)[(v
>> 16) & 0x0000000FUL
]);
1483 drawchar(RELOC(hex_table
)[(v
>> 12) & 0x0000000FUL
]);
1484 drawchar(RELOC(hex_table
)[(v
>> 8) & 0x0000000FUL
]);
1485 drawchar(RELOC(hex_table
)[(v
>> 4) & 0x0000000FUL
]);
1486 drawchar(RELOC(hex_table
)[(v
>> 0) & 0x0000000FUL
]);
1492 draw_byte(unsigned char c
, long locX
, long locY
)
1494 unsigned long offset
= reloc_offset();
1495 boot_infos_t
* bi
= PTRRELOC(RELOC(boot_infos
));
1496 unsigned char *base
= CALC_BASE(locX
<< 3, locY
<< 4);
1497 unsigned char *font
= &RELOC(vga_font
)[((unsigned long)c
) * 16];
1499 switch(bi
->dispDeviceDepth
) {
1501 draw_byte_32(font
, (unsigned long *)base
);
1504 draw_byte_16(font
, (unsigned long *)base
);
1507 draw_byte_8(font
, (unsigned long *)base
);
1515 static unsigned long expand_bits_8
[16] = {
1535 static unsigned long expand_bits_16
[4] = {
1545 draw_byte_32(unsigned char *font
, unsigned long *base
)
1547 unsigned long offset
= reloc_offset();
1548 boot_infos_t
* bi
= PTRRELOC(RELOC(boot_infos
));
1550 int fg
= 0xFFFFFFFFUL
;
1551 int bg
= 0x00000000UL
;
1554 for (l
= 0; l
< 16; ++l
)
1557 base
[0] = (-(bits
>> 7) & fg
) ^ bg
;
1558 base
[1] = (-((bits
>> 6) & 1) & fg
) ^ bg
;
1559 base
[2] = (-((bits
>> 5) & 1) & fg
) ^ bg
;
1560 base
[3] = (-((bits
>> 4) & 1) & fg
) ^ bg
;
1561 base
[4] = (-((bits
>> 3) & 1) & fg
) ^ bg
;
1562 base
[5] = (-((bits
>> 2) & 1) & fg
) ^ bg
;
1563 base
[6] = (-((bits
>> 1) & 1) & fg
) ^ bg
;
1564 base
[7] = (-(bits
& 1) & fg
) ^ bg
;
1565 base
= (unsigned long *) ((char *)base
+ bi
->dispDeviceRowBytes
);
1571 draw_byte_16(unsigned char *font
, unsigned long *base
)
1573 unsigned long offset
= reloc_offset();
1574 boot_infos_t
* bi
= PTRRELOC(RELOC(boot_infos
));
1576 int fg
= 0xFFFFFFFFUL
;
1577 int bg
= 0x00000000UL
;
1578 unsigned long *eb
= RELOC(expand_bits_16
);
1580 for (l
= 0; l
< 16; ++l
)
1583 base
[0] = (eb
[bits
>> 6] & fg
) ^ bg
;
1584 base
[1] = (eb
[(bits
>> 4) & 3] & fg
) ^ bg
;
1585 base
[2] = (eb
[(bits
>> 2) & 3] & fg
) ^ bg
;
1586 base
[3] = (eb
[bits
& 3] & fg
) ^ bg
;
1587 base
= (unsigned long *) ((char *)base
+ bi
->dispDeviceRowBytes
);
1593 draw_byte_8(unsigned char *font
, unsigned long *base
)
1595 unsigned long offset
= reloc_offset();
1596 boot_infos_t
* bi
= PTRRELOC(RELOC(boot_infos
));
1598 int fg
= 0x0F0F0F0FUL
;
1599 int bg
= 0x00000000UL
;
1600 unsigned long *eb
= RELOC(expand_bits_8
);
1602 for (l
= 0; l
< 16; ++l
)
1605 base
[0] = (eb
[bits
>> 4] & fg
) ^ bg
;
1606 base
[1] = (eb
[bits
& 0xf] & fg
) ^ bg
;
1607 base
= (unsigned long *) ((char *)base
+ bi
->dispDeviceRowBytes
);
1612 static unsigned char vga_font
[cmapsz
] = {
1613 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1614 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, 0x81, 0xbd,
1615 0x99, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xff,
1616 0xdb, 0xff, 0xff, 0xc3, 0xe7, 0xff, 0xff, 0x7e, 0x00, 0x00, 0x00, 0x00,
1617 0x00, 0x00, 0x00, 0x00, 0x6c, 0xfe, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10,
1618 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7c, 0xfe,
1619 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
1620 0x3c, 0x3c, 0xe7, 0xe7, 0xe7, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
1621 0x00, 0x00, 0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x18, 0x18, 0x3c,
1622 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c,
1623 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
1624 0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1625 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00,
1626 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0x99, 0xbd,
1627 0xbd, 0x99, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x1e, 0x0e,
1628 0x1a, 0x32, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00,
1629 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x18,
1630 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x33, 0x3f, 0x30, 0x30, 0x30,
1631 0x30, 0x70, 0xf0, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x63,
1632 0x7f, 0x63, 0x63, 0x63, 0x63, 0x67, 0xe7, 0xe6, 0xc0, 0x00, 0x00, 0x00,
1633 0x00, 0x00, 0x00, 0x18, 0x18, 0xdb, 0x3c, 0xe7, 0x3c, 0xdb, 0x18, 0x18,
1634 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfe, 0xf8,
1635 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x0e,
1636 0x1e, 0x3e, 0xfe, 0x3e, 0x1e, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00,
1637 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00,
1638 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
1639 0x66, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xdb,
1640 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x00, 0x00, 0x00, 0x00,
1641 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x0c, 0xc6,
1642 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1643 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c,
1644 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00,
1645 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1646 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1647 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1648 0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1649 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00,
1650 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0,
1651 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1652 0x00, 0x24, 0x66, 0xff, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1653 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x7c, 0x7c, 0xfe, 0xfe, 0x00,
1654 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x7c, 0x7c,
1655 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1656 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1657 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18,
1658 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00,
1659 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c,
1660 0x6c, 0xfe, 0x6c, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00,
1661 0x18, 0x18, 0x7c, 0xc6, 0xc2, 0xc0, 0x7c, 0x06, 0x06, 0x86, 0xc6, 0x7c,
1662 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0xc6, 0x0c, 0x18,
1663 0x30, 0x60, 0xc6, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c,
1664 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
1665 0x00, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1666 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30,
1667 0x30, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x18,
1668 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00,
1669 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00,
1670 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e,
1671 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1672 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00,
1673 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00,
1674 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1675 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1676 0x02, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00,
1677 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xce, 0xde, 0xf6, 0xe6, 0xc6, 0xc6, 0x7c,
1678 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18,
1679 0x18, 0x18, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6,
1680 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00,
1681 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0x3c, 0x06, 0x06, 0x06, 0xc6, 0x7c,
1682 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x1c, 0x3c, 0x6c, 0xcc, 0xfe,
1683 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0,
1684 0xc0, 0xc0, 0xfc, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
1685 0x00, 0x00, 0x38, 0x60, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c,
1686 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc6, 0x06, 0x06, 0x0c, 0x18,
1687 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6,
1688 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
1689 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x0c, 0x78,
1690 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00,
1691 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1692 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00,
1693 0x00, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x06,
1694 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00,
1695 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,
1696 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00,
1697 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x0c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18,
1698 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xde, 0xde,
1699 0xde, 0xdc, 0xc0, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38,
1700 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
1701 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc,
1702 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0,
1703 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x6c,
1704 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x00,
1705 0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xfe,
1706 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68,
1707 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66,
1708 0xc2, 0xc0, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00,
1709 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
1710 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18,
1711 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x0c,
1712 0x0c, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00,
1713 0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6,
1714 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60,
1715 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xe7,
1716 0xff, 0xff, 0xdb, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x00, 0x00, 0x00, 0x00,
1717 0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0xc6,
1718 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
1719 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x66,
1720 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
1721 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xde, 0x7c,
1722 0x0c, 0x0e, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c,
1723 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6,
1724 0xc6, 0x60, 0x38, 0x0c, 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
1725 0x00, 0x00, 0xff, 0xdb, 0x99, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c,
1726 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
1727 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3,
1728 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00,
1729 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xdb, 0xdb, 0xff, 0x66, 0x66,
1730 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x18,
1731 0x3c, 0x66, 0xc3, 0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3,
1732 0xc3, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
1733 0x00, 0x00, 0xff, 0xc3, 0x86, 0x0c, 0x18, 0x30, 0x60, 0xc1, 0xc3, 0xff,
1734 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30,
1735 0x30, 0x30, 0x30, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
1736 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00,
1737 0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c,
1738 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00,
1739 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1740 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
1741 0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1742 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c,
1743 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x60,
1744 0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00,
1745 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c,
1746 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc,
1747 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1748 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
1749 0x00, 0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x60, 0xf0,
1750 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc,
1751 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00, 0x00, 0x00, 0xe0, 0x60,
1752 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00,
1753 0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c,
1754 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x0e, 0x06, 0x06,
1755 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0xe0, 0x60,
1756 0x60, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00,
1757 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c,
1758 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xff, 0xdb,
1759 0xdb, 0xdb, 0xdb, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1760 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00,
1761 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c,
1762 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66,
1763 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00,
1764 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x1e, 0x00,
1765 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0,
1766 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x60,
1767 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x30,
1768 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00,
1769 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76,
1770 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3, 0xc3,
1771 0xc3, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1772 0x00, 0xc3, 0xc3, 0xc3, 0xdb, 0xdb, 0xff, 0x66, 0x00, 0x00, 0x00, 0x00,
1773 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0xc3,
1774 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6,
1775 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
1776 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00,
1777 0x00, 0x00, 0x0e, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e,
1778 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18,
1779 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x18,
1780 0x18, 0x18, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00,
1781 0x00, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1782 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6,
1783 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66,
1784 0xc2, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x0c, 0x06, 0x7c, 0x00, 0x00,
1785 0x00, 0x00, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76,
1786 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x00, 0x7c, 0xc6, 0xfe,
1787 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c,
1788 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
1789 0x00, 0x00, 0xcc, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76,
1790 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x00, 0x78, 0x0c, 0x7c,
1791 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x38,
1792 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
1793 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x60, 0x60, 0x66, 0x3c, 0x0c, 0x06,
1794 0x3c, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xfe,
1795 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00,
1796 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
1797 0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c,
1798 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x38, 0x18, 0x18,
1799 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x66,
1800 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
1801 0x00, 0x60, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c,
1802 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6,
1803 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x38, 0x00,
1804 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
1805 0x18, 0x30, 0x60, 0x00, 0xfe, 0x66, 0x60, 0x7c, 0x60, 0x60, 0x66, 0xfe,
1806 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x3b, 0x1b,
1807 0x7e, 0xd8, 0xdc, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x6c,
1808 0xcc, 0xcc, 0xfe, 0xcc, 0xcc, 0xcc, 0xcc, 0xce, 0x00, 0x00, 0x00, 0x00,
1809 0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c,
1810 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xc6,
1811 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0x18,
1812 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
1813 0x00, 0x30, 0x78, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76,
1814 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x00, 0xcc, 0xcc, 0xcc,
1815 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00,
1816 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, 0x00,
1817 0x00, 0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c,
1818 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
1819 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e,
1820 0xc3, 0xc0, 0xc0, 0xc0, 0xc3, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
1821 0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x60, 0xe6, 0xfc,
1822 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x66, 0x3c, 0x18, 0xff, 0x18,
1823 0xff, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x66, 0x66,
1824 0x7c, 0x62, 0x66, 0x6f, 0x66, 0x66, 0x66, 0xf3, 0x00, 0x00, 0x00, 0x00,
1825 0x00, 0x0e, 0x1b, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18,
1826 0xd8, 0x70, 0x00, 0x00, 0x00, 0x18, 0x30, 0x60, 0x00, 0x78, 0x0c, 0x7c,
1827 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30,
1828 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
1829 0x00, 0x18, 0x30, 0x60, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c,
1830 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x60, 0x00, 0xcc, 0xcc, 0xcc,
1831 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc,
1832 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00,
1833 0x76, 0xdc, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6,
1834 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00,
1835 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x6c,
1836 0x38, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1837 0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x60, 0xc0, 0xc6, 0xc6, 0x7c,
1838 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0,
1839 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1840 0x00, 0x00, 0xfe, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
1841 0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30, 0x60, 0xce, 0x9b, 0x06,
1842 0x0c, 0x1f, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30,
1843 0x66, 0xce, 0x96, 0x3e, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18,
1844 0x00, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00,
1845 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0xd8, 0x6c, 0x36, 0x00, 0x00,
1846 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x6c, 0x36,
1847 0x6c, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x44, 0x11, 0x44,
1848 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44,
1849 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa,
1850 0x55, 0xaa, 0x55, 0xaa, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77,
1851 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0x18, 0x18, 0x18, 0x18,
1852 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1853 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18,
1854 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8,
1855 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x36, 0x36, 0x36, 0x36,
1856 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1857 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36, 0x36,
1858 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0xf8,
1859 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x36, 0x36, 0x36, 0x36,
1860 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1861 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1862 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0xf6,
1863 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1864 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1865 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00, 0x00,
1866 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8,
1867 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1868 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1869 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00,
1870 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff,
1871 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1872 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1873 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18,
1874 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
1875 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18,
1876 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1877 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18,
1878 0x18, 0x18, 0x18, 0x18, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37,
1879 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1880 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1881 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36,
1882 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xff,
1883 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1884 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1885 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36,
1886 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff,
1887 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x36, 0x36, 0x36,
1888 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1889 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
1890 0x00, 0x00, 0x00, 0x00, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff,
1891 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1892 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1893 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36, 0x36,
1894 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3f,
1895 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18,
1896 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1897 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18,
1898 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f,
1899 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1900 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
1901 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18,
1902 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8,
1903 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1904 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1905 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1906 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
1907 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0,
1908 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
1909 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
1910 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
1911 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1912 0x00, 0x76, 0xdc, 0xd8, 0xd8, 0xd8, 0xdc, 0x76, 0x00, 0x00, 0x00, 0x00,
1913 0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0xd8, 0xcc, 0xc6, 0xc6, 0xc6, 0xcc,
1914 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc0, 0xc0, 0xc0,
1915 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1916 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00,
1917 0x00, 0x00, 0x00, 0xfe, 0xc6, 0x60, 0x30, 0x18, 0x30, 0x60, 0xc6, 0xfe,
1918 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xd8, 0xd8,
1919 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1920 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xc0, 0x00, 0x00, 0x00,
1921 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1922 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x18, 0x3c, 0x66, 0x66,
1923 0x66, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38,
1924 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00,
1925 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0x6c, 0x6c, 0x6c, 0x6c, 0xee,
1926 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x30, 0x18, 0x0c, 0x3e, 0x66,
1927 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1928 0x00, 0x7e, 0xdb, 0xdb, 0xdb, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1929 0x00, 0x00, 0x00, 0x03, 0x06, 0x7e, 0xdb, 0xdb, 0xf3, 0x7e, 0x60, 0xc0,
1930 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x30, 0x60, 0x60, 0x7c, 0x60,
1931 0x60, 0x60, 0x30, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c,
1932 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
1933 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00,
1934 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18,
1935 0x18, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30,
1936 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00,
1937 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x00, 0x7e,
1938 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x1b, 0x1b, 0x1b, 0x18, 0x18,
1939 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
1940 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00,
1941 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x18, 0x00,
1942 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00,
1943 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x6c, 0x6c,
1944 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1945 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,
1946 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1947 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0c, 0x0c,
1948 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x6c, 0x3c, 0x1c, 0x00, 0x00, 0x00, 0x00,
1949 0x00, 0xd8, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00,
1950 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xd8, 0x30, 0x60, 0xc8, 0xf8, 0x00,
1951 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1952 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00,
1953 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1954 0x00, 0x00, 0x00, 0x00,
1957 #endif /* CONFIG_BOOTX_TEXT */