arm64 (aarch64)

Tested and working: nrv2b and nrv2e for ET_EXE on linux.
NOT TESTED: lzma, ET_DYN on linux; any Mach-O

	modified:   bele.h
	modified:   conf.h
	modified:   filter/ct.h
	modified:   filteri.cpp
	modified:   linker.cpp
	modified:   linker.h
	modified:   miniacc.h
	modified:   p_elf_enum.h
	modified:   p_lx_elf.cpp
	modified:   p_lx_elf.h
	modified:   packmast.cpp
	modified:   stub/Makefile
	modified:   stub/arm64-darwin.macho-entry.h
	modified:   stub/arm64-darwin.macho-fold.h
	new file:   stub/arm64-linux.elf-entry.h
	new file:   stub/arm64-linux.elf-fold.h
	new file:   stub/arm64-linux.shlib-init.h
	new file:   stub/src/arch/arm64/v8/Makefile.extra
	modified:   stub/src/arch/arm64/v8/lzma_d-arm.S
	modified:   stub/src/arch/arm64/v8/lzma_d.S
	modified:   stub/src/arch/arm64/v8/lzma_d_cf.S
	new file:   stub/src/arch/arm64/v8/lzma_d_cs.S
	modified:   stub/src/arch/arm64/v8/macros.S
	renamed:    stub/src/arch/arm64/v8/nrv2b_d8.S -> stub/src/arch/arm64/v8/nrv2b_d32.S
	renamed:    stub/src/arch/arm64/v8/nrv2d_d8.S -> stub/src/arch/arm64/v8/nrv2d_d32.S
	modified:   stub/src/arch/arm64/v8/nrv2e_d32.S
	deleted:    stub/src/arch/arm64/v8/nrv2e_d8.S
	modified:   stub/src/arm64-darwin.macho-entry.S
	modified:   stub/src/arm64-darwin.macho-fold.S
	new file:   stub/src/arm64-linux.elf-entry.S
	new file:   stub/src/arm64-linux.elf-fold.S
	new file:   stub/src/arm64-linux.elf-fold.lds
	new file:   stub/src/arm64-linux.elf-main.c
	new file:   stub/src/arm64-linux.shlib-init.S
	modified:   stub/src/include/linux.h
	modified:   stub/tmp/arm64-darwin.macho-entry.bin.dump
	modified:   stub/tmp/arm64-darwin.macho-fold.map
	new file:   stub/tmp/arm64-linux.elf-entry.bin.dump
	new file:   stub/tmp/arm64-linux.elf-fold.map
	new file:   stub/tmp/arm64-linux.shlib-init.bin.dump
This commit is contained in:
John Reiser
2017-03-26 13:10:26 -07:00
parent 0e154cc759
commit b818e2c4b8
40 changed files with 4689 additions and 1780 deletions
+18
View File
@@ -142,6 +142,24 @@ inline void set_le24(void *p, unsigned v)
#endif #endif
} }
inline unsigned get_le26(const void *p)
{
#if defined(ACC_UA_GET_LE26)
return ACC_UA_GET_LE26(p);
#else
return acc_ua_get_le26(p);
#endif
}
inline void set_le26(void *p, unsigned v)
{
#if defined(ACC_UA_SET_LE26)
ACC_UA_SET_LE26(p, v);
#else
acc_ua_set_le26(p, v);
#endif
}
inline unsigned get_le32(const void *p) inline unsigned get_le32(const void *p)
{ {
#if defined(ACC_UA_GET_LE32) #if defined(ACC_UA_GET_LE32)
+2
View File
@@ -403,6 +403,8 @@ private:
#define UPX_F_VMLINUX_PPC64LE 40 #define UPX_F_VMLINUX_PPC64LE 40
#define UPX_F_DYLIB_PPC64LE 41 #define UPX_F_DYLIB_PPC64LE 41
#define UPX_F_LINUX_ELF64_ARM 42
#define UPX_F_ATARI_TOS 129 #define UPX_F_ATARI_TOS 129
#define UPX_F_SOLARIS_SPARC 130 // NOT IMPLEMENTED #define UPX_F_SOLARIS_SPARC 130 // NOT IMPLEMENTED
#define UPX_F_MACH_PPC32 131 #define UPX_F_MACH_PPC32 131
+41
View File
@@ -459,4 +459,45 @@ static int s_ct24arm_be(Filter *f)
#undef CT24ARM_BE #undef CT24ARM_BE
#undef ARMCT_COND #undef ARMCT_COND
/*************************************************************************
// 26-bit ARM calltrick ("naive")
**************************************************************************/
#define CT26ARM_LE(f, cond, addvalue, get, set) \
upx_byte *b = f->buf; \
upx_byte *b_end = b + f->buf_len - 4; \
do { \
if (cond) \
{ \
unsigned a = (unsigned) (b - f->buf); \
f->lastcall = a; \
set(b, get(b) + (addvalue)); \
f->calls++; \
} \
b += 4; \
} while (b < b_end); \
if (f->lastcall) f->lastcall += 4; \
return 0;
#define ARMCT_COND (((b[3] & 0x7C) == 0x14))
static int f_ct26arm_le(Filter *f)
{
CT26ARM_LE(f, ARMCT_COND, a / 4 + f->addvalue, get_le26, set_le26)
}
static int u_ct26arm_le(Filter *f)
{
CT26ARM_LE(f, ARMCT_COND, 0 - a / 4 - f->addvalue, get_le26, set_le26)
}
static int s_ct26arm_le(Filter *f)
{
CT26ARM_LE(f, ARMCT_COND, a + f->addvalue, get_le26, set_dummy)
}
#undef CT26ARM_LE
#undef ARMCT_COND
/* vim:set ts=4 sw=4 et: */ /* vim:set ts=4 sw=4 et: */
+3
View File
@@ -228,6 +228,9 @@ const FilterImp::FilterEntry FilterImp::filters[] = {
{ 0x50, 8, 0x01ffffff, f_ct24arm_le, u_ct24arm_le, s_ct24arm_le }, { 0x50, 8, 0x01ffffff, f_ct24arm_le, u_ct24arm_le, s_ct24arm_le },
{ 0x51, 8, 0x01ffffff, f_ct24arm_be, u_ct24arm_be, s_ct24arm_be }, { 0x51, 8, 0x01ffffff, f_ct24arm_be, u_ct24arm_be, s_ct24arm_be },
// 26-bit calltrick for arm64
{ 0x52, 8, 0x03ffffff, f_ct26arm_le, u_ct26arm_le, s_ct26arm_le },
// 32-bit cto calltrick with jmp and jcc(swap 0x0f/0x8Y) and relative renumbering // 32-bit cto calltrick with jmp and jcc(swap 0x0f/0x8Y) and relative renumbering
{ 0x80, 8, 0x00ffffff, f_ctojr32_e8e9_bswap_le, u_ctojr32_e8e9_bswap_le, s_ctojr32_e8e9_bswap_le }, { 0x80, 8, 0x00ffffff, f_ctojr32_e8e9_bswap_le, u_ctojr32_e8e9_bswap_le, s_ctojr32_e8e9_bswap_le },
{ 0x81, 8, 0x00ffffff, f_ctojr32_e8e9_bswap_le, u_ctojr32_e8e9_bswap_le, s_ctojr32_e8e9_bswap_le }, { 0x81, 8, 0x00ffffff, f_ctojr32_e8e9_bswap_le, u_ctojr32_e8e9_bswap_le, s_ctojr32_e8e9_bswap_le },
+34 -3
View File
@@ -472,9 +472,9 @@ void ElfLinker::relocate() {
value = rel->value->section->offset + rel->value->offset + rel->add; value = rel->value->section->offset + rel->value->offset + rel->add;
} }
upx_byte *location = rel->section->output + rel->offset; upx_byte *location = rel->section->output + rel->offset;
// printf("%-28s %-28s %-10s 0x%16llx 0x%16llx\n", rel->section->name, rel->value->name, // printf("%-28s %-28s %-10s %#16llx %#16llx\n", rel->section->name, rel->value->name,
// rel->type, (long long) value, (long long) value - rel->section->offset - rel->offset); // rel->type, (long long) value, (long long) value - rel->section->offset - rel->offset);
// printf(" %llx %d %llx %d %llx : %d\n", (long long) value, rel->value->section->offset, // printf(" %llx %d %llx %d %llx : %d\n", (long long) value, (int)rel->value->section->offset,
// rel->value->offset, rel->offset, (long long) rel->add, *location); // rel->value->offset, rel->offset, (long long) rel->add, *location);
relocate1(rel, location, value, rel->type); relocate1(rel, location, value, rel->type);
} }
@@ -541,7 +541,7 @@ void ElfLinker::alignWithByte(unsigned len, unsigned char b) {
} }
void ElfLinker::relocate1(const Relocation *rel, upx_byte *, upx_uint64_t, const char *) { void ElfLinker::relocate1(const Relocation *rel, upx_byte *, upx_uint64_t, const char *) {
internal_error("unknown relocation type '%s\n", rel->type); internal_error("unknown relocation type '%s\n'", rel->type);
} }
/************************************************************************* /*************************************************************************
@@ -591,6 +591,37 @@ void ElfLinkerAMD64::relocate1(const Relocation *rel, upx_byte *location, upx_ui
super::relocate1(rel, location, value, type); super::relocate1(rel, location, value, type);
} }
void ElfLinkerARM64::relocate1(const Relocation *rel, upx_byte *location, upx_uint64_t value,
const char *type) {
if (strncmp(type, "R_AARCH64_", 10))
return super::relocate1(rel, location, value, type);
type += 10;
if (!strncmp(type, "PREL", 4)) {
value -= rel->section->offset + rel->offset;
type += 4;
if (!strcmp(type, "16"))
set_le16(location, get_le16(location) + value);
else if (!strncmp(type, "32", 2)) // for "32" and "32S"
set_le32(location, get_le32(location) + value);
else if (!strcmp(type, "64"))
set_le64(location, get_le64(location) + value);
} else if (!strcmp(type, "ABS32")) {
set_le32(location, get_le32(location) + value);
} else if (!strcmp(type, "ABS64")) {
set_le64(location, get_le64(location) + value);
}
else if (!strcmp(type, "CONDBR19")) {
value -= rel->section->offset + rel->offset;
uint32_t const m19 = ~(~0u << 19);
uint32_t w = get_le32(location);
set_le32(location, (w &~(m19<<5)) | ((((w>>5) + (value>>2)) & m19) << 5) );
}
else
super::relocate1(rel, location, value, type);
}
void ElfLinkerArmBE::relocate1(const Relocation *rel, upx_byte *location, upx_uint64_t value, void ElfLinkerArmBE::relocate1(const Relocation *rel, upx_byte *location, upx_uint64_t value,
const char *type) { const char *type) {
if (strcmp(type, "R_ARM_PC24") == 0) { if (strcmp(type, "R_ARM_PC24") == 0) {
+9
View File
@@ -160,6 +160,15 @@ protected:
const char *type); const char *type);
}; };
class ElfLinkerARM64 : public ElfLinker {
typedef ElfLinker super;
protected:
virtual void alignCode(unsigned len) { alignWithByte(len, 0x90); }
virtual void relocate1(const Relocation *, upx_byte *location, upx_uint64_t value,
const char *type);
};
class ElfLinkerArmBE : public ElfLinker { class ElfLinkerArmBE : public ElfLinker {
typedef ElfLinker super; typedef ElfLinker super;
+16
View File
@@ -5103,9 +5103,11 @@ ACCLIB_EXTERN(void, acc_ua_set_be24) (acc_hvoid_p, acc_uint32l_t);
ACCLIB_EXTERN(void, acc_ua_set_be32) (acc_hvoid_p, acc_uint32l_t); ACCLIB_EXTERN(void, acc_ua_set_be32) (acc_hvoid_p, acc_uint32l_t);
ACCLIB_EXTERN(unsigned, acc_ua_get_le16) (const acc_hvoid_p); ACCLIB_EXTERN(unsigned, acc_ua_get_le16) (const acc_hvoid_p);
ACCLIB_EXTERN(acc_uint32l_t, acc_ua_get_le24) (const acc_hvoid_p); ACCLIB_EXTERN(acc_uint32l_t, acc_ua_get_le24) (const acc_hvoid_p);
ACCLIB_EXTERN(acc_uint32l_t, acc_ua_get_le26) (const acc_hvoid_p);
ACCLIB_EXTERN(acc_uint32l_t, acc_ua_get_le32) (const acc_hvoid_p); ACCLIB_EXTERN(acc_uint32l_t, acc_ua_get_le32) (const acc_hvoid_p);
ACCLIB_EXTERN(void, acc_ua_set_le16) (acc_hvoid_p, unsigned); ACCLIB_EXTERN(void, acc_ua_set_le16) (acc_hvoid_p, unsigned);
ACCLIB_EXTERN(void, acc_ua_set_le24) (acc_hvoid_p, acc_uint32l_t); ACCLIB_EXTERN(void, acc_ua_set_le24) (acc_hvoid_p, acc_uint32l_t);
ACCLIB_EXTERN(void, acc_ua_set_le26) (acc_hvoid_p, acc_uint32l_t);
ACCLIB_EXTERN(void, acc_ua_set_le32) (acc_hvoid_p, acc_uint32l_t); ACCLIB_EXTERN(void, acc_ua_set_le32) (acc_hvoid_p, acc_uint32l_t);
#if defined(acc_int64l_t) #if defined(acc_int64l_t)
ACCLIB_EXTERN(acc_uint64l_t, acc_ua_get_be64) (const acc_hvoid_p); ACCLIB_EXTERN(acc_uint64l_t, acc_ua_get_be64) (const acc_hvoid_p);
@@ -6095,6 +6097,12 @@ ACCLIB_PUBLIC(acc_uint32l_t, acc_ua_get_le24) (const acc_hvoid_p p)
const acc_hbyte_p b = ACC_CCAST(const acc_hbyte_p, p); const acc_hbyte_p b = ACC_CCAST(const acc_hbyte_p, p);
return ACC_ICONV(acc_uint32l_t, b[0]) | (ACC_ICONV(acc_uint32l_t, b[1]) << 8) | (ACC_ICONV(acc_uint32l_t, b[2]) << 16); return ACC_ICONV(acc_uint32l_t, b[0]) | (ACC_ICONV(acc_uint32l_t, b[1]) << 8) | (ACC_ICONV(acc_uint32l_t, b[2]) << 16);
} }
ACCLIB_PUBLIC(acc_uint32l_t, acc_ua_get_le26) (const acc_hvoid_p p)
{
const acc_hbyte_p b = ACC_CCAST(const acc_hbyte_p, p);
return ACC_ICONV(acc_uint32l_t, b[0] ) | ( ACC_ICONV(acc_uint32l_t, b[1]) << 8) |
(ACC_ICONV(acc_uint32l_t, b[2]) << 16) | (((ACC_ICONV(acc_uint32l_t, b[3]) & 3)<< 24));
}
ACCLIB_PUBLIC(acc_uint32l_t, acc_ua_get_le32) (const acc_hvoid_p p) ACCLIB_PUBLIC(acc_uint32l_t, acc_ua_get_le32) (const acc_hvoid_p p)
{ {
#if defined(ACC_UA_GET_LE32) #if defined(ACC_UA_GET_LE32)
@@ -6121,6 +6129,14 @@ ACCLIB_PUBLIC(void, acc_ua_set_le24) (acc_hvoid_p p, acc_uint32l_t v)
b[1] = ACC_ICONV(unsigned char, (v >> 8) & 0xff); b[1] = ACC_ICONV(unsigned char, (v >> 8) & 0xff);
b[2] = ACC_ICONV(unsigned char, (v >> 16) & 0xff); b[2] = ACC_ICONV(unsigned char, (v >> 16) & 0xff);
} }
ACCLIB_PUBLIC(void, acc_ua_set_le26) (acc_hvoid_p p, acc_uint32l_t v)
{
acc_hbyte_p b = ACC_PCAST(acc_hbyte_p, p);
b[0] = ACC_ICONV(unsigned char, (v >> 0) & 0xff);
b[1] = ACC_ICONV(unsigned char, (v >> 8) & 0xff);
b[2] = ACC_ICONV(unsigned char, (v >> 16) & 0xff);
b[3] = ACC_ICONV(unsigned char, (v >> 24) & 0x03) | (0xFC & b[3]);
}
ACCLIB_PUBLIC(void, acc_ua_set_le32) (acc_hvoid_p p, acc_uint32l_t v) ACCLIB_PUBLIC(void, acc_ua_set_le32) (acc_hvoid_p p, acc_uint32l_t v)
{ {
#if defined(ACC_UA_SET_LE32) #if defined(ACC_UA_SET_LE32)
+2 -1
View File
@@ -73,7 +73,8 @@
EM_PPC = 20, EM_PPC = 20,
EM_PPC64 = 21, EM_PPC64 = 21,
EM_ARM = 40, EM_ARM = 40,
EM_X86_64 = 62 EM_X86_64 = 62,
EM_AARCH64 = 183
}; };
enum { // e_version enum { // e_version
+296
View File
@@ -650,6 +650,11 @@ Linker* PackLinuxElf64amd::newLinker() const
return new ElfLinkerAMD64; return new ElfLinkerAMD64;
} }
Linker* PackLinuxElf64arm::newLinker() const
{
return new ElfLinkerARM64;
}
int const * int const *
PackLinuxElf::getCompressionMethods(int method, int level) const PackLinuxElf::getCompressionMethods(int method, int level) const
{ {
@@ -696,6 +701,15 @@ PackLinuxElf64amd::getFilters() const
return filters; return filters;
} }
int const *
PackLinuxElf64arm::getFilters() const
{
static const int filters[] = {
0x52,
FT_END };
return filters;
}
void PackLinuxElf32::patchLoader() void PackLinuxElf32::patchLoader()
{ {
} }
@@ -740,6 +754,7 @@ void PackLinuxElf32::updateLoader(OutputFile * /*fo*/)
void PackLinuxElf64::updateLoader(OutputFile * /*fo*/) void PackLinuxElf64::updateLoader(OutputFile * /*fo*/)
{ {
set_te64(&elfout.ehdr.e_entry, sz_pack2 + set_te64(&elfout.ehdr.e_entry, sz_pack2 +
linker->getSymbolOffset("_start") +
get_te64(&elfout.phdr[0].p_vaddr)); get_te64(&elfout.phdr[0].p_vaddr));
} }
@@ -788,10 +803,23 @@ PackLinuxElf64amd::PackLinuxElf64amd(InputFile *f)
ei_osabi = Elf32_Ehdr::ELFOSABI_LINUX; ei_osabi = Elf32_Ehdr::ELFOSABI_LINUX;
} }
PackLinuxElf64arm::PackLinuxElf64arm(InputFile *f)
: super(f)
{
e_machine = Elf64_Ehdr::EM_AARCH64;
ei_class = Elf64_Ehdr::ELFCLASS64;
ei_data = Elf64_Ehdr::ELFDATA2LSB;
ei_osabi = Elf32_Ehdr::ELFOSABI_LINUX;
}
PackLinuxElf64amd::~PackLinuxElf64amd() PackLinuxElf64amd::~PackLinuxElf64amd()
{ {
} }
PackLinuxElf64arm::~PackLinuxElf64arm()
{
}
static unsigned static unsigned
umax(unsigned a, unsigned b) umax(unsigned a, unsigned b)
{ {
@@ -1052,6 +1080,7 @@ PackLinuxElf64amd::defineSymbols(Filter const *)
len += (7&-lsize) + lsize; len += (7&-lsize) + lsize;
is_big = (lo_va_user < (lo_va_stub + len + 2*page_size)); is_big = (lo_va_user < (lo_va_stub + len + 2*page_size));
if (is_big && ehdri.ET_EXEC==get_te16(&ehdri.e_type)) { if (is_big && ehdri.ET_EXEC==get_te16(&ehdri.e_type)) {
// .e_entry is set later by PackLinuxElf64::updateLoader
set_te64( &elfout.ehdr.e_entry, set_te64( &elfout.ehdr.e_entry,
get_te64(&elfout.ehdr.e_entry) + lo_va_user - lo_va_stub); get_te64(&elfout.ehdr.e_entry) + lo_va_user - lo_va_stub);
set_te64(&elfout.phdr[0].p_vaddr, lo_va_user); set_te64(&elfout.phdr[0].p_vaddr, lo_va_user);
@@ -1347,6 +1376,28 @@ PackLinuxElf64amd::buildLoader(const Filter *ft)
stub_amd64_linux_elf_fold, sizeof(stub_amd64_linux_elf_fold), ft); stub_amd64_linux_elf_fold, sizeof(stub_amd64_linux_elf_fold), ft);
} }
static const
#include "stub/arm64-linux.elf-entry.h"
static const
#include "stub/arm64-linux.elf-fold.h"
//static const
//#include "stub/arm64-linux.shlib-init.h"
void
PackLinuxElf64arm::buildLoader(const Filter *ft)
{
if (0!=xct_off) { // shared library
abort(); // FIXME
//buildLinuxLoader(
// stub_arm64_linux_shlib_init, sizeof(stub_arm64_linux_shlib_init),
// NULL, 0, ft );
//return;
}
buildLinuxLoader(
stub_arm64_linux_elf_entry, sizeof(stub_arm64_linux_elf_entry),
stub_arm64_linux_elf_fold, sizeof(stub_arm64_linux_elf_fold), ft);
}
Elf32_Shdr const *PackLinuxElf32::elf_find_section_name( Elf32_Shdr const *PackLinuxElf32::elf_find_section_name(
char const *const name char const *const name
) const ) const
@@ -2005,6 +2056,198 @@ proceed: ;
return true; return true;
} }
bool
PackLinuxElf64arm::canPack()
{
union {
unsigned char buf[sizeof(Elf64_Ehdr) + 14*sizeof(Elf64_Phdr)];
//struct { Elf64_Ehdr ehdr; Elf64_Phdr phdr; } e;
} u;
COMPILE_TIME_ASSERT(sizeof(u) <= 1024)
fi->readx(u.buf, sizeof(u.buf));
fi->seek(0, SEEK_SET);
Elf64_Ehdr const *const ehdr = (Elf64_Ehdr *) u.buf;
// now check the ELF header
if (checkEhdr(ehdr) != 0)
return false;
// additional requirements for linux/elf386
if (get_te16(&ehdr->e_ehsize) != sizeof(*ehdr)) {
throwCantPack("invalid Ehdr e_ehsize; try '--force-execve'");
return false;
}
if (e_phoff != sizeof(*ehdr)) {// Phdrs not contiguous with Ehdr
throwCantPack("non-contiguous Ehdr/Phdr; try '--force-execve'");
return false;
}
// The first PT_LOAD64 must cover the beginning of the file (0==p_offset).
Elf64_Phdr const *phdr = phdri;
for (unsigned j=0; j < e_phnum; ++phdr, ++j) {
if (j >= 14)
return false;
if (phdr->PT_LOAD64 == get_te32(&phdr->p_type)) {
load_va = get_te64(&phdr->p_vaddr);
upx_uint64_t file_offset = get_te64(&phdr->p_offset);
if (~page_mask & file_offset) {
if ((~page_mask & load_va) == file_offset) {
throwCantPack("Go-language PT_LOAD: try hemfix.c, or try '--force-execve'");
// Fixing it inside upx fails because packExtent() reads original file.
}
else {
throwCantPack("invalid Phdr p_offset; try '--force-execve'");
}
return false;
}
exetype = 1;
break;
}
}
// We want to compress position-independent executable (gcc -pie)
// main programs, but compressing a shared library must be avoided
// because the result is no longer usable. In theory, there is no way
// to tell them apart: both are just ET_DYN. Also in theory,
// neither the presence nor the absence of any particular symbol name
// can be used to tell them apart; there are counterexamples.
// However, we will use the following heuristic suggested by
// Peter S. Mazinger <ps.m@gmx.net> September 2005:
// If a ET_DYN has __libc_start_main as a global undefined symbol,
// then the file is a position-independent executable main program
// (that depends on libc.so.6) and is eligible to be compressed.
// Otherwise (no __libc_start_main as global undefined): skip it.
// Also allow __uClibc_main and __uClibc_start_main .
if (Elf32_Ehdr::ET_DYN==get_te16(&ehdr->e_type)) {
// The DT_STRTAB has no designated length. Read the whole file.
alloc_file_image(file_image, file_size);
fi->seek(0, SEEK_SET);
fi->readx(file_image, file_size);
memcpy(&ehdri, ehdr, sizeof(Elf64_Ehdr));
phdri= (Elf64_Phdr *)((size_t)e_phoff + file_image); // do not free() !!
shdri= (Elf64_Shdr const *)((size_t)e_shoff + file_image); // do not free() !!
//sec_strndx = &shdri[ehdr->e_shstrndx];
//shstrtab = (char const *)(sec_strndx->sh_offset + file_image);
sec_dynsym = elf_find_section_type(Elf64_Shdr::SHT_DYNSYM);
if (sec_dynsym)
sec_dynstr = get_te64(&sec_dynsym->sh_link) + shdri;
int j= e_phnum;
phdr= phdri;
for (; --j>=0; ++phdr)
if (Elf64_Phdr::PT_DYNAMIC==get_te32(&phdr->p_type)) {
dynseg= (Elf64_Dyn const *)(get_te64(&phdr->p_offset) + file_image);
break;
}
// elf_find_dynamic() returns 0 if 0==dynseg.
dynstr= (char const *)elf_find_dynamic(Elf64_Dyn::DT_STRTAB);
dynsym= (Elf64_Sym const *)elf_find_dynamic(Elf64_Dyn::DT_SYMTAB);
// Modified 2009-10-10 to detect a ProgramLinkageTable relocation
// which references the symbol, because DT_GNU_HASH contains only
// defined symbols, and there might be no DT_HASH.
Elf64_Rela const *
rela= (Elf64_Rela const *)elf_find_dynamic(Elf64_Dyn::DT_RELA);
Elf64_Rela const *
jmprela= (Elf64_Rela const *)elf_find_dynamic(Elf64_Dyn::DT_JMPREL);
for ( int sz = elf_unsigned_dynamic(Elf64_Dyn::DT_PLTRELSZ);
0 < sz;
(sz -= sizeof(Elf64_Rela)), ++jmprela
) {
unsigned const symnum = get_te64(&jmprela->r_info) >> 32;
char const *const symnam = get_te32(&dynsym[symnum].st_name) + dynstr;
if (0==strcmp(symnam, "__libc_start_main")
|| 0==strcmp(symnam, "__uClibc_main")
|| 0==strcmp(symnam, "__uClibc_start_main"))
goto proceed;
}
// 2016-10-09 DT_JMPREL is no more (binutils-2.26.1)?
// Check the general case, too.
for ( int sz = elf_unsigned_dynamic(Elf64_Dyn::DT_RELASZ);
0 < sz;
(sz -= sizeof(Elf64_Rela)), ++rela
) {
unsigned const symnum = get_te64(&rela->r_info) >> 32;
char const *const symnam = get_te32(&dynsym[symnum].st_name) + dynstr;
if (0==strcmp(symnam, "__libc_start_main")
|| 0==strcmp(symnam, "__uClibc_main")
|| 0==strcmp(symnam, "__uClibc_start_main"))
goto proceed;
}
// Heuristic HACK for shared libraries (compare Darwin (MacOS) Dylib.)
// If there is an existing DT_INIT, and if everything that the dynamic
// linker ld-linux needs to perform relocations before calling DT_INIT
// resides below the first SHT_EXECINSTR Section in one PT_LOAD, then
// compress from the first executable Section to the end of that PT_LOAD.
// We must not alter anything that ld-linux might touch before it calls
// the DT_INIT function.
//
// Obviously this hack requires that the linker script put pieces
// into good positions when building the original shared library,
// and also requires ld-linux to behave.
if (elf_find_dynamic(Elf64_Dyn::DT_INIT)) {
if (elf_has_dynamic(Elf64_Dyn::DT_TEXTREL)) {
throwCantPack("DT_TEXTREL found; re-compile with -fPIC");
goto abandon;
}
Elf64_Shdr const *shdr = shdri;
xct_va = ~0ull;
for (j= e_shnum; --j>=0; ++shdr) {
if (Elf64_Shdr::SHF_EXECINSTR & get_te32(&shdr->sh_flags)) {
xct_va = umin64(xct_va, get_te64(&shdr->sh_addr));
}
}
// Rely on 0==elf_unsigned_dynamic(tag) if no such tag.
upx_uint64_t const va_gash = elf_unsigned_dynamic(Elf64_Dyn::DT_GNU_HASH);
upx_uint64_t const va_hash = elf_unsigned_dynamic(Elf64_Dyn::DT_HASH);
if (xct_va < va_gash || (0==va_gash && xct_va < va_hash)
|| xct_va < elf_unsigned_dynamic(Elf64_Dyn::DT_STRTAB)
|| xct_va < elf_unsigned_dynamic(Elf64_Dyn::DT_SYMTAB)
|| xct_va < elf_unsigned_dynamic(Elf64_Dyn::DT_REL)
|| xct_va < elf_unsigned_dynamic(Elf64_Dyn::DT_RELA)
|| xct_va < elf_unsigned_dynamic(Elf64_Dyn::DT_JMPREL)
|| xct_va < elf_unsigned_dynamic(Elf64_Dyn::DT_VERDEF)
|| xct_va < elf_unsigned_dynamic(Elf64_Dyn::DT_VERSYM)
|| xct_va < elf_unsigned_dynamic(Elf64_Dyn::DT_VERNEEDED) ) {
throwCantPack("DT_ tag above stub");
goto abandon;
}
for ((shdr= shdri), (j= e_shnum); --j>=0; ++shdr) {
upx_uint64_t const sh_addr = get_te64(&shdr->sh_addr);
if ( sh_addr==va_gash
|| (sh_addr==va_hash && 0==va_gash) ) {
shdr= &shdri[get_te32(&shdr->sh_link)]; // the associated SHT_SYMTAB
hatch_off = (char *)&ehdri.e_ident[11] - (char *)&ehdri;
break;
}
}
ACC_UNUSED(shdr);
xct_off = elf_get_offset_from_address(xct_va);
goto proceed; // But proper packing depends on checking xct_va.
}
abandon:
return false;
proceed: ;
}
// XXX Theoretically the following test should be first,
// but PackUnix::canPack() wants 0!=exetype ?
if (!super::canPack())
return false;
assert(exetype == 1);
exetype = 0;
// set options
opt->o_unix.blocksize = blocksize = file_size;
return true;
}
off_t off_t
PackLinuxElf32::getbrk(const Elf32_Phdr *phdr, int nph) const PackLinuxElf32::getbrk(const Elf32_Phdr *phdr, int nph) const
{ {
@@ -2675,6 +2918,14 @@ void PackLinuxElf64amd::pack1(OutputFile *fo, Filter &ft)
generateElfHdr(fo, stub_amd64_linux_elf_fold, getbrk(phdri, e_phnum) ); generateElfHdr(fo, stub_amd64_linux_elf_fold, getbrk(phdri, e_phnum) );
} }
void PackLinuxElf64arm::pack1(OutputFile *fo, Filter &ft)
{
super::pack1(fo, ft);
if (0!=xct_off) // shared library
return;
generateElfHdr(fo, stub_arm64_linux_elf_fold, getbrk(phdri, e_phnum) );
}
// Determine length of gap between PT_LOAD phdr[k] and closest PT_LOAD // Determine length of gap between PT_LOAD phdr[k] and closest PT_LOAD
// which follows in the file (or end-of-file). Optimize for common case // which follows in the file (or end-of-file). Optimize for common case
// where the PT_LOAD are adjacent ascending by .p_offset. Assume no overlap. // where the PT_LOAD are adjacent ascending by .p_offset. Assume no overlap.
@@ -3013,6 +3264,51 @@ void PackLinuxElf32armBe::defineSymbols(Filter const *ft)
ARM_defineSymbols(ft); ARM_defineSymbols(ft);
} }
void PackLinuxElf64arm::defineSymbols(Filter const * /*ft*/)
{
lsize = /*getLoaderSize()*/ 4 * 1024; // upper bound; avoid circularity
upx_uint64_t lo_va_user = ~0ul; // infinity
for (int j= e_phnum; --j>=0; ) {
if (PT_LOAD64 == get_te32(&phdri[j].p_type)) {
upx_uint64_t const va = get_te64(&phdri[j].p_vaddr);
if (va < lo_va_user) {
lo_va_user = va;
}
}
}
upx_uint64_t lo_va_stub = get_te64(&elfout.phdr[0].p_vaddr);
upx_uint64_t adrc = 0; // init: pacify c++-analyzer
upx_uint64_t adrm = 0; // init: pacify c++-analyzer
is_big = true; // kernel disallows mapping below 0x8000.
if (is_big) {
set_te64( &elfout.ehdr.e_entry, linker->getSymbolOffset("_start") +
get_te64(&elfout.ehdr.e_entry) + lo_va_user - lo_va_stub);
set_te64(&elfout.phdr[0].p_vaddr, lo_va_user);
set_te64(&elfout.phdr[0].p_paddr, lo_va_user);
lo_va_stub = lo_va_user;
adrc = lo_va_stub;
adrm = getbrk(phdri, e_phnum);
}
adrc = page_mask & (~page_mask + adrc); // round up to page boundary
adrm = page_mask & (~page_mask + adrm); // round up to page boundary
adrm += page_size; // Try: hole so that kernel does not extend the brk(0)
linker->defineSymbol("ADRM", adrm); // addr for map
linker->defineSymbol("CPR0", 4+ linker->getSymbolOffset("cpr0"));
linker->defineSymbol("LENF", 4+ linker->getSymbolOffset("end_decompress"));
ACC_UNUSED(adrc);
#define MAP_PRIVATE 2 /* UNIX standard */
#define MAP_FIXED 0x10 /* UNIX standard */
#define MAP_ANONYMOUS 0x20 /* UNIX standard */
#define MAP_PRIVANON 3 /* QNX anonymous private memory */
unsigned mflg = MAP_PRIVATE | MAP_ANONYMOUS;
//if (ARM_is_QNX())
// mflg = MAP_PRIVANON;
linker->defineSymbol("MFLG", mflg);
}
void PackLinuxElf32mipseb::defineSymbols(Filter const * /*ft*/) void PackLinuxElf32mipseb::defineSymbols(Filter const * /*ft*/)
{ {
unsigned const hlen = sz_elf_hdrs + sizeof(l_info) + sizeof(p_info); unsigned const hlen = sz_elf_hdrs + sizeof(l_info) + sizeof(p_info);
+19
View File
@@ -387,6 +387,25 @@ protected:
virtual void defineSymbols(Filter const *); virtual void defineSymbols(Filter const *);
}; };
class PackLinuxElf64arm : public PackLinuxElf64Le
{
typedef PackLinuxElf64Le super;
public:
PackLinuxElf64arm(InputFile *f);
virtual ~PackLinuxElf64arm();
virtual int getFormat() const { return UPX_F_LINUX_ELF64_ARM; }
virtual const char *getName() const { return "linux/arm64"; }
virtual const char *getFullName(const options_t *) const { return "arm64-linux.elf"; }
virtual const int *getFilters() const;
virtual bool canPack();
protected:
virtual void pack1(OutputFile *, Filter &); // generate executable header
//virtual void pack3(OutputFile *, Filter &); // append loader
virtual void buildLoader(const Filter *);
virtual Linker* newLinker() const;
virtual void defineSymbols(Filter const *);
};
/************************************************************************* /*************************************************************************
// linux/elf32ppc // linux/elf32ppc
+3
View File
@@ -250,6 +250,9 @@ Packer* PackMaster::visitAllPackers(visit_func_t func, InputFile *f, const optio
if ((p = func(new PackLinuxElf32armBe(f), user)) != NULL) if ((p = func(new PackLinuxElf32armBe(f), user)) != NULL)
return p; return p;
delete p; p = NULL; delete p; p = NULL;
if ((p = func(new PackLinuxElf64arm(f), user)) != NULL)
return p;
delete p; p = NULL;
if ((p = func(new PackLinuxElf32ppc(f), user)) != NULL) if ((p = func(new PackLinuxElf32ppc(f), user)) != NULL)
return p; return p;
delete p; p = NULL; delete p; p = NULL;
+58 -1
View File
@@ -72,12 +72,14 @@ STUBS += arm.v5a-linux.kernel.vmlinux.h
STUBS += arm.v5a-linux.kernel.vmlinuz-head.h STUBS += arm.v5a-linux.kernel.vmlinuz-head.h
STUBS += arm.v5a-linux.kernel.vmlinuz.h STUBS += arm.v5a-linux.kernel.vmlinuz.h
STUBS += arm.v5a-linux.shlib-init.h STUBS += arm.v5a-linux.shlib-init.h
STUBS += arm.v5a-linux.shlib-init.h
STUBS += arm.v5t-linux.shlib-init.h STUBS += arm.v5t-linux.shlib-init.h
STUBS += armeb.v4a-linux.elf-entry.h STUBS += armeb.v4a-linux.elf-entry.h
STUBS += armeb.v4a-linux.elf-fold.h STUBS += armeb.v4a-linux.elf-fold.h
STUBS += armeb.v5a-linux.kernel.vmlinux-head.h STUBS += armeb.v5a-linux.kernel.vmlinux-head.h
STUBS += armeb.v5a-linux.kernel.vmlinux.h STUBS += armeb.v5a-linux.kernel.vmlinux.h
STUBS += arm64-linux.elf-entry.h
STUBS += arm64-linux.elf-fold.h
STUBS += arm64-linux.shlib-init.h
STUBS += arm64-darwin.macho-entry.h STUBS += arm64-darwin.macho-entry.h
STUBS += arm64-darwin.macho-fold.h STUBS += arm64-darwin.macho-fold.h
STUBS += i086-dos16.com.h STUBS += i086-dos16.com.h
@@ -533,6 +535,61 @@ tmp/armel-linux.elf-main.o : $(srcdir)/src/$$T.c $(srcdir)/src/i386-linux.elf-ma
$(call tc,f-objstrip,$@) $(call tc,f-objstrip,$@)
# /***********************************************************************
# // arm64-linux.elf (arm64)
# ************************************************************************/
arm64-linux.elf%.h : tc_list = arm64-linux.elf default
arm64-linux.elf%.h : tc_bfdname = elf64-littleaarch64
tc.arm64-linux.elf.gcc = /usr/bin/aarch64-linux-gnu-gcc -nostdinc -MMD -MT $@
tc.arm64-linux.elf.gcc += -fno-exceptions -fno-asynchronous-unwind-tables
tc.arm64-linux.elf.gcc += -Wall -W -Wcast-align -Wcast-qual -Wstrict-prototypes -Wwrite-strings -Werror
tc.arm64-linux.elf-fold.ld = /usr/bin/aarch64-linux-gnu-ld
tc.arm64-linux.elf-entry.objcopy = /usr/bin/aarch64-linux-gnu-objcopy -F elf64-littleaarch64
tc.arm64-linux.elf-fold.objcopy = /usr/bin/aarch64-linux-gnu-objcopy -F elf64-littleaarch64
tc.arm64-linux.elf-main.objcopy = /usr/bin/aarch64-linux-gnu-objcopy -F elf64-littleaarch64
tc.arm64-linux.elf-entry.objdump = /usr/bin/aarch64-linux-gnu-objdump
tc.arm64-linux.elf-fold.objdump = /usr/bin/aarch64-linux-gnu-objdump
tc.arm64-linux.elf-main.objdump = /usr/bin/aarch64-linux-gnu-objdump
arm64-linux.elf-entry.h : $(srcdir)/src/$$T.S
$(call tc,gcc) -c $< -o tmp/$T.bin
$(call tc,f-embed_objinfo,tmp/$T.bin)
$(call tc,bin2h) tmp/$T.bin $@
arm64-linux.elf-fold.h : tmp/$$T.o tmp/arm64-linux.elf-main.o $(srcdir)/src/arm64-linux.elf-fold.lds
$(call tc,ld) --strip-all -T $(srcdir)/src/arm64-linux.elf-fold.lds -Map tmp/$T.map $(filter %.o,$^) -o tmp/$T.bin
$(call tc,f-objstrip,tmp/$T.bin)
$(call tc,sstrip) tmp/$T.bin
$(call tc,bin2h) tmp/$T.bin $@
tmp/arm64-linux.elf-fold.o : $(srcdir)/src/$$T.S
$(call tc,gcc) -c $< -o $@
$(call tc,f-objstrip,$@)
tmp/arm64-linux.elf-main.o : $(srcdir)/src/$$T.c $(srcdir)/src/arm64-linux.elf-main.c
$(call tc,gcc) -c -Os $< -o $@
$(call tc,f-objstrip,$@)
# /***********************************************************************
# // arm64-linux.shlib arm64
# ************************************************************************/
arm64-linux.shlib%.h : tc_list = arm64-linux.elf default
arm64-linux.shlib%.h : tc_bfdname = elf64-littleaarch64
tc.arm64-linux.shlib-init.objcopy = /usr/bin/aarch64-linux-gnu-objcopy -F elf64-littleaarch64
tc.arm64-linux.shlib-init.objdump = /usr/bin/aarch64-linux-gnu-objdump
arm64-linux.shlib%.h : $(srcdir)/src/$$T.S
$(call tc,gcc) -c -x assembler-with-cpp $< -o tmp/$T.bin
$(call tc,f-embed_objinfo,tmp/$T.bin)
$(call tc,bin2h-c) tmp/$T.bin $@
# /*********************************************************************** # /***********************************************************************
# // arm.v5a-linux.shlib (arm.v5a) # // arm.v5a-linux.shlib (arm.v5a)
# ************************************************************************/ # ************************************************************************/
+468 -264
View File
@@ -1,5 +1,5 @@
/* arm64-darwin.macho-entry.h /* arm64-darwin.macho-entry.h
created from arm64-darwin.macho-entry.bin, 4261 (0x10a5) bytes created from arm64-darwin.macho-entry.bin, 7524 (0x1d64) bytes
This file is part of the UPX executable compressor. This file is part of the UPX executable compressor.
@@ -31,276 +31,480 @@
*/ */
#define STUB_ARM64_DARWIN_MACHO_ENTRY_SIZE 4261 #define STUB_ARM64_DARWIN_MACHO_ENTRY_SIZE 7524
#define STUB_ARM64_DARWIN_MACHO_ENTRY_ADLER32 0xaa67ad09 #define STUB_ARM64_DARWIN_MACHO_ENTRY_ADLER32 0xe8d2735e
#define STUB_ARM64_DARWIN_MACHO_ENTRY_CRC32 0x5553c968 #define STUB_ARM64_DARWIN_MACHO_ENTRY_CRC32 0x4030fbb8
unsigned char stub_arm64_darwin_macho_entry[4261] = { unsigned char stub_arm64_darwin_macho_entry[7524] = {
/* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0010 */ 1, 0,183, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x0010 */ 1, 0,183, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0020 */ 0, 0, 0, 0, 0, 0, 0, 0, 80, 11, 0, 0, 0, 0, 0, 0, /* 0x0020 */ 0, 0, 0, 0, 0, 0, 0, 0,168, 21, 0, 0, 0, 0, 0, 0,
/* 0x0030 */ 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, /* 0x0030 */ 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0,
/* 0x0040 */ 255, 19, 0,209,224, 7,177,169,226, 15, 1,169,228, 23, 2,169, /* 0x0040 */ 255, 19, 0,209,224, 7,177,169,226, 15, 1,169,228, 23, 2,169,
/* 0x0050 */ 230, 31, 3,169,232, 39, 4,169,234, 47, 5,169,236, 55, 6,169, /* 0x0050 */ 230, 31, 3,169,232, 39, 4,169,234, 47, 5,169,236, 55, 6,169,
/* 0x0060 */ 238, 63, 7,169,240, 71, 8,169,242, 79, 9,169,244, 87, 10,169, /* 0x0060 */ 238, 63, 7,169,240, 71, 8,169,242, 79, 9,169,244, 87, 10,169,
/* 0x0070 */ 246, 95, 11,169,248,103, 12,169,250,111, 13,169,252,119, 14,169, /* 0x0070 */ 246, 95, 11,169,248,103, 12,169,250,111, 13,169,252,119, 14,169,
/* 0x0080 */ 0, 0, 0,148,226,143,190,169,254, 11, 0,249, 7, 64, 33,139, /* 0x0080 */ 0, 0, 0,148,254, 15, 31,248,226, 15,191,169, 7, 64, 33,139,
/* 0x0090 */ 5, 0,128, 18, 4, 0,176, 82, 29, 0, 0, 20,227, 19,193,168, /* 0x0090 */ 5, 0,128, 18, 4, 0,176, 82, 24, 0, 0, 20,227, 19,193,168,
/* 0x00a0 */ 0, 0, 7,203, 66, 0, 3,203,130, 0, 0,185,228, 3, 0,170, /* 0x00a0 */ 0, 0, 7,203, 66, 0, 3,203,130, 0, 0,185,228, 3, 0,170,
/* 0x00b0 */ 224, 3, 3,170,225, 3, 2,170,224, 7,191,169, 35, 0,128, 82, /* 0x00b0 */ 224, 3, 3,170, 97, 0, 2,139, 32,123, 11,213, 32,117, 11,213,
/* 0x00c0 */ 8, 0,176, 82, 0, 16, 32,212,224, 7,193,168, 3, 0,128, 82, /* 0x00c0 */ 0, 0, 1,145, 31, 0, 1,235,131,255,255, 84,224, 3, 4,170,
/* 0x00d0 */ 8, 0,176, 82, 0, 16, 32,212,224, 3, 4,170,254,135, 64,248, /* 0x00d0 */ 254, 7, 65,248,192, 3, 95,214,132, 0, 4, 43, 68, 0, 0, 52,
/* 0x00e0 */ 192, 3, 95,214,132, 0, 4, 43, 68, 0, 0, 52,192, 3, 95,214, /* 0x00e0 */ 192, 3, 95,214, 4, 68, 64,184,132, 0, 4, 58,192, 3, 95,214,
/* 0x00f0 */ 4, 20, 64, 56,132, 0, 4, 58,132, 32, 9, 83,132, 0, 4, 43, /* 0x00f0 */ 3, 20, 64, 56, 67, 20, 0, 56,248,255,255,151,162,255,255, 84,
/* 0x0100 */ 192, 3, 95,214, 3, 20, 64, 56, 67, 20, 0, 56,246,255,255,151, /* 0x0100 */ 33, 0,128, 82, 4, 0, 0, 20, 33, 4, 0, 81,243,255,255,151,
/* 0x0110 */ 162,255,255, 84, 33, 0,128, 82, 4, 0, 0, 20, 33, 4, 0, 81, /* 0x0110 */ 33, 0, 1, 26,241,255,255,151, 33, 0, 1, 26,239,255,255,151,
/* 0x0120 */ 241,255,255,151, 33, 0, 1, 26,239,255,255,151, 33, 0, 1, 26, /* 0x0120 */ 67,255,255, 84, 35, 12, 0,113, 1, 0,128, 82, 35, 1, 0, 84,
/* 0x0130 */ 237,255,255,151, 67,255,255, 84, 35, 12, 0,113, 1, 0,128, 82, /* 0x0130 */ 5, 20, 64, 56,165, 32, 3, 42,229, 3, 37, 42, 5,251,255, 52,
/* 0x0140 */ 35, 1, 0, 84, 5, 20, 64, 56,165, 32, 3, 42,229, 3, 37, 42, /* 0x0140 */ 191, 0, 0,114,165,124, 1, 19,161, 1, 0, 84, 3, 0, 0, 20,
/* 0x0150 */ 101,250,255, 52,191, 0, 0,114,165,124, 1, 19,161, 1, 0, 84, /* 0x0150 */ 226,255,255,151, 66, 1, 0, 84, 33, 0,128, 82,223,255,255,151,
/* 0x0160 */ 3, 0, 0, 20,224,255,255,151, 66, 1, 0, 84, 33, 0,128, 82, /* 0x0160 */ 226, 0, 0, 84,221,255,255,151, 33, 0, 1, 26,219,255,255,151,
/* 0x0170 */ 221,255,255,151,226, 0, 0, 84,219,255,255,151, 33, 0, 1, 26, /* 0x0170 */ 163,255,255, 84, 33, 16, 0, 17, 4, 0, 0, 20,215,255,255,151,
/* 0x0180 */ 217,255,255,151,163,255,255, 84, 33, 16, 0, 17, 4, 0, 0, 20, /* 0x0180 */ 33, 0, 1, 26, 33, 8, 0, 17,191, 0, 20, 49, 33, 36,129, 26,
/* 0x0190 */ 213,255,255,151, 33, 0, 1, 26, 33, 8, 0, 17,191, 0, 20, 49, /* 0x0190 */ 67, 64, 33,139, 99,240, 95, 56, 67,200,101, 56, 67, 20, 0, 56,
/* 0x01a0 */ 33, 52,129, 26, 67,192, 33,139, 99,240, 95, 56, 67,200,101, 56, /* 0x01a0 */ 33, 4, 0,113,161,255,255, 84,212,255,255, 23,226, 15,190,169,
/* 0x01b0 */ 67, 20, 0, 56, 33, 4, 0,113,161,255,255, 84,212,255,255, 23, /* 0x01b0 */ 254, 11, 0,249, 7, 64, 33,139, 5, 0,128, 18, 4, 0,176, 82,
/* 0x01c0 */ 226,143,190,169,254, 11, 0,249, 7, 64, 33,139, 5, 0,128, 18, /* 0x01c0 */ 24, 0, 0, 20,227, 19,193,168, 0, 0, 7,203, 66, 0, 3,203,
/* 0x01d0 */ 4, 0,176, 82, 29, 0, 0, 20,227, 19,193,168, 0, 0, 7,203, /* 0x01d0 */ 130, 0, 0,185,228, 3, 0,170,224, 3, 3,170, 97, 0, 2,139,
/* 0x01e0 */ 66, 0, 3,203,130, 0, 0,185,228, 3, 0,170,224, 3, 3,170, /* 0x01e0 */ 32,123, 11,213, 32,117, 11,213, 0, 0, 1,145, 31, 0, 1,235,
/* 0x01f0 */ 225, 3, 2,170,224, 7,191,169, 35, 0,128, 82, 8, 0,176, 82, /* 0x01f0 */ 131,255,255, 84,224, 3, 4,170,254, 7, 65,248,192, 3, 95,214,
/* 0x0200 */ 0, 16, 32,212,224, 7,193,168, 3, 0,128, 82, 8, 0,176, 82, /* 0x0200 */ 132, 0, 4, 43, 68, 0, 0, 52,192, 3, 95,214, 4, 68, 64,184,
/* 0x0210 */ 0, 16, 32,212,224, 3, 4,170,254,135, 64,248,192, 3, 95,214, /* 0x0210 */ 132, 0, 4, 58,192, 3, 95,214, 3, 20, 64, 56, 67, 20, 0, 56,
/* 0x0220 */ 132, 0, 4, 43, 68, 0, 0, 52,192, 3, 95,214, 4, 20, 64, 56, /* 0x0220 */ 248,255,255,151,162,255,255, 84, 33, 0,128, 82, 4, 0, 0, 20,
/* 0x0230 */ 132, 0, 4, 58,132, 32, 9, 83,132, 0, 4, 43,192, 3, 95,214, /* 0x0230 */ 33, 4, 0, 81,243,255,255,151, 33, 0, 1, 58,241,255,255,151,
/* 0x0240 */ 3, 20, 64, 56, 67, 20, 0, 56,246,255,255,151,162,255,255, 84, /* 0x0240 */ 33, 0, 1, 58,239,255,255,151, 67,255,255, 84, 35, 12, 0,113,
/* 0x0250 */ 33, 0,128, 82, 4, 0, 0, 20, 33, 4, 0, 81,241,255,255,151, /* 0x0250 */ 1, 0,128, 82, 35, 1, 0, 84, 5, 20, 64, 56,165, 32, 3, 42,
/* 0x0260 */ 33, 0, 1, 58,239,255,255,151, 33, 0, 1, 58,237,255,255,151, /* 0x0260 */ 229, 3, 37, 42, 5,251,255, 52,163, 0, 1, 83,165,124, 1, 83,
/* 0x0270 */ 67,255,255, 84, 35, 12, 0,113, 1, 0,128, 82, 35, 1, 0, 84, /* 0x0270 */ 99, 0, 3, 43, 2, 0, 0, 20,226,255,255,151, 33, 0, 1, 58,
/* 0x0280 */ 5, 20, 64, 56,165, 32, 3, 42,229, 3, 37, 42,101,250,255, 52, /* 0x0280 */ 224,255,255,151, 33, 0, 1, 58,225, 0, 0, 84, 33, 0,128, 82,
/* 0x0290 */ 163, 0, 1, 83,165,124, 1, 83, 99, 0, 3, 43, 2, 0, 0, 20, /* 0x0290 */ 220,255,255,151, 33, 0, 1, 58,218,255,255,151,163,255,255, 84,
/* 0x02a0 */ 224,255,255,151, 33, 0, 1, 58,222,255,255,151, 33, 0, 1, 58, /* 0x02a0 */ 33, 8, 0, 17, 33, 4, 0, 17,191, 0, 20, 49, 33, 52,129, 26,
/* 0x02b0 */ 225, 0, 0, 84, 33, 0,128, 82,218,255,255,151, 33, 0, 1, 58, /* 0x02b0 */ 67, 0, 64, 57, 67,200,101, 56, 67, 20, 0, 56, 33, 4, 0,113,
/* 0x02c0 */ 216,255,255,151,163,255,255, 84, 33, 8, 0, 17, 33, 4, 0, 17, /* 0x02c0 */ 161,255,255, 84,215,255,255, 23, 1, 64, 33,139,225, 11,190,169,
/* 0x02d0 */ 191, 0, 20, 49, 33, 52,129, 26, 67, 0, 64, 57, 67,200,101, 56, /* 0x02d0 */ 227,123, 1,169, 5, 0,128, 18, 4, 0,176, 82, 31, 0, 0, 20,
/* 0x02e0 */ 67, 20, 0, 56, 33, 4, 0,113,161,255,255, 84,215,255,255, 23, /* 0x02e0 */ 228,123, 65,169,225, 15,194,168, 0, 0, 1,203, 66, 0, 3,203,
/* 0x02f0 */ 1, 64, 33,139,225, 11,190,169,227,123, 1,169, 5, 0,128, 18, /* 0x02f0 */ 130, 0, 0,185,228, 3, 0,170,224, 3, 3,170, 97, 0, 2,139,
/* 0x0300 */ 4, 0,176, 82, 37, 0, 0, 20,228, 11, 64,249,225,143,193,168, /* 0x0300 */ 32,123, 11,213, 32,117, 11,213, 0, 0, 1,145, 31, 0, 1,235,
/* 0x0310 */ 0, 0, 1,203, 66, 0, 3,203,130, 0, 0,185,228, 3, 0,170, /* 0x0310 */ 131,255,255, 84,224, 3, 4,170,192, 3, 95,214,132, 0, 4, 43,
/* 0x0320 */ 224, 3, 3,170,225, 3, 2,170,224, 7,191,169, 35, 0,128, 82, /* 0x0320 */ 68, 0, 0, 52,192, 3, 95,214, 4, 68, 64,184,132, 0, 4, 58,
/* 0x0330 */ 8, 0,176, 82, 0, 16, 32,212,224, 7,193,168, 3, 0,128, 82, /* 0x0330 */ 192, 3, 95,214, 33, 0,128, 82,240, 3, 30,170,248,255,255,151,
/* 0x0340 */ 8, 0,176, 82, 0, 16, 32,212,224, 3, 4,170,254,135, 64,248, /* 0x0340 */ 33, 0, 1, 58,246,255,255,151,163,255,255, 84, 0, 2, 31,214,
/* 0x0350 */ 192, 3, 95,214,132, 0, 4, 43, 68, 0, 0, 52,192, 3, 95,214, /* 0x0350 */ 3, 20, 64, 56, 67, 20, 0, 56,241,255,255,151,162,255,255, 84,
/* 0x0360 */ 4, 20, 64, 56,132, 0, 4, 26,132, 32, 9, 83,132, 0, 4, 43, /* 0x0360 */ 245,255,255,151, 35, 12, 0,113, 1, 0,128, 82,163, 0, 0, 84,
/* 0x0370 */ 192, 3, 95,214, 33, 0,128, 82,240, 3, 30,170,246,255,255,151, /* 0x0370 */ 5, 20, 64, 56,165, 32, 3, 42,229, 3, 37, 42, 37,251,255, 52,
/* 0x0380 */ 33, 0, 1, 58,244,255,255,151,163,255,255, 84, 0, 2, 31,214, /* 0x0380 */ 231,255,255,151, 33, 0, 1, 58,229,255,255,151, 33, 0, 1, 58,
/* 0x0390 */ 3, 20, 64, 56, 67, 20, 0, 56,239,255,255,151,162,255,255, 84, /* 0x0390 */ 97, 0, 0, 84,232,255,255,151, 33, 8, 0, 17,191, 0, 52, 49,
/* 0x03a0 */ 245,255,255,151, 35, 12, 0,113, 1, 0,128, 82,163, 0, 0, 84, /* 0x03a0 */ 33, 36,129, 26, 67,200,101, 56, 33, 4, 0,113, 67, 20, 0, 56,
/* 0x03b0 */ 5, 20, 64, 56,165, 32, 3, 42,229, 3, 37, 42,101,250,255, 52, /* 0x03b0 */ 162,255,255, 84,233,255,255, 23,159, 56, 0,113, 1, 0, 0, 84,
/* 0x03c0 */ 229,255,255,151, 33, 0, 1, 58,227,255,255,151, 33, 0, 1, 58, /* 0x03c0 */ 1, 64, 33,139, 4, 0,128,210,225, 11,190,169,227,123, 1,169,
/* 0x03d0 */ 97, 0, 0, 84,232,255,255,151, 33, 8, 0, 17,191, 0, 52, 49, /* 0x03d0 */ 228, 19,191,169,224, 3, 0,145,227, 35, 0,145,230, 51, 0,145,
/* 0x03e0 */ 33, 36,129, 26, 67,200,101, 56, 33, 4, 0,113, 67, 20, 0, 56, /* 0x03e0 */ 8, 0, 64, 57, 7,192,128, 82, 8,125, 3, 83,231, 32,200, 26,
/* 0x03f0 */ 162,255,255, 84,233,255,255, 23,230,123,191,169,227,147,190,169, /* 0x03f0 */ 253, 3, 0,145,231,192, 57, 17,232, 3, 0,145,255, 67, 39,203,
/* 0x0400 */ 229, 11, 0,249,232, 3, 1,170, 45, 64, 34,139,233, 3, 4,170, /* 0x0400 */ 100, 16,129,168,127, 0, 8,235,195,255,255, 84,230, 3, 3,170,
/* 0x0410 */ 142, 64, 37,139,235, 3, 0,170, 6, 21, 64, 56,160, 5,128, 82, /* 0x0410 */ 229, 3, 7, 42,228, 3, 2,170, 34, 8, 0, 81,225, 3, 0,170,
/* 0x0420 */ 196, 8,192, 26, 0,124, 4, 27,198, 0, 0, 75, 32, 1,128, 82, /* 0x0420 */ 39, 20, 64, 56,231, 8, 0, 18,231, 11, 0, 57, 39, 20, 64, 56,
/* 0x0430 */ 197, 8,192, 26, 0,124, 5, 27,198, 0, 0, 75,174, 0, 6, 11, /* 0x0430 */ 232,124, 4, 83,232, 7, 0, 57,231, 12, 0, 18,231, 3, 0, 57,
/* 0x0440 */ 7, 0,128, 18,229, 32,197, 26,229, 3, 37, 42,228, 32,196, 26, /* 0x0440 */ 224, 3, 0,145, 17, 0, 0,148,191, 3, 0,145,228,123, 65,169,
/* 0x0450 */ 228, 3, 36, 42, 35, 0,128, 82, 34, 0,128, 82, 33, 0,128, 82, /* 0x0450 */ 225, 15,194,168, 0, 0, 1,203, 66, 0, 3,203,130, 0, 0,185,
/* 0x0460 */ 32, 0,128, 82, 6, 0,128, 82,230, 31, 0,185, 2, 96,128, 82, /* 0x0460 */ 228, 3, 0,170,224, 3, 3,170, 97, 0, 2,139, 32,123, 11,213,
/* 0x0470 */ 192,230,128, 82, 66, 32,206, 26, 66, 0, 0, 11, 0,128,128,210, /* 0x0470 */ 32,117, 11,213, 0, 0, 1,145, 31, 0, 1,235,131,255,255, 84,
/* 0x0480 */ 225, 3, 11,170, 0, 64, 0,170, 0,128, 0,170, 32,132, 0,248, /* 0x0480 */ 224, 3, 4,170,192, 3, 95,214,243, 83,184,169, 39, 0,128, 82,
/* 0x0490 */ 66, 16, 0,113,204,255,255, 84, 0, 21, 0,145,231, 0, 0,148, /* 0x0490 */ 20, 16, 0,145,245, 91, 1,169,247, 99, 2,169,249,107, 3,169,
/* 0x04a0 */ 31, 0, 8,235,193,255,255, 84,227, 67, 66,248,226, 19, 64,185, /* 0x04a0 */ 251,115, 4,169,254, 43, 0,249, 8, 4, 64, 57, 26, 8, 64, 57,
/* 0x04b0 */ 36, 1, 3,203,128, 0, 2, 10,224, 47, 0,185, 0, 16, 6, 11, /* 0x04b0 */ 28, 0, 64, 57,127, 0, 0,185,250, 32,218, 26,223, 0, 0,185,
/* 0x04c0 */ 97, 1, 0,145,225, 0, 0,148,129, 5, 0, 84,227, 23, 64,185, /* 0x04c0 */ 231, 32,200, 26,231, 4, 0, 81,231,111, 0,185, 8, 4, 64, 57,
/* 0x04d0 */ 226, 27, 64,185, 99, 0, 4, 10,224,115, 64, 57, 99, 32,194, 26, /* 0x04d0 */ 7, 96,128, 82, 90, 7, 0, 81, 8, 1, 28, 11,232, 32,200, 26,
/* 0x04e0 */ 226, 3, 2, 75, 66, 32, 0, 17, 2, 36,194, 26, 99, 0, 2, 11, /* 0x04e0 */ 8,217, 28, 49,224, 0, 0, 84, 7, 0,128,210, 9,128,128, 82,
/* 0x04f0 */ 106,177, 57,145, 99, 4, 3, 11,227, 3, 3, 42, 32, 0,128, 82, /* 0x04f0 */ 137,122, 39,120,231, 4, 0,145, 31, 1, 7,107,168,255,255, 84,
/* 0x0500 */ 74, 37, 3,139,223, 28, 0,113, 3, 2, 0, 84,227,125, 64,147, /* 0x0500 */ 51, 64, 34,139,127, 2, 1,235, 0, 15, 0, 84,235, 3, 1,170,
/* 0x0510 */ 227, 3, 3,203, 37,105, 99, 56,165,120, 31, 83, 65, 1, 8,145, /* 0x0510 */ 34, 4, 0,145,103, 85, 64, 56,127, 2, 2,235, 96, 14, 0, 84,
/* 0x0520 */ 164, 0, 24, 18,227, 3, 4, 42, 33, 4, 3,139,201, 0, 0,148, /* 0x0520 */ 72, 20, 64, 56,127, 1, 2,235, 7, 33, 7, 42, 97,255,255, 84,
/* 0x0530 */ 3, 0, 0, 18,127, 32, 68,107,193, 0, 0, 84, 31, 0, 4,113, /* 0x0530 */ 37, 68, 0, 52, 9,176, 41,145, 59, 0,128, 82,233, 63, 0,249,
/* 0x0540 */ 195,254,255, 84, 5, 0, 0, 20,225, 3, 10,170,193, 0, 0,148, /* 0x0540 */ 9, 1,128, 82, 41, 1, 28, 75, 10, 0,128, 18,245, 3, 27, 42,
/* 0x0550 */ 31, 0, 4,113,163,255,255, 84, 98, 0,128, 82,195, 0,128, 82, /* 0x0550 */ 25, 0,128, 82, 8, 0,128, 82, 2, 0,128, 82, 16,224,191, 18,
/* 0x0560 */ 223, 40, 0,113, 67, 48,131, 26,223, 16, 0,113,195, 48,131, 26, /* 0x0560 */ 17, 0,129, 82,251,107, 0,185,251,115, 0,185,233,119, 0,185,
/* 0x0570 */ 198, 0, 3, 75, 34, 0, 0, 20, 97, 1, 6,145,178, 0, 0,148, /* 0x0570 */ 78, 0, 26, 10, 44,111, 28, 83, 95, 1, 16,107,201,125, 64,147,
/* 0x0580 */ 129, 1, 0, 84,227, 11, 64,185,226, 7, 64,185,227, 15, 0,185, /* 0x0580 */ 44,193, 44,139,143,249,127,211,232, 0, 0, 84,127, 2, 11,235,
/* 0x0590 */ 226, 11, 0,185,239, 7, 0,185, 3, 0,128, 82,223, 28, 0,113, /* 0x0590 */ 192, 10, 0, 84,105, 1, 64, 57, 74, 93, 24, 83,107, 5, 0,145,
/* 0x05a0 */ 102, 0,128, 82,102, 48,134, 26,106,145, 25,145, 42, 0, 0, 20, /* 0x05a0 */ 39, 33, 7, 42,141,122,108,120, 73,125, 11, 83,169,125, 9, 27,
/* 0x05b0 */ 97, 97, 6,145,164, 0, 0,148, 97, 2, 0, 84,227, 47, 64,185, /* 0x05b0 */ 255, 0, 9,107,162, 10, 0, 84,234,211, 65, 57, 63, 27, 0,113,
/* 0x05c0 */ 97,129, 7,145, 96, 16, 6, 11,160, 0, 0,148,161, 3, 0, 84, /* 0x05c0 */ 8, 41,202, 26,234,111, 64,185, 79, 0, 10, 10,239, 33,220, 26,
/* 0x05d0 */ 35, 1,128, 82,223, 28, 0,113,102, 1,128, 82,102, 48,134, 26, /* 0x05d0 */ 239, 1, 8, 11, 40, 2, 13, 75,234,117, 30, 83, 79, 1, 15, 75,
/* 0x05e0 */ 227, 67, 66,248, 36, 1, 3,203,159, 0, 15,107,131, 17, 0, 84, /* 0x05e0 */ 173, 21,136, 11,239, 93,120,211,141,122, 44,120,239,217, 28,145,
/* 0x05f0 */ 227,125, 64,147,227, 3, 3,203, 32,105, 99, 56, 32, 21, 0, 56, /* 0x05f0 */ 143, 6, 15,139, 45, 31, 0, 84, 72, 0, 21, 75,146,104,104, 56,
/* 0x0600 */ 121, 0, 0, 20, 97,193, 6,145,143, 0, 0,148,228, 7, 64,185, /* 0x0600 */ 40, 0,128, 82, 7, 0, 0, 20,236,121, 42,120, 8,121, 31, 83,
/* 0x0610 */ 64, 1, 0, 84, 97, 33, 7,145,139, 0, 0,148,228, 11, 64,185, /* 0x0610 */ 233, 3, 14, 42,205, 56, 0, 53, 31,253, 3,113,204, 3, 0, 84,
/* 0x0620 */ 128, 0, 0, 84,227, 11, 64,185,228, 15, 64,185,227, 15, 0,185, /* 0x0620 */ 82,122, 31, 83, 63, 1, 16,107, 77, 2, 24, 18, 22,121, 31, 83,
/* 0x0630 */ 227, 7, 64,185,227, 11, 0,185,239, 7, 0,185,239, 3, 4, 42, /* 0x0630 */ 170,125, 64,147, 74, 1, 4,145, 74,193, 40,139,232, 0, 0, 84,
/* 0x0640 */ 3, 1,128, 82,223, 28, 0,113,102, 1,128, 82,102, 48,134, 26, /* 0x0640 */ 127, 1, 19,235, 41, 93, 24, 83, 0, 5, 0, 84,108, 1, 64, 57,
/* 0x0650 */ 106,161, 41,145, 65, 1, 0,145,125, 0, 0,148, 1, 1, 0, 84, /* 0x0650 */ 107, 5, 0,145,135, 33, 7, 42,236,121,106,120, 46,125, 11, 83,
/* 0x0660 */ 227, 47, 64,185, 69, 17, 0,145,227, 3, 3, 42, 2, 0,128, 82, /* 0x0660 */ 55, 2, 12, 75,142,125, 14, 27,152, 21, 76, 75,140, 21,151, 11,
/* 0x0670 */ 165, 16, 3,139, 4, 1,128, 82, 14, 0, 0, 20, 65, 9, 0,145, /* 0x0670 */ 255, 0, 14,107, 41, 1, 14, 75,131,252,255, 84,248,121, 42,120,
/* 0x0680 */ 115, 0, 0,148, 1, 1, 0, 84,227, 47, 64,185, 69, 17, 4,145, /* 0x0680 */ 200, 6, 0, 17,231, 0, 14, 75,141,252,255, 53, 31,253, 3,113,
/* 0x0690 */ 227, 3, 3, 42, 2, 1,128, 82,165, 16, 3,139, 4, 1,128, 82, /* 0x0690 */ 45, 27, 0, 84, 8, 29, 0, 83,234, 3, 9, 42,136, 72, 34, 56,
/* 0x06a0 */ 4, 0, 0, 20, 69, 17, 8,145, 2, 2,128, 82, 4, 32,128, 82, /* 0x06a0 */ 66, 4, 0, 17, 63, 39, 0,113,140, 49, 0, 84, 57, 15, 0, 81,
/* 0x06b0 */ 226, 55, 0,185, 32, 0,128, 82,225, 3, 5,170,101, 0, 0,148, /* 0x06b0 */ 191, 0, 2,107,232,245,255, 84, 0,224,191, 18, 95, 1, 0,107,
/* 0x06c0 */ 3, 0, 4,107,163,255,255, 84,229, 55, 64,185,165, 0, 3, 11, /* 0x06c0 */ 136, 0, 0, 84,127, 2, 11,235, 0, 1, 0, 84,107, 5, 0,145,
/* 0x06d0 */ 229, 55, 0,185,223, 16, 0,113,194, 6, 0, 84,198, 28, 0, 17, /* 0x06d0 */ 97, 1, 1,203, 97, 0, 0,185, 0, 0,128, 82,194, 0, 0,185,
/* 0x06e0 */ 99, 0,128, 82,191, 16, 0,113,101, 32,133, 26,227, 3, 5, 42, /* 0x06e0 */ 3, 0, 0, 20, 31, 32, 3,213, 32, 0,128, 82,245, 91, 65,169,
/* 0x06f0 */ 101, 29, 3,139,165,128, 13,145, 32, 0,128, 82, 4, 8,128, 82, /* 0x06f0 */ 247, 99, 66,169,249,107, 67,169,251,115, 68,169,254, 43, 64,249,
/* 0x0700 */ 225, 3, 5,170, 83, 0, 0,148, 3, 0, 4,107,163,255,255, 84, /* 0x0700 */ 243, 83,200,168,192, 3, 95,214, 74, 1, 9, 75,173, 21, 77, 75,
/* 0x0710 */ 227, 47, 0,185,127, 16, 0,113, 99, 4, 0, 84,100,124, 1, 83, /* 0x0710 */ 231, 0, 9, 75,141,122, 44,120, 41,127, 64,147, 95, 1, 16,107,
/* 0x0720 */ 132, 4, 0, 81,111, 0, 0, 18,239, 1, 31, 50,127, 56, 0,113, /* 0x0720 */ 41, 1, 3,145, 45,249,127,211,232, 0, 0, 84,127, 1, 19,235,
/* 0x0730 */ 226, 0, 0, 84,239, 33,196, 26,106,121, 21,145,227, 1, 3, 75, /* 0x0730 */ 192,253,255, 84,104, 1, 64, 57, 74, 93, 24, 83,107, 5, 0,145,
/* 0x0740 */ 227, 3, 3, 42, 74, 5, 3,139, 12, 0, 0, 20,132, 16, 0, 81, /* 0x0740 */ 7, 33, 7, 42,140,122,105,120, 72,125, 11, 83,136,125, 8, 27,
/* 0x0750 */ 53, 0, 0,148,231,124, 1, 83,131, 1, 7,107,108, 32,140, 26, /* 0x0750 */ 255, 0, 8,107, 98, 25, 0, 84,234,107, 64,185, 63, 31, 0,113,
/* 0x0760 */ 239, 1, 15, 26,132, 4, 0,113, 65,255,255, 84,106, 17, 25,145, /* 0x0760 */ 251,115, 64,185,234,115, 0,185, 42, 2, 12, 75,245,107, 0,185,
/* 0x0770 */ 239,109, 28, 83,132, 0,128, 82, 37, 0,128, 82, 32, 0,128, 82, /* 0x0770 */ 140, 21,138, 11,140,122, 41,120,105, 0,128, 82,249,179,137, 26,
/* 0x0780 */ 225, 3, 10,170, 51, 0, 0,148, 31, 0, 0,114, 64, 0, 0, 84, /* 0x0780 */ 9,160, 25,145, 31, 1, 16,107,232, 0, 0, 84,127, 2, 11,235,
/* 0x0790 */ 239, 1, 5, 42,165,120, 31, 83,132, 4, 0,113, 33,255,255, 84, /* 0x0790 */ 192,250,255, 84,106, 1, 64, 57, 8, 93, 24, 83,107, 5, 0,145,
/* 0x07a0 */ 2, 0, 0, 20,239, 47, 64,185,239, 5, 0, 49,229, 55, 64,185, /* 0x07a0 */ 71, 33, 7, 42, 44, 1, 64,121, 10,125, 11, 83,138,125, 10, 27,
/* 0x07b0 */ 227, 67, 66,248,165, 8, 0, 17, 35, 1, 3,203,255, 1, 3,107, /* 0x07b0 */ 255, 0, 10,107,226, 30, 0, 84,210,113, 29, 83, 40, 2, 12, 75,
/* 0x07c0 */ 232, 2, 0, 84,227,125, 64,147,227, 3, 3,203, 32,105, 99, 56, /* 0x07c0 */ 22, 0,128, 82,126, 0,128, 82, 82,126, 64,147,140, 21,136, 11,
/* 0x07d0 */ 32, 21, 0, 56, 63, 1, 14,235,194, 0, 0, 84,165, 4, 0,113, /* 0x07d0 */ 82, 10, 0,145, 44, 1, 0,121, 50, 5, 18,139,238, 3, 30, 42,
/* 0x07e0 */ 97,255,255, 84,224,115, 0, 57, 63, 1, 14,235,227,229,255, 84, /* 0x07e0 */ 45, 0,128, 82, 6, 0, 0, 20,232, 1, 0,121,206, 5, 0,113,
/* 0x07f0 */ 13, 0, 0,148, 0, 0,128, 82,226, 19, 64,249, 3, 1, 2,203, /* 0x07f0 */ 173,121, 31, 83,234, 3, 9, 42, 32, 3, 0, 84, 95, 1, 16,107,
/* 0x0800 */ 226, 31, 64,249, 67, 0, 0,185,226, 67, 66,248, 35, 1, 2,203, /* 0x0800 */ 183,121, 31, 83, 79,198, 45,139,232, 0, 0, 84,127, 2, 11,235,
/* 0x0810 */ 226, 55, 64,249, 67, 0, 0,185,255,243, 0,145, 32, 0,128, 82, /* 0x0810 */ 74, 93, 24, 83,160,246,255, 84,104, 1, 64, 57,107, 5, 0,145,
/* 0x0820 */ 246,255,255, 23,227,124, 24, 83,195, 0, 0, 53, 31, 1, 13,235, /* 0x0820 */ 7, 33, 7, 42,232, 1, 64,121, 73,125, 11, 83, 44, 2, 8, 75,
/* 0x0830 */ 231, 92, 24, 83, 66,255,255, 84, 3, 21, 64, 56,108, 32, 12, 42, /* 0x0830 */ 9,125, 9, 27, 24, 21, 72, 75, 8, 21,140, 11,255, 0, 9,107,
/* 0x0840 */ 192, 3, 95,214,224, 3, 6, 42, 33, 68, 32,139, 0, 0,128, 82, /* 0x0840 */ 74, 1, 9, 75, 35,253,255, 84,248, 1, 0,121,206, 5, 0,113,
/* 0x0850 */ 33, 68, 32,139,227,124, 24, 83,241, 3, 30,170, 94, 0, 0, 16, /* 0x0850 */ 231, 0, 9, 75,237, 6, 0, 17, 33,253,255, 84, 40, 0,128, 82,
/* 0x0860 */ 99,254,255, 52, 35, 0, 64,121,226,124, 11, 83, 98,124, 2, 27, /* 0x0860 */ 63, 15, 0,113, 30, 33,222, 26,222, 2, 30, 75,205, 3, 13, 11,
/* 0x0870 */ 159, 1, 2,107, 2, 1, 0, 84, 2, 0,129, 82,231, 3, 2, 42, /* 0x0870 */ 236, 22, 0, 84,191, 13, 0,113,104, 0,128, 82,181,209,136, 26,
/* 0x0880 */ 66, 0, 3, 75, 0, 0, 0, 58, 99, 20, 66, 11, 35, 0, 0,121, /* 0x0880 */ 207, 0,128, 82,181,102, 26, 83, 46, 0,128, 82,181,126, 64,147,
/* 0x0890 */ 32, 2, 95,214,140, 1, 2, 75,231, 0, 2, 75, 99, 20, 67, 75, /* 0x0890 */ 181,194, 6,145,181,250,127,211, 7, 0, 0, 20, 31, 32, 3,213,
/* 0x08a0 */ 0, 0, 0, 58, 35, 0, 0,121, 32, 2, 95,214,195, 3, 64,185, /* 0x08a0 */ 136,106, 50,120,239, 5, 0,113,206,121, 31, 83,234, 3, 9, 42,
/* 0x08b0 */ 193, 7, 64,185,194, 67, 33,139, 66, 48, 0,145,192, 67, 35,139, /* 0x08b0 */ 32, 3, 0, 84, 95, 1, 16,107,214,121, 31, 83,178,198, 46,139,
/* 0x08c0 */ 0, 0, 3,145,228, 3, 1, 42, 73,204, 95,184,132, 16, 0, 81, /* 0x08c0 */ 232, 0, 0, 84,127, 2, 11,235, 74, 93, 24, 83,224,240,255, 84,
/* 0x08d0 */ 9,204, 31,184,164,255,255, 53,196, 11, 64,185,222, 3, 2,145, /* 0x08d0 */ 104, 1, 64, 57,107, 5, 0,145, 7, 33, 7, 42,136,106,114,120,
/* 0x08e0 */ 227,143, 31,184,227, 3, 0,145,226, 3, 30,170,171, 32, 1,209, /* 0x08e0 */ 73,125, 11, 83, 44, 2, 8, 75, 9,125, 9, 27, 23, 21, 72, 75,
/* 0x08f0 */ 234, 3, 30,170,160, 0, 63,214, 64, 1, 31,214,229, 3, 30,170, /* 0x08f0 */ 8, 21,140, 11,255, 0, 9,107, 74, 1, 9, 75, 35,253,255, 84,
/* 0x0900 */ 235,255,255,151,102,105,108,101, 32,102,111,114,109, 97,116, 32, /* 0x0900 */ 151,106, 50,120,239, 5, 0,113,231, 0, 9, 75,206, 6, 0, 17,
/* 0x0910 */ 101,108,102, 54, 52, 45,108,105,116,116,108,101, 97, 97,114, 99, /* 0x0910 */ 33,253,255, 84,213, 1, 1, 81,191, 14, 0,113, 45, 17, 0, 84,
/* 0x0920 */ 104, 54, 52, 10, 10, 83,101, 99,116,105,111,110,115, 58, 10, 73, /* 0x0920 */ 191, 54, 0,113,168, 2, 0, 18, 8, 1, 31, 50,169,126, 1, 19,
/* 0x0930 */ 100,120, 32, 78, 97,109,101, 32, 32, 32, 32, 32, 32, 32, 32, 32, /* 0x0930 */ 44, 32, 0, 84, 47, 5, 0, 81, 9, 86,128,210, 46,193, 53,203,
/* 0x0940 */ 32, 83,105,122,101, 32, 32, 32, 32, 32, 32, 86, 77, 65, 32, 32, /* 0x0940 */ 21, 33,207, 26,206, 65, 53,139,142, 6, 14,139,206, 9, 0,209,
/* 0x0950 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 76, 77, 65, /* 0x0950 */ 50, 0,128, 82,247, 3, 18, 42, 8, 0, 0, 20, 31, 32, 3,213,
/* 0x0960 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 70, /* 0x0960 */ 200, 2, 0,121, 82,122, 31, 83,234, 3, 9, 42,239, 5, 0,113,
/* 0x0970 */ 105,108,101, 32,111,102,102, 32, 32, 65,108,103,110, 32, 32, 70, /* 0x0970 */ 247,122, 31, 83, 96, 14, 0, 84, 95, 1, 16,107, 88,122, 31, 83,
/* 0x0980 */ 108, 97,103,115, 10, 32, 32, 48, 32, 77, 65, 67, 72, 77, 65, 73, /* 0x0980 */ 214,197, 50,139,232, 0, 0, 84,127, 2, 11,235, 74, 93, 24, 83,
/* 0x0990 */ 78, 88, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 52, 52, 32, /* 0x0990 */ 192,234,255, 84,104, 1, 64, 57,107, 5, 0,145, 7, 33, 7, 42,
/* 0x09a0 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x09a0 */ 200, 2, 64,121, 73,125, 11, 83, 44, 2, 8, 75, 9,125, 9, 27,
/* 0x09b0 */ 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x09b0 */ 30, 21, 72, 75, 8, 21,140, 11,255, 0, 9,107, 74, 1, 9, 75,
/* 0x09c0 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 52, 48, 32, 32, 50, /* 0x09c0 */ 3,253,255, 84,222, 2, 0,121,231, 0, 9, 75,181, 2, 23, 42,
/* 0x09d0 */ 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, /* 0x09d0 */ 18, 7, 0, 17,230,255,255, 23, 40, 0,128, 82, 6, 0, 0, 20,
/* 0x09e0 */ 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, /* 0x09e0 */ 8,121, 31, 83,234,121, 46,120, 31,253, 3,113,233, 3, 12, 42,
/* 0x09f0 */ 32, 49, 32, 78, 82, 86, 95, 72, 69, 65, 68, 32, 32, 32, 32, 32, /* 0x09f0 */ 44, 3, 0, 84, 63, 1, 16,107, 18,121, 31, 83, 14,125, 64,147,
/* 0x0a00 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, /* 0x0a00 */ 232, 0, 0, 84,127, 2, 11,235, 41, 93, 24, 83,224,230,255, 84,
/* 0x0a10 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, /* 0x0a10 */ 106, 1, 64, 57,107, 5, 0,145, 71, 33, 7, 42,234,121,110,120,
/* 0x0a20 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, /* 0x0a20 */ 44,125, 11, 83, 45, 2, 10, 75, 76,125, 12, 27, 86, 21, 74, 75,
/* 0x0a30 */ 48, 48, 48, 48, 48, 56, 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, /* 0x0a30 */ 74, 21,141, 11,255, 0, 12,107, 41, 1, 12, 75, 35,253,255, 84,
/* 0x0a40 */ 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, /* 0x0a40 */ 72, 6, 0, 17,246,121, 46,120, 31,253, 3,113,231, 0, 12, 75,
/* 0x0a50 */ 89, 10, 32, 32, 50, 32, 78, 82, 86, 50, 69, 32, 32, 32, 32, 32, /* 0x0a50 */ 45,253,255, 84, 8, 29, 0, 83, 63, 15, 0,113,136, 72, 34, 56,
/* 0x0a60 */ 32, 32, 32, 32, 48, 48, 48, 48, 48, 49, 51, 99, 32, 32, 48, 48, /* 0x0a60 */ 234, 3, 9, 42, 66, 4, 0, 17,236,225,255, 84,191, 0, 2,107,
/* 0x0a70 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, /* 0x0a70 */ 25, 0,128, 82,232,215,255, 84, 16,255,255, 23, 31, 32, 3,213,
/* 0x0a80 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x0a80 */ 74, 1, 8, 75,140, 21, 76, 75, 95, 1, 16,107,140,122, 41,120,
/* 0x0a90 */ 32, 32, 48, 48, 48, 48, 48, 48, 56, 52, 32, 32, 50, 42, 42, 48, /* 0x0a90 */ 231, 0, 8, 75,169, 97, 0,145,232, 0, 0, 84,127, 2, 11,235,
/* 0x0aa0 */ 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, /* 0x0aa0 */ 64,226,255, 84,104, 1, 64, 57, 74, 93, 24, 83,107, 5, 0,145,
/* 0x0ab0 */ 79, 78, 76, 89, 10, 32, 32, 51, 32, 78, 82, 86, 50, 68, 32, 32, /* 0x0ab0 */ 7, 33, 7, 42,140,106,105,120, 72,125, 11, 83,136,125, 8, 27,
/* 0x0ac0 */ 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 49, 51, 48, 32, /* 0x0ac0 */ 255, 0, 8,107,226, 9, 0, 84, 42, 2, 12, 75, 31, 1, 16,107,
/* 0x0ad0 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x0ad0 */ 239,129, 7,145,140, 21,138, 11,140,106, 41,120,232, 0, 0, 84,
/* 0x0ae0 */ 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x0ae0 */ 127, 2, 11,235, 32,224,255, 84,105, 1, 64, 57, 8, 93, 24, 83,
/* 0x0af0 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 49, 99, 48, 32, 32, 50, /* 0x0af0 */ 107, 5, 0,145, 39, 33, 7, 42,137,106,111,120, 10,125, 11, 83,
/* 0x0b00 */ 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, /* 0x0b00 */ 42,125, 10, 27,255, 0, 10,107,130, 16, 0, 84, 40, 2, 9, 75,
/* 0x0b10 */ 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 52, 32, 78, 82, 86, 50, /* 0x0b10 */ 41, 21,136, 11,137,106, 47,120,130,222,255, 52, 72, 0, 21, 75,
/* 0x0b20 */ 66, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 49, /* 0x0b20 */ 63, 31, 0,113, 41, 1,128, 82,108, 1,128, 82, 57,177,140, 26,
/* 0x0b30 */ 48, 56, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x0b30 */ 136,104,104, 56,136, 72, 34, 56, 66, 4, 0, 17,221,254,255, 23,
/* 0x0b40 */ 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x0b40 */ 181, 6, 0, 49,160,219,255, 84, 57, 31, 0, 17,191, 2, 2,107,
/* 0x0b50 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 50,102, 48, /* 0x0b50 */ 173, 9, 0, 17,168,220,255, 84,233, 3, 2, 42, 72, 0, 21, 75,
/* 0x0b60 */ 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, /* 0x0b60 */ 173, 5, 0, 81, 66, 4, 0, 17,191, 1, 31,107,160, 16, 66,122,
/* 0x0b70 */ 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 53, 32, 78, /* 0x0b70 */ 136,104,104, 56,136, 72, 41, 56,233, 3, 2, 42, 8,255,255, 84,
/* 0x0b80 */ 82, 86, 95, 84, 65, 73, 76, 32, 32, 32, 32, 32, 32, 48, 48, 48, /* 0x0b80 */ 191, 0, 2,107,104,207,255, 84,204,254,255, 23, 31, 32, 3,213,
/* 0x0b90 */ 48, 48, 52, 98, 52, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x0b90 */ 8, 1, 10, 75,140, 21, 76, 75, 31, 1, 16,107, 44, 1, 0,121,
/* 0x0ba0 */ 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, /* 0x0ba0 */ 231, 0, 10, 75,232, 0, 0, 84,127, 2, 11,235,224,217,255, 84,
/* 0x0bb0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, /* 0x0bb0 */ 106, 1, 64, 57, 8, 93, 24, 83,107, 5, 0,145, 71, 33, 7, 42,
/* 0x0bc0 */ 51,102, 56, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, /* 0x0bc0 */ 44, 5, 64,121, 10,125, 11, 83,138,125, 10, 27,255, 0, 10,107,
/* 0x0bd0 */ 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, /* 0x0bd0 */ 66, 7, 0, 84,210,113, 29, 83, 40, 2, 12, 75, 22, 1,128, 82,
/* 0x0be0 */ 54, 32, 77, 65, 67, 72, 77, 65, 73, 78, 89, 32, 32, 32, 32, 32, /* 0x0be0 */ 126, 0,128, 82, 82,126, 64,147,136, 21,136, 11, 82, 10, 2,145,
/* 0x0bf0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, /* 0x0bf0 */ 40, 5, 0,121, 50, 5, 18,139,249,254,255, 23, 31, 32, 3,213,
/* 0x0c00 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, /* 0x0c00 */ 74, 1, 8, 75,231, 0, 8, 75, 95, 1, 16,107,136, 21, 76, 75,
/* 0x0c10 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, /* 0x0c10 */ 136,106, 41,120,172,193, 0,145,232, 0, 0, 84,127, 2, 11,235,
/* 0x0c20 */ 48, 48, 48, 56, 97, 99, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, /* 0x0c20 */ 64,214,255, 84,104, 1, 64, 57, 74, 93, 24, 83,107, 5, 0,145,
/* 0x0c30 */ 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, /* 0x0c30 */ 7, 33, 7, 42,137,106,108,120, 72,125, 11, 83, 40,125, 8, 27,
/* 0x0c40 */ 10, 32, 32, 55, 32, 77, 65, 67, 72, 77, 65, 73, 78, 90, 32, 32, /* 0x0c40 */ 255, 0, 8,107, 35, 5, 0, 84, 74, 1, 8, 75, 41, 21, 73, 75,
/* 0x0c50 */ 32, 32, 32, 48, 48, 48, 48, 48, 48, 53, 56, 32, 32, 48, 48, 48, /* 0x0c50 */ 95, 1, 16,107,137,106, 44,120,231, 0, 8, 75,173, 33, 1,145,
/* 0x0c60 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, /* 0x0c60 */ 232, 0, 0, 84,127, 2, 11,235, 0,212,255, 84,104, 1, 64, 57,
/* 0x0c70 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x0c70 */ 74, 93, 24, 83,107, 5, 0,145, 7, 33, 7, 42,137,106,109,120,
/* 0x0c80 */ 32, 48, 48, 48, 48, 48, 56, 97, 99, 32, 32, 50, 42, 42, 48, 32, /* 0x0c80 */ 72,125, 11, 83, 40,125, 8, 27,255, 0, 8,107,226, 7, 0, 84,
/* 0x0c90 */ 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, /* 0x0c90 */ 234, 3, 21, 42,236,107, 64,185,234,107, 0,185, 42, 2, 9, 75,
/* 0x0ca0 */ 78, 76, 89, 10, 83, 89, 77, 66, 79, 76, 32, 84, 65, 66, 76, 69, /* 0x0ca0 */ 245,115, 64,185, 41, 21,138, 11,236,115, 0,185,137,106, 45,120,
/* 0x0cb0 */ 58, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x0cb0 */ 20, 0, 0, 20, 31, 32, 3,213,231, 0, 10, 75, 50, 17, 8,145,
/* 0x0cc0 */ 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 77, 65, 67, 72, 77, /* 0x0cc0 */ 10, 1, 10, 75, 22, 2,128, 82,136, 21, 76, 75, 30, 1,128, 82,
/* 0x0cd0 */ 65, 73, 78, 90, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x0cd0 */ 40, 5, 0,121,194,254,255, 23,191, 0, 2,107, 57, 27, 0, 81,
/* 0x0ce0 */ 48, 48, 48, 48, 48, 32, 77, 65, 67, 72, 77, 65, 73, 78, 90, 10, /* 0x0ce0 */ 136,196,255, 84,117,254,255, 23,234, 3, 21, 42,245,107, 64,185,
/* 0x0cf0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x0cf0 */ 234,107, 0,185, 42, 2, 9, 75, 41, 21,138, 11,137,106, 44,120,
/* 0x0d00 */ 32,108, 32, 32, 32, 32,100, 32, 32, 77, 65, 67, 72, 77, 65, 73, /* 0x0d00 */ 63, 31, 0,113, 10, 1,128, 82,108, 1,128, 82,233, 63, 64,249,
/* 0x0d10 */ 78, 88, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x0d10 */ 89,177,140, 26,156,254,255, 23, 41, 21, 73, 75, 8, 1, 10, 75,
/* 0x0d20 */ 48, 48, 48, 32, 77, 65, 67, 72, 77, 65, 73, 78, 88, 10, 48, 48, /* 0x0d20 */ 137,106, 47,120,231, 0, 10, 75,246,255,255, 23,233, 3, 14, 42,
/* 0x0d30 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, /* 0x0d30 */ 87,254,255, 23, 41, 21, 0, 81, 95, 1, 16,107, 8,121, 31, 83,
/* 0x0d40 */ 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 95, 72, 69, 65, 68, 9, /* 0x0d40 */ 232, 0, 0, 84,127, 2, 11,235, 74, 93, 24, 83,224,204,255, 84,
/* 0x0d50 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x0d50 */ 108, 1, 64, 57,107, 5, 0,145,135, 33, 7, 42, 74,125, 1, 83,
/* 0x0d60 */ 32, 78, 82, 86, 95, 72, 69, 65, 68, 10, 48, 48, 48, 48, 48, 48, /* 0x0d60 */ 255, 0, 10,107, 99, 0, 0, 84,231, 0, 10, 75, 8, 1, 0, 50,
/* 0x0d70 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32, /* 0x0d70 */ 41, 5, 0,113, 33,254,255, 84, 21,109, 28, 83, 14, 32, 25,145,
/* 0x0d80 */ 100, 32, 32, 78, 82, 86, 50, 69, 9, 48, 48, 48, 48, 48, 48, 48, /* 0x0d80 */ 143, 0,128, 82,243,254,255, 23, 41, 21, 73, 75,137,106, 45,120,
/* 0x0d90 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 50, 69, 10, /* 0x0d90 */ 233,107, 64,185,236, 3, 21, 42,231, 0, 8, 75,245, 3, 27, 42,
/* 0x0da0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x0da0 */ 72, 1, 8, 75,251,115, 64,185,236,107, 0,185,233,115, 0,185,
/* 0x0db0 */ 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 68, 9, 48, /* 0x0db0 */ 212,255,255, 23, 2, 0,128, 82,227, 19,189,169,229, 27, 1,169,
/* 0x0dc0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x0dc0 */ 254, 19, 0,249,232, 3, 1,170, 45, 64, 34,139,233, 3, 4,170,
/* 0x0dd0 */ 78, 82, 86, 50, 68, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x0dd0 */ 142, 64, 37,139, 11, 16, 0,145, 6, 0, 64, 57, 5, 4, 64, 57,
/* 0x0de0 */ 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, /* 0x0de0 */ 4, 8, 64, 57,174, 0, 6, 11, 7, 0,128, 18,229, 32,197, 26,
/* 0x0df0 */ 82, 86, 50, 66, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x0df0 */ 229, 3, 37, 42,228, 32,196, 26,228, 3, 36, 42, 35, 0,128, 82,
/* 0x0e00 */ 48, 48, 48, 48, 48, 32, 78, 82, 86, 50, 66, 10, 48, 48, 48, 48, /* 0x0e00 */ 34, 0,128, 82, 33, 0,128, 82, 32, 0,128, 82, 6, 0,128, 82,
/* 0x0e10 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, /* 0x0e10 */ 230, 31, 0,185, 2, 96,128, 82,192,230,128, 82, 66, 32,206, 26,
/* 0x0e20 */ 32, 32,100, 32, 32, 78, 82, 86, 95, 84, 65, 73, 76, 9, 48, 48, /* 0x0e20 */ 66, 0, 0, 11, 0,128,128,210,225, 3, 11,170, 0, 64, 0,170,
/* 0x0e30 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, /* 0x0e30 */ 0,128, 0,170, 32,132, 0,248, 66, 16, 0,113,204,255,255, 84,
/* 0x0e40 */ 82, 86, 95, 84, 65, 73, 76, 10, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x0e40 */ 0, 21, 0,145,231, 0, 0,148, 31, 0, 8,235,193,255,255, 84,
/* 0x0e50 */ 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, /* 0x0e50 */ 227, 67, 66,248,226, 19, 64,185, 36, 1, 3,203,128, 0, 2, 10,
/* 0x0e60 */ 32, 77, 65, 67, 72, 77, 65, 73, 78, 89, 9, 48, 48, 48, 48, 48, /* 0x0e60 */ 224, 47, 0,185, 0, 16, 6, 11, 97, 1, 0,145,225, 0, 0,148,
/* 0x0e70 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 77, 65, 67, 72, /* 0x0e70 */ 129, 5, 0, 84,227, 23, 64,185,226, 27, 64,185, 99, 0, 4, 10,
/* 0x0e80 */ 77, 65, 73, 78, 89, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x0e80 */ 224,115, 64, 57, 99, 32,194, 26,226, 3, 2, 75, 66, 32, 0, 17,
/* 0x0e90 */ 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 77, /* 0x0e90 */ 2, 36,194, 26, 99, 0, 2, 11,106,177, 57,145, 99, 4, 3, 11,
/* 0x0ea0 */ 65, 67, 72, 77, 65, 73, 78, 88, 9, 48, 48, 48, 48, 48, 48, 48, /* 0x0ea0 */ 227, 3, 3, 42, 32, 0,128, 82, 74, 37, 3,139,223, 28, 0,113,
/* 0x0eb0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 95,115,116, 97,114,116, /* 0x0eb0 */ 3, 2, 0, 84,227,125, 64,147,227, 3, 3,203, 37,105, 99, 56,
/* 0x0ec0 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x0ec0 */ 165,120, 31, 83, 65, 1, 8,145,164, 0, 24, 18,227, 3, 4, 42,
/* 0x0ed0 */ 48, 32,103, 32, 32, 32, 32, 32, 70, 32, 78, 82, 86, 50, 69, 9, /* 0x0ed0 */ 33, 4, 3,139,201, 0, 0,148, 3, 0, 0, 18,127, 32, 68,107,
/* 0x0ee0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 51, 99, /* 0x0ee0 */ 193, 0, 0, 84, 31, 0, 4,113,195,254,255, 84, 5, 0, 0, 20,
/* 0x0ef0 */ 32,117, 99,108, 95,110,114,118, 50,101, 95,100,101, 99,111,109, /* 0x0ef0 */ 225, 3, 10,170,193, 0, 0,148, 31, 0, 4,113,163,255,255, 84,
/* 0x0f00 */ 112,114,101,115,115, 95, 56, 10, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x0f00 */ 98, 0,128, 82,195, 0,128, 82,223, 40, 0,113, 67, 48,131, 26,
/* 0x0f10 */ 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 70, /* 0x0f10 */ 223, 16, 0,113,195, 48,131, 26,198, 0, 3, 75, 34, 0, 0, 20,
/* 0x0f20 */ 32, 78, 82, 86, 50, 68, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x0f20 */ 97, 1, 6,145,178, 0, 0,148,129, 1, 0, 84,227, 11, 64,185,
/* 0x0f30 */ 48, 48, 48, 48, 49, 51, 48, 32,117, 99,108, 95,110,114,118, 50, /* 0x0f30 */ 226, 7, 64,185,227, 15, 0,185,226, 11, 0,185,239, 7, 0,185,
/* 0x0f40 */ 100, 95,100,101, 99,111,109,112,114,101,115,115, 95, 56, 10, 48, /* 0x0f40 */ 3, 0,128, 82,223, 28, 0,113,102, 0,128, 82,102, 48,134, 26,
/* 0x0f50 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, /* 0x0f50 */ 106,145, 25,145, 42, 0, 0, 20, 97, 97, 6,145,164, 0, 0,148,
/* 0x0f60 */ 103, 32, 32, 32, 32, 32, 70, 32, 78, 82, 86, 50, 66, 9, 48, 48, /* 0x0f60 */ 97, 2, 0, 84,227, 47, 64,185, 97,129, 7,145, 96, 16, 6, 11,
/* 0x0f70 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 48, 56, 32,117, /* 0x0f70 */ 160, 0, 0,148,161, 3, 0, 84, 35, 1,128, 82,223, 28, 0,113,
/* 0x0f80 */ 99,108, 95,110,114,118, 50, 98, 95,100,101, 99,111,109,112,114, /* 0x0f80 */ 102, 1,128, 82,102, 48,134, 26,227, 67, 66,248, 36, 1, 3,203,
/* 0x0f90 */ 101,115,115, 95, 56, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x0f90 */ 159, 0, 15,107,131, 17, 0, 84,227,125, 64,147,227, 3, 3,203,
/* 0x0fa0 */ 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 78, /* 0x0fa0 */ 32,105, 99, 56, 32, 21, 0, 56,121, 0, 0, 20, 97,193, 6,145,
/* 0x0fb0 */ 82, 86, 95, 84, 65, 73, 76, 9, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x0fb0 */ 143, 0, 0,148,228, 7, 64,185, 64, 1, 0, 84, 97, 33, 7,145,
/* 0x0fc0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 76,122,109, 97, 68,101, 99, /* 0x0fc0 */ 139, 0, 0,148,228, 11, 64,185,128, 0, 0, 84,227, 11, 64,185,
/* 0x0fd0 */ 111,100,101, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x0fd0 */ 228, 15, 64,185,227, 15, 0,185,227, 7, 64,185,227, 11, 0,185,
/* 0x0fe0 */ 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 77, 65, 67, /* 0x0fe0 */ 239, 7, 0,185,239, 3, 4, 42, 3, 1,128, 82,223, 28, 0,113,
/* 0x0ff0 */ 72, 77, 65, 73, 78, 89, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x0ff0 */ 102, 1,128, 82,102, 48,134, 26,106,161, 41,145, 65, 1, 0,145,
/* 0x1000 */ 48, 48, 48, 48, 48, 48, 48, 32,101,110,100, 95,100,101, 99,111, /* 0x1000 */ 125, 0, 0,148, 1, 1, 0, 84,227, 47, 64,185, 69, 17, 0,145,
/* 0x1010 */ 109,112,114,101,115,115, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, /* 0x1010 */ 227, 3, 3, 42, 2, 0,128, 82,165, 16, 3,139, 4, 1,128, 82,
/* 0x1020 */ 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, /* 0x1020 */ 14, 0, 0, 20, 65, 9, 0,145,115, 0, 0,148, 1, 1, 0, 84,
/* 0x1030 */ 77, 65, 67, 72, 77, 65, 73, 78, 88, 93, 58, 10, 79, 70, 70, 83, /* 0x1030 */ 227, 47, 64,185, 69, 17, 4,145,227, 3, 3, 42, 2, 1,128, 82,
/* 0x1040 */ 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, /* 0x1040 */ 165, 16, 3,139, 4, 1,128, 82, 4, 0, 0, 20, 69, 17, 8,145,
/* 0x1050 */ 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, /* 0x1050 */ 2, 2,128, 82, 4, 32,128, 82,226, 55, 0,185, 32, 0,128, 82,
/* 0x1060 */ 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x1060 */ 225, 3, 5,170,101, 0, 0,148, 3, 0, 4,107,163,255,255, 84,
/* 0x1070 */ 48, 48, 48, 52, 48, 32, 82, 95, 65, 65, 82, 67, 72, 54, 52, 95, /* 0x1070 */ 229, 55, 64,185,165, 0, 3, 11,229, 55, 0,185,223, 16, 0,113,
/* 0x1080 */ 67, 65, 76, 76, 50, 54, 32, 32, 77, 65, 67, 72, 77, 65, 73, 78, /* 0x1080 */ 194, 6, 0, 84,198, 28, 0, 17, 99, 0,128, 82,191, 16, 0,113,
/* 0x1090 */ 90, 43, 48,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, /* 0x1090 */ 101, 32,133, 26,227, 3, 5, 42,101, 29, 3,139,165,128, 13,145,
/* 0x10a0 */ 48, 48, 53, 48, 10 /* 0x10a0 */ 32, 0,128, 82, 4, 8,128, 82,225, 3, 5,170, 83, 0, 0,148,
/* 0x10b0 */ 3, 0, 4,107,163,255,255, 84,227, 47, 0,185,127, 16, 0,113,
/* 0x10c0 */ 99, 4, 0, 84,100,124, 1, 83,132, 4, 0, 81,111, 0, 0, 18,
/* 0x10d0 */ 239, 1, 31, 50,127, 56, 0,113,226, 0, 0, 84,239, 33,196, 26,
/* 0x10e0 */ 106,121, 21,145,227, 1, 3, 75,227, 3, 3, 42, 74, 5, 3,139,
/* 0x10f0 */ 12, 0, 0, 20,132, 16, 0, 81, 53, 0, 0,148,231,124, 1, 83,
/* 0x1100 */ 131, 1, 7,107,108, 32,140, 26,239, 1, 15, 26,132, 4, 0,113,
/* 0x1110 */ 65,255,255, 84,106, 17, 25,145,239,109, 28, 83,132, 0,128, 82,
/* 0x1120 */ 37, 0,128, 82, 32, 0,128, 82,225, 3, 10,170, 51, 0, 0,148,
/* 0x1130 */ 31, 0, 0,114, 64, 0, 0, 84,239, 1, 5, 42,165,120, 31, 83,
/* 0x1140 */ 132, 4, 0,113, 33,255,255, 84, 2, 0, 0, 20,239, 47, 64,185,
/* 0x1150 */ 239, 5, 0, 49,229, 55, 64,185,227, 67, 66,248,165, 8, 0, 17,
/* 0x1160 */ 35, 1, 3,203,255, 1, 3,107,232, 2, 0, 84,227,125, 64,147,
/* 0x1170 */ 227, 3, 3,203, 32,105, 99, 56, 32, 21, 0, 56, 63, 1, 14,235,
/* 0x1180 */ 194, 0, 0, 84,165, 4, 0,113, 97,255,255, 84,224,115, 0, 57,
/* 0x1190 */ 63, 1, 14,235,227,229,255, 84, 13, 0, 0,148, 0, 0,128, 82,
/* 0x11a0 */ 226, 19, 64,249, 3, 1, 2,203,226, 31, 64,249, 67, 0, 0,185,
/* 0x11b0 */ 226, 67, 66,248, 35, 1, 2,203,226, 55, 64,249, 67, 0, 0,185,
/* 0x11c0 */ 255,243, 0,145, 32, 0,128, 82,246,255,255, 23,227,124, 24, 83,
/* 0x11d0 */ 195, 0, 0, 53, 31, 1, 13,235,231, 92, 24, 83, 66,255,255, 84,
/* 0x11e0 */ 3, 21, 64, 56,108, 32, 12, 42,192, 3, 95,214,224, 3, 6, 42,
/* 0x11f0 */ 33, 68, 32,139, 0, 0,128, 82, 33, 68, 32,139,227,124, 24, 83,
/* 0x1200 */ 241, 3, 30,170, 94, 0, 0, 16, 99,254,255, 52, 35, 0, 64,121,
/* 0x1210 */ 226,124, 11, 83, 98,124, 2, 27,159, 1, 2,107, 2, 1, 0, 84,
/* 0x1220 */ 2, 0,129, 82,231, 3, 2, 42, 66, 0, 3, 75, 0, 0, 0, 58,
/* 0x1230 */ 99, 20, 66, 11, 35, 0, 0,121, 32, 2, 95,214,140, 1, 2, 75,
/* 0x1240 */ 231, 0, 2, 75, 99, 20, 67, 75, 0, 0, 0, 58, 35, 0, 0,121,
/* 0x1250 */ 32, 2, 95,214,195, 3, 64,185,193, 7, 64,185,194, 67, 33,139,
/* 0x1260 */ 66, 48, 0,145,192, 67, 35,139, 0, 0, 3,145,228, 3, 1, 42,
/* 0x1270 */ 73,204, 95,184,132, 16, 0, 81, 9,204, 31,184,164,255,255, 53,
/* 0x1280 */ 196, 11, 64,185,222, 3, 2,145,227, 15, 31,184,227, 3, 0,145,
/* 0x1290 */ 226, 3, 30,170,171, 32, 1,209,234, 3, 30,170,160, 0, 63,214,
/* 0x12a0 */ 64, 1, 31,214,229, 3, 30,170,235,255,255,151,102,105,108,101,
/* 0x12b0 */ 32,102,111,114,109, 97,116, 32,101,108,102, 54, 52, 45,108,105,
/* 0x12c0 */ 116,116,108,101, 97, 97,114, 99,104, 54, 52, 10, 10, 83,101, 99,
/* 0x12d0 */ 116,105,111,110,115, 58, 10, 73,100,120, 32, 78, 97,109,101, 32,
/* 0x12e0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 83,105,122,101, 32, 32, 32,
/* 0x12f0 */ 32, 32, 32, 86, 77, 65, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x1300 */ 32, 32, 32, 32, 32, 76, 77, 65, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x1310 */ 32, 32, 32, 32, 32, 32, 32, 70,105,108,101, 32,111,102,102, 32,
/* 0x1320 */ 32, 65,108,103,110, 32, 32, 70,108, 97,103,115, 10, 32, 32, 48,
/* 0x1330 */ 32, 77, 65, 67, 72, 77, 65, 73, 78, 88, 32, 32, 32, 32, 32, 48,
/* 0x1340 */ 48, 48, 48, 48, 48, 52, 52, 32, 32, 48, 48, 48, 48, 48, 48, 48,
/* 0x1350 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48,
/* 0x1360 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48,
/* 0x1370 */ 48, 48, 48, 52, 48, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78,
/* 0x1380 */ 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69,
/* 0x1390 */ 65, 68, 79, 78, 76, 89, 10, 32, 32, 49, 32, 78, 82, 86, 95, 72,
/* 0x13a0 */ 69, 65, 68, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 48,
/* 0x13b0 */ 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x13c0 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x13d0 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 56, 52, 32,
/* 0x13e0 */ 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44,
/* 0x13f0 */ 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 50, 32, 78, 82,
/* 0x1400 */ 86, 50, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48,
/* 0x1410 */ 48, 49, 50, 56, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1420 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1430 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48,
/* 0x1440 */ 56, 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78,
/* 0x1450 */ 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 51,
/* 0x1460 */ 32, 78, 82, 86, 50, 68, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48,
/* 0x1470 */ 48, 48, 48, 48, 49, 49, 99, 32, 32, 48, 48, 48, 48, 48, 48, 48,
/* 0x1480 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48,
/* 0x1490 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48,
/* 0x14a0 */ 48, 48, 49, 97, 99, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78,
/* 0x14b0 */ 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10,
/* 0x14c0 */ 32, 32, 52, 32, 78, 82, 86, 50, 66, 32, 32, 32, 32, 32, 32, 32,
/* 0x14d0 */ 32, 32, 48, 48, 48, 48, 48, 48,102, 48, 32, 32, 48, 48, 48, 48,
/* 0x14e0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48,
/* 0x14f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32,
/* 0x1500 */ 48, 48, 48, 48, 48, 50, 99, 56, 32, 32, 50, 42, 42, 48, 32, 32,
/* 0x1510 */ 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78,
/* 0x1520 */ 76, 89, 10, 32, 32, 53, 32, 78, 82, 86, 95, 84, 65, 73, 76, 32,
/* 0x1530 */ 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48,
/* 0x1540 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x1550 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1560 */ 48, 32, 32, 48, 48, 48, 48, 48, 51, 98, 56, 32, 32, 50, 42, 42,
/* 0x1570 */ 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65,
/* 0x1580 */ 68, 79, 78, 76, 89, 10, 32, 32, 54, 32, 76, 90, 77, 65, 95, 69,
/* 0x1590 */ 76, 70, 48, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48,100, 48,
/* 0x15a0 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x15b0 */ 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x15c0 */ 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 51, 98, 56, 32, 32,
/* 0x15d0 */ 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32,
/* 0x15e0 */ 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10,
/* 0x15f0 */ 32, 32, 55, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 32, 32,
/* 0x1600 */ 32, 32, 48, 48, 48, 48, 48, 57, 51, 48, 32, 32, 48, 48, 48, 48,
/* 0x1610 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48,
/* 0x1620 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32,
/* 0x1630 */ 48, 48, 48, 48, 48, 52, 56, 56, 32, 32, 50, 42, 42, 48, 32, 32,
/* 0x1640 */ 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78,
/* 0x1650 */ 76, 89, 10, 32, 32, 56, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49,
/* 0x1660 */ 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 52, 57, 99, 32, 32, 48,
/* 0x1670 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x1680 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1690 */ 48, 32, 32, 48, 48, 48, 48, 48,100, 98, 56, 32, 32, 50, 42, 42,
/* 0x16a0 */ 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65,
/* 0x16b0 */ 68, 79, 78, 76, 89, 10, 32, 32, 57, 32, 76, 90, 77, 65, 95, 68,
/* 0x16c0 */ 69, 67, 51, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x16d0 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x16e0 */ 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x16f0 */ 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 50, 53, 52, 32, 32,
/* 0x1700 */ 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32,
/* 0x1710 */ 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 49, 48, 32, 77, 65, 67,
/* 0x1720 */ 72, 77, 65, 73, 78, 89, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48,
/* 0x1730 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1740 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1750 */ 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 50, 53,
/* 0x1760 */ 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84,
/* 0x1770 */ 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 49, 49, 32,
/* 0x1780 */ 77, 65, 67, 72, 77, 65, 73, 78, 90, 32, 32, 32, 32, 32, 48, 48,
/* 0x1790 */ 48, 48, 48, 48, 53, 56, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x17a0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48,
/* 0x17b0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48,
/* 0x17c0 */ 49, 50, 53, 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84,
/* 0x17d0 */ 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 83,
/* 0x17e0 */ 89, 77, 66, 79, 76, 32, 84, 65, 66, 76, 69, 58, 10, 48, 48, 48,
/* 0x17f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32,
/* 0x1800 */ 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48,
/* 0x1810 */ 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1820 */ 48, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 10, 48, 48, 48,
/* 0x1830 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32,
/* 0x1840 */ 32, 32, 32,100, 32, 32, 77, 65, 67, 72, 77, 65, 73, 78, 90, 9,
/* 0x1850 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1860 */ 32, 77, 65, 67, 72, 77, 65, 73, 78, 90, 10, 48, 48, 48, 48, 48,
/* 0x1870 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32,
/* 0x1880 */ 32,100, 32, 32, 77, 65, 67, 72, 77, 65, 73, 78, 88, 9, 48, 48,
/* 0x1890 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 77,
/* 0x18a0 */ 65, 67, 72, 77, 65, 73, 78, 88, 10, 48, 48, 48, 48, 48, 48, 48,
/* 0x18b0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100,
/* 0x18c0 */ 32, 32, 78, 82, 86, 95, 72, 69, 65, 68, 9, 48, 48, 48, 48, 48,
/* 0x18d0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 95,
/* 0x18e0 */ 72, 69, 65, 68, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x18f0 */ 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82,
/* 0x1900 */ 86, 50, 69, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1910 */ 48, 48, 48, 48, 32, 78, 82, 86, 50, 69, 10, 48, 48, 48, 48, 48,
/* 0x1920 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32,
/* 0x1930 */ 32,100, 32, 32, 78, 82, 86, 50, 68, 9, 48, 48, 48, 48, 48, 48,
/* 0x1940 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 50, 68,
/* 0x1950 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1960 */ 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 66, 9,
/* 0x1970 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1980 */ 32, 78, 82, 86, 50, 66, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1990 */ 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32,
/* 0x19a0 */ 78, 82, 86, 95, 84, 65, 73, 76, 9, 48, 48, 48, 48, 48, 48, 48,
/* 0x19b0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 95, 84, 65,
/* 0x19c0 */ 73, 76, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x19d0 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65,
/* 0x19e0 */ 95, 69, 76, 70, 48, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x19f0 */ 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 69, 76, 70,
/* 0x1a00 */ 48, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1a10 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65,
/* 0x1a20 */ 95, 68, 69, 67, 50, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1a30 */ 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67,
/* 0x1a40 */ 50, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1a50 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65,
/* 0x1a60 */ 95, 68, 69, 67, 49, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1a70 */ 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67,
/* 0x1a80 */ 49, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1a90 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 77, 65, 67, 72,
/* 0x1aa0 */ 77, 65, 73, 78, 89, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ab0 */ 48, 48, 48, 48, 48, 48, 32, 77, 65, 67, 72, 77, 65, 73, 78, 89,
/* 0x1ac0 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ad0 */ 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 77, 65, 67, 72, 77, 65,
/* 0x1ae0 */ 73, 78, 88, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1af0 */ 48, 48, 48, 48, 32, 95,115,116, 97,114,116, 10, 48, 48, 48, 48,
/* 0x1b00 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32,
/* 0x1b10 */ 32, 32, 32, 70, 32, 78, 82, 86, 50, 69, 9, 48, 48, 48, 48, 48,
/* 0x1b20 */ 48, 48, 48, 48, 48, 48, 48, 48, 49, 50, 56, 32,117, 99,108, 95,
/* 0x1b30 */ 110,114,118, 50,101, 95,100,101, 99,111,109,112,114,101,115,115,
/* 0x1b40 */ 95, 51, 50, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1b50 */ 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 70, 32, 78, 82, 86,
/* 0x1b60 */ 50, 68, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1b70 */ 49, 49, 99, 32,117, 99,108, 95,110,114,118, 50,100, 95,100,101,
/* 0x1b80 */ 99,111,109,112,114,101,115,115, 95, 51, 50, 10, 48, 48, 48, 48,
/* 0x1b90 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32,
/* 0x1ba0 */ 32, 32, 32, 70, 32, 78, 82, 86, 50, 66, 9, 48, 48, 48, 48, 48,
/* 0x1bb0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48,102, 48, 32,117, 99,108, 95,
/* 0x1bc0 */ 110,114,118, 50, 98, 95,100,101, 99,111,109,112,114,101,115,115,
/* 0x1bd0 */ 95, 51, 50, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1be0 */ 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77,
/* 0x1bf0 */ 65, 95, 68, 69, 67, 49, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1c00 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 76,122,109, 97, 68,101, 99,
/* 0x1c10 */ 111,100,101, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1c20 */ 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 77, 65, 67,
/* 0x1c30 */ 72, 77, 65, 73, 78, 89, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1c40 */ 48, 48, 48, 48, 48, 48, 48, 32,101,110,100, 95,100,101, 99,111,
/* 0x1c50 */ 109,112,114,101,115,115, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73,
/* 0x1c60 */ 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91,
/* 0x1c70 */ 77, 65, 67, 72, 77, 65, 73, 78, 88, 93, 58, 10, 79, 70, 70, 83,
/* 0x1c80 */ 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80,
/* 0x1c90 */ 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86,
/* 0x1ca0 */ 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1cb0 */ 48, 48, 48, 52, 48, 32, 82, 95, 65, 65, 82, 67, 72, 54, 52, 95,
/* 0x1cc0 */ 67, 65, 76, 76, 50, 54, 32, 32, 77, 65, 67, 72, 77, 65, 73, 78,
/* 0x1cd0 */ 90, 43, 48,120, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ce0 */ 48, 48, 53, 48, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78,
/* 0x1cf0 */ 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 76, 90,
/* 0x1d00 */ 77, 65, 95, 69, 76, 70, 48, 48, 93, 58, 10, 79, 70, 70, 83, 69,
/* 0x1d10 */ 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69,
/* 0x1d20 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65,
/* 0x1d30 */ 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1d40 */ 48, 48, 48, 52, 32, 82, 95, 65, 65, 82, 67, 72, 54, 52, 95, 67,
/* 0x1d50 */ 79, 78, 68, 66, 82, 49, 57, 32, 32, 76, 90, 77, 65, 95, 68, 69,
/* 0x1d60 */ 67, 51, 48, 10
}; };
+114 -117
View File
@@ -1,5 +1,5 @@
/* arm64-darwin.macho-fold.h /* arm64-darwin.macho-fold.h
created from arm64-darwin.macho-fold.bin, 1960 (0x7a8) bytes created from arm64-darwin.macho-fold.bin, 1920 (0x780) bytes
This file is part of the UPX executable compressor. This file is part of the UPX executable compressor.
@@ -31,14 +31,14 @@
*/ */
#define STUB_ARM64_DARWIN_MACHO_FOLD_SIZE 1960 #define STUB_ARM64_DARWIN_MACHO_FOLD_SIZE 1920
#define STUB_ARM64_DARWIN_MACHO_FOLD_ADLER32 0xe297dee4 #define STUB_ARM64_DARWIN_MACHO_FOLD_ADLER32 0x2900c991
#define STUB_ARM64_DARWIN_MACHO_FOLD_CRC32 0xa720f497 #define STUB_ARM64_DARWIN_MACHO_FOLD_CRC32 0xcc0bdf2e
unsigned char stub_arm64_darwin_macho_fold[1960] = { unsigned char stub_arm64_darwin_macho_fold[1920] = {
/* 0x0000 */ 97, 1, 64,249,231, 3, 4,145, 96, 65, 33,203, 3, 24, 64,185, /* 0x0000 */ 97, 1, 64,249,231, 3, 4,145, 96, 65, 33,203, 3, 24, 64,185,
/* 0x0010 */ 9, 0,132, 82,127, 0, 9,107, 99,128,137, 26,255, 67, 35,203, /* 0x0010 */ 9, 0,132, 82,127, 0, 9,107, 99,128,137, 26,255, 67, 35,203,
/* 0x0020 */ 226, 3, 0,145,101, 2, 0, 16, 54, 1, 0,148, 30,120, 64,249, /* 0x0020 */ 226, 3, 0,145,101, 2, 0, 16, 44, 1, 0,148, 30,120, 64,249,
/* 0x0030 */ 252,119, 78,169,250,111, 77,169,248,103, 76,169,246, 95, 75,169, /* 0x0030 */ 252,119, 78,169,250,111, 77,169,248,103, 76,169,246, 95, 75,169,
/* 0x0040 */ 244, 87, 74,169,242, 79, 73,169,240, 71, 72,169,238, 63, 71,169, /* 0x0040 */ 244, 87, 74,169,242, 79, 73,169,240, 71, 72,169,238, 63, 71,169,
/* 0x0050 */ 236, 55, 70,169,234, 47, 69,169,232, 39, 68,169,230, 31, 67,169, /* 0x0050 */ 236, 55, 70,169,234, 47, 69,169,232, 39, 68,169,230, 31, 67,169,
@@ -48,115 +48,112 @@ unsigned char stub_arm64_darwin_macho_fold[1960] = {
/* 0x0090 */ 67,124, 26, 83,127,148, 0,113,193, 0, 0, 84, 67, 20, 6, 18, /* 0x0090 */ 67,124, 26, 83,127,148, 0,113,193, 0, 0, 84, 67, 20, 6, 18,
/* 0x00a0 */ 66, 0, 1, 75, 66,100, 0, 18, 66, 0, 3, 42, 2, 88, 33,184, /* 0x00a0 */ 66, 0, 1, 75, 66,100, 0, 18, 66, 0, 3, 42, 2, 88, 33,184,
/* 0x00b0 */ 63, 0, 0,113,161,254,255, 84,192, 3, 95,214,192, 3, 95,214, /* 0x00b0 */ 63, 0, 0,113,161,254,255, 84,192, 3, 95,214,192, 3, 95,214,
/* 0x00c0 */ 40, 0,128, 82, 0, 16, 32,212,192, 3, 95,214,104, 0,128, 82, /* 0x00c0 */ 40, 0,128, 82, 1, 0, 0,212,104, 0,128, 82, 1, 0, 0,212,
/* 0x00d0 */ 0, 16, 32,212,192, 3, 95,214,192, 3, 95,214,136, 0,128, 82, /* 0x00d0 */ 192, 3, 95,214,136, 0,128, 82, 1, 0, 0,212,192, 3, 95,214,
/* 0x00e0 */ 0, 16, 32,212,192, 3, 95,214,192, 3, 95,214,168, 0,128, 82, /* 0x00e0 */ 168, 0,128, 82, 1, 0, 0,212,192, 3, 95,214,200, 0,128, 82,
/* 0x00f0 */ 0, 16, 32,212,192, 3, 95,214,192, 3, 95,214,200, 0,128, 82, /* 0x00f0 */ 1, 0, 0,212,192, 3, 95,214,168, 5,128, 82, 1, 0, 0,212,
/* 0x0100 */ 0, 16, 32,212,192, 3, 95,214,192, 3, 95,214,168, 5,128, 82, /* 0x0100 */ 192, 3, 95,214, 40, 9,128, 82, 1, 0, 0,212,192, 3, 95,214,
/* 0x0110 */ 0, 16, 32,212,192, 3, 95,214,192, 3, 95,214, 40, 9,128, 82, /* 0x0110 */ 72, 9,128, 82, 1, 0, 0,212,192, 3, 95,214,168, 24,128, 82,
/* 0x0120 */ 0, 16, 32,212,192, 3, 95,214,192, 3, 95,214, 72, 9,128, 82, /* 0x0120 */ 1, 0, 0,212,192, 3, 95,214, 40, 19,128, 82, 1, 0, 0,212,
/* 0x0130 */ 0, 16, 32,212,192, 3, 95,214,192, 3, 95,214,168, 24,128, 82, /* 0x0130 */ 192, 3, 95,214,233, 31,128, 82, 41, 29, 16, 50, 6, 0, 0, 20,
/* 0x0140 */ 0, 16, 32,212,192, 3, 95,214,192, 3, 95,214, 40, 19,128, 82, /* 0x0140 */ 2, 0, 64,185, 35, 1, 2, 10, 34, 97,194, 10, 66, 32,195, 42,
/* 0x0150 */ 0, 16, 32,212,192, 3, 95,214,192, 3, 95,214,233, 31,128, 82, /* 0x0150 */ 2, 68, 0,184, 33, 16, 0,113, 74,255,255, 84,192, 3, 95,214,
/* 0x0160 */ 41, 29, 16, 50, 6, 0, 0, 20, 2, 0, 64,185, 35, 1, 2, 10, /* 0x0160 */ 253,123,191,169, 3, 0,128,210,253, 3, 0,145, 5, 0, 64,249,
/* 0x0170 */ 34, 97,194, 10, 66, 32,195, 42, 2, 68, 0,184, 33, 16, 0,113, /* 0x0170 */ 4, 4, 64,249,191, 0, 2,235, 98, 0, 0, 84,224, 15,128, 82,
/* 0x0180 */ 74,255,255, 84,192, 3, 95,214,253,123,191,169, 3, 0,128,210, /* 0x0180 */ 208,255,255,151,127, 0, 2,235,160, 0, 0, 84,133,104, 99, 56,
/* 0x0190 */ 253, 3, 0,145, 5, 0, 64,249, 4, 4, 64,249,191, 0, 2,235, /* 0x0190 */ 37,104, 35, 56, 99, 4, 0,145,251,255,255, 23, 1, 4, 64,249,
/* 0x01a0 */ 98, 0, 0, 84,224, 15,128, 82,198,255,255,151,127, 0, 2,235, /* 0x01a0 */ 33, 0, 3,139, 1, 4, 0,249, 1, 0, 64,249, 35, 0, 3,203,
/* 0x01b0 */ 160, 0, 0, 84,133,104, 99, 56, 37,104, 35, 56, 99, 4, 0,145, /* 0x01b0 */ 3, 0, 0,249,253,123,193,168,192, 3, 95,214,253,123,187,169,
/* 0x01c0 */ 251,255,255, 23, 1, 4, 64,249, 33, 0, 3,139, 1, 4, 0,249, /* 0x01c0 */ 253, 3, 0,145,243, 83, 1,169,245, 91, 2,169,244, 3, 0,170,
/* 0x01d0 */ 1, 0, 64,249, 35, 0, 3,203, 3, 0, 0,249,253,123,193,168, /* 0x01d0 */ 243, 3, 1,170,246, 3, 2,170,245, 3, 3,170, 96, 2, 64,249,
/* 0x01e0 */ 192, 3, 95,214,253,123,187,169,253, 3, 0,145,243, 83, 1,169, /* 0x01e0 */ 224, 7, 0,180,224, 3, 20,170,130, 1,128,210,161, 3, 1,145,
/* 0x01f0 */ 245, 91, 2,169,244, 3, 0,170,243, 3, 1,170,246, 3, 2,170, /* 0x01f0 */ 220,255,255,151,160, 67, 64,185,162, 71, 64,185, 0, 1, 0, 53,
/* 0x0200 */ 245, 3, 3,170, 96, 2, 64,249,224, 7, 0,180,224, 3, 20,170, /* 0x0200 */ 160, 10,138, 82, 0, 43,164,114, 95, 0, 0,107,225, 0, 0, 84,
/* 0x0210 */ 130, 1,128,210,161, 3, 1,145,220,255,255,151,160, 67, 64,185, /* 0x0210 */ 128, 2, 64,249, 64, 6, 0,180, 4, 0, 0, 20, 98, 0, 0, 52,
/* 0x0220 */ 162, 71, 64,185, 0, 1, 0, 53,160, 10,138, 82, 0, 43,164,114, /* 0x0220 */ 95, 0, 0,107,105, 0, 0, 84,224, 15,128, 82,165,255,255,151,
/* 0x0230 */ 95, 0, 0,107,225, 0, 0, 84,128, 2, 64,249, 64, 6, 0,180, /* 0x0230 */ 97, 2, 64,249, 63, 64, 32,235,131,255,255, 84, 95, 0, 0,107,
/* 0x0240 */ 4, 0, 0, 20, 98, 0, 0, 52, 95, 0, 0,107,105, 0, 0, 84, /* 0x0240 */ 98, 3, 0, 84,160, 63, 0,185,225, 3, 2, 42,128, 6, 64,249,
/* 0x0250 */ 224, 15,128, 82,155,255,255,151, 97, 2, 64,249, 63, 64, 32,235, /* 0x0250 */ 163,243, 0,145, 98, 6, 64,249,164, 35, 65, 57,192, 2, 63,214,
/* 0x0260 */ 131,255,255, 84, 95, 0, 0,107, 98, 3, 0, 84,160, 63, 0,185, /* 0x0260 */ 64,254,255, 53,161, 63, 64,185,160, 67, 64,185, 63, 0, 0,107,
/* 0x0270 */ 225, 3, 2, 42,128, 6, 64,249,163,243, 0,145, 98, 6, 64,249, /* 0x0270 */ 193,253,255, 84,163, 39, 65, 57,181, 0, 0,180,131, 0, 0, 52,
/* 0x0280 */ 164, 35, 65, 57,192, 2, 63,214, 64,254,255, 53,161, 63, 64,185, /* 0x0280 */ 96, 6, 64,249,162, 43, 65, 57,160, 2, 63,214,163, 71, 64,185,
/* 0x0290 */ 160, 67, 64,185, 63, 0, 0,107,193,253,255, 84,163, 39, 65, 57, /* 0x0290 */ 129, 6, 64,249,128, 2, 64,249, 33, 0, 3,139,129, 6, 0,249,
/* 0x02a0 */ 181, 0, 0,180,131, 0, 0, 52, 96, 6, 64,249,162, 43, 65, 57, /* 0x02a0 */ 0, 0, 3,203,128, 2, 0,249, 5, 0, 0, 20, 97, 6, 64,249,
/* 0x02b0 */ 160, 2, 63,214,163, 71, 64,185,129, 6, 64,249,128, 2, 64,249, /* 0x02b0 */ 224, 3, 20,170,226, 3, 2, 42,170,255,255,151,163, 67, 64,185,
/* 0x02c0 */ 33, 0, 3,139,129, 6, 0,249, 0, 0, 3,203,128, 2, 0,249, /* 0x02c0 */ 97, 6, 64,249, 96, 2, 64,249, 33, 0, 3,139, 97, 6, 0,249,
/* 0x02d0 */ 5, 0, 0, 20, 97, 6, 64,249,224, 3, 20,170,226, 3, 2, 42, /* 0x02d0 */ 0, 0, 3,203, 96, 2, 0,249,193,255,255, 23,243, 83, 65,169,
/* 0x02e0 */ 170,255,255,151,163, 67, 64,185, 97, 6, 64,249, 96, 2, 64,249, /* 0x02e0 */ 245, 91, 66,169,253,123,197,168,192, 3, 95,214,253,123,182,169,
/* 0x02f0 */ 33, 0, 3,139, 97, 6, 0,249, 0, 0, 3,203, 96, 2, 0,249, /* 0x02f0 */ 253, 3, 0,145,232, 39, 6,109,234, 59, 0,253, 40, 0, 39, 30,
/* 0x0300 */ 193,255,255, 23,243, 83, 65,169,245, 91, 66,169,253,123,197,168, /* 0x0300 */ 169, 0,103,158,202, 0,103,158,247, 99, 3,169,249,107, 4,169,
/* 0x0310 */ 192, 3, 95,214,253,123,182,169,253, 3, 0,145,232, 39, 6,109, /* 0x0310 */ 243, 83, 1,169,245, 91, 2,169,251,115, 5,169,249, 3, 0,170,
/* 0x0320 */ 234, 59, 0,253, 40, 0, 39, 30,169, 0,103,158,202, 0,103,158, /* 0x0320 */ 245, 3, 2,170,250, 3, 3, 42,252, 3, 4,170, 20,112, 0,145,
/* 0x0330 */ 247, 99, 3,169,249,107, 4,169,243, 83, 1,169,245, 91, 2,169, /* 0x0330 */ 24, 0,128, 82, 23, 0,128,210, 32, 19, 64,185, 31, 3, 0,107,
/* 0x0340 */ 251,115, 5,169,249, 3, 0,170,245, 3, 2,170,250, 3, 3, 42, /* 0x0340 */ 130, 11, 0, 84,128, 2, 64,185, 31,100, 0,113, 33, 9, 0, 84,
/* 0x0350 */ 252, 3, 4,170, 20,112, 0,145, 24, 0,128, 82, 23, 0,128,210, /* 0x0350 */ 150, 18, 64,249,246, 8, 0,180,147, 14, 64,249,128, 26, 64,249,
/* 0x0360 */ 32, 19, 64,185, 31, 3, 0,107,130, 11, 0, 84,128, 2, 64,185, /* 0x0360 */ 179, 79, 0,249,118, 2, 22,139,123,206,116,146,115, 46, 64,146,
/* 0x0370 */ 31,100, 0,113, 33, 9, 0, 84,150, 18, 64,249,246, 8, 0,180, /* 0x0370 */ 160, 75, 0,249,115, 2, 0,171, 96, 9, 0, 84, 31, 0, 31,235,
/* 0x0380 */ 147, 14, 64,249,128, 26, 64,249,179, 79, 0,249,118, 2, 22,139, /* 0x0380 */ 67, 2,130, 82, 68, 19,159, 90,181, 0, 0,181, 31, 0, 31,235,
/* 0x0390 */ 123,206,116,146,115, 46, 64,146,160, 75, 0,249,115, 2, 0,171, /* 0x0390 */ 65, 2,128, 82, 64, 2,130, 82, 3, 0,129, 26, 6, 1, 38, 30,
/* 0x03a0 */ 96, 9, 0, 84, 31, 0, 31,235, 67, 2,130, 82, 68, 19,159, 90, /* 0x03a0 */ 133, 22, 64,249,224, 3, 27,170,225, 3, 19,170, 98, 0,128, 82,
/* 0x03b0 */ 181, 0, 0,181, 31, 0, 31,235, 65, 2,128, 82, 64, 2,130, 82, /* 0x03b0 */ 197, 0, 5, 11, 90,255,255,151,127, 3, 0,235, 96, 0, 0, 84,
/* 0x03c0 */ 3, 0,129, 26, 6, 1, 38, 30,133, 22, 64,249,224, 3, 27,170, /* 0x03c0 */ 224, 15,128, 82, 63,255,255,151,117, 1, 0,180,128, 26, 64,249,
/* 0x03d0 */ 225, 3, 19,170, 98, 0,128, 82,197, 0, 5, 11, 88,255,255,151, /* 0x03d0 */ 32, 1, 0,180,128, 22, 64,249, 64, 0, 0,181,155, 3, 0,249,
/* 0x03e0 */ 127, 3, 0,235, 96, 0, 0, 84,224, 15,128, 82, 53,255,255,151, /* 0x03e0 */ 34, 1,102,158,224, 3, 21,170, 67, 1,102,158,161, 67, 2,145,
/* 0x03f0 */ 117, 1, 0,180,128, 26, 64,249, 32, 1, 0,180,128, 22, 64,249, /* 0x03f0 */ 115,255,255,151,227, 3, 19,203, 99, 44, 64,242,224, 0, 0, 84,
/* 0x0400 */ 64, 0, 0,181,155, 3, 0,249, 34, 1,102,158,224, 3, 21,170, /* 0x0400 */ 97, 3, 19,139, 0, 0,128,210, 63,104, 32, 56, 0, 4, 0,145,
/* 0x0410 */ 67, 1,102,158,161, 67, 2,145,115,255,255,151,227, 3, 19,203, /* 0x0410 */ 31, 0, 3,235,161,255,255, 84, 19, 1, 0,180,130, 62, 64,185,
/* 0x0420 */ 99, 44, 64,242,224, 0, 0, 84, 97, 3, 19,139, 0, 0,128,210, /* 0x0420 */ 224, 3, 27,170,225, 3, 19,170,163, 71, 0,249, 57,255,255,151,
/* 0x0430 */ 63,104, 32, 56, 0, 4, 0,145, 31, 0, 3,235,161,255,255, 84, /* 0x0430 */ 163, 71, 64,249, 96,252,255, 53,115, 0, 19,139,115, 3, 19,139,
/* 0x0440 */ 19, 1, 0,180,130, 62, 64,185,224, 3, 27,170,225, 3, 19,170, /* 0x0440 */ 127, 2, 22,235,130, 2, 0, 84,130, 62, 64,185,224, 3, 19,170,
/* 0x0450 */ 163, 71, 0,249, 54,255,255,151,163, 71, 64,249, 96,252,255, 53, /* 0x0450 */ 193, 2, 19,203, 67, 2,130, 82, 4, 0,128, 18, 5, 0,128, 82,
/* 0x0460 */ 115, 0, 19,139,115, 3, 19,139,127, 2, 22,235,130, 2, 0, 84, /* 0x0460 */ 47,255,255,151,127, 2, 0,235, 96, 1, 0, 84,213,255,255, 23,
/* 0x0470 */ 130, 62, 64,185,224, 3, 19,170,193, 2, 19,203, 67, 2,130, 82, /* 0x0470 */ 0, 16, 0, 81, 31, 4, 0,113,232, 0, 0, 84,130, 6, 64,249,
/* 0x0480 */ 4, 0,128, 18, 5, 0,128, 82, 45,255,255,151,127, 2, 0,235, /* 0x0480 */ 33, 0,128,210,129, 8,192,242,128, 66, 0,145, 95, 0, 1,235,
/* 0x0490 */ 96, 1, 0, 84,213,255,255, 23, 0, 16, 0, 81, 31, 4, 0,113, /* 0x0490 */ 247, 18,128,154,128, 6, 64,185, 24, 7, 0, 17,148, 2, 0,139,
/* 0x04a0 */ 232, 0, 0, 84,130, 6, 64,249, 33, 0,128,210,129, 8,192,242, /* 0x04a0 */ 166,255,255, 23,227, 3, 21,170, 53,249,255,181,227,255,255, 23,
/* 0x04b0 */ 128, 66, 0,145, 95, 0, 1,235,247, 18,128,154,128, 6, 64,185, /* 0x04b0 */ 224, 3, 23,170,232, 39, 70,109,243, 83, 65,169,245, 91, 66,169,
/* 0x04c0 */ 24, 7, 0, 17,148, 2, 0,139,166,255,255, 23,227, 3, 21,170, /* 0x04c0 */ 247, 99, 67,169,249,107, 68,169,251,115, 69,169,234, 59, 64,253,
/* 0x04d0 */ 53,249,255,181,227,255,255, 23,224, 3, 23,170,232, 39, 70,109, /* 0x04d0 */ 253,123,202,168,192, 3, 95,214,253,123,184,169,253, 3, 0,145,
/* 0x04e0 */ 243, 83, 65,169,245, 91, 66,169,247, 99, 67,169,249,107, 68,169, /* 0x04e0 */ 243, 83, 1,169,244, 3, 4,170,243, 3, 2,170,161, 39, 0,249,
/* 0x04f0 */ 251,115, 69,169,234, 59, 64,253,253,123,202,168,192, 3, 95,214, /* 0x04f0 */ 1, 96, 0,145,161, 47, 0,249,161, 39, 64,249, 0, 24, 64,185,
/* 0x0500 */ 253,123,184,169,253, 3, 0,145,243, 83, 1,169,244, 3, 4,170, /* 0x0500 */ 33, 96, 0,209,161, 43, 0,249,160, 51, 0,249,160, 7, 69,169,
/* 0x0510 */ 243, 3, 2,170,161, 39, 0,249, 1, 96, 0,145,161, 47, 0,249, /* 0x0510 */ 160, 7, 7,169,247, 99, 3,169,162, 55, 0,249,160, 67, 1,145,
/* 0x0520 */ 161, 39, 64,249, 0, 24, 64,185, 33, 96, 0,209,161, 43, 0,249, /* 0x0520 */ 161,131, 1,145,226, 3, 20,170,247, 3, 3,170, 3, 0,128,210,
/* 0x0530 */ 160, 51, 0,249,160, 7, 69,169,160, 7, 7,169,247, 99, 3,169, /* 0x0530 */ 245, 91, 2,169,166, 35, 0,249,245, 3, 5,170, 32,255,255,151,
/* 0x0540 */ 162, 55, 0,249,160, 67, 1,145,161,131, 1,145,226, 3, 20,170, /* 0x0540 */ 164, 35, 64,249, 1, 0,128, 82,230, 3, 21,170,224, 3, 19,170,
/* 0x0550 */ 247, 3, 3,170, 3, 0,128,210,245, 91, 2,169,166, 35, 0,249, /* 0x0550 */ 162,195, 1,145, 3, 0,128, 18,229, 3, 20,170,100,255,255,151,
/* 0x0560 */ 245, 3, 5,170, 32,255,255,151,164, 35, 64,249, 1, 0,128, 82, /* 0x0560 */ 245, 3, 0,170, 96, 18, 64,185, 97,114, 0,145, 4, 0,128, 82,
/* 0x0570 */ 230, 3, 21,170,224, 3, 19,170,162,195, 1,145, 3, 0,128, 18, /* 0x0570 */ 159, 0, 0,107,160, 7, 0, 84, 34, 0, 64,185, 95, 56, 0,113,
/* 0x0580 */ 229, 3, 20,170,100,255,255,151,245, 3, 0,170, 96, 18, 64,185, /* 0x0580 */ 193, 6, 0, 84, 32, 4, 64,249, 22, 0,128, 82,152, 2,128, 82,
/* 0x0590 */ 97,114, 0,145, 4, 0,128, 82,159, 0, 0,107,160, 7, 0, 84, /* 0x0590 */ 32, 0, 0,139, 1, 0,128, 82,226, 3, 1, 42,209,254,255,151,
/* 0x05a0 */ 34, 0, 64,185, 95, 56, 0,113,193, 6, 0, 84, 32, 4, 64,249, /* 0x05a0 */ 244, 3, 0, 42,212, 2,248, 54,224, 15,128, 82,197,254,255,151,
/* 0x05b0 */ 22, 0,128, 82,152, 2,128, 82, 32, 0, 0,139, 1, 0,128, 82, /* 0x05b0 */ 97, 2, 64,185,192, 87,151, 82,192, 95,185,114, 63, 0, 0,107,
/* 0x05c0 */ 226, 3, 1, 42,202,254,255,151,244, 3, 0, 42,212, 2,248, 54, /* 0x05c0 */ 65, 3, 0, 84, 97, 30, 64, 57,224, 3, 19,170,117, 34, 0,145,
/* 0x05d0 */ 224, 15,128, 82,187,254,255,151, 97, 2, 64,185,192, 87,151, 82, /* 0x05d0 */ 33,124, 24, 27, 33, 32, 0, 17,215,254,255,151, 97, 6, 64,185,
/* 0x05e0 */ 192, 95,185,114, 63, 0, 0,107, 65, 3, 0, 84, 97, 30, 64, 57, /* 0x05e0 */ 0, 0,128, 82, 31, 0, 1,107, 0, 2, 0, 84,162, 2, 64,185,
/* 0x05f0 */ 224, 3, 19,170,117, 34, 0,145, 33,124, 24, 27, 33, 32, 0, 17, /* 0x05f0 */ 95, 48, 0,113, 65, 1, 0, 84,182, 10, 64,185,224, 3, 20, 42,
/* 0x0600 */ 215,254,255,151, 97, 6, 64,185, 0, 0,128, 82, 31, 0, 1,107, /* 0x0600 */ 225, 3, 19,170,226, 3, 23,170,227, 3, 22, 42,199,254,255,151,
/* 0x0610 */ 0, 2, 0, 84,162, 2, 64,185, 95, 48, 0,113, 65, 1, 0, 84, /* 0x0610 */ 255, 2, 0,235,224,252,255, 84,228,255,255, 23, 0, 4, 0, 17,
/* 0x0620 */ 182, 10, 64,185,224, 3, 20, 42,225, 3, 19,170,226, 3, 23,170, /* 0x0620 */ 181, 82, 0,145,240,255,255, 23, 2, 0,128,210,224, 3, 19,170,
/* 0x0630 */ 227, 3, 22, 42,198,254,255,151,255, 2, 0,235,224,252,255, 84, /* 0x0630 */ 225, 3, 22, 42,227, 3, 20, 42,228, 3, 2,170,229, 3, 2,170,
/* 0x0640 */ 228,255,255, 23, 0, 4, 0, 17,181, 82, 0,145,240,255,255, 23, /* 0x0640 */ 230, 3, 2,170, 42,255,255,151,245, 3, 0,170,224, 3, 20, 42,
/* 0x0650 */ 2, 0,128,210,224, 3, 19,170,225, 3, 22, 42,227, 3, 20, 42, /* 0x0650 */ 167,254,255,151, 5, 0, 0, 20, 34, 4, 64,185,132, 4, 0, 17,
/* 0x0660 */ 228, 3, 2,170,229, 3, 2,170,230, 3, 2,170, 42,255,255,151, /* 0x0660 */ 33, 0, 2,139,195,255,255, 23,224, 3, 21,170,243, 83, 65,169,
/* 0x0670 */ 245, 3, 0,170,224, 3, 20, 42,161,254,255,151, 5, 0, 0, 20, /* 0x0670 */ 245, 91, 66,169,247, 99, 67,169,253,123,200,168,192, 3, 95,214,
/* 0x0680 */ 34, 4, 64,185,132, 4, 0, 17, 33, 0, 2,139,195,255,255, 23, /* 0x0680 */ 20, 0, 0, 0, 0, 0, 0, 0, 1,122, 82, 0, 4,120, 30, 1,
/* 0x0690 */ 224, 3, 21,170,243, 83, 65,169,245, 91, 66,169,247, 99, 67,169, /* 0x0690 */ 27, 12, 31, 0, 0, 0, 0, 0, 36, 0, 0, 0, 28, 0, 0, 0,
/* 0x06a0 */ 253,123,200,168,192, 3, 95,214, 20, 0, 0, 0, 0, 0, 0, 0, /* 0x06a0 */ 192,250,255,255, 92, 0, 0, 0, 0, 65, 14, 16,157, 2,158, 1,
/* 0x06b0 */ 1,122, 82, 0, 4,120, 30, 1, 27, 12, 31, 0, 0, 0, 0, 0, /* 0x06b0 */ 66, 13, 29, 83,222,221, 12, 31, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x06c0 */ 36, 0, 0, 0, 28, 0, 0, 0,192,250,255,255, 92, 0, 0, 0, /* 0x06c0 */ 44, 0, 0, 0, 68, 0, 0, 0,244,250,255,255, 48, 1, 0, 0,
/* 0x06d0 */ 0, 65, 14, 16,157, 2,158, 1, 66, 13, 29, 83,222,221, 12, 31, /* 0x06d0 */ 0, 65, 14, 80,157, 10,158, 9, 65, 13, 29, 66,147, 8,148, 7,
/* 0x06e0 */ 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 68, 0, 0, 0, /* 0x06e0 */ 149, 6,150, 5, 2, 71,222,221,214,213,212,211, 12, 31, 0, 0,
/* 0x06f0 */ 244,250,255,255, 48, 1, 0, 0, 0, 65, 14, 80,157, 10,158, 9, /* 0x06f0 */ 84, 0, 0, 0,116, 0, 0, 0,244,251,255,255,236, 1, 0, 0,
/* 0x0700 */ 65, 13, 29, 66,147, 8,148, 7,149, 6,150, 5, 2, 71,222,221, /* 0x0700 */ 0, 65, 14,160, 1,157, 20,158, 19, 65, 13, 29, 66, 5, 72, 8,
/* 0x0710 */ 214,213,212,211, 12, 31, 0, 0, 84, 0, 0, 0,116, 0, 0, 0, /* 0x0710 */ 5, 73, 7, 5, 74, 6, 72,151, 14,152, 13,153, 12,154, 11,147,
/* 0x0720 */ 244,251,255,255,236, 1, 0, 0, 0, 65, 14,160, 1,157, 20,158, /* 0x0720 */ 18,148, 17,149, 16,150, 15,155, 10,156, 9, 2,110,222,221, 6,
/* 0x0730 */ 19, 65, 13, 29, 66, 5, 72, 8, 5, 73, 7, 5, 74, 6, 72,151, /* 0x0730 */ 74, 6, 73, 6, 72,220,219,218,217,216,215,214,213,212,211, 12,
/* 0x0740 */ 14,152, 13,153, 12,154, 11,147, 18,148, 17,149, 16,150, 15,155, /* 0x0740 */ 31, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0,204, 0, 0, 0,
/* 0x0750 */ 10,156, 9, 2,110,222,221, 6, 74, 6, 73, 6, 72,220,219,218, /* 0x0750 */ 136,253,255,255,168, 1, 0, 0, 0, 65, 14,128, 1,157, 16,158,
/* 0x0760 */ 217,216,215,214,213,212,211, 12, 31, 0, 0, 0, 0, 0, 0, 0, /* 0x0760 */ 15, 65, 13, 29, 65,147, 14,148, 13, 81,151, 10,152, 9, 67,149,
/* 0x0770 */ 52, 0, 0, 0,204, 0, 0, 0,136,253,255,255,168, 1, 0, 0, /* 0x0770 */ 12,150, 11, 2, 82,222,221,216,215,214,213,212,211, 12, 31, 0
/* 0x0780 */ 0, 65, 14,128, 1,157, 16,158, 15, 65, 13, 29, 65,147, 14,148,
/* 0x0790 */ 13, 81,151, 10,152, 9, 67,149, 12,150, 11, 2, 82,222,221,216,
/* 0x07a0 */ 215,214,213,212,211, 12, 31, 0
}; };
+578
View File
@@ -0,0 +1,578 @@
/* arm64-linux.elf-entry.h
created from arm64-linux.elf-entry.bin, 8615 (0x21a7) bytes
This file is part of the UPX executable compressor.
Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
Copyright (C) 1996-2017 Laszlo Molnar
Copyright (C) 2000-2017 John F. Reiser
All Rights Reserved.
UPX and the UCL library are free software; you can redistribute them
and/or modify them under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING.
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> <ezerotven+github@gmail.com>
John F. Reiser
<jreiser@users.sourceforge.net>
*/
#define STUB_ARM64_LINUX_ELF_ENTRY_SIZE 8615
#define STUB_ARM64_LINUX_ELF_ENTRY_ADLER32 0xdca24898
#define STUB_ARM64_LINUX_ELF_ENTRY_CRC32 0xf3ff5dfd
unsigned char stub_arm64_linux_elf_entry[8615] = {
/* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0010 */ 1, 0,183, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0020 */ 0, 0, 0, 0, 0, 0, 0, 0,136, 23, 0, 0, 0, 0, 0, 0,
/* 0x0030 */ 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0,
/* 0x0040 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0050 */ 0, 0, 0, 0, 76,255,255, 16,129, 41, 64, 41,139, 53, 65, 41,
/* 0x0060 */ 107, 1, 12,139, 74, 1, 12,139, 99, 1, 64,185,137, 1, 1,203,
/* 0x0070 */ 33, 0, 3, 11,128, 9, 64,249, 33, 4, 64,145,224, 7,190,169,
/* 0x0080 */ 226, 55, 1,169,226, 0,128, 82,163, 1, 28, 50, 5, 0,128,210,
/* 0x0090 */ 4, 0,128, 18,200, 27,128, 82, 1, 0, 0,212, 31, 4, 64,177,
/* 0x00a0 */ 2, 0, 0, 84, 5, 0, 1,145, 33, 9,193,168, 35, 17,193,168,
/* 0x00b0 */ 1, 8,129,168, 3, 16,129,168, 33, 9,193,168, 35, 17,193,168,
/* 0x00c0 */ 1, 8,129,168, 3, 16,129,168, 63, 1, 10,235, 37, 1, 1,209,
/* 0x00d0 */ 163,254,255, 84, 4, 0, 9,203,225, 35, 64,185, 15, 2, 0, 16,
/* 0x00e0 */ 1, 68, 0,184,254, 3, 0,170,239, 1, 4,139,137, 1, 64,185,
/* 0x00f0 */ 41, 33, 3, 81,138, 1, 9,203, 74, 1, 4,139,100, 9, 64,185,
/* 0x0100 */ 99, 1, 64,185, 96, 49, 0,145, 97, 5, 64,185,226, 3, 30,170,
/* 0x0110 */ 227, 19, 0,185,227, 67, 0,145,224, 1, 31,214,254, 15, 31,248,
/* 0x0120 */ 226, 15,191,169, 7, 64, 33,139, 5, 0,128, 18, 4, 0,176, 82,
/* 0x0130 */ 24, 0, 0, 20,227, 19,193,168, 0, 0, 7,203, 66, 0, 3,203,
/* 0x0140 */ 130, 0, 0,185,228, 3, 0,170,224, 3, 3,170, 97, 0, 2,139,
/* 0x0150 */ 32,123, 11,213, 32,117, 11,213, 0, 0, 1,145, 31, 0, 1,235,
/* 0x0160 */ 131,255,255, 84,224, 3, 4,170,254, 7, 65,248,192, 3, 95,214,
/* 0x0170 */ 132, 0, 4, 43, 68, 0, 0, 52,192, 3, 95,214, 4, 68, 64,184,
/* 0x0180 */ 132, 0, 4, 58,192, 3, 95,214, 3, 20, 64, 56, 67, 20, 0, 56,
/* 0x0190 */ 248,255,255,151,162,255,255, 84, 33, 0,128, 82, 4, 0, 0, 20,
/* 0x01a0 */ 33, 4, 0, 81,243,255,255,151, 33, 0, 1, 26,241,255,255,151,
/* 0x01b0 */ 33, 0, 1, 26,239,255,255,151, 67,255,255, 84, 35, 12, 0,113,
/* 0x01c0 */ 1, 0,128, 82, 35, 1, 0, 84, 5, 20, 64, 56,165, 32, 3, 42,
/* 0x01d0 */ 229, 3, 37, 42, 5,251,255, 52,191, 0, 0,114,165,124, 1, 19,
/* 0x01e0 */ 161, 1, 0, 84, 3, 0, 0, 20,226,255,255,151, 66, 1, 0, 84,
/* 0x01f0 */ 33, 0,128, 82,223,255,255,151,226, 0, 0, 84,221,255,255,151,
/* 0x0200 */ 33, 0, 1, 26,219,255,255,151,163,255,255, 84, 33, 16, 0, 17,
/* 0x0210 */ 4, 0, 0, 20,215,255,255,151, 33, 0, 1, 26, 33, 8, 0, 17,
/* 0x0220 */ 191, 0, 20, 49, 33, 36,129, 26, 67, 64, 33,139, 99,240, 95, 56,
/* 0x0230 */ 67,200,101, 56, 67, 20, 0, 56, 33, 4, 0,113,161,255,255, 84,
/* 0x0240 */ 212,255,255, 23,226, 15,190,169,254, 11, 0,249, 7, 64, 33,139,
/* 0x0250 */ 5, 0,128, 18, 4, 0,176, 82, 24, 0, 0, 20,227, 19,193,168,
/* 0x0260 */ 0, 0, 7,203, 66, 0, 3,203,130, 0, 0,185,228, 3, 0,170,
/* 0x0270 */ 224, 3, 3,170, 97, 0, 2,139, 32,123, 11,213, 32,117, 11,213,
/* 0x0280 */ 0, 0, 1,145, 31, 0, 1,235,131,255,255, 84,224, 3, 4,170,
/* 0x0290 */ 254, 7, 65,248,192, 3, 95,214,132, 0, 4, 43, 68, 0, 0, 52,
/* 0x02a0 */ 192, 3, 95,214, 4, 68, 64,184,132, 0, 4, 58,192, 3, 95,214,
/* 0x02b0 */ 3, 20, 64, 56, 67, 20, 0, 56,248,255,255,151,162,255,255, 84,
/* 0x02c0 */ 33, 0,128, 82, 4, 0, 0, 20, 33, 4, 0, 81,243,255,255,151,
/* 0x02d0 */ 33, 0, 1, 58,241,255,255,151, 33, 0, 1, 58,239,255,255,151,
/* 0x02e0 */ 67,255,255, 84, 35, 12, 0,113, 1, 0,128, 82, 35, 1, 0, 84,
/* 0x02f0 */ 5, 20, 64, 56,165, 32, 3, 42,229, 3, 37, 42, 5,251,255, 52,
/* 0x0300 */ 163, 0, 1, 83,165,124, 1, 83, 99, 0, 3, 43, 2, 0, 0, 20,
/* 0x0310 */ 226,255,255,151, 33, 0, 1, 58,224,255,255,151, 33, 0, 1, 58,
/* 0x0320 */ 225, 0, 0, 84, 33, 0,128, 82,220,255,255,151, 33, 0, 1, 58,
/* 0x0330 */ 218,255,255,151,163,255,255, 84, 33, 8, 0, 17, 33, 4, 0, 17,
/* 0x0340 */ 191, 0, 20, 49, 33, 52,129, 26, 67, 0, 64, 57, 67,200,101, 56,
/* 0x0350 */ 67, 20, 0, 56, 33, 4, 0,113,161,255,255, 84,215,255,255, 23,
/* 0x0360 */ 1, 64, 33,139,225, 11,190,169,227,123, 1,169, 5, 0,128, 18,
/* 0x0370 */ 4, 0,176, 82, 31, 0, 0, 20,228,123, 65,169,225, 15,194,168,
/* 0x0380 */ 0, 0, 1,203, 66, 0, 3,203,130, 0, 0,185,228, 3, 0,170,
/* 0x0390 */ 224, 3, 3,170, 97, 0, 2,139, 32,123, 11,213, 32,117, 11,213,
/* 0x03a0 */ 0, 0, 1,145, 31, 0, 1,235,131,255,255, 84,224, 3, 4,170,
/* 0x03b0 */ 192, 3, 95,214,132, 0, 4, 43, 68, 0, 0, 52,192, 3, 95,214,
/* 0x03c0 */ 4, 68, 64,184,132, 0, 4, 58,192, 3, 95,214, 33, 0,128, 82,
/* 0x03d0 */ 240, 3, 30,170,248,255,255,151, 33, 0, 1, 58,246,255,255,151,
/* 0x03e0 */ 163,255,255, 84, 0, 2, 31,214, 3, 20, 64, 56, 67, 20, 0, 56,
/* 0x03f0 */ 241,255,255,151,162,255,255, 84,245,255,255,151, 35, 12, 0,113,
/* 0x0400 */ 1, 0,128, 82,163, 0, 0, 84, 5, 20, 64, 56,165, 32, 3, 42,
/* 0x0410 */ 229, 3, 37, 42, 37,251,255, 52,231,255,255,151, 33, 0, 1, 58,
/* 0x0420 */ 229,255,255,151, 33, 0, 1, 58, 97, 0, 0, 84,232,255,255,151,
/* 0x0430 */ 33, 8, 0, 17,191, 0, 52, 49, 33, 36,129, 26, 67,200,101, 56,
/* 0x0440 */ 33, 4, 0,113, 67, 20, 0, 56,162,255,255, 84,233,255,255, 23,
/* 0x0450 */ 159, 56, 0,113, 1, 0, 0, 84, 1, 64, 33,139, 4, 0,128,210,
/* 0x0460 */ 225, 11,190,169,227,123, 1,169,228, 19,191,169,224, 3, 0,145,
/* 0x0470 */ 227, 35, 0,145,230, 51, 0,145, 8, 0, 64, 57, 7,192,128, 82,
/* 0x0480 */ 8,125, 3, 83,231, 32,200, 26,253, 3, 0,145,231,192, 57, 17,
/* 0x0490 */ 232, 3, 0,145,255, 67, 39,203,100, 16,129,168,127, 0, 8,235,
/* 0x04a0 */ 195,255,255, 84,230, 3, 3,170,229, 3, 7, 42,228, 3, 2,170,
/* 0x04b0 */ 34, 8, 0, 81,225, 3, 0,170, 39, 20, 64, 56,231, 8, 0, 18,
/* 0x04c0 */ 231, 11, 0, 57, 39, 20, 64, 56,232,124, 4, 83,232, 7, 0, 57,
/* 0x04d0 */ 231, 12, 0, 18,231, 3, 0, 57,224, 3, 0,145, 17, 0, 0,148,
/* 0x04e0 */ 191, 3, 0,145,228,123, 65,169,225, 15,194,168, 0, 0, 1,203,
/* 0x04f0 */ 66, 0, 3,203,130, 0, 0,185,228, 3, 0,170,224, 3, 3,170,
/* 0x0500 */ 97, 0, 2,139, 32,123, 11,213, 32,117, 11,213, 0, 0, 1,145,
/* 0x0510 */ 31, 0, 1,235,131,255,255, 84,224, 3, 4,170,192, 3, 95,214,
/* 0x0520 */ 243, 83,184,169, 39, 0,128, 82, 20, 16, 0,145,245, 91, 1,169,
/* 0x0530 */ 247, 99, 2,169,249,107, 3,169,251,115, 4,169,254, 43, 0,249,
/* 0x0540 */ 8, 4, 64, 57, 26, 8, 64, 57, 28, 0, 64, 57,127, 0, 0,185,
/* 0x0550 */ 250, 32,218, 26,223, 0, 0,185,231, 32,200, 26,231, 4, 0, 81,
/* 0x0560 */ 231,111, 0,185, 8, 4, 64, 57, 7, 96,128, 82, 90, 7, 0, 81,
/* 0x0570 */ 8, 1, 28, 11,232, 32,200, 26, 8,217, 28, 49,224, 0, 0, 84,
/* 0x0580 */ 7, 0,128,210, 9,128,128, 82,137,122, 39,120,231, 4, 0,145,
/* 0x0590 */ 31, 1, 7,107,168,255,255, 84, 51, 64, 34,139,127, 2, 1,235,
/* 0x05a0 */ 0, 15, 0, 84,235, 3, 1,170, 34, 4, 0,145,103, 85, 64, 56,
/* 0x05b0 */ 127, 2, 2,235, 96, 14, 0, 84, 72, 20, 64, 56,127, 1, 2,235,
/* 0x05c0 */ 7, 33, 7, 42, 97,255,255, 84, 37, 68, 0, 52, 9,176, 41,145,
/* 0x05d0 */ 59, 0,128, 82,233, 63, 0,249, 9, 1,128, 82, 41, 1, 28, 75,
/* 0x05e0 */ 10, 0,128, 18,245, 3, 27, 42, 25, 0,128, 82, 8, 0,128, 82,
/* 0x05f0 */ 2, 0,128, 82, 16,224,191, 18, 17, 0,129, 82,251,107, 0,185,
/* 0x0600 */ 251,115, 0,185,233,119, 0,185, 78, 0, 26, 10, 44,111, 28, 83,
/* 0x0610 */ 95, 1, 16,107,201,125, 64,147, 44,193, 44,139,143,249,127,211,
/* 0x0620 */ 232, 0, 0, 84,127, 2, 11,235,192, 10, 0, 84,105, 1, 64, 57,
/* 0x0630 */ 74, 93, 24, 83,107, 5, 0,145, 39, 33, 7, 42,141,122,108,120,
/* 0x0640 */ 73,125, 11, 83,169,125, 9, 27,255, 0, 9,107,162, 10, 0, 84,
/* 0x0650 */ 234,211, 65, 57, 63, 27, 0,113, 8, 41,202, 26,234,111, 64,185,
/* 0x0660 */ 79, 0, 10, 10,239, 33,220, 26,239, 1, 8, 11, 40, 2, 13, 75,
/* 0x0670 */ 234,117, 30, 83, 79, 1, 15, 75,173, 21,136, 11,239, 93,120,211,
/* 0x0680 */ 141,122, 44,120,239,217, 28,145,143, 6, 15,139, 45, 31, 0, 84,
/* 0x0690 */ 72, 0, 21, 75,146,104,104, 56, 40, 0,128, 82, 7, 0, 0, 20,
/* 0x06a0 */ 236,121, 42,120, 8,121, 31, 83,233, 3, 14, 42,205, 56, 0, 53,
/* 0x06b0 */ 31,253, 3,113,204, 3, 0, 84, 82,122, 31, 83, 63, 1, 16,107,
/* 0x06c0 */ 77, 2, 24, 18, 22,121, 31, 83,170,125, 64,147, 74, 1, 4,145,
/* 0x06d0 */ 74,193, 40,139,232, 0, 0, 84,127, 1, 19,235, 41, 93, 24, 83,
/* 0x06e0 */ 0, 5, 0, 84,108, 1, 64, 57,107, 5, 0,145,135, 33, 7, 42,
/* 0x06f0 */ 236,121,106,120, 46,125, 11, 83, 55, 2, 12, 75,142,125, 14, 27,
/* 0x0700 */ 152, 21, 76, 75,140, 21,151, 11,255, 0, 14,107, 41, 1, 14, 75,
/* 0x0710 */ 131,252,255, 84,248,121, 42,120,200, 6, 0, 17,231, 0, 14, 75,
/* 0x0720 */ 141,252,255, 53, 31,253, 3,113, 45, 27, 0, 84, 8, 29, 0, 83,
/* 0x0730 */ 234, 3, 9, 42,136, 72, 34, 56, 66, 4, 0, 17, 63, 39, 0,113,
/* 0x0740 */ 140, 49, 0, 84, 57, 15, 0, 81,191, 0, 2,107,232,245,255, 84,
/* 0x0750 */ 0,224,191, 18, 95, 1, 0,107,136, 0, 0, 84,127, 2, 11,235,
/* 0x0760 */ 0, 1, 0, 84,107, 5, 0,145, 97, 1, 1,203, 97, 0, 0,185,
/* 0x0770 */ 0, 0,128, 82,194, 0, 0,185, 3, 0, 0, 20, 31, 32, 3,213,
/* 0x0780 */ 32, 0,128, 82,245, 91, 65,169,247, 99, 66,169,249,107, 67,169,
/* 0x0790 */ 251,115, 68,169,254, 43, 64,249,243, 83,200,168,192, 3, 95,214,
/* 0x07a0 */ 74, 1, 9, 75,173, 21, 77, 75,231, 0, 9, 75,141,122, 44,120,
/* 0x07b0 */ 41,127, 64,147, 95, 1, 16,107, 41, 1, 3,145, 45,249,127,211,
/* 0x07c0 */ 232, 0, 0, 84,127, 1, 19,235,192,253,255, 84,104, 1, 64, 57,
/* 0x07d0 */ 74, 93, 24, 83,107, 5, 0,145, 7, 33, 7, 42,140,122,105,120,
/* 0x07e0 */ 72,125, 11, 83,136,125, 8, 27,255, 0, 8,107, 98, 25, 0, 84,
/* 0x07f0 */ 234,107, 64,185, 63, 31, 0,113,251,115, 64,185,234,115, 0,185,
/* 0x0800 */ 42, 2, 12, 75,245,107, 0,185,140, 21,138, 11,140,122, 41,120,
/* 0x0810 */ 105, 0,128, 82,249,179,137, 26, 9,160, 25,145, 31, 1, 16,107,
/* 0x0820 */ 232, 0, 0, 84,127, 2, 11,235,192,250,255, 84,106, 1, 64, 57,
/* 0x0830 */ 8, 93, 24, 83,107, 5, 0,145, 71, 33, 7, 42, 44, 1, 64,121,
/* 0x0840 */ 10,125, 11, 83,138,125, 10, 27,255, 0, 10,107,226, 30, 0, 84,
/* 0x0850 */ 210,113, 29, 83, 40, 2, 12, 75, 22, 0,128, 82,126, 0,128, 82,
/* 0x0860 */ 82,126, 64,147,140, 21,136, 11, 82, 10, 0,145, 44, 1, 0,121,
/* 0x0870 */ 50, 5, 18,139,238, 3, 30, 42, 45, 0,128, 82, 6, 0, 0, 20,
/* 0x0880 */ 232, 1, 0,121,206, 5, 0,113,173,121, 31, 83,234, 3, 9, 42,
/* 0x0890 */ 32, 3, 0, 84, 95, 1, 16,107,183,121, 31, 83, 79,198, 45,139,
/* 0x08a0 */ 232, 0, 0, 84,127, 2, 11,235, 74, 93, 24, 83,160,246,255, 84,
/* 0x08b0 */ 104, 1, 64, 57,107, 5, 0,145, 7, 33, 7, 42,232, 1, 64,121,
/* 0x08c0 */ 73,125, 11, 83, 44, 2, 8, 75, 9,125, 9, 27, 24, 21, 72, 75,
/* 0x08d0 */ 8, 21,140, 11,255, 0, 9,107, 74, 1, 9, 75, 35,253,255, 84,
/* 0x08e0 */ 248, 1, 0,121,206, 5, 0,113,231, 0, 9, 75,237, 6, 0, 17,
/* 0x08f0 */ 33,253,255, 84, 40, 0,128, 82, 63, 15, 0,113, 30, 33,222, 26,
/* 0x0900 */ 222, 2, 30, 75,205, 3, 13, 11,236, 22, 0, 84,191, 13, 0,113,
/* 0x0910 */ 104, 0,128, 82,181,209,136, 26,207, 0,128, 82,181,102, 26, 83,
/* 0x0920 */ 46, 0,128, 82,181,126, 64,147,181,194, 6,145,181,250,127,211,
/* 0x0930 */ 7, 0, 0, 20, 31, 32, 3,213,136,106, 50,120,239, 5, 0,113,
/* 0x0940 */ 206,121, 31, 83,234, 3, 9, 42, 32, 3, 0, 84, 95, 1, 16,107,
/* 0x0950 */ 214,121, 31, 83,178,198, 46,139,232, 0, 0, 84,127, 2, 11,235,
/* 0x0960 */ 74, 93, 24, 83,224,240,255, 84,104, 1, 64, 57,107, 5, 0,145,
/* 0x0970 */ 7, 33, 7, 42,136,106,114,120, 73,125, 11, 83, 44, 2, 8, 75,
/* 0x0980 */ 9,125, 9, 27, 23, 21, 72, 75, 8, 21,140, 11,255, 0, 9,107,
/* 0x0990 */ 74, 1, 9, 75, 35,253,255, 84,151,106, 50,120,239, 5, 0,113,
/* 0x09a0 */ 231, 0, 9, 75,206, 6, 0, 17, 33,253,255, 84,213, 1, 1, 81,
/* 0x09b0 */ 191, 14, 0,113, 45, 17, 0, 84,191, 54, 0,113,168, 2, 0, 18,
/* 0x09c0 */ 8, 1, 31, 50,169,126, 1, 19, 44, 32, 0, 84, 47, 5, 0, 81,
/* 0x09d0 */ 9, 86,128,210, 46,193, 53,203, 21, 33,207, 26,206, 65, 53,139,
/* 0x09e0 */ 142, 6, 14,139,206, 9, 0,209, 50, 0,128, 82,247, 3, 18, 42,
/* 0x09f0 */ 8, 0, 0, 20, 31, 32, 3,213,200, 2, 0,121, 82,122, 31, 83,
/* 0x0a00 */ 234, 3, 9, 42,239, 5, 0,113,247,122, 31, 83, 96, 14, 0, 84,
/* 0x0a10 */ 95, 1, 16,107, 88,122, 31, 83,214,197, 50,139,232, 0, 0, 84,
/* 0x0a20 */ 127, 2, 11,235, 74, 93, 24, 83,192,234,255, 84,104, 1, 64, 57,
/* 0x0a30 */ 107, 5, 0,145, 7, 33, 7, 42,200, 2, 64,121, 73,125, 11, 83,
/* 0x0a40 */ 44, 2, 8, 75, 9,125, 9, 27, 30, 21, 72, 75, 8, 21,140, 11,
/* 0x0a50 */ 255, 0, 9,107, 74, 1, 9, 75, 3,253,255, 84,222, 2, 0,121,
/* 0x0a60 */ 231, 0, 9, 75,181, 2, 23, 42, 18, 7, 0, 17,230,255,255, 23,
/* 0x0a70 */ 40, 0,128, 82, 6, 0, 0, 20, 8,121, 31, 83,234,121, 46,120,
/* 0x0a80 */ 31,253, 3,113,233, 3, 12, 42, 44, 3, 0, 84, 63, 1, 16,107,
/* 0x0a90 */ 18,121, 31, 83, 14,125, 64,147,232, 0, 0, 84,127, 2, 11,235,
/* 0x0aa0 */ 41, 93, 24, 83,224,230,255, 84,106, 1, 64, 57,107, 5, 0,145,
/* 0x0ab0 */ 71, 33, 7, 42,234,121,110,120, 44,125, 11, 83, 45, 2, 10, 75,
/* 0x0ac0 */ 76,125, 12, 27, 86, 21, 74, 75, 74, 21,141, 11,255, 0, 12,107,
/* 0x0ad0 */ 41, 1, 12, 75, 35,253,255, 84, 72, 6, 0, 17,246,121, 46,120,
/* 0x0ae0 */ 31,253, 3,113,231, 0, 12, 75, 45,253,255, 84, 8, 29, 0, 83,
/* 0x0af0 */ 63, 15, 0,113,136, 72, 34, 56,234, 3, 9, 42, 66, 4, 0, 17,
/* 0x0b00 */ 236,225,255, 84,191, 0, 2,107, 25, 0,128, 82,232,215,255, 84,
/* 0x0b10 */ 16,255,255, 23, 31, 32, 3,213, 74, 1, 8, 75,140, 21, 76, 75,
/* 0x0b20 */ 95, 1, 16,107,140,122, 41,120,231, 0, 8, 75,169, 97, 0,145,
/* 0x0b30 */ 232, 0, 0, 84,127, 2, 11,235, 64,226,255, 84,104, 1, 64, 57,
/* 0x0b40 */ 74, 93, 24, 83,107, 5, 0,145, 7, 33, 7, 42,140,106,105,120,
/* 0x0b50 */ 72,125, 11, 83,136,125, 8, 27,255, 0, 8,107,226, 9, 0, 84,
/* 0x0b60 */ 42, 2, 12, 75, 31, 1, 16,107,239,129, 7,145,140, 21,138, 11,
/* 0x0b70 */ 140,106, 41,120,232, 0, 0, 84,127, 2, 11,235, 32,224,255, 84,
/* 0x0b80 */ 105, 1, 64, 57, 8, 93, 24, 83,107, 5, 0,145, 39, 33, 7, 42,
/* 0x0b90 */ 137,106,111,120, 10,125, 11, 83, 42,125, 10, 27,255, 0, 10,107,
/* 0x0ba0 */ 130, 16, 0, 84, 40, 2, 9, 75, 41, 21,136, 11,137,106, 47,120,
/* 0x0bb0 */ 130,222,255, 52, 72, 0, 21, 75, 63, 31, 0,113, 41, 1,128, 82,
/* 0x0bc0 */ 108, 1,128, 82, 57,177,140, 26,136,104,104, 56,136, 72, 34, 56,
/* 0x0bd0 */ 66, 4, 0, 17,221,254,255, 23,181, 6, 0, 49,160,219,255, 84,
/* 0x0be0 */ 57, 31, 0, 17,191, 2, 2,107,173, 9, 0, 17,168,220,255, 84,
/* 0x0bf0 */ 233, 3, 2, 42, 72, 0, 21, 75,173, 5, 0, 81, 66, 4, 0, 17,
/* 0x0c00 */ 191, 1, 31,107,160, 16, 66,122,136,104,104, 56,136, 72, 41, 56,
/* 0x0c10 */ 233, 3, 2, 42, 8,255,255, 84,191, 0, 2,107,104,207,255, 84,
/* 0x0c20 */ 204,254,255, 23, 31, 32, 3,213, 8, 1, 10, 75,140, 21, 76, 75,
/* 0x0c30 */ 31, 1, 16,107, 44, 1, 0,121,231, 0, 10, 75,232, 0, 0, 84,
/* 0x0c40 */ 127, 2, 11,235,224,217,255, 84,106, 1, 64, 57, 8, 93, 24, 83,
/* 0x0c50 */ 107, 5, 0,145, 71, 33, 7, 42, 44, 5, 64,121, 10,125, 11, 83,
/* 0x0c60 */ 138,125, 10, 27,255, 0, 10,107, 66, 7, 0, 84,210,113, 29, 83,
/* 0x0c70 */ 40, 2, 12, 75, 22, 1,128, 82,126, 0,128, 82, 82,126, 64,147,
/* 0x0c80 */ 136, 21,136, 11, 82, 10, 2,145, 40, 5, 0,121, 50, 5, 18,139,
/* 0x0c90 */ 249,254,255, 23, 31, 32, 3,213, 74, 1, 8, 75,231, 0, 8, 75,
/* 0x0ca0 */ 95, 1, 16,107,136, 21, 76, 75,136,106, 41,120,172,193, 0,145,
/* 0x0cb0 */ 232, 0, 0, 84,127, 2, 11,235, 64,214,255, 84,104, 1, 64, 57,
/* 0x0cc0 */ 74, 93, 24, 83,107, 5, 0,145, 7, 33, 7, 42,137,106,108,120,
/* 0x0cd0 */ 72,125, 11, 83, 40,125, 8, 27,255, 0, 8,107, 35, 5, 0, 84,
/* 0x0ce0 */ 74, 1, 8, 75, 41, 21, 73, 75, 95, 1, 16,107,137,106, 44,120,
/* 0x0cf0 */ 231, 0, 8, 75,173, 33, 1,145,232, 0, 0, 84,127, 2, 11,235,
/* 0x0d00 */ 0,212,255, 84,104, 1, 64, 57, 74, 93, 24, 83,107, 5, 0,145,
/* 0x0d10 */ 7, 33, 7, 42,137,106,109,120, 72,125, 11, 83, 40,125, 8, 27,
/* 0x0d20 */ 255, 0, 8,107,226, 7, 0, 84,234, 3, 21, 42,236,107, 64,185,
/* 0x0d30 */ 234,107, 0,185, 42, 2, 9, 75,245,115, 64,185, 41, 21,138, 11,
/* 0x0d40 */ 236,115, 0,185,137,106, 45,120, 20, 0, 0, 20, 31, 32, 3,213,
/* 0x0d50 */ 231, 0, 10, 75, 50, 17, 8,145, 10, 1, 10, 75, 22, 2,128, 82,
/* 0x0d60 */ 136, 21, 76, 75, 30, 1,128, 82, 40, 5, 0,121,194,254,255, 23,
/* 0x0d70 */ 191, 0, 2,107, 57, 27, 0, 81,136,196,255, 84,117,254,255, 23,
/* 0x0d80 */ 234, 3, 21, 42,245,107, 64,185,234,107, 0,185, 42, 2, 9, 75,
/* 0x0d90 */ 41, 21,138, 11,137,106, 44,120, 63, 31, 0,113, 10, 1,128, 82,
/* 0x0da0 */ 108, 1,128, 82,233, 63, 64,249, 89,177,140, 26,156,254,255, 23,
/* 0x0db0 */ 41, 21, 73, 75, 8, 1, 10, 75,137,106, 47,120,231, 0, 10, 75,
/* 0x0dc0 */ 246,255,255, 23,233, 3, 14, 42, 87,254,255, 23, 41, 21, 0, 81,
/* 0x0dd0 */ 95, 1, 16,107, 8,121, 31, 83,232, 0, 0, 84,127, 2, 11,235,
/* 0x0de0 */ 74, 93, 24, 83,224,204,255, 84,108, 1, 64, 57,107, 5, 0,145,
/* 0x0df0 */ 135, 33, 7, 42, 74,125, 1, 83,255, 0, 10,107, 99, 0, 0, 84,
/* 0x0e00 */ 231, 0, 10, 75, 8, 1, 0, 50, 41, 5, 0,113, 33,254,255, 84,
/* 0x0e10 */ 21,109, 28, 83, 14, 32, 25,145,143, 0,128, 82,243,254,255, 23,
/* 0x0e20 */ 41, 21, 73, 75,137,106, 45,120,233,107, 64,185,236, 3, 21, 42,
/* 0x0e30 */ 231, 0, 8, 75,245, 3, 27, 42, 72, 1, 8, 75,251,115, 64,185,
/* 0x0e40 */ 236,107, 0,185,233,115, 0,185,212,255,255, 23, 2, 0,128, 82,
/* 0x0e50 */ 227, 19,189,169,229, 27, 1,169,254, 19, 0,249,232, 3, 1,170,
/* 0x0e60 */ 45, 64, 34,139,233, 3, 4,170,142, 64, 37,139, 11, 16, 0,145,
/* 0x0e70 */ 6, 0, 64, 57, 5, 4, 64, 57, 4, 8, 64, 57,174, 0, 6, 11,
/* 0x0e80 */ 7, 0,128, 18,229, 32,197, 26,229, 3, 37, 42,228, 32,196, 26,
/* 0x0e90 */ 228, 3, 36, 42, 35, 0,128, 82, 34, 0,128, 82, 33, 0,128, 82,
/* 0x0ea0 */ 32, 0,128, 82, 6, 0,128, 82,230, 31, 0,185, 2, 96,128, 82,
/* 0x0eb0 */ 192,230,128, 82, 66, 32,206, 26, 66, 0, 0, 11, 0,128,128,210,
/* 0x0ec0 */ 225, 3, 11,170, 0, 64, 0,170, 0,128, 0,170, 32,132, 0,248,
/* 0x0ed0 */ 66, 16, 0,113,204,255,255, 84, 0, 21, 0,145,231, 0, 0,148,
/* 0x0ee0 */ 31, 0, 8,235,193,255,255, 84,227, 67, 66,248,226, 19, 64,185,
/* 0x0ef0 */ 36, 1, 3,203,128, 0, 2, 10,224, 47, 0,185, 0, 16, 6, 11,
/* 0x0f00 */ 97, 1, 0,145,225, 0, 0,148,129, 5, 0, 84,227, 23, 64,185,
/* 0x0f10 */ 226, 27, 64,185, 99, 0, 4, 10,224,115, 64, 57, 99, 32,194, 26,
/* 0x0f20 */ 226, 3, 2, 75, 66, 32, 0, 17, 2, 36,194, 26, 99, 0, 2, 11,
/* 0x0f30 */ 106,177, 57,145, 99, 4, 3, 11,227, 3, 3, 42, 32, 0,128, 82,
/* 0x0f40 */ 74, 37, 3,139,223, 28, 0,113, 3, 2, 0, 84,227,125, 64,147,
/* 0x0f50 */ 227, 3, 3,203, 37,105, 99, 56,165,120, 31, 83, 65, 1, 8,145,
/* 0x0f60 */ 164, 0, 24, 18,227, 3, 4, 42, 33, 4, 3,139,201, 0, 0,148,
/* 0x0f70 */ 3, 0, 0, 18,127, 32, 68,107,193, 0, 0, 84, 31, 0, 4,113,
/* 0x0f80 */ 195,254,255, 84, 5, 0, 0, 20,225, 3, 10,170,193, 0, 0,148,
/* 0x0f90 */ 31, 0, 4,113,163,255,255, 84, 98, 0,128, 82,195, 0,128, 82,
/* 0x0fa0 */ 223, 40, 0,113, 67, 48,131, 26,223, 16, 0,113,195, 48,131, 26,
/* 0x0fb0 */ 198, 0, 3, 75, 34, 0, 0, 20, 97, 1, 6,145,178, 0, 0,148,
/* 0x0fc0 */ 129, 1, 0, 84,227, 11, 64,185,226, 7, 64,185,227, 15, 0,185,
/* 0x0fd0 */ 226, 11, 0,185,239, 7, 0,185, 3, 0,128, 82,223, 28, 0,113,
/* 0x0fe0 */ 102, 0,128, 82,102, 48,134, 26,106,145, 25,145, 42, 0, 0, 20,
/* 0x0ff0 */ 97, 97, 6,145,164, 0, 0,148, 97, 2, 0, 84,227, 47, 64,185,
/* 0x1000 */ 97,129, 7,145, 96, 16, 6, 11,160, 0, 0,148,161, 3, 0, 84,
/* 0x1010 */ 35, 1,128, 82,223, 28, 0,113,102, 1,128, 82,102, 48,134, 26,
/* 0x1020 */ 227, 67, 66,248, 36, 1, 3,203,159, 0, 15,107,131, 17, 0, 84,
/* 0x1030 */ 227,125, 64,147,227, 3, 3,203, 32,105, 99, 56, 32, 21, 0, 56,
/* 0x1040 */ 121, 0, 0, 20, 97,193, 6,145,143, 0, 0,148,228, 7, 64,185,
/* 0x1050 */ 64, 1, 0, 84, 97, 33, 7,145,139, 0, 0,148,228, 11, 64,185,
/* 0x1060 */ 128, 0, 0, 84,227, 11, 64,185,228, 15, 64,185,227, 15, 0,185,
/* 0x1070 */ 227, 7, 64,185,227, 11, 0,185,239, 7, 0,185,239, 3, 4, 42,
/* 0x1080 */ 3, 1,128, 82,223, 28, 0,113,102, 1,128, 82,102, 48,134, 26,
/* 0x1090 */ 106,161, 41,145, 65, 1, 0,145,125, 0, 0,148, 1, 1, 0, 84,
/* 0x10a0 */ 227, 47, 64,185, 69, 17, 0,145,227, 3, 3, 42, 2, 0,128, 82,
/* 0x10b0 */ 165, 16, 3,139, 4, 1,128, 82, 14, 0, 0, 20, 65, 9, 0,145,
/* 0x10c0 */ 115, 0, 0,148, 1, 1, 0, 84,227, 47, 64,185, 69, 17, 4,145,
/* 0x10d0 */ 227, 3, 3, 42, 2, 1,128, 82,165, 16, 3,139, 4, 1,128, 82,
/* 0x10e0 */ 4, 0, 0, 20, 69, 17, 8,145, 2, 2,128, 82, 4, 32,128, 82,
/* 0x10f0 */ 226, 55, 0,185, 32, 0,128, 82,225, 3, 5,170,101, 0, 0,148,
/* 0x1100 */ 3, 0, 4,107,163,255,255, 84,229, 55, 64,185,165, 0, 3, 11,
/* 0x1110 */ 229, 55, 0,185,223, 16, 0,113,194, 6, 0, 84,198, 28, 0, 17,
/* 0x1120 */ 99, 0,128, 82,191, 16, 0,113,101, 32,133, 26,227, 3, 5, 42,
/* 0x1130 */ 101, 29, 3,139,165,128, 13,145, 32, 0,128, 82, 4, 8,128, 82,
/* 0x1140 */ 225, 3, 5,170, 83, 0, 0,148, 3, 0, 4,107,163,255,255, 84,
/* 0x1150 */ 227, 47, 0,185,127, 16, 0,113, 99, 4, 0, 84,100,124, 1, 83,
/* 0x1160 */ 132, 4, 0, 81,111, 0, 0, 18,239, 1, 31, 50,127, 56, 0,113,
/* 0x1170 */ 226, 0, 0, 84,239, 33,196, 26,106,121, 21,145,227, 1, 3, 75,
/* 0x1180 */ 227, 3, 3, 42, 74, 5, 3,139, 12, 0, 0, 20,132, 16, 0, 81,
/* 0x1190 */ 53, 0, 0,148,231,124, 1, 83,131, 1, 7,107,108, 32,140, 26,
/* 0x11a0 */ 239, 1, 15, 26,132, 4, 0,113, 65,255,255, 84,106, 17, 25,145,
/* 0x11b0 */ 239,109, 28, 83,132, 0,128, 82, 37, 0,128, 82, 32, 0,128, 82,
/* 0x11c0 */ 225, 3, 10,170, 51, 0, 0,148, 31, 0, 0,114, 64, 0, 0, 84,
/* 0x11d0 */ 239, 1, 5, 42,165,120, 31, 83,132, 4, 0,113, 33,255,255, 84,
/* 0x11e0 */ 2, 0, 0, 20,239, 47, 64,185,239, 5, 0, 49,229, 55, 64,185,
/* 0x11f0 */ 227, 67, 66,248,165, 8, 0, 17, 35, 1, 3,203,255, 1, 3,107,
/* 0x1200 */ 232, 2, 0, 84,227,125, 64,147,227, 3, 3,203, 32,105, 99, 56,
/* 0x1210 */ 32, 21, 0, 56, 63, 1, 14,235,194, 0, 0, 84,165, 4, 0,113,
/* 0x1220 */ 97,255,255, 84,224,115, 0, 57, 63, 1, 14,235,227,229,255, 84,
/* 0x1230 */ 13, 0, 0,148, 0, 0,128, 82,226, 19, 64,249, 3, 1, 2,203,
/* 0x1240 */ 226, 31, 64,249, 67, 0, 0,185,226, 67, 66,248, 35, 1, 2,203,
/* 0x1250 */ 226, 55, 64,249, 67, 0, 0,185,255,243, 0,145, 32, 0,128, 82,
/* 0x1260 */ 246,255,255, 23,227,124, 24, 83,195, 0, 0, 53, 31, 1, 13,235,
/* 0x1270 */ 231, 92, 24, 83, 66,255,255, 84, 3, 21, 64, 56,108, 32, 12, 42,
/* 0x1280 */ 192, 3, 95,214,224, 3, 6, 42, 33, 68, 32,139, 0, 0,128, 82,
/* 0x1290 */ 33, 68, 32,139,227,124, 24, 83,241, 3, 30,170, 94, 0, 0, 16,
/* 0x12a0 */ 99,254,255, 52, 35, 0, 64,121,226,124, 11, 83, 98,124, 2, 27,
/* 0x12b0 */ 159, 1, 2,107, 2, 1, 0, 84, 2, 0,129, 82,231, 3, 2, 42,
/* 0x12c0 */ 66, 0, 3, 75, 0, 0, 0, 58, 99, 20, 66, 11, 35, 0, 0,121,
/* 0x12d0 */ 32, 2, 95,214,140, 1, 2, 75,231, 0, 2, 75, 99, 20, 67, 75,
/* 0x12e0 */ 0, 0, 0, 58, 35, 0, 0,121, 32, 2, 95,214,194, 3,128, 82,
/* 0x12f0 */ 225, 0, 0, 16, 64, 0,128, 82, 8, 8,128, 82, 1, 0, 0,212,
/* 0x1300 */ 224, 15,128, 82,168, 11,128, 82, 1, 0, 0,212, 80, 82, 79, 84,
/* 0x1310 */ 95, 69, 88, 69, 67,124, 80, 82, 79, 84, 95, 87, 82, 73, 84, 69,
/* 0x1320 */ 32,102, 97,105,108,101,100, 46, 10, 0,102,105,108,101, 32,102,
/* 0x1330 */ 111,114,109, 97,116, 32,101,108,102, 54, 52, 45,108,105,116,116,
/* 0x1340 */ 108,101, 97, 97,114, 99,104, 54, 52, 10, 10, 83,101, 99,116,105,
/* 0x1350 */ 111,110,115, 58, 10, 73,100,120, 32, 78, 97,109,101, 32, 32, 32,
/* 0x1360 */ 32, 32, 32, 32, 32, 32, 32, 83,105,122,101, 32, 32, 32, 32, 32,
/* 0x1370 */ 32, 86, 77, 65, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x1380 */ 32, 32, 32, 76, 77, 65, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x1390 */ 32, 32, 32, 32, 32, 70,105,108,101, 32,111,102,102, 32, 32, 65,
/* 0x13a0 */ 108,103,110, 32, 32, 70,108, 97,103,115, 10, 32, 32, 48, 32, 69,
/* 0x13b0 */ 76, 70, 77, 65, 73, 78, 88, 32, 32, 32, 32, 32, 32, 48, 48, 48,
/* 0x13c0 */ 48, 48, 48, 51, 99, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x13d0 */ 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48,
/* 0x13e0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48,
/* 0x13f0 */ 48, 52, 48, 32, 32, 50, 42, 42, 50, 32, 32, 67, 79, 78, 84, 69,
/* 0x1400 */ 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68,
/* 0x1410 */ 79, 78, 76, 89, 10, 32, 32, 49, 32, 76, 85, 78, 77, 80, 48, 48,
/* 0x1420 */ 48, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x1430 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1440 */ 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1450 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 55, 99, 32, 32, 50,
/* 0x1460 */ 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82,
/* 0x1470 */ 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 50, 32, 76, 85, 78, 77,
/* 0x1480 */ 80, 48, 48, 49, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48,
/* 0x1490 */ 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x14a0 */ 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x14b0 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 55, 99,
/* 0x14c0 */ 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83,
/* 0x14d0 */ 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 51, 32, 69,
/* 0x14e0 */ 76, 70, 77, 65, 73, 78, 88,117, 32, 32, 32, 32, 32, 48, 48, 48,
/* 0x14f0 */ 48, 48, 48, 97, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1500 */ 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48,
/* 0x1510 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48,
/* 0x1520 */ 48, 55, 99, 32, 32, 50, 42, 42, 50, 32, 32, 67, 79, 78, 84, 69,
/* 0x1530 */ 78, 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68,
/* 0x1540 */ 79, 78, 76, 89, 10, 32, 32, 52, 32, 78, 82, 86, 95, 72, 69, 65,
/* 0x1550 */ 68, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x1560 */ 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1570 */ 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1580 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 49, 49, 99, 32, 32, 50,
/* 0x1590 */ 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82,
/* 0x15a0 */ 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 53, 32, 78, 82, 86, 95,
/* 0x15b0 */ 84, 65, 73, 76, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48,
/* 0x15c0 */ 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x15d0 */ 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x15e0 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 49, 49, 99,
/* 0x15f0 */ 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83,
/* 0x1600 */ 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 54, 32, 78,
/* 0x1610 */ 82, 86, 50, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, 48,
/* 0x1620 */ 48, 48, 49, 50, 56, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1630 */ 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48,
/* 0x1640 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48,
/* 0x1650 */ 49, 49, 99, 32, 32, 50, 42, 42, 50, 32, 32, 67, 79, 78, 84, 69,
/* 0x1660 */ 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32,
/* 0x1670 */ 55, 32, 78, 82, 86, 50, 68, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x1680 */ 48, 48, 48, 48, 48, 49, 49, 99, 32, 32, 48, 48, 48, 48, 48, 48,
/* 0x1690 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48,
/* 0x16a0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48,
/* 0x16b0 */ 48, 48, 48, 50, 52, 52, 32, 32, 50, 42, 42, 50, 32, 32, 67, 79,
/* 0x16c0 */ 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89,
/* 0x16d0 */ 10, 32, 32, 56, 32, 78, 82, 86, 50, 66, 32, 32, 32, 32, 32, 32,
/* 0x16e0 */ 32, 32, 32, 48, 48, 48, 48, 48, 48,102, 48, 32, 32, 48, 48, 48,
/* 0x16f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48,
/* 0x1700 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x1710 */ 32, 48, 48, 48, 48, 48, 51, 54, 48, 32, 32, 50, 42, 42, 50, 32,
/* 0x1720 */ 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79,
/* 0x1730 */ 78, 76, 89, 10, 32, 32, 57, 32, 76, 90, 77, 65, 95, 69, 76, 70,
/* 0x1740 */ 48, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48,100, 48, 32, 32,
/* 0x1750 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1760 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1770 */ 48, 48, 32, 32, 48, 48, 48, 48, 48, 52, 53, 48, 32, 32, 50, 42,
/* 0x1780 */ 42, 50, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69,
/* 0x1790 */ 76, 79, 67, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 49,
/* 0x17a0 */ 48, 32, 76, 90, 77, 65, 95, 68, 69, 67, 50, 48, 32, 32, 32, 32,
/* 0x17b0 */ 48, 48, 48, 48, 48, 57, 51, 48, 32, 32, 48, 48, 48, 48, 48, 48,
/* 0x17c0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48,
/* 0x17d0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48,
/* 0x17e0 */ 48, 48, 48, 53, 50, 48, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79,
/* 0x17f0 */ 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89,
/* 0x1800 */ 10, 32, 49, 49, 32, 76, 90, 77, 65, 95, 68, 69, 67, 49, 48, 32,
/* 0x1810 */ 32, 32, 32, 48, 48, 48, 48, 48, 52, 57, 99, 32, 32, 48, 48, 48,
/* 0x1820 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48,
/* 0x1830 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x1840 */ 32, 48, 48, 48, 48, 48,101, 53, 48, 32, 32, 50, 42, 42, 50, 32,
/* 0x1850 */ 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79,
/* 0x1860 */ 78, 76, 89, 10, 32, 49, 50, 32, 76, 90, 77, 65, 95, 68, 69, 67,
/* 0x1870 */ 51, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32,
/* 0x1880 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1890 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x18a0 */ 48, 48, 32, 32, 48, 48, 48, 48, 49, 50,101, 99, 32, 32, 50, 42,
/* 0x18b0 */ 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69,
/* 0x18c0 */ 65, 68, 79, 78, 76, 89, 10, 32, 49, 51, 32, 69, 76, 70, 77, 65,
/* 0x18d0 */ 73, 78, 89, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48, 51,
/* 0x18e0 */ 101, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x18f0 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1900 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 50,101, 99, 32,
/* 0x1910 */ 32, 50, 42, 42, 50, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44,
/* 0x1920 */ 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 49, 52, 32, 69, 76,
/* 0x1930 */ 70, 77, 65, 73, 78, 90, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48,
/* 0x1940 */ 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1950 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1960 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 51,
/* 0x1970 */ 50, 97, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78,
/* 0x1980 */ 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 83, 89, 77,
/* 0x1990 */ 66, 79, 76, 32, 84, 65, 66, 76, 69, 58, 10, 48, 48, 48, 48, 48,
/* 0x19a0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32,
/* 0x19b0 */ 32,100, 32, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 9, 48,
/* 0x19c0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x19d0 */ 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 10, 48, 48, 48, 48, 48,
/* 0x19e0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32,
/* 0x19f0 */ 32,100, 32, 32, 69, 76, 70, 77, 65, 73, 78, 89, 9, 48, 48, 48,
/* 0x1a00 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 69, 76,
/* 0x1a10 */ 70, 77, 65, 73, 78, 89, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1a20 */ 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32,
/* 0x1a30 */ 69, 76, 70, 77, 65, 73, 78, 88, 9, 48, 48, 48, 48, 48, 48, 48,
/* 0x1a40 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 69, 76, 70, 77, 65, 73,
/* 0x1a50 */ 78, 88, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1a60 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 85, 78, 77,
/* 0x1a70 */ 80, 48, 48, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1a80 */ 48, 48, 48, 48, 48, 32, 76, 85, 78, 77, 80, 48, 48, 48, 10, 48,
/* 0x1a90 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x1aa0 */ 108, 32, 32, 32, 32,100, 32, 32, 76, 85, 78, 77, 80, 48, 48, 49,
/* 0x1ab0 */ 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ac0 */ 48, 32, 76, 85, 78, 77, 80, 48, 48, 49, 10, 48, 48, 48, 48, 48,
/* 0x1ad0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32,
/* 0x1ae0 */ 32,100, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88,117, 9, 48, 48,
/* 0x1af0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 69,
/* 0x1b00 */ 76, 70, 77, 65, 73, 78, 88,117, 10, 48, 48, 48, 48, 48, 48, 48,
/* 0x1b10 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100,
/* 0x1b20 */ 32, 32, 78, 82, 86, 95, 72, 69, 65, 68, 9, 48, 48, 48, 48, 48,
/* 0x1b30 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 95,
/* 0x1b40 */ 72, 69, 65, 68, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1b50 */ 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82,
/* 0x1b60 */ 86, 95, 84, 65, 73, 76, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1b70 */ 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 95, 84, 65, 73, 76,
/* 0x1b80 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1b90 */ 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 69, 9,
/* 0x1ba0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1bb0 */ 32, 78, 82, 86, 50, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1bc0 */ 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32,
/* 0x1bd0 */ 78, 82, 86, 50, 68, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1be0 */ 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 50, 68, 10, 48, 48, 48,
/* 0x1bf0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32,
/* 0x1c00 */ 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 66, 9, 48, 48, 48, 48,
/* 0x1c10 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86,
/* 0x1c20 */ 50, 66, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1c30 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65,
/* 0x1c40 */ 95, 69, 76, 70, 48, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1c50 */ 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 69, 76, 70,
/* 0x1c60 */ 48, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1c70 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65,
/* 0x1c80 */ 95, 68, 69, 67, 50, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1c90 */ 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67,
/* 0x1ca0 */ 50, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1cb0 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65,
/* 0x1cc0 */ 95, 68, 69, 67, 49, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1cd0 */ 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67,
/* 0x1ce0 */ 49, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1cf0 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77,
/* 0x1d00 */ 65, 73, 78, 90, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1d10 */ 48, 48, 48, 48, 48, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48,
/* 0x1d20 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x1d30 */ 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 9, 48, 48,
/* 0x1d40 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76,
/* 0x1d50 */ 69, 78, 70, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1d60 */ 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32, 32, 32, 42, 85, 78,
/* 0x1d70 */ 68, 42, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1d80 */ 48, 48, 48, 32, 67, 80, 82, 48, 10, 48, 48, 48, 48, 48, 48, 48,
/* 0x1d90 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 32, 32, 32, 32, 32,
/* 0x1da0 */ 32, 32, 42, 85, 78, 68, 42, 9, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1db0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 77, 70, 76, 71, 10, 48, 48,
/* 0x1dc0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32,
/* 0x1dd0 */ 32, 32, 32, 32, 32, 32, 32, 42, 85, 78, 68, 42, 9, 48, 48, 48,
/* 0x1de0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 65, 68,
/* 0x1df0 */ 82, 77, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1e00 */ 48, 49, 52, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77,
/* 0x1e10 */ 65, 73, 78, 88, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1e20 */ 48, 48, 48, 48, 48, 32, 95,115,116, 97,114,116, 10, 48, 48, 48,
/* 0x1e30 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32,
/* 0x1e40 */ 32, 32, 32, 32, 70, 32, 78, 82, 86, 50, 69, 9, 48, 48, 48, 48,
/* 0x1e50 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 50, 56, 32,117, 99,108,
/* 0x1e60 */ 95,110,114,118, 50,101, 95,100,101, 99,111,109,112,114,101,115,
/* 0x1e70 */ 115, 95, 51, 50, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1e80 */ 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 70, 32, 78, 82,
/* 0x1e90 */ 86, 50, 68, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ea0 */ 48, 49, 49, 99, 32,117, 99,108, 95,110,114,118, 50,100, 95,100,
/* 0x1eb0 */ 101, 99,111,109,112,114,101,115,115, 95, 51, 50, 10, 48, 48, 48,
/* 0x1ec0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32,
/* 0x1ed0 */ 32, 32, 32, 32, 70, 32, 78, 82, 86, 50, 66, 9, 48, 48, 48, 48,
/* 0x1ee0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,102, 48, 32,117, 99,108,
/* 0x1ef0 */ 95,110,114,118, 50, 98, 95,100,101, 99,111,109,112,114,101,115,
/* 0x1f00 */ 115, 95, 51, 50, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1f10 */ 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 76, 90,
/* 0x1f20 */ 77, 65, 95, 68, 69, 67, 49, 48, 9, 48, 48, 48, 48, 48, 48, 48,
/* 0x1f30 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 76,122,109, 97, 68,101,
/* 0x1f40 */ 99,111,100,101, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1f50 */ 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76,
/* 0x1f60 */ 70, 77, 65, 73, 78, 89, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1f70 */ 48, 48, 48, 48, 48, 48, 48, 32,101,110,100, 95,100,101, 99,111,
/* 0x1f80 */ 109,112,114,101,115,115, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1f90 */ 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32, 32, 32,
/* 0x1fa0 */ 69, 76, 70, 77, 65, 73, 78, 90, 9, 48, 48, 48, 48, 48, 48, 48,
/* 0x1fb0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 99,112,114, 48, 10, 10,
/* 0x1fc0 */ 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82,
/* 0x1fd0 */ 68, 83, 32, 70, 79, 82, 32, 91, 69, 76, 70, 77, 65, 73, 78, 88,
/* 0x1fe0 */ 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32,
/* 0x1ff0 */ 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x2000 */ 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48,
/* 0x2010 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 82, 95, 65,
/* 0x2020 */ 65, 82, 67, 72, 54, 52, 95, 65, 66, 83, 51, 50, 32, 32, 32, 76,
/* 0x2030 */ 69, 78, 70, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2040 */ 48, 48, 48, 52, 32, 82, 95, 65, 65, 82, 67, 72, 54, 52, 95, 65,
/* 0x2050 */ 66, 83, 51, 50, 32, 32, 32, 67, 80, 82, 48, 10, 48, 48, 48, 48,
/* 0x2060 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 56, 32, 82, 95, 65,
/* 0x2070 */ 65, 82, 67, 72, 54, 52, 95, 65, 66, 83, 51, 50, 32, 32, 32, 77,
/* 0x2080 */ 70, 76, 71, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2090 */ 48, 48, 48, 99, 32, 82, 95, 65, 65, 82, 67, 72, 54, 52, 95, 65,
/* 0x20a0 */ 66, 83, 54, 52, 32, 32, 32, 65, 68, 82, 77, 10, 10, 82, 69, 76,
/* 0x20b0 */ 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32,
/* 0x20c0 */ 70, 79, 82, 32, 91, 69, 76, 70, 77, 65, 73, 78, 88,117, 93, 58,
/* 0x20d0 */ 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x20e0 */ 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x20f0 */ 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48,
/* 0x2100 */ 48, 48, 48, 48, 48, 48, 48, 48, 50, 52, 32, 82, 95, 65, 65, 82,
/* 0x2110 */ 67, 72, 54, 52, 95, 67, 79, 78, 68, 66, 82, 49, 57, 32, 32, 69,
/* 0x2120 */ 76, 70, 77, 65, 73, 78, 89, 10, 10, 82, 69, 76, 79, 67, 65, 84,
/* 0x2130 */ 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32,
/* 0x2140 */ 91, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 93, 58, 10, 79, 70,
/* 0x2150 */ 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84,
/* 0x2160 */ 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x2170 */ 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x2180 */ 48, 48, 48, 48, 48, 48, 52, 32, 82, 95, 65, 65, 82, 67, 72, 54,
/* 0x2190 */ 52, 95, 67, 79, 78, 68, 66, 82, 49, 57, 32, 32, 76, 90, 77, 65,
/* 0x21a0 */ 95, 68, 69, 67, 51, 48, 10
};
+187
View File
@@ -0,0 +1,187 @@
/* arm64-linux.elf-fold.h
created from arm64-linux.elf-fold.bin, 2356 (0x934) bytes
This file is part of the UPX executable compressor.
Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
Copyright (C) 1996-2017 Laszlo Molnar
Copyright (C) 2000-2017 John F. Reiser
All Rights Reserved.
UPX and the UCL library are free software; you can redistribute them
and/or modify them under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING.
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> <ezerotven+github@gmail.com>
John F. Reiser
<jreiser@users.sourceforge.net>
*/
#define STUB_ARM64_LINUX_ELF_FOLD_SIZE 2356
#define STUB_ARM64_LINUX_ELF_FOLD_ADLER32 0xde69440e
#define STUB_ARM64_LINUX_ELF_FOLD_CRC32 0xf9178fcb
unsigned char stub_arm64_linux_elf_fold[2356] = {
/* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0010 */ 2, 0,183, 0, 1, 0, 0, 0,188, 0, 16, 0, 0, 0, 0, 0,
/* 0x0020 */ 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0030 */ 0, 0, 0, 0, 64, 0, 56, 0, 2, 0, 0, 0, 0, 0, 0, 0,
/* 0x0040 */ 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0050 */ 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0,
/* 0x0060 */ 52, 9, 0, 0, 0, 0, 0, 0, 52, 9, 0, 0, 0, 0, 0, 0,
/* 0x0070 */ 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
/* 0x0080 */ 52, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0090 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x00a0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
/* 0x00b0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,229, 35, 65,169,
/* 0x00c0 */ 227, 19,194,168,231, 3, 64,249,224, 3, 0,145,225, 67, 0,145,
/* 0x00d0 */ 33, 12, 7,139, 34,132, 64,248,226,255,255,181, 34, 4, 65,248,
/* 0x00e0 */ 226,255,255,181, 32, 4, 64,209, 0, 16, 0,209, 33, 0, 0,203,
/* 0x00f0 */ 0,252, 76,211, 0, 4, 0,209, 6,204,116,211,192, 0, 1,203,
/* 0x0100 */ 0, 32, 0,209, 0,236,124,146,225, 35, 0,145, 31, 0, 0,145,
/* 0x0110 */ 227, 19,190,169,229, 11, 0,249, 7,132, 0,248, 34,132, 64,248,
/* 0x0120 */ 2,132, 0,248,194,255,255,181, 34,132, 64,248, 2,132, 0,248,
/* 0x0130 */ 194,255,255,181, 4, 32, 0,209, 2,132, 0,248,231, 3, 0,170,
/* 0x0140 */ 34, 12,193,168, 2, 12,129,168,194,255,255,181,224, 11, 0,249,
/* 0x0150 */ 193, 4, 64,145,129, 0, 0,249, 34, 4, 0, 24, 34, 68, 0,184,
/* 0x0160 */ 226,255,129, 82,224, 3, 0, 16, 91, 0, 0,148,160, 3, 0, 16,
/* 0x0170 */ 1, 0,128, 82, 81, 0, 0,148,228, 3, 0, 42,224, 3, 6,170,
/* 0x0180 */ 5, 0,128,210, 67, 2,128, 82, 34, 0,128, 82, 1, 0,130,210,
/* 0x0190 */ 68, 0, 0,148,224, 3, 4, 42, 47, 0, 0,148,230, 99, 0,145,
/* 0x01a0 */ 255, 3, 40,209,101, 2, 0, 16,228, 3, 15,170,227, 3, 7,170,
/* 0x01b0 */ 226, 3, 0,145,225, 3, 9, 42,224, 3, 10,170,130, 1, 0,148,
/* 0x01c0 */ 255, 3, 40,145,254, 3, 0,170,226, 15, 65,169,224, 7,194,168,
/* 0x01d0 */ 67,128, 95,248,232, 26,128, 82, 96, 0, 31,214, 32, 32, 32, 61,
/* 0x01e0 */ 47,112,114,111, 99, 47,115,101,108,102, 47,101,120,101, 0, 0,
/* 0x01f0 */ 99, 28, 0, 18,127, 72, 1,113,129, 1, 0, 84, 33,252, 66,211,
/* 0x0200 */ 65, 1, 0,180, 33, 4, 0,209, 2,120, 97,184, 67,120, 26, 83,
/* 0x0210 */ 127, 20, 0,113,129, 0, 0, 84, 67, 0, 1, 75, 98,100, 0, 51,
/* 0x0220 */ 2,120, 33,184, 1,255,255,181,192, 3, 95,214, 0, 0, 32,212,
/* 0x0230 */ 192, 3, 95,214,200, 11,128, 82, 1, 0, 0,212,232, 7,128, 82,
/* 0x0240 */ 1, 0, 0,212,192, 3, 95,214, 8, 8,128, 82, 1, 0, 0,212,
/* 0x0250 */ 192, 3, 95,214, 40, 7,128, 82, 1, 0, 0,212,192, 3, 95,214,
/* 0x0260 */ 168, 21,128, 82, 1, 0, 0,212,192, 3, 95,214,200, 26,128, 82,
/* 0x0270 */ 1, 0, 0,212,192, 3, 95,214,232, 26,128, 82, 1, 0, 0,212,
/* 0x0280 */ 192, 3, 95,214, 72, 28,128, 82, 1, 0, 0,212,192, 3, 95,214,
/* 0x0290 */ 70,241,255, 24, 5, 0,128,210, 4, 0,128,146, 99, 0, 6, 42,
/* 0x02a0 */ 200, 27,128, 82, 1, 0, 0,212,192, 3, 95,214, 1, 0,128,210,
/* 0x02b0 */ 104, 4,128, 82, 2, 0, 0, 20, 8, 7,128, 82,227, 3, 2,170,
/* 0x02c0 */ 226, 3, 1,170,225, 3, 0,170, 96, 12,128,146, 1, 0, 0,212,
/* 0x02d0 */ 192, 3, 95,214,200, 9,128, 82,227, 3, 2,170,226, 3, 1,170,
/* 0x02e0 */ 225, 3, 0,170, 96, 12,128,146, 1, 0, 0,212, 31, 4, 64,177,
/* 0x02f0 */ 98, 0, 0, 84, 3, 0,128, 82, 67,104, 32, 56,192, 3, 95,214,
/* 0x0300 */ 0, 0, 64,212, 2, 0,128, 82, 8, 0,128, 82, 1, 0, 0,212,
/* 0x0310 */ 192, 3, 95,214,128, 1, 0,180, 3, 0, 64,249,228, 3, 1, 42,
/* 0x0320 */ 127, 0, 4,235, 97, 0, 0, 84, 4, 8, 0,169,192, 3, 95,214,
/* 0x0330 */ 63, 0, 31,107, 96, 24, 65,250,128,255,255, 84, 0, 64, 0,145,
/* 0x0340 */ 246,255,255, 23,192, 3, 95,214, 3, 16, 64,169,127, 0, 2,235,
/* 0x0350 */ 99, 0, 0, 84, 3, 0,128,210, 5, 0, 0, 20,253,123,191,169,
/* 0x0360 */ 224, 15,128, 82,253, 3, 0,145,179,255,255,151, 95, 0, 3,235,
/* 0x0370 */ 160, 0, 0, 84,133,104, 99, 56, 37,104, 35, 56, 99, 4, 0,145,
/* 0x0380 */ 251,255,255, 23, 1, 4, 64,249, 33, 0, 2,139, 1, 4, 0,249,
/* 0x0390 */ 1, 0, 64,249, 34, 0, 2,203, 2, 0, 0,249,192, 3, 95,214,
/* 0x03a0 */ 253,123,187,169,253, 3, 0,145,243, 83, 1,169,245, 91, 2,169,
/* 0x03b0 */ 244, 3, 0,170,243, 3, 1,170,246, 3, 2,170,245, 3, 3,170,
/* 0x03c0 */ 96, 2, 64,249,192, 7, 0,180,161, 3, 1,145,224, 3, 20,170,
/* 0x03d0 */ 130, 1,128,210,221,255,255,151,160, 7, 72, 41, 0, 1, 0, 53,
/* 0x03e0 */ 160, 10,138, 82, 0, 43,164,114, 63, 0, 0,107,225, 0, 0, 84,
/* 0x03f0 */ 128, 2, 64,249, 64, 6, 0,180, 4, 0, 0, 20, 31, 0, 1,107,
/* 0x0400 */ 36, 32, 95,122, 97, 0, 0, 84,224, 15,128, 82,138,255,255,151,
/* 0x0410 */ 98, 2, 64,249, 95, 64, 32,235,131,255,255, 84, 31, 0, 1,107,
/* 0x0420 */ 169, 3, 0, 84,160, 63, 0,185,163,243, 0,145,164, 35, 65, 57,
/* 0x0430 */ 98, 6, 64,249,128, 6, 64,249,192, 2, 63,214, 96,254,255, 53,
/* 0x0440 */ 160,135, 71, 41, 63, 0, 0,107, 1,254,255, 84,163, 39, 65, 57,
/* 0x0450 */ 191, 2, 31,235,100, 16, 95,122, 32, 1, 0, 84, 63, 0, 8,113,
/* 0x0460 */ 136, 0, 0, 84, 96, 2, 64,249, 31, 64, 33,235,129, 0, 0, 84,
/* 0x0470 */ 162, 43, 65, 57, 96, 6, 64,249,160, 2, 63,214,128, 6, 64,169,
/* 0x0480 */ 162, 71, 64,185, 33, 0, 2,139, 0, 0, 2,203,128, 6, 0,169,
/* 0x0490 */ 5, 0, 0, 20,226, 3, 1, 42, 97, 6, 64,249,224, 3, 20,170,
/* 0x04a0 */ 170,255,255,151, 96, 6, 64,169,162, 67, 64,185, 33, 0, 2,139,
/* 0x04b0 */ 0, 0, 2,203, 96, 6, 0,169,194,255,255, 23,243, 83, 65,169,
/* 0x04c0 */ 245, 91, 66,169,253,123,197,168,192, 3, 95,214,253,123,180,169,
/* 0x04d0 */ 253, 3, 0,145,247, 99, 3,169,247, 3, 0,170,166, 75, 0,249,
/* 0x04e0 */ 6, 16, 64,249,249,107, 4,169, 25, 0, 6,139, 0, 32, 64,121,
/* 0x04f0 */ 243, 83, 1,169, 31, 12, 0,113,224,114, 64,121,244, 3, 2, 42,
/* 0x0500 */ 2, 7,128, 82,251,115, 5,169, 2,124,162,155,252, 3, 3,170,
/* 0x0510 */ 3, 2,128, 82, 99, 16,159, 26, 19, 0,128,146,245, 91, 2,169,
/* 0x0520 */ 165,147, 6,169,246, 3, 1,170, 99,136, 0, 17, 1, 0,128,210,
/* 0x0530 */ 34, 3, 2,139,224, 3, 25,170, 31, 0, 2,235,160, 1, 0, 84,
/* 0x0540 */ 4, 0, 64,185,159, 4, 0,113, 1, 1, 0, 84, 5, 8, 64,249,
/* 0x0550 */ 4, 20, 64,249,127, 2, 5,235,164, 0, 4,139,115,146,133,154,
/* 0x0560 */ 63, 0, 4,235, 33, 32,132,154, 0,224, 0,145,243,255,255, 23,
/* 0x0570 */ 115,206,116,146, 33,252, 63,145, 33, 0, 19,203,224, 3, 19,170,
/* 0x0580 */ 33,204,116,146, 5, 0,128,210, 4, 0,128, 18, 2, 0,128, 82,
/* 0x0590 */ 26, 0,128, 82, 67,255,255,151, 19, 0, 19,203, 96, 14, 0,145,
/* 0x05a0 */ 223, 2, 31,235,160, 67, 0,249, 64, 0,128, 82, 0, 16,159, 26,
/* 0x05b0 */ 160,143, 0,185,128, 2,159, 90, 65, 6,128, 82,160,139, 0,185,
/* 0x05c0 */ 64, 2,128, 82, 32, 16,128, 26,160,127, 0,185,224,114, 64,121,
/* 0x05d0 */ 95, 3, 0,107,170, 12, 0, 84, 32, 3, 64,185, 54, 1, 0,180,
/* 0x05e0 */ 31, 24, 0,113,225, 0, 0, 84, 34, 11, 64,249, 97, 0,128, 82,
/* 0x05f0 */ 224, 3, 28,170, 98, 2, 2,139, 71,255,255,151, 88, 0, 0, 20,
/* 0x0600 */ 31, 4, 0,113,193, 10, 0, 84, 56, 7, 64,185, 1, 72,140, 82,
/* 0x0610 */ 33,106,174,114, 53, 19, 64,249, 24, 11, 30, 83,163,127, 64,185,
/* 0x0620 */ 32, 36,216, 26,160,163, 0,185, 37,211, 64,169, 27, 8, 0, 18,
/* 0x0630 */ 32, 23, 64,249,116, 2, 20,139,164,139, 64,185,128, 2, 0,139,
/* 0x0640 */ 160, 79, 0,249,128, 46, 64,146,181, 83, 11,169,165, 0, 0,203,
/* 0x0650 */ 181, 2, 0,139,160,143, 64,185,148,206,116,146,225, 3, 21,170,
/* 0x0660 */ 2, 0, 27, 42,224, 3, 20,170, 14,255,255,151,159, 2, 0,235,
/* 0x0670 */ 96, 0, 0, 84,224, 15,128, 82,239,254,255,151,182, 0, 0,180,
/* 0x0680 */ 163,139, 70,169,161,195, 2,145,224, 3, 22,170, 69,255,255,151,
/* 0x0690 */ 160, 83, 64,249,227, 3, 21,203,120, 44, 64,146, 96, 0, 8, 55,
/* 0x06a0 */ 86, 1, 0,181, 32, 0, 0, 20,216,255,255,180,129, 2, 21,139,
/* 0x06b0 */ 0, 0,128,210, 63,104, 32, 56, 0, 4, 0,145, 31, 0, 24,235,
/* 0x06c0 */ 161,255,255, 84,247,255,255, 23, 32, 3, 64,249,225, 3, 0,178,
/* 0x06d0 */ 0,128, 64,146, 31, 0, 1,235,193, 1, 0, 84, 32, 23, 64,249,
/* 0x06e0 */ 34, 11, 64,249,161, 67, 64,249, 2, 0, 2,139, 66, 0, 1,139,
/* 0x06f0 */ 33, 19, 64,249, 66,244,126,146, 31, 0, 1,235,161, 0, 0, 84,
/* 0x0700 */ 224, 3, 2,203, 0, 44, 64,146, 31, 28, 0,241,104, 3, 0, 84,
/* 0x0710 */ 226, 3, 27, 42,225, 3, 21,170,224, 3, 20,170,218,254,255,151,
/* 0x0720 */ 160,250,255, 53,181, 2, 24,139,160, 79, 64,249,148, 2, 21,139,
/* 0x0730 */ 31, 0, 20,235, 73, 1, 0, 84, 1, 0, 20,203, 5, 0,128,210,
/* 0x0740 */ 4, 0,128, 18, 67, 6,128, 82,226, 3, 27, 42,224, 3, 20,170,
/* 0x0750 */ 212,254,255,151,159, 2, 0,235,225,248,255, 84, 57,227, 0,145,
/* 0x0760 */ 90, 7, 0, 17,154,255,255, 23,160, 75, 64,249,160, 1, 0,180,
/* 0x0770 */ 19, 0, 0,249, 11, 0, 0, 20, 32, 0,128, 82, 1, 0,128, 82,
/* 0x0780 */ 0,128,186,114, 64, 0, 0,185, 0,120,128, 82,224,203,186,114,
/* 0x0790 */ 64, 4, 0,185,224, 3, 28,170,223,254,255,151,221,255,255, 23,
/* 0x07a0 */ 224, 14, 64,249,245, 91, 66,169,249,107, 68,169,251,115, 69,169,
/* 0x07b0 */ 96, 2, 0,139,243, 83, 65,169,247, 99, 67,169,253,123,204,168,
/* 0x07c0 */ 192, 3, 95,214,253,123,183,169,253, 3, 0,145,243, 83, 1,169,
/* 0x07d0 */ 243, 3, 2,170, 84, 0, 1,145,162,135, 6,169, 2, 0, 64,185,
/* 0x07e0 */ 245, 91, 2,169,160,135, 7,169,245, 3, 3,170,160, 71, 0,249,
/* 0x07f0 */ 3, 0,128,210,161,131, 1,145,160, 3, 2,145,162, 51, 0,249,
/* 0x0800 */ 226, 3, 4,170,246, 3, 4,170,247, 99, 3,169,249, 35, 0,249,
/* 0x0810 */ 247, 3, 5,170,249, 3, 6,170,226,254,255,151,130, 10, 64,249,
/* 0x0820 */ 97, 0,128, 82,224, 3, 21,170, 66, 0, 1,145,186,254,255,151,
/* 0x0830 */ 98,114, 64,121,161, 0,128, 82,224, 3, 21,170,182,254,255,151,
/* 0x0840 */ 229, 3, 23,170,228, 3, 22,170,230, 3, 25,170,227, 3, 21,170,
/* 0x0850 */ 2, 0,128, 82,161,195, 1,145,224, 3, 19,170, 23, 0,128, 82,
/* 0x0860 */ 27,255,255,151,226, 3, 0,170,246, 3, 0,170, 33, 1,128, 82,
/* 0x0870 */ 224, 3, 21,170,168,254,255,151, 96,114, 64,121,255, 2, 0,107,
/* 0x0880 */ 202, 4, 0, 84,128, 2, 64,185, 31, 12, 0,113, 1, 4, 0, 84,
/* 0x0890 */ 128, 10, 64,249, 2, 0,128, 82, 35, 3, 64,249, 1, 0,128, 82,
/* 0x08a0 */ 96, 0, 0,139,133,254,255,151,248, 3, 0, 42, 96, 0,248, 54,
/* 0x08b0 */ 224, 15,128, 82, 96,254,255,151, 2,128,128,210,225, 3, 19,170,
/* 0x08c0 */ 95,254,255,151, 31, 0, 16,241, 65,255,255, 84,166, 99, 1,145,
/* 0x08d0 */ 5, 0,128,210, 4, 0,128,210, 3, 0,128,210,226, 3, 24, 42,
/* 0x08e0 */ 1, 0,128,210,224, 3, 19,170,191, 47, 0,249,248,254,255,151,
/* 0x08f0 */ 246, 3, 0,170,162, 47, 64,249,224, 3, 21,170,225, 0,128, 82,
/* 0x0900 */ 133,254,255,151,224, 3, 24, 42, 83,254,255,151,148,226, 0,145,
/* 0x0910 */ 247, 6, 0, 17,217,255,255, 23,224, 3, 22,170,249, 35, 64,249,
/* 0x0920 */ 243, 83, 65,169,245, 91, 66,169,247, 99, 67,169,253,123,201,168,
/* 0x0930 */ 192, 3, 95,214
};
+551
View File
@@ -0,0 +1,551 @@
/* arm64-linux.shlib-init.h
created from arm64-linux.shlib-init.bin, 8187 (0x1ffb) bytes
This file is part of the UPX executable compressor.
Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
Copyright (C) 1996-2017 Laszlo Molnar
Copyright (C) 2000-2017 John F. Reiser
All Rights Reserved.
UPX and the UCL library are free software; you can redistribute them
and/or modify them under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING.
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> <ezerotven+github@gmail.com>
John F. Reiser
<jreiser@users.sourceforge.net>
*/
#define STUB_ARM64_LINUX_SHLIB_INIT_SIZE 8187
#define STUB_ARM64_LINUX_SHLIB_INIT_ADLER32 0x5a8b7b3c
#define STUB_ARM64_LINUX_SHLIB_INIT_CRC32 0x3a7d7f09
unsigned char stub_arm64_linux_shlib_init[8187] = {
/* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0010 */ 1, 0,183, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
/* 0x0020 */ 0, 0, 0, 0, 0, 0, 0, 0, 88, 24, 0, 0, 0, 0, 0, 0,
/* 0x0030 */ 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0,
/* 0x0040 */ 0, 0, 32,212,253,123,190,169,224, 11, 0,249,227, 19,190,169,
/* 0x0050 */ 230, 31, 1,169,224, 7,190,169,226, 11, 0,249,253, 3, 0,145,
/* 0x0060 */ 0, 0, 0,148,254, 15, 31,248,226, 15,191,169, 7, 64, 33,139,
/* 0x0070 */ 5, 0,128, 18, 4, 0,176, 82, 24, 0, 0, 20,227, 19,193,168,
/* 0x0080 */ 0, 0, 7,203, 66, 0, 3,203,130, 0, 0,185,228, 3, 0,170,
/* 0x0090 */ 224, 3, 3,170, 97, 0, 2,139, 32,123, 11,213, 32,117, 11,213,
/* 0x00a0 */ 0, 0, 1,145, 31, 0, 1,235,131,255,255, 84,224, 3, 4,170,
/* 0x00b0 */ 254, 7, 65,248,192, 3, 95,214,132, 0, 4, 43, 68, 0, 0, 52,
/* 0x00c0 */ 192, 3, 95,214, 4, 68, 64,184,132, 0, 4, 58,192, 3, 95,214,
/* 0x00d0 */ 3, 20, 64, 56, 67, 20, 0, 56,248,255,255,151,162,255,255, 84,
/* 0x00e0 */ 33, 0,128, 82, 4, 0, 0, 20, 33, 4, 0, 81,243,255,255,151,
/* 0x00f0 */ 33, 0, 1, 26,241,255,255,151, 33, 0, 1, 26,239,255,255,151,
/* 0x0100 */ 67,255,255, 84, 35, 12, 0,113, 1, 0,128, 82, 35, 1, 0, 84,
/* 0x0110 */ 5, 20, 64, 56,165, 32, 3, 42,229, 3, 37, 42, 5,251,255, 52,
/* 0x0120 */ 191, 0, 0,114,165,124, 1, 19,161, 1, 0, 84, 3, 0, 0, 20,
/* 0x0130 */ 226,255,255,151, 66, 1, 0, 84, 33, 0,128, 82,223,255,255,151,
/* 0x0140 */ 226, 0, 0, 84,221,255,255,151, 33, 0, 1, 26,219,255,255,151,
/* 0x0150 */ 163,255,255, 84, 33, 16, 0, 17, 4, 0, 0, 20,215,255,255,151,
/* 0x0160 */ 33, 0, 1, 26, 33, 8, 0, 17,191, 0, 20, 49, 33, 36,129, 26,
/* 0x0170 */ 67, 64, 33,139, 99,240, 95, 56, 67,200,101, 56, 67, 20, 0, 56,
/* 0x0180 */ 33, 4, 0,113,161,255,255, 84,212,255,255, 23,226, 15,190,169,
/* 0x0190 */ 254, 11, 0,249, 7, 64, 33,139, 5, 0,128, 18, 4, 0,176, 82,
/* 0x01a0 */ 24, 0, 0, 20,227, 19,193,168, 0, 0, 7,203, 66, 0, 3,203,
/* 0x01b0 */ 130, 0, 0,185,228, 3, 0,170,224, 3, 3,170, 97, 0, 2,139,
/* 0x01c0 */ 32,123, 11,213, 32,117, 11,213, 0, 0, 1,145, 31, 0, 1,235,
/* 0x01d0 */ 131,255,255, 84,224, 3, 4,170,254, 7, 65,248,192, 3, 95,214,
/* 0x01e0 */ 132, 0, 4, 43, 68, 0, 0, 52,192, 3, 95,214, 4, 68, 64,184,
/* 0x01f0 */ 132, 0, 4, 58,192, 3, 95,214, 3, 20, 64, 56, 67, 20, 0, 56,
/* 0x0200 */ 248,255,255,151,162,255,255, 84, 33, 0,128, 82, 4, 0, 0, 20,
/* 0x0210 */ 33, 4, 0, 81,243,255,255,151, 33, 0, 1, 58,241,255,255,151,
/* 0x0220 */ 33, 0, 1, 58,239,255,255,151, 67,255,255, 84, 35, 12, 0,113,
/* 0x0230 */ 1, 0,128, 82, 35, 1, 0, 84, 5, 20, 64, 56,165, 32, 3, 42,
/* 0x0240 */ 229, 3, 37, 42, 5,251,255, 52,163, 0, 1, 83,165,124, 1, 83,
/* 0x0250 */ 99, 0, 3, 43, 2, 0, 0, 20,226,255,255,151, 33, 0, 1, 58,
/* 0x0260 */ 224,255,255,151, 33, 0, 1, 58,225, 0, 0, 84, 33, 0,128, 82,
/* 0x0270 */ 220,255,255,151, 33, 0, 1, 58,218,255,255,151,163,255,255, 84,
/* 0x0280 */ 33, 8, 0, 17, 33, 4, 0, 17,191, 0, 20, 49, 33, 52,129, 26,
/* 0x0290 */ 67, 0, 64, 57, 67,200,101, 56, 67, 20, 0, 56, 33, 4, 0,113,
/* 0x02a0 */ 161,255,255, 84,215,255,255, 23, 1, 64, 33,139,225, 11,190,169,
/* 0x02b0 */ 227,123, 1,169, 5, 0,128, 18, 4, 0,176, 82, 31, 0, 0, 20,
/* 0x02c0 */ 228,123, 65,169,225, 15,194,168, 0, 0, 1,203, 66, 0, 3,203,
/* 0x02d0 */ 130, 0, 0,185,228, 3, 0,170,224, 3, 3,170, 97, 0, 2,139,
/* 0x02e0 */ 32,123, 11,213, 32,117, 11,213, 0, 0, 1,145, 31, 0, 1,235,
/* 0x02f0 */ 131,255,255, 84,224, 3, 4,170,192, 3, 95,214,132, 0, 4, 43,
/* 0x0300 */ 68, 0, 0, 52,192, 3, 95,214, 4, 68, 64,184,132, 0, 4, 58,
/* 0x0310 */ 192, 3, 95,214, 33, 0,128, 82,240, 3, 30,170,248,255,255,151,
/* 0x0320 */ 33, 0, 1, 58,246,255,255,151,163,255,255, 84, 0, 2, 31,214,
/* 0x0330 */ 3, 20, 64, 56, 67, 20, 0, 56,241,255,255,151,162,255,255, 84,
/* 0x0340 */ 245,255,255,151, 35, 12, 0,113, 1, 0,128, 82,163, 0, 0, 84,
/* 0x0350 */ 5, 20, 64, 56,165, 32, 3, 42,229, 3, 37, 42, 37,251,255, 52,
/* 0x0360 */ 231,255,255,151, 33, 0, 1, 58,229,255,255,151, 33, 0, 1, 58,
/* 0x0370 */ 97, 0, 0, 84,232,255,255,151, 33, 8, 0, 17,191, 0, 52, 49,
/* 0x0380 */ 33, 36,129, 26, 67,200,101, 56, 33, 4, 0,113, 67, 20, 0, 56,
/* 0x0390 */ 162,255,255, 84,233,255,255, 23,159, 56, 0,113, 1, 0, 0, 84,
/* 0x03a0 */ 1, 64, 33,139, 4, 0,128,210,225, 11,190,169,227,123, 1,169,
/* 0x03b0 */ 228, 19,191,169,224, 3, 0,145,227, 35, 0,145,230, 51, 0,145,
/* 0x03c0 */ 8, 0, 64, 57, 7,192,128, 82, 8,125, 3, 83,231, 32,200, 26,
/* 0x03d0 */ 253, 3, 0,145,231,192, 57, 17,232, 3, 0,145,255, 67, 39,203,
/* 0x03e0 */ 100, 16,129,168,127, 0, 8,235,195,255,255, 84,230, 3, 3,170,
/* 0x03f0 */ 229, 3, 7, 42,228, 3, 2,170, 34, 8, 0, 81,225, 3, 0,170,
/* 0x0400 */ 39, 20, 64, 56,231, 8, 0, 18,231, 11, 0, 57, 39, 20, 64, 56,
/* 0x0410 */ 232,124, 4, 83,232, 7, 0, 57,231, 12, 0, 18,231, 3, 0, 57,
/* 0x0420 */ 224, 3, 0,145, 17, 0, 0,148,191, 3, 0,145,228,123, 65,169,
/* 0x0430 */ 225, 15,194,168, 0, 0, 1,203, 66, 0, 3,203,130, 0, 0,185,
/* 0x0440 */ 228, 3, 0,170,224, 3, 3,170, 97, 0, 2,139, 32,123, 11,213,
/* 0x0450 */ 32,117, 11,213, 0, 0, 1,145, 31, 0, 1,235,131,255,255, 84,
/* 0x0460 */ 224, 3, 4,170,192, 3, 95,214,243, 83,184,169, 39, 0,128, 82,
/* 0x0470 */ 20, 16, 0,145,245, 91, 1,169,247, 99, 2,169,249,107, 3,169,
/* 0x0480 */ 251,115, 4,169,254, 43, 0,249, 8, 4, 64, 57, 26, 8, 64, 57,
/* 0x0490 */ 28, 0, 64, 57,127, 0, 0,185,250, 32,218, 26,223, 0, 0,185,
/* 0x04a0 */ 231, 32,200, 26,231, 4, 0, 81,231,111, 0,185, 8, 4, 64, 57,
/* 0x04b0 */ 7, 96,128, 82, 90, 7, 0, 81, 8, 1, 28, 11,232, 32,200, 26,
/* 0x04c0 */ 8,217, 28, 49,224, 0, 0, 84, 7, 0,128,210, 9,128,128, 82,
/* 0x04d0 */ 137,122, 39,120,231, 4, 0,145, 31, 1, 7,107,168,255,255, 84,
/* 0x04e0 */ 51, 64, 34,139,127, 2, 1,235, 0, 15, 0, 84,235, 3, 1,170,
/* 0x04f0 */ 34, 4, 0,145,103, 85, 64, 56,127, 2, 2,235, 96, 14, 0, 84,
/* 0x0500 */ 72, 20, 64, 56,127, 1, 2,235, 7, 33, 7, 42, 97,255,255, 84,
/* 0x0510 */ 37, 68, 0, 52, 9,176, 41,145, 59, 0,128, 82,233, 63, 0,249,
/* 0x0520 */ 9, 1,128, 82, 41, 1, 28, 75, 10, 0,128, 18,245, 3, 27, 42,
/* 0x0530 */ 25, 0,128, 82, 8, 0,128, 82, 2, 0,128, 82, 16,224,191, 18,
/* 0x0540 */ 17, 0,129, 82,251,107, 0,185,251,115, 0,185,233,119, 0,185,
/* 0x0550 */ 78, 0, 26, 10, 44,111, 28, 83, 95, 1, 16,107,201,125, 64,147,
/* 0x0560 */ 44,193, 44,139,143,249,127,211,232, 0, 0, 84,127, 2, 11,235,
/* 0x0570 */ 192, 10, 0, 84,105, 1, 64, 57, 74, 93, 24, 83,107, 5, 0,145,
/* 0x0580 */ 39, 33, 7, 42,141,122,108,120, 73,125, 11, 83,169,125, 9, 27,
/* 0x0590 */ 255, 0, 9,107,162, 10, 0, 84,234,211, 65, 57, 63, 27, 0,113,
/* 0x05a0 */ 8, 41,202, 26,234,111, 64,185, 79, 0, 10, 10,239, 33,220, 26,
/* 0x05b0 */ 239, 1, 8, 11, 40, 2, 13, 75,234,117, 30, 83, 79, 1, 15, 75,
/* 0x05c0 */ 173, 21,136, 11,239, 93,120,211,141,122, 44,120,239,217, 28,145,
/* 0x05d0 */ 143, 6, 15,139, 45, 31, 0, 84, 72, 0, 21, 75,146,104,104, 56,
/* 0x05e0 */ 40, 0,128, 82, 7, 0, 0, 20,236,121, 42,120, 8,121, 31, 83,
/* 0x05f0 */ 233, 3, 14, 42,205, 56, 0, 53, 31,253, 3,113,204, 3, 0, 84,
/* 0x0600 */ 82,122, 31, 83, 63, 1, 16,107, 77, 2, 24, 18, 22,121, 31, 83,
/* 0x0610 */ 170,125, 64,147, 74, 1, 4,145, 74,193, 40,139,232, 0, 0, 84,
/* 0x0620 */ 127, 1, 19,235, 41, 93, 24, 83, 0, 5, 0, 84,108, 1, 64, 57,
/* 0x0630 */ 107, 5, 0,145,135, 33, 7, 42,236,121,106,120, 46,125, 11, 83,
/* 0x0640 */ 55, 2, 12, 75,142,125, 14, 27,152, 21, 76, 75,140, 21,151, 11,
/* 0x0650 */ 255, 0, 14,107, 41, 1, 14, 75,131,252,255, 84,248,121, 42,120,
/* 0x0660 */ 200, 6, 0, 17,231, 0, 14, 75,141,252,255, 53, 31,253, 3,113,
/* 0x0670 */ 45, 27, 0, 84, 8, 29, 0, 83,234, 3, 9, 42,136, 72, 34, 56,
/* 0x0680 */ 66, 4, 0, 17, 63, 39, 0,113,140, 49, 0, 84, 57, 15, 0, 81,
/* 0x0690 */ 191, 0, 2,107,232,245,255, 84, 0,224,191, 18, 95, 1, 0,107,
/* 0x06a0 */ 136, 0, 0, 84,127, 2, 11,235, 0, 1, 0, 84,107, 5, 0,145,
/* 0x06b0 */ 97, 1, 1,203, 97, 0, 0,185, 0, 0,128, 82,194, 0, 0,185,
/* 0x06c0 */ 3, 0, 0, 20, 31, 32, 3,213, 32, 0,128, 82,245, 91, 65,169,
/* 0x06d0 */ 247, 99, 66,169,249,107, 67,169,251,115, 68,169,254, 43, 64,249,
/* 0x06e0 */ 243, 83,200,168,192, 3, 95,214, 74, 1, 9, 75,173, 21, 77, 75,
/* 0x06f0 */ 231, 0, 9, 75,141,122, 44,120, 41,127, 64,147, 95, 1, 16,107,
/* 0x0700 */ 41, 1, 3,145, 45,249,127,211,232, 0, 0, 84,127, 1, 19,235,
/* 0x0710 */ 192,253,255, 84,104, 1, 64, 57, 74, 93, 24, 83,107, 5, 0,145,
/* 0x0720 */ 7, 33, 7, 42,140,122,105,120, 72,125, 11, 83,136,125, 8, 27,
/* 0x0730 */ 255, 0, 8,107, 98, 25, 0, 84,234,107, 64,185, 63, 31, 0,113,
/* 0x0740 */ 251,115, 64,185,234,115, 0,185, 42, 2, 12, 75,245,107, 0,185,
/* 0x0750 */ 140, 21,138, 11,140,122, 41,120,105, 0,128, 82,249,179,137, 26,
/* 0x0760 */ 9,160, 25,145, 31, 1, 16,107,232, 0, 0, 84,127, 2, 11,235,
/* 0x0770 */ 192,250,255, 84,106, 1, 64, 57, 8, 93, 24, 83,107, 5, 0,145,
/* 0x0780 */ 71, 33, 7, 42, 44, 1, 64,121, 10,125, 11, 83,138,125, 10, 27,
/* 0x0790 */ 255, 0, 10,107,226, 30, 0, 84,210,113, 29, 83, 40, 2, 12, 75,
/* 0x07a0 */ 22, 0,128, 82,126, 0,128, 82, 82,126, 64,147,140, 21,136, 11,
/* 0x07b0 */ 82, 10, 0,145, 44, 1, 0,121, 50, 5, 18,139,238, 3, 30, 42,
/* 0x07c0 */ 45, 0,128, 82, 6, 0, 0, 20,232, 1, 0,121,206, 5, 0,113,
/* 0x07d0 */ 173,121, 31, 83,234, 3, 9, 42, 32, 3, 0, 84, 95, 1, 16,107,
/* 0x07e0 */ 183,121, 31, 83, 79,198, 45,139,232, 0, 0, 84,127, 2, 11,235,
/* 0x07f0 */ 74, 93, 24, 83,160,246,255, 84,104, 1, 64, 57,107, 5, 0,145,
/* 0x0800 */ 7, 33, 7, 42,232, 1, 64,121, 73,125, 11, 83, 44, 2, 8, 75,
/* 0x0810 */ 9,125, 9, 27, 24, 21, 72, 75, 8, 21,140, 11,255, 0, 9,107,
/* 0x0820 */ 74, 1, 9, 75, 35,253,255, 84,248, 1, 0,121,206, 5, 0,113,
/* 0x0830 */ 231, 0, 9, 75,237, 6, 0, 17, 33,253,255, 84, 40, 0,128, 82,
/* 0x0840 */ 63, 15, 0,113, 30, 33,222, 26,222, 2, 30, 75,205, 3, 13, 11,
/* 0x0850 */ 236, 22, 0, 84,191, 13, 0,113,104, 0,128, 82,181,209,136, 26,
/* 0x0860 */ 207, 0,128, 82,181,102, 26, 83, 46, 0,128, 82,181,126, 64,147,
/* 0x0870 */ 181,194, 6,145,181,250,127,211, 7, 0, 0, 20, 31, 32, 3,213,
/* 0x0880 */ 136,106, 50,120,239, 5, 0,113,206,121, 31, 83,234, 3, 9, 42,
/* 0x0890 */ 32, 3, 0, 84, 95, 1, 16,107,214,121, 31, 83,178,198, 46,139,
/* 0x08a0 */ 232, 0, 0, 84,127, 2, 11,235, 74, 93, 24, 83,224,240,255, 84,
/* 0x08b0 */ 104, 1, 64, 57,107, 5, 0,145, 7, 33, 7, 42,136,106,114,120,
/* 0x08c0 */ 73,125, 11, 83, 44, 2, 8, 75, 9,125, 9, 27, 23, 21, 72, 75,
/* 0x08d0 */ 8, 21,140, 11,255, 0, 9,107, 74, 1, 9, 75, 35,253,255, 84,
/* 0x08e0 */ 151,106, 50,120,239, 5, 0,113,231, 0, 9, 75,206, 6, 0, 17,
/* 0x08f0 */ 33,253,255, 84,213, 1, 1, 81,191, 14, 0,113, 45, 17, 0, 84,
/* 0x0900 */ 191, 54, 0,113,168, 2, 0, 18, 8, 1, 31, 50,169,126, 1, 19,
/* 0x0910 */ 44, 32, 0, 84, 47, 5, 0, 81, 9, 86,128,210, 46,193, 53,203,
/* 0x0920 */ 21, 33,207, 26,206, 65, 53,139,142, 6, 14,139,206, 9, 0,209,
/* 0x0930 */ 50, 0,128, 82,247, 3, 18, 42, 8, 0, 0, 20, 31, 32, 3,213,
/* 0x0940 */ 200, 2, 0,121, 82,122, 31, 83,234, 3, 9, 42,239, 5, 0,113,
/* 0x0950 */ 247,122, 31, 83, 96, 14, 0, 84, 95, 1, 16,107, 88,122, 31, 83,
/* 0x0960 */ 214,197, 50,139,232, 0, 0, 84,127, 2, 11,235, 74, 93, 24, 83,
/* 0x0970 */ 192,234,255, 84,104, 1, 64, 57,107, 5, 0,145, 7, 33, 7, 42,
/* 0x0980 */ 200, 2, 64,121, 73,125, 11, 83, 44, 2, 8, 75, 9,125, 9, 27,
/* 0x0990 */ 30, 21, 72, 75, 8, 21,140, 11,255, 0, 9,107, 74, 1, 9, 75,
/* 0x09a0 */ 3,253,255, 84,222, 2, 0,121,231, 0, 9, 75,181, 2, 23, 42,
/* 0x09b0 */ 18, 7, 0, 17,230,255,255, 23, 40, 0,128, 82, 6, 0, 0, 20,
/* 0x09c0 */ 8,121, 31, 83,234,121, 46,120, 31,253, 3,113,233, 3, 12, 42,
/* 0x09d0 */ 44, 3, 0, 84, 63, 1, 16,107, 18,121, 31, 83, 14,125, 64,147,
/* 0x09e0 */ 232, 0, 0, 84,127, 2, 11,235, 41, 93, 24, 83,224,230,255, 84,
/* 0x09f0 */ 106, 1, 64, 57,107, 5, 0,145, 71, 33, 7, 42,234,121,110,120,
/* 0x0a00 */ 44,125, 11, 83, 45, 2, 10, 75, 76,125, 12, 27, 86, 21, 74, 75,
/* 0x0a10 */ 74, 21,141, 11,255, 0, 12,107, 41, 1, 12, 75, 35,253,255, 84,
/* 0x0a20 */ 72, 6, 0, 17,246,121, 46,120, 31,253, 3,113,231, 0, 12, 75,
/* 0x0a30 */ 45,253,255, 84, 8, 29, 0, 83, 63, 15, 0,113,136, 72, 34, 56,
/* 0x0a40 */ 234, 3, 9, 42, 66, 4, 0, 17,236,225,255, 84,191, 0, 2,107,
/* 0x0a50 */ 25, 0,128, 82,232,215,255, 84, 16,255,255, 23, 31, 32, 3,213,
/* 0x0a60 */ 74, 1, 8, 75,140, 21, 76, 75, 95, 1, 16,107,140,122, 41,120,
/* 0x0a70 */ 231, 0, 8, 75,169, 97, 0,145,232, 0, 0, 84,127, 2, 11,235,
/* 0x0a80 */ 64,226,255, 84,104, 1, 64, 57, 74, 93, 24, 83,107, 5, 0,145,
/* 0x0a90 */ 7, 33, 7, 42,140,106,105,120, 72,125, 11, 83,136,125, 8, 27,
/* 0x0aa0 */ 255, 0, 8,107,226, 9, 0, 84, 42, 2, 12, 75, 31, 1, 16,107,
/* 0x0ab0 */ 239,129, 7,145,140, 21,138, 11,140,106, 41,120,232, 0, 0, 84,
/* 0x0ac0 */ 127, 2, 11,235, 32,224,255, 84,105, 1, 64, 57, 8, 93, 24, 83,
/* 0x0ad0 */ 107, 5, 0,145, 39, 33, 7, 42,137,106,111,120, 10,125, 11, 83,
/* 0x0ae0 */ 42,125, 10, 27,255, 0, 10,107,130, 16, 0, 84, 40, 2, 9, 75,
/* 0x0af0 */ 41, 21,136, 11,137,106, 47,120,130,222,255, 52, 72, 0, 21, 75,
/* 0x0b00 */ 63, 31, 0,113, 41, 1,128, 82,108, 1,128, 82, 57,177,140, 26,
/* 0x0b10 */ 136,104,104, 56,136, 72, 34, 56, 66, 4, 0, 17,221,254,255, 23,
/* 0x0b20 */ 181, 6, 0, 49,160,219,255, 84, 57, 31, 0, 17,191, 2, 2,107,
/* 0x0b30 */ 173, 9, 0, 17,168,220,255, 84,233, 3, 2, 42, 72, 0, 21, 75,
/* 0x0b40 */ 173, 5, 0, 81, 66, 4, 0, 17,191, 1, 31,107,160, 16, 66,122,
/* 0x0b50 */ 136,104,104, 56,136, 72, 41, 56,233, 3, 2, 42, 8,255,255, 84,
/* 0x0b60 */ 191, 0, 2,107,104,207,255, 84,204,254,255, 23, 31, 32, 3,213,
/* 0x0b70 */ 8, 1, 10, 75,140, 21, 76, 75, 31, 1, 16,107, 44, 1, 0,121,
/* 0x0b80 */ 231, 0, 10, 75,232, 0, 0, 84,127, 2, 11,235,224,217,255, 84,
/* 0x0b90 */ 106, 1, 64, 57, 8, 93, 24, 83,107, 5, 0,145, 71, 33, 7, 42,
/* 0x0ba0 */ 44, 5, 64,121, 10,125, 11, 83,138,125, 10, 27,255, 0, 10,107,
/* 0x0bb0 */ 66, 7, 0, 84,210,113, 29, 83, 40, 2, 12, 75, 22, 1,128, 82,
/* 0x0bc0 */ 126, 0,128, 82, 82,126, 64,147,136, 21,136, 11, 82, 10, 2,145,
/* 0x0bd0 */ 40, 5, 0,121, 50, 5, 18,139,249,254,255, 23, 31, 32, 3,213,
/* 0x0be0 */ 74, 1, 8, 75,231, 0, 8, 75, 95, 1, 16,107,136, 21, 76, 75,
/* 0x0bf0 */ 136,106, 41,120,172,193, 0,145,232, 0, 0, 84,127, 2, 11,235,
/* 0x0c00 */ 64,214,255, 84,104, 1, 64, 57, 74, 93, 24, 83,107, 5, 0,145,
/* 0x0c10 */ 7, 33, 7, 42,137,106,108,120, 72,125, 11, 83, 40,125, 8, 27,
/* 0x0c20 */ 255, 0, 8,107, 35, 5, 0, 84, 74, 1, 8, 75, 41, 21, 73, 75,
/* 0x0c30 */ 95, 1, 16,107,137,106, 44,120,231, 0, 8, 75,173, 33, 1,145,
/* 0x0c40 */ 232, 0, 0, 84,127, 2, 11,235, 0,212,255, 84,104, 1, 64, 57,
/* 0x0c50 */ 74, 93, 24, 83,107, 5, 0,145, 7, 33, 7, 42,137,106,109,120,
/* 0x0c60 */ 72,125, 11, 83, 40,125, 8, 27,255, 0, 8,107,226, 7, 0, 84,
/* 0x0c70 */ 234, 3, 21, 42,236,107, 64,185,234,107, 0,185, 42, 2, 9, 75,
/* 0x0c80 */ 245,115, 64,185, 41, 21,138, 11,236,115, 0,185,137,106, 45,120,
/* 0x0c90 */ 20, 0, 0, 20, 31, 32, 3,213,231, 0, 10, 75, 50, 17, 8,145,
/* 0x0ca0 */ 10, 1, 10, 75, 22, 2,128, 82,136, 21, 76, 75, 30, 1,128, 82,
/* 0x0cb0 */ 40, 5, 0,121,194,254,255, 23,191, 0, 2,107, 57, 27, 0, 81,
/* 0x0cc0 */ 136,196,255, 84,117,254,255, 23,234, 3, 21, 42,245,107, 64,185,
/* 0x0cd0 */ 234,107, 0,185, 42, 2, 9, 75, 41, 21,138, 11,137,106, 44,120,
/* 0x0ce0 */ 63, 31, 0,113, 10, 1,128, 82,108, 1,128, 82,233, 63, 64,249,
/* 0x0cf0 */ 89,177,140, 26,156,254,255, 23, 41, 21, 73, 75, 8, 1, 10, 75,
/* 0x0d00 */ 137,106, 47,120,231, 0, 10, 75,246,255,255, 23,233, 3, 14, 42,
/* 0x0d10 */ 87,254,255, 23, 41, 21, 0, 81, 95, 1, 16,107, 8,121, 31, 83,
/* 0x0d20 */ 232, 0, 0, 84,127, 2, 11,235, 74, 93, 24, 83,224,204,255, 84,
/* 0x0d30 */ 108, 1, 64, 57,107, 5, 0,145,135, 33, 7, 42, 74,125, 1, 83,
/* 0x0d40 */ 255, 0, 10,107, 99, 0, 0, 84,231, 0, 10, 75, 8, 1, 0, 50,
/* 0x0d50 */ 41, 5, 0,113, 33,254,255, 84, 21,109, 28, 83, 14, 32, 25,145,
/* 0x0d60 */ 143, 0,128, 82,243,254,255, 23, 41, 21, 73, 75,137,106, 45,120,
/* 0x0d70 */ 233,107, 64,185,236, 3, 21, 42,231, 0, 8, 75,245, 3, 27, 42,
/* 0x0d80 */ 72, 1, 8, 75,251,115, 64,185,236,107, 0,185,233,115, 0,185,
/* 0x0d90 */ 212,255,255, 23, 2, 0,128, 82,227, 19,189,169,229, 27, 1,169,
/* 0x0da0 */ 254, 19, 0,249,232, 3, 1,170, 45, 64, 34,139,233, 3, 4,170,
/* 0x0db0 */ 142, 64, 37,139, 11, 16, 0,145, 6, 0, 64, 57, 5, 4, 64, 57,
/* 0x0dc0 */ 4, 8, 64, 57,174, 0, 6, 11, 7, 0,128, 18,229, 32,197, 26,
/* 0x0dd0 */ 229, 3, 37, 42,228, 32,196, 26,228, 3, 36, 42, 35, 0,128, 82,
/* 0x0de0 */ 34, 0,128, 82, 33, 0,128, 82, 32, 0,128, 82, 6, 0,128, 82,
/* 0x0df0 */ 230, 31, 0,185, 2, 96,128, 82,192,230,128, 82, 66, 32,206, 26,
/* 0x0e00 */ 66, 0, 0, 11, 0,128,128,210,225, 3, 11,170, 0, 64, 0,170,
/* 0x0e10 */ 0,128, 0,170, 32,132, 0,248, 66, 16, 0,113,204,255,255, 84,
/* 0x0e20 */ 0, 21, 0,145,231, 0, 0,148, 31, 0, 8,235,193,255,255, 84,
/* 0x0e30 */ 227, 67, 66,248,226, 19, 64,185, 36, 1, 3,203,128, 0, 2, 10,
/* 0x0e40 */ 224, 47, 0,185, 0, 16, 6, 11, 97, 1, 0,145,225, 0, 0,148,
/* 0x0e50 */ 129, 5, 0, 84,227, 23, 64,185,226, 27, 64,185, 99, 0, 4, 10,
/* 0x0e60 */ 224,115, 64, 57, 99, 32,194, 26,226, 3, 2, 75, 66, 32, 0, 17,
/* 0x0e70 */ 2, 36,194, 26, 99, 0, 2, 11,106,177, 57,145, 99, 4, 3, 11,
/* 0x0e80 */ 227, 3, 3, 42, 32, 0,128, 82, 74, 37, 3,139,223, 28, 0,113,
/* 0x0e90 */ 3, 2, 0, 84,227,125, 64,147,227, 3, 3,203, 37,105, 99, 56,
/* 0x0ea0 */ 165,120, 31, 83, 65, 1, 8,145,164, 0, 24, 18,227, 3, 4, 42,
/* 0x0eb0 */ 33, 4, 3,139,201, 0, 0,148, 3, 0, 0, 18,127, 32, 68,107,
/* 0x0ec0 */ 193, 0, 0, 84, 31, 0, 4,113,195,254,255, 84, 5, 0, 0, 20,
/* 0x0ed0 */ 225, 3, 10,170,193, 0, 0,148, 31, 0, 4,113,163,255,255, 84,
/* 0x0ee0 */ 98, 0,128, 82,195, 0,128, 82,223, 40, 0,113, 67, 48,131, 26,
/* 0x0ef0 */ 223, 16, 0,113,195, 48,131, 26,198, 0, 3, 75, 34, 0, 0, 20,
/* 0x0f00 */ 97, 1, 6,145,178, 0, 0,148,129, 1, 0, 84,227, 11, 64,185,
/* 0x0f10 */ 226, 7, 64,185,227, 15, 0,185,226, 11, 0,185,239, 7, 0,185,
/* 0x0f20 */ 3, 0,128, 82,223, 28, 0,113,102, 0,128, 82,102, 48,134, 26,
/* 0x0f30 */ 106,145, 25,145, 42, 0, 0, 20, 97, 97, 6,145,164, 0, 0,148,
/* 0x0f40 */ 97, 2, 0, 84,227, 47, 64,185, 97,129, 7,145, 96, 16, 6, 11,
/* 0x0f50 */ 160, 0, 0,148,161, 3, 0, 84, 35, 1,128, 82,223, 28, 0,113,
/* 0x0f60 */ 102, 1,128, 82,102, 48,134, 26,227, 67, 66,248, 36, 1, 3,203,
/* 0x0f70 */ 159, 0, 15,107,131, 17, 0, 84,227,125, 64,147,227, 3, 3,203,
/* 0x0f80 */ 32,105, 99, 56, 32, 21, 0, 56,121, 0, 0, 20, 97,193, 6,145,
/* 0x0f90 */ 143, 0, 0,148,228, 7, 64,185, 64, 1, 0, 84, 97, 33, 7,145,
/* 0x0fa0 */ 139, 0, 0,148,228, 11, 64,185,128, 0, 0, 84,227, 11, 64,185,
/* 0x0fb0 */ 228, 15, 64,185,227, 15, 0,185,227, 7, 64,185,227, 11, 0,185,
/* 0x0fc0 */ 239, 7, 0,185,239, 3, 4, 42, 3, 1,128, 82,223, 28, 0,113,
/* 0x0fd0 */ 102, 1,128, 82,102, 48,134, 26,106,161, 41,145, 65, 1, 0,145,
/* 0x0fe0 */ 125, 0, 0,148, 1, 1, 0, 84,227, 47, 64,185, 69, 17, 0,145,
/* 0x0ff0 */ 227, 3, 3, 42, 2, 0,128, 82,165, 16, 3,139, 4, 1,128, 82,
/* 0x1000 */ 14, 0, 0, 20, 65, 9, 0,145,115, 0, 0,148, 1, 1, 0, 84,
/* 0x1010 */ 227, 47, 64,185, 69, 17, 4,145,227, 3, 3, 42, 2, 1,128, 82,
/* 0x1020 */ 165, 16, 3,139, 4, 1,128, 82, 4, 0, 0, 20, 69, 17, 8,145,
/* 0x1030 */ 2, 2,128, 82, 4, 32,128, 82,226, 55, 0,185, 32, 0,128, 82,
/* 0x1040 */ 225, 3, 5,170,101, 0, 0,148, 3, 0, 4,107,163,255,255, 84,
/* 0x1050 */ 229, 55, 64,185,165, 0, 3, 11,229, 55, 0,185,223, 16, 0,113,
/* 0x1060 */ 194, 6, 0, 84,198, 28, 0, 17, 99, 0,128, 82,191, 16, 0,113,
/* 0x1070 */ 101, 32,133, 26,227, 3, 5, 42,101, 29, 3,139,165,128, 13,145,
/* 0x1080 */ 32, 0,128, 82, 4, 8,128, 82,225, 3, 5,170, 83, 0, 0,148,
/* 0x1090 */ 3, 0, 4,107,163,255,255, 84,227, 47, 0,185,127, 16, 0,113,
/* 0x10a0 */ 99, 4, 0, 84,100,124, 1, 83,132, 4, 0, 81,111, 0, 0, 18,
/* 0x10b0 */ 239, 1, 31, 50,127, 56, 0,113,226, 0, 0, 84,239, 33,196, 26,
/* 0x10c0 */ 106,121, 21,145,227, 1, 3, 75,227, 3, 3, 42, 74, 5, 3,139,
/* 0x10d0 */ 12, 0, 0, 20,132, 16, 0, 81, 53, 0, 0,148,231,124, 1, 83,
/* 0x10e0 */ 131, 1, 7,107,108, 32,140, 26,239, 1, 15, 26,132, 4, 0,113,
/* 0x10f0 */ 65,255,255, 84,106, 17, 25,145,239,109, 28, 83,132, 0,128, 82,
/* 0x1100 */ 37, 0,128, 82, 32, 0,128, 82,225, 3, 10,170, 51, 0, 0,148,
/* 0x1110 */ 31, 0, 0,114, 64, 0, 0, 84,239, 1, 5, 42,165,120, 31, 83,
/* 0x1120 */ 132, 4, 0,113, 33,255,255, 84, 2, 0, 0, 20,239, 47, 64,185,
/* 0x1130 */ 239, 5, 0, 49,229, 55, 64,185,227, 67, 66,248,165, 8, 0, 17,
/* 0x1140 */ 35, 1, 3,203,255, 1, 3,107,232, 2, 0, 84,227,125, 64,147,
/* 0x1150 */ 227, 3, 3,203, 32,105, 99, 56, 32, 21, 0, 56, 63, 1, 14,235,
/* 0x1160 */ 194, 0, 0, 84,165, 4, 0,113, 97,255,255, 84,224,115, 0, 57,
/* 0x1170 */ 63, 1, 14,235,227,229,255, 84, 13, 0, 0,148, 0, 0,128, 82,
/* 0x1180 */ 226, 19, 64,249, 3, 1, 2,203,226, 31, 64,249, 67, 0, 0,185,
/* 0x1190 */ 226, 67, 66,248, 35, 1, 2,203,226, 55, 64,249, 67, 0, 0,185,
/* 0x11a0 */ 255,243, 0,145, 32, 0,128, 82,246,255,255, 23,227,124, 24, 83,
/* 0x11b0 */ 195, 0, 0, 53, 31, 1, 13,235,231, 92, 24, 83, 66,255,255, 84,
/* 0x11c0 */ 3, 21, 64, 56,108, 32, 12, 42,192, 3, 95,214,224, 3, 6, 42,
/* 0x11d0 */ 33, 68, 32,139, 0, 0,128, 82, 33, 68, 32,139,227,124, 24, 83,
/* 0x11e0 */ 241, 3, 30,170, 94, 0, 0, 16, 99,254,255, 52, 35, 0, 64,121,
/* 0x11f0 */ 226,124, 11, 83, 98,124, 2, 27,159, 1, 2,107, 2, 1, 0, 84,
/* 0x1200 */ 2, 0,129, 82,231, 3, 2, 42, 66, 0, 3, 75, 0, 0, 0, 58,
/* 0x1210 */ 99, 20, 66, 11, 35, 0, 0,121, 32, 2, 95,214,140, 1, 2, 75,
/* 0x1220 */ 231, 0, 2, 75, 99, 20, 67, 75, 0, 0, 0, 58, 35, 0, 0,121,
/* 0x1230 */ 32, 2, 95,214,194, 3,128, 82,225, 0, 0, 16, 64, 0,128, 82,
/* 0x1240 */ 8, 8,128, 82, 1, 0, 0,212,224, 15,128, 82,168, 11,128, 82,
/* 0x1250 */ 1, 0, 0,212, 80, 82, 79, 84, 95, 69, 88, 69, 67,124, 80, 82,
/* 0x1260 */ 79, 84, 95, 87, 82, 73, 84, 69, 32,102, 97,105,108,101,100, 46,
/* 0x1270 */ 10, 0, 0, 0,226, 3, 30,170, 65,208, 0,209,229, 3, 1,170,
/* 0x1280 */ 36, 68, 64,184,165, 0, 4,203, 36, 68, 64,184,164, 0, 4,139,
/* 0x1290 */ 164, 75, 0,185, 36, 68, 64,184,164, 0, 4,139,228,207, 31,248,
/* 0x12a0 */ 36, 68, 64,184,160, 0, 4, 11, 1, 96, 0, 17,255, 35, 0,209,
/* 0x12b0 */ 36, 4, 64,185, 33, 48, 0,145, 33, 0, 4,139, 36, 68, 64,184,
/* 0x12c0 */ 5, 44, 12, 83,165,124, 22, 83,132, 8, 5, 11,228,207, 31,184,
/* 0x12d0 */ 0, 8, 5, 75,224,207, 31,184,132, 8, 5, 75, 0, 8, 5, 11,
/* 0x12e0 */ 229,207, 31,184, 16, 0, 0,148, 99, 28, 0, 18,127, 64, 1,113,
/* 0x12f0 */ 129, 1, 0, 84, 33,252, 66,211, 65, 1, 0,180, 33, 4, 0,209,
/* 0x1300 */ 2,120, 97,184, 67,120, 26, 83,127, 20, 0,113,129, 0, 0, 84,
/* 0x1310 */ 66, 0, 1, 75, 98, 20, 26, 83, 2,120, 33,184, 1,255,255,181,
/* 0x1320 */ 192, 3, 95,214,254,207, 31,248, 35, 20, 64, 57,227,207, 31,248,
/* 0x1330 */ 35, 24, 64, 57,227,207, 31,248,228,207, 31,248,224,207, 31,248,
/* 0x1340 */ 36, 68, 64,184,229, 3, 4, 42, 36, 68, 64,184,228,207, 31,248,
/* 0x1350 */ 226,207, 31,248,163, 83, 1,209,227,207, 31,248,224,207, 31,248,
/* 0x1360 */ 229,207, 31,248,225,207, 31,248, 35, 4, 64,146,165, 12, 0,145,
/* 0x1370 */ 165, 0, 3,139,163, 3, 93,184, 98, 8, 69,139,163,131, 89,184,
/* 0x1380 */ 115, 0, 0,148,163,131, 92,184,113, 0, 0,148, 67, 0, 0,148,
/* 0x1390 */ 4, 0,128,146, 67, 6,128,210, 98, 0,128,210,161,195, 93,248,
/* 0x13a0 */ 160,131, 93,248,230, 3, 0,170,200, 27,128, 82, 1, 0, 0,212,
/* 0x13b0 */ 31, 0, 6,235, 64, 0, 0, 84, 0, 0, 32,212,165, 3, 93,184,
/* 0x13c0 */ 161, 67, 95,248, 44, 0, 0,148,226, 15, 65,169,224, 7,194,168,
/* 0x13d0 */ 228, 7, 65,248,128, 0, 63,214,255, 35, 0,145, 10, 0, 0,148,
/* 0x13e0 */ 232, 26,128, 82, 1, 0, 0,212,226, 11, 64,249,224, 7,194,168,
/* 0x13f0 */ 230, 31, 65,169,228, 23,194,168,225, 11, 64,249,253,123,194,168,
/* 0x1400 */ 32, 0, 31,214,164,195, 95,184,192, 7, 64,169,128, 4, 0,169,
/* 0x1410 */ 226, 15, 65,169,224, 7,194,168,228, 51,193,168, 67, 0, 0,180,
/* 0x1420 */ 128, 0, 63,214,224, 3, 64,249,225, 67, 64,248, 2, 0,128,210,
/* 0x1430 */ 33, 0, 0,139, 33, 32, 0,145, 8, 0,176, 82, 1, 0, 0,212,
/* 0x1440 */ 224, 7,193,168,162, 0,128,210, 72, 28,128, 82, 1, 0, 0,212,
/* 0x1450 */ 254, 11, 64,249,224, 7,194,168,192, 3, 31,214, 37,192, 95,184,
/* 0x1460 */ 165, 92, 0, 18,165, 4, 0, 17, 35, 68, 64,184,165, 4, 0, 81,
/* 0x1470 */ 3, 68, 0,184,191, 8, 0,114,129,255,255, 84,165,124, 3, 83,
/* 0x1480 */ 165, 0, 0, 52, 34, 12,193,168,165, 4, 0,113, 2, 12,129,168,
/* 0x1490 */ 165,255,255, 53,192, 3, 95,214,254,207, 31,248,227, 3, 30,170,
/* 0x14a0 */ 43, 0, 0,148, 65,244,126,211, 4, 0,128,146, 67, 4,128,210,
/* 0x14b0 */ 226, 0,128,210,161,195, 31,248, 0, 0,128,210,200, 27,128, 82,
/* 0x14c0 */ 1, 0, 0,212, 31, 4, 64,177, 67, 0, 0, 84, 0, 0, 32,212,
/* 0x14d0 */ 160, 67, 31,248,161,131, 93,184,165, 3, 93,184,230,255,255,151,
/* 0x14e0 */ 161,131, 87,184,165,195, 87,184, 35, 4, 0, 18, 33, 0, 3, 75,
/* 0x14f0 */ 165, 0, 3, 11, 99, 0, 0, 11,163,131, 23,184,165, 28, 0, 17,
/* 0x1500 */ 165,124, 3, 83,220,255,255,151,226, 3, 0,170,161,131, 89,248,
/* 0x1510 */ 160,131, 25,248,210,255,255,151,161,131, 92,248,160,131, 28,248,
/* 0x1520 */ 207,255,255,151,225, 71, 64,248,224,207, 31,248,204,255,255,151,
/* 0x1530 */ 225, 3, 0,170,224, 3, 2,170, 2, 0,128,210, 8, 0,176, 82,
/* 0x1540 */ 1, 0, 0,212,254, 71, 64,248,192, 3, 31,214, 99,192, 95,184,
/* 0x1550 */ 99, 92, 0, 18, 99, 4, 0, 17, 66, 0, 3,139,192, 3, 95,214,
/* 0x1560 */ 102,105,108,101, 32,102,111,114,109, 97,116, 32,101,108,102, 54,
/* 0x1570 */ 52, 45,108,105,116,116,108,101, 97, 97,114, 99,104, 54, 52, 10,
/* 0x1580 */ 10, 83,101, 99,116,105,111,110,115, 58, 10, 73,100,120, 32, 78,
/* 0x1590 */ 97,109,101, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 83,105,122,
/* 0x15a0 */ 101, 32, 32, 32, 32, 32, 32, 86, 77, 65, 32, 32, 32, 32, 32, 32,
/* 0x15b0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 76, 77, 65, 32, 32, 32, 32,
/* 0x15c0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 70,105,108,101, 32,
/* 0x15d0 */ 111,102,102, 32, 32, 65,108,103,110, 32, 32, 70,108, 97,103,115,
/* 0x15e0 */ 10, 32, 32, 48, 32, 69, 76, 70, 77, 65, 73, 78, 88, 32, 32, 32,
/* 0x15f0 */ 32, 32, 32, 48, 48, 48, 48, 48, 48, 50, 52, 32, 32, 48, 48, 48,
/* 0x1600 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48,
/* 0x1610 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x1620 */ 32, 48, 48, 48, 48, 48, 48, 52, 48, 32, 32, 50, 42, 42, 50, 32,
/* 0x1630 */ 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 76, 79, 67,
/* 0x1640 */ 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 49, 32, 78,
/* 0x1650 */ 82, 86, 95, 72, 69, 65, 68, 32, 32, 32, 32, 32, 32, 48, 48, 48,
/* 0x1660 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1670 */ 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48,
/* 0x1680 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48,
/* 0x1690 */ 48, 54, 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69,
/* 0x16a0 */ 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32,
/* 0x16b0 */ 50, 32, 78, 82, 86, 95, 84, 65, 73, 76, 32, 32, 32, 32, 32, 32,
/* 0x16c0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48,
/* 0x16d0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48,
/* 0x16e0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48,
/* 0x16f0 */ 48, 48, 48, 48, 54, 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79,
/* 0x1700 */ 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89,
/* 0x1710 */ 10, 32, 32, 51, 32, 78, 82, 86, 50, 69, 32, 32, 32, 32, 32, 32,
/* 0x1720 */ 32, 32, 32, 48, 48, 48, 48, 48, 49, 50, 56, 32, 32, 48, 48, 48,
/* 0x1730 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48,
/* 0x1740 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x1750 */ 32, 48, 48, 48, 48, 48, 48, 54, 52, 32, 32, 50, 42, 42, 50, 32,
/* 0x1760 */ 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79,
/* 0x1770 */ 78, 76, 89, 10, 32, 32, 52, 32, 78, 82, 86, 50, 68, 32, 32, 32,
/* 0x1780 */ 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 49, 49, 99, 32, 32,
/* 0x1790 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x17a0 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x17b0 */ 48, 48, 32, 32, 48, 48, 48, 48, 48, 49, 56, 99, 32, 32, 50, 42,
/* 0x17c0 */ 42, 50, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69,
/* 0x17d0 */ 65, 68, 79, 78, 76, 89, 10, 32, 32, 53, 32, 78, 82, 86, 50, 66,
/* 0x17e0 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 48, 48, 48, 48, 48, 48,102,
/* 0x17f0 */ 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1800 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1810 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 50, 97, 56, 32,
/* 0x1820 */ 32, 50, 42, 42, 50, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44,
/* 0x1830 */ 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 54, 32, 76, 90,
/* 0x1840 */ 77, 65, 95, 69, 76, 70, 48, 48, 32, 32, 32, 32, 48, 48, 48, 48,
/* 0x1850 */ 48, 48,100, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1860 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1870 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 51,
/* 0x1880 */ 57, 56, 32, 32, 50, 42, 42, 50, 32, 32, 67, 79, 78, 84, 69, 78,
/* 0x1890 */ 84, 83, 44, 32, 82, 69, 76, 79, 67, 44, 32, 82, 69, 65, 68, 79,
/* 0x18a0 */ 78, 76, 89, 10, 32, 32, 55, 32, 76, 90, 77, 65, 95, 68, 69, 67,
/* 0x18b0 */ 50, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 57, 51, 48, 32, 32,
/* 0x18c0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x18d0 */ 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x18e0 */ 48, 48, 32, 32, 48, 48, 48, 48, 48, 52, 54, 56, 32, 32, 50, 42,
/* 0x18f0 */ 42, 48, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69,
/* 0x1900 */ 65, 68, 79, 78, 76, 89, 10, 32, 32, 56, 32, 76, 90, 77, 65, 95,
/* 0x1910 */ 68, 69, 67, 49, 48, 32, 32, 32, 32, 48, 48, 48, 48, 48, 52, 57,
/* 0x1920 */ 99, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1930 */ 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1940 */ 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48,100, 57, 56, 32,
/* 0x1950 */ 32, 50, 42, 42, 50, 32, 32, 67, 79, 78, 84, 69, 78, 84, 83, 44,
/* 0x1960 */ 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 32, 57, 32, 76, 90,
/* 0x1970 */ 77, 65, 95, 68, 69, 67, 51, 48, 32, 32, 32, 32, 48, 48, 48, 48,
/* 0x1980 */ 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1990 */ 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x19a0 */ 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 49, 50,
/* 0x19b0 */ 51, 52, 32, 32, 50, 42, 42, 48, 32, 32, 67, 79, 78, 84, 69, 78,
/* 0x19c0 */ 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10, 32, 49, 48,
/* 0x19d0 */ 32, 69, 76, 70, 77, 65, 73, 78, 89, 32, 32, 32, 32, 32, 32, 48,
/* 0x19e0 */ 48, 48, 48, 48, 48, 51,101, 32, 32, 48, 48, 48, 48, 48, 48, 48,
/* 0x19f0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48, 48, 48,
/* 0x1a00 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48, 48,
/* 0x1a10 */ 48, 49, 50, 51, 52, 32, 32, 50, 42, 42, 50, 32, 32, 67, 79, 78,
/* 0x1a20 */ 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78, 76, 89, 10,
/* 0x1a30 */ 32, 49, 49, 32, 69, 76, 70, 77, 65, 73, 78, 90, 32, 32, 32, 32,
/* 0x1a40 */ 32, 32, 48, 48, 48, 48, 48, 50,101, 99, 32, 32, 48, 48, 48, 48,
/* 0x1a50 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32, 48, 48,
/* 0x1a60 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 32,
/* 0x1a70 */ 48, 48, 48, 48, 49, 50, 55, 52, 32, 32, 50, 42, 42, 50, 32, 32,
/* 0x1a80 */ 67, 79, 78, 84, 69, 78, 84, 83, 44, 32, 82, 69, 65, 68, 79, 78,
/* 0x1a90 */ 76, 89, 10, 83, 89, 77, 66, 79, 76, 32, 84, 65, 66, 76, 69, 58,
/* 0x1aa0 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ab0 */ 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65, 95, 68,
/* 0x1ac0 */ 69, 67, 51, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ad0 */ 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67, 51, 48,
/* 0x1ae0 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1af0 */ 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 73,
/* 0x1b00 */ 78, 90, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1b10 */ 48, 48, 48, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 48, 48, 48,
/* 0x1b20 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32,
/* 0x1b30 */ 32, 32, 32,100, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88, 9, 48,
/* 0x1b40 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x1b50 */ 69, 76, 70, 77, 65, 73, 78, 88, 10, 48, 48, 48, 48, 48, 48, 48,
/* 0x1b60 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100,
/* 0x1b70 */ 32, 32, 78, 82, 86, 95, 72, 69, 65, 68, 9, 48, 48, 48, 48, 48,
/* 0x1b80 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 95,
/* 0x1b90 */ 72, 69, 65, 68, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ba0 */ 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82,
/* 0x1bb0 */ 86, 95, 84, 65, 73, 76, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1bc0 */ 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 95, 84, 65, 73, 76,
/* 0x1bd0 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1be0 */ 48, 32,108, 32, 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 69, 9,
/* 0x1bf0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1c00 */ 32, 78, 82, 86, 50, 69, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1c10 */ 48, 48, 48, 48, 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32,
/* 0x1c20 */ 78, 82, 86, 50, 68, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1c30 */ 48, 48, 48, 48, 48, 48, 32, 78, 82, 86, 50, 68, 10, 48, 48, 48,
/* 0x1c40 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,108, 32,
/* 0x1c50 */ 32, 32, 32,100, 32, 32, 78, 82, 86, 50, 66, 9, 48, 48, 48, 48,
/* 0x1c60 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32, 78, 82, 86,
/* 0x1c70 */ 50, 66, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1c80 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65,
/* 0x1c90 */ 95, 69, 76, 70, 48, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ca0 */ 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 69, 76, 70,
/* 0x1cb0 */ 48, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1cc0 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65,
/* 0x1cd0 */ 95, 68, 69, 67, 50, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ce0 */ 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67,
/* 0x1cf0 */ 50, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1d00 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 76, 90, 77, 65,
/* 0x1d10 */ 95, 68, 69, 67, 49, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1d20 */ 48, 48, 48, 48, 48, 48, 48, 32, 76, 90, 77, 65, 95, 68, 69, 67,
/* 0x1d30 */ 49, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1d40 */ 48, 48, 48, 32,108, 32, 32, 32, 32,100, 32, 32, 69, 76, 70, 77,
/* 0x1d50 */ 65, 73, 78, 89, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1d60 */ 48, 48, 48, 48, 48, 32, 69, 76, 70, 77, 65, 73, 78, 89, 10, 48,
/* 0x1d70 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,
/* 0x1d80 */ 103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73, 78, 88,
/* 0x1d90 */ 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1da0 */ 48, 32, 95,115,116, 97,114,116, 10, 48, 48, 48, 48, 48, 48, 48,
/* 0x1db0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32,
/* 0x1dc0 */ 70, 32, 78, 82, 86, 50, 69, 9, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1dd0 */ 48, 48, 48, 48, 48, 49, 50, 56, 32,117, 99,108, 95,110,114,118,
/* 0x1de0 */ 50,101, 95,100,101, 99,111,109,112,114,101,115,115, 95, 51, 50,
/* 0x1df0 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1e00 */ 48, 32,103, 32, 32, 32, 32, 32, 70, 32, 78, 82, 86, 50, 68, 9,
/* 0x1e10 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 49, 49, 99,
/* 0x1e20 */ 32,117, 99,108, 95,110,114,118, 50,100, 95,100,101, 99,111,109,
/* 0x1e30 */ 112,114,101,115,115, 95, 51, 50, 10, 48, 48, 48, 48, 48, 48, 48,
/* 0x1e40 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 32,103, 32, 32, 32, 32, 32,
/* 0x1e50 */ 70, 32, 78, 82, 86, 50, 66, 9, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1e60 */ 48, 48, 48, 48, 48, 48,102, 48, 32,117, 99,108, 95,110,114,118,
/* 0x1e70 */ 50, 98, 95,100,101, 99,111,109,112,114,101,115,115, 95, 51, 50,
/* 0x1e80 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1e90 */ 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 76, 90, 77, 65, 95, 68,
/* 0x1ea0 */ 69, 67, 49, 48, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1eb0 */ 48, 48, 48, 48, 48, 32, 76,122,109, 97, 68,101, 99,111,100,101,
/* 0x1ec0 */ 10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ed0 */ 48, 32,103, 32, 32, 32, 32, 32, 32, 32, 69, 76, 70, 77, 65, 73,
/* 0x1ee0 */ 78, 89, 9, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
/* 0x1ef0 */ 48, 48, 48, 32,101,110,100, 95,100,101, 99,111,109,112,114,101,
/* 0x1f00 */ 115,115, 10, 10, 82, 69, 76, 79, 67, 65, 84, 73, 79, 78, 32, 82,
/* 0x1f10 */ 69, 67, 79, 82, 68, 83, 32, 70, 79, 82, 32, 91, 69, 76, 70, 77,
/* 0x1f20 */ 65, 73, 78, 88, 93, 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32,
/* 0x1f30 */ 32, 32, 32, 32, 32, 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32,
/* 0x1f40 */ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10,
/* 0x1f50 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 50, 48,
/* 0x1f60 */ 32, 82, 95, 65, 65, 82, 67, 72, 54, 52, 95, 67, 65, 76, 76, 50,
/* 0x1f70 */ 54, 32, 32, 69, 76, 70, 77, 65, 73, 78, 90, 10, 10, 82, 69, 76,
/* 0x1f80 */ 79, 67, 65, 84, 73, 79, 78, 32, 82, 69, 67, 79, 82, 68, 83, 32,
/* 0x1f90 */ 70, 79, 82, 32, 91, 76, 90, 77, 65, 95, 69, 76, 70, 48, 48, 93,
/* 0x1fa0 */ 58, 10, 79, 70, 70, 83, 69, 84, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x1fb0 */ 32, 32, 32, 84, 89, 80, 69, 32, 32, 32, 32, 32, 32, 32, 32, 32,
/* 0x1fc0 */ 32, 32, 32, 32, 32, 86, 65, 76, 85, 69, 10, 48, 48, 48, 48, 48,
/* 0x1fd0 */ 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 52, 32, 82, 95, 65, 65,
/* 0x1fe0 */ 82, 67, 72, 54, 52, 95, 67, 79, 78, 68, 66, 82, 49, 57, 32, 32,
/* 0x1ff0 */ 76, 90, 77, 65, 95, 68, 69, 67, 51, 48, 10
};
+58
View File
@@ -0,0 +1,58 @@
MAKEFLAGS += -rR
.SUFFIXES:
.SECONDEXPANSION:
ifndef top_srcdir
__dir_list = . .. ../.. ../../.. ../../../.. ../../../../..
__dir_list += ../../../../../.. ../../../../../../.. ../../../../../../../..
__dir_search = $(firstword $(foreach v,$1,$(if $(wildcard $v/$2),$v)) $3)
top_srcdir := $(call __dir_search,$(__dir_list),src/bele.h,NOT_FOUND)
endif
include $(wildcard $(top_srcdir)/Makevars.global ./Makevars.local)
vpath %.c $(top_srcdir)/src/stub/src/c
STUBS =
include $(top_srcdir)/src/stub/src/c/Makevars.lzma
ifneq ($(UPX_LZMA_VERSION),)
STUBS += lzma_d_cf.S lzma_d_cs.S
endif
default.targets = all
ifeq ($(strip $(STUBS)),)
STUBS = NO_STUBS
all.targets =
endif
include $(top_srcdir)/src/stub/Makefile
# /***********************************************************************
# // method-lzma
# ************************************************************************/
lzma_d_c%.S : tc_list = method-lzma arm64-linux.elf default
lzma_d_c%.S : tc_bfdname = elf64-littleaarch64
c := tc.method-lzma.gcc
$c = $(tc.arm64-linux.elf.gcc)
$c += -fomit-frame-pointer
$c += -fno-unit-at-a-time
$c += -ffunction-sections
$c += -fwrapv
$c += -DWITH_LZMA=$(UPX_LZMA_VERSION)
$c += -I$(UPX_LZMADIR)
$c += -I$(top_srcdir)/src
$c += -Wno-error
tc.method-lzma.objcopy = /usr/bin/aarch64-linux-gnu-objcopy
tc.method-lzma.objdump = /usr/bin/aarch64-linux-gnu-objdump
lzma_d_c%.S : lzma_d_c.c
$(call tc,gcc) $(PP_FLAGS) -c $< -o tmp/$T.o
$(call tc,f-objstrip,tmp/$T.o)
$(call tc,objcopy) -O binary --only-section .text.LzmaDecode tmp/$T.o tmp/$T.bin
head -c-4 tmp/$T.bin > tmp/$T.out
$(call tc,objdump) -b binary -m aarch64 -D tmp/$T.out | $(RTRIM) > tmp/$T.out.disasm
$(call tc,bin2h) --mode=gas tmp/$T.out $@
lzma_d_cf.% : PP_FLAGS = -DFAST -O2
lzma_d_cs.% : PP_FLAGS = -DSMALL -Os
+6 -5
View File
@@ -71,8 +71,9 @@ Align= (SpecPos + kNumFullDistances - kEndPosModelIndex)
RepLenCoder= (LenCoder + kNumLenProbs) RepLenCoder= (LenCoder + kNumLenProbs)
Literal= (RepLenCoder + kNumLenProbs) Literal= (RepLenCoder + kNumLenProbs)
LZMA_BASE_SIZE= Literal /* 1846 */ // Already #define in lzma_d.S
LZMA_LIT_SIZE= 768 //LZMA_BASE_SIZE= Literal
//LZMA_LIT_SIZE= 768
#define call bl /* subroutine call */ #define call bl /* subroutine call */
@@ -137,7 +138,7 @@ vs_lc= 0
*/ */
LzmaDecode: .globl LzmaDecode LzmaDecode: .globl LzmaDecode
// save &inSizeProcesesed and caller registers // save &inSizeProcesesed and caller registers
PUSH5(x3,x4,x5,x6, x30) PUSH5(x3,x4,x5,x6, lr)
mov inPtr,x1 mov inPtr,x1
add inLim,x1,w2, uxtw add inLim,x1,w2, uxtw
mov outPtr,x4 mov outPtr,x4
@@ -489,8 +490,8 @@ rcGetBit_mi: // rcGetBit(mi, mi + p_in)
add p_in,p_in,mi, uxtw #1 add p_in,p_in,mi, uxtw #1
rcGetBit: // Out: CC set on mo rcGetBit: // Out: CC set on mo
lsr t0,Range,#kNumTopBits lsr t0,Range,#kNumTopBits
mov t2x,x30 // save lr if need rcLoad mov t2x,lr // save lr if need rcLoad
adr x30,rcGetBitCont; cbz t0,rcLoad // conditional subroutine call adr lr,rcGetBitCont; cbz t0,rcLoad // conditional subroutine call
rcGetBitCont: rcGetBitCont:
#define starp t0 #define starp t0
#define bound t1 #define bound t1
+135 -495
View File
@@ -1,525 +1,165 @@
// In LZMA SDK 4.63 file lzma.txt (2008-12-30): /* lzma_d.S -- arm64 decompressor for LZMA
// LZMA SDK is written and placed in the public domain by Igor Pavlov.
// The creative expression of this hand compilation into assembly language,
// including (but not limited to) code organization and register assignment,
// remains copyright by John F. Reiser and licensed under GNU Lesser General
// Public License (GNU LGPL).
// Hand compiled Copyright (c) 2006-2017 John F. Reiser (2007-06-18) This file is part of the UPX executable compressor.
// from modified LzmaDecode.c.
// LZMA SDK 4.40 Copyright (c) 1999-2017 Igor Pavlov (2006-05-01)
//
// This file is licensed under either of these two licenses:
// 1) GNU Lesser General Public License (GNU LGPL)
// 2) Common Public License (CPL)
// See files LGPL.txt and CPL.html for the text of the licenses.
#include "macros.S" Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
Copyright (C) 1996-2017 Laszlo Molnar
Copyright (C) 2000-2017 John F. Reiser
All Rights Reserved.
kLzmaStreamWasFinishedId= (-1) UPX and the UCL library are free software; you can redistribute them
and/or modify them under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
kNumTopBits= 24 This program is distributed in the hope that it will be useful,
kTopValue= 1<<kNumTopBits but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
kNumBitModelTotalBits= 11 You should have received a copy of the GNU General Public License
kBitModelTotal= (1 << kNumBitModelTotalBits) along with this program; see the file COPYING.
kNumMoveBits= 5 If not, write to the Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
kNumPosBitsMax= 4 Markus F.X.J. Oberhumer Laszlo Molnar
kNumPosStatesMax= (1 << kNumPosBitsMax) <markus@oberhumer.com> <ezerotven+github@gmail.com>
kLenNumLowBits= 3 John F. Reiser
kLenNumLowSymbols= (1 << kLenNumLowBits) <jreiser@users.sourceforge.net>
kLenNumMidBits= 3
kLenNumMidSymbols= (1 << kLenNumMidBits)
kLenNumHighBits= 8
kLenNumHighSymbols= (1 << kLenNumHighBits)
LenChoice= 0
LenChoice2= (LenChoice + 1)
LenLow= (LenChoice2 + 1)
LenMid= (LenLow + (kNumPosStatesMax << kLenNumLowBits))
LenHigh= (LenMid + (kNumPosStatesMax << kLenNumMidBits))
kNumLenProbs= (LenHigh + kLenNumHighSymbols)
kNumStates= 12
kNumLitStates= 7
kStartPosModelIndex= 4
kEndPosModelIndex= 14
kNumFullDistances= (1 << (kEndPosModelIndex >> 1))
kNumPosSlotBits= 6
kNumLenToPosStates= 4
kNumAlignBits= 4
kAlignTableSize= (1 << kNumAlignBits)
kMatchMinLen= 2
IsMatch= 0
IsRep= (IsMatch + (kNumStates << kNumPosBitsMax))
IsRepG0= (IsRep + kNumStates)
IsRepG1= (IsRepG0 + kNumStates)
IsRepG2= (IsRepG1 + kNumStates)
IsRep0Long= (IsRepG2 + kNumStates)
PosSlot= (IsRep0Long + (kNumStates << kNumPosBitsMax))
SpecPos= (PosSlot + (kNumLenToPosStates << kNumPosSlotBits))
Align= (SpecPos + kNumFullDistances - kEndPosModelIndex)
LenCoder= (Align + kAlignTableSize)
RepLenCoder= (LenCoder + kNumLenProbs)
Literal= (RepLenCoder + kNumLenProbs)
LZMA_BASE_SIZE= Literal /* 1846 */
LZMA_LIT_SIZE= 768
#define call bl /* subroutine call */
#define symbol mi
#define mo mi
#define mi w0
#define p_in x1
#define t1 w2
#define t1x x2
#define t0 w3
#define t0x x3
#define bit w4
#define bitx x4
#define i w5
#define ix x5
#define state w6
#define Range w7
#define inPtr x8
#define outPtr x9
#define prob x10
#define p x11
#define Code w12
#define inLim x13
#define outLim x14
#define rep0 w15
#define t2x x17
#define nowPos bit /* temporary only */
#define nowPosx bitx /* temporary only */
#define distance bit
#define numDirectBits bit
#define hibit bit
#define matchB i
#define probLen ix
#define probLit ix
#define posSlot posState
#define r_posSlot t0
#define r_len i
#define vs x0
vs_ps= 2
vs_lp= 1
vs_lc= 0
#if !defined(PARAMETER_STYLE) /*{*/
#define PARAMETER_STYLE 1
// Possible choices:
// 1 /* 0 bytes; 1-byte encoding of pb,lp,lc [default] */
// 2 /* -24 bytes; 2-byte encoding requires no division */
// 3 /* -32 bytes; separate bytes lc,lp,pb,xx at -4+ probs */
#endif /*}*/
/* LzmaDecode(x0=vs, x1=inStream, w2=inSize, x3= &inSizeProcessed,
x4= outStream, w5= outSize, x6= &outSizeProcessed)
*/ */
LzmaDecode: .globl LzmaDecode
// save &inSizeProcesesed and caller registers
PUSH5(x3,x4,x5,x6, x30)
mov inPtr,x1
add inLim,x1,w2, uxtw
mov outPtr,x4
add outLim,x4,w5, uxtw
#if 1==PARAMETER_STYLE /*{ [0]: pb*45 + lp*9 + lc */ #define section .section
mov p,vs
ldrb w6,[inPtr],#1
mov w0,#45; udiv w4,w6,w0 // w4 = quo(w6, 45) = pb section LZMA_ELF00
mul w0,w0,w4; sub w6,w6,w0 // w6 = rem(w6, 45) //decompress: // (uchar const *src, size_t lsrc, uchar *dst, u32 &ldst, uint method)
/* Arguments according to calling convention */
src .req x0
#define lsrc w1
dst .req x2
#define ldst x3 /* Out: actually a reference: &len_dst */
#define meth w4
mov w0,#9; udiv w5,w6,w0 // w5 = quo(w6, 9) = lp #define M_LZMA 14
mul w0,w0,w5; sub w6,w6,w0 // w6 = rem(w6, 9) = lc cmp meth,#M_LZMA; bne not_lzma
#endif /*}*/
#if 2==PARAMETER_STYLE /*{ [0]: ((lc + lp)<<3) | pb; [1]: (lp<<4) | lc */ add x1,src,len,uxtw // x1= eof_src;
mov p,vs mov x4,#0
ldrb w4,[inPtr],#1; and w4,w4,#7 // pb PUSH4(x1,x2,x3, lr)
ldrb w6,[inPtr],#1; mov w5,w6,lsr #4 // lp
and w6,w6,#0xf // lc
#endif /*}*/ PUSH2(x4,x4) // clear CLzmaDecoderState, inSizeProcessed, outSizeProcessed
State= 0
#define a0 x0 /* &CLzmaDecoderState */
add a0,sp,#State
#define a1 x1 /* inp */
#define a2 w2 /* inSize */
#define a3 x3 /* &inSizeProcessed */
add a3,sp,#8
#define a4 x4 /* outp */
#define a5 w5 /* outSize */
#define a6 x6 /* &outSizeProcessed */
add a6,sp,#12
#if 3==PARAMETER_STYLE /*{ lc,lp,pb,xx in separate bytes before probs[] */ #define t0 w7
add p,vs,#4 #define t1 w8
ldrb w6,[vs, #vs_lc] #define t1x x8
ldrb w5,[vs, #vs_lp]
ldrb w4,[vs, #vs_ps]
#endif /*}*/
#undef vs
add w14,w5,w6 // lp + lc #define fp x29
mov Range,#~0
lsl w5,Range,w5; mvn w5,w5 // ~(~0<<lp) == litPosMask
lsl w4,Range,w4; mvn w4,w4 // ~(~0<<ps) == posStateMask
mov w3,#1
mov w2,#1
mov w1,#1
mov w0,#1
// FIXME stmdb sp!,{r0,r1,r2,r3, r4,r5,r6,r7, r8,r9,r10,r11, r12,r14}
//#define rep0 [sp, #0*4]
#define rep1 [sp, #1*4]
#define rep2 [sp, #2*4]
#define rep3 [sp, #3*4]
#define posStateMask [sp, #4*4]
#define litPosMask [sp, #5*4]
#define lc [sp, #6*4]
#define prevB [sp, #7*4]
#define inBuf [sp, #8*4]
#define outBuf [sp, #9*4]
//#define outLim [sp, #10*4]
#define posState [sp, #11*4]
//#define inLim [sp, #12*4]
#define m_len [sp, #13*4]
#define inSizeProcessed [sp, #(14 )*4] //The target is:
#define outSizeProcessed [sp, #(14+10+2)*4] //LzmaDecode( // from lzmaSDK/C/7zip/Compress/LZMA_C/LzmaDecode.h
// a0= &CLzmaDecoderState,
// a1= inp, a2= inSize, a3= &inSizeProcessed,
// a4= outp, a5= outSize, a6= &outSizeProcessed
//)
#define LZMA_BASE_SIZE 1846
#define LZMA_LIT_SIZE 768
mov state,#0 ldrb t1,[src,#0] // first byte, replaces LzmaDecodeProperties()
str state,prevB mov t0,#2*LZMA_LIT_SIZE
lsr t1,t1,#3 // lit_context_bits + lit_pos_bits
lslv t0,t0,t1 // 2*LZMA_LIT_SIZE << (lit_context_bits + lit_pos_bits)
mov fp,sp
#define W 4 /* even #bits to round up so that 8 bits span all the 1's */
add t0,t0,#((~(~0<<W) + 2*LZMA_BASE_SIZE)>>W)<<W
mov t1x,sp
sub sp,sp,t0,uxtw
mov w2,#LZMA_LIT_SIZE 1: // clear inSizeProcessed and CLzmaDecoderState
mov w0,#LZMA_BASE_SIZE stp x4,x4,[x3],#2*8
lsl w2,w2,w14 // LZMA_LIT_SIZE << (lp + lc) cmp x3,t1x
add w2,w2,w0 blo 1b
mov x0,#(kBitModelTotal>>1) // 0.5 starting probability
mov x1,p
orr x0,x0,x0,lsl #16
orr x0,x0,x0,lsl #32
L10:
str x0,[x1],#4*2 // 4 at a time
subs w2,w2,#4; bgt L10
add x0,inPtr,#5 // sentinel mov a6,ldst // &outSizeProcessed
L14: mov a5,t0 // outSize
call rcInit2; cmp x0,inPtr; bne L14 mov a4,dst // outp
sub w2,lsrc,#2 // inSize
mov a1,src // inp
L200: // main loop ldrb t0,[a1],#1 // first byte, replaces LzmaDecodeProperties()
ldr t0x,outBuf and t0,t0,#7 // posBits
ldr t1,posStateMask strb t0,[sp,#2 + State]
sub nowPosx,outPtr,t0x ldrb t0,[a1],#1 // second byte, replaces LzmaDecodeProperties()
and mi,nowPos,t1 lsr t1,t0,#4 // lit_pos_bits
str mi,posState strb t1,[sp,#1 + State]
add mi,mi,state, lsl #kNumPosBitsMax and t0,t0,#0xf // lib_context_bits
add p_in,p,#IsMatch<<1 strb t0,[sp,#0 + State]
call rcGetBit_mi0; bne L270
ldr t0,litPosMask add a0,sp,#State
ldr t1,lc bl 1f // the call
and t0,t0,nowPos mov sp,fp
ldrb mi,prevB
lsl t0,t0,t1 // (nowPos & litPosMask)<<lc
neg t1,t1; add t1,t1,#8 // rsb t1,t1,#8
lsr t1,mi,t1 // prevB >> (8- lc)
add t0,t0,t1
add prob, p,#Literal<<1
add t0,t0,t0,lsl #1 // *3
uxtw t0x,t0
mov symbol,#1
add prob,prob,t0x,lsl #1+ 8 // *768 *2
cmp state,#kNumLitStates; blo L240 eof_lzma:
L205: POP4(x1,x3,x4, lr) // x1= eof_src; r3= orig_dst; r4= plen_dst
sxtw t0x,rep0 SUB2(src,x1) // 0 if actual src length equals expected length
neg t0x,t0x SUB2(dst,x3) // actual dst length
ldrb matchB,[outPtr,t0x] str dstw,[x4]
L210: // symbol === mi === mo mov x4,x0 // save result value
lsl matchB,matchB,#1
add p_in,prob,#0x100<<1
and bit,matchB,#0x100
uxtw t0x,bit
add p_in,p_in,t0x,lsl #1
call rcGetBit_mi
and t0,symbol,#1
cmp t0,bit,lsr #8; bne L243 // break
cmp symbol,#0x100; blo L210
b L245
L240: // symbol === mi === mo
mov p_in,prob
call rcGetBit_mi
L243:
cmp symbol,#0x100; blo L240
L245:
mov t1,#3; mov t0,#6
cmp state,#10; csel t0,t1, t0,lo
cmp state,# 4; csel t0,state,t0,lo
sub state,state,t0
b L298 // assumes symbol===w0
L270:
add p_in,p,#IsRep<<1
call rcGetBit_state0; bne L290
ldr t0,rep2
ldr t1,rep1
str t0,rep3
str t1,rep2
str rep0,rep1
mov t0,#0
cmp state,#kNumLitStates
mov state,#3
csel state,t0,state,lo
add prob, p,#LenCoder<<1
b L350
L290:
add p_in,p,#IsRepG0<<1
call rcGetBit_state0; bne L300
L293:
ldr t0,posState
add p_in,p,#IsRep0Long<<1
add mi,t0,state,lsl #kNumPosBitsMax
call rcGetBit_mi0; bne L340
L295:
mov t0,#9
cmp state,#kNumLitStates
mov state,#11
csel state,t0,state,lo
L297:
ldr t0x,outBuf
sub nowPosx,outPtr,t0x
cmp nowPos,rep0; blo lzmaDataError
sxtw t0x,rep0
neg t0x,t0x
ldrb w0,[outPtr,t0x]
L298:
strb w0,[outPtr],#1
b L519
L300:
add p_in,p,#IsRepG1<<1
call rcGetBit_state0; ldr distance,rep1; beq L330
L310:
add p_in,p,#IsRepG2<<1
call rcGetBit_state0; ldr distance,rep2; beq L325
L320:
ldr t0,rep2
ldr distance,rep3
str t0,rep3
L325:
ldr t0,rep1
str t0,rep2
L330:
str rep0,rep1
mov rep0,distance
L340:
mov t0,#8
cmp state,#kNumLitStates
mov state,#11
csel state,t0,state,lo
add prob, p,#RepLenCoder<<1
L350:
add p_in,prob,#LenChoice<<1
call rcGetBit_0; bne L360
ldr t0,posState
add probLen,prob,#LenLow<<1
uxtw t0x,t0
mov t1,#0
add probLen,probLen,t0x,lsl #1+ kLenNumLowBits
mov hibit,#1<<kLenNumLowBits
b L390
L360:
add p_in,prob,#LenChoice2<<1
call rcGetBit_0; bne L370
ldr t0,posState
add probLen,prob,#LenMid<<1
uxtw t0x,t0
mov t1,#kLenNumLowSymbols
add probLen,probLen,t0x,lsl #1+ kLenNumMidBits
mov hibit,#1<<kLenNumMidBits
b L390
L370:
add probLen,prob,#LenHigh<<1
mov t1,#kLenNumLowSymbols + kLenNumMidSymbols
mov hibit,#1<<kLenNumHighBits
L390:
str t1,m_len
mov mi,#1
L395: // RangeDecoderBitTreeDecode
mov p_in,probLen
call rcGetBit_mi; subs t0,mo,hibit; blo L395
ldr r_len,m_len
add r_len,r_len,t0
str r_len,m_len
cmp state,#4; bhs L500
/*L400:*/
add state,state,#kNumLitStates
mov t0,#kNumLenToPosStates -1
cmp r_len,#kNumLenToPosStates
csel r_len,t0,r_len,hs
uxtw t0x,r_len
add probLit,p,t0x,lsl #1+ kNumPosSlotBits
add probLit,probLit,#PosSlot<<1
mov mi,#1
mov hibit,#1<<kNumPosSlotBits
L403: // RangeDecoderBitTreeDecode
mov p_in,probLit
call rcGetBit_mi; subs r_posSlot,mo,hibit; blo L403
str r_posSlot,posSlot
cmp r_posSlot,#kStartPosModelIndex; blo L460 mov x0,x3 // orig_dst
L405: add x1,x3,dst // orig_dst + dst_len
lsr numDirectBits,r_posSlot,#1 cache_lzma:
sub numDirectBits,numDirectBits,#1 dc cvau,x0 // Clean by VA to point of Unification
and rep0,r_posSlot,#1 ic ivau,x0 // Invalidate by VA to point of Unification
orr rep0,rep0,#2 add x0,x0,#64 // next line
cmp r_posSlot,#kEndPosModelIndex; bhs L410 cmp x0,x1; blo cache_lzma
L407:
lsl rep0,rep0,numDirectBits
add prob,p, #(SpecPos -1)<<1
sub t0,rep0,r_posSlot // r_posSlot dies
uxtw t0x,t0
add prob,prob,t0x,lsl #1
b L438
L410:
sub numDirectBits,numDirectBits,#kNumAlignBits
L420:
call rcNormalize
lsr Range,Range,#1
subs t0,Code,Range
csel Code,t0,Code,hs // if (Code>=Range) Code-=Range;
adc rep0,rep0,rep0 // rep0 = (rep0<<1) + (Code>=Range)
L430:
subs numDirectBits,numDirectBits,#1; bne L420
add prob,p, #Align<<1
lsl rep0,rep0,#kNumAlignBits
mov numDirectBits,#kNumAlignBits
L438:
mov i,#1
mov mi,#1
L440:
mov p_in,prob; call rcGetBit_mi
tst mo,#1; beq L445
orr rep0,rep0,i
L445:
lsl i,i,#1
subs numDirectBits,numDirectBits,#1; bne L440
b L465
L450:
L460:
ldr rep0,posSlot
L465:
adds rep0,rep0,#1
#if 0 /*{ only for the stream version */
bne L470
mov t0,#kLzmaStreamWasFinishedId
str t0,m_len
b L530
L470:
#endif /*}*/
ldr r_len,m_len
L500:
ldr t0x,outBuf
add r_len,r_len,#kMatchMinLen
sub t0x,outPtr,t0x // nowPos
cmp rep0,t0; bhi lzmaDataError
sxtw t0x,rep0
neg t0x,t0x
L510: // const t0x= -rep0;
ldrb w0,[outPtr,t0x]
strb w0,[outPtr],#1
cmp outPtr,outLim; bhs L530
subs r_len,r_len,#1; bne L510
// FIXME: prfm PLDL1KEEP,outPtr,#32 // fetch next cache line
L519:
strb w0,prevB // implicit &0xFF
L520: // bottom of while loop
cmp outPtr,outLim; blo L200
L530:
call rcNormalize
mov w0,#0 // success
lzmaExit:
ldr t1x,inBuf
sub t0x,inPtr,t1x
ldr t1x,inSizeProcessed
str t0,[t1x]
ldr t1x,outBuf mov x0,x4 // result value
sub t0x,outPtr,t1x
ldr t1x,outSizeProcessed
str t0,[t1x]
add sp,sp,#(14+1)*4
// FIXME ldmia sp!,{r4,r5,r6,r7, r8,r9,r10,r11, pc}
lzmaDataError:
mov w0,#1 // failure
b lzmaExit
rcNormalize:
lsr t0,Range,#kNumTopBits
cbnz t0,retNorm
rcLoad:
cmp inPtr,inLim
lsl Range,Range,#8
bhs lzmaDataError
rcInit2:
ldrb t0,[inPtr],#1
orr Code,t0,Code, lsl #8
retNorm:
ret ret
rcGetBit_state0: // rcGetBit(0, state + p_in)
mov mi,state
rcGetBit_mi0: // rcGetBit(0, mi + p_in)
add p_in,p_in,mi, uxtw #1
rcGetBit_0: // rcGetBit(0, p_in)
mov mi,#0
rcGetBit_mi: // rcGetBit(mi, mi + p_in)
add p_in,p_in,mi, uxtw #1
rcGetBit: // Out: CC set on mo
lsr t0,Range,#kNumTopBits
mov t2x,x30 // save lr if need rcLoad
adr x30,rcGetBitCont; cbz t0,rcLoad // conditional subroutine call
rcGetBitCont:
#define starp t0
#define bound t1
#define y0tmp t1
ldrh starp,[p_in]
lsr y0tmp,Range,#kNumBitModelTotalBits
mul bound,starp,y0tmp
cmp Code,bound; bhs rcGB1
rcGB0: // Code < bound
mov y0tmp,#kBitModelTotal
mov Range,bound
sub y0tmp,y0tmp,starp
adcs mo,mi,mi // mo = (mi<<1) | (Code >= bound); set CC
add starp,starp,y0tmp, lsr #kNumMoveBits
strh starp,[p_in]
ret t2x
rcGB1: // Code >= bound
sub Code,Code,bound
sub Range,Range,bound
sub starp,starp,starp, lsr #kNumMoveBits
adcs mo,mi,mi // mo = (mi<<1) | (Code >= bound); set CC
strh starp,[p_in]
ret t2x
#undef y0tmp
#undef bound
#undef starp
#undef t1x
#undef t1
#undef t0x
#undef t0 #undef t0
#undef t1
#undef t1x
#undef lsrc
#undef ldst
#undef meth
#undef a0
#undef a1
#undef a2
#undef a3
#undef a4
#undef a5
#undef a6
1: // entry to C-lang LzmaDecode
section LZMA_DEC20
#include "lzma_d_cf.S"
section LZMA_DEC10
#if 0 /*{*/
#include "lzma_d_cs.S"
#else /*}{*/
#define PARAMETER_STYLE 3
#include "lzma_d-arm.S"
#endif /*}*/
section LZMA_DEC30
not_lzma:
// vi:ts=8:et // vi:ts=8:et
+147 -441
View File
@@ -1,441 +1,147 @@
// .section .text.LzmaDecode,"ax",%progbits /* 0x0000 */ .byte 243, 83,184,169, 39, 0,128, 82, 20, 16, 0,145,245, 91, 1,169
// .align 2 /* 0x0010 */ .byte 247, 99, 2,169,249,107, 3,169,251,115, 4,169,254, 43, 0,249
// .global LzmaDecode /* 0x0020 */ .byte 8, 4, 64, 57, 26, 8, 64, 57, 28, 0, 64, 57,127, 0, 0,185
// .type LzmaDecode, %function /* 0x0030 */ .byte 250, 32,218, 26,223, 0, 0,185,231, 32,200, 26,231, 4, 0, 81
//LzmaDecode: /* 0x0040 */ .byte 231,111, 0,185, 8, 4, 64, 57, 7, 96,128, 82, 90, 7, 0, 81
stp x29, x30, [sp, -112]! /* 0x0050 */ .byte 8, 1, 28, 11,232, 32,200, 26, 8,217, 28, 49,224, 0, 0, 84
mov w8, 1024 /* 0x0060 */ .byte 7, 0,128,210, 9,128,128, 82,137,122, 39,120,231, 4, 0,145
add x29, sp, 0 /* 0x0070 */ .byte 31, 1, 7,107,168,255,255, 84, 51, 64, 34,139,127, 2, 1,235
stp x19, x20, [sp, 16] /* 0x0080 */ .byte 0, 15, 0, 84,235, 3, 1,170, 34, 4, 0,145,103, 85, 64, 56
stp x21, x22, [sp, 32] /* 0x0090 */ .byte 127, 2, 2,235, 96, 14, 0, 84, 72, 20, 64, 56,127, 1, 2,235
stp x23, x24, [sp, 48] /* 0x00a0 */ .byte 7, 33, 7, 42, 97,255,255, 84, 37, 68, 0, 52, 9,176, 41,145
stp x25, x26, [sp, 64] /* 0x00b0 */ .byte 59, 0,128, 82,233, 63, 0,249, 9, 1,128, 82, 41, 1, 28, 75
ldp w19, w15, [x0] /* 0x00c0 */ .byte 10, 0,128, 18,245, 3, 27, 42, 25, 0,128, 82, 8, 0,128, 82
ldr w14, [x0, 8] /* 0x00d0 */ .byte 2, 0,128, 82, 16,224,191, 18, 17, 0,129, 82,251,107, 0,185
ldr x11, [x0, 16] /* 0x00e0 */ .byte 251,115, 0,185,233,119, 0,185, 78, 0, 26, 10, 44,111, 28, 83
str wzr, [x3] /* 0x00f0 */ .byte 95, 1, 16,107,201,125, 64,147, 44,193, 44,139,143,249,127,211
str wzr, [x6] /* 0x0100 */ .byte 232, 0, 0, 84,127, 2, 11,235,192, 10, 0, 84,105, 1, 64, 57
ldr w7, [x0, 4] /* 0x0110 */ .byte 74, 93, 24, 83,107, 5, 0,145, 39, 33, 7, 42,141,122,108,120
mov w0, 768 /* 0x0120 */ .byte 73,125, 11, 83,169,125, 9, 27,255, 0, 9,107,162, 10, 0, 84
add w7, w19, w7 /* 0x0130 */ .byte 234,211, 65, 57, 63, 27, 0,113, 8, 41,202, 26,234,111, 64,185
lsl w7, w0, w7 /* 0x0140 */ .byte 79, 0, 10, 10,239, 33,220, 26,239, 1, 8, 11, 40, 2, 13, 75
mov w0, 1 /* 0x0150 */ .byte 234,117, 30, 83, 79, 1, 15, 75,173, 21,136, 11,239, 93,120,211
adds w7, w7, 1846 /* 0x0160 */ .byte 141,122, 44,120,239,217, 28,145,143, 6, 15,139, 45, 31, 0, 84
lsl w14, w0, w14 /* 0x0170 */ .byte 72, 0, 21, 75,146,104,104, 56, 40, 0,128, 82, 7, 0, 0, 20
lsl w0, w0, w15 /* 0x0180 */ .byte 236,121, 42,120, 8,121, 31, 83,233, 3, 14, 42,205, 56, 0, 53
sub w14, w14, #1 /* 0x0190 */ .byte 31,253, 3,113,204, 3, 0, 84, 82,122, 31, 83, 63, 1, 16,107
sub w15, w0, #1 /* 0x01a0 */ .byte 77, 2, 24, 18, 22,121, 31, 83,170,125, 64,147, 74, 1, 4,145
mov x0, 0 /* 0x01b0 */ .byte 74,193, 40,139,232, 0, 0, 84,127, 1, 19,235, 41, 93, 24, 83
beq .L22 /* 0x01c0 */ .byte 0, 5, 0, 84,108, 1, 64, 57,107, 5, 0,145,135, 33, 7, 42
.L79: /* 0x01d0 */ .byte 236,121,106,120, 46,125, 11, 83, 55, 2, 12, 75,142,125, 14, 27
strh w8, [x11, x0, lsl 1] /* 0x01e0 */ .byte 152, 21, 76, 75,140, 21,151, 11,255, 0, 14,107, 41, 1, 14, 75
add x0, x0, 1 /* 0x01f0 */ .byte 131,252,255, 84,248,121, 42,120,200, 6, 0, 17,231, 0, 14, 75
cmp w7, w0 /* 0x0200 */ .byte 141,252,255, 53, 31,253, 3,113, 45, 27, 0, 84, 8, 29, 0, 83
bhi .L79 /* 0x0210 */ .byte 234, 3, 9, 42,136, 72, 34, 56, 66, 4, 0, 17, 63, 39, 0,113
.L22: /* 0x0220 */ .byte 140, 49, 0, 84, 57, 15, 0, 81,191, 0, 2,107,232,245,255, 84
add x2, x1, x2, uxtw /* 0x0230 */ .byte 0,224,191, 18, 95, 1, 0,107,136, 0, 0, 84,127, 2, 11,235
mov w27, 0 /* 0x0240 */ .byte 0, 1, 0, 84,107, 5, 0,145, 97, 1, 1,203, 97, 0, 0,185
str x2, [x29, 96] /* 0x0250 */ .byte 0, 0,128, 82,194, 0, 0,185, 3, 0, 0, 20, 31, 32, 3,213
mov w28, -1 /* 0x0260 */ .byte 32, 0,128, 82,245, 91, 65,169,247, 99, 66,169,249,107, 67,169
add x0, x1, 1 /* 0x0270 */ .byte 251,115, 68,169,254, 43, 64,249,243, 83,200,168,192, 3, 95,214
add x10, x1, 6 /* 0x0280 */ .byte 74, 1, 9, 75,173, 21, 77, 75,231, 0, 9, 75,141,122, 44,120
add x2, x2, 1 /* 0x0290 */ .byte 41,127, 64,147, 95, 1, 16,107, 41, 1, 3,145, 45,249,127,211
.L20: /* 0x02a0 */ .byte 232, 0, 0, 84,127, 1, 19,235,192,253,255, 84,104, 1, 64, 57
cmp x0, x2 /* 0x02b0 */ .byte 74, 93, 24, 83,107, 5, 0,145, 7, 33, 7, 42,140,122,105,120
mov x8, x0 /* 0x02c0 */ .byte 72,125, 11, 83,136,125, 8, 27,255, 0, 8,107, 98, 25, 0, 84
beq .L41 /* 0x02d0 */ .byte 234,107, 64,185, 63, 31, 0,113,251,115, 64,185,234,115, 0,185
str x0, [x29, 104] /* 0x02e0 */ .byte 42, 2, 12, 75,245,107, 0,185,140, 21,138, 11,140,122, 41,120
add x0, x0, 1 /* 0x02f0 */ .byte 105, 0,128, 82,249,179,137, 26, 9,160, 25,145, 31, 1, 16,107
cmp x0, x10 /* 0x0300 */ .byte 232, 0, 0, 84,127, 2, 11,235,192,250,255, 84,106, 1, 64, 57
ldrb w7, [x0, -2] /* 0x0310 */ .byte 8, 93, 24, 83,107, 5, 0,145, 71, 33, 7, 42, 44, 1, 64,121
orr w27, w7, w27, lsl 8 /* 0x0320 */ .byte 10,125, 11, 83,138,125, 10, 27,255, 0, 10,107,226, 30, 0, 84
bne .L20 /* 0x0330 */ .byte 210,113, 29, 83, 40, 2, 12, 75, 22, 0,128, 82,126, 0,128, 82
stp x1, x6, [x29, 80] /* 0x0340 */ .byte 82,126, 64,147,140, 21,136, 11, 82, 10, 0,145, 44, 1, 0,121
mov x9, x4 /* 0x0350 */ .byte 50, 5, 18,139,238, 3, 30, 42, 45, 0,128, 82, 6, 0, 0, 20
mov x25, x3 /* 0x0360 */ .byte 232, 1, 0,121,206, 5, 0,113,173,121, 31, 83,234, 3, 9, 42
cbz w5, .L63 /* 0x0370 */ .byte 32, 3, 0, 84, 95, 1, 16,107,183,121, 31, 83, 79,198, 45,139
mov w23, 1 /* 0x0380 */ .byte 232, 0, 0, 84,127, 2, 11,235, 74, 93, 24, 83,160,246,255, 84
mov w26, 8 /* 0x0390 */ .byte 104, 1, 64, 57,107, 5, 0,145, 7, 33, 7, 42,232, 1, 64,121
mov w22, w23 /* 0x03a0 */ .byte 73,125, 11, 83, 44, 2, 8, 75, 9,125, 9, 27, 24, 21, 72, 75
mov w21, w23 /* 0x03b0 */ .byte 8, 21,140, 11,255, 0, 9,107, 74, 1, 9, 75, 35,253,255, 84
mov w7, w23 /* 0x03c0 */ .byte 248, 1, 0,121,206, 5, 0,113,231, 0, 9, 75,237, 6, 0, 17
mov w10, 0 /* 0x03d0 */ .byte 33,253,255, 84, 40, 0,128, 82, 63, 15, 0,113, 30, 33,222, 26
mov w13, 0 /* 0x03e0 */ .byte 222, 2, 30, 75,205, 3, 13, 11,236, 22, 0, 84,191, 13, 0,113
mov w6, 0 /* 0x03f0 */ .byte 104, 0,128, 82,181,209,136, 26,207, 0,128, 82,181,102, 26, 83
sub w20, w26, w19 /* 0x0400 */ .byte 46, 0,128, 82,181,126, 64,147,181,194, 6,145,181,250,127,211
.L60: /* 0x0410 */ .byte 7, 0, 0, 20, 31, 32, 3,213,136,106, 50,120,239, 5, 0,113
and w12, w14, w6 /* 0x0420 */ .byte 206,121, 31, 83,234, 3, 9, 42, 32, 3, 0, 84, 95, 1, 16,107
lsl w8, w10, 4 /* 0x0430 */ .byte 214,121, 31, 83,178,198, 46,139,232, 0, 0, 84,127, 2, 11,235
add x18, x29, 96 /* 0x0440 */ .byte 74, 93, 24, 83,224,240,255, 84,104, 1, 64, 57,107, 5, 0,145
mov w0, 0 /* 0x0450 */ .byte 7, 33, 7, 42,136,106,114,120, 73,125, 11, 83, 44, 2, 8, 75
sxtw x1, w12 /* 0x0460 */ .byte 9,125, 9, 27, 23, 21, 72, 75, 8, 21,140, 11,255, 0, 9,107
add x8, x1, x8, sxtw /* 0x0470 */ .byte 74, 1, 9, 75, 35,253,255, 84,151,106, 50,120,239, 5, 0,113
lsl x8, x8, 1 /* 0x0480 */ .byte 231, 0, 9, 75,206, 6, 0, 17, 33,253,255, 84,213, 1, 1, 81
add x1, x11, x8 /* 0x0490 */ .byte 191, 14, 0,113, 45, 17, 0, 84,191, 54, 0,113,168, 2, 0, 18
bl rcGetBit.2736 /* 0x04a0 */ .byte 8, 1, 31, 50,169,126, 1, 19, 44, 32, 0, 84, 47, 5, 0, 81
cbnz w0, .L26 /* 0x04b0 */ .byte 9, 86,128,210, 46,193, 53,203, 21, 33,207, 26,206, 65, 53,139
and w0, w15, w6 /* 0x04c0 */ .byte 142, 6, 14,139,206, 9, 0,209, 50, 0,128, 82,247, 3, 18, 42
asr w8, w13, w20 /* 0x04d0 */ .byte 8, 0, 0, 20, 31, 32, 3,213,200, 2, 0,121, 82,122, 31, 83
lsl w0, w0, w19 /* 0x04e0 */ .byte 234, 3, 9, 42,239, 5, 0,113,247,122, 31, 83, 96, 14, 0, 84
cmp w10, 6 /* 0x04f0 */ .byte 95, 1, 16,107, 88,122, 31, 83,214,197, 50,139,232, 0, 0, 84
add w8, w0, w8 /* 0x0500 */ .byte 127, 2, 11,235, 74, 93, 24, 83,192,234,255, 84,104, 1, 64, 57
lsl w0, w8, 2 /* 0x0510 */ .byte 107, 5, 0,145, 7, 33, 7, 42,200, 2, 64,121, 73,125, 11, 83
sub w8, w0, w8 /* 0x0520 */ .byte 44, 2, 8, 75, 9,125, 9, 27, 30, 21, 72, 75, 8, 21,140, 11
ubfiz x8, x8, 8, 24 /* 0x0530 */ .byte 255, 0, 9,107, 74, 1, 9, 75, 3,253,255, 84,222, 2, 0,121
add x8, x8, 1846 /* 0x0540 */ .byte 231, 0, 9, 75,181, 2, 23, 42, 18, 7, 0, 17,230,255,255, 23
add x8, x11, x8, lsl 1 /* 0x0550 */ .byte 40, 0,128, 82, 6, 0, 0, 20, 8,121, 31, 83,234,121, 46,120
ble .L64 /* 0x0560 */ .byte 31,253, 3,113,233, 3, 12, 42, 44, 3, 0, 84, 63, 1, 16,107
sub w0, w6, w7 /* 0x0570 */ .byte 18,121, 31, 83, 14,125, 64,147,232, 0, 0, 84,127, 2, 11,235
mov w2, 1 /* 0x0580 */ .byte 41, 93, 24, 83,224,230,255, 84,106, 1, 64, 57,107, 5, 0,145
ldrb w12, [x9, x0] /* 0x0590 */ .byte 71, 33, 7, 42,234,121,110,120, 44,125, 11, 83, 45, 2, 10, 75
b .L32 /* 0x05a0 */ .byte 76,125, 12, 27, 86, 21, 74, 75, 74, 21,141, 11,255, 0, 12,107
.L96: /* 0x05b0 */ .byte 41, 1, 12, 75, 35,253,255, 84, 72, 6, 0, 17,246,121, 46,120
cbnz w13, .L29 /* 0x05c0 */ .byte 31,253, 3,113,231, 0, 12, 75, 45,253,255, 84, 8, 29, 0, 83
.L30: /* 0x05d0 */ .byte 63, 15, 0,113,136, 72, 34, 56,234, 3, 9, 42, 66, 4, 0, 17
cmp w2, 255 /* 0x05e0 */ .byte 236,225,255, 84,191, 0, 2,107, 25, 0,128, 82,232,215,255, 84
bgt .L31 /* 0x05f0 */ .byte 16,255,255, 23, 31, 32, 3,213, 74, 1, 8, 75,140, 21, 76, 75
.L32: /* 0x0600 */ .byte 95, 1, 16,107,140,122, 41,120,231, 0, 8, 75,169, 97, 0,145
lsl w12, w12, 1 /* 0x0610 */ .byte 232, 0, 0, 84,127, 2, 11,235, 64,226,255, 84,104, 1, 64, 57
mov w0, w2 /* 0x0620 */ .byte 74, 93, 24, 83,107, 5, 0,145, 7, 33, 7, 42,140,106,105,120
and w13, w12, 256 /* 0x0630 */ .byte 72,125, 11, 83,136,125, 8, 27,255, 0, 8,107,226, 9, 0, 84
add x18, x29, 96 /* 0x0640 */ .byte 42, 2, 12, 75, 31, 1, 16,107,239,129, 7,145,140, 21,138, 11
sxtw x1, w13 /* 0x0650 */ .byte 140,106, 41,120,232, 0, 0, 84,127, 2, 11,235, 32,224,255, 84
add x1, x1, 256 /* 0x0660 */ .byte 105, 1, 64, 57, 8, 93, 24, 83,107, 5, 0,145, 39, 33, 7, 42
add x1, x1, x2, sxtw /* 0x0670 */ .byte 137,106,111,120, 10,125, 11, 83, 42,125, 10, 27,255, 0, 10,107
add x1, x8, x1, lsl 1 /* 0x0680 */ .byte 130, 16, 0, 84, 40, 2, 9, 75, 41, 21,136, 11,137,106, 47,120
bl rcGetBit.2736 /* 0x0690 */ .byte 130,222,255, 52, 72, 0, 21, 75, 63, 31, 0,113, 41, 1,128, 82
mov w2, w0 /* 0x06a0 */ .byte 108, 1,128, 82, 57,177,140, 26,136,104,104, 56,136, 72, 34, 56
tbz x2, 0, .L96 /* 0x06b0 */ .byte 66, 4, 0, 17,221,254,255, 23,181, 6, 0, 49,160,219,255, 84
cbnz w13, .L30 /* 0x06c0 */ .byte 57, 31, 0, 17,191, 2, 2,107,173, 9, 0, 17,168,220,255, 84
.L29: /* 0x06d0 */ .byte 233, 3, 2, 42, 72, 0, 21, 75,173, 5, 0, 81, 66, 4, 0, 17
cmp w2, 255 /* 0x06e0 */ .byte 191, 1, 31,107,160, 16, 66,122,136,104,104, 56,136, 72, 41, 56
bgt .L31 /* 0x06f0 */ .byte 233, 3, 2, 42, 8,255,255, 84,191, 0, 2,107,104,207,255, 84
.L33: /* 0x0700 */ .byte 204,254,255, 23, 31, 32, 3,213, 8, 1, 10, 75,140, 21, 76, 75
add x1, x8, x2, sxtw 1 /* 0x0710 */ .byte 31, 1, 16,107, 44, 1, 0,121,231, 0, 10, 75,232, 0, 0, 84
mov w0, w2 /* 0x0720 */ .byte 127, 2, 11,235,224,217,255, 84,106, 1, 64, 57, 8, 93, 24, 83
add x18, x29, 96 /* 0x0730 */ .byte 107, 5, 0,145, 71, 33, 7, 42, 44, 5, 64,121, 10,125, 11, 83
bl rcGetBit.2736 /* 0x0740 */ .byte 138,125, 10, 27,255, 0, 10,107, 66, 7, 0, 84,210,113, 29, 83
cmp w0, 255 /* 0x0750 */ .byte 40, 2, 12, 75, 22, 1,128, 82,126, 0,128, 82, 82,126, 64,147
mov w2, w0 /* 0x0760 */ .byte 136, 21,136, 11, 82, 10, 2,145, 40, 5, 0,121, 50, 5, 18,139
ble .L33 /* 0x0770 */ .byte 249,254,255, 23, 31, 32, 3,213, 74, 1, 8, 75,231, 0, 8, 75
uxtb w13, w0 /* 0x0780 */ .byte 95, 1, 16,107,136, 21, 76, 75,136,106, 41,120,172,193, 0,145
cmp w10, 3 /* 0x0790 */ .byte 232, 0, 0, 84,127, 2, 11,235, 64,214,255, 84,104, 1, 64, 57
strb w13, [x9, w6, uxtw] /* 0x07a0 */ .byte 74, 93, 24, 83,107, 5, 0,145, 7, 33, 7, 42,137,106,108,120
add w6, w6, 1 /* 0x07b0 */ .byte 72,125, 11, 83, 40,125, 8, 27,255, 0, 8,107, 35, 5, 0, 84
bgt .L62 /* 0x07c0 */ .byte 74, 1, 8, 75, 41, 21, 73, 75, 95, 1, 16,107,137,106, 44,120
mov w10, 0 /* 0x07d0 */ .byte 231, 0, 8, 75,173, 33, 1,145,232, 0, 0, 84,127, 2, 11,235
.L34: /* 0x07e0 */ .byte 0,212,255, 84,104, 1, 64, 57, 74, 93, 24, 83,107, 5, 0,145
cmp w5, w6 /* 0x07f0 */ .byte 7, 33, 7, 42,137,106,109,120, 72,125, 11, 83, 40,125, 8, 27
bhi .L60 /* 0x0800 */ .byte 255, 0, 8,107,226, 7, 0, 84,234, 3, 21, 42,236,107, 64,185
.L58: /* 0x0810 */ .byte 234,107, 0,185, 42, 2, 9, 75,245,115, 64,185, 41, 21,138, 11
mov w1, 16777215 /* 0x0820 */ .byte 236,115, 0,185,137,106, 45,120, 20, 0, 0, 20, 31, 32, 3,213
cmp w28, w1 /* 0x0830 */ .byte 231, 0, 10, 75, 50, 17, 8,145, 10, 1, 10, 75, 22, 2,128, 82
bhi .L97 /* 0x0840 */ .byte 136, 21, 76, 75, 30, 1,128, 82, 40, 5, 0,121,194,254,255, 23
ldp x2, x1, [x29, 96] /* 0x0850 */ .byte 191, 0, 2,107, 57, 27, 0, 81,136,196,255, 84,117,254,255, 23
cmp x1, x2 /* 0x0860 */ .byte 234, 3, 21, 42,245,107, 64,185,234,107, 0,185, 42, 2, 9, 75
beq .L41 /* 0x0870 */ .byte 41, 21,138, 11,137,106, 44,120, 63, 31, 0,113, 10, 1,128, 82
add x8, x1, 1 /* 0x0880 */ .byte 108, 1,128, 82,233, 63, 64,249, 89,177,140, 26,156,254,255, 23
str x8, [x29, 104] /* 0x0890 */ .byte 41, 21, 73, 75, 8, 1, 10, 75,137,106, 47,120,231, 0, 10, 75
lsl w28, w28, 8 /* 0x08a0 */ .byte 246,255,255, 23,233, 3, 14, 42, 87,254,255, 23, 41, 21, 0, 81
ldrb w0, [x1] /* 0x08b0 */ .byte 95, 1, 16,107, 8,121, 31, 83,232, 0, 0, 84,127, 2, 11,235
orr w27, w0, w27, lsl 8 /* 0x08c0 */ .byte 74, 93, 24, 83,224,204,255, 84,108, 1, 64, 57,107, 5, 0,145
.L25: /* 0x08d0 */ .byte 135, 33, 7, 42, 74,125, 1, 83,255, 0, 10,107, 99, 0, 0, 84
ldr x0, [x29, 80] /* 0x08e0 */ .byte 231, 0, 10, 75, 8, 1, 0, 50, 41, 5, 0,113, 33,254,255, 84
ldp x19, x20, [sp, 16] /* 0x08f0 */ .byte 21,109, 28, 83, 14, 32, 25,145,143, 0,128, 82,243,254,255, 23
sub x8, x8, x0 /* 0x0900 */ .byte 41, 21, 73, 75,137,106, 45,120,233,107, 64,185,236, 3, 21, 42
ldr x0, [x29, 88] /* 0x0910 */ .byte 231, 0, 8, 75,245, 3, 27, 42, 72, 1, 8, 75,251,115, 64,185
str w8, [x25] /* 0x0920 */ .byte 236,107, 0,185,233,115, 0,185,212,255,255, 23, 2, 0,128, 82
ldp x21, x22, [sp, 32]
str w6, [x0]
mov w0, 0
ldp x23, x24, [sp, 48]
ldp x25, x26, [sp, 64]
ldp x29, x30, [sp], 112
ret
.L64:
mov w2, 1
b .L33
.L31:
uxtb w13, w2
strb w13, [x9, w6, uxtw]
add w6, w6, 1
.L62:
cmp w10, 9
bgt .L35
sub w10, w10, #3
b .L34
.L26:
sxtw x13, w10
add x18, x29, 96
add x13, x13, 192
mov w0, 0
lsl x13, x13, 1
add x1, x11, x13
bl rcGetBit.2736
cbnz w0, .L36
mov w0, 3
cmp w10, 6
mov w23, w22
csel w10, w0, wzr, gt
mov w22, w21
add x24, x11, 1636
mov w21, w7
.L38:
add x18, x29, 96
mov x1, x24
mov w0, 0
bl rcGetBit.2736
cbnz w0, .L44
lsl w12, w12, 3
mov w8, -8
mov w13, 3
sxtw x12, w12
add x12, x12, 2
add x12, x24, x12, lsl 1
.L45:
mov w0, 1
.L47:
add x18, x29, 96
add x1, x12, x0, uxtw 1
bl rcGetBit.2736
subs w13, w13, #1
bne .L47
cmp w10, 3
add w8, w0, w8
bgt .L48
mov w7, 3
mov w12, 6
cmp w8, w7
mov w0, 1
csel w7, w8, w7, le
lsl w7, w7, 6
sxtw x7, w7
add x7, x7, 432
lsl x7, x7, 1
.L49:
add x1, x7, x0, uxtw 1
add x18, x29, 96
add x1, x11, x1
bl rcGetBit.2736
subs w12, w12, #1
bne .L49
sub w7, w0, #64
add w10, w10, 7
cmp w7, 3
mov w12, w7
ble .L50
cmp w7, 13
and w0, w7, 1
asr w1, w7, 1
orr w7, w0, 2
bgt .L51
sub w13, w1, #1
mov x0, 688
lsl w7, w7, w13
sub x12, x0, x12, sxtw
add x12, x12, x7, uxtw
add x12, x11, x12, lsl 1
sub x12, x12, #2
.L52:
mov w0, 1
mov w24, w0
.L57:
add x1, x12, x0, sxtw 1
add x18, x29, 96
bl rcGetBit.2736
and w3, w0, 1
orr w1, w7, w24
cmp w3, wzr
csel w7, w1, w7, ne
subs w13, w13, #1
lsl w24, w24, 1
bne .L57
.L50:
adds w7, w7, 1
beq .L58
.L48:
cmp w7, w6
add w0, w8, 2
bhi .L41
mov w1, w6
.L59:
sub w2, w6, w7
sub w0, w0, #1
add w6, w6, 1
cmp w0, wzr
ccmp w5, w6, 0, ne
ldrb w13, [x9, x2]
strb w13, [x9, w1, uxtw]
mov w1, w6
bhi .L59
b .L34
.L35:
sub w10, w10, #6
b .L34
.L36:
add x1, x13, 24
add x18, x29, 96
add x1, x11, x1
mov w0, 0
bl rcGetBit.2736
cbnz w0, .L39
add x1, x8, 480
add x18, x29, 96
add x1, x11, x1
bl rcGetBit.2736
cbnz w0, .L67
cbz w6, .L41
sub w0, w6, w7
cmp w10, 6
mov w10, 11
ldrb w13, [x9, x0]
mov w0, 9
strb w13, [x9, w6, uxtw]
csel w10, w10, w0, gt
add w6, w6, 1
b .L34
.L44:
add x18, x29, 96
add x1, x24, 2
mov w0, 0
bl rcGetBit.2736
mov w8, w0
cbnz w0, .L46
lsl w0, w12, 3
mov w13, 3
sxtw x0, w0
add x0, x0, 130
add x12, x24, x0, lsl 1
b .L45
.L39:
add x1, x13, 48
add x18, x29, 96
add x1, x11, x1
mov w0, 0
bl rcGetBit.2736
cbnz w0, .L98
.L40:
cmp w10, 6
mov w0, w7
mov w10, 11
mov w7, w21
csel w10, w10, w26, gt
mov w21, w0
add x24, x11, 2664
b .L38
.L46:
add x12, x24, 516
mov w8, -240
mov w13, 8
b .L45
.L41:
ldp x19, x20, [sp, 16]
ldp x21, x22, [sp, 32]
ldp x23, x24, [sp, 48]
ldp x25, x26, [sp, 64]
mov w0, 1
ldp x29, x30, [sp], 112
ret
.L51:
ldr x12, [x29, 96]
sub w1, w1, #5
mov w3, 16777215
.L55:
cmp w28, w3
lsl w7, w7, 1
bhi .L53
ldr x2, [x29, 104]
cmp x2, x12
add x4, x2, 1
beq .L41
str x4, [x29, 104]
lsl w28, w28, 8
ldrb w0, [x2]
orr w27, w0, w27, lsl 8
.L53:
lsr w0, w28, 1
cmp w0, w27
mov w28, w0
bhi .L54
sub w27, w27, w0
orr w7, w7, 1
.L54:
subs w1, w1, #1
bne .L55
lsl w7, w7, 4
add x12, x11, 1604
mov w13, 4
b .L52
.L67:
mov w0, w21
mov w21, w7
mov w7, w0
b .L40
.L98:
add x1, x13, 72
add x18, x29, 96
add x1, x11, x1
mov w0, 0
bl rcGetBit.2736
cbnz w0, .L69
mov w0, w21
mov w21, w22
mov w22, w0
b .L40
.L69:
mov w0, w21
mov w21, w23
mov w23, w22
mov w22, w0
b .L40
.L97:
ldr x8, [x29, 104]
b .L25
.L63:
mov w6, 0
b .L25
// .size LzmaDecode, .-LzmaDecode
// .section .text.rcGetBit.2736,"ax",%progbits
// .align 2
// .type rcGetBit.2736, %function
rcGetBit.2736:
mov w3, 16777215
cmp w28, w3
bhi .L2
ldp x4, x3, [x18]
cmp x3, x4
beq .L5
add x4, x3, 1
str x4, [x18, 8]
lsl w28, w28, 8
ldrb w2, [x3]
orr w27, w2, w27, lsl 8
.L2:
ldrh w3, [x1]
lsr w2, w28, 11
mul w2, w2, w3
cmp w2, w27
bhi .L7
lsl w0, w0, 1
sub w3, w3, w3, lsr 5
sub w27, w27, w2
sub w28, w28, w2
strh w3, [x1]
add w0, w0, 1
ret
.L7:
mov w4, 2048
mov w28, w2
sub w2, w4, w3
lsl w0, w0, 1
add w3, w3, w2, asr 5
strh w3, [x1]
ret
.L5:
mov w0, 1
ret
// .size rcGetBit.2736, .-rcGetBit.2736
// .ident "GCC: (GNU) 5.2.1 20151104 (Red Hat Cross 5.2.1-4)"
// .section .note.GNU-stack,"",%progbits
+140
View File
@@ -0,0 +1,140 @@
/* 0x0000 */ .byte 243, 83,184,169, 39, 0,128, 82, 12, 16, 0,145,245, 91, 1,169
/* 0x0010 */ .byte 247, 99, 2,169,249,107, 3,169,251,115, 4,169,254, 43, 0,249
/* 0x0020 */ .byte 9,128,128, 82, 8, 8, 64, 57, 23, 0, 64, 57,232, 32,200, 26
/* 0x0030 */ .byte 8, 5, 0, 81,232,111, 0,185, 8, 4, 64, 57,127, 0, 0,185
/* 0x0040 */ .byte 231, 32,200, 26,223, 0, 0,185,231, 4, 0, 81,231,123, 0,185
/* 0x0050 */ .byte 7, 4, 64, 57, 8, 96,128, 82,231, 0, 23, 11, 7, 33,199, 26
/* 0x0060 */ .byte 8, 0,128,210,231,216, 28, 17,255, 0, 8,107,137, 0, 0, 84
/* 0x0070 */ .byte 137,121, 40,120, 8, 5, 0,145,252,255,255, 23, 34, 64, 34,139
/* 0x0080 */ .byte 41, 20, 0,145,231, 3, 1,170, 8, 0,128, 82, 95, 0, 7,235
/* 0x0090 */ .byte 97, 0, 0, 84, 32, 0,128, 82, 1, 2, 0, 20,234, 20, 64, 56
/* 0x00a0 */ .byte 63, 1, 7,235, 72, 33, 8, 42, 33,255,255, 84, 53, 0,128, 82
/* 0x00b0 */ .byte 11,176, 41,145, 24, 1,128, 82,235, 59, 0,249, 7, 0,128, 18
/* 0x00c0 */ .byte 11, 3, 23, 75,254, 3, 21, 42,243, 3, 21, 42,234, 3, 21, 42
/* 0x00d0 */ .byte 13, 0,128, 82, 26, 0,128, 82, 14, 0,128, 82, 17,224,191, 18
/* 0x00e0 */ .byte 18, 0,129, 82,121, 1,128, 82,235,127, 0,185,223, 1, 5,107
/* 0x00f0 */ .byte 34, 60, 0, 84,235,111, 64,185,175,109, 28, 83,255, 0, 17,107
/* 0x0100 */ .byte 212, 1, 11, 10,139,126, 64,147,111,193, 47,139,239,249,127,211
/* 0x0110 */ .byte 232, 0, 0, 84, 63, 1, 2,235,224,251,255, 84, 43, 1, 64, 57
/* 0x0120 */ .byte 231, 92, 24, 83, 41, 5, 0,145,104, 33, 8, 42,150,105,111,120
/* 0x0130 */ .byte 240,124, 11, 83,208,126, 16, 27, 31, 1, 16,107,130, 12, 0, 84
/* 0x0140 */ .byte 71, 2, 22, 75,191, 25, 0,113,214, 22,135, 11,231,123, 64,185
/* 0x0150 */ .byte 150,105, 47,120,239,243, 65, 57,199, 1, 7, 10,231, 32,215, 26
/* 0x0160 */ .byte 75, 43,207, 26,246, 0, 11, 11, 7, 96,128, 82,214,126, 7, 27
/* 0x0170 */ .byte 214,218, 28,145,150, 5, 22,139,108, 0, 0, 84, 43, 0,128, 82
/* 0x0180 */ .byte 26, 0, 0, 20,199, 1, 10, 75, 43, 0,128, 82,154,104,103, 56
/* 0x0190 */ .byte 231, 3, 16, 42, 90,123, 31, 83,255, 0, 17,107, 91, 3, 24, 18
/* 0x01a0 */ .byte 111,127, 64,147,239, 1, 4,145,239,193, 43,139,239,249,127,211
/* 0x01b0 */ .byte 9, 2, 0, 84,212,106,111,120,240,124, 11, 83,107,121, 31, 83
/* 0x01c0 */ .byte 144,126, 16, 27, 31, 1, 16,107, 35, 2, 0, 84,148, 22, 84, 75
/* 0x01d0 */ .byte 212,106, 47,120,231, 0, 16, 75, 8, 1, 16, 75,107, 5, 0, 17
/* 0x01e0 */ .byte 27, 2, 0, 53,240, 3, 7, 42,231, 3, 16, 42, 29, 0, 0, 20
/* 0x01f0 */ .byte 63, 1, 2,235, 0,245,255, 84, 48, 1, 64, 57,231, 92, 24, 83
/* 0x0200 */ .byte 41, 5, 0,145, 8, 34, 8, 42,235,255,255, 23, 71, 2, 20, 75
/* 0x0210 */ .byte 148, 22,135, 11,212,106, 47,120,155,254,255, 53,231, 3, 16, 42
/* 0x0220 */ .byte 127,253, 3,113,141,251,255, 84, 30, 0, 0, 20,255, 0, 17,107
/* 0x0230 */ .byte 116,125,127,147,201, 1, 0, 84,208,106,116,120,239,124, 11, 83
/* 0x0240 */ .byte 107,121, 31, 83, 15,126, 15, 27, 31, 1, 15,107,226, 1, 0, 84
/* 0x0250 */ .byte 71, 2, 16, 75, 16, 22,135, 11,208,106, 52,120,231, 3, 15, 42
/* 0x0260 */ .byte 127,253, 3,113, 77,254,255, 84, 14, 0, 0, 20, 63, 1, 2,235
/* 0x0270 */ .byte 32,241,255, 84, 47, 1, 64, 57,231, 92, 24, 83, 41, 5, 0,145
/* 0x0280 */ .byte 232, 33, 8, 42,237,255,255, 23, 8, 1, 15, 75, 16, 22, 80, 75
/* 0x0290 */ .byte 107, 5, 0, 17,208,106, 52,120,239, 0, 15, 75,240,255,255, 23
/* 0x02a0 */ .byte 122, 29, 0, 83,191, 13, 0,113,154, 72, 46, 56,207, 5, 0, 17
/* 0x02b0 */ .byte 205, 45, 0, 84,191, 37, 0,113,108, 0, 0, 84,173, 13, 0, 81
/* 0x02c0 */ .byte 107, 1, 0, 20,173, 25, 0, 81,105, 1, 0, 20,231, 0, 16, 75
/* 0x02d0 */ .byte 8, 1, 16, 75,214, 22, 86, 75,176,125, 64,147,150,105, 47,120
/* 0x02e0 */ .byte 255, 0, 17,107, 16, 2, 3,145, 16,250,127,211,232, 0, 0, 84
/* 0x02f0 */ .byte 63, 1, 2,235, 0,237,255, 84, 43, 1, 64, 57,231, 92, 24, 83
/* 0x0300 */ .byte 41, 5, 0,145,104, 33, 8, 42,150,105,112,120,235,124, 11, 83
/* 0x0310 */ .byte 203,126, 11, 27, 31, 1, 11,107,130, 1, 0, 84, 71, 2, 22, 75
/* 0x0320 */ .byte 191, 29, 0,113,245, 3, 30, 42, 15,160, 25,145,214, 22,135, 11
/* 0x0330 */ .byte 103, 0,128, 82,254, 3, 19, 42,150,105, 48,120,237,179,135, 26
/* 0x0340 */ .byte 243, 3, 10, 42,117, 0, 0, 20,231, 0, 11, 75,214, 22, 86, 75
/* 0x0350 */ .byte 255, 0, 17,107,150,105, 48,120, 8, 1, 11, 75, 26, 98, 0,145
/* 0x0360 */ .byte 232, 0, 0, 84, 63, 1, 2,235, 96,233,255, 84, 43, 1, 64, 57
/* 0x0370 */ .byte 231, 92, 24, 83, 41, 5, 0,145,104, 33, 8, 42,150,105,122,120
/* 0x0380 */ .byte 235,124, 11, 83,203,126, 11, 27, 31, 1, 11,107,194, 4, 0, 84
/* 0x0390 */ .byte 71, 2, 22, 75,127, 1, 17,107,239,129, 7,145,214, 22,135, 11
/* 0x03a0 */ .byte 150,105, 58,120,232, 0, 0, 84, 63, 1, 2,235, 64,231,255, 84
/* 0x03b0 */ .byte 39, 1, 64, 57,107, 93, 24, 83, 41, 5, 0,145,232, 32, 8, 42
/* 0x03c0 */ .byte 144,105,111,120,103,125, 11, 83, 7,126, 7, 27, 31, 1, 7,107
/* 0x03d0 */ .byte 162, 1, 0, 84, 75, 2, 16, 75, 16, 22,139, 11,144,105, 47,120
/* 0x03e0 */ .byte 174,229,255, 52, 43, 1,128, 82,191, 29, 0,113,109,177,153, 26
/* 0x03f0 */ .byte 203, 1, 10, 75,207, 5, 0, 17,154,104,107, 56,154, 72, 46, 56
/* 0x0400 */ .byte 27, 1, 0, 20,107, 1, 7, 75, 8, 1, 7, 75, 16, 22, 80, 75
/* 0x0410 */ .byte 231, 3, 30, 42,144,105, 47,120,254, 3, 10, 42,234, 3, 19, 42
/* 0x0420 */ .byte 24, 0, 0, 20,231, 0, 11, 75,214, 22, 86, 75,255, 0, 17,107
/* 0x0430 */ .byte 150,105, 58,120, 8, 1, 11, 75, 22,194, 0,145,232, 0, 0, 84
/* 0x0440 */ .byte 63, 1, 2,235,128,226,255, 84, 43, 1, 64, 57,231, 92, 24, 83
/* 0x0450 */ .byte 41, 5, 0,145,104, 33, 8, 42,143,105,118,120,235,124, 11, 83
/* 0x0460 */ .byte 235,125, 11, 27, 31, 1, 11,107, 2, 1, 0, 84, 71, 2, 15, 75
/* 0x0470 */ .byte 239, 21,135, 11,231, 3, 30, 42,143,105, 54,120,254, 3, 19, 42
/* 0x0480 */ .byte 243, 3, 7, 42, 30, 0, 0, 20,231, 0, 11, 75,239, 21, 79, 75
/* 0x0490 */ .byte 255, 0, 17,107,143,105, 54,120, 8, 1, 11, 75, 16, 34, 1,145
/* 0x04a0 */ .byte 232, 0, 0, 84, 63, 1, 2,235, 96,223,255, 84, 43, 1, 64, 57
/* 0x04b0 */ .byte 231, 92, 24, 83, 41, 5, 0,145,104, 33, 8, 42,143,105,112,120
/* 0x04c0 */ .byte 235,124, 11, 83,235,125, 11, 27, 31, 1, 11,107,162, 0, 0, 84
/* 0x04d0 */ .byte 71, 2, 15, 75,239, 21,135, 11,143,105, 48,120, 8, 0, 0, 20
/* 0x04e0 */ .byte 8, 1, 11, 75,235, 0, 11, 75,231, 3, 30, 42,239, 21, 79, 75
/* 0x04f0 */ .byte 254, 3, 21, 42,143,105, 48,120,245, 3, 7, 42,231, 3, 10, 42
/* 0x0500 */ .byte 191, 29, 0,113,239, 59, 64,249,234, 3, 30, 42, 13,179,153, 26
/* 0x0510 */ .byte 254, 3, 19, 42,243, 3, 7, 42,127, 1, 17,107,232, 0, 0, 84
/* 0x0520 */ .byte 63, 1, 2,235,128,219,255, 84, 39, 1, 64, 57,107, 93, 24, 83
/* 0x0530 */ .byte 41, 5, 0,145,232, 32, 8, 42,240, 1, 64,121,103,125, 11, 83
/* 0x0540 */ .byte 7,126, 7, 27, 31, 1, 7,107, 66, 1, 0, 84,148,114, 29, 83
/* 0x0550 */ .byte 75, 2, 16, 75,148,126, 64,147, 16, 22,139, 11,148, 10, 0,145
/* 0x0560 */ .byte 240, 1, 0,121, 16, 0,128, 82,239, 5, 20,139, 26, 0, 0, 20
/* 0x0570 */ .byte 107, 1, 7, 75, 16, 22, 80, 75,127, 1, 17,107,240, 1, 0,121
/* 0x0580 */ .byte 8, 1, 7, 75,232, 0, 0, 84, 63, 1, 2,235, 64,216,255, 84
/* 0x0590 */ .byte 39, 1, 64, 57,107, 93, 24, 83, 41, 5, 0,145,232, 32, 8, 42
/* 0x05a0 */ .byte 240, 5, 64,121,103,125, 11, 83, 7,126, 7, 27, 31, 1, 7,107
/* 0x05b0 */ .byte 98, 1, 0, 84,148,114, 29, 83, 75, 2, 16, 75,148,126, 64,147
/* 0x05c0 */ .byte 16, 22,139, 11,148, 10, 2,145,240, 5, 0,121, 16, 1,128, 82
/* 0x05d0 */ .byte 239, 5, 20,139,122, 0,128, 82, 8, 0, 0, 20, 16, 22, 80, 75
/* 0x05e0 */ .byte 8, 1, 7, 75,240, 5, 0,121,103, 1, 7, 75,239, 17, 8,145
/* 0x05f0 */ .byte 16, 2,128, 82, 26, 1,128, 82,251, 3, 26, 42, 43, 0,128, 82
/* 0x0600 */ .byte 255, 0, 17,107,252,197, 43,139,232, 0, 0, 84, 63, 1, 2,235
/* 0x0610 */ .byte 32,212,255, 84, 52, 1, 64, 57,231, 92, 24, 83, 41, 5, 0,145
/* 0x0620 */ .byte 136, 34, 8, 42,150, 3, 64,121,244,124, 11, 83,107,121, 31, 83
/* 0x0630 */ .byte 212,126, 20, 27, 31, 1, 20,107,194, 0, 0, 84, 71, 2, 22, 75
/* 0x0640 */ .byte 214, 22,135, 11,231, 3, 20, 42,150, 3, 0,121, 6, 0, 0, 20
/* 0x0650 */ .byte 214, 22, 86, 75,231, 0, 20, 75, 8, 1, 20, 75,150, 3, 0,121
/* 0x0660 */ .byte 107, 5, 0, 17,123, 7, 0,113,193,252,255, 84, 47, 0,128, 82
/* 0x0670 */ .byte 191, 13, 0,113,250, 33,218, 26, 16, 2, 26, 75, 16, 2, 11, 11
/* 0x0680 */ .byte 172, 13, 0, 84,106, 0,128, 82, 31, 14, 0,113, 11,210,138, 26
/* 0x0690 */ .byte 214, 0,128, 82,107,101, 26, 83,234, 3, 15, 42,107,125, 64,147
/* 0x06a0 */ .byte 107,193, 6,145,107,249,127,211,255, 0, 17,107,122,197, 42,139
/* 0x06b0 */ .byte 232, 0, 0, 84, 63, 1, 2,235,224,206,255, 84, 47, 1, 64, 57
/* 0x06c0 */ .byte 231, 92, 24, 83, 41, 5, 0,145,232, 33, 8, 42,148,105,122,120
/* 0x06d0 */ .byte 239,124, 11, 83, 74,121, 31, 83,143,126, 15, 27, 31, 1, 15,107
/* 0x06e0 */ .byte 194, 0, 0, 84, 71, 2, 20, 75,148, 22,135, 11,231, 3, 15, 42
/* 0x06f0 */ .byte 148,105, 58,120, 6, 0, 0, 20,148, 22, 84, 75,231, 0, 15, 75
/* 0x0700 */ .byte 8, 1, 15, 75,148,105, 58,120, 74, 5, 0, 17,214, 6, 0,113
/* 0x0710 */ .byte 193,252,255, 84, 75, 1, 1, 81,127, 13, 0,113, 77, 8, 0, 84
/* 0x0720 */ .byte 127, 53, 0,113,106, 1, 0, 18,111,125, 1, 19, 74, 1, 31, 50
/* 0x0730 */ .byte 44, 1, 0, 84,239, 5, 0, 81, 20, 86,128,210, 74, 33,207, 26
/* 0x0740 */ .byte 139,194, 43,203,107, 65, 42,139,139, 5, 11,139,107, 9, 0,209
/* 0x0750 */ .byte 21, 0, 0, 20,239, 21, 0, 81,255, 0, 17,107,232, 0, 0, 84
/* 0x0760 */ .byte 63, 1, 2,235,128,201,255, 84, 43, 1, 64, 57,231, 92, 24, 83
/* 0x0770 */ .byte 41, 5, 0,145,104, 33, 8, 42,231,124, 1, 83, 74,121, 31, 83
/* 0x0780 */ .byte 31, 1, 7,107, 99, 0, 0, 84, 8, 1, 7, 75, 74, 1, 0, 50
/* 0x0790 */ .byte 239, 5, 0,113, 33,254,255, 84, 11, 32, 25,145, 74,109, 28, 83
/* 0x07a0 */ .byte 143, 0,128, 82, 52, 0,128, 82,251, 3, 20, 42,255, 0, 17,107
/* 0x07b0 */ .byte 124,197, 52,139,232, 0, 0, 84, 63, 1, 2,235,192,198,255, 84
/* 0x07c0 */ .byte 54, 1, 64, 57,231, 92, 24, 83, 41, 5, 0,145,200, 34, 8, 42
/* 0x07d0 */ .byte 154, 3, 64,121,246,124, 11, 83,148,122, 31, 83, 86,127, 22, 27
/* 0x07e0 */ .byte 31, 1, 22,107,194, 0, 0, 84, 71, 2, 26, 75, 90, 23,135, 11
/* 0x07f0 */ .byte 231, 3, 22, 42,154, 3, 0,121, 7, 0, 0, 20, 90, 23, 90, 75
/* 0x0800 */ .byte 231, 0, 22, 75, 8, 1, 22, 75,154, 3, 0,121,148, 6, 0, 17
/* 0x0810 */ .byte 74, 1, 27, 42,239, 5, 0,113,123,123, 31, 83,129,252,255, 84
/* 0x0820 */ .byte 2, 0, 0, 20,234, 3, 11, 42, 74, 5, 0, 49, 64, 2, 0, 84
/* 0x0830 */ .byte 173, 29, 0, 17,223, 1, 10,107, 11, 10, 0, 17,195,194,255, 84
/* 0x0840 */ .byte 207, 1, 10, 75,107, 5, 0, 81,127, 1, 31,107,154,104,111, 56
/* 0x0850 */ .byte 207, 5, 0, 17,154, 72, 46, 56,160, 16, 79,122,238, 3, 15, 42
/* 0x0860 */ .byte 8,255,255, 84, 2, 0, 0, 20, 13, 0,128, 82,238, 3, 15, 42
/* 0x0870 */ .byte 31,254,255, 23, 0,224,191, 18,255, 0, 0,107,136, 0, 0, 84
/* 0x0880 */ .byte 63, 1, 2,235,128,192,255, 84, 41, 5, 0,145, 33, 1, 1,203
/* 0x0890 */ .byte 97, 0, 0,185, 0, 0,128, 82,206, 0, 0,185,245, 91, 65,169
/* 0x08a0 */ .byte 247, 99, 66,169,249,107, 67,169,251,115, 68,169,254, 43, 64,249
/* 0x08b0 */ .byte 243, 83,200,168
+18 -67
View File
@@ -30,96 +30,47 @@
#define __MACROS_S__ 1 #define __MACROS_S__ 1
.altmacro .altmacro
lr .req x30
fp .req x29
#define PUSH1(r1) str r1, [sp,#-1*8]! // ARM64 (AARCH64) REQUIRES 16-BYTE ALIGNED STACK POINTER (SP)
// Therefore PUSH of an odd number of registers, inserts an 8-byte hole.
#define PUSH1(r1) str r1, [sp,#-2*8]! /* HOLE */
#define PUSH2(r1,r2) stp r1,r2,[sp,#-2*8]! #define PUSH2(r1,r2) stp r1,r2,[sp,#-2*8]!
#define PUSH3(r1,r2,r3) stp r1,r2,[sp,#-3*8]!; str r3, [sp,#2*8] #define PUSH3(r1,r2,r3) stp r1,r2,[sp,#-4*8]!;\
#define PUSH4(r1,r2,r3,r4) stp r1,r2,[sp,#-4*8]!; stp r3,r4,[sp,#2*8] str r3, [sp,# 2*8] /* HOLE */
#define PUSH5(r1,r2,r3,r4,r5) PUSH2(r4,r5); PUSH3(r1,r2,r3) #define PUSH4(r1,r2,r3,r4) stp r1,r2,[sp,#-4*8]!; \
stp r3,r4,[sp,# 2*8]
#define PUSH5(r1,r2,r3,r4,r5) stp r1,r2,[sp,#-6*8]!;\
stp r3,r4,[sp,# 2*8];\
str r5, [sp,# 4*8] /* HOLE */
#define POP1(r1) ldr r1, [sp],#1*8 #define POP1(r1) ldr r1, [sp],#2*8
#define POP2(r1,r2) ldp r1,r2,[sp],#2*8 #define POP2(r1,r2) ldp r1,r2,[sp],#2*8
#define POP3(r1,r2,r3) ldr r3, [sp,#2*8]; ldp r1,r2,[sp],#3*8 #define POP3(r1,r2,r3) ldr r3, [sp,#2*8]; ldp r1,r2,[sp],#4*8
#define POP4(r1,r2,r3,r4) ldp r3,r4,[sp,#2*8]; ldp r1,r2,[sp],#4*8 #define POP4(r1,r2,r3,r4) ldp r3,r4,[sp,#2*8]; ldp r1,r2,[sp],#4*8
.macro section name .macro section name
.section \name .section \name
.endm .endm
/* The order of #if-#elif matters: ARMEL_EABI4 takes precedence over ARM_OLDABI */
#if defined(ARMEL_DARWIN) /*{*/
__NR_SYSCALL_BASE = 0
.macro do_sys N .macro do_sys N
mov w8,#\N mov w8,#\N
brk #0x80 // sets Carry iff error svc #0 // sets Carry iff error
// orrcs r0,r0,#(1<<31) // force negative on error; FIXME: needed? // orrcs r0,r0,#(1<<31) // force negative on error; FIXME: needed?
ret
.endm
.macro do_sys7t N
do_sys \N
.endm .endm
.macro do_dcache_flush // In: r0=addr; r1=len .macro do_dcache_flush // In: r0=addr; r1=len
mov w3,#1 // _sys_dcache_flush mov w3,#1 // _sys_dcache_flush
mov w8,#(1<<31) // syscall number? mov w8,#(1<<31) // syscall number?
brk #0x80 svc #0
.endm .endm
.macro do_icache_invalidate // In: r0=addr; r1=len .macro do_icache_invalidate // In: r0=addr; r1=len
mov w3,#0 // _sys_icache_invalidate mov w3,#0 // _sys_icache_invalidate
mov w8,#(1<<31) // syscall number? mov w8,#(1<<31) // syscall number?
brk #0x80 svc #0
.endm
#elif defined(ARMEL_EABI4) /*}{*/
__NR_SYSCALL_BASE = 0
.macro do_sys7t N
mov r7,#\N // syscall number
brk #0
.endm
.macro do_sys N
mov r12,r7 // save r7 in ip
do_sys7t \N
mov r7,r12 // restore r7 from ip
.endm
.macro do_sys7t2 N
mov r7, #(\N) & 0xff // syscall number
orr r7,r7,#(\N) &~0xff // high bits
brk #0
.endm
.macro do_sys2 N
mov r12,r7 // save r7 in ip
do_sys7t2 \N
mov r7,r12 // restore r7 from ip
.endm
#elif defined(ARM_OLDABI) /*}{*/
__NR_SYSCALL_BASE = 0x900000
.macro do_sys N
brk #\N
.endm
.macro do_sys7t N
do_sys \N
.endm
.macro do_sys2 N
brk #\N
.endm
.macro do_sys7t2 N
do_sys2 \N
.endm
#else /*}{*/
.macro do_sys N
error \N // ARM_OLDABI, ARMEL_EABI4, ARMEL_DARWIN ?
.endm
.macro do_sys2 N
error \N // ARM_OLDABI, ARMEL_EABI4, ARMEL_DARWIN ?
.endm
#endif /*}*/
.macro loadcon8 reg,val8
.long (0xe3<<24)|(0xa0<<16)|((\reg<<4)<<8)+(\val8) /* mov \reg,#\val8 */
.endm .endm
#endif //} #endif //}
@@ -57,9 +57,9 @@
#define jnextb0 GETBIT; bcc #define jnextb0 GETBIT; bcc
#define jnextb1 GETBIT; bcs #define jnextb1 GETBIT; bcs
ucl_nrv2b_decompress_8: .globl ucl_nrv2b_decompress_8 // ARM mode ucl_nrv2b_decompress_32: .globl ucl_nrv2b_decompress_32 // ARM mode
.type ucl_nrv2b_decompress_8, %function .type ucl_nrv2b_decompress_32, %function
/* error = (*)(char const *src, int len_src, char *dst, int *plen_dst) */ /* error = (*)(char const *src, uint32_t len_src, char *dst, uint32_t *plen_dst) */
add x1,src,len,uxtw // x1= eof_src; add x1,src,len,uxtw // x1= eof_src;
PUSH4(x1,x2,x3, lr) PUSH4(x1,x2,x3, lr)
mov off,#-1 // off= -1 initial condition mov off,#-1 // off= -1 initial condition
@@ -67,38 +67,28 @@ ucl_nrv2b_decompress_8: .globl ucl_nrv2b_decompress_8 // ARM mode
b top_n2b b top_n2b
eof_n2b: eof_n2b:
POP3(x1,x3,x4) // x1= eof_src; r3= orig_dst; r4= plen_dst POP4(x1,x3,x4, lr) // x1= eof_src; r3= orig_dst; r4= plen_dst
SUB2(src,x1) // 0 if actual src length equals expected length SUB2(src,x1) // 0 if actual src length equals expected length
SUB2(dst,x3) // actual dst length SUB2(dst,x3) // actual dst length
str dstw,[x4] str dstw,[x4]
#if defined(LINUX_ARM_CACHEFLUSH) /*{*/
mov x4,x0 // save result value mov x4,x0 // save result value
mov x0,x3 // orig_dst mov x0,x3 // orig_dst
add x1,x3,dst // orig_dst + dst_len add x1,x3,dst // orig_dst + dst_len
mov w2,#0 cache_n2b:
do_sys2 __ARM_NR_cacheflush // decompressed region dc cvau,x0 // Clean by VA to point of Unification
mov x0,x4 // result value ic ivau,x0 // Invalidate by VA to point of Unification
#endif /*}*/ add x0,x0,#64 // next line
#if defined(DARWIN_ARM_CACHEFLUSH) /*{*/ cmp x0,x1; blo cache_n2b
mov x4,x0 // save result value
mov x0,x3 // orig_dst
mov x1,dst // dst_len
PUSH2(x0,x1); do_dcache_flush
POP2 (x0,x1); do_icache_invalidate
mov x0,x4 // result value
#endif /*}*/
ldr lr,[sp],#8 mov x0,x4 // result value
ret ret
get1_n2b: get1_n2b:
ADD2S(bits,bits); cbz bits,get8_n2b; ret ADD2S(bits,bits); cbz bits,get32_n2b; ret
get8_n2b: // In: Carry set [from adding 0x80000000 (1<<31) to itself] get32_n2b: // In: Carry set [from adding 0x80000000 (1<<31) to itself]
LDRB3(bits,[src],#1) // zero-extend next byte LDR3(bits,[src],#4)
ADC2(bits,bits) // double and insert CarryIn as low bit ADC2S(bits,bits) // left shift 1 bit with CarryIn and CarryOut
lsl bits,bits,#23 // top 9 bits
ADD2S(bits,bits) // top 8 bits; CarryOut from doubling
ret ret
ss11_n2b: // return len= [2..) ss11_n2b: // return len= [2..)
@@ -135,7 +125,7 @@ copy_n2b: // copy 1+len bytes
STRB3(tmp,[dst],#1); bhs copy_n2b STRB3(tmp,[dst],#1); bhs copy_n2b
b top_n2b // exit with -1==len b top_n2b // exit with -1==len
.size ucl_nrv2b_decompress_8, .-ucl_nrv2b_decompress_8 .size ucl_nrv2b_decompress_32, .-ucl_nrv2b_decompress_32
/* /*
vi:ts=8:et:nowrap vi:ts=8:et:nowrap
*/ */
@@ -1,4 +1,4 @@
/* nrv2d_d8.S -- ARM decompressor for NRV2D /* nrv2d_d32.S -- ARM64 decompressor for NRV2D
This file is part of the UPX executable compressor. This file is part of the UPX executable compressor.
@@ -55,11 +55,12 @@
#define ADC2S(dst,src) adcs dst,dst,src #define ADC2S(dst,src) adcs dst,dst,src
#define SUB2( dst,src) sub dst,dst,src #define SUB2( dst,src) sub dst,dst,src
#define SUB2S(dst,src) subs dst,dst,src #define SUB2S(dst,src) subs dst,dst,src
#define LDR3( reg,psrc,incr) ldr reg,psrc,incr
#define LDRB3(reg,psrc,incr) ldrb reg,psrc,incr #define LDRB3(reg,psrc,incr) ldrb reg,psrc,incr
#define STRB3(reg,pdst,incr) strb reg,pdst,incr #define STRB3(reg,pdst,incr) strb reg,pdst,incr
#if 1==SAFE /*{*/ #if 1==SAFE /*{*/
#define CHECK_SRC cmp srclim,src; bls bad_src_n2d /* Out: 1==Carry for get8_n2d */ #define CHECK_SRC cmp srclim,src; bls bad_src_n2d /* Out: 1==Carry for get32_n2d */
#define CHECK_DST cmp dst,dstlim; bhs bad_dst_n2d #define CHECK_DST cmp dst,dstlim; bhs bad_dst_n2d
#else /*}{*/ #else /*}{*/
#define CHECK_SRC /*empty*/ #define CHECK_SRC /*empty*/
@@ -82,8 +83,8 @@
#define jnextb0 GETBIT; bcc #define jnextb0 GETBIT; bcc
#define jnextb1 GETBIT; bcs #define jnextb1 GETBIT; bcs
ucl_nrv2d_decompress_8: .globl ucl_nrv2d_decompress_8 // ARM mode ucl_nrv2d_decompress_32: .globl ucl_nrv2d_decompress_32 // ARM mode
.type ucl_nrv2d_decompress_8, %function .type ucl_nrv2d_decompress_32, %function
/* error = (*)(char const *src, int len_src, char *dst, int *plen_dst) /* error = (*)(char const *src, int len_src, char *dst, int *plen_dst)
Actual decompressed length is stored through plen_dst. Actual decompressed length is stored through plen_dst.
For SAFE mode: at call, *plen_dst must be allowed length of output buffer. For SAFE mode: at call, *plen_dst must be allowed length of output buffer.
@@ -111,34 +112,25 @@ eof_n2d:
SUB2(src,srclim) // 0 if actual src length equals expected length SUB2(src,srclim) // 0 if actual src length equals expected length
SUB2(dst,x3) // actual dst length SUB2(dst,x3) // actual dst length
str dstw,[x4] str dstw,[x4]
#if defined(LINUX_ARM_CACHEFLUSH) /*{*/
mov x4,x0 // save result value mov x4,x0 // save result value
mov x0,x3 // orig_dst mov x0,x3 // orig_dst
add x1,x3,dst // orig_dst + dst_len add x1,x3,dst // orig_dst + dst_len
mov w2,#0 cache_n2d:
do_sys2 __ARM_NR_cacheflush // decompressed region dc cvau,x0 // Clean by VA to point of Unification
mov x0,x4 // result value ic ivau,x0 // Invalidate by VA to point of Unification
#endif /*}*/ add x0,x0,#64 // next line
#if defined(DARWIN_ARM_CACHEFLUSH) /*{*/ cmp x0,x1; blo cache_n2d
mov x4,x0 // save result value
mov x0,x3 // orig_dst
mov x1,dst // dst_len
PUSH2(x0,x1); do_dcache_flush
POP2 (x0,x1); do_icache_invalidate
mov x0,x4 // result value
#endif /*}*/
ldr lr,[sp],#8 mov x0,x4 // result value
POP1(lr)
ret ret
get1_n2d: get1_n2d:
ADD2S(bits,bits); cbz bits,get8_n2d; ret ADD2S(bits,bits); cbz bits,get32_n2d; ret
get8_n2d: // In: Carry set [from adding 0x80000000 (1<<31) to itself] get32_n2d: // In: Carry set [from adding 0x80000000 (1<<31) to itself]
CHECK_SRC; LDRB3(bits,[src],#1) // zero-extend next byte CHECK_SRC; LDR3(bits,[src],#4)
ADC2S(bits,bits) // double and insert CarryIn as low bit ADC2S(bits,bits) // left shift one bit with CarryIn and CarryOut
lsl bits,bits,#23 // top 9 bits
ADD2S(bits,bits) // top 8 bits; CarryOut from doubling
ret ret
lit_n2d: lit_n2d:
@@ -194,7 +186,7 @@ copy_n2d:
SUB2S(len,#1); bne copy_n2d SUB2S(len,#1); bne copy_n2d
b top_n2d b top_n2d
.size ucl_nrv2d_decompress_8, .-ucl_nrv2d_decompress_8 .size ucl_nrv2d_decompress_32, .-ucl_nrv2d_decompress_32
/* /*
vi:ts=8:et:nowrap vi:ts=8:et:nowrap
+14 -20
View File
@@ -69,7 +69,7 @@
#if 0 /*{ DEBUG only: check newly-decompressed against original dst */ #if 0 /*{ DEBUG only: check newly-decompressed against original dst */
#define CHECK_BYTE \ #define CHECK_BYTE \
ldrb w6,[dst]; \ ldrb w6,[dst]; \
cmp w6,tmp; beq 0f; bkpt; 0: cmp w6,tmp; beq 0f; brk #0; 0:
#else /*}{*/ #else /*}{*/
#define CHECK_BYTE /*empty*/ #define CHECK_BYTE /*empty*/
#endif /*}*/ #endif /*}*/
@@ -84,11 +84,12 @@
ucl_nrv2e_decompress_32: .globl ucl_nrv2e_decompress_32 // ARM mode ucl_nrv2e_decompress_32: .globl ucl_nrv2e_decompress_32 // ARM mode
.type ucl_nrv2e_decompress_32, %function .type ucl_nrv2e_decompress_32, %function
/* error = (*)(char const *src, int len_src, char *dst, int *plen_dst) /* error = (*)(char const *src, uint32_t len_src, char *dst, uint32_t *plen_dst)
Actual decompressed length is stored through plen_dst. Actual decompressed length is stored through plen_dst.
For SAFE mode: at call, *plen_dst must be allowed length of output buffer. For SAFE mode: at call, *plen_dst must be allowed length of output buffer.
*/ */
PUSH3(x2,x3, lr) PUSH1(lr)
PUSH2(x2,x3)
#define sp_DST0 0 /* stack offset of original dst */ #define sp_DST0 0 /* stack offset of original dst */
add srclim,src,len,uxtw // srclim= eof_src; add srclim,src,len,uxtw // srclim= eof_src;
#if 1==SAFE /*{*/ #if 1==SAFE /*{*/
@@ -101,7 +102,6 @@ ucl_nrv2e_decompress_32: .globl ucl_nrv2e_decompress_32 // ARM mode
#if 1==SAFE /*{*/ #if 1==SAFE /*{*/
bad_dst_n2e: # return value will be 2 bad_dst_n2e: # return value will be 2
bkpt
add src,srclim,#1 add src,srclim,#1
bad_src_n2e: # return value will be 1 bad_src_n2e: # return value will be 1
ADD2(src,#1) ADD2(src,#1)
@@ -111,31 +111,25 @@ eof_n2e:
SUB2(src,srclim) // 0 if actual src length equals expected length SUB2(src,srclim) // 0 if actual src length equals expected length
SUB2(dst,x3) // actual dst length SUB2(dst,x3) // actual dst length
str dstw,[x4] str dstw,[x4]
#if defined(LINUX_ARM_CACHEFLUSH) /*{*/
mov x4,x0 // save result value mov x4,x0 // save result value
mov x0,x3 // orig_dst mov x0,x3 // orig_dst
add x1,x3,dst // orig_dst + dst_len add x1,x3,dst // orig_dst + dst_len
mov w2,#0 cache_n2e:
do_sys2 __ARM_NR_cacheflush // decompressed region dc cvau,x0 // Clean by VA to point of Unification
mov x0,x4 // result value ic ivau,x0 // Invalidate by VA to point of Unification
#endif /*}*/ add x0,x0,#64 // next line
#if defined(DARWIN_ARM_CACHEFLUSH) /*{*/ cmp x0,x1; blo cache_n2e
mov x4,x0 // save result value
mov x0,x3 // orig_dst
mov x1,dst // dst_len
PUSH2(x0,x1); do_dcache_flush
POP {x0,x1}; do_icache_invalidate
mov x0,x4 // result value
#endif /*}*/
ldr lr,[sp],#8; br lr mov x0,x4 // result value
POP1(lr)
ret
get1_n2e: get1_n2e:
ADD2S(bits,bits); cbz bits,get32_n2e; ret ADD2S(bits,bits); cbz bits,get32_n2e; ret
get32_n2e: // In: Carry set [from adding 0x80000000 (1<<31) to itself] get32_n2e: // In: Carry set [from adding 0x80000000 (1<<31) to itself]
CHECK_SRC; ldr bits,[src],#4 CHECK_SRC; ldr bits,[src],#4
ADC2S(bits,bits) // double, insert CarryIn as low bit, record CarryOut ADC2S(bits,bits) // left shift 1 bit with CarryIn and CarryOut
ret ret
lit_n2e: lit_n2e:
-209
View File
@@ -1,209 +0,0 @@
/* armv4_n2e_d8.S -- ARM decompressor for NRV2E
This file is part of the UPX executable compressor.
Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
Copyright (C) 1996-2017 Laszlo Molnar
Copyright (C) 2000-2017 John F. Reiser
All Rights Reserved.
UPX and the UCL library are free software; you can redistribute them
and/or modify them under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING.
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> <ezerotven+github@gmail.com>
John F. Reiser
<jreiser@users.sourceforge.net>
*/
#define SAFE 0 /* 1 for src+dst bounds checking: cost 76 bytes */
#define lr x30
#define src x0
#define len w1 /* overlaps 'cnt' */
#define dst x2
#define dstw w2
#define tmp w3
#define tmpx x3
#define bits w4
#define off w5
/* r6 UNUSED in ARM code unless DEBUG mode */
#define srclim x7
#if 1==SAFE /*{*/
#define dstlim x12 /* FIXME */
#endif /*}*/
#define cnt w1 /* overlaps 'len' while reading an offset */
/* macros reduce "noise" when comparing this ARM code to corresponding THUMB code */
#define ADD2( dst,src) add dst,dst,src
#define ADD2S(dst,src) adds dst,dst,src
#define ADC2( dst,src) adc dst,dst,src
#define ADC2S(dst,src) adcs dst,dst,src
#define SUB2( dst,src) sub dst,dst,src
#define SUB2S(dst,src) subs dst,dst,src
#define LDRB3(reg,psrc,incr) ldrb reg,psrc,incr
#define STRB3(reg,pdst,incr) strb reg,pdst,incr
#if 1==SAFE /*{*/
#define CHECK_SRC cmp srclim,src; bls bad_src_n2e /* Out: 1==Carry for get8_n2e */
#define CHECK_DST cmp dst,dstlim; bhs bad_dst_n2e
#else /*}{*/
#define CHECK_SRC /*empty*/
#define CHECK_DST /*empty*/
#endif /*}*/
#if 0 /*{ DEBUG only: check newly-decompressed against original dst */
#define CHECK_BYTE \
ldrb w6,[dst]; \
cmp w6,tmp; beq 0f; bkpt; 0:
#else /*}{*/
#define CHECK_BYTE /*empty*/
#endif /*}*/
#undef GETBIT
#define GETBIT bl get1_n2e
#undef getnextb
#define getnextb(reg) GETBIT; ADC2(reg,reg) /* Out: condition code not changed */
#define jnextb0 GETBIT; bcc
#define jnextb1 GETBIT; bcs
ucl_nrv2e_decompress_8: .globl ucl_nrv2e_decompress_8 // ARM mode
.type ucl_nrv2e_decompress_8, %function
/* error = (*)(char const *src, int len_src, char *dst, int *plen_dst)
Actual decompressed length is stored through plen_dst.
For SAFE mode: at call, *plen_dst must be allowed length of output buffer.
*/
PUSH3(x2,x3, lr)
#define sp_DST0 0 /* stack offset of original dst */
add srclim,src,len,uxtw // srclim= eof_src;
#if 1==SAFE /*{*/
ldr tmp,[r3] // len_dst
add dstlim,tmp,dst
#endif /*}*/
mov off,#-1 // off= -1 initial condition
mov bits,#1<<31 // refill next time
b top_n2e
#if 1==SAFE /*{*/
bad_dst_n2e: # return value will be 2
bkpt
add src,srclim,#1
bad_src_n2e: # return value will be 1
ADD2(src,#1)
#endif /*}*/
eof_n2e:
POP2(x3,x4) // r3= orig_dst; r4= plen_dst
SUB2(src,srclim) // 0 if actual src length equals expected length
SUB2(dst,x3) // actual dst length
str dstw,[x4]
#if defined(LINUX_ARM_CACHEFLUSH) /*{*/
mov x4,x0 // save result value
mov x0,x3 // orig_dst
add x1,x3,dst // orig_dst + dst_len
mov x2,#0
do_sys2 __ARM_NR_cacheflush // decompressed region
mov x0,x4 // result value
#endif /*}*/
#if defined(DARWIN_ARM_CACHEFLUSH) /*{*/
mov x4,x0 // save result value
mov x0,x3 // orig_dst
mov x1,dst // dst_len
PUSH2(x0,x1); do_dcache_flush
POP2 (x0,x1); do_icache_invalidate
mov x0,x4 // result value
#endif /*}*/
POP1(lr)
ret
get1_n2e:
ADD2S(bits,bits); cbz bits,get8_n2e; ret
get8_n2e:
// In: Carry set [from adding 0x80000000 (1<<31) to itself]
CHECK_SRC; LDRB3(bits,[src],#1) // zero-extend next byte
ADC2S(bits,bits) // double and insert CarryIn as low bit
lsl bits,bits,#23 // top 9 bits
ADD2S(bits,bits) // top 8 bits; CarryOut from doubling
ret
lit_n2e:
CHECK_SRC; LDRB3(tmp,[src],#1)
CHECK_BYTE
CHECK_DST; STRB3(tmp,[dst],#1)
top_n2e:
jnextb1 lit_n2e
mov cnt,#1; b getoff_n2e
off_n2e:
SUB2(cnt,#1)
getnextb(cnt)
getoff_n2e:
getnextb(cnt)
jnextb0 off_n2e
subs tmp,cnt,#3 // set Carry
mov len,#0 // Carry unaffected
blo offprev_n2e // cnt was 2; tests Carry only
CHECK_SRC; LDRB3(off,[src],#1) // low 7+1 bits
orr off,off,tmp,lsl #8
mvn off,off; cbz off,eof_n2e // off= ~off
tst off,#1; asr off,off,#1; bne lenlast_n2e // branch on former bottom bit
b lenmore_n2e
offprev_n2e:
jnextb1 lenlast_n2e
lenmore_n2e:
mov len,#1
jnextb1 lenlast_n2e
len_n2e:
getnextb(len)
jnextb0 len_n2e
ADD2(len,#6-2)
b gotlen_n2e
lenlast_n2e:
getnextb(len) // 0,1,2,3
ADD2(len,#2)
gotlen_n2e: // 'cmn': add the inputs, set condition codes, discard the sum
cmn off,#5<<8 // within M2_MAX_OFFSET
csinc len,len,len,cc // too far away, so minimum match length is 3
near_n2e:
#if 1==SAFE /*{*/
ldr tmp,[sp,#sp_DST0]
SUB2( tmp,dst)
SUB2S(tmp,off); bhi bad_dst_n2e // reaching back too far
add tmp,dst,cnt
cmp tmp,dstlim; bhi bad_dst_n2e // too much output
#endif /*}*/
add tmpx,dst,len,sxtw
ldrb tmp,[tmpx,#-1] // force cacheline allocate
copy_n2e:
ldrb tmp,[dst,off,sxtw]
CHECK_BYTE
STRB3(tmp,[dst],#1)
SUB2S(len,#1); bne copy_n2e
b top_n2e
.size ucl_nrv2e_decompress_8, .-ucl_nrv2e_decompress_8
/*
vi:ts=8:et:nowrap
*/
+7 -23
View File
@@ -29,19 +29,6 @@
* <jreiser@users.sourceforge.net> * <jreiser@users.sourceforge.net>
*/ */
//#define SIMULATE_ON_DEBIAN_EABI4 1
#undef SIMULATE_ON_DEBIAN_EABI4
#ifdef SIMULATE_ON_DEBIAN_EABI4 /*{*/
#define LINUX_ARM_CACHEFLUSH 1 /* SIMULATE_ON_DEBIAN_EABI4 */
#define ARMEL_EABI4 1 /* SIMULATE_ON_DEBIAN_EABI4 */
#else /*}{ usual case */
#define DARWIN_ARM_CACHEFLUSH 1
#define ARMEL_DARWIN 1
#endif /*}*/
#define lr x30
#include "arch/arm64/v8/macros.S" #include "arch/arm64/v8/macros.S"
sz_b_info= 12 sz_b_info= 12
@@ -97,13 +84,13 @@ f_decompress:
// empty // empty
section NRV2E section NRV2E
#include "arch/arm64/v8/nrv2e_d8.S" #include "arch/arm64/v8/nrv2e_d32.S"
section NRV2D section NRV2D
#include "arch/arm64/v8/nrv2d_d8.S" #include "arch/arm64/v8/nrv2d_d32.S"
section NRV2B section NRV2B
#include "arch/arm64/v8/nrv2b_d8.S" #include "arch/arm64/v8/nrv2b_d32.S"
section NRV_TAIL section NRV_TAIL
// empty // empty
@@ -116,9 +103,9 @@ end_decompress: .globl end_decompress
/* IDENTSTR goes here */ /* IDENTSTR goes here */
section MACHMAINZ section MACHMAINZ
#define lsrc w1 lsrc .req w1
#define ldst w3 ldst .req w3
#define ldstx x3 ldstx .req x3
unfold: // lr= &L100 unfold: // lr= &L100
ldr ldst,[lr,#sz_unc] ldr ldst,[lr,#sz_unc]
ldr lsrc,[lr,#sz_cpr] ldr lsrc,[lr,#sz_cpr]
@@ -126,7 +113,7 @@ unfold: // lr= &L100
add src,lr,ldst,uxtw; add src,src,#GAP+NO_LAP // defend against prefetch and overlap add src,lr,ldst,uxtw; add src,src,#GAP+NO_LAP // defend against prefetch and overlap
mov w4,lsrc // loop count mov w4,lsrc // loop count
#define t0 w9 t0 .req w9
movup: // descending copy folded_loader to higher address movup: // descending copy folded_loader to higher address
ldr t0,[dst,#-4]!; sub w4,w4,#4 ldr t0,[dst,#-4]!; sub w4,w4,#4
str t0,[src,#-4]!; cbnz w4,movup str t0,[src,#-4]!; cbnz w4,movup
@@ -149,7 +136,4 @@ L100:
GAP= 128 // > farthest prefetch; must match ../../p_mach.cpp GAP= 128 // > farthest prefetch; must match ../../p_mach.cpp
NO_LAP= 64 // avoid overlap for folded loader; must match ../../p_mach.cpp NO_LAP= 64 // avoid overlap for folded loader; must match ../../p_mach.cpp
#undef ldstx
#undef ldst
/* vim:set ts=8 sw=8 et: */ /* vim:set ts=8 sw=8 et: */
+14 -15
View File
@@ -59,7 +59,6 @@ fold_begin:
sp/ junk1,junk2,{30 original regs (omit sp,lr)},junk3,original_stack... sp/ junk1,junk2,{30 original regs (omit sp,lr)},junk3,original_stack...
*/ */
#define t0w w9 /* scratch value */ #define t0w w9 /* scratch value */
lr .req x30
ldr x1,[x11] // sz_pack2 ldr x1,[x11] // sz_pack2
add x7,sp,#8*(2+(32-2)) // &junk3; will become &mhdrp add x7,sp,#8*(2+(32-2)) // &junk3; will become &mhdrp
sub x0,x11,x1,uxtw // &{l_info; p_info; b_info} sub x0,x11,x1,uxtw // &{l_info; p_info; b_info}
@@ -134,23 +133,23 @@ unf_ret:
spin: .globl spin spin: .globl spin
ret ret
__NR_exit = 1 + __NR_SYSCALL_BASE __NR_exit = 1
__NR_read = 3 + __NR_SYSCALL_BASE __NR_read = 3
__NR_write = 4 + __NR_SYSCALL_BASE __NR_write = 4
__NR_open = 5 + __NR_SYSCALL_BASE __NR_open = 5
__NR_close = 6 + __NR_SYSCALL_BASE __NR_close = 6
__NR_brk = 45 + __NR_SYSCALL_BASE __NR_brk = 45
__NR_mmap = 197 + __NR_SYSCALL_BASE __NR_mmap = 197
__NR_munmap = 73 + __NR_SYSCALL_BASE __NR_munmap = 73
__NR_mprotect = 74 + __NR_SYSCALL_BASE __NR_mprotect = 74
__NR_pread = 153 + __NR_SYSCALL_BASE __NR_pread = 153
#ifdef SIMULATE_ON_DEBIAN_EABI4 /*{*/ #ifdef SIMULATE_ON_DEBIAN_EABI4 /*{*/
__NR_mmap = 192 + __NR_SYSCALL_BASE // mmap2 __NR_mmap = 192 // mmap2
__NR_munmap = 91 + __NR_SYSCALL_BASE __NR_munmap = 91
__NR_mprotect = 125 + __NR_SYSCALL_BASE __NR_mprotect = 125
__NR_pread = 180 + __NR_SYSCALL_BASE __NR_pread = 180
#endif /*}*/ #endif /*}*/
.globl exit .globl exit
+245
View File
@@ -0,0 +1,245 @@
/* aarch64-linux.elf-entry.S -- Linux program entry point & decompressor (Elf binary)
*
* This file is part of the UPX executable compressor.
*
* Copyright (C) 1996-2015 Markus Franz Xaver Johannes Oberhumer
* Copyright (C) 1996-2015 Laszlo Molnar
* Copyright (C) 2000-2015 John F. Reiser
* All Rights Reserved.
*
* UPX and the UCL library are free software; you can redistribute them
* and/or modify them under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; see the file COPYING.
* 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>
*
* John F. Reiser
* <jreiser@users.sourceforge.net>
*/
#include "arch/arm64/v8/macros.S"
sz_Elf64_Ehdr= 64
sz_Elf64_Phdr= 56
sz_b_info= 12
sz_unc= 0
sz_cpr= 4
b_method= 8
sz_l_info= 12
sz_p_info= 12
PROT_READ= 1
PROT_WRITE= 2
PROT_EXEC= 4
MAP_FIXED= 0x10
PAGE_SHIFT= 12
PAGE_SIZE = -(~0<<PAGE_SHIFT)
__NR_exit = 93
__NR_write = 64
__NR_mmap64 = 222
__ARM_NR_cacheflush = 255 // FIXME
#ifndef DEBUG /*{*/
#define DEBUG 0
#endif /*}*/
//.long sz_pack2 // placed there by ::pack3()
section ELFMAINX
start_params:
.long LENF // end_decompress - (start_params -4)
.long CPR0 // cpr0 - (start_params -4)
mflg:
.long MFLG // MAP_{PRIVATE|ANONYMOUS} // QNX vs linux
.xword ADRM // dst for map
_start: .globl _start
/* Get some pages: enough
to duplicate the entire compressed PT_LOAD, plus 1 page, located just after
the brk() of the _un_compressed program. The address is pre-calculated
calculated by PackLinuxElf64arm::addLinkerSymbols().
*/
#if DEBUG /*{*/
#define TRACE_REGS r0-r12,r14,r15
// sp (r13) is not included because the write-back might cause UNDEFINED behavior
// if the write-back register is not first or last. The actual value of sp
// usually does not matter. Just remember that lr (r14) and pc (r15) are stored
// one word closer to the stack pointer because r13 has been omitted.
stmdb sp!,{TRACE_REGS}; mov r0,#1; bl trace
#endif /*}*/
adr x12,start_params -4 // &sz_pack2
ldp w1,w10,[x12] // w1= sz_pack2; w10= LENF
ldp w11,w13,[x12,#2*4] // w11= CPRO; w13= MFLG
add x11,x11,x12 // cpr0
add x10,x10,x12 // end_decompress
ldr w3,[x11,# sz_unc]
sub x9,x12,x1 // &our_Elf64_Ehdr
add w1,w1,w3 // sz_pack2 + cpr0.sz_unc
ldr x0,[x12,#4*4] // ADRM
add x1,x1,# PAGE_SIZE
section LUNMP000
// unused
section LUNMP001
// unused
section ELFMAINXu
PUSH4(x0,x1,x2,x13) // ADRU, LENU, space for sz_unc, MFLG
SP_MFLG= 4*8
D_sz_unc=2*8 // stack displacement to sz_unc
mov w2,#PROT_READ | PROT_WRITE | PROT_EXEC
orr w3,w13,#MAP_FIXED // MFLG: MAP_{PRIVATE|ANON}
mov x5,#0 // offset= 0
mov w4,#-1 // fd= -1; cater to *BSD for fd when MAP_ANON
do_sys __NR_mmap64
#if DEBUG /*{*/
stmdb sp!,{TRACE_REGS}; mov r0,#2; bl trace
#endif /*}*/
cmn x0,#4096
bcs msg_SELinux
copy_cl: // copy decompressor and folded code
add x5,x0,#64; // FIXME(memcheck) dc zva,x5 // clear FOLLOWING 64-byte line
ldp x1,x2,[x9],#2*8
ldp x3,x4,[x9],#2*8
stp x1,x2,[x0],#2*8
stp x3,x4,[x0],#2*8
ldp x1,x2,[x9],#2*8
ldp x3,x4,[x9],#2*8
stp x1,x2,[x0],#2*8
stp x3,x4,[x0],#2*8
cmp x9,x10
sub x5,x9,#64; // FIXME(memcheck) dc cvau,x5 // clean 64-byte line
blo copy_cl // all source lines
sub x4,x0,x9 // relocation amount
ldr w1,[sp,#SP_MFLG]
adr x15,f_decompress
str w1,[x0],#4 // MFLG at -4+ fold_begin
mov lr,x0 // dst for unfolded code
add x15,x15,x4 // relocated f_decompress
ldr w9,[x12] // sz_pack2
sub w9,w9,#sz_Elf64_Ehdr + 2*sz_Elf64_Phdr + sz_l_info + sz_p_info
sub x10,x12,x9 // &b_info
add x10,x10,x4 // relocated &b_info
ldr w4,[x11,# b_method ] // 5th param (whole word: endian issues!)
D_stm1=0*8
ldr w3,[x11,# sz_unc]
add x0, x11,# sz_b_info
ldr w1,[x11,# sz_cpr ]
mov x2,lr // dst
str w3,[sp,#D_stm1 + D_sz_unc] // sz_unc; lzma needs for EOF
add x3, sp,#D_stm1 + D_sz_unc // &sz_unc
#if DEBUG /*{*/
stmdb sp!,{TRACE_REGS}; mov r0,#3; bl trace
#endif /*}*/
br x15 // decompress folded code, return to *lr
#if DEBUG /*{*/
TRACE_BUFLEN=512
trace:
str lr,[sp,#(-1+ 15)*4] @ return pc; [remember: sp is not stored]
mov r4,sp @ &saved_r0
sub sp,sp,#TRACE_BUFLEN
mov r2,sp @ output string
mov r1,#'\n'; bl trace_hex @ In: r0 as label
mov r1,#'>'; strb r1,[r2],#1
mov r5,#3 @ rows to print
L600: @ each row
sub r0,r4,#TRACE_BUFLEN
sub r0,r0,sp
mov r0,r0,lsr #2; mov r1,#'\n'; bl trace_hex @ which block of 8
mov r6,#8 @ words per row
L610: @ each word
ldr r0,[r4],#4; mov r1,#' '; bl trace_hex @ next word
subs r6,r6,#1; bgt L610
subs r5,r5,#1; bgt L600
mov r0,#'\n'; strb r0,[r2],#1
sub r2,r2,sp @ count
mov r1,sp @ buf
mov r0,#2 @ FD_STDERR
do_sys __NR_write
add sp,sp,#TRACE_BUFLEN
ldmia sp!,{TRACE_REGS}
trace_hex: // In: r0=val, r1=punctuation before, r2=ptr; Uses: r3, ip
strb r1,[r2],#1 @ punctuation
mov r3,#4*(8 -1) @ shift count
adr ip,hex
L620:
mov r1,r0,lsr r3
and r1,r1,#0xf
ldrb r1,[ip, r1]
strb r1,[r2],#1
subs r3,r3,#4; bge L620
ret
hex:
.ascii "0123456789abcdef"
#endif /*}*/
f_decompress:
#define LINUX_ARM_CACHEFLUSH 1
section NRV_HEAD
// empty
section NRV_TAIL
// empty
section NRV2E
#include "arch/arm64/v8/nrv2e_d32.S"
section NRV2D
#include "arch/arm64/v8/nrv2d_d32.S"
section NRV2B
#include "arch/arm64/v8/nrv2b_d32.S"
#include "arch/arm64/v8/lzma_d.S"
section ELFMAINY
end_decompress: .globl end_decompress
msg_SELinux:
mov w2,#L71 - L70 // length
adr x1,L70 // message text
mov w0,#2 // fd stderr
do_sys __NR_write
die:
mov w0,#127
do_sys __NR_exit
L70:
.asciz "PROT_EXEC|PROT_WRITE failed.\n"
L71:
/* IDENTSTR goes here */
section ELFMAINZ
cpr0: .globl cpr0
/* { b_info={sz_unc, sz_cpr, {4 char}}, folded_loader...} */
/*
vi:ts=8:et:nowrap
*/
+384
View File
@@ -0,0 +1,384 @@
// aarch64-linux.elf-fold.S -- linkage to C code to process Elf binary
//
// This file is part of the UPX executable compressor.
//
// Copyright (C) 2000-2015 John F. Reiser
// All Rights Reserved.
//
// UPX and the UCL library are free software; you can redistribute them
// and/or modify them under the terms of the GNU General Public License as
// published by the Free Software Foundation; either version 2 of
// the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; see the file COPYING.
// 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>
//
// John F. Reiser
// <jreiser@users.sourceforge.net>
//
#define ARM_OLDABI 1
#include "arch/arm64/v8/macros.S"
sz_Elf64_Ehdr= 64
sz_Elf64_Phdr= 56
sz_l_info = 12
sz_p_info = 12
sz_b_info = 12
sz_unc= 0
sz_cpr= 4
b_method= 8
MAP_PRIVATE= 0x02
MAP_FIXED= 0x10
PROT_READ= 0x1
O_RDONLY= 0
AT_FDCWD= -100
PAGE_SHIFT= 12
PAGE_SIZE = -(~0<<PAGE_SHIFT)
#ifndef DEBUG /*{*/
#define DEBUG 0
#endif /*}*/
//@ control just falls through, after this part and compiled C code
//@ are uncompressed.
#define OVERHEAD 2048
#define MAX_ELF_HDR 512
fold_begin:
/* In:
r15= f_decompress
r10= &b_info of first compressed block (after move)
r9= total size of compressed data
sp/ ADRU,LENU,sz_unc,MFLG, argc,argv...
*/
POP4(x3,x4,x5,x8) // x3= ADRU; x4= LENU; x5= sz_unc; x8= MFLG
ldr x7,[sp,#0] // argc
mov x0,sp // current stack pointer
add x1,sp,#2*8 // skip argc and terminator of argv
add x1,x1,x7,lsl #3 // skip argv
.L10: // skip env
ldr x2,[x1],#8
cbnz x2,.L10
.L20: // skip auxv
ldr x2,[x1],#2*8
cbnz x2,.L20 // AT_NULL
sub x0,x1,#4096 // buffer for readlink
sub x0,x0,#4 // space for copy of space3eq
sub x1,x1,x0 // amount needed for argc,argv,env,auxv
lsr x0,x0,#PAGE_SHIFT // round down
sub x0,x0,#1 // one page
lsl x6,x0,#PAGE_SHIFT // page address
sub x0,x6,x1 // space for argc,argv,env,auxv
sub x0,x0,#8 // room for added env ptr
and x0,x0,#~0<<4 // sp must be 16-byte aligned
add x1,sp,#8 // old_argv; avoid 0==argc impostor for terminator of argv
mov sp,x0 // new_argc
PUSH3(x3,x4,x5) // ADRU, LENU, sz_unc
SP_sz_unc= 2*8
SP_argc= 4*8 // remember the hole from PUSH3
str x7,[x0],#8 // argc
.Larg: // copy argv
ldr x2,[x1],#8
str x2,[x0],#8
cbnz x2,.Larg
.Lenv: // copy env
ldr x2,[x1],#8
str x2,[x0],#8
cbnz x2,.Lenv
sub x4,x0,#8 // added env ptr goes here
str x2,[x0],#8 // terminator after added ptr
mov x7,x0 // new &Elf64_auxv_t
.Laux: // copy auxv
ldp x2,x3,[x1],#2*8 // .a_type, .a_val
stp x2,x3,[x0],#2*8
cbnz x2,.Laux // AT_NULL
str x0,[sp,#SP_sz_unc] // clobber sz_unc with 1+ &Elf64_auxv_t[AT_NULL@.a_type]
add x1,x6,#1<<PAGE_SHIFT // after the mmap'ed page
str x1,[x4] // new env ptr
ldr w2,space3eq
str w2,[x1],#4 // " =" of new env var
mov w2,#4096-1 // buffer length and null terminator
adr x0,proc_self_exe
bl readlink
/* Preserve symlink /proc/self/exe by mapping one page into stack */
adr x0,proc_self_exe
mov w1,#O_RDONLY
bl open // no error check: cannot recover
mov w4,w0 // fd
mov x0,x6 // page address
mov x5,#0 // offset
mov w3,#MAP_PRIVATE|MAP_FIXED
mov w2,#PROT_READ
mov x1,#PAGE_SIZE
bl mmap // no error check: cannot recover
mov w0,w4 // fd
bl close
/* Construct arglist for upx_main */
add x6,sp,#3*8 // &reloc
sub sp,sp,#MAX_ELF_HDR + OVERHEAD // alloca
adr x5,f_unfilter
mov x4,x15 // f_decompress
mov x3,x7 // new &Elf64_auxv_t
mov x2,sp // ehdr
mov w1,w9 // total size of compressed data
mov x0,x10 // &b_info
bl upx_main
add sp,sp,#MAX_ELF_HDR + OVERHEAD // un-alloca
mov lr,x0 // entry address
POP4(x0,x1,x2,x3) // x0= ADRU; x1= LENU; x2= 1+ &Elf64_auxv_t[AT_NULL@.atype]; x3= reloc
#if DEBUG /*{*/
ldr x4,[x2,#8 -2*8] // Elf64_auxv_t[AT_NULL@.a_type].a_val
ldr w5,[x4,#0] // 1st instr
ldr w6,[x4,#4] // 2nd instr
#define TRACE_REGS r0-r12,r14,r15
stmdb sp!,{TRACE_REGS}; mov r0,#4; bl trace
#endif /*}*/
ldr x3,[x2,#8 -2*8] // Elf64_auxv_t[AT_NULL@.a_type].a_val
mov w8,#__NR_munmap
br x3
space3eq:
.ascii " ="
proc_self_exe:
.asciz "/proc/self/exe"
.balign 4
f_unfilter: // (char *ptr, uint len, uint cto, uint fid)
ptr .req x0
len .req x1
lenw .req w1
cto .req w2 // unused
fid .req w3
t1 .req w2
t2 .req w3
#ifndef FILTER_ID /*{*/
#define FILTER_ID 0x52 /* little-endian */
#endif /*}*/
and fid,fid,#0xff
cmp fid,#FILTER_ID // last use of fid
bne unfret
lsr len,len,#2 // word count
cbz len,unfret
top_unf:
sub len,len,#1
ldr t1,[ptr,len,lsl #2]
ubfx t2,t1,#26,#5
cmp t2,#5; bne tst_unf // not unconditional branch
sub t2,t1,lenw // word displ
bfi t1,t2,#0,#26 // replace
str t1,[ptr,len,lsl #2]
tst_unf:
cbnz len,top_unf
unfret:
ret
#if DEBUG /*{*/
TRACE_BUFLEN=512
trace:
str lr,[sp,#(-1+ 15)*4] // return pc; [remember: sp is not stored]
mov r4,sp // &saved_r0
sub sp,sp,#TRACE_BUFLEN
mov r2,sp // output string
mov r1,#'\n'; bl trace_hex // In: r0 as label
mov r1,#'>'; strb r1,[r2],#1
mov r5,#3 // rows to print
L600: // each row
sub r0,r4,#TRACE_BUFLEN
sub r0,r0,sp
mov r0,r0,lsr #2; mov r1,#'\n'; bl trace_hex // which block of 8
mov r6,#8 // words per row
L610: // each word
ldr r0,[r4],#4; mov r1,#' '; bl trace_hex // next word
subs r6,r6,#1; bgt L610
subs r5,r5,#1; bgt L600
mov r0,#'\n'; strb r0,[r2],#1
sub r2,r2,sp // count
mov r1,sp // buf
mov r0,#2 // FD_STDERR
#if defined(ARMEL_EABI4) /*{*/
mov r7,#__NR_write
swi 0
#else /*}{*/
swi __NR_write
#endif /*}*/
add sp,sp,#TRACE_BUFLEN
ldmia sp!,{TRACE_REGS}
trace_hex: // In: r0=val, r1=punctuation before, r2=ptr; Uses: r3, ip
strb r1,[r2],#1 // punctuation
mov r3,#4*(8 -1) // shift count
adr ip,hex
L620:
mov r1,r0,lsr r3
and r1,r1,#0xf
ldrb r1,[ip, r1]
strb r1,[r2],#1
subs r3,r3,#4; bge L620
ret
hex:
.ascii "0123456789abcdef"
#endif /*}*/
.unreq ptr
.unreq len
.unreq cto
.unreq fid
__NR_SYSCALL_BASE= 0
__NR_exit = 0x5e + __NR_SYSCALL_BASE // 94 exit_group
__NR_read = 0x3f + __NR_SYSCALL_BASE // 63
__NR_write = 0x40 + __NR_SYSCALL_BASE // 64
__NR_open = 0x38 + __NR_SYSCALL_BASE // 56
__NR_close = 0x39 + __NR_SYSCALL_BASE // 57
__NR_unlink= 0x23 + __NR_SYSCALL_BASE // 35
__NR_getpid= 0xad + __NR_SYSCALL_BASE // 172
__NR_brk = 0xd6 + __NR_SYSCALL_BASE // 214
__NR_readlink=0x4e+ __NR_SYSCALL_BASE // 78
__NR_mmap = 0xde + __NR_SYSCALL_BASE // 222
__NR_mprotect = 0xe2 + __NR_SYSCALL_BASE // 226
__NR_munmap = 0xd7 + __NR_SYSCALL_BASE // 215
__ARM_NR_BASE = 0x0f0000 + __NR_SYSCALL_BASE
__ARM_NR_cacheflush = 2 + __ARM_NR_BASE
.globl my_bkpt
my_bkpt:
brk #0
ret
.globl exit
exit:
do_sys __NR_exit
.globl read
read:
do_sys __NR_read; ret
.globl write
write:
do_sys __NR_write; ret
.globl close
close:
do_sys __NR_close; ret
.globl getpid
getpid:
do_sys __NR_getpid; ret
.globl brk
brk:
do_sys __NR_brk; ret
.globl munmap
munmap:
do_sys __NR_munmap; ret
.globl mprotect
mprotect:
do_sys __NR_mprotect; ret
bits_privanon= -4+ fold_begin // entry stores: MAP_{PRIVATE|ANON} QNX vs linux
mmap_privanon: .globl mmap_privanon
ldr w6,bits_privanon // r12 === ip
mov x5,#0 // offset= 0
mov x4,#-1 // fd= -1
orr w3,w3,w6 // flags |= MAP_{PRIVATE|ANON} [QNX vs Linux]
// FALL THROUGH to mmap
.globl mmap
mmap:
do_sys __NR_mmap; ret
.globl unlink
unlink:
mov x1,#0 // flags as last arg
mov w8,#__NR_unlink
b svc_AT
.globl open
open:
mov w8,#__NR_open
svc_AT:
//mov x4,x3
mov x3,x2 // mode
mov x2,x1 // flags
mov x1,x0 // fname
mov x0,#AT_FDCWD
svc #0; ret
.globl readlink
readlink:
mov w8,#__NR_readlink
mov x3,x2 // buflen
mov x2,x1 // buffer
mov x1,x0 // fname
mov x0,#AT_FDCWD
svc #0
cmn x0,#4096; bcs 0f // error
mov w3,#0
strb w3,[x2,x0] // null terminate pathname
0:
ret
.globl __clear_cache
__clear_cache:
hlt #0
mov w2,#0
do_sys 0; ret // FIXME
#if DEBUG /*{*/
div10: .globl div10
mov x1,#10
udiv x0,x0,x1
ret
#endif /*}*/
// vi:ts=8:et:nowrap
+48
View File
@@ -0,0 +1,48 @@
/* arm64-linux.elf-fold.lds -- static linker script to build arm64-linux.elf-fold.bin
This file is part of the UPX executable compressor.
Copyright (C) 2000-2017 John F. Reiser
All Rights Reserved.
UPX and the UCL library are free software; you can redistribute them
and/or modify them under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING.
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> <ezerotven+github@gmail.com>
John F. Reiser
<jreiser@users.sourceforge.net>
*/
OUTPUT_FORMAT("elf64-littleaarch64", "elf64-bigaarch64", "elf64-littleaarch64")
OUTPUT_ARCH(aarch64)
/*ENTRY(_start)*/
PHDRS
{
text PT_LOAD FILEHDR PHDRS FLAGS ( 5 ) ; /* r-x (no -w-) */
data PT_LOAD ; /* for setting brk(0) */
}
SECTIONS
{
. = 0x00100000 + SIZEOF_HEADERS + 12; /* 12==sizeof(l_info) */
.text : {
*(.text)
*(.data)
} : text
.data : {
} : data
}
+406
View File
@@ -0,0 +1,406 @@
/* arm64-linux.elf-main.c -- stub loader for Linux 64-bit ELF executable
This file is part of the UPX executable compressor.
Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
Copyright (C) 1996-2017 Laszlo Molnar
Copyright (C) 2000-2017 John F. Reiser
All Rights Reserved.
UPX and the UCL library are free software; you can redistribute them
and/or modify them under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; see the file COPYING.
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> <ezerotven+github@gmail.com>
John F. Reiser
<jreiser@users.sourceforge.net>
*/
#include "include/linux.h"
/*************************************************************************
// configuration section
**************************************************************************/
// In order to make it much easier to move this code at runtime and execute
// it at an address different from it load address: there must be no
// static data, and no string constants.
#define MAX_ELF_HDR 1024 // Elf64_Ehdr + n*Elf64_Phdr must fit in this
/*************************************************************************
// "file" util
**************************************************************************/
typedef struct {
size_t size; // must be first to match size[0] uncompressed size
char *buf;
} Extent;
static void
xread(Extent *x, char *buf, size_t count)
{
char *p=x->buf, *q=buf;
size_t j;
if (x->size < count) {
exit(127);
}
for (j = count; 0!=j--; ++p, ++q) {
*q = *p;
}
x->buf += count;
x->size -= count;
}
/*************************************************************************
// util
**************************************************************************/
#if 1 //{ save space
#define ERR_LAB error: exit(127);
#define err_exit(a) goto error
#else //}{ save debugging time
#define ERR_LAB /*empty*/
static void
err_exit(int a)
{
(void)a; // debugging convenience
exit(127);
}
#endif //}
/*************************************************************************
// UPX & NRV stuff
**************************************************************************/
typedef void f_unfilter(
nrv_byte *, // also addvalue
nrv_uint,
unsigned cto8, // junk in high 24 bits
unsigned ftid
);
typedef int f_expand(
const nrv_byte *, nrv_uint,
nrv_byte *, nrv_uint *, unsigned );
static void
unpackExtent(
Extent *const xi, // input
Extent *const xo, // output
f_expand *const f_decompress,
f_unfilter *f_unf
)
{
while (xo->size) {
struct b_info h;
// Note: if h.sz_unc == h.sz_cpr then the block was not
// compressible and is stored in its uncompressed form.
// Read and check block sizes.
xread(xi, (char *)&h, sizeof(h));
if (h.sz_unc == 0) { // uncompressed size 0 -> EOF
if (h.sz_cpr != UPX_MAGIC_LE32) // h.sz_cpr must be h->magic
err_exit(2);
if (xi->size != 0) // all bytes must be written
err_exit(3);
break;
}
if (h.sz_cpr <= 0) {
err_exit(4);
ERR_LAB
}
if (h.sz_cpr > h.sz_unc
|| h.sz_unc > xo->size ) {
err_exit(5);
}
// Now we have:
// assert(h.sz_cpr <= h.sz_unc);
// assert(h.sz_unc > 0 && h.sz_unc <= blocksize);
// assert(h.sz_cpr > 0 && h.sz_cpr <= blocksize);
if (h.sz_cpr < h.sz_unc) { // Decompress block
nrv_uint out_len = h.sz_unc; // EOF for lzma
int const j = (*f_decompress)((unsigned char *)xi->buf, h.sz_cpr,
(unsigned char *)xo->buf, &out_len, h.b_method );
if (j != 0 || out_len != (nrv_uint)h.sz_unc)
err_exit(7);
// Skip Ehdr+Phdrs: separate 1st block, not filtered
if (h.b_ftid!=0 && f_unf // have filter
&& ((512 < out_len) // this block is longer than Ehdr+Phdrs
|| (xo->size==(unsigned)h.sz_unc) ) // block is last in Extent
) {
(*f_unf)((unsigned char *)xo->buf, out_len, h.b_cto8, h.b_ftid);
}
xi->buf += h.sz_cpr;
xi->size -= h.sz_cpr;
}
else { // copy literal block
xread(xi, xo->buf, h.sz_cpr);
}
xo->buf += h.sz_unc;
xo->size -= h.sz_unc;
}
}
//DEBUG_STRCON(STR_make_hatch, "make_hatch %%p %%x\\n");
static void *
make_hatch_arm64(
Elf64_Phdr const *const phdr,
uint64_t const reloc
)
{
unsigned *hatch = 0;
//DPRINTF((STR_make_hatch(),phdr,reloc));
if (phdr->p_type==PT_LOAD && phdr->p_flags & PF_X) {
// The format of the 'if' is
// if ( ( (hatch = loc1), test_loc1 )
// || ( (hatch = loc2), test_loc2 ) ) {
// action
// }
// which uses the comma to save bytes when test_locj involves locj
// and the action is the same when either test succeeds.
// Try page fragmentation just beyond .text .
if ( ( (hatch = (void *)(~3ul & (3+ phdr->p_memsz + phdr->p_vaddr + reloc))),
( phdr->p_memsz==phdr->p_filesz // don't pollute potential .bss
&& (2*4)<=(~PAGE_MASK & -(uint64_t)hatch) ) ) // space left on page
) {
hatch[0]= 0xd4000001; // svc #0
hatch[1]= 0xd65f03c0; // ret (jmp *lr)
}
else {
hatch = 0;
}
}
return hatch;
}
#if 1 /*{*/
static void
upx_bzero(char *p, size_t len)
{
if (len) do {
*p++= 0;
} while (--len);
}
#define bzero upx_bzero
#else
#define bzero(a,b) __builtin_memset(a,0,b)
#endif /*}*/
static void
auxv_up(Elf64_auxv_t *av, unsigned const type, uint64_t const value)
{
if (av)
for (;; ++av) {
if (av->a_type==type || (av->a_type==AT_IGNORE && type!=AT_NULL)) {
av->a_type = type;
av->a_un.a_val = value;
return;
}
}
}
// The PF_* and PROT_* bits are {1,2,4}; the conversion table fits in 32 bits.
#define REP8(x) \
((x)|((x)<<4)|((x)<<8)|((x)<<12)|((x)<<16)|((x)<<20)|((x)<<24)|((x)<<28))
#define EXP8(y) \
((1&(y)) ? 0xf0f0f0f0 : (2&(y)) ? 0xff00ff00 : (4&(y)) ? 0xffff0000 : 0)
#define PF_TO_PROT(pf) \
((PROT_READ|PROT_WRITE|PROT_EXEC) & ( \
( (REP8(PROT_EXEC ) & EXP8(PF_X)) \
|(REP8(PROT_READ ) & EXP8(PF_R)) \
|(REP8(PROT_WRITE) & EXP8(PF_W)) \
) >> ((pf & (PF_R|PF_W|PF_X))<<2) ))
// Find convex hull of PT_LOAD (the minimal interval which covers all PT_LOAD),
// and mmap that much, to be sure that a kernel using exec-shield-randomize
// won't place the first piece in a way that leaves no room for the rest.
static unsigned long // returns relocation constant
xfind_pages(unsigned mflags, Elf64_Phdr const *phdr, int phnum,
char **const p_brk
)
{
size_t lo= ~0, hi= 0, szlo= 0;
char *addr;
mflags += MAP_PRIVATE | MAP_ANONYMOUS; // '+' can optimize better than '|'
for (; --phnum>=0; ++phdr) if (PT_LOAD==phdr->p_type) {
if (phdr->p_vaddr < lo) {
lo = phdr->p_vaddr;
szlo = phdr->p_filesz;
}
if (hi < (phdr->p_memsz + phdr->p_vaddr)) {
hi = phdr->p_memsz + phdr->p_vaddr;
}
}
szlo += ~PAGE_MASK & lo; // page fragment on lo edge
lo -= ~PAGE_MASK & lo; // round down to page boundary
hi = PAGE_MASK & (hi - lo - PAGE_MASK -1); // page length
szlo = PAGE_MASK & (szlo - PAGE_MASK -1); // page length
addr = mmap((void *)lo, hi, PROT_NONE, mflags, -1, 0);
*p_brk = hi + addr; // the logical value of brk(0)
//mprotect(szlo + addr, hi - szlo, PROT_NONE); // no access, but keep the frames!
return (unsigned long)addr - lo;
}
static Elf64_Addr // entry address
do_xmap(
Elf64_Ehdr const *const ehdr,
Extent *const xi,
int const fdi,
Elf64_auxv_t *const av,
f_expand *const f_decompress,
f_unfilter *const f_unf,
Elf64_Addr *p_reloc
)
{
Elf64_Phdr const *phdr = (Elf64_Phdr const *) (ehdr->e_phoff +
(char const *)ehdr);
char *v_brk;
unsigned long const reloc = xfind_pages(
((ET_DYN!=ehdr->e_type) ? MAP_FIXED : 0), phdr, ehdr->e_phnum, &v_brk);
int j;
for (j=0; j < ehdr->e_phnum; ++phdr, ++j)
if (xi && PT_PHDR==phdr->p_type) {
auxv_up(av, AT_PHDR, phdr->p_vaddr + reloc);
} else
if (PT_LOAD==phdr->p_type) {
unsigned const prot = PF_TO_PROT(phdr->p_flags);
Extent xo;
size_t mlen = xo.size = phdr->p_filesz;
char *addr = xo.buf = reloc + (char *)phdr->p_vaddr;
char *haddr = phdr->p_memsz + addr;
size_t frag = (long)addr &~ PAGE_MASK;
mlen += frag;
addr -= frag;
if (addr != mmap(addr, mlen, prot | (xi ? PROT_WRITE : 0),
MAP_FIXED | MAP_PRIVATE | (xi ? MAP_ANONYMOUS : 0),
(xi ? -1 : fdi), phdr->p_offset - frag) ) {
err_exit(8);
}
if (xi) {
unpackExtent(xi, &xo, f_decompress, f_unf);
}
// Linux does not fixup the low end, so neither do we.
//if (PROT_WRITE & prot) {
// bzero(addr, frag); // fragment at lo end
//}
frag = (-mlen) &~ PAGE_MASK; // distance to next page boundary
if (PROT_WRITE & prot) { // note: read-only .bss not supported here
bzero(mlen+addr, frag); // fragment at hi end
}
if (xi) {
void *const hatch = make_hatch_arm64(phdr, reloc);
if (0!=hatch) {
auxv_up(av, AT_NULL, (uint64_t)hatch);
}
if (0!=mprotect(addr, mlen, prot)) {
err_exit(10);
ERR_LAB
}
}
addr += mlen + frag; /* page boundary on hi end */
if (addr < haddr) { // need pages for .bss
if (addr != mmap(addr, haddr - addr, prot,
MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, -1, 0 ) ) {
err_exit(9);
}
}
}
if (xi) { // 1st call (main); also have (0!=av) here
if (ET_DYN!=ehdr->e_type) {
// Needed only if compressed shell script invokes compressed shell.
// brk(v_brk); // SIGSEGV when is_big [unmaps ourself!]
}
}
if (0!=p_reloc) {
*p_reloc = reloc;
}
return ehdr->e_entry + reloc;
}
/*************************************************************************
// upx_main - called by our entry code
//
// This function is optimized for size.
**************************************************************************/
void *
upx_main( // returns entry address
/*x0*/ struct b_info const *const bi, // 1st block header
/*x1*/ size_t const sz_compressed, // total length
/*x2*/ Elf64_Ehdr *const ehdr, // temp char[sz_ehdr] for decompressing
/*x3*/ Elf64_auxv_t *const av,
/*x4*/ f_expand *const f_decompress,
/*x5*/ f_unfilter *const f_unf,
/*x6*/ Elf64_Addr *preloc // IN OUT; value result for ET_DYN
)
{
Elf64_Phdr const *phdr = (Elf64_Phdr const *)(1+ ehdr);
Elf64_Addr entry;
Extent xo, xi1, xi2;
xo.buf = (char *)ehdr;
xo.size = bi->sz_unc;
xi2.buf = CONST_CAST(char *, bi); xi2.size = sz_compressed;
xi1.buf = CONST_CAST(char *, bi); xi1.size = sz_compressed;
// ehdr = Uncompress Ehdr and Phdrs
unpackExtent(&xi2, &xo, f_decompress, 0); // never filtered?
// AT_PHDR.a_un.a_val is set again by do_xmap if PT_PHDR is present.
auxv_up(av, AT_PHDR , (unsigned long)(1+(Elf64_Ehdr *)phdr->p_vaddr));
auxv_up(av, AT_PHNUM , ehdr->e_phnum);
//auxv_up(av, AT_PHENT , ehdr->e_phentsize); /* this can never change */
//auxv_up(av, AT_PAGESZ, PAGE_SIZE); /* ld-linux.so.2 does not need this */
entry = do_xmap(ehdr, &xi1, 0, av, f_decompress, f_unf, preloc); // "rewind"
auxv_up(av, AT_ENTRY , entry);
{ // Map PT_INTERP program interpreter
int j;
for (j=0; j < ehdr->e_phnum; ++phdr, ++j) if (PT_INTERP==phdr->p_type) {
char const *const iname = *preloc + (char const *)phdr->p_vaddr;
int const fdi = open(iname, O_RDONLY, 0);
if (0 > fdi) {
err_exit(18);
}
if (MAX_ELF_HDR!=read(fdi, (void *)ehdr, MAX_ELF_HDR)) {
ERR_LAB
err_exit(19);
}
{
Elf64_Addr i_reloc = 0;
entry = do_xmap(ehdr, 0, fdi, 0, 0, 0, &i_reloc);
auxv_up(av, AT_BASE, i_reloc);
}
close(fdi);
}
}
return (void *)entry;
}
/* vim:set ts=4 sw=4 et: */
+400
View File
@@ -0,0 +1,400 @@
/* arm-linux.shlib-init.S -- Linux Elf shared library init & decompressor
*
* This file is part of the UPX executable compressor.
*
* Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
* Copyright (C) 1996-2017 Laszlo Molnar
* Copyright (C) 2000-2017 John F. Reiser
* All Rights Reserved.
*
* UPX and the UCL library are free software; you can redistribute them
* and/or modify them under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; see the file COPYING.
* 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> <ezerotven+github@gmail.com>
*
* John F. Reiser
* <jreiser@users.sourceforge.net>
*/
#include "arch/arm64/v8/macros.S"
sz_Elf64_Ehdr = 16 + 2*2 + 4 + 3*8 + 4 + 6*2
sz_Elf64_Phdr = 2*4 + 6*8
sz_b_info= 12
sz_unc= 0
sz_cpr= 4
b_method= 8
sz_l_info= 12
sz_p_info= 12
PROT_READ= 1
PROT_WRITE= 2
PROT_EXEC= 4
MAP_PRIVATE= 2
MAP_FIXED= 0x10
MAP_ANONYMOUS= 0x20
PAGE_SHIFT= 12
PAGE_MASK= (~0<<PAGE_SHIFT)
PAGE_SIZE= -PAGE_MASK
__NR_exit = 93
__NR_write = 64
__NR_mmap64 = 0xde // 222
__NR_munmap = 0xd7 // 215
__NR_mprotect = 0xe2 // 226
__ARM_NR_cacheflush = (1<<31) // FIXME
#define arg1 x0
#define arg2 x1
#define arg3 x2
#define arg4 x3
#define arg5 x4
#define edi w0
#define esi w1
#define edx w2
#define tmp w3
#define eax w4
#define ecx w5
#define rdi x0
#define rsi x1
#define rdx x2
#define rax x4
#define rcx x5
#define lr x30
#define fp x29
#define src x0
#define len w1
#define dst x2
#define dstw w2
#define tmp w3
#define tmpx x3
#define bits w4
#define off w5
section ELFMAINX
// .long offset(.) // detect relocation
// .long offset(user DT_INIT)
// .long offset(escape_hatch)
// .long offset({p_info; b_info; compressed data})
_start: .globl _start
brk #0 // for debugging
PUSH3(x29,x30,x0)
PUSH4(arg4,arg5,x6,x7)
PUSH3(arg1,arg2,arg3)
mov fp,sp
o_uinit= (3+4+2)*8 // pc
bl main // push &f_decompress
f_decompress:
#define LINUX_ARM_CACHEFLUSH 1
section NRV_HEAD
// empty
section NRV_TAIL
// empty
section NRV2E
#include "arch/arm64/v8/nrv2e_d32.S"
section NRV2D
#include "arch/arm64/v8/nrv2d_d32.S"
section NRV2B
#include "arch/arm64/v8/nrv2b_d32.S"
#include "arch/arm64/v8/lzma_d.S"
section ELFMAINY
end_decompress: .globl end_decompress
msg_SELinux:
mov w2,#L71 - L70 // length
adr x1,L70 // message text
mov w0,#2 // fd stderr
do_sys __NR_write
die:
mov w0,#127
do_sys __NR_exit
L70:
.asciz "PROT_EXEC|PROT_WRITE failed.\n"
L71:
/* IDENTSTR goes here */
section ELFMAINZ
.macro push reg
str \reg,[sp,#-4]!
.endm
.macro pop reg
ldr \reg,[sp],#4
.endm
#define lodsl ldr eax,[rsi],#4
#define lodslu lodsl
main:
// 1. allocate temporary pages
// 2. copy to temporary pages:
// fragment of page below dst; compressed src;
// decompress+unfilter; supervise
// 3. mmap destination pages for decompressed data
// 4. create escape hatch
// 5. jump to temporary pages
// 6. uncompress
// 7. unfilter
// 8. mprotect decompressed pages
// 9 setup args for unmap of temp pages
// 10. jump to escape hatch
// 11. unmap temporary pages
// 12. goto user DT_INIT
mov rdx,lr // &f_decompress
add rsi,rdx,# _start - f_decompress - 4*4
mov rcx,rsi
lodsl; sub rcx,rcx,rax; //str ecx,[fp,#o_reloc]
lodsl; add rax,rcx,rax; str eax,[fp,#o_uinit] // reloc DT_INIT for step 12
lodsl; add rax,rcx,rax; push rax // reloc &hatch for step 10
o_hatch= -1*4
lodsl; add edi,ecx,eax // &l_info; also destination for decompress
add esi,edi,#sz_l_info + sz_p_info // &b_info
sub sp,sp,#2*4 // param space: munmap temp pages step 9
p_unmap= -3*4
ldr eax,[rsi,#4]; add rsi,rsi,#3*4 // sz_cpr
add rsi,rsi,rax // skip unpack helper block
lodslu // eax=dstlen
lsl ecx,edi,# (32-PAGE_SHIFT)
lsr ecx,ecx,#2+(32-PAGE_SHIFT) // ecx= w_fragment
add eax,eax,ecx,lsl #2; push eax // params: mprotect restored pages step 8
sub edi,edi,ecx,lsl #2; push edi
p_mprot= -5*8
sub eax,eax,ecx,lsl #2 // dstlen
add edi,edi,ecx,lsl #2 // dst
push ecx // w_fragment
o_wfrag= -6*8
bl L610
f_unfilter: // (char *ptr, uint len, uint cto, uint fid)
ptr .req x0
fid .req w3
#ifndef FILTER_ID /*{*/
#define FILTER_ID 0x50 /* little-endian */
#endif /*}*/
and fid,fid,#0xff
cmp fid,#FILTER_ID // last use of fid
bne unfret
lsr x1,x1,#2 // word count
cbz x1,unfret
top_unf:
sub x1,x1,#1
ldr w2,[ptr,x1,lsl #2]
ubfx w3,w2,#26,#5
cmp w3,#5; bne tst_unf // not unconditional branch
sub w2,w2,w1 // word displ; hi 0b.00101 preserves bit 31
ubfm w2,w3,#26,#5
str w2,[ptr,x1,lsl #2]
tst_unf:
cbnz x1,top_unf
unfret:
ret
L610:
push lr
o_unflt= -7*8
ldrb tmp,[rsi,#b_method-4+1]; push tmpx // ftid
ldrb tmp,[rsi,#b_method-4+2]; push tmpx // cto8
push rax // dstlen also for unfilter step 7
push rdi // dst param for unfilter step 7
p_unflt= -11*8
lodslu; mov ecx,eax // ecx= srclen
lodslu; push rax // method,filter,cto,junk
push rdx // &decompress
o_uncpr= -13*8
add tmpx,fp,#p_unflt+1*4; push tmpx // &dstlen
push rdi // dst
push rcx // srclen
push rsi // src; arglist ready for decompress step 6
p_uncpr= -17*8
and tmpx,rsi,#3 // length of prefix alignment
add rcx,rcx,#3 // allow suffix alignment
add rcx,rcx,tmpx // prefix increases byte length
ldr tmp,[fp,#o_wfrag]; add rdx,tmpx,rcx,lsr #2 // w_srclen + w_frag
ldr tmp,[fp,#o_uncpr]; bl wlen_subr
ldr tmp,[fp,#o_unflt]; bl wlen_subr
bl L220
supervise:
// Allocate pages for result of decompressing.
// These replace the compressed source and the following hole.
mov arg5,#-1 // cater to *BSD for fd of MAP_ANON
mov arg4,#MAP_PRIVATE|MAP_ANONYMOUS|MAP_FIXED
mov arg3,#PROT_READ|PROT_WRITE
ldr arg2,[fp,#p_mprot+4] // dstlen
ldr arg1,[fp,#p_mprot ] // dst
mov x6,arg1 // required result
do_sys __NR_mmap64; cmp x0,x6; beq 0f; brk #0; 0:
// Restore fragment of page below dst
ldr ecx,[fp,#o_wfrag]
//mov edi,r0 // NOP: edi==r0
ldr rsi,[fp,#p_unmap]
bl movsl
POP4(arg1,arg2,arg3,arg4)
POP1(rax)
blr rax // decompress
add sp,sp,#8 // toss arg5
bl L620
//hatch:
do_sys __NR_munmap
POP3(arg1,arg2,arg3)
POP4(rax,rcx,x6,x7)
POP3(fp,lr,x1)
br x1
L620: // Implant escape hatch at end of .text
ldr eax,[fp,#o_hatch]
ldp arg1,arg2,[lr]
stp arg1,arg2,[rax]
//p_unflt
POP4(arg1,arg2,arg3,arg4)
POP2(rax,x12) // x12= w_fragment [toss]
cbz arg4,0f // 0==ftid ==> no filter
blr rax // unfilter
0:
//p_mprot
ldr arg1,[sp,#0*4] // lo(dst)
ldr arg2,[sp,#1*4] // len
mov arg3,#0
add arg2,arg2,arg1 // hi(dst)
add arg2,arg2,#2*4 // len(hatch)
do_sys __ARM_NR_cacheflush
POP2(arg1,arg2)
mov arg3,#PROT_READ|PROT_EXEC
do_sys __NR_mprotect
//p_unmap
#if defined(ARMEL_EABI4) //{
// first part of do_sys7t __NR_munmap
.if __NR_munmap <= 0xff
mov r7,#__NR_munmap
.else
mov r7,#__NR_munmap>>16
lsl r7,r7,#16
add r7,r7,#__NR_munmap - ((__NR_munmap>>16)<<16)
.endif
#endif //}
POP3(arg1,arg2,lr)
br lr // togo hatch
movsl_subr:
ldr ecx,[rsi,#-4] // 'bl <over>' instruction word
bic ecx,ecx,#0xff<<24 // displacment field
add ecx,ecx,#1 // displ omits one word
// FALL THROUGH to the part of 'movsl' that trims to a multiple of 8 words.
// 7/8 of the time this is faster; 1/8 of the time it's slower.
9:
ldr tmp,[rsi],#4; sub ecx,ecx,#1
str tmp,[rdi],#4
movsl: // rdi= 4-byte aligned dst; esi= 4-byte aligned src; ecx= word count
tst ecx,#7; bne 9b // work ecx down to multiple of 8
lsr ecx,ecx,#3; cbz ecx,9f
7:
ldp x2,x3,[rsi],#2*8; subs ecx,ecx,#1
stp x2,x3,[rdi],#2*8; cbnz ecx,7b
9:
ret
L220:
push lr // &supervise
o_super= -18*8
mov tmpx,lr; bl wlen_subr // wlen_supervise
lsl arg2,rdx,#2 // convert to bytes
// Allocate pages to hold temporary copy.
mov arg5,#-1 // cater to *BSD for fd of MAP_ANON
mov arg4,#MAP_PRIVATE|MAP_ANONYMOUS
mov arg3,#PROT_READ|PROT_WRITE|PROT_EXEC
str arg2,[fp,#p_unmap+1*8] // length to unmap
mov arg1,#0 // any addr
do_sys __NR_mmap64; cmn x0,#4096; bcc 0f; brk #0; 0:
str x0,[fp,#p_unmap+0*8] // address to unmap
ldr esi,[fp,#p_mprot]
//mov edi,r0 // edi= dst NOP: edi==r0
ldr ecx,[fp,#o_wfrag] // w_fragment
bl movsl // copy the fragment
ldr esi,[fp,#p_uncpr+0*4] // src
ldr ecx,[fp,#p_uncpr+1*4] // len
and tmp,esi,#3 // length of prefix alignment
sub esi,esi,tmp // down to word aligned
add ecx,ecx,tmp // prefix increases byte length
add tmp,tmp,edi // skip prefix at destination
str tmp,[fp,#p_uncpr+0*4] // dst
add ecx,ecx,#7 // round up to full words
lsr ecx,ecx,#3
bl movsl // copy all aligned words that contain compressed data
mov rdx,rdi // lo(dst) of copied code
ldr rsi,[fp,#o_uncpr]
str rdi,[fp,#o_uncpr]
bl movsl_subr // copy decompressor
ldr rsi,[fp,#o_unflt]
str rdi,[fp,#o_unflt]
bl movsl_subr // copy unfilter
pop rsi // &supervise
push rdi // &copied
bl movsl_subr // copy supervisor
mov arg2,rdi // hi(dst) of copied code
mov arg1,rdx // lo(dst) of copied code
mov arg3,#0
do_sys __ARM_NR_cacheflush
pop lr; br lr // goto copied supervisor
wlen_subr: // edx+= nwords of inline subr at *tmp
ldr tmp,[tmpx,#-4] // 'bl <over>' instruction word
bic tmp,tmp,#0xff<<24 // displacment field
add tmp,tmp,#1 // displ omits one word
add rdx,rdx,tmpx
ret
/*__XTHEENDX__*/
/* vim:set ts=8 sw=8 et: */
+1 -1
View File
@@ -96,7 +96,7 @@ struct timespec {
#elif defined(__amd64__) #elif defined(__amd64__)
#define PAGE_MASK (~0ul<<12) // discards the offset, keeps the page #define PAGE_MASK (~0ul<<12) // discards the offset, keeps the page
#define PAGE_SIZE ( 1ul<<12) #define PAGE_SIZE ( 1ul<<12)
#elif defined(__i386__) || defined(__powerpc__) || defined(__arm__) #elif defined(__i386__) || defined(__powerpc__) || defined(__arm__) || defined(__AARCH64EL__)
#define PAGE_MASK (~0ul<<12) // discards the offset, keeps the page #define PAGE_MASK (~0ul<<12) // discards the offset, keeps the page
#define PAGE_SIZE ( 1ul<<12) #define PAGE_SIZE ( 1ul<<12)
#endif #endif
+22 -10
View File
@@ -4,13 +4,18 @@ Sections:
Idx Name Size VMA LMA File off Algn Flags Idx Name Size VMA LMA File off Algn Flags
0 MACHMAINX 00000044 0000000000000000 0000000000000000 00000040 2**0 CONTENTS, RELOC, READONLY 0 MACHMAINX 00000044 0000000000000000 0000000000000000 00000040 2**0 CONTENTS, RELOC, READONLY
1 NRV_HEAD 00000000 0000000000000000 0000000000000000 00000084 2**0 CONTENTS, READONLY 1 NRV_HEAD 00000000 0000000000000000 0000000000000000 00000084 2**0 CONTENTS, READONLY
2 NRV2E 0000013c 0000000000000000 0000000000000000 00000084 2**0 CONTENTS, READONLY 2 NRV2E 00000128 0000000000000000 0000000000000000 00000084 2**0 CONTENTS, READONLY
3 NRV2D 00000130 0000000000000000 0000000000000000 000001c0 2**0 CONTENTS, READONLY 3 NRV2D 0000011c 0000000000000000 0000000000000000 000001ac 2**0 CONTENTS, READONLY
4 NRV2B 00000108 0000000000000000 0000000000000000 000002f0 2**0 CONTENTS, READONLY 4 NRV2B 000000f0 0000000000000000 0000000000000000 000002c8 2**0 CONTENTS, READONLY
5 NRV_TAIL 000004b4 0000000000000000 0000000000000000 000003f8 2**0 CONTENTS, READONLY 5 NRV_TAIL 00000000 0000000000000000 0000000000000000 000003b8 2**0 CONTENTS, READONLY
6 MACHMAINY 00000000 0000000000000000 0000000000000000 000008ac 2**0 CONTENTS, READONLY 6 LZMA_ELF00 000000d0 0000000000000000 0000000000000000 000003b8 2**0 CONTENTS, RELOC, READONLY
7 MACHMAINZ 00000058 0000000000000000 0000000000000000 000008ac 2**0 CONTENTS, READONLY 7 LZMA_DEC20 00000930 0000000000000000 0000000000000000 00000488 2**0 CONTENTS, READONLY
8 LZMA_DEC10 0000049c 0000000000000000 0000000000000000 00000db8 2**0 CONTENTS, READONLY
9 LZMA_DEC30 00000000 0000000000000000 0000000000000000 00001254 2**0 CONTENTS, READONLY
10 MACHMAINY 00000000 0000000000000000 0000000000000000 00001254 2**0 CONTENTS, READONLY
11 MACHMAINZ 00000058 0000000000000000 0000000000000000 00001254 2**0 CONTENTS, READONLY
SYMBOL TABLE: SYMBOL TABLE:
0000000000000000 l d LZMA_DEC30 0000000000000000 LZMA_DEC30
0000000000000000 l d MACHMAINZ 0000000000000000 MACHMAINZ 0000000000000000 l d MACHMAINZ 0000000000000000 MACHMAINZ
0000000000000000 l d MACHMAINX 0000000000000000 MACHMAINX 0000000000000000 l d MACHMAINX 0000000000000000 MACHMAINX
0000000000000000 l d NRV_HEAD 0000000000000000 NRV_HEAD 0000000000000000 l d NRV_HEAD 0000000000000000 NRV_HEAD
@@ -18,14 +23,21 @@ SYMBOL TABLE:
0000000000000000 l d NRV2D 0000000000000000 NRV2D 0000000000000000 l d NRV2D 0000000000000000 NRV2D
0000000000000000 l d NRV2B 0000000000000000 NRV2B 0000000000000000 l d NRV2B 0000000000000000 NRV2B
0000000000000000 l d NRV_TAIL 0000000000000000 NRV_TAIL 0000000000000000 l d NRV_TAIL 0000000000000000 NRV_TAIL
0000000000000000 l d LZMA_ELF00 0000000000000000 LZMA_ELF00
0000000000000000 l d LZMA_DEC20 0000000000000000 LZMA_DEC20
0000000000000000 l d LZMA_DEC10 0000000000000000 LZMA_DEC10
0000000000000000 l d MACHMAINY 0000000000000000 MACHMAINY 0000000000000000 l d MACHMAINY 0000000000000000 MACHMAINY
0000000000000000 g MACHMAINX 0000000000000000 _start 0000000000000000 g MACHMAINX 0000000000000000 _start
0000000000000000 g F NRV2E 000000000000013c ucl_nrv2e_decompress_8 0000000000000000 g F NRV2E 0000000000000128 ucl_nrv2e_decompress_32
0000000000000000 g F NRV2D 0000000000000130 ucl_nrv2d_decompress_8 0000000000000000 g F NRV2D 000000000000011c ucl_nrv2d_decompress_32
0000000000000000 g F NRV2B 0000000000000108 ucl_nrv2b_decompress_8 0000000000000000 g F NRV2B 00000000000000f0 ucl_nrv2b_decompress_32
0000000000000000 g NRV_TAIL 0000000000000000 LzmaDecode 0000000000000000 g LZMA_DEC10 0000000000000000 LzmaDecode
0000000000000000 g MACHMAINY 0000000000000000 end_decompress 0000000000000000 g MACHMAINY 0000000000000000 end_decompress
RELOCATION RECORDS FOR [MACHMAINX]: RELOCATION RECORDS FOR [MACHMAINX]:
OFFSET TYPE VALUE OFFSET TYPE VALUE
0000000000000040 R_AARCH64_CALL26 MACHMAINZ+0x0000000000000050 0000000000000040 R_AARCH64_CALL26 MACHMAINZ+0x0000000000000050
RELOCATION RECORDS FOR [LZMA_ELF00]:
OFFSET TYPE VALUE
0000000000000004 R_AARCH64_CONDBR19 LZMA_DEC30
+55 -55
View File
@@ -67,35 +67,35 @@ LOAD tmp/arm64-darwin.macho-main.o
*(.iplt) *(.iplt)
.iplt 0x0000000000400080 0x0 tmp/arm64-darwin.macho-fold.o .iplt 0x0000000000400080 0x0 tmp/arm64-darwin.macho-fold.o
.text 0x0000000000400078 0x6a8 .text 0x0000000000400078 0x680
*(.text.unlikely .text.*_unlikely .text.unlikely.*) *(.text.unlikely .text.*_unlikely .text.unlikely.*)
*(.text.exit .text.exit.*) *(.text.exit .text.exit.*)
*(.text.startup .text.startup.*) *(.text.startup .text.startup.*)
*(.text.hot .text.hot.*) *(.text.hot .text.hot.*)
*(.text .stub .text.* .gnu.linkonce.t.*) *(.text .stub .text.* .gnu.linkonce.t.*)
.text 0x0000000000400078 0x188 tmp/arm64-darwin.macho-fold.o .text 0x0000000000400078 0x160 tmp/arm64-darwin.macho-fold.o
0x0000000000400078 _start 0x0000000000400078 _start
0x0000000000400134 spin 0x0000000000400134 spin
0x0000000000400138 exit 0x0000000000400138 exit
0x0000000000400144 read 0x0000000000400140 read
0x0000000000400154 write 0x000000000040014c write
0x0000000000400164 open 0x0000000000400158 open
0x0000000000400174 close 0x0000000000400164 close
0x0000000000400184 brk 0x0000000000400170 brk
0x0000000000400194 munmap 0x000000000040017c munmap
0x00000000004001a4 mprotect 0x0000000000400188 mprotect
0x00000000004001b4 mmap 0x0000000000400194 mmap
0x00000000004001c4 pread 0x00000000004001a0 pread
0x00000000004001d4 bswap 0x00000000004001ac bswap
.text 0x0000000000400200 0x520 tmp/arm64-darwin.macho-main.o .text 0x00000000004001d8 0x520 tmp/arm64-darwin.macho-main.o
0x0000000000400578 upx_main 0x0000000000400550 upx_main
*(.gnu.warning) *(.gnu.warning)
.fini .fini
*(SORT(.fini)) *(SORT(.fini))
0x0000000000400720 PROVIDE (__etext, .) 0x00000000004006f8 PROVIDE (__etext, .)
0x0000000000400720 PROVIDE (_etext, .) 0x00000000004006f8 PROVIDE (_etext, .)
0x0000000000400720 PROVIDE (etext, .) 0x00000000004006f8 PROVIDE (etext, .)
.rodata .rodata
*(.rodata .rodata.* .gnu.linkonce.r.*) *(.rodata .rodata.* .gnu.linkonce.r.*)
@@ -106,9 +106,9 @@ LOAD tmp/arm64-darwin.macho-main.o
.eh_frame_hdr .eh_frame_hdr
*(.eh_frame_hdr) *(.eh_frame_hdr)
.eh_frame 0x0000000000400720 0x100 .eh_frame 0x00000000004006f8 0x100
*(.eh_frame) *(.eh_frame)
.eh_frame 0x0000000000400720 0x100 tmp/arm64-darwin.macho-main.o .eh_frame 0x00000000004006f8 0x100 tmp/arm64-darwin.macho-main.o
0xf8 (size before relaxing) 0xf8 (size before relaxing)
.gcc_except_table .gcc_except_table
@@ -116,8 +116,8 @@ LOAD tmp/arm64-darwin.macho-main.o
.exception_ranges .exception_ranges
*(.exception_ranges .exception_ranges*) *(.exception_ranges .exception_ranges*)
0x0000000000400820 . = (ALIGN (0x10000) - ((0x10000 - .) & 0xffff)) 0x00000000004007f8 . = (ALIGN (0x10000) - ((0x10000 - .) & 0xffff))
0x0000000000410820 . = DATA_SEGMENT_ALIGN (0x10000, 0x1000) 0x00000000004107f8 . = DATA_SEGMENT_ALIGN (0x10000, 0x1000)
.eh_frame .eh_frame
*(.eh_frame) *(.eh_frame)
@@ -135,22 +135,22 @@ LOAD tmp/arm64-darwin.macho-main.o
*(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tbss .tbss.* .gnu.linkonce.tb.*)
*(.tcommon) *(.tcommon)
.preinit_array 0x0000000000410820 0x0 .preinit_array 0x00000000004107f8 0x0
0x0000000000410820 PROVIDE (__preinit_array_start, .) 0x00000000004107f8 PROVIDE (__preinit_array_start, .)
*(.preinit_array) *(.preinit_array)
0x0000000000410820 PROVIDE (__preinit_array_end, .) 0x00000000004107f8 PROVIDE (__preinit_array_end, .)
.init_array 0x0000000000410820 0x0 .init_array 0x00000000004107f8 0x0
0x0000000000410820 PROVIDE (__init_array_start, .) 0x00000000004107f8 PROVIDE (__init_array_start, .)
*(SORT(.init_array.*)) *(SORT(.init_array.*))
*(.init_array) *(.init_array)
0x0000000000410820 PROVIDE (__init_array_end, .) 0x00000000004107f8 PROVIDE (__init_array_end, .)
.fini_array 0x0000000000410820 0x0 .fini_array 0x00000000004107f8 0x0
0x0000000000410820 PROVIDE (__fini_array_start, .) 0x00000000004107f8 PROVIDE (__fini_array_start, .)
*(SORT(.fini_array.*)) *(SORT(.fini_array.*))
*(.fini_array) *(.fini_array)
0x0000000000410820 PROVIDE (__fini_array_end, .) 0x00000000004107f8 PROVIDE (__fini_array_end, .)
.ctors .ctors
*crtbegin.o(.ctors) *crtbegin.o(.ctors)
@@ -179,43 +179,43 @@ LOAD tmp/arm64-darwin.macho-main.o
.got .got
*(.got) *(.got)
*(.igot) *(.igot)
0x0000000000410820 . = DATA_SEGMENT_RELRO_END (., 0x18) 0x00000000004107f8 . = DATA_SEGMENT_RELRO_END (., 0x18)
.got.plt 0x0000000000410820 0x0 .got.plt 0x00000000004107f8 0x0
*(.got.plt) *(.got.plt)
*(.igot.plt) *(.igot.plt)
.igot.plt 0x0000000000410820 0x0 tmp/arm64-darwin.macho-fold.o .igot.plt 0x00000000004107f8 0x0 tmp/arm64-darwin.macho-fold.o
.data 0x0000000000410820 0x0 .data 0x00000000004107f8 0x0
0x0000000000410820 PROVIDE (__data_start, .) 0x00000000004107f8 PROVIDE (__data_start, .)
*(.data .data.* .gnu.linkonce.d.*) *(.data .data.* .gnu.linkonce.d.*)
.data 0x0000000000410820 0x0 tmp/arm64-darwin.macho-fold.o .data 0x00000000004107f8 0x0 tmp/arm64-darwin.macho-fold.o
.data 0x0000000000410820 0x0 tmp/arm64-darwin.macho-main.o .data 0x00000000004107f8 0x0 tmp/arm64-darwin.macho-main.o
.data1 .data1
*(.data1) *(.data1)
0x0000000000410820 _edata = . 0x00000000004107f8 _edata = .
0x0000000000410820 PROVIDE (edata, .) 0x00000000004107f8 PROVIDE (edata, .)
0x0000000000410820 . = . 0x00000000004107f8 . = .
0x0000000000410820 __bss_start = . 0x00000000004107f8 __bss_start = .
0x0000000000410820 __bss_start__ = . 0x00000000004107f8 __bss_start__ = .
.bss 0x0000000000410820 0x0 .bss 0x00000000004107f8 0x0
*(.dynbss) *(.dynbss)
*(.bss .bss.* .gnu.linkonce.b.*) *(.bss .bss.* .gnu.linkonce.b.*)
.bss 0x0000000000410820 0x0 tmp/arm64-darwin.macho-fold.o .bss 0x00000000004107f8 0x0 tmp/arm64-darwin.macho-fold.o
.bss 0x0000000000410820 0x0 tmp/arm64-darwin.macho-main.o .bss 0x00000000004107f8 0x0 tmp/arm64-darwin.macho-main.o
*(COMMON) *(COMMON)
0x0000000000410820 . = ALIGN ((. != 0x0)?0x8:0x1) 0x00000000004107f8 . = ALIGN ((. != 0x0)?0x8:0x1)
0x0000000000410820 _bss_end__ = . 0x00000000004107f8 _bss_end__ = .
0x0000000000410820 __bss_end__ = . 0x00000000004107f8 __bss_end__ = .
0x0000000000410820 . = ALIGN (0x8) 0x00000000004107f8 . = ALIGN (0x8)
0x0000000000410820 . = SEGMENT_START ("ldata-segment", .) 0x00000000004107f8 . = SEGMENT_START ("ldata-segment", .)
0x0000000000410820 . = ALIGN (0x8) 0x00000000004107f8 . = ALIGN (0x8)
0x0000000000410820 __end__ = . 0x00000000004107f8 __end__ = .
0x0000000000410820 _end = . 0x00000000004107f8 _end = .
0x0000000000410820 PROVIDE (end, .) 0x00000000004107f8 PROVIDE (end, .)
0x0000000000410820 . = DATA_SEGMENT_END (.) 0x00000000004107f8 . = DATA_SEGMENT_END (.)
.stab .stab
*(.stab) *(.stab)
@@ -0,0 +1,61 @@
file format elf64-littleaarch64
Sections:
Idx Name Size VMA LMA File off Algn Flags
0 ELFMAINX 0000003c 0000000000000000 0000000000000000 00000040 2**2 CONTENTS, RELOC, READONLY
1 LUNMP000 00000000 0000000000000000 0000000000000000 0000007c 2**0 CONTENTS, READONLY
2 LUNMP001 00000000 0000000000000000 0000000000000000 0000007c 2**0 CONTENTS, READONLY
3 ELFMAINXu 000000a0 0000000000000000 0000000000000000 0000007c 2**2 CONTENTS, RELOC, READONLY
4 NRV_HEAD 00000000 0000000000000000 0000000000000000 0000011c 2**0 CONTENTS, READONLY
5 NRV_TAIL 00000000 0000000000000000 0000000000000000 0000011c 2**0 CONTENTS, READONLY
6 NRV2E 00000128 0000000000000000 0000000000000000 0000011c 2**2 CONTENTS, READONLY
7 NRV2D 0000011c 0000000000000000 0000000000000000 00000244 2**2 CONTENTS, READONLY
8 NRV2B 000000f0 0000000000000000 0000000000000000 00000360 2**2 CONTENTS, READONLY
9 LZMA_ELF00 000000d0 0000000000000000 0000000000000000 00000450 2**2 CONTENTS, RELOC, READONLY
10 LZMA_DEC20 00000930 0000000000000000 0000000000000000 00000520 2**0 CONTENTS, READONLY
11 LZMA_DEC10 0000049c 0000000000000000 0000000000000000 00000e50 2**2 CONTENTS, READONLY
12 LZMA_DEC30 00000000 0000000000000000 0000000000000000 000012ec 2**0 CONTENTS, READONLY
13 ELFMAINY 0000003e 0000000000000000 0000000000000000 000012ec 2**2 CONTENTS, READONLY
14 ELFMAINZ 00000000 0000000000000000 0000000000000000 0000132a 2**0 CONTENTS, READONLY
SYMBOL TABLE:
0000000000000000 l d LZMA_DEC30 0000000000000000 LZMA_DEC30
0000000000000000 l d ELFMAINY 0000000000000000 ELFMAINY
0000000000000000 l d ELFMAINX 0000000000000000 ELFMAINX
0000000000000000 l d LUNMP000 0000000000000000 LUNMP000
0000000000000000 l d LUNMP001 0000000000000000 LUNMP001
0000000000000000 l d ELFMAINXu 0000000000000000 ELFMAINXu
0000000000000000 l d NRV_HEAD 0000000000000000 NRV_HEAD
0000000000000000 l d NRV_TAIL 0000000000000000 NRV_TAIL
0000000000000000 l d NRV2E 0000000000000000 NRV2E
0000000000000000 l d NRV2D 0000000000000000 NRV2D
0000000000000000 l d NRV2B 0000000000000000 NRV2B
0000000000000000 l d LZMA_ELF00 0000000000000000 LZMA_ELF00
0000000000000000 l d LZMA_DEC20 0000000000000000 LZMA_DEC20
0000000000000000 l d LZMA_DEC10 0000000000000000 LZMA_DEC10
0000000000000000 l d ELFMAINZ 0000000000000000 ELFMAINZ
0000000000000000 *UND* 0000000000000000 LENF
0000000000000000 *UND* 0000000000000000 CPR0
0000000000000000 *UND* 0000000000000000 MFLG
0000000000000000 *UND* 0000000000000000 ADRM
0000000000000014 g ELFMAINX 0000000000000000 _start
0000000000000000 g F NRV2E 0000000000000128 ucl_nrv2e_decompress_32
0000000000000000 g F NRV2D 000000000000011c ucl_nrv2d_decompress_32
0000000000000000 g F NRV2B 00000000000000f0 ucl_nrv2b_decompress_32
0000000000000000 g LZMA_DEC10 0000000000000000 LzmaDecode
0000000000000000 g ELFMAINY 0000000000000000 end_decompress
0000000000000000 g ELFMAINZ 0000000000000000 cpr0
RELOCATION RECORDS FOR [ELFMAINX]:
OFFSET TYPE VALUE
0000000000000000 R_AARCH64_ABS32 LENF
0000000000000004 R_AARCH64_ABS32 CPR0
0000000000000008 R_AARCH64_ABS32 MFLG
000000000000000c R_AARCH64_ABS64 ADRM
RELOCATION RECORDS FOR [ELFMAINXu]:
OFFSET TYPE VALUE
0000000000000024 R_AARCH64_CONDBR19 ELFMAINY
RELOCATION RECORDS FOR [LZMA_ELF00]:
OFFSET TYPE VALUE
0000000000000004 R_AARCH64_CONDBR19 LZMA_DEC30
+51
View File
@@ -0,0 +1,51 @@
Memory Configuration
Name Origin Length Attributes
*default* 0x0000000000000000 0xffffffffffffffff
Linker script and memory map
0x00000000001000bc . = ((0x100000 + SIZEOF_HEADERS) + 0xc)
.text 0x00000000001000bc 0x878
*(.text)
.text 0x00000000001000bc 0x258 tmp/arm64-linux.elf-fold.o
0x000000000010022c my_bkpt
0x0000000000100234 exit
0x000000000010023c read
0x0000000000100248 write
0x0000000000100254 close
0x0000000000100260 getpid
0x000000000010026c brk
0x0000000000100278 munmap
0x0000000000100284 mprotect
0x0000000000100290 mmap_privanon
0x00000000001002a0 mmap
0x00000000001002ac unlink
0x00000000001002b8 open
0x00000000001002d4 readlink
0x0000000000100300 __clear_cache
.text 0x0000000000100314 0x620 tmp/arm64-linux.elf-main.o
0x00000000001007c4 upx_main
*(.data)
.data 0x0000000000100934 0x0 tmp/arm64-linux.elf-fold.o
.data 0x0000000000100934 0x0 tmp/arm64-linux.elf-main.o
.iplt 0x0000000000100934 0x0
.iplt 0x0000000000100934 0x0 tmp/arm64-linux.elf-fold.o
.rela.dyn 0x0000000000100938 0x0
.rela.iplt 0x0000000000100938 0x0 tmp/arm64-linux.elf-fold.o
.data
LOAD tmp/arm64-linux.elf-fold.o
LOAD tmp/arm64-linux.elf-main.o
OUTPUT(tmp/arm64-linux.elf-fold.bin elf64-littleaarch64)
.igot.plt 0x0000000000100938 0x0
.igot.plt 0x0000000000100938 0x0 tmp/arm64-linux.elf-fold.o
.bss 0x0000000000100934 0x0
.bss 0x0000000000100934 0x0 tmp/arm64-linux.elf-fold.o
.bss 0x0000000000100934 0x0 tmp/arm64-linux.elf-main.o
@@ -0,0 +1,43 @@
file format elf64-littleaarch64
Sections:
Idx Name Size VMA LMA File off Algn Flags
0 ELFMAINX 00000024 0000000000000000 0000000000000000 00000040 2**2 CONTENTS, RELOC, READONLY
1 NRV_HEAD 00000000 0000000000000000 0000000000000000 00000064 2**0 CONTENTS, READONLY
2 NRV_TAIL 00000000 0000000000000000 0000000000000000 00000064 2**0 CONTENTS, READONLY
3 NRV2E 00000128 0000000000000000 0000000000000000 00000064 2**2 CONTENTS, READONLY
4 NRV2D 0000011c 0000000000000000 0000000000000000 0000018c 2**2 CONTENTS, READONLY
5 NRV2B 000000f0 0000000000000000 0000000000000000 000002a8 2**2 CONTENTS, READONLY
6 LZMA_ELF00 000000d0 0000000000000000 0000000000000000 00000398 2**2 CONTENTS, RELOC, READONLY
7 LZMA_DEC20 00000930 0000000000000000 0000000000000000 00000468 2**0 CONTENTS, READONLY
8 LZMA_DEC10 0000049c 0000000000000000 0000000000000000 00000d98 2**2 CONTENTS, READONLY
9 LZMA_DEC30 00000000 0000000000000000 0000000000000000 00001234 2**0 CONTENTS, READONLY
10 ELFMAINY 0000003e 0000000000000000 0000000000000000 00001234 2**2 CONTENTS, READONLY
11 ELFMAINZ 000002ec 0000000000000000 0000000000000000 00001274 2**2 CONTENTS, READONLY
SYMBOL TABLE:
0000000000000000 l d LZMA_DEC30 0000000000000000 LZMA_DEC30
0000000000000000 l d ELFMAINZ 0000000000000000 ELFMAINZ
0000000000000000 l d ELFMAINX 0000000000000000 ELFMAINX
0000000000000000 l d NRV_HEAD 0000000000000000 NRV_HEAD
0000000000000000 l d NRV_TAIL 0000000000000000 NRV_TAIL
0000000000000000 l d NRV2E 0000000000000000 NRV2E
0000000000000000 l d NRV2D 0000000000000000 NRV2D
0000000000000000 l d NRV2B 0000000000000000 NRV2B
0000000000000000 l d LZMA_ELF00 0000000000000000 LZMA_ELF00
0000000000000000 l d LZMA_DEC20 0000000000000000 LZMA_DEC20
0000000000000000 l d LZMA_DEC10 0000000000000000 LZMA_DEC10
0000000000000000 l d ELFMAINY 0000000000000000 ELFMAINY
0000000000000000 g ELFMAINX 0000000000000000 _start
0000000000000000 g F NRV2E 0000000000000128 ucl_nrv2e_decompress_32
0000000000000000 g F NRV2D 000000000000011c ucl_nrv2d_decompress_32
0000000000000000 g F NRV2B 00000000000000f0 ucl_nrv2b_decompress_32
0000000000000000 g LZMA_DEC10 0000000000000000 LzmaDecode
0000000000000000 g ELFMAINY 0000000000000000 end_decompress
RELOCATION RECORDS FOR [ELFMAINX]:
OFFSET TYPE VALUE
0000000000000020 R_AARCH64_CALL26 ELFMAINZ
RELOCATION RECORDS FOR [LZMA_ELF00]:
OFFSET TYPE VALUE
0000000000000004 R_AARCH64_CONDBR19 LZMA_DEC30