From d2718e99a49559a952bcc7a987d63c763b17e7e2 Mon Sep 17 00:00:00 2001 From: John Reiser Date: Sun, 21 May 2006 13:58:24 -0700 Subject: [PATCH] Change class PackLinuxI386elf : public PackLinuxI386 into class PackLinuxElf32x86 : public PackLinuxElf32Le : public PackLinuxElf32 which makes the code for compressing ELF (for direct-to-memory decompression) cleaner because ELF has some of the class tree to itself. This assumes PROT_EXEC|PROT_WRITE ought to work. This is checked at runtime, and if it fails then give a message on stderr and exit(127). Modify --force-execve so that runtime avoids PROT_EXEC|PROT_WRITE. Then executables compressed with --force-execve will run under PaX, grSecurity, and strict SELinux. --- src/p_lx_elf.cpp | 232 ++++++++++++++--- src/p_lx_elf.h | 48 +++- src/p_lx_exc.cpp | 111 +------- src/p_lx_exc.h | 9 +- src/p_lx_interp.cpp | 14 +- src/p_lx_interp.h | 8 +- src/p_lx_sep.h | 4 +- src/packmast.cpp | 4 +- src/stub/fold_elf86.asm | 9 +- src/stub/fold_elf86.h | 200 +++++++-------- src/stub/fold_elfppc32.h | 6 +- src/stub/fold_exec86.asm | 2 - src/stub/fold_exec86.h | 18 +- src/stub/fold_machppc32.h | 14 +- src/stub/fold_sh86.asm | 6 +- src/stub/fold_sh86.h | 147 +++++------ src/stub/l_lx_elf64amd.S | 2 +- src/stub/l_lx_elf64amd.h | 34 +-- src/stub/l_lx_elf86.asm | 12 +- src/stub/l_lx_elf86.h | 523 +++++++++++++++++++------------------- src/stub/l_lx_elfppc32.S | 2 +- src/stub/l_lx_elfppc32.h | 34 +-- src/stub/l_lx_exec86.asm | 48 +--- src/stub/l_lx_exec86.h | 515 +++++++++++++++++++------------------ src/stub/l_lx_exec86.lds | 2 +- src/stub/l_lx_sh86.h | 14 +- 26 files changed, 1049 insertions(+), 969 deletions(-) diff --git a/src/p_lx_elf.cpp b/src/p_lx_elf.cpp index 3da04564..814616e3 100644 --- a/src/p_lx_elf.cpp +++ b/src/p_lx_elf.cpp @@ -270,6 +270,134 @@ umax(unsigned a, unsigned b) return a; } +int +PackLinuxElf32x86::buildLinuxLoader( + upx_byte const *const proto, + unsigned const szproto, + upx_byte const *const fold, + unsigned const szfold, + Filter const *ft +) +{ + initLoader(proto, szproto); + + struct b_info h; memset(&h, 0, sizeof(h)); + unsigned fold_hdrlen = 0; + if (0 < szfold) { + cprElfHdr1 const *const hf = (cprElfHdr1 const *)fold; + fold_hdrlen = sizeof(hf->ehdr) + hf->ehdr.e_phentsize * hf->ehdr.e_phnum + + sizeof(l_info); + if (0 == get_le32(fold_hdrlen + fold)) { + // inconsistent SIZEOF_HEADERS in *.lds (ld, binutils) + fold_hdrlen = umax(0x80, fold_hdrlen); + } + h.sz_unc = (szfold < fold_hdrlen) ? 0 : (szfold - fold_hdrlen); + h.b_method = (unsigned char) ph.method; + h.b_ftid = (unsigned char) ph.filter; + h.b_cto8 = (unsigned char) ph.filter_cto; + } + unsigned char const *const uncLoader = fold_hdrlen + fold; + + unsigned char *const cprLoader = new unsigned char[sizeof(h) + h.sz_unc]; + if (0 < szfold) { + unsigned sz_cpr; + int r = upx_compress(uncLoader, h.sz_unc, sizeof(h) + cprLoader, &sz_cpr, + NULL, ph.method, 10, NULL, NULL ); + if (r != UPX_E_OK || h.sz_cpr >= h.sz_unc) + throwInternalError("loader compression failed"); + h.sz_cpr = sz_cpr; + } + memcpy(cprLoader, &h, sizeof(h)); + + // This adds the definition to the "library", to be used later. + linker->addSection("FOLDEXEC", cprLoader, sizeof(h) + h.sz_cpr); + delete [] cprLoader; + + int const n_mru = ft->n_mru; // FIXME: belongs to filter? packerf? + + // Here is a quick summary of the format of the output file: + linker->setLoaderAlignOffset( + // Elf32_Edhr + sizeof(elfout.ehdr) + + // Elf32_Phdr: 1 for exec86, 2 for sh86, 3 for elf86 + (elfout.ehdr.e_phentsize * elfout.ehdr.e_phnum) + + // checksum UPX! lsize version format + sizeof(l_info) + + // PT_DYNAMIC with DT_NEEDED "forwarded" from original file + ((elfout.ehdr.e_phnum==3) ? (unsigned) elfout.phdr[2].p_memsz : 0) + + // p_progid, p_filesize, p_blocksize + sizeof(p_info) + + // compressed data + b_len + ph.c_len ); + // entry to stub + addLoader("LEXEC000", NULL); + + if (ft->id) { + { // decompr, unfilter are separate + addLoader("LXUNF000", NULL); + addLoader("LXUNF002", NULL); + if (0x80==(ft->id & 0xF0)) { + if (256==n_mru) { + addLoader("MRUBYTE0", NULL); + } + else if (n_mru) { + addLoader("LXMRU005", NULL); + } + if (n_mru) { + addLoader("LXMRU006", NULL); + } + else { + addLoader("LXMRU007", NULL); + } + } + else if (0x40==(ft->id & 0xF0)) { + addLoader("LXUNF008", NULL); + } + addLoader("LXUNF010", NULL); + } + if (n_mru) { + addLoader("LEXEC009", NULL); + } + } + addLoader("LEXEC010", NULL); + addLoader(getDecompressor(), NULL); + addLoader("LEXEC015", NULL); + if (ft->id) { + { // decompr, unfilter are separate + if (0x80!=(ft->id & 0xF0)) { + addLoader("LXUNF042", NULL); + } + } + addFilter32(ft->id); + { // decompr, unfilter are separate + if (0x80==(ft->id & 0xF0)) { + if (0==n_mru) { + addLoader("LXMRU058", NULL); + } + } + addLoader("LXUNF035", NULL); + } + } + else { + addLoader("LEXEC017", NULL); + } + + addLoader("IDENTSTR", NULL); + addLoader("LEXEC020", NULL); + addLoader("FOLDEXEC", NULL); + + char *ptr_cto = (char *)const_cast(getLoader()); + int sz_cto = getLoaderSize(); + if (0x20==(ft->id & 0xF0) || 0x30==(ft->id & 0xF0)) { // push byte '?' ; cto8 + patch_le16(ptr_cto, sz_cto, "\x6a?", 0x6a + (ft->cto << 8)); + checkPatch(NULL, 0, 0, 0); // reset + } + // PackHeader and overlay_offset at the end of the output file, + // after the compressed data. + + return getLoaderSize(); +} + int PackLinuxElf32ppc::buildLinuxLoader( upx_byte const *const proto, @@ -280,7 +408,7 @@ PackLinuxElf32ppc::buildLinuxLoader( ) { { - int const MAX_LOADER_LEN = 4096; + int const MAX_LOADER_LEN = 8000; int *const eof_empty = new int[MAX_LOADER_LEN/sizeof(int)]; eof_empty[0] = -1; initLoader(eof_empty, MAX_LOADER_LEN, 0, 0); @@ -320,9 +448,9 @@ PackLinuxElf32ppc::buildLinuxLoader( //int const GAP = 128; // must match stub/l_mac_ppc.S //segcmdo.vmsize += sz_unc - sz_cpr + GAP + 64; - linker->addSection("ELFPPC32", proto, szproto); + linker->addSection("ELF32PPC", proto, szproto); - addLoader("ELFPPC32", NULL); + addLoader("ELF32PPC", NULL); addLoader("FOLDEXEC", NULL); return getLoaderSize(); } @@ -539,6 +667,22 @@ PackLinuxElf32::getbrk(const Elf32_Phdr *phdr, int e_phnum) const return brka; } +off_t +PackLinuxElf32::getbase(const Elf32_Phdr *phdr, int e_phnum) const +{ + off_t base = ~0u; + for (int j = 0; j < e_phnum; ++phdr, ++j) { + if (phdr->PT_LOAD == phdr->p_type) { + if (phdr->p_vaddr < (unsigned) base) + base = phdr->p_vaddr; + } + } + if (0!=base) { + return base; + } + return 0x12000; +} + off_t PackLinuxElf64::getbrk(const Elf64_Phdr *phdr, int e_phnum) const { @@ -637,6 +781,27 @@ PackLinuxElf64::generateElfHdr( } } +void +PackLinuxElf32x86::generateElfHdr( + OutputFile *fo, + void const *proto, + unsigned const brka +) +{ + super::generateElfHdr(fo, proto, brka); + + if (ph.format==UPX_F_LINUX_ELF_i386) { + cprElfHdr2 *const h2 = (cprElfHdr2 *)&elfout; + assert(2==get_native16(&h2->ehdr.e_phnum)); + set_native32(&h2->phdr[0].p_flags, ~Elf32_Phdr::PF_W & get_native32(&h2->phdr[0].p_flags)); + memset(&h2->linfo, 0, sizeof(h2->linfo)); + fo->write(h2, sizeof(*h2)); + } + else { + assert(false); // unknown ph.format, PackLinuxElf32x86::generateElfHdr + } +} + void PackLinuxElf32ppc::generateElfHdr( OutputFile *fo, @@ -1016,10 +1181,17 @@ void PackLinuxElf32::pack4(OutputFile *fo, Filter &ft) set_native32(&elfout.phdr[0].p_filesz, len); super::pack4(fo, ft); // write PackHeader and overlay_offset + // Cannot pre-round .p_memsz. If .p_filesz < .p_memsz, then kernel + // tries to make .bss, which requires PF_W. + // But strict SELinux (or PaX, grSecurity) disallows PF_W with PF_X. +#if 0 /*{*/ #define PAGE_MASK (~0u<<12) // pre-calculate for benefit of runtime disappearing act via munmap() set_native32(&elfout.phdr[0].p_memsz, PAGE_MASK & (~PAGE_MASK + len)); #undef PAGE_MASK +#else /*}{*/ + set_native32(&elfout.phdr[0].p_memsz, len); +#endif /*}*/ // rewrite Elf header if (Elf32_Ehdr::ET_DYN==ehdri.e_type) { @@ -1046,10 +1218,17 @@ void PackLinuxElf64::pack4(OutputFile *fo, Filter &ft) set_native64(&elfout.phdr[0].p_filesz, len); super::pack4(fo, ft); // write PackHeader and overlay_offset + // Cannot pre-round .p_memsz. If .p_filesz < .p_memsz, then kernel + // tries to make .bss, which requires PF_W. + // But strict SELinux (or PaX, grSecurity) disallows PF_W with PF_X. +#if 0 /*{*/ #define PAGE_MASK (~0u<<12) // pre-calculate for benefit of runtime disappearing act via munmap() set_native64(&elfout.phdr[0].p_memsz, PAGE_MASK & (~PAGE_MASK + len)); #undef PAGE_MASK +#else /*}{*/ + set_native64(&elfout.phdr[0].p_memsz, len); +#endif /*}*/ // rewrite Elf header fo->seek(0, SEEK_SET); @@ -1271,20 +1450,20 @@ void PackLinuxElf64::unpack(OutputFile *fo) **************************************************************************/ -PackLinuxI386elf::PackLinuxI386elf(InputFile *f) : +PackLinuxElf32x86::PackLinuxElf32x86(InputFile *f) : super(f), phdri(NULL), file_image(NULL), dynseg(NULL), hashtab(NULL), dynstr(NULL), dynsym(NULL) { } -PackLinuxI386elf::~PackLinuxI386elf() +PackLinuxElf32x86::~PackLinuxElf32x86() { delete[] file_image; delete[] phdri; } int const * -PackLinuxI386elf::getFilters() const +PackLinuxElf32x86::getFilters() const { static const int filters[] = { 0x49, 0x46, @@ -1307,7 +1486,7 @@ PackLinuxI386elf::getFilters() const } int -PackLinuxI386elf::buildLoader(const Filter *ft) +PackLinuxElf32x86::buildLoader(const Filter *ft) { unsigned char tmp[sizeof(linux_i386elf_fold)]; memcpy(tmp, linux_i386elf_fold, sizeof(linux_i386elf_fold)); @@ -1330,10 +1509,10 @@ PackLinuxI386elf::buildLoader(const Filter *ft) } -void PackLinuxI386elf::patchLoader() { } +void PackLinuxElf32x86::patchLoader() { } -bool PackLinuxI386elf::canPack() +bool PackLinuxElf32x86::canPack() { unsigned char buf[sizeof(Elf32_Ehdr) + 14*sizeof(Elf32_Phdr)]; COMPILE_TIME_ASSERT(sizeof(buf) <= 512); @@ -1345,7 +1524,8 @@ bool PackLinuxI386elf::canPack() Elf32_Ehdr const *const ehdr = (Elf32_Ehdr const *)buf; // now check the ELF header - if (checkEhdr(ehdr) != 0) + if (checkEhdr(ehdr, Elf32_Ehdr::EM_386, + Elf32_Ehdr::ELFCLASS32, Elf32_Ehdr::ELFDATA2LSB) != 0) return false; // additional requirements for linux/elf386 @@ -1441,7 +1621,7 @@ bool PackLinuxI386elf::canPack() } unsigned -PackLinuxI386elf::elf_get_offset_from_address(unsigned const addr) const +PackLinuxElf32x86::elf_get_offset_from_address(unsigned const addr) const { Elf32_Phdr const *phdr = phdri; int j = ehdri.e_phnum; @@ -1455,7 +1635,7 @@ PackLinuxI386elf::elf_get_offset_from_address(unsigned const addr) const } void const * -PackLinuxI386elf::elf_find_dynamic(unsigned int const key) const +PackLinuxElf32x86::elf_find_dynamic(unsigned int const key) const { Elf32_Dyn const *dynp= dynseg; if (dynp) @@ -1469,7 +1649,7 @@ PackLinuxI386elf::elf_find_dynamic(unsigned int const key) const return 0; } -unsigned PackLinuxI386elf::elf_hash(char const *p) +unsigned PackLinuxElf32x86::elf_hash(char const *p) { unsigned h; for (h= 0; 0!=*p; ++p) { @@ -1483,7 +1663,7 @@ unsigned PackLinuxI386elf::elf_hash(char const *p) return h; } -Elf32_Sym const *PackLinuxI386elf::elf_lookup(char const *name) const +Elf32_Sym const *PackLinuxElf32x86::elf_lookup(char const *name) const { if (hashtab && dynsym && dynstr) { unsigned const nbucket = hashtab[0]; @@ -1502,7 +1682,7 @@ Elf32_Sym const *PackLinuxI386elf::elf_lookup(char const *name) const } -void PackLinuxI386elf::pack1(OutputFile *fo, Filter &) +void PackLinuxElf32x86::pack1(OutputFile *fo, Filter &) { fi->seek(0, SEEK_SET); fi->readx(&ehdri, sizeof(ehdri)); @@ -1517,7 +1697,7 @@ void PackLinuxI386elf::pack1(OutputFile *fo, Filter &) generateElfHdr(fo, linux_i386elf_fold, getbrk(phdri, ehdri.e_phnum) ); } -unsigned PackLinuxI386elf::find_LOAD_gap( +unsigned PackLinuxElf32x86::find_LOAD_gap( Elf32_Phdr const *const phdri, unsigned const k, unsigned const e_phnum @@ -1551,7 +1731,7 @@ unsigned PackLinuxI386elf::find_LOAD_gap( return lo - hi; } -void PackLinuxI386elf::pack2(OutputFile *fo, Filter &ft) +void PackLinuxElf32x86::pack2(OutputFile *fo, Filter &ft) { Extent x; unsigned k; @@ -1612,7 +1792,7 @@ void PackLinuxI386elf::pack2(OutputFile *fo, Filter &ft) set_native32(&elfout.phdr[0].p_filesz, fo->getBytesWritten()); } -void PackLinuxI386elf::pack3(OutputFile *fo, Filter &ft) +void PackLinuxElf32x86::pack3(OutputFile *fo, Filter &ft) { unsigned disp; unsigned len = fo->getBytesWritten(); @@ -1622,7 +1802,7 @@ void PackLinuxI386elf::pack3(OutputFile *fo, Filter &ft) set_native32(&disp, len); fo->write(&disp, sizeof(disp)); - // We have packed multiple blocks, so PackLinuxI386::buildLinuxLoader + // We have packed multiple blocks, so PackLinuxElfxx::buildLinuxLoader // needs an adjusted ph.c_len in order to get alignment correct. unsigned const save_c_len = ph.c_len; ph.c_len = sizeof(disp) + len - ( @@ -1644,17 +1824,10 @@ void PackLinuxI386elf::pack3(OutputFile *fo, Filter &ft) super::pack3(fo, ft); } -void PackLinuxI386elf::pack4(OutputFile *fo, Filter &ft) +void PackLinuxElf32x86::pack4(OutputFile *fo, Filter &ft) { super::pack4(fo, ft); // write PackHeader and overlay_offset -#if 0 /*{ where was this done already? FIXME */ -#define PAGE_MASK (~0u<<12) - // pre-calculate for benefit of runtime disappearing act via munmap() - set_native32(&elfout.phdr[0].p_memsz, PAGE_MASK & (~PAGE_MASK + len)); -#undef PAGE_MASK -#endif /*}*/ - // rewrite Elf header if (Elf32_Ehdr::ET_DYN==ehdri.e_type) { // File being compressed was -pie. @@ -1665,14 +1838,15 @@ void PackLinuxI386elf::pack4(OutputFile *fo, Filter &ft) elfout.ehdr.e_entry -= base; elfout.phdr[0].p_vaddr -= base; elfout.phdr[0].p_paddr -= base; - elfout.phdr[0].p_flags |= Elf32_Phdr::PF_W; + // Strict SELinux (or PaX, grSecurity) disallows PF_W with PF_X + //elfout.phdr[0].p_flags |= Elf32_Phdr::PF_W; } fo->seek(0, SEEK_SET); fo->rewrite(&elfout, sizeof(Elf32_Ehdr) + sizeof(Elf32_Phdr)); //fo->rewrite(&linfo, sizeof(linfo)); } -void PackLinuxI386elf::unpack(OutputFile *fo) +void PackLinuxElf32x86::unpack(OutputFile *fo) { #define MAX_ELF_HDR 512 char bufehdr[MAX_ELF_HDR]; diff --git a/src/p_lx_elf.h b/src/p_lx_elf.h index 7c9fe194..c6d74fea 100644 --- a/src/p_lx_elf.h +++ b/src/p_lx_elf.h @@ -59,13 +59,6 @@ protected: void const *proto, unsigned const brka ) = 0; - virtual int buildLinuxLoader( - upx_byte const *const proto, // assembly-only sections - unsigned const szproto, - upx_byte const *const fold, // linked assembly + C section - unsigned const szfold, - Filter const *ft - ) = 0; virtual void unpack(OutputFile *fo) = 0; protected: @@ -102,6 +95,7 @@ protected: virtual void updateLoader(OutputFile *fo); virtual unsigned find_LOAD_gap(Elf32_Phdr const *const phdri, unsigned const k, unsigned const e_phnum); + virtual off_t getbase(const Elf32_Phdr *phdr, int e_phnum) const; protected: Elf32_Ehdr ehdri; // from input file @@ -206,6 +200,20 @@ protected: virtual void set_native16(void *b, unsigned v) const { set_be16(b, v); } }; +class PackLinuxElf32Le : public PackLinuxElf32 +{ + typedef PackLinuxElf32 super; +protected: + PackLinuxElf32Le(InputFile *f) : super(f) { } + + virtual acc_uint64l_t get_native64(const void *b) const { return get_le64(b); } + virtual unsigned get_native32(const void *b) const { return get_le32(b); } + virtual unsigned get_native16(const void *b) const { return get_le16(b); } + virtual void set_native64(void *b, acc_uint64l_t v) const { set_le64(b, v); } + virtual void set_native32(void *b, unsigned v) const { set_le32(b, v); } + virtual void set_native16(void *b, unsigned v) const { set_le16(b, v); } +}; + class PackLinuxElf64Le : public PackLinuxElf64 { typedef PackLinuxElf64 super; @@ -237,6 +245,7 @@ public: protected: virtual void pack3(OutputFile *, Filter &); // append loader virtual const int *getCompressionMethods(int method, int level) const; + virtual int buildLoader(const Filter *); virtual int buildLinuxLoader( upx_byte const *const proto, // assembly-only sections unsigned const szproto, @@ -244,7 +253,6 @@ protected: unsigned const szfold, Filter const *ft ); - virtual int buildLoader(const Filter *); virtual void generateElfHdr( OutputFile *, void const *proto, @@ -269,6 +277,7 @@ public: protected: virtual void pack3(OutputFile *, Filter &); // append loader virtual const int *getCompressionMethods(int method, int level) const; + virtual int buildLoader(const Filter *); virtual int buildLinuxLoader( upx_byte const *const proto, // assembly-only sections unsigned const szproto, @@ -276,7 +285,6 @@ protected: unsigned const szfold, Filter const *ft ); - virtual int buildLoader(const Filter *); virtual void generateElfHdr( OutputFile *, void const *proto, @@ -288,17 +296,16 @@ protected: // linux/elf386 **************************************************************************/ -class PackLinuxI386elf : public PackLinuxI386 +class PackLinuxElf32x86 : public PackLinuxElf32Le { - typedef PackLinuxI386 super; + typedef PackLinuxElf32Le super; public: - PackLinuxI386elf(InputFile *f); - virtual ~PackLinuxI386elf(); + PackLinuxElf32x86(InputFile *f); + virtual ~PackLinuxElf32x86(); virtual int getVersion() const { return 13; } virtual int getFormat() const { return UPX_F_LINUX_ELF_i386; } virtual const char *getName() const { return "linux/elf386"; } virtual const int *getFilters() const; - virtual int buildLoader(const Filter *); virtual void unpack(OutputFile *fo); @@ -313,6 +320,19 @@ protected: virtual void pack4(OutputFile *, Filter &); // append pack header virtual void patchLoader(); + virtual int buildLoader(const Filter *); + virtual int buildLinuxLoader( + upx_byte const *const proto, // assembly-only sections + unsigned const szproto, + upx_byte const *const fold, // linked assembly + C section + unsigned const szfold, + Filter const *ft + ); + virtual void generateElfHdr( + OutputFile *, + void const *proto, + unsigned const brka + ); Elf32_Ehdr ehdri; // from input file Elf32_Phdr *phdri; // for input file diff --git a/src/p_lx_exc.cpp b/src/p_lx_exc.cpp index 7a44f81f..a2a0d8c9 100644 --- a/src/p_lx_exc.cpp +++ b/src/p_lx_exc.cpp @@ -134,11 +134,6 @@ PackLinuxI386::generateElfHdr( memset(&h1->linfo, 0, sizeof(h1->linfo)); fo->write(h1, sizeof(*h1)); } - else if (ph.format==UPX_F_LINUX_ELF_i386) { - assert(h2->ehdr.e_phnum==2); - memset(&h2->linfo, 0, sizeof(h2->linfo)); - fo->write(h2, sizeof(*h2)); - } else if (ph.format==UPX_F_LINUX_SH_i386) { assert(h2->ehdr.e_phnum==1); h2->ehdr.e_phnum = 1; @@ -228,11 +223,19 @@ PackLinuxI386::pack4(OutputFile *fo, Filter &ft) fo->write(shstrtab, sizeof(shstrtab)); #endif // } + + // Cannot pre-round .p_memsz. If .p_filesz < .p_memsz, then kernel + // tries to make .bss, which requires PF_W. + // But strict SELinux (or PaX, grSecurity) disallows PF_W with PF_X. +#if 0 /*{*/ #undef PAGE_MASK #define PAGE_MASK (~0u<<12) // pre-calculate for benefit of runtime disappearing act via munmap() elfout.phdr[0].p_memsz = PAGE_MASK & (~PAGE_MASK + elfout.phdr[0].p_filesz); #undef PAGE_MASK +#else /*}{*/ + elfout.phdr[0].p_memsz = elfout.phdr[0].p_filesz; +#endif /*}*/ // rewrite Elf header fo->seek(0, SEEK_SET); @@ -276,19 +279,14 @@ PackLinuxI386::buildLinuxLoader( } unsigned char const *const uncLoader = fold_hdrlen + fold; - unsigned char *const cprLoader = new unsigned char[sizeof(h) + h.sz_unc]; + unsigned char *const cprLoader = new unsigned char[h.sz_unc]; if (0 < szfold) { - unsigned sz_cpr; - int r = upx_compress(uncLoader, h.sz_unc, sizeof(h) + cprLoader, &sz_cpr, - NULL, ph.method, 10, NULL, NULL ); + unsigned sz_cpr = h.sz_unc; + memcpy(cprLoader, uncLoader, sz_cpr); h.sz_cpr = sz_cpr; - if (r != UPX_E_OK || h.sz_cpr >= h.sz_unc) - throwInternalError("loader compression failed"); } - memcpy(cprLoader, &h, sizeof(h)); - // This adds the definition to the "library", to be used later. - linker->addSection("FOLDEXEC", cprLoader, sizeof(h) + h.sz_cpr); + linker->addSection("FOLDEXEC", cprLoader, h.sz_cpr); delete [] cprLoader; n_mru = ft->n_mru; @@ -311,28 +309,6 @@ PackLinuxI386::buildLinuxLoader( addLoader("LEXEC000", NULL); if (ft->id) { - if (ph.format==UPX_F_LINUX_ELF_i386) { // decompr, unfilter are separate - addLoader("LXUNF000", NULL); - addLoader("LXUNF002", NULL); - if (0x80==(ft->id & 0xF0)) { - if (256==n_mru) { - addLoader("MRUBYTE0", NULL); - } - else if (n_mru) { - addLoader("LXMRU005", NULL); - } - if (n_mru) { - addLoader("LXMRU006", NULL); - } - else { - addLoader("LXMRU007", NULL); - } - } - else if (0x40==(ft->id & 0xF0)) { - addLoader("LXUNF008", NULL); - } - addLoader("LXUNF010", NULL); - } if (n_mru) { addLoader("LEXEC009", NULL); } @@ -341,12 +317,7 @@ PackLinuxI386::buildLinuxLoader( addLoader(getDecompressor(), NULL); addLoader("LEXEC015", NULL); if (ft->id) { - if (ph.format==UPX_F_LINUX_ELF_i386) { // decompr, unfilter are separate - if (0x80!=(ft->id & 0xF0)) { - addLoader("LXUNF042", NULL); - } - } - else { // decompr, unfilter not separate + { // decompr, unfilter not separate if (0x80==(ft->id & 0xF0)) { addLoader("LEXEC110", NULL); if (n_mru) { @@ -357,15 +328,7 @@ PackLinuxI386::buildLinuxLoader( } } addFilter32(ft->id); - if (ph.format==UPX_F_LINUX_ELF_i386) { // decompr, unfilter are separate - if (0x80==(ft->id & 0xF0)) { - if (0==n_mru) { - addLoader("LXMRU058", NULL); - } - } - addLoader("LXUNF035", NULL); - } - else { // decompr always unfilters + { // decompr always unfilters addLoader("LEXEC017", NULL); } } @@ -404,24 +367,6 @@ PackLinuxI386::buildLoader(Filter const *ft) patch_le32(buf,sz_fold,"UPX3",progid); patch_le32(buf,sz_fold,"UPX2",exetype > 0 ? 0 : 0x7fffffff); - // get fresh filter - Filter fold_ft = *ft; - fold_ft.init(ft->id, ft->addvalue); - int preferred_ctos[2] = {ft->cto, -1}; - fold_ft.preferred_ctos = preferred_ctos; - - // filter - optimizeFilter(&fold_ft, buf, sz_fold); - - unsigned fold_hdrlen = sizeof(l_info) + sizeof(Elf32_Ehdr) + - sizeof(Elf32_Phdr) * get_native32(&((Elf32_Ehdr const *)(void *)buf)->e_phnum); - if (0 == get_le32(fold_hdrlen + buf)) { - // inconsistent SIZEOF_HEADERS in *.lds (ld, binutils) - fold_hdrlen = umax(0x80, fold_hdrlen); - } - bool success = fold_ft.filter(buf + fold_hdrlen, sz_fold - fold_hdrlen); - (void)success; - return buildLinuxLoader( linux_i386exec_loader, sizeof(linux_i386exec_loader), buf, sz_fold, ft ); @@ -479,34 +424,6 @@ int PackLinuxI386::checkEhdr(const Elf32_Ehdr *ehdr) const } -off_t PackLinuxI386::getbrk(const Elf32_Phdr *phdr, int e_phnum) const -{ - off_t brka = 0; - for (int j = 0; j < e_phnum; ++phdr, ++j) { - if (phdr->PT_LOAD == phdr->p_type) { - off_t b = phdr->p_vaddr + phdr->p_memsz; - if (b > brka) - brka = b; - } - } - return brka; -} - -off_t PackLinuxI386::getbase(const Elf32_Phdr *phdr, int e_phnum) const -{ - off_t base = ~0u; - for (int j = 0; j < e_phnum; ++phdr, ++j) { - if (phdr->PT_LOAD == phdr->p_type) { - if (phdr->p_vaddr < (unsigned) base) - base = phdr->p_vaddr; - } - } - if (0!=base) { - return base; - } - return 0x12000; -} - /************************************************************************* // diff --git a/src/p_lx_exc.h b/src/p_lx_exc.h index 1adf3545..b48914b6 100644 --- a/src/p_lx_exc.h +++ b/src/p_lx_exc.h @@ -21,8 +21,11 @@ If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - Markus F.X.J. Oberhumer Laszlo Molnar - markus@oberhumer.com ml1050@users.sourceforge.net + Markus F.X.J. Oberhumer Laszlo Molnar + + + John F. Reiser + */ @@ -75,8 +78,6 @@ protected: // ELF util virtual int checkEhdr(const Elf32_Ehdr *ehdr) const; - virtual off_t getbrk(const Elf32_Phdr *phdr, int e_phnum) const; - virtual off_t getbase(const Elf32_Phdr *phdr, int e_phnum) const; enum { UPX_ELF_MAGIC = 0x5850557f // "\x7fUPX" diff --git a/src/p_lx_interp.cpp b/src/p_lx_interp.cpp index 6d8efe65..6d468e24 100644 --- a/src/p_lx_interp.cpp +++ b/src/p_lx_interp.cpp @@ -55,16 +55,16 @@ static const static const #include "stub/fold_pti86.h" -PackLinuxI386interp::PackLinuxI386interp(InputFile *f) : +PackLinuxElf32x86interp::PackLinuxElf32x86interp(InputFile *f) : super(f) { } -PackLinuxI386interp::~PackLinuxI386interp() +PackLinuxElf32x86interp::~PackLinuxElf32x86interp() { } -bool PackLinuxI386interp::canPack() +bool PackLinuxElf32x86interp::canPack() { if (opt->o_unix.make_ptinterp) { return true; @@ -75,7 +75,7 @@ bool PackLinuxI386interp::canPack() return super::canPack(); } -void PackLinuxI386interp::pack1(OutputFile *fo, Filter &) +void PackLinuxElf32x86interp::pack1(OutputFile *fo, Filter &) { fi->seek(0, SEEK_SET); fi->readx(&ehdri, sizeof(ehdri)); @@ -124,7 +124,7 @@ void PackLinuxI386interp::pack1(OutputFile *fo, Filter &) #undef E } -void PackLinuxI386interp::pack2(OutputFile *fo, Filter &ft) +void PackLinuxElf32x86interp::pack2(OutputFile *fo, Filter &ft) { if (opt->o_unix.make_ptinterp) { return; // ignore current input file! @@ -135,7 +135,7 @@ void PackLinuxI386interp::pack2(OutputFile *fo, Filter &ft) #undef PAGE_MASK #define PAGE_MASK (~0u<<12) -void PackLinuxI386interp::pack3(OutputFile *fo, Filter &/*ft*/) +void PackLinuxElf32x86interp::pack3(OutputFile *fo, Filter &/*ft*/) { unsigned base = getbase(phdri, ehdri.e_phnum); unsigned sz = PAGE_MASK & (~PAGE_MASK + elfout.phdr[0].p_filesz); @@ -194,7 +194,7 @@ void PackLinuxI386interp::pack3(OutputFile *fo, Filter &/*ft*/) } -void PackLinuxI386interp::unpack(OutputFile *fo) +void PackLinuxElf32x86interp::unpack(OutputFile *fo) { #define MAX_INTERP_HDR 512 char bufehdr[MAX_INTERP_HDR]; diff --git a/src/p_lx_interp.h b/src/p_lx_interp.h index 4b5c9420..12a355b0 100644 --- a/src/p_lx_interp.h +++ b/src/p_lx_interp.h @@ -38,12 +38,12 @@ // linux/interp386 **************************************************************************/ -class PackLinuxI386interp : public PackLinuxI386elf +class PackLinuxElf32x86interp : public PackLinuxElf32x86 { - typedef PackLinuxI386elf super; + typedef PackLinuxElf32x86 super; public: - PackLinuxI386interp(InputFile *f); - virtual ~PackLinuxI386interp(); + PackLinuxElf32x86interp(InputFile *f); + virtual ~PackLinuxElf32x86interp(); virtual int getVersion() const { return 13; } virtual int getFormat() const { return UPX_F_LINUX_ELFI_i386; } virtual const char *getName() const { return "linux/elfi386"; } diff --git a/src/p_lx_sep.h b/src/p_lx_sep.h index b9461e88..2df58fa3 100644 --- a/src/p_lx_sep.h +++ b/src/p_lx_sep.h @@ -38,9 +38,9 @@ // linux/sep386 **************************************************************************/ -class PackLinuxI386sep : public PackLinuxI386elf +class PackLinuxI386sep : public PackLinuxI386 { - typedef PackLinuxI386elf super; + typedef PackLinuxI386 super; public: PackLinuxI386sep(InputFile *f) : super(f) { } virtual int getFormat() const { return UPX_F_LINUX_SEP_i386; } diff --git a/src/packmast.cpp b/src/packmast.cpp index 6abd6e77..d78a8aed 100644 --- a/src/packmast.cpp +++ b/src/packmast.cpp @@ -212,14 +212,14 @@ static Packer* try_packers(InputFile *f, try_function func) } #endif if (opt->o_unix.use_ptinterp) { - if ((p = func(new PackLinuxI386interp(f),f)) != NULL) + if ((p = func(new PackLinuxElf32x86interp(f),f)) != NULL) return p; } if ((p = func(new PackLinuxElf64amd(f),f)) != NULL) return p; if ((p = func(new PackLinuxElf32ppc(f),f)) != NULL) return p; - if ((p = func(new PackLinuxI386elf(f),f)) != NULL) + if ((p = func(new PackLinuxElf32x86(f),f)) != NULL) return p; if ((p = func(new PackLinuxI386sh(f),f)) != NULL) return p; diff --git a/src/stub/fold_elf86.asm b/src/stub/fold_elf86.asm index cec26544..34e3b49c 100644 --- a/src/stub/fold_elf86.asm +++ b/src/stub/fold_elf86.asm @@ -98,8 +98,13 @@ L50: sub esp, dword MAX_ELF_HDR + OVERHEAD ; alloca push ebx ; start of unmap region (&Elf32_Ehdr of this stub) - mov edx, [p_memsz + szElf32_Ehdr + ebx] ; phdr[0].p_memsz, pre-rounded up - lea edx, [PAGE_SIZE + edx + ebx] ; 1 page in l_lx_elf86asm for unfold + +; Cannot pre-round .p_memsz because kernel requires PF_W to setup .bss, +; but strict SELinux (or PaX, grsecurity) prohibits PF_W with PF_X. + mov edx, [p_memsz + szElf32_Ehdr + ebx] ; phdr[0].p_memsz + lea edx, [-1 + 2*PAGE_SIZE + edx + ebx] ; 1 page for round, 1 for unfold + and edx, -PAGE_SIZE + push edx ; end of unmap region sub eax, eax ; 0 cmp word [e_type + ebx], byte ET_DYN diff --git a/src/stub/fold_elf86.h b/src/stub/fold_elf86.h index 60254394..fa19c826 100644 --- a/src/stub/fold_elf86.h +++ b/src/stub/fold_elf86.h @@ -1,4 +1,4 @@ -/* fold_elf86.h -- created from fold_elf86.bin, 1603 (0x643) bytes +/* fold_elf86.h -- created from fold_elf86.bin, 1607 (0x647) bytes This file is part of the UPX executable compressor. @@ -27,110 +27,110 @@ */ -#define LINUX_I386ELF_FOLD_SIZE 1603 -#define LINUX_I386ELF_FOLD_ADLER32 0x34baaf28 -#define LINUX_I386ELF_FOLD_CRC32 0xd41e0330 +#define LINUX_I386ELF_FOLD_SIZE 1607 +#define LINUX_I386ELF_FOLD_ADLER32 0xdf50b4ab +#define LINUX_I386ELF_FOLD_CRC32 0x537b9a31 -unsigned char linux_i386elf_fold[1603] = { +unsigned char linux_i386elf_fold[1607] = { 127, 69, 76, 70, 1, 1, 1, 0, 76,105,110,117,120, 0, 0, 0, /* 0x 0 */ 2, 0, 3, 0, 1, 0, 0, 0,128, 16,192, 0, 52, 0, 0, 0, /* 0x 10 */ 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 32, 0, 2, 0, 0, 0, /* 0x 20 */ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 16,192, 0, /* 0x 30 */ - 0, 16,192, 0, 67, 6, 0, 0, 68, 6, 0, 0, 5, 0, 0, 0, /* 0x 40 */ - 0, 16, 0, 0, 1, 0, 0, 0, 67, 6, 0, 0, 68, 22,192, 0, /* 0x 50 */ - 68, 22,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, /* 0x 60 */ + 0, 16,192, 0, 71, 6, 0, 0, 72, 6, 0, 0, 5, 0, 0, 0, /* 0x 40 */ + 0, 16, 0, 0, 1, 0, 0, 0, 71, 6, 0, 0, 72, 22,192, 0, /* 0x 50 */ + 72, 22,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, /* 0x 60 */ 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 70 */ - 41,201,186,120, 2, 0, 0,137,230,137,231,232,115, 0, 0, 0, /* 0x 80 */ + 41,201,186,120, 2, 0, 0,137,230,137,231,232,121, 0, 0, 0, /* 0x 80 */ 137,230,209,234, 25,192, 41,193,141, 36,196,133,210,117,243,137, /* 0x 90 */ -231,232, 93, 0, 0, 0,129,236, 0, 10, 0, 0, 83,139, 83, 72, /* 0x a0 */ -141,148, 26, 0, 16, 0, 0, 82, 41,192,102,131,123, 16, 3,117, /* 0x b0 */ - 1,146, 80,139,115, 24,141,131,140, 0, 0, 0, 41,198,139, 24, /* 0x c0 */ -139, 72, 4,131,193, 12,141, 84, 36, 12, 96, 71,232, 92, 4, 0, /* 0x d0 */ - 0,131,196, 36, 89, 91,129,196, 0, 10, 0, 0, 80, 79, 41,192, /* 0x e0 */ - 60,175,175,117,252, 80, 80, 80, 80, 80, 80, 80, 80, 41,217,176, /* 0x f0 */ - 91,255, 39,173,171,133,192,117,250,173,171,133,192,117,250, 87, /* 0x 100 */ -173,171,131,248, 32,115, 3, 15,179,194,133,192,173,171,117,240, /* 0x 110 */ -131,239, 8, 1,201, 64,243,171, 72,171,171, 95,195, 83,141, 92, /* 0x 120 */ - 36, 8,106, 90, 88,205,128, 91,195, 0, 0, 0, 87, 86,137,206, /* 0x 130 */ - 83,137,195, 57, 8,139,120, 4,115, 10,106,127, 91,106, 1, 88, /* 0x 140 */ -205,128,235,254,133,201,116, 8,138, 7, 71,136, 2, 66,226,248, /* 0x 150 */ - 1,115, 4, 41, 51, 91, 94, 95,195, 85,137,229, 87, 86,137,198, /* 0x 160 */ - 83,137,211,131,236, 24,139, 69, 8,139,125, 12,137, 69,220,131, /* 0x 170 */ - 58, 0, 15,132,184, 0, 0, 0,141, 85,228,185, 12, 0, 0, 0, /* 0x 180 */ -137,240,232,165,255,255,255,139, 69,228,139, 77,232,133,192,117, /* 0x 190 */ - 19,129,249, 85, 80, 88, 33,117, 15,131, 62, 0, 15,132,142, 0, /* 0x 1a0 */ - 0, 0,235, 4,133,201,117, 10,106,127, 91,106, 1, 88,205,128, /* 0x 1b0 */ -235,254, 57,193,119,242, 59, 3,119,238, 57,193,115, 85, 15,182, /* 0x 1c0 */ - 69,236, 80,141, 69,224, 80,255,115, 4, 81,255,118, 4,255, 85, /* 0x 1d0 */ -220,131,196, 20,133,192,117,208,139, 85,224, 59, 85,228,117,200, /* 0x 1e0 */ -138, 69,237,132,192,116, 34,133,255,116, 30,129,250, 0, 2, 0, /* 0x 1f0 */ - 0,119, 4, 57, 19,117, 18, 15,182,192, 80, 15,182, 69,238, 80, /* 0x 200 */ - 82,255,115, 4,255,215,131,196, 16,139, 69,232, 1, 70, 4, 41, /* 0x 210 */ - 6,235, 10,139, 83, 4,137,240,232, 15,255,255,255,139, 85,228, /* 0x 220 */ -139, 3, 1, 83, 4, 41,208,133,192,137, 3,233, 66,255,255,255, /* 0x 230 */ -141,101,244, 91, 94, 95,201,195,133,192, 83,137,211,116, 29,168, /* 0x 240 */ - 1,117, 25,139, 16, 57,218,116, 7, 74,117, 11,133,219,116, 7, /* 0x 250 */ -137, 24,137, 72, 4,235, 5,131,192, 8,235,231, 91,195, 85,137, /* 0x 260 */ -229, 87, 86, 83,131,236, 64,137, 85,224,139, 77,224,137, 69,228, /* 0x 270 */ -139, 85, 12, 3, 73, 28,139, 69, 8,137, 85,216,139, 93,224,139, /* 0x 280 */ - 85,224,137, 69,220, 49,192,102,131,123, 16, 2,137, 77,212,137, /* 0x 290 */ -203, 15,183, 74, 44, 15,148,192,131,207,255,193,224, 4,137,202, /* 0x 2a0 */ - 49,246,131,192, 34, 74,120, 28,131, 59, 1,117, 18,139, 83, 8, /* 0x 2b0 */ - 57,250,115, 2,137,215, 3, 83, 20, 57,214,115, 2,137,214,131, /* 0x 2c0 */ -195, 32,226,228,137,251,106, 0,129,227, 0,240,255,255,106,255, /* 0x 2d0 */ - 41,222, 80,129,198,255, 15, 0, 0,106, 0,129,230, 0,240,255, /* 0x 2e0 */ -255, 86, 83,232, 53,254,255,255,139, 77,224,141, 52, 48,131,196, /* 0x 2f0 */ - 24, 41,216,102,131,121, 44, 0,137,117,240,137, 69,208,199, 69, /* 0x 300 */ -204, 0, 0, 0, 0, 15,132,218, 1, 0, 0,139, 93,212,139, 3, /* 0x 310 */ -131,248, 6,117, 24,139, 77,208,186, 3, 0, 0, 0, 3, 75, 8, /* 0x 320 */ -139, 69,216,232, 16,255,255,255,233,161, 1, 0, 0, 72, 15,133, /* 0x 330 */ -154, 1, 0, 0,139, 69,212,199, 69,200, 64, 98, 81,115,139, 85, /* 0x 340 */ -212,139, 72, 24,139, 90, 20,131,225, 7,193,225, 2,211,109,200, /* 0x 350 */ -139, 72, 16,139, 69,208, 3, 66, 8,137, 77,232,131,101,200, 7, /* 0x 360 */ -137,194, 1,195,129,226,255, 15, 0, 0,137,199,141, 52, 17,139, /* 0x 370 */ - 77,212,137, 69,236, 41,215,139, 65, 4,137, 93,196, 41,208,131, /* 0x 380 */ -125,220, 0, 80,139, 69,228,116, 3,131,200,255,131,125,220, 1, /* 0x 390 */ - 80, 25,192,131,224,224,131,192, 50,131,125,220, 0, 80,139, 69, /* 0x 3a0 */ -200,116, 3,131,200, 2,131,125,220, 0, 80,137,240,116, 3,141, /* 0x 3b0 */ - 70, 3, 80, 87,232,100,253,255,255,131,196, 24, 57,199, 15,133, /* 0x 3c0 */ -187, 0, 0, 0,131,125,220, 0,116, 31, 49,192,246, 69,200, 4, /* 0x 3d0 */ -116, 6,139, 69,228,131,192, 2, 80,139, 69,220,255,117,228,141, /* 0x 3e0 */ - 85,232,232,114,253,255,255, 88, 90,137,243,247,219,129,227,255, /* 0x 3f0 */ - 15, 0, 0,246, 69,200, 2,137, 93,192,116, 15,133,219,141, 4, /* 0x 400 */ - 55,116, 8,137,217,198, 0, 0, 64,226,250,131,125,220, 0,116, /* 0x 410 */ -120,139, 69,212,131, 56, 1,117, 86,246, 64, 24, 1,116, 80,139, /* 0x 420 */ - 80, 20,139, 88, 8,141, 12, 26, 3, 77,208, 59, 80, 16,117, 14, /* 0x 430 */ -137,200,247,216, 37,255, 15, 0, 0,131,248, 3,119, 17,139, 85, /* 0x 440 */ -212,107, 69,208, 52,131,122, 4, 0,141, 76, 3, 12,117, 15,139, /* 0x 450 */ - 1, 61,205,128, 97,195,116, 6,199, 1,205,128, 97,195,133,201, /* 0x 460 */ -116, 13,139, 69,216, 49,210,131,224,254,232,201,253,255,255,137, /* 0x 470 */ -251,137,241,139, 85,200,106,125, 88,205,128,133,192,116, 10,106, /* 0x 480 */ -127, 91,106, 1, 88,205,128,235,254,139, 85,192,141, 4, 22,141, /* 0x 490 */ - 28, 7, 59, 93,196,115, 30,106, 0,106,255,106, 50,255,117,200, /* 0x 4a0 */ - 41, 93,196,255,117,196, 83,232,113,252,255,255,131,196, 24, 57, /* 0x 4b0 */ -195,116, 27,235,202,131,125,220, 0,116, 19,141, 78, 3,129,225, /* 0x 4c0 */ -255, 15, 0, 0,131,249, 3,119, 5,106, 91, 88,205,128,139, 77, /* 0x 4d0 */ -224,255, 69,204, 15,183, 65, 44,131, 69,212, 32, 57, 69,204, 15, /* 0x 4e0 */ -140, 38,254,255,255,131,125,220, 0,117, 14,139, 93,228,106, 6, /* 0x 4f0 */ - 88,205,128,133,192,116, 20,235,134,139, 69,224,102,131,120, 16, /* 0x 500 */ - 3,116, 8,139, 93,240,106, 45, 88,205,128,131,125, 16, 0,116, /* 0x 510 */ - 8,139, 77,208,139, 85, 16,137, 10,139, 93,224,139, 91, 24, 1, /* 0x 520 */ - 93,208,139, 69,208,141,101,244, 91, 94, 95,201,195, 85,137,229, /* 0x 530 */ - 87, 86, 83,131,236, 24,139,125, 28,106, 0,139, 69, 16,141, 87, /* 0x 540 */ - 52,139,117, 8, 80,139, 93, 32,137, 69,236,137, 85,232,141, 69, /* 0x 550 */ - 32,141, 85, 24,232, 0,252,255,255,139, 69, 12, 15,183, 79, 44, /* 0x 560 */ -186, 5, 0, 0, 0,137, 69, 32,137,240, 41, 93, 36,232,198,252, /* 0x 570 */ -255,255, 15,183, 79, 42,186, 4, 0, 0, 0,137,240,232,182,252, /* 0x 580 */ -255,255,139, 93,232,139, 77, 40,186, 3, 0, 0, 0, 3, 75, 8, /* 0x 590 */ -137,240,131,193, 52,232,158,252,255,255,141, 69,240,137,250, 80, /* 0x 5a0 */ -141, 69, 32, 86, 80,139, 69,236,232,177,252,255,255,186, 9, 0, /* 0x 5b0 */ - 0, 0,137,193,137,195,137,240,232,123,252,255,255,102,139, 79, /* 0x 5c0 */ - 44,131,196, 20, 49,210,102,133,201,116, 94,139, 69,232,131, 56, /* 0x 5d0 */ - 3,117, 74,139, 93,240, 49,201, 3, 88, 8,137,202,106, 5, 88, /* 0x 5e0 */ -205,128,133,192,137,198,120, 21,186, 0, 2, 0, 0,137,195,137, /* 0x 5f0 */ -249,106, 3, 88,205,128, 61, 0, 2, 0, 0,116, 10,106,127, 91, /* 0x 600 */ -106, 1, 88,205,128,235,254,106, 0,137,250,106, 0,137,240,106, /* 0x 610 */ - 0,232, 72,252,255,255,131,196, 12,137,195,235, 12, 66, 15,183, /* 0x 620 */ -193,131, 69,232, 32, 57,194,124,162,141,101,244,137,216, 91, 94, /* 0x 630 */ - 95,201,195 /* 0x 640 */ +231,232, 99, 0, 0, 0,129,236, 0, 10, 0, 0, 83,139, 83, 72, /* 0x a0 */ +141,148, 26,255, 31, 0, 0,129,226, 0,240,255,255, 82, 41,192, /* 0x b0 */ +102,131,123, 16, 3,117, 1,146, 80,139,115, 24,141,131,140, 0, /* 0x c0 */ + 0, 0, 41,198,139, 24,139, 72, 4,131,193, 12,141, 84, 36, 12, /* 0x d0 */ + 96, 71,232, 90, 4, 0, 0,131,196, 36, 89, 91,129,196, 0, 10, /* 0x e0 */ + 0, 0, 80, 79, 41,192, 60,175,175,117,252, 80, 80, 80, 80, 80, /* 0x f0 */ + 80, 80, 80, 41,217,176, 91,255, 39,173,171,133,192,117,250,173, /* 0x 100 */ +171,133,192,117,250, 87,173,171,131,248, 32,115, 3, 15,179,194, /* 0x 110 */ +133,192,173,171,117,240,131,239, 8, 1,201, 64,243,171, 72,171, /* 0x 120 */ +171, 95,195, 83,141, 92, 36, 8,106, 90, 88,205,128, 91,195, 0, /* 0x 130 */ + 87, 86,137,206, 83,137,195, 57, 8,139,120, 4,115, 10,106,127, /* 0x 140 */ + 91,106, 1, 88,205,128,235,254,133,201,116, 8,138, 7, 71,136, /* 0x 150 */ + 2, 66,226,248, 1,115, 4, 41, 51, 91, 94, 95,195, 85,137,229, /* 0x 160 */ + 87, 86,137,198, 83,137,211,131,236, 24,139, 69, 8,139,125, 12, /* 0x 170 */ +137, 69,220,131, 58, 0, 15,132,184, 0, 0, 0,141, 85,228,185, /* 0x 180 */ + 12, 0, 0, 0,137,240,232,165,255,255,255,139, 69,228,139, 77, /* 0x 190 */ +232,133,192,117, 19,129,249, 85, 80, 88, 33,117, 15,131, 62, 0, /* 0x 1a0 */ + 15,132,142, 0, 0, 0,235, 4,133,201,117, 10,106,127, 91,106, /* 0x 1b0 */ + 1, 88,205,128,235,254, 57,193,119,242, 59, 3,119,238, 57,193, /* 0x 1c0 */ +115, 85, 15,182, 69,236, 80,141, 69,224, 80,255,115, 4, 81,255, /* 0x 1d0 */ +118, 4,255, 85,220,131,196, 20,133,192,117,208,139, 85,224, 59, /* 0x 1e0 */ + 85,228,117,200,138, 69,237,132,192,116, 34,133,255,116, 30,129, /* 0x 1f0 */ +250, 0, 2, 0, 0,119, 4, 57, 19,117, 18, 15,182,192, 80, 15, /* 0x 200 */ +182, 69,238, 80, 82,255,115, 4,255,215,131,196, 16,139, 69,232, /* 0x 210 */ + 1, 70, 4, 41, 6,235, 10,139, 83, 4,137,240,232, 15,255,255, /* 0x 220 */ +255,139, 85,228,139, 3, 1, 83, 4, 41,208,133,192,137, 3,233, /* 0x 230 */ + 66,255,255,255,141,101,244, 91, 94, 95,201,195,133,192, 83,137, /* 0x 240 */ +211,116, 29,168, 1,117, 25,139, 16, 57,218,116, 7, 74,117, 11, /* 0x 250 */ +133,219,116, 7,137, 24,137, 72, 4,235, 5,131,192, 8,235,231, /* 0x 260 */ + 91,195, 85,137,229, 87, 86, 83,131,236, 64,137, 85,224,139, 77, /* 0x 270 */ +224,137, 69,228,139, 85, 12, 3, 73, 28,139, 69, 8,137, 85,216, /* 0x 280 */ +139, 93,224,139, 85,224,137, 69,220, 49,192,102,131,123, 16, 2, /* 0x 290 */ +137, 77,212,137,203, 15,183, 74, 44, 15,148,192,131,207,255,193, /* 0x 2a0 */ +224, 4,137,202, 49,246,131,192, 34, 74,120, 28,131, 59, 1,117, /* 0x 2b0 */ + 18,139, 83, 8, 57,250,115, 2,137,215, 3, 83, 20, 57,214,115, /* 0x 2c0 */ + 2,137,214,131,195, 32,226,228,137,251,106, 0,129,227, 0,240, /* 0x 2d0 */ +255,255,106,255, 41,222, 80,129,198,255, 15, 0, 0,106, 0,129, /* 0x 2e0 */ +230, 0,240,255,255, 86, 83,232, 55,254,255,255,139, 77,224,141, /* 0x 2f0 */ + 52, 48,131,196, 24, 41,216,102,131,121, 44, 0,137,117,240,137, /* 0x 300 */ + 69,208,199, 69,204, 0, 0, 0, 0, 15,132,218, 1, 0, 0,139, /* 0x 310 */ + 93,212,139, 3,131,248, 6,117, 24,139, 77,208,186, 3, 0, 0, /* 0x 320 */ + 0, 3, 75, 8,139, 69,216,232, 16,255,255,255,233,161, 1, 0, /* 0x 330 */ + 0, 72, 15,133,154, 1, 0, 0,139, 69,212,199, 69,200, 64, 98, /* 0x 340 */ + 81,115,139, 85,212,139, 72, 24,139, 90, 20,131,225, 7,193,225, /* 0x 350 */ + 2,211,109,200,139, 72, 16,139, 69,208, 3, 66, 8,137, 77,232, /* 0x 360 */ +131,101,200, 7,137,194, 1,195,129,226,255, 15, 0, 0,137,199, /* 0x 370 */ +141, 52, 17,139, 77,212,137, 69,236, 41,215,139, 65, 4,137, 93, /* 0x 380 */ +196, 41,208,131,125,220, 0, 80,139, 69,228,116, 3,131,200,255, /* 0x 390 */ +131,125,220, 1, 80, 25,192,131,224,224,131,192, 50,131,125,220, /* 0x 3a0 */ + 0, 80,139, 69,200,116, 3,131,200, 2,131,125,220, 0, 80,137, /* 0x 3b0 */ +240,116, 3,141, 70, 3, 80, 87,232,102,253,255,255,131,196, 24, /* 0x 3c0 */ + 57,199, 15,133,187, 0, 0, 0,131,125,220, 0,116, 31, 49,192, /* 0x 3d0 */ +246, 69,200, 4,116, 6,139, 69,228,131,192, 2, 80,139, 69,220, /* 0x 3e0 */ +255,117,228,141, 85,232,232,114,253,255,255, 88, 90,137,243,247, /* 0x 3f0 */ +219,129,227,255, 15, 0, 0,246, 69,200, 2,137, 93,192,116, 15, /* 0x 400 */ +133,219,141, 4, 55,116, 8,137,217,198, 0, 0, 64,226,250,131, /* 0x 410 */ +125,220, 0,116,120,139, 69,212,131, 56, 1,117, 86,246, 64, 24, /* 0x 420 */ + 1,116, 80,139, 80, 20,139, 88, 8,141, 12, 26, 3, 77,208, 59, /* 0x 430 */ + 80, 16,117, 14,137,200,247,216, 37,255, 15, 0, 0,131,248, 3, /* 0x 440 */ +119, 17,139, 85,212,107, 69,208, 52,131,122, 4, 0,141, 76, 3, /* 0x 450 */ + 12,117, 15,139, 1, 61,205,128, 97,195,116, 6,199, 1,205,128, /* 0x 460 */ + 97,195,133,201,116, 13,139, 69,216, 49,210,131,224,254,232,201, /* 0x 470 */ +253,255,255,137,251,137,241,139, 85,200,106,125, 88,205,128,133, /* 0x 480 */ +192,116, 10,106,127, 91,106, 1, 88,205,128,235,254,139, 85,192, /* 0x 490 */ +141, 4, 22,141, 28, 7, 59, 93,196,115, 30,106, 0,106,255,106, /* 0x 4a0 */ + 50,255,117,200, 41, 93,196,255,117,196, 83,232,115,252,255,255, /* 0x 4b0 */ +131,196, 24, 57,195,116, 27,235,202,131,125,220, 0,116, 19,141, /* 0x 4c0 */ + 78, 3,129,225,255, 15, 0, 0,131,249, 3,119, 5,106, 91, 88, /* 0x 4d0 */ +205,128,139, 77,224,255, 69,204, 15,183, 65, 44,131, 69,212, 32, /* 0x 4e0 */ + 57, 69,204, 15,140, 38,254,255,255,131,125,220, 0,117, 14,139, /* 0x 4f0 */ + 93,228,106, 6, 88,205,128,133,192,116, 20,235,134,139, 69,224, /* 0x 500 */ +102,131,120, 16, 3,116, 8,139, 93,240,106, 45, 88,205,128,131, /* 0x 510 */ +125, 16, 0,116, 8,139, 77,208,139, 85, 16,137, 10,139, 93,224, /* 0x 520 */ +139, 91, 24, 1, 93,208,139, 69,208,141,101,244, 91, 94, 95,201, /* 0x 530 */ +195, 85,137,229, 87, 86, 83,131,236, 24,139,125, 28,106, 0,139, /* 0x 540 */ + 69, 16,141, 87, 52,139,117, 8, 80,139, 93, 32,137, 69,236,137, /* 0x 550 */ + 85,232,141, 69, 32,141, 85, 24,232, 0,252,255,255,139, 69, 12, /* 0x 560 */ + 15,183, 79, 44,186, 5, 0, 0, 0,137, 69, 32,137,240, 41, 93, /* 0x 570 */ + 36,232,198,252,255,255, 15,183, 79, 42,186, 4, 0, 0, 0,137, /* 0x 580 */ +240,232,182,252,255,255,139, 93,232,139, 77, 40,186, 3, 0, 0, /* 0x 590 */ + 0, 3, 75, 8,137,240,131,193, 52,232,158,252,255,255,141, 69, /* 0x 5a0 */ +240,137,250, 80,141, 69, 32, 86, 80,139, 69,236,232,177,252,255, /* 0x 5b0 */ +255,186, 9, 0, 0, 0,137,193,137,195,137,240,232,123,252,255, /* 0x 5c0 */ +255,102,139, 79, 44,131,196, 20, 49,210,102,133,201,116, 94,139, /* 0x 5d0 */ + 69,232,131, 56, 3,117, 74,139, 93,240, 49,201, 3, 88, 8,137, /* 0x 5e0 */ +202,106, 5, 88,205,128,133,192,137,198,120, 21,186, 0, 2, 0, /* 0x 5f0 */ + 0,137,195,137,249,106, 3, 88,205,128, 61, 0, 2, 0, 0,116, /* 0x 600 */ + 10,106,127, 91,106, 1, 88,205,128,235,254,106, 0,137,250,106, /* 0x 610 */ + 0,137,240,106, 0,232, 72,252,255,255,131,196, 12,137,195,235, /* 0x 620 */ + 12, 66, 15,183,193,131, 69,232, 32, 57,194,124,162,141,101,244, /* 0x 630 */ +137,216, 91, 94, 95,201,195 /* 0x 640 */ }; diff --git a/src/stub/fold_elfppc32.h b/src/stub/fold_elfppc32.h index 3d89804d..09ee9ac8 100644 --- a/src/stub/fold_elfppc32.h +++ b/src/stub/fold_elfppc32.h @@ -28,8 +28,8 @@ #define LINUX_ELFPPC32_FOLD_SIZE 2260 -#define LINUX_ELFPPC32_FOLD_ADLER32 0x6c8685d0 -#define LINUX_ELFPPC32_FOLD_CRC32 0xa1bffc23 +#define LINUX_ELFPPC32_FOLD_ADLER32 0x6ad085ca +#define LINUX_ELFPPC32_FOLD_CRC32 0xfc853ec4 unsigned char linux_elfppc32_fold[2260] = { 127, 69, 76, 70, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 0 */ @@ -168,7 +168,7 @@ unsigned char linux_elfppc32_fold[2260] = { 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 29, /* 0x 850 */ 0, 0, 0, 1, 0, 0, 0, 2, 0, 16, 7,132, 0, 0, 7,132, /* 0x 860 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, /* 0x 870 */ - 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 7, 0, 0, 0, 0, /* 0x 880 */ + 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 1, 0, 0, 0, 0, /* 0x 880 */ 0, 0, 0, 0, 0, 0, 7,132, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 890 */ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, /* 0x 8a0 */ 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7,132, /* 0x 8b0 */ diff --git a/src/stub/fold_exec86.asm b/src/stub/fold_exec86.asm index 2650f6c1..baa278bc 100644 --- a/src/stub/fold_exec86.asm +++ b/src/stub/fold_exec86.asm @@ -44,8 +44,6 @@ %define szp_info 12 fold_begin: ; enter: %ebx= &Elf32_Ehdr of this program - pop eax ; discard &dstlen - pop eax ; discard dstlen pop eax ; Pop the argument count mov ecx, esp ; argv starts just at the current stack top diff --git a/src/stub/fold_exec86.h b/src/stub/fold_exec86.h index a61c12b2..d5ed33bd 100644 --- a/src/stub/fold_exec86.h +++ b/src/stub/fold_exec86.h @@ -28,19 +28,19 @@ #define LINUX_I386EXEC_FOLD_SIZE 899 -#define LINUX_I386EXEC_FOLD_ADLER32 0xcf9c7496 -#define LINUX_I386EXEC_FOLD_CRC32 0xab6154cb +#define LINUX_I386EXEC_FOLD_ADLER32 0x1a1874e1 +#define LINUX_I386EXEC_FOLD_CRC32 0x6ce5306c unsigned char linux_i386exec_fold[899] = { 127, 69, 76, 70, 1, 1, 1, 0, 76,105,110,117,120, 0, 0, 0, /* 0x 0 */ 2, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, /* 0x 10 */ 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 32, 0, 1, 0, 0, 0, /* 0x 20 */ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 16, 64, 0, /* 0x 30 */ - 0, 16, 64, 0,131, 3, 0, 0,132, 3, 0, 0, 7, 0, 0, 0, /* 0x 40 */ + 0, 16, 64, 0,131, 3, 0, 0,132, 3, 0, 0, 5, 0, 0, 0, /* 0x 40 */ 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 50 */ - 88, 88, 88,137,225,141, 84,132, 4,139,123, 24,141,115, 96, 41, /* 0x 60 */ -247,141, 93, 2, 96,232,197, 0, 0, 0,244, 83,141, 92, 36, 8, /* 0x 70 */ -106, 90, 88,205,128, 91,195, 0, 83,137,195,139, 76, 36, 8,136, /* 0x 80 */ + 88,137,225,141, 84,132, 4,139,123, 24,141,115, 96, 41,247,141, /* 0x 60 */ + 93, 2, 96,232,199, 0, 0, 0,244, 83,141, 92, 36, 8,106, 90, /* 0x 70 */ + 88,205,128, 91,195, 0, 0, 0, 83,137,195,139, 76, 36, 8,136, /* 0x 80 */ 208,131,224, 31, 60, 25,118, 3,131,232, 43,131,192, 65, 75,136, /* 0x 90 */ 3,137,208,193,232, 5,137,194,226,229, 91,195, 85, 49,201,137, /* 0x a0 */ 229, 87, 86,137,202, 83,131,236, 44,139, 93, 8,106, 5, 88,205, /* 0x b0 */ @@ -64,11 +64,11 @@ unsigned char linux_i386exec_fold[899] = { 133,192, 15,133, 2, 1, 0, 0,185,194, 0, 0, 0,186,192, 1, /* 0x 1d0 */ 0, 0,141, 93,196,106, 5, 88,205,128,139, 85,232,137, 69,148, /* 0x 1e0 */ 137,195,137,209,106, 93, 88,205,128,133,192, 15,133,209, 0, 0, /* 0x 1f0 */ - 0,106, 0,255,117,148,106, 1,106, 3, 82,106, 0,232,105,254, /* 0x 200 */ + 0,106, 0,255,117,148,106, 1,106, 3, 82,106, 0,232,103,254, /* 0x 200 */ 255,255,131,196, 24, 61, 0,240,255,255,137, 69,136, 15,135,175, /* 0x 210 */ - 0, 0, 0,139, 69,232,106, 0,106, 0, 5,255, 15, 0, 0,106, /* 0x 220 */ + 0, 0, 0,139, 69,232,106, 0,106,255, 5,255, 15, 0, 0,106, /* 0x 220 */ 50, 37, 0,240,255,255,106, 3, 3, 69,136,104, 0, 16, 0, 0, /* 0x 230 */ - 80,232, 53,254,255,255,131,196, 24,141,125,180,139,117, 12,165, /* 0x 240 */ + 80,232, 51,254,255,255,131,196, 24,141,125,180,139,117, 12,165, /* 0x 240 */ 165,165,139, 77,180,131,109, 8, 12,133,201,137,117, 12,139, 85, /* 0x 250 */ 184,117, 16,129,250, 85, 80, 88, 33,117,103,131,125,232, 0,116, /* 0x 260 */ 115,235, 95, 57,202,119, 91, 59, 85,236,119, 86, 57,202,115, 36, /* 0x 270 */ diff --git a/src/stub/fold_machppc32.h b/src/stub/fold_machppc32.h index 8f71b789..92775288 100644 --- a/src/stub/fold_machppc32.h +++ b/src/stub/fold_machppc32.h @@ -28,8 +28,8 @@ #define FOLD_MACHPPC32_SIZE 1648 -#define FOLD_MACHPPC32_ADLER32 0x16162538 -#define FOLD_MACHPPC32_CRC32 0x67f187d4 +#define FOLD_MACHPPC32_ADLER32 0x2f962578 +#define FOLD_MACHPPC32_CRC32 0x1fbfe1c3 unsigned char fold_machppc32[1648] = { 72, 0, 0,105, 40, 6, 0,208, 76,130, 0, 32, 84,132,240,191, /* 0x 0 */ @@ -109,9 +109,9 @@ unsigned char fold_machppc32[1648] = { 58,254, 0, 16,128, 26, 0, 16, 59, 24, 0, 1,127,152, 0, 64, /* 0x 4a0 */ 128, 30, 0, 4,127,222, 2, 20, 75,255,254,136,128, 1, 0, 84, /* 0x 4b0 */ 126,227,187,120,129,129, 0, 20,186, 65, 0, 24,124, 8, 3,166, /* 0x 4c0 */ - 56, 33, 0, 80,125,128,129, 32, 78,128, 0, 32,148, 33,255,192, /* 0x 4d0 */ -124, 8, 2,166,144,129, 0, 8,191, 97, 0, 44,129, 97, 0, 8, /* 0x 4e0 */ -124,191, 43,120,144, 1, 0, 68, 56, 3, 0, 24, 57,107,255,232, /* 0x 4f0 */ + 56, 33, 0, 80,125,128,129, 32, 78,128, 0, 32,148, 33,255,176, /* 0x 4d0 */ +124, 8, 2,166,144,129, 0, 8,191, 97, 0, 60,129, 97, 0, 8, /* 0x 4e0 */ +124,191, 43,120,144, 1, 0, 84, 56, 3, 0, 24, 57,107,255,232, /* 0x 4f0 */ 144, 1, 0, 20,145, 97, 0, 16,125, 27, 67,120,128, 3, 0, 24, /* 0x 500 */ 125, 60, 75,120,200, 1, 0, 16,124,253, 59,120,124,229, 59,120, /* 0x 510 */ 56, 97, 0, 16, 56,129, 0, 24,124,222, 51,120, 56,192, 0, 0, /* 0x 520 */ @@ -133,6 +133,6 @@ unsigned char fold_machppc32[1648] = { 127,100,219,120, 56,160, 0, 0,127,166,235,120, 56,224, 0, 0, /* 0x 620 */ 57, 0, 0, 0, 57, 32, 0, 0, 75,255,252,193,124,124, 27,120, /* 0x 630 */ 127,163,235,120, 75,255,250,221, 72, 0, 0, 16,128, 9, 0, 4, /* 0x 640 */ -125, 41, 2, 20, 65,152,255, 40,128, 1, 0, 68,127,131,227,120, /* 0x 650 */ -187, 97, 0, 44, 56, 33, 0, 64,124, 8, 3,166, 78,128, 0, 32 /* 0x 660 */ +125, 41, 2, 20, 65,152,255, 40,128, 1, 0, 84,127,131,227,120, /* 0x 650 */ +187, 97, 0, 60, 56, 33, 0, 80,124, 8, 3,166, 78,128, 0, 32 /* 0x 660 */ }; diff --git a/src/stub/fold_sh86.asm b/src/stub/fold_sh86.asm index 4dba2a9f..d4087ce1 100644 --- a/src/stub/fold_sh86.asm +++ b/src/stub/fold_sh86.asm @@ -38,7 +38,6 @@ %define szElf32_Ehdr 0x34 %define szElf32_Phdr 8*4 %define e_entry (16 + 2*2 + 4) -%define p_memsz 5*4 %define szl_info 12 %define szp_info 12 %define a_type 0 @@ -60,8 +59,9 @@ fold_begin: ; enter: %ebx= uncDst %define AT_NULL 0 %define AT_IGNORE 1 %define AT_PHDR 3 -%define AT_NUMBER (5+ 23) +%define AT_NUMBER (5+ 37) ; 2002-11-09 glibc-2.2.90 AT_IGNOREPPC==22 plus 5 for future growth +; 2006-05-15 glibc-2.4-4 AT_L3_CACHESHAPE==37 mov esi, esp sub esp, sz_auxv * AT_NUMBER ; more than 128 bytes @@ -98,6 +98,8 @@ L30: ; distribute existing Elf32_auxv into new table xchg eax,ecx ; edx is busy, do not use lodsd je L40 + cmp ecx, byte AT_NUMBER + jae L30 mov [a_type + sz_auxv*(ecx -1) + edi], ecx mov [a_val + sz_auxv*(ecx -1) + edi], eax jmp L30 diff --git a/src/stub/fold_sh86.h b/src/stub/fold_sh86.h index 1a9701ab..ce8a93a9 100644 --- a/src/stub/fold_sh86.h +++ b/src/stub/fold_sh86.h @@ -1,4 +1,4 @@ -/* fold_sh86.h -- created from fold_sh86.bin, 1193 (0x4a9) bytes +/* fold_sh86.h -- created from fold_sh86.bin, 1201 (0x4b1) bytes This file is part of the UPX executable compressor. @@ -27,84 +27,85 @@ */ -#define LINUX_I386SH_FOLD_SIZE 1193 -#define LINUX_I386SH_FOLD_ADLER32 0xef79f39d -#define LINUX_I386SH_FOLD_CRC32 0xde5583f6 +#define LINUX_I386SH_FOLD_SIZE 1201 +#define LINUX_I386SH_FOLD_ADLER32 0x5788f83f +#define LINUX_I386SH_FOLD_CRC32 0xf1ddde7a -unsigned char linux_i386sh_fold[1193] = { +unsigned char linux_i386sh_fold[1201] = { 127, 69, 76, 70, 1, 1, 1, 0, 76,105,110,117,120, 0, 0, 0, /* 0x 0 */ 2, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, /* 0x 10 */ 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 32, 0, 1, 0, 0, 0, /* 0x 20 */ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 1, /* 0x 30 */ - 0, 0, 64, 1,169, 4, 0, 0,172, 4, 0, 0, 7, 0, 0, 0, /* 0x 40 */ + 0, 0, 64, 1,177, 4, 0, 0,180, 4, 0, 0, 7, 0, 0, 0, /* 0x 40 */ 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 50 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 60 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 70 */ - 88, 88,137,230,129,236,224, 0, 0, 0,137,231,173,171,133,192, /* 0x 80 */ -117,250,173,171,133,192,117,250, 87, 64,106, 54, 89,243,171, 72, /* 0x 90 */ -171,171, 95,173,133,192,145,173,116, 10,137, 76,207,248,137, 68, /* 0x a0 */ -207,252,235,239,129,236, 0, 10, 0, 0,147,141, 82, 24,139, 10, /* 0x b0 */ -139, 90, 4,137,198, 96,232,123, 2, 0, 0, 89, 80, 97,129,196, /* 0x c0 */ - 0, 10, 0, 0, 89, 90, 82, 65, 86,131,238, 3,102,199, 6, 45, /* 0x d0 */ - 99, 65, 86, 65, 82, 81, 87,141,188, 36, 0,245,255,255, 96,137, /* 0x e0 */ -227,137,252,185,192, 2, 0, 0, 49,192,243,171,137,220, 97,195, /* 0x f0 */ - 83,141, 92, 36, 8,106, 90, 88,205,128, 91,195, 87, 86, 83,137, /* 0x 100 */ -195,139,124, 36, 16, 57, 56,139,112, 4,115, 10,106,127, 91,106, /* 0x 110 */ - 1, 88,205,128,235,254,133,255,116, 10,137,249,138, 6, 70,136, /* 0x 120 */ - 2, 66,226,248, 1,123, 4, 41, 59, 91, 94, 95,195,133,210,137, /* 0x 130 */ -209,116, 6,198, 0, 0, 64,226,250,195, 85, 49,201,137,229, 87, /* 0x 140 */ - 86, 83,137,195,131,236, 52,137, 85,240,139, 69, 8,137,202,137, /* 0x 150 */ - 69,236,106, 5, 88,205,128,133,192,137, 69,232,121, 10,106,127, /* 0x 160 */ - 91,106, 1, 88,205,128,235,254,186, 0, 2, 0, 0,139, 93,232, /* 0x 170 */ -139, 77,240,106, 3, 88,205,128, 61, 0, 2, 0, 0,117,223,139, /* 0x 180 */ - 69,240,139, 85,240, 3, 64, 28, 15,183, 90, 44,137, 69,228, 49, /* 0x 190 */ -192,102,131,122, 16, 3,139, 77,228, 15,149,192,131,207,255,193, /* 0x 1a0 */ -224, 4,131,192, 34, 49,210,137, 69,212,137,216, 72,120, 33,137, /* 0x 1b0 */ -222,131, 57, 1,117, 20,139, 65, 8, 57,248,115, 2,137,199,139, /* 0x 1c0 */ - 89, 20, 1,195, 57,218,115, 2,137,218,131,193, 32, 78,117,225, /* 0x 1d0 */ -246, 69,212, 16,116, 7,137,211,106, 45, 88,205,128,137,251,106, /* 0x 1e0 */ - 0,129,227, 0,240,255,255,106, 0, 41,218,255,117,212,141,130, /* 0x 1f0 */ -255, 15, 0, 0,106, 7, 37, 0,240,255,255, 80, 83,232,238,254, /* 0x 200 */ -255,255,131,196, 24, 41,216,199, 69,220, 0, 0, 0, 0,137, 69, /* 0x 210 */ -224,139, 69,240,102,131,120, 44, 0, 15,132,247, 0, 0, 0,139, /* 0x 220 */ - 85,228,139, 2,131,248, 6,117, 14,139, 66, 8,139, 77,236,137, /* 0x 230 */ - 65, 20,233,200, 0, 0, 0, 72, 15,133,193, 0, 0, 0,139, 93, /* 0x 240 */ -228,199, 69,216, 64, 98, 81,115,139, 75, 24,139, 67, 8,131,225, /* 0x 250 */ - 7,193,225, 2,137,194,211,109,216,139, 77,228, 3, 83, 20,137, /* 0x 260 */ -195,139,121, 16,129,227,255, 15, 0, 0,139, 77,224, 41,216, 1, /* 0x 270 */ -223,131,101,216, 7, 1,202,141, 52, 8,137, 85,204,139, 85,228, /* 0x 280 */ -139, 66, 4, 41,216, 80,255,117,232,106, 18,106, 3, 87, 86,232, /* 0x 290 */ - 92,254,255,255,131,196, 24, 57,198,117, 48,137,218,137,240,232, /* 0x 2a0 */ -137,254,255,255,137,249,247,217,141, 4, 62,129,225,255, 15, 0, /* 0x 2b0 */ - 0,137,243,137,202,137, 77,208,232,112,254,255,255,137,249,139, /* 0x 2c0 */ - 85,216,106,125, 88,205,128,133,192,116, 10,106,127, 91,106, 1, /* 0x 2d0 */ - 88,205,128,235,254,139, 85,208,141, 4, 23,141, 28, 6, 59, 93, /* 0x 2e0 */ -204,115, 28,106, 0,106, 0,106, 50,255,117,216, 41, 93,204,255, /* 0x 2f0 */ -117,204, 83,232,248,253,255,255,131,196, 24, 57,195,117,204,139, /* 0x 300 */ - 77,240,255, 69,220, 15,183, 65, 44,131, 69,228, 32, 57, 69,220, /* 0x 310 */ - 15,140, 9,255,255,255,139, 93,232,106, 6, 88,205,128,133,192, /* 0x 320 */ -117,169,139, 69,240,139, 64, 24, 1, 69,224,139, 69,224,141,101, /* 0x 330 */ -244, 91, 94, 95,201,195, 85,137,229, 87, 86, 83,131,236, 36,141, /* 0x 340 */ -117, 32,139, 69, 16,141, 93, 24,139, 85, 20,137, 69,212,139, 69, /* 0x 350 */ - 36,139,125, 8,137, 85,208, 5, 85, 80, 88, 50,137, 69,240,139, /* 0x 360 */ - 69,240, 5, 85, 80, 88, 51,131,125, 32, 0,137, 69,236, 15,132, /* 0x 370 */ -139, 0, 0, 0,141, 85,220,137,216,106, 12,232,124,253,255,255, /* 0x 380 */ - 88,139, 69,220,139, 77,224,133,192,117, 15,129,249, 85, 80, 88, /* 0x 390 */ - 33,117, 11,131, 59, 0,116,103,235, 4,133,201,117, 10,106,127, /* 0x 3a0 */ - 91,106, 1, 88,205,128,235,254, 57,193,119,242, 59, 6,119,238, /* 0x 3b0 */ - 57,193,115, 44, 15,182, 69,228, 80,141, 69,216, 80,255,118, 4, /* 0x 3c0 */ - 81,255,115, 4,255, 85,212,131,196, 20,133,192,117,208,139, 69, /* 0x 3d0 */ -220, 57, 69,216,117,200,139, 69,224, 1, 67, 4, 41, 3,235, 12, /* 0x 3e0 */ -139, 86, 4,137,216, 81,232, 17,253,255,255, 88,139, 85,220,139, /* 0x 3f0 */ - 6, 1, 86, 4, 41,208,133,192,137, 6,233,111,255,255,255,139, /* 0x 400 */ - 69,236,139, 85,208,138, 24,139, 69,236,198, 0, 0,139, 69,240, /* 0x 410 */ - 87,232, 36,253,255,255,139, 85,208,137,198,139, 69,236,136, 24, /* 0x 420 */ - 15,183, 66, 42,199, 71, 16, 3, 0, 0, 0,199, 71, 24, 4, 0, /* 0x 430 */ - 0, 0,199, 71, 32, 5, 0, 0, 0,137, 71, 28, 15,183, 66, 44, /* 0x 440 */ -199, 71, 44, 0, 16, 0, 0,137,119, 68,131,194, 52,199, 71, 40, /* 0x 450 */ - 6, 0, 0, 0,137, 71, 36,139, 69,208,199, 71, 64, 9, 0, 0, /* 0x 460 */ - 0,102,139, 88, 44, 89, 49,201,102,133,219,116, 34,131, 58, 3, /* 0x 470 */ -117, 18,139, 66, 8,106, 0,139, 85,208,232,187,252,255,255,137, /* 0x 480 */ -198, 88,235, 11, 65, 15,183,195,131,194, 32, 57,193,124,222,141, /* 0x 490 */ -101,244,137,240, 91, 94, 95,201,195 /* 0x 4a0 */ + 88, 88,137,230,129,236, 80, 1, 0, 0,137,231,173,171,133,192, /* 0x 80 */ +117,250,173,171,133,192,117,250, 87, 64,106, 82, 89,243,171, 72, /* 0x 90 */ +171,171, 95,173,133,192,145,173,116, 15,131,249, 42,115,244,137, /* 0x a0 */ + 76,207,248,137, 68,207,252,235,234,129,236, 0, 10, 0, 0,147, /* 0x b0 */ +141, 82, 24,139, 10,139, 90, 4,137,198, 96,232,126, 2, 0, 0, /* 0x c0 */ + 89, 80, 97,129,196, 0, 10, 0, 0, 89, 90, 82, 65, 86,131,238, /* 0x d0 */ + 3,102,199, 6, 45, 99, 65, 86, 65, 82, 81, 87,141,188, 36, 0, /* 0x e0 */ +245,255,255, 96,137,227,137,252,185,192, 2, 0, 0, 49,192,243, /* 0x f0 */ +171,137,220, 97,195, 83,141, 92, 36, 8,106, 90, 88,205,128, 91, /* 0x 100 */ +195, 0, 0, 0, 87, 86, 83,137,195,139,124, 36, 16, 57, 56,139, /* 0x 110 */ +112, 4,115, 10,106,127, 91,106, 1, 88,205,128,235,254,133,255, /* 0x 120 */ +116, 10,137,249,138, 6, 70,136, 2, 66,226,248, 1,123, 4, 41, /* 0x 130 */ + 59, 91, 94, 95,195,133,210,137,209,116, 6,198, 0, 0, 64,226, /* 0x 140 */ +250,195, 85, 49,201,137,229, 87, 86, 83,137,195,131,236, 52,137, /* 0x 150 */ + 85,240,139, 69, 8,137,202,137, 69,236,106, 5, 88,205,128,133, /* 0x 160 */ +192,137, 69,232,121, 10,106,127, 91,106, 1, 88,205,128,235,254, /* 0x 170 */ +186, 0, 2, 0, 0,139, 93,232,139, 77,240,106, 3, 88,205,128, /* 0x 180 */ + 61, 0, 2, 0, 0,117,223,139, 69,240,139, 85,240, 3, 64, 28, /* 0x 190 */ + 15,183, 90, 44,137, 69,228, 49,192,102,131,122, 16, 3,139, 77, /* 0x 1a0 */ +228, 15,149,192,131,207,255,193,224, 4,131,192, 34, 49,210,137, /* 0x 1b0 */ + 69,212,137,216, 72,120, 33,137,222,131, 57, 1,117, 20,139, 65, /* 0x 1c0 */ + 8, 57,248,115, 2,137,199,139, 89, 20, 1,195, 57,218,115, 2, /* 0x 1d0 */ +137,218,131,193, 32, 78,117,225,246, 69,212, 16,116, 7,137,211, /* 0x 1e0 */ +106, 45, 88,205,128,137,251,106, 0,129,227, 0,240,255,255,106, /* 0x 1f0 */ +255, 41,218,255,117,212,141,130,255, 15, 0, 0,106, 7, 37, 0, /* 0x 200 */ +240,255,255, 80, 83,232,235,254,255,255,131,196, 24, 41,216,199, /* 0x 210 */ + 69,220, 0, 0, 0, 0,137, 69,224,139, 69,240,102,131,120, 44, /* 0x 220 */ + 0, 15,132,247, 0, 0, 0,139, 85,228,139, 2,131,248, 6,117, /* 0x 230 */ + 14,139, 66, 8,139, 77,236,137, 65, 20,233,200, 0, 0, 0, 72, /* 0x 240 */ + 15,133,193, 0, 0, 0,139, 93,228,199, 69,216, 64, 98, 81,115, /* 0x 250 */ +139, 75, 24,139, 67, 8,131,225, 7,193,225, 2,137,194,211,109, /* 0x 260 */ +216,139, 77,228, 3, 83, 20,137,195,139,121, 16,129,227,255, 15, /* 0x 270 */ + 0, 0,139, 77,224, 41,216, 1,223,131,101,216, 7, 1,202,141, /* 0x 280 */ + 52, 8,137, 85,204,139, 85,228,139, 66, 4, 41,216, 80,255,117, /* 0x 290 */ +232,106, 18,106, 3, 87, 86,232, 89,254,255,255,131,196, 24, 57, /* 0x 2a0 */ +198,117, 48,137,218,137,240,232,137,254,255,255,137,249,247,217, /* 0x 2b0 */ +141, 4, 62,129,225,255, 15, 0, 0,137,243,137,202,137, 77,208, /* 0x 2c0 */ +232,112,254,255,255,137,249,139, 85,216,106,125, 88,205,128,133, /* 0x 2d0 */ +192,116, 10,106,127, 91,106, 1, 88,205,128,235,254,139, 85,208, /* 0x 2e0 */ +141, 4, 23,141, 28, 6, 59, 93,204,115, 28,106, 0,106,255,106, /* 0x 2f0 */ + 50,255,117,216, 41, 93,204,255,117,204, 83,232,245,253,255,255, /* 0x 300 */ +131,196, 24, 57,195,117,204,139, 77,240,255, 69,220, 15,183, 65, /* 0x 310 */ + 44,131, 69,228, 32, 57, 69,220, 15,140, 9,255,255,255,139, 93, /* 0x 320 */ +232,106, 6, 88,205,128,133,192,117,169,139, 69,240,139, 64, 24, /* 0x 330 */ + 1, 69,224,139, 69,224,141,101,244, 91, 94, 95,201,195, 85,137, /* 0x 340 */ +229, 87, 86, 83,131,236, 36,141,117, 32,139, 69, 16,141, 93, 24, /* 0x 350 */ +139, 85, 20,137, 69,212,139, 69, 36,139,125, 8,137, 85,208, 5, /* 0x 360 */ + 85, 80, 88, 50,137, 69,240,139, 69,240, 5, 85, 80, 88, 51,131, /* 0x 370 */ +125, 32, 0,137, 69,236, 15,132,139, 0, 0, 0,141, 85,220,137, /* 0x 380 */ +216,106, 12,232,124,253,255,255, 88,139, 69,220,139, 77,224,133, /* 0x 390 */ +192,117, 15,129,249, 85, 80, 88, 33,117, 11,131, 59, 0,116,103, /* 0x 3a0 */ +235, 4,133,201,117, 10,106,127, 91,106, 1, 88,205,128,235,254, /* 0x 3b0 */ + 57,193,119,242, 59, 6,119,238, 57,193,115, 44, 15,182, 69,228, /* 0x 3c0 */ + 80,141, 69,216, 80,255,118, 4, 81,255,115, 4,255, 85,212,131, /* 0x 3d0 */ +196, 20,133,192,117,208,139, 69,220, 57, 69,216,117,200,139, 69, /* 0x 3e0 */ +224, 1, 67, 4, 41, 3,235, 12,139, 86, 4,137,216, 81,232, 17, /* 0x 3f0 */ +253,255,255, 88,139, 85,220,139, 6, 1, 86, 4, 41,208,133,192, /* 0x 400 */ +137, 6,233,111,255,255,255,139, 69,236,139, 85,208,138, 24,139, /* 0x 410 */ + 69,236,198, 0, 0,139, 69,240, 87,232, 36,253,255,255,139, 85, /* 0x 420 */ +208,137,198,139, 69,236,136, 24, 15,183, 66, 42,199, 71, 16, 3, /* 0x 430 */ + 0, 0, 0,199, 71, 24, 4, 0, 0, 0,199, 71, 32, 5, 0, 0, /* 0x 440 */ + 0,137, 71, 28, 15,183, 66, 44,199, 71, 44, 0, 16, 0, 0,137, /* 0x 450 */ +119, 68,131,194, 52,199, 71, 40, 6, 0, 0, 0,137, 71, 36,139, /* 0x 460 */ + 69,208,199, 71, 64, 9, 0, 0, 0,102,139, 88, 44, 89, 49,201, /* 0x 470 */ +102,133,219,116, 34,131, 58, 3,117, 18,139, 66, 8,106, 0,139, /* 0x 480 */ + 85,208,232,187,252,255,255,137,198, 88,235, 11, 65, 15,183,195, /* 0x 490 */ +131,194, 32, 57,193,124,222,141,101,244,137,240, 91, 94, 95,201, /* 0x 4a0 */ +195 /* 0x 4b0 */ }; diff --git a/src/stub/l_lx_elf64amd.S b/src/stub/l_lx_elf64amd.S index e44106e9..79f8df6f 100644 --- a/src/stub/l_lx_elf64amd.S +++ b/src/stub/l_lx_elf64amd.S @@ -180,7 +180,7 @@ msg_SELinux: push $ L71 - L70; pop %arg3 # length call L71 L70: - .asciz "SELinux denied execmem.\n" + .asciz "PROT_EXEC|PROT_WRITE failed.\n" L71: pop %arg2 # message text push $2; pop %arg1 # fd stderr diff --git a/src/stub/l_lx_elf64amd.h b/src/stub/l_lx_elf64amd.h index b01a7395..c6c732c1 100644 --- a/src/stub/l_lx_elf64amd.h +++ b/src/stub/l_lx_elf64amd.h @@ -1,4 +1,4 @@ -/* l_lx_elf64amd.h -- created from l_lx_elf64amd.bin, 696 (0x2b8) bytes +/* l_lx_elf64amd.h -- created from l_lx_elf64amd.bin, 701 (0x2bd) bytes This file is part of the UPX executable compressor. @@ -27,12 +27,12 @@ */ -#define LINUX_ELF64AMD_LOADER_SIZE 696 -#define LINUX_ELF64AMD_LOADER_ADLER32 0x5f8e3dec -#define LINUX_ELF64AMD_LOADER_CRC32 0x2f447d28 +#define LINUX_ELF64AMD_LOADER_SIZE 701 +#define LINUX_ELF64AMD_LOADER_ADLER32 0xf7af3eba +#define LINUX_ELF64AMD_LOADER_CRC32 0x8ec9e668 -unsigned char linux_elf64amd_loader[696] = { -232,173, 2, 0, 0, 85, 83, 81, 82, 72, 1,254, 86, 72,137,254, /* 0x 0 */ +unsigned char linux_elf64amd_loader[701] = { +232,178, 2, 0, 0, 85, 83, 81, 82, 72, 1,254, 86, 72,137,254, /* 0x 0 */ 72,137,215, 49,219, 49,201, 72,131,205,255,232,129, 1, 0, 0, /* 0x 10 */ 1,219,116, 2,243,195,139, 30, 72,131,238,252, 17,219,138, 22, /* 0x 20 */ 243,195, 72,141, 4, 47,131,249, 5,138, 16,118, 33, 72,131,253, /* 0x 30 */ @@ -65,15 +65,15 @@ unsigned char linux_elf64amd_loader[696] = { 32,116,104,101, 32, 85, 80, 88, 32, 84,101, 97,109, 46, 32, 65, /* 0x 1e0 */ 108,108, 32, 82,105,103,104,116,115, 32, 82,101,115,101,114,118, /* 0x 1f0 */ 101,100, 46, 32,104,116,116,112, 58, 47, 47,117,112,120, 46,115, /* 0x 200 */ -102, 46,110,101,116, 32, 36, 10, 0,104, 25, 0, 0, 0, 90,232, /* 0x 210 */ - 25, 0, 0, 0, 83, 69, 76,105,110,117,120, 32,100,101,110,105, /* 0x 220 */ -101,100, 32,101,120,101, 99,109,101,109, 46, 10, 0, 94,106, 2, /* 0x 230 */ - 95,106, 1, 88, 15, 5,106,127, 95,106, 60, 88, 15, 5, 91,191, /* 0x 240 */ - 65, 68, 82, 77,106, 7, 90,190, 76, 69, 78, 77,106, 50, 65, 90, /* 0x 250 */ - 69, 41,192,106, 9, 88, 15, 5, 57,199,117,173,104, 74, 77, 80, /* 0x 260 */ - 85,104, 65, 68, 82, 85,190, 65, 68, 82, 67,104, 76, 69, 78, 85, /* 0x 270 */ -185, 67, 78, 84, 67,104, 65, 68, 82, 88,104, 76, 69, 78, 88,137, /* 0x 280 */ -250, 41,242, 1,213, 1,211,252,243, 72,165,151,137,222, 80,146, /* 0x 290 */ -173, 80, 72,137,225,173,151,173, 68, 15,182,192,135,254,255,213, /* 0x 2a0 */ - 89,195, 93,232,150,255,255,255 /* 0x 2b0 */ +102, 46,110,101,116, 32, 36, 10, 0,104, 30, 0, 0, 0, 90,232, /* 0x 210 */ + 30, 0, 0, 0, 80, 82, 79, 84, 95, 69, 88, 69, 67,124, 80, 82, /* 0x 220 */ + 79, 84, 95, 87, 82, 73, 84, 69, 32,102, 97,105,108,101,100, 46, /* 0x 230 */ + 10, 0, 94,106, 2, 95,106, 1, 88, 15, 5,106,127, 95,106, 60, /* 0x 240 */ + 88, 15, 5, 91,191, 65, 68, 82, 77,106, 7, 90,190, 76, 69, 78, /* 0x 250 */ + 77,106, 50, 65, 90, 69, 41,192,106, 9, 88, 15, 5, 57,199,117, /* 0x 260 */ +168,104, 74, 77, 80, 85,104, 65, 68, 82, 85,190, 65, 68, 82, 67, /* 0x 270 */ +104, 76, 69, 78, 85,185, 67, 78, 84, 67,104, 65, 68, 82, 88,104, /* 0x 280 */ + 76, 69, 78, 88,137,250, 41,242, 1,213, 1,211,252,243, 72,165, /* 0x 290 */ +151,137,222, 80,146,173, 80, 72,137,225,173,151,173, 68, 15,182, /* 0x 2a0 */ +192,135,254,255,213, 89,195, 93,232,150,255,255,255 /* 0x 2b0 */ }; diff --git a/src/stub/l_lx_elf86.asm b/src/stub/l_lx_elf86.asm index 136f0935..ae77429d 100644 --- a/src/stub/l_lx_elf86.asm +++ b/src/stub/l_lx_elf86.asm @@ -144,7 +144,7 @@ msg_SELinux: pop edx ; length call L71 L70: - db "SELinux denied execmem.",10 + db "PROT_EXEC|PROT_WRITE failed.",10 L71: pop ecx ; message text push byte 2 ; fd stderr @@ -165,7 +165,15 @@ unfold: lea eax, [ebp - (4+ decompress - _start)] ; 4: sizeof(int) sub eax, [eax] ; %eax= &Elf32_Ehdr of this program mov edx, eax ; %edx= &Elf32_Ehdr of this program - add eax, [p_memsz + szElf32_Ehdr + eax] ; page after .text + +; Linux requires PF_W in order to create .bss (implied by .p_filesz!=.p_memsz), +; but strict SELinux (or PaX, grSecurity) forbids PF_W with PF_X. +; So first PT_LOAD must be PF_R|PF_X only, and .p_memsz==.p_filesz. +; So we must round up here, instead of pre-rounding .p_memsz. + add eax, [p_memsz + szElf32_Ehdr + eax] ; address after .text + add eax, PAGE_SIZE -1 + and eax, -PAGE_SIZE + push eax ; destination for 'ret' ; mmap a page to hold the decompressed fold_elf86 diff --git a/src/stub/l_lx_elf86.h b/src/stub/l_lx_elf86.h index c2600165..34822e1d 100644 --- a/src/stub/l_lx_elf86.h +++ b/src/stub/l_lx_elf86.h @@ -1,4 +1,4 @@ -/* l_lx_elf86.h -- created from l_lx_elf86.bin, 5341 (0x14dd) bytes +/* l_lx_elf86.h -- created from l_lx_elf86.bin, 5353 (0x14e9) bytes This file is part of the UPX executable compressor. @@ -27,11 +27,11 @@ */ -#define LINUX_I386ELF_LOADER_SIZE 5341 -#define LINUX_I386ELF_LOADER_ADLER32 0x1c76cd81 -#define LINUX_I386ELF_LOADER_CRC32 0x1aa8519f +#define LINUX_I386ELF_LOADER_SIZE 5353 +#define LINUX_I386ELF_LOADER_ADLER32 0x73ead289 +#define LINUX_I386ELF_LOADER_CRC32 0x30e5b9ec -unsigned char linux_i386elf_loader[5341] = { +unsigned char linux_i386elf_loader[5353] = { 232, 0, 0, 0, 0, 96,106, 63,139,116, 36, 40,139,124, 36, 48, /* 0x 0 */ 131,205,255,235, 0,164,235, 0,138, 6, 70,136, 7, 71, 1,219, /* 0x 10 */ 117, 7,139, 30,131,238,252, 17,219,114, 0, 49,192, 64,138, 7, /* 0x 20 */ @@ -110,260 +110,261 @@ unsigned char linux_i386elf_loader[5341] = { 119, 6,128,127,254, 15,116, 0, 44,232, 60, 1,119, 0, 56, 23, /* 0x 4b0 */ 117, 0,139, 7,102,193,232, 8,193,192, 16,134,196, 41,248, 1, /* 0x 4c0 */ 240,137, 7,131,199, 4,131,233, 4,138, 7,131,199, 1,226, 0, /* 0x 4d0 */ -131,233, 1,127, 0, 97,195,106, 24, 90,232, 24, 0, 0, 0, 83, /* 0x 4e0 */ - 69, 76,105,110,117,120, 32,100,101,110,105,101,100, 32,101,120, /* 0x 4f0 */ -101, 99,109,101,109, 46, 10, 89,106, 2, 91,106, 4, 88,205,128, /* 0x 500 */ -179,127,106, 1, 88,205,128, 94,141, 69,247, 43, 0,137,194, 3, /* 0x 510 */ - 64, 72, 80, 49,201,106,255,106, 50,181, 16,106, 7, 81, 80,137, /* 0x 520 */ -227,106, 90, 88,205,128,133,192,120,173,146,147,252,173, 80, 84, /* 0x 530 */ - 82,173, 80,173, 86,255,213,131,196, 40,195, 93,232,198,255,255, /* 0x 540 */ -255, 0, 0, 0, 76, 69, 88, 69, 67, 48, 48, 48, 0, 0, 0, 0, /* 0x 550 */ - 0, 0, 0, 0, 0, 5, 0, 0, 0, 76, 69, 88, 69, 67, 48, 50, /* 0x 560 */ - 48, 0,100, 0, 0, 0, 76, 69, 88, 69, 67, 48, 48, 57, 0, 5, /* 0x 570 */ - 0, 0, 0, 76, 69, 88, 69, 67, 48, 49, 48, 0, 5, 0, 0, 0, /* 0x 580 */ - 78, 50, 66, 83, 77, 65, 49, 48, 0, 19, 0, 0, 0, 0, 0, 0, /* 0x 590 */ - 0, 21, 0, 0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 4, 0, /* 0x 5a0 */ - 0, 0, 78, 50, 66, 70, 65, 83, 49, 48, 0, 22, 0, 0, 0, 0, /* 0x 5b0 */ - 0, 0, 0, 24, 0, 0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, /* 0x 5c0 */ - 4, 0, 0, 0, 78, 50, 66, 70, 65, 83, 49, 49, 0, 24, 0, 0, /* 0x 5d0 */ - 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 30, 0, 0, 0, 78, 50, /* 0x 5e0 */ - 66, 83, 77, 65, 50, 48, 0, 41, 0, 0, 0, 0, 0, 0, 0, 43, /* 0x 5f0 */ - 0, 0, 0, 78, 50, 66, 83, 77, 65, 49, 48, 0, 2, 0, 0, 0, /* 0x 600 */ - 78, 50, 66, 70, 65, 83, 50, 48, 0, 46, 0, 0, 0, 0, 0, 0, /* 0x 610 */ - 0, 50, 0, 0, 0, 78, 50, 66, 70, 65, 83, 49, 49, 0, 0, 0, /* 0x 620 */ - 0, 0, 78, 50, 66, 68, 69, 67, 50, 48, 0, 55, 0, 0, 0, 78, /* 0x 630 */ - 50, 66, 83, 77, 65, 51, 48, 0, 68, 0, 0, 0, 0, 0, 0, 0, /* 0x 640 */ - 81, 0, 0, 0, 78, 50, 66, 68, 69, 67, 50, 48, 0, 0, 0, 0, /* 0x 650 */ - 0, 78, 50, 66, 70, 65, 83, 51, 48, 0, 81, 0, 0, 0, 0, 0, /* 0x 660 */ - 0, 0, 85, 0, 0, 0, 78, 50, 66, 68, 69, 67, 50, 48, 0, 0, /* 0x 670 */ - 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 78, 50, 66, 68, 69, /* 0x 680 */ - 67, 50, 48, 0, 0, 0, 0, 0, 78, 50, 66, 68, 69, 67, 51, 48, /* 0x 690 */ - 0, 96, 0, 0, 0, 0, 0, 0, 0,114, 0, 0, 0, 78, 50, 66, /* 0x 6a0 */ - 68, 69, 67, 54, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 0, /* 0x 6b0 */ - 0, 0, 78, 50, 66, 68, 69, 67, 53, 48, 0, 0, 0, 0, 0, 78, /* 0x 6c0 */ - 50, 66, 83, 77, 65, 52, 48, 0,158, 0, 0, 0, 0, 0, 0, 0, /* 0x 6d0 */ -171, 0, 0, 0, 78, 50, 66, 68, 69, 67, 51, 48, 0, 49, 0, 0, /* 0x 6e0 */ - 0, 78, 50, 66, 70, 65, 83, 52, 48, 0,171, 0, 0, 0, 0, 0, /* 0x 6f0 */ - 0, 0,175, 0, 0, 0, 78, 50, 66, 68, 69, 67, 51, 48, 0, 49, /* 0x 700 */ - 0, 0, 0, 0, 0, 0, 0,186, 0, 0, 0, 78, 50, 66, 68, 69, /* 0x 710 */ - 67, 51, 48, 0, 49, 0, 0, 0, 78, 50, 66, 68, 85, 77, 77, 49, /* 0x 720 */ - 0,186, 0, 0, 0, 78, 50, 66, 83, 77, 65, 53, 48, 0,186, 0, /* 0x 730 */ - 0, 0, 78, 50, 66, 70, 65, 83, 53, 48, 0,188, 0, 0, 0, 78, /* 0x 740 */ - 50, 66, 68, 69, 67, 53, 48, 0,191, 0, 0, 0, 78, 50, 66, 83, /* 0x 750 */ - 77, 65, 54, 48, 0,200, 0, 0, 0, 0, 0, 0, 0,212, 0, 0, /* 0x 760 */ - 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, /* 0x 770 */ - 66, 70, 65, 83, 54, 48, 0,212, 0, 0, 0, 0, 0, 0, 0,223, /* 0x 780 */ - 0, 0, 0, 78, 50, 66, 70, 65, 83, 54, 49, 0, 0, 0, 0, 0, /* 0x 790 */ - 0, 0, 0, 0,237, 0, 0, 0, 78, 50, 66, 68, 69, 67, 49, 48, /* 0x 7a0 */ - 0, 0, 0, 0, 0, 78, 50, 66, 70, 65, 83, 54, 49, 0,237, 0, /* 0x 7b0 */ - 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, 78, 50, 66, 68, 69, 67, /* 0x 7c0 */ - 49, 48, 0, 0, 0, 0, 0, 78, 50, 66, 68, 69, 67, 54, 48, 0, /* 0x 7d0 */ - 3, 1, 0, 0, 78, 82, 86, 50, 66, 69, 78, 68, 0, 3, 1, 0, /* 0x 7e0 */ - 0, 78, 50, 68, 83, 77, 65, 49, 48, 0, 3, 1, 0, 0, 0, 0, /* 0x 7f0 */ - 0, 0, 5, 1, 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 4, /* 0x 800 */ - 0, 0, 0, 78, 50, 68, 70, 65, 83, 49, 48, 0, 6, 1, 0, 0, /* 0x 810 */ - 0, 0, 0, 0, 8, 1, 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, /* 0x 820 */ - 0, 4, 0, 0, 0, 78, 50, 68, 70, 65, 83, 49, 49, 0, 8, 1, /* 0x 830 */ - 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 14, 1, 0, 0, 78, /* 0x 840 */ - 50, 68, 83, 77, 65, 50, 48, 0, 25, 1, 0, 0, 0, 0, 0, 0, /* 0x 850 */ - 27, 1, 0, 0, 78, 50, 68, 83, 77, 65, 49, 48, 0, 2, 0, 0, /* 0x 860 */ - 0, 78, 50, 68, 70, 65, 83, 50, 48, 0, 30, 1, 0, 0, 0, 0, /* 0x 870 */ - 0, 0, 34, 1, 0, 0, 78, 50, 68, 70, 65, 83, 49, 49, 0, 0, /* 0x 880 */ - 0, 0, 0, 78, 50, 68, 68, 69, 67, 50, 48, 0, 39, 1, 0, 0, /* 0x 890 */ - 78, 50, 68, 83, 77, 65, 51, 48, 0, 52, 1, 0, 0, 0, 0, 0, /* 0x 8a0 */ - 0, 65, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 16, 0, /* 0x 8b0 */ - 0, 0, 78, 50, 68, 70, 65, 83, 51, 48, 0, 65, 1, 0, 0, 0, /* 0x 8c0 */ - 0, 0, 0, 71, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, /* 0x 8d0 */ - 16, 0, 0, 0, 0, 0, 0, 0, 80, 1, 0, 0, 78, 50, 68, 68, /* 0x 8e0 */ - 69, 67, 51, 48, 0, 16, 0, 0, 0, 78, 50, 68, 68, 69, 67, 51, /* 0x 8f0 */ - 48, 0, 80, 1, 0, 0, 0, 0, 0, 0, 96, 1, 0, 0, 78, 50, /* 0x 900 */ - 68, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,114, /* 0x 910 */ - 1, 0, 0, 78, 50, 68, 68, 69, 67, 54, 48, 0, 0, 0, 0, 0, /* 0x 920 */ - 0, 0, 0, 0,148, 1, 0, 0, 78, 50, 68, 68, 69, 67, 53, 48, /* 0x 930 */ - 0, 0, 0, 0, 0, 78, 50, 68, 83, 77, 65, 52, 48, 0,162, 1, /* 0x 940 */ - 0, 0, 0, 0, 0, 0,175, 1, 0, 0, 78, 50, 68, 68, 69, 67, /* 0x 950 */ - 51, 48, 0, 69, 0, 0, 0, 78, 50, 68, 70, 65, 83, 52, 48, 0, /* 0x 960 */ -175, 1, 0, 0, 0, 0, 0, 0,179, 1, 0, 0, 78, 50, 68, 68, /* 0x 970 */ - 69, 67, 51, 48, 0, 69, 0, 0, 0, 0, 0, 0, 0,190, 1, 0, /* 0x 980 */ - 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 69, 0, 0, 0, 78, 50, /* 0x 990 */ - 68, 68, 85, 77, 77, 49, 0,190, 1, 0, 0, 78, 50, 68, 83, 77, /* 0x 9a0 */ - 65, 53, 48, 0,190, 1, 0, 0, 78, 50, 68, 70, 65, 83, 53, 48, /* 0x 9b0 */ - 0,192, 1, 0, 0, 78, 50, 68, 68, 69, 67, 53, 48, 0,195, 1, /* 0x 9c0 */ - 0, 0, 78, 50, 68, 83, 77, 65, 54, 48, 0,204, 1, 0, 0, 0, /* 0x 9d0 */ - 0, 0, 0,216, 1, 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, /* 0x 9e0 */ - 0, 0, 0, 0, 78, 50, 68, 70, 65, 83, 54, 48, 0,216, 1, 0, /* 0x 9f0 */ - 0, 0, 0, 0, 0,227, 1, 0, 0, 78, 50, 68, 70, 65, 83, 54, /* 0x a00 */ - 49, 0, 0, 0, 0, 0, 0, 0, 0, 0,241, 1, 0, 0, 78, 50, /* 0x a10 */ - 68, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 68, 70, 65, /* 0x a20 */ - 83, 54, 49, 0,241, 1, 0, 0, 0, 0, 0, 0, 7, 2, 0, 0, /* 0x a30 */ - 78, 50, 68, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 68, /* 0x a40 */ - 68, 69, 67, 54, 48, 0, 7, 2, 0, 0, 78, 82, 86, 50, 68, 69, /* 0x a50 */ - 78, 68, 0, 7, 2, 0, 0, 78, 50, 69, 83, 77, 65, 49, 48, 0, /* 0x a60 */ - 7, 2, 0, 0, 0, 0, 0, 0, 9, 2, 0, 0, 78, 50, 69, 68, /* 0x a70 */ - 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 69, 70, 65, 83, 49, /* 0x a80 */ - 48, 0, 10, 2, 0, 0, 0, 0, 0, 0, 12, 2, 0, 0, 78, 50, /* 0x a90 */ - 69, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 69, 70, 65, /* 0x aa0 */ - 83, 49, 49, 0, 12, 2, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, /* 0x ab0 */ - 0, 18, 2, 0, 0, 78, 50, 69, 83, 77, 65, 50, 48, 0, 29, 2, /* 0x ac0 */ - 0, 0, 0, 0, 0, 0, 31, 2, 0, 0, 78, 50, 69, 83, 77, 65, /* 0x ad0 */ - 49, 48, 0, 2, 0, 0, 0, 78, 50, 69, 70, 65, 83, 50, 48, 0, /* 0x ae0 */ - 34, 2, 0, 0, 0, 0, 0, 0, 38, 2, 0, 0, 78, 50, 69, 70, /* 0x af0 */ - 65, 83, 49, 49, 0, 0, 0, 0, 0, 78, 50, 69, 68, 69, 67, 50, /* 0x b00 */ - 48, 0, 43, 2, 0, 0, 78, 50, 69, 83, 77, 65, 51, 48, 0, 56, /* 0x b10 */ - 2, 0, 0, 0, 0, 0, 0, 69, 2, 0, 0, 78, 50, 69, 68, 69, /* 0x b20 */ - 67, 51, 48, 0, 31, 0, 0, 0, 78, 50, 69, 70, 65, 83, 51, 48, /* 0x b30 */ - 0, 69, 2, 0, 0, 0, 0, 0, 0, 75, 2, 0, 0, 78, 50, 69, /* 0x b40 */ - 68, 69, 67, 51, 48, 0, 31, 0, 0, 0, 0, 0, 0, 0, 84, 2, /* 0x b50 */ - 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 31, 0, 0, 0, 78, /* 0x b60 */ - 50, 69, 68, 69, 67, 51, 48, 0, 84, 2, 0, 0, 0, 0, 0, 0, /* 0x b70 */ -100, 2, 0, 0, 78, 50, 69, 68, 69, 67, 50, 48, 0, 0, 0, 0, /* 0x b80 */ - 0, 0, 0, 0, 0,115, 2, 0, 0, 78, 50, 69, 68, 69, 67, 53, /* 0x b90 */ - 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,133, 2, 0, 0, 78, 50, /* 0x ba0 */ - 69, 68, 69, 67, 54, 48, 0, 0, 0, 0, 0, 78, 50, 69, 83, 77, /* 0x bb0 */ - 65, 52, 48, 0,179, 2, 0, 0, 0, 0, 0, 0,192, 2, 0, 0, /* 0x bc0 */ - 78, 50, 69, 68, 69, 67, 51, 48, 0, 82, 0, 0, 0, 78, 50, 69, /* 0x bd0 */ - 70, 65, 83, 52, 48, 0,192, 2, 0, 0, 0, 0, 0, 0,196, 2, /* 0x be0 */ - 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 82, 0, 0, 0, 0, /* 0x bf0 */ - 0, 0, 0,207, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, /* 0x c00 */ - 82, 0, 0, 0, 78, 50, 69, 68, 85, 77, 77, 49, 0,207, 2, 0, /* 0x c10 */ - 0, 78, 50, 69, 83, 77, 65, 53, 48, 0,207, 2, 0, 0, 78, 50, /* 0x c20 */ - 69, 70, 65, 83, 53, 48, 0,209, 2, 0, 0, 78, 50, 69, 68, 69, /* 0x c30 */ - 67, 53, 48, 0,212, 2, 0, 0, 78, 50, 69, 83, 77, 65, 54, 48, /* 0x c40 */ - 0,221, 2, 0, 0, 0, 0, 0, 0,233, 2, 0, 0, 78, 50, 69, /* 0x c50 */ - 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 69, 70, 65, 83, /* 0x c60 */ - 54, 48, 0,233, 2, 0, 0, 0, 0, 0, 0,244, 2, 0, 0, 78, /* 0x c70 */ - 50, 69, 70, 65, 83, 54, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x c80 */ - 2, 3, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 0, 0, 0, /* 0x c90 */ - 0, 78, 50, 69, 70, 65, 83, 54, 49, 0, 2, 3, 0, 0, 0, 0, /* 0x ca0 */ - 0, 0, 24, 3, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 0, /* 0x cb0 */ - 0, 0, 0, 78, 50, 69, 68, 69, 67, 54, 48, 0, 24, 3, 0, 0, /* 0x cc0 */ - 78, 82, 86, 50, 69, 69, 78, 68, 0, 24, 3, 0, 0, 67, 65, 76, /* 0x cd0 */ - 76, 84, 82, 48, 48, 0, 24, 3, 0, 0, 67, 84, 67, 76, 69, 86, /* 0x ce0 */ - 69, 49, 0, 38, 3, 0, 0, 0, 0, 0, 0, 43, 3, 0, 0, 67, /* 0x cf0 */ - 65, 76, 76, 84, 82, 48, 48, 0, 5, 0, 0, 0, 67, 65, 76, 76, /* 0x d00 */ - 84, 82, 48, 49, 0, 43, 3, 0, 0, 67, 84, 68, 85, 77, 77, 89, /* 0x d10 */ - 49, 0, 48, 3, 0, 0, 67, 84, 66, 83, 72, 82, 48, 49, 0, 48, /* 0x d20 */ - 3, 0, 0, 67, 84, 66, 82, 79, 82, 48, 49, 0, 52, 3, 0, 0, /* 0x d30 */ - 67, 84, 66, 83, 87, 65, 48, 49, 0, 54, 3, 0, 0, 67, 65, 76, /* 0x d40 */ - 76, 84, 82, 48, 50, 0, 59, 3, 0, 0, 0, 0, 0, 0, 73, 3, /* 0x d50 */ - 0, 0, 67, 65, 76, 76, 84, 82, 48, 48, 0, 10, 0, 0, 0, 67, /* 0x d60 */ - 65, 76, 76, 84, 82, 49, 48, 0, 73, 3, 0, 0, 67, 65, 76, 76, /* 0x d70 */ - 84, 82, 69, 56, 0, 78, 3, 0, 0, 67, 65, 76, 76, 84, 82, 69, /* 0x d80 */ - 57, 0, 80, 3, 0, 0, 67, 65, 76, 76, 84, 82, 49, 49, 0, 82, /* 0x d90 */ - 3, 0, 0, 0, 0, 0, 0, 86, 3, 0, 0, 67, 65, 76, 76, 84, /* 0x da0 */ - 82, 49, 51, 0, 5, 0, 0, 0, 67, 84, 67, 76, 69, 86, 69, 50, /* 0x db0 */ - 0, 86, 3, 0, 0, 0, 0, 0, 0, 91, 3, 0, 0, 67, 65, 76, /* 0x dc0 */ - 76, 84, 82, 49, 49, 0, 0, 0, 0, 0, 67, 65, 76, 76, 84, 82, /* 0x dd0 */ - 49, 50, 0, 91, 3, 0, 0, 67, 84, 68, 85, 77, 77, 89, 50, 0, /* 0x de0 */ - 93, 3, 0, 0, 67, 84, 66, 83, 72, 82, 49, 49, 0, 93, 3, 0, /* 0x df0 */ - 0, 67, 84, 66, 82, 79, 82, 49, 49, 0, 97, 3, 0, 0, 67, 84, /* 0x e00 */ - 66, 83, 87, 65, 49, 49, 0, 99, 3, 0, 0, 67, 65, 76, 76, 84, /* 0x e10 */ - 82, 49, 51, 0,104, 3, 0, 0, 0, 0, 0, 0,109, 3, 0, 0, /* 0x e20 */ - 67, 65, 76, 76, 84, 82, 49, 48, 0, 5, 0, 0, 0, 67, 84, 84, /* 0x e30 */ - 72, 69, 69, 78, 68, 0,109, 3, 0, 0, 76, 69, 88, 69, 67, 48, /* 0x e40 */ - 49, 53, 0,109, 3, 0, 0, 76, 88, 85, 78, 70, 48, 48, 48, 0, /* 0x e50 */ -139, 3, 0, 0, 0, 0, 0, 0,141, 3, 0, 0, 76, 88, 85, 78, /* 0x e60 */ - 70, 48, 49, 48, 0, 5, 0, 0, 0, 76, 88, 85, 78, 70, 48, 48, /* 0x e70 */ - 50, 0,141, 3, 0, 0, 77, 82, 85, 66, 89, 84, 69, 48, 0,146, /* 0x e80 */ - 3, 0, 0, 76, 88, 77, 82, 85, 48, 48, 53, 0,148, 3, 0, 0, /* 0x e90 */ - 76, 88, 77, 82, 85, 48, 48, 54, 0,153, 3, 0, 0, 76, 88, 77, /* 0x ea0 */ - 82, 85, 48, 48, 55, 0,160, 3, 0, 0, 76, 88, 85, 78, 70, 48, /* 0x eb0 */ - 48, 56, 0,167, 3, 0, 0, 76, 88, 85, 78, 70, 48, 49, 48, 0, /* 0x ec0 */ -171, 3, 0, 0, 0, 0, 0, 0,176, 3, 0, 0, 76, 88, 85, 78, /* 0x ed0 */ - 70, 48, 52, 50, 0, 0, 0, 0, 0, 76, 88, 74, 67, 67, 48, 49, /* 0x ee0 */ - 48, 0,176, 3, 0, 0, 76, 88, 77, 82, 85, 48, 52, 53, 0,179, /* 0x ef0 */ - 3, 0, 0, 76, 88, 77, 82, 85, 48, 52, 54, 0,182, 3, 0, 0, /* 0x f00 */ - 76, 88, 74, 67, 67, 48, 50, 48, 0,184, 3, 0, 0, 0, 0, 0, /* 0x f10 */ - 0,186, 3, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0, 0, 0, /* 0x f20 */ - 0, 0, 76, 88, 74, 67, 67, 48, 50, 49, 0,186, 3, 0, 0, 0, /* 0x f30 */ - 0, 0, 0,191, 3, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0, /* 0x f40 */ - 0, 0, 0, 0, 76, 88, 74, 67, 67, 48, 50, 51, 0,191, 3, 0, /* 0x f50 */ - 0, 76, 88, 85, 78, 70, 48, 51, 55, 0,198, 3, 0, 0, 76, 88, /* 0x f60 */ - 85, 78, 70, 51, 56, 54, 0,200, 3, 0, 0, 76, 88, 85, 78, 70, /* 0x f70 */ - 51, 56, 55, 0,201, 3, 0, 0, 76, 88, 85, 78, 70, 51, 56, 56, /* 0x f80 */ - 0,210, 3, 0, 0, 0, 0, 0, 0,213, 3, 0, 0, 76, 88, 85, /* 0x f90 */ - 78, 70, 48, 52, 48, 0, 0, 0, 0, 0, 76, 88, 85, 78, 70, 52, /* 0x fa0 */ - 56, 54, 0,213, 3, 0, 0, 76, 88, 85, 78, 70, 52, 56, 55, 0, /* 0x fb0 */ -217, 3, 0, 0, 0, 0, 0, 0,219, 3, 0, 0, 76, 88, 85, 78, /* 0x fc0 */ - 70, 48, 52, 48, 0, 0, 0, 0, 0, 76, 88, 77, 82, 85, 48, 54, /* 0x fd0 */ - 53, 0,219, 3, 0, 0, 0, 0, 0, 0,223, 3, 0, 0, 76, 88, /* 0x fe0 */ - 77, 82, 85, 48, 55, 48, 0, 5, 0, 0, 0, 77, 82, 85, 66, 89, /* 0x ff0 */ - 84, 69, 51, 0,223, 3, 0, 0, 77, 82, 85, 65, 82, 66, 51, 48, /* 0x1000 */ - 0,225, 3, 0, 0, 77, 82, 85, 66, 73, 84, 83, 51, 0,226, 3, /* 0x1010 */ - 0, 0, 77, 82, 85, 65, 82, 66, 52, 48, 0,228, 3, 0, 0, 76, /* 0x1020 */ - 88, 77, 82, 85, 48, 55, 48, 0,232, 3, 0, 0, 0, 0, 0, 0, /* 0x1030 */ -237, 3, 0, 0, 76, 88, 85, 78, 70, 48, 52, 48, 0, 0, 0, 0, /* 0x1040 */ - 0, 77, 82, 85, 66, 89, 84, 69, 52, 0,240, 3, 0, 0, 77, 82, /* 0x1050 */ - 85, 66, 73, 84, 83, 52, 0,243, 3, 0, 0, 77, 82, 85, 65, 82, /* 0x1060 */ - 66, 53, 48, 0,245, 3, 0, 0, 76, 88, 77, 82, 85, 48, 56, 48, /* 0x1070 */ - 0,251, 3, 0, 0, 77, 82, 85, 66, 89, 84, 69, 53, 0,254, 3, /* 0x1080 */ - 0, 0, 77, 82, 85, 65, 82, 66, 54, 48, 0, 0, 4, 0, 0, 77, /* 0x1090 */ - 82, 85, 66, 73, 84, 83, 53, 0, 1, 4, 0, 0, 77, 82, 85, 65, /* 0x10a0 */ - 82, 66, 55, 48, 0, 3, 4, 0, 0, 76, 88, 77, 82, 85, 48, 57, /* 0x10b0 */ - 48, 0, 7, 4, 0, 0, 0, 0, 0, 0, 14, 4, 0, 0, 76, 88, /* 0x10c0 */ - 77, 82, 85, 49, 48, 48, 0, 10, 0, 0, 0, 77, 82, 85, 66, 89, /* 0x10d0 */ - 84, 69, 54, 0, 18, 4, 0, 0, 77, 82, 85, 65, 82, 66, 56, 48, /* 0x10e0 */ - 0, 20, 4, 0, 0, 77, 82, 85, 66, 73, 84, 83, 54, 0, 21, 4, /* 0x10f0 */ - 0, 0, 77, 82, 85, 65, 82, 66, 57, 48, 0, 23, 4, 0, 0, 76, /* 0x1100 */ - 88, 77, 82, 85, 49, 48, 48, 0, 27, 4, 0, 0, 76, 88, 85, 78, /* 0x1110 */ - 70, 48, 52, 48, 0, 43, 4, 0, 0, 76, 88, 77, 82, 85, 49, 49, /* 0x1120 */ - 48, 0, 48, 4, 0, 0, 76, 88, 77, 82, 85, 49, 49, 49, 0, 51, /* 0x1130 */ - 4, 0, 0, 76, 88, 85, 78, 70, 48, 52, 49, 0, 53, 4, 0, 0, /* 0x1140 */ - 0, 0, 0, 0, 60, 4, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, /* 0x1150 */ - 0, 0, 0, 0, 0, 76, 88, 85, 78, 70, 48, 52, 50, 0, 60, 4, /* 0x1160 */ - 0, 0, 76, 69, 88, 69, 67, 48, 49, 54, 0, 60, 4, 0, 0, 0, /* 0x1170 */ - 0, 0, 0, 62, 4, 0, 0, 76, 88, 85, 78, 70, 48, 52, 50, 0, /* 0x1180 */ - 0, 0, 0, 0, 76, 88, 77, 82, 85, 48, 49, 48, 0, 62, 4, 0, /* 0x1190 */ - 0, 76, 88, 74, 77, 80, 65, 48, 48, 0, 63, 4, 0, 0, 76, 88, /* 0x11a0 */ - 67, 65, 76, 76, 66, 48, 0, 65, 4, 0, 0, 76, 88, 85, 78, 70, /* 0x11b0 */ - 48, 50, 49, 0, 67, 4, 0, 0, 76, 88, 77, 82, 85, 48, 50, 50, /* 0x11c0 */ - 0, 73, 4, 0, 0, 76, 88, 74, 77, 80, 65, 48, 49, 0, 76, 4, /* 0x11d0 */ - 0, 0, 76, 88, 67, 65, 76, 76, 66, 49, 0, 78, 4, 0, 0, 77, /* 0x11e0 */ - 82, 85, 66, 73, 84, 83, 49, 0, 80, 4, 0, 0, 76, 88, 77, 82, /* 0x11f0 */ - 85, 48, 51, 48, 0, 81, 4, 0, 0, 77, 82, 85, 66, 89, 84, 69, /* 0x1200 */ - 49, 0, 83, 4, 0, 0, 77, 82, 85, 65, 82, 66, 49, 48, 0, 85, /* 0x1210 */ - 4, 0, 0, 76, 88, 77, 82, 85, 48, 52, 48, 0, 86, 4, 0, 0, /* 0x1220 */ - 0, 0, 0, 0, 88, 4, 0, 0, 76, 88, 77, 82, 85, 48, 51, 48, /* 0x1230 */ - 0, 0, 0, 0, 0, 76, 88, 85, 78, 70, 48, 51, 48, 0, 88, 4, /* 0x1240 */ - 0, 0, 76, 88, 74, 67, 67, 48, 48, 48, 0, 94, 4, 0, 0, 0, /* 0x1250 */ - 0, 0, 0,102, 4, 0, 0, 76, 88, 74, 67, 67, 48, 49, 48, 0, /* 0x1260 */ - 0, 0, 0, 0, 76, 88, 67, 74, 48, 77, 82, 85, 0,102, 4, 0, /* 0x1270 */ - 0, 76, 88, 67, 74, 49, 77, 82, 85, 0,104, 4, 0, 0, 76, 88, /* 0x1280 */ - 67, 65, 76, 74, 77, 80, 0,107, 4, 0, 0, 76, 88, 67, 65, 76, /* 0x1290 */ - 76, 48, 48, 0,110, 4, 0, 0, 0, 0, 0, 0,112, 4, 0, 0, /* 0x12a0 */ - 76, 88, 85, 78, 70, 48, 51, 55, 0, 0, 0, 0, 0, 76, 88, 67, /* 0x12b0 */ - 65, 76, 76, 48, 49, 0,112, 4, 0, 0, 76, 88, 67, 74, 50, 77, /* 0x12c0 */ - 82, 85, 0,115, 4, 0, 0, 0, 0, 0, 0,117, 4, 0, 0, 76, /* 0x12d0 */ - 88, 85, 78, 70, 48, 51, 55, 0, 0, 0, 0, 0, 76, 88, 67, 74, /* 0x12e0 */ - 52, 77, 82, 85, 0,117, 4, 0, 0, 0, 0, 0, 0,119, 4, 0, /* 0x12f0 */ - 0, 76, 88, 85, 78, 70, 48, 51, 52, 0, 0, 0, 0, 0, 76, 88, /* 0x1300 */ - 67, 74, 54, 77, 82, 85, 0,119, 4, 0, 0, 0, 0, 0, 0,121, /* 0x1310 */ - 4, 0, 0, 76, 88, 67, 74, 56, 77, 82, 85, 0, 1, 0, 0, 0, /* 0x1320 */ - 76, 88, 67, 74, 55, 77, 82, 85, 0,121, 4, 0, 0, 0, 0, 0, /* 0x1330 */ - 0,123, 4, 0, 0, 76, 88, 67, 74, 56, 77, 82, 85, 0, 1, 0, /* 0x1340 */ - 0, 0, 76, 88, 67, 74, 56, 77, 82, 85, 0,123, 4, 0, 0, 0, /* 0x1350 */ - 0, 0, 0,126, 4, 0, 0, 76, 88, 85, 78, 70, 48, 51, 55, 0, /* 0x1360 */ - 0, 0, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0,126, 4, 0, /* 0x1370 */ - 0, 0, 0, 0, 0,131, 4, 0, 0, 76, 88, 85, 78, 70, 48, 51, /* 0x1380 */ - 48, 0, 0, 0, 0, 0, 76, 88, 77, 82, 85, 48, 53, 53, 0,131, /* 0x1390 */ - 4, 0, 0, 77, 82, 85, 66, 89, 84, 69, 50, 0,133, 4, 0, 0, /* 0x13a0 */ - 77, 82, 85, 66, 73, 84, 83, 50, 0,138, 4, 0, 0, 77, 82, 85, /* 0x13b0 */ - 65, 82, 66, 50, 48, 0,143, 4, 0, 0, 76, 88, 77, 82, 85, 48, /* 0x13c0 */ - 53, 55, 0,148, 4, 0, 0, 76, 88, 77, 82, 85, 48, 53, 56, 0, /* 0x13d0 */ -154, 4, 0, 0, 76, 88, 85, 78, 70, 48, 51, 53, 0,155, 4, 0, /* 0x13e0 */ - 0, 67, 75, 76, 76, 84, 82, 48, 48, 0,161, 4, 0, 0, 0, 0, /* 0x13f0 */ - 0, 0,165, 4, 0, 0, 67, 75, 76, 76, 84, 82, 50, 48, 0, 30, /* 0x1400 */ - 0, 0, 0, 67, 75, 76, 76, 84, 82, 49, 48, 0,170, 4, 0, 0, /* 0x1410 */ - 0, 0, 0, 0,184, 4, 0, 0, 67, 75, 76, 76, 84, 82, 50, 48, /* 0x1420 */ - 0, 6, 0, 0, 0, 67, 75, 76, 76, 84, 82, 50, 48, 0,184, 4, /* 0x1430 */ - 0, 0, 0, 0, 0, 0,190, 4, 0, 0, 67, 75, 76, 76, 84, 82, /* 0x1440 */ - 52, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,194, 4, 0, 0, 67, /* 0x1450 */ - 75, 76, 76, 84, 82, 52, 48, 0, 0, 0, 0, 0, 67, 75, 76, 76, /* 0x1460 */ - 84, 82, 51, 48, 0,217, 4, 0, 0, 0, 0, 0, 0,224, 4, 0, /* 0x1470 */ - 0, 67, 75, 76, 76, 84, 82, 49, 48, 0, 14, 0, 0, 0, 67, 75, /* 0x1480 */ - 76, 76, 84, 82, 52, 48, 0,224, 4, 0, 0, 0, 0, 0, 0,229, /* 0x1490 */ - 4, 0, 0, 67, 75, 76, 76, 84, 82, 48, 48, 0, 4, 0, 0, 0, /* 0x14a0 */ - 76, 69, 88, 69, 67, 48, 49, 55, 0,229, 4, 0, 0, 76, 69, 88, /* 0x14b0 */ - 69, 67, 48, 50, 48, 0,231, 4, 0, 0, 88, 84, 72, 69, 69, 78, /* 0x14c0 */ - 68, 88, 0, 81, 5, 0, 0,255,255,255,255, 81, 5 /* 0x14d0 */ +131,233, 1,127, 0, 97,195,106, 29, 90,232, 29, 0, 0, 0, 80, /* 0x 4e0 */ + 82, 79, 84, 95, 69, 88, 69, 67,124, 80, 82, 79, 84, 95, 87, 82, /* 0x 4f0 */ + 73, 84, 69, 32,102, 97,105,108,101,100, 46, 10, 89,106, 2, 91, /* 0x 500 */ +106, 4, 88,205,128,179,127,106, 1, 88,205,128, 94,141, 69,247, /* 0x 510 */ + 43, 0,137,194, 3, 64, 72, 5,255, 15, 0, 0, 37, 0,240,255, /* 0x 520 */ +255, 80, 49,201,106,255,106, 50,181, 16,106, 7, 81, 80,137,227, /* 0x 530 */ +106, 90, 88,205,128,133,192,120,158,146,147,252,173, 80, 84, 82, /* 0x 540 */ +173, 80,173, 86,255,213,131,196, 40,195, 93,232,188,255,255,255, /* 0x 550 */ + 76, 69, 88, 69, 67, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 560 */ + 0, 5, 0, 0, 0, 76, 69, 88, 69, 67, 48, 50, 48, 0,115, 0, /* 0x 570 */ + 0, 0, 76, 69, 88, 69, 67, 48, 48, 57, 0, 5, 0, 0, 0, 76, /* 0x 580 */ + 69, 88, 69, 67, 48, 49, 48, 0, 5, 0, 0, 0, 78, 50, 66, 83, /* 0x 590 */ + 77, 65, 49, 48, 0, 19, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, /* 0x 5a0 */ + 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, /* 0x 5b0 */ + 66, 70, 65, 83, 49, 48, 0, 22, 0, 0, 0, 0, 0, 0, 0, 24, /* 0x 5c0 */ + 0, 0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, /* 0x 5d0 */ + 78, 50, 66, 70, 65, 83, 49, 49, 0, 24, 0, 0, 0, 78, 50, 66, /* 0x 5e0 */ + 68, 69, 67, 49, 48, 0, 30, 0, 0, 0, 78, 50, 66, 83, 77, 65, /* 0x 5f0 */ + 50, 48, 0, 41, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 78, /* 0x 600 */ + 50, 66, 83, 77, 65, 49, 48, 0, 2, 0, 0, 0, 78, 50, 66, 70, /* 0x 610 */ + 65, 83, 50, 48, 0, 46, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, /* 0x 620 */ + 0, 78, 50, 66, 70, 65, 83, 49, 49, 0, 0, 0, 0, 0, 78, 50, /* 0x 630 */ + 66, 68, 69, 67, 50, 48, 0, 55, 0, 0, 0, 78, 50, 66, 83, 77, /* 0x 640 */ + 65, 51, 48, 0, 68, 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, /* 0x 650 */ + 78, 50, 66, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, 78, 50, 66, /* 0x 660 */ + 70, 65, 83, 51, 48, 0, 81, 0, 0, 0, 0, 0, 0, 0, 85, 0, /* 0x 670 */ + 0, 0, 78, 50, 66, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, 0, /* 0x 680 */ + 0, 0, 0, 96, 0, 0, 0, 78, 50, 66, 68, 69, 67, 50, 48, 0, /* 0x 690 */ + 0, 0, 0, 0, 78, 50, 66, 68, 69, 67, 51, 48, 0, 96, 0, 0, /* 0x 6a0 */ + 0, 0, 0, 0, 0,114, 0, 0, 0, 78, 50, 66, 68, 69, 67, 54, /* 0x 6b0 */ + 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 0, 0, 0, 78, 50, /* 0x 6c0 */ + 66, 68, 69, 67, 53, 48, 0, 0, 0, 0, 0, 78, 50, 66, 83, 77, /* 0x 6d0 */ + 65, 52, 48, 0,158, 0, 0, 0, 0, 0, 0, 0,171, 0, 0, 0, /* 0x 6e0 */ + 78, 50, 66, 68, 69, 67, 51, 48, 0, 49, 0, 0, 0, 78, 50, 66, /* 0x 6f0 */ + 70, 65, 83, 52, 48, 0,171, 0, 0, 0, 0, 0, 0, 0,175, 0, /* 0x 700 */ + 0, 0, 78, 50, 66, 68, 69, 67, 51, 48, 0, 49, 0, 0, 0, 0, /* 0x 710 */ + 0, 0, 0,186, 0, 0, 0, 78, 50, 66, 68, 69, 67, 51, 48, 0, /* 0x 720 */ + 49, 0, 0, 0, 78, 50, 66, 68, 85, 77, 77, 49, 0,186, 0, 0, /* 0x 730 */ + 0, 78, 50, 66, 83, 77, 65, 53, 48, 0,186, 0, 0, 0, 78, 50, /* 0x 740 */ + 66, 70, 65, 83, 53, 48, 0,188, 0, 0, 0, 78, 50, 66, 68, 69, /* 0x 750 */ + 67, 53, 48, 0,191, 0, 0, 0, 78, 50, 66, 83, 77, 65, 54, 48, /* 0x 760 */ + 0,200, 0, 0, 0, 0, 0, 0, 0,212, 0, 0, 0, 78, 50, 66, /* 0x 770 */ + 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 66, 70, 65, 83, /* 0x 780 */ + 54, 48, 0,212, 0, 0, 0, 0, 0, 0, 0,223, 0, 0, 0, 78, /* 0x 790 */ + 50, 66, 70, 65, 83, 54, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 7a0 */ +237, 0, 0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 0, 0, 0, /* 0x 7b0 */ + 0, 78, 50, 66, 70, 65, 83, 54, 49, 0,237, 0, 0, 0, 0, 0, /* 0x 7c0 */ + 0, 0, 3, 1, 0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 0, /* 0x 7d0 */ + 0, 0, 0, 78, 50, 66, 68, 69, 67, 54, 48, 0, 3, 1, 0, 0, /* 0x 7e0 */ + 78, 82, 86, 50, 66, 69, 78, 68, 0, 3, 1, 0, 0, 78, 50, 68, /* 0x 7f0 */ + 83, 77, 65, 49, 48, 0, 3, 1, 0, 0, 0, 0, 0, 0, 5, 1, /* 0x 800 */ + 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, /* 0x 810 */ + 50, 68, 70, 65, 83, 49, 48, 0, 6, 1, 0, 0, 0, 0, 0, 0, /* 0x 820 */ + 8, 1, 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 4, 0, 0, /* 0x 830 */ + 0, 78, 50, 68, 70, 65, 83, 49, 49, 0, 8, 1, 0, 0, 78, 50, /* 0x 840 */ + 68, 68, 69, 67, 49, 48, 0, 14, 1, 0, 0, 78, 50, 68, 83, 77, /* 0x 850 */ + 65, 50, 48, 0, 25, 1, 0, 0, 0, 0, 0, 0, 27, 1, 0, 0, /* 0x 860 */ + 78, 50, 68, 83, 77, 65, 49, 48, 0, 2, 0, 0, 0, 78, 50, 68, /* 0x 870 */ + 70, 65, 83, 50, 48, 0, 30, 1, 0, 0, 0, 0, 0, 0, 34, 1, /* 0x 880 */ + 0, 0, 78, 50, 68, 70, 65, 83, 49, 49, 0, 0, 0, 0, 0, 78, /* 0x 890 */ + 50, 68, 68, 69, 67, 50, 48, 0, 39, 1, 0, 0, 78, 50, 68, 83, /* 0x 8a0 */ + 77, 65, 51, 48, 0, 52, 1, 0, 0, 0, 0, 0, 0, 65, 1, 0, /* 0x 8b0 */ + 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 16, 0, 0, 0, 78, 50, /* 0x 8c0 */ + 68, 70, 65, 83, 51, 48, 0, 65, 1, 0, 0, 0, 0, 0, 0, 71, /* 0x 8d0 */ + 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 16, 0, 0, 0, /* 0x 8e0 */ + 0, 0, 0, 0, 80, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, /* 0x 8f0 */ + 0, 16, 0, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 80, 1, /* 0x 900 */ + 0, 0, 0, 0, 0, 0, 96, 1, 0, 0, 78, 50, 68, 68, 69, 67, /* 0x 910 */ + 50, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,114, 1, 0, 0, 78, /* 0x 920 */ + 50, 68, 68, 69, 67, 54, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x 930 */ +148, 1, 0, 0, 78, 50, 68, 68, 69, 67, 53, 48, 0, 0, 0, 0, /* 0x 940 */ + 0, 78, 50, 68, 83, 77, 65, 52, 48, 0,162, 1, 0, 0, 0, 0, /* 0x 950 */ + 0, 0,175, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 69, /* 0x 960 */ + 0, 0, 0, 78, 50, 68, 70, 65, 83, 52, 48, 0,175, 1, 0, 0, /* 0x 970 */ + 0, 0, 0, 0,179, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, /* 0x 980 */ + 0, 69, 0, 0, 0, 0, 0, 0, 0,190, 1, 0, 0, 78, 50, 68, /* 0x 990 */ + 68, 69, 67, 51, 48, 0, 69, 0, 0, 0, 78, 50, 68, 68, 85, 77, /* 0x 9a0 */ + 77, 49, 0,190, 1, 0, 0, 78, 50, 68, 83, 77, 65, 53, 48, 0, /* 0x 9b0 */ +190, 1, 0, 0, 78, 50, 68, 70, 65, 83, 53, 48, 0,192, 1, 0, /* 0x 9c0 */ + 0, 78, 50, 68, 68, 69, 67, 53, 48, 0,195, 1, 0, 0, 78, 50, /* 0x 9d0 */ + 68, 83, 77, 65, 54, 48, 0,204, 1, 0, 0, 0, 0, 0, 0,216, /* 0x 9e0 */ + 1, 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, /* 0x 9f0 */ + 78, 50, 68, 70, 65, 83, 54, 48, 0,216, 1, 0, 0, 0, 0, 0, /* 0x a00 */ + 0,227, 1, 0, 0, 78, 50, 68, 70, 65, 83, 54, 49, 0, 0, 0, /* 0x a10 */ + 0, 0, 0, 0, 0, 0,241, 1, 0, 0, 78, 50, 68, 68, 69, 67, /* 0x a20 */ + 49, 48, 0, 0, 0, 0, 0, 78, 50, 68, 70, 65, 83, 54, 49, 0, /* 0x a30 */ +241, 1, 0, 0, 0, 0, 0, 0, 7, 2, 0, 0, 78, 50, 68, 68, /* 0x a40 */ + 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 68, 68, 69, 67, 54, /* 0x a50 */ + 48, 0, 7, 2, 0, 0, 78, 82, 86, 50, 68, 69, 78, 68, 0, 7, /* 0x a60 */ + 2, 0, 0, 78, 50, 69, 83, 77, 65, 49, 48, 0, 7, 2, 0, 0, /* 0x a70 */ + 0, 0, 0, 0, 9, 2, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, /* 0x a80 */ + 0, 4, 0, 0, 0, 78, 50, 69, 70, 65, 83, 49, 48, 0, 10, 2, /* 0x a90 */ + 0, 0, 0, 0, 0, 0, 12, 2, 0, 0, 78, 50, 69, 68, 69, 67, /* 0x aa0 */ + 49, 48, 0, 4, 0, 0, 0, 78, 50, 69, 70, 65, 83, 49, 49, 0, /* 0x ab0 */ + 12, 2, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 18, 2, 0, /* 0x ac0 */ + 0, 78, 50, 69, 83, 77, 65, 50, 48, 0, 29, 2, 0, 0, 0, 0, /* 0x ad0 */ + 0, 0, 31, 2, 0, 0, 78, 50, 69, 83, 77, 65, 49, 48, 0, 2, /* 0x ae0 */ + 0, 0, 0, 78, 50, 69, 70, 65, 83, 50, 48, 0, 34, 2, 0, 0, /* 0x af0 */ + 0, 0, 0, 0, 38, 2, 0, 0, 78, 50, 69, 70, 65, 83, 49, 49, /* 0x b00 */ + 0, 0, 0, 0, 0, 78, 50, 69, 68, 69, 67, 50, 48, 0, 43, 2, /* 0x b10 */ + 0, 0, 78, 50, 69, 83, 77, 65, 51, 48, 0, 56, 2, 0, 0, 0, /* 0x b20 */ + 0, 0, 0, 69, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, /* 0x b30 */ + 31, 0, 0, 0, 78, 50, 69, 70, 65, 83, 51, 48, 0, 69, 2, 0, /* 0x b40 */ + 0, 0, 0, 0, 0, 75, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, /* 0x b50 */ + 48, 0, 31, 0, 0, 0, 0, 0, 0, 0, 84, 2, 0, 0, 78, 50, /* 0x b60 */ + 69, 68, 69, 67, 51, 48, 0, 31, 0, 0, 0, 78, 50, 69, 68, 69, /* 0x b70 */ + 67, 51, 48, 0, 84, 2, 0, 0, 0, 0, 0, 0,100, 2, 0, 0, /* 0x b80 */ + 78, 50, 69, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x b90 */ + 0,115, 2, 0, 0, 78, 50, 69, 68, 69, 67, 53, 48, 0, 0, 0, /* 0x ba0 */ + 0, 0, 0, 0, 0, 0,133, 2, 0, 0, 78, 50, 69, 68, 69, 67, /* 0x bb0 */ + 54, 48, 0, 0, 0, 0, 0, 78, 50, 69, 83, 77, 65, 52, 48, 0, /* 0x bc0 */ +179, 2, 0, 0, 0, 0, 0, 0,192, 2, 0, 0, 78, 50, 69, 68, /* 0x bd0 */ + 69, 67, 51, 48, 0, 82, 0, 0, 0, 78, 50, 69, 70, 65, 83, 52, /* 0x be0 */ + 48, 0,192, 2, 0, 0, 0, 0, 0, 0,196, 2, 0, 0, 78, 50, /* 0x bf0 */ + 69, 68, 69, 67, 51, 48, 0, 82, 0, 0, 0, 0, 0, 0, 0,207, /* 0x c00 */ + 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 82, 0, 0, 0, /* 0x c10 */ + 78, 50, 69, 68, 85, 77, 77, 49, 0,207, 2, 0, 0, 78, 50, 69, /* 0x c20 */ + 83, 77, 65, 53, 48, 0,207, 2, 0, 0, 78, 50, 69, 70, 65, 83, /* 0x c30 */ + 53, 48, 0,209, 2, 0, 0, 78, 50, 69, 68, 69, 67, 53, 48, 0, /* 0x c40 */ +212, 2, 0, 0, 78, 50, 69, 83, 77, 65, 54, 48, 0,221, 2, 0, /* 0x c50 */ + 0, 0, 0, 0, 0,233, 2, 0, 0, 78, 50, 69, 68, 69, 67, 49, /* 0x c60 */ + 48, 0, 0, 0, 0, 0, 78, 50, 69, 70, 65, 83, 54, 48, 0,233, /* 0x c70 */ + 2, 0, 0, 0, 0, 0, 0,244, 2, 0, 0, 78, 50, 69, 70, 65, /* 0x c80 */ + 83, 54, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 0, /* 0x c90 */ + 78, 50, 69, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 69, /* 0x ca0 */ + 70, 65, 83, 54, 49, 0, 2, 3, 0, 0, 0, 0, 0, 0, 24, 3, /* 0x cb0 */ + 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, /* 0x cc0 */ + 50, 69, 68, 69, 67, 54, 48, 0, 24, 3, 0, 0, 78, 82, 86, 50, /* 0x cd0 */ + 69, 69, 78, 68, 0, 24, 3, 0, 0, 67, 65, 76, 76, 84, 82, 48, /* 0x ce0 */ + 48, 0, 24, 3, 0, 0, 67, 84, 67, 76, 69, 86, 69, 49, 0, 38, /* 0x cf0 */ + 3, 0, 0, 0, 0, 0, 0, 43, 3, 0, 0, 67, 65, 76, 76, 84, /* 0x d00 */ + 82, 48, 48, 0, 5, 0, 0, 0, 67, 65, 76, 76, 84, 82, 48, 49, /* 0x d10 */ + 0, 43, 3, 0, 0, 67, 84, 68, 85, 77, 77, 89, 49, 0, 48, 3, /* 0x d20 */ + 0, 0, 67, 84, 66, 83, 72, 82, 48, 49, 0, 48, 3, 0, 0, 67, /* 0x d30 */ + 84, 66, 82, 79, 82, 48, 49, 0, 52, 3, 0, 0, 67, 84, 66, 83, /* 0x d40 */ + 87, 65, 48, 49, 0, 54, 3, 0, 0, 67, 65, 76, 76, 84, 82, 48, /* 0x d50 */ + 50, 0, 59, 3, 0, 0, 0, 0, 0, 0, 73, 3, 0, 0, 67, 65, /* 0x d60 */ + 76, 76, 84, 82, 48, 48, 0, 10, 0, 0, 0, 67, 65, 76, 76, 84, /* 0x d70 */ + 82, 49, 48, 0, 73, 3, 0, 0, 67, 65, 76, 76, 84, 82, 69, 56, /* 0x d80 */ + 0, 78, 3, 0, 0, 67, 65, 76, 76, 84, 82, 69, 57, 0, 80, 3, /* 0x d90 */ + 0, 0, 67, 65, 76, 76, 84, 82, 49, 49, 0, 82, 3, 0, 0, 0, /* 0x da0 */ + 0, 0, 0, 86, 3, 0, 0, 67, 65, 76, 76, 84, 82, 49, 51, 0, /* 0x db0 */ + 5, 0, 0, 0, 67, 84, 67, 76, 69, 86, 69, 50, 0, 86, 3, 0, /* 0x dc0 */ + 0, 0, 0, 0, 0, 91, 3, 0, 0, 67, 65, 76, 76, 84, 82, 49, /* 0x dd0 */ + 49, 0, 0, 0, 0, 0, 67, 65, 76, 76, 84, 82, 49, 50, 0, 91, /* 0x de0 */ + 3, 0, 0, 67, 84, 68, 85, 77, 77, 89, 50, 0, 93, 3, 0, 0, /* 0x df0 */ + 67, 84, 66, 83, 72, 82, 49, 49, 0, 93, 3, 0, 0, 67, 84, 66, /* 0x e00 */ + 82, 79, 82, 49, 49, 0, 97, 3, 0, 0, 67, 84, 66, 83, 87, 65, /* 0x e10 */ + 49, 49, 0, 99, 3, 0, 0, 67, 65, 76, 76, 84, 82, 49, 51, 0, /* 0x e20 */ +104, 3, 0, 0, 0, 0, 0, 0,109, 3, 0, 0, 67, 65, 76, 76, /* 0x e30 */ + 84, 82, 49, 48, 0, 5, 0, 0, 0, 67, 84, 84, 72, 69, 69, 78, /* 0x e40 */ + 68, 0,109, 3, 0, 0, 76, 69, 88, 69, 67, 48, 49, 53, 0,109, /* 0x e50 */ + 3, 0, 0, 76, 88, 85, 78, 70, 48, 48, 48, 0,139, 3, 0, 0, /* 0x e60 */ + 0, 0, 0, 0,141, 3, 0, 0, 76, 88, 85, 78, 70, 48, 49, 48, /* 0x e70 */ + 0, 5, 0, 0, 0, 76, 88, 85, 78, 70, 48, 48, 50, 0,141, 3, /* 0x e80 */ + 0, 0, 77, 82, 85, 66, 89, 84, 69, 48, 0,146, 3, 0, 0, 76, /* 0x e90 */ + 88, 77, 82, 85, 48, 48, 53, 0,148, 3, 0, 0, 76, 88, 77, 82, /* 0x ea0 */ + 85, 48, 48, 54, 0,153, 3, 0, 0, 76, 88, 77, 82, 85, 48, 48, /* 0x eb0 */ + 55, 0,160, 3, 0, 0, 76, 88, 85, 78, 70, 48, 48, 56, 0,167, /* 0x ec0 */ + 3, 0, 0, 76, 88, 85, 78, 70, 48, 49, 48, 0,171, 3, 0, 0, /* 0x ed0 */ + 0, 0, 0, 0,176, 3, 0, 0, 76, 88, 85, 78, 70, 48, 52, 50, /* 0x ee0 */ + 0, 0, 0, 0, 0, 76, 88, 74, 67, 67, 48, 49, 48, 0,176, 3, /* 0x ef0 */ + 0, 0, 76, 88, 77, 82, 85, 48, 52, 53, 0,179, 3, 0, 0, 76, /* 0x f00 */ + 88, 77, 82, 85, 48, 52, 54, 0,182, 3, 0, 0, 76, 88, 74, 67, /* 0x f10 */ + 67, 48, 50, 48, 0,184, 3, 0, 0, 0, 0, 0, 0,186, 3, 0, /* 0x f20 */ + 0, 76, 88, 85, 78, 70, 48, 51, 52, 0, 0, 0, 0, 0, 76, 88, /* 0x f30 */ + 74, 67, 67, 48, 50, 49, 0,186, 3, 0, 0, 0, 0, 0, 0,191, /* 0x f40 */ + 3, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0, 0, 0, 0, 0, /* 0x f50 */ + 76, 88, 74, 67, 67, 48, 50, 51, 0,191, 3, 0, 0, 76, 88, 85, /* 0x f60 */ + 78, 70, 48, 51, 55, 0,198, 3, 0, 0, 76, 88, 85, 78, 70, 51, /* 0x f70 */ + 56, 54, 0,200, 3, 0, 0, 76, 88, 85, 78, 70, 51, 56, 55, 0, /* 0x f80 */ +201, 3, 0, 0, 76, 88, 85, 78, 70, 51, 56, 56, 0,210, 3, 0, /* 0x f90 */ + 0, 0, 0, 0, 0,213, 3, 0, 0, 76, 88, 85, 78, 70, 48, 52, /* 0x fa0 */ + 48, 0, 0, 0, 0, 0, 76, 88, 85, 78, 70, 52, 56, 54, 0,213, /* 0x fb0 */ + 3, 0, 0, 76, 88, 85, 78, 70, 52, 56, 55, 0,217, 3, 0, 0, /* 0x fc0 */ + 0, 0, 0, 0,219, 3, 0, 0, 76, 88, 85, 78, 70, 48, 52, 48, /* 0x fd0 */ + 0, 0, 0, 0, 0, 76, 88, 77, 82, 85, 48, 54, 53, 0,219, 3, /* 0x fe0 */ + 0, 0, 0, 0, 0, 0,223, 3, 0, 0, 76, 88, 77, 82, 85, 48, /* 0x ff0 */ + 55, 48, 0, 5, 0, 0, 0, 77, 82, 85, 66, 89, 84, 69, 51, 0, /* 0x1000 */ +223, 3, 0, 0, 77, 82, 85, 65, 82, 66, 51, 48, 0,225, 3, 0, /* 0x1010 */ + 0, 77, 82, 85, 66, 73, 84, 83, 51, 0,226, 3, 0, 0, 77, 82, /* 0x1020 */ + 85, 65, 82, 66, 52, 48, 0,228, 3, 0, 0, 76, 88, 77, 82, 85, /* 0x1030 */ + 48, 55, 48, 0,232, 3, 0, 0, 0, 0, 0, 0,237, 3, 0, 0, /* 0x1040 */ + 76, 88, 85, 78, 70, 48, 52, 48, 0, 0, 0, 0, 0, 77, 82, 85, /* 0x1050 */ + 66, 89, 84, 69, 52, 0,240, 3, 0, 0, 77, 82, 85, 66, 73, 84, /* 0x1060 */ + 83, 52, 0,243, 3, 0, 0, 77, 82, 85, 65, 82, 66, 53, 48, 0, /* 0x1070 */ +245, 3, 0, 0, 76, 88, 77, 82, 85, 48, 56, 48, 0,251, 3, 0, /* 0x1080 */ + 0, 77, 82, 85, 66, 89, 84, 69, 53, 0,254, 3, 0, 0, 77, 82, /* 0x1090 */ + 85, 65, 82, 66, 54, 48, 0, 0, 4, 0, 0, 77, 82, 85, 66, 73, /* 0x10a0 */ + 84, 83, 53, 0, 1, 4, 0, 0, 77, 82, 85, 65, 82, 66, 55, 48, /* 0x10b0 */ + 0, 3, 4, 0, 0, 76, 88, 77, 82, 85, 48, 57, 48, 0, 7, 4, /* 0x10c0 */ + 0, 0, 0, 0, 0, 0, 14, 4, 0, 0, 76, 88, 77, 82, 85, 49, /* 0x10d0 */ + 48, 48, 0, 10, 0, 0, 0, 77, 82, 85, 66, 89, 84, 69, 54, 0, /* 0x10e0 */ + 18, 4, 0, 0, 77, 82, 85, 65, 82, 66, 56, 48, 0, 20, 4, 0, /* 0x10f0 */ + 0, 77, 82, 85, 66, 73, 84, 83, 54, 0, 21, 4, 0, 0, 77, 82, /* 0x1100 */ + 85, 65, 82, 66, 57, 48, 0, 23, 4, 0, 0, 76, 88, 77, 82, 85, /* 0x1110 */ + 49, 48, 48, 0, 27, 4, 0, 0, 76, 88, 85, 78, 70, 48, 52, 48, /* 0x1120 */ + 0, 43, 4, 0, 0, 76, 88, 77, 82, 85, 49, 49, 48, 0, 48, 4, /* 0x1130 */ + 0, 0, 76, 88, 77, 82, 85, 49, 49, 49, 0, 51, 4, 0, 0, 76, /* 0x1140 */ + 88, 85, 78, 70, 48, 52, 49, 0, 53, 4, 0, 0, 0, 0, 0, 0, /* 0x1150 */ + 60, 4, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0, 0, 0, 0, /* 0x1160 */ + 0, 76, 88, 85, 78, 70, 48, 52, 50, 0, 60, 4, 0, 0, 76, 69, /* 0x1170 */ + 88, 69, 67, 48, 49, 54, 0, 60, 4, 0, 0, 0, 0, 0, 0, 62, /* 0x1180 */ + 4, 0, 0, 76, 88, 85, 78, 70, 48, 52, 50, 0, 0, 0, 0, 0, /* 0x1190 */ + 76, 88, 77, 82, 85, 48, 49, 48, 0, 62, 4, 0, 0, 76, 88, 74, /* 0x11a0 */ + 77, 80, 65, 48, 48, 0, 63, 4, 0, 0, 76, 88, 67, 65, 76, 76, /* 0x11b0 */ + 66, 48, 0, 65, 4, 0, 0, 76, 88, 85, 78, 70, 48, 50, 49, 0, /* 0x11c0 */ + 67, 4, 0, 0, 76, 88, 77, 82, 85, 48, 50, 50, 0, 73, 4, 0, /* 0x11d0 */ + 0, 76, 88, 74, 77, 80, 65, 48, 49, 0, 76, 4, 0, 0, 76, 88, /* 0x11e0 */ + 67, 65, 76, 76, 66, 49, 0, 78, 4, 0, 0, 77, 82, 85, 66, 73, /* 0x11f0 */ + 84, 83, 49, 0, 80, 4, 0, 0, 76, 88, 77, 82, 85, 48, 51, 48, /* 0x1200 */ + 0, 81, 4, 0, 0, 77, 82, 85, 66, 89, 84, 69, 49, 0, 83, 4, /* 0x1210 */ + 0, 0, 77, 82, 85, 65, 82, 66, 49, 48, 0, 85, 4, 0, 0, 76, /* 0x1220 */ + 88, 77, 82, 85, 48, 52, 48, 0, 86, 4, 0, 0, 0, 0, 0, 0, /* 0x1230 */ + 88, 4, 0, 0, 76, 88, 77, 82, 85, 48, 51, 48, 0, 0, 0, 0, /* 0x1240 */ + 0, 76, 88, 85, 78, 70, 48, 51, 48, 0, 88, 4, 0, 0, 76, 88, /* 0x1250 */ + 74, 67, 67, 48, 48, 48, 0, 94, 4, 0, 0, 0, 0, 0, 0,102, /* 0x1260 */ + 4, 0, 0, 76, 88, 74, 67, 67, 48, 49, 48, 0, 0, 0, 0, 0, /* 0x1270 */ + 76, 88, 67, 74, 48, 77, 82, 85, 0,102, 4, 0, 0, 76, 88, 67, /* 0x1280 */ + 74, 49, 77, 82, 85, 0,104, 4, 0, 0, 76, 88, 67, 65, 76, 74, /* 0x1290 */ + 77, 80, 0,107, 4, 0, 0, 76, 88, 67, 65, 76, 76, 48, 48, 0, /* 0x12a0 */ +110, 4, 0, 0, 0, 0, 0, 0,112, 4, 0, 0, 76, 88, 85, 78, /* 0x12b0 */ + 70, 48, 51, 55, 0, 0, 0, 0, 0, 76, 88, 67, 65, 76, 76, 48, /* 0x12c0 */ + 49, 0,112, 4, 0, 0, 76, 88, 67, 74, 50, 77, 82, 85, 0,115, /* 0x12d0 */ + 4, 0, 0, 0, 0, 0, 0,117, 4, 0, 0, 76, 88, 85, 78, 70, /* 0x12e0 */ + 48, 51, 55, 0, 0, 0, 0, 0, 76, 88, 67, 74, 52, 77, 82, 85, /* 0x12f0 */ + 0,117, 4, 0, 0, 0, 0, 0, 0,119, 4, 0, 0, 76, 88, 85, /* 0x1300 */ + 78, 70, 48, 51, 52, 0, 0, 0, 0, 0, 76, 88, 67, 74, 54, 77, /* 0x1310 */ + 82, 85, 0,119, 4, 0, 0, 0, 0, 0, 0,121, 4, 0, 0, 76, /* 0x1320 */ + 88, 67, 74, 56, 77, 82, 85, 0, 1, 0, 0, 0, 76, 88, 67, 74, /* 0x1330 */ + 55, 77, 82, 85, 0,121, 4, 0, 0, 0, 0, 0, 0,123, 4, 0, /* 0x1340 */ + 0, 76, 88, 67, 74, 56, 77, 82, 85, 0, 1, 0, 0, 0, 76, 88, /* 0x1350 */ + 67, 74, 56, 77, 82, 85, 0,123, 4, 0, 0, 0, 0, 0, 0,126, /* 0x1360 */ + 4, 0, 0, 76, 88, 85, 78, 70, 48, 51, 55, 0, 0, 0, 0, 0, /* 0x1370 */ + 76, 88, 85, 78, 70, 48, 51, 52, 0,126, 4, 0, 0, 0, 0, 0, /* 0x1380 */ + 0,131, 4, 0, 0, 76, 88, 85, 78, 70, 48, 51, 48, 0, 0, 0, /* 0x1390 */ + 0, 0, 76, 88, 77, 82, 85, 48, 53, 53, 0,131, 4, 0, 0, 77, /* 0x13a0 */ + 82, 85, 66, 89, 84, 69, 50, 0,133, 4, 0, 0, 77, 82, 85, 66, /* 0x13b0 */ + 73, 84, 83, 50, 0,138, 4, 0, 0, 77, 82, 85, 65, 82, 66, 50, /* 0x13c0 */ + 48, 0,143, 4, 0, 0, 76, 88, 77, 82, 85, 48, 53, 55, 0,148, /* 0x13d0 */ + 4, 0, 0, 76, 88, 77, 82, 85, 48, 53, 56, 0,154, 4, 0, 0, /* 0x13e0 */ + 76, 88, 85, 78, 70, 48, 51, 53, 0,155, 4, 0, 0, 67, 75, 76, /* 0x13f0 */ + 76, 84, 82, 48, 48, 0,161, 4, 0, 0, 0, 0, 0, 0,165, 4, /* 0x1400 */ + 0, 0, 67, 75, 76, 76, 84, 82, 50, 48, 0, 30, 0, 0, 0, 67, /* 0x1410 */ + 75, 76, 76, 84, 82, 49, 48, 0,170, 4, 0, 0, 0, 0, 0, 0, /* 0x1420 */ +184, 4, 0, 0, 67, 75, 76, 76, 84, 82, 50, 48, 0, 6, 0, 0, /* 0x1430 */ + 0, 67, 75, 76, 76, 84, 82, 50, 48, 0,184, 4, 0, 0, 0, 0, /* 0x1440 */ + 0, 0,190, 4, 0, 0, 67, 75, 76, 76, 84, 82, 52, 48, 0, 0, /* 0x1450 */ + 0, 0, 0, 0, 0, 0, 0,194, 4, 0, 0, 67, 75, 76, 76, 84, /* 0x1460 */ + 82, 52, 48, 0, 0, 0, 0, 0, 67, 75, 76, 76, 84, 82, 51, 48, /* 0x1470 */ + 0,217, 4, 0, 0, 0, 0, 0, 0,224, 4, 0, 0, 67, 75, 76, /* 0x1480 */ + 76, 84, 82, 49, 48, 0, 14, 0, 0, 0, 67, 75, 76, 76, 84, 82, /* 0x1490 */ + 52, 48, 0,224, 4, 0, 0, 0, 0, 0, 0,229, 4, 0, 0, 67, /* 0x14a0 */ + 75, 76, 76, 84, 82, 48, 48, 0, 4, 0, 0, 0, 76, 69, 88, 69, /* 0x14b0 */ + 67, 48, 49, 55, 0,229, 4, 0, 0, 76, 69, 88, 69, 67, 48, 50, /* 0x14c0 */ + 48, 0,231, 4, 0, 0, 88, 84, 72, 69, 69, 78, 68, 88, 0, 96, /* 0x14d0 */ + 5, 0, 0,255,255,255,255, 96, 5 /* 0x14e0 */ }; diff --git a/src/stub/l_lx_elfppc32.S b/src/stub/l_lx_elfppc32.S index ceefd35e..b59486c3 100644 --- a/src/stub/l_lx_elfppc32.S +++ b/src/stub/l_lx_elfppc32.S @@ -66,7 +66,7 @@ __NR_exit = 1 msg_SELinux: call L71 L70: - .asciz "SELinux denied execmem.\n" + .asciz "PROT_EXEC|PROT_WRITE failed.\n" .p2align 2 # (1<<2) L71: li a2,L71 - L70 # length diff --git a/src/stub/l_lx_elfppc32.h b/src/stub/l_lx_elfppc32.h index 1f5b1b34..d3709b74 100644 --- a/src/stub/l_lx_elfppc32.h +++ b/src/stub/l_lx_elfppc32.h @@ -1,4 +1,4 @@ -/* l_lx_elfppc32.h -- created from l_lx_elfppc32.bin, 600 (0x258) bytes +/* l_lx_elfppc32.h -- created from l_lx_elfppc32.bin, 604 (0x25c) bytes This file is part of the UPX executable compressor. @@ -27,12 +27,12 @@ */ -#define LINUX_ELFPPC32_LOADER_SIZE 600 -#define LINUX_ELFPPC32_LOADER_ADLER32 0x4d08bce9 -#define LINUX_ELFPPC32_LOADER_CRC32 0x15fa8f8e +#define LINUX_ELFPPC32_LOADER_SIZE 604 +#define LINUX_ELFPPC32_LOADER_ADLER32 0x0a8bbdb5 +#define LINUX_ELFPPC32_LOADER_CRC32 0xcfe347e7 -unsigned char linux_elfppc32_loader[600] = { - 72, 0, 2, 73,124, 0, 41,236,144,166, 0, 0,124,132, 26, 20, /* 0x 0 */ +unsigned char linux_elfppc32_loader[604] = { + 72, 0, 2, 77,124, 0, 41,236,144,166, 0, 0,124,132, 26, 20, /* 0x 0 */ 60, 0,128, 0, 61, 32,128, 0, 56, 99,255,255, 56,165,255,255, /* 0x 10 */ 57, 64,255,255,125,168, 2,166, 72, 0, 1, 12, 57, 32, 0, 1, /* 0x 20 */ 125, 41, 28, 44, 56, 99, 0, 4,124, 9, 0, 64,125, 41, 72, 20, /* 0x 30 */ @@ -59,15 +59,15 @@ unsigned char linux_elfppc32_loader[600] = { 85, 80, 88, 32, 84,101, 97,109, 46, 32, 65,108,108, 32, 82,105, /* 0x 180 */ 103,104,116,115, 32, 82,101,115,101,114,118,101,100, 46, 32,104, /* 0x 190 */ 116,116,112, 58, 47, 47,117,112,120, 46,115,102, 46,110,101,116, /* 0x 1a0 */ - 32, 36, 10, 0, 72, 0, 0, 33, 83, 69, 76,105,110,117,120, 32, /* 0x 1b0 */ -100,101,110,105,101,100, 32,101,120,101, 99,109,101,109, 46, 10, /* 0x 1c0 */ - 0, 0, 0, 0, 56,160, 0, 28,124,136, 2,166, 56, 96, 0, 2, /* 0x 1d0 */ - 56, 0, 0, 4, 68, 0, 0, 2, 56, 96, 0,127, 56, 0, 0, 1, /* 0x 1e0 */ - 68, 0, 0, 2,127,200, 2,166, 57, 0, 0, 0, 56,224,255,255, /* 0x 1f0 */ -128,126, 0, 4, 56,192, 0, 50, 56,160, 0, 7, 56,128, 16, 0, /* 0x 200 */ -124, 99,242, 20, 56, 0, 0, 90, 56, 99, 16, 11, 84, 99, 0, 38, /* 0x 210 */ - 68, 0, 0, 2, 65,163,255,144,127,233, 3,166,136,254, 0, 8, /* 0x 220 */ - 56,193, 0,124,124,101, 27,120,124,104, 3,166,128,158, 0, 4, /* 0x 230 */ - 56,126, 0, 12, 78,128, 4, 32,148, 33,255,128,188, 65, 0, 4, /* 0x 240 */ -127,232, 2,166, 75,255,255,161 /* 0x 250 */ + 32, 36, 10, 0, 72, 0, 0, 37, 80, 82, 79, 84, 95, 69, 88, 69, /* 0x 1b0 */ + 67,124, 80, 82, 79, 84, 95, 87, 82, 73, 84, 69, 32,102, 97,105, /* 0x 1c0 */ +108,101,100, 46, 10, 0, 0, 0, 56,160, 0, 32,124,136, 2,166, /* 0x 1d0 */ + 56, 96, 0, 2, 56, 0, 0, 4, 68, 0, 0, 2, 56, 96, 0,127, /* 0x 1e0 */ + 56, 0, 0, 1, 68, 0, 0, 2,127,200, 2,166, 57, 0, 0, 0, /* 0x 1f0 */ + 56,224,255,255,128,126, 0, 4, 56,192, 0, 50, 56,160, 0, 7, /* 0x 200 */ + 56,128, 16, 0,124, 99,242, 20, 56, 0, 0, 90, 56, 99, 16, 11, /* 0x 210 */ + 84, 99, 0, 38, 68, 0, 0, 2, 65,163,255,140,127,233, 3,166, /* 0x 220 */ +136,254, 0, 8, 56,193, 0,124,124,101, 27,120,124,104, 3,166, /* 0x 230 */ +128,158, 0, 4, 56,126, 0, 12, 78,128, 4, 32,148, 33,255,128, /* 0x 240 */ +188, 65, 0, 4,127,232, 2,166, 75,255,255,161 /* 0x 250 */ }; diff --git a/src/stub/l_lx_exec86.asm b/src/stub/l_lx_exec86.asm index a21e795d..e4f586b3 100644 --- a/src/stub/l_lx_exec86.asm +++ b/src/stub/l_lx_exec86.asm @@ -143,54 +143,10 @@ decompress: ;__LEXEC020__ -%define PAGE_SIZE ( 1<<12) - -%define MAP_FIXED 0x10 -%define MAP_PRIVATE 0x02 -%define MAP_ANONYMOUS 0x20 -%define PROT_READ 1 -%define PROT_WRITE 2 -%define PROT_EXEC 4 -%define __NR_mmap 90 - -; Decompress the rest of this loader, and jump to it -unfold: - pop esi ; &{ sz_uncompressed, sz_compressed, compressed_data...} - cld - lodsd - push eax ; sz_uncompressed (junk, actually) - push esp ; &sz_uncompressed - mov eax, 0x400000 - push eax ; &destination - - ; mmap a page to hold the decompressed program - xor ecx, ecx - push ecx - push ecx - mov ch, PAGE_SIZE >> 8 - push byte MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS - push byte PROT_READ | PROT_WRITE | PROT_EXEC - push ecx ; length - push eax ; destination - mov ebx, esp ; address of parameter vector for __NR_mmap - push byte __NR_mmap - pop eax - int 0x80 - xchg eax, ebx - mov bh, PAGE_SIZE>>8 ; ebx= 0x401000 - add esp, byte 6*4 ; discard args to mmap - - lodsd - push eax ; sz_compressed - lodsd ; junk cto8, algo, unused[2] - push esi ; &compressed_data - call ebp ; decompress(&src, srclen, &dst, &dstlen) - pop eax ; discard &compressed_data - pop eax ; discard sz_compressed - ret ; &destination main: pop ebp ; &decompress - call unfold + mov ebx, 0x401000 ; &Elf32_Ehdr of this program +;; fall into fold_begin eof: ; __XTHEENDX__ diff --git a/src/stub/l_lx_exec86.h b/src/stub/l_lx_exec86.h index a53d78d2..895f0529 100644 --- a/src/stub/l_lx_exec86.h +++ b/src/stub/l_lx_exec86.h @@ -1,4 +1,4 @@ -/* l_lx_exec86.h -- created from l_lx_exec86.bin, 5323 (0x14cb) bytes +/* l_lx_exec86.h -- created from l_lx_exec86.bin, 5279 (0x149f) bytes This file is part of the UPX executable compressor. @@ -27,11 +27,11 @@ */ -#define LINUX_I386EXEC_LOADER_SIZE 5323 -#define LINUX_I386EXEC_LOADER_ADLER32 0x1a5ac7ad -#define LINUX_I386EXEC_LOADER_CRC32 0xc5aa06ae +#define LINUX_I386EXEC_LOADER_SIZE 5279 +#define LINUX_I386EXEC_LOADER_ADLER32 0xf155b1a6 +#define LINUX_I386EXEC_LOADER_CRC32 0x8ea0096c -unsigned char linux_i386exec_loader[5323] = { +unsigned char linux_i386exec_loader[5279] = { 232, 0, 0, 0, 0,184, 78, 77, 82, 85, 96,106, 63,139,116, 36, /* 0x 0 */ 40,139,124, 36, 48,131,205,255,235, 0,164,235, 0,138, 6, 70, /* 0x 10 */ 136, 7, 71, 1,219,117, 7,139, 30,131,238,252, 17,219,114, 0, /* 0x 20 */ @@ -111,258 +111,255 @@ unsigned char linux_i386exec_loader[5323] = { 128,127,254, 15,116, 0, 44,232, 60, 1,119, 0, 56, 23,117, 0, /* 0x 4c0 */ 139, 7,102,193,232, 8,193,192, 16,134,196, 41,248, 1,240,137, /* 0x 4d0 */ 7,131,199, 4,131,233, 4,138, 7,131,199, 1,226, 0,131,233, /* 0x 4e0 */ - 1,127, 0, 97,195, 94,252,173, 80, 84,184, 0, 0, 64, 0, 80, /* 0x 4f0 */ - 49,201, 81, 81,181, 16,106, 50,106, 7, 81, 80,137,227,106, 90, /* 0x 500 */ - 88,205,128,147,183, 16,131,196, 24,173, 80,173, 86,255,213, 88, /* 0x 510 */ - 88,195, 93,232,205,255,255,255, 76, 69, 88, 69, 67, 48, 48, 48, /* 0x 520 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 76, 69, 88, /* 0x 530 */ - 69, 67, 48, 50, 48, 0, 45, 0, 0, 0, 76, 69, 88, 69, 67, 48, /* 0x 540 */ - 48, 57, 0, 5, 0, 0, 0, 76, 69, 88, 69, 67, 48, 49, 48, 0, /* 0x 550 */ - 10, 0, 0, 0, 78, 50, 66, 83, 77, 65, 49, 48, 0, 24, 0, 0, /* 0x 560 */ - 0, 0, 0, 0, 0, 26, 0, 0, 0, 78, 50, 66, 68, 69, 67, 49, /* 0x 570 */ - 48, 0, 4, 0, 0, 0, 78, 50, 66, 70, 65, 83, 49, 48, 0, 27, /* 0x 580 */ - 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 78, 50, 66, 68, 69, /* 0x 590 */ - 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 66, 70, 65, 83, 49, 49, /* 0x 5a0 */ - 0, 29, 0, 0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 35, 0, /* 0x 5b0 */ - 0, 0, 78, 50, 66, 83, 77, 65, 50, 48, 0, 46, 0, 0, 0, 0, /* 0x 5c0 */ - 0, 0, 0, 48, 0, 0, 0, 78, 50, 66, 83, 77, 65, 49, 48, 0, /* 0x 5d0 */ - 2, 0, 0, 0, 78, 50, 66, 70, 65, 83, 50, 48, 0, 51, 0, 0, /* 0x 5e0 */ - 0, 0, 0, 0, 0, 55, 0, 0, 0, 78, 50, 66, 70, 65, 83, 49, /* 0x 5f0 */ - 49, 0, 0, 0, 0, 0, 78, 50, 66, 68, 69, 67, 50, 48, 0, 60, /* 0x 600 */ - 0, 0, 0, 78, 50, 66, 83, 77, 65, 51, 48, 0, 73, 0, 0, 0, /* 0x 610 */ - 0, 0, 0, 0, 86, 0, 0, 0, 78, 50, 66, 68, 69, 67, 50, 48, /* 0x 620 */ - 0, 0, 0, 0, 0, 78, 50, 66, 70, 65, 83, 51, 48, 0, 86, 0, /* 0x 630 */ - 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 78, 50, 66, 68, 69, 67, /* 0x 640 */ - 50, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,101, 0, 0, 0, 78, /* 0x 650 */ - 50, 66, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, 78, 50, 66, 68, /* 0x 660 */ - 69, 67, 51, 48, 0,101, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, /* 0x 670 */ - 0, 78, 50, 66, 68, 69, 67, 54, 48, 0, 0, 0, 0, 0, 0, 0, /* 0x 680 */ - 0, 0,149, 0, 0, 0, 78, 50, 66, 68, 69, 67, 53, 48, 0, 0, /* 0x 690 */ - 0, 0, 0, 78, 50, 66, 83, 77, 65, 52, 48, 0,163, 0, 0, 0, /* 0x 6a0 */ - 0, 0, 0, 0,176, 0, 0, 0, 78, 50, 66, 68, 69, 67, 51, 48, /* 0x 6b0 */ - 0, 49, 0, 0, 0, 78, 50, 66, 70, 65, 83, 52, 48, 0,176, 0, /* 0x 6c0 */ - 0, 0, 0, 0, 0, 0,180, 0, 0, 0, 78, 50, 66, 68, 69, 67, /* 0x 6d0 */ - 51, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0,191, 0, 0, 0, 78, /* 0x 6e0 */ - 50, 66, 68, 69, 67, 51, 48, 0, 49, 0, 0, 0, 78, 50, 66, 68, /* 0x 6f0 */ - 85, 77, 77, 49, 0,191, 0, 0, 0, 78, 50, 66, 83, 77, 65, 53, /* 0x 700 */ - 48, 0,191, 0, 0, 0, 78, 50, 66, 70, 65, 83, 53, 48, 0,193, /* 0x 710 */ - 0, 0, 0, 78, 50, 66, 68, 69, 67, 53, 48, 0,196, 0, 0, 0, /* 0x 720 */ - 78, 50, 66, 83, 77, 65, 54, 48, 0,205, 0, 0, 0, 0, 0, 0, /* 0x 730 */ - 0,217, 0, 0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 0, 0, /* 0x 740 */ - 0, 0, 78, 50, 66, 70, 65, 83, 54, 48, 0,217, 0, 0, 0, 0, /* 0x 750 */ - 0, 0, 0,228, 0, 0, 0, 78, 50, 66, 70, 65, 83, 54, 49, 0, /* 0x 760 */ - 0, 0, 0, 0, 0, 0, 0, 0,242, 0, 0, 0, 78, 50, 66, 68, /* 0x 770 */ - 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 66, 70, 65, 83, 54, /* 0x 780 */ - 49, 0,242, 0, 0, 0, 0, 0, 0, 0, 8, 1, 0, 0, 78, 50, /* 0x 790 */ - 66, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 66, 68, 69, /* 0x 7a0 */ - 67, 54, 48, 0, 8, 1, 0, 0, 78, 82, 86, 50, 66, 69, 78, 68, /* 0x 7b0 */ - 0, 8, 1, 0, 0, 78, 50, 68, 83, 77, 65, 49, 48, 0, 8, 1, /* 0x 7c0 */ - 0, 0, 0, 0, 0, 0, 10, 1, 0, 0, 78, 50, 68, 68, 69, 67, /* 0x 7d0 */ - 49, 48, 0, 4, 0, 0, 0, 78, 50, 68, 70, 65, 83, 49, 48, 0, /* 0x 7e0 */ - 11, 1, 0, 0, 0, 0, 0, 0, 13, 1, 0, 0, 78, 50, 68, 68, /* 0x 7f0 */ - 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 68, 70, 65, 83, 49, /* 0x 800 */ - 49, 0, 13, 1, 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 19, /* 0x 810 */ - 1, 0, 0, 78, 50, 68, 83, 77, 65, 50, 48, 0, 30, 1, 0, 0, /* 0x 820 */ - 0, 0, 0, 0, 32, 1, 0, 0, 78, 50, 68, 83, 77, 65, 49, 48, /* 0x 830 */ - 0, 2, 0, 0, 0, 78, 50, 68, 70, 65, 83, 50, 48, 0, 35, 1, /* 0x 840 */ - 0, 0, 0, 0, 0, 0, 39, 1, 0, 0, 78, 50, 68, 70, 65, 83, /* 0x 850 */ - 49, 49, 0, 0, 0, 0, 0, 78, 50, 68, 68, 69, 67, 50, 48, 0, /* 0x 860 */ - 44, 1, 0, 0, 78, 50, 68, 83, 77, 65, 51, 48, 0, 57, 1, 0, /* 0x 870 */ - 0, 0, 0, 0, 0, 70, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, /* 0x 880 */ - 48, 0, 16, 0, 0, 0, 78, 50, 68, 70, 65, 83, 51, 48, 0, 70, /* 0x 890 */ - 1, 0, 0, 0, 0, 0, 0, 76, 1, 0, 0, 78, 50, 68, 68, 69, /* 0x 8a0 */ - 67, 51, 48, 0, 16, 0, 0, 0, 0, 0, 0, 0, 85, 1, 0, 0, /* 0x 8b0 */ - 78, 50, 68, 68, 69, 67, 51, 48, 0, 16, 0, 0, 0, 78, 50, 68, /* 0x 8c0 */ - 68, 69, 67, 51, 48, 0, 85, 1, 0, 0, 0, 0, 0, 0,101, 1, /* 0x 8d0 */ - 0, 0, 78, 50, 68, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, 0, /* 0x 8e0 */ - 0, 0, 0,119, 1, 0, 0, 78, 50, 68, 68, 69, 67, 54, 48, 0, /* 0x 8f0 */ - 0, 0, 0, 0, 0, 0, 0, 0,153, 1, 0, 0, 78, 50, 68, 68, /* 0x 900 */ - 69, 67, 53, 48, 0, 0, 0, 0, 0, 78, 50, 68, 83, 77, 65, 52, /* 0x 910 */ - 48, 0,167, 1, 0, 0, 0, 0, 0, 0,180, 1, 0, 0, 78, 50, /* 0x 920 */ - 68, 68, 69, 67, 51, 48, 0, 69, 0, 0, 0, 78, 50, 68, 70, 65, /* 0x 930 */ - 83, 52, 48, 0,180, 1, 0, 0, 0, 0, 0, 0,184, 1, 0, 0, /* 0x 940 */ - 78, 50, 68, 68, 69, 67, 51, 48, 0, 69, 0, 0, 0, 0, 0, 0, /* 0x 950 */ - 0,195, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 69, 0, /* 0x 960 */ - 0, 0, 78, 50, 68, 68, 85, 77, 77, 49, 0,195, 1, 0, 0, 78, /* 0x 970 */ - 50, 68, 83, 77, 65, 53, 48, 0,195, 1, 0, 0, 78, 50, 68, 70, /* 0x 980 */ - 65, 83, 53, 48, 0,197, 1, 0, 0, 78, 50, 68, 68, 69, 67, 53, /* 0x 990 */ - 48, 0,200, 1, 0, 0, 78, 50, 68, 83, 77, 65, 54, 48, 0,209, /* 0x 9a0 */ - 1, 0, 0, 0, 0, 0, 0,221, 1, 0, 0, 78, 50, 68, 68, 69, /* 0x 9b0 */ - 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 68, 70, 65, 83, 54, 48, /* 0x 9c0 */ - 0,221, 1, 0, 0, 0, 0, 0, 0,232, 1, 0, 0, 78, 50, 68, /* 0x 9d0 */ - 70, 65, 83, 54, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0,246, 1, /* 0x 9e0 */ - 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, /* 0x 9f0 */ - 50, 68, 70, 65, 83, 54, 49, 0,246, 1, 0, 0, 0, 0, 0, 0, /* 0x a00 */ - 12, 2, 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 0, 0, 0, /* 0x a10 */ - 0, 78, 50, 68, 68, 69, 67, 54, 48, 0, 12, 2, 0, 0, 78, 82, /* 0x a20 */ - 86, 50, 68, 69, 78, 68, 0, 12, 2, 0, 0, 78, 50, 69, 83, 77, /* 0x a30 */ - 65, 49, 48, 0, 12, 2, 0, 0, 0, 0, 0, 0, 14, 2, 0, 0, /* 0x a40 */ - 78, 50, 69, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 69, /* 0x a50 */ - 70, 65, 83, 49, 48, 0, 15, 2, 0, 0, 0, 0, 0, 0, 17, 2, /* 0x a60 */ - 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, /* 0x a70 */ - 50, 69, 70, 65, 83, 49, 49, 0, 17, 2, 0, 0, 78, 50, 69, 68, /* 0x a80 */ - 69, 67, 49, 48, 0, 23, 2, 0, 0, 78, 50, 69, 83, 77, 65, 50, /* 0x a90 */ - 48, 0, 34, 2, 0, 0, 0, 0, 0, 0, 36, 2, 0, 0, 78, 50, /* 0x aa0 */ - 69, 83, 77, 65, 49, 48, 0, 2, 0, 0, 0, 78, 50, 69, 70, 65, /* 0x ab0 */ - 83, 50, 48, 0, 39, 2, 0, 0, 0, 0, 0, 0, 43, 2, 0, 0, /* 0x ac0 */ - 78, 50, 69, 70, 65, 83, 49, 49, 0, 0, 0, 0, 0, 78, 50, 69, /* 0x ad0 */ - 68, 69, 67, 50, 48, 0, 48, 2, 0, 0, 78, 50, 69, 83, 77, 65, /* 0x ae0 */ - 51, 48, 0, 61, 2, 0, 0, 0, 0, 0, 0, 74, 2, 0, 0, 78, /* 0x af0 */ - 50, 69, 68, 69, 67, 51, 48, 0, 31, 0, 0, 0, 78, 50, 69, 70, /* 0x b00 */ - 65, 83, 51, 48, 0, 74, 2, 0, 0, 0, 0, 0, 0, 80, 2, 0, /* 0x b10 */ - 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 31, 0, 0, 0, 0, 0, /* 0x b20 */ - 0, 0, 89, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 31, /* 0x b30 */ - 0, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 89, 2, 0, 0, /* 0x b40 */ - 0, 0, 0, 0,105, 2, 0, 0, 78, 50, 69, 68, 69, 67, 50, 48, /* 0x b50 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 2, 0, 0, 78, 50, 69, /* 0x b60 */ - 68, 69, 67, 53, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,138, 2, /* 0x b70 */ - 0, 0, 78, 50, 69, 68, 69, 67, 54, 48, 0, 0, 0, 0, 0, 78, /* 0x b80 */ - 50, 69, 83, 77, 65, 52, 48, 0,184, 2, 0, 0, 0, 0, 0, 0, /* 0x b90 */ -197, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 82, 0, 0, /* 0x ba0 */ - 0, 78, 50, 69, 70, 65, 83, 52, 48, 0,197, 2, 0, 0, 0, 0, /* 0x bb0 */ - 0, 0,201, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 82, /* 0x bc0 */ - 0, 0, 0, 0, 0, 0, 0,212, 2, 0, 0, 78, 50, 69, 68, 69, /* 0x bd0 */ - 67, 51, 48, 0, 82, 0, 0, 0, 78, 50, 69, 68, 85, 77, 77, 49, /* 0x be0 */ - 0,212, 2, 0, 0, 78, 50, 69, 83, 77, 65, 53, 48, 0,212, 2, /* 0x bf0 */ - 0, 0, 78, 50, 69, 70, 65, 83, 53, 48, 0,214, 2, 0, 0, 78, /* 0x c00 */ - 50, 69, 68, 69, 67, 53, 48, 0,217, 2, 0, 0, 78, 50, 69, 83, /* 0x c10 */ - 77, 65, 54, 48, 0,226, 2, 0, 0, 0, 0, 0, 0,238, 2, 0, /* 0x c20 */ - 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, /* 0x c30 */ - 69, 70, 65, 83, 54, 48, 0,238, 2, 0, 0, 0, 0, 0, 0,249, /* 0x c40 */ - 2, 0, 0, 78, 50, 69, 70, 65, 83, 54, 49, 0, 0, 0, 0, 0, /* 0x c50 */ - 0, 0, 0, 0, 7, 3, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, /* 0x c60 */ - 0, 0, 0, 0, 0, 78, 50, 69, 70, 65, 83, 54, 49, 0, 7, 3, /* 0x c70 */ - 0, 0, 0, 0, 0, 0, 29, 3, 0, 0, 78, 50, 69, 68, 69, 67, /* 0x c80 */ - 49, 48, 0, 0, 0, 0, 0, 78, 50, 69, 68, 69, 67, 54, 48, 0, /* 0x c90 */ - 29, 3, 0, 0, 78, 82, 86, 50, 69, 69, 78, 68, 0, 29, 3, 0, /* 0x ca0 */ - 0, 67, 65, 76, 76, 84, 82, 48, 48, 0, 29, 3, 0, 0, 67, 84, /* 0x cb0 */ - 67, 76, 69, 86, 69, 49, 0, 43, 3, 0, 0, 0, 0, 0, 0, 48, /* 0x cc0 */ - 3, 0, 0, 67, 65, 76, 76, 84, 82, 48, 48, 0, 5, 0, 0, 0, /* 0x cd0 */ - 67, 65, 76, 76, 84, 82, 48, 49, 0, 48, 3, 0, 0, 67, 84, 68, /* 0x ce0 */ - 85, 77, 77, 89, 49, 0, 53, 3, 0, 0, 67, 84, 66, 83, 72, 82, /* 0x cf0 */ - 48, 49, 0, 53, 3, 0, 0, 67, 84, 66, 82, 79, 82, 48, 49, 0, /* 0x d00 */ - 57, 3, 0, 0, 67, 84, 66, 83, 87, 65, 48, 49, 0, 59, 3, 0, /* 0x d10 */ - 0, 67, 65, 76, 76, 84, 82, 48, 50, 0, 64, 3, 0, 0, 0, 0, /* 0x d20 */ - 0, 0, 78, 3, 0, 0, 67, 65, 76, 76, 84, 82, 48, 48, 0, 10, /* 0x d30 */ - 0, 0, 0, 67, 65, 76, 76, 84, 82, 49, 48, 0, 78, 3, 0, 0, /* 0x d40 */ - 67, 65, 76, 76, 84, 82, 69, 56, 0, 83, 3, 0, 0, 67, 65, 76, /* 0x d50 */ - 76, 84, 82, 69, 57, 0, 85, 3, 0, 0, 67, 65, 76, 76, 84, 82, /* 0x d60 */ - 49, 49, 0, 87, 3, 0, 0, 0, 0, 0, 0, 91, 3, 0, 0, 67, /* 0x d70 */ - 65, 76, 76, 84, 82, 49, 51, 0, 5, 0, 0, 0, 67, 84, 67, 76, /* 0x d80 */ - 69, 86, 69, 50, 0, 91, 3, 0, 0, 0, 0, 0, 0, 96, 3, 0, /* 0x d90 */ - 0, 67, 65, 76, 76, 84, 82, 49, 49, 0, 0, 0, 0, 0, 67, 65, /* 0x da0 */ - 76, 76, 84, 82, 49, 50, 0, 96, 3, 0, 0, 67, 84, 68, 85, 77, /* 0x db0 */ - 77, 89, 50, 0, 98, 3, 0, 0, 67, 84, 66, 83, 72, 82, 49, 49, /* 0x dc0 */ - 0, 98, 3, 0, 0, 67, 84, 66, 82, 79, 82, 49, 49, 0,102, 3, /* 0x dd0 */ - 0, 0, 67, 84, 66, 83, 87, 65, 49, 49, 0,104, 3, 0, 0, 67, /* 0x de0 */ - 65, 76, 76, 84, 82, 49, 51, 0,109, 3, 0, 0, 0, 0, 0, 0, /* 0x df0 */ -114, 3, 0, 0, 67, 65, 76, 76, 84, 82, 49, 48, 0, 5, 0, 0, /* 0x e00 */ - 0, 67, 84, 84, 72, 69, 69, 78, 68, 0,114, 3, 0, 0, 76, 69, /* 0x e10 */ - 88, 69, 67, 48, 49, 53, 0,114, 3, 0, 0, 76, 69, 88, 69, 67, /* 0x e20 */ - 49, 49, 48, 0,146, 3, 0, 0, 76, 69, 88, 69, 67, 49, 48, 48, /* 0x e30 */ - 0,152, 3, 0, 0, 76, 88, 85, 78, 70, 48, 48, 48, 0,153, 3, /* 0x e40 */ - 0, 0, 0, 0, 0, 0,155, 3, 0, 0, 76, 88, 85, 78, 70, 48, /* 0x e50 */ - 49, 48, 0, 5, 0, 0, 0, 76, 88, 85, 78, 70, 48, 48, 50, 0, /* 0x e60 */ -155, 3, 0, 0, 77, 82, 85, 66, 89, 84, 69, 48, 0,160, 3, 0, /* 0x e70 */ - 0, 76, 88, 77, 82, 85, 48, 48, 53, 0,162, 3, 0, 0, 76, 88, /* 0x e80 */ - 77, 82, 85, 48, 48, 54, 0,167, 3, 0, 0, 76, 88, 77, 82, 85, /* 0x e90 */ - 48, 48, 55, 0,174, 3, 0, 0, 76, 88, 85, 78, 70, 48, 48, 56, /* 0x ea0 */ - 0,181, 3, 0, 0, 76, 88, 85, 78, 70, 48, 49, 48, 0,185, 3, /* 0x eb0 */ - 0, 0, 0, 0, 0, 0,190, 3, 0, 0, 76, 88, 85, 78, 70, 48, /* 0x ec0 */ - 52, 50, 0, 0, 0, 0, 0, 76, 88, 74, 67, 67, 48, 49, 48, 0, /* 0x ed0 */ -190, 3, 0, 0, 76, 88, 77, 82, 85, 48, 52, 53, 0,193, 3, 0, /* 0x ee0 */ - 0, 76, 88, 77, 82, 85, 48, 52, 54, 0,196, 3, 0, 0, 76, 88, /* 0x ef0 */ - 74, 67, 67, 48, 50, 48, 0,198, 3, 0, 0, 0, 0, 0, 0,200, /* 0x f00 */ - 3, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0, 0, 0, 0, 0, /* 0x f10 */ - 76, 88, 74, 67, 67, 48, 50, 49, 0,200, 3, 0, 0, 0, 0, 0, /* 0x f20 */ - 0,205, 3, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0, 0, 0, /* 0x f30 */ - 0, 0, 76, 88, 74, 67, 67, 48, 50, 51, 0,205, 3, 0, 0, 76, /* 0x f40 */ - 88, 85, 78, 70, 48, 51, 55, 0,212, 3, 0, 0, 76, 88, 85, 78, /* 0x f50 */ - 70, 51, 56, 54, 0,214, 3, 0, 0, 76, 88, 85, 78, 70, 51, 56, /* 0x f60 */ - 55, 0,215, 3, 0, 0, 76, 88, 85, 78, 70, 51, 56, 56, 0,224, /* 0x f70 */ - 3, 0, 0, 0, 0, 0, 0,227, 3, 0, 0, 76, 88, 85, 78, 70, /* 0x f80 */ - 48, 52, 48, 0, 0, 0, 0, 0, 76, 88, 85, 78, 70, 52, 56, 54, /* 0x f90 */ - 0,227, 3, 0, 0, 76, 88, 85, 78, 70, 52, 56, 55, 0,231, 3, /* 0x fa0 */ - 0, 0, 0, 0, 0, 0,233, 3, 0, 0, 76, 88, 85, 78, 70, 48, /* 0x fb0 */ - 52, 48, 0, 0, 0, 0, 0, 76, 88, 77, 82, 85, 48, 54, 53, 0, /* 0x fc0 */ -233, 3, 0, 0, 0, 0, 0, 0,237, 3, 0, 0, 76, 88, 77, 82, /* 0x fd0 */ - 85, 48, 55, 48, 0, 5, 0, 0, 0, 77, 82, 85, 66, 89, 84, 69, /* 0x fe0 */ - 51, 0,237, 3, 0, 0, 77, 82, 85, 65, 82, 66, 51, 48, 0,239, /* 0x ff0 */ - 3, 0, 0, 77, 82, 85, 66, 73, 84, 83, 51, 0,240, 3, 0, 0, /* 0x1000 */ - 77, 82, 85, 65, 82, 66, 52, 48, 0,242, 3, 0, 0, 76, 88, 77, /* 0x1010 */ - 82, 85, 48, 55, 48, 0,246, 3, 0, 0, 0, 0, 0, 0,251, 3, /* 0x1020 */ - 0, 0, 76, 88, 85, 78, 70, 48, 52, 48, 0, 0, 0, 0, 0, 77, /* 0x1030 */ - 82, 85, 66, 89, 84, 69, 52, 0,254, 3, 0, 0, 77, 82, 85, 66, /* 0x1040 */ - 73, 84, 83, 52, 0, 1, 4, 0, 0, 77, 82, 85, 65, 82, 66, 53, /* 0x1050 */ - 48, 0, 3, 4, 0, 0, 76, 88, 77, 82, 85, 48, 56, 48, 0, 9, /* 0x1060 */ - 4, 0, 0, 77, 82, 85, 66, 89, 84, 69, 53, 0, 12, 4, 0, 0, /* 0x1070 */ - 77, 82, 85, 65, 82, 66, 54, 48, 0, 14, 4, 0, 0, 77, 82, 85, /* 0x1080 */ - 66, 73, 84, 83, 53, 0, 15, 4, 0, 0, 77, 82, 85, 65, 82, 66, /* 0x1090 */ - 55, 48, 0, 17, 4, 0, 0, 76, 88, 77, 82, 85, 48, 57, 48, 0, /* 0x10a0 */ - 21, 4, 0, 0, 0, 0, 0, 0, 28, 4, 0, 0, 76, 88, 77, 82, /* 0x10b0 */ - 85, 49, 48, 48, 0, 10, 0, 0, 0, 77, 82, 85, 66, 89, 84, 69, /* 0x10c0 */ - 54, 0, 32, 4, 0, 0, 77, 82, 85, 65, 82, 66, 56, 48, 0, 34, /* 0x10d0 */ - 4, 0, 0, 77, 82, 85, 66, 73, 84, 83, 54, 0, 35, 4, 0, 0, /* 0x10e0 */ - 77, 82, 85, 65, 82, 66, 57, 48, 0, 37, 4, 0, 0, 76, 88, 77, /* 0x10f0 */ - 82, 85, 49, 48, 48, 0, 41, 4, 0, 0, 76, 88, 85, 78, 70, 48, /* 0x1100 */ - 52, 48, 0, 57, 4, 0, 0, 76, 88, 77, 82, 85, 49, 49, 48, 0, /* 0x1110 */ - 62, 4, 0, 0, 76, 88, 77, 82, 85, 49, 49, 49, 0, 65, 4, 0, /* 0x1120 */ - 0, 76, 88, 85, 78, 70, 48, 52, 49, 0, 67, 4, 0, 0, 0, 0, /* 0x1130 */ - 0, 0, 74, 4, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0, 0, /* 0x1140 */ - 0, 0, 0, 76, 88, 85, 78, 70, 48, 52, 50, 0, 74, 4, 0, 0, /* 0x1150 */ - 76, 69, 88, 69, 67, 48, 49, 54, 0, 74, 4, 0, 0, 0, 0, 0, /* 0x1160 */ - 0, 76, 4, 0, 0, 76, 88, 85, 78, 70, 48, 52, 50, 0, 0, 0, /* 0x1170 */ - 0, 0, 76, 88, 77, 82, 85, 48, 49, 48, 0, 76, 4, 0, 0, 76, /* 0x1180 */ - 88, 74, 77, 80, 65, 48, 48, 0, 77, 4, 0, 0, 76, 88, 67, 65, /* 0x1190 */ - 76, 76, 66, 48, 0, 79, 4, 0, 0, 76, 88, 85, 78, 70, 48, 50, /* 0x11a0 */ - 49, 0, 81, 4, 0, 0, 76, 88, 77, 82, 85, 48, 50, 50, 0, 87, /* 0x11b0 */ - 4, 0, 0, 76, 88, 74, 77, 80, 65, 48, 49, 0, 90, 4, 0, 0, /* 0x11c0 */ - 76, 88, 67, 65, 76, 76, 66, 49, 0, 92, 4, 0, 0, 77, 82, 85, /* 0x11d0 */ - 66, 73, 84, 83, 49, 0, 94, 4, 0, 0, 76, 88, 77, 82, 85, 48, /* 0x11e0 */ - 51, 48, 0, 95, 4, 0, 0, 77, 82, 85, 66, 89, 84, 69, 49, 0, /* 0x11f0 */ - 97, 4, 0, 0, 77, 82, 85, 65, 82, 66, 49, 48, 0, 99, 4, 0, /* 0x1200 */ - 0, 76, 88, 77, 82, 85, 48, 52, 48, 0,100, 4, 0, 0, 0, 0, /* 0x1210 */ - 0, 0,102, 4, 0, 0, 76, 88, 77, 82, 85, 48, 51, 48, 0, 0, /* 0x1220 */ - 0, 0, 0, 76, 88, 85, 78, 70, 48, 51, 48, 0,102, 4, 0, 0, /* 0x1230 */ - 76, 88, 74, 67, 67, 48, 48, 48, 0,108, 4, 0, 0, 0, 0, 0, /* 0x1240 */ - 0,116, 4, 0, 0, 76, 88, 74, 67, 67, 48, 49, 48, 0, 0, 0, /* 0x1250 */ - 0, 0, 76, 88, 67, 74, 48, 77, 82, 85, 0,116, 4, 0, 0, 76, /* 0x1260 */ - 88, 67, 74, 49, 77, 82, 85, 0,118, 4, 0, 0, 76, 88, 67, 65, /* 0x1270 */ - 76, 74, 77, 80, 0,121, 4, 0, 0, 76, 88, 67, 65, 76, 76, 48, /* 0x1280 */ - 48, 0,124, 4, 0, 0, 0, 0, 0, 0,126, 4, 0, 0, 76, 88, /* 0x1290 */ - 85, 78, 70, 48, 51, 55, 0, 0, 0, 0, 0, 76, 88, 67, 65, 76, /* 0x12a0 */ - 76, 48, 49, 0,126, 4, 0, 0, 76, 88, 67, 74, 50, 77, 82, 85, /* 0x12b0 */ - 0,129, 4, 0, 0, 0, 0, 0, 0,131, 4, 0, 0, 76, 88, 85, /* 0x12c0 */ - 78, 70, 48, 51, 55, 0, 0, 0, 0, 0, 76, 88, 67, 74, 52, 77, /* 0x12d0 */ - 82, 85, 0,131, 4, 0, 0, 0, 0, 0, 0,133, 4, 0, 0, 76, /* 0x12e0 */ - 88, 85, 78, 70, 48, 51, 52, 0, 0, 0, 0, 0, 76, 88, 67, 74, /* 0x12f0 */ - 54, 77, 82, 85, 0,133, 4, 0, 0, 0, 0, 0, 0,135, 4, 0, /* 0x1300 */ - 0, 76, 88, 67, 74, 56, 77, 82, 85, 0, 1, 0, 0, 0, 76, 88, /* 0x1310 */ - 67, 74, 55, 77, 82, 85, 0,135, 4, 0, 0, 0, 0, 0, 0,137, /* 0x1320 */ - 4, 0, 0, 76, 88, 67, 74, 56, 77, 82, 85, 0, 1, 0, 0, 0, /* 0x1330 */ - 76, 88, 67, 74, 56, 77, 82, 85, 0,137, 4, 0, 0, 0, 0, 0, /* 0x1340 */ - 0,140, 4, 0, 0, 76, 88, 85, 78, 70, 48, 51, 55, 0, 0, 0, /* 0x1350 */ - 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0,140, 4, 0, 0, 0, /* 0x1360 */ - 0, 0, 0,145, 4, 0, 0, 76, 88, 85, 78, 70, 48, 51, 48, 0, /* 0x1370 */ - 0, 0, 0, 0, 76, 88, 77, 82, 85, 48, 53, 53, 0,145, 4, 0, /* 0x1380 */ - 0, 77, 82, 85, 66, 89, 84, 69, 50, 0,147, 4, 0, 0, 77, 82, /* 0x1390 */ - 85, 66, 73, 84, 83, 50, 0,152, 4, 0, 0, 77, 82, 85, 65, 82, /* 0x13a0 */ - 66, 50, 48, 0,157, 4, 0, 0, 76, 88, 77, 82, 85, 48, 53, 55, /* 0x13b0 */ - 0,162, 4, 0, 0, 76, 88, 77, 82, 85, 48, 53, 56, 0,168, 4, /* 0x13c0 */ - 0, 0, 76, 88, 85, 78, 70, 48, 51, 53, 0,169, 4, 0, 0, 67, /* 0x13d0 */ - 75, 76, 76, 84, 82, 48, 48, 0,175, 4, 0, 0, 0, 0, 0, 0, /* 0x13e0 */ -179, 4, 0, 0, 67, 75, 76, 76, 84, 82, 50, 48, 0, 30, 0, 0, /* 0x13f0 */ - 0, 67, 75, 76, 76, 84, 82, 49, 48, 0,184, 4, 0, 0, 0, 0, /* 0x1400 */ - 0, 0,198, 4, 0, 0, 67, 75, 76, 76, 84, 82, 50, 48, 0, 6, /* 0x1410 */ - 0, 0, 0, 67, 75, 76, 76, 84, 82, 50, 48, 0,198, 4, 0, 0, /* 0x1420 */ - 0, 0, 0, 0,204, 4, 0, 0, 67, 75, 76, 76, 84, 82, 52, 48, /* 0x1430 */ - 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 4, 0, 0, 67, 75, 76, /* 0x1440 */ - 76, 84, 82, 52, 48, 0, 0, 0, 0, 0, 67, 75, 76, 76, 84, 82, /* 0x1450 */ - 51, 48, 0,231, 4, 0, 0, 0, 0, 0, 0,238, 4, 0, 0, 67, /* 0x1460 */ - 75, 76, 76, 84, 82, 49, 48, 0, 14, 0, 0, 0, 67, 75, 76, 76, /* 0x1470 */ - 84, 82, 52, 48, 0,238, 4, 0, 0, 0, 0, 0, 0,243, 4, 0, /* 0x1480 */ - 0, 67, 75, 76, 76, 84, 82, 48, 48, 0, 4, 0, 0, 0, 76, 69, /* 0x1490 */ - 88, 69, 67, 48, 49, 55, 0,243, 4, 0, 0, 76, 69, 88, 69, 67, /* 0x14a0 */ - 48, 50, 48, 0,245, 4, 0, 0, 88, 84, 72, 69, 69, 78, 68, 88, /* 0x14b0 */ - 0, 40, 5, 0, 0,255,255,255,255, 40, 5 /* 0x14c0 */ + 1,127, 0, 97,195, 93,187, 0, 16, 64, 0, 0, 76, 69, 88, 69, /* 0x 4f0 */ + 67, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, /* 0x 500 */ + 0, 76, 69, 88, 69, 67, 48, 50, 48, 0, 0, 0, 0, 0, 76, 69, /* 0x 510 */ + 88, 69, 67, 48, 48, 57, 0, 5, 0, 0, 0, 76, 69, 88, 69, 67, /* 0x 520 */ + 48, 49, 48, 0, 10, 0, 0, 0, 78, 50, 66, 83, 77, 65, 49, 48, /* 0x 530 */ + 0, 24, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 78, 50, 66, /* 0x 540 */ + 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 66, 70, 65, 83, /* 0x 550 */ + 49, 48, 0, 27, 0, 0, 0, 0, 0, 0, 0, 29, 0, 0, 0, 78, /* 0x 560 */ + 50, 66, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 66, 70, /* 0x 570 */ + 65, 83, 49, 49, 0, 29, 0, 0, 0, 78, 50, 66, 68, 69, 67, 49, /* 0x 580 */ + 48, 0, 35, 0, 0, 0, 78, 50, 66, 83, 77, 65, 50, 48, 0, 46, /* 0x 590 */ + 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 78, 50, 66, 83, 77, /* 0x 5a0 */ + 65, 49, 48, 0, 2, 0, 0, 0, 78, 50, 66, 70, 65, 83, 50, 48, /* 0x 5b0 */ + 0, 51, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 78, 50, 66, /* 0x 5c0 */ + 70, 65, 83, 49, 49, 0, 0, 0, 0, 0, 78, 50, 66, 68, 69, 67, /* 0x 5d0 */ + 50, 48, 0, 60, 0, 0, 0, 78, 50, 66, 83, 77, 65, 51, 48, 0, /* 0x 5e0 */ + 73, 0, 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, 78, 50, 66, 68, /* 0x 5f0 */ + 69, 67, 50, 48, 0, 0, 0, 0, 0, 78, 50, 66, 70, 65, 83, 51, /* 0x 600 */ + 48, 0, 86, 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 78, 50, /* 0x 610 */ + 66, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,101, /* 0x 620 */ + 0, 0, 0, 78, 50, 66, 68, 69, 67, 50, 48, 0, 0, 0, 0, 0, /* 0x 630 */ + 78, 50, 66, 68, 69, 67, 51, 48, 0,101, 0, 0, 0, 0, 0, 0, /* 0x 640 */ + 0,119, 0, 0, 0, 78, 50, 66, 68, 69, 67, 54, 48, 0, 0, 0, /* 0x 650 */ + 0, 0, 0, 0, 0, 0,149, 0, 0, 0, 78, 50, 66, 68, 69, 67, /* 0x 660 */ + 53, 48, 0, 0, 0, 0, 0, 78, 50, 66, 83, 77, 65, 52, 48, 0, /* 0x 670 */ +163, 0, 0, 0, 0, 0, 0, 0,176, 0, 0, 0, 78, 50, 66, 68, /* 0x 680 */ + 69, 67, 51, 48, 0, 49, 0, 0, 0, 78, 50, 66, 70, 65, 83, 52, /* 0x 690 */ + 48, 0,176, 0, 0, 0, 0, 0, 0, 0,180, 0, 0, 0, 78, 50, /* 0x 6a0 */ + 66, 68, 69, 67, 51, 48, 0, 49, 0, 0, 0, 0, 0, 0, 0,191, /* 0x 6b0 */ + 0, 0, 0, 78, 50, 66, 68, 69, 67, 51, 48, 0, 49, 0, 0, 0, /* 0x 6c0 */ + 78, 50, 66, 68, 85, 77, 77, 49, 0,191, 0, 0, 0, 78, 50, 66, /* 0x 6d0 */ + 83, 77, 65, 53, 48, 0,191, 0, 0, 0, 78, 50, 66, 70, 65, 83, /* 0x 6e0 */ + 53, 48, 0,193, 0, 0, 0, 78, 50, 66, 68, 69, 67, 53, 48, 0, /* 0x 6f0 */ +196, 0, 0, 0, 78, 50, 66, 83, 77, 65, 54, 48, 0,205, 0, 0, /* 0x 700 */ + 0, 0, 0, 0, 0,217, 0, 0, 0, 78, 50, 66, 68, 69, 67, 49, /* 0x 710 */ + 48, 0, 0, 0, 0, 0, 78, 50, 66, 70, 65, 83, 54, 48, 0,217, /* 0x 720 */ + 0, 0, 0, 0, 0, 0, 0,228, 0, 0, 0, 78, 50, 66, 70, 65, /* 0x 730 */ + 83, 54, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0,242, 0, 0, 0, /* 0x 740 */ + 78, 50, 66, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 66, /* 0x 750 */ + 70, 65, 83, 54, 49, 0,242, 0, 0, 0, 0, 0, 0, 0, 8, 1, /* 0x 760 */ + 0, 0, 78, 50, 66, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, /* 0x 770 */ + 50, 66, 68, 69, 67, 54, 48, 0, 8, 1, 0, 0, 78, 82, 86, 50, /* 0x 780 */ + 66, 69, 78, 68, 0, 8, 1, 0, 0, 78, 50, 68, 83, 77, 65, 49, /* 0x 790 */ + 48, 0, 8, 1, 0, 0, 0, 0, 0, 0, 10, 1, 0, 0, 78, 50, /* 0x 7a0 */ + 68, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 68, 70, 65, /* 0x 7b0 */ + 83, 49, 48, 0, 11, 1, 0, 0, 0, 0, 0, 0, 13, 1, 0, 0, /* 0x 7c0 */ + 78, 50, 68, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 68, /* 0x 7d0 */ + 70, 65, 83, 49, 49, 0, 13, 1, 0, 0, 78, 50, 68, 68, 69, 67, /* 0x 7e0 */ + 49, 48, 0, 19, 1, 0, 0, 78, 50, 68, 83, 77, 65, 50, 48, 0, /* 0x 7f0 */ + 30, 1, 0, 0, 0, 0, 0, 0, 32, 1, 0, 0, 78, 50, 68, 83, /* 0x 800 */ + 77, 65, 49, 48, 0, 2, 0, 0, 0, 78, 50, 68, 70, 65, 83, 50, /* 0x 810 */ + 48, 0, 35, 1, 0, 0, 0, 0, 0, 0, 39, 1, 0, 0, 78, 50, /* 0x 820 */ + 68, 70, 65, 83, 49, 49, 0, 0, 0, 0, 0, 78, 50, 68, 68, 69, /* 0x 830 */ + 67, 50, 48, 0, 44, 1, 0, 0, 78, 50, 68, 83, 77, 65, 51, 48, /* 0x 840 */ + 0, 57, 1, 0, 0, 0, 0, 0, 0, 70, 1, 0, 0, 78, 50, 68, /* 0x 850 */ + 68, 69, 67, 51, 48, 0, 16, 0, 0, 0, 78, 50, 68, 70, 65, 83, /* 0x 860 */ + 51, 48, 0, 70, 1, 0, 0, 0, 0, 0, 0, 76, 1, 0, 0, 78, /* 0x 870 */ + 50, 68, 68, 69, 67, 51, 48, 0, 16, 0, 0, 0, 0, 0, 0, 0, /* 0x 880 */ + 85, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 16, 0, 0, /* 0x 890 */ + 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 85, 1, 0, 0, 0, 0, /* 0x 8a0 */ + 0, 0,101, 1, 0, 0, 78, 50, 68, 68, 69, 67, 50, 48, 0, 0, /* 0x 8b0 */ + 0, 0, 0, 0, 0, 0, 0,119, 1, 0, 0, 78, 50, 68, 68, 69, /* 0x 8c0 */ + 67, 54, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,153, 1, 0, 0, /* 0x 8d0 */ + 78, 50, 68, 68, 69, 67, 53, 48, 0, 0, 0, 0, 0, 78, 50, 68, /* 0x 8e0 */ + 83, 77, 65, 52, 48, 0,167, 1, 0, 0, 0, 0, 0, 0,180, 1, /* 0x 8f0 */ + 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 69, 0, 0, 0, 78, /* 0x 900 */ + 50, 68, 70, 65, 83, 52, 48, 0,180, 1, 0, 0, 0, 0, 0, 0, /* 0x 910 */ +184, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, 48, 0, 69, 0, 0, /* 0x 920 */ + 0, 0, 0, 0, 0,195, 1, 0, 0, 78, 50, 68, 68, 69, 67, 51, /* 0x 930 */ + 48, 0, 69, 0, 0, 0, 78, 50, 68, 68, 85, 77, 77, 49, 0,195, /* 0x 940 */ + 1, 0, 0, 78, 50, 68, 83, 77, 65, 53, 48, 0,195, 1, 0, 0, /* 0x 950 */ + 78, 50, 68, 70, 65, 83, 53, 48, 0,197, 1, 0, 0, 78, 50, 68, /* 0x 960 */ + 68, 69, 67, 53, 48, 0,200, 1, 0, 0, 78, 50, 68, 83, 77, 65, /* 0x 970 */ + 54, 48, 0,209, 1, 0, 0, 0, 0, 0, 0,221, 1, 0, 0, 78, /* 0x 980 */ + 50, 68, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 68, 70, /* 0x 990 */ + 65, 83, 54, 48, 0,221, 1, 0, 0, 0, 0, 0, 0,232, 1, 0, /* 0x 9a0 */ + 0, 78, 50, 68, 70, 65, 83, 54, 49, 0, 0, 0, 0, 0, 0, 0, /* 0x 9b0 */ + 0, 0,246, 1, 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, 0, 0, /* 0x 9c0 */ + 0, 0, 0, 78, 50, 68, 70, 65, 83, 54, 49, 0,246, 1, 0, 0, /* 0x 9d0 */ + 0, 0, 0, 0, 12, 2, 0, 0, 78, 50, 68, 68, 69, 67, 49, 48, /* 0x 9e0 */ + 0, 0, 0, 0, 0, 78, 50, 68, 68, 69, 67, 54, 48, 0, 12, 2, /* 0x 9f0 */ + 0, 0, 78, 82, 86, 50, 68, 69, 78, 68, 0, 12, 2, 0, 0, 78, /* 0x a00 */ + 50, 69, 83, 77, 65, 49, 48, 0, 12, 2, 0, 0, 0, 0, 0, 0, /* 0x a10 */ + 14, 2, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 4, 0, 0, /* 0x a20 */ + 0, 78, 50, 69, 70, 65, 83, 49, 48, 0, 15, 2, 0, 0, 0, 0, /* 0x a30 */ + 0, 0, 17, 2, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 4, /* 0x a40 */ + 0, 0, 0, 78, 50, 69, 70, 65, 83, 49, 49, 0, 17, 2, 0, 0, /* 0x a50 */ + 78, 50, 69, 68, 69, 67, 49, 48, 0, 23, 2, 0, 0, 78, 50, 69, /* 0x a60 */ + 83, 77, 65, 50, 48, 0, 34, 2, 0, 0, 0, 0, 0, 0, 36, 2, /* 0x a70 */ + 0, 0, 78, 50, 69, 83, 77, 65, 49, 48, 0, 2, 0, 0, 0, 78, /* 0x a80 */ + 50, 69, 70, 65, 83, 50, 48, 0, 39, 2, 0, 0, 0, 0, 0, 0, /* 0x a90 */ + 43, 2, 0, 0, 78, 50, 69, 70, 65, 83, 49, 49, 0, 0, 0, 0, /* 0x aa0 */ + 0, 78, 50, 69, 68, 69, 67, 50, 48, 0, 48, 2, 0, 0, 78, 50, /* 0x ab0 */ + 69, 83, 77, 65, 51, 48, 0, 61, 2, 0, 0, 0, 0, 0, 0, 74, /* 0x ac0 */ + 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 31, 0, 0, 0, /* 0x ad0 */ + 78, 50, 69, 70, 65, 83, 51, 48, 0, 74, 2, 0, 0, 0, 0, 0, /* 0x ae0 */ + 0, 80, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, 31, 0, /* 0x af0 */ + 0, 0, 0, 0, 0, 0, 89, 2, 0, 0, 78, 50, 69, 68, 69, 67, /* 0x b00 */ + 51, 48, 0, 31, 0, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, 0, /* 0x b10 */ + 89, 2, 0, 0, 0, 0, 0, 0,105, 2, 0, 0, 78, 50, 69, 68, /* 0x b20 */ + 69, 67, 50, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 2, 0, /* 0x b30 */ + 0, 78, 50, 69, 68, 69, 67, 53, 48, 0, 0, 0, 0, 0, 0, 0, /* 0x b40 */ + 0, 0,138, 2, 0, 0, 78, 50, 69, 68, 69, 67, 54, 48, 0, 0, /* 0x b50 */ + 0, 0, 0, 78, 50, 69, 83, 77, 65, 52, 48, 0,184, 2, 0, 0, /* 0x b60 */ + 0, 0, 0, 0,197, 2, 0, 0, 78, 50, 69, 68, 69, 67, 51, 48, /* 0x b70 */ + 0, 82, 0, 0, 0, 78, 50, 69, 70, 65, 83, 52, 48, 0,197, 2, /* 0x b80 */ + 0, 0, 0, 0, 0, 0,201, 2, 0, 0, 78, 50, 69, 68, 69, 67, /* 0x b90 */ + 51, 48, 0, 82, 0, 0, 0, 0, 0, 0, 0,212, 2, 0, 0, 78, /* 0x ba0 */ + 50, 69, 68, 69, 67, 51, 48, 0, 82, 0, 0, 0, 78, 50, 69, 68, /* 0x bb0 */ + 85, 77, 77, 49, 0,212, 2, 0, 0, 78, 50, 69, 83, 77, 65, 53, /* 0x bc0 */ + 48, 0,212, 2, 0, 0, 78, 50, 69, 70, 65, 83, 53, 48, 0,214, /* 0x bd0 */ + 2, 0, 0, 78, 50, 69, 68, 69, 67, 53, 48, 0,217, 2, 0, 0, /* 0x be0 */ + 78, 50, 69, 83, 77, 65, 54, 48, 0,226, 2, 0, 0, 0, 0, 0, /* 0x bf0 */ + 0,238, 2, 0, 0, 78, 50, 69, 68, 69, 67, 49, 48, 0, 0, 0, /* 0x c00 */ + 0, 0, 78, 50, 69, 70, 65, 83, 54, 48, 0,238, 2, 0, 0, 0, /* 0x c10 */ + 0, 0, 0,249, 2, 0, 0, 78, 50, 69, 70, 65, 83, 54, 49, 0, /* 0x c20 */ + 0, 0, 0, 0, 0, 0, 0, 0, 7, 3, 0, 0, 78, 50, 69, 68, /* 0x c30 */ + 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 69, 70, 65, 83, 54, /* 0x c40 */ + 49, 0, 7, 3, 0, 0, 0, 0, 0, 0, 29, 3, 0, 0, 78, 50, /* 0x c50 */ + 69, 68, 69, 67, 49, 48, 0, 0, 0, 0, 0, 78, 50, 69, 68, 69, /* 0x c60 */ + 67, 54, 48, 0, 29, 3, 0, 0, 78, 82, 86, 50, 69, 69, 78, 68, /* 0x c70 */ + 0, 29, 3, 0, 0, 67, 65, 76, 76, 84, 82, 48, 48, 0, 29, 3, /* 0x c80 */ + 0, 0, 67, 84, 67, 76, 69, 86, 69, 49, 0, 43, 3, 0, 0, 0, /* 0x c90 */ + 0, 0, 0, 48, 3, 0, 0, 67, 65, 76, 76, 84, 82, 48, 48, 0, /* 0x ca0 */ + 5, 0, 0, 0, 67, 65, 76, 76, 84, 82, 48, 49, 0, 48, 3, 0, /* 0x cb0 */ + 0, 67, 84, 68, 85, 77, 77, 89, 49, 0, 53, 3, 0, 0, 67, 84, /* 0x cc0 */ + 66, 83, 72, 82, 48, 49, 0, 53, 3, 0, 0, 67, 84, 66, 82, 79, /* 0x cd0 */ + 82, 48, 49, 0, 57, 3, 0, 0, 67, 84, 66, 83, 87, 65, 48, 49, /* 0x ce0 */ + 0, 59, 3, 0, 0, 67, 65, 76, 76, 84, 82, 48, 50, 0, 64, 3, /* 0x cf0 */ + 0, 0, 0, 0, 0, 0, 78, 3, 0, 0, 67, 65, 76, 76, 84, 82, /* 0x d00 */ + 48, 48, 0, 10, 0, 0, 0, 67, 65, 76, 76, 84, 82, 49, 48, 0, /* 0x d10 */ + 78, 3, 0, 0, 67, 65, 76, 76, 84, 82, 69, 56, 0, 83, 3, 0, /* 0x d20 */ + 0, 67, 65, 76, 76, 84, 82, 69, 57, 0, 85, 3, 0, 0, 67, 65, /* 0x d30 */ + 76, 76, 84, 82, 49, 49, 0, 87, 3, 0, 0, 0, 0, 0, 0, 91, /* 0x d40 */ + 3, 0, 0, 67, 65, 76, 76, 84, 82, 49, 51, 0, 5, 0, 0, 0, /* 0x d50 */ + 67, 84, 67, 76, 69, 86, 69, 50, 0, 91, 3, 0, 0, 0, 0, 0, /* 0x d60 */ + 0, 96, 3, 0, 0, 67, 65, 76, 76, 84, 82, 49, 49, 0, 0, 0, /* 0x d70 */ + 0, 0, 67, 65, 76, 76, 84, 82, 49, 50, 0, 96, 3, 0, 0, 67, /* 0x d80 */ + 84, 68, 85, 77, 77, 89, 50, 0, 98, 3, 0, 0, 67, 84, 66, 83, /* 0x d90 */ + 72, 82, 49, 49, 0, 98, 3, 0, 0, 67, 84, 66, 82, 79, 82, 49, /* 0x da0 */ + 49, 0,102, 3, 0, 0, 67, 84, 66, 83, 87, 65, 49, 49, 0,104, /* 0x db0 */ + 3, 0, 0, 67, 65, 76, 76, 84, 82, 49, 51, 0,109, 3, 0, 0, /* 0x dc0 */ + 0, 0, 0, 0,114, 3, 0, 0, 67, 65, 76, 76, 84, 82, 49, 48, /* 0x dd0 */ + 0, 5, 0, 0, 0, 67, 84, 84, 72, 69, 69, 78, 68, 0,114, 3, /* 0x de0 */ + 0, 0, 76, 69, 88, 69, 67, 48, 49, 53, 0,114, 3, 0, 0, 76, /* 0x df0 */ + 69, 88, 69, 67, 49, 49, 48, 0,146, 3, 0, 0, 76, 69, 88, 69, /* 0x e00 */ + 67, 49, 48, 48, 0,152, 3, 0, 0, 76, 88, 85, 78, 70, 48, 48, /* 0x e10 */ + 48, 0,153, 3, 0, 0, 0, 0, 0, 0,155, 3, 0, 0, 76, 88, /* 0x e20 */ + 85, 78, 70, 48, 49, 48, 0, 5, 0, 0, 0, 76, 88, 85, 78, 70, /* 0x e30 */ + 48, 48, 50, 0,155, 3, 0, 0, 77, 82, 85, 66, 89, 84, 69, 48, /* 0x e40 */ + 0,160, 3, 0, 0, 76, 88, 77, 82, 85, 48, 48, 53, 0,162, 3, /* 0x e50 */ + 0, 0, 76, 88, 77, 82, 85, 48, 48, 54, 0,167, 3, 0, 0, 76, /* 0x e60 */ + 88, 77, 82, 85, 48, 48, 55, 0,174, 3, 0, 0, 76, 88, 85, 78, /* 0x e70 */ + 70, 48, 48, 56, 0,181, 3, 0, 0, 76, 88, 85, 78, 70, 48, 49, /* 0x e80 */ + 48, 0,185, 3, 0, 0, 0, 0, 0, 0,190, 3, 0, 0, 76, 88, /* 0x e90 */ + 85, 78, 70, 48, 52, 50, 0, 0, 0, 0, 0, 76, 88, 74, 67, 67, /* 0x ea0 */ + 48, 49, 48, 0,190, 3, 0, 0, 76, 88, 77, 82, 85, 48, 52, 53, /* 0x eb0 */ + 0,193, 3, 0, 0, 76, 88, 77, 82, 85, 48, 52, 54, 0,196, 3, /* 0x ec0 */ + 0, 0, 76, 88, 74, 67, 67, 48, 50, 48, 0,198, 3, 0, 0, 0, /* 0x ed0 */ + 0, 0, 0,200, 3, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0, /* 0x ee0 */ + 0, 0, 0, 0, 76, 88, 74, 67, 67, 48, 50, 49, 0,200, 3, 0, /* 0x ef0 */ + 0, 0, 0, 0, 0,205, 3, 0, 0, 76, 88, 85, 78, 70, 48, 51, /* 0x f00 */ + 52, 0, 0, 0, 0, 0, 76, 88, 74, 67, 67, 48, 50, 51, 0,205, /* 0x f10 */ + 3, 0, 0, 76, 88, 85, 78, 70, 48, 51, 55, 0,212, 3, 0, 0, /* 0x f20 */ + 76, 88, 85, 78, 70, 51, 56, 54, 0,214, 3, 0, 0, 76, 88, 85, /* 0x f30 */ + 78, 70, 51, 56, 55, 0,215, 3, 0, 0, 76, 88, 85, 78, 70, 51, /* 0x f40 */ + 56, 56, 0,224, 3, 0, 0, 0, 0, 0, 0,227, 3, 0, 0, 76, /* 0x f50 */ + 88, 85, 78, 70, 48, 52, 48, 0, 0, 0, 0, 0, 76, 88, 85, 78, /* 0x f60 */ + 70, 52, 56, 54, 0,227, 3, 0, 0, 76, 88, 85, 78, 70, 52, 56, /* 0x f70 */ + 55, 0,231, 3, 0, 0, 0, 0, 0, 0,233, 3, 0, 0, 76, 88, /* 0x f80 */ + 85, 78, 70, 48, 52, 48, 0, 0, 0, 0, 0, 76, 88, 77, 82, 85, /* 0x f90 */ + 48, 54, 53, 0,233, 3, 0, 0, 0, 0, 0, 0,237, 3, 0, 0, /* 0x fa0 */ + 76, 88, 77, 82, 85, 48, 55, 48, 0, 5, 0, 0, 0, 77, 82, 85, /* 0x fb0 */ + 66, 89, 84, 69, 51, 0,237, 3, 0, 0, 77, 82, 85, 65, 82, 66, /* 0x fc0 */ + 51, 48, 0,239, 3, 0, 0, 77, 82, 85, 66, 73, 84, 83, 51, 0, /* 0x fd0 */ +240, 3, 0, 0, 77, 82, 85, 65, 82, 66, 52, 48, 0,242, 3, 0, /* 0x fe0 */ + 0, 76, 88, 77, 82, 85, 48, 55, 48, 0,246, 3, 0, 0, 0, 0, /* 0x ff0 */ + 0, 0,251, 3, 0, 0, 76, 88, 85, 78, 70, 48, 52, 48, 0, 0, /* 0x1000 */ + 0, 0, 0, 77, 82, 85, 66, 89, 84, 69, 52, 0,254, 3, 0, 0, /* 0x1010 */ + 77, 82, 85, 66, 73, 84, 83, 52, 0, 1, 4, 0, 0, 77, 82, 85, /* 0x1020 */ + 65, 82, 66, 53, 48, 0, 3, 4, 0, 0, 76, 88, 77, 82, 85, 48, /* 0x1030 */ + 56, 48, 0, 9, 4, 0, 0, 77, 82, 85, 66, 89, 84, 69, 53, 0, /* 0x1040 */ + 12, 4, 0, 0, 77, 82, 85, 65, 82, 66, 54, 48, 0, 14, 4, 0, /* 0x1050 */ + 0, 77, 82, 85, 66, 73, 84, 83, 53, 0, 15, 4, 0, 0, 77, 82, /* 0x1060 */ + 85, 65, 82, 66, 55, 48, 0, 17, 4, 0, 0, 76, 88, 77, 82, 85, /* 0x1070 */ + 48, 57, 48, 0, 21, 4, 0, 0, 0, 0, 0, 0, 28, 4, 0, 0, /* 0x1080 */ + 76, 88, 77, 82, 85, 49, 48, 48, 0, 10, 0, 0, 0, 77, 82, 85, /* 0x1090 */ + 66, 89, 84, 69, 54, 0, 32, 4, 0, 0, 77, 82, 85, 65, 82, 66, /* 0x10a0 */ + 56, 48, 0, 34, 4, 0, 0, 77, 82, 85, 66, 73, 84, 83, 54, 0, /* 0x10b0 */ + 35, 4, 0, 0, 77, 82, 85, 65, 82, 66, 57, 48, 0, 37, 4, 0, /* 0x10c0 */ + 0, 76, 88, 77, 82, 85, 49, 48, 48, 0, 41, 4, 0, 0, 76, 88, /* 0x10d0 */ + 85, 78, 70, 48, 52, 48, 0, 57, 4, 0, 0, 76, 88, 77, 82, 85, /* 0x10e0 */ + 49, 49, 48, 0, 62, 4, 0, 0, 76, 88, 77, 82, 85, 49, 49, 49, /* 0x10f0 */ + 0, 65, 4, 0, 0, 76, 88, 85, 78, 70, 48, 52, 49, 0, 67, 4, /* 0x1100 */ + 0, 0, 0, 0, 0, 0, 74, 4, 0, 0, 76, 88, 85, 78, 70, 48, /* 0x1110 */ + 51, 52, 0, 0, 0, 0, 0, 76, 88, 85, 78, 70, 48, 52, 50, 0, /* 0x1120 */ + 74, 4, 0, 0, 76, 69, 88, 69, 67, 48, 49, 54, 0, 74, 4, 0, /* 0x1130 */ + 0, 0, 0, 0, 0, 76, 4, 0, 0, 76, 88, 85, 78, 70, 48, 52, /* 0x1140 */ + 50, 0, 0, 0, 0, 0, 76, 88, 77, 82, 85, 48, 49, 48, 0, 76, /* 0x1150 */ + 4, 0, 0, 76, 88, 74, 77, 80, 65, 48, 48, 0, 77, 4, 0, 0, /* 0x1160 */ + 76, 88, 67, 65, 76, 76, 66, 48, 0, 79, 4, 0, 0, 76, 88, 85, /* 0x1170 */ + 78, 70, 48, 50, 49, 0, 81, 4, 0, 0, 76, 88, 77, 82, 85, 48, /* 0x1180 */ + 50, 50, 0, 87, 4, 0, 0, 76, 88, 74, 77, 80, 65, 48, 49, 0, /* 0x1190 */ + 90, 4, 0, 0, 76, 88, 67, 65, 76, 76, 66, 49, 0, 92, 4, 0, /* 0x11a0 */ + 0, 77, 82, 85, 66, 73, 84, 83, 49, 0, 94, 4, 0, 0, 76, 88, /* 0x11b0 */ + 77, 82, 85, 48, 51, 48, 0, 95, 4, 0, 0, 77, 82, 85, 66, 89, /* 0x11c0 */ + 84, 69, 49, 0, 97, 4, 0, 0, 77, 82, 85, 65, 82, 66, 49, 48, /* 0x11d0 */ + 0, 99, 4, 0, 0, 76, 88, 77, 82, 85, 48, 52, 48, 0,100, 4, /* 0x11e0 */ + 0, 0, 0, 0, 0, 0,102, 4, 0, 0, 76, 88, 77, 82, 85, 48, /* 0x11f0 */ + 51, 48, 0, 0, 0, 0, 0, 76, 88, 85, 78, 70, 48, 51, 48, 0, /* 0x1200 */ +102, 4, 0, 0, 76, 88, 74, 67, 67, 48, 48, 48, 0,108, 4, 0, /* 0x1210 */ + 0, 0, 0, 0, 0,116, 4, 0, 0, 76, 88, 74, 67, 67, 48, 49, /* 0x1220 */ + 48, 0, 0, 0, 0, 0, 76, 88, 67, 74, 48, 77, 82, 85, 0,116, /* 0x1230 */ + 4, 0, 0, 76, 88, 67, 74, 49, 77, 82, 85, 0,118, 4, 0, 0, /* 0x1240 */ + 76, 88, 67, 65, 76, 74, 77, 80, 0,121, 4, 0, 0, 76, 88, 67, /* 0x1250 */ + 65, 76, 76, 48, 48, 0,124, 4, 0, 0, 0, 0, 0, 0,126, 4, /* 0x1260 */ + 0, 0, 76, 88, 85, 78, 70, 48, 51, 55, 0, 0, 0, 0, 0, 76, /* 0x1270 */ + 88, 67, 65, 76, 76, 48, 49, 0,126, 4, 0, 0, 76, 88, 67, 74, /* 0x1280 */ + 50, 77, 82, 85, 0,129, 4, 0, 0, 0, 0, 0, 0,131, 4, 0, /* 0x1290 */ + 0, 76, 88, 85, 78, 70, 48, 51, 55, 0, 0, 0, 0, 0, 76, 88, /* 0x12a0 */ + 67, 74, 52, 77, 82, 85, 0,131, 4, 0, 0, 0, 0, 0, 0,133, /* 0x12b0 */ + 4, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0, 0, 0, 0, 0, /* 0x12c0 */ + 76, 88, 67, 74, 54, 77, 82, 85, 0,133, 4, 0, 0, 0, 0, 0, /* 0x12d0 */ + 0,135, 4, 0, 0, 76, 88, 67, 74, 56, 77, 82, 85, 0, 1, 0, /* 0x12e0 */ + 0, 0, 76, 88, 67, 74, 55, 77, 82, 85, 0,135, 4, 0, 0, 0, /* 0x12f0 */ + 0, 0, 0,137, 4, 0, 0, 76, 88, 67, 74, 56, 77, 82, 85, 0, /* 0x1300 */ + 1, 0, 0, 0, 76, 88, 67, 74, 56, 77, 82, 85, 0,137, 4, 0, /* 0x1310 */ + 0, 0, 0, 0, 0,140, 4, 0, 0, 76, 88, 85, 78, 70, 48, 51, /* 0x1320 */ + 55, 0, 0, 0, 0, 0, 76, 88, 85, 78, 70, 48, 51, 52, 0,140, /* 0x1330 */ + 4, 0, 0, 0, 0, 0, 0,145, 4, 0, 0, 76, 88, 85, 78, 70, /* 0x1340 */ + 48, 51, 48, 0, 0, 0, 0, 0, 76, 88, 77, 82, 85, 48, 53, 53, /* 0x1350 */ + 0,145, 4, 0, 0, 77, 82, 85, 66, 89, 84, 69, 50, 0,147, 4, /* 0x1360 */ + 0, 0, 77, 82, 85, 66, 73, 84, 83, 50, 0,152, 4, 0, 0, 77, /* 0x1370 */ + 82, 85, 65, 82, 66, 50, 48, 0,157, 4, 0, 0, 76, 88, 77, 82, /* 0x1380 */ + 85, 48, 53, 55, 0,162, 4, 0, 0, 76, 88, 77, 82, 85, 48, 53, /* 0x1390 */ + 56, 0,168, 4, 0, 0, 76, 88, 85, 78, 70, 48, 51, 53, 0,169, /* 0x13a0 */ + 4, 0, 0, 67, 75, 76, 76, 84, 82, 48, 48, 0,175, 4, 0, 0, /* 0x13b0 */ + 0, 0, 0, 0,179, 4, 0, 0, 67, 75, 76, 76, 84, 82, 50, 48, /* 0x13c0 */ + 0, 30, 0, 0, 0, 67, 75, 76, 76, 84, 82, 49, 48, 0,184, 4, /* 0x13d0 */ + 0, 0, 0, 0, 0, 0,198, 4, 0, 0, 67, 75, 76, 76, 84, 82, /* 0x13e0 */ + 50, 48, 0, 6, 0, 0, 0, 67, 75, 76, 76, 84, 82, 50, 48, 0, /* 0x13f0 */ +198, 4, 0, 0, 0, 0, 0, 0,204, 4, 0, 0, 67, 75, 76, 76, /* 0x1400 */ + 84, 82, 52, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 4, 0, /* 0x1410 */ + 0, 67, 75, 76, 76, 84, 82, 52, 48, 0, 0, 0, 0, 0, 67, 75, /* 0x1420 */ + 76, 76, 84, 82, 51, 48, 0,231, 4, 0, 0, 0, 0, 0, 0,238, /* 0x1430 */ + 4, 0, 0, 67, 75, 76, 76, 84, 82, 49, 48, 0, 14, 0, 0, 0, /* 0x1440 */ + 67, 75, 76, 76, 84, 82, 52, 48, 0,238, 4, 0, 0, 0, 0, 0, /* 0x1450 */ + 0,243, 4, 0, 0, 67, 75, 76, 76, 84, 82, 48, 48, 0, 4, 0, /* 0x1460 */ + 0, 0, 76, 69, 88, 69, 67, 48, 49, 55, 0,243, 4, 0, 0, 76, /* 0x1470 */ + 69, 88, 69, 67, 48, 50, 48, 0,245, 4, 0, 0, 88, 84, 72, 69, /* 0x1480 */ + 69, 78, 68, 88, 0,251, 4, 0, 0,255,255,255,255,251, 4 /* 0x1490 */ }; diff --git a/src/stub/l_lx_exec86.lds b/src/stub/l_lx_exec86.lds index ec9fcd58..4ed1f7b8 100644 --- a/src/stub/l_lx_exec86.lds +++ b/src/stub/l_lx_exec86.lds @@ -33,7 +33,7 @@ OUTPUT_ARCH(i386) /*ENTRY(_start)*/ PHDRS /* force exactly 1 ELF32_Phdr: in particular, no PT_GNU_STACK */ { - phdr0 PT_LOAD FILEHDR PHDRS FLAGS(7); + phdr0 PT_LOAD FILEHDR PHDRS FLAGS(5); /* no PF_W: strict SELinux, PaX, grSecurity */ } SECTIONS diff --git a/src/stub/l_lx_sh86.h b/src/stub/l_lx_sh86.h index 19fc2669..697f1899 100644 --- a/src/stub/l_lx_sh86.h +++ b/src/stub/l_lx_sh86.h @@ -28,8 +28,8 @@ #define LINUX_I386SH_LOADER_SIZE 4416 -#define LINUX_I386SH_LOADER_ADLER32 0x93e2f039 -#define LINUX_I386SH_LOADER_CRC32 0x1614a613 +#define LINUX_I386SH_LOADER_ADLER32 0x7a82f154 +#define LINUX_I386SH_LOADER_CRC32 0x82883299 unsigned char linux_i386sh_loader[4416] = { 232, 0, 0, 0, 0, 96,139,116, 36, 36,139,124, 36, 44,131,205, /* 0x 0 */ @@ -104,11 +104,11 @@ unsigned char linux_i386sh_loader[4416] = { 84, 36, 40, 57,214,116, 1, 72, 43,124, 36, 44,139, 84, 36, 48, /* 0x 450 */ 137, 58,137, 68, 36, 28, 97,195, 94,252,173, 80, 84,186, 0, 0, /* 0x 460 */ 64, 1,139, 66, 72, 1,208,131,194,116, 80,139, 74, 16,129,193, /* 0x 470 */ - 6, 16, 0, 0, 80, 80,106, 50,106, 7, 81, 80,137,227,106, 90, /* 0x 480 */ - 88,205,128,141,152, 3, 16, 0, 0,131,196, 24,173, 80,173, 86, /* 0x 490 */ -255,213, 88, 88,195, 93,232,189,255,255,255, 0, 76, 69, 88, 69, /* 0x 4a0 */ + 6, 16, 0, 0, 80,106,255,106, 50,106, 7, 81, 80,137,227,106, /* 0x 480 */ + 90, 88,205,128,141,152, 3, 16, 0, 0,131,196, 24,173, 80,173, /* 0x 490 */ + 86,255,213, 88, 88,195, 93,232,188,255,255,255, 76, 69, 88, 69, /* 0x 4a0 */ 67, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, /* 0x 4b0 */ - 0, 76, 69, 88, 69, 67, 48, 50, 48, 0, 61, 0, 0, 0, 76, 69, /* 0x 4c0 */ + 0, 76, 69, 88, 69, 67, 48, 50, 48, 0, 62, 0, 0, 0, 76, 69, /* 0x 4c0 */ 88, 69, 67, 48, 49, 48, 0, 5, 0, 0, 0, 78, 50, 66, 83, 77, /* 0x 4d0 */ 65, 49, 48, 0, 17, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, /* 0x 4e0 */ 78, 50, 66, 68, 69, 67, 49, 48, 0, 4, 0, 0, 0, 78, 50, 66, /* 0x 4f0 */ @@ -307,5 +307,5 @@ unsigned char linux_i386sh_loader[4416] = { 68, 0, 75, 4, 0, 0, 76, 69, 88, 69, 67, 48, 49, 53, 0, 75, /* 0x1100 */ 4, 0, 0, 76, 69, 88, 69, 67, 48, 49, 55, 0,102, 4, 0, 0, /* 0x1110 */ 76, 69, 88, 69, 67, 48, 50, 48, 0,104, 4, 0, 0, 88, 84, 72, /* 0x1120 */ - 69, 69, 78, 68, 88, 0,171, 4, 0, 0,255,255,255,255,171, 4 /* 0x1130 */ + 69, 69, 78, 68, 88, 0,172, 4, 0, 0,255,255,255,255,172, 4 /* 0x1130 */ };