diff options
Diffstat (limited to 'libjava/include')
39 files changed, 11757 insertions, 0 deletions
diff --git a/libjava/include/Makefile.am b/libjava/include/Makefile.am new file mode 100644 index 000000000..696a516e7 --- /dev/null +++ b/libjava/include/Makefile.am @@ -0,0 +1,15 @@ +## Process this file with automake to produce Makefile.in. + +AUTOMAKE_OPTIONS = foreign + +# May be used by various substitution variables. +gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER) + +# autoconf2.13's target_alias +target_noncanonical = @target_noncanonical@ + +tool_include_dir = $(libdir)/gcc/$(target_noncanonical)/$(gcc_version)/include +## The 'jni.h' here is fairly hacky, but it is simpler than trying to +## tell Classpath about our peculiar install directory. +tool_include__HEADERS = jni_md.h ../classpath/include/jawt.h \ + ../classpath/include/jawt_md.h jvmpi.h ../classpath/include/jni.h diff --git a/libjava/include/Makefile.in b/libjava/include/Makefile.in new file mode 100644 index 000000000..1796971d1 --- /dev/null +++ b/libjava/include/Makefile.in @@ -0,0 +1,598 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = include +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(srcdir)/config.h.in $(tool_include__HEADERS) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/libltdl/acinclude.m4 \ + $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/enable.m4 \ + $(top_srcdir)/../config/gxx-include-dir.m4 \ + $(top_srcdir)/../config/iconv.m4 \ + $(top_srcdir)/../config/lcmessage.m4 \ + $(top_srcdir)/../config/ld-symbolic.m4 \ + $(top_srcdir)/../config/lead-dot.m4 \ + $(top_srcdir)/../config/lib-ld.m4 \ + $(top_srcdir)/../config/lib-link.m4 \ + $(top_srcdir)/../config/lib-prefix.m4 \ + $(top_srcdir)/../config/lthostflags.m4 \ + $(top_srcdir)/../config/multi.m4 \ + $(top_srcdir)/../config/no-executables.m4 \ + $(top_srcdir)/../config/override.m4 \ + $(top_srcdir)/../config/tls.m4 \ + $(top_srcdir)/../config/unwind_ipinfo.m4 \ + $(top_srcdir)/../libtool.m4 $(top_srcdir)/../ltgcc.m4 \ + $(top_srcdir)/../ltoptions.m4 $(top_srcdir)/../ltsugar.m4 \ + $(top_srcdir)/../ltversion.m4 $(top_srcdir)/../lt~obsolete.m4 \ + $(top_srcdir)/mingwld.m4 $(top_srcdir)/pkg.m4 \ + $(top_srcdir)/shlibpath.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +CONFIG_HEADER = config.h $(top_builddir)/gcj/libgcj-config.h +CONFIG_CLEAN_FILES = platform.h java-gc.h java-threads.h java-signal.h \ + java-signal-aux.h +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(tool_include_dir)" +HEADERS = $(tool_include__HEADERS) +ETAGS = etags +CTAGS = ctags +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +ANTLR_JAR = @ANTLR_JAR@ +AR = @AR@ +AS = @AS@ +ATOMICSPEC = @ATOMICSPEC@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BACKTRACESPEC = @BACKTRACESPEC@ +BUILD_VERSION = @BUILD_VERSION@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECKREFSPEC = @CHECKREFSPEC@ +CLASSPATH_SEPARATOR = @CLASSPATH_SEPARATOR@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPU = @CPU@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DIRLTDL = @DIRLTDL@ +DIVIDESPEC = @DIVIDESPEC@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +ECJ_BUILD_JAR = @ECJ_BUILD_JAR@ +ECJ_JAR = @ECJ_JAR@ +EGREP = @EGREP@ +EXCEPTIONSPEC = @EXCEPTIONSPEC@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GCC_FOR_ECJX = @GCC_FOR_ECJX@ +GCC_UNWIND_INCLUDE = @GCC_UNWIND_INCLUDE@ +GCDEPS = @GCDEPS@ +GCINCS = @GCINCS@ +GCJ = @GCJ@ +GCJDEPMODE = @GCJDEPMODE@ +GCJFLAGS = @GCJFLAGS@ +GCJH = @GCJH@ +GCJVERSION = @GCJVERSION@ +GCJ_BIN_DIR = @GCJ_BIN_DIR@ +GCJ_FOR_ECJX = @GCJ_FOR_ECJX@ +GCLIBS = @GCLIBS@ +GCSPEC = @GCSPEC@ +GCTESTSPEC = @GCTESTSPEC@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GREP = @GREP@ +GTK_CFLAGS = @GTK_CFLAGS@ +GTK_LIBS = @GTK_LIBS@ +HASH_SYNC_SPEC = @HASH_SYNC_SPEC@ +IEEESPEC = @IEEESPEC@ +INCLTDL = @INCLTDL@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTERPRETER = @INTERPRETER@ +JAR = @JAR@ +JAVA_HOME = @JAVA_HOME@ +JAVA_VERSION = @JAVA_VERSION@ +JC1GCSPEC = @JC1GCSPEC@ +JRE_BIN_DIR = @JRE_BIN_DIR@ +JRE_DIR = @JRE_DIR@ +JRE_LIB_DIR = @JRE_LIB_DIR@ +JRE_LNK = @JRE_LNK@ +JVM_JAR_DIR = @JVM_JAR_DIR@ +JVM_JAR_ROOT_DIR = @JVM_JAR_ROOT_DIR@ +JVM_ROOT_DIR = @JVM_ROOT_DIR@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LDLIBICONV = @LDLIBICONV@ +LD_FINISH_STATIC_SPEC = @LD_FINISH_STATIC_SPEC@ +LD_START_STATIC_SPEC = @LD_START_STATIC_SPEC@ +LIBART_CFLAGS = @LIBART_CFLAGS@ +LIBART_LIBS = @LIBART_LIBS@ +LIBDIR = @LIBDIR@ +LIBFFI = @LIBFFI@ +LIBFFIINCS = @LIBFFIINCS@ +LIBGCJDEBUG = @LIBGCJDEBUG@ +LIBGCJTESTSPEC = @LIBGCJTESTSPEC@ +LIBGCJ_BC_SPEC = @LIBGCJ_BC_SPEC@ +LIBGCJ_CFLAGS = @LIBGCJ_CFLAGS@ +LIBGCJ_CXXFLAGS = @LIBGCJ_CXXFLAGS@ +LIBGCJ_JAVAFLAGS = @LIBGCJ_JAVAFLAGS@ +LIBGCJ_LD_SYMBOLIC = @LIBGCJ_LD_SYMBOLIC@ +LIBGCJ_LD_SYMBOLIC_FUNCTIONS = @LIBGCJ_LD_SYMBOLIC_FUNCTIONS@ +LIBGCJ_SPEC = @LIBGCJ_SPEC@ +LIBGCJ_SUBLIB_CORE_EXTRA_DEPS = @LIBGCJ_SUBLIB_CORE_EXTRA_DEPS@ +LIBGCJ_SUBLIB_LTFLAGS = @LIBGCJ_SUBLIB_LTFLAGS@ +LIBICONV = @LIBICONV@ +LIBLTDL = @LIBLTDL@ +LIBMATHSPEC = @LIBMATHSPEC@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBSTDCXXSPEC = @LIBSTDCXXSPEC@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKE = @MAKE@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OS = @OS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PERL = @PERL@ +PKG_CONFIG = @PKG_CONFIG@ +PLATFORM = @PLATFORM@ +RANLIB = @RANLIB@ +SDK_BIN_DIR = @SDK_BIN_DIR@ +SDK_INCLUDE_DIR = @SDK_INCLUDE_DIR@ +SDK_LIB_DIR = @SDK_LIB_DIR@ +SDK_LNK = @SDK_LNK@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +SYSDEP_SOURCES = @SYSDEP_SOURCES@ +SYSTEMSPEC = @SYSTEMSPEC@ +SYS_ZLIBS = @SYS_ZLIBS@ +THREADCXXFLAGS = @THREADCXXFLAGS@ +THREADDEPS = @THREADDEPS@ +THREADINCS = @THREADINCS@ +THREADLDFLAGS = @THREADLDFLAGS@ +THREADLIBS = @THREADLIBS@ +THREADSPEC = @THREADSPEC@ +THREADSTARTFILESPEC = @THREADSTARTFILESPEC@ +TOOLKIT = @TOOLKIT@ +UNZIP = @UNZIP@ +VERSION = @VERSION@ +XMKMF = @XMKMF@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ +ZINCS = @ZINCS@ +ZIP = @ZIP@ +ZLIBS = @ZLIBS@ +ZLIBSPEC = @ZLIBSPEC@ +ZLIBTESTSPEC = @ZLIBTESTSPEC@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_GCJ = @ac_ct_GCJ@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_libsubdir = @build_libsubdir@ +build_os = @build_os@ +build_subdir = @build_subdir@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +dbexecdir = @dbexecdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +extra_ldflags = @extra_ldflags@ +extra_ldflags_libjava = @extra_ldflags_libjava@ +gcc_suffix = @gcc_suffix@ +gcjsubdir = @gcjsubdir@ +gxx_include_dir = @gxx_include_dir@ +here = @here@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_exeext = @host_exeext@ +host_os = @host_os@ +host_subdir = @host_subdir@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +libstdcxx_incdir = @libstdcxx_incdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_host_flags = @lt_host_flags@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +mkinstalldirs = @mkinstalldirs@ +multi_basedir = @multi_basedir@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +python_mod_dir = @python_mod_dir@ +python_mod_dir_expanded = @python_mod_dir_expanded@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ + +# autoconf2.13's target_alias +target_noncanonical = @target_noncanonical@ +target_os = @target_os@ +target_subdir = @target_subdir@ +target_vendor = @target_vendor@ +toolexecdir = @toolexecdir@ +toolexeclibdir = @toolexeclibdir@ +toolexecmainlibdir = @toolexecmainlibdir@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AUTOMAKE_OPTIONS = foreign + +# May be used by various substitution variables. +gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER) +tool_include_dir = $(libdir)/gcc/$(target_noncanonical)/$(gcc_version)/include +tool_include__HEADERS = jni_md.h ../classpath/include/jawt.h \ + ../classpath/include/jawt_md.h jvmpi.h ../classpath/include/jni.h + +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign include/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @if test ! -f $@; then \ + rm -f stamp-h1; \ + $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ + else :; fi + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status include/config.h +$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-tool_include_HEADERS: $(tool_include__HEADERS) + @$(NORMAL_INSTALL) + test -z "$(tool_include_dir)" || $(MKDIR_P) "$(DESTDIR)$(tool_include_dir)" + @list='$(tool_include__HEADERS)'; test -n "$(tool_include_dir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(tool_include_dir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(tool_include_dir)" || exit $$?; \ + done + +uninstall-tool_include_HEADERS: + @$(NORMAL_UNINSTALL) + @list='$(tool_include__HEADERS)'; test -n "$(tool_include_dir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(tool_include_dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(tool_include_dir)" && rm -f $$files + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags +check-am: all-am +check: check-am +all-am: Makefile $(HEADERS) config.h +installdirs: + for dir in "$(DESTDIR)$(tool_include_dir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-hdr distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-tool_include_HEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-tool_include_HEADERS + +.MAKE: all install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool ctags distclean distclean-generic distclean-hdr \ + distclean-libtool distclean-tags dvi dvi-am html html-am info \ + info-am install install-am install-data install-data-am \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip install-tool_include_HEADERS \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ + uninstall-am uninstall-tool_include_HEADERS + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libjava/include/aix-signal.h b/libjava/include/aix-signal.h new file mode 100644 index 000000000..abf372292 --- /dev/null +++ b/libjava/include/aix-signal.h @@ -0,0 +1,50 @@ +/* aix-signal.h - Catch runtime signals and turn them into exceptions, + on a Darwin system. */ + +/* Copyright (C) 2008 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +/* This file is really more of a specification. The rest of the system + should be arranged so that this Just Works. */ + +#ifndef JAVA_SIGNAL_H +# define JAVA_SIGNAL_H 1 + +#include <sys/types.h> +#include <sys/signal.h> + +typedef void (* SIG_PF)(int); + +# define HANDLE_SEGV 1 +# undef HANDLE_FPE + +# define SIGNAL_HANDLER(_name) \ + static void _name (int _dummy __attribute__ ((unused))) + +# define MAKE_THROW_FRAME(_exception) + +# define INIT_SEGV \ + do { \ + struct sigaction sa; \ + sa.sa_handler = catch_segv; \ + sigemptyset (&sa.sa_mask); \ + sa.sa_flags = SA_NODEFER; \ + sigaction (SIGBUS, &sa, NULL); \ + sigaction (SIGSEGV, &sa, NULL); \ + } while (0) + +# define INIT_FPE \ + do { \ + struct sigaction sa; \ + sa.sa_handler = catch_fpe; \ + sigemptyset (&sa.sa_mask); \ + sa.sa_flags = SA_NODEFER; \ + sigaction (SIGFPE, &sa, NULL); \ + } while (0) + +#endif /* JAVA_SIGNAL_H */ diff --git a/libjava/include/boehm-gc.h b/libjava/include/boehm-gc.h new file mode 100644 index 000000000..ed8ac6aa2 --- /dev/null +++ b/libjava/include/boehm-gc.h @@ -0,0 +1,98 @@ +// -*- c++ -*- +// boehm-gc.h - Defines for Boehm collector. + +/* Copyright (C) 1998, 1999, 2002, 2004, 2006, 2007 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#ifndef __JV_BOEHM_GC__ +#define __JV_BOEHM_GC__ + +#define JV_MARKOBJ_DECL void *::_Jv_MarkObj (void *, void *, void *, void *) +#define JV_MARKARRAY_DECL void *::_Jv_MarkArray (void *, void *, void *, void *) + +extern "C" +{ + void *_Jv_MarkObj (void *, void *, void *, void *); + void *_Jv_MarkArray (void *, void *, void *, void *); + void _Jv_RegisterLibForGc (const void *); +} + +// Enough stuff to inline _Jv_AllocObj. Ugly. +#include <gcj/javaprims.h> +#include <java/lang/Class.h> +#include <string.h> + +#include <gc_ext_config.h> // for THREAD_LOCAL_ALLOC + +extern "C" void * GC_gcj_malloc(size_t, void *); +extern "C" void * GC_malloc_atomic(size_t); +#ifdef THREAD_LOCAL_ALLOC +extern "C" void * GC_local_gcj_malloc(size_t, void *); +extern "C" void * GC_local_malloc_atomic(size_t); +#endif + +#ifndef LIBGCJ_GC_DEBUG + +inline void * +_Jv_AllocObj (jsize size, jclass klass) +{ + // This should call GC_GCJ_MALLOC, but that would involve + // including gc.h. +#ifdef THREAD_LOCAL_ALLOC + return GC_local_gcj_malloc (size, klass->vtable); +#else + return GC_gcj_malloc (size, klass->vtable); +#endif +} + +inline void * +_Jv_AllocPtrFreeObj (jsize size, jclass klass) +{ +#ifdef JV_HASH_SYNCHRONIZATION +# ifdef THREAD_LOCAL_ALLOC + void * obj = GC_local_malloc_atomic(size); +# else + void * obj = GC_malloc_atomic(size); +# endif + *((_Jv_VTable **) obj) = klass->vtable; +#else +# ifdef THREAD_LOCAL_ALLOC + void * obj = GC_local_gcj_malloc(size, klass->vtable); +# else + void * obj = GC_gcj_malloc(size, klass->vtable); +# endif +#endif + return obj; +} + +#else /* LIBGCJ_GC_DEBUG */ + +void * +_Jv_AllocObj (jsize size, jclass klass); + +void * +_Jv_AllocPtrFreeObj (jsize size, jclass klass); + +#endif /* LIBGCJ_GC_DEBUG */ + +void _Jv_GCAttachThread (); + +void _Jv_GCDetachThread (); + +// _Jv_AllocBytes (jsize size) should go here, too. But clients don't +// usually include this header. + +// Suspend the given thread. This includes suspending the calling thread. +extern "C" void _Jv_SuspendThread (_Jv_Thread_t *); + +// Resume a suspended thread. +extern "C" void _Jv_ResumeThread (_Jv_Thread_t *); + +// Is the given thread suspended? +extern "C" int _Jv_IsThreadSuspended (_Jv_Thread_t *); +#endif /* __JV_BOEHM_GC__ */ diff --git a/libjava/include/config.h.in b/libjava/include/config.h.in new file mode 100644 index 000000000..ce6b748c5 --- /dev/null +++ b/libjava/include/config.h.in @@ -0,0 +1,479 @@ +/* include/config.h.in. Generated from configure.ac by autoheader. */ + +/* Define if building universal (internal helper macro) */ +#undef AC_APPLE_UNIVERSAL_BUILD + +/* Name of default AWT toolkit */ +#undef AWT_TOOLKIT + +/* Define if system properties shouldn't be read from + getenv("GCJ_PROPERTIES"). */ +#undef DISABLE_GETENV_PROPERTIES + +/* Define if java.net native functions should be stubbed out. */ +#undef DISABLE_JAVA_NET + +/* Define if we should ignore arguments to main(). */ +#undef DISABLE_MAIN_ARGS + +/* Define if you're running eCos. */ +#undef ECOS + +/* Define if you are using JVMPI. */ +#undef ENABLE_JVMPI + +/* Short GCJ version ID */ +#undef GCJVERSION + +/* Define if gethostbyaddr_r returns 'int'. */ +#undef GETHOSTBYADDR_R_RETURNS_INT + +/* Define if gethostbyname_r returns 'int'. */ +#undef GETHOSTBYNAME_R_RETURNS_INT + +/* Define to 1 if you have the `access' function. */ +#undef HAVE_ACCESS + +/* Define to 1 if you have the <arpa/inet.h> header file. */ +#undef HAVE_ARPA_INET_H + +/* Define if Boehm GC in use. */ +#undef HAVE_BOEHM_GC + +/* Define if you have u_int32_t */ +#undef HAVE_BSD_INT32_DEFINED + +/* Define to 1 if you have the <bstring.h> header file. */ +#undef HAVE_BSTRING_H + +/* Define to 1 if the target assembler supports thread-local storage. */ +#undef HAVE_CC_TLS + +/* Define to 1 if you have the `chmod' function. */ +#undef HAVE_CHMOD + +/* Define if you have clock_gettime() */ +#undef HAVE_CLOCK_GETTIME + +/* Define to 1 if you have the declaration of `tzname', and to 0 if you don't. + */ +#undef HAVE_DECL_TZNAME + +/* Define to 1 if you have the <dirent.h> header file. */ +#undef HAVE_DIRENT_H + +/* Define if you have dladdr() */ +#undef HAVE_DLADDR + +/* Define to 1 if you have the <dlfcn.h> header file. */ +#undef HAVE_DLFCN_H + +/* Define if dlopen is available */ +#undef HAVE_DLOPEN + +/* Define to 1 if you have the <fcntl.h> header file. */ +#undef HAVE_FCNTL_H + +/* Define to 1 if you have the `fstat' function. */ +#undef HAVE_FSTAT + +/* Define to 1 if you have the `fsync' function. */ +#undef HAVE_FSYNC + +/* Define to 1 if you have the `ftime' function. */ +#undef HAVE_FTIME + +/* Define to 1 if you have the `ftruncate' function. */ +#undef HAVE_FTRUNCATE + +/* Define to 1 if you have the `getcwd' function. */ +#undef HAVE_GETCWD + +/* Define if you have the 'gethostbyaddr_r' function. */ +#undef HAVE_GETHOSTBYADDR_R + +/* Define if you have the 'gethostbyname_r' function. */ +#undef HAVE_GETHOSTBYNAME_R + +/* Define if you have the 'gethostname' function. */ +#undef HAVE_GETHOSTNAME + +/* Define if gethostname is declared in <unistd.h>. */ +#undef HAVE_GETHOSTNAME_DECL + +/* Define to 1 if you have the `getifaddrs' function. */ +#undef HAVE_GETIFADDRS + +/* Define if _Unwind_GetIPInfo is available. */ +#undef HAVE_GETIPINFO + +/* Define to 1 if you have the `getpwuid_r' function. */ +#undef HAVE_GETPWUID_R + +/* Define to 1 if you have the `getrlimit' function. */ +#undef HAVE_GETRLIMIT + +/* Define to 1 if you have the `gettimeofday' function. */ +#undef HAVE_GETTIMEOFDAY + +/* Define if you have the 'gmtime_r' function */ +#undef HAVE_GMTIME_R + +/* Define if you have the iconv() function. */ +#undef HAVE_ICONV + +/* Define to 1 if you have the <ifaddrs.h> header file. */ +#undef HAVE_IFADDRS_H + +/* Define if inet6 structures are defined in netinet/in.h. */ +#undef HAVE_INET6 + +/* Define to 1 if you have the `inet_addr' function. */ +#undef HAVE_INET_ADDR + +/* Define to 1 if you have the `inet_aton' function. */ +#undef HAVE_INET_ATON + +/* Define to 1 if you have the `inet_ntoa' function. */ +#undef HAVE_INET_NTOA + +/* Define to 1 if you have the `inet_pton' function. */ +#undef HAVE_INET_PTON + +/* Define if you have int32_t and uint32_t. */ +#undef HAVE_INT32_DEFINED + +/* Define if <inttypes.h> is available */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if 'in_addr_t' is defined in sys/types.h or netinet/in.h. */ +#undef HAVE_IN_ADDR_T + +/* Define to 1 if you have the <langinfo.h> header file. */ +#undef HAVE_LANGINFO_H + +/* Define if your <locale.h> file defines LC_MESSAGES. */ +#undef HAVE_LC_MESSAGES + +/* Define to 1 if you have the <locale.h> header file. */ +#undef HAVE_LOCALE_H + +/* Define is you have 'localtime' in <time.h> */ +#undef HAVE_LOCALTIME + +/* Define to 1 if you have the `localtime_r' function. */ +#undef HAVE_LOCALTIME_R + +/* Define to 1 if you have the `lstat' function. */ +#undef HAVE_LSTAT + +/* Define to 1 if you have the <magic.h> header file. */ +#undef HAVE_MAGIC_H + +/* Define if magic.h declares magic_t */ +#undef HAVE_MAGIC_T + +/* Define to 1 if you have the `memcpy' function. */ +#undef HAVE_MEMCPY + +/* Define to 1 if you have the `memmove' function. */ +#undef HAVE_MEMMOVE + +/* Define to 1 if you have the <memory.h> header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the `mkdir' function. */ +#undef HAVE_MKDIR + +/* Define to 1 if you have the `mmap' function. */ +#undef HAVE_MMAP + +/* Define to 1 if you have the <netdb.h> header file. */ +#undef HAVE_NETDB_H + +/* Define to 1 if you have the <netinet/in.h> header file. */ +#undef HAVE_NETINET_IN_H + +/* Define to 1 if you have the <net/if.h> header file. */ +#undef HAVE_NET_IF_H + +/* Define to 1 if you have the `nl_langinfo' function. */ +#undef HAVE_NL_LANGINFO + +/* Define to 1 if you have the `open' function. */ +#undef HAVE_OPEN + +/* Define to 1 if you have the `opendir' function. */ +#undef HAVE_OPENDIR + +/* Define if you have /proc/self/exe */ +#undef HAVE_PROC_SELF_EXE + +/* Define if you have /proc/self/maps */ +#undef HAVE_PROC_SELF_MAPS + +/* Define if using POSIX threads that have the mutexattr functions. */ +#undef HAVE_PTHREAD_MUTEXATTR_INIT + +/* Define to 1 if you have the <pwd.h> header file. */ +#undef HAVE_PWD_H + +/* Define to 1 if you have the `readlink' function. */ +#undef HAVE_READLINK + +/* Define to 1 if you have the `rename' function. */ +#undef HAVE_RENAME + +/* Define to 1 if you have the `rmdir' function. */ +#undef HAVE_RMDIR + +/* Define to 1 if you have the `sched_yield' function. */ +#undef HAVE_SCHED_YIELD + +/* Define to 1 if you have the `select' function. */ +#undef HAVE_SELECT + +/* Define to 1 if you have the `setlocale' function. */ +#undef HAVE_SETLOCALE + +/* Define to 1 if you have the `sigaction' function. */ +#undef HAVE_SIGACTION + +/* Define to 1 if you have the `sleep' function. */ +#undef HAVE_SLEEP + +/* Define it socklen_t typedef is in sys/socket.h. */ +#undef HAVE_SOCKLEN_T + +/* Define to 1 if you have the `stat' function. */ +#undef HAVE_STAT + +/* Define to 1 if you have the <stdint.h> header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the <stdlib.h> header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the `strerror_r' function. */ +#undef HAVE_STRERROR_R + +/* Define to 1 if you have the <strings.h> header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the <string.h> header file. */ +#undef HAVE_STRING_H + +/* Define if struct hostent_data is defined in netdb.h */ +#undef HAVE_STRUCT_HOSTENT_DATA + +/* Define if struct ipv6_mreq is defined in netinet/in.h. */ +#undef HAVE_STRUCT_IPV6_MREQ + +/* Define if struct ip_mreq is defined in netinet/in.h. */ +#undef HAVE_STRUCT_IP_MREQ + +/* Define to 1 if `struct tm' is a member of `tm_zone'. */ +#undef HAVE_STRUCT_TM_TM_ZONE + +/* Define to 1 if you have the <sys/config.h> header file. */ +#undef HAVE_SYS_CONFIG_H + +/* Define to 1 if you have the <sys/filio.h> header file. */ +#undef HAVE_SYS_FILIO_H + +/* Define to 1 if you have the <sys/ioctl.h> header file. */ +#undef HAVE_SYS_IOCTL_H + +/* Define to 1 if you have the <sys/resource.h> header file. */ +#undef HAVE_SYS_RESOURCE_H + +/* Define to 1 if you have the <sys/rw_lock.h> header file. */ +#undef HAVE_SYS_RW_LOCK_H + +/* Define to 1 if you have the <sys/select.h> header file. */ +#undef HAVE_SYS_SELECT_H + +/* Define to 1 if you have the <sys/socket.h> header file. */ +#undef HAVE_SYS_SOCKET_H + +/* Define to 1 if you have the <sys/stat.h> header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the <sys/time.h> header file. */ +#undef HAVE_SYS_TIME_H + +/* Define to 1 if you have the <sys/types.h> header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the `time' function. */ +#undef HAVE_TIME + +/* Define if global 'timezone' exists. */ +#undef HAVE_TIMEZONE + +/* Define to 1 if the target supports thread-local storage. */ +#undef HAVE_TLS + +/* Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use + `HAVE_STRUCT_TM_TM_ZONE' instead. */ +#undef HAVE_TM_ZONE + +/* Define to 1 if you don't have `tm_zone' but do have the external array + `tzname'. */ +#undef HAVE_TZNAME + +/* Define to 1 if you have the `uname' function. */ +#undef HAVE_UNAME + +/* Define if your platform has the global _timezone variable. */ +#undef HAVE_UNDERSCORE_TIMEZONE + +/* Define to 1 if you have the <unistd.h> header file. */ +#undef HAVE_UNISTD_H + +/* Define to 1 if you have the `unlink' function. */ +#undef HAVE_UNLINK + +/* Define to 1 if you have the `usleep' function. */ +#undef HAVE_USLEEP + +/* Define if usleep is declared in <unistd.h>. */ +#undef HAVE_USLEEP_DECL + +/* Define to 1 if you have the `utime' function. */ +#undef HAVE_UTIME + +/* Define to 1 if you have the file `/proc/self/exe'. */ +#undef HAVE__PROC_SELF_EXE + +/* Define to 1 if you have the file `/proc/self/maps'. */ +#undef HAVE__PROC_SELF_MAPS + +/* Define as const if the declaration of iconv() needs const. */ +#undef ICONV_CONST + +/* Define if you want a bytecode interpreter. */ +#undef INTERPRETER + +/* API compatibility version string */ +#undef JV_API_VERSION + +/* Define if hash synchronization is in use */ +#undef JV_HASH_SYNCHRONIZATION + +/* Define if <inttypes.h> is available */ +#undef JV_HAVE_INTTYPES_H + +/* Indicate that linker is not able to 8-byte align static data */ +#undef JV_LINKER_CANNOT_8BYTE_ALIGN_STATICS + +/* Compatibility version string */ +#undef JV_VERSION + +/* Define if we want to use debug calls into the garbage collector. */ +#undef LIBGCJ_GC_DEBUG + +/* Installation prefix */ +#undef LIBGCJ_PREFIX + +/* Define if using POSIX threads on Linux. */ +#undef LINUX_THREADS + +/* Define to the name of the environment variable that determines the dynamic + library search path. */ +#undef LTDL_SHLIBPATH_VAR + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#undef LT_OBJDIR + +/* Define if MinGW libgcj uses the Windows UNICODE OS API. */ +#undef MINGW_LIBGCJ_UNICODE + +/* Define if getuid() and friends are missing. */ +#undef NO_GETUID + +/* Define to 1 if your C compiler doesn't accept -c and -o together. */ +#undef NO_MINUS_C_MINUS_O + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define if pthread_mutex_t has m_count member. */ +#undef PTHREAD_MUTEX_HAVE_M_COUNT + +/* Define if pthread_mutex_t has __m_count member. */ +#undef PTHREAD_MUTEX_HAVE___M_COUNT + +/* The size of `void *', as computed by sizeof. */ +#undef SIZEOF_VOID_P + +/* Define if the compiler is configured for setjmp/longjmp exceptions. */ +#undef SJLJ_EXCEPTIONS + +/* Define if if the synchronization code should try to avoid pthread_self + calls by caching thread IDs in a hashtable. */ +#undef SLOW_PTHREAD_SELF + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define if struct tm has tm_gmtoff field. */ +#undef STRUCT_TM_HAS_GMTOFF + +/* Define to 1 if your <sys/time.h> declares `struct tm'. */ +#undef TM_IN_SYS_TIME + +/* Define if we're to use libffi. */ +#undef USE_LIBFFI + +/* Define if libltdl is in use. */ +#undef USE_LTDL + +/* Version number of package */ +#undef VERSION + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +# undef WORDS_BIGENDIAN +# endif +#endif + +/* Define to 1 if the X Window System is missing or not being used. */ +#undef X_DISPLAY_MISSING + +/* Required define if using POSIX threads */ +#undef _POSIX_PTHREAD_SEMANTICS + +/* Required define if using POSIX threads */ +#undef _REENTRANT + +/* Define this if you want runtime debugging enabled. */ +#undef __GCJ_DEBUG + +/* Define to `int' if <sys/types.h> does not define. */ +#undef ssize_t diff --git a/libjava/include/darwin-signal.h b/libjava/include/darwin-signal.h new file mode 100644 index 000000000..5003e211c --- /dev/null +++ b/libjava/include/darwin-signal.h @@ -0,0 +1,51 @@ +/* darwin-signal.h - Catch runtime signals and turn them into exceptions, + on a Darwin system. */ + +/* Copyright (C) 2004 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +/* This file is really more of a specification. The rest of the system + should be arranged so that this Just Works. */ + +#ifndef JAVA_SIGNAL_H +# define JAVA_SIGNAL_H 1 + +#include <sys/types.h> +#include <stdio.h> +#include <signal.h> + +typedef void (* SIG_PF)(int); + +# define HANDLE_SEGV 1 +# undef HANDLE_FPE + +# define SIGNAL_HANDLER(_name) \ + static void _name (int _dummy __attribute__ ((unused))) + +# define MAKE_THROW_FRAME(_exception) + +# define INIT_SEGV \ + do { \ + struct sigaction sa; \ + sa.sa_handler = catch_segv; \ + sigemptyset (&sa.sa_mask); \ + sa.sa_flags = SA_NODEFER; \ + sigaction (SIGBUS, &sa, NULL); \ + sigaction (SIGSEGV, &sa, NULL); \ + } while (0) + +# define INIT_FPE \ + do { \ + struct sigaction sa; \ + sa.sa_handler = catch_fpe; \ + sigemptyset (&sa.sa_mask); \ + sa.sa_flags = SA_NODEFER; \ + sigaction (SIGFPE, &sa, NULL); \ + } while (0) + +#endif /* JAVA_SIGNAL_H */ diff --git a/libjava/include/default-signal.h b/libjava/include/default-signal.h new file mode 100644 index 000000000..6aea73468 --- /dev/null +++ b/libjava/include/default-signal.h @@ -0,0 +1,51 @@ +// default-signal.h - Catch runtime signals and turn them into exceptions. + +/* Copyright (C) 1998, 1999, 2000 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#ifndef JAVA_SIGNAL_H +#define JAVA_SIGNAL_H 1 + +#ifdef SJLJ_EXCEPTIONS + +#define HANDLE_SEGV 1 +#define HANDLE_FPE 1 + +#include <signal.h> + +#define SIGNAL_HANDLER(_name) \ +static void _name (int _dummy __attribute__ ((__unused__))) + +#define INIT_SEGV \ +do \ + { \ + signal (SIGSEGV, catch_segv); \ + } \ +while (0) + +#define INIT_FPE \ +do \ + { \ + signal (SIGFPE, catch_fpe); \ + } \ +while (0) + +#define MAKE_THROW_FRAME(_exception) do {} while (0) + +#else /* SJLJ_EXCEPTIONS */ + +#undef HANDLE_SEGV +#undef HANDLE_FPE + +#define INIT_SEGV do {} while (0) +#define INIT_FPE do {} while (0) + +#endif /* SJLJ_EXCEPTIONS */ + +#endif /* JAVA_SIGNAL_H */ + diff --git a/libjava/include/dwarf2-signal.h b/libjava/include/dwarf2-signal.h new file mode 100644 index 000000000..812968217 --- /dev/null +++ b/libjava/include/dwarf2-signal.h @@ -0,0 +1,196 @@ +// dwarf2-signal.h - Catch runtime signals and turn them into exceptions. + +/* Copyright (C) 2000, 2001, 2009 Free Software Foundation + + This file is part of libgcj. + + Use this file for a target for which the dwarf2 unwinder in libgcc + can unwind through signal handlers. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#ifndef JAVA_SIGNAL_H +#define JAVA_SIGNAL_H 1 + +#include <signal.h> +#include <sys/syscall.h> + +#define HANDLE_SEGV 1 +#undef HANDLE_FPE + +#define SIGNAL_HANDLER(_name) \ +static void _Jv_##_name (int, siginfo_t *_sip, void *_p) + +class java::lang::Throwable; + +// Unwind the stack to the point at which the signal was generated and +// then throw an exception. With the dwarf2 unwinder we don't usually +// need to do anything, with some minor exceptions. + +#ifdef __ia64__ + +#define MAKE_THROW_FRAME(_exception) \ +do \ +{ \ + /* IA-64 either leaves PC pointing at a faulting instruction or the \ + following instruction, depending on the signal. SEGV always does \ + the former, so we adjust the saved PC to point to the following \ + instruction; this is what the handler in libgcc expects. */ \ + /* Note that we are lying to the unwinder here, which expects the \ + faulting pc, not pc+1. But we claim the unwind information can't \ + be changed by such a ld or st instruction, so it doesn't matter. */ \ + struct sigcontext *_sc = (struct sigcontext *)_p; \ + _sc->sc_ip++; \ +} \ +while (0) + +#else +#define MAKE_THROW_FRAME(_exception) \ +do \ +{ \ + (void)_p; \ +} \ +while (0) +#endif + +#if defined(__sparc__) +#if defined(__arch64__) +extern "C" { + static void __rt_sigreturn_stub(void) + { + __asm__("mov %0, %%g1\n\t" + "ta 0x6d\n\t" + : /* no outputs */ + : "i" (__NR_rt_sigreturn)); + } + struct kernel_sigaction + { + void (*k_sa_sigaction)(int,siginfo_t *,void *); + unsigned long k_sa_flags; + void (*k_sa_restorer)(void); + sigset_t k_sa_mask; + }; +} +#define INIT_SEGV \ +do \ + { \ + struct kernel_sigaction act; \ + unsigned long stub = ((unsigned long)&__rt_sigreturn_stub); \ + act.k_sa_sigaction = _Jv_catch_segv; \ + sigemptyset (&act.k_sa_mask); \ + act.k_sa_flags = SA_SIGINFO; \ + act.k_sa_restorer = NULL; \ + syscall (SYS_rt_sigaction, SIGSEGV, &act, NULL, \ + stub - 8, _NSIG / 8); \ + } \ +while (0) + +#define INIT_FPE \ +do \ + { \ + struct kernel_sigaction act; \ + unsigned long stub = ((unsigned long)&__rt_sigreturn_stub); \ + act.k_sa_sigaction = _Jv_catch_fpe; \ + sigemptyset (&act.k_sa_mask); \ + act.k_sa_flags = SA_SIGINFO; \ + act.k_sa_restorer = NULL; \ + syscall (SYS_rt_sigaction, SIGFPE, &act, NULL, \ + stub - 8, _NSIG / 8); \ + } \ +while (0) +#else /* __arch64__ */ + +extern "C" { + struct kernel_sigaction + { + void (*k_sa_sigaction)(int,siginfo_t *,void *); + unsigned long k_sa_mask, k_sa_flags; + void (*k_sa_restorer)(void); + }; +} + +#define INIT_SEGV \ +do \ + { \ + struct kernel_sigaction act; \ + act.k_sa_sigaction = _Jv_catch_segv; \ + act.k_sa_mask = 0; \ + act.k_sa_flags = SA_SIGINFO; \ + act.k_sa_restorer = NULL; \ + syscall (SYS_sigaction, -SIGSEGV, &act, NULL); \ + } \ +while (0) + +#define INIT_FPE \ +do \ + { \ + struct kernel_sigaction act; \ + act.k_sa_sigaction = _Jv_catch_fpe; \ + act.k_sa_mask = 0; \ + act.k_sa_flags = SA_SIGINFO; \ + act.k_sa_restorer = NULL; \ + syscall (SYS_sigaction, -SIGFPE, &act, NULL); \ + } \ +while (0) +#endif +#elif !defined(__ia64__) +#define INIT_SEGV \ +do \ + { \ + struct sigaction act; \ + act.sa_sigaction = _Jv_catch_segv; \ + sigemptyset (&act.sa_mask); \ + act.sa_flags = SA_SIGINFO; \ + syscall (SYS_sigaction, SIGSEGV, &act, NULL); \ + } \ +while (0) + +#define INIT_FPE \ +do \ + { \ + struct sigaction act; \ + act.sa_sigaction = _Jv_catch_fpe; \ + sigemptyset (&act.sa_mask); \ + act.sa_flags = SA_SIGINFO; \ + syscall (SYS_sigaction, SIGFPE, &act, NULL); \ + } \ +while (0) + +/* We use syscall(SYS_sigaction) in INIT_SEGV and INIT_FPE instead of + * sigaction() because on some systems the pthreads wrappers for + * signal handlers are not compiled with unwind information, so it's + * not possible to unwind through them. This is a problem that will + * go away once all systems have pthreads libraries that are + * compiled with full unwind info. */ + +#else /* __ia64__ */ + +// On IA64, unwind information is mandatory, so we can unwind +// correctly through glibc frames. Thus we call the ordinary +// sigaction. + +#define INIT_SEGV \ +do \ + { \ + struct sigaction act; \ + act.sa_sigaction = _Jv_catch_segv; \ + sigemptyset (&act.sa_mask); \ + act.sa_flags = SA_SIGINFO; \ + sigaction (SIGSEGV, &act, NULL); \ + } \ +while (0) + +#define INIT_FPE \ +do \ + { \ + struct sigaction act; \ + act.sa_sigaction = _Jv_catch_fpe; \ + sigemptyset (&act.sa_mask); \ + act.sa_flags = SA_SIGINFO; \ + sigaction (SIGFPE, &act, NULL); \ + } \ +while (0) +#endif /* __ia64__ || __sparc__ */ +#endif /* JAVA_SIGNAL_H */ diff --git a/libjava/include/execution.h b/libjava/include/execution.h new file mode 100644 index 000000000..c48b2fc32 --- /dev/null +++ b/libjava/include/execution.h @@ -0,0 +1,276 @@ +// execution.h - Execution engines. -*- c++ -*- + +/* Copyright (C) 2004, 2006, 2007 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#ifndef __JAVA_EXECUTION_H__ +#define __JAVA_EXECUTION_H__ + +// This represents one execution engine. Note that we use function +// pointers and not virtual methods to avoid calls to +// __cxa_call_unexpected and the like. +struct _Jv_ExecutionEngine +{ + public: + + void (*unregister) (jclass); + // FIXME: probably should handle this elsewhere, see how + // interpreter does it. + bool (*need_resolve_string_fields) (); + void (*verify) (jclass); + void (*allocate_static_fields) (jclass, int, int); + void (*allocate_field_initializers) (jclass); + void (*create_ncode) (jclass); + _Jv_ResolvedMethod *(*resolve_method) (_Jv_Method *, jclass, + jboolean); + void (*post_miranda_hook) (jclass); + _Jv_ClosureList **(*get_closure_list) (jclass); +}; + +// This handles gcj-compiled code except that compiled with +// -findirect-classes. +struct _Jv_CompiledEngine : public _Jv_ExecutionEngine +{ + public: + + static void do_unregister (jclass) + { + } + + static bool do_need_resolve_string_fields () + { + return true; + } + + static void do_verify (jclass klass) + { + _Jv_Linker::verify_type_assertions (klass); + } + + static _Jv_ResolvedMethod *do_resolve_method (_Jv_Method *, jclass, + jboolean) + { + return NULL; + } + + static void do_allocate_static_fields (jclass, + int, + int) + { + } + + static void do_allocate_field_initializers (jclass) + { + } + + static void do_create_ncode (jclass) + { + // Not needed. + } + + static void do_post_miranda_hook (jclass) + { + // Not needed. + } + + static _Jv_ClosureList **do_get_closure_list (jclass) + { + return NULL; + } + + _Jv_CompiledEngine () + { + unregister = do_unregister; + need_resolve_string_fields = do_need_resolve_string_fields; + verify = do_verify; + allocate_static_fields = do_allocate_static_fields; + allocate_field_initializers = do_allocate_field_initializers; + create_ncode = do_create_ncode; + resolve_method = do_resolve_method; + post_miranda_hook = do_post_miranda_hook; + get_closure_list = do_get_closure_list; + } + + // These operators make it so we don't have to link in libstdc++. + void *operator new (size_t bytes) + { + return _Jv_Malloc(bytes); + } + + void operator delete (void *mem) + { + _Jv_Free(mem); + } +}; + +class _Jv_IndirectCompiledClass +{ +public: + void **field_initializers; + _Jv_ClosureList **closures; +}; + +// This handles gcj-compiled code compiled with -findirect-classes. +struct _Jv_IndirectCompiledEngine : public _Jv_CompiledEngine +{ + _Jv_IndirectCompiledEngine () : _Jv_CompiledEngine () + { + allocate_static_fields = do_allocate_static_fields; + allocate_field_initializers = do_allocate_field_initializers; + get_closure_list = do_get_closure_list; + } + + static _Jv_IndirectCompiledClass *get_aux_info (jclass klass) + { + _Jv_IndirectCompiledClass *aux = + (_Jv_IndirectCompiledClass*)klass->aux_info; + if (!aux) + { + aux = (_Jv_IndirectCompiledClass*) + _Jv_AllocRawObj (sizeof (_Jv_IndirectCompiledClass)); + klass->aux_info = aux; + } + + return aux; + } + + static void do_allocate_field_initializers (jclass klass) + { + _Jv_IndirectCompiledClass *aux = get_aux_info (klass); + if (!aux) + { + aux = (_Jv_IndirectCompiledClass*) + _Jv_AllocRawObj (sizeof (_Jv_IndirectCompiledClass)); + klass->aux_info = aux; + } + + aux->field_initializers = (void **)_Jv_Malloc (klass->field_count + * sizeof (void*)); + + for (int i = 0; i < klass->field_count; i++) + { + _Jv_Field *field = &klass->fields[i]; + if (field->flags & java::lang::reflect::Modifier::STATIC) + { + aux->field_initializers[i] = field->u.addr; + field->u.addr = NULL; + } + } + } + + static void do_allocate_static_fields (jclass klass, + int pointer_size, + int other_size) + { + // Splitting the allocations here lets us scan reference fields + // and avoid scanning non-reference fields. + char *reference_fields = (char *) _Jv_AllocRawObj (pointer_size); + char *non_reference_fields = (char *) _Jv_AllocBytes (other_size); + + _Jv_IndirectCompiledClass *aux + = (_Jv_IndirectCompiledClass*)klass->aux_info; + + for (int i = 0; i < klass->field_count; i++) + { + _Jv_Field *field = &klass->fields[i]; + + if ((field->flags & java::lang::reflect::Modifier::STATIC) == 0) + continue; + + char *base = field->isRef() ? reference_fields : non_reference_fields; + field->u.addr = base + field->u.boffset; + + if (aux->field_initializers[i]) + { + int field_size; + if (! field->isRef ()) + field_size = field->type->size (); + else + field_size = sizeof (jobject); + + memcpy (field->u.addr, aux->field_initializers[i], field_size); + } + } + _Jv_Free (aux->field_initializers); + } + +#ifdef INTERPRETER + static _Jv_ClosureList **do_get_closure_list (jclass klass) + { + _Jv_IndirectCompiledClass *aux = get_aux_info (klass); + + if (!aux->closures) + aux->closures = _Jv_ClosureListFinalizer (); + + return aux->closures; + } +#endif +}; + +#ifdef INTERPRETER + +// This handles interpreted code. +class _Jv_InterpreterEngine : public _Jv_ExecutionEngine +{ + public: + + static void do_verify (jclass); + static void do_allocate_static_fields (jclass, int, int); + static void do_create_ncode (jclass); + static _Jv_ResolvedMethod *do_resolve_method (_Jv_Method *, jclass, + jboolean); + + static bool do_need_resolve_string_fields () + { + return false; + } + + static void do_unregister(jclass klass) + { + _Jv_UnregisterClass(klass); + } + + static void do_allocate_field_initializers (jclass) + { + } + + static void do_post_miranda_hook (jclass); + + static _Jv_ClosureList **do_get_closure_list (jclass klass); + + _Jv_InterpreterEngine () + { + unregister = do_unregister; + need_resolve_string_fields = do_need_resolve_string_fields; + verify = do_verify; + allocate_static_fields = do_allocate_static_fields; + allocate_field_initializers = do_allocate_field_initializers; + create_ncode = do_create_ncode; + resolve_method = do_resolve_method; + post_miranda_hook = do_post_miranda_hook; + get_closure_list = do_get_closure_list; + } + + // These operators make it so we don't have to link in libstdc++. + void *operator new (size_t bytes) + { + return _Jv_Malloc(bytes); + } + + void operator delete (void *mem) + { + _Jv_Free(mem); + } +}; + +extern _Jv_InterpreterEngine _Jv_soleInterpreterEngine; +#endif // INTERPRETER + +extern _Jv_CompiledEngine _Jv_soleCompiledEngine; +extern _Jv_IndirectCompiledEngine _Jv_soleIndirectCompiledEngine; +#endif // __JAVA_EXECUTION_H__ diff --git a/libjava/include/hppa-signal.h b/libjava/include/hppa-signal.h new file mode 100644 index 000000000..116a62ee8 --- /dev/null +++ b/libjava/include/hppa-signal.h @@ -0,0 +1,49 @@ +/* hppa-signal.h - Catch runtime signals and turn them into exceptions, + on a HP-UX 11 PA system. */ + +/* Copyright (C) 2006, 2009 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#ifndef JAVA_SIGNAL_H +#define JAVA_SIGNAL_H 1 + +#include <signal.h> + +#define HANDLE_SEGV 1 +#define HANDLE_FPE 1 + +#define SIGNAL_HANDLER(_name) \ +static void _name (int _dummy __attribute__ ((unused)), \ + siginfo_t *_info __attribute__ ((__unused__)), \ + void *arg __attribute__ ((__unused__))) + +#define MAKE_THROW_FRAME(_exception) + +#define INIT_SEGV \ +do \ + { \ + struct sigaction sa; \ + sa.sa_sigaction = catch_segv; \ + sigemptyset (&sa.sa_mask); \ + sa.sa_flags = SA_SIGINFO | SA_NODEFER; \ + sigaction (SIGSEGV, &sa, NULL); \ + } \ +while (0) + +#define INIT_FPE \ +do \ + { \ + struct sigaction sa; \ + sa.sa_sigaction = catch_fpe; \ + sigemptyset (&sa.sa_mask); \ + sa.sa_flags = SA_SIGINFO | SA_NODEFER; \ + sigaction (SIGFPE, &sa, NULL); \ + } \ +while (0) + +#endif /* JAVA_SIGNAL_H */ diff --git a/libjava/include/i386-signal.h b/libjava/include/i386-signal.h new file mode 100644 index 000000000..a3d3a1b75 --- /dev/null +++ b/libjava/include/i386-signal.h @@ -0,0 +1,167 @@ +// i386-signal.h - Catch runtime signals and turn them into exceptions +// on an i386 based Linux system. + +/* Copyright (C) 1998, 1999, 2001, 2002, 2006, 2007 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + + +#ifndef JAVA_SIGNAL_H +#define JAVA_SIGNAL_H 1 + +#include <signal.h> +#include <sys/syscall.h> + +#define HANDLE_SEGV 1 +#define HANDLE_FPE 1 + +#define SIGNAL_HANDLER(_name) \ +static void _Jv_##_name (int, siginfo_t *, \ + void *_p __attribute__ ((__unused__))) + +#define HANDLE_DIVIDE_OVERFLOW \ +do \ +{ \ + struct ucontext *_uc = (struct ucontext *)_p; \ + gregset_t &_gregs = _uc->uc_mcontext.gregs; \ + unsigned char *_eip = (unsigned char *)_gregs[REG_EIP]; \ + \ + /* According to the JVM spec, "if the dividend is the negative \ + * integer of largest possible magnitude for the type and the \ + * divisor is -1, then overflow occurs and the result is equal to \ + * the dividend. Despite the overflow, no exception occurs". \ + \ + * We handle this by inspecting the instruction which generated the \ + * signal and advancing ip to point to the following instruction. \ + * As the instructions are variable length it is necessary to do a \ + * little calculation to figure out where the following instruction \ + * actually is. \ + \ + */ \ + \ + /* Detect a signed division of Integer.MIN_VALUE. */ \ + if (_eip[0] == 0xf7) \ + { \ + bool _min_value_dividend = false; \ + unsigned char _modrm = _eip[1]; \ + \ + if (((_modrm >> 3) & 7) == 7) /* Signed divide */ \ + { \ + _min_value_dividend = \ + _gregs[REG_EAX] == (greg_t)0x80000000UL; \ + } \ + \ + if (_min_value_dividend) \ + { \ + unsigned char _rm = _modrm & 7; \ + _gregs[REG_EDX] = 0; /* the remainder is zero */ \ + switch (_modrm >> 6) \ + { \ + case 0: /* register indirect */ \ + if (_rm == 5) /* 32-bit displacement */ \ + _eip += 4; \ + if (_rm == 4) /* A SIB byte follows the ModR/M byte */ \ + _eip += 1; \ + break; \ + case 1: /* register indirect + 8-bit displacement */ \ + _eip += 1; \ + if (_rm == 4) /* A SIB byte follows the ModR/M byte */ \ + _eip += 1; \ + break; \ + case 2: /* register indirect + 32-bit displacement */ \ + _eip += 4; \ + if (_rm == 4) /* A SIB byte follows the ModR/M byte */ \ + _eip += 1; \ + break; \ + case 3: \ + break; \ + } \ + _eip += 2; \ + _gregs[REG_EIP] = (greg_t)_eip; \ + return; \ + } \ + } \ +} \ +while (0) + +/* We use kernel_sigaction here because we're calling the kernel + directly rather than via glibc. The sigaction structure that the + syscall uses is a different shape from the one in userland and not + visible to us in a header file so we define it here. */ + +extern "C" +{ + struct kernel_sigaction + { + void (*k_sa_sigaction)(int,siginfo_t *,void *); + unsigned long k_sa_flags; + void (*k_sa_restorer) (void); + sigset_t k_sa_mask; + }; +} + +#define MAKE_THROW_FRAME(_exception) + +#define RESTORE(name, syscall) RESTORE2 (name, syscall) +#define RESTORE2(name, syscall) \ +asm \ + ( \ + ".text\n" \ + ".byte 0 # Yes, this really is necessary\n" \ + " .align 16\n" \ + "__" #name ":\n" \ + " movl $" #syscall ", %eax\n" \ + " int $0x80" \ + ); + +/* The return code for realtime-signals. */ +RESTORE (restore_rt, __NR_rt_sigreturn) +void restore_rt (void) asm ("__restore_rt") + __attribute__ ((visibility ("hidden"))); + +#define INIT_SEGV \ +do \ + { \ + struct kernel_sigaction act; \ + act.k_sa_sigaction = _Jv_catch_segv; \ + sigemptyset (&act.k_sa_mask); \ + act.k_sa_flags = SA_SIGINFO|0x4000000; \ + act.k_sa_restorer = restore_rt; \ + syscall (SYS_rt_sigaction, SIGSEGV, &act, NULL, _NSIG / 8); \ + } \ +while (0) + +#define INIT_FPE \ +do \ + { \ + struct kernel_sigaction act; \ + act.k_sa_sigaction = _Jv_catch_fpe; \ + sigemptyset (&act.k_sa_mask); \ + act.k_sa_flags = SA_SIGINFO|0x4000000; \ + act.k_sa_restorer = restore_rt; \ + syscall (SYS_rt_sigaction, SIGFPE, &act, NULL, _NSIG / 8); \ + } \ +while (0) + +/* You might wonder why we use syscall(SYS_sigaction) in INIT_FPE + * instead of the standard sigaction(). This is necessary because of + * the shenanigans above where we increment the PC saved in the + * context and then return. This trick will only work when we are + * called _directly_ by the kernel, because linuxthreads wraps signal + * handlers and its wrappers do not copy the sigcontext struct back + * when returning from a signal handler. If we return from our divide + * handler to a linuxthreads wrapper, we will lose the PC adjustment + * we made and return to the faulting instruction again. Using + * syscall(SYS_sigaction) causes our handler to be called directly + * by the kernel, bypassing any wrappers. + + * Also, there may not be any unwind info in the linuxthreads + * library's signal handlers and so we can't unwind through them + * anyway. */ + +#endif /* JAVA_SIGNAL_H */ + diff --git a/libjava/include/java-assert.h b/libjava/include/java-assert.h new file mode 100644 index 000000000..1d3a49bfa --- /dev/null +++ b/libjava/include/java-assert.h @@ -0,0 +1,38 @@ +// java-assert.h - Header file holding assertion definitions. -*- c++ -*- + +/* Copyright (C) 1998, 1999, 2010 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#ifndef __JAVA_ASSERT_H__ +#define __JAVA_ASSERT_H__ + +// This is a libgcj implementation header. + +void _Jv_Abort (const char *, const char *, int, const char *) + __attribute__ ((__noreturn__)); + +#ifdef __GCJ_DEBUG +#define _Jv_AssertDoCall(Message) _Jv_Abort (__FUNCTION__, __FILE__, __LINE__, Message) + +#define JvAssertMessage(Expr, Message) \ + do { if (! (Expr)) _Jv_AssertDoCall (Message); } while (0) +#define JvAssert(Expr) \ + do { if (! (Expr)) _Jv_AssertDoCall (# Expr); } while (0) + +#define JvFail(Message) _Jv_AssertDoCall (Message) + +#else /* __GCJ_DEBUG */ + +#define _Jv_AssertDoCall(Message) +#define JvAssertMessage(Expr, Message) (void) sizeof (Expr) +#define JvAssert(Expr) (void) sizeof (Expr) +#define JvFail(Message) _Jv_Abort (0, 0, 0, Message) + +#endif /* not __GCJ_DEBUG */ + +#endif /* __JAVA_ASSERT_H__ */ diff --git a/libjava/include/java-chardecomp.h b/libjava/include/java-chardecomp.h new file mode 100644 index 000000000..cdfd6adbb --- /dev/null +++ b/libjava/include/java-chardecomp.h @@ -0,0 +1,3510 @@ +// java-chardecomp.h - Decomposition character tables -*- c++ -*- + +#ifndef __JAVA_CHARDECOMP_H__ +#define __JAVA_CHARDECOMP_H__ + + +// These tables are automatically generated by the scripts/unicode-decomp.pl +// script. DO NOT EDIT the tables. Instead, fix the script +// and run it again. + +// This file should only be included by natCollator.cc + +struct decomp_entry +{ + jchar key; + const char *value; +}; + +static const decomp_entry canonical_decomposition[] = +{ + { 0x00c0, "\x00\x41\x03\x00" }, + { 0x00c1, "\x00\x41\x03\x01" }, + { 0x00c2, "\x00\x41\x03\x02" }, + { 0x00c3, "\x00\x41\x03\x03" }, + { 0x00c4, "\x00\x41\x03\x08" }, + { 0x00c5, "\x00\x41\x03\x0a" }, + { 0x00c7, "\x00\x43\x03\x27" }, + { 0x00c8, "\x00\x45\x03\x00" }, + { 0x00c9, "\x00\x45\x03\x01" }, + { 0x00ca, "\x00\x45\x03\x02" }, + { 0x00cb, "\x00\x45\x03\x08" }, + { 0x00cc, "\x00\x49\x03\x00" }, + { 0x00cd, "\x00\x49\x03\x01" }, + { 0x00ce, "\x00\x49\x03\x02" }, + { 0x00cf, "\x00\x49\x03\x08" }, + { 0x00d1, "\x00\x4e\x03\x03" }, + { 0x00d2, "\x00\x4f\x03\x00" }, + { 0x00d3, "\x00\x4f\x03\x01" }, + { 0x00d4, "\x00\x4f\x03\x02" }, + { 0x00d5, "\x00\x4f\x03\x03" }, + { 0x00d6, "\x00\x4f\x03\x08" }, + { 0x00d9, "\x00\x55\x03\x00" }, + { 0x00da, "\x00\x55\x03\x01" }, + { 0x00db, "\x00\x55\x03\x02" }, + { 0x00dc, "\x00\x55\x03\x08" }, + { 0x00dd, "\x00\x59\x03\x01" }, + { 0x00e0, "\x00\x61\x03\x00" }, + { 0x00e1, "\x00\x61\x03\x01" }, + { 0x00e2, "\x00\x61\x03\x02" }, + { 0x00e3, "\x00\x61\x03\x03" }, + { 0x00e4, "\x00\x61\x03\x08" }, + { 0x00e5, "\x00\x61\x03\x0a" }, + { 0x00e7, "\x00\x63\x03\x27" }, + { 0x00e8, "\x00\x65\x03\x00" }, + { 0x00e9, "\x00\x65\x03\x01" }, + { 0x00ea, "\x00\x65\x03\x02" }, + { 0x00eb, "\x00\x65\x03\x08" }, + { 0x00ec, "\x00\x69\x03\x00" }, + { 0x00ed, "\x00\x69\x03\x01" }, + { 0x00ee, "\x00\x69\x03\x02" }, + { 0x00ef, "\x00\x69\x03\x08" }, + { 0x00f1, "\x00\x6e\x03\x03" }, + { 0x00f2, "\x00\x6f\x03\x00" }, + { 0x00f3, "\x00\x6f\x03\x01" }, + { 0x00f4, "\x00\x6f\x03\x02" }, + { 0x00f5, "\x00\x6f\x03\x03" }, + { 0x00f6, "\x00\x6f\x03\x08" }, + { 0x00f9, "\x00\x75\x03\x00" }, + { 0x00fa, "\x00\x75\x03\x01" }, + { 0x00fb, "\x00\x75\x03\x02" }, + { 0x00fc, "\x00\x75\x03\x08" }, + { 0x00fd, "\x00\x79\x03\x01" }, + { 0x00ff, "\x00\x79\x03\x08" }, + { 0x0100, "\x00\x41\x03\x04" }, + { 0x0101, "\x00\x61\x03\x04" }, + { 0x0102, "\x00\x41\x03\x06" }, + { 0x0103, "\x00\x61\x03\x06" }, + { 0x0104, "\x00\x41\x03\x28" }, + { 0x0105, "\x00\x61\x03\x28" }, + { 0x0106, "\x00\x43\x03\x01" }, + { 0x0107, "\x00\x63\x03\x01" }, + { 0x0108, "\x00\x43\x03\x02" }, + { 0x0109, "\x00\x63\x03\x02" }, + { 0x010a, "\x00\x43\x03\x07" }, + { 0x010b, "\x00\x63\x03\x07" }, + { 0x010c, "\x00\x43\x03\x0c" }, + { 0x010d, "\x00\x63\x03\x0c" }, + { 0x010e, "\x00\x44\x03\x0c" }, + { 0x010f, "\x00\x64\x03\x0c" }, + { 0x0112, "\x00\x45\x03\x04" }, + { 0x0113, "\x00\x65\x03\x04" }, + { 0x0114, "\x00\x45\x03\x06" }, + { 0x0115, "\x00\x65\x03\x06" }, + { 0x0116, "\x00\x45\x03\x07" }, + { 0x0117, "\x00\x65\x03\x07" }, + { 0x0118, "\x00\x45\x03\x28" }, + { 0x0119, "\x00\x65\x03\x28" }, + { 0x011a, "\x00\x45\x03\x0c" }, + { 0x011b, "\x00\x65\x03\x0c" }, + { 0x011c, "\x00\x47\x03\x02" }, + { 0x011d, "\x00\x67\x03\x02" }, + { 0x011e, "\x00\x47\x03\x06" }, + { 0x011f, "\x00\x67\x03\x06" }, + { 0x0120, "\x00\x47\x03\x07" }, + { 0x0121, "\x00\x67\x03\x07" }, + { 0x0122, "\x00\x47\x03\x27" }, + { 0x0123, "\x00\x67\x03\x27" }, + { 0x0124, "\x00\x48\x03\x02" }, + { 0x0125, "\x00\x68\x03\x02" }, + { 0x0128, "\x00\x49\x03\x03" }, + { 0x0129, "\x00\x69\x03\x03" }, + { 0x012a, "\x00\x49\x03\x04" }, + { 0x012b, "\x00\x69\x03\x04" }, + { 0x012c, "\x00\x49\x03\x06" }, + { 0x012d, "\x00\x69\x03\x06" }, + { 0x012e, "\x00\x49\x03\x28" }, + { 0x012f, "\x00\x69\x03\x28" }, + { 0x0130, "\x00\x49\x03\x07" }, + { 0x0134, "\x00\x4a\x03\x02" }, + { 0x0135, "\x00\x6a\x03\x02" }, + { 0x0136, "\x00\x4b\x03\x27" }, + { 0x0137, "\x00\x6b\x03\x27" }, + { 0x0139, "\x00\x4c\x03\x01" }, + { 0x013a, "\x00\x6c\x03\x01" }, + { 0x013b, "\x00\x4c\x03\x27" }, + { 0x013c, "\x00\x6c\x03\x27" }, + { 0x013d, "\x00\x4c\x03\x0c" }, + { 0x013e, "\x00\x6c\x03\x0c" }, + { 0x0143, "\x00\x4e\x03\x01" }, + { 0x0144, "\x00\x6e\x03\x01" }, + { 0x0145, "\x00\x4e\x03\x27" }, + { 0x0146, "\x00\x6e\x03\x27" }, + { 0x0147, "\x00\x4e\x03\x0c" }, + { 0x0148, "\x00\x6e\x03\x0c" }, + { 0x014c, "\x00\x4f\x03\x04" }, + { 0x014d, "\x00\x6f\x03\x04" }, + { 0x014e, "\x00\x4f\x03\x06" }, + { 0x014f, "\x00\x6f\x03\x06" }, + { 0x0150, "\x00\x4f\x03\x0b" }, + { 0x0151, "\x00\x6f\x03\x0b" }, + { 0x0154, "\x00\x52\x03\x01" }, + { 0x0155, "\x00\x72\x03\x01" }, + { 0x0156, "\x00\x52\x03\x27" }, + { 0x0157, "\x00\x72\x03\x27" }, + { 0x0158, "\x00\x52\x03\x0c" }, + { 0x0159, "\x00\x72\x03\x0c" }, + { 0x015a, "\x00\x53\x03\x01" }, + { 0x015b, "\x00\x73\x03\x01" }, + { 0x015c, "\x00\x53\x03\x02" }, + { 0x015d, "\x00\x73\x03\x02" }, + { 0x015e, "\x00\x53\x03\x27" }, + { 0x015f, "\x00\x73\x03\x27" }, + { 0x0160, "\x00\x53\x03\x0c" }, + { 0x0161, "\x00\x73\x03\x0c" }, + { 0x0162, "\x00\x54\x03\x27" }, + { 0x0163, "\x00\x74\x03\x27" }, + { 0x0164, "\x00\x54\x03\x0c" }, + { 0x0165, "\x00\x74\x03\x0c" }, + { 0x0168, "\x00\x55\x03\x03" }, + { 0x0169, "\x00\x75\x03\x03" }, + { 0x016a, "\x00\x55\x03\x04" }, + { 0x016b, "\x00\x75\x03\x04" }, + { 0x016c, "\x00\x55\x03\x06" }, + { 0x016d, "\x00\x75\x03\x06" }, + { 0x016e, "\x00\x55\x03\x0a" }, + { 0x016f, "\x00\x75\x03\x0a" }, + { 0x0170, "\x00\x55\x03\x0b" }, + { 0x0171, "\x00\x75\x03\x0b" }, + { 0x0172, "\x00\x55\x03\x28" }, + { 0x0173, "\x00\x75\x03\x28" }, + { 0x0174, "\x00\x57\x03\x02" }, + { 0x0175, "\x00\x77\x03\x02" }, + { 0x0176, "\x00\x59\x03\x02" }, + { 0x0177, "\x00\x79\x03\x02" }, + { 0x0178, "\x00\x59\x03\x08" }, + { 0x0179, "\x00\x5a\x03\x01" }, + { 0x017a, "\x00\x7a\x03\x01" }, + { 0x017b, "\x00\x5a\x03\x07" }, + { 0x017c, "\x00\x7a\x03\x07" }, + { 0x017d, "\x00\x5a\x03\x0c" }, + { 0x017e, "\x00\x7a\x03\x0c" }, + { 0x01a0, "\x00\x4f\x03\x1b" }, + { 0x01a1, "\x00\x6f\x03\x1b" }, + { 0x01af, "\x00\x55\x03\x1b" }, + { 0x01b0, "\x00\x75\x03\x1b" }, + { 0x01cd, "\x00\x41\x03\x0c" }, + { 0x01ce, "\x00\x61\x03\x0c" }, + { 0x01cf, "\x00\x49\x03\x0c" }, + { 0x01d0, "\x00\x69\x03\x0c" }, + { 0x01d1, "\x00\x4f\x03\x0c" }, + { 0x01d2, "\x00\x6f\x03\x0c" }, + { 0x01d3, "\x00\x55\x03\x0c" }, + { 0x01d4, "\x00\x75\x03\x0c" }, + { 0x01d5, "\x00\xdc\x03\x04" }, + { 0x01d6, "\x00\xfc\x03\x04" }, + { 0x01d7, "\x00\xdc\x03\x01" }, + { 0x01d8, "\x00\xfc\x03\x01" }, + { 0x01d9, "\x00\xdc\x03\x0c" }, + { 0x01da, "\x00\xfc\x03\x0c" }, + { 0x01db, "\x00\xdc\x03\x00" }, + { 0x01dc, "\x00\xfc\x03\x00" }, + { 0x01de, "\x00\xc4\x03\x04" }, + { 0x01df, "\x00\xe4\x03\x04" }, + { 0x01e0, "\x02\x26\x03\x04" }, + { 0x01e1, "\x02\x27\x03\x04" }, + { 0x01e2, "\x00\xc6\x03\x04" }, + { 0x01e3, "\x00\xe6\x03\x04" }, + { 0x01e6, "\x00\x47\x03\x0c" }, + { 0x01e7, "\x00\x67\x03\x0c" }, + { 0x01e8, "\x00\x4b\x03\x0c" }, + { 0x01e9, "\x00\x6b\x03\x0c" }, + { 0x01ea, "\x00\x4f\x03\x28" }, + { 0x01eb, "\x00\x6f\x03\x28" }, + { 0x01ec, "\x01\xea\x03\x04" }, + { 0x01ed, "\x01\xeb\x03\x04" }, + { 0x01ee, "\x01\xb7\x03\x0c" }, + { 0x01ef, "\x02\x92\x03\x0c" }, + { 0x01f0, "\x00\x6a\x03\x0c" }, + { 0x01f4, "\x00\x47\x03\x01" }, + { 0x01f5, "\x00\x67\x03\x01" }, + { 0x01f8, "\x00\x4e\x03\x00" }, + { 0x01f9, "\x00\x6e\x03\x00" }, + { 0x01fa, "\x00\xc5\x03\x01" }, + { 0x01fb, "\x00\xe5\x03\x01" }, + { 0x01fc, "\x00\xc6\x03\x01" }, + { 0x01fd, "\x00\xe6\x03\x01" }, + { 0x01fe, "\x00\xd8\x03\x01" }, + { 0x01ff, "\x00\xf8\x03\x01" }, + { 0x0200, "\x00\x41\x03\x0f" }, + { 0x0201, "\x00\x61\x03\x0f" }, + { 0x0202, "\x00\x41\x03\x11" }, + { 0x0203, "\x00\x61\x03\x11" }, + { 0x0204, "\x00\x45\x03\x0f" }, + { 0x0205, "\x00\x65\x03\x0f" }, + { 0x0206, "\x00\x45\x03\x11" }, + { 0x0207, "\x00\x65\x03\x11" }, + { 0x0208, "\x00\x49\x03\x0f" }, + { 0x0209, "\x00\x69\x03\x0f" }, + { 0x020a, "\x00\x49\x03\x11" }, + { 0x020b, "\x00\x69\x03\x11" }, + { 0x020c, "\x00\x4f\x03\x0f" }, + { 0x020d, "\x00\x6f\x03\x0f" }, + { 0x020e, "\x00\x4f\x03\x11" }, + { 0x020f, "\x00\x6f\x03\x11" }, + { 0x0210, "\x00\x52\x03\x0f" }, + { 0x0211, "\x00\x72\x03\x0f" }, + { 0x0212, "\x00\x52\x03\x11" }, + { 0x0213, "\x00\x72\x03\x11" }, + { 0x0214, "\x00\x55\x03\x0f" }, + { 0x0215, "\x00\x75\x03\x0f" }, + { 0x0216, "\x00\x55\x03\x11" }, + { 0x0217, "\x00\x75\x03\x11" }, + { 0x0218, "\x00\x53\x03\x26" }, + { 0x0219, "\x00\x73\x03\x26" }, + { 0x021a, "\x00\x54\x03\x26" }, + { 0x021b, "\x00\x74\x03\x26" }, + { 0x021e, "\x00\x48\x03\x0c" }, + { 0x021f, "\x00\x68\x03\x0c" }, + { 0x0226, "\x00\x41\x03\x07" }, + { 0x0227, "\x00\x61\x03\x07" }, + { 0x0228, "\x00\x45\x03\x27" }, + { 0x0229, "\x00\x65\x03\x27" }, + { 0x022a, "\x00\xd6\x03\x04" }, + { 0x022b, "\x00\xf6\x03\x04" }, + { 0x022c, "\x00\xd5\x03\x04" }, + { 0x022d, "\x00\xf5\x03\x04" }, + { 0x022e, "\x00\x4f\x03\x07" }, + { 0x022f, "\x00\x6f\x03\x07" }, + { 0x0230, "\x02\x2e\x03\x04" }, + { 0x0231, "\x02\x2f\x03\x04" }, + { 0x0232, "\x00\x59\x03\x04" }, + { 0x0233, "\x00\x79\x03\x04" }, + { 0x0340, "\x03\x00" }, + { 0x0341, "\x03\x01" }, + { 0x0343, "\x03\x13" }, + { 0x0344, "\x03\x08\x03\x01" }, + { 0x0374, "\x02\xb9" }, + { 0x037e, "\x00\x3b" }, + { 0x0385, "\x00\xa8\x03\x01" }, + { 0x0386, "\x03\x91\x03\x01" }, + { 0x0387, "\x00\xb7" }, + { 0x0388, "\x03\x95\x03\x01" }, + { 0x0389, "\x03\x97\x03\x01" }, + { 0x038a, "\x03\x99\x03\x01" }, + { 0x038c, "\x03\x9f\x03\x01" }, + { 0x038e, "\x03\xa5\x03\x01" }, + { 0x038f, "\x03\xa9\x03\x01" }, + { 0x0390, "\x03\xca\x03\x01" }, + { 0x03aa, "\x03\x99\x03\x08" }, + { 0x03ab, "\x03\xa5\x03\x08" }, + { 0x03ac, "\x03\xb1\x03\x01" }, + { 0x03ad, "\x03\xb5\x03\x01" }, + { 0x03ae, "\x03\xb7\x03\x01" }, + { 0x03af, "\x03\xb9\x03\x01" }, + { 0x03b0, "\x03\xcb\x03\x01" }, + { 0x03ca, "\x03\xb9\x03\x08" }, + { 0x03cb, "\x03\xc5\x03\x08" }, + { 0x03cc, "\x03\xbf\x03\x01" }, + { 0x03cd, "\x03\xc5\x03\x01" }, + { 0x03ce, "\x03\xc9\x03\x01" }, + { 0x03d3, "\x03\xd2\x03\x01" }, + { 0x03d4, "\x03\xd2\x03\x08" }, + { 0x0400, "\x04\x15\x03\x00" }, + { 0x0401, "\x04\x15\x03\x08" }, + { 0x0403, "\x04\x13\x03\x01" }, + { 0x0407, "\x04\x06\x03\x08" }, + { 0x040c, "\x04\x1a\x03\x01" }, + { 0x040d, "\x04\x18\x03\x00" }, + { 0x040e, "\x04\x23\x03\x06" }, + { 0x0419, "\x04\x18\x03\x06" }, + { 0x0439, "\x04\x38\x03\x06" }, + { 0x0450, "\x04\x35\x03\x00" }, + { 0x0451, "\x04\x35\x03\x08" }, + { 0x0453, "\x04\x33\x03\x01" }, + { 0x0457, "\x04\x56\x03\x08" }, + { 0x045c, "\x04\x3a\x03\x01" }, + { 0x045d, "\x04\x38\x03\x00" }, + { 0x045e, "\x04\x43\x03\x06" }, + { 0x0476, "\x04\x74\x03\x0f" }, + { 0x0477, "\x04\x75\x03\x0f" }, + { 0x04c1, "\x04\x16\x03\x06" }, + { 0x04c2, "\x04\x36\x03\x06" }, + { 0x04d0, "\x04\x10\x03\x06" }, + { 0x04d1, "\x04\x30\x03\x06" }, + { 0x04d2, "\x04\x10\x03\x08" }, + { 0x04d3, "\x04\x30\x03\x08" }, + { 0x04d6, "\x04\x15\x03\x06" }, + { 0x04d7, "\x04\x35\x03\x06" }, + { 0x04da, "\x04\xd8\x03\x08" }, + { 0x04db, "\x04\xd9\x03\x08" }, + { 0x04dc, "\x04\x16\x03\x08" }, + { 0x04dd, "\x04\x36\x03\x08" }, + { 0x04de, "\x04\x17\x03\x08" }, + { 0x04df, "\x04\x37\x03\x08" }, + { 0x04e2, "\x04\x18\x03\x04" }, + { 0x04e3, "\x04\x38\x03\x04" }, + { 0x04e4, "\x04\x18\x03\x08" }, + { 0x04e5, "\x04\x38\x03\x08" }, + { 0x04e6, "\x04\x1e\x03\x08" }, + { 0x04e7, "\x04\x3e\x03\x08" }, + { 0x04ea, "\x04\xe8\x03\x08" }, + { 0x04eb, "\x04\xe9\x03\x08" }, + { 0x04ec, "\x04\x2d\x03\x08" }, + { 0x04ed, "\x04\x4d\x03\x08" }, + { 0x04ee, "\x04\x23\x03\x04" }, + { 0x04ef, "\x04\x43\x03\x04" }, + { 0x04f0, "\x04\x23\x03\x08" }, + { 0x04f1, "\x04\x43\x03\x08" }, + { 0x04f2, "\x04\x23\x03\x0b" }, + { 0x04f3, "\x04\x43\x03\x0b" }, + { 0x04f4, "\x04\x27\x03\x08" }, + { 0x04f5, "\x04\x47\x03\x08" }, + { 0x04f8, "\x04\x2b\x03\x08" }, + { 0x04f9, "\x04\x4b\x03\x08" }, + { 0x0622, "\x06\x27\x06\x53" }, + { 0x0623, "\x06\x27\x06\x54" }, + { 0x0624, "\x06\x48\x06\x54" }, + { 0x0625, "\x06\x27\x06\x55" }, + { 0x0626, "\x06\x4a\x06\x54" }, + { 0x06c0, "\x06\xd5\x06\x54" }, + { 0x06c2, "\x06\xc1\x06\x54" }, + { 0x06d3, "\x06\xd2\x06\x54" }, + { 0x0929, "\x09\x28\x09\x3c" }, + { 0x0931, "\x09\x30\x09\x3c" }, + { 0x0934, "\x09\x33\x09\x3c" }, + { 0x0958, "\x09\x15\x09\x3c" }, + { 0x0959, "\x09\x16\x09\x3c" }, + { 0x095a, "\x09\x17\x09\x3c" }, + { 0x095b, "\x09\x1c\x09\x3c" }, + { 0x095c, "\x09\x21\x09\x3c" }, + { 0x095d, "\x09\x22\x09\x3c" }, + { 0x095e, "\x09\x2b\x09\x3c" }, + { 0x095f, "\x09\x2f\x09\x3c" }, + { 0x09cb, "\x09\xc7\x09\xbe" }, + { 0x09cc, "\x09\xc7\x09\xd7" }, + { 0x09dc, "\x09\xa1\x09\xbc" }, + { 0x09dd, "\x09\xa2\x09\xbc" }, + { 0x09df, "\x09\xaf\x09\xbc" }, + { 0x0a33, "\x0a\x32\x0a\x3c" }, + { 0x0a36, "\x0a\x38\x0a\x3c" }, + { 0x0a59, "\x0a\x16\x0a\x3c" }, + { 0x0a5a, "\x0a\x17\x0a\x3c" }, + { 0x0a5b, "\x0a\x1c\x0a\x3c" }, + { 0x0a5e, "\x0a\x2b\x0a\x3c" }, + { 0x0b48, "\x0b\x47\x0b\x56" }, + { 0x0b4b, "\x0b\x47\x0b\x3e" }, + { 0x0b4c, "\x0b\x47\x0b\x57" }, + { 0x0b5c, "\x0b\x21\x0b\x3c" }, + { 0x0b5d, "\x0b\x22\x0b\x3c" }, + { 0x0b94, "\x0b\x92\x0b\xd7" }, + { 0x0bca, "\x0b\xc6\x0b\xbe" }, + { 0x0bcb, "\x0b\xc7\x0b\xbe" }, + { 0x0bcc, "\x0b\xc6\x0b\xd7" }, + { 0x0c48, "\x0c\x46\x0c\x56" }, + { 0x0cc0, "\x0c\xbf\x0c\xd5" }, + { 0x0cc7, "\x0c\xc6\x0c\xd5" }, + { 0x0cc8, "\x0c\xc6\x0c\xd6" }, + { 0x0cca, "\x0c\xc6\x0c\xc2" }, + { 0x0ccb, "\x0c\xca\x0c\xd5" }, + { 0x0d4a, "\x0d\x46\x0d\x3e" }, + { 0x0d4b, "\x0d\x47\x0d\x3e" }, + { 0x0d4c, "\x0d\x46\x0d\x57" }, + { 0x0dda, "\x0d\xd9\x0d\xca" }, + { 0x0ddc, "\x0d\xd9\x0d\xcf" }, + { 0x0ddd, "\x0d\xdc\x0d\xca" }, + { 0x0dde, "\x0d\xd9\x0d\xdf" }, + { 0x0f43, "\x0f\x42\x0f\xb7" }, + { 0x0f4d, "\x0f\x4c\x0f\xb7" }, + { 0x0f52, "\x0f\x51\x0f\xb7" }, + { 0x0f57, "\x0f\x56\x0f\xb7" }, + { 0x0f5c, "\x0f\x5b\x0f\xb7" }, + { 0x0f69, "\x0f\x40\x0f\xb5" }, + { 0x0f73, "\x0f\x71\x0f\x72" }, + { 0x0f75, "\x0f\x71\x0f\x74" }, + { 0x0f76, "\x0f\xb2\x0f\x80" }, + { 0x0f78, "\x0f\xb3\x0f\x80" }, + { 0x0f81, "\x0f\x71\x0f\x80" }, + { 0x0f93, "\x0f\x92\x0f\xb7" }, + { 0x0f9d, "\x0f\x9c\x0f\xb7" }, + { 0x0fa2, "\x0f\xa1\x0f\xb7" }, + { 0x0fa7, "\x0f\xa6\x0f\xb7" }, + { 0x0fac, "\x0f\xab\x0f\xb7" }, + { 0x0fb9, "\x0f\x90\x0f\xb5" }, + { 0x1026, "\x10\x25\x10\x2e" }, + { 0x1e00, "\x00\x41\x03\x25" }, + { 0x1e01, "\x00\x61\x03\x25" }, + { 0x1e02, "\x00\x42\x03\x07" }, + { 0x1e03, "\x00\x62\x03\x07" }, + { 0x1e04, "\x00\x42\x03\x23" }, + { 0x1e05, "\x00\x62\x03\x23" }, + { 0x1e06, "\x00\x42\x03\x31" }, + { 0x1e07, "\x00\x62\x03\x31" }, + { 0x1e08, "\x00\xc7\x03\x01" }, + { 0x1e09, "\x00\xe7\x03\x01" }, + { 0x1e0a, "\x00\x44\x03\x07" }, + { 0x1e0b, "\x00\x64\x03\x07" }, + { 0x1e0c, "\x00\x44\x03\x23" }, + { 0x1e0d, "\x00\x64\x03\x23" }, + { 0x1e0e, "\x00\x44\x03\x31" }, + { 0x1e0f, "\x00\x64\x03\x31" }, + { 0x1e10, "\x00\x44\x03\x27" }, + { 0x1e11, "\x00\x64\x03\x27" }, + { 0x1e12, "\x00\x44\x03\x2d" }, + { 0x1e13, "\x00\x64\x03\x2d" }, + { 0x1e14, "\x01\x12\x03\x00" }, + { 0x1e15, "\x01\x13\x03\x00" }, + { 0x1e16, "\x01\x12\x03\x01" }, + { 0x1e17, "\x01\x13\x03\x01" }, + { 0x1e18, "\x00\x45\x03\x2d" }, + { 0x1e19, "\x00\x65\x03\x2d" }, + { 0x1e1a, "\x00\x45\x03\x30" }, + { 0x1e1b, "\x00\x65\x03\x30" }, + { 0x1e1c, "\x02\x28\x03\x06" }, + { 0x1e1d, "\x02\x29\x03\x06" }, + { 0x1e1e, "\x00\x46\x03\x07" }, + { 0x1e1f, "\x00\x66\x03\x07" }, + { 0x1e20, "\x00\x47\x03\x04" }, + { 0x1e21, "\x00\x67\x03\x04" }, + { 0x1e22, "\x00\x48\x03\x07" }, + { 0x1e23, "\x00\x68\x03\x07" }, + { 0x1e24, "\x00\x48\x03\x23" }, + { 0x1e25, "\x00\x68\x03\x23" }, + { 0x1e26, "\x00\x48\x03\x08" }, + { 0x1e27, "\x00\x68\x03\x08" }, + { 0x1e28, "\x00\x48\x03\x27" }, + { 0x1e29, "\x00\x68\x03\x27" }, + { 0x1e2a, "\x00\x48\x03\x2e" }, + { 0x1e2b, "\x00\x68\x03\x2e" }, + { 0x1e2c, "\x00\x49\x03\x30" }, + { 0x1e2d, "\x00\x69\x03\x30" }, + { 0x1e2e, "\x00\xcf\x03\x01" }, + { 0x1e2f, "\x00\xef\x03\x01" }, + { 0x1e30, "\x00\x4b\x03\x01" }, + { 0x1e31, "\x00\x6b\x03\x01" }, + { 0x1e32, "\x00\x4b\x03\x23" }, + { 0x1e33, "\x00\x6b\x03\x23" }, + { 0x1e34, "\x00\x4b\x03\x31" }, + { 0x1e35, "\x00\x6b\x03\x31" }, + { 0x1e36, "\x00\x4c\x03\x23" }, + { 0x1e37, "\x00\x6c\x03\x23" }, + { 0x1e38, "\x1e\x36\x03\x04" }, + { 0x1e39, "\x1e\x37\x03\x04" }, + { 0x1e3a, "\x00\x4c\x03\x31" }, + { 0x1e3b, "\x00\x6c\x03\x31" }, + { 0x1e3c, "\x00\x4c\x03\x2d" }, + { 0x1e3d, "\x00\x6c\x03\x2d" }, + { 0x1e3e, "\x00\x4d\x03\x01" }, + { 0x1e3f, "\x00\x6d\x03\x01" }, + { 0x1e40, "\x00\x4d\x03\x07" }, + { 0x1e41, "\x00\x6d\x03\x07" }, + { 0x1e42, "\x00\x4d\x03\x23" }, + { 0x1e43, "\x00\x6d\x03\x23" }, + { 0x1e44, "\x00\x4e\x03\x07" }, + { 0x1e45, "\x00\x6e\x03\x07" }, + { 0x1e46, "\x00\x4e\x03\x23" }, + { 0x1e47, "\x00\x6e\x03\x23" }, + { 0x1e48, "\x00\x4e\x03\x31" }, + { 0x1e49, "\x00\x6e\x03\x31" }, + { 0x1e4a, "\x00\x4e\x03\x2d" }, + { 0x1e4b, "\x00\x6e\x03\x2d" }, + { 0x1e4c, "\x00\xd5\x03\x01" }, + { 0x1e4d, "\x00\xf5\x03\x01" }, + { 0x1e4e, "\x00\xd5\x03\x08" }, + { 0x1e4f, "\x00\xf5\x03\x08" }, + { 0x1e50, "\x01\x4c\x03\x00" }, + { 0x1e51, "\x01\x4d\x03\x00" }, + { 0x1e52, "\x01\x4c\x03\x01" }, + { 0x1e53, "\x01\x4d\x03\x01" }, + { 0x1e54, "\x00\x50\x03\x01" }, + { 0x1e55, "\x00\x70\x03\x01" }, + { 0x1e56, "\x00\x50\x03\x07" }, + { 0x1e57, "\x00\x70\x03\x07" }, + { 0x1e58, "\x00\x52\x03\x07" }, + { 0x1e59, "\x00\x72\x03\x07" }, + { 0x1e5a, "\x00\x52\x03\x23" }, + { 0x1e5b, "\x00\x72\x03\x23" }, + { 0x1e5c, "\x1e\x5a\x03\x04" }, + { 0x1e5d, "\x1e\x5b\x03\x04" }, + { 0x1e5e, "\x00\x52\x03\x31" }, + { 0x1e5f, "\x00\x72\x03\x31" }, + { 0x1e60, "\x00\x53\x03\x07" }, + { 0x1e61, "\x00\x73\x03\x07" }, + { 0x1e62, "\x00\x53\x03\x23" }, + { 0x1e63, "\x00\x73\x03\x23" }, + { 0x1e64, "\x01\x5a\x03\x07" }, + { 0x1e65, "\x01\x5b\x03\x07" }, + { 0x1e66, "\x01\x60\x03\x07" }, + { 0x1e67, "\x01\x61\x03\x07" }, + { 0x1e68, "\x1e\x62\x03\x07" }, + { 0x1e69, "\x1e\x63\x03\x07" }, + { 0x1e6a, "\x00\x54\x03\x07" }, + { 0x1e6b, "\x00\x74\x03\x07" }, + { 0x1e6c, "\x00\x54\x03\x23" }, + { 0x1e6d, "\x00\x74\x03\x23" }, + { 0x1e6e, "\x00\x54\x03\x31" }, + { 0x1e6f, "\x00\x74\x03\x31" }, + { 0x1e70, "\x00\x54\x03\x2d" }, + { 0x1e71, "\x00\x74\x03\x2d" }, + { 0x1e72, "\x00\x55\x03\x24" }, + { 0x1e73, "\x00\x75\x03\x24" }, + { 0x1e74, "\x00\x55\x03\x30" }, + { 0x1e75, "\x00\x75\x03\x30" }, + { 0x1e76, "\x00\x55\x03\x2d" }, + { 0x1e77, "\x00\x75\x03\x2d" }, + { 0x1e78, "\x01\x68\x03\x01" }, + { 0x1e79, "\x01\x69\x03\x01" }, + { 0x1e7a, "\x01\x6a\x03\x08" }, + { 0x1e7b, "\x01\x6b\x03\x08" }, + { 0x1e7c, "\x00\x56\x03\x03" }, + { 0x1e7d, "\x00\x76\x03\x03" }, + { 0x1e7e, "\x00\x56\x03\x23" }, + { 0x1e7f, "\x00\x76\x03\x23" }, + { 0x1e80, "\x00\x57\x03\x00" }, + { 0x1e81, "\x00\x77\x03\x00" }, + { 0x1e82, "\x00\x57\x03\x01" }, + { 0x1e83, "\x00\x77\x03\x01" }, + { 0x1e84, "\x00\x57\x03\x08" }, + { 0x1e85, "\x00\x77\x03\x08" }, + { 0x1e86, "\x00\x57\x03\x07" }, + { 0x1e87, "\x00\x77\x03\x07" }, + { 0x1e88, "\x00\x57\x03\x23" }, + { 0x1e89, "\x00\x77\x03\x23" }, + { 0x1e8a, "\x00\x58\x03\x07" }, + { 0x1e8b, "\x00\x78\x03\x07" }, + { 0x1e8c, "\x00\x58\x03\x08" }, + { 0x1e8d, "\x00\x78\x03\x08" }, + { 0x1e8e, "\x00\x59\x03\x07" }, + { 0x1e8f, "\x00\x79\x03\x07" }, + { 0x1e90, "\x00\x5a\x03\x02" }, + { 0x1e91, "\x00\x7a\x03\x02" }, + { 0x1e92, "\x00\x5a\x03\x23" }, + { 0x1e93, "\x00\x7a\x03\x23" }, + { 0x1e94, "\x00\x5a\x03\x31" }, + { 0x1e95, "\x00\x7a\x03\x31" }, + { 0x1e96, "\x00\x68\x03\x31" }, + { 0x1e97, "\x00\x74\x03\x08" }, + { 0x1e98, "\x00\x77\x03\x0a" }, + { 0x1e99, "\x00\x79\x03\x0a" }, + { 0x1e9b, "\x01\x7f\x03\x07" }, + { 0x1ea0, "\x00\x41\x03\x23" }, + { 0x1ea1, "\x00\x61\x03\x23" }, + { 0x1ea2, "\x00\x41\x03\x09" }, + { 0x1ea3, "\x00\x61\x03\x09" }, + { 0x1ea4, "\x00\xc2\x03\x01" }, + { 0x1ea5, "\x00\xe2\x03\x01" }, + { 0x1ea6, "\x00\xc2\x03\x00" }, + { 0x1ea7, "\x00\xe2\x03\x00" }, + { 0x1ea8, "\x00\xc2\x03\x09" }, + { 0x1ea9, "\x00\xe2\x03\x09" }, + { 0x1eaa, "\x00\xc2\x03\x03" }, + { 0x1eab, "\x00\xe2\x03\x03" }, + { 0x1eac, "\x1e\xa0\x03\x02" }, + { 0x1ead, "\x1e\xa1\x03\x02" }, + { 0x1eae, "\x01\x02\x03\x01" }, + { 0x1eaf, "\x01\x03\x03\x01" }, + { 0x1eb0, "\x01\x02\x03\x00" }, + { 0x1eb1, "\x01\x03\x03\x00" }, + { 0x1eb2, "\x01\x02\x03\x09" }, + { 0x1eb3, "\x01\x03\x03\x09" }, + { 0x1eb4, "\x01\x02\x03\x03" }, + { 0x1eb5, "\x01\x03\x03\x03" }, + { 0x1eb6, "\x1e\xa0\x03\x06" }, + { 0x1eb7, "\x1e\xa1\x03\x06" }, + { 0x1eb8, "\x00\x45\x03\x23" }, + { 0x1eb9, "\x00\x65\x03\x23" }, + { 0x1eba, "\x00\x45\x03\x09" }, + { 0x1ebb, "\x00\x65\x03\x09" }, + { 0x1ebc, "\x00\x45\x03\x03" }, + { 0x1ebd, "\x00\x65\x03\x03" }, + { 0x1ebe, "\x00\xca\x03\x01" }, + { 0x1ebf, "\x00\xea\x03\x01" }, + { 0x1ec0, "\x00\xca\x03\x00" }, + { 0x1ec1, "\x00\xea\x03\x00" }, + { 0x1ec2, "\x00\xca\x03\x09" }, + { 0x1ec3, "\x00\xea\x03\x09" }, + { 0x1ec4, "\x00\xca\x03\x03" }, + { 0x1ec5, "\x00\xea\x03\x03" }, + { 0x1ec6, "\x1e\xb8\x03\x02" }, + { 0x1ec7, "\x1e\xb9\x03\x02" }, + { 0x1ec8, "\x00\x49\x03\x09" }, + { 0x1ec9, "\x00\x69\x03\x09" }, + { 0x1eca, "\x00\x49\x03\x23" }, + { 0x1ecb, "\x00\x69\x03\x23" }, + { 0x1ecc, "\x00\x4f\x03\x23" }, + { 0x1ecd, "\x00\x6f\x03\x23" }, + { 0x1ece, "\x00\x4f\x03\x09" }, + { 0x1ecf, "\x00\x6f\x03\x09" }, + { 0x1ed0, "\x00\xd4\x03\x01" }, + { 0x1ed1, "\x00\xf4\x03\x01" }, + { 0x1ed2, "\x00\xd4\x03\x00" }, + { 0x1ed3, "\x00\xf4\x03\x00" }, + { 0x1ed4, "\x00\xd4\x03\x09" }, + { 0x1ed5, "\x00\xf4\x03\x09" }, + { 0x1ed6, "\x00\xd4\x03\x03" }, + { 0x1ed7, "\x00\xf4\x03\x03" }, + { 0x1ed8, "\x1e\xcc\x03\x02" }, + { 0x1ed9, "\x1e\xcd\x03\x02" }, + { 0x1eda, "\x01\xa0\x03\x01" }, + { 0x1edb, "\x01\xa1\x03\x01" }, + { 0x1edc, "\x01\xa0\x03\x00" }, + { 0x1edd, "\x01\xa1\x03\x00" }, + { 0x1ede, "\x01\xa0\x03\x09" }, + { 0x1edf, "\x01\xa1\x03\x09" }, + { 0x1ee0, "\x01\xa0\x03\x03" }, + { 0x1ee1, "\x01\xa1\x03\x03" }, + { 0x1ee2, "\x01\xa0\x03\x23" }, + { 0x1ee3, "\x01\xa1\x03\x23" }, + { 0x1ee4, "\x00\x55\x03\x23" }, + { 0x1ee5, "\x00\x75\x03\x23" }, + { 0x1ee6, "\x00\x55\x03\x09" }, + { 0x1ee7, "\x00\x75\x03\x09" }, + { 0x1ee8, "\x01\xaf\x03\x01" }, + { 0x1ee9, "\x01\xb0\x03\x01" }, + { 0x1eea, "\x01\xaf\x03\x00" }, + { 0x1eeb, "\x01\xb0\x03\x00" }, + { 0x1eec, "\x01\xaf\x03\x09" }, + { 0x1eed, "\x01\xb0\x03\x09" }, + { 0x1eee, "\x01\xaf\x03\x03" }, + { 0x1eef, "\x01\xb0\x03\x03" }, + { 0x1ef0, "\x01\xaf\x03\x23" }, + { 0x1ef1, "\x01\xb0\x03\x23" }, + { 0x1ef2, "\x00\x59\x03\x00" }, + { 0x1ef3, "\x00\x79\x03\x00" }, + { 0x1ef4, "\x00\x59\x03\x23" }, + { 0x1ef5, "\x00\x79\x03\x23" }, + { 0x1ef6, "\x00\x59\x03\x09" }, + { 0x1ef7, "\x00\x79\x03\x09" }, + { 0x1ef8, "\x00\x59\x03\x03" }, + { 0x1ef9, "\x00\x79\x03\x03" }, + { 0x1f00, "\x03\xb1\x03\x13" }, + { 0x1f01, "\x03\xb1\x03\x14" }, + { 0x1f02, "\x1f\x00\x03\x00" }, + { 0x1f03, "\x1f\x01\x03\x00" }, + { 0x1f04, "\x1f\x00\x03\x01" }, + { 0x1f05, "\x1f\x01\x03\x01" }, + { 0x1f06, "\x1f\x00\x03\x42" }, + { 0x1f07, "\x1f\x01\x03\x42" }, + { 0x1f08, "\x03\x91\x03\x13" }, + { 0x1f09, "\x03\x91\x03\x14" }, + { 0x1f0a, "\x1f\x08\x03\x00" }, + { 0x1f0b, "\x1f\x09\x03\x00" }, + { 0x1f0c, "\x1f\x08\x03\x01" }, + { 0x1f0d, "\x1f\x09\x03\x01" }, + { 0x1f0e, "\x1f\x08\x03\x42" }, + { 0x1f0f, "\x1f\x09\x03\x42" }, + { 0x1f10, "\x03\xb5\x03\x13" }, + { 0x1f11, "\x03\xb5\x03\x14" }, + { 0x1f12, "\x1f\x10\x03\x00" }, + { 0x1f13, "\x1f\x11\x03\x00" }, + { 0x1f14, "\x1f\x10\x03\x01" }, + { 0x1f15, "\x1f\x11\x03\x01" }, + { 0x1f18, "\x03\x95\x03\x13" }, + { 0x1f19, "\x03\x95\x03\x14" }, + { 0x1f1a, "\x1f\x18\x03\x00" }, + { 0x1f1b, "\x1f\x19\x03\x00" }, + { 0x1f1c, "\x1f\x18\x03\x01" }, + { 0x1f1d, "\x1f\x19\x03\x01" }, + { 0x1f20, "\x03\xb7\x03\x13" }, + { 0x1f21, "\x03\xb7\x03\x14" }, + { 0x1f22, "\x1f\x20\x03\x00" }, + { 0x1f23, "\x1f\x21\x03\x00" }, + { 0x1f24, "\x1f\x20\x03\x01" }, + { 0x1f25, "\x1f\x21\x03\x01" }, + { 0x1f26, "\x1f\x20\x03\x42" }, + { 0x1f27, "\x1f\x21\x03\x42" }, + { 0x1f28, "\x03\x97\x03\x13" }, + { 0x1f29, "\x03\x97\x03\x14" }, + { 0x1f2a, "\x1f\x28\x03\x00" }, + { 0x1f2b, "\x1f\x29\x03\x00" }, + { 0x1f2c, "\x1f\x28\x03\x01" }, + { 0x1f2d, "\x1f\x29\x03\x01" }, + { 0x1f2e, "\x1f\x28\x03\x42" }, + { 0x1f2f, "\x1f\x29\x03\x42" }, + { 0x1f30, "\x03\xb9\x03\x13" }, + { 0x1f31, "\x03\xb9\x03\x14" }, + { 0x1f32, "\x1f\x30\x03\x00" }, + { 0x1f33, "\x1f\x31\x03\x00" }, + { 0x1f34, "\x1f\x30\x03\x01" }, + { 0x1f35, "\x1f\x31\x03\x01" }, + { 0x1f36, "\x1f\x30\x03\x42" }, + { 0x1f37, "\x1f\x31\x03\x42" }, + { 0x1f38, "\x03\x99\x03\x13" }, + { 0x1f39, "\x03\x99\x03\x14" }, + { 0x1f3a, "\x1f\x38\x03\x00" }, + { 0x1f3b, "\x1f\x39\x03\x00" }, + { 0x1f3c, "\x1f\x38\x03\x01" }, + { 0x1f3d, "\x1f\x39\x03\x01" }, + { 0x1f3e, "\x1f\x38\x03\x42" }, + { 0x1f3f, "\x1f\x39\x03\x42" }, + { 0x1f40, "\x03\xbf\x03\x13" }, + { 0x1f41, "\x03\xbf\x03\x14" }, + { 0x1f42, "\x1f\x40\x03\x00" }, + { 0x1f43, "\x1f\x41\x03\x00" }, + { 0x1f44, "\x1f\x40\x03\x01" }, + { 0x1f45, "\x1f\x41\x03\x01" }, + { 0x1f48, "\x03\x9f\x03\x13" }, + { 0x1f49, "\x03\x9f\x03\x14" }, + { 0x1f4a, "\x1f\x48\x03\x00" }, + { 0x1f4b, "\x1f\x49\x03\x00" }, + { 0x1f4c, "\x1f\x48\x03\x01" }, + { 0x1f4d, "\x1f\x49\x03\x01" }, + { 0x1f50, "\x03\xc5\x03\x13" }, + { 0x1f51, "\x03\xc5\x03\x14" }, + { 0x1f52, "\x1f\x50\x03\x00" }, + { 0x1f53, "\x1f\x51\x03\x00" }, + { 0x1f54, "\x1f\x50\x03\x01" }, + { 0x1f55, "\x1f\x51\x03\x01" }, + { 0x1f56, "\x1f\x50\x03\x42" }, + { 0x1f57, "\x1f\x51\x03\x42" }, + { 0x1f59, "\x03\xa5\x03\x14" }, + { 0x1f5b, "\x1f\x59\x03\x00" }, + { 0x1f5d, "\x1f\x59\x03\x01" }, + { 0x1f5f, "\x1f\x59\x03\x42" }, + { 0x1f60, "\x03\xc9\x03\x13" }, + { 0x1f61, "\x03\xc9\x03\x14" }, + { 0x1f62, "\x1f\x60\x03\x00" }, + { 0x1f63, "\x1f\x61\x03\x00" }, + { 0x1f64, "\x1f\x60\x03\x01" }, + { 0x1f65, "\x1f\x61\x03\x01" }, + { 0x1f66, "\x1f\x60\x03\x42" }, + { 0x1f67, "\x1f\x61\x03\x42" }, + { 0x1f68, "\x03\xa9\x03\x13" }, + { 0x1f69, "\x03\xa9\x03\x14" }, + { 0x1f6a, "\x1f\x68\x03\x00" }, + { 0x1f6b, "\x1f\x69\x03\x00" }, + { 0x1f6c, "\x1f\x68\x03\x01" }, + { 0x1f6d, "\x1f\x69\x03\x01" }, + { 0x1f6e, "\x1f\x68\x03\x42" }, + { 0x1f6f, "\x1f\x69\x03\x42" }, + { 0x1f70, "\x03\xb1\x03\x00" }, + { 0x1f71, "\x03\xac" }, + { 0x1f72, "\x03\xb5\x03\x00" }, + { 0x1f73, "\x03\xad" }, + { 0x1f74, "\x03\xb7\x03\x00" }, + { 0x1f75, "\x03\xae" }, + { 0x1f76, "\x03\xb9\x03\x00" }, + { 0x1f77, "\x03\xaf" }, + { 0x1f78, "\x03\xbf\x03\x00" }, + { 0x1f79, "\x03\xcc" }, + { 0x1f7a, "\x03\xc5\x03\x00" }, + { 0x1f7b, "\x03\xcd" }, + { 0x1f7c, "\x03\xc9\x03\x00" }, + { 0x1f7d, "\x03\xce" }, + { 0x1f80, "\x1f\x00\x03\x45" }, + { 0x1f81, "\x1f\x01\x03\x45" }, + { 0x1f82, "\x1f\x02\x03\x45" }, + { 0x1f83, "\x1f\x03\x03\x45" }, + { 0x1f84, "\x1f\x04\x03\x45" }, + { 0x1f85, "\x1f\x05\x03\x45" }, + { 0x1f86, "\x1f\x06\x03\x45" }, + { 0x1f87, "\x1f\x07\x03\x45" }, + { 0x1f88, "\x1f\x08\x03\x45" }, + { 0x1f89, "\x1f\x09\x03\x45" }, + { 0x1f8a, "\x1f\x0a\x03\x45" }, + { 0x1f8b, "\x1f\x0b\x03\x45" }, + { 0x1f8c, "\x1f\x0c\x03\x45" }, + { 0x1f8d, "\x1f\x0d\x03\x45" }, + { 0x1f8e, "\x1f\x0e\x03\x45" }, + { 0x1f8f, "\x1f\x0f\x03\x45" }, + { 0x1f90, "\x1f\x20\x03\x45" }, + { 0x1f91, "\x1f\x21\x03\x45" }, + { 0x1f92, "\x1f\x22\x03\x45" }, + { 0x1f93, "\x1f\x23\x03\x45" }, + { 0x1f94, "\x1f\x24\x03\x45" }, + { 0x1f95, "\x1f\x25\x03\x45" }, + { 0x1f96, "\x1f\x26\x03\x45" }, + { 0x1f97, "\x1f\x27\x03\x45" }, + { 0x1f98, "\x1f\x28\x03\x45" }, + { 0x1f99, "\x1f\x29\x03\x45" }, + { 0x1f9a, "\x1f\x2a\x03\x45" }, + { 0x1f9b, "\x1f\x2b\x03\x45" }, + { 0x1f9c, "\x1f\x2c\x03\x45" }, + { 0x1f9d, "\x1f\x2d\x03\x45" }, + { 0x1f9e, "\x1f\x2e\x03\x45" }, + { 0x1f9f, "\x1f\x2f\x03\x45" }, + { 0x1fa0, "\x1f\x60\x03\x45" }, + { 0x1fa1, "\x1f\x61\x03\x45" }, + { 0x1fa2, "\x1f\x62\x03\x45" }, + { 0x1fa3, "\x1f\x63\x03\x45" }, + { 0x1fa4, "\x1f\x64\x03\x45" }, + { 0x1fa5, "\x1f\x65\x03\x45" }, + { 0x1fa6, "\x1f\x66\x03\x45" }, + { 0x1fa7, "\x1f\x67\x03\x45" }, + { 0x1fa8, "\x1f\x68\x03\x45" }, + { 0x1fa9, "\x1f\x69\x03\x45" }, + { 0x1faa, "\x1f\x6a\x03\x45" }, + { 0x1fab, "\x1f\x6b\x03\x45" }, + { 0x1fac, "\x1f\x6c\x03\x45" }, + { 0x1fad, "\x1f\x6d\x03\x45" }, + { 0x1fae, "\x1f\x6e\x03\x45" }, + { 0x1faf, "\x1f\x6f\x03\x45" }, + { 0x1fb0, "\x03\xb1\x03\x06" }, + { 0x1fb1, "\x03\xb1\x03\x04" }, + { 0x1fb2, "\x1f\x70\x03\x45" }, + { 0x1fb3, "\x03\xb1\x03\x45" }, + { 0x1fb4, "\x03\xac\x03\x45" }, + { 0x1fb6, "\x03\xb1\x03\x42" }, + { 0x1fb7, "\x1f\xb6\x03\x45" }, + { 0x1fb8, "\x03\x91\x03\x06" }, + { 0x1fb9, "\x03\x91\x03\x04" }, + { 0x1fba, "\x03\x91\x03\x00" }, + { 0x1fbb, "\x03\x86" }, + { 0x1fbc, "\x03\x91\x03\x45" }, + { 0x1fbe, "\x03\xb9" }, + { 0x1fc1, "\x00\xa8\x03\x42" }, + { 0x1fc2, "\x1f\x74\x03\x45" }, + { 0x1fc3, "\x03\xb7\x03\x45" }, + { 0x1fc4, "\x03\xae\x03\x45" }, + { 0x1fc6, "\x03\xb7\x03\x42" }, + { 0x1fc7, "\x1f\xc6\x03\x45" }, + { 0x1fc8, "\x03\x95\x03\x00" }, + { 0x1fc9, "\x03\x88" }, + { 0x1fca, "\x03\x97\x03\x00" }, + { 0x1fcb, "\x03\x89" }, + { 0x1fcc, "\x03\x97\x03\x45" }, + { 0x1fcd, "\x1f\xbf\x03\x00" }, + { 0x1fce, "\x1f\xbf\x03\x01" }, + { 0x1fcf, "\x1f\xbf\x03\x42" }, + { 0x1fd0, "\x03\xb9\x03\x06" }, + { 0x1fd1, "\x03\xb9\x03\x04" }, + { 0x1fd2, "\x03\xca\x03\x00" }, + { 0x1fd3, "\x03\x90" }, + { 0x1fd6, "\x03\xb9\x03\x42" }, + { 0x1fd7, "\x03\xca\x03\x42" }, + { 0x1fd8, "\x03\x99\x03\x06" }, + { 0x1fd9, "\x03\x99\x03\x04" }, + { 0x1fda, "\x03\x99\x03\x00" }, + { 0x1fdb, "\x03\x8a" }, + { 0x1fdd, "\x1f\xfe\x03\x00" }, + { 0x1fde, "\x1f\xfe\x03\x01" }, + { 0x1fdf, "\x1f\xfe\x03\x42" }, + { 0x1fe0, "\x03\xc5\x03\x06" }, + { 0x1fe1, "\x03\xc5\x03\x04" }, + { 0x1fe2, "\x03\xcb\x03\x00" }, + { 0x1fe3, "\x03\xb0" }, + { 0x1fe4, "\x03\xc1\x03\x13" }, + { 0x1fe5, "\x03\xc1\x03\x14" }, + { 0x1fe6, "\x03\xc5\x03\x42" }, + { 0x1fe7, "\x03\xcb\x03\x42" }, + { 0x1fe8, "\x03\xa5\x03\x06" }, + { 0x1fe9, "\x03\xa5\x03\x04" }, + { 0x1fea, "\x03\xa5\x03\x00" }, + { 0x1feb, "\x03\x8e" }, + { 0x1fec, "\x03\xa1\x03\x14" }, + { 0x1fed, "\x00\xa8\x03\x00" }, + { 0x1fee, "\x03\x85" }, + { 0x1fef, "\x00\x60" }, + { 0x1ff2, "\x1f\x7c\x03\x45" }, + { 0x1ff3, "\x03\xc9\x03\x45" }, + { 0x1ff4, "\x03\xce\x03\x45" }, + { 0x1ff6, "\x03\xc9\x03\x42" }, + { 0x1ff7, "\x1f\xf6\x03\x45" }, + { 0x1ff8, "\x03\x9f\x03\x00" }, + { 0x1ff9, "\x03\x8c" }, + { 0x1ffa, "\x03\xa9\x03\x00" }, + { 0x1ffb, "\x03\x8f" }, + { 0x1ffc, "\x03\xa9\x03\x45" }, + { 0x1ffd, "\x00\xb4" }, + { 0x2000, "\x20\x02" }, + { 0x2001, "\x20\x03" }, + { 0x2126, "\x03\xa9" }, + { 0x212a, "\x00\x4b" }, + { 0x212b, "\x00\xc5" }, + { 0x219a, "\x21\x90\x03\x38" }, + { 0x219b, "\x21\x92\x03\x38" }, + { 0x21ae, "\x21\x94\x03\x38" }, + { 0x21cd, "\x21\xd0\x03\x38" }, + { 0x21ce, "\x21\xd4\x03\x38" }, + { 0x21cf, "\x21\xd2\x03\x38" }, + { 0x2204, "\x22\x03\x03\x38" }, + { 0x2209, "\x22\x08\x03\x38" }, + { 0x220c, "\x22\x0b\x03\x38" }, + { 0x2224, "\x22\x23\x03\x38" }, + { 0x2226, "\x22\x25\x03\x38" }, + { 0x2241, "\x22\x3c\x03\x38" }, + { 0x2244, "\x22\x43\x03\x38" }, + { 0x2247, "\x22\x45\x03\x38" }, + { 0x2249, "\x22\x48\x03\x38" }, + { 0x2260, "\x00\x3d\x03\x38" }, + { 0x2262, "\x22\x61\x03\x38" }, + { 0x226d, "\x22\x4d\x03\x38" }, + { 0x226e, "\x00\x3c\x03\x38" }, + { 0x226f, "\x00\x3e\x03\x38" }, + { 0x2270, "\x22\x64\x03\x38" }, + { 0x2271, "\x22\x65\x03\x38" }, + { 0x2274, "\x22\x72\x03\x38" }, + { 0x2275, "\x22\x73\x03\x38" }, + { 0x2278, "\x22\x76\x03\x38" }, + { 0x2279, "\x22\x77\x03\x38" }, + { 0x2280, "\x22\x7a\x03\x38" }, + { 0x2281, "\x22\x7b\x03\x38" }, + { 0x2284, "\x22\x82\x03\x38" }, + { 0x2285, "\x22\x83\x03\x38" }, + { 0x2288, "\x22\x86\x03\x38" }, + { 0x2289, "\x22\x87\x03\x38" }, + { 0x22ac, "\x22\xa2\x03\x38" }, + { 0x22ad, "\x22\xa8\x03\x38" }, + { 0x22ae, "\x22\xa9\x03\x38" }, + { 0x22af, "\x22\xab\x03\x38" }, + { 0x22e0, "\x22\x7c\x03\x38" }, + { 0x22e1, "\x22\x7d\x03\x38" }, + { 0x22e2, "\x22\x91\x03\x38" }, + { 0x22e3, "\x22\x92\x03\x38" }, + { 0x22ea, "\x22\xb2\x03\x38" }, + { 0x22eb, "\x22\xb3\x03\x38" }, + { 0x22ec, "\x22\xb4\x03\x38" }, + { 0x22ed, "\x22\xb5\x03\x38" }, + { 0x2329, "\x30\x08" }, + { 0x232a, "\x30\x09" }, + { 0x304c, "\x30\x4b\x30\x99" }, + { 0x304e, "\x30\x4d\x30\x99" }, + { 0x3050, "\x30\x4f\x30\x99" }, + { 0x3052, "\x30\x51\x30\x99" }, + { 0x3054, "\x30\x53\x30\x99" }, + { 0x3056, "\x30\x55\x30\x99" }, + { 0x3058, "\x30\x57\x30\x99" }, + { 0x305a, "\x30\x59\x30\x99" }, + { 0x305c, "\x30\x5b\x30\x99" }, + { 0x305e, "\x30\x5d\x30\x99" }, + { 0x3060, "\x30\x5f\x30\x99" }, + { 0x3062, "\x30\x61\x30\x99" }, + { 0x3065, "\x30\x64\x30\x99" }, + { 0x3067, "\x30\x66\x30\x99" }, + { 0x3069, "\x30\x68\x30\x99" }, + { 0x3070, "\x30\x6f\x30\x99" }, + { 0x3071, "\x30\x6f\x30\x9a" }, + { 0x3073, "\x30\x72\x30\x99" }, + { 0x3074, "\x30\x72\x30\x9a" }, + { 0x3076, "\x30\x75\x30\x99" }, + { 0x3077, "\x30\x75\x30\x9a" }, + { 0x3079, "\x30\x78\x30\x99" }, + { 0x307a, "\x30\x78\x30\x9a" }, + { 0x307c, "\x30\x7b\x30\x99" }, + { 0x307d, "\x30\x7b\x30\x9a" }, + { 0x3094, "\x30\x46\x30\x99" }, + { 0x309e, "\x30\x9d\x30\x99" }, + { 0x30ac, "\x30\xab\x30\x99" }, + { 0x30ae, "\x30\xad\x30\x99" }, + { 0x30b0, "\x30\xaf\x30\x99" }, + { 0x30b2, "\x30\xb1\x30\x99" }, + { 0x30b4, "\x30\xb3\x30\x99" }, + { 0x30b6, "\x30\xb5\x30\x99" }, + { 0x30b8, "\x30\xb7\x30\x99" }, + { 0x30ba, "\x30\xb9\x30\x99" }, + { 0x30bc, "\x30\xbb\x30\x99" }, + { 0x30be, "\x30\xbd\x30\x99" }, + { 0x30c0, "\x30\xbf\x30\x99" }, + { 0x30c2, "\x30\xc1\x30\x99" }, + { 0x30c5, "\x30\xc4\x30\x99" }, + { 0x30c7, "\x30\xc6\x30\x99" }, + { 0x30c9, "\x30\xc8\x30\x99" }, + { 0x30d0, "\x30\xcf\x30\x99" }, + { 0x30d1, "\x30\xcf\x30\x9a" }, + { 0x30d3, "\x30\xd2\x30\x99" }, + { 0x30d4, "\x30\xd2\x30\x9a" }, + { 0x30d6, "\x30\xd5\x30\x99" }, + { 0x30d7, "\x30\xd5\x30\x9a" }, + { 0x30d9, "\x30\xd8\x30\x99" }, + { 0x30da, "\x30\xd8\x30\x9a" }, + { 0x30dc, "\x30\xdb\x30\x99" }, + { 0x30dd, "\x30\xdb\x30\x9a" }, + { 0x30f4, "\x30\xa6\x30\x99" }, + { 0x30f7, "\x30\xef\x30\x99" }, + { 0x30f8, "\x30\xf0\x30\x99" }, + { 0x30f9, "\x30\xf1\x30\x99" }, + { 0x30fa, "\x30\xf2\x30\x99" }, + { 0x30fe, "\x30\xfd\x30\x99" }, + { 0xf900, "\x8c\x48" }, + { 0xf901, "\x66\xf4" }, + { 0xf902, "\x8e\xca" }, + { 0xf903, "\x8c\xc8" }, + { 0xf904, "\x6e\xd1" }, + { 0xf905, "\x4e\x32" }, + { 0xf906, "\x53\xe5" }, + { 0xf907, "\x9f\x9c" }, + { 0xf908, "\x9f\x9c" }, + { 0xf909, "\x59\x51" }, + { 0xf90a, "\x91\xd1" }, + { 0xf90b, "\x55\x87" }, + { 0xf90c, "\x59\x48" }, + { 0xf90d, "\x61\xf6" }, + { 0xf90e, "\x76\x69" }, + { 0xf90f, "\x7f\x85" }, + { 0xf910, "\x86\x3f" }, + { 0xf911, "\x87\xba" }, + { 0xf912, "\x88\xf8" }, + { 0xf913, "\x90\x8f" }, + { 0xf914, "\x6a\x02" }, + { 0xf915, "\x6d\x1b" }, + { 0xf916, "\x70\xd9" }, + { 0xf917, "\x73\xde" }, + { 0xf918, "\x84\x3d" }, + { 0xf919, "\x91\x6a" }, + { 0xf91a, "\x99\xf1" }, + { 0xf91b, "\x4e\x82" }, + { 0xf91c, "\x53\x75" }, + { 0xf91d, "\x6b\x04" }, + { 0xf91e, "\x72\x1b" }, + { 0xf91f, "\x86\x2d" }, + { 0xf920, "\x9e\x1e" }, + { 0xf921, "\x5d\x50" }, + { 0xf922, "\x6f\xeb" }, + { 0xf923, "\x85\xcd" }, + { 0xf924, "\x89\x64" }, + { 0xf925, "\x62\xc9" }, + { 0xf926, "\x81\xd8" }, + { 0xf927, "\x88\x1f" }, + { 0xf928, "\x5e\xca" }, + { 0xf929, "\x67\x17" }, + { 0xf92a, "\x6d\x6a" }, + { 0xf92b, "\x72\xfc" }, + { 0xf92c, "\x90\xce" }, + { 0xf92d, "\x4f\x86" }, + { 0xf92e, "\x51\xb7" }, + { 0xf92f, "\x52\xde" }, + { 0xf930, "\x64\xc4" }, + { 0xf931, "\x6a\xd3" }, + { 0xf932, "\x72\x10" }, + { 0xf933, "\x76\xe7" }, + { 0xf934, "\x80\x01" }, + { 0xf935, "\x86\x06" }, + { 0xf936, "\x86\x5c" }, + { 0xf937, "\x8d\xef" }, + { 0xf938, "\x97\x32" }, + { 0xf939, "\x9b\x6f" }, + { 0xf93a, "\x9d\xfa" }, + { 0xf93b, "\x78\x8c" }, + { 0xf93c, "\x79\x7f" }, + { 0xf93d, "\x7d\xa0" }, + { 0xf93e, "\x83\xc9" }, + { 0xf93f, "\x93\x04" }, + { 0xf940, "\x9e\x7f" }, + { 0xf941, "\x8a\xd6" }, + { 0xf942, "\x58\xdf" }, + { 0xf943, "\x5f\x04" }, + { 0xf944, "\x7c\x60" }, + { 0xf945, "\x80\x7e" }, + { 0xf946, "\x72\x62" }, + { 0xf947, "\x78\xca" }, + { 0xf948, "\x8c\xc2" }, + { 0xf949, "\x96\xf7" }, + { 0xf94a, "\x58\xd8" }, + { 0xf94b, "\x5c\x62" }, + { 0xf94c, "\x6a\x13" }, + { 0xf94d, "\x6d\xda" }, + { 0xf94e, "\x6f\x0f" }, + { 0xf94f, "\x7d\x2f" }, + { 0xf950, "\x7e\x37" }, + { 0xf951, "\x96\xfb" }, + { 0xf952, "\x52\xd2" }, + { 0xf953, "\x80\x8b" }, + { 0xf954, "\x51\xdc" }, + { 0xf955, "\x51\xcc" }, + { 0xf956, "\x7a\x1c" }, + { 0xf957, "\x7d\xbe" }, + { 0xf958, "\x83\xf1" }, + { 0xf959, "\x96\x75" }, + { 0xf95a, "\x8b\x80" }, + { 0xf95b, "\x62\xcf" }, + { 0xf95c, "\x6a\x02" }, + { 0xf95d, "\x8a\xfe" }, + { 0xf95e, "\x4e\x39" }, + { 0xf95f, "\x5b\xe7" }, + { 0xf960, "\x60\x12" }, + { 0xf961, "\x73\x87" }, + { 0xf962, "\x75\x70" }, + { 0xf963, "\x53\x17" }, + { 0xf964, "\x78\xfb" }, + { 0xf965, "\x4f\xbf" }, + { 0xf966, "\x5f\xa9" }, + { 0xf967, "\x4e\x0d" }, + { 0xf968, "\x6c\xcc" }, + { 0xf969, "\x65\x78" }, + { 0xf96a, "\x7d\x22" }, + { 0xf96b, "\x53\xc3" }, + { 0xf96c, "\x58\x5e" }, + { 0xf96d, "\x77\x01" }, + { 0xf96e, "\x84\x49" }, + { 0xf96f, "\x8a\xaa" }, + { 0xf970, "\x6b\xba" }, + { 0xf971, "\x8f\xb0" }, + { 0xf972, "\x6c\x88" }, + { 0xf973, "\x62\xfe" }, + { 0xf974, "\x82\xe5" }, + { 0xf975, "\x63\xa0" }, + { 0xf976, "\x75\x65" }, + { 0xf977, "\x4e\xae" }, + { 0xf978, "\x51\x69" }, + { 0xf979, "\x51\xc9" }, + { 0xf97a, "\x68\x81" }, + { 0xf97b, "\x7c\xe7" }, + { 0xf97c, "\x82\x6f" }, + { 0xf97d, "\x8a\xd2" }, + { 0xf97e, "\x91\xcf" }, + { 0xf97f, "\x52\xf5" }, + { 0xf980, "\x54\x42" }, + { 0xf981, "\x59\x73" }, + { 0xf982, "\x5e\xec" }, + { 0xf983, "\x65\xc5" }, + { 0xf984, "\x6f\xfe" }, + { 0xf985, "\x79\x2a" }, + { 0xf986, "\x95\xad" }, + { 0xf987, "\x9a\x6a" }, + { 0xf988, "\x9e\x97" }, + { 0xf989, "\x9e\xce" }, + { 0xf98a, "\x52\x9b" }, + { 0xf98b, "\x66\xc6" }, + { 0xf98c, "\x6b\x77" }, + { 0xf98d, "\x8f\x62" }, + { 0xf98e, "\x5e\x74" }, + { 0xf98f, "\x61\x90" }, + { 0xf990, "\x62\x00" }, + { 0xf991, "\x64\x9a" }, + { 0xf992, "\x6f\x23" }, + { 0xf993, "\x71\x49" }, + { 0xf994, "\x74\x89" }, + { 0xf995, "\x79\xca" }, + { 0xf996, "\x7d\xf4" }, + { 0xf997, "\x80\x6f" }, + { 0xf998, "\x8f\x26" }, + { 0xf999, "\x84\xee" }, + { 0xf99a, "\x90\x23" }, + { 0xf99b, "\x93\x4a" }, + { 0xf99c, "\x52\x17" }, + { 0xf99d, "\x52\xa3" }, + { 0xf99e, "\x54\xbd" }, + { 0xf99f, "\x70\xc8" }, + { 0xf9a0, "\x88\xc2" }, + { 0xf9a1, "\x8a\xaa" }, + { 0xf9a2, "\x5e\xc9" }, + { 0xf9a3, "\x5f\xf5" }, + { 0xf9a4, "\x63\x7b" }, + { 0xf9a5, "\x6b\xae" }, + { 0xf9a6, "\x7c\x3e" }, + { 0xf9a7, "\x73\x75" }, + { 0xf9a8, "\x4e\xe4" }, + { 0xf9a9, "\x56\xf9" }, + { 0xf9aa, "\x5b\xe7" }, + { 0xf9ab, "\x5d\xba" }, + { 0xf9ac, "\x60\x1c" }, + { 0xf9ad, "\x73\xb2" }, + { 0xf9ae, "\x74\x69" }, + { 0xf9af, "\x7f\x9a" }, + { 0xf9b0, "\x80\x46" }, + { 0xf9b1, "\x92\x34" }, + { 0xf9b2, "\x96\xf6" }, + { 0xf9b3, "\x97\x48" }, + { 0xf9b4, "\x98\x18" }, + { 0xf9b5, "\x4f\x8b" }, + { 0xf9b6, "\x79\xae" }, + { 0xf9b7, "\x91\xb4" }, + { 0xf9b8, "\x96\xb8" }, + { 0xf9b9, "\x60\xe1" }, + { 0xf9ba, "\x4e\x86" }, + { 0xf9bb, "\x50\xda" }, + { 0xf9bc, "\x5b\xee" }, + { 0xf9bd, "\x5c\x3f" }, + { 0xf9be, "\x65\x99" }, + { 0xf9bf, "\x6a\x02" }, + { 0xf9c0, "\x71\xce" }, + { 0xf9c1, "\x76\x42" }, + { 0xf9c2, "\x84\xfc" }, + { 0xf9c3, "\x90\x7c" }, + { 0xf9c4, "\x9f\x8d" }, + { 0xf9c5, "\x66\x88" }, + { 0xf9c6, "\x96\x2e" }, + { 0xf9c7, "\x52\x89" }, + { 0xf9c8, "\x67\x7b" }, + { 0xf9c9, "\x67\xf3" }, + { 0xf9ca, "\x6d\x41" }, + { 0xf9cb, "\x6e\x9c" }, + { 0xf9cc, "\x74\x09" }, + { 0xf9cd, "\x75\x59" }, + { 0xf9ce, "\x78\x6b" }, + { 0xf9cf, "\x7d\x10" }, + { 0xf9d0, "\x98\x5e" }, + { 0xf9d1, "\x51\x6d" }, + { 0xf9d2, "\x62\x2e" }, + { 0xf9d3, "\x96\x78" }, + { 0xf9d4, "\x50\x2b" }, + { 0xf9d5, "\x5d\x19" }, + { 0xf9d6, "\x6d\xea" }, + { 0xf9d7, "\x8f\x2a" }, + { 0xf9d8, "\x5f\x8b" }, + { 0xf9d9, "\x61\x44" }, + { 0xf9da, "\x68\x17" }, + { 0xf9db, "\x73\x87" }, + { 0xf9dc, "\x96\x86" }, + { 0xf9dd, "\x52\x29" }, + { 0xf9de, "\x54\x0f" }, + { 0xf9df, "\x5c\x65" }, + { 0xf9e0, "\x66\x13" }, + { 0xf9e1, "\x67\x4e" }, + { 0xf9e2, "\x68\xa8" }, + { 0xf9e3, "\x6c\xe5" }, + { 0xf9e4, "\x74\x06" }, + { 0xf9e5, "\x75\xe2" }, + { 0xf9e6, "\x7f\x79" }, + { 0xf9e7, "\x88\xcf" }, + { 0xf9e8, "\x88\xe1" }, + { 0xf9e9, "\x91\xcc" }, + { 0xf9ea, "\x96\xe2" }, + { 0xf9eb, "\x53\x3f" }, + { 0xf9ec, "\x6e\xba" }, + { 0xf9ed, "\x54\x1d" }, + { 0xf9ee, "\x71\xd0" }, + { 0xf9ef, "\x74\x98" }, + { 0xf9f0, "\x85\xfa" }, + { 0xf9f1, "\x96\xa3" }, + { 0xf9f2, "\x9c\x57" }, + { 0xf9f3, "\x9e\x9f" }, + { 0xf9f4, "\x67\x97" }, + { 0xf9f5, "\x6d\xcb" }, + { 0xf9f6, "\x81\xe8" }, + { 0xf9f7, "\x7a\xcb" }, + { 0xf9f8, "\x7b\x20" }, + { 0xf9f9, "\x7c\x92" }, + { 0xf9fa, "\x72\xc0" }, + { 0xf9fb, "\x70\x99" }, + { 0xf9fc, "\x8b\x58" }, + { 0xf9fd, "\x4e\xc0" }, + { 0xf9fe, "\x83\x36" }, + { 0xf9ff, "\x52\x3a" }, + { 0xfa00, "\x52\x07" }, + { 0xfa01, "\x5e\xa6" }, + { 0xfa02, "\x62\xd3" }, + { 0xfa03, "\x7c\xd6" }, + { 0xfa04, "\x5b\x85" }, + { 0xfa05, "\x6d\x1e" }, + { 0xfa06, "\x66\xb4" }, + { 0xfa07, "\x8f\x3b" }, + { 0xfa08, "\x88\x4c" }, + { 0xfa09, "\x96\x4d" }, + { 0xfa0a, "\x89\x8b" }, + { 0xfa0b, "\x5e\xd3" }, + { 0xfa0c, "\x51\x40" }, + { 0xfa0d, "\x55\xc0" }, + { 0xfa10, "\x58\x5a" }, + { 0xfa12, "\x66\x74" }, + { 0xfa15, "\x51\xde" }, + { 0xfa16, "\x73\x2a" }, + { 0xfa17, "\x76\xca" }, + { 0xfa18, "\x79\x3c" }, + { 0xfa19, "\x79\x5e" }, + { 0xfa1a, "\x79\x65" }, + { 0xfa1b, "\x79\x8f" }, + { 0xfa1c, "\x97\x56" }, + { 0xfa1d, "\x7c\xbe" }, + { 0xfa1e, "\x7f\xbd" }, + { 0xfa20, "\x86\x12" }, + { 0xfa22, "\x8a\xf8" }, + { 0xfa25, "\x90\x38" }, + { 0xfa26, "\x90\xfd" }, + { 0xfa2a, "\x98\xef" }, + { 0xfa2b, "\x98\xfc" }, + { 0xfa2c, "\x99\x28" }, + { 0xfa2d, "\x9d\xb4" }, + { 0xfb1d, "\x05\xd9\x05\xb4" }, + { 0xfb1f, "\x05\xf2\x05\xb7" }, + { 0xfb2a, "\x05\xe9\x05\xc1" }, + { 0xfb2b, "\x05\xe9\x05\xc2" }, + { 0xfb2c, "\xfb\x49\x05\xc1" }, + { 0xfb2d, "\xfb\x49\x05\xc2" }, + { 0xfb2e, "\x05\xd0\x05\xb7" }, + { 0xfb2f, "\x05\xd0\x05\xb8" }, + { 0xfb30, "\x05\xd0\x05\xbc" }, + { 0xfb31, "\x05\xd1\x05\xbc" }, + { 0xfb32, "\x05\xd2\x05\xbc" }, + { 0xfb33, "\x05\xd3\x05\xbc" }, + { 0xfb34, "\x05\xd4\x05\xbc" }, + { 0xfb35, "\x05\xd5\x05\xbc" }, + { 0xfb36, "\x05\xd6\x05\xbc" }, + { 0xfb38, "\x05\xd8\x05\xbc" }, + { 0xfb39, "\x05\xd9\x05\xbc" }, + { 0xfb3a, "\x05\xda\x05\xbc" }, + { 0xfb3b, "\x05\xdb\x05\xbc" }, + { 0xfb3c, "\x05\xdc\x05\xbc" }, + { 0xfb3e, "\x05\xde\x05\xbc" }, + { 0xfb40, "\x05\xe0\x05\xbc" }, + { 0xfb41, "\x05\xe1\x05\xbc" }, + { 0xfb43, "\x05\xe3\x05\xbc" }, + { 0xfb44, "\x05\xe4\x05\xbc" }, + { 0xfb46, "\x05\xe6\x05\xbc" }, + { 0xfb47, "\x05\xe7\x05\xbc" }, + { 0xfb48, "\x05\xe8\x05\xbc" }, + { 0xfb49, "\x05\xe9\x05\xbc" }, + { 0xfb4a, "\x05\xea\x05\xbc" }, + { 0xfb4b, "\x05\xd5\x05\xb9" }, + { 0xfb4c, "\x05\xd1\x05\xbf" }, + { 0xfb4d, "\x05\xdb\x05\xbf" }, + { 0xfb4e, "\x05\xe4\x05\xbf" } +}; + +static const decomp_entry full_decomposition[] = +{ + { 0x00a0, "\x00\x20" }, + { 0x00a8, "\x00\x20\x03\x08" }, + { 0x00aa, "\x00\x61" }, + { 0x00af, "\x00\x20\x03\x04" }, + { 0x00b2, "\x00\x32" }, + { 0x00b3, "\x00\x33" }, + { 0x00b4, "\x00\x20\x03\x01" }, + { 0x00b5, "\x03\xbc" }, + { 0x00b8, "\x00\x20\x03\x27" }, + { 0x00b9, "\x00\x31" }, + { 0x00ba, "\x00\x6f" }, + { 0x00bc, "\x00\x31\x20\x44\x00\x34" }, + { 0x00bd, "\x00\x31\x20\x44\x00\x32" }, + { 0x00be, "\x00\x33\x20\x44\x00\x34" }, + { 0x0132, "\x00\x49\x00\x4a" }, + { 0x0133, "\x00\x69\x00\x6a" }, + { 0x013f, "\x00\x4c\x00\xb7" }, + { 0x0140, "\x00\x6c\x00\xb7" }, + { 0x0149, "\x02\xbc\x00\x6e" }, + { 0x017f, "\x00\x73" }, + { 0x01c4, "\x00\x44\x01\x7d" }, + { 0x01c5, "\x00\x44\x01\x7e" }, + { 0x01c6, "\x00\x64\x01\x7e" }, + { 0x01c7, "\x00\x4c\x00\x4a" }, + { 0x01c8, "\x00\x4c\x00\x6a" }, + { 0x01c9, "\x00\x6c\x00\x6a" }, + { 0x01ca, "\x00\x4e\x00\x4a" }, + { 0x01cb, "\x00\x4e\x00\x6a" }, + { 0x01cc, "\x00\x6e\x00\x6a" }, + { 0x01f1, "\x00\x44\x00\x5a" }, + { 0x01f2, "\x00\x44\x00\x7a" }, + { 0x01f3, "\x00\x64\x00\x7a" }, + { 0x02b0, "\x00\x68" }, + { 0x02b1, "\x02\x66" }, + { 0x02b2, "\x00\x6a" }, + { 0x02b3, "\x00\x72" }, + { 0x02b4, "\x02\x79" }, + { 0x02b5, "\x02\x7b" }, + { 0x02b6, "\x02\x81" }, + { 0x02b7, "\x00\x77" }, + { 0x02b8, "\x00\x79" }, + { 0x02d8, "\x00\x20\x03\x06" }, + { 0x02d9, "\x00\x20\x03\x07" }, + { 0x02da, "\x00\x20\x03\x0a" }, + { 0x02db, "\x00\x20\x03\x28" }, + { 0x02dc, "\x00\x20\x03\x03" }, + { 0x02dd, "\x00\x20\x03\x0b" }, + { 0x02e0, "\x02\x63" }, + { 0x02e1, "\x00\x6c" }, + { 0x02e2, "\x00\x73" }, + { 0x02e3, "\x00\x78" }, + { 0x02e4, "\x02\x95" }, + { 0x037a, "\x00\x20\x03\x45" }, + { 0x0384, "\x00\x20\x03\x01" }, + { 0x03d0, "\x03\xb2" }, + { 0x03d1, "\x03\xb8" }, + { 0x03d2, "\x03\xa5" }, + { 0x03d5, "\x03\xc6" }, + { 0x03d6, "\x03\xc0" }, + { 0x03f0, "\x03\xba" }, + { 0x03f1, "\x03\xc1" }, + { 0x03f2, "\x03\xc2" }, + { 0x0587, "\x05\x65\x05\x82" }, + { 0x0675, "\x06\x27\x06\x74" }, + { 0x0676, "\x06\x48\x06\x74" }, + { 0x0677, "\x06\xc7\x06\x74" }, + { 0x0678, "\x06\x4a\x06\x74" }, + { 0x0e33, "\x0e\x4d\x0e\x32" }, + { 0x0eb3, "\x0e\xcd\x0e\xb2" }, + { 0x0edc, "\x0e\xab\x0e\x99" }, + { 0x0edd, "\x0e\xab\x0e\xa1" }, + { 0x0f0c, "\x0f\x0b" }, + { 0x0f77, "\x0f\xb2\x0f\x81" }, + { 0x0f79, "\x0f\xb3\x0f\x81" }, + { 0x1e9a, "\x00\x61\x02\xbe" }, + { 0x1fbd, "\x00\x20\x03\x13" }, + { 0x1fbf, "\x00\x20\x03\x13" }, + { 0x1fc0, "\x00\x20\x03\x42" }, + { 0x1ffe, "\x00\x20\x03\x14" }, + { 0x2002, "\x00\x20" }, + { 0x2003, "\x00\x20" }, + { 0x2004, "\x00\x20" }, + { 0x2005, "\x00\x20" }, + { 0x2006, "\x00\x20" }, + { 0x2007, "\x00\x20" }, + { 0x2008, "\x00\x20" }, + { 0x2009, "\x00\x20" }, + { 0x200a, "\x00\x20" }, + { 0x2011, "\x20\x10" }, + { 0x2017, "\x00\x20\x03\x33" }, + { 0x2024, "\x00\x2e" }, + { 0x2025, "\x00\x2e\x00\x2e" }, + { 0x2026, "\x00\x2e\x00\x2e\x00\x2e" }, + { 0x202f, "\x00\x20" }, + { 0x2033, "\x20\x32\x20\x32" }, + { 0x2034, "\x20\x32\x20\x32\x20\x32" }, + { 0x2036, "\x20\x35\x20\x35" }, + { 0x2037, "\x20\x35\x20\x35\x20\x35" }, + { 0x203c, "\x00\x21\x00\x21" }, + { 0x203e, "\x00\x20\x03\x05" }, + { 0x2048, "\x00\x3f\x00\x21" }, + { 0x2049, "\x00\x21\x00\x3f" }, + { 0x2070, "\x00\x30" }, + { 0x2074, "\x00\x34" }, + { 0x2075, "\x00\x35" }, + { 0x2076, "\x00\x36" }, + { 0x2077, "\x00\x37" }, + { 0x2078, "\x00\x38" }, + { 0x2079, "\x00\x39" }, + { 0x207a, "\x00\x2b" }, + { 0x207b, "\x22\x12" }, + { 0x207c, "\x00\x3d" }, + { 0x207d, "\x00\x28" }, + { 0x207e, "\x00\x29" }, + { 0x207f, "\x00\x6e" }, + { 0x2080, "\x00\x30" }, + { 0x2081, "\x00\x31" }, + { 0x2082, "\x00\x32" }, + { 0x2083, "\x00\x33" }, + { 0x2084, "\x00\x34" }, + { 0x2085, "\x00\x35" }, + { 0x2086, "\x00\x36" }, + { 0x2087, "\x00\x37" }, + { 0x2088, "\x00\x38" }, + { 0x2089, "\x00\x39" }, + { 0x208a, "\x00\x2b" }, + { 0x208b, "\x22\x12" }, + { 0x208c, "\x00\x3d" }, + { 0x208d, "\x00\x28" }, + { 0x208e, "\x00\x29" }, + { 0x20a8, "\x00\x52\x00\x73" }, + { 0x2100, "\x00\x61\x00\x2f\x00\x63" }, + { 0x2101, "\x00\x61\x00\x2f\x00\x73" }, + { 0x2102, "\x00\x43" }, + { 0x2103, "\x00\xb0\x00\x43" }, + { 0x2105, "\x00\x63\x00\x2f\x00\x6f" }, + { 0x2106, "\x00\x63\x00\x2f\x00\x75" }, + { 0x2107, "\x01\x90" }, + { 0x2109, "\x00\xb0\x00\x46" }, + { 0x210a, "\x00\x67" }, + { 0x210b, "\x00\x48" }, + { 0x210c, "\x00\x48" }, + { 0x210d, "\x00\x48" }, + { 0x210e, "\x00\x68" }, + { 0x210f, "\x01\x27" }, + { 0x2110, "\x00\x49" }, + { 0x2111, "\x00\x49" }, + { 0x2112, "\x00\x4c" }, + { 0x2113, "\x00\x6c" }, + { 0x2115, "\x00\x4e" }, + { 0x2116, "\x00\x4e\x00\x6f" }, + { 0x2119, "\x00\x50" }, + { 0x211a, "\x00\x51" }, + { 0x211b, "\x00\x52" }, + { 0x211c, "\x00\x52" }, + { 0x211d, "\x00\x52" }, + { 0x2120, "\x00\x53\x00\x4d" }, + { 0x2121, "\x00\x54\x00\x45\x00\x4c" }, + { 0x2122, "\x00\x54\x00\x4d" }, + { 0x2124, "\x00\x5a" }, + { 0x2128, "\x00\x5a" }, + { 0x212c, "\x00\x42" }, + { 0x212d, "\x00\x43" }, + { 0x212f, "\x00\x65" }, + { 0x2130, "\x00\x45" }, + { 0x2131, "\x00\x46" }, + { 0x2133, "\x00\x4d" }, + { 0x2134, "\x00\x6f" }, + { 0x2135, "\x05\xd0" }, + { 0x2136, "\x05\xd1" }, + { 0x2137, "\x05\xd2" }, + { 0x2138, "\x05\xd3" }, + { 0x2139, "\x00\x69" }, + { 0x2153, "\x00\x31\x20\x44\x00\x33" }, + { 0x2154, "\x00\x32\x20\x44\x00\x33" }, + { 0x2155, "\x00\x31\x20\x44\x00\x35" }, + { 0x2156, "\x00\x32\x20\x44\x00\x35" }, + { 0x2157, "\x00\x33\x20\x44\x00\x35" }, + { 0x2158, "\x00\x34\x20\x44\x00\x35" }, + { 0x2159, "\x00\x31\x20\x44\x00\x36" }, + { 0x215a, "\x00\x35\x20\x44\x00\x36" }, + { 0x215b, "\x00\x31\x20\x44\x00\x38" }, + { 0x215c, "\x00\x33\x20\x44\x00\x38" }, + { 0x215d, "\x00\x35\x20\x44\x00\x38" }, + { 0x215e, "\x00\x37\x20\x44\x00\x38" }, + { 0x215f, "\x00\x31\x20\x44" }, + { 0x2160, "\x00\x49" }, + { 0x2161, "\x00\x49\x00\x49" }, + { 0x2162, "\x00\x49\x00\x49\x00\x49" }, + { 0x2163, "\x00\x49\x00\x56" }, + { 0x2164, "\x00\x56" }, + { 0x2165, "\x00\x56\x00\x49" }, + { 0x2166, "\x00\x56\x00\x49\x00\x49" }, + { 0x2167, "\x00\x56\x00\x49\x00\x49\x00\x49" }, + { 0x2168, "\x00\x49\x00\x58" }, + { 0x2169, "\x00\x58" }, + { 0x216a, "\x00\x58\x00\x49" }, + { 0x216b, "\x00\x58\x00\x49\x00\x49" }, + { 0x216c, "\x00\x4c" }, + { 0x216d, "\x00\x43" }, + { 0x216e, "\x00\x44" }, + { 0x216f, "\x00\x4d" }, + { 0x2170, "\x00\x69" }, + { 0x2171, "\x00\x69\x00\x69" }, + { 0x2172, "\x00\x69\x00\x69\x00\x69" }, + { 0x2173, "\x00\x69\x00\x76" }, + { 0x2174, "\x00\x76" }, + { 0x2175, "\x00\x76\x00\x69" }, + { 0x2176, "\x00\x76\x00\x69\x00\x69" }, + { 0x2177, "\x00\x76\x00\x69\x00\x69\x00\x69" }, + { 0x2178, "\x00\x69\x00\x78" }, + { 0x2179, "\x00\x78" }, + { 0x217a, "\x00\x78\x00\x69" }, + { 0x217b, "\x00\x78\x00\x69\x00\x69" }, + { 0x217c, "\x00\x6c" }, + { 0x217d, "\x00\x63" }, + { 0x217e, "\x00\x64" }, + { 0x217f, "\x00\x6d" }, + { 0x222c, "\x22\x2b\x22\x2b" }, + { 0x222d, "\x22\x2b\x22\x2b\x22\x2b" }, + { 0x222f, "\x22\x2e\x22\x2e" }, + { 0x2230, "\x22\x2e\x22\x2e\x22\x2e" }, + { 0x2460, "\x00\x31" }, + { 0x2461, "\x00\x32" }, + { 0x2462, "\x00\x33" }, + { 0x2463, "\x00\x34" }, + { 0x2464, "\x00\x35" }, + { 0x2465, "\x00\x36" }, + { 0x2466, "\x00\x37" }, + { 0x2467, "\x00\x38" }, + { 0x2468, "\x00\x39" }, + { 0x2469, "\x00\x31\x00\x30" }, + { 0x246a, "\x00\x31\x00\x31" }, + { 0x246b, "\x00\x31\x00\x32" }, + { 0x246c, "\x00\x31\x00\x33" }, + { 0x246d, "\x00\x31\x00\x34" }, + { 0x246e, "\x00\x31\x00\x35" }, + { 0x246f, "\x00\x31\x00\x36" }, + { 0x2470, "\x00\x31\x00\x37" }, + { 0x2471, "\x00\x31\x00\x38" }, + { 0x2472, "\x00\x31\x00\x39" }, + { 0x2473, "\x00\x32\x00\x30" }, + { 0x2474, "\x00\x28\x00\x31\x00\x29" }, + { 0x2475, "\x00\x28\x00\x32\x00\x29" }, + { 0x2476, "\x00\x28\x00\x33\x00\x29" }, + { 0x2477, "\x00\x28\x00\x34\x00\x29" }, + { 0x2478, "\x00\x28\x00\x35\x00\x29" }, + { 0x2479, "\x00\x28\x00\x36\x00\x29" }, + { 0x247a, "\x00\x28\x00\x37\x00\x29" }, + { 0x247b, "\x00\x28\x00\x38\x00\x29" }, + { 0x247c, "\x00\x28\x00\x39\x00\x29" }, + { 0x247d, "\x00\x28\x00\x31\x00\x30\x00\x29" }, + { 0x247e, "\x00\x28\x00\x31\x00\x31\x00\x29" }, + { 0x247f, "\x00\x28\x00\x31\x00\x32\x00\x29" }, + { 0x2480, "\x00\x28\x00\x31\x00\x33\x00\x29" }, + { 0x2481, "\x00\x28\x00\x31\x00\x34\x00\x29" }, + { 0x2482, "\x00\x28\x00\x31\x00\x35\x00\x29" }, + { 0x2483, "\x00\x28\x00\x31\x00\x36\x00\x29" }, + { 0x2484, "\x00\x28\x00\x31\x00\x37\x00\x29" }, + { 0x2485, "\x00\x28\x00\x31\x00\x38\x00\x29" }, + { 0x2486, "\x00\x28\x00\x31\x00\x39\x00\x29" }, + { 0x2487, "\x00\x28\x00\x32\x00\x30\x00\x29" }, + { 0x2488, "\x00\x31\x00\x2e" }, + { 0x2489, "\x00\x32\x00\x2e" }, + { 0x248a, "\x00\x33\x00\x2e" }, + { 0x248b, "\x00\x34\x00\x2e" }, + { 0x248c, "\x00\x35\x00\x2e" }, + { 0x248d, "\x00\x36\x00\x2e" }, + { 0x248e, "\x00\x37\x00\x2e" }, + { 0x248f, "\x00\x38\x00\x2e" }, + { 0x2490, "\x00\x39\x00\x2e" }, + { 0x2491, "\x00\x31\x00\x30\x00\x2e" }, + { 0x2492, "\x00\x31\x00\x31\x00\x2e" }, + { 0x2493, "\x00\x31\x00\x32\x00\x2e" }, + { 0x2494, "\x00\x31\x00\x33\x00\x2e" }, + { 0x2495, "\x00\x31\x00\x34\x00\x2e" }, + { 0x2496, "\x00\x31\x00\x35\x00\x2e" }, + { 0x2497, "\x00\x31\x00\x36\x00\x2e" }, + { 0x2498, "\x00\x31\x00\x37\x00\x2e" }, + { 0x2499, "\x00\x31\x00\x38\x00\x2e" }, + { 0x249a, "\x00\x31\x00\x39\x00\x2e" }, + { 0x249b, "\x00\x32\x00\x30\x00\x2e" }, + { 0x249c, "\x00\x28\x00\x61\x00\x29" }, + { 0x249d, "\x00\x28\x00\x62\x00\x29" }, + { 0x249e, "\x00\x28\x00\x63\x00\x29" }, + { 0x249f, "\x00\x28\x00\x64\x00\x29" }, + { 0x24a0, "\x00\x28\x00\x65\x00\x29" }, + { 0x24a1, "\x00\x28\x00\x66\x00\x29" }, + { 0x24a2, "\x00\x28\x00\x67\x00\x29" }, + { 0x24a3, "\x00\x28\x00\x68\x00\x29" }, + { 0x24a4, "\x00\x28\x00\x69\x00\x29" }, + { 0x24a5, "\x00\x28\x00\x6a\x00\x29" }, + { 0x24a6, "\x00\x28\x00\x6b\x00\x29" }, + { 0x24a7, "\x00\x28\x00\x6c\x00\x29" }, + { 0x24a8, "\x00\x28\x00\x6d\x00\x29" }, + { 0x24a9, "\x00\x28\x00\x6e\x00\x29" }, + { 0x24aa, "\x00\x28\x00\x6f\x00\x29" }, + { 0x24ab, "\x00\x28\x00\x70\x00\x29" }, + { 0x24ac, "\x00\x28\x00\x71\x00\x29" }, + { 0x24ad, "\x00\x28\x00\x72\x00\x29" }, + { 0x24ae, "\x00\x28\x00\x73\x00\x29" }, + { 0x24af, "\x00\x28\x00\x74\x00\x29" }, + { 0x24b0, "\x00\x28\x00\x75\x00\x29" }, + { 0x24b1, "\x00\x28\x00\x76\x00\x29" }, + { 0x24b2, "\x00\x28\x00\x77\x00\x29" }, + { 0x24b3, "\x00\x28\x00\x78\x00\x29" }, + { 0x24b4, "\x00\x28\x00\x79\x00\x29" }, + { 0x24b5, "\x00\x28\x00\x7a\x00\x29" }, + { 0x24b6, "\x00\x41" }, + { 0x24b7, "\x00\x42" }, + { 0x24b8, "\x00\x43" }, + { 0x24b9, "\x00\x44" }, + { 0x24ba, "\x00\x45" }, + { 0x24bb, "\x00\x46" }, + { 0x24bc, "\x00\x47" }, + { 0x24bd, "\x00\x48" }, + { 0x24be, "\x00\x49" }, + { 0x24bf, "\x00\x4a" }, + { 0x24c0, "\x00\x4b" }, + { 0x24c1, "\x00\x4c" }, + { 0x24c2, "\x00\x4d" }, + { 0x24c3, "\x00\x4e" }, + { 0x24c4, "\x00\x4f" }, + { 0x24c5, "\x00\x50" }, + { 0x24c6, "\x00\x51" }, + { 0x24c7, "\x00\x52" }, + { 0x24c8, "\x00\x53" }, + { 0x24c9, "\x00\x54" }, + { 0x24ca, "\x00\x55" }, + { 0x24cb, "\x00\x56" }, + { 0x24cc, "\x00\x57" }, + { 0x24cd, "\x00\x58" }, + { 0x24ce, "\x00\x59" }, + { 0x24cf, "\x00\x5a" }, + { 0x24d0, "\x00\x61" }, + { 0x24d1, "\x00\x62" }, + { 0x24d2, "\x00\x63" }, + { 0x24d3, "\x00\x64" }, + { 0x24d4, "\x00\x65" }, + { 0x24d5, "\x00\x66" }, + { 0x24d6, "\x00\x67" }, + { 0x24d7, "\x00\x68" }, + { 0x24d8, "\x00\x69" }, + { 0x24d9, "\x00\x6a" }, + { 0x24da, "\x00\x6b" }, + { 0x24db, "\x00\x6c" }, + { 0x24dc, "\x00\x6d" }, + { 0x24dd, "\x00\x6e" }, + { 0x24de, "\x00\x6f" }, + { 0x24df, "\x00\x70" }, + { 0x24e0, "\x00\x71" }, + { 0x24e1, "\x00\x72" }, + { 0x24e2, "\x00\x73" }, + { 0x24e3, "\x00\x74" }, + { 0x24e4, "\x00\x75" }, + { 0x24e5, "\x00\x76" }, + { 0x24e6, "\x00\x77" }, + { 0x24e7, "\x00\x78" }, + { 0x24e8, "\x00\x79" }, + { 0x24e9, "\x00\x7a" }, + { 0x24ea, "\x00\x30" }, + { 0x2e9f, "\x6b\xcd" }, + { 0x2ef3, "\x9f\x9f" }, + { 0x2f00, "\x4e\x00" }, + { 0x2f01, "\x4e\x28" }, + { 0x2f02, "\x4e\x36" }, + { 0x2f03, "\x4e\x3f" }, + { 0x2f04, "\x4e\x59" }, + { 0x2f05, "\x4e\x85" }, + { 0x2f06, "\x4e\x8c" }, + { 0x2f07, "\x4e\xa0" }, + { 0x2f08, "\x4e\xba" }, + { 0x2f09, "\x51\x3f" }, + { 0x2f0a, "\x51\x65" }, + { 0x2f0b, "\x51\x6b" }, + { 0x2f0c, "\x51\x82" }, + { 0x2f0d, "\x51\x96" }, + { 0x2f0e, "\x51\xab" }, + { 0x2f0f, "\x51\xe0" }, + { 0x2f10, "\x51\xf5" }, + { 0x2f11, "\x52\x00" }, + { 0x2f12, "\x52\x9b" }, + { 0x2f13, "\x52\xf9" }, + { 0x2f14, "\x53\x15" }, + { 0x2f15, "\x53\x1a" }, + { 0x2f16, "\x53\x38" }, + { 0x2f17, "\x53\x41" }, + { 0x2f18, "\x53\x5c" }, + { 0x2f19, "\x53\x69" }, + { 0x2f1a, "\x53\x82" }, + { 0x2f1b, "\x53\xb6" }, + { 0x2f1c, "\x53\xc8" }, + { 0x2f1d, "\x53\xe3" }, + { 0x2f1e, "\x56\xd7" }, + { 0x2f1f, "\x57\x1f" }, + { 0x2f20, "\x58\xeb" }, + { 0x2f21, "\x59\x02" }, + { 0x2f22, "\x59\x0a" }, + { 0x2f23, "\x59\x15" }, + { 0x2f24, "\x59\x27" }, + { 0x2f25, "\x59\x73" }, + { 0x2f26, "\x5b\x50" }, + { 0x2f27, "\x5b\x80" }, + { 0x2f28, "\x5b\xf8" }, + { 0x2f29, "\x5c\x0f" }, + { 0x2f2a, "\x5c\x22" }, + { 0x2f2b, "\x5c\x38" }, + { 0x2f2c, "\x5c\x6e" }, + { 0x2f2d, "\x5c\x71" }, + { 0x2f2e, "\x5d\xdb" }, + { 0x2f2f, "\x5d\xe5" }, + { 0x2f30, "\x5d\xf1" }, + { 0x2f31, "\x5d\xfe" }, + { 0x2f32, "\x5e\x72" }, + { 0x2f33, "\x5e\x7a" }, + { 0x2f34, "\x5e\x7f" }, + { 0x2f35, "\x5e\xf4" }, + { 0x2f36, "\x5e\xfe" }, + { 0x2f37, "\x5f\x0b" }, + { 0x2f38, "\x5f\x13" }, + { 0x2f39, "\x5f\x50" }, + { 0x2f3a, "\x5f\x61" }, + { 0x2f3b, "\x5f\x73" }, + { 0x2f3c, "\x5f\xc3" }, + { 0x2f3d, "\x62\x08" }, + { 0x2f3e, "\x62\x36" }, + { 0x2f3f, "\x62\x4b" }, + { 0x2f40, "\x65\x2f" }, + { 0x2f41, "\x65\x34" }, + { 0x2f42, "\x65\x87" }, + { 0x2f43, "\x65\x97" }, + { 0x2f44, "\x65\xa4" }, + { 0x2f45, "\x65\xb9" }, + { 0x2f46, "\x65\xe0" }, + { 0x2f47, "\x65\xe5" }, + { 0x2f48, "\x66\xf0" }, + { 0x2f49, "\x67\x08" }, + { 0x2f4a, "\x67\x28" }, + { 0x2f4b, "\x6b\x20" }, + { 0x2f4c, "\x6b\x62" }, + { 0x2f4d, "\x6b\x79" }, + { 0x2f4e, "\x6b\xb3" }, + { 0x2f4f, "\x6b\xcb" }, + { 0x2f50, "\x6b\xd4" }, + { 0x2f51, "\x6b\xdb" }, + { 0x2f52, "\x6c\x0f" }, + { 0x2f53, "\x6c\x14" }, + { 0x2f54, "\x6c\x34" }, + { 0x2f55, "\x70\x6b" }, + { 0x2f56, "\x72\x2a" }, + { 0x2f57, "\x72\x36" }, + { 0x2f58, "\x72\x3b" }, + { 0x2f59, "\x72\x3f" }, + { 0x2f5a, "\x72\x47" }, + { 0x2f5b, "\x72\x59" }, + { 0x2f5c, "\x72\x5b" }, + { 0x2f5d, "\x72\xac" }, + { 0x2f5e, "\x73\x84" }, + { 0x2f5f, "\x73\x89" }, + { 0x2f60, "\x74\xdc" }, + { 0x2f61, "\x74\xe6" }, + { 0x2f62, "\x75\x18" }, + { 0x2f63, "\x75\x1f" }, + { 0x2f64, "\x75\x28" }, + { 0x2f65, "\x75\x30" }, + { 0x2f66, "\x75\x8b" }, + { 0x2f67, "\x75\x92" }, + { 0x2f68, "\x76\x76" }, + { 0x2f69, "\x76\x7d" }, + { 0x2f6a, "\x76\xae" }, + { 0x2f6b, "\x76\xbf" }, + { 0x2f6c, "\x76\xee" }, + { 0x2f6d, "\x77\xdb" }, + { 0x2f6e, "\x77\xe2" }, + { 0x2f6f, "\x77\xf3" }, + { 0x2f70, "\x79\x3a" }, + { 0x2f71, "\x79\xb8" }, + { 0x2f72, "\x79\xbe" }, + { 0x2f73, "\x7a\x74" }, + { 0x2f74, "\x7a\xcb" }, + { 0x2f75, "\x7a\xf9" }, + { 0x2f76, "\x7c\x73" }, + { 0x2f77, "\x7c\xf8" }, + { 0x2f78, "\x7f\x36" }, + { 0x2f79, "\x7f\x51" }, + { 0x2f7a, "\x7f\x8a" }, + { 0x2f7b, "\x7f\xbd" }, + { 0x2f7c, "\x80\x01" }, + { 0x2f7d, "\x80\x0c" }, + { 0x2f7e, "\x80\x12" }, + { 0x2f7f, "\x80\x33" }, + { 0x2f80, "\x80\x7f" }, + { 0x2f81, "\x80\x89" }, + { 0x2f82, "\x81\xe3" }, + { 0x2f83, "\x81\xea" }, + { 0x2f84, "\x81\xf3" }, + { 0x2f85, "\x81\xfc" }, + { 0x2f86, "\x82\x0c" }, + { 0x2f87, "\x82\x1b" }, + { 0x2f88, "\x82\x1f" }, + { 0x2f89, "\x82\x6e" }, + { 0x2f8a, "\x82\x72" }, + { 0x2f8b, "\x82\x78" }, + { 0x2f8c, "\x86\x4d" }, + { 0x2f8d, "\x86\x6b" }, + { 0x2f8e, "\x88\x40" }, + { 0x2f8f, "\x88\x4c" }, + { 0x2f90, "\x88\x63" }, + { 0x2f91, "\x89\x7e" }, + { 0x2f92, "\x89\x8b" }, + { 0x2f93, "\x89\xd2" }, + { 0x2f94, "\x8a\x00" }, + { 0x2f95, "\x8c\x37" }, + { 0x2f96, "\x8c\x46" }, + { 0x2f97, "\x8c\x55" }, + { 0x2f98, "\x8c\x78" }, + { 0x2f99, "\x8c\x9d" }, + { 0x2f9a, "\x8d\x64" }, + { 0x2f9b, "\x8d\x70" }, + { 0x2f9c, "\x8d\xb3" }, + { 0x2f9d, "\x8e\xab" }, + { 0x2f9e, "\x8e\xca" }, + { 0x2f9f, "\x8f\x9b" }, + { 0x2fa0, "\x8f\xb0" }, + { 0x2fa1, "\x8f\xb5" }, + { 0x2fa2, "\x90\x91" }, + { 0x2fa3, "\x91\x49" }, + { 0x2fa4, "\x91\xc6" }, + { 0x2fa5, "\x91\xcc" }, + { 0x2fa6, "\x91\xd1" }, + { 0x2fa7, "\x95\x77" }, + { 0x2fa8, "\x95\x80" }, + { 0x2fa9, "\x96\x1c" }, + { 0x2faa, "\x96\xb6" }, + { 0x2fab, "\x96\xb9" }, + { 0x2fac, "\x96\xe8" }, + { 0x2fad, "\x97\x51" }, + { 0x2fae, "\x97\x5e" }, + { 0x2faf, "\x97\x62" }, + { 0x2fb0, "\x97\x69" }, + { 0x2fb1, "\x97\xcb" }, + { 0x2fb2, "\x97\xed" }, + { 0x2fb3, "\x97\xf3" }, + { 0x2fb4, "\x98\x01" }, + { 0x2fb5, "\x98\xa8" }, + { 0x2fb6, "\x98\xdb" }, + { 0x2fb7, "\x98\xdf" }, + { 0x2fb8, "\x99\x96" }, + { 0x2fb9, "\x99\x99" }, + { 0x2fba, "\x99\xac" }, + { 0x2fbb, "\x9a\xa8" }, + { 0x2fbc, "\x9a\xd8" }, + { 0x2fbd, "\x9a\xdf" }, + { 0x2fbe, "\x9b\x25" }, + { 0x2fbf, "\x9b\x2f" }, + { 0x2fc0, "\x9b\x32" }, + { 0x2fc1, "\x9b\x3c" }, + { 0x2fc2, "\x9b\x5a" }, + { 0x2fc3, "\x9c\xe5" }, + { 0x2fc4, "\x9e\x75" }, + { 0x2fc5, "\x9e\x7f" }, + { 0x2fc6, "\x9e\xa5" }, + { 0x2fc7, "\x9e\xbb" }, + { 0x2fc8, "\x9e\xc3" }, + { 0x2fc9, "\x9e\xcd" }, + { 0x2fca, "\x9e\xd1" }, + { 0x2fcb, "\x9e\xf9" }, + { 0x2fcc, "\x9e\xfd" }, + { 0x2fcd, "\x9f\x0e" }, + { 0x2fce, "\x9f\x13" }, + { 0x2fcf, "\x9f\x20" }, + { 0x2fd0, "\x9f\x3b" }, + { 0x2fd1, "\x9f\x4a" }, + { 0x2fd2, "\x9f\x52" }, + { 0x2fd3, "\x9f\x8d" }, + { 0x2fd4, "\x9f\x9c" }, + { 0x2fd5, "\x9f\xa0" }, + { 0x3000, "\x00\x20" }, + { 0x3036, "\x30\x12" }, + { 0x3038, "\x53\x41" }, + { 0x3039, "\x53\x44" }, + { 0x303a, "\x53\x45" }, + { 0x309b, "\x00\x20\x30\x99" }, + { 0x309c, "\x00\x20\x30\x9a" }, + { 0x3131, "\x11\x00" }, + { 0x3132, "\x11\x01" }, + { 0x3133, "\x11\xaa" }, + { 0x3134, "\x11\x02" }, + { 0x3135, "\x11\xac" }, + { 0x3136, "\x11\xad" }, + { 0x3137, "\x11\x03" }, + { 0x3138, "\x11\x04" }, + { 0x3139, "\x11\x05" }, + { 0x313a, "\x11\xb0" }, + { 0x313b, "\x11\xb1" }, + { 0x313c, "\x11\xb2" }, + { 0x313d, "\x11\xb3" }, + { 0x313e, "\x11\xb4" }, + { 0x313f, "\x11\xb5" }, + { 0x3140, "\x11\x1a" }, + { 0x3141, "\x11\x06" }, + { 0x3142, "\x11\x07" }, + { 0x3143, "\x11\x08" }, + { 0x3144, "\x11\x21" }, + { 0x3145, "\x11\x09" }, + { 0x3146, "\x11\x0a" }, + { 0x3147, "\x11\x0b" }, + { 0x3148, "\x11\x0c" }, + { 0x3149, "\x11\x0d" }, + { 0x314a, "\x11\x0e" }, + { 0x314b, "\x11\x0f" }, + { 0x314c, "\x11\x10" }, + { 0x314d, "\x11\x11" }, + { 0x314e, "\x11\x12" }, + { 0x314f, "\x11\x61" }, + { 0x3150, "\x11\x62" }, + { 0x3151, "\x11\x63" }, + { 0x3152, "\x11\x64" }, + { 0x3153, "\x11\x65" }, + { 0x3154, "\x11\x66" }, + { 0x3155, "\x11\x67" }, + { 0x3156, "\x11\x68" }, + { 0x3157, "\x11\x69" }, + { 0x3158, "\x11\x6a" }, + { 0x3159, "\x11\x6b" }, + { 0x315a, "\x11\x6c" }, + { 0x315b, "\x11\x6d" }, + { 0x315c, "\x11\x6e" }, + { 0x315d, "\x11\x6f" }, + { 0x315e, "\x11\x70" }, + { 0x315f, "\x11\x71" }, + { 0x3160, "\x11\x72" }, + { 0x3161, "\x11\x73" }, + { 0x3162, "\x11\x74" }, + { 0x3163, "\x11\x75" }, + { 0x3164, "\x11\x60" }, + { 0x3165, "\x11\x14" }, + { 0x3166, "\x11\x15" }, + { 0x3167, "\x11\xc7" }, + { 0x3168, "\x11\xc8" }, + { 0x3169, "\x11\xcc" }, + { 0x316a, "\x11\xce" }, + { 0x316b, "\x11\xd3" }, + { 0x316c, "\x11\xd7" }, + { 0x316d, "\x11\xd9" }, + { 0x316e, "\x11\x1c" }, + { 0x316f, "\x11\xdd" }, + { 0x3170, "\x11\xdf" }, + { 0x3171, "\x11\x1d" }, + { 0x3172, "\x11\x1e" }, + { 0x3173, "\x11\x20" }, + { 0x3174, "\x11\x22" }, + { 0x3175, "\x11\x23" }, + { 0x3176, "\x11\x27" }, + { 0x3177, "\x11\x29" }, + { 0x3178, "\x11\x2b" }, + { 0x3179, "\x11\x2c" }, + { 0x317a, "\x11\x2d" }, + { 0x317b, "\x11\x2e" }, + { 0x317c, "\x11\x2f" }, + { 0x317d, "\x11\x32" }, + { 0x317e, "\x11\x36" }, + { 0x317f, "\x11\x40" }, + { 0x3180, "\x11\x47" }, + { 0x3181, "\x11\x4c" }, + { 0x3182, "\x11\xf1" }, + { 0x3183, "\x11\xf2" }, + { 0x3184, "\x11\x57" }, + { 0x3185, "\x11\x58" }, + { 0x3186, "\x11\x59" }, + { 0x3187, "\x11\x84" }, + { 0x3188, "\x11\x85" }, + { 0x3189, "\x11\x88" }, + { 0x318a, "\x11\x91" }, + { 0x318b, "\x11\x92" }, + { 0x318c, "\x11\x94" }, + { 0x318d, "\x11\x9e" }, + { 0x318e, "\x11\xa1" }, + { 0x3192, "\x4e\x00" }, + { 0x3193, "\x4e\x8c" }, + { 0x3194, "\x4e\x09" }, + { 0x3195, "\x56\xdb" }, + { 0x3196, "\x4e\x0a" }, + { 0x3197, "\x4e\x2d" }, + { 0x3198, "\x4e\x0b" }, + { 0x3199, "\x75\x32" }, + { 0x319a, "\x4e\x59" }, + { 0x319b, "\x4e\x19" }, + { 0x319c, "\x4e\x01" }, + { 0x319d, "\x59\x29" }, + { 0x319e, "\x57\x30" }, + { 0x319f, "\x4e\xba" }, + { 0x3200, "\x00\x28\x11\x00\x00\x29" }, + { 0x3201, "\x00\x28\x11\x02\x00\x29" }, + { 0x3202, "\x00\x28\x11\x03\x00\x29" }, + { 0x3203, "\x00\x28\x11\x05\x00\x29" }, + { 0x3204, "\x00\x28\x11\x06\x00\x29" }, + { 0x3205, "\x00\x28\x11\x07\x00\x29" }, + { 0x3206, "\x00\x28\x11\x09\x00\x29" }, + { 0x3207, "\x00\x28\x11\x0b\x00\x29" }, + { 0x3208, "\x00\x28\x11\x0c\x00\x29" }, + { 0x3209, "\x00\x28\x11\x0e\x00\x29" }, + { 0x320a, "\x00\x28\x11\x0f\x00\x29" }, + { 0x320b, "\x00\x28\x11\x10\x00\x29" }, + { 0x320c, "\x00\x28\x11\x11\x00\x29" }, + { 0x320d, "\x00\x28\x11\x12\x00\x29" }, + { 0x320e, "\x00\x28\x11\x00\x11\x61\x00\x29" }, + { 0x320f, "\x00\x28\x11\x02\x11\x61\x00\x29" }, + { 0x3210, "\x00\x28\x11\x03\x11\x61\x00\x29" }, + { 0x3211, "\x00\x28\x11\x05\x11\x61\x00\x29" }, + { 0x3212, "\x00\x28\x11\x06\x11\x61\x00\x29" }, + { 0x3213, "\x00\x28\x11\x07\x11\x61\x00\x29" }, + { 0x3214, "\x00\x28\x11\x09\x11\x61\x00\x29" }, + { 0x3215, "\x00\x28\x11\x0b\x11\x61\x00\x29" }, + { 0x3216, "\x00\x28\x11\x0c\x11\x61\x00\x29" }, + { 0x3217, "\x00\x28\x11\x0e\x11\x61\x00\x29" }, + { 0x3218, "\x00\x28\x11\x0f\x11\x61\x00\x29" }, + { 0x3219, "\x00\x28\x11\x10\x11\x61\x00\x29" }, + { 0x321a, "\x00\x28\x11\x11\x11\x61\x00\x29" }, + { 0x321b, "\x00\x28\x11\x12\x11\x61\x00\x29" }, + { 0x321c, "\x00\x28\x11\x0c\x11\x6e\x00\x29" }, + { 0x3220, "\x00\x28\x4e\x00\x00\x29" }, + { 0x3221, "\x00\x28\x4e\x8c\x00\x29" }, + { 0x3222, "\x00\x28\x4e\x09\x00\x29" }, + { 0x3223, "\x00\x28\x56\xdb\x00\x29" }, + { 0x3224, "\x00\x28\x4e\x94\x00\x29" }, + { 0x3225, "\x00\x28\x51\x6d\x00\x29" }, + { 0x3226, "\x00\x28\x4e\x03\x00\x29" }, + { 0x3227, "\x00\x28\x51\x6b\x00\x29" }, + { 0x3228, "\x00\x28\x4e\x5d\x00\x29" }, + { 0x3229, "\x00\x28\x53\x41\x00\x29" }, + { 0x322a, "\x00\x28\x67\x08\x00\x29" }, + { 0x322b, "\x00\x28\x70\x6b\x00\x29" }, + { 0x322c, "\x00\x28\x6c\x34\x00\x29" }, + { 0x322d, "\x00\x28\x67\x28\x00\x29" }, + { 0x322e, "\x00\x28\x91\xd1\x00\x29" }, + { 0x322f, "\x00\x28\x57\x1f\x00\x29" }, + { 0x3230, "\x00\x28\x65\xe5\x00\x29" }, + { 0x3231, "\x00\x28\x68\x2a\x00\x29" }, + { 0x3232, "\x00\x28\x67\x09\x00\x29" }, + { 0x3233, "\x00\x28\x79\x3e\x00\x29" }, + { 0x3234, "\x00\x28\x54\x0d\x00\x29" }, + { 0x3235, "\x00\x28\x72\x79\x00\x29" }, + { 0x3236, "\x00\x28\x8c\xa1\x00\x29" }, + { 0x3237, "\x00\x28\x79\x5d\x00\x29" }, + { 0x3238, "\x00\x28\x52\xb4\x00\x29" }, + { 0x3239, "\x00\x28\x4e\xe3\x00\x29" }, + { 0x323a, "\x00\x28\x54\x7c\x00\x29" }, + { 0x323b, "\x00\x28\x5b\x66\x00\x29" }, + { 0x323c, "\x00\x28\x76\xe3\x00\x29" }, + { 0x323d, "\x00\x28\x4f\x01\x00\x29" }, + { 0x323e, "\x00\x28\x8c\xc7\x00\x29" }, + { 0x323f, "\x00\x28\x53\x54\x00\x29" }, + { 0x3240, "\x00\x28\x79\x6d\x00\x29" }, + { 0x3241, "\x00\x28\x4f\x11\x00\x29" }, + { 0x3242, "\x00\x28\x81\xea\x00\x29" }, + { 0x3243, "\x00\x28\x81\xf3\x00\x29" }, + { 0x3260, "\x11\x00" }, + { 0x3261, "\x11\x02" }, + { 0x3262, "\x11\x03" }, + { 0x3263, "\x11\x05" }, + { 0x3264, "\x11\x06" }, + { 0x3265, "\x11\x07" }, + { 0x3266, "\x11\x09" }, + { 0x3267, "\x11\x0b" }, + { 0x3268, "\x11\x0c" }, + { 0x3269, "\x11\x0e" }, + { 0x326a, "\x11\x0f" }, + { 0x326b, "\x11\x10" }, + { 0x326c, "\x11\x11" }, + { 0x326d, "\x11\x12" }, + { 0x326e, "\x11\x00\x11\x61" }, + { 0x326f, "\x11\x02\x11\x61" }, + { 0x3270, "\x11\x03\x11\x61" }, + { 0x3271, "\x11\x05\x11\x61" }, + { 0x3272, "\x11\x06\x11\x61" }, + { 0x3273, "\x11\x07\x11\x61" }, + { 0x3274, "\x11\x09\x11\x61" }, + { 0x3275, "\x11\x0b\x11\x61" }, + { 0x3276, "\x11\x0c\x11\x61" }, + { 0x3277, "\x11\x0e\x11\x61" }, + { 0x3278, "\x11\x0f\x11\x61" }, + { 0x3279, "\x11\x10\x11\x61" }, + { 0x327a, "\x11\x11\x11\x61" }, + { 0x327b, "\x11\x12\x11\x61" }, + { 0x3280, "\x4e\x00" }, + { 0x3281, "\x4e\x8c" }, + { 0x3282, "\x4e\x09" }, + { 0x3283, "\x56\xdb" }, + { 0x3284, "\x4e\x94" }, + { 0x3285, "\x51\x6d" }, + { 0x3286, "\x4e\x03" }, + { 0x3287, "\x51\x6b" }, + { 0x3288, "\x4e\x5d" }, + { 0x3289, "\x53\x41" }, + { 0x328a, "\x67\x08" }, + { 0x328b, "\x70\x6b" }, + { 0x328c, "\x6c\x34" }, + { 0x328d, "\x67\x28" }, + { 0x328e, "\x91\xd1" }, + { 0x328f, "\x57\x1f" }, + { 0x3290, "\x65\xe5" }, + { 0x3291, "\x68\x2a" }, + { 0x3292, "\x67\x09" }, + { 0x3293, "\x79\x3e" }, + { 0x3294, "\x54\x0d" }, + { 0x3295, "\x72\x79" }, + { 0x3296, "\x8c\xa1" }, + { 0x3297, "\x79\x5d" }, + { 0x3298, "\x52\xb4" }, + { 0x3299, "\x79\xd8" }, + { 0x329a, "\x75\x37" }, + { 0x329b, "\x59\x73" }, + { 0x329c, "\x90\x69" }, + { 0x329d, "\x51\x2a" }, + { 0x329e, "\x53\x70" }, + { 0x329f, "\x6c\xe8" }, + { 0x32a0, "\x98\x05" }, + { 0x32a1, "\x4f\x11" }, + { 0x32a2, "\x51\x99" }, + { 0x32a3, "\x6b\x63" }, + { 0x32a4, "\x4e\x0a" }, + { 0x32a5, "\x4e\x2d" }, + { 0x32a6, "\x4e\x0b" }, + { 0x32a7, "\x5d\xe6" }, + { 0x32a8, "\x53\xf3" }, + { 0x32a9, "\x53\x3b" }, + { 0x32aa, "\x5b\x97" }, + { 0x32ab, "\x5b\x66" }, + { 0x32ac, "\x76\xe3" }, + { 0x32ad, "\x4f\x01" }, + { 0x32ae, "\x8c\xc7" }, + { 0x32af, "\x53\x54" }, + { 0x32b0, "\x59\x1c" }, + { 0x32c0, "\x00\x31\x67\x08" }, + { 0x32c1, "\x00\x32\x67\x08" }, + { 0x32c2, "\x00\x33\x67\x08" }, + { 0x32c3, "\x00\x34\x67\x08" }, + { 0x32c4, "\x00\x35\x67\x08" }, + { 0x32c5, "\x00\x36\x67\x08" }, + { 0x32c6, "\x00\x37\x67\x08" }, + { 0x32c7, "\x00\x38\x67\x08" }, + { 0x32c8, "\x00\x39\x67\x08" }, + { 0x32c9, "\x00\x31\x00\x30\x67\x08" }, + { 0x32ca, "\x00\x31\x00\x31\x67\x08" }, + { 0x32cb, "\x00\x31\x00\x32\x67\x08" }, + { 0x32d0, "\x30\xa2" }, + { 0x32d1, "\x30\xa4" }, + { 0x32d2, "\x30\xa6" }, + { 0x32d3, "\x30\xa8" }, + { 0x32d4, "\x30\xaa" }, + { 0x32d5, "\x30\xab" }, + { 0x32d6, "\x30\xad" }, + { 0x32d7, "\x30\xaf" }, + { 0x32d8, "\x30\xb1" }, + { 0x32d9, "\x30\xb3" }, + { 0x32da, "\x30\xb5" }, + { 0x32db, "\x30\xb7" }, + { 0x32dc, "\x30\xb9" }, + { 0x32dd, "\x30\xbb" }, + { 0x32de, "\x30\xbd" }, + { 0x32df, "\x30\xbf" }, + { 0x32e0, "\x30\xc1" }, + { 0x32e1, "\x30\xc4" }, + { 0x32e2, "\x30\xc6" }, + { 0x32e3, "\x30\xc8" }, + { 0x32e4, "\x30\xca" }, + { 0x32e5, "\x30\xcb" }, + { 0x32e6, "\x30\xcc" }, + { 0x32e7, "\x30\xcd" }, + { 0x32e8, "\x30\xce" }, + { 0x32e9, "\x30\xcf" }, + { 0x32ea, "\x30\xd2" }, + { 0x32eb, "\x30\xd5" }, + { 0x32ec, "\x30\xd8" }, + { 0x32ed, "\x30\xdb" }, + { 0x32ee, "\x30\xde" }, + { 0x32ef, "\x30\xdf" }, + { 0x32f0, "\x30\xe0" }, + { 0x32f1, "\x30\xe1" }, + { 0x32f2, "\x30\xe2" }, + { 0x32f3, "\x30\xe4" }, + { 0x32f4, "\x30\xe6" }, + { 0x32f5, "\x30\xe8" }, + { 0x32f6, "\x30\xe9" }, + { 0x32f7, "\x30\xea" }, + { 0x32f8, "\x30\xeb" }, + { 0x32f9, "\x30\xec" }, + { 0x32fa, "\x30\xed" }, + { 0x32fb, "\x30\xef" }, + { 0x32fc, "\x30\xf0" }, + { 0x32fd, "\x30\xf1" }, + { 0x32fe, "\x30\xf2" }, + { 0x3300, "\x30\xa2\x30\xd1\x30\xfc\x30\xc8" }, + { 0x3301, "\x30\xa2\x30\xeb\x30\xd5\x30\xa1" }, + { 0x3302, "\x30\xa2\x30\xf3\x30\xda\x30\xa2" }, + { 0x3303, "\x30\xa2\x30\xfc\x30\xeb" }, + { 0x3304, "\x30\xa4\x30\xcb\x30\xf3\x30\xb0" }, + { 0x3305, "\x30\xa4\x30\xf3\x30\xc1" }, + { 0x3306, "\x30\xa6\x30\xa9\x30\xf3" }, + { 0x3307, "\x30\xa8\x30\xb9\x30\xaf\x30\xfc\x30\xc9" }, + { 0x3308, "\x30\xa8\x30\xfc\x30\xab\x30\xfc" }, + { 0x3309, "\x30\xaa\x30\xf3\x30\xb9" }, + { 0x330a, "\x30\xaa\x30\xfc\x30\xe0" }, + { 0x330b, "\x30\xab\x30\xa4\x30\xea" }, + { 0x330c, "\x30\xab\x30\xe9\x30\xc3\x30\xc8" }, + { 0x330d, "\x30\xab\x30\xed\x30\xea\x30\xfc" }, + { 0x330e, "\x30\xac\x30\xed\x30\xf3" }, + { 0x330f, "\x30\xac\x30\xf3\x30\xde" }, + { 0x3310, "\x30\xae\x30\xac" }, + { 0x3311, "\x30\xae\x30\xcb\x30\xfc" }, + { 0x3312, "\x30\xad\x30\xe5\x30\xea\x30\xfc" }, + { 0x3313, "\x30\xae\x30\xeb\x30\xc0\x30\xfc" }, + { 0x3314, "\x30\xad\x30\xed" }, + { 0x3315, "\x30\xad\x30\xed\x30\xb0\x30\xe9\x30\xe0" }, + { 0x3316, "\x30\xad\x30\xed\x30\xe1\x30\xfc\x30\xc8\x30\xeb" }, + { 0x3317, "\x30\xad\x30\xed\x30\xef\x30\xc3\x30\xc8" }, + { 0x3318, "\x30\xb0\x30\xe9\x30\xe0" }, + { 0x3319, "\x30\xb0\x30\xe9\x30\xe0\x30\xc8\x30\xf3" }, + { 0x331a, "\x30\xaf\x30\xeb\x30\xbc\x30\xa4\x30\xed" }, + { 0x331b, "\x30\xaf\x30\xed\x30\xfc\x30\xcd" }, + { 0x331c, "\x30\xb1\x30\xfc\x30\xb9" }, + { 0x331d, "\x30\xb3\x30\xeb\x30\xca" }, + { 0x331e, "\x30\xb3\x30\xfc\x30\xdd" }, + { 0x331f, "\x30\xb5\x30\xa4\x30\xaf\x30\xeb" }, + { 0x3320, "\x30\xb5\x30\xf3\x30\xc1\x30\xfc\x30\xe0" }, + { 0x3321, "\x30\xb7\x30\xea\x30\xf3\x30\xb0" }, + { 0x3322, "\x30\xbb\x30\xf3\x30\xc1" }, + { 0x3323, "\x30\xbb\x30\xf3\x30\xc8" }, + { 0x3324, "\x30\xc0\x30\xfc\x30\xb9" }, + { 0x3325, "\x30\xc7\x30\xb7" }, + { 0x3326, "\x30\xc9\x30\xeb" }, + { 0x3327, "\x30\xc8\x30\xf3" }, + { 0x3328, "\x30\xca\x30\xce" }, + { 0x3329, "\x30\xce\x30\xc3\x30\xc8" }, + { 0x332a, "\x30\xcf\x30\xa4\x30\xc4" }, + { 0x332b, "\x30\xd1\x30\xfc\x30\xbb\x30\xf3\x30\xc8" }, + { 0x332c, "\x30\xd1\x30\xfc\x30\xc4" }, + { 0x332d, "\x30\xd0\x30\xfc\x30\xec\x30\xeb" }, + { 0x332e, "\x30\xd4\x30\xa2\x30\xb9\x30\xc8\x30\xeb" }, + { 0x332f, "\x30\xd4\x30\xaf\x30\xeb" }, + { 0x3330, "\x30\xd4\x30\xb3" }, + { 0x3331, "\x30\xd3\x30\xeb" }, + { 0x3332, "\x30\xd5\x30\xa1\x30\xe9\x30\xc3\x30\xc9" }, + { 0x3333, "\x30\xd5\x30\xa3\x30\xfc\x30\xc8" }, + { 0x3334, "\x30\xd6\x30\xc3\x30\xb7\x30\xa7\x30\xeb" }, + { 0x3335, "\x30\xd5\x30\xe9\x30\xf3" }, + { 0x3336, "\x30\xd8\x30\xaf\x30\xbf\x30\xfc\x30\xeb" }, + { 0x3337, "\x30\xda\x30\xbd" }, + { 0x3338, "\x30\xda\x30\xcb\x30\xd2" }, + { 0x3339, "\x30\xd8\x30\xeb\x30\xc4" }, + { 0x333a, "\x30\xda\x30\xf3\x30\xb9" }, + { 0x333b, "\x30\xda\x30\xfc\x30\xb8" }, + { 0x333c, "\x30\xd9\x30\xfc\x30\xbf" }, + { 0x333d, "\x30\xdd\x30\xa4\x30\xf3\x30\xc8" }, + { 0x333e, "\x30\xdc\x30\xeb\x30\xc8" }, + { 0x333f, "\x30\xdb\x30\xf3" }, + { 0x3340, "\x30\xdd\x30\xf3\x30\xc9" }, + { 0x3341, "\x30\xdb\x30\xfc\x30\xeb" }, + { 0x3342, "\x30\xdb\x30\xfc\x30\xf3" }, + { 0x3343, "\x30\xde\x30\xa4\x30\xaf\x30\xed" }, + { 0x3344, "\x30\xde\x30\xa4\x30\xeb" }, + { 0x3345, "\x30\xde\x30\xc3\x30\xcf" }, + { 0x3346, "\x30\xde\x30\xeb\x30\xaf" }, + { 0x3347, "\x30\xde\x30\xf3\x30\xb7\x30\xe7\x30\xf3" }, + { 0x3348, "\x30\xdf\x30\xaf\x30\xed\x30\xf3" }, + { 0x3349, "\x30\xdf\x30\xea" }, + { 0x334a, "\x30\xdf\x30\xea\x30\xd0\x30\xfc\x30\xeb" }, + { 0x334b, "\x30\xe1\x30\xac" }, + { 0x334c, "\x30\xe1\x30\xac\x30\xc8\x30\xf3" }, + { 0x334d, "\x30\xe1\x30\xfc\x30\xc8\x30\xeb" }, + { 0x334e, "\x30\xe4\x30\xfc\x30\xc9" }, + { 0x334f, "\x30\xe4\x30\xfc\x30\xeb" }, + { 0x3350, "\x30\xe6\x30\xa2\x30\xf3" }, + { 0x3351, "\x30\xea\x30\xc3\x30\xc8\x30\xeb" }, + { 0x3352, "\x30\xea\x30\xe9" }, + { 0x3353, "\x30\xeb\x30\xd4\x30\xfc" }, + { 0x3354, "\x30\xeb\x30\xfc\x30\xd6\x30\xeb" }, + { 0x3355, "\x30\xec\x30\xe0" }, + { 0x3356, "\x30\xec\x30\xf3\x30\xc8\x30\xb2\x30\xf3" }, + { 0x3357, "\x30\xef\x30\xc3\x30\xc8" }, + { 0x3358, "\x00\x30\x70\xb9" }, + { 0x3359, "\x00\x31\x70\xb9" }, + { 0x335a, "\x00\x32\x70\xb9" }, + { 0x335b, "\x00\x33\x70\xb9" }, + { 0x335c, "\x00\x34\x70\xb9" }, + { 0x335d, "\x00\x35\x70\xb9" }, + { 0x335e, "\x00\x36\x70\xb9" }, + { 0x335f, "\x00\x37\x70\xb9" }, + { 0x3360, "\x00\x38\x70\xb9" }, + { 0x3361, "\x00\x39\x70\xb9" }, + { 0x3362, "\x00\x31\x00\x30\x70\xb9" }, + { 0x3363, "\x00\x31\x00\x31\x70\xb9" }, + { 0x3364, "\x00\x31\x00\x32\x70\xb9" }, + { 0x3365, "\x00\x31\x00\x33\x70\xb9" }, + { 0x3366, "\x00\x31\x00\x34\x70\xb9" }, + { 0x3367, "\x00\x31\x00\x35\x70\xb9" }, + { 0x3368, "\x00\x31\x00\x36\x70\xb9" }, + { 0x3369, "\x00\x31\x00\x37\x70\xb9" }, + { 0x336a, "\x00\x31\x00\x38\x70\xb9" }, + { 0x336b, "\x00\x31\x00\x39\x70\xb9" }, + { 0x336c, "\x00\x32\x00\x30\x70\xb9" }, + { 0x336d, "\x00\x32\x00\x31\x70\xb9" }, + { 0x336e, "\x00\x32\x00\x32\x70\xb9" }, + { 0x336f, "\x00\x32\x00\x33\x70\xb9" }, + { 0x3370, "\x00\x32\x00\x34\x70\xb9" }, + { 0x3371, "\x00\x68\x00\x50\x00\x61" }, + { 0x3372, "\x00\x64\x00\x61" }, + { 0x3373, "\x00\x41\x00\x55" }, + { 0x3374, "\x00\x62\x00\x61\x00\x72" }, + { 0x3375, "\x00\x6f\x00\x56" }, + { 0x3376, "\x00\x70\x00\x63" }, + { 0x337b, "\x5e\x73\x62\x10" }, + { 0x337c, "\x66\x2d\x54\x8c" }, + { 0x337d, "\x59\x27\x6b\x63" }, + { 0x337e, "\x66\x0e\x6c\xbb" }, + { 0x337f, "\x68\x2a\x5f\x0f\x4f\x1a\x79\x3e" }, + { 0x3380, "\x00\x70\x00\x41" }, + { 0x3381, "\x00\x6e\x00\x41" }, + { 0x3382, "\x03\xbc\x00\x41" }, + { 0x3383, "\x00\x6d\x00\x41" }, + { 0x3384, "\x00\x6b\x00\x41" }, + { 0x3385, "\x00\x4b\x00\x42" }, + { 0x3386, "\x00\x4d\x00\x42" }, + { 0x3387, "\x00\x47\x00\x42" }, + { 0x3388, "\x00\x63\x00\x61\x00\x6c" }, + { 0x3389, "\x00\x6b\x00\x63\x00\x61\x00\x6c" }, + { 0x338a, "\x00\x70\x00\x46" }, + { 0x338b, "\x00\x6e\x00\x46" }, + { 0x338c, "\x03\xbc\x00\x46" }, + { 0x338d, "\x03\xbc\x00\x67" }, + { 0x338e, "\x00\x6d\x00\x67" }, + { 0x338f, "\x00\x6b\x00\x67" }, + { 0x3390, "\x00\x48\x00\x7a" }, + { 0x3391, "\x00\x6b\x00\x48\x00\x7a" }, + { 0x3392, "\x00\x4d\x00\x48\x00\x7a" }, + { 0x3393, "\x00\x47\x00\x48\x00\x7a" }, + { 0x3394, "\x00\x54\x00\x48\x00\x7a" }, + { 0x3395, "\x03\xbc\x21\x13" }, + { 0x3396, "\x00\x6d\x21\x13" }, + { 0x3397, "\x00\x64\x21\x13" }, + { 0x3398, "\x00\x6b\x21\x13" }, + { 0x3399, "\x00\x66\x00\x6d" }, + { 0x339a, "\x00\x6e\x00\x6d" }, + { 0x339b, "\x03\xbc\x00\x6d" }, + { 0x339c, "\x00\x6d\x00\x6d" }, + { 0x339d, "\x00\x63\x00\x6d" }, + { 0x339e, "\x00\x6b\x00\x6d" }, + { 0x339f, "\x00\x6d\x00\x6d\x00\xb2" }, + { 0x33a0, "\x00\x63\x00\x6d\x00\xb2" }, + { 0x33a1, "\x00\x6d\x00\xb2" }, + { 0x33a2, "\x00\x6b\x00\x6d\x00\xb2" }, + { 0x33a3, "\x00\x6d\x00\x6d\x00\xb3" }, + { 0x33a4, "\x00\x63\x00\x6d\x00\xb3" }, + { 0x33a5, "\x00\x6d\x00\xb3" }, + { 0x33a6, "\x00\x6b\x00\x6d\x00\xb3" }, + { 0x33a7, "\x00\x6d\x22\x15\x00\x73" }, + { 0x33a8, "\x00\x6d\x22\x15\x00\x73\x00\xb2" }, + { 0x33a9, "\x00\x50\x00\x61" }, + { 0x33aa, "\x00\x6b\x00\x50\x00\x61" }, + { 0x33ab, "\x00\x4d\x00\x50\x00\x61" }, + { 0x33ac, "\x00\x47\x00\x50\x00\x61" }, + { 0x33ad, "\x00\x72\x00\x61\x00\x64" }, + { 0x33ae, "\x00\x72\x00\x61\x00\x64\x22\x15\x00\x73" }, + { 0x33af, "\x00\x72\x00\x61\x00\x64\x22\x15\x00\x73\x00\xb2" }, + { 0x33b0, "\x00\x70\x00\x73" }, + { 0x33b1, "\x00\x6e\x00\x73" }, + { 0x33b2, "\x03\xbc\x00\x73" }, + { 0x33b3, "\x00\x6d\x00\x73" }, + { 0x33b4, "\x00\x70\x00\x56" }, + { 0x33b5, "\x00\x6e\x00\x56" }, + { 0x33b6, "\x03\xbc\x00\x56" }, + { 0x33b7, "\x00\x6d\x00\x56" }, + { 0x33b8, "\x00\x6b\x00\x56" }, + { 0x33b9, "\x00\x4d\x00\x56" }, + { 0x33ba, "\x00\x70\x00\x57" }, + { 0x33bb, "\x00\x6e\x00\x57" }, + { 0x33bc, "\x03\xbc\x00\x57" }, + { 0x33bd, "\x00\x6d\x00\x57" }, + { 0x33be, "\x00\x6b\x00\x57" }, + { 0x33bf, "\x00\x4d\x00\x57" }, + { 0x33c0, "\x00\x6b\x03\xa9" }, + { 0x33c1, "\x00\x4d\x03\xa9" }, + { 0x33c2, "\x00\x61\x00\x2e\x00\x6d\x00\x2e" }, + { 0x33c3, "\x00\x42\x00\x71" }, + { 0x33c4, "\x00\x63\x00\x63" }, + { 0x33c5, "\x00\x63\x00\x64" }, + { 0x33c6, "\x00\x43\x22\x15\x00\x6b\x00\x67" }, + { 0x33c7, "\x00\x43\x00\x6f\x00\x2e" }, + { 0x33c8, "\x00\x64\x00\x42" }, + { 0x33c9, "\x00\x47\x00\x79" }, + { 0x33ca, "\x00\x68\x00\x61" }, + { 0x33cb, "\x00\x48\x00\x50" }, + { 0x33cc, "\x00\x69\x00\x6e" }, + { 0x33cd, "\x00\x4b\x00\x4b" }, + { 0x33ce, "\x00\x4b\x00\x4d" }, + { 0x33cf, "\x00\x6b\x00\x74" }, + { 0x33d0, "\x00\x6c\x00\x6d" }, + { 0x33d1, "\x00\x6c\x00\x6e" }, + { 0x33d2, "\x00\x6c\x00\x6f\x00\x67" }, + { 0x33d3, "\x00\x6c\x00\x78" }, + { 0x33d4, "\x00\x6d\x00\x62" }, + { 0x33d5, "\x00\x6d\x00\x69\x00\x6c" }, + { 0x33d6, "\x00\x6d\x00\x6f\x00\x6c" }, + { 0x33d7, "\x00\x50\x00\x48" }, + { 0x33d8, "\x00\x70\x00\x2e\x00\x6d\x00\x2e" }, + { 0x33d9, "\x00\x50\x00\x50\x00\x4d" }, + { 0x33da, "\x00\x50\x00\x52" }, + { 0x33db, "\x00\x73\x00\x72" }, + { 0x33dc, "\x00\x53\x00\x76" }, + { 0x33dd, "\x00\x57\x00\x62" }, + { 0x33e0, "\x00\x31\x65\xe5" }, + { 0x33e1, "\x00\x32\x65\xe5" }, + { 0x33e2, "\x00\x33\x65\xe5" }, + { 0x33e3, "\x00\x34\x65\xe5" }, + { 0x33e4, "\x00\x35\x65\xe5" }, + { 0x33e5, "\x00\x36\x65\xe5" }, + { 0x33e6, "\x00\x37\x65\xe5" }, + { 0x33e7, "\x00\x38\x65\xe5" }, + { 0x33e8, "\x00\x39\x65\xe5" }, + { 0x33e9, "\x00\x31\x00\x30\x65\xe5" }, + { 0x33ea, "\x00\x31\x00\x31\x65\xe5" }, + { 0x33eb, "\x00\x31\x00\x32\x65\xe5" }, + { 0x33ec, "\x00\x31\x00\x33\x65\xe5" }, + { 0x33ed, "\x00\x31\x00\x34\x65\xe5" }, + { 0x33ee, "\x00\x31\x00\x35\x65\xe5" }, + { 0x33ef, "\x00\x31\x00\x36\x65\xe5" }, + { 0x33f0, "\x00\x31\x00\x37\x65\xe5" }, + { 0x33f1, "\x00\x31\x00\x38\x65\xe5" }, + { 0x33f2, "\x00\x31\x00\x39\x65\xe5" }, + { 0x33f3, "\x00\x32\x00\x30\x65\xe5" }, + { 0x33f4, "\x00\x32\x00\x31\x65\xe5" }, + { 0x33f5, "\x00\x32\x00\x32\x65\xe5" }, + { 0x33f6, "\x00\x32\x00\x33\x65\xe5" }, + { 0x33f7, "\x00\x32\x00\x34\x65\xe5" }, + { 0x33f8, "\x00\x32\x00\x35\x65\xe5" }, + { 0x33f9, "\x00\x32\x00\x36\x65\xe5" }, + { 0x33fa, "\x00\x32\x00\x37\x65\xe5" }, + { 0x33fb, "\x00\x32\x00\x38\x65\xe5" }, + { 0x33fc, "\x00\x32\x00\x39\x65\xe5" }, + { 0x33fd, "\x00\x33\x00\x30\x65\xe5" }, + { 0x33fe, "\x00\x33\x00\x31\x65\xe5" }, + { 0xfb00, "\x00\x66\x00\x66" }, + { 0xfb01, "\x00\x66\x00\x69" }, + { 0xfb02, "\x00\x66\x00\x6c" }, + { 0xfb03, "\x00\x66\x00\x66\x00\x69" }, + { 0xfb04, "\x00\x66\x00\x66\x00\x6c" }, + { 0xfb05, "\x01\x7f\x00\x74" }, + { 0xfb06, "\x00\x73\x00\x74" }, + { 0xfb13, "\x05\x74\x05\x76" }, + { 0xfb14, "\x05\x74\x05\x65" }, + { 0xfb15, "\x05\x74\x05\x6b" }, + { 0xfb16, "\x05\x7e\x05\x76" }, + { 0xfb17, "\x05\x74\x05\x6d" }, + { 0xfb20, "\x05\xe2" }, + { 0xfb21, "\x05\xd0" }, + { 0xfb22, "\x05\xd3" }, + { 0xfb23, "\x05\xd4" }, + { 0xfb24, "\x05\xdb" }, + { 0xfb25, "\x05\xdc" }, + { 0xfb26, "\x05\xdd" }, + { 0xfb27, "\x05\xe8" }, + { 0xfb28, "\x05\xea" }, + { 0xfb29, "\x00\x2b" }, + { 0xfb4f, "\x05\xd0\x05\xdc" }, + { 0xfb50, "\x06\x71" }, + { 0xfb51, "\x06\x71" }, + { 0xfb52, "\x06\x7b" }, + { 0xfb53, "\x06\x7b" }, + { 0xfb54, "\x06\x7b" }, + { 0xfb55, "\x06\x7b" }, + { 0xfb56, "\x06\x7e" }, + { 0xfb57, "\x06\x7e" }, + { 0xfb58, "\x06\x7e" }, + { 0xfb59, "\x06\x7e" }, + { 0xfb5a, "\x06\x80" }, + { 0xfb5b, "\x06\x80" }, + { 0xfb5c, "\x06\x80" }, + { 0xfb5d, "\x06\x80" }, + { 0xfb5e, "\x06\x7a" }, + { 0xfb5f, "\x06\x7a" }, + { 0xfb60, "\x06\x7a" }, + { 0xfb61, "\x06\x7a" }, + { 0xfb62, "\x06\x7f" }, + { 0xfb63, "\x06\x7f" }, + { 0xfb64, "\x06\x7f" }, + { 0xfb65, "\x06\x7f" }, + { 0xfb66, "\x06\x79" }, + { 0xfb67, "\x06\x79" }, + { 0xfb68, "\x06\x79" }, + { 0xfb69, "\x06\x79" }, + { 0xfb6a, "\x06\xa4" }, + { 0xfb6b, "\x06\xa4" }, + { 0xfb6c, "\x06\xa4" }, + { 0xfb6d, "\x06\xa4" }, + { 0xfb6e, "\x06\xa6" }, + { 0xfb6f, "\x06\xa6" }, + { 0xfb70, "\x06\xa6" }, + { 0xfb71, "\x06\xa6" }, + { 0xfb72, "\x06\x84" }, + { 0xfb73, "\x06\x84" }, + { 0xfb74, "\x06\x84" }, + { 0xfb75, "\x06\x84" }, + { 0xfb76, "\x06\x83" }, + { 0xfb77, "\x06\x83" }, + { 0xfb78, "\x06\x83" }, + { 0xfb79, "\x06\x83" }, + { 0xfb7a, "\x06\x86" }, + { 0xfb7b, "\x06\x86" }, + { 0xfb7c, "\x06\x86" }, + { 0xfb7d, "\x06\x86" }, + { 0xfb7e, "\x06\x87" }, + { 0xfb7f, "\x06\x87" }, + { 0xfb80, "\x06\x87" }, + { 0xfb81, "\x06\x87" }, + { 0xfb82, "\x06\x8d" }, + { 0xfb83, "\x06\x8d" }, + { 0xfb84, "\x06\x8c" }, + { 0xfb85, "\x06\x8c" }, + { 0xfb86, "\x06\x8e" }, + { 0xfb87, "\x06\x8e" }, + { 0xfb88, "\x06\x88" }, + { 0xfb89, "\x06\x88" }, + { 0xfb8a, "\x06\x98" }, + { 0xfb8b, "\x06\x98" }, + { 0xfb8c, "\x06\x91" }, + { 0xfb8d, "\x06\x91" }, + { 0xfb8e, "\x06\xa9" }, + { 0xfb8f, "\x06\xa9" }, + { 0xfb90, "\x06\xa9" }, + { 0xfb91, "\x06\xa9" }, + { 0xfb92, "\x06\xaf" }, + { 0xfb93, "\x06\xaf" }, + { 0xfb94, "\x06\xaf" }, + { 0xfb95, "\x06\xaf" }, + { 0xfb96, "\x06\xb3" }, + { 0xfb97, "\x06\xb3" }, + { 0xfb98, "\x06\xb3" }, + { 0xfb99, "\x06\xb3" }, + { 0xfb9a, "\x06\xb1" }, + { 0xfb9b, "\x06\xb1" }, + { 0xfb9c, "\x06\xb1" }, + { 0xfb9d, "\x06\xb1" }, + { 0xfb9e, "\x06\xba" }, + { 0xfb9f, "\x06\xba" }, + { 0xfba0, "\x06\xbb" }, + { 0xfba1, "\x06\xbb" }, + { 0xfba2, "\x06\xbb" }, + { 0xfba3, "\x06\xbb" }, + { 0xfba4, "\x06\xc0" }, + { 0xfba5, "\x06\xc0" }, + { 0xfba6, "\x06\xc1" }, + { 0xfba7, "\x06\xc1" }, + { 0xfba8, "\x06\xc1" }, + { 0xfba9, "\x06\xc1" }, + { 0xfbaa, "\x06\xbe" }, + { 0xfbab, "\x06\xbe" }, + { 0xfbac, "\x06\xbe" }, + { 0xfbad, "\x06\xbe" }, + { 0xfbae, "\x06\xd2" }, + { 0xfbaf, "\x06\xd2" }, + { 0xfbb0, "\x06\xd3" }, + { 0xfbb1, "\x06\xd3" }, + { 0xfbd3, "\x06\xad" }, + { 0xfbd4, "\x06\xad" }, + { 0xfbd5, "\x06\xad" }, + { 0xfbd6, "\x06\xad" }, + { 0xfbd7, "\x06\xc7" }, + { 0xfbd8, "\x06\xc7" }, + { 0xfbd9, "\x06\xc6" }, + { 0xfbda, "\x06\xc6" }, + { 0xfbdb, "\x06\xc8" }, + { 0xfbdc, "\x06\xc8" }, + { 0xfbdd, "\x06\x77" }, + { 0xfbde, "\x06\xcb" }, + { 0xfbdf, "\x06\xcb" }, + { 0xfbe0, "\x06\xc5" }, + { 0xfbe1, "\x06\xc5" }, + { 0xfbe2, "\x06\xc9" }, + { 0xfbe3, "\x06\xc9" }, + { 0xfbe4, "\x06\xd0" }, + { 0xfbe5, "\x06\xd0" }, + { 0xfbe6, "\x06\xd0" }, + { 0xfbe7, "\x06\xd0" }, + { 0xfbe8, "\x06\x49" }, + { 0xfbe9, "\x06\x49" }, + { 0xfbea, "\x06\x26\x06\x27" }, + { 0xfbeb, "\x06\x26\x06\x27" }, + { 0xfbec, "\x06\x26\x06\xd5" }, + { 0xfbed, "\x06\x26\x06\xd5" }, + { 0xfbee, "\x06\x26\x06\x48" }, + { 0xfbef, "\x06\x26\x06\x48" }, + { 0xfbf0, "\x06\x26\x06\xc7" }, + { 0xfbf1, "\x06\x26\x06\xc7" }, + { 0xfbf2, "\x06\x26\x06\xc6" }, + { 0xfbf3, "\x06\x26\x06\xc6" }, + { 0xfbf4, "\x06\x26\x06\xc8" }, + { 0xfbf5, "\x06\x26\x06\xc8" }, + { 0xfbf6, "\x06\x26\x06\xd0" }, + { 0xfbf7, "\x06\x26\x06\xd0" }, + { 0xfbf8, "\x06\x26\x06\xd0" }, + { 0xfbf9, "\x06\x26\x06\x49" }, + { 0xfbfa, "\x06\x26\x06\x49" }, + { 0xfbfb, "\x06\x26\x06\x49" }, + { 0xfbfc, "\x06\xcc" }, + { 0xfbfd, "\x06\xcc" }, + { 0xfbfe, "\x06\xcc" }, + { 0xfbff, "\x06\xcc" }, + { 0xfc00, "\x06\x26\x06\x2c" }, + { 0xfc01, "\x06\x26\x06\x2d" }, + { 0xfc02, "\x06\x26\x06\x45" }, + { 0xfc03, "\x06\x26\x06\x49" }, + { 0xfc04, "\x06\x26\x06\x4a" }, + { 0xfc05, "\x06\x28\x06\x2c" }, + { 0xfc06, "\x06\x28\x06\x2d" }, + { 0xfc07, "\x06\x28\x06\x2e" }, + { 0xfc08, "\x06\x28\x06\x45" }, + { 0xfc09, "\x06\x28\x06\x49" }, + { 0xfc0a, "\x06\x28\x06\x4a" }, + { 0xfc0b, "\x06\x2a\x06\x2c" }, + { 0xfc0c, "\x06\x2a\x06\x2d" }, + { 0xfc0d, "\x06\x2a\x06\x2e" }, + { 0xfc0e, "\x06\x2a\x06\x45" }, + { 0xfc0f, "\x06\x2a\x06\x49" }, + { 0xfc10, "\x06\x2a\x06\x4a" }, + { 0xfc11, "\x06\x2b\x06\x2c" }, + { 0xfc12, "\x06\x2b\x06\x45" }, + { 0xfc13, "\x06\x2b\x06\x49" }, + { 0xfc14, "\x06\x2b\x06\x4a" }, + { 0xfc15, "\x06\x2c\x06\x2d" }, + { 0xfc16, "\x06\x2c\x06\x45" }, + { 0xfc17, "\x06\x2d\x06\x2c" }, + { 0xfc18, "\x06\x2d\x06\x45" }, + { 0xfc19, "\x06\x2e\x06\x2c" }, + { 0xfc1a, "\x06\x2e\x06\x2d" }, + { 0xfc1b, "\x06\x2e\x06\x45" }, + { 0xfc1c, "\x06\x33\x06\x2c" }, + { 0xfc1d, "\x06\x33\x06\x2d" }, + { 0xfc1e, "\x06\x33\x06\x2e" }, + { 0xfc1f, "\x06\x33\x06\x45" }, + { 0xfc20, "\x06\x35\x06\x2d" }, + { 0xfc21, "\x06\x35\x06\x45" }, + { 0xfc22, "\x06\x36\x06\x2c" }, + { 0xfc23, "\x06\x36\x06\x2d" }, + { 0xfc24, "\x06\x36\x06\x2e" }, + { 0xfc25, "\x06\x36\x06\x45" }, + { 0xfc26, "\x06\x37\x06\x2d" }, + { 0xfc27, "\x06\x37\x06\x45" }, + { 0xfc28, "\x06\x38\x06\x45" }, + { 0xfc29, "\x06\x39\x06\x2c" }, + { 0xfc2a, "\x06\x39\x06\x45" }, + { 0xfc2b, "\x06\x3a\x06\x2c" }, + { 0xfc2c, "\x06\x3a\x06\x45" }, + { 0xfc2d, "\x06\x41\x06\x2c" }, + { 0xfc2e, "\x06\x41\x06\x2d" }, + { 0xfc2f, "\x06\x41\x06\x2e" }, + { 0xfc30, "\x06\x41\x06\x45" }, + { 0xfc31, "\x06\x41\x06\x49" }, + { 0xfc32, "\x06\x41\x06\x4a" }, + { 0xfc33, "\x06\x42\x06\x2d" }, + { 0xfc34, "\x06\x42\x06\x45" }, + { 0xfc35, "\x06\x42\x06\x49" }, + { 0xfc36, "\x06\x42\x06\x4a" }, + { 0xfc37, "\x06\x43\x06\x27" }, + { 0xfc38, "\x06\x43\x06\x2c" }, + { 0xfc39, "\x06\x43\x06\x2d" }, + { 0xfc3a, "\x06\x43\x06\x2e" }, + { 0xfc3b, "\x06\x43\x06\x44" }, + { 0xfc3c, "\x06\x43\x06\x45" }, + { 0xfc3d, "\x06\x43\x06\x49" }, + { 0xfc3e, "\x06\x43\x06\x4a" }, + { 0xfc3f, "\x06\x44\x06\x2c" }, + { 0xfc40, "\x06\x44\x06\x2d" }, + { 0xfc41, "\x06\x44\x06\x2e" }, + { 0xfc42, "\x06\x44\x06\x45" }, + { 0xfc43, "\x06\x44\x06\x49" }, + { 0xfc44, "\x06\x44\x06\x4a" }, + { 0xfc45, "\x06\x45\x06\x2c" }, + { 0xfc46, "\x06\x45\x06\x2d" }, + { 0xfc47, "\x06\x45\x06\x2e" }, + { 0xfc48, "\x06\x45\x06\x45" }, + { 0xfc49, "\x06\x45\x06\x49" }, + { 0xfc4a, "\x06\x45\x06\x4a" }, + { 0xfc4b, "\x06\x46\x06\x2c" }, + { 0xfc4c, "\x06\x46\x06\x2d" }, + { 0xfc4d, "\x06\x46\x06\x2e" }, + { 0xfc4e, "\x06\x46\x06\x45" }, + { 0xfc4f, "\x06\x46\x06\x49" }, + { 0xfc50, "\x06\x46\x06\x4a" }, + { 0xfc51, "\x06\x47\x06\x2c" }, + { 0xfc52, "\x06\x47\x06\x45" }, + { 0xfc53, "\x06\x47\x06\x49" }, + { 0xfc54, "\x06\x47\x06\x4a" }, + { 0xfc55, "\x06\x4a\x06\x2c" }, + { 0xfc56, "\x06\x4a\x06\x2d" }, + { 0xfc57, "\x06\x4a\x06\x2e" }, + { 0xfc58, "\x06\x4a\x06\x45" }, + { 0xfc59, "\x06\x4a\x06\x49" }, + { 0xfc5a, "\x06\x4a\x06\x4a" }, + { 0xfc5b, "\x06\x30\x06\x70" }, + { 0xfc5c, "\x06\x31\x06\x70" }, + { 0xfc5d, "\x06\x49\x06\x70" }, + { 0xfc5e, "\x00\x20\x06\x4c\x06\x51" }, + { 0xfc5f, "\x00\x20\x06\x4d\x06\x51" }, + { 0xfc60, "\x00\x20\x06\x4e\x06\x51" }, + { 0xfc61, "\x00\x20\x06\x4f\x06\x51" }, + { 0xfc62, "\x00\x20\x06\x50\x06\x51" }, + { 0xfc63, "\x00\x20\x06\x51\x06\x70" }, + { 0xfc64, "\x06\x26\x06\x31" }, + { 0xfc65, "\x06\x26\x06\x32" }, + { 0xfc66, "\x06\x26\x06\x45" }, + { 0xfc67, "\x06\x26\x06\x46" }, + { 0xfc68, "\x06\x26\x06\x49" }, + { 0xfc69, "\x06\x26\x06\x4a" }, + { 0xfc6a, "\x06\x28\x06\x31" }, + { 0xfc6b, "\x06\x28\x06\x32" }, + { 0xfc6c, "\x06\x28\x06\x45" }, + { 0xfc6d, "\x06\x28\x06\x46" }, + { 0xfc6e, "\x06\x28\x06\x49" }, + { 0xfc6f, "\x06\x28\x06\x4a" }, + { 0xfc70, "\x06\x2a\x06\x31" }, + { 0xfc71, "\x06\x2a\x06\x32" }, + { 0xfc72, "\x06\x2a\x06\x45" }, + { 0xfc73, "\x06\x2a\x06\x46" }, + { 0xfc74, "\x06\x2a\x06\x49" }, + { 0xfc75, "\x06\x2a\x06\x4a" }, + { 0xfc76, "\x06\x2b\x06\x31" }, + { 0xfc77, "\x06\x2b\x06\x32" }, + { 0xfc78, "\x06\x2b\x06\x45" }, + { 0xfc79, "\x06\x2b\x06\x46" }, + { 0xfc7a, "\x06\x2b\x06\x49" }, + { 0xfc7b, "\x06\x2b\x06\x4a" }, + { 0xfc7c, "\x06\x41\x06\x49" }, + { 0xfc7d, "\x06\x41\x06\x4a" }, + { 0xfc7e, "\x06\x42\x06\x49" }, + { 0xfc7f, "\x06\x42\x06\x4a" }, + { 0xfc80, "\x06\x43\x06\x27" }, + { 0xfc81, "\x06\x43\x06\x44" }, + { 0xfc82, "\x06\x43\x06\x45" }, + { 0xfc83, "\x06\x43\x06\x49" }, + { 0xfc84, "\x06\x43\x06\x4a" }, + { 0xfc85, "\x06\x44\x06\x45" }, + { 0xfc86, "\x06\x44\x06\x49" }, + { 0xfc87, "\x06\x44\x06\x4a" }, + { 0xfc88, "\x06\x45\x06\x27" }, + { 0xfc89, "\x06\x45\x06\x45" }, + { 0xfc8a, "\x06\x46\x06\x31" }, + { 0xfc8b, "\x06\x46\x06\x32" }, + { 0xfc8c, "\x06\x46\x06\x45" }, + { 0xfc8d, "\x06\x46\x06\x46" }, + { 0xfc8e, "\x06\x46\x06\x49" }, + { 0xfc8f, "\x06\x46\x06\x4a" }, + { 0xfc90, "\x06\x49\x06\x70" }, + { 0xfc91, "\x06\x4a\x06\x31" }, + { 0xfc92, "\x06\x4a\x06\x32" }, + { 0xfc93, "\x06\x4a\x06\x45" }, + { 0xfc94, "\x06\x4a\x06\x46" }, + { 0xfc95, "\x06\x4a\x06\x49" }, + { 0xfc96, "\x06\x4a\x06\x4a" }, + { 0xfc97, "\x06\x26\x06\x2c" }, + { 0xfc98, "\x06\x26\x06\x2d" }, + { 0xfc99, "\x06\x26\x06\x2e" }, + { 0xfc9a, "\x06\x26\x06\x45" }, + { 0xfc9b, "\x06\x26\x06\x47" }, + { 0xfc9c, "\x06\x28\x06\x2c" }, + { 0xfc9d, "\x06\x28\x06\x2d" }, + { 0xfc9e, "\x06\x28\x06\x2e" }, + { 0xfc9f, "\x06\x28\x06\x45" }, + { 0xfca0, "\x06\x28\x06\x47" }, + { 0xfca1, "\x06\x2a\x06\x2c" }, + { 0xfca2, "\x06\x2a\x06\x2d" }, + { 0xfca3, "\x06\x2a\x06\x2e" }, + { 0xfca4, "\x06\x2a\x06\x45" }, + { 0xfca5, "\x06\x2a\x06\x47" }, + { 0xfca6, "\x06\x2b\x06\x45" }, + { 0xfca7, "\x06\x2c\x06\x2d" }, + { 0xfca8, "\x06\x2c\x06\x45" }, + { 0xfca9, "\x06\x2d\x06\x2c" }, + { 0xfcaa, "\x06\x2d\x06\x45" }, + { 0xfcab, "\x06\x2e\x06\x2c" }, + { 0xfcac, "\x06\x2e\x06\x45" }, + { 0xfcad, "\x06\x33\x06\x2c" }, + { 0xfcae, "\x06\x33\x06\x2d" }, + { 0xfcaf, "\x06\x33\x06\x2e" }, + { 0xfcb0, "\x06\x33\x06\x45" }, + { 0xfcb1, "\x06\x35\x06\x2d" }, + { 0xfcb2, "\x06\x35\x06\x2e" }, + { 0xfcb3, "\x06\x35\x06\x45" }, + { 0xfcb4, "\x06\x36\x06\x2c" }, + { 0xfcb5, "\x06\x36\x06\x2d" }, + { 0xfcb6, "\x06\x36\x06\x2e" }, + { 0xfcb7, "\x06\x36\x06\x45" }, + { 0xfcb8, "\x06\x37\x06\x2d" }, + { 0xfcb9, "\x06\x38\x06\x45" }, + { 0xfcba, "\x06\x39\x06\x2c" }, + { 0xfcbb, "\x06\x39\x06\x45" }, + { 0xfcbc, "\x06\x3a\x06\x2c" }, + { 0xfcbd, "\x06\x3a\x06\x45" }, + { 0xfcbe, "\x06\x41\x06\x2c" }, + { 0xfcbf, "\x06\x41\x06\x2d" }, + { 0xfcc0, "\x06\x41\x06\x2e" }, + { 0xfcc1, "\x06\x41\x06\x45" }, + { 0xfcc2, "\x06\x42\x06\x2d" }, + { 0xfcc3, "\x06\x42\x06\x45" }, + { 0xfcc4, "\x06\x43\x06\x2c" }, + { 0xfcc5, "\x06\x43\x06\x2d" }, + { 0xfcc6, "\x06\x43\x06\x2e" }, + { 0xfcc7, "\x06\x43\x06\x44" }, + { 0xfcc8, "\x06\x43\x06\x45" }, + { 0xfcc9, "\x06\x44\x06\x2c" }, + { 0xfcca, "\x06\x44\x06\x2d" }, + { 0xfccb, "\x06\x44\x06\x2e" }, + { 0xfccc, "\x06\x44\x06\x45" }, + { 0xfccd, "\x06\x44\x06\x47" }, + { 0xfcce, "\x06\x45\x06\x2c" }, + { 0xfccf, "\x06\x45\x06\x2d" }, + { 0xfcd0, "\x06\x45\x06\x2e" }, + { 0xfcd1, "\x06\x45\x06\x45" }, + { 0xfcd2, "\x06\x46\x06\x2c" }, + { 0xfcd3, "\x06\x46\x06\x2d" }, + { 0xfcd4, "\x06\x46\x06\x2e" }, + { 0xfcd5, "\x06\x46\x06\x45" }, + { 0xfcd6, "\x06\x46\x06\x47" }, + { 0xfcd7, "\x06\x47\x06\x2c" }, + { 0xfcd8, "\x06\x47\x06\x45" }, + { 0xfcd9, "\x06\x47\x06\x70" }, + { 0xfcda, "\x06\x4a\x06\x2c" }, + { 0xfcdb, "\x06\x4a\x06\x2d" }, + { 0xfcdc, "\x06\x4a\x06\x2e" }, + { 0xfcdd, "\x06\x4a\x06\x45" }, + { 0xfcde, "\x06\x4a\x06\x47" }, + { 0xfcdf, "\x06\x26\x06\x45" }, + { 0xfce0, "\x06\x26\x06\x47" }, + { 0xfce1, "\x06\x28\x06\x45" }, + { 0xfce2, "\x06\x28\x06\x47" }, + { 0xfce3, "\x06\x2a\x06\x45" }, + { 0xfce4, "\x06\x2a\x06\x47" }, + { 0xfce5, "\x06\x2b\x06\x45" }, + { 0xfce6, "\x06\x2b\x06\x47" }, + { 0xfce7, "\x06\x33\x06\x45" }, + { 0xfce8, "\x06\x33\x06\x47" }, + { 0xfce9, "\x06\x34\x06\x45" }, + { 0xfcea, "\x06\x34\x06\x47" }, + { 0xfceb, "\x06\x43\x06\x44" }, + { 0xfcec, "\x06\x43\x06\x45" }, + { 0xfced, "\x06\x44\x06\x45" }, + { 0xfcee, "\x06\x46\x06\x45" }, + { 0xfcef, "\x06\x46\x06\x47" }, + { 0xfcf0, "\x06\x4a\x06\x45" }, + { 0xfcf1, "\x06\x4a\x06\x47" }, + { 0xfcf2, "\x06\x40\x06\x4e\x06\x51" }, + { 0xfcf3, "\x06\x40\x06\x4f\x06\x51" }, + { 0xfcf4, "\x06\x40\x06\x50\x06\x51" }, + { 0xfcf5, "\x06\x37\x06\x49" }, + { 0xfcf6, "\x06\x37\x06\x4a" }, + { 0xfcf7, "\x06\x39\x06\x49" }, + { 0xfcf8, "\x06\x39\x06\x4a" }, + { 0xfcf9, "\x06\x3a\x06\x49" }, + { 0xfcfa, "\x06\x3a\x06\x4a" }, + { 0xfcfb, "\x06\x33\x06\x49" }, + { 0xfcfc, "\x06\x33\x06\x4a" }, + { 0xfcfd, "\x06\x34\x06\x49" }, + { 0xfcfe, "\x06\x34\x06\x4a" }, + { 0xfcff, "\x06\x2d\x06\x49" }, + { 0xfd00, "\x06\x2d\x06\x4a" }, + { 0xfd01, "\x06\x2c\x06\x49" }, + { 0xfd02, "\x06\x2c\x06\x4a" }, + { 0xfd03, "\x06\x2e\x06\x49" }, + { 0xfd04, "\x06\x2e\x06\x4a" }, + { 0xfd05, "\x06\x35\x06\x49" }, + { 0xfd06, "\x06\x35\x06\x4a" }, + { 0xfd07, "\x06\x36\x06\x49" }, + { 0xfd08, "\x06\x36\x06\x4a" }, + { 0xfd09, "\x06\x34\x06\x2c" }, + { 0xfd0a, "\x06\x34\x06\x2d" }, + { 0xfd0b, "\x06\x34\x06\x2e" }, + { 0xfd0c, "\x06\x34\x06\x45" }, + { 0xfd0d, "\x06\x34\x06\x31" }, + { 0xfd0e, "\x06\x33\x06\x31" }, + { 0xfd0f, "\x06\x35\x06\x31" }, + { 0xfd10, "\x06\x36\x06\x31" }, + { 0xfd11, "\x06\x37\x06\x49" }, + { 0xfd12, "\x06\x37\x06\x4a" }, + { 0xfd13, "\x06\x39\x06\x49" }, + { 0xfd14, "\x06\x39\x06\x4a" }, + { 0xfd15, "\x06\x3a\x06\x49" }, + { 0xfd16, "\x06\x3a\x06\x4a" }, + { 0xfd17, "\x06\x33\x06\x49" }, + { 0xfd18, "\x06\x33\x06\x4a" }, + { 0xfd19, "\x06\x34\x06\x49" }, + { 0xfd1a, "\x06\x34\x06\x4a" }, + { 0xfd1b, "\x06\x2d\x06\x49" }, + { 0xfd1c, "\x06\x2d\x06\x4a" }, + { 0xfd1d, "\x06\x2c\x06\x49" }, + { 0xfd1e, "\x06\x2c\x06\x4a" }, + { 0xfd1f, "\x06\x2e\x06\x49" }, + { 0xfd20, "\x06\x2e\x06\x4a" }, + { 0xfd21, "\x06\x35\x06\x49" }, + { 0xfd22, "\x06\x35\x06\x4a" }, + { 0xfd23, "\x06\x36\x06\x49" }, + { 0xfd24, "\x06\x36\x06\x4a" }, + { 0xfd25, "\x06\x34\x06\x2c" }, + { 0xfd26, "\x06\x34\x06\x2d" }, + { 0xfd27, "\x06\x34\x06\x2e" }, + { 0xfd28, "\x06\x34\x06\x45" }, + { 0xfd29, "\x06\x34\x06\x31" }, + { 0xfd2a, "\x06\x33\x06\x31" }, + { 0xfd2b, "\x06\x35\x06\x31" }, + { 0xfd2c, "\x06\x36\x06\x31" }, + { 0xfd2d, "\x06\x34\x06\x2c" }, + { 0xfd2e, "\x06\x34\x06\x2d" }, + { 0xfd2f, "\x06\x34\x06\x2e" }, + { 0xfd30, "\x06\x34\x06\x45" }, + { 0xfd31, "\x06\x33\x06\x47" }, + { 0xfd32, "\x06\x34\x06\x47" }, + { 0xfd33, "\x06\x37\x06\x45" }, + { 0xfd34, "\x06\x33\x06\x2c" }, + { 0xfd35, "\x06\x33\x06\x2d" }, + { 0xfd36, "\x06\x33\x06\x2e" }, + { 0xfd37, "\x06\x34\x06\x2c" }, + { 0xfd38, "\x06\x34\x06\x2d" }, + { 0xfd39, "\x06\x34\x06\x2e" }, + { 0xfd3a, "\x06\x37\x06\x45" }, + { 0xfd3b, "\x06\x38\x06\x45" }, + { 0xfd3c, "\x06\x27\x06\x4b" }, + { 0xfd3d, "\x06\x27\x06\x4b" }, + { 0xfd50, "\x06\x2a\x06\x2c\x06\x45" }, + { 0xfd51, "\x06\x2a\x06\x2d\x06\x2c" }, + { 0xfd52, "\x06\x2a\x06\x2d\x06\x2c" }, + { 0xfd53, "\x06\x2a\x06\x2d\x06\x45" }, + { 0xfd54, "\x06\x2a\x06\x2e\x06\x45" }, + { 0xfd55, "\x06\x2a\x06\x45\x06\x2c" }, + { 0xfd56, "\x06\x2a\x06\x45\x06\x2d" }, + { 0xfd57, "\x06\x2a\x06\x45\x06\x2e" }, + { 0xfd58, "\x06\x2c\x06\x45\x06\x2d" }, + { 0xfd59, "\x06\x2c\x06\x45\x06\x2d" }, + { 0xfd5a, "\x06\x2d\x06\x45\x06\x4a" }, + { 0xfd5b, "\x06\x2d\x06\x45\x06\x49" }, + { 0xfd5c, "\x06\x33\x06\x2d\x06\x2c" }, + { 0xfd5d, "\x06\x33\x06\x2c\x06\x2d" }, + { 0xfd5e, "\x06\x33\x06\x2c\x06\x49" }, + { 0xfd5f, "\x06\x33\x06\x45\x06\x2d" }, + { 0xfd60, "\x06\x33\x06\x45\x06\x2d" }, + { 0xfd61, "\x06\x33\x06\x45\x06\x2c" }, + { 0xfd62, "\x06\x33\x06\x45\x06\x45" }, + { 0xfd63, "\x06\x33\x06\x45\x06\x45" }, + { 0xfd64, "\x06\x35\x06\x2d\x06\x2d" }, + { 0xfd65, "\x06\x35\x06\x2d\x06\x2d" }, + { 0xfd66, "\x06\x35\x06\x45\x06\x45" }, + { 0xfd67, "\x06\x34\x06\x2d\x06\x45" }, + { 0xfd68, "\x06\x34\x06\x2d\x06\x45" }, + { 0xfd69, "\x06\x34\x06\x2c\x06\x4a" }, + { 0xfd6a, "\x06\x34\x06\x45\x06\x2e" }, + { 0xfd6b, "\x06\x34\x06\x45\x06\x2e" }, + { 0xfd6c, "\x06\x34\x06\x45\x06\x45" }, + { 0xfd6d, "\x06\x34\x06\x45\x06\x45" }, + { 0xfd6e, "\x06\x36\x06\x2d\x06\x49" }, + { 0xfd6f, "\x06\x36\x06\x2e\x06\x45" }, + { 0xfd70, "\x06\x36\x06\x2e\x06\x45" }, + { 0xfd71, "\x06\x37\x06\x45\x06\x2d" }, + { 0xfd72, "\x06\x37\x06\x45\x06\x2d" }, + { 0xfd73, "\x06\x37\x06\x45\x06\x45" }, + { 0xfd74, "\x06\x37\x06\x45\x06\x4a" }, + { 0xfd75, "\x06\x39\x06\x2c\x06\x45" }, + { 0xfd76, "\x06\x39\x06\x45\x06\x45" }, + { 0xfd77, "\x06\x39\x06\x45\x06\x45" }, + { 0xfd78, "\x06\x39\x06\x45\x06\x49" }, + { 0xfd79, "\x06\x3a\x06\x45\x06\x45" }, + { 0xfd7a, "\x06\x3a\x06\x45\x06\x4a" }, + { 0xfd7b, "\x06\x3a\x06\x45\x06\x49" }, + { 0xfd7c, "\x06\x41\x06\x2e\x06\x45" }, + { 0xfd7d, "\x06\x41\x06\x2e\x06\x45" }, + { 0xfd7e, "\x06\x42\x06\x45\x06\x2d" }, + { 0xfd7f, "\x06\x42\x06\x45\x06\x45" }, + { 0xfd80, "\x06\x44\x06\x2d\x06\x45" }, + { 0xfd81, "\x06\x44\x06\x2d\x06\x4a" }, + { 0xfd82, "\x06\x44\x06\x2d\x06\x49" }, + { 0xfd83, "\x06\x44\x06\x2c\x06\x2c" }, + { 0xfd84, "\x06\x44\x06\x2c\x06\x2c" }, + { 0xfd85, "\x06\x44\x06\x2e\x06\x45" }, + { 0xfd86, "\x06\x44\x06\x2e\x06\x45" }, + { 0xfd87, "\x06\x44\x06\x45\x06\x2d" }, + { 0xfd88, "\x06\x44\x06\x45\x06\x2d" }, + { 0xfd89, "\x06\x45\x06\x2d\x06\x2c" }, + { 0xfd8a, "\x06\x45\x06\x2d\x06\x45" }, + { 0xfd8b, "\x06\x45\x06\x2d\x06\x4a" }, + { 0xfd8c, "\x06\x45\x06\x2c\x06\x2d" }, + { 0xfd8d, "\x06\x45\x06\x2c\x06\x45" }, + { 0xfd8e, "\x06\x45\x06\x2e\x06\x2c" }, + { 0xfd8f, "\x06\x45\x06\x2e\x06\x45" }, + { 0xfd92, "\x06\x45\x06\x2c\x06\x2e" }, + { 0xfd93, "\x06\x47\x06\x45\x06\x2c" }, + { 0xfd94, "\x06\x47\x06\x45\x06\x45" }, + { 0xfd95, "\x06\x46\x06\x2d\x06\x45" }, + { 0xfd96, "\x06\x46\x06\x2d\x06\x49" }, + { 0xfd97, "\x06\x46\x06\x2c\x06\x45" }, + { 0xfd98, "\x06\x46\x06\x2c\x06\x45" }, + { 0xfd99, "\x06\x46\x06\x2c\x06\x49" }, + { 0xfd9a, "\x06\x46\x06\x45\x06\x4a" }, + { 0xfd9b, "\x06\x46\x06\x45\x06\x49" }, + { 0xfd9c, "\x06\x4a\x06\x45\x06\x45" }, + { 0xfd9d, "\x06\x4a\x06\x45\x06\x45" }, + { 0xfd9e, "\x06\x28\x06\x2e\x06\x4a" }, + { 0xfd9f, "\x06\x2a\x06\x2c\x06\x4a" }, + { 0xfda0, "\x06\x2a\x06\x2c\x06\x49" }, + { 0xfda1, "\x06\x2a\x06\x2e\x06\x4a" }, + { 0xfda2, "\x06\x2a\x06\x2e\x06\x49" }, + { 0xfda3, "\x06\x2a\x06\x45\x06\x4a" }, + { 0xfda4, "\x06\x2a\x06\x45\x06\x49" }, + { 0xfda5, "\x06\x2c\x06\x45\x06\x4a" }, + { 0xfda6, "\x06\x2c\x06\x2d\x06\x49" }, + { 0xfda7, "\x06\x2c\x06\x45\x06\x49" }, + { 0xfda8, "\x06\x33\x06\x2e\x06\x49" }, + { 0xfda9, "\x06\x35\x06\x2d\x06\x4a" }, + { 0xfdaa, "\x06\x34\x06\x2d\x06\x4a" }, + { 0xfdab, "\x06\x36\x06\x2d\x06\x4a" }, + { 0xfdac, "\x06\x44\x06\x2c\x06\x4a" }, + { 0xfdad, "\x06\x44\x06\x45\x06\x4a" }, + { 0xfdae, "\x06\x4a\x06\x2d\x06\x4a" }, + { 0xfdaf, "\x06\x4a\x06\x2c\x06\x4a" }, + { 0xfdb0, "\x06\x4a\x06\x45\x06\x4a" }, + { 0xfdb1, "\x06\x45\x06\x45\x06\x4a" }, + { 0xfdb2, "\x06\x42\x06\x45\x06\x4a" }, + { 0xfdb3, "\x06\x46\x06\x2d\x06\x4a" }, + { 0xfdb4, "\x06\x42\x06\x45\x06\x2d" }, + { 0xfdb5, "\x06\x44\x06\x2d\x06\x45" }, + { 0xfdb6, "\x06\x39\x06\x45\x06\x4a" }, + { 0xfdb7, "\x06\x43\x06\x45\x06\x4a" }, + { 0xfdb8, "\x06\x46\x06\x2c\x06\x2d" }, + { 0xfdb9, "\x06\x45\x06\x2e\x06\x4a" }, + { 0xfdba, "\x06\x44\x06\x2c\x06\x45" }, + { 0xfdbb, "\x06\x43\x06\x45\x06\x45" }, + { 0xfdbc, "\x06\x44\x06\x2c\x06\x45" }, + { 0xfdbd, "\x06\x46\x06\x2c\x06\x2d" }, + { 0xfdbe, "\x06\x2c\x06\x2d\x06\x4a" }, + { 0xfdbf, "\x06\x2d\x06\x2c\x06\x4a" }, + { 0xfdc0, "\x06\x45\x06\x2c\x06\x4a" }, + { 0xfdc1, "\x06\x41\x06\x45\x06\x4a" }, + { 0xfdc2, "\x06\x28\x06\x2d\x06\x4a" }, + { 0xfdc3, "\x06\x43\x06\x45\x06\x45" }, + { 0xfdc4, "\x06\x39\x06\x2c\x06\x45" }, + { 0xfdc5, "\x06\x35\x06\x45\x06\x45" }, + { 0xfdc6, "\x06\x33\x06\x2e\x06\x4a" }, + { 0xfdc7, "\x06\x46\x06\x2c\x06\x4a" }, + { 0xfdf0, "\x06\x35\x06\x44\x06\xd2" }, + { 0xfdf1, "\x06\x42\x06\x44\x06\xd2" }, + { 0xfdf2, "\x06\x27\x06\x44\x06\x44\x06\x47" }, + { 0xfdf3, "\x06\x27\x06\x43\x06\x28\x06\x31" }, + { 0xfdf4, "\x06\x45\x06\x2d\x06\x45\x06\x2f" }, + { 0xfdf5, "\x06\x35\x06\x44\x06\x39\x06\x45" }, + { 0xfdf6, "\x06\x31\x06\x33\x06\x48\x06\x44" }, + { 0xfdf7, "\x06\x39\x06\x44\x06\x4a\x06\x47" }, + { 0xfdf8, "\x06\x48\x06\x33\x06\x44\x06\x45" }, + { 0xfdf9, "\x06\x35\x06\x44\x06\x49" }, + { 0xfdfa, "\x06\x35\x06\x44\x06\x49\x00\x20\x06\x27\x06\x44\x06\x44\x06\x47\x00\x20\x06\x39\x06\x44\x06\x4a\x06\x47\x00\x20\x06\x48\x06\x33\x06\x44\x06\x45" }, + { 0xfdfb, "\x06\x2c\x06\x44\x00\x20\x06\x2c\x06\x44\x06\x27\x06\x44\x06\x47" }, + { 0xfe30, "\x20\x25" }, + { 0xfe31, "\x20\x14" }, + { 0xfe32, "\x20\x13" }, + { 0xfe33, "\x00\x5f" }, + { 0xfe34, "\x00\x5f" }, + { 0xfe35, "\x00\x28" }, + { 0xfe36, "\x00\x29" }, + { 0xfe37, "\x00\x7b" }, + { 0xfe38, "\x00\x7d" }, + { 0xfe39, "\x30\x14" }, + { 0xfe3a, "\x30\x15" }, + { 0xfe3b, "\x30\x10" }, + { 0xfe3c, "\x30\x11" }, + { 0xfe3d, "\x30\x0a" }, + { 0xfe3e, "\x30\x0b" }, + { 0xfe3f, "\x30\x08" }, + { 0xfe40, "\x30\x09" }, + { 0xfe41, "\x30\x0c" }, + { 0xfe42, "\x30\x0d" }, + { 0xfe43, "\x30\x0e" }, + { 0xfe44, "\x30\x0f" }, + { 0xfe49, "\x20\x3e" }, + { 0xfe4a, "\x20\x3e" }, + { 0xfe4b, "\x20\x3e" }, + { 0xfe4c, "\x20\x3e" }, + { 0xfe4d, "\x00\x5f" }, + { 0xfe4e, "\x00\x5f" }, + { 0xfe4f, "\x00\x5f" }, + { 0xfe50, "\x00\x2c" }, + { 0xfe51, "\x30\x01" }, + { 0xfe52, "\x00\x2e" }, + { 0xfe54, "\x00\x3b" }, + { 0xfe55, "\x00\x3a" }, + { 0xfe56, "\x00\x3f" }, + { 0xfe57, "\x00\x21" }, + { 0xfe58, "\x20\x14" }, + { 0xfe59, "\x00\x28" }, + { 0xfe5a, "\x00\x29" }, + { 0xfe5b, "\x00\x7b" }, + { 0xfe5c, "\x00\x7d" }, + { 0xfe5d, "\x30\x14" }, + { 0xfe5e, "\x30\x15" }, + { 0xfe5f, "\x00\x23" }, + { 0xfe60, "\x00\x26" }, + { 0xfe61, "\x00\x2a" }, + { 0xfe62, "\x00\x2b" }, + { 0xfe63, "\x00\x2d" }, + { 0xfe64, "\x00\x3c" }, + { 0xfe65, "\x00\x3e" }, + { 0xfe66, "\x00\x3d" }, + { 0xfe68, "\x00\x5c" }, + { 0xfe69, "\x00\x24" }, + { 0xfe6a, "\x00\x25" }, + { 0xfe6b, "\x00\x40" }, + { 0xfe70, "\x00\x20\x06\x4b" }, + { 0xfe71, "\x06\x40\x06\x4b" }, + { 0xfe72, "\x00\x20\x06\x4c" }, + { 0xfe74, "\x00\x20\x06\x4d" }, + { 0xfe76, "\x00\x20\x06\x4e" }, + { 0xfe77, "\x06\x40\x06\x4e" }, + { 0xfe78, "\x00\x20\x06\x4f" }, + { 0xfe79, "\x06\x40\x06\x4f" }, + { 0xfe7a, "\x00\x20\x06\x50" }, + { 0xfe7b, "\x06\x40\x06\x50" }, + { 0xfe7c, "\x00\x20\x06\x51" }, + { 0xfe7d, "\x06\x40\x06\x51" }, + { 0xfe7e, "\x00\x20\x06\x52" }, + { 0xfe7f, "\x06\x40\x06\x52" }, + { 0xfe80, "\x06\x21" }, + { 0xfe81, "\x06\x22" }, + { 0xfe82, "\x06\x22" }, + { 0xfe83, "\x06\x23" }, + { 0xfe84, "\x06\x23" }, + { 0xfe85, "\x06\x24" }, + { 0xfe86, "\x06\x24" }, + { 0xfe87, "\x06\x25" }, + { 0xfe88, "\x06\x25" }, + { 0xfe89, "\x06\x26" }, + { 0xfe8a, "\x06\x26" }, + { 0xfe8b, "\x06\x26" }, + { 0xfe8c, "\x06\x26" }, + { 0xfe8d, "\x06\x27" }, + { 0xfe8e, "\x06\x27" }, + { 0xfe8f, "\x06\x28" }, + { 0xfe90, "\x06\x28" }, + { 0xfe91, "\x06\x28" }, + { 0xfe92, "\x06\x28" }, + { 0xfe93, "\x06\x29" }, + { 0xfe94, "\x06\x29" }, + { 0xfe95, "\x06\x2a" }, + { 0xfe96, "\x06\x2a" }, + { 0xfe97, "\x06\x2a" }, + { 0xfe98, "\x06\x2a" }, + { 0xfe99, "\x06\x2b" }, + { 0xfe9a, "\x06\x2b" }, + { 0xfe9b, "\x06\x2b" }, + { 0xfe9c, "\x06\x2b" }, + { 0xfe9d, "\x06\x2c" }, + { 0xfe9e, "\x06\x2c" }, + { 0xfe9f, "\x06\x2c" }, + { 0xfea0, "\x06\x2c" }, + { 0xfea1, "\x06\x2d" }, + { 0xfea2, "\x06\x2d" }, + { 0xfea3, "\x06\x2d" }, + { 0xfea4, "\x06\x2d" }, + { 0xfea5, "\x06\x2e" }, + { 0xfea6, "\x06\x2e" }, + { 0xfea7, "\x06\x2e" }, + { 0xfea8, "\x06\x2e" }, + { 0xfea9, "\x06\x2f" }, + { 0xfeaa, "\x06\x2f" }, + { 0xfeab, "\x06\x30" }, + { 0xfeac, "\x06\x30" }, + { 0xfead, "\x06\x31" }, + { 0xfeae, "\x06\x31" }, + { 0xfeaf, "\x06\x32" }, + { 0xfeb0, "\x06\x32" }, + { 0xfeb1, "\x06\x33" }, + { 0xfeb2, "\x06\x33" }, + { 0xfeb3, "\x06\x33" }, + { 0xfeb4, "\x06\x33" }, + { 0xfeb5, "\x06\x34" }, + { 0xfeb6, "\x06\x34" }, + { 0xfeb7, "\x06\x34" }, + { 0xfeb8, "\x06\x34" }, + { 0xfeb9, "\x06\x35" }, + { 0xfeba, "\x06\x35" }, + { 0xfebb, "\x06\x35" }, + { 0xfebc, "\x06\x35" }, + { 0xfebd, "\x06\x36" }, + { 0xfebe, "\x06\x36" }, + { 0xfebf, "\x06\x36" }, + { 0xfec0, "\x06\x36" }, + { 0xfec1, "\x06\x37" }, + { 0xfec2, "\x06\x37" }, + { 0xfec3, "\x06\x37" }, + { 0xfec4, "\x06\x37" }, + { 0xfec5, "\x06\x38" }, + { 0xfec6, "\x06\x38" }, + { 0xfec7, "\x06\x38" }, + { 0xfec8, "\x06\x38" }, + { 0xfec9, "\x06\x39" }, + { 0xfeca, "\x06\x39" }, + { 0xfecb, "\x06\x39" }, + { 0xfecc, "\x06\x39" }, + { 0xfecd, "\x06\x3a" }, + { 0xfece, "\x06\x3a" }, + { 0xfecf, "\x06\x3a" }, + { 0xfed0, "\x06\x3a" }, + { 0xfed1, "\x06\x41" }, + { 0xfed2, "\x06\x41" }, + { 0xfed3, "\x06\x41" }, + { 0xfed4, "\x06\x41" }, + { 0xfed5, "\x06\x42" }, + { 0xfed6, "\x06\x42" }, + { 0xfed7, "\x06\x42" }, + { 0xfed8, "\x06\x42" }, + { 0xfed9, "\x06\x43" }, + { 0xfeda, "\x06\x43" }, + { 0xfedb, "\x06\x43" }, + { 0xfedc, "\x06\x43" }, + { 0xfedd, "\x06\x44" }, + { 0xfede, "\x06\x44" }, + { 0xfedf, "\x06\x44" }, + { 0xfee0, "\x06\x44" }, + { 0xfee1, "\x06\x45" }, + { 0xfee2, "\x06\x45" }, + { 0xfee3, "\x06\x45" }, + { 0xfee4, "\x06\x45" }, + { 0xfee5, "\x06\x46" }, + { 0xfee6, "\x06\x46" }, + { 0xfee7, "\x06\x46" }, + { 0xfee8, "\x06\x46" }, + { 0xfee9, "\x06\x47" }, + { 0xfeea, "\x06\x47" }, + { 0xfeeb, "\x06\x47" }, + { 0xfeec, "\x06\x47" }, + { 0xfeed, "\x06\x48" }, + { 0xfeee, "\x06\x48" }, + { 0xfeef, "\x06\x49" }, + { 0xfef0, "\x06\x49" }, + { 0xfef1, "\x06\x4a" }, + { 0xfef2, "\x06\x4a" }, + { 0xfef3, "\x06\x4a" }, + { 0xfef4, "\x06\x4a" }, + { 0xfef5, "\x06\x44\x06\x22" }, + { 0xfef6, "\x06\x44\x06\x22" }, + { 0xfef7, "\x06\x44\x06\x23" }, + { 0xfef8, "\x06\x44\x06\x23" }, + { 0xfef9, "\x06\x44\x06\x25" }, + { 0xfefa, "\x06\x44\x06\x25" }, + { 0xfefb, "\x06\x44\x06\x27" }, + { 0xfefc, "\x06\x44\x06\x27" }, + { 0xff01, "\x00\x21" }, + { 0xff02, "\x00\x22" }, + { 0xff03, "\x00\x23" }, + { 0xff04, "\x00\x24" }, + { 0xff05, "\x00\x25" }, + { 0xff06, "\x00\x26" }, + { 0xff07, "\x00\x27" }, + { 0xff08, "\x00\x28" }, + { 0xff09, "\x00\x29" }, + { 0xff0a, "\x00\x2a" }, + { 0xff0b, "\x00\x2b" }, + { 0xff0c, "\x00\x2c" }, + { 0xff0d, "\x00\x2d" }, + { 0xff0e, "\x00\x2e" }, + { 0xff0f, "\x00\x2f" }, + { 0xff10, "\x00\x30" }, + { 0xff11, "\x00\x31" }, + { 0xff12, "\x00\x32" }, + { 0xff13, "\x00\x33" }, + { 0xff14, "\x00\x34" }, + { 0xff15, "\x00\x35" }, + { 0xff16, "\x00\x36" }, + { 0xff17, "\x00\x37" }, + { 0xff18, "\x00\x38" }, + { 0xff19, "\x00\x39" }, + { 0xff1a, "\x00\x3a" }, + { 0xff1b, "\x00\x3b" }, + { 0xff1c, "\x00\x3c" }, + { 0xff1d, "\x00\x3d" }, + { 0xff1e, "\x00\x3e" }, + { 0xff1f, "\x00\x3f" }, + { 0xff20, "\x00\x40" }, + { 0xff21, "\x00\x41" }, + { 0xff22, "\x00\x42" }, + { 0xff23, "\x00\x43" }, + { 0xff24, "\x00\x44" }, + { 0xff25, "\x00\x45" }, + { 0xff26, "\x00\x46" }, + { 0xff27, "\x00\x47" }, + { 0xff28, "\x00\x48" }, + { 0xff29, "\x00\x49" }, + { 0xff2a, "\x00\x4a" }, + { 0xff2b, "\x00\x4b" }, + { 0xff2c, "\x00\x4c" }, + { 0xff2d, "\x00\x4d" }, + { 0xff2e, "\x00\x4e" }, + { 0xff2f, "\x00\x4f" }, + { 0xff30, "\x00\x50" }, + { 0xff31, "\x00\x51" }, + { 0xff32, "\x00\x52" }, + { 0xff33, "\x00\x53" }, + { 0xff34, "\x00\x54" }, + { 0xff35, "\x00\x55" }, + { 0xff36, "\x00\x56" }, + { 0xff37, "\x00\x57" }, + { 0xff38, "\x00\x58" }, + { 0xff39, "\x00\x59" }, + { 0xff3a, "\x00\x5a" }, + { 0xff3b, "\x00\x5b" }, + { 0xff3c, "\x00\x5c" }, + { 0xff3d, "\x00\x5d" }, + { 0xff3e, "\x00\x5e" }, + { 0xff3f, "\x00\x5f" }, + { 0xff40, "\x00\x60" }, + { 0xff41, "\x00\x61" }, + { 0xff42, "\x00\x62" }, + { 0xff43, "\x00\x63" }, + { 0xff44, "\x00\x64" }, + { 0xff45, "\x00\x65" }, + { 0xff46, "\x00\x66" }, + { 0xff47, "\x00\x67" }, + { 0xff48, "\x00\x68" }, + { 0xff49, "\x00\x69" }, + { 0xff4a, "\x00\x6a" }, + { 0xff4b, "\x00\x6b" }, + { 0xff4c, "\x00\x6c" }, + { 0xff4d, "\x00\x6d" }, + { 0xff4e, "\x00\x6e" }, + { 0xff4f, "\x00\x6f" }, + { 0xff50, "\x00\x70" }, + { 0xff51, "\x00\x71" }, + { 0xff52, "\x00\x72" }, + { 0xff53, "\x00\x73" }, + { 0xff54, "\x00\x74" }, + { 0xff55, "\x00\x75" }, + { 0xff56, "\x00\x76" }, + { 0xff57, "\x00\x77" }, + { 0xff58, "\x00\x78" }, + { 0xff59, "\x00\x79" }, + { 0xff5a, "\x00\x7a" }, + { 0xff5b, "\x00\x7b" }, + { 0xff5c, "\x00\x7c" }, + { 0xff5d, "\x00\x7d" }, + { 0xff5e, "\x00\x7e" }, + { 0xff61, "\x30\x02" }, + { 0xff62, "\x30\x0c" }, + { 0xff63, "\x30\x0d" }, + { 0xff64, "\x30\x01" }, + { 0xff65, "\x30\xfb" }, + { 0xff66, "\x30\xf2" }, + { 0xff67, "\x30\xa1" }, + { 0xff68, "\x30\xa3" }, + { 0xff69, "\x30\xa5" }, + { 0xff6a, "\x30\xa7" }, + { 0xff6b, "\x30\xa9" }, + { 0xff6c, "\x30\xe3" }, + { 0xff6d, "\x30\xe5" }, + { 0xff6e, "\x30\xe7" }, + { 0xff6f, "\x30\xc3" }, + { 0xff70, "\x30\xfc" }, + { 0xff71, "\x30\xa2" }, + { 0xff72, "\x30\xa4" }, + { 0xff73, "\x30\xa6" }, + { 0xff74, "\x30\xa8" }, + { 0xff75, "\x30\xaa" }, + { 0xff76, "\x30\xab" }, + { 0xff77, "\x30\xad" }, + { 0xff78, "\x30\xaf" }, + { 0xff79, "\x30\xb1" }, + { 0xff7a, "\x30\xb3" }, + { 0xff7b, "\x30\xb5" }, + { 0xff7c, "\x30\xb7" }, + { 0xff7d, "\x30\xb9" }, + { 0xff7e, "\x30\xbb" }, + { 0xff7f, "\x30\xbd" }, + { 0xff80, "\x30\xbf" }, + { 0xff81, "\x30\xc1" }, + { 0xff82, "\x30\xc4" }, + { 0xff83, "\x30\xc6" }, + { 0xff84, "\x30\xc8" }, + { 0xff85, "\x30\xca" }, + { 0xff86, "\x30\xcb" }, + { 0xff87, "\x30\xcc" }, + { 0xff88, "\x30\xcd" }, + { 0xff89, "\x30\xce" }, + { 0xff8a, "\x30\xcf" }, + { 0xff8b, "\x30\xd2" }, + { 0xff8c, "\x30\xd5" }, + { 0xff8d, "\x30\xd8" }, + { 0xff8e, "\x30\xdb" }, + { 0xff8f, "\x30\xde" }, + { 0xff90, "\x30\xdf" }, + { 0xff91, "\x30\xe0" }, + { 0xff92, "\x30\xe1" }, + { 0xff93, "\x30\xe2" }, + { 0xff94, "\x30\xe4" }, + { 0xff95, "\x30\xe6" }, + { 0xff96, "\x30\xe8" }, + { 0xff97, "\x30\xe9" }, + { 0xff98, "\x30\xea" }, + { 0xff99, "\x30\xeb" }, + { 0xff9a, "\x30\xec" }, + { 0xff9b, "\x30\xed" }, + { 0xff9c, "\x30\xef" }, + { 0xff9d, "\x30\xf3" }, + { 0xff9e, "\x30\x99" }, + { 0xff9f, "\x30\x9a" }, + { 0xffa0, "\x31\x64" }, + { 0xffa1, "\x31\x31" }, + { 0xffa2, "\x31\x32" }, + { 0xffa3, "\x31\x33" }, + { 0xffa4, "\x31\x34" }, + { 0xffa5, "\x31\x35" }, + { 0xffa6, "\x31\x36" }, + { 0xffa7, "\x31\x37" }, + { 0xffa8, "\x31\x38" }, + { 0xffa9, "\x31\x39" }, + { 0xffaa, "\x31\x3a" }, + { 0xffab, "\x31\x3b" }, + { 0xffac, "\x31\x3c" }, + { 0xffad, "\x31\x3d" }, + { 0xffae, "\x31\x3e" }, + { 0xffaf, "\x31\x3f" }, + { 0xffb0, "\x31\x40" }, + { 0xffb1, "\x31\x41" }, + { 0xffb2, "\x31\x42" }, + { 0xffb3, "\x31\x43" }, + { 0xffb4, "\x31\x44" }, + { 0xffb5, "\x31\x45" }, + { 0xffb6, "\x31\x46" }, + { 0xffb7, "\x31\x47" }, + { 0xffb8, "\x31\x48" }, + { 0xffb9, "\x31\x49" }, + { 0xffba, "\x31\x4a" }, + { 0xffbb, "\x31\x4b" }, + { 0xffbc, "\x31\x4c" }, + { 0xffbd, "\x31\x4d" }, + { 0xffbe, "\x31\x4e" }, + { 0xffc2, "\x31\x4f" }, + { 0xffc3, "\x31\x50" }, + { 0xffc4, "\x31\x51" }, + { 0xffc5, "\x31\x52" }, + { 0xffc6, "\x31\x53" }, + { 0xffc7, "\x31\x54" }, + { 0xffca, "\x31\x55" }, + { 0xffcb, "\x31\x56" }, + { 0xffcc, "\x31\x57" }, + { 0xffcd, "\x31\x58" }, + { 0xffce, "\x31\x59" }, + { 0xffcf, "\x31\x5a" }, + { 0xffd2, "\x31\x5b" }, + { 0xffd3, "\x31\x5c" }, + { 0xffd4, "\x31\x5d" }, + { 0xffd5, "\x31\x5e" }, + { 0xffd6, "\x31\x5f" }, + { 0xffd7, "\x31\x60" }, + { 0xffda, "\x31\x61" }, + { 0xffdb, "\x31\x62" }, + { 0xffdc, "\x31\x63" }, + { 0xffe0, "\x00\xa2" }, + { 0xffe1, "\x00\xa3" }, + { 0xffe2, "\x00\xac" }, + { 0xffe3, "\x00\xaf" }, + { 0xffe4, "\x00\xa6" }, + { 0xffe5, "\x00\xa5" }, + { 0xffe6, "\x20\xa9" }, + { 0xffe8, "\x25\x02" }, + { 0xffe9, "\x21\x90" }, + { 0xffea, "\x21\x91" }, + { 0xffeb, "\x21\x92" }, + { 0xffec, "\x21\x93" }, + { 0xffed, "\x25\xa0" }, + { 0xffee, "\x25\xcb" } +}; + +#endif /* __JAVA_CHARDECOMP_H__ */ diff --git a/libjava/include/java-chartables.h b/libjava/include/java-chartables.h new file mode 100644 index 000000000..d882c675e --- /dev/null +++ b/libjava/include/java-chartables.h @@ -0,0 +1,1617 @@ +/* java-chartables.h -- Character tables for java.lang.Character -*- c++ -*- + Copyright (C) 2002, 2006 Free Software Foundation, Inc. + *** This file is generated by scripts/unicode_to_chartables.pl *** + +This file is part of GNU Classpath. + +GNU Classpath 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, or (at your option) +any later version. + +GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +#ifndef __JAVA_CHARTABLES_H__ +#define __JAVA_CHARTABLES_H__ + +// These tables are automatically generated by scripts/unicode_to_chartables.pl. +// The Unicode data comes from www.unicode.org; this header is based on +// UnicodeData-4.0.0.txt. JDK 1.5 uses Unicode version 4.0.0. +// DO NOT EDIT the tables. Instead, fix the upstream scripts and run +// them again. + +// The data is stored in C style arrays of the appropriate CNI types, to +// guarantee that the data is constant and non-relocatable. The field +// <code>blocks</code> stores the offset of a block of 2<sup>SHIFT</sup> +// characters within <code>data</code>. The data field, in turn, stores +// information about each character in the low order bits, and an offset +// into the attribute tables <code>upper</code>, <code>lower</code>, +// <code>numValue</code>, and <code>direction</code>. Notice that the +// attribute tables are much smaller than 0xffff entries; as many characters +// in Unicode share common attributes. Finally, there is a listing for +// <code>title</code> exceptions (most characters just have the same title +// case as upper case). + +// This file should only be included by natCharacter.cc + +/** + * The array containing the numeric values that are too large to be stored as + * chars in NUM_VALUE. NUM_VALUE in this case will contain a negative integer + * N such that LARGENUMS[-N - 3] contains the correct numeric value. + */ +static const jint largenums[] = { + 40000, 50000, 60000, 70000, 80000, 90000, }; + +/** + * The character shift amount to look up the block offset. In other words, + * <code>(char) (blocks[p][off >> SHIFT[p]] + off)</code> is the index where + * <code>ch</code> is described in <code>data</code>, where <code>off</code> + * is ch & 0xffff and <code>p</code> is the plane the character belongs to. + */ +static const int shift[] = { + 4, 6, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 8, 8, }; + +/** + * The mapping of character blocks to their location in <code>data</code>. + * Each entry has been adjusted so that a modulo 16 sum with the desired + * character gives the actual index into <code>data</code>. + */ +static const jchar blocks0[] = { + 15, 23, 53, 7, 52, 52, 90, 65424, 65437, 65427, + 11, 65461, 11, 4, 28, 21, 23, 7, 65527, 173, + 269, 65479, 65463, 65403, 273, 273, 183, 257, 65500, 65354, + 65335, 65267, 65303, 65287, 65269, 65401, 220, 50, 321, 5, + 65511, 317, 304, 311, 355, 355, 274, 325, 358, 342, + 326, 310, 65409, 401, 262, 65156, 458, 64826, 442, 64843, + 426, 65140, 64823, 334, 435, 64699, 64683, 64716, 64700, 371, + 64695, 64679, 64680, 64647, 64631, 64615, 275, 64583, 64567, 64578, + 64535, 65036, 65020, 64723, 64708, 64701, 65034, 65019, 65012, 65237, + 65219, 64791, 64789, 138, 127, 181, 64945, 220, 64878, 249, + 203, 65507, 107, 249, 64783, 64767, 64751, 64735, 64719, 9, + 171, 105, 65531, 88, 64623, 64822, 65494, 64460, 64444, 64428, + 64527, 64511, 65392, 65529, 64348, 64332, 64316, 64300, 64284, 64268, + 64252, 64236, 64220, 64204, 64188, 64172, 64156, 64140, 64124, 64108, + 64092, 64076, 64060, 64044, 65249, 64259, 64243, 65267, 64724, 65291, + 65299, 63915, 64394, 63482, 64105, 64485, 64366, 63758, 65193, 65199, + 64377, 63354, 63977, 63687, 65020, 63328, 64386, 65087, 63204, 63872, + 63849, 63246, 64454, 63332, 64937, 64989, 64010, 63098, 63721, 64328, + 63117, 62956, 64913, 63171, 63428, 63323, 63407, 63323, 63803, 64222, + 64347, 64791, 63236, 63489, 63465, 64420, 64727, 63279, 64657, 63148, + 64331, 63361, 63337, 64631, 64369, 63898, 64529, 63020, 64203, 63233, + 63209, 64143, 64503, 63838, 64401, 62892, 64468, 62443, 63091, 63450, + 64391, 63538, 62780, 62759, 62994, 62979, 62963, 64143, 64157, 64041, + 62652, 62636, 62151, 63220, 63096, 64185, 64185, 63935, 62524, 62508, + 64137, 62218, 63176, 63172, 62666, 62659, 63643, 62845, 63847, 62669, + 62662, 62649, 62052, 62284, 62268, 62252, 62483, 62467, 62722, 63849, + 63671, 63833, 62140, 62124, 62108, 62092, 63783, 63767, 63761, 62275, + 62259, 63347, 62227, 62211, 62195, 62179, 62163, 63148, 62131, 62115, + 62099, 62083, 63075, 62051, 62035, 62019, 62003, 63473, 61963, 61955, + 61939, 61923, 61227, 61211, 61875, 61859, 61163, 61827, 61795, 61123, + 61107, 61755, 61731, 61731, 61699, 61027, 61683, 61667, 61643, 62635, + 62147, 62425, 61340, 61324, 61555, 61539, 61523, 61507, 61491, 62966, + 61458, 61443, 61427, 61411, 61395, 61379, 61363, 61347, 61331, 61315, + 61299, 61283, 61267, 61251, 61235, 61219, 61203, 61187, 61171, 61155, + 61139, 61123, 61107, 61091, 61075, 61059, 61043, 61027, 61011, 60995, + 60979, 60963, 60947, 60931, 60915, 60899, 60883, 60867, 60205, 62324, + 61814, 61782, 60787, 60771, 60755, 60739, 62073, 62215, 60677, 62199, + 60659, 62183, 60627, 62167, 60581, 62151, 60563, 60547, 60531, 62103, + 61004, 62098, 60246, 62097, 62097, 60198, 60403, 60387, 61402, 60355, + 60339, 61811, 60307, 60291, 61953, 60012, 59996, 59980, 59964, 59948, + 60179, 61161, 61746, 60531, 59888, 60099, 61080, 61558, 59804, 59788, + 59772, 59756, 59740, 59724, 61668, 61652, 59676, 59660, 59644, 59628, + 59612, 59596, 59580, 59564, 59548, 59532, 59516, 59500, 59484, 59468, + 59452, 59436, 59420, 59404, 59388, 59372, 59356, 59340, 59324, 59308, + 59292, 59276, 59260, 59244, 59228, 59212, 59196, 59180, 59164, 59148, + 59132, 59116, 59100, 59084, 59068, 59052, 59036, 59020, 59004, 58988, + 58972, 58956, 58940, 58924, 59088, 59072, 59060, 59056, 59040, 59024, + 61022, 58796, 58780, 58764, 58748, 58732, 58716, 58700, 58684, 58668, + 58135, 58119, 58103, 58087, 58071, 58055, 58039, 58023, 58007, 58200, + 57975, 57959, 57943, 57927, 57911, 59112, 60622, 60622, 60590, 60574, + 60574, 60574, 60526, 60558, 60558, 60542, 60526, 60526, 58499, 60510, + 60510, 57701, 60494, 60494, 57467, 60493, 57427, 57334, 59163, 60445, + 60445, 57996, 60429, 60427, 57948, 60411, 58887, 57900, 58047, 59809, + 60046, 59529, 60439, 58731, 60423, 60423, 60423, 59922, 60407, 59668, + 59654, 59631, 59620, 59616, 59751, 60187, 60182, 59602, 60111, 60058, + 59577, 60060, 59602, 59637, 60006, 60003, 59952, 59516, 59950, 59932, + 60070, 59316, 60048, 60043, 60033, 60017, 60001, 57613, 59204, 57620, + 59188, 57600, 59140, 59945, 57148, 57132, 59076, 59060, 59859, 57068, + 59823, 57036, 59825, 59805, 59785, 59785, 59681, 59818, 59808, 59808, + 59798, 58754, 58820, 58804, 58788, 58772, 58756, 58740, 58724, 58708, + 58692, 58676, 58660, 59374, 58626, 58612, 58596, 58588, 58564, 57001, + 58532, 58516, 58500, 58484, 58469, 59260, 58436, 59240, 59224, 56428, + 56412, 56396, 56380, 56364, 56728, 58292, 56729, 58260, 56650, 59204, + 56673, 56667, 56657, 58964, 58148, 58939, 56156, 58635, 59076, 58084, + 58052, 58036, 58020, 58004, 57988, 57972, 57956, 57940, 57924, 57908, + 57892, 57876, 57860, 57844, 57828, 57812, 57812, 57796, 57780, 57764, + 57748, 57732, 57716, 57700, 57710, 57702, 58220, 57822, 57775, 58235, + 57679, 57584, 57562, 58161, 57661, 57673, 57492, 57671, 58045, 57561, + 57996, 57980, 57473, 57948, 57932, 57405, 57879, 57420, 58092, 55308, + 55292, 55276, 55260, 55244, 55228, 55212, 55196, 55180, 55164, 55148, + 55132, 55116, 55100, 55084, 55068, 55052, 55036, 55020, 55004, 54988, + 54972, 54956, 54940, 54924, 54908, 54892, 54876, 54860, 54844, 54828, + 54812, 54796, 54780, 54764, 54748, 54732, 54716, 54700, 54684, 54668, + 54652, 54636, 54620, 54604, 54588, 54572, 54556, 54540, 54524, 54508, + 54492, 54476, 54460, 54444, 56388, 54823, 56356, 56340, 56324, 56308, + 56292, 57094, 56260, 56244, 56228, 56212, 56196, 56180, 56164, 56148, + 56132, 56116, 56100, 56084, 56068, 56868, 54076, 56830, 57012, 57010, + 54323, 56918, 54226, 54211, 54195, 54179, 54163, 55228, 54114, 54115, + 54099, 54083, 54067, 55067, 55046, 54019, 55001, 53986, 53971, 53955, + 53939, 53923, 53891, 53991, 53875, 55347, 53596, 53580, 53564, 53795, + 56257, 56244, 56368, 56209, 56320, 56450, 56161, 56149, 56272, 56113, + 56097, 56100, 56165, 56049, 56033, 56133, 56001, 55985, 55969, 55953, + 55937, 55921, 55905, 55994, 55873, 55857, 55841, 55825, 55809, 55795, + 55777, 55762, 53267, 53251, 53235, 53219, 53203, 53187, 53171, 53155, + 53139, 53123, 53107, 53091, 53075, 53059, 53043, 53027, 53011, 52995, + 52979, 52963, 52947, 52931, 52915, 52899, 52883, 52867, 52851, 52835, + 52819, 52803, 52787, 52771, 52755, 52739, 52723, 52707, 52691, 52675, + 52659, 52643, 52627, 52611, 52595, 52579, 52563, 52547, 52531, 52515, + 52499, 52483, 52467, 52451, 52435, 52419, 52403, 52387, 52371, 52355, + 52339, 52323, 52307, 52291, 52275, 52259, 52243, 52227, 52211, 52195, + 52179, 52163, 52147, 52131, 52115, 52099, 52083, 52067, 52051, 52035, + 52019, 52003, 51987, 51971, 51955, 51939, 51923, 51907, 51891, 51875, + 51859, 51843, 51827, 51811, 51795, 51779, 51763, 51747, 51731, 51715, + 51699, 51683, 51667, 51651, 51635, 51619, 51603, 51587, 51571, 51555, + 51539, 51523, 51507, 51491, 51475, 51459, 51443, 51427, 51411, 51395, + 51379, 51363, 51347, 51331, 51315, 51299, 51283, 51267, 51251, 51235, + 51219, 51203, 51187, 51171, 51155, 51139, 51123, 51107, 51091, 51075, + 51059, 51043, 51027, 51011, 50995, 50979, 50963, 50947, 50931, 50915, + 50899, 50883, 50867, 50851, 50835, 50819, 50803, 50787, 50771, 50755, + 50739, 50723, 50707, 50691, 50675, 50659, 50643, 50627, 50611, 50595, + 50579, 50563, 50547, 50531, 50515, 50499, 50483, 50467, 50451, 50435, + 50419, 50403, 50387, 50371, 50355, 50339, 50323, 50307, 50291, 50275, + 50259, 50243, 50227, 50211, 50195, 50179, 50163, 50147, 50131, 50115, + 50099, 50083, 50067, 50051, 50035, 50019, 50003, 49987, 49971, 49955, + 49939, 49923, 49907, 49891, 49875, 49859, 49843, 49827, 49811, 49795, + 49779, 49763, 49747, 49731, 49715, 49699, 49683, 49667, 49651, 49635, + 49619, 49603, 49587, 49571, 49555, 49539, 49523, 49507, 49491, 49475, + 49459, 49443, 49427, 49411, 49395, 49379, 49363, 49347, 49331, 49315, + 49299, 49283, 49267, 49251, 49235, 49219, 49203, 49187, 49171, 49155, + 49139, 49123, 49107, 49091, 49075, 49059, 49043, 49027, 49011, 48995, + 48979, 48963, 48947, 48931, 48915, 48899, 48883, 48867, 48851, 48835, + 48819, 48803, 48787, 48771, 48755, 48739, 48723, 48707, 48691, 48675, + 48659, 48643, 48627, 48611, 48595, 48579, 48563, 48547, 48531, 48515, + 48499, 48483, 48467, 48451, 48435, 48419, 48403, 48387, 48371, 48355, + 48339, 48323, 48307, 48291, 48275, 48259, 48243, 48227, 48211, 48195, + 48179, 48163, 48147, 48131, 48115, 48099, 48083, 48067, 48051, 48035, + 48019, 48003, 47987, 47971, 47955, 47939, 47923, 47907, 47891, 47875, + 47859, 47843, 47827, 47811, 47795, 47779, 47763, 47747, 47731, 47715, + 47699, 47683, 47667, 47651, 47635, 47619, 47603, 47587, 47571, 47555, + 47539, 47523, 47507, 47491, 47475, 47459, 47443, 47427, 47411, 47395, + 47379, 47363, 47347, 47331, 47315, 47299, 47283, 47267, 47251, 47235, + 47219, 47203, 47187, 47171, 47155, 47139, 47123, 47107, 47091, 47075, + 47059, 47043, 47027, 47011, 46995, 46979, 46963, 46947, 46931, 46915, + 46899, 46883, 46867, 46851, 46835, 46819, 46803, 46787, 46771, 46755, + 46739, 46723, 46707, 48181, 48388, 48372, 48356, 48340, 46611, 46595, + 46579, 46563, 46547, 46531, 46515, 46499, 46483, 46467, 46451, 46435, + 46419, 46403, 46387, 46371, 46355, 46339, 46323, 46307, 46291, 46275, + 46259, 46243, 46227, 46211, 46195, 46179, 46163, 46147, 46131, 46115, + 46099, 46083, 46067, 46051, 46035, 46019, 46003, 45987, 45971, 45955, + 45939, 45923, 45907, 45891, 45875, 45859, 45843, 45827, 45811, 45795, + 45779, 45763, 45747, 45731, 45715, 45699, 45683, 45667, 45651, 45635, + 45619, 45603, 45587, 45571, 45555, 45539, 45523, 45507, 45491, 45475, + 45459, 45443, 45427, 45411, 45395, 45379, 45363, 45347, 45331, 45315, + 45299, 45283, 45267, 45251, 45235, 45219, 45203, 45187, 45171, 45155, + 45139, 45123, 45107, 45091, 45075, 45059, 45043, 45027, 45011, 44995, + 44979, 44963, 44947, 44931, 44915, 44899, 44883, 44867, 44851, 44835, + 44819, 44803, 44787, 44771, 44755, 44739, 44723, 44707, 44691, 44675, + 44659, 44643, 44627, 44611, 44595, 44579, 44563, 44547, 44531, 44515, + 44499, 44483, 44467, 44451, 44435, 44419, 44403, 44387, 44371, 44355, + 44339, 44323, 44307, 44291, 44275, 44259, 44243, 44227, 44211, 44195, + 44179, 44163, 44147, 44131, 44115, 44099, 44083, 44067, 44051, 44035, + 44019, 44003, 43987, 43971, 43955, 43939, 43923, 43907, 43891, 43875, + 43859, 43843, 43827, 43811, 43795, 43779, 43763, 43747, 43731, 43715, + 43699, 43683, 43667, 43651, 43635, 43619, 43603, 43587, 43571, 43555, + 43539, 43523, 43507, 43491, 43475, 43459, 43443, 43427, 43411, 43395, + 43379, 43363, 43347, 43331, 43315, 43299, 43283, 43267, 43251, 43235, + 43219, 43203, 43187, 43171, 43155, 43139, 43123, 43107, 43091, 43075, + 43059, 43043, 43027, 43011, 42995, 42979, 42963, 42947, 42931, 42915, + 42899, 42883, 42867, 42851, 42835, 42819, 42803, 42787, 42771, 42755, + 42739, 42723, 42707, 42691, 42675, 42659, 42643, 42627, 42611, 42595, + 42579, 42563, 42547, 42531, 42515, 42499, 42483, 42467, 42451, 42435, + 42419, 42403, 42387, 42371, 42355, 42339, 42323, 42307, 42291, 42275, + 42259, 42243, 42227, 42211, 42195, 42179, 42163, 42147, 42131, 42115, + 42099, 42083, 42067, 42051, 42035, 42019, 42003, 41987, 41971, 41955, + 41939, 41923, 41907, 41891, 41875, 41859, 41843, 41827, 41811, 41795, + 41779, 41763, 41747, 41731, 41715, 41699, 41683, 41667, 41651, 41635, + 41619, 41603, 41587, 41571, 41555, 41539, 41523, 41507, 41491, 41475, + 41459, 41443, 41427, 41411, 41395, 41379, 41363, 41347, 41331, 41315, + 41299, 41283, 41267, 41251, 41235, 41219, 41203, 41187, 41171, 41155, + 41139, 41123, 41107, 41091, 41075, 41059, 41043, 41027, 41011, 40995, + 40979, 40963, 40947, 40931, 40915, 40899, 40883, 40867, 40851, 40835, + 40819, 40803, 40787, 40771, 40755, 40739, 40723, 40707, 40691, 40675, + 40659, 40643, 40627, 40611, 40595, 40579, 40563, 40547, 40531, 40515, + 40499, 40483, 40467, 40451, 40435, 40419, 40403, 40387, 40371, 40355, + 40339, 40323, 40307, 40291, 40275, 40259, 40243, 40227, 40211, 40195, + 40179, 40163, 40147, 40131, 40115, 40099, 40083, 40067, 40051, 40035, + 40019, 40003, 39987, 39971, 39955, 39939, 39923, 39907, 39891, 39875, + 39859, 39843, 39827, 39811, 39795, 39779, 39763, 39747, 39731, 39715, + 39699, 39683, 39667, 39651, 39635, 39619, 39603, 39587, 39571, 39555, + 39539, 39523, 39507, 39491, 39475, 39459, 39443, 39427, 39411, 39395, + 39379, 39363, 39347, 39331, 39315, 39299, 39283, 39267, 39251, 39235, + 39219, 39203, 39187, 39171, 39155, 39139, 39123, 39107, 39091, 39075, + 39059, 39043, 39027, 39011, 38995, 38979, 38963, 38947, 38931, 38915, + 38899, 38883, 38867, 38851, 38835, 38819, 38803, 38787, 38771, 38755, + 38739, 38723, 38707, 38691, 38675, 38659, 38643, 38627, 38611, 38595, + 38579, 38563, 38547, 38531, 38515, 38499, 38483, 38467, 38451, 38435, + 38419, 38403, 38387, 38371, 38355, 38339, 38323, 38307, 38291, 38275, + 38259, 38243, 38227, 38211, 38195, 38179, 38163, 38147, 38131, 38115, + 38099, 38083, 38067, 38051, 38035, 38019, 38003, 37987, 37971, 37955, + 37939, 37923, 37907, 37891, 37875, 37859, 37843, 37827, 37811, 37795, + 37779, 37763, 37747, 37731, 37715, 37699, 37683, 37667, 37651, 37635, + 37619, 37603, 37587, 37571, 37555, 37539, 37523, 37507, 37491, 37475, + 37459, 37443, 37427, 37411, 37395, 37379, 37363, 37347, 37331, 37315, + 37299, 37283, 37267, 37251, 37235, 37219, 37203, 37187, 37171, 37155, + 37139, 37123, 37107, 37091, 37075, 37059, 37043, 37027, 37011, 36995, + 36979, 36963, 36947, 36931, 36915, 36899, 36883, 36867, 36851, 36835, + 36819, 36803, 36787, 36771, 36755, 36739, 36723, 36707, 36691, 36675, + 36659, 36643, 36627, 36611, 36595, 36579, 36563, 36547, 36531, 36515, + 36499, 36483, 36467, 36451, 36435, 36419, 36403, 36387, 36371, 36355, + 36339, 36323, 36307, 36291, 36275, 36259, 36243, 36227, 36211, 36195, + 36179, 36163, 36147, 36131, 36115, 36099, 36083, 36067, 36051, 36035, + 36019, 36003, 35987, 35971, 35955, 35939, 35923, 35907, 35891, 35875, + 35859, 35843, 35827, 35811, 35795, 35779, 35763, 35747, 35731, 35715, + 35699, 35683, 35667, 35651, 35635, 35619, 35603, 35587, 35571, 35555, + 35539, 35523, 35507, 35491, 35475, 35459, 35443, 35427, 35411, 35395, + 35379, 35363, 35347, 35331, 35315, 35299, 35283, 35267, 35251, 35235, + 35219, 35203, 35187, 35171, 35155, 35139, 35123, 35107, 35091, 35075, + 35059, 35043, 35027, 35011, 34995, 34979, 34963, 34947, 34931, 34915, + 34899, 34883, 34867, 34851, 34835, 34819, 34803, 34787, 34771, 34755, + 34739, 34723, 34707, 34691, 34675, 34659, 34643, 34627, 34611, 34595, + 34579, 34563, 34547, 34531, 34515, 34499, 34483, 34467, 34451, 34435, + 34419, 34403, 34387, 34371, 34355, 34339, 34323, 34307, 34291, 34275, + 34259, 34243, 34227, 34211, 34195, 34179, 34163, 34147, 34131, 34115, + 34099, 34083, 34067, 34051, 34035, 34019, 34003, 33987, 33971, 33955, + 33939, 33923, 33907, 33891, 33875, 33859, 33843, 33827, 33811, 33795, + 33779, 33763, 33747, 33731, 33715, 33699, 33683, 33667, 33651, 33635, + 33619, 33603, 33587, 33571, 33555, 33539, 33523, 33507, 33491, 33475, + 33459, 33443, 33427, 33411, 33395, 33379, 33363, 33347, 33331, 33315, + 33299, 33283, 33267, 33251, 33235, 33219, 33203, 33187, 33171, 33155, + 33139, 33123, 33107, 33091, 33075, 33059, 33043, 33027, 33011, 32995, + 32979, 32963, 32947, 32931, 32915, 32899, 32883, 32867, 32851, 32835, + 32819, 32803, 32787, 32771, 32755, 32739, 32723, 32707, 32691, 32675, + 32659, 32643, 32627, 32611, 32595, 32579, 32563, 32547, 32531, 32515, + 32499, 32483, 32467, 32451, 32435, 32419, 32403, 32387, 32371, 32355, + 32339, 32323, 32307, 32291, 32275, 32259, 32243, 32227, 32211, 32195, + 32179, 32163, 32147, 32131, 32115, 32099, 32083, 32067, 32051, 32035, + 32019, 32003, 31987, 31971, 31955, 31939, 31923, 31907, 31891, 31875, + 31859, 31843, 31827, 31811, 31795, 31779, 31763, 31747, 31731, 31715, + 31699, 31683, 31667, 31651, 31635, 31619, 31603, 31587, 31571, 31555, + 31539, 31523, 31507, 31491, 31475, 31459, 31443, 31427, 31411, 31395, + 31379, 31363, 31347, 31331, 31315, 31299, 31283, 31267, 31251, 31235, + 31219, 31203, 31187, 31171, 31155, 31139, 31123, 31107, 31091, 31075, + 31059, 31043, 31027, 31011, 30995, 30979, 30963, 30947, 30931, 30915, + 30899, 30883, 30867, 30851, 30835, 30819, 30803, 30787, 30771, 30755, + 30739, 30723, 30707, 30691, 30675, 30659, 30643, 30627, 30611, 30595, + 30579, 30563, 30547, 30531, 30515, 30499, 30483, 30467, 30451, 30435, + 30419, 30403, 30387, 30371, 30355, 30339, 30323, 30307, 30291, 30275, + 30259, 30243, 30227, 30211, 30195, 30179, 30163, 30147, 30131, 30115, + 30099, 30083, 30067, 30051, 30035, 30019, 30003, 29987, 29971, 29955, + 29939, 29923, 29907, 29891, 29875, 29859, 29843, 29827, 29811, 29795, + 29779, 29763, 29747, 29731, 29715, 29699, 29683, 29667, 29651, 29635, + 29619, 29603, 29587, 29571, 29555, 29539, 29523, 29507, 29491, 29475, + 29459, 29443, 29427, 29411, 29395, 29379, 29363, 29347, 29331, 29315, + 29299, 29283, 29267, 29251, 29235, 29219, 29203, 29187, 29171, 29155, + 29139, 29123, 29107, 29091, 29075, 29059, 29043, 29027, 29011, 28995, + 28979, 28963, 28947, 28931, 28915, 28899, 28883, 28867, 28851, 28835, + 28819, 28803, 28787, 28771, 28755, 28739, 28723, 28707, 28691, 28675, + 28659, 28643, 28627, 28611, 28595, 28579, 28563, 28547, 28531, 28515, + 28499, 28483, 28467, 28451, 28435, 28419, 28403, 28387, 28371, 28355, + 28339, 28323, 28307, 28291, 28275, 28259, 28243, 28227, 28211, 28195, + 28179, 28163, 28147, 28131, 28115, 28099, 28083, 28067, 28051, 28035, + 28019, 28003, 27987, 27971, 27955, 27939, 27923, 27907, 27891, 27875, + 27859, 27843, 27827, 27811, 27795, 27779, 27763, 27747, 27731, 27715, + 27699, 27683, 27667, 27651, 27635, 27619, 27603, 27587, 27571, 27555, + 27539, 27523, 27507, 27491, 27475, 27459, 27443, 27427, 27411, 27395, + 27379, 27363, 27347, 27331, 27315, 27299, 27283, 27267, 27251, 27235, + 27219, 27203, 27187, 27171, 27155, 27139, 27123, 27107, 27091, 27075, + 27059, 27043, 27027, 27011, 26995, 26979, 26963, 26947, 26931, 26915, + 26899, 26883, 26867, 26851, 26835, 26819, 26803, 26787, 26771, 26755, + 26739, 26723, 26707, 26691, 26675, 26659, 26643, 26627, 26611, 26595, + 26579, 26563, 26547, 26531, 26515, 26499, 26483, 26467, 26451, 26435, + 26419, 26403, 26387, 26371, 26355, 26339, 26323, 26307, 26291, 26275, + 26259, 26243, 26227, 26211, 26195, 26179, 26163, 26147, 26131, 26115, + 26099, 26083, 26067, 26051, 26035, 26019, 26003, 25987, 25971, 25955, + 25939, 25923, 25907, 25891, 25875, 25859, 25843, 25827, 25811, 25795, + 25779, 25763, 25747, 25731, 27205, 25452, 25436, 25420, 25404, 25388, + 25619, 25603, 25587, 25571, 25555, 25539, 25523, 25507, 25491, 25475, + 25459, 25443, 25427, 25411, 25395, 25379, 25363, 25347, 25331, 25315, + 25299, 25283, 25267, 25251, 25235, 25219, 25203, 25187, 25171, 25155, + 25139, 25123, 25107, 25091, 25075, 25059, 25043, 25027, 25011, 24995, + 24979, 24963, 24947, 24931, 24915, 24899, 24883, 24867, 24851, 24835, + 24819, 24803, 24787, 24771, 24755, 24739, 24723, 24707, 24691, 24675, + 24659, 24643, 24627, 24611, 24595, 24579, 24563, 24547, 24531, 24515, + 24499, 24483, 25465, 26164, 26148, 26132, 26931, 24140, 24124, 24108, + 24092, 24076, 24060, 24044, 24028, 24012, 23996, 23980, 23964, 23948, + 23932, 23916, 23900, 23884, 23868, 23852, 23836, 23820, 23804, 23788, + 23772, 23756, 23740, 23724, 23708, 23692, 23676, 23660, 23644, 23628, + 23612, 23596, 23580, 23564, 23548, 23532, 23516, 23500, 23484, 23468, + 23452, 23436, 23420, 23404, 23388, 23372, 23356, 23340, 23324, 23308, + 23292, 23276, 23260, 23244, 23228, 23212, 23196, 23180, 23164, 23148, + 23132, 23116, 23100, 23084, 23068, 23052, 23036, 23020, 23004, 22988, + 22972, 22956, 22940, 22924, 22908, 22892, 22876, 22860, 22844, 22828, + 22812, 22796, 22780, 22764, 22748, 22732, 22716, 22700, 22684, 22668, + 22652, 22636, 22620, 22604, 22588, 22572, 22556, 22540, 22524, 22508, + 22492, 22476, 22460, 22444, 22428, 22412, 22396, 22380, 22364, 22348, + 22332, 22316, 22547, 22531, 22515, 22499, 22483, 22467, 22451, 22435, + 22419, 22403, 22387, 22371, 22355, 22339, 22323, 22307, 22291, 22275, + 22259, 22243, 22227, 22211, 22195, 22179, 22163, 22147, 22131, 22115, + 22099, 22083, 22067, 22051, 22035, 22019, 22003, 21987, 21971, 21955, + 21939, 21923, 21907, 21891, 21875, 21859, 21843, 21827, 21811, 21795, + 21779, 21763, 21747, 21731, 21715, 21699, 21683, 21667, 21651, 21635, + 21619, 21603, 21587, 21571, 21555, 21539, 21523, 21507, 21491, 21475, + 21459, 21443, 21427, 21411, 21395, 21379, 21363, 21347, 21331, 21315, + 21299, 21283, 21267, 21251, 21235, 21219, 21203, 21187, 21171, 21155, + 21139, 21123, 21107, 21091, 21075, 21059, 21043, 21027, 21011, 20995, + 20979, 20963, 20947, 20931, 20915, 20899, 20883, 20867, 20851, 20835, + 20819, 20803, 20787, 20771, 20755, 20739, 20723, 20707, 20691, 20675, + 20659, 20643, 20627, 20611, 20595, 20579, 20563, 20547, 20531, 20515, + 20499, 20483, 20467, 20451, 20435, 20419, 20403, 20387, 20371, 20355, + 20339, 20323, 20307, 20291, 20275, 20259, 20243, 20227, 20211, 20195, + 20179, 20163, 20147, 20131, 20115, 20099, 20083, 20067, 20051, 20035, + 20019, 20003, 19987, 19971, 19955, 19939, 19923, 19907, 19891, 19875, + 19859, 19843, 19827, 19811, 19795, 19779, 19763, 19747, 19731, 19715, + 19699, 19683, 19667, 19651, 19635, 19619, 19603, 19587, 19571, 19555, + 19539, 19523, 19507, 19491, 19475, 19459, 19443, 19427, 19411, 19395, + 19379, 19363, 19347, 19331, 19315, 19299, 19283, 19267, 19251, 19235, + 19219, 19203, 19187, 19171, 19155, 19139, 19123, 19107, 19091, 19075, + 19059, 19043, 19027, 19011, 18995, 18979, 18963, 18947, 18931, 18915, + 18899, 18883, 18867, 18851, 18835, 18819, 18803, 18787, 18771, 18755, + 18739, 18723, 18707, 18691, 18675, 18659, 18643, 18627, 18611, 18595, + 18579, 18563, 18547, 18531, 18515, 18499, 18483, 18467, 18451, 18435, + 18419, 18403, 18387, 18371, 18355, 18339, 18323, 18307, 18291, 18275, + 18259, 18243, 18227, 18211, 18195, 18179, 18163, 18147, 18131, 18115, + 18099, 18083, 18067, 18051, 18035, 18019, 18003, 17987, 17971, 17955, + 17939, 17923, 17907, 17891, 17875, 17859, 17843, 17827, 17811, 17795, + 17779, 17763, 17747, 17731, 17715, 17699, 17683, 17667, 17651, 17635, + 17619, 17603, 17587, 17571, 17555, 17539, 17523, 17507, 17491, 17475, + 17459, 17443, 17427, 17411, 17395, 17379, 17363, 17347, 17331, 17315, + 17299, 17283, 17267, 17251, 17235, 17219, 17203, 17187, 17171, 17155, + 17139, 17123, 17107, 17091, 17075, 17059, 17043, 17027, 17011, 16995, + 16979, 16963, 16947, 16931, 16915, 16899, 16883, 16867, 16851, 16835, + 16819, 16803, 16787, 16771, 16755, 16739, 16723, 16707, 16691, 16675, + 16659, 16643, 16627, 16611, 16595, 16579, 16563, 16547, 16531, 16515, + 16499, 16483, 16467, 16451, 16435, 16419, 16403, 16387, 16371, 16355, + 16339, 16323, 16307, 16291, 16275, 16259, 16243, 16227, 16211, 16195, + 16179, 16163, 16147, 16131, 16115, 16099, 16083, 16067, 16051, 16035, + 16019, 16003, 15987, 15971, 15955, 15939, 15923, 15907, 15891, 15875, + 15859, 15843, 15827, 15811, 15795, 15779, 15763, 15747, 15731, 15715, + 15699, 15683, 15667, 15651, 15635, 15619, 15603, 15587, 15571, 15555, + 15539, 15523, 15507, 15491, 15475, 15459, 15443, 15427, 15411, 15395, + 15379, 15363, 15347, 15331, 15315, 15299, 15283, 15267, 15251, 15235, + 15219, 15203, 15187, 15171, 15155, 15139, 15123, 15107, 15091, 15075, + 15059, 15043, 15027, 15011, 14995, 14979, 14963, 14947, 14931, 14915, + 14899, 14883, 14867, 14851, 14835, 14819, 14803, 14787, 14771, 14755, + 14739, 14723, 14707, 14691, 14675, 14659, 14643, 14627, 14611, 14595, + 14579, 14563, 14547, 14531, 14515, 14499, 14483, 14467, 14451, 14435, + 14419, 14403, 14387, 14371, 14355, 14339, 14323, 14307, 14291, 14275, + 14259, 14243, 14227, 14211, 14195, 14179, 14163, 14147, 14131, 14115, + 14099, 14083, 14067, 14051, 14035, 14019, 14003, 13987, 13971, 13955, + 13939, 13923, 13907, 13891, 13875, 13859, 13843, 13827, 13811, 13795, + 13779, 13763, 13747, 13731, 13715, 13699, 13683, 13667, 13651, 13635, + 13619, 13603, 13587, 13571, 13555, 13539, 13523, 13507, 13491, 13475, + 13459, 13443, 13427, 13411, 13395, 13379, 13363, 13347, 13331, 13315, + 13299, 13283, 13267, 13251, 13235, 13219, 13203, 13187, 13171, 13155, + 13139, 13123, 13107, 13091, 13075, 13059, 13043, 13027, 13011, 12995, + 12979, 12963, 12947, 12931, 12915, 12899, 12883, 12867, 12851, 12835, + 12819, 12803, 12787, 12771, 12755, 12739, 12723, 12707, 12691, 12675, + 12659, 12643, 12627, 12611, 12595, 12579, 12563, 12547, 12531, 12515, + 12499, 12483, 12467, 12451, 12435, 12419, 12403, 12387, 12371, 12355, + 12339, 12323, 12307, 12291, 12275, 12259, 12243, 12227, 12211, 12195, + 12179, 12163, 12147, 12131, 12115, 12099, 12083, 12067, 12051, 12035, + 12019, 12003, 11987, 11971, 11955, 11939, 11923, 11907, 11891, 11875, + 11859, 11843, 11827, 11811, 11795, 11779, 11763, 11747, 11731, 11715, + 11699, 11683, 11667, 11651, 11635, 11619, 11603, 11587, 11571, 11555, + 11539, 11523, 11507, 11491, 11475, 11459, 11443, 11427, 11411, 11395, + 12871, 11116, 11100, 11084, 11068, 11052, 14050, 14034, 14018, 14002, + 13986, 13970, 13954, 13938, 13922, 13906, 13890, 13874, 13858, 13842, + 13826, 13810, 13794, 13778, 13762, 13746, 13730, 13714, 13698, 13682, + 13666, 13650, 13634, 13618, 13602, 13586, 13570, 13554, 13538, 13522, + 13506, 13490, 13474, 13458, 13442, 13426, 13410, 13394, 13378, 13362, + 13346, 13330, 13314, 13298, 13282, 13266, 13250, 13234, 13218, 13202, + 13186, 13170, 13154, 13138, 13122, 13106, 13090, 13074, 13058, 13042, + 13026, 13010, 12994, 12978, 12962, 12946, 12930, 12914, 12898, 12882, + 12866, 12850, 12834, 12818, 12802, 12786, 12770, 12754, 12738, 12722, + 12706, 12690, 12674, 12658, 12642, 12626, 12610, 12594, 12578, 12562, + 12546, 12530, 12514, 12498, 12482, 12466, 12450, 12434, 12418, 12402, + 12386, 12370, 12354, 12338, 12322, 12306, 12290, 12274, 12258, 12242, + 12226, 12210, 12194, 12178, 12162, 12146, 12130, 12114, 12098, 12082, + 12066, 12050, 12034, 12018, 12018, 12002, 11986, 11970, 11954, 11938, + 11922, 11906, 11890, 11874, 11858, 11842, 11826, 11810, 11794, 11778, + 11762, 11746, 11730, 11714, 11698, 11682, 11666, 11650, 11634, 11618, + 11602, 11586, 11570, 11554, 11538, 11522, 11506, 11490, 11474, 11458, + 11442, 11426, 11410, 11394, 11378, 11362, 11346, 11330, 11314, 11298, + 11282, 11266, 11250, 11234, 11218, 11202, 11186, 11170, 11154, 11138, + 11122, 11106, 11090, 11074, 11058, 11042, 11026, 11010, 10994, 10978, + 10962, 10946, 10930, 10914, 10898, 10882, 10866, 10850, 10834, 10818, + 10802, 10786, 10770, 10754, 10738, 10722, 10706, 10690, 10674, 10658, + 10642, 10626, 10610, 10594, 10578, 10562, 10546, 10530, 10514, 10498, + 10482, 10466, 10450, 10434, 10418, 10402, 10386, 10370, 10354, 10338, + 10322, 10306, 10290, 10274, 10258, 10242, 10226, 10210, 10194, 10178, + 10162, 10146, 10130, 10114, 10098, 10082, 10066, 10050, 10034, 10018, + 10002, 9986, 9970, 9954, 9938, 9922, 9906, 9890, 9874, 9858, + 9842, 9826, 9810, 9794, 9778, 9762, 9746, 9730, 9714, 9698, + 9682, 9666, 9650, 9634, 9618, 9602, 9586, 9570, 9554, 9538, + 9522, 9506, 9490, 9474, 9458, 9442, 9426, 9410, 9394, 9378, + 9362, 9346, 9330, 9314, 9298, 9282, 9266, 9250, 9234, 9218, + 9202, 9186, 9170, 9154, 9138, 9122, 9106, 9090, 9074, 9058, + 9042, 9026, 9010, 8994, 8978, 8962, 8946, 8930, 8914, 8898, + 8882, 8866, 8850, 8834, 8818, 8802, 8786, 8770, 8754, 8738, + 8722, 8706, 8690, 8674, 8658, 8642, 8626, 8610, 8594, 8578, + 8562, 8546, 8530, 8514, 8498, 8482, 8466, 8450, 8434, 8418, + 8402, 8386, 8370, 8354, 8338, 8322, 8306, 8290, 8274, 8258, + 8242, 8226, 8210, 8194, 8178, 8162, 8146, 8130, 8114, 8098, + 8082, 8066, 8050, 8034, 8018, 8002, 7986, 7970, 7954, 7938, + 7922, 7906, 7890, 7874, 7858, 7842, 7826, 7810, 7794, 7778, + 7762, 7746, 7730, 7714, 7698, 7682, 7666, 7650, 7634, 7618, + 7602, 7586, 7570, 7554, 7538, 7522, 7506, 7490, 7474, 7458, + 7442, 7426, 7410, 7394, 7378, 7362, 7346, 7330, 7314, 7298, + 7282, 7266, 7250, 7234, 7218, 7202, 7186, 7170, 7154, 7138, + 7122, 7106, 7090, 7074, 7058, 7042, 7026, 7010, 6994, 6978, + 6962, 6946, 6930, 6914, 6898, 6882, 6866, 6850, 6834, 6818, + 6802, 6786, 6770, 6754, 6738, 6722, 6706, 6690, 6674, 6658, + 6642, 6626, 6610, 6594, 6578, 6562, 6546, 6530, 6514, 6498, + 6482, 6466, 6450, 6434, 6418, 6402, 6386, 6370, 6354, 6338, + 6322, 6306, 6290, 6274, 6258, 6242, 6226, 6210, 6194, 6178, + 6162, 6146, 6130, 6114, 6098, 6082, 6066, 6050, 6034, 6018, + 6002, 5986, 5970, 5954, 5938, 5922, 5906, 5890, 5874, 5858, + 5842, 5826, 5810, 5794, 5778, 5762, 5746, 5730, 5714, 5698, + 5682, 5666, 5650, 5634, 2835, 2819, 2803, 2787, 2771, 2755, + 2739, 2723, 2707, 2691, 2675, 2659, 2643, 2627, 2611, 2595, + 2579, 2563, 3544, 2531, 2515, 2499, 3483, 2220, 2204, 2188, + 2172, 2156, 2140, 2124, 2108, 2092, 5122, 2869, 5106, 5100, + 2836, 2111, 2095, 2079, 2063, 2047, 2031, 2946, 1884, 1980, + 1967, 1951, 1935, 1919, 1903, 1887, 1871, 1855, 1839, 1823, + 1807, 1791, 1775, 1759, 1743, 1727, 1711, 1695, 1679, 1663, + 1647, 1633, 1500, 1599, 1583, 1567, 1551, 1533, 1519, 1503, + 2412, 1356, 1340, 2473, 1638, 1292, 2072, 4348, 4344, 3614, + 4328, 2227, 1295, 1279, 1263, 1247, 1231, 1215, 1199, 2172, + 1941, 295, 340, 340, 378, 4104, 2137, 2221, 1171, 1157, + 1139, 1107, 451, 907, 3976, 819, +}; + +static const jchar blocks1[] = { + 0, 65535, 63, 4, 4, 253, 189, 125, 61, 65533, + 65469, 65405, 65405, 65266, 65325, 65149, 64639, 64623, 65133, 64893, + 64829, 64765, 64701, 64637, 64573, 64509, 64445, 64381, 64317, 64253, + 64189, 64125, 64301, 63997, 63933, 63869, 63805, 63741, 63677, 63613, + 63549, 63485, 63421, 63357, 63293, 63229, 63165, 63101, 63037, 62973, + 62909, 62845, 62781, 62717, 62653, 62589, 62525, 62461, 62397, 62333, + 62269, 62205, 62141, 62077, 62013, 61949, 61885, 61821, 61757, 61693, + 61629, 61565, 61501, 61437, 61373, 61309, 61245, 61181, 61117, 61053, + 60989, 60925, 60861, 60797, 60733, 60669, 60605, 60541, 60477, 60413, + 60349, 60285, 60221, 60157, 60093, 60029, 59965, 59901, 59837, 59773, + 59709, 59645, 59581, 59517, 59453, 59389, 59325, 59261, 59197, 59133, + 59069, 59005, 58941, 58877, 58813, 58749, 58685, 58621, 58557, 58493, + 58429, 58365, 58301, 58237, 58173, 58109, 58045, 57981, 57917, 57853, + 57789, 57725, 57661, 57597, 57533, 57469, 57405, 57341, 57277, 57213, + 57149, 57085, 57021, 56957, 56893, 56829, 56765, 56701, 56637, 56573, + 56509, 56445, 56381, 56317, 56253, 56189, 56125, 56061, 55997, 55933, + 55869, 55805, 55741, 55677, 55613, 55549, 55485, 55421, 55357, 55293, + 55229, 55165, 55101, 55037, 54973, 54909, 54845, 54781, 54717, 54653, + 54589, 54525, 54461, 54397, 54333, 54269, 54205, 54141, 54077, 54013, + 53949, 53885, 53821, 53757, 53693, 53629, 53565, 53501, 53437, 53373, + 53309, 53245, 53181, 53117, 53053, 52989, 52925, 52861, 52797, 52733, + 52669, 52605, 52541, 52477, 52413, 52349, 52285, 52221, 52157, 52093, + 52029, 51965, 51901, 51837, 51773, 51709, 51645, 51581, 51517, 51453, + 51389, 51325, 51261, 51197, 51133, 51069, 51005, 50941, 50877, 50813, + 50749, 50685, 50621, 50557, 50493, 50429, 50365, 50301, 50237, 50173, + 50109, 50045, 49981, 49917, 49853, 49789, 49725, 49661, 49597, 49533, + 49469, 49405, 49341, 49277, 49213, 49149, 49085, 49021, 48957, 48893, + 48829, 48765, 48701, 48637, 48573, 48509, 48445, 48381, 48317, 48253, + 48189, 48125, 48061, 47997, 47933, 47869, 47805, 47741, 47677, 47613, + 47549, 47485, 47421, 47357, 47293, 47229, 47165, 47101, 47037, 46973, + 46909, 46845, 46781, 46717, 46653, 46589, 46525, 46461, 46397, 46333, + 46269, 46205, 46141, 46077, 46013, 45949, 45885, 45821, 45757, 45693, + 45629, 45565, 45501, 45437, 45373, 45309, 45245, 45181, 45117, 45053, + 44989, 44925, 44861, 44797, 44733, 44669, 44605, 44541, 44477, 44413, + 44349, 44285, 44221, 44157, 44093, 44029, 43965, 43901, 43837, 43773, + 43709, 43645, 43581, 43517, 43453, 43389, 43325, 43261, 43197, 43133, + 43069, 43005, 42941, 42877, 42813, 42749, 42685, 42621, 42557, 42493, + 42429, 42365, 42301, 42237, 42173, 42109, 42045, 41981, 41917, 41853, + 41789, 41725, 41661, 41597, 41533, 41469, 41405, 41341, 41277, 41213, + 41149, 41085, 41021, 40957, 40893, 40829, 40765, 40701, 40637, 40573, + 40509, 40445, 40381, 40317, 40253, 40189, 40125, 40061, 39997, 39933, + 39869, 39805, 39741, 39677, 39613, 39549, 39485, 39421, 39357, 39293, + 39229, 39165, 39101, 39037, 38973, 38909, 38845, 38781, 38717, 38653, + 38589, 38525, 38461, 38397, 38333, 38269, 38205, 38141, 38077, 38013, + 37949, 37885, 37821, 37757, 37693, 37629, 37565, 37501, 37437, 37373, + 37309, 37245, 37181, 37117, 37053, 36989, 36925, 36861, 36797, 36733, + 36669, 36605, 36541, 36477, 36413, 36349, 36285, 36221, 36157, 36093, + 36029, 35965, 35901, 35837, 35773, 35709, 35645, 35581, 35517, 35453, + 35389, 35325, 35261, 35197, 35133, 35069, 35005, 34941, 34877, 34813, + 34749, 34685, 34621, 34557, 34493, 34429, 34365, 34301, 34237, 34173, + 34109, 34045, 33981, 33917, 33853, 33789, 33725, 33661, 33597, 33533, + 33469, 33405, 33341, 33277, 33213, 33149, 33085, 33021, 32957, 32893, + 32829, 32765, 32701, 32637, 32573, 32509, 32445, 32381, 32317, 32253, + 32189, 32125, 32061, 31997, 31933, 31869, 31805, 31741, 31677, 31613, + 31549, 31485, 31421, 31357, 31293, 31229, 31165, 31101, 31037, 30973, + 30909, 30845, 30781, 30717, 30653, 30589, 30525, 30461, 30397, 30333, + 30269, 30205, 30141, 30077, 30013, 29949, 29885, 29821, 29757, 29693, + 29629, 29565, 29501, 29437, 29373, 29309, 29245, 29181, 29117, 29053, + 28989, 28925, 28861, 28797, 28733, 28669, 28605, 28541, 28477, 28413, + 28349, 28285, 28221, 28157, 28093, 28029, 27965, 27901, 27837, 27773, + 27709, 27645, 27581, 27517, 27453, 27389, 27325, 27261, 27197, 27133, + 27069, 27005, 26941, 26877, 26813, 26749, 26685, 26621, 26557, 26493, + 26429, 26365, 26301, 26237, 26173, 26109, 26045, 25981, 25917, 25853, + 25789, 25725, 25661, 25597, 25533, 25469, 25405, 25341, 25277, 25213, + 25149, 25085, 25021, 24957, 24893, 24829, 24765, 24701, 24637, 24573, + 24509, 24445, 24381, 24317, 24253, 24189, 24125, 24061, 23997, 23933, + 23869, 23805, 23741, 23677, 23613, 23549, 23485, 23421, 23357, 23293, + 23229, 23165, 23101, 23037, 22973, 22909, 22845, 22781, 22717, 22653, + 22589, 22525, 22461, 22397, 22333, 22269, 22205, 22141, 22077, 22013, + 21949, 21885, 21821, 21757, 21693, 21629, 21565, 21501, 21437, 21373, + 21309, 21245, 21181, 21117, 21053, 20989, 20925, 20861, 20797, 20733, + 20669, 20605, 20541, 20477, 20413, 20349, 20285, 20221, 20157, 20093, + 20029, 19965, 19901, 19837, 19773, 19709, 19645, 19581, 19517, 19453, + 19389, 19325, 19261, 19197, 19133, 19069, 19005, 18941, 18877, 18813, + 18749, 18685, 18621, 18557, 18493, 18429, 18365, 18301, 18237, 18173, + 18109, 18045, 17981, 17917, 17853, 17789, 17725, 17661, 17597, 17533, + 17469, 17405, 17341, 17277, 17213, 17149, 17085, 17021, 16957, 16893, + 16829, 16765, 16701, 16637, 16573, 16509, 16445, 16381, 16317, 16253, + 16189, 16125, 16061, 15997, 15933, 15869, 15805, 15741, 15677, 15613, + 15549, 15485, 15421, 15357, 15293, 15229, 15165, 15101, 15037, 14973, + 14909, 14845, 14781, 14717, 14653, 14589, 14525, 14461, 14397, 14333, + 14269, 14205, 14141, 14077, 14013, 13949, 13885, 13821, 13757, 13693, + 13629, 13565, 13501, 13437, 13373, 13309, 13245, 13181, 13117, 13053, + 12989, 12925, 12752, 12688, 12624, 12570, 12454, 12283, 12280, 12338, + 12349, 12285, 12221, 12157, 12397, 12374, 11965, 11901, 12340, 12394, + 12451, 12132, 12384, 12197, 11976, 11924, 11820, 11768, 11768, 11542, + 11484, 11426, 11368, 11744, 10813, 10749, 10685, 10621, 10557, 10493, + 10429, 10365, 10301, 10237, 10173, 10109, 10045, 9981, 9917, 9853, + 9789, 9725, 9661, 9597, 9533, 9469, 9405, 9341, 9277, 9213, + 9149, 9085, 9021, 8957, 8893, 8829, 8765, 8701, 8637, 8573, + 8509, 8445, 8381, 8317, 8253, 8189, 8125, 8061, 7997, 7933, + 7869, 7805, 7741, 7677, 7613, 7549, 7485, 7421, 7357, 7293, + 7229, 7165, 7101, 7037, 6973, 6909, 6845, 6781, 6717, 6653, + 6589, 6525, 6461, 6397, 6333, 6269, 6205, 6141, 6077, 6013, + 5949, 5885, 5821, 5757, 5693, 5629, 5565, 5501, 5437, 5373, + 5309, 5245, 5181, 5117, 5053, 4989, 4925, 4861, 4797, 4733, + 4669, 4605, 4541, 4477, 4413, 4349, 4285, 4221, 4157, 4093, + 4029, 3965, 3901, 3837, 3773, 3709, 3645, 3581, 3517, 3453, + 3389, 3325, 3261, 3197, 3133, 3069, 3005, 2941, 2877, 2813, + 2749, 2685, 2621, 2557, 2493, 2429, 2365, 2301, 2237, 2173, + 2109, 2045, 1981, 1917, 1853, 1789, 1725, 1661, 1597, 1533, + 1469, 1405, 1341, 1277, 1213, 1149, 1085, 1021, 957, 893, + 829, 765, 701, 637, +}; + +static const jchar blocks2[] = { + 0, 65408, 65280, 65152, 65024, 64896, 64768, 64640, 64512, 64384, + 64256, 64128, 64000, 63872, 63744, 63616, 63488, 63360, 63232, 63104, + 62976, 62848, 62720, 62592, 62464, 62336, 62208, 62080, 61952, 61824, + 61696, 61568, 61440, 61312, 61184, 61056, 60928, 60800, 60672, 60544, + 60416, 60288, 60160, 60032, 59904, 59776, 59648, 59520, 59392, 59264, + 59136, 59008, 58880, 58752, 58624, 58496, 58368, 58240, 58112, 57984, + 57856, 57728, 57600, 57472, 57344, 57216, 57088, 56960, 56832, 56704, + 56576, 56448, 56320, 56192, 56064, 55936, 55808, 55680, 55552, 55424, + 55296, 55168, 55040, 54912, 54784, 54656, 54528, 54400, 54272, 54144, + 54016, 53888, 53760, 53632, 53504, 53376, 53248, 53120, 52992, 52864, + 52736, 52608, 52480, 52352, 52224, 52096, 51968, 51840, 51712, 51584, + 51456, 51328, 51200, 51072, 50944, 50816, 50688, 50560, 50432, 50304, + 50176, 50048, 49920, 49792, 49664, 49536, 49408, 49280, 49152, 49024, + 48896, 48768, 48640, 48512, 48384, 48256, 48128, 48000, 47872, 47744, + 47616, 47488, 47360, 47232, 47104, 46976, 46848, 46720, 46592, 46464, + 46336, 46208, 46080, 45952, 45824, 45696, 45568, 45440, 45312, 45184, + 45056, 44928, 44800, 44672, 44544, 44416, 44288, 44160, 44032, 43904, + 43776, 43648, 43520, 43392, 43264, 43136, 43008, 42880, 42752, 42624, + 42496, 42368, 42240, 42112, 41984, 41856, 41728, 41600, 41472, 41344, + 41216, 41088, 40960, 40832, 40704, 40576, 40448, 40320, 40192, 40064, + 39936, 39808, 39680, 39552, 39424, 39296, 39168, 39040, 38912, 38784, + 38656, 38528, 38400, 38272, 38144, 38016, 37888, 37760, 37632, 37504, + 37376, 37248, 37120, 36992, 36864, 36736, 36608, 36480, 36352, 36224, + 36096, 35968, 35840, 35712, 35584, 35456, 35328, 35200, 35072, 34944, + 34816, 34688, 34560, 34432, 34304, 34176, 34048, 33920, 33792, 33664, + 33536, 33408, 33280, 33152, 33024, 32896, 32768, 32640, 32512, 32384, + 32256, 32128, 32000, 31872, 31744, 31616, 31488, 31360, 31232, 31104, + 30976, 30848, 30720, 30592, 30464, 30336, 30208, 30080, 29952, 29824, + 29696, 29568, 29440, 29312, 29184, 29056, 28928, 28800, 28672, 28544, + 28416, 28288, 28160, 28032, 27904, 27776, 27648, 27520, 27392, 27264, + 27136, 27008, 26880, 26752, 26624, 26496, 26368, 26240, 26112, 25984, + 25856, 25728, 25600, 25472, 25344, 25216, 25088, 24960, 24832, 24704, + 24576, 24448, 24320, 24192, 24064, 23936, 23808, 23680, 23552, 23424, + 23296, 23168, 23040, 22953, 22912, 22784, 22656, 22528, 22400, 22272, + 22144, 22016, 21888, 21760, 21632, 21504, 21376, 21248, 21120, 20992, + 20864, 20736, 20608, 20480, 20352, 20224, 20096, 19968, 19840, 19712, + 19584, 19456, 19328, 19200, 19072, 18944, 18816, 18688, 18560, 18432, + 18304, 18176, 18048, 17920, 17792, 17664, 17536, 17408, 17280, 17152, + 17024, 16896, 16768, 16640, 16512, 16384, 16256, 16128, 16000, 15872, + 15744, 15616, 15488, 15360, 15232, 15104, 14976, 14848, 14720, 14592, + 14464, 14336, 14208, 14080, 13952, 13824, 13696, 13568, 13440, 13312, + 13184, 13056, 12928, 12800, 12672, 12544, 12416, 12288, 12160, 12032, + 11904, 11776, 11648, 11520, 11392, 11264, 11136, 11008, 10880, 10752, + 10624, 10496, 10368, 10240, 10112, 9984, 9856, 9728, 9600, 9472, + 9344, 9216, 9088, 8960, 8832, 8704, 8576, 8448, 8320, 8192, + 8064, 7936, 7808, 7680, 7552, 7424, 7296, 7168, 7040, 6912, + 6784, 6656, 6528, 6400, 6272, 6144, 6016, 5888, 5760, 5632, + 5504, 5376, 5248, 5120, 4992, 4864, 4736, 4608, 4480, 4352, + 4224, 4096, 3968, 3840, 3712, 3584, 3456, 3328, 3200, 3072, + 2944, 2816, 2688, 2560, 2432, 2304, 2048, 1920, 1792, 1664, + 1634, 1536, 1408, 1280, 1152, 1024, 896, 768, 640, 512, + 384, 256, +}; + +static const jchar blocks14[] = { + 255, 0, 65280, 65168, 65152, 65024, 64896, 64768, 64640, 64512, + 64384, 64256, 64128, 64000, 63872, 63744, 63616, 63488, 63360, 63232, + 63104, 62976, 62848, 62720, 62592, 62464, 62336, 62208, 62080, 61952, + 61824, 61696, 61568, 61440, 61312, 61184, 61056, 60928, 60800, 60672, + 60544, 60416, 60288, 60160, 60032, 59904, 59776, 59648, 59520, 59392, + 59264, 59136, 59008, 58880, 58752, 58624, 58496, 58368, 58240, 58112, + 57984, 57856, 57728, 57600, 57472, 57344, 57216, 57088, 56960, 56832, + 56704, 56576, 56448, 56320, 56192, 56064, 55936, 55808, 55680, 55552, + 55424, 55296, 55168, 55040, 54912, 54784, 54656, 54528, 54400, 54272, + 54144, 54016, 53888, 53760, 53632, 53504, 53376, 53248, 53120, 52992, + 52864, 52736, 52608, 52480, 52352, 52224, 52096, 51968, 51840, 51712, + 51584, 51456, 51328, 51200, 51072, 50944, 50816, 50688, 50560, 50432, + 50304, 50176, 50048, 49920, 49792, 49664, 49536, 49408, 49280, 49152, + 49024, 48896, 48768, 48640, 48512, 48384, 48256, 48128, 48000, 47872, + 47744, 47616, 47488, 47360, 47232, 47104, 46976, 46848, 46720, 46592, + 46464, 46336, 46208, 46080, 45952, 45824, 45696, 45568, 45440, 45312, + 45184, 45056, 44928, 44800, 44672, 44544, 44416, 44288, 44160, 44032, + 43904, 43776, 43648, 43520, 43392, 43264, 43136, 43008, 42880, 42752, + 42624, 42496, 42368, 42240, 42112, 41984, 41856, 41728, 41600, 41472, + 41344, 41216, 41088, 40960, 40832, 40704, 40576, 40448, 40320, 40192, + 40064, 39936, 39808, 39680, 39552, 39424, 39296, 39168, 39040, 38912, + 38784, 38656, 38528, 38400, 38272, 38144, 38016, 37888, 37760, 37632, + 37504, 37376, 37248, 37120, 36992, 36864, 36736, 36608, 36480, 36352, + 36224, 36096, 35968, 35840, 35712, 35584, 35456, 35328, 35200, 35072, + 34944, 34816, 34688, 34560, 34432, 34304, 34176, 34048, 33920, 33792, + 33664, 33536, 33408, 33280, 33152, 33024, 32896, 32768, 32640, 32512, + 32384, 32256, 32128, 32000, 31872, 31744, 31616, 31488, 31360, 31232, + 31104, 30976, 30848, 30720, 30592, 30464, 30336, 30208, 30080, 29952, + 29824, 29696, 29568, 29440, 29312, 29184, 29056, 28928, 28800, 28672, + 28544, 28416, 28288, 28160, 28032, 27904, 27776, 27648, 27520, 27392, + 27264, 27136, 27008, 26880, 26752, 26624, 26496, 26368, 26240, 26112, + 25984, 25856, 25728, 25600, 25472, 25344, 25216, 25088, 24960, 24832, + 24704, 24576, 24448, 24320, 24192, 24064, 23936, 23808, 23680, 23552, + 23424, 23296, 23168, 23040, 22912, 22784, 22656, 22528, 22400, 22272, + 22144, 22016, 21888, 21760, 21632, 21504, 21376, 21248, 21120, 20992, + 20864, 20736, 20608, 20480, 20352, 20224, 20096, 19968, 19840, 19712, + 19584, 19456, 19328, 19200, 19072, 18944, 18816, 18688, 18560, 18432, + 18304, 18176, 18048, 17920, 17792, 17664, 17536, 17408, 17280, 17152, + 17024, 16896, 16768, 16640, 16512, 16384, 16256, 16128, 16000, 15872, + 15744, 15616, 15488, 15360, 15232, 15104, 14976, 14848, 14720, 14592, + 14464, 14336, 14208, 14080, 13952, 13824, 13696, 13568, 13440, 13312, + 13184, 13056, 12928, 12800, 12672, 12544, 12416, 12288, 12160, 12032, + 11904, 11776, 11648, 11520, 11392, 11264, 11136, 11008, 10880, 10752, + 10624, 10496, 10368, 10240, 10112, 9984, 9856, 9728, 9600, 9472, + 9344, 9216, 9088, 8960, 8832, 8704, 8576, 8448, 8320, 8192, + 8064, 7936, 7808, 7680, 7552, 7424, 7296, 7168, 7040, 6912, + 6784, 6656, 6528, 6400, 6272, 6144, 6016, 5888, 5760, 5632, + 5504, 5376, 5248, 5120, 4992, 4864, 4736, 4608, 4480, 4352, + 4224, 4096, 3968, 3840, 3712, 3584, 3456, 3328, 3200, 3072, + 2944, 2816, 2688, 2560, 2432, 2304, 2176, 2048, 1920, 1792, + 1664, 1536, 1408, 1280, 1152, 1024, 896, 768, 640, 512, + 384, 256, +}; + +static const int blocks_length[] = { + 4096, 1024, 512, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 512, -1, -1, }; +static const jchar* blocks[] = { + blocks0, blocks1, blocks2, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, blocks14, NULL, NULL}; + +/** + * Information about each character. The low order 5 bits form the + * character type, the next bit is a flag for non-breaking spaces, and the + * next bit is a flag for mirrored directionality. The high order 9 bits + * form the offset into the attribute tables. Note that this limits the + * number of unique character attributes per plane to 512, which is not a + * problem as of Unicode version 4.0.0, but may soon become one. + */ +static const jchar data0[] = { + 8834, 8962, 9090, 9218, 9346, 9474, 9602, 9730, 9858, 9986, + 10114, 1109, 3225, 1238, 3225, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 143, 271, 143, 399, 271, 15, + 15, 15, 15, 15, 271, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 271, 271, 271, 143, 1801, 1929, 2057, 2185, 2313, + 2441, 2569, 2697, 2825, 2953, 1432, 664, 3161, 3225, 3161, + 664, 664, 3225, 664, 6807, 16256, 16256, 664, 16256, 16256, + 16256, 16256, 16256, 16256, 16256, 524, 664, 664, 792, 922, + 792, 664, 664, 1109, 1238, 664, 1305, 1432, 1556, 1432, + 1688, 10908, 1305, 11019, 11147, 6683, 11266, 10396, 664, 6683, + 11403, 10498, 11614, 11659, 11659, 11659, 664, 3329, 3457, 3585, + 3713, 3841, 3969, 4097, 4225, 4353, 4481, 4609, 4737, 4865, + 4993, 5121, 5249, 5377, 5505, 5633, 5761, 5889, 6017, 6145, + 6273, 6401, 6529, 1109, 664, 1238, 6683, 6807, 664, 664, + 664, 3225, 1109, 1238, 664, 664, 664, 664, 664, 664, + 664, 664, 664, 34189, 34318, 34448, 34576, 34704, 34832, 34960, + 33452, 10284, 664, 922, 922, 922, 922, 10396, 10396, 6683, + 10396, 10498, 10717, 3225, 10768, 10396, 6683, 6914, 7042, 7170, + 7298, 7426, 7554, 7682, 7810, 7938, 8066, 8194, 8322, 8450, + 8578, 8706, 19074, 11777, 11777, 11777, 11777, 11777, 11777, 11777, + 11777, 11777, 11777, 11777, 11777, 11777, 11777, 11777, 11777, 3225, + 11777, 11777, 11777, 11777, 11777, 11777, 11777, 11906, 15361, 15491, + 15618, 12289, 12418, 15873, 16001, 12289, 12418, 12289, 12418, 12289, + 12418, 12289, 12418, 12801, 12289, 12418, 12289, 12418, 12289, 12418, + 12930, 19074, 12034, 12034, 12034, 12034, 12034, 12034, 12034, 12034, + 12034, 12034, 12034, 12034, 12034, 12034, 12034, 12034, 3225, 12034, + 12034, 12034, 12034, 12034, 12034, 12034, 12162, 16129, 10498, 12289, + 12418, 12289, 12418, 12289, 12418, 12289, 12418, 12289, 12418, 12289, + 12418, 12289, 12418, 12289, 12418, 15746, 12289, 12418, 21404, 18310, + 18310, 18310, 18310, 16256, 21511, 21511, 12289, 12418, 12289, 12418, + 12289, 12418, 16256, 16256, 12289, 12418, 16256, 16256, 16256, 16256, + 16256, 16256, 18310, 24584, 16256, 16256, 16256, 16256, 15109, 15109, + 16256, 15109, 16256, 16256, 15109, 15109, 16256, 15109, 16256, 16256, + 15109, 16256, 16256, 11906, 32258, 11906, 16256, 11906, 19074, 33153, + 33153, 33281, 33281, 32515, 6683, 6683, 16256, 18310, 18310, 24584, + 16256, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, + 16256, 15109, 16256, 15109, 15109, 15109, 15109, 16256, 16256, 15109, + 15109, 15109, 15109, 15109, 15109, 15109, 16256, 16256, 16256, 15109, + 15109, 15109, 15109, 15109, 15109, 16256, 16256, 15109, 15109, 15109, + 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, + 21784, 21784, 15109, 15109, 15109, 15109, 15361, 15491, 15618, 15361, + 15491, 15618, 15361, 15491, 15618, 12289, 12418, 12289, 12418, 10498, + 10498, 10498, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, + 16256, 15109, 15109, 15109, 15109, 16256, 15109, 16256, 15109, 15109, + 16256, 15109, 15109, 15109, 15109, 15109, 16256, 16256, 18310, 15109, + 24584, 24584, 18310, 18310, 18310, 16256, 16256, 16256, 24584, 24584, + 16256, 16256, 24584, 24584, 18310, 16256, 16256, 12545, 12674, 12289, + 12418, 12289, 12418, 12289, 12418, 10498, 12289, 12418, 12289, 12418, + 12289, 12418, 12289, 12418, 11906, 11906, 11906, 11906, 11906, 30850, + 16256, 16256, 16256, 16256, 6683, 6683, 16256, 16256, 16256, 16256, + 18052, 16256, 16256, 16256, 664, 16256, 21633, 21633, 21633, 21633, + 21633, 21633, 21633, 21633, 21633, 21633, 21633, 21633, 21633, 21633, + 21633, 21633, 16256, 16256, 18052, 21784, 21784, 21784, 21784, 21784, + 21784, 21404, 21404, 21404, 21404, 21404, 18310, 18310, 21404, 21404, + 21404, 21404, 21404, 21404, 18310, 21404, 21404, 21404, 21404, 21404, + 21404, 16256, 16256, 21404, 15109, 16256, 16256, 16256, 16256, 16256, + 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, + 19842, 19970, 20097, 20097, 20097, 20226, 20354, 10498, 12289, 12418, + 12289, 12418, 12289, 12418, 12289, 12418, 12289, 12418, 11906, 12289, + 12418, 12289, 12418, 12289, 12418, 14721, 12289, 12418, 14721, 10498, + 10498, 12289, 12418, 14721, 12289, 17666, 10498, 10498, 17666, 10498, + 10498, 10498, 10498, 17666, 10498, 17794, 17794, 10498, 10498, 10498, + 10498, 17410, 10498, 10498, 17538, 10498, 10498, 10498, 10498, 10498, + 10498, 10498, 10498, 10498, 10498, 16386, 16514, 10498, 16642, 16642, + 10498, 16770, 10498, 16898, 10498, 10498, 10498, 10498, 13057, 12289, + 12418, 12289, 12418, 13185, 12289, 12418, 13313, 13313, 12289, 12418, + 10498, 13441, 13569, 13697, 12289, 12418, 13313, 13825, 13954, 14081, + 14209, 12289, 12418, 10498, 10498, 14081, 14337, 14466, 14593, 12418, + 14849, 14849, 12289, 12418, 12289, 12418, 14977, 12289, 12418, 10498, + 15109, 12289, 12418, 10498, 15234, 18310, 18310, 18310, 18310, 18310, + 18438, 18310, 18310, 18310, 18310, 18310, 18310, 18310, 18310, 18310, + 18310, 16256, 18310, 18310, 18310, 22168, 18310, 18310, 22168, 18310, + 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, + 16256, 24584, 16256, 16256, 16256, 16256, 15109, 15109, 16256, 15109, + 15109, 15109, 15109, 16256, 16256, 16256, 15109, 15109, 16256, 15109, + 16256, 15109, 15109, 16256, 15109, 15109, 16256, 15109, 15109, 16256, + 16256, 18310, 16256, 24584, 24584, 24584, 16256, 15109, 15109, 15109, + 15109, 15109, 15109, 15109, 15109, 16256, 15109, 15109, 15109, 16256, + 16256, 16256, 16256, 24584, 24584, 21784, 16256, 16256, 16256, 16256, + 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, + 16256, 16256, 24464, 24464, 24464, 10396, 10396, 16256, 16256, 16256, + 664, 664, 24713, 24841, 24969, 25097, 25225, 25353, 25481, 25609, + 25737, 25865, 16256, 16256, 16256, 16256, 16256, 16256, 18310, 15109, + 16256, 15109, 15109, 15109, 15109, 15109, 15109, 16256, 16256, 16256, + 15109, 15109, 16256, 16256, 16256, 15109, 15109, 15109, 16256, 16256, + 16256, 15109, 15109, 15109, 15109, 15109, 15109, 16256, 16256, 15109, + 15109, 15109, 16256, 16256, 16256, 21890, 21890, 21890, 21890, 21890, + 21890, 21890, 21890, 21890, 21890, 21890, 21890, 21890, 21890, 21890, + 21890, 11906, 16256, 21784, 22036, 16256, 16256, 16256, 16256, 16256, + 18310, 18310, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, + 16256, 22661, 22661, 22661, 22661, 22661, 22661, 22661, 22661, 22661, + 22661, 22661, 22661, 22661, 22661, 22661, 22661, 27541, 27670, 16642, + 10498, 10498, 17026, 10498, 10498, 10498, 10498, 17154, 17282, 10498, + 10498, 10498, 10498, 10498, 17282, 22416, 22416, 22416, 22416, 16256, + 16256, 16256, 16256, 16256, 16256, 16256, 16256, 1432, 22552, 10396, + 10396, 20097, 10396, 10396, 10396, 10396, 20097, 10396, 10396, 10498, + 20097, 20097, 20097, 10498, 10498, 17922, 10498, 10498, 10498, 10498, + 10498, 10498, 10498, 10498, 10498, 10498, 10498, 10498, 10498, 10498, + 10498, 10498, 18052, 18052, 18052, 18052, 18052, 18052, 18052, 18052, + 18052, 18052, 18052, 18052, 18052, 18052, 18052, 18052, 18180, 18180, + 18052, 18052, 18052, 18052, 18052, 6683, 6683, 6683, 6683, 6683, + 6683, 6683, 6683, 6683, 18052, 6683, 22036, 15109, 15109, 15109, + 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, + 15109, 15109, 16256, 15109, 15109, 15109, 15109, 15109, 15109, 15109, + 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 18052, + 18052, 6683, 6683, 6683, 6683, 18180, 18180, 18180, 18180, 18180, + 18180, 18180, 18180, 18180, 18180, 18052, 18052, 6683, 6683, 6683, + 6683, 6683, 6683, 6683, 6683, 6683, 6683, 6683, 6683, 6683, + 6683, 6683, 6683, 11906, 32258, 11906, 16256, 11906, 19074, 32769, + 32769, 32769, 32769, 32515, 6683, 6683, 6683, 10396, 44170, 44298, + 44426, 44554, 44682, 44810, 44938, 45066, 45194, 18310, 18310, 18310, + 18310, 18310, 18310, 18310, 18310, 16256, 18310, 18310, 18310, 18310, + 18310, 18310, 18310, 18310, 18310, 18310, 18310, 18310, 18310, 18310, + 18310, 18310, 16256, 21404, 21404, 25995, 26123, 26251, 26379, 21404, + 21404, 21404, 21404, 21404, 21404, 21404, 21404, 21404, 21404, 21404, + 10396, 3225, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, + 10396, 10396, 10396, 10396, 16256, 10396, 16256, 10396, 10396, 10396, + 10396, 16256, 10396, 10396, 10396, 10396, 16256, 16256, 10396, 10396, + 10396, 10396, 10396, 21404, 10396, 10396, 10396, 10396, 10396, 3225, + 3225, 3225, 3225, 3225, 27541, 27670, 664, 10396, 10396, 10396, + 10396, 10396, 10396, 10396, 10396, 10396, 10396, 16256, 10396, 10396, + 10396, 10396, 10396, 10396, 10396, 1109, 1238, 1109, 1238, 1109, + 1238, 1109, 1238, 29579, 29707, 29835, 29963, 30091, 30219, 30347, + 30475, 30603, 43915, 29579, 29707, 29835, 29963, 30091, 30219, 18310, + 18310, 18310, 18310, 18310, 18310, 18310, 18310, 16256, 16256, 16256, + 16256, 16256, 18310, 18310, 18310, 18310, 18310, 18310, 18310, 18310, + 18310, 18310, 18310, 18310, 18310, 18310, 24584, 24584, 16256, 16256, + 16256, 24584, 24584, 24584, 16256, 24584, 24584, 24584, 18310, 16256, + 16256, 18310, 24584, 24584, 16256, 15109, 15109, 15109, 15109, 15109, + 15109, 15109, 15109, 16256, 16256, 15109, 15109, 15109, 16256, 15109, + 16256, 15109, 16256, 16256, 15109, 15109, 16256, 15109, 15109, 15109, + 15109, 15109, 16256, 15109, 15109, 16256, 24584, 18310, 18310, 18310, + 18310, 16256, 16256, 24584, 24584, 16256, 16256, 24584, 24584, 18310, + 16256, 16256, 20482, 20610, 20738, 10498, 20865, 20994, 3225, 12289, + 12418, 21121, 12289, 12418, 16256, 16256, 16256, 16256, 6683, 6683, + 18561, 664, 18689, 18689, 18689, 16256, 18817, 16256, 18945, 18945, + 11777, 11777, 16256, 11777, 11777, 11777, 11777, 11777, 11777, 11777, + 11777, 11777, 19202, 19330, 19330, 19330, 12034, 12034, 19458, 12034, + 12034, 12034, 12034, 12034, 12034, 12034, 12034, 12034, 19586, 19714, + 19714, 16256, 18310, 18310, 24584, 16256, 15109, 15109, 15109, 15109, + 15109, 15109, 16256, 16256, 16256, 16256, 15109, 15109, 15109, 15109, + 16256, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, + 16256, 15109, 16256, 16256, 16256, 15109, 15109, 15109, 15109, 16256, + 16256, 18310, 15109, 24584, 24584, 18310, 24584, 24584, 24584, 24584, + 24584, 24584, 18310, 18310, 18310, 16256, 16256, 16256, 16256, 21249, + 21249, 21249, 21249, 21249, 21249, 21249, 21249, 21249, 21249, 21249, + 21249, 21249, 21249, 21249, 21249, 20610, 20610, 20610, 20610, 20610, + 20610, 20610, 20610, 20610, 20610, 20610, 20610, 20610, 20610, 20610, + 20610, 20097, 12289, 12418, 12289, 12418, 12289, 12418, 12289, 12418, + 12289, 12418, 12289, 12418, 12289, 12418, 16256, 16256, 16256, 16256, + 16256, 16256, 24713, 24841, 24969, 25097, 25225, 25353, 25481, 25609, + 25737, 25865, 27403, 27403, 27403, 27403, 27403, 27403, 21404, 18310, + 21404, 18310, 21404, 18310, 27541, 27670, 27541, 27670, 24584, 24584, + 18310, 18310, 18310, 16256, 18310, 16256, 24584, 24584, 24584, 24584, + 24584, 24584, 24584, 24584, 18310, 24584, 24584, 18310, 18310, 18310, + 18310, 18310, 18310, 18310, 18310, 24584, 24584, 24584, 24584, 18310, + 16256, 16256, 21784, 21784, 21784, 21784, 21784, 21784, 21784, 21784, + 24841, 24969, 25097, 25225, 25353, 25481, 25609, 18310, 18310, 18310, + 18310, 18310, 18310, 18310, 18310, 18310, 16256, 16256, 16256, 16256, + 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 11906, 11906, + 11906, 11906, 11906, 16256, 16256, 16256, 16256, 16256, 22277, 18310, + 22277, 22277, 16256, 22277, 22277, 16256, 22277, 22277, 22277, 22277, + 22277, 22277, 22277, 22277, 22277, 22277, 22277, 22277, 22277, 22277, + 22277, 22277, 16256, 16256, 16256, 16256, 16256, 24584, 24584, 16256, + 16256, 16256, 16256, 16256, 16256, 16256, 15109, 16256, 15109, 15109, + 16256, 15109, 15109, 15109, 15109, 15109, 16256, 16256, 18310, 15109, + 24584, 18310, 18310, 18310, 18310, 18310, 16256, 18310, 18310, 24584, + 16256, 24584, 24584, 18310, 16256, 16256, 664, 664, 792, 922, + 792, 664, 664, 1109, 1238, 664, 1305, 1432, 1556, 1432, + 1688, 22277, 22277, 22277, 22168, 22168, 16256, 16256, 16256, 16256, + 16256, 16256, 16256, 16256, 16256, 16256, 16256, 24584, 16256, 16256, + 16256, 16256, 16256, 16256, 16256, 16256, 11659, 11659, 11659, 11659, + 11659, 11659, 11659, 11659, 11659, 11659, 11659, 11659, 29579, 22921, + 23049, 23177, 23305, 23433, 23561, 23689, 23817, 23945, 24073, 792, + 24216, 24216, 22552, 22661, 22661, 22661, 22661, 22552, 22661, 18310, + 18310, 18310, 18310, 18310, 18310, 18310, 22416, 21511, 18310, 21511, + 21511, 21511, 18310, 18310, 18310, 18310, 18310, 18310, 16256, 16256, + 16256, 16256, 16256, 22552, 16256, 16256, 16256, 22552, 22552, 22552, + 22552, 22552, 22552, 22552, 22552, 22552, 22552, 22552, 22552, 22552, + 22552, 16256, 24464, 22788, 22661, 22661, 22661, 22661, 22661, 22661, + 22661, 22661, 22661, 22661, 18310, 18310, 18310, 18310, 18310, 18310, + 18310, 18310, 18310, 18310, 18310, 16256, 16256, 22661, 22661, 22661, + 22661, 22661, 16256, 22661, 22661, 22661, 22661, 22661, 22661, 22661, + 22661, 22661, 22661, 22661, 16256, 16256, 16256, 16256, 16256, 16256, + 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 24841, 24969, + 25097, 25225, 25353, 25481, 25609, 25737, 25865, 26763, 27787, 27915, + 28043, 28171, 28299, 28427, 28555, 28683, 26891, 28811, 16256, 16256, + 16256, 1801, 1929, 2057, 2185, 2313, 2441, 2569, 2697, 2825, + 2953, 22661, 22661, 22661, 24348, 24348, 22661, 18310, 22661, 22661, + 22661, 22661, 22661, 22661, 22661, 22661, 22661, 22661, 22661, 22661, + 22661, 22661, 22661, 16256, 16256, 24464, 24464, 24464, 24464, 16256, + 16256, 16256, 16256, 16256, 16256, 24464, 24464, 24464, 24464, 24464, + 24464, 18310, 18310, 18310, 18310, 18310, 22788, 22788, 18310, 18310, + 10396, 18310, 18310, 18310, 18310, 22661, 22661, 22661, 22661, 22661, + 22661, 22661, 22661, 22661, 22661, 22661, 22661, 50458, 10396, 16256, + 16256, 18310, 22661, 16256, 16256, 16256, 16256, 16256, 16256, 16256, + 16256, 16256, 16256, 16256, 16256, 16256, 16256, 1238, 664, 1109, + 1238, 664, 6807, 15109, 15109, 15109, 15109, 15109, 15109, 15109, + 15109, 15109, 15109, 16256, 16256, 16256, 16256, 24584, 24584, 16256, + 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 16256, 15109, + 15109, 15109, 15109, 15109, 16256, 16256, 16256, 16256, 18310, 18310, + 24584, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, + 15109, 15109, 15109, 27541, 27670, 16256, 16256, 16256, 524, 15109, + 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, + 15109, 15109, 15109, 15109, 16256, 16256, 16256, 16256, 16256, 15109, + 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, + 6807, 18052, 18052, 18052, 15109, 15109, 15109, 18052, 15109, 15109, + 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, + 15109, 15109, 15109, 16256, 16256, 18310, 15109, 24584, 24584, 24584, + 24584, 24584, 16256, 27142, 24584, 24584, 16256, 24584, 24584, 18310, + 18310, 16256, 16256, 16256, 16256, 18310, 18310, 16256, 16256, 18310, + 18310, 18310, 16256, 16256, 15109, 15109, 15109, 15109, 15109, 15109, + 15109, 16256, 16256, 18310, 18310, 6683, 6683, 18052, 18052, 15109, + 18310, 18310, 18310, 18310, 16256, 16256, 16256, 15109, 15109, 15109, + 15109, 15109, 15109, 15109, 15109, 15109, 16256, 16256, 21784, 16256, + 16256, 16256, 16256, 15109, 15109, 18310, 18310, 21784, 21784, 24713, + 24841, 24969, 25097, 25225, 25353, 25481, 25609, 25737, 25865, 21784, + 21784, 16256, 16256, 16256, 16256, 15109, 15109, 18310, 18310, 16256, + 16256, 24713, 24841, 24969, 25097, 25225, 25353, 25481, 25609, 25737, + 25865, 16256, 16256, 15109, 15109, 16256, 16256, 15109, 15109, 922, + 922, 25995, 26123, 26251, 26379, 26507, 26635, 21404, 16256, 16256, + 16256, 16256, 16256, 18310, 18310, 15109, 15109, 15109, 16256, 16256, + 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 15109, + 18310, 15109, 15109, 18310, 18310, 18310, 18310, 18310, 18310, 18310, + 16256, 16256, 16256, 16256, 922, 16256, 16256, 16256, 16256, 16256, + 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 15109, + 15109, 15109, 15109, 15109, 15109, 18052, 18310, 18310, 18310, 18310, + 18310, 18310, 18310, 18310, 21784, 18310, 18310, 15109, 15109, 15109, + 15109, 16256, 16256, 16256, 16256, 24713, 24841, 24969, 25097, 25225, + 25353, 25481, 25609, 25737, 25865, 21784, 21784, 21784, 21784, 21784, + 21784, 26763, 26891, 27019, 10396, 10396, 10396, 10396, 10396, 10396, + 922, 10396, 16256, 16256, 16256, 16256, 16256, 18310, 24584, 24584, + 24584, 24584, 16256, 18310, 18310, 18310, 16256, 18310, 18310, 18310, + 18310, 16256, 16256, 15109, 15109, 15109, 15109, 16256, 15109, 15109, + 15109, 15109, 15109, 16256, 16256, 18310, 15109, 24584, 27142, 24584, + 18310, 18310, 18310, 16256, 16256, 24584, 24584, 24584, 16256, 24584, + 24584, 24584, 18310, 16256, 16256, 15109, 15109, 15109, 15109, 15109, + 15109, 15109, 16256, 16256, 16256, 18310, 16256, 16256, 16256, 16256, + 24584, 24584, 16256, 15109, 15109, 15109, 15109, 15109, 15109, 15109, + 15109, 15109, 15109, 15109, 21784, 21784, 21784, 28938, 29066, 15109, + 18310, 15109, 15109, 18310, 18310, 18310, 18310, 18310, 18310, 16256, + 18310, 18310, 15109, 16256, 16256, 15109, 15109, 15109, 15109, 15109, + 16256, 18052, 16256, 18310, 18310, 18310, 18310, 18310, 18310, 16256, + 16256, 15109, 21404, 21404, 21404, 21784, 21784, 21784, 21784, 21784, + 21784, 21784, 21784, 27320, 21784, 21784, 21784, 18310, 24584, 18310, + 16256, 16256, 16256, 18310, 18310, 24584, 18310, 16256, 16256, 16256, + 16256, 16256, 16256, 15109, 15109, 15109, 15109, 15109, 15109, 24584, + 24584, 18310, 18310, 16256, 16256, 16256, 16256, 16256, 16256, 20097, + 20097, 10396, 20097, 10498, 15109, 15109, 15109, 15109, 10498, 10396, + 10396, 16256, 10498, 20097, 20097, 20097, 20097, 20097, 20097, 20097, + 20097, 20097, 20097, 20097, 20097, 20097, 20097, 20097, 20097, 16256, + 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 15109, + 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 16256, + 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, + 16256, 29194, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, + 16256, 16256, 16256, 16256, 16256, 16256, 16256, 15109, 15109, 18310, + 18310, 18310, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, + 16256, 16256, 16256, 15109, 15109, 18310, 18310, 18310, 21784, 21784, + 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 15109, + 15109, 18310, 18310, 16256, 16256, 16256, 16256, 16256, 16256, 16256, + 16256, 16256, 16256, 16256, 16256, 15109, 16256, 18310, 18310, 16256, + 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, + 16256, 15109, 15109, 15109, 15109, 29328, 29328, 24584, 18310, 18310, + 18310, 18310, 18310, 18310, 18310, 24584, 24584, 24584, 24584, 18310, + 18310, 30728, 30728, 30728, 16256, 16256, 16256, 16256, 18310, 18310, + 18310, 18310, 21784, 21784, 21784, 18052, 21784, 21784, 21784, 922, + 15109, 18310, 16256, 16256, 43275, 43403, 43531, 43659, 43787, 29579, + 29707, 29835, 29963, 30091, 30219, 30347, 30475, 30603, 43915, 29451, + 29579, 29707, 29835, 29963, 30091, 30219, 30347, 30475, 30603, 16256, + 16256, 16256, 16256, 16256, 16256, 664, 664, 664, 664, 664, + 664, 22036, 664, 664, 664, 664, 18310, 18310, 18310, 524, + 16256, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, 15109, + 18310, 16256, 16256, 16256, 16256, 16256, 16256, 20097, 20097, 20097, + 10498, 10396, 20097, 10396, 10396, 10396, 20097, 20097, 20097, 20097, + 20097, 10396, 10396, 3225, 10396, 3225, 10396, 10396, 10396, 10396, + 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, + 10396, 10396, 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225, + 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3161, 3161, + 3161, 3161, 3161, 3161, 3225, 3225, 1109, 1238, 3225, 3225, + 3225, 1109, 1238, 1109, 1238, 1109, 1238, 1109, 1238, 1109, + 1238, 1109, 1238, 1109, 1238, 3225, 3225, 3161, 3161, 3161, + 3161, 3161, 3225, 3225, 3225, 3225, 3225, 3161, 3225, 3161, + 3161, 3161, 3161, 3161, 3161, 3161, 3225, 3225, 3225, 3225, + 3225, 3161, 3225, 3161, 3225, 3161, 3161, 3161, 3161, 3161, + 3161, 3161, 3161, 3225, 3225, 3161, 3161, 3161, 3161, 3161, + 3161, 3161, 3161, 3225, 3161, 3225, 3161, 3161, 3161, 3225, + 3225, 3161, 3161, 3225, 3225, 3225, 3225, 3225, 3225, 3161, + 3225, 3225, 3225, 3161, 3161, 3161, 3161, 3161, 3225, 3161, + 3225, 3225, 3161, 3161, 3225, 3225, 3225, 3225, 3161, 3161, + 3161, 3161, 3161, 3161, 3161, 3161, 3161, 3161, 3161, 3161, + 3161, 3225, 3225, 3161, 3225, 3161, 3225, 3225, 3161, 3225, + 3161, 3161, 3161, 3161, 3225, 3225, 3225, 3161, 3161, 3161, + 3161, 3161, 3161, 3225, 3225, 3225, 3161, 3225, 3225, 3225, + 3225, 3161, 3161, 3225, 3225, 3225, 3225, 3225, 3225, 3161, + 3161, 3161, 3225, 3225, 3225, 3225, 3225, 3161, 3225, 3225, + 3225, 3225, 3225, 3225, 3225, 3225, 3161, 3225, 3225, 3225, + 3225, 3225, 3225, 3225, 3161, 3161, 3225, 3225, 3225, 3225, + 3225, 3225, 3225, 10396, 10396, 10396, 10396, 10396, 3225, 3225, + 10396, 10396, 10396, 10396, 20097, 10396, 35969, 10396, 20097, 10396, + 36097, 36225, 20097, 20097, 10908, 10498, 18052, 18052, 10498, 10498, + 10498, 10498, 10498, 10498, 10498, 10498, 10498, 10498, 16256, 16256, + 16256, 16256, 30978, 30978, 30978, 30978, 30978, 30978, 30978, 30978, + 31105, 31105, 31105, 31105, 31105, 31105, 31105, 31105, 30978, 30978, + 30978, 30978, 30978, 30978, 16256, 16256, 31105, 31105, 31105, 31105, + 31105, 31105, 16256, 16256, 11906, 30978, 19074, 30978, 19074, 30978, + 19074, 30978, 16256, 31105, 16256, 31105, 16256, 31105, 16256, 31105, + 31234, 31234, 31362, 31362, 31362, 31362, 31490, 31490, 31618, 31618, + 31746, 31746, 31874, 31874, 16256, 16256, 32002, 32002, 32002, 32002, + 32002, 32002, 32002, 32002, 32131, 32131, 32131, 32131, 32131, 32131, + 32131, 32131, 30978, 30978, 11906, 32258, 11906, 16256, 11906, 19074, + 31105, 31105, 32385, 32385, 32515, 6683, 32642, 6683, 30978, 30978, + 19074, 19074, 16256, 16256, 11906, 19074, 31105, 31105, 32897, 32897, + 16256, 6683, 6683, 6683, 30978, 30978, 19074, 19074, 11906, 20738, + 11906, 19074, 31105, 31105, 33025, 33025, 21121, 6683, 6683, 6683, + 524, 524, 524, 524, 524, 524, 524, 33452, 524, 524, + 524, 33548, 24464, 24464, 29328, 33680, 22036, 33844, 22036, 22036, + 22036, 22036, 664, 664, 33949, 34078, 27541, 33949, 33949, 34078, + 27541, 33949, 1432, 664, 1432, 16256, 664, 1432, 664, 664, + 22036, 27541, 27670, 27541, 27670, 27541, 27670, 792, 792, 792, + 792, 792, 664, 664, 664, 664, 10717, 11614, 664, 664, + 664, 664, 6807, 35083, 10498, 16256, 16256, 35211, 35339, 35467, + 35595, 35723, 35851, 1305, 1305, 3225, 1109, 1238, 10498, 35083, + 11403, 11019, 11147, 35211, 35339, 35467, 35595, 35723, 35851, 1305, + 1305, 3225, 1109, 1238, 16256, 922, 922, 922, 922, 922, + 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, + 922, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, + 16256, 16256, 16256, 16256, 16256, 18310, 18310, 18310, 18310, 18310, + 18310, 18310, 18310, 18310, 18310, 18310, 18310, 18310, 21511, 21511, + 21511, 3225, 3225, 3225, 3161, 3161, 3161, 3161, 3225, 3225, + 3225, 3225, 3225, 3161, 3161, 3161, 3225, 3225, 3161, 3161, + 3161, 3161, 3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225, + 3225, 3161, 3161, 3161, 3161, 3161, 3225, 3225, 3225, 3225, + 3225, 3161, 3161, 3161, 3225, 3225, 3161, 3161, 3225, 3225, + 3161, 3161, 3161, 3161, 3161, 3161, 3161, 3161, 3161, 3161, + 3161, 3161, 3161, 3161, 3161, 3161, 3225, 3225, 3225, 3225, + 3225, 3161, 3161, 3225, 3225, 3225, 3225, 3161, 3161, 3161, + 3161, 3225, 3161, 1305, 1305, 3225, 3161, 3161, 3225, 3225, + 3225, 3161, 3161, 3161, 3161, 3225, 3161, 3225, 3161, 3225, + 3225, 3225, 3225, 3161, 3161, 3161, 3161, 3161, 3161, 3161, + 3161, 3161, 3161, 3161, 3161, 3161, 3225, 3161, 3161, 3225, + 3225, 1109, 1238, 1109, 1238, 3161, 3225, 3225, 3225, 3225, + 20097, 10498, 10498, 10498, 10498, 10396, 3225, 16256, 16256, 16256, + 16256, 36362, 36490, 36618, 36746, 36874, 37002, 37130, 37258, 37386, + 37514, 37642, 37770, 37898, 38026, 38154, 38282, 38410, 38538, 38666, + 38794, 38922, 39050, 39178, 39306, 39434, 39562, 39690, 39818, 39946, + 40074, 40202, 40330, 40458, 40586, 40714, 40842, 16256, 16256, 16256, + 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 3225, + 10396, 10396, 3225, 10396, 10396, 3225, 10396, 10396, 10396, 10396, + 10396, 10396, 10396, 3225, 10396, 10396, 10396, 10396, 10396, 10396, + 10396, 10396, 3161, 3161, 3161, 3161, 10396, 10396, 10396, 10396, + 10396, 10396, 10396, 1109, 1238, 10396, 10396, 10396, 10396, 10396, + 10396, 21404, 21404, 21404, 21404, 21404, 21404, 21404, 21404, 21404, + 21404, 21404, 21404, 21404, 21404, 21404, 21404, 10396, 10396, 16256, + 21404, 48267, 48395, 48523, 48651, 48779, 48907, 49035, 49163, 49291, + 49419, 49547, 49675, 49803, 49931, 50059, 30347, 30475, 30603, 43915, + 10396, 16256, 16256, 16256, 10396, 10396, 10396, 10396, 10396, 10396, + 10396, 10396, 10396, 10396, 10396, 10396, 10396, 10396, 16256, 16256, + 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, + 16256, 16256, 16256, 41355, 41483, 41611, 41739, 41867, 41995, 42123, + 42251, 11403, 11019, 11147, 35211, 35339, 35467, 35595, 35723, 35851, + 40971, 41099, 41227, 41355, 41483, 41611, 41739, 41867, 41995, 42123, + 42251, 21404, 21404, 21404, 21404, 21404, 21404, 21404, 21404, 21404, + 21404, 21404, 21404, 10396, 10396, 10396, 10396, 21404, 21404, 21404, + 21404, 21404, 21404, 21404, 21404, 21404, 21404, 21404, 21404, 21404, + 21404, 21404, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, + 16256, 16256, 16256, 16256, 25995, 26123, 26251, 26379, 45707, 45835, + 45963, 46091, 46219, 26763, 21404, 21404, 21404, 21404, 21404, 21404, + 42396, 42396, 42396, 42396, 42396, 42396, 42396, 42396, 42396, 42396, + 42396, 42396, 42396, 42396, 42396, 42396, 42524, 42524, 42524, 42524, + 42524, 42524, 42524, 42524, 42524, 42524, 42524, 42524, 42524, 42524, + 42524, 42524, 35083, 42635, 42763, 42891, 43019, 43147, 22036, 18052, + 18052, 18052, 18052, 18052, 10396, 10396, 45322, 45450, 45578, 18052, + 15109, 664, 10396, 10396, 10396, 16256, 16256, 16256, 10396, 16256, + 10396, 10396, 10396, 10396, 10396, 10396, 10396, 16256, 3225, 3225, + 3161, 3161, 3161, 3161, 1109, 1238, 1109, 1238, 1109, 1238, + 16256, 16256, 16256, 16256, 524, 664, 664, 664, 10396, 18052, + 15109, 44042, 1109, 1238, 1109, 1238, 1109, 1238, 1109, 1238, + 10396, 10396, 1109, 1238, 1109, 1238, 1109, 1238, 1109, 1238, + 22036, 27541, 27670, 27670, 10396, 46347, 46475, 46603, 46731, 46859, + 46987, 47115, 47243, 47371, 47499, 47627, 47755, 47883, 48011, 48139, + 50195, 50195, 50195, 50195, 50195, 50195, 50195, 50195, 50195, 50195, + 50195, 50195, 50195, 50195, 50195, 50195, 50322, 50322, 50322, 50322, + 50322, 50322, 50322, 50322, 50322, 50322, 50322, 50322, 50322, 50322, + 50322, 50322, 11906, 11906, 11906, 19074, 19074, 11906, 11906, 16256, + 16256, 16256, 16256, 16256, 16256, 16256, 16256, 16256, 22277, 22277, + 22277, 22277, 22277, 22277, 22277, 22277, 22277, 1305, 22277, 22277, + 22277, 22277, 22277, 22277, 22277, 16256, 22277, 22277, 22277, 22277, + 22277, 16256, 22277, 16256, 664, 22036, 22036, 6807, 6807, 27541, + 27670, 27541, 27670, 27541, 27670, 27541, 27670, 27541, 27670, 27541, + 27670, 664, 664, 27541, 27670, 664, 664, 664, 664, 6807, + 6807, 6807, 664, 664, 1305, 1556, 3225, 3225, 3225, 16256, + 664, 922, 792, 664, 16256, 16256, 16256, 16256, 8834, 8962, + 9090, 9218, 9346, 9474, 9602, 9730, 9858, 9986, 10114, 1109, + 3225, 1238, 3225, 1109, 922, 922, 3225, 6683, 10396, 922, + 922, 16256, 10396, 3225, 3225, 3225, 3225, 10396, 10396, 16256, +}; + +static const jchar data1[] = { + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 128, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 128, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 128, + 5, 5, 128, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 128, 128, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 6529, 6529, 6529, + 6529, 6529, 6529, 6529, 6529, 6529, 6529, 6529, 6529, 6529, + 6529, 6529, 6529, 6529, 6529, 6529, 6529, 6529, 6529, 6529, + 6529, 6529, 6529, 6529, 6529, 6529, 6529, 6529, 6529, 6529, + 6529, 6529, 6529, 6529, 6529, 6529, 6529, 6658, 6658, 6658, + 6658, 6658, 6658, 6658, 6658, 6658, 6658, 6658, 6658, 6658, + 6658, 6658, 6658, 6658, 6658, 6658, 6658, 6658, 6658, 6658, + 6658, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 128, 128, 128, 128, 128, + 280, 408, 540, 128, 128, 128, 128, 651, 779, 907, + 1035, 1163, 1291, 1419, 1547, 1675, 1803, 1931, 2059, 2187, + 2315, 2443, 2571, 2699, 2827, 2955, 3083, 3211, 3339, 3467, + 3595, 3723, 3851, 3979, 4107, 4235, 4363, 4491, 4619, 4747, + 4875, 5003, 5131, 5259, 5387, 5515, 5643, 5771, 5899, 6027, + 6155, 6283, 128, 128, 128, 540, 540, 540, 540, 540, + 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, + 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, + 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, + 540, 540, 8200, 8200, 8326, 8326, 8326, 540, 540, 540, + 8200, 8200, 8200, 8200, 8200, 8200, 8464, 8464, 8464, 8464, + 8464, 8464, 8464, 8464, 8326, 8326, 8326, 8326, 8326, 540, + 540, 8326, 8326, 8326, 8326, 8326, 8326, 8326, 540, 540, + 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, + 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, + 540, 540, 540, 540, 540, 540, 540, 540, 8326, 8326, + 8326, 8326, 540, 540, 540, 540, 540, 540, 540, 540, + 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, + 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, + 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, + 540, 128, 128, 128, 540, 540, 540, 540, 540, 540, + 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, + 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, + 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, + 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, + 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, + 540, 540, 540, 540, 540, 540, 540, 540, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 6410, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 128, 651, + 1163, 1803, 2315, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 128, 280, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 128, + 128, 6793, 6921, 7049, 7177, 7305, 7433, 7561, 7689, 7817, + 7945, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 8069, 8069, 8069, 8069, 8069, 8069, 128, + 128, 8069, 128, 8069, 8069, 8069, 8069, 8069, 8069, 8069, + 8069, 8069, 8069, 8069, 8069, 8069, 8069, 8069, 8069, 8069, + 8069, 8069, 8069, 8069, 8069, 8069, 8069, 8069, 8069, 8069, + 8069, 8069, 8069, 8069, 8069, 8069, 8069, 8069, 8069, 8069, + 8069, 8069, 8069, 8069, 8069, 8069, 8069, 128, 8069, 8069, + 128, 128, 128, 8069, 128, 128, 8069, 8604, 8604, 8604, + 8604, 8604, 8604, 8604, 8604, 8604, 8604, 8604, 8604, 8604, + 8604, 8604, 8604, 8604, 8604, 8604, 8604, 8604, 8604, 8604, + 8604, 8604, 8604, 8604, 8604, 8604, 8604, 8604, 8604, 8604, + 8604, 8604, 8604, 8604, 8604, 8604, 8604, 8604, 8604, 8604, + 8604, 8604, 8604, 8604, 8604, 8604, 8604, 8604, 8604, 8604, + 8604, 8604, 8604, 8604, 8604, 8604, 8604, 8604, 8604, 8604, + 8604, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 8705, 8985, 8834, 8834, 8834, 8834, 8834, 8834, + 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, + 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8985, + 8834, 8834, 8834, 8834, 8834, 8834, 8705, 8705, 8705, 8705, + 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, + 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, + 8705, 8985, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, + 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, + 8834, 8834, 8834, 8834, 128, 8834, 8834, 8834, 8834, 8834, + 8834, 8834, 8834, 8834, 8834, 8834, 8705, 8705, 8705, 8705, + 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, + 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, + 8705, 8705, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, + 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, + 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8705, 8705, + 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, + 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, + 8705, 8705, 8705, 8705, 8834, 8834, 8834, 8834, 8834, 8834, + 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, + 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, + 128, 128, 128, 128, 8705, 8705, 8705, 8705, 8705, 8705, + 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, + 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8834, 8834, + 8834, 8834, 8834, 8834, 8834, 128, 8834, 8834, 8834, 8834, + 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, + 8834, 8834, 8834, 8834, 8705, 8705, 8705, 8705, 8705, 8705, + 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, + 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 128, 8705, + 128, 128, 128, 8705, 8705, 8705, 8705, 8705, 8705, 8705, + 128, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, + 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, + 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8705, 8705, 8705, + 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, + 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8834, 8834, 8834, + 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, + 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, + 8834, 8834, 8834, 8705, 128, 8705, 8705, 128, 128, 8705, + 128, 128, 8705, 8705, 128, 128, 8705, 8705, 8705, 8705, + 128, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8705, 8834, + 8834, 8834, 8834, 128, 8834, 128, 8834, 8834, 8834, 8834, + 8705, 8705, 128, 8705, 8705, 8705, 8705, 128, 128, 8705, + 8705, 8705, 8705, 8705, 8705, 8705, 8705, 128, 8705, 8705, + 8705, 8705, 8705, 8705, 8705, 128, 8834, 8834, 8834, 8834, + 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, + 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, 8834, + 8834, 8834, 8705, 8705, 128, 8705, 8705, 8705, 8705, 128, + 8834, 8834, 8834, 8985, 8834, 8834, 8834, 8834, 8834, 8834, + 128, 128, 128, 128, 9097, 9225, 9353, 9481, 9609, 9737, + 9865, 9993, 10121, 10249, 9097, 9225, 9353, 9481, 9609, 9737, + 9865, 9993, 10121, 10249, 9097, 9225, 9353, 9481, 9609, 9737, + 9865, 9993, 10121, 10249, 9097, 9225, 9353, 9481, 9609, 9737, + 9865, 9993, 10121, 10249, 9097, 9225, 9353, 9481, 9609, 9737, + 9865, 9993, 10121, 10249, +}; + +static const jchar data2[] = { + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, +}; + +static const jchar data14[] = { + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, +}; + +static const int data_length[] = { + 3960, 1504, 256, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 383, -1, -1, }; +static const jchar* data[] = { + data0, data1, data2, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, data14, NULL, NULL}; + + +/** + * This is the attribute table for computing the numeric value of a + * character. The value is -1 if Unicode does not define a value, -2 + * if the value is not a positive integer, otherwise it is the value. + */ +static const jshort numValue0[] = { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + -1, -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, -1, -1, -1, -1, -1, -1, 2, 3, -1, 1, -1, + -2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, + 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, 0, 1, + 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, -1, + 16, 10, 100, 1000, -1, -1, -2, -1, -1, 20, 30, 40, 50, + 60, 70, 80, 90, 10000, 17, 18, 19, -1, 0, 1, 2, 3, + 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 0, 4, 5, 6, 7, 8, 9, -1, -1, -1, 1, 2, + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 50, 100, 500, + 1000, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 50, 100, 500, 1000, 1000, 5000, 10000, -1, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, -1, -1, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 10, 0, 1, 2, 3, 4, 5, 6, + 7, 8, 9, 10, 20, 30, 5, 6, 7, 8, 9, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, -1, -1, -1, +}; + +static const jshort numValue1[] = { + -1, -1, -1, -1, -1, 1, 2, 3, 4, 5, 6, 7, 8, + 9, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 200, 300, + 400, 500, 600, 700, 800, 900, 1000, 2000, 3000, 4000, 5000, 6000, 7000, + 8000, 9000, 10000, 20000, 30000, -3, -4, -5, -6, -7, -8, -1, -1, + -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, + -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, + 7, 8, 9, +}; + +static const jshort numValue2[] = { + -1, -1, +}; + +static const jshort numValue14[] = { + -1, -1, -1, +}; + +static const int numValue_length[] = { + 395, 81, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, -1, -1, }; +static const jshort* numValue[] = { + numValue0, numValue1, numValue2, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, numValue14, NULL, NULL}; + + + +/** + * This is the attribute table for computing the uppercase representation + * of a character. The value is the difference between the character and + * its uppercase version. + */ +static const jshort upper0[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, 0, 0, 0, 0, 0, 0, 0, 0, 743, 0, 0, + 0, 0, 0, -32, 121, 0, -1, 0, -232, 0, -300, 0, 0, + 0, 0, 0, 0, 0, 97, 0, 0, 0, 130, 0, 0, 0, + 0, 0, 56, 0, -1, -2, -79, 0, 0, 0, 0, -210, -206, + -205, -202, -203, -207, -209, -211, -213, -214, -218, -217, -219, 0, 0, + 0, 84, 0, 0, 0, 0, 0, -38, -37, -31, -64, -63, -62, + -57, 0, -47, -54, -86, -80, 7, 0, -96, 0, 0, 0, 0, + 0, 0, -48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -59, 8, 0, 74, 86, 100, + 128, 112, 126, 8, 0, 9, 0, 0, -7205, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -26, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, +}; + +static const jshort upper1[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + -40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, +}; + +static const jshort upper2[] = { + 0, 0, +}; + +static const jshort upper14[] = { + 0, 0, 0, +}; + +static const int upper_length[] = { + 395, 81, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, -1, -1, }; +static const jshort* upper[] = { + upper0, upper1, upper2, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, upper14, NULL, NULL}; + + +/** + * This is the attribute table for computing the lowercase representation + * of a character. The value is the difference between the character and + * its lowercase version. + */ +static const jshort lower0[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 32, 0, 0, 0, 1, 0, -199, 0, -121, 0, 210, 206, + 205, 79, 202, 203, 207, 0, 211, 209, 213, 0, 214, 218, 217, + 219, 0, 0, 2, 1, 0, 0, -97, -56, -130, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 38, 37, 64, 63, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, -60, 0, -7, 80, 0, 0, + 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, -8, 0, 0, 0, + 0, 0, 0, 0, -8, 0, -74, -9, 0, -86, -100, -112, -128, + -126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, -7517, -8383, -8262, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, +}; + +static const jshort lower1[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, +}; + +static const jshort lower2[] = { + 0, 0, +}; + +static const jshort lower14[] = { + 0, 0, 0, +}; + +static const int lower_length[] = { + 395, 81, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, -1, -1, }; +static const jshort* lower[] = { + lower0, lower1, lower2, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, lower14, NULL, NULL}; + + +/** + * This is the attribute table for computing the directionality class + * of a character. At present, the value is in the range 0 - 18 if the + * character has a direction, otherwise it is -1. + */ +static const jbyte direction0[] = { + 9, 11, 10, 12, 12, 13, 5, 5, 13, 13, 5, 7, 5, 4, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 13, 0, 13, 13, 5, 3, 3, 0, 3, 13, 13, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 8, 8, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, + 0, 13, 1, 1, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 2, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 8, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 9, 1, 13, 13, + 13, 12, 10, 14, 16, 18, 15, 17, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, 0, 2, +}; + +static const jbyte direction1[] = { + 0, -1, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 8, 9, 13, 0, 0, 0, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, +}; + +static const jbyte direction2[] = { + 0, -1, +}; + +static const jbyte direction14[] = { + -1, 9, 8, +}; + +static const int direction_length[] = { + 395, 81, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, -1, -1, }; +static const jbyte* direction[] = { + direction0, direction1, direction2, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, direction14, NULL, NULL}; + + +/** + * This is the listing of titlecase special cases (all other character + * can use <code>upper</code> to determine their titlecase). The listing + * is a sequence of character pairs; converting the first character of the + * pair to titlecase produces the second character. + */ +static const jchar title[] = { + 452, 453, 453, 453, 454, 453, 455, 456, 456, 456, + 457, 456, 458, 459, 459, 459, 460, 459, 497, 498, + 498, 498, 499, 498, + }; +/** Length of title. */ +static const int title_length = 24; + +#endif /* __JAVA_CHARTABLES_H__ */ diff --git a/libjava/include/java-cpool.h b/libjava/include/java-cpool.h new file mode 100644 index 000000000..412250230 --- /dev/null +++ b/libjava/include/java-cpool.h @@ -0,0 +1,134 @@ +// java-cpool.h - Constant pool parsing header. -*- c++ -*- + +/* Copyright (C) 1999, 2000 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#ifndef __JAVA_CPOOL_H__ +#define __JAVA_CPOOL_H__ + +#include <gcj/javaprims.h> + +// we rename these, to avoid polluting the name space +#define JV_CONSTANT_Undefined (0L) +#define JV_CONSTANT_Utf8 (1L) +#define JV_CONSTANT_Unicode (2L) +#define JV_CONSTANT_Integer (3L) +#define JV_CONSTANT_Float (4L) +#define JV_CONSTANT_Long (5L) +#define JV_CONSTANT_Double (6L) +#define JV_CONSTANT_Class (7L) +#define JV_CONSTANT_String (8L) +#define JV_CONSTANT_Fieldref (9L) +#define JV_CONSTANT_Methodref (10L) +#define JV_CONSTANT_InterfaceMethodref (11L) +#define JV_CONSTANT_NameAndType (12L) +#define JV_CONSTANT_ResolvedFlag (16L) +#define JV_CONSTANT_LazyFlag (32L) +#define JV_CONSTANT_ResolvedString (16L | 8L) +#define JV_CONSTANT_ResolvedClass (16L | 7L) + +extern inline void +_Jv_storeIndexes (_Jv_word *data, + _Jv_ushort index0, + _Jv_ushort index1) +{ + data->i = (((jint)index0) << 16) | (jint) index1; +} + +extern inline void +_Jv_loadIndexes (const _Jv_word *data, + _Jv_ushort& index0, + _Jv_ushort& index1) +{ + jint udata = data->i; + + _Jv_uint uindex0 = ((udata >> 16) & 0xffff); + _Jv_uint uindex1 = udata & 0xffff; + + index0 = uindex0; + index1 = uindex1; +} + +extern inline void +_Jv_storeFloat (_Jv_word *data, jfloat f) +{ + data->f = f; +} + +extern inline jfloat +_Jv_loadFloat (_Jv_word *data) +{ + return data->f; +} + +extern inline void +_Jv_storeInt (_Jv_word *data, jint i) +{ + data->i = i; +} + +extern inline jint +_Jv_loadInt (_Jv_word *data) +{ + return data->i; +} + +extern inline void +_Jv_storeLong (_Jv_word *data, jlong l) +{ +#if SIZEOF_VOID_P == 8 + data[0].l = l; +#else + _Jv_word2 tmp; + tmp.l = l; + data[0].ia[0] = tmp.ia[0]; + data[1].ia[0] = tmp.ia[1]; +#endif +} + +extern inline jlong +_Jv_loadLong (_Jv_word *data) +{ +#if SIZEOF_VOID_P == 8 + return data -> l; +#else + _Jv_word2 tmp; + tmp.ia[0] = data[0].ia[0]; + tmp.ia[1] = data[1].ia[0]; + return tmp.l; +#endif +} + +extern inline void +_Jv_storeDouble (_Jv_word *data, jdouble d) +{ +#if SIZEOF_VOID_P == 8 + data[0].d = d; +#else + _Jv_word2 tmp; + tmp.d = d; + data[0].ia[0] = tmp.ia[0]; + data[1].ia[0] = tmp.ia[1]; +#endif +} + +extern inline jdouble +_Jv_loadDouble (_Jv_word *data) +{ +#if SIZEOF_VOID_P == 8 + return data -> d; +#else + _Jv_word2 tmp; + tmp.ia[0] = data[0].ia[0]; + tmp.ia[1] = data[1].ia[0]; + return tmp.d; +#endif +} + + +#endif /* __JAVA_CPOOL_H__ */ diff --git a/libjava/include/java-insns.h b/libjava/include/java-insns.h new file mode 100644 index 000000000..824e44186 --- /dev/null +++ b/libjava/include/java-insns.h @@ -0,0 +1,248 @@ +// java-insns.h - Instruction encodings. This is -*- c++ -*- + +/* Copyright (C) 1999, 2001, 2002, 2006 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#ifndef __JAVA_INSNS_H__ +#define __JAVA_INSNS_H__ + +enum java_opcode +{ + op_nop = 0x00, + op_aconst_null = 0x01, + op_iconst_m1 = 0x02, + op_iconst_0 = 0x03, + op_iconst_1 = 0x04, + op_iconst_2 = 0x05, + op_iconst_3 = 0x06, + op_iconst_4 = 0x07, + op_iconst_5 = 0x08, + op_lconst_0 = 0x09, + op_lconst_1 = 0x0a, + op_fconst_0 = 0x0b, + op_fconst_1 = 0x0c, + op_fconst_2 = 0x0d, + op_dconst_0 = 0x0e, + op_dconst_1 = 0x0f, + op_bipush = 0x10, + op_sipush = 0x11, + op_ldc = 0x12, + op_ldc_w = 0x13, + op_ldc2_w = 0x14, + op_iload = 0x15, + op_lload = 0x16, + op_fload = 0x17, + op_dload = 0x18, + op_aload = 0x19, + op_iload_0 = 0x1a, + op_iload_1 = 0x1b, + op_iload_2 = 0x1c, + op_iload_3 = 0x1d, + op_lload_0 = 0x1e, + op_lload_1 = 0x1f, + op_lload_2 = 0x20, + op_lload_3 = 0x21, + op_fload_0 = 0x22, + op_fload_1 = 0x23, + op_fload_2 = 0x24, + op_fload_3 = 0x25, + op_dload_0 = 0x26, + op_dload_1 = 0x27, + op_dload_2 = 0x28, + op_dload_3 = 0x29, + op_aload_0 = 0x2a, + op_aload_1 = 0x2b, + op_aload_2 = 0x2c, + op_aload_3 = 0x2d, + op_iaload = 0x2e, + op_laload = 0x2f, + op_faload = 0x30, + op_daload = 0x31, + op_aaload = 0x32, + op_baload = 0x33, + op_caload = 0x34, + op_saload = 0x35, + op_istore = 0x36, + op_lstore = 0x37, + op_fstore = 0x38, + op_dstore = 0x39, + op_astore = 0x3a, + op_istore_0 = 0x3b, + op_istore_1 = 0x3c, + op_istore_2 = 0x3d, + op_istore_3 = 0x3e, + op_lstore_0 = 0x3f, + op_lstore_1 = 0x40, + op_lstore_2 = 0x41, + op_lstore_3 = 0x42, + op_fstore_0 = 0x43, + op_fstore_1 = 0x44, + op_fstore_2 = 0x45, + op_fstore_3 = 0x46, + op_dstore_0 = 0x47, + op_dstore_1 = 0x48, + op_dstore_2 = 0x49, + op_dstore_3 = 0x4a, + op_astore_0 = 0x4b, + op_astore_1 = 0x4c, + op_astore_2 = 0x4d, + op_astore_3 = 0x4e, + op_iastore = 0x4f, + op_lastore = 0x50, + op_fastore = 0x51, + op_dastore = 0x52, + op_aastore = 0x53, + op_bastore = 0x54, + op_castore = 0x55, + op_sastore = 0x56, + op_pop = 0x57, + op_pop2 = 0x58, + op_dup = 0x59, + op_dup_x1 = 0x5a, + op_dup_x2 = 0x5b, + op_dup2 = 0x5c, + op_dup2_x1 = 0x5d, + op_dup2_x2 = 0x5e, + op_swap = 0x5f, + op_iadd = 0x60, + op_ladd = 0x61, + op_fadd = 0x62, + op_dadd = 0x63, + op_isub = 0x64, + op_lsub = 0x65, + op_fsub = 0x66, + op_dsub = 0x67, + op_imul = 0x68, + op_lmul = 0x69, + op_fmul = 0x6a, + op_dmul = 0x6b, + op_idiv = 0x6c, + op_ldiv = 0x6d, + op_fdiv = 0x6e, + op_ddiv = 0x6f, + op_irem = 0x70, + op_lrem = 0x71, + op_frem = 0x72, + op_drem = 0x73, + op_ineg = 0x74, + op_lneg = 0x75, + op_fneg = 0x76, + op_dneg = 0x77, + op_ishl = 0x78, + op_lshl = 0x79, + op_ishr = 0x7a, + op_lshr = 0x7b, + op_iushr = 0x7c, + op_lushr = 0x7d, + op_iand = 0x7e, + op_land = 0x7f, + op_ior = 0x80, + op_lor = 0x81, + op_ixor = 0x82, + op_lxor = 0x83, + op_iinc = 0x84, + op_i2l = 0x85, + op_i2f = 0x86, + op_i2d = 0x87, + op_l2i = 0x88, + op_l2f = 0x89, + op_l2d = 0x8a, + op_f2i = 0x8b, + op_f2l = 0x8c, + op_f2d = 0x8d, + op_d2i = 0x8e, + op_d2l = 0x8f, + op_d2f = 0x90, + op_i2b = 0x91, + op_i2c = 0x92, + op_i2s = 0x93, + op_lcmp = 0x94, + op_fcmpl = 0x95, + op_fcmpg = 0x96, + op_dcmpl = 0x97, + op_dcmpg = 0x98, + op_ifeq = 0x99, + op_ifne = 0x9a, + op_iflt = 0x9b, + op_ifge = 0x9c, + op_ifgt = 0x9d, + op_ifle = 0x9e, + op_if_icmpeq = 0x9f, + op_if_icmpne = 0xa0, + op_if_icmplt = 0xa1, + op_if_icmpge = 0xa2, + op_if_icmpgt = 0xa3, + op_if_icmple = 0xa4, + op_if_acmpeq = 0xa5, + op_if_acmpne = 0xa6, + op_goto = 0xa7, + op_jsr = 0xa8, + op_ret = 0xa9, + op_tableswitch = 0xaa, + op_lookupswitch = 0xab, + op_ireturn = 0xac, + op_lreturn = 0xad, + op_freturn = 0xae, + op_dreturn = 0xaf, + op_areturn = 0xb0, + op_return = 0xb1, + op_getstatic = 0xb2, + op_putstatic = 0xb3, + op_getfield = 0xb4, + op_putfield = 0xb5, + op_invokevirtual = 0xb6, + op_invokespecial = 0xb7, + op_invokestatic = 0xb8, + op_invokeinterface = 0xb9, + op_breakpoint = 0xba, + op_new = 0xbb, + op_newarray = 0xbc, + op_anewarray = 0xbd, + op_arraylength = 0xbe, + op_athrow = 0xbf, + op_checkcast = 0xc0, + op_instanceof = 0xc1, + op_monitorenter = 0xc2, + op_monitorexit = 0xc3, + op_wide = 0xc4, + op_multianewarray = 0xc5, + op_ifnull = 0xc6, + op_ifnonnull = 0xc7, + op_goto_w = 0xc8, + op_jsr_w = 0xc9, + + // new opcodes + + op_putfield_1 = 0xca, + op_putfield_2 = 0xcb, + op_putfield_4 = 0xcc, + op_putfield_8 = 0xcd, + op_putfield_a = 0xce, + + op_putstatic_1 = 0xcf, + op_putstatic_2 = 0xd0, + op_putstatic_4 = 0xd1, + op_putstatic_8 = 0xd2, + op_putstatic_a = 0xd3, + + op_getfield_1 = 0xd4, + op_getfield_2s = 0xd5, + op_getfield_2u = 0xd6, + op_getfield_4 = 0xd7, + op_getfield_8 = 0xd8, + op_getfield_a = 0xd9, + + op_getstatic_1 = 0xda, + op_getstatic_2s = 0xdb, + op_getstatic_2u = 0xdc, + op_getstatic_4 = 0xdd, + op_getstatic_8 = 0xde, + op_getstatic_a = 0xdf +}; + +#endif /* __JAVA_INSNS_H__ */ diff --git a/libjava/include/java-interp.h b/libjava/include/java-interp.h new file mode 100644 index 000000000..c088e9f01 --- /dev/null +++ b/libjava/include/java-interp.h @@ -0,0 +1,588 @@ +// java-interp.h - Header file for the bytecode interpreter. -*- c++ -*- + +/* Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#ifndef __JAVA_INTERP_H__ +#define __JAVA_INTERP_H__ + +#include <jvm.h> +#include <java-cpool.h> +#include <gnu/gcj/runtime/NameFinder.h> + +enum _Jv_FrameType +{ + frame_native, + frame_interpreter, + frame_proxy +}; + +#ifdef INTERPRETER + +#pragma interface + +#include <java/lang/Class.h> +#include <java/lang/ClassLoader.h> +#include <java/lang/reflect/Modifier.h> +#include <java/lang/Thread.h> +#include <gnu/gcj/RawData.h> + +// Define this to get the direct-threaded interpreter. If undefined, +// we revert to a basic bytecode interpreter. The former is faster +// but uses more memory. +#define DIRECT_THREADED + +#include <ffi.h> + +struct _Jv_ResolvedMethod; + +void _Jv_InitInterpreter (); +void _Jv_DefineClass (jclass, jbyteArray, jint, jint, + java::security::ProtectionDomain *, + _Jv_Utf8Const **); + +void _Jv_InitField (jobject, jclass, int); +void * _Jv_AllocMethodInvocation (jsize size); +int _Jv_count_arguments (_Jv_Utf8Const *signature, + jboolean staticp = true); +void _Jv_VerifyMethod (_Jv_InterpMethod *method); +void _Jv_CompileMethod (_Jv_InterpMethod* method); +int _Jv_init_cif (_Jv_Utf8Const* signature, + int arg_count, + jboolean staticp, + ffi_cif *cif, + ffi_type **arg_types, + ffi_type **rtype_p); + +/* the interpreter is written in C++, primarily because it makes it easy for + * the entire thing to be "friend" with class Class. */ + +class _Jv_InterpClass; +class _Jv_InterpMethod; + +// Before a method is "compiled" we store values as the bytecode PC, +// an int. Afterwards we store them as pointers into the prepared +// code itself. +union _Jv_InterpPC +{ + int i; + void *p; +}; + +class _Jv_InterpException +{ + _Jv_InterpPC start_pc; + _Jv_InterpPC end_pc; + _Jv_InterpPC handler_pc; + _Jv_InterpPC handler_type; + + friend class _Jv_ClassReader; + friend class _Jv_InterpMethod; + friend class _Jv_BytecodeVerifier; +}; + +// Base class for method representations. Subclasses are interpreted +// and JNI methods. +class _Jv_MethodBase +{ +protected: + // The class which defined this method. + jclass defining_class; + + // The method description. + _Jv_Method *self; + + // Size of raw arguments. + _Jv_ushort args_raw_size; + + friend class _Jv_InterpreterEngine; + +public: + _Jv_Method *get_method () + { + return self; + } +}; + +// The type of the PC depends on whether we're doing direct threading +// or a more ordinary bytecode interpreter. +#ifdef DIRECT_THREADED +// Slot in the "compiled" form of the bytecode. +union insn_slot +{ + // Address of code. + void *insn; + // An integer value used by an instruction. + jint int_val; + // A pointer value used by an instruction. + void *datum; +}; + +typedef insn_slot *pc_t; +#else +typedef unsigned char *pc_t; +#endif + + +// This structure holds the bytecode pc and corresponding source code +// line number. An array (plus length field) of this structure is put +// in each _Jv_InterpMethod and used to resolve the (internal) program +// counter of the interpreted method to an actual java source file +// line. +struct _Jv_LineTableEntry +{ + union + { + pc_t pc; + int bytecode_pc; + }; + int line; +}; + +// This structure holds local variable information. +// Like _Jv_LineTableEntry above, it is remapped when the method is +// compiled for direct threading. +struct _Jv_LocalVarTableEntry +{ + // First PC value at which variable is live + union + { + pc_t pc; + int bytecode_pc; + }; + + // length of visibility of variable + int length; + + // variable name + char *name; + + // type description + char *descriptor; + + // stack slot number (long and double occupy slot and slot + 1) + int slot; +}; + +class _Jv_InterpMethod : public _Jv_MethodBase +{ + // Breakpoint instruction + static pc_t breakpoint_insn; +#ifdef DIRECT_THREADED + static insn_slot bp_insn_slot; + +public: + // Mutex to prevent a data race between threads when rewriting + // instructions. See interpret-run.cc for an explanation of its use. + static _Jv_Mutex_t rewrite_insn_mutex; + + // The count of threads executing this method. + long thread_count; + +private: + +#else + static unsigned char bp_insn_opcode; +#endif + + _Jv_ushort max_stack; + _Jv_ushort max_locals; + int code_length; + + _Jv_ushort exc_count; + bool is_15; + + // Length of the line_table - when this is zero then line_table is NULL. + int line_table_len; + _Jv_LineTableEntry *line_table; + + // The local variable table length and the table itself + int local_var_table_len; + _Jv_LocalVarTableEntry *local_var_table; + + pc_t prepared; + int number_insn_slots; + + unsigned char* bytecode () + { + return + ((unsigned char*)this) + + ROUND((sizeof (_Jv_InterpMethod) + + exc_count*sizeof (_Jv_InterpException)), 4); + } + + _Jv_InterpException * exceptions () + { + return (_Jv_InterpException*) (this+1); + } + + static size_t size (int exc_count, int code_length) + { + return + ROUND ((sizeof (_Jv_InterpMethod) + + (exc_count * sizeof (_Jv_InterpException))), 4) + + code_length; + } + + // return the method's invocation pointer (a stub). + void *ncode (jclass); + void compile (const void * const *); + +#if FFI_NATIVE_RAW_API +# define INTERP_FFI_RAW_TYPE ffi_raw +#else +# define INTERP_FFI_RAW_TYPE ffi_java_raw +#endif + + static void run_normal (ffi_cif*, void*, INTERP_FFI_RAW_TYPE*, void*); + static void run_synch_object (ffi_cif*, void*, INTERP_FFI_RAW_TYPE*, void*); + static void run_class (ffi_cif*, void*, INTERP_FFI_RAW_TYPE*, void*); + static void run_synch_class (ffi_cif*, void*, INTERP_FFI_RAW_TYPE*, void*); + + static void run_normal_debug (ffi_cif*, void*, INTERP_FFI_RAW_TYPE*, void*); + static void run_synch_object_debug (ffi_cif*, void*, INTERP_FFI_RAW_TYPE*, + void*); + static void run_class_debug (ffi_cif*, void*, INTERP_FFI_RAW_TYPE*, void*); + static void run_synch_class_debug (ffi_cif*, void*, INTERP_FFI_RAW_TYPE*, + void*); + + static void run (void *, INTERP_FFI_RAW_TYPE *, _Jv_InterpMethod *); + static void run_debug (void *, INTERP_FFI_RAW_TYPE *, _Jv_InterpMethod *); + + + + // Returns source file line number for given PC value, or -1 if line + // number info is unavailable. + int get_source_line(pc_t mpc); + + public: + + // Convenience function for indexing bytecode PC/insn slots in + // line tables for JDWP + jlong insn_index (pc_t pc); + + // Helper function used to check if there is a handler for an exception + // present at this code index + jboolean check_handler (pc_t *pc, _Jv_InterpMethod *meth, + java::lang::Throwable *ex); + + /* Get the line table for this method. + * start is the lowest index in the method + * end is the highest index in the method + * line_numbers is an array to hold the list of source line numbers + * code_indices is an array to hold the corresponding list of code indices + */ + void get_line_table (jlong& start, jlong& end, jintArray& line_numbers, + jlongArray& code_indices); + + int get_max_locals () + { + return static_cast<int> (max_locals); + } + + /* Get info for a local variable of this method. + * If there is no loca_var_table for this method it will return -1. + * table_slot indicates which slot in the local_var_table to get, if there is + * no variable at this location it will return 0. + * Otherwise, it will return the number of table slots after the selected + * slot, indexed from 0. + * + * Example: there are 5 slots in the table, you request slot 0 so it will + * return 4. + */ + int get_local_var_table (char **name, char **sig, char **generic_sig, + jlong *startloc, jint *length, jint *slot, + int table_slot); + + /* Installs a break instruction at the given code index. Returns + the pc_t of the breakpoint or NULL if index is invalid. */ + pc_t install_break (jlong index); + + // Gets the instruction at the given index + pc_t get_insn (jlong index); + + /* Writes the given instruction at the given code index. Returns + the insn or NULL if index is invalid. */ + pc_t set_insn (jlong index, pc_t insn); + + // Is the given location in this method a breakpoint? + bool breakpoint_at (jlong index); + +#ifdef DIRECT_THREADED + friend void _Jv_CompileMethod (_Jv_InterpMethod*); +#endif + + friend class _Jv_ClassReader; + friend class _Jv_BytecodeVerifier; + friend class _Jv_StackTrace; + friend class _Jv_InterpreterEngine; + +#ifdef JV_MARKOBJ_DECL + friend JV_MARKOBJ_DECL; +#endif +}; + +class _Jv_InterpClass +{ + _Jv_MethodBase **interpreted_methods; + _Jv_ushort *field_initializers; + jstring source_file_name; + _Jv_ClosureList **closures; + + friend class _Jv_ClassReader; + friend class _Jv_InterpMethod; + friend class _Jv_StackTrace; + friend class _Jv_InterpreterEngine; + + friend void _Jv_InitField (jobject, jclass, int); +#ifdef JV_MARKOBJ_DECL + friend JV_MARKOBJ_DECL; +#endif + + friend _Jv_MethodBase ** _Jv_GetFirstMethod (_Jv_InterpClass *klass); + friend jstring _Jv_GetInterpClassSourceFile (jclass); +}; + +extern inline _Jv_MethodBase ** +_Jv_GetFirstMethod (_Jv_InterpClass *klass) +{ + return klass->interpreted_methods; +} + +struct _Jv_ResolvedMethod +{ + jint stack_item_count; + jclass klass; + _Jv_Method* method; + + // a resolved method holds the cif in-line, so that _Jv_MarkObj just needs + // to mark the resolved method to hold on to the cif. Some memory could be + // saved by keeping a cache of cif's, since many will be the same. + ffi_cif cif; + ffi_type * arg_types[0]; +}; + +class _Jv_JNIMethod : public _Jv_MethodBase +{ + // The underlying function. If NULL we have to look for the + // function. + void *function; + + // This is the CIF used by the JNI function. + ffi_cif jni_cif; + + // These are the argument types used by the JNI function. + ffi_type **jni_arg_types; + + // This function is used when making a JNI call from the interpreter. + static void call (ffi_cif *, void *, INTERP_FFI_RAW_TYPE *, void *); + + void *ncode (jclass); + + friend class _Jv_ClassReader; + friend class _Jv_InterpreterEngine; + +#ifdef JV_MARKOBJ_DECL + friend JV_MARKOBJ_DECL; +#endif + +public: + // FIXME: this is ugly. + void set_function (void *f) + { + function = f; + } +}; + +// The composite call stack as represented by a linked list of frames +class _Jv_Frame +{ +public: + java::lang::Thread *thread; + + union + { + _Jv_MethodBase *self; + void *meth; + _Jv_Method *proxyMethod; + }; + + //The full list of frames, JNI and interpreted + _Jv_Frame *next; + _Jv_FrameType frame_type; + + _Jv_Frame (_Jv_MethodBase *s, java::lang::Thread *thr, _Jv_FrameType type) + { + self = s; + frame_type = type; + next = (_Jv_Frame *) thr->frame; + thr->frame = (gnu::gcj::RawData *) this; + thread = thr; + } + + ~_Jv_Frame () + { + thread->frame = (gnu::gcj::RawData *) next; + } + + int depth () + { + int depth = 0; + struct _Jv_Frame *f; + for (f = this; f != NULL; f = f->next) + ++depth; + + return depth; + } +}; + +// An interpreted frame in the call stack +class _Jv_InterpFrame : public _Jv_Frame +{ +public: + + // Keep the purely interpreted list around so as not to break backtraces + _Jv_InterpFrame *next_interp; + + union + { + pc_t pc; + jclass proxyClass; + }; + + // Pointer to the actual pc value. + pc_t *pc_ptr; + + //Debug info for local variables. + _Jv_word *locals; + char *locals_type; + + // Object pointer for this frame ("this") + jobject obj_ptr; + + _Jv_InterpFrame (void *meth, java::lang::Thread *thr, jclass proxyCls = NULL, + pc_t *pc = NULL, + _Jv_FrameType frame_type = frame_interpreter) + : _Jv_Frame (reinterpret_cast<_Jv_MethodBase *> (meth), thr, + frame_type) + { + next_interp = (_Jv_InterpFrame *) thr->interp_frame; + proxyClass = proxyCls; + thr->interp_frame = (gnu::gcj::RawData *) this; + obj_ptr = NULL; + pc_ptr = pc; + } + + ~_Jv_InterpFrame () + { + thread->interp_frame = (gnu::gcj::RawData *) next_interp; + } + + jobject get_this_ptr () + { + return obj_ptr; + } + + pc_t get_pc () + { + pc_t pc; + + // If the PC_PTR is NULL, we are not debugging. + if (pc_ptr == NULL) + pc = 0; + else + pc = *pc_ptr - 1; + + return pc; + } +}; + +// A native frame in the call stack really just a placeholder +class _Jv_NativeFrame : public _Jv_Frame +{ +public: + + _Jv_NativeFrame (_Jv_JNIMethod *s, java::lang::Thread *thr) + : _Jv_Frame (s, thr, frame_native) + { + } +}; + +#ifdef DIRECT_THREADED +// This class increments and decrements the thread_count field in an +// interpreted method. On entry to the interpreter a +// ThreadCountAdjuster is created when increments the thread_count in +// the current method and uses the next_interp field in the frame to +// find the previous method and decrement its thread_count. +class ThreadCountAdjuster +{ + + // A class used to handle the rewrite_insn_mutex while we're + // adjusting the thread_count in a method. Unlocking the mutex in a + // destructor ensures that it's unlocked even if (for example) a + // segfault occurs in the critical section. + class MutexLock + { + private: + _Jv_Mutex_t *mutex; + public: + MutexLock (_Jv_Mutex_t *m) + { + mutex = m; + _Jv_MutexLock (mutex); + } + ~MutexLock () + { + _Jv_MutexUnlock (mutex); + } + }; + + _Jv_InterpMethod *method; + _Jv_InterpMethod *next_method; + +public: + + ThreadCountAdjuster (_Jv_InterpMethod *m, _Jv_InterpFrame *fr) + { + MutexLock lock (&::_Jv_InterpMethod::rewrite_insn_mutex); + + method = m; + next_method = NULL; + + _Jv_InterpFrame *next_interp = fr->next_interp; + + // Record the fact that we're executing this method and that + // we're no longer executing the method that called us. + method->thread_count++; + + if (next_interp && next_interp->frame_type == frame_interpreter) + { + next_method + = reinterpret_cast<_Jv_InterpMethod *> (next_interp->meth); + next_method->thread_count--; + } + } + + ~ThreadCountAdjuster () + { + MutexLock lock (&::_Jv_InterpMethod::rewrite_insn_mutex); + + // We're going to return to the method that called us, so bump its + // thread_count and decrement our own. + + method->thread_count--; + + if (next_method) + next_method->thread_count++; + } +}; +#endif // DIRECT_THREADED + +#endif /* INTERPRETER */ + +#endif /* __JAVA_INTERP_H__ */ diff --git a/libjava/include/java-props.h b/libjava/include/java-props.h new file mode 100644 index 000000000..f552e1b54 --- /dev/null +++ b/libjava/include/java-props.h @@ -0,0 +1,33 @@ +// java-props.h - Properties -*- c++ -*- + +/* Copyright (C) 1999 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#ifndef __JAVA_PROPS_H__ +#define __JAVA_PROPS_H__ + +typedef struct +{ + char *key; + size_t key_length; + char *value; + size_t value_length; +} property_pair; + +// Set to NULL-terminated list of properties set at compile time. +extern const char **_Jv_Compiler_Properties; +extern int _Jv_Properties_Count; + +// Properties taken from the user's environment. +extern property_pair *_Jv_Environment_Properties; + +// Module load path. +extern char *_Jv_Module_Load_Path; + +#endif + diff --git a/libjava/include/java-stack.h b/libjava/include/java-stack.h new file mode 100644 index 000000000..40ce825b0 --- /dev/null +++ b/libjava/include/java-stack.h @@ -0,0 +1,177 @@ +// java-stack.h - Definitions for unwinding & inspecting the call stack. + +/* Copyright (C) 2005, 2006 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#ifndef __JV_STACKTRACE_H__ +#define __JV_STACKTRACE_H__ + +#include <stdlib.h> +#include <unwind.h> + +#include <gcj/cni.h> +#include <gcj/javaprims.h> + +#include <java-interp.h> + +#include <java/lang/Class.h> +#include <java/lang/StackTraceElement.h> +#include <java/lang/Throwable.h> +#include <java/lang/Thread.h> +#include <java/util/IdentityHashMap.h> + +#include <gnu/gcj/runtime/NameFinder.h> + +using namespace gnu::gcj::runtime; +using namespace java::lang; + +extern "Java" +{ + namespace gnu + { + namespace classpath + { + class VMStackWalker; + } + } +} + +#ifdef INTERPRETER +struct _Jv_InterpFrameInfo +{ + _Jv_InterpMethod *meth; + pc_t pc; +}; +#endif + +struct _Jv_StackFrame +{ + _Jv_FrameType type; /* Native or interpreted. */ + union { +#ifdef INTERPRETER + _Jv_InterpFrameInfo interp; +#endif + struct { + jclass proxyClass; + _Jv_Method *proxyMethod; + }; + struct { + void *ip; + void *start_ip; + }; + }; + jclass klass; + _Jv_Method *meth; +}; + +struct _Jv_UnwindState; +typedef _Unwind_Reason_Code (*_Jv_TraceFn) (_Jv_UnwindState *); + +struct _Jv_UnwindState +{ + jint length; // length of FRAMES + jint pos; // current position in FRAMES + _Jv_StackFrame *frames; // array of stack frame data to be filled. +#ifdef INTERPRETER + _Jv_InterpFrame *interp_frame; // current frame in the interpreter stack. +#endif + _Jv_TraceFn trace_function; // function to call back after each frame + // is enumerated. May be NULL. + void *trace_data; // additional state data for trace_function. + + _Jv_UnwindState (jint ln) + { + length = ln; + pos = 0; + frames = NULL; +#ifdef INTERPRETER + Thread *thread = Thread::currentThread(); + // Check for NULL currentThread(), in case an exception is created + // very early during the runtime startup. + if (thread) + interp_frame = (_Jv_InterpFrame *) thread->interp_frame; + else + interp_frame = NULL; +#endif + trace_function = NULL; + trace_data = NULL; + } +}; + +class _Jv_StackTrace +{ +private: + int length; + _Jv_StackFrame frames[]; + + static java::util::IdentityHashMap *ncodeMap; + static void UpdateNCodeMap (); + static jclass ClassForFrame (_Jv_StackFrame *frame); + static void FillInFrameInfo (_Jv_StackFrame *frame); + static void getLineNumberForFrame(_Jv_StackFrame *frame, NameFinder *finder, + jstring *sourceFileName, jint *lineNum, + jstring *methodName); + + static _Unwind_Reason_Code UnwindTraceFn (struct _Unwind_Context *context, + void *state_ptr); + + static _Unwind_Reason_Code calling_class_trace_fn (_Jv_UnwindState *state); + static _Unwind_Reason_Code non_system_trace_fn (_Jv_UnwindState *state); + static _Unwind_Reason_Code accesscontrol_trace_fn (_Jv_UnwindState *state); + static _Unwind_Reason_Code stackwalker_trace_fn (_Jv_UnwindState *state); + static _Unwind_Reason_Code stackwalker_nnl_trace_fn (_Jv_UnwindState *state); + +public: + static _Jv_StackTrace *GetStackTrace (void); + static JArray< ::java::lang::StackTraceElement *>* + GetStackTraceElements (_Jv_StackTrace *trace, + java::lang::Throwable *throwable); + static jclass GetCallingClass (jclass); + static void GetCallerInfo (jclass checkClass, jclass *, _Jv_Method **); + static ClassLoader *GetFirstNonSystemClassLoader (void); + static jobjectArray GetAccessControlStack (); + static JArray<jclass> *GetStackWalkerStack (); + static jclass GetStackWalkerCallingClass (); + static ClassLoader *GetStackWalkerFirstNonNullLoader (); + + friend jclass _Jv_GetMethodDeclaringClass (jmethodID); + friend class gnu::classpath::VMStackWalker; +}; + +// Information about a given address. +struct _Jv_AddrInfo +{ + // File name of the defining module. + const char *file_name; + + // Base address of the loaded module. + void *base; + + // Name of the nearest symbol. + const char *sym_name; + + // Address of the nearest symbol. + void *sym_addr; + + ~_Jv_AddrInfo (void) + { + // On systems with a real dladdr(), the file and symbol names given by + // _Jv_platform_dladdr() are not dynamically allocated. On Windows, + // they are. + +#ifdef WIN32 + if (file_name) + free ((void *)file_name); + + if (sym_name) + free ((void *)sym_name); +#endif /* WIN32 */ + } +}; + +#endif /* __JV_STACKTRACE_H__ */ diff --git a/libjava/include/jni_md.h b/libjava/include/jni_md.h new file mode 100644 index 000000000..d75efc6f2 --- /dev/null +++ b/libjava/include/jni_md.h @@ -0,0 +1,151 @@ +/* jni_md.h + Copyright (C) 2001, 2005, 2007, 2010 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath 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, or (at your option) +any later version. + +GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +As a special exception, if you link this library with other files to +produce an executable, this library does not by itself cause the +resulting executable to be covered by the GNU General Public License. +This exception does not however invalidate any other reasons why the +executable file might be covered by the GNU General Public License. */ + +#ifndef __GCJ_JNI_MD_H__ +#define __GCJ_JNI_MD_H__ + +#include <gcj/libgcj-config.h> + +#ifdef __GCJ_JNI_IMPL__ + +/* If __GCJ_JNI_IMPL__ is defined, then we assume that we're building + libgcj itself, and we include headers which taint the namespace + more than is acceptable for the ordinary JNI user. */ +#include <gcj/javaprims.h> +#include <gcj/array.h> +#include <gnu/gcj/runtime/JNIWeakRef.h> + +typedef gnu::gcj::runtime::JNIWeakRef *jweak; + +typedef struct _Jv_JNIEnv JNIEnv; +typedef struct _Jv_JavaVM JavaVM; + +#define JNI_TRUE true +#define JNI_FALSE false + +/* We defined jobject and friends, so don't redefine them in jni.h. */ +#define _CLASSPATH_VM_JNI_TYPES_DEFINED + +/* We defined jmethodID and and jfieldID, so don't redefine them in + jni.h. */ +#define _CLASSPATH_VM_INTERNAL_TYPES_DEFINED + +/* Contents of the JNIEnv; but only inside the implementation. */ +#define _CLASSPATH_JNIENV_CONTENTS \ + /* The current exception. */ \ + jthrowable ex; \ + \ + /* The chain of local frames. */ \ + struct _Jv_JNI_LocalFrame *locals; \ + \ + /* The bottom-most element of the chain, initialized with the env and \ + reused between non-nesting JNI calls. */ \ + struct _Jv_JNI_LocalFrame *bottom_locals; + + +#else /* __GCJ_JNI_IMPL__ */ + +# ifdef __GNUC__ + +/* If we're using gcc, we can use a platform-independent scheme to get + the right integer types. FIXME: this is not always correct, for + instance on the c4x it will be wrong -- it depends on whether + QImode is 8 bits. */ +typedef int jbyte __attribute__((__mode__(__QI__))); +typedef int jshort __attribute__((__mode__(__HI__))); +typedef int jint __attribute__((__mode__(__SI__))); +typedef int jlong __attribute__((__mode__(__DI__))); +typedef unsigned int jboolean __attribute__((__mode__(__QI__))); +typedef unsigned short jchar __attribute__((__mode__(__HI__))); +typedef float jfloat; +typedef double jdouble; +typedef jint jsize; + +# else /* __GNUC__ */ + +# ifdef JV_HAVE_INTTYPES_H + +/* If <inttypes.h> is available, we use it. */ + +# include <inttypes.h> + +typedef int8_t jbyte; +typedef int16_t jshort; +typedef int32_t jint; +typedef int64_t jlong; +typedef float jfloat; +typedef double jdouble; +typedef jint jsize; +typedef uint8_t jboolean; +typedef uint16_t jchar; + +# else /* JV_HAVE_INTTYPES_H */ + +/* For now, we require either gcc or <inttypes.h>. If we did more + work at configure time we could get around this, but right now it + doesn't seem worth it. */ +# error jni.h not ported to this platform + +# endif /* JV_HAVE_INTTYPES_H */ + +# endif /* __GNUC__ */ + +#endif /* __GCJ_JNI_IMPL__ */ + + +/* Linkage and calling conventions. */ +#if defined (_WIN32) || defined (__WIN32__) || defined (WIN32) + +#define JNIIMPORT __declspec(dllimport) +#define JNIEXPORT __declspec(dllexport) + +#define JNICALL __stdcall + +#else /* !( _WIN32 || __WIN32__ || WIN32) */ + +#define JNIIMPORT +#if defined(__GNUC__) && __GNUC__ > 3 +#define JNIEXPORT __attribute__ ((visibility("default"))) +#else +#define JNIEXPORT +#endif + +#define JNICALL + +#endif /* !( _WIN32 || __WIN32__ || WIN32) */ + +/* These defines apply to symbols in libgcj */ +#ifdef __GCJ_DLL__ +# ifdef __GCJ_JNI_IMPL__ +# define _CLASSPATH_JNIIMPEXP JNIEXPORT +# else +# define _CLASSPATH_JNIIMPEXP JNIIMPORT +# endif /* ! __GCJ_JNI_IMPL__ */ +#else /* ! __GCJ_DLL__ */ +# define _CLASSPATH_JNIIMPEXP +#endif /* __GCJ_DLL__ */ + +#endif /* __GCJ_JNI_MD_H__ */ diff --git a/libjava/include/jvm.h b/libjava/include/jvm.h new file mode 100644 index 000000000..ec74f295a --- /dev/null +++ b/libjava/include/jvm.h @@ -0,0 +1,804 @@ +// jvm.h - Header file for private implementation information. -*- c++ -*- + +/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#ifndef __JAVA_JVM_H__ +#define __JAVA_JVM_H__ + +// Define this before including jni.h. +// jni.h is included by jvmpi.h, which might be included. We define +// this unconditionally because it is convenient and it lets other +// files include jni.h without difficulty. +#define __GCJ_JNI_IMPL__ + +#include <gcj/javaprims.h> + +#include <java-assert.h> +#include <java-threads.h> +// Must include java-gc.h before Object.h for the implementation. +#include <java-gc.h> + +#include <java/lang/Object.h> + +// Include cni.h before field.h to enable all definitions. FIXME. +#include <gcj/cni.h> +#include <gcj/field.h> + +#include <java/lang/Thread.h> + +#include <sysdep/locks.h> + +/* Macro for possible unused arguments. */ +#define MAYBE_UNUSED __attribute__((__unused__)) + +/* Structure of the virtual table. */ +struct _Jv_VTable +{ +#ifdef __ia64__ + typedef struct { void *pc, *gp; } vtable_elt; +#else + typedef void *vtable_elt; +#endif + jclass clas; + void *gc_descr; + + // This must be last, as derived classes "extend" this by + // adding new data members. + vtable_elt method[1]; + +#ifdef __ia64__ + void *get_method(int i) { return &method[i]; } + void set_method(int i, void *fptr) { method[i] = *(vtable_elt *)fptr; } + void *get_finalizer() + { + // We know that get_finalizer is only used for checking whether + // this object needs to have a finalizer registered. So it is + // safe to simply return just the PC component of the vtable + // slot. + return ((vtable_elt *)(get_method(0)))->pc; + } +#else + void *get_method(int i) { return method[i]; } + void set_method(int i, void *fptr) { method[i] = fptr; } + void *get_finalizer() { return get_method(0); } +#endif + + static size_t vtable_elt_size() { return sizeof(vtable_elt); } + + // Given a method index, return byte offset from the vtable pointer. + static jint idx_to_offset (int index) + { + return (2 * sizeof (void *)) + (index * vtable_elt_size ()); + } + + static _Jv_VTable *new_vtable (int count); +}; + +union _Jv_word +{ + jobject o; + jint i; // Also stores smaller integral types. + jfloat f; + jint ia[1]; // Half of _Jv_word2. + void* p; + +#if SIZEOF_VOID_P == 8 + // We can safely put a long or a double in here without increasing + // the size of _Jv_Word; we take advantage of this in the interpreter. + jlong l; + jdouble d; +#endif + + jclass clazz; + jstring string; + struct _Jv_Field *field; + struct _Jv_Utf8Const *utf8; + struct _Jv_ResolvedMethod *rmethod; +}; + +union _Jv_word2 +{ + jint ia[2]; + jlong l; + jdouble d; +}; + +union _Jv_value +{ + jbyte byte_value; + jshort short_value; + jchar char_value; + jint int_value; + jlong long_value; + jfloat float_value; + jdouble double_value; + jobject object_value; +}; + +/* Extract a character from a Java-style Utf8 string. + * PTR points to the current character. + * LIMIT points to the end of the Utf8 string. + * PTR is incremented to point after the character thta gets returns. + * On an error, -1 is returned. */ +#define UTF8_GET(PTR, LIMIT) \ + ((PTR) >= (LIMIT) ? -1 \ + : *(PTR) < 128 ? *(PTR)++ \ + : (*(PTR)&0xE0) == 0xC0 && ((PTR)+=2)<=(LIMIT) && ((PTR)[-1]&0xC0) == 0x80 \ + ? (((PTR)[-2] & 0x1F) << 6) + ((PTR)[-1] & 0x3F) \ + : (*(PTR) & 0xF0) == 0xE0 && ((PTR) += 3) <= (LIMIT) \ + && ((PTR)[-2] & 0xC0) == 0x80 && ((PTR)[-1] & 0xC0) == 0x80 \ + ? (((PTR)[-3]&0x0F) << 12) + (((PTR)[-2]&0x3F) << 6) + ((PTR)[-1]&0x3F) \ + : ((PTR)++, -1)) + +extern int _Jv_strLengthUtf8(const char* str, int len); + +typedef struct _Jv_Utf8Const Utf8Const; +_Jv_Utf8Const *_Jv_makeUtf8Const (const char *s, int len); +_Jv_Utf8Const *_Jv_makeUtf8Const (jstring string); +static inline _Jv_Utf8Const *_Jv_makeUtf8Const (const char *s) +{ + return _Jv_makeUtf8Const (s, strlen (s)); +} +extern jboolean _Jv_equalUtf8Consts (const _Jv_Utf8Const *, const _Jv_Utf8Const *); +extern jboolean _Jv_equal (_Jv_Utf8Const *, jstring, jint); +extern jboolean _Jv_equaln (_Jv_Utf8Const *, jstring, jint); + +/* Helper class which converts a jstring to a temporary char*. + Uses the supplied buffer, if non-null. Otherwise, allocates + the buffer on the heap. Use the JV_TEMP_UTF_STRING macro, + which follows, to automatically allocate a stack buffer if + the string is small enough. */ +class _Jv_TempUTFString +{ +public: + _Jv_TempUTFString(jstring jstr, char* buf=0); + ~_Jv_TempUTFString(); + +// Accessors + operator const char*() const + { + return buf_; + } + const char* buf() const + { + return buf_; + } + char* buf() + { + return buf_; + } + +private: + char* buf_; + bool heapAllocated_; +}; + +inline _Jv_TempUTFString::_Jv_TempUTFString (jstring jstr, char* buf) + : buf_(0), heapAllocated_(false) +{ + if (!jstr) return; + jsize len = JvGetStringUTFLength (jstr); + if (buf) + buf_ = buf; + else + { + buf_ = (char*) _Jv_Malloc (len+1); + heapAllocated_ = true; + } + + JvGetStringUTFRegion (jstr, 0, jstr->length(), buf_); + buf_[len] = '\0'; +} + +inline _Jv_TempUTFString::~_Jv_TempUTFString () +{ + if (heapAllocated_) + _Jv_Free (buf_); +} + +/* Macro which uses _Jv_TempUTFString. Allocates a stack-based + buffer if the string and its null terminator are <= 256 + characters in length. Otherwise, a heap-based buffer is + used. The parameters to this macro are the variable name + which is an instance of _Jv_TempUTFString (above) and a + jstring. + + Sample Usage: + + jstring jstr = getAJString(); + JV_TEMP_UTF_STRING(utfstr, jstr); + printf("The string is: %s\n", utfstr.buf()); + + */ +#define JV_TEMP_UTF_STRING(utfstr, jstr) \ + jstring utfstr##thejstr = (jstr); \ + jsize utfstr##_len = utfstr##thejstr ? JvGetStringUTFLength (utfstr##thejstr) + 1 : 0; \ + char utfstr##_buf[utfstr##_len <= 256 ? utfstr##_len : 0]; \ + _Jv_TempUTFString utfstr(utfstr##thejstr, sizeof(utfstr##_buf)==0 ? 0 : utfstr##_buf) + +namespace gcj +{ + /* Some constants used during lookup of special class methods. */ + extern _Jv_Utf8Const *void_signature; /* "()V" */ + extern _Jv_Utf8Const *clinit_name; /* "<clinit>" */ + extern _Jv_Utf8Const *init_name; /* "<init>" */ + extern _Jv_Utf8Const *finit_name; /* "finit$", */ + + /* Set to true by _Jv_CreateJavaVM. */ + extern bool runtimeInitialized; + + /* Print out class names as they are initialized. */ + extern bool verbose_class_flag; + + /* When true, enable the bytecode verifier and BC-ABI verification. */ + extern bool verifyClasses; + + /* Thread stack size specified by the -Xss runtime argument. */ + extern size_t stack_size; + + /* The start time */ + extern jlong startTime; + + /* The VM arguments */ + extern JArray<jstring>* vmArgs; + + // Currently loaded classes + extern jint loadedClasses; + + // Unloaded classes + extern jlong unloadedClasses; +} + +// This class handles all aspects of class preparation and linking. +class _Jv_Linker +{ +private: + typedef unsigned int uaddr __attribute__ ((mode (pointer))); + + static _Jv_Field *find_field_helper(jclass, _Jv_Utf8Const *, _Jv_Utf8Const *, + jclass, jclass *); + static _Jv_Field *find_field(jclass, jclass, jclass *, _Jv_Utf8Const *, + _Jv_Utf8Const *); + static void check_loading_constraints (_Jv_Method *, jclass, jclass); + static void prepare_constant_time_tables(jclass); + static jshort get_interfaces(jclass, _Jv_ifaces *); + static void link_symbol_table(jclass); + static void link_exception_table(jclass); + static void layout_interface_methods(jclass); + static void set_vtable_entries(jclass, _Jv_VTable *); + static void make_vtable(jclass); + static void ensure_fields_laid_out(jclass); + static void ensure_class_linked(jclass); + static void ensure_supers_installed(jclass); + static void add_miranda_methods(jclass, jclass); + static void ensure_method_table_complete(jclass); + static void verify_class(jclass); + static jshort find_iindex(jclass *, jshort *, jshort); + static jshort indexof(void *, void **, jshort); + static int get_alignment_from_class(jclass); + static void generate_itable(jclass, _Jv_ifaces *, jshort *); + static jshort append_partial_itable(jclass, jclass, void **, jshort); + static _Jv_Method *search_method_in_superclasses (jclass cls, jclass klass, + _Jv_Utf8Const *method_name, + _Jv_Utf8Const *method_signature, + jclass *found_class, + bool check_perms = true); + static void *create_error_method(_Jv_Utf8Const *, jclass); + + /* The least significant bit of the signature pointer in a symbol + table is set to 1 by the compiler if the reference is "special", + i.e. if it is an access to a private field or method. Extract + that bit, clearing it in the address and setting the LSB of + SPECIAL accordingly. */ + static void maybe_adjust_signature (_Jv_Utf8Const *&s, uaddr &special) + { + union { + _Jv_Utf8Const *signature; + uaddr signature_bits; + }; + signature = s; + special = signature_bits & 1; + signature_bits -= special; + s = signature; + } + + static _Jv_Mutex_t resolve_mutex; + static void init (void) __attribute__((constructor)); + +public: + + static bool has_field_p (jclass, _Jv_Utf8Const *); + static void print_class_loaded (jclass); + static void resolve_class_ref (jclass, jclass *); + static void wait_for_state(jclass, int); + static _Jv_Method *resolve_method_entry (jclass, jclass &, + int, int, + bool, bool); + static _Jv_word resolve_pool_entry (jclass, int, bool =false); + static void resolve_field (_Jv_Field *, java::lang::ClassLoader *); + static void verify_type_assertions (jclass); + static _Jv_Method *search_method_in_class (jclass, jclass, + _Jv_Utf8Const *, + _Jv_Utf8Const *, + bool check_perms = true); + static void layout_vtable_methods(jclass); + + static jbyte read_cpool_entry (_Jv_word *data, + const _Jv_Constants *const pool, + int index) + { + _Jv_MutexLock (&resolve_mutex); + jbyte tags = pool->tags[index]; + *data = pool->data[index]; + _Jv_MutexUnlock (&resolve_mutex); + return tags; + } + + static void write_cpool_entry (_Jv_word data, jbyte tags, + _Jv_Constants *pool, + int index) + { + _Jv_MutexLock (&resolve_mutex); + pool->data[index] = data; + pool->tags[index] = tags; + _Jv_MutexUnlock (&resolve_mutex); + } +}; + +/* Type of pointer used as finalizer. */ +typedef void _Jv_FinalizerFunc (jobject); + +/* Allocate space for a new Java object. */ +void *_Jv_AllocObj (jsize size, jclass cl) __attribute__((__malloc__)); +/* Allocate space for a potentially uninitialized pointer-free object. + Interesting only with JV_HASH_SYNCHRONIZATION. */ +void *_Jv_AllocPtrFreeObj (jsize size, jclass cl) __attribute__((__malloc__)); +/* Allocate space for an array of Java objects. */ +void *_Jv_AllocArray (jsize size, jclass cl) __attribute__((__malloc__)); +/* Allocate space that is known to be pointer-free. */ +void *_Jv_AllocBytes (jsize size) __attribute__((__malloc__)); +/* Allocate space for a new non-Java object, which does not have the usual + Java object header but may contain pointers to other GC'ed objects. */ +void *_Jv_AllocRawObj (jsize size) __attribute__((__malloc__)); +/* Allocate a double-indirect pointer to a _Jv_ClosureList such that + the _Jv_ClosureList gets automatically finalized when it is no + longer reachable, not even by other finalizable objects. */ +_Jv_ClosureList **_Jv_ClosureListFinalizer (void) __attribute__((__malloc__)); +/* Explicitly throw an out-of-memory exception. */ +void _Jv_ThrowNoMemory() __attribute__((__noreturn__)); +/* Allocate an object with a single pointer. The first word is reserved + for the GC, and the second word is the traced pointer. */ +void *_Jv_AllocTraceOne (jsize size /* incl. reserved slot */); +/* Ditto, but for two traced pointers. */ +void *_Jv_AllocTraceTwo (jsize size /* incl. reserved slot */); +/* Initialize the GC. */ +void _Jv_InitGC (void); +/* Register a finalizer. */ +void _Jv_RegisterFinalizer (void *object, _Jv_FinalizerFunc *method); +/* Compute the GC descriptor for a class */ +void * _Jv_BuildGCDescr(jclass); + +/* Allocate some unscanned, unmoveable memory. Return NULL if out of + memory. */ +void *_Jv_MallocUnchecked (jsize size) __attribute__((__malloc__)); + +/* Initialize finalizers. The argument is a function to be called + when a finalizer is ready to be run. */ +void _Jv_GCInitializeFinalizers (void (*notifier) (void)); +/* Run finalizers for objects ready to be finalized.. */ +void _Jv_RunFinalizers (void); +/* Run all finalizers. Should be called only before exit. */ +void _Jv_RunAllFinalizers (void); +/* Perform a GC. */ +void _Jv_RunGC (void); +/* Disable and enable GC. */ +void _Jv_DisableGC (void); +void _Jv_EnableGC (void); +/* Register a disappearing link. This is a field F which should be + cleared when *F is found to be inaccessible. This is used in the + implementation of java.lang.ref.Reference. */ +void _Jv_GCRegisterDisappearingLink (jobject *objp); +/* Return true if OBJECT should be reclaimed. This is used to + implement soft references. */ +jboolean _Jv_GCCanReclaimSoftReference (jobject obj); + +/* Register a finalizer for a String object. This is only used by + the intern() implementation. */ +void _Jv_RegisterStringFinalizer (jobject str); +/* This is called to actually finalize a possibly-intern()d String. */ +void _Jv_FinalizeString (jobject str); + +/* Return approximation of total size of heap. */ +long _Jv_GCTotalMemory (void); +/* Return approximation of total free memory. */ +long _Jv_GCFreeMemory (void); + +/* Set initial heap size. If SIZE==0, ignore. Should be run before + _Jv_InitGC. Not required to have any actual effect. */ +void _Jv_GCSetInitialHeapSize (size_t size); + +/* Set maximum heap size. If SIZE==0, unbounded. Should be run + before _Jv_InitGC. Not required to have any actual effect. */ +void _Jv_GCSetMaximumHeapSize (size_t size); + +/* External interface to setting the heap size. Parses ARG (a number + which can optionally have "k" or "m" appended and calls + _Jv_GCSetInitialHeapSize. */ +void _Jv_SetInitialHeapSize (const char *arg); + +/* External interface to setting the maximum heap size. Parses ARG (a + number which can optionally have "k" or "m" appended and calls + _Jv_GCSetMaximumHeapSize. */ +void _Jv_SetMaximumHeapSize (const char *arg); + +/* External interface for setting the GC_free_space_divisor. Calls + GC_set_free_space_divisor and returns the old value. */ +int _Jv_SetGCFreeSpaceDivisor (int div); + +/* Free the method cache, if one was allocated. This is only called + during thread deregistration. */ +void _Jv_FreeMethodCache (); + +/* Set the stack size for threads. Parses ARG, a number which can + optionally have "k" or "m" appended. */ +void _Jv_SetStackSize (const char *arg); + +extern "C" void JvRunMain (jclass klass, int argc, const char **argv); +extern "C" void JvRunMainName (const char *name, int argc, const char **argv); + +void _Jv_RunMain (jclass klass, const char *name, int argc, const char **argv, + bool is_jar); + +void _Jv_RunMain (struct _Jv_VMInitArgs *vm_args, jclass klass, + const char *name, int argc, const char **argv, bool is_jar); + +// Delayed until after _Jv_AllocRawObj is declared. +inline _Jv_VTable * +_Jv_VTable::new_vtable (int count) +{ + size_t size = sizeof(_Jv_VTable) + (count - 1) * vtable_elt_size (); + return (_Jv_VTable *) _Jv_AllocRawObj (size); +} + +// Determine if METH gets an entry in a VTable. +static inline jboolean _Jv_isVirtualMethod (_Jv_Method *meth) +{ + using namespace java::lang::reflect; + return (((meth->accflags & (Modifier::STATIC | Modifier::PRIVATE)) == 0) + && meth->name->first() != '<'); +} + +// This function is used to determine the hash code of an object. +inline jint +_Jv_HashCode (jobject obj) +{ + // This was chosen to yield relatively well distributed results on + // both 32- and 64-bit architectures. Note 0x7fffffff is prime. + // FIXME: we assume sizeof(long) == sizeof(void *). + return (jint) ((unsigned long) obj % 0x7fffffff); +} + +// Return a raw pointer to the elements of an array given the array +// and its element type. You might think we could just pick a single +// array type and use elements() on it, but we can't because we must +// account for alignment of the element type. When ARRAY is null, we +// obtain the number of bytes taken by the base part of the array. +inline char * +_Jv_GetArrayElementFromElementType (jobject array, + jclass element_type) +{ + char *elts; + if (element_type == JvPrimClass (byte)) + elts = (char *) elements ((jbyteArray) array); + else if (element_type == JvPrimClass (short)) + elts = (char *) elements ((jshortArray) array); + else if (element_type == JvPrimClass (int)) + elts = (char *) elements ((jintArray) array); + else if (element_type == JvPrimClass (long)) + elts = (char *) elements ((jlongArray) array); + else if (element_type == JvPrimClass (boolean)) + elts = (char *) elements ((jbooleanArray) array); + else if (element_type == JvPrimClass (char)) + elts = (char *) elements ((jcharArray) array); + else if (element_type == JvPrimClass (float)) + elts = (char *) elements ((jfloatArray) array); + else if (element_type == JvPrimClass (double)) + elts = (char *) elements ((jdoubleArray) array); + else + elts = (char *) elements ((jobjectArray) array); + return elts; +} + +extern "C" void _Jv_ThrowBadArrayIndex (jint bad_index) + __attribute__((noreturn)); +extern "C" void _Jv_ThrowNullPointerException (void) + __attribute__((noreturn)); +extern "C" void _Jv_ThrowNoSuchMethodError (void) + __attribute__((noreturn)); +extern "C" void _Jv_ThrowNoSuchFieldError (int) + __attribute__((noreturn)); +extern "C" jobject _Jv_NewArray (jint type, jint size) + __attribute__((__malloc__)); +extern "C" jobject _Jv_NewMultiArray (jclass klass, jint dims, ...) + __attribute__((__malloc__)); +extern "C" void *_Jv_CheckCast (jclass klass, jobject obj); +extern "C" void *_Jv_LookupInterfaceMethod (jclass klass, Utf8Const *name, + Utf8Const *signature); +extern "C" void *_Jv_LookupInterfaceMethodIdx (jclass klass, jclass iface, + int meth_idx); +extern "C" void _Jv_CheckArrayStore (jobject array, jobject obj); +extern "C" void _Jv_RegisterClass (jclass klass); +extern "C" void _Jv_RegisterClasses (const jclass *classes); +extern "C" void _Jv_RegisterClasses_Counted (const jclass *classes, + size_t count); +extern "C" void _Jv_RegisterResource (void *vptr); +extern void _Jv_UnregisterClass (_Jv_Utf8Const*, java::lang::ClassLoader*); + +extern "C" jobject _Jv_UnwrapJNIweakReference (jobject); + +extern jclass _Jv_FindClass (_Jv_Utf8Const *name, + java::lang::ClassLoader *loader); + +extern jclass _Jv_FindClassNoException (_Jv_Utf8Const *name, + java::lang::ClassLoader *loader); + +extern jclass _Jv_FindClassFromSignature (char *, + java::lang::ClassLoader *loader, + char ** = NULL); + +extern jclass _Jv_FindClassFromSignatureNoException (char *, + java::lang::ClassLoader *loader, + char ** = NULL); + +extern void _Jv_GetTypesFromSignature (jmethodID method, + jclass declaringClass, + JArray<jclass> **arg_types_out, + jclass *return_type_out); + +extern jboolean _Jv_CheckAccess (jclass self_klass, jclass other_klass, + jint flags); + +extern jobject _Jv_CallAnyMethodA (jobject obj, jclass return_type, + jmethodID meth, jboolean is_constructor, + JArray<jclass> *parameter_types, + jobjectArray args, + jclass iface = NULL); + +union jvalue; +extern void _Jv_CallAnyMethodA (jobject obj, + jclass return_type, + jmethodID meth, + jboolean is_constructor, + jboolean is_virtual_call, + JArray<jclass> *parameter_types, + const jvalue *args, + jvalue *result, + jboolean is_jni_call = true, + jclass iface = NULL); + +extern void _Jv_CheckOrCreateLoadingConstraint (jclass, + java::lang::ClassLoader *); + +extern jobject _Jv_NewMultiArray (jclass, jint ndims, jint* dims) + __attribute__((__malloc__)); + +extern "C" void _Jv_ThrowAbstractMethodError () __attribute__((__noreturn__)); + +/* Checked divide subroutines. */ +extern "C" +{ + jint _Jv_divI (jint, jint); + jint _Jv_remI (jint, jint); + jlong _Jv_divJ (jlong, jlong); + jlong _Jv_remJ (jlong, jlong); +} + +/* Get the number of arguments (cf. argc) or 0 if our argument + list was never initialized. */ +extern int _Jv_GetNbArgs (void); + +/* Get the specified argument (cf. argv[index]) or "" if either + our argument list was never initialized or the specified index + is out of bounds. */ +extern const char * _Jv_GetSafeArg (int index); + +/* Sets our argument list. Can be used by programs with non-standard + entry points. */ +extern void _Jv_SetArgs (int argc, const char **argv); + +/* Get the name of the running executable. */ +extern const char *_Jv_ThisExecutable (void); + +/* Return a pointer to a symbol in executable or loaded library. */ +void *_Jv_FindSymbolInExecutable (const char *); + +/* Initialize JNI. */ +extern void _Jv_JNI_Init (void); + +/* Get or set the per-thread JNIEnv used by the invocation API. */ +_Jv_JNIEnv *_Jv_GetCurrentJNIEnv (); +void _Jv_SetCurrentJNIEnv (_Jv_JNIEnv *); + +/* Free a JNIEnv. */ +void _Jv_FreeJNIEnv (_Jv_JNIEnv *); + +extern "C" void _Jv_JNI_PopSystemFrame (_Jv_JNIEnv *); +_Jv_JNIEnv *_Jv_GetJNIEnvNewFrameWithLoader (::java::lang::ClassLoader *); + +struct _Jv_JavaVM; +_Jv_JavaVM *_Jv_GetJavaVM (); + +/* Get a JVMTI environment */ +struct _Jv_JVMTIEnv; +_Jv_JVMTIEnv *_Jv_GetJVMTIEnv (void); + +/* Initialize JVMTI */ +extern void _Jv_JVMTI_Init (void); + +// Some verification functions from defineclass.cc. +bool _Jv_VerifyFieldSignature (_Jv_Utf8Const*sig); +bool _Jv_VerifyMethodSignature (_Jv_Utf8Const*sig); +bool _Jv_VerifyClassName (unsigned char* ptr, _Jv_ushort length); +bool _Jv_VerifyClassName (_Jv_Utf8Const *name); +bool _Jv_VerifyIdentifier (_Jv_Utf8Const *); +bool _Jv_ClassNameSamePackage (_Jv_Utf8Const *name1, _Jv_Utf8Const *name2); + +struct _Jv_core_chain +{ + int name_length; + const char *name; + int data_length; + const void *data; + + struct _Jv_core_chain *next; +}; + +// This is called when new core data is loaded. +extern void (*_Jv_RegisterCoreHook) (_Jv_core_chain *); + +_Jv_core_chain *_Jv_FindCore (_Jv_core_chain *node, jstring name); +void _Jv_FreeCoreChain (_Jv_core_chain *chain); + +#ifdef ENABLE_JVMPI + +#include "jvmpi.h" + +extern void (*_Jv_JVMPI_Notify_OBJECT_ALLOC) (JVMPI_Event *event); +extern void (*_Jv_JVMPI_Notify_THREAD_START) (JVMPI_Event *event); +extern void (*_Jv_JVMPI_Notify_THREAD_END) (JVMPI_Event *event); +#endif + +/* FIXME: this should really be defined in some more generic place */ +#define ROUND(V, A) (((((unsigned) (V))-1) | ((A)-1))+1) + +extern void _Jv_RegisterBootstrapPackages (); + +#define FLAG_BINARYCOMPAT_ABI (1<<31) /* Class is built with the BC-ABI. */ + +#define FLAG_BOOTSTRAP_LOADER (1<<30) /* Used when defining a class that + should be loaded by the bootstrap + loader. */ + +// These are used to find ABI versions we recognize. +#define GCJ_CXX_ABI_VERSION (__GNUC__ * 100000 + __GNUC_MINOR__ * 1000) + +// This is the old-style BC version ID used by GCJ 4.0.0. +#define OLD_GCJ_40_BC_ABI_VERSION (4 * 10000 + 0 * 10 + 5) + +// New style version IDs used by GCJ 4.0.1 and later. +#define GCJ_40_BC_ABI_VERSION (4 * 100000 + 0 * 1000) + +void _Jv_CheckABIVersion (unsigned long value); + + +inline bool +_Jv_ClassForBootstrapLoader (unsigned long value) +{ + return (value & FLAG_BOOTSTRAP_LOADER); +} + +// It makes the source cleaner if we simply always define this +// function. If the interpreter is not built, it will never return +// 'true'. +extern inline jboolean +_Jv_IsInterpretedClass (jclass c) +{ + return (c->accflags & java::lang::reflect::Modifier::INTERPRETED) != 0; +} + +// Return true if the class was compiled with the BC ABI. +extern inline jboolean +_Jv_IsBinaryCompatibilityABI (jclass c) +{ + // There isn't really a better test for the ABI type at this point, + // that will work once the class has been registered. + return c->otable_syms || c->atable_syms || c->itable_syms; +} + +// Returns whether the given class does not really exists (ie. we have no +// bytecode) but still allows us to do some very conservative actions. +// E.g. throwing a NoClassDefFoundError with the name of the missing +// class. +extern inline jboolean +_Jv_IsPhantomClass (jclass c) +{ + return c->state == JV_STATE_PHANTOM; +} + +// A helper function defined in prims.cc. +char* _Jv_PrependVersionedLibdir (char* libpath); + + +// An enum for use with JvSetThreadState. We use a C++ enum rather +// than the Java enum to avoid problems with class initialization +// during VM bootstrap. +typedef enum +{ + JV_BLOCKED, + JV_NEW, + JV_RUNNABLE, + JV_TERMINATED, + JV_TIMED_WAITING, + JV_WAITING +} JvThreadState; + +// Temporarily set the thread's state. +class JvSetThreadState +{ +private: + ::java::lang::Thread *thread; + jint saved; + +public: + + // Note that 'cthread' could be NULL -- during VM startup there may + // not be a Thread available. + JvSetThreadState(::java::lang::Thread *cthread, JvThreadState nstate) + : thread (cthread), + saved (cthread ? cthread->state : (jint)JV_NEW) + { + if (thread) + thread->state = nstate; + } + + ~JvSetThreadState() + { + if (thread) + thread->state = saved; + } +}; + +// This structure is used to represent all the data the native side +// needs. An object of this type is assigned to the `data' member of +// the Thread class. +struct natThread +{ + // A thread is either alive, dead, or being sent a signal; if it is + // being sent a signal, it is also alive. Thus, if you want to know + // if a thread is alive, it is sufficient to test alive_status != + // THREAD_DEAD. + volatile obj_addr_t alive_flag; + + // These are used to interrupt sleep and join calls. We can share a + // condition variable here since it only ever gets notified when the thread + // exits. + _Jv_Mutex_t join_mutex; + _Jv_ConditionVariable_t join_cond; + + // These are used by Unsafe.park() and Unsafe.unpark(). + ParkHelper park_helper; + + // This is private data for the thread system layer. + _Jv_Thread_t *thread; + + // Each thread has its own JNI object. + _Jv_JNIEnv *jni_env; +}; + +#endif /* __JAVA_JVM_H__ */ diff --git a/libjava/include/jvmpi.h b/libjava/include/jvmpi.h new file mode 100644 index 000000000..1af961782 --- /dev/null +++ b/libjava/include/jvmpi.h @@ -0,0 +1,227 @@ +/* Copyright (C) 2000 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +/* Note: this file must be compilable by the C compiler (for now, + assuming GNU C is ok). This means you must never use `//' + comments, and all C++-specific code must be conditional on + __cplusplus. */ + +#ifndef __GCJ_JVMPI_H__ +#define __GCJ_JVMPI_H__ + +#include <jni.h> + +/* JVMPI version numbers. FIXME: this is a semi-random number. The + documentation doesn't say what it should be. */ +#define JVMPI_VERSION_1 0x00020001 + +/* JVMPI return codes. FIXME: These are semi-random numbers. The + documentation doesn't say what they should be. */ +#define JVMPI_SUCCESS 0 +#define JVMPI_FAIL 1 +#define JVMPI_NOT_AVAILABLE 2 + +/* An opaque pointer representing an object ID. */ +struct _jobjectID; +typedef struct _jobjectID * jobjectID; + +typedef struct +{ + /* Source line number. */ + jint lineno; + /* Method being executed. */ + jmethodID method_id; +} JVMPI_CallFrame; + +typedef struct +{ + JNIEnv *env_id; + /* Number of frames in the call trace. */ + jint num_frames; + /* An array of frames representing the trace. Callees first. */ + JVMPI_CallFrame *frames; +} JVMPI_CallTrace; + +typedef struct +{ + /* Name of the field. */ + char *field_name; + /* Signature of the field. */ + char *field_signature; +} JVMPI_Field; + +/* The documentation doesn't actually specify what the + JVMPI_DUMP_LEVEL macros should be defined to. Here's a reasonable + guess. */ +#define JVMPI_DUMP_LEVEL_0 0 +#define JVMPI_DUMP_LEVEL_1 1 +#define JVMPI_DUMP_LEVEL_2 2 +#define JVMPI_DUMP_LEVEL_3 3 + +typedef struct +{ + /* One of JVMPI_DUMP_LEVEL_0, JVMPI_DUMP_LEVEL_1 or + JVMPI_DUMP_LEVEL_2. */ + jint heap_dump_level; +} JVMPI_HeapDumpArg; + +typedef struct +{ + /* Offset from the beginning of the method. */ + jint offset; + /* Line number from the beginning of the source file. */ + jint lineno; +} JVMPI_Lineno; + +typedef struct +{ + /* Name of the method. */ + char *method_name; + /* Signature of the method. */ + char *method_signature; + /* Start line number from the beginning of the source file. */ + jint start_lineno; + /* End line number from the beginning of the source file. */ + jint end_lineno; + /* The method ID. */ + jmethodID method_id; +} JVMPI_Method; + +/* An opaque pointer representing a raw monitor. */ +struct _JVMPI_RawMonitor; +typedef struct _JVMPI_RawMonitor *JVMPI_RawMonitor; + +/* JVMPI event codes. FIXME: These are semi-random numbers. The + documentation doesn't say what they should be. */ +#define JVMPI_EVENT_ARENA_DELETE 0 +#define JVMPI_EVENT_ARENA_NEW 1 +#define JVMPI_EVENT_CLASS_LOAD 2 +#define JVMPI_EVENT_CLASS_LOAD_HOOK 3 +#define JVMPI_EVENT_CLASS_UNLOAD 4 +#define JVMPI_EVENT_COMPILED_METHOD_LOAD 5 +#define JVMPI_EVENT_COMPILED_METHOD_UNLOAD 6 +#define JVMPI_EVENT_DATA_DUMP_REQUEST 7 +#define JVMPI_EVENT_DATA_RESET_REQUEST 8 +#define JVMPI_EVENT_GC_FINISH 9 +#define JVMPI_EVENT_GC_START 10 +#define JVMPI_EVENT_HEAP_DUMP 11 +#define JVMPI_EVENT_JNI_GLOBALREF_ALLOC 12 +#define JVMPI_EVENT_JNI_GLOBALREF_FREE 13 +#define JVMPI_EVENT_JNI_WEAK_GLOBALREF_ALLOC 14 +#define JVMPI_EVENT_JNI_WEAK_GLOBALREF_FREE 15 +#define JVMPI_EVENT_JVM_INIT_DONE 16 +#define JVMPI_EVENT_JVM_SHUT_DOWN 17 +#define JVMPI_EVENT_METHOD_ENTRY 18 +#define JVMPI_EVENT_METHOD_ENTRY2 19 +#define JVMPI_EVENT_METHOD_EXIT 20 +#define JVMPI_EVENT_MONITOR_CONTENDED_ENTER 21 +#define JVMPI_EVENT_MONITOR_CONTENDED_ENTERED 22 +#define JVMPI_EVENT_MONITOR_CONTENDED_EXIT 23 +#define JVMPI_EVENT_MONITOR_DUMP 24 +#define JVMPI_EVENT_MONITOR_WAIT 25 +#define JVMPI_EVENT_MONITOR_WAITED 26 +#define JVMPI_EVENT_OBJECT_ALLOC 27 +#define JVMPI_EVENT_OBJECT_DUMP 28 +#define JVMPI_EVENT_OBJECT_FREE 29 +#define JVMPI_EVENT_OBJECT_MOVE 30 +#define JVMPI_EVENT_RAW_MONITOR_CONTENDED_ENTER 31 +#define JVMPI_EVENT_RAW_MONITOR_CONTENDED_ENTERED 32 +#define JVMPI_EVENT_RAW_MONITOR_CONTENDED_EXIT 33 +#define JVMPI_EVENT_THREAD_END 34 +#define JVMPI_EVENT_THREAD_START 35 +#define JVMPI_EVENT_INSTRUCTION_START 36 + + +typedef struct +{ + /* Event type. */ + jint event_type; + + /* Evn where this event occurred. */ + JNIEnv *env_id; + + union + { + struct + { + char *class_name; + char *source_name; + jint num_interfaces; + jint num_methods; + JVMPI_Method *methods; + jint num_static_fields; + JVMPI_Field *statics; + jint num_instance_fields; + JVMPI_Field *instances; + jobjectID class_id; + } class_load; + + struct + { + jobjectID class_id; + } class_unload; + + struct + { + jint arena_id; + jobjectID class_id; + jint is_array; + jint size; + jobjectID obj_id; + } obj_alloc; + + struct + { + char *thread_name; + char *group_name; + char *parent_name; + jobjectID thread_id; + JNIEnv *thread_env_id; + } thread_start; + + } u; + +} JVMPI_Event; + +typedef struct +{ + /* JVMPI version number. */ + jint version; + + /* Implemented by the user... */ + void (*NotifyEvent) (JVMPI_Event *event); + + /* Implemented by the runtime... */ + jint (*EnableEvent) (jint event_type, void *arg); + jint (*DisableEvent) (jint event_type, void *arg); + jint (*RequestEvent) (jint event_type, void *arg); + void (*GetCallTrace) (JVMPI_CallTrace *trace, jint depth); + void (*ProfilerExit) (jint); + JVMPI_RawMonitor (*RawMonitorCreate) (char *lock_name); + void (*RawMonitorEnter) (JVMPI_RawMonitor lock_id); + void (*RawMonitorExit) (JVMPI_RawMonitor lock_id); + void (*RawMonitorWait) (JVMPI_RawMonitor lock_id, jlong ms); + void (*RawMonitorNotifyAll) (JVMPI_RawMonitor lock_id); + void (*RawMonitorDestroy) (JVMPI_RawMonitor lock_id); + jlong (*GetCurrentThreadCpuTime) (void); + void (*SuspendThread) (JNIEnv *env); + void (*ResumeThread) (JNIEnv *env); + jint (*GetThreadStatus) (JNIEnv *env); + jboolean (*ThreadHasRun) (JNIEnv *env); + jint (*CreateSystemThread) (char *name, jint priority, void (*f) (void *)); + void (*SetThreadLocalStorage) (JNIEnv *env_id, void *ptr); + void *(*GetThreadLocalStorage) (JNIEnv *env_id); + void (*DisableGC) (void); + void (*EnableGC) (void); + void (*RunGC) (void); + jobjectID (*GetThreadObject) (JNIEnv *env); + jobjectID (*GetMethodClass) (jmethodID mid); + +} JVMPI_Interface; + +#endif /* __GCJ_JVMPI_H__ */ diff --git a/libjava/include/jvmti-int.h b/libjava/include/jvmti-int.h new file mode 100644 index 000000000..6b09c8376 --- /dev/null +++ b/libjava/include/jvmti-int.h @@ -0,0 +1,94 @@ +/* jvmti-int.h -- Internal JVMTI definitions + Copyright (C) 2006, 2007 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath 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, or (at your option) +any later version. + +GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +As a special exception, if you link this library with other files to +produce an executable, this library does not by itself cause the +resulting executable to be covered by the GNU General Public License. +This exception does not however invalidate any other reasons why the +executable file might be covered by the GNU General Public License. */ + +#ifndef __GCJ_JVTMI_INT_H__ +#define __GCJ_JVMTI_INT_H__ + +/* A macro to map jvmtiEvent to an index in thread[] and enabled[] + in the jvmtiEnv. This will only work if the order of events listed + in jvmtiEvent and jvmtiEventCallbacks is kept the same (which should + not be a problem). */ +#define EVENT_INDEX(jvmtievent) (int)(jvmtievent - JVMTI_EVENT_VM_INIT) + +/* A few globals to help limit the impact of JVMTI on normal operations. + False means no JVMTI environment requested that event type. */ +namespace JVMTI +{ + // Is JVMTI enabled? (i.e., any jvmtiEnv created?) + extern bool enabled; + + // Event notifications + extern bool VMInit; + extern bool VMDeath; + extern bool ThreadStart; + extern bool ThreadEnd; + extern bool ClassFileLoadHook; + extern bool ClassLoad; + extern bool ClassPrepare; + extern bool VMStart; + extern bool Exception; + extern bool ExceptionCatch; + extern bool SingleStep; + extern bool FramePop; + extern bool Breakpoint; + extern bool FieldAccess; + extern bool FieldModification; + extern bool MethodEntry; + extern bool MethodExit; + extern bool NativeMethodBind; + extern bool CompiledMethodLoad; + extern bool CompiledMethodUnload; + extern bool DynamicCodeGenerated; + extern bool DataDumpRequest; + extern bool reserved72; + extern bool MonitorWait; + extern bool MonitorWaited; + extern bool MonitorContendedEnter; + extern bool MonitorContendedEntered; + extern bool reserved77; + extern bool reserved78; + extern bool reserved79; + extern bool reserved80; + extern bool GarbageCollectionStart; + extern bool GarbageCollectionFinish; + extern bool ObjectFree; + extern bool VMObjectAlloc; +}; + +/* A macro to test whether an event should be posted to JVMTI.*/ +#define JVMTI_REQUESTED_EVENT(Event) __builtin_expect (JVMTI::Event, false) + +/* Post the event to requesting JVMTI environments. + + For speed, this function should only be called after + JVMTI_REQUESTED_EVENT is checked. */ +extern void _Jv_JVMTI_PostEvent (jvmtiEvent type, jthread event_thread, ...); +// Returns the jvmtiEnv used by the JDWP backend +extern jvmtiEnv *_Jv_GetJDWP_JVMTIEnv (void); + +// Reports JVMTI excpetions +extern void _Jv_ReportJVMTIExceptionThrow (jthrowable); +#endif /* __GCJ_JVMTI_INT_H__ */ diff --git a/libjava/include/jvmti_md.h b/libjava/include/jvmti_md.h new file mode 100644 index 000000000..2270f3f3d --- /dev/null +++ b/libjava/include/jvmti_md.h @@ -0,0 +1,66 @@ +/* jvmti_md.h + Copyright (C) 2006, 2007 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath 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, or (at your option) +any later version. + +GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +As a special exception, if you link this library with other files to +produce an executable, this library does not by itself cause the +resulting executable to be covered by the GNU General Public License. +This exception does not however invalidate any other reasons why the +executable file might be covered by the GNU General Public License. */ + +#ifndef __GCJ_JVMTI_MD_H__ +#define __GCJ_JVMTI_MD_H__ + +#ifdef __GCJ_JNI_IMPL__ + +/* If __GCJ_JNI_IMPL__ is defined, then we assume that we're building + libgcj itself, and we include functions which should not be exposed + to JVMTI users. */ + +/* The number of event slots needed to keep track of event reporting + constraints for an environment. This will only work if the order of + events listed in jvmtiEvent and jvmtiEventCallbacks is kept the same + (which should not be a problem). */ +#define EVENT_SLOTS \ + (int)(JVMTI_EVENT_VM_OBJECT_ALLOC - JVMTI_EVENT_VM_INIT + 1) + +/* Contents of the jvmtiEnv; but only inside the implementation. */ +#define _CLASSPATH_JVMTIENV_CONTENTS \ + /* Event handlers registered via SetEventCallbacks */ \ + jvmtiEventCallbacks callbacks; \ + \ + /* Array of event thread for which to report event. */ \ + /* NULL means all threads. One for each callback. */ \ + jthread thread[EVENT_SLOTS]; \ + \ + /* Array of notification modes for callbacks. */ \ + /* One for each callback. */ \ + bool enabled[EVENT_SLOTS]; + +/* Redefine the standard JVMTI types to something a little more + precise than "jobject". */ +#define _CLASSPATH_VM_JVMTI_TYPES_DEFINED +typedef java::lang::Thread *jthread; +typedef java::lang::ThreadGroup *jthreadGroup; +typedef jlong jlocation; +typedef struct _Jv_rawMonitorID *jrawMonitorID; + +#endif /* __GCJ_JNI_IMPL__ */ + +#endif /* __GCJ_JVMTI_MD_H__ */ diff --git a/libjava/include/mips-signal.h b/libjava/include/mips-signal.h new file mode 100644 index 000000000..478e3a4e2 --- /dev/null +++ b/libjava/include/mips-signal.h @@ -0,0 +1,49 @@ +// mips-signal.h - Catch runtime signals and turn them into exceptions +// on an mips based Linux system. + +/* Copyright (C) 1998, 1999, 2001, 2002, 2003, 2004, 2006 + Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +/* Adapted from sparc-signal.h and powerpc-signal.h + by David Daney <ddaney@avtrex.com> */ + +#ifndef JAVA_SIGNAL_H +#define JAVA_SIGNAL_H 1 + +#include <signal.h> +#include <unistd.h> + +#define HANDLE_SEGV 1 +#define HANDLE_FPE 1 + +#define SIGNAL_HANDLER(_name) \ +static void _name (int _dummy __attribute__ ((__unused__)), \ + siginfo_t *_info __attribute__ ((__unused__)), \ + void *_arg __attribute__ ((__unused__))) + +#define MAKE_THROW_FRAME(_exception) + +#define _INIT_SIG_HANDLER(_SIG, _ACTION) \ +do \ + { \ + struct sigaction act; \ + act.sa_sigaction = _ACTION; \ + act.sa_flags = SA_SIGINFO | SA_NODEFER; \ + sigemptyset (&act.sa_mask); \ + sigaction(_SIG, &act, NULL); \ + } \ +while (0) + +#define INIT_SEGV _INIT_SIG_HANDLER (SIGSEGV, catch_segv) + +#define INIT_FPE _INIT_SIG_HANDLER (SIGFPE, catch_fpe) +#undef HANDLE_DIVIDE_OVERFLOW + +#endif /* JAVA_SIGNAL_H */ + diff --git a/libjava/include/no-gc.h b/libjava/include/no-gc.h new file mode 100644 index 000000000..ce0ffb810 --- /dev/null +++ b/libjava/include/no-gc.h @@ -0,0 +1,23 @@ +// -*- c++ -*- +// no-gc.h - Defines for no garbage collector. + +/* Copyright (C) 1998, 1999, 2006, 2007 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#ifndef __JV_NO_GC__ +#define __JV_NO_GC__ + +// Suspend the given thread. This includes suspending the calling thread. +extern "C" void _Jv_SuspendThread (_Jv_Thread_t *); + +// Resume a suspended thread. +extern "C" void _Jv_ResumeThread (_Jv_Thread_t *); + +// Is the given thread suspended? +extern "C" int _Jv_IsThreadSuspended (_Jv_Thread_t *); +#endif /* __JV_NO_GC__ */ diff --git a/libjava/include/no-threads.h b/libjava/include/no-threads.h new file mode 100644 index 000000000..a598df3e8 --- /dev/null +++ b/libjava/include/no-threads.h @@ -0,0 +1,162 @@ +// -*- c++ -*- +// no-threads.h - Defines for using no threads. + +/* Copyright (C) 1998, 1999, 2004, 2006 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#ifndef __JV_NO_THREADS__ +#define __JV_NO_THREADS__ + +#include "config.h" + +#include <stdlib.h> +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif + +// +// Typedefs. +// + +typedef int _Jv_ConditionVariable_t; +typedef int _Jv_Mutex_t; +typedef void _Jv_ThreadStartFunc (java::lang::Thread *); + +// +// Declarations +// + +class _Jv_Thread_t { }; + +// +// Condition variables. +// + +inline void +_Jv_CondInit (_Jv_ConditionVariable_t *) +{ +} + +// Waiting is ok provided there is a timeout. Otherwise we will just +// wait forever. +inline int +_Jv_CondWait (_Jv_ConditionVariable_t *, _Jv_Mutex_t *, + jlong millis, jint nanos) +{ + if (millis == 0 && nanos == 0) + JvFail ("_Jv_CondWait without timeout"); + +#ifdef HAVE_SLEEP + int seconds = millis / 1000; + if (seconds > 0) + sleep (seconds); +#endif + + return 0; +} + +inline int +_Jv_CondNotify (_Jv_ConditionVariable_t *, _Jv_Mutex_t *) +{ + // It is ok to notify -- it just has no effect. + return 0; +} + +inline int +_Jv_CondNotifyAll (_Jv_ConditionVariable_t *, _Jv_Mutex_t *) +{ + // It is ok to notify -- it just has no effect. + return 0; +} + + +// +// Mutexes. +// + +inline int _Jv_MutexCheckMonitor (_Jv_Mutex_t *) +{ + return 0; +} + +inline void +_Jv_MutexInit (_Jv_Mutex_t *) +{ +} + +inline int +_Jv_MutexLock (_Jv_Mutex_t *) +{ + return 0; +} + +inline int +_Jv_MutexUnlock (_Jv_Mutex_t *) +{ + return 0; +} + + +// +// Thread creation and manipulation. +// + +inline void +_Jv_InitThreads (void) +{ +} + +_Jv_Thread_t * +_Jv_ThreadInitData (java::lang::Thread *); + +inline void +_Jv_ThreadDestroyData (_Jv_Thread_t *) +{ +} + +inline java::lang::Thread * +_Jv_ThreadCurrent (void) +{ + extern java::lang::Thread *_Jv_OnlyThread; + return _Jv_OnlyThread; +} + +inline void +_Jv_ThreadYield (void) +{ +} + +inline void +_Jv_ThreadSetPriority (_Jv_Thread_t *, jint) +{ +} + +inline void +_Jv_ThreadRegister (_Jv_Thread_t *) +{ +} + +inline void +_Jv_ThreadUnRegister (void) +{ +} + +void _Jv_ThreadStart (java::lang::Thread *, _Jv_Thread_t *, + _Jv_ThreadStartFunc *meth); + +inline void +_Jv_ThreadWait (void) +{ +} + +inline void +_Jv_ThreadInterrupt (_Jv_Thread_t *) +{ +} + +#endif /* __JV_NO_THREADS__ */ diff --git a/libjava/include/pa-signal.h b/libjava/include/pa-signal.h new file mode 100644 index 000000000..add132517 --- /dev/null +++ b/libjava/include/pa-signal.h @@ -0,0 +1,49 @@ +// pa-signal.h - Catch runtime signals and turn them into exceptions. + +/* Copyright (C) 1998, 1999, 2000, 2009 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#ifndef JAVA_SIGNAL_H +#define JAVA_SIGNAL_H 1 + +#include <signal.h> +#include <sys/syscall.h> + +#define HANDLE_SEGV 1 +#define HANDLE_FPE 1 + +#define SIGNAL_HANDLER(_name) \ +static void _Jv_##_name (int _dummy __attribute__ ((unused)), \ + siginfo_t *_info __attribute__ ((__unused__)), \ + void *arg __attribute__ ((__unused__))) + +#define MAKE_THROW_FRAME(_exception) + +#define INIT_SEGV \ +do \ + { \ + struct sigaction act; \ + act.sa_sigaction = _Jv_catch_segv; \ + sigemptyset (&act.sa_mask); \ + act.sa_flags = SA_SIGINFO; \ + syscall (SYS_rt_sigaction, SIGSEGV, &act, NULL, _NSIG / 8); \ + } \ +while (0) + +#define INIT_FPE \ +do \ + { \ + struct sigaction act; \ + act.sa_sigaction = _Jv_catch_fpe; \ + sigemptyset (&act.sa_mask); \ + act.sa_flags = SA_SIGINFO; \ + syscall (SYS_rt_sigaction, SIGFPE, &act, NULL, _NSIG / 8); \ + } \ +while (0) + +#endif /* JAVA_SIGNAL_H */ diff --git a/libjava/include/posix-threads.h b/libjava/include/posix-threads.h new file mode 100644 index 000000000..59e65f744 --- /dev/null +++ b/libjava/include/posix-threads.h @@ -0,0 +1,384 @@ +// -*- c++ -*- +// posix-threads.h - Defines for using POSIX threads. + +/* Copyright (C) 1998, 1999, 2001, 2003, 2006 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#ifndef __JV_POSIX_THREADS__ +#define __JV_POSIX_THREADS__ + +// NOTE: This file may only reference those pthread functions which +// are known not to be overridden by the Boehm GC. If in doubt, scan +// boehm-gc/gc.h. This is yucky but lets us avoid including gc.h +// everywhere (which would be truly yucky). + +#include <pthread.h> +#include <sched.h> +#include <sysdep/locks.h> + +// +// Typedefs. +// + +typedef struct _Jv_Thread_t +{ + // Flag values are defined in implementation. + int flags; + + // Actual thread id. + pthread_t thread; + + // Java Thread object. + java::lang::Thread *thread_obj; + + // Condition variable and corresponding mutex, used to implement the + // interruptable wait/notify mechanism. + pthread_cond_t wait_cond; + pthread_mutex_t wait_mutex; + + // Next thread for Condition Variable wait-list chain. + _Jv_Thread_t *next; + +} _Jv_Thread_t; + +typedef void _Jv_ThreadStartFunc (java::lang::Thread *); + +// Condition Variables used to implement wait/notify/sleep/interrupt. +typedef struct +{ + // Linked list of Threads that are waiting to be notified. + _Jv_Thread_t *first; + +} _Jv_ConditionVariable_t; + +typedef struct +{ + // For compatibility, simplicity, and correctness, we do not use the native + // pthreads recursive mutex implementation, but simulate them instead. + + // Mutex the thread holds the entire time this mutex is held. + pthread_mutex_t mutex; + + // Thread holding this mutex. + pthread_t owner; + + // Number of times mutex is held (lock depth). If 0, the lock is not held. + int count; +} _Jv_Mutex_t; + +// This is a convenience function used only by the pthreads thread +// implementation. This is slow, but that's too bad -- we need to do +// the checks for correctness. It might be nice to be able to compile +// this out. Returns 0 if the lock is held by the current thread, and +// 1 otherwise. +inline int +_Jv_MutexCheckMonitor (_Jv_Mutex_t *mu) +{ + return (mu->owner != pthread_self()); +} + +// Type identifying a POSIX thread. +typedef pthread_t _Jv_ThreadDesc_t; + +inline _Jv_ThreadDesc_t +_Jv_GetPlatformThreadID(_Jv_Thread_t *t) +{ + return t->thread; +} + +// +// Signal helpers. +// + +void _Jv_BlockSigchld(); +void _Jv_UnBlockSigchld(); + + +// +// Condition variables. +// + +int _Jv_CondWait (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *mu, + jlong millis, jint nanos); + +int _Jv_CondNotify (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *mu); + +int _Jv_CondNotifyAll (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *mu); + +inline void +_Jv_CondInit (_Jv_ConditionVariable_t *cv) +{ + cv->first = 0; +} + +// +// Mutexes. +// + +#ifdef LOCK_DEBUG +# include <stdio.h> +#endif + +inline void +_Jv_MutexInit (_Jv_Mutex_t *mu) +{ +# ifdef LOCK_DEBUG /* Assumes Linuxthreads */ + pthread_mutexattr_t attr; + pthread_mutexattr_init(&attr); + pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ERRORCHECK); + pthread_mutex_init (&mu->mutex, &attr); +# else + pthread_mutex_init (&mu->mutex, 0); +# endif + + mu->count = 0; + mu->owner = 0; +} + +extern int _Jv_MutexLock (_Jv_Mutex_t *); + +inline int +_Jv_MutexUnlock (_Jv_Mutex_t *mu) +{ + if (_Jv_MutexCheckMonitor (mu)) + { +# ifdef LOCK_DEBUG + fprintf(stderr, "_Jv_MutexUnlock: Not owner\n"); + for (;;) {} +# endif + return 1; + } + + mu->count--; + + if (mu->count == 0) + { + mu->owner = 0; +# ifdef LOCK_DEBUG + int result = pthread_mutex_unlock (&mu->mutex); + if (0 != result) + { + fprintf(stderr, "Pthread_mutex_unlock returned %d\n", result); + for (;;) {} + } +# else + pthread_mutex_unlock (&mu->mutex); +# endif + } + return 0; +} + +#ifndef LINUX_THREADS + +// pthread_mutex_destroy does nothing on Linux and it is a win to avoid +// defining this macro. + +#define _Jv_HaveMutexDestroy + +inline void +_Jv_MutexDestroy (_Jv_Mutex_t *mu) +{ + pthread_mutex_destroy (&mu->mutex); +} + +#endif /* LINUX_THREADS */ + +// +// Thread creation and manipulation. +// + +void _Jv_InitThreads (void); + +_Jv_Thread_t *_Jv_ThreadInitData (java::lang::Thread *thread); +void _Jv_ThreadDestroyData (_Jv_Thread_t *data); + +inline java::lang::Thread * +_Jv_ThreadCurrent (void) +{ + extern pthread_key_t _Jv_ThreadKey; + return (java::lang::Thread *) pthread_getspecific (_Jv_ThreadKey); +} + +#ifdef JV_HASH_SYNCHRONIZATION +// Should be specialized to just load the "current thread" register +// on platforms that support it. Speed is of the essence. The value +// of the descriptor is not, so long as there is a one-to-one correspondence +// to threads. + + +#ifdef __ia64__ + +typedef size_t _Jv_ThreadId_t; + +register size_t _Jv_self __asm__("r13"); + // For linux_threads this is really a pointer to its thread data + // structure. We treat it as opaque. That should also work + // on other operating systems that follow the ABI standard. + +// This should become the prototype for machines that maintain a thread +// pointer in a register. +inline _Jv_ThreadId_t +_Jv_ThreadSelf (void) +{ + return _Jv_self; +} + +#define JV_SELF_DEFINED + +#endif /* __ia64__ */ + +#ifdef __alpha__ + +typedef void *_Jv_ThreadId_t; + +inline _Jv_ThreadId_t +_Jv_ThreadSelf (void) +{ + return __builtin_thread_pointer (); +} + +#define JV_SELF_DEFINED + +#endif /* __alpha__ */ + +#if defined(SLOW_PTHREAD_SELF) + +#include "sysdep/locks.h" + +typedef pthread_t _Jv_ThreadId_t; + +// E.g. on X86 Linux, pthread_self() is too slow for our purpose. +// Instead we maintain a cache based on the current sp value. +// This is similar to what's done for thread local allocation in the +// GC, only far simpler. +// This code should probably go away when Linux/X86 starts using a +// segment register to hold the thread id. +# define LOG_THREAD_SPACING 12 + // If two thread pointer values are closer than + // 1 << LOG_THREAD_SPACING, we assume they belong + // to the same thread. +# define SELF_CACHE_SIZE 1024 +# define SC_INDEX(sp) (((unsigned long)(sp) >> 19) & (SELF_CACHE_SIZE-1)) + // Mapping from sp value to cache index. + // Note that this is not in any real sense a hash + // function, since we need to be able to clear + // all possibly matching slots on thread startup. + // Thus all entries that might correspond to + // a given thread are intentionally contiguous. + // Works well with anything that allocates at least + // 512KB stacks. +# define SC_CLEAR_MIN (-16) // When starting a new thread, we clear +# define SC_CLEAR_MAX 0 // all self cache entries between + // SC_INDEX(sp)+SC_CLEAR_MIN and + // SC_INDEX(sp)+SC_CLEAR_MAX to ensure + // we never see stale values. The + // current values assume a downward + // growing stack of size <= 7.5 MB. +# define BAD_HIGH_SP_VALUE ((size_t)(-1)) + +extern volatile +struct self_cache_entry { + size_t high_sp_bits; // sp value >> LOG_THREAD_SPACING + pthread_t self; // Corresponding thread +} _Jv_self_cache[]; + +void _Jv_Self_Cache_Init(); + +_Jv_ThreadId_t +_Jv_ThreadSelf_out_of_line(volatile self_cache_entry *sce, + size_t high_sp_bits); + +inline _Jv_ThreadId_t +_Jv_ThreadSelf (void) +{ + int dummy; + size_t sp = (size_t)(&dummy); + unsigned h = SC_INDEX(sp); + volatile self_cache_entry *sce = _Jv_self_cache + h; + pthread_t candidate_self = sce -> self; // Read must precede following one. + read_barrier(); + if (sce -> high_sp_bits == sp >> LOG_THREAD_SPACING) + { + // The sce -> self value we read must be valid. An intervening + // cache replacement by another thread would have first replaced + // high_sp_bits by something else, and it can't possibly change + // back without our intervention. + return candidate_self; + } + else + return _Jv_ThreadSelf_out_of_line(sce, sp >> LOG_THREAD_SPACING); +} + +#define JV_SELF_DEFINED + +#endif /* SLOW_PTHREAD_SELF */ + +#ifndef JV_SELF_DEFINED /* If all else fails, call pthread_self directly */ + +typedef pthread_t _Jv_ThreadId_t; + +inline _Jv_ThreadId_t +_Jv_ThreadSelf (void) +{ + return pthread_self(); +} + +#endif /* !JV_SELF_DEFINED */ + +#endif /* JV_HASH_SYNCHRONIZATION */ + +inline _Jv_Thread_t * +_Jv_ThreadCurrentData (void) +{ + extern pthread_key_t _Jv_ThreadDataKey; + return (_Jv_Thread_t *) pthread_getspecific (_Jv_ThreadDataKey); +} + +inline void +_Jv_ThreadYield (void) +{ +#ifdef HAVE_SCHED_YIELD + sched_yield (); +#endif /* HAVE_SCHED_YIELD */ +} + +void _Jv_ThreadRegister (_Jv_Thread_t *data); +void _Jv_ThreadUnRegister (); + +void _Jv_ThreadSetPriority (_Jv_Thread_t *data, jint prio); + +void _Jv_ThreadStart (java::lang::Thread *thread, _Jv_Thread_t *data, + _Jv_ThreadStartFunc *meth); + +void _Jv_ThreadWait (void); + +void _Jv_ThreadInterrupt (_Jv_Thread_t *data); + +// park() / unpark() support + +struct ParkHelper +{ + volatile obj_addr_t permit; + pthread_mutex_t mutex; + pthread_cond_t cond; + + void init (); + void deactivate (); + void destroy (); + void park (jboolean isAbsolute, jlong time); + void unpark (); +}; + +inline void +ParkHelper::destroy () +{ + pthread_mutex_destroy (&mutex); + pthread_cond_destroy (&cond); +} + +#endif /* __JV_POSIX_THREADS__ */ diff --git a/libjava/include/posix.h b/libjava/include/posix.h new file mode 100644 index 000000000..c49da05eb --- /dev/null +++ b/libjava/include/posix.h @@ -0,0 +1,207 @@ +// posix.h -- Helper functions for POSIX-flavored OSs. + +/* Copyright (C) 2000, 2002, 2003, 2006, 2010 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#ifndef __JV_POSIX_H__ +#define __JV_POSIX_H__ + +/* Required on Tru64 UNIX V4/V5 so <sys/socket.h> defines prototypes of + socket functions with socklen_t instead of size_t. This must be defined + early so <standards.h> defines the correct version of __PIIX. */ +#define _POSIX_PII_SOCKET + +#include <time.h> +#include <sys/types.h> + +#ifdef HAVE_SYS_TIME_H +#include <sys/time.h> +#endif + +#ifdef HAVE_SYS_SELECT_H +#include <sys/select.h> +#endif + +#ifdef HAVE_SYS_SOCKET_H +#include <sys/socket.h> +#endif + +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif + +#include <fcntl.h> + +/* The header file <sys/rw_lock.h> needs to be included before javaprims.h + on HP-UX 11 to avoid a compilation error. */ +#ifdef HAVE_SYS_RW_LOCK_H +#include <sys/rw_lock.h> +#endif + +#include <gcj/cni.h> +#include <java/util/Properties.h> + +// Prefix and suffix for shared libraries. +#define _Jv_platform_solib_prefix "lib" +#if defined(__APPLE__) && defined(__MACH__) +#define _Jv_platform_solib_suffix ".dylib" +#elif defined(HPUX) && defined(HP_PA) +#define _Jv_platform_solib_suffix ".sl" +#else +#define _Jv_platform_solib_suffix ".so" +#endif + +#if __MACH__ && (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1060) +# undef _Unwind_FindEnclosingFunction +# define _Unwind_FindEnclosingFunction(PC) _darwin10_Unwind_FindEnclosingFunction(PC) +#endif + +// Some POSIX systems don't have O_SYNC and O_DYSNC so we define them here. +// Needed in java/io/natFileDescriptorPosix.cc. +#if !defined (O_SYNC) && defined (O_FSYNC) +#define O_SYNC O_FSYNC +#endif +#if !defined (O_DSYNC) && defined (O_FSYNC) +#define O_DSYNC O_FSYNC +#endif +// If O_DSYNC is still not defined, use O_SYNC (needed for newlib) +#if !defined (O_DSYNC) +#define O_DSYNC O_SYNC +#endif + +// Name of the Process implementation. +#ifdef ECOS +#define _Jv_platform_process ::java::lang::EcosProcess +#else +#define _Jv_platform_process ::java::lang::PosixProcess +#endif + +// Separator for file name components. +#define _Jv_platform_file_separator ((jchar) '/') +// Separator for path components. +#define _Jv_platform_path_separator ((jchar) ':') + +// List of names for `JNI_OnLoad'. +#define _Jv_platform_onload_names { "JNI_OnLoad", NULL } + +// Type of libffi ABI used by JNICALL methods. NOTE: This must agree +// with the JNICALL definition in jni.h +#define _Jv_platform_ffi_abi FFI_DEFAULT_ABI + +#ifndef DISABLE_JAVA_NET +#include <java/net/InetAddress.h> +#endif + +extern int _Jv_select (int n, fd_set *, fd_set *, fd_set *, struct timeval *); +extern jlong _Jv_platform_gettimeofday (); +extern jlong _Jv_platform_nanotime (); +extern void _Jv_platform_initialize (void); +extern void _Jv_platform_initProperties (java::util::Properties*); + +#ifdef JV_HASH_SYNCHRONIZATION +#ifndef HAVE_USLEEP_DECL +extern "C" int usleep (useconds_t useconds); +#endif /* not HAVE_USLEEP_DECL */ + +inline void +_Jv_platform_usleep (unsigned long usecs) +{ + usleep (usecs); +} +#endif /* JV_HASH_SYNCHRONIZATION */ + +#ifndef DISABLE_JAVA_NET + +#ifndef HAVE_SOCKLEN_T +#define socklen_t int +#endif + +static inline int +_Jv_socket (int domain, int type, int protocol) +{ + return ::socket (domain, type, protocol); +} + +#undef socket + +inline int +_Jv_connect (jint fd, sockaddr *ptr, int len) +{ + return ::connect (fd, ptr, len); +} + +#undef connect + +inline int +_Jv_close (jint fd) +{ + return ::close (fd); +} + +#undef close + +// Avoid macro definitions of bind from system headers, e.g. on +// Solaris 7 with _XOPEN_SOURCE. FIXME +inline int +_Jv_bind (int fd, struct sockaddr *addr, int addrlen) +{ + return ::bind (fd, addr, addrlen); +} + +#undef bind + +// Same problem with accept on Tru64 UNIX with _POSIX_PII_SOCKET +inline int +_Jv_accept (int fd, struct sockaddr *addr, socklen_t *addrlen) +{ + return ::accept (fd, addr, addrlen); +} + +#undef accept + +inline int +_Jv_listen (int fd, int backlog) +{ + return ::listen (fd, backlog); +} + +#undef listen + +inline int +_Jv_write(int s, void *buf, int len) +{ + return ::write (s, buf, len); +} + +#undef write + +inline int +_Jv_read(int s, void *buf, int len) +{ + return ::read (s, buf, len); +} + +#undef read + +#endif /* DISABLE_JAVA_NET */ + +// Wraps ::pipe +static inline int +_Jv_pipe (int filedes[2]) +{ + return ::pipe (filedes); +} + +// Forward declaration. See java-stack.h for definition. +struct _Jv_AddrInfo; + +// Given an address, determine the executable or shared object that defines +// it and the nearest named symbol. +extern int _Jv_platform_dladdr (void *addr, _Jv_AddrInfo *info); + +#endif /* __JV_POSIX_H__ */ diff --git a/libjava/include/powerpc-signal.h b/libjava/include/powerpc-signal.h new file mode 100644 index 000000000..9c6ddac37 --- /dev/null +++ b/libjava/include/powerpc-signal.h @@ -0,0 +1,113 @@ +// powerpc-signal.h - Catch runtime signals and turn them into exceptions +// on a powerpc based Linux system. + +/* Copyright (C) 2003, 2006 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + + +#ifndef JAVA_SIGNAL_H +#define JAVA_SIGNAL_H 1 + +#include <signal.h> +#include <sys/syscall.h> + +#define HANDLE_SEGV 1 +#undef HANDLE_FPE + +#define SIGNAL_HANDLER(_name) \ + static void _name (int /* _signal */, struct sigcontext *_sc) + +/* MD_FALLBACK_FRAME_STATE_FOR takes care of special casing PC + before the faulting instruction, so we don't need to do anything + here. */ + +#define MAKE_THROW_FRAME(_exception) + +/* For an explanation why we cannot simply use sigaction to + install the handlers, see i386-signal.h. */ + +/* We use kernel_old_sigaction here because we're calling the kernel + directly rather than via glibc. The sigaction structure that the + syscall uses is a different shape from the one in userland and not + visible to us in a header file so we define it here. + Additionally we want a proper prototype for the handler function + with the struct sigcontext pointer passed by the kernel as the 2nd + argument, which isn't there in userland headers. + + Note that we explicitly avoid the SA_SIGINFO flag in INIT_SEGV and + INIT_FPE below. Using the ucontext pointer passed as 3rd argument + of a SA_SIGINFO type handler would need complicated backwards + compatibility hacks in MAKE_THROW_FRAME, as the ucontext layout + on PPC changed during the 2.5 kernel series. */ + +#ifndef __powerpc64__ +struct kernel_old_sigaction { + void (*k_sa_handler) (int, struct sigcontext *); + unsigned long k_sa_mask; + unsigned long k_sa_flags; + void (*k_sa_restorer) (void); +}; + +#define INIT_SEGV \ +do \ + { \ + struct kernel_old_sigaction kact; \ + kact.k_sa_handler = catch_segv; \ + kact.k_sa_mask = 0; \ + kact.k_sa_flags = 0; \ + if (syscall (SYS_sigaction, SIGSEGV, &kact, NULL) != 0) \ + __asm__ __volatile__ (".long 0"); \ + } \ +while (0) + +#define INIT_FPE \ +do \ + { \ + struct kernel_old_sigaction kact; \ + kact.k_sa_handler = catch_fpe; \ + kact.k_sa_mask = 0; \ + kact.k_sa_flags = 0; \ + if (syscall (SYS_sigaction, SIGFPE, &kact, NULL) != 0) \ + __asm__ __volatile__ (".long 0"); \ + } \ +while (0) + +#else /* powerpc64 */ + +struct kernel_sigaction +{ + void (*k_sa_handler) (int, struct sigcontext *); + unsigned long k_sa_flags; + void (*k_sa_restorer)(void); + unsigned long k_sa_mask; +}; + +#define INIT_SEGV \ +do \ + { \ + struct kernel_sigaction kact; \ + memset (&kact, 0, sizeof (kact)); \ + kact.k_sa_handler = catch_segv; \ + if (syscall (SYS_rt_sigaction, SIGSEGV, &kact, NULL, 8) != 0) \ + __asm__ __volatile__ (".long 0"); \ + } \ +while (0) + +#define INIT_FPE \ +do \ + { \ + struct kernel_sigaction kact; \ + memset (&kact, 0, sizeof (kact)); \ + kact.k_sa_handler = catch_fpe; \ + if (syscall (SYS_rt_sigaction, SIGFPE, &kact, NULL, 8) != 0) \ + __asm__ __volatile__ (".long 0"); \ + } \ +while (0) +#endif + +#endif /* JAVA_SIGNAL_H */ diff --git a/libjava/include/s390-signal.h b/libjava/include/s390-signal.h new file mode 100644 index 000000000..4ca4c1088 --- /dev/null +++ b/libjava/include/s390-signal.h @@ -0,0 +1,288 @@ +// s390-signal.h - Catch runtime signals and turn them into exceptions +// on an s390 based Linux system. + +/* Copyright (C) 2002, 2010 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + + +#ifndef JAVA_SIGNAL_H +#define JAVA_SIGNAL_H 1 + +#include <signal.h> +#include <sys/syscall.h> +#include <ucontext.h> +#include <limits.h> + +#define HANDLE_SEGV 1 +#define HANDLE_FPE 1 + +#define SIGNAL_HANDLER(_name) \ +static void _name (int, siginfo_t *_si __attribute__((unused)), \ + ucontext_t *_uc __attribute__((unused))) + +/* We no longer need to fiddle with the PSW address in the signal handler; + this is now all handled correctly in MD_FALLBACK_FRAME_STATE_FOR. */ +#define MAKE_THROW_FRAME(_exception) + + +/* According to the JVM spec, "if the dividend is the negative integer + of the smallest magnitude and the divisor is -1, then overflow occurs + and the result is equal to the dividend. Despite the overflow, no + exception occurs". + + We handle this by inspecting the instruction which generated the signal, + and if dividend and divisor are as above, we simply return from the signal + handler. This causes execution to continue after the instruction. + Before returning, we the set result registers as expected. */ +#define UC_EXTENDED 0x00000001 + +#define HANDLE_DIVIDE_OVERFLOW \ +do \ +{ \ + unsigned char *_eip = (unsigned char *) \ + __builtin_extract_return_addr (_si->si_addr); \ + unsigned long *_regs = _uc->uc_mcontext.gregs; \ + int _r1, _r2, _d2, _x2, _b2; \ + struct \ + { \ + unsigned long int uc_flags; \ + struct ucontext *uc_link; \ + stack_t uc_stack; \ + mcontext_t uc_mcontext; \ + unsigned long sigmask[2]; \ + unsigned long ext_regs[16]; \ + } *_uc_ext = (typeof(_uc_ext))_uc; \ + \ + /* First, a couple of helper routines to decode instructions. */ \ + struct _decode \ + { \ + /* Decode RR instruction format. */ \ + static inline int _is_rr (unsigned char *_eip, \ + unsigned char _op, \ + int *_r1, int *_r2) \ + { \ + if (_eip[0] == _op) \ + { \ + *_r1 = _eip[1] >> 4; \ + *_r2 = _eip[1] & 0xf; \ + return 1; \ + } \ + return 0; \ + } \ + \ + /* Decode RX instruction format. */ \ + static inline int _is_rx (unsigned char *_eip, \ + unsigned char _op, \ + int *_r1, int *_d2, int *_x2, int *_b2) \ + { \ + if (_eip[0] == _op) \ + { \ + *_r1 = _eip[1] >> 4; \ + *_x2 = _eip[1] & 0xf; \ + *_b2 = _eip[2] >> 4; \ + *_d2 = ((_eip[2] & 0xf) << 8) + _eip[3]; \ + return 1; \ + } \ + return 0; \ + } \ + \ + /* Decode RRE instruction format. */ \ + static inline int _is_rre (unsigned char *_eip, \ + unsigned char _op1, unsigned char _op2,\ + int *_r1, int *_r2) \ + { \ + if (_eip[0] == _op1 && _eip[1] == _op2) \ + { \ + *_r1 = _eip[3] >> 4; \ + *_r2 = _eip[3] & 0xf; \ + return 1; \ + } \ + return 0; \ + } \ + \ + /* Decode RXY instruction format. */ \ + static inline int _is_rxy (unsigned char *_eip, \ + unsigned char _op1, unsigned char _op2,\ + int *_r1, int *_d2, int *_x2, int *_b2)\ + { \ + if (_eip[0] == _op1 && _eip[5] == _op2) \ + { \ + *_r1 = _eip[1] >> 4; \ + *_x2 = _eip[1] & 0xf; \ + *_b2 = _eip[2] >> 4; \ + *_d2 = ((_eip[2] & 0xf) << 8) + _eip[3] + (_eip[4] << 12); \ + /* We have a 20-bit signed displacement. */ \ + *_d2 = (*_d2 ^ 0x80000) - 0x80000; \ + return 1; \ + } \ + return 0; \ + } \ + \ + /* Compute effective address. */ \ + static inline unsigned long _eff (unsigned long *_regs, \ + long _d, int _x, int _b) \ + { \ + return _d + (_x? _regs[_x] : 0) + (_b? _regs[_b] : 0); \ + } \ + \ + static inline int is_long_long_min_p (unsigned long *_regs, \ + unsigned long *_ext_regs, \ + int _r) \ + { \ + return ((long long)_regs[_r] \ + | (long long)_ext_regs[_r] << 32) == \ + LONG_LONG_MIN; \ + } \ + }; \ + \ + /* DR r1,r2 */ \ + if (_decode::_is_rr (_eip, 0x1d, &_r1, &_r2) \ + && (int) _regs[_r1] == -1 && (int) _regs[_r1+1] == INT_MIN \ + && (int) _regs[_r2] == -1) \ + { \ + _regs[_r1] &= ~0xffffffff; \ + return; \ + } \ + \ + /* D r1,d2(x2,b2) */ \ + if (_decode::_is_rx (_eip, 0x5d, &_r1, &_d2, &_x2, &_b2) \ + && (int) _regs[_r1] == -1 && (int) _regs[_r1+1] == INT_MIN \ + && *(int *) _decode::_eff (_regs, _d2, _x2, _b2) == -1) \ + { \ + _regs[_r1] &= ~0xffffffff; \ + return; \ + } \ + \ + /* DSGR r1,r2 */ \ + if (_decode::_is_rre (_eip, 0xb9, 0x0d, &_r1, &_r2) \ + && (long) _regs[_r1+1] == LONG_MIN \ + && (long) _regs[_r2] == -1L) \ + { \ + _regs[_r1] = 0; \ + return; \ + } \ + \ + /* DSGFR r1,r2 */ \ + if (_decode::_is_rre (_eip, 0xb9, 0x1d, &_r1, &_r2) \ + && (long) _regs[_r1+1] == LONG_MIN \ + && (int) _regs[_r2] == -1) \ + { \ + _regs[_r1] = 0; \ + return; \ + } \ + \ + /* DSG r1,d2(x2,b2) */ \ + if (_decode::_is_rxy (_eip, 0xe3, 0x0d, &_r1, &_d2, &_x2, &_b2) \ + && (long) _regs[_r1+1] == LONG_MIN \ + && *(long *) _decode::_eff (_regs, _d2, _x2, _b2) == -1L) \ + { \ + _regs[_r1] = 0; \ + return; \ + } \ + \ + /* DSGF r1,d2(x2,b2) */ \ + if (_decode::_is_rxy (_eip, 0xe3, 0x1d, &_r1, &_d2, &_x2, &_b2) \ + && (long) _regs[_r1+1] == LONG_MIN \ + && *(int *) _decode::_eff (_regs, _d2, _x2, _b2) == -1) \ + { \ + _regs[_r1] = 0; \ + return; \ + } \ + \ + /* The extended ucontext contains the upper halfs of the 64bit \ + registers in 31bit applications. */ \ + if (_uc->uc_flags & 1 == 1) \ + { \ + /* DSGR r1,r2 */ \ + if (_decode::_is_rre (_eip, 0xb9, 0x0d, &_r1, &_r2) \ + && (int) _regs[_r2] == -1 \ + && (int) _uc_ext->ext_regs[_r2] == -1 \ + && _decode::is_long_long_min_p (_regs, _uc_ext->ext_regs, \ + _r1 + 1)) \ + { \ + _regs[_r1] = 0; \ + _uc_ext->ext_regs[_r1] = 0; \ + return; \ + } \ + \ + /* DSGFR r1,r2 */ \ + if (_decode::_is_rre (_eip, 0xb9, 0x1d, &_r1, &_r2) \ + && (int) _regs[_r2] == -1 \ + && _decode::is_long_long_min_p (_regs, _uc_ext->ext_regs, \ + _r1 + 1)) \ + { \ + _regs[_r1] = 0; \ + _uc_ext->ext_regs[_r1] = 0; \ + return; \ + } \ + \ + /* DSG r1,d2(x2,b2) */ \ + if (_decode::_is_rxy (_eip, 0xe3, 0x0d, &_r1, &_d2, &_x2, &_b2) \ + && *(int *) _decode::_eff (_regs, _d2, _x2, _b2) == -1 \ + && *(int *) _decode::_eff (_regs, _d2 + 4, _x2, _b2) == -1 \ + && _decode::is_long_long_min_p (_regs, _uc_ext->ext_regs, \ + _r1 + 1)) \ + { \ + _regs[_r1] = 0; \ + _uc_ext->ext_regs[_r1] = 0; \ + return; \ + } \ + \ + /* DSGF r1,d2(x2,b2) */ \ + if (_decode::_is_rxy (_eip, 0xe3, 0x1d, &_r1, &_d2, &_x2, &_b2) \ + && *(int *) _decode::_eff (_regs, _d2, _x2, _b2) == -1 \ + && _decode::is_long_long_min_p (_regs, _uc_ext->ext_regs, \ + _r1 + 1)) \ + { \ + _regs[_r1] = 0; \ + _uc_ext->ext_regs[_r1] = 0; \ + return; \ + } \ + } \ + } \ +while (0) + +/* For an explanation why we cannot simply use sigaction to + install the handlers, see i386-signal.h. */ + +/* We use old_kernel_sigaction here because we're calling the kernel + directly rather than via glibc. The sigaction structure that the + syscall uses is a different shape from the one in userland and not + visible to us in a header file so we define it here. */ + +struct old_s390_kernel_sigaction { + void (*k_sa_handler) (int, siginfo_t *, ucontext_t *); + unsigned long k_sa_mask; + unsigned long k_sa_flags; + void (*sa_restorer) (void); +}; + +#define INIT_SEGV \ +do \ + { \ + struct old_s390_kernel_sigaction kact; \ + kact.k_sa_handler = catch_segv; \ + kact.k_sa_mask = 0; \ + kact.k_sa_flags = SA_SIGINFO; \ + syscall (SYS_sigaction, SIGSEGV, &kact, NULL); \ + } \ +while (0) + +#define INIT_FPE \ +do \ + { \ + struct old_s390_kernel_sigaction kact; \ + kact.k_sa_handler = catch_fpe; \ + kact.k_sa_mask = 0; \ + kact.k_sa_flags = SA_SIGINFO; \ + syscall (SYS_sigaction, SIGFPE, &kact, NULL); \ + } \ +while (0) + +#endif /* JAVA_SIGNAL_H */ + diff --git a/libjava/include/sh-signal.h b/libjava/include/sh-signal.h new file mode 100644 index 000000000..3a96ce25f --- /dev/null +++ b/libjava/include/sh-signal.h @@ -0,0 +1,75 @@ +// sh-signal.h - Catch runtime signals and turn them into exceptions +// on a SuperH based Linux system. + +/* Copyright (C) 2004, 2006 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + + +#ifndef JAVA_SIGNAL_H +#define JAVA_SIGNAL_H 1 + +#include <signal.h> +#include <sys/syscall.h> + +#define HANDLE_SEGV 1 +#define HANDLE_FPE 1 + +/* The third parameter to the signal handler points to something with + * this structure defined in asm/ucontext.h, but the name clashes with + * struct ucontext from sys/ucontext.h so this private copy is used. */ +typedef struct _sig_ucontext { + unsigned long uc_flags; + struct _sig_ucontext *uc_link; + stack_t uc_stack; + struct sigcontext uc_mcontext; + sigset_t uc_sigmask; +} sig_ucontext_t; + +#define SIGNAL_HANDLER(_name) \ + static void _name (int , siginfo_t *, sig_ucontext_t *_uc) + +#define MAKE_THROW_FRAME(_exception) + +/* For an explanation why we cannot simply use sigaction to + install the handlers, see i386-signal.h. */ + +/* We use kernel_old_sigaction here because we're calling the kernel + directly rather than via glibc. The sigaction structure that the + syscall uses is a different shape from the one in userland and not + visible to us in a header file so we define it here. */ + +struct kernel_old_sigaction { + void (*k_sa_handler) (int, siginfo_t *, sig_ucontext_t *); + unsigned long k_sa_mask; + unsigned long k_sa_flags; + void (*k_sa_restorer) (void); +}; + +#define INIT_SEGV \ +do \ + { \ + struct kernel_old_sigaction kact; \ + kact.k_sa_handler = catch_segv; \ + kact.k_sa_mask = 0; \ + kact.k_sa_flags = SA_SIGINFO | SA_NODEFER; \ + syscall (SYS_sigaction, SIGSEGV, &kact, NULL); \ + } \ +while (0) + +#define INIT_FPE \ +do \ + { \ + struct kernel_old_sigaction kact; \ + kact.k_sa_handler = catch_fpe; \ + kact.k_sa_mask = 0; \ + kact.k_sa_flags = SA_SIGINFO | SA_NODEFER; \ + syscall (SYS_sigaction, SIGFPE, &kact, NULL); \ + } \ +while (0) + +#endif /* JAVA_SIGNAL_H */ diff --git a/libjava/include/solaris-signal.h b/libjava/include/solaris-signal.h new file mode 100644 index 000000000..a936afe06 --- /dev/null +++ b/libjava/include/solaris-signal.h @@ -0,0 +1,48 @@ +// sparc-signal.h - Catch runtime signals and turn them into exceptions. + +/* Copyright (C) 1998, 1999, 2000, 2009 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#ifndef JAVA_SIGNAL_H +#define JAVA_SIGNAL_H 1 + +#include <signal.h> + +#define HANDLE_SEGV 1 +#define HANDLE_FPE 1 + +#define SIGNAL_HANDLER(_name) \ +static void _Jv_##_name (int, \ + siginfo_t *_si __attribute__ ((__unused__)), \ + void *_uc __attribute__ ((__unused__))) + +#define MAKE_THROW_FRAME(_exception) + +#define INIT_SEGV \ +do \ + { \ + struct sigaction act; \ + act.sa_sigaction = _Jv_catch_segv; \ + act.sa_flags = SA_SIGINFO | SA_NODEFER; \ + sigemptyset (&act.sa_mask); \ + sigaction (SIGSEGV, &act, NULL); \ + } \ +while (0) + +#define INIT_FPE \ +do \ + { \ + struct sigaction act; \ + act.sa_sigaction = _Jv_catch_fpe; \ + act.sa_flags = SA_SIGINFO | SA_NODEFER; \ + sigemptyset (&act.sa_mask); \ + sigaction (SIGFPE, &act, NULL); \ + } \ +while (0) + +#endif /* JAVA_SIGNAL_H */ diff --git a/libjava/include/stamp-h.in b/libjava/include/stamp-h.in new file mode 100644 index 000000000..9788f7023 --- /dev/null +++ b/libjava/include/stamp-h.in @@ -0,0 +1 @@ +timestamp diff --git a/libjava/include/win32-signal.h b/libjava/include/win32-signal.h new file mode 100644 index 000000000..8d8a9e2d5 --- /dev/null +++ b/libjava/include/win32-signal.h @@ -0,0 +1,40 @@ +// win32-signal.h - Catch runtime signals and turn them into exceptions. + +/* Copyright (C) 1998, 1999, 2000 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +// Exception handling is done totally differently on Win32 this stuff +// just keeps it compatible + +#ifndef JAVA_SIGNAL_H +#define JAVA_SIGNAL_H 1 + +#define HANDLE_SEGV 1 +#define HANDLE_FPE 1 + +#define SIGNAL_HANDLER(_name) \ +static void _name (int _dummy) + +#define MAKE_THROW_FRAME(_exception) do {} while (0) +#define HANDLE_DIVIDE_OVERFLOW do {} while (0) + +#define INIT_SEGV \ +do \ + { \ + } \ +while (0) + + +#define INIT_FPE \ +do \ + { \ + } \ +while (0) + + +#endif /* JAVA_SIGNAL_H */ diff --git a/libjava/include/win32-threads.h b/libjava/include/win32-threads.h new file mode 100644 index 000000000..b8f70f5cb --- /dev/null +++ b/libjava/include/win32-threads.h @@ -0,0 +1,232 @@ +// -*- c++ -*- +// win32-threads.h - Defines for using Win32 threads. + +/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2006 Free Software + Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#ifndef __JV_WIN32_THREADS__ +#define __JV_WIN32_THREADS__ + +#define WIN32_LEAN_AND_MEAN +#include <windows.h> + +// +// Typedefs. +// + +typedef struct +{ + // ev[0] (signal) is a Win32 auto-reset event for _Jv_CondNotify + // ev[1] (broadcast) is a Win32 manual-reset event for _Jv_CondNotifyAll + HANDLE ev[2]; + + // Number of threads waiting on this condition variable + int blocked_count; + + // Protects access to the blocked_count variable + CRITICAL_SECTION count_mutex; + +} _Jv_ConditionVariable_t; + +typedef struct +{ + // The thread-id of the owner thread if any, 0 otherwise + DWORD owner; + + // Track nested mutex acquisitions by the same thread + int refcount; + + // The actual Windows construct used to implement this mutex + CRITICAL_SECTION cs; + +} _Jv_Mutex_t; + +typedef struct _Jv_Thread_t +{ + int flags; // Flags are defined in implementation. + HANDLE handle; // Actual handle to the thread + + // Protects access to the thread's interrupt_flag and + // interrupt_event variables within this module. + CRITICAL_SECTION interrupt_mutex; + + // A Win32 auto-reset event for thread interruption + HANDLE interrupt_event; + + java::lang::Thread *thread_obj; +} _Jv_Thread_t; + +typedef DWORD _Jv_ThreadId_t; + +inline _Jv_ThreadId_t +_Jv_ThreadSelf (void) +{ + return GetCurrentThreadId(); +} + +typedef void _Jv_ThreadStartFunc (java::lang::Thread *); + +// Type identifying a win32 thread. +typedef HANDLE _Jv_ThreadDesc_t; + +inline _Jv_ThreadDesc_t +_Jv_GetPlatformThreadID(_Jv_Thread_t *t) +{ + return t->handle; +} + +// +// Condition variables. +// + +#define _Jv_HaveCondDestroy +int _Jv_CondWait (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *mu, jlong millis, jint nanos); +void _Jv_CondInit (_Jv_ConditionVariable_t *cv); +void _Jv_CondDestroy (_Jv_ConditionVariable_t *cv); +int _Jv_CondNotify (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *); +int _Jv_CondNotifyAll (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *); + +// +// Mutexes. +// We use CRITICAL_SECTIONs instead of CreateMutex() for better performance +// + +// Returns 0 if the mutex lock is held by the current thread, and 1 otherwise. +inline int _Jv_MutexCheckMonitor (_Jv_Mutex_t *mu) +{ + return (mu->owner != GetCurrentThreadId ( )); +} + +inline void _Jv_MutexInit (_Jv_Mutex_t *mu) +{ + mu->owner = 0UL; + mu->refcount = 0; + InitializeCriticalSection (&(mu->cs)); +} + +#define _Jv_HaveMutexDestroy +inline void _Jv_MutexDestroy (_Jv_Mutex_t *mu) +{ + mu->owner = 0UL; + mu->refcount = 0; + DeleteCriticalSection (&(mu->cs)); + mu = NULL; +} + +inline int _Jv_MutexUnlock (_Jv_Mutex_t *mu) +{ + if (mu->owner == GetCurrentThreadId ( )) + { + mu->refcount--; + if (mu->refcount == 0) + mu->owner = 0UL; + LeaveCriticalSection (&(mu->cs)); + return 0; + } + else + return 1; +} + +inline int _Jv_MutexLock (_Jv_Mutex_t *mu) +{ + EnterCriticalSection (&(mu->cs)); + mu->owner = GetCurrentThreadId ( ); + mu->refcount++; + return 0; +} + +// +// Thread creation and manipulation. +// + +void _Jv_InitThreads (void); +_Jv_Thread_t *_Jv_ThreadInitData (java::lang::Thread *thread); +void _Jv_ThreadDestroyData (_Jv_Thread_t *data); + +inline java::lang::Thread* _Jv_ThreadCurrent (void) +{ + extern DWORD _Jv_ThreadKey; + return (java::lang::Thread *) TlsGetValue(_Jv_ThreadKey); +} + +inline _Jv_Thread_t *_Jv_ThreadCurrentData(void) +{ + extern DWORD _Jv_ThreadDataKey; + return (_Jv_Thread_t *) TlsGetValue(_Jv_ThreadDataKey); +} + +inline void _Jv_ThreadYield (void) +{ + Sleep (0); +} + +void _Jv_ThreadRegister (_Jv_Thread_t *data); +void _Jv_ThreadUnRegister (); + +void _Jv_ThreadSetPriority (_Jv_Thread_t *data, jint prio); +void _Jv_ThreadStart (java::lang::Thread *thread, _Jv_Thread_t *data, + _Jv_ThreadStartFunc *meth); +void _Jv_ThreadWait (void); +void _Jv_ThreadInterrupt (_Jv_Thread_t *data); + +// +// Thread interruption support +// + +// Gets the auto-reset event for the current thread which is +// signalled by _Jv_ThreadInterrupt. The caller can wait on this +// event in addition to other waitable objects. +// +// NOTE: After waiting on this event with WaitForMultipleObjects, +// you should ALWAYS use the return value of WaitForMultipleObjects +// to test whether this event was signalled and whether thread +// interruption has occurred. You should do this instead of checking +// the thread's interrupted_flag, because someone could have reset +// this flag in the interval of time between the return of +// WaitForMultipleObjects and the time you query interrupted_flag. +// See java/lang/natWin32Process.cc (waitFor) for an example. +HANDLE _Jv_Win32GetInterruptEvent (void); + +// park() / unpark() support + +struct ParkHelper +{ + // We use LONG instead of obj_addr_t to avoid pulling in locks.h, + // which depends on size_t, ... + volatile LONG permit; + + // The critical section is used for lazy initialization of our event + CRITICAL_SECTION cs; + HANDLE event; + + void init (); + void deactivate (); + void destroy (); + void park (jboolean isAbsolute, jlong time); + void unpark (); + +private: + void init_event(); +}; + +// Remove defines from <windows.h> that conflict with various things in libgcj code + +#undef TRUE +#undef FALSE +#undef MAX_PRIORITY +#undef MIN_PRIORITY +#undef min +#undef max +#undef interface +#undef STRICT +#undef VOID +#undef TEXT +#undef OUT + +#endif /* __JV_WIN32_THREADS__ */ diff --git a/libjava/include/win32.h b/libjava/include/win32.h new file mode 100644 index 000000000..48989fe3d --- /dev/null +++ b/libjava/include/win32.h @@ -0,0 +1,188 @@ +// win32.h -- Helper functions for Microsoft-flavored OSs. + +/* Copyright (C) 2002, 2003, 2006 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + +#ifndef __JV_WIN32_H__ +#define __JV_WIN32_H__ + +// Enable UNICODE support? + +#ifdef MINGW_LIBGCJ_UNICODE +#define UNICODE +#define _UNICODE +#endif // MINGW_LIBGCJ_UNICODE + +#include <tchar.h> + +// Includes +#define WIN32_LEAN_AND_MEAN +// Force Winsock 2 interface. +#include <winsock2.h> +#include <windows.h> +#undef WIN32_LEAN_AND_MEAN +#undef STRICT + +#include <ws2tcpip.h> +#include <gcj/cni.h> +#include <jvm.h> +#include <java/util/Properties.h> + +#include <io.h> + +/* Begin UNICODE Support Classes and Functions */ + +/* Helper class which creates a temporary, null-terminated, + wide-character C string. */ +class _Jv_Win32TempString +{ +public: + _Jv_Win32TempString(jstring jstr); + ~_Jv_Win32TempString(); + +// Accessors + operator LPCTSTR() const + { + return buf_; + } + LPCTSTR buf() const + { + return buf_; + } + LPTSTR buf() + { + return buf_; + } + +private: + TCHAR stackbuf_[500]; + LPTSTR buf_; +}; + +// Mimics the JV_TEMP_STRING_UTF macro in jvm.h +#define JV_TEMP_STRING_WIN32(x,y) _Jv_Win32TempString x(y); + +// Creates a jstring from a LPCTSTR +extern jstring _Jv_Win32NewString (LPCTSTR pcsz); + +/* End UNICODE Helpers */ + +// Prefix and suffix for shared libraries. +#define _Jv_platform_solib_prefix "" +#define _Jv_platform_solib_suffix ".dll" + +// Name of the Process implementation. +#define _Jv_platform_process ::java::lang::Win32Process + +// Separator for file name components. +#define _Jv_platform_file_separator ((jchar) '\\') +// Separator for path components. +#define _Jv_platform_path_separator ((jchar) ';') + +// List of names for `JNI_OnLoad'. On Win32, JNI_OnLoad is an +// "stdcall" function taking two pointers (8 bytes) as arguments. It +// could also have been exported as "JNI_OnLoad@8" (MinGW) or +// "_JNI_OnLoad@8" (MSVC). +#define _Jv_platform_onload_names \ + { "JNI_OnLoad", "JNI_OnLoad@8", "_JNI_OnLoad@8", NULL } + +// Type of libffi ABI used by JNICALL methods. NOTE: This must agree +// with the JNICALL definition in jni.h +#define _Jv_platform_ffi_abi FFI_STDCALL + +/* Useful helper classes and methods. */ + +/* A C++ wrapper around a WSAEVENT which closes the event + in its destructor. If dwSelFlags is non-zero, we also + issue an WSAEventSelect on the socket descriptor with + the given flags; this is undone by a corresponding call + to WSAEventSelect(fd, 0, 0) in our destructor. */ +class WSAEventWrapper +{ +public: + // Default constructor. Call init() after this. + WSAEventWrapper(); + WSAEventWrapper(int fd, DWORD dwSelFlags); + ~WSAEventWrapper(); + + // Used for two-step initialization after calling + // default constructor. + void init(int fd, DWORD dwSelFlags); + + int getFD() + { + return m_fd; + } + + WSAEVENT getEventHandle() + { + return m_hEvent; + } + +private: + WSAEVENT m_hEvent; + int m_fd; + DWORD m_dwSelFlags; +}; + +// Error string text. The int argument is compatible +// with both int WSAGetLastError() and DWORD GetLastError() +// I tried avoiding having to pass the error explicitly, but +// it didn't work this was invoked with say +// throw new SomeException(_Jv_WinStrError()). +extern jstring +_Jv_WinStrError (LPCTSTR lpszPrologue, int nErrorCode); + +extern jstring +_Jv_WinStrError (int nErrorCode); + +extern void +_Jv_ThrowIOException (DWORD dwErrorCode); + +extern void +_Jv_ThrowIOException (); + +extern void +_Jv_ThrowSocketException (DWORD dwErrorCode); + +extern void +_Jv_ThrowSocketException (); + +// Platform implementation +extern void _Jv_platform_initialize (void); +extern void _Jv_platform_initProperties (java::util::Properties*); +extern jlong _Jv_platform_gettimeofday (); +extern jlong _Jv_platform_nanotime (); +extern int _Jv_pipe (int filedes[2]); + +extern void +_Jv_platform_close_on_exec (HANDLE h); + +#ifdef JV_HASH_SYNCHRONIZATION +/* Suspends the execution of the current thread for the specified + number of microseconds. Tries to emulate the behaviour of usleep() + on UNIX and provides a granularity of 1 millisecond. */ +inline void +_Jv_platform_usleep (unsigned long usecs) +{ + if (usecs > 0UL) + { + unsigned long millis = ((usecs + 999UL) / 1000UL); + Sleep (millis); + } +} +#endif /* JV_HASH_SYNCHRONIZATION */ + +// Forward declaration. See java-stack.h for definition. +struct _Jv_AddrInfo; + +// Given an address, determine the executable or shared object that defines +// it and the nearest named symbol. +extern int _Jv_platform_dladdr (void *addr, _Jv_AddrInfo *info); + +#endif /* __JV_WIN32_H__ */ diff --git a/libjava/include/x86_64-signal.h b/libjava/include/x86_64-signal.h new file mode 100644 index 000000000..4bd8a3601 --- /dev/null +++ b/libjava/include/x86_64-signal.h @@ -0,0 +1,181 @@ +// x86_64-signal.h - Catch runtime signals and turn them into exceptions +// on an x86_64 based GNU/Linux system. + +/* Copyright (C) 2003, 2006, 2007 Free Software Foundation + + This file is part of libgcj. + +This software is copyrighted work licensed under the terms of the +Libgcj License. Please consult the file "LIBGCJ_LICENSE" for +details. */ + + +#ifdef __x86_64__ + +#ifndef JAVA_SIGNAL_H +#define JAVA_SIGNAL_H 1 + +#include <signal.h> +#include <sys/syscall.h> + +#define HANDLE_SEGV 1 +#define HANDLE_FPE 1 + +#define SIGNAL_HANDLER(_name) \ +static void _Jv_##_name (int, siginfo_t *, \ + void *_p __attribute__ ((__unused__))) + +#define HANDLE_DIVIDE_OVERFLOW \ +do \ +{ \ + struct ucontext *_uc = (struct ucontext *)_p; \ + gregset_t &_gregs = _uc->uc_mcontext.gregs; \ + unsigned char *_rip = (unsigned char *)_gregs[REG_RIP]; \ + \ + /* According to the JVM spec, "if the dividend is the negative \ + * integer of largest possible magnitude for the type and the \ + * divisor is -1, then overflow occurs and the result is equal to \ + * the dividend. Despite the overflow, no exception occurs". \ + \ + * We handle this by inspecting the instruction which generated the \ + * signal and advancing ip to point to the following instruction. \ + * As the instructions are variable length it is necessary to do a \ + * little calculation to figure out where the following instruction \ + * actually is. \ + \ + */ \ + \ + bool _is_64_bit = false; \ + \ + if ((_rip[0] & 0xf0) == 0x40) /* REX byte present. */ \ + { \ + unsigned char _rex = _rip[0] & 0x0f; \ + _is_64_bit = (_rex & 0x08) != 0; \ + _rip++; \ + } \ + \ + /* Detect a signed division of Integer.MIN_VALUE or Long.MIN_VALUE. */ \ + if (_rip[0] == 0xf7) \ + { \ + bool _min_value_dividend = false; \ + unsigned char _modrm = _rip[1]; \ + \ + if (((_modrm >> 3) & 7) == 7) \ + { \ + if (_is_64_bit) \ + _min_value_dividend = \ + _gregs[REG_RAX] == (greg_t)0x8000000000000000UL; \ + else \ + _min_value_dividend = \ + (_gregs[REG_RAX] & 0xffffffff) == (greg_t)0x80000000UL; \ + } \ + \ + if (_min_value_dividend) \ + { \ + unsigned char _rm = _modrm & 7; \ + _gregs[REG_RDX] = 0; /* the remainder is zero */ \ + switch (_modrm >> 6) \ + { \ + case 0: /* register indirect */ \ + if (_rm == 5) /* 32-bit displacement */ \ + _rip += 4; \ + if (_rm == 4) /* A SIB byte follows the ModR/M byte */ \ + _rip += 1; \ + break; \ + case 1: /* register indirect + 8-bit displacement */ \ + _rip += 1; \ + if (_rm == 4) /* A SIB byte follows the ModR/M byte */ \ + _rip += 1; \ + break; \ + case 2: /* register indirect + 32-bit displacement */ \ + _rip += 4; \ + if (_rm == 4) /* A SIB byte follows the ModR/M byte */ \ + _rip += 1; \ + break; \ + case 3: \ + break; \ + } \ + _rip += 2; \ + _gregs[REG_RIP] = (greg_t)_rip; \ + return; \ + } \ + } \ +} \ +while (0) + +extern "C" +{ + struct kernel_sigaction + { + void (*k_sa_sigaction)(int,siginfo_t *,void *); + unsigned long k_sa_flags; + void (*k_sa_restorer) (void); + sigset_t k_sa_mask; + }; +} + +#define MAKE_THROW_FRAME(_exception) + +#define RESTORE(name, syscall) RESTORE2 (name, syscall) +#define RESTORE2(name, syscall) \ +asm \ + ( \ + ".text\n" \ + ".byte 0 # Yes, this really is necessary\n" \ + ".align 16\n" \ + "__" #name ":\n" \ + " movq $" #syscall ", %rax\n" \ + " syscall\n" \ + ); + +/* The return code for realtime-signals. */ +RESTORE (restore_rt, __NR_rt_sigreturn) +void restore_rt (void) asm ("__restore_rt") + __attribute__ ((visibility ("hidden"))); + +#define INIT_SEGV \ +do \ + { \ + struct kernel_sigaction act; \ + act.k_sa_sigaction = _Jv_catch_segv; \ + sigemptyset (&act.k_sa_mask); \ + act.k_sa_flags = SA_SIGINFO|0x4000000; \ + act.k_sa_restorer = restore_rt; \ + syscall (SYS_rt_sigaction, SIGSEGV, &act, NULL, _NSIG / 8); \ + } \ +while (0) + +#define INIT_FPE \ +do \ + { \ + struct kernel_sigaction act; \ + act.k_sa_sigaction = _Jv_catch_fpe; \ + sigemptyset (&act.k_sa_mask); \ + act.k_sa_flags = SA_SIGINFO|0x4000000; \ + act.k_sa_restorer = restore_rt; \ + syscall (SYS_rt_sigaction, SIGFPE, &act, NULL, _NSIG / 8); \ + } \ +while (0) + +/* You might wonder why we use syscall(SYS_sigaction) in INIT_FPE + * instead of the standard sigaction(). This is necessary because of + * the shenanigans above where we increment the PC saved in the + * context and then return. This trick will only work when we are + * called _directly_ by the kernel, because linuxthreads wraps signal + * handlers and its wrappers do not copy the sigcontext struct back + * when returning from a signal handler. If we return from our divide + * handler to a linuxthreads wrapper, we will lose the PC adjustment + * we made and return to the faulting instruction again. Using + * syscall(SYS_sigaction) causes our handler to be called directly + * by the kernel, bypassing any wrappers. */ + +#endif /* JAVA_SIGNAL_H */ + +#else /* __x86_64__ */ + +/* This is for the 32-bit subsystem on x86-64. */ + +#define sigcontext_struct sigcontext +#include <java-signal-aux.h> + +#endif /* __x86_64__ */ |