From 438f47b041d1e9b4d1eebdae23c121a0584259e2 Mon Sep 17 00:00:00 2001 From: Joost Peters Date: Fri, 30 Jun 2006 21:00:39 +0000 Subject: move psp backend to backends/platforms/psp svn-id: r23358 --- backends/platform/psp/Makefile | 115 +++++++ backends/platform/psp/README.PSP | 110 ++++++ backends/platform/psp/icon0.png | Bin 0 -> 13139 bytes backends/platform/psp/kbd_l_c.cpp | 213 ++++++++++++ backends/platform/psp/kbd_ls_c.cpp | 224 +++++++++++++ backends/platform/psp/kbd_s_c.cpp | 206 ++++++++++++ backends/platform/psp/kbd_ss_c.cpp | 212 ++++++++++++ backends/platform/psp/osys_psp.cpp | 613 ++++++++++++++++++++++++++++++++++ backends/platform/psp/osys_psp.h | 132 ++++++++ backends/platform/psp/osys_psp_gu.cpp | 582 ++++++++++++++++++++++++++++++++ backends/platform/psp/osys_psp_gu.h | 60 ++++ backends/platform/psp/pic0.png | Bin 0 -> 4007 bytes backends/platform/psp/pic1.png | Bin 0 -> 159564 bytes backends/platform/psp/portdefs.h | 56 ++++ backends/platform/psp/psp_main.cpp | 150 +++++++++ backends/platform/psp/trace.cpp | 75 +++++ backends/platform/psp/trace.h | 40 +++ backends/psp/Makefile | 115 ------- backends/psp/README.PSP | 110 ------ backends/psp/icon0.png | Bin 13139 -> 0 bytes backends/psp/kbd_l_c.cpp | 213 ------------ backends/psp/kbd_ls_c.cpp | 224 ------------- backends/psp/kbd_s_c.cpp | 206 ------------ backends/psp/kbd_ss_c.cpp | 212 ------------ backends/psp/osys_psp.cpp | 613 ---------------------------------- backends/psp/osys_psp.h | 132 -------- backends/psp/osys_psp_gu.cpp | 582 -------------------------------- backends/psp/osys_psp_gu.h | 60 ---- backends/psp/pic0.png | Bin 4007 -> 0 bytes backends/psp/pic1.png | Bin 159564 -> 0 bytes backends/psp/portdefs.h | 56 ---- backends/psp/psp_main.cpp | 150 --------- backends/psp/trace.cpp | 75 ----- backends/psp/trace.h | 40 --- 34 files changed, 2788 insertions(+), 2788 deletions(-) create mode 100644 backends/platform/psp/Makefile create mode 100644 backends/platform/psp/README.PSP create mode 100644 backends/platform/psp/icon0.png create mode 100644 backends/platform/psp/kbd_l_c.cpp create mode 100644 backends/platform/psp/kbd_ls_c.cpp create mode 100644 backends/platform/psp/kbd_s_c.cpp create mode 100644 backends/platform/psp/kbd_ss_c.cpp create mode 100644 backends/platform/psp/osys_psp.cpp create mode 100644 backends/platform/psp/osys_psp.h create mode 100644 backends/platform/psp/osys_psp_gu.cpp create mode 100644 backends/platform/psp/osys_psp_gu.h create mode 100644 backends/platform/psp/pic0.png create mode 100644 backends/platform/psp/pic1.png create mode 100644 backends/platform/psp/portdefs.h create mode 100644 backends/platform/psp/psp_main.cpp create mode 100644 backends/platform/psp/trace.cpp create mode 100644 backends/platform/psp/trace.h delete mode 100644 backends/psp/Makefile delete mode 100644 backends/psp/README.PSP delete mode 100644 backends/psp/icon0.png delete mode 100644 backends/psp/kbd_l_c.cpp delete mode 100644 backends/psp/kbd_ls_c.cpp delete mode 100644 backends/psp/kbd_s_c.cpp delete mode 100644 backends/psp/kbd_ss_c.cpp delete mode 100644 backends/psp/osys_psp.cpp delete mode 100644 backends/psp/osys_psp.h delete mode 100644 backends/psp/osys_psp_gu.cpp delete mode 100644 backends/psp/osys_psp_gu.h delete mode 100644 backends/psp/pic0.png delete mode 100644 backends/psp/pic1.png delete mode 100644 backends/psp/portdefs.h delete mode 100644 backends/psp/psp_main.cpp delete mode 100644 backends/psp/trace.cpp delete mode 100644 backends/psp/trace.h (limited to 'backends') diff --git a/backends/platform/psp/Makefile b/backends/platform/psp/Makefile new file mode 100644 index 0000000000..0753856ab0 --- /dev/null +++ b/backends/platform/psp/Makefile @@ -0,0 +1,115 @@ +# SCUMMVM-PSP MakeFile +# $URL$ +# $Id$ + +#control build +DISABLE_SCALERS = true +DISABLE_HQ_SCALERS = true + +srcdir = ../../.. +VPATH = $(srcdir) +HAVE_GCC3 = false + +PSPSDK=$(shell psp-config --pspsdk-path) +PSPBIN = $(PSPSDK)/../bin +LDFLAGS = + +CXX = psp-g++ +AS = psp-gcc +LD = psp-gcc +AR = psp-ar cru +RANLIB = psp-ranlib +STRIP = psp-strip +MKDIR = mkdir -p +RM = rm -f +MKSFO = mksfo +PACK_PBP = pack-pbp +FIXUP = psp-fixup-imports + +#check PSPSDK presence +ifeq ($(PSPSDK),) +$(error $$(PSPSDK) is undefined. Use "PSPSDK := $$(shell psp-config --pspsdk-path)" in your Makefile) +endif + +# Add in PSPSDK includes and libraries. +INCDIR := $(srcdir) . $(srcdir)/engines/ . $(PSPSDK)/include +LIBDIR := $(LIBDIR) . $(PSPSDK)/lib + +CFLAGS = -O2 -Wall -D__PSP__ -DNONSTANDARD_PORT -DUSE_ZLIB -Wno-multichar `$(PSPBIN)/sdl-config --cflags` +CFLAGS := $(addprefix -I,$(INCDIR)) $(CFLAGS) +LDFLAGS := $(addprefix -L,$(LIBDIR)) $(LDFLAGS) +LIBS = + +#comment this out if you don't want to use libmad +CFLAGS += -DUSE_MAD +LIBS += -lmad + +#comment this out if you don't want to use libtremor +CFLAGS += -DUSE_VORBIS -DUSE_TREMOR +LIBS += -lvorbisidec + +#comment this out if you don't want to use libmpeg2 +CFLAGS += -DUSE_MPEG2 +LIBS += -lmpeg2 + +LIBS += `$(PSPBIN)/sdl-config --libs` -lz -lstdc++ -lpspdisplay -lpspgu -lpspctrl -lpspsdk -lc -lpspuser -lpspkernel + +CXXFLAGS := $(CFLAGS) $(CXXFLAGS) -fno-exceptions -fno-rtti +ASFLAGS := $(CFLAGS) $(ASFLAGS) + +TARGET = scummvm-psp +OBJS := psp_main.o \ + ../fs/psp/psp_fs.o \ + osys_psp.o \ + osys_psp_gu.o \ + kbd_ss_c.o \ + kbd_s_c.o \ + kbd_ls_c.o \ + kbd_l_c.o \ + trace.o + +MODULE_DIRS += . + +include $(srcdir)/Makefile.common + +PSP_EBOOT_SFO = param.sfo +PSP_EBOOT_TITLE = ScummVM-PSP +PSP_EBOOT = EBOOT.PBP +PSP_EBOOT_ICON = icon0.png +PSP_EBOOT_ICON1 = NULL +PSP_EBOOT_PIC0 = pic0.png +PSP_EBOOT_PIC1 = pic1.png +PSP_EBOOT_SND0 = NULL +PSP_EBOOT_PSAR = NULL + +all: $(PSP_EBOOT) + +$(TARGET).elf: $(OBJS) + $(LD) $^ $(LIBS) -o $@ + $(FIXUP) $@ + +$(PSP_EBOOT_SFO): + $(MKSFO) '$(PSP_EBOOT_TITLE)' $@ + +$(PSP_EBOOT): $(TARGET).elf $(PSP_EBOOT_SFO) + $(STRIP) $(TARGET).elf + $(PACK_PBP) $@ $(PSP_EBOOT_SFO) $(PSP_EBOOT_ICON) $(PSP_EBOOT_ICON1) \ + $(PSP_EBOOT_PIC0) $(PSP_EBOOT_PIC1) $(PSP_EBOOT_SND0) \ + $(TARGET).elf $(PSP_EBOOT_PSAR) + +kxploit: $(TARGET).elf $(PSP_EBOOT_SFO) + mkdir -p "$(TARGET)" + $(STRIP) $(TARGET).elf -o $(TARGET)/$(PSP_EBOOT) + mkdir -p "$(TARGET)%" + $(PACK_PBP) "$(TARGET)%/$(PSP_EBOOT)" $(PSP_EBOOT_SFO) $(PSP_EBOOT_ICON) \ + $(PSP_EBOOT_ICON1) $(PSP_EBOOT_PIC0) $(PSP_EBOOT_PIC1) \ + $(PSP_EBOOT_SND0) NULL $(PSP_EBOOT_PSAR) + +SCEkxploit: $(TARGET).elf $(PSP_EBOOT_SFO) + mkdir -p "__SCE__$(TARGET)" + $(STRIP) $(TARGET).elf -o __SCE__$(TARGET)/$(PSP_EBOOT) + mkdir -p "%__SCE__$(TARGET)" + $(PACK_PBP) "%__SCE__$(TARGET)/$(PSP_EBOOT)" $(PSP_EBOOT_SFO) $(PSP_EBOOT_ICON) \ + $(PSP_EBOOT_ICON1) $(PSP_EBOOT_PIC0) $(PSP_EBOOT_PIC1) \ + $(PSP_EBOOT_SND0) NULL $(PSP_EBOOT_PSAR) + diff --git a/backends/platform/psp/README.PSP b/backends/platform/psp/README.PSP new file mode 100644 index 0000000000..6076881a2e --- /dev/null +++ b/backends/platform/psp/README.PSP @@ -0,0 +1,110 @@ +ScummVM-PSP 0.9.0SVN README +=========================== + +Installation +============ + - Copy the relevant game datafiles to your memory stick (location + doesn't matter). + - Install ScummVM like any other homebrew + - Run ScummVM and use the launcher to add games and run them + + +Controls +======== + +Left trigger - ESC +Right trigger - Enter +Analog - Mouse movement +Directionals - Mouse movement +Analog + triangle - Fine control mouse +Cross - Mouse button 1 +Circle - Mouse button 2 +Square - '.' (skip dialogue in some games) +Select - Show/Hide Virtual Keyboard +Start - F5 + +Notes +===== + +- While it's possible to compress certain game resources to reduce their size, + this can (and usually will) cause games (especially animation) to be choppy + sometimes, as it ofcourse needs extra CPU power to decode these files. + As such, it is recommended to play games in their original, uncompressed, + form whenever possible. + +- Sleep/Suspend mode currently isn't supported, so don't use it when + running ScummVM. + +Frequently Asked Questions +========================== + +Q: What do I need to run the games? +A: A 1.00 or 1.50 firmware PSP (or an EBOOT loader on firmware 2.00 or + higher), and the necessary datafiles for the game you want to play and + obviously this ScummVM port. + +Q: Can I run game X with this? +A: You can find the list of supported games on the compatibility page + on http://www.scummvm.org. + Note that ScummVM is NOT a 'DOS (game) emulator', but written + specifically for certain games/engines. + +Q: My Monkey Island 1 doesn't have any music, what gives? +A: If your version of Monkey Island came on a CD then it has the music + as CD Audio tracks. You need to rip those to MP3/Ogg and copy them + to the same directory as the game datafiles for music to work. + +Q: Game X crashes, or feature Y doesn't work. Can you fix this? +A: Possibly. + Because of the large amount of games ScummVM supports we obviously haven't + played them all start-to-finish on the PSP, so it's possible there + are bugs or issues that we're not aware of. + When you encounter such a bug, please use the "Bug Tracker" you find linked + on the ScummVM website, and mention all relevant info (i.e. that you're + using the PSP version, which ScummVM version it is, if the problem exists + in a recent PC SVN version, a detailed description of the problem, + and if at all possible a nearby savegame), this will make it much easier + for us to reproduce (and hopefully fix) the problem. + + +Building the source code +======================== +To build ScummVM for PSP you need: + +- PSP toolchain (svn co svn://svn.pspdev.org/psp/trunk/psptoolchain) + +- PSPSDK (svn co svn://svn.pspdev.org/psp/trunk/pspsdk) + Note: This usually gets installed by the PSP toolchain, + so you don't have to do it manually. + +- SDL (svn co svn://svn.pspdev.org/psp/trunk/SDL) + +- zlib (svn co svn://svn.pspdev.org/psp/trunk/zlib) + +- libmad(*) (svn co svn://svn.pspdev.org/psp/trunk/libmad) + +- libTremor(*) (svn co svn://svn.pspdev.org/psp/trunk/libTremor) + +- libmpeg2(*) (http://libmpeg2.sf.net) + Note: As this is not in pspdev svn, you'll need to build + it manually. Adding a psp target/host to config.sub and + using a configure line similar to the SDL port worked for + me. + +(*) = optional + +When you've installed these libraries (read their README.PSP for instructions), +type "make" in the backends/psp directory to build an 1.00 firmware EBOOT.PBP, +or "make kxploit" to build the 1.50/kxploit EBOOT.PBPs + +You can control most of the build process (engines and libraries used) from +the Makefile. + + +Port Authors +============ + +Joost Peters (joostp@scummvm.org) +Paolo Costabel (paoloc@pacbell.net) +Thomas Mayer (tommybear@internode.on.net) + diff --git a/backends/platform/psp/icon0.png b/backends/platform/psp/icon0.png new file mode 100644 index 0000000000..b5fb9008b0 Binary files /dev/null and b/backends/platform/psp/icon0.png differ diff --git a/backends/platform/psp/kbd_l_c.cpp b/backends/platform/psp/kbd_l_c.cpp new file mode 100644 index 0000000000..5f10da0611 --- /dev/null +++ b/backends/platform/psp/kbd_l_c.cpp @@ -0,0 +1,213 @@ +#ifndef __keyboard_letters_compressed__ +#define __keyboard_letters_compressed__ + +unsigned int size_keyboard_letters_compressed = 3271; +unsigned char keyboard_letters_compressed[] __attribute__((aligned(16))) = { + 0x78, 0x9c, 0xed, 0x9d, 0x69, 0x97, 0xb4, 0x36, 0x0e, 0x46, 0x99, 0xec, 0x99, 0xc9, 0x32, 0x93, + 0x3d, 0xb3, 0xfd, 0xff, 0x5f, 0x48, 0xbe, 0xe6, 0xa4, 0xbb, 0x0b, 0x4b, 0xb2, 0x24, 0xdb, 0xd8, + 0x66, 0x11, 0xcf, 0x3d, 0x27, 0xd5, 0x14, 0x16, 0xc6, 0x70, 0xb1, 0x31, 0xa6, 0x9c, 0xf7, 0x8f, + 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x11, 0x2b, 0xb8, + 0x31, 0xb0, 0x1b, 0x1d, 0xd8, 0x8d, 0x0e, 0xf4, 0x06, 0x07, 0x7e, 0x63, 0x03, 0xbd, 0xc1, 0x81, + 0xdf, 0xd8, 0x40, 0x6f, 0x70, 0xe0, 0x37, 0x36, 0xf0, 0x1b, 0x9b, 0x92, 0xdf, 0xbf, 0x99, 0xf0, + 0x7c, 0x3e, 0x31, 0xe1, 0x71, 0x9f, 0x9a, 0xf0, 0xb8, 0xcf, 0x4c, 0x78, 0xdc, 0xe7, 0x26, 0x3c, + 0xee, 0x0b, 0x13, 0x1e, 0xf7, 0xa5, 0x09, 0x8f, 0xfb, 0xca, 0x84, 0xc7, 0x7d, 0x6d, 0xc2, 0xe3, + 0xfe, 0x6e, 0xc2, 0xe3, 0xfe, 0x61, 0xb2, 0xaa, 0x14, 0xfc, 0xda, 0x7a, 0xb9, 0x60, 0x5b, 0x2f, + 0x17, 0x6c, 0xeb, 0xe5, 0x82, 0x6d, 0xbd, 0x5c, 0xb0, 0xad, 0x97, 0x0b, 0xb6, 0xf5, 0x72, 0xc1, + 0xb6, 0x5e, 0x2e, 0xd8, 0xd6, 0xcb, 0x05, 0xdb, 0x7a, 0xb9, 0x60, 0x5b, 0x2f, 0x17, 0x6c, 0xeb, + 0x35, 0x04, 0xfb, 0x7e, 0x3d, 0xbd, 0x54, 0xb0, 0xa7, 0x97, 0x0a, 0xf6, 0xf4, 0x52, 0xc1, 0x9e, + 0x5e, 0x2a, 0xd8, 0xd3, 0x4b, 0x05, 0x7b, 0x7a, 0xa9, 0x60, 0x4f, 0x2f, 0x15, 0xec, 0xe9, 0xa5, + 0x82, 0x3d, 0xbd, 0x54, 0xb0, 0xa7, 0x97, 0x0a, 0xf6, 0xf4, 0xea, 0x82, 0xe1, 0x17, 0x7e, 0xe1, + 0x37, 0xb4, 0x5f, 0x6d, 0x33, 0xcd, 0xaf, 0x16, 0xa7, 0xf9, 0xd5, 0xe2, 0x34, 0xbf, 0x5a, 0x9c, + 0xe6, 0x57, 0x8b, 0xd3, 0xfc, 0x6a, 0x71, 0x9a, 0x5f, 0x2d, 0x4e, 0xf3, 0xab, 0xc5, 0x69, 0x7e, + 0xb5, 0x38, 0xcd, 0xaf, 0x16, 0xa7, 0xf9, 0xd5, 0xe2, 0xe0, 0xf7, 0x46, 0x7e, 0x97, 0x65, 0xd1, + 0x13, 0xae, 0xe0, 0x97, 0x14, 0x6e, 0x1d, 0xe7, 0xf7, 0x95, 0xeb, 0xf5, 0xfc, 0xf2, 0xe3, 0xf5, + 0xfc, 0xd2, 0x48, 0xf8, 0x9d, 0xe8, 0x77, 0x49, 0x65, 0xbc, 0xa4, 0xdf, 0xd5, 0x4c, 0x20, 0x1a, + 0xf9, 0x7e, 0xe1, 0x37, 0x69, 0xa4, 0x25, 0x3c, 0xd2, 0x2f, 0x05, 0x7e, 0xcf, 0xf7, 0xbb, 0xbc, + 0x93, 0x27, 0x84, 0xf4, 0x4b, 0x8f, 0xf6, 0x09, 0x7e, 0xdf, 0xa3, 0x4e, 0xf1, 0x5b, 0x75, 0xff, + 0x1d, 0xec, 0x97, 0x1f, 0xae, 0xef, 0x97, 0x5c, 0x07, 0x9e, 0x5f, 0x12, 0xe6, 0xfa, 0xa5, 0x39, + 0x3a, 0x7e, 0x69, 0x76, 0xfd, 0x7e, 0x3f, 0x82, 0xaa, 0xfc, 0x92, 0x03, 0x3e, 0xae, 0x7f, 0x75, + 0xa2, 0x5f, 0x12, 0x68, 0xfb, 0x7d, 0x8b, 0xd8, 0xf2, 0xb3, 0xfd, 0xf2, 0xfc, 0x4c, 0xbf, 0x3c, + 0x3b, 0xc7, 0x2f, 0xbf, 0xfe, 0x86, 0xf8, 0x25, 0x71, 0x47, 0xfb, 0x7d, 0x85, 0x8e, 0xb8, 0xff, + 0xd2, 0x13, 0x53, 0x6c, 0x9f, 0x3f, 0xfe, 0x98, 0x7e, 0xb7, 0x30, 0x99, 0xf0, 0x46, 0xd2, 0x28, + 0xce, 0xb3, 0xe5, 0x57, 0x84, 0x1d, 0x5b, 0x7f, 0xd7, 0xd3, 0xfc, 0x6e, 0x91, 0x43, 0xee, 0xbf, + 0x0d, 0xf5, 0xb7, 0xd6, 0x6f, 0x9e, 0xf0, 0x06, 0xfc, 0xaa, 0x09, 0xd2, 0x6f, 0x0a, 0x3c, 0xba, + 0x7d, 0x3e, 0xc1, 0x2f, 0x6b, 0x78, 0x1f, 0xe1, 0x97, 0xc4, 0x3d, 0xc0, 0x2f, 0x3b, 0xac, 0xa3, + 0xfb, 0xcf, 0xf0, 0xfb, 0xc6, 0xec, 0xfb, 0xef, 0x96, 0xdf, 0xd1, 0xcf, 0xbf, 0x67, 0xf9, 0x1d, + 0xd6, 0x3e, 0x8b, 0xe7, 0x80, 0x6b, 0xf6, 0x9f, 0x07, 0xde, 0x7f, 0x45, 0xec, 0x25, 0xfd, 0x92, + 0x47, 0xc2, 0x43, 0xc7, 0xaf, 0xc8, 0x75, 0x75, 0xf0, 0xf3, 0xef, 0xa2, 0x25, 0xac, 0x51, 0xef, + 0xbf, 0xe4, 0x14, 0xe2, 0xfd, 0xe0, 0x2e, 0xbf, 0x5b, 0xe8, 0xf5, 0xde, 0x0f, 0x6e, 0x05, 0x5c, + 0x44, 0x02, 0xe7, 0x81, 0x7e, 0x29, 0x6e, 0xff, 0x8a, 0x9c, 0xe7, 0xeb, 0xf9, 0xe5, 0xc0, 0xef, + 0x6d, 0xde, 0xef, 0xd3, 0xcb, 0x0a, 0x7e, 0xe3, 0xf9, 0x65, 0x1c, 0xe1, 0xd7, 0x24, 0xc5, 0x7d, + 0xe2, 0x92, 0xe2, 0x3e, 0x75, 0x49, 0x71, 0x9f, 0xb9, 0xa4, 0xb8, 0xcf, 0x5d, 0x52, 0xdc, 0x17, + 0x2e, 0x29, 0xee, 0x4b, 0x97, 0x14, 0xf7, 0x95, 0x4b, 0x8a, 0xfb, 0xda, 0x45, 0x68, 0x34, 0x11, + 0x1a, 0x4d, 0xe0, 0x17, 0x7e, 0xe1, 0xf7, 0x49, 0x7e, 0x31, 0x3f, 0x45, 0xd5, 0x1b, 0x66, 0x7e, + 0x0a, 0xe6, 0x97, 0xe9, 0x7a, 0xc3, 0xcc, 0x2f, 0x03, 0x37, 0x07, 0x7e, 0x63, 0x03, 0xbf, 0xb1, + 0x81, 0xdf, 0xd8, 0xc0, 0x6f, 0x6c, 0xe0, 0x37, 0x36, 0xf0, 0x1b, 0x1b, 0xf8, 0x8d, 0x0d, 0xfc, + 0xc6, 0x06, 0x7e, 0x63, 0x53, 0xf2, 0xfb, 0xff, 0x4e, 0xce, 0x3a, 0xae, 0xa8, 0x7c, 0x63, 0xa2, + 0xc7, 0x17, 0xfc, 0xf6, 0xea, 0x85, 0xe0, 0xb1, 0xd8, 0x7a, 0x0d, 0xc1, 0xbe, 0xdf, 0x7e, 0xbd, + 0x10, 0x3c, 0x12, 0x4f, 0xaf, 0x2e, 0x18, 0x7e, 0xef, 0x04, 0xfc, 0xc6, 0x66, 0x8a, 0xdf, 0xfd, + 0xc5, 0x81, 0xdf, 0xc1, 0x98, 0x1a, 0xe1, 0x37, 0x04, 0xf0, 0x1b, 0x1b, 0xa6, 0x91, 0xfe, 0x4e, + 0x1a, 0x7e, 0x43, 0x30, 0xd5, 0x2f, 0x9f, 0x41, 0x98, 0xd6, 0xda, 0xc5, 0x81, 0xdf, 0xc1, 0x4c, + 0xf6, 0xab, 0x65, 0x00, 0xbf, 0x07, 0x02, 0xbf, 0xb1, 0x39, 0xca, 0x6f, 0x6a, 0xa8, 0xe9, 0xdf, + 0x85, 0xfc, 0xcd, 0x37, 0x07, 0xfd, 0x1c, 0x71, 0xff, 0x7d, 0x5f, 0x7c, 0x7d, 0xac, 0x62, 0x05, + 0xbb, 0x3f, 0xc3, 0xef, 0x60, 0x8e, 0xab, 0xbf, 0xab, 0xe9, 0x77, 0x35, 0x36, 0x07, 0xfd, 0x9c, + 0xe8, 0xf7, 0xa3, 0x6e, 0xc3, 0xef, 0x4c, 0xce, 0xad, 0xbf, 0x22, 0x08, 0x7e, 0x87, 0x83, 0xf6, + 0x39, 0x36, 0x47, 0x8d, 0x6f, 0x10, 0xbf, 0x2b, 0xef, 0x37, 0xc3, 0xef, 0x4c, 0x30, 0x3e, 0x19, + 0x1b, 0xf8, 0x8d, 0x0d, 0xfc, 0xc6, 0x06, 0xef, 0x07, 0x63, 0x03, 0xbf, 0xb1, 0x81, 0xdf, 0xd8, + 0x4c, 0xf1, 0xdb, 0xc9, 0x9c, 0x23, 0x7d, 0x26, 0xdf, 0xb8, 0x68, 0x5b, 0xc0, 0xef, 0x9d, 0x80, + 0xdf, 0xd8, 0x8c, 0xf6, 0x8b, 0xf9, 0x29, 0x17, 0xa3, 0x55, 0x2f, 0xe6, 0x97, 0xdd, 0x8c, 0x46, + 0xbd, 0x98, 0x1f, 0x1a, 0x1c, 0xf8, 0x8d, 0x0d, 0xfc, 0xc6, 0x06, 0x7e, 0x63, 0x03, 0xbf, 0xb1, + 0xb9, 0x80, 0x5f, 0xef, 0x17, 0xd4, 0xfc, 0xf7, 0x98, 0x7e, 0x4c, 0x1e, 0x59, 0xb1, 0xed, 0x96, + 0x83, 0x32, 0x31, 0xc3, 0xda, 0x9a, 0x27, 0x68, 0xdb, 0x16, 0x36, 0x29, 0xee, 0x61, 0x1c, 0x57, + 0xf7, 0x5b, 0xe3, 0xa8, 0xdb, 0xaf, 0xbe, 0x7d, 0x9d, 0x5f, 0x6b, 0xdf, 0x35, 0x79, 0x3d, 0xc2, + 0x6f, 0xe1, 0xea, 0xaf, 0xf3, 0x9b, 0xfd, 0x34, 0xa8, 0x76, 0x5b, 0x12, 0x07, 0xbf, 0x53, 0x48, + 0x7e, 0x49, 0x4b, 0x47, 0x97, 0xc4, 0x8a, 0xbc, 0x41, 0x5c, 0x16, 0xfa, 0xd3, 0x3e, 0xf6, 0xdb, + 0xbf, 0x8a, 0xa6, 0x73, 0xcd, 0x84, 0xf1, 0xf6, 0x80, 0x4d, 0xd5, 0xa0, 0xff, 0xa6, 0x54, 0xb6, + 0xad, 0xf2, 0x83, 0x61, 0xad, 0xcc, 0xd9, 0xb1, 0xcd, 0xe4, 0x74, 0xbf, 0xaa, 0x19, 0xfb, 0xf7, + 0x99, 0xfc, 0xb7, 0x7d, 0x5b, 0x16, 0x96, 0x5f, 0x19, 0x2a, 0xcf, 0x3b, 0x59, 0x4b, 0xca, 0xa3, + 0xe6, 0x91, 0xfd, 0xb0, 0x30, 0xdb, 0x56, 0x16, 0xb8, 0x58, 0xa8, 0x0b, 0xf8, 0xfd, 0x5f, 0x27, + 0xc5, 0x02, 0xe8, 0x27, 0x61, 0xfb, 0x5a, 0xe9, 0xf7, 0xe5, 0xb8, 0x14, 0xea, 0x95, 0x43, 0xbd, + 0xc8, 0x84, 0x5f, 0x52, 0x30, 0x63, 0x5b, 0xb1, 0x38, 0xda, 0xef, 0xb7, 0x26, 0x7a, 0x7c, 0xc1, + 0x6f, 0xaf, 0xde, 0xb2, 0xe0, 0x45, 0x34, 0x57, 0xb2, 0x65, 0xad, 0xf4, 0xbb, 0xea, 0xb9, 0xc8, + 0x50, 0xa3, 0xfe, 0xa6, 0x0d, 0xd7, 0x94, 0x2c, 0xbe, 0x3b, 0x7e, 0x65, 0xa5, 0x25, 0x8b, 0x83, + 0xfd, 0xda, 0x7a, 0x0d, 0xc1, 0xbe, 0xdf, 0x7e, 0xbd, 0x25, 0xc1, 0xba, 0xc4, 0xe6, 0xf6, 0xb9, + 0xda, 0x6f, 0x5d, 0x21, 0xb2, 0xb5, 0x4a, 0x82, 0x16, 0xc5, 0xdb, 0xea, 0xf1, 0x7e, 0x3d, 0xbd, + 0xba, 0xe0, 0x30, 0x7e, 0x95, 0x06, 0x76, 0xbf, 0x5f, 0xb3, 0x7d, 0xb6, 0x77, 0xfe, 0xf1, 0x05, + 0x7e, 0x39, 0xa6, 0x44, 0xab, 0x17, 0xcb, 0x5a, 0x74, 0x9e, 0x47, 0x96, 0x5e, 0xdb, 0x7f, 0x66, + 0x81, 0xc5, 0xfe, 0x33, 0xd9, 0x55, 0xb6, 0x13, 0xb6, 0xc0, 0xfc, 0x0e, 0xe9, 0x3f, 0x4f, 0xf1, + 0xdb, 0x58, 0x06, 0x42, 0xe7, 0xe6, 0x0e, 0xed, 0x77, 0xae, 0x63, 0x98, 0x5c, 0x2e, 0x53, 0x63, + 0x20, 0xbf, 0xb5, 0x8d, 0xee, 0x19, 0xcc, 0x2e, 0xd6, 0x13, 0xfc, 0xae, 0xb5, 0x8d, 0xee, 0xe1, + 0xcc, 0x2f, 0xd6, 0x23, 0xfc, 0x3e, 0x98, 0xc9, 0x7e, 0xcd, 0x47, 0xc7, 0x8f, 0x54, 0xb9, 0x06, + 0x7e, 0x07, 0x33, 0xdd, 0x6f, 0xfa, 0xcc, 0x99, 0xe8, 0xb7, 0xdc, 0x11, 0xb6, 0x2f, 0xbd, 0xaa, + 0xe7, 0xa3, 0x45, 0x2c, 0x0c, 0x2a, 0xd5, 0x68, 0x3e, 0x34, 0xbe, 0x0e, 0x36, 0x15, 0xe0, 0xf6, + 0x7e, 0x9d, 0xfd, 0x16, 0x8a, 0x36, 0xcd, 0xef, 0xce, 0x67, 0xd8, 0x1e, 0x92, 0xdf, 0x95, 0x7f, + 0x8e, 0xf7, 0xcb, 0x9e, 0x06, 0xf9, 0x20, 0x80, 0xb5, 0xf9, 0x7e, 0xca, 0xa7, 0xb2, 0xd7, 0xef, + 0x42, 0xff, 0x8e, 0x2a, 0xd4, 0x70, 0xa6, 0xfb, 0xe5, 0x0f, 0xff, 0xfc, 0x63, 0x59, 0xe4, 0xc1, + 0x9e, 0xe3, 0xd7, 0x1b, 0x0a, 0xb1, 0x36, 0x16, 0x7e, 0xf9, 0x10, 0x44, 0x3e, 0xc4, 0x42, 0x76, + 0x49, 0x96, 0xd9, 0xde, 0xf3, 0xeb, 0x7f, 0x40, 0xc7, 0xff, 0xc0, 0xfa, 0xcb, 0x8f, 0xea, 0x55, + 0x7c, 0x9e, 0xf9, 0x29, 0x7e, 0xf5, 0xa1, 0xc0, 0x14, 0xa7, 0xdc, 0xa9, 0x97, 0xed, 0x05, 0xa3, + 0x32, 0x90, 0x66, 0x66, 0x66, 0xfa, 0x95, 0x2b, 0x44, 0x52, 0x07, 0x47, 0xb7, 0xcf, 0xd2, 0xaf, + 0xc8, 0x7c, 0xa2, 0x5f, 0x29, 0x49, 0x58, 0x33, 0xfd, 0x5a, 0xd9, 0x5b, 0x7e, 0x69, 0x9d, 0xce, + 0x8a, 0x20, 0x96, 0xf9, 0x66, 0x66, 0x52, 0x07, 0xc7, 0xf9, 0x55, 0x4a, 0x7d, 0x81, 0xfa, 0xbb, + 0x95, 0xa3, 0xb9, 0xfe, 0x7e, 0x94, 0xde, 0xf5, 0x9b, 0x5d, 0x52, 0x62, 0x99, 0xed, 0xce, 0xba, + 0x93, 0x75, 0x71, 0x9a, 0x5f, 0x76, 0xf9, 0x5b, 0x9b, 0xef, 0xa7, 0xc5, 0xaf, 0xdf, 0x3e, 0x9b, + 0x1b, 0x5b, 0x7e, 0xb3, 0xbf, 0x6a, 0xa1, 0x74, 0x89, 0x56, 0x4d, 0xd8, 0xcd, 0x71, 0xfd, 0x2b, + 0x56, 0x4b, 0x8e, 0xe9, 0x3f, 0xbb, 0xa7, 0xa7, 0xdb, 0xaf, 0xb9, 0x1d, 0xfb, 0x9b, 0xd7, 0x5f, + 0xc3, 0xaf, 0x55, 0x09, 0xfa, 0x98, 0xec, 0xb7, 0x95, 0x43, 0xc7, 0x37, 0xb4, 0xe0, 0xea, 0xfe, + 0xf3, 0x2a, 0xed, 0xa4, 0xcd, 0xd8, 0xfd, 0x47, 0x69, 0xeb, 0xc5, 0x72, 0xd6, 0x3e, 0x8b, 0x96, + 0xba, 0x0b, 0x8c, 0x3f, 0xc7, 0x06, 0x7e, 0x63, 0x03, 0xbf, 0xb1, 0x81, 0xdf, 0xd8, 0xc0, 0x6f, + 0x6c, 0xa6, 0xf8, 0xed, 0x64, 0xce, 0x91, 0x96, 0x31, 0x9f, 0x5b, 0xb5, 0x50, 0xad, 0xa3, 0x5d, + 0xd8, 0xb0, 0xaa, 0x6f, 0xae, 0x06, 0xec, 0x1f, 0xa7, 0xfc, 0xd6, 0x45, 0xdb, 0x22, 0xae, 0xdf, + 0x8a, 0x41, 0x11, 0x1e, 0x59, 0xb7, 0xb6, 0x2d, 0xf7, 0x3d, 0x39, 0x3b, 0xc0, 0x2f, 0x25, 0x1f, + 0x70, 0x71, 0x02, 0x6b, 0xd7, 0xf2, 0xd4, 0x9b, 0xfb, 0x3d, 0x60, 0x7e, 0xca, 0x4c, 0xaa, 0x06, + 0x37, 0x56, 0x63, 0x70, 0x24, 0x1f, 0x9e, 0xb3, 0x46, 0x9f, 0xf9, 0x40, 0x16, 0x6b, 0xeb, 0xb3, + 0x65, 0xb9, 0x6d, 0x23, 0xad, 0x7a, 0xcf, 0x9f, 0x5f, 0x36, 0x95, 0xfc, 0x44, 0x1a, 0xef, 0x17, + 0xb4, 0x57, 0x12, 0x62, 0x85, 0xbc, 0x56, 0xa8, 0x38, 0xfe, 0x49, 0xda, 0x0d, 0x7d, 0xd0, 0xb3, + 0x63, 0x20, 0xab, 0x51, 0xef, 0xf9, 0xf3, 0x43, 0xa7, 0x52, 0x79, 0x22, 0x65, 0x5d, 0x34, 0xfc, + 0x2a, 0xdb, 0x25, 0x8b, 0x62, 0x71, 0x96, 0xdf, 0x56, 0x42, 0xfb, 0x55, 0xda, 0x67, 0xa3, 0xfe, + 0xf2, 0x45, 0xa5, 0xc1, 0x35, 0xbb, 0xc2, 0xaf, 0x4f, 0xf8, 0x3d, 0x9c, 0x3d, 0xfd, 0x2b, 0xbd, + 0xfe, 0x8a, 0xa0, 0x2c, 0x95, 0xb7, 0xd5, 0xf0, 0x7b, 0x08, 0xbb, 0x9e, 0x8f, 0xaa, 0xdb, 0x67, + 0xf8, 0x3d, 0x19, 0xde, 0xfb, 0x29, 0x84, 0xf2, 0xd7, 0x7b, 0xc9, 0xda, 0x2b, 0x51, 0xc9, 0x87, + 0x35, 0xf3, 0x6c, 0x81, 0xf9, 0x1d, 0xdb, 0x7f, 0x6e, 0x26, 0xae, 0xdf, 0x43, 0x39, 0xd0, 0x58, + 0x1b, 0xf0, 0x3b, 0x82, 0xcb, 0xea, 0x85, 0xdf, 0x01, 0xec, 0x1f, 0x4f, 0x9e, 0x0f, 0xfc, 0xc6, + 0x06, 0x7e, 0x63, 0x53, 0xf2, 0xfb, 0xdf, 0x4e, 0x76, 0x15, 0xca, 0x1e, 0x42, 0xa4, 0x6b, 0x07, + 0xb6, 0x8a, 0x55, 0xef, 0xfa, 0x68, 0xf8, 0xfe, 0xd4, 0x4e, 0xbe, 0x33, 0xd1, 0xe3, 0x0b, 0x7e, + 0x7b, 0xf5, 0xee, 0x13, 0x6c, 0x3c, 0x25, 0xaa, 0x4f, 0xa0, 0x23, 0x68, 0x7d, 0x2a, 0x3d, 0xcf, + 0xaf, 0xad, 0xd7, 0x10, 0xec, 0xfb, 0xed, 0xd7, 0xbb, 0x4b, 0x70, 0x9d, 0xdf, 0x71, 0xdc, 0xc6, + 0xaf, 0xa7, 0x57, 0x17, 0x7c, 0x43, 0xbf, 0x62, 0xc0, 0x61, 0xa1, 0xe3, 0x06, 0xd9, 0x8f, 0x8e, + 0xab, 0x1a, 0x5e, 0x1a, 0xe1, 0xe6, 0x56, 0x8e, 0x5f, 0x1b, 0x86, 0x45, 0xdb, 0x79, 0x8a, 0x5f, + 0x19, 0x65, 0x2f, 0x6a, 0x6f, 0xf5, 0x5a, 0xde, 0x2f, 0x64, 0x83, 0x5a, 0x66, 0x3c, 0x75, 0x3b, + 0xab, 0x0a, 0x4f, 0xf1, 0xbb, 0xbf, 0x38, 0xfb, 0xfd, 0x92, 0xf7, 0xb1, 0xf2, 0x3d, 0xab, 0x18, + 0x78, 0x2c, 0xfa, 0xad, 0xda, 0x9f, 0xf6, 0x5d, 0x55, 0x2b, 0xe3, 0x95, 0xa0, 0xa6, 0xae, 0x5a, + 0x1b, 0xa6, 0xc6, 0xbb, 0xf9, 0x4d, 0x9f, 0xd9, 0xea, 0x4a, 0xbf, 0xc6, 0x5b, 0xbd, 0x52, 0xfd, + 0x5d, 0xe9, 0xa5, 0xc5, 0xb3, 0x53, 0xe3, 0x75, 0xbf, 0x0d, 0xc7, 0xda, 0x04, 0xfc, 0xca, 0x6d, + 0x1b, 0xea, 0xaf, 0x54, 0x25, 0xaa, 0x6e, 0x55, 0xfb, 0xfc, 0xbe, 0x0a, 0xf5, 0xd7, 0x67, 0x90, + 0xdf, 0xc6, 0xf6, 0xd9, 0xf6, 0x7b, 0xad, 0xfb, 0x6f, 0x53, 0x42, 0x9d, 0x5f, 0xf5, 0xf9, 0x3f, + 0x5b, 0x93, 0x45, 0x1c, 0xe1, 0x97, 0x96, 0x4d, 0xed, 0x3f, 0xd7, 0xed, 0x50, 0xc9, 0xc3, 0xeb, + 0x3f, 0x8b, 0xa8, 0x6c, 0x97, 0x93, 0x04, 0xcf, 0xf3, 0xbb, 0xda, 0xe7, 0xdb, 0xfc, 0xde, 0x5b, + 0xfd, 0xeb, 0xd1, 0xeb, 0xd6, 0xb8, 0x4c, 0xaf, 0x42, 0xd2, 0x28, 0xba, 0x11, 0x23, 0xfc, 0x16, + 0x7d, 0x9e, 0xe2, 0xd7, 0xbe, 0x61, 0x0e, 0xc9, 0xf9, 0x5a, 0x30, 0xbf, 0xdb, 0xe7, 0x3a, 0xd6, + 0x2f, 0xef, 0x60, 0xd2, 0x76, 0x49, 0xb6, 0x58, 0x87, 0xd4, 0x5f, 0xf6, 0x00, 0x35, 0xb2, 0x6b, + 0xf3, 0x50, 0xbf, 0x85, 0x6e, 0x08, 0x5d, 0x3c, 0xac, 0x7d, 0x7e, 0x0a, 0xf0, 0x7b, 0x06, 0xc7, + 0x55, 0xf4, 0x63, 0xfc, 0xf2, 0xbe, 0xa9, 0xfd, 0x7d, 0xbf, 0xdf, 0xfc, 0x8c, 0x6d, 0xe3, 0x12, + 0x13, 0x7a, 0x52, 0x6a, 0x46, 0x46, 0x1f, 0xde, 0xde, 0x5e, 0x7d, 0xc6, 0xa8, 0xdc, 0x55, 0xed, + 0x91, 0x1c, 0x56, 0x7f, 0xd7, 0x9a, 0xef, 0x23, 0xfd, 0x2a, 0x6b, 0xaf, 0xe2, 0x57, 0x3f, 0x39, + 0x0d, 0xbb, 0xaa, 0x3f, 0x92, 0xa9, 0x7e, 0xe9, 0xe3, 0xe7, 0xe4, 0xf6, 0xb9, 0xf3, 0x34, 0x8c, + 0xd8, 0xdb, 0xc3, 0xfc, 0x92, 0xb6, 0xc7, 0xea, 0x3f, 0x93, 0x9d, 0xf6, 0xf6, 0x9f, 0xdd, 0xd3, + 0x20, 0x86, 0x2e, 0x4a, 0xe3, 0x1b, 0x6d, 0x8d, 0x26, 0x7f, 0x18, 0x90, 0x8f, 0x04, 0x5a, 0xae, + 0xf4, 0xb2, 0xa7, 0x6b, 0xd8, 0xdd, 0x8a, 0xf5, 0xf0, 0xb3, 0xde, 0xbe, 0x7c, 0xee, 0x30, 0x99, + 0xe5, 0x77, 0x27, 0xd3, 0xfc, 0x92, 0xaf, 0x7a, 0xcb, 0xb1, 0x2d, 0xca, 0x53, 0x96, 0xdf, 0xc6, + 0x73, 0x35, 0x32, 0x9f, 0x2c, 0x37, 0x7a, 0x79, 0xad, 0x54, 0x17, 0x5d, 0x93, 0x3e, 0x5f, 0xff, + 0x95, 0x4b, 0x5b, 0xaa, 0xc9, 0x41, 0xc6, 0x9f, 0xd9, 0x3d, 0x5d, 0x9e, 0xb7, 0x55, 0x39, 0x8d, + 0x9e, 0xdf, 0x96, 0xbd, 0x95, 0xfd, 0xca, 0x0d, 0x64, 0xe5, 0xdf, 0xd6, 0x89, 0xc5, 0x4a, 0xbf, + 0x05, 0xe2, 0xf9, 0x55, 0xd6, 0xd6, 0xf9, 0x5d, 0x5e, 0x2d, 0xac, 0xcc, 0xa3, 0x50, 0x7f, 0xe5, + 0xc3, 0x80, 0x9a, 0x5b, 0x7e, 0xd1, 0xb1, 0xac, 0x76, 0xf9, 0x6d, 0x6b, 0x9f, 0x6b, 0x13, 0xc2, + 0xfa, 0x75, 0x73, 0x32, 0xf7, 0x46, 0x1b, 0x0e, 0xf9, 0x29, 0x72, 0x53, 0x93, 0xd2, 0x2d, 0x84, + 0x14, 0xb2, 0xd2, 0x6f, 0x45, 0x71, 0xe1, 0xf7, 0xb8, 0xf6, 0x79, 0xb4, 0xdf, 0x9a, 0x46, 0x3a, + 0x8e, 0x5f, 0x6d, 0xb4, 0x40, 0xf5, 0xbb, 0x96, 0xfa, 0xcf, 0x6d, 0x7b, 0x63, 0x39, 0xd0, 0x4f, + 0x96, 0x1b, 0x09, 0x17, 0xb9, 0xf0, 0xa2, 0x2a, 0x7e, 0x07, 0xf5, 0x9f, 0x6b, 0x13, 0x2a, 0xfc, + 0x76, 0xe2, 0x97, 0x78, 0x0c, 0x6a, 0x0b, 0x7b, 0xf0, 0x8e, 0xab, 0xd6, 0x77, 0xf2, 0x9d, 0x8b, + 0xb6, 0xc5, 0xed, 0xfd, 0xea, 0x2d, 0xde, 0xc9, 0xcc, 0x2a, 0xc4, 0x03, 0xfd, 0xae, 0x6a, 0x8b, + 0x77, 0x2a, 0xf3, 0x0a, 0x31, 0xda, 0xef, 0x49, 0xf3, 0x53, 0x80, 0x45, 0xab, 0xde, 0x6b, 0xce, + 0x2f, 0x03, 0x26, 0x8d, 0x7a, 0x31, 0x3f, 0x34, 0x38, 0xf0, 0x1b, 0x1b, 0xf8, 0x8d, 0x0d, 0xfc, + 0xc6, 0x06, 0x7e, 0x63, 0x03, 0xbf, 0xb1, 0x81, 0xdf, 0xd8, 0xc0, 0x6f, 0x6c, 0xe0, 0x37, 0x36, + 0xf0, 0x1b, 0x9b, 0x92, 0xdf, 0xff, 0x74, 0x72, 0xd6, 0x71, 0x45, 0xe5, 0x7b, 0x13, 0x3d, 0xbe, + 0xe0, 0xb7, 0x57, 0x2f, 0x04, 0x8f, 0xc5, 0xd6, 0x6b, 0x08, 0xf6, 0xfd, 0xf6, 0xeb, 0x85, 0xe0, + 0x91, 0x78, 0x7a, 0x75, 0xc1, 0xf0, 0x7b, 0x27, 0xe0, 0x37, 0x36, 0x53, 0xfc, 0xee, 0x2f, 0x0e, + 0xfc, 0x0e, 0xc6, 0xd4, 0x08, 0xbf, 0x21, 0x80, 0xdf, 0xd8, 0xcc, 0xf3, 0xab, 0xfd, 0x1e, 0xb9, + 0x08, 0xfc, 0x0e, 0x66, 0x9a, 0xdf, 0xec, 0xd7, 0xdc, 0x55, 0xc0, 0xef, 0x60, 0xe0, 0x37, 0x36, + 0x54, 0x23, 0x6b, 0x50, 0xc7, 0xf8, 0x25, 0x19, 0xf3, 0x59, 0x20, 0xfa, 0x12, 0xfc, 0x8e, 0x26, + 0x69, 0x14, 0xf3, 0xbb, 0x87, 0xdc, 0x7f, 0x3f, 0x56, 0x8a, 0xd9, 0x50, 0xe6, 0x07, 0xfc, 0x0e, + 0x67, 0xd3, 0xc8, 0x27, 0x49, 0x8d, 0xe9, 0x3f, 0xb3, 0xd9, 0x50, 0x62, 0x4a, 0xa3, 0xfe, 0x15, + 0x7e, 0x07, 0x33, 0xd5, 0xaf, 0x3a, 0xb1, 0x31, 0x9b, 0xa6, 0x47, 0x67, 0xfe, 0xc1, 0xef, 0x60, + 0xa6, 0xf9, 0x55, 0x67, 0xc3, 0xaa, 0xf3, 0x56, 0xe9, 0x9d, 0x1a, 0x7e, 0x07, 0x73, 0xae, 0x5f, + 0xdc, 0x7f, 0x67, 0x33, 0xaf, 0x7d, 0x76, 0x66, 0x51, 0xe7, 0xf3, 0xa2, 0xd1, 0x7f, 0x9e, 0xc4, + 0xbc, 0xfe, 0x33, 0xa1, 0xfe, 0x29, 0x18, 0x7e, 0x07, 0x33, 0xed, 0xf9, 0x97, 0x02, 0xbf, 0xa7, + 0x71, 0xc8, 0xfb, 0x05, 0xf8, 0x3d, 0x0d, 0xbc, 0x3f, 0x8a, 0x0d, 0xfc, 0xc6, 0x06, 0x7e, 0x63, + 0x03, 0xbf, 0xb1, 0x99, 0xe2, 0xb7, 0x93, 0x39, 0x47, 0xfa, 0x4c, 0xbe, 0x77, 0xd1, 0xb6, 0x80, + 0xdf, 0x3b, 0x01, 0xbf, 0xb1, 0x19, 0xed, 0x17, 0xf3, 0x53, 0x2e, 0x46, 0xab, 0x5e, 0xcc, 0x2f, + 0xbb, 0x19, 0x8d, 0x7a, 0x31, 0x3f, 0x34, 0x38, 0xf0, 0x1b, 0x1b, 0xf8, 0x8d, 0x0d, 0xfc, 0xc6, + 0x06, 0x7e, 0x63, 0x03, 0xbf, 0xb1, 0x81, 0xdf, 0xd8, 0xc0, 0x6f, 0x6c, 0xe0, 0x37, 0x36, 0xf0, + 0x1b, 0x9b, 0x92, 0xdf, 0x7f, 0x9b, 0xf0, 0x7c, 0x7e, 0x37, 0xe1, 0x71, 0xbf, 0x99, 0xf0, 0xb8, + 0x5f, 0x4d, 0x78, 0xdc, 0x2f, 0x26, 0x3c, 0xee, 0x67, 0x13, 0x1e, 0xf7, 0x93, 0x09, 0x8f, 0xfb, + 0xd1, 0x84, 0xc7, 0xfd, 0x60, 0xc2, 0xe3, 0xfe, 0x65, 0xc2, 0xe3, 0xfe, 0x69, 0xb2, 0xaa, 0x14, + 0xfc, 0xda, 0x7a, 0xb9, 0x60, 0x5b, 0x2f, 0x17, 0x6c, 0xeb, 0xe5, 0x82, 0x6d, 0xbd, 0x5c, 0xb0, + 0xad, 0x97, 0x0b, 0xb6, 0xf5, 0x72, 0xc1, 0xb6, 0x5e, 0x2e, 0xd8, 0xd6, 0xcb, 0x05, 0xdb, 0x7a, + 0xb9, 0x60, 0x5b, 0x2f, 0x17, 0x6c, 0xeb, 0x35, 0x04, 0xfb, 0x7e, 0x3d, 0xbd, 0x54, 0xb0, 0xa7, + 0x97, 0x0a, 0xf6, 0xf4, 0x52, 0xc1, 0x9e, 0x5e, 0x2a, 0xd8, 0xd3, 0x4b, 0x05, 0x7b, 0x7a, 0xa9, + 0x60, 0x4f, 0x2f, 0x15, 0xec, 0xe9, 0xa5, 0x82, 0x3d, 0xbd, 0x54, 0xb0, 0xa7, 0x97, 0x0a, 0xf6, + 0xf4, 0xea, 0x82, 0xe1, 0x17, 0x7e, 0xe1, 0x37, 0xb4, 0x5f, 0x6d, 0x33, 0xcd, 0xaf, 0x16, 0xa7, + 0xf9, 0xd5, 0xe2, 0x34, 0xbf, 0x5a, 0x9c, 0xe6, 0x57, 0x8b, 0xd3, 0xfc, 0x6a, 0x71, 0x9a, 0x5f, + 0x2d, 0x4e, 0xf3, 0xab, 0xc5, 0x69, 0x7e, 0xb5, 0x38, 0xcd, 0xaf, 0x16, 0xa7, 0xf9, 0xd5, 0xe2, + 0xe0, 0xb7, 0xdd, 0x2f, 0xfd, 0xff, 0x05, 0xc1, 0x2f, 0xfc, 0x2a, 0x09, 0x2d, 0x7e, 0xb5, 0xb0, + 0xeb, 0xf9, 0x4d, 0xd3, 0x45, 0x45, 0xc2, 0x1b, 0xf0, 0xab, 0x27, 0x5c, 0xc0, 0x2f, 0xff, 0x27, + 0x97, 0x7b, 0xfd, 0xd2, 0x69, 0xc3, 0x2c, 0xe1, 0x9d, 0x97, 0x46, 0xf1, 0x6f, 0x2c, 0x7b, 0x7e, + 0xf9, 0x84, 0x58, 0xd3, 0xaf, 0x98, 0x37, 0x7b, 0x41, 0xbf, 0xec, 0x3c, 0x9b, 0x7e, 0x59, 0xd4, + 0xb0, 0xfa, 0x3b, 0xcc, 0xef, 0x87, 0xd8, 0xad, 0x88, 0x37, 0xf6, 0xcb, 0xce, 0xb4, 0xe3, 0x97, + 0xc5, 0x99, 0x7e, 0x45, 0xf9, 0x3c, 0xbf, 0x34, 0x6e, 0x8c, 0xdf, 0x74, 0xc4, 0xf6, 0xfd, 0xf7, + 0xe5, 0x2d, 0x4b, 0xf8, 0x0b, 0xa2, 0x91, 0xb7, 0x07, 0xfd, 0x7e, 0xdf, 0xd2, 0xb7, 0xfc, 0xfa, + 0xfd, 0xf2, 0x0a, 0x62, 0xfb, 0xe5, 0x19, 0x16, 0xfc, 0xaa, 0x09, 0x2b, 0xf1, 0x2b, 0xaa, 0x47, + 0xc9, 0xef, 0x16, 0x38, 0xc4, 0x2f, 0x29, 0x60, 0xbf, 0xdf, 0x95, 0x9d, 0x3f, 0xeb, 0xfe, 0xfb, + 0x21, 0x6d, 0x53, 0x77, 0x9c, 0xdf, 0xda, 0xfa, 0xdb, 0xe2, 0x57, 0x4f, 0x58, 0x6f, 0xe5, 0x97, + 0x7b, 0xf3, 0xfa, 0x57, 0xf4, 0x82, 0xbe, 0xbb, 0x5f, 0x25, 0xe1, 0x2f, 0x6e, 0xe5, 0x97, 0x16, + 0x70, 0x80, 0xdf, 0xaa, 0xfa, 0x9b, 0xe4, 0xbe, 0x87, 0x7a, 0xfd, 0x67, 0x9a, 0xdf, 0x35, 0xef, + 0xbf, 0x7a, 0xc2, 0x7a, 0x0d, 0xbf, 0xac, 0x7c, 0x25, 0xbf, 0x5a, 0xc2, 0xda, 0x7e, 0xff, 0xbd, + 0x83, 0x5f, 0x16, 0x7b, 0x5f, 0xbf, 0xbc, 0x1d, 0xf2, 0xc6, 0x37, 0xaa, 0xfc, 0x2e, 0xaf, 0xfb, + 0xb4, 0xdb, 0x7f, 0x5e, 0xa5, 0x10, 0xf7, 0xf9, 0x97, 0xec, 0xf7, 0xae, 0xf7, 0xdf, 0xf3, 0xfa, + 0xcf, 0xbc, 0xbe, 0x15, 0xfc, 0xea, 0x09, 0xed, 0xcf, 0xbf, 0xd9, 0x81, 0x74, 0xfb, 0x15, 0xc7, + 0x71, 0x39, 0xbf, 0xe7, 0x3e, 0xff, 0x5a, 0x09, 0xa2, 0x7d, 0xd6, 0x13, 0xd6, 0x98, 0xe3, 0x57, + 0x43, 0xef, 0xbf, 0x32, 0xb6, 0xd4, 0x3e, 0xe7, 0x09, 0x82, 0xe1, 0x7e, 0xf9, 0x8e, 0xef, 0xec, + 0x97, 0xde, 0x68, 0x0e, 0x1e, 0x9f, 0xbc, 0xae, 0x5f, 0xb1, 0xdf, 0x5b, 0xfb, 0x5d, 0xcd, 0x84, + 0xe7, 0xfa, 0x15, 0xc0, 0x2f, 0xfc, 0x2a, 0x09, 0x4f, 0xf7, 0xcb, 0x12, 0x2e, 0xf5, 0x7e, 0x50, + 0x00, 0xbf, 0xf0, 0xab, 0x24, 0x3c, 0xd1, 0xef, 0x69, 0xbf, 0xdf, 0x30, 0x49, 0x71, 0xbf, 0xbb, + 0xa4, 0xb8, 0xdf, 0x5c, 0x52, 0xdc, 0xaf, 0x2e, 0x29, 0xee, 0x17, 0x97, 0x14, 0xf7, 0xb3, 0x4b, + 0x8a, 0xfb, 0xc9, 0x25, 0xc5, 0xfd, 0xe8, 0x92, 0xe2, 0x7e, 0x70, 0x11, 0x1a, 0x4d, 0x84, 0x46, + 0x13, 0xf8, 0x85, 0x5f, 0xf8, 0x7d, 0x92, 0x5f, 0xcc, 0x4f, 0x51, 0xf5, 0x86, 0x99, 0x9f, 0x82, + 0xf9, 0x65, 0xba, 0xde, 0x30, 0xf3, 0xcb, 0xc0, 0xcd, 0x81, 0xdf, 0xd8, 0xc0, 0x6f, 0x6c, 0x34, + 0xbf, 0x10, 0x1c, 0x06, 0x55, 0x2f, 0xfc, 0x86, 0x41, 0xf7, 0x0b, 0xc1, 0x41, 0x30, 0xf4, 0xc2, + 0x6f, 0x10, 0x2c, 0xbf, 0x10, 0x1c, 0x02, 0x53, 0x2f, 0x0c, 0x07, 0xc0, 0xb3, 0x0b, 0xc3, 0x77, + 0xa7, 0x64, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0xc2, 0x9f, 0xfe, 0xbb, 0x89, 0xf5 +}; + +#endif diff --git a/backends/platform/psp/kbd_ls_c.cpp b/backends/platform/psp/kbd_ls_c.cpp new file mode 100644 index 0000000000..6f199377c0 --- /dev/null +++ b/backends/platform/psp/kbd_ls_c.cpp @@ -0,0 +1,224 @@ +#ifndef __keyboard_letters_shift_compressed__ +#define __keyboard_letters_shift_compressed__ + +unsigned int size_keyboard_letters_shift_compressed = 3450; +unsigned char keyboard_letters_shift_compressed[] __attribute__((aligned(16))) = { + 0x78, 0x9c, 0xed, 0x9d, 0xe9, 0xb6, 0xab, 0x38, 0x0e, 0x46, 0xe9, 0xae, 0xb9, 0xbb, 0x86, 0xee, + 0x9a, 0xab, 0xa7, 0xf7, 0x7f, 0x42, 0xea, 0x6f, 0xaf, 0x73, 0x13, 0xb0, 0x24, 0x4b, 0xb2, 0xc1, + 0x03, 0x41, 0xf9, 0xf6, 0x5a, 0x27, 0x21, 0x58, 0x36, 0x0e, 0x1b, 0x8c, 0x31, 0xf1, 0xbd, 0x7f, + 0xfe, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x8d, 0x58, 0xc1, + 0x8d, 0x81, 0xdd, 0xe8, 0xc0, 0x6e, 0x74, 0xa0, 0x37, 0x38, 0xf0, 0x1b, 0x1b, 0xe8, 0x0d, 0x0e, + 0xfc, 0xc6, 0x06, 0x7a, 0x83, 0x03, 0xbf, 0xb1, 0x81, 0xdf, 0xd8, 0x94, 0xfc, 0xfe, 0xc5, 0x84, + 0x97, 0xf3, 0x57, 0x13, 0x1e, 0xf7, 0x99, 0x09, 0x8f, 0xfb, 0xdc, 0x84, 0xc7, 0x7d, 0x61, 0xc2, + 0xe3, 0xbe, 0x34, 0xe1, 0x71, 0x5f, 0x99, 0xf0, 0xb8, 0xaf, 0x4d, 0x78, 0xdc, 0x37, 0x26, 0x3c, + 0xee, 0x6f, 0x26, 0x3c, 0xee, 0xef, 0x26, 0xab, 0x4a, 0xc1, 0xaf, 0xad, 0x97, 0x0b, 0xb6, 0xf5, + 0x72, 0xc1, 0xb6, 0x5e, 0x2e, 0xd8, 0xd6, 0xcb, 0x05, 0xdb, 0x7a, 0xb9, 0x60, 0x5b, 0x2f, 0x17, + 0x6c, 0xeb, 0xe5, 0x82, 0x6d, 0xbd, 0x5c, 0xb0, 0xad, 0x97, 0x0b, 0xb6, 0xf5, 0x72, 0xc1, 0xb6, + 0x5e, 0x43, 0xb0, 0xef, 0xd7, 0xd3, 0x4b, 0x05, 0x7b, 0x7a, 0xa9, 0x60, 0x4f, 0x2f, 0x15, 0xec, + 0xe9, 0xa5, 0x82, 0x3d, 0xbd, 0x54, 0xb0, 0xa7, 0x97, 0x0a, 0xf6, 0xf4, 0x52, 0xc1, 0x9e, 0x5e, + 0x2a, 0xd8, 0xd3, 0x4b, 0x05, 0x7b, 0x7a, 0xa9, 0x60, 0x4f, 0xaf, 0x2e, 0x18, 0x7e, 0xe1, 0x17, + 0x7e, 0x43, 0xfb, 0xd5, 0xb2, 0x69, 0x7e, 0xb5, 0x38, 0xcd, 0xaf, 0x16, 0xa7, 0xf9, 0xd5, 0xe2, + 0x34, 0xbf, 0x5a, 0x9c, 0xe6, 0x57, 0x8b, 0xd3, 0xfc, 0x6a, 0x71, 0x9a, 0x5f, 0x2d, 0x4e, 0xf3, + 0xab, 0xc5, 0x69, 0x7e, 0xb5, 0x38, 0xcd, 0xaf, 0x16, 0x07, 0xbf, 0xf0, 0x5b, 0xf2, 0xbb, 0x2c, + 0x8b, 0x9e, 0x00, 0xbf, 0x56, 0x42, 0x38, 0xbf, 0xcb, 0x93, 0x2c, 0xe1, 0x01, 0xd5, 0xc8, 0x02, + 0x2d, 0xbf, 0xb2, 0x3c, 0xd3, 0xef, 0xb2, 0xb0, 0x50, 0xdb, 0x2f, 0x0f, 0x74, 0xfc, 0xb2, 0x0d, + 0x5b, 0x7e, 0xf7, 0x88, 0xe7, 0x82, 0xe7, 0x97, 0xee, 0xbf, 0x82, 0xdf, 0x3d, 0xd4, 0xf2, 0xbb, + 0x05, 0x6c, 0xef, 0x1d, 0xfc, 0xb2, 0xfd, 0xec, 0xf8, 0x65, 0xf5, 0x33, 0xfd, 0x8a, 0x40, 0xc7, + 0x2f, 0x2b, 0xcf, 0xf3, 0x4b, 0xbf, 0x96, 0xeb, 0x77, 0x55, 0x13, 0x3e, 0x48, 0x1a, 0xc5, 0x86, + 0x5f, 0xd4, 0xef, 0x1e, 0x37, 0xd9, 0xef, 0xfe, 0x6e, 0xf9, 0x95, 0xfb, 0xa5, 0xe0, 0x77, 0x7f, + 0x9f, 0xe5, 0x57, 0xd6, 0xef, 0x35, 0xfd, 0xa6, 0x12, 0xe1, 0x37, 0xa0, 0x5f, 0x52, 0x60, 0xbb, + 0xdf, 0x8f, 0xc2, 0x52, 0x81, 0x8d, 0x7e, 0x85, 0x8d, 0xb2, 0xdf, 0x6d, 0x61, 0x92, 0xdf, 0xac, + 0x7e, 0xaf, 0xe8, 0x97, 0x96, 0x37, 0xd9, 0x6f, 0xe9, 0xfa, 0x0b, 0xbf, 0xed, 0x7e, 0x59, 0x1d, + 0x27, 0xfa, 0x65, 0x9b, 0x9e, 0xe9, 0x97, 0x6e, 0xb8, 0xa2, 0xff, 0x2c, 0x13, 0x3e, 0x38, 0xe3, + 0x97, 0x15, 0x38, 0xd5, 0xef, 0xaa, 0x24, 0x48, 0x6a, 0xfd, 0x8a, 0x0b, 0xfa, 0x7b, 0x9c, 0xbf, + 0xc9, 0x5b, 0xf8, 0xf3, 0xf7, 0x98, 0xdf, 0x38, 0xd7, 0xdf, 0x97, 0xf6, 0xdb, 0xf1, 0xfa, 0x2b, + 0xda, 0x3f, 0xf8, 0xbd, 0xdc, 0xef, 0x4a, 0x05, 0xb7, 0xfa, 0x95, 0xde, 0x70, 0x7f, 0x34, 0xc8, + 0xaf, 0x68, 0x27, 0x4b, 0xf7, 0x47, 0xbd, 0xee, 0x7f, 0xe1, 0xf7, 0x05, 0xfd, 0x12, 0xc1, 0x93, + 0xfd, 0x96, 0xfa, 0x57, 0x59, 0xe0, 0xab, 0x8e, 0x4f, 0xce, 0x6f, 0x9f, 0x17, 0x76, 0x9f, 0x52, + 0x1e, 0x9f, 0x5c, 0x78, 0x82, 0xa4, 0xfa, 0xfe, 0x88, 0x73, 0xeb, 0xe7, 0x0b, 0xab, 0x9a, 0xf0, + 0x41, 0xfe, 0x7c, 0xe1, 0x19, 0x3d, 0xf1, 0xfa, 0xcb, 0xbe, 0x6f, 0xc5, 0xf3, 0x85, 0x85, 0x25, + 0x48, 0x3a, 0xfb, 0x95, 0xe0, 0xf9, 0xe0, 0x7d, 0x9e, 0x0f, 0x52, 0xe0, 0x17, 0x7e, 0x95, 0x04, + 0xf8, 0xd5, 0x13, 0x2e, 0xf5, 0x6b, 0x92, 0xe2, 0xfe, 0xea, 0x92, 0xe2, 0x3e, 0x73, 0x49, 0x71, + 0x9f, 0xbb, 0xa4, 0xb8, 0x2f, 0x5c, 0x52, 0xdc, 0x97, 0x2e, 0x29, 0xee, 0x2b, 0x97, 0x14, 0xf7, + 0xb5, 0x4b, 0x8a, 0xfb, 0xc6, 0x45, 0x68, 0x34, 0x11, 0x1a, 0x4d, 0xe0, 0x17, 0x7e, 0xe1, 0xf7, + 0x9d, 0xfc, 0x62, 0x7e, 0x8a, 0xaa, 0x37, 0xcc, 0xfc, 0x14, 0xcc, 0x2f, 0xd3, 0xf5, 0x86, 0x99, + 0x5f, 0x06, 0x6e, 0x0e, 0xfc, 0xc6, 0x06, 0x7e, 0x63, 0x03, 0xbf, 0xb1, 0x81, 0xdf, 0xd8, 0xc0, + 0x6f, 0x6c, 0xe0, 0x37, 0x36, 0xf0, 0x1b, 0x1b, 0xf8, 0x8d, 0x0d, 0xfc, 0xc6, 0xa6, 0xe4, 0xf7, + 0x7f, 0x8d, 0x5c, 0xf5, 0xbd, 0xa2, 0xf2, 0xad, 0x89, 0x1e, 0x5f, 0xf0, 0xdb, 0xaa, 0x17, 0x82, + 0xfb, 0x62, 0xeb, 0x35, 0x04, 0xfb, 0x7e, 0xdb, 0xf5, 0x42, 0x70, 0x4f, 0x3c, 0xbd, 0xba, 0x60, + 0xf8, 0xbd, 0x13, 0xf0, 0x1b, 0x9b, 0x21, 0x7e, 0xcf, 0x57, 0x07, 0x7e, 0x3b, 0x63, 0x6a, 0x84, + 0xdf, 0x10, 0xc0, 0x6f, 0x6c, 0x88, 0x46, 0x3e, 0x0f, 0x03, 0x7e, 0x43, 0x30, 0xd4, 0xaf, 0x9c, + 0x0b, 0xb4, 0xad, 0xb5, 0xab, 0x03, 0xbf, 0x9d, 0x19, 0xec, 0x57, 0x2b, 0x00, 0x7e, 0x27, 0x02, + 0xbf, 0xb1, 0x99, 0xe5, 0x37, 0x35, 0xd4, 0xf4, 0x7d, 0x59, 0xc5, 0xec, 0x46, 0xf8, 0xed, 0xcc, + 0x8c, 0xeb, 0xef, 0x63, 0x71, 0x7b, 0x59, 0xc5, 0x0a, 0xb6, 0x59, 0xf8, 0xed, 0xcc, 0xbc, 0xf3, + 0x77, 0x35, 0xfd, 0xae, 0x46, 0x76, 0xd0, 0xce, 0x85, 0x7e, 0x9f, 0xe7, 0x36, 0xfc, 0x8e, 0xe4, + 0xda, 0xf3, 0x57, 0x04, 0xc1, 0x6f, 0x77, 0xd0, 0x3e, 0xc7, 0x66, 0xd6, 0xf8, 0x06, 0xf1, 0xbb, + 0xf2, 0x7e, 0x33, 0xfc, 0x8e, 0x04, 0xe3, 0x93, 0xb1, 0x81, 0xdf, 0xd8, 0x70, 0xbf, 0xe4, 0x86, + 0x15, 0x7e, 0x43, 0x80, 0xe7, 0x83, 0xb1, 0x81, 0xdf, 0xd8, 0xc0, 0x6f, 0x6c, 0x86, 0xf8, 0x6d, + 0x64, 0xcc, 0x37, 0x7d, 0x4f, 0xbe, 0x75, 0xd1, 0x72, 0xc0, 0xef, 0x9d, 0x80, 0xdf, 0xd8, 0xf4, + 0xf6, 0x8b, 0xf9, 0x29, 0x2f, 0xc6, 0x51, 0xbd, 0x98, 0x5f, 0x76, 0x33, 0x0e, 0xea, 0xc5, 0xfc, + 0xd0, 0xe0, 0xc0, 0x6f, 0x6c, 0xe0, 0x37, 0x36, 0xf0, 0x1b, 0x1b, 0xf8, 0x8d, 0xcd, 0x0b, 0xf8, + 0xf5, 0x7e, 0x41, 0x2d, 0xff, 0xdf, 0x1b, 0x2f, 0x26, 0x8f, 0xac, 0xc8, 0xbb, 0x97, 0xa0, 0x4c, + 0xcc, 0xb0, 0x72, 0xf3, 0x04, 0x2d, 0x6f, 0x21, 0x4b, 0x71, 0x0b, 0xfd, 0x78, 0x75, 0xbf, 0x35, + 0x8e, 0x9a, 0xfd, 0xea, 0xf9, 0xeb, 0xfc, 0x5a, 0xdb, 0xae, 0x29, 0xeb, 0x2d, 0xfc, 0x16, 0x8e, + 0xfe, 0x3a, 0xbf, 0xd9, 0x4f, 0x83, 0x6a, 0xf3, 0x92, 0x38, 0xf8, 0x1d, 0x42, 0xf2, 0x4b, 0x5a, + 0x3a, 0xba, 0x24, 0x56, 0xe4, 0x0d, 0xe2, 0xa7, 0xff, 0xf1, 0x8b, 0x44, 0xae, 0x69, 0xaf, 0x57, + 0x34, 0x9d, 0x6b, 0x26, 0x8c, 0xb7, 0x07, 0x6c, 0xaa, 0xc6, 0xf6, 0x53, 0x33, 0x35, 0xaf, 0xf2, + 0x83, 0x61, 0xad, 0xce, 0xd9, 0x77, 0x1b, 0xc9, 0xe5, 0x7e, 0x55, 0x33, 0xf6, 0xef, 0x33, 0xf9, + 0x6f, 0xfb, 0xf6, 0x22, 0x2c, 0xbf, 0x32, 0x54, 0xee, 0x77, 0xb2, 0x96, 0xd4, 0x47, 0x2d, 0x23, + 0xfb, 0x61, 0x61, 0x96, 0x57, 0x56, 0xb8, 0x58, 0xa9, 0x17, 0xf0, 0xfb, 0xdf, 0x46, 0x8a, 0x15, + 0xd0, 0x77, 0xc2, 0xfe, 0xb1, 0xd2, 0xef, 0xe6, 0xb8, 0x14, 0xea, 0xd5, 0x43, 0x3d, 0xc8, 0x84, + 0x5f, 0x52, 0x31, 0x23, 0xaf, 0x58, 0xec, 0xed, 0xf7, 0x3b, 0x13, 0x3d, 0xbe, 0xe0, 0xb7, 0x55, + 0x6f, 0x59, 0xf0, 0x22, 0x9a, 0x2b, 0xd9, 0xb2, 0x56, 0xfa, 0x5d, 0xf5, 0x52, 0x64, 0xa8, 0x71, + 0xfe, 0xa6, 0x8c, 0x6b, 0x4a, 0x16, 0x9f, 0x1d, 0xbf, 0xf2, 0xa4, 0x25, 0x8b, 0x9d, 0xfd, 0xda, + 0x7a, 0x0d, 0xc1, 0xbe, 0xdf, 0x76, 0xbd, 0x25, 0xc1, 0xba, 0xc4, 0xc3, 0xed, 0x73, 0xb5, 0xdf, + 0xba, 0x4a, 0x64, 0x6b, 0x95, 0x04, 0x2d, 0x8a, 0xb7, 0xd5, 0xfd, 0xfd, 0x7a, 0x7a, 0x75, 0xc1, + 0x61, 0xfc, 0x2a, 0x0d, 0xec, 0x79, 0xbf, 0x66, 0xfb, 0x6c, 0x6f, 0xfc, 0xf9, 0x01, 0x7e, 0x39, + 0xa6, 0x44, 0xab, 0x17, 0xcb, 0x5a, 0x74, 0x5e, 0x46, 0x96, 0x5e, 0xdb, 0x7f, 0x66, 0x81, 0xc5, + 0xfe, 0x33, 0xd9, 0x54, 0xb6, 0x11, 0xb6, 0xc0, 0xfc, 0x76, 0xe9, 0x3f, 0x0f, 0xf1, 0x7b, 0xb0, + 0x0e, 0x84, 0xc6, 0xec, 0x0e, 0xc7, 0xaf, 0x5c, 0x73, 0x18, 0x5c, 0x2f, 0x53, 0x63, 0x20, 0xbf, + 0xb5, 0x8d, 0xee, 0x15, 0x8c, 0xae, 0xd6, 0x3b, 0xf8, 0x5d, 0x6b, 0x1b, 0xdd, 0xe9, 0x8c, 0xaf, + 0xd6, 0x53, 0x23, 0xdd, 0xd0, 0x63, 0x39, 0x92, 0xdf, 0x37, 0x66, 0xb0, 0x5f, 0xf3, 0xd6, 0xf1, + 0x99, 0x2a, 0xd7, 0xc0, 0x6f, 0x67, 0x92, 0xdf, 0xd4, 0x8f, 0xeb, 0xea, 0x37, 0xbd, 0xe6, 0x0c, + 0xf4, 0x5b, 0xee, 0x08, 0xdb, 0x87, 0x5e, 0xd5, 0xfd, 0xd1, 0x22, 0x16, 0x3a, 0xd5, 0xaa, 0x37, + 0x71, 0xfd, 0x3a, 0xdb, 0x2d, 0x54, 0x6d, 0x98, 0xdf, 0x93, 0xf7, 0xb0, 0x2d, 0x10, 0xbf, 0xfc, + 0xe6, 0xad, 0xbf, 0xdf, 0x7c, 0x1b, 0xe4, 0x76, 0x4f, 0xcf, 0x7e, 0x9e, 0xf2, 0xae, 0x6c, 0xf5, + 0xbb, 0xd0, 0xf7, 0x5e, 0x95, 0xea, 0xce, 0x70, 0xbf, 0xfc, 0xe6, 0x9f, 0xbf, 0x2c, 0x8b, 0xfc, + 0xb2, 0xd7, 0xf8, 0xf5, 0x86, 0x42, 0xac, 0xcc, 0xc2, 0x2f, 0x1f, 0x82, 0xc8, 0x87, 0x58, 0xc8, + 0x26, 0xc9, 0x32, 0xdb, 0x7a, 0xee, 0xa0, 0x43, 0xc7, 0x9f, 0xfa, 0xdd, 0x37, 0x32, 0xae, 0x7d, + 0xe6, 0xcd, 0x66, 0x5e, 0xfb, 0x4b, 0xfc, 0xea, 0x43, 0x81, 0x29, 0x4e, 0xb9, 0x52, 0x2f, 0xfb, + 0x03, 0x46, 0x65, 0x20, 0xcd, 0x2c, 0xcc, 0xf4, 0x2b, 0x57, 0x88, 0xa4, 0x06, 0x26, 0xfa, 0x25, + 0xdb, 0xd8, 0x53, 0x65, 0xf5, 0x07, 0xfa, 0x95, 0x92, 0x84, 0x35, 0xd3, 0xaf, 0x55, 0xbc, 0xe5, + 0x97, 0x9e, 0xd3, 0x59, 0x15, 0xc4, 0x32, 0xcf, 0x66, 0x26, 0x35, 0x40, 0xee, 0x8f, 0xe8, 0xdf, + 0x00, 0xbf, 0x4a, 0xad, 0x5f, 0xe0, 0xfc, 0xdd, 0xeb, 0x71, 0xf8, 0xfc, 0x7d, 0xd6, 0xde, 0xf5, + 0x9b, 0x1d, 0x52, 0x62, 0x99, 0x6d, 0xce, 0xba, 0x92, 0x35, 0x71, 0x99, 0x5f, 0x76, 0xf8, 0x5b, + 0xd9, 0xcf, 0x73, 0xc4, 0xaf, 0xdf, 0x3e, 0x9b, 0x99, 0x2d, 0xbf, 0xd9, 0xbb, 0x5a, 0x29, 0x5d, + 0xa2, 0x75, 0x26, 0x9c, 0x86, 0x8e, 0x6f, 0x2c, 0x5b, 0x8d, 0x7b, 0xfa, 0x15, 0xbd, 0x06, 0xd6, + 0x6d, 0x48, 0xfb, 0xc7, 0xc8, 0x7e, 0x9e, 0xf2, 0xee, 0x69, 0xf6, 0x6b, 0xe6, 0x63, 0xef, 0xf9, + 0xf9, 0x6b, 0xf8, 0xb5, 0x4e, 0x82, 0x36, 0x06, 0xfb, 0x3d, 0xca, 0xd4, 0xf1, 0x0d, 0x2d, 0xb8, + 0x9c, 0x2f, 0x65, 0x96, 0x8d, 0xf2, 0x42, 0x13, 0xe5, 0xca, 0xac, 0xf4, 0xac, 0x3b, 0x22, 0x2a, + 0x21, 0xea, 0x78, 0x12, 0x36, 0x3e, 0x49, 0x5f, 0x6f, 0xee, 0x17, 0x3c, 0x80, 0xdf, 0xd8, 0xbc, + 0xc5, 0xf3, 0xc1, 0x37, 0x06, 0x7e, 0x63, 0x03, 0xbf, 0xb1, 0x19, 0xe2, 0xb7, 0x91, 0x31, 0xdf, + 0xb4, 0x8c, 0x79, 0xdf, 0xaa, 0x85, 0x6a, 0x1d, 0xed, 0x42, 0xc6, 0xaa, 0xbe, 0xb9, 0x1a, 0x50, + 0xd3, 0xa5, 0xd7, 0xf9, 0xce, 0x45, 0xcb, 0x11, 0xd7, 0x6f, 0xc5, 0xa0, 0x08, 0x8f, 0xac, 0x5b, + 0x7b, 0xac, 0xf4, 0x33, 0x25, 0x3b, 0xc0, 0x2f, 0x25, 0x1f, 0x70, 0x71, 0x02, 0x6b, 0xd7, 0xf2, + 0xd4, 0x9b, 0xfb, 0x9d, 0x30, 0x3f, 0x65, 0x24, 0x55, 0x83, 0x1b, 0xab, 0x31, 0x38, 0x92, 0x0f, + 0xcf, 0x59, 0xa3, 0xcf, 0x7c, 0x20, 0x8b, 0xb5, 0xf5, 0xd9, 0xb2, 0xcc, 0x7b, 0x90, 0xa3, 0x7a, + 0xaf, 0x9f, 0x5f, 0x36, 0x94, 0x7c, 0x47, 0x1a, 0xcf, 0x17, 0x94, 0xa7, 0x01, 0x72, 0xe4, 0x51, + 0x1e, 0x2b, 0x54, 0x1c, 0x7f, 0x25, 0xed, 0x86, 0x3e, 0xe8, 0xd9, 0x30, 0x90, 0x75, 0x50, 0xef, + 0xf5, 0xf3, 0x43, 0x87, 0x52, 0xb9, 0x23, 0xe5, 0xb9, 0x68, 0xf8, 0x55, 0xf2, 0x25, 0x8b, 0x62, + 0x71, 0x94, 0xdf, 0xa3, 0x84, 0xf6, 0xab, 0xb4, 0xcf, 0xc6, 0xf9, 0xcb, 0x17, 0x95, 0x06, 0xd7, + 0xec, 0x0a, 0x6f, 0xaf, 0xf0, 0x3b, 0x9d, 0x33, 0xfd, 0x2b, 0xfd, 0xfc, 0x15, 0x41, 0x59, 0x2a, + 0x6f, 0xab, 0xe1, 0x77, 0x0a, 0xa7, 0xee, 0x8f, 0xaa, 0xdb, 0x67, 0xf8, 0xbd, 0x18, 0xde, 0xfb, + 0x29, 0x84, 0xf2, 0xc7, 0x7b, 0xc9, 0xda, 0x96, 0xa8, 0x94, 0xc3, 0x9a, 0x79, 0xb6, 0xc0, 0xfc, + 0xf6, 0xed, 0x3f, 0x1f, 0x26, 0xae, 0xdf, 0xa9, 0x4c, 0x34, 0x76, 0x0c, 0xf8, 0xed, 0xc1, 0xcb, + 0xea, 0x85, 0xdf, 0x0e, 0x9c, 0x1f, 0x4f, 0x1e, 0x0f, 0xfc, 0xc6, 0x06, 0x7e, 0x63, 0x53, 0xf2, + 0xfb, 0x9f, 0x46, 0x4e, 0x55, 0xca, 0x1e, 0x42, 0xa4, 0x6b, 0x3b, 0xb6, 0x8a, 0x55, 0xcf, 0xfa, + 0x68, 0xf8, 0xf9, 0xd4, 0x46, 0xbe, 0x37, 0xd1, 0xe3, 0x0b, 0x7e, 0x5b, 0xf5, 0x9e, 0x13, 0x6c, + 0xdc, 0x25, 0xaa, 0x77, 0xa0, 0x3d, 0x38, 0x7a, 0x57, 0x7a, 0x9d, 0x5f, 0x5b, 0xaf, 0x21, 0xd8, + 0xf7, 0xdb, 0xae, 0xf7, 0x94, 0xe0, 0x3a, 0xbf, 0xfd, 0xb8, 0x8d, 0x5f, 0x4f, 0xaf, 0x2e, 0xf8, + 0x86, 0x7e, 0xc5, 0x80, 0xc3, 0x42, 0xc7, 0x0d, 0xf8, 0x22, 0x79, 0xaf, 0xd8, 0xde, 0xb6, 0xec, + 0x94, 0x56, 0x8e, 0x5f, 0x0f, 0x0c, 0x8b, 0x1e, 0xe7, 0x5d, 0xfc, 0xca, 0x28, 0x7b, 0x51, 0x7b, + 0xaa, 0x77, 0xe4, 0xf9, 0x42, 0x36, 0xa8, 0x65, 0xc6, 0x53, 0xb7, 0xa3, 0x4e, 0xe1, 0x21, 0x7e, + 0xcf, 0x57, 0xe7, 0xbc, 0x5f, 0xf2, 0x3c, 0x56, 0x3e, 0x67, 0x15, 0x03, 0x8f, 0x45, 0xbf, 0x55, + 0xdb, 0xd3, 0x3e, 0xab, 0x6a, 0x65, 0xbc, 0x12, 0x74, 0xa8, 0xab, 0x76, 0x0c, 0x53, 0xe3, 0xdd, + 0xfc, 0xa6, 0xd7, 0x6c, 0x75, 0xa5, 0x5f, 0xe3, 0xa9, 0x5e, 0xe9, 0xfc, 0x5d, 0xe9, 0xa1, 0xc5, + 0x8b, 0x53, 0xe3, 0x75, 0xbf, 0x07, 0xbe, 0xeb, 0x21, 0xe0, 0x57, 0xe6, 0x3d, 0x70, 0xfe, 0x4a, + 0x55, 0xe2, 0xd4, 0xad, 0x6a, 0x9f, 0x1f, 0xab, 0x70, 0xfe, 0xfa, 0x74, 0xf2, 0x7b, 0xb0, 0x7d, + 0xb6, 0xfd, 0xbe, 0xd6, 0xf5, 0xf7, 0xb1, 0xd9, 0xbd, 0x61, 0xe1, 0x09, 0x92, 0x3a, 0xbf, 0xea, + 0xfd, 0x7f, 0xb6, 0x26, 0x8b, 0x98, 0xe1, 0x97, 0xd6, 0x4d, 0xed, 0x3f, 0xd7, 0x6d, 0x50, 0x29, + 0xc3, 0xeb, 0x3f, 0x8b, 0xa8, 0x6c, 0x93, 0x83, 0x04, 0x8f, 0xf3, 0xbb, 0xda, 0xfb, 0xdb, 0xfc, + 0xdc, 0x7a, 0xfa, 0xd7, 0xa3, 0x9f, 0x5b, 0xfd, 0x0a, 0x7d, 0x15, 0x98, 0xdf, 0x87, 0x93, 0x7e, + 0x7e, 0x8b, 0x3e, 0x2f, 0xf1, 0x6b, 0x5f, 0x30, 0xbb, 0x94, 0xfc, 0x5a, 0x4c, 0xf1, 0xcb, 0x3b, + 0x98, 0x6c, 0x5b, 0xa2, 0xc5, 0x9a, 0x72, 0xfe, 0xb2, 0x1b, 0xa8, 0x9e, 0x5d, 0x9b, 0x97, 0xf7, + 0xbb, 0x0c, 0xf1, 0x5b, 0xe8, 0x86, 0xd0, 0xc5, 0x69, 0xed, 0xf3, 0xbb, 0x00, 0xbf, 0x57, 0x30, + 0xef, 0x44, 0xa7, 0x7e, 0xf7, 0x3f, 0x96, 0x20, 0x39, 0xe3, 0x97, 0xf7, 0x4d, 0xed, 0xcf, 0xe7, + 0xfd, 0xe6, 0x7b, 0x6c, 0x1f, 0x97, 0x18, 0xd0, 0x93, 0x52, 0x0b, 0x32, 0xfa, 0xf0, 0x76, 0x7e, + 0xf5, 0x1e, 0xa3, 0x72, 0x53, 0xb5, 0xdf, 0x64, 0x8e, 0x5f, 0xf9, 0xbd, 0xac, 0xcf, 0x3d, 0xfd, + 0x2a, 0x6b, 0x5f, 0xc5, 0xaf, 0xbe, 0x73, 0x0e, 0x6c, 0xaa, 0xfe, 0x9b, 0x30, 0xbf, 0xf4, 0x88, + 0xea, 0x78, 0x7f, 0x34, 0xa3, 0x7d, 0x6e, 0xdc, 0x0d, 0x3d, 0xb6, 0xf6, 0x66, 0x7e, 0x49, 0xdb, + 0x63, 0xf5, 0x9f, 0xb7, 0x86, 0xa6, 0x43, 0xff, 0xd9, 0xdd, 0x0d, 0x62, 0xe8, 0x42, 0x1d, 0x9b, + 0x60, 0x9d, 0xfa, 0x23, 0x8d, 0x26, 0xbf, 0x19, 0x90, 0xb7, 0x04, 0x5a, 0xa9, 0xf4, 0xb0, 0xa7, + 0x6b, 0xd8, 0xd5, 0x8a, 0xf5, 0xf0, 0xb3, 0xde, 0xbe, 0xbc, 0xef, 0x30, 0xe1, 0x7e, 0x49, 0x8e, + 0x7b, 0x8d, 0x4f, 0x16, 0xfd, 0x92, 0x8f, 0x7a, 0xcb, 0xb1, 0x2f, 0xca, 0x5d, 0x96, 0x5f, 0xc6, + 0x73, 0x35, 0xb2, 0x9c, 0xac, 0x34, 0x7a, 0x78, 0xad, 0x54, 0x17, 0x5d, 0x93, 0x5e, 0xb7, 0xbf, + 0x72, 0x6d, 0x4b, 0x67, 0x72, 0x3c, 0xbf, 0xfc, 0x80, 0x67, 0x89, 0x95, 0x7e, 0x8f, 0x6c, 0xad, + 0xec, 0x57, 0x66, 0x90, 0x27, 0xff, 0xbe, 0x4e, 0x2c, 0x56, 0xfa, 0x2d, 0x20, 0xfc, 0xae, 0xf7, + 0xf7, 0xab, 0xac, 0xad, 0xf3, 0xbb, 0x6c, 0x2d, 0xac, 0x2c, 0xa3, 0x70, 0xfe, 0xf2, 0xd6, 0xdf, + 0x28, 0x2d, 0x3f, 0xe8, 0x58, 0x51, 0xa7, 0xfc, 0x9e, 0x68, 0x9f, 0xdf, 0xd9, 0xaf, 0x5b, 0x92, + 0xb9, 0x35, 0xda, 0x70, 0xc8, 0x57, 0x51, 0x9a, 0x9a, 0x94, 0x2e, 0x21, 0xa4, 0x92, 0x95, 0x7e, + 0x2b, 0xaa, 0x1b, 0xe4, 0xf9, 0x60, 0x27, 0xbf, 0x63, 0xdb, 0xe7, 0xde, 0x7e, 0x6b, 0x1a, 0xe9, + 0x38, 0x7e, 0xb3, 0x46, 0x74, 0x35, 0xfc, 0xae, 0xa5, 0xfe, 0xf3, 0xb1, 0xad, 0xb1, 0x12, 0xe8, + 0x2b, 0x2b, 0x8d, 0x84, 0x8b, 0x52, 0x78, 0x55, 0x15, 0xbf, 0x7d, 0xfa, 0xcf, 0xd5, 0x09, 0x15, + 0x7e, 0x1b, 0xf1, 0x6b, 0xdc, 0x07, 0xb5, 0x85, 0x9d, 0xbc, 0xe1, 0xaa, 0xf5, 0x8d, 0x7c, 0xef, + 0xa2, 0xe5, 0xb8, 0xbd, 0x5f, 0xbd, 0xc5, 0xbb, 0x98, 0x51, 0x95, 0x78, 0x43, 0xbf, 0xab, 0xda, + 0xe2, 0x5d, 0xca, 0xb8, 0x4a, 0xf4, 0xf6, 0x7b, 0xd1, 0xfc, 0x14, 0x60, 0x71, 0x54, 0xef, 0x6b, + 0xce, 0x2f, 0x03, 0x26, 0x07, 0xf5, 0x62, 0x7e, 0x68, 0x70, 0xe0, 0x37, 0x36, 0xf0, 0x1b, 0x1b, + 0xf8, 0x8d, 0x0d, 0xfc, 0xc6, 0x06, 0x7e, 0x63, 0x03, 0xbf, 0xb1, 0x81, 0xdf, 0xd8, 0xc0, 0x6f, + 0x6c, 0xe0, 0x37, 0x36, 0x25, 0xbf, 0xff, 0x6e, 0xe4, 0xaa, 0xef, 0x15, 0x95, 0x1f, 0x4c, 0xf4, + 0xf8, 0x82, 0xdf, 0x56, 0xbd, 0x10, 0xdc, 0x17, 0x5b, 0xaf, 0x21, 0xd8, 0xf7, 0xdb, 0xae, 0x17, + 0x82, 0x7b, 0xe2, 0xe9, 0xd5, 0x05, 0xc3, 0xef, 0x9d, 0x80, 0xdf, 0xd8, 0x0c, 0xf1, 0x7b, 0xbe, + 0x3a, 0xf0, 0xdb, 0x19, 0x53, 0x23, 0xfc, 0x86, 0x00, 0x7e, 0x63, 0x43, 0x35, 0xb2, 0xdf, 0xe3, + 0x36, 0xfb, 0xd5, 0x7e, 0x8f, 0x5c, 0x04, 0x7e, 0x3b, 0x93, 0x34, 0xa6, 0x9f, 0x6b, 0x8b, 0x04, + 0x41, 0xa5, 0xdf, 0xec, 0xd7, 0xdc, 0x55, 0xc0, 0x6f, 0x67, 0x76, 0x8d, 0xf4, 0x27, 0xa3, 0x2c, + 0x41, 0x02, 0xbf, 0x77, 0x62, 0xb0, 0xdf, 0xbd, 0x48, 0x39, 0x0b, 0x44, 0x5f, 0x82, 0xdf, 0xde, + 0x6c, 0x1a, 0xc9, 0xa5, 0xf2, 0xb1, 0xd8, 0xe5, 0xfa, 0xbb, 0x97, 0x58, 0xf7, 0x02, 0xbf, 0xdd, + 0x19, 0xe7, 0x97, 0x14, 0x2a, 0xa6, 0x81, 0x38, 0x1f, 0xe1, 0xb7, 0x33, 0x43, 0xfd, 0xaa, 0x13, + 0x1b, 0xb3, 0x69, 0x7a, 0x74, 0xe6, 0x1f, 0xfc, 0x76, 0x66, 0x98, 0x5f, 0x75, 0x36, 0xac, 0x3a, + 0x6f, 0x95, 0x5e, 0xa9, 0xe1, 0xb7, 0x33, 0xd7, 0xfa, 0xc5, 0xf5, 0x77, 0x34, 0x63, 0xfb, 0x57, + 0xde, 0x84, 0x6a, 0xf4, 0x9f, 0x67, 0x30, 0xec, 0xfe, 0x88, 0x52, 0x7f, 0x17, 0x0c, 0xbf, 0x9d, + 0x81, 0xdf, 0xd8, 0x0c, 0x1b, 0x9f, 0xa4, 0xc0, 0xef, 0x65, 0x8c, 0x7b, 0xbe, 0x70, 0x0a, 0xf8, + 0xed, 0x0c, 0x9e, 0x0f, 0xc6, 0x06, 0x7e, 0x63, 0x03, 0xbf, 0xb1, 0x19, 0xe2, 0xb7, 0x91, 0x31, + 0xdf, 0xf4, 0x3d, 0xf9, 0xc1, 0x45, 0xcb, 0x01, 0xbf, 0x77, 0x02, 0x7e, 0x63, 0xd3, 0xdb, 0x2f, + 0xe6, 0xa7, 0xbc, 0x18, 0x47, 0xf5, 0x62, 0x7e, 0xd9, 0xcd, 0x38, 0xa8, 0x17, 0xf3, 0x43, 0x83, + 0x03, 0xbf, 0xb1, 0x81, 0xdf, 0xd8, 0xc0, 0x6f, 0x6c, 0xe0, 0x37, 0x36, 0xf0, 0x1b, 0x1b, 0xf8, + 0x8d, 0x0d, 0xfc, 0xc6, 0x06, 0x7e, 0x63, 0x03, 0xbf, 0xb1, 0x29, 0xf9, 0xfd, 0x97, 0x09, 0x2f, + 0xe7, 0x0f, 0x13, 0x1e, 0xf7, 0xbb, 0x09, 0x8f, 0xfb, 0xcd, 0x84, 0xc7, 0xfd, 0x6a, 0xc2, 0xe3, + 0x7e, 0x31, 0xe1, 0x71, 0x3f, 0x9b, 0xf0, 0xb8, 0x9f, 0x4c, 0x78, 0xdc, 0x8f, 0x26, 0x3c, 0xee, + 0x9f, 0x26, 0x3c, 0xee, 0x1f, 0x26, 0xab, 0x4a, 0xc1, 0xaf, 0xad, 0x97, 0x0b, 0xb6, 0xf5, 0x72, + 0xc1, 0xb6, 0x5e, 0x2e, 0xd8, 0xd6, 0xcb, 0x05, 0xdb, 0x7a, 0xb9, 0x60, 0x5b, 0x2f, 0x17, 0x6c, + 0xeb, 0xe5, 0x82, 0x6d, 0xbd, 0x5c, 0xb0, 0xad, 0x97, 0x0b, 0xb6, 0xf5, 0x72, 0xc1, 0xb6, 0x5e, + 0x43, 0xb0, 0xef, 0xd7, 0xd3, 0x4b, 0x05, 0x7b, 0x7a, 0xa9, 0x60, 0x4f, 0x2f, 0x15, 0xec, 0xe9, + 0xa5, 0x82, 0x3d, 0xbd, 0x54, 0xb0, 0xa7, 0x97, 0x0a, 0xf6, 0xf4, 0x52, 0xc1, 0x9e, 0x5e, 0x2a, + 0xd8, 0xd3, 0x4b, 0x05, 0x7b, 0x7a, 0xa9, 0x60, 0x4f, 0xaf, 0x2e, 0x18, 0x7e, 0xe1, 0x17, 0x7e, + 0x43, 0xfb, 0xd5, 0xb2, 0x69, 0x7e, 0xb5, 0x38, 0xcd, 0xaf, 0x16, 0xa7, 0xf9, 0xd5, 0xe2, 0x34, + 0xbf, 0x5a, 0x9c, 0xe6, 0x57, 0x8b, 0xd3, 0xfc, 0x6a, 0x71, 0x9a, 0x5f, 0x2d, 0x4e, 0xf3, 0xab, + 0xc5, 0x69, 0x7e, 0xb5, 0x38, 0xcd, 0xaf, 0x16, 0x07, 0xbf, 0xf0, 0xeb, 0xf9, 0x5d, 0x08, 0x2c, + 0xe1, 0xc1, 0xa6, 0x91, 0xfe, 0x23, 0x0e, 0x0b, 0x4d, 0x78, 0xf2, 0xd4, 0x48, 0xff, 0xa5, 0xa5, + 0x47, 0x89, 0xaa, 0x5f, 0xfe, 0x3f, 0xb5, 0x7e, 0x7a, 0xb7, 0xfc, 0xca, 0x50, 0xcb, 0xaf, 0x9c, + 0x97, 0x65, 0xf8, 0x5d, 0xe4, 0xf7, 0x75, 0xfc, 0xb2, 0x79, 0x22, 0x96, 0x5f, 0x5a, 0x16, 0x4b, + 0x78, 0x40, 0x35, 0xb2, 0x40, 0xd3, 0xaf, 0x28, 0xb0, 0xd7, 0xf9, 0x5b, 0xf0, 0x9b, 0xed, 0x67, + 0xe3, 0xfc, 0x65, 0xc7, 0xc1, 0xb2, 0xbe, 0x9c, 0x5f, 0x56, 0x56, 0x96, 0x40, 0x35, 0x8a, 0x79, + 0x5e, 0x8e, 0x5f, 0x56, 0xa4, 0xe9, 0x57, 0x04, 0x7a, 0x7e, 0x69, 0x5c, 0x27, 0xbf, 0xfb, 0x11, + 0x63, 0xb6, 0xcf, 0xdb, 0x3f, 0xd7, 0xb0, 0xc8, 0x84, 0x4f, 0xec, 0x1a, 0xe9, 0x64, 0x61, 0x96, + 0xf0, 0xe0, 0x36, 0x7e, 0x65, 0x79, 0x05, 0xbf, 0xfb, 0xbb, 0xe5, 0x57, 0x96, 0x57, 0xf2, 0xbb, + 0xbd, 0xf7, 0xf1, 0x9b, 0x1a, 0x04, 0xfb, 0xfa, 0xfb, 0x11, 0x92, 0xf6, 0x8c, 0x79, 0xfd, 0xdd, + 0x8f, 0x83, 0x45, 0x24, 0x7c, 0xe2, 0xa9, 0x31, 0x05, 0x6d, 0x07, 0x8d, 0x79, 0xfd, 0x15, 0xc7, + 0x15, 0xfc, 0x3e, 0x39, 0xea, 0x57, 0x4f, 0xa0, 0x1a, 0xd9, 0x75, 0xc6, 0xee, 0x5f, 0x3d, 0x8f, + 0x83, 0x25, 0x4b, 0xf8, 0xe0, 0x4e, 0x7e, 0xd9, 0x6c, 0xd9, 0x46, 0xbf, 0xa4, 0xb4, 0xc7, 0xe2, + 0x54, 0xbf, 0x4b, 0x95, 0x5f, 0xb6, 0x5f, 0x9c, 0xfe, 0x33, 0xeb, 0x1f, 0xdc, 0xd5, 0x2f, 0x3f, + 0x9a, 0xef, 0xed, 0x97, 0x7e, 0x93, 0x0e, 0x7e, 0x59, 0x79, 0xc6, 0xfd, 0xd1, 0xd6, 0xd8, 0xef, + 0x8d, 0xbe, 0x7d, 0x7f, 0xc4, 0xaf, 0x0b, 0xd3, 0xfc, 0xd6, 0xf7, 0x9f, 0x59, 0x91, 0x2f, 0xea, + 0x57, 0x4f, 0x78, 0x6f, 0xbf, 0x2b, 0x3d, 0x89, 0x4b, 0xf7, 0x47, 0x8b, 0x4c, 0x78, 0x70, 0xda, + 0xef, 0x96, 0xa1, 0x83, 0x5f, 0xd6, 0x0e, 0xcd, 0x69, 0x9f, 0xef, 0xe2, 0x37, 0x1d, 0xab, 0x33, + 0xcf, 0x5f, 0xba, 0xff, 0xda, 0xfd, 0x2e, 0x9d, 0xfd, 0x2e, 0x4c, 0x88, 0x35, 0x7e, 0x45, 0xae, + 0xbd, 0x9f, 0xde, 0x9d, 0xf1, 0x2b, 0x76, 0x25, 0x9c, 0xed, 0xb7, 0x53, 0xff, 0x99, 0xf4, 0x22, + 0x2a, 0xdb, 0xe7, 0x2c, 0x41, 0x50, 0xeb, 0x97, 0xeb, 0x6d, 0xf7, 0x4b, 0xfa, 0x4c, 0x3c, 0xe1, + 0x13, 0xb7, 0xf1, 0x2b, 0xcb, 0xeb, 0x73, 0x7f, 0x94, 0x4e, 0xcd, 0x59, 0x7e, 0x85, 0xde, 0x66, + 0xbf, 0x8b, 0xf8, 0xc2, 0xf0, 0xcb, 0xee, 0x7f, 0xaf, 0xf0, 0xcb, 0xb2, 0x35, 0xfa, 0x25, 0x2a, + 0x1e, 0x4b, 0xe6, 0xf3, 0x05, 0xb1, 0x63, 0xbc, 0xe7, 0x0b, 0x74, 0xbb, 0xe6, 0xf3, 0x05, 0x71, + 0x21, 0x9c, 0x3c, 0x3e, 0x59, 0xf4, 0x2b, 0xcb, 0x9b, 0x79, 0xfe, 0xd2, 0x4b, 0x7a, 0x9b, 0x5f, + 0xd6, 0x1a, 0x7c, 0x5a, 0x9e, 0xe6, 0x57, 0xf4, 0xeb, 0x26, 0xdf, 0x1f, 0x95, 0xfd, 0x8a, 0xae, + 0xf6, 0xb4, 0xeb, 0xaf, 0x00, 0xcf, 0x07, 0x47, 0x3f, 0x1f, 0x2c, 0xf4, 0xaf, 0x04, 0xf0, 0x7b, + 0x37, 0xbf, 0x6a, 0x02, 0xfc, 0xea, 0x09, 0xf0, 0x0b, 0xbf, 0x1f, 0xbc, 0xa5, 0x5f, 0x93, 0x14, + 0xf7, 0x87, 0x4b, 0x8a, 0xfb, 0xdd, 0x25, 0xc5, 0xfd, 0xe6, 0x92, 0xe2, 0x7e, 0x75, 0x49, 0x71, + 0xbf, 0xb8, 0xa4, 0xb8, 0x9f, 0x5d, 0x52, 0xdc, 0x4f, 0x2e, 0x29, 0xee, 0x47, 0x17, 0xa1, 0xd1, + 0x44, 0x68, 0x34, 0x81, 0x5f, 0xf8, 0x85, 0xdf, 0x77, 0xf2, 0x8b, 0xf9, 0x29, 0xaa, 0xde, 0x30, + 0xf3, 0x53, 0x30, 0xbf, 0x4c, 0xd7, 0x1b, 0x66, 0x7e, 0x19, 0xb8, 0x39, 0xf0, 0x1b, 0x1b, 0xf8, + 0x8d, 0x8d, 0xe6, 0x17, 0x82, 0xc3, 0xa0, 0xea, 0x85, 0xdf, 0x30, 0xe8, 0x7e, 0x21, 0x38, 0x08, + 0x86, 0x5e, 0xf8, 0x0d, 0x82, 0xe5, 0x17, 0x82, 0x43, 0x60, 0xea, 0x85, 0xe1, 0x00, 0x78, 0x76, + 0x61, 0xf8, 0xee, 0x94, 0xec, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x5d, 0xf8, 0x3f, 0x67, 0xcc, 0x42, 0xb8 +}; + +#endif diff --git a/backends/platform/psp/kbd_s_c.cpp b/backends/platform/psp/kbd_s_c.cpp new file mode 100644 index 0000000000..cf745b64b0 --- /dev/null +++ b/backends/platform/psp/kbd_s_c.cpp @@ -0,0 +1,206 @@ +#ifndef __keyboard_symbols_compressed__ +#define __keyboard_symbols_compressed__ + +unsigned int size_keyboard_symbols_compressed = 3155; +unsigned char keyboard_symbols_compressed[] __attribute__((aligned(16))) = { + 0x78, 0x9c, 0xed, 0x9d, 0xe9, 0xb6, 0xac, 0x36, 0x0e, 0x46, 0xe9, 0xcc, 0xe9, 0x4c, 0xdd, 0x99, + 0xa7, 0xee, 0xf7, 0x7f, 0x42, 0xf2, 0x37, 0x2b, 0xe7, 0x9e, 0x02, 0x49, 0x96, 0x64, 0x1b, 0x0f, + 0x80, 0xf8, 0xf6, 0x5a, 0xa9, 0x43, 0x61, 0xd9, 0x18, 0x36, 0x18, 0x63, 0xca, 0x37, 0x7f, 0xfd, + 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x8d, 0x58, 0xc1, 0x8d, + 0x81, 0xdd, 0xe8, 0xc0, 0x6e, 0x74, 0xa0, 0x37, 0x38, 0xf0, 0x1b, 0x1b, 0xe8, 0x0d, 0x0e, 0xfc, + 0xc6, 0x06, 0x7a, 0x83, 0x03, 0xbf, 0xb1, 0x81, 0xdf, 0xd8, 0xe4, 0xfc, 0xfe, 0xcb, 0x84, 0x97, + 0xf3, 0x91, 0x09, 0x8f, 0xfb, 0xd8, 0x84, 0xc7, 0x7d, 0x62, 0xc2, 0xe3, 0x3e, 0x35, 0xe1, 0x71, + 0x9f, 0x99, 0xf0, 0xb8, 0xcf, 0x4d, 0x78, 0xdc, 0x17, 0x26, 0x3c, 0xee, 0x4b, 0x13, 0x1e, 0xf7, + 0x6f, 0x13, 0x1e, 0xf7, 0x95, 0xc9, 0xaa, 0x92, 0xf1, 0x6b, 0xeb, 0xe5, 0x82, 0x6d, 0xbd, 0x5c, + 0xb0, 0xad, 0x97, 0x0b, 0xb6, 0xf5, 0x72, 0xc1, 0xb6, 0x5e, 0x2e, 0xd8, 0xd6, 0xcb, 0x05, 0xdb, + 0x7a, 0xb9, 0x60, 0x5b, 0x2f, 0x17, 0x6c, 0xeb, 0xe5, 0x82, 0x6d, 0xbd, 0x5c, 0xb0, 0xad, 0xd7, + 0x10, 0xec, 0xfb, 0xf5, 0xf4, 0x52, 0xc1, 0x9e, 0x5e, 0x2a, 0xd8, 0xd3, 0x4b, 0x05, 0x7b, 0x7a, + 0xa9, 0x60, 0x4f, 0x2f, 0x15, 0xec, 0xe9, 0xa5, 0x82, 0x3d, 0xbd, 0x54, 0xb0, 0xa7, 0x97, 0x0a, + 0xf6, 0xf4, 0x52, 0xc1, 0x9e, 0x5e, 0x2a, 0xd8, 0xd3, 0xab, 0x0b, 0x86, 0x5f, 0xf8, 0x85, 0xdf, + 0xd0, 0x7e, 0xb5, 0x6c, 0x9a, 0x5f, 0x2d, 0x4e, 0xf3, 0xab, 0xc5, 0x69, 0x7e, 0xb5, 0x38, 0xcd, + 0xaf, 0x16, 0xa7, 0xf9, 0xd5, 0xe2, 0x34, 0xbf, 0x5a, 0x9c, 0xe6, 0x57, 0x8b, 0xd3, 0xfc, 0x6a, + 0x71, 0x9a, 0x5f, 0x2d, 0x4e, 0xf3, 0xab, 0xc5, 0xc1, 0x2f, 0xfc, 0xc2, 0xef, 0xc3, 0xfd, 0x2e, + 0xcb, 0xa2, 0x27, 0x30, 0x8d, 0xcb, 0x1b, 0x4a, 0xc2, 0xca, 0x35, 0xb2, 0xb8, 0x8c, 0xdf, 0x2d, + 0xd0, 0xf4, 0xbb, 0x6c, 0x88, 0x84, 0x37, 0xa8, 0x46, 0xb6, 0x5d, 0xd3, 0xaf, 0x28, 0xcf, 0xf1, + 0xcb, 0xca, 0x73, 0xfc, 0xb2, 0x38, 0xc7, 0x2f, 0x8b, 0x9b, 0xe9, 0x97, 0x6c, 0xd6, 0xf1, 0xfb, + 0x16, 0xb4, 0x45, 0xda, 0x7e, 0x79, 0x5c, 0x0f, 0xbf, 0x74, 0xb7, 0x6c, 0xbf, 0x7c, 0xbb, 0xb9, + 0xeb, 0x37, 0xef, 0x97, 0x97, 0x67, 0xfb, 0xe5, 0x71, 0xb6, 0x5f, 0x1e, 0x37, 0xcf, 0x2f, 0x3b, + 0xad, 0x6c, 0xbf, 0xef, 0x31, 0xaf, 0x50, 0xd3, 0xaf, 0x88, 0xf3, 0xfd, 0x2e, 0xfd, 0xfc, 0x8a, + 0xed, 0x66, 0xfc, 0x6e, 0xa5, 0x9a, 0x7e, 0x45, 0x79, 0xa6, 0x5f, 0x11, 0x67, 0xfa, 0x15, 0x71, + 0x97, 0x6b, 0x9f, 0x47, 0xf8, 0x5d, 0xe0, 0xf7, 0x9d, 0xfb, 0xf8, 0x15, 0x45, 0x7a, 0x7e, 0x97, + 0x42, 0xbf, 0xb4, 0x81, 0xc9, 0xf9, 0x4d, 0x13, 0xde, 0x10, 0x1a, 0xf7, 0x60, 0xf8, 0x65, 0xfd, + 0xe7, 0x82, 0xfb, 0x2f, 0x8f, 0xf3, 0xfd, 0x16, 0xf6, 0xaf, 0x48, 0x79, 0x9e, 0xdf, 0xa2, 0xfe, + 0x95, 0xd8, 0xe1, 0xe6, 0xfb, 0xef, 0x03, 0xfd, 0xd2, 0xe3, 0xec, 0xf8, 0x5d, 0x4a, 0xfd, 0xd2, + 0x0d, 0xbb, 0x7e, 0x4b, 0xfb, 0x57, 0x64, 0x7f, 0x9b, 0xfb, 0xcf, 0xa1, 0xfc, 0xee, 0x81, 0xed, + 0xd7, 0x2f, 0xf7, 0x91, 0x7b, 0xfe, 0x2d, 0xf1, 0x4b, 0xe3, 0xda, 0xfd, 0xd6, 0xf6, 0x9f, 0x7b, + 0xf9, 0xe5, 0x0d, 0xd1, 0x54, 0xbf, 0x24, 0xae, 0xf9, 0xfe, 0xfb, 0x21, 0xe0, 0xba, 0x7e, 0x4b, + 0xef, 0xbf, 0x42, 0xc8, 0x9d, 0xfd, 0xd2, 0x2e, 0x4c, 0xab, 0x5f, 0xb1, 0xbb, 0x53, 0xfd, 0xd2, + 0xfd, 0xe8, 0xe0, 0x97, 0x95, 0x79, 0xe3, 0xf6, 0x99, 0xf5, 0x50, 0x5b, 0x9f, 0x8f, 0x16, 0x02, + 0x4b, 0xf8, 0xc0, 0xa1, 0xfb, 0x2f, 0x8d, 0x9b, 0xe6, 0x37, 0xcc, 0xfd, 0x97, 0xe9, 0xed, 0x34, + 0xbe, 0xd1, 0xb7, 0x7f, 0x45, 0xe3, 0xe0, 0xf7, 0xd8, 0xf3, 0x6f, 0x9a, 0xf0, 0xc6, 0xb8, 0xf1, + 0x49, 0x51, 0x5e, 0x8f, 0xf1, 0xc9, 0x22, 0xbf, 0xd5, 0xfd, 0xab, 0x24, 0xe1, 0x1f, 0x2e, 0x30, + 0x3e, 0xb9, 0x16, 0xfb, 0xa5, 0x37, 0xfe, 0x69, 0xef, 0x17, 0x44, 0x79, 0xcd, 0xef, 0x17, 0xd6, + 0x52, 0xbf, 0x85, 0xcf, 0x47, 0x22, 0xee, 0x8a, 0xef, 0x17, 0x28, 0x78, 0x3f, 0x18, 0xf0, 0xfd, + 0xe0, 0x6a, 0x26, 0xc0, 0xaf, 0x9e, 0x00, 0xbf, 0x7a, 0x02, 0xfc, 0xea, 0x09, 0x43, 0xfc, 0x9a, + 0xec, 0x71, 0x1f, 0xb9, 0xec, 0x71, 0x1f, 0xbb, 0xec, 0x71, 0x9f, 0xb8, 0xec, 0x71, 0x9f, 0xba, + 0xec, 0x71, 0x9f, 0xb9, 0xec, 0x71, 0x9f, 0xbb, 0xec, 0x71, 0x5f, 0xb8, 0xec, 0x71, 0x5f, 0xba, + 0x08, 0x8d, 0x26, 0x42, 0xa3, 0x09, 0xfc, 0xc2, 0x2f, 0xfc, 0x3e, 0xc9, 0x2f, 0xe6, 0xa7, 0xa8, + 0x7a, 0xc3, 0xcc, 0x4f, 0xc1, 0xfc, 0x32, 0x5d, 0x6f, 0x98, 0xf9, 0x65, 0xe0, 0xe6, 0xc0, 0x6f, + 0x6c, 0xe0, 0x37, 0x36, 0xf0, 0x1b, 0x1b, 0xf8, 0x8d, 0x0d, 0xfc, 0xc6, 0x06, 0x7e, 0x63, 0x03, + 0xbf, 0xb1, 0x81, 0xdf, 0xd8, 0xc0, 0x6f, 0x6c, 0x72, 0x7e, 0xff, 0xdf, 0xc8, 0x59, 0xfb, 0x15, + 0x95, 0xaf, 0x4d, 0xf4, 0xf8, 0x8c, 0xdf, 0x56, 0xbd, 0x10, 0xdc, 0x17, 0x5b, 0xaf, 0x21, 0xd8, + 0xf7, 0xdb, 0xae, 0x17, 0x82, 0x7b, 0xe2, 0xe9, 0xd5, 0x05, 0xc3, 0xef, 0x9d, 0x80, 0xdf, 0xd8, + 0x0c, 0xf1, 0x7b, 0xbc, 0x3a, 0xf0, 0xdb, 0x19, 0x53, 0x23, 0xfc, 0x86, 0x00, 0x7e, 0x63, 0x03, + 0xbf, 0xb1, 0x19, 0xea, 0x97, 0xcf, 0x28, 0xde, 0xd7, 0xda, 0xd5, 0x81, 0xdf, 0xce, 0x0c, 0xf6, + 0xab, 0x15, 0x00, 0xbf, 0x13, 0x81, 0xdf, 0xd8, 0xcc, 0xf2, 0xbb, 0x37, 0xd4, 0xf4, 0xef, 0x42, + 0xfe, 0xa6, 0xd9, 0x41, 0x3b, 0x9b, 0x46, 0xfa, 0xef, 0x1a, 0x2c, 0x6b, 0xd7, 0xfb, 0xef, 0x87, + 0xc5, 0xd7, 0xc7, 0x2a, 0x56, 0xb0, 0xfb, 0x33, 0xfc, 0x76, 0x66, 0xb0, 0xdf, 0x95, 0x2d, 0x1a, + 0x7e, 0x57, 0x23, 0x3b, 0x68, 0x67, 0x5e, 0xfb, 0xbc, 0x4a, 0xbf, 0xef, 0x67, 0x12, 0xfc, 0x8e, + 0xe4, 0x44, 0xbf, 0x69, 0x10, 0xfc, 0x76, 0x07, 0xed, 0x73, 0x6c, 0x66, 0xf4, 0xaf, 0x36, 0xb5, + 0xef, 0x2a, 0x79, 0xbf, 0x19, 0x7e, 0x47, 0x82, 0xf1, 0xc9, 0xd8, 0xc0, 0x6f, 0x6c, 0xe0, 0x37, + 0x36, 0xf0, 0x1b, 0x1b, 0xf8, 0x8d, 0x0d, 0xfc, 0xc6, 0x66, 0x88, 0xdf, 0x46, 0xc6, 0xec, 0xe9, + 0x33, 0xf9, 0xda, 0x45, 0xcb, 0x01, 0xbf, 0x77, 0x02, 0x7e, 0x63, 0xd3, 0xdb, 0x2f, 0xe6, 0xa7, + 0x5c, 0x8c, 0x5a, 0xbd, 0x98, 0x5f, 0x76, 0x33, 0x2a, 0xf5, 0x62, 0x7e, 0x68, 0x70, 0xe0, 0x37, + 0x36, 0xf0, 0x1b, 0x1b, 0xf8, 0x8d, 0x0d, 0xfc, 0xc6, 0xe6, 0x02, 0x7e, 0xbd, 0x5f, 0x50, 0xcb, + 0xff, 0xdf, 0x8e, 0x17, 0x93, 0x46, 0x16, 0xe4, 0xdd, 0x4a, 0x50, 0x26, 0x66, 0x58, 0xb9, 0x79, + 0x82, 0x96, 0x37, 0x93, 0x25, 0xbb, 0x85, 0x7e, 0x5c, 0xdd, 0x6f, 0x89, 0xa3, 0x66, 0xbf, 0x7a, + 0xfe, 0x32, 0xbf, 0xd6, 0xb6, 0x4b, 0xca, 0x7a, 0x84, 0xdf, 0xcc, 0xd9, 0x5f, 0xe6, 0x37, 0xf9, + 0x69, 0x50, 0x69, 0x5e, 0x12, 0x07, 0xbf, 0x43, 0xd8, 0xfd, 0x92, 0x96, 0x8e, 0x2e, 0x89, 0x15, + 0x69, 0x83, 0xb8, 0x2c, 0xf4, 0xa7, 0x7d, 0xec, 0xb7, 0x7f, 0x05, 0x4d, 0xe7, 0x9a, 0x08, 0xe3, + 0xed, 0x01, 0x9b, 0xaa, 0xf1, 0xfa, 0xa9, 0x99, 0x9a, 0x57, 0xf9, 0xc1, 0xb0, 0x56, 0xe7, 0x64, + 0xdf, 0x46, 0x72, 0xba, 0x5f, 0xd5, 0x8c, 0xfd, 0xfb, 0x4c, 0xfe, 0xdb, 0xbe, 0xad, 0x08, 0xcb, + 0xaf, 0x0c, 0x95, 0xc7, 0x9d, 0xac, 0x25, 0xf5, 0x51, 0xcb, 0x48, 0x7e, 0x58, 0x98, 0xe4, 0x95, + 0x15, 0xce, 0x56, 0xea, 0x02, 0x7e, 0xff, 0xd7, 0x48, 0xb6, 0x02, 0xfa, 0x41, 0xd8, 0xbe, 0x16, + 0xfa, 0x7d, 0x39, 0xce, 0x85, 0x7a, 0xf5, 0x50, 0x4f, 0x32, 0xe1, 0x97, 0x54, 0xcc, 0xc8, 0x2b, + 0x16, 0x7b, 0xfb, 0xfd, 0xc6, 0x44, 0x8f, 0xcf, 0xf8, 0x6d, 0xd5, 0x9b, 0x17, 0xbc, 0x88, 0xe6, + 0x4a, 0xb6, 0xac, 0x85, 0x7e, 0x57, 0xbd, 0x14, 0x19, 0x6a, 0x5c, 0xbf, 0x7b, 0xc6, 0x75, 0x4f, + 0x16, 0xdf, 0x1d, 0xbf, 0xf2, 0xa2, 0x25, 0x8b, 0x9d, 0xfd, 0xda, 0x7a, 0x0d, 0xc1, 0xbe, 0xdf, + 0x76, 0xbd, 0x39, 0xc1, 0xba, 0xc4, 0xea, 0xf6, 0xb9, 0xd8, 0x6f, 0x59, 0x25, 0x92, 0xb5, 0x4a, + 0x82, 0x16, 0xc5, 0xdb, 0xea, 0xfe, 0x7e, 0x3d, 0xbd, 0xba, 0xe0, 0x30, 0x7e, 0x95, 0x06, 0xf6, + 0xb8, 0x5f, 0xb3, 0x7d, 0xb6, 0x37, 0xfe, 0xfe, 0x05, 0x7e, 0x39, 0xa6, 0x44, 0xab, 0x17, 0xcb, + 0x5a, 0x74, 0x5e, 0x46, 0x92, 0x5e, 0xda, 0x7f, 0x66, 0x81, 0xd9, 0xfe, 0x33, 0xd9, 0x54, 0xb2, + 0x11, 0xb6, 0xc0, 0xfc, 0x76, 0xe9, 0x3f, 0x0f, 0xf1, 0x5b, 0x59, 0x07, 0x42, 0x63, 0x76, 0x87, + 0xfa, 0x3b, 0xd7, 0x1c, 0x06, 0xd7, 0xcb, 0xd4, 0x18, 0xc8, 0x6f, 0x69, 0xa3, 0x7b, 0x06, 0xa3, + 0xab, 0xf5, 0x04, 0xbf, 0x6b, 0x69, 0xa3, 0x3b, 0x9d, 0xf1, 0xd5, 0xa2, 0x1a, 0xd9, 0x61, 0x88, + 0xe4, 0xf7, 0xc1, 0x08, 0xbf, 0x7a, 0x02, 0xa3, 0xca, 0xaf, 0xf9, 0xe8, 0xf8, 0x9e, 0x2a, 0xd7, + 0xc0, 0x6f, 0x67, 0x86, 0xfb, 0xdd, 0x3f, 0x53, 0x06, 0xfa, 0xcd, 0x77, 0x84, 0xed, 0x53, 0xaf, + 0xe8, 0xf9, 0x68, 0x11, 0x0b, 0x9d, 0x6a, 0xd5, 0x9b, 0xb8, 0x7e, 0x9d, 0xed, 0x66, 0xaa, 0x36, + 0xcc, 0xef, 0xc1, 0x67, 0xd8, 0x16, 0x26, 0xfa, 0x65, 0x4f, 0x83, 0x7c, 0x10, 0xc0, 0xca, 0x7e, + 0x9c, 0xfc, 0xa1, 0x6c, 0xf5, 0xbb, 0xd0, 0xbf, 0xbd, 0x2a, 0xd5, 0x9d, 0x79, 0xf7, 0x5f, 0x65, + 0xac, 0x69, 0x59, 0xe4, 0xce, 0x9e, 0xe3, 0xd7, 0x1b, 0x0a, 0xb1, 0x32, 0x0b, 0xbf, 0x7c, 0x08, + 0x22, 0x1d, 0x62, 0x21, 0x9b, 0x24, 0xcb, 0x6c, 0xeb, 0xe9, 0xf9, 0xdf, 0xa1, 0xe3, 0x3f, 0xb9, + 0x7d, 0xe6, 0xcd, 0x66, 0x5a, 0xfb, 0x53, 0xfc, 0xea, 0x43, 0x81, 0x7b, 0x9c, 0x72, 0xa7, 0x5e, + 0xb6, 0x17, 0x8c, 0xea, 0x10, 0xa2, 0x51, 0x98, 0xe9, 0x57, 0xae, 0x10, 0x49, 0x0d, 0xcc, 0x6e, + 0x9f, 0xa5, 0x5f, 0x51, 0xf8, 0x40, 0xbf, 0x52, 0x92, 0xb0, 0x66, 0xfa, 0xb5, 0x8a, 0xb7, 0xfc, + 0xd2, 0x6b, 0x3a, 0xa9, 0x82, 0x58, 0xe6, 0xd9, 0xcc, 0xa4, 0x06, 0xe6, 0xf9, 0x55, 0x6a, 0x7d, + 0x81, 0xeb, 0x77, 0xab, 0x47, 0xf5, 0xf5, 0xfb, 0x5e, 0x7b, 0xd7, 0x6f, 0x72, 0x4a, 0x89, 0x65, + 0xb6, 0x39, 0xeb, 0x4e, 0xd6, 0xc4, 0x69, 0x7e, 0x2f, 0x72, 0xff, 0xe5, 0xd5, 0xab, 0xb9, 0x7e, + 0x4d, 0xbf, 0xc9, 0x5f, 0xb5, 0x52, 0xba, 0x44, 0xeb, 0x4a, 0x38, 0xcc, 0xc4, 0xf1, 0x0d, 0x7a, + 0x95, 0xcc, 0xe9, 0x3f, 0xbb, 0x87, 0xa7, 0xd9, 0xaf, 0x99, 0x8f, 0xfd, 0x4d, 0xaf, 0x5f, 0xc3, + 0xaf, 0x75, 0x11, 0xb4, 0x31, 0xd8, 0x6f, 0x2d, 0x53, 0xc7, 0x37, 0xb4, 0xe0, 0xe2, 0xfe, 0xf3, + 0x2a, 0xed, 0xec, 0xd9, 0xd8, 0xfd, 0x47, 0x69, 0xeb, 0xc5, 0x72, 0xd2, 0x3e, 0x8b, 0x96, 0xba, + 0x89, 0xa8, 0x7e, 0xc1, 0x07, 0xe0, 0x37, 0x36, 0xf0, 0x1b, 0x1b, 0xbc, 0x1f, 0x8c, 0xcd, 0x23, + 0xde, 0xef, 0x3f, 0x98, 0x21, 0x7e, 0x1b, 0x19, 0xb3, 0xa7, 0x79, 0xcc, 0xe7, 0x56, 0x2d, 0x54, + 0xeb, 0x68, 0x67, 0x32, 0x16, 0xf5, 0xcd, 0xd5, 0x80, 0xe3, 0xe3, 0x94, 0xdf, 0xb8, 0x68, 0x39, + 0xe2, 0xfa, 0x2d, 0x18, 0x14, 0xe1, 0x91, 0x65, 0x6b, 0xeb, 0x4a, 0x3f, 0x52, 0xb2, 0x03, 0xfc, + 0x52, 0xd2, 0x01, 0x17, 0x27, 0xb0, 0x74, 0x2d, 0x4f, 0xbd, 0xb9, 0xdf, 0x09, 0xf3, 0x53, 0x46, + 0x52, 0xfa, 0x3e, 0xce, 0x18, 0xbc, 0x96, 0xc3, 0x73, 0xd6, 0xe8, 0x33, 0x1f, 0xc8, 0x62, 0x6d, + 0x7d, 0xb2, 0x2c, 0xf3, 0x56, 0x52, 0xab, 0xf7, 0xfc, 0xf9, 0x65, 0x43, 0x49, 0x0f, 0xa4, 0xf1, + 0x7e, 0x41, 0x7b, 0x25, 0x21, 0x56, 0xc8, 0x73, 0x85, 0x8a, 0xe3, 0x9f, 0xa4, 0xdd, 0xd0, 0x07, + 0x3d, 0x1b, 0x06, 0xb2, 0x2a, 0xf5, 0x9e, 0x3f, 0x3f, 0x74, 0x28, 0x85, 0x07, 0x52, 0x5e, 0x8b, + 0x86, 0x5f, 0x25, 0xdf, 0x6e, 0x51, 0x2c, 0x8e, 0xf2, 0x5b, 0x4b, 0x68, 0xbf, 0x4a, 0xfb, 0x6c, + 0x5c, 0xbf, 0x7c, 0x51, 0x69, 0x70, 0xcd, 0xae, 0xf0, 0xeb, 0x13, 0x7e, 0xa7, 0x73, 0xa4, 0x7f, + 0xa5, 0x5f, 0xbf, 0x22, 0x28, 0x49, 0xe5, 0x6d, 0x35, 0xfc, 0x4e, 0xe1, 0xd0, 0xf3, 0x51, 0x71, + 0xfb, 0x0c, 0xbf, 0x27, 0xc3, 0x7b, 0x3f, 0x99, 0x50, 0xfe, 0x7a, 0x6f, 0xb7, 0xf6, 0x4a, 0x54, + 0xca, 0x61, 0xcd, 0x3c, 0x5b, 0x60, 0x7e, 0xfb, 0xf6, 0x9f, 0xab, 0x89, 0xeb, 0x77, 0x2a, 0x13, + 0x8d, 0xd5, 0x01, 0xbf, 0x3d, 0xb8, 0xac, 0x5e, 0xf8, 0xed, 0xc0, 0xf1, 0xf1, 0xe4, 0xf1, 0xc0, + 0x6f, 0x6c, 0xe0, 0x37, 0x36, 0x39, 0xbf, 0x7f, 0x36, 0x72, 0xa8, 0x52, 0xf6, 0x10, 0x22, 0x5d, + 0xdb, 0xb1, 0x55, 0x2c, 0x7a, 0xd7, 0x47, 0xc3, 0x8f, 0xa7, 0x36, 0xf2, 0xad, 0x89, 0x1e, 0x9f, + 0xf1, 0xdb, 0xaa, 0xf7, 0x98, 0x60, 0xe3, 0x29, 0x51, 0x7d, 0x02, 0xed, 0x41, 0xed, 0x53, 0xe9, + 0x79, 0x7e, 0x6d, 0xbd, 0x86, 0x60, 0xdf, 0x6f, 0xbb, 0xde, 0x43, 0x82, 0xcb, 0xfc, 0xf6, 0xe3, + 0x36, 0x7e, 0x3d, 0xbd, 0xba, 0xe0, 0x1b, 0xfa, 0x15, 0x03, 0x0e, 0x0b, 0x1d, 0x37, 0xe0, 0x8b, + 0xe4, 0x6f, 0xc1, 0xf6, 0x5e, 0xcb, 0x4e, 0x69, 0xf9, 0xf8, 0xb5, 0x62, 0x58, 0xb4, 0x9e, 0xa7, + 0xf8, 0x95, 0x51, 0xf6, 0xa2, 0xf6, 0x56, 0xaf, 0xe6, 0xfd, 0x42, 0x32, 0xa8, 0x65, 0xc6, 0x53, + 0xb7, 0xa3, 0x2e, 0xe1, 0x21, 0x7e, 0x8f, 0x57, 0xe7, 0xb8, 0x5f, 0xf2, 0x3e, 0x56, 0xbe, 0x67, + 0x15, 0x03, 0x8f, 0x59, 0xbf, 0x45, 0xdb, 0xd3, 0xbe, 0xab, 0x6a, 0x65, 0xbc, 0x12, 0x54, 0xd5, + 0x55, 0xab, 0xc3, 0xd4, 0x78, 0x37, 0xbf, 0xfb, 0x67, 0xb2, 0xba, 0xd0, 0xaf, 0xf1, 0x56, 0x2f, + 0x77, 0xfd, 0xae, 0xf4, 0xd4, 0xe2, 0xc5, 0xa9, 0xf1, 0xba, 0xdf, 0x8a, 0x7d, 0xad, 0x82, 0x6a, + 0x64, 0x75, 0x7a, 0x9e, 0x5f, 0x9e, 0xa7, 0x78, 0x7b, 0x7a, 0x71, 0xa2, 0xa4, 0x8b, 0x5c, 0xbf, + 0x4f, 0xf7, 0x5b, 0xd9, 0x3e, 0xdb, 0x7e, 0xaf, 0x75, 0xff, 0x25, 0xdb, 0xee, 0xe5, 0x57, 0x7d, + 0xfe, 0x4f, 0xd6, 0x24, 0x11, 0x33, 0xfc, 0xd2, 0xba, 0xa9, 0xfd, 0xe7, 0xb2, 0x0d, 0x2a, 0x65, + 0x78, 0xfd, 0x67, 0x11, 0x95, 0x6c, 0x72, 0x90, 0xe0, 0x71, 0x7e, 0x57, 0xfb, 0x78, 0x9b, 0xdf, + 0x5b, 0x2f, 0xff, 0x72, 0xf4, 0x6b, 0xab, 0x5f, 0xa1, 0x57, 0x61, 0xa8, 0xdf, 0xac, 0xcf, 0x53, + 0xfc, 0xda, 0x37, 0xcc, 0x2e, 0x25, 0x5f, 0x8b, 0x29, 0x7e, 0x79, 0x07, 0x93, 0xb6, 0x4b, 0xb2, + 0xc5, 0x9a, 0x72, 0xfd, 0xb2, 0x07, 0xa8, 0x9e, 0x5d, 0x9b, 0x87, 0xfa, 0xcd, 0x74, 0x43, 0xe8, + 0xe2, 0xb4, 0xf6, 0xf9, 0x29, 0xc0, 0xef, 0x19, 0xcc, 0xbb, 0xd0, 0xe7, 0xf8, 0xe5, 0x7d, 0x53, + 0xfb, 0xfb, 0x71, 0xbf, 0xe9, 0x11, 0xdb, 0xc6, 0x25, 0x06, 0xf4, 0xa4, 0xd4, 0x82, 0x8c, 0x3e, + 0xbc, 0x9d, 0x5f, 0x7d, 0xc6, 0x28, 0xdc, 0x54, 0xe9, 0x9e, 0x4c, 0xbb, 0x7e, 0xd7, 0x92, 0xef, + 0x3d, 0xfd, 0x2a, 0x6b, 0xaf, 0xe2, 0x57, 0x3f, 0x38, 0x15, 0x9b, 0x2a, 0xdf, 0x93, 0x19, 0xcf, + 0x47, 0x33, 0xda, 0xe7, 0xc6, 0xc3, 0xd0, 0x63, 0x6b, 0x0f, 0xf3, 0x4b, 0xda, 0x1e, 0xab, 0xff, + 0xfc, 0xda, 0x60, 0x87, 0xfe, 0xb3, 0x7b, 0x18, 0xc4, 0xd0, 0x45, 0x6e, 0x7c, 0xa3, 0xae, 0xd1, + 0xe4, 0x0f, 0x03, 0xf2, 0x91, 0x40, 0x2b, 0x95, 0x9e, 0xf6, 0x74, 0x0d, 0xbb, 0x5b, 0xb1, 0x1e, + 0x7e, 0xd2, 0xdb, 0x97, 0xcf, 0x1d, 0x26, 0x41, 0xc6, 0x27, 0xb3, 0x7e, 0xc9, 0x57, 0xbd, 0xe5, + 0xd8, 0x16, 0xe5, 0x21, 0x4b, 0x6f, 0xe3, 0xa9, 0x1a, 0x59, 0x4e, 0x52, 0x1a, 0x3d, 0xbd, 0x56, + 0xaa, 0x8b, 0xae, 0xd9, 0x3f, 0x5f, 0xff, 0xe5, 0x6b, 0x9b, 0xbb, 0x92, 0xe3, 0xf9, 0xe5, 0x27, + 0x3c, 0x4b, 0x2c, 0xf4, 0x5b, 0xb3, 0xb5, 0xbc, 0x5f, 0x99, 0x41, 0x5e, 0xfc, 0xdb, 0x3a, 0xb1, + 0x58, 0xe8, 0x37, 0x43, 0x3c, 0xbf, 0xca, 0xda, 0x32, 0xbf, 0xcb, 0xab, 0x85, 0x95, 0x65, 0x64, + 0xae, 0x5f, 0xf9, 0x30, 0xa0, 0x96, 0x96, 0x9e, 0x74, 0xac, 0xa8, 0x43, 0x7e, 0x6b, 0xdb, 0x67, + 0x16, 0xfe, 0x3c, 0xbf, 0x6e, 0x49, 0xe6, 0xd6, 0x68, 0xc3, 0x21, 0x3f, 0x45, 0x69, 0x6a, 0xd2, + 0x7e, 0x0b, 0x21, 0x95, 0x2c, 0xf4, 0x5b, 0x50, 0xdd, 0x20, 0xef, 0xf7, 0x3b, 0xf9, 0x1d, 0xdb, + 0x3e, 0xf7, 0xf6, 0x5b, 0xd2, 0x48, 0xc7, 0xf1, 0x9b, 0x34, 0xa2, 0xab, 0xe1, 0x77, 0xcd, 0xf5, + 0x9f, 0xeb, 0xb6, 0xc6, 0x4a, 0xa0, 0x9f, 0xac, 0x34, 0x12, 0x2e, 0x4a, 0xe1, 0x55, 0x55, 0xfc, + 0x76, 0xec, 0x3f, 0x97, 0x24, 0x14, 0xf8, 0x6d, 0xc4, 0xaf, 0x71, 0x1f, 0xd4, 0x16, 0x76, 0xf2, + 0x86, 0x8b, 0xd6, 0x37, 0xf2, 0xad, 0x8b, 0x96, 0xe3, 0xf6, 0x7e, 0xf5, 0x16, 0xef, 0x64, 0x46, + 0x55, 0xe2, 0x81, 0x7e, 0x57, 0xb5, 0xc5, 0x3b, 0x95, 0x71, 0x95, 0xe8, 0xed, 0xf7, 0xa4, 0xf9, + 0x29, 0xc0, 0xa2, 0x56, 0xef, 0x35, 0xe7, 0x97, 0x01, 0x93, 0x4a, 0xbd, 0x98, 0x1f, 0x1a, 0x1c, + 0xf8, 0x8d, 0x0d, 0xfc, 0xc6, 0x06, 0x7e, 0x63, 0x03, 0xbf, 0xb1, 0x81, 0xdf, 0xd8, 0xc0, 0x6f, + 0x6c, 0xe0, 0x37, 0x36, 0xf0, 0x1b, 0x1b, 0xf8, 0x8d, 0x4d, 0xce, 0xef, 0x1f, 0x8d, 0x9c, 0xb5, + 0x5f, 0x51, 0xf9, 0xce, 0x44, 0x8f, 0xcf, 0xf8, 0x6d, 0xd5, 0x0b, 0xc1, 0x7d, 0xb1, 0xf5, 0x1a, + 0x82, 0x7d, 0xbf, 0xed, 0x7a, 0x21, 0xb8, 0x27, 0x9e, 0x5e, 0x5d, 0x30, 0xfc, 0xde, 0x09, 0xf8, + 0x8d, 0xcd, 0x10, 0xbf, 0xc7, 0xab, 0x03, 0xbf, 0x9d, 0x31, 0x35, 0xc2, 0x6f, 0x08, 0x76, 0x8d, + 0xe2, 0x37, 0x40, 0xf0, 0x1b, 0x82, 0x71, 0x7e, 0xb5, 0xdf, 0x23, 0x67, 0x81, 0xdf, 0xce, 0x10, + 0x8d, 0xdc, 0x46, 0xab, 0xdf, 0xe4, 0xd7, 0xdc, 0x45, 0xc0, 0x6f, 0x67, 0xe0, 0x37, 0x36, 0x54, + 0x23, 0x13, 0xdc, 0xc7, 0xef, 0x56, 0xb0, 0x9c, 0x05, 0xa2, 0x2f, 0xc1, 0x6f, 0x6f, 0x86, 0xf9, + 0x25, 0x33, 0xa6, 0xe4, 0x6c, 0x28, 0xf3, 0x03, 0x7e, 0xbb, 0xc3, 0x34, 0x52, 0xc1, 0x3d, 0xfa, + 0xcf, 0x6c, 0x36, 0x94, 0x98, 0xd2, 0xa8, 0x7f, 0x85, 0xdf, 0xce, 0x0c, 0xf5, 0xab, 0x4e, 0x6c, + 0x4c, 0xa6, 0xe9, 0xd1, 0x99, 0x7f, 0xf0, 0xdb, 0x19, 0xae, 0x91, 0x08, 0xee, 0xd9, 0xbf, 0x72, + 0x1a, 0x64, 0xb6, 0x04, 0xbf, 0xdd, 0x39, 0xd7, 0x2f, 0xee, 0xbf, 0xa3, 0x11, 0x1a, 0x77, 0xc1, + 0x3d, 0xc7, 0x37, 0xd4, 0x45, 0xf4, 0x9f, 0x67, 0x30, 0xce, 0x2f, 0xa1, 0xfc, 0x29, 0x18, 0x7e, + 0x3b, 0x23, 0x35, 0x6e, 0x82, 0xe1, 0x37, 0x04, 0xf0, 0x1b, 0x1b, 0xbc, 0x1f, 0x8c, 0x0d, 0xfc, + 0xc6, 0x06, 0x7e, 0x63, 0x03, 0xbf, 0xb1, 0x19, 0xe2, 0xb7, 0x91, 0x31, 0x7b, 0xfa, 0x4c, 0xbe, + 0x73, 0xd1, 0x72, 0xc0, 0xef, 0x9d, 0x80, 0xdf, 0xd8, 0xf4, 0xf6, 0x8b, 0xf9, 0x29, 0x17, 0xa3, + 0x56, 0x2f, 0xe6, 0x97, 0xdd, 0x8c, 0x4a, 0xbd, 0x98, 0x1f, 0x1a, 0x1c, 0xf8, 0x8d, 0x0d, 0xfc, + 0xc6, 0x06, 0x7e, 0x63, 0x03, 0xbf, 0xb1, 0x81, 0xdf, 0xd8, 0xc0, 0x6f, 0x6c, 0xe0, 0x37, 0x36, + 0xf0, 0x1b, 0x1b, 0xf8, 0x8d, 0x4d, 0xce, 0xef, 0xef, 0x26, 0xbc, 0x9c, 0xdf, 0x4c, 0x78, 0xdc, + 0xaf, 0x26, 0x3c, 0xee, 0x17, 0x13, 0x1e, 0xf7, 0xb3, 0x09, 0x8f, 0xfb, 0xc9, 0x84, 0xc7, 0xfd, + 0x68, 0xc2, 0xe3, 0x7e, 0x30, 0xe1, 0x71, 0xdf, 0x9b, 0xf0, 0xb8, 0xff, 0x9a, 0xf0, 0xb8, 0xff, + 0x98, 0xac, 0x2a, 0x19, 0xbf, 0xb6, 0x5e, 0x2e, 0xd8, 0xd6, 0xcb, 0x05, 0xdb, 0x7a, 0xb9, 0x60, + 0x5b, 0x2f, 0x17, 0x6c, 0xeb, 0xe5, 0x82, 0x6d, 0xbd, 0x5c, 0xb0, 0xad, 0x97, 0x0b, 0xb6, 0xf5, + 0x72, 0xc1, 0xb6, 0x5e, 0x2e, 0xd8, 0xd6, 0xcb, 0x05, 0xdb, 0x7a, 0x0d, 0xc1, 0xbe, 0x5f, 0x4f, + 0x2f, 0x15, 0xec, 0xe9, 0xa5, 0x82, 0x3d, 0xbd, 0x54, 0xb0, 0xa7, 0x97, 0x0a, 0xf6, 0xf4, 0x52, + 0xc1, 0x9e, 0x5e, 0x2a, 0xd8, 0xd3, 0x4b, 0x05, 0x7b, 0x7a, 0xa9, 0x60, 0x4f, 0x2f, 0x15, 0xec, + 0xe9, 0xa5, 0x82, 0x3d, 0xbd, 0xba, 0x60, 0xf8, 0x85, 0x5f, 0xf8, 0x0d, 0xed, 0x57, 0xcb, 0xa6, + 0xf9, 0xd5, 0xe2, 0x34, 0xbf, 0x5a, 0x9c, 0xe6, 0x57, 0x8b, 0xd3, 0xfc, 0x6a, 0x71, 0x9a, 0x5f, + 0x2d, 0x4e, 0xf3, 0xab, 0xc5, 0x69, 0x7e, 0xb5, 0x38, 0xcd, 0xaf, 0x16, 0xa7, 0xf9, 0xd5, 0xe2, + 0x34, 0xbf, 0x5a, 0x1c, 0xfc, 0xc2, 0x2f, 0xfc, 0xa6, 0x7e, 0x5f, 0x13, 0x7c, 0x66, 0xfa, 0xa5, + 0xf3, 0xf2, 0xe1, 0xb7, 0xde, 0x2f, 0x9d, 0x3f, 0x75, 0x6b, 0xbf, 0x24, 0x10, 0x7e, 0x37, 0x8d, + 0x6c, 0x7a, 0x5c, 0xc6, 0xef, 0x76, 0x04, 0xa7, 0xb6, 0xcf, 0xf0, 0xfb, 0xe2, 0x98, 0xdf, 0xf2, + 0xeb, 0xf7, 0x14, 0xbf, 0xb4, 0x7e, 0x68, 0x9f, 0x47, 0xfa, 0xdd, 0x43, 0xd1, 0xbf, 0xba, 0x8d, + 0x5f, 0x06, 0xfc, 0x3e, 0xd8, 0x2f, 0xb9, 0xd2, 0xe1, 0x17, 0x7e, 0x95, 0x04, 0xf8, 0xd5, 0x13, + 0x2e, 0xe1, 0x97, 0xde, 0xa8, 0x2f, 0xe9, 0x17, 0xfd, 0xe7, 0x17, 0xf0, 0x0b, 0xbf, 0xff, 0x40, + 0x35, 0xb2, 0x7e, 0xf6, 0x25, 0xfd, 0xae, 0xf0, 0xfb, 0xce, 0x35, 0xfc, 0x92, 0x12, 0x3b, 0x5d, + 0xbf, 0x46, 0x02, 0x01, 0x7e, 0x0d, 0xbf, 0xfc, 0xdf, 0x47, 0xbf, 0xa4, 0xdf, 0xb5, 0x20, 0x01, + 0x7e, 0x3b, 0xf8, 0xdd, 0x63, 0xfd, 0xf6, 0x19, 0x7e, 0xdf, 0xb9, 0x80, 0x5f, 0x4e, 0x17, 0xbf, + 0xe4, 0x8c, 0x81, 0xdf, 0x3b, 0xf9, 0x35, 0x13, 0xf0, 0xfc, 0xab, 0x27, 0xc0, 0xaf, 0x9e, 0x00, + 0xbf, 0x7a, 0x02, 0xfc, 0x3a, 0x7e, 0x4d, 0xf6, 0xb8, 0xdf, 0x5c, 0xf6, 0xb8, 0x5f, 0x5d, 0xf6, + 0xb8, 0x5f, 0x5c, 0xf6, 0xb8, 0x9f, 0x5d, 0xf6, 0xb8, 0x9f, 0x5c, 0xf6, 0xb8, 0x1f, 0x5d, 0xf6, + 0xb8, 0x1f, 0x5c, 0xf6, 0xb8, 0xef, 0x5d, 0x84, 0x46, 0x13, 0xa1, 0xd1, 0x04, 0x7e, 0xe1, 0x17, + 0x7e, 0x9f, 0xe4, 0x17, 0xf3, 0x53, 0x54, 0xbd, 0x61, 0xe6, 0xa7, 0x60, 0x7e, 0x99, 0xae, 0x37, + 0xcc, 0xfc, 0x32, 0x70, 0x73, 0xe0, 0x37, 0x36, 0xf0, 0x1b, 0x1b, 0xcd, 0x2f, 0x04, 0x87, 0x41, + 0xd5, 0x0b, 0xbf, 0x61, 0xd0, 0xfd, 0x42, 0x70, 0x10, 0x0c, 0xbd, 0xf0, 0x1b, 0x04, 0xcb, 0x2f, + 0x04, 0x87, 0xc0, 0xd4, 0x0b, 0xc3, 0x01, 0xf0, 0xec, 0xc2, 0xf0, 0xdd, 0xc9, 0xd9, 0x05, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0xf0, 0x37, 0x6c, + 0x6c, 0x3d, 0x8c +}; + +#endif diff --git a/backends/platform/psp/kbd_ss_c.cpp b/backends/platform/psp/kbd_ss_c.cpp new file mode 100644 index 0000000000..7c10227b2c --- /dev/null +++ b/backends/platform/psp/kbd_ss_c.cpp @@ -0,0 +1,212 @@ +#ifndef __keyboard_symbols_shift_compressed__ +#define __keyboard_symbols_shift_compressed__ + +unsigned int size_keyboard_symbols_shift_compressed = 3263; +unsigned char keyboard_symbols_shift_compressed[] __attribute__((aligned(16))) = { + 0x78, 0x9c, 0xed, 0x9d, 0xe9, 0xb6, 0xac, 0xb8, 0x0d, 0x46, 0x49, 0x0f, 0x49, 0x77, 0x7a, 0x4a, + 0x7a, 0x1e, 0x92, 0xbc, 0xff, 0x13, 0xd2, 0x7f, 0xd3, 0xe7, 0x9c, 0x02, 0x4b, 0xb2, 0x24, 0x1b, + 0x6c, 0x33, 0x88, 0x6f, 0xaf, 0x75, 0xab, 0x28, 0x90, 0x8d, 0x8b, 0x5d, 0x36, 0xc6, 0xe0, 0x73, + 0xff, 0xfc, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1b, 0x31, + 0x83, 0x1b, 0x03, 0xbb, 0xd1, 0x81, 0xdd, 0xe8, 0x40, 0x6f, 0x70, 0xe0, 0x37, 0x36, 0xd0, 0x1b, + 0x1c, 0xf8, 0x8d, 0x0d, 0xf4, 0x06, 0x07, 0x7e, 0x63, 0x03, 0xbf, 0xb1, 0x29, 0xf9, 0xfd, 0x9b, + 0x09, 0xcf, 0xe7, 0x13, 0x13, 0x1e, 0xf7, 0xa9, 0x09, 0x8f, 0xfb, 0xcc, 0x84, 0xc7, 0x7d, 0x6e, + 0xc2, 0xe3, 0xfe, 0x6e, 0xc2, 0xe3, 0xfe, 0x61, 0xc2, 0xe3, 0xbe, 0x30, 0xe1, 0x71, 0x5f, 0x9a, + 0xf0, 0xb8, 0x7f, 0x9a, 0xf0, 0xb8, 0xaf, 0x4c, 0x66, 0x95, 0x82, 0x5f, 0x5b, 0x2f, 0x17, 0x6c, + 0xeb, 0xe5, 0x82, 0x6d, 0xbd, 0x5c, 0xb0, 0xad, 0x97, 0x0b, 0xb6, 0xf5, 0x72, 0xc1, 0xb6, 0x5e, + 0x2e, 0xd8, 0xd6, 0xcb, 0x05, 0xdb, 0x7a, 0xb9, 0x60, 0x5b, 0x2f, 0x17, 0x6c, 0xeb, 0xe5, 0x82, + 0x6d, 0xbd, 0x86, 0x60, 0xdf, 0xaf, 0xa7, 0x97, 0x0a, 0xf6, 0xf4, 0x52, 0xc1, 0x9e, 0x5e, 0x2a, + 0xd8, 0xd3, 0x4b, 0x05, 0x7b, 0x7a, 0xa9, 0x60, 0x4f, 0x2f, 0x15, 0xec, 0xe9, 0xa5, 0x82, 0x3d, + 0xbd, 0x54, 0xb0, 0xa7, 0x97, 0x0a, 0xf6, 0xf4, 0x52, 0xc1, 0x9e, 0x5e, 0x5d, 0x30, 0xfc, 0xc2, + 0xef, 0xb3, 0xfc, 0x6a, 0x47, 0x29, 0xb4, 0x5f, 0x2d, 0x99, 0xe6, 0x57, 0x8b, 0xd3, 0xfc, 0x6a, + 0x71, 0x9a, 0x5f, 0x2d, 0x4e, 0xf3, 0xab, 0xc5, 0x69, 0x7e, 0xb5, 0xb8, 0x4a, 0xbf, 0xb3, 0xe6, + 0x57, 0x8b, 0xd3, 0xfc, 0x6a, 0x71, 0x9a, 0x5f, 0x2d, 0x4e, 0xf3, 0xab, 0xc5, 0x05, 0xf6, 0xab, + 0x85, 0x5d, 0xd2, 0xef, 0x34, 0x4d, 0xfa, 0x06, 0xa1, 0x91, 0xc6, 0x1d, 0xe9, 0x97, 0xee, 0xf7, + 0x50, 0xbf, 0x64, 0xc7, 0x07, 0xfa, 0x9d, 0xe8, 0xf7, 0x75, 0xfd, 0x92, 0x38, 0xc7, 0x2f, 0xcd, + 0xce, 0xaf, 0xbf, 0x24, 0xf2, 0x82, 0x7e, 0xa7, 0x0f, 0xf2, 0x0d, 0xb3, 0xd0, 0xf8, 0x57, 0xcc, + 0x9a, 0xa3, 0xe7, 0x97, 0x64, 0x67, 0xfb, 0x65, 0x36, 0x5c, 0xbf, 0x2c, 0xd2, 0xf6, 0x4b, 0xbf, + 0x85, 0xeb, 0x97, 0x05, 0xda, 0x7e, 0x79, 0xf9, 0xfc, 0xf6, 0x39, 0xc5, 0x5e, 0xce, 0xef, 0x12, + 0xf4, 0x7a, 0x6f, 0xf7, 0x3b, 0x4d, 0xf4, 0x07, 0x63, 0xf9, 0x4d, 0x21, 0x1f, 0x6f, 0xb6, 0x5f, + 0xee, 0xcd, 0xf4, 0xfb, 0x1e, 0x93, 0x02, 0xe1, 0xf7, 0x43, 0x63, 0x8a, 0xf9, 0x58, 0x6a, 0xf6, + 0x3b, 0xbd, 0x47, 0x4d, 0x4b, 0xc6, 0x86, 0xdf, 0x14, 0xf1, 0x8a, 0x33, 0xfd, 0x0a, 0x6f, 0x1d, + 0xfc, 0xb2, 0x06, 0xc1, 0xf4, 0xcb, 0xf5, 0x96, 0xfa, 0x57, 0x6b, 0xf4, 0xc5, 0xfc, 0x2e, 0x47, + 0x65, 0x3d, 0xde, 0xb6, 0x5f, 0x56, 0x2d, 0xbb, 0xf9, 0x5d, 0x32, 0xb4, 0xfc, 0xb2, 0x4a, 0x3e, + 0x17, 0xfc, 0xf6, 0x6c, 0x9f, 0xe3, 0xf8, 0x65, 0x46, 0x7a, 0xf8, 0xa5, 0xf5, 0xa3, 0xe0, 0x77, + 0x8d, 0x6c, 0xef, 0x5f, 0xb1, 0xdd, 0xc2, 0xef, 0xbb, 0x46, 0x56, 0x8d, 0x0a, 0x7e, 0x59, 0xf3, + 0x5c, 0x3c, 0xff, 0x2a, 0x1b, 0xde, 0x20, 0x7e, 0x79, 0x85, 0x6b, 0xf6, 0xcb, 0xf5, 0xb6, 0xf7, + 0x9f, 0xe1, 0xb7, 0xa9, 0xff, 0x2c, 0xf4, 0x36, 0xfb, 0x95, 0x0d, 0x7e, 0xf3, 0xf5, 0x6f, 0x28, + 0xbf, 0xe9, 0xc8, 0xf4, 0xf0, 0x4b, 0xab, 0xb0, 0x77, 0xfd, 0xfb, 0xda, 0xb3, 0xdf, 0xbf, 0x12, + 0x18, 0x7e, 0xd3, 0x17, 0x80, 0xdf, 0x37, 0x14, 0xbf, 0x85, 0xfe, 0x33, 0x3f, 0xfd, 0xd6, 0xf8, + 0xf5, 0xfa, 0x57, 0x4b, 0xf1, 0xd6, 0xc0, 0x1e, 0x7e, 0xe9, 0xef, 0x0a, 0x7e, 0x17, 0xbf, 0xfc, + 0x82, 0xb5, 0x97, 0xdf, 0x42, 0xff, 0x79, 0x16, 0x6d, 0x47, 0x1f, 0xbf, 0xf3, 0xb3, 0xfc, 0x52, + 0xbc, 0xeb, 0x23, 0x8a, 0xd7, 0x7f, 0xa6, 0xfd, 0x92, 0xc6, 0xeb, 0x23, 0xd2, 0x98, 0xf6, 0xf6, + 0x9b, 0x36, 0xc0, 0x2f, 0x29, 0x58, 0xa9, 0xfe, 0x76, 0xf6, 0xbb, 0x36, 0xa8, 0x7d, 0xfc, 0xb2, + 0x0b, 0xf9, 0x65, 0x43, 0xdb, 0xfd, 0x05, 0x2e, 0xf8, 0xae, 0xe3, 0x57, 0xb2, 0xe1, 0x6d, 0xf6, + 0xcb, 0x9b, 0x7b, 0xef, 0xfa, 0x77, 0xa6, 0x42, 0xfa, 0x5c, 0x1f, 0x75, 0xec, 0x5f, 0xf5, 0xf6, + 0x3b, 0xf1, 0xe3, 0x72, 0xbd, 0xfb, 0x47, 0xb5, 0x7e, 0xeb, 0xae, 0x8f, 0x48, 0xe8, 0xba, 0xe1, + 0x62, 0xf7, 0x07, 0x99, 0xe0, 0x2b, 0xde, 0x3f, 0xa2, 0x3c, 0xe0, 0xfe, 0x20, 0xe3, 0x09, 0xf7, + 0x7f, 0x29, 0xf0, 0x8b, 0xe7, 0x37, 0x94, 0x0d, 0x77, 0x78, 0x3e, 0xc7, 0x7e, 0x00, 0x2b, 0x7d, + 0x0c, 0xe5, 0xd7, 0x24, 0xc5, 0x7d, 0xe2, 0x92, 0xe2, 0x3e, 0x75, 0x49, 0x71, 0x9f, 0xb9, 0xa4, + 0x38, 0xef, 0xe9, 0x3a, 0x3c, 0x3f, 0x09, 0xbf, 0xf0, 0x0b, 0xbf, 0x91, 0xfd, 0x62, 0x7e, 0x8a, + 0xaa, 0x37, 0xcc, 0xfc, 0x14, 0xcc, 0x2f, 0xd3, 0xf5, 0x86, 0x99, 0x5f, 0x06, 0x6e, 0x0e, 0xfc, + 0xc6, 0x06, 0x7e, 0x63, 0x03, 0xbf, 0xb1, 0x81, 0xdf, 0xd8, 0xc0, 0x6f, 0x6c, 0xe0, 0x37, 0x36, + 0xf0, 0x1b, 0x1b, 0xf8, 0x8d, 0x0d, 0xfc, 0xc6, 0xa6, 0xe4, 0xf7, 0x7f, 0x8d, 0x9c, 0xf5, 0xbd, + 0xa2, 0xf2, 0xb5, 0x89, 0x1e, 0x5f, 0xf0, 0xdb, 0xaa, 0x17, 0x82, 0xfb, 0x62, 0xeb, 0x35, 0x04, + 0xfb, 0x7e, 0xdb, 0xf5, 0x42, 0x70, 0x4f, 0x3c, 0xbd, 0xba, 0x60, 0xf8, 0xbd, 0x13, 0xf0, 0x1b, + 0x9b, 0x21, 0x7e, 0xf7, 0x17, 0x07, 0x7e, 0x3b, 0x63, 0x6a, 0x84, 0xdf, 0x10, 0xc0, 0x6f, 0x6c, + 0xe0, 0x37, 0x36, 0x43, 0xfd, 0x8a, 0x29, 0xbb, 0xeb, 0x5a, 0xbb, 0x38, 0xf0, 0xdb, 0x19, 0xa6, + 0x91, 0xaa, 0xe8, 0xe3, 0x57, 0xcb, 0x00, 0x7e, 0x0f, 0x04, 0x7e, 0x63, 0x73, 0x94, 0xdf, 0xd4, + 0x50, 0xd3, 0xf7, 0x69, 0xe6, 0x93, 0x39, 0xe1, 0xb7, 0x37, 0x83, 0xfd, 0x12, 0xab, 0xcb, 0xcb, + 0x2c, 0x56, 0xb0, 0xf3, 0x33, 0xfc, 0x76, 0xe6, 0xb8, 0xfa, 0x3b, 0x9b, 0x7e, 0x67, 0x23, 0x39, + 0x68, 0x67, 0xd1, 0x38, 0x51, 0xe8, 0x86, 0x8c, 0x6e, 0x7e, 0xd7, 0xbf, 0x67, 0x30, 0x1b, 0xc9, + 0x41, 0x3b, 0x27, 0xfa, 0xcd, 0x83, 0xe0, 0xb7, 0x3b, 0x68, 0x9f, 0x63, 0x73, 0x44, 0xff, 0x6a, + 0x55, 0xfb, 0xca, 0x9e, 0xf7, 0x9b, 0xe1, 0x77, 0x24, 0x43, 0xfd, 0x6e, 0x07, 0x7e, 0x3b, 0x03, + 0xbf, 0xb1, 0x81, 0xdf, 0xd8, 0xe0, 0xfe, 0x51, 0x6c, 0xe0, 0x37, 0x36, 0xf0, 0x1b, 0x9b, 0x21, + 0x7e, 0x1b, 0x19, 0xf3, 0x4d, 0x9f, 0xc9, 0xd7, 0x2e, 0x5a, 0x0a, 0xf8, 0xbd, 0x13, 0xf0, 0x1b, + 0x9b, 0xde, 0x7e, 0x31, 0x3f, 0xe5, 0x62, 0x6c, 0xd5, 0x8b, 0xf9, 0x65, 0x37, 0x63, 0xa3, 0x5e, + 0xcc, 0x0f, 0x0d, 0x0e, 0xfc, 0xc6, 0x06, 0x7e, 0x63, 0x03, 0xbf, 0xb1, 0x81, 0xdf, 0xd8, 0x5c, + 0xc0, 0xaf, 0xf7, 0x04, 0x75, 0xfe, 0x3f, 0x66, 0xd9, 0x31, 0x79, 0x64, 0x45, 0xda, 0x35, 0x07, + 0x65, 0x62, 0x86, 0x95, 0x9a, 0x6f, 0xd0, 0xd2, 0x16, 0x92, 0x14, 0xf7, 0xd0, 0x8f, 0xab, 0xfb, + 0xad, 0x71, 0xd4, 0xec, 0x57, 0x4f, 0x5f, 0xe7, 0xd7, 0xda, 0x77, 0x4d, 0x5e, 0x8f, 0xf0, 0x5b, + 0xf8, 0xf5, 0xd7, 0xf9, 0xcd, 0x1e, 0x0d, 0xaa, 0x4d, 0x4b, 0xe2, 0xe0, 0x77, 0x08, 0xc9, 0x2f, + 0x69, 0xe9, 0xe8, 0x92, 0x58, 0x91, 0x37, 0x88, 0xaf, 0xff, 0x2a, 0x8b, 0x26, 0x90, 0xff, 0x9f, + 0x59, 0xa9, 0x08, 0xa2, 0x3c, 0xd4, 0x19, 0x9b, 0xaa, 0xb1, 0x3c, 0x6a, 0xa6, 0xa6, 0x55, 0x1e, + 0x18, 0xd6, 0xca, 0x9c, 0x7d, 0xb7, 0x91, 0x9c, 0xee, 0x57, 0x35, 0x63, 0x3f, 0x9f, 0xc9, 0x9f, + 0xed, 0x5b, 0xb3, 0xb0, 0xfc, 0xca, 0x50, 0x79, 0xdc, 0xc9, 0x5a, 0x52, 0x1e, 0x35, 0x8f, 0xec, + 0xc1, 0xc2, 0x2c, 0xad, 0x2c, 0x70, 0xb1, 0x50, 0x17, 0xf0, 0xfb, 0xdf, 0x46, 0x8a, 0x05, 0xd0, + 0x0f, 0xc2, 0xfa, 0xb1, 0xd2, 0xef, 0xe2, 0xb8, 0x14, 0xea, 0x95, 0x43, 0xfd, 0x91, 0x09, 0xbf, + 0xa4, 0x60, 0x46, 0x5a, 0xb1, 0xd8, 0xdb, 0xef, 0x37, 0x26, 0x7a, 0x7c, 0xc1, 0x6f, 0xab, 0xde, + 0xb2, 0xe0, 0x49, 0x34, 0x57, 0xb2, 0x65, 0xad, 0xf4, 0x3b, 0xeb, 0xb9, 0xc8, 0x50, 0xa3, 0xfe, + 0xa6, 0x84, 0x73, 0xda, 0x2c, 0x3e, 0x3b, 0x7e, 0x65, 0xa5, 0x25, 0x8b, 0x9d, 0xfd, 0xda, 0x7a, + 0x0d, 0xc1, 0xbe, 0xdf, 0x76, 0xbd, 0x25, 0xc1, 0xba, 0xc4, 0xcd, 0xed, 0x73, 0xb5, 0xdf, 0xba, + 0x42, 0x64, 0x6b, 0x95, 0x0d, 0x5a, 0x14, 0x6f, 0xab, 0xfb, 0xfb, 0xf5, 0xf4, 0xea, 0x82, 0xc3, + 0xf8, 0x55, 0x1a, 0xd8, 0xfd, 0x7e, 0xcd, 0xf6, 0xd9, 0xde, 0xf9, 0xeb, 0x03, 0xfc, 0x72, 0x4c, + 0x89, 0x56, 0x2f, 0x96, 0xb5, 0xe8, 0x3c, 0x8f, 0x6c, 0x7b, 0x6d, 0xff, 0x99, 0x05, 0x16, 0xfb, + 0xcf, 0x64, 0x57, 0xd9, 0x4e, 0xd8, 0x02, 0xf3, 0xdb, 0xa5, 0xff, 0x3c, 0xc4, 0xef, 0xc6, 0x32, + 0x10, 0x1a, 0x93, 0x3b, 0x6c, 0x3f, 0x73, 0x1d, 0xc3, 0xe0, 0x72, 0x99, 0x1a, 0x03, 0xf9, 0xad, + 0x6d, 0x74, 0xcf, 0x60, 0x74, 0xb1, 0xa8, 0x46, 0xd6, 0x34, 0x05, 0xf2, 0x3b, 0xd7, 0x36, 0xba, + 0x87, 0x33, 0xbe, 0x58, 0x44, 0x23, 0xdf, 0x59, 0x24, 0xbf, 0x0f, 0x66, 0xb0, 0x5f, 0xf3, 0xd2, + 0xf1, 0xb5, 0x55, 0xae, 0x81, 0xdf, 0xce, 0x0c, 0xf7, 0x9b, 0x5e, 0x73, 0x06, 0xfa, 0x2d, 0x77, + 0x84, 0xed, 0x9f, 0x5e, 0xd5, 0xf5, 0xd1, 0x24, 0x16, 0x3a, 0x95, 0xaa, 0x37, 0x71, 0xfd, 0x3a, + 0xfb, 0x2d, 0x14, 0x6d, 0x98, 0xdf, 0x9d, 0xd7, 0xb0, 0x2d, 0x1c, 0xe8, 0x97, 0x5d, 0x0d, 0xf2, + 0x41, 0x00, 0x2b, 0xf9, 0x7e, 0xca, 0x87, 0xb2, 0xd5, 0xef, 0x44, 0xdf, 0x7b, 0x15, 0xaa, 0x3b, + 0xc7, 0x9d, 0x7f, 0x95, 0xb1, 0xa6, 0x69, 0x92, 0x5f, 0xf6, 0x1c, 0xbf, 0xde, 0x50, 0x88, 0x95, + 0x58, 0xf8, 0xe5, 0x43, 0x10, 0xf9, 0x10, 0x0b, 0xd9, 0x25, 0x59, 0x66, 0x7b, 0xcf, 0x7f, 0xff, + 0x1d, 0x3a, 0xfe, 0xcc, 0xaf, 0xb1, 0x81, 0xd3, 0xd4, 0x3e, 0xf3, 0x66, 0x33, 0x2f, 0xfd, 0x29, + 0x7e, 0xf5, 0xa1, 0xc0, 0x14, 0xa7, 0x9c, 0xa9, 0xa7, 0xf5, 0x06, 0xa3, 0x3a, 0x84, 0x68, 0x64, + 0x66, 0xfa, 0x95, 0x2b, 0xc4, 0xa6, 0x06, 0x56, 0x8d, 0x32, 0xab, 0x41, 0xed, 0xb3, 0xf4, 0x2b, + 0x32, 0x1f, 0xe8, 0x57, 0x4a, 0x12, 0xd6, 0x4c, 0xbf, 0x56, 0xf6, 0x96, 0x5f, 0x5a, 0xa7, 0xb3, + 0x22, 0x88, 0x65, 0x9e, 0xcc, 0xdc, 0xd4, 0xc0, 0x71, 0xf5, 0x57, 0x29, 0xf5, 0x05, 0xea, 0xef, + 0x5a, 0x8e, 0xcd, 0xf5, 0xf7, 0x55, 0x7a, 0xd7, 0x6f, 0xf6, 0x93, 0x12, 0xcb, 0x6c, 0x77, 0xd6, + 0x99, 0xac, 0x89, 0xe3, 0xfa, 0x57, 0xd7, 0x3c, 0xff, 0xf2, 0xe2, 0x6d, 0xa9, 0xbf, 0xa6, 0xdf, + 0xec, 0x5d, 0x2d, 0x94, 0x2e, 0xd1, 0xaa, 0x09, 0xbb, 0x39, 0x70, 0x7c, 0x83, 0xd6, 0x92, 0x63, + 0xfa, 0xcf, 0xee, 0xe1, 0x69, 0xf6, 0x6b, 0xa6, 0x63, 0xef, 0x79, 0xfd, 0x35, 0xfc, 0x5a, 0x95, + 0xa0, 0x8d, 0xa8, 0xe3, 0x93, 0xe5, 0x7e, 0xb0, 0xda, 0x3e, 0x57, 0xa4, 0x4b, 0x89, 0x65, 0xa3, + 0x3c, 0xd1, 0x8d, 0x72, 0x65, 0x96, 0x7b, 0xd6, 0x1d, 0x51, 0xfb, 0xcf, 0xc5, 0x92, 0x14, 0x88, + 0xea, 0x17, 0x7c, 0x00, 0xbf, 0xb1, 0x81, 0xdf, 0xd8, 0x3c, 0xe2, 0xfe, 0xef, 0x83, 0x79, 0xc2, + 0xf3, 0x1b, 0x4f, 0x66, 0x88, 0xdf, 0x46, 0xc6, 0x7c, 0xd3, 0x32, 0xe6, 0x75, 0xab, 0x16, 0xaa, + 0x75, 0xb4, 0x0b, 0x09, 0xab, 0xfa, 0xe6, 0x6a, 0xc0, 0xfe, 0x71, 0xca, 0x6f, 0x5c, 0xb4, 0x14, + 0x71, 0xfd, 0x56, 0x0c, 0x8a, 0xf0, 0xc8, 0xba, 0xb5, 0xdb, 0x72, 0xdf, 0x93, 0xb3, 0x03, 0xfc, + 0x52, 0xf2, 0x01, 0x17, 0x27, 0xb0, 0x76, 0x2d, 0xdf, 0x7a, 0x73, 0xbf, 0x07, 0xcc, 0x4f, 0x19, + 0x49, 0xed, 0xfd, 0x38, 0x63, 0xf0, 0x5a, 0x0e, 0xcf, 0x59, 0xa3, 0xcf, 0x7c, 0x20, 0x8b, 0xb5, + 0xf5, 0xd9, 0xb2, 0x4c, 0xbb, 0x91, 0xad, 0x7a, 0xcf, 0x9f, 0x5f, 0x36, 0x94, 0xfc, 0x40, 0x1a, + 0xf7, 0x17, 0xb4, 0x5b, 0x12, 0x62, 0x85, 0xfc, 0xad, 0x50, 0x71, 0xfc, 0x95, 0xb4, 0x1b, 0xfa, + 0xa0, 0x67, 0xc3, 0x40, 0xd6, 0x46, 0xbd, 0xe7, 0xcf, 0x0f, 0x1d, 0x4a, 0xe5, 0x81, 0x94, 0x75, + 0xd1, 0xf0, 0xab, 0xa4, 0x4b, 0x16, 0xc5, 0xe2, 0x28, 0xbf, 0x5b, 0x09, 0xed, 0x57, 0x69, 0x9f, + 0x8d, 0xfa, 0xcb, 0x17, 0x95, 0x06, 0xd7, 0xec, 0x0a, 0x2f, 0xaf, 0xf0, 0x7b, 0x38, 0x7b, 0xfa, + 0x57, 0x7a, 0xfd, 0x15, 0x41, 0xd9, 0x56, 0xde, 0x56, 0xc3, 0xef, 0x21, 0xec, 0xba, 0x3e, 0xaa, + 0x6e, 0x9f, 0xe1, 0xf7, 0x64, 0x78, 0xef, 0xa7, 0x10, 0xca, 0x6f, 0xef, 0x25, 0x6b, 0xcb, 0x46, + 0x25, 0x1f, 0xd6, 0xcc, 0xb3, 0x05, 0xe6, 0xb7, 0x6f, 0xff, 0x79, 0x33, 0x71, 0xfd, 0x1e, 0xca, + 0x81, 0xc6, 0xb6, 0x01, 0xbf, 0x3d, 0xb8, 0xac, 0x5e, 0xf8, 0xed, 0xc0, 0xfe, 0xf1, 0xe4, 0xf1, + 0xc0, 0x6f, 0x6c, 0xe0, 0x37, 0x36, 0x25, 0xbf, 0xff, 0x69, 0x64, 0x57, 0xa1, 0xec, 0x21, 0x44, + 0xba, 0xb6, 0x63, 0xab, 0x58, 0x75, 0xaf, 0x8f, 0x86, 0xef, 0xdf, 0xda, 0xc8, 0xb7, 0x26, 0x7a, + 0x7c, 0xc1, 0x6f, 0xab, 0xde, 0x7d, 0x82, 0x8d, 0xab, 0x44, 0xf5, 0x0a, 0xb4, 0x07, 0x5b, 0xaf, + 0x4a, 0xcf, 0xf3, 0x6b, 0xeb, 0x35, 0x04, 0xfb, 0x7e, 0xdb, 0xf5, 0xee, 0x12, 0x5c, 0xe7, 0xb7, + 0x1f, 0xb7, 0xf1, 0xeb, 0xe9, 0xd5, 0x05, 0xdf, 0xd0, 0xaf, 0x18, 0x70, 0x98, 0xe8, 0xb8, 0x01, + 0x5f, 0x24, 0xef, 0x15, 0xfb, 0x5b, 0x96, 0x9d, 0xdc, 0xca, 0xf1, 0xf3, 0x86, 0x61, 0xd1, 0xed, + 0x3c, 0xc5, 0xaf, 0x8c, 0xb2, 0x17, 0xb5, 0xbb, 0x7a, 0x5b, 0xee, 0x2f, 0x64, 0x83, 0x5a, 0x66, + 0x3c, 0x75, 0x3b, 0xaa, 0x0a, 0x0f, 0xf1, 0xbb, 0xbf, 0x38, 0xfb, 0xfd, 0x92, 0xfb, 0xb1, 0xf2, + 0x3e, 0xab, 0x18, 0x78, 0x2c, 0xfa, 0xad, 0xda, 0x9f, 0xf6, 0x59, 0x55, 0x2b, 0xe3, 0x95, 0xa0, + 0x4d, 0x5d, 0xb5, 0x6d, 0x98, 0x1a, 0xef, 0xe6, 0x37, 0xbd, 0x66, 0xab, 0x2b, 0xfd, 0x1a, 0x77, + 0xf5, 0x4a, 0xf5, 0x77, 0xa6, 0x3f, 0x2d, 0x9e, 0x9d, 0x1a, 0xaf, 0xfb, 0xdd, 0xf0, 0x5d, 0x37, + 0x01, 0xbf, 0x32, 0xed, 0x86, 0xfa, 0x2b, 0x55, 0x89, 0xaa, 0x5b, 0xd5, 0x3e, 0x7f, 0xac, 0x3a, + 0xa4, 0xfe, 0xb2, 0xdd, 0x3c, 0xd2, 0xef, 0xc6, 0xf6, 0xd9, 0xf6, 0x7b, 0xad, 0xf3, 0x2f, 0xd9, + 0xf7, 0xa4, 0x6f, 0x20, 0xd4, 0xf9, 0x55, 0xaf, 0xff, 0xb3, 0x35, 0x59, 0xc4, 0x11, 0x7e, 0x69, + 0xd9, 0xd4, 0xfe, 0x73, 0xdd, 0x0e, 0x95, 0x3c, 0xbc, 0xfe, 0xb3, 0x88, 0xca, 0x76, 0x39, 0x48, + 0xf0, 0x38, 0xbf, 0xb3, 0x7d, 0xbc, 0xcd, 0xcf, 0xad, 0xd5, 0xbf, 0x1e, 0xbd, 0x6e, 0xf5, 0xcb, + 0xf4, 0x2a, 0x0c, 0xf5, 0x5b, 0xf4, 0x79, 0x8a, 0x5f, 0xfb, 0x84, 0xd9, 0x25, 0xe7, 0x6b, 0x71, + 0x88, 0x5f, 0xde, 0xc1, 0xa4, 0xed, 0x92, 0x6c, 0xb1, 0x0e, 0xa9, 0xbf, 0xec, 0x02, 0xaa, 0x67, + 0xd7, 0xe6, 0xa1, 0x7e, 0x0b, 0xdd, 0x10, 0xba, 0x78, 0x58, 0xfb, 0xfc, 0x14, 0xe0, 0xf7, 0x0c, + 0x8e, 0xab, 0xe8, 0x42, 0xe3, 0x20, 0xbf, 0xbc, 0x6f, 0x6a, 0x7f, 0xde, 0xef, 0x37, 0x3f, 0x62, + 0xeb, 0xb8, 0xc4, 0x80, 0x9e, 0x94, 0x9a, 0x91, 0xd1, 0x87, 0xb7, 0xd3, 0xab, 0xd7, 0x18, 0x95, + 0xbb, 0xaa, 0xfd, 0x26, 0x52, 0xe3, 0x9a, 0xb0, 0x77, 0xfd, 0x9d, 0x6b, 0x3e, 0xf7, 0xf4, 0xab, + 0xac, 0xbd, 0x8a, 0x5f, 0xfd, 0xe0, 0x6c, 0xd8, 0x55, 0xfd, 0x37, 0x19, 0x5a, 0x7f, 0xe9, 0xe5, + 0xe7, 0xe0, 0xf6, 0xb9, 0xf1, 0x30, 0xf4, 0xd8, 0xdb, 0x0d, 0xfc, 0x0e, 0x1a, 0xdf, 0xb0, 0xfa, + 0xcf, 0xcb, 0x0e, 0x3b, 0xf4, 0x9f, 0xdd, 0xc3, 0x20, 0x86, 0x2e, 0x4a, 0xe3, 0x1b, 0xdb, 0x1a, + 0x4d, 0x7e, 0x31, 0x20, 0x2f, 0x09, 0xb4, 0x5c, 0xe9, 0xcf, 0x9e, 0xae, 0x61, 0x67, 0x2b, 0xd6, + 0xc3, 0xcf, 0x7a, 0xfb, 0xf2, 0xba, 0xc3, 0x64, 0x94, 0xdf, 0x9d, 0x0c, 0xf3, 0x4b, 0x3e, 0xea, + 0x2d, 0xc7, 0xba, 0x28, 0x0f, 0x59, 0x7e, 0x1a, 0xcf, 0xd5, 0xc8, 0x7c, 0xb2, 0xdc, 0xe8, 0xcf, + 0x6b, 0xa6, 0xba, 0xe8, 0x9a, 0xf4, 0xba, 0xfc, 0x2b, 0x97, 0xb6, 0x54, 0x93, 0xe3, 0xf9, 0xe5, + 0x3f, 0x78, 0xb6, 0xb1, 0xd2, 0xef, 0x96, 0xbd, 0x95, 0xfd, 0xca, 0x04, 0xb2, 0xf2, 0xaf, 0xeb, + 0xc4, 0x62, 0xa5, 0xdf, 0x02, 0xf1, 0xfc, 0x2a, 0x6b, 0xeb, 0xfc, 0x4e, 0x4b, 0x0b, 0x2b, 0xf3, + 0x28, 0xd4, 0x5f, 0x79, 0x31, 0xa0, 0xe6, 0x96, 0xff, 0xe8, 0x58, 0x56, 0xbb, 0xfc, 0xa2, 0x7d, + 0xde, 0x5a, 0x7f, 0xed, 0x9c, 0xcc, 0xbd, 0xd1, 0x86, 0x43, 0xbe, 0x8a, 0xdc, 0xd4, 0x4d, 0xe9, + 0x14, 0x42, 0x0a, 0x59, 0xe9, 0xb7, 0xa2, 0xb8, 0xf0, 0x7b, 0x5c, 0xfb, 0xdc, 0xdb, 0x6f, 0x4d, + 0x23, 0x1d, 0xe4, 0xfe, 0xef, 0xac, 0x34, 0xa2, 0xb3, 0xe1, 0x77, 0x2e, 0xf5, 0x9f, 0xb7, 0xed, + 0x8d, 0xe5, 0x40, 0x5f, 0x59, 0x6e, 0x24, 0x5c, 0xe4, 0xc2, 0x8b, 0xaa, 0xf8, 0xed, 0xd8, 0x7f, + 0xae, 0xd9, 0x50, 0xe1, 0xb7, 0x11, 0xbf, 0xc4, 0x7d, 0x50, 0x5b, 0xd8, 0x83, 0x77, 0x5c, 0xb5, + 0xbe, 0x91, 0x6f, 0x5d, 0xb4, 0x14, 0xb7, 0xf7, 0xab, 0xb7, 0x78, 0x27, 0x33, 0xaa, 0x10, 0x0f, + 0xf4, 0x3b, 0xab, 0x2d, 0xde, 0xa9, 0x8c, 0x2b, 0x44, 0x6f, 0xbf, 0x27, 0xcd, 0x4f, 0x01, 0x16, + 0x5b, 0xf5, 0x5e, 0x73, 0x7e, 0x19, 0x30, 0xd9, 0xa8, 0x17, 0xf3, 0x43, 0x83, 0x03, 0xbf, 0xb1, + 0x81, 0xdf, 0xd8, 0xc0, 0x6f, 0x6c, 0xe0, 0x37, 0x36, 0xf0, 0x1b, 0x1b, 0xf8, 0x8d, 0x0d, 0xfc, + 0xc6, 0x06, 0x7e, 0x63, 0x03, 0xbf, 0xb1, 0x29, 0xf9, 0xfd, 0xa3, 0x91, 0xb3, 0xbe, 0x57, 0x54, + 0xbe, 0x33, 0xd1, 0xe3, 0x0b, 0x7e, 0x5b, 0xf5, 0x42, 0x70, 0x5f, 0x6c, 0xbd, 0x86, 0x60, 0xdf, + 0x6f, 0xbb, 0x5e, 0x08, 0xee, 0x89, 0xa7, 0x57, 0x17, 0x0c, 0xbf, 0x77, 0x02, 0x7e, 0x63, 0x33, + 0xc4, 0xef, 0xfe, 0xe2, 0xc0, 0x6f, 0x67, 0x4c, 0x8d, 0xf0, 0x1b, 0x02, 0xa6, 0x91, 0x3e, 0x06, + 0x04, 0xbf, 0x21, 0x18, 0xe7, 0x57, 0x7b, 0x1e, 0xb9, 0x08, 0xfc, 0x76, 0x66, 0x98, 0xdf, 0xec, + 0x69, 0xee, 0x2a, 0xe0, 0xb7, 0x33, 0xf0, 0x1b, 0x9b, 0xc1, 0x7e, 0xd7, 0x7c, 0xe5, 0x2c, 0x10, + 0x7d, 0x09, 0x7e, 0x7b, 0x33, 0xf6, 0xfc, 0xbb, 0xe6, 0x5b, 0xf7, 0x02, 0xbf, 0xdd, 0x19, 0xda, + 0x7f, 0x66, 0xb3, 0xa1, 0xc4, 0x94, 0x46, 0xfd, 0x23, 0xfc, 0x76, 0x66, 0xf0, 0xf5, 0x91, 0x32, + 0xb1, 0x31, 0x9b, 0xa6, 0x47, 0x67, 0xfe, 0xc1, 0x6f, 0x67, 0x0e, 0xe9, 0x5f, 0x39, 0x0d, 0x32, + 0x5b, 0x82, 0xdf, 0xee, 0x9c, 0xeb, 0x17, 0xe7, 0xdf, 0xd1, 0x1c, 0x32, 0xbe, 0xa1, 0x2e, 0xa2, + 0xff, 0x7c, 0x04, 0x87, 0x8c, 0x4f, 0xd6, 0x5f, 0x05, 0xc3, 0x6f, 0x67, 0xe0, 0x37, 0x36, 0xf0, + 0x1b, 0x1b, 0xdc, 0x3f, 0x8a, 0x0d, 0xfc, 0xc6, 0x06, 0x7e, 0x63, 0x03, 0xbf, 0xb1, 0x19, 0xe2, + 0xb7, 0x91, 0x81, 0x5f, 0xf7, 0x71, 0x7c, 0xe7, 0xa2, 0xa5, 0x80, 0xdf, 0x3b, 0x01, 0xbf, 0xb1, + 0xe9, 0xed, 0x17, 0xf3, 0x53, 0x2e, 0xc6, 0x56, 0xbd, 0x98, 0x5f, 0x76, 0x33, 0x36, 0xea, 0xc5, + 0xfc, 0xd0, 0xe0, 0xc0, 0x6f, 0x6c, 0xe0, 0x37, 0x36, 0xf0, 0x1b, 0x1b, 0xf8, 0x8d, 0x0d, 0xfc, + 0xc6, 0x06, 0x7e, 0x63, 0x03, 0xbf, 0xb1, 0x81, 0xdf, 0xd8, 0xc0, 0x6f, 0x6c, 0x4a, 0x7e, 0x7f, + 0x37, 0xe1, 0xf9, 0xfc, 0x66, 0xc2, 0xe3, 0x7e, 0x35, 0xe1, 0x71, 0xbf, 0x98, 0xf0, 0xb8, 0x9f, + 0x4d, 0x78, 0xdc, 0x4f, 0x26, 0x3c, 0xee, 0x47, 0x13, 0x1e, 0xf7, 0x83, 0x09, 0x8f, 0xfb, 0xde, + 0x84, 0xc7, 0xfd, 0xdb, 0x84, 0xc7, 0xfd, 0xcb, 0x64, 0x56, 0x29, 0xf8, 0xb5, 0xf5, 0x72, 0xc1, + 0xb6, 0x5e, 0x2e, 0xd8, 0xd6, 0xcb, 0x05, 0xdb, 0x7a, 0xb9, 0x60, 0x5b, 0x2f, 0x17, 0x6c, 0xeb, + 0xe5, 0x82, 0x6d, 0xbd, 0x5c, 0xb0, 0xad, 0x97, 0x0b, 0xb6, 0xf5, 0x72, 0xc1, 0xb6, 0x5e, 0x2e, + 0xd8, 0xd6, 0x6b, 0x08, 0xf6, 0xfd, 0x7a, 0x7a, 0xa9, 0x60, 0x4f, 0x2f, 0x15, 0xec, 0xe9, 0xa5, + 0x82, 0x3d, 0xbd, 0x54, 0xb0, 0xa7, 0x97, 0x0a, 0xf6, 0xf4, 0x52, 0xc1, 0x9e, 0x5e, 0x2a, 0xd8, + 0xd3, 0x4b, 0x05, 0x7b, 0x7a, 0xa9, 0x60, 0x4f, 0x2f, 0x15, 0xec, 0xe9, 0xd5, 0x05, 0xc3, 0x2f, + 0xfc, 0xc2, 0x6f, 0x68, 0xbf, 0x5a, 0x32, 0xcd, 0xaf, 0x16, 0xa7, 0xf9, 0xd5, 0xe2, 0x34, 0xbf, + 0x5a, 0x9c, 0xe6, 0x57, 0x8b, 0xd3, 0xfc, 0x6a, 0x71, 0x9a, 0x5f, 0x2d, 0x4e, 0xf3, 0xab, 0xc5, + 0x69, 0x7e, 0xb5, 0x38, 0xcd, 0xaf, 0x16, 0xa7, 0xf9, 0xd5, 0xe2, 0xe0, 0x17, 0x7e, 0xe1, 0x97, + 0x69, 0x64, 0x7f, 0x10, 0xca, 0xf6, 0xcb, 0xff, 0x6a, 0x54, 0xc1, 0xef, 0x1a, 0x0c, 0xbf, 0x67, + 0xfb, 0x7d, 0x53, 0x91, 0xdc, 0x39, 0xf5, 0x97, 0x09, 0xf6, 0xfd, 0xa6, 0x50, 0xcf, 0x2f, 0xfd, + 0x53, 0x63, 0xf0, 0x3b, 0xc8, 0x2f, 0xfd, 0xdf, 0x9d, 0x67, 0xbf, 0x7d, 0xa6, 0x82, 0x5d, 0xbf, + 0x24, 0x10, 0x7e, 0x87, 0xf8, 0xcd, 0xfe, 0x8f, 0xed, 0x1e, 0x7e, 0xa9, 0x37, 0xcf, 0x2f, 0xfd, + 0x1d, 0xb8, 0xed, 0xf3, 0x7b, 0xcb, 0xa1, 0x6d, 0x10, 0x1a, 0x49, 0x86, 0xf0, 0xfb, 0x97, 0xc6, + 0x69, 0xe5, 0x6d, 0xdd, 0xd4, 0xcd, 0x2f, 0x39, 0xd0, 0x8e, 0x5f, 0xd6, 0x8e, 0xfb, 0xf5, 0x37, + 0x4d, 0xc1, 0x85, 0xdf, 0x6d, 0x7e, 0xdf, 0x3e, 0x50, 0xcd, 0x7e, 0xff, 0xb9, 0xea, 0xfc, 0xcb, + 0x02, 0x6d, 0xbf, 0xbc, 0x1f, 0x86, 0xfe, 0xd5, 0x10, 0xbf, 0xaf, 0x8f, 0xa9, 0x12, 0xbb, 0x7e, + 0xab, 0xfa, 0xcf, 0x3c, 0xd4, 0xf4, 0x2b, 0xfe, 0x38, 0x2b, 0xfc, 0x9e, 0xdd, 0x7f, 0x9e, 0x37, + 0xf9, 0x5d, 0x62, 0x2d, 0xbf, 0xf2, 0x6f, 0xef, 0xc2, 0xef, 0xf9, 0x7e, 0xa9, 0x13, 0xf8, 0x7d, + 0xb6, 0x5f, 0xb4, 0xcf, 0xef, 0x44, 0xf5, 0x8b, 0xfe, 0xd5, 0x07, 0xb7, 0xf2, 0x4b, 0x39, 0xf2, + 0xfa, 0x88, 0x82, 0xeb, 0xa3, 0x0b, 0xf8, 0xed, 0x3d, 0xbe, 0x31, 0x9b, 0x1b, 0xe0, 0x57, 0xdf, + 0x30, 0xb4, 0x7d, 0xee, 0x3d, 0x3e, 0x49, 0x41, 0xfb, 0x7c, 0xba, 0xdf, 0xee, 0xf7, 0x17, 0x28, + 0xf0, 0x7b, 0x76, 0xfb, 0x8c, 0xfb, 0x83, 0xb1, 0xfd, 0x72, 0x70, 0x7f, 0x1f, 0x7e, 0x95, 0x0d, + 0xa7, 0xfa, 0x35, 0x49, 0x71, 0xbf, 0xb9, 0xa4, 0xb8, 0x5f, 0x5d, 0x52, 0xdc, 0x2f, 0x2e, 0x29, + 0xee, 0x67, 0x97, 0x14, 0xf7, 0x93, 0x4b, 0x8a, 0xfb, 0xd1, 0x25, 0xc5, 0xfd, 0xe0, 0x92, 0xe2, + 0xbe, 0x77, 0x11, 0x1a, 0x4d, 0x84, 0x46, 0x13, 0xf8, 0x85, 0x5f, 0xf8, 0x7d, 0x92, 0x5f, 0xcc, + 0x4f, 0x51, 0xf5, 0x86, 0x99, 0x9f, 0x82, 0xf9, 0x65, 0xba, 0xde, 0x30, 0xf3, 0xcb, 0xc0, 0xcd, + 0x81, 0xdf, 0xd8, 0xc0, 0x6f, 0x6c, 0x34, 0xbf, 0x10, 0x1c, 0x06, 0x55, 0x2f, 0xfc, 0x86, 0x41, + 0xf7, 0x0b, 0xc1, 0x41, 0x30, 0xf4, 0xc2, 0x6f, 0x10, 0x2c, 0xbf, 0x10, 0x1c, 0x02, 0x53, 0x2f, + 0x0c, 0x07, 0xc0, 0xb3, 0x0b, 0xc3, 0x77, 0xa7, 0x64, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0xc2, 0xff, 0x01, 0x7c, 0x20, 0xed, 0x46 +}; + +#endif diff --git a/backends/platform/psp/osys_psp.cpp b/backends/platform/psp/osys_psp.cpp new file mode 100644 index 0000000000..9bac3f28c6 --- /dev/null +++ b/backends/platform/psp/osys_psp.cpp @@ -0,0 +1,613 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2005-2006 The ScummVM project + * Copyright (C) 2005 Joost Peters PSP Backend + * Copyright (C) 2005 Thomas Mayer PSP Backend + * Copyright (C) 2005 Paolo Costabel PSP Backend + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "common/stdafx.h" +#include "common/scummsys.h" + +#include "common/rect.h" +#include "backends/psp/osys_psp.h" + +#include "common/config-manager.h" + +#include + +#include "./trace.h" + +#define SCREEN_WIDTH 480 +#define SCREEN_HEIGHT 272 + + +unsigned short *DrawBuffer = (unsigned short *)0x44044000; +unsigned short *DisplayBuffer = (unsigned short *)0x44000000; + +unsigned long RGBToColour(unsigned long r, unsigned long g, unsigned long b) { + return (((b >> 3) << 10) | ((g >> 3) << 5) | ((r >> 3) << 0)) | 0x8000; +} + +void putPixel(uint16 x, uint16 y, unsigned long colour) { + *(unsigned short *)(DrawBuffer + (y << 9) + x ) = colour; +} + +const OSystem::GraphicsMode OSystem_PSP::s_supportedGraphicsModes[] = { + { "320x200 (centered)", "320x200 16-bit centered", CENTERED_320X200 }, + { "353x272 (best-fit, centered)", "353x272 16-bit centered", CENTERED_435X272 }, + { "480x272 (full screen)", "480x272 16-bit stretched", STRETCHED_480X272 }, + { "362x272 (4:3, centered)", "362x272 16-bit centered", CENTERED_362X272 }, + {0, 0, 0} +}; + + +OSystem_PSP::OSystem_PSP() : _screenWidth(0), _screenHeight(0), _overlayWidth(0), _overlayHeight(0), _offscreen(0), _overlayBuffer(0), _overlayVisible(false), _shakePos(0), _mouseBuf(0), _prevButtons(0), _lastPadCheck(0), _padAccel(0) { + + memset(_palette, 0, sizeof(_palette)); + + _samplesPerSec = 0; + + //init SDL + uint32 sdlFlags = SDL_INIT_AUDIO | SDL_INIT_TIMER; + SDL_Init(sdlFlags); + + sceDisplaySetMode(0, SCREEN_WIDTH, SCREEN_HEIGHT); + sceDisplaySetFrameBuf((char *)DisplayBuffer, 512, 1, 1); + sceDisplayWaitVblankStart(); +} + +OSystem_PSP::~OSystem_PSP() { + if (_offscreen) free(_offscreen); + if (_overlayBuffer) free(_overlayBuffer); + if (_mouseBuf) free(_mouseBuf); +} + +bool OSystem_PSP::hasFeature(Feature f) { + return false; +} + +void OSystem_PSP::setFeatureState(Feature f, bool enable) { +} + +bool OSystem_PSP::getFeatureState(Feature f) { + return false; +} + +const OSystem::GraphicsMode* OSystem_PSP::getSupportedGraphicsModes() const { + return s_supportedGraphicsModes; +} + + +int OSystem_PSP::getDefaultGraphicsMode() const { + return -1; +} + +bool OSystem_PSP::setGraphicsMode(int mode) { + return true; +} + +bool OSystem_PSP::setGraphicsMode(const char *name) { + return true; +} + +int OSystem_PSP::getGraphicsMode() const { + return -1; +} + +void OSystem_PSP::initSize(uint width, uint height) { + _overlayWidth = _screenWidth = width; + _overlayHeight = _screenHeight = height; + + if (_offscreen) + free(_offscreen); + + _offscreen = (byte *)malloc(width * height); + + if (_overlayBuffer) + free(_overlayBuffer); + + _overlayBuffer = (OverlayColor *)malloc(_overlayWidth * _overlayHeight * sizeof(OverlayColor)); + bzero(_offscreen, width * height); + clearOverlay(); + + _mouseVisible = false; +} + +int16 OSystem_PSP::getWidth() { + return _screenWidth; +} + +int16 OSystem_PSP::getHeight() { + return _screenHeight; +} + +void OSystem_PSP::setPalette(const byte *colors, uint start, uint num) { + const byte *b = colors; + + for (uint i = 0; i < num; ++i) { + _palette[start + i] = RGBToColour(b[0], b[1], b[2]); + b += 4; + } +} + +void OSystem_PSP::copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h) { + //Clip the coordinates + if (x < 0) { + w += x; + buf -= x; + x = 0; + } + + if (y < 0) { + h += y; + buf -= y * pitch; + y = 0; + } + + if (w > _screenWidth - x) { + w = _screenWidth - x; + } + + if (h > _screenHeight - y) { + h = _screenHeight - y; + } + + if (w <= 0 || h <= 0) + return; + + + byte *dst = _offscreen + y * _screenWidth + x; + if (_screenWidth == pitch && pitch == w) { + memcpy(dst, buf, h * w); + } else { + do { + memcpy(dst, buf, w); + buf += pitch; + dst += _screenWidth; + } while (--h); + } +} + +void OSystem_PSP::updateScreen() { + unsigned short *temp; + + uint xStart = (SCREEN_WIDTH >> 1) - (_screenWidth >> 1); + uint yStart = (SCREEN_HEIGHT >> 1) - (_screenHeight >> 1); + + for (int i = 0; i < _screenHeight; ++i) { + for (int j = 0; j < _screenWidth; ++j) { + putPixel(xStart + j, yStart + i, _palette[_offscreen[i * _screenWidth +j]]); + } + } + + if(_overlayVisible) { + for (int i = 0; i < _screenHeight; ++i) { + for (int j = 0; j < _screenWidth; ++j) { + + OverlayColor pixel = _overlayBuffer[(i * _overlayWidth +j)]; + + if(pixel & 0x8000) + putPixel(xStart + j, yStart + i, pixel); + } + } + } + + //draw mouse on top + if (_mouseVisible) { + for (int y = 0; y < _mouseHeight; ++y) { + for (int x = 0; x < _mouseWidth; ++x) { + if (_mouseBuf[y * _mouseHeight + x] != _mouseKeyColour) { + int my = _mouseY + y; // + _mouseHotspotY; + int mx = _mouseX + x; // + _mouseHotspotX; + + if (mx >= 0 && mx < _screenWidth && my >= 0 && my < _screenHeight) + putPixel(xStart + mx, yStart + my, _palette[_mouseBuf[y * _mouseHeight + x]]); + } + } + } + } + + + // switch buffers + temp = DrawBuffer; + DrawBuffer = DisplayBuffer; + DisplayBuffer = temp; + sceDisplayWaitVblankStart(); + sceDisplaySetFrameBuf((char *)DisplayBuffer, 512, 1, 1); + +} + +void OSystem_PSP::setShakePos(int shakeOffset) { + _shakePos = shakeOffset; +} + +void OSystem_PSP::showOverlay() { + _overlayVisible = true; +} + +void OSystem_PSP::hideOverlay() { + PSPDebugTrace("OSystem_PSP::hideOverlay called\n"); + _overlayVisible = false; +} + +void OSystem_PSP::clearOverlay() { + PSPDebugTrace("clearOverlay\n"); + bzero(_overlayBuffer, _overlayWidth * _overlayHeight * sizeof(OverlayColor)); +} + +void OSystem_PSP::grabOverlay(OverlayColor *buf, int pitch) { + int h = _overlayHeight; + OverlayColor *src = _overlayBuffer; + + do { + memcpy(buf, src, _overlayWidth * sizeof(OverlayColor)); + src += _overlayWidth; + buf += pitch; + } while (--h); +} + +void OSystem_PSP::copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h) { + PSPDebugTrace("copyRectToOverlay\n"); + + //Clip the coordinates + if (x < 0) { + w += x; + buf -= x; + x = 0; + } + + if (y < 0) { + h += y; + buf -= y * pitch; + y = 0; + } + + if (w > _overlayWidth - x) { + w = _overlayWidth - x; + } + + if (h > _overlayHeight - y) { + h = _overlayHeight - y; + } + + if (w <= 0 || h <= 0) + return; + + + OverlayColor *dst = _overlayBuffer + (y * _overlayWidth + x); + if (_overlayWidth == pitch && pitch == w) { + memcpy(dst, buf, h * w * sizeof(OverlayColor)); + } else { + do { + memcpy(dst, buf, w * sizeof(OverlayColor)); + buf += pitch; + dst += _overlayWidth; + } while (--h); + } +} + +int16 OSystem_PSP::getOverlayWidth() { + return _overlayWidth; +} + +int16 OSystem_PSP::getOverlayHeight() { + return _overlayHeight; +} + +OverlayColor OSystem_PSP::RGBToColor(uint8 r, uint8 g, uint8 b) { + return (((r >> 3) & 0x1F) | (((g >> 3) & 0x1F) << 5) | (((b >> 3) & 0x1F) << 10 ) ) | 0x8000; +} + +void OSystem_PSP::colorToRGB(OverlayColor color, uint8 &r, uint8 &g, uint8 &b) { + r = ((color & 0x1F) << 3); + g = (((color >> 5) & 0x1F) << 3); + b = (((color >> 10) & 0x1F) << 3); +} + +OverlayColor OSystem_PSP::ARGBToColor(uint8 a, uint8 r, uint8 g, uint8 b) { + OverlayColor color = RGBToColor(r, g, b); + + if(a == 255) + color |= 0x8000; + + return color; +} + +void OSystem_PSP::colorToARGB(OverlayColor color, uint8 &a, uint8 &r, uint8 &g, uint8 &b) { + colorToRGB(color, r, g, b); + if(color & 0x8000) + a = 255; + else + a = 0; +} + +void OSystem_PSP::grabPalette(byte *colors, uint start, uint num) { + uint i; + uint16 color; + + for (i = start; i < start + num; i++) { + color = _palette[i]; + *colors++ = ((color & 0x1F) << 3); + *colors++ = (((color >> 5) & 0x1F) << 3); + *colors++ = (((color >> 10) & 0x1F) << 3); + *colors++ = (color & 0x8000 ? 255 : 0); + } +} + +bool OSystem_PSP::showMouse(bool visible) { + bool last = _mouseVisible; + _mouseVisible = visible; + return last; +} + +void OSystem_PSP::warpMouse(int x, int y) { + //assert(x > 0 && x < _screenWidth); + //assert(y > 0 && y < _screenHeight); + _mouseX = x; + _mouseY = y; +} + +void OSystem_PSP::setMouseCursor(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, byte keycolor, int cursorTargetScale) { + //TODO: handle cursorTargetScale + _mouseWidth = w; + _mouseHeight = h; + + _mouseHotspotX = hotspotX; + _mouseHotspotY = hotspotY; + + _mouseKeyColour = keycolor; + + if (_mouseBuf) + free(_mouseBuf); + + _mouseBuf = (byte *)malloc(w * h); + memcpy(_mouseBuf, buf, w * h); +} + +#define PAD_CHECK_TIME 40 +#define PAD_DIR_MASK (PSP_CTRL_UP | PSP_CTRL_DOWN | PSP_CTRL_LEFT | PSP_CTRL_RIGHT) + +bool OSystem_PSP::pollEvent(Event &event) { + s8 analogStepAmountX = 0; + s8 analogStepAmountY = 0; +/* + SceCtrlData pad; + + sceCtrlSetSamplingCycle(0); + sceCtrlSetSamplingMode(1); + sceCtrlReadBufferPositive(&pad, 1); +*/ + uint32 buttonsChanged = pad.Buttons ^ _prevButtons; + + if (buttonsChanged & (PSP_CTRL_CROSS | PSP_CTRL_CIRCLE | PSP_CTRL_LTRIGGER | PSP_CTRL_RTRIGGER | PSP_CTRL_START | PSP_CTRL_SELECT | PSP_CTRL_SQUARE)) { + if (buttonsChanged & PSP_CTRL_CROSS) { + event.type = (pad.Buttons & PSP_CTRL_CROSS) ? OSystem::EVENT_LBUTTONDOWN : OSystem::EVENT_LBUTTONUP; + } + else if (buttonsChanged & PSP_CTRL_CIRCLE) { + event.type = (pad.Buttons & PSP_CTRL_CIRCLE) ? OSystem::EVENT_RBUTTONDOWN : OSystem::EVENT_RBUTTONUP; + } + else { + //any of the other buttons. + event.type = buttonsChanged & pad.Buttons ? OSystem::EVENT_KEYDOWN : OSystem::EVENT_KEYUP; + event.kbd.flags = 0; + + if (buttonsChanged & PSP_CTRL_LTRIGGER) { + event.kbd.keycode = SDLK_ESCAPE; + event.kbd.ascii = 27; + } else if (buttonsChanged & PSP_CTRL_RTRIGGER) { + event.kbd.keycode = SDLK_RETURN; + event.kbd.ascii = 13; + } else if (buttonsChanged & PSP_CTRL_START) { + event.kbd.keycode = SDLK_F5; + event.kbd.ascii = 319; +/* } else if (buttonsChanged & PSP_CTRL_SELECT) { + event.kbd.keycode = SDLK_0; + event.kbd.ascii = '0'; +*/ } else if (buttonsChanged & PSP_CTRL_SQUARE) { + event.kbd.keycode = SDLK_PERIOD; + event.kbd.ascii = '.'; + } + + } + + event.mouse.x = _mouseX; + event.mouse.y = _mouseY; + _prevButtons = pad.Buttons; + return true; + } + + uint32 time = getMillis(); + if (time - _lastPadCheck > PAD_CHECK_TIME) { + _lastPadCheck = time; + int16 newX = _mouseX; + int16 newY = _mouseY; + + if (pad.Lx < 100) { + analogStepAmountX = pad.Lx - 100; + } + else if (pad.Lx > 155) { + analogStepAmountX = pad.Lx - 155; + } + + if (pad.Ly < 100) { + analogStepAmountY = pad.Ly - 100; + } + else if (pad.Ly > 155) { + analogStepAmountY = pad.Ly - 155; + } + + if (pad.Buttons & PAD_DIR_MASK || + analogStepAmountX != 0 || analogStepAmountY != 0) { + if (_prevButtons & PAD_DIR_MASK) { + if (_padAccel < 16) _padAccel++; + } else _padAccel = 0; + + _prevButtons = pad.Buttons; + + if (pad.Buttons & PSP_CTRL_LEFT) + newX -= _padAccel >> 2; + if (pad.Buttons & PSP_CTRL_RIGHT) + newX += _padAccel >> 2; + if (pad.Buttons & PSP_CTRL_UP) + newY -= _padAccel >> 2; + if (pad.Buttons & PSP_CTRL_DOWN) + newY += _padAccel >> 2; + + // If no movement then this has no effect + if (pad.Buttons & PSP_CTRL_TRIANGLE) { + // Fine control mode for analog + if (analogStepAmountX != 0) + if (analogStepAmountX > 0) + newX += analogStepAmountX - (analogStepAmountX - 1); + else + newX -= -analogStepAmountX - (-analogStepAmountX - 1); + + if (analogStepAmountY != 0) + if (analogStepAmountY > 0) + newY += analogStepAmountY - (analogStepAmountY - 1); + else + newY -= -analogStepAmountY - (-analogStepAmountY - 1); + } + else { + newX += analogStepAmountX >> ((_screenWidth == 640) ? 2 : 3); + newY += analogStepAmountY >> ((_screenWidth == 640) ? 2 : 3); + } + + if (newX < 0) newX = 0; + if (newY < 0) newY = 0; + if(_overlayVisible) + { + if (newX >= _overlayWidth) newX = _overlayWidth - 1; + if (newY >= _overlayHeight) newY = _overlayHeight - 1; + } + else + { + if (newX >= _screenWidth) newX = _screenWidth - 1; + if (newY >= _screenHeight) newY = _screenHeight - 1; + } + + if ((_mouseX != newX) || (_mouseY != newY)) { + event.type = OSystem::EVENT_MOUSEMOVE; + event.mouse.x = _mouseX = newX; + event.mouse.y = _mouseY = newY; + return true; + } + } else { + //reset pad acceleration + _padAccel = 0; + } + } + + return false; +} + +uint32 OSystem_PSP::getMillis() { + return SDL_GetTicks(); +} + +void OSystem_PSP::delayMillis(uint msecs) { + SDL_Delay(msecs); +} + +void OSystem_PSP::setTimerCallback(TimerProc callback, int interval) { + SDL_SetTimer(interval, (SDL_TimerCallback)callback); +} + +OSystem::MutexRef OSystem_PSP::createMutex(void) { + return (MutexRef)SDL_CreateMutex(); +} + +void OSystem_PSP::lockMutex(MutexRef mutex) { + SDL_mutexP((SDL_mutex *)mutex); +} + +void OSystem_PSP::unlockMutex(MutexRef mutex) { + SDL_mutexV((SDL_mutex *)mutex); +} + +void OSystem_PSP::deleteMutex(MutexRef mutex) { + SDL_DestroyMutex((SDL_mutex *)mutex); +} + +bool OSystem_PSP::setSoundCallback(SoundProc proc, void *param) { + SDL_AudioSpec desired; + SDL_AudioSpec obtained; + + memset(&desired, 0, sizeof(desired)); + + if (ConfMan.hasKey("output_rate")) + _samplesPerSec = ConfMan.getInt("output_rate"); + else + _samplesPerSec = SAMPLES_PER_SEC; + + // Originally, we always used 2048 samples. This loop will produce the + // same result at 22050 Hz, and should hopefully produce something + // sensible for other frequencies. Note that it must be a power of two. + + uint16 samples = 0x8000; + + for (;;) { + if (samples / (_samplesPerSec / 1000) < 100) + break; + samples >>= 1; + } + + desired.freq = _samplesPerSec; + desired.format = AUDIO_S16SYS; + desired.channels = 2; + desired.samples = samples; + desired.callback = proc; + desired.userdata = param; + if (SDL_OpenAudio(&desired, &obtained) != 0) { + return false; + } + // Note: This should be the obtained output rate, but it seems that at + // least on some platforms SDL will lie and claim it did get the rate + // even if it didn't. Probably only happens for "weird" rates, though. + _samplesPerSec = obtained.freq; + SDL_PauseAudio(0); + return true; +} + +void OSystem_PSP::clearSoundCallback() { + SDL_CloseAudio(); +} + +int OSystem_PSP::getOutputSampleRate() const { + return _samplesPerSec; +} + +void OSystem_PSP::quit() { + clearSoundCallback(); + SDL_Quit(); + sceGuTerm(); + sceKernelExitGame(); +} + +void OSystem_PSP::setWindowCaption(const char *caption) { +} + +void OSystem_PSP::displayMessageOnOSD(const char *msg) { +} + +// Correct pixel format ABBBBBGGGGGRRRRR +int gBitFormat = 1555; + diff --git a/backends/platform/psp/osys_psp.h b/backends/platform/psp/osys_psp.h new file mode 100644 index 0000000000..937a6e1889 --- /dev/null +++ b/backends/platform/psp/osys_psp.h @@ -0,0 +1,132 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2005-2006 The ScummVM project + * Copyright (C) 2005 Joost Peters PSP Backend + * Copyright (C) 2005 Thomas Mayer PSP Backend + * Copyright (C) 2005 Paolo Costabel PSP Backend + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#include "common/stdafx.h" +#include "common/scummsys.h" +#include "common/system.h" +#include "backends/intern.h" + +#include + +enum GraphicModeID { + CENTERED_320X200, + CENTERED_435X272, + STRETCHED_480X272, + CENTERED_362X272 +}; + +class OSystem_PSP : public OSystem { +public: + static const OSystem::GraphicsMode s_supportedGraphicsModes[]; + static OSystem *instance(); + +protected: + uint16 _screenWidth; + uint16 _screenHeight; + uint16 _overlayWidth; + uint16 _overlayHeight; + byte *_offscreen; + OverlayColor *_overlayBuffer; + uint16 _palette[256]; + bool _overlayVisible; + uint32 _shakePos; + + + bool _mouseVisible; + int _mouseX, _mouseY; + int _mouseWidth, _mouseHeight; + int _mouseHotspotX, _mouseHotspotY; + byte _mouseKeyColour; + byte *_mouseBuf; + + uint32 _prevButtons; + uint32 _lastPadCheck; + uint32 _padAccel; + + uint32 _samplesPerSec; + SceCtrlData pad; + +public: + + OSystem_PSP(); + virtual ~OSystem_PSP(); + + virtual bool hasFeature(Feature f); + virtual void setFeatureState(Feature f, bool enable); + virtual bool getFeatureState(Feature f); + virtual const GraphicsMode *getSupportedGraphicsModes() const; + virtual int getDefaultGraphicsMode() const; + virtual bool setGraphicsMode(int mode); + bool setGraphicsMode(const char *name); + virtual int getGraphicsMode() const; + virtual void initSize(uint width, uint height); + virtual int16 getWidth(); + virtual int16 getHeight(); + virtual void setPalette(const byte *colors, uint start, uint num); + virtual void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h); + virtual void updateScreen(); + virtual void setShakePos(int shakeOffset); + + virtual void showOverlay(); + virtual void hideOverlay(); + virtual void clearOverlay(); + virtual void grabOverlay(OverlayColor *buf, int pitch); + virtual void copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h); + virtual int16 getOverlayHeight(); + virtual int16 getOverlayWidth(); + virtual OverlayColor RGBToColor(uint8 r, uint8 g, uint8 b); + virtual void colorToRGB(OverlayColor color, uint8 &r, uint8 &g, uint8 &b); + virtual OverlayColor ARGBToColor(uint8 a, uint8 r, uint8 g, uint8 b); + virtual void colorToARGB(OverlayColor color, uint8 &a, uint8 &r, uint8 &g, uint8 &b); + virtual void grabPalette(byte *colors, uint start, uint num); + + virtual bool showMouse(bool visible); + + virtual void warpMouse(int x, int y); + virtual void setMouseCursor(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, byte keycolor = 255, int cursorTargetScale = 1); + + virtual bool pollEvent(Event &event); + virtual uint32 getMillis(); + virtual void delayMillis(uint msecs); + + virtual void setTimerCallback(TimerProc callback, int interval); + + virtual MutexRef createMutex(void); + virtual void lockMutex(MutexRef mutex); + virtual void unlockMutex(MutexRef mutex); + virtual void deleteMutex(MutexRef mutex); + + virtual bool setSoundCallback(SoundProc proc, void *param); + virtual void clearSoundCallback(); + virtual int getOutputSampleRate() const; + + virtual void quit(); + + virtual void setWindowCaption(const char *caption); + + virtual void displayMessageOnOSD(const char *msg); + +}; + diff --git a/backends/platform/psp/osys_psp_gu.cpp b/backends/platform/psp/osys_psp_gu.cpp new file mode 100644 index 0000000000..7553140118 --- /dev/null +++ b/backends/platform/psp/osys_psp_gu.cpp @@ -0,0 +1,582 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2005-2006 The ScummVM project + * Copyright (C) 2005 Joost Peters PSP Backend + * Copyright (C) 2005 Thomas Mayer PSP Backend + * Copyright (C) 2005 Paolo Costabel PSP Backend + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + */ + +#include +#include "osys_psp_gu.h" +#include "./trace.h" + +#define PIXEL_SIZE (4) +#define BUF_WIDTH (512) +#define PSP_SCREEN_WIDTH 480 +#define PSP_SCREEN_HEIGHT 272 +#define PSP_FRAME_SIZE (BUF_WIDTH * PSP_SCREEN_HEIGHT * PIXEL_SIZE) +#define MOUSE_SIZE 128 +#define KBD_DATA_SIZE 130560 + +unsigned int __attribute__((aligned(16))) list[262144]; +unsigned short __attribute__((aligned(16))) clut256[256]; +unsigned short __attribute__((aligned(16))) mouseClut[256]; +unsigned short __attribute__((aligned(16))) kbClut[256]; +//unsigned int __attribute__((aligned(16))) offscreen256[640*480]; +//unsigned int __attribute__((aligned(16))) overlayBuffer256[640*480*2]; +unsigned int __attribute__((aligned(16))) mouseBuf256[MOUSE_SIZE*MOUSE_SIZE]; + +extern unsigned long RGBToColour(unsigned long r, unsigned long g, unsigned long b); + +extern unsigned int size_keyboard_symbols_compressed; +extern unsigned char keyboard_symbols_compressed[]; +extern unsigned int size_keyboard_symbols_shift_compressed; +extern unsigned char keyboard_symbols_shift_compressed[]; +extern unsigned int size_keyboard_letters_compressed; +extern unsigned char keyboard_letters_compressed[]; +extern unsigned int size_keyboard_letters_shift_compressed; +extern unsigned char keyboard_letters_shift_compressed[]; +unsigned char *keyboard_symbols; +unsigned char *keyboard_symbols_shift; +unsigned char *keyboard_letters; +unsigned char *keyboard_letters_shift; + +unsigned char kbd_ascii[] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', '[', ']', '\\', ';', '\'', ',', '.', '/', '`'}; +unsigned int kbd_code[] = {SDLK_1, SDLK_2, SDLK_3, SDLK_4, SDLK_5, SDLK_6, SDLK_7, SDLK_8, SDLK_9, SDLK_0, SDLK_MINUS, SDLK_EQUALS, SDLK_LEFTBRACKET, SDLK_RIGHTBRACKET, + SDLK_BACKSLASH, SDLK_SEMICOLON, SDLK_QUOTE, SDLK_COMMA, SDLK_PERIOD, SDLK_SLASH, SDLK_BACKQUOTE}; +unsigned char kbd_ascii_cl[] = {'!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', '{', '}', '|', ':', '"', '<', '>', '?', '~'}; +unsigned int kbd_code_cl[] = {SDLK_EXCLAIM, SDLK_AT, SDLK_HASH, SDLK_DOLLAR, 37, SDLK_CARET, SDLK_AMPERSAND, SDLK_ASTERISK, SDLK_LEFTPAREN, SDLK_RIGHTPAREN, SDLK_UNDERSCORE, + SDLK_PLUS, 123, 125, 124, SDLK_COLON, SDLK_QUOTEDBL, SDLK_LESS, SDLK_GREATER, SDLK_QUESTION, 126}; +#define CAPS_LOCK (1 << 0) +#define SYMBOLS (1 << 1) + + +OSystem_PSP_GU::OSystem_PSP_GU() { + //sceKernelDcacheWritebackAll(); + + // setup + sceGuInit(); + sceGuStart(0, list); + sceGuDrawBuffer(GU_PSM_8888, (void *)0, BUF_WIDTH); + sceGuDispBuffer(PSP_SCREEN_WIDTH, PSP_SCREEN_HEIGHT, (void*)PSP_FRAME_SIZE, BUF_WIDTH); + sceGuDepthBuffer((void*)(PSP_FRAME_SIZE * 2), BUF_WIDTH); + sceGuOffset(2048 - (PSP_SCREEN_WIDTH/2), 2048 - (PSP_SCREEN_HEIGHT/2)); + sceGuViewport(2048, 2048, PSP_SCREEN_WIDTH, PSP_SCREEN_HEIGHT); + sceGuDepthRange(0xc350, 0x2710); + sceGuScissor(0, 0, PSP_SCREEN_WIDTH, PSP_SCREEN_HEIGHT); + sceGuEnable(GU_SCISSOR_TEST); + sceGuFrontFace(GU_CW); + sceGuEnable(GU_TEXTURE_2D); + sceGuClear(GU_COLOR_BUFFER_BIT|GU_DEPTH_BUFFER_BIT); + sceGuFinish(); + sceGuSync(0,0); + + sceDisplayWaitVblankStart(); + sceGuDisplay(1); + + //decompress keyboard data + uLongf kbdSize = KBD_DATA_SIZE; + keyboard_letters = (unsigned char *)memalign(16, KBD_DATA_SIZE); + assert(Z_OK == uncompress((Bytef *)keyboard_letters, &kbdSize, (const Bytef *)keyboard_letters_compressed, size_keyboard_letters_compressed)); + + kbdSize = KBD_DATA_SIZE; + keyboard_letters_shift = (unsigned char *)memalign(16, KBD_DATA_SIZE); + assert(Z_OK == uncompress((Bytef *)keyboard_letters_shift, &kbdSize, (const Bytef *)keyboard_letters_shift_compressed, size_keyboard_letters_shift_compressed)); + + kbdSize = KBD_DATA_SIZE; + keyboard_symbols = (unsigned char *)memalign(16, KBD_DATA_SIZE); + assert(Z_OK == uncompress((Bytef *)keyboard_symbols, &kbdSize, (const Bytef *)keyboard_symbols_compressed, size_keyboard_symbols_compressed)); + + kbdSize = KBD_DATA_SIZE; + keyboard_symbols_shift = (unsigned char *)memalign(16, KBD_DATA_SIZE); + assert(Z_OK == uncompress((Bytef *)keyboard_symbols_shift, &kbdSize, (const Bytef *)keyboard_symbols_shift_compressed, size_keyboard_symbols_shift_compressed)); + + _keyboardVisible = false; + _clut = (unsigned short*)(((unsigned int)clut256)|0x40000000); + _kbdClut = (unsigned short*)(((unsigned int)kbClut)|0x40000000); + _mouseBuf = (byte *)mouseBuf256; + _graphicMode = STRETCHED_480X272; + _keySelected = 1; + _keyboardMode = 0; +} + +OSystem_PSP_GU::~OSystem_PSP_GU() { + free(keyboard_symbols_shift); + free(keyboard_symbols); + free(keyboard_letters_shift); + free(keyboard_letters); + + _offscreen = 0; + _overlayBuffer = 0; + _mouseBuf = 0; + sceGuTerm(); +} + +void OSystem_PSP_GU::initSize(uint width, uint height) { + PSPDebugTrace("initSize\n"); + _screenWidth = width; + _screenHeight = height; + + _overlayWidth = PSP_SCREEN_WIDTH; //width; + _overlayHeight = PSP_SCREEN_HEIGHT; //height; + +// _offscreen = (byte *)offscreen256; + _overlayBuffer = (OverlayColor *)0x44000000 + PSP_FRAME_SIZE; + + _offscreen = (unsigned byte *)_overlayBuffer + _overlayWidth * _overlayHeight * sizeof(OverlayColor); + bzero(_offscreen, width * height); + clearOverlay(); + _kbdClut[0] = 0xffff; + _kbdClut[246] = 0x4ccc; + _kbdClut[247] = 0x0000; + for(int i=1;i<31;i++) + _kbdClut[i] = 0xf888; + _mouseVisible = false; + sceKernelDcacheWritebackAll(); +} + +int OSystem_PSP_GU::getDefaultGraphicsMode() const { + return STRETCHED_480X272; +} + +bool OSystem_PSP_GU::setGraphicsMode(int mode) { + _graphicMode = mode; + return true; +} + +bool OSystem_PSP_GU::setGraphicsMode(const char *name) { + int i = 0; + + while(s_supportedGraphicsModes[i].name) { + if(!strcmpi(s_supportedGraphicsModes[i].name, name)) { + _graphicMode = s_supportedGraphicsModes[i].id; + return true; + } + i++; + } + + return false; +} + +int OSystem_PSP_GU::getGraphicsMode() const { + return _graphicMode; +} + +void OSystem_PSP_GU::setMouseCursor(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, byte keycolor, int cursorTargetScale) { + //TODO: handle cursorTargetScale + _mouseWidth = w; + _mouseHeight = h; + + _mouseHotspotX = hotspotX; + _mouseHotspotY = hotspotY; + + _mouseKeyColour = keycolor; + + memcpy(mouseClut, _palette, 256*sizeof(unsigned short)); + mouseClut[_mouseKeyColour] = 0; + sceKernelDcacheWritebackAll(); + + for(unsigned int i=0;i _screenWidth - x) { + w = _screenWidth - x; + } + + if (h > _screenHeight - y) { + h = _screenHeight - y; + } + + if (w <= 0 || h <= 0) + return; + + + byte *dst = _offscreen + y * _screenWidth + x; + + if (_screenWidth == pitch && pitch == w) + { + memcpy(dst, buf, h * w); +/* + sceGuStart(0,list); + sceGuCopyImage( 3, 0, 0, w/2, h, w/2, (void *)buf, x/2, y, _screenWidth /2, _offscreen); + sceGuFinish(); + sceGuSync(0,0); +*/ + } + else + { + do + { + memcpy(dst, buf, w); + buf += pitch; + dst += _screenWidth; + } while (--h); + } +} + +void OSystem_PSP_GU::updateScreen() { + float scale; + + sceGuStart(0,list); + + sceGuClearColor(0xff000000); + sceGuClear(GU_COLOR_BUFFER_BIT); + + sceGuClutMode(GU_PSM_5551, 0, 0xff, 0); + sceGuClutLoad(32, clut256); // upload 32*8 entries (256) + sceGuTexMode(GU_PSM_T8, 0, 0, 0); // 8-bit image + if(_screenWidth == 320) + sceGuTexImage(0, 512, 256, _screenWidth, _offscreen); + else + sceGuTexImage(0, 512, 512, _screenWidth, _offscreen); + sceGuTexFunc(GU_TFX_REPLACE, GU_TCC_RGB); + sceGuTexFilter(GU_LINEAR, GU_LINEAR); + sceGuTexOffset(0,0); + sceGuAmbientColor(0xffffffff); + sceGuColor(0xffffffff); + + struct Vertex* vertices = (struct Vertex*)sceGuGetMemory(2 * sizeof(struct Vertex)); + vertices[0].u = 0.5; vertices[0].v = 0.5; + vertices[1].u = _screenWidth - 0.5; vertices[1].v = _screenHeight - 0.5; + switch(_graphicMode) { + case CENTERED_320X200: + vertices[0].x = (PSP_SCREEN_WIDTH - 320) / 2; vertices[0].y = (PSP_SCREEN_HEIGHT - 200) / 2; vertices[0].z = 0; + vertices[1].x = PSP_SCREEN_WIDTH - (PSP_SCREEN_WIDTH - 320) / 2; vertices[1].y = PSP_SCREEN_HEIGHT - (PSP_SCREEN_HEIGHT - 200) / 2; vertices[1].z = 0; + break; + case CENTERED_435X272: + vertices[0].x = (PSP_SCREEN_WIDTH - 435) / 2; vertices[0].y = 0; vertices[0].z = 0; + vertices[1].x = PSP_SCREEN_WIDTH - (PSP_SCREEN_WIDTH - 435) / 2; vertices[1].y = PSP_SCREEN_HEIGHT; vertices[1].z = 0; + break; + case STRETCHED_480X272: + vertices[0].x = 0; vertices[0].y = 0; vertices[0].z = 0; + vertices[1].x = PSP_SCREEN_WIDTH; vertices[1].y = PSP_SCREEN_HEIGHT; vertices[1].z = 0; + break; + case CENTERED_362X272: + vertices[0].x = (PSP_SCREEN_WIDTH - 362) / 2; vertices[0].y = 0; vertices[0].z = 0; + vertices[1].x = PSP_SCREEN_WIDTH - (PSP_SCREEN_WIDTH - 362) / 2; vertices[1].y = PSP_SCREEN_HEIGHT; vertices[1].z = 0; + break; + } + + if (_shakePos) { + vertices[0].y += _shakePos; + vertices[1].y += _shakePos; + } + + sceGuDrawArray(GU_SPRITES, GU_TEXTURE_32BITF|GU_VERTEX_32BITF|GU_TRANSFORM_2D, 2, 0, vertices); + if(_screenWidth == 640) { + sceGuTexImage(0, 512, 512, _screenWidth, _offscreen+512); + vertices[0].u = 512 + 0.5; vertices[1].v = _screenHeight - 0.5; + vertices[0].x += (vertices[1].x - vertices[0].x) * 511 / 640; vertices[0].y = 0; vertices[0].z = 0; + sceGuDrawArray(GU_SPRITES, GU_TEXTURE_32BITF|GU_VERTEX_32BITF|GU_TRANSFORM_2D, 2, 0, vertices); + } + + + // draw overlay + if(_overlayVisible) { + vertices[0].x = 0; vertices[0].y = 0; vertices[0].z = 0; + vertices[1].x = PSP_SCREEN_WIDTH; vertices[1].y = PSP_SCREEN_HEIGHT; vertices[1].z = 0; + vertices[0].u = 0.5; vertices[0].v = 0.5; + vertices[1].u = _overlayWidth - 0.5; vertices[1].v = _overlayHeight - 0.5; + sceGuTexMode(GU_PSM_5551, 0, 0, 0); // 16-bit image + sceGuAlphaFunc(GU_GREATER, 0, 0xff); + sceGuEnable(GU_ALPHA_TEST); + if (_overlayWidth > 320) + sceGuTexImage(0, 512, 512, _overlayWidth, _overlayBuffer); + else + sceGuTexImage(0, 512, 256, _overlayWidth, _overlayBuffer); + + sceGuTexFunc(GU_TFX_MODULATE, GU_TCC_RGBA); + sceGuDrawArray(GU_SPRITES,GU_TEXTURE_32BITF|GU_VERTEX_32BITF|GU_TRANSFORM_2D,2,0,vertices); + // need to render twice for textures > 512 + if( _overlayWidth > 512) { + sceGuTexImage(0, 512, 512, _overlayWidth, _overlayBuffer + 512); + vertices[0].u = 512 + 0.5; vertices[1].v = _overlayHeight - 0.5; + vertices[0].x = PSP_SCREEN_WIDTH * 512 / 640; vertices[0].y = 0; vertices[0].z = 0; + sceGuDrawArray(GU_SPRITES, GU_TEXTURE_32BITF|GU_VERTEX_32BITF|GU_TRANSFORM_2D, 2, 0, vertices); + } + } + + // draw mouse + if (_mouseVisible) { + sceGuTexMode(GU_PSM_T8, 0, 0, 0); // 8-bit image + sceGuClutMode(GU_PSM_5551, 0, 0xff, 0); + sceGuClutLoad(32, mouseClut); // upload 32*8 entries (256) + sceGuAlphaFunc(GU_GREATER,0,0xff); + sceGuEnable(GU_ALPHA_TEST); + sceGuTexImage(0, MOUSE_SIZE, MOUSE_SIZE, MOUSE_SIZE, _mouseBuf); + sceGuTexFunc(GU_TFX_MODULATE, GU_TCC_RGBA); + + vertices[0].u = 0.5; vertices[0].v = 0.5; + vertices[1].u = _mouseWidth - 0.5; vertices[1].v = _mouseHeight - 0.5; + + //adjust cursor position + int mX = _mouseX - _mouseHotspotX; + int mY = _mouseY - _mouseHotspotY; + + if(_overlayVisible) { + float scalex, scaley; + + scalex = (float)PSP_SCREEN_WIDTH /_overlayWidth; + scaley = (float)PSP_SCREEN_HEIGHT /_overlayHeight; + + vertices[0].x = mX * scalex; vertices[0].y = mY * scaley; vertices[0].z = 0; + vertices[1].x = vertices[0].x + _mouseWidth * scalex; vertices[1].y = vertices[0].y + _mouseHeight * scaley; vertices[0].z = 0; + } else + switch(_graphicMode) { + case CENTERED_320X200: + vertices[0].x = (PSP_SCREEN_WIDTH - 320) / 2 + mX; vertices[0].y = (PSP_SCREEN_HEIGHT - 200) / 2 + mY; vertices[0].z = 0; + vertices[1].x = vertices[0].x+_mouseWidth; vertices[1].y = vertices[0].y + _mouseHeight; vertices[1].z = 0; + break; + case CENTERED_435X272: + { + scale = 435.0f / _screenWidth; + vertices[0].x = (PSP_SCREEN_WIDTH - 435) / 2 + mX * scale; vertices[0].y = mY * scale; vertices[0].z = 0; + vertices[1].x = vertices[0].x + _mouseWidth * scale; vertices[1].y = vertices[0].y + _mouseHeight * scale; vertices[0].z = 0; + } + break; + case CENTERED_362X272: + { + float scalex, scaley; + + scalex = 362.0f / _screenWidth; + scaley = 272.0f / _screenHeight; + + vertices[0].x = (PSP_SCREEN_WIDTH - 362) / 2 + mX * scalex; vertices[0].y = mY * scaley; vertices[0].z = 0; + vertices[1].x = vertices[0].x + _mouseWidth * scalex; vertices[1].y = vertices[0].y + _mouseHeight * scaley; vertices[0].z = 0; + } + break; + case STRETCHED_480X272: + { + float scalex, scaley; + + scalex = (float)PSP_SCREEN_WIDTH / _screenWidth; + scaley = (float)PSP_SCREEN_HEIGHT / _screenHeight; + + vertices[0].x = mX * scalex; vertices[0].y = mY * scaley; vertices[0].z = 0; + vertices[1].x = vertices[0].x + _mouseWidth * scalex; vertices[1].y = vertices[0].y + _mouseHeight * scaley; vertices[0].z = 0; + } + break; + } + sceGuDrawArray(GU_SPRITES, GU_TEXTURE_32BITF|GU_VERTEX_32BITF|GU_TRANSFORM_2D, 2, 0, vertices); + } + + if(_keyboardVisible) { + sceGuTexMode(GU_PSM_T8, 0, 0, 0); // 8-bit image + sceGuClutMode(GU_PSM_4444, 0, 0xff, 0); + sceGuClutLoad(32, kbClut); // upload 32*8 entries (256) + sceGuDisable(GU_ALPHA_TEST); + sceGuEnable(GU_BLEND); + sceGuBlendFunc(GU_ADD, GU_SRC_ALPHA, GU_ONE_MINUS_SRC_ALPHA, 0, 0); + switch(_keyboardMode) { + case 0: + sceGuTexImage(0, 512, 512, 480, keyboard_letters); + break; + case CAPS_LOCK: + sceGuTexImage(0, 512, 512, 480, keyboard_letters_shift); + break; + case SYMBOLS: + sceGuTexImage(0, 512, 512, 480, keyboard_symbols); + break; + case (CAPS_LOCK | SYMBOLS): + sceGuTexImage(0, 512, 512, 480, keyboard_symbols_shift); + break; + } + sceGuTexFunc(GU_TFX_REPLACE, GU_TCC_RGBA); + + vertices[0].u = 0.5; vertices[0].v = 0.5; + vertices[1].u = PSP_SCREEN_WIDTH-0.5; vertices[1].v = PSP_SCREEN_HEIGHT-0.5; + vertices[0].x = 0; vertices[0].y = 0; vertices[0].z = 0; + vertices[1].x = PSP_SCREEN_WIDTH; vertices[1].y = PSP_SCREEN_HEIGHT; vertices[0].z = 0; + sceGuDrawArray(GU_SPRITES,GU_TEXTURE_32BITF|GU_VERTEX_32BITF|GU_TRANSFORM_2D,2,0,vertices); + sceGuDisable(GU_BLEND); + } + sceKernelDcacheWritebackAll(); + + sceGuFinish(); + sceGuSync(0,0); + + sceDisplayWaitVblankStart(); + sceGuSwapBuffers(); + + //sceKernelDcacheWritebackAll(); +} + +bool OSystem_PSP_GU::pollEvent(Event &event) { + float nub_angle = -1; + int x, y; + + sceCtrlSetSamplingCycle(0); + sceCtrlSetSamplingMode(1); + sceCtrlReadBufferPositive(&pad, 1); + + uint32 buttonsChanged = pad.Buttons ^ _prevButtons; + + if ((buttonsChanged & PSP_CTRL_SELECT) || (pad.Buttons & PSP_CTRL_SELECT)) { + if( !(pad.Buttons & PSP_CTRL_SELECT) ) + _keyboardVisible = !_keyboardVisible; + _prevButtons = pad.Buttons; + return false; + } + + if(!_keyboardVisible) + return OSystem_PSP::pollEvent(event); + + if ( (buttonsChanged & PSP_CTRL_RTRIGGER) && !(pad.Buttons & PSP_CTRL_RTRIGGER)) + _keyboardMode ^= CAPS_LOCK; + + if ( (buttonsChanged & PSP_CTRL_LTRIGGER) && !(pad.Buttons & PSP_CTRL_LTRIGGER)) + _keyboardMode ^= SYMBOLS; + + if ( (buttonsChanged & PSP_CTRL_LEFT) && !(pad.Buttons & PSP_CTRL_LEFT)) { + event.kbd.flags = 0; + event.kbd.ascii = 0; + event.kbd.keycode = SDLK_LEFT; + _prevButtons = pad.Buttons; + return true; + } + + if ( (buttonsChanged & PSP_CTRL_RIGHT) && !(pad.Buttons & PSP_CTRL_RIGHT)) { + event.kbd.flags = 0; + event.kbd.ascii = 0; + event.kbd.keycode = SDLK_RIGHT; + _prevButtons = pad.Buttons; + return true; + } + + if ( (buttonsChanged & PSP_CTRL_UP) && !(pad.Buttons & PSP_CTRL_UP)) { + event.kbd.flags = 0; + event.kbd.ascii = 0; + event.kbd.keycode = SDLK_UP; + _prevButtons = pad.Buttons; + return true; + } + + if ( (buttonsChanged & PSP_CTRL_DOWN) && !(pad.Buttons & PSP_CTRL_DOWN)) { + event.kbd.flags = 0; + event.kbd.ascii = 0; + event.kbd.keycode = SDLK_DOWN; + _prevButtons = pad.Buttons; + return true; + } + + // compute nub direction + x = pad.Lx-128; + y = pad.Ly-128; + _kbdClut[_keySelected] = 0xf888; + if(x*x + y*y > 10000) { + nub_angle = atan2(y, x); + _keySelected = (int)(1 + (M_PI + nub_angle) * 30 / (2 * M_PI)); + _keySelected -= 2; + if(_keySelected < 1) + _keySelected += 30; + _kbdClut[_keySelected] = 0xffff; + + if (buttonsChanged & PSP_CTRL_CROSS) { + event.type = (pad.Buttons & PSP_CTRL_CROSS) ? OSystem::EVENT_KEYDOWN : OSystem::EVENT_KEYUP; + if(_keySelected > 26) { + event.kbd.flags = 0; + switch(_keySelected) { + case 27: + event.kbd.ascii = ' '; + event.kbd.keycode = SDLK_SPACE; + break; + case 28: + event.kbd.ascii = 127; + event.kbd.keycode = SDLK_DELETE; + break; + case 29: + event.kbd.ascii = 8; + event.kbd.keycode = SDLK_BACKSPACE; + break; + case 30: + event.kbd.ascii = 13; + event.kbd.keycode = SDLK_RETURN; + break; + } + } else { + switch( _keyboardMode) { + case 0: + event.kbd.flags = 0; + event.kbd.ascii = 'a'+_keySelected-1; + event.kbd.keycode = SDLK_a + _keySelected-1; + break; + case CAPS_LOCK: + event.kbd.ascii = 'A'+_keySelected-1; + event.kbd.keycode = SDLK_a + _keySelected-1; + event.kbd.flags = KBD_SHIFT; + break; + case SYMBOLS: + if (_keySelected < 21) { + event.kbd.flags = 0; + event.kbd.ascii = kbd_ascii[_keySelected-1]; + event.kbd.keycode = kbd_code[ _keySelected-1]; + } + break; + case (SYMBOLS|CAPS_LOCK): + if(_keySelected < 21) { + event.kbd.flags = 0; + event.kbd.ascii = kbd_ascii_cl[_keySelected-1]; + event.kbd.keycode = kbd_code_cl[ _keySelected-1]; + } + break; + } + } + _prevButtons = pad.Buttons; + return true; + } + } + + _prevButtons = pad.Buttons; + return false; +} + diff --git a/backends/platform/psp/osys_psp_gu.h b/backends/platform/psp/osys_psp_gu.h new file mode 100644 index 0000000000..b1445a520e --- /dev/null +++ b/backends/platform/psp/osys_psp_gu.h @@ -0,0 +1,60 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2005-2006 The ScummVM project + * Copyright (C) 2005 Joost Peters PSP Backend + * Copyright (C) 2005 Thomas Mayer PSP Backend + * Copyright (C) 2005 Paolo Costabel PSP Backend + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * + */ + +#include +#include "common/stdafx.h" +#include "common/scummsys.h" + +#include "common/rect.h" +#include "osys_psp.h" + +class OSystem_PSP_GU : public OSystem_PSP +{ +public: + struct Vertex + { + float u,v; + float x,y,z; + }; + + OSystem_PSP_GU(); + ~OSystem_PSP_GU(); + void updateScreen(); + void initSize(uint width, uint height); + int getDefaultGraphicsMode() const; + bool setGraphicsMode(int mode); + bool setGraphicsMode(const char *name); + int getGraphicsMode() const; + void setMouseCursor(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, byte keycolor, int cursorTargetScale); + void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h) ; + void setPalette(const byte *colors, uint start, uint num); + bool pollEvent(Event &event); + int _graphicMode; + struct Vertex *_vertices; + unsigned short* _clut; + unsigned short* _kbdClut; + bool _keyboardVisible; + int _keySelected; + int _keyboardMode; +}; + diff --git a/backends/platform/psp/pic0.png b/backends/platform/psp/pic0.png new file mode 100644 index 0000000000..592c4a013f Binary files /dev/null and b/backends/platform/psp/pic0.png differ diff --git a/backends/platform/psp/pic1.png b/backends/platform/psp/pic1.png new file mode 100644 index 0000000000..6c35d5de4f Binary files /dev/null and b/backends/platform/psp/pic1.png differ diff --git a/backends/platform/psp/portdefs.h b/backends/platform/psp/portdefs.h new file mode 100644 index 0000000000..a63c8ff39e --- /dev/null +++ b/backends/platform/psp/portdefs.h @@ -0,0 +1,56 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2005-2006 The ScummVM project + * Copyright (C) 2005 Joost Peters PSP Backend + * Copyright (C) 2005 Thomas Mayer PSP Backend + * Copyright (C) 2005 Paolo Costabel PSP Backend + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef PORTDEFS_H +#define PORTDEFS_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "trace.h" + +#define SCUMMVM_SAVEPATH "ms0:/scummvm_savegames" + +#define BREAKPOINT asm("break\n") + + +//#define printf pspDebugScreenPrintf +#define exit(x) printf("exit() called\n"); sceKernelSleepThread(); + +#endif /* PORTDEFS_H */ + + diff --git a/backends/platform/psp/psp_main.cpp b/backends/platform/psp/psp_main.cpp new file mode 100644 index 0000000000..b1b976cbb9 --- /dev/null +++ b/backends/platform/psp/psp_main.cpp @@ -0,0 +1,150 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2005-2006 The ScummVM project + * Copyright (C) 2005 Joost Peters PSP Backend + * Copyright (C) 2005 Thomas Mayer PSP Backend + * Copyright (C) 2005 Paolo Costabel PSP Backend + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + + +#define USERSPACE_ONLY //don't use kernel mode features + +#ifndef USERSPACE_ONLY +#include +#include +#endif + +#include +#include +#include +#include +#include + +#include "osys_psp_gu.h" +#include "./trace.h" + + + +/** + * Define the module info section + * + * 2nd arg must 0x1000 so __init is executed in + * kernelmode for our loaderInit function + */ +#ifndef USERSPACE_ONLY +PSP_MODULE_INFO("SCUMMVM-PSP", 0x1000, 1, 1); +#else +PSP_MODULE_INFO("SCUMMVM-PSP", 0, 1, 1); +#endif + +/** + * THREAD_ATTR_USER causes the thread that the startup + * code (crt0.c) starts this program in to be in usermode + * even though the module was started in kernelmode + */ +#ifndef USERSPACE_ONLY +PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU); +#endif + + +#ifndef USERSPACE_ONLY +void MyExceptionHandler(PspDebugRegBlock *regs) { + /* Do normal initial dump, setup screen etc */ + + pspDebugScreenInit(); + + pspDebugScreenSetBackColor(0x00FF0000); + pspDebugScreenSetTextColor(0xFFFFFFFF); + pspDebugScreenClear(); + + pspDebugScreenPrintf("Exception Details:\n"); + pspDebugDumpException(regs); + + while (1) ; +} + +/** + * Function that is called from _init in kernelmode before the + * main thread is started in usermode. + */ +__attribute__ ((constructor)) +void loaderInit() { + pspKernelSetKernelPC(); + pspDebugInstallErrorHandler(MyExceptionHandler); +} +#endif + +/* Exit callback */ +SceKernelCallbackFunction exit_callback(int /*arg1*/, int /*arg2*/, void * /*common*/) { + sceKernelExitGame(); + return 0; +} + +/* Callback thread */ +int CallbackThread(SceSize /*size*/, void *arg) { + int cbid; + + cbid = sceKernelCreateCallback("Exit Callback", (SceKernelCallbackFunction)exit_callback, NULL); + sceKernelRegisterExitCallback(cbid); + + sceKernelSleepThreadCB(); + return 0; +} + +/* Sets up the callback thread and returns its thread id */ +int SetupCallbacks(void) { + int thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, THREAD_ATTR_USER, 0); + if (thid >= 0) { + sceKernelStartThread(thid, 0, 0); + } + + return thid; +} + +#undef main +int main(void) +{ + SetupCallbacks(); + + //check if the save directory exists + SceUID fd = sceIoDopen(SCUMMVM_SAVEPATH); + if (fd < 0) { + //No? then let's create it. + sceIoMkdir(SCUMMVM_SAVEPATH, 0777); + } else { + //it exists, so close it again. + sceIoDclose(fd); + } + + static char *argv[] = { "scummvm", NULL }; + static int argc = sizeof(argv)/sizeof(char *)-1; + + g_system = new OSystem_PSP_GU(); + assert(g_system); + + int res = scummvm_main(argc, argv); + + g_system->quit(); // TODO: Consider removing / replacing this! + + sceKernelSleepThread(); + + return res; +} + diff --git a/backends/platform/psp/trace.cpp b/backends/platform/psp/trace.cpp new file mode 100644 index 0000000000..45d594b010 --- /dev/null +++ b/backends/platform/psp/trace.cpp @@ -0,0 +1,75 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2005-2006 The ScummVM project + * Copyright (C) 2005 Joost Peters PSP Backend + * Copyright (C) 2005 Thomas Mayer PSP Backend + * Copyright (C) 2005 Paolo Costabel PSP Backend + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + + +#include "./trace.h" + + +//#define __DEBUG__ + +void PSPDebugTrace (const char *format, ...) { +#ifdef __DEBUG__ + va_list opt; + char buff[2048]; + int bufsz, fd; + + va_start(opt, format); + bufsz = vsnprintf( buff, (size_t) sizeof(buff), format, opt); + va_end(opt); + + fd = sceIoOpen("MS0:/DTRACE.TXT", PSP_O_RDWR | PSP_O_CREAT | PSP_O_APPEND, 0777); + + if(fd <= 0) + { + return; + } + + sceIoWrite(fd, (const void*)buff, bufsz); + sceIoClose(fd); +#endif +} + +void PSPDebugTrace (const char * filename, const char *format, ...) { +#ifdef __DEBUG__ + va_list opt; + char buff[2048]; + int bufsz, fd; + + va_start(opt, format); + bufsz = vsnprintf( buff, (size_t) sizeof(buff), format, opt); + va_end(opt); + + fd = sceIoOpen(filename, PSP_O_RDWR | PSP_O_CREAT | PSP_O_APPEND, 0777); + + if(fd <= 0) + { + return; + } + + sceIoWrite(fd, (const void*)buff, bufsz); + sceIoClose(fd); +#endif +} + diff --git a/backends/platform/psp/trace.h b/backends/platform/psp/trace.h new file mode 100644 index 0000000000..948f6ea2a3 --- /dev/null +++ b/backends/platform/psp/trace.h @@ -0,0 +1,40 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2005-2006 The ScummVM project + * Copyright (C) 2005 Joost Peters PSP Backend + * Copyright (C) 2005 Thomas Mayer PSP Backend + * Copyright (C) 2005 Paolo Costabel PSP Backend + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + + +#ifndef TRACE_H +#define TRACE_H + +#include +#include +#include +#include +#include + +void PSPDebugTrace (const char *filename, const char *format, ...); +void PSPDebugTrace (const char *format, ...); + +#endif // TRACE_H + diff --git a/backends/psp/Makefile b/backends/psp/Makefile deleted file mode 100644 index bcb5dfd3a0..0000000000 --- a/backends/psp/Makefile +++ /dev/null @@ -1,115 +0,0 @@ -# SCUMMVM-PSP MakeFile -# $URL$ -# $Id$ - -#control build -DISABLE_SCALERS = true -DISABLE_HQ_SCALERS = true - -srcdir = ../.. -VPATH = $(srcdir) -HAVE_GCC3 = false - -PSPSDK=$(shell psp-config --pspsdk-path) -PSPBIN = $(PSPSDK)/../bin -LDFLAGS = - -CXX = psp-g++ -AS = psp-gcc -LD = psp-gcc -AR = psp-ar cru -RANLIB = psp-ranlib -STRIP = psp-strip -MKDIR = mkdir -p -RM = rm -f -MKSFO = mksfo -PACK_PBP = pack-pbp -FIXUP = psp-fixup-imports - -#check PSPSDK presence -ifeq ($(PSPSDK),) -$(error $$(PSPSDK) is undefined. Use "PSPSDK := $$(shell psp-config --pspsdk-path)" in your Makefile) -endif - -# Add in PSPSDK includes and libraries. -INCDIR := $(srcdir) . $(srcdir)/engines/ . $(PSPSDK)/include -LIBDIR := $(LIBDIR) . $(PSPSDK)/lib - -CFLAGS = -O2 -Wall -D__PSP__ -DNONSTANDARD_PORT -DUSE_ZLIB -Wno-multichar `$(PSPBIN)/sdl-config --cflags` -CFLAGS := $(addprefix -I,$(INCDIR)) $(CFLAGS) -LDFLAGS := $(addprefix -L,$(LIBDIR)) $(LDFLAGS) -LIBS = - -#comment this out if you don't want to use libmad -CFLAGS += -DUSE_MAD -LIBS += -lmad - -#comment this out if you don't want to use libtremor -CFLAGS += -DUSE_VORBIS -DUSE_TREMOR -LIBS += -lvorbisidec - -#comment this out if you don't want to use libmpeg2 -CFLAGS += -DUSE_MPEG2 -LIBS += -lmpeg2 - -LIBS += `$(PSPBIN)/sdl-config --libs` -lz -lstdc++ -lpspdisplay -lpspgu -lpspctrl -lpspsdk -lc -lpspuser -lpspkernel - -CXXFLAGS := $(CFLAGS) $(CXXFLAGS) -fno-exceptions -fno-rtti -ASFLAGS := $(CFLAGS) $(ASFLAGS) - -TARGET = scummvm-psp -OBJS := psp_main.o \ - ../fs/psp/psp_fs.o \ - osys_psp.o \ - osys_psp_gu.o \ - kbd_ss_c.o \ - kbd_s_c.o \ - kbd_ls_c.o \ - kbd_l_c.o \ - trace.o - -MODULE_DIRS += . - -include $(srcdir)/Makefile.common - -PSP_EBOOT_SFO = param.sfo -PSP_EBOOT_TITLE = ScummVM-PSP -PSP_EBOOT = EBOOT.PBP -PSP_EBOOT_ICON = icon0.png -PSP_EBOOT_ICON1 = NULL -PSP_EBOOT_PIC0 = pic0.png -PSP_EBOOT_PIC1 = pic1.png -PSP_EBOOT_SND0 = NULL -PSP_EBOOT_PSAR = NULL - -all: $(PSP_EBOOT) - -$(TARGET).elf: $(OBJS) - $(LD) $^ $(LIBS) -o $@ - $(FIXUP) $@ - -$(PSP_EBOOT_SFO): - $(MKSFO) '$(PSP_EBOOT_TITLE)' $@ - -$(PSP_EBOOT): $(TARGET).elf $(PSP_EBOOT_SFO) - $(STRIP) $(TARGET).elf - $(PACK_PBP) $@ $(PSP_EBOOT_SFO) $(PSP_EBOOT_ICON) $(PSP_EBOOT_ICON1) \ - $(PSP_EBOOT_PIC0) $(PSP_EBOOT_PIC1) $(PSP_EBOOT_SND0) \ - $(TARGET).elf $(PSP_EBOOT_PSAR) - -kxploit: $(TARGET).elf $(PSP_EBOOT_SFO) - mkdir -p "$(TARGET)" - $(STRIP) $(TARGET).elf -o $(TARGET)/$(PSP_EBOOT) - mkdir -p "$(TARGET)%" - $(PACK_PBP) "$(TARGET)%/$(PSP_EBOOT)" $(PSP_EBOOT_SFO) $(PSP_EBOOT_ICON) \ - $(PSP_EBOOT_ICON1) $(PSP_EBOOT_PIC0) $(PSP_EBOOT_PIC1) \ - $(PSP_EBOOT_SND0) NULL $(PSP_EBOOT_PSAR) - -SCEkxploit: $(TARGET).elf $(PSP_EBOOT_SFO) - mkdir -p "__SCE__$(TARGET)" - $(STRIP) $(TARGET).elf -o __SCE__$(TARGET)/$(PSP_EBOOT) - mkdir -p "%__SCE__$(TARGET)" - $(PACK_PBP) "%__SCE__$(TARGET)/$(PSP_EBOOT)" $(PSP_EBOOT_SFO) $(PSP_EBOOT_ICON) \ - $(PSP_EBOOT_ICON1) $(PSP_EBOOT_PIC0) $(PSP_EBOOT_PIC1) \ - $(PSP_EBOOT_SND0) NULL $(PSP_EBOOT_PSAR) - diff --git a/backends/psp/README.PSP b/backends/psp/README.PSP deleted file mode 100644 index 6076881a2e..0000000000 --- a/backends/psp/README.PSP +++ /dev/null @@ -1,110 +0,0 @@ -ScummVM-PSP 0.9.0SVN README -=========================== - -Installation -============ - - Copy the relevant game datafiles to your memory stick (location - doesn't matter). - - Install ScummVM like any other homebrew - - Run ScummVM and use the launcher to add games and run them - - -Controls -======== - -Left trigger - ESC -Right trigger - Enter -Analog - Mouse movement -Directionals - Mouse movement -Analog + triangle - Fine control mouse -Cross - Mouse button 1 -Circle - Mouse button 2 -Square - '.' (skip dialogue in some games) -Select - Show/Hide Virtual Keyboard -Start - F5 - -Notes -===== - -- While it's possible to compress certain game resources to reduce their size, - this can (and usually will) cause games (especially animation) to be choppy - sometimes, as it ofcourse needs extra CPU power to decode these files. - As such, it is recommended to play games in their original, uncompressed, - form whenever possible. - -- Sleep/Suspend mode currently isn't supported, so don't use it when - running ScummVM. - -Frequently Asked Questions -========================== - -Q: What do I need to run the games? -A: A 1.00 or 1.50 firmware PSP (or an EBOOT loader on firmware 2.00 or - higher), and the necessary datafiles for the game you want to play and - obviously this ScummVM port. - -Q: Can I run game X with this? -A: You can find the list of supported games on the compatibility page - on http://www.scummvm.org. - Note that ScummVM is NOT a 'DOS (game) emulator', but written - specifically for certain games/engines. - -Q: My Monkey Island 1 doesn't have any music, what gives? -A: If your version of Monkey Island came on a CD then it has the music - as CD Audio tracks. You need to rip those to MP3/Ogg and copy them - to the same directory as the game datafiles for music to work. - -Q: Game X crashes, or feature Y doesn't work. Can you fix this? -A: Possibly. - Because of the large amount of games ScummVM supports we obviously haven't - played them all start-to-finish on the PSP, so it's possible there - are bugs or issues that we're not aware of. - When you encounter such a bug, please use the "Bug Tracker" you find linked - on the ScummVM website, and mention all relevant info (i.e. that you're - using the PSP version, which ScummVM version it is, if the problem exists - in a recent PC SVN version, a detailed description of the problem, - and if at all possible a nearby savegame), this will make it much easier - for us to reproduce (and hopefully fix) the problem. - - -Building the source code -======================== -To build ScummVM for PSP you need: - -- PSP toolchain (svn co svn://svn.pspdev.org/psp/trunk/psptoolchain) - -- PSPSDK (svn co svn://svn.pspdev.org/psp/trunk/pspsdk) - Note: This usually gets installed by the PSP toolchain, - so you don't have to do it manually. - -- SDL (svn co svn://svn.pspdev.org/psp/trunk/SDL) - -- zlib (svn co svn://svn.pspdev.org/psp/trunk/zlib) - -- libmad(*) (svn co svn://svn.pspdev.org/psp/trunk/libmad) - -- libTremor(*) (svn co svn://svn.pspdev.org/psp/trunk/libTremor) - -- libmpeg2(*) (http://libmpeg2.sf.net) - Note: As this is not in pspdev svn, you'll need to build - it manually. Adding a psp target/host to config.sub and - using a configure line similar to the SDL port worked for - me. - -(*) = optional - -When you've installed these libraries (read their README.PSP for instructions), -type "make" in the backends/psp directory to build an 1.00 firmware EBOOT.PBP, -or "make kxploit" to build the 1.50/kxploit EBOOT.PBPs - -You can control most of the build process (engines and libraries used) from -the Makefile. - - -Port Authors -============ - -Joost Peters (joostp@scummvm.org) -Paolo Costabel (paoloc@pacbell.net) -Thomas Mayer (tommybear@internode.on.net) - diff --git a/backends/psp/icon0.png b/backends/psp/icon0.png deleted file mode 100644 index b5fb9008b0..0000000000 Binary files a/backends/psp/icon0.png and /dev/null differ diff --git a/backends/psp/kbd_l_c.cpp b/backends/psp/kbd_l_c.cpp deleted file mode 100644 index 5f10da0611..0000000000 --- a/backends/psp/kbd_l_c.cpp +++ /dev/null @@ -1,213 +0,0 @@ -#ifndef __keyboard_letters_compressed__ -#define __keyboard_letters_compressed__ - -unsigned int size_keyboard_letters_compressed = 3271; -unsigned char keyboard_letters_compressed[] __attribute__((aligned(16))) = { - 0x78, 0x9c, 0xed, 0x9d, 0x69, 0x97, 0xb4, 0x36, 0x0e, 0x46, 0x99, 0xec, 0x99, 0xc9, 0x32, 0x93, - 0x3d, 0xb3, 0xfd, 0xff, 0x5f, 0x48, 0xbe, 0xe6, 0xa4, 0xbb, 0x0b, 0x4b, 0xb2, 0x24, 0xdb, 0xd8, - 0x66, 0x11, 0xcf, 0x3d, 0x27, 0xd5, 0x14, 0x16, 0xc6, 0x70, 0xb1, 0x31, 0xa6, 0x9c, 0xf7, 0x8f, - 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x11, 0x2b, 0xb8, - 0x31, 0xb0, 0x1b, 0x1d, 0xd8, 0x8d, 0x0e, 0xf4, 0x06, 0x07, 0x7e, 0x63, 0x03, 0xbd, 0xc1, 0x81, - 0xdf, 0xd8, 0x40, 0x6f, 0x70, 0xe0, 0x37, 0x36, 0xf0, 0x1b, 0x9b, 0x92, 0xdf, 0xbf, 0x99, 0xf0, - 0x7c, 0x3e, 0x31, 0xe1, 0x71, 0x9f, 0x9a, 0xf0, 0xb8, 0xcf, 0x4c, 0x78, 0xdc, 0xe7, 0x26, 0x3c, - 0xee, 0x0b, 0x13, 0x1e, 0xf7, 0xa5, 0x09, 0x8f, 0xfb, 0xca, 0x84, 0xc7, 0x7d, 0x6d, 0xc2, 0xe3, - 0xfe, 0x6e, 0xc2, 0xe3, 0xfe, 0x61, 0xb2, 0xaa, 0x14, 0xfc, 0xda, 0x7a, 0xb9, 0x60, 0x5b, 0x2f, - 0x17, 0x6c, 0xeb, 0xe5, 0x82, 0x6d, 0xbd, 0x5c, 0xb0, 0xad, 0x97, 0x0b, 0xb6, 0xf5, 0x72, 0xc1, - 0xb6, 0x5e, 0x2e, 0xd8, 0xd6, 0xcb, 0x05, 0xdb, 0x7a, 0xb9, 0x60, 0x5b, 0x2f, 0x17, 0x6c, 0xeb, - 0x35, 0x04, 0xfb, 0x7e, 0x3d, 0xbd, 0x54, 0xb0, 0xa7, 0x97, 0x0a, 0xf6, 0xf4, 0x52, 0xc1, 0x9e, - 0x5e, 0x2a, 0xd8, 0xd3, 0x4b, 0x05, 0x7b, 0x7a, 0xa9, 0x60, 0x4f, 0x2f, 0x15, 0xec, 0xe9, 0xa5, - 0x82, 0x3d, 0xbd, 0x54, 0xb0, 0xa7, 0x97, 0x0a, 0xf6, 0xf4, 0xea, 0x82, 0xe1, 0x17, 0x7e, 0xe1, - 0x37, 0xb4, 0x5f, 0x6d, 0x33, 0xcd, 0xaf, 0x16, 0xa7, 0xf9, 0xd5, 0xe2, 0x34, 0xbf, 0x5a, 0x9c, - 0xe6, 0x57, 0x8b, 0xd3, 0xfc, 0x6a, 0x71, 0x9a, 0x5f, 0x2d, 0x4e, 0xf3, 0xab, 0xc5, 0x69, 0x7e, - 0xb5, 0x38, 0xcd, 0xaf, 0x16, 0xa7, 0xf9, 0xd5, 0xe2, 0xe0, 0xf7, 0x46, 0x7e, 0x97, 0x65, 0xd1, - 0x13, 0xae, 0xe0, 0x97, 0x14, 0x6e, 0x1d, 0xe7, 0xf7, 0x95, 0xeb, 0xf5, 0xfc, 0xf2, 0xe3, 0xf5, - 0xfc, 0xd2, 0x48, 0xf8, 0x9d, 0xe8, 0x77, 0x49, 0x65, 0xbc, 0xa4, 0xdf, 0xd5, 0x4c, 0x20, 0x1a, - 0xf9, 0x7e, 0xe1, 0x37, 0x69, 0xa4, 0x25, 0x3c, 0xd2, 0x2f, 0x05, 0x7e, 0xcf, 0xf7, 0xbb, 0xbc, - 0x93, 0x27, 0x84, 0xf4, 0x4b, 0x8f, 0xf6, 0x09, 0x7e, 0xdf, 0xa3, 0x4e, 0xf1, 0x5b, 0x75, 0xff, - 0x1d, 0xec, 0x97, 0x1f, 0xae, 0xef, 0x97, 0x5c, 0x07, 0x9e, 0x5f, 0x12, 0xe6, 0xfa, 0xa5, 0x39, - 0x3a, 0x7e, 0x69, 0x76, 0xfd, 0x7e, 0x3f, 0x82, 0xaa, 0xfc, 0x92, 0x03, 0x3e, 0xae, 0x7f, 0x75, - 0xa2, 0x5f, 0x12, 0x68, 0xfb, 0x7d, 0x8b, 0xd8, 0xf2, 0xb3, 0xfd, 0xf2, 0xfc, 0x4c, 0xbf, 0x3c, - 0x3b, 0xc7, 0x2f, 0xbf, 0xfe, 0x86, 0xf8, 0x25, 0x71, 0x47, 0xfb, 0x7d, 0x85, 0x8e, 0xb8, 0xff, - 0xd2, 0x13, 0x53, 0x6c, 0x9f, 0x3f, 0xfe, 0x98, 0x7e, 0xb7, 0x30, 0x99, 0xf0, 0x46, 0xd2, 0x28, - 0xce, 0xb3, 0xe5, 0x57, 0x84, 0x1d, 0x5b, 0x7f, 0xd7, 0xd3, 0xfc, 0x6e, 0x91, 0x43, 0xee, 0xbf, - 0x0d, 0xf5, 0xb7, 0xd6, 0x6f, 0x9e, 0xf0, 0x06, 0xfc, 0xaa, 0x09, 0xd2, 0x6f, 0x0a, 0x3c, 0xba, - 0x7d, 0x3e, 0xc1, 0x2f, 0x6b, 0x78, 0x1f, 0xe1, 0x97, 0xc4, 0x3d, 0xc0, 0x2f, 0x3b, 0xac, 0xa3, - 0xfb, 0xcf, 0xf0, 0xfb, 0xc6, 0xec, 0xfb, 0xef, 0x96, 0xdf, 0xd1, 0xcf, 0xbf, 0x67, 0xf9, 0x1d, - 0xd6, 0x3e, 0x8b, 0xe7, 0x80, 0x6b, 0xf6, 0x9f, 0x07, 0xde, 0x7f, 0x45, 0xec, 0x25, 0xfd, 0x92, - 0x47, 0xc2, 0x43, 0xc7, 0xaf, 0xc8, 0x75, 0x75, 0xf0, 0xf3, 0xef, 0xa2, 0x25, 0xac, 0x51, 0xef, - 0xbf, 0xe4, 0x14, 0xe2, 0xfd, 0xe0, 0x2e, 0xbf, 0x5b, 0xe8, 0xf5, 0xde, 0x0f, 0x6e, 0x05, 0x5c, - 0x44, 0x02, 0xe7, 0x81, 0x7e, 0x29, 0x6e, 0xff, 0x8a, 0x9c, 0xe7, 0xeb, 0xf9, 0xe5, 0xc0, 0xef, - 0x6d, 0xde, 0xef, 0xd3, 0xcb, 0x0a, 0x7e, 0xe3, 0xf9, 0x65, 0x1c, 0xe1, 0xd7, 0x24, 0xc5, 0x7d, - 0xe2, 0x92, 0xe2, 0x3e, 0x75, 0x49, 0x71, 0x9f, 0xb9, 0xa4, 0xb8, 0xcf, 0x5d, 0x52, 0xdc, 0x17, - 0x2e, 0x29, 0xee, 0x4b, 0x97, 0x14, 0xf7, 0x95, 0x4b, 0x8a, 0xfb, 0xda, 0x45, 0x68, 0x34, 0x11, - 0x1a, 0x4d, 0xe0, 0x17, 0x7e, 0xe1, 0xf7, 0x49, 0x7e, 0x31, 0x3f, 0x45, 0xd5, 0x1b, 0x66, 0x7e, - 0x0a, 0xe6, 0x97, 0xe9, 0x7a, 0xc3, 0xcc, 0x2f, 0x03, 0x37, 0x07, 0x7e, 0x63, 0x03, 0xbf, 0xb1, - 0x81, 0xdf, 0xd8, 0xc0, 0x6f, 0x6c, 0xe0, 0x37, 0x36, 0xf0, 0x1b, 0x1b, 0xf8, 0x8d, 0x0d, 0xfc, - 0xc6, 0x06, 0x7e, 0x63, 0x53, 0xf2, 0xfb, 0xff, 0x4e, 0xce, 0x3a, 0xae, 0xa8, 0x7c, 0x63, 0xa2, - 0xc7, 0x17, 0xfc, 0xf6, 0xea, 0x85, 0xe0, 0xb1, 0xd8, 0x7a, 0x0d, 0xc1, 0xbe, 0xdf, 0x7e, 0xbd, - 0x10, 0x3c, 0x12, 0x4f, 0xaf, 0x2e, 0x18, 0x7e, 0xef, 0x04, 0xfc, 0xc6, 0x66, 0x8a, 0xdf, 0xfd, - 0xc5, 0x81, 0xdf, 0xc1, 0x98, 0x1a, 0xe1, 0x37, 0x04, 0xf0, 0x1b, 0x1b, 0xa6, 0x91, 0xfe, 0x4e, - 0x1a, 0x7e, 0x43, 0x30, 0xd5, 0x2f, 0x9f, 0x41, 0x98, 0xd6, 0xda, 0xc5, 0x81, 0xdf, 0xc1, 0x4c, - 0xf6, 0xab, 0x65, 0x00, 0xbf, 0x07, 0x02, 0xbf, 0xb1, 0x39, 0xca, 0x6f, 0x6a, 0xa8, 0xe9, 0xdf, - 0x85, 0xfc, 0xcd, 0x37, 0x07, 0xfd, 0x1c, 0x71, 0xff, 0x7d, 0x5f, 0x7c, 0x7d, 0xac, 0x62, 0x05, - 0xbb, 0x3f, 0xc3, 0xef, 0x60, 0x8e, 0xab, 0xbf, 0xab, 0xe9, 0x77, 0x35, 0x36, 0x07, 0xfd, 0x9c, - 0xe8, 0xf7, 0xa3, 0x6e, 0xc3, 0xef, 0x4c, 0xce, 0xad, 0xbf, 0x22, 0x08, 0x7e, 0x87, 0x83, 0xf6, - 0x39, 0x36, 0x47, 0x8d, 0x6f, 0x10, 0xbf, 0x2b, 0xef, 0x37, 0xc3, 0xef, 0x4c, 0x30, 0x3e, 0x19, - 0x1b, 0xf8, 0x8d, 0x0d, 0xfc, 0xc6, 0x06, 0xef, 0x07, 0x63, 0x03, 0xbf, 0xb1, 0x81, 0xdf, 0xd8, - 0x4c, 0xf1, 0xdb, 0xc9, 0x9c, 0x23, 0x7d, 0x26, 0xdf, 0xb8, 0x68, 0x5b, 0xc0, 0xef, 0x9d, 0x80, - 0xdf, 0xd8, 0x8c, 0xf6, 0x8b, 0xf9, 0x29, 0x17, 0xa3, 0x55, 0x2f, 0xe6, 0x97, 0xdd, 0x8c, 0x46, - 0xbd, 0x98, 0x1f, 0x1a, 0x1c, 0xf8, 0x8d, 0x0d, 0xfc, 0xc6, 0x06, 0x7e, 0x63, 0x03, 0xbf, 0xb1, - 0xb9, 0x80, 0x5f, 0xef, 0x17, 0xd4, 0xfc, 0xf7, 0x98, 0x7e, 0x4c, 0x1e, 0x59, 0xb1, 0xed, 0x96, - 0x83, 0x32, 0x31, 0xc3, 0xda, 0x9a, 0x27, 0x68, 0xdb, 0x16, 0x36, 0x29, 0xee, 0x61, 0x1c, 0x57, - 0xf7, 0x5b, 0xe3, 0xa8, 0xdb, 0xaf, 0xbe, 0x7d, 0x9d, 0x5f, 0x6b, 0xdf, 0x35, 0x79, 0x3d, 0xc2, - 0x6f, 0xe1, 0xea, 0xaf, 0xf3, 0x9b, 0xfd, 0x34, 0xa8, 0x76, 0x5b, 0x12, 0x07, 0xbf, 0x53, 0x48, - 0x7e, 0x49, 0x4b, 0x47, 0x97, 0xc4, 0x8a, 0xbc, 0x41, 0x5c, 0x16, 0xfa, 0xd3, 0x3e, 0xf6, 0xdb, - 0xbf, 0x8a, 0xa6, 0x73, 0xcd, 0x84, 0xf1, 0xf6, 0x80, 0x4d, 0xd5, 0xa0, 0xff, 0xa6, 0x54, 0xb6, - 0xad, 0xf2, 0x83, 0x61, 0xad, 0xcc, 0xd9, 0xb1, 0xcd, 0xe4, 0x74, 0xbf, 0xaa, 0x19, 0xfb, 0xf7, - 0x99, 0xfc, 0xb7, 0x7d, 0x5b, 0x16, 0x96, 0x5f, 0x19, 0x2a, 0xcf, 0x3b, 0x59, 0x4b, 0xca, 0xa3, - 0xe6, 0x91, 0xfd, 0xb0, 0x30, 0xdb, 0x56, 0x16, 0xb8, 0x58, 0xa8, 0x0b, 0xf8, 0xfd, 0x5f, 0x27, - 0xc5, 0x02, 0xe8, 0x27, 0x61, 0xfb, 0x5a, 0xe9, 0xf7, 0xe5, 0xb8, 0x14, 0xea, 0x95, 0x43, 0xbd, - 0xc8, 0x84, 0x5f, 0x52, 0x30, 0x63, 0x5b, 0xb1, 0x38, 0xda, 0xef, 0xb7, 0x26, 0x7a, 0x7c, 0xc1, - 0x6f, 0xaf, 0xde, 0xb2, 0xe0, 0x45, 0x34, 0x57, 0xb2, 0x65, 0xad, 0xf4, 0xbb, 0xea, 0xb9, 0xc8, - 0x50, 0xa3, 0xfe, 0xa6, 0x0d, 0xd7, 0x94, 0x2c, 0xbe, 0x3b, 0x7e, 0x65, 0xa5, 0x25, 0x8b, 0x83, - 0xfd, 0xda, 0x7a, 0x0d, 0xc1, 0xbe, 0xdf, 0x7e, 0xbd, 0x25, 0xc1, 0xba, 0xc4, 0xe6, 0xf6, 0xb9, - 0xda, 0x6f, 0x5d, 0x21, 0xb2, 0xb5, 0x4a, 0x82, 0x16, 0xc5, 0xdb, 0xea, 0xf1, 0x7e, 0x3d, 0xbd, - 0xba, 0xe0, 0x30, 0x7e, 0x95, 0x06, 0x76, 0xbf, 0x5f, 0xb3, 0x7d, 0xb6, 0x77, 0xfe, 0xf1, 0x05, - 0x7e, 0x39, 0xa6, 0x44, 0xab, 0x17, 0xcb, 0x5a, 0x74, 0x9e, 0x47, 0x96, 0x5e, 0xdb, 0x7f, 0x66, - 0x81, 0xc5, 0xfe, 0x33, 0xd9, 0x55, 0xb6, 0x13, 0xb6, 0xc0, 0xfc, 0x0e, 0xe9, 0x3f, 0x4f, 0xf1, - 0xdb, 0x58, 0x06, 0x42, 0xe7, 0xe6, 0x0e, 0xed, 0x77, 0xae, 0x63, 0x98, 0x5c, 0x2e, 0x53, 0x63, - 0x20, 0xbf, 0xb5, 0x8d, 0xee, 0x19, 0xcc, 0x2e, 0xd6, 0x13, 0xfc, 0xae, 0xb5, 0x8d, 0xee, 0xe1, - 0xcc, 0x2f, 0xd6, 0x23, 0xfc, 0x3e, 0x98, 0xc9, 0x7e, 0xcd, 0x47, 0xc7, 0x8f, 0x54, 0xb9, 0x06, - 0x7e, 0x07, 0x33, 0xdd, 0x6f, 0xfa, 0xcc, 0x99, 0xe8, 0xb7, 0xdc, 0x11, 0xb6, 0x2f, 0xbd, 0xaa, - 0xe7, 0xa3, 0x45, 0x2c, 0x0c, 0x2a, 0xd5, 0x68, 0x3e, 0x34, 0xbe, 0x0e, 0x36, 0x15, 0xe0, 0xf6, - 0x7e, 0x9d, 0xfd, 0x16, 0x8a, 0x36, 0xcd, 0xef, 0xce, 0x67, 0xd8, 0x1e, 0x92, 0xdf, 0x95, 0x7f, - 0x8e, 0xf7, 0xcb, 0x9e, 0x06, 0xf9, 0x20, 0x80, 0xb5, 0xf9, 0x7e, 0xca, 0xa7, 0xb2, 0xd7, 0xef, - 0x42, 0xff, 0x8e, 0x2a, 0xd4, 0x70, 0xa6, 0xfb, 0xe5, 0x0f, 0xff, 0xfc, 0x63, 0x59, 0xe4, 0xc1, - 0x9e, 0xe3, 0xd7, 0x1b, 0x0a, 0xb1, 0x36, 0x16, 0x7e, 0xf9, 0x10, 0x44, 0x3e, 0xc4, 0x42, 0x76, - 0x49, 0x96, 0xd9, 0xde, 0xf3, 0xeb, 0x7f, 0x40, 0xc7, 0xff, 0xc0, 0xfa, 0xcb, 0x8f, 0xea, 0x55, - 0x7c, 0x9e, 0xf9, 0x29, 0x7e, 0xf5, 0xa1, 0xc0, 0x14, 0xa7, 0xdc, 0xa9, 0x97, 0xed, 0x05, 0xa3, - 0x32, 0x90, 0x66, 0x66, 0x66, 0xfa, 0x95, 0x2b, 0x44, 0x52, 0x07, 0x47, 0xb7, 0xcf, 0xd2, 0xaf, - 0xc8, 0x7c, 0xa2, 0x5f, 0x29, 0x49, 0x58, 0x33, 0xfd, 0x5a, 0xd9, 0x5b, 0x7e, 0x69, 0x9d, 0xce, - 0x8a, 0x20, 0x96, 0xf9, 0x66, 0x66, 0x52, 0x07, 0xc7, 0xf9, 0x55, 0x4a, 0x7d, 0x81, 0xfa, 0xbb, - 0x95, 0xa3, 0xb9, 0xfe, 0x7e, 0x94, 0xde, 0xf5, 0x9b, 0x5d, 0x52, 0x62, 0x99, 0xed, 0xce, 0xba, - 0x93, 0x75, 0x71, 0x9a, 0x5f, 0x76, 0xf9, 0x5b, 0x9b, 0xef, 0xa7, 0xc5, 0xaf, 0xdf, 0x3e, 0x9b, - 0x1b, 0x5b, 0x7e, 0xb3, 0xbf, 0x6a, 0xa1, 0x74, 0x89, 0x56, 0x4d, 0xd8, 0xcd, 0x71, 0xfd, 0x2b, - 0x56, 0x4b, 0x8e, 0xe9, 0x3f, 0xbb, 0xa7, 0xa7, 0xdb, 0xaf, 0xb9, 0x1d, 0xfb, 0x9b, 0xd7, 0x5f, - 0xc3, 0xaf, 0x55, 0x09, 0xfa, 0x98, 0xec, 0xb7, 0x95, 0x43, 0xc7, 0x37, 0xb4, 0xe0, 0xea, 0xfe, - 0xf3, 0x2a, 0xed, 0xa4, 0xcd, 0xd8, 0xfd, 0x47, 0x69, 0xeb, 0xc5, 0x72, 0xd6, 0x3e, 0x8b, 0x96, - 0xba, 0x0b, 0x8c, 0x3f, 0xc7, 0x06, 0x7e, 0x63, 0x03, 0xbf, 0xb1, 0x81, 0xdf, 0xd8, 0xc0, 0x6f, - 0x6c, 0xa6, 0xf8, 0xed, 0x64, 0xce, 0x91, 0x96, 0x31, 0x9f, 0x5b, 0xb5, 0x50, 0xad, 0xa3, 0x5d, - 0xd8, 0xb0, 0xaa, 0x6f, 0xae, 0x06, 0xec, 0x1f, 0xa7, 0xfc, 0xd6, 0x45, 0xdb, 0x22, 0xae, 0xdf, - 0x8a, 0x41, 0x11, 0x1e, 0x59, 0xb7, 0xb6, 0x2d, 0xf7, 0x3d, 0x39, 0x3b, 0xc0, 0x2f, 0x25, 0x1f, - 0x70, 0x71, 0x02, 0x6b, 0xd7, 0xf2, 0xd4, 0x9b, 0xfb, 0x3d, 0x60, 0x7e, 0xca, 0x4c, 0xaa, 0x06, - 0x37, 0x56, 0x63, 0x70, 0x24, 0x1f, 0x9e, 0xb3, 0x46, 0x9f, 0xf9, 0x40, 0x16, 0x6b, 0xeb, 0xb3, - 0x65, 0xb9, 0x6d, 0x23, 0xad, 0x7a, 0xcf, 0x9f, 0x5f, 0x36, 0x95, 0xfc, 0x44, 0x1a, 0xef, 0x17, - 0xb4, 0x57, 0x12, 0x62, 0x85, 0xbc, 0x56, 0xa8, 0x38, 0xfe, 0x49, 0xda, 0x0d, 0x7d, 0xd0, 0xb3, - 0x63, 0x20, 0xab, 0x51, 0xef, 0xf9, 0xf3, 0x43, 0xa7, 0x52, 0x79, 0x22, 0x65, 0x5d, 0x34, 0xfc, - 0x2a, 0xdb, 0x25, 0x8b, 0x62, 0x71, 0x96, 0xdf, 0x56, 0x42, 0xfb, 0x55, 0xda, 0x67, 0xa3, 0xfe, - 0xf2, 0x45, 0xa5, 0xc1, 0x35, 0xbb, 0xc2, 0xaf, 0x4f, 0xf8, 0x3d, 0x9c, 0x3d, 0xfd, 0x2b, 0xbd, - 0xfe, 0x8a, 0xa0, 0x2c, 0x95, 0xb7, 0xd5, 0xf0, 0x7b, 0x08, 0xbb, 0x9e, 0x8f, 0xaa, 0xdb, 0x67, - 0xf8, 0x3d, 0x19, 0xde, 0xfb, 0x29, 0x84, 0xf2, 0xd7, 0x7b, 0xc9, 0xda, 0x2b, 0x51, 0xc9, 0x87, - 0x35, 0xf3, 0x6c, 0x81, 0xf9, 0x1d, 0xdb, 0x7f, 0x6e, 0x26, 0xae, 0xdf, 0x43, 0x39, 0xd0, 0x58, - 0x1b, 0xf0, 0x3b, 0x82, 0xcb, 0xea, 0x85, 0xdf, 0x01, 0xec, 0x1f, 0x4f, 0x9e, 0x0f, 0xfc, 0xc6, - 0x06, 0x7e, 0x63, 0x53, 0xf2, 0xfb, 0xdf, 0x4e, 0x76, 0x15, 0xca, 0x1e, 0x42, 0xa4, 0x6b, 0x07, - 0xb6, 0x8a, 0x55, 0xef, 0xfa, 0x68, 0xf8, 0xfe, 0xd4, 0x4e, 0xbe, 0x33, 0xd1, 0xe3, 0x0b, 0x7e, - 0x7b, 0xf5, 0xee, 0x13, 0x6c, 0x3c, 0x25, 0xaa, 0x4f, 0xa0, 0x23, 0x68, 0x7d, 0x2a, 0x3d, 0xcf, - 0xaf, 0xad, 0xd7, 0x10, 0xec, 0xfb, 0xed, 0xd7, 0xbb, 0x4b, 0x70, 0x9d, 0xdf, 0x71, 0xdc, 0xc6, - 0xaf, 0xa7, 0x57, 0x17, 0x7c, 0x43, 0xbf, 0x62, 0xc0, 0x61, 0xa1, 0xe3, 0x06, 0xd9, 0x8f, 0x8e, - 0xab, 0x1a, 0x5e, 0x1a, 0xe1, 0xe6, 0x56, 0x8e, 0x5f, 0x1b, 0x86, 0x45, 0xdb, 0x79, 0x8a, 0x5f, - 0x19, 0x65, 0x2f, 0x6a, 0x6f, 0xf5, 0x5a, 0xde, 0x2f, 0x64, 0x83, 0x5a, 0x66, 0x3c, 0x75, 0x3b, - 0xab, 0x0a, 0x4f, 0xf1, 0xbb, 0xbf, 0x38, 0xfb, 0xfd, 0x92, 0xf7, 0xb1, 0xf2, 0x3d, 0xab, 0x18, - 0x78, 0x2c, 0xfa, 0xad, 0xda, 0x9f, 0xf6, 0x5d, 0x55, 0x2b, 0xe3, 0x95, 0xa0, 0xa6, 0xae, 0x5a, - 0x1b, 0xa6, 0xc6, 0xbb, 0xf9, 0x4d, 0x9f, 0xd9, 0xea, 0x4a, 0xbf, 0xc6, 0x5b, 0xbd, 0x52, 0xfd, - 0x5d, 0xe9, 0xa5, 0xc5, 0xb3, 0x53, 0xe3, 0x75, 0xbf, 0x0d, 0xc7, 0xda, 0x04, 0xfc, 0xca, 0x6d, - 0x1b, 0xea, 0xaf, 0x54, 0x25, 0xaa, 0x6e, 0x55, 0xfb, 0xfc, 0xbe, 0x0a, 0xf5, 0xd7, 0x67, 0x90, - 0xdf, 0xc6, 0xf6, 0xd9, 0xf6, 0x7b, 0xad, 0xfb, 0x6f, 0x53, 0x42, 0x9d, 0x5f, 0xf5, 0xf9, 0x3f, - 0x5b, 0x93, 0x45, 0x1c, 0xe1, 0x97, 0x96, 0x4d, 0xed, 0x3f, 0xd7, 0xed, 0x50, 0xc9, 0xc3, 0xeb, - 0x3f, 0x8b, 0xa8, 0x6c, 0x97, 0x93, 0x04, 0xcf, 0xf3, 0xbb, 0xda, 0xe7, 0xdb, 0xfc, 0xde, 0x5b, - 0xfd, 0xeb, 0xd1, 0xeb, 0xd6, 0xb8, 0x4c, 0xaf, 0x42, 0xd2, 0x28, 0xba, 0x11, 0x23, 0xfc, 0x16, - 0x7d, 0x9e, 0xe2, 0xd7, 0xbe, 0x61, 0x0e, 0xc9, 0xf9, 0x5a, 0x30, 0xbf, 0xdb, 0xe7, 0x3a, 0xd6, - 0x2f, 0xef, 0x60, 0xd2, 0x76, 0x49, 0xb6, 0x58, 0x87, 0xd4, 0x5f, 0xf6, 0x00, 0x35, 0xb2, 0x6b, - 0xf3, 0x50, 0xbf, 0x85, 0x6e, 0x08, 0x5d, 0x3c, 0xac, 0x7d, 0x7e, 0x0a, 0xf0, 0x7b, 0x06, 0xc7, - 0x55, 0xf4, 0x63, 0xfc, 0xf2, 0xbe, 0xa9, 0xfd, 0x7d, 0xbf, 0xdf, 0xfc, 0x8c, 0x6d, 0xe3, 0x12, - 0x13, 0x7a, 0x52, 0x6a, 0x46, 0x46, 0x1f, 0xde, 0xde, 0x5e, 0x7d, 0xc6, 0xa8, 0xdc, 0x55, 0xed, - 0x91, 0x1c, 0x56, 0x7f, 0xd7, 0x9a, 0xef, 0x23, 0xfd, 0x2a, 0x6b, 0xaf, 0xe2, 0x57, 0x3f, 0x39, - 0x0d, 0xbb, 0xaa, 0x3f, 0x92, 0xa9, 0x7e, 0xe9, 0xe3, 0xe7, 0xe4, 0xf6, 0xb9, 0xf3, 0x34, 0x8c, - 0xd8, 0xdb, 0xc3, 0xfc, 0x92, 0xb6, 0xc7, 0xea, 0x3f, 0x93, 0x9d, 0xf6, 0xf6, 0x9f, 0xdd, 0xd3, - 0x20, 0x86, 0x2e, 0x4a, 0xe3, 0x1b, 0x6d, 0x8d, 0x26, 0x7f, 0x18, 0x90, 0x8f, 0x04, 0x5a, 0xae, - 0xf4, 0xb2, 0xa7, 0x6b, 0xd8, 0xdd, 0x8a, 0xf5, 0xf0, 0xb3, 0xde, 0xbe, 0x7c, 0xee, 0x30, 0x99, - 0xe5, 0x77, 0x27, 0xd3, 0xfc, 0x92, 0xaf, 0x7a, 0xcb, 0xb1, 0x2d, 0xca, 0x53, 0x96, 0xdf, 0xc6, - 0x73, 0x35, 0x32, 0x9f, 0x2c, 0x37, 0x7a, 0x79, 0xad, 0x54, 0x17, 0x5d, 0x93, 0x3e, 0x5f, 0xff, - 0x95, 0x4b, 0x5b, 0xaa, 0xc9, 0x41, 0xc6, 0x9f, 0xd9, 0x3d, 0x5d, 0x9e, 0xb7, 0x55, 0x39, 0x8d, - 0x9e, 0xdf, 0x96, 0xbd, 0x95, 0xfd, 0xca, 0x0d, 0x64, 0xe5, 0xdf, 0xd6, 0x89, 0xc5, 0x4a, 0xbf, - 0x05, 0xe2, 0xf9, 0x55, 0xd6, 0xd6, 0xf9, 0x5d, 0x5e, 0x2d, 0xac, 0xcc, 0xa3, 0x50, 0x7f, 0xe5, - 0xc3, 0x80, 0x9a, 0x5b, 0x7e, 0xd1, 0xb1, 0xac, 0x76, 0xf9, 0x6d, 0x6b, 0x9f, 0x6b, 0x13, 0xc2, - 0xfa, 0x75, 0x73, 0x32, 0xf7, 0x46, 0x1b, 0x0e, 0xf9, 0x29, 0x72, 0x53, 0x93, 0xd2, 0x2d, 0x84, - 0x14, 0xb2, 0xd2, 0x6f, 0x45, 0x71, 0xe1, 0xf7, 0xb8, 0xf6, 0x79, 0xb4, 0xdf, 0x9a, 0x46, 0x3a, - 0x8e, 0x5f, 0x6d, 0xb4, 0x40, 0xf5, 0xbb, 0x96, 0xfa, 0xcf, 0x6d, 0x7b, 0x63, 0x39, 0xd0, 0x4f, - 0x96, 0x1b, 0x09, 0x17, 0xb9, 0xf0, 0xa2, 0x2a, 0x7e, 0x07, 0xf5, 0x9f, 0x6b, 0x13, 0x2a, 0xfc, - 0x76, 0xe2, 0x97, 0x78, 0x0c, 0x6a, 0x0b, 0x7b, 0xf0, 0x8e, 0xab, 0xd6, 0x77, 0xf2, 0x9d, 0x8b, - 0xb6, 0xc5, 0xed, 0xfd, 0xea, 0x2d, 0xde, 0xc9, 0xcc, 0x2a, 0xc4, 0x03, 0xfd, 0xae, 0x6a, 0x8b, - 0x77, 0x2a, 0xf3, 0x0a, 0x31, 0xda, 0xef, 0x49, 0xf3, 0x53, 0x80, 0x45, 0xab, 0xde, 0x6b, 0xce, - 0x2f, 0x03, 0x26, 0x8d, 0x7a, 0x31, 0x3f, 0x34, 0x38, 0xf0, 0x1b, 0x1b, 0xf8, 0x8d, 0x0d, 0xfc, - 0xc6, 0x06, 0x7e, 0x63, 0x03, 0xbf, 0xb1, 0x81, 0xdf, 0xd8, 0xc0, 0x6f, 0x6c, 0xe0, 0x37, 0x36, - 0xf0, 0x1b, 0x9b, 0x92, 0xdf, 0xff, 0x74, 0x72, 0xd6, 0x71, 0x45, 0xe5, 0x7b, 0x13, 0x3d, 0xbe, - 0xe0, 0xb7, 0x57, 0x2f, 0x04, 0x8f, 0xc5, 0xd6, 0x6b, 0x08, 0xf6, 0xfd, 0xf6, 0xeb, 0x85, 0xe0, - 0x91, 0x78, 0x7a, 0x75, 0xc1, 0xf0, 0x7b, 0x27, 0xe0, 0x37, 0x36, 0x53, 0xfc, 0xee, 0x2f, 0x0e, - 0xfc, 0x0e, 0xc6, 0xd4, 0x08, 0xbf, 0x21, 0x80, 0xdf, 0xd8, 0xcc, 0xf3, 0xab, 0xfd, 0x1e, 0xb9, - 0x08, 0xfc, 0x0e, 0x66, 0x9a, 0xdf, 0xec, 0xd7, 0xdc, 0x55, 0xc0, 0xef, 0x60, 0xe0, 0x37, 0x36, - 0x54, 0x23, 0x6b, 0x50, 0xc7, 0xf8, 0x25, 0x19, 0xf3, 0x59, 0x20, 0xfa, 0x12, 0xfc, 0x8e, 0x26, - 0x69, 0x14, 0xf3, 0xbb, 0x87, 0xdc, 0x7f, 0x3f, 0x56, 0x8a, 0xd9, 0x50, 0xe6, 0x07, 0xfc, 0x0e, - 0x67, 0xd3, 0xc8, 0x27, 0x49, 0x8d, 0xe9, 0x3f, 0xb3, 0xd9, 0x50, 0x62, 0x4a, 0xa3, 0xfe, 0x15, - 0x7e, 0x07, 0x33, 0xd5, 0xaf, 0x3a, 0xb1, 0x31, 0x9b, 0xa6, 0x47, 0x67, 0xfe, 0xc1, 0xef, 0x60, - 0xa6, 0xf9, 0x55, 0x67, 0xc3, 0xaa, 0xf3, 0x56, 0xe9, 0x9d, 0x1a, 0x7e, 0x07, 0x73, 0xae, 0x5f, - 0xdc, 0x7f, 0x67, 0x33, 0xaf, 0x7d, 0x76, 0x66, 0x51, 0xe7, 0xf3, 0xa2, 0xd1, 0x7f, 0x9e, 0xc4, - 0xbc, 0xfe, 0x33, 0xa1, 0xfe, 0x29, 0x18, 0x7e, 0x07, 0x33, 0xed, 0xf9, 0x97, 0x02, 0xbf, 0xa7, - 0x71, 0xc8, 0xfb, 0x05, 0xf8, 0x3d, 0x0d, 0xbc, 0x3f, 0x8a, 0x0d, 0xfc, 0xc6, 0x06, 0x7e, 0x63, - 0x03, 0xbf, 0xb1, 0x99, 0xe2, 0xb7, 0x93, 0x39, 0x47, 0xfa, 0x4c, 0xbe, 0x77, 0xd1, 0xb6, 0x80, - 0xdf, 0x3b, 0x01, 0xbf, 0xb1, 0x19, 0xed, 0x17, 0xf3, 0x53, 0x2e, 0x46, 0xab, 0x5e, 0xcc, 0x2f, - 0xbb, 0x19, 0x8d, 0x7a, 0x31, 0x3f, 0x34, 0x38, 0xf0, 0x1b, 0x1b, 0xf8, 0x8d, 0x0d, 0xfc, 0xc6, - 0x06, 0x7e, 0x63, 0x03, 0xbf, 0xb1, 0x81, 0xdf, 0xd8, 0xc0, 0x6f, 0x6c, 0xe0, 0x37, 0x36, 0xf0, - 0x1b, 0x9b, 0x92, 0xdf, 0x7f, 0x9b, 0xf0, 0x7c, 0x7e, 0x37, 0xe1, 0x71, 0xbf, 0x99, 0xf0, 0xb8, - 0x5f, 0x4d, 0x78, 0xdc, 0x2f, 0x26, 0x3c, 0xee, 0x67, 0x13, 0x1e, 0xf7, 0x93, 0x09, 0x8f, 0xfb, - 0xd1, 0x84, 0xc7, 0xfd, 0x60, 0xc2, 0xe3, 0xfe, 0x65, 0xc2, 0xe3, 0xfe, 0x69, 0xb2, 0xaa, 0x14, - 0xfc, 0xda, 0x7a, 0xb9, 0x60, 0x5b, 0x2f, 0x17, 0x6c, 0xeb, 0xe5, 0x82, 0x6d, 0xbd, 0x5c, 0xb0, - 0xad, 0x97, 0x0b, 0xb6, 0xf5, 0x72, 0xc1, 0xb6, 0x5e, 0x2e, 0xd8, 0xd6, 0xcb, 0x05, 0xdb, 0x7a, - 0xb9, 0x60, 0x5b, 0x2f, 0x17, 0x6c, 0xeb, 0x35, 0x04, 0xfb, 0x7e, 0x3d, 0xbd, 0x54, 0xb0, 0xa7, - 0x97, 0x0a, 0xf6, 0xf4, 0x52, 0xc1, 0x9e, 0x5e, 0x2a, 0xd8, 0xd3, 0x4b, 0x05, 0x7b, 0x7a, 0xa9, - 0x60, 0x4f, 0x2f, 0x15, 0xec, 0xe9, 0xa5, 0x82, 0x3d, 0xbd, 0x54, 0xb0, 0xa7, 0x97, 0x0a, 0xf6, - 0xf4, 0xea, 0x82, 0xe1, 0x17, 0x7e, 0xe1, 0x37, 0xb4, 0x5f, 0x6d, 0x33, 0xcd, 0xaf, 0x16, 0xa7, - 0xf9, 0xd5, 0xe2, 0x34, 0xbf, 0x5a, 0x9c, 0xe6, 0x57, 0x8b, 0xd3, 0xfc, 0x6a, 0x71, 0x9a, 0x5f, - 0x2d, 0x4e, 0xf3, 0xab, 0xc5, 0x69, 0x7e, 0xb5, 0x38, 0xcd, 0xaf, 0x16, 0xa7, 0xf9, 0xd5, 0xe2, - 0xe0, 0xb7, 0xdd, 0x2f, 0xfd, 0xff, 0x05, 0xc1, 0x2f, 0xfc, 0x2a, 0x09, 0x2d, 0x7e, 0xb5, 0xb0, - 0xeb, 0xf9, 0x4d, 0xd3, 0x45, 0x45, 0xc2, 0x1b, 0xf0, 0xab, 0x27, 0x5c, 0xc0, 0x2f, 0xff, 0x27, - 0x97, 0x7b, 0xfd, 0xd2, 0x69, 0xc3, 0x2c, 0xe1, 0x9d, 0x97, 0x46, 0xf1, 0x6f, 0x2c, 0x7b, 0x7e, - 0xf9, 0x84, 0x58, 0xd3, 0xaf, 0x98, 0x37, 0x7b, 0x41, 0xbf, 0xec, 0x3c, 0x9b, 0x7e, 0x59, 0xd4, - 0xb0, 0xfa, 0x3b, 0xcc, 0xef, 0x87, 0xd8, 0xad, 0x88, 0x37, 0xf6, 0xcb, 0xce, 0xb4, 0xe3, 0x97, - 0xc5, 0x99, 0x7e, 0x45, 0xf9, 0x3c, 0xbf, 0x34, 0x6e, 0x8c, 0xdf, 0x74, 0xc4, 0xf6, 0xfd, 0xf7, - 0xe5, 0x2d, 0x4b, 0xf8, 0x0b, 0xa2, 0x91, 0xb7, 0x07, 0xfd, 0x7e, 0xdf, 0xd2, 0xb7, 0xfc, 0xfa, - 0xfd, 0xf2, 0x0a, 0x62, 0xfb, 0xe5, 0x19, 0x16, 0xfc, 0xaa, 0x09, 0x2b, 0xf1, 0x2b, 0xaa, 0x47, - 0xc9, 0xef, 0x16, 0x38, 0xc4, 0x2f, 0x29, 0x60, 0xbf, 0xdf, 0x95, 0x9d, 0x3f, 0xeb, 0xfe, 0xfb, - 0x21, 0x6d, 0x53, 0x77, 0x9c, 0xdf, 0xda, 0xfa, 0xdb, 0xe2, 0x57, 0x4f, 0x58, 0x6f, 0xe5, 0x97, - 0x7b, 0xf3, 0xfa, 0x57, 0xf4, 0x82, 0xbe, 0xbb, 0x5f, 0x25, 0xe1, 0x2f, 0x6e, 0xe5, 0x97, 0x16, - 0x70, 0x80, 0xdf, 0xaa, 0xfa, 0x9b, 0xe4, 0xbe, 0x87, 0x7a, 0xfd, 0x67, 0x9a, 0xdf, 0x35, 0xef, - 0xbf, 0x7a, 0xc2, 0x7a, 0x0d, 0xbf, 0xac, 0x7c, 0x25, 0xbf, 0x5a, 0xc2, 0xda, 0x7e, 0xff, 0xbd, - 0x83, 0x5f, 0x16, 0x7b, 0x5f, 0xbf, 0xbc, 0x1d, 0xf2, 0xc6, 0x37, 0xaa, 0xfc, 0x2e, 0xaf, 0xfb, - 0xb4, 0xdb, 0x7f, 0x5e, 0xa5, 0x10, 0xf7, 0xf9, 0x97, 0xec, 0xf7, 0xae, 0xf7, 0xdf, 0xf3, 0xfa, - 0xcf, 0xbc, 0xbe, 0x15, 0xfc, 0xea, 0x09, 0xed, 0xcf, 0xbf, 0xd9, 0x81, 0x74, 0xfb, 0x15, 0xc7, - 0x71, 0x39, 0xbf, 0xe7, 0x3e, 0xff, 0x5a, 0x09, 0xa2, 0x7d, 0xd6, 0x13, 0xd6, 0x98, 0xe3, 0x57, - 0x43, 0xef, 0xbf, 0x32, 0xb6, 0xd4, 0x3e, 0xe7, 0x09, 0x82, 0xe1, 0x7e, 0xf9, 0x8e, 0xef, 0xec, - 0x97, 0xde, 0x68, 0x0e, 0x1e, 0x9f, 0xbc, 0xae, 0x5f, 0xb1, 0xdf, 0x5b, 0xfb, 0x5d, 0xcd, 0x84, - 0xe7, 0xfa, 0x15, 0xc0, 0x2f, 0xfc, 0x2a, 0x09, 0x4f, 0xf7, 0xcb, 0x12, 0x2e, 0xf5, 0x7e, 0x50, - 0x00, 0xbf, 0xf0, 0xab, 0x24, 0x3c, 0xd1, 0xef, 0x69, 0xbf, 0xdf, 0x30, 0x49, 0x71, 0xbf, 0xbb, - 0xa4, 0xb8, 0xdf, 0x5c, 0x52, 0xdc, 0xaf, 0x2e, 0x29, 0xee, 0x17, 0x97, 0x14, 0xf7, 0xb3, 0x4b, - 0x8a, 0xfb, 0xc9, 0x25, 0xc5, 0xfd, 0xe8, 0x92, 0xe2, 0x7e, 0x70, 0x11, 0x1a, 0x4d, 0x84, 0x46, - 0x13, 0xf8, 0x85, 0x5f, 0xf8, 0x7d, 0x92, 0x5f, 0xcc, 0x4f, 0x51, 0xf5, 0x86, 0x99, 0x9f, 0x82, - 0xf9, 0x65, 0xba, 0xde, 0x30, 0xf3, 0xcb, 0xc0, 0xcd, 0x81, 0xdf, 0xd8, 0xc0, 0x6f, 0x6c, 0x34, - 0xbf, 0x10, 0x1c, 0x06, 0x55, 0x2f, 0xfc, 0x86, 0x41, 0xf7, 0x0b, 0xc1, 0x41, 0x30, 0xf4, 0xc2, - 0x6f, 0x10, 0x2c, 0xbf, 0x10, 0x1c, 0x02, 0x53, 0x2f, 0x0c, 0x07, 0xc0, 0xb3, 0x0b, 0xc3, 0x77, - 0xa7, 0x64, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x18, 0xc2, 0x9f, 0xfe, 0xbb, 0x89, 0xf5 -}; - -#endif diff --git a/backends/psp/kbd_ls_c.cpp b/backends/psp/kbd_ls_c.cpp deleted file mode 100644 index 6f199377c0..0000000000 --- a/backends/psp/kbd_ls_c.cpp +++ /dev/null @@ -1,224 +0,0 @@ -#ifndef __keyboard_letters_shift_compressed__ -#define __keyboard_letters_shift_compressed__ - -unsigned int size_keyboard_letters_shift_compressed = 3450; -unsigned char keyboard_letters_shift_compressed[] __attribute__((aligned(16))) = { - 0x78, 0x9c, 0xed, 0x9d, 0xe9, 0xb6, 0xab, 0x38, 0x0e, 0x46, 0xe9, 0xae, 0xb9, 0xbb, 0x86, 0xee, - 0x9a, 0xab, 0xa7, 0xf7, 0x7f, 0x42, 0xea, 0x6f, 0xaf, 0x73, 0x13, 0xb0, 0x24, 0x4b, 0xb2, 0xc1, - 0x03, 0x41, 0xf9, 0xf6, 0x5a, 0x27, 0x21, 0x58, 0x36, 0x0e, 0x1b, 0x8c, 0x31, 0xf1, 0xbd, 0x7f, - 0xfe, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x8d, 0x58, 0xc1, - 0x8d, 0x81, 0xdd, 0xe8, 0xc0, 0x6e, 0x74, 0xa0, 0x37, 0x38, 0xf0, 0x1b, 0x1b, 0xe8, 0x0d, 0x0e, - 0xfc, 0xc6, 0x06, 0x7a, 0x83, 0x03, 0xbf, 0xb1, 0x81, 0xdf, 0xd8, 0x94, 0xfc, 0xfe, 0xc5, 0x84, - 0x97, 0xf3, 0x57, 0x13, 0x1e, 0xf7, 0x99, 0x09, 0x8f, 0xfb, 0xdc, 0x84, 0xc7, 0x7d, 0x61, 0xc2, - 0xe3, 0xbe, 0x34, 0xe1, 0x71, 0x5f, 0x99, 0xf0, 0xb8, 0xaf, 0x4d, 0x78, 0xdc, 0x37, 0x26, 0x3c, - 0xee, 0x6f, 0x26, 0x3c, 0xee, 0xef, 0x26, 0xab, 0x4a, 0xc1, 0xaf, 0xad, 0x97, 0x0b, 0xb6, 0xf5, - 0x72, 0xc1, 0xb6, 0x5e, 0x2e, 0xd8, 0xd6, 0xcb, 0x05, 0xdb, 0x7a, 0xb9, 0x60, 0x5b, 0x2f, 0x17, - 0x6c, 0xeb, 0xe5, 0x82, 0x6d, 0xbd, 0x5c, 0xb0, 0xad, 0x97, 0x0b, 0xb6, 0xf5, 0x72, 0xc1, 0xb6, - 0x5e, 0x43, 0xb0, 0xef, 0xd7, 0xd3, 0x4b, 0x05, 0x7b, 0x7a, 0xa9, 0x60, 0x4f, 0x2f, 0x15, 0xec, - 0xe9, 0xa5, 0x82, 0x3d, 0xbd, 0x54, 0xb0, 0xa7, 0x97, 0x0a, 0xf6, 0xf4, 0x52, 0xc1, 0x9e, 0x5e, - 0x2a, 0xd8, 0xd3, 0x4b, 0x05, 0x7b, 0x7a, 0xa9, 0x60, 0x4f, 0xaf, 0x2e, 0x18, 0x7e, 0xe1, 0x17, - 0x7e, 0x43, 0xfb, 0xd5, 0xb2, 0x69, 0x7e, 0xb5, 0x38, 0xcd, 0xaf, 0x16, 0xa7, 0xf9, 0xd5, 0xe2, - 0x34, 0xbf, 0x5a, 0x9c, 0xe6, 0x57, 0x8b, 0xd3, 0xfc, 0x6a, 0x71, 0x9a, 0x5f, 0x2d, 0x4e, 0xf3, - 0xab, 0xc5, 0x69, 0x7e, 0xb5, 0x38, 0xcd, 0xaf, 0x16, 0x07, 0xbf, 0xf0, 0x5b, 0xf2, 0xbb, 0x2c, - 0x8b, 0x9e, 0x00, 0xbf, 0x56, 0x42, 0x38, 0xbf, 0xcb, 0x93, 0x2c, 0xe1, 0x01, 0xd5, 0xc8, 0x02, - 0x2d, 0xbf, 0xb2, 0x3c, 0xd3, 0xef, 0xb2, 0xb0, 0x50, 0xdb, 0x2f, 0x0f, 0x74, 0xfc, 0xb2, 0x0d, - 0x5b, 0x7e, 0xf7, 0x88, 0xe7, 0x82, 0xe7, 0x97, 0xee, 0xbf, 0x82, 0xdf, 0x3d, 0xd4, 0xf2, 0xbb, - 0x05, 0x6c, 0xef, 0x1d, 0xfc, 0xb2, 0xfd, 0xec, 0xf8, 0x65, 0xf5, 0x33, 0xfd, 0x8a, 0x40, 0xc7, - 0x2f, 0x2b, 0xcf, 0xf3, 0x4b, 0xbf, 0x96, 0xeb, 0x77, 0x55, 0x13, 0x3e, 0x48, 0x1a, 0xc5, 0x86, - 0x5f, 0xd4, 0xef, 0x1e, 0x37, 0xd9, 0xef, 0xfe, 0x6e, 0xf9, 0x95, 0xfb, 0xa5, 0xe0, 0x77, 0x7f, - 0x9f, 0xe5, 0x57, 0xd6, 0xef, 0x35, 0xfd, 0xa6, 0x12, 0xe1, 0x37, 0xa0, 0x5f, 0x52, 0x60, 0xbb, - 0xdf, 0x8f, 0xc2, 0x52, 0x81, 0x8d, 0x7e, 0x85, 0x8d, 0xb2, 0xdf, 0x6d, 0x61, 0x92, 0xdf, 0xac, - 0x7e, 0xaf, 0xe8, 0x97, 0x96, 0x37, 0xd9, 0x6f, 0xe9, 0xfa, 0x0b, 0xbf, 0xed, 0x7e, 0x59, 0x1d, - 0x27, 0xfa, 0x65, 0x9b, 0x9e, 0xe9, 0x97, 0x6e, 0xb8, 0xa2, 0xff, 0x2c, 0x13, 0x3e, 0x38, 0xe3, - 0x97, 0x15, 0x38, 0xd5, 0xef, 0xaa, 0x24, 0x48, 0x6a, 0xfd, 0x8a, 0x0b, 0xfa, 0x7b, 0x9c, 0xbf, - 0xc9, 0x5b, 0xf8, 0xf3, 0xf7, 0x98, 0xdf, 0x38, 0xd7, 0xdf, 0x97, 0xf6, 0xdb, 0xf1, 0xfa, 0x2b, - 0xda, 0x3f, 0xf8, 0xbd, 0xdc, 0xef, 0x4a, 0x05, 0xb7, 0xfa, 0x95, 0xde, 0x70, 0x7f, 0x34, 0xc8, - 0xaf, 0x68, 0x27, 0x4b, 0xf7, 0x47, 0xbd, 0xee, 0x7f, 0xe1, 0xf7, 0x05, 0xfd, 0x12, 0xc1, 0x93, - 0xfd, 0x96, 0xfa, 0x57, 0x59, 0xe0, 0xab, 0x8e, 0x4f, 0xce, 0x6f, 0x9f, 0x17, 0x76, 0x9f, 0x52, - 0x1e, 0x9f, 0x5c, 0x78, 0x82, 0xa4, 0xfa, 0xfe, 0x88, 0x73, 0xeb, 0xe7, 0x0b, 0xab, 0x9a, 0xf0, - 0x41, 0xfe, 0x7c, 0xe1, 0x19, 0x3d, 0xf1, 0xfa, 0xcb, 0xbe, 0x6f, 0xc5, 0xf3, 0x85, 0x85, 0x25, - 0x48, 0x3a, 0xfb, 0x95, 0xe0, 0xf9, 0xe0, 0x7d, 0x9e, 0x0f, 0x52, 0xe0, 0x17, 0x7e, 0x95, 0x04, - 0xf8, 0xd5, 0x13, 0x2e, 0xf5, 0x6b, 0x92, 0xe2, 0xfe, 0xea, 0x92, 0xe2, 0x3e, 0x73, 0x49, 0x71, - 0x9f, 0xbb, 0xa4, 0xb8, 0x2f, 0x5c, 0x52, 0xdc, 0x97, 0x2e, 0x29, 0xee, 0x2b, 0x97, 0x14, 0xf7, - 0xb5, 0x4b, 0x8a, 0xfb, 0xc6, 0x45, 0x68, 0x34, 0x11, 0x1a, 0x4d, 0xe0, 0x17, 0x7e, 0xe1, 0xf7, - 0x9d, 0xfc, 0x62, 0x7e, 0x8a, 0xaa, 0x37, 0xcc, 0xfc, 0x14, 0xcc, 0x2f, 0xd3, 0xf5, 0x86, 0x99, - 0x5f, 0x06, 0x6e, 0x0e, 0xfc, 0xc6, 0x06, 0x7e, 0x63, 0x03, 0xbf, 0xb1, 0x81, 0xdf, 0xd8, 0xc0, - 0x6f, 0x6c, 0xe0, 0x37, 0x36, 0xf0, 0x1b, 0x1b, 0xf8, 0x8d, 0x0d, 0xfc, 0xc6, 0xa6, 0xe4, 0xf7, - 0x7f, 0x8d, 0x5c, 0xf5, 0xbd, 0xa2, 0xf2, 0xad, 0x89, 0x1e, 0x5f, 0xf0, 0xdb, 0xaa, 0x17, 0x82, - 0xfb, 0x62, 0xeb, 0x35, 0x04, 0xfb, 0x7e, 0xdb, 0xf5, 0x42, 0x70, 0x4f, 0x3c, 0xbd, 0xba, 0x60, - 0xf8, 0xbd, 0x13, 0xf0, 0x1b, 0x9b, 0x21, 0x7e, 0xcf, 0x57, 0x07, 0x7e, 0x3b, 0x63, 0x6a, 0x84, - 0xdf, 0x10, 0xc0, 0x6f, 0x6c, 0x88, 0x46, 0x3e, 0x0f, 0x03, 0x7e, 0x43, 0x30, 0xd4, 0xaf, 0x9c, - 0x0b, 0xb4, 0xad, 0xb5, 0xab, 0x03, 0xbf, 0x9d, 0x19, 0xec, 0x57, 0x2b, 0x00, 0x7e, 0x27, 0x02, - 0xbf, 0xb1, 0x99, 0xe5, 0x37, 0x35, 0xd4, 0xf4, 0x7d, 0x59, 0xc5, 0xec, 0x46, 0xf8, 0xed, 0xcc, - 0x8c, 0xeb, 0xef, 0x63, 0x71, 0x7b, 0x59, 0xc5, 0x0a, 0xb6, 0x59, 0xf8, 0xed, 0xcc, 0xbc, 0xf3, - 0x77, 0x35, 0xfd, 0xae, 0x46, 0x76, 0xd0, 0xce, 0x85, 0x7e, 0x9f, 0xe7, 0x36, 0xfc, 0x8e, 0xe4, - 0xda, 0xf3, 0x57, 0x04, 0xc1, 0x6f, 0x77, 0xd0, 0x3e, 0xc7, 0x66, 0xd6, 0xf8, 0x06, 0xf1, 0xbb, - 0xf2, 0x7e, 0x33, 0xfc, 0x8e, 0x04, 0xe3, 0x93, 0xb1, 0x81, 0xdf, 0xd8, 0x70, 0xbf, 0xe4, 0x86, - 0x15, 0x7e, 0x43, 0x80, 0xe7, 0x83, 0xb1, 0x81, 0xdf, 0xd8, 0xc0, 0x6f, 0x6c, 0x86, 0xf8, 0x6d, - 0x64, 0xcc, 0x37, 0x7d, 0x4f, 0xbe, 0x75, 0xd1, 0x72, 0xc0, 0xef, 0x9d, 0x80, 0xdf, 0xd8, 0xf4, - 0xf6, 0x8b, 0xf9, 0x29, 0x2f, 0xc6, 0x51, 0xbd, 0x98, 0x5f, 0x76, 0x33, 0x0e, 0xea, 0xc5, 0xfc, - 0xd0, 0xe0, 0xc0, 0x6f, 0x6c, 0xe0, 0x37, 0x36, 0xf0, 0x1b, 0x1b, 0xf8, 0x8d, 0xcd, 0x0b, 0xf8, - 0xf5, 0x7e, 0x41, 0x2d, 0xff, 0xdf, 0x1b, 0x2f, 0x26, 0x8f, 0xac, 0xc8, 0xbb, 0x97, 0xa0, 0x4c, - 0xcc, 0xb0, 0x72, 0xf3, 0x04, 0x2d, 0x6f, 0x21, 0x4b, 0x71, 0x0b, 0xfd, 0x78, 0x75, 0xbf, 0x35, - 0x8e, 0x9a, 0xfd, 0xea, 0xf9, 0xeb, 0xfc, 0x5a, 0xdb, 0xae, 0x29, 0xeb, 0x2d, 0xfc, 0x16, 0x8e, - 0xfe, 0x3a, 0xbf, 0xd9, 0x4f, 0x83, 0x6a, 0xf3, 0x92, 0x38, 0xf8, 0x1d, 0x42, 0xf2, 0x4b, 0x5a, - 0x3a, 0xba, 0x24, 0x56, 0xe4, 0x0d, 0xe2, 0xa7, 0xff, 0xf1, 0x8b, 0x44, 0xae, 0x69, 0xaf, 0x57, - 0x34, 0x9d, 0x6b, 0x26, 0x8c, 0xb7, 0x07, 0x6c, 0xaa, 0xc6, 0xf6, 0x53, 0x33, 0x35, 0xaf, 0xf2, - 0x83, 0x61, 0xad, 0xce, 0xd9, 0x77, 0x1b, 0xc9, 0xe5, 0x7e, 0x55, 0x33, 0xf6, 0xef, 0x33, 0xf9, - 0x6f, 0xfb, 0xf6, 0x22, 0x2c, 0xbf, 0x32, 0x54, 0xee, 0x77, 0xb2, 0x96, 0xd4, 0x47, 0x2d, 0x23, - 0xfb, 0x61, 0x61, 0x96, 0x57, 0x56, 0xb8, 0x58, 0xa9, 0x17, 0xf0, 0xfb, 0xdf, 0x46, 0x8a, 0x15, - 0xd0, 0x77, 0xc2, 0xfe, 0xb1, 0xd2, 0xef, 0xe6, 0xb8, 0x14, 0xea, 0xd5, 0x43, 0x3d, 0xc8, 0x84, - 0x5f, 0x52, 0x31, 0x23, 0xaf, 0x58, 0xec, 0xed, 0xf7, 0x3b, 0x13, 0x3d, 0xbe, 0xe0, 0xb7, 0x55, - 0x6f, 0x59, 0xf0, 0x22, 0x9a, 0x2b, 0xd9, 0xb2, 0x56, 0xfa, 0x5d, 0xf5, 0x52, 0x64, 0xa8, 0x71, - 0xfe, 0xa6, 0x8c, 0x6b, 0x4a, 0x16, 0x9f, 0x1d, 0xbf, 0xf2, 0xa4, 0x25, 0x8b, 0x9d, 0xfd, 0xda, - 0x7a, 0x0d, 0xc1, 0xbe, 0xdf, 0x76, 0xbd, 0x25, 0xc1, 0xba, 0xc4, 0xc3, 0xed, 0x73, 0xb5, 0xdf, - 0xba, 0x4a, 0x64, 0x6b, 0x95, 0x04, 0x2d, 0x8a, 0xb7, 0xd5, 0xfd, 0xfd, 0x7a, 0x7a, 0x75, 0xc1, - 0x61, 0xfc, 0x2a, 0x0d, 0xec, 0x79, 0xbf, 0x66, 0xfb, 0x6c, 0x6f, 0xfc, 0xf9, 0x01, 0x7e, 0x39, - 0xa6, 0x44, 0xab, 0x17, 0xcb, 0x5a, 0x74, 0x5e, 0x46, 0x96, 0x5e, 0xdb, 0x7f, 0x66, 0x81, 0xc5, - 0xfe, 0x33, 0xd9, 0x54, 0xb6, 0x11, 0xb6, 0xc0, 0xfc, 0x76, 0xe9, 0x3f, 0x0f, 0xf1, 0x7b, 0xb0, - 0x0e, 0x84, 0xc6, 0xec, 0x0e, 0xc7, 0xaf, 0x5c, 0x73, 0x18, 0x5c, 0x2f, 0x53, 0x63, 0x20, 0xbf, - 0xb5, 0x8d, 0xee, 0x15, 0x8c, 0xae, 0xd6, 0x3b, 0xf8, 0x5d, 0x6b, 0x1b, 0xdd, 0xe9, 0x8c, 0xaf, - 0xd6, 0x53, 0x23, 0xdd, 0xd0, 0x63, 0x39, 0x92, 0xdf, 0x37, 0x66, 0xb0, 0x5f, 0xf3, 0xd6, 0xf1, - 0x99, 0x2a, 0xd7, 0xc0, 0x6f, 0x67, 0x92, 0xdf, 0xd4, 0x8f, 0xeb, 0xea, 0x37, 0xbd, 0xe6, 0x0c, - 0xf4, 0x5b, 0xee, 0x08, 0xdb, 0x87, 0x5e, 0xd5, 0xfd, 0xd1, 0x22, 0x16, 0x3a, 0xd5, 0xaa, 0x37, - 0x71, 0xfd, 0x3a, 0xdb, 0x2d, 0x54, 0x6d, 0x98, 0xdf, 0x93, 0xf7, 0xb0, 0x2d, 0x10, 0xbf, 0xfc, - 0xe6, 0xad, 0xbf, 0xdf, 0x7c, 0x1b, 0xe4, 0x76, 0x4f, 0xcf, 0x7e, 0x9e, 0xf2, 0xae, 0x6c, 0xf5, - 0xbb, 0xd0, 0xf7, 0x5e, 0x95, 0xea, 0xce, 0x70, 0xbf, 0xfc, 0xe6, 0x9f, 0xbf, 0x2c, 0x8b, 0xfc, - 0xb2, 0xd7, 0xf8, 0xf5, 0x86, 0x42, 0xac, 0xcc, 0xc2, 0x2f, 0x1f, 0x82, 0xc8, 0x87, 0x58, 0xc8, - 0x26, 0xc9, 0x32, 0xdb, 0x7a, 0xee, 0xa0, 0x43, 0xc7, 0x9f, 0xfa, 0xdd, 0x37, 0x32, 0xae, 0x7d, - 0xe6, 0xcd, 0x66, 0x5e, 0xfb, 0x4b, 0xfc, 0xea, 0x43, 0x81, 0x29, 0x4e, 0xb9, 0x52, 0x2f, 0xfb, - 0x03, 0x46, 0x65, 0x20, 0xcd, 0x2c, 0xcc, 0xf4, 0x2b, 0x57, 0x88, 0xa4, 0x06, 0x26, 0xfa, 0x25, - 0xdb, 0xd8, 0x53, 0x65, 0xf5, 0x07, 0xfa, 0x95, 0x92, 0x84, 0x35, 0xd3, 0xaf, 0x55, 0xbc, 0xe5, - 0x97, 0x9e, 0xd3, 0x59, 0x15, 0xc4, 0x32, 0xcf, 0x66, 0x26, 0x35, 0x40, 0xee, 0x8f, 0xe8, 0xdf, - 0x00, 0xbf, 0x4a, 0xad, 0x5f, 0xe0, 0xfc, 0xdd, 0xeb, 0x71, 0xf8, 0xfc, 0x7d, 0xd6, 0xde, 0xf5, - 0x9b, 0x1d, 0x52, 0x62, 0x99, 0x6d, 0xce, 0xba, 0x92, 0x35, 0x71, 0x99, 0x5f, 0x76, 0xf8, 0x5b, - 0xd9, 0xcf, 0x73, 0xc4, 0xaf, 0xdf, 0x3e, 0x9b, 0x99, 0x2d, 0xbf, 0xd9, 0xbb, 0x5a, 0x29, 0x5d, - 0xa2, 0x75, 0x26, 0x9c, 0x86, 0x8e, 0x6f, 0x2c, 0x5b, 0x8d, 0x7b, 0xfa, 0x15, 0xbd, 0x06, 0xd6, - 0x6d, 0x48, 0xfb, 0xc7, 0xc8, 0x7e, 0x9e, 0xf2, 0xee, 0x69, 0xf6, 0x6b, 0xe6, 0x63, 0xef, 0xf9, - 0xf9, 0x6b, 0xf8, 0xb5, 0x4e, 0x82, 0x36, 0x06, 0xfb, 0x3d, 0xca, 0xd4, 0xf1, 0x0d, 0x2d, 0xb8, - 0x9c, 0x2f, 0x65, 0x96, 0x8d, 0xf2, 0x42, 0x13, 0xe5, 0xca, 0xac, 0xf4, 0xac, 0x3b, 0x22, 0x2a, - 0x21, 0xea, 0x78, 0x12, 0x36, 0x3e, 0x49, 0x5f, 0x6f, 0xee, 0x17, 0x3c, 0x80, 0xdf, 0xd8, 0xbc, - 0xc5, 0xf3, 0xc1, 0x37, 0x06, 0x7e, 0x63, 0x03, 0xbf, 0xb1, 0x19, 0xe2, 0xb7, 0x91, 0x31, 0xdf, - 0xb4, 0x8c, 0x79, 0xdf, 0xaa, 0x85, 0x6a, 0x1d, 0xed, 0x42, 0xc6, 0xaa, 0xbe, 0xb9, 0x1a, 0x50, - 0xd3, 0xa5, 0xd7, 0xf9, 0xce, 0x45, 0xcb, 0x11, 0xd7, 0x6f, 0xc5, 0xa0, 0x08, 0x8f, 0xac, 0x5b, - 0x7b, 0xac, 0xf4, 0x33, 0x25, 0x3b, 0xc0, 0x2f, 0x25, 0x1f, 0x70, 0x71, 0x02, 0x6b, 0xd7, 0xf2, - 0xd4, 0x9b, 0xfb, 0x9d, 0x30, 0x3f, 0x65, 0x24, 0x55, 0x83, 0x1b, 0xab, 0x31, 0x38, 0x92, 0x0f, - 0xcf, 0x59, 0xa3, 0xcf, 0x7c, 0x20, 0x8b, 0xb5, 0xf5, 0xd9, 0xb2, 0xcc, 0x7b, 0x90, 0xa3, 0x7a, - 0xaf, 0x9f, 0x5f, 0x36, 0x94, 0x7c, 0x47, 0x1a, 0xcf, 0x17, 0x94, 0xa7, 0x01, 0x72, 0xe4, 0x51, - 0x1e, 0x2b, 0x54, 0x1c, 0x7f, 0x25, 0xed, 0x86, 0x3e, 0xe8, 0xd9, 0x30, 0x90, 0x75, 0x50, 0xef, - 0xf5, 0xf3, 0x43, 0x87, 0x52, 0xb9, 0x23, 0xe5, 0xb9, 0x68, 0xf8, 0x55, 0xf2, 0x25, 0x8b, 0x62, - 0x71, 0x94, 0xdf, 0xa3, 0x84, 0xf6, 0xab, 0xb4, 0xcf, 0xc6, 0xf9, 0xcb, 0x17, 0x95, 0x06, 0xd7, - 0xec, 0x0a, 0x6f, 0xaf, 0xf0, 0x3b, 0x9d, 0x33, 0xfd, 0x2b, 0xfd, 0xfc, 0x15, 0x41, 0x59, 0x2a, - 0x6f, 0xab, 0xe1, 0x77, 0x0a, 0xa7, 0xee, 0x8f, 0xaa, 0xdb, 0x67, 0xf8, 0xbd, 0x18, 0xde, 0xfb, - 0x29, 0x84, 0xf2, 0xc7, 0x7b, 0xc9, 0xda, 0x96, 0xa8, 0x94, 0xc3, 0x9a, 0x79, 0xb6, 0xc0, 0xfc, - 0xf6, 0xed, 0x3f, 0x1f, 0x26, 0xae, 0xdf, 0xa9, 0x4c, 0x34, 0x76, 0x0c, 0xf8, 0xed, 0xc1, 0xcb, - 0xea, 0x85, 0xdf, 0x0e, 0x9c, 0x1f, 0x4f, 0x1e, 0x0f, 0xfc, 0xc6, 0x06, 0x7e, 0x63, 0x53, 0xf2, - 0xfb, 0x9f, 0x46, 0x4e, 0x55, 0xca, 0x1e, 0x42, 0xa4, 0x6b, 0x3b, 0xb6, 0x8a, 0x55, 0xcf, 0xfa, - 0x68, 0xf8, 0xf9, 0xd4, 0x46, 0xbe, 0x37, 0xd1, 0xe3, 0x0b, 0x7e, 0x5b, 0xf5, 0x9e, 0x13, 0x6c, - 0xdc, 0x25, 0xaa, 0x77, 0xa0, 0x3d, 0x38, 0x7a, 0x57, 0x7a, 0x9d, 0x5f, 0x5b, 0xaf, 0x21, 0xd8, - 0xf7, 0xdb, 0xae, 0xf7, 0x94, 0xe0, 0x3a, 0xbf, 0xfd, 0xb8, 0x8d, 0x5f, 0x4f, 0xaf, 0x2e, 0xf8, - 0x86, 0x7e, 0xc5, 0x80, 0xc3, 0x42, 0xc7, 0x0d, 0xf8, 0x22, 0x79, 0xaf, 0xd8, 0xde, 0xb6, 0xec, - 0x94, 0x56, 0x8e, 0x5f, 0x0f, 0x0c, 0x8b, 0x1e, 0xe7, 0x5d, 0xfc, 0xca, 0x28, 0x7b, 0x51, 0x7b, - 0xaa, 0x77, 0xe4, 0xf9, 0x42, 0x36, 0xa8, 0x65, 0xc6, 0x53, 0xb7, 0xa3, 0x4e, 0xe1, 0x21, 0x7e, - 0xcf, 0x57, 0xe7, 0xbc, 0x5f, 0xf2, 0x3c, 0x56, 0x3e, 0x67, 0x15, 0x03, 0x8f, 0x45, 0xbf, 0x55, - 0xdb, 0xd3, 0x3e, 0xab, 0x6a, 0x65, 0xbc, 0x12, 0x74, 0xa8, 0xab, 0x76, 0x0c, 0x53, 0xe3, 0xdd, - 0xfc, 0xa6, 0xd7, 0x6c, 0x75, 0xa5, 0x5f, 0xe3, 0xa9, 0x5e, 0xe9, 0xfc, 0x5d, 0xe9, 0xa1, 0xc5, - 0x8b, 0x53, 0xe3, 0x75, 0xbf, 0x07, 0xbe, 0xeb, 0x21, 0xe0, 0x57, 0xe6, 0x3d, 0x70, 0xfe, 0x4a, - 0x55, 0xe2, 0xd4, 0xad, 0x6a, 0x9f, 0x1f, 0xab, 0x70, 0xfe, 0xfa, 0x74, 0xf2, 0x7b, 0xb0, 0x7d, - 0xb6, 0xfd, 0xbe, 0xd6, 0xf5, 0xf7, 0xb1, 0xd9, 0xbd, 0x61, 0xe1, 0x09, 0x92, 0x3a, 0xbf, 0xea, - 0xfd, 0x7f, 0xb6, 0x26, 0x8b, 0x98, 0xe1, 0x97, 0xd6, 0x4d, 0xed, 0x3f, 0xd7, 0x6d, 0x50, 0x29, - 0xc3, 0xeb, 0x3f, 0x8b, 0xa8, 0x6c, 0x93, 0x83, 0x04, 0x8f, 0xf3, 0xbb, 0xda, 0xfb, 0xdb, 0xfc, - 0xdc, 0x7a, 0xfa, 0xd7, 0xa3, 0x9f, 0x5b, 0xfd, 0x0a, 0x7d, 0x15, 0x98, 0xdf, 0x87, 0x93, 0x7e, - 0x7e, 0x8b, 0x3e, 0x2f, 0xf1, 0x6b, 0x5f, 0x30, 0xbb, 0x94, 0xfc, 0x5a, 0x4c, 0xf1, 0xcb, 0x3b, - 0x98, 0x6c, 0x5b, 0xa2, 0xc5, 0x9a, 0x72, 0xfe, 0xb2, 0x1b, 0xa8, 0x9e, 0x5d, 0x9b, 0x97, 0xf7, - 0xbb, 0x0c, 0xf1, 0x5b, 0xe8, 0x86, 0xd0, 0xc5, 0x69, 0xed, 0xf3, 0xbb, 0x00, 0xbf, 0x57, 0x30, - 0xef, 0x44, 0xa7, 0x7e, 0xf7, 0x3f, 0x96, 0x20, 0x39, 0xe3, 0x97, 0xf7, 0x4d, 0xed, 0xcf, 0xe7, - 0xfd, 0xe6, 0x7b, 0x6c, 0x1f, 0x97, 0x18, 0xd0, 0x93, 0x52, 0x0b, 0x32, 0xfa, 0xf0, 0x76, 0x7e, - 0xf5, 0x1e, 0xa3, 0x72, 0x53, 0xb5, 0xdf, 0x64, 0x8e, 0x5f, 0xf9, 0xbd, 0xac, 0xcf, 0x3d, 0xfd, - 0x2a, 0x6b, 0x5f, 0xc5, 0xaf, 0xbe, 0x73, 0x0e, 0x6c, 0xaa, 0xfe, 0x9b, 0x30, 0xbf, 0xf4, 0x88, - 0xea, 0x78, 0x7f, 0x34, 0xa3, 0x7d, 0x6e, 0xdc, 0x0d, 0x3d, 0xb6, 0xf6, 0x66, 0x7e, 0x49, 0xdb, - 0x63, 0xf5, 0x9f, 0xb7, 0x86, 0xa6, 0x43, 0xff, 0xd9, 0xdd, 0x0d, 0x62, 0xe8, 0x42, 0x1d, 0x9b, - 0x60, 0x9d, 0xfa, 0x23, 0x8d, 0x26, 0xbf, 0x19, 0x90, 0xb7, 0x04, 0x5a, 0xa9, 0xf4, 0xb0, 0xa7, - 0x6b, 0xd8, 0xd5, 0x8a, 0xf5, 0xf0, 0xb3, 0xde, 0xbe, 0xbc, 0xef, 0x30, 0xe1, 0x7e, 0x49, 0x8e, - 0x7b, 0x8d, 0x4f, 0x16, 0xfd, 0x92, 0x8f, 0x7a, 0xcb, 0xb1, 0x2f, 0xca, 0x5d, 0x96, 0x5f, 0xc6, - 0x73, 0x35, 0xb2, 0x9c, 0xac, 0x34, 0x7a, 0x78, 0xad, 0x54, 0x17, 0x5d, 0x93, 0x5e, 0xb7, 0xbf, - 0x72, 0x6d, 0x4b, 0x67, 0x72, 0x3c, 0xbf, 0xfc, 0x80, 0x67, 0x89, 0x95, 0x7e, 0x8f, 0x6c, 0xad, - 0xec, 0x57, 0x66, 0x90, 0x27, 0xff, 0xbe, 0x4e, 0x2c, 0x56, 0xfa, 0x2d, 0x20, 0xfc, 0xae, 0xf7, - 0xf7, 0xab, 0xac, 0xad, 0xf3, 0xbb, 0x6c, 0x2d, 0xac, 0x2c, 0xa3, 0x70, 0xfe, 0xf2, 0xd6, 0xdf, - 0x28, 0x2d, 0x3f, 0xe8, 0x58, 0x51, 0xa7, 0xfc, 0x9e, 0x68, 0x9f, 0xdf, 0xd9, 0xaf, 0x5b, 0x92, - 0xb9, 0x35, 0xda, 0x70, 0xc8, 0x57, 0x51, 0x9a, 0x9a, 0x94, 0x2e, 0x21, 0xa4, 0x92, 0x95, 0x7e, - 0x2b, 0xaa, 0x1b, 0xe4, 0xf9, 0x60, 0x27, 0xbf, 0x63, 0xdb, 0xe7, 0xde, 0x7e, 0x6b, 0x1a, 0xe9, - 0x38, 0x7e, 0xb3, 0x46, 0x74, 0x35, 0xfc, 0xae, 0xa5, 0xfe, 0xf3, 0xb1, 0xad, 0xb1, 0x12, 0xe8, - 0x2b, 0x2b, 0x8d, 0x84, 0x8b, 0x52, 0x78, 0x55, 0x15, 0xbf, 0x7d, 0xfa, 0xcf, 0xd5, 0x09, 0x15, - 0x7e, 0x1b, 0xf1, 0x6b, 0xdc, 0x07, 0xb5, 0x85, 0x9d, 0xbc, 0xe1, 0xaa, 0xf5, 0x8d, 0x7c, 0xef, - 0xa2, 0xe5, 0xb8, 0xbd, 0x5f, 0xbd, 0xc5, 0xbb, 0x98, 0x51, 0x95, 0x78, 0x43, 0xbf, 0xab, 0xda, - 0xe2, 0x5d, 0xca, 0xb8, 0x4a, 0xf4, 0xf6, 0x7b, 0xd1, 0xfc, 0x14, 0x60, 0x71, 0x54, 0xef, 0x6b, - 0xce, 0x2f, 0x03, 0x26, 0x07, 0xf5, 0x62, 0x7e, 0x68, 0x70, 0xe0, 0x37, 0x36, 0xf0, 0x1b, 0x1b, - 0xf8, 0x8d, 0x0d, 0xfc, 0xc6, 0x06, 0x7e, 0x63, 0x03, 0xbf, 0xb1, 0x81, 0xdf, 0xd8, 0xc0, 0x6f, - 0x6c, 0xe0, 0x37, 0x36, 0x25, 0xbf, 0xff, 0x6e, 0xe4, 0xaa, 0xef, 0x15, 0x95, 0x1f, 0x4c, 0xf4, - 0xf8, 0x82, 0xdf, 0x56, 0xbd, 0x10, 0xdc, 0x17, 0x5b, 0xaf, 0x21, 0xd8, 0xf7, 0xdb, 0xae, 0x17, - 0x82, 0x7b, 0xe2, 0xe9, 0xd5, 0x05, 0xc3, 0xef, 0x9d, 0x80, 0xdf, 0xd8, 0x0c, 0xf1, 0x7b, 0xbe, - 0x3a, 0xf0, 0xdb, 0x19, 0x53, 0x23, 0xfc, 0x86, 0x00, 0x7e, 0x63, 0x43, 0x35, 0xb2, 0xdf, 0xe3, - 0x36, 0xfb, 0xd5, 0x7e, 0x8f, 0x5c, 0x04, 0x7e, 0x3b, 0x93, 0x34, 0xa6, 0x9f, 0x6b, 0x8b, 0x04, - 0x41, 0xa5, 0xdf, 0xec, 0xd7, 0xdc, 0x55, 0xc0, 0x6f, 0x67, 0x76, 0x8d, 0xf4, 0x27, 0xa3, 0x2c, - 0x41, 0x02, 0xbf, 0x77, 0x62, 0xb0, 0xdf, 0xbd, 0x48, 0x39, 0x0b, 0x44, 0x5f, 0x82, 0xdf, 0xde, - 0x6c, 0x1a, 0xc9, 0xa5, 0xf2, 0xb1, 0xd8, 0xe5, 0xfa, 0xbb, 0x97, 0x58, 0xf7, 0x02, 0xbf, 0xdd, - 0x19, 0xe7, 0x97, 0x14, 0x2a, 0xa6, 0x81, 0x38, 0x1f, 0xe1, 0xb7, 0x33, 0x43, 0xfd, 0xaa, 0x13, - 0x1b, 0xb3, 0x69, 0x7a, 0x74, 0xe6, 0x1f, 0xfc, 0x76, 0x66, 0x98, 0x5f, 0x75, 0x36, 0xac, 0x3a, - 0x6f, 0x95, 0x5e, 0xa9, 0xe1, 0xb7, 0x33, 0xd7, 0xfa, 0xc5, 0xf5, 0x77, 0x34, 0x63, 0xfb, 0x57, - 0xde, 0x84, 0x6a, 0xf4, 0x9f, 0x67, 0x30, 0xec, 0xfe, 0x88, 0x52, 0x7f, 0x17, 0x0c, 0xbf, 0x9d, - 0x81, 0xdf, 0xd8, 0x0c, 0x1b, 0x9f, 0xa4, 0xc0, 0xef, 0x65, 0x8c, 0x7b, 0xbe, 0x70, 0x0a, 0xf8, - 0xed, 0x0c, 0x9e, 0x0f, 0xc6, 0x06, 0x7e, 0x63, 0x03, 0xbf, 0xb1, 0x19, 0xe2, 0xb7, 0x91, 0x31, - 0xdf, 0xf4, 0x3d, 0xf9, 0xc1, 0x45, 0xcb, 0x01, 0xbf, 0x77, 0x02, 0x7e, 0x63, 0xd3, 0xdb, 0x2f, - 0xe6, 0xa7, 0xbc, 0x18, 0x47, 0xf5, 0x62, 0x7e, 0xd9, 0xcd, 0x38, 0xa8, 0x17, 0xf3, 0x43, 0x83, - 0x03, 0xbf, 0xb1, 0x81, 0xdf, 0xd8, 0xc0, 0x6f, 0x6c, 0xe0, 0x37, 0x36, 0xf0, 0x1b, 0x1b, 0xf8, - 0x8d, 0x0d, 0xfc, 0xc6, 0x06, 0x7e, 0x63, 0x03, 0xbf, 0xb1, 0x29, 0xf9, 0xfd, 0x97, 0x09, 0x2f, - 0xe7, 0x0f, 0x13, 0x1e, 0xf7, 0xbb, 0x09, 0x8f, 0xfb, 0xcd, 0x84, 0xc7, 0xfd, 0x6a, 0xc2, 0xe3, - 0x7e, 0x31, 0xe1, 0x71, 0x3f, 0x9b, 0xf0, 0xb8, 0x9f, 0x4c, 0x78, 0xdc, 0x8f, 0x26, 0x3c, 0xee, - 0x9f, 0x26, 0x3c, 0xee, 0x1f, 0x26, 0xab, 0x4a, 0xc1, 0xaf, 0xad, 0x97, 0x0b, 0xb6, 0xf5, 0x72, - 0xc1, 0xb6, 0x5e, 0x2e, 0xd8, 0xd6, 0xcb, 0x05, 0xdb, 0x7a, 0xb9, 0x60, 0x5b, 0x2f, 0x17, 0x6c, - 0xeb, 0xe5, 0x82, 0x6d, 0xbd, 0x5c, 0xb0, 0xad, 0x97, 0x0b, 0xb6, 0xf5, 0x72, 0xc1, 0xb6, 0x5e, - 0x43, 0xb0, 0xef, 0xd7, 0xd3, 0x4b, 0x05, 0x7b, 0x7a, 0xa9, 0x60, 0x4f, 0x2f, 0x15, 0xec, 0xe9, - 0xa5, 0x82, 0x3d, 0xbd, 0x54, 0xb0, 0xa7, 0x97, 0x0a, 0xf6, 0xf4, 0x52, 0xc1, 0x9e, 0x5e, 0x2a, - 0xd8, 0xd3, 0x4b, 0x05, 0x7b, 0x7a, 0xa9, 0x60, 0x4f, 0xaf, 0x2e, 0x18, 0x7e, 0xe1, 0x17, 0x7e, - 0x43, 0xfb, 0xd5, 0xb2, 0x69, 0x7e, 0xb5, 0x38, 0xcd, 0xaf, 0x16, 0xa7, 0xf9, 0xd5, 0xe2, 0x34, - 0xbf, 0x5a, 0x9c, 0xe6, 0x57, 0x8b, 0xd3, 0xfc, 0x6a, 0x71, 0x9a, 0x5f, 0x2d, 0x4e, 0xf3, 0xab, - 0xc5, 0x69, 0x7e, 0xb5, 0x38, 0xcd, 0xaf, 0x16, 0x07, 0xbf, 0xf0, 0xeb, 0xf9, 0x5d, 0x08, 0x2c, - 0xe1, 0xc1, 0xa6, 0x91, 0xfe, 0x23, 0x0e, 0x0b, 0x4d, 0x78, 0xf2, 0xd4, 0x48, 0xff, 0xa5, 0xa5, - 0x47, 0x89, 0xaa, 0x5f, 0xfe, 0x3f, 0xb5, 0x7e, 0x7a, 0xb7, 0xfc, 0xca, 0x50, 0xcb, 0xaf, 0x9c, - 0x97, 0x65, 0xf8, 0x5d, 0xe4, 0xf7, 0x75, 0xfc, 0xb2, 0x79, 0x22, 0x96, 0x5f, 0x5a, 0x16, 0x4b, - 0x78, 0x40, 0x35, 0xb2, 0x40, 0xd3, 0xaf, 0x28, 0xb0, 0xd7, 0xf9, 0x5b, 0xf0, 0x9b, 0xed, 0x67, - 0xe3, 0xfc, 0x65, 0xc7, 0xc1, 0xb2, 0xbe, 0x9c, 0x5f, 0x56, 0x56, 0x96, 0x40, 0x35, 0x8a, 0x79, - 0x5e, 0x8e, 0x5f, 0x56, 0xa4, 0xe9, 0x57, 0x04, 0x7a, 0x7e, 0x69, 0x5c, 0x27, 0xbf, 0xfb, 0x11, - 0x63, 0xb6, 0xcf, 0xdb, 0x3f, 0xd7, 0xb0, 0xc8, 0x84, 0x4f, 0xec, 0x1a, 0xe9, 0x64, 0x61, 0x96, - 0xf0, 0xe0, 0x36, 0x7e, 0x65, 0x79, 0x05, 0xbf, 0xfb, 0xbb, 0xe5, 0x57, 0x96, 0x57, 0xf2, 0xbb, - 0xbd, 0xf7, 0xf1, 0x9b, 0x1a, 0x04, 0xfb, 0xfa, 0xfb, 0x11, 0x92, 0xf6, 0x8c, 0x79, 0xfd, 0xdd, - 0x8f, 0x83, 0x45, 0x24, 0x7c, 0xe2, 0xa9, 0x31, 0x05, 0x6d, 0x07, 0x8d, 0x79, 0xfd, 0x15, 0xc7, - 0x15, 0xfc, 0x3e, 0x39, 0xea, 0x57, 0x4f, 0xa0, 0x1a, 0xd9, 0x75, 0xc6, 0xee, 0x5f, 0x3d, 0x8f, - 0x83, 0x25, 0x4b, 0xf8, 0xe0, 0x4e, 0x7e, 0xd9, 0x6c, 0xd9, 0x46, 0xbf, 0xa4, 0xb4, 0xc7, 0xe2, - 0x54, 0xbf, 0x4b, 0x95, 0x5f, 0xb6, 0x5f, 0x9c, 0xfe, 0x33, 0xeb, 0x1f, 0xdc, 0xd5, 0x2f, 0x3f, - 0x9a, 0xef, 0xed, 0x97, 0x7e, 0x93, 0x0e, 0x7e, 0x59, 0x79, 0xc6, 0xfd, 0xd1, 0xd6, 0xd8, 0xef, - 0x8d, 0xbe, 0x7d, 0x7f, 0xc4, 0xaf, 0x0b, 0xd3, 0xfc, 0xd6, 0xf7, 0x9f, 0x59, 0x91, 0x2f, 0xea, - 0x57, 0x4f, 0x78, 0x6f, 0xbf, 0x2b, 0x3d, 0x89, 0x4b, 0xf7, 0x47, 0x8b, 0x4c, 0x78, 0x70, 0xda, - 0xef, 0x96, 0xa1, 0x83, 0x5f, 0xd6, 0x0e, 0xcd, 0x69, 0x9f, 0xef, 0xe2, 0x37, 0x1d, 0xab, 0x33, - 0xcf, 0x5f, 0xba, 0xff, 0xda, 0xfd, 0x2e, 0x9d, 0xfd, 0x2e, 0x4c, 0x88, 0x35, 0x7e, 0x45, 0xae, - 0xbd, 0x9f, 0xde, 0x9d, 0xf1, 0x2b, 0x76, 0x25, 0x9c, 0xed, 0xb7, 0x53, 0xff, 0x99, 0xf4, 0x22, - 0x2a, 0xdb, 0xe7, 0x2c, 0x41, 0x50, 0xeb, 0x97, 0xeb, 0x6d, 0xf7, 0x4b, 0xfa, 0x4c, 0x3c, 0xe1, - 0x13, 0xb7, 0xf1, 0x2b, 0xcb, 0xeb, 0x73, 0x7f, 0x94, 0x4e, 0xcd, 0x59, 0x7e, 0x85, 0xde, 0x66, - 0xbf, 0x8b, 0xf8, 0xc2, 0xf0, 0xcb, 0xee, 0x7f, 0xaf, 0xf0, 0xcb, 0xb2, 0x35, 0xfa, 0x25, 0x2a, - 0x1e, 0x4b, 0xe6, 0xf3, 0x05, 0xb1, 0x63, 0xbc, 0xe7, 0x0b, 0x74, 0xbb, 0xe6, 0xf3, 0x05, 0x71, - 0x21, 0x9c, 0x3c, 0x3e, 0x59, 0xf4, 0x2b, 0xcb, 0x9b, 0x79, 0xfe, 0xd2, 0x4b, 0x7a, 0x9b, 0x5f, - 0xd6, 0x1a, 0x7c, 0x5a, 0x9e, 0xe6, 0x57, 0xf4, 0xeb, 0x26, 0xdf, 0x1f, 0x95, 0xfd, 0x8a, 0xae, - 0xf6, 0xb4, 0xeb, 0xaf, 0x00, 0xcf, 0x07, 0x47, 0x3f, 0x1f, 0x2c, 0xf4, 0xaf, 0x04, 0xf0, 0x7b, - 0x37, 0xbf, 0x6a, 0x02, 0xfc, 0xea, 0x09, 0xf0, 0x0b, 0xbf, 0x1f, 0xbc, 0xa5, 0x5f, 0x93, 0x14, - 0xf7, 0x87, 0x4b, 0x8a, 0xfb, 0xdd, 0x25, 0xc5, 0xfd, 0xe6, 0x92, 0xe2, 0x7e, 0x75, 0x49, 0x71, - 0xbf, 0xb8, 0xa4, 0xb8, 0x9f, 0x5d, 0x52, 0xdc, 0x4f, 0x2e, 0x29, 0xee, 0x47, 0x17, 0xa1, 0xd1, - 0x44, 0x68, 0x34, 0x81, 0x5f, 0xf8, 0x85, 0xdf, 0x77, 0xf2, 0x8b, 0xf9, 0x29, 0xaa, 0xde, 0x30, - 0xf3, 0x53, 0x30, 0xbf, 0x4c, 0xd7, 0x1b, 0x66, 0x7e, 0x19, 0xb8, 0x39, 0xf0, 0x1b, 0x1b, 0xf8, - 0x8d, 0x8d, 0xe6, 0x17, 0x82, 0xc3, 0xa0, 0xea, 0x85, 0xdf, 0x30, 0xe8, 0x7e, 0x21, 0x38, 0x08, - 0x86, 0x5e, 0xf8, 0x0d, 0x82, 0xe5, 0x17, 0x82, 0x43, 0x60, 0xea, 0x85, 0xe1, 0x00, 0x78, 0x76, - 0x61, 0xf8, 0xee, 0x94, 0xec, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x5d, 0xf8, 0x3f, 0x67, 0xcc, 0x42, 0xb8 -}; - -#endif diff --git a/backends/psp/kbd_s_c.cpp b/backends/psp/kbd_s_c.cpp deleted file mode 100644 index cf745b64b0..0000000000 --- a/backends/psp/kbd_s_c.cpp +++ /dev/null @@ -1,206 +0,0 @@ -#ifndef __keyboard_symbols_compressed__ -#define __keyboard_symbols_compressed__ - -unsigned int size_keyboard_symbols_compressed = 3155; -unsigned char keyboard_symbols_compressed[] __attribute__((aligned(16))) = { - 0x78, 0x9c, 0xed, 0x9d, 0xe9, 0xb6, 0xac, 0x36, 0x0e, 0x46, 0xe9, 0xcc, 0xe9, 0x4c, 0xdd, 0x99, - 0xa7, 0xee, 0xf7, 0x7f, 0x42, 0xf2, 0x37, 0x2b, 0xe7, 0x9e, 0x02, 0x49, 0x96, 0x64, 0x1b, 0x0f, - 0x80, 0xf8, 0xf6, 0x5a, 0xa9, 0x43, 0x61, 0xd9, 0x18, 0x36, 0x18, 0x63, 0xca, 0x37, 0x7f, 0xfd, - 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x8d, 0x58, 0xc1, 0x8d, - 0x81, 0xdd, 0xe8, 0xc0, 0x6e, 0x74, 0xa0, 0x37, 0x38, 0xf0, 0x1b, 0x1b, 0xe8, 0x0d, 0x0e, 0xfc, - 0xc6, 0x06, 0x7a, 0x83, 0x03, 0xbf, 0xb1, 0x81, 0xdf, 0xd8, 0xe4, 0xfc, 0xfe, 0xcb, 0x84, 0x97, - 0xf3, 0x91, 0x09, 0x8f, 0xfb, 0xd8, 0x84, 0xc7, 0x7d, 0x62, 0xc2, 0xe3, 0x3e, 0x35, 0xe1, 0x71, - 0x9f, 0x99, 0xf0, 0xb8, 0xcf, 0x4d, 0x78, 0xdc, 0x17, 0x26, 0x3c, 0xee, 0x4b, 0x13, 0x1e, 0xf7, - 0x6f, 0x13, 0x1e, 0xf7, 0x95, 0xc9, 0xaa, 0x92, 0xf1, 0x6b, 0xeb, 0xe5, 0x82, 0x6d, 0xbd, 0x5c, - 0xb0, 0xad, 0x97, 0x0b, 0xb6, 0xf5, 0x72, 0xc1, 0xb6, 0x5e, 0x2e, 0xd8, 0xd6, 0xcb, 0x05, 0xdb, - 0x7a, 0xb9, 0x60, 0x5b, 0x2f, 0x17, 0x6c, 0xeb, 0xe5, 0x82, 0x6d, 0xbd, 0x5c, 0xb0, 0xad, 0xd7, - 0x10, 0xec, 0xfb, 0xf5, 0xf4, 0x52, 0xc1, 0x9e, 0x5e, 0x2a, 0xd8, 0xd3, 0x4b, 0x05, 0x7b, 0x7a, - 0xa9, 0x60, 0x4f, 0x2f, 0x15, 0xec, 0xe9, 0xa5, 0x82, 0x3d, 0xbd, 0x54, 0xb0, 0xa7, 0x97, 0x0a, - 0xf6, 0xf4, 0x52, 0xc1, 0x9e, 0x5e, 0x2a, 0xd8, 0xd3, 0xab, 0x0b, 0x86, 0x5f, 0xf8, 0x85, 0xdf, - 0xd0, 0x7e, 0xb5, 0x6c, 0x9a, 0x5f, 0x2d, 0x4e, 0xf3, 0xab, 0xc5, 0x69, 0x7e, 0xb5, 0x38, 0xcd, - 0xaf, 0x16, 0xa7, 0xf9, 0xd5, 0xe2, 0x34, 0xbf, 0x5a, 0x9c, 0xe6, 0x57, 0x8b, 0xd3, 0xfc, 0x6a, - 0x71, 0x9a, 0x5f, 0x2d, 0x4e, 0xf3, 0xab, 0xc5, 0xc1, 0x2f, 0xfc, 0xc2, 0xef, 0xc3, 0xfd, 0x2e, - 0xcb, 0xa2, 0x27, 0x30, 0x8d, 0xcb, 0x1b, 0x4a, 0xc2, 0xca, 0x35, 0xb2, 0xb8, 0x8c, 0xdf, 0x2d, - 0xd0, 0xf4, 0xbb, 0x6c, 0x88, 0x84, 0x37, 0xa8, 0x46, 0xb6, 0x5d, 0xd3, 0xaf, 0x28, 0xcf, 0xf1, - 0xcb, 0xca, 0x73, 0xfc, 0xb2, 0x38, 0xc7, 0x2f, 0x8b, 0x9b, 0xe9, 0x97, 0x6c, 0xd6, 0xf1, 0xfb, - 0x16, 0xb4, 0x45, 0xda, 0x7e, 0x79, 0x5c, 0x0f, 0xbf, 0x74, 0xb7, 0x6c, 0xbf, 0x7c, 0xbb, 0xb9, - 0xeb, 0x37, 0xef, 0x97, 0x97, 0x67, 0xfb, 0xe5, 0x71, 0xb6, 0x5f, 0x1e, 0x37, 0xcf, 0x2f, 0x3b, - 0xad, 0x6c, 0xbf, 0xef, 0x31, 0xaf, 0x50, 0xd3, 0xaf, 0x88, 0xf3, 0xfd, 0x2e, 0xfd, 0xfc, 0x8a, - 0xed, 0x66, 0xfc, 0x6e, 0xa5, 0x9a, 0x7e, 0x45, 0x79, 0xa6, 0x5f, 0x11, 0x67, 0xfa, 0x15, 0x71, - 0x97, 0x6b, 0x9f, 0x47, 0xf8, 0x5d, 0xe0, 0xf7, 0x9d, 0xfb, 0xf8, 0x15, 0x45, 0x7a, 0x7e, 0x97, - 0x42, 0xbf, 0xb4, 0x81, 0xc9, 0xf9, 0x4d, 0x13, 0xde, 0x10, 0x1a, 0xf7, 0x60, 0xf8, 0x65, 0xfd, - 0xe7, 0x82, 0xfb, 0x2f, 0x8f, 0xf3, 0xfd, 0x16, 0xf6, 0xaf, 0x48, 0x79, 0x9e, 0xdf, 0xa2, 0xfe, - 0x95, 0xd8, 0xe1, 0xe6, 0xfb, 0xef, 0x03, 0xfd, 0xd2, 0xe3, 0xec, 0xf8, 0x5d, 0x4a, 0xfd, 0xd2, - 0x0d, 0xbb, 0x7e, 0x4b, 0xfb, 0x57, 0x64, 0x7f, 0x9b, 0xfb, 0xcf, 0xa1, 0xfc, 0xee, 0x81, 0xed, - 0xd7, 0x2f, 0xf7, 0x91, 0x7b, 0xfe, 0x2d, 0xf1, 0x4b, 0xe3, 0xda, 0xfd, 0xd6, 0xf6, 0x9f, 0x7b, - 0xf9, 0xe5, 0x0d, 0xd1, 0x54, 0xbf, 0x24, 0xae, 0xf9, 0xfe, 0xfb, 0x21, 0xe0, 0xba, 0x7e, 0x4b, - 0xef, 0xbf, 0x42, 0xc8, 0x9d, 0xfd, 0xd2, 0x2e, 0x4c, 0xab, 0x5f, 0xb1, 0xbb, 0x53, 0xfd, 0xd2, - 0xfd, 0xe8, 0xe0, 0x97, 0x95, 0x79, 0xe3, 0xf6, 0x99, 0xf5, 0x50, 0x5b, 0x9f, 0x8f, 0x16, 0x02, - 0x4b, 0xf8, 0xc0, 0xa1, 0xfb, 0x2f, 0x8d, 0x9b, 0xe6, 0x37, 0xcc, 0xfd, 0x97, 0xe9, 0xed, 0x34, - 0xbe, 0xd1, 0xb7, 0x7f, 0x45, 0xe3, 0xe0, 0xf7, 0xd8, 0xf3, 0x6f, 0x9a, 0xf0, 0xc6, 0xb8, 0xf1, - 0x49, 0x51, 0x5e, 0x8f, 0xf1, 0xc9, 0x22, 0xbf, 0xd5, 0xfd, 0xab, 0x24, 0xe1, 0x1f, 0x2e, 0x30, - 0x3e, 0xb9, 0x16, 0xfb, 0xa5, 0x37, 0xfe, 0x69, 0xef, 0x17, 0x44, 0x79, 0xcd, 0xef, 0x17, 0xd6, - 0x52, 0xbf, 0x85, 0xcf, 0x47, 0x22, 0xee, 0x8a, 0xef, 0x17, 0x28, 0x78, 0x3f, 0x18, 0xf0, 0xfd, - 0xe0, 0x6a, 0x26, 0xc0, 0xaf, 0x9e, 0x00, 0xbf, 0x7a, 0x02, 0xfc, 0xea, 0x09, 0x43, 0xfc, 0x9a, - 0xec, 0x71, 0x1f, 0xb9, 0xec, 0x71, 0x1f, 0xbb, 0xec, 0x71, 0x9f, 0xb8, 0xec, 0x71, 0x9f, 0xba, - 0xec, 0x71, 0x9f, 0xb9, 0xec, 0x71, 0x9f, 0xbb, 0xec, 0x71, 0x5f, 0xb8, 0xec, 0x71, 0x5f, 0xba, - 0x08, 0x8d, 0x26, 0x42, 0xa3, 0x09, 0xfc, 0xc2, 0x2f, 0xfc, 0x3e, 0xc9, 0x2f, 0xe6, 0xa7, 0xa8, - 0x7a, 0xc3, 0xcc, 0x4f, 0xc1, 0xfc, 0x32, 0x5d, 0x6f, 0x98, 0xf9, 0x65, 0xe0, 0xe6, 0xc0, 0x6f, - 0x6c, 0xe0, 0x37, 0x36, 0xf0, 0x1b, 0x1b, 0xf8, 0x8d, 0x0d, 0xfc, 0xc6, 0x06, 0x7e, 0x63, 0x03, - 0xbf, 0xb1, 0x81, 0xdf, 0xd8, 0xc0, 0x6f, 0x6c, 0x72, 0x7e, 0xff, 0xdf, 0xc8, 0x59, 0xfb, 0x15, - 0x95, 0xaf, 0x4d, 0xf4, 0xf8, 0x8c, 0xdf, 0x56, 0xbd, 0x10, 0xdc, 0x17, 0x5b, 0xaf, 0x21, 0xd8, - 0xf7, 0xdb, 0xae, 0x17, 0x82, 0x7b, 0xe2, 0xe9, 0xd5, 0x05, 0xc3, 0xef, 0x9d, 0x80, 0xdf, 0xd8, - 0x0c, 0xf1, 0x7b, 0xbc, 0x3a, 0xf0, 0xdb, 0x19, 0x53, 0x23, 0xfc, 0x86, 0x00, 0x7e, 0x63, 0x03, - 0xbf, 0xb1, 0x19, 0xea, 0x97, 0xcf, 0x28, 0xde, 0xd7, 0xda, 0xd5, 0x81, 0xdf, 0xce, 0x0c, 0xf6, - 0xab, 0x15, 0x00, 0xbf, 0x13, 0x81, 0xdf, 0xd8, 0xcc, 0xf2, 0xbb, 0x37, 0xd4, 0xf4, 0xef, 0x42, - 0xfe, 0xa6, 0xd9, 0x41, 0x3b, 0x9b, 0x46, 0xfa, 0xef, 0x1a, 0x2c, 0x6b, 0xd7, 0xfb, 0xef, 0x87, - 0xc5, 0xd7, 0xc7, 0x2a, 0x56, 0xb0, 0xfb, 0x33, 0xfc, 0x76, 0x66, 0xb0, 0xdf, 0x95, 0x2d, 0x1a, - 0x7e, 0x57, 0x23, 0x3b, 0x68, 0x67, 0x5e, 0xfb, 0xbc, 0x4a, 0xbf, 0xef, 0x67, 0x12, 0xfc, 0x8e, - 0xe4, 0x44, 0xbf, 0x69, 0x10, 0xfc, 0x76, 0x07, 0xed, 0x73, 0x6c, 0x66, 0xf4, 0xaf, 0x36, 0xb5, - 0xef, 0x2a, 0x79, 0xbf, 0x19, 0x7e, 0x47, 0x82, 0xf1, 0xc9, 0xd8, 0xc0, 0x6f, 0x6c, 0xe0, 0x37, - 0x36, 0xf0, 0x1b, 0x1b, 0xf8, 0x8d, 0x0d, 0xfc, 0xc6, 0x66, 0x88, 0xdf, 0x46, 0xc6, 0xec, 0xe9, - 0x33, 0xf9, 0xda, 0x45, 0xcb, 0x01, 0xbf, 0x77, 0x02, 0x7e, 0x63, 0xd3, 0xdb, 0x2f, 0xe6, 0xa7, - 0x5c, 0x8c, 0x5a, 0xbd, 0x98, 0x5f, 0x76, 0x33, 0x2a, 0xf5, 0x62, 0x7e, 0x68, 0x70, 0xe0, 0x37, - 0x36, 0xf0, 0x1b, 0x1b, 0xf8, 0x8d, 0x0d, 0xfc, 0xc6, 0xe6, 0x02, 0x7e, 0xbd, 0x5f, 0x50, 0xcb, - 0xff, 0xdf, 0x8e, 0x17, 0x93, 0x46, 0x16, 0xe4, 0xdd, 0x4a, 0x50, 0x26, 0x66, 0x58, 0xb9, 0x79, - 0x82, 0x96, 0x37, 0x93, 0x25, 0xbb, 0x85, 0x7e, 0x5c, 0xdd, 0x6f, 0x89, 0xa3, 0x66, 0xbf, 0x7a, - 0xfe, 0x32, 0xbf, 0xd6, 0xb6, 0x4b, 0xca, 0x7a, 0x84, 0xdf, 0xcc, 0xd9, 0x5f, 0xe6, 0x37, 0xf9, - 0x69, 0x50, 0x69, 0x5e, 0x12, 0x07, 0xbf, 0x43, 0xd8, 0xfd, 0x92, 0x96, 0x8e, 0x2e, 0x89, 0x15, - 0x69, 0x83, 0xb8, 0x2c, 0xf4, 0xa7, 0x7d, 0xec, 0xb7, 0x7f, 0x05, 0x4d, 0xe7, 0x9a, 0x08, 0xe3, - 0xed, 0x01, 0x9b, 0xaa, 0xf1, 0xfa, 0xa9, 0x99, 0x9a, 0x57, 0xf9, 0xc1, 0xb0, 0x56, 0xe7, 0x64, - 0xdf, 0x46, 0x72, 0xba, 0x5f, 0xd5, 0x8c, 0xfd, 0xfb, 0x4c, 0xfe, 0xdb, 0xbe, 0xad, 0x08, 0xcb, - 0xaf, 0x0c, 0x95, 0xc7, 0x9d, 0xac, 0x25, 0xf5, 0x51, 0xcb, 0x48, 0x7e, 0x58, 0x98, 0xe4, 0x95, - 0x15, 0xce, 0x56, 0xea, 0x02, 0x7e, 0xff, 0xd7, 0x48, 0xb6, 0x02, 0xfa, 0x41, 0xd8, 0xbe, 0x16, - 0xfa, 0x7d, 0x39, 0xce, 0x85, 0x7a, 0xf5, 0x50, 0x4f, 0x32, 0xe1, 0x97, 0x54, 0xcc, 0xc8, 0x2b, - 0x16, 0x7b, 0xfb, 0xfd, 0xc6, 0x44, 0x8f, 0xcf, 0xf8, 0x6d, 0xd5, 0x9b, 0x17, 0xbc, 0x88, 0xe6, - 0x4a, 0xb6, 0xac, 0x85, 0x7e, 0x57, 0xbd, 0x14, 0x19, 0x6a, 0x5c, 0xbf, 0x7b, 0xc6, 0x75, 0x4f, - 0x16, 0xdf, 0x1d, 0xbf, 0xf2, 0xa2, 0x25, 0x8b, 0x9d, 0xfd, 0xda, 0x7a, 0x0d, 0xc1, 0xbe, 0xdf, - 0x76, 0xbd, 0x39, 0xc1, 0xba, 0xc4, 0xea, 0xf6, 0xb9, 0xd8, 0x6f, 0x59, 0x25, 0x92, 0xb5, 0x4a, - 0x82, 0x16, 0xc5, 0xdb, 0xea, 0xfe, 0x7e, 0x3d, 0xbd, 0xba, 0xe0, 0x30, 0x7e, 0x95, 0x06, 0xf6, - 0xb8, 0x5f, 0xb3, 0x7d, 0xb6, 0x37, 0xfe, 0xfe, 0x05, 0x7e, 0x39, 0xa6, 0x44, 0xab, 0x17, 0xcb, - 0x5a, 0x74, 0x5e, 0x46, 0x92, 0x5e, 0xda, 0x7f, 0x66, 0x81, 0xd9, 0xfe, 0x33, 0xd9, 0x54, 0xb2, - 0x11, 0xb6, 0xc0, 0xfc, 0x76, 0xe9, 0x3f, 0x0f, 0xf1, 0x5b, 0x59, 0x07, 0x42, 0x63, 0x76, 0x87, - 0xfa, 0x3b, 0xd7, 0x1c, 0x06, 0xd7, 0xcb, 0xd4, 0x18, 0xc8, 0x6f, 0x69, 0xa3, 0x7b, 0x06, 0xa3, - 0xab, 0xf5, 0x04, 0xbf, 0x6b, 0x69, 0xa3, 0x3b, 0x9d, 0xf1, 0xd5, 0xa2, 0x1a, 0xd9, 0x61, 0x88, - 0xe4, 0xf7, 0xc1, 0x08, 0xbf, 0x7a, 0x02, 0xa3, 0xca, 0xaf, 0xf9, 0xe8, 0xf8, 0x9e, 0x2a, 0xd7, - 0xc0, 0x6f, 0x67, 0x86, 0xfb, 0xdd, 0x3f, 0x53, 0x06, 0xfa, 0xcd, 0x77, 0x84, 0xed, 0x53, 0xaf, - 0xe8, 0xf9, 0x68, 0x11, 0x0b, 0x9d, 0x6a, 0xd5, 0x9b, 0xb8, 0x7e, 0x9d, 0xed, 0x66, 0xaa, 0x36, - 0xcc, 0xef, 0xc1, 0x67, 0xd8, 0x16, 0x26, 0xfa, 0x65, 0x4f, 0x83, 0x7c, 0x10, 0xc0, 0xca, 0x7e, - 0x9c, 0xfc, 0xa1, 0x6c, 0xf5, 0xbb, 0xd0, 0xbf, 0xbd, 0x2a, 0xd5, 0x9d, 0x79, 0xf7, 0x5f, 0x65, - 0xac, 0x69, 0x59, 0xe4, 0xce, 0x9e, 0xe3, 0xd7, 0x1b, 0x0a, 0xb1, 0x32, 0x0b, 0xbf, 0x7c, 0x08, - 0x22, 0x1d, 0x62, 0x21, 0x9b, 0x24, 0xcb, 0x6c, 0xeb, 0xe9, 0xf9, 0xdf, 0xa1, 0xe3, 0x3f, 0xb9, - 0x7d, 0xe6, 0xcd, 0x66, 0x5a, 0xfb, 0x53, 0xfc, 0xea, 0x43, 0x81, 0x7b, 0x9c, 0x72, 0xa7, 0x5e, - 0xb6, 0x17, 0x8c, 0xea, 0x10, 0xa2, 0x51, 0x98, 0xe9, 0x57, 0xae, 0x10, 0x49, 0x0d, 0xcc, 0x6e, - 0x9f, 0xa5, 0x5f, 0x51, 0xf8, 0x40, 0xbf, 0x52, 0x92, 0xb0, 0x66, 0xfa, 0xb5, 0x8a, 0xb7, 0xfc, - 0xd2, 0x6b, 0x3a, 0xa9, 0x82, 0x58, 0xe6, 0xd9, 0xcc, 0xa4, 0x06, 0xe6, 0xf9, 0x55, 0x6a, 0x7d, - 0x81, 0xeb, 0x77, 0xab, 0x47, 0xf5, 0xf5, 0xfb, 0x5e, 0x7b, 0xd7, 0x6f, 0x72, 0x4a, 0x89, 0x65, - 0xb6, 0x39, 0xeb, 0x4e, 0xd6, 0xc4, 0x69, 0x7e, 0x2f, 0x72, 0xff, 0xe5, 0xd5, 0xab, 0xb9, 0x7e, - 0x4d, 0xbf, 0xc9, 0x5f, 0xb5, 0x52, 0xba, 0x44, 0xeb, 0x4a, 0x38, 0xcc, 0xc4, 0xf1, 0x0d, 0x7a, - 0x95, 0xcc, 0xe9, 0x3f, 0xbb, 0x87, 0xa7, 0xd9, 0xaf, 0x99, 0x8f, 0xfd, 0x4d, 0xaf, 0x5f, 0xc3, - 0xaf, 0x75, 0x11, 0xb4, 0x31, 0xd8, 0x6f, 0x2d, 0x53, 0xc7, 0x37, 0xb4, 0xe0, 0xe2, 0xfe, 0xf3, - 0x2a, 0xed, 0xec, 0xd9, 0xd8, 0xfd, 0x47, 0x69, 0xeb, 0xc5, 0x72, 0xd2, 0x3e, 0x8b, 0x96, 0xba, - 0x89, 0xa8, 0x7e, 0xc1, 0x07, 0xe0, 0x37, 0x36, 0xf0, 0x1b, 0x1b, 0xbc, 0x1f, 0x8c, 0xcd, 0x23, - 0xde, 0xef, 0x3f, 0x98, 0x21, 0x7e, 0x1b, 0x19, 0xb3, 0xa7, 0x79, 0xcc, 0xe7, 0x56, 0x2d, 0x54, - 0xeb, 0x68, 0x67, 0x32, 0x16, 0xf5, 0xcd, 0xd5, 0x80, 0xe3, 0xe3, 0x94, 0xdf, 0xb8, 0x68, 0x39, - 0xe2, 0xfa, 0x2d, 0x18, 0x14, 0xe1, 0x91, 0x65, 0x6b, 0xeb, 0x4a, 0x3f, 0x52, 0xb2, 0x03, 0xfc, - 0x52, 0xd2, 0x01, 0x17, 0x27, 0xb0, 0x74, 0x2d, 0x4f, 0xbd, 0xb9, 0xdf, 0x09, 0xf3, 0x53, 0x46, - 0x52, 0xfa, 0x3e, 0xce, 0x18, 0xbc, 0x96, 0xc3, 0x73, 0xd6, 0xe8, 0x33, 0x1f, 0xc8, 0x62, 0x6d, - 0x7d, 0xb2, 0x2c, 0xf3, 0x56, 0x52, 0xab, 0xf7, 0xfc, 0xf9, 0x65, 0x43, 0x49, 0x0f, 0xa4, 0xf1, - 0x7e, 0x41, 0x7b, 0x25, 0x21, 0x56, 0xc8, 0x73, 0x85, 0x8a, 0xe3, 0x9f, 0xa4, 0xdd, 0xd0, 0x07, - 0x3d, 0x1b, 0x06, 0xb2, 0x2a, 0xf5, 0x9e, 0x3f, 0x3f, 0x74, 0x28, 0x85, 0x07, 0x52, 0x5e, 0x8b, - 0x86, 0x5f, 0x25, 0xdf, 0x6e, 0x51, 0x2c, 0x8e, 0xf2, 0x5b, 0x4b, 0x68, 0xbf, 0x4a, 0xfb, 0x6c, - 0x5c, 0xbf, 0x7c, 0x51, 0x69, 0x70, 0xcd, 0xae, 0xf0, 0xeb, 0x13, 0x7e, 0xa7, 0x73, 0xa4, 0x7f, - 0xa5, 0x5f, 0xbf, 0x22, 0x28, 0x49, 0xe5, 0x6d, 0x35, 0xfc, 0x4e, 0xe1, 0xd0, 0xf3, 0x51, 0x71, - 0xfb, 0x0c, 0xbf, 0x27, 0xc3, 0x7b, 0x3f, 0x99, 0x50, 0xfe, 0x7a, 0x6f, 0xb7, 0xf6, 0x4a, 0x54, - 0xca, 0x61, 0xcd, 0x3c, 0x5b, 0x60, 0x7e, 0xfb, 0xf6, 0x9f, 0xab, 0x89, 0xeb, 0x77, 0x2a, 0x13, - 0x8d, 0xd5, 0x01, 0xbf, 0x3d, 0xb8, 0xac, 0x5e, 0xf8, 0xed, 0xc0, 0xf1, 0xf1, 0xe4, 0xf1, 0xc0, - 0x6f, 0x6c, 0xe0, 0x37, 0x36, 0x39, 0xbf, 0x7f, 0x36, 0x72, 0xa8, 0x52, 0xf6, 0x10, 0x22, 0x5d, - 0xdb, 0xb1, 0x55, 0x2c, 0x7a, 0xd7, 0x47, 0xc3, 0x8f, 0xa7, 0x36, 0xf2, 0xad, 0x89, 0x1e, 0x9f, - 0xf1, 0xdb, 0xaa, 0xf7, 0x98, 0x60, 0xe3, 0x29, 0x51, 0x7d, 0x02, 0xed, 0x41, 0xed, 0x53, 0xe9, - 0x79, 0x7e, 0x6d, 0xbd, 0x86, 0x60, 0xdf, 0x6f, 0xbb, 0xde, 0x43, 0x82, 0xcb, 0xfc, 0xf6, 0xe3, - 0x36, 0x7e, 0x3d, 0xbd, 0xba, 0xe0, 0x1b, 0xfa, 0x15, 0x03, 0x0e, 0x0b, 0x1d, 0x37, 0xe0, 0x8b, - 0xe4, 0x6f, 0xc1, 0xf6, 0x5e, 0xcb, 0x4e, 0x69, 0xf9, 0xf8, 0xb5, 0x62, 0x58, 0xb4, 0x9e, 0xa7, - 0xf8, 0x95, 0x51, 0xf6, 0xa2, 0xf6, 0x56, 0xaf, 0xe6, 0xfd, 0x42, 0x32, 0xa8, 0x65, 0xc6, 0x53, - 0xb7, 0xa3, 0x2e, 0xe1, 0x21, 0x7e, 0x8f, 0x57, 0xe7, 0xb8, 0x5f, 0xf2, 0x3e, 0x56, 0xbe, 0x67, - 0x15, 0x03, 0x8f, 0x59, 0xbf, 0x45, 0xdb, 0xd3, 0xbe, 0xab, 0x6a, 0x65, 0xbc, 0x12, 0x54, 0xd5, - 0x55, 0xab, 0xc3, 0xd4, 0x78, 0x37, 0xbf, 0xfb, 0x67, 0xb2, 0xba, 0xd0, 0xaf, 0xf1, 0x56, 0x2f, - 0x77, 0xfd, 0xae, 0xf4, 0xd4, 0xe2, 0xc5, 0xa9, 0xf1, 0xba, 0xdf, 0x8a, 0x7d, 0xad, 0x82, 0x6a, - 0x64, 0x75, 0x7a, 0x9e, 0x5f, 0x9e, 0xa7, 0x78, 0x7b, 0x7a, 0x71, 0xa2, 0xa4, 0x8b, 0x5c, 0xbf, - 0x4f, 0xf7, 0x5b, 0xd9, 0x3e, 0xdb, 0x7e, 0xaf, 0x75, 0xff, 0x25, 0xdb, 0xee, 0xe5, 0x57, 0x7d, - 0xfe, 0x4f, 0xd6, 0x24, 0x11, 0x33, 0xfc, 0xd2, 0xba, 0xa9, 0xfd, 0xe7, 0xb2, 0x0d, 0x2a, 0x65, - 0x78, 0xfd, 0x67, 0x11, 0x95, 0x6c, 0x72, 0x90, 0xe0, 0x71, 0x7e, 0x57, 0xfb, 0x78, 0x9b, 0xdf, - 0x5b, 0x2f, 0xff, 0x72, 0xf4, 0x6b, 0xab, 0x5f, 0xa1, 0x57, 0x61, 0xa8, 0xdf, 0xac, 0xcf, 0x53, - 0xfc, 0xda, 0x37, 0xcc, 0x2e, 0x25, 0x5f, 0x8b, 0x29, 0x7e, 0x79, 0x07, 0x93, 0xb6, 0x4b, 0xb2, - 0xc5, 0x9a, 0x72, 0xfd, 0xb2, 0x07, 0xa8, 0x9e, 0x5d, 0x9b, 0x87, 0xfa, 0xcd, 0x74, 0x43, 0xe8, - 0xe2, 0xb4, 0xf6, 0xf9, 0x29, 0xc0, 0xef, 0x19, 0xcc, 0xbb, 0xd0, 0xe7, 0xf8, 0xe5, 0x7d, 0x53, - 0xfb, 0xfb, 0x71, 0xbf, 0xe9, 0x11, 0xdb, 0xc6, 0x25, 0x06, 0xf4, 0xa4, 0xd4, 0x82, 0x8c, 0x3e, - 0xbc, 0x9d, 0x5f, 0x7d, 0xc6, 0x28, 0xdc, 0x54, 0xe9, 0x9e, 0x4c, 0xbb, 0x7e, 0xd7, 0x92, 0xef, - 0x3d, 0xfd, 0x2a, 0x6b, 0xaf, 0xe2, 0x57, 0x3f, 0x38, 0x15, 0x9b, 0x2a, 0xdf, 0x93, 0x19, 0xcf, - 0x47, 0x33, 0xda, 0xe7, 0xc6, 0xc3, 0xd0, 0x63, 0x6b, 0x0f, 0xf3, 0x4b, 0xda, 0x1e, 0xab, 0xff, - 0xfc, 0xda, 0x60, 0x87, 0xfe, 0xb3, 0x7b, 0x18, 0xc4, 0xd0, 0x45, 0x6e, 0x7c, 0xa3, 0xae, 0xd1, - 0xe4, 0x0f, 0x03, 0xf2, 0x91, 0x40, 0x2b, 0x95, 0x9e, 0xf6, 0x74, 0x0d, 0xbb, 0x5b, 0xb1, 0x1e, - 0x7e, 0xd2, 0xdb, 0x97, 0xcf, 0x1d, 0x26, 0x41, 0xc6, 0x27, 0xb3, 0x7e, 0xc9, 0x57, 0xbd, 0xe5, - 0xd8, 0x16, 0xe5, 0x21, 0x4b, 0x6f, 0xe3, 0xa9, 0x1a, 0x59, 0x4e, 0x52, 0x1a, 0x3d, 0xbd, 0x56, - 0xaa, 0x8b, 0xae, 0xd9, 0x3f, 0x5f, 0xff, 0xe5, 0x6b, 0x9b, 0xbb, 0x92, 0xe3, 0xf9, 0xe5, 0x27, - 0x3c, 0x4b, 0x2c, 0xf4, 0x5b, 0xb3, 0xb5, 0xbc, 0x5f, 0x99, 0x41, 0x5e, 0xfc, 0xdb, 0x3a, 0xb1, - 0x58, 0xe8, 0x37, 0x43, 0x3c, 0xbf, 0xca, 0xda, 0x32, 0xbf, 0xcb, 0xab, 0x85, 0x95, 0x65, 0x64, - 0xae, 0x5f, 0xf9, 0x30, 0xa0, 0x96, 0x96, 0x9e, 0x74, 0xac, 0xa8, 0x43, 0x7e, 0x6b, 0xdb, 0x67, - 0x16, 0xfe, 0x3c, 0xbf, 0x6e, 0x49, 0xe6, 0xd6, 0x68, 0xc3, 0x21, 0x3f, 0x45, 0x69, 0x6a, 0xd2, - 0x7e, 0x0b, 0x21, 0x95, 0x2c, 0xf4, 0x5b, 0x50, 0xdd, 0x20, 0xef, 0xf7, 0x3b, 0xf9, 0x1d, 0xdb, - 0x3e, 0xf7, 0xf6, 0x5b, 0xd2, 0x48, 0xc7, 0xf1, 0x9b, 0x34, 0xa2, 0xab, 0xe1, 0x77, 0xcd, 0xf5, - 0x9f, 0xeb, 0xb6, 0xc6, 0x4a, 0xa0, 0x9f, 0xac, 0x34, 0x12, 0x2e, 0x4a, 0xe1, 0x55, 0x55, 0xfc, - 0x76, 0xec, 0x3f, 0x97, 0x24, 0x14, 0xf8, 0x6d, 0xc4, 0xaf, 0x71, 0x1f, 0xd4, 0x16, 0x76, 0xf2, - 0x86, 0x8b, 0xd6, 0x37, 0xf2, 0xad, 0x8b, 0x96, 0xe3, 0xf6, 0x7e, 0xf5, 0x16, 0xef, 0x64, 0x46, - 0x55, 0xe2, 0x81, 0x7e, 0x57, 0xb5, 0xc5, 0x3b, 0x95, 0x71, 0x95, 0xe8, 0xed, 0xf7, 0xa4, 0xf9, - 0x29, 0xc0, 0xa2, 0x56, 0xef, 0x35, 0xe7, 0x97, 0x01, 0x93, 0x4a, 0xbd, 0x98, 0x1f, 0x1a, 0x1c, - 0xf8, 0x8d, 0x0d, 0xfc, 0xc6, 0x06, 0x7e, 0x63, 0x03, 0xbf, 0xb1, 0x81, 0xdf, 0xd8, 0xc0, 0x6f, - 0x6c, 0xe0, 0x37, 0x36, 0xf0, 0x1b, 0x1b, 0xf8, 0x8d, 0x4d, 0xce, 0xef, 0x1f, 0x8d, 0x9c, 0xb5, - 0x5f, 0x51, 0xf9, 0xce, 0x44, 0x8f, 0xcf, 0xf8, 0x6d, 0xd5, 0x0b, 0xc1, 0x7d, 0xb1, 0xf5, 0x1a, - 0x82, 0x7d, 0xbf, 0xed, 0x7a, 0x21, 0xb8, 0x27, 0x9e, 0x5e, 0x5d, 0x30, 0xfc, 0xde, 0x09, 0xf8, - 0x8d, 0xcd, 0x10, 0xbf, 0xc7, 0xab, 0x03, 0xbf, 0x9d, 0x31, 0x35, 0xc2, 0x6f, 0x08, 0x76, 0x8d, - 0xe2, 0x37, 0x40, 0xf0, 0x1b, 0x82, 0x71, 0x7e, 0xb5, 0xdf, 0x23, 0x67, 0x81, 0xdf, 0xce, 0x10, - 0x8d, 0xdc, 0x46, 0xab, 0xdf, 0xe4, 0xd7, 0xdc, 0x45, 0xc0, 0x6f, 0x67, 0xe0, 0x37, 0x36, 0x54, - 0x23, 0x13, 0xdc, 0xc7, 0xef, 0x56, 0xb0, 0x9c, 0x05, 0xa2, 0x2f, 0xc1, 0x6f, 0x6f, 0x86, 0xf9, - 0x25, 0x33, 0xa6, 0xe4, 0x6c, 0x28, 0xf3, 0x03, 0x7e, 0xbb, 0xc3, 0x34, 0x52, 0xc1, 0x3d, 0xfa, - 0xcf, 0x6c, 0x36, 0x94, 0x98, 0xd2, 0xa8, 0x7f, 0x85, 0xdf, 0xce, 0x0c, 0xf5, 0xab, 0x4e, 0x6c, - 0x4c, 0xa6, 0xe9, 0xd1, 0x99, 0x7f, 0xf0, 0xdb, 0x19, 0xae, 0x91, 0x08, 0xee, 0xd9, 0xbf, 0x72, - 0x1a, 0x64, 0xb6, 0x04, 0xbf, 0xdd, 0x39, 0xd7, 0x2f, 0xee, 0xbf, 0xa3, 0x11, 0x1a, 0x77, 0xc1, - 0x3d, 0xc7, 0x37, 0xd4, 0x45, 0xf4, 0x9f, 0x67, 0x30, 0xce, 0x2f, 0xa1, 0xfc, 0x29, 0x18, 0x7e, - 0x3b, 0x23, 0x35, 0x6e, 0x82, 0xe1, 0x37, 0x04, 0xf0, 0x1b, 0x1b, 0xbc, 0x1f, 0x8c, 0x0d, 0xfc, - 0xc6, 0x06, 0x7e, 0x63, 0x03, 0xbf, 0xb1, 0x19, 0xe2, 0xb7, 0x91, 0x31, 0x7b, 0xfa, 0x4c, 0xbe, - 0x73, 0xd1, 0x72, 0xc0, 0xef, 0x9d, 0x80, 0xdf, 0xd8, 0xf4, 0xf6, 0x8b, 0xf9, 0x29, 0x17, 0xa3, - 0x56, 0x2f, 0xe6, 0x97, 0xdd, 0x8c, 0x4a, 0xbd, 0x98, 0x1f, 0x1a, 0x1c, 0xf8, 0x8d, 0x0d, 0xfc, - 0xc6, 0x06, 0x7e, 0x63, 0x03, 0xbf, 0xb1, 0x81, 0xdf, 0xd8, 0xc0, 0x6f, 0x6c, 0xe0, 0x37, 0x36, - 0xf0, 0x1b, 0x1b, 0xf8, 0x8d, 0x4d, 0xce, 0xef, 0xef, 0x26, 0xbc, 0x9c, 0xdf, 0x4c, 0x78, 0xdc, - 0xaf, 0x26, 0x3c, 0xee, 0x17, 0x13, 0x1e, 0xf7, 0xb3, 0x09, 0x8f, 0xfb, 0xc9, 0x84, 0xc7, 0xfd, - 0x68, 0xc2, 0xe3, 0x7e, 0x30, 0xe1, 0x71, 0xdf, 0x9b, 0xf0, 0xb8, 0xff, 0x9a, 0xf0, 0xb8, 0xff, - 0x98, 0xac, 0x2a, 0x19, 0xbf, 0xb6, 0x5e, 0x2e, 0xd8, 0xd6, 0xcb, 0x05, 0xdb, 0x7a, 0xb9, 0x60, - 0x5b, 0x2f, 0x17, 0x6c, 0xeb, 0xe5, 0x82, 0x6d, 0xbd, 0x5c, 0xb0, 0xad, 0x97, 0x0b, 0xb6, 0xf5, - 0x72, 0xc1, 0xb6, 0x5e, 0x2e, 0xd8, 0xd6, 0xcb, 0x05, 0xdb, 0x7a, 0x0d, 0xc1, 0xbe, 0x5f, 0x4f, - 0x2f, 0x15, 0xec, 0xe9, 0xa5, 0x82, 0x3d, 0xbd, 0x54, 0xb0, 0xa7, 0x97, 0x0a, 0xf6, 0xf4, 0x52, - 0xc1, 0x9e, 0x5e, 0x2a, 0xd8, 0xd3, 0x4b, 0x05, 0x7b, 0x7a, 0xa9, 0x60, 0x4f, 0x2f, 0x15, 0xec, - 0xe9, 0xa5, 0x82, 0x3d, 0xbd, 0xba, 0x60, 0xf8, 0x85, 0x5f, 0xf8, 0x0d, 0xed, 0x57, 0xcb, 0xa6, - 0xf9, 0xd5, 0xe2, 0x34, 0xbf, 0x5a, 0x9c, 0xe6, 0x57, 0x8b, 0xd3, 0xfc, 0x6a, 0x71, 0x9a, 0x5f, - 0x2d, 0x4e, 0xf3, 0xab, 0xc5, 0x69, 0x7e, 0xb5, 0x38, 0xcd, 0xaf, 0x16, 0xa7, 0xf9, 0xd5, 0xe2, - 0x34, 0xbf, 0x5a, 0x1c, 0xfc, 0xc2, 0x2f, 0xfc, 0xa6, 0x7e, 0x5f, 0x13, 0x7c, 0x66, 0xfa, 0xa5, - 0xf3, 0xf2, 0xe1, 0xb7, 0xde, 0x2f, 0x9d, 0x3f, 0x75, 0x6b, 0xbf, 0x24, 0x10, 0x7e, 0x37, 0x8d, - 0x6c, 0x7a, 0x5c, 0xc6, 0xef, 0x76, 0x04, 0xa7, 0xb6, 0xcf, 0xf0, 0xfb, 0xe2, 0x98, 0xdf, 0xf2, - 0xeb, 0xf7, 0x14, 0xbf, 0xb4, 0x7e, 0x68, 0x9f, 0x47, 0xfa, 0xdd, 0x43, 0xd1, 0xbf, 0xba, 0x8d, - 0x5f, 0x06, 0xfc, 0x3e, 0xd8, 0x2f, 0xb9, 0xd2, 0xe1, 0x17, 0x7e, 0x95, 0x04, 0xf8, 0xd5, 0x13, - 0x2e, 0xe1, 0x97, 0xde, 0xa8, 0x2f, 0xe9, 0x17, 0xfd, 0xe7, 0x17, 0xf0, 0x0b, 0xbf, 0xff, 0x40, - 0x35, 0xb2, 0x7e, 0xf6, 0x25, 0xfd, 0xae, 0xf0, 0xfb, 0xce, 0x35, 0xfc, 0x92, 0x12, 0x3b, 0x5d, - 0xbf, 0x46, 0x02, 0x01, 0x7e, 0x0d, 0xbf, 0xfc, 0xdf, 0x47, 0xbf, 0xa4, 0xdf, 0xb5, 0x20, 0x01, - 0x7e, 0x3b, 0xf8, 0xdd, 0x63, 0xfd, 0xf6, 0x19, 0x7e, 0xdf, 0xb9, 0x80, 0x5f, 0x4e, 0x17, 0xbf, - 0xe4, 0x8c, 0x81, 0xdf, 0x3b, 0xf9, 0x35, 0x13, 0xf0, 0xfc, 0xab, 0x27, 0xc0, 0xaf, 0x9e, 0x00, - 0xbf, 0x7a, 0x02, 0xfc, 0x3a, 0x7e, 0x4d, 0xf6, 0xb8, 0xdf, 0x5c, 0xf6, 0xb8, 0x5f, 0x5d, 0xf6, - 0xb8, 0x5f, 0x5c, 0xf6, 0xb8, 0x9f, 0x5d, 0xf6, 0xb8, 0x9f, 0x5c, 0xf6, 0xb8, 0x1f, 0x5d, 0xf6, - 0xb8, 0x1f, 0x5c, 0xf6, 0xb8, 0xef, 0x5d, 0x84, 0x46, 0x13, 0xa1, 0xd1, 0x04, 0x7e, 0xe1, 0x17, - 0x7e, 0x9f, 0xe4, 0x17, 0xf3, 0x53, 0x54, 0xbd, 0x61, 0xe6, 0xa7, 0x60, 0x7e, 0x99, 0xae, 0x37, - 0xcc, 0xfc, 0x32, 0x70, 0x73, 0xe0, 0x37, 0x36, 0xf0, 0x1b, 0x1b, 0xcd, 0x2f, 0x04, 0x87, 0x41, - 0xd5, 0x0b, 0xbf, 0x61, 0xd0, 0xfd, 0x42, 0x70, 0x10, 0x0c, 0xbd, 0xf0, 0x1b, 0x04, 0xcb, 0x2f, - 0x04, 0x87, 0xc0, 0xd4, 0x0b, 0xc3, 0x01, 0xf0, 0xec, 0xc2, 0xf0, 0xdd, 0xc9, 0xd9, 0x05, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0xf0, 0x37, 0x6c, - 0x6c, 0x3d, 0x8c -}; - -#endif diff --git a/backends/psp/kbd_ss_c.cpp b/backends/psp/kbd_ss_c.cpp deleted file mode 100644 index 7c10227b2c..0000000000 --- a/backends/psp/kbd_ss_c.cpp +++ /dev/null @@ -1,212 +0,0 @@ -#ifndef __keyboard_symbols_shift_compressed__ -#define __keyboard_symbols_shift_compressed__ - -unsigned int size_keyboard_symbols_shift_compressed = 3263; -unsigned char keyboard_symbols_shift_compressed[] __attribute__((aligned(16))) = { - 0x78, 0x9c, 0xed, 0x9d, 0xe9, 0xb6, 0xac, 0xb8, 0x0d, 0x46, 0x49, 0x0f, 0x49, 0x77, 0x7a, 0x4a, - 0x7a, 0x1e, 0x92, 0xbc, 0xff, 0x13, 0xd2, 0x7f, 0xd3, 0xe7, 0x9c, 0x02, 0x4b, 0xb2, 0x24, 0x1b, - 0x6c, 0x33, 0x88, 0x6f, 0xaf, 0x75, 0xab, 0x28, 0x90, 0x8d, 0x8b, 0x5d, 0x36, 0xc6, 0xe0, 0x73, - 0xff, 0xfc, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1b, 0x31, - 0x83, 0x1b, 0x03, 0xbb, 0xd1, 0x81, 0xdd, 0xe8, 0x40, 0x6f, 0x70, 0xe0, 0x37, 0x36, 0xd0, 0x1b, - 0x1c, 0xf8, 0x8d, 0x0d, 0xf4, 0x06, 0x07, 0x7e, 0x63, 0x03, 0xbf, 0xb1, 0x29, 0xf9, 0xfd, 0x9b, - 0x09, 0xcf, 0xe7, 0x13, 0x13, 0x1e, 0xf7, 0xa9, 0x09, 0x8f, 0xfb, 0xcc, 0x84, 0xc7, 0x7d, 0x6e, - 0xc2, 0xe3, 0xfe, 0x6e, 0xc2, 0xe3, 0xfe, 0x61, 0xc2, 0xe3, 0xbe, 0x30, 0xe1, 0x71, 0x5f, 0x9a, - 0xf0, 0xb8, 0x7f, 0x9a, 0xf0, 0xb8, 0xaf, 0x4c, 0x66, 0x95, 0x82, 0x5f, 0x5b, 0x2f, 0x17, 0x6c, - 0xeb, 0xe5, 0x82, 0x6d, 0xbd, 0x5c, 0xb0, 0xad, 0x97, 0x0b, 0xb6, 0xf5, 0x72, 0xc1, 0xb6, 0x5e, - 0x2e, 0xd8, 0xd6, 0xcb, 0x05, 0xdb, 0x7a, 0xb9, 0x60, 0x5b, 0x2f, 0x17, 0x6c, 0xeb, 0xe5, 0x82, - 0x6d, 0xbd, 0x86, 0x60, 0xdf, 0xaf, 0xa7, 0x97, 0x0a, 0xf6, 0xf4, 0x52, 0xc1, 0x9e, 0x5e, 0x2a, - 0xd8, 0xd3, 0x4b, 0x05, 0x7b, 0x7a, 0xa9, 0x60, 0x4f, 0x2f, 0x15, 0xec, 0xe9, 0xa5, 0x82, 0x3d, - 0xbd, 0x54, 0xb0, 0xa7, 0x97, 0x0a, 0xf6, 0xf4, 0x52, 0xc1, 0x9e, 0x5e, 0x5d, 0x30, 0xfc, 0xc2, - 0xef, 0xb3, 0xfc, 0x6a, 0x47, 0x29, 0xb4, 0x5f, 0x2d, 0x99, 0xe6, 0x57, 0x8b, 0xd3, 0xfc, 0x6a, - 0x71, 0x9a, 0x5f, 0x2d, 0x4e, 0xf3, 0xab, 0xc5, 0x69, 0x7e, 0xb5, 0xb8, 0x4a, 0xbf, 0xb3, 0xe6, - 0x57, 0x8b, 0xd3, 0xfc, 0x6a, 0x71, 0x9a, 0x5f, 0x2d, 0x4e, 0xf3, 0xab, 0xc5, 0x05, 0xf6, 0xab, - 0x85, 0x5d, 0xd2, 0xef, 0x34, 0x4d, 0xfa, 0x06, 0xa1, 0x91, 0xc6, 0x1d, 0xe9, 0x97, 0xee, 0xf7, - 0x50, 0xbf, 0x64, 0xc7, 0x07, 0xfa, 0x9d, 0xe8, 0xf7, 0x75, 0xfd, 0x92, 0x38, 0xc7, 0x2f, 0xcd, - 0xce, 0xaf, 0xbf, 0x24, 0xf2, 0x82, 0x7e, 0xa7, 0x0f, 0xf2, 0x0d, 0xb3, 0xd0, 0xf8, 0x57, 0xcc, - 0x9a, 0xa3, 0xe7, 0x97, 0x64, 0x67, 0xfb, 0x65, 0x36, 0x5c, 0xbf, 0x2c, 0xd2, 0xf6, 0x4b, 0xbf, - 0x85, 0xeb, 0x97, 0x05, 0xda, 0x7e, 0x79, 0xf9, 0xfc, 0xf6, 0x39, 0xc5, 0x5e, 0xce, 0xef, 0x12, - 0xf4, 0x7a, 0x6f, 0xf7, 0x3b, 0x4d, 0xf4, 0x07, 0x63, 0xf9, 0x4d, 0x21, 0x1f, 0x6f, 0xb6, 0x5f, - 0xee, 0xcd, 0xf4, 0xfb, 0x1e, 0x93, 0x02, 0xe1, 0xf7, 0x43, 0x63, 0x8a, 0xf9, 0x58, 0x6a, 0xf6, - 0x3b, 0xbd, 0x47, 0x4d, 0x4b, 0xc6, 0x86, 0xdf, 0x14, 0xf1, 0x8a, 0x33, 0xfd, 0x0a, 0x6f, 0x1d, - 0xfc, 0xb2, 0x06, 0xc1, 0xf4, 0xcb, 0xf5, 0x96, 0xfa, 0x57, 0x6b, 0xf4, 0xc5, 0xfc, 0x2e, 0x47, - 0x65, 0x3d, 0xde, 0xb6, 0x5f, 0x56, 0x2d, 0xbb, 0xf9, 0x5d, 0x32, 0xb4, 0xfc, 0xb2, 0x4a, 0x3e, - 0x17, 0xfc, 0xf6, 0x6c, 0x9f, 0xe3, 0xf8, 0x65, 0x46, 0x7a, 0xf8, 0xa5, 0xf5, 0xa3, 0xe0, 0x77, - 0x8d, 0x6c, 0xef, 0x5f, 0xb1, 0xdd, 0xc2, 0xef, 0xbb, 0x46, 0x56, 0x8d, 0x0a, 0x7e, 0x59, 0xf3, - 0x5c, 0x3c, 0xff, 0x2a, 0x1b, 0xde, 0x20, 0x7e, 0x79, 0x85, 0x6b, 0xf6, 0xcb, 0xf5, 0xb6, 0xf7, - 0x9f, 0xe1, 0xb7, 0xa9, 0xff, 0x2c, 0xf4, 0x36, 0xfb, 0x95, 0x0d, 0x7e, 0xf3, 0xf5, 0x6f, 0x28, - 0xbf, 0xe9, 0xc8, 0xf4, 0xf0, 0x4b, 0xab, 0xb0, 0x77, 0xfd, 0xfb, 0xda, 0xb3, 0xdf, 0xbf, 0x12, - 0x18, 0x7e, 0xd3, 0x17, 0x80, 0xdf, 0x37, 0x14, 0xbf, 0x85, 0xfe, 0x33, 0x3f, 0xfd, 0xd6, 0xf8, - 0xf5, 0xfa, 0x57, 0x4b, 0xf1, 0xd6, 0xc0, 0x1e, 0x7e, 0xe9, 0xef, 0x0a, 0x7e, 0x17, 0xbf, 0xfc, - 0x82, 0xb5, 0x97, 0xdf, 0x42, 0xff, 0x79, 0x16, 0x6d, 0x47, 0x1f, 0xbf, 0xf3, 0xb3, 0xfc, 0x52, - 0xbc, 0xeb, 0x23, 0x8a, 0xd7, 0x7f, 0xa6, 0xfd, 0x92, 0xc6, 0xeb, 0x23, 0xd2, 0x98, 0xf6, 0xf6, - 0x9b, 0x36, 0xc0, 0x2f, 0x29, 0x58, 0xa9, 0xfe, 0x76, 0xf6, 0xbb, 0x36, 0xa8, 0x7d, 0xfc, 0xb2, - 0x0b, 0xf9, 0x65, 0x43, 0xdb, 0xfd, 0x05, 0x2e, 0xf8, 0xae, 0xe3, 0x57, 0xb2, 0xe1, 0x6d, 0xf6, - 0xcb, 0x9b, 0x7b, 0xef, 0xfa, 0x77, 0xa6, 0x42, 0xfa, 0x5c, 0x1f, 0x75, 0xec, 0x5f, 0xf5, 0xf6, - 0x3b, 0xf1, 0xe3, 0x72, 0xbd, 0xfb, 0x47, 0xb5, 0x7e, 0xeb, 0xae, 0x8f, 0x48, 0xe8, 0xba, 0xe1, - 0x62, 0xf7, 0x07, 0x99, 0xe0, 0x2b, 0xde, 0x3f, 0xa2, 0x3c, 0xe0, 0xfe, 0x20, 0xe3, 0x09, 0xf7, - 0x7f, 0x29, 0xf0, 0x8b, 0xe7, 0x37, 0x94, 0x0d, 0x77, 0x78, 0x3e, 0xc7, 0x7e, 0x00, 0x2b, 0x7d, - 0x0c, 0xe5, 0xd7, 0x24, 0xc5, 0x7d, 0xe2, 0x92, 0xe2, 0x3e, 0x75, 0x49, 0x71, 0x9f, 0xb9, 0xa4, - 0x38, 0xef, 0xe9, 0x3a, 0x3c, 0x3f, 0x09, 0xbf, 0xf0, 0x0b, 0xbf, 0x91, 0xfd, 0x62, 0x7e, 0x8a, - 0xaa, 0x37, 0xcc, 0xfc, 0x14, 0xcc, 0x2f, 0xd3, 0xf5, 0x86, 0x99, 0x5f, 0x06, 0x6e, 0x0e, 0xfc, - 0xc6, 0x06, 0x7e, 0x63, 0x03, 0xbf, 0xb1, 0x81, 0xdf, 0xd8, 0xc0, 0x6f, 0x6c, 0xe0, 0x37, 0x36, - 0xf0, 0x1b, 0x1b, 0xf8, 0x8d, 0x0d, 0xfc, 0xc6, 0xa6, 0xe4, 0xf7, 0x7f, 0x8d, 0x9c, 0xf5, 0xbd, - 0xa2, 0xf2, 0xb5, 0x89, 0x1e, 0x5f, 0xf0, 0xdb, 0xaa, 0x17, 0x82, 0xfb, 0x62, 0xeb, 0x35, 0x04, - 0xfb, 0x7e, 0xdb, 0xf5, 0x42, 0x70, 0x4f, 0x3c, 0xbd, 0xba, 0x60, 0xf8, 0xbd, 0x13, 0xf0, 0x1b, - 0x9b, 0x21, 0x7e, 0xf7, 0x17, 0x07, 0x7e, 0x3b, 0x63, 0x6a, 0x84, 0xdf, 0x10, 0xc0, 0x6f, 0x6c, - 0xe0, 0x37, 0x36, 0x43, 0xfd, 0x8a, 0x29, 0xbb, 0xeb, 0x5a, 0xbb, 0x38, 0xf0, 0xdb, 0x19, 0xa6, - 0x91, 0xaa, 0xe8, 0xe3, 0x57, 0xcb, 0x00, 0x7e, 0x0f, 0x04, 0x7e, 0x63, 0x73, 0x94, 0xdf, 0xd4, - 0x50, 0xd3, 0xf7, 0x69, 0xe6, 0x93, 0x39, 0xe1, 0xb7, 0x37, 0x83, 0xfd, 0x12, 0xab, 0xcb, 0xcb, - 0x2c, 0x56, 0xb0, 0xf3, 0x33, 0xfc, 0x76, 0xe6, 0xb8, 0xfa, 0x3b, 0x9b, 0x7e, 0x67, 0x23, 0x39, - 0x68, 0x67, 0xd1, 0x38, 0x51, 0xe8, 0x86, 0x8c, 0x6e, 0x7e, 0xd7, 0xbf, 0x67, 0x30, 0x1b, 0xc9, - 0x41, 0x3b, 0x27, 0xfa, 0xcd, 0x83, 0xe0, 0xb7, 0x3b, 0x68, 0x9f, 0x63, 0x73, 0x44, 0xff, 0x6a, - 0x55, 0xfb, 0xca, 0x9e, 0xf7, 0x9b, 0xe1, 0x77, 0x24, 0x43, 0xfd, 0x6e, 0x07, 0x7e, 0x3b, 0x03, - 0xbf, 0xb1, 0x81, 0xdf, 0xd8, 0xe0, 0xfe, 0x51, 0x6c, 0xe0, 0x37, 0x36, 0xf0, 0x1b, 0x9b, 0x21, - 0x7e, 0x1b, 0x19, 0xf3, 0x4d, 0x9f, 0xc9, 0xd7, 0x2e, 0x5a, 0x0a, 0xf8, 0xbd, 0x13, 0xf0, 0x1b, - 0x9b, 0xde, 0x7e, 0x31, 0x3f, 0xe5, 0x62, 0x6c, 0xd5, 0x8b, 0xf9, 0x65, 0x37, 0x63, 0xa3, 0x5e, - 0xcc, 0x0f, 0x0d, 0x0e, 0xfc, 0xc6, 0x06, 0x7e, 0x63, 0x03, 0xbf, 0xb1, 0x81, 0xdf, 0xd8, 0x5c, - 0xc0, 0xaf, 0xf7, 0x04, 0x75, 0xfe, 0x3f, 0x66, 0xd9, 0x31, 0x79, 0x64, 0x45, 0xda, 0x35, 0x07, - 0x65, 0x62, 0x86, 0x95, 0x9a, 0x6f, 0xd0, 0xd2, 0x16, 0x92, 0x14, 0xf7, 0xd0, 0x8f, 0xab, 0xfb, - 0xad, 0x71, 0xd4, 0xec, 0x57, 0x4f, 0x5f, 0xe7, 0xd7, 0xda, 0x77, 0x4d, 0x5e, 0x8f, 0xf0, 0x5b, - 0xf8, 0xf5, 0xd7, 0xf9, 0xcd, 0x1e, 0x0d, 0xaa, 0x4d, 0x4b, 0xe2, 0xe0, 0x77, 0x08, 0xc9, 0x2f, - 0x69, 0xe9, 0xe8, 0x92, 0x58, 0x91, 0x37, 0x88, 0xaf, 0xff, 0x2a, 0x8b, 0x26, 0x90, 0xff, 0x9f, - 0x59, 0xa9, 0x08, 0xa2, 0x3c, 0xd4, 0x19, 0x9b, 0xaa, 0xb1, 0x3c, 0x6a, 0xa6, 0xa6, 0x55, 0x1e, - 0x18, 0xd6, 0xca, 0x9c, 0x7d, 0xb7, 0x91, 0x9c, 0xee, 0x57, 0x35, 0x63, 0x3f, 0x9f, 0xc9, 0x9f, - 0xed, 0x5b, 0xb3, 0xb0, 0xfc, 0xca, 0x50, 0x79, 0xdc, 0xc9, 0x5a, 0x52, 0x1e, 0x35, 0x8f, 0xec, - 0xc1, 0xc2, 0x2c, 0xad, 0x2c, 0x70, 0xb1, 0x50, 0x17, 0xf0, 0xfb, 0xdf, 0x46, 0x8a, 0x05, 0xd0, - 0x0f, 0xc2, 0xfa, 0xb1, 0xd2, 0xef, 0xe2, 0xb8, 0x14, 0xea, 0x95, 0x43, 0xfd, 0x91, 0x09, 0xbf, - 0xa4, 0x60, 0x46, 0x5a, 0xb1, 0xd8, 0xdb, 0xef, 0x37, 0x26, 0x7a, 0x7c, 0xc1, 0x6f, 0xab, 0xde, - 0xb2, 0xe0, 0x49, 0x34, 0x57, 0xb2, 0x65, 0xad, 0xf4, 0x3b, 0xeb, 0xb9, 0xc8, 0x50, 0xa3, 0xfe, - 0xa6, 0x84, 0x73, 0xda, 0x2c, 0x3e, 0x3b, 0x7e, 0x65, 0xa5, 0x25, 0x8b, 0x9d, 0xfd, 0xda, 0x7a, - 0x0d, 0xc1, 0xbe, 0xdf, 0x76, 0xbd, 0x25, 0xc1, 0xba, 0xc4, 0xcd, 0xed, 0x73, 0xb5, 0xdf, 0xba, - 0x42, 0x64, 0x6b, 0x95, 0x0d, 0x5a, 0x14, 0x6f, 0xab, 0xfb, 0xfb, 0xf5, 0xf4, 0xea, 0x82, 0xc3, - 0xf8, 0x55, 0x1a, 0xd8, 0xfd, 0x7e, 0xcd, 0xf6, 0xd9, 0xde, 0xf9, 0xeb, 0x03, 0xfc, 0x72, 0x4c, - 0x89, 0x56, 0x2f, 0x96, 0xb5, 0xe8, 0x3c, 0x8f, 0x6c, 0x7b, 0x6d, 0xff, 0x99, 0x05, 0x16, 0xfb, - 0xcf, 0x64, 0x57, 0xd9, 0x4e, 0xd8, 0x02, 0xf3, 0xdb, 0xa5, 0xff, 0x3c, 0xc4, 0xef, 0xc6, 0x32, - 0x10, 0x1a, 0x93, 0x3b, 0x6c, 0x3f, 0x73, 0x1d, 0xc3, 0xe0, 0x72, 0x99, 0x1a, 0x03, 0xf9, 0xad, - 0x6d, 0x74, 0xcf, 0x60, 0x74, 0xb1, 0xa8, 0x46, 0xd6, 0x34, 0x05, 0xf2, 0x3b, 0xd7, 0x36, 0xba, - 0x87, 0x33, 0xbe, 0x58, 0x44, 0x23, 0xdf, 0x59, 0x24, 0xbf, 0x0f, 0x66, 0xb0, 0x5f, 0xf3, 0xd2, - 0xf1, 0xb5, 0x55, 0xae, 0x81, 0xdf, 0xce, 0x0c, 0xf7, 0x9b, 0x5e, 0x73, 0x06, 0xfa, 0x2d, 0x77, - 0x84, 0xed, 0x9f, 0x5e, 0xd5, 0xf5, 0xd1, 0x24, 0x16, 0x3a, 0x95, 0xaa, 0x37, 0x71, 0xfd, 0x3a, - 0xfb, 0x2d, 0x14, 0x6d, 0x98, 0xdf, 0x9d, 0xd7, 0xb0, 0x2d, 0x1c, 0xe8, 0x97, 0x5d, 0x0d, 0xf2, - 0x41, 0x00, 0x2b, 0xf9, 0x7e, 0xca, 0x87, 0xb2, 0xd5, 0xef, 0x44, 0xdf, 0x7b, 0x15, 0xaa, 0x3b, - 0xc7, 0x9d, 0x7f, 0x95, 0xb1, 0xa6, 0x69, 0x92, 0x5f, 0xf6, 0x1c, 0xbf, 0xde, 0x50, 0x88, 0x95, - 0x58, 0xf8, 0xe5, 0x43, 0x10, 0xf9, 0x10, 0x0b, 0xd9, 0x25, 0x59, 0x66, 0x7b, 0xcf, 0x7f, 0xff, - 0x1d, 0x3a, 0xfe, 0xcc, 0xaf, 0xb1, 0x81, 0xd3, 0xd4, 0x3e, 0xf3, 0x66, 0x33, 0x2f, 0xfd, 0x29, - 0x7e, 0xf5, 0xa1, 0xc0, 0x14, 0xa7, 0x9c, 0xa9, 0xa7, 0xf5, 0x06, 0xa3, 0x3a, 0x84, 0x68, 0x64, - 0x66, 0xfa, 0x95, 0x2b, 0xc4, 0xa6, 0x06, 0x56, 0x8d, 0x32, 0xab, 0x41, 0xed, 0xb3, 0xf4, 0x2b, - 0x32, 0x1f, 0xe8, 0x57, 0x4a, 0x12, 0xd6, 0x4c, 0xbf, 0x56, 0xf6, 0x96, 0x5f, 0x5a, 0xa7, 0xb3, - 0x22, 0x88, 0x65, 0x9e, 0xcc, 0xdc, 0xd4, 0xc0, 0x71, 0xf5, 0x57, 0x29, 0xf5, 0x05, 0xea, 0xef, - 0x5a, 0x8e, 0xcd, 0xf5, 0xf7, 0x55, 0x7a, 0xd7, 0x6f, 0xf6, 0x93, 0x12, 0xcb, 0x6c, 0x77, 0xd6, - 0x99, 0xac, 0x89, 0xe3, 0xfa, 0x57, 0xd7, 0x3c, 0xff, 0xf2, 0xe2, 0x6d, 0xa9, 0xbf, 0xa6, 0xdf, - 0xec, 0x5d, 0x2d, 0x94, 0x2e, 0xd1, 0xaa, 0x09, 0xbb, 0x39, 0x70, 0x7c, 0x83, 0xd6, 0x92, 0x63, - 0xfa, 0xcf, 0xee, 0xe1, 0x69, 0xf6, 0x6b, 0xa6, 0x63, 0xef, 0x79, 0xfd, 0x35, 0xfc, 0x5a, 0x95, - 0xa0, 0x8d, 0xa8, 0xe3, 0x93, 0xe5, 0x7e, 0xb0, 0xda, 0x3e, 0x57, 0xa4, 0x4b, 0x89, 0x65, 0xa3, - 0x3c, 0xd1, 0x8d, 0x72, 0x65, 0x96, 0x7b, 0xd6, 0x1d, 0x51, 0xfb, 0xcf, 0xc5, 0x92, 0x14, 0x88, - 0xea, 0x17, 0x7c, 0x00, 0xbf, 0xb1, 0x81, 0xdf, 0xd8, 0x3c, 0xe2, 0xfe, 0xef, 0x83, 0x79, 0xc2, - 0xf3, 0x1b, 0x4f, 0x66, 0x88, 0xdf, 0x46, 0xc6, 0x7c, 0xd3, 0x32, 0xe6, 0x75, 0xab, 0x16, 0xaa, - 0x75, 0xb4, 0x0b, 0x09, 0xab, 0xfa, 0xe6, 0x6a, 0xc0, 0xfe, 0x71, 0xca, 0x6f, 0x5c, 0xb4, 0x14, - 0x71, 0xfd, 0x56, 0x0c, 0x8a, 0xf0, 0xc8, 0xba, 0xb5, 0xdb, 0x72, 0xdf, 0x93, 0xb3, 0x03, 0xfc, - 0x52, 0xf2, 0x01, 0x17, 0x27, 0xb0, 0x76, 0x2d, 0xdf, 0x7a, 0x73, 0xbf, 0x07, 0xcc, 0x4f, 0x19, - 0x49, 0xed, 0xfd, 0x38, 0x63, 0xf0, 0x5a, 0x0e, 0xcf, 0x59, 0xa3, 0xcf, 0x7c, 0x20, 0x8b, 0xb5, - 0xf5, 0xd9, 0xb2, 0x4c, 0xbb, 0x91, 0xad, 0x7a, 0xcf, 0x9f, 0x5f, 0x36, 0x94, 0xfc, 0x40, 0x1a, - 0xf7, 0x17, 0xb4, 0x5b, 0x12, 0x62, 0x85, 0xfc, 0xad, 0x50, 0x71, 0xfc, 0x95, 0xb4, 0x1b, 0xfa, - 0xa0, 0x67, 0xc3, 0x40, 0xd6, 0x46, 0xbd, 0xe7, 0xcf, 0x0f, 0x1d, 0x4a, 0xe5, 0x81, 0x94, 0x75, - 0xd1, 0xf0, 0xab, 0xa4, 0x4b, 0x16, 0xc5, 0xe2, 0x28, 0xbf, 0x5b, 0x09, 0xed, 0x57, 0x69, 0x9f, - 0x8d, 0xfa, 0xcb, 0x17, 0x95, 0x06, 0xd7, 0xec, 0x0a, 0x2f, 0xaf, 0xf0, 0x7b, 0x38, 0x7b, 0xfa, - 0x57, 0x7a, 0xfd, 0x15, 0x41, 0xd9, 0x56, 0xde, 0x56, 0xc3, 0xef, 0x21, 0xec, 0xba, 0x3e, 0xaa, - 0x6e, 0x9f, 0xe1, 0xf7, 0x64, 0x78, 0xef, 0xa7, 0x10, 0xca, 0x6f, 0xef, 0x25, 0x6b, 0xcb, 0x46, - 0x25, 0x1f, 0xd6, 0xcc, 0xb3, 0x05, 0xe6, 0xb7, 0x6f, 0xff, 0x79, 0x33, 0x71, 0xfd, 0x1e, 0xca, - 0x81, 0xc6, 0xb6, 0x01, 0xbf, 0x3d, 0xb8, 0xac, 0x5e, 0xf8, 0xed, 0xc0, 0xfe, 0xf1, 0xe4, 0xf1, - 0xc0, 0x6f, 0x6c, 0xe0, 0x37, 0x36, 0x25, 0xbf, 0xff, 0x69, 0x64, 0x57, 0xa1, 0xec, 0x21, 0x44, - 0xba, 0xb6, 0x63, 0xab, 0x58, 0x75, 0xaf, 0x8f, 0x86, 0xef, 0xdf, 0xda, 0xc8, 0xb7, 0x26, 0x7a, - 0x7c, 0xc1, 0x6f, 0xab, 0xde, 0x7d, 0x82, 0x8d, 0xab, 0x44, 0xf5, 0x0a, 0xb4, 0x07, 0x5b, 0xaf, - 0x4a, 0xcf, 0xf3, 0x6b, 0xeb, 0x35, 0x04, 0xfb, 0x7e, 0xdb, 0xf5, 0xee, 0x12, 0x5c, 0xe7, 0xb7, - 0x1f, 0xb7, 0xf1, 0xeb, 0xe9, 0xd5, 0x05, 0xdf, 0xd0, 0xaf, 0x18, 0x70, 0x98, 0xe8, 0xb8, 0x01, - 0x5f, 0x24, 0xef, 0x15, 0xfb, 0x5b, 0x96, 0x9d, 0xdc, 0xca, 0xf1, 0xf3, 0x86, 0x61, 0xd1, 0xed, - 0x3c, 0xc5, 0xaf, 0x8c, 0xb2, 0x17, 0xb5, 0xbb, 0x7a, 0x5b, 0xee, 0x2f, 0x64, 0x83, 0x5a, 0x66, - 0x3c, 0x75, 0x3b, 0xaa, 0x0a, 0x0f, 0xf1, 0xbb, 0xbf, 0x38, 0xfb, 0xfd, 0x92, 0xfb, 0xb1, 0xf2, - 0x3e, 0xab, 0x18, 0x78, 0x2c, 0xfa, 0xad, 0xda, 0x9f, 0xf6, 0x59, 0x55, 0x2b, 0xe3, 0x95, 0xa0, - 0x4d, 0x5d, 0xb5, 0x6d, 0x98, 0x1a, 0xef, 0xe6, 0x37, 0xbd, 0x66, 0xab, 0x2b, 0xfd, 0x1a, 0x77, - 0xf5, 0x4a, 0xf5, 0x77, 0xa6, 0x3f, 0x2d, 0x9e, 0x9d, 0x1a, 0xaf, 0xfb, 0xdd, 0xf0, 0x5d, 0x37, - 0x01, 0xbf, 0x32, 0xed, 0x86, 0xfa, 0x2b, 0x55, 0x89, 0xaa, 0x5b, 0xd5, 0x3e, 0x7f, 0xac, 0x3a, - 0xa4, 0xfe, 0xb2, 0xdd, 0x3c, 0xd2, 0xef, 0xc6, 0xf6, 0xd9, 0xf6, 0x7b, 0xad, 0xf3, 0x2f, 0xd9, - 0xf7, 0xa4, 0x6f, 0x20, 0xd4, 0xf9, 0x55, 0xaf, 0xff, 0xb3, 0x35, 0x59, 0xc4, 0x11, 0x7e, 0x69, - 0xd9, 0xd4, 0xfe, 0x73, 0xdd, 0x0e, 0x95, 0x3c, 0xbc, 0xfe, 0xb3, 0x88, 0xca, 0x76, 0x39, 0x48, - 0xf0, 0x38, 0xbf, 0xb3, 0x7d, 0xbc, 0xcd, 0xcf, 0xad, 0xd5, 0xbf, 0x1e, 0xbd, 0x6e, 0xf5, 0xcb, - 0xf4, 0x2a, 0x0c, 0xf5, 0x5b, 0xf4, 0x79, 0x8a, 0x5f, 0xfb, 0x84, 0xd9, 0x25, 0xe7, 0x6b, 0x71, - 0x88, 0x5f, 0xde, 0xc1, 0xa4, 0xed, 0x92, 0x6c, 0xb1, 0x0e, 0xa9, 0xbf, 0xec, 0x02, 0xaa, 0x67, - 0xd7, 0xe6, 0xa1, 0x7e, 0x0b, 0xdd, 0x10, 0xba, 0x78, 0x58, 0xfb, 0xfc, 0x14, 0xe0, 0xf7, 0x0c, - 0x8e, 0xab, 0xe8, 0x42, 0xe3, 0x20, 0xbf, 0xbc, 0x6f, 0x6a, 0x7f, 0xde, 0xef, 0x37, 0x3f, 0x62, - 0xeb, 0xb8, 0xc4, 0x80, 0x9e, 0x94, 0x9a, 0x91, 0xd1, 0x87, 0xb7, 0xd3, 0xab, 0xd7, 0x18, 0x95, - 0xbb, 0xaa, 0xfd, 0x26, 0x52, 0xe3, 0x9a, 0xb0, 0x77, 0xfd, 0x9d, 0x6b, 0x3e, 0xf7, 0xf4, 0xab, - 0xac, 0xbd, 0x8a, 0x5f, 0xfd, 0xe0, 0x6c, 0xd8, 0x55, 0xfd, 0x37, 0x19, 0x5a, 0x7f, 0xe9, 0xe5, - 0xe7, 0xe0, 0xf6, 0xb9, 0xf1, 0x30, 0xf4, 0xd8, 0xdb, 0x0d, 0xfc, 0x0e, 0x1a, 0xdf, 0xb0, 0xfa, - 0xcf, 0xcb, 0x0e, 0x3b, 0xf4, 0x9f, 0xdd, 0xc3, 0x20, 0x86, 0x2e, 0x4a, 0xe3, 0x1b, 0xdb, 0x1a, - 0x4d, 0x7e, 0x31, 0x20, 0x2f, 0x09, 0xb4, 0x5c, 0xe9, 0xcf, 0x9e, 0xae, 0x61, 0x67, 0x2b, 0xd6, - 0xc3, 0xcf, 0x7a, 0xfb, 0xf2, 0xba, 0xc3, 0x64, 0x94, 0xdf, 0x9d, 0x0c, 0xf3, 0x4b, 0x3e, 0xea, - 0x2d, 0xc7, 0xba, 0x28, 0x0f, 0x59, 0x7e, 0x1a, 0xcf, 0xd5, 0xc8, 0x7c, 0xb2, 0xdc, 0xe8, 0xcf, - 0x6b, 0xa6, 0xba, 0xe8, 0x9a, 0xf4, 0xba, 0xfc, 0x2b, 0x97, 0xb6, 0x54, 0x93, 0xe3, 0xf9, 0xe5, - 0x3f, 0x78, 0xb6, 0xb1, 0xd2, 0xef, 0x96, 0xbd, 0x95, 0xfd, 0xca, 0x04, 0xb2, 0xf2, 0xaf, 0xeb, - 0xc4, 0x62, 0xa5, 0xdf, 0x02, 0xf1, 0xfc, 0x2a, 0x6b, 0xeb, 0xfc, 0x4e, 0x4b, 0x0b, 0x2b, 0xf3, - 0x28, 0xd4, 0x5f, 0x79, 0x31, 0xa0, 0xe6, 0x96, 0xff, 0xe8, 0x58, 0x56, 0xbb, 0xfc, 0xa2, 0x7d, - 0xde, 0x5a, 0x7f, 0xed, 0x9c, 0xcc, 0xbd, 0xd1, 0x86, 0x43, 0xbe, 0x8a, 0xdc, 0xd4, 0x4d, 0xe9, - 0x14, 0x42, 0x0a, 0x59, 0xe9, 0xb7, 0xa2, 0xb8, 0xf0, 0x7b, 0x5c, 0xfb, 0xdc, 0xdb, 0x6f, 0x4d, - 0x23, 0x1d, 0xe4, 0xfe, 0xef, 0xac, 0x34, 0xa2, 0xb3, 0xe1, 0x77, 0x2e, 0xf5, 0x9f, 0xb7, 0xed, - 0x8d, 0xe5, 0x40, 0x5f, 0x59, 0x6e, 0x24, 0x5c, 0xe4, 0xc2, 0x8b, 0xaa, 0xf8, 0xed, 0xd8, 0x7f, - 0xae, 0xd9, 0x50, 0xe1, 0xb7, 0x11, 0xbf, 0xc4, 0x7d, 0x50, 0x5b, 0xd8, 0x83, 0x77, 0x5c, 0xb5, - 0xbe, 0x91, 0x6f, 0x5d, 0xb4, 0x14, 0xb7, 0xf7, 0xab, 0xb7, 0x78, 0x27, 0x33, 0xaa, 0x10, 0x0f, - 0xf4, 0x3b, 0xab, 0x2d, 0xde, 0xa9, 0x8c, 0x2b, 0x44, 0x6f, 0xbf, 0x27, 0xcd, 0x4f, 0x01, 0x16, - 0x5b, 0xf5, 0x5e, 0x73, 0x7e, 0x19, 0x30, 0xd9, 0xa8, 0x17, 0xf3, 0x43, 0x83, 0x03, 0xbf, 0xb1, - 0x81, 0xdf, 0xd8, 0xc0, 0x6f, 0x6c, 0xe0, 0x37, 0x36, 0xf0, 0x1b, 0x1b, 0xf8, 0x8d, 0x0d, 0xfc, - 0xc6, 0x06, 0x7e, 0x63, 0x03, 0xbf, 0xb1, 0x29, 0xf9, 0xfd, 0xa3, 0x91, 0xb3, 0xbe, 0x57, 0x54, - 0xbe, 0x33, 0xd1, 0xe3, 0x0b, 0x7e, 0x5b, 0xf5, 0x42, 0x70, 0x5f, 0x6c, 0xbd, 0x86, 0x60, 0xdf, - 0x6f, 0xbb, 0x5e, 0x08, 0xee, 0x89, 0xa7, 0x57, 0x17, 0x0c, 0xbf, 0x77, 0x02, 0x7e, 0x63, 0x33, - 0xc4, 0xef, 0xfe, 0xe2, 0xc0, 0x6f, 0x67, 0x4c, 0x8d, 0xf0, 0x1b, 0x02, 0xa6, 0x91, 0x3e, 0x06, - 0x04, 0xbf, 0x21, 0x18, 0xe7, 0x57, 0x7b, 0x1e, 0xb9, 0x08, 0xfc, 0x76, 0x66, 0x98, 0xdf, 0xec, - 0x69, 0xee, 0x2a, 0xe0, 0xb7, 0x33, 0xf0, 0x1b, 0x9b, 0xc1, 0x7e, 0xd7, 0x7c, 0xe5, 0x2c, 0x10, - 0x7d, 0x09, 0x7e, 0x7b, 0x33, 0xf6, 0xfc, 0xbb, 0xe6, 0x5b, 0xf7, 0x02, 0xbf, 0xdd, 0x19, 0xda, - 0x7f, 0x66, 0xb3, 0xa1, 0xc4, 0x94, 0x46, 0xfd, 0x23, 0xfc, 0x76, 0x66, 0xf0, 0xf5, 0x91, 0x32, - 0xb1, 0x31, 0x9b, 0xa6, 0x47, 0x67, 0xfe, 0xc1, 0x6f, 0x67, 0x0e, 0xe9, 0x5f, 0x39, 0x0d, 0x32, - 0x5b, 0x82, 0xdf, 0xee, 0x9c, 0xeb, 0x17, 0xe7, 0xdf, 0xd1, 0x1c, 0x32, 0xbe, 0xa1, 0x2e, 0xa2, - 0xff, 0x7c, 0x04, 0x87, 0x8c, 0x4f, 0xd6, 0x5f, 0x05, 0xc3, 0x6f, 0x67, 0xe0, 0x37, 0x36, 0xf0, - 0x1b, 0x1b, 0xdc, 0x3f, 0x8a, 0x0d, 0xfc, 0xc6, 0x06, 0x7e, 0x63, 0x03, 0xbf, 0xb1, 0x19, 0xe2, - 0xb7, 0x91, 0x81, 0x5f, 0xf7, 0x71, 0x7c, 0xe7, 0xa2, 0xa5, 0x80, 0xdf, 0x3b, 0x01, 0xbf, 0xb1, - 0xe9, 0xed, 0x17, 0xf3, 0x53, 0x2e, 0xc6, 0x56, 0xbd, 0x98, 0x5f, 0x76, 0x33, 0x36, 0xea, 0xc5, - 0xfc, 0xd0, 0xe0, 0xc0, 0x6f, 0x6c, 0xe0, 0x37, 0x36, 0xf0, 0x1b, 0x1b, 0xf8, 0x8d, 0x0d, 0xfc, - 0xc6, 0x06, 0x7e, 0x63, 0x03, 0xbf, 0xb1, 0x81, 0xdf, 0xd8, 0xc0, 0x6f, 0x6c, 0x4a, 0x7e, 0x7f, - 0x37, 0xe1, 0xf9, 0xfc, 0x66, 0xc2, 0xe3, 0x7e, 0x35, 0xe1, 0x71, 0xbf, 0x98, 0xf0, 0xb8, 0x9f, - 0x4d, 0x78, 0xdc, 0x4f, 0x26, 0x3c, 0xee, 0x47, 0x13, 0x1e, 0xf7, 0x83, 0x09, 0x8f, 0xfb, 0xde, - 0x84, 0xc7, 0xfd, 0xdb, 0x84, 0xc7, 0xfd, 0xcb, 0x64, 0x56, 0x29, 0xf8, 0xb5, 0xf5, 0x72, 0xc1, - 0xb6, 0x5e, 0x2e, 0xd8, 0xd6, 0xcb, 0x05, 0xdb, 0x7a, 0xb9, 0x60, 0x5b, 0x2f, 0x17, 0x6c, 0xeb, - 0xe5, 0x82, 0x6d, 0xbd, 0x5c, 0xb0, 0xad, 0x97, 0x0b, 0xb6, 0xf5, 0x72, 0xc1, 0xb6, 0x5e, 0x2e, - 0xd8, 0xd6, 0x6b, 0x08, 0xf6, 0xfd, 0x7a, 0x7a, 0xa9, 0x60, 0x4f, 0x2f, 0x15, 0xec, 0xe9, 0xa5, - 0x82, 0x3d, 0xbd, 0x54, 0xb0, 0xa7, 0x97, 0x0a, 0xf6, 0xf4, 0x52, 0xc1, 0x9e, 0x5e, 0x2a, 0xd8, - 0xd3, 0x4b, 0x05, 0x7b, 0x7a, 0xa9, 0x60, 0x4f, 0x2f, 0x15, 0xec, 0xe9, 0xd5, 0x05, 0xc3, 0x2f, - 0xfc, 0xc2, 0x6f, 0x68, 0xbf, 0x5a, 0x32, 0xcd, 0xaf, 0x16, 0xa7, 0xf9, 0xd5, 0xe2, 0x34, 0xbf, - 0x5a, 0x9c, 0xe6, 0x57, 0x8b, 0xd3, 0xfc, 0x6a, 0x71, 0x9a, 0x5f, 0x2d, 0x4e, 0xf3, 0xab, 0xc5, - 0x69, 0x7e, 0xb5, 0x38, 0xcd, 0xaf, 0x16, 0xa7, 0xf9, 0xd5, 0xe2, 0xe0, 0x17, 0x7e, 0xe1, 0x97, - 0x69, 0x64, 0x7f, 0x10, 0xca, 0xf6, 0xcb, 0xff, 0x6a, 0x54, 0xc1, 0xef, 0x1a, 0x0c, 0xbf, 0x67, - 0xfb, 0x7d, 0x53, 0x91, 0xdc, 0x39, 0xf5, 0x97, 0x09, 0xf6, 0xfd, 0xa6, 0x50, 0xcf, 0x2f, 0xfd, - 0x53, 0x63, 0xf0, 0x3b, 0xc8, 0x2f, 0xfd, 0xdf, 0x9d, 0x67, 0xbf, 0x7d, 0xa6, 0x82, 0x5d, 0xbf, - 0x24, 0x10, 0x7e, 0x87, 0xf8, 0xcd, 0xfe, 0x8f, 0xed, 0x1e, 0x7e, 0xa9, 0x37, 0xcf, 0x2f, 0xfd, - 0x1d, 0xb8, 0xed, 0xf3, 0x7b, 0xcb, 0xa1, 0x6d, 0x10, 0x1a, 0x49, 0x86, 0xf0, 0xfb, 0x97, 0xc6, - 0x69, 0xe5, 0x6d, 0xdd, 0xd4, 0xcd, 0x2f, 0x39, 0xd0, 0x8e, 0x5f, 0xd6, 0x8e, 0xfb, 0xf5, 0x37, - 0x4d, 0xc1, 0x85, 0xdf, 0x6d, 0x7e, 0xdf, 0x3e, 0x50, 0xcd, 0x7e, 0xff, 0xb9, 0xea, 0xfc, 0xcb, - 0x02, 0x6d, 0xbf, 0xbc, 0x1f, 0x86, 0xfe, 0xd5, 0x10, 0xbf, 0xaf, 0x8f, 0xa9, 0x12, 0xbb, 0x7e, - 0xab, 0xfa, 0xcf, 0x3c, 0xd4, 0xf4, 0x2b, 0xfe, 0x38, 0x2b, 0xfc, 0x9e, 0xdd, 0x7f, 0x9e, 0x37, - 0xf9, 0x5d, 0x62, 0x2d, 0xbf, 0xf2, 0x6f, 0xef, 0xc2, 0xef, 0xf9, 0x7e, 0xa9, 0x13, 0xf8, 0x7d, - 0xb6, 0x5f, 0xb4, 0xcf, 0xef, 0x44, 0xf5, 0x8b, 0xfe, 0xd5, 0x07, 0xb7, 0xf2, 0x4b, 0x39, 0xf2, - 0xfa, 0x88, 0x82, 0xeb, 0xa3, 0x0b, 0xf8, 0xed, 0x3d, 0xbe, 0x31, 0x9b, 0x1b, 0xe0, 0x57, 0xdf, - 0x30, 0xb4, 0x7d, 0xee, 0x3d, 0x3e, 0x49, 0x41, 0xfb, 0x7c, 0xba, 0xdf, 0xee, 0xf7, 0x17, 0x28, - 0xf0, 0x7b, 0x76, 0xfb, 0x8c, 0xfb, 0x83, 0xb1, 0xfd, 0x72, 0x70, 0x7f, 0x1f, 0x7e, 0x95, 0x0d, - 0xa7, 0xfa, 0x35, 0x49, 0x71, 0xbf, 0xb9, 0xa4, 0xb8, 0x5f, 0x5d, 0x52, 0xdc, 0x2f, 0x2e, 0x29, - 0xee, 0x67, 0x97, 0x14, 0xf7, 0x93, 0x4b, 0x8a, 0xfb, 0xd1, 0x25, 0xc5, 0xfd, 0xe0, 0x92, 0xe2, - 0xbe, 0x77, 0x11, 0x1a, 0x4d, 0x84, 0x46, 0x13, 0xf8, 0x85, 0x5f, 0xf8, 0x7d, 0x92, 0x5f, 0xcc, - 0x4f, 0x51, 0xf5, 0x86, 0x99, 0x9f, 0x82, 0xf9, 0x65, 0xba, 0xde, 0x30, 0xf3, 0xcb, 0xc0, 0xcd, - 0x81, 0xdf, 0xd8, 0xc0, 0x6f, 0x6c, 0x34, 0xbf, 0x10, 0x1c, 0x06, 0x55, 0x2f, 0xfc, 0x86, 0x41, - 0xf7, 0x0b, 0xc1, 0x41, 0x30, 0xf4, 0xc2, 0x6f, 0x10, 0x2c, 0xbf, 0x10, 0x1c, 0x02, 0x53, 0x2f, - 0x0c, 0x07, 0xc0, 0xb3, 0x0b, 0xc3, 0x77, 0xa7, 0x64, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0xc2, 0xff, 0x01, 0x7c, 0x20, 0xed, 0x46 -}; - -#endif diff --git a/backends/psp/osys_psp.cpp b/backends/psp/osys_psp.cpp deleted file mode 100644 index 9bac3f28c6..0000000000 --- a/backends/psp/osys_psp.cpp +++ /dev/null @@ -1,613 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * Copyright (C) 2005 Joost Peters PSP Backend - * Copyright (C) 2005 Thomas Mayer PSP Backend - * Copyright (C) 2005 Paolo Costabel PSP Backend - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "common/stdafx.h" -#include "common/scummsys.h" - -#include "common/rect.h" -#include "backends/psp/osys_psp.h" - -#include "common/config-manager.h" - -#include - -#include "./trace.h" - -#define SCREEN_WIDTH 480 -#define SCREEN_HEIGHT 272 - - -unsigned short *DrawBuffer = (unsigned short *)0x44044000; -unsigned short *DisplayBuffer = (unsigned short *)0x44000000; - -unsigned long RGBToColour(unsigned long r, unsigned long g, unsigned long b) { - return (((b >> 3) << 10) | ((g >> 3) << 5) | ((r >> 3) << 0)) | 0x8000; -} - -void putPixel(uint16 x, uint16 y, unsigned long colour) { - *(unsigned short *)(DrawBuffer + (y << 9) + x ) = colour; -} - -const OSystem::GraphicsMode OSystem_PSP::s_supportedGraphicsModes[] = { - { "320x200 (centered)", "320x200 16-bit centered", CENTERED_320X200 }, - { "353x272 (best-fit, centered)", "353x272 16-bit centered", CENTERED_435X272 }, - { "480x272 (full screen)", "480x272 16-bit stretched", STRETCHED_480X272 }, - { "362x272 (4:3, centered)", "362x272 16-bit centered", CENTERED_362X272 }, - {0, 0, 0} -}; - - -OSystem_PSP::OSystem_PSP() : _screenWidth(0), _screenHeight(0), _overlayWidth(0), _overlayHeight(0), _offscreen(0), _overlayBuffer(0), _overlayVisible(false), _shakePos(0), _mouseBuf(0), _prevButtons(0), _lastPadCheck(0), _padAccel(0) { - - memset(_palette, 0, sizeof(_palette)); - - _samplesPerSec = 0; - - //init SDL - uint32 sdlFlags = SDL_INIT_AUDIO | SDL_INIT_TIMER; - SDL_Init(sdlFlags); - - sceDisplaySetMode(0, SCREEN_WIDTH, SCREEN_HEIGHT); - sceDisplaySetFrameBuf((char *)DisplayBuffer, 512, 1, 1); - sceDisplayWaitVblankStart(); -} - -OSystem_PSP::~OSystem_PSP() { - if (_offscreen) free(_offscreen); - if (_overlayBuffer) free(_overlayBuffer); - if (_mouseBuf) free(_mouseBuf); -} - -bool OSystem_PSP::hasFeature(Feature f) { - return false; -} - -void OSystem_PSP::setFeatureState(Feature f, bool enable) { -} - -bool OSystem_PSP::getFeatureState(Feature f) { - return false; -} - -const OSystem::GraphicsMode* OSystem_PSP::getSupportedGraphicsModes() const { - return s_supportedGraphicsModes; -} - - -int OSystem_PSP::getDefaultGraphicsMode() const { - return -1; -} - -bool OSystem_PSP::setGraphicsMode(int mode) { - return true; -} - -bool OSystem_PSP::setGraphicsMode(const char *name) { - return true; -} - -int OSystem_PSP::getGraphicsMode() const { - return -1; -} - -void OSystem_PSP::initSize(uint width, uint height) { - _overlayWidth = _screenWidth = width; - _overlayHeight = _screenHeight = height; - - if (_offscreen) - free(_offscreen); - - _offscreen = (byte *)malloc(width * height); - - if (_overlayBuffer) - free(_overlayBuffer); - - _overlayBuffer = (OverlayColor *)malloc(_overlayWidth * _overlayHeight * sizeof(OverlayColor)); - bzero(_offscreen, width * height); - clearOverlay(); - - _mouseVisible = false; -} - -int16 OSystem_PSP::getWidth() { - return _screenWidth; -} - -int16 OSystem_PSP::getHeight() { - return _screenHeight; -} - -void OSystem_PSP::setPalette(const byte *colors, uint start, uint num) { - const byte *b = colors; - - for (uint i = 0; i < num; ++i) { - _palette[start + i] = RGBToColour(b[0], b[1], b[2]); - b += 4; - } -} - -void OSystem_PSP::copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h) { - //Clip the coordinates - if (x < 0) { - w += x; - buf -= x; - x = 0; - } - - if (y < 0) { - h += y; - buf -= y * pitch; - y = 0; - } - - if (w > _screenWidth - x) { - w = _screenWidth - x; - } - - if (h > _screenHeight - y) { - h = _screenHeight - y; - } - - if (w <= 0 || h <= 0) - return; - - - byte *dst = _offscreen + y * _screenWidth + x; - if (_screenWidth == pitch && pitch == w) { - memcpy(dst, buf, h * w); - } else { - do { - memcpy(dst, buf, w); - buf += pitch; - dst += _screenWidth; - } while (--h); - } -} - -void OSystem_PSP::updateScreen() { - unsigned short *temp; - - uint xStart = (SCREEN_WIDTH >> 1) - (_screenWidth >> 1); - uint yStart = (SCREEN_HEIGHT >> 1) - (_screenHeight >> 1); - - for (int i = 0; i < _screenHeight; ++i) { - for (int j = 0; j < _screenWidth; ++j) { - putPixel(xStart + j, yStart + i, _palette[_offscreen[i * _screenWidth +j]]); - } - } - - if(_overlayVisible) { - for (int i = 0; i < _screenHeight; ++i) { - for (int j = 0; j < _screenWidth; ++j) { - - OverlayColor pixel = _overlayBuffer[(i * _overlayWidth +j)]; - - if(pixel & 0x8000) - putPixel(xStart + j, yStart + i, pixel); - } - } - } - - //draw mouse on top - if (_mouseVisible) { - for (int y = 0; y < _mouseHeight; ++y) { - for (int x = 0; x < _mouseWidth; ++x) { - if (_mouseBuf[y * _mouseHeight + x] != _mouseKeyColour) { - int my = _mouseY + y; // + _mouseHotspotY; - int mx = _mouseX + x; // + _mouseHotspotX; - - if (mx >= 0 && mx < _screenWidth && my >= 0 && my < _screenHeight) - putPixel(xStart + mx, yStart + my, _palette[_mouseBuf[y * _mouseHeight + x]]); - } - } - } - } - - - // switch buffers - temp = DrawBuffer; - DrawBuffer = DisplayBuffer; - DisplayBuffer = temp; - sceDisplayWaitVblankStart(); - sceDisplaySetFrameBuf((char *)DisplayBuffer, 512, 1, 1); - -} - -void OSystem_PSP::setShakePos(int shakeOffset) { - _shakePos = shakeOffset; -} - -void OSystem_PSP::showOverlay() { - _overlayVisible = true; -} - -void OSystem_PSP::hideOverlay() { - PSPDebugTrace("OSystem_PSP::hideOverlay called\n"); - _overlayVisible = false; -} - -void OSystem_PSP::clearOverlay() { - PSPDebugTrace("clearOverlay\n"); - bzero(_overlayBuffer, _overlayWidth * _overlayHeight * sizeof(OverlayColor)); -} - -void OSystem_PSP::grabOverlay(OverlayColor *buf, int pitch) { - int h = _overlayHeight; - OverlayColor *src = _overlayBuffer; - - do { - memcpy(buf, src, _overlayWidth * sizeof(OverlayColor)); - src += _overlayWidth; - buf += pitch; - } while (--h); -} - -void OSystem_PSP::copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h) { - PSPDebugTrace("copyRectToOverlay\n"); - - //Clip the coordinates - if (x < 0) { - w += x; - buf -= x; - x = 0; - } - - if (y < 0) { - h += y; - buf -= y * pitch; - y = 0; - } - - if (w > _overlayWidth - x) { - w = _overlayWidth - x; - } - - if (h > _overlayHeight - y) { - h = _overlayHeight - y; - } - - if (w <= 0 || h <= 0) - return; - - - OverlayColor *dst = _overlayBuffer + (y * _overlayWidth + x); - if (_overlayWidth == pitch && pitch == w) { - memcpy(dst, buf, h * w * sizeof(OverlayColor)); - } else { - do { - memcpy(dst, buf, w * sizeof(OverlayColor)); - buf += pitch; - dst += _overlayWidth; - } while (--h); - } -} - -int16 OSystem_PSP::getOverlayWidth() { - return _overlayWidth; -} - -int16 OSystem_PSP::getOverlayHeight() { - return _overlayHeight; -} - -OverlayColor OSystem_PSP::RGBToColor(uint8 r, uint8 g, uint8 b) { - return (((r >> 3) & 0x1F) | (((g >> 3) & 0x1F) << 5) | (((b >> 3) & 0x1F) << 10 ) ) | 0x8000; -} - -void OSystem_PSP::colorToRGB(OverlayColor color, uint8 &r, uint8 &g, uint8 &b) { - r = ((color & 0x1F) << 3); - g = (((color >> 5) & 0x1F) << 3); - b = (((color >> 10) & 0x1F) << 3); -} - -OverlayColor OSystem_PSP::ARGBToColor(uint8 a, uint8 r, uint8 g, uint8 b) { - OverlayColor color = RGBToColor(r, g, b); - - if(a == 255) - color |= 0x8000; - - return color; -} - -void OSystem_PSP::colorToARGB(OverlayColor color, uint8 &a, uint8 &r, uint8 &g, uint8 &b) { - colorToRGB(color, r, g, b); - if(color & 0x8000) - a = 255; - else - a = 0; -} - -void OSystem_PSP::grabPalette(byte *colors, uint start, uint num) { - uint i; - uint16 color; - - for (i = start; i < start + num; i++) { - color = _palette[i]; - *colors++ = ((color & 0x1F) << 3); - *colors++ = (((color >> 5) & 0x1F) << 3); - *colors++ = (((color >> 10) & 0x1F) << 3); - *colors++ = (color & 0x8000 ? 255 : 0); - } -} - -bool OSystem_PSP::showMouse(bool visible) { - bool last = _mouseVisible; - _mouseVisible = visible; - return last; -} - -void OSystem_PSP::warpMouse(int x, int y) { - //assert(x > 0 && x < _screenWidth); - //assert(y > 0 && y < _screenHeight); - _mouseX = x; - _mouseY = y; -} - -void OSystem_PSP::setMouseCursor(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, byte keycolor, int cursorTargetScale) { - //TODO: handle cursorTargetScale - _mouseWidth = w; - _mouseHeight = h; - - _mouseHotspotX = hotspotX; - _mouseHotspotY = hotspotY; - - _mouseKeyColour = keycolor; - - if (_mouseBuf) - free(_mouseBuf); - - _mouseBuf = (byte *)malloc(w * h); - memcpy(_mouseBuf, buf, w * h); -} - -#define PAD_CHECK_TIME 40 -#define PAD_DIR_MASK (PSP_CTRL_UP | PSP_CTRL_DOWN | PSP_CTRL_LEFT | PSP_CTRL_RIGHT) - -bool OSystem_PSP::pollEvent(Event &event) { - s8 analogStepAmountX = 0; - s8 analogStepAmountY = 0; -/* - SceCtrlData pad; - - sceCtrlSetSamplingCycle(0); - sceCtrlSetSamplingMode(1); - sceCtrlReadBufferPositive(&pad, 1); -*/ - uint32 buttonsChanged = pad.Buttons ^ _prevButtons; - - if (buttonsChanged & (PSP_CTRL_CROSS | PSP_CTRL_CIRCLE | PSP_CTRL_LTRIGGER | PSP_CTRL_RTRIGGER | PSP_CTRL_START | PSP_CTRL_SELECT | PSP_CTRL_SQUARE)) { - if (buttonsChanged & PSP_CTRL_CROSS) { - event.type = (pad.Buttons & PSP_CTRL_CROSS) ? OSystem::EVENT_LBUTTONDOWN : OSystem::EVENT_LBUTTONUP; - } - else if (buttonsChanged & PSP_CTRL_CIRCLE) { - event.type = (pad.Buttons & PSP_CTRL_CIRCLE) ? OSystem::EVENT_RBUTTONDOWN : OSystem::EVENT_RBUTTONUP; - } - else { - //any of the other buttons. - event.type = buttonsChanged & pad.Buttons ? OSystem::EVENT_KEYDOWN : OSystem::EVENT_KEYUP; - event.kbd.flags = 0; - - if (buttonsChanged & PSP_CTRL_LTRIGGER) { - event.kbd.keycode = SDLK_ESCAPE; - event.kbd.ascii = 27; - } else if (buttonsChanged & PSP_CTRL_RTRIGGER) { - event.kbd.keycode = SDLK_RETURN; - event.kbd.ascii = 13; - } else if (buttonsChanged & PSP_CTRL_START) { - event.kbd.keycode = SDLK_F5; - event.kbd.ascii = 319; -/* } else if (buttonsChanged & PSP_CTRL_SELECT) { - event.kbd.keycode = SDLK_0; - event.kbd.ascii = '0'; -*/ } else if (buttonsChanged & PSP_CTRL_SQUARE) { - event.kbd.keycode = SDLK_PERIOD; - event.kbd.ascii = '.'; - } - - } - - event.mouse.x = _mouseX; - event.mouse.y = _mouseY; - _prevButtons = pad.Buttons; - return true; - } - - uint32 time = getMillis(); - if (time - _lastPadCheck > PAD_CHECK_TIME) { - _lastPadCheck = time; - int16 newX = _mouseX; - int16 newY = _mouseY; - - if (pad.Lx < 100) { - analogStepAmountX = pad.Lx - 100; - } - else if (pad.Lx > 155) { - analogStepAmountX = pad.Lx - 155; - } - - if (pad.Ly < 100) { - analogStepAmountY = pad.Ly - 100; - } - else if (pad.Ly > 155) { - analogStepAmountY = pad.Ly - 155; - } - - if (pad.Buttons & PAD_DIR_MASK || - analogStepAmountX != 0 || analogStepAmountY != 0) { - if (_prevButtons & PAD_DIR_MASK) { - if (_padAccel < 16) _padAccel++; - } else _padAccel = 0; - - _prevButtons = pad.Buttons; - - if (pad.Buttons & PSP_CTRL_LEFT) - newX -= _padAccel >> 2; - if (pad.Buttons & PSP_CTRL_RIGHT) - newX += _padAccel >> 2; - if (pad.Buttons & PSP_CTRL_UP) - newY -= _padAccel >> 2; - if (pad.Buttons & PSP_CTRL_DOWN) - newY += _padAccel >> 2; - - // If no movement then this has no effect - if (pad.Buttons & PSP_CTRL_TRIANGLE) { - // Fine control mode for analog - if (analogStepAmountX != 0) - if (analogStepAmountX > 0) - newX += analogStepAmountX - (analogStepAmountX - 1); - else - newX -= -analogStepAmountX - (-analogStepAmountX - 1); - - if (analogStepAmountY != 0) - if (analogStepAmountY > 0) - newY += analogStepAmountY - (analogStepAmountY - 1); - else - newY -= -analogStepAmountY - (-analogStepAmountY - 1); - } - else { - newX += analogStepAmountX >> ((_screenWidth == 640) ? 2 : 3); - newY += analogStepAmountY >> ((_screenWidth == 640) ? 2 : 3); - } - - if (newX < 0) newX = 0; - if (newY < 0) newY = 0; - if(_overlayVisible) - { - if (newX >= _overlayWidth) newX = _overlayWidth - 1; - if (newY >= _overlayHeight) newY = _overlayHeight - 1; - } - else - { - if (newX >= _screenWidth) newX = _screenWidth - 1; - if (newY >= _screenHeight) newY = _screenHeight - 1; - } - - if ((_mouseX != newX) || (_mouseY != newY)) { - event.type = OSystem::EVENT_MOUSEMOVE; - event.mouse.x = _mouseX = newX; - event.mouse.y = _mouseY = newY; - return true; - } - } else { - //reset pad acceleration - _padAccel = 0; - } - } - - return false; -} - -uint32 OSystem_PSP::getMillis() { - return SDL_GetTicks(); -} - -void OSystem_PSP::delayMillis(uint msecs) { - SDL_Delay(msecs); -} - -void OSystem_PSP::setTimerCallback(TimerProc callback, int interval) { - SDL_SetTimer(interval, (SDL_TimerCallback)callback); -} - -OSystem::MutexRef OSystem_PSP::createMutex(void) { - return (MutexRef)SDL_CreateMutex(); -} - -void OSystem_PSP::lockMutex(MutexRef mutex) { - SDL_mutexP((SDL_mutex *)mutex); -} - -void OSystem_PSP::unlockMutex(MutexRef mutex) { - SDL_mutexV((SDL_mutex *)mutex); -} - -void OSystem_PSP::deleteMutex(MutexRef mutex) { - SDL_DestroyMutex((SDL_mutex *)mutex); -} - -bool OSystem_PSP::setSoundCallback(SoundProc proc, void *param) { - SDL_AudioSpec desired; - SDL_AudioSpec obtained; - - memset(&desired, 0, sizeof(desired)); - - if (ConfMan.hasKey("output_rate")) - _samplesPerSec = ConfMan.getInt("output_rate"); - else - _samplesPerSec = SAMPLES_PER_SEC; - - // Originally, we always used 2048 samples. This loop will produce the - // same result at 22050 Hz, and should hopefully produce something - // sensible for other frequencies. Note that it must be a power of two. - - uint16 samples = 0x8000; - - for (;;) { - if (samples / (_samplesPerSec / 1000) < 100) - break; - samples >>= 1; - } - - desired.freq = _samplesPerSec; - desired.format = AUDIO_S16SYS; - desired.channels = 2; - desired.samples = samples; - desired.callback = proc; - desired.userdata = param; - if (SDL_OpenAudio(&desired, &obtained) != 0) { - return false; - } - // Note: This should be the obtained output rate, but it seems that at - // least on some platforms SDL will lie and claim it did get the rate - // even if it didn't. Probably only happens for "weird" rates, though. - _samplesPerSec = obtained.freq; - SDL_PauseAudio(0); - return true; -} - -void OSystem_PSP::clearSoundCallback() { - SDL_CloseAudio(); -} - -int OSystem_PSP::getOutputSampleRate() const { - return _samplesPerSec; -} - -void OSystem_PSP::quit() { - clearSoundCallback(); - SDL_Quit(); - sceGuTerm(); - sceKernelExitGame(); -} - -void OSystem_PSP::setWindowCaption(const char *caption) { -} - -void OSystem_PSP::displayMessageOnOSD(const char *msg) { -} - -// Correct pixel format ABBBBBGGGGGRRRRR -int gBitFormat = 1555; - diff --git a/backends/psp/osys_psp.h b/backends/psp/osys_psp.h deleted file mode 100644 index 937a6e1889..0000000000 --- a/backends/psp/osys_psp.h +++ /dev/null @@ -1,132 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * Copyright (C) 2005 Joost Peters PSP Backend - * Copyright (C) 2005 Thomas Mayer PSP Backend - * Copyright (C) 2005 Paolo Costabel PSP Backend - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#include "common/stdafx.h" -#include "common/scummsys.h" -#include "common/system.h" -#include "backends/intern.h" - -#include - -enum GraphicModeID { - CENTERED_320X200, - CENTERED_435X272, - STRETCHED_480X272, - CENTERED_362X272 -}; - -class OSystem_PSP : public OSystem { -public: - static const OSystem::GraphicsMode s_supportedGraphicsModes[]; - static OSystem *instance(); - -protected: - uint16 _screenWidth; - uint16 _screenHeight; - uint16 _overlayWidth; - uint16 _overlayHeight; - byte *_offscreen; - OverlayColor *_overlayBuffer; - uint16 _palette[256]; - bool _overlayVisible; - uint32 _shakePos; - - - bool _mouseVisible; - int _mouseX, _mouseY; - int _mouseWidth, _mouseHeight; - int _mouseHotspotX, _mouseHotspotY; - byte _mouseKeyColour; - byte *_mouseBuf; - - uint32 _prevButtons; - uint32 _lastPadCheck; - uint32 _padAccel; - - uint32 _samplesPerSec; - SceCtrlData pad; - -public: - - OSystem_PSP(); - virtual ~OSystem_PSP(); - - virtual bool hasFeature(Feature f); - virtual void setFeatureState(Feature f, bool enable); - virtual bool getFeatureState(Feature f); - virtual const GraphicsMode *getSupportedGraphicsModes() const; - virtual int getDefaultGraphicsMode() const; - virtual bool setGraphicsMode(int mode); - bool setGraphicsMode(const char *name); - virtual int getGraphicsMode() const; - virtual void initSize(uint width, uint height); - virtual int16 getWidth(); - virtual int16 getHeight(); - virtual void setPalette(const byte *colors, uint start, uint num); - virtual void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h); - virtual void updateScreen(); - virtual void setShakePos(int shakeOffset); - - virtual void showOverlay(); - virtual void hideOverlay(); - virtual void clearOverlay(); - virtual void grabOverlay(OverlayColor *buf, int pitch); - virtual void copyRectToOverlay(const OverlayColor *buf, int pitch, int x, int y, int w, int h); - virtual int16 getOverlayHeight(); - virtual int16 getOverlayWidth(); - virtual OverlayColor RGBToColor(uint8 r, uint8 g, uint8 b); - virtual void colorToRGB(OverlayColor color, uint8 &r, uint8 &g, uint8 &b); - virtual OverlayColor ARGBToColor(uint8 a, uint8 r, uint8 g, uint8 b); - virtual void colorToARGB(OverlayColor color, uint8 &a, uint8 &r, uint8 &g, uint8 &b); - virtual void grabPalette(byte *colors, uint start, uint num); - - virtual bool showMouse(bool visible); - - virtual void warpMouse(int x, int y); - virtual void setMouseCursor(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, byte keycolor = 255, int cursorTargetScale = 1); - - virtual bool pollEvent(Event &event); - virtual uint32 getMillis(); - virtual void delayMillis(uint msecs); - - virtual void setTimerCallback(TimerProc callback, int interval); - - virtual MutexRef createMutex(void); - virtual void lockMutex(MutexRef mutex); - virtual void unlockMutex(MutexRef mutex); - virtual void deleteMutex(MutexRef mutex); - - virtual bool setSoundCallback(SoundProc proc, void *param); - virtual void clearSoundCallback(); - virtual int getOutputSampleRate() const; - - virtual void quit(); - - virtual void setWindowCaption(const char *caption); - - virtual void displayMessageOnOSD(const char *msg); - -}; - diff --git a/backends/psp/osys_psp_gu.cpp b/backends/psp/osys_psp_gu.cpp deleted file mode 100644 index 7553140118..0000000000 --- a/backends/psp/osys_psp_gu.cpp +++ /dev/null @@ -1,582 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * Copyright (C) 2005 Joost Peters PSP Backend - * Copyright (C) 2005 Thomas Mayer PSP Backend - * Copyright (C) 2005 Paolo Costabel PSP Backend - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - */ - -#include -#include "osys_psp_gu.h" -#include "./trace.h" - -#define PIXEL_SIZE (4) -#define BUF_WIDTH (512) -#define PSP_SCREEN_WIDTH 480 -#define PSP_SCREEN_HEIGHT 272 -#define PSP_FRAME_SIZE (BUF_WIDTH * PSP_SCREEN_HEIGHT * PIXEL_SIZE) -#define MOUSE_SIZE 128 -#define KBD_DATA_SIZE 130560 - -unsigned int __attribute__((aligned(16))) list[262144]; -unsigned short __attribute__((aligned(16))) clut256[256]; -unsigned short __attribute__((aligned(16))) mouseClut[256]; -unsigned short __attribute__((aligned(16))) kbClut[256]; -//unsigned int __attribute__((aligned(16))) offscreen256[640*480]; -//unsigned int __attribute__((aligned(16))) overlayBuffer256[640*480*2]; -unsigned int __attribute__((aligned(16))) mouseBuf256[MOUSE_SIZE*MOUSE_SIZE]; - -extern unsigned long RGBToColour(unsigned long r, unsigned long g, unsigned long b); - -extern unsigned int size_keyboard_symbols_compressed; -extern unsigned char keyboard_symbols_compressed[]; -extern unsigned int size_keyboard_symbols_shift_compressed; -extern unsigned char keyboard_symbols_shift_compressed[]; -extern unsigned int size_keyboard_letters_compressed; -extern unsigned char keyboard_letters_compressed[]; -extern unsigned int size_keyboard_letters_shift_compressed; -extern unsigned char keyboard_letters_shift_compressed[]; -unsigned char *keyboard_symbols; -unsigned char *keyboard_symbols_shift; -unsigned char *keyboard_letters; -unsigned char *keyboard_letters_shift; - -unsigned char kbd_ascii[] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', '[', ']', '\\', ';', '\'', ',', '.', '/', '`'}; -unsigned int kbd_code[] = {SDLK_1, SDLK_2, SDLK_3, SDLK_4, SDLK_5, SDLK_6, SDLK_7, SDLK_8, SDLK_9, SDLK_0, SDLK_MINUS, SDLK_EQUALS, SDLK_LEFTBRACKET, SDLK_RIGHTBRACKET, - SDLK_BACKSLASH, SDLK_SEMICOLON, SDLK_QUOTE, SDLK_COMMA, SDLK_PERIOD, SDLK_SLASH, SDLK_BACKQUOTE}; -unsigned char kbd_ascii_cl[] = {'!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', '{', '}', '|', ':', '"', '<', '>', '?', '~'}; -unsigned int kbd_code_cl[] = {SDLK_EXCLAIM, SDLK_AT, SDLK_HASH, SDLK_DOLLAR, 37, SDLK_CARET, SDLK_AMPERSAND, SDLK_ASTERISK, SDLK_LEFTPAREN, SDLK_RIGHTPAREN, SDLK_UNDERSCORE, - SDLK_PLUS, 123, 125, 124, SDLK_COLON, SDLK_QUOTEDBL, SDLK_LESS, SDLK_GREATER, SDLK_QUESTION, 126}; -#define CAPS_LOCK (1 << 0) -#define SYMBOLS (1 << 1) - - -OSystem_PSP_GU::OSystem_PSP_GU() { - //sceKernelDcacheWritebackAll(); - - // setup - sceGuInit(); - sceGuStart(0, list); - sceGuDrawBuffer(GU_PSM_8888, (void *)0, BUF_WIDTH); - sceGuDispBuffer(PSP_SCREEN_WIDTH, PSP_SCREEN_HEIGHT, (void*)PSP_FRAME_SIZE, BUF_WIDTH); - sceGuDepthBuffer((void*)(PSP_FRAME_SIZE * 2), BUF_WIDTH); - sceGuOffset(2048 - (PSP_SCREEN_WIDTH/2), 2048 - (PSP_SCREEN_HEIGHT/2)); - sceGuViewport(2048, 2048, PSP_SCREEN_WIDTH, PSP_SCREEN_HEIGHT); - sceGuDepthRange(0xc350, 0x2710); - sceGuScissor(0, 0, PSP_SCREEN_WIDTH, PSP_SCREEN_HEIGHT); - sceGuEnable(GU_SCISSOR_TEST); - sceGuFrontFace(GU_CW); - sceGuEnable(GU_TEXTURE_2D); - sceGuClear(GU_COLOR_BUFFER_BIT|GU_DEPTH_BUFFER_BIT); - sceGuFinish(); - sceGuSync(0,0); - - sceDisplayWaitVblankStart(); - sceGuDisplay(1); - - //decompress keyboard data - uLongf kbdSize = KBD_DATA_SIZE; - keyboard_letters = (unsigned char *)memalign(16, KBD_DATA_SIZE); - assert(Z_OK == uncompress((Bytef *)keyboard_letters, &kbdSize, (const Bytef *)keyboard_letters_compressed, size_keyboard_letters_compressed)); - - kbdSize = KBD_DATA_SIZE; - keyboard_letters_shift = (unsigned char *)memalign(16, KBD_DATA_SIZE); - assert(Z_OK == uncompress((Bytef *)keyboard_letters_shift, &kbdSize, (const Bytef *)keyboard_letters_shift_compressed, size_keyboard_letters_shift_compressed)); - - kbdSize = KBD_DATA_SIZE; - keyboard_symbols = (unsigned char *)memalign(16, KBD_DATA_SIZE); - assert(Z_OK == uncompress((Bytef *)keyboard_symbols, &kbdSize, (const Bytef *)keyboard_symbols_compressed, size_keyboard_symbols_compressed)); - - kbdSize = KBD_DATA_SIZE; - keyboard_symbols_shift = (unsigned char *)memalign(16, KBD_DATA_SIZE); - assert(Z_OK == uncompress((Bytef *)keyboard_symbols_shift, &kbdSize, (const Bytef *)keyboard_symbols_shift_compressed, size_keyboard_symbols_shift_compressed)); - - _keyboardVisible = false; - _clut = (unsigned short*)(((unsigned int)clut256)|0x40000000); - _kbdClut = (unsigned short*)(((unsigned int)kbClut)|0x40000000); - _mouseBuf = (byte *)mouseBuf256; - _graphicMode = STRETCHED_480X272; - _keySelected = 1; - _keyboardMode = 0; -} - -OSystem_PSP_GU::~OSystem_PSP_GU() { - free(keyboard_symbols_shift); - free(keyboard_symbols); - free(keyboard_letters_shift); - free(keyboard_letters); - - _offscreen = 0; - _overlayBuffer = 0; - _mouseBuf = 0; - sceGuTerm(); -} - -void OSystem_PSP_GU::initSize(uint width, uint height) { - PSPDebugTrace("initSize\n"); - _screenWidth = width; - _screenHeight = height; - - _overlayWidth = PSP_SCREEN_WIDTH; //width; - _overlayHeight = PSP_SCREEN_HEIGHT; //height; - -// _offscreen = (byte *)offscreen256; - _overlayBuffer = (OverlayColor *)0x44000000 + PSP_FRAME_SIZE; - - _offscreen = (unsigned byte *)_overlayBuffer + _overlayWidth * _overlayHeight * sizeof(OverlayColor); - bzero(_offscreen, width * height); - clearOverlay(); - _kbdClut[0] = 0xffff; - _kbdClut[246] = 0x4ccc; - _kbdClut[247] = 0x0000; - for(int i=1;i<31;i++) - _kbdClut[i] = 0xf888; - _mouseVisible = false; - sceKernelDcacheWritebackAll(); -} - -int OSystem_PSP_GU::getDefaultGraphicsMode() const { - return STRETCHED_480X272; -} - -bool OSystem_PSP_GU::setGraphicsMode(int mode) { - _graphicMode = mode; - return true; -} - -bool OSystem_PSP_GU::setGraphicsMode(const char *name) { - int i = 0; - - while(s_supportedGraphicsModes[i].name) { - if(!strcmpi(s_supportedGraphicsModes[i].name, name)) { - _graphicMode = s_supportedGraphicsModes[i].id; - return true; - } - i++; - } - - return false; -} - -int OSystem_PSP_GU::getGraphicsMode() const { - return _graphicMode; -} - -void OSystem_PSP_GU::setMouseCursor(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, byte keycolor, int cursorTargetScale) { - //TODO: handle cursorTargetScale - _mouseWidth = w; - _mouseHeight = h; - - _mouseHotspotX = hotspotX; - _mouseHotspotY = hotspotY; - - _mouseKeyColour = keycolor; - - memcpy(mouseClut, _palette, 256*sizeof(unsigned short)); - mouseClut[_mouseKeyColour] = 0; - sceKernelDcacheWritebackAll(); - - for(unsigned int i=0;i _screenWidth - x) { - w = _screenWidth - x; - } - - if (h > _screenHeight - y) { - h = _screenHeight - y; - } - - if (w <= 0 || h <= 0) - return; - - - byte *dst = _offscreen + y * _screenWidth + x; - - if (_screenWidth == pitch && pitch == w) - { - memcpy(dst, buf, h * w); -/* - sceGuStart(0,list); - sceGuCopyImage( 3, 0, 0, w/2, h, w/2, (void *)buf, x/2, y, _screenWidth /2, _offscreen); - sceGuFinish(); - sceGuSync(0,0); -*/ - } - else - { - do - { - memcpy(dst, buf, w); - buf += pitch; - dst += _screenWidth; - } while (--h); - } -} - -void OSystem_PSP_GU::updateScreen() { - float scale; - - sceGuStart(0,list); - - sceGuClearColor(0xff000000); - sceGuClear(GU_COLOR_BUFFER_BIT); - - sceGuClutMode(GU_PSM_5551, 0, 0xff, 0); - sceGuClutLoad(32, clut256); // upload 32*8 entries (256) - sceGuTexMode(GU_PSM_T8, 0, 0, 0); // 8-bit image - if(_screenWidth == 320) - sceGuTexImage(0, 512, 256, _screenWidth, _offscreen); - else - sceGuTexImage(0, 512, 512, _screenWidth, _offscreen); - sceGuTexFunc(GU_TFX_REPLACE, GU_TCC_RGB); - sceGuTexFilter(GU_LINEAR, GU_LINEAR); - sceGuTexOffset(0,0); - sceGuAmbientColor(0xffffffff); - sceGuColor(0xffffffff); - - struct Vertex* vertices = (struct Vertex*)sceGuGetMemory(2 * sizeof(struct Vertex)); - vertices[0].u = 0.5; vertices[0].v = 0.5; - vertices[1].u = _screenWidth - 0.5; vertices[1].v = _screenHeight - 0.5; - switch(_graphicMode) { - case CENTERED_320X200: - vertices[0].x = (PSP_SCREEN_WIDTH - 320) / 2; vertices[0].y = (PSP_SCREEN_HEIGHT - 200) / 2; vertices[0].z = 0; - vertices[1].x = PSP_SCREEN_WIDTH - (PSP_SCREEN_WIDTH - 320) / 2; vertices[1].y = PSP_SCREEN_HEIGHT - (PSP_SCREEN_HEIGHT - 200) / 2; vertices[1].z = 0; - break; - case CENTERED_435X272: - vertices[0].x = (PSP_SCREEN_WIDTH - 435) / 2; vertices[0].y = 0; vertices[0].z = 0; - vertices[1].x = PSP_SCREEN_WIDTH - (PSP_SCREEN_WIDTH - 435) / 2; vertices[1].y = PSP_SCREEN_HEIGHT; vertices[1].z = 0; - break; - case STRETCHED_480X272: - vertices[0].x = 0; vertices[0].y = 0; vertices[0].z = 0; - vertices[1].x = PSP_SCREEN_WIDTH; vertices[1].y = PSP_SCREEN_HEIGHT; vertices[1].z = 0; - break; - case CENTERED_362X272: - vertices[0].x = (PSP_SCREEN_WIDTH - 362) / 2; vertices[0].y = 0; vertices[0].z = 0; - vertices[1].x = PSP_SCREEN_WIDTH - (PSP_SCREEN_WIDTH - 362) / 2; vertices[1].y = PSP_SCREEN_HEIGHT; vertices[1].z = 0; - break; - } - - if (_shakePos) { - vertices[0].y += _shakePos; - vertices[1].y += _shakePos; - } - - sceGuDrawArray(GU_SPRITES, GU_TEXTURE_32BITF|GU_VERTEX_32BITF|GU_TRANSFORM_2D, 2, 0, vertices); - if(_screenWidth == 640) { - sceGuTexImage(0, 512, 512, _screenWidth, _offscreen+512); - vertices[0].u = 512 + 0.5; vertices[1].v = _screenHeight - 0.5; - vertices[0].x += (vertices[1].x - vertices[0].x) * 511 / 640; vertices[0].y = 0; vertices[0].z = 0; - sceGuDrawArray(GU_SPRITES, GU_TEXTURE_32BITF|GU_VERTEX_32BITF|GU_TRANSFORM_2D, 2, 0, vertices); - } - - - // draw overlay - if(_overlayVisible) { - vertices[0].x = 0; vertices[0].y = 0; vertices[0].z = 0; - vertices[1].x = PSP_SCREEN_WIDTH; vertices[1].y = PSP_SCREEN_HEIGHT; vertices[1].z = 0; - vertices[0].u = 0.5; vertices[0].v = 0.5; - vertices[1].u = _overlayWidth - 0.5; vertices[1].v = _overlayHeight - 0.5; - sceGuTexMode(GU_PSM_5551, 0, 0, 0); // 16-bit image - sceGuAlphaFunc(GU_GREATER, 0, 0xff); - sceGuEnable(GU_ALPHA_TEST); - if (_overlayWidth > 320) - sceGuTexImage(0, 512, 512, _overlayWidth, _overlayBuffer); - else - sceGuTexImage(0, 512, 256, _overlayWidth, _overlayBuffer); - - sceGuTexFunc(GU_TFX_MODULATE, GU_TCC_RGBA); - sceGuDrawArray(GU_SPRITES,GU_TEXTURE_32BITF|GU_VERTEX_32BITF|GU_TRANSFORM_2D,2,0,vertices); - // need to render twice for textures > 512 - if( _overlayWidth > 512) { - sceGuTexImage(0, 512, 512, _overlayWidth, _overlayBuffer + 512); - vertices[0].u = 512 + 0.5; vertices[1].v = _overlayHeight - 0.5; - vertices[0].x = PSP_SCREEN_WIDTH * 512 / 640; vertices[0].y = 0; vertices[0].z = 0; - sceGuDrawArray(GU_SPRITES, GU_TEXTURE_32BITF|GU_VERTEX_32BITF|GU_TRANSFORM_2D, 2, 0, vertices); - } - } - - // draw mouse - if (_mouseVisible) { - sceGuTexMode(GU_PSM_T8, 0, 0, 0); // 8-bit image - sceGuClutMode(GU_PSM_5551, 0, 0xff, 0); - sceGuClutLoad(32, mouseClut); // upload 32*8 entries (256) - sceGuAlphaFunc(GU_GREATER,0,0xff); - sceGuEnable(GU_ALPHA_TEST); - sceGuTexImage(0, MOUSE_SIZE, MOUSE_SIZE, MOUSE_SIZE, _mouseBuf); - sceGuTexFunc(GU_TFX_MODULATE, GU_TCC_RGBA); - - vertices[0].u = 0.5; vertices[0].v = 0.5; - vertices[1].u = _mouseWidth - 0.5; vertices[1].v = _mouseHeight - 0.5; - - //adjust cursor position - int mX = _mouseX - _mouseHotspotX; - int mY = _mouseY - _mouseHotspotY; - - if(_overlayVisible) { - float scalex, scaley; - - scalex = (float)PSP_SCREEN_WIDTH /_overlayWidth; - scaley = (float)PSP_SCREEN_HEIGHT /_overlayHeight; - - vertices[0].x = mX * scalex; vertices[0].y = mY * scaley; vertices[0].z = 0; - vertices[1].x = vertices[0].x + _mouseWidth * scalex; vertices[1].y = vertices[0].y + _mouseHeight * scaley; vertices[0].z = 0; - } else - switch(_graphicMode) { - case CENTERED_320X200: - vertices[0].x = (PSP_SCREEN_WIDTH - 320) / 2 + mX; vertices[0].y = (PSP_SCREEN_HEIGHT - 200) / 2 + mY; vertices[0].z = 0; - vertices[1].x = vertices[0].x+_mouseWidth; vertices[1].y = vertices[0].y + _mouseHeight; vertices[1].z = 0; - break; - case CENTERED_435X272: - { - scale = 435.0f / _screenWidth; - vertices[0].x = (PSP_SCREEN_WIDTH - 435) / 2 + mX * scale; vertices[0].y = mY * scale; vertices[0].z = 0; - vertices[1].x = vertices[0].x + _mouseWidth * scale; vertices[1].y = vertices[0].y + _mouseHeight * scale; vertices[0].z = 0; - } - break; - case CENTERED_362X272: - { - float scalex, scaley; - - scalex = 362.0f / _screenWidth; - scaley = 272.0f / _screenHeight; - - vertices[0].x = (PSP_SCREEN_WIDTH - 362) / 2 + mX * scalex; vertices[0].y = mY * scaley; vertices[0].z = 0; - vertices[1].x = vertices[0].x + _mouseWidth * scalex; vertices[1].y = vertices[0].y + _mouseHeight * scaley; vertices[0].z = 0; - } - break; - case STRETCHED_480X272: - { - float scalex, scaley; - - scalex = (float)PSP_SCREEN_WIDTH / _screenWidth; - scaley = (float)PSP_SCREEN_HEIGHT / _screenHeight; - - vertices[0].x = mX * scalex; vertices[0].y = mY * scaley; vertices[0].z = 0; - vertices[1].x = vertices[0].x + _mouseWidth * scalex; vertices[1].y = vertices[0].y + _mouseHeight * scaley; vertices[0].z = 0; - } - break; - } - sceGuDrawArray(GU_SPRITES, GU_TEXTURE_32BITF|GU_VERTEX_32BITF|GU_TRANSFORM_2D, 2, 0, vertices); - } - - if(_keyboardVisible) { - sceGuTexMode(GU_PSM_T8, 0, 0, 0); // 8-bit image - sceGuClutMode(GU_PSM_4444, 0, 0xff, 0); - sceGuClutLoad(32, kbClut); // upload 32*8 entries (256) - sceGuDisable(GU_ALPHA_TEST); - sceGuEnable(GU_BLEND); - sceGuBlendFunc(GU_ADD, GU_SRC_ALPHA, GU_ONE_MINUS_SRC_ALPHA, 0, 0); - switch(_keyboardMode) { - case 0: - sceGuTexImage(0, 512, 512, 480, keyboard_letters); - break; - case CAPS_LOCK: - sceGuTexImage(0, 512, 512, 480, keyboard_letters_shift); - break; - case SYMBOLS: - sceGuTexImage(0, 512, 512, 480, keyboard_symbols); - break; - case (CAPS_LOCK | SYMBOLS): - sceGuTexImage(0, 512, 512, 480, keyboard_symbols_shift); - break; - } - sceGuTexFunc(GU_TFX_REPLACE, GU_TCC_RGBA); - - vertices[0].u = 0.5; vertices[0].v = 0.5; - vertices[1].u = PSP_SCREEN_WIDTH-0.5; vertices[1].v = PSP_SCREEN_HEIGHT-0.5; - vertices[0].x = 0; vertices[0].y = 0; vertices[0].z = 0; - vertices[1].x = PSP_SCREEN_WIDTH; vertices[1].y = PSP_SCREEN_HEIGHT; vertices[0].z = 0; - sceGuDrawArray(GU_SPRITES,GU_TEXTURE_32BITF|GU_VERTEX_32BITF|GU_TRANSFORM_2D,2,0,vertices); - sceGuDisable(GU_BLEND); - } - sceKernelDcacheWritebackAll(); - - sceGuFinish(); - sceGuSync(0,0); - - sceDisplayWaitVblankStart(); - sceGuSwapBuffers(); - - //sceKernelDcacheWritebackAll(); -} - -bool OSystem_PSP_GU::pollEvent(Event &event) { - float nub_angle = -1; - int x, y; - - sceCtrlSetSamplingCycle(0); - sceCtrlSetSamplingMode(1); - sceCtrlReadBufferPositive(&pad, 1); - - uint32 buttonsChanged = pad.Buttons ^ _prevButtons; - - if ((buttonsChanged & PSP_CTRL_SELECT) || (pad.Buttons & PSP_CTRL_SELECT)) { - if( !(pad.Buttons & PSP_CTRL_SELECT) ) - _keyboardVisible = !_keyboardVisible; - _prevButtons = pad.Buttons; - return false; - } - - if(!_keyboardVisible) - return OSystem_PSP::pollEvent(event); - - if ( (buttonsChanged & PSP_CTRL_RTRIGGER) && !(pad.Buttons & PSP_CTRL_RTRIGGER)) - _keyboardMode ^= CAPS_LOCK; - - if ( (buttonsChanged & PSP_CTRL_LTRIGGER) && !(pad.Buttons & PSP_CTRL_LTRIGGER)) - _keyboardMode ^= SYMBOLS; - - if ( (buttonsChanged & PSP_CTRL_LEFT) && !(pad.Buttons & PSP_CTRL_LEFT)) { - event.kbd.flags = 0; - event.kbd.ascii = 0; - event.kbd.keycode = SDLK_LEFT; - _prevButtons = pad.Buttons; - return true; - } - - if ( (buttonsChanged & PSP_CTRL_RIGHT) && !(pad.Buttons & PSP_CTRL_RIGHT)) { - event.kbd.flags = 0; - event.kbd.ascii = 0; - event.kbd.keycode = SDLK_RIGHT; - _prevButtons = pad.Buttons; - return true; - } - - if ( (buttonsChanged & PSP_CTRL_UP) && !(pad.Buttons & PSP_CTRL_UP)) { - event.kbd.flags = 0; - event.kbd.ascii = 0; - event.kbd.keycode = SDLK_UP; - _prevButtons = pad.Buttons; - return true; - } - - if ( (buttonsChanged & PSP_CTRL_DOWN) && !(pad.Buttons & PSP_CTRL_DOWN)) { - event.kbd.flags = 0; - event.kbd.ascii = 0; - event.kbd.keycode = SDLK_DOWN; - _prevButtons = pad.Buttons; - return true; - } - - // compute nub direction - x = pad.Lx-128; - y = pad.Ly-128; - _kbdClut[_keySelected] = 0xf888; - if(x*x + y*y > 10000) { - nub_angle = atan2(y, x); - _keySelected = (int)(1 + (M_PI + nub_angle) * 30 / (2 * M_PI)); - _keySelected -= 2; - if(_keySelected < 1) - _keySelected += 30; - _kbdClut[_keySelected] = 0xffff; - - if (buttonsChanged & PSP_CTRL_CROSS) { - event.type = (pad.Buttons & PSP_CTRL_CROSS) ? OSystem::EVENT_KEYDOWN : OSystem::EVENT_KEYUP; - if(_keySelected > 26) { - event.kbd.flags = 0; - switch(_keySelected) { - case 27: - event.kbd.ascii = ' '; - event.kbd.keycode = SDLK_SPACE; - break; - case 28: - event.kbd.ascii = 127; - event.kbd.keycode = SDLK_DELETE; - break; - case 29: - event.kbd.ascii = 8; - event.kbd.keycode = SDLK_BACKSPACE; - break; - case 30: - event.kbd.ascii = 13; - event.kbd.keycode = SDLK_RETURN; - break; - } - } else { - switch( _keyboardMode) { - case 0: - event.kbd.flags = 0; - event.kbd.ascii = 'a'+_keySelected-1; - event.kbd.keycode = SDLK_a + _keySelected-1; - break; - case CAPS_LOCK: - event.kbd.ascii = 'A'+_keySelected-1; - event.kbd.keycode = SDLK_a + _keySelected-1; - event.kbd.flags = KBD_SHIFT; - break; - case SYMBOLS: - if (_keySelected < 21) { - event.kbd.flags = 0; - event.kbd.ascii = kbd_ascii[_keySelected-1]; - event.kbd.keycode = kbd_code[ _keySelected-1]; - } - break; - case (SYMBOLS|CAPS_LOCK): - if(_keySelected < 21) { - event.kbd.flags = 0; - event.kbd.ascii = kbd_ascii_cl[_keySelected-1]; - event.kbd.keycode = kbd_code_cl[ _keySelected-1]; - } - break; - } - } - _prevButtons = pad.Buttons; - return true; - } - } - - _prevButtons = pad.Buttons; - return false; -} - diff --git a/backends/psp/osys_psp_gu.h b/backends/psp/osys_psp_gu.h deleted file mode 100644 index b1445a520e..0000000000 --- a/backends/psp/osys_psp_gu.h +++ /dev/null @@ -1,60 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * Copyright (C) 2005 Joost Peters PSP Backend - * Copyright (C) 2005 Thomas Mayer PSP Backend - * Copyright (C) 2005 Paolo Costabel PSP Backend - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * - */ - -#include -#include "common/stdafx.h" -#include "common/scummsys.h" - -#include "common/rect.h" -#include "osys_psp.h" - -class OSystem_PSP_GU : public OSystem_PSP -{ -public: - struct Vertex - { - float u,v; - float x,y,z; - }; - - OSystem_PSP_GU(); - ~OSystem_PSP_GU(); - void updateScreen(); - void initSize(uint width, uint height); - int getDefaultGraphicsMode() const; - bool setGraphicsMode(int mode); - bool setGraphicsMode(const char *name); - int getGraphicsMode() const; - void setMouseCursor(const byte *buf, uint w, uint h, int hotspotX, int hotspotY, byte keycolor, int cursorTargetScale); - void copyRectToScreen(const byte *buf, int pitch, int x, int y, int w, int h) ; - void setPalette(const byte *colors, uint start, uint num); - bool pollEvent(Event &event); - int _graphicMode; - struct Vertex *_vertices; - unsigned short* _clut; - unsigned short* _kbdClut; - bool _keyboardVisible; - int _keySelected; - int _keyboardMode; -}; - diff --git a/backends/psp/pic0.png b/backends/psp/pic0.png deleted file mode 100644 index 592c4a013f..0000000000 Binary files a/backends/psp/pic0.png and /dev/null differ diff --git a/backends/psp/pic1.png b/backends/psp/pic1.png deleted file mode 100644 index 6c35d5de4f..0000000000 Binary files a/backends/psp/pic1.png and /dev/null differ diff --git a/backends/psp/portdefs.h b/backends/psp/portdefs.h deleted file mode 100644 index a63c8ff39e..0000000000 --- a/backends/psp/portdefs.h +++ /dev/null @@ -1,56 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * Copyright (C) 2005 Joost Peters PSP Backend - * Copyright (C) 2005 Thomas Mayer PSP Backend - * Copyright (C) 2005 Paolo Costabel PSP Backend - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - -#ifndef PORTDEFS_H -#define PORTDEFS_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "trace.h" - -#define SCUMMVM_SAVEPATH "ms0:/scummvm_savegames" - -#define BREAKPOINT asm("break\n") - - -//#define printf pspDebugScreenPrintf -#define exit(x) printf("exit() called\n"); sceKernelSleepThread(); - -#endif /* PORTDEFS_H */ - - diff --git a/backends/psp/psp_main.cpp b/backends/psp/psp_main.cpp deleted file mode 100644 index b1b976cbb9..0000000000 --- a/backends/psp/psp_main.cpp +++ /dev/null @@ -1,150 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * Copyright (C) 2005 Joost Peters PSP Backend - * Copyright (C) 2005 Thomas Mayer PSP Backend - * Copyright (C) 2005 Paolo Costabel PSP Backend - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - - -#define USERSPACE_ONLY //don't use kernel mode features - -#ifndef USERSPACE_ONLY -#include -#include -#endif - -#include -#include -#include -#include -#include - -#include "osys_psp_gu.h" -#include "./trace.h" - - - -/** - * Define the module info section - * - * 2nd arg must 0x1000 so __init is executed in - * kernelmode for our loaderInit function - */ -#ifndef USERSPACE_ONLY -PSP_MODULE_INFO("SCUMMVM-PSP", 0x1000, 1, 1); -#else -PSP_MODULE_INFO("SCUMMVM-PSP", 0, 1, 1); -#endif - -/** - * THREAD_ATTR_USER causes the thread that the startup - * code (crt0.c) starts this program in to be in usermode - * even though the module was started in kernelmode - */ -#ifndef USERSPACE_ONLY -PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU); -#endif - - -#ifndef USERSPACE_ONLY -void MyExceptionHandler(PspDebugRegBlock *regs) { - /* Do normal initial dump, setup screen etc */ - - pspDebugScreenInit(); - - pspDebugScreenSetBackColor(0x00FF0000); - pspDebugScreenSetTextColor(0xFFFFFFFF); - pspDebugScreenClear(); - - pspDebugScreenPrintf("Exception Details:\n"); - pspDebugDumpException(regs); - - while (1) ; -} - -/** - * Function that is called from _init in kernelmode before the - * main thread is started in usermode. - */ -__attribute__ ((constructor)) -void loaderInit() { - pspKernelSetKernelPC(); - pspDebugInstallErrorHandler(MyExceptionHandler); -} -#endif - -/* Exit callback */ -SceKernelCallbackFunction exit_callback(int /*arg1*/, int /*arg2*/, void * /*common*/) { - sceKernelExitGame(); - return 0; -} - -/* Callback thread */ -int CallbackThread(SceSize /*size*/, void *arg) { - int cbid; - - cbid = sceKernelCreateCallback("Exit Callback", (SceKernelCallbackFunction)exit_callback, NULL); - sceKernelRegisterExitCallback(cbid); - - sceKernelSleepThreadCB(); - return 0; -} - -/* Sets up the callback thread and returns its thread id */ -int SetupCallbacks(void) { - int thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, THREAD_ATTR_USER, 0); - if (thid >= 0) { - sceKernelStartThread(thid, 0, 0); - } - - return thid; -} - -#undef main -int main(void) -{ - SetupCallbacks(); - - //check if the save directory exists - SceUID fd = sceIoDopen(SCUMMVM_SAVEPATH); - if (fd < 0) { - //No? then let's create it. - sceIoMkdir(SCUMMVM_SAVEPATH, 0777); - } else { - //it exists, so close it again. - sceIoDclose(fd); - } - - static char *argv[] = { "scummvm", NULL }; - static int argc = sizeof(argv)/sizeof(char *)-1; - - g_system = new OSystem_PSP_GU(); - assert(g_system); - - int res = scummvm_main(argc, argv); - - g_system->quit(); // TODO: Consider removing / replacing this! - - sceKernelSleepThread(); - - return res; -} - diff --git a/backends/psp/trace.cpp b/backends/psp/trace.cpp deleted file mode 100644 index 45d594b010..0000000000 --- a/backends/psp/trace.cpp +++ /dev/null @@ -1,75 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * Copyright (C) 2005 Joost Peters PSP Backend - * Copyright (C) 2005 Thomas Mayer PSP Backend - * Copyright (C) 2005 Paolo Costabel PSP Backend - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - - -#include "./trace.h" - - -//#define __DEBUG__ - -void PSPDebugTrace (const char *format, ...) { -#ifdef __DEBUG__ - va_list opt; - char buff[2048]; - int bufsz, fd; - - va_start(opt, format); - bufsz = vsnprintf( buff, (size_t) sizeof(buff), format, opt); - va_end(opt); - - fd = sceIoOpen("MS0:/DTRACE.TXT", PSP_O_RDWR | PSP_O_CREAT | PSP_O_APPEND, 0777); - - if(fd <= 0) - { - return; - } - - sceIoWrite(fd, (const void*)buff, bufsz); - sceIoClose(fd); -#endif -} - -void PSPDebugTrace (const char * filename, const char *format, ...) { -#ifdef __DEBUG__ - va_list opt; - char buff[2048]; - int bufsz, fd; - - va_start(opt, format); - bufsz = vsnprintf( buff, (size_t) sizeof(buff), format, opt); - va_end(opt); - - fd = sceIoOpen(filename, PSP_O_RDWR | PSP_O_CREAT | PSP_O_APPEND, 0777); - - if(fd <= 0) - { - return; - } - - sceIoWrite(fd, (const void*)buff, bufsz); - sceIoClose(fd); -#endif -} - diff --git a/backends/psp/trace.h b/backends/psp/trace.h deleted file mode 100644 index 948f6ea2a3..0000000000 --- a/backends/psp/trace.h +++ /dev/null @@ -1,40 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2005-2006 The ScummVM project - * Copyright (C) 2005 Joost Peters PSP Backend - * Copyright (C) 2005 Thomas Mayer PSP Backend - * Copyright (C) 2005 Paolo Costabel PSP Backend - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ - * - */ - - -#ifndef TRACE_H -#define TRACE_H - -#include -#include -#include -#include -#include - -void PSPDebugTrace (const char *filename, const char *format, ...); -void PSPDebugTrace (const char *format, ...); - -#endif // TRACE_H - -- cgit v1.2.3