diff options
-rw-r--r-- | Makefile | 174 | ||||
-rw-r--r-- | Makefile.mingw32 | 188 | ||||
-rw-r--r-- | allmodules.lua | 13 | ||||
-rw-r--r-- | lua-interface.lua | 407 | ||||
-rw-r--r-- | src/lua-interface-hc.h | 483 | ||||
-rw-r--r-- | src/lua-interface.cpp | 745 |
6 files changed, 2010 insertions, 0 deletions
diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..e6c1aaf --- /dev/null +++ b/Makefile @@ -0,0 +1,174 @@ +CC = gcc +CXX = g++ +LD = g++ +STRIP = strip + +INCLUDES = \ +-I../mogltk/include \ +-I../Baltisot/include \ +-I../Baltisot/lib/zlib/include \ +-I../Baltisot/lib/lua/include -I../Baltisot/lib/lua/includes \ +-I../lua-modules/src \ + +HAVES = -DHAVE_VSSCANF -DHAVE_LIBJPEG -DHAVE_FCNTL -DHAVE_MYSQL -DHAVE_UNISTD_H -DHAVE_FORK -DHAVE_PIPE -DHAVE_FSYNC -DHAVE_MALLOC_H -DHAVE_ASPRINTF -DHAVE_BYTESWAP_H + +CPPFLAGS += $(INCLUDES) -g -DSTDC_HEADERS -DREADLINE_STATIC -DHOOK_STDS -fexceptions -DWORDS_LITTLEENDIAN -fexceptions -march=i686 $(HAVES) -DUSE_MPQLIB + +LDFLAGS += -u gluNewTess -rdynamic -g -fexception -lpthread -ljpeg -lSegFault ../Mesa-7.0.2/lib/libGLU.a ../Mesa-7.0.2/lib/libOSMesa.a /usr/lib/libreadline.a /usr/lib/libncurses.a -lz -ldl + +vpath %.c ../Baltisot/lib:../Baltisot/src:../Baltisot/lib/zlib/src:../Baltisot/lib/lua/src:../Baltisot/lib/lua/src/LuaLib:src:../paperIdol/src:../mogltk/lib:../tinyxml:../lua-modules/src +vpath %.cc ../Baltisot/lib:../Baltisot/src:../Baltisot/lib/zlib/src:../Baltisot/lib/lua/src:../Baltisot/lib/lua/src/LuaLib:src:../paperIdol/src:../mogltk/lib:../tinyxml:../lua-modules/src +vpath %.cpp ../Baltisot/lib:../Baltisot/src:../Baltisot/lib/zlib/src:../Baltisot/lib/lua/src:../Baltisot/lib/lua/src/LuaLib:src:../paperIdol/src:../mogltk/lib:../tinyxml:../lua-modules/src +vpath %.lua ../Baltisot/lib:../Baltisot/src + +LUAINTERFACE_SOURCES = \ +lua-interface.cc \ +lua-plugin.cc \ + +BALTISOT_SOURCES = \ +Main.cc \ +\ +Exceptions.cc \ +String.cc \ +Regex.cc \ +\ +Base64.cc \ +\ +Handle.cc \ +Input.cc \ +InPipe.cc \ +Output.cc \ +Buffer.cc \ +\ +ConfigFile.cc \ +\ +Socket.cc \ +\ +Task.cc \ +TaskMan.cc \ +ChainTasks.cc \ +CopyJob.cc \ +ReadJob.cc \ +HttpServ.cc \ +Action.cc \ +Domain.cc \ +HtmlSkinner.cc \ +Variables.cc \ +Message.cc \ +Form.cc \ +SocketClient.cc \ +HttpClient.cc \ +MailClient.cc \ +HashFunction.cc \ +\ +BLua.cc \ +LuaTask.cc \ +LuaHandle.cc \ +LuaCommandLine.cc \ +\ +fileutils.cc \ +generic.cc \ +checkargs.c \ +datecalc.c \ +\ +hashtab.c \ +recycle.c \ +lookupa.c \ +\ +md5.c \ +sha1.c \ +sha256.c \ + +LUA_SOURCES = \ +lapi.c \ +lcode.c \ +ldebug.c \ +ldo.c \ +ldump.c \ +lfunc.c \ +lgc.c \ +llex.c \ +lmem.c \ +lobject.c \ +lopcodes.c \ +lparser.c \ +lstate.c \ +lstring.c \ +ltable.c \ +ltests.c \ +ltm.c \ +luacomp.c \ +lundump.c \ +lvm.c \ +lzio.c \ +lprint.c \ +\ +linit.c \ +lauxlib.c \ +loadlib.c \ +lbaselib.c \ +ldblib.c \ +ldirlib.c \ +liolib.c \ +loslib.c \ +lmathlib.c \ +lstrlib.c \ +ltablib.c \ + +LUAC_SOURCES = \ +luac.cc \ +\ +Main.cc \ +Exceptions.cc \ +String.cc \ +\ +Handle.cc \ +Input.cc \ +Output.cc \ +Buffer.cc \ +\ +BLua.cc \ +\ +fileutils.cc \ +generic.cc \ +checkargs.c \ +datecalc.c \ + + +WHOLE_SOURCES = $(BALTISOT_SOURCES) $(LUA_SOURCES) $(LUAINTERFACE_SOURCES) + +LUAINTERFACE_OBJECTS = $(addsuffix .o, $(notdir $(basename $(LUAINTERFACE_SOURCES)))) +LUAC_OBJECTS = $(addsuffix .o, $(notdir $(basename $(LUAC_SOURCES) $(LUA_SOURCES)))) + +ALL_OBJECTS = $(addsuffix .o, $(notdir $(basename $(WHOLE_SOURCES)))) +ALL_DEPS = $(addsuffix .dep, $(notdir $(basename $(WHOLE_SOURCES)))) + +all: dep luac lua-interface + +dep: $(ALL_DEPS) + +luac: $(LUAC_OBJECTS) + $(LD) -o luac $(LUAC_OBJECTS) $(LDFLAGS) + +lua-interface: $(ALL_OBJECTS) + $(LD) -o lua-interface $(ALL_OBJECTS) $(LDFLAGS) + +clean: + rm -f lua-interface luac *.o *.dep + +%.dep : %.c + $(CC) $(CPPFLAGS) -M -MF $@ $< + +%.dep : %.cpp + $(CXX) $(CPPFLAGS) -M -MF $@ $< + +%.dep : %.cc + $(CXX) $(CPPFLAGS) -M -MF $@ $< + +%.c : %.clua + bin2c $< $@ $(basename $@) + +%.clua : %.lua + ./luac -o $@ $< + +-include $(ALL_DEPS) diff --git a/Makefile.mingw32 b/Makefile.mingw32 new file mode 100644 index 0000000..522947c --- /dev/null +++ b/Makefile.mingw32 @@ -0,0 +1,188 @@ +CC = i586-mingw32msvc-gcc +CXX = i586-mingw32msvc-g++ +LD = i586-mingw32msvc-g++ +STRIP = i586-mingw32msvc-strip + +INCLUDES = \ +-I../mogltk/include \ +-I../Baltisot/include \ +-I../Baltisot/lib/zlib/include \ +-I../Baltisot/lib/lua/include -I../Baltisot/lib/lua/includes \ +-I../lua-modules/src \ +-I../Baltisot/MSVC/iconv -I../Baltisot/MSVC/regex -I../Baltisot/MSVC \ + +HAVES = -DHAVE_VSSCANF -DHAVE_LIBJPEG -DHAVE_MALLOC_H -DHAVE_BYTESWAP_H + +CPPFLAGS += $(INCLUDES) -g -fexceptions -DLUATASK_OMIT_COMMAND -DSTDC_HEADERS -DLIBICONV_PLUG -DREADLINE_STATIC -fexceptions -DWORDS_LITTLEENDIAN -march=i686 $(HAVES) -DUSE_MPQLIB + +LDFLAGS += -g -fexceptions -Wl,--enable-auto-image-base -Wl,--export-dynamic --export-all-symbols -Wl,--enable-auto-import -fexceptions ../libreadline-static.a ../libz.a -lwsock32 -lws2_32 + +vpath %.c ../Baltisot/lib:../Baltisot/src:../Baltisot/lib/zlib/src:../Baltisot/lib/lua/src:../Baltisot/lib/lua/src/LuaLib:src:../paperIdol/src:../mogltk/lib:../tinyxml:../lua-modules/src:../Baltisot/MSVC/iconv:../Baltisot/MSVC/regex +vpath %.cc ../Baltisot/lib:../Baltisot/src:../Baltisot/lib/zlib/src:../Baltisot/lib/lua/src:../Baltisot/lib/lua/src/LuaLib:src:../paperIdol/src:../mogltk/lib:../tinyxml:../lua-modules/src:../Baltisot/MSVC/iconv:../Baltisot/MSVC/regex +vpath %.cpp ../Baltisot/lib:../Baltisot/src:../Baltisot/lib/zlib/src:../Baltisot/lib/lua/src:../Baltisot/lib/lua/src/LuaLib:src:../paperIdol/src:../mogltk/lib:../tinyxml:../lua-modules/src:../Baltisot/MSVC/iconv:../Baltisot/MSVC/regex +vpath %.lua ../Baltisot/lib:../Baltisot/src + +LUAINTERFACE_SOURCES = \ +lua-interface.cc \ +lua-plugin.cc \ + +BALTISOT_SOURCES = \ +Main.cc \ +\ +Exceptions.cc \ +String.cc \ +Regex.cc \ +\ +Base64.cc \ +\ +Handle.cc \ +Input.cc \ +Output.cc \ +Buffer.cc \ +\ +ConfigFile.cc \ +\ +Socket.cc \ +\ +Task.cc \ +TaskMan.cc \ +ChainTasks.cc \ +CopyJob.cc \ +ReadJob.cc \ +HttpServ.cc \ +Action.cc \ +Domain.cc \ +HtmlSkinner.cc \ +Variables.cc \ +Message.cc \ +Form.cc \ +SocketClient.cc \ +HttpClient.cc \ +MailClient.cc \ +HashFunction.cc \ +\ +BLua.cc \ +LuaTask.cc \ +LuaHandle.cc \ +LuaCommandLine.cc \ +\ +fileutils.cc \ +generic.cc \ +checkargs.c \ +datecalc.c \ +\ +hashtab.c \ +recycle.c \ +lookupa.c \ +\ +iconv.c \ +localcharset.c \ +relocatable.c \ +\ +msvc-regex.c \ +\ +md5.c \ +sha1.c \ +sha256.c \ + +LUA_SOURCES = \ +lapi.c \ +lcode.c \ +ldebug.c \ +ldo.c \ +ldump.c \ +lfunc.c \ +lgc.c \ +llex.c \ +lmem.c \ +lobject.c \ +lopcodes.c \ +lparser.c \ +lstate.c \ +lstring.c \ +ltable.c \ +ltests.c \ +ltm.c \ +luacomp.c \ +lundump.c \ +lvm.c \ +lzio.c \ +lprint.c \ +\ +linit.c \ +lauxlib.c \ +loadlib.c \ +lbaselib.c \ +ldblib.c \ +ldirlib.c \ +liolib.c \ +loslib.c \ +lmathlib.c \ +lstrlib.c \ +ltablib.c \ + +LUAC_SOURCES = \ +luac.cc \ +\ +Main.cc \ +Exceptions.cc \ +String.cc \ +\ +Handle.cc \ +Input.cc \ +Output.cc \ +Buffer.cc \ +\ +BLua.cc \ +\ +iconv.c \ +localcharset.c \ +relocatable.c \ +\ +fileutils.cc \ +generic.cc \ +checkargs.c \ +datecalc.c \ + + +WHOLE_SOURCES = $(BALTISOT_SOURCES) $(LUA_SOURCES) $(LUAINTERFACE_SOURCES) + +LUAINTERFACE_OBJECTS = $(addsuffix .o, $(notdir $(basename $(LUAINTERFACE_SOURCES)))) +LUAINTERFACE_DLL_OBJECTS = $(addsuffix .o, $(notdir $(basename $(BALTISOT_SOURCES) $(LUA_SOURCES)))) +LUAC_OBJECTS = $(addsuffix .o, $(notdir $(basename $(LUAC_SOURCES) $(LUA_SOURCES)))) + +ALL_OBJECTS = $(addsuffix .o, $(notdir $(basename $(WHOLE_SOURCES)))) +ALL_DEPS = $(addsuffix .dep, $(notdir $(basename $(WHOLE_SOURCES)))) + +all: dep luac.exe lua-interface.dll lua-interface.exe + +dep: $(ALL_DEPS) + +luac.exe: $(LUAC_OBJECTS) + $(LD) -o luac.exe $(LUAC_OBJECTS) $(LDFLAGS) + +lua-interface.dll: $(LUAINTERFACE_DLL_OBJECTS) + $(LD) -shared -Wl,--output-def=lua-interface.def -Wl,--out-implib=lua-interface.a -o lua-interface.dll $(LUAINTERFACE_DLL_OBJECTS) $(LDFLAGS) + +lua-interface.exe: $(LUAINTERFACE_OBJECTS) + $(LD) -o lua-interface.exe $(LUAINTERFACE_OBJECTS) ./lua-interface.a $(LDFLAGS) + +clean: + rm -f lua-interface.dll lua-interface.exe luac.exe *.o *.dep *.a *.def + +%.dep : %.c + $(CC) $(CPPFLAGS) -M -MF $@ $< + +%.dep : %.cpp + $(CXX) $(CPPFLAGS) -M -MF $@ $< + +%.dep : %.cc + $(CXX) $(CPPFLAGS) -M -MF $@ $< + +%.c : %.clua + bin2c $< $@ $(basename $@) + +%.clua : %.lua + ./luac -o $@ $< + +-include $(ALL_DEPS) diff --git a/allmodules.lua b/allmodules.lua new file mode 100644 index 0000000..6b1be8d --- /dev/null +++ b/allmodules.lua @@ -0,0 +1,13 @@ +loadmodule "lualibs" +loadmodule "luaconfigfiles" +loadmodule "luagl" +loadmodule "luaftgl" +loadmodule "luahandle" +loadmodule "luampqhandle" +loadmodule "luatask" +loadmodule "luahttp" +loadmodule "luaocci" +loadmodule "luapaperidol" +loadmodule "luaregex" +loadmodule "luasql" +loadmodule "luaxml" diff --git a/lua-interface.lua b/lua-interface.lua new file mode 100644 index 0000000..d3e592e --- /dev/null +++ b/lua-interface.lua @@ -0,0 +1,407 @@ + ------------------ +-- misc functions -- + ------------------ + +function extract_file(source, dest, mode) + if (mode == nil) then + source = cdfile(source) + else + source = cdfile(source, mode) + end + dest = Output(dest) + source:copyto(dest) +end + +function insert_file(source, dest, mode) + if (type(source) == "string") then + source = Input(source) + end + if (type(dest) == "string") then + dest = findpath(dest) + end + if (mode == nil) then + writefile(source, -1, dest.Sector) + else + writefile(source, -1, dest.Sector, mode) + end +end + +function display(inp, n) + local i + if (type(inp) == "string") then + inp = Input(inp) + elseif (type(inp) ~= "table") then + error("Display needs a string or an Input object") + end + + i = 0 + + while(not inp:isclosed()) do + i = i + 1 + print(inp:read()) + if ((n ~= nil) and (i >= n)) then + return + end + end +end + +function pchar(n) + if (not ((n >= 32) and (n <= 127))) then + n = 46 -- aka '.' or 0x2e + end + return hex(n, "%c") +end + +function hexdump(inp, from, to, width) + local size, nlines, remaining, data_array, line, byte, outstring + + if (type(inp) == "string") then + inp = Input(inp) + elseif (type(inp) ~= "table") then + error("Hexdump needs a string or an Input object") + end + + size = inp:getsize() + + if (from == nil) then + from = 0 + end + + if (to == nil) then + to = size + end + + if (to > size) then + to = size + end + + size = to - from + + if (width == nil) then + width = 16 + end + + nlines = math.floor(size / width) + remaining = math.mod(size, width) + inp:seek(from) + data_array = inp:read(size) + + for line = 0, nlines - 1, 1 do + outstring = hex(line * width + from, "%08x ") + for byte = 0, width - 1, 1 do + outstring = outstring .. hex(data_array[line * 16 + byte]) .. " " + end + outstring = outstring .. " " + for byte = 0, width - 1, 1 do + outstring = outstring .. pchar(data_array[line * 16 + byte]) + end + print(outstring) + end + + if (remaining == 0) then + return + end + + outstring = hex(nlines * width + from, "%08x "); + for byte = 0, remaining - 1, 1 do + outstring = outstring .. hex(data_array[nlines * 16 + byte]) .. " " + end + for byte = remaining + 1, width - 1, 1 do + outstring = outstring .. " " + end + outstring = outstring .. " " + for byte = 0, remaining - 1, 1 do + outstring = outstring .. pchar(data_array[nlines * 16 + byte]) + end + + print(outstring) +end + + + -------------------------- +-- cdutil object wrappers -- + -------------------------- + +function check_cdutil() + if (cdutil == nil) then error "cdutil object non existant" end +end + +function cdfile(arg1, arg2, arg3, arg4) + local cdutil_implied = false + + if ((type(arg1) ~= "table") or (arg1.cdfile == nil)) then + check_cdutil() + cdutil_implied = true + if (type(arg1) == "string") then + arg1 = findpath(arg1) + end + else + if (type(arg2) == "string") then + arg2 = findpath(arg2) + end + end + + if ((arg2 == nil) and (arg3 == nil) and (arg4 == nil)) then + return cdutil:cdfile(arg1) + elseif ((arg3 == nil) and (arg4 == nil)) then + if (cdutil_implied) then + return cdutil:cdfile(arg1, arg2) + else + return arg1:cdfile(arg2) + end + elseif (arg4 == nil) then + if (cdutil_implied) then + return cdutil:cdfile(arg1, arg2, arg3) + else + return arg1:cdfile(arg2, arg3) + end + else + return arg1:cdfile(arg2, arg3, arg4) + end +end + +function setisow(iso_w) + check_cdutil() + return cdutil:setisow(iso_w) +end + +function guessmode(sect) + check_cdutil() + if (sect == nil) then + return cdutil:guessmode() + else + return cdutil:guessmode(sect) + end +end + +function sectorseek(sect) + check_cdutil() + return cdutil:sectorseek(sect) +end + +function readsector(sect, mode) + check_cdutil() + if (sect == nil) then + return cdutil:readsector() + elseif (mode == nil) then + return cdutil:readsector(sect) + else + return cdutil:readsector(sect, mode) + end +end + +function readdatas(size, sector, mode) + check_cdutil() + if (sect == nil) then + return cdutil:readdatas(size) + elseif (mode == nil) then + return cdutil:readdatas(size, sect) + else + return cdutil:readdatas(size, sect, mode) + end +end + +function readfile(handle, size, sector, mode) + check_cdutil() + if (sect == nil) then + return cdutil:readfile(handle, size) + elseif (mode == nil) then + return cdutil:readfile(handle, size, sect) + else + return cdutil:readfile(handle, size, sect, mode) + end +end + +function writesector(array, sector, mode) + check_cdutil() + if (sector == nil) then + return cdutil:writesector(array, sector) + elseif (mode == nil) then + return cdutil:writesector(array, sector, mode) + end +end + +function writedatas(array, size, sector, mode) + check_cdutil() + if (sector == nil) then + return cdutil:writedatas(array, size) + elseif (mode == nil) then + return cdutil:writedatas(array, size, sector) + else + return cdutil:writedatas(array, size, sector, mode) + end +end + +function writefile(handle, size, sector, mode) + check_cdutil() + if (size == nil) then + return cdutil:writefile(handle) + elseif (sector == nil) then + return cdutil:writefile(handle, size) + elseif (mode == nil) then + return cdutil:writefile(handle, size, sector) + else + return cdutil:writefile(handle, size, sector, mode) + end +end + +function findpath(path) + check_cdutil() + if (findpath == nil) then + return cdutil:findpath "/" + else + return cdutil:findpath(path) + end +end + +function findparent(path) + check_cdutil() + return cdutil:findparent(path) +end + +function finddirectory(dir, path) + check_cdutil() + return cdutil:finddirectory(dir, path) +end + + + ----------------------- +-- iso object wrappers -- + ----------------------- + +function check_iso() + if (iso == nil) then error "iso object non existant" end +end + +function foreword(lcdutil) + check_iso() + if ((lcdutil == nil) and (cdutil == nil)) then error "cdutil object non existant" end + if (lcdutil == nil) then + return iso:foreword(cdutil) + else + return iso:foreword(lcdutil) + end +end + +function foreword_handle(handle, mode) + check_iso() + if (mode == nil) then + return iso:foreword_handle(handle) + else + return iso:foreword_handle(handle, mode) + end +end + +function foreword_array(array, mode) + check_iso() + if (mode == nil) then + return iso:foreword_array(array) + else + return iso:foreword_array(array, mode) + end +end + +function getdispsect() + check_iso() + return iso:getdispsect() +end + +function putfile(handle, mode, sector) + check_iso() + if (mode == nil) then + iso:putfile(handle) + elseif (sector == nil) then + iso:putfile(handle, mode) + else + iso:putfile(handle, mode, sector) + end +end + +function putdatas(array, size, mode, sector) + check_iso() + if (mode == nil) then + iso:putdatas(array, size) + elseif (sector == nil) then + iso:putdatas(array, size, mode) + else + iso:putdatas(array, size, mode, sector) + end +end + +function createsector(array, mode, sector) + check_iso() + if (mode == nil) then + iso:createsector(array) + elseif (sector == nil) then + iso:createsector(array, mode) + else + iso:createsector(array, mode, sector) + end +end + +function setEOF() + check_iso() + iso:setEOF() +end + +function clearEOF() + check_iso() + iso:clearEOF() +end + +function setbasics(pvd, rootsize, ptsize, nvd, rootsect) + check_iso() + if (rootsize == nil) then + iso:setbasics(pvd) + elseif (ptsize == nil) then + iso:setbasics(pvd, rootsize) + elseif (nvd == nil) then + iso:setbasics(pvd, rootsize, ptsize) + elseif (rootsect) then + iso:setbasics(pvd, rootsize, ptsize, nvd) + else + iso:setbasics(pvd, rootsize, ptsize, nvd, rootsect) + end +end + +function createdir(dirtree, name, size, direntry, mode) + check_iso() + if (size == nil) then + iso:createdir(dirtree, name) + elseif (mode == nil) then + iso:createdir(dirtree, name, size, direntry) + else + iso:createdir(dirtree, name, size, direntry, mode) + end +end + +function createfile(dirtree, name, size, direntry, mode) + check_iso() + if (mode == nil) then + iso:createfile(dirtree, name, size, direntry) + else + iso:createfile(dirtree, name, size, direntry, mode) + end +end + +function copydir(dirtree, cdutils, direntry, mode) + check_iso() + if (mode == nil) then + iso:copydir(dirtree, cdutils, direntry) + else + iso:copydir(dirtree, cdutils, direntry, mode) + end +end + +function close(cuefile, mode, nsectors) + check_iso() + if (cuefile == nil) then + iso:close() + elseif (mode == nil) then + iso:close(cuefile) + elseif (nsectors == nil) then + iso:close(cuefile, mode) + else + iso:close(cuefile, mode, nsectors) + end +end diff --git a/src/lua-interface-hc.h b/src/lua-interface-hc.h new file mode 100644 index 0000000..dc399dd --- /dev/null +++ b/src/lua-interface-hc.h @@ -0,0 +1,483 @@ +unsigned int lua_interface_lua_size = 7678; +unsigned char lua_interface_lua[] = { + 0x1b, 0x4c, 0x75, 0x61, 0x51, 0x00, 0x01, 0x04, 0x04, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x45, 0x00, 0x00, 0x00, + 0x24, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x24, 0x40, 0x00, 0x00, 0x07, 0x40, 0x00, 0x00, + 0x24, 0x80, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x24, 0xc0, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00, + 0x24, 0x00, 0x01, 0x00, 0x07, 0x00, 0x01, 0x00, 0x24, 0x40, 0x01, 0x00, 0x07, 0x40, 0x01, 0x00, + 0x24, 0x80, 0x01, 0x00, 0x07, 0x80, 0x01, 0x00, 0x24, 0xc0, 0x01, 0x00, 0x07, 0xc0, 0x01, 0x00, + 0x24, 0x00, 0x02, 0x00, 0x07, 0x00, 0x02, 0x00, 0x24, 0x40, 0x02, 0x00, 0x07, 0x40, 0x02, 0x00, + 0x24, 0x80, 0x02, 0x00, 0x07, 0x80, 0x02, 0x00, 0x24, 0xc0, 0x02, 0x00, 0x07, 0xc0, 0x02, 0x00, + 0x24, 0x00, 0x03, 0x00, 0x07, 0x00, 0x03, 0x00, 0x24, 0x40, 0x03, 0x00, 0x07, 0x40, 0x03, 0x00, + 0x24, 0x80, 0x03, 0x00, 0x07, 0x80, 0x03, 0x00, 0x24, 0xc0, 0x03, 0x00, 0x07, 0xc0, 0x03, 0x00, + 0x24, 0x00, 0x04, 0x00, 0x07, 0x00, 0x04, 0x00, 0x24, 0x40, 0x04, 0x00, 0x07, 0x40, 0x04, 0x00, + 0x24, 0x80, 0x04, 0x00, 0x07, 0x80, 0x04, 0x00, 0x24, 0xc0, 0x04, 0x00, 0x07, 0xc0, 0x04, 0x00, + 0x24, 0x00, 0x05, 0x00, 0x07, 0x00, 0x05, 0x00, 0x24, 0x40, 0x05, 0x00, 0x07, 0x40, 0x05, 0x00, + 0x24, 0x80, 0x05, 0x00, 0x07, 0x80, 0x05, 0x00, 0x24, 0xc0, 0x05, 0x00, 0x07, 0xc0, 0x05, 0x00, + 0x24, 0x00, 0x06, 0x00, 0x07, 0x00, 0x06, 0x00, 0x24, 0x40, 0x06, 0x00, 0x07, 0x40, 0x06, 0x00, + 0x24, 0x80, 0x06, 0x00, 0x07, 0x80, 0x06, 0x00, 0x24, 0xc0, 0x06, 0x00, 0x07, 0xc0, 0x06, 0x00, + 0x24, 0x00, 0x07, 0x00, 0x07, 0x00, 0x07, 0x00, 0x24, 0x40, 0x07, 0x00, 0x07, 0x40, 0x07, 0x00, + 0x24, 0x80, 0x07, 0x00, 0x07, 0x80, 0x07, 0x00, 0x24, 0xc0, 0x07, 0x00, 0x07, 0xc0, 0x07, 0x00, + 0x24, 0x00, 0x08, 0x00, 0x07, 0x00, 0x08, 0x00, 0x24, 0x40, 0x08, 0x00, 0x07, 0x40, 0x08, 0x00, + 0x1e, 0x00, 0x80, 0x00, 0x22, 0x00, 0x00, 0x00, 0x04, 0x0d, 0x00, 0x00, 0x00, 0x65, 0x78, 0x74, + 0x72, 0x61, 0x63, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x04, 0x0c, 0x00, 0x00, 0x00, 0x69, + 0x6e, 0x73, 0x65, 0x72, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x04, 0x08, 0x00, 0x00, 0x00, + 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x00, 0x04, 0x06, 0x00, 0x00, 0x00, 0x70, 0x63, 0x68, + 0x61, 0x72, 0x00, 0x04, 0x08, 0x00, 0x00, 0x00, 0x68, 0x65, 0x78, 0x64, 0x75, 0x6d, 0x70, 0x00, + 0x04, 0x0d, 0x00, 0x00, 0x00, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x63, 0x64, 0x75, 0x74, 0x69, + 0x6c, 0x00, 0x04, 0x07, 0x00, 0x00, 0x00, 0x63, 0x64, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x04, 0x08, + 0x00, 0x00, 0x00, 0x73, 0x65, 0x74, 0x69, 0x73, 0x6f, 0x77, 0x00, 0x04, 0x0a, 0x00, 0x00, 0x00, + 0x67, 0x75, 0x65, 0x73, 0x73, 0x6d, 0x6f, 0x64, 0x65, 0x00, 0x04, 0x0b, 0x00, 0x00, 0x00, 0x73, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x65, 0x65, 0x6b, 0x00, 0x04, 0x0b, 0x00, 0x00, 0x00, 0x72, + 0x65, 0x61, 0x64, 0x73, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x00, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x72, + 0x65, 0x61, 0x64, 0x64, 0x61, 0x74, 0x61, 0x73, 0x00, 0x04, 0x09, 0x00, 0x00, 0x00, 0x72, 0x65, + 0x61, 0x64, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x04, 0x0c, 0x00, 0x00, 0x00, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x73, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x00, 0x04, 0x0b, 0x00, 0x00, 0x00, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x64, 0x61, 0x74, 0x61, 0x73, 0x00, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x04, 0x09, 0x00, 0x00, 0x00, 0x66, 0x69, 0x6e, 0x64, + 0x70, 0x61, 0x74, 0x68, 0x00, 0x04, 0x0b, 0x00, 0x00, 0x00, 0x66, 0x69, 0x6e, 0x64, 0x70, 0x61, + 0x72, 0x65, 0x6e, 0x74, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0x66, 0x69, 0x6e, 0x64, 0x64, 0x69, + 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x00, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x63, 0x68, 0x65, + 0x63, 0x6b, 0x5f, 0x69, 0x73, 0x6f, 0x00, 0x04, 0x09, 0x00, 0x00, 0x00, 0x66, 0x6f, 0x72, 0x65, + 0x77, 0x6f, 0x72, 0x64, 0x00, 0x04, 0x10, 0x00, 0x00, 0x00, 0x66, 0x6f, 0x72, 0x65, 0x77, 0x6f, + 0x72, 0x64, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x00, 0x04, 0x0f, 0x00, 0x00, 0x00, 0x66, + 0x6f, 0x72, 0x65, 0x77, 0x6f, 0x72, 0x64, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x00, 0x04, 0x0c, + 0x00, 0x00, 0x00, 0x67, 0x65, 0x74, 0x64, 0x69, 0x73, 0x70, 0x73, 0x65, 0x63, 0x74, 0x00, 0x04, + 0x08, 0x00, 0x00, 0x00, 0x70, 0x75, 0x74, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x04, 0x09, 0x00, 0x00, + 0x00, 0x70, 0x75, 0x74, 0x64, 0x61, 0x74, 0x61, 0x73, 0x00, 0x04, 0x0d, 0x00, 0x00, 0x00, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x73, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x00, 0x04, 0x07, 0x00, 0x00, + 0x00, 0x73, 0x65, 0x74, 0x45, 0x4f, 0x46, 0x00, 0x04, 0x09, 0x00, 0x00, 0x00, 0x63, 0x6c, 0x65, + 0x61, 0x72, 0x45, 0x4f, 0x46, 0x00, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x73, 0x65, 0x74, 0x62, 0x61, + 0x73, 0x69, 0x63, 0x73, 0x00, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x69, 0x72, 0x00, 0x04, 0x0b, 0x00, 0x00, 0x00, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x66, + 0x69, 0x6c, 0x65, 0x00, 0x04, 0x08, 0x00, 0x00, 0x00, 0x63, 0x6f, 0x70, 0x79, 0x64, 0x69, 0x72, + 0x00, 0x04, 0x06, 0x00, 0x00, 0x00, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x00, 0x22, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x06, + 0x14, 0x00, 0x00, 0x00, 0x17, 0x00, 0x40, 0x01, 0x16, 0x00, 0x01, 0x80, 0xc5, 0x40, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0xdc, 0x80, 0x00, 0x01, 0x00, 0x00, 0x80, 0x01, 0x16, 0x00, 0x01, 0x80, + 0xc5, 0x40, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x40, 0x01, 0x00, 0x01, 0xdc, 0x80, 0x80, 0x01, + 0x00, 0x00, 0x80, 0x01, 0xc5, 0x80, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0xdc, 0x80, 0x00, 0x01, + 0x40, 0x00, 0x80, 0x01, 0xcb, 0xc0, 0x40, 0x00, 0x40, 0x01, 0x80, 0x00, 0xdc, 0x40, 0x80, 0x01, + 0x1e, 0x00, 0x80, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0x07, 0x00, 0x00, 0x00, 0x63, 0x64, + 0x66, 0x69, 0x6c, 0x65, 0x00, 0x04, 0x07, 0x00, 0x00, 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, + 0x00, 0x04, 0x07, 0x00, 0x00, 0x00, 0x63, 0x6f, 0x70, 0x79, 0x74, 0x6f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0f, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x08, 0x21, 0x00, 0x00, + 0x00, 0xc5, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xdc, 0x80, 0x00, 0x01, 0x17, 0x40, 0xc0, + 0x01, 0x16, 0xc0, 0x00, 0x80, 0xc5, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xdc, 0x80, 0x00, + 0x01, 0x00, 0x00, 0x80, 0x01, 0xc5, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0xdc, 0x80, 0x00, + 0x01, 0x17, 0x40, 0xc0, 0x01, 0x16, 0xc0, 0x00, 0x80, 0xc5, 0xc0, 0x00, 0x00, 0x00, 0x01, 0x80, + 0x00, 0xdc, 0x80, 0x00, 0x01, 0x40, 0x00, 0x80, 0x01, 0x17, 0x00, 0x41, 0x01, 0x16, 0x40, 0x01, + 0x80, 0xc5, 0x40, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x41, 0x81, 0x01, 0x00, 0x86, 0xc1, 0xc1, + 0x00, 0xdc, 0x40, 0x00, 0x02, 0x16, 0x40, 0x01, 0x80, 0xc5, 0x40, 0x01, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x41, 0x81, 0x01, 0x00, 0x86, 0xc1, 0xc1, 0x00, 0xc0, 0x01, 0x00, 0x01, 0xdc, 0x40, 0x80, + 0x02, 0x1e, 0x00, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x05, 0x00, 0x00, 0x00, 0x74, 0x79, + 0x70, 0x65, 0x00, 0x04, 0x07, 0x00, 0x00, 0x00, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x00, 0x04, + 0x06, 0x00, 0x00, 0x00, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x00, 0x04, 0x09, 0x00, 0x00, 0x00, 0x66, + 0x69, 0x6e, 0x64, 0x70, 0x61, 0x74, 0x68, 0x00, 0x00, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, + 0xbf, 0x04, 0x07, 0x00, 0x00, 0x00, 0x53, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x1d, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, 0x23, 0x00, 0x00, + 0x00, 0xc5, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xdc, 0x80, 0x00, 0x01, 0x17, 0x40, 0xc0, + 0x01, 0x16, 0x00, 0x01, 0x80, 0xc5, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xdc, 0x80, 0x00, + 0x01, 0x00, 0x00, 0x80, 0x01, 0x16, 0xc0, 0x01, 0x80, 0xc5, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0xdc, 0x80, 0x00, 0x01, 0x57, 0xc0, 0xc0, 0x01, 0x16, 0x80, 0x00, 0x80, 0xc5, 0x00, 0x01, + 0x00, 0x01, 0x41, 0x01, 0x00, 0xdc, 0x40, 0x00, 0x01, 0x81, 0x80, 0x01, 0x00, 0xcb, 0xc0, 0x41, + 0x00, 0xdc, 0x80, 0x00, 0x01, 0xda, 0x40, 0x00, 0x00, 0x16, 0x80, 0x02, 0x80, 0x8c, 0x00, 0x42, + 0x01, 0xc5, 0x40, 0x02, 0x00, 0x0b, 0x81, 0x42, 0x00, 0x1c, 0x01, 0x00, 0x01, 0xdc, 0x40, 0x00, + 0x00, 0x57, 0xc0, 0xc2, 0x00, 0x16, 0x00, 0xfd, 0x7f, 0x19, 0x80, 0x80, 0x00, 0x16, 0x80, 0xfc, + 0x7f, 0x1e, 0x00, 0x80, 0x00, 0x16, 0x00, 0xfc, 0x7f, 0x1e, 0x00, 0x80, 0x00, 0x0c, 0x00, 0x00, + 0x00, 0x04, 0x05, 0x00, 0x00, 0x00, 0x74, 0x79, 0x70, 0x65, 0x00, 0x04, 0x07, 0x00, 0x00, 0x00, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x00, 0x04, 0x06, 0x00, 0x00, 0x00, 0x49, 0x6e, 0x70, 0x75, + 0x74, 0x00, 0x04, 0x06, 0x00, 0x00, 0x00, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x00, 0x04, 0x06, 0x00, + 0x00, 0x00, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x00, 0x04, 0x2a, 0x00, 0x00, 0x00, 0x44, 0x69, 0x73, + 0x70, 0x6c, 0x61, 0x79, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x20, 0x61, 0x20, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x20, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, + 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x04, 0x09, 0x00, 0x00, 0x00, 0x69, 0x73, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x3f, 0x04, 0x06, 0x00, 0x00, 0x00, 0x70, 0x72, 0x69, 0x6e, + 0x74, 0x00, 0x04, 0x05, 0x00, 0x00, 0x00, 0x72, 0x65, 0x61, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x30, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0x0b, 0x00, 0x00, + 0x00, 0x19, 0x00, 0x00, 0x80, 0x16, 0x40, 0x00, 0x80, 0x59, 0x40, 0x40, 0x00, 0x16, 0x00, 0x00, + 0x80, 0x01, 0x80, 0x00, 0x00, 0x45, 0xc0, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xc1, 0x00, 0x01, + 0x00, 0x5d, 0x00, 0x80, 0x01, 0x5e, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x80, 0x00, 0x05, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc0, 0x5f, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x40, 0x04, 0x04, 0x00, 0x00, + 0x00, 0x68, 0x65, 0x78, 0x00, 0x04, 0x03, 0x00, 0x00, 0x00, 0x25, 0x63, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x37, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x16, 0x8f, 0x00, 0x00, + 0x00, 0xc5, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xdc, 0x82, 0x00, 0x01, 0x17, 0x40, 0xc0, + 0x05, 0x16, 0x00, 0x01, 0x80, 0xc5, 0x82, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xdc, 0x82, 0x00, + 0x01, 0x00, 0x00, 0x80, 0x05, 0x16, 0xc0, 0x01, 0x80, 0xc5, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0xdc, 0x82, 0x00, 0x01, 0x57, 0xc0, 0xc0, 0x05, 0x16, 0x80, 0x00, 0x80, 0xc5, 0x02, 0x01, + 0x00, 0x01, 0x43, 0x01, 0x00, 0xdc, 0x42, 0x00, 0x01, 0xcb, 0x82, 0x41, 0x00, 0xdc, 0x82, 0x00, + 0x01, 0x00, 0x01, 0x80, 0x05, 0x17, 0xc0, 0xc1, 0x00, 0x16, 0x00, 0x00, 0x80, 0x41, 0x00, 0x02, + 0x00, 0x17, 0xc0, 0x41, 0x01, 0x16, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x02, 0x18, 0x80, 0x00, + 0x02, 0x16, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x02, 0x0d, 0x41, 0x00, 0x01, 0x17, 0xc0, 0xc1, + 0x01, 0x16, 0x00, 0x00, 0x80, 0xc1, 0x40, 0x02, 0x00, 0xc5, 0x82, 0x02, 0x00, 0xc6, 0xc2, 0xc2, + 0x05, 0x0f, 0xc3, 0x00, 0x02, 0xdc, 0x82, 0x00, 0x01, 0x40, 0x01, 0x80, 0x05, 0xc5, 0x82, 0x02, + 0x00, 0xc6, 0x02, 0xc3, 0x05, 0x00, 0x03, 0x00, 0x02, 0x40, 0x03, 0x80, 0x01, 0xdc, 0x82, 0x80, + 0x01, 0x80, 0x01, 0x80, 0x05, 0xcb, 0x42, 0x43, 0x00, 0x40, 0x03, 0x80, 0x00, 0xdc, 0x42, 0x80, + 0x01, 0xcb, 0x82, 0x43, 0x00, 0x40, 0x03, 0x00, 0x02, 0xdc, 0x82, 0x80, 0x01, 0xc0, 0x01, 0x80, + 0x05, 0xc1, 0x02, 0x02, 0x00, 0x0d, 0xc3, 0xc3, 0x02, 0x41, 0xc3, 0x03, 0x00, 0xe0, 0x02, 0x09, + 0x80, 0xc5, 0x03, 0x04, 0x00, 0x0e, 0xc4, 0x00, 0x07, 0x0c, 0x44, 0x00, 0x08, 0x41, 0x44, 0x04, + 0x00, 0xdc, 0x83, 0x80, 0x01, 0x80, 0x02, 0x80, 0x07, 0xc1, 0x03, 0x02, 0x00, 0x0d, 0xc4, 0xc3, + 0x01, 0x41, 0xc4, 0x03, 0x00, 0xe0, 0xc3, 0x01, 0x80, 0xc0, 0x04, 0x00, 0x05, 0x05, 0x05, 0x04, + 0x00, 0x4e, 0x45, 0x42, 0x07, 0x4c, 0x85, 0x84, 0x0a, 0x46, 0x45, 0x85, 0x03, 0x1c, 0x85, 0x00, + 0x01, 0x41, 0x85, 0x04, 0x00, 0x95, 0x42, 0x85, 0x09, 0xdf, 0x83, 0xfd, 0x7f, 0xc0, 0x03, 0x00, + 0x05, 0x01, 0xc4, 0x04, 0x00, 0x95, 0x02, 0x84, 0x07, 0xc1, 0x03, 0x02, 0x00, 0x0d, 0xc4, 0xc3, + 0x01, 0x41, 0xc4, 0x03, 0x00, 0xe0, 0x83, 0x01, 0x80, 0xc0, 0x04, 0x00, 0x05, 0x05, 0x05, 0x05, + 0x00, 0x4e, 0x45, 0x42, 0x07, 0x4c, 0x85, 0x84, 0x0a, 0x46, 0x45, 0x85, 0x03, 0x1c, 0x85, 0x00, + 0x01, 0x95, 0x02, 0x85, 0x09, 0xdf, 0xc3, 0xfd, 0x7f, 0xc5, 0x43, 0x05, 0x00, 0x00, 0x04, 0x00, + 0x05, 0xdc, 0x43, 0x00, 0x01, 0xdf, 0x42, 0xf6, 0x7f, 0x17, 0x00, 0x42, 0x03, 0x16, 0x00, 0x00, + 0x80, 0x1e, 0x00, 0x80, 0x00, 0xc5, 0x02, 0x04, 0x00, 0x0e, 0xc3, 0x80, 0x02, 0x0c, 0x43, 0x00, + 0x06, 0x41, 0x43, 0x04, 0x00, 0xdc, 0x82, 0x80, 0x01, 0x80, 0x02, 0x80, 0x05, 0xc1, 0x02, 0x02, + 0x00, 0x0d, 0xc3, 0x43, 0x03, 0x41, 0xc3, 0x03, 0x00, 0xe0, 0xc2, 0x01, 0x80, 0xc0, 0x03, 0x00, + 0x05, 0x05, 0x04, 0x04, 0x00, 0x4e, 0x44, 0xc2, 0x02, 0x4c, 0x84, 0x83, 0x08, 0x46, 0x44, 0x84, + 0x03, 0x1c, 0x84, 0x00, 0x01, 0x41, 0x84, 0x04, 0x00, 0x95, 0x42, 0x84, 0x07, 0xdf, 0x82, 0xfd, + 0x7f, 0xcc, 0xc2, 0x43, 0x03, 0x0d, 0xc3, 0xc3, 0x01, 0x41, 0xc3, 0x03, 0x00, 0xe0, 0x82, 0x00, + 0x80, 0xc0, 0x03, 0x00, 0x05, 0x01, 0x84, 0x05, 0x00, 0x95, 0x02, 0x84, 0x07, 0xdf, 0xc2, 0xfe, + 0x7f, 0xc0, 0x02, 0x00, 0x05, 0x01, 0xc3, 0x04, 0x00, 0x95, 0x02, 0x83, 0x05, 0xc1, 0x02, 0x02, + 0x00, 0x0d, 0xc3, 0x43, 0x03, 0x41, 0xc3, 0x03, 0x00, 0xe0, 0x82, 0x01, 0x80, 0xc0, 0x03, 0x00, + 0x05, 0x05, 0x04, 0x05, 0x00, 0x4e, 0x44, 0xc2, 0x02, 0x4c, 0x84, 0x83, 0x08, 0x46, 0x44, 0x84, + 0x03, 0x1c, 0x84, 0x00, 0x01, 0x95, 0x02, 0x84, 0x07, 0xdf, 0xc2, 0xfd, 0x7f, 0xc5, 0x42, 0x05, + 0x00, 0x00, 0x03, 0x00, 0x05, 0xdc, 0x42, 0x00, 0x01, 0x1e, 0x00, 0x80, 0x00, 0x17, 0x00, 0x00, + 0x00, 0x04, 0x05, 0x00, 0x00, 0x00, 0x74, 0x79, 0x70, 0x65, 0x00, 0x04, 0x07, 0x00, 0x00, 0x00, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x00, 0x04, 0x06, 0x00, 0x00, 0x00, 0x49, 0x6e, 0x70, 0x75, + 0x74, 0x00, 0x04, 0x06, 0x00, 0x00, 0x00, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x00, 0x04, 0x06, 0x00, + 0x00, 0x00, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x00, 0x04, 0x2a, 0x00, 0x00, 0x00, 0x48, 0x65, 0x78, + 0x64, 0x75, 0x6d, 0x70, 0x20, 0x6e, 0x65, 0x65, 0x64, 0x73, 0x20, 0x61, 0x20, 0x73, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x72, 0x20, 0x61, 0x6e, 0x20, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, + 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x00, 0x04, 0x08, 0x00, 0x00, 0x00, 0x67, 0x65, 0x74, 0x73, + 0x69, 0x7a, 0x65, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x40, 0x04, 0x05, 0x00, 0x00, 0x00, 0x6d, 0x61, 0x74, 0x68, + 0x00, 0x04, 0x06, 0x00, 0x00, 0x00, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x00, 0x04, 0x04, 0x00, 0x00, + 0x00, 0x6d, 0x6f, 0x64, 0x00, 0x04, 0x05, 0x00, 0x00, 0x00, 0x73, 0x65, 0x65, 0x6b, 0x00, 0x04, + 0x05, 0x00, 0x00, 0x00, 0x72, 0x65, 0x61, 0x64, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf0, 0x3f, 0x04, 0x04, 0x00, 0x00, 0x00, 0x68, 0x65, 0x78, 0x00, 0x04, 0x08, 0x00, 0x00, 0x00, + 0x25, 0x30, 0x38, 0x78, 0x20, 0x20, 0x20, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, + 0x03, 0x00, 0x00, 0x00, 0x20, 0x20, 0x00, 0x04, 0x06, 0x00, 0x00, 0x00, 0x70, 0x63, 0x68, 0x61, + 0x72, 0x00, 0x04, 0x06, 0x00, 0x00, 0x00, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x00, 0x04, 0x04, 0x00, + 0x00, 0x00, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x7f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x17, 0x40, + 0x40, 0x00, 0x16, 0x80, 0x00, 0x80, 0x05, 0x80, 0x00, 0x00, 0x41, 0xc0, 0x00, 0x00, 0x1c, 0x40, + 0x00, 0x01, 0x1e, 0x00, 0x80, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x07, 0x00, 0x00, 0x00, 0x63, + 0x64, 0x75, 0x74, 0x69, 0x6c, 0x00, 0x00, 0x04, 0x06, 0x00, 0x00, 0x00, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x00, 0x04, 0x1b, 0x00, 0x00, 0x00, 0x63, 0x64, 0x75, 0x74, 0x69, 0x6c, 0x20, 0x6f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x20, 0x6e, 0x6f, 0x6e, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x61, 0x6e, + 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x0a, 0x56, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x45, 0x01, 0x00, 0x00, 0x80, 0x01, + 0x00, 0x00, 0x5c, 0x81, 0x00, 0x01, 0x17, 0x40, 0xc0, 0x02, 0x16, 0x80, 0x00, 0x80, 0x46, 0x81, + 0x40, 0x00, 0x17, 0xc0, 0xc0, 0x02, 0x16, 0x00, 0x03, 0x80, 0x45, 0x01, 0x01, 0x00, 0x5c, 0x41, + 0x80, 0x00, 0x02, 0x01, 0x80, 0x00, 0x45, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x5c, 0x81, + 0x00, 0x01, 0x17, 0x40, 0xc1, 0x02, 0x16, 0x40, 0x03, 0x80, 0x45, 0x81, 0x01, 0x00, 0x80, 0x01, + 0x00, 0x00, 0x5c, 0x81, 0x00, 0x01, 0x00, 0x00, 0x80, 0x02, 0x16, 0x00, 0x02, 0x80, 0x45, 0x01, + 0x00, 0x00, 0x80, 0x01, 0x80, 0x00, 0x5c, 0x81, 0x00, 0x01, 0x17, 0x40, 0xc1, 0x02, 0x16, 0xc0, + 0x00, 0x80, 0x45, 0x81, 0x01, 0x00, 0x80, 0x01, 0x80, 0x00, 0x5c, 0x81, 0x00, 0x01, 0x40, 0x00, + 0x80, 0x02, 0x17, 0xc0, 0xc0, 0x00, 0x16, 0x40, 0x02, 0x80, 0x17, 0xc0, 0x40, 0x01, 0x16, 0xc0, + 0x01, 0x80, 0x17, 0xc0, 0xc0, 0x01, 0x16, 0x40, 0x01, 0x80, 0x45, 0xc1, 0x01, 0x00, 0x4b, 0x81, + 0xc0, 0x02, 0xc0, 0x01, 0x00, 0x00, 0x5d, 0x01, 0x80, 0x01, 0x5e, 0x01, 0x00, 0x00, 0x16, 0x40, + 0x0a, 0x80, 0x17, 0xc0, 0x40, 0x01, 0x16, 0xc0, 0x03, 0x80, 0x17, 0xc0, 0xc0, 0x01, 0x16, 0x40, + 0x03, 0x80, 0x1a, 0x01, 0x00, 0x00, 0x16, 0x80, 0x01, 0x80, 0x45, 0xc1, 0x01, 0x00, 0x4b, 0x81, + 0xc0, 0x02, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x02, 0x80, 0x00, 0x5d, 0x01, 0x00, 0x02, 0x5e, 0x01, + 0x00, 0x00, 0x16, 0x00, 0x07, 0x80, 0x4b, 0x81, 0x40, 0x00, 0xc0, 0x01, 0x80, 0x00, 0x5d, 0x01, + 0x80, 0x01, 0x5e, 0x01, 0x00, 0x00, 0x16, 0xc0, 0x05, 0x80, 0x17, 0xc0, 0xc0, 0x01, 0x16, 0xc0, + 0x03, 0x80, 0x1a, 0x01, 0x00, 0x00, 0x16, 0xc0, 0x01, 0x80, 0x45, 0xc1, 0x01, 0x00, 0x4b, 0x81, + 0xc0, 0x02, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x02, 0x80, 0x00, 0x40, 0x02, 0x00, 0x01, 0x5d, 0x01, + 0x80, 0x02, 0x5e, 0x01, 0x00, 0x00, 0x16, 0xc0, 0x02, 0x80, 0x4b, 0x81, 0x40, 0x00, 0xc0, 0x01, + 0x80, 0x00, 0x00, 0x02, 0x00, 0x01, 0x5d, 0x01, 0x00, 0x02, 0x5e, 0x01, 0x00, 0x00, 0x16, 0x40, + 0x01, 0x80, 0x4b, 0x81, 0x40, 0x00, 0xc0, 0x01, 0x80, 0x00, 0x00, 0x02, 0x00, 0x01, 0x40, 0x02, + 0x80, 0x01, 0x5d, 0x01, 0x80, 0x02, 0x5e, 0x01, 0x00, 0x00, 0x1e, 0x00, 0x80, 0x00, 0x08, 0x00, + 0x00, 0x00, 0x04, 0x05, 0x00, 0x00, 0x00, 0x74, 0x79, 0x70, 0x65, 0x00, 0x04, 0x06, 0x00, 0x00, + 0x00, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x00, 0x04, 0x07, 0x00, 0x00, 0x00, 0x63, 0x64, 0x66, 0x69, + 0x6c, 0x65, 0x00, 0x00, 0x04, 0x0d, 0x00, 0x00, 0x00, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x63, + 0x64, 0x75, 0x74, 0x69, 0x6c, 0x00, 0x04, 0x07, 0x00, 0x00, 0x00, 0x73, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x00, 0x04, 0x09, 0x00, 0x00, 0x00, 0x66, 0x69, 0x6e, 0x64, 0x70, 0x61, 0x74, 0x68, 0x00, + 0x04, 0x07, 0x00, 0x00, 0x00, 0x63, 0x64, 0x75, 0x74, 0x69, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xa3, 0x00, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0x08, 0x00, 0x00, 0x00, + 0x45, 0x00, 0x00, 0x00, 0x5c, 0x40, 0x80, 0x00, 0x45, 0x40, 0x00, 0x00, 0x4b, 0x80, 0xc0, 0x00, + 0xc0, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x80, 0x01, 0x5e, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x80, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x04, 0x0d, 0x00, 0x00, 0x00, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x63, + 0x64, 0x75, 0x74, 0x69, 0x6c, 0x00, 0x04, 0x07, 0x00, 0x00, 0x00, 0x63, 0x64, 0x75, 0x74, 0x69, + 0x6c, 0x00, 0x04, 0x08, 0x00, 0x00, 0x00, 0x73, 0x65, 0x74, 0x69, 0x73, 0x6f, 0x77, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x00, 0xaf, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0x0f, + 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x5c, 0x40, 0x80, 0x00, 0x17, 0x40, 0x40, 0x00, 0x16, + 0x00, 0x01, 0x80, 0x45, 0x80, 0x00, 0x00, 0x4b, 0xc0, 0xc0, 0x00, 0x5d, 0x00, 0x00, 0x01, 0x5e, + 0x00, 0x00, 0x00, 0x16, 0x00, 0x01, 0x80, 0x45, 0x80, 0x00, 0x00, 0x4b, 0xc0, 0xc0, 0x00, 0xc0, + 0x00, 0x00, 0x00, 0x5d, 0x00, 0x80, 0x01, 0x5e, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x80, 0x00, 0x04, + 0x00, 0x00, 0x00, 0x04, 0x0d, 0x00, 0x00, 0x00, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x63, 0x64, + 0x75, 0x74, 0x69, 0x6c, 0x00, 0x00, 0x04, 0x07, 0x00, 0x00, 0x00, 0x63, 0x64, 0x75, 0x74, 0x69, + 0x6c, 0x00, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x67, 0x75, 0x65, 0x73, 0x73, 0x6d, 0x6f, 0x64, 0x65, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xb1, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x04, 0x08, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x5c, 0x40, 0x80, 0x00, 0x45, 0x40, 0x00, + 0x00, 0x4b, 0x80, 0xc0, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x80, 0x01, 0x5e, 0x00, 0x00, + 0x00, 0x1e, 0x00, 0x80, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x0d, 0x00, 0x00, 0x00, 0x63, 0x68, + 0x65, 0x63, 0x6b, 0x5f, 0x63, 0x64, 0x75, 0x74, 0x69, 0x6c, 0x00, 0x04, 0x07, 0x00, 0x00, 0x00, + 0x63, 0x64, 0x75, 0x74, 0x69, 0x6c, 0x00, 0x04, 0x0b, 0x00, 0x00, 0x00, 0x73, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x73, 0x65, 0x65, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb6, 0x00, 0x00, 0x00, 0xbf, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, 0x18, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x9c, + 0x40, 0x80, 0x00, 0x17, 0x40, 0x40, 0x00, 0x16, 0x00, 0x01, 0x80, 0x85, 0x80, 0x00, 0x00, 0x8b, + 0xc0, 0x40, 0x01, 0x9d, 0x00, 0x00, 0x01, 0x9e, 0x00, 0x00, 0x00, 0x16, 0x40, 0x03, 0x80, 0x17, + 0x40, 0xc0, 0x00, 0x16, 0x40, 0x01, 0x80, 0x85, 0x80, 0x00, 0x00, 0x8b, 0xc0, 0x40, 0x01, 0x00, + 0x01, 0x00, 0x00, 0x9d, 0x00, 0x80, 0x01, 0x9e, 0x00, 0x00, 0x00, 0x16, 0x40, 0x01, 0x80, 0x85, + 0x80, 0x00, 0x00, 0x8b, 0xc0, 0x40, 0x01, 0x00, 0x01, 0x00, 0x00, 0x40, 0x01, 0x80, 0x00, 0x9d, + 0x00, 0x00, 0x02, 0x9e, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x80, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, + 0x0d, 0x00, 0x00, 0x00, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x63, 0x64, 0x75, 0x74, 0x69, 0x6c, + 0x00, 0x00, 0x04, 0x07, 0x00, 0x00, 0x00, 0x63, 0x64, 0x75, 0x74, 0x69, 0x6c, 0x00, 0x04, 0x0b, + 0x00, 0x00, 0x00, 0x72, 0x65, 0x61, 0x64, 0x73, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0xca, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x08, 0x1c, 0x00, + 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, 0xdc, 0x40, 0x80, 0x00, 0xc5, 0x40, 0x00, 0x00, 0x17, 0x80, + 0xc0, 0x01, 0x16, 0x40, 0x01, 0x80, 0xc5, 0xc0, 0x00, 0x00, 0xcb, 0x00, 0xc1, 0x01, 0x40, 0x01, + 0x00, 0x00, 0xdd, 0x00, 0x80, 0x01, 0xde, 0x00, 0x00, 0x00, 0x16, 0xc0, 0x03, 0x80, 0x17, 0x80, + 0x40, 0x01, 0x16, 0x80, 0x01, 0x80, 0xc5, 0xc0, 0x00, 0x00, 0xcb, 0x00, 0xc1, 0x01, 0x40, 0x01, + 0x00, 0x00, 0x85, 0x41, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x02, 0xde, 0x00, 0x00, 0x00, 0x16, 0x80, + 0x01, 0x80, 0xc5, 0xc0, 0x00, 0x00, 0xcb, 0x00, 0xc1, 0x01, 0x40, 0x01, 0x00, 0x00, 0x85, 0x41, + 0x00, 0x00, 0xc0, 0x01, 0x00, 0x01, 0xdd, 0x00, 0x80, 0x02, 0xde, 0x00, 0x00, 0x00, 0x1e, 0x00, + 0x80, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x0d, 0x00, 0x00, 0x00, 0x63, 0x68, 0x65, 0x63, 0x6b, + 0x5f, 0x63, 0x64, 0x75, 0x74, 0x69, 0x6c, 0x00, 0x04, 0x05, 0x00, 0x00, 0x00, 0x73, 0x65, 0x63, + 0x74, 0x00, 0x00, 0x04, 0x07, 0x00, 0x00, 0x00, 0x63, 0x64, 0x75, 0x74, 0x69, 0x6c, 0x00, 0x04, + 0x0a, 0x00, 0x00, 0x00, 0x72, 0x65, 0x61, 0x64, 0x64, 0x61, 0x74, 0x61, 0x73, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0xd5, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0a, 0x1f, 0x00, + 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x1c, 0x41, 0x80, 0x00, 0x05, 0x41, 0x00, 0x00, 0x17, 0x80, + 0x40, 0x02, 0x16, 0x80, 0x01, 0x80, 0x05, 0xc1, 0x00, 0x00, 0x0b, 0x01, 0x41, 0x02, 0x80, 0x01, + 0x00, 0x00, 0xc0, 0x01, 0x80, 0x00, 0x1d, 0x01, 0x00, 0x02, 0x1e, 0x01, 0x00, 0x00, 0x16, 0x40, + 0x04, 0x80, 0x17, 0x80, 0xc0, 0x01, 0x16, 0xc0, 0x01, 0x80, 0x05, 0xc1, 0x00, 0x00, 0x0b, 0x01, + 0x41, 0x02, 0x80, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x80, 0x00, 0x05, 0x42, 0x00, 0x00, 0x1d, 0x01, + 0x80, 0x02, 0x1e, 0x01, 0x00, 0x00, 0x16, 0xc0, 0x01, 0x80, 0x05, 0xc1, 0x00, 0x00, 0x0b, 0x01, + 0x41, 0x02, 0x80, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x80, 0x00, 0x05, 0x42, 0x00, 0x00, 0x40, 0x02, + 0x80, 0x01, 0x1d, 0x01, 0x00, 0x03, 0x1e, 0x01, 0x00, 0x00, 0x1e, 0x00, 0x80, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x04, 0x0d, 0x00, 0x00, 0x00, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x63, 0x64, 0x75, + 0x74, 0x69, 0x6c, 0x00, 0x04, 0x05, 0x00, 0x00, 0x00, 0x73, 0x65, 0x63, 0x74, 0x00, 0x00, 0x04, + 0x07, 0x00, 0x00, 0x00, 0x63, 0x64, 0x75, 0x74, 0x69, 0x6c, 0x00, 0x04, 0x09, 0x00, 0x00, 0x00, + 0x72, 0x65, 0x61, 0x64, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd7, 0x00, 0x00, + 0x00, 0xde, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x08, 0x15, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, + 0x00, 0xdc, 0x40, 0x80, 0x00, 0x17, 0x40, 0xc0, 0x00, 0x16, 0x80, 0x01, 0x80, 0xc5, 0x80, 0x00, + 0x00, 0xcb, 0xc0, 0xc0, 0x01, 0x40, 0x01, 0x00, 0x00, 0x80, 0x01, 0x80, 0x00, 0xdd, 0x00, 0x00, + 0x02, 0xde, 0x00, 0x00, 0x00, 0x16, 0x00, 0x02, 0x80, 0x17, 0x40, 0x40, 0x01, 0x16, 0x80, 0x01, + 0x80, 0xc5, 0x80, 0x00, 0x00, 0xcb, 0xc0, 0xc0, 0x01, 0x40, 0x01, 0x00, 0x00, 0x80, 0x01, 0x80, + 0x00, 0xc0, 0x01, 0x00, 0x01, 0xdd, 0x00, 0x80, 0x02, 0xde, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x80, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x0d, 0x00, 0x00, 0x00, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, + 0x63, 0x64, 0x75, 0x74, 0x69, 0x6c, 0x00, 0x00, 0x04, 0x07, 0x00, 0x00, 0x00, 0x63, 0x64, 0x75, + 0x74, 0x69, 0x6c, 0x00, 0x04, 0x0c, 0x00, 0x00, 0x00, 0x77, 0x72, 0x69, 0x74, 0x65, 0x73, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0xe9, 0x00, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x0a, 0x1e, 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x1c, 0x41, 0x80, + 0x00, 0x17, 0x40, 0x40, 0x01, 0x16, 0x80, 0x01, 0x80, 0x05, 0x81, 0x00, 0x00, 0x0b, 0xc1, 0x40, + 0x02, 0x80, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x80, 0x00, 0x1d, 0x01, 0x00, 0x02, 0x1e, 0x01, 0x00, + 0x00, 0x16, 0x40, 0x04, 0x80, 0x17, 0x40, 0xc0, 0x01, 0x16, 0xc0, 0x01, 0x80, 0x05, 0x81, 0x00, + 0x00, 0x0b, 0xc1, 0x40, 0x02, 0x80, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x80, 0x00, 0x00, 0x02, 0x00, + 0x01, 0x1d, 0x01, 0x80, 0x02, 0x1e, 0x01, 0x00, 0x00, 0x16, 0xc0, 0x01, 0x80, 0x05, 0x81, 0x00, + 0x00, 0x0b, 0xc1, 0x40, 0x02, 0x80, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x80, 0x00, 0x00, 0x02, 0x00, + 0x01, 0x40, 0x02, 0x80, 0x01, 0x1d, 0x01, 0x00, 0x03, 0x1e, 0x01, 0x00, 0x00, 0x1e, 0x00, 0x80, + 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x0d, 0x00, 0x00, 0x00, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, + 0x63, 0x64, 0x75, 0x74, 0x69, 0x6c, 0x00, 0x00, 0x04, 0x07, 0x00, 0x00, 0x00, 0x63, 0x64, 0x75, + 0x74, 0x69, 0x6c, 0x00, 0x04, 0x0b, 0x00, 0x00, 0x00, 0x77, 0x72, 0x69, 0x74, 0x65, 0x64, 0x61, + 0x74, 0x61, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xeb, 0x00, 0x00, 0x00, 0xf6, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x0a, 0x26, 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x1c, 0x41, 0x80, 0x00, + 0x17, 0x40, 0xc0, 0x00, 0x16, 0x40, 0x01, 0x80, 0x05, 0x81, 0x00, 0x00, 0x0b, 0xc1, 0x40, 0x02, + 0x80, 0x01, 0x00, 0x00, 0x1d, 0x01, 0x80, 0x01, 0x1e, 0x01, 0x00, 0x00, 0x16, 0x80, 0x06, 0x80, + 0x17, 0x40, 0x40, 0x01, 0x16, 0x80, 0x01, 0x80, 0x05, 0x81, 0x00, 0x00, 0x0b, 0xc1, 0x40, 0x02, + 0x80, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x80, 0x00, 0x1d, 0x01, 0x00, 0x02, 0x1e, 0x01, 0x00, 0x00, + 0x16, 0x40, 0x04, 0x80, 0x17, 0x40, 0xc0, 0x01, 0x16, 0xc0, 0x01, 0x80, 0x05, 0x81, 0x00, 0x00, + 0x0b, 0xc1, 0x40, 0x02, 0x80, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x80, 0x00, 0x00, 0x02, 0x00, 0x01, + 0x1d, 0x01, 0x80, 0x02, 0x1e, 0x01, 0x00, 0x00, 0x16, 0xc0, 0x01, 0x80, 0x05, 0x81, 0x00, 0x00, + 0x0b, 0xc1, 0x40, 0x02, 0x80, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x80, 0x00, 0x00, 0x02, 0x00, 0x01, + 0x40, 0x02, 0x80, 0x01, 0x1d, 0x01, 0x00, 0x03, 0x1e, 0x01, 0x00, 0x00, 0x1e, 0x00, 0x80, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x04, 0x0d, 0x00, 0x00, 0x00, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x63, + 0x64, 0x75, 0x74, 0x69, 0x6c, 0x00, 0x00, 0x04, 0x07, 0x00, 0x00, 0x00, 0x63, 0x64, 0x75, 0x74, + 0x69, 0x6c, 0x00, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x77, 0x72, 0x69, 0x74, 0x65, 0x66, 0x69, 0x6c, + 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x04, 0x11, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x5c, 0x40, 0x80, 0x00, 0x45, 0x40, + 0x00, 0x00, 0x17, 0x80, 0xc0, 0x00, 0x16, 0x40, 0x01, 0x80, 0x45, 0xc0, 0x00, 0x00, 0x4b, 0x40, + 0xc0, 0x00, 0xc1, 0x00, 0x01, 0x00, 0x5d, 0x00, 0x80, 0x01, 0x5e, 0x00, 0x00, 0x00, 0x16, 0x00, + 0x01, 0x80, 0x45, 0xc0, 0x00, 0x00, 0x4b, 0x40, 0xc0, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x5d, 0x00, + 0x80, 0x01, 0x5e, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x80, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x0d, + 0x00, 0x00, 0x00, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x63, 0x64, 0x75, 0x74, 0x69, 0x6c, 0x00, + 0x04, 0x09, 0x00, 0x00, 0x00, 0x66, 0x69, 0x6e, 0x64, 0x70, 0x61, 0x74, 0x68, 0x00, 0x00, 0x04, + 0x07, 0x00, 0x00, 0x00, 0x63, 0x64, 0x75, 0x74, 0x69, 0x6c, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, + 0x2f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x04, 0x08, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x5c, 0x40, 0x80, 0x00, 0x45, 0x40, + 0x00, 0x00, 0x4b, 0x80, 0xc0, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x80, 0x01, 0x5e, 0x00, + 0x00, 0x00, 0x1e, 0x00, 0x80, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x0d, 0x00, 0x00, 0x00, 0x63, + 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x63, 0x64, 0x75, 0x74, 0x69, 0x6c, 0x00, 0x04, 0x07, 0x00, 0x00, + 0x00, 0x63, 0x64, 0x75, 0x74, 0x69, 0x6c, 0x00, 0x04, 0x0b, 0x00, 0x00, 0x00, 0x66, 0x69, 0x6e, + 0x64, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, + 0x09, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, 0x09, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, + 0x9c, 0x40, 0x80, 0x00, 0x85, 0x40, 0x00, 0x00, 0x8b, 0x80, 0x40, 0x01, 0x00, 0x01, 0x00, 0x00, + 0x40, 0x01, 0x80, 0x00, 0x9d, 0x00, 0x00, 0x02, 0x9e, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x80, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x04, 0x0d, 0x00, 0x00, 0x00, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x63, + 0x64, 0x75, 0x74, 0x69, 0x6c, 0x00, 0x04, 0x07, 0x00, 0x00, 0x00, 0x63, 0x64, 0x75, 0x74, 0x69, + 0x6c, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x00, 0x66, 0x69, 0x6e, 0x64, 0x64, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x12, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x17, 0x40, 0x40, + 0x00, 0x16, 0x80, 0x00, 0x80, 0x05, 0x80, 0x00, 0x00, 0x41, 0xc0, 0x00, 0x00, 0x1c, 0x40, 0x00, + 0x01, 0x1e, 0x00, 0x80, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x69, 0x73, + 0x6f, 0x00, 0x00, 0x04, 0x06, 0x00, 0x00, 0x00, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x00, 0x04, 0x18, + 0x00, 0x00, 0x00, 0x69, 0x73, 0x6f, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x6e, 0x6f, + 0x6e, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, + 0x01, 0x00, 0x00, 0x1c, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0x18, 0x00, 0x00, 0x00, 0x45, + 0x00, 0x00, 0x00, 0x5c, 0x40, 0x80, 0x00, 0x17, 0x40, 0x40, 0x00, 0x16, 0x40, 0x01, 0x80, 0x45, + 0x80, 0x00, 0x00, 0x17, 0x40, 0xc0, 0x00, 0x16, 0x80, 0x00, 0x80, 0x45, 0xc0, 0x00, 0x00, 0x81, + 0x00, 0x01, 0x00, 0x5c, 0x40, 0x00, 0x01, 0x17, 0x40, 0x40, 0x00, 0x16, 0x40, 0x01, 0x80, 0x45, + 0x40, 0x01, 0x00, 0x4b, 0x80, 0xc1, 0x00, 0xc5, 0x80, 0x00, 0x00, 0x5d, 0x00, 0x80, 0x01, 0x5e, + 0x00, 0x00, 0x00, 0x16, 0x00, 0x01, 0x80, 0x45, 0x40, 0x01, 0x00, 0x4b, 0x80, 0xc1, 0x00, 0xc0, + 0x00, 0x00, 0x00, 0x5d, 0x00, 0x80, 0x01, 0x5e, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x80, 0x00, 0x07, + 0x00, 0x00, 0x00, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x69, 0x73, + 0x6f, 0x00, 0x00, 0x04, 0x07, 0x00, 0x00, 0x00, 0x63, 0x64, 0x75, 0x74, 0x69, 0x6c, 0x00, 0x04, + 0x06, 0x00, 0x00, 0x00, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x00, 0x04, 0x1b, 0x00, 0x00, 0x00, 0x63, + 0x64, 0x75, 0x74, 0x69, 0x6c, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x6e, 0x6f, 0x6e, + 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x69, + 0x73, 0x6f, 0x00, 0x04, 0x09, 0x00, 0x00, 0x00, 0x66, 0x6f, 0x72, 0x65, 0x77, 0x6f, 0x72, 0x64, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x01, 0x00, 0x00, 0x25, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x06, 0x11, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x9c, 0x40, 0x80, 0x00, 0x17, 0x40, 0xc0, + 0x00, 0x16, 0x40, 0x01, 0x80, 0x85, 0x80, 0x00, 0x00, 0x8b, 0xc0, 0x40, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x9d, 0x00, 0x80, 0x01, 0x9e, 0x00, 0x00, 0x00, 0x16, 0x40, 0x01, 0x80, 0x85, 0x80, 0x00, + 0x00, 0x8b, 0xc0, 0x40, 0x01, 0x00, 0x01, 0x00, 0x00, 0x40, 0x01, 0x80, 0x00, 0x9d, 0x00, 0x00, + 0x02, 0x9e, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x80, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x0a, 0x00, + 0x00, 0x00, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x69, 0x73, 0x6f, 0x00, 0x00, 0x04, 0x04, 0x00, + 0x00, 0x00, 0x69, 0x73, 0x6f, 0x00, 0x04, 0x10, 0x00, 0x00, 0x00, 0x66, 0x6f, 0x72, 0x65, 0x77, + 0x6f, 0x72, 0x64, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, + 0x01, 0x00, 0x00, 0x2e, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, 0x11, 0x00, 0x00, 0x00, 0x85, + 0x00, 0x00, 0x00, 0x9c, 0x40, 0x80, 0x00, 0x17, 0x40, 0xc0, 0x00, 0x16, 0x40, 0x01, 0x80, 0x85, + 0x80, 0x00, 0x00, 0x8b, 0xc0, 0x40, 0x01, 0x00, 0x01, 0x00, 0x00, 0x9d, 0x00, 0x80, 0x01, 0x9e, + 0x00, 0x00, 0x00, 0x16, 0x40, 0x01, 0x80, 0x85, 0x80, 0x00, 0x00, 0x8b, 0xc0, 0x40, 0x01, 0x00, + 0x01, 0x00, 0x00, 0x40, 0x01, 0x80, 0x00, 0x9d, 0x00, 0x00, 0x02, 0x9e, 0x00, 0x00, 0x00, 0x1e, + 0x00, 0x80, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x63, 0x68, 0x65, 0x63, + 0x6b, 0x5f, 0x69, 0x73, 0x6f, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x69, 0x73, 0x6f, 0x00, + 0x04, 0x0f, 0x00, 0x00, 0x00, 0x66, 0x6f, 0x72, 0x65, 0x77, 0x6f, 0x72, 0x64, 0x5f, 0x61, 0x72, + 0x72, 0x61, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x01, 0x00, 0x00, 0x33, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x1c, 0x40, 0x80, 0x00, + 0x05, 0x40, 0x00, 0x00, 0x0b, 0x80, 0x40, 0x00, 0x1d, 0x00, 0x00, 0x01, 0x1e, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x80, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x63, 0x68, 0x65, + 0x63, 0x6b, 0x5f, 0x69, 0x73, 0x6f, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x69, 0x73, 0x6f, 0x00, + 0x04, 0x0c, 0x00, 0x00, 0x00, 0x67, 0x65, 0x74, 0x64, 0x69, 0x73, 0x70, 0x73, 0x65, 0x63, 0x74, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x01, 0x00, 0x00, 0x3e, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x08, 0x18, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, 0xdc, 0x40, 0x80, 0x00, 0x17, 0x40, 0xc0, + 0x00, 0x16, 0x00, 0x01, 0x80, 0xc5, 0x80, 0x00, 0x00, 0xcb, 0xc0, 0xc0, 0x01, 0x40, 0x01, 0x00, + 0x00, 0xdc, 0x40, 0x80, 0x01, 0x16, 0x40, 0x03, 0x80, 0x17, 0x40, 0x40, 0x01, 0x16, 0x40, 0x01, + 0x80, 0xc5, 0x80, 0x00, 0x00, 0xcb, 0xc0, 0xc0, 0x01, 0x40, 0x01, 0x00, 0x00, 0x80, 0x01, 0x80, + 0x00, 0xdc, 0x40, 0x00, 0x02, 0x16, 0x40, 0x01, 0x80, 0xc5, 0x80, 0x00, 0x00, 0xcb, 0xc0, 0xc0, + 0x01, 0x40, 0x01, 0x00, 0x00, 0x80, 0x01, 0x80, 0x00, 0xc0, 0x01, 0x00, 0x01, 0xdc, 0x40, 0x80, + 0x02, 0x1e, 0x00, 0x80, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x63, 0x68, + 0x65, 0x63, 0x6b, 0x5f, 0x69, 0x73, 0x6f, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x69, 0x73, + 0x6f, 0x00, 0x04, 0x08, 0x00, 0x00, 0x00, 0x70, 0x75, 0x74, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x49, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0a, 0x1b, + 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x1c, 0x41, 0x80, 0x00, 0x17, 0x40, 0x40, 0x01, 0x16, + 0x40, 0x01, 0x80, 0x05, 0x81, 0x00, 0x00, 0x0b, 0xc1, 0x40, 0x02, 0x80, 0x01, 0x00, 0x00, 0xc0, + 0x01, 0x80, 0x00, 0x1c, 0x41, 0x00, 0x02, 0x16, 0xc0, 0x03, 0x80, 0x17, 0x40, 0xc0, 0x01, 0x16, + 0x80, 0x01, 0x80, 0x05, 0x81, 0x00, 0x00, 0x0b, 0xc1, 0x40, 0x02, 0x80, 0x01, 0x00, 0x00, 0xc0, + 0x01, 0x80, 0x00, 0x00, 0x02, 0x00, 0x01, 0x1c, 0x41, 0x80, 0x02, 0x16, 0x80, 0x01, 0x80, 0x05, + 0x81, 0x00, 0x00, 0x0b, 0xc1, 0x40, 0x02, 0x80, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x80, 0x00, 0x00, + 0x02, 0x00, 0x01, 0x40, 0x02, 0x80, 0x01, 0x1c, 0x41, 0x00, 0x03, 0x1e, 0x00, 0x80, 0x00, 0x04, + 0x00, 0x00, 0x00, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x69, 0x73, + 0x6f, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x69, 0x73, 0x6f, 0x00, 0x04, 0x09, 0x00, 0x00, + 0x00, 0x70, 0x75, 0x74, 0x64, 0x61, 0x74, 0x61, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4b, 0x01, + 0x00, 0x00, 0x54, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x08, 0x18, 0x00, 0x00, 0x00, 0xc5, 0x00, + 0x00, 0x00, 0xdc, 0x40, 0x80, 0x00, 0x17, 0x40, 0xc0, 0x00, 0x16, 0x00, 0x01, 0x80, 0xc5, 0x80, + 0x00, 0x00, 0xcb, 0xc0, 0xc0, 0x01, 0x40, 0x01, 0x00, 0x00, 0xdc, 0x40, 0x80, 0x01, 0x16, 0x40, + 0x03, 0x80, 0x17, 0x40, 0x40, 0x01, 0x16, 0x40, 0x01, 0x80, 0xc5, 0x80, 0x00, 0x00, 0xcb, 0xc0, + 0xc0, 0x01, 0x40, 0x01, 0x00, 0x00, 0x80, 0x01, 0x80, 0x00, 0xdc, 0x40, 0x00, 0x02, 0x16, 0x40, + 0x01, 0x80, 0xc5, 0x80, 0x00, 0x00, 0xcb, 0xc0, 0xc0, 0x01, 0x40, 0x01, 0x00, 0x00, 0x80, 0x01, + 0x80, 0x00, 0xc0, 0x01, 0x00, 0x01, 0xdc, 0x40, 0x80, 0x02, 0x1e, 0x00, 0x80, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x69, 0x73, 0x6f, + 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x69, 0x73, 0x6f, 0x00, 0x04, 0x0d, 0x00, 0x00, 0x00, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x73, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x56, 0x01, 0x00, 0x00, 0x59, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, + 0x00, 0x05, 0x00, 0x00, 0x00, 0x1c, 0x40, 0x80, 0x00, 0x05, 0x40, 0x00, 0x00, 0x0b, 0x80, 0x40, + 0x00, 0x1c, 0x40, 0x00, 0x01, 0x1e, 0x00, 0x80, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x0a, 0x00, + 0x00, 0x00, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x69, 0x73, 0x6f, 0x00, 0x04, 0x04, 0x00, 0x00, + 0x00, 0x69, 0x73, 0x6f, 0x00, 0x04, 0x07, 0x00, 0x00, 0x00, 0x73, 0x65, 0x74, 0x45, 0x4f, 0x46, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x01, 0x00, 0x00, 0x5e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x1c, 0x40, 0x80, 0x00, 0x05, 0x40, 0x00, + 0x00, 0x0b, 0x80, 0x40, 0x00, 0x1c, 0x40, 0x00, 0x01, 0x1e, 0x00, 0x80, 0x00, 0x03, 0x00, 0x00, + 0x00, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x69, 0x73, 0x6f, 0x00, + 0x04, 0x04, 0x00, 0x00, 0x00, 0x69, 0x73, 0x6f, 0x00, 0x04, 0x09, 0x00, 0x00, 0x00, 0x63, 0x6c, + 0x65, 0x61, 0x72, 0x45, 0x4f, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x01, 0x00, 0x00, 0x6d, + 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0c, 0x2d, 0x00, 0x00, 0x00, 0x45, 0x01, 0x00, 0x00, 0x5c, + 0x41, 0x80, 0x00, 0x17, 0x40, 0xc0, 0x00, 0x16, 0x00, 0x01, 0x80, 0x45, 0x81, 0x00, 0x00, 0x4b, + 0xc1, 0xc0, 0x02, 0xc0, 0x01, 0x00, 0x00, 0x5c, 0x41, 0x80, 0x01, 0x16, 0x80, 0x08, 0x80, 0x17, + 0x40, 0x40, 0x01, 0x16, 0x40, 0x01, 0x80, 0x45, 0x81, 0x00, 0x00, 0x4b, 0xc1, 0xc0, 0x02, 0xc0, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x80, 0x00, 0x5c, 0x41, 0x00, 0x02, 0x16, 0x80, 0x06, 0x80, 0x17, + 0x40, 0xc0, 0x01, 0x16, 0x80, 0x01, 0x80, 0x45, 0x81, 0x00, 0x00, 0x4b, 0xc1, 0xc0, 0x02, 0xc0, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x80, 0x00, 0x40, 0x02, 0x00, 0x01, 0x5c, 0x41, 0x80, 0x02, 0x16, + 0x40, 0x04, 0x80, 0x1a, 0x01, 0x00, 0x00, 0x16, 0xc0, 0x01, 0x80, 0x45, 0x81, 0x00, 0x00, 0x4b, + 0xc1, 0xc0, 0x02, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x02, 0x80, 0x00, 0x40, 0x02, 0x00, 0x01, 0x80, + 0x02, 0x80, 0x01, 0x5c, 0x41, 0x00, 0x03, 0x16, 0xc0, 0x01, 0x80, 0x45, 0x81, 0x00, 0x00, 0x4b, + 0xc1, 0xc0, 0x02, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x02, 0x80, 0x00, 0x40, 0x02, 0x00, 0x01, 0x80, + 0x02, 0x80, 0x01, 0xc0, 0x02, 0x00, 0x02, 0x5c, 0x41, 0x80, 0x03, 0x1e, 0x00, 0x80, 0x00, 0x04, + 0x00, 0x00, 0x00, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x69, 0x73, + 0x6f, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x69, 0x73, 0x6f, 0x00, 0x04, 0x0a, 0x00, 0x00, + 0x00, 0x73, 0x65, 0x74, 0x62, 0x61, 0x73, 0x69, 0x63, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, + 0x01, 0x00, 0x00, 0x78, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0c, 0x1d, 0x00, 0x00, 0x00, 0x45, + 0x01, 0x00, 0x00, 0x5c, 0x41, 0x80, 0x00, 0x17, 0x40, 0x40, 0x01, 0x16, 0x40, 0x01, 0x80, 0x45, + 0x81, 0x00, 0x00, 0x4b, 0xc1, 0xc0, 0x02, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x02, 0x80, 0x00, 0x5c, + 0x41, 0x00, 0x02, 0x16, 0x40, 0x04, 0x80, 0x17, 0x40, 0x40, 0x02, 0x16, 0xc0, 0x01, 0x80, 0x45, + 0x81, 0x00, 0x00, 0x4b, 0xc1, 0xc0, 0x02, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x02, 0x80, 0x00, 0x40, + 0x02, 0x00, 0x01, 0x80, 0x02, 0x80, 0x01, 0x5c, 0x41, 0x00, 0x03, 0x16, 0xc0, 0x01, 0x80, 0x45, + 0x81, 0x00, 0x00, 0x4b, 0xc1, 0xc0, 0x02, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x02, 0x80, 0x00, 0x40, + 0x02, 0x00, 0x01, 0x80, 0x02, 0x80, 0x01, 0xc0, 0x02, 0x00, 0x02, 0x5c, 0x41, 0x80, 0x03, 0x1e, + 0x00, 0x80, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x63, 0x68, 0x65, 0x63, + 0x6b, 0x5f, 0x69, 0x73, 0x6f, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x69, 0x73, 0x6f, 0x00, + 0x04, 0x0a, 0x00, 0x00, 0x00, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x69, 0x72, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x7a, 0x01, 0x00, 0x00, 0x81, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0c, 0x15, + 0x00, 0x00, 0x00, 0x45, 0x01, 0x00, 0x00, 0x5c, 0x41, 0x80, 0x00, 0x17, 0x40, 0x40, 0x02, 0x16, + 0xc0, 0x01, 0x80, 0x45, 0x81, 0x00, 0x00, 0x4b, 0xc1, 0xc0, 0x02, 0xc0, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x80, 0x00, 0x40, 0x02, 0x00, 0x01, 0x80, 0x02, 0x80, 0x01, 0x5c, 0x41, 0x00, 0x03, 0x16, + 0xc0, 0x01, 0x80, 0x45, 0x81, 0x00, 0x00, 0x4b, 0xc1, 0xc0, 0x02, 0xc0, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x80, 0x00, 0x40, 0x02, 0x00, 0x01, 0x80, 0x02, 0x80, 0x01, 0xc0, 0x02, 0x00, 0x02, 0x5c, + 0x41, 0x80, 0x03, 0x1e, 0x00, 0x80, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x0a, 0x00, 0x00, 0x00, + 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x69, 0x73, 0x6f, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, + 0x69, 0x73, 0x6f, 0x00, 0x04, 0x0b, 0x00, 0x00, 0x00, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x66, + 0x69, 0x6c, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x01, 0x00, 0x00, 0x8a, 0x01, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x0a, 0x13, 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x1c, 0x41, 0x80, 0x00, + 0x17, 0x40, 0xc0, 0x01, 0x16, 0x80, 0x01, 0x80, 0x05, 0x81, 0x00, 0x00, 0x0b, 0xc1, 0x40, 0x02, + 0x80, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x80, 0x00, 0x00, 0x02, 0x00, 0x01, 0x1c, 0x41, 0x80, 0x02, + 0x16, 0x80, 0x01, 0x80, 0x05, 0x81, 0x00, 0x00, 0x0b, 0xc1, 0x40, 0x02, 0x80, 0x01, 0x00, 0x00, + 0xc0, 0x01, 0x80, 0x00, 0x00, 0x02, 0x00, 0x01, 0x40, 0x02, 0x80, 0x01, 0x1c, 0x41, 0x00, 0x03, + 0x1e, 0x00, 0x80, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x63, 0x68, 0x65, + 0x63, 0x6b, 0x5f, 0x69, 0x73, 0x6f, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x69, 0x73, 0x6f, + 0x00, 0x04, 0x08, 0x00, 0x00, 0x00, 0x63, 0x6f, 0x70, 0x79, 0x64, 0x69, 0x72, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x8c, 0x01, 0x00, 0x00, 0x97, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x08, 0x1e, 0x00, + 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, 0xdc, 0x40, 0x80, 0x00, 0x17, 0x40, 0x40, 0x00, 0x16, 0xc0, + 0x00, 0x80, 0xc5, 0x80, 0x00, 0x00, 0xcb, 0xc0, 0xc0, 0x01, 0xdc, 0x40, 0x00, 0x01, 0x16, 0x00, + 0x05, 0x80, 0x17, 0x40, 0xc0, 0x00, 0x16, 0x00, 0x01, 0x80, 0xc5, 0x80, 0x00, 0x00, 0xcb, 0xc0, + 0xc0, 0x01, 0x40, 0x01, 0x00, 0x00, 0xdc, 0x40, 0x80, 0x01, 0x16, 0x40, 0x03, 0x80, 0x17, 0x40, + 0x40, 0x01, 0x16, 0x40, 0x01, 0x80, 0xc5, 0x80, 0x00, 0x00, 0xcb, 0xc0, 0xc0, 0x01, 0x40, 0x01, + 0x00, 0x00, 0x80, 0x01, 0x80, 0x00, 0xdc, 0x40, 0x00, 0x02, 0x16, 0x40, 0x01, 0x80, 0xc5, 0x80, + 0x00, 0x00, 0xcb, 0xc0, 0xc0, 0x01, 0x40, 0x01, 0x00, 0x00, 0x80, 0x01, 0x80, 0x00, 0xc0, 0x01, + 0x00, 0x01, 0xdc, 0x40, 0x80, 0x02, 0x1e, 0x00, 0x80, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x0a, + 0x00, 0x00, 0x00, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x69, 0x73, 0x6f, 0x00, 0x00, 0x04, 0x04, + 0x00, 0x00, 0x00, 0x69, 0x73, 0x6f, 0x00, 0x04, 0x06, 0x00, 0x00, 0x00, 0x63, 0x6c, 0x6f, 0x73, + 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; diff --git a/src/lua-interface.cpp b/src/lua-interface.cpp new file mode 100644 index 0000000..8350680 --- /dev/null +++ b/src/lua-interface.cpp @@ -0,0 +1,745 @@ +/* + * PSX-Tools Bundle Pack + * Copyright (C) 2002-2005 Nicolas "Pixel" Noble + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* $Id: lua-interface.cpp,v 1.1 2008-07-04 12:03:01 pixel Exp $ */ + +#define WIP + +#define VERSION "0.7" + +#include <stdio.h> + +#include <readline/readline.h> +#include <readline/history.h> + +#include <getopt.h> +#include <Input.h> +#include <Output.h> +#include <Buffer.h> +#include <BLua.h> +#include <LuaCommandLine.h> +#include <HttpServ.h> +#include <Message.h> +#include <Form.h> +#include <BRegex.h> +#include <LuaTask.h> +#include <TaskMan.h> +#include <generic.h> +#include <Main.h> +#include <lua-plugin.h> + +#include "lua-interface-hc.h" + +#ifdef _WIN32 + +#include <windows.h> +#include <ctype.h> +#include <conio.h> + +#include <readline/rldefs.h> + +#define EXT_PREFIX 0x1f8 + +#define KEV irec.Event.KeyEvent /* to make life easier */ +#define KST irec.Event.KeyEvent.dwControlKeyState + + +static int pending_key = 0; +static int pending_count = 0; +static int pending_prefix = 0; + +extern int _rl_last_c_pos; /* imported from display.c */ +extern int _rl_last_v_pos; +extern int rl_dispatching; /* imported from readline.c */ +extern int rl_point; +extern int rl_done; +extern int rl_visible_prompt_length; + +extern "C" { +extern int haveConsole; /* imported from rltty.c */ +extern HANDLE hStdout, hStdin; +} + +int my_getc (FILE * stream) +{ + int key; + + if ( pending_count ) + { + --pending_count; + if ( pending_prefix && (pending_count & 1) ) + return pending_prefix; + else + return pending_key; + } + + while ( 1 ) + { + DWORD dummy; + + if (WaitForSingleObject(hStdin, WAIT_FOR_INPUT) != WAIT_OBJECT_0) + { + if ( rl_done ) + return( 0 ); + else + continue; + } + if ( haveConsole & FOR_INPUT ) + { + INPUT_RECORD irec; + ReadConsoleInput(hStdin, &irec, 1, &dummy); + switch(irec.EventType) + { + case KEY_EVENT: + if ( KEV.bKeyDown + && ((KEV.wVirtualKeyCode < VK_SHIFT) || (KEV.wVirtualKeyCode > VK_MENU)) ) + { + int mask = 0; + + key = KEV.uChar.AsciiChar & 0xff; +// if ( KST & (LEFT_ALT_PRESSED | RIGHT_ALT_PRESSED) ) +// mask=0x100; + if ( key ) + { + /* Ascii direct */ + pending_count = KEV.wRepeatCount - 1; + pending_key = key; + pending_prefix = 0; + if ( mask ) + key = tolower(key) | mask; + } + else + /* Others prefixed */ + { + key = EXT_PREFIX; + if ( mask ) + key |= 4; + if (KST & SHIFT_PRESSED) + key |= 1; + if (KST & (LEFT_CTRL_PRESSED | RIGHT_CTRL_PRESSED)) + key |= 2; + mask |= EXT_PREFIX; + pending_count = (KEV.wRepeatCount << 1) - 1; + pending_key = KEV.wVirtualKeyCode; + pending_prefix = key; + } + return key; + } + break; + default: + break; + } + } + else + { + ReadFile(hStdin, &key, 1, &dummy, NULL); + return key; + } + } +} +#endif + +bool interactive = false, server = false; + +Lua * L = 0; + +String server_fname = "server.lua"; + +static int myprint(lua_State * __L) { + Lua * L = Lua::find(__L); + String t = "From LUA: " + L->tostring() + "\n"; + char * tc = t.strdup(); + + Base::printm(M_STATUS, "%s", tc); + + free(tc); + + return 0; +} + +static int StartTaskLoop(void * foo) { + TaskMan::MainLoop(); + return 0; +} + +class Luabaselua_interface : public LuaObject { + public: + static void pushstatics(Lua *) throw (GeneralException); +}; + +typedef void baselua_interface; + +enum baselua_interface_t { + BASELUA_INTERFACE_LOAD = 0, + BASELUA_INTERFACE_PRELOAD, + BASELUA_INTERFACE_LOADMODULE, + BASELUA_INTERFACE_UNLINK, +}; + +struct lua_functypes_t baselua_interface_functions[] = { + { BASELUA_INTERFACE_LOAD, "load", 0, 1, { BLUA_STRING | BLUA_OBJECT } }, + { BASELUA_INTERFACE_PRELOAD, "preload", 0, 1, { BLUA_STRING | BLUA_OBJECT } }, + { BASELUA_INTERFACE_LOADMODULE, "loadmodule", 1, 1, { BLUA_STRING } }, + { BASELUA_INTERFACE_UNLINK, "unlink", 1, 1, { BLUA_STRING } }, + { -1, 0, 0, 0, 0 } +}; + +class sLua_baselua_interface : public Base { + public: + DECLARE_FUNCTION(baselua_interface, BASELUA_INTERFACE_LOAD); + DECLARE_FUNCTION(baselua_interface, BASELUA_INTERFACE_PRELOAD); + DECLARE_FUNCTION(baselua_interface, BASELUA_INTERFACE_LOADMODULE); + DECLARE_FUNCTION(baselua_interface, BASELUA_INTERFACE_UNLINK); + private: + static int baselua_interface_proceed_statics(Lua * L, int n, int caller); +}; + +void Luabaselua_interface::pushstatics(Lua * L) throw (GeneralException ) { + CHECK_FUNCTIONS(baselua_interface); + + PUSH_FUNCTION(baselua_interface, BASELUA_INTERFACE_LOAD); + PUSH_FUNCTION(baselua_interface, BASELUA_INTERFACE_PRELOAD); + PUSH_FUNCTION(baselua_interface, BASELUA_INTERFACE_LOADMODULE); + PUSH_FUNCTION(baselua_interface, BASELUA_INTERFACE_UNLINK); +} + +int sLua_baselua_interface::baselua_interface_proceed_statics(Lua * L, int n, int caller) { + int r = 0; + String filename; + const char * t; + + switch (caller) { + case BASELUA_INTERFACE_LOAD: + if (!n) { + L->load(&Input("lua-interface.lua")); + } else { + if (L->isstring(1)) { + L->load(&Input(L->tostring(1))); + } else { + Handle * t = (Handle *) LuaObject::getme(L, 1); + L->load(t); + } + } + break; + case BASELUA_INTERFACE_PRELOAD: + r = 1; + if (!n) { + L->load(&Input("lua-interface.lua")); + } else { + if (L->isstring(1)) { + L->load(&Input(L->tostring(1)), false); + } else { + Handle * t = (Handle *) LuaObject::getme(L, 1); + L->load(t, false); + } + } + break; + case BASELUA_INTERFACE_LOADMODULE: + LuaLoadPlugin(L->tostring(1), L); + break; + case BASELUA_INTERFACE_UNLINK: + filename = L->tostring(1); + t = filename.to_charp(); + L->push((lua_Number) unlink(t)); + r = 1; + break; + } + return r; +} + +class Lualua_interface : public LuaObject { + public: + static void pushstatics(Lua *) throw (GeneralException); +}; + +typedef void lua_interface; + +enum lua_interface_functions_t { + lua_interface_PRINT = 0, + lua_interface_PRINTN, + lua_interface_QUIT, + lua_interface_EXIT, +}; + +struct lua_functypes_t lua_interface_functions[] = { + { lua_interface_PRINT, "print", 0, 1, { BLUA_ANY } }, + { lua_interface_PRINTN, "printn", 1, 1, { BLUA_ANY } }, + { lua_interface_QUIT, "quit", 0, 0, 0 }, + { lua_interface_EXIT, "exit", 0, 0, 0 }, + { -1, 0, 0, 0, 0 } +}; + +class sLua_lua_interface : public Base { + public: + DECLARE_FUNCTION(lua_interface, lua_interface_PRINT); + DECLARE_FUNCTION(lua_interface, lua_interface_PRINTN); + DECLARE_FUNCTION(lua_interface, lua_interface_QUIT); + DECLARE_FUNCTION(lua_interface, lua_interface_EXIT); + private: + static int lua_interface_proceed_statics(Lua * L, int n, int caller); +}; + +void Lualua_interface::pushstatics(Lua * L) throw (GeneralException ) { + CHECK_FUNCTIONS(lua_interface); + + PUSH_FUNCTION(lua_interface, lua_interface_PRINT); + PUSH_FUNCTION(lua_interface, lua_interface_PRINTN); + PUSH_FUNCTION(lua_interface, lua_interface_QUIT); + PUSH_FUNCTION(lua_interface, lua_interface_EXIT); +} + +int sLua_lua_interface::lua_interface_proceed_statics(Lua * L, int n, int caller) { + int r = 0; + String p; + char * tc; + String eol = ""; + + switch (caller) { + case lua_interface_PRINT: + eol = "\n"; + case lua_interface_PRINTN: + if (n) { + p = L->tostring(1) + eol; + } else { + p = eol; + } + tc = p.strdup(); + printm(M_BARE, "%s", tc); + free(tc); + break; + case lua_interface_QUIT: + case lua_interface_EXIT: + interactive = false; + break; + } + + return r; +} + +int lga = 0; +enum { + NO_OPTION = 0, +}; + +int getopt_flag = NO_OPTION; + +struct option long_options[] = { + {"help", 0, NULL, 'h'}, + {"verbose", 0, NULL, 'v'}, + {"archive", 1, NULL, 'a'}, + {"compile", 1, NULL, 'c'}, + {"debug", 0, NULL, 'd'}, + {"interactive", 0, NULL, 'i'}, + {"line", 0, NULL, 'l'}, + {"exec", 1, NULL, 'e'}, + {"built-in", 0, NULL, 'b'}, + {"probe", 0, NULL, 'p'}, + {"log", 1, NULL, 'g'}, + {"server", 0, NULL, 's'}, + {"hport", 1, NULL, 'h'}, + {"tport", 1, NULL, 't'}, + {"server_fname", 1, NULL, 'f'}, + {0, 0, NULL, 0 } +}; + +static Uint32 elf_hash(const unsigned char * name) { + Uint32 h = 0, g; + + while (*name) { + h = (h << 4) + *name++; + if ((g = h & 0xf0000000)) + h ^= g >> 24; + h &= ~g; + } + + return h; +} + +static int lua_elf_hash(lua_State * __L) { + Lua * L = Lua::find(__L); + String t = L->tostring(); + + L->push((lua_Number) elf_hash((unsigned char *) t.to_charp())); + + return 1; +} + +String LUACall_Names[] = {"identifier"}; +String LUACall_Defaults[] = {""}; +String LUACall_Invites[] = {"LUA function name:"}; +String * LUACall_Lists[] = {0}; +String * LUACall_Descs[] = {0}; + +class ReloadLUA : public Message { + public: + ReloadLUA(const String & title = "Reloading " + server_fname, const String & url = "reloadlua"); + virtual ~ReloadLUA() { } + virtual Task * Do(Variables *, Variables *, Handle *); + + private: +}; + +ReloadLUA::ReloadLUA(const String & _title, const String & _url) : Message(_title, "Reloading " + server_fname + " in progress.", _url, 0) { +} + +Task * ReloadLUA::Do(Variables * v, Variables * headers, Handle * h) { + L->load(&Input(server_fname)); + return Message::Do(v, headers, h); +} + +class LUACall : public Message { + public: + LUACall(const String & title = "Calling a function.", const String & url = "luacall"); + virtual ~LUACall() { } + virtual Task * Do(Variables *, Variables *, Handle *); +}; + +LUACall::LUACall(const String & _title, const String & _url) : Message(_title, "Function call in progress...", _url, 0) { +} + +Task * LUACall::Do(Variables * v, Variables * headers, Handle * h) { + static const Regex ValidIdentifier("[a-zA-Z0-9_.:]*"); + + if (ValidIdentifier.Match((*v)["identifier"])) { + new LuaTask(L, (*v)["identifier"] + "()"); + } + return Message::Do(v, headers, h); +} + +CODE_BEGINS + +/* That's the basic lua starter for non interactive mode */ +Lua * start_basic_lua(void) { + L = new Lua(); + + L->open_base(); + L->open_math(); + L->open_string(); + L->open_table(); + L->open_dir(); + + L->push("print"); + L->push(myprint); + L->setvar(); + + L->push("hash"); + L->push(lua_elf_hash); + L->setvar(); + + Luabaselua_interface::pushstatics(L); + + return L; +} + +/* That's the extended stuff for interactive mode */ +Lua * start_full_lua(void) { + Lua * L = start_basic_lua(); + + Lualua_interface::pushstatics(L); + + return L; +} + +void showbanner() { + printm(M_BARE, +"Lua-Interface version " VERSION " (c) 2003-2008 Nicolas \"Pixel\" Noble\n" +LUA_RELEASE " " LUA_COPYRIGHT "\n" +#ifdef WIP +"Special version Work In Progress, compiled the " __DATE__ " at " __TIME__ "\n" +#endif +"This is free software with ABSOLUTELY NO WARRANTY.\n" +"\n"); +} + +void showhelp(bool longhelp = false) { + printm(M_BARE, +"Usage:\n" +"%s [options] [lua-script1] [lua-script2] ...\n" +"\n" +"Options:\n" +" -v for verbose mode.\n" +" -a <paq> to load an additionnal archive file.\n" +" -c <out> to dump the compiled byte code to file.\n" +" -d to enable debug mode (ie, do not strip)\n" +" -i to start interactive mode.\n" +" -l to turn off the exec on end line.\n" +" -e <cmd> to execute this single command in LUA.\n" +" -b to force the use of the built-in lua-interface.lua\n" +" -g <log> to log into a file.\n" +" -s start the built-in http server.\n" +" -p <hp> http port to bind to.\n" +" -t <tp> telnet port to bind to.\n" +" -f <fil> filename of http server to use (server.lua by default).\n" +" -h for a help page.\n" +, argv[0]); + + if (longhelp) + printm(M_BARE, +"\n" +"Verbose mode can be somewhat a floody thing.\n" +"Options -i/-e and -c are mutually exclusive.\n" +"Options -i, -s and -c are mutually exclusive.\n" +"Options -i/-s and -e are NOT mutually exclusive. For example:\n" +"\n" +" $ %s -i -e \"main()\" somescript.lua\n" +"\n" +"This will first load the script 'somescript.lua', then execute main, and\n" +"afterward, start the interactive mode.\n" +"\n" +"If a script contains inlined code, it will be run right after loading.\n" +, argv[0]); +} + +class lua_interface_printer_t : public printer_t { + public: + lua_interface_printer_t(Handle * h) : log(h) { } + virtual bool printm(int level, const char * format, va_list ap) { + char tmp[10241]; + + vsprintf(tmp, format, ap); + + (*log) << tmp; + + return true; + } + private: + Handle * log; +}; + +virtual int startup() throw (GeneralException) { + char c; + + bool auto_exec = true, strip = true, todo = false, runit, write = false, builtin = false; + char * file = 0, * output = 0, * compile = 0, * exec = 0, * line_read = 0; + char prompt[10]; + Lua * L = 0; + Buffer command; + String line, endline, hport = "1500", tport = "1550"; + int pos; + + verbosity = M_WARNING; + + showbanner(); + + /* Let's start parsing options */ + + while ((c = getopt_long(argc, argv, "Hhva:c:dile:bg:st:p:f:", long_options, NULL)) != EOF) { + switch (c) { + case 'h': + case 'H': + case '?': + showhelp(true); + throw Exit(0); + case 'v': + verbosity = M_INFO; + break; + case 'a': + new Archive(optarg); + break; + case 'c': + compile = strdup(optarg); + break; + case 'd': + strip = false; + break; + case 'i': + interactive = true; + todo = true; + break; + case 'l': + auto_exec = false; + break; + case 'e': + exec = strdup(optarg); + todo = true; + break; + case 'b': + builtin = true; + break; + case 'g': + printer = new lua_interface_printer_t(new Output(optarg)); + break; + case 's': + server = true; + todo = true; + break; + case 'p': + hport = optarg; + break; + case 't': + tport = optarg; + break; + case 'f': + server_fname = optarg; + break; + case 0: + if (!getopt_flag) { + showhelp(); + throw Exit(-1); + } + switch(getopt_flag) { + default: + throw GeneralException("Unknow option on command-line."); + } + getopt_flag = NO_OPTION; + break; + default: + showhelp(); + throw Exit(-1); + } + } + + if (interactive) + L = start_full_lua(); + else + L = start_basic_lua(); + + /* Loading lua-interface.lua (only when not compiling) */ + if (!compile && !builtin) { + try { + L->load(&Input("lua-interface.lua")); + } + catch (GeneralException e) { + printm(M_WARNING, "There was an error loading lua-interface.lua, using built-in: %s\n", e.GetMsg()); + builtin = true; + } + } + + if (!compile && builtin) { + Buffer built; + built.write(lua_interface_lua, lua_interface_lua_size); + + try { + L->load(&built); + } + catch (GeneralException e) { + printm(M_WARNING, "There was an error loading built-in lua-interface.lua: %s\n", e.GetMsg()); + } + } + + /* Loading all the scripts */ + while (optind < argc) { + todo = true; + L->load(&Input(argv[optind++]), !compile); + } + + /* Doh... */ + if (!todo) { + showhelp(); + throw Exit(0); + } + + /* Compilation process will exit from itself right after */ + if (compile) { + L->dump(&Output(compile), strip); + throw Exit(0); + } + + /* One shot command */ + if (exec) { + command << exec; + L->load(&command); + } + + if (server) { + HttpServ * httpserv = new HttpServ(new Message("Welcome", "Welcome.", "start"), hport.to_int(), "Lua Interface"); + new Form("LUACall", "luacallform", "Enter the function name to call", LUACall_Names, LUACall_Invites, LUACall_Defaults, LUACall_Lists, LUACall_Descs, 1, new LUACall()); + new ReloadLUA(); + new LuaCommandLine(L, tport.to_int()); + L->load(&Input(server_fname)); + + StartTaskLoop(0); + } + + if (!interactive) + Exit(0); + + /* Interactive mode loop */ + strcpy(prompt, "> "); +#ifdef _WIN32 + rl_getc_function = my_getc; +#endif + rl_bind_key('\t', rl_insert); + while (interactive) { + /* Basic usage of readline */ + if (line_read) + free(line_read); + + line_read = readline(prompt); + + if (!line_read) { + printm(M_BARE, "\n"); + break; + } + + if (*line_read) + add_history(line_read); + + line = line_read; + line = line.trim(); + endline = ""; + + /* Splitting the line between ;; */ + while (line.strlen()) { + runit = false; + + if ((pos = line.strstr(";;")) >= 0) { + endline = line.extract(pos + 2); + line = line.extract(0, pos); + runit = true; + } else { + endline = ""; + } + + if (line[line.strlen() - 1] == '\\') { + line[line.strlen() - 1] = ' '; + } else if (auto_exec) { + runit = true; + } + + command << line; + + if (runit) { + try { + L->load(&command); + } + catch (LuaException e) { + /* If there was an error, ignore it, and free the stack */ + while(L->gettop()) + L->pop(); + printm(M_ERROR, "%s\n", e.GetMsg()); + } + catch (GeneralException e) { + /* A more severe exception... */ + while(L->gettop()) + L->pop(); + printm(M_ERROR, "Aborted. LUA caused the following exception: %s\n", e.GetMsg()); + } + strcpy(prompt, "> "); + } else { + strcpy(prompt, "- "); + command << "\n"; + } + line = endline.trim(); + } + } + + return 0; +} +CODE_ENDS |